the-infocom-files / zork3

Zork III: The Dungeon Master
5 stars 3 forks source link

"PUT SHORT POLE IN CHANNEL" is meant to work, but doesn't #70

Open eriktorbjorn opened 5 years ago

eriktorbjorn commented 5 years ago

There's a Zork III-specific case in PRE-PUT:

<ROUTINE PRE-PUT ()
     <COND %<COND (<==? ,ZORK-NUMBER 3>
               '(<EQUAL? ,PRSO ,SHORT-POLE>
                 <RFALSE>))
              (T
               '(<NULL-F>
             <RFALSE>))>
           (T
        <PRE-GIVE>)>> ;"That's easy for you to say..."

The only reason I can think of is to make this bit in SHORT-POLE-F work:

           (<OR <AND <VERB? PUT> <==? ,PRSI ,CHANNEL>>
            <VERB? PUSH LOWER>>

But it doesn't, because apparently the parser objects ("You don't have the short pole.") before it even gets that far. I think it does because the PUT action is defined to only work on object's you're holding.

eriktorbjorn commented 5 years ago

I just tried release 10 and 17. It works there, so it presumably works in all versions in between as well.

>PUT SHORT POLE IN CHANNEL
The pole is lowered into the channel.

I'm not sure what causes the difference in behavior. It seems it doesn't even get to PRE-PUT in the current version.