checkpoint/train.zap
historicalsource 8ae301e53b Final Revision
2019-04-13 22:12:44 -04:00

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