I7 port of Crowther's Colossal Cave looking for testers

Oh, glulx. Heh, I’ve never done anything with glulx, and right now it’s nice that Adventure can fit into a .z8 file. I’ll look into what it would take to add that extension for an alterate glulx release.

Awesome, thanks! Your analysis was exactly what I was looking for. You found a lot of bugs and implementation oversight. I’ve PMed responses to your comments in the transcript, plus the corrected .z8 file.

The axe originally did nothing in Crowther’s version, and trying to throw anything only displayed an error message asking the player to use “drop” or “attack” instead. I’ve corrected this in the latest version.

I’m divided on how exactly to handle the dwarves, as I mentioned. In Crowther, after the Hall of Mists is reached, the dwarves make a single patrol of main rooms in the cave, following something of a figure-eight path. After that, they get removed from play, at least as far as I understand array out of bounds handling in FORTRAN, and as far as I can tell from the behavior of the dwarves in the compiled executable – after a given one of them completes his first circuit or is killed, he never seems to appear again.

Wandering around the cave without sign of any adversary at all, it starts to feel very empty, so my choice was to make them loop indefinitely. As you noticed, they can be intense, but that’s all true to Crowther’s original functionality. To reduce this annoyance factor somewhat, I’ve chosen in the latest version to add a longer pause at the end and to space them somewhat further apart.

I’m not sure what you mean. If you use GLimmr, yes, it’s Glulx only. But Tilford’s extension works just as well in ZCode, as he proves in “Goldilocks is a FOX!”.

Wow, that’s such a different behaviour than any version of Adventure that I’ve played! All Woods’ doing I guess.

Could you have two modes, a Faithful mode and a Player’s mode (pick your own names) which would allow you to choose whether you want the port to remain as faithful as possible to Crowther’s original, or one with a few slight changes which make it nicer in general (such as changing the dwarf rate.)

For those interested, the original dwarf patrol route is Dirty Passage, Low N/S Passage, Hall of Mountain King, West Side Chamber, Crossover, East End of Long Hall, West End of Mists, West of Fissure, East of Fissure, Hall of Mists, Hall of Mountain King, Low N/S Passage, Dirty Passage, nowhere, nowhere, nowhere.

I could go with a more accurate/more playable split chosen at the beginning of the game, say, but that would make my job a lot more difficult. I’ve basically had to decide whether to keep the implementation minimal or allow the more powerful Inform library to smooth out the rough edges with every single thing, room, action, and block of logic. Generally, the physical world model – especially room connections, except when they crashed the game – is as close to the original as possible, while more abstract concerns like gameplay and the flexibility offered by the more powerful parser has in some cases led me to compromise the faithfulness of the port. Especially when Crowther didn’t implement any error message that explains how a thing should be accomplished, I’ve generally leaned towards the side of greater permissiveness, hopefully to be more in line with what a modern IF player has come to expect.

Splitting like you propose would almost require me to duplicate the entire game, to determine exactly which side of the line I’ve implemented already in every single block of code, and then to add the other one. I’m not sure if that would be worthwhile.

I’d say go with the faithful mode. When I made my suggestions, I was not aware that the dwarves had behaved so differently in Crowther’s original. I thought that you had made an implementation mistake. The behaviour was so different that I had a hard time believing it was faithful. If it is in fact faithful then this is extremely interesting, possibly what will become the most interesting new perspective brought to the community by your game, so I vote for faithful implementation despite that I found playing it more annoying.

And the other differences you point out about the use of the axe, etc. are also interesting. It’s a tougher question about whether to implement Woods’s parser improvements, but I would say since you are already implementing Inform’s parser improvements in general, to leave out Woods’s parser improvements seems pointless since the parser isn’t faithful, anyway. It seems like you are going for a non-faithful parser grafted onto a faithful game, and in that case, I would say we should have the benefit of Woods’s wisdom in there too, but only as applied to the parser commands which are already not going to be faithful, anyway.

Paul.

Ah, sorry. I just played around with it now; it’s not going to work, at least in its current version, because it doesn’t support custom directions, which my code makes extensive use of to handle Crowther’s many long-distance travel verbs.

By the way, are there any other people interested in testing this? I’ve found and fixed more bugs, and the display of room descriptions now exactly matches the idiosyncratic behavior of the original.

This should now be a feature-complete version, with all of the original error messages implemented (at least as far as I can trigger, since some apparently go unused). I’ve decided to use Ron Newcomb’s Default Messages extension to centralize and systematize replacing these messages, and I want to make sure that aside from those dealing with the niceties introduced by a modern language, like oops and undo and disambiguation, no really out of place messages have snuck in from Inform.