├── COMPILED └── spy.z5 ├── README.md ├── cars.zap ├── cars.zil ├── chase.blank ├── checkpoint.zil ├── clock.cmp ├── clock.zap ├── clock.zil ├── frotzerland.mss ├── global.cmp ├── global.zap ├── global.zil ├── goal.cmp ├── goal.zap ├── goal.zil ├── i1.zil ├── macros.cmp ├── macros.zap ├── macros.zil ├── main.cmp ├── main.zap ├── main.zil ├── p.cmp ├── parser.cmp ├── parser.true ├── parser.zap ├── parser.zil ├── people.cmp ├── people.zap ├── people.zil ├── places.cmp ├── places.zap ├── places.zil ├── script.gary ├── script.jw ├── script.liz ├── script.md ├── script.scf ├── script.swg ├── spies.cmp ├── spies.txt ├── spies.zap ├── spies.zil ├── spoiler.mss ├── spoiler.rno ├── spy.chart ├── spy.errors ├── spy.mem ├── spy.mss ├── spy.record ├── spy.rno ├── spy.script ├── spy.serial ├── spy.txt ├── spy.xzap ├── spy.zap ├── spy.zbin ├── spy.zebra ├── spy.zil ├── spy.zip ├── spydat.zap ├── spyfreq.xzap ├── spystr.zap ├── station.cmp ├── station.zap ├── station.zil ├── syntax.zap ├── syntax.zil ├── things.cmp ├── things.zap ├── things.zil ├── train.cmp ├── train.zap ├── train.zil ├── verbs.cmp ├── verbs.zap ├── verbs.zil └── zapch.ctl /COMPILED/spy.z5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/historicalsource/checkpoint/2844b267ff427564729e2efd596ffafe3cf890d5/COMPILED/spy.z5 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Checkpoint Source Code Collection 2 | 3 | Checkpoint is an unreleased interactive fiction game written by Stu Galley for Infocom. 4 | 5 | Further information on Checkpoint: 6 | 7 | * [An Overview of Border Zone](https://www.filfre.net/2015/11/border-zone/), an unrelated Spy game later released by Infocom 8 | * [A Description of Checkpoint before Moonmist](https://www.filfre.net/2015/03/moonmist/) 9 | 10 | __What is this Repository?__ 11 | 12 | This repository is a directory of source code for the incomplete Infocom game "Checkpoint", including a variety of files both used and discarded in the production of the game. It is written in ZIL (Zork Implementation Language), a refactoring of MDL (Muddle), itself a dialect of LISP created by MIT students and staff. 13 | 14 | The source code was contributed anonymously and represents a snapshot of the Infocom development system at time of shutdown - there is no remaining way to compare it against any official version as of this writing, and so it should be considered canonical, but not necessarily the exact source code arrangement for production. 15 | 16 | __Basic Information on the Contents of This Repository__ 17 | 18 | It is mostly important to note that there is currently no known way to compile the source code in this repository into a final "Z-machine Interpreter Program" (ZIP) file. There are .ZIP files in some of the Infocom Source Code repositories but they were there as of final spin-down of the Infocom Drive and the means to create them is currently lost. 19 | 20 | Throughout its history, Infocom used a TOPS20 mainframe with a compiler (ZILCH) to create and edit language files - this repository is a mirror of the source code directory archive of Infocom but could represent years of difference from what was originally released. 21 | 22 | In general, Infocom games were created by taking previous Infocom source code, copying the directory, and making changes until the game worked the way the current Implementor needed. Structure, therefore, tended to follow from game to game and may or may not accurately reflect the actual function of the code. 23 | 24 | There are also multiple versions of the "Z-Machine" and code did change notably between the first years of Infocom and a decade later. Addition of graphics, sound and memory expansion are all slowly implemented over time. 25 | 26 | __What is the Purpose of this Repository__ 27 | 28 | This collection is meant for education, discussion, and historical work, allowing researchers and students to study how code was made for these interactive fiction games and how the system dealt with input and processing. It is not considered to be under an open license. 29 | 30 | Researchers are encouraged to share their discoveries about the information in this source code and the history of Infocom and its many innovative employees. 31 | 32 | __Some Trivia and Notes on this Repository__ 33 | 34 | After finishing Seastalker, (Galley) had the idea to write a Cold War espionage thriller, tentatively called Checkpoint: “You, an innocent train traveler in a foreign country, get mixed up with spies and have to be as clever as they to survive.” He struggled for six months with Checkpoint, almost as long as it took some Imps to create a complete game, before voluntarily shelving it: “The problem there was that the storyline wasn’t sufficiently well developed to make it really interesting. I guess I had a vision of a certain kind of atmosphere in the writing that was rather hard to bring off.” 35 | 36 | -- From "Moonmist", an article by Jimmy Maher (https://www.filfre.net/2015/03/moonmist/) 37 | 38 | * The working title was "Spy", and this was also the working title of Border Zone. Therefore it is often reported that Border Zone is a refashioning of Spy/Checkpoint, but Marc Blank's cold-war thriller game was written entirely separate. 39 | * Stu Galley turned his attention from this project to a game that would eventually become "Moonmist". 40 | 41 | The compiled code in this repository (spy.zip and COMPILED/spy.z5) is not the checkpoint game, but rather a early version of Journey. The code here can be compiled if you would like to try the actual game. 42 | -------------------------------------------------------------------------------- /cars.zap: -------------------------------------------------------------------------------- 1 | 2 | 3 | .FUNCT DINER-F 4 | EQUAL? PRSA,V?WALK-TO \FALSE 5 | EQUAL? CAR-HERE,DINER-CAR \?ELS10 6 | CALL1 HAR-HAR 7 | RSTACK 8 | ?ELS10: ZERO? DINER-TOUCHED /FALSE 9 | SET 'CLOCK-WAIT,TRUE-VALUE 10 | PRINTR "(You'll have to get there on your own.)" 11 | 12 | 13 | .FUNCT GENERIC-BOOTH-F,X 14 | EQUAL? HERE,HALL-1-DINER,BOOTH-1 \?ELS5 15 | RETURN BOOTH-1 16 | ?ELS5: EQUAL? HERE,HALL-2-DINER,BOOTH-2 \?ELS7 17 | RETURN BOOTH-2 18 | ?ELS7: EQUAL? HERE,HALL-3-DINER,BOOTH-3 \?ELS9 19 | RETURN BOOTH-3 20 | ?ELS9: CALL1 REMOTE-VERB? 21 | ZERO? STACK \FALSE 22 | SET 'CLOCK-WAIT,TRUE-VALUE 23 | PRINTI "(You can't see any booth here.)" 24 | CRLF 25 | RETURN NOT-HERE-OBJECT 26 | 27 | 28 | .FUNCT PANTRY-F,RARG=0 29 | EQUAL? RARG,M-LOOK \?ELS5 30 | CALL2 ROOM-IS-CROWDED,PANTRY 31 | RSTACK 32 | ?ELS5: EQUAL? RARG,M-END \FALSE 33 | IN? WAITER,PANTRY \FALSE 34 | CALL2 INVASION?,WAITER 35 | RFALSE 36 | 37 | 38 | .FUNCT INVASION?,PER 39 | GETP PER,P?SOUTH 40 | LESS? 0,STACK /FALSE 41 | EQUAL? PRSA,V?SMILE /FALSE 42 | EQUAL? PRSA,V?KISS,V?GIVE,V?$CALL /FALSE 43 | EQUAL? INVASION-TIME,PRESENT-TIME /FALSE 44 | ZERO? CLOCK-WAIT \FALSE 45 | SET 'INVASION-TIME,PRESENT-TIME 46 | CALL HE-SHE-IT,PER,TRUE-VALUE,STR?154 47 | PRINTI " a pushing motion with one hand and points forward with the other. " 48 | CALL HE-SHE-IT,PER,TRUE-VALUE,STR?194 49 | PRINTI " angry that you're invading" 50 | CALL HIM-HER-IT,PER,FALSE-VALUE,TRUE-VALUE 51 | PRINTR " space." 52 | 53 | 54 | .FUNCT GALLEY-F,RARG=0 55 | EQUAL? RARG,M-LOOK \?ELS5 56 | CALL2 ROOM-IS-CROWDED,GALLEY 57 | RSTACK 58 | ?ELS5: EQUAL? RARG,M-END \FALSE 59 | IN? COOK,GALLEY \FALSE 60 | CALL2 INVASION?,COOK 61 | RFALSE 62 | 63 | 64 | .FUNCT COUNTER-GALLEY-F 65 | EQUAL? PRSA,V?LOOK-ON,V?EXAMINE \FALSE 66 | PRINTR "The counter is crowded with kitchen hardware and software." 67 | 68 | 69 | .FUNCT ROOM-IS-CROWDED,RM 70 | CALL2 START-SENTENCE,RM 71 | PRINTI " is crowded with supplies and equipment. The locked cabinets are probably filled with " 72 | EQUAL? RM,PANTRY \?ELS5 73 | PRINTI "dishes, tableware, and napkins" 74 | JUMP ?CND3 75 | ?ELS5: EQUAL? RM,GALLEY \?CND3 76 | PRINTI "food, kettles, and kitchen tools. There's a crowded counter for preparing food" 77 | ?CND3: PRINTR ". If you want to find something, you'll have to search for it." 78 | 79 | 80 | .FUNCT BOOTH-F,RARG=0,?TMP1 81 | EQUAL? RARG,M-ENTER \?ELS5 82 | ZERO? DEBUG /?CND6 83 | PRINTI "[booth entry routine]" 84 | CRLF 85 | ?CND6: IN? WAITER,HERE \?ELS16 86 | PUTP WAITER,P?LDESC,25 87 | RFALSE 88 | ?ELS16: EQUAL? SCENERY-OBJ,STATION-GRNZ /FALSE 89 | CALL ESTABLISH-GOAL,WAITER,HERE 90 | RFALSE 91 | ?ELS5: EQUAL? RARG,M-END \?ELS22 92 | CALL1 EXIT-VERB? 93 | ZERO? STACK /FALSE 94 | CALL2 META-LOC,FOOD 95 | EQUAL? HERE,STACK /?THN30 96 | CALL2 META-LOC,CUP-A >?TMP1 97 | CALL2 META-LOC,CUP-B 98 | EQUAL? HERE,?TMP1,STACK \FALSE 99 | ?THN30: CALL ESTABLISH-GOAL,WAITER,HERE 100 | RFALSE 101 | ?ELS22: EQUAL? RARG,M-LOOK \?ELS33 102 | FSET BOOTH-1,TOUCHBIT 103 | FSET BOOTH-2,TOUCHBIT 104 | FSET BOOTH-3,TOUCHBIT 105 | CALL1 BOOTH-DESC 106 | CALL1 MOTION-PREFIX 107 | RTRUE 108 | ?ELS33: EQUAL? RARG,M-BEG \FALSE 109 | CALL1 PERSON-TAKES-GUN? 110 | RSTACK 111 | 112 | 113 | .FUNCT BOOTH-DESC 114 | PRINTI "This is a diner booth on the " 115 | PRINT TRAIN-NAME 116 | PRINTR ". In fact, it looks as if the railway company just converted a first-class coach into a diner by removing the door and adding a table to each compartment." 117 | 118 | 119 | .FUNCT FROY-F 120 | EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE 121 | FSET? FROY,TOUCHBIT /?ELS10 122 | FSET FROY,TOUCHBIT 123 | FSET FROY,NDESCBIT 124 | PRINTR "It's hard to read in this light, but the writing seems to say ""FROY.""" 125 | ?ELS10: PRINTR "Hmmm... The writing seems to have vanished." 126 | 127 | 128 | .FUNCT REST-ROOM-REAR-DINER-DOOR-F 129 | CALL REST-ROOM-DOOR-F,REST-ROOM-REAR-DINER-DOOR,REST-ROOM-REAR-DINER 130 | RSTACK 131 | 132 | 133 | .FUNCT REST-ROOM-FWD-DINER-DOOR-F 134 | CALL REST-ROOM-DOOR-F,REST-ROOM-FWD-DINER-DOOR,REST-ROOM-FWD-DINER 135 | RSTACK 136 | 137 | 138 | .FUNCT MACHINE-F,P 139 | EQUAL? PRSO,MACHINE \?ELS5 140 | EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5 141 | CALL1 YOU-CANT 142 | RSTACK 143 | ?ELS5: EQUAL? PRSA,V?LOOK-THROUGH /?THN10 144 | EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE,V?ANALYZE \?ELS9 145 | ?THN10: PRINTR "The plastic panel is so scratched and grimy that you can barely see the display of cigarette packs inside." 146 | ?ELS9: EQUAL? PRSA,V?MUNG \?ELS15 147 | PRINTR "It seems that someone else beat you to it." 148 | ?ELS15: EQUAL? PRSA,V?SHAKE,V?SLAP,V?ATTACK \?ELS19 149 | FSET? MACHINE,MUNGBIT /?ELS19 150 | FSET? CIGARETTE,TOUCHBIT /?ELS19 151 | LOC CIGARETTE >P 152 | FSET? P,PERSONBIT \?CND22 153 | GETP P,P?LDESC 154 | EQUAL? 5,STACK \?CND22 155 | FCLEAR P,TOUCHBIT 156 | PUTP P,P?LDESC,4 157 | ?CND22: FSET CIGARETTE,TOUCHBIT 158 | FSET CIGARETTE,TAKEBIT 159 | MOVE CIGARETTE,HERE 160 | CALL2 THIS-IS-IT,CIGARETTE 161 | PRINTR "The machine shudders and disgorges a single cigarette onto the floor." 162 | ?ELS19: EQUAL? PRSA,V?PUT-IN /?THN31 163 | EQUAL? PRSA,V?SHAKE,V?SLAP,V?ATTACK \FALSE 164 | ?THN31: EQUAL? PRSA,V?PUT-IN \?CND33 165 | ZERO? P-DOLLAR-FLAG /?ELS38 166 | EQUAL? PRSO,GLOBAL-MONEY,INTNUM \?ELS38 167 | GETP PLAYER,P?SOUTH 168 | LESS? STACK,P-AMOUNT /?ELS38 169 | EQUAL? VARIATION,2,4 \?CND41 170 | FSET MACHINE,MUNGBIT 171 | ?CND41: GETP PLAYER,P?SOUTH 172 | SUB STACK,P-AMOUNT 173 | PUTP PLAYER,P?SOUTH,STACK 174 | JUMP ?CND33 175 | ?ELS38: CALL1 YOU-CANT 176 | RTRUE 177 | ?CND33: RANDOM 100 178 | LESS? 50,STACK /?ELS48 179 | PRINTI """Whirr, buzz" 180 | JUMP ?CND46 181 | ?ELS48: PRINTI """Whizz, burr" 182 | ?CND46: PRINTR ", click!"" Nothing else happens." 183 | 184 | 185 | .FUNCT PICK-ONE-BOOTH,X 186 | RANDOM 3 >X 187 | EQUAL? X,1 \?ELS5 188 | RETURN BOOTH-1 189 | ?ELS5: EQUAL? X,2 \?ELS7 190 | RETURN BOOTH-2 191 | ?ELS7: EQUAL? X,3 \FALSE 192 | RETURN BOOTH-3 193 | 194 | 195 | .FUNCT SUITE-1-DOOR-F 196 | CALL2 COMPARTMENT-DOOR-F,SUITE-1-DOOR 197 | RSTACK 198 | 199 | 200 | .FUNCT SUITE-2-DOOR-F 201 | CALL2 COMPARTMENT-DOOR-F,SUITE-2-DOOR 202 | RSTACK 203 | 204 | 205 | .FUNCT SUITE-3-DOOR-F 206 | CALL2 COMPARTMENT-DOOR-F,SUITE-3-DOOR 207 | RSTACK 208 | 209 | 210 | .FUNCT SUITE-F,RARG=0,N 211 | ZERO? RARG /FALSE 212 | CALL1 V-FOO 213 | RTRUE 214 | 215 | 216 | .FUNCT HALL-FANCY-F,RARG=0,X,TOUCHED=0,VAL=0 217 | FSET? HALL-1-FANCY,TOUCHBIT /?THN4 218 | FSET? HALL-1-FANCY,TOUCHBIT /?THN4 219 | FSET? HALL-1-FANCY,TOUCHBIT \?CND1 220 | ?THN4: SET 'TOUCHED,TRUE-VALUE 221 | ?CND1: EQUAL? RARG,M-LOOK /?THN11 222 | ZERO? RARG \?ELS10 223 | EQUAL? PRSA,V?LOOK \?ELS10 224 | ?THN11: FSET HERE,TOUCHBIT 225 | PRINTI "This is the " 226 | PRINTD HERE 227 | PRINTI " of the corridor." 228 | EQUAL? PRSA,V?LOOK /?THN20 229 | ZERO? TOUCHED \?CND17 230 | ?THN20: PRINTI " The floor and walls are covered with grey carpet, worn thin in spots but intact. A long series of windows, framed by polished wood, runs along the corridor on the right-hand side of the train." 231 | ?CND17: EQUAL? PLAYER-NOT-FACING,P?WEST \?ELS26 232 | CRLF 233 | RTRUE 234 | ?ELS26: GETPT HERE,P?IN 235 | GET STACK,REXIT >X 236 | CALL2 THIS-IS-IT,X 237 | PRINTI " On the left side of the train, behind a locked door, lies the " 238 | PRINTD X 239 | PRINTR "." 240 | ?ELS10: EQUAL? RARG,M-ENTER \FALSE 241 | CALL2 NOISY?,LAST-PLAYER-LOC 242 | ZERO? STACK /?CND33 243 | SET 'VAL,TRUE-VALUE 244 | PRINTI "The relative quiet here is welcome. " 245 | ?CND33: ZERO? TOUCHED \?CND41 246 | SET 'VAL,TRUE-VALUE 247 | PRINTI "The feel of luxury here is unmistakable." 248 | ?CND41: ZERO? VAL /FALSE 249 | CRLF 250 | RFALSE 251 | 252 | .ENDI 253 | -------------------------------------------------------------------------------- /chase.blank: -------------------------------------------------------------------------------- 1 | Chase Scene for CHECKPOINT 2 | -------------------------- 3 | When you get through the checkpoint (at Frbz?), someone will get 4 | suspicious (presumably seeing the camera) and will board the 5 | train. As you are in 'friendly' territory after crossing the border, 6 | the new 'bad spy' will be working behind enemy lines. He will therefore 7 | be more dangerous and ruthless. 8 | 9 | Perhaps some hint of what's coming could be presented in a description 10 | of some officials carrying off your now bloodied contact, this being 11 | printed as you re-board the train. 12 | 13 | The new bad spy (NBS) will attempt to get you alone and thereupon kill 14 | you and take the McGuffin. I would think that sometime soon upon 15 | entering the train, you would catch a glimpse of this person from the 16 | corner of your eye. 17 | 18 | He will follow you into any compartment - 19 | 20 | a) If it is empty, he will reach into his raincoat in a way that 21 | should remind the player of someone reaching for a gun. The player 22 | must do something the very next move or get killed. This could consist 23 | of throwing something at the man, leaving the compartment, etc. 24 | 25 | b) If it isn't empty, he will say something in Frotzer to the other 26 | people there (presumably it is something like "My colleague and I need 27 | to talk privately - would you mind leaving us for a few moments.") 28 | In most (all?) cases, the others will leave, and you now are in 29 | the previous situation. 30 | 31 | If you are just walking around the train, he will follow at a distance 32 | of a few locations (2?). Walking into a restroom is a good way to get 33 | trapped. He will knock on the door. Then the following: 34 | 35 | a) If you don't ever leave the restroom and its getting near the 36 | stop at Gola, he will become desparate and shoot through the door, 37 | wounding you badly. He will also take the camera, so the world is 38 | lost. 39 | 40 | b) If you leave the restroom, he will wedge his foot in the door 41 | and point the barrel of the gun toward you. You have two moves before 42 | you must pull the emergency cord of the train or (something else, so 43 | there are multiple solutions). When you do so, his gun falls from his 44 | hand. Before you can grab it, he runs off. -------------------------------------------------------------------------------- /checkpoint.zil: -------------------------------------------------------------------------------- 1 | "EXTENDED COMPILE/LOAD FILE for CHECKPOINT 2 | Copyright (C) 1985 Infocom, Inc. All rights reserved." 3 | 4 | 5 | 6 | > 7 | ) 8 | (T )> 9 | 10 | 12 | 13 | 14 | )> 15 | 16 | 17 | 18 | "" 19 | 20 | 21 | >> 22 | 23 | ) "AUX" (TIM