Black Desert Online #1: Strange But Cool

http://shamusyoung.com/twentysidedtale/?p=42433

It’s been a while since I played an MMO, hasn’t it? And I’ve never played one quite like this before. I’ve mentioned Black Desert Online a few times in the past and nobody really took much of an interest, so I suspect most of you are indifferent to this thing. But I’ve never let indifference interfere with my blathering before, so we’re going to spend a month with this game.

Over the past couple of weeks I had a blast in Black Desert Online, and then I stopped having a blast and the whole experience felt more or less like a waste of time for reasons I’ll get into later. But first let’s talk about what drew me to the game.

Familiar Yet Strange

White people in Medieval clothing on cobblestone streets with Tudor architecture and a temperate climate. This is about as European as you can get.

White people in Medieval clothing on cobblestone streets with Tudor architecture and a temperate climate. This is about as European as you can get.

Black Desert Online is a Korean MMO and almost everything about it is strange to me. The design is strange, the release schedule is strange, the business model is strange, the setting is strange, the interface is strange, and the dialog is strange. I can’t tell how much of the strangeness comes from the developers and how much comes from its home culture. Note that in this context, “strange” does not mean “bad”. It’s just, you know, unexpected.

I understand that Korean games are ridiculously grind-y by reputation. When I hear something described as “grindy”, I think of the ancient past of 2002, when I played Dark Age of Camelot and the most expedient way to level was to stand in the same spot and farm the same cluster of mobs for an hour. Black Desert might be grindy, but it’s not that sort of grindy. Maybe it’s grindy by the standards of kids today, or maybe it breaks from the norm set by other Korean MMO titles, but it’s not a grind in the sense of killing the same monster 60 times in a row.

The strange thing about the release schedule is that they didn’t immediately target the North American market. They went for South Korea first (which is pretty understandable) in 2014, but then in 2015 they released in… Japan and Russia? They finally got around to North America and Europe in 2016 and South America and MENA in 2017.

This isn’t a complaint or anything. It’s not like North America is automatically entitled to get stuff first. It’s just an unexpected choice because NA is often thought of as a very lucrative market so developers like to target it as soon as possible. Conversely, Russia is often a low-priority market because it has a reputation for being a difficult place to operate. I wonder if this unorthodox release order means the usual conventional wisdom is no longer true. Is Russia an easier place to do business? Is North America not as lucrative as it used to be? Or does Publisher Kakao Games have other practical / logistical reasons for pushing NA and Europe off for a couple of years?

The Basics

This is everything I explored on my way to level 50. So far it's all forest, no desert.

This is everything I explored on my way to level 50. So far it's all forest, no desert.

Even the title itself is a little strange. It’s called Black Desert Online, but the overwhelming majority of the gameworld is generic European forest. There are places that are swampy and places that are a little rocky, but it’s all the same color with the same trees so none of it feels particularly distinct. More to the point, I played all the way to level 50 and I never saw anything that looked like a “desert”. According to the wiki there is one eventually. Shame it didn’t came sooner. The relentless green was pretty but it got kind of same-y after a while. Imagine if World of Warcraft was designed so that the entire continent of Lordaeron looked like Elwynn Forest, and the game was called “Outlands Online”. It’s just… odd. I wonder if something is getting lost in translation here.

Above I said the setting was strange, but the thing that makes it strange is the fact that to us westerners it’s completely mundane. When it comes to climate, architecture, clothing, proper names, religion, technology, and government, the world of Black Desert is distinctly European. Which is strange, given the fact that it was made by Koreans.

Imagine you’re a Japanese gamer. You play a lot of MMOs, and the vast majority of them are focused on Samurai and Feudal Japan. Then a new game comes out of North America. So you check out this new MMO to see what strange wonders those crazy foreigners managed to come up with, and it turns out they decided to make yet another game about Samurai warriors in Feudal Japan. It’s not wrong per se, but doesn’t it seem like a missed opportunity?

If you're adverse to games where the men wear hulking armor and the ladies wear off-the-shoulder silk, then this game is probably not for you.

If you're adverse to games where the men wear hulking armor and the ladies wear off-the-shoulder silk, then this game is probably not for you.

While the world itself feels like a tenth-generation Everquest knock-off, the player character designs are distinctly Korean. Each class is locked to a gender, so if you’re a Witch or a Sorceress then you’re a woman, but if you’re a Wizard or a Striker then you’re a dude. All but one of the 16 character classes are designed to look like Korean magazine models and K-Pop stars. Everyone has a youthful look.

The stereotypical western character design favors men that look ~30 and women who look ~18. This extra age for the men means the male characters get more of the square-jawed “rugged” features that don’t develop until the late 20s, and we often have a lot of focus on giving them a large variety of beards and mustaches. In Black Desert, both men and women look like they fall within the 18-to-20 range, with one or two of the female designs dipping down into the mid-teens[9].

The point is that a large part of this game is focused on giving you very pretty characters. This ties into the business model: They give you the Barbie doll for free[10], and then charge you for the outfits and accessories.

The Combat

It's hard to get a picture of MYSELF in the middle of a fight, so here's some sort of ninja-type character going to town on some cultists. Doesn't this look like fun? (For the ninja, I mean. I don't think the cultists are into it.)

It's hard to get a picture of MYSELF in the middle of a fight, so here's some sort of ninja-type character going to town on some cultists. Doesn't this look like fun? (For the ninja, I mean. I don't think the cultists are into it.)

The evolution of the modern MMO has been a long, slow process of making combat less of a chore. Everquest was lots of grinding and lots of downtime. World of Warcraft took that system of babysitting hotbar buttons and sped it up a bit, and gave the player a regularly-shifting backdrop of environments to do it in. It was more interesting by virtue of being more varied, but there was still this uncomfortable distance between you and your character. You’d hit a number on your keyboard and your character would begin an animation that would eventually create a particle effect that would someday result in a number appearing over your foe’s head to let you know you’d hurt them. The game might hook you with its vibrant colors and bold (for the time) character designs, and it might pull you in with its skinner box based reward system, but it was not kinaesthetically pleasing.

You could use the movement keys in a fight and dance around as much as you wanted, but the enemy would still hit you because positioning didn’t matter. The combat was designed to be playable on dial-up, and there was lots of slop built into the system so it wouldn’t turn into a mess of jankyness and rubberbanding[11] during the inevitable moments of pronounced network latency. Back in those days, being able to backpedal away from an enemy to dodge its attack would have been an exploit, not a strategy.

The striker is a martial-arts type guy. He's my favorite class in terms of cool spin-kick type animations, although he lacks the ridiculous NUKE EVERYTHING powers of the Kunoichi and Witch.

The striker is a martial-arts type guy. He's my favorite class in terms of cool spin-kick type animations, although he lacks the ridiculous NUKE EVERYTHING powers of the Kunoichi and Witch.

But then the network got faster and packet delivery become more timely and dependable. So then it was possible to mess around with the mechanics and figure out how we could make these games more responsive and action-oriented. I liked Champions Online at the time because it closely tied the hitting of a button to the dealing of damage. It felt less like directing an actor around the stage and more like controlling a character directly. Then Guild Wars 2 came along and suddenly Champs seemed sort of stiff and muted. Now we have Black Desert Online, and Guild Wars 2 seems sort of one-dimensional.

We need a word for a game that incorporates “Fighting against large groups of foes with heavy attacks, light attacks, and stunlocks, with well-telegraphed enemy attacks that reward consistent dodges, counters, and blocking.” Because I’m tired of saying games are “Like the Arkham games“. Like calling all shooters “Doom clones”, it points to a gap in our nomenclature. People (including me) also call them “brawlers”, but then we end up mixing them in with stuff like God of War and Bayonetta, which isn’t quite right. There are a lot of ways you can sort these games and I strongly suspect a lot of us are using the same words to describe very different things. Maybe when I say “brawler” I mean a game with counters and combo meters and when you say “brawler” you mean “game with punching”.

I think the Witch is pretty OP when it comes to the PvE content, but it's still fun to obliterate waves of hapless mooks.

I think the Witch is pretty OP when it comes to the PvE content, but it's still fun to obliterate waves of hapless mooks.

