About the Author
Mass Effect
Final Fantasy X
Batman:Arkham City
Borderlands Series
Weekly Column
Champions Online
World of Warcraft
DM of the Rings
Good Robot
Project Frontier
Forums
"Music"



Unity Week #8: Some Thoughts on Variable Names

By Shamus
on Thursday May 24, 2018
Filed under:
Programming

Like I said over the weekend, my series on Grand Theft Auto 5 has been delayed. But I can’t bear to leave the Thursday spot blank, so here are some meandering, dashed-off thoughts on the problem of variable naming in C#. To be clear, the problems are mostly with me and not C#. Specifically, switching languages is forcing me to shift my coding standards a little.

For years I worked for a company with a mature (meaning large and resistant to sweeping changes) codebase. In 1993 or so it began as a pure vanilla C project, but sometime around the turn of the century we began migrating to C++ while disrupting the existing code and coding style as little as possible. C and C++ are different languages and the practitioners of each language often have very different ideas about how code should be formatted. Since our codebase was a hybrid, our formatting standards were a slightly strange and anachronistic blend of old and new. Since I used these standards for years, they eventually became part of my personal style. I wasn’t even really a fan of the standards, but after you look at one particular style of formatting for a decade or so, everything else starts to look a little strange.

Let’s look at an example. Earlier in the week I created a SpaceMarine class. Here is how that class might look in C++:

Continue reading »


 
 
Comments (61)



The Witcher 3: The Good Ladies and Keira Metz

By Bob Case
on Wednesday May 23, 2018
Filed under:
Video Games

This week I want to cover a few different topics, with my comments on each.

 

The Crones of Crookback Bog

The Bloody Baron got more press, but to me personally, Geralt’s interactions with the Crones (and the even more mysterious being they deposed, so mysterious that fans usually refer to it as just “the thing in the tree”) are the highlight of Velen.

For those that don’t know, the Crones are the beings Anna Strenger went to for help when she was pregnant with the Baron’s child. They’re three… things. Witches? (Demi)gods? Former Druids? It’s not clear, but whatever they are, they’re powerful and extremely unsettling.

Left to right: Whispess, Brewess, and Weavess.

Left to right: Whispess, Brewess, and Weavess.

This, to me, is top-notch character design. Even after having seen this scene before, playing it this time creeped me out all over again – the wicker cage thing over Brewess’ face, the twitchy, almost insect-like movements of Weavess, the profoundly obscene way that she strokes the severed legs she has strapped to her belt, Whispess’ necklace of severed ears… and the music, too. Even going back to the orphanage after the quest is over, hearing the music makes me nervous. (Here’s a link if you feel like listening.) The game’s composer is a man named¬†Marcin Przybylowicz, and as Nobuo Uematsu (composer for the Final Fantasy series) is celebrated for his work, so should¬†Przybylowicz be if you ask me. Eastern European folk music is rich ore to mine, and he mines it well. I think more of this game’s unique mood comes from its music than people realize.

Continue reading »


 
 
Comments (88)



Unity Week #7: Why Would You Want to do That?

By Shamus
on Tuesday May 22, 2018
Filed under:
Programming

“Huh. I’m keeping an awful lot of these widget objects in memory. I need them while generating the scene, and I occasionally need them later, but once the game is running they’re mostly just taking up memory. I wonder if it would be better to keep them around all the time, or throw them away once I’m done making the scene and re-create them if they’re needed later?”

Let’s assume, for the sake of argument, that these objects have a non-trivial size and also require a non-trivial bit of processing power to create. We create lots of them, we use most of them at startup, and then as the program runs we occasionally need a few of them. (But we can’t predict which ones ahead of time.)

This is a classic memory vs. CPU performance problem. If we had infinite memory, then there would never be a reason to get rid of these temporary objects. If we had infinite processing power and could re-create the objects for free, then there would be no reason to keep them around. But in this universe both of these resources are finite, so we need to study the problem to know what the right thing to do is.

So I’m writing a program in C# and I need to know how big something is in memory. In C++ I would just call sizeof (thing) and it would tell me how many bytes of memory thing is usingYes, you have to make sure you’re getting the size of things and not pointers, which means you might need to step down through the object hierarchy. The point is, this is easy to do.. This is a trivial operation, which means in C# it’s probably going to be a monumental pain in the ass. I do the usual Google search and as I feared I’m dropped directly into forum hell:

Continue reading »


 
 
Comments (129)



