Sorry, I’m hopelessly hung up on how it’s encoded in the TRS-80 data files. What I meant was basically “an action without a defined noun”.
If you specify that an action has a verb, but don’t specify a noun, the noun index gets encoded as the number 0 in the action entry in the file. That means that the noun with index 0 in the vocabulary can’t be used. For the sake of tradition, this always (or mostly?) seems to have the text “ANY”, even if it would save three bytes to leave it blank.
FWIW, after doing some more experiments (see the edits to my previous post), I think I know why my example ScottKit code resulted in ScottFree allowing the player to say BREAK BOLT while ADVENTUR/CMD would only accept BREAK on its own: it’s because my code is missing the noun BOLT, without which ADVENTUR/CMD seemingly can’t match the command BREAK BOLT to any of the given actions.
I had thought that the noun BOLT was also missing from the widely circulated adv05.DAT file, which contains the game data for v1.15 of The Count, but it turns out that it was hiding there in plain sight all along — it’s just that it isn’t tied to any specific item or object. The word BOLT appears only in the noun list (as BOL):
...
"SLE"
"WIT"
"BOL"
"JAM"
"HOL"
"*SMA"
...
When I used ScottKit to decompile the adv05.DAT file, ScottKit omitted the noun BOL from the decompiled code, presumably because it appeared to be redundant. That was what had confused me. I thought that a ScottKit decompilation would accurately reflect the entire contents of the original .DAT file. But apparently not…
I tried to fix my example code by adding the line noungroup BOL in order to force the noun BOL to be present in the game, but it didn’t work: ScottKit omitted BOL from the compiled .sao file!
It was only after I had added called BOL to the definition of the bolt item (and then compiled the code in ScottKit and reformatted the resultant .sao as a .DAT) that ADVENTUR/CMD would finally let me BREAK BOLT as in the “official” release of The Count.
start workroom
room workroom "workroom"
item file "Large tempered nail file"
called FIL
item bolt "Lockable slide bolt"
called BOL
item lock "Broken slide lock"
nowhere
verbgroup CUT BRE FIL TRI
noungroup FIL NAI
action CUT:
print "Tell me with what? Like: `WITH FIST`"
action WIT FIL when present file and here bolt
swap bolt lock
look2
print OK
action WIT FIL when !present file
print "Sorry I can't do that"
print "I've a hunch I've been robbed!"
comment "NO FILE"
If I understand you correctly, this means that we can’t depend on a noun being “redundant”, just because it doesn’t happen to be explicitly referenced anywhere.
I believe that the correct behavior for ScottKit (and sk2sadat for that matter) should be to allow these nouns to continue to exist, but to give warnings during the decompilation and the compilation stages, instead of dropping them silently. It seems like a few bug reports are in order
Yes, that’s right — but only if you want to retain compatibility with ADVENTUR/CMD.
Going back to my example, you could say that the noun BOLT is redundant as far as ScottFree is concerned because ScottFree will allow the player to say BREAK BOLT whether or not a noun BOLT has been declared! In fact, ScottFree will also allow BREAK by itself or BREAK with a gibberish word (e.g. BREAK DWTZ).
But the noun BOLT is required if you want to retain compatibility with ADVENTUR/CMD because it seems that ADVENTUR/CMD will match the player’s input with the “ANY” noun (noun zero) only if the word that the player typed in is present as a noun in the vocab list. So, in my example, ADVENTUR/CMD won’t accept the command BREAK BOLT unless the noun BOLT (or “BOL”) has actually been declared.
I think ADVENTUR/CMD’s behavior is reasonable and it doesn’t require a lot of effort to make it happy.
For sk2sadat I’ll probably go for something like this:
Warning: Noun "BOL" is not referenced anywhere and may be redundant. Please note that some interpreters will not accept this noun as an argument for word actions with undefined nouns if it is removed.
I’ve collated most or all of the test cases discussed in this thread (plus a tutorial game), and I’ve created a test game data file, cases.DAT, which I’ve uploaded into the repo for BeebScott, my prototype Scott Adams game interpreter written in 8-bit BBC BASIC.
If you decompile adv05.dat (The Count) with ScottKit, you see that the room that the player is moved to on SLEEP is actually the closet. In ADVENTUR/CMD the effect (when running ADVENT/D5) looks quite odd:
More discrepancies between Scott Adams interpreters: ScottFree and PerlScott fail to display the correct room description in The Count when you start the game and immediately enter SLEEP three times in a row. The video in my previous post shows what happens in ADVENTUR/CMD — this is the intended, correct behaviour: you die, the game is over, and the room description changes to “I am in a LOT OF TROUBLE (And so Are you!)”.
But in ScottFree, the room description remains “I’m lying in a large brass bed”. Same in PerlScott. ScottKit sort of gets it right but not completely: the correct line (“I am in a LOT OF TROUBLE…”) is displayed on screen, but it’s displayed below the “game is now over” message! Maybe that’s unavoidable because ScottKit implements a “conversational” interface rather than a split-screen one.
But Spatterlight gets it right, as does BeebScott.*
I’ve updated the test game, cases.DAT, so that when you QUIT, it will attempt to take you to a new room (“the Quit Room”) just before the game ends. Here it is in ADVENTUR/CMD:
I’m intrigued; which version got it right? I had the Mak Judik Electron version and that had a bug that prevented you from getting back in through the bedroom window after climbing out with the sheet.
For example, ScottKit’s demo game Crystal Of Chaos doesn’t work in ADVENTUR/CMD, for precisely this reason (failing to cater for ADVENTUR/CMD’s different implementation of AUTOGET/AUTODROP):
The problem can be fixed by adding explicit unconditional GET and DROP actions for the objects affected by this issue (GET HONEY and DROP VASE in this example), hence my Pull Request.
Found another discrepancy between the behaviours of different Scott Adams game interpreters. This time, it’s to do with the way the maximum inventory-size limit is implemented:
Fixed a bug that would only stop you from getting items if you were
exactly at your carring capacity. Situations can arise when you are
over capacity (such as chigger bites in Adventureland).
This should be fixed in the Spatterlight ScottFree as well, which is now ported over to (the pending release of) Gargoyle. Please let me know if it isn’t.
I have actually direct contact with Scott Adams itself, but he’s hopelessy tangled inside the web of born-again “christianism”… I have asked him multiple times about the discrepancies, but seems much more interested in proselitying “christianism” than answering & clarifying about historical technical questions
It’s probably just nice that he’s responded at all to you. I can understand it may be frustrating to not get answers, but I realistically wouldn’t expect anyone to remember intricacies of code they wrote over thirty-odd years ago. I’ve talked to several, less prolific text adventure authors who have forgotten whole versions of games (and even whole games themselves).
It would be interesting to see if any other terps treat this differently. As I see it, BeebScott is part of the original Byte magazine lineage. In contrast, ScottFree/ScottKit is a clean rewrite, which, at least in theory, could mean that BeebScott is more faithful to the original codebase. I should check what PerlScott does at some point here to make sure that I haven’t tried to “correct” the code by looking too closely at ScottFree
From the few rare and limited communications I’ve had with Scott Adams, it’s clear that he’s a very passionate and genuinely nice individual, which I respect, even if I may not share some of the things he’s passionate about. It’s okay. He didn’t ask to be a niche public figure or to be responsible for a historical legacy. I’m happy that he sometimes chooses to interact with fans about something that he happened to do for seven years, a long time ago, as a very young man.
Scott does seem like a lovely guy. It was his games that got me into IF in the first place, so I was delighted when he started following me on Twitter. He’s had some serious health issues recently, which is something to be aware of. People often turn to religion after a brush with mortality. I’m not religious myself but I respect anyone’s right to believe whatever brings them comfort.