Regardless of what we call it, Black Desert Online has it. Every class is different, but they all have a variety of abilities that focus on fighting waves of cannon fodder. Some classes get moves to close distance and do burst damage. Some get moves to dodge out of the way. Moves to stunlock. Moves that hit everything around you. Moves that focus on outmaneuvering foes so you can hit them from behind and do extra damage. Moves that knock foes down so you can do bonus damage. And so on.

Every class has a really unique feel to it and aren’t just the same basic powers with a different outfit and set of particle effects. The combat feels good. It’s fast and responsive. It stays interesting as you level[12]. The bad guys flinch, stagger, and otherwise react visibly to your hits. It looks cool. It works in the context of an online game.

I’m not saying this game is Street Fighter or Batman: Arkham Feudal Age, but this is the closest an MMO has come to that kind of button-mashing fun. You can play this with a controller, and it actually feels pretty good.

All of this is really hard to do. I don’t know enough about online games to say that this is the first one to really nail this sort of fluid combat that can rival a single-player game, but it’s the first one I’ve ever played. If there’s anything else that feels like this out there, please tell me.

The Black Spirit

This is Black Spirit at the start of the game. Sort of reminds me of a Soot Sprite from Spirited Away.

This is Black Spirit at the start of the game. Sort of reminds me of a Soot Sprite from Spirited Away.

The rest of the game might look European, but Black Spirit is very much a Korean idea and he’s easily the most interesting character.

When you roll a new character, Black Spirit welcomes you to the world. Apparently you have just struck a bargain with this guy. He’s offered you power, and in return you gave him…? You don’t know. You’ve got amnesia, which was apparently part of the deal. The Black Spirit is your main quest-giver throughout the game. You can summon him at any time, and he’s always encouraging you to gain more power and use it recklessly.

This is such an interesting idea. In most games your tutorial buddy is a friendly but irrelevant NPC who is quickly forgotten the moment you exit the starting town. But here he’s arguably the main character and he’s got this interesting and mysterious relationship with you that comes off as mildly adversarial.

His design is striking and he feels fresh and intriguing. I’ve spent my whole life soaking in fiction that drew its supernatural elements from western traditions[13]. Demons are always horned bipeds, angels are usually idealized human with feathered wings, and there’s typically some sort of abstract struggle between good and evil with Earth at the center.

There’s nothing inherently wrong with that stuff, but after a few decades I feel like I’ve seen it all. Some dying peasant staggers into the village square, talking about how High Priest Nefarious has opened a “portal to the Netherworld” and that the lands, “Will soon be covered in darkness forever, unless we can-(coughs, dies)” As soon as I hear the bit about the portal to hell I start nodding my head, “Yeah. Okay. Another one of these. Got it.”

My you've gotten big. What have you been eating?

My you've gotten big. What have you been eating?

But I have no cultural context for Black Spirit, which makes him intriguing in a way that (say) Diablo is not.

Also, his in-game voice is this spooky warble that you’re not supposed to understand, which means his dialog didn’t need to be localized, which means he doesn’t suffer from the horrible problems that afflict all the other voiced characters in Black Desert Online[14].

He starts out as a little floating shadow with two red eyes, but the longer you work with him (and the more you level up) the more he grows. He starts out with this fun little “mischievous trickster” vibe, but by level 30 or so he starts to look downright menacing. The design changes gradually as the story goes on, which makes for a great reveal. While playing the game I was always eager to see the next step in his evolution.

I don’t want to oversell him. I played all the way to level 50 and I never encountered any sort of reveal that hinted who this guy is, what he wants from you, who you are, or why you made a deal with him in the first place. As far as I got, he was all hook and no payoff. But by the (admittedly low) standards of MMO characters, he’s remarkable.

Character Designs

The characters are designed to look youthful. You can try to make them look old by adding faint lines to their face and turning their hair white, but you're stuck with clear skin, boy-band haircuts, and no male-pattern baldness. I wanted to make a really old martial arts guy, but this is the best I could do.
The characters are designed to look youthful. You can try to make them look old by adding faint lines to their face and turning their hair white, but you're stuck with clear skin, boy-band haircuts, and no male-pattern baldness. I wanted to make a really old martial arts guy, but this is the best I could do.

The character models in this game are incredible. Not just because they’re gorgeous and incredibly detailed, but because they have an extreme amount of customizability. Where one game might give you a selection of haircuts and colors, BDO gives you the ability to fine-tune the length and wave different parts of the hair, adjust the overall shine, and apply a different dye to the roots, the strand, and the ends. You can adjust the voice and facial expression. It’s amazing. Sure, everyone is sort of crafted to look like a supermodel, but if popular culture has taught us anything it’s that people don’t get tired of looking at supermodels[15].

(There’s actually one male character specifically designed to play into the “Hulking Warrior” stereotype rather than the “boy band” look all the other dudes have going for them. I tried him out but lost interest because his movement felt sort of ponderous to me.)

I wouldn’t mind a little more variety that takes us out of the 18-24 range in terms of age, but if you like crafting and customizing a character then you can have a lot of of here. And yes, it’s possible to go full on Monster Factory if that’s what you’re into:

Gah. That one's going to haunt me later. For the record, this one isn't mine. I encountered this one in the wild.

Gah. That one's going to haunt me later. For the record, this one isn't mine. I encountered this one in the wild.

I mean, if you want to make a really ugly character then this probably isn’t the best game for that sort of tomfoolery. But maybe you like playing against the intent and expectations of the developer. Whatever. It can be done, is what I’m saying.

Loot

I found an outfit I like for my Striker, and I don't have to worry that I'll find another outfit in 10 minutes that has 10% better stats but looks ridiculous.

I found an outfit I like for my Striker, and I don't have to worry that I'll find another outfit in 10 minutes that has 10% better stats but looks ridiculous.

The other thing the game has going for it is that it breaks away from the tyranny of level-restricted gear that’s plagued numbers-driven RPGs since the beginning. You’ll never see a piece of equipment and think “Oh, this looks cool. Too bad I can’t equip it for three more levels.” Aside from some perfectly reasonable class restrictions[16], anyone can wear anything.

This means you don’t have the usual continuous turnover of gear, where your outfit changes every 20 minutes because you keep finding new gear with very slightly higher numbers on it. I took my witch all the way from level 1 to 50 without ever needing to change gear.

Instead of dropping new gear, the loot in the game is based around upgrades for that gear. You find gems that impart bonuses and you put the gems into slots. You find upgrade stones that have a random chance to boost the numbers a bit. I like this because it means if you find a look that you really like, you can take that outfit and turn it into epic gear through upgrades.

The process is dense and poorly documented, but it’s there.

So What’s The Problem?

You can make your face this pretty, but if you want an outfit this pretty you'll need to pay extra. We'll talk about the microtranactions next week.

You can make your face this pretty, but if you want an outfit this pretty you'll need to pay extra. We'll talk about the microtranactions next week.

So here we have a gorgeous world with lots of customization options, an interesting hook for your character, and combat that surpasses anything that’s come before in the MMO space. This game should be my MMO for life. I’ve leveled three characters into their 40s and I’ve loved all of them. There are still 13 more classes for me to try, and hundreds of little details and sidequests I haven’t explored.

So where did it all go wrong, and why did I stop playing? What could the developer do to persuade me to quit when I’m having this much fun?

The complaining begins next week.

The Witcher 3: The Geralt Question

http://shamusyoung.com/twentysidedtale/?p=42587

Last week we advanced the Novigrad storyline, and I had a specific reason for doing so that’s turned out to be a bust.

You see, this part of the Novigrad storyline involves trying to track down the vanished bard Dandelion through a list of his now-abandoned romantic dalliances. One of these was with a Nilfgaardian noblewoman named Rosa var Attre. Rosa is a swordfighting nut, and Geralt at one point gives her fencing lessons with a wooden sword. In previous playthroughs, I could’ve sworn you got to keep the wooden sword afterwards, because I remembered keeping it as a comedy item to use occasionally. However, they either changed this for some reason or my addled memory got the Rosa var Attre wooden sword mixed up with the “prop sword” you use in a much later quest.

