I’d guess that most people have heard the phrase “feature creep”, and I’m willing to bet everyone has been a victim of the mindset behind it, even if they’re not a programmer. You get amazing results experimenting with idea X, so you decide to turn idea X into feature X. But production code is more expensive than prototype code, so what was originally a one-hour experiment becomes a four-day job to add a feature that wasn’t originally planned or budgeted and which eventually has side-effects that impact the features you did plan.
In this case, I’m suffering from an art-based version of cascading feature creep. It began innocently enough:
For most of this project, my game environments have been pretty organic. There was rock, dirt, and plants. I made these lumpy tilesets that hid the underlying grid and made the gameworld feel a lot more random than it really was. But now I’ve added the factory level:
That was a quick experimental tileset that instantly became the most interesting part of the game. Several of my testers said it was their favorite part. So maybe I should expand on this idea and add another “man-made” tileset? I figure a factory needs workers, so I’ll make a tileset that looks like buildings. I’ll add some windows to the tiles and maybe it will look kind of like an underground city? As a test, I’ll just take one of my existing levels:
…and drop in my “city” tileset:
Wow. That doesn’t look “kind of” like an underground city. That just looks like a city. It also looks kind of… gothic? I guess? Whatever. That’s cool. Even using this cave-style layout, it manages to look a lot like a city. Let’s write some logic to generate proper building shapes:
That looks even more like a city. In fact, it looks so much like a city that it feels strange to have it underground. And now that I’m thinking about it, this is a lot more interesting than the tileset I’m using for the start of the game, which is just generic green hills and fields. The start of the game looks like this:
It feels like you’re starting in the middle of nowhere, with no sense of time or place. I could put this new city at the start of the game to make the first level more engaging and to give the player needed context: You’re on someplace that feels like modern-ish Earth, but with robots. Let’s try putting the city at the top of the game:
That’s a huge improvement. Except…
Now that I’m looking at the city here in the open with the stars in the background, it feels like something is missing. The buildings feel a little dull. Or dark? Hm. It feels like the city should be brighter, somehow. You know, I’ve got these glow effects in the factory. They wouldn’t really work here, since they’re based on this special tileset designed to have light fixtures attached. But I could change that. I could make it so any level could have an optional backlight effect. Let me just add that and re-work the atlas texture…
That’s more like it! Except…
Now that I’m flying around, all the buildings are starting to feel a bit barren and empty. Shouldn’t cities have signage? Or towers? Or something like that?
Maybe I could add a new section to the tileset that would define little doodads that could be stuck on flat surfaces?
Yeah. Stuff like that. I’ll just add billboards and radio towers and crap that can be randomly stuck on top of these buildings.
Of course, now that I see how much better this looks I’m kind of thinking I should do it for all the other tilesets. Maybe that green grass tileset wouldn’t look so boring if I put some decorations on it…
And the jungle tileset? I should add some stuff to that…
You know, this is pretty amazing. But this approach is kind of limited. I mean, I’m looking for spots where we’ve got three tiles of flat floor next to each other and placing doodads on the level surface, and spots like this are a bit rare. What if I also made it able to attach different tiles to the walls? Or the ceiling? I could have pipes sticking out of the walls, Mario-style. I could have vertical signs on the sides of buildings. I could even add space to the backlight area of the texture so the doodads could give off “light”. Maybe lit-up arrow signs could guide the player.
Let’s see. I’ll need to expand and re-map the texture atlas to make room for the tiles. I’ll need to add the logic to place the doodads. Then I need to make to 4 varieties of doodads, times the four directions (left wall, right wall, ceiling, floor) times my eight tilesets. I’ll need to add some system to control the density of doodads so that they don’t crowd the game space.
Hang on. What was I doing again? Didn’t I start out trying to add a new section to the END of the game, to make it longer? And instead of doing that, I replaced an existing section of the game and created a bunch of code and new art obligations. This was supposed to take an hour or so and I’ve blown three days on it, and the game has exactly the same amount of content and gameplay as before. Actually, I arguably have less, since these changes likely have introduced bugs to systems that were previously fine. I messed with the wall-building logic, which means a need to do some thorough testing to make sure nothing broke.
(Testing randomly generated space is more time-consuming than pre-fab space. In fact, you can’t ever guarantee it’s 100% correct. You just test it repeatedly and your confidence in the code goes up each time you don’t find something wrong.)
Yes, the game looks better. Of course, it’s ALWAYS possible to make a game look better if you’re willing to throw tons of time at it. If I were to make these changes it would basically double the cost of making tilesets.
Worse, I think I’m basically redlining it in terms of my artistic ability. I’m not an artist, and up until now I’ve been using tricks and hacks to cover up my artistic shortcomings. It’s easier to draw a silhouette of a thing than it is to draw the thing. With these doodads I’m moving away from that idea, and if I keep going I’ll end up with an art pipeline that I can’t use. I won’t be skilled enough to make art for my own game.
It would be stupid to throw away all this work and revert to how the game looked before I started. On the other hand, I’m only partway through an overhaul and this is a lot of work that doesn’t advance my goals. Right now I sort of regret this entire enterprise, but it’s too late to go back.
Suddenly I see how AAA games blow through their budgets and get mired in production difficulties. It’s hard to leave things ugly when you know you could improve them, but if you don’t put limits on the project you’ll never finish.
Once I get through this I need to put a lock on the art and make a deliberate decision to live with what I have, warts and all.
A video discussing Megatexture technology. Why we needed it, what it was supposed to do, and why it maybe didn't totally work.
Dead or Alive 5 Last Round
I'm not surprised a fighting game has an absurd story. I just can't figure out why they bothered with the story at all.
Why Batman Can't Kill
His problem isn't that he's dumb, the problem is that he bends the world he inhabits.
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.
Grand Theft Railroad
Grand Theft Auto is a lousy, cheating jerk of a game.