Diecast #211: More Mods, Thief vs. Thief 2

By Shamus
on Monday May 21, 2018
Filed under:
Diecast


Direct download (MP3)
Direct download (ogg Vorbis)
Podcast RSS feed.

Hosts: Paul, Shamus. Episode edited by Issac.

Show notes:
Continue reading »


 
 
Comments (58)



Grand Theft Auto V: Delay of Game

By Shamus
on Sunday May 20, 2018
Filed under:
Notices

Well this just sucks.

Maybe you were wondering where your Thursday post was last week? We recently finished up Black Desert Online, and it’s time to begin my next series. It’s supposed to be on Grand Theft Auto V, with a bit of a retrospective on the series as a whole. That’s still the plan, but I’ve had a setback.

How my workflow goes is this: Usually I play through a game a few times before doing a review. On my final playthrough, I’ll have Bandicam record all of the game footage. Then I write the review. Then I go back over the footage and gather up the screenshots and edit the whole thing together into blog posts. It’s a pretty good system and it’s served me well for the last couple of yearsBefore this, I used to take individual screenshots when it seemed like a good time. But I tended to miss a lot of stuff that way. Now I’ve got a few TB of storage so I just record everything..

Continue reading »


 
 
Comments (69)



The Witcher 3: The Bloody Baron

By Bob Case
on Wednesday May 16, 2018
Filed under:
Video Games

Last week, I had intended for this post to cover some of the game’s side content. I’ve since changed my mind – some of topics I wanted to discuss about that I’ve decided to put on hold until after I covered the main Velen quests.

The “Bloody Baron” sequence of events includes the multi-step quests “Family Matters” and “Ladies of the Wood,” which together see Geralt piece together the story of how exactly local warlord Phillip Strenger’s family was torn to pieces and came to various kinds of tragedy. It got oodles of acclaim – it won a Golden Joystick award for “Best Gaming Moment,” and both PC Gamer and Kotaku did write-ups on how it was made.

I’m of several different minds about this whole sequence. I’ve praised the Witcher games in the past for being “realistic” (in the literary sense of the word, not the literal sense), and this video covers the core of that argument if you want to know it in more detail. The Bloody Baron story meets many of my own informal criteria for realism: a believable messiness, an emphasis on the personal, events that are relatively small in scale in comparison to their surroundings, and characters who at least occasionally confound our dramatic expectations. And, broadly speaking, I like literary realism.

So I was surprised to find myself uneasy with this quest. It’s my personal – though relatively casual – belief that every good story has a moral. In some cases the moral is up-front and obvious, like with an Aesop’s fable, and in some cases the moral is complex and squirrelly enough that it defies conventional methods of explanation and can only be glimpsed through fiction. Put another way, even in literary realism, which tends to resist pat value judgments, stories are trying to say something about the world. And my personal reading of what the Bloody Baron sequence is trying to say is that the behavior of the titular character is at least partially excusable, and that perhaps the Baron shouldn’t be considered a villain at all.

Let’s look at that behavior. Our first direct contact with the Baron’s existence is at the inn we’re sent to to locate the Emperor’s spy. The village surrounding the inn is being terrorized by the Baron’s men, to the point where parents are disguising their daughters as boys in hopes of sparing them from being raped. Geralt has an encounter with them in the inn itself, and you can either fight them or talk them down.In a bit of reactivity I didn’t know the game had until recently, fighting them gets you banned from the Baron’s fort at Crow’s Perch, and you have to sneak in through a cave that leads to the bottom of the fort’s well.

No idea what this lot are on about, but I want some of whatever they're drinking.

No idea what this lot are on about, but I want some of whatever they're drinking.

Now I don’t necessarily mean to say that a commander bears full culpability far all the actions of his men in a situation like this, but surely he bears some. It’s not as though the Baron thinks the soldiers under his command are angels. In his first conversation with Geralt he says that they’re “good at pulling up the floorboards to find a peasant’s last sack of grain,”Or something like that, those may not be his exact words. so he’s apparently aware that at the very least his men are taking food from desperate people by force.

Continue reading »


 
 
Comments (73)



Pixel City Redux #6: The Distraction

By Shamus
on Tuesday May 15, 2018
Filed under:
Programming

What do you do when you want to look something up but you don’t know what it’s called? Sometimes you can just type what you know into a search engine and it will sort things out for you. I just typed “part of the car that covers the engine” and I got:

thing that you type sentence fragments into for information

thing that you type sentence fragments into for information

