sherlock/verbs.zil
historicalsource d327e7626d Release Version
2019-04-16 09:16:28 -04:00

4084 lines
111 KiB
Plaintext

;*****************************************************************************
; "game : SHERLOCK!"
; "file : VERBS1.ZIL"
; "auth : $Author: DEB $"
; "date : $Date: 28 Oct 1987 16:55:00 $"
; "rev : $Revision: 1.111 $"
; "vers : 1.00"
;*****************************************************************************
<DEFAULTS-DEFINED SOUND-CODE>
<DEFAULT-DEFINITION SOUND-CODE T>
<ROUTINE PRE-CALL ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-CALL">>
<COND (<MC-PRSI? ,TH-CAB-WHISTLE>
<RFALSE>)
(<MC-PRSO? ,ROOMS>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?HAIL>
<TELL "Greetings, O strange one." CR>)
(T
<TELL "Helllloooooooo." CR>)>)
(<AND <EQUAL? <GET ,GL-P-ADJW 0> ,W?MARY>
<EQUAL? ,GL-P-PRSA-WORD ,W?HAIL>>
<TELL "Praying isn't a bad idea. But if you really need help,
simply type HINT." CR>)
(<EQUAL? <GET ,GL-P-NAMW 0> ,W?CAB>
<COND (<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<RT-CYOU-MSG>
<TELL "can't " VW " a cab while indoors." CR>)
(<MC-HERE? <LOC ,TH-GROWLER-CAB> <LOC ,TH-HANSOM-CAB>>
<TELL ,K-CAB-HERE-MSG CR>)
(T
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?HAIL>
<RT-CYOU-MSG "wave" "waves">
<TELL "a hand in the air">)
(T
<RT-CYOU-MSG "shout" "shouts">
<TELL "for a few moments">)>
<TELL ", but nothing happens. Apparently that isn't how
Victorians " VW " cabs." CR>)>)
(<OR <MC-ISNOT? ,GL-PRSO ,FL-ALIVE>
<NOT <RT-VISIBLE? ,GL-PRSO>>>
<TELL "Nothing happens." CR>)>>
<ROUTINE PRE-DROP ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-DROP">>
<COND (<OR <MC-PRSO? ,TH-ANCHOR>
<IN? ,GL-PRSO ,GL-WINNER>>
<RFALSE>)
(<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
<RT-IMPOSSIBLE-MSG>)
(<MC-IS? ,GL-PRSO ,FL-BODYPART>
<RT-IMPOSSIBLE-MSG>)
(T
<RT-CYOU-MSG "are" "is">
<TELL "not holding " THEO "." CR>
<RFATAL>)>>
<ROUTINE PRE-DUMB-EXAMINE ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-DUMB-EXAMINE">>
<COND (<PRE-EXAMINE>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-EXAMINE ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-EXAMINE">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-PRSO? ,TH-INTDIR>
<COND (<==? ,GL-P-DIRECTION ,P?UP>
<RT-PERFORM ,V?LOOK-UP ,ROOMS>
<RTRUE>)
(<==? ,GL-P-DIRECTION ,P?DOWN>
<RT-PERFORM ,V?LOOK-DOWN ,ROOMS>
<RTRUE>)>
<TELL
"You peer off into the middle distance, but then return your attention to
the matters at hand." CR>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-FEED ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-FEED">>
<COND (<PRE-GIVE T>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-GIVE ("OPTIONAL" (FEED? <>))
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-GIVE">>
<COND (<OR <MC-F? ,GL-PRSO>
<MC-F? ,GL-PRSI>>
<TELL ,K-REFERRING-MSG CR>
<RTRUE>)
(<OR <EQUAL? ,GL-PRSO ,GL-PRSI>
<IN? ,GL-PRSI ,GLOBAL-OBJECTS>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<MC-ISNOT? ,GL-PRSI ,FL-ALIVE>
<RT-CYOU-MSG>
<TELL "cannot ">
<COND (<MC-T? .FEED?>
<TELL "feed ">)
(T
<TELL "give ">)>
<TELL "anything to " A ,GL-PRSI "." CR>
<RTRUE>)
(<AND <MC-PRSI? ,CH-ME ,CH-PLAYER>
<IN? ,GL-PRSO ,CH-PLAYER>>
<RT-ALREADY-HAVE-PRSO-MSG>
<RTRUE>)
(<AND <NOT <MC-PRSI? ,CH-ME ,CH-PLAYER>>
<RT-DONT-HAVE-MSG ,GL-PRSO>>
<RTRUE>)
(<AND <MC-IS? ,GL-PRSO ,FL-WORN>
<IN? ,GL-PRSO ,CH-PLAYER>>
<RT-TAKE-OFF-PRSO-FIRST-MSG>
<RFALSE>)
(T
<RFALSE>)>>
<ROUTINE PRE-LISTEN ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-LISTEN">>
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<RT-CYOU-MSG>
<TELL
"can't hear anything very clearly, but then what did you expect with those
huge wads of cotton plugging up your ears?" CR>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-POCKET ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-POCKET">>
<COND (<N==? ,GL-WINNER ,CH-PLAYER>
<TELL "[You cannot tell characters to do that.]" CR>
<RTRUE>)
(<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<IN? ,GL-PRSO ,TH-POCKET>
<TELL CTHEO>
<RT-IS-ARE-MSG>
<TELL "already in " D ,TH-POCKET "." CR>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-PUT ("AUX" PTR OLOC CNT)
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-PUT">>
<COND (<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
<RFALSE>)
(<AND <NOT <MC-PRSO? ,TH-ANCHOR>>
<NOT <IN? ,GL-PRSO ,GL-WINNER>>>
<RT-CYOU-MSG "are" "is">
<TELL "not holding " THEO "." CR>
<RFATAL>)
(<MC-PRSO? ,TH-CLOTHES>
<TELL ,K-INAPPROPRIATE-MSG CR>
<RTRUE>)
(<MC-PRSO? GL-PRSI>
<TELL ,K-HOW-TO-MSG CR>
<RTRUE>)
(<MC-PRSI? ,TH-INTDIR ,TH-RIGHT ,TH-LEFT>
<TELL "[You must specify an object.]" CR>
<RTRUE>)
(<MC-PRSI? ,TH-HANDS>
<RT-NOT-LIKELY-MSG ,GL-PRSO "would fit very well">
<RTRUE>)
(<EQUAL? ,TH-FEET ,GL-PRSO ,GL-PRSI>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>)
(<EQUAL? ,TH-EARS ,GL-PRSO ,GL-PRSI>
<RFALSE>)
(<MC-PRSO? ,TH-HANDS>
<RT-PERFORM ,V?REACH-IN ,GL-PRSI>
<RTRUE>)
(<IN? ,GL-PRSI ,GLOBAL-OBJECTS>
<RFALSE>)
(<AND <MC-PRSO? ,TH-PIPE>
<MC-PRSI? ,W?MOUTH ,W?LIPS>>
<RT-PERFORM ,V?SMOKE ,TH-PIPE>)
(<MC-IS? ,GL-PRSO ,FL-BODYPART>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<IN? ,GL-PRSO ,GL-PRSI>
<TELL CTHEO>
<RT-IS-ARE-MSG>
<TELL "already">
<RT-IN-ON-MSG ,GL-PRSI>
<TELL THEI "." CR>
<RTRUE>)
(<OR <EQUAL? ,GL-PRSO ,GL-PRSI>
<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
<MC-ISNOT? ,GL-PRSO ,FL-TAKEABLE>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<NOT <RT-ACCESSIBLE? ,GL-PRSI>>
<RT-CANT-SEE-ANY-MSG ,GL-PRSI>
<RTRUE>)
(<AND <MC-PRSO? ,TH-STETHOSCOPE>
<MC-IS? ,GL-PRSI ,FL-PERSON>>
<RFALSE>)
(<RT-CHECK-MOVE-MSG? ,GL-PRSO ,GL-PRSI>
<RTRUE>)
(<AND <MC-IS? ,GL-PRSO ,FL-WORN>
<IN? ,GL-PRSO ,CH-PLAYER>
<NOT <MC-PRSI? ,CH-ME ,CH-PLAYER>>>
<RT-TAKE-OFF-PRSO-FIRST-MSG>
<RFALSE>)>>
<ROUTINE PRE-PUT-ON ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-PUT-ON">>
<COND (<PRE-PUT>
<RTRUE>)
(<MC-IS? ,GL-PRSI ,FL-ALIVE>
<RFALSE>)
(<MC-ISNOT? ,GL-PRSI ,FL-SURFACE>
<RT-NO-GOOD-SURFACE-MSG>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-SHOW ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-SHOW">>
<COND (<EQUAL? <> ,GL-PRSO ,GL-PRSI>
<TELL ,K-REFERRING-MSG CR>)
(<MC-PRSI? ,CH-ME ,CH-PLAYER>
<COND (<RT-META-IN? ,GL-PRSO ,CH-PLAYER>
<RT-PERFORM ,V?EXAMINE ,GL-PRSO>)>)
(<OR <EQUAL? ,GL-PRSO ,GL-PRSI>
<IN? ,GL-PRSI ,GLOBAL-OBJECTS>>
<RT-IMPOSSIBLE-MSG>)
(<MC-ISNOT? ,GL-PRSI ,FL-ALIVE>
<RT-CYOU-MSG>
<TELL "cannot show things to " A ,GL-PRSI "." CR>)
;(<MC-IS? ,GL-PRSI ,FL-ASLEEP>
<TELL CTHEI " isn't in any condition to appreciate " THEO "." CR>)
;(<AND <NOT <MC-PRSI? CH-ME>>
<RT-DONT-HAVE-MSG ,GL-PRSO>>
<RTRUE>)>>
<ROUTINE PRE-SHOOT ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-SHOOT">>
<COND (<NOT <MC-PRSI? <> ,TH-GUN>>
<RT-CYOU-MSG>
<TELL "cannot shoot anything with " THEI "." CR>)
(<MC-PRSI? ,GL-PRSO>
<TELL ,K-HOW-TO-MSG CR>)
(<NOT <IN? ,TH-GUN ,CH-PLAYER>>
<TELL "Clever thinking. If only you had something to shoot with!" CR>)
(<MC-PRSO? ,CH-ME ,TH-EARS ,CH-PLAYER ,TH-HEAD ,TH-WATSONS-HEART>
<TELL ,K-SUICIDE-MSG CR>)
(<MC-PRSO? ,TH-BREATH> <RFALSE>)
(<MC-IS? ,GL-PRSO ,FL-BODYPART>
<TELL "Is this how you got sent home from the Afghan Campaign?"
CR>)
(<AND <NOT <MC-PRSO? ,TH-GUN>>
<RT-META-IN? ,GL-PRSO ,CH-PLAYER>>
<TELL ,K-DROP-IT-FIRST-MSG CR>)
(<ZERO? ,TH-GUN-AUX1>
<TELL "Click!" CR>)
(T
<SETG TH-GUN-AUX1 <- ,TH-GUN-AUX1 1>>
<RFALSE>)>>
<ROUTINE PRE-TAKE ("AUX" L)
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-TAKE">>
<COND (<AND <MC-PRSO? ,TH-BREATH>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<V-INHALE>
<RTRUE>)>
<COND (<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
<RFALSE>)>
<COND (<==? ,GL-PRSO <LOC ,GL-WINNER>>
<RT-CYOU-MSG>
<TELL "are already inside " THEO "." CR>
<RTRUE>)>
<SET L <LOC ,GL-PRSO>>
<COND (<MC-IS? ,GL-PRSO ,FL-BODYPART>
<RT-IMPOSSIBLE-MSG>)
(<AND <MC-PRSO? ,TH-STETHOSCOPE ,TH-WATSONS-HAT
,TH-COTTON-BALLS>
<MC-IS? ,GL-PRSO ,FL-WORN>>
<RFALSE>)
(<EQUAL? .L ,GL-WINNER>
<RT-CYOU-MSG "are" "is">
<TELL "already ">
<COND (<MC-IS? ,GL-PRSO ,FL-WORN>
<TELL "wearing ">)
(T
<TELL "holding ">)>
<TELL THEO "." CR>)
(<AND <MC-T? .L>
<MC-IS? .L ,FL-CONTAINER>
<MC-IS? .L ,FL-OPENABLE>
<MC-ISNOT? .L ,FL-OPENED>>
<RT-CYOU-MSG>
<TELL "can't reach into " THE .L ". It is closed." CR>)
(<MC-T? ,GL-PRSI>
<COND (<MC-PRSO? GL-PRSI>
<COND (<OR <EQUAL? <GET ,GL-P-NAMW 0> <GET ,GL-P-NAMW 1>>
<EQUAL? <GET ,GL-P-ADJW 0> <GET ,GL-P-ADJW 1>>>
<RT-IMPOSSIBLE-MSG>)>)
(<MC-PRSI? ,CH-ME ,CH-PLAYER>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<RT-NOBODY-TO-ASK-MSG>
<RTRUE>)
(<NOT <EQUAL? .L ,CH-PLAYER>>
<RT-CYOU-MSG "do not" "does not">
<TELL "have " THEO "." CR>)>)
(<AND <MC-PRSI? ,CH-BANK-GUARD>
<EQUAL? .L ,TH-GUARDS-POCKET>>
<RT-PERFORM ,V?TAKE ,GL-PRSO ,TH-GUARDS-POCKET>)
(<NOT <EQUAL? .L ,GL-PRSI>>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<RT-IN-ON-MSG ,GL-PRSI <>>
<TELL THEI "." CR>)>)>>
<ROUTINE PRE-THROW ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-THROW">>
<COND (<PRE-PUT>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-THROW-OVER ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-THROW-OVER">>
<COND (<PRE-THROW>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-WATCH ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-WATCH">>
<COND (<PRE-EXAMINE>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-ADJUST ()
<DEBUGGING? <RT-DEBUG-VERB "V-ADJUST">>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?ADJUST>
<TELL CTHEO>
<RT-DONT-DOESNT-MSG ,GL-PRSO>
<TELL "need adjustment." CR>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot focus " A ,GL-PRSO "." CR>
<RTRUE>)>>
<ROUTINE V-ALARM ()
<DEBUGGING? <RT-DEBUG-VERB "V-ALARM">>
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RFATAL>)
(<MC-PRSO? ,ROOMS>
<RT-CYOU-MSG "are" "is">
<TELL "already wide awake." CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-ALIVE>
<TELL CTHEO>
<RT-IS-ARE-MSG ,GL-PRSO>
<COND (<MC-IS? ,GL-PRSO ,FL-ASLEEP>
<TELL "unconscious, not asleep." CR>)
(T
<TELL "already wide awake." CR>)>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>>
<ROUTINE V-ARREST ()
<DEBUGGING? <RT-DEBUG-VERB "V-ARREST">>
<TELL "Unfortunately,">
<RT-YOU-MSG "do" "does">
<TELL "not have the authority to arrest any">
<COND (<MC-IS? ,GL-PRSO ,FL-PERSON>
<TELL "one">)
(T
<TELL "thing">)>
<TELL "." CR>>
<ROUTINE V-ASK-ABOUT-1 ()
<DEBUGGING? <RT-DEBUG-VERB "V-ASK-ABOUT-1">>
<RTRUE>>
<ROUTINE V-ASK-ABOUT ()
<DEBUGGING? <RT-DEBUG-VERB "V-ASK-ABOUT">>
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RFATAL>)
(<EQUAL? ,GL-WINNER ,GL-PRSI>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RFATAL>)
(<MC-PRSO? ,CH-ME ,CH-PLAYER>
<RT-TALK-TO-SELF-MSG>
<RTRUE>)
(T
<RT-NO-RESPONSE-MSG>
<RTRUE>)>>
<ROUTINE V-ASK-FOR-1 ()
<DEBUGGING? <RT-DEBUG-VERB "V-ASK-FOR-1">>
<RTRUE>>
<ROUTINE V-ASK-FOR ("AUX" WHO)
<DEBUGGING? <RT-DEBUG-VERB "V-ASK-FOR">>
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RFATAL>)
(<EQUAL? ,GL-WINNER ,GL-PRSI>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<MC-ISNOT? ,GL-PRSI ,FL-TAKEABLE>
<TELL CTHE ,GL-PRSO " say">
<RT-S-NOS-MSG ,GL-PRSO>
<TELL ", \"Unfortunately, ">
<COND (<MC-ISNOT? ,GL-PRSO ,FL-PLURAL>
<TELL "I">)
(T
<TELL "we">)>
<TELL " can't help you with that.\"" CR>
<RTRUE>)
(T
<RT-NO-RESPONSE-MSG>
<RTRUE>)>>
<ROUTINE V-BLOW-INTO ()
<DEBUGGING? <RT-DEBUG-VERB "V-BLOW-INTO">>
<COND (<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-PERFORM ,V?USE ,GL-PRSO>
<RTRUE>)
(T
<RT-NO-POINT-MSG "Blowing">
<RTRUE>)>>
<ROUTINE V-BOW ()
<DEBUGGING? <RT-DEBUG-VERB "V-BOW">>
<RT-NO-POINT-MSG "Paying respect to">
<RTRUE>>
<ROUTINE V-BURN ("AUX" OBJ (FIX-LAMP? <>))
<COND (<AND <RT-META-IN? ,TH-LAMP ,GL-WINNER>
<FSET? ,TH-LAMP ,FL-LIGHTED>>
<SET FIX-LAMP? T>
<FCLEAR ,TH-LAMP ,FL-LIGHTED>)>
<COND (<AND <SET OBJ <RT-GET-WHAT-I-MEAN ,FL-LIGHTED <+ ,SH ,SC ,SHAVE>
,PR?WITH T T>>
<N==? .OBJ ,TH-LAMP>>
<COND (.FIX-LAMP? <FSET ,TH-LAMP ,FL-LIGHTED>)>
<TELL "[with " THE .OBJ "]" CR>
<RT-PERFORM ,V?BURN-WITH ,GL-PRSO .OBJ>
<RTRUE>)
(T
<COND (.FIX-LAMP? <FSET ,TH-LAMP ,FL-LIGHTED>)>
<PUT ,GL-P-ITBL ,K-P-PREP2 ,PR?WITH>
<RT-SYNTAX-CHECK>
<SETG GL-P-GOOD <>>
<RFATAL>)>>
<ROUTINE V-BURN-WITH ()
<DEBUGGING? <RT-DEBUG-VERB "V-BURN-WITH">>
<COND (<MC-IS? ,GL-PRSO ,FL-BURNABLE>
<COND (<AND <MC-IS? ,GL-PRSI ,FL-BURNABLE>
<MC-IS? ,GL-PRSI ,FL-LIGHTED>>
<COND (<AND <RT-META-IN? ,TH-ETHERIUM-AMPOULE ,GL-PRSO>
<NOT <FSET? ,TH-ETHERIUM-AMPOULE ,FL-BROKEN>>>
<TELL CTHEO " catches fire, and quickly generates
enough heat to affect the etherium you left inside it.">
<RT-PERFORM ,V?BURN-WITH ,TH-ETHERIUM-AMPOULE ,GL-PRSI>
<RTRUE>)>
<REMOVE ,GL-PRSO>
<FCLEAR ,GL-PRSO ,FL-WORN>
<TELL CTHEO " catches fire and is quickly consumed." CR>)
(T
<TELL CTHEI>
<RT-ISNT-ARENT-MSG ,GL-PRSI>
<TELL "burning." CR>)>)
(T
<RT-CYOU-MSG>
<TELL "can't " VW " " THEO "." CR>)>>
<ROUTINE V-BUY ()
<DEBUGGING? <RT-DEBUG-VERB "V-BUY">>
<COND (<NOT <RT-VISIBLE? ,GL-PRSO>>
<RT-CANT-SEE-ANY-MSG ,GL-PRSO>
<RFATAL>)
(<RT-HELD? ,GL-PRSO>
<RT-ALREADY-HAVE-PRSO-MSG>
<RTRUE>)
(<MC-ISNOT? ,GL-PRSO ,FL-BUYABLE>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<TELL "for sale." CR>
<RTRUE>)
(<AND <EQUAL? ,GL-WINNER ,CH-PLAYER>
<IN? ,GL-PRSO ,TH-POCKET>>
<RT-SAY-ITS-MSG>
<TELL "in " THE ,TH-POCKET "." CR>
<RTRUE>)
(<MC-T? ,GL-PRSI>
<RT-CYOU-MSG "could not" "cannot">
<TELL "buy " THEO " with " A ,GL-PRSI "." CR>
<RTRUE>)
(T
<RT-NO-MONEY-MSG>
<RTRUE>)>>
<ROUTINE V-BUY-FROM ()
<DEBUGGING? <RT-DEBUG-VERB "V-BUY-FROM">>
<TELL "It's not for sale." CR>
<RFATAL>>
<ROUTINE V-CALL ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "V-CALL">>
<COND (<EQUAL? <LOC ,GL-PRSO> ,GL-PLACE-CUR>
<TELL CTHEO>
<RT-IS-ARE-MSG ,GL-PRSO>
<TELL "right in front of you." CR>)
(T
<TELL "Nothing happens." CR>)>
<RTRUE>>
<ROUTINE V-CAST-OFF ()
<DEBUGGING? <RT-DEBUG-VERB "V-CAST-OFF">>
<COND (<NOT <MC-PRSO? ,ROOMS ,TH-BOAT>>
<V-DROP>)
(<OR <IN? ,CH-PLAYER ,TH-BOAT>
<EQUAL? <LOC ,CH-PLAYER> <LOC ,TH-BOAT>>>
<RT-LAUNCH-BOAT>)
(T
<TELL
"Clever idea. Now, if only you were in a boat...." CR>)>
<RTRUE>>
<ROUTINE V-CLEAN ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLEAN">>
<TELL "Sorry. You get no points for neatness." CR>
<RFATAL>>
<ROUTINE V-CLEAN-OFF ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLEAN-OFF">>
<COND (<MC-PRSO? GL-PRSI>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot ">
<PRINTB ,GL-P-PRSA-WORD>
<TELL " " THEO " on " THEI "." CR>
<RTRUE>)>>
<ROUTINE V-CLIMB-DOWN ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLIMB-DOWN">>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?JUMP ,W?LEAP>
<RT-PERFORM ,V?DIVE ,GL-PRSO>
<RTRUE>)
(<MC-PRSO? ,ROOMS>
<RT-DO-WALK ,P?DOWN>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>>
<ROUTINE V-CLIMB-ON ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLIMB-ON">>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?TAKE>
<RT-NOT-LIKELY-MSG ,GL-PRSO "is looking for a fight">
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot ">
<PRINTB ,GL-P-PRSA-WORD>
<TELL " onto ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>
<RTRUE>)>>
<ROUTINE V-CLIMB-OVER ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLIMB-OVER">>
<COND (<MC-PRSO? ,ROOMS>
<V-WALK-AROUND>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot climb over ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>
<RTRUE>)>>
<ROUTINE V-CLIMB-UP ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLIMB-UP">>
<COND (<MC-PRSO? ,ROOMS>
<RT-DO-WALK ,P?UP>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>>
<ROUTINE V-CLOSE ()
<DEBUGGING? <RT-DEBUG-VERB "V-CLOSE">>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENABLE>
<COND (<MC-ISNOT? ,GL-PRSO ,FL-OPENED>
<RT-ITS-ALREADY-MSG "closed">)
(<MC-IS? ,GL-PRSO ,FL-LOCKED>
<TELL
"The door is fixed in the open position. It cannot be closed." CR>)
(T
<RT-YOU-CLOSE-MSG>)>
<RTRUE>)
(T
<RT-CANT-CLOSE-THAT-MSG>
<RTRUE>)>>
<ROUTINE V-COUNT ()
<DEBUGGING? <RT-DEBUG-VERB "V-COUNT">>
<COND (<==? <GET ,GL-P-NAMW 0> ,W?ARMS ,W?EARS ,W?EYES
,W?FEET ,W?HANDS ,W?LEGS ,W?LIPS>
<TELL "Two." CR>)
(<OR <MC-IS? ,GL-PRSO ,FL-PLURAL>
<EQUAL? ,GL-PRSO ,TH-BANK-OF-CANDLES>>
<RT-CYOU-MSG "become" "becomes">
<TELL "distracted and lose">
<COND (<NOT <EQUAL? ,GL-WINNER ,CH-PLAYER>>
<TELL "s">)>
<TELL " count." CR>)
(T
<RT-CYOU-MSG "see" "sees">
<TELL "only one." CR>)>
<RTRUE>>
<ROUTINE V-COVER ()
<DEBUGGING? <RT-DEBUG-VERB "V-COVER">>
<RT-PERFORM ,V?PUT-ON ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-CROSS ()
<DEBUGGING? <RT-DEBUG-VERB "V-CROSS">>
<RT-CYOU-MSG>
<TELL "cannot cross ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-CUT ()
<DEBUGGING? <RT-DEBUG-VERB "V-CUT">>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-DETONATE ()
<DEBUGGING? <RT-DEBUG-VERB "V-DETONATE">>
<RT-IMPOSSIBLE-MSG>
<RTRUE>>
<ROUTINE V-DIAGNOSE ()
<DEBUGGING? <RT-DEBUG-VERB "V-DIAGNOSE">>
<COND (<MC-ISNOT? ,GL-PRSO ,FL-ALIVE>
<TELL "Don't be ridiculous." CR>)
(<MC-IS? ,GL-PRSO ,FL-ASLEEP>
<TELL CTHEO>
<RT-IS-ARE-MSG ,GL-PRSO>
<TELL "asleep." CR>)
(<EQUAL? ,GL-PRSO ,CH-PLAYER ,CH-ME>
<TELL "You're doing fine. Now quit fooling around and get back
to solving the game." CR>)
(T
<TELL CTHEO " appear">
<RT-S-NOS-MSG ,GL-PRSO>
<TELL " to be in good health." CR>)>
<RTRUE>>
;<ROUTINE V-DIG ()
<DEBUGGING? <RT-DEBUG-VERB "V-DIG">>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
;<ROUTINE V-DIG-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-DIG-SWP">>
<RT-PERFORM ,V?DIG ,GL-PRSI ,GL-PRSO>
<RFATAL>>
<ROUTINE V-DIVE ()
<DEBUGGING? <RT-DEBUG-VERB "V-DIVE">>
<COND (<AND <MC-PRSO? ,ROOMS>
<MC-HERE? ,RM-THE-EMBANKMENT ,RM-SWAN-LANE ,RM-LONDON-BRIDGE>>
<TELL "Yuck! Have you looked at that water?" CR>)
(T
<TELL "That would be a foolish thing to do." CR>)>
<RFATAL>>
<ROUTINE V-DRESS ()
<DEBUGGING? <RT-DEBUG-VERB "V-DRESS">>
<COND (<MC-PRSO? ,ROOMS>
<TELL "You are already dressed." CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-CYOU-MSG "are" "is">
<TELL "already dressed." CR>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot dress " A ,GL-PRSO "." CR>
<RTRUE>)>>
<ROUTINE V-DRINK ("OPTIONAL" (FROM? <>))
<DEBUGGING? <RT-DEBUG-VERB "V-DRINK">>
<RT-CYOU-MSG>
<TELL "cannot drink ">
<COND (<MC-T? .FROM?>
<TELL "from ">)>
<TELL D ,TH-NOT-HERE-OBJECT "." CR>
<RTRUE>>
<ROUTINE V-DRINK-FROM ()
<DEBUGGING? <RT-DEBUG-VERB "V-DRINK-FROM">>
<V-DRINK T>
<RTRUE>>
<ROUTINE V-DRIVE ()
<DEBUGGING? <RT-DEBUG-VERB "V-DRIVE">>
<COND (<EQUAL? <LOC ,GL-WINNER> ,TH-HANSOM-CAB ,TH-GROWLER-CAB>
<COND (<MC-PRSO? ,ROOMS>
<RTRUE>)
(T
<SETG GL-WHERE-TO-PROMPT? <>>
<TELL
"\"Sorry, guv. Could you be a little more specific?\"" CR>)>)
(T
<RT-CYOU-MSG "are" "is">
<TELL "not in a cab." CR>)>>
<ROUTINE V-DROP ()
<DEBUGGING? <RT-DEBUG-VERB "V-DROP">>
<COND (<RT-IDROP-MSG>
<RT-SAY-DROPPED-MSG>)>
<RTRUE>>
<ROUTINE V-DUMB-EXAMINE ()
<DEBUGGING? <RT-DEBUG-VERB "V-DUMB-EXAMINE">>
<COND (<V-EXAMINE>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-EAT ()
<DEBUGGING? <RT-DEBUG-VERB "V-EAT">>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<RT-NOT-LIKELY-MSG ,GL-PRSO "would agree with you">
<RTRUE>)
(T
<TELL "\"It" <RT-PICK-NEXT ,GL-NOT-LIKELY-TXT>
" that " THEO " would agree with me.\"" CR>
<RTRUE>)>>
<ROUTINE V-EMPTY ("OPTIONAL" (DEST <>))
<DEBUGGING? <RT-DEBUG-VERB "V-EMPTY">>
<COND (<MC-F? .DEST>
<SET DEST ,CH-PLAYER>)>
<COND (<MC-IS? ,GL-PRSO ,FL-SURFACE>
<RT-EMPTY-PRSO-MSG .DEST>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-EMPTY-PRSO-MSG .DEST>
<RTRUE>)
(T
<RT-ITS-CLOSED-MSG ,GL-PRSO>)>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot possibly empty " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-EMPTY-INTO ()
<DEBUGGING? <RT-DEBUG-VERB "V-EMPTY-INTO">>
<COND (<MC-PRSI? ,TH-HANDS ,CH-ME ,CH-PLAYER>
<V-EMPTY ,CH-PLAYER>)
(<OR <RT-IDENTIFY-FLOOR? ,W?GROUND ,GL-PRSI>
<RT-IDENTIFY-FLOOR? ,W?FLOOR ,GL-PRSI>>
<V-EMPTY ,GL-PRSI>)
(<MC-IS? ,GL-PRSI ,FL-SURFACE>
<V-EMPTY ,GL-PRSI>)
(<MC-IS? ,GL-PRSI ,FL-CONTAINER>
<COND (<MC-IS? ,GL-PRSI ,FL-OPENED>
<COND (<MC-IS? ,GL-PRSI ,TH-WATSONS-COAT>
<V-EMPTY ,TH-POCKET>)
(T
<V-EMPTY ,GL-PRSI>)>)
(T
<RT-ITS-CLOSED-MSG ,GL-PRSI>)>)
(T
<RT-CYOU-MSG>
<TELL "cannot empty " THEO " into " THEI "." CR>)>>
<ROUTINE V-ENTER ("AUX" VEH)
<DEBUGGING? <RT-DEBUG-VERB "V-ENTER">>
<COND (<==? ,GL-PRSO ,GL-PLACE-CUR>
; "Enter the room you're in"
<RT-ALREADY-IN-ROOM-MSG>
<RTRUE>)
(<SET VEH <RT-FIND-IN? ,GL-PLACE-CUR ,FL-VEHICLE>>
<COND (<NOT <MC-PRSO? ,ROOMS .VEH>> T)
(<IN? ,GL-WINNER .VEH>
<RT-CYOU-MSG "are" "is">
<TELL "already in " THE .VEH "." CR>
<RTRUE>)
(T
<RT-PERFORM ,V?ENTER .VEH>
<RTRUE>)>)>
<COND (<MC-PRSO? ,ROOMS>
<RT-DO-WALK ,P?IN>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-CLOTHING>
<TELL "[Presumably, you mean WEAR " THEO ".]" CR>
<RT-PERFORM ,V?WEAR ,GL-PRSO>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-ESCAPE ()
<DEBUGGING? <RT-DEBUG-VERB "V-ESCAPE">>
<V-WALK-AROUND>
<RTRUE>>
<ROUTINE V-EXAMINE ("AUX" (ODF <>) NUM (DRES 0))
<DEBUGGING? <RT-DEBUG-VERB "V-EXAMINE">>
<COND (<FSET? ,GL-PRSO ,FL-HAS-DESCFCN>
<SET ODF <GETP ,GL-PRSO ,P?ACTION>>)>
<COND (<MC-T? <SET NUM <RT-HOLE? ,GL-PRSO>>>
<TELL "There ">
<COND (<EQUAL? .NUM 1>
<TELL "is one">)
(T
<TELL "are ">
<COND (<EQUAL? .NUM 2>
<TELL "two">)
(<EQUAL? .NUM 3>
<TELL "three">)
(<EQUAL? .NUM 4>
<TELL "four">)
(<EQUAL? .NUM 5>
<TELL "five">)
(T
<TELL "six">)>)>
<TELL " bullet hole">
<COND (<G? .NUM 1>
<TELL "s">)>
<TELL " in " THEO "." CR>)>
<COND (<AND <MC-T? .ODF>
<==? <SET DRES <APPLY .ODF ,K-M-DESCFCN>> 1>>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-OPENABLE>
<RT-OPEN-CLOSED-MSG>
<CRLF>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-SURFACE>
<TELL "On " THEO " can be seen ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL "." CR>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<COND (<OR <MC-IS? ,GL-PRSO ,FL-OPENED>
<MC-IS? ,GL-PRSO ,FL-TRANSPARENT>>
<V-LOOK-INSIDE>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)
(T
<RT-ITS-CLOSED-MSG ,GL-PRSO>
<CRLF>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)>)
(<AND <MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-SEE-ANYTHING-IN? ,GL-PRSO>>
<TELL CTHEO>
<RT-IS-ARE-MSG ,GL-PRSO>
<TELL "holding ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL "." CR>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)
(<MC-T? .NUM>
<RTRUE>)
(<T? .DRES>
<RTRUE>)
(T
<RT-NOTHING-INTERESTING-MSG>
<TELL " about " THEO "." CR>
<MC-MAKE ,GL-PRSO ,FL-SEEN>
<RTRUE>)>>
<ROUTINE V-EXHALE ()
<DEBUGGING? <RT-DEBUG-VERB "V-EXHALE">>
<COND (<NOT <MC-PRSO? ,TH-BREATH ,ROOMS>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<MC-ISNOT? ,TH-BREATH ,FL-LOCKED>
<RT-CYOU-MSG>
<RT-WOULD-HAVE-TO-MSG "inhale first.|">
<RTRUE>)
(T
<MC-UNMAKE ,TH-BREATH ,FL-LOCKED>
<TELL "You begin to breathe normally." CR>
<RT-ALARM-CLR ,RT-I-EXHALE>
<RT-ALARM-CLR ,RT-I-INHALE>
<RT-SMELL-ETHERIUM?>)>
<RTRUE>>
<ROUTINE V-EXIT ("AUX" VEH L)
<DEBUGGING? <RT-DEBUG-VERB "V-EXIT">>
<COND (<SET VEH <RT-FIND-IN? ,GL-PLACE-CUR ,FL-VEHICLE>>
<COND (<NOT <MC-PRSO? ,ROOMS .VEH>> T)
(<AND <MC-PRSO? ,ROOMS>
<MC-IS? <LOC ,GL-WINNER> ,FL-VEHICLE>>
<RT-PERFORM ,V?EXIT <LOC ,GL-WINNER>>
<RTRUE>)
(<NOT <IN? ,GL-WINNER .VEH>>
<RT-CYOU-MSG "are" "is">
<TELL "not in " THE .VEH "." CR>
<RTRUE>)
(T
<RT-PERFORM ,V?EXIT .VEH>
<RTRUE>)>)>
<SET L <LOC ,GL-PRSO>>
<COND (<MC-PRSO? ,ROOMS>
<RT-DO-WALK ,P?OUT>
<RTRUE>)
(<==? ,GL-PRSO ,GL-PLACE-CUR>
; "EXIT ROOM"
<TELL ,K-SPECIFY-DIR-MSG CR>
<RTRUE>)
(<==? .L ,ROOMS>
; "EXIT ROOM when not in ROOM"
<RT-NOT-IN-ROOM-MSG>
<RTRUE>)
(<AND
<MC-IS? .L ,FL-CONTAINER>
<RT-VISIBLE? ,GL-PRSO>>
<TELL "[from " D .L "]" CR>
<RT-PERFORM ,V?TAKE ,GL-PRSO>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-FEED ()
<DEBUGGING? <RT-DEBUG-VERB "V-FEED">>
<COND (<EQUAL? ,GL-PRSI ,GL-WINNER>
<RT-CYOU-MSG>)
(T
<TELL CTHE ,GL-PRSI " ">)>
<TELL "cannot eat " THE ,GL-PRSO "." CR>
<RTRUE>>
<ROUTINE V-FEED-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-FEED-SWP">>
<RT-PERFORM ,V?FEED ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-FILL ()
<DEBUGGING? <RT-DEBUG-VERB "V-FILL">>
<RT-PERFORM ,V?PUT ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-FIND ("AUX" L)
<DEBUGGING? <RT-DEBUG-VERB "V-FIND">>
<SET L <LOC ,GL-PRSO>>
<COND (<MC-F? .L>
<TELL ,K-DO-IT-YOURSELF-MSG CR>
<RTRUE>)
(<MC-PRSO? ,CH-ME ,CH-PLAYER ,TH-HANDS ,TH-WATSONS-HEART
,TH-FEET ,TH-EARS ,TH-HEAD ,TH-PLAYER-BODY
,TH-BREATH ,TH-CLOTHES>
<TELL "You're right here." CR>
<RTRUE>)
(<IN? ,GL-PRSO ,CH-PLAYER>
<TELL "You're ">
<COND (<MC-IS? ,GL-PRSO ,FL-WORN>
<TELL "wearing">)
(T
<TELL "holding">)>
<TELL " ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>
<RTRUE>)
(<OR <IN? ,GL-PRSO ,GL-PLACE-CUR>
<==? ,GL-PRSO ,GL-PLACE-CUR>
<AND <OR <IN? ,GL-PRSO ,LOCAL-GLOBALS>
<IN? ,GL-PRSO ,ROOMS>>
<RT-GLOBAL-IN? ,GL-PRSO ,GL-PLACE-CUR>>>
<RT-ITS-RIGHT-HERE-MSG>
<RTRUE>)
(<AND <OR <MC-IS? .L ,FL-PERSON>
<MC-IS? .L ,FL-ALIVE>>
<RT-VISIBLE? .L>>
<TELL CTHE .L " ha">
<COND (<MC-ISNOT? .L ,FL-PLURAL>
<TELL "s">)
(T
<TELL "ve">)>
<TELL " it." CR>
<RTRUE>)
(<AND <RT-SEE-INSIDE? .L>
<RT-VISIBLE? .L>>
<RT-SAY-ITS-MSG>
<RT-IN-ON-MSG .L <>>
<TELL THE .L "." CR>
<RTRUE>)
(T
<TELL ,K-DO-IT-YOURSELF-MSG CR>)>
<RTRUE>>
<ROUTINE V-FLIP ()
<DEBUGGING? <RT-DEBUG-VERB "V-FLIP">>
<COND (<AND <MC-ISNOT? ,GL-PRSO ,FL-TAKEABLE>
<MC-ISNOT? ,GL-PRSO ,FL-TRYTAKE>>
<RT-IMPOSSIBLE-MSG>)
(T
<RT-NO-POINT-MSG "Flipping">)>
<RTRUE>>
<ROUTINE V-FLY ()
<DEBUGGING? <RT-DEBUG-VERB "V-FLY">>
<RT-CYOU-MSG>
<TELL "cannot possibly do that." CR>>
<ROUTINE V-FOCUS-ON ()
<DEBUGGING? <RT-DEBUG-VERB "V-FOCUS-ON">>
<COND (<MC-F? ,GL-PRSI>
<COND (<MC-PRSO? ,TH-TELESCOPE>
<RT-IMPOSSIBLE-MSG>)
(<IN? ,TH-TELESCOPE ,CH-PLAYER>
<RT-PERFORM ,V?LOOK-THRU ,GL-PRSO ,TH-TELESCOPE>)
(T
<TELL ,K-HOW-TO-MSG CR>)>)
(T
<COND (<MC-PRSO? ,TH-TELESCOPE>
<RT-PERFORM ,V?LOOK-THRU ,GL-PRSI ,GL-PRSO>)
(T
<RT-CYOU-MSG>
<TELL "cannot focus " THEO " on " THEI "." CR>)>)>
<RTRUE>>
<ROUTINE V-FOLD ()
<DEBUGGING? <RT-DEBUG-VERB "V-FOLD">>
<RT-NO-POINT-MSG "Folding">
<RTRUE>>
<ROUTINE V-FOLLOW ()
<DEBUGGING? <RT-DEBUG-VERB "V-FOLLOW">>
<COND (<MC-F? ,GL-PRSO>
<RT-CANT-SEE-ANY-MSG>
<RFATAL>)
(<AND <NOT <RT-META-IN? ,GL-PRSO ,GL-PLACE-CUR>>
<NOT <EQUAL? <LOC ,GL-PRSO> ,LOCAL-GLOBALS
,GLOBAL-OBJECTS>>>
<RT-CANT-SEE-ANY-MSG ,GL-PRSO>
<RFATAL>)>
<TELL "But ">
<COND (<MC-PRSO? ,CH-ME ,CH-PLAYER>
<TELL "you're right here." CR>
<RTRUE>)
(T
<TELL THEO>
<RT-IS-ARE-MSG ,GL-PRSO>
<COND (<OR <RT-VISIBLE? ,GL-PRSO>
<IN? ,GL-PRSO ,GLOBAL-OBJECTS>>
<TELL "right here">)
(T
<TELL "not visible at the moment">)>)>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-FOO ()
<DEBUGGING? <RT-DEBUG-VERB "V-FOO">>
<COND (<MC-VERB-WORD? RENT>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<TELL "for rent." CR>)
(<MC-PRSO? ,ROOMS>
<TELL "Same to you, fella." CR>)>>
<ROUTINE V-GET-FOR ()
<DEBUGGING? <RT-DEBUG-VERB "V-GET-FOR">>
<RT-PERFORM ,V?TAKE ,GL-PRSO>
<RTRUE>>
<ROUTINE V-GET-FOR-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-GET-FOR-SWP">>
<RT-PERFORM ,V?TAKE ,GL-PRSI>
<RTRUE>>
<ROUTINE V-GIN ("AUX" WHO)
<DEBUGGING? <RT-DEBUG-VERB "V-GIN">>
<COND (<MC-HERE? ,RM-BYWARD-TOWER>
<TELL
CTHE ,CH-TOWER-GUARD " takes a quick look around and says, \"Thanks. Don't
mind if I do,\" whereupon he whips out a hip flask and takes a quick
slug. Just as quickly, he tucks it away and resumes staring at you." CR>)
(T
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL
"Holmes shakes his head and says, \"No drinks for you until we recover the
Crown Jewels.\"" CR>)
(<EQUAL? .WHO ,CH-WIGGINS>
<TELL
"Wiggins says, \"Good idea. I could use a belt.\"" CR>)
(T
<TELL "Wrong game, dummy." CR>)>)>
<RTRUE>>
<ROUTINE V-GIVE ()
<DEBUGGING? <RT-DEBUG-VERB "V-GIVE">>
<COND (<MC-PRSI? ,CH-ME ,CH-PLAYER>
<RT-NOBODY-TO-ASK-MSG>)
(<AND <EQUAL? ,GL-PRSI ,CH-TOWER-GUARD ,CH-PALACE-GUARD
,CH-TUSSAUDS-GUARD>
<MC-IS? ,GL-PRSO ,FL-MONEY>>
<TELL
CTHEI " doesn't even glance at " THEO ". Clearly he cannot be bribed." CR>)
(<MC-IS? ,GL-PRSI ,FL-PERSON>
<TELL CTHEI " show">
<RT-S-NOS-MSG ,GL-PRSI>
<TELL " little interest in your offer." CR>)
(T
<RT-NOT-LIKELY-MSG ,GL-PRSI "would accept your offer">)>
<RTRUE>>
<ROUTINE V-GIVE-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-GIVE-SWP">>
<RT-PERFORM ,V?GIVE ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-GOODBYE ()
<DEBUGGING? <RT-DEBUG-VERB "V-GOODBYE">>
<RT-HI-BYE-MSG>>
<ROUTINE V-GUESS ("AUX" WHO)
<DEBUGGING? <RT-DEBUG-VERB "V-GUESS">>
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-WIGGINS>
<TELL
"Wiggins says, \"Mr 'Olmes doesn't like people guessing about things.\"" CR>
<RTRUE>)>
<COND (<EQUAL? ,GL-WINNER ,CH-HOLMES>
<TELL "Holmes looks at you in shock and says, \"I never">)
(<EQUAL? .WHO ,CH-HOLMES>
<TELL "Holmes shakes his head and says, \"Never">)
(T
<TELL "Holmes's words come back to you, \"Never">)>
<TELL " guess, Watson. It is a shocking habit - destructive
to the logical faculty.\"" CR>
<RTRUE>>
<ROUTINE V-HAGGLE ()
<DEBUGGING? <RT-DEBUG-VERB "V-HAGGLE">>
<COND (<MC-ISNOT? ,GL-PRSO ,FL-PERSON>
<RT-CYOU-MSG>
<TELL "cannot " VW " with " AO "." CR>)
(<MC-PRSO? ,CH-HOLMES>
<TELL
"There is nothing to negotiate with " THE ,CH-HOLMES " about." CR>)
(<MC-PRSO? ,CH-ME ,CH-PLAYER>
<TELL "You have nothing to negotiate." CR>)
(T
<TELL CTHEO " refuse">
<RT-S-NOS-MSG ,GL-PRSO>
<TELL " to negotiate." CR>)>
<RTRUE>>
<ROUTINE V-HAUL ()
<DEBUGGING? <RT-DEBUG-VERB "V-HAUL">>
<TELL "You're a doctor, not a sailor." CR>
<RTRUE>>
<ROUTINE V-HEAT ()
<DEBUGGING? <RT-DEBUG-VERB "V-HEAT">>
<RT-NO-POINT-MSG "Heating">>
<ROUTINE V-HELLO ()
<DEBUGGING? <RT-DEBUG-VERB "V-HELLO">>
<RT-HI-BYE-MSG>>
;<ROUTINE V-ASK-FOR-HELP ()
<DEBUGGING? <RT-DEBUG-VERB "V-ASK-FOR-HELP">>
<TELL "Wimp." CR>
<RTRUE>>
<ROUTINE V-HIDE ()
<DEBUGGING? <RT-DEBUG-VERB "V-HIDE">>
<TELL "You can run, but you cannot hide." CR>
<RTRUE>>
<ROUTINE V-HIT ()
<DEBUGGING? <RT-DEBUG-VERB "V-HIT">>
<TELL "Attacking " THEO>
<COND (<AND <MC-T? ,GL-PRSI>
<NOT <MC-PRSI? ,TH-HANDS>>>
<TELL " with " A ,GL-PRSI>)>
<TELL ,K-WONT-HELP-MSG CR>
<RTRUE>>
<ROUTINE V-HOLD-OVER ()
<DEBUGGING? <RT-DEBUG-VERB "V-HOLD-OVER">>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-HUSH ()
<DEBUGGING? <RT-DEBUG-VERB "V-HUSH">>
<TELL "Silence is golden." CR>
<RTRUE>>
<ROUTINE V-INHALE ()
<DEBUGGING? <RT-DEBUG-VERB "V-INHALE">>
<COND (<NOT <MC-PRSO? ,TH-BREATH ROOMS>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<MC-IS? ,TH-BREATH ,FL-LOCKED>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?BREATHE>
<V-EXHALE>
<RTRUE>)
(T
<TELL "You are already holding " THE ,TH-BREATH "." CR>
<RTRUE>)>)
(T
<TELL "You take a deep breath.">
<COND (<EQUAL? ,GL-PUPPY ,CH-HOLMES>
<TELL " " CTHE ,CH-HOLMES
" notices your action and surreptitiously does likewise.">)>
<CRLF>)>
<RT-ALARM-SET-REL ,RT-I-EXHALE <RT-PARM-SET 0 2 0>>
<MC-MAKE ,TH-BREATH ,FL-LOCKED>
<SETG GL-CLOCK-WAIT T>
<RTRUE>>
<ROUTINE V-KICK ()
<DEBUGGING? <RT-DEBUG-VERB "V-KICK">>
<RT-NO-POINT-MSG "Kicking">
<RTRUE>>
<ROUTINE V-KILL ()
<DEBUGGING? <RT-DEBUG-VERB "V-KILL">>
<TELL "Calm down." CR>
<RTRUE>>
<ROUTINE V-KISS ()
<DEBUGGING? <RT-DEBUG-VERB "V-KISS">>
<TELL "You really can't wait for the Victorian Era to end, can you?" CR>>
<ROUTINE V-KNOCK ()
<DEBUGGING? <RT-DEBUG-VERB "V-KNOCK">>
<COND (<MC-IS? ,GL-PRSO ,FL-DOOR>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-ITS-ALREADY-MSG "open">
<RTRUE>)>
<TELL "There's no answer." CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-PERFORM ,V?USE ,GL-PRSO>
<RTRUE>)>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-LEAP ()
<DEBUGGING? <RT-DEBUG-VERB "V-LEAP">>
<COND (<NOT <MC-PRSO? ,ROOMS>>
<TELL "No." CR>
<RTRUE>)
(T
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>)>
<RTRUE>>
<ROUTINE V-LIE-DOWN ()
<DEBUGGING? <RT-DEBUG-VERB "V-LIE-DOWN">>
<TELL "With so much at stake, resting is out of the question." CR>
<RTRUE>>
<ROUTINE V-LIGHT ("AUX" OBJ (FIX-LAMP? <>))
<COND (<AND <RT-META-IN? ,TH-LAMP ,GL-WINNER>
<FSET? ,TH-LAMP ,FL-LIGHTED>>
<SET FIX-LAMP? T>
<FCLEAR ,TH-LAMP ,FL-LIGHTED>)>
<COND (<AND <SET OBJ <RT-GET-WHAT-I-MEAN ,FL-LIGHTED <+ ,SH ,SC ,SHAVE>
,PR?WITH T T>>
<N==? .OBJ ,TH-LAMP>>
<COND (.FIX-LAMP? <FSET ,TH-LAMP ,FL-LIGHTED>)>
<TELL "[with " THE .OBJ "]" CR>
<RT-PERFORM ,V?LIGHT-WITH ,GL-PRSO .OBJ>
<RTRUE>)
(T
<COND (.FIX-LAMP? <FSET ,TH-LAMP ,FL-LIGHTED>)>
<PUT ,GL-P-ITBL ,K-P-PREP2 ,PR?WITH>
<RT-SYNTAX-CHECK>
<SETG GL-P-GOOD <>>
<RFATAL>)>>
<ROUTINE V-LIGHT-WITH ("AUX" OBJ)
<DEBUGGING? <RT-DEBUG-VERB "V-LIGHT-WITH">>
<COND (<MC-PRSI? ,TH-LAMP>
<COND (<MC-PRSI? GL-PRSO>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>
<RT-PERFORM ,V?SHINE-AT ,GL-PRSI ,GL-PRSO>
<RTRUE>)>
<V-BURN-WITH>
<RTRUE>>
<ROUTINE V-LISTEN ("AUX" (OBJ <>))
<DEBUGGING? <RT-DEBUG-VERB "V-LISTEN">>
<COND (<MC-PRSO? ,ROOMS>
<COND (<MC-IS? ,GL-PLACE-CUR ,RM-DIOGENES-CLUB>
<TELL CTHE ,CH-MEMBERS " are all asleep." CR>)
(<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<TELL "From afar you">)
(T
<TELL "You">)>
<TELL " hear the sounds of the ">
<COND (<IN? ,CH-PLAYER ,TH-BOAT>
<TELL "river ">)
(T
<TELL "city ">)>
<COND (<EQUAL? <RT-TIME-OF-DAY> 0>
<TELL "at night">)
(<EQUAL? <RT-TIME-OF-DAY> 1>
<TELL "waking up">)
(<EQUAL? <RT-TIME-OF-DAY> 2>
<TELL "going about its business">)
(<EQUAL? <RT-TIME-OF-DAY> 3>
<TELL "going to sleep">)>
<TELL "." CR>)
(<NOT <MC-PRSI? <> ,TH-STETHOSCOPE ,TH-EARS>>
<RT-CYOU-MSG>
<TELL "cannot listen to anything with " THEI "." CR>)
(<AND <MC-PRSI? ,TH-STETHOSCOPE>
<MC-ISNOT? ,TH-STETHOSCOPE ,FL-WORN>>
<TELL CTHEI " is not in " THE ,TH-EARS "." CR>)
(<AND <MC-IS? ,GL-PRSO ,FL-ALIVE>
<MC-PRSI? ,TH-STETHOSCOPE>>
<COND (<AND <MC-PRSO? ,CH-HOLMES>
<FSET? ,CH-HOLMES ,FL-ASLEEP>>
<TELL THEO " is suffering from a mental, not physical,
malaise." CR>)
(T
<TELL
"You don't need to. Your experienced eye tells you there
is nothing wrong with " THEO "." CR>)>)
(T
<TELL "At the moment, ">
<COND (<MC-PRSO? ,CH-PLAYER ,CH-ME>
<TELL "you">)
(T
<TELL THEO>)>
<RT-IS-ARE-MSG>
<TELL "silent." CR>
<SETG GL-LISTEN-OBJ ,GL-PRSO>)>
<RTRUE>>
<ROUTINE V-LOCK ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOCK">>
<COND (<OR <MC-IS? ,GL-PRSO ,FL-OPENABLE>
<MC-IS? ,GL-PRSO ,FL-CONTAINER>>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-YOUD-HAVE-TO-MSG "close" ,GL-PRSO>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-LOCKED>
<TELL CTHEO>
<RT-IS-ARE-MSG>
<TELL "already locked." CR>
<RTRUE>)
(T
<RT-THING-WONT-LOCK-MSG ,GL-PRSI ,GL-PRSO>)>)
(T
<RT-CANT-LOCK-MSG>)>
<RTRUE>>
;<ROUTINE V-LOO ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOO">>
<TELL "There isn't one nearby. You'll just have to wait." CR>
<RFATAL>>
<ROUTINE V-LOOK ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK">>
<RT-DESC-ALL <> T>
<RTRUE>>
<ROUTINE V-LOOK-BEHIND ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-BEHIND">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-IS? ,GL-PRSO ,FL-DOOR>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-CANT-SEE-MUCH-MSG>)
(T
<RT-ITS-CLOSED-MSG ,GL-PRSO>)>
<RTRUE>)
(T
<TELL "There's nothing behind " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-DOWN ("AUX" (X <>))
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-DOWN">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-PRSO? ,ROOMS>
;<SET X <GETP ,GL-PLACE-CUR ,P?LOOKDN>>
; "LOOKDN is only used once"
<COND (<MC-HERE? ,RM-CLOCK-TOWER>
<RT-PERFORM ,V?EXAMINE ,TH-SHAFT>)
(T
<RT-NOTHING-INTERESTING-MSG>
<TELL " down there." CR>)>
<RTRUE>)
(T
<TELL "You cannot look down " AO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-INSIDE ("AUX" ODF)
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-INSIDE">>
<COND (<MC-T? .ODF>
<COND (<MC-T? <APPLY .ODF>>
<RTRUE>)>)>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-YOURE-NOT-A-MSG "surgeon">
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-ALIVE>
<RT-YOURE-NOT-A-MSG "veterinarian">
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<COND (<AND
<MC-ISNOT? ,GL-PRSO ,FL-OPENED>
<MC-ISNOT? ,GL-PRSO ,FL-TRANSPARENT>>
<RT-YOUD-HAVE-TO-MSG "open" ,GL-PRSO>
<RTRUE>)
(T
<TELL "In " THEO " you see ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL "." CR>)>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-DOOR>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-CANT-SEE-MUCH-MSG>)
(T
<RT-ITS-CLOSED-MSG ,GL-PRSO>)>
<RTRUE>)
(T
<TELL "You cannot look inside " AO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-ON ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-ON">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-IS? ,GL-PRSO ,FL-SURFACE>
<TELL "On " THEO " you see ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL "." CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-READABLE>
<TELL CTHEO " has something written on it." CR>
<RTRUE>)
(T
<RT-NOTHING-INTERESTING-MSG>
<TELL " on " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-OUTSIDE ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-OUTSIDE">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-PRSO? ,ROOMS>
<COND (<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<RT-NOTHING-INTERESTING-MSG>
<TELL " outside." CR>)
(T
<TELL "You are outside." CR>)>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-DOOR>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-CANT-SEE-MUCH-MSG>)
(T
<RT-ITS-CLOSED-MSG ,GL-PRSO>)>
<RTRUE>)
(T
<TELL "You cannot look out of " AO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-THRU ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-THRU">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<AND <EQUAL? ,GL-P-PRSA-WORD ,W?EXAMINE ,W?X>
<MC-PRSI? ,TH-STETHOSCOPE>
<MC-IS? ,GL-PRSO ,FL-PERSON>>
<RT-PERFORM ,V?LISTEN ,GL-PRSO ,GL-PRSI>)
(<AND <MC-T? ,GL-PRSI>
<MC-ISNOT? ,GL-PRSI ,FL-TRANSPARENT>>
<TELL "You can't look through " THEI "." CR>
<RTRUE>)
(<AND <MC-T? ,GL-PRSI>
<MC-IS? ,GL-PRSI ,FL-TRANSPARENT>>
<RT-NOTHING-INTERESTING-MSG>
<TELL " through " THEI "." CR>
<RTRUE>)
(T
<RT-NOTHING-INTERESTING-MSG>
<TELL "at all." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-THRU-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-THRU-SWP">>
<RETURN <RT-PERFORM ,V?LOOK-THRU ,GL-PRSI ,GL-PRSO>>>
<ROUTINE V-LOOK-UNDER ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-UNDER">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<IN? ,GL-PRSO ,CH-PLAYER>
<TELL "You are already ">
<COND (<MC-IS? ,GL-PRSO ,FL-WORN>
<TELL "wearing">)
(T
<TELL "holding">)>
<TELL " that." CR>
<RTRUE>)
(T
<RT-NOTHING-INTERESTING-MSG>
<TELL " under " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOK-UP ("AUX" (X <>))
<DEBUGGING? <RT-DEBUG-VERB "V-LOOK-UP">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<MC-PRSO? ,ROOMS>
<COND (<FSET? ,GL-PLACE-CUR ,FL-INDOORS>
<PUTP ,TH-FLOOR-ETC ,P?OBJ-NOUN ,W?CEILING>
<RT-PERFORM ,V?EXAMINE ,TH-FLOOR-ETC>
<RTRUE>)>
<RT-NOTHING-INTERESTING-MSG>
<TELL " up there." CR>
<RTRUE>)
(T
<TELL "You cannot look up " AO "." CR>
<RTRUE>)>>
<ROUTINE V-LOOSEN ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOOSEN">>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-LOWER ()
<DEBUGGING? <RT-DEBUG-VERB "V-LOWER">>
<COND (<MC-PRSO? ,ROOMS>
<RT-DO-WALK ,P?DOWN>
<RTRUE>)
(T
<V-RAISE>)>
<RTRUE>>
<ROUTINE V-LAND ()
<DEBUGGING? <RT-DEBUG-VERB "V-LAND">>
<COND (<MC-PRSO? ,ROOMS>
<COND (<IN? ,CH-PLAYER ,TH-BOAT>
<RT-LAND-BOAT>)
(T
<TELL "Very good. Next week, we'll learn the word for
water." CR>)>
<RTRUE>)
(<MC-PRSO? ,TH-BOAT>
<COND (<IN? ,CH-PLAYER ,TH-BOAT>
<RT-LAND-BOAT>)
(T
<TELL ,K-MUST-BE-IN-BOAT-MSG "land it." CR>)>)
(T
<TELL "You can't land " THEO "!" CR>)>
<RTRUE>>
<ROUTINE RT-LAND-BOAT ()
<COND (<IN? ,TH-BOAT ,RM-THE-EMBANKMENT>
<TELL "The boat is already on the Embankment." CR>)
(<IN? ,TH-BOAT ,RM-OUTSIDE-TRAITORS-GATE>
<TELL "The boat is already at Traitors Gate." CR>)
(<NOT <IN? ,TH-ANCHOR ,TH-BOAT>>
<TELL
"You can't land the boat. The anchor seems to be doing its job." CR>)
(<IN? ,TH-BOAT ,RM-THAMES-ONE>
<IFSOUND <SOUNDS ,S-BOATING ,S-STOP>>
<TELL "You land the boat on the Embankment." CR>
<MOVE ,TH-BOAT ,RM-THE-EMBANKMENT>
<RT-ALARM-CLR ,RT-I-MOVE-DOWNSTREAM>)
(<IN? ,TH-BOAT ,RM-THAMES-FOUR>
<IFSOUND <SOUNDS ,S-BOATING ,S-STOP>>
<TELL "You land the boat outside Traitors Gate." CR>
<MOVE ,TH-BOAT ,RM-OUTSIDE-TRAITORS-GATE>
<RT-ALARM-CLR ,RT-I-MOVE-DOWNSTREAM>)
(T
<TELL
"There doesn't seem to be any place to land the boat." CR>
<RT-ALARM-CLR ,RT-I-MOVE-DOWNSTREAM>)>
<RTRUE>>
<ROUTINE V-LAMP-OFF ()
<DEBUGGING? <RT-DEBUG-VERB "V-LAMP-OFF">>
<V-LAMP-ON T>
<RTRUE>>
<ROUTINE V-LAMP-ON ("OPTIONAL" (OFF? <>))
<DEBUGGING? <RT-DEBUG-VERB "V-LAMP-ON">>
<RT-CYOU-MSG>
<TELL "couldn't ">
<COND (<==? ,GL-P-PRSA-WORD ,W?EXTINGUISH>
<TELL "extinguish">)
(T
<TELL VW>)>
<TELL " that">
<COND (<AND .OFF?
<MC-VERB-WORD? CLOSE SHUT TURN>>
<TELL " off">)
(<AND .OFF?
<MC-VERB-WORD? BLOW PUT>>
<TELL " out">)
(<AND <NOT .OFF?>
<MC-VERB-WORD? TURN>>
<TELL " on">)>
<COND (<NOT <EQUAL? ,GL-PRSI <> ,TH-HANDS>>
<TELL ", " D ,GL-PRSI " or no " D ,GL-PRSI>)>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-LAUNCH ()
<DEBUGGING? <RT-DEBUG-VERB "V-LAUNCH">>
<COND (<MC-PRSO? ,ROOMS>
<COND (<OR <IN? ,CH-PLAYER ,TH-BOAT>
<EQUAL? <LOC ,CH-PLAYER> <LOC ,TH-BOAT>>>
<RT-LAUNCH-BOAT>)
(T
<TELL
"That usually works better when one is in a boat." CR>)>
<RTRUE>)
(<MC-PRSO? ,TH-BOAT>
<RT-LAUNCH-BOAT>)
(T
<TELL
"You can't launch " THEO ". Perhaps you meant to throw it?" CR>)>
<RTRUE>>
<ROUTINE RT-LAUNCH-BOAT ()
<COND (<NOT <IN? ,TH-ANCHOR ,TH-BOAT>>
<RT-THIS-IS-IT ,TH-ANCHOR>
<TELL "The anchor is restraining the boat." CR>)
(<NOT <IN? ,CH-PLAYER ,TH-BOAT>>
<TELL
"You push the boat into the Thames, and then watch as it slowly floats
away. Too bad you weren't in it." CR>
<REMOVE ,TH-BOAT>)
(<IN? ,TH-BOAT ,RM-THE-EMBANKMENT>
<TELL
"The boat slips away from the Embankment. You are now in the middle of
the Thames." CR>
<IFSOUND <SOUNDS ,S-BOATING ,S-START>>
<MOVE ,TH-BOAT ,RM-THAMES-ONE>)
(<IN? ,TH-BOAT ,RM-OUTSIDE-TRAITORS-GATE>
<TELL "The boat slips out into the river." CR>
<IFSOUND <SOUNDS ,S-BOATING ,S-START>>
<MOVE ,TH-BOAT ,RM-THAMES-FOUR>)
(T
<TELL "You are already on the Thames. You don't need to
launch the boat again." CR>)>
<RTRUE>>
<ROUTINE V-MAKE ()
<DEBUGGING? <RT-DEBUG-VERB "V-MAKE">>
<COND (<MC-PRSO? ,TH-RUBBINGS>
<TELL
"[To make a rubbing, put a blank piece of paper on a tomb, and then rub
the paper with the crayon.]" CR>
<RFATAL>)
(T
<TELL ,K-HOW-TO-MSG CR>)>
<RTRUE>>
<ROUTINE V-ECHO ;V-MARX ()
<DEBUGGING? <RT-DEBUG-VERB "V-ECHO">>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?MARX>
<TELL "Cocoanuts." CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?CHICO>
<TELL
"\"Wattsa matta you? You needa de password? I sell it you.\"" CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?GROUCHO>
<TELL
"\"Say the secret woid, and the guy will let you in.\"" CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?GUMMO>
<TELL "This isn't a trivia game. Get back to work." CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?HARPO>
<CRLF>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?ZEPPO>
<TELL
"Did you really think saying \"Zeppo\" was going to get you anywhere?" CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?PUNT>
<TELL
"But it's not even fourth down!" CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?HUM ,W?WHISTLE ,W?SING>
<TELL
"You " VW " tunelessly for a few moments until you remember that
you're tone deaf and know next to nothing about music." CR>)
(<EQUAL? ,GL-P-PRSA-WORD ,W?ECHO>
<TELL "ECHO...Echo...echo...." CR>)>>
<ROUTINE V-MELT ()
<DEBUGGING? <RT-DEBUG-VERB "V-MELT">>
<TELL ,K-HOW-TO-MSG CR>
<RTRUE>>
<ROUTINE V-MOVE ()
<DEBUGGING? <RT-DEBUG-VERB "V-MOVE">>
<COND (<MC-PRSO? ,ROOMS>
<V-WALK-AROUND>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-TAKEABLE>
<TELL "Moving " THEO " would" <RT-PICK-NEXT ,GL-NO-POINT-TXT> "." CR>
<RTRUE>)
(T
<TELL "You cannot possibly move " THEO "." CR>)>
<RTRUE>>
<ROUTINE V-MUNG ()
<DEBUGGING? <RT-DEBUG-VERB "V-MUNG">>
<RT-NO-POINT-MSG "Trying to destroy">
<RTRUE>
>
<ROUTINE V-OPEN ()
<DEBUGGING? <RT-DEBUG-VERB "V-OPEN">>
<COND (<MC-ISNOT? ,GL-PRSO ,FL-OPENABLE>
<RT-CANT-OPEN-PRSO-MSG>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-ITS-ALREADY-MSG "open">
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-LOCKED>
<RT-OBJECT-IS-LOCKED-MSG>
<RTRUE>)
(T
<RT-YOU-OPEN-MSG>
<COND (<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL "It is too dark to see inside." CR>)
(T
<TELL "Inside you see ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL "." CR>)>)>)>
<RTRUE>>
<ROUTINE V-OPEN-WITH ()
<DEBUGGING? <RT-DEBUG-VERB "V-OPEN-WITH">>
<COND (<NOT <MC-IS? ,GL-PRSO ,FL-OPENABLE>>
<RT-CANT-OPEN-PRSO-MSG>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-ITS-ALREADY-MSG "open">
<RTRUE>)>
<RT-CYOU-MSG>
<TELL "cannot " VW " " THEO " with " THEI "." CR>
<RTRUE>>
<ROUTINE V-PADDLE ()
<DEBUGGING? <RT-DEBUG-VERB "V-PADDLE">>
<COND (<IN? ,GL-WINNER ,TH-BOAT>
<COND (<MC-PRSO? ,TH-BOAT ,TH-INTDIR>
<TELL ,K-BETTER-SUCCESS-MSG CR>)
(T
<V-HIT>)>)
(<MC-PRSO? ,TH-INTDIR>
<RT-CYOU-MSG "are" "is">
<TELL "not in a boat." CR>)
(T
<V-HIT>)>>
<ROUTINE V-PADDLE-WITH ()
<DEBUGGING? <RT-DEBUG-VERB "V-PADDLE-WITH">>
<COND (<MC-PRSI? ,TH-VIOLIN>
<TELL
"How could you even THINK of using such a beautiful instrument in such a
manner?" CR>)
(<IN? ,GL-WINNER ,TH-BOAT>
<COND (<MC-PRSO? ,TH-INTDIR>
<RT-CYOU-MSG "are" "is">
<TELL "not in a boat." CR>)
(T
<TELL ,K-BETTER-SUCCESS-MSG CR>)>)
(<MC-PRSO? ,TH-INTDIR>
<RT-CYOU-MSG>
<TELL "can't paddle anywhere with " THEI "." CR>)
(T
<V-HIT>)>>
<ROUTINE V-PASSWORD ("AUX" WRD)
<DEBUGGING? <RT-DEBUG-VERB "V-PASSWORD">>
<SET WRD <GET ,GL-P-NAMW 0>>
<COND (<EQUAL? .WRD ,W?SWORDFISH>
<RT-PERFORM ,V?SWORDFISH>)
(<EQUAL? .WRD ,W?PARR>
<RT-PERFORM ,V?PARR>)
(<EQUAL? .WRD ,W?CLEVES>
<RT-PERFORM ,V?CLEVES>)
(<EQUAL? .WRD ,W?ARAGON>
<RT-PERFORM ,V?ARAGON>)
(<EQUAL? .WRD ,W?HOWARD>
<RT-PERFORM ,V?HOWARD>)
(<EQUAL? .WRD ,W?SEYMOUR>
<RT-PERFORM ,V?SEYMOUR>)
(<EQUAL? .WRD ,W?BOLEYN>
<RT-PERFORM ,V?BOLEYN>)
(<EQUAL? .WRD ,W?GIN>
<RT-PERFORM ,V?GIN>)
(T
<TELL "\"No, it isn't.\"" CR>)>>
<ROUTINE V-PAY ()
<DEBUGGING? <RT-DEBUG-VERB "V-PAY">>
<RT-PERFORM ,V?GIVE ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-PICK ()
<DEBUGGING? <RT-DEBUG-VERB "V-PICK">>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENABLE>
<RT-YOURE-NOT-A-MSG "locksmith">)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-PLAY ()
<DEBUGGING? <RT-DEBUG-VERB "V-PLAY">>
<COND (<MC-PRSO? ,ROOMS>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>)
(T
<RT-NO-POINT-MSG "Playing with">)>
<RTRUE>>
<ROUTINE V-PLUG ()
<DEBUGGING? <RT-DEBUG-VERB "V-PLUG">>
<RT-CYOU-MSG>
<TELL "cannot ">
<PRINTB ,GL-P-PRSA-WORD>
<TELL " " THEO " into ">
<COND (<MC-T? ,GL-PRSI>
<TELL THEI>)
(T
<TELL "anything">)>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-POCKET ()
<DEBUGGING? <RT-DEBUG-VERB "V-POCKET">>
<RT-PERFORM ,V?PUT ,GL-PRSO ,TH-POCKET>
<RTRUE>>
<ROUTINE V-POINT ()
<DEBUGGING? <RT-DEBUG-VERB "V-POINT">>
<RT-NO-POINT-MSG "Pointing at">
<RTRUE>>
<ROUTINE V-POINT-AT ()
<DEBUGGING? <RT-DEBUG-VERB "V-POINT-AT">>
<RT-NO-POINT-MSG "Pointing">
<RTRUE>>
<ROUTINE V-POINT-AT-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-POINT-AT-SWP">>
<RT-NO-POINT-MSG "Pointing">
<RFATAL>>
<ROUTINE V-POUR ()
<DEBUGGING? <RT-DEBUG-VERB "V-POINT">>
<COND (<MC-PRSO? ,TH-HANDS>
<TELL "[To do that, just DROP EVERYTHING.]" CR>
<RFATAL>)
(<MC-PRSO? ,TH-POCKET>
<RT-YOUD-HAVE-TO-MSG "take off" ,TH-CLOTHES>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-SURFACE>
<RT-EMPTY-PRSO-MSG <>>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<RT-EMPTY-PRSO-MSG <>>
<RTRUE>)>
<RT-ITS-CLOSED-MSG>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot empty ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>)>
<RTRUE>>
<ROUTINE V-POUR-FROM ()
<DEBUGGING? <RT-DEBUG-VERB "V-POUR-FROM">>
<COND (<MC-PRSI? ,TH-HANDS>
<RT-PERFORM ,V?DROP ,GL-PRSO>
<RTRUE>)
(<MC-PRSI? ,TH-POCKET>
<RT-YOUD-HAVE-TO-MSG "take off" ,TH-CLOTHES>
<RTRUE>)
(<AND <NOT <MC-IS? ,GL-PRSI ,FL-CONTAINER>>
<NOT <MC-IS? ,GL-PRSI ,FL-SURFACE>>>
<TELL "You cannot">
<PRINTB ,GL-P-PRSA-WORD>
<TELL " things from " A ,GL-PRSI "." CR>
<RTRUE>)
(<AND <MC-IS? ,GL-PRSI ,FL-CONTAINER>
<NOT <MC-IS? ,GL-PRSI ,FL-OPENED>>>
<RT-ITS-CLOSED-MSG ,GL-PRSI>
<RTRUE>)
(<IN? ,GL-PRSO ,GL-PRSI>
<COND (<MC-IS? ,GL-PRSO ,FL-TAKEABLE>
<TELL CTHEO " ">
<RT-LANDS-AT-YOUR-FEET-MSG>
<RTRUE>)>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(T
<TELL CTHEO>
<RT-ISNT-ARENT-MSG ,GL-PRSO>
<TELL "in " THEI "." CR>)>
<RTRUE>>
<ROUTINE V-PRAY ()
<DEBUGGING? <RT-DEBUG-VERB "V-PRAY">>
<TELL "Good idea. You could use the help." CR>
<RTRUE>>
<ROUTINE V-PULL ()
<DEBUGGING? <RT-DEBUG-VERB "V-PULL">>
<RT-NO-POINT-MSG "Pulling on">
<RTRUE>>
<ROUTINE V-PUSH ()
<DEBUGGING? <RT-DEBUG-VERB "V-PUSH">>
<RT-NO-POINT-MSG "Pushing around">
<RTRUE>>
<ROUTINE V-PUSH-TO ()
<DEBUGGING? <RT-DEBUG-VERB "V-PUSH-TO">>
<COND (<AND <MC-PRSO? ,TH-HANDS>
<MC-T? ,GL-PRSI>>
<RT-PERFORM ,V?REACH-IN ,GL-PRSI>
<RTRUE>)>
<RT-CYOU-MSG>
<TELL "cannot push " THEO " around like that." CR>
<RTRUE>>
<ROUTINE V-PUT ("AUX" L WRD)
<DEBUGGING? <RT-DEBUG-VERB "V-PUT">>
<SET L <LOC ,GL-PRSO>>
<COND (<EQUAL? .L ,GLOBAL-OBJECTS>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>)
(<MC-IS? ,GL-PRSO ,FL-BODYPART>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<AND <OR <RT-IDENTIFY-FLOOR? ,W?FLOOR ,GL-PRSI>
<RT-IDENTIFY-FLOOR? ,W?GROUND ,GL-PRSI>>>
<MOVE ,GL-PRSO ,GL-PLACE-CUR>
<COND (<MC-T? ,GL-P-MULT?>
<TELL "Done." CR>)
(T
<RT-CYOU-MSG "put" "puts">
<TELL THEO>
<RT-IN-ON-MSG ,GL-PRSI>
<TELL THEI "." CR>)>
<RTRUE>)
(<OR <MC-F? .L>
<AND <MC-T? ,GL-PRSI>
<MC-ISNOT? ,GL-PRSI ,FL-SURFACE>
<MC-ISNOT? ,GL-PRSI ,FL-CONTAINER>
<MC-ISNOT? ,GL-PRSI ,FL-OPENED>
<MC-ISNOT? ,GL-PRSI ,FL-OPENABLE>>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<AND <MC-ISNOT? ,GL-PRSI ,FL-OPENED>
<MC-ISNOT? ,GL-PRSI ,FL-SURFACE>>
<TELL CTHEI>
<RT-ISNT-ARENT-MSG ,GL-PRSI>
<TELL "open." CR>
<RTRUE>)
(<RT-ROOM-IN-ON-MSG? ,GL-PRSO ,GL-PRSI> T)
(<NOT <EQUAL? .L ,GL-WINNER>>
<TELL "Maybe">
<RT-YOU-MSG>
<TELL "should take " THEO>
<RT-OUT-OFF-MSG .L>
<TELL THE .L " first." CR>
<RTRUE>)
(T
<MOVE ,GL-PRSO ,GL-PRSI>
<MC-MAKE ,GL-PRSO ,FL-TOUCHED>
<COND (<AND <MC-IS? ,GL-PRSI ,FL-CONTAINER>
<RT-PUT-OUT ,GL-PRSO>>
<RTRUE>)
(<MC-T? ,GL-P-MULT?>
<TELL "Done." CR>)
(T
<RT-CYOU-MSG "put" "puts">
<TELL THEO>
<RT-IN-ON-MSG ,GL-PRSI>
<TELL THEI "." CR>)>)>>
<ROUTINE V-PUT-BEHIND ()
<DEBUGGING? <RT-DEBUG-VERB "V-PUT-BEHIND">>
<TELL "That hiding place is too obvious." CR>
<RTRUE>>
<ROUTINE V-PUT-ON ()
<DEBUGGING? <RT-DEBUG-VERB "V-PUT-ON">>
<COND (<MC-PRSI? ,CH-ME ,CH-PLAYER>
<RT-PERFORM ,V?WEAR ,GL-PRSO>
<RTRUE>)>
<V-PUT>
<RTRUE>>
<ROUTINE V-PUT-UNDER ()
<DEBUGGING? <RT-DEBUG-VERB "V-PUT-UNDER">>
<RT-CYOU-MSG>
<TELL "cannot put anything under ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-QUESTION ()
<DEBUGGING? <RT-DEBUG-VERB "V-QUESTION">>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<RT-TO-DO-THING-USE-MSG "ask about" "ASK CHARACTER ABOUT">
<RFATAL>)>
<RT-NO-RESPONSE-MSG>
<RTRUE>>
<ROUTINE V-RAISE ()
<DEBUGGING? <RT-DEBUG-VERB "V-RAISE">>
<COND (<MC-PRSO? ,ROOMS>
<V-STAND>
<RTRUE>)
(T
<RT-NO-POINT-MSG "Toying in this way with">)>
<RTRUE>>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<DEBUGGING? <RT-DEBUG-VERB "V-REACH-IN">>
<SET OBJ <FIRST? ,GL-PRSO>>
<COND (<OR <MC-IS? ,GL-PRSO ,FL-PERSON>
<MC-IS? ,GL-PRSO ,FL-ALIVE>>
<RT-YOURE-NOT-A-MSG "surgeon">
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-DOOR>
<COND (<MC-IS? ,GL-PRSO ,FL-OPENED>
<TELL "You reach into " THEO ", but experience nothing "
<RT-PICK-NEXT ,GL-BORING-TXT> "." CR>
<RTRUE>)>
<RT-ITS-CLOSED-MSG>
<RTRUE>)
(<NOT <MC-IS? ,GL-PRSO ,FL-CONTAINER>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<NOT <MC-IS? ,GL-PRSO ,FL-OPENED>>
<TELL "It's not open." CR>
<RTRUE>)
(<OR <MC-F? .OBJ>
<NOT <MC-IS? .OBJ ,FL-TAKEABLE>>>
<COND (<AND <MC-IS? ,GL-PRSO ,FL-PLURAL>
<MC-ISNOT? ,GL-PRSO ,FL-COLLECTIVE>>
<TELL "They're">)
(T
<TELL "It's">)>
<TELL " empty." CR>
<RTRUE>)
(T
<SETG GL-P-IT-OBJECT .OBJ>
<TELL "You ">
<COND (<MC-PRSO? ,TH-EARS>
<TELL "put your hands to ">)
(T
<TELL "reach into ">)>
<TELL THEO ". There's something in there." CR>)>
<RTRUE>>
<ROUTINE V-READ ()
<DEBUGGING? <RT-DEBUG-VERB "V-READ">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<NOT <MC-IS? ,GL-PRSO ,FL-READABLE>>
<RT-HOW-READ-MSG>
<TELL "?" CR>
<RTRUE>)
(T
<TELL "There's nothing written on it." CR>)>
<RTRUE>>
<ROUTINE V-READ-TO ()
<DEBUGGING? <RT-DEBUG-VERB "V-READ-TO">>
<COND (<MC-F? ,GL-NOW-LIT?>
<TELL ,K-TOO-DARK-MSG CR>
<RFATAL>)
(<NOT <MC-IS? ,GL-PRSO ,FL-READABLE>>
<RT-HOW-READ-MSG>
<TELL " to " A ,GL-PRSI "?" CR>
<RTRUE>)
(<EQUAL? ,GL-WINNER ,CH-PLAYER>
<RT-NOT-LIKELY-MSG ,GL-PRSI "would appreciate your reading">
<RTRUE>)
(T
<TELL "Maybe you ought to do it." CR>)>
<RTRUE>>
<ROUTINE V-READ-TO-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-READ-TO-SWP">>
<RT-PERFORM ,V?READ-TO ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-REFUSE ()
<DEBUGGING? <RT-DEBUG-VERB "V-REFUSE">>
<COND (<NOT <MC-IS? ,GL-PRSO ,FL-TAKEABLE>>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>)>
<TELL "How could you turn down such a tempting " D ,GL-PRSO "?" CR>
<RTRUE>>
<ROUTINE V-RELEASE ()
<DEBUGGING? <RT-DEBUG-VERB "V-RELEASE">>
<COND (<IN? ,GL-PRSO ,GL-WINNER>
<RT-PERFORM ,V?DROP ,GL-PRSO>
<RTRUE>)
(T
<COND (<MC-PRSO? ,CH-ME ,CH-PLAYER>
<TELL "You aren't ">)
(T
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>)>
<TELL "confined by anything." CR>)>
<RTRUE>>
<ROUTINE V-REPAIR ()
<DEBUGGING? <RT-DEBUG-VERB "V-REPAIR">>
<COND (<AND <MC-PRSO? ,TH-LAMP ,TH-ETHERIUM-AMPOULE>
<MC-IS? ,GL-PRSO ,FL-BROKEN>>
<TELL CTHEO " is hopelessly beyond repair." CR>
<RTRUE>)
(<MC-PRSO? ,CH-ME ,CH-PLAYER>
<TELL "You aren't ">)
(T
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>)>
<TELL "in need of repair." CR>
<RTRUE>>
<ROUTINE V-REPLACE ()
<DEBUGGING? <RT-DEBUG-VERB "V-REPLACE">>
<COND (<MC-PRSO? ,CH-ME ,CH-PLAYER>
<TELL "Easily done." CR>
<RTRUE>)
(T
<TELL CTHEO>
<RT-DONT-DOESNT-MSG ,GL-PRSO>
<TELL "need replacement." CR>)>
<RTRUE>>
<ROUTINE V-REPLY ("AUX" WHO)
<DEBUGGING? <RT-DEBUG-VERB "V-REPLY">>
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RFATAL>)>
<RT-NO-RESPONSE-MSG>
<RTRUE>>
<ROUTINE V-RESCUE ()
<DEBUGGING? <RT-DEBUG-VERB "V-RESCUE">>
<COND (<MC-PRSO? ,CH-ME ,CH-PLAYER>
<COND
(<EQUAL? ,GL-WINNER ,CH-PLAYER>
<V-HINT>
<RTRUE>)>
<TELL ,K-HOW-TO-MSG CR>
<RTRUE>)>
<TELL CTHEO>
<RT-DONT-DOESNT-MSG ,GL-PRSO>
<TELL "need any help." CR>
<RTRUE>>
<ROUTINE V-RIDE ()
<DEBUGGING? <RT-DEBUG-VERB "V-RIDE">>
<COND (<MC-IS? ,GL-PRSO ,FL-ALIVE>
<RT-NOT-LIKELY-MSG ,GL-PRSO "wants to play piggyback">
<RTRUE>)
(T
<TELL "You cannot ride that." CR>)>
<RTRUE>>
<ROUTINE V-RING ()
<DEBUGGING? <RT-DEBUG-VERB "V-RING">>
<COND (<MC-PRSO? ,TH-BELL>
<COND
(<RT-ALARM-SET? ,RT-I-SWING-BELL>
<TELL "The bell is already ringing." CR>)
(T
<TELL "The bell is too heavy for you to move,
but your effort makes it vibrate softly." CR>)>)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-RIP ()
<DEBUGGING? <RT-DEBUG-VERB "V-RIP">>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-ROB ()
<DEBUGGING? <RT-DEBUG-VERB "V-ROB">>
<RT-PERFORM ,V?STEAL ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-ROW ()
<DEBUGGING? <RT-DEBUG-VERB "V-ROW">>
<COND (<IN? ,CH-PLAYER ,TH-BOAT>
<TELL "You'd have better success if you launched the boat first."
CR>)
(<MC-PRSO? ,TH-INTDIR>
<RT-CYOU-MSG "are" "is">
<TELL "not in a boat." CR>)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-RUB-WITH ()
<DEBUGGING? <RT-DEBUG-VERB "V-RUB-WITH">>
<RT-NO-POINT-MSG "Rubbing">
<RTRUE>>
<ROUTINE V-SAY ("AUX" WRD)
<DEBUGGING? <RT-DEBUG-VERB "V-SAY">>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<COND (<RT-ANYONE-HERE?>
<SET WRD <GET ,GL-P-NAMW 0>>
<COND
(<EQUAL? .WRD ,W?SWORDFISH>
<RT-PERFORM ,V?SWORDFISH>)
(<EQUAL? .WRD ,W?PARR>
<RT-PERFORM ,V?PARR>)
(<EQUAL? .WRD ,W?CLEVES>
<RT-PERFORM ,V?CLEVES>)
(<EQUAL? .WRD ,W?ARAGON>
<RT-PERFORM ,V?ARAGON>)
(<EQUAL? .WRD ,W?HOWARD>
<RT-PERFORM ,V?HOWARD>)
(<EQUAL? .WRD ,W?SEYMOUR>
<RT-PERFORM ,V?SEYMOUR>)
(<EQUAL? .WRD ,W?BOLEYN>
<RT-PERFORM ,V?BOLEYN>)
(<EQUAL? .WRD ,W?GIN>
<RT-PERFORM ,V?GIN>)
(T
<RT-WAY-TO-TALK-MSG>)>
<RTRUE>)>
<RT-TALK-TO-SELF-MSG>
<RTRUE>)>
<RT-NO-RESPONSE-MSG>
<RTRUE>>
<ROUTINE V-SEARCH ()
<DEBUGGING? <RT-DEBUG-VERB "V-SEARCH">>
<COND (<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<COND (<AND <NOT <MC-IS? ,GL-PRSO ,FL-OPENED>>
<NOT <MC-IS? ,GL-PRSO ,FL-TRANSPARENT>>>
<RT-YOUD-HAVE-TO-MSG "open" ,GL-PRSO>
<RTRUE>)
(T
<TELL "You see ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL " inside " THEO "." CR>)>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-SURFACE>
<TELL "You see ">
<RT-PRINT-CONTENTS-2 ,GL-PRSO>
<TELL " on " THEO "." CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-PERFORM ,V?USE ,GL-PRSO>
<RTRUE>)
(T
<RT-NOTHING-INTERESTING-MSG>
<TELL "." CR>)>
<RTRUE>>
<ROUTINE V-SELL ()
<DEBUGGING? <RT-DEBUG-VERB "V-SELL">>
<COND (<NOT <EQUAL? ,GL-WINNER ,CH-PLAYER>>
<RT-NOT-LIKELY-MSG ,GL-WINNER "is interested in selling anything">
<RTRUE>)
(<MC-PRSI? ,GL-PRSO ,CH-ME ,CH-PLAYER ,GL-WINNER>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<NOT <MC-IS? ,GL-PRSI ,FL-PERSON>>
<RT-NOT-LIKELY-MSG ,GL-PRSI "would buy anything">
<RTRUE>)>
<RT-YOURE-NOT-A-MSG "salesperson">
<RTRUE>>
<ROUTINE V-SELL-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-SELL-SWP">>
<RT-PERFORM ,V?SELL ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-SHAKE ("AUX" X)
<DEBUGGING? <RT-DEBUG-VERB "V-SHAKE">>
<COND (<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-PERFORM ,V?ALARM ,GL-PRSO>)
(<AND <NOT <MC-IS? ,GL-PRSO ,FL-TAKEABLE>>
<NOT <MC-IS? ,GL-PRSO ,FL-TRYTAKE>>>
<RT-NO-POINT-MSG "Shaking">)
(T
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>)>
<RTRUE>>
<ROUTINE V-SHINE-AT ()
<DEBUGGING? <RT-DEBUG-VERB "V-SHINE-AT">>
<TELL "You cannot illuminate anything with " A ,GL-PRSO "." CR>
<RTRUE>>
<ROUTINE V-SHINE-AT-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-SHINE-AT-SWP">>
<RT-PERFORM ,V?SHINE-AT ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-SHOOT ("AUX" NUM)
<DEBUGGING? <RT-DEBUG-VERB "V-SHOOT">>
<COND (<MC-PRSO? ,TH-GUN>
<TELL "BANG!! The bullet barely misses your foot." CR>
<RTRUE>)
(<OR <MC-IS? ,GL-PRSO ,FL-PERSON>
<==? ,GL-PRSO ,TH-GENERIC-BODY>>
<COND (<FSET? ,GL-PRSO ,FL-NEEDS-IDENTITY>
<PUTP ,GL-PRSO ,P?OBJ-NOUN 0>
<PUTP ,GL-PRSO ,P?OBJ-ADJ 0>)>
<TELL "You shoot ">
<COND (<N==? ,GL-PRSO ,TH-GENERIC-BODY>
<TELL "and kill ">)>
<TELL THE ,GL-PRSO ". Inspector Lestrade ">
<COND (<IN? ,CH-PLAYER ,TH-BOAT>
<TELL "pulls up alongside you in a Scotland Yard launch">)
(T
<TELL "appears out of nowhere">)>
<TELL " and says,">
<COND (<MC-PRSO? ,CH-HOLMES>
<TELL ,K-PLUG-HIM-MYSELF-MSG>)
(T
<TELL
" \"You may be on our side, doctor, but killing people is still against
the law. I'm afraid I'm going to have to arrest you.\"">)>
<TELL CR CR ,K-LESTRADE-ARRESTS-MSG CR CR>
<RT-QSR>)
(<MC-PRSO? ,TH-SAPPHIRE ,TH-EMERALD ,TH-OPAL
,TH-RUBY ,TH-TOPAZ ,TH-GARNET>
<REMOVE ,GL-PRSO>
<TELL "You shoot " THEO ", which shatters and disappears." CR>)
(<MC-PRSO? ,TH-CROWN-JEWELS>
<TELL
"The jewels shatter and Holmes throws up his arms in exasperation.
\"That's it, Watson. You have pushed me to the limit.\" He leaps for
your throat, and the ensuing struggle attracts the attention of the
local constabulary, with what should by now be predictable results." CR CR>
<RT-QSR>)
(<OR <MC-PRSO? ,TH-SHAFT>
<AND <MC-PRSO? ,PSEUDO-OBJECT>
<==? <GETP ,PSEUDO-OBJECT ,P?ACTION>
,RT-AC-TH-FIREPLACE>>>
<TELL "The bullet disappears into " THEO "." CR>)
(<OR <MC-PRSO? ,TH-INTNUM ,TH-INTDIR>
<IN? ,GL-PRSO ,ROOMS>>
<RT-IMPOSSIBLE-MSG>)
(<MC-IS? ,GL-PRSO ,FL-PLURAL>
<TELL "There are so many of them, you don't know where to begin." CR>)
(<MC-IS? ,GL-PRSO ,FL-MONEY>
<TELL
"You take aim at " THEO ", but your frugal nature prevents you from going
through with it." CR>)
(T
<SET NUM <GET ,GL-HOLES 0>>
<PUT ,GL-HOLES <+ <* .NUM 2> 1> ,GL-PRSO>
<COND (<EQUAL? <LOC ,GL-PRSO> ,LOCAL-GLOBALS ,ROOMS
,GLOBAL-OBJECTS>
<PUT ,GL-HOLES <+ <* .NUM 2> 2> ,GL-PLACE-CUR>)>
<PUT ,GL-HOLES 0 <+ .NUM 1>>
<TELL "The bullet puts a neat hole in " THEO "." CR>)>>
<ROUTINE V-SHOOT-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-SHOOT-SWP">>
<RT-PERFORM ,V?SHOOT ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-SHOW ()
<DEBUGGING? <RT-DEBUG-VERB "V-SHOW">>
<COND (<MC-IS? ,GL-PRSI ,FL-ASLEEP>
<TELL CTHEI>
<RT-IS-ARE-MSG ,GL-PRSI>
<TELL
"in no condition to appreciate " THEO "." CR>)
(<MC-PRSI? ,CH-ME ,CH-PLAYER>
<RT-PERFORM ,V?EXAMINE ,GL-PRSO>)
(T
<TELL CTHEI " glance">
<RT-S-NOS-MSG ,GL-PRSI>
<TELL " at " THEO ", but makes no comment." CR>)>
<RTRUE>>
<ROUTINE V-SHOW-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-SHOW-SWP">>
<RT-PERFORM ,V?SHOW ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-SIT ()
<DEBUGGING? <RT-DEBUG-VERB "V-SIT">>
<COND (<OR <RT-IDENTIFY-FLOOR? ,W?GROUND ,GL-PRSO>
<RT-IDENTIFY-FLOOR? ,W?FLOOR ,GL-PRSO>
<MC-PRSO? ,ROOMS>
<MC-IS? ,GL-PRSO ,FL-SURFACE>>
<TELL ,K-NO-RESTING-MSG CR>)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-SMELL ("AUX" (OBJ <>))
<DEBUGGING? <RT-DEBUG-VERB "V-SMELL">>
<COND (<OR <RT-IDENTIFY-FLOOR? ,W?SKY ,GL-PRSO>
<EQUAL? ,GL-PRSO ,ROOMS>>
;<SET OBJ <GETP ,GL-PLACE-CUR ,P?ODOR>>
;"ODOR property never used"
<TELL "You do not smell anything " <RT-PICK-NEXT ,GL-BORING-TXT>
"." CR>
<RTRUE>
;<COND (<MC-F? .OBJ>
<TELL "You do not smell anything "
<RT-PICK-NEXT ,GL-BORING-TXT> "." CR>
<RTRUE>)
(T
<RT-PERFORM ,V?SMELL .OBJ>
<RTRUE>)>)
(<MC-PRSO? ,TH-BUNG ,TH-MALMSEY ,TH-MALMSEY-POOL ,TH-BUTT-OF-MALMSEY ;,TH-EMPTY-BUTT-OF-MALMSEY ,TH-GARNET>
<TELL ,K-EAU-DE-MSG CR>)
(T
<TELL "It smells just like " A ,GL-PRSO "." CR>)>
<RTRUE>>
<ROUTINE V-SMOKE ()
<DEBUGGING? <RT-DEBUG-VERB "V-SMOKE">>
<RT-CYOU-MSG>
<TELL "cannot smoke " THEO "." CR>
<RTRUE>>
<ROUTINE V-SPIN ()
<DEBUGGING? <RT-DEBUG-VERB "V-SPIN">>
<COND (<MC-PRSO? ,ROOMS>
<TELL ,K-DIZZY-MSG CR>
<RTRUE>)
(T
<TELL "You cannot spin ">
<RT-SAY-HIM-HER-THEM-IT-MSG>
<TELL "." CR>)>
<RTRUE>>
<ROUTINE V-STAND ()
<DEBUGGING? <RT-DEBUG-VERB "V-STAND">>
<TELL "You are already standing." CR>
<RTRUE>>
<ROUTINE V-STAND-ON ()
<DEBUGGING? <RT-DEBUG-VERB "V-STAND-ON">>
<TELL "Standing on " THEO " would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-STAND-UNDER ()
<DEBUGGING? <RT-DEBUG-VERB "V-STAND-UNDER">>
<RT-IMPOSSIBLE-MSG>
<RTRUE>>
<ROUTINE V-STEAL ()
<DEBUGGING? <RT-DEBUG-VERB "V-STEAL">>
<TELL ,K-THEFT-MSG CR>
<RTRUE>>
<ROUTINE V-STRIKE ()
<DEBUGGING? <RT-DEBUG-VERB "V-STRIKE">>
<V-HIT>
<RTRUE>>
<ROUTINE V-SWIM ()
<DEBUGGING? <RT-DEBUG-VERB "V-SURFACE">>
<COND (<MC-PRSO? ,ROOMS>
<COND (<MC-HERE? ,RM-THE-EMBANKMENT ,RM-SWAN-LANE ,RM-LONDON-BRIDGE>
<TELL "Yuck! Have you looked at that water?" CR>)
(T
<TELL ,K-NO-SWIM-MSG CR>
<RTRUE>)>)
(<AND <MC-PRSO? ,TH-INTDIR>
<MC-T? ,GL-P-DIRECTION>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<TELL "You cannot ">
<PRINTB ,GL-P-PRSA-WORD>
<TELL " that way from here." CR>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>)>
<RTRUE>>
<ROUTINE V-SWING ()
<DEBUGGING? <RT-DEBUG-VERB "V-SWING">>
<COND (<MC-F? ,GL-PRSI>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>)
(T
<RT-PERFORM ,V?KILL ,GL-PRSI ,GL-PRSO>)>
<RTRUE>>
<ROUTINE V-TAKE ("AUX" L)
<DEBUGGING? <RT-DEBUG-VERB "V-TAKE">>
<COND (<EQUAL? ,GLOBAL-OBJECTS <LOC ,GL-PRSO>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(,GL-PRSI
<COND (<EQUAL? ,GLOBAL-OBJECTS <LOC ,GL-PRSI>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>)
(<MC-IS? ,GL-PRSO ,FL-WORN>
<RT-PERFORM ,V?TAKE-OFF ,GL-PRSO>
<RTRUE>)>
<SET L <RT-ITAKE>>
<COND (<MC-T? .L>
<COND (<MC-T? ,GL-P-MULT?>
<TELL "Taken." CR>)
(<OR <MC-IS? .L ,FL-CONTAINER>
<MC-IS? .L ,FL-SURFACE>
<MC-IS? .L ,FL-PERSON>
<MC-IS? .L ,FL-ALIVE>>
<RT-CYOU-MSG "take" "takes">
<TELL THEO>
<RT-OUT-OFF-MSG .L>
<TELL THE .L "." CR>)
(T
<RT-CYOU-MSG "take" "takes">
<TELL THEO "." CR>)>
<SET L <GETP ,GL-PRSO ,P?VALUE>>
<COND (<MC-T? .L>
<PUTP ,GL-PRSO ,P?VALUE 0>
<RT-TOPAZ-MSG>
<RT-UPDATE-SCORE .L>
<RT-UPDATE-STATUS-LINE>)>)>
<RTRUE>>
<ROUTINE V-TAKE-OFF ()
<DEBUGGING? <RT-DEBUG-VERB "V-TAKE-OFF">>
<COND (<MC-PRSO? ,TH-CLOTHES ,TH-FEET>
<TELL ,K-INAPPROPRIATE-MSG CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-TAKEABLE>
<COND (<AND <IN? ,GL-PRSO ,GL-WINNER>
<MC-IS? ,GL-PRSO ,FL-WORN>>
<MC-UNMAKE ,GL-PRSO ,FL-WORN>
<TELL "You take off " THEO "." CR>
<RTRUE>)
(T
<RT-PERFORM ,V?TAKE ,GL-PRSO>
<RTRUE>)>)
(<MC-IS? ,GL-PRSO ,FL-VEHICLE>
<RT-PERFORM ,V?EXIT ,GL-PRSO>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>>
<ROUTINE V-TAKE-WITH ()
<DEBUGGING? <RT-DEBUG-VERB "V-TAKE-WITH">>
<TELL ,K-HOW-TO-MSG CR>
<RTRUE>>
<ROUTINE V-TASTE ()
<DEBUGGING? <RT-DEBUG-VERB "V-TASTE">>
<RT-PERFORM ,V?EAT ,GL-PRSO>
<RTRUE>>
<ROUTINE V-TELL ()
<DEBUGGING? <RT-DEBUG-VERB "V-TELL">>
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RFATAL>)
(<MC-PRSO? ,CH-ME ,CH-PLAYER>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<RT-TALK-TO-SELF-MSG>
<RTRUE>)
(T
<RT-NO-RESPONSE-MSG>
<RTRUE>)>)
(T
<SETG GL-P-QCONTEXT-TH ,GL-PRSO>
<SETG GL-P-QCONTEXT-RM <LOC ,GL-PRSO>>
<COND (<MC-T? ,GL-P-CONT>
<SETG GL-WINNER ,GL-PRSO>
<RT-THIS-IS-IT ,GL-PRSO>
<SETG GL-CLOCK-WAIT T>
; "Turn quotes into buzzwords, the better to parse
this crap with"
<REPEAT ((N ,GL-P-CONT) (M ,GL-P-LEN) WRD)
<COND (<==? <SET WRD <ZGET ,GL-P-P-LEX .N>> ,W?QUOTE>
<ZPUT ,GL-P-P-LEX .N ,W?THE>)
(<EQUAL? .WRD ,W?THEN ,W?PERIOD>
<RETURN>)>
<SET N <+ .N ,K-P-LEXELEN>>
<COND (<L? <SET M <- .M 1>> 1>
<RETURN>)>>
<RTRUE>)
(T
<RT-NO-RESPONSE-MSG>
<RTRUE>)>)>>
<ROUTINE V-TELL-ABOUT ()
<DEBUGGING? <RT-DEBUG-VERB "V-TELL-ABOUT">>
<COND (<RT-WHO-WHAT-WHERE-MSG>
<RFATAL>)
(T
<RTRUE>)>>
<ROUTINE V-TELL-WHO ()
<DEBUGGING? <RT-DEBUG-VERB "V-TELL-WHO">>
<TELL "You must use TELL ME ABOUT SOMETHING or TELL CHARACTER ABOUT SOMETHING." CR>
<RTRUE>>
<ROUTINE V-THANK ()
<DEBUGGING? <RT-DEBUG-VERB "V-THANK">>
<COND (<MC-F? <RT-ANYONE-HERE?>>
<TELL "[There's nobody here to thank.]" CR>
<RTRUE>)
(<EQUAL? ,GL-WINNER ,CH-PLAYER>
<COND
(<MC-PRSO? ,CH-ME ,CH-PLAYER>
<TELL "Patting yourself on the back" ,K-WONT-HELP-MSG CR>
<RTRUE>)
(<MC-IS? ,GL-PRSO ,FL-ASLEEP>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG ,GL-PRSO>
<TELL "in any condition to accept your thanks." CR>)
(T
<TELL "\"You're welcome.\"" CR>
<RTRUE>)>)
(T
<RT-FOOLISH-TO-TALK-MSG>
<RTRUE>)>>
<ROUTINE V-THROUGH ()
<DEBUGGING? <RT-DEBUG-VERB "V-THROUGH">>
<COND (<MC-PRSO? ,ROOMS>
<RT-DO-WALK ,P?IN>
<RTRUE>)
(T
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>>
<ROUTINE V-THROW ()
<DEBUGGING? <RT-DEBUG-VERB "V-THROW">>
<COND (<AND <MC-VERB-WORD? PUT>
<MC-PRSO? ,TH-HANDS ,TH-FEET>>
<COND (<MC-IS? ,GL-PRSI ,FL-DOOR>
<COND (<MC-IS? ,GL-PRSI ,FL-OPENED>
<RT-CYOU-MSG "put" "puts">
<TELL
THEO " through " THEI ", but can't reach anything on the other side." CR>)
(T
<TELL CTHEI>
<RT-IS-ARE-MSG ,GL-PRSI>
<TELL "closed." CR>)>)
(T
<RT-IMPOSSIBLE-MSG>)>)
(<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
<RT-IMPOSSIBLE-MSG>)
(<RT-IDROP-MSG>
<COND (<AND <MC-IS? ,CH-HOLMES ,FL-ASLEEP>
<MC-PRSI? ,CH-HOLMES ,TH-PHIAL, TH-SYRINGE ,TH-MOROCCO-CASE>>
<COND (<MC-PRSO? ,TH-KNIFE>
<COND (<MC-PRSI? ,CH-HOLMES>
<TELL "Holmes absentmindedly dodges the knife">)
(<MC-PRSI? ,TH-PHIAL ,TH-SYRINGE ,TH-MOROCCO-CASE>
<TELL "Holmes casually moves " THEI
" out of harm's way">)>
<TELL " and continues staring at the phial." CR>
<RTRUE>)
(T
<TELL "Holmes absentmindedly catches " THEO
" with his free hand and bops you over the head with it before letting it fall
to the ground. He then continues staring at the phial." CR>
<RTRUE>)>)>
<TELL CTHEO " miss">
<RT-ES-NOES-MSG ,GL-PRSO>
<TELL " " THEI " by a mile and land">
<RT-S-NOS-MSG ,GL-PRSI>
<COND (<MC-HERE? ,RM-THAMES-ONE ,RM-THAMES-TWO ,RM-THAMES-THREE
,RM-THAMES-FOUR ,RM-THAMES-FIVE>
<TELL " in the water.">
<MOVE ,GL-PRSO ,LG-WATER>
<COND (<MC-PRSO? ,CH-TRAINED-PIGEON>
<RT-KILL-PIGEON>)>
<TELL " Plop." CR>)
(T
<TELL " on the ">
<COND (<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<TELL "floor">)
(T
<TELL "ground">)>
<TELL " nearby." CR>)>)>
<RTRUE>>
<ROUTINE V-THROW-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-THROW-SWP">>
<RT-PERFORM ,V?THROW ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-THROW-OVER ()
<DEBUGGING? <RT-DEBUG-VERB "V-THROW-OVER">>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-TIE ()
<DEBUGGING? <RT-DEBUG-VERB "V-TIE">>
<RT-CYOU-MSG>
<TELL "cannot possibly tie " THEO>
<COND (<MC-T? ,GL-PRSI>
<TELL " to " THEI>)>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-TIE-UP ()
<DEBUGGING? <RT-DEBUG-VERB "V-TIE-UP">>
<RT-CYOU-MSG>
<TELL "cannot tie up ">
<COND (<MC-PRSI? <> ,ROOMS>
<TELL "that">)
(T
<TELL "anything with " THEI>)>
<TELL "." CR>>
<ROUTINE V-TIP ()
<DEBUGGING? <RT-DEBUG-VERB "V-TIP">>
<COND (<MC-IS? ,GL-PRSO ,FL-PERSON>
<RT-CYOU-MSG "whisper" "whispers">
<TELL "confidentially, \"Buy low, sell high.\"" CR CR CTHEO>
<RT-DONT-DOESNT-MSG ,GL-PRSO>
<TELL "look impressed." CR>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "can't do that." CR>
<RTRUE>)>>
<ROUTINE V-TOUCH ()
<DEBUGGING? <RT-DEBUG-VERB "V-TOUCH">>
<RT-NO-POINT-MSG "Fiddling with">
<RTRUE>>
<ROUTINE V-TOUCH-TO ()
<DEBUGGING? <RT-DEBUG-VERB "V-TOUCH-TO">>
<COND (<MC-PRSO? ,TH-HANDS>
<RT-PERFORM ,V?TOUCH ,GL-PRSI>
<RTRUE>)>
<RT-CYOU-MSG "put" "puts">
<TELL THEO " next to " THEI ", but nothing " <RT-PICK-NEXT ,GL-BORING-TXT> " happens." CR>
<RTRUE>>
<ROUTINE V-TOUCH-TO-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-TOUCH-TO-SWP">>
<RT-PERFORM ,V?TOUCH-TO ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-TRANSLATE ()
<DEBUGGING? <RT-DEBUG-VERB "V-TRANSLATE">>
<TELL ,K-HOW-TO-MSG CR>
<RTRUE>>
<ROUTINE V-TUNE-TO ()
<DEBUGGING? <RT-DEBUG-VERB "V-TUNE-TO">>
<RT-IMPOSSIBLE-MSG>
<RTRUE>>
<ROUTINE V-TURN ()
<DEBUGGING? <RT-DEBUG-VERB "V-TURN">>
<COND (<AND <MC-ISNOT? ,GL-PRSO ,FL-TAKEABLE>
<MC-ISNOT? ,GL-PRSO ,FL-TRYTAKE>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(T
<RT-NO-POINT-MSG "Turning">
<RTRUE>)>>
<ROUTINE V-TURN-DOWN ()
<DEBUGGING? <RT-DEBUG-VERB "V-TURN-DOWN">>
<V-REFUSE>
<RTRUE>>
<ROUTINE V-TURN-TO ()
<DEBUGGING? <RT-DEBUG-VERB "V-TURN-TO">>
<COND (<RT-VISIBLE? ,GL-PRSO>
<RT-PERFORM ,V?WATCH ,GL-PRSO>
<RTRUE>)
(T
<RT-CYOU-MSG "do not" "does not">
<TELL "see " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-TURN-UP ()
<DEBUGGING? <RT-DEBUG-VERB "V-TURN-UP">>
<V-LOOK-UNDER>
<RTRUE>>
<ROUTINE V-UNDRESS ()
<DEBUGGING? <RT-DEBUG-VERB "V-UNDRESS">>
<COND (<OR <MC-PRSO? ,ROOMS>
<MC-IS? ,GL-PRSO ,FL-PERSON>>
<TELL ,K-INAPPROPRIATE-MSG CR>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot undress " A ,GL-PRSO "." CR>
<RTRUE>)>>
<ROUTINE V-UNFOLD ()
<DEBUGGING? <RT-DEBUG-VERB "V-UNFOLD">>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<TELL "folded up." CR>
<RTRUE>>
<ROUTINE V-UNLOCK ()
<DEBUGGING? <RT-DEBUG-VERB "V-UNLOCK">>
<COND (<OR <MC-IS? ,GL-PRSO ,FL-OPENABLE>
<MC-IS? ,GL-PRSO ,FL-CONTAINER>>
<COND (<OR <MC-IS? ,GL-PRSO ,FL-OPENED>
<NOT <MC-IS? ,GL-PRSO ,FL-LOCKED>>>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<TELL "locked." CR>
<RTRUE>)
(T
<RT-THING-WONT-LOCK-MSG ,GL-PRSI ,GL-PRSO T>
<RTRUE>)>)
(T
<RT-CANT-LOCK-MSG T>
<RTRUE>)>>
<ROUTINE V-UNPLUG ()
<DEBUGGING? <RT-DEBUG-VERB "V-UNPLUG">>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<TELL "connected to ">
<COND (<MC-T? ,GL-PRSI>
<TELL THEI>)
(T
<TELL "anything">)>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-UNSCREW-FROM ()
<DEBUGGING? <RT-DEBUG-VERB "V-UNSCREW-FROM">>
<COND (<MC-PRSO? GL-PRSI>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<NOT <IN? ,GL-PRSO ,GL-PRSI>>
<COND (<MC-IS? ,GL-PRSI ,FL-ALIVE>
<TELL CTHEI>
<RT-DONT-DOESNT-MSG ,GL-PRSI>
<TELL "have " THEO "." CR>
<RTRUE>)>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<RT-IN-ON-MSG ,GL-PRSI <>>
<TELL THEI "." CR>
<RTRUE>)
(T
<RT-CYOU-MSG>
<TELL "cannot unscrew " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-UNTIE ()
<DEBUGGING? <RT-DEBUG-VERB "V-UNTIE">>
<RT-CYOU-MSG>
<TELL "cannot untie " A ,GL-PRSO "." CR>
<RTRUE>>
<ROUTINE V-USE ()
<DEBUGGING? <RT-DEBUG-VERB "V-USE">>
<COND (<MC-IS? ,GL-PRSO ,FL-PERSON>
<TELL CTHEO " might resent that." CR>
<RTRUE>)
(T
<TELL "[You must specify what you want to do with " THEO ".]" CR>
<RTRUE>)>>
<ROUTINE V-USE-ON ()
<DEBUGGING? <RT-DEBUG-VERB "V-USE-ON">>
<TELL "Using " THEO " on " THEI " would">
<RT-WASTE-OF-TIME-MSG>
<RTRUE>>
<ROUTINE V-WAIT ("AUX" H M S N)
<DEBUGGING? <RT-DEBUG-VERB "V-WAIT">>
<COND (<EQUAL? ,GL-P-NUMBER -1>
<SET N 1>)
(T
<SET N ,GL-P-NUMBER>)>
<COND (<MC-PRSO? ,TH-TIME>
<COND (<EQUAL? <GETP ,GL-PRSO ,P?OBJ-NOUN>
,W?MINUTE ,W?MINUTES>
<SET H 0>
<SET M .N>)
(T
<SET H .N>
<SET M 0>)>)
(<MC-PRSO? ,TH-INTNUM>
<SET H 0>
<SET M .N>
<TELL "[" N .M " minute">
<COND (<NOT <EQUAL? .M 1>>
<TELL "s">)>
<TELL "]" CR CR>)
(<NOT <MC-PRSO? ,ROOMS>>
<RT-CYOU-MSG>
<TELL "can't wait for that." CR>
<RTRUE>)
(T
<SET H 0>
<SET M 10>)>
<SET S 0>
<TELL "Time passes..." CR>
<RT-CLOCK-JMP .H .M .S>
<RT-TIME-OF-DAY-MSG T>
<RTRUE>>
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
<DEBUGGING? <RT-DEBUG-VERB "V-WALK">>
<SET PT <GETPT ,GL-PLACE-CUR ,GL-PRSO>>
<COND (<MC-F? ,GL-P-WALK-DIR>
<TELL "[You must specify a direction.]" CR>)
(<MC-T? .PT>
<SET PTS <PTSIZE .PT>>
; "All rooms are stored as BYTEs, so we sometimes
need to do GETBs or funny rests..."
<COND (<EQUAL? .PTS ,K-UEXIT>
<COND (<FSET? <LOC ,GL-WINNER> ,FL-VEHICLE>
; "If you're in a vehicle, get out of it
first"
<RT-PERFORM ,V?EXIT <LOC ,GL-WINNER>>
<COND (<FSET? <LOC ,GL-WINNER> ,FL-VEHICLE>
<RFATAL>)>)>
<SET RM <MC-GET-RM-EXIT-DEST .PT>>
<RT-GOTO .RM>
<RTRUE>)
(<EQUAL? .PTS ,K-NEXIT>
<SET STR <GET .PT ,K-NEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(<EQUAL? .PTS ,K-PEXIT>
<SET RM <APPLY <GET .PT ,K-PEXITRTN>>>
<COND (<MC-T? .RM>
<RT-GOTO .RM>
<RTRUE>)
(T
<RFATAL>)>)
(<EQUAL? .PTS ,K-CEXIT>
<COND (<VALUE <GETB .PT ,K-CEXITFLG>>
<SET RM <MC-GET-RM-EXIT-DEST .PT>>
<RT-GOTO .RM>
<RTRUE>)>
<RT-CYOU-MSG>
<TELL "cannot go that way." CR>
<RFATAL>)
(<EQUAL? .PTS ,K-DEXIT>
<COND (<FSET? <LOC ,GL-WINNER> ,FL-VEHICLE>
; "If you're in a vehicle, get out of it
first"
<RT-PERFORM ,V?EXIT <LOC ,GL-WINNER>>
<COND (<FSET? <LOC ,GL-WINNER> ,FL-VEHICLE>
<RFATAL>)>)>
<SET OBJ <MC-GET-RM-EXIT-DOOR .PT>>
<COND (<MC-IS? .OBJ ,FL-OPENED>
<SET RM <MC-GET-RM-EXIT-DEST .PT>>
<RT-GOTO .RM>
<RTRUE>)
(T
<TELL "The door is not open." CR>
<RFATAL>)>)>)
(<AND <EQUAL? ,GL-P-WALK-DIR ,P?OUT>
<MC-ISNOT? ,GL-PLACE-CUR ,FL-INDOORS>>
<RT-CYOU-MSG "are" "is">
<TELL "already outside." CR>
<RFATAL>)
(<AND <EQUAL? ,GL-P-WALK-DIR ,P?IN>
<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>>
<RT-CYOU-MSG "are" "is">
<TELL "already inside." CR>
<RFATAL>)
(T
<TELL "You cannot go that way." CR>
<RFATAL>)>>
<ROUTINE V-WALK-AROUND ()
<DEBUGGING? <RT-DEBUG-VERB "V-WALK-AROUND">>
<TELL "[Which way do you want to go?]" CR>
<RFATAL>>
<ROUTINE V-WALK-TO ()
<DEBUGGING? <RT-DEBUG-VERB "V-WALK-TO">>
<COND (<MC-PRSO? ,TH-INTDIR>
<RT-DO-WALK ,GL-P-DIRECTION>
<RTRUE>)
(<OR <MC-PRSO? ,TH-RIGHT ,TH-LEFT>
<IN? ,GL-PRSO ,ROOMS>>
<TELL ,K-BE-MORE-SPECIFIC-MSG CR>
<RTRUE>)
(T
<V-FOLLOW>
<RTRUE>)>>
<ROUTINE V-WATCH ()
<DEBUGGING? <RT-DEBUG-VERB "V-WATCH">>
<COND (<MC-IS? ,GL-PRSO ,FL-PERSON>
<TELL CTHEO>
<RT-ISNT-ARENT-MSG>
<TELL "doing anything " <RT-PICK-NEXT ,GL-BORING-TXT>>)
(T
<TELL "Nothing " <RT-PICK-NEXT ,GL-BORING-TXT> " is happening">)>
<TELL "." CR>
<RTRUE>>
<ROUTINE V-WAVE-AT ()
<DEBUGGING? <RT-DEBUG-VERB "V-WAVE-AT">>
<COND (<RT-WHO-WHAT-WHERE-MSG>
<RFATAL>)
(T
<RTRUE>)>>
<ROUTINE V-WEAR ()
<DEBUGGING? <RT-DEBUG-VERB "V-WEAR">>
<COND (<OR <AND <IN? ,GL-PRSO ,GL-WINNER>
<MC-IS? ,GL-PRSO ,FL-WORN>>
<MC-PRSO? ,TH-CLOTHES>>
<RT-CYOU-MSG "are" "is">
<TELL "already wearing " THEO "." CR>
<RTRUE>)
(<MC-ISNOT? ,GL-PRSO ,FL-CLOTHING>
<RT-CYOU-MSG>
<TELL "cannot wear " THEO "." CR>
<RTRUE>)
(<RT-DONT-HAVE-MSG ,GL-PRSO>
<RTRUE>)
(T
<MC-MAKE ,GL-PRSO ,FL-WORN>
<RT-CYOU-MSG "put" "puts">
<TELL "on " THEO "." CR>
<RTRUE>)>>
<ROUTINE V-WEDGE ()
<DEBUGGING? <RT-DEBUG-VERB "V-WEDGE">>
<RT-PERFORM ,V?LOOSEN ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-WEIGH ()
<DEBUGGING? <RT-DEBUG-VERB "V-WEIGH">>
<TELL "You haven't got any scales to weigh things with." CR>
<RTRUE>>
<ROUTINE V-WHAT ()
<DEBUGGING? <RT-DEBUG-VERB "V-WHAT">>
<COND (<RT-WHO-WHAT-WHERE-MSG>
<RFATAL>)
(T
<RTRUE>)>>
<ROUTINE V-WHERE ()
<DEBUGGING? <RT-DEBUG-VERB "V-WHERE">>
<COND (<RT-WHO-WHAT-WHERE-MSG>
<RFATAL>)
(T
<RTRUE>)>>
<ROUTINE V-WHO ()
<DEBUGGING? <RT-DEBUG-VERB "V-WHO">>
<COND (<RT-WHO-WHAT-WHERE-MSG>
<RFATAL>)
(T
<RTRUE>)>>
<ROUTINE V-WIND ()
<DEBUGGING? <RT-DEBUG-VERB "V-WIND">>
<RT-CYOU-MSG>
<TELL "cannot wind " A ,GL-PRSO "." CR>
<RTRUE>>
<ROUTINE V-WRAP-AROUND ()
<DEBUGGING? <RT-DEBUG-VERB "V-WRAP-AROUND">>
<RT-CYOU-MSG>
<TELL "could not possibly ">
<PRINTB ,GL-P-PRSA-WORD>
<TELL " " THEO " around " THEI "." CR>
<RTRUE>>
<ROUTINE V-WRAP-AROUND-SWP ()
<DEBUGGING? <RT-DEBUG-VERB "V-WRAP-AROUND-SWP">>
<RT-PERFORM ,V?WRAP-AROUND ,GL-PRSI ,GL-PRSO>
<RTRUE>>
<ROUTINE V-YELL ()
<DEBUGGING? <RT-DEBUG-VERB "V-YELL">>
<COND (<MC-PRSO? ,ROOMS>
<COND (<EQUAL? ,GL-P-PRSA-WORD ,W?CRY>
<TELL
"Awww. Don't cry. You'll figure it out eventually." CR>
<RTRUE>)
(T
<TELL
"The idea of the primal scream as a technique to relieve anxiety will not be
discovered for eighty years. But if it makes you feel better, go right ahead."
CR>
<RTRUE>)>)
(T
<RT-NOT-LIKELY-MSG ,GL-PRSO "would respond">
<RTRUE>)>>
;<GLOBAL GL-BREATH-HELD? <>> ; "is player holding his breath"
<ROUTINE RT-CANT-SEE-MUCH-MSG ()
<RT-CYOU-MSG>
<TELL "cannot see much from here." CR>
<RTRUE>>
<ROUTINE RT-NO-MONEY-MSG ()
<RT-CYOU-MSG "do not" "does not">
<TELL "have any money." CR>
<RTRUE>>
<ROUTINE RT-IN-VEHICLE-MSG ()
<COND (<OR <IN? ,CH-PLAYER ,TH-HANSOM-CAB>
<IN? ,CH-PLAYER ,TH-GROWLER-CAB>>
<TELL " in a cab ">)
(<IN? ,CH-PLAYER ,TH-BOAT>
<TELL " in a boat ">)
(T
<TELL " standing ">)>>
<ROUTINE RT-DRIVE-WALK-MSG? ()
<COND (<OR <IN? ,CH-PLAYER ,TH-HANSOM-CAB>
<IN? ,CH-PLAYER ,TH-GROWLER-CAB>>
<TELL " drive ">)
(T
<TELL " walk ">)>>
<ROUTINE RT-ALREADY-IN-ROOM-MSG ()
<TELL "You are already in " THEO "." CR>>
<ROUTINE RT-NOT-IN-ROOM-MSG ()
<TELL "You are not in " THEO "." CR>>
<ROUTINE RT-OBJECT-IS-LOCKED-MSG ()
<RT-CYOU-MSG>
<TELL "cannot do that. It is locked." CR>
<RTRUE>>
<ROUTINE RT-NOTHING-INTERESTING-MSG ()
<RT-CYOU-MSG "do" "does">
<TELL "not see anything " <RT-PICK-NEXT ,GL-BORING-TXT>>
<RTRUE>>
<ROUTINE RT-WASTE-OF-TIME-MSG ()
<TELL <RT-PICK-NEXT ,GL-NO-POINT-TXT> "." CR>
<RTRUE>>
<ROUTINE RT-FOG-MSG ()
<TELL <RT-PICK-NEXT ,GL-FOG-TXT> "." CR>
<RTRUE>>
<ROUTINE RT-ITS-RIGHT-HERE-MSG ()
<RT-SAY-ITS-MSG>
<TELL "right here in front of you." CR>
<RTRUE>>
<ROUTINE RT-WHO-WHAT-WHERE-MSG ()
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RTRUE>)
(T
<RT-NO-RESPONSE-MSG <COND (<MC-VERB? WHO WHAT WHERE> ,GL-WINNER)>>
<RFALSE>)>>
<ROUTINE RT-HI-BYE-MSG ()
<COND (<RT-FOOLISH-TO-TALK-MSG>
<RFATAL>)
(<MC-PRSO? ,ROOMS>
<RT-TALK-TO-SELF-MSG>
<RTRUE>)
(T
<RT-NO-RESPONSE-MSG>
<RTRUE>)>>
<ROUTINE RT-NO-RESPONSE-MSG ("OPTIONAL" (WHO <>))
<COND (<MC-F? .WHO>
<SET WHO ,GL-PRSO>)>
<TELL CTHE .WHO>
<RT-DONT-DOESNT-MSG .WHO>
<TELL "respond." CR>
<RTRUE>>
<ROUTINE RT-TAKE-OFF-PRSO-FIRST-MSG ()
<TELL "[taking off " THEO " first]" CR>
<MC-UNMAKE ,GL-PRSO ,FL-WORN>
<COND (<MC-PRSO? ,TH-WATSONS-HAT>
<MC-MAKE ,TH-WATSONS-HAT ,FL-OPENED>)
(<MC-PRSO? ,TH-SUIT-OF-ARMOUR>
<MOVE ,TH-SUIT-OF-ARMOUR ,GL-PLACE-CUR>)>
<RTRUE>>
<ROUTINE RT-SAY-DROPPED-MSG ()
<COND (<MC-T? ,GL-P-MULT?>
<TELL "Dropped." CR>
<RTRUE>)
(T
<RT-CYOU-MSG "drop" "drops">
<TELL THEO "." CR>
<RTRUE>)>>
<ROUTINE RT-FOOLISH-TO-TALK-MSG ()
<COND (<N==? ,GL-WINNER ,CH-ME ,CH-PLAYER>
<TELL CTHE ,GL-WINNER>
<RT-DONT-DOESNT-MSG ,GL-WINNER>
<TELL "respond." CR>
<RTRUE>)
(<EQUAL? ,GL-PRSO <> ,ROOMS>
<RFALSE>)
(<MC-ISNOT? ,GL-PRSO ,FL-ALIVE>
<RT-NOT-LIKELY-MSG ,GL-PRSO "would respond">
<RT-P-CLEAR>
<RTRUE>)
(<MC-PRSO? ,CH-ME ,CH-PLAYER ,GL-PRSI ,GL-WINNER>
<TELL "That would">
<RT-WASTE-OF-TIME-MSG>
<RT-P-CLEAR>
<RTRUE>)
(T
<RT-THIS-IS-IT ,GL-PRSO>
<RFALSE>)>>
<ROUTINE RT-YOU-MSG ("OPTIONAL" (WRD1 <>) (WRD2 <>) (PRONOUN? <>))
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<TELL " you ">
<COND (<MC-T? .WRD1>
<TELL .WRD1 " ">)>)
(T
<TELL " ">
<COND (.PRONOUN?
<COND (<AND <MC-IS? ,GL-WINNER ,FL-PLURAL>
<MC-ISNOT? ,GL-WINNER ,FL-COLLECTIVE>>
<TELL "they">)
(<MC-IS? ,GL-WINNER ,FL-PERSON>
<COND (<MC-IS? ,GL-WINNER ,FL-FEMALE>
<TELL "she">)
(T
<TELL "he">)>)
(T
<TELL "it">)>)
(T
<TELL THE ,GL-WINNER>)>
<TELL " ">
<COND (<MC-T? .WRD2>
<TELL .WRD2 " ">)>)>>
<ROUTINE RT-CYOU-MSG ("OPTIONAL" (WRD1 <>) (WRD2 <>) (PRONOUN? <>))
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<TELL "You ">
<COND (<MC-T? .WRD1>
<TELL .WRD1 " ">)>)
(T
<COND (.PRONOUN? <COND (<AND <MC-IS? ,GL-WINNER ,FL-PLURAL>
<MC-ISNOT? ,GL-WINNER ,FL-COLLECTIVE>>
<TELL "They">)
(<MC-IS? ,GL-WINNER ,FL-PERSON>
<COND (<MC-IS? ,GL-WINNER ,FL-FEMALE>
<TELL "She">)
(T
<TELL "He">)>)
(T
<TELL "It">)>)
(T
<TELL CTHE ,GL-WINNER>)>
<TELL " ">
<COND (<MC-T? .WRD2>
<TELL .WRD2 " ">)>)>>
<ROUTINE RT-ITS-ALREADY-MSG (STR)
<TELL "It is already " .STR "." CR>
<RTRUE>>
<ROUTINE RT-YOURE-NOT-A-MSG (STR)
<TELL "You're a general practitioner, not a " .STR "." CR>
<RTRUE>>
<ROUTINE RT-NO-POINT-MSG (STR)
<TELL .STR " " THEO " would" <RT-PICK-NEXT ,GL-NO-POINT-TXT> "." CR>
<RTRUE>>
<ROUTINE RT-IS-ARE-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<OR <EQUAL? .THING ,CH-ME ,CH-PLAYER>
<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>>
<TELL " are ">)
(T
<TELL " is ">)>
<RTRUE>>
<ROUTINE RT-ISNT-ARENT-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<OR <EQUAL? .THING ,CH-ME ,CH-PLAYER>
<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>>
<TELL " are not ">)
(T
<TELL " is not ">)>
<RTRUE>>
<ROUTINE RT-S-NOS-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<NOT <OR <EQUAL? .THING ,CH-ME ,CH-PLAYER>
<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>>>
<TELL "s">)>
<RTRUE>>
<ROUTINE RT-ES-NOES-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<NOT <OR <EQUAL? .THING ,CH-ME ,CH-PLAYER>
<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>>>
<TELL "es">)>
<RTRUE>>
<ROUTINE RT-DONT-DOESNT-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<OR <EQUAL? .THING ,CH-ME ,CH-PLAYER>
<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>>
<TELL " do not ">)
(T
<TELL " does not ">)>
<RTRUE>>
<ROUTINE RT-SAY-ITS-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>
<TELL "They are ">
<RTRUE>)
(<AND <MC-IS? .THING ,FL-PERSON>
<MC-IS? .THING ,FL-FEMALE>>
<TELL "She is ">
<RTRUE>)
(<AND <MC-IS? .THING ,FL-PERSON>
<MC-ISNOT? .THING ,FL-FEMALE>>
<TELL "He is ">
<RTRUE>)
(T
<TELL "It is ">
<RTRUE>)>>
<ROUTINE RT-SAY-HIM-HER-THEM-IT-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<EQUAL? .THING ,CH-PLAYER ,CH-ME>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER ,CH-ME>
<TELL "yourself">)
(T
<TELL "you">)>)
(<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>
<TELL "them">)
(<MC-IS? .THING ,FL-PERSON>
<COND (<MC-IS? .THING ,FL-FEMALE>
<TELL "her">)
(T
<TELL "him">)>)
(T
<TELL "it">)>>
<ROUTINE RT-YOUR-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-WINNER>)>
<COND (<EQUAL? .THING ,CH-PLAYER ,CH-ME>
<TELL "your ">)
(<AND <MC-IS? .THING ,FL-PLURAL>
<MC-ISNOT? .THING ,FL-COLLECTIVE>>
<TELL "their ">)
(<MC-IS? .THING ,FL-PERSON>
<COND
(<MC-IS? .THING ,FL-FEMALE>
<TELL "her ">)
(T
<TELL "his ">)>)
(T
<TELL "its ">)>>
<ROUTINE RT-ITS-CLOSED-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<TELL CTHE .THING>
<RT-IS-ARE-MSG .THING>
<TELL "closed." CR>
<RTRUE>>
<ROUTINE RT-WHY-SHOOT-MSG ("OPTIONAL" (OBJ <>))
<COND (<MC-F? .OBJ>
<SET OBJ ,GL-PRSO>)>
<TELL "Why would">
<RT-YOU-MSG>
<TELL "want to shoot the poor, little, innocent " D .OBJ "?" CR>>
<ROUTINE RT-HOW-READ-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<TELL "How can">
<RT-YOU-MSG>
<TELL "read " A .THING>
<RTRUE>>
<ROUTINE RT-ALREADY-HAVE-PRSO-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<RT-CYOU-MSG "already have" "already has">
<TELL A .THING "." CR>
<RTRUE>>
<ROUTINE RT-CANT-OPEN-PRSO-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<RT-CYOU-MSG>
<TELL "could not possibly open " THE .THING "." CR>
<RTRUE>>
<ROUTINE RT-CANT-CLOSE-THAT-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<RT-CYOU-MSG>
<TELL "cannot close ">
<COND (<MC-T? .THING>
<TELL THE .THING>)
(T
<TELL D ,TH-NOT-HERE-OBJECT>)>
<TELL "." CR>
<RTRUE>>
<ROUTINE RT-NO-GOOD-SURFACE-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSI>)>
<TELL "There is no good surface on " THE .THING "." CR>
<RTRUE>>
<ROUTINE RT-LANDS-AT-YOUR-FEET-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<TELL "land">
<RT-S-NOS-MSG .THING>
<TELL " at your feet." CR>
<MOVE .THING ,GL-PLACE-CUR>
<RTRUE>>
<ROUTINE RT-OPEN-CLOSED-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<TELL CTHE .THING>
<RT-IS-ARE-MSG .THING>
<COND (<MC-IS? .THING ,FL-OPENED>
<TELL "open">)
(T
<TELL "closed">)>
<TELL ".">
<RTRUE>>
<ROUTINE RT-YOU-OPEN-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<MC-MAKE .THING ,FL-OPENED>
<RT-CYOU-MSG "open" "opens">
<TELL THE .THING "." CR>>
<ROUTINE RT-YOU-CLOSE-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<MC-UNMAKE .THING ,FL-OPENED>
<RT-CYOU-MSG "close" "closes">
<TELL THE .THING "." CR>>
<ROUTINE RT-IN-ON-MSG ("OPTIONAL" (THING <>) (SPACE? T))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<MC-T? .SPACE?>
<TELL " ">)>
<COND (<MC-IS? .THING ,FL-CONTAINER>
<TELL "in">)
(<MC-IS? .THING ,FL-SURFACE>
<TELL "on">)
(T
<TELL "held by">)>
<TELL " ">>
<ROUTINE RT-CIN-CON-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<MC-IS? .THING ,FL-SURFACE>
<TELL "On ">)
(<MC-IS? .THING ,FL-CONTAINER>
<TELL "In ">)
(T
<TELL "Held by ">)>>
<ROUTINE RT-OUT-OFF-MSG ("OPTIONAL" (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<COND (<MC-IS? .THING ,FL-SURFACE>
<TELL " off of ">)
(<MC-IS? .THING ,FL-CONTAINER>
<TELL " out of ">)
(T
<TELL " from ">)>>
<ROUTINE RT-CANT-LOCK-MSG ("OPTIONAL" (UN? <>) (THING <>))
<COND (<MC-F? .THING>
<SET THING ,GL-PRSO>)>
<RT-CYOU-MSG>
<TELL "cannot ">
<COND (<MC-T? .UN?>
<TELL "un">)>
<TELL "lock " A .THING "." CR>
<RTRUE>>
<ROUTINE RT-THING-WONT-LOCK-MSG (THING CLOSED-THING "OPTIONAL" (UN? <>))
<RT-CYOU-MSG>
<TELL "cannot ">
<COND (<MC-T? .UN?>
<TELL "un">)>
<TELL "lock " THE .CLOSED-THING " with " THE .THING "." CR>
<RTRUE>>
<ROUTINE RT-DONT-HAVE-MSG (OBJ "AUX" L O)
<SET L <LOC .OBJ>>
<COND (<MC-F? .L> T)
(<EQUAL? .L ,GL-WINNER>
<RFALSE>)
(<AND <IN? .L ,CH-PLAYER>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<SET O ,GL-PRSO>
<SETG GL-PRSO .OBJ>
<COND (<RT-ITAKE <>>
<TELL "[taking " THEO>
<RT-OUT-OFF-MSG .L>
<TELL THE .L " first]" CR>
<SETG GL-PRSO .O>
<RT-THIS-IS-IT ,GL-PRSO>
<RFALSE>)
(T
<SETG GL-PRSO .O>
<RT-CYOU-MSG>
<RT-WOULD-HAVE-TO-MSG "take" .OBJ>
<RT-OUT-OFF-MSG .L>
<TELL THE .L " first." CR>
<RTRUE>)>)>
<RT-WINNER-NOT-HOLDING-MSG>
<COND (<MC-T? .OBJ>
<COND ;(<AND <MC-IS? .OBJ ,FL-PLURAL>
<MC-ISNOT? .OBJ ,FL-NOARTC>>
<TELL "any " D .OBJ>)
(T
<TELL THE .OBJ>)>)
(T
<TELL THE ,TH-NOT-HERE-OBJECT>)>
<TELL "." CR>
<RTRUE>>
<ROUTINE RT-ROOM-IN-ON-MSG? (OBJ1 OBJ2)
<COND (<RT-OBJ-TOO-LARGE? .OBJ1 .OBJ2>
<TELL "There is not enough room">
<RT-IN-ON-MSG .OBJ2>
<TELL THE .OBJ2 "." CR>)>>
<ROUTINE RT-IMPOSSIBLE-PUT-IN-ON-MSG ("OPTIONAL" OBJ)
<COND (<MC-F? .OBJ>
<SET OBJ ,GL-PRSI>)>
<COND (<AND <MC-VERB? PUT PUT-ON>
<MC-PRSI? .OBJ>>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE RT-CANT-PUT-IN-ON-MSG ("OPTIONAL" OBJ)
<COND (<MC-F? .OBJ>
<SET OBJ ,GL-PRSI>)>
<COND (<AND <MC-VERB? PUT PUT-ON>
<MC-PRSI? .OBJ>>
<RT-CYOU-MSG>
<TELL "cannot put " THEO " ">
<COND (<MC-IS? ,GL-PRSO ,FL-CONTAINER>
<TELL "in">)
(<MC-IS? ,GL-PRSO ,FL-SURFACE>
<TELL "on">)
(<MC-VERB? PUT>
<TELL "in">)
(T
<TELL "on">)>
<TELL " " THEI "." CR>)>>
<ROUTINE RT-CHECK-MOVE-MSG? (SRC DEST "AUX" PTR OLOC CNT)
<COND (<MC-T? .DEST>
<SET PTR ,GL-LOC-TRAIL>
<SET OLOC .DEST>
<REPEAT ()
<PUT .PTR 0 .OLOC>
<INC CNT>
<COND (<OR <MC-F? .OLOC>
<IN? .OLOC ,ROOMS>
<IN? .OLOC ,LOCAL-GLOBALS>
<IN? .OLOC ,GLOBAL-OBJECTS>>
<RETURN>)>
<SET OLOC <LOC .OLOC>>
<SET PTR <REST .PTR 2>>
<COND (<EQUAL? .OLOC .DEST>
<RETURN>)>>
<COND (<INTBL? .SRC ,GL-LOC-TRAIL .CNT>
<RT-CYOU-MSG>
<TELL "cannot put " THE .SRC>
<RT-IN-ON-MSG .SRC>
<TELL "itself, or">
<RT-IN-ON-MSG .SRC>
<TELL "something that is already">
<RT-IN-ON-MSG .SRC>
<TELL "it." CR>
<RTRUE>)>)>>
<ROUTINE RT-EMPTY-PRSO-MSG (DEST "AUX" OBJ NXT X)
<SET OBJ <FIRST? ,GL-PRSO>>
<COND (<MC-F? .OBJ>
<TELL "There is nothing">
<RT-IN-ON-MSG ,GL-PRSO>
<TELL THEO "." CR>
<RTRUE>)>
<SETG GL-P-MULT? T>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)>
<TELL CTHE .OBJ ": ">
<SET NXT <NEXT? .OBJ>>
<COND (<EQUAL? .DEST ,CH-PLAYER>
<SET X <RT-PERFORM ,V?TAKE .OBJ ,GL-PRSO>>
<COND (<EQUAL? .X ,FATAL-VALUE>
<RETURN>)>)
(<NOT .DEST>
<COND (<AND <MC-IS? ,GL-PRSO ,FL-PLURAL>
<MC-ISNOT? ,GL-PRSO ,FL-COLLECTIVE>>
<TELL "They ">)
(T
<TELL "It ">)>
<RT-LANDS-AT-YOUR-FEET-MSG>)
(<RT-ROOM-IN-ON-MSG? .OBJ .DEST> T)
(<RT-CHECK-MOVE-MSG? .OBJ .DEST>
<RETURN>)
(T
<MOVE .OBJ .DEST>
<TELL "Done." CR>)>
<SET OBJ .NXT>>
<SETG GL-P-MULT? <>>
<RTRUE>>
<ROUTINE RT-IDROP-MSG ("AUX" L)
<SET L <LOC ,GL-PRSO>>
<COND (<OR <MC-F? .L>
<MC-PRSO? ,GL-WINNER ,CH-ME ,CH-PLAYER>>
<RT-IMPOSSIBLE-MSG>
<RFALSE>)
(<NOT <EQUAL? .L ,GL-WINNER>>
<RT-CYOU-MSG>
<RT-WOULD-HAVE-TO-MSG "take" ,GL-PRSO>
<RT-OUT-OFF-MSG .L>
<TELL THE .L " first." CR>
<RFALSE>)
(<AND <MC-IS? ,GL-PRSO ,FL-WORN>
<IN? ,GL-PRSO ,GL-WINNER>>
<RT-TAKE-OFF-PRSO-FIRST-MSG>)>
<COND (<MC-VERB? THROW>
<MOVE ,GL-PRSO <RT-META-LOC ,GL-WINNER>>)
(T
<MOVE ,GL-PRSO <LOC ,GL-WINNER>>)>
<RTRUE>>
<ROUTINE RT-PRINT-CONTENTS-1 (THING "AUX" OBJ (CNT 0) TMP)
<RT-MOVE-NODESC-OBJS .THING ,TH-Y-OBJECT>
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)>
<MC-MAKE .OBJ ,FL-SEEN>
<TELL " " A .OBJ>
<COND (<MC-IS? .OBJ ,FL-LIGHTED>
<TELL " (providing light)">)>
<TELL "." CR>
<INC CNT>
<SET OBJ <NEXT? .OBJ>>>
<COND (<ZERO? .CNT>
<TELL " nothing." CR>)>
<RT-MOVE-ALL ,TH-Y-OBJECT .THING>
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)
(T
<COND (<RT-SEE-INSIDE? .OBJ>
<RT-PRINT-CONTENTS-3 .OBJ>)>
<SET OBJ <NEXT? .OBJ>>)>>
<RTRUE>>
<ROUTINE RT-PRINT-CONTENTS-2 (THING "AUX" OBJ (CNT 0))
<RT-MOVE-NODESC-OBJS .THING ,TH-Y-OBJECT>
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)>
<MC-MAKE .OBJ ,FL-SEEN>
<TELL A .OBJ>
<COND (<MC-IS? .OBJ ,FL-LIGHTED>
<TELL " (providing light)">)>
<INC CNT>
<SET OBJ <NEXT? .OBJ>>
<COND (<MC-T? .OBJ>
<COND (<MC-F? <NEXT? .OBJ>>
<TELL " and ">)
(T
<TELL ", ">)>)>>
<COND (<ZERO? .CNT>
<TELL "nothing">)>
<RT-MOVE-ALL ,TH-Y-OBJECT .THING>
<RTRUE>>
<ROUTINE RT-PRINT-CONTENTS-3 (THING "AUX" OBJ (FIRST T) (CNT 0))
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)
(<MC-ISNOT? .OBJ ,FL-NODESC>
<COND (<MC-T? .FIRST>
<SET FIRST <>>
<RT-CIN-CON-MSG <LOC .OBJ>>
<TELL THE <LOC .OBJ> " you see:" CR>)>
<TELL " " A .OBJ CR>)>
<SET OBJ <NEXT? .OBJ>>>
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)
(T
<COND (<RT-SEE-INSIDE? .OBJ>
<RT-PRINT-CONTENTS-3 .OBJ>)>
<SET OBJ <NEXT? .OBJ>>)>>>
<ROUTINE RT-DO-WALK (DIR1 "OPTIONAL" (DIR2 <>) (DIR3 <>) "AUX" X)
<SETG GL-P-WALK-DIR .DIR1>
<SET X <RT-PERFORM ,V?WALK .DIR1>>
<COND (<AND <MC-T? .DIR2>
<NOT <EQUAL? .X <> ,FATAL-VALUE>>>
<SETG GL-P-WALK-DIR .DIR2>
<SET X <RT-PERFORM ,V?WALK .DIR2>>
<COND (<AND <MC-T? .DIR3>
<NOT <EQUAL? .X <> ,FATAL-VALUE>>>
<SETG GL-P-WALK-DIR .DIR3>
<SET X <RT-PERFORM ,V?WALK .DIR3>>)>)>
<RETURN .X>>
<ROUTINE RT-WHO-SAYS? ()
<COND (<AND <MC-HERE? <RT-META-LOC ,CH-HOLMES>>
<MC-ISNOT? ,CH-HOLMES ,FL-ASLEEP>
<MC-ISNOT? ,CH-HOLMES ,FL-LOCKED>>
<RETURN ,CH-HOLMES>)
(<AND <MC-HERE? <RT-META-LOC ,CH-WIGGINS>>
<MC-ISNOT? ,CH-WIGGINS ,FL-ASLEEP>
<MC-ISNOT? ,CH-WIGGINS ,FL-LOCKED>>
<RETURN ,CH-WIGGINS>)
(T
<RFALSE>)>>
<ROUTINE RT-TRANSCRIPT (STR)
<DIROUT ,K-D-SCR-OFF>
<TELL CR "Transcript: " .STR CR>
<RT-VERSION-MSG>
<DIROUT ,K-D-SCR-ON>>
<ROUTINE RT-QSR ("AUX" KEY)
<IFSOUND <KILL-SOUNDS>>
<TELL "The game is no longer afoot." CR CR>
<REPEAT ()
<TELL "Do you wish to: (1) Quit, (2) Restart, (3) Restore, (4) Hints">
<COND (<MC-T? ,GL-CAN-UNDO>
<TELL ", (5) Undo">)>
<TELL " ?" CR>
<SET KEY <INPUT 1>>
<COND (<EQUAL? .KEY 49>
<QUIT>
<TELL "Quit failed." CR>)
(<EQUAL? .KEY 50>
<RESTART>
<TELL "Restart failed." CR>)
(<EQUAL? .KEY 51>
<COND (<MC-T? ,GL-DEBUG-FLAG>
<V-REFRESH>)>
<RT-P-CLEAR>
<PUTB ,GL-OOPS-INBUF 1 0>
<RESTORE>
<TELL "Restore failed." CR>)
(<EQUAL? .KEY 52>
<V-HINT>
<V-REFRESH>
<AGAIN>)
(<AND <EQUAL? .KEY 53>
<MC-T? ,GL-CAN-UNDO>>
<V-UNDO>)>>>
<ROUTINE V-YES ()
<TELL ,K-GOOD-SHOW-MSG CR>
<RFATAL>>
<ROUTINE V-NO ()
<TELL ,K-PITY-MSG CR>
<RFATAL>>
<ROUTINE V-MAYBE ()
<TELL ,K-MAYBE-MSG CR>
<RFATAL>>
<ROUTINE V-DESC-LEVEL ()
<TELL "[">
<COND (<MC-VERB-WORD? VERBOSE>
<SETG GL-DESC-LEVEL 2>
<TELL "Verbose">)
(<MC-VERB-WORD? BRIEF>
<SETG GL-DESC-LEVEL 1>
<TELL "Brief">)
(<MC-VERB-WORD? SUPER SUPERBRIEF>
<SETG GL-DESC-LEVEL 0>
<TELL "Superbrief">)>
<TELL " descriptions]" CR>
<RFATAL>>
<ROUTINE V-QUIT ()
<TELL "[Your score is " N ,GL-SCORE-CUR " out of " N ,GL-SCORE-MAX
", which earns you a ranking of " <RT-RANK-STR ,GL-SCORE-CUR> ".]" CR CR>
<TELL "Are you sure you want to quit?">
<COND (<RT-GET-YES-NO?>
<QUIT>
;<TELL "Quit failed." CR> ;"QUIT never returns"
;<RFATAL>)
(T
<TELL CR "Continuing." CR>
<RFATAL>)>>
<ROUTINE V-RESTART ()
<TELL "Are you sure you want to restart?">
<COND (<RT-GET-YES-NO?>
<IFSOUND <KILL-SOUNDS>>
<RESTART>
;<TELL "Restart failed." CR> ;"RESTART never returns"
;<RFATAL>)
(T
<TELL CR "Continuing." CR>
<RFATAL>)>>
<ROUTINE V-SAVE ("AUX" X WHO)
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL
CTHE ,CH-HOLMES " nods in approval and says, \"A wise move, Watson. These are
dangerous times.\"" CR CR>)
(<EQUAL? .WHO ,CH-WIGGINS>
<TELL
CTHE ,CH-WIGGINS " glances around in alarm and says, \"Do you know somefing I
don't know?\"" CR CR>)>
<COND (<MC-T? ,GL-DEBUG-FLAG>
<V-REFRESH>)>
<SETG GL-SCORE-STS -1>
<SETG GL-MOVES-STS -1>
<SETG GL-PLACE-STS -1>
<RT-P-CLEAR>
<PUTB ,GL-OOPS-INBUF 1 0>
<IFSOUND <SETG SOUND-QUEUED? <>>
<KILL-SOUNDS>>
<SET X <SAVE>>
<IFSOUND <COND (,SOUND-ON?
<CHECK-LOOPING>)>>
<RT-UPDATE-STATUS-LINE>
<COND (<ZERO? .X>
<TELL "Save failed." CR>
<RFATAL>)
(<EQUAL? .X 1>
<TELL "Save completed." CR>
<RFATAL>)
(T
;<V-REFRESH>
<TELL "Restore completed." CR CR>
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL
CTHE ,CH-HOLMES " looks up and says impatiently, \"Where have you been,
Watson? We have work to do.\"" CR CR>)
(<EQUAL? .WHO ,CH-WIGGINS>
<TELL
CTHE ,CH-WIGGINS " jumps nervously and then says, \"Crikey! You scared me.
Don't sneak up on people that way.\"" CR CR>)>
<RT-DESC-ALL <> T>
<RFATAL>)>>
<ROUTINE V-RESTORE ()
<IFSOUND ;<SET X <GET ,SOUND-FLAG 0>>
<SETG SOUND-QUEUED? <>>
<KILL-SOUNDS>>
<COND (<MC-T? ,GL-DEBUG-FLAG>
<V-REFRESH>)>
<RT-P-CLEAR>
<PUTB ,GL-OOPS-INBUF 1 0>
<RESTORE>
<COND (<BTST <LOWCORE FLAGS> 4>
<RT-INIT-SCREEN T>
<RT-UPDATE-STATUS-LINE>
<LOWCORE FLAGS <BAND <LOWCORE FLAGS> -5>>)>
<TELL "Restore failed." CR>
<IFSOUND <COND (,SOUND-ON?
<CHECK-LOOPING>)>>
;<IFSOUND <COND (<G? .X 1>
<SOUNDS </ .X 16> ,S-START <MOD .X 16>>)>>
<RFATAL>>
<ROUTINE V-SCRIPT ()
<TELL "[Scripting ">
<COND (<MC-VERB-WORD? SCRIPT>
<TELL "on">)
(T
<TELL "off">)>
<TELL "]" CR>
<COND (<MC-VERB-WORD? SCRIPT>
<DIROUT ,K-D-PRN-ON>
<RT-TRANSCRIPT "ON">)
(T
<RT-TRANSCRIPT "OFF">
<DIROUT ,K-D-PRN-OFF>)>
<RFATAL>>
<ROUTINE V-VERSION ()
<RT-VERSION-MSG>
<RFATAL>>
<ROUTINE V-INVENTORY ("AUX" (POCKET <>) PLOC OBJ NXT OLDIT)
<SET OLDIT ,GL-P-IT-OBJECT> ;"get and save current 'it' object"
<SET PLOC <LOC ,TH-POCKET>> ;"get and save pointer to first object"
<SET POCKET <FIRST? ,TH-POCKET>> ;"in pocket and then remove pocket"
<REMOVE ,TH-POCKET>
<SET OBJ <FIRST? ,CH-PLAYER>> ;"save all objects being worn"
<REPEAT () ;" in the TH-X-OBJECT object"
<COND (<MC-F? .OBJ>
<RETURN>)
(T
<SET NXT <NEXT? .OBJ>>
<COND (<AND <MC-IS? .OBJ ,FL-WORN>
<N==? .OBJ ,TH-COTTON-BALLS ,TH-STETHOSCOPE>>
<MOVE .OBJ ,TH-X-OBJECT>)>
<SET OBJ .NXT>)>>
<COND (<FIRST? ,TH-X-OBJECT> ; "describe what player is wearing"
<TELL "You are wearing:" CR>
<RT-PRINT-CONTENTS-1 ,TH-X-OBJECT>)>
<COND (<OR <MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<MC-IS? ,TH-STETHOSCOPE ,FL-WORN>>
<TELL "You have in your ears:" CR " ">
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<MOVE ,TH-COTTON-BALLS ,TH-X-OBJECT>
<TELL A ,TH-COTTON-BALLS "." CR>)
(T
<MOVE ,TH-STETHOSCOPE ,TH-X-OBJECT>
<TELL A ,TH-STETHOSCOPE "." CR>)>)>
<COND (<AND <MC-IS? ,TH-WATSONS-COAT ,FL-WORN>
<FIRST? ,TH-POCKET>>
;"describe what is in pocket"
<TELL "Your pocket contains:" CR>
<RT-PRINT-CONTENTS-1 ,TH-POCKET>)>
<TELL "You are holding:" CR> ; "describe what player is holding"
<RT-PRINT-CONTENTS-1 ,CH-PLAYER>
; "describe any objects in/on any container/surface objects the player has"
;<SET OBJ <FIRST? ,CH-PLAYER>>
;<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)
(T
<COND (<AND <RT-SEE-INSIDE? .OBJ>
<RT-SEE-ANYTHING-IN? .OBJ>>
<RT-CIN-CON-MSG .OBJ>
<TELL THE .OBJ " you see:" CR>
<RT-PRINT-CONTENTS-1 .OBJ>)>
<SET OBJ <NEXT? .OBJ>>)>>
; "move all worn objects saved in the TH-X-OBJECT object back to player"
<RT-MOVE-ALL ,TH-X-OBJECT ,CH-PLAYER>
; "move the pocket object back to it's original location"
<MOVE ,TH-POCKET .PLOC>
<SETG GL-P-IT-OBJECT .OLDIT> ; "restore the previous 'it' object"
<RFATAL>> ; "return fatal"
<ROUTINE V-NOTIFY ()
<SETG GL-SCORE-MSG <NOT ,GL-SCORE-MSG>>
<TELL "[Score Notification ">
<COND (,GL-SCORE-MSG
<TELL "Enabled">)
(T
<TELL "Disabled">)>
<TELL "]" CR>
<RFATAL>>
<ROUTINE V-SCORE ()
<TELL
"[You have " N ,GL-SCORE-CUR " out of " N ,GL-SCORE-MAX " points, which earns
you a ranking of " <RT-RANK-STR ,GL-SCORE-CUR> ".]" CR>
<RFATAL>>
<ROUTINE V-UNDO ()
<IFSOUND ;<SET X <GET ,SOUND-FLAG 0>>
<SETG SOUND-QUEUED? <>>
<KILL-SOUNDS>>
<SETG GL-PLACE-STS 0>
<COND (<ZERO? <IRESTORE>>
<TELL "[UNDO failed.]" CR>)
(T
<TELL "[UNDO is not available.]" CR>)>
<IFSOUND <COND (,SOUND-ON?
<CHECK-LOOPING>)>>
;<IFSOUND <COND (<G? .X 1>
<SOUNDS </ .X 16> ,S-START <MOD .X 16>>)>>>