This is a great tragedy because I was hoping to use the wooden sword. Swords have instant-kill animations when used on foes knocked down by Aard or stunned by Axii, and certain monster trophies give Geralt a certain percentage change to “dismember” (ie, use one of the instant-kill animations). The thought of one day chopping the heads off the terrifying warriors of the Aen Elle with a wooden sword was very tempting, but alas it is not to be. I may just give myself the weapon with the console, once I figure out to my own satisfaction whether that counts as cheating or not.

I wanted to mention these at least once. The loading screens have these cool comic-looking images that keep you up to date on the main plot. I always like when a game takes the time to do something interesting with its loading screens.

I wanted to mention these at least once. The loading screens have these cool comic-looking images that keep you up to date on the main plot. I always like when a game takes the time to do something interesting with its loading screens.

Fortunately, with the support of friends and family, I eventually overcame my disappointment. Seeing Zoltan again helped. For those that haven’t played the series, Zoltan is one of Geralt’s dwarf friends who’s shown up in all three games. Zoltan is also an avenue into understanding my own answer to what you could call the “Geralt question.” The “Geralt question” is basically this: does Geralt suck?


The reason I ask is that many people have trouble enjoying the Witcher games because of him. On the one hand, I can understand the objection. Geralt stands at the intersection of several extremely well-worn cliches. Badass loner-type: check, growly voice: check, makes his living through violence: check, frequently cynical outlook on life: check, multiple attractive women try to get in his pants: check. I admit that doesn’t look promising on paper.

I also admit that I sometimes find Geralt’s dialogue frustrating. Too often he’s nasty to people he’s just met without any good reason. His cynicism – expressed in these cases as a dogged determination to interpret everyone’s motives in the worst possible way, often absent any evidence – can wear thin. If this were the only incarnation of Geralt, I might not like him either. But you see a different, less guarded, more likeable, Geralt when he’s around his friends. He shows appreciation and real affection instead of passive-aggressive digs.

Geralt’s friends speak well of him, in my opinion. Zoltan, Dandelion, and Triss, all of whom show up in all three games, are good people. Not without flaws, but good people. They show particular concern for the disadvantaged and downtrodden, commodities that are in ample supply in the Witcher universe. They’re also all thoughtful people (even Dandelion, who’s used as comic relief more than the others, is presented as a thoughtful person in his own way), with a healthy suspicion of too-pat explanations for how the world works. The Witcher is very much on the darker end of the fantasy spectrum, and dark fantasy can get oppressive when there aren’t any likeable people to balance out the tone. Having them as recurring characters also creates a sense of real comraderie.

If I'm understanding this line correctly, Dwarves in the Witcher universe 'train' by drinking beer, which makes sense given everything else we know about them.

If I'm understanding this line correctly, Dwarves in the Witcher universe 'train' by drinking beer, which makes sense given everything else we know about them.

With all of the above in mind, I personally have decided to like Geralt, and since I’m the person in charge of this sort of thing, that means everyone else is legally obligated to do so as well.[2] I don’t even mind his growly voice, a trope that at this point is overused to the point of comedy. They’ve been using the same English voice actor (Doug Cockle) since the first game back in 2007, so to me the voice is grandfathered in.

And when the chips are down, Geralt shows more than cynicism. The games have trafficked in the idea that Witchers are supposed to stay neutral in disputes they encounter, but they haven’t let it become suffocating, and have often drawn insight from the realization that aloof neutrality works better in theory than it does in practice. When gentleness and understanding is called for, Geralt does in fact have it in reserve, which to me makes his occasional obnoxiousness seem like the out-of-place thing instead of the core of the character.

To top it all off, there’s Geralt’s relationships with Yennefer and Ciri, which in my opinion are very well done. But we’ll get to those when we meet those characters. Apologies for the short entry this week, I’ve been busy with other projects. Next week we cover the Novigrad storyline, and speculate about what could’ve been.

Pixel City Redux #2: Unity Week 2

http://shamusyoung.com/twentysidedtale/?p=42482

On the first day(ish) of the project I made a working proof-of-concept demo. Today I’m going to pull a Nightdive by throwing everything away and restarting the project in Unity.

This isn’t as stupid as it sounds. I’m only a day or so into the project, so I’m not going to be throwing away a lot of code. Also, I think writing something in C++ and then re-writing it in C# is a good learning exercise. A year ago I took a swing at learning Unity. The problem is that once you’re done with the tutorials, you need to start making something real. But this leaves you with a three-pronged problem:

  1. Learning a new programming language.
  2. Working in a new programming paradigm, with strictly enforced object-oriented design structure.
  3. Trying to solve this new problem. (Whatever it is that I’m currently working on.)

That’s a lot of unknowns to juggle. Things go wrong all the time when you’re programming. In a situation like this if I do something and I don’t get the result I expect, I won’t even know where to look. Yes, maybe there’s a flaw in my design. But maybe the design is sound, but I’ve somehow expressed it incorrectly in the C# language. Or maybe that stuff is fine but I’m misunderstanding Unity. Even trivial problems can take ages to sort out if you don’t know how to find them.

But re-writing something I just wrote is a pretty good exercise. If nothing else, I’ll know the logic is sound.

If you just stick to doing the Unity tutorial programs you’ll end up focused on a very narrow workflow. Unity is built with the idea that you’ll import pre-made art assets and use simple, short scripts to move them around. And it’s pretty good at that. If you take some random models from the asset store and dump them into Unity, you can make something “playable” (in the sense that the player can push buttons and make things happen) in just a few minutes. This makes it feel like you’re making big progress towards “learning” Unity, but you’re not gaining a lot in terms of understanding how to make an actual game.

Creating a procgen city is a pretty complex task that pushes me into doing a lot of things not covered in the tutorials. At the same time, this work is familiar enough that I’m not getting lost in the program logic.

This re-write takes longer than the initial job. I wrote the original demo in one(ish) day, but the re-write / translation takes almost two. That sounds bad, but this is actually really good by the standards of what I’m trying to do. I’m throwing myself into a new language, a new coding style, and a new set of tools. That’s a huge learning curve to deal with. While I’d like to claim I was able to accomplish this because I’ve got a great big programmer brain, the truth is that a lot of the credit for this easy transition should go to Unity. While relentlessly strange, these tools are very easy to use.

What Makes Unity So Strange?

In the very old days – back in the 1970s and 1980s – coding was really inconvenient. You opened up your code in a text editor. You typed in code. Then when you were done editing you exited the text editor and typed some cryptic nonsense to the terminal window[4] to have it compile all of that code into a program you could run. Assuming it worked, you could then type the name of your program to run it, test it out, and then close it again. Then you’d run your text editor to go back to editing code.

All of this was before my time. When I arrived on the scene in 1990, we already had better tools for this, in the form of the Integrated Development Environment. (IDE.) To me, a “normal” programming environment looks like this:

I'll admit it doesn't look very sexy.

I'll admit it doesn't look very sexy.

You’ve got your IDE where you type your code. The IDE lets you browse through your source files, edit your code, and compile your program. It helps you look for errors when things go wrong. When you hit “run”, your program will start up as its own standalone program with its own window. If you’re making a game and you need (say) a level editor, then that would be another program you’d need to write yourself. Then you’d give that program to your artists and let them do their thing.

I spent my entire professional life using Microsoft’s programming tools. I started out using Borland’s Turbo C tools in 1990, but in 1994 I bought a copy of Microsoft’s Visual Studio for myself and never looked back. I dabbled with other languages and other tools over the years, but the bulk of my programming time was spent in VS.

In Unity, everything is a bit different. This is Unity:

Uh... where do I type the CODE?!

Uh... where do I type the CODE?!

Unity lets you browse the files in your project, it lets you test your program, and it acts as your level editor. When you run your game, it runs in a window inside the Unity environment. So I guess it’s an Integrated Integrated Development Environment? Everything is integrated now, right?

Well, no. The one thing Unity doesn’t have is a text editor, so you can’t use it to edit your code. When you click on the source file to edit the logic of your space marines, it opens in a separate program called MonoDevelop. I already wrote a bunch of complaints on the shortcomings of MonoDevelop a year ago, so I don’t need to repeat them here.

Having said that: Remember that annoying, glaringly obvious, widespread, easy-to-reproduce bug where you lose the ability to paste text? That is still present. That bug turns five years old pretty soon.

Just shameful.