It’s not a perfect result. A careless reader might look at the text and think the answer is “trunk”. But it’s still really incredible that a search engine can come up with answers like this. If you’re willing to read more than the first sentence, you can find what you’re looking for, even if you don’t know what a hood was called when you started.

Sadly, things are not always this easy. Right now I know what I want to make but I don’t know what to search for. I know what it looks like and how it behaves, but not how it’s created or what you call it. In fact, I can even draw a picture of it. It looks kind of like a stained glass window. Here is one I made by hand:

Uh... Something like this.

Uh... Something like this.

You generate this by putting a bunch of points on a plane and… doing some sort of math to them. I want to use something like this to divide my city into regions. Let’s see what Google has for me:

Continue reading »


 
 
Comments (97)



Diecast #210: Mods

By Shamus
on Monday May 14, 2018
Filed under:
Diecast


Direct download (MP3)
Direct download (ogg Vorbis)
Podcast RSS feed.

Hosts: Paul, Shamus. Episode edited by Issac.

Show notes: Continue reading »


 
 
Comments (69)



Avengers Infinity War: Spoiler Party!

By Shamus
on Sunday May 13, 2018
Filed under:
Movies

On Friday I finally got to the theater and saw Avengers: THE BIG ONE. Like everyone else who’s seen it, I immediately had the urge to talk about all the most spoiler-y bits. So let’s do that. We’ll start with the ending…

Continue reading »


 
 
Comments (216)



Black Desert Online #4: The Final Straw

By Shamus
on Friday May 11, 2018
Filed under:
Retrospectives

Good combat, pretty visuals, lots of fun, blah blah. Enough screwing around. Let’s tear off this band-aid and see how bad the infection is.

Like I said last week, I was willing to put up with the lousy translation, the bad balance, the inconvenient “simulation” elements, the offensively priced cash shop, and the lack of interesting long-term goals. I guess I was just really into electrocuting huge groups of dudes and was willing to put up with a lot of nonsense to keep doing that.

Until I reached level 50…

Level 50 is PvP

I'd just refuse this quest and stay level 49 forever to explore the rest of the PvE content, but once you hit level 49, every single time you earn XP the game floods you with little BONK notification sounds and flashes a warning that you need to take this quest. It's the same sound the game uses to let you know something is WRONG. (Like your mount is being attacked.) It's maddening.
I'd just refuse this quest and stay level 49 forever to explore the rest of the PvE content, but once you hit level 49, every single time you earn XP the game floods you with little BONK notification sounds and flashes a warning that you need to take this quest. It's the same sound the game uses to let you know something is WRONG. (Like your mount is being attacked.) It's maddening.

I’ve said before that’s completely moronic to make PvP the endgame for PvE content. People looking to fight other players don’t want to have to play all these hours of single-player content to get to the “real” game, and people looking for a good old monster-bashing power fantasy don’t want to be shoved into a world where they can be randomly insta-killed by some jackass ten levels over them. That’s a hell of a reward for the PvE player. “Thanks for putting in all the hard work to level up and reach the endgame. Your prize is that the game is now ruined for you.” These are two different groups of players with different needs, and it makes no sense to connect them like this.

Yes, I know this is common in MMO design and not limited to Black Desert Online, but this is what killed the game for me. I hit level 49 and the game told me the next step was forced PvP. That was it. I was done.

PvE and PvP really are two different games for two different audiences. Imagine if the football league had people play football all year until they reached the championship where the winner was decided via baseball. This is a complete gameplay non-sequitur and I can’t believe developers are still doing this.

Black Desert allows you to opt-out of PvP. However, players can still attack you, even if you’re flagged as not willing to participate in PvP. As the game itself explains:

Continue reading »


 
 
Comments (104)



The Witcher 3: Novigrad, Part Two

By Bob Case
on Thursday May 10, 2018
Filed under:
Video Games

The bad part is over. Now it’s time for the good part!

Two of my favorite quests in the game are in the second half of the Novigrad storyline, and they’re both ones I’d like to cover in at least some detail, because I personally consider them to be examples of how to do it right. I skip over a lot of things in these posts, mostly because The Witcher 3 is a very long game and to cover everything in detail would take forever. But I’m not going to skip over these two quests, because (in my opinion) they’re instructive. They’re examples of two types of quest that you don’t often see anymore. I’ve named them the “nailbiter” and the “soother” (I’ll explain the names).

