mirror of
https://github.com/historicalsource/restaurant
synced 2024-07-16 21:44:39 +03:00
449 lines
8.7 KiB
Plaintext
449 lines
8.7 KiB
Plaintext
|
|
.SEGMENT "0"
|
|
|
|
|
|
.FUNCT MORE-SPECIFIC:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "[Please be more specific.]"
|
|
|
|
|
|
.FUNCT V-PDEBUG:ANY:0:0
|
|
ZERO? PRSO /?CCL3
|
|
ZERO? IDEBUG /?PRT4
|
|
SET 'IDEBUG,0
|
|
JUMP ?PRE6
|
|
?PRT4: SET 'IDEBUG,1
|
|
?PRE6: PRINTC 123
|
|
PRINTN IDEBUG
|
|
PRINTR "}"
|
|
?CCL3: ZERO? P-DBUG /?PRT9
|
|
SET 'P-DBUG,0
|
|
JUMP ?PRE11
|
|
?PRT9: SET 'P-DBUG,1
|
|
?PRE11: ZERO? P-DBUG /?CCL8
|
|
PRINTR "Find them bugs, boss!"
|
|
?CCL8: PRINTR "No bugs left, eh?"
|
|
|
|
|
|
.FUNCT VERB-ALL-TEST:ANY:2:2,O,I,L
|
|
LOC O >L
|
|
EQUAL? PRSA,V?GIVE,V?DROP \?CCL3
|
|
EQUAL? L,WINNER /TRUE
|
|
RFALSE
|
|
?CCL3: EQUAL? PRSA,V?PUT \?CCL8
|
|
EQUAL? O,I /FALSE
|
|
IN? O,I /FALSE
|
|
RTRUE
|
|
?CCL8: EQUAL? PRSA,V?TAKE \?CCL15
|
|
FSET? O,TAKEBIT /?CND16
|
|
FSET? O,TRYTAKEBIT \FALSE
|
|
?CND16: ZERO? I /?CCL22
|
|
EQUAL? L,I /?CND20
|
|
RFALSE
|
|
?CCL22: EQUAL? L,HERE /TRUE
|
|
?CND20: FSET? L,PERSONBIT /TRUE
|
|
FSET? L,SURFACEBIT /TRUE
|
|
FSET? L,CONTBIT \FALSE
|
|
FSET? L,OPENBIT /TRUE
|
|
RFALSE
|
|
?CCL15: ZERO? I /TRUE
|
|
EQUAL? O,I /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FIX-HIM-HER-IT:ANY:2:2,PRON,OBJ
|
|
ZERO? OBJ \?CCL3
|
|
ICALL1 MORE-SPECIFIC
|
|
RFALSE
|
|
?CCL3: CALL2 ACCESSIBLE?,OBJ
|
|
ZERO? STACK \?CCL5
|
|
EQUAL? PRON,PRSO \?PRD9
|
|
CALL2 EVERYWHERE-VERB?,1
|
|
ZERO? STACK /?CTR4
|
|
?PRD9: EQUAL? PRON,PRSI \?CCL5
|
|
CALL2 EVERYWHERE-VERB?,2
|
|
ZERO? STACK \?CCL5
|
|
?CTR4: ICALL2 NOT-HERE,OBJ
|
|
RFALSE
|
|
?CCL5: EQUAL? PRSO,PRON \?CND14
|
|
SET 'PRSO,OBJ
|
|
ICALL TELL-PRONOUN,OBJ,PRON
|
|
?CND14: EQUAL? PRSI,PRON \?CND16
|
|
SET 'PRSI,OBJ
|
|
ICALL TELL-PRONOUN,OBJ,PRON
|
|
?CND16: EQUAL? PRSS,PRON \TRUE
|
|
SET 'PRSS,OBJ
|
|
ICALL TELL-PRONOUN,OBJ,PRON
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TELL-PRONOUN:ANY:2:2,OBJ,PRON
|
|
FSET? PRON,TOUCHBIT /FALSE
|
|
EQUAL? OPRSO,OBJ /FALSE
|
|
EQUAL? PRSA,V?DO? /FALSE
|
|
PRINTI "["""
|
|
PRINTD PRON
|
|
PRINTI """ meaning "
|
|
ICALL2 TELL-THE,OBJ
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT NO-M-WINNER-VERB?:ANY:0:0
|
|
RFALSE
|
|
|
|
|
|
.FUNCT FIND-A-WINNER:ANY:0:1,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 TELL-SAID-TO:ANY:1:1,PER
|
|
PRINTI "[said to "
|
|
PRINTD PER
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT QCONTEXT-GOOD?:ANY:0:0
|
|
ZERO? QCONTEXT /FALSE
|
|
FSET? QCONTEXT,PERSONBIT \FALSE
|
|
CALL2 META-LOC,QCONTEXT
|
|
EQUAL? HERE,STACK \FALSE
|
|
RETURN QCONTEXT
|
|
|
|
|
|
.FUNCT META-LOC:ANY:1:2,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:ANY:0:0
|
|
PRINTR "[I can't undo that now.]"
|
|
|
|
|
|
.FUNCT PERFORM:ANY:1:3,PA,PO,PI,V,OA,OO,OI,OQ,OS,X,?TMP1,?TMP2
|
|
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
|
|
ZERO? P-DBUG /?CND10
|
|
PRINTI "{Perform: A="
|
|
PRINTN PA
|
|
ZERO? PO /?CND12
|
|
PRINTI "/O="
|
|
EQUAL? PRSA,V?WALK \?CCL16
|
|
PRINTN PO
|
|
JUMP ?CND12
|
|
?CCL16: ICALL2 TELL-D-LOC,PO
|
|
?CND12: ZERO? PI /?CND17
|
|
PRINTI "/I="
|
|
ICALL2 TELL-D-LOC,PI
|
|
?CND17: ZERO? PRSQ /?CND19
|
|
PRINTI "/Q="
|
|
PRINTN PRSQ
|
|
?CND19: ZERO? PRSS /?CND21
|
|
PRINTI "/S="
|
|
ICALL2 TELL-D-LOC,PRSS
|
|
?CND21: PRINTI "}
|
|
"
|
|
?CND10: SET 'V,FALSE-VALUE
|
|
ZERO? PRSS /?CND23
|
|
ICALL2 THIS-IS-IT,PRSS
|
|
?CND23: ZERO? PRSI /?CND25
|
|
ICALL2 THIS-IS-IT,PRSI
|
|
?CND25: ZERO? PRSO /?CND27
|
|
EQUAL? PRSA,V?TELL /?CND27
|
|
EQUAL? PRSA,V?WALK /?CND27
|
|
ICALL2 THIS-IS-IT,PRSO
|
|
?CND27: EQUAL? WINNER,PLAYER /?CND32
|
|
ICALL2 THIS-IS-IT,WINNER
|
|
?CND32: SET 'PO,PRSO
|
|
SET 'PI,PRSI
|
|
CALL1 NO-M-WINNER-VERB?
|
|
ZERO? STACK \?CND34
|
|
GETP WINNER,P?ACTION
|
|
CALL D-APPLY,STR?47,STACK,M-WINNER >V
|
|
?CND34: ZERO? PRSS /?CND37
|
|
ZERO? V \?CND39
|
|
GETP PRSS,P?ACTION
|
|
CALL D-APPLY,STR?48,STACK,M-SUBJ >V
|
|
?CND39: ZERO? V \?CND41
|
|
ZERO? PRSQ /?CND41
|
|
GET ACTIONS,PA >?TMP2
|
|
ADD QACTIONS,2 >?TMP1
|
|
GET QACTIONS,0
|
|
INTBL? ?TMP2,?TMP1,STACK >X \?CND41
|
|
GET X,2
|
|
CALL D-APPLY,STR?49,STACK >V
|
|
?CND41: ZERO? V \?CND47
|
|
ZERO? PRSQ /?CCL51
|
|
GET ACTIONS,PA >?TMP2
|
|
ADD QACTIONS,2 >?TMP1
|
|
GET QACTIONS,0
|
|
INTBL? ?TMP2,?TMP1,STACK >X \?CND52
|
|
GET X,1 >X
|
|
ZERO? X /?CND52
|
|
CALL D-APPLY,FALSE-VALUE,X >V
|
|
?CND52: ZERO? V \?CND47
|
|
GET ACTIONS,PRSQ
|
|
CALL D-APPLY,FALSE-VALUE,STACK >V
|
|
JUMP ?CND47
|
|
?CCL51: ICALL D-APPLY,FALSE-VALUE,V-STATEMENT
|
|
?CND47: EQUAL? M-FATAL,V \?CND58
|
|
SET 'P-CONT,-1
|
|
?CND58: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
?CND37: ZERO? V \?CND60
|
|
LOC WINNER
|
|
IN? STACK,ROOMS /?CND60
|
|
LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL D-APPLY,STR?50,STACK,M-BEG >V
|
|
?CND60: ZERO? V \?CND64
|
|
GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?50,STACK,M-BEG >V
|
|
?CND64: ZERO? V \?CND66
|
|
GET PREACTIONS,PA
|
|
CALL D-APPLY,STR?49,STACK >V
|
|
?CND66: SET 'NOW-PRSI,1
|
|
ZERO? V \?CND68
|
|
ZERO? PI /?CND68
|
|
EQUAL? PRSA,V?WALK /?CND68
|
|
LOC PI
|
|
ZERO? STACK /?CND68
|
|
LOC PI
|
|
GETP STACK,P?CONTFCN >V
|
|
ZERO? V /?CND68
|
|
CALL D-APPLY,STR?51,V,M-CONTAINER >V
|
|
?CND68: ZERO? V \?CND76
|
|
ZERO? PI /?CND76
|
|
EQUAL? PI,GLOBAL-HERE \?CND80
|
|
GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?52,STACK >V
|
|
?CND80: ZERO? V \?CND76
|
|
GETP PI,P?ACTION
|
|
CALL D-APPLY,STR?52,STACK >V
|
|
?CND76: SET 'NOW-PRSI,0
|
|
ZERO? V \?CND84
|
|
ZERO? PO /?CND84
|
|
EQUAL? PRSA,V?WALK /?CND84
|
|
LOC PO
|
|
ZERO? STACK /?CND84
|
|
LOC PO
|
|
GETP STACK,P?CONTFCN >V
|
|
ZERO? V /?CND84
|
|
CALL D-APPLY,STR?51,V,M-CONTAINER >V
|
|
?CND84: ZERO? V \?CND92
|
|
ZERO? PO /?CND92
|
|
EQUAL? PRSA,V?WALK /?CND92
|
|
EQUAL? PO,GLOBAL-HERE \?CND97
|
|
GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?53,STACK >V
|
|
?CND97: ZERO? V \?CND92
|
|
GETP PO,P?ACTION
|
|
CALL D-APPLY,STR?53,STACK >V
|
|
?CND92: ZERO? V \?CND101
|
|
GET ACTIONS,PA
|
|
CALL D-APPLY,FALSE-VALUE,STACK >V
|
|
?CND101: EQUAL? M-FATAL,V \?CND104
|
|
SET 'P-CONT,-1
|
|
?CND104: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
|
|
.FUNCT TELL-TOO-DARK:ANY:0:0
|
|
PRINT TOO-DARK
|
|
RETURN M-FATAL
|
|
|
|
|
|
.FUNCT ITAKE-CHECK:ANY:2:2,OBJ,BITS,TAKEN
|
|
EQUAL? OBJ,IT \?CCL3
|
|
SET 'OBJ,P-IT-OBJECT
|
|
JUMP ?CND1
|
|
?CCL3: EQUAL? OBJ,THEM \?CND1
|
|
SET 'OBJ,P-THEM-OBJECT
|
|
?CND1: CALL HELD?,OBJ,WINNER
|
|
ZERO? STACK \FALSE
|
|
EQUAL? OBJ,HANDS,ROOMS /FALSE
|
|
FSET? OBJ,TRYTAKEBIT /?CND10
|
|
EQUAL? WINNER,PLAYER /?CCL14
|
|
SET 'TAKEN,TRUE-VALUE
|
|
JUMP ?CND10
|
|
?CCL14: BTST BITS,32 \?CND10
|
|
CALL ITAKE,FALSE-VALUE,OBJ
|
|
EQUAL? STACK,TRUE-VALUE \?CND10
|
|
SET 'TAKEN,TRUE-VALUE
|
|
?CND10: ZERO? TAKEN \FALSE
|
|
BTST BITS,64 \FALSE
|
|
BTST BITS,128 /FALSE
|
|
PRINTC 91
|
|
EQUAL? WINNER,PLAYER \?CCL26
|
|
PRINTI "You are"
|
|
JUMP ?CND24
|
|
?CCL26: ICALL2 TELL-CTHE,WINNER
|
|
PRINTI " is"
|
|
?CND24: PRINTI "n't holding "
|
|
ICALL2 TELL-THE,OBJ
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
PRINTR "!]"
|
|
|
|
|
|
.FUNCT TELL-D-LOC:ANY:1:1,OBJ
|
|
PRINTD OBJ
|
|
IN? OBJ,GLOBAL-OBJECTS \?CCL3
|
|
PRINTI "(gl)"
|
|
JUMP ?CND1
|
|
?CCL3: IN? OBJ,LOCAL-GLOBALS \?CCL5
|
|
PRINTI "(lg)"
|
|
JUMP ?CND1
|
|
?CCL5: IN? OBJ,ROOMS \?CND1
|
|
PRINTI "(rm)"
|
|
?CND1: EQUAL? OBJ,INTNUM \FALSE
|
|
PRINTC 40
|
|
PRINTN P-NUMBER
|
|
PRINTC 41
|
|
RTRUE
|
|
|
|
|
|
.FUNCT D-APPLY:ANY:2:3,STR,FCN,FOO,RES
|
|
ZERO? FCN /FALSE
|
|
ZERO? P-DBUG /?CND4
|
|
ZERO? STR \?CCL8
|
|
PRINTI "{Action:}
|
|
"
|
|
JUMP ?CND4
|
|
?CCL8: PRINTC 123
|
|
PRINT STR
|
|
EQUAL? STR,STR?47 \?CND9
|
|
PRINTC 61
|
|
PRINTD WINNER
|
|
?CND9: PRINTI ": "
|
|
?CND4: ZERO? FOO /?CCL13
|
|
CALL FCN,FOO >RES
|
|
JUMP ?CND11
|
|
?CCL13: CALL FCN >RES
|
|
?CND11: ZERO? P-DBUG /?CND14
|
|
ZERO? STR /?CND14
|
|
EQUAL? M-FATAL,RES /?CTR19
|
|
EQUAL? P-CONT,-1 \?CCL20
|
|
?CTR19: PRINTI "Fatal}
|
|
"
|
|
RETURN RES
|
|
?CCL20: ZERO? RES \?CCL24
|
|
PRINTI "Not handled}
|
|
"
|
|
RETURN RES
|
|
?CCL24: PRINTI "Handled}
|
|
"
|
|
?CND14: RETURN RES
|
|
|
|
|
|
.FUNCT NOT-HERE:ANY:1:2,OBJ,CLOCK
|
|
ZERO? CLOCK \?CND1
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "[But"
|
|
?CND1: PRINTC 32
|
|
ICALL2 TELL-THE,OBJ
|
|
ICALL2 PRINT-IS/ARE,OBJ
|
|
PRINTI "n'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 GET-OWNER:ANY:1:1,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:ANY:0:1,OBJ,PRSI?
|
|
SET 'PRSI?,NOW-PRSI
|
|
EQUAL? OBJ,FALSE-VALUE,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?:ANY:2:4,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
|
|
|
|
.ENDSEG
|
|
|
|
.ENDI
|