borderzone/globals.zil

694 lines
18 KiB
Plaintext

"GLOBALS for
BORDER ZONE
(c) Copyright 1987 Infocom, Inc. All Rights Reserved."
<DIRECTIONS ;"Do not change the order of the first 8 without consulting MARC!"
NORTH NE EAST SE SOUTH SW WEST NW UP DOWN IN OUT>
;"status line stuff"
<CONSTANT S-TEXT 0> ;"<SCREEN 0> puts cursor in text part of screen"
<CONSTANT S-WINDOW 1> ;"<SCREEN 1> puts cursor in window part of screen"
<CONSTANT H-NORMAL 0> ;"<HLIGHT 0> returns printing to normal (default)"
<CONSTANT H-INVERSE 1> ;"<HLIGHT 1> sets printing mode to inverse video"
<CONSTANT H-BOLD 2> ;"<HLIGHT 2> sets printing mode to bold, else normal"
<CONSTANT H-ITALIC 4> ;"<HLIGHT 4> italicizes, else underline, else normal"
<CONSTANT D-SCREEN-ON 1> ;"<DIROUT 1> turns on printing to the screen"
<CONSTANT D-SCREEN-OFF -1>;"<DIROUT -1> turns off printing to the screen"
<CONSTANT D-PRINTER-ON 2> ;"<DIROUT 2> turns on printing to the printer"
<CONSTANT D-PRINTER-OFF -2>;"<DIROUT -2> turns off printing to the printer"
<CONSTANT D-TABLE-ON 3> ;"<DIROUT 3 .TABLE> turns on printing to that table"
<CONSTANT D-TABLE-OFF -3> ;"<DIROUT -3> turns off printing to that table"
<CONSTANT D-RECORD-ON 4> ;"<DIROUT 4> sends READs and INPUTs to record file"
<CONSTANT D-RECORD-OFF -4>;"<DIROUT -4> stops sending READs and INPUTs to file"
<ROUTINE V-$ISL ("OPTIONAL" (PRT? T))
<INIT-STATUS-LINE 3>
<COND (,SL-WATCH <SL-CYCLE>)
(,G-WATCH <G-CYCLE>)>
<UPDATE-CHRONOGRAPH 0 T>
<UPDATE-TIME>
<COND (.PRT? <TELL "Done." CR>)>
<RTRUE>>
<ROUTINE INIT-STATUS-LINE (HEIGHT "OPTIONAL" (DONT-CLEAR <>))
<COND (<NOT .DONT-CLEAR>
<CLEAR -1>
<SPLIT .HEIGHT>)>
<SCREEN ,S-WINDOW>
<BUFOUT <>>
<CURSET 1 1>
<INVERSE-LINE>
<CURSET 2 1>
<INVERSE-LINE>
<CURSET 3 1>
<INVERSE-LINE>
<BUFOUT T>
<SCREEN ,S-TEXT>>
<ROUTINE INVERSE-LINE ("AUX" (CENTER-HALF <>))
<HLIGHT ,H-INVERSE>
<PRINT-SPACES <GETB 0 33>>
<HLIGHT ,H-NORMAL>>
<ROUTINE PRINT-SPACES (CNT)
<REPEAT ()
<COND (<L? <SET CNT <- .CNT 1>> 0>
<RETURN>)
(T
<PRINTC 32>)>>>
;<ROUTINE CONTINUE ("AUX" (CURRENTLY-SCRIPTING <>) CNT)
<COND (<G? <GETB 0 32> 21> ;"is screen more than 21 lines tall?"
<SET CNT <- <GETB 0 32> 21>>
<REPEAT ()
<SET CNT <- .CNT 1>>
<CRLF>
<COND (<EQUAL? .CNT 0>
<RETURN>)>>)>
<COND (<BTST <GET 0 8> 1> ;"turn scripting off so [MORE] won't print"
<SET CURRENTLY-SCRIPTING T>
<DIROUT ,D-PRINTER-OFF>)>
<TELL "[Hit any key to continue.]">
<BUFOUT <>>
<BUFOUT T>
<COND (.CURRENTLY-SCRIPTING
<DIROUT ,D-PRINTER-ON>)>
<INPUT 1>>
;<GLOBAL SL-BUFFER <ITABLE NONE 80>>
<ROUTINE STATUS-LINE ("AUX" LEN LOCATION)
<SCREEN-1>
<CURSET 1 2>
<HERE-TELL>
<SCREEN-0>>
<ROUTINE HERE-TELL ("OPTIONAL" (PAD? T) "AUX" LEN)
<DIROUT ,D-TABLE-ON ,DIROUT-TBL>
<COND (,IN-SWAMP? <TELL "In the Swamp">)
(,ON-BRACE? <TELL "On the Brace">)
(,ON-THE-CAN <TELL "On the Trash Can">)
(T <TELL D ,HERE>)>
<DIROUT ,D-TABLE-OFF>
<SET LEN <GET ,DIROUT-TBL 0>>
<COND (<G? .LEN 24>
<TELL "** Desc too long **">)
(T
<COND (,IN-SWAMP? <TELL "In the Swamp">)
(,ON-BRACE? <TELL "On the Brace">)
(,ON-THE-CAN <TELL "On the Trash Can">)
(T <TELL D ,HERE>)>
<COND (.PAD?
<PRINT-SPACES <- 24 .LEN>>)>)>
<RTRUE>>
<GLOBAL HERE <>>
;<GLOBAL LIT T>
;<GLOBAL INDENTS
<PTABLE ""
" "
" "
" "
" ">>
<OBJECT GLOBAL-OBJECTS
(SYNONYM ZZMGCK FRONT MR) ;"No, it doesn't need to exist... sigh"
(DESC "GloObj")
(FLAGS INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT OPENBIT SEARCHBIT
TRANSBIT WEARBIT MUNGEDBIT RLANDBIT WORNBIT
CONTBIT VOWELBIT
NDESCBIT DOORBIT PERSON CROSSBIT
NARTICLEBIT SLVIEWBIT FENCECUTBIT FENCEBENTBIT PENBIT
FENCEBLOWNBIT HUTBIT PLATFORMBIT
AN NOABIT THE NOTHEBIT)
(TRANSIENT ROADBLOCK)>
<OBJECT LOCAL-GLOBALS
(LOC GLOBAL-OBJECTS)
(DESC "LocGlo")
(SYNONYM $XY) ;"Yes, this synonym needs to exist... sigh"
(DESCFCN 0)
(GLOBAL GLOBAL-OBJECTS)
(FDESC "F")
(LDESC "F")
(SIZE 0)
(TEXT "")
(CAPACITY 0)
(GENERIC 0)
(THINGS <PSEUDO (ZZMGCK ZZMGCK ME-F)>)>
<OBJECT ROOMS
(DESC "Rms")
(SIZE 0)>
;<OBJECT INTDIR
(LOC GLOBAL-OBJECTS)
(DESC "direction")
(SYNONYM DIRECTION)
(ADJECTIVE NORTH EAST SOUTH WEST NE NW SE SW ;UP ;DOWN)>
<OBJECT INTNUM
(LOC GLOBAL-OBJECTS)
(SYNONYM NUMBER INTNUM)
;(DESC "number")
(SDESC "number")
;(ACTION INTNUM-F)>
<OBJECT IT
(LOC GLOBAL-OBJECTS)
(SYNONYM IT THEM)
(DESC "it")
(FLAGS VOWELBIT AN NARTICLEBIT TOUCHBIT)>
<OBJECT HIM
(LOC GLOBAL-OBJECTS)
(SYNONYM HIM HIMSELF)
(DESC "him")
(FLAGS NARTICLEBIT TOUCHBIT)>
<OBJECT HER
(LOC GLOBAL-OBJECTS)
(SYNONYM HER HERSELF)
(DESC "her")
(FLAGS NARTICLEBIT TOUCHBIT)>
<OBJECT NOT-HERE-OBJECT
(DESC "it")
(FLAGS NARTICLEBIT)
(ACTION NOT-HERE-OBJECT-F)>
<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) OBJ (X <>))
<COND (<AND <PRSO? ,NOT-HERE-OBJECT>
<PRSI? ,NOT-HERE-OBJECT>>
<TELL "Those things aren't here!" CR>
<RTRUE>)
(<PRSO? ,NOT-HERE-OBJECT>
<SET TBL ,P-PRSO>)
(T
<SET TBL ,P-PRSI>
<SET PRSO? <>>)>
<COND (<AND .PRSO?
<PRSO-MOBY-VERB?>>
<SET X T>)
(<AND <NOT .PRSO?>
<PRSI-MOBY-VERB?>>
<SET X T>)>
<COND (.X ;"the verb is a moby-find verb"
<SET OBJ <FIND-NOT-HERE .TBL .PRSO?>>
<COND (<AND .OBJ
<NOT <EQUAL? .OBJ ,NOT-HERE-OBJECT>>>
<RTRUE>)
(T
<RFALSE>)>
<TELL "You'll have to be more specific, I'm afraid." CR>)
(<EQUAL? ,WINNER ,PROTAGONIST>
<TELL "You can't see">
<COND (<NOT <NAME? ,P-XNAM>>
<TELL " any">)>
<NOT-HERE-PRINT .PRSO?>
<TELL " here!" CR>)
(T
<TELL "Looking confused, the " ,WINNER " says, \"I don't see">
<COND (<NOT <NAME? ,P-XNAM>>
<TELL " any">)>
<NOT-HERE-PRINT .PRSO?>
<TELL " here!\"" CR>)>
<STOP>>
<ROUTINE PRSO-MOBY-VERB? (;"OPTIONAL" ;(A ,PRSA))
<COND (<OR <EQUAL? ,PRSA ,V?FIND ,V?FOLLOW>
<EQUAL? ,PRSA ,V?WHAT ,V?WHERE ,V?WHO>
<EQUAL? ,PRSA ,V?WAIT-FOR ,V?WALK-TO>
<EQUAL? ,PRSA ,V?CALL ,V?SAY ,V?YELL>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRSI-MOBY-VERB? ()
<COND (<EQUAL? ,PRSA ,V?ASK-ABOUT ,V?ASK-FOR ,V?TELL-ABOUT>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ)
;"Protocol: return T if case was handled and msg TELLed, NOT-HERE-OBJECT
if 'can't see' msg TELLed, <> if PRSO/PRSI ready to use"
;"Special-case code goes here. <MOBY-FIND .TBL> returns # of matches. If 1,
then P-MOBY-FOUND is it. You can treat the 0 and >1 cases alike or differently.
Always return RFALSE (not handled) if you have resolved the problem."
<SET M-F <MOBY-FIND .TBL>>
;<COND (,DEBUG
<TELL "[Found " N .M-F " obj]" CR>)>
<COND (<EQUAL? 1 .M-F>
;<COND (,DEBUG
<TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>
<COND (.PRSO?
<SETG PRSO ,P-MOBY-FOUND>
<THIS-IS-IT ,PRSO>)
(T
<SETG PRSI ,P-MOBY-FOUND>)>
<RFALSE>)
(<AND <L? 1 .M-F>
<SET OBJ <APPLY <GETP <SET OBJ <GET .TBL 1>> ,P?GENERIC>>>>
;"Protocol: returns .OBJ if that's the one to use
,NOT-HERE-OBJECT if case was handled and msg TELLed
<> if WHICH-PRINT should be called"
;<COND (,DEBUG
<TELL "[Generic: " D .OBJ "]" CR>)>
<COND (<EQUAL? .OBJ ,NOT-HERE-OBJECT>
<RTRUE>)
(.PRSO?
<SETG PRSO .OBJ>
<THIS-IS-IT ,PRSO>)
(T
<SETG PRSI .OBJ>)>
<RFALSE>)
(T
,NOT-HERE-OBJECT)>>
<ROUTINE NOT-HERE-PRINT (PRSO?)
<COND (,P-OFLAG
<COND (,P-XADJ
<TELL " ">
<PRINTB ,P-XADJN>)>
<COND (,P-XNAM
<TELL " ">
<PRINTB ,P-XNAM>)>)
(.PRSO?
<BUFFER-PRINT <GET ,P-ITBL ,P-NC1> <GET ,P-ITBL ,P-NC1L> <>>)
(T
<BUFFER-PRINT <GET ,P-ITBL ,P-NC2> <GET ,P-ITBL ,P-NC2L> <>>)>>
<OBJECT GROUND
(LOC GLOBAL-OBJECTS)
(SYNONYM FLOOR GROUND)
(DESC "ground")
(ACTION GROUND-F)>
<ROUTINE GROUND-F ()
<COND (<VERB? CLIMB-UP CLIMB-ON CLIMB BOARD>
<WASTES>)
(<VERB? LOOK-UNDER>
<IMPOSSIBLES>)
(<VERB? LEAVE>
<DO-WALK ,P?UP>)
(<VERB? CLEAN>
<COND (<IN? ,COMP-BLOOD-STAIN ,HERE>
<PERFORM ,V?CLEAN ,COMP-BLOOD-STAIN>
<RTRUE>)
(T
<TELL
"You're not aware that it needs cleaning." CR>)>)
(<AND <VERB? EXAMINE>
<EQUAL? ,HERE ,COMP-5>
<IN? ,COMP-BLOOD-STAIN ,HERE>>
<TELL
"When you look at the floor in front of you, your eye is immediately
drawn to ">
<COND (<FSET? ,COMP-BLOOD-STAIN ,CROSSBIT>
<TELL "a smeared blood stain">)
(T
<TELL "some drops of blood bunched together">)>
<TELL " near the door." CR>)
(<VERB? EXAMINE>
<PERFORM ,V?LOOK>
<RTRUE>)
(<AND <VERB? DIG> <EQUAL? ,SCENARIO 2>>
<TELL
"Except for digging up some snow, you wont get anywhere; the frozen ground is
much too hard." CR>)>>
<OBJECT WALLS
(LOC GLOBAL-OBJECTS)
(FLAGS NDESCBIT TOUCHBIT)
(DESC "wall")
(SYNONYM WALL WALLS)>
<OBJECT CEILING
(LOC GLOBAL-OBJECTS)
(FLAGS NDESCBIT TOUCHBIT)
(DESC "ceiling")
(SYNONYM CEILING ROOF)
(ACTION CEILING-F)>
<ROUTINE CEILING-F ()
<COND (<AND <FSET? ,HERE ,OUTHUTBIT>
<VERB? CLIMB CLIMB-UP>>
<TELL
"You'd never make it with that bad arm of yours." CR>)
(<VERB? LOOK-UNDER>
<PERFORM ,V?LOOK>
<RTRUE>)>>
<OBJECT HANDS
(LOC GLOBAL-OBJECTS)
(SYNONYM HANDS HAND PALM FINGERS)
(ADJECTIVE BARE MY YOUR)
(DESC "hand")
(FLAGS NDESCBIT TOUCHBIT NARTICLEBIT PLURALBIT)
(ACTION HANDS-F)>
<ROUTINE HANDS-F ("AUX" ACTOR)
<COND (<VERB? WAVE>
<SETG PRSO <>>
<PERFORM ,V?WAVE-AT>
<RTRUE>)
(<VERB? SHAKE>
<COND ;(<EQUAL? ,HERE ,THRONE-ROOM>
<PERFORM ,V?SHAKE-WITH ,HANDS ,MITRE>
<RTRUE>)
(<SET ACTOR <FIND-IN ,HERE ,PERSON "with">>
<PERFORM ,V?SHAKE-WITH ,HANDS .ACTOR>
<RTRUE>)
(T
<TELL "Pleased to meet you." CR>)>)
(<VERB? CLEAN>
<TELL "They're as clean as they'll get." CR>)>>
<OBJECT EYES
(LOC GLOBAL-OBJECTS)
(DESC "your eyes")
(SYNONYM EYE EYES)
(ADJECTIVE YOUR MY)
(FLAGS NARTICLEBIT PLURALBIT NOTHEBIT NOABIT)
;(ACTION EYES-F)>
;<OBJECT EARS
(LOC GLOBAL-OBJECTS)
(DESC "your ears")
(SYNONYM EAR EARS)
(ADJECTIVE YOUR MY)
(FLAGS NARTICLEBIT PLURALBIT)>
;<OBJECT NOSE
(LOC GLOBAL-OBJECTS)
(DESC "your nose")
(SYNONYM NOSE NOSTRIL)
(ADJECTIVE YOUR MY)
(FLAGS NARTICLEBIT)
(ACTION NOSE-F)>
;<ROUTINE NOSE-F ()
<COND (<VERB? TAKE>
<PERFORM ,V?SPUT-ON ,NOSE ,HANDS>
<RTRUE>)>>
;<OBJECT MOUTH
(LOC GLOBAL-OBJECTS)
(DESC "your mouth")
(SYNONYM MOUTH LIP LIPS)
(ADJECTIVE YOUR MY)
(FLAGS NARTICLEBIT)>
;<OBJECT KNEECAPS
(LOC GLOBAL-OBJECTS)
(DESC "your kneecaps")
(SYNONYM KNEECAP KNEE KNEES)
(ADJECTIVE YOUR MY)
(FLAGS NARTICLEBIT)>
<OBJECT PROTAGONIST
(LOC B8)
(SYNONYM PROTAG)
(DESC "it")
(FLAGS NDESCBIT INVISIBLE PERSON)>
;<OBJECT YOU
(LOC GLOBAL-OBJECTS)
(SYNONYM YOU YOURSELF HIMSELF HERSELF)
(DESC "himself or herself")
(FLAGS NDESCBIT)
(ACTION YOU-F)>
;<ROUTINE YOU-F ()
<COND (<AND <VERB? ASK-ABOUT>
<PRSI? ,YOU>>
<PERFORM ,V?ASK-ABOUT ,PRSO ,PRSO>
<RTRUE>)
(<AND <VERB? TELL-ABOUT>
<PRSI? ,YOU>>
<PERFORM ,V?TELL-ABOUT ,PRSO ,WINNER>
<RTRUE>)>>
<OBJECT ME
(LOC GLOBAL-OBJECTS)
(SYNONYM ME SELF MYSELF $FN $LN)
(DESC "yourself")
(FLAGS PERSON TOUCHBIT NARTICLEBIT NOTHEBIT NOABIT)
(ACTION ME-F)>
<ROUTINE ME-F ()
<COND (<VERB? SAVE-SOMETHING>
<TELL
"Perhaps you need a HINT?" CR>)
(<VERB? LOOK-BEHIND>
<TELL
"In this country, looking over one's shoulder is a way of life; at
the moment, you don't see anything you haven't seen before." CR>)
(<VERB? TELL>
<TELL
"Talking to yourself is a sign of impending mental collapse." CR>
<STOP>)
(<VERB? LISTEN>
<TELL "Yes?" CR>)
(<AND <VERB? GIVE>
<PRSI? ,ME>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<VERB? MOVE>
<V-WALK-AROUND>)
(<VERB? SEARCH>
<V-INVENTORY>
<RTRUE>)
;(<VERB? EXAMINE>
<TELL "You're wearing" AR ,GARMENT>)
(<VERB? KILL HIT MUNG OFF>
<TELL "Self-flagellation is not the answer." CR>)
(<VERB? FIND>
<TELL "You're right here!" CR>)
(<VERB? FOLLOW>
<TELL
"When you talk this way, you're very hard to follow." CR>)>>
<OBJECT GLOBAL-ROOM
(LOC GLOBAL-OBJECTS)
(DESC "room")
(SYNONYM ROOM PLACE LOCATION AREA)
(ACTION GLOBAL-ROOM-F)>
<ROUTINE GLOBAL-ROOM-F ()
<COND (<VERB? LOOK LOOK-INSIDE EXAMINE>
<PERFORM ,V?LOOK>
<RTRUE>)
(<VERB? ENTER WALK-TO>
<PERFORM ,V?WALK-AROUND ,PRSO>
<RTRUE>)
(<VERB? LEAVE EXIT>
<DO-WALK ,P?OUT>
<RTRUE>)
(<VERB? WALK-AROUND>
<TELL
"Walking around here reveals nothing new. To move elsewhere, just type
the desired direction." CR>)>>
<OBJECT WAY
(LOC GLOBAL-OBJECTS)
(DESC "way")
(SYNONYM WAY)>
;<OBJECT STAIRS
(LOC LOCAL-GLOBALS)
(DESC "stair")
(SYNONYM STAIR STAIRS STAIRW STEP)
(ADJECTIVE STEEP WINDING)
(ACTION STAIRS-F)>
;<ROUTINE STAIRS-F ()
<COND (<VERB? CLIMB CLIMB-UP>
<DO-WALK ,P?UP>)
(<VERB? CLIMB-DOWN>
<DO-WALK ,P?DOWN>)>>
<OBJECT SKY
(LOC GLOBAL-OBJECTS)
(DESC "sky")
(SYNONYM SKY)
(ADJECTIVE NIGHT DARK)
(ACTION SKY-F)>
<ROUTINE SKY-F ()
<COND (<VERB? EXAMINE>
<COND (<EQUAL? ,SCENARIO 3>
<TELL
"It's a beautiful, sunny day in Ostnitz." CR>)
(<EQUAL? ,SCENARIO 1>
<TELL
"It's dark outside and cloudy, if memory serves." CR>)
(<OR <EQUAL? ,HERE ,INSIDE-SHED ,HUT-LIVING>
<EQUAL? ,HERE ,HUT-BEDROOM ,HUT-STORAGE>>
<TELL
"It's hard to tell from here, but it can be assumed that it is still dark
and cloudy out." CR>)
(T
<TELL
"It is dark and cloudy, though the clouds are thin enough to see the
pale image of a full moon lighting up the sky.">
<COND (<OR <EQUAL? ,HERE ,OUTSIDE-HUT ,NORTH-HUT>
<EQUAL? ,HERE ,SOUTH-HUT ,D5 ,BEHIND-HUT>>
<CRLF>)
(T
<TELL " Off to the ">
<TELL-DIRECTION ,HERE ,D5>
<COND (,HUT-BURNING
<TELL ", you can see a dull
orange glow with plumes of black smoke billowing upwards." CR>)
(T
<TELL ", you can see some wisps of
black smoke rising up into the heavens." CR>)>)>)>)>>
;<ROUTINE DONT-HANDLE? (OBJECT)
<COND (<OR <AND <EQUAL? .OBJECT ,PRSO>
<PRSO-MOBY-VERB?>>
<AND <EQUAL? .OBJECT PRSI>
<PRSI-MOBY-VERB?>>>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE TALKING-TO? (ACTOR)
<COND (<OR <ASKING? .ACTOR>
<EQUAL? ,WINNER .ACTOR>>
<RTRUE>)
(<AND <VERB? TELL TELL-ABOUT HELLO WAVE-AT REPLY YELL ALARM>
<PRSO? .ACTOR>>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE ASKING? (ACTOR)
<COND (<AND <VERB? ASK-ABOUT ASK-FOR>
<PRSO? .ACTOR>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE TOUCHING? (THING)
<COND (<AND <OR <EQUAL? ,PRSA ,V?TAKE ,V?TOUCH ,V?SHAKE>
<EQUAL? ,PRSA ,V?SPIN ,V?PUT-ON>
<EQUAL? ,PRSA ,V?PUSH ,V?CLOSE>
<EQUAL? ,PRSA ,V?MOVE ,V?OPEN>
<EQUAL? ,PRSA ,V?RAISE ,V?CLIMB-OVER>
<EQUAL? ,PRSA ,V?CLIMB-UP ,V?BEND>
<EQUAL? ,PRSA ,V?CLIMB ,V?CLIMB-DOWN ,V?CLIMB-ON>
<EQUAL? ,PRSA ,V?BOARD ,V?ENTER ,V?CRAWL-UNDER>
<HURT? .THING>>
<PRSO? .THING>>
<RTRUE>)
(<AND <PRSI? .THING>
<VERB? PUT PUT-ON>>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE DISTURB? (THING)
<COND (<OR <TOUCHING? .THING>
<TALKING-TO? .THING>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE HURT? (THING)
<COND (<AND <OR <EQUAL? ,PRSA ,V?MUNG ,V?KICK ,V?KILL>
<EQUAL? ,PRSA ,V?KNOCK ,V?CUT ;,V?WHIP>
<EQUAL? ,PRSA ,V?BITE ,V?PUSH>>
<PRSO? .THING>>
<RTRUE>)
(<AND <VERB? THROW>
<PRSI? .THING>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRSO-PRINT ("AUX" PTR) ;"moved directly into CANT-SEE"
<COND (<OR ,P-MERGED
<==? <GET <SET PTR <GET ,P-ITBL ,P-NC1>> 0> ,W?IT>>
<TELL " " D ,PRSO>)
(T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC1L> <>>)>>
<ROUTINE PRSI-PRINT ("AUX" PTR) ;"moved directly into CANT-SEE"
<COND (<OR ,P-MERGED
<==? <GET <SET PTR <GET ,P-ITBL ,P-NC2>> 0> ,W?IT>>
<TELL " " D ,PRSI>)
(T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC2L> <>>)>>
<ROUTINE CANT-SEE ("OPTIONAL" (OBJ <>) (STRING <>))
<SETG P-WON <>>
;<COND (,P-MULT
<SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>)>
<TELL "You can't see">
<COND (<OR <NOT .OBJ>
<AND .OBJ
<NOT <NAME? .OBJ>>>>
<TELL " any">)>
<COND (<NOT .OBJ>
<TELL " " .STRING>)
(<EQUAL? .OBJ ,PRSI>
<PRSI-PRINT>)
(T
<PRSO-PRINT>)>
<TELL " here." CR>>
<ROUTINE CANT-VERB-A-PRSO! (STRING)
<TELL "You can't " .STRING AR ,PRSO>>
<ROUTINE TELL-HIT-HEAD ()
<TELL "You hit your head against the " D ,PRSO
" as you attempt this." CR>>
;<ROUTINE IS-NOUN? (TEST-NOUN)
<COND (<EQUAL? .TEST-NOUN <GET ,P-NAMW 0> <GET ,P-NAMW 1>>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE IS-ADJ? (OBJ TEST-ADJECTIVE "AUX" INPUT-ADJECTIVE)
<COND (<EQUAL? .OBJ ,PRSO>
<SET INPUT-ADJECTIVE <GET ,P-ADJW 0>>)
(T
<SET INPUT-ADJECTIVE <GET ,P-ADJW 1>>)>
<COND (<EQUAL? .TEST-ADJECTIVE .INPUT-ADJECTIVE>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE IS-ADJ? (TEST-ADJ)
<COND (<EQUAL? .TEST-ADJ <GET ,P-ADJW 0> <GET ,P-ADJW 1>>
<RTRUE>)
(T
<RFALSE>)>>
;<CONSTANT TOO-DARK "It's too dark to see a thing.">
<CONSTANT YNH "You're not holding">
;<GLOBAL YOU-SEE "You can see">
<CONSTANT LOOK-AROUND "Look around you.|">
<CONSTANT CANT-GO "You can't go that way.|">
<ROUTINE REFERRING ("OPTIONAL" (FOO <>))
<TELL "[I don't see what you're referring to.]" CR>>
<CONSTANT RECOGNIZE "[That sentence isn't one I recognize.]|">
<CONSTANT HOLDING-IT "You're holding it!|">
<CONSTANT PERIOD ".|">