mirror of
https://github.com/historicalsource/planetfall
synced 2024-06-26 03:40:56 +03:00
367 lines
7.7 KiB
Plaintext
367 lines
7.7 KiB
Plaintext
|
|
|
|
.FUNCT PICK-ONE,FROB
|
|
GET FROB,0
|
|
RANDOM STACK
|
|
GET FROB,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GO
|
|
START::
|
|
|
|
?FCN: PUTB P-LEXV,0,59
|
|
CALL QUEUE,I-BLATHER,-1
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-AMBASSADOR,-1
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-RANDOM-INTERRUPTS,1
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-SLEEP-WARNINGS,3600
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-HUNGER-WARNINGS,2000
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-SICKNESS-WARNINGS,1000
|
|
PUT STACK,0,1
|
|
SET 'SPOUT-PLACED,GROUND
|
|
GETB 0,56
|
|
ZERO? STACK \?CCL3
|
|
RANDOM 180
|
|
ADD 4450,STACK >INTERNAL-MOVES
|
|
JUMP ?CND1
|
|
?CCL3: SET 'INTERNAL-MOVES,4540
|
|
?CND1: SET 'MOVES,INTERNAL-MOVES
|
|
SET 'LIT,TRUE-VALUE
|
|
SET 'WINNER,ADVENTURER
|
|
SET 'HERE,DECK-NINE
|
|
SET 'P-IT-LOC,DECK-NINE
|
|
SET 'P-IT-OBJECT,POD-DOOR
|
|
FSET? HERE,TOUCHBIT /?CND4
|
|
CALL V-VERSION
|
|
CRLF
|
|
PRINTI "Another routine day of drudgery aboard the Stellar Patrol Ship Feinstein. This morning's assignment for a certain lowly Ensign Seventh Class: scrubbing the filthy metal deck at the port end of Level Nine. With your Patrol-issue self-contained multi-purpose all-weather scrub brush you shine the floor with a diligence born of the knowledge that at any moment dreaded Ensign First Class Blather, the bane of your shipboard existence, could appear."
|
|
CRLF
|
|
CRLF
|
|
?CND4: CALL V-LOOK
|
|
CALL MAIN-LOOP
|
|
JUMP ?FCN
|
|
|
|
|
|
.FUNCT I-RANDOM-INTERRUPTS
|
|
RANDOM 90
|
|
ADD STACK,240
|
|
CALL QUEUE,I-BLOWUP-FEINSTEIN,STACK
|
|
PUT STACK,0,1
|
|
CALL COMM-SETUP
|
|
RANDOM 1000 >NUMBER-NEEDED
|
|
RETURN NUMBER-NEEDED
|
|
|
|
|
|
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1
|
|
?PRG1: SET 'C-ELAPSED,C-ELAPSED-DEFAULT
|
|
SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
CALL PARSER >P-WON
|
|
ZERO? P-WON /?CCL5
|
|
GET P-PRSI,P-MATCHLEN >ICNT
|
|
GET P-PRSO,P-MATCHLEN >OCNT
|
|
ZERO? P-IT-OBJECT /?CND6
|
|
CALL 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
|
|
CALL PERFORM,PRSA,PRSO >V
|
|
JUMP ?CND40
|
|
?CCL42: ZERO? NUM \?CCL44
|
|
GETB P-SYNTAX,P-SBITS
|
|
BAND STACK,P-SONUMS
|
|
ZERO? STACK \?CCL47
|
|
CALL PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
JUMP ?CND40
|
|
?CCL47: PRINTI "There isn't anything to "
|
|
GET P-ITBL,P-VERBN >TMP
|
|
ZERO? P-OFLAG \?CTR49
|
|
ZERO? P-MERGED /?CCL50
|
|
?CTR49: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND48
|
|
?CCL50: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
?CND48: PRINTC 33
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
JUMP ?CND40
|
|
?CCL44: SET 'TMP,0
|
|
SET 'ICNT,FALSE-VALUE
|
|
?PRG53: IGRTR? 'CNT,NUM \?CCL57
|
|
GRTR? TMP,0 \?CCL60
|
|
PRINTI "The "
|
|
EQUAL? TMP,NUM /?CND61
|
|
PRINTI "other "
|
|
?CND61: PRINTI "object"
|
|
EQUAL? TMP,1 /?CND63
|
|
PRINTC 115
|
|
?CND63: PRINTI " that you mentioned "
|
|
EQUAL? TMP,1 /?CCL67
|
|
PRINTI "are"
|
|
JUMP ?CND65
|
|
?CCL67: PRINTI "is"
|
|
?CND65: PRINTI "n't here."
|
|
CRLF
|
|
JUMP ?CND40
|
|
?CCL60: ZERO? ICNT \?CND40
|
|
PRINTI "There's nothing there."
|
|
CRLF
|
|
JUMP ?CND40
|
|
?CCL57: ZERO? PTBL /?CCL71
|
|
GET P-PRSO,CNT >OBJ1
|
|
JUMP ?CND69
|
|
?CCL71: GET P-PRSI,CNT >OBJ1
|
|
?CND69: ZERO? PTBL /?CCL74
|
|
SET 'PRSO,OBJ1
|
|
JUMP ?CND72
|
|
?CCL74: SET 'PRSO,OBJ
|
|
?CND72: ZERO? PTBL /?CCL77
|
|
SET 'PRSI,OBJ
|
|
JUMP ?CND75
|
|
?CCL77: SET 'PRSI,OBJ1
|
|
?CND75: GRTR? NUM,1 /?CCL79
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL \?CND78
|
|
?CCL79: EQUAL? OBJ1,NOT-HERE-OBJECT \?CCL84
|
|
INC 'TMP
|
|
JUMP ?PRG53
|
|
?CCL84: EQUAL? PRSA,V?TAKE \?CCL86
|
|
ZERO? PRSI /?CCL86
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL \?CCL86
|
|
IN? PRSO,PRSI \?PRG53
|
|
?CCL86: EQUAL? P-GETFLAGS,P-ALL \?CCL92
|
|
EQUAL? PRSA,V?TAKE \?CCL92
|
|
LOC OBJ1
|
|
EQUAL? STACK,WINNER,HERE \?PRG53
|
|
?CCL92: EQUAL? OBJ1,IT \?CCL98
|
|
PRINTD P-IT-OBJECT
|
|
JUMP ?CND96
|
|
?CCL98: PRINTD OBJ1
|
|
?CND96: PRINTI ": "
|
|
?CND78: SET 'ICNT,TRUE-VALUE
|
|
CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? V,M-FATAL \?PRG53
|
|
?CND40: EQUAL? V,M-FATAL /?CND101
|
|
LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL STACK,M-END >V
|
|
?CND101: EQUAL? PRSA,V?AGAIN /?CND103
|
|
SET 'L-PRSA,PRSA
|
|
SET 'L-PRSO,PRSO
|
|
SET 'L-PRSI,PRSI
|
|
?CND103: CALL INT,I-POD-TRIP
|
|
GET STACK,C-ENABLED?
|
|
ZERO? STACK /?CCL107
|
|
SET 'C-ELAPSED,54
|
|
JUMP ?CND105
|
|
?CCL107: GRTR? SHUTTLE-VELOCITY,0 \?CCL109
|
|
DIV 600,SHUTTLE-VELOCITY >C-ELAPSED
|
|
JUMP ?CND105
|
|
?CCL109: EQUAL? PRSA,V?TELL /?CTR110
|
|
CALL TIMELESS-VERB?,PRSA
|
|
ZERO? STACK /?CCL111
|
|
?CTR110: SET 'C-ELAPSED,0
|
|
JUMP ?CND105
|
|
?CCL111: EQUAL? PRSA,V?AGAIN \?CND105
|
|
CALL TIMELESS-VERB?,L-PRSA
|
|
ZERO? STACK /?CND105
|
|
SET 'C-ELAPSED,0
|
|
?CND105: ADD INTERNAL-MOVES,C-ELAPSED >INTERNAL-MOVES
|
|
EQUAL? V,M-FATAL \?CND3
|
|
SET 'P-CONT,FALSE-VALUE
|
|
JUMP ?CND3
|
|
?CCL5: SET 'P-CONT,FALSE-VALUE
|
|
?CND3: IN? CHRONOMETER,ADVENTURER /?CCL121
|
|
SET 'MOVES,0
|
|
JUMP ?CND119
|
|
?CCL121: FSET? CHRONOMETER,MUNGEDBIT \?CCL123
|
|
SET 'MOVES,MUNGED-TIME
|
|
JUMP ?CND119
|
|
?CCL123: SET 'MOVES,INTERNAL-MOVES
|
|
?CND119: ZERO? P-WON /?PRG1
|
|
ZERO? C-ELAPSED /?PRG1
|
|
CALL CLOCKER >V
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT TIMELESS-VERB?,VRB
|
|
EQUAL? VRB,V?BRIEF,V?SUPER-BRIEF,V?VERBOSE /TRUE
|
|
EQUAL? VRB,V?SAVE,V?RESTORE,V?SCORE /TRUE
|
|
EQUAL? VRB,V?SCRIPT,V?UNSCRIPT,V?TIME /TRUE
|
|
EQUAL? VRB,V?QUIT,V?RESTART,V?VERSION /TRUE
|
|
EQUAL? VRB,V?$RANDOM,V?$RECORD,V?$UNRECORD /TRUE
|
|
EQUAL? VRB,V?$COMMAND /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI
|
|
SET 'OA,PRSA
|
|
SET 'OO,PRSO
|
|
SET 'OI,PRSI
|
|
EQUAL? IT,I,O \?CND1
|
|
PRINTI "I don't see what you are referring to."
|
|
CRLF
|
|
SET 'P-IT-OBJECT,FALSE-VALUE
|
|
RETURN 2
|
|
?CND1: SET 'PRSA,A
|
|
SET 'PRSO,O
|
|
ZERO? PRSO /?CND5
|
|
EQUAL? PRSA,V?WALK /?CND5
|
|
SET 'P-IT-OBJECT,PRSO
|
|
SET 'P-IT-LOC,HERE
|
|
?CND5: SET 'PRSI,I
|
|
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CCL11
|
|
CALL NOT-HERE-OBJECT-F >V
|
|
ZERO? V /?CCL11
|
|
SET 'P-WON,FALSE-VALUE
|
|
JUMP ?CND9
|
|
?CCL11: SET 'O,PRSO
|
|
ZERO? O /?CCL15
|
|
SET 'I,PRSI
|
|
ZERO? I /?CCL15
|
|
CALL NULL-F
|
|
ZERO? STACK /?CCL15
|
|
PRINTI "[in case last clause changed PRSx]"
|
|
JUMP ?CND9
|
|
?CCL15: GETP WINNER,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V \?CND9
|
|
LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL STACK,M-BEG >V
|
|
ZERO? V \?CND9
|
|
GET PREACTIONS,A
|
|
CALL STACK >V
|
|
ZERO? V \?CND9
|
|
ZERO? I /?CCL26
|
|
GETP I,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V \?CND9
|
|
?CCL26: ZERO? O /?CCL30
|
|
EQUAL? A,V?WALK /?CCL30
|
|
GETP O,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V \?CND9
|
|
?CCL30: GET ACTIONS,A
|
|
CALL STACK >V
|
|
ZERO? V /?CND9
|
|
?CND9: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
|
|
.FUNCT META-LOC,OBJ
|
|
?PRG1: ZERO? OBJ /FALSE
|
|
IN? OBJ,GLOBAL-OBJECTS \?CND3
|
|
RETURN GLOBAL-OBJECTS
|
|
?CND3: IN? OBJ,ROOMS \?CCL9
|
|
RETURN OBJ
|
|
?CCL9: LOC OBJ >OBJ
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT QUEUE,RTN,TICK,CINT
|
|
CALL INT,RTN >CINT
|
|
PUT CINT,C-TICK,TICK
|
|
RETURN CINT
|
|
|
|
|
|
.FUNCT INT,RTN,DEMON=0,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
|
|
ZERO? DEMON /?PEN6
|
|
SUB C-DEMONS,C-INTLEN >C-DEMONS
|
|
?PEN6: 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=0
|
|
ZERO? P-WON /?CCL3
|
|
PUSH C-INTS
|
|
JUMP ?CND1
|
|
?CCL3: PUSH C-DEMONS
|
|
?CND1: ADD C-TABLE,STACK >C
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
?PRG4: EQUAL? C,E \?CCL8
|
|
RETURN FLG
|
|
?CCL8: GET C,C-ENABLED?
|
|
ZERO? STACK /?CND6
|
|
GET C,C-TICK >TICK
|
|
ZERO? TICK /?CND6
|
|
EQUAL? TICK,-1 \?CCL13
|
|
GET C,C-RTN
|
|
CALL STACK
|
|
ZERO? STACK /?CND6
|
|
SET 'FLG,TRUE-VALUE
|
|
JUMP ?CND6
|
|
?CCL13: SUB TICK,C-ELAPSED >TICK
|
|
PUT C,C-TICK,TICK
|
|
GRTR? TICK,1 /?CND6
|
|
PUT C,C-TICK,0
|
|
GET C,C-RTN
|
|
CALL STACK
|
|
ZERO? STACK /?CND6
|
|
SET 'FLG,TRUE-VALUE
|
|
?CND6: ADD C,C-INTLEN >C
|
|
JUMP ?PRG4
|
|
|
|
|
|
.FUNCT NULL-F,A1,A2
|
|
RFALSE
|
|
|
|
.ENDI
|