It’s a great help to have a comprehensive reference.
Things I would like maybe added in appendices:
Comparison table of used standard messages in different, well known, interpreters. Both first and second person view.
Table of “quirks” in different games. Simply what to look out for, and maybe where a game diverts from standard. For example destroying the lamp as above or concatinating multiple prints.
Is the trick of craming in more messages by odd/even action lines documented? EDIT: Yes it is.
At least “THE COLOSSAL CAVVE” (cave1.fiad) game available here does not destroy the lamp when the timer runs out. I have a vague memory I checked this in an emulator long ago and found that the original interpreter does indeed destroy the lamp automatically.
EDIT: I checked it again just to be sure, and you are right, the original interpreter does not destroy the lamp. It stays lit after the batteries run out (Though it keeps saying THE LIGHT HAS RUN OUT! every turn.)
Just to clarify, I did check Arrow of Death part 1 in a Spectrum emulator, and the original interpreter does count down the light timer. The intent is of course that this shouldn’t matter, as you say.
That one’s easily fixable at least—I can have the GET opcode do the equivalent of a throw instead of the equivalent of a break to stop processing entirely. Just let me know when the specs are updated so I can be sure!
It would make an interesting appendix – we could probably find the messages via a hexdump of games for Spectrum (etc), or memory dumps for C64 (where the files themselves are compressed).
I think detailed information about individual games is beyond the scope of a specifications document. IFDB and/or CASA would be a better place for that kind of thing (imho).
Hmmm, maybe a Brian Howarth game can be detected reliably?
~/other/zx_games$ grep -a -l Not.a.sausage *.*
Arrow of Death 1.z80
Arrow of Death 2.z80
Circus.z80
Escape from Pulsar 7.z80
Feasibility Experiment.z80
Perseus and Andromeda.z80
Ten little Indians.z80
The Golden Baton.z80
The Time Machine.z80
Waxworks.z80
Wizard of Akyrz.z80
Mmm, I don’t necessarily agree. The specification is meant to describe the original behavior of only a handful of games; an appendix mentioning irregularities like “Howarth games require the lamp object to be removed automatically when flag 16 is set” would be helpful for anyone implementing an interpreter.
Yes I think looking at the names of a particular room can work. Here is ROOM_5, which look fairly distinctive:
1_baton.sck : ROOM_5 "clearing by a Cabin"
2_timemachine.sck : ROOM_5 "*I'm on a Grassy Plain"
3_arrow1.sck : ROOM_5 "*I'm in the King's Chamber"
4_arrow2.sck : ROOM_5 "Barren plain"
5_pulsar7.sck : ROOM_5 "*I'm on a crewman's bunk"
6_circus.sck : ROOM_5 "*I'm inside my car"
7_feasibility.sck : ROOM_5 "*I'm in the Mountains"
8_akyrz.sck : ROOM_5 "Princess' Bedroom"
9_perseus.sck : ROOM_5 "*I'm in the Temple of Athene"
10_tenindians.sck : ROOM_5 "Dressing Room"
11_waxworks.sck : ROOM_5 "Hall of Mirrors"
It’s very unlikely any other game has a ROOM_5 with one of those names – none of the ones I looked at did.
For the specs, I plan to say something like “an interpreter should detect a Brian Howarth game, and when detected, destroy the light item when the lamp timer runs out”. Maybe even specify a detection method. Sounds okay?
“Quirk” was a badly choosen word. I mean things like the time machine effect that depends on that the screen writing is slow or that some games concatinate consecutive print-statements or the match puzzle (the count?) that is hard to implement without split screen.
Are there any intetpreter that have implemented support for IT-object? Shouldn’t be to hard (latest handled that is in scope or, if only one obj in room, that).
IT as a noun is implemented in my ScottFree fork, which Gargoyle currently uses. It simply copies the last used noun if there is one, as long as the game itself doesn’t define IT as a noun.
Yeah my own interpreter accepts IT HIM HER THAT THEM.
Neither ScottFree or ASFD accept “IT”. They do handle “ALL” though – as does my interpreter and Petter’s fork of ScottFree.
Looking at hexdumps of ZX Spectrum games: I don’t find “IT” or “ALL” in games by the Scott Adams, but the games by Brian Howarth do contain “ALL” and “EVER”, as well as “THES”, “THOS”, “THEM” pronouns – suggesting those games do support some pronouns.
At least Questprobe featuring The Hulk defines “IT”, for some reason.
EDIT: Also, while all the original interpreters for the Brian Howarth games support TAKE ALL, DROP ALL, chaining commands with THEN or periods, and taking and dropping several items with commands such as TAKE X AND Y, they do not understand IT or any other pronouns.
I wonder why “THES”, “THOS” (etc) appear in some of the games then? I just tried Waxworks and trying GET THEM produces a “Eh?” response, suggesting it at least recognises the word.
I’ve collected the messages of some modern interpreters (e.g. ScottFree) and a few selected games. The following table is not complete, but gives a rough idea of the diversity of messages out there:
ASFD (Interpreter) : Light runs out in <NUM> turns.
ScottFree (Interpreter) : Light runs out in <NUM> turns
ScottFree 2nd (Interpreter) : Your light is growing dim.
Bunyon (Interpreter) : Light is going dim
ArrowOfDeath (C64) : Light runs out in <NUM> turns
VoodooCastle (BBC) : Light runs out in <NUM> turns
Waxworks (ZX Spectrum) : Light runs out in <NUM> turns!
ASFD (Interpreter) : LIGHT RAN OUT!
ScottFree (Interpreter) : Light has run out!
ScottFree 2nd (Interpreter) : Your light has run out.
Bunyon (Interpreter) : Light went out!
ArrowOfDeath (C64) : The Light ran out!
Claymorgue (ATARI) : Light has run out!
Pirate (ATARI) : Light has run out!
VoodooCastle (BBC) : Light has run out!
Waxworks (ZX Spectrum) : The light ran out
ASFD (Interpreter) : Beyond my power to do that.
ScottFree (Interpreter) : It's beyond my power to do that.
ScottFree 2nd (Interpreter) : It's beyond your power to do that.
Bunyon (Interpreter) : It's beyond my power to do that.
ArrowOfDeath (C64) : That is beyond my power
Claymorgue (ATARI) : Its beyond my power to do that.
Gremlins (ZX Spectrum) : That's beyond my Power.
Pirate (ATARI) : Beyond my power to do that.
Robin 2nd (ZX Spectrum) : That's beyond my Power.
VoodooCastle (BBC) : It's beyond my power to do that
Waxworks (ZX Spectrum) : That's beyond my Power!
ASFD (Interpreter) : Don't see it here!
ArrowOfDeath (C64) : I don't see it here
Claymorgue (ATARI) : I don't see it here!
Gremlins (ZX Spectrum) : I don't see it here.
Pirate (ATARI) : I don't see it here!
Robin 2nd (ZX Spectrum) : You don't see it here.
VoodooCastle (BBC) : I don't see it here
Waxworks (ZX Spectrum) : I don't see it here
ASFD (Interpreter) : Not carrying it!
ArrowOfDeath (C64) : I'm not carrying it!
Claymorgue (ATARI) : I'm not carrying it!
Gremlins (ZX Spectrum) : I'm not carrying it.
Pirate (ATARI) : I'm not carrying it!
Robin 2nd (ZX Spectrum) : You are not carrying it.
VoodooCastle (BBC) : I'm not carrying it!
Waxworks (ZX Spectrum) : I'm not carrying it
ASFD (Interpreter) : Already have it.
ArrowOfDeath (C64) : I'm carrying too much!
Claymorgue (ATARI) : I already have it
Gremlins (ZX Spectrum) : I have it.
Pirate (ATARI) : I already have it
Robin 2nd (ZX Spectrum) : You have it.
ASFD (Interpreter) : Got too much. TAKE INVENTORY.
ScottFree (Interpreter) : I've too much to carry!
ScottFree 2nd (Interpreter) : You are carrying too much.
Bunyon (Interpreter) : I am carrying too much.
Claymorgue (ATARI) : I'm carrying too much! try: `TAKE INVENTORY`
Gremlins (ZX Spectrum) : I'm carrying too much!
Pirate (ATARI) : I'm carrying too much! try: `TAKE INVENTORY`
Robin 2nd (ZX Spectrum) : You are carrying too much!
VoodooCastle (BBC) : I'm carrying too much! Try: TAKE INVENTORY
Waxworks (ZX Spectrum) : I'm carrying too much!
ASFD (Interpreter) : CARRYING:
ScottFree (Interpreter) : I'm carrying:
ScottFree 2nd (Interpreter) : You are carrying:
Bunyon (Interpreter) : I am carrying:
ArrowOfDeath (C64) : I am carrying:
Claymorgue (ATARI) : I'm carrying:
Gremlins (ZX Spectrum) : I'm carrying:
Pirate (ATARI) : I'm carrying:
Robin 2nd (ZX Spectrum) : You are carrying:
VoodooCastle (BBC) : I am carrying the following:
Waxworks (ZX Spectrum) : I'm carrying:
ASFD (Interpreter) : Nothing!
ScottFree (Interpreter) : Nothing
Bunyon (Interpreter) : Nothing
ArrowOfDeath (C64) : Not a sausage!
Claymorgue (ATARI) : Nothing!
Gremlins (ZX Spectrum) : Not a thing!
Pirate (ATARI) : Nothing
Robin 2nd (ZX Spectrum) : Nothing!
VoodooCastle (BBC) : Nothing at all
Waxworks (ZX Spectrum) : Not a sausage!
Gremlins (ZX Spectrum) : Taken.
Waxworks (ZX Spectrum) : Taken
Gremlins (ZX Spectrum) : Dropped.
Waxworks (ZX Spectrum) : Dropped
ASFD (Interpreter) : I also need a direction.
ScottFree (Interpreter) : Give me a direction too.
ArrowOfDeath (C64) : Try a direction
Gremlins (ZX Spectrum) : Direction ?
Robin 2nd (ZX Spectrum) : Direction ?
Waxworks (ZX Spectrum) : Try a direction
Claymorgue (ATARI) : I also need a direction.
Pirate (ATARI) : I also need a direction.
VoodooCastle (BBC) : I need a direction too
ASFD (Interpreter) : Dangerous to move in the dark!
ScottFree (Interpreter) : Dangerous to move in the dark!
Bunyon (Interpreter) : Dangerous to move in the dark!
ArrowOfDeath (C64) : It's risky moving in the dark!
Claymorgue (ATARI) : Its dangerous to move in the dark!
Gremlins (ZX Spectrum) : I can't go THAT way.
Pirate (ATARI) : I can't go in that direction.
VoodooCastle (BBC) : It's dangerous to move in the dark!
Waxworks (ZX Spectrum) : It's risky moving in the dark!
ASFD (Interpreter) : Fell & broke my neck!
ScottFree (Interpreter) : I fell down and broke my neck.
ScottFree 2nd (Interpreter) : You fell down and broke your neck.
Bunyon (Interpreter) : I fell down and broke my neck.
ArrowOfDeath (C64) : I fell and broke my neck!
Claymorgue (ATARI) : I fell and broke my neck!
Pirate (ATARI) : I fell & broke my neck!
VoodooCastle (BBC) : I fell & broke my neck! I'm DEAD!
Waxworks (ZX Spectrum) : I fell and broke my neck!
ASFD (Interpreter) : Can't go that way.
ScottFree (Interpreter) : I can't go in that direction.
ScottFree 2nd (Interpreter) : You can't go in that direction.
Bunyon (Interpreter) : I can't go in that direction.
ArrowOfDeath (C64) : I can't go in that direction
Claymorgue (ATARI) : I can't go in that direction.
Robin 2nd (ZX Spectrum) : You can't go THAT way.
VoodooCastle (BBC) : I can't go in THAT direction
Waxworks (ZX Spectrum) : I can't go in that direction
ASFD (Interpreter) : What shall I do now?
ScottFree (Interpreter) : Tell me what to do ?
Bunyon (Interpreter) : What shall I do?
ArrowOfDeath (C64) : --WHAT NOW ?
Gremlins (ZX Spectrum) : ---WHAT NOW ?
Robin 2nd (ZX Spectrum) : ---WHAT NOW ?
VoodooCastle (BBC) : ---TELL ME WHAT TO DO ?
Waxworks (ZX Spectrum) : WHAT NOW ?
ASFD (Interpreter) : Huh?
Bunyon (Interpreter) : Huh?
Claymorgue (ATARI) : Huh?
Pirate (ATARI) : Huh?
Robin 2nd (ZX Spectrum) : Huh?
VoodooCastle (BBC) : Huh?
ASFD (Interpreter) : I don't understand you.
ScottFree (Interpreter) : I don't understand your command.
Bunyon (Interpreter) : I don't understand the command.
ArrowOfDeath (C64) : I don't understand you
Gremlins (ZX Spectrum) : I don't understand you
Robin 2nd (ZX Spectrum) : I don't understand
Waxworks (ZX Spectrum) : I don't understand what you mean
Claymorgue (ATARI) : I must be stupid, but I just don't understand what you mean
Pirate (ATARI) : I must be stupid, but I just don't understand what you mean
VoodooCastle (BBC) : I must be stupid, but I just don't understand what you mean
ASFD (Interpreter) : Can't do that... YET!
ScottFree (Interpreter) : I can't do that yet.
Bunyon (Interpreter) : I can't do that yet.
ArrowOfDeath (C64) : I can't do that just now!
Claymorgue (ATARI) : I can't do that... YET!
Gremlins (ZX Spectrum) : I can't do that just now!
Pirate (ATARI) : I can't do that... YET!
Robin 2nd (ZX Spectrum) : You can't do that just now!
VoodooCastle (BBC) : I can't do that...yet!
Waxworks (ZX Spectrum) : I can't do that just yet!
ASFD (Interpreter) : OK
ScottFree (Interpreter) : O.K.
Bunyon (Interpreter) : OK.
ArrowOfDeath (C64) : O.K.
Claymorgue (ATARI) : O.K.
Gremlins (ZX Spectrum) : O.K.
Robin 2nd (ZX Spectrum) : O.K.
VoodooCastle (BBC) : O.K.
Waxworks (ZX Spectrum) : O.k.
ASFD (Interpreter) : Don't know what `xxx` is.
ArrowOfDeath (C64) : `xxx` is a word I don't know..sorry!
Gremlins (ZX Spectrum) : `xxx` is not a word I know.
Claymorgue (ATARI) : I don't know what `xxx` is.
Pirate (ATARI) : I don't know what `xxx` is.
VoodooCastle (BBC) : I don't know what a `xxx` is
Waxworks (ZX Spectrum) : I don't know what a `xxx` is.
ASFD (Interpreter) : Don't know how to `xxx` something.
ArrowOfDeath (C64) : I don't know what a `xxx` is
Waxworks (ZX Spectrum) : `xxx` is not known to me!
ASFD (Interpreter) : Use 1 or 2 words only!
Claymorgue (ATARI) : Use 1 or 2 words only!
Pirate (ATARI) : Use 1 or 2 words only!
ASFD (Interpreter) : TOO DARK TO SEE!
ScottFree (Interpreter) : I can't see. It is too dark!
ScottFree 2nd (Interpreter) : You can't see. It is too dark!
Bunyon (Interpreter) : I cant see. It is too dark!
ArrowOfDeath (C64) : It's too dark to see!
VoodooCastle (BBC) : It's too dark to see!
Waxworks (ZX Spectrum) : It's too dark to see!
ASFD (Interpreter) : I'm in a <ROOM>
ScottFree (Interpreter) : I'm in a <ROOM>
ScottFree 2nd (Interpreter) : You are <ROOM>
Bunyon (Interpreter) : I am in a <ROOM>
ArrowOfDeath (C64) : I'm in a <ROOM>
Gremlins (ZX Spectrum) : I'm in a <ROOM>
Robin 2nd (ZX Spectrum) : You are <ROOM>
VoodooCastle (BBC) : I am in a <ROOM>
Waxworks (ZX Spectrum) : I'm in a <ROOM>
ScottFree (Interpreter) : Obvious exits:
Bunyon (Interpreter) : Obvious exits :
ArrowOfDeath (C64) : EXITS:
Claymorgue (ATARI) : Some exits are:
Pirate (ATARI) : Some exits are:
Gremlins (ZX Spectrum) : Exits:
Robin 2nd (ZX Spectrum) : Exits:
Waxworks (ZX Spectrum) : Exits:
VoodooCastle (BBC) : Some obvious exits are:
ScottFree (Interpreter) : I can also see:
ScottFree 2nd (Interpreter) : You can also see:
Bunyon (Interpreter) : Visible items are :
ArrowOfDeath (C64) : Things I can see:
Claymorgue (ATARI) : Visible items:
Pirate (ATARI) : Visible items:
Robin 2nd (ZX Spectrum) : You see:
Gremlins (ZX Spectrum) : Things I see:
Waxworks (ZX Spectrum) : Things I can see:
VoodooCastle (BBC) : Visible items:
Gremlins (ZX Spectrum) : Resume a saved game ?
Robin 2nd (ZX Spectrum) : Resume a saved game ?
VoodooCastle (BBC) : Restore a previously saved game ?
Waxworks (ZX Spectrum) : Resume play on a Game ?
ASFD (Interpreter) : Stored <NUM> treasures.
ScottFree (Interpreter) : I've stored <NUM> treasures.
ScottFree 2nd (Interpreter) : You have stored <NUM> treasures.
ArrowOfDeath (C64) : I've stored <NUM> treasures
Claymorgue (ATARI) : I stored <NUM> treasures.
Pirate (ATARI) : I stored <NUM> treasures.
VoodooCastle (BBC) : I've stored <NUM> TREASURES
Waxworks (ZX Spectrum) : I've stored <NUM> Treasures
ASFD (Interpreter) : Scale 0-100 thats <NUM>.
ScottFree (Interpreter) : On a scale of 0 to 100, that rates <NUM>
ArrowOfDeath (C64) : Out of 100 that rates <NUM>
Claymorgue (ATARI) : on a scale of 0-100 thats: <NUM>
Pirate (ATARI) : on a scale of 0-100 thats: <NUM>
VoodooCastle (BBC) : On a scale of 0 to 100 that rates <NUM>
Waxworks (ZX Spectrum) : On a scale of 0 to 100 that rates <NUM>
ASFD (Interpreter) : YOU WON!
ScottFree (Interpreter) : Well done.
ArrowOfDeath (C64) : WELL DONE! Mission completed!
VoodooCastle (BBC) : FANTASTIC! You've solved it ALL!
Waxworks (ZX Spectrum) : Well done! Mission completed!
ASFD (Interpreter) : I'm DEAD!
ScottFree (Interpreter) : I am dead.
ScottFree 2nd (Interpreter) : You are dead.
Bunyon (Interpreter) : I'm dead...
ArrowOfDeath (C64) : I'm DEAD!!
Claymorgue (ATARI) : I'm DEAD!
Gremlins (ZX Spectrum) : I'm DEAD!!
Pirate (ATARI) : I'm DEAD!
VoodooCastle (BBC) : I'm DEAD!!
Waxworks (ZX Spectrum) : I'm dead
ASFD (Interpreter) : ADVENTURE over.
ScottFree (Interpreter) : The game is now over.
Bunyon (Interpreter) : This adventure is over.
ArrowOfDeath (C64) : The game is over, thanks for playing
Claymorgue (ATARI) : This ADVENTURE's over.
Pirate (ATARI) : This ADVENTURE is over.
ArrowOfDeath (C64) : Want to play again ?
Claymorgue (ATARI) : Hit Y to Replay
Pirate (ATARI) : Hit Y to Replay
Gremlins (ZX Spectrum) : Play again ?
Robin 2nd (ZX Spectrum) : Play again ?
VoodooCastle (BBC) : The Adventure is over. Want to try this Adventure again?
Waxworks (ZX Spectrum) : Game over. Play again ?
When you get/drop things with AutoGet there is an OK-message printed if sucessful (orherwise a fail-message). But sometimes when the get/drop is handled by the action there is no message (example DROP HONEY in adv01). Would it be safe to track if execute_actions print anything during verb 10 & 18 and, if not, print the OK-message?