mirror of
https://github.com/historicalsource/sherlock
synced 2024-07-01 06:05:19 +03:00
744 lines
21 KiB
Plaintext
744 lines
21 KiB
Plaintext
|
<ROUTINE RT-META-IN? (OBJ1 OBJ2)
|
||
|
<REPEAT ()
|
||
|
<COND (<OR <MC-F? .OBJ1>
|
||
|
<IN? .OBJ1 ,ROOMS>
|
||
|
<IN? .OBJ1 ,LOCAL-GLOBALS>>
|
||
|
<RFALSE>)
|
||
|
(<EQUAL? .OBJ1 .OBJ2>
|
||
|
<RTRUE>)>
|
||
|
<SET OBJ1 <LOC .OBJ1>>>>
|
||
|
|
||
|
<ROUTINE RT-SEE-INSIDE? (THING)
|
||
|
<COND (<MC-F? .THING>
|
||
|
<RFALSE>)
|
||
|
(<MC-IS? .THING ,FL-SURFACE>
|
||
|
<RTRUE>)
|
||
|
(<AND <MC-IS? .THING ,FL-CONTAINER>
|
||
|
; "All vehicles are also containers"
|
||
|
;<OR <MC-IS? .THING ,FL-CONTAINER>
|
||
|
<MC-IS? .THING ,FL-VEHICLE>>
|
||
|
<OR <MC-IS? .THING ,FL-OPENED>
|
||
|
<MC-IS? .THING ,FL-TRANSPARENT>>>
|
||
|
<RTRUE>)
|
||
|
(<AND <OR <MC-IS? .THING ,FL-PERSON>
|
||
|
<MC-IS? .THING ,FL-ALIVE>>
|
||
|
<NOT <EQUAL? .THING ,CH-PLAYER>>>
|
||
|
<RTRUE>)
|
||
|
(T
|
||
|
<RFALSE>)>>
|
||
|
|
||
|
<ROUTINE RT-VISIBLE? (OBJ)
|
||
|
<RT-ACCESSIBLE? .OBJ T>>
|
||
|
|
||
|
<GLOBAL LAST-PSEUDO-LOC <>>
|
||
|
|
||
|
<ROUTINE CLOSED? (WLOC VISIBLE?)
|
||
|
<COND (<AND <T? .WLOC>
|
||
|
<MC-ISNOT? .WLOC ,FL-OPENED>
|
||
|
<OR <NOT .VISIBLE?>
|
||
|
<MC-ISNOT? .WLOC ,FL-TRANSPARENT>>
|
||
|
<MC-ISNOT? .WLOC ,FL-SURFACE>
|
||
|
<MC-ISNOT? .WLOC ,FL-ALIVE>
|
||
|
<NOT <IN? .WLOC ,ROOMS>>>
|
||
|
T)>>
|
||
|
|
||
|
<ROUTINE RT-ACCESSIBLE? (OBJ "OPT" (VISIBLE? <>) "AUX" LOC OLOC WLOC
|
||
|
(RMG <GETPT ,GL-PLACE-CUR ,P?GLOBAL>) (RMGL <PTSIZE .RMG>))
|
||
|
; "See if it's a simple case"
|
||
|
<COND (<F? .OBJ>
|
||
|
<SETG GL-CLOSED-OBJECT <>>
|
||
|
<RFALSE>)
|
||
|
(<==? .OBJ ,ROOMS>
|
||
|
<RTRUE>)
|
||
|
(<==? .OBJ ,PSEUDO-OBJECT>
|
||
|
<RETURN <==? ,LAST-PSEUDO-LOC ,GL-PLACE-CUR>>)>
|
||
|
; "Now get the winner's effective room"
|
||
|
<SET WLOC <LOC ,GL-WINNER>>
|
||
|
<REPEAT ()
|
||
|
<COND (<AND <NOT <IN? .WLOC ,ROOMS>>
|
||
|
<NOT <CLOSED? .WLOC .VISIBLE?>>>
|
||
|
; "If he's in a vehicle, then if the vehicle's open
|
||
|
he can reach stuff in the room as well"
|
||
|
<SET WLOC <LOC .WLOC>>)
|
||
|
(T
|
||
|
<RETURN>)>>
|
||
|
<SET OLOC .OBJ>
|
||
|
<COND (<==? .OLOC .WLOC> <RTRUE>)>
|
||
|
<REPEAT ()
|
||
|
<COND (<F? .OLOC> <RFALSE>)>
|
||
|
; "We've hit a room, a global object, or a local global FOR THIS ROOM"
|
||
|
<COND (<OR <IN? .OLOC ,GLOBAL-OBJECTS>
|
||
|
<INTBL? .OLOC .RMG .RMGL 1>>
|
||
|
<COND (<AND <IN? .OLOC ,ROOMS>
|
||
|
<N==? .OLOC .OBJ>>
|
||
|
<RFALSE>)>
|
||
|
<RTRUE>)>
|
||
|
<COND (<IN? .OLOC ,ROOMS> <RFALSE>)>
|
||
|
; "Move up a step, see if we've run into the winner yet"
|
||
|
<COND (<==? <SET OLOC <LOC .OLOC>> .WLOC> <RTRUE>)>
|
||
|
; "Nope, see if this level is closed"
|
||
|
<COND (<CLOSED? .OLOC .VISIBLE?>
|
||
|
<COND (<OR <IN? .OLOC ,GLOBAL-OBJECTS>
|
||
|
<INTBL? .OLOC .RMG .RMGL 1>>
|
||
|
<RTRUE>)>
|
||
|
; "If the new thing is closed, we've lost"
|
||
|
<SETG GL-CLOSED-OBJECT .OLOC>
|
||
|
<SETG GL-IN-OUT T>
|
||
|
<RFALSE>)>>>
|
||
|
|
||
|
;<ROUTINE RT-ACCESSIBLE? (OBJ "OPT" (VISIBLE? <>) "AUX" WLOC OLOC (CLSD-PTR <>)
|
||
|
PTR (CNT 0) TEMP TBL END)
|
||
|
<COND (<MC-F? .OBJ>
|
||
|
<SETG GL-CLOSED-OBJECT <>>
|
||
|
<RFALSE>)
|
||
|
(<EQUAL? .OBJ ,ROOMS>
|
||
|
<RTRUE>)
|
||
|
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
|
||
|
<RETURN <==? ,LAST-PSEUDO-LOC ,GL-PLACE-CUR>>)>
|
||
|
<SET PTR ,GL-LOC-TRAIL>
|
||
|
<SET OLOC .OBJ>
|
||
|
; "Check the object to see if it's in a closed container"
|
||
|
<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 (<CLOSED? .OLOC .VISIBLE?>
|
||
|
<SETG GL-CLOSED-OBJECT .OLOC>
|
||
|
<SETG GL-IN-OUT T>
|
||
|
<COND (<MC-F? .CLSD-PTR>
|
||
|
<SET CLSD-PTR .PTR>)>)>>
|
||
|
<SET PTR <>>
|
||
|
<SET WLOC ,GL-WINNER>
|
||
|
; "Now see if the winner's in a closed thing that doesn't enclose
|
||
|
anything that encloses the object in question"
|
||
|
<REPEAT ()
|
||
|
<COND (<MC-F? .WLOC>
|
||
|
<SETG GL-CLOSED-OBJECT <>>
|
||
|
<SETG GL-IN-OUT <>>
|
||
|
<RFALSE>)
|
||
|
(<SET PTR <INTBL? .WLOC ,GL-LOC-TRAIL .CNT>>
|
||
|
<RETURN>)
|
||
|
(<IN? .WLOC ,ROOMS>
|
||
|
<RETURN>)>
|
||
|
<SET WLOC <LOC .WLOC>>
|
||
|
<COND (<CLOSED? .WLOC .VISIBLE?>
|
||
|
<SETG GL-CLOSED-OBJECT .WLOC>
|
||
|
<SETG GL-IN-OUT <>>
|
||
|
<RFALSE>)>>
|
||
|
<COND (<MC-F? .PTR>
|
||
|
<RFALSE>)
|
||
|
(<AND <MC-T? .CLSD-PTR>
|
||
|
<G? .PTR .CLSD-PTR>>
|
||
|
<RFALSE>)
|
||
|
(T
|
||
|
<RTRUE>)>>
|
||
|
|
||
|
<ROUTINE RT-DONT-ALL? (O I "AUX" L)
|
||
|
<SET L <LOC .O>>
|
||
|
<COND (<OR <MC-F? .L>
|
||
|
<EQUAL? .O .I>>
|
||
|
<RTRUE>)
|
||
|
(<MC-IS? .O ,FL-BODYPART>
|
||
|
<RTRUE>)
|
||
|
(<MC-IS? .O ,FL-NOALL>
|
||
|
<RTRUE>)
|
||
|
(<MC-VERB? TAKE>
|
||
|
<COND (<AND <MC-F? .I>
|
||
|
<RT-META-IN? .O ,GL-WINNER>
|
||
|
; "Let take find things in pockets and stuff if loser
|
||
|
gave a name"
|
||
|
<OR <IN? .O ,GL-WINNER>
|
||
|
<F? <ZGET ,GL-P-NAMW 0>>
|
||
|
<NOT <0? <ZGET ,GL-P-BUTS ,K-P-MATCHLEN>>>>>
|
||
|
<RTRUE>)
|
||
|
(<AND <MC-ISNOT? .O ,FL-TAKEABLE>
|
||
|
<MC-ISNOT? .O ,FL-TRYTAKE>>
|
||
|
<RTRUE>)
|
||
|
(<AND <MC-IS? .L ,FL-PERSON>
|
||
|
<N==? .L .I>>
|
||
|
<RTRUE>)
|
||
|
(<AND <MC-IS? .L ,FL-CONTAINER>
|
||
|
<MC-ISNOT? .L ,FL-OPENED>>
|
||
|
<RTRUE>)
|
||
|
(<MC-T? .I>
|
||
|
<COND (<NOT <EQUAL? .L .I>>
|
||
|
<RTRUE>)
|
||
|
(<RT-SEE-INSIDE? .I>
|
||
|
<RFALSE>)
|
||
|
(T
|
||
|
<RTRUE>)>)
|
||
|
(<OR <EQUAL? .L ,GL-PLACE-CUR>
|
||
|
<RT-SEE-INSIDE? .L>>
|
||
|
<RFALSE>)
|
||
|
(T
|
||
|
<RTRUE>)>)
|
||
|
(<MC-VERB? DROP PUT PUT-ON THROW THROW-OVER>
|
||
|
<COND (<EQUAL? .O ,TH-POCKET>
|
||
|
<RTRUE>)
|
||
|
(<EQUAL? .L ,TH-POCKET>
|
||
|
<RTRUE>)
|
||
|
(<MC-IS? .O ,FL-WORN>
|
||
|
<RTRUE>)
|
||
|
(<EQUAL? .L ,GL-WINNER>
|
||
|
<RFALSE>)
|
||
|
(T
|
||
|
<RTRUE>)>)
|
||
|
(T
|
||
|
<RFALSE>)>>
|
||
|
|
||
|
; "tell token output routines"
|
||
|
|
||
|
<ROUTINE DPRINT (O "AUX" X)
|
||
|
<COND (<AND <FSET? .O ,FL-HAS-SDESC>
|
||
|
<T? <SET X <GETP .O ,P?ACTION>>>>
|
||
|
<ZAPPLY .X ,K-M-SDESC>)
|
||
|
(T
|
||
|
<PRINTD .O>)>>
|
||
|
|
||
|
<ROUTINE RT-A-PRINT ("OPTIONAL" (O <>))
|
||
|
<RT-THEO-PRINT .O <> ,K-DESC-A>
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-THEO-PRINT ("OPTIONAL" (O <>) (CAP? <>) (CLASS ,K-DESC-THE))
|
||
|
<COND (<MC-F? .O>
|
||
|
<SET O ,GL-PRSO>)>
|
||
|
<COND (.CAP?
|
||
|
<DIROUT ,K-D-SCR-OFF>
|
||
|
<DIROUT ,K-D-TBL-ON ,GL-DIROUT-TBL>)>
|
||
|
<PROG ()
|
||
|
<COND (<MC-ISNOT? .O ,FL-NOARTC>
|
||
|
<COND (<MC-IS? .O ,FL-YOUR>
|
||
|
<TELL "your">)
|
||
|
(<==? .CLASS ,K-DESC-ANY>
|
||
|
<TELL "any">)
|
||
|
(<OR <==? .CLASS ,K-DESC-THE>
|
||
|
<AND <MC-IS? .O ,FL-PLURAL>
|
||
|
<MC-IS? .O ,FL-PERSON>>>
|
||
|
<TELL "the">)
|
||
|
(<AND <MC-IS? .O ,FL-PLURAL>
|
||
|
<MC-ISNOT? .O ,FL-PERSON>>
|
||
|
<TELL "some">)
|
||
|
(<N==? .O ,LG-WATER>
|
||
|
<COND (<MC-IS? .O ,FL-VOWEL>
|
||
|
<TELL "an">)
|
||
|
(T
|
||
|
<TELL "a">)>)>
|
||
|
<PRINTC !\ >)
|
||
|
(<MC-IS? .O ,FL-HAS-SDESC>
|
||
|
; "Know we have NOARTC set here"
|
||
|
<APPLY <GETP .O ,P?ACTION> ,K-M-SDESC .CLASS>
|
||
|
<RETURN>)>
|
||
|
<COND (<AND <==? .O ,CH-ME> .CAP?> ;"to print YOU instead of YOURSELF"
|
||
|
<TELL "you">) ;"at beginning of sentence - GTB"
|
||
|
(T
|
||
|
<TELL D .O>)>>
|
||
|
<COND (.CAP?
|
||
|
<DIROUT ,K-D-TBL-OFF>
|
||
|
<DIROUT ,K-D-SCR-ON>
|
||
|
<COND (<AND <G=? <SET CAP? <GETB ,GL-DIROUT-TBL 2>> !\a>
|
||
|
<L=? .CAP? !\z>>
|
||
|
<PUTB ,GL-DIROUT-TBL 2 <- .CAP? 32>>)>
|
||
|
<PRINTT <ZREST ,GL-DIROUT-TBL 2> <ZGET ,GL-DIROUT-TBL 0>>)>
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-CTHEO-PRINT ("OPTIONAL" (O <>))
|
||
|
<RT-THEO-PRINT .O T>>
|
||
|
|
||
|
<ROUTINE RT-THEI-PRINT ("OPTIONAL" (I <>))
|
||
|
<COND (<MC-F? .I>
|
||
|
<SET I ,GL-PRSI>)>
|
||
|
<RT-THEO-PRINT .I>>
|
||
|
|
||
|
<ROUTINE RT-CTHEI-PRINT ("OPTIONAL" (I <>))
|
||
|
<COND (<MC-F? .I>
|
||
|
<SET I ,GL-PRSI>)>
|
||
|
<RT-THEO-PRINT .I T>>
|
||
|
|
||
|
|
||
|
<ROUTINE RT-PRINT-SPACES (N "AUX" AMT)
|
||
|
<REPEAT ()
|
||
|
<COND (<G? .N ,GL-BLANKS-LEN>
|
||
|
<SET AMT ,GL-BLANKS-LEN>)
|
||
|
(T
|
||
|
<SET AMT .N>)>
|
||
|
<PRINTT ,GL-BLANKS .AMT>
|
||
|
<COND (<L=? <SET N <- .N .AMT>> 0>
|
||
|
<RTRUE>)>>>
|
||
|
|
||
|
<ROUTINE SAY-NUMBER (N)
|
||
|
<REPEAT ((X 10000))
|
||
|
<COND (<L? .N .X>
|
||
|
<TELL " ">)
|
||
|
(T
|
||
|
<RETURN>)>
|
||
|
<COND (<L? <SET X </ .X 10>> 10>
|
||
|
<RETURN>)>>
|
||
|
<TELL N .N>>
|
||
|
|
||
|
<ROUTINE RT-UPDATE-STATUS-LINE ()
|
||
|
<COND (<BTST <LOWCORE FLAGS> 4>
|
||
|
<RT-INIT-SCREEN T>
|
||
|
<LOWCORE FLAGS <BAND <LOWCORE FLAGS> <XORB 4 -1>>>)>
|
||
|
<SCREEN ,K-S-WIN>
|
||
|
<HLIGHT ,K-H-INV>
|
||
|
<COND (<NOT <EQUAL? ,GL-PLACE-CUR ,GL-PLACE-STS>>
|
||
|
<COND (,GL-SHORT-STAT?
|
||
|
<CURSET ,GL-SPLIT-ROW 1>)
|
||
|
(T
|
||
|
<CURSET ,GL-SPLIT-ROW 2>)>
|
||
|
<RT-PRINT-SPACES ,GL-STAT-MAX-ROOM>
|
||
|
<CURSET ,GL-SPLIT-ROW 2>
|
||
|
<COND (<RT-SAY-ROOM-NAME-IF-LIT ,GL-PLACE-CUR <> T>
|
||
|
<SETG GL-PLACE-STS ,GL-PLACE-CUR>)
|
||
|
(T
|
||
|
<SETG GL-PLACE-STS -1>)>)>
|
||
|
<COND (<N==? ,GL-SCORE-CUR ,GL-SCORE-STS>
|
||
|
<SETG GL-SCORE-STS ,GL-SCORE-CUR>
|
||
|
<CURSET ,GL-SPLIT-ROW <+ ,GL-SCORE-HEADER-LEN ,GL-STAT-S-POS>>
|
||
|
<SAY-NUMBER ,GL-SCORE-CUR>)>
|
||
|
<CURSET ,GL-SPLIT-ROW ,GL-STAT-T-POS>
|
||
|
<COND (,GL-SHORT-STAT?
|
||
|
<RT-CLK-DOW-MSG <+ ,K-DOW-DW ,K-DOW-SN>>
|
||
|
<TELL " ">
|
||
|
<RT-CLK-NTI-MSG <+ ,K-NTI-SM ,K-NTI-HH ,K-NTI-MM>>)
|
||
|
(T
|
||
|
<RT-CLK-DOW-MSG <+ ,K-DOW-DW ,K-DOW-EN>>
|
||
|
<CURSET ,GL-SPLIT-ROW <+ 10 ,GL-STAT-T-POS>>
|
||
|
<RT-CLK-NTI-MSG <+ ,K-NTI-HH ,K-NTI-MM ,K-NTI-SS>>)>
|
||
|
<HLIGHT ,K-H-NRM>
|
||
|
<SCREEN ,K-S-NOR>
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-REFER-TO-MSG ()
|
||
|
<TELL "[To what are you referring?]" CR>
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-SAY-ROOM-NAME-IF-LIT ("OPT" (HERE ,GL-PLACE-CUR) (FORCE? <>)
|
||
|
(SL? <>) "AUX" LEN (MAXLEN 300))
|
||
|
<COND (.SL?
|
||
|
<SET MAXLEN ,GL-STAT-MAX-ROOM>)>
|
||
|
<COND (<OR .FORCE? <MC-T? ,GL-NOW-LIT?>>
|
||
|
<DIROUT ,K-D-SCR-OFF>
|
||
|
<DIROUT ,K-D-TBL-ON ,GL-DIROUT-TBL>
|
||
|
<TELL D .HERE>
|
||
|
<DIROUT ,K-D-TBL-OFF>
|
||
|
<DIROUT ,K-D-SCR-ON>
|
||
|
<SET LEN <ZGET ,GL-DIROUT-TBL 0>>
|
||
|
<SET LEN <+ .LEN 1>>
|
||
|
<ZPUT ,GL-DIROUT-TBL 0 0>
|
||
|
<COND (<G? .LEN 1>
|
||
|
<REPEAT ((LC !\ ) X (CNT 2))
|
||
|
<SET X <GETB ,GL-DIROUT-TBL .CNT>>
|
||
|
<COND (<AND <G=? .X !\a>
|
||
|
<L=? .X !\z>>
|
||
|
<COND (<OR <==? .CNT 2>
|
||
|
<==? .LC !\ >>
|
||
|
<SET X <- .X 32>>)>)>
|
||
|
<PRINTC .X>
|
||
|
<SET LC .X>
|
||
|
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
|
||
|
<RETURN>)>
|
||
|
<COND (<G? .CNT .MAXLEN> <RETURN>)>>)
|
||
|
(T
|
||
|
<PRINTC <ZGET ,GL-DIROUT-TBL 2>>)>
|
||
|
<RTRUE>)
|
||
|
(T
|
||
|
<TELL "Darkness">
|
||
|
<RFALSE>)>>
|
||
|
|
||
|
<ROUTINE RT-DESCRIBE-PLACE ("OPTIONAL" (PLACE <>) (LOOK <>))
|
||
|
; "if no place is passed as an argument use gl-place-cur"
|
||
|
<COND (<MC-F? .PLACE>
|
||
|
<SET PLACE ,GL-PLACE-CUR>)>
|
||
|
; "check if this place is lit"
|
||
|
<COND (<MC-F? <RT-IS-LIT? .PLACE T>>
|
||
|
<TELL ,K-TOO-DARK-MSG CR>
|
||
|
<RTRUE>)>
|
||
|
; "display room description (DESC) in bold"
|
||
|
<HLIGHT ,K-H-BLD>
|
||
|
<RT-SAY-ROOM-NAME-IF-LIT .PLACE T>
|
||
|
<TELL CR CR>
|
||
|
<HLIGHT ,K-H-NRM>
|
||
|
; "determine description context"
|
||
|
<COND (<MC-T? .LOOK>
|
||
|
<RT-EXEC-RM-DESCFCN .PLACE ,K-M-DESC-3>)
|
||
|
(<MC-ISNOT? .PLACE ,FL-TOUCHED>
|
||
|
<MC-MAKE .PLACE ,FL-TOUCHED>
|
||
|
<RT-EXEC-RM-DESCFCN .PLACE ,K-M-DESC-1>)
|
||
|
(<EQUAL? ,GL-DESC-LEVEL 2>
|
||
|
<RT-EXEC-RM-DESCFCN .PLACE ,K-M-DESC-2>)
|
||
|
(<EQUAL? ,GL-DESC-LEVEL 1>
|
||
|
<RTRUE>)
|
||
|
(<EQUAL? ,GL-DESC-LEVEL 0>
|
||
|
<RFALSE>)>>
|
||
|
|
||
|
<ROUTINE RT-EXEC-RM-DESCFCN (PLACE CONTEXT "AUX" DF)
|
||
|
<COND (<FSET? .PLACE ,FL-HAS-DESCFCN>
|
||
|
<RETURN <NOT <APPLY <GETP .PLACE ,P?ACTION> .CONTEXT>>>)
|
||
|
(T <RTRUE>)>>
|
||
|
|
||
|
<ROUTINE RT-DESCFCN-CONTEXT (CONTEXT)
|
||
|
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2 ,K-M-DESC-3>
|
||
|
<RTRUE>)
|
||
|
(T
|
||
|
<RFALSE>)>>
|
||
|
|
||
|
<ROUTINE RT-DESC-ALL ("OPTIONAL" (PLACE <>) (LOOK <>)
|
||
|
"AUX" (HOLMES-IN-HOUSE? <>))
|
||
|
<COND (<RT-DESCRIBE-PLACE .PLACE .LOOK>
|
||
|
<RT-DESCRIBE-PLACE-CONTENTS .PLACE .LOOK>)>
|
||
|
<COND (<MC-F? <RT-IS-LIT? .PLACE T>>
|
||
|
<RTRUE>)
|
||
|
(<MC-F? ,GL-PUPPY-MSG?>
|
||
|
<SETG GL-PUPPY-MSG? T>)
|
||
|
(<MC-T? ,GL-PUPPY>
|
||
|
<COND (<EQUAL? ,GL-PUPPY ,CH-HOLMES>
|
||
|
<TELL CR
|
||
|
<RT-PICK-NEXT ,GL-HOLMES-DESC-TXT>>
|
||
|
<COND (<MC-HERE? ,RM-ENTRY-HALL
|
||
|
,RM-PARLOUR
|
||
|
,RM-VESTIBULE
|
||
|
,RM-HOLMES-STUDY
|
||
|
,RM-HOLMES-BEDROOM>
|
||
|
<SET HOLMES-IN-HOUSE? T>)>
|
||
|
<COND (<MC-T? .LOOK>
|
||
|
<COND (<IN? ,CH-HOLMES ,TH-BOAT>
|
||
|
<TELL ,K-SEASICK-MSG>)
|
||
|
(<OR <IN? ,CH-HOLMES ,TH-HANSOM-CAB>
|
||
|
<IN? ,CH-HOLMES ,TH-GROWLER-CAB>>
|
||
|
<TELL ,K-SITTING-QUIETLY-MSG>)
|
||
|
(.HOLMES-IN-HOUSE?
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-HOLMES-HOUSE-LOOK-TXT>>)
|
||
|
(<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-HOLMES-INDOORS-LOOK-TXT>>)
|
||
|
(T
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-HOLMES-OUTDOORS-LOOK-TXT>>)>
|
||
|
<TELL "." CR>)
|
||
|
(<EQUAL? ,GL-DESC-LEVEL 2 1>
|
||
|
<COND (.HOLMES-IN-HOUSE?
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-HOLMES-HOUSE-ENTER-TXT>>)
|
||
|
(<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-HOLMES-INDOORS-ENTER-TXT>>)
|
||
|
(T
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-HOLMES-OUTDOORS-ENTER-TXT>>)>
|
||
|
<TELL "." CR>)>)
|
||
|
(<EQUAL? ,GL-PUPPY ,CH-WIGGINS>
|
||
|
<TELL CR
|
||
|
<RT-PICK-NEXT ,GL-WIGGINS-DESC-TXT>>
|
||
|
<COND (<MC-T? .LOOK>
|
||
|
<COND (<IN? ,CH-WIGGINS ,TH-BOAT>
|
||
|
<TELL ,K-ENJOYING-RIDE-MSG>)
|
||
|
(<OR <IN? ,CH-WIGGINS ,TH-HANSOM-CAB>
|
||
|
<IN? ,CH-WIGGINS ,TH-GROWLER-CAB>>
|
||
|
<TELL ,K-FIDGETING-MSG>)
|
||
|
(T
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-WIGGINS-LOOK-TXT>>)>
|
||
|
<TELL "." CR>)
|
||
|
(<EQUAL? ,GL-DESC-LEVEL 2 1>
|
||
|
<TELL <RT-PICK-NEXT
|
||
|
,GL-WIGGINS-ENTER-TXT> "." CR>)>)>)>
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-GOTO (NEWPLACE "AUX" X NEWLIT? OLDPLACE AMP? SS?)
|
||
|
<SET OLDPLACE ,GL-PLACE-CUR>
|
||
|
<MOVE ,CH-PLAYER .NEWPLACE>
|
||
|
<SETG GL-PLACE-CUR .NEWPLACE>
|
||
|
<SET NEWLIT? <RT-IS-LIT?>>
|
||
|
<MOVE ,CH-PLAYER .OLDPLACE>
|
||
|
<SETG GL-PLACE-CUR .OLDPLACE>
|
||
|
<COND (<MC-F? .NEWLIT?>
|
||
|
; "Moved to get it out of preload"
|
||
|
<TOO-DARK-TO-GO .NEWPLACE>
|
||
|
<RTRUE>)>
|
||
|
<SET X <APPLY <GETP ,GL-PLACE-CUR ,P?ACTION> ,K-M-EXIT>>
|
||
|
<COND (<AND <MC-ISNOT? .OLDPLACE ,FL-INDOORS>
|
||
|
<MC-ISNOT? .NEWPLACE ,FL-INDOORS>>
|
||
|
<RT-CLOCK-JMP 0 5 0>)>
|
||
|
<SETG GL-PLACE-PRV .OLDPLACE>
|
||
|
<SETG GL-PLACE-CUR .NEWPLACE>
|
||
|
<SETG GL-NOW-LIT? <RT-IS-LIT?>>
|
||
|
<MOVE ,CH-PLAYER ,GL-PLACE-CUR>
|
||
|
<SET X <APPLY <GETP ,GL-PLACE-CUR ,P?ACTION> ,K-M-ENTERING>>
|
||
|
<COND (<MC-T? ,GL-PUPPY>
|
||
|
<MOVE ,GL-PUPPY <LOC ,CH-PLAYER>>)
|
||
|
(<AND <MC-T? ,GL-FORMER-PUPPY>
|
||
|
<IN? ,GL-FORMER-PUPPY ,GL-PLACE-CUR>
|
||
|
<NOT <FSET? ,GL-FORMER-PUPPY ,FL-ASLEEP>>>
|
||
|
<SETG GL-PUPPY ,GL-FORMER-PUPPY>
|
||
|
<SETG GL-FORMER-PUPPY <>>)>
|
||
|
<RT-DESC-ALL>
|
||
|
<SET AMP? <AND <IN? ,TH-ETHERIUM-AMPOULE ,CH-PLAYER>
|
||
|
<NOT <FSET? ,TH-ETHERIUM-AMPOULE ,FL-BROKEN>>>>
|
||
|
<SET SS? <MC-IS? ,TH-STETHOSCOPE ,FL-WORN>>
|
||
|
<COND (<OR .AMP? .SS?>
|
||
|
<HOLMES-COMPLAINS .AMP? .SS?>)>
|
||
|
<SET X <APPLY <GETP ,GL-PLACE-CUR ,P?ACTION> ,K-M-ENTERED>>
|
||
|
<RT-RESET-THEM>
|
||
|
<COND (<IN? ,TH-ETHERIUM-GAS ,GL-PLACE-CUR>
|
||
|
<RT-SMELL-ETHERIUM?>)>
|
||
|
;"Check if etherium is in the room."
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-RESET-THEM ()
|
||
|
<COND (<NOT <RT-VISIBLE? ,GL-P-IT-OBJECT>>
|
||
|
<SETG GL-P-IT-OBJECT ,TH-NOT-HERE-OBJECT>)>
|
||
|
<COND (<NOT <RT-VISIBLE? ,GL-P-THEM-OBJECT>>
|
||
|
<SETG GL-P-THEM-OBJECT ,TH-NOT-HERE-OBJECT>)>
|
||
|
<COND (<NOT <RT-VISIBLE? ,GL-P-HIM-OBJECT>>
|
||
|
<SETG GL-P-HIM-OBJECT ,TH-NOT-HERE-OBJECT>)>
|
||
|
<COND (<NOT <RT-VISIBLE? ,GL-P-HER-OBJECT>>
|
||
|
<SETG GL-P-HER-OBJECT ,TH-NOT-HERE-OBJECT>)>
|
||
|
<RTRUE>>
|
||
|
|
||
|
<ROUTINE RT-UPDATE-SCORE ("OPTIONAL" (PTS 1))
|
||
|
<SETG GL-SCORE-CUR <+ ,GL-SCORE-CUR .PTS>>
|
||
|
<RT-NEW-SCORE-MSG .PTS>>
|
||
|
|
||
|
<ROUTINE RT-UPDATE-MOVES ("OPTIONAL" (MVS 1))
|
||
|
<COND (<MC-T? ,GL-CLOCK-WAIT>
|
||
|
<RFALSE>)
|
||
|
(<MC-T? ,GL-CLOCK-STOP>
|
||
|
<RFALSE>)>
|
||
|
<SETG GL-MOVES-CUR <+ ,GL-MOVES-CUR .MVS>>>
|
||
|
|
||
|
<ROUTINE RT-UPDATE-CLOCK ("OPTIONAL" (HRS 0) (MIN 0) (SEC 0))
|
||
|
<COND (<OR <MC-NOTZERO? .HRS>
|
||
|
<MC-NOTZERO? .MIN>
|
||
|
<MC-NOTZERO? .SEC>>
|
||
|
<RT-CLOCK-INC-SET .HRS .MIN .SEC>)>
|
||
|
<RT-CLOCK-INC>>
|
||
|
|
||
|
<ROUTINE RT-MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL (V <>) PTBL OBJ1
|
||
|
TMP X (TOUCH-VERB? <>) (MYCROFT? <>) TV)
|
||
|
<REPEAT ()
|
||
|
<SET CNT 0>
|
||
|
<SET OBJ <>>
|
||
|
<SET PTBL T>
|
||
|
<SETG GL-P-MULT? <>>
|
||
|
<COND (<NOT <MC-HERE? GL-P-QCONTEXT-RM>>
|
||
|
<SETG GL-P-QCONTEXT-TH <>>)>
|
||
|
<SETG GL-P-GOOD <RT-PARSER>>
|
||
|
<COND (<MC-T? ,GL-P-GOOD>
|
||
|
<SET ICNT <GET ,GL-P-PRSI ,K-P-MATCHLEN>>
|
||
|
<SET OCNT <GET ,GL-P-PRSO ,K-P-MATCHLEN>>
|
||
|
<COND (<AND <MC-T? ,GL-P-IT-OBJECT>
|
||
|
<RT-ACCESSIBLE? ,GL-P-IT-OBJECT>>
|
||
|
<SET TMP <>>
|
||
|
<REPEAT ()
|
||
|
<COND (<G? <SET CNT <+ .CNT 1>> .ICNT>
|
||
|
<RETURN>)
|
||
|
(T
|
||
|
<COND (<EQUAL? <GET ,GL-P-PRSI .CNT> ,TH-IT>
|
||
|
<PUT ,GL-P-PRSI .CNT ,GL-P-IT-OBJECT>
|
||
|
<SET TMP T>
|
||
|
<RETURN>)>)>>
|
||
|
<COND (<ZERO? .TMP>
|
||
|
<SET CNT 0>
|
||
|
<REPEAT ()
|
||
|
<COND (<G? <SET CNT <+ .CNT 1>> .OCNT>
|
||
|
<RETURN>)
|
||
|
(T
|
||
|
<COND (<EQUAL? <GET ,GL-P-PRSO .CNT> ,TH-IT>
|
||
|
<PUT ,GL-P-PRSO .CNT ,GL-P-IT-OBJECT>
|
||
|
<RETURN>)>)>>)>
|
||
|
<SET CNT 0>)>
|
||
|
<SET NUM <COND (<ZERO? .OCNT>
|
||
|
.OCNT)
|
||
|
(<G? .OCNT 1>
|
||
|
<SET TBL ,GL-P-PRSO>
|
||
|
<COND (<ZERO? .ICNT>
|
||
|
<SET OBJ <>>)
|
||
|
(T
|
||
|
<SET OBJ <GET ,GL-P-PRSI 1>>)>
|
||
|
.OCNT)
|
||
|
(<G? .ICNT 1>
|
||
|
<SET PTBL <>>
|
||
|
<SET TBL ,GL-P-PRSI>
|
||
|
<SET OBJ <GET ,GL-P-PRSO 1>>
|
||
|
.ICNT)
|
||
|
(T 1)>>
|
||
|
<COND (<AND <ZERO? .OBJ>
|
||
|
<EQUAL? .ICNT 1>>
|
||
|
<SET OBJ <GET ,GL-P-PRSI 1>>)>
|
||
|
<COND (<MC-VERB? WALK>
|
||
|
<SET V <RT-PERFORM ,GL-PRSA ,GL-PRSO>>)
|
||
|
(<ZERO? .NUM>
|
||
|
<COND (<0? <P-SONUMS ,GL-P-SYNTAX>>
|
||
|
<SET V <RT-PERFORM ,GL-PRSA>>
|
||
|
<SETG GL-PRSO <>>)
|
||
|
(<ZERO? ,GL-NOW-LIT?>
|
||
|
<RT-P-CLEAR>
|
||
|
<TELL ,K-TOO-DARK-MSG CR>)
|
||
|
(T
|
||
|
<RT-P-CLEAR>
|
||
|
<TELL "[There isn't anything to ">
|
||
|
<SET TMP <GET ,GL-P-ITBL ,K-P-VERBN>>
|
||
|
<COND (<RT-TALK-VERB?>
|
||
|
<TELL "talk to">)
|
||
|
(<OR <MC-T? ,GL-P-MERGED>
|
||
|
<MC-T? ,GL-P-ORPH>>
|
||
|
<PRINTB <GET .TMP 0>>)
|
||
|
(T
|
||
|
<SET V <RT-WORD-PRINT <GETB .TMP 2>
|
||
|
<GETB .TMP 3>>>)>
|
||
|
<TELL ".]" CR>
|
||
|
<SET V <>>)>)
|
||
|
(T
|
||
|
<SET X 0>
|
||
|
<COND (<G? .NUM 1>
|
||
|
<SETG GL-P-MULT? T>)>
|
||
|
<SET TMP <>>
|
||
|
<REPEAT ()
|
||
|
<COND (<G? <SET CNT <+ .CNT 1>> .NUM>
|
||
|
<COND (<G? .X 0>
|
||
|
<TELL "[The ">
|
||
|
<COND (<NOT <EQUAL? .X .NUM>>
|
||
|
<TELL "other ">)>
|
||
|
<TELL "object">
|
||
|
<COND (<NOT <EQUAL? .X 1>>
|
||
|
<TELL "s">)>
|
||
|
<TELL " that you mentioned ">
|
||
|
<COND (<NOT <EQUAL? .X 1>>
|
||
|
<TELL "are">)
|
||
|
(T
|
||
|
<TELL "is">)>
|
||
|
<TELL "n't here.]" CR>)
|
||
|
(<ZERO? .TMP>
|
||
|
<RT-REFER-TO-MSG>)>
|
||
|
<RETURN>)
|
||
|
(T
|
||
|
<COND (<MC-T? .PTBL>
|
||
|
<SET OBJ1 <GET ,GL-P-PRSO .CNT>>)
|
||
|
(T
|
||
|
<SET OBJ1 <GET ,GL-P-PRSI .CNT>>)>
|
||
|
<COND (<OR <G? .NUM 1>
|
||
|
<EQUAL? <GET <GET ,GL-P-ITBL ,K-P-NC1> 0>
|
||
|
,W?ALL ,W?EVERYTHING>>
|
||
|
<COND (<EQUAL? .OBJ1 ,TH-NOT-HERE-OBJECT>
|
||
|
<INC X>
|
||
|
<AGAIN>)
|
||
|
(<AND <EQUAL? ,GL-P-GET-FLAGS ,K-P-ALL>
|
||
|
<RT-DONT-ALL? .OBJ1 .OBJ>>
|
||
|
<AGAIN>)
|
||
|
(<NOT <RT-ACCESSIBLE? .OBJ1>>
|
||
|
<AGAIN>)
|
||
|
(<EQUAL? .OBJ1 ,CH-PLAYER>
|
||
|
<AGAIN>)
|
||
|
(T
|
||
|
<COND (<EQUAL? .OBJ1 ,TH-IT>
|
||
|
<TELL CTHE ,GL-P-IT-OBJECT>)
|
||
|
(T
|
||
|
<TELL CTHE .OBJ1>)>
|
||
|
<TELL ": ">)>)>
|
||
|
<SET TMP T>
|
||
|
<SETG GL-PRSO <COND (<MC-T? .PTBL>
|
||
|
.OBJ1)
|
||
|
(T
|
||
|
.OBJ)>>
|
||
|
<SETG GL-PRSI <COND (<MC-T? .PTBL>
|
||
|
.OBJ)
|
||
|
(T
|
||
|
.OBJ1)>>
|
||
|
; "DEB -- Do real visibility or accessibility tests here."
|
||
|
<COND (<AND <==? ,GL-WINNER ,CH-BUTLER>
|
||
|
<EQUAL? <ZGET ,GL-P-NAMW 0>
|
||
|
,W?HOLMES ,W?MYCROFT>>
|
||
|
<SET MYCROFT? T>
|
||
|
<SET TOUCH-VERB? <>>)>
|
||
|
<COND (<AND <F? .MYCROFT?>
|
||
|
<N==? ,GL-PRSA ,V?FIND>
|
||
|
<OR <SET TOUCH-VERB? <RT-TOUCH-VERB?>>
|
||
|
<SET TV <INTBL? ,GL-PRSA <REST ,GL-SEE-VERBS 2>
|
||
|
<GET ,GL-SEE-VERBS 0>>>>>
|
||
|
<COND (<AND <MC-T? ,GL-PRSO>
|
||
|
<NOT <RT-VISIBLE? ,GL-PRSO>>>
|
||
|
<RT-CANT-SEE-ANY-MSG ,GL-PRSO>
|
||
|
<COND (<L=? .OCNT 1>
|
||
|
<SET V ,FATAL-VALUE>
|
||
|
<RETURN>)>
|
||
|
<AGAIN>)
|
||
|
(<AND <MC-T? ,GL-PRSI>
|
||
|
<NOT <RT-VISIBLE? ,GL-PRSI>>>
|
||
|
<RT-CANT-SEE-ANY-MSG ,GL-PRSI>
|
||
|
<COND (<L=? .ICNT 1>
|
||
|
<SET V ,FATAL-VALUE>
|
||
|
<RETURN>)>
|
||
|
<AGAIN>)>)>
|
||
|
<COND (.TOUCH-VERB?
|
||
|
<COND (<AND <MC-T? ,GL-PRSO>
|
||
|
<NOT <RT-ACCESSIBLE? ,GL-PRSO>>>
|
||
|
<RT-CANT-TOUCH-MSG ,GL-PRSO ,GL-CLOSED-OBJECT ,GL-IN-OUT>
|
||
|
<COND (<L=? .OCNT 1>
|
||
|
<SET V ,FATAL-VALUE>
|
||
|
<RETURN>)>
|
||
|
<AGAIN>)
|
||
|
(<AND <MC-T? ,GL-PRSI>
|
||
|
<NOT <RT-ACCESSIBLE? ,GL-PRSI>>>
|
||
|
<RT-CANT-TOUCH-MSG ,GL-PRSI ,GL-CLOSED-OBJECT ,GL-IN-OUT>
|
||
|
<COND (<L=? .ICNT 1>
|
||
|
<SET V ,FATAL-VALUE>
|
||
|
<RETURN>)>
|
||
|
<AGAIN>)>)>
|
||
|
; "DEB -- End real visibility and accessibility tests."
|
||
|
<SET V <RT-PERFORM ,GL-PRSA ,GL-PRSO ,GL-PRSI>>
|
||
|
<COND (<EQUAL? .V ,FATAL-VALUE>
|
||
|
<RETURN>)>)>>
|
||
|
<COND (,GL-P-OVERFLOW
|
||
|
<TELL CR
|
||
|
"[Note: There are so many objects here that a few may have been overlooked.
|
||
|
Please double check to make sure you have accomplished what you intended.]"
|
||
|
CR>)>)>
|
||
|
<COND (<EQUAL? .V ,FATAL-VALUE>
|
||
|
<SETG GL-P-CONT <>>)>)
|
||
|
(T
|
||
|
<SETG GL-P-CONT <>>)>
|
||
|
<COND (<AND <MC-T? ,GL-P-GOOD>
|
||
|
<NOT <EQUAL? .V ,FATAL-VALUE>>
|
||
|
<NOT <SET TV <INTBL? ,GL-PRSA <REST ,GL-GAME-VERBS 2>
|
||
|
<GET ,GL-GAME-VERBS 0>>>>>
|
||
|
<RT-UPDATE-MOVES>
|
||
|
<RT-UPDATE-CLOCK>
|
||
|
<RT-ALARM-CHK>)>
|
||
|
<RT-TIME-OF-DAY-MSG>
|
||
|
<SETG GL-PRSA <>>
|
||
|
<SETG GL-PRSO <>>
|
||
|
<SETG GL-PRSI <>>>>
|
||
|
|
||
|
<ROUTINE RT-TOUCH-VERB? ()
|
||
|
<INTBL? ,GL-PRSA <REST ,GL-TOUCH-VERBS 2> <GET ,GL-TOUCH-VERBS 0>>>
|
||
|
|
||
|
<ROUTINE RT-TALK-VERB? ()
|
||
|
<INTBL? ,GL-PRSA <REST ,GL-TALK-VERBS 2> <GET ,GL-TALK-VERBS 0>>>
|
||
|
|
||
|
; "RT-AC-CH-PLAYER has to be here because called every turn, more or less."
|
||
|
|
||
|
<ROUTINE RT-AC-CH-PLAYER ("OPTIONAL" (CONTEXT <>))
|
||
|
<DEBUGGING? <RT-DEBUG-CH-AC "CH-PLAYER" .CONTEXT>>
|
||
|
<SETG GL-WAIT-BELL <>>
|
||
|
<COND (<MC-THIS-WINNER?>
|
||
|
<COND (<MC-VERB? TELL>
|
||
|
<SETG GL-CLOCK-WAIT <>>
|
||
|
<RFALSE>)
|
||
|
(<AND <OR <MC-PRSO? ,TH-HANDS>
|
||
|
<MC-PRSI? ,TH-HANDS>>
|
||
|
<RT-CHECK-HANDS>>
|
||
|
<RFALSE>)
|
||
|
(<AND <RT-TOUCH-VERB?>
|
||
|
<MC-IS? ,TH-HANDS ,FL-LOCKED>>
|
||
|
<RT-HANDS-COVERING-EARS>)>)
|
||
|
(T
|
||
|
<RT-AC-CH-PLAYER-AUX>)>>
|