the-infocom-files / zork2

Zork II: The Wizard of Frobozz
8 stars 4 forks source link

"LIGHT FUSE" doesn't work as intended #7

Open eriktorbjorn opened 5 years ago

eriktorbjorn commented 5 years ago

There is a slight, but annoying, problem with the safe puzzle in Zork II:

Dusty Room
You are in a dusty old room which is featureless, except for an exit on the
north side.
Imbedded in the far wall is a rusty box. It appears to be somewhat damaged,
since an oblong hole has been chipped out of the front of it.

>PUT FUSE IN BRICK
Done.

>PUT BRICK IN HOLE
Done.

>LIGHT MATCH
One of the matches start to burn.

>LIGHT FUSE
(Taken)
The string starts to burn.
The match has gone out.

So now I'm holding the burning fuse, Wile E. Coyote style, with no time to put it back into the brick and make it to safety. Instead, I have to "BURN FUSE" or "LIGHT FUSE WITH MATCH". It seems the bug was introduced in Release 48, since earlier versions won't even accept "LIGHT FUSE" at all.

The problem is that the "light" verb is usually intended for the lamp, but someone really wanted it to work for the fuse as well:

<ROUTINE FUSE-FCN ()
        <COND (<OR <VERB? BURN>
                   <AND <VERB? LAMP-ON>
                        <IN? ,MATCH ,WINNER>
                        <FSET? ,MATCH ,ONBIT>>>
               <TELL "The string starts to burn." CR>
               <ENABLE <QUEUE I-FUSE 2>>)>>

Here are the definitions of the V-LAMP-ON verbs:

<SYNTAX ACTIVATE OBJECT (FIND LIGHTBIT)
    (HELD CARRIED ON-GROUND IN-ROOM) = V-LAMP-ON>
<SYNTAX LIGHT OBJECT (FIND LIGHTBIT)
    (HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE) = V-LAMP-ON>
<SYNTAX TURN ON OBJECT (FIND LIGHTBIT)
    (HELD CARRIED ON-GROUND IN-ROOM) = V-LAMP-ON>
<SYNTAX TURN ON OBJECT WITH OBJECT (HAVE) = V-LAMP-ON>

Interestingly, "ACTIVATE FUSE", "TURN ON FUSE", and "TURN ON FUSE WITH SWORD" [sic] will all light the fuse without taking it, as long as you are carrying a lit match. But the syntaxs for "LIGHT OBJECT" has the "TAKE HAVE" flags.

So the simplest fix is perhaps to remove the "TAKE HAVE" flags from "LIGHT OBJECT". (That's pretty much what I did in Mini-Zork II.) You won't automatically pick up the lamp if you "LIGHT LAMP", but you already didn't pick it up automatically if you used any of the other syntaxes.

In https://github.com/AlexProudfoot/The-ZIL-Files/issues/85 there was another suggestion, to have a PRE-LIGHT-ON routine to handle the implicit taking for the cases where it's desirable. Is it worth the trouble, though?