mirror of
https://github.com/historicalsource/sherlock
synced 2024-07-02 22:55:22 +03:00
738 lines
17 KiB
Plaintext
738 lines
17 KiB
Plaintext
|
|
|
|
.FUNCT RT-META-IN?,OBJ1,OBJ2
|
|
?PRG1: ZERO? OBJ1 /FALSE
|
|
IN? OBJ1,ROOMS /FALSE
|
|
IN? OBJ1,LOCAL-GLOBALS /FALSE
|
|
EQUAL? OBJ1,OBJ2 /TRUE
|
|
LOC OBJ1 >OBJ1
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT RT-SEE-INSIDE?,THING
|
|
ZERO? THING /FALSE
|
|
FSET? THING,FL-SURFACE /TRUE
|
|
FSET? THING,FL-CONTAINER \?CCL7
|
|
FSET? THING,FL-OPENED /TRUE
|
|
FSET? THING,FL-TRANSPARENT /TRUE
|
|
?CCL7: FSET? THING,FL-PERSON /?PRD15
|
|
FSET? THING,FL-ALIVE \FALSE
|
|
?PRD15: EQUAL? THING,CH-PLAYER /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-VISIBLE?,OBJ
|
|
CALL RT-ACCESSIBLE?,OBJ,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CLOSED?,WLOC,VISIBLE?
|
|
ZERO? WLOC /FALSE
|
|
FSET? WLOC,FL-OPENED /FALSE
|
|
ZERO? VISIBLE? /?PRD7
|
|
FSET? WLOC,FL-TRANSPARENT /FALSE
|
|
?PRD7: FSET? WLOC,FL-SURFACE /FALSE
|
|
FSET? WLOC,FL-ALIVE /FALSE
|
|
IN? WLOC,ROOMS \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-ACCESSIBLE?,OBJ,VISIBLE?,LOC,OLOC,WLOC,RMG,RMGL
|
|
GETPT GL-PLACE-CUR,P?GLOBAL >RMG
|
|
PTSIZE RMG >RMGL
|
|
ZERO? OBJ \?CCL3
|
|
SET 'GL-CLOSED-OBJECT,FALSE-VALUE
|
|
RFALSE
|
|
?CCL3: EQUAL? OBJ,ROOMS /TRUE
|
|
EQUAL? OBJ,PSEUDO-OBJECT \?CND1
|
|
EQUAL? LAST-PSEUDO-LOC,GL-PLACE-CUR /TRUE
|
|
RFALSE
|
|
?CND1: LOC GL-WINNER >WLOC
|
|
?PRG9: IN? WLOC,ROOMS /?REP10
|
|
CALL CLOSED?,WLOC,VISIBLE?
|
|
ZERO? STACK \?REP10
|
|
LOC WLOC >WLOC
|
|
JUMP ?PRG9
|
|
?REP10: SET 'OLOC,OBJ
|
|
EQUAL? OLOC,WLOC /TRUE
|
|
?PRG18: ZERO? OLOC /FALSE
|
|
IN? OLOC,GLOBAL-OBJECTS /?CCL23
|
|
INTBL? OLOC,RMG,RMGL,1 \?CND22
|
|
?CCL23: IN? OLOC,ROOMS \TRUE
|
|
EQUAL? OLOC,OBJ /TRUE
|
|
RFALSE
|
|
?CND22: IN? OLOC,ROOMS /FALSE
|
|
LOC OLOC >OLOC
|
|
EQUAL? OLOC,WLOC /TRUE
|
|
CALL CLOSED?,OLOC,VISIBLE?
|
|
ZERO? STACK /?PRG18
|
|
IN? OLOC,GLOBAL-OBJECTS /TRUE
|
|
INTBL? OLOC,RMG,RMGL,1 /TRUE
|
|
SET 'GL-CLOSED-OBJECT,OLOC
|
|
SET 'GL-IN-OUT,TRUE-VALUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-DONT-ALL?,O,I,L
|
|
LOC O >L
|
|
ZERO? L /TRUE
|
|
EQUAL? O,I /TRUE
|
|
FSET? O,FL-BODYPART /TRUE
|
|
FSET? O,FL-NOALL /TRUE
|
|
EQUAL? GL-PRSA,V?TAKE \?CCL11
|
|
ZERO? I \?CCL14
|
|
CALL RT-META-IN?,O,GL-WINNER
|
|
ZERO? STACK /?CCL14
|
|
IN? O,GL-WINNER /TRUE
|
|
GET GL-P-NAMW,0
|
|
ZERO? STACK /TRUE
|
|
GET GL-P-BUTS,K-P-MATCHLEN
|
|
ZERO? STACK \TRUE
|
|
?CCL14: FSET? O,FL-TAKEABLE /?CCL22
|
|
FSET? O,FL-TRYTAKE \TRUE
|
|
?CCL22: FSET? L,FL-PERSON \?CCL26
|
|
EQUAL? L,I \TRUE
|
|
?CCL26: FSET? L,FL-CONTAINER \?CCL30
|
|
FSET? L,FL-OPENED \TRUE
|
|
?CCL30: ZERO? I /?CCL34
|
|
EQUAL? L,I \TRUE
|
|
CALL2 RT-SEE-INSIDE?,I
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
?CCL34: EQUAL? L,GL-PLACE-CUR /FALSE
|
|
CALL2 RT-SEE-INSIDE?,L
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
?CCL11: EQUAL? GL-PRSA,V?DROP,V?PUT,V?PUT-ON /?CTR44
|
|
EQUAL? GL-PRSA,V?THROW,V?THROW-OVER \FALSE
|
|
?CTR44: EQUAL? O,TH-POCKET /TRUE
|
|
EQUAL? L,TH-POCKET /TRUE
|
|
FSET? O,FL-WORN /TRUE
|
|
EQUAL? L,GL-WINNER /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DPRINT,O,X
|
|
FSET? O,FL-HAS-SDESC \?CCL3
|
|
GETP O,P?ACTION >X
|
|
ZERO? X /?CCL3
|
|
CALL X,K-M-SDESC
|
|
RSTACK
|
|
?CCL3: PRINTD O
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-A-PRINT,O
|
|
ICALL RT-THEO-PRINT,O,FALSE-VALUE,K-DESC-A
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-THEO-PRINT,O,CAP?,CLASS,?TMP1
|
|
ASSIGNED? 'CLASS /?CND1
|
|
SET 'CLASS,K-DESC-THE
|
|
?CND1: ZERO? O \?CND3
|
|
SET 'O,GL-PRSO
|
|
?CND3: ZERO? CAP? /?PRG7
|
|
DIROUT K-D-SCR-OFF
|
|
DIROUT K-D-TBL-ON,GL-DIROUT-TBL
|
|
?PRG7: FSET? O,FL-NOARTC /?CCL11
|
|
FSET? O,FL-YOUR \?CCL14
|
|
PRINTI "your"
|
|
JUMP ?CND12
|
|
?CCL14: EQUAL? CLASS,K-DESC-ANY \?CCL16
|
|
PRINTI "any"
|
|
JUMP ?CND12
|
|
?CCL16: EQUAL? CLASS,K-DESC-THE /?CTR17
|
|
FSET? O,FL-PLURAL \?CCL18
|
|
FSET? O,FL-PERSON \?CCL18
|
|
?CTR17: PRINTI "the"
|
|
JUMP ?CND12
|
|
?CCL18: FSET? O,FL-PLURAL \?CCL24
|
|
FSET? O,FL-PERSON /?CCL24
|
|
PRINTI "some"
|
|
JUMP ?CND12
|
|
?CCL24: EQUAL? O,LG-WATER /?CND12
|
|
FSET? O,FL-VOWEL \?CCL30
|
|
PRINTI "an"
|
|
JUMP ?CND12
|
|
?CCL30: PRINTC 97
|
|
?CND12: PRINTC 32
|
|
?CND9: EQUAL? O,CH-ME \?CCL34
|
|
ZERO? CAP? /?CCL34
|
|
PRINTI "you"
|
|
JUMP ?REP8
|
|
?CCL11: FSET? O,FL-HAS-SDESC \?CND9
|
|
GETP O,P?ACTION
|
|
ICALL STACK,K-M-SDESC,CLASS
|
|
JUMP ?REP8
|
|
?CCL34: ICALL2 DPRINT,O
|
|
?REP8: ZERO? CAP? /TRUE
|
|
DIROUT K-D-TBL-OFF
|
|
DIROUT K-D-SCR-ON
|
|
GETB GL-DIROUT-TBL,2 >CAP?
|
|
LESS? CAP?,97 /?CND39
|
|
GRTR? CAP?,122 /?CND39
|
|
SUB CAP?,32
|
|
PUTB GL-DIROUT-TBL,2,STACK
|
|
?CND39: ADD GL-DIROUT-TBL,2 >?TMP1
|
|
GET GL-DIROUT-TBL,0
|
|
PRINTT ?TMP1,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-CTHEO-PRINT,O
|
|
CALL RT-THEO-PRINT,O,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-THEI-PRINT,I
|
|
ZERO? I \?CND1
|
|
SET 'I,GL-PRSI
|
|
?CND1: CALL2 RT-THEO-PRINT,I
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-CTHEI-PRINT,I
|
|
ZERO? I \?CND1
|
|
SET 'I,GL-PRSI
|
|
?CND1: CALL RT-THEO-PRINT,I,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-PRINT-SPACES,N,AMT
|
|
?PRG1: GRTR? N,GL-BLANKS-LEN \?CCL5
|
|
SET 'AMT,GL-BLANKS-LEN
|
|
JUMP ?CND3
|
|
?CCL5: SET 'AMT,N
|
|
?CND3: PRINTT GL-BLANKS,AMT
|
|
SUB N,AMT >N
|
|
GRTR? N,0 /?PRG1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SAY-NUMBER,N,X
|
|
SET 'X,10000
|
|
?PRG1: LESS? N,X \?REP2
|
|
PRINTC 32
|
|
DIV X,10 >X
|
|
LESS? X,10 \?PRG1
|
|
?REP2: PRINTN N
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-UPDATE-STATUS-LINE
|
|
GET 0,8
|
|
BTST STACK,4 \?CND1
|
|
ICALL2 RT-INIT-SCREEN,TRUE-VALUE
|
|
GET 0,8
|
|
BAND STACK,-5
|
|
PUT 0,8,STACK
|
|
?CND1: SCREEN K-S-WIN
|
|
HLIGHT K-H-INV
|
|
EQUAL? GL-PLACE-CUR,GL-PLACE-STS /?CND3
|
|
ZERO? GL-SHORT-STAT? /?CCL7
|
|
CURSET GL-SPLIT-ROW,1
|
|
JUMP ?CND5
|
|
?CCL7: CURSET GL-SPLIT-ROW,2
|
|
?CND5: ICALL2 RT-PRINT-SPACES,GL-STAT-MAX-ROOM
|
|
CURSET GL-SPLIT-ROW,2
|
|
CALL RT-SAY-ROOM-NAME-IF-LIT,GL-PLACE-CUR,FALSE-VALUE,TRUE-VALUE
|
|
ZERO? STACK /?CCL10
|
|
SET 'GL-PLACE-STS,GL-PLACE-CUR
|
|
JUMP ?CND3
|
|
?CCL10: SET 'GL-PLACE-STS,-1
|
|
?CND3: EQUAL? GL-SCORE-CUR,GL-SCORE-STS /?CND11
|
|
SET 'GL-SCORE-STS,GL-SCORE-CUR
|
|
ADD GL-SCORE-HEADER-LEN,GL-STAT-S-POS
|
|
CURSET GL-SPLIT-ROW,STACK
|
|
ICALL2 SAY-NUMBER,GL-SCORE-CUR
|
|
?CND11: CURSET GL-SPLIT-ROW,GL-STAT-T-POS
|
|
ZERO? GL-SHORT-STAT? /?CCL15
|
|
ICALL2 RT-CLK-DOW-MSG,3
|
|
PRINTC 32
|
|
ICALL2 RT-CLK-NTI-MSG,22
|
|
JUMP ?CND13
|
|
?CCL15: ICALL2 RT-CLK-DOW-MSG,5
|
|
ADD 10,GL-STAT-T-POS
|
|
CURSET GL-SPLIT-ROW,STACK
|
|
ICALL2 RT-CLK-NTI-MSG,7
|
|
?CND13: HLIGHT K-H-NRM
|
|
SCREEN K-S-NOR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-REFER-TO-MSG
|
|
PRINTR "[To what are you referring?]"
|
|
|
|
|
|
.FUNCT RT-SAY-ROOM-NAME-IF-LIT,HERE,FORCE?,SL?,LEN,MAXLEN,LC,X,CNT
|
|
ASSIGNED? 'HERE /?CND1
|
|
SET 'HERE,GL-PLACE-CUR
|
|
?CND1: SET 'MAXLEN,300
|
|
SET 'CNT,2
|
|
ZERO? SL? /?CND3
|
|
SET 'MAXLEN,GL-STAT-MAX-ROOM
|
|
?CND3: ZERO? FORCE? \?CTR6
|
|
ZERO? GL-NOW-LIT? /?CCL7
|
|
?CTR6: DIROUT K-D-SCR-OFF
|
|
DIROUT K-D-TBL-ON,GL-DIROUT-TBL
|
|
ICALL2 DPRINT,HERE
|
|
DIROUT K-D-TBL-OFF
|
|
DIROUT K-D-SCR-ON
|
|
GET GL-DIROUT-TBL,0 >LEN
|
|
INC 'LEN
|
|
PUT GL-DIROUT-TBL,0,0
|
|
GRTR? LEN,1 \?CCL12
|
|
SET 'LC,32
|
|
?PRG13: GETB GL-DIROUT-TBL,CNT >X
|
|
LESS? X,97 /?CND15
|
|
GRTR? X,122 /?CND15
|
|
EQUAL? CNT,2 /?CCL20
|
|
EQUAL? LC,32 \?CND15
|
|
?CCL20: SUB X,32 >X
|
|
?CND15: PRINTC X
|
|
SET 'LC,X
|
|
IGRTR? 'CNT,LEN /TRUE
|
|
GRTR? CNT,MAXLEN \?PRG13
|
|
RTRUE
|
|
?CCL12: GET GL-DIROUT-TBL,2
|
|
PRINTC STACK
|
|
RTRUE
|
|
?CCL7: PRINTI "Darkness"
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-DESCRIBE-PLACE,PLACE,LOOK
|
|
ZERO? PLACE \?CND1
|
|
SET 'PLACE,GL-PLACE-CUR
|
|
?CND1: CALL RT-IS-LIT?,PLACE,TRUE-VALUE
|
|
ZERO? STACK \?CND3
|
|
PRINT K-TOO-DARK-MSG
|
|
CRLF
|
|
RTRUE
|
|
?CND3: HLIGHT K-H-BLD
|
|
ICALL RT-SAY-ROOM-NAME-IF-LIT,PLACE,TRUE-VALUE
|
|
CRLF
|
|
CRLF
|
|
HLIGHT K-H-NRM
|
|
ZERO? LOOK /?CCL7
|
|
CALL RT-EXEC-RM-DESCFCN,PLACE,K-M-DESC-3
|
|
RSTACK
|
|
?CCL7: FSET? PLACE,FL-TOUCHED /?CCL9
|
|
FSET PLACE,FL-TOUCHED
|
|
CALL RT-EXEC-RM-DESCFCN,PLACE,K-M-DESC-1
|
|
RSTACK
|
|
?CCL9: EQUAL? GL-DESC-LEVEL,2 \?CCL11
|
|
CALL RT-EXEC-RM-DESCFCN,PLACE,K-M-DESC-2
|
|
RSTACK
|
|
?CCL11: EQUAL? GL-DESC-LEVEL,1 /TRUE
|
|
ZERO? GL-DESC-LEVEL /FALSE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-EXEC-RM-DESCFCN,PLACE,CONTEXT,DF
|
|
FSET? PLACE,FL-HAS-DESCFCN \TRUE
|
|
GETP PLACE,P?ACTION
|
|
CALL STACK,CONTEXT
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-DESCFCN-CONTEXT,CONTEXT
|
|
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2,K-M-DESC-3 /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-DESC-ALL,PLACE,LOOK,HOLMES-IN-HOUSE?
|
|
CALL RT-DESCRIBE-PLACE,PLACE,LOOK
|
|
ZERO? STACK /?CND1
|
|
ICALL RT-DESCRIBE-PLACE-CONTENTS,PLACE,LOOK
|
|
?CND1: CALL RT-IS-LIT?,PLACE,TRUE-VALUE
|
|
ZERO? STACK /TRUE
|
|
ZERO? GL-PUPPY-MSG? \?CCL7
|
|
SET 'GL-PUPPY-MSG?,TRUE-VALUE
|
|
RTRUE
|
|
?CCL7: ZERO? GL-PUPPY /TRUE
|
|
EQUAL? GL-PUPPY,CH-HOLMES \?CCL11
|
|
CRLF
|
|
CALL2 RT-PICK-NEXT,GL-HOLMES-DESC-TXT
|
|
PRINT STACK
|
|
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL,RM-PARLOUR,RM-VESTIBULE /?CCL13
|
|
EQUAL? GL-PLACE-CUR,RM-HOLMES-STUDY,RM-HOLMES-BEDROOM \?CND12
|
|
?CCL13: SET 'HOLMES-IN-HOUSE?,TRUE-VALUE
|
|
?CND12: ZERO? LOOK /?CCL18
|
|
IN? CH-HOLMES,TH-BOAT \?CCL21
|
|
PRINT K-SEASICK-MSG
|
|
JUMP ?CND19
|
|
?CCL21: IN? CH-HOLMES,TH-HANSOM-CAB /?CTR22
|
|
IN? CH-HOLMES,TH-GROWLER-CAB \?CCL23
|
|
?CTR22: PRINT K-SITTING-QUIETLY-MSG
|
|
JUMP ?CND19
|
|
?CCL23: ZERO? HOLMES-IN-HOUSE? /?CCL27
|
|
CALL2 RT-PICK-NEXT,GL-HOLMES-HOUSE-LOOK-TXT
|
|
PRINT STACK
|
|
JUMP ?CND19
|
|
?CCL27: FSET? GL-PLACE-CUR,FL-INDOORS \?CCL29
|
|
CALL2 RT-PICK-NEXT,GL-HOLMES-INDOORS-LOOK-TXT
|
|
PRINT STACK
|
|
JUMP ?CND19
|
|
?CCL29: CALL2 RT-PICK-NEXT,GL-HOLMES-OUTDOORS-LOOK-TXT
|
|
PRINT STACK
|
|
?CND19: PRINTR "."
|
|
?CCL18: EQUAL? GL-DESC-LEVEL,2,1 \TRUE
|
|
ZERO? HOLMES-IN-HOUSE? /?CCL33
|
|
CALL2 RT-PICK-NEXT,GL-HOLMES-HOUSE-ENTER-TXT
|
|
PRINT STACK
|
|
JUMP ?CND31
|
|
?CCL33: FSET? GL-PLACE-CUR,FL-INDOORS \?CCL35
|
|
CALL2 RT-PICK-NEXT,GL-HOLMES-INDOORS-ENTER-TXT
|
|
PRINT STACK
|
|
JUMP ?CND31
|
|
?CCL35: CALL2 RT-PICK-NEXT,GL-HOLMES-OUTDOORS-ENTER-TXT
|
|
PRINT STACK
|
|
?CND31: PRINTR "."
|
|
?CCL11: EQUAL? GL-PUPPY,CH-WIGGINS \TRUE
|
|
CRLF
|
|
CALL2 RT-PICK-NEXT,GL-WIGGINS-DESC-TXT
|
|
PRINT STACK
|
|
ZERO? LOOK /?CCL39
|
|
IN? CH-WIGGINS,TH-BOAT \?CCL42
|
|
PRINT K-ENJOYING-RIDE-MSG
|
|
JUMP ?CND40
|
|
?CCL42: IN? CH-WIGGINS,TH-HANSOM-CAB /?CTR43
|
|
IN? CH-WIGGINS,TH-GROWLER-CAB \?CCL44
|
|
?CTR43: PRINT K-FIDGETING-MSG
|
|
JUMP ?CND40
|
|
?CCL44: CALL2 RT-PICK-NEXT,GL-WIGGINS-LOOK-TXT
|
|
PRINT STACK
|
|
?CND40: PRINTR "."
|
|
?CCL39: EQUAL? GL-DESC-LEVEL,2,1 \TRUE
|
|
CALL2 RT-PICK-NEXT,GL-WIGGINS-ENTER-TXT
|
|
PRINT STACK
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT RT-GOTO,NEWPLACE,X,NEWLIT?,OLDPLACE,AMP?,SS?
|
|
SET 'OLDPLACE,GL-PLACE-CUR
|
|
MOVE CH-PLAYER,NEWPLACE
|
|
SET 'GL-PLACE-CUR,NEWPLACE
|
|
CALL1 RT-IS-LIT? >NEWLIT?
|
|
MOVE CH-PLAYER,OLDPLACE
|
|
SET 'GL-PLACE-CUR,OLDPLACE
|
|
ZERO? NEWLIT? \?CND1
|
|
ICALL2 TOO-DARK-TO-GO,NEWPLACE
|
|
RTRUE
|
|
?CND1: GETP GL-PLACE-CUR,P?ACTION
|
|
CALL STACK,K-M-EXIT >X
|
|
FSET? OLDPLACE,FL-INDOORS /?CND3
|
|
FSET? NEWPLACE,FL-INDOORS /?CND3
|
|
ICALL RT-CLOCK-JMP,0,5,0
|
|
?CND3: SET 'GL-PLACE-PRV,OLDPLACE
|
|
SET 'GL-PLACE-CUR,NEWPLACE
|
|
CALL1 RT-IS-LIT? >GL-NOW-LIT?
|
|
MOVE CH-PLAYER,GL-PLACE-CUR
|
|
GETP GL-PLACE-CUR,P?ACTION
|
|
CALL STACK,K-M-ENTERING >X
|
|
ZERO? GL-PUPPY /?CCL9
|
|
LOC CH-PLAYER
|
|
MOVE GL-PUPPY,STACK
|
|
JUMP ?CND7
|
|
?CCL9: ZERO? GL-FORMER-PUPPY /?CND7
|
|
IN? GL-FORMER-PUPPY,GL-PLACE-CUR \?CND7
|
|
FSET? GL-FORMER-PUPPY,FL-ASLEEP /?CND7
|
|
SET 'GL-PUPPY,GL-FORMER-PUPPY
|
|
SET 'GL-FORMER-PUPPY,FALSE-VALUE
|
|
?CND7: ICALL1 RT-DESC-ALL
|
|
IN? TH-ETHERIUM-AMPOULE,CH-PLAYER \?PST15
|
|
FSET? TH-ETHERIUM-AMPOULE,FL-BROKEN /?PRD18
|
|
SET 'AMP?,1
|
|
JUMP ?PEN14
|
|
?PRD18: SET 'AMP?,0
|
|
JUMP ?PEN14
|
|
?PST15: SET 'AMP?,0
|
|
?PEN14: FSET? TH-STETHOSCOPE,FL-WORN /?PRD20
|
|
PUSH 0
|
|
JUMP ?PRD21
|
|
?PRD20: PUSH 1
|
|
?PRD21: SET 'SS?,STACK
|
|
ZERO? AMP? \?CCL23
|
|
ZERO? SS? /?CND22
|
|
?CCL23: ICALL HOLMES-COMPLAINS,AMP?,SS?
|
|
?CND22: GETP GL-PLACE-CUR,P?ACTION
|
|
CALL STACK,K-M-ENTERED >X
|
|
ICALL1 RT-RESET-THEM
|
|
IN? TH-ETHERIUM-GAS,GL-PLACE-CUR \TRUE
|
|
ICALL1 RT-SMELL-ETHERIUM?
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-RESET-THEM
|
|
CALL2 RT-VISIBLE?,GL-P-IT-OBJECT
|
|
ZERO? STACK \?CND1
|
|
SET 'GL-P-IT-OBJECT,TH-NOT-HERE-OBJECT
|
|
?CND1: CALL2 RT-VISIBLE?,GL-P-THEM-OBJECT
|
|
ZERO? STACK \?CND3
|
|
SET 'GL-P-THEM-OBJECT,TH-NOT-HERE-OBJECT
|
|
?CND3: CALL2 RT-VISIBLE?,GL-P-HIM-OBJECT
|
|
ZERO? STACK \?CND5
|
|
SET 'GL-P-HIM-OBJECT,TH-NOT-HERE-OBJECT
|
|
?CND5: CALL2 RT-VISIBLE?,GL-P-HER-OBJECT
|
|
ZERO? STACK \TRUE
|
|
SET 'GL-P-HER-OBJECT,TH-NOT-HERE-OBJECT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-UPDATE-SCORE,PTS
|
|
ASSIGNED? 'PTS /?CND1
|
|
SET 'PTS,1
|
|
?CND1: ADD GL-SCORE-CUR,PTS >GL-SCORE-CUR
|
|
CALL2 RT-NEW-SCORE-MSG,PTS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-UPDATE-MOVES,MVS
|
|
ASSIGNED? 'MVS /?CND1
|
|
SET 'MVS,1
|
|
?CND1: ZERO? GL-CLOCK-WAIT \FALSE
|
|
ZERO? GL-CLOCK-STOP \FALSE
|
|
ADD GL-MOVES-CUR,MVS >GL-MOVES-CUR
|
|
RETURN GL-MOVES-CUR
|
|
|
|
|
|
.FUNCT RT-UPDATE-CLOCK,HRS,MIN,SEC
|
|
ZERO? HRS \?CCL2
|
|
ZERO? MIN \?CCL2
|
|
ZERO? SEC /?CND1
|
|
?CCL2: ICALL RT-DO-CLOCK-SET,GL-TIME-UPDT-INC,HRS,MIN,SEC
|
|
?CND1: CALL1 RT-CLOCK-INC
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,X,TOUCH-VERB?,MYCROFT?,TV,?TMP1
|
|
?PRG1: SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
SET 'GL-P-MULT?,FALSE-VALUE
|
|
EQUAL? GL-PLACE-CUR,GL-P-QCONTEXT-RM /?CND3
|
|
SET 'GL-P-QCONTEXT-TH,FALSE-VALUE
|
|
?CND3: CALL1 RT-PARSER >GL-P-GOOD
|
|
ZERO? GL-P-GOOD /?CCL7
|
|
GET GL-P-PRSI,K-P-MATCHLEN >ICNT
|
|
GET GL-P-PRSO,K-P-MATCHLEN >OCNT
|
|
ZERO? GL-P-IT-OBJECT /?CND8
|
|
CALL2 RT-ACCESSIBLE?,GL-P-IT-OBJECT
|
|
ZERO? STACK /?CND8
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG12: IGRTR? 'CNT,ICNT /?REP13
|
|
GET GL-P-PRSI,CNT
|
|
EQUAL? STACK,TH-IT \?PRG12
|
|
PUT GL-P-PRSI,CNT,GL-P-IT-OBJECT
|
|
SET 'TMP,TRUE-VALUE
|
|
?REP13: ZERO? TMP \?CND19
|
|
SET 'CNT,0
|
|
?PRG21: IGRTR? 'CNT,OCNT /?CND19
|
|
GET GL-P-PRSO,CNT
|
|
EQUAL? STACK,TH-IT \?PRG21
|
|
PUT GL-P-PRSO,CNT,GL-P-IT-OBJECT
|
|
?CND19: SET 'CNT,0
|
|
?CND8: ZERO? OCNT \?CCL30
|
|
SET 'NUM,OCNT
|
|
JUMP ?CND28
|
|
?CCL30: GRTR? OCNT,1 \?CCL32
|
|
SET 'TBL,GL-P-PRSO
|
|
ZERO? ICNT \?CCL35
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND33
|
|
?CCL35: GET GL-P-PRSI,1 >OBJ
|
|
?CND33: SET 'NUM,OCNT
|
|
JUMP ?CND28
|
|
?CCL32: GRTR? ICNT,1 \?CCL37
|
|
SET 'PTBL,FALSE-VALUE
|
|
SET 'TBL,GL-P-PRSI
|
|
GET GL-P-PRSO,1 >OBJ
|
|
SET 'NUM,ICNT
|
|
JUMP ?CND28
|
|
?CCL37: SET 'NUM,1
|
|
?CND28: ZERO? OBJ \?CND38
|
|
EQUAL? ICNT,1 \?CND38
|
|
GET GL-P-PRSI,1 >OBJ
|
|
?CND38: EQUAL? GL-PRSA,V?WALK \?CCL44
|
|
CALL RT-PERFORM,GL-PRSA,GL-PRSO >V
|
|
JUMP ?CND42
|
|
?CCL44: ZERO? NUM \?CCL46
|
|
GETB GL-P-SYNTAX,0
|
|
SHIFT STACK,-6
|
|
ZERO? STACK \?CCL49
|
|
CALL2 RT-PERFORM,GL-PRSA >V
|
|
SET 'GL-PRSO,FALSE-VALUE
|
|
JUMP ?CND42
|
|
?CCL49: ZERO? GL-NOW-LIT? \?CCL51
|
|
ICALL1 RT-P-CLEAR
|
|
PRINT K-TOO-DARK-MSG
|
|
CRLF
|
|
JUMP ?CND42
|
|
?CCL51: ICALL1 RT-P-CLEAR
|
|
PRINTI "[There isn't anything to "
|
|
GET GL-P-ITBL,K-P-VERBN >TMP
|
|
CALL1 RT-TALK-VERB?
|
|
ZERO? STACK /?CCL54
|
|
PRINTI "talk to"
|
|
JUMP ?CND52
|
|
?CCL54: ZERO? GL-P-MERGED \?CTR55
|
|
ZERO? GL-P-ORPH /?CCL56
|
|
?CTR55: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND52
|
|
?CCL56: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL RT-WORD-PRINT,?TMP1,STACK >V
|
|
?CND52: PRINTI ".]"
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
JUMP ?CND42
|
|
?CCL46: SET 'X,0
|
|
GRTR? NUM,1 \?CND59
|
|
SET 'GL-P-MULT?,TRUE-VALUE
|
|
?CND59: SET 'TMP,FALSE-VALUE
|
|
?PRG61: IGRTR? 'CNT,NUM \?CCL65
|
|
GRTR? X,0 \?CCL68
|
|
PRINTI "[The "
|
|
EQUAL? X,NUM /?CND69
|
|
PRINTI "other "
|
|
?CND69: PRINTI "object"
|
|
EQUAL? X,1 /?CND71
|
|
PRINTC 115
|
|
?CND71: PRINTI " that you mentioned "
|
|
EQUAL? X,1 /?CCL75
|
|
PRINTI "are"
|
|
JUMP ?CND73
|
|
?CCL75: PRINTI "is"
|
|
?CND73: PRINTI "n't here.]"
|
|
CRLF
|
|
JUMP ?REP62
|
|
?CCL68: ZERO? TMP \?REP62
|
|
ICALL1 RT-REFER-TO-MSG
|
|
JUMP ?REP62
|
|
?CCL65: ZERO? PTBL /?CCL79
|
|
GET GL-P-PRSO,CNT >OBJ1
|
|
JUMP ?CND77
|
|
?CCL79: GET GL-P-PRSI,CNT >OBJ1
|
|
?CND77: GRTR? NUM,1 /?CCL81
|
|
GET GL-P-ITBL,K-P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL,W?EVERYTHING \?CND80
|
|
?CCL81: EQUAL? OBJ1,TH-NOT-HERE-OBJECT \?CCL86
|
|
INC 'X
|
|
JUMP ?PRG61
|
|
?CCL86: EQUAL? GL-P-GET-FLAGS,K-P-ALL \?CCL88
|
|
CALL RT-DONT-ALL?,OBJ1,OBJ
|
|
ZERO? STACK \?PRG61
|
|
?CCL88: CALL2 RT-ACCESSIBLE?,OBJ1
|
|
ZERO? STACK /?PRG61
|
|
EQUAL? OBJ1,CH-PLAYER /?PRG61
|
|
EQUAL? OBJ1,TH-IT \?CCL97
|
|
ICALL2 RT-CTHEO-PRINT,GL-P-IT-OBJECT
|
|
JUMP ?CND95
|
|
?CCL97: ICALL2 RT-CTHEO-PRINT,OBJ1
|
|
?CND95: PRINTI ": "
|
|
?CND80: SET 'TMP,TRUE-VALUE
|
|
ZERO? PTBL /?CCL100
|
|
SET 'GL-PRSO,OBJ1
|
|
JUMP ?CND98
|
|
?CCL100: SET 'GL-PRSO,OBJ
|
|
?CND98: ZERO? PTBL /?CCL103
|
|
SET 'GL-PRSI,OBJ
|
|
JUMP ?CND101
|
|
?CCL103: SET 'GL-PRSI,OBJ1
|
|
?CND101: EQUAL? GL-WINNER,CH-BUTLER \?CND104
|
|
GET GL-P-NAMW,0
|
|
EQUAL? STACK,W?HOLMES,W?MYCROFT \?CND104
|
|
SET 'MYCROFT?,TRUE-VALUE
|
|
SET 'TOUCH-VERB?,FALSE-VALUE
|
|
?CND104: ZERO? MYCROFT? \?CND108
|
|
EQUAL? GL-PRSA,V?FIND /?CND108
|
|
CALL1 RT-TOUCH-VERB? >TOUCH-VERB?
|
|
ZERO? TOUCH-VERB? \?CCL109
|
|
INTBL? GL-PRSA,GL-SEE-VERBS+2,20 >TV \?CND108
|
|
?CCL109: ZERO? GL-PRSO /?CCL117
|
|
CALL2 RT-VISIBLE?,GL-PRSO
|
|
ZERO? STACK \?CCL117
|
|
ICALL2 RT-CANT-SEE-ANY-MSG,GL-PRSO
|
|
GRTR? OCNT,1 /?PRG61
|
|
SET 'V,FATAL-VALUE
|
|
JUMP ?REP62
|
|
?CCL117: ZERO? GL-PRSI /?CND108
|
|
CALL2 RT-VISIBLE?,GL-PRSI
|
|
ZERO? STACK \?CND108
|
|
ICALL2 RT-CANT-SEE-ANY-MSG,GL-PRSI
|
|
GRTR? ICNT,1 /?PRG61
|
|
SET 'V,FATAL-VALUE
|
|
JUMP ?REP62
|
|
?CND108: ZERO? TOUCH-VERB? /?CND127
|
|
ZERO? GL-PRSO /?CCL131
|
|
CALL2 RT-ACCESSIBLE?,GL-PRSO
|
|
ZERO? STACK \?CCL131
|
|
ICALL RT-CANT-TOUCH-MSG,GL-PRSO,GL-CLOSED-OBJECT,GL-IN-OUT
|
|
GRTR? OCNT,1 /?PRG61
|
|
SET 'V,FATAL-VALUE
|
|
JUMP ?REP62
|
|
?CCL131: ZERO? GL-PRSI /?CND127
|
|
CALL2 RT-ACCESSIBLE?,GL-PRSI
|
|
ZERO? STACK \?CND127
|
|
ICALL RT-CANT-TOUCH-MSG,GL-PRSI,GL-CLOSED-OBJECT,GL-IN-OUT
|
|
GRTR? ICNT,1 /?PRG61
|
|
SET 'V,FATAL-VALUE
|
|
JUMP ?REP62
|
|
?CND127: CALL RT-PERFORM,GL-PRSA,GL-PRSO,GL-PRSI >V
|
|
EQUAL? V,FATAL-VALUE \?PRG61
|
|
?REP62: ZERO? GL-P-OVERFLOW /?CND42
|
|
CRLF
|
|
PRINTI "[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.]"
|
|
CRLF
|
|
?CND42: EQUAL? V,FATAL-VALUE \?CND5
|
|
SET 'GL-P-CONT,FALSE-VALUE
|
|
JUMP ?CND5
|
|
?CCL7: SET 'GL-P-CONT,FALSE-VALUE
|
|
?CND5: ZERO? GL-P-GOOD /?CND147
|
|
EQUAL? V,FATAL-VALUE /?CND147
|
|
INTBL? GL-PRSA,GL-GAME-VERBS+2,10 >TV /?CND147
|
|
ICALL1 RT-UPDATE-MOVES
|
|
ICALL1 RT-UPDATE-CLOCK
|
|
ICALL1 RT-ALARM-CHK
|
|
?CND147: ICALL1 RT-TIME-OF-DAY-MSG
|
|
SET 'GL-PRSA,FALSE-VALUE
|
|
SET 'GL-PRSO,FALSE-VALUE
|
|
SET 'GL-PRSI,FALSE-VALUE
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT RT-TOUCH-VERB?
|
|
INTBL? GL-PRSA,GL-TOUCH-VERBS+2,69 /?BOGUS1
|
|
?BOGUS1: RSTACK
|
|
|
|
|
|
.FUNCT RT-TALK-VERB?
|
|
INTBL? GL-PRSA,GL-TALK-VERBS+2,19 /?BOGUS1
|
|
?BOGUS1: RSTACK
|
|
|
|
|
|
.FUNCT RT-AC-CH-PLAYER,CONTEXT
|
|
SET 'GL-WAIT-BELL,FALSE-VALUE
|
|
EQUAL? CONTEXT,K-M-WINNER \?CCL3
|
|
EQUAL? GL-PRSA,V?TELL \?CCL6
|
|
SET 'GL-CLOCK-WAIT,FALSE-VALUE
|
|
RFALSE
|
|
?CCL6: EQUAL? GL-PRSO,TH-HANDS /?PRD10
|
|
EQUAL? GL-PRSI,TH-HANDS \?CCL8
|
|
?PRD10: CALL1 RT-CHECK-HANDS
|
|
ZERO? STACK \FALSE
|
|
?CCL8: CALL1 RT-TOUCH-VERB?
|
|
ZERO? STACK /FALSE
|
|
FSET? TH-HANDS,FL-LOCKED \FALSE
|
|
CALL1 RT-HANDS-COVERING-EARS
|
|
RSTACK
|
|
?CCL3: CALL1 RT-AC-CH-PLAYER-AUX
|
|
RSTACK
|
|
|
|
.ENDI
|