hitchhikersguide-gold/misc.zap

432 lines
8.9 KiB
Plaintext

.FUNCT RUNNING?,RTN,C,E,TICK
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E /FALSE
GET C,C-RTN
EQUAL? STACK,RTN \?CND3
GET C,C-ENABLED?
ZERO? STACK /FALSE
GET C,C-TICK >TICK
ZERO? TICK /FALSE
GRTR? TICK,1 /FALSE
RTRUE
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT PICK-ONE,FROB
GET FROB,0
RANDOM STACK
GET FROB,STACK
RSTACK
.FUNCT GO
START::
?FCN: PUTB P-LEXV,0,59
GETB 0,30 >HOST
GETB 0,33 >WIDTH
CALL QUEUE,I-HOUSEWRECK,20
PUT STACK,0,1
CALL QUEUE,I-THING,21
PUT STACK,0,1
CALL QUEUE,I-VOGONS,50
PUT STACK,0,1
SET 'WINNER,PROTAGONIST
SET 'PLAYER,PROTAGONIST
SET 'HERE,BEDROOM
SET 'IDENTITY-FLAG,ARTHUR
MOVE ARTHUR,GLOBAL-OBJECTS
SET 'LYING-DOWN,TRUE-VALUE
MOVE PROTAGONIST,BED
CLEAR -1
ICALL1 INIT-STATUS-LINE
ICALL1 V-VERSION
CRLF
PRINTI "You wake up. The room is spinning very gently round your head. Or at least it would be if you could see it which you can't."
CRLF
CRLF
ICALL1 V-LOOK
ICALL1 MAIN-LOOP
JUMP ?FCN
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1
?PRG1: SET 'CNT,0
SET 'OBJ,FALSE-VALUE
SET 'PTBL,TRUE-VALUE
CALL1 PARSER >P-WON
ZERO? P-WON /?CCL5
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? P-IT-OBJECT /?CND6
CALL2 ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND6
SET 'TMP,FALSE-VALUE
?PRG10: IGRTR? 'CNT,ICNT /?REP11
GET P-PRSI,CNT
EQUAL? STACK,IT \?PRG10
PUT P-PRSI,CNT,P-IT-OBJECT
SET 'TMP,TRUE-VALUE
?REP11: ZERO? TMP \?CND17
SET 'CNT,0
?PRG19: IGRTR? 'CNT,OCNT /?CND17
GET P-PRSO,CNT
EQUAL? STACK,IT \?PRG19
PUT P-PRSO,CNT,P-IT-OBJECT
?CND17: SET 'CNT,0
?CND6: ZERO? OCNT \?CCL28
SET 'NUM,OCNT
JUMP ?CND26
?CCL28: GRTR? OCNT,1 \?CCL30
SET 'TBL,P-PRSO
ZERO? ICNT \?CCL33
SET 'OBJ,FALSE-VALUE
JUMP ?CND31
?CCL33: GET P-PRSI,1 >OBJ
?CND31: SET 'NUM,OCNT
JUMP ?CND26
?CCL30: GRTR? ICNT,1 \?CCL35
SET 'PTBL,FALSE-VALUE
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
SET 'NUM,ICNT
JUMP ?CND26
?CCL35: SET 'NUM,1
?CND26: ZERO? OBJ \?CND36
EQUAL? ICNT,1 \?CND36
GET P-PRSI,1 >OBJ
?CND36: EQUAL? PRSA,V?WALK \?CCL42
ZERO? P-WALK-DIR \?CTR41
ZERO? PRSO /?CCL42
?CTR41: CALL PERFORM,PRSA,PRSO >V
JUMP ?CND40
?CCL42: ZERO? NUM \?CCL48
GETB P-SYNTAX,P-SBITS
BAND STACK,P-SONUMS
ZERO? STACK \?CCL51
CALL2 PERFORM,PRSA >V
SET 'PRSO,FALSE-VALUE
JUMP ?CND40
?CCL51: ZERO? LIT \?PRG56
PRINT TOO-DARK
CRLF
ICALL1 FUCKING-CLEAR
JUMP ?CND40
?PRG56: PRINTI "There isn't anything to "
GET P-ITBL,P-VERBN >TMP
EQUAL? PRSA,V?TELL \?CCL60
PRINTI "talk to"
JUMP ?PRG67
?CCL60: ZERO? P-OFLAG \?CTR63
ZERO? P-MERGED /?CCL64
?CTR63: GET TMP,0
PRINTB STACK
JUMP ?PRG67
?CCL64: GETB TMP,2 >?TMP1
GETB TMP,3
ICALL WORD-PRINT,?TMP1,STACK
?PRG67: PRINTC 33
CRLF
SET 'V,FALSE-VALUE
ICALL1 FUCKING-CLEAR
JUMP ?CND40
?CCL48: SET 'P-NOT-HERE,0
SET 'P-MULT,FALSE-VALUE
GRTR? NUM,1 \?CND69
SET 'P-MULT,TRUE-VALUE
?CND69: SET 'TMP,FALSE-VALUE
?PRG71: IGRTR? 'CNT,NUM \?CCL75
GRTR? P-NOT-HERE,0 \?CCL78
PRINTI "The "
EQUAL? P-NOT-HERE,NUM /?PRG85
PRINTI "other "
?PRG85: PRINTI "object"
EQUAL? P-NOT-HERE,1 /?PRG91
PRINTC 115
?PRG91: PRINTI " that you mentioned "
EQUAL? P-NOT-HERE,1 /?PRG98
PRINTI "are"
JUMP ?PRG100
?PRG98: PRINTI "is"
?PRG100: PRINTI "n't here."
CRLF
JUMP ?CND40
?CCL78: ZERO? TMP \?CND40
PRINT REFERRING
CRLF
JUMP ?CND40
?CCL75: ZERO? PTBL /?CCL107
GET P-PRSO,CNT >OBJ1
JUMP ?CND105
?CCL107: GET P-PRSI,CNT >OBJ1
?CND105: ZERO? PTBL /?CCL110
SET 'PRSO,OBJ1
JUMP ?CND108
?CCL110: SET 'PRSO,OBJ
?CND108: ZERO? PTBL /?CCL113
SET 'PRSI,OBJ
JUMP ?CND111
?CCL113: SET 'PRSI,OBJ1
?CND111: GRTR? NUM,1 /?CCL115
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL \?CND114
?CCL115: EQUAL? OBJ1,NOT-HERE-OBJECT \?CCL120
INC 'P-NOT-HERE
JUMP ?PRG71
?CCL120: EQUAL? P-GETFLAGS,P-ALL \?CCL122
EQUAL? PRSA,V?PICK-UP,V?TAKE \?CCL122
LOC OBJ1
EQUAL? STACK,WINNER,HERE,PRSI /?PRD127
LOC OBJ1
FSET? STACK,SURFACEBIT \?PRG71
?PRD127: FSET? OBJ1,TAKEBIT /?CCL122
FSET? OBJ1,TRYTAKEBIT \?PRG71
?CCL122: EQUAL? PRSA,V?PICK-UP,V?TAKE \?CCL133
ZERO? PRSI /?CCL133
IN? PRSO,PRSI \?PRG71
?CCL133: EQUAL? P-GETFLAGS,P-ALL \?CCL138
EQUAL? PRSA,V?DROP \?CCL138
IN? OBJ1,WINNER \?PRG71
?CCL138: EQUAL? P-GETFLAGS,P-ALL \?CCL143
ZERO? PRSI /?CCL143
EQUAL? PRSO,PRSI /?PRG71
?CCL143: EQUAL? P-GETFLAGS,P-ALL \?CCL148
EQUAL? PRSA,V?PUT \?CCL148
CALL HELD?,PRSO,PRSI
ZERO? STACK \?PRG71
?CCL148: CALL2 ACCESSIBLE?,OBJ1
ZERO? STACK /?PRG71
EQUAL? OBJ1,IT \?CCL156
PRINTD P-IT-OBJECT
JUMP ?CND154
?CCL156: CALL2 TEA-PRINT,OBJ1
ZERO? STACK /?CND154
PRINTD OBJ1
?CND154: CALL2 TEA-PRINT,OBJ1
ZERO? STACK /?CND114
PRINTI ": "
?CND114: SET 'TMP,TRUE-VALUE
CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? V,M-FATAL \?PRG71
?CND40: EQUAL? V,M-FATAL /?CND164
EQUAL? PRSA,V?SUPERBRIEF,V?BRIEF,V?TELL /?CND164
EQUAL? PRSA,V?SAVE,V?HINTS,V?VERBOSE /?CND164
EQUAL? PRSA,V?SCRIPT,V?RESTORE,V?VERSION /?CND164
EQUAL? PRSA,V?UNSCRIPT /?CND164
LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-END >V
?CND164: EQUAL? V,M-FATAL \?CND3
SET 'P-CONT,FALSE-VALUE
JUMP ?CND3
?CCL5: SET 'P-CONT,FALSE-VALUE
?CND3: ZERO? P-WON /?CCL177
EQUAL? PRSA,V?SUPERBRIEF,V?BRIEF,V?TELL /?CND178
EQUAL? PRSA,V?QUIT,V?VERSION,V?VERBOSE /?CND178
EQUAL? PRSA,V?RESTORE,V?SAVE,V?SCORE /?CND178
EQUAL? PRSA,V?FOOTNOTE,V?UNSCRIPT,V?SCRIPT /?CND178
EQUAL? PRSA,V?RESTART,V?HINTS /?CND178
EQUAL? PRSA,V?WAIT \?CCL187
ZERO? DONT-FLAG \?CND178
?CCL187: CALL1 CLOCKER >V
?CND178: SET 'PRSA,FALSE-VALUE
SET 'PRSO,FALSE-VALUE
SET 'PRSI,FALSE-VALUE
JUMP ?PRG1
?CCL177: GETB P-LEXV,P-LEXWORDS
GRTR? STACK,3 \?PRG1
ZERO? CARELESS-WORDS-FLAG \?PRG1
ZERO? EARTH-DEMOLISHED /?PRG1
CALL2 SAVE-INPUT,FIRST-BUFFER
ZERO? STACK /?PRG1
SET 'CARELESS-WORDS-FLAG,TRUE-VALUE
CALL QUEUE,I-CARELESS-WORDS,3
PUT STACK,0,1
JUMP ?PRG1
.FUNCT SAVE-INPUT,TBL,OFFS,CNT,TMP,?TMP1
MUL 4,P-INPUT-WORDS >TMP
GETB P-LEXV,TMP >?TMP1
ADD TMP,1
GETB P-LEXV,STACK
ADD ?TMP1,STACK >CNT
ZERO? CNT /FALSE
DEC 'CNT
?PRG3: EQUAL? OFFS,CNT \?CCL7
PUTB TBL,OFFS,0
RTRUE
?CCL7: ADD OFFS,1
GETB P-INBUF,STACK
PUTB TBL,OFFS,STACK
INC 'OFFS
JUMP ?PRG3
.FUNCT RESTORE-INPUT,TBL,CHR
INC 'TBL
?PRG1: GETB TBL,0 >CHR
ZERO? CHR /TRUE
PRINTC CHR
INC 'TBL
JUMP ?PRG1
.FUNCT FAKE-ORPHAN,TMP,?TMP1
ICALL ORPHAN,P-SYNTAX,FALSE-VALUE
PRINTI "Be specific: what object do"
ZERO? DONT-FLAG /?PRG7
PRINTI "n't"
?PRG7: PRINTI " you want to "
GET P-OTBL,P-VERBN >TMP
ZERO? TMP \?CCL11
PRINTI "tell"
JUMP ?CND9
?CCL11: GETB P-VTBL,2
ZERO? STACK \?CCL15
GET TMP,0
PRINTB STACK
JUMP ?CND9
?CCL15: GETB TMP,2 >?TMP1
GETB TMP,3
ICALL WORD-PRINT,?TMP1,STACK
PUTB P-VTBL,2,0
?CND9: SET 'P-OFLAG,TRUE-VALUE
SET 'P-WON,FALSE-VALUE
GETB P-SYNTAX,P-SPREP1
ICALL2 PREP-PRINT,STACK
PRINTR "?"
.FUNCT PERFORM,A,O,I,V,OA,OO,OI
SET 'OA,PRSA
SET 'OO,PRSO
SET 'OI,PRSI
SET 'PRSA,A
EQUAL? IT,I,O \?CND1
ZERO? P-WALK-DIR \?CND1
EQUAL? A,V?WALK /?CND1
ZERO? I \?PRG9
ICALL1 FAKE-ORPHAN
RETURN 2
?PRG9: PRINT REFERRING
CRLF
RETURN 2
?CND1: SET 'PRSO,O
SET 'PRSI,I
EQUAL? A,V?WALK /?CND13
ZERO? P-WALK-DIR \?CND13
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CND13
CALL D-APPLY,STR?1,NOT-HERE-OBJECT-F >V
ZERO? V /?CND13
SET 'P-WON,FALSE-VALUE
?CND13: SET 'O,PRSO
SET 'I,PRSI
ICALL2 THIS-IS-IT,PRSI
ICALL2 THIS-IS-IT,PRSO
ZERO? V \?CND20
GETP WINNER,P?ACTION
CALL D-APPLY,STR?2,STACK >V
?CND20: ZERO? V \?CND22
ZERO? DONT-FLAG /?CND22
CALL1 DONT-F >V
?CND22: ZERO? V \?CND26
LOC WINNER
ZERO? STACK /?CND26
LOC WINNER
GETP STACK,P?ACTION
CALL D-APPLY,STR?3,STACK,M-BEG >V
?CND26: ZERO? V \?CND30
GET PREACTIONS,A
CALL D-APPLY,STR?4,STACK >V
?CND30: ZERO? V \?CND32
ZERO? I /?CND32
GETP I,P?ACTION
CALL D-APPLY,STR?5,STACK >V
?CND32: ZERO? V \?CND36
ZERO? O /?CND36
EQUAL? A,V?WALK /?CND36
GETP O,P?ACTION
CALL D-APPLY,STR?6,STACK >V
?CND36: ZERO? V \?CND41
GET ACTIONS,A
CALL D-APPLY,FALSE-VALUE,STACK >V
?CND41: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.FUNCT THIS-IS-IT,OBJ
EQUAL? OBJ,FALSE-VALUE,PROTAGONIST /TRUE
EQUAL? OBJ,NOT-HERE-OBJECT,ME,GLOBAL-ROOM /TRUE
EQUAL? PRSA,V?WALK \?CCL3
EQUAL? PRSO,OBJ /TRUE
?CCL3: SET 'P-IT-OBJECT,OBJ
RETURN P-IT-OBJECT
.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 QUEUE,RTN,TICK,CINT
CALL2 INT,RTN >CINT
PUT CINT,C-TICK,TICK
RETURN CINT
.FUNCT INT,RTN,E,C,INT
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E \?CCL5
SUB C-INTS,C-INTLEN >C-INTS
ADD C-TABLE,C-INTS >INT
PUT INT,C-RTN,RTN
RETURN INT
?CCL5: GET C,C-RTN
EQUAL? STACK,RTN \?CND3
RETURN C
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT CLOCKER,C,E,TICK,FLG
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: ZERO? P-WON \?CCL5
PUSH 0
JUMP ?CND3
?CCL5: PUSH C-INTS
?CND3: ADD C-TABLE,STACK >C
ADD C-TABLE,C-TABLELEN >E
?PRG6: EQUAL? C,E \?CCL10
INC 'MOVES
RETURN FLG
?CCL10: GET C,C-ENABLED?
ZERO? STACK /?CND8
GET C,C-TICK >TICK
ZERO? TICK /?CND8
SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND8
GET C,C-RTN
CALL STACK
ZERO? STACK /?CND8
SET 'FLG,TRUE-VALUE
?CND8: ADD C,C-INTLEN >C
JUMP ?PRG6
.ENDI