So Unity integrates everything except source editing, and for that you have to use this fiddly external editor that is apparently abandonware? Or if not abandonware, then “apathyware”. Either way, it’s not a comfortable way to work. Even ignoring the bugs, there are many problems with Monodevelop that make it painful to use. I’ll probably gripe about them in a later entry when I need to do some debugging, but for now let’s just get back to work…

Texture Mapping

One of the first problems I have to deal with in these types of projects is texture mapping. Without a texture map, everything in the world would be a smooth polygon. It would look a bit like this:

The city wouldn't look EXACTLY like this, because this is a gun and not a city.

The city wouldn't look EXACTLY like this, because this is a gun and not a city.

Think of texture maps like wallpaper. Imagine you’ve got this wallpaper with a strong pattern on it, and you’re trying to cover all the streets with this pattern. Except, you need to be able to have the textures meet at intersections without forming obvious seams. You need roads to be seamless at two lanes and seamless at eight lanes. That would be a maddening job. Aside from being annoying and fiddly, it would make the code really complex.

Valve discussed a similar problem in the commentary for Episode 2. When designing the caves, the level designers had a hard time getting those square bits of wallpaper to flow naturally on those organically round cave surfaces. Sure, if you’ve got the time and patience you can make that kind of situation work. You make things match up as well as you can[5] and shove all the nasty seams into a corner. Then you can stick a boulder in front of the seams to hide the mess.

Ugh. I would NOT want to try to texture this using regular rectangular images.

Ugh. I would NOT want to try to texture this using regular rectangular images.

But then two days later, gameplay testing reveals we really need a side-tunnel in this one spot. That throws off all that tedious texture-matching, meaning you’ll have to start over.

The solution that Valve came up with is to use a shader program to make a “3D” texture that can wrap around any surface. The artist doesn’t need to line anything up. It “just works”. The trade-off here is that the artist can’t control where specific details go. But who cares? When it comes to caves, you generally don’t want to worry about where all those little surface details go. All you care about is that you don’t see any seams.

I don’t know exactly how Valve did it, but I had to come up with a way to accomplish the same thing during project Octant. You can read that entry to see how I did it, but the short version is that I projected the texture onto the surface along all three axes, and then used the surface normal to fade between these three projections. So a west-facing wall would have the texture mapped so that the polygon’s position on the north-south axis controls the horizontal mapping of the texture. A south-facing polygon will use the position of the polygon on the east-west axis. If the wall is a diagonal that faces southwest, then it would use both of these projections, blended together 50-50. This doesn’t work if the texture is (for example) a picture of words or something else that needs a particular orientation, but since we’re dealing with things like pavement and asphalt it’s no problem.

Back in project Octant, the result looked like this:

This bricklayer deserves a medal.

This bricklayer deserves a medal.

A brick texture has really obvious lines in it. And the spacing of those lines varies slightly across the surface and they vary drastically between each axis[6]. that makes it a nightmare to get it to line up. But above you can see I was able to wrap it fully around an irregular surface. So this works, basically. At the bottom of that… pillar thing(?) in the archway you can see the crossfade where it transitions between different mapping systems. It’s a little weird when you do this with a brick texture, but I think this is good enough for a nighttime cityscape. The player would need to be very picky and be looking very closely to be bothered by this. Like all my projects, I’m looking for the 10-minute solution that solves 90% of the problem rather than the ten hour solution that solves it 100%.

This sort of texture mapping requires making a shader. This turns out to be amazingly hard because the Unity documentation is a disaster. For the sake of getting on with things, let’s save that rant for later and just pretend that this was a straightforward task.

Once I get the shader working, I wind up more or less where I was at the end of the last entry. I’ve got a grid of streets and a “city” of cuboids:

Hmm. Looks like the roof texture is hosed in this particular shot. Don't worry. I sorted that out later.

Hmm. Looks like the roof texture is hosed in this particular shot. Don't worry. I sorted that out later.

While a layperson might mistake this graphical feast for a Grand Theft Auto V screenshot, this is actually just my city generator. Who knows where the project could go next? Someday I may even have lighting!

Anyway, this means I can just lazily make polygons and not have to calculate texture coordinates as I go. I don’t have to worry about seams or solving complex mapping problems. Now, if my only goal is to wrap the entire world in concrete, bricks, and pavement, then this would be the end of it. But based on the research I’ve conducted by looking out my window, I’ve learned that cities have more detail than that. Buildings have windows, sidewalks have patterns, and streets have lines.

So what I’m thinking is that I’ll combine two different texture samples. One will put down the base surface, and the other will add the detail.

Shamus! What are you doing, man? You just said you didn’t want to worry about texture mapping and now you’re mapping two different textures onto an object. How is this supposed to be “easier”?

The problem I was trying to avoid was making disparate surfaces line up. So I can have two roads arrive at an intersection (or two walls meet on the side of a building) and not worry that we’ll end up with a seam. A seam would look like this:

*eye twitches involuntarily*

*eye twitches involuntarily*

Gross, right? And painstakingly planning out all the texture positions so that I never end up with seams would be a pain in the ass. This base texture system I’ve come up with solves the problem for me. Now I’m going to stick (say) a window on top of that. But when I’m making the window I won’t have problems with seams. Windows won’t form a continuous surface. I can put one window on one section of wall and that bit of wall doesn’t need to worry about what any of its neighbors are doing.

So let’s have our shader combine these two textures and see what we get:

There, it's done. Whaddya think?

There, it's done. Whaddya think?

Yeah. That’s basically what we’re going for. As a reminder, these buildings are just simple cubes that fill the footprint of the building site. A PROPER building would have surface detail and won’t always fill the entire volume of space. Basically, I need to write the next-gen version of the procedural building generator I created for the original Pixel City. But there was no point in writing that until I’d decided how texture mapping was going to work.

The other advantage of this system is that it lets me mix & match base textures and windows. So one building can have brick with window style #1, the next one can be brick with window style #2, then the next one can be concrete with window #1, and so on. I don’t have to make a unique texture entry for every possible combination of surface + window.

Like I said last time: This project is a little more ambitious than the last one, so we’re going to be stuck in these early experimental stages for a little longer. I know Pixel City showed us a cityscape almost right away, but it’s going to take us some time to get there with this project.

Diecast #206: Another Funeral for Half-Life

http://shamusyoung.com/twentysidedtale/?p=42469

Yes, SoldierHawk is back for another funeral for another doomed series with a bad ending. I swear we’ll talk about something happy / satisfying one of these days.

I wonder if she’s played KOTOR 2?



Hosts: Shamus with guest Brittany. Episode edited by Issac.

Show notes:00:06 Half-Life 2: Episode 2, and the non-ending

We both blanked out on the names of things in Half-Life. I said “Overseer” but the thing I was thinking of is Adviser. Also, we briefly confused Stalker with Strider.

The other thing-doer names are Hunter, Sniper, Kleiner, and Scanner.

18:48 Epistle 3

Here is the translated version of the intended Episode 3 / Half-Life 3 story.

33:40 Why can’t Valve count to 3?

53:20 The brilliant opening of HL2

Here is the first of my After Curfew strips, and here is the first time Metro is recognized by name.

And here is the EgoRaptor video Brittany brought up:


Link (YouTube)

Wolfenstein II Part 11: Beating a Dead Panzerhund

http://shamusyoung.com/twentysidedtale/?p=42228

So the gist of this mission is that Frau Engle flew the Ausmerzer to Hollywood California so she could appear on the Jimmy Carver show, which is obviously based on The Tonight Show with Johnny Carson[4]. He’s going to interview her on the show and talk about the time she executed Terror Billy.

Based on this setup, you’d think she’s going down to the surface, right? Like, Carver must have a studio in Hollywood and that’s where she’s going. But when you get to the control room of the Ausmerzer you find out it has a copy of the Carver set. Or maybe Carver runs his show from the Ausmerzer? But then why did the ship need to go to Hollywood?

Revenge. Sort of.

Are these two really supposed to be the final boss? Because we faced a bigger mech like five minutes ago. The only thing that makes these guys the ULTIMATE THREAT is their HP, and we can't see that.

Are these two really supposed to be the final boss? Because we faced a bigger mech like five minutes ago. The only thing that makes these guys the ULTIMATE THREAT is their HP, and we can't see that.

