mirror of
https://github.com/historicalsource/zorkzero
synced 2024-04-25 21:59:27 +03:00
625 lines
13 KiB
Plaintext
625 lines
13 KiB
Plaintext
|
|
.SEGMENT "0"
|
|
|
|
|
|
.FUNCT MORE-SPECIFIC
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "[Please be more specific.]"
|
|
|
|
|
|
.FUNCT MAIN-LOOP,X
|
|
?PRG1: CALL1 MAIN-LOOP-1 >X
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT DIR-VERB-PRSI?,NP
|
|
GET PARSE-RESULT,4
|
|
EQUAL? STACK,V?MOVE-DIR,V?RIDE-DIR,V?ROLL-DIR /?PRD3
|
|
GET PARSE-RESULT,4
|
|
EQUAL? STACK,V?SET-DIR \FALSE
|
|
?PRD3: GET NP,3
|
|
EQUAL? STACK,INTDIR,LEFT-RIGHT /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DIR-VERB-WORD?,WD
|
|
EQUAL? WD,W?WALK,W?GO,W?RUN /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,OBJ,V,OBJ1,NP,NP1,CNT,TOFF,XX,TMP
|
|
CALL1 PARSER >P-WON
|
|
ZERO? P-WON /?CCL3
|
|
DLESS? 'P-ERRS,0 \?PRG6
|
|
SET 'P-ERRS,0
|
|
?PRG6: GET PARSE-RESULT,4 >PRSA
|
|
EQUAL? PRSA,V?UNDO \?CCL10
|
|
CALL2 PERFORM,PRSA
|
|
RSTACK
|
|
?CCL10: ISAVE >P-CAN-UNDO
|
|
EQUAL? P-CAN-UNDO,2 \?CND8
|
|
EQUAL? PRSA,V?SAVE \?CCL15
|
|
ICALL1 CANT-UNDO
|
|
RFALSE
|
|
?CCL15: SET 'P-CONT,-1
|
|
ICALL1 V-$REFRESH
|
|
RFALSE
|
|
?CND8: GET PARSE-RESULT,5 >P-PRSO
|
|
GET PARSE-RESULT,6 >P-PRSI
|
|
ZERO? P-PRSO /?CCL19
|
|
GET P-PRSO,3
|
|
EQUAL? INTDIR,STACK \?CCL19
|
|
GET P-PRSO,4
|
|
GET STACK,2
|
|
GETB STACK,6 >P-DIRECTION
|
|
JUMP ?CND17
|
|
?CCL19: ZERO? P-PRSI /?CND17
|
|
GET P-PRSI,3
|
|
EQUAL? INTDIR,STACK \?CND17
|
|
GET P-PRSI,4
|
|
GET STACK,2
|
|
GETB STACK,6 >P-DIRECTION
|
|
?CND17: GET PARSE-RESULT,1 >P-PRSA-WORD
|
|
SET 'CLOCK-WAIT,FALSE-VALUE
|
|
SET 'ICNT,0
|
|
SET 'OCNT,0
|
|
ZERO? P-PRSI /?CND25
|
|
GET P-PRSI,1 >ICNT
|
|
ZERO? ICNT /?CND25
|
|
SET 'P-MULT,ICNT
|
|
?CND25: ZERO? P-PRSO /?CND29
|
|
GET P-PRSO,1 >OCNT
|
|
ZERO? OCNT /?CND29
|
|
SET 'P-MULT,OCNT
|
|
?CND29: ZERO? OCNT \?CCL35
|
|
ZERO? ICNT /?CND33
|
|
?CCL35: EQUAL? PRSA,V?WALK /?CND33
|
|
ZERO? P-IT-OBJECT /?CND33
|
|
CALL2 ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK /?CND33
|
|
ZERO? ICNT /?CND42
|
|
SET 'CNT,0
|
|
?PRG44: MUL CNT,2
|
|
ADD NOUN-PHRASE-HEADER-LEN,STACK >TOFF
|
|
GET P-PRSI,TOFF
|
|
EQUAL? IT,STACK \?CCL48
|
|
PUT P-PRSI,TOFF,P-IT-OBJECT
|
|
ICALL TELL-PRONOUN,P-IT-OBJECT,IT
|
|
JUMP ?CND42
|
|
?CCL48: IGRTR? 'CNT,ICNT \?PRG44
|
|
?CND42: ZERO? OCNT /?CND33
|
|
SET 'CNT,0
|
|
?PRG52: MUL CNT,2
|
|
ADD NOUN-PHRASE-HEADER-LEN,STACK >TOFF
|
|
GET P-PRSO,TOFF
|
|
EQUAL? IT,STACK \?CCL56
|
|
PUT P-PRSO,TOFF,P-IT-OBJECT
|
|
ICALL TELL-PRONOUN,P-IT-OBJECT,IT
|
|
JUMP ?CND33
|
|
?CCL56: IGRTR? 'CNT,OCNT \?PRG52
|
|
?CND33: ZERO? OCNT \?CCL60
|
|
SET 'NUM,OCNT
|
|
JUMP ?CND58
|
|
?CCL60: GRTR? OCNT,1 \?CCL62
|
|
ZERO? ICNT \?CCL65
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND63
|
|
?CCL65: GET P-PRSI,3 >OBJ
|
|
GET P-PRSI,4 >NP
|
|
?CND63: SET 'NUM,OCNT
|
|
JUMP ?CND58
|
|
?CCL62: GRTR? ICNT,1 \?CCL69
|
|
GET P-PRSO,3 >OBJ
|
|
GET P-PRSI,4 >NP
|
|
SET 'NUM,ICNT
|
|
JUMP ?CND58
|
|
?CCL69: SET 'NUM,1
|
|
?CND58: ZERO? OBJ \?CND72
|
|
EQUAL? ICNT,1 \?CND72
|
|
GET P-PRSI,3 >OBJ
|
|
GET P-PRSI,4 >NP
|
|
?CND72: ZERO? LIT \?CCL80
|
|
CALL1 SEE-VERB?
|
|
ZERO? STACK /?CCL80
|
|
ICALL1 TELL-TOO-DARK
|
|
SET 'P-CONT,-1
|
|
JUMP ?CND78
|
|
?CCL80: EQUAL? PRSA,V?WALK \?CCL84
|
|
ZERO? P-WALK-DIR /?PRD87
|
|
PUSH P-WALK-DIR
|
|
JUMP ?PEN85
|
|
?PRD87: GET P-PRSO,3
|
|
?PEN85: CALL PERFORM,PRSA,STACK >V
|
|
JUMP ?CND78
|
|
?CCL84: ZERO? NUM \?CCL89
|
|
CALL2 PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
SET 'PRSO-NP,FALSE-VALUE
|
|
JUMP ?CND78
|
|
?CCL89: GRTR? OCNT,1 \?CCL91
|
|
EQUAL? PRSA,V?COUNT \?CCL91
|
|
CALL PERFORM,PRSA,ROOMS >V
|
|
JUMP ?CND78
|
|
?CCL91: SET 'CNT,-1
|
|
SET 'TMP,0
|
|
?PRG94: INC 'CNT
|
|
LESS? CNT,NUM /?CND96
|
|
ZERO? TMP \?CND78
|
|
ICALL1 MORE-SPECIFIC
|
|
JUMP ?CND78
|
|
?CND96: GRTR? ICNT,1 /?CCL102
|
|
MUL CNT,2
|
|
ADD STACK,NOUN-PHRASE-HEADER-LEN
|
|
GET P-PRSO,STACK >OBJ1
|
|
MUL CNT,2
|
|
ADD STACK,4
|
|
GET P-PRSO,STACK >NP1
|
|
JUMP ?CND100
|
|
?CCL102: MUL CNT,2
|
|
ADD STACK,NOUN-PHRASE-HEADER-LEN
|
|
GET P-PRSI,STACK >OBJ1
|
|
MUL CNT,2
|
|
ADD STACK,4
|
|
GET P-PRSI,STACK >NP1
|
|
?CND100: GRTR? NUM,1 /?CCL108
|
|
GET NP1,3
|
|
EQUAL? STACK,NP-QUANT-ALL \?CND107
|
|
?CCL108: EQUAL? OBJ1,FALSE-VALUE,NOT-HERE-OBJECT \?CCL113
|
|
ICALL2 NP-PRINT,NP1
|
|
PRINTI ": "
|
|
ICALL2 NP-CANT-SEE,NP1
|
|
JUMP ?PRG94
|
|
?CCL113: GET NP1,3
|
|
EQUAL? STACK,NP-QUANT-ALL \?CCL115
|
|
CALL VERB-ALL-TEST,OBJ1,OBJ
|
|
ZERO? STACK /?PRG94
|
|
?CCL115: CALL2 ACCESSIBLE?,OBJ1
|
|
ZERO? STACK /?PRG94
|
|
EQUAL? OBJ1,PLAYER /?PRG94
|
|
EQUAL? OBJ1,IT \?CCL124
|
|
ICALL2 DPRINT,P-IT-OBJECT
|
|
JUMP ?CND122
|
|
?CCL124: ICALL2 DPRINT,OBJ1
|
|
?CND122: PRINTI ": "
|
|
?CND107: SET 'TMP,TRUE-VALUE
|
|
GRTR? ICNT,1 /?CCL127
|
|
SET 'PRSO,OBJ1
|
|
SET 'PRSO-NP,NP1
|
|
SET 'PRSI,OBJ
|
|
SET 'PRSI-NP,NP
|
|
JUMP ?CND125
|
|
?CCL127: SET 'PRSO,OBJ
|
|
SET 'PRSO-NP,NP
|
|
SET 'PRSI,OBJ1
|
|
SET 'PRSI-NP,NP1
|
|
?CND125: EQUAL? IT,PRSI,PRSO \?CND128
|
|
CALL FIX-HIM-HER-IT,IT,P-IT-OBJECT
|
|
ZERO? STACK /?PRG94
|
|
?CND128: EQUAL? HER,PRSI,PRSO \?CND132
|
|
CALL FIX-HIM-HER-IT,HER,P-HER-OBJECT
|
|
ZERO? STACK /?PRG94
|
|
?CND132: EQUAL? HIM,PRSI,PRSO \?CND136
|
|
CALL FIX-HIM-HER-IT,HIM,P-HIM-OBJECT
|
|
ZERO? STACK /?PRG94
|
|
?CND136: ICALL2 QCONTEXT-CHECK,PRSO
|
|
GET PARSE-RESULT,3
|
|
GETB STACK,5 >XX
|
|
ZERO? PRSO /?CND140
|
|
BTST XX,128 /?CND140
|
|
BTST XX,192 /?CND140
|
|
CALL2 META-LOC,PRSO >V
|
|
ZERO? V /?CND140
|
|
IN? V,ROOMS \?CND140
|
|
CALL2 META-LOC,WINNER
|
|
CALL GLOBAL-IN?,PRSO,STACK
|
|
ZERO? STACK \?CND140
|
|
CALL2 META-LOC,WINNER
|
|
EQUAL? V,STACK /?CND140
|
|
ICALL2 NOT-HERE,PRSO
|
|
JUMP ?PRG94
|
|
?CND140: ZERO? PRSO /?CND149
|
|
BAND 96,XX
|
|
ZERO? STACK /?CND149
|
|
BTST XX,128 /?CND149
|
|
CALL ITAKE-CHECK,PRSO,XX >V
|
|
EQUAL? M-FATAL,V /?CND78
|
|
ZERO? V \?PRG94
|
|
?CND149: ZERO? PRSI /?CND159
|
|
GET PARSE-RESULT,3
|
|
GETB STACK,9 >XX
|
|
BAND 96,XX
|
|
ZERO? STACK /?CND159
|
|
BTST XX,128 /?CND159
|
|
CALL ITAKE-CHECK,PRSI,XX >V
|
|
EQUAL? M-FATAL,V /?CND78
|
|
ZERO? V \?PRG94
|
|
?CND159: CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? M-FATAL,V /?CND78
|
|
EQUAL? P-CONT,-1 \?PRG94
|
|
?CND78: SET 'OPRSO,PRSO
|
|
ZERO? CLOCK-WAIT \?CND173
|
|
CALL1 GAME-VERB?
|
|
ZERO? STACK \?CND173
|
|
LOC WINNER >V
|
|
ZERO? V /?CND177
|
|
IN? V,ROOMS /?CND177
|
|
GETP V,P?ACTION
|
|
CALL D-APPLY,STR?16,STACK,M-END >V
|
|
?CND177: GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?16,STACK,M-END >V
|
|
?CND173: EQUAL? M-FATAL,V \?CND181
|
|
SET 'P-CONT,-1
|
|
?CND181: ZERO? CLOCK-WAIT \?CND183
|
|
CALL1 GAME-VERB?
|
|
ZERO? STACK \?CND183
|
|
SET 'CLOCKER-RUNNING,1
|
|
CALL1 CLOCKER >V
|
|
SET 'CLOCKER-RUNNING,2
|
|
EQUAL? M-FATAL,V \?CND183
|
|
SET 'P-CONT,-1
|
|
?CND183: GET PARSE-RESULT,12 >V
|
|
ZERO? V /?CND1
|
|
GET V,1
|
|
LESS? 1,STACK \?CND1
|
|
EQUAL? P-CONT,-1 /?CND1
|
|
CALL2 HACK-TELL-1,V >V
|
|
EQUAL? M-FATAL,V \?CCL196
|
|
SET 'P-CONT,-1
|
|
JUMP ?CND1
|
|
?CCL196: ZERO? V /?CND1
|
|
JUMP ?PRG6
|
|
?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SET 'P-CONT,FALSE-VALUE
|
|
?CND1: SET 'PRSA,FALSE-VALUE
|
|
SET 'PRSO,FALSE-VALUE
|
|
SET 'PRSO-NP,FALSE-VALUE
|
|
SET 'PRSI,FALSE-VALUE
|
|
RETURN PRSI
|
|
|
|
|
|
.FUNCT FIX-HIM-HER-IT,PRON,OBJ
|
|
ZERO? OBJ \?CCL3
|
|
ICALL1 MORE-SPECIFIC
|
|
RFALSE
|
|
?CCL3: CALL2 VISIBLE?,OBJ
|
|
ZERO? STACK \?CCL5
|
|
ICALL2 NOT-HERE,OBJ
|
|
RFALSE
|
|
?CCL5: EQUAL? PRSO,PRON \?CND6
|
|
SET 'PRSO,OBJ
|
|
ICALL TELL-PRONOUN,OBJ,PRON
|
|
?CND6: EQUAL? PRSI,PRON \TRUE
|
|
SET 'PRSI,OBJ
|
|
ICALL TELL-PRONOUN,OBJ,PRON
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TELL-PRONOUN,OBJ,PRON
|
|
FSET? PRON,TOUCHBIT /FALSE
|
|
EQUAL? OPRSO,OBJ /FALSE
|
|
PRINTI "["""
|
|
ICALL2 DPRINT,PRON
|
|
PRINTI """ meaning "
|
|
ICALL2 TELL-THE,OBJ
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT FIND-A-WINNER,RM,OTHER,WHO,N
|
|
ASSIGNED? 'RM /?CND1
|
|
SET 'RM,HERE
|
|
?CND1: ZERO? QCONTEXT /?CCL5
|
|
IN? QCONTEXT,RM \?CCL5
|
|
RETURN QCONTEXT
|
|
?CCL5: FIRST? RM >OTHER /?BOGUS8
|
|
?BOGUS8: SET 'WHO,FALSE-VALUE
|
|
?PRG9: ZERO? OTHER \?CCL13
|
|
RETURN WHO
|
|
?CCL13: FSET? OTHER,PERSONBIT \?CND11
|
|
FSET? OTHER,INVISIBLE /?CND11
|
|
EQUAL? OTHER,PLAYER /?CND11
|
|
IGRTR? 'N,1 /FALSE
|
|
SET 'WHO,OTHER
|
|
?CND11: NEXT? OTHER >OTHER /?PRG9
|
|
JUMP ?PRG9
|
|
|
|
|
|
.FUNCT QCONTEXT-CHECK,PER,WHO
|
|
EQUAL? PRSA,V?TELL-ABOUT,V?SHOW \FALSE
|
|
EQUAL? PER,PLAYER \FALSE
|
|
CALL2 FIND-A-WINNER,HERE >WHO
|
|
ZERO? WHO /?CND7
|
|
SET 'QCONTEXT,WHO
|
|
?CND7: CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /FALSE
|
|
EQUAL? WINNER,PLAYER \FALSE
|
|
SET 'WINNER,QCONTEXT
|
|
ICALL2 TELL-SAID-TO,QCONTEXT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TELL-SAID-TO,PER
|
|
PRINTI "[said to "
|
|
ICALL2 DPRINT,PER
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT QCONTEXT-GOOD?
|
|
ZERO? QCONTEXT /FALSE
|
|
FSET? QCONTEXT,PERSONBIT \FALSE
|
|
CALL2 META-LOC,QCONTEXT
|
|
EQUAL? HERE,STACK \FALSE
|
|
RETURN QCONTEXT
|
|
|
|
|
|
.FUNCT META-LOC,OBJ,INV,L
|
|
LOC OBJ >L
|
|
?PRG1: EQUAL? FALSE-VALUE,OBJ,L /FALSE
|
|
EQUAL? L,LOCAL-GLOBALS,GLOBAL-OBJECTS,GENERIC-OBJECTS \?CCL7
|
|
RETURN L
|
|
?CCL7: IN? OBJ,ROOMS \?CCL9
|
|
RETURN OBJ
|
|
?CCL9: ZERO? INV /?CND10
|
|
FSET? OBJ,INVISIBLE /FALSE
|
|
?CND10: SET 'OBJ,L
|
|
LOC OBJ >L
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT CANT-UNDO
|
|
PRINTR "[I can't undo that now.]"
|
|
|
|
|
|
.FUNCT NOT-HERE-VERB?,V
|
|
EQUAL? V,V?WALK-TO,V?RESEARCH /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT SEE-VERB?
|
|
EQUAL? PRSA,V?SEARCH,V?READ,V?LOOK-UNDER /TRUE
|
|
EQUAL? PRSA,V?LOOK-INSIDE,V?LOOK-DOWN,V?LOOK-BEHIND /TRUE
|
|
EQUAL? PRSA,V?LOOK,V?TAKE,V?FIND /TRUE
|
|
EQUAL? PRSA,V?EXAMINE,V?COUNT,V?CHASTISE /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PERFORM,PA,PO,PI,V,OA,OO,OI,OQ,OS,X
|
|
SET 'OA,PRSA
|
|
SET 'OO,PRSO
|
|
SET 'OI,PRSI
|
|
ZERO? OO /?CCL3
|
|
EQUAL? OO,PI \?CCL3
|
|
SET 'OBJ-SWAP,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL3: ZERO? OI /?CCL7
|
|
EQUAL? OI,PO \?CCL7
|
|
SET 'OBJ-SWAP,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL7: SET 'OBJ-SWAP,FALSE-VALUE
|
|
?CND1: SET 'PRSA,PA
|
|
SET 'PRSI,PI
|
|
SET 'PRSO,PO
|
|
SET 'V,FALSE-VALUE
|
|
ZERO? PRSI /?CND10
|
|
ICALL2 THIS-IS-IT,PRSI
|
|
?CND10: ZERO? PRSO /?CND12
|
|
EQUAL? PRSA,V?WALK /?CND12
|
|
ICALL2 THIS-IS-IT,PRSO
|
|
?CND12: EQUAL? WINNER,PLAYER /?CND16
|
|
ICALL2 THIS-IS-IT,WINNER
|
|
?CND16: SET 'PO,PRSO
|
|
SET 'PI,PRSI
|
|
EQUAL? PRSA,V?STOUCH,V?SWRAP /?CND18
|
|
EQUAL? PRSA,V?STHROW,V?SSHOW,V?SPUT-ON /?CND18
|
|
EQUAL? PRSA,V?SSEARCH-OBJECT-FOR,V?SRIDE-DIR,V?ASK-ABOUT /?CND18
|
|
GETP WINNER,P?ACTION
|
|
CALL D-APPLY,STR?17,STACK,M-WINNER >V
|
|
?CND18: ZERO? V \?CND24
|
|
LOC WINNER
|
|
IN? STACK,ROOMS /?CND24
|
|
LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL D-APPLY,STR?18,STACK,M-BEG >V
|
|
?CND24: ZERO? V \?CND28
|
|
GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?18,STACK,M-BEG >V
|
|
?CND28: ZERO? V \?CND30
|
|
GET PREACTIONS,PA
|
|
CALL D-APPLY,STR?19,STACK >V
|
|
?CND30: SET 'NOW-PRSI,1
|
|
ZERO? V \?CND33
|
|
ZERO? PI /?CND33
|
|
EQUAL? PRSA,V?WALK /?CND33
|
|
LOC PI
|
|
ZERO? STACK /?CND33
|
|
LOC PI
|
|
GETP STACK,P?CONTFCN >V
|
|
ZERO? V /?CND33
|
|
CALL D-APPLY,STR?20,V,M-CONTAINER >V
|
|
?CND33: ZERO? V \?CND41
|
|
ZERO? PI /?CND41
|
|
EQUAL? PI,GLOBAL-HERE \?CND45
|
|
GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?21,STACK >V
|
|
?CND45: ZERO? V \?CND41
|
|
GETP PI,P?ACTION
|
|
CALL D-APPLY,STR?21,STACK >V
|
|
?CND41: SET 'NOW-PRSI,0
|
|
ZERO? V \?CND49
|
|
ZERO? PO /?CND49
|
|
EQUAL? PRSA,V?WALK /?CND49
|
|
LOC PO
|
|
ZERO? STACK /?CND49
|
|
LOC PO
|
|
GETP STACK,P?CONTFCN >V
|
|
ZERO? V /?CND49
|
|
CALL D-APPLY,STR?20,V,M-CONTAINER >V
|
|
?CND49: ZERO? V \?CND57
|
|
ZERO? PO /?CND57
|
|
EQUAL? PRSA,V?WALK /?CND57
|
|
EQUAL? PO,GLOBAL-HERE \?CND62
|
|
GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?22,STACK >V
|
|
?CND62: ZERO? V \?CND57
|
|
GETP PO,P?ACTION
|
|
CALL D-APPLY,STR?22,STACK >V
|
|
?CND57: ZERO? V \?CND66
|
|
GET ACTIONS,PA
|
|
CALL D-APPLY,FALSE-VALUE,STACK >V
|
|
?CND66: EQUAL? M-FATAL,V \?CND69
|
|
SET 'P-CONT,-1
|
|
?CND69: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
|
|
.FUNCT TELL-TOO-DARK
|
|
SET 'P-CONT,-1
|
|
PRINT TOO-DARK
|
|
EQUAL? PRSA,V?LOOK \?CCL3
|
|
CALL1 GRUE-PIT-WARNING
|
|
RSTACK
|
|
?CCL3: CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ITAKE-CHECK,OBJ,BITS,TAKEN
|
|
EQUAL? OBJ,IT \?CND1
|
|
SET 'OBJ,P-IT-OBJECT
|
|
?CND1: CALL HELD?,OBJ,WINNER
|
|
ZERO? STACK \FALSE
|
|
EQUAL? OBJ,HANDS,ROOMS /FALSE
|
|
FSET? OBJ,TRYTAKEBIT /?CND8
|
|
EQUAL? WINNER,PLAYER /?CCL12
|
|
SET 'TAKEN,TRUE-VALUE
|
|
JUMP ?CND8
|
|
?CCL12: BTST BITS,32 \?CND8
|
|
CALL ITAKE,FALSE-VALUE,OBJ
|
|
EQUAL? STACK,TRUE-VALUE \?CND8
|
|
SET 'TAKEN,TRUE-VALUE
|
|
?CND8: ZERO? TAKEN \FALSE
|
|
BTST BITS,64 \FALSE
|
|
BTST BITS,128 /FALSE
|
|
PRINTC 91
|
|
EQUAL? WINNER,PLAYER \?CCL24
|
|
PRINTI "You are"
|
|
JUMP ?CND22
|
|
?CCL24: ICALL2 TELL-CTHE,WINNER
|
|
PRINTI " is"
|
|
?CND22: PRINTI "n't holding "
|
|
ICALL2 TELL-THE,OBJ
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
PRINTR "!]"
|
|
|
|
|
|
.FUNCT D-APPLY,STR,FCN,FOO,RES
|
|
ZERO? FCN /FALSE
|
|
ZERO? FOO /?CCL6
|
|
CALL FCN,FOO >RES
|
|
RETURN RES
|
|
?CCL6: CALL FCN >RES
|
|
RETURN RES
|
|
|
|
|
|
.FUNCT NOT-HERE,OBJ,CLOCK
|
|
ZERO? CLOCK \?CND1
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "[But"
|
|
?CND1: PRINTC 32
|
|
ICALL2 TELL-THE,OBJ
|
|
PRINTI " isn't "
|
|
CALL2 VISIBLE?,OBJ
|
|
ZERO? STACK /?CCL5
|
|
PRINTI "close enough"
|
|
CALL1 SPEAKING-VERB?
|
|
ZERO? STACK /?CND6
|
|
PRINTI " to hear you"
|
|
?CND6: PRINTC 46
|
|
JUMP ?CND3
|
|
?CCL5: PRINTI "here!"
|
|
?CND3: ICALL2 THIS-IS-IT,OBJ
|
|
ZERO? CLOCK \?CND8
|
|
PRINTC 93
|
|
?CND8: CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SPEAKING-VERB?,A
|
|
ASSIGNED? 'A /?CND1
|
|
SET 'A,PRSA
|
|
?CND1: EQUAL? A,V?ASK-ABOUT,V?ASK-FOR,V?HELLO /TRUE
|
|
EQUAL? A,V?NO,V?TELL,V?TELL-ABOUT /TRUE
|
|
EQUAL? A,V?YES /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT GET-OWNER,OBJ,TMP,NP
|
|
CALL2 GET-NP,OBJ >NP
|
|
ZERO? NP /FALSE
|
|
GET NP,4 >TMP
|
|
ZERO? TMP \?CTR5
|
|
GET NP,1 >TMP
|
|
ZERO? TMP /?CCL6
|
|
GET TMP,2 >TMP
|
|
ZERO? TMP /?CCL6
|
|
?CTR5: LESS? 0,TMP \FALSE
|
|
GRTR? TMP,LAST-OBJECT /FALSE
|
|
RETURN TMP
|
|
?CCL6: GETP OBJ,P?OWNER >TMP
|
|
ZERO? TMP /FALSE
|
|
LESS? 0,TMP \?CCL17
|
|
GRTR? TMP,LAST-OBJECT \FALSE
|
|
?CCL17: RETURN PLAYER
|
|
|
|
|
|
.FUNCT GET-NP,OBJ,PRSI?
|
|
SET 'PRSI?,NOW-PRSI
|
|
EQUAL? OBJ,PRSO,PRSI \FALSE
|
|
ZERO? OBJ /?CND1
|
|
EQUAL? OBJ,PRSO \?CCL7
|
|
SET 'PRSI?,FALSE-VALUE
|
|
JUMP ?CND1
|
|
?CCL7: SET 'PRSI?,TRUE-VALUE
|
|
?CND1: ZERO? OBJ-SWAP /?CCL10
|
|
ZERO? PRSI? /?CCL13
|
|
RETURN PRSO-NP
|
|
?CCL13: RETURN PRSI-NP
|
|
?CCL10: ZERO? PRSI? /?CCL15
|
|
RETURN PRSI-NP
|
|
?CCL15: RETURN PRSO-NP
|
|
|
|
|
|
.FUNCT NOUN-USED?,OBJ,WD1,WD2,WD3,X
|
|
CALL2 GET-NP,OBJ >X
|
|
ZERO? X /FALSE
|
|
GET X,2 >X
|
|
ZERO? X /FALSE
|
|
EQUAL? X,WD1,WD2,WD3 /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ADJ-USED?,OBJ,WD1,WD2,WD3,NP,CT
|
|
CALL2 GET-NP,OBJ >NP
|
|
ZERO? NP /FALSE
|
|
GET NP,1 >NP
|
|
ZERO? NP /FALSE
|
|
GET NP,2
|
|
EQUAL? PLAYER,STACK \?CCL8
|
|
EQUAL? W?MY,WD1,WD2,WD3 \?CCL8
|
|
RETURN W?MY
|
|
?CCL8: GET NP,4 >CT
|
|
GRTR? CT,0 \FALSE
|
|
ADD NP,10 >NP
|
|
INTBL? WD1,NP,CT \?CCL15
|
|
RETURN WD1
|
|
?CCL15: ZERO? WD2 /FALSE
|
|
INTBL? WD2,NP,CT \?CCL20
|
|
RETURN WD2
|
|
?CCL20: ZERO? WD3 /FALSE
|
|
INTBL? WD3,NP,CT \FALSE
|
|
RETURN WD3
|
|
|
|
.ENDSEG
|
|
|
|
.ENDI
|