Open eriktorbjorn opened 4 years ago
This is how M-FLASH
is documened in Marc Blank's ZIL manual:
M-FLASH is a context code that can be used in a ROOM’s ACTION ROUTINE to describe something in the room regardless of the level of verbosity or what’s already been printed. It was used twice in ZORK II and has lived in almost total obscurity since.
So according to that, it should work. But does it? From a quick look, it seems that most games that implement M-FLASH
at all (many of them don't) have an exception for superbrief mode like that. Though Seastalker and Moonmist may be exceptions to that rule. Seastalker also invokes M-FLASH
from GOTO
, and Moonmist from ENTER-ROOM
.
I could be wrong about that, though.
Perhaps it's worth taking a look at what games actually use M-FLASH
to see what may break?
MM-AFT-DECK-F
and NW-AFT-DECK-F
. These handle The Weasel tossing a line over the side of the boat, so they definitely need to be checked.BEDROOM-F
as described above.MCGINTY-HQ-F
. He may shoot you if you enter his office, so this needs to be checked.COURTYARD-F
. Handles you being greeted by your friend. Needs to be checked.FOYER-F
. Handles further introductions. Needs to be checked.DRAWING-ROOM-F
. Even more introductions. Needs to be checked.GREAT-HALL-F
. Even more introductions. Needs to be checked.SIDE-YARD-F
and `OFFICE-PORCH-F
. Handles description of footprints. See https://github.com/the-infocom-files/witness/issues/19 but it's probably no big deal if it's hidden in superbrief mode.DWINDOW-FCN
. Prints description of window in diamond maze. Probably no big deal if it's hidden in superbrief mode.MENHIR-ROOM-F
. Prints description of menhir. Probably no big deal if it's hidden in superbrief mode.WIZARD-QUARTERS-FCN
. Looks like it's intended to print the description of the Wizard's quarters in full regardless of verbose or brief mode. Probably no big deal if it's hidden in superbrief mode.To summarize, Cutthroats and Moonmist seem to be the only games to use (abuse?) it for game logic, rather than simple descriptions.
I seem to recall seeing some game using M-ENTER
and a timer to print messages after the room description. (Simply using M-ENTER
would print it before, I think.) So if the code has to be rewritten, that's a possibility.
If I understand GOTO
and DESCRIBE-ROOM
correctly, the only safe way to detect if the player enters a room (other than game-specific hacks) is to use M-ENTER
since both M-LOOK
and M-FLASH
may be skipped, sometimes for perfectly understandable reasons (e.g. the room is dark).
But M-ENTER
is invoked before the room description is printed. The game I saw which used timers to still print messages directly after the room description was probably Sorcerer, e.g.:
<ROUTINE TREE-BRANCH-F (RARG)
<COND (<EQUAL? .RARG ,M-LOOK>
<TELL "You are ">
<COND (,FLYING
<TELL "flying near">)
(T
<TELL "on">)>
<TELL
" a large gnarled branch of an old and twisted tree." CR>)
(<EQUAL? .RARG ,M-ENTER>
<ENABLE <QUEUE I-BOA -1>>
<RFALSE>)>>
<ROUTINE I-BOA ()
<COND (<EQUAL? ,HERE ,TREE-BRANCH>
<COND (,FLYING
<RFALSE>)
(,BOA-WARNING
<JIGS-UP
"|
The snake begins wrapping itself around your torso, squeezing
the life out of you...">)
(T
<SETG BOA-WARNING T>
<TELL CR
"A giant boa constrictor is slithering along the branch toward you!" CR>)>)
(T
<SETG BOA-WARNING <>>
<DISABLE <INT I-BOA>>
<RFALSE>)>>
Which produces:
>UP
Tree Branch
You are on a large gnarled branch of an old and twisted tree.
A giant boa constrictor is slithering along the branch toward you!
The hellhound leaps madly about the base of the tree, gnashing its jaws.
Though using the timer trick, the game would probably also list the objects in the room, rather than ending right after the room description. So maybe the solution for this game is to change the semantics of M-FLASH
to match the documentation?
It seems like Moonmist may have done just that. I'll try to remember checking that when I get to that game.
I just checked: You can enter McGinty Salvage through the back window while he's there without getting killed, if you do it in superbrief mode. (He will kill you as soon as you look, through.)
And The Weasel doesn't toss the line over the side if you enter the Aft Deck in superbrief mode. (He will once you look.)
Similarly, there are events that are triggered in an actor's M-OBJDESC
handler. These do not appear to be triggered in superbrief mode, because the actor isn't shown when you enter the room.
This might include, but not be limited to:
Usually, if you catch The Weasel rummaging through your stuff he'll kill you:
Same thing in brief mode:
But in superbrief mode:
This is how
BEDROOM-F
handles it:It seems like
M-FLASH
isn't invoked in superbrief mode. SeeDESCRIBE-ROOM
: