In my last DevLog video, I talked about my computer exploding. I’ve pretty much recovered from that. But I don’t think I’ve made enough visible progress on Stick Ninjas this week to make a video worthwhile. So instead I’m going to tell you a story…

~

Recall that I once had a project called Stick Soldiers 3 (if you don’t recall this: suffice to say it was also a stick-figure fighting game that I tried to make, almost a decade ago, and it was a dismal failure).

One of the reasons that it failed was due to my rampant perfectionism.

I was reminded of this, this week, when I did some of the initial design work for the Stick Ninjas animation system. Specifically the walk animation: how do you figure out where to put feet on the ground, given an arbitrary vector-based terrain?

It is not a trivial problem. You have to deal with corners. You have to deal with edges. And what happens if your level designer makes a level like this:

The stick guy is too big to fall through those gaps. He’ll have to run across them. But then he’ll have to place his feet on each column – he can’t step in a gap! How do you figure out the best column for each footstep? What if the player turns around? Or jumps? Or… No! No no no no no no no. No.

This is the point where work on the Stick Soldiers 3 walk animation stalled. I kept banging my head against this problem – and so the animation system was never implemented.

The correct solution would have been to tell that hypothetical level designer: “Hah no way in hell am I implementing that absurdly complicated, gameplay-irrelevant, totally unnecessary feature!”

Of course, the absolutely worst part is that no sane level designer would have made a level with that kind of geometry anyway. (Ok, so maybe someone in the modding community would have been crazy enough – but pandering to the community is yet another problem SS3 development had.)

Fortunately, these days I am much better at knowing when to turn off my perfectionism. In this case I can simply cheat and pretend the stick figure is always standing on a single line. 99% of the time that is going to look awesome. The other 1% it will clip through terrain or step in mid-air. But I can live with that. Spending double the effort (or more) to capture that last 1% is crazy.

~

I want to finish up by talking about an occasion that stands out in my mind as helping me get past my perfectionism, and realise that it’s ok to blatantly cheat in game development, if it gets the job done.

Many game developers (like myself), when starting out, will study big successful games and game engines and try to copy what they do. What they often miss is what these games and engines don’t do.

Remember that sequence, towards the end of Half Life 2, where Dog (the robot) runs out into the City 17 streets, attacking soldiers and flipping over cars?

Fake.

Almost everything in that sequence is faked. All of dog’s animations are fixed. All the moving vehicles are pathed.

Even the stuff that looks like bona fide physics or AI simulation is faked. The physics and AI is still running – but there are hard-coded, one-off constraints so that physics objects hit their targets and AI stays in the appropriate position.

The most illustrative example is towards the end of the sequence, when a soldier’s body flies into the air above the barricade. The naïve developer might try to implement that by having an AI soldier come out of the drop-ship and let Dog attack it – with all of the extra, complicated, general-purpose AI that that entails. But it is just as effective and so much cheaper to simply spawn ragdoll with some upwards velocity and play the appropriate sound effect.

(Some AAA games go too far with this, eating into gameplay and turning into a series of scripted sequence triggers… but that’s a whole other topic.)

Now – it might be blindingly obvious to you that games “cheat” all the time. To me, today, it is obvious to the point that it goes without saying (which actually makes it kind of tricky to write about). But for me back in 2004 it was a huge epiphany – and that was just one of many that I’ve needed to firmly engrain the concept in my mind.

Comments

Kie

11:33 pm, Tuesday 24 July 2012

Thank you Andrew.
This post was a awesome read. I came to the same conclusion a while ago and it helps me to actually finish stuff.
Cheers!

Mike

3:23 am, Wednesday 25 July 2012

There is no spoon! Nooooo!

Basically everything happens at the whim of the developer, and sometimes making something “good enough” is what is needed. Actually, it’s what is always needed in order to ship on time. As long as it’s fun, always have to make sure it’s fun!

Of course I’m MONTHS behind due to my own perfectionism. DOH!

Scott

6:37 am, Tuesday 31 July 2012

I had an issue in Platformer where there were some pipes in a map; when they joined at a 90* angle, the corner tile was gracefully rounded (with a radius equal to the tile width.)

Problem: Because the tile was rounded off, there was a lot of empty space on the corner; when you stand on the edge it looks like you’re floating.

Solution: Pipes now have square corners instead of rounded ones.

You can actually see basically the trick in SMB3:

http://www.mariouniverse.com/images/maps/nes/smb3/7-9.png