Ah. I was scratching my head over that bit in the MDL source code. I’m not overly familiar with the language, but it does seem to define an exit for “ENTER” (or “IN”) that takes you inside the mirror:
<SETG MR-D <CEXIT "FROBOZZ" "MRD" "" <> MRGO>>
<SETG MR-G <CEXIT "FROBOZZ" "MRG" "" <> MRGO>>
<SETG MR-C <CEXIT "FROBOZZ" "MRC" "" <> MRGO>>
<SETG MR-B <CEXIT "FROBOZZ" "MRB" "" <> MRGO>>
<SETG MR-A <CEXIT "FROBOZZ" "MRA" "" <> MRGO>>
<SETG MOUT <CEXIT "FROBOZZ" "MRA" "" <> MIROUT>>
<SETG MIREX <CEXIT "MIRROR-OPEN" "INMIR" "" <> MIRIN>>
<ROOM "MRA"
"" "Hallway"
<EXIT "NORTH" ,MR-B "NW" ,MR-B "NE" ,MR-B
"ENTER" ,MIREX "SOUTH" "MREYE">
()
MRAF
<+ ,RENDGAME ,RLANDBIT ,RLIGHTBIT>
(RGLOBAL <+ ,MIRRORBIT ,PANELBIT ,ROSEBIT ,CHANBIT>)>
Which I think means that “IN” or “ENTER” will use the MIRIN
routine for player movement, while “NORTH” will use the MRGO
routine. The MIRIN
routine will definitely move you into the mirror if it is here and open:
<DEFINE MIRIN ()
<COND (<==? <MIRROR-HERE? ,HERE> 1>
<COND (,MIRROR-OPEN!-FLAG <SFIND-ROOM "INMIR">)
(<TELL "The panel is closed."> <>)>)
(<TELL "The structure blocks your way."> T)>>
I had hoped that plain old “NORTH” would do the same thing, but apparently the MRGO
routine isn’t that clever:
<COND (<MEMQ .DIR [<FIND-DIR "NORTH"> <FIND-DIR "SOUTH">]>
<COND (<==? ,MLOC .TORM>
<COND (<N-S .MDIR>
<TELL "There is a wooden wall blocking your way.">)
(<MIRBLOCK .DIR .MDIR>)>
<>)
(.TORM)>)
Again, not entirely sure what this does, but I think it’s something along the lines of if you’re walking north or south, and the box is in the way, you will either be blocked by a wall or by a mirror, regardless of if the mirror is open or not.
The Zork III version of the MRGO
routine adds a call to MIRIN
, so that’s presumably why “NORTH” works. That’s what I was missing yesterday:
<COND (<EQUAL? ,PRSO ,P?NORTH ,P?SOUTH>
<COND (<==? ,MLOC .TORM>
<COND (<0? <MOD ,MDIR 180>>
<TELL
"There is a wooden wall blocking your way." CR>
<RFALSE>)
(<MIRIN <>> ,IN-MIRROR)
(T <MIRBLOCK> <RFALSE>)>)
(T .TORM)>)
[Insert clever one does not simply walk… joke here.]