This is one of the reasons the ending feels so abrupt. The “final fight” wasn’t telegraphed at all. Two nameless robo-Nazis drop in and we kill them with no ceremony or buildup. After that we sort of blunder into a TV studio and the end of the game without realizing how close we were to Engel.

BJ’s allies all show up. He’s taken control of the Ausmerzer and shut down the automated defenses[5], so the rest of the rebels can land their chopper on the roof. They all meet up in the TV studio and his allies point guns at the TV crew to make sure they keep broadcasting.

BJ slips into the theater. Carver and Engel are doing the show to an empty room. It’s just the band and some camera guys. The audience is all cardboard cutouts. BJ slips in and executes Engel with an axe to the face on live television. The good guys win. Game over.

This is incredibly disorienting and unsatisfying. Apparently BJ killed a couple of hundred dudes and took control of the entire airship and nobody thought to get word of this to Engel? Nobody thought they should evacuate their prized war hero propaganda master celebrity general? She doesn’t see this coming at all? Hundreds of people died on the ship and nobody in the TV studio heard about it?

Engel STILL doesn't know we've captured her flagship, even though SHE IS ON THE FLAGSHIP WITH US? How is that even possible?

Engel STILL doesn't know we've captured her flagship, even though SHE IS ON THE FLAGSHIP WITH US? How is that even possible?

For all of the evil shit Engel did in the course of the game, her death is pretty underwhelming. BJ doesn’t have anything profound to say. He doesn’t throw any of her rhetoric back in her face. And call me crazy, but since cutting off people’s heads was such a big part of her schtick, doesn’t it seem like doing the same to her would be a more fitting end? She beheaded Caroline. Disfigured Wyatt in the process of trying to cut off his head. Executed Super Spesh. Finally she beheaded BJ on live TV, so it seems reasonable to expect that this whole TV studio situation exists so that he could return the favor. Shouldn’t these two exchange some words to acknowledge the weight of the grudge between them? Shouldn’t he say something to support or highlight some theme or idea? If nothing else, shouldn’t the writer humiliate her before her death? Shouldn’t she show weakness, fear, or otherwise be brought low, since that was what she did to BJ?

I assumed all those scenes showing Engel leering over the camera, torturing, humiliating, and ultimately beheading the player in first-person were leading up to some sort of karmic payoff. If you’re going to make the player sit through all of that, then it’s pretty reasonable for them to assume this is building up to some sort of horrific retribution.

But no. It’s over in less than five seconds. I mean, remember this moment?

That's not BJ Blazkowicz! The REAL BJ is much taller.

That's not BJ Blazkowicz! The REAL BJ is much taller.

In the context of a power fantasy, doesn’t that sort of graphic cruelty demand some sort of commensurate retribution? Some sort of poetic end? This milquetoast (by the standards of this setting) death actually reminds me of my series on Fable 2, where the bad guy spends the whole game murdering your family, your pet, your friends, and torturing you for months while inflicting untold death and cruelty on the world, and then at the end you shoot him once and he falls and dies off-screen.

You might argue that this is supposed to show how much more noble the good guys are. Sure, Nazis stoop to public beheadings, but WE wouldn’t ever engage in such barbarism! Except, BJ kills her with an axe to THE FACE on live television, so that excuse rings kind of hollow. This death is too gentle to be payback but too barbaric to let our hero claim the moral high ground in terms of methodology. It’s like this ending was written by someone who didn’t know what came before.

The rebels give a speech to the masses[6]. If Wyatt is alive, he gives the speech. If Fergus is alive, then he’s not really fit for the job. Impassioned public oration is not in his skill set, and besides it would be weird for a Scotsman to make this particular appeal to the American people. So if Fergus is alive, then Grace does it. Either way, the heroes tell the American people to rise up and fight their Nazi oppressors.

BJ also recovers his mother’s ring (Engel took it when she captured him back in Texas) and proposes to Anya on television. That’s sweet.

It’s a shame we came all this way to find the ending is so abrupt, unsatisfying, and poorly executed. With some tweaks this could have had a lot more impact.

And Another Thing…

Hey, nice of you idiots to show up after my wife and I killed all the Nazis for you.

Hey, nice of you idiots to show up after my wife and I killed all the Nazis for you.

I realize this last one is really petty, but it really got under my skin. I think the end credits music was the most poorly chosen music I’ve ever heard at the end of a game.

They play We’re not Gonna Take it by Twisted Sister, a hair metal band. The song was released in 1984, which puts it almost a quarter century out of place here in 1961. Worse, it isn’t even the original version of the song. This is a screamo cover, which puts it more like a half-century out of place.

But fine, you can pick an anachronistic song as long as the message is right. Except, this song isn’t about rebellion against autocracy, it’s an adolescent song about rebellion against parental authority. America isn’t mad because they don’t want to eat their vegetables. They’re not fighting for the right to stay up late on a school night. They’re supposedly fighting back against the most murderous regime in the history of our species and it’s obnoxious to infantilize the struggle like this.

Rock doesn’t fit with the style of the game anyway. Wolfenstein has always been pretty heavily focused on the orchestral stuff.

I admit it’s hard to find fitting music from this time period, because the 50s music was a little too timid and the 60s stuff was too anti-war. But the song we have here is stylistically wrong, it’s lyrically wrong, it’s tonally wrong, and it’s temporally wong. And this is on top of the fact that it sucks. Silence would be better than this.

So that’s The New Colossus. It’s not a terrible game, but it’s not as good as what came before and it’s far short of the game it could have been. Which means it’s time to talk about…

Review Scores

Even the PC version of TNC did well, which is pretty frustrating.

Even the PC version of TNC did well, which is pretty frustrating.

So here we have the weakest entry in this series so far, which somehow landed the best review scores. So how did this happen?

I guess it’s time we finally talked about the Nazi elephant in the room: Nazis were in the news last year. A lot of people were worried / pissed off about Nazis. This entire franchise was built around the idea of using the Nazis as punching bags as part of a cathartic power fantasy, so this early-90s nostalgia title suddenly found itself in tune with the national zeitgeist. To me this was no more or less valid than all the anti-Soviet action movies of the 80s or the “terrorist” videogame bad guys of the aughts. “Here is some external force that you find scary / enraging, go to town on them”. This might not be the most mature or nuanced way of thinking about these concepts, but that’s not what power fantasy entertainment is for.

The point is, I can understand why reviewers might really enjoy a Nazi-blasting videogame in 2017. I think think this won New Colossus a lot of slack it doesn’t really deserve.

This situation is really insidious because it mixes lazy “Rah rah Nazis bad!” type cheerleading with crass, clumsy storytelling. It’s like an embarrassing shitty poem praising Martin Luther King Jr. We love MLK, so it’s terrifying to critique the poem because this is the internet and there will always be that one person who accuses you of hating the poem because you’re “a racist”. Criticizing this game puts reviewers into a situation where they need to say, “I’m not a Nazi, BUUUUT…” and that’s never a fun spot to be in when you’re reviewing something for the eternally aggrieved randos of the internet.

These novelty scenes could all work. Gross Hitler with dementia? Badass pregnant woman? The last hope for freedom in America is a black woman breastfeeding her infant? These are all good ideas. Somewhere out there are a handful of people who have always DREAMED of getting that kind of gratification in a game, and this could make them very happy. I actually appreciate the break from traditions and stock characters.

But you can’t just jam random cheap gratification into a story and call it a day. You still need to maintain tension, establish characters, set things up, pay them off, maintain cause and effect, and obey the established rules of the world. It’s not just that you’ll make a shitty story, it’s that even the cheap gratification itself will fall flat if it’s not part of a world we can buy into.

To be clear, I’m not saying the journalists were corrupt or stupid. I’m saying I think our current system of reviewing games is sometimes broken in ways that makes insightful analysis difficult.

Publishers make sure game journalists don’t get a review copy until just before launch, even though games typically go gold several weeks (sometimes even months!) before that point. Technically reviewers could get their hands on the game the moment it goes gold, but publishers use these last-minute review copies to make sure there isn’t enough time for thoughtful analysis. Journalists generally only have time for a single playthrough and not a lot of time for reflection. This forces them to stick to superficial stuff like the state of the basic gameplay and the graphics. They can do analysis later, but by then the sales surge will be over and the Metacritic scores established.

