Adventure (Colossal Cave) for ZIL: Beta Testing


My ZIL port of Adventure is now in decent enough shape to be beta-tested, and you get first crack at it!

Download advent.z3 version 1/150919

Download advent.z3 version 0/150823 (also available: Z4, Z5 with undo)

Download advent.z3 version 0/150803 (also available Z4, Z5 with undo)

Download advent.z3 version 0/150725 (also available: Z4, Z5 with undo)

Download advent.z3 version 0/150719

Download advent.z3 version 0/150713

Download advent.z3 version 0/150712

Download advent.z3 version 0/150709

This isn’t only a test of the game, but also the library features that have been developed for it, so it’s possible you’ll encounter bugs in unexpected places like basic parsing, reachability, or light checking. For instance, at one point it was possible to PUT ME IN STREAM and end up in an invalid location, or PUT STREAM IN STREAM and wash away the stream itself! A few big known issues: you can’t refer to multiple objects at once (with ALL or AND), you can’t put multiple commands on one line, and disambiguation is barely implemented at all (the parser will occasionally guess a noun if you leave it out, but that’s it).

There are also some colorful or snarky default responses in the library; if you encounter one that seems inappropriate for the command, that’s worth reporting.

Please report issues in this thread or by private message. You can use spoiler tags if you feel like it, but this game is almost 40 years old now. :wink:


You have no idea how good it feels to play a ZCode game with a different library. :stuck_out_tongue: The default one gets so tiring!

“Lucky numbers”? Isn’t that a particularity of a certain version of Adventure? I’m surprised you didn’t add a wizard mode!

Curious artefacts, or maybe they’re supposed to be this way:

What do you want to x?

What do you want to examin?

That’s all I’ll be checking out, I’ll wager. I don’t like beta-testing, I prefer playing games without having that burden. But these cropped up and I thought I’d ask about them.

EDIT 3 - The lamp’s description is wrong.

x lamp
It is a shiny brass lamp, glowing brightly.

turn it off
It’s already off.

turn it on
You switch on the brass lantern.

x lamp
It is a shiny brass lamp, glowing brightly.

EDIT 4 - I can’t refer to the nugget of gold as “gold”, only as “nugget”. Design or limitation?

I think I’m done now. :slight_smile: If I’m not careful I’ll end up doing some actual beta-testing!

EDIT 5 - Edits 1 and 2 referred to things you already said were known issues. Silly me! I’ve removed them.

EDIT 6 - You can just go WEST into the west side of the fissure. The bridge appears on its own. Also, if you JUMP while the bridge is non-existant, the error message will say “cross the bridge” and it’ll appear. What with this and the lamp, I guess you just forgot to set off some variables that you’d turned on for testing, huh? :wink:

Also, there’s no HELP text. I wouldn’t mind, it’s just that that text is what really hints the bird/rod puzzle.

EDIT 7 - Does it matter that you can PLUGH before the hollow voice says as much as long as you’ve been to Y2?


I totally understand not wanting to play a half-baked game, so thanks for getting this far!

It’s something I put in just for the beta, to identify the random seed and (hopefully) make it easier to reproduce bugs. (It’s less useful than it could be since the parser can’t handle number input yet, so there’s no way to reseed the random number generator.)

Mostly by design… like Infocom’s parser (and unlike Inform’s), ZILF distinguishes between adjectives and nouns, and a noun is always [EDIT: required]. For this object, GOLD is the adjective and NUGGET is the noun, so you can call it NUGGET or GOLD NUGGET but not just GOLD.

This may be worth revisiting for specific objects in Advent - I’ll take another pass through the objects to see if any other nouns would make sense. V3 only allows 4 nouns, though, compared to 8 adjectives.

Nope, just bugs! Thanks.

I’ll take this into consideration… full help menus like the Inform port may take some time, but maybe there’s something simpler I can do sooner.

I think this is the same behavior as the Inform port (the magic words are activated as soon as you visit the locations), but I’d be willing to consider changing it… did the original game make you wait for the hollow voice?


Let me clarify, it totally isn’t that. It’s that if I’m in beta-testing mode I’ll be actively stressing the game, and not only is that not my idea of fun, it’ll then ruin the pleasure of the game for me later on when it’s properly released. I beta-tested a game once; never again.

You reference the original a couple of times… I’ve no idea what the original did! I have tons of versions of Adventure for many platforms, and all I know is what most of them do in a “standard” way. Most of them, for instance, begin asking if you would like instructions - so no actual full-blown menu would be necessary. :wink:

If you’re going for the original, then the PLUGH thing should actually work the other way from what I was saying. Based on Laroquod’s post and the version of ADVENTURE he references as being the most faithful port he’s found, PLUGH and all magic words work even before you get to the room at all. They work right from the start.