First up, the nailbiter. Caleb Menge, high-ranking thug in the employ of the Church of the Eternal Fire, is in possession of two pieces of information crucial to us: Dandelion’s location, and the location of the treasure looted from Dijkstra’s vault. Triss comes up with a plan for Geralt to “capture” her and deliver her to Menge, in hopes that Geralt can wheedle out the information he needs as payment. This requires Geralt to pay a part: he has to make the Witch Hunters believe that he doesn’t care about Triss, or even actively dislikes her. Triss, for her part, knows she’s likely to be tortured once she’s in Menge’s clutches.

This leads to a situation that is unfortunately relatively rare in modern RPGs: one where there’s meaningful gameplay to be had through dialogue. Geralt has to be careful what he says, what he admits to, how he reacts to provocation, and what information he presses for, because being careless will give the hustle away. And keeping Menge’s con won’t be easy – at a glance he looks like a dumb goon, but by now we know that, in his own way, he’s a canny operator.

Menge is paranoid about dopplers, one of many reasons that I suspect they played a bigger role in whatever the original incarnation of this questline was.

Menge is paranoid about dopplers, one of many reasons that I suspect they played a bigger role in whatever the original incarnation of this questline was.

I say that this is rare because too often in RPGs (or any kind of story-driven game) dialogue and gameplay are kept at arm’s length. Generally speaking, nowadays you can’t fail a dialogue section – the player can either exhaust all the various options or skip them, and their decision to do either the one or the other doesn’t affect anything else. But when talking to Menge and the Witch Hunters there are a variety of different ways to screw the pooch.

Continue reading »


 
 
Comments (32)



Pixel City Redux #5: Debugging Bugs Me

By Shamus
on Tuesday May 8, 2018
Filed under:
Programming

In programming, sometimes things go very wrong and you have no idea why. Bugs happen all the time, and a lot of this jobOr hobby. Whatever. involves tracking down and fixing your mistakes. On any sufficiently mature project you’ll probably spend more time testing and debugging new features than you spend writing them.

So it goes something like this:

You’re busy playing the game you’re developing when suddenly you crash to desktop. Looking a bit closer, it seems like you got a division by zero error. It seems the variable named “distance_to” was somehow set to zero. The odd thing is,that variable is used for calculating the distance to the closest quest marker, and you know for a fact you weren’t anywhere near one.

So clearly this bug isn’t your fault. Obviously your code is fine. This is probably a bug in the compiler. Or maybe the operating system. Maybe even the processor itself. To sort this out, you’re going to need to send an irate email to the guilty.

But before you fire off that salvo of email abuse, you figure you’ll have a quick look at your code, just on the off chance that this is somehow your fault.

It’s true that you can “solve” this problem by having the program check for a value of zero before doing any division with this variable. That would certainly stop the crash, but it wouldn’t fix the bug. According to how things are supposed to work, it should be impossible for this variable to be zero. Stopping the crash won’t address the fact that something is going wrong.

The problem looks like this:

Continue reading »


 
 
Comments (96)



Spoiler Warning:
Mass Effect

An awkward Let's Play of the Original Mass Effect, before we knew what we were doing. Enjoy terrible audio and long awkward pauses.

 

PC Hardware is Toast

This is why shopping for graphics cards is so stupid and miserable.

 

Starcraft: Bot Fight

Let's do some scripting to make the Starcraft AI fight itself, and see how smart it is. Or isn't.

 

Spoiler Warning:
Metro 2033

A videogame adaptation of a Russian novel about living in the metro system after the world ends. Successful or not, it's completely unique among shooters.

 

Stolen Pixels

A screencap comic that poked fun at videogames and the industry. The comic has ended, but there's plenty of archives for you to binge on.

 

Batman: Arkham Origins

A breakdown of how this game faltered when the franchise was given to a different studio.

 

What is Vulkan?

There's a new graphics API in town. What does that mean, and why do we need it?

 

Hardware Review

So what happens when a SOFTWARE engineer tries to review hardware? This. This happens.

 

Why The Christmas Shopping Season is Worse Every Year

Everyone hates Black Friday sales. Even retailers! So why does it exist?

 

Spoiler Warning:
Hitman:Absolution

This game needs to be on more 'worst of' lists. Watch our let's play to see how much stupid you can pack into one game.

 

Was it a Hack?

A big chunk of the internet went down in October of 2016. What happened? Was it a hack?

 

What Does a Robot Want?

No, self-aware robots aren't going to turn on us, Skynet-style. Not unless we designed them to.