Game journalists need to pay the bills, and what pays the bills is previews, hot takes, and having reviews up on day one. If you’re running a site like Kotaku, IGN, Giant Bomb, Eurogamer, Polygon, or Rock Paper Shotgun, then your choices are to put up with this horrible system or surrender the most profitable traffic to rival sites.

Short deadlines keep journalists from analyzing in depth before launch, and the threat of backlash encourages them to favor safe, conventional positions when assigning review scores.

To reiterate the points I started with:

  1. I think this game doesn’t really deserve to be rated so much higher than its predecessors.
  2. We’re now on the third entry in this series, and so many of the long-running problems should have been solved by now. Instead of refining the formula, the designers are stagnating in some areas, regressing in others, and failing to fix things that have been a problem since The New Order.
  3. While the story isn’t terrible, it’s also not nearly interesting enough to justify the length of these self-indulgent cutscenes. I don’t have anything against games telling stories that require long cutscenes, and I don’t have anything against simple stories that only exist to facilitate gameplay, but I stand by my rule: You can have as little or as much story as you like in your game, but cutscenes need to be worth watching regardless of length.

But the cutscenes in Wolfenstein: The New Colossus burn a lot of screen time, a lot of money was spent on them, and they’re not as economical as the cutscenes in The New Order. The original did more with less, and I wish that had been reflected in the critical reception of this game.

So that’s a novella on The New Colossus. I didn’t care for it, but I’m still interested in the series and I’m hoping the team can make some creative corrections before the next one gets too far into development. If you enjoy this kind of long-form analysis, please consider supporting my Patreon.

Thanks for reading.

The Witcher 3: Grinding and Griping

http://shamusyoung.com/twentysidedtale/?p=42424

Last week we ran into an enemy I couldn’t beat, and resolved to go back to Velen and knock out a few levels first. I ended up knocking out two, because I’d forgotten how slow leveling is in the early game. EXP is just hard to come by. I nip back to White Orchard, and the first quest I do is one where I help a Temerian guerilla recover medical supplies from an ambush site. My reward? Eight XP. Eight. If my calculations are correct, and I believe they are, that’s a single digit number. Even early on, it takes several hundred XP to level up. This might take longer than I thought.

So I traipse around White Orchard, hitting up every place of power for the free skill points, and do the “Devil by the Well” contract. Still only level four. Back to Velen, I do a fairly long and involved quest where I’m reunited with Letho of Gulet, one of the villains from the second game.[2] Then, three horse races east of Crow’s Perch, then fist fights in three different villages, then the “Woodland Beast” contract, which requires me to kite Alghouls around a stand of trees for like ten minutes. Still only level four. At this point I’m wondering if figuring out the leveling curve was something of a last-minute scramble for CD Projekt.

Finally, I'm around civilized people who appreciate the finer things in life, like punching.

Finally, I'm around civilized people who appreciate the finer things in life, like punching.

Finally, out of ideas and with so much of my quest log way above me in level, I do the thing I’d resolved not to do: I start grinding out monster nests. When I started this series I promised to not just gush about the things I like but also to bellyache about the things I didn’t. Well, here’s some of me fulfilling the second half of that promise: combat has never been CD Projekt’s strong point.

They have gotten better with practice, of course. The first game put its swordfighting mostly on autopilot, with an unusual system of timed mouseclicks to increase damage. It was a bit clunky and mostly notable for its novelty. The single thing I remember most about the second game’s combat is the rolling – the endless, nonstop rolling. On the higher difficulties (I admit I never played the “Dark” difficulty they added in post-release patches) I would roll practically in between every hit. It wasn’t that much of an ordeal, but the fights often ended up looking silly. There were also some flow-breaking irritants, like the fact that you drank potions from the meditation screen.

The third installment has gotten combat more right than the first two. The addition of a quickstep is welcome, and it is a system that rewards several different kinds of skills: positioning (basically, don’t get surrounded by nekkers/drowners and the like), timing (time your dodges correctly), tactical awareness (ie, knowing when enemies are and aren’t stunlocked – they can’t just be button-mashed to death), and preparation (using the bestiary – one of my favorite series features – gives you a real edge).

There’s no single thing that’s glaringly wrong with it, but for all that it never quite clicked with me either. I played the game for the first time right after I finished Bloodborne. Granted, that’s something like asking a comedian to go onstage right after Richard Pryor, but it was still striking how different the overall vibe of combat was between the two games despite the mechanical similarities. I’m going to list some of the way I felt like The Witcher 3 came up short. None of them are glaring flaws by themselves, but they add up to substantial room for improvement.

I should mention that while I'm using a punchmage build for this playthrough, the criticisms I have of the game's combat apply to conventional builds as well.

I should mention that while I'm using a punchmage build for this playthrough, the criticisms I have of the game's combat apply to conventional builds as well.

  1. There’s not as much variety as there seems. There are other weapons, like clubs and axes, that you can loot and use, but there’s very little reason to use anything but swords. This makes sense given the source material, but that doesn’t make it much less restrictive in practice. There are also build options – like the crossbow talents and a big chunk of the alchemy tree – that I imagine hardly anyone uses. I wanted to use a strong attack build at one point in one of my playthroughs because I liked the Bear school armor so much, but once I actually the build put together, I just used fast attacks instead and found they killed things faster. You can play through the whole game using pretty much nothing but Quen and fast attacks, and that seems to be what a big chunk of players do. The combat mechanics never much rewarded experimentation or creativity – not for me at least.
  2. Things get repetitive. Throwing new things at the player regularly in an RPG with a fifty-plus hour main quest and an ocean of side content is a tall order. But it still struck me how many of the different monsters weren’t much more than palette swaps of something else. Some stood out – Leshens and Foglings were both unique, and the first time a Fiend ever hypnotized me was something new. But those were the exceptions rather than the rule.
  3. Too much HP-sponginess. This might be me rather than the game, because I think this about so many games that I play: I wish that almost every mob did more damage and had less HP. A mob that can really hurt you is the one you remember, the one that makes fights exciting. Instead, many of the The Witcher 3’s boss fights had me repeating that same fairly short pattern of moves, like hit-hit-hit-quickstep-repeat, over and over again.
  4. Some gameplay options are frankly overpowered. I wasn’t even a full signs build in my second playthrough, but Igni’s “firestream” mode still could trivialize most encounters. In fact, it’s already starting to do that in my current one.
  5. Reverse difficulty curve. This problem isn’t unique to the Witcher series, it’s something I run into all the time in RPGs, but its especially apparent in these games. In my playthroughs the hardest combat encounters in both the second and third games came in the first third or so of the runtime – and that persisted even on subsequent playthroughs, indicating that it wasn’t just about the rate at which I learned the game mechanics.

My Geralt exclusively drinks booze for roleplaying reasons, which makes it a little tricky to get good screenshots of my vanquished foes.

My Geralt exclusively drinks booze for roleplaying reasons, which makes it a little tricky to get good screenshots of my vanquished foes.

Good combat is important – it can keep me playing a game I otherwise am not feeling. I had no shortage of criticisms of Mass Effect: Andromeda, but by the end I was suprised to find out I’d plunked almost 250 hours into that thing because I enjoyed the combat so much – and not just because Vanguarding is fun, either. I had several different builds I enjoyed playing. By contrast, in The Witcher 3 I can stumble across a bandit camp or grave hag and feel nothing but irritation.

Some of these issues are the product of unique things about the setting, like the fact that you’re playing a specific character with a specific “class” so to speak (Witcher), which makes variety harder to pull off. But I don’t think that excuses everything – some of this is just poor design.

That was a lot of griping. I’m going to be returning to some of this later, but for now lets get back to Geralt. He’s looking for Triss in Novigrad, but she’s in hiding as magic users are persona non grata with Menge and his thugs. Geralt tracks her down to a hidden hideout called the “Putrid Garden,” base of operations for the local underworld honcho called the King of Beggars. This is our first glimpse of Novigrad’s underworld, but it won’t be the last.

After the meeting, you go with Triss on the type of menial job she has to take now to survive: using her magical knowhow to clear the rats out of a warehouse. On the way you have to fight the drowner that defeated me earlier, and I’ve learned something about the game’s leveling mechanics that might be an issue going forward.