Re the adjective, I guess it’s just me being used to the Inform parser and GOLD being shorter to type. :wink: But it makes total sense. Heck, it made sense even as I was posting about it - hence my “design or limitation” question. Still, since modern players will be playing the new ZIL games now, it might be a design consideration which is shorter to type (adjective or noun), and if the adj is shorter, then add it as a synonim. Just a thought.

EDIT - Just nitpicking now. :wink:

Your version of DRINK STREAM says it tastes strongly of animals. The version Laroquod pointed at as being faithful says it tastes strongly of minerals.

Also, DRINK STREAM at “In a Valley” produces only “You aren’t that thirsty”; in that other version I mentioned, it prints the normal “water tastes of minerals” response, which makes sense. EDIT UMPTEEN - I think this is because in this aprticular location you have a streambed object, distinct from the stream object in most other rooms. Actually, they both make sense, but it’s either one or the other, and the water taste is more faithful and also more interesting.

Aaargh, I’ll tear myself away from it now before I get in too deep and can’t come out again!

EDIT 2 - Tell you what, you seem to be working from Nelson’s version (all you said is “Inform version”, and there’s a few, but Nelson is usually the one people mean).!CglUFZaC!yJQMbdmPjSnm0J2A9DRNfA
This is a bunch of ADVENTURES. A big bunch.!m4VxSJJI!lDE0dvS0vJs3blTQgHl1PA
This is just the Inform versions. Or, possibly, the ZCode versions.!68kW0bYD!ib6CsrW2aA4EhYQ_NmTITw
This, I believe, is the version Laroquod says it’s the most faithful. You might be interested in using that instead of Nelson’s (if that IS the one you’re using) as the base of your work.


(I’m replying instead of editing again so as not to confuse you any more than I probably already have)

I also see that you have decided not to have the “navigate by keyword” nature of the above-ground locations. Was that also on purpose? I mean, heh, there’s probably a line between “porting Adventure”, done many times before, and “porting Adventure to ZIL”, and keeping the “navigate by keyword” system (like typing BUILDING above ground to get to the building) is probably more hackish than you’d like for the purposes of this ZILmonstration. But I’m a pain, so I had to bring it up.


In the “faithful” port there’s a bit of sketchy implementation regarding the spring/stream inside the building. If you type “drink”, it tries to drink the bottle; if it’s empty, it prints the “you drink from the stream” message. But if you actually type “drink stream”, it goes…

The stream flows out through a pair of 1-foot-diameter sewer pipes.
It would be advisable to use the exit.

Which makes sense. Also, it doesn’t recognise spring at all, not that that matters much.

Your version behaves a bit differently, so I thought you’d like to consider this. In your version, you can drink from the stream inside the building. Which becomes inconsistent when you realise that you can’t drink from the spring.


Hey, funny thing about the pirate maze (that’s the one where the room description is slightly different, isn’t it?) - if you’re not in verbose mode (and by default you’re not), you only get the room description the first time you go into a room.

Which doesn’t make the maze much easier, but does make it obvious - through a meta-game mechanism - that you’re suddenly in a room you’ve visited before. This might not be the behaviour you were going for.


SWIM always returns “You must be joking”, regardless of whether or not the stream is in the location. “SWIM STREAM” or “SWIM IN STREAM” isn’t something it recognises at all.

“ENTER STREAM” yields “That’s not something you can get inside”. I prefer the response in the version Laroquod (and, now, I) have posted: “Your feet are now wet”. Also, in that version, every instance of SWIM is fielded by “I don’t know how”. A cop-out, but a nice one.

And there. I really AM done, because I have to go out now!


Thanks again - you’ve given me a lot to think about!

I have indeed been working mostly from Graham Nelson’s port. I’d forgotten what @Laroquod said about how it compares to the others. The point about magic words and meta-gaming is well taken.

On the one hand, it’s nice to be able to directly compare the source code to another well-known port, like you can with the Hugo version (which is basically a search-and-replace); on the other hand, the Hugo version came out a year after Graham’s, and I’m now doing this 20 years later, so maybe a broader perspective is needed.

Heh. You know, I thought that was weird after I typed it. “Tastes strongly of animals, but is not unpleasant”? Turns out I misread the source and it should’ve been minerals all along. :smile:


Glad to have given you food for thought. :slight_smile: I expect to be very busy over the next three days, but if not I’ll dive again. Just, don’t count on it.


Little note. X North (or any other cardinal direction) says it didn’t expect the word there. But if I examine up or examine down it says it just doesnt understand that sentence.

This is probably because you cant look in a direction, but you CAN look up or down, resulting in the room description, which is a nice touch.

