My ZIL plan for a while has to begin my journey by implementing one of the sample transcripts from one of the Infocom games; I have other project ideas that might use ZIL down the road, but a lot of these transcripts involve several features and it always just seemed like a fitting way to get to know the language.
For a while, I delayed the project since most transcripts involved commands to characters, and before ZILF 0.7 (and its Adventure example code), I had no idea how to code them. I have to say that I like how ZIL/ZILF handles it now!
I was torn between trying to do the sample transcripts from either Ballyhoo or Lurking Horror, as those were the first Infocom games I ever
purchased and have a special fondness for them. Since the Frankenstein narrative of Lurking Horror's sample transcript was better suited to Halloween, I opted for the Ballyhoo transcript.
|
Ballyhoo sample transcript |
Now, in trying to actually execute these transcripts, one gets the impression that they weren't ever actually coded (no big surprise there), nor do they have the best internal game logic. I still have to come up with some good in-game excuse to not allow the player to just give his ticket to the organ grinder at the beginning of the game.
The juggler is here, dropping things.
Among other things, the transcript seems to be in BRIEF mode and the juggler character in particular has alternate text when you revisit his room (and it doesn't seem like something that'd be coded as a daemon/queue). For a short while, it made me temporarily forget Infocom's actual default behavior (where no room objects are listed in revisited rooms) and I almost set upon rewriting my ZILF library's code. In the end, I realized that the transcript was doing something that no actual Infocom game did. Just the same, I was able to code it:
To get that code to work, I had to edit
DESCRIBE-PLACE so it didn't set the TOUCHBIT flag (as TOUCHBIT is also set by the
GOTO routine). The first room of the game still has to be given TOUCHBIT by hand, but other than that, it should be good.
The spacing of the transcript also doesn't quite match an actual Infocom game. Of course, this is for manual typography purposes, but it reminds me how optimal default spacing is always an interesting concept to me (and whether it is important for authors to easily change it).
You crawl under the hedge and find yourself...
My first thought pertaining to the hedge-crawling text was that I would use the M-ENTER check as it is used by the ZIL manual to print entering-rooms messages. Even though the game didn't require it, I checked to see if the code supported different-messages-depending-on-where-the-player-is-coming-from. Due to setting the HERE global before the M-ENTER code was called, it wasn't possible. Easy enough to fix, though.
In the end, I decided that since this message was directly tied to the hedge, I'd just write a bunch of hedge code instead.
Once the player has crawled under the hedge, he or she can go west back onto the street without typing >CRAWL UNDER THE HEDGE but leaving the street always involves the command (in trying to be faithful, I imagined Infocom to somewhat be a dick about it).
Putting the hedge object in location GLOBAL-OBJECTS makes sure it is available from every room in the game.
I made that HEDGE-CRAWL routine so that players can re-enter the street with a simple >GO WEST (and go to the right location, depending on where they left from). That was pretty fun to figure out. Notice how the code sets the local variable (DESTIN) to the applicable room and then just ends with saying the variable again. This makes the routine return the value of the variable, sending the player to the correct room.
To be continued!