.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