It’s only a matter of cobsistency, here. UpDown are as valid directions as any other, and it would make sense for the parser to interpret them the same way.

I also note LOOK NOUN is not synonimous with EXAMINE NOUN, but LOOK AT NOUN is. Nice grammatical touch!


That it works at all is actually a bug related to the fact that UP and DOWN are prepositions (which is also why X UP fails differently from X NORTH), but I’ve added directions-as-nouns to the todo list.


Cool, this project looks interesting. So the point is not so much to reproduce the game itself as to reproduce it in your reconstruction of Infocom’s ZIL source code? Have I got that right?

What are the most interesting aspects of ZIL, for you? Sorry for my ignorance.

I’ll check it out as soon as I can. I do not have much spare time for a full playtest right now but I’ll wander around in it.

The thing is, with Adventure the original source code is now available, so it’s not that hard to check for faithfulness just by searching for text from the playable version in the original source code. Whenever I have done this (and I have performed this comparison a LOT, while writing my MUD version and while prepping that blog post on Adventure) almost every version contains multiple inaccuracies and errors - and in Nelson’s case, just plain impositions of the porter’s tastes - except for Arthur O’Dwyer, who seems to have been one of the few (only?) porters to have set as his goal the accurate representation (rather than ‘improvement upon’) of game history.

Of course, in the future, the ‘accuracy’ ethic will be paramount and people will wonder what people who tried to ‘fix’ Adventure were ever thinking, the same way we might view French translators who tried to ‘improve’ on Edgar Allan Poe. (I had an argument not that long ago with someone who said French translators had improved Poe. I said that if they had, then they had failed in their duty to represent him accurately. Then they pointed out that in the French versions, Poe’s narrrators sound much less unnecessarily grandiose, but of course that is an essential part of his style of unreliable narration. You are supposed to find his heroes to be dissolute and of questionable morals and the uncontainability of their prose is part and parcel of this. This is the problem when people seek to ‘improve’ on literary/game history when transposing it - it assumes that they understand perfectly how those works functioned rhetorically in the first place. I prefer to take the humble approach as much as possible, given whatever are the goals of the project.)


What's interesting about ZIL?

Re Poe, I know I can’t possibly share this in any meaningful way unless you know Portuguese, but one of our most celebrated poets - Fernando Pessoa - did an astounding work in translating The Raven and Annabel Lee. It really is amazing. He even manages to respect the metric and the musicality that is so characteristic of Poe’s poems. Rather than try to “improve” Poe, I daresay his translations are what Poe would have written if he were Portuguese.

No, this doesn’t really have a point. I just wanted to share.


Yeah, it’s not a pixel-perfect Z-machine port; Arthur O’Dwyer has already done that.

This is basically an illustration of how to write a full-sized game for ZILF, using the example of a work that’s well-known, widely ported, and would’ve been fresh in everyone’s mind when Zork was written. It demonstrates the language, and it forces me to fill in the missing parts of the library.

When it comes to historical accuracy, there are conflicting goals. I want to be true to the experience of playing Adventure in 1977, since historical interest is kind of the point of ZILF (and so I can test it with existing walkthroughs), but I don’t want it to feel obsolete or unusable in 2015. Players expect a certain level of detail and consistency, so there’s a full-sentence parser, room names and a status bar, various default responses, etc.


Uploaded version 0/150712, which fixes many of the above issues and adds multiple object parsing (ALL, AND, BUT).

Known issues in this version:

  • ALL doesn’t always limit itself to objects that make sense. TAKE ALL will skip untakeable items, but it’ll give errors for takeable items you’re already carrying.
  • PUT IN and PUT ON give spurious “You aren’t holding” errors about unrelated objects.


Which is why I sometimes wondered whether I wasn’t over-reporting some things. :wink:


Uploaded version 0/150713, which fixes the known issues above (yay working TAKE ALL) and adds a few things:

  • Instructions, dynamic hints, and HELP/INFO/CREDITS commands. These function more or less the same as in the original: hints are offered when you appear to be stuck in an area, and they cost points, but they give you more time. HELP and INFO are free text dumps. Some of you are now listed in the CREDITS – let me know if you’d like that to be changed!

  • Altered the Alike Maze. Some of the connections seemed suspicious (e.g. two maze rooms leading to the same dead end), like they were added, changed, and/or typoed either through my own bumbling or by one of the previous porters, so I wrote a script to translate the Fortran version’s maze and it should now be exactly as it was then.


I think I’d prefer not to be credited, if that’s allright with you. I just don’t like the idea of my name appearing in someone else’s work without proper justification, and I didn’t put in nearly enough effort in “testing” to warrant that.


Noted - I’ve updated the file.