Update 3 - Starting to make the actual game
I'm using the Inform 7 engine to make my text adventure. Inform 7 is a really interesting game engine geared at interactive fiction. It wants to treat making interactive fiction as a writing exercise rather than a game development exercise. As a result, the program looks more like a fancy word processor than a game development engine:
There's a few different tabs available to use, but in my setup here, the left pane is where you type the source code and the right pane is showing the Inform 7 manuals.
And that actually is source code! Inform 7's most interesting feature is that it tries to use natural language instead of a programming language. So just typing "The Office is a room" is enough to create a room called "Office." The idea, I think, is that you can just write your story and prototype something rapidly without having to learn a programming language first.
Inform 7 is doing a lot of clever stuff here. I've written "South of the Office is the Lobby." I haven't said "The Lobby is a room," but Inform figures out correctly that the Lobby is supposed to be a room, because I've defined it by its spatial relation to another room. I've also put a desk in the Office and a laptop on the desk. Inform has no natural idea what these things are (that is, I could not switch on the laptop and play video games in this story without writing my own code for that). But because the desk has something on top of it, Inform defines this as a "supporter" (something which can support other things), and so guesses that it's some kind of heavy object which I can't pick up and carry away. It's a very good guess, and if it's wrong I can always write another sentence like "the desk is portable".
Here's what this simple Hello World game looks like when it's compiled and played:
Hello World
An Interactive Fiction by wisprabbit
Release 1 / Serial number 200126 / Inform 7 build 6M62 (I6/v6.33 lib 6/12N) SD Office
You can see a desk (on which is a laptop) here. >s Lobby >n Office
You can see a desk (on which is a laptop) here. >get desk
That's fixed in place. >get laptop
Taken.
As you can see, it recognises what "get" means without me saying anything. Inform 7 has a lot of actions and verbs already defined by default, making it pretty easy to write a Zork-like text adventure quickly. I can't do a lot in this game as it is, but it all works!
Inform 7's natural language processing is really clever and impressive. Unfortunately, it's also very easy to write something which Inform 7 will misinterpret, even though it seems contextually logical to you. For example, "South of the Hut is a room" can't be used to create a room called South of the Hut - instead, Inform 7 will make one room called the Hut, and another room south of that which doesn't have a name. You can avoid this by saying something like "there is a room called South of the Hut", but this also has potential issues. "The kitchen cabinet contains a container called a mixing bowl and a portable supporter called a platter" will create a cabinet and put one singular object inside it named "a mixing bowl and a portable supporter called a platter". (Both these examples are taken directly from the Inform 7 documentation.) Basically, it's very easy to accidentally introduce ambiguity into your source code.
In practice, I've found it best to imitate the Imitable Process of Ryan Veeder. Veeder breaks rooms down into their individual attributes - he gives each room an internal name, like "firedept," and a printed name which the player will see, like "Fire Department". These functions are built into Inform 7, and I don't know why they aren't publicised better, because they seem like the most effective way of helping Inform 7 get its head around complex room and object names.
In other words, the best way to work with Inform 7 is apparently to subvert the natural language interface and treat it like object-oriented programming, Oh well.
After plugging my rooms into Inform 7, I end up with this:
As you can see, I've named some rooms with grid references, just to help me disambiguate between different rooms called "Forest". Each room has a description field, which is what the player sees when they're in that room ("You are standing in front of a white house next to a mailbox," etc). There are no descriptions right now - I'll fill these in as I go along.
I'm using the right pane here to display the Index, a catalogue of all the functions available to you in Inform 7 and all the rooms and objects you've put into your game. This is a very very nice feature - it's an overwhelming amount of data at first, but very useful for looking up how exactly Inform 7 expects the writer and player to type certain functions or actions.
Within the Index pane, I'm showing off Inform's automap, also very nice to have. I've put in my map draft almost exactly as it was. The only major functional differences are those little red and green arrows, indicating where I'm letting the player type "up/down" or "in/out" instead of directions. Both "north" and "in" will let the player enter the northeastern cave, for instead. (Come to think of it, I need to account for "enter cave" as well.)
I've also changed some room names. That cave is now "Lair", and "Ravine" has been replaced with "Cliff". More importantly, I've changed a few of the forests into more clearings, in order to make logging seem like a more drastic threat - I'm interested in chasing this environmental metaphor a little more.
The end result of this is that now I have a landscape for the player to walk around. There's absolutely nothing to look at or do in it, though. I've started implementing more features, such as the monster itself, so that will be the next update.