mirror of
https://github.com/historicalsource/checkpoint
synced 2024-04-26 05:59:24 +03:00
2264 lines
54 KiB
Plaintext
2264 lines
54 KiB
Plaintext
|
|
|
|
.FUNCT TRAIN-F,L
|
|
EQUAL? PRSA,V?WAIT-FOR /FALSE
|
|
EQUAL? PRSA,V?TAKE \?ELS7
|
|
PRINTR "Feel free!"
|
|
?ELS7: EQUAL? PRSA,V?FIND \?ELS11
|
|
ZERO? ON-TRAIN /?ELS16
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(You're on it!)"
|
|
?ELS16: ZERO? IN-STATION /?ELS21
|
|
CALL2 START-SENTENCE,TRAIN
|
|
PRINTI " is at the "
|
|
PRINTD PLATFORM-GLOBAL
|
|
PRINTR "."
|
|
?ELS21: EQUAL? HERE,BESIDE-TRACKS \?ELS26
|
|
CALL1 BITE-YOU
|
|
RSTACK
|
|
?ELS26: PRINTR "Maybe one will stop here soon."
|
|
?ELS11: EQUAL? PRSA,V?CLIMB-ON /?THN33
|
|
EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?BOARD \?ELS32
|
|
?THN33: ZERO? ON-TRAIN /?ELS37
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(You're on it!)"
|
|
?ELS37: EQUAL? HERE,BESIDE-TRACKS \?CND35
|
|
CALL1 EMBARK-F >L
|
|
ZERO? L /TRUE
|
|
CALL2 GOTO,L
|
|
ZERO? STACK /TRUE
|
|
CALL1 OKAY
|
|
RTRUE
|
|
?CND35: CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK \?CND48
|
|
CALL PERFORM,V?WALK-TO,PLATFORM-GLOBAL
|
|
?CND48: CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK /TRUE
|
|
CALL1 EMBARK-F >L
|
|
ZERO? L /TRUE
|
|
CALL2 GOTO,L
|
|
ZERO? STACK /TRUE
|
|
CALL1 OKAY
|
|
RTRUE
|
|
?ELS32: EQUAL? PRSA,V?LEAVE,V?TAKE-OFF,V?DISEMBARK \?ELS60
|
|
ZERO? ON-TRAIN \?ELS63
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(You're not on it!)"
|
|
CRLF
|
|
JUMP ?CND61
|
|
?ELS63: ZERO? CUSTOMS-SWEEP \?ELS67
|
|
CALL2 FORWARD-PART?,HERE
|
|
ZERO? STACK /?ELS67
|
|
EQUAL? CAR-HERE,1 /?ELS67
|
|
CALL2 V-FWD,CAR-HERE >L
|
|
EQUAL? HERE,L /?CND70
|
|
CALL PERFORM,V?WALK-TO,L
|
|
?CND70: EQUAL? HERE,L \?CND61
|
|
CALL2 DO-WALK,P?NORTH
|
|
JUMP ?CND61
|
|
?ELS67: CALL2 V-REAR,CAR-HERE >L
|
|
EQUAL? HERE,L /?CND61
|
|
CALL PERFORM,V?WALK-TO,L
|
|
?CND61: EQUAL? HERE,VESTIBULE-REAR-DINER,VESTIBULE-REAR-FANCY,VESTIBULE-REAR \TRUE
|
|
CALL2 DO-WALK,P?DOWN
|
|
RTRUE
|
|
?ELS60: CALL1 REMOTE-VERB?
|
|
ZERO? STACK \FALSE
|
|
ZERO? ON-TRAIN \?ELS87
|
|
ZERO? IN-STATION \?ELS87
|
|
EQUAL? HERE,BESIDE-TRACKS /?ELS87
|
|
CALL2 NOT-HERE,TRAIN
|
|
RSTACK
|
|
?ELS87: EQUAL? PRSA,V?EXAMINE \?ELS91
|
|
PRINTI "Yup. That's a train, all right."
|
|
ZERO? ON-TRAIN \?CND94
|
|
EQUAL? HERE,PLATFORM-A /?THN99
|
|
EQUAL? HERE,BESIDE-TRACKS \?CND94
|
|
EQUAL? CAR-HERE,1 \?CND94
|
|
?THN99: PRINTI " The engine is hissing and occasionally venting hot gases."
|
|
?CND94: CRLF
|
|
RTRUE
|
|
?ELS91: EQUAL? PRSA,V?LISTEN \?ELS106
|
|
ZERO? ON-TRAIN /?ELS109
|
|
PRINTI "The clatter of the wheels on the track is "
|
|
CALL2 NOISY?,HERE
|
|
ZERO? STACK /?ELS115
|
|
CALL1 TRAIN-SLOWING?
|
|
ZERO? STACK /?ELS118
|
|
PRINTI "diminishing."
|
|
JUMP ?CND113
|
|
?ELS118: PRINTI "almost deafening."
|
|
JUMP ?CND113
|
|
?ELS115: ZERO? TRAIN-MOVING /?ELS126
|
|
PRINTI "muffled here."
|
|
JUMP ?CND113
|
|
?ELS126: PRINTI "gone for now."
|
|
?CND113: CRLF
|
|
RTRUE
|
|
?ELS109: CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK \?THN136
|
|
EQUAL? HERE,BESIDE-TRACKS \?ELS135
|
|
?THN136: PRINTR "It's hissing quietly."
|
|
?ELS135: CALL2 NOT-HERE,TRAIN
|
|
ZERO? STACK \TRUE
|
|
?ELS106: EQUAL? PRSA,V?SIT \?ELS143
|
|
EQUAL? HERE,ROOF \FALSE
|
|
CALL DO-INSTEAD-OF,ROOF,TRAIN
|
|
RTRUE
|
|
?ELS143: EQUAL? PRSA,V?STOP \FALSE
|
|
CALL2 STOP-CORD-IN?,HERE
|
|
ZERO? STACK /FALSE
|
|
CALL2 STOP-CORD-F,TRUE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SCENERY-RIGHT-F
|
|
CALL2 SCENERY-F,SCENERY-RIGHT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SCENERY-LEFT-F
|
|
CALL2 SCENERY-F,SCENERY-LEFT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SCENERY-F,OBJ
|
|
ZERO? SCENERY-OBJ /?ELS5
|
|
CALL DO-INSTEAD-OF,SCENERY-OBJ,OBJ
|
|
RTRUE
|
|
?ELS5: CALL2 NOT-HERE,OBJ
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GENERIC-STATION-F,X,ANY=0,N=1,STA
|
|
ZERO? ANY \?THN6
|
|
EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR \FALSE
|
|
?THN6:
|
|
?PRG8: GET TRAIN-TABLE,N >STA
|
|
ZERO? STA /FALSE
|
|
CALL ZMEMQ,STA,STATIONS
|
|
ZERO? STACK /?ELS14
|
|
RETURN STA
|
|
?ELS14: ADD 2,N >N
|
|
JUMP ?PRG8
|
|
|
|
|
|
.FUNCT START-TRAIN,N,?TMP1
|
|
EQUAL? VARIATION,2,4 \?ELS3
|
|
SET 'TRAIN-TABLE,TRAIN-TABLE-A
|
|
JUMP ?CND1
|
|
?ELS3: ADD 200,PRESENT-TIME >PRESENT-TIME
|
|
SET 'TRAIN-TABLE,TRAIN-TABLE-B
|
|
?CND1: GET TRAIN-TABLE,0 >TRAIN-NAME
|
|
ADD TRAIN-TABLE,2 >TRAIN-TABLE
|
|
EQUAL? VARIATION,2,4 /?ELS8
|
|
ADD TRAIN-TABLE,12 >TRAIN-TABLE
|
|
GET TRAIN-TABLE,0 >?TMP1
|
|
GETP STATION-KNUT,P?SIZE
|
|
ADD ?TMP1,STACK >N
|
|
JUMP ?CND6
|
|
?ELS8: GET TRAIN-TABLE,0
|
|
SUB STACK,PRESENT-TIME >N
|
|
?CND6: SET 'SCENERY-OBJ,PLAIN
|
|
MOVE SCENERY-OBJ,SCENERY-LEFT
|
|
CALL QUEUE,I-TRAIN-SCENERY,N
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-TRAIN-LURCH,-1
|
|
PUT STACK,0,1
|
|
SET 'NOW-LURCHING,PRESENT-TIME
|
|
RETURN NOW-LURCHING
|
|
|
|
|
|
.FUNCT DESTINATION,TBL,CNT=0
|
|
ZERO? TBL /FALSE
|
|
?PRG4: GET TBL,CNT
|
|
ZERO? STACK \?ELS8
|
|
SUB CNT,1
|
|
GET TBL,STACK
|
|
RETURN STACK
|
|
?ELS8: INC 'CNT
|
|
JUMP ?PRG4
|
|
|
|
|
|
.FUNCT I-TRAIN-SCENERY,GARG=0,N
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-TRAIN-SCENERY:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: ZERO? SCENERY-OBJ /?CND11
|
|
MOVE SCENERY-OBJ,GLOBAL-OBJECTS
|
|
?CND11: GET TRAIN-TABLE,1 >SCENERY-OBJ
|
|
GET TRAIN-TABLE,2 >N
|
|
ADD TRAIN-TABLE,4 >TRAIN-TABLE
|
|
MOVE SCENERY-OBJ,SCENERY-LEFT
|
|
EQUAL? SCENERY-OBJ,TUNNEL \?CND15
|
|
EQUAL? HERE,ROOF \?CND15
|
|
CALL1 DO-SPLAT
|
|
?CND15: CALL FLUSH-ROOM?,ROOF,TRUE-VALUE
|
|
CALL QUEUE,I-TRAIN-SCENERY,N
|
|
PUT STACK,0,1
|
|
CALL ZMEMQ,SCENERY-OBJ,STATIONS
|
|
ZERO? STACK /?ELS24
|
|
CALL1 ARRIVE-STATION >N
|
|
ZERO? IDEBUG /?CND25
|
|
PRINTN N
|
|
PRINTI "]"
|
|
CRLF
|
|
RETURN N
|
|
?CND25: RETURN N
|
|
?ELS24: GET TRAIN-TABLE,1
|
|
CALL ZMEMQ,STACK,STATIONS
|
|
ZERO? STACK /?CND33
|
|
SUB N,ARRIVE-WARNING-TIME
|
|
CALL QUEUE,I-ARRIVE-WARNING,STACK
|
|
PUT STACK,0,1
|
|
?CND33: SET 'JUST-LOOKED,FALSE-VALUE
|
|
IN? PLAYER,UNCONSCIOUS /?CND36
|
|
CALL2 MOTION-PREFIX,TRUE-VALUE
|
|
?CND36: EQUAL? SCENERY-OBJ,MEADOW \?ELS43
|
|
EQUAL? PASSOBJECT,FLOWER-GLOBAL /?THN46
|
|
RANDOM 100
|
|
LESS? 50,STACK /?ELS43
|
|
?THN46: EQUAL? VARIATION,3,4 \?CND48
|
|
EQUAL? PASSOBJECT,FLOWER-GLOBAL \?CND48
|
|
CALL QUEUE,I-TRAVELER-SEEKS-FLOWER,-1
|
|
PUT STACK,0,1
|
|
?CND48: CALL2 STOP-CORD-F,TRUE-VALUE
|
|
ZERO? IDEBUG /TRUE
|
|
PRINTR "(1)]"
|
|
?ELS43: EQUAL? SCENERY-OBJ,CROSSING \?ELS60
|
|
MOVE VEHICLE,BESIDE-TRACKS
|
|
MOVE FLARE,GLOBAL-OBJECTS
|
|
IN? PLAYER,UNCONSCIOUS /?CND61
|
|
PRINTI "A flare shoots into the sky."
|
|
CRLF
|
|
?CND61: ZERO? IDEBUG /TRUE
|
|
PRINTR "(1)]"
|
|
?ELS60: ZERO? IDEBUG /FALSE
|
|
PRINTI "(0)]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PREPARE-SPLAT,N,M
|
|
GET TRAIN-TABLE,1
|
|
EQUAL? TUNNEL,STACK /?CND1
|
|
SUB TRAIN-TABLE,4 >TRAIN-TABLE
|
|
CALL2 INT,I-TRAIN-SCENERY
|
|
GET STACK,C-TICK
|
|
PUT TRAIN-TABLE,2,STACK
|
|
PUT TRAIN-TABLE,1,TUNNEL
|
|
?CND1: CALL QUEUE,I-TRAIN-SCENERY,N
|
|
PUT STACK,0,1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DO-SPLAT
|
|
PRINTI "The front of the train rapidly enters a narrow tunnel. Realizing that there isn't enough time to climb down the ladder, you throw yourself belly first against the roof. As you enter the tunnel, you are enveloped by blackness and fumes from the smokestack. Suddenly you feel very sleepy, and your grip on the roof begins to loosen. You have the good fortune to lose consciousness before your body slides off the roof into the speeding wall of the tunnel."
|
|
CRLF
|
|
CALL1 FINISH
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TIMETABLE-F
|
|
EQUAL? PRSA,V?TELL-ABOUT,V?ANALYZE /?THN6
|
|
EQUAL? PRSA,V?EXAMINE,V?READ,V?OPEN \FALSE
|
|
?THN6: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(You'll find the "
|
|
PRINTD TIMETABLE
|
|
PRINTI " in your "
|
|
PRINTD GAME
|
|
PRINTI " package.)"
|
|
CRLF
|
|
CRLF
|
|
PRINTI "[It should include:"
|
|
CRLF
|
|
ZERO? DEBUG /?ELS14
|
|
CALL2 PRINT-TT,TRAIN-TABLE
|
|
JUMP ?CND12
|
|
?ELS14: CALL2 PRINT-TT,TRAIN-TABLE-A
|
|
CALL2 PRINT-TT,TRAIN-TABLE-B
|
|
?CND12: PRINTR "]"
|
|
|
|
|
|
.FUNCT PRINT-TT,TBL,OBJ,N=0,TIM=0
|
|
ZERO? DEBUG \?CND1
|
|
SET 'N,1
|
|
GET TBL,0
|
|
PRINT STACK
|
|
PRINTI ": "
|
|
?CND1:
|
|
?PRG6: GET TBL,N >OBJ
|
|
ZERO? OBJ \?CND8
|
|
CRLF
|
|
RTRUE
|
|
?CND8: ADD TIM,OBJ >TIM
|
|
ZERO? DEBUG /?CND11
|
|
PRINTN TIM
|
|
PRINTC 9
|
|
?CND11: INC 'N
|
|
GET TBL,N >OBJ
|
|
ZERO? DEBUG /?CND15
|
|
PRINTD OBJ
|
|
?CND15: CALL ZMEMQ,OBJ,STATIONS
|
|
ZERO? STACK /?CND19
|
|
ZERO? DEBUG \?CND22
|
|
CALL2 TIME-PRINT,TIM
|
|
PRINTC 32
|
|
PRINTD OBJ
|
|
PRINTI ", "
|
|
?CND22: GETP OBJ,P?SIZE
|
|
ADD TIM,STACK >TIM
|
|
?CND19: ZERO? DEBUG /?CND27
|
|
CRLF
|
|
?CND27: INC 'N
|
|
JUMP ?PRG6
|
|
|
|
|
|
.FUNCT I-ARRIVE-WARNING,GARG=0,GT
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-ARRIVE-WARNING:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: PRINTI "The train begins to slow down a bit."
|
|
CRLF
|
|
GET GOAL-TABLES,CONDUCTOR-C >GT
|
|
GET TRAIN-TABLE,1
|
|
EQUAL? STATION-GRNZ,STACK \?CND13
|
|
CALL2 HIDE-OBJECT?,GUN
|
|
CALL2 HIDE-OBJECT?,MCGUFFIN
|
|
?CND13: GET TRAIN-TABLE-B,0
|
|
EQUAL? TRAIN-NAME,STACK \?CND16
|
|
CALL ESTABLISH-GOAL-TRAIN,CONDUCTOR,VESTIBULE-REAR,PLATFORM-MAX
|
|
?CND16: ZERO? IDEBUG /TRUE
|
|
PRINTR "(1)]"
|
|
|
|
|
|
.FUNCT HIDE-OBJECT?,OBJ,PER,L,V,RM,X=0
|
|
LOC OBJ >PER
|
|
FSET? PER,PERSONBIT \FALSE
|
|
FSET? PER,MUNGBIT /FALSE
|
|
EQUAL? PER,PLAYER /FALSE
|
|
LOC PER >L
|
|
CALL ZMEMQ,L,CAR-ROOMS-CORRID
|
|
ZERO? STACK /?CND8
|
|
GETPT L,P?IN
|
|
GET STACK,REXIT >RM
|
|
CALL ZMEMQ,RM,CAR-ROOMS-COMPS
|
|
ZERO? STACK /?CND8
|
|
CALL MOVE-PERSON,PER,RM
|
|
SET 'L,RM
|
|
?CND8: GETP PER,P?CHARACTER
|
|
GET GOAL-TABLES,STACK
|
|
PUT STACK,GOAL-FUNCTION,STOP-WALKING-F
|
|
CALL ZMEMQ,L,CAR-ROOMS-COMPS >RM
|
|
ZERO? RM /?ELS16
|
|
GET CAR-ROOMS-UNDER,RM >X
|
|
JUMP ?CND14
|
|
?ELS16: EQUAL? L,BOOTH-1 \?ELS18
|
|
SET 'X,UNDER-BOOTH-1
|
|
JUMP ?CND14
|
|
?ELS18: EQUAL? L,BOOTH-2 \?ELS20
|
|
SET 'X,UNDER-BOOTH-2
|
|
JUMP ?CND14
|
|
?ELS20: EQUAL? L,BOOTH-3 \?CND14
|
|
SET 'X,UNDER-BOOTH-3
|
|
?CND14: ZERO? X /FALSE
|
|
MOVE OBJ,X
|
|
FSET OBJ,TAKEBIT
|
|
CALL2 VISIBLE?,PER
|
|
ZERO? STACK /FALSE
|
|
CALL HE-SHE-IT,PER,TRUE-VALUE,STR?277
|
|
CALL2 PRINTT,OBJ
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT ARRIVE-STATION,GT,M,END=0
|
|
GETP SCENERY-OBJ,P?SIZE >M
|
|
CALL GENERIC-STATION-F,0,TRUE-VALUE
|
|
ZERO? STACK \?ELS3
|
|
SET 'END,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?ELS3: CALL QUEUE,I-DEPART-WARNING,M
|
|
PUT STACK,0,1
|
|
?CND1: EQUAL? SCENERY-OBJ,STATION-FRBZ,STATION-GOLA \?ELS8
|
|
SUB M,5
|
|
CALL QUEUE,I-CONTACT-APPEARS,STACK
|
|
PUT STACK,0,1
|
|
ADD M,10
|
|
CALL QUEUE,I-CONTACT-GIVES-UP,STACK
|
|
PUT STACK,0,1
|
|
JUMP ?CND6
|
|
?ELS8: EQUAL? SCENERY-OBJ,STATION-KNUT \?CND6
|
|
CALL QUEUE,I-TRAVELER-SEEKS-TICKET,1
|
|
PUT STACK,0,1
|
|
?CND6: CALL2 INT,I-TRAIN-SCENERY
|
|
PUT STACK,0,0
|
|
SET 'TRAIN-MOVING,FALSE-VALUE
|
|
SET 'IN-STATION,TRUE-VALUE
|
|
SET 'GUARD-SUSPICION,0
|
|
SET 'GUARD-SAW-PASSPORT,FALSE-VALUE
|
|
FSET GUARD,NDESCBIT
|
|
FCLEAR GUARD,SEENBIT
|
|
FCLEAR GUARD,TOUCHBIT
|
|
MOVE GUARD,PLATFORM-A
|
|
SET 'NOW-LURCHING,FALSE-VALUE
|
|
CALL QUEUE,I-TRAIN-LURCH,0
|
|
SET 'TICKETS-PUNCHED?,TRUE-VALUE
|
|
GET GOAL-TABLES,CONDUCTOR-C >GT
|
|
ZERO? VICTIM-KNOWN /?CND11
|
|
CALL2 ARREST-PLAYER,STR?28
|
|
?CND11: EQUAL? SCENERY-OBJ,STATION-GRNZ \?ELS16
|
|
MOVE PLAQUE,PLATFORM-B
|
|
FCLEAR CUSTOMS-AGENT,NDESCBIT
|
|
MOVE CUSTOMS-AGENT,PLATFORM-B
|
|
FSET PASSPORT,LOCKED
|
|
SET 'CUSTOMS-SWEEP,TRUE-VALUE
|
|
JUMP ?CND14
|
|
?ELS16: MOVE PLAQUE,LIMBO-FWD
|
|
MOVE CUSTOMS-AGENT,LIMBO-FWD
|
|
SET 'CUSTOMS-SWEEP,FALSE-VALUE
|
|
?CND14: ZERO? END \?THN22
|
|
EQUAL? SCENERY-OBJ,STATION-GRNZ \?ELS21
|
|
?THN22: CALL2 VISIBLE?,CONDUCTOR
|
|
ZERO? STACK /?CND24
|
|
LOC CONDUCTOR
|
|
CALL DIR-FROM,HERE,STACK
|
|
EQUAL? STACK,P?NORTH /?CND24
|
|
CALL2 START-SENTENCE,CONDUCTOR
|
|
PRINTI " rushes past you."
|
|
CRLF
|
|
?CND24: FCLEAR CONDUCTOR,TOUCHBIT
|
|
PUTP CONDUCTOR,P?CAR,CAR-HERE
|
|
CALL2 V-FWD,CAR-HERE
|
|
MOVE CONDUCTOR,STACK
|
|
CALL QUEUE,I-TICKETS-PLEASE,-1
|
|
PUT STACK,0,1
|
|
PUT GT,GOAL-ENABLE,1
|
|
CALL ESTABLISH-GOAL-TRAIN,CONDUCTOR,VESTIBULE-REAR,CAR-MAX
|
|
CALL1 CLOSE-CURTAINS
|
|
CALL1 CLEAR-TRAIN
|
|
JUMP ?CND19
|
|
?ELS21: CALL CONDUCTOR-OFF,GT,FALSE-VALUE
|
|
?CND19: EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR /?CND33
|
|
CRLF
|
|
?CND33: ZERO? ON-TRAIN /?ELS38
|
|
CALL2 START-SENTENCE,CONDUCTOR
|
|
PRINTI " cries, """
|
|
PRINTD SCENERY-OBJ
|
|
PRINTI ","" and the train glides to a halt in the station."
|
|
CRLF
|
|
JUMP ?CND36
|
|
?ELS38: CALL ZMEMQ,HERE,STATION-ROOMS
|
|
ZERO? STACK /?CND36
|
|
CALL2 I-EXTRA,M-OTHER
|
|
RANDOM 9
|
|
CALL QUEUE,I-STAR,STACK
|
|
PUT STACK,0,1
|
|
PRINTI "A whistle sounds, and a passenger train comes screeching up to the platform. "
|
|
CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK /?CND46
|
|
CALL2 START-SENTENCE,CONDUCTOR
|
|
PRINTI " leans out from one of the doors and shouts, """
|
|
CALL2 DESTINATION,TRAIN-TABLE >GT
|
|
ZERO? GT /?ELS53
|
|
PRINTD GT
|
|
JUMP ?CND51
|
|
?ELS53: PRINTD SCENERY-OBJ
|
|
?CND51: PRINTI ","" then lowers a short flight of metal steps and gets off."
|
|
?CND46: CRLF
|
|
?CND36: EQUAL? SCENERY-OBJ,STATION-WIEN,STATION-POTRZEBIE \?CND58
|
|
PRINTI "[Now you can go home safely, but your mission has failed. Watch this space for details.]"
|
|
CRLF
|
|
CALL1 FINISH
|
|
?CND58: CALL1 ARRIVE-AT-STATION-BAD-SPY
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CLEAR-TRAIN,N=0
|
|
ZERO? N /?ELS5
|
|
CALL2 CLEAR-TRAIN-PERSON,N
|
|
RSTACK
|
|
?ELS5: SET 'N,CHARACTER-MAX
|
|
?PRG8: EQUAL? N,GUARD-C /?CND10
|
|
CALL2 CLEAR-TRAIN-PERSON,N
|
|
?CND10: DLESS? 'N,THIN-MAN-C \?PRG8
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CLEAR-TRAIN-PERSON,N,P,L,GT
|
|
GET CHARACTER-TABLE,N >P
|
|
CALL2 UNSNOOZE,P
|
|
LOC P >L
|
|
EQUAL? P,BAD-SPY /?THN6
|
|
EQUAL? P,THUG,DEFECTOR \?ELS9
|
|
ZERO? FANCY-CAR \?THN6
|
|
?ELS9: CALL2 VISIBLE?,P
|
|
ZERO? STACK \?THN6
|
|
GETP P,P?CAR
|
|
EQUAL? CAR-HERE,STACK \FALSE
|
|
CALL ZMEMQ,L,CAR-ROOMS-CORRID
|
|
ZERO? STACK /FALSE
|
|
?THN6: EQUAL? P,DEFECTOR \?CND12
|
|
LOC THUG
|
|
CALL MOVE-PERSON,P,STACK
|
|
?CND12: GET GOAL-TABLES,N >GT
|
|
GET GT,GOAL-FUNCTION
|
|
EQUAL? STACK,I-WALK-TRAIN \?ELS17
|
|
GET GT,GOAL-CAR
|
|
PUT CHAR-CARS,N,STACK
|
|
GET GT,GOAL-QUEUED
|
|
PUT CHAR-LOCS,N,STACK
|
|
JUMP ?CND15
|
|
?ELS17: GETP P,P?CAR
|
|
PUT CHAR-CARS,N,STACK
|
|
EQUAL? N,CAR-HERE,DINER-CAR,FANCY-CAR /?CND20
|
|
GETP L,P?OTHER >L
|
|
?CND20: PUT CHAR-LOCS,N,L
|
|
?CND15: PUT GT,GOAL-FUNCTION,G-LEAVE-TRAIN
|
|
GETP P,P?CAR >L
|
|
EQUAL? L,1 \?ELS27
|
|
PUT GT,GOAL-SCRIPT,G-LEAVE-TRAIN
|
|
CALL ESTABLISH-GOAL-TRAIN,P,VESTIBULE-REAR,2
|
|
RSTACK
|
|
?ELS27: CALL2 V-REAR,L
|
|
CALL ESTABLISH-GOAL,P,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CONDUCTOR-OFF,GT,MP?=1,X
|
|
CALL QUEUE,I-TICKETS-PLEASE,0
|
|
SET 'TICKET-COUNT,0
|
|
GETP CONDUCTOR,P?CAR
|
|
GET STATION-ROOMS,STACK >X
|
|
ZERO? MP? /?ELS3
|
|
CALL MOVE-PERSON,CONDUCTOR,X
|
|
JUMP ?CND1
|
|
?ELS3: MOVE CONDUCTOR,X
|
|
?CND1: CALL ESTABLISH-GOAL,CONDUCTOR,PLATFORM-A
|
|
PUT GT,GOAL-ENABLE,1
|
|
PUT GT,GOAL-FUNCTION,I-CONDUCTOR
|
|
FCLEAR CONDUCTOR,TOUCHBIT
|
|
PUTP CONDUCTOR,P?LDESC,17
|
|
RTRUE
|
|
|
|
|
|
.FUNCT I-CONTACT-APPEARS,GARG=0,L=0
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-CONTACT-APPEARS:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: FSET? CONTACT,NDESCBIT \?CND11
|
|
IN? CONTACT,GLOBAL-OBJECTS /?CND11
|
|
CALL2 VISIBLE?,CONTACT
|
|
ZERO? STACK /?CND11
|
|
FSET CONTACT,SEENBIT
|
|
FSET CONTACT,TOUCHBIT
|
|
LOC CONTACT >L
|
|
PRINTI "You notice "
|
|
CALL2 PRINTA,CONTACT
|
|
CALL2 THIS-IS-IT,CONTACT
|
|
CALL2 WHERE?,CONTACT
|
|
ZERO? STACK /?CND18
|
|
PRINTI ","
|
|
?CND18: PRINTI " "
|
|
GETP CONTACT,P?LDESC
|
|
GET ACT-STRINGS,STACK
|
|
PRINT STACK
|
|
PRINTI "."
|
|
CRLF
|
|
?CND11: FCLEAR CONTACT,NDESCBIT
|
|
ZERO? IDEBUG /?CND25
|
|
PRINTN L
|
|
PRINTI "]"
|
|
CRLF
|
|
RETURN L
|
|
?CND25: RETURN L
|
|
|
|
|
|
.FUNCT I-CONTACT-GIVES-UP,GARG=0,VAL
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-CONTACT-GIVES-UP:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: GETP CONTACT,P?CHARACTER
|
|
GET GOAL-TABLES,STACK
|
|
PUT STACK,GOAL-FUNCTION,G-FINISH
|
|
CALL ESTABLISH-GOAL,CONTACT,SIDEWALK >VAL
|
|
ZERO? IDEBUG /?CND11
|
|
PRINTN VAL
|
|
PRINTI "]"
|
|
CRLF
|
|
RETURN VAL
|
|
?CND11: RETURN VAL
|
|
|
|
|
|
.FUNCT I-DEPART-WARNING,GARG=0,N=1
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-DEPART-WARNING:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: ZERO? IN-STATION /?CND11
|
|
SET 'N,3
|
|
CALL QUEUE,I-DEPART,N
|
|
PUT STACK,0,1
|
|
PRINTI "The train whistle blows once, and"
|
|
CALL2 HE-SHE-IT,CONDUCTOR
|
|
PRINTI " cries, ""Gormnash floogle nomnets!"""
|
|
CRLF
|
|
?CND11: EQUAL? VARIATION,3,4 \?CND20
|
|
EQUAL? SCENERY-OBJ,STATION-GOLA \?CND20
|
|
CALL1 I-AGENT-COMES
|
|
?CND20: ZERO? IDEBUG /TRUE
|
|
PRINTR "(1)]"
|
|
|
|
|
|
.FUNCT I-DEPART,GARG=0,N,GT
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-DEPART:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: CALL1 DEPART-FROM-STATION-BAD-SPY
|
|
SET 'IN-STATION,FALSE-VALUE
|
|
ZERO? ON-TRAIN /?ELS13
|
|
SET 'TRAIN-MOVING,TRUE-VALUE
|
|
CALL QUEUE,I-CONTACT-GIVES-UP,0
|
|
FCLEAR PLATFORM-A,TOUCHBIT
|
|
FCLEAR PLATFORM-B,TOUCHBIT
|
|
FCLEAR PLATFORM-C,TOUCHBIT
|
|
FCLEAR PLATFORM-D,TOUCHBIT
|
|
FCLEAR PLATFORM-E,TOUCHBIT
|
|
FCLEAR CONDUCTOR,TOUCHBIT
|
|
PUTP CONDUCTOR,P?LDESC,19
|
|
PUTP CONDUCTOR,P?CAR,1
|
|
GET GOAL-TABLES,CONDUCTOR-C >GT
|
|
PUT GT,GOAL-ENABLE,1
|
|
CALL2 V-FWD,1
|
|
MOVE CONDUCTOR,STACK
|
|
CALL ESTABLISH-GOAL-TRAIN,CONDUCTOR,VESTIBULE-REAR,CAR-MAX
|
|
CALL2 FLUSH?,STATION-ROOMS
|
|
CALL QUEUE,I-TRAIN-LURCH,-1
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-TICKETS-PLEASE,-1
|
|
PUT STACK,0,1
|
|
SET 'TICKETS-PUNCHED?,FALSE-VALUE
|
|
FSET PLAYER,LOCKED
|
|
CALL2 UNPUNCH-TICKETS,SPY-TABLE
|
|
CALL2 UNPUNCH-TICKETS,EXTRA-TABLE
|
|
EQUAL? SCENERY-OBJ,STATION-GRNZ \?CND15
|
|
MOVE PLAQUE,LIMBO-FWD
|
|
MOVE CUSTOMS-AGENT,LIMBO-FWD
|
|
SET 'CUSTOMS-SWEEP,FALSE-VALUE
|
|
FSET? MCGUFFIN,NDESCBIT /?CND15
|
|
CALL1 MOVE-CONTACT
|
|
?CND15: CALL2 INT,I-TRAIN-SCENERY
|
|
PUT STACK,0,1
|
|
PRINTI "The train"
|
|
JUMP ?CND11
|
|
?ELS13: FCLEAR COMPARTMENT-1,TOUCHBIT
|
|
FCLEAR COMPARTMENT-2,TOUCHBIT
|
|
FCLEAR COMPARTMENT-3,TOUCHBIT
|
|
FCLEAR COMPARTMENT-4,TOUCHBIT
|
|
FCLEAR COMPARTMENT-5,TOUCHBIT
|
|
FCLEAR BOOTH-1,TOUCHBIT
|
|
FCLEAR BOOTH-2,TOUCHBIT
|
|
FCLEAR BOOTH-3,TOUCHBIT
|
|
FCLEAR FROY,TOUCHBIT
|
|
CALL1 PICK-ONE-BOOTH
|
|
MOVE FROY,STACK
|
|
SET 'DINER-TOUCHED,FALSE-VALUE
|
|
CALL2 V-REAR,3
|
|
MOVE CONDUCTOR,STACK
|
|
PRINTI "You "
|
|
CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK /?ELS31
|
|
PRINTI "watch as"
|
|
CALL2 HE-SHE-IT,CONDUCTOR
|
|
PRINTI " boards the train, and it"
|
|
JUMP ?CND29
|
|
?ELS31: PRINTI "hear the noise as the train"
|
|
?CND29: CALL1 CUE-NEXT-TRAIN
|
|
?CND11: PRINTI " slowly pulls out of "
|
|
PRINTD SCENERY-OBJ
|
|
PRINTI " station"
|
|
ZERO? ON-TRAIN \?CND40
|
|
PRINTI " without you"
|
|
?CND40: PRINTR "."
|
|
|
|
|
|
.FUNCT CUE-NEXT-TRAIN,X
|
|
EQUAL? SCENERY-OBJ,STATION-KNUT \FALSE
|
|
GET TRAIN-TABLE-A,0
|
|
EQUAL? TRAIN-NAME,STACK \FALSE
|
|
GET TRAIN-TABLE-B,0 >TRAIN-NAME
|
|
ADD TRAIN-TABLE-B,2 >TRAIN-TABLE
|
|
GET TRAIN-TABLE,0
|
|
SUB STACK,PRESENT-TIME >X
|
|
LESS? X,1 \?CND8
|
|
SET 'X,5
|
|
?CND8: CALL QUEUE,I-TRAIN-SCENERY,X
|
|
PUT STACK,0,1
|
|
CALL FLUSH?,CAR-ROOMS-DINER,FALSE-VALUE,4
|
|
SET 'DINER-CAR,4
|
|
CALL FLUSH?,CAR-ROOMS-FANCY,FALSE-VALUE
|
|
SET 'FANCY-CAR,CAR-MAX-MAX
|
|
MOVE THUG,HALL-3-FANCY
|
|
PUTP THUG,P?CAR,FANCY-CAR
|
|
PUTP DEFECTOR,P?CAR,FANCY-CAR
|
|
SET 'CAR-MAX,CAR-MAX-MAX
|
|
FCLEAR CONDUCTOR,TOUCHBIT
|
|
FCLEAR CONDUCTOR,SEENBIT
|
|
GET GOAL-TABLES,EXTRA-C
|
|
PUT STACK,GOAL-ENABLE,0
|
|
GET GOAL-TABLES,STAR-C
|
|
PUT STACK,GOAL-ENABLE,0
|
|
CALL TAKE-YOUR-PLACES-CAST,EXTRA-TABLE,TRUE-VALUE
|
|
CALL TAKE-YOUR-PLACES-CAST,SPY-TABLE,TRUE-VALUE
|
|
CALL TAKE-YOUR-PLACES-CAST,MARKS-TABLE,FALSE-VALUE,FALSE-VALUE,FALSE-VALUE
|
|
CALL2 FLUSH-ROOM?,CUSTOMS-AGENT
|
|
CALL2 FLUSH-ROOM?,ROOF
|
|
CALL2 FLUSH?,CAR-ROOMS
|
|
CALL FLUSH?,CAR-ROOMS,TRUE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FLUSH?,TBL,OTHER?=0,NEW-DINER?=0,ALL?=1,RM,CNT
|
|
GET TBL,0 >CNT
|
|
?PRG1: GET TBL,CNT >RM
|
|
ZERO? OTHER? /?CND3
|
|
GETP RM,P?OTHER >RM
|
|
?CND3: CALL FLUSH-ROOM?,RM,FALSE-VALUE,NEW-DINER?,ALL?
|
|
DLESS? 'CNT,1 \?PRG1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FLUSH-ROOM?,RM,TELL?=0,NEW-DINER?=0,ALL?=1,F,N,X
|
|
FIRST? RM >F /?KLU43
|
|
?KLU43:
|
|
?PRG1: ZERO? F /TRUE
|
|
NEXT? F >N /?KLU44
|
|
?KLU44: EQUAL? F,BLOOD-SPOT \?ELS11
|
|
MOVE F,LIMBO-FWD
|
|
JUMP ?CND9
|
|
?ELS11: FSET? F,TAKEBIT \?ELS13
|
|
ZERO? ALL? \?ELS16
|
|
CALL2 HIDDEN?,F
|
|
ZERO? STACK /?ELS16
|
|
SET 'F,N
|
|
JUMP ?PRG1
|
|
?ELS16: ZERO? TELL? /?CND14
|
|
EQUAL? RM,HERE \?CND14
|
|
CALL2 START-SENTENCE,F
|
|
PRINTI " falls off"
|
|
CALL2 PRINTT,RM
|
|
PRINTI "."
|
|
CRLF
|
|
?CND14: FCLEAR F,TAKEBIT
|
|
MOVE F,LIMBO-FWD
|
|
JUMP ?CND9
|
|
?ELS13: FSET? F,PERSONBIT \?ELS26
|
|
CALL ZMEMQ,F,EXTRA-TABLE >X
|
|
ZERO? X /?CND27
|
|
FCLEAR F,SEENBIT
|
|
GET EXTRA-SEEN-TABLE,X
|
|
SUB 0,STACK
|
|
PUT EXTRA-SEEN-TABLE,X,STACK
|
|
?CND27: FCLEAR F,TOUCHBIT
|
|
EQUAL? F,WAITRESS \?ELS32
|
|
PUTP F,P?LDESC,26
|
|
JUMP ?CND30
|
|
?ELS32: PUTP F,P?LDESC,0
|
|
?CND30: ZERO? NEW-DINER? /?CND9
|
|
PUTP F,P?CAR,NEW-DINER?
|
|
JUMP ?CND9
|
|
?ELS26: FSET? F,SURFACEBIT /?THN41
|
|
FSET? F,CONTBIT \?CND9
|
|
?THN41: CALL FLUSH-ROOM?,F,FALSE-VALUE,NEW-DINER?,ALL?
|
|
?CND9: SET 'F,N
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT UNPUNCH-TICKETS,TBL,CNT,PER
|
|
CALL TAKE-YOUR-PLACES-CAST,TBL,TRUE-VALUE,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TRAIN-SLOWING?
|
|
GET TRAIN-TABLE,1
|
|
CALL ZMEMQ,STACK,STATIONS
|
|
ZERO? STACK /FALSE
|
|
CALL2 QUEUED?,I-ARRIVE-WARNING
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT MOTION-PREFIX,NOW=0
|
|
ZERO? SCENERY-OBJ /FALSE
|
|
ZERO? TRAIN-MOVING /?ELS5
|
|
PRINTI "The train is "
|
|
ZERO? NOW /?CND9
|
|
PRINTI "now "
|
|
?CND9: CALL ZMEMQ,SCENERY-OBJ,STATIONS
|
|
ZERO? STACK /?ELS17
|
|
PRINTI "pass"
|
|
JUMP ?CND15
|
|
?ELS17: CALL1 TRAIN-SLOWING?
|
|
ZERO? STACK /?ELS21
|
|
PRINTI "coast"
|
|
JUMP ?CND15
|
|
?ELS21: CALL2 PICK-ONE,MOTIONS
|
|
PRINT STACK
|
|
?CND15: PRINTI "ing "
|
|
GETP SCENERY-OBJ,P?LDESC
|
|
PRINT STACK
|
|
JUMP ?CND1
|
|
?ELS5: PRINTI "The train is stopped "
|
|
GETP SCENERY-OBJ,P?FDESC
|
|
PRINT STACK
|
|
?CND1: CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT I-TRAIN-LURCH,GARG=0
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-TRAIN-LURCH:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: SET 'NOW-LURCHING,FALSE-VALUE
|
|
ZERO? TRAIN-MOVING /?CND11
|
|
RANDOM 100
|
|
LESS? 10,STACK /?CND11
|
|
SET 'NOW-LURCHING,PRESENT-TIME
|
|
SET 'TOLD-LURCHING,FALSE-VALUE
|
|
?CND11: ZERO? IDEBUG /FALSE
|
|
PRINTI "(0)]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT REST-ROOM-F,RARG=0
|
|
EQUAL? RARG,M-ENTER \?ELS5
|
|
SET 'PLAYER-NOT-FACING,FALSE-VALUE
|
|
MOVE PAPER-FIXTURE,HERE
|
|
RFALSE
|
|
?ELS5: EQUAL? RARG,M-LOOK \FALSE
|
|
FSET REST-ROOM-FWD,TOUCHBIT
|
|
FSET REST-ROOM-REAR,TOUCHBIT
|
|
FSET REST-ROOM-FWD-DINER,TOUCHBIT
|
|
FSET REST-ROOM-REAR-DINER,TOUCHBIT
|
|
PRINTR "As you'd expect, the restroom is tidy but small, almost too small for comfort. But it does have the usual fixtures."
|
|
|
|
|
|
.FUNCT COMPARTMENT-F,RARG=0,N
|
|
EQUAL? RARG,M-LOOK \?ELS5
|
|
FSET COMPARTMENT-1,TOUCHBIT
|
|
FSET COMPARTMENT-2,TOUCHBIT
|
|
FSET COMPARTMENT-3,TOUCHBIT
|
|
FSET COMPARTMENT-4,TOUCHBIT
|
|
FSET COMPARTMENT-5,TOUCHBIT
|
|
CALL1 COMPARTMENT-DESC
|
|
CALL1 MOTION-PREFIX
|
|
RTRUE
|
|
?ELS5: EQUAL? RARG,M-ENTER \?ELS7
|
|
EQUAL? VARIATION,3,4 \?CND8
|
|
IN? BLOOD-SPOT,HERE \?CND8
|
|
FCLEAR BLOOD-SPOT,NDESCBIT
|
|
?CND8: EQUAL? HERE,GAS-CAR-RM \?CND13
|
|
EQUAL? CAR-HERE,GAS-CAR \?CND13
|
|
CALL2 TELL-GAS,FALSE-VALUE
|
|
?CND13: CALL CALL-FOR-EXTRA,HERE,CAR-HERE
|
|
RFALSE
|
|
?ELS7: EQUAL? RARG,M-BEG \?ELS22
|
|
CALL1 PERSON-TAKES-GUN?
|
|
RSTACK
|
|
?ELS22: ZERO? RARG \FALSE
|
|
EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \?ELS27
|
|
CALL CALL-FOR-EXTRA,PRSO,CAR-HERE
|
|
RFALSE
|
|
?ELS27: EQUAL? PRSA,V?SEARCH \FALSE
|
|
IN? BLOOD-SPOT,HERE \FALSE
|
|
FSET? BLOOD-SPOT,NDESCBIT \FALSE
|
|
FCLEAR BLOOD-SPOT,NDESCBIT
|
|
PRINTI "You find a "
|
|
PRINTD BLOOD-SPOT
|
|
PRINTR " on the floor."
|
|
|
|
|
|
.FUNCT PERSON-TAKES-GUN?,N
|
|
CALL1 EXIT-VERB?
|
|
ZERO? STACK /FALSE
|
|
LOC GUN >N
|
|
CALL2 META-LOC,GUN
|
|
EQUAL? STACK,HERE \FALSE
|
|
FSET? N,PERSONBIT /FALSE
|
|
FSET? N,MUNGBIT /FALSE
|
|
EQUAL? N,POCKET /FALSE
|
|
IN? PERSON-SAW-GUN,HERE \FALSE
|
|
FSET GUN,NDESCBIT
|
|
MOVE GUN,PERSON-SAW-GUN
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CALL-FOR-EXTRA,WHERE=0,CAR=0,EXCLUDE=0,L=0,N,P
|
|
ZERO? DEBUG /?CND1
|
|
PRINTI "[CALL-FOR-EXTRA@"
|
|
PRINTD WHERE
|
|
PRINTI ": "
|
|
?CND1: ZERO? WHERE /?CND7
|
|
CALL2 META-LOC,WHERE >L
|
|
CALL FIND-FLAG,L,PERSONBIT,WINNER
|
|
ZERO? STACK /?ELS13
|
|
ZERO? DEBUG /FALSE
|
|
PRINTI "person already here]"
|
|
CRLF
|
|
RFALSE
|
|
?ELS13: ZERO? ON-TRAIN /?CND11
|
|
FSET? L,SEENBIT \?CND11
|
|
ZERO? DEBUG /FALSE
|
|
PRINTI "place already seen]"
|
|
CRLF
|
|
RFALSE
|
|
?CND11: FSET L,SEENBIT
|
|
?CND7: CALL2 PICK-ONE,EXTRA-TABLE >P
|
|
EQUAL? P,EXCLUDE /?CND30
|
|
CALL MOVE-EXTRA?,P,L,CAR
|
|
ZERO? STACK /?CND30
|
|
ZERO? DEBUG /?CND35
|
|
PRINTD P
|
|
CRLF
|
|
RETURN P
|
|
?CND35: RETURN P
|
|
?CND30: GET EXTRA-TABLE,0 >N
|
|
?PRG41: GET EXTRA-TABLE,N >P
|
|
EQUAL? P,EXCLUDE /?ELS45
|
|
CALL MOVE-EXTRA?,P,L,CAR
|
|
ZERO? STACK /?ELS45
|
|
ZERO? DEBUG /?CND48
|
|
PRINTD P
|
|
CRLF
|
|
?CND48: RETURN P
|
|
?ELS45: DLESS? 'N,1 \?PRG41
|
|
ZERO? DEBUG /FALSE
|
|
PRINTI "are none]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT MOVE-EXTRA?,P,L,CAR,X,STA
|
|
EQUAL? P,CONTACT,BAD-SPY /FALSE
|
|
CALL IN-MOTION?,P,TRUE-VALUE
|
|
ZERO? STACK \FALSE
|
|
CALL2 VISIBLE?,P
|
|
ZERO? STACK \FALSE
|
|
FSET? P,MUNGBIT /FALSE
|
|
FSET? P,PERSONBIT \FALSE
|
|
LOC P
|
|
CALL ZMEMQ,STACK,STATION-ROOMS >STA
|
|
LOC P
|
|
FSET? STACK,SEENBIT \?CND12
|
|
ZERO? STA /?ELS17
|
|
ZERO? ON-TRAIN /FALSE
|
|
?ELS17: ZERO? STA \?CND12
|
|
ZERO? ON-TRAIN \FALSE
|
|
?CND12: ZERO? L /TRUE
|
|
MOVE P,L
|
|
CALL ROB,P,GLOBAL-OBJECTS
|
|
PUTP P,P?LDESC,0
|
|
FCLEAR P,TOUCHBIT
|
|
FCLEAR P,SEENBIT
|
|
CALL ZMEMQ,P,EXTRA-TABLE >X
|
|
ZERO? X /?CND28
|
|
GET EXTRA-SEEN-TABLE,X
|
|
SUB 0,STACK
|
|
PUT EXTRA-SEEN-TABLE,X,STACK
|
|
?CND28: ZERO? CAR /TRUE
|
|
PUTP P,P?CAR,CAR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT COMPARTMENT-DESC
|
|
PRINTI "This is a once-luxurious first-class compartment on the "
|
|
PRINT TRAIN-NAME
|
|
PRINTI ". The plush red upholstery on the two facing seats, shiny and worn in spots, and the greasy lace on the headrests, give the car an air of faded elegance."
|
|
CALL1 CORD-SWINGS?
|
|
SET 'JUST-LOOKED,TRUE-VALUE
|
|
PRINTR "The corridor is outside, past a window with a red curtain on it."
|
|
|
|
|
|
.FUNCT CORD-SWINGS?
|
|
PRINTI " A red handle is hanging by a short length of cord from the ceiling"
|
|
ZERO? TRAIN-MOVING /?ELS7
|
|
PRINTI ", swinging in time to the train's rocking motion. "
|
|
RTRUE
|
|
?ELS7: PRINTR "."
|
|
|
|
|
|
.FUNCT GENERIC-COMPARTMENT-F,X
|
|
EQUAL? HERE,HALL-1,COMPARTMENT-1 \?ELS5
|
|
RETURN COMPARTMENT-1
|
|
?ELS5: EQUAL? HERE,HALL-2,COMPARTMENT-2 \?ELS7
|
|
RETURN COMPARTMENT-2
|
|
?ELS7: EQUAL? HERE,HALL-3,COMPARTMENT-3 \?ELS9
|
|
RETURN COMPARTMENT-3
|
|
?ELS9: EQUAL? HERE,HALL-4,COMPARTMENT-4 \?ELS11
|
|
RETURN COMPARTMENT-4
|
|
?ELS11: EQUAL? HERE,HALL-5,COMPARTMENT-5 \?ELS13
|
|
RETURN COMPARTMENT-5
|
|
?ELS13: CALL1 REMOTE-VERB?
|
|
ZERO? STACK \FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(You can't see any compartment here.)"
|
|
CRLF
|
|
RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT REST-ROOM-FWD-DOOR-F
|
|
CALL REST-ROOM-DOOR-F,REST-ROOM-FWD-DOOR,REST-ROOM-FWD
|
|
RSTACK
|
|
|
|
|
|
.FUNCT REST-ROOM-DOOR-F,DR,RM,PER
|
|
CALL OCCUPIED?,RM,CAR-HERE >PER
|
|
ZERO? PER /?ELS3
|
|
EQUAL? PER,PLAYER /?CND1
|
|
FSET DR,LOCKED
|
|
JUMP ?CND1
|
|
?ELS3: FCLEAR DR,LOCKED
|
|
?CND1: CALL2 FACE-DOOR,DR
|
|
RFALSE
|
|
|
|
|
|
.FUNCT COMPARTMENT-1-DOOR-F
|
|
CALL2 COMPARTMENT-DOOR-F,COMPARTMENT-1-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT COMPARTMENT-DOOR-F,DR
|
|
CALL2 FACE-DOOR,DR
|
|
RFALSE
|
|
|
|
|
|
.FUNCT COMPARTMENT-2-DOOR-F
|
|
CALL2 COMPARTMENT-DOOR-F,COMPARTMENT-2-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT COMPARTMENT-3-DOOR-F
|
|
CALL2 COMPARTMENT-DOOR-F,COMPARTMENT-3-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT HALL-3-F,RARG=0
|
|
EQUAL? RARG,M-ENTER \?ELS5
|
|
CALL ROB,TOILET,LIMBO-FWD
|
|
RFALSE
|
|
?ELS5: CALL2 HALL-F,RARG
|
|
RSTACK
|
|
|
|
|
|
.FUNCT COMPARTMENT-4-DOOR-F
|
|
CALL2 COMPARTMENT-DOOR-F,COMPARTMENT-4-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT COMPARTMENT-5-DOOR-F
|
|
CALL2 COMPARTMENT-DOOR-F,COMPARTMENT-5-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT HALL-F,RARG=0,X,TOUCHED=0,N
|
|
EQUAL? RARG,M-LOOK /?THN6
|
|
ZERO? RARG \?ELS5
|
|
EQUAL? PRSA,V?LOOK \?ELS5
|
|
?THN6: SET 'N,10
|
|
?PRG10: GET CAR-ROOMS-CORRID,N
|
|
FSET? STACK,TOUCHBIT \?ELS14
|
|
SET 'TOUCHED,TRUE-VALUE
|
|
JUMP ?REP11
|
|
?ELS14: DLESS? 'N,1 \?PRG10
|
|
?REP11: FSET HERE,TOUCHBIT
|
|
PRINTI "This is the "
|
|
PRINTD HERE
|
|
PRINTI " of the corridor."
|
|
EQUAL? PRSA,V?LOOK /?THN22
|
|
ZERO? TOUCHED \?CND19
|
|
?THN22: PRINTI " The floor and walls are covered with cream-colored linoleum, worn away in spots to reveal the original hardwood finish. A long series of windows, still framed by wood, runs along the corridor on the right-hand side of the train."
|
|
?CND19: EQUAL? PLAYER-NOT-FACING,P?WEST \?ELS28
|
|
CRLF
|
|
RTRUE
|
|
?ELS28: PRINTI " On the left side of the train"
|
|
GETPT HERE,P?IN
|
|
GET STACK,REXIT >X
|
|
EQUAL? CAR-HERE,DINER-CAR /?CND33
|
|
PRINTI ", behind a windowed door,"
|
|
?CND33: CALL2 THIS-IS-IT,X
|
|
PRINTI " lies the "
|
|
PRINTD X
|
|
PRINTR "."
|
|
?ELS5: EQUAL? RARG,M-ENTER \FALSE
|
|
SET 'N,FALSE-VALUE
|
|
CALL2 NOISY?,LAST-PLAYER-LOC
|
|
ZERO? STACK /?CND42
|
|
SET 'N,TRUE-VALUE
|
|
PRINTI "The relative quiet here is welcome. "
|
|
?CND42: EQUAL? CAR-HERE,DINER-CAR \?CND50
|
|
ZERO? DINER-TOUCHED \?CND50
|
|
SET 'N,TRUE-VALUE
|
|
SET 'DINER-TOUCHED,TRUE-VALUE
|
|
PRINTI "The smell of food is unmistakable."
|
|
?CND50: ZERO? N /FALSE
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT REST-ROOM-REAR-DOOR-F
|
|
CALL REST-ROOM-DOOR-F,REST-ROOM-REAR-DOOR,REST-ROOM-REAR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT VESTIBULE-FWD-F,RARG=0
|
|
CALL2 VESTIBULE-F,RARG
|
|
RSTACK
|
|
|
|
|
|
.FUNCT VESTIBULE-REAR-F,RARG=0
|
|
CALL VESTIBULE-F,RARG,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT VESTIBULE-F,RARG,REAR?=0,TOUCHED=0
|
|
EQUAL? RARG,M-LOOK /?THN6
|
|
ZERO? RARG \?ELS5
|
|
EQUAL? PRSA,V?LOOK \?ELS5
|
|
?THN6: PRINTI "This is a small vestibule at the "
|
|
ZERO? REAR? /?ELS16
|
|
PUSH STR?283
|
|
JUMP ?CND12
|
|
?ELS16: PUSH STR?284
|
|
?CND12: PRINT STACK
|
|
PRINTI "end of the car."
|
|
ZERO? REAR? /?ELS22
|
|
FSET VESTIBULE-REAR,TOUCHBIT
|
|
FSET VESTIBULE-REAR-DINER,TOUCHBIT
|
|
FSET VESTIBULE-REAR-FANCY,TOUCHBIT
|
|
FSET? VESTIBULE-FWD,TOUCHBIT /?THN27
|
|
FSET? VESTIBULE-FWD-DINER,TOUCHBIT /?THN27
|
|
FSET? VESTIBULE-FWD-FANCY,TOUCHBIT \?ELS26
|
|
?THN27: SET 'TOUCHED,TRUE-VALUE
|
|
PRINTI " It's just like the forward vestibule, except for"
|
|
JUMP ?CND24
|
|
?ELS26: PRINTI " There's"
|
|
?CND24: PRINTI " a short flight of metal steps on the left side of the train leading down off the train, and a narrow metal ladder leading up to the roof."
|
|
JUMP ?CND20
|
|
?ELS22: FSET VESTIBULE-FWD,TOUCHBIT
|
|
FSET VESTIBULE-FWD-DINER,TOUCHBIT
|
|
FSET VESTIBULE-FWD-FANCY,TOUCHBIT
|
|
FSET? VESTIBULE-REAR,TOUCHBIT /?THN42
|
|
FSET? VESTIBULE-REAR-DINER,TOUCHBIT /?THN42
|
|
FSET? VESTIBULE-REAR-FANCY,TOUCHBIT \?CND20
|
|
?THN42: SET 'TOUCHED,TRUE-VALUE
|
|
PRINTI " It's just like the rear vestibule, but with no steps or ladder."
|
|
?CND20: EQUAL? PRSA,V?LOOK /?ELS48
|
|
ZERO? TOUCHED /?ELS48
|
|
CRLF
|
|
RTRUE
|
|
?ELS48: PRINTI " A "
|
|
EQUAL? CAR-HERE,FANCY-CAR /?CND55
|
|
PRINTI "small door leads to a restroom, and a "
|
|
?CND55: PRINTI "big window is open to the outside."
|
|
CALL1 CORD-SWINGS?
|
|
SET 'JUST-LOOKED,TRUE-VALUE
|
|
CALL1 MOTION-PREFIX
|
|
ZERO? TRAIN-MOVING /TRUE
|
|
PRINTI "The clatter of the wheels on the track is almost deafening."
|
|
CRLF
|
|
RTRUE
|
|
?ELS5: ZERO? RARG \FALSE
|
|
CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK /FALSE
|
|
ZERO? REAR? /FALSE
|
|
EQUAL? PRSA,V?WALK-TO \FALSE
|
|
CALL2 DO-WALK,P?UP
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FORWARD-PART?,RM
|
|
EQUAL? RM,VESTIBULE-FWD,HALL-1,HALL-2 /TRUE
|
|
EQUAL? RM,COMPARTMENT-1,COMPARTMENT-2,REST-ROOM-FWD /TRUE
|
|
EQUAL? RM,VESTIBULE-FWD-DINER,HALL-1-DINER,HALL-2-DINER /TRUE
|
|
EQUAL? RM,BOOTH-1,BOOTH-2,REST-ROOM-FWD-DINER /TRUE
|
|
EQUAL? RM,VESTIBULE-FWD-FANCY,HALL-1-FANCY,SUITE-1 /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT GENERIC-VESTIBULE-F,X,CAR=0,L=0
|
|
ZERO? CAR \?CND1
|
|
SET 'CAR,CAR-HERE
|
|
?CND1: ZERO? L \?CND4
|
|
SET 'L,HERE
|
|
?CND4: EQUAL? CAR,DINER-CAR \?ELS11
|
|
ZERO? X /?ELS16
|
|
EQUAL? P-ADJ,W?R,W?S /?THN19
|
|
EQUAL? P-ADJ,W?REAR,W?SOUTH \?ELS16
|
|
?THN19: RETURN VESTIBULE-REAR-DINER
|
|
?ELS16: ZERO? X /?ELS22
|
|
EQUAL? P-ADJ,W?F,W?N /?THN25
|
|
EQUAL? P-ADJ,W?FORWARD,W?FRONT,W?NORTH \?ELS22
|
|
?THN25: RETURN VESTIBULE-FWD-DINER
|
|
?ELS22: CALL2 FORWARD-PART?,L
|
|
ZERO? STACK /?ELS28
|
|
RETURN VESTIBULE-FWD-DINER
|
|
?ELS28: RETURN VESTIBULE-REAR-DINER
|
|
?ELS11: EQUAL? CAR,FANCY-CAR \?ELS32
|
|
ZERO? X /?ELS37
|
|
EQUAL? P-ADJ,W?R,W?S /?THN40
|
|
EQUAL? P-ADJ,W?REAR,W?SOUTH \?ELS37
|
|
?THN40: RETURN VESTIBULE-REAR-FANCY
|
|
?ELS37: ZERO? X /?ELS43
|
|
EQUAL? P-ADJ,W?F,W?N /?THN46
|
|
EQUAL? P-ADJ,W?FORWARD,W?FRONT,W?NORTH \?ELS43
|
|
?THN46: RETURN VESTIBULE-FWD-FANCY
|
|
?ELS43: CALL2 FORWARD-PART?,L
|
|
ZERO? STACK /?ELS49
|
|
RETURN VESTIBULE-FWD-FANCY
|
|
?ELS49: RETURN VESTIBULE-REAR-FANCY
|
|
?ELS32: ZERO? X /?ELS56
|
|
EQUAL? P-ADJ,W?R,W?S /?THN59
|
|
EQUAL? P-ADJ,W?REAR,W?SOUTH \?ELS56
|
|
?THN59: SET 'X,VESTIBULE-REAR
|
|
JUMP ?CND54
|
|
?ELS56: ZERO? X /?ELS62
|
|
EQUAL? P-ADJ,W?F,W?N /?THN65
|
|
EQUAL? P-ADJ,W?FORWARD,W?FRONT,W?NORTH \?ELS62
|
|
?THN65: SET 'X,VESTIBULE-FWD
|
|
JUMP ?CND54
|
|
?ELS62: CALL2 FORWARD-PART?,L
|
|
ZERO? STACK /?ELS68
|
|
SET 'X,VESTIBULE-FWD
|
|
JUMP ?CND54
|
|
?ELS68: SET 'X,VESTIBULE-REAR
|
|
?CND54: EQUAL? CAR,CAR-HERE /?CND71
|
|
GETP X,P?OTHER >X
|
|
?CND71: RETURN X
|
|
|
|
|
|
.FUNCT GENERIC-REST-ROOM-F,X,CAR=0,L=0
|
|
ZERO? CAR \?CND1
|
|
SET 'CAR,CAR-HERE
|
|
?CND1: ZERO? L \?CND4
|
|
SET 'L,HERE
|
|
?CND4: ZERO? ON-TRAIN \?ELS11
|
|
EQUAL? HERE,REST-ROOM-WOMEN,REST-ROOM-MEN \?ELS16
|
|
RETURN HERE
|
|
?ELS16: FSET? CONTACT,FEMALE \?ELS18
|
|
RETURN REST-ROOM-WOMEN
|
|
?ELS18: RETURN REST-ROOM-MEN
|
|
?ELS11: EQUAL? CAR,DINER-CAR \?ELS22
|
|
ZERO? X /?ELS27
|
|
EQUAL? P-ADJ,W?R,W?S /?THN30
|
|
EQUAL? P-ADJ,W?REAR,W?SOUTH \?ELS27
|
|
?THN30: RETURN REST-ROOM-REAR-DINER
|
|
?ELS27: ZERO? X /?ELS33
|
|
EQUAL? P-ADJ,W?F,W?N /?THN36
|
|
EQUAL? P-ADJ,W?FORWARD,W?FRONT,W?NORTH \?ELS33
|
|
?THN36: RETURN REST-ROOM-FWD-DINER
|
|
?ELS33: CALL2 FORWARD-PART?,L
|
|
ZERO? STACK /?ELS39
|
|
RETURN REST-ROOM-FWD-DINER
|
|
?ELS39: RETURN REST-ROOM-REAR-DINER
|
|
?ELS22: ZERO? X /?ELS46
|
|
EQUAL? P-ADJ,W?R,W?S /?THN49
|
|
EQUAL? P-ADJ,W?REAR,W?SOUTH \?ELS46
|
|
?THN49: SET 'X,REST-ROOM-REAR
|
|
JUMP ?CND44
|
|
?ELS46: ZERO? X /?ELS52
|
|
EQUAL? P-ADJ,W?F,W?N /?THN55
|
|
EQUAL? P-ADJ,W?FORWARD,W?FRONT,W?NORTH \?ELS52
|
|
?THN55: SET 'X,REST-ROOM-FWD
|
|
JUMP ?CND44
|
|
?ELS52: CALL2 FORWARD-PART?,L
|
|
ZERO? STACK /?ELS58
|
|
SET 'X,REST-ROOM-FWD
|
|
JUMP ?CND44
|
|
?ELS58: SET 'X,REST-ROOM-REAR
|
|
?CND44: EQUAL? CAR,CAR-HERE /?CND61
|
|
GETP X,P?OTHER >X
|
|
?CND61: RETURN X
|
|
|
|
|
|
.FUNCT GENERIC-HALL-1-F,X
|
|
EQUAL? CAR-HERE,DINER-CAR \?ELS5
|
|
RETURN HALL-1-DINER
|
|
?ELS5: EQUAL? CAR-HERE,FANCY-CAR \?ELS7
|
|
RETURN HALL-1-FANCY
|
|
?ELS7: RETURN HALL-1
|
|
|
|
|
|
.FUNCT GENERIC-MIDDLE-F,X
|
|
ZERO? ON-TRAIN \?ELS5
|
|
RETURN PLATFORM-C
|
|
?ELS5: EQUAL? CAR-HERE,DINER-CAR \?ELS7
|
|
EQUAL? P-ADJ,W?R,W?REAR \?ELS12
|
|
RETURN HALL-4-DINER
|
|
?ELS12: EQUAL? P-ADJ,W?F,W?FORWARD \?ELS14
|
|
RETURN HALL-2-DINER
|
|
?ELS14: RETURN HALL-3-DINER
|
|
?ELS7: EQUAL? CAR-HERE,FANCY-CAR \?ELS18
|
|
RETURN HALL-2-FANCY
|
|
?ELS18: EQUAL? P-ADJ,W?R,W?REAR \?ELS25
|
|
RETURN HALL-4
|
|
?ELS25: EQUAL? P-ADJ,W?F,W?FORWARD \?ELS27
|
|
RETURN HALL-2
|
|
?ELS27: RETURN HALL-3
|
|
|
|
|
|
.FUNCT GENERIC-HALL-5-F,X
|
|
EQUAL? CAR-HERE,DINER-CAR \?ELS5
|
|
RETURN HALL-5-DINER
|
|
?ELS5: EQUAL? CAR-HERE,FANCY-CAR \?ELS7
|
|
RETURN HALL-3-FANCY
|
|
?ELS7: RETURN HALL-5
|
|
|
|
|
|
.FUNCT DETRAIN-F
|
|
ZERO? IN-STATION /?ELS5
|
|
GRTR? CAR-HERE,PLATFORM-MAX \?ELS11
|
|
ZERO? CUSTOMS-SWEEP \?ELS11
|
|
PRINTI "There's no platform here. You'll have to walk forward."
|
|
CRLF
|
|
RFALSE
|
|
?ELS11: ZERO? VICTIM-KNOWN /?ELS17
|
|
PRINTI "As you reach the platform, a police officer seizes you, searches you, and arrests you for the murder of"
|
|
CALL2 PRINTT,VICTIM-KNOWN
|
|
PRINTI ". For years and years, you languish in prison, awaiting trial and wishing you had disposed of the body."
|
|
CRLF
|
|
CALL1 FINISH
|
|
RSTACK
|
|
?ELS17: ZERO? CUSTOMS-SWEEP /?ELS21
|
|
EQUAL? CAR-HERE,1 \?ELS21
|
|
CALL2 START-SENTENCE,GUARD
|
|
PRINTI " prevents you and points to the rear."
|
|
CRLF
|
|
RFALSE
|
|
?ELS21: FSET? PEN,TOUCHBIT /?CND28
|
|
FSET PEN,NDESCBIT
|
|
?CND28: ZERO? CUSTOMS-SWEEP /?CND31
|
|
CALL2 QUEUED?,I-TRAIN-ARREST
|
|
ZERO? STACK \?CND31
|
|
GET GOAL-TABLES,CONDUCTOR-C
|
|
CALL2 CONDUCTOR-OFF,STACK
|
|
PRINTI "You notice a pair of customs inspectors boarding the train to search it."
|
|
CRLF
|
|
?CND31: SET 'ON-TRAIN,FALSE-VALUE
|
|
GRTR? CAR-HERE,PLATFORM-MAX \?ELS42
|
|
CALL NEXT-CAR-SWITCHEROO,CAR-HERE,PLATFORM-MAX
|
|
GET STATION-ROOMS,PLATFORM-MAX
|
|
RSTACK
|
|
?ELS42: GET STATION-ROOMS,CAR-HERE
|
|
RSTACK
|
|
?ELS5: ZERO? TRAIN-MOVING \?ELS46
|
|
ZERO? PULLED-STOP-CORD /?CND47
|
|
CALL2 ARREST-PLAYER,STR?285
|
|
?CND47: SET 'ON-TRAIN,FALSE-VALUE
|
|
RETURN BESIDE-TRACKS
|
|
?ELS46: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(The train is moving pretty quickly. If you want to jump, say so.)"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT LADDER-EXIT-F
|
|
IN? CONDUCTOR,HERE \?ELS5
|
|
CALL2 START-SENTENCE,CONDUCTOR
|
|
PRINTI " blocks your way."
|
|
CRLF
|
|
RFALSE
|
|
?ELS5: EQUAL? SCENERY-OBJ,TUNNEL \?ELS9
|
|
PRINTI "It's too dark inside the tunnel to climb the ladder."
|
|
CRLF
|
|
RFALSE
|
|
?ELS9: ZERO? TRAIN-MOVING \?ELS13
|
|
CALL1 TRAIN-SLOWING?
|
|
ZERO? STACK \?ELS13
|
|
PRINTI "You clamber up the ladder to the top of the train."
|
|
CRLF
|
|
ZERO? IN-STATION /?ELS20
|
|
CALL1 GUARD-NOTICES
|
|
RETURN ROOF
|
|
?ELS20: PRINTI "Far in the distance you can see that the tracks enter a tunnel."
|
|
CRLF
|
|
SET 'JUST-LOOKED,TRUE-VALUE
|
|
CALL2 PREPARE-SPLAT,9
|
|
RETURN ROOF
|
|
?ELS13: CALL1 TRAIN-SLOWING?
|
|
ZERO? STACK \?ELS27
|
|
LOC BOND
|
|
EQUAL? STACK,ROOF,OTHER-ROOF /?ELS27
|
|
RANDOM 100
|
|
LESS? 40,STACK /?ELS27
|
|
PRINTI "The rungs of the ladder are cold, the wind fierce, and the train bucks like a wild animal, but somehow you manage to make it to the roof. Your sense of satisfaction, however, is short-lived when you notice that the train is rapidly approaching a tunnel."
|
|
CRLF
|
|
SET 'JUST-LOOKED,TRUE-VALUE
|
|
CALL2 PREPARE-SPLAT,3
|
|
RETURN ROOF
|
|
?ELS27: PRINTI "You scramble up the first couple of rungs of the ladder, but the fierce wind and the bucking train seem to conspire to shake you loose. As you reach for the final rung, "
|
|
LOC BOND
|
|
EQUAL? STACK,ROOF,OTHER-ROOF \?CND36
|
|
PRINTI "you can see"
|
|
CALL2 HIM-HER-IT,BOND
|
|
PRINTI " struggling with someone on the roof, but "
|
|
?CND36: PRINTI "the train lurches around a turn. You lose your grip and plummet back down to the vestibule floor."
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ROOF-F,RARG=0
|
|
EQUAL? RARG,M-BEG \?ELS5
|
|
ZERO? IN-STATION /?CND6
|
|
CALL1 GUARD-NOTICES
|
|
?CND6: EQUAL? PRSA,V?DISEMBARK \?ELS14
|
|
CALL2 DO-WALK,P?DOWN
|
|
RTRUE
|
|
?ELS14: EQUAL? PRSA,V?EXAMINE,V?ANALYZE \FALSE
|
|
EQUAL? PRSO,TUNNEL \FALSE
|
|
GET TRAIN-TABLE,1
|
|
EQUAL? STACK,TUNNEL \FALSE
|
|
CALL1 NOTHING-SPECIAL
|
|
RSTACK
|
|
?ELS5: EQUAL? RARG,M-LOOK \FALSE
|
|
PRINTI "You are on the roof of the train. The wind blows your hair, and the "
|
|
ZERO? TRAIN-MOVING /?ELS30
|
|
PRINTI "rocking, lurching train threatens to buck you right off"
|
|
JUMP ?CND28
|
|
?ELS30: PRINTI "roof is more slippery than it looks"
|
|
?CND28: PRINTR ". It occurs to you that this might not be the safest place to be right now."
|
|
|
|
|
|
.FUNCT LADDER-ENTER-F
|
|
IN? BOND-OTHER,HERE \?ELS5
|
|
CALL2 START-SENTENCE,BOND-OTHER
|
|
PRINTI " blocks your way."
|
|
CRLF
|
|
RFALSE
|
|
?ELS5: EQUAL? CAR-HERE,DINER-CAR \?ELS9
|
|
RETURN VESTIBULE-REAR-DINER
|
|
?ELS9: EQUAL? CAR-HERE,FANCY-CAR \?ELS11
|
|
RETURN VESTIBULE-REAR-FANCY
|
|
?ELS11: RETURN VESTIBULE-REAR
|
|
|
|
|
|
.FUNCT LADDER-F
|
|
EQUAL? PRSA,V?CLIMB-ON,V?BOARD \?ELS5
|
|
EQUAL? HERE,ROOF \?ELS8
|
|
CALL2 DO-WALK,P?DOWN
|
|
RTRUE
|
|
?ELS8: CALL2 DO-WALK,P?UP
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSA,V?CLIMB-DOWN \?ELS12
|
|
CALL2 DO-WALK,P?DOWN
|
|
RTRUE
|
|
?ELS12: EQUAL? PRSA,V?CLIMB-UP \?ELS14
|
|
CALL2 DO-WALK,P?UP
|
|
RTRUE
|
|
?ELS14: EQUAL? PRSA,V?WALK-TO \FALSE
|
|
CALL2 V-REAR,CAR-HERE
|
|
CALL PERFORM,V?WALK-TO,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT VESTIBULE-FWD-DOOR-F
|
|
CALL2 VESTIBULE-DOOR-F,VESTIBULE-FWD-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT VESTIBULE-REAR-DOOR-F
|
|
CALL2 VESTIBULE-DOOR-F,VESTIBULE-REAR-DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT VESTIBULE-DOOR-F,DR
|
|
CALL2 FACE-DOOR,DR
|
|
EQUAL? PRSA,V?LOCK,V?UNLOCK \?ELS5
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?ELS5: EQUAL? PRSA,V?OPEN \?ELS7
|
|
FSET? DR,OPENBIT /?ELS12
|
|
FSET DR,OPENBIT
|
|
CALL QUEUE,I-VESTIBULE-DOOR,2
|
|
PUT STACK,0,1
|
|
PRINTI "The "
|
|
PRINTD DR
|
|
PRINTR " swings noisily open."
|
|
?ELS12: CALL ALREADY,DR,STR?12
|
|
RSTACK
|
|
?ELS7: EQUAL? PRSA,V?CLOSE \FALSE
|
|
FSET? DR,OPENBIT \?ELS23
|
|
FCLEAR DR,OPENBIT
|
|
PRINTI "The "
|
|
PRINTD DR
|
|
PRINTR " easily swings shut."
|
|
?ELS23: CALL ALREADY,DR,STR?13
|
|
RSTACK
|
|
|
|
|
|
.FUNCT I-VESTIBULE-DOOR,GARG=0,FLG
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-VESTIBULE-DOOR:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: CALL2 I-VESTIBULE-DOOR-PART,VESTIBULE-FWD-DOOR
|
|
CALL2 I-VESTIBULE-DOOR-PART,VESTIBULE-REAR-DOOR >FLG
|
|
ZERO? IDEBUG /?CND11
|
|
PRINTN FLG
|
|
PRINTI "]"
|
|
CRLF
|
|
RETURN FLG
|
|
?CND11: RETURN FLG
|
|
|
|
|
|
.FUNCT I-VESTIBULE-DOOR-PART,DR
|
|
FSET? DR,OPENBIT \FALSE
|
|
FCLEAR DR,OPENBIT
|
|
CALL GLOBAL-IN?,DR,HERE
|
|
ZERO? STACK /FALSE
|
|
PRINTI "The "
|
|
PRINTD DR
|
|
PRINTR " automatically swings shut."
|
|
|
|
|
|
.FUNCT STOP-CORD-IN?,RM
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-COMPS
|
|
ZERO? STACK \TRUE
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-COMPS-DINER
|
|
ZERO? STACK \TRUE
|
|
EQUAL? HERE,SUITE-1,SUITE-2,SUITE-3 /TRUE
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-VESTIB
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT STOP-CORD-F,ARG=0,X
|
|
CALL1 REMOTE-VERB?
|
|
ZERO? STACK \FALSE
|
|
ZERO? ARG \?ELS7
|
|
CALL2 STOP-CORD-IN?,HERE
|
|
ZERO? STACK \?ELS7
|
|
CALL2 NOT-HERE,STOP-CORD
|
|
RSTACK
|
|
?ELS7: EQUAL? PRSA,V?EXAMINE \?ELS11
|
|
CALL1 NOTHING-SPECIAL
|
|
RSTACK
|
|
?ELS11: ZERO? ARG \?THN14
|
|
EQUAL? PRSA,V?MOVE \FALSE
|
|
EQUAL? PRSO,STOP-CORD \FALSE
|
|
?THN14: ZERO? TRAIN-MOVING \?ELS20
|
|
PRINTR "Pulling the emergency stop cord doesn't do much when the train isn't moving."
|
|
?ELS20: CALL ZMEMQ,SCENERY-OBJ,STATIONS
|
|
ZERO? STACK /?CND18
|
|
CALL2 LURCH-MISS,STOP-CORD
|
|
RTRUE
|
|
?CND18: SET 'TRAIN-MOVING,FALSE-VALUE
|
|
CALL2 INT,I-TRAIN-SCENERY
|
|
PUT STACK,0,0
|
|
CALL2 INT,I-ARRIVE-WARNING
|
|
PUT STACK,0,0
|
|
RANDOM 2
|
|
ADD 5,STACK
|
|
CALL QUEUE,I-TRAIN-RESTART,STACK
|
|
PUT STACK,0,1
|
|
CALL2 INT,I-TICKETS-PLEASE
|
|
PUT STACK,0,0
|
|
PRINTI "The air fills with the high-pitched whine of metal on metal, and you are thrown violently forward as the train comes to an emergency stop."
|
|
CRLF
|
|
EQUAL? VARIATION,3,4 /?CND27
|
|
LESS? BOND-CTR,3 \?CND27
|
|
SET 'BOND-CTR,3
|
|
CALL QUEUE,I-BOND,1
|
|
?CND27: ZERO? ARG \?ELS34
|
|
CALL2 VISIBLE?,CONDUCTOR
|
|
ZERO? STACK /?ELS34
|
|
CALL ARREST-PLAYER,STR?285,FALSE-VALUE,TRUE-VALUE,STOP-CORD
|
|
JUMP ?CND32
|
|
?ELS34: FCLEAR CONDUCTOR,TOUCHBIT
|
|
PUTP CONDUCTOR,P?LDESC,20
|
|
?CND32: ZERO? ARG \?ELS41
|
|
CALL2 VISIBLE?,COOK
|
|
ZERO? STACK /?ELS41
|
|
CALL ARREST-PLAYER,STR?285,COOK,TRUE-VALUE,STOP-CORD
|
|
JUMP ?CND39
|
|
?ELS41: FCLEAR COOK,TOUCHBIT
|
|
CALL MOVE-PERSON,COOK,HALL-5-DINER
|
|
PUTP COOK,P?LDESC,20
|
|
?CND39: ZERO? ARG \?ELS48
|
|
CALL2 VISIBLE?,WAITER
|
|
ZERO? STACK /?ELS48
|
|
CALL ARREST-PLAYER,STR?285,WAITER,TRUE-VALUE,STOP-CORD
|
|
JUMP ?CND46
|
|
?ELS48: FCLEAR WAITER,TOUCHBIT
|
|
PUTP WAITER,P?LDESC,20
|
|
?CND46: ZERO? ARG \TRUE
|
|
SET 'PULLED-STOP-CORD,TRUE-VALUE
|
|
CALL1 ANYONE-VISIBLE? >X
|
|
ZERO? X /?CND56
|
|
CALL NEW-LDESC,X,1
|
|
?CND56: CALL VISIBLE?,BAD-SPY,TRUE-VALUE
|
|
ZERO? STACK /?CND59
|
|
SET 'BAD-SPY-KNOWS-YOU,TRUE-VALUE
|
|
CALL NEW-LDESC,BAD-SPY,1
|
|
?CND59: EQUAL? SCENERY-OBJ,CROSSING \TRUE
|
|
CALL1 FINAL-SCENE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT I-TRAIN-RESTART,GARG=0,X
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-TRAIN-RESTART:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: PRINTI "A whistle sounds, and the train briefly shudders and starts moving again."
|
|
CRLF
|
|
ZERO? ON-TRAIN \?CND13
|
|
PRINTI "Too bad you weren't on it!"
|
|
CRLF
|
|
CALL1 FINISH
|
|
?CND13: SET 'TRAIN-MOVING,TRUE-VALUE
|
|
CALL2 INT,I-TRAIN-SCENERY
|
|
PUT STACK,0,1
|
|
CALL2 INT,I-ARRIVE-WARNING >X
|
|
GET X,C-TICK
|
|
ZERO? STACK /?CND18
|
|
PUT X,0,1
|
|
?CND18: CALL2 INT,I-TICKETS-PLEASE
|
|
PUT STACK,0,1
|
|
FCLEAR CONDUCTOR,TOUCHBIT
|
|
PUTP CONDUCTOR,P?LDESC,19
|
|
CALL MOVE-PERSON,COOK,GALLEY
|
|
FCLEAR COOK,TOUCHBIT
|
|
PUTP COOK,P?LDESC,1
|
|
FCLEAR WAITER,TOUCHBIT
|
|
PUTP WAITER,P?LDESC,1
|
|
SET 'PULLED-STOP-CORD,FALSE-VALUE
|
|
ZERO? IDEBUG /TRUE
|
|
PRINTR "(1)]"
|
|
|
|
|
|
.FUNCT OPEN-CURTAINS
|
|
CALL OPEN-CURTAIN,COMPARTMENT-1,CURTAIN-1
|
|
CALL OPEN-CURTAIN,COMPARTMENT-2,CURTAIN-2
|
|
CALL OPEN-CURTAIN,COMPARTMENT-3,CURTAIN-3
|
|
CALL OPEN-CURTAIN,COMPARTMENT-4,CURTAIN-4
|
|
CALL OPEN-CURTAIN,COMPARTMENT-5,CURTAIN-5
|
|
RSTACK
|
|
|
|
|
|
.FUNCT OPEN-CURTAIN,HERE,OBJ,COR,RM
|
|
FSET OBJ,OPENBIT
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-COMPS >COR
|
|
ZERO? COR /?CND1
|
|
GETP HERE,P?STATION >RM
|
|
GET CAR-ROOMS-CORRIDS,COR >COR
|
|
?CND1: PUTP HERE,P?CORRIDOR,COR
|
|
GETP RM,P?CORRIDOR
|
|
BOR COR,STACK
|
|
PUTP RM,P?CORRIDOR,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CLOSE-CURTAINS
|
|
EQUAL? HERE,COMPARTMENT-1,HALL-1 /?CND1
|
|
CALL CLOSE-CURTAIN,COMPARTMENT-1,CURTAIN-1
|
|
?CND1: EQUAL? HERE,COMPARTMENT-2,HALL-2 /?CND4
|
|
CALL CLOSE-CURTAIN,COMPARTMENT-2,CURTAIN-2
|
|
?CND4: EQUAL? HERE,COMPARTMENT-3,HALL-3 /?CND7
|
|
CALL CLOSE-CURTAIN,COMPARTMENT-3,CURTAIN-3
|
|
?CND7: EQUAL? HERE,COMPARTMENT-4,HALL-4 /?CND10
|
|
CALL CLOSE-CURTAIN,COMPARTMENT-4,CURTAIN-4
|
|
?CND10: EQUAL? HERE,COMPARTMENT-5,HALL-5 /FALSE
|
|
CALL CLOSE-CURTAIN,COMPARTMENT-5,CURTAIN-5
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CLOSE-CURTAIN,HERE,OBJ,COR,RM,?TMP1
|
|
FCLEAR OBJ,OPENBIT
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-COMPS >COR
|
|
ZERO? COR /?CND1
|
|
GETP HERE,P?STATION >RM
|
|
GET CAR-ROOMS-CORRIDS,COR >COR
|
|
?CND1: PUTP HERE,P?CORRIDOR,0
|
|
SUB 0,COR
|
|
SUB STACK,1 >?TMP1
|
|
GETP RM,P?CORRIDOR
|
|
BAND ?TMP1,STACK
|
|
PUTP RM,P?CORRIDOR,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CURTAIN-F,COR,RM
|
|
CALL1 REMOTE-VERB?
|
|
ZERO? STACK \FALSE
|
|
CALL ZMEMQ,HERE,CAR-ROOMS-COMPS
|
|
ZERO? STACK \?ELS7
|
|
CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
?ELS7: EQUAL? PRSA,V?RAISE,V?OPEN \?ELS9
|
|
FSET? PRSO,OPENBIT \?CND10
|
|
CALL ALREADY,PRSO,STR?12
|
|
RTRUE
|
|
?CND10: CALL OPEN-CURTAIN,HERE,PRSO
|
|
CALL OKAY,PRSO,STR?12
|
|
RSTACK
|
|
?ELS9: EQUAL? PRSA,V?DROP,V?CLOSE \FALSE
|
|
FSET? PRSO,OPENBIT /?CND15
|
|
CALL ALREADY,PRSO,STR?13
|
|
RTRUE
|
|
?CND15: CALL CLOSE-CURTAIN,HERE,PRSO
|
|
CALL OKAY,PRSO,STR?13
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GENERIC-SEAT-F,X
|
|
EQUAL? HERE,HALL-1,COMPARTMENT-1 \?ELS5
|
|
RETURN SEAT-1
|
|
?ELS5: EQUAL? HERE,HALL-2,COMPARTMENT-2 \?ELS7
|
|
RETURN SEAT-2
|
|
?ELS7: EQUAL? HERE,HALL-3,COMPARTMENT-3 \?ELS9
|
|
RETURN SEAT-3
|
|
?ELS9: EQUAL? HERE,HALL-4,COMPARTMENT-4 \?ELS11
|
|
RETURN SEAT-4
|
|
?ELS11: EQUAL? HERE,HALL-5,COMPARTMENT-5 \?ELS13
|
|
RETURN SEAT-5
|
|
?ELS13: EQUAL? HERE,HALL-1-DINER,BOOTH-1 \?ELS15
|
|
RETURN BOOTH-SEAT-1
|
|
?ELS15: EQUAL? HERE,HALL-2-DINER,BOOTH-2 \?ELS17
|
|
RETURN BOOTH-SEAT-2
|
|
?ELS17: EQUAL? HERE,HALL-3-DINER,BOOTH-3 \?ELS19
|
|
RETURN BOOTH-SEAT-3
|
|
?ELS19: CALL1 MORE-SPECIFIC
|
|
RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT SEAT-1-F
|
|
CALL2 SEAT-F,UNDER-SEAT-1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEAT-F,U,RARG=0,F
|
|
EQUAL? PRSA,V?PUT-UNDER \?ELS5
|
|
CALL PERFORM,V?PUT,PRSO,U
|
|
FSET PRSO,NDESCBIT
|
|
CALL1 ANYONE-VISIBLE? >F
|
|
ZERO? F /TRUE
|
|
EQUAL? PRSO,GUN \?CND10
|
|
SET 'PERSON-SAW-GUN,F
|
|
?CND10: PUTP F,P?LDESC,1
|
|
CALL HE-SHE-IT,F,TRUE-VALUE,STR?288
|
|
PRINTR " what you've done."
|
|
?ELS5: EQUAL? PRSA,V?LOOK-UNDER \FALSE
|
|
FIRST? U >F /?KLU25
|
|
?KLU25: ZERO? F /?CND17
|
|
FCLEAR F,NDESCBIT
|
|
?CND17: CALL PERFORM,V?LOOK-INSIDE,U
|
|
ZERO? F /TRUE
|
|
FSET F,NDESCBIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT UNDER-SEAT-F,RARG=0
|
|
EQUAL? RARG,M-OBJDESC /TRUE
|
|
EQUAL? RARG,M-CONT \FALSE
|
|
EQUAL? PRSA,V?TAKE \FALSE
|
|
FCLEAR PRSO,NDESCBIT
|
|
RFALSE
|
|
|
|
|
|
.FUNCT UNDER-SEAT-N-F,X
|
|
EQUAL? PRSA,V?LOOK-INSIDE \FALSE
|
|
FIRST? PRSO >X \?ELS10
|
|
PRINTI "Under the seat "
|
|
NEXT? X /?PRD16
|
|
PUSH 0
|
|
JUMP ?PRD17
|
|
?PRD16: PUSH 1
|
|
?PRD17: ZERO? STACK \?ELS15
|
|
PRINTI "is "
|
|
JUMP ?CND13
|
|
?ELS15: PRINTI "are "
|
|
?CND13: CALL2 PRINT-CONTENTS,PRSO
|
|
PRINTR "."
|
|
?ELS10: PRINTR "There's nothing under the seat."
|
|
|
|
|
|
.FUNCT SEAT-2-F
|
|
CALL2 SEAT-F,UNDER-SEAT-2
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEAT-3-F
|
|
CALL2 SEAT-F,UNDER-SEAT-3
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEAT-4-F
|
|
CALL2 SEAT-F,UNDER-SEAT-4
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEAT-5-F
|
|
CALL2 SEAT-F,UNDER-SEAT-5
|
|
RSTACK
|
|
|
|
|
|
.FUNCT BOOTH-SEAT-1-F
|
|
CALL2 SEAT-F,UNDER-BOOTH-1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT BOOTH-SEAT-2-F
|
|
CALL2 SEAT-F,UNDER-BOOTH-2
|
|
RSTACK
|
|
|
|
|
|
.FUNCT BOOTH-SEAT-3-F
|
|
CALL2 SEAT-F,UNDER-BOOTH-3
|
|
RSTACK
|
|
|
|
|
|
.FUNCT WINDOW-ROOM,RM,WIND,X
|
|
ZERO? ON-TRAIN /?ELS5
|
|
ZERO? IN-STATION /?ELS11
|
|
GET STATION-ROOMS,CAR-HERE
|
|
RSTACK
|
|
?ELS11: ZERO? TRAIN-MOVING \FALSE
|
|
RETURN BESIDE-TRACKS
|
|
?ELS5: CALL ZMEMQ,WIND,CAR-ROOMS-WINDOWS >X
|
|
ZERO? X /FALSE
|
|
EQUAL? CAR-HERE,DINER-CAR \?ELS21
|
|
GET CAR-ROOMS-COMPS-DINER,X
|
|
RSTACK
|
|
?ELS21: EQUAL? CAR-HERE,FANCY-CAR \?ELS23
|
|
EQUAL? X,1 \?ELS28
|
|
RETURN SUITE-1
|
|
?ELS28: EQUAL? X,2 \?ELS30
|
|
RETURN SUITE-2
|
|
?ELS30: EQUAL? X,3 \FALSE
|
|
RETURN SUITE-3
|
|
?ELS23: GET CAR-ROOMS-COMPS,X
|
|
RSTACK
|
|
|
|
|
|
.FUNCT WINDOW-F,RM
|
|
EQUAL? PRSA,V?READ,V?EXAMINE \?ELS5
|
|
IN? FROY,HERE \?ELS10
|
|
CALL PERFORM,PRSA,FROY
|
|
RTRUE
|
|
?ELS10: PRINTR "Yup. That's a window, all right."
|
|
?ELS5: EQUAL? PRSA,V?OPEN \?ELS16
|
|
FSET? PRSO,OPENBIT \?ELS21
|
|
CALL ALREADY,PRSO,STR?12
|
|
RSTACK
|
|
?ELS21: EQUAL? PRSO,VESTIBULE-REAR-WINDOW,VESTIBULE-FWD-WINDOW \?ELS23
|
|
FSET PRSO,OPENBIT
|
|
PRINTR "The window opens all the way."
|
|
?ELS23: EQUAL? PRSO,HALL-WINDOW \?ELS27
|
|
PRINTR "This window is sealed shut."
|
|
?ELS27: FSET PRSO,OPENBIT
|
|
EQUAL? CAR-HERE,GAS-CAR \?CND32
|
|
CALL WINDOW-ROOM,HERE,PRSO
|
|
EQUAL? GAS-CAR-RM,HERE,STACK \?CND32
|
|
SET 'GAS-CAR-RM,FALSE-VALUE
|
|
SET 'GAS-CAR,FALSE-VALUE
|
|
?CND32: PRINTR "The window opens only a bit, but it is enough to ventilate the room."
|
|
?ELS16: EQUAL? PRSA,V?CLOSE \?ELS40
|
|
FSET? PRSO,OPENBIT /?ELS45
|
|
CALL ALREADY,PRSO,STR?13
|
|
RSTACK
|
|
?ELS45: CALL OKAY,PRSO,STR?13
|
|
RSTACK
|
|
?ELS40: EQUAL? PRSA,V?THROW-THROUGH \?ELS49
|
|
FSET? PRSI,WINDOWBIT \FALSE
|
|
FSET? PRSI,OPENBIT /?ELS56
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(The window is closed!)"
|
|
?ELS56: EQUAL? PRSI,VESTIBULE-REAR-WINDOW,VESTIBULE-FWD-WINDOW /?ELS60
|
|
GETP PRSO,P?CHARACTER
|
|
ZERO? STACK \?THN63
|
|
GETP PRSO,P?SIZE
|
|
LESS? 16,STACK \?ELS60
|
|
?THN63: CALL TOO-BAD-BUT,PRSO,STR?289
|
|
RSTACK
|
|
?ELS60: ZERO? TRAIN-MOVING \?ELS66
|
|
CALL WINDOW-ROOM,HERE,PRSI
|
|
MOVE PRSO,STACK
|
|
CALL2 START-SENTENCE,PRSO
|
|
PRINTR " drops out of sight."
|
|
?ELS66: MOVE PRSO,LIMBO-FWD
|
|
CALL2 START-SENTENCE,PRSO
|
|
PRINTR " is gone with the wind."
|
|
?ELS49: EQUAL? PRSA,V?THROUGH \?ELS74
|
|
EQUAL? PRSO,VESTIBULE-REAR-WINDOW,VESTIBULE-FWD-WINDOW \?ELS79
|
|
CALL2 DO-WALK,P?DOWN
|
|
RTRUE
|
|
?ELS79: FSET? PRSO,OPENBIT \FALSE
|
|
PRINTR "It won't open far enough."
|
|
?ELS74: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-THROUGH,V?LOOK-INSIDE \FALSE
|
|
ZERO? ON-TRAIN /?ELS90
|
|
EQUAL? PRSA,V?LOOK-INSIDE /FALSE
|
|
ZERO? IN-STATION /?ELS98
|
|
PRINTI "From here you can survey part of the platform at the "
|
|
PRINTD SCENERY-OBJ
|
|
PRINTI " station."
|
|
CRLF
|
|
GET STATION-ROOMS,CAR-HERE
|
|
CALL ROOM-PEEK,STACK,TRUE-VALUE
|
|
RSTACK
|
|
?ELS98: CALL1 MOTION-PREFIX
|
|
ZERO? STACK /FALSE
|
|
SET 'JUST-LOOKED,TRUE-VALUE
|
|
RTRUE
|
|
?ELS90: CALL WINDOW-ROOM,HERE,PRSO >RM
|
|
ZERO? RM /FALSE
|
|
EQUAL? PRSA,V?LOOK-OUTSIDE /FALSE
|
|
CALL ROOM-PEEK,RM,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NEXT-ROOF-TO-FWD-F
|
|
CALL NEXT-CAR,-1,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NEXT-ROOF-TO-REAR-F
|
|
CALL NEXT-CAR,1,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NEXT-CAR-TO-FWD-F
|
|
CALL2 NEXT-CAR,-1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NEXT-CAR-TO-REAR-F
|
|
CALL2 NEXT-CAR,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NEXT-CAR,WHICH,ROOF?=0,NCAR
|
|
EQUAL? ROOF?,1 \?ELS3
|
|
IN? BOND-OTHER,ROOF \?ELS3
|
|
RANDOM 100
|
|
LESS? 50,STACK /?ELS3
|
|
CALL2 START-SENTENCE,BOND-OTHER
|
|
PRINTI " blocks your way."
|
|
CRLF
|
|
RFALSE
|
|
?ELS3: ZERO? CUSTOMS-SWEEP /?CND1
|
|
ZERO? ON-TRAIN /?CND1
|
|
EQUAL? CAR-HERE,1 /?CND1
|
|
FSET? PASSPORT,LOCKED \?CND1
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(You'd do better to go directly to the platform.)"
|
|
CRLF
|
|
RFALSE
|
|
?CND1: ADD 1,WHICH
|
|
GET DIR-STRINGS,STACK >PLAYER-NOT-FACING
|
|
ADD WHICH,CAR-HERE >NCAR
|
|
ZERO? NCAR \?ELS16
|
|
PRINTI "You can see the locomotive directly ahead, but there's no way to climb onto it."
|
|
CRLF
|
|
RFALSE
|
|
?ELS16: GRTR? NCAR,CAR-MAX \?CND14
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(This is the last car of the train.)"
|
|
CRLF
|
|
RFALSE
|
|
?CND14: CALL NEXT-CAR-SWITCHEROO,CAR-HERE,NCAR
|
|
CALL ROB,TOILET,LIMBO-FWD
|
|
CALL1 OPEN-CURTAINS
|
|
EQUAL? ROOF?,1 \?ELS27
|
|
LOC BOND-OTHER
|
|
EQUAL? STACK,ROOF,OTHER-ROOF \FALSE
|
|
PUTP BOND-OTHER,P?CAR,NCAR
|
|
CALL OBJ-TO-NEXT,BOND-OTHER,NCAR
|
|
MOVE BOND-OTHER,ROOF
|
|
CALL HE-SHE-IT,BOND-OTHER,TRUE-VALUE
|
|
PRINTI " pursues you."
|
|
CRLF
|
|
RFALSE
|
|
?ELS27: EQUAL? -1,ROOF? \?ELS34
|
|
PRINTI "You walk "
|
|
EQUAL? WHICH,1 \?ELS39
|
|
PRINTI "rear"
|
|
JUMP ?CND37
|
|
?ELS39: PRINTI "for"
|
|
?CND37: PRINTI "ward to the "
|
|
EQUAL? NCAR,1 \?ELS50
|
|
PRINTI "front of the train"
|
|
JUMP ?CND48
|
|
?ELS50: EQUAL? NCAR,CAR-MAX \?ELS54
|
|
PRINTI "end of the train"
|
|
JUMP ?CND48
|
|
?ELS54: PRINTI "next car"
|
|
?CND48: PRINTI "."
|
|
CRLF
|
|
RFALSE
|
|
?ELS34: EQUAL? NCAR,DINER-CAR \?ELS64
|
|
EQUAL? WHICH,1 \?ELS69
|
|
RETURN VESTIBULE-FWD-DINER
|
|
?ELS69: RETURN VESTIBULE-REAR-DINER
|
|
?ELS64: EQUAL? NCAR,FANCY-CAR \?ELS73
|
|
EQUAL? WHICH,1 \?ELS78
|
|
RETURN VESTIBULE-FWD-FANCY
|
|
?ELS78: RETURN VESTIBULE-REAR-FANCY
|
|
?ELS73: EQUAL? WHICH,1 \?ELS87
|
|
RETURN VESTIBULE-FWD
|
|
?ELS87: RETURN VESTIBULE-REAR
|
|
|
|
|
|
.FUNCT NEXT-CAR-SWITCHEROO,CAR,CARH,CNT,RM
|
|
EQUAL? CAR,CARH /FALSE
|
|
SET 'LAST-CAR-HERE,CAR-HERE
|
|
SET 'CAR-HERE,CARH
|
|
PRINTI "[Debugging info: you are entering "
|
|
CALL2 ON-PLATFORM?,HERE
|
|
ZERO? STACK /?ELS10
|
|
PUSH STR?290
|
|
JUMP ?CND6
|
|
?ELS10: PUSH STR?291
|
|
?CND6: PRINT STACK
|
|
PRINTN CARH
|
|
PRINTI ".]"
|
|
CRLF
|
|
PUTP PLAYER,P?CAR,CARH
|
|
CALL OBJ-TO-NEXT,PLAYER,CARH
|
|
CALL ROOM-TO-OTHER,CAR,ROOF
|
|
CALL2 OTHER-TO-ROOM,ROOF
|
|
EQUAL? HERE,ROOF /?CND19
|
|
FCLEAR ROOF,SEENBIT
|
|
?CND19: GET CAR-ROOMS,0 >CNT
|
|
?PRG22: GET CAR-ROOMS,CNT >RM
|
|
EQUAL? CAR,DINER-CAR,FANCY-CAR /?CND24
|
|
CALL ROOM-TO-OTHER,CAR,RM
|
|
?CND24: EQUAL? CAR-HERE,DINER-CAR,FANCY-CAR /?CND27
|
|
CALL2 OTHER-TO-ROOM,RM
|
|
?CND27: CALL CORRIDOR-LOOK,RM,CAR
|
|
ZERO? STACK \?CND30
|
|
FCLEAR RM,SEENBIT
|
|
?CND30: DLESS? 'CNT,1 \?PRG22
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ROOM-TO-OTHER,CAR,RM,ORM,F,N,C,X
|
|
GETP RM,P?OTHER >ORM
|
|
FIRST? RM >F /?KLU31
|
|
?KLU31:
|
|
?PRG1: ZERO? F /TRUE
|
|
NEXT? F >N /?KLU32
|
|
?KLU32: FSET? F,SURFACEBIT /?THN12
|
|
FSET? F,CONTBIT \?CND9
|
|
?THN12: CALL ROOM-TO-OTHER,CAR,F
|
|
?CND9: EQUAL? F,PLAYER,PAPER-FIXTURE \?ELS16
|
|
JUMP ?CND14
|
|
?ELS16: EQUAL? F,TOWEL-FIXTURE-BROKEN,TOWEL-LOOP-BROKEN /?THN19
|
|
GETP F,P?CAR >X
|
|
ZERO? X /?CND14
|
|
LESS? X,CAR-MAX-MAX \?CND14
|
|
?THN19: PUTP F,P?CAR,CAR
|
|
MOVE F,ORM
|
|
GETP F,P?CHARACTER >C
|
|
ZERO? C /?CND14
|
|
CALL ZMEMQ,F,EXTRA-TABLE >X
|
|
ZERO? X /?CND26
|
|
IN? F,HERE /?CND26
|
|
CALL2 CORRIDOR-LOOK,F
|
|
ZERO? STACK \?CND26
|
|
GET EXTRA-SEEN-TABLE,X
|
|
SUB 0,STACK
|
|
PUT EXTRA-SEEN-TABLE,X,STACK
|
|
FCLEAR F,TOUCHBIT
|
|
FCLEAR F,SEENBIT
|
|
PUTP F,P?LDESC,0
|
|
?CND26: CALL2 FIX-GOAL,F
|
|
?CND14: SET 'F,N
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT OTHER-TO-ROOM,RM,ORM,F,N,C,X
|
|
CALL FIND-FLAG-LG,RM,WINDOWBIT >N
|
|
ZERO? N /?CND1
|
|
FCLEAR N,OPENBIT
|
|
?CND1: CALL FIND-FLAG-LG,RM,DOORBIT >F
|
|
EQUAL? RM,GAS-CAR-RM \?ELS6
|
|
EQUAL? CAR-HERE,GAS-CAR \?ELS9
|
|
FSET F,LOCKED
|
|
JUMP ?CND4
|
|
?ELS9: FCLEAR F,LOCKED
|
|
JUMP ?CND4
|
|
?ELS6: CALL ZMEMQ,RM,CAR-ROOMS-REST
|
|
ZERO? STACK /?CND4
|
|
CALL OCCUPIED?,RM,CAR-HERE
|
|
ZERO? STACK /?ELS16
|
|
FSET F,LOCKED
|
|
JUMP ?CND4
|
|
?ELS16: FCLEAR F,LOCKED
|
|
?CND4: GETP RM,P?OTHER >ORM
|
|
FIRST? ORM >F /?KLU45
|
|
?KLU45:
|
|
?PRG19: ZERO? F /TRUE
|
|
NEXT? F >N /?KLU46
|
|
?KLU46: FSET? F,SURFACEBIT /?THN30
|
|
FSET? F,CONTBIT \?CND27
|
|
?THN30: GETP F,P?OTHER
|
|
CALL2 OTHER-TO-ROOM,STACK
|
|
?CND27: EQUAL? F,TOWEL-FIXTURE-BROKEN,TOWEL-LOOP-BROKEN /?THN35
|
|
GETP F,P?CAR >X
|
|
ZERO? X /?CND32
|
|
LESS? X,CAR-MAX-MAX \?CND32
|
|
?THN35: GETP F,P?CAR
|
|
EQUAL? CAR-HERE,STACK \?CND32
|
|
MOVE F,RM
|
|
GETP F,P?CHARACTER >C
|
|
ZERO? C /?CND39
|
|
CALL2 FIX-GOAL,F
|
|
?CND39:
|
|
?CND32: SET 'F,N
|
|
JUMP ?PRG19
|
|
|
|
|
|
.FUNCT FIX-GOAL,PER,GT
|
|
CALL IN-MOTION?,PER,TRUE-VALUE
|
|
ZERO? STACK /FALSE
|
|
GETP PER,P?CHARACTER
|
|
GET GOAL-TABLES,STACK >GT
|
|
GET GT,GOAL-F
|
|
GETP STACK,P?OTHER
|
|
PUT GT,GOAL-F,STACK
|
|
GET GT,GOAL-S
|
|
GETP STACK,P?OTHER
|
|
PUT GT,GOAL-S,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT BESIDE-TRACKS-F,RARG=0
|
|
EQUAL? RARG,M-ENTER \?ELS5
|
|
EQUAL? SCENERY-OBJ,MEADOW \FALSE
|
|
FSET? FLOWER-1,NDESCBIT \?ELS13
|
|
MOVE FLOWER-1,HERE
|
|
RFALSE
|
|
?ELS13: FSET? FLOWER-2,NDESCBIT \FALSE
|
|
MOVE FLOWER-2,HERE
|
|
RFALSE
|
|
?ELS5: EQUAL? RARG,M-LOOK \?ELS17
|
|
PRINTI "You are standing beside "
|
|
EQUAL? CAR-HERE,1 \?ELS22
|
|
PRINTI "the first car of "
|
|
JUMP ?CND20
|
|
?ELS22: EQUAL? CAR-HERE,CAR-MAX \?CND20
|
|
PRINTI "the last car of "
|
|
?CND20: PRINTI "the train. "
|
|
GETP SCENERY-OBJ,P?TEXT
|
|
PRINT STACK
|
|
EQUAL? SCENERY-OBJ,MEADOW \?CND31
|
|
ZERO? PULLED-STOP-CORD \?CND31
|
|
PRINTI " There's a cow on the tracks in front of the locomotive, with several people trying to push her out of the way."
|
|
?CND31: CRLF
|
|
RTRUE
|
|
?ELS17: ZERO? RARG \FALSE
|
|
EQUAL? PRSA,V?WALK-TO \FALSE
|
|
EQUAL? PRSO,BESIDE-TRACKS \FALSE
|
|
ZERO? ON-TRAIN /?ELS47
|
|
CALL PERFORM,V?LEAVE,TRAIN
|
|
RTRUE
|
|
?ELS47: CALL1 HAR-HAR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ALONG-TRAIN-FWD-F
|
|
CALL NEXT-CAR,-1,-1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ALONG-TRAIN-REAR-F
|
|
CALL NEXT-CAR,1,-1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT I-TRAIN-ARREST,GARG=0
|
|
ZERO? IDEBUG \?THN4
|
|
EQUAL? GARG,G-DEBUG \?CND1
|
|
?THN4: PRINTI "[I-TRAIN-ARREST:"
|
|
EQUAL? GARG,G-DEBUG /FALSE
|
|
?CND1: EQUAL? HERE,ROOF \?ELS15
|
|
CALL QUEUE,I-TRAIN-ARREST,5
|
|
PUT STACK,0,1
|
|
ZERO? IDEBUG /FALSE
|
|
PRINTI "(0)]"
|
|
CRLF
|
|
RFALSE
|
|
?ELS15: CRLF
|
|
CALL2 START-SENTENCE,CONDUCTOR
|
|
EQUAL? HERE,UNCONSCIOUS \?ELS28
|
|
PRINTI " shakes you awake. He is"
|
|
JUMP ?CND26
|
|
?ELS28: PRINTI " approaches,"
|
|
?CND26: PRINTI " accompanied by two grim-faced soldiers armed with machine guns. They take things like "
|
|
PRINT ARREST-REASON
|
|
PRINTI " very seriously here. He isn't smiling as he says, "
|
|
CALL1 PRODUCE-GIBBERISH
|
|
PRINTI "
|
|
After your arrest and a little gentle persuasion with beatings, cigarette burns and starvation, you confess to the crime of espionage. Within days your confession is front-page news around the world. And the Cold War gets a little bit hotter..."
|
|
CRLF
|
|
CALL1 FINISH
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NOISY?,RM
|
|
EQUAL? RM,UNCONSCIOUS /TRUE
|
|
ZERO? ON-TRAIN /FALSE
|
|
ZERO? TRAIN-MOVING /FALSE
|
|
EQUAL? RM,VESTIBULE-FWD-DINER,VESTIBULE-REAR-DINER /TRUE
|
|
EQUAL? RM,VESTIBULE-FWD-FANCY,VESTIBULE-REAR-FANCY /TRUE
|
|
EQUAL? RM,VESTIBULE-FWD,VESTIBULE-REAR,ROOF /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT L-FWD,CAR
|
|
EQUAL? CAR,DINER-CAR \?ELS5
|
|
RETURN LIMBO-FWD-DINER
|
|
?ELS5: EQUAL? CAR,FANCY-CAR \?ELS7
|
|
RETURN LIMBO-FWD-FANCY
|
|
?ELS7: EQUAL? CAR,CAR-HERE \?ELS9
|
|
RETURN LIMBO-FWD
|
|
?ELS9: RETURN OTHER-LIMBO-FWD
|
|
|
|
|
|
.FUNCT L-REAR,CAR
|
|
EQUAL? CAR,DINER-CAR \?ELS5
|
|
RETURN LIMBO-REAR-DINER
|
|
?ELS5: EQUAL? CAR,FANCY-CAR \?ELS7
|
|
RETURN LIMBO-REAR-FANCY
|
|
?ELS7: EQUAL? CAR,CAR-HERE \?ELS9
|
|
RETURN LIMBO-REAR
|
|
?ELS9: RETURN OTHER-LIMBO-REAR
|
|
|
|
|
|
.FUNCT V-FWD,CAR
|
|
EQUAL? CAR,DINER-CAR \?ELS5
|
|
RETURN VESTIBULE-FWD-DINER
|
|
?ELS5: EQUAL? CAR,FANCY-CAR \?ELS7
|
|
RETURN VESTIBULE-FWD-FANCY
|
|
?ELS7: EQUAL? CAR,CAR-HERE \?ELS9
|
|
RETURN VESTIBULE-FWD
|
|
?ELS9: RETURN OTHER-VESTIBULE-FWD
|
|
|
|
|
|
.FUNCT V-REAR,CAR
|
|
EQUAL? CAR,DINER-CAR \?ELS5
|
|
RETURN VESTIBULE-REAR-DINER
|
|
?ELS5: EQUAL? CAR,FANCY-CAR \?ELS7
|
|
RETURN VESTIBULE-REAR-FANCY
|
|
?ELS7: EQUAL? CAR,CAR-HERE \?ELS9
|
|
RETURN VESTIBULE-REAR
|
|
?ELS9: RETURN OTHER-VESTIBULE-REAR
|
|
|
|
.ENDI
|