mirror of
https://github.com/historicalsource/amfv
synced 2024-05-19 17:38:42 +03:00
719 lines
15 KiB
Plaintext
719 lines
15 KiB
Plaintext
|
|
|
|
.FUNCT INT-NO-INSERT,RTN,E,C,INT=0
|
|
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
|
|
RETURN C
|
|
?CND3: ADD C,C-INTLEN >C
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT QUEUED?,RTN,C
|
|
CALL2 INT-NO-INSERT,RTN >C
|
|
ZERO? C /FALSE
|
|
GET C,C-TICK
|
|
ZERO? STACK /FALSE
|
|
RETURN C
|
|
|
|
|
|
.FUNCT RUNNING?,RTN,C,TICK
|
|
CALL2 INT-NO-INSERT,RTN >C
|
|
ZERO? C /FALSE
|
|
GET C,C-TICK >TICK
|
|
ZERO? TICK /FALSE
|
|
GRTR? TICK,1 /FALSE
|
|
RETURN C
|
|
|
|
|
|
.FUNCT PICK-ONE,FROB,L,CNT,RND,MSG,RFROB
|
|
GET FROB,0 >L
|
|
GET FROB,1 >CNT
|
|
DEC 'L
|
|
ADD FROB,2 >FROB
|
|
MUL CNT,2
|
|
ADD FROB,STACK >RFROB
|
|
SUB L,CNT
|
|
RANDOM STACK >RND
|
|
GET RFROB,RND >MSG
|
|
GET RFROB,1
|
|
PUT RFROB,RND,STACK
|
|
PUT RFROB,1,MSG
|
|
INC 'CNT
|
|
EQUAL? CNT,L \?CND1
|
|
SET 'CNT,0
|
|
?CND1: PUT FROB,0,CNT
|
|
RETURN MSG
|
|
|
|
|
|
.FUNCT SPRINT,OBJ
|
|
LESS? OBJ,10 \?ELS3
|
|
PRINTI " "
|
|
JUMP ?CND1
|
|
?ELS3: LESS? OBJ,100 \?ELS7
|
|
PRINTI " "
|
|
JUMP ?CND1
|
|
?ELS7: LESS? OBJ,1000 \?CND1
|
|
PRINTI " "
|
|
?CND1: PRINTN OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DPRINT,OBJ
|
|
GETP OBJ,P?MDESC
|
|
ZERO? STACK /?ELS5
|
|
PRINTI "MESSAGE."
|
|
GETP OBJ,P?MDESC
|
|
GET STACK,0
|
|
PRINTN STACK
|
|
PRINTI "/"
|
|
GETP OBJ,P?MDESC
|
|
GET STACK,1
|
|
PRINTN STACK
|
|
PRINTI "/"
|
|
GETP OBJ,P?MDESC
|
|
GET STACK,2
|
|
PRINTN STACK
|
|
PRINTI "."
|
|
GETP OBJ,P?MDESC
|
|
GET STACK,3
|
|
CALL2 TIME-PRINT,STACK
|
|
RSTACK
|
|
?ELS5: GETP OBJ,P?SDESC
|
|
ZERO? STACK /?ELS9
|
|
GETP OBJ,P?SDESC
|
|
PRINT STACK
|
|
RTRUE
|
|
?ELS9: PRINTD OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT GO
|
|
START::
|
|
|
|
?FCN: SUB TIME,1 >LAST-ABE-TIME
|
|
CALL QUEUE,I-PERELMAN,-1
|
|
CALL QUEUE,I-MESSAGE-C,28
|
|
CALL QUEUE,I-MESSAGE-Y,1373
|
|
PUTB P-LEXV,0,59
|
|
SET 'WINNER,PLAYER
|
|
SET 'HERE,COMM-ROOM
|
|
SET 'MODE,COMM-MODE
|
|
SET 'FEED-BUFFER,NEWS-BUFFER
|
|
CALL2 NAME-MESSAGE,MESSAGE-B
|
|
CALL2 CHAPTER-PRINT,1
|
|
CRLF
|
|
CRLF
|
|
CRLF
|
|
CRLF
|
|
CALL2 PRINT-SPACES,22
|
|
PRINTI """Tomorrow never yet"
|
|
CRLF
|
|
CALL2 PRINT-SPACES,23
|
|
PRINTI "On any human being rose or set."""
|
|
CRLF
|
|
CALL2 PRINT-SPACES,39
|
|
PRINTI "-- William Marsden"
|
|
CRLF
|
|
CRLF
|
|
CRLF
|
|
CRLF
|
|
CRLF
|
|
CALL1 CONTINUE
|
|
CALL2 INIT-STATUS-LINE,2
|
|
CALL1 STATUS-LINE
|
|
PRINTI "You ""hear"" a message coming in on the official message line: "
|
|
GETP MESSAGE-B,P?TEXT
|
|
PRINT STACK
|
|
CRLF
|
|
CRLF
|
|
CALL1 V-VERSION
|
|
CRLF
|
|
CALL1 V-LOOK
|
|
CALL1 MAIN-LOOP
|
|
JUMP ?FCN
|
|
|
|
|
|
.FUNCT MAIN-LOOP,TRASH
|
|
?PRG1: CALL1 MAIN-LOOP-1 >TRASH
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,NOT-HERE,?TMP1
|
|
SET 'ELAPSED-TIME,1
|
|
SET 'INCREMENT-WAIT,FALSE-VALUE
|
|
SET 'STOP-WAIT,FALSE-VALUE
|
|
SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
CALL1 PARSER >P-WON
|
|
ZERO? P-WON /?ELS3
|
|
GET P-PRSI,P-MATCHLEN >ICNT
|
|
GET P-PRSO,P-MATCHLEN >OCNT
|
|
ZERO? P-IT-OBJECT /?CND4
|
|
CALL2 ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK /?CND4
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG9: IGRTR? 'CNT,ICNT \?ELS13
|
|
JUMP ?REP10
|
|
?ELS13: GET P-PRSI,CNT
|
|
EQUAL? STACK,IT \?PRG9
|
|
PUT P-PRSI,CNT,P-IT-OBJECT
|
|
SET 'TMP,TRUE-VALUE
|
|
?REP10: ZERO? TMP \?CND19
|
|
SET 'CNT,0
|
|
?PRG22: IGRTR? 'CNT,OCNT \?ELS26
|
|
JUMP ?CND19
|
|
?ELS26: GET P-PRSO,CNT
|
|
EQUAL? STACK,IT \?PRG22
|
|
PUT P-PRSO,CNT,P-IT-OBJECT
|
|
?CND19: SET 'CNT,0
|
|
?CND4: ZERO? OCNT \?ELS36
|
|
PUSH OCNT
|
|
JUMP ?CND32
|
|
?ELS36: GRTR? OCNT,1 \?ELS38
|
|
SET 'TBL,P-PRSO
|
|
ZERO? ICNT \?ELS41
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND39
|
|
?ELS41: GET P-PRSI,1 >OBJ
|
|
?CND39: PUSH OCNT
|
|
JUMP ?CND32
|
|
?ELS38: GRTR? ICNT,1 \?ELS45
|
|
SET 'PTBL,FALSE-VALUE
|
|
SET 'TBL,P-PRSI
|
|
GET P-PRSO,1 >OBJ
|
|
PUSH ICNT
|
|
JUMP ?CND32
|
|
?ELS45: PUSH 1
|
|
?CND32: SET 'NUM,STACK
|
|
ZERO? OBJ \?CND48
|
|
EQUAL? ICNT,1 \?CND48
|
|
GET P-PRSI,1 >OBJ
|
|
?CND48: EQUAL? PRSA,V?WALK \?ELS55
|
|
PRINTI "[Calling PERFORM, PRSA = V-WALK.]"
|
|
CRLF
|
|
CALL PERFORM,PRSA,PRSO >V
|
|
JUMP ?CND53
|
|
?ELS55: ZERO? NUM \?ELS57
|
|
GETB P-SYNTAX,P-SBITS
|
|
BAND STACK,P-SONUMS
|
|
ZERO? STACK \?ELS60
|
|
CALL2 PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
JUMP ?CND53
|
|
?ELS60: PRINTI "There isn't anything to "
|
|
GET P-ITBL,P-VERBN >TMP
|
|
EQUAL? PRSA,V?TELL \?ELS67
|
|
PRINTI "talk to"
|
|
JUMP ?CND65
|
|
?ELS67: ZERO? P-OFLAG \?THN72
|
|
ZERO? P-MERGED /?ELS71
|
|
?THN72: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND65
|
|
?ELS71: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
?CND65: PRINTI "!"
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
CALL1 CLEAR-BUF
|
|
JUMP ?CND53
|
|
?ELS57: SET 'NOT-HERE,0
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG80: IGRTR? 'CNT,NUM \?ELS84
|
|
GRTR? NOT-HERE,0 \?ELS87
|
|
PRINTI "[The "
|
|
EQUAL? NOT-HERE,NUM /?CND90
|
|
PRINTI "other "
|
|
?CND90: PRINTI "object"
|
|
EQUAL? NOT-HERE,1 /?CND97
|
|
PRINTI "s"
|
|
?CND97: PRINTI " that you mentioned "
|
|
EQUAL? NOT-HERE,1 /?ELS106
|
|
PRINTI "are"
|
|
JUMP ?CND104
|
|
?ELS106: PRINTI "is"
|
|
?CND104: PRINTI "n't here.]"
|
|
CRLF
|
|
JUMP ?REP81
|
|
?ELS87: ZERO? TMP \?REP81
|
|
PRINT REFERRING
|
|
CRLF
|
|
JUMP ?REP81
|
|
?ELS84: ZERO? PTBL /?ELS123
|
|
GET P-PRSO,CNT >OBJ1
|
|
SET 'PRSO,OBJ1
|
|
SET 'PRSI,OBJ
|
|
JUMP ?CND121
|
|
?ELS123: GET P-PRSI,CNT >OBJ1
|
|
SET 'PRSO,OBJ
|
|
SET 'PRSI,OBJ1
|
|
?CND121: GRTR? NUM,1 /?THN130
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL \?CND127
|
|
?THN130: EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS134
|
|
INC 'NOT-HERE
|
|
JUMP ?PRG80
|
|
?ELS134: EQUAL? P-GETFLAGS,P-ALL \?ELS136
|
|
CALL DONT-ALL?,PRSO,PRSI,PTBL
|
|
ZERO? STACK /?ELS136
|
|
JUMP ?PRG80
|
|
?ELS136: EQUAL? PRSA,V?TAKE \?ELS140
|
|
ZERO? PRSI /?ELS140
|
|
IN? PRSO,PRSI /?ELS140
|
|
JUMP ?PRG80
|
|
?ELS140: CALL2 ACCESSIBLE?,OBJ1
|
|
ZERO? STACK \?ELS144
|
|
JUMP ?PRG80
|
|
?ELS144: EQUAL? OBJ1,BUZZERS,BOOKS /?CND127
|
|
EQUAL? OBJ1,IT \?ELS149
|
|
PRINTD P-IT-OBJECT
|
|
JUMP ?CND147
|
|
?ELS149: PRINTD OBJ1
|
|
?CND147: PRINTI ": "
|
|
?CND127: SET 'TMP,TRUE-VALUE
|
|
CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? V,M-FATAL \?PRG80
|
|
JUMP ?CND53
|
|
?REP81:
|
|
?CND53: PRINTI "[About to enter M-FATAL/NEWS predicate.]"
|
|
CRLF
|
|
EQUAL? V,M-FATAL \?THN160
|
|
EQUAL? HERE,NEWS \?CND157
|
|
?THN160: PRINTI "[About to check whether ELAPSED-TIME is 0]"
|
|
CRLF
|
|
ZERO? ELAPSED-TIME /?CND157
|
|
GETP HERE,P?ACTION
|
|
CALL STACK,M-END >V
|
|
?CND157: PRINTI "[About to check whether CLOCK-WAIT is false.]"
|
|
CRLF
|
|
ZERO? CLOCK-WAIT \?CND165
|
|
PRINTI "[About to call INCREMENT-TIME.]"
|
|
CRLF
|
|
CALL2 INCREMENT-TIME,ELAPSED-TIME
|
|
PRINTI "[Returned from INCREMENT-TIME.]"
|
|
CRLF
|
|
?CND165: EQUAL? V,M-FATAL \?CND1
|
|
SET 'P-CONT,FALSE-VALUE
|
|
JUMP ?CND1
|
|
?ELS3: SET 'P-CONT,FALSE-VALUE
|
|
?CND1: PRINTI "[About to check whether P-WON is true.]"
|
|
CRLF
|
|
ZERO? P-WON /FALSE
|
|
ZERO? ELAPSED-TIME /?CND179
|
|
PRINTI "[About to call CLOCKER.]"
|
|
CRLF
|
|
CALL1 CLOCKER >V
|
|
PRINTI "[Returning from CLOCKER.]"
|
|
CRLF
|
|
?CND179: "[About to call STATUS-LINE.]"
|
|
CRLF
|
|
CALL1 STATUS-LINE
|
|
SET 'PRSA,FALSE-VALUE
|
|
SET 'PRSO,FALSE-VALUE
|
|
SET 'PRSI,FALSE-VALUE
|
|
RETURN PRSI
|
|
|
|
|
|
.FUNCT DONT-ALL?,O,I,ALL-O?,LOCATION
|
|
LOC O >LOCATION
|
|
EQUAL? O,I /TRUE
|
|
EQUAL? PRSA,V?TAKE \?ELS7
|
|
EQUAL? LOCATION,PLAYER,WINNER /TRUE
|
|
FSET? O,TAKEBIT /?ELS14
|
|
FSET? O,TRYTAKEBIT \TRUE
|
|
?ELS14: ZERO? I /?ELS18
|
|
EQUAL? LOCATION,I \TRUE
|
|
CALL2 SEE-INSIDE?,I
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
?ELS18: EQUAL? LOCATION,HERE,SHOWER /FALSE
|
|
FSET? LOCATION,SURFACEBIT /FALSE
|
|
FSET? LOCATION,ACTORBIT \TRUE
|
|
RFALSE
|
|
?ELS7: EQUAL? PRSA,V?PUT-ON,V?PUT,V?DROP /?THN39
|
|
EQUAL? PRSA,V?THROW \?ELS38
|
|
?THN39: EQUAL? LOCATION,PLAYER,WINNER \TRUE
|
|
RFALSE
|
|
?ELS38: EQUAL? PRSA,V?SHUT-OFF,V?TURN-ON \FALSE
|
|
EQUAL? HERE,INTERFACE-ROOM \FALSE
|
|
EQUAL? WINNER,HVAC-CONTROLLER \?ELS56
|
|
EQUAL? I,ALPHA-SECTOR,BETA-SECTOR /FALSE
|
|
EQUAL? I,GAMMA-SECTOR,DELTA-SECTOR \TRUE
|
|
RFALSE
|
|
?ELS56: EQUAL? I,ALPHA-SECTOR \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT FAKE-ORPHAN,TMP,?TMP1
|
|
CALL ORPHAN,P-SYNTAX,FALSE-VALUE
|
|
PRINTI "[Be specific: what object do you want to "
|
|
GET P-OTBL,P-VERBN >TMP
|
|
ZERO? TMP \?ELS5
|
|
PRINTI "tell"
|
|
JUMP ?CND3
|
|
?ELS5: GETB P-VTBL,2
|
|
ZERO? STACK \?ELS9
|
|
GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND3
|
|
?ELS9: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
PUTB P-VTBL,2,0
|
|
?CND3: SET 'P-OFLAG,TRUE-VALUE
|
|
SET 'P-WON,FALSE-VALUE
|
|
GETB P-SYNTAX,P-SPREP1
|
|
CALL2 PREP-PRINT,STACK
|
|
PRINTR "?]"
|
|
|
|
|
|
.FUNCT PERFORM,A,O=0,I=0,V=0,OA,OO,OI
|
|
SET 'OA,PRSA
|
|
SET 'OO,PRSO
|
|
SET 'OI,PRSI
|
|
SET 'PRSA,A
|
|
EQUAL? IT,I,O \?CND1
|
|
ZERO? I \?ELS6
|
|
CALL1 FAKE-ORPHAN
|
|
RETURN 2
|
|
?ELS6: PRINT REFERRING
|
|
CRLF
|
|
RETURN 2
|
|
?CND1: SET 'PRSO,O
|
|
ZERO? PRSO /?CND13
|
|
EQUAL? PRSO,INTNUM /?CND13
|
|
EQUAL? PRSA,V?WALK /?CND13
|
|
EQUAL? PRSO,NOT-HERE-OBJECT /?CND13
|
|
SET 'P-IT-OBJECT,PRSO
|
|
?CND13: SET 'PRSI,I
|
|
EQUAL? A,V?WALK /?ELS20
|
|
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS20
|
|
CALL D-APPLY,STR?1,NOT-HERE-OBJECT-F >V
|
|
ZERO? V /?ELS20
|
|
SET 'P-WON,FALSE-VALUE
|
|
JUMP ?CND18
|
|
?ELS20: SET 'O,PRSO
|
|
SET 'I,PRSI
|
|
GETP WINNER,P?ACTION
|
|
CALL D-APPLY,STR?2,STACK >V
|
|
ZERO? V /?ELS27
|
|
JUMP ?CND18
|
|
?ELS27: GETP HERE,P?ACTION
|
|
CALL D-APPLY,STR?3,STACK,M-BEG >V
|
|
ZERO? V /?ELS29
|
|
JUMP ?CND18
|
|
?ELS29: GET PREACTIONS,A
|
|
CALL D-APPLY,STR?4,STACK >V
|
|
ZERO? V /?ELS31
|
|
JUMP ?CND18
|
|
?ELS31: ZERO? I /?ELS33
|
|
GETP I,P?ACTION
|
|
CALL D-APPLY,STR?5,STACK >V
|
|
ZERO? V /?ELS33
|
|
JUMP ?CND18
|
|
?ELS33: ZERO? O /?ELS37
|
|
EQUAL? A,V?WALK /?ELS37
|
|
GETP O,P?ACTION
|
|
CALL D-APPLY,STR?6,STACK >V
|
|
ZERO? V /?ELS37
|
|
JUMP ?CND18
|
|
?ELS37: GET ACTIONS,A
|
|
CALL D-APPLY,FALSE-VALUE,STACK >V
|
|
ZERO? V /?CND18
|
|
?CND18: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
|
|
.FUNCT D-APPLY,STR,FCN,FOO=0,RES
|
|
ZERO? FCN /FALSE
|
|
ZERO? FOO /?ELS12
|
|
CALL FCN,FOO
|
|
JUMP ?CND8
|
|
?ELS12: CALL FCN
|
|
?CND8: SET 'RES,STACK
|
|
RETURN RES
|
|
|
|
|
|
.FUNCT QUEUE,INTERRUPT-ROUTINE,TICK-NUMBER,CLOCKER-INT
|
|
CALL2 INT,INTERRUPT-ROUTINE >CLOCKER-INT
|
|
PUT CLOCKER-INT,C-TICK,TICK-NUMBER
|
|
RETURN CLOCKER-INT
|
|
|
|
|
|
.FUNCT INT,RTN,E,C,INT=0
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
ADD C-TABLE,C-INTS >C
|
|
?PRG1: EQUAL? C,E \?ELS5
|
|
ZERO? INT \?CND6
|
|
LESS? C-INTS,C-INTLEN \?CND9
|
|
PRINTI "Bug #25I"
|
|
CRLF
|
|
?CND9: SUB C-INTS,C-INTLEN >C-INTS
|
|
ADD C-TABLE,C-INTS >INT
|
|
?CND6: PUT INT,C-RTN,RTN
|
|
RETURN INT
|
|
?ELS5: GET C,C-RTN
|
|
EQUAL? STACK,RTN \?ELS15
|
|
RETURN C
|
|
?ELS15: ZERO? INT \?CND3
|
|
GET C,C-RTN
|
|
ZERO? STACK \?CND3
|
|
SET 'INT,C
|
|
?CND3: ADD C,C-INTLEN >C
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT CLOCKER,C,E,TICK,RTN,FLG=0
|
|
ZERO? CLOCK-WAIT /?CND1
|
|
SET 'CLOCK-WAIT,FALSE-VALUE
|
|
RFALSE
|
|
?CND1: ADD C-TABLE,C-INTS >C
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
?PRG5: EQUAL? C,E \?CND7
|
|
RETURN FLG
|
|
?CND7: GET C,C-RTN >RTN
|
|
ZERO? RTN /?CND10
|
|
GET C,C-TICK >TICK
|
|
EQUAL? TICK,-1 \?ELS18
|
|
CALL RTN
|
|
ZERO? STACK /?CND10
|
|
SET 'FLG,TRUE-VALUE
|
|
JUMP ?CND10
|
|
?ELS18: SUB TICK,ELAPSED-TIME >TICK
|
|
GRTR? TICK,0 \?ELS26
|
|
PUT C,C-TICK,TICK
|
|
JUMP ?CND10
|
|
?ELS26: PUT C,C-RTN,0
|
|
CALL RTN
|
|
ZERO? STACK /?CND13
|
|
SET 'FLG,TRUE-VALUE
|
|
?CND13:
|
|
?CND10: ADD C,C-INTLEN >C
|
|
JUMP ?PRG5
|
|
|
|
|
|
.FUNCT INCREMENT-TIME,X,TMP,?TMP1
|
|
ADD TIME,X >TIME
|
|
GRTR? TIME,1439 \?CND1
|
|
SUB TIME,1440 >TIME
|
|
INC 'DATE
|
|
EQUAL? DATE,18 \?ELS6
|
|
SET 'FEED-BUFFER,REPORT-BUFFER
|
|
JUMP ?CND4
|
|
?ELS6: SET 'FEED-BUFFER,NEWS-BUFFER
|
|
?CND4: GRTR? DATE,28 \?CND9
|
|
EQUAL? DATE,32 /?THN19
|
|
EQUAL? MONTH,2 /?THN19
|
|
EQUAL? DATE,31 \?CND9
|
|
EQUAL? MONTH,4,6,9 /?THN19
|
|
EQUAL? MONTH,11 \?CND9
|
|
?THN19: SET 'DATE,1
|
|
INC 'MONTH
|
|
?CND9: EQUAL? HERE,ROOF \?CND1
|
|
EQUAL? TIME,348 \?ELS26
|
|
CRLF
|
|
PRINTI "The first glow of dawn appears on the horizon."
|
|
CRLF
|
|
JUMP ?CND21
|
|
?ELS26: EQUAL? TIME,378 \?ELS30
|
|
CRLF
|
|
PRINTI "The sun is now well above the horizon; day has begun."
|
|
CRLF
|
|
JUMP ?CND21
|
|
?ELS30: EQUAL? TIME,1073 \?ELS34
|
|
CRLF
|
|
PRINTI "The sky begins to darken as the sun sinks into the western sky."
|
|
CRLF
|
|
JUMP ?CND21
|
|
?ELS34: EQUAL? TIME,1103 \?CND21
|
|
CRLF
|
|
PRINTI "The last glow of dusk fades as nighttime falls across the rooftop."
|
|
CRLF
|
|
?CND21:
|
|
?CND1: ZERO? SIMULATING /?CND41
|
|
SET 'TMP,STIME
|
|
ADD STIME,X >STIME
|
|
GRTR? STIME,1439 \?CND45
|
|
SUB STIME,1440 >STIME
|
|
INC 'SDATE
|
|
GRTR? SDATE,28 \?CND45
|
|
EQUAL? SDATE,32 /?THN58
|
|
EQUAL? SMONTH,2 /?THN58
|
|
EQUAL? SDATE,31 \?CND48
|
|
EQUAL? SMONTH,4,6,9 /?THN58
|
|
EQUAL? SMONTH,11 \?CND48
|
|
?THN58: SET 'SDATE,1
|
|
INC 'SMONTH
|
|
?CND48:
|
|
?CND45: CALL1 CONVERT-SYEAR-TO-NUM >?TMP1
|
|
CALL1 CONVERT-SYEAR-TO-NUM
|
|
GET SIM-LEVEL-TABLE,STACK
|
|
ADD X,STACK
|
|
PUT SIM-LEVEL-TABLE,?TMP1,STACK
|
|
CALL1 TUBES-CLOSE?
|
|
ZERO? STACK /?ELS62
|
|
CRLF
|
|
PRINTI "A surly cop warns that curfew is approaching and hustles you out of the "
|
|
PRINTD TUBE-STATION
|
|
PRINTI "."
|
|
CRLF
|
|
CRLF
|
|
EQUAL? HERE,RED-TUBECAR,BROWN-TUBECAR \?CND67
|
|
GET RED-TABLE,RED-POINTER
|
|
MOVE PLAYER,STACK
|
|
GET RED-TABLE,RED-POINTER >HERE
|
|
?CND67: CALL2 DO-WALK,P?UP
|
|
JUMP ?CND60
|
|
?ELS62: EQUAL? HERE,ROCKVIL-STADIUM \?CND60
|
|
EQUAL? SYEAR,2061,2071 \?CND60
|
|
GRTR? STIME,1154 \?ELS76
|
|
LESS? STIME,1200 \?ELS76
|
|
ZERO? INCREMENT-WAIT \?ELS76
|
|
SET 'INCREMENT-WAIT,TRUE-VALUE
|
|
CRLF
|
|
PRINTI "As the day's executions wind to a conclusion, the people in the stands begin heading toward the exits."
|
|
CRLF
|
|
JUMP ?CND60
|
|
?ELS76: EQUAL? STIME,480 \?CND60
|
|
SET 'STOP-WAIT,TRUE-VALUE
|
|
CRLF
|
|
PRINTI "People begin gathering in the stands as the day's executions begin."
|
|
CRLF
|
|
?CND60: EQUAL? SYEAR,2041,2081 /?CND41
|
|
GRTR? STIME,1260 \?ELS90
|
|
GRTR? TMP,1260 /?ELS90
|
|
CALL QUEUE,I-CURFEW,15
|
|
SET 'STOP-WAIT,TRUE-VALUE
|
|
CALL2 SCORE,116
|
|
CRLF
|
|
PRINTI "A surge of adrenal fear passes through you as sirens all around begin wailing, an audio sine wave announcing the beginning of curfew."
|
|
CRLF
|
|
JUMP ?CND85
|
|
?ELS90: GRTR? STIME,420 \?CND85
|
|
GRTR? TMP,420 /?CND85
|
|
EQUAL? PRSA,V?SLEEP /?CND85
|
|
SET 'STOP-WAIT,TRUE-VALUE
|
|
CRLF
|
|
PRINTI "T"
|
|
CALL1 END-CURFEW
|
|
CRLF
|
|
?CND85:
|
|
?CND41: ZERO? RECORDING /FALSE
|
|
EQUAL? HERE,LIVING-ROOM,KITCHEN /?THN110
|
|
EQUAL? HERE,BEDROOM,BATHROOM \?ELS109
|
|
?THN110: PUT RECORDING-TABLE,16,1
|
|
JUMP ?CND107
|
|
?ELS109: EQUAL? HERE,COURTHOUSE \?ELS113
|
|
PUT RECORDING-TABLE,10,1
|
|
JUMP ?CND107
|
|
?ELS113: EQUAL? HERE,POWER-STATION \?CND107
|
|
PUT RECORDING-TABLE,4,1
|
|
?CND107: EQUAL? SYEAR,2051 \?ELS118
|
|
SET '2051-RECORDED,TRUE-VALUE
|
|
JUMP ?CND116
|
|
?ELS118: EQUAL? SYEAR,2061 \?ELS120
|
|
SET '2061-RECORDED,TRUE-VALUE
|
|
JUMP ?CND116
|
|
?ELS120: EQUAL? SYEAR,2071 \?ELS122
|
|
SET '2071-RECORDED,TRUE-VALUE
|
|
JUMP ?CND116
|
|
?ELS122: EQUAL? SYEAR,2081 \?CND116
|
|
SET '2081-RECORDED,TRUE-VALUE
|
|
?CND116: GETP RECORD-BUFFER,P?SIZE >TMP
|
|
ADD TMP,X
|
|
PUTP RECORD-BUFFER,P?SIZE,STACK
|
|
ZERO? SIMULATING /?CND125
|
|
SET 'RECORDINGS-INCLUDE-SIMULATION,TRUE-VALUE
|
|
?CND125: GETP RECORD-BUFFER,P?SIZE
|
|
GRTR? STACK,45 \?ELS133
|
|
GRTR? TMP,45 /?ELS133
|
|
SOUND 1
|
|
CRLF
|
|
PRINTR "WARNING: Record buffer is now half-full."
|
|
?ELS133: GETP RECORD-BUFFER,P?SIZE
|
|
GRTR? STACK,90 \FALSE
|
|
SET 'RECORDING,FALSE-VALUE
|
|
PUTP RECORD-BUFFER,P?SIZE,90
|
|
SOUND 1
|
|
CRLF
|
|
PRINTR "WARNING: Record buffer full. Auto-deactivation of record feature."
|
|
|
|
|
|
.FUNCT TUBES-CLOSE?
|
|
EQUAL? SYEAR,2041 /FALSE
|
|
LESS? STIME,1250 /FALSE
|
|
FSET? HERE,TUBEBIT /TRUE
|
|
EQUAL? HERE,RED-TUBECAR \?ELS11
|
|
ZERO? RED-TUBECAR-IN-STATION \TRUE
|
|
?ELS11: EQUAL? HERE,BROWN-TUBECAR \FALSE
|
|
ZERO? BROWN-TUBECAR-IN-STATION /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ITALICIZE,STR,NO-CAPS?=0,LEN,PTR=2,CHAR,SCRIPTING-ON=0
|
|
BUFOUT FALSE-VALUE
|
|
BUFOUT TRUE-VALUE
|
|
GET 0,8
|
|
BTST STACK,1 \?CND1
|
|
SET 'SCRIPTING-ON,TRUE-VALUE
|
|
?CND1: ZERO? SCRIPTING-ON /?CND4
|
|
DIROUT D-PRINTER-OFF
|
|
?CND4: DIROUT D-SCREEN-OFF
|
|
DIROUT D-TABLE-ON,SL-BUFFER
|
|
PRINT STR
|
|
DIROUT D-TABLE-OFF
|
|
ZERO? SCRIPTING-ON /?CND10
|
|
DIROUT D-PRINTER-ON
|
|
?CND10: EQUAL? PRSA,V?UNSCRIPT,V?SCRIPT /?CND14
|
|
DIROUT D-SCREEN-ON
|
|
?CND14: GET SL-BUFFER,0
|
|
ADD STACK,1 >LEN
|
|
EQUAL? LEN,1 /TRUE
|
|
GETB 0,18
|
|
ZERO? STACK /?THN24
|
|
GETB 0,1
|
|
BAND STACK,8
|
|
ZERO? STACK /?ELS23
|
|
?THN24: HLIGHT H-ITALIC
|
|
?PRG26: GETB SL-BUFFER,PTR >CHAR
|
|
EQUAL? CHAR,32 \?ELS30
|
|
HLIGHT H-NORMAL
|
|
PRINTC 32
|
|
HLIGHT H-ITALIC
|
|
JUMP ?CND28
|
|
?ELS30: PRINTC CHAR
|
|
?CND28: EQUAL? PTR,LEN \?ELS35
|
|
JUMP ?REP27
|
|
?ELS35: INC 'PTR
|
|
JUMP ?PRG26
|
|
?REP27: HLIGHT H-NORMAL
|
|
RTRUE
|
|
?ELS23: ZERO? NO-CAPS? /?ELS39
|
|
PRINT STR
|
|
RTRUE
|
|
?ELS39:
|
|
?PRG45: GETB SL-BUFFER,PTR >CHAR
|
|
GRTR? CHAR,96 \?CND47
|
|
LESS? CHAR,123 \?CND47
|
|
SUB CHAR,32 >CHAR
|
|
?CND47: PRINTC CHAR
|
|
EQUAL? PTR,LEN /TRUE
|
|
INC 'PTR
|
|
JUMP ?PRG45
|
|
|
|
|
|
.FUNCT CONVERT-SYEAR-TO-NUM
|
|
SUB SYEAR,2041
|
|
DIV STACK,10
|
|
RSTACK
|
|
|
|
.ENDI
|