Archives for Andrew Traviss

Game Engine Design, Part One: The Role of the Engine

I’ve been responsible for a number of engines and frameworks over time, but they have been predominantly built for the purpose of solving some specific technically difficult problems. As we have embarked on the business of developing games ourselves, the need for a more comprehensive game engine is evident. We could use one of the existing engines out there, but my history with developing them leaves me with too many ideas on the subject to give it up.

In this first instalment, I explain my thoughts on the role of a game engine and the overall scope of what I intend to achieve.
Game Engine Design, Part One: The Role of the Engine continued »

Moved to Mediatemple

After over a year of persistent downtime and performance issues under WebHost4Life, I’ve moved over to Mediatemple. Already feeling much more comfortable here. The lack of problems should improve post motivation.

A great deal has happened over the past year. Quit my job. Started a company. I’ve done some work for Manulife Financial and have been on contract for a social game developer for some time. I spent enough time migrating my blog tonight, however, so I’ll have to share more details in a future post.

A TOJam 5 Retrospective

It is done! 180 people this year, 160 of them on-site. And amazingly, with 35 more people than TOJam 3, it actually felt less hectic. The organizers were more sane and better rested, and actually had time to sit and chat more.

Pro Tip:Talking to Jim McGinley for 30 minutes or so when you are exhausted to the point of passing out will generally restore your energy for the remainder of the day. Or at least long enough for the caffeine to take over

As always, I had an awesome time, even if I was more tired this year than previous years. That largely due to the fact that I was up until 3 am the night before the Jam trying to get SVN set up on my machine so that Alex and I could forego the USB time sync. Irrational Escalation at its finest.

Alex covered the event really well with some video blogs. Find them here.

There were some fantastic games out there, I sunk quite a bit of time into Michael Todd’s dogfighting game. Shawn McGrath’s game would probably conquer XBox Live Arcade if it were to appear there. Some screenshots and description of our game after the cut

A TOJam 5 Retrospective continued »

TOJam 5 Approaches

TOJAM 5 IS UPON US. Once again I am joining my colleague Alex Bethke, and also Andrew Brykczynski, who worked with us on last year’s game Flip The Beach. Also joining us this year is TOJam newbie Kienan Walker.

I’ve been really busy lately, had to take a break from my Roguelike development to get life back in order. Posts should start appearing more regularly now, although I am still holding off on the Roguelike until I have more time to dedicate to it. My first foray into Test Driven Development in a personal project has taught me quite a bit about how unit tests should be written, and what types of things one shouldn’t try to unit test. Some test refactoring should allow me to make easier progress. I’ll make a follow up post to discsuss what I learned

Dwarf Fortress has now been updated to version 0.31, bringing an overhaul to the combat system and materials handling. There is much delectable modding goodness to be found there. Most my efforts in the short term will be devoted to working Dwarf Fortress modding tools and getting RantingRodent’s Graphical Overhaul updated with the new creatures and professions.

Fatal Exceptions in Actionscript 3.0

I’ve put a lot of thought into best practices for exception handling. The guidelines described here are intended to maximize readability and maintainability of the code, as well as exposing failure information without looking up source code. In professional and personal projects, the experience with this method has been a very positive one.


  1. Centralize error message construction to ensure consistency
  2. Catch generic errors and throw specific errors in their place
  3. Include as much information as possible about the error in the message itself
  4. Exceptions are a tool to help solve problems, they are not problems themselves
  5. Always throw an exception the moment the application state becomes invalid, rather than waiting for it to become a problem

Fatal Exceptions in Actionscript 3.0 continued »

IllFate Long Term Goals

Measuring all of my progress in small verses isn’t going to work as the project expands, although I will continue to use them to express my immediate goals. I also have some major milestones in mind, such that there is a complete game at each milestone that I can cut a version of and release. My current target will be called Rooms. Before I move onto to building a larger game world, I need to be able to pack some interesting things into a single room. The following are my high-level goals for Rooms and some details on room types in particular.

IllFate Long Term Goals continued »

IllFate Verse 1:4 Completed

Now that the busy holiday season is over, the steady progression towards being an actual game continues. There is now a single obstacle to escaping The Room; you have to pick up the key from the floor in order to open the exit door. It doesn’t sound like much, but it required quite a bit behind the scenes to get it working. Saving and loading are also working now.

Verse 1:4

Door locked securely
First obstacle encountered
Where did that key go?

IllFate Verse 1:4 Completed continued »

Saving and Loading in IllFate

Saving and loading the game is potentially a rat’s nest of bugs for a complex game if it’s not done right. This is my approach to it in IllFate, complete with source code and some explanation. If you’ve had experience with similar systems or have any questions about the approach I’ve taken, I’d like to hear about it.

Saving and Loading in IllFate continued »

IllFate Verse 1:3 Completed

What I expected to be easy turned out to be a rats nest, all because I didn’t maintain my diligence when completing verse 1:2. I had no tests for velocities higher than one. I knew it would be a problem when I did it, but it turned out much worse than I anticipated. I ended up scrapping the entire physics class in favour of something closer to real physics. I will be more diligent about not writing any code that isn’t satisfying a unit test, even if it means building out features a bit beyond what the current verse requires.

Verse 1:3

In quite a hurry,
but the ice is treacherous.
The walls are not soft.

IllFate Verse 1:3 Completed continued »

IllFate Verse 2 Completed

I’ve completed development to satisfy my second requirements Haiku. When the player reaches the door, they win, and the game is reset to its original state.

Verse 1:2

Walk across the room.
That door looks awfully nice.
I just won the game.

IllFate Verse 2 Completed continued »