Why I chose Inform 7

As I touched on briefly in my introductory post, I am, for now settling on Inform 7 as my platform of choice.  Disclaimer:  These choices and opinions are my own and is not an indication of any deficiencies in any other platform.  In fact, at some point I plan on exploring other platforms (TADS and others) to see what they have to offer, but for today it’s Inform.

NOTE: There may be some minor spoilers of Zork in this post.

Honestly one of the biggest factors for me is this. I am a programmer by trade, primarily with C#.  We do windows, web, and mobile development and I live that 40+ hours a week.  Inform gives me something different to work with.  I have constructs I’m familiar with, yet how you put them all together is completely different from what I do every day.  We still have objects, that have properties and you can take actions on those objects.

A container called a birds nest is here. “On the branch is a small birds nest. “. A closed unopenable container called a jewel-encrusted egg is in the nest. The initial appearance of the jewel-encrusted egg is “In the bird’s nest is a large egg encrusted with precious jewels, apparently scavenged somewhere by a childless songbird. The egg is covered with fine gold inlay and ornamented in lapis lazuli and mother-of-pearl. Unlike most eggs, this one is hinged and has a delicate looking clasp holding it closed. The egg appears extremely fragile.” The description of the egg is “The egg is covered with fine gold inlay and ornamented in lapis lazuli and mother-of-pearl. Unlike most eggs, this one is hinged and has a delicate looking clasp holding it closed. The egg appears extremely fragile.

This is code from the Inform 7 port of Zork.   Here we have a bird’s nest and it can contain things.  There is an egg in the next which is also a container and is unopenable (at least by normal means).  And of course we’ve got plenty of descriptive text.

And here we have some checks that are done when some action results in destroying the egg.

Check destroying the jewel-encrusted egg when the jewel-encrusted egg is not openable:
say “Your rather indelicate handling of the egg has caused it some damage.[line break]The egg is now open.“;
move the broken egg to the holder of the jewel-encrusted egg;
remove the jewel-encrusted egg from play;
say “There is a golden clockwork canary nestled in the egg.  It seems to have recently had a bad experience.  The mountings for its jewel-like eyes are empty, and its silver beak is crumpled.  Through a cracked crystal window below its left wing you can see the remains of intricate machinery.  It is not clear what result winding it would have, as the mainspring appears sprung.” instead.

Now reading those texts you have a good idea what is going on (though I’ve not posted all you can do with the egg and nest.

Of course writing this code is not as simple as reading it.  Inform is still a compiler at heart with a strict set or rules for syntax, however those with any semblance of programming skills should be able to pick up the nuances easily enough.

For me, I read through some samples (), some articles (Emily Short is a good place to start for some code and theory), got into the forum (http://www.intfiction.org/forum/index.php) and I then bought a book that was quite useful, Creating Interactive Fiction with Inform 7 by Aaron ReedAaron Reed, who has created some very good and influential works himself (check out Blue Lacuna which is billed as the longest work of IF ever created) walks you through creating a game from scratch and discussions a lot (not everything) about not only the technical details and syntax, but also gives tips on the art of creating a work of IF.

Someday I will probably jump in and look at TADS as it’s syntax is more C-like (for that matter, perhaps even bouncing back to Inform 6 would provide much the same — that may be even more useful as I can have both I6 and I7 code in the same project), but for now I’m enjoying the light, yet powerful and still at times complex Inform 7.