What porting can teach you

2012-02-27

catch that cat tads

In game development, one of the most important learning experiences is releasing a complete, polished title, no matter how small and simple. You know what else is? Porting a game to a different platform.

Now, with most kinds of games, the challenge is adapting to the input and output capabilities of the new platform; the game logic, if well designed, can stay the same. But with a text adventure, it's the other way around; gameplay remains essentially unchanged, but the internals can change considerably. That's because an interactive fiction platform isn't just a virtual machine, but also a world model, and the programming languages themselves, while of course equivalent, can have very different philosophies.

For example: by design, the original Catch That Cat can't be made unwinnable; you'd think that arranging the same puzzles in the same layout would be enough to maintain the invariant. Nope... it broke because TADS 3 handles objects in the dark differently. Don't skimp on beta-testing.

Another thing that can change is player expectations. In a two-word- parser title, one expects sketchiness; on a mainstream platform, you can't get away with nearly as much. Especially in a small game, where extra responses can make half the fun. What I wrote last time about leaving out verbs? Bad idea.

Last but not least, there is the little big issue of going with the grain and making a port that fits the new platform instead of fighting it, even if that means changing certain details. Or even central elements, such as how you communicate with the human NPC in order to obtain a vital item. It would have been easy to do it exactly like in the original, but the game would have been poorer for it. After all, that particular approach addressed an engine limitation which doesn't carry over.

On the flip side, be on the lookout for things you can easily keep the same, as well as things you can't keep at all. In my case, ShuffledEventList messages, and explicitly listed exits. The latter are an interesting case: what is a built-in option in TADS 3 comes as an extension in Inform 7, and is outright impossible in Alan 3 (unless I missed something). As this happens to be a basic feature of my game, choosing the wrong target platform could have compromised the whole effort.

Best of all, working on this gave me improvement ideas I was able to backport into the original implementation, so I ended with two improved versions for the price of one. Now, to put all this newfound experience to good use...