Wednesday, January 19, 2005, 8:45am

Wednesday, January 19, 2005, 8:45am

The train was not late this morning. I’m just now entering the crucible later than usual. I’ve had a bunch of programming ideas for solving bugs and preventing oddities in my latest Thief design that wouldn’t leave me alone, so I wandered off into a design trance to work through the details of my software engineering philosophy.

The highest hope in bug-fixing is to find and fix the root cause of the problem. The next best hope is to find a way to live without the process entirely. Anything in between is asking for trouble.

Unfortunately, there is rarely any fat in these designs, and almost always a process is there for a good reason, so I can’t normally chop it out and I’m stuck either fixing or buttressing a weak process.

By far, the worst solution (though often the only viable choice) is a backup process running in parallel with the main process kicking in once the main process fails. This is the most dangerous choice, since it typically requires a third triggering process to say when the main process has died, or a way for both primary and backup processes to coexist and run at the same time – letting happenstance decide which process is used.

Sometimes the best choice is to do nothing – to live with the bug as long as it doesn’t cause any serious harm – if it won’t kill the program or make the game at all unplayable and is hardly ever noticed is there really a problem? In a commercial game it would matter. Yet I’m giving this game away. Players get what they get and as far as I’ve ever seen they are entirely grateful.

In some cases the bug can be redefined as a feature and used as part of the game – like how NPCs (non-player combatants) can be induced to fall into water where they will drown. It’s silly. They shouldn’t fall in, or at least shouldn’t drown in every case. Yet its part of the game, and I’ve made it one of several ways to win.

The present design dilemma…

If the player saves the game in the middle of a particular conversation between NPCs and then reloads the game at this point, my characters might wind up standing around doing nothing, or perhaps waving their hands out of sync with their voices, or even having their words cut off in the middle of a perfectly normal looking conversation.

None of this really matters, except to my own perfectionist sensibilities, because there’s no reason to save at this point in the game and I may be the only one who ever sees the bug. Even still, it’s hard to leave a known bug and call a design ‘done’ like this – to say that it’s good enough when I know that somebody might notice. Yet the effort to reach perfection always has a diminishing and eventually debilitating result, and for the sake of simplicity I need to move on.

There is a ‘right’ way to program conversations. I’ve know this all along. It’s complicated and unwieldy, and yet for the sake of all the conversations I’m including and the some things I don’t like about the ‘right’ way, I took a short cut and now I’m paying the price. Every single lengthy conversation in the game has this problem. Now I need to live with it.

With that resolved, I realize that I’m nearly done with this commute.

The train lumbers through the switches between Back Bay and South Station awash in the Old Man’s domain still hovering just above zero degrees Fahrenheit. I’d better start the assembly process of my winter weather gear early since it will take a while. But it won’t be overkill like I was considering yesterday. There’s little wind today, and I’ve left my mountaineering face shield at home.

Advertisement

~ by kenramsley on January 19, 2010.

Leave a Reply

Please log in using one of these methods to post your comment:

Gravatar
WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.