the-infocom-files / zork2

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

You can kind of levitate Cerberus #83

Open eriktorbjorn opened 3 years ago

eriktorbjorn commented 3 years ago
>WAVE WAND AT CERBERUS
The dog looks puzzled.
The wand grows warm, the three-headed dog seems to glow dimly with magical
essences, and you feel suffused with power.

>SAY "FLOAT"
The wand glows very brightly for a moment.
The huge dog rises about an inch off the ground, for a moment.

>LOOK
Cerberus Room
This is the entrance to a huge crypt or tomb. A marble stairway leads up from a
gateway arch.
There is a vicious-looking dog guarding the entrance. It is more or less your
usual dog, except that it has three heads and is the size of an elephant.
(floating in midair)

Given the message, I don't think he should be described as "floating in midair". You don't even get any message when he stops levitating, so it was probably meant to imply that he sinks back to the ground at once. I think this happens because of this bit in CERBERUS-FCN:

           (<VERB? ENCHANT>
        <COND (<EQUAL? ,SPELL-USED ,W?FLOAT>
               <SETG SPELL-HANDLED? T>
               <TELL
"The huge dog rises about an inch off the ground, for a moment." CR>)

The SPELL-HANDLED? variable just means that I-SPELL won't have to invoke the DISENCHANT action. But CERBERUS is still the SPELL-VICTIM, and therefore shown as floating.

So perhaps SPELL-VICTIM should be set to a different object? The wand will still have to recharge (so you have to wait a while), but it won't be CERBERUS who's shown as floating in mid-air. If we go for this solution (assuming it works), I vote for using GLOBAL-CERBERUS. It seems fitting.