You see, if a mob is more than five levels above Geralt, it’s marked (if you have the UI turned on, which I occasionally do to check things) with a skull icon. I don’t know exactly what’s happening mechanically, but this makes them way harder to beat. I know that because I tried beating this drowner at both level four and level five, and there was a huge difference. Same with the level ten witch hunters you fight later on: at level four, a single quick attack from one of them was enough to kill me, and Igni never set them on fire. At level five, a quick attack took less than a quarter of my health, and Igni’s firestream mode was enough to barbeque them pretty much every time.

This may throw a wrench in any attempts to do content that’s significantly above me in level. Honestly, I wish the developers hadn’t included this particular mechanic. They give you the option of doing the different parts of the main quest in any order, but then do something like this? Not the choice I would have made.

Anyway, Triss hasn’t heard news of Ciri, but does recommend an Oneiromancer (who can interpret dreams) named Corinne Tilly. Unfortunately, she’s trapped in a haunted house, natch. Geralt investigates and finds out the hauntings are the doing of a mischievious creature called a godling. This is the type of fun little vignette CD Projekt are experts at.

I saw this jump scare coming and it still made me jump.

I saw this jump scare coming and it still made me jump.

Now rescued from the “haunted” house, Tilly is free to use her ability to help me locate Ciri. One thing the Witcher 3 devs consistently get right is the flavor of magic. I’d never heard of “Oneiromancy” before this quest, but its inclusion feels completely natural while at the same time retaining that level of mystery that the series does so well. It also uses the dialogue as an excuse to give the player some optional backstory. Moments like this are important for getting the player emotionally invested in Ciri’s fate.

We learn that Ciri interacted with Dandelion, a foppish (though he doesn’t quite rise to the level of spoony) bard who’s one of Geralt’s oldest friends. Dandelion has recently been left a local brothel in the will of one of his wealthy patrons, but the man himself has disappeared.

Corinne Tilly. CD Projekt can and does write mature and thoughtful stories. For all that, I wish they would lay off the cleavage a little.

Corinne Tilly. CD Projekt can and does write mature and thoughtful stories. For all that, I wish they would lay off the cleavage a little.

Next week, we’ll follow the thread of Dandelion’s disappearance, and I’ll learn to deal with disappointment. For details, tune in next episode.

Pixel City Redux #1: More Pixels

http://shamusyoung.com/twentysidedtale/?p=42400

The programming bug has bitten again. This is bad. I’ve got other writing I need to do. My Wolfenstein series ends in two days. If I don’t get the next series done then you folks won’t have anything to read on Thursdays. Still, this project got stuck in my head and after a week or so of not working on it I realized I wasn’t getting anything else done because I was spending all my mental energy just trying to not think about this. Now I’m hoping that if I put a few days into this I’ll be able to think about other things.

A lot of things brought this about. My time with Grand Theft Auto V has got me thinking about the problem of crafting urban gamespace and the terrifying expense and complexity of the problem. My friend Paul got me thinking about programming again. Out of the blue, a couple of people sent emails mentioning or asking about Pixel City, a project I did way back in 2009. Also, I’ve recently played Left 4 Dead again, and that game was one of the inspirations behind Pixel City.

If you never saw Pixel City, it was a programming project where I tried to fake a city using nothing but black cubes and lit windows. It turned out okay:


Link (YouTube)

I want to do a next-generation version of this that can be explored on foot. (Or at least, from ground level. I doubt I’ll make actual walking mechanics[6].) I’m not trying to make a game or anything[7]. I just want to make a city using nothing but code.

I also want to mess around with some rendering tricks I’ve been thinking about. I like the idea of taking a full-color scene and crushing it down to EGA or even CGA color levels. Maybe experiment with dithering? I’m just curious what that sort of effect will look like in motion.

Goals

It’s important to set goals now so that when I fail to meet them later we know which parts of the project I’m supposed to be ashamed of. Here’s what I’m shooting for:

  1. A city of proper “videogame” size. It doesn’t need to be Manhattan, but it needs to be big enough to FEEL like Manhattan in terms of how players perceive scale within a gameworld.
  2. It needs to run in realtime. Decent framerate. I mean, I’m not aiming for “playable” or anything, but if my world is slow to the point of being annoying or uncomfortable to navigate then that’s not good enough.
  3. The procgen stuff needs to run in a reasonable time. Say 15 seconds or less. I want to hit a button and get a city without needing to wait for half an hour to see the result.
  4. The buildings in Pixel City were pretty good, but I’d like to revisit those ideas and maybe make some more interesting shapes.
  5. The world needs to have the framework for detail, even if I ultimately don’t put that detail in the city. Like, I’m not planning on learning Blender so I can make streetlights, trash cans, traffic lights, newsstands, vending machines, pay phones, parking meters, dumpsters, fire hydrants, benches, road signs, bus shelters, billboards, road signs, and bike racks. This is a programming project, not an art one. But maybe I’ll put some simple primitives in the world to show that I know where these kinds of objects WOULD go. We’ll see.

To keep things from getting too crazy and having the whole project spiral out of control, I want to constrain it to something I can do in a few days or a week. So let’s put some limits on the scope of the project:

  1. The ground will be flat. I’m not going to mess around with fitting a city to rolling terrain. That can complicate things tenfold.
  2. No cars, pedestrians, or other things that will require tons of programming / art.
  3. No building interiors.
  4. The city will be night only. I’m not going to make the buildings featureless black cubes like in the original Pixel City, but nighttime lighting conditions can cover a lot of corner-cutting.
  5. I’m not going to use procgen textures this time. That was fun last time around, but this time if I need a texture map I’ll spend five minutes bashing pixels together in an image editor rather than spend two hours trying to write code to accomplish the same thing.

I’m starting this project in C++, using my usual framework[8] of SDL and OpenGL.

Note that the timeline is going to be a bit wonky. By convention I write these entries in present tense, but I’m actually writing this after several days of development[9]. I’m going to publish these entries once a week, but each entry represents roughly a day or so of development time. By the time we get to the fourth entry we’ll be well into May, but you’ll still be reading about what I was doing at the end of March. Also, while I’m writing this from the future, I’m not writing this from particularly far in the future. This entire project might hit a wall or come to nothing. I might lose interest. While I don’t know what will become of the project as I’m writing this now, I’ll probably know by the time you read this.

I realize this is horribly confusing. Sorry. For the sake of brevity and basic comprehension I’m going to continue to write in present tense, regardless of what’s going on in a temporal sense. Otherwise this whole series will come off sounding like Primer fanfiction.

Anyway. Enough disclaimers. Let’s get started.

Roads

So the most basic problem is “How do you form the city layout?” This is one of those annoying problems that’s obvious to do by hand but rather fiddly to do with code. A child can draw you a passable street layout, but then again a child can identify pictures of birds and it turns out that’s also a really hard problem for computers to solve.

Sure, you can do the brute-force thing of having streets form a strict grid. Every street can be locked to a world axis. But that’s boring. I want something that can gracefully handle T-junctions, diagonals, and so on.

So here’s what I come up with:

There. Done. Whaddya think?

There. Done. Whaddya think?

The program will draw lines to form a mangled grid. No curves to start with, but the roads will meet at odd angles and such. These lines are streets.

Then each street will put down marker points for where a sidewalk will go. These points will have a direction associated with them and will be oriented with “right side forward” scheme. Imagine you’re driving down the road on right side. To your right will be (invisible to the player) markers that point forward, just off the side of the road. On the other side of the street will be the same kind of markers pointing in the opposite direction.

You can't tell, but all those red dots are actually arrows.

You can't tell, but all those red dots are actually arrows.

Once that’s done, we’ll have all these crazy criss-crossing groups of points. It will be chaos. If we use these points to create sidewalks then we’d end up with sidewalks all over the roads. So the second step is to have each road “clean up” any sidewalk points that are encroaching on its space. Once that’s done, we should have something that looks like this:

Well, they're not so much ARROWS as tiny little lines that are red on one end but green on the other. Good enough, since they're just to help me visualize.

Well, they're not so much ARROWS as tiny little lines that are red on one end but green on the other. Good enough, since they're just to help me visualize.

