Adventure (Colossal Cave) for ZIL: Beta Testing

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:

1 Like

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.)

Paul.

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.

I have downloaded this latest version to my android where I can easily fit checking it out into various cracks in my day. More soon, before the weekend likely, or during.

2 Likes

Uploaded version 0/150719:

  • Fixed some typos.
  • The descriptions of floating objects (e.g. the bridges) appear more predictably.
  • Added CROSS as a synonym for ENTER.
  • Fixed a compiler bug that caused a few words to lose some of their meanings (e.g. PLOVER only worked as an adjective).
  • The troll can now be referred to.
  • Fixed game crash when listing the contents of a container.
  • Fixed odd behavior when omitting the noun in a command that requires the object to be held.
  • Added SCRIPT and UNSCRIPT commands.
  • Fixed hint condition for the Alike Maze.
  • EAT now requires the object to be held.
  • Multiple objects are now only allowed for certain verbs (like TAKE and EXAMINE).
  • The caged bird and bottled water/oil no longer count against the inventory limit
  • Things other than the bird can no longer be put in the cage.
  • GET X AND Y now gives an error if one of the objects is not present instead of ignoring it.
  • GET X now searches your inventory if the object isn’t found in the location.
  • The rare spices can be found.
  • The game asks whether you want a transcript immediately after starting, so the transcript includes your lucky number.
  • Added the XLUCKY testing command, which can be used to replay the randomness from a previous game.
  • Added OPEN/CLOSE X WITH Y syntaxes as an alternative to UNLOCK/LOCK.
  • CLIMB works with no noun when there’s something climbable nearby.
  • The nest of golden eggs is singular.
  • The cave closes once all treasures have been found, allowing access to the endgame and all 350 points.
  • Fixed capitalization and formatting for generic sentences listing NPCs (as seen in the endgame).

I downloaded and playtested on the new version. Seems fairly polished already! Good job. Nevertheless I found plenty of little things to quibble about. I will private msg them to you.

New build, 0/150725; the latest link is in the OP.

Major changes (please try to break these!):

  • Implemented orphaning (a.k.a. disambiguation). You can now answer the parser’s questions, like “What do you want to take?” or “Which do you mean, the red cube or the blue cube?”, by typing a noun phrase at the next prompt. The orphaning code has gone through many revisions, but there may still be bugs left, especially in interactions between different types of questions/clarifications (e.g. inferring a missing noun). Also, the way it works internally is quite a bit different from what Inform does, so let me know if anything about it feels awkward.

  • Reworked the pronoun system. Type PRONOUNS to see what they’re referring to.

  • Added several debugging verbs. Note that “[object]” in the description here can be an object name or number; the numbers shown by XTREE are the only way to reference rooms and out-of-scope objects.

    • XTREE: Shows the position of all objects in the world model.
    • XTREE [object]: Shows a subset of the tree centered on one object.
    • XGOTO [object]: Sends you to a location.
    • XMOVE [object] TO [object]: Moves an object. Omit the “to” part to move it to your inventory.
    • XREMOVE [object]: Removes an object from play.
    • XLIGHT: Toggles yourself glowing.
    • XEXITS: Shows the exits from your location.
    • XOBJ [object]: Shows some information about the object, mainly its flags.
    • XIT [noun phrase]: Sets the meaning of a pronoun.
    • XLUCKY [number]: Advent-specific; reseeds the RNG. Note that the number now goes on the command line.
    • XLOOT: Advent-specific; shows the state of the treasures.
  • Added the ability to parse numbers (-32767 to 32767). You can use a number in place of any noun; if you manage to do something crazy with a number, please report.

  • Improved the way the parser guesses which syntax you’re trying to use when a command is incomplete. One effect is that an extra preposition is no longer ignored; “LOOK AT” by itself asks what you want to look at, and “LOOK UP” is an error.

Minor changes:

  • Fixed object listing bug where the first element was inappropriately capitalized.
  • TAKE STREAM works inside the building.
  • TAKE INVENTORY works as an alias for INVENTORY.
  • “Safely deposit” message when dropping a treasure in the building.
  • Changed parsing of object names involving nouns that are also adjectives.
  • Rough stone steps aren’t described when they’re unusable.
  • No more out-of-place “They almost form natural stairs” message.
  • No more redundant mention of the scrawled inscription (which can now be READ).
  • Fixed various typos and formatting nits.
  • Added FEED as a synonym for GIVE (preferring edible objects).
  • The parser asks “Whom do you want to <partial command>?” instead of “What…” when it’s expected to be a person/creature.
  • Reworked OIL/WATER and related verbs. POURing and EMPTYing liquids should now respond more sensibly.
  • Added LIGHT/UNLIGHT as synonyms for TURN ON/OFF. (ON/OFF LAMP also works.)
  • The bottle starts out full of water.
  • Verbs involving attacks (e.g. KILL and THROW) and tools (LOCK/UNLOCK) should do a better job of inferring nouns.
  • Added ATTACK X WITH Y syntax.
  • Added response for ENTER WHIRLPOOL.
  • Cleaned up the golden chain’s in-room description; it’s described along with the bear when appropriate.
  • DROP ALL ignores objects you can’t take in the first place (like the water inside the bottle).
  • The parser will try not to infer you, the player, as a noun unless it really can’t find anything better.
  • CLIMB without a noun works to traverse the rough stone steps.
  • Added the grate description to Below the Grate.
  • Curtains are plural.
  • The note on the giant bivalve is a hint that costs 10 points to see, as in the original. What a value!
  • The magazines respond to READ.
  • Fixed the bear caution sign and limestone formations being missing.

Great stuff - but isn’t UNLIGHT, er, unusual English?

Also, FEED = GIVE is a good idea. Have you thought about the prepositions, though? Is the system ready to distinguish FEED/GIVE BIRD THE SEEDS from FEED/GIVE BIRD TO DRAGON?

GIVE BIRD SEEDS isn’t very natural, of course, but FEED BIRD is. That’s why I’m asking.

Yes, just like UNWEAR. :wink:

Yes, the parser can distinguish between those. Where you might notice trouble is when you only include the first noun and make the parser guess your intent: if you only type GIVE BIRD, the parser can infer either syntax (GIVE OBJECT TO OBJECT vs. GIVE OBJECT OBJECT), and it’s currently weighted to prefer the first one… which is correct for GIVE, and probably most verbs, but wrong for FEED. So, whoops, this is what happens now:

> feed bear
You aren’t holding the large cave bear.

> feed
[the tasty food]
[to the large cave bear]
The bear eagerly wolfs down your food, after which he seems to calm down considerably and even becomes rather friendly.

I think the solution here will be to include a one-noun syntax (FEED OBJECT) that searches for an indirect object and redirects, which is how FILL BOTTLE also works.

Brilliant. That would work nicely. And I think it’s a nicety most Inform games don’t have; the output for the bear there is very familiar to me…