You can see we already have city blocks isolated as little islands. Now I can just grab a point and go the way its arrow indicates, grabbing the next closest point in that direction. If I’m confused about which point to choose, I can favor right turns, which ought to let me enclose all of these city blocks. The only exception is those bits around the edge. If the program hits a dead end, it assumes it’s on the edge of the city and just throws away all the points.

The white outlines are city blocks that it was able to complete. Red ones are blocks that didn't work out.

The white outlines are city blocks that it was able to complete. Red ones are blocks that didn't work out.

This works. I can then use these points as an outline to create the polygons.

(If this seems like an odd way to go about this, you’re right. I’ll come back to this in a few days. I’ll talk more about this then.)

So now I have these enclosed shapes, which form city blocks. Now I just need to put buildings on them.

I already have these points scattered everywhere. They’re a perfect starting point for this job. Here’s what you do:

Grab a city block. Within that block, grab the first point that makes up its perimeter. This point also has a vector, indicating which way to go to walk down the sidewalk. (Walking on the right side of the street.) All I need to do is make a right-angle turn from where this thing is pointing, and I should be facing the big empty interior of the block. From there I can attempt to slap down a rectangle, aligned with this sidewalk. Let’s start with one that’s 10 meters x 10 meters. This rectangle will be the site for a building.

If the rectangle doesn’t overlap with the sidewalk, and it doesn’t overlap with any other building sites, then it’s good. I can nudge it a little larger and see if it still fits. I try making it wider. Then deeper[10]. Then wider again. I try to make it as large as I can get away with, while also keeping it roughly square. I go around the block, fitting in rectangular sites like this to fill in each block as much as possible.

Now we're getting somewhere.

Now we're getting somewhere.

Once complete, I have lines for streets, rough outlines for city blocks, and scattered rectangles for building sites. Technically this is everything we need to build a big city like in the original Pixel City. (For the record, those red incomplete blocks on the edge of the city aren’t really relevant anymore. The program throws them away, but they’re still being drawn here for development purposes.)

Just to get a sense of how this is looking in terms of scale, I turn it into polygons so I can have a look around:

Eat your heart out, Crytek.

Eat your heart out, Crytek.

I realize this doesn’t look very impressive in terms of videogame graphics, but I’m pretty happy with what I’m seeing. Try not to think of these cuboids as literal buildings but instead as a representation of the volume for where a building would go. Also, you sort of have to imagine a street and sidewalk textures and such.

The point is that I like how this is working out spatially. Since I’m being a little more ambitious this time, it’s going to take us a bit longer to reach the point where we see something interesting. This is particularly true because I’m about to do something really absurd and silly. I’m about to start over with different tools.

Great, now we just need to add EVERYTHING ELSE and we're done.

Great, now we just need to add EVERYTHING ELSE and we're done.

Next week we’re doing this again, except in Unity.

Diecast #205: Kerbal Space Programming, Unity, C#

http://shamusyoung.com/twentysidedtale/?p=42395

The title is not a typo. This is actually about programming for Kerbal Space Program. For those of you who’ve been missing out on the programming content around here: Your time has come. We talk about programming on the Diecast, and then tomorrow I have a new programming series starting.



Hosts: Paul, Shamus.

Episode edited by Issac.

Show notes:

01:20 KSP Modding

26:08 Unity game Engine

43:57 Programming in C# versus C++

Me, Myself, and MeWe

http://shamusyoung.com/twentysidedtale/?p=42376

Have you heard about MeWe? It’s selling itself as the “next-gen” social media platform. More specifically, it’s trying to be the anti-Facebook by promising it won’t do data harvesting or sell your personal info. So I tried it. But before I talk about the Twilight Zone strangeness I encountered, please enjoy this barely-related rant on the current state of social media:

Destructive Curation

Facebook is so played out, even the jokes about how played out it is are played out.

Facebook is so played out, even the jokes about how played out it is are played out.

I realize that selling personal info is the most egregious sin that SM platforms perpetrate, but it’s not the one that annoys me the most. What really bugs me is the algorithm-driven “curation” of content. Both Twitter and Facebook became significantly less interesting to me when the platform began “helping” me by showcasing content it thought I wanted to see and burying content it assumed I didn’t care about. It’s true that I never left comments or pressed the like button on Aunt Edna’s cancer treatment updates. But I didn’t engage with that stuff because… well, you don’t always need to say something, you know? But those updates were still important to me. It’s also true that I’d sometimes hit the like button when cousin Jimmy posted something humorous, but that doesn’t mean I come to Facebook to find funny images.

But those are the assumptions that drive the Facebot, so that’s what I saw in my feed. Over time the important family updates vanished and were replaced with a really shitty version of Imgur. Yuck. I can still see updates from family, but I have to go to each and every family member’s page / feed and view it directly. That’s a lot of trouble and a lot of clicks to find out there aren’t any updates, which means I revert to the pre-SM behavior of “I’ll just assume someone will email me if anything really important happens.”

I have the same problem with Twitter. I’ve turned off every type of “help” I can find in the settings, but I can tell it’s still doing some level of curation. I’ll refresh the page two hours after my previous visit, and I’ll still see the same handful of mega-popular Tweets from major organizations / famous individuals featured at the top, and the dashed-off thoughts of my friends and colleagues (which is what I’m here for) will have vanished into the snowstorm and can’t be found anywhere in the timeline.

If my brother Tweets, “Shit. Just got a flat.” then I want to read that, even if he only has six followers and nobody in the world “likes” the message. I’m not here for your creepy-ass Orwellian algorithm-driven popularity contest / outrage generator. I just want to see what’s going on with my friends and family. Twitter is still useful to me as a way to broadcast updates to my audience, but as a source of information it’s completely useless.

Back to MeWe

So the major platforms have curated themselves out of a job. I check Facebook once a month out of some unexplained sense of obligation, and I use Twitter to broadcast to my audience, but both platforms are dead to me as a means of two-way communication.

So I’ve been eager for a platform that can let me communicate with the people I’m close to. The problem was, new platforms weren’t useful because my friends weren’t there. But then MeWe came along and a few crucial family members joined. And then they invited me. So I decided to give it a shot.

I created my account on Saturday March 31 but I didn’t really try to use it until sometime on Wednesday April 4. When I went to log in, Google Chrome had saved the credentials I’d used on Saturday. The name / password fields were already filled in, so I just hit the login button.

But somehow, that stored name / password pair didn’t work. I tried getting the password out the the password manager I use, just to make sure I was using the right password. I manually re-typed both, just to make sure. Nothing worked.

So I tried password recovery. But then MeWe said it had never heard of me. No such email on file. Now, this is clearly bogus because I know I registered using this email. I’ve still got the “Welcome to MeWe” messages in my inbox.

Maybe… I dunno. Maybe my account was purged? I know the service is new, and maybe they’re getting rid of people who create an account and then don’t use it, assuming they must be bots? Hmmm.

Whatever. I re-create the account. Same name. Same password. Same email. I send friend requests to all the people I was already friends with. That’s strange, but I guess it’s a new system and they’re still working the bugs out?

And then a few hours later I get this message:

(Twilight Zone music plays.)

(Twilight Zone music plays.)

There are so many levels of wrongness going on here that I don’t know where to start.

I can’t tell if this is the old account inviting the new, or the other way around. Either way, I didn’t use either account to invite the other, so this invite is auto-generated. That’s alarming.

I couldn’t log in or recover the old account, so I assumed it was gone. But now I see it still exists somehow. My contacts all have two of me in their contact lists, with no indication is the “real” (usable) account and which one is this creepy revenant.

We now have two different accounts, both of which have the same name AND email AND password. A proper account system should not allow this. There’s no way for me to specify (or tell) which one I’m interacting with. Even if I could log into the old account, if I tried to close it there’s no way to tell what might happen. Which account would get closed? Old? New? Both? Neither? If I can’t tell the accounts apart, then neither can MySQL[2].

Me, me, me.

Me, me, me.

I have not yet accepted my friend request. I don’t even know what that would do, but I’m not convinced it wouldn’t cause the universe to fold in on itself.

Keep at it, MeWe. We need a Facebook alternative, but I don’t think you’re there yet.