forked from historicalsource/checkpoint
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththings.zap
More file actions
949 lines (870 loc) · 22.4 KB
/
things.zap
File metadata and controls
949 lines (870 loc) · 22.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
.FUNCT RANDOM-PSEUDO
PRINTR "You can't do anything useful with that."
.FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=1,OBJ
EQUAL? PRSO,NOT-HERE-OBJECT \?ELS3
EQUAL? PRSI,NOT-HERE-OBJECT \?ELS3
PRINTI "(Those things aren't here!)"
CRLF
RETURN 2
?ELS3: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS11
SET 'TBL,P-PRSO
JUMP ?CND1
?ELS11: SET 'TBL,P-PRSI
SET 'PRSO?,FALSE-VALUE
?CND1: EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT \?CND14
FSET? PRSO,PERSONBIT \?CND14
IN? PRSO,GLOBAL-OBJECTS \?CND14
CALL2 NOT-HERE-PERSON,PRSO
RETURN 2
?CND14: ZERO? PRSO? /?ELS27
CALL1 PRSO-VERB?
ZERO? STACK \?THN24
?ELS27: ZERO? PRSO? \?CND21
CALL1 PRSI-VERB?
ZERO? STACK /?CND21
?THN24: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
ZERO? OBJ /FALSE
EQUAL? OBJ,NOT-HERE-OBJECT /?CND30
RETURN 2
?CND30:
?CND21: PRINTI "(You can't see any"
CALL1 NOT-HERE-PRINT
PRINTI " here!)"
CRLF
RETURN 2
.FUNCT PRSO-VERB?,V=0,W=0
ZERO? V \?CND1
SET 'V,PRSA
?CND1: ZERO? W \?CND4
SET 'W,WINNER
?CND4: CALL2 SPEAKING-VERB?,V
ZERO? STACK \TRUE
EQUAL? V,V?$WHERE,V?ASK-CONTEXT-ABOUT,V?ASK-CONTEXT-FOR /TRUE
EQUAL? V,V?$FCLEAR,V?$FSET,V?$QFSET /TRUE
EQUAL? V,V?BOARD,V?BUY,V?DISEMBARK /TRUE
EQUAL? V,V?EXAMINE,V?FIND,V?FOLLOW /TRUE
EQUAL? V,V?LEAVE,V?PHONE,V?THROUGH /TRUE
EQUAL? V,V?USE,V?WAIT-FOR,V?WALK-TO /TRUE
EQUAL? V,V?WHAT,V?PASS /TRUE
EQUAL? V,V?SHOOT,V?SIT,V?LIE /TRUE
EQUAL? W,PLAYER /FALSE
EQUAL? V,V?BRING,V?TAKE,V?SSHOW /TRUE
RFALSE
.FUNCT PRSI-VERB?,V=0,W=0
ZERO? V \?CND1
SET 'V,PRSA
?CND1: ZERO? W \?CND4
SET 'W,WINNER
?CND4: EQUAL? V,V?$WHERE,V?ASK-ABOUT,V?ASK-FOR /TRUE
EQUAL? V,V?SEARCH-FOR,V?TAKE-TO,V?TELL-ABOUT /TRUE
EQUAL? V,V?SSHOOT /TRUE
EQUAL? W,PLAYER /FALSE
EQUAL? V,V?SBRING,V?SHOW /TRUE
RFALSE
.FUNCT GEN-TEST,OBJ
IN? OBJ,HERE /TRUE
CALL2 CORRIDOR-LOOK,OBJ
ZERO? STACK \TRUE
EQUAL? PRSA,V?FOLLOW /?THN12
CALL1 REMOTE-VERB?
ZERO? STACK /FALSE
?THN12: FSET? OBJ,PERSONBIT \FALSE
FSET? OBJ,SEENBIT /TRUE
RFALSE
.FUNCT FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ,LEN,CNT,LOCAL=0
CALL2 MOBY-FIND,TBL >M-F
ZERO? DEBUG /?CND1
PRINTI "[Found "
PRINTN M-F
PRINTI " objects]"
CRLF
EQUAL? 1,M-F /?CND1
PRINTI "[Namely: "
SET 'CNT,1
GET TBL,P-MATCHLEN >LEN
?PRG12: DLESS? 'LEN,0 \?ELS16
JUMP ?REP13
?ELS16: GET TBL,CNT
PRINTD STACK
PRINTI ", "
?CND14: INC 'CNT
JUMP ?PRG12
?REP13: PRINTI "]"
CRLF
?CND1: GRTR? M-F,1 \?CND23
SET 'CNT,0
?PRG26: IGRTR? 'CNT,M-F \?CND28
JUMP ?REP27
?CND28: GET TBL,CNT >OBJ
CALL2 GEN-TEST,OBJ
ZERO? STACK /?PRG26
IGRTR? 'LOCAL,1 \?ELS36
JUMP ?REP27
?ELS36: SET 'P-MOBY-FOUND,OBJ
JUMP ?PRG26
?REP27: EQUAL? LOCAL,1 \?CND23
SET 'M-F,1
?CND23: EQUAL? 1,M-F \?ELS46
ZERO? DEBUG /?CND47
PRINTI "[Namely: "
PRINTD P-MOBY-FOUND
PRINTI "]"
CRLF
?CND47: CALL1 REMOTE-VERB?
ZERO? STACK \?CND53
EQUAL? PRSA,V?$CALL /?CND53
CALL2 VISIBLE?,P-MOBY-FOUND
ZERO? STACK \?CND53
CALL2 NOT-HERE,P-MOBY-FOUND
RETURN TRUE-VALUE
?CND53: ZERO? PRSO? /?ELS60
SET 'PRSO,P-MOBY-FOUND
RFALSE
?ELS60: SET 'PRSI,P-MOBY-FOUND
RFALSE
?ELS46: LESS? 1,M-F \?ELS65
GET TBL,1 >OBJ
FSET? OBJ,PERSONBIT \?ELS65
SET 'CNT,1
GET TBL,P-MATCHLEN >LEN
?PRG68: GET TBL,CNT >OBJ
CALL2 GEN-TEST,OBJ
ZERO? STACK \?CND70
DEC 'LEN
CALL ELIMINATE,TBL,CNT,LEN
GRTR? CNT,LEN /?CND70
JUMP ?PRG68
?CND70: IGRTR? 'CNT,LEN \?PRG68
PUT TBL,P-MATCHLEN,LEN
ZERO? LEN \?ELS81
RETURN NOT-HERE-OBJECT
?ELS81: EQUAL? LEN,1 /?CND79
CALL WHICH-PRINT,0,LEN,TBL
EQUAL? TBL,P-PRSO \?ELS88
PUSH P-NC1
JUMP ?CND84
?ELS88: PUSH P-NC2
?CND84: SET 'P-ACLAUSE,STACK
SET 'P-AADJ,P-ADJ
SET 'P-ANAM,P-NAM
CALL ORPHAN,FALSE-VALUE,FALSE-VALUE
SET 'P-OFLAG,TRUE-VALUE
RTRUE
?CND79: ZERO? DEBUG /?CND91
PRINTI "[Corridor: "
PRINTD OBJ
PRINTI "]"
CRLF
?CND91: ZERO? PRSO? /?ELS99
SET 'PRSO,OBJ
RFALSE
?ELS99: SET 'PRSI,OBJ
RFALSE
?ELS65: LESS? 1,M-F \?ELS104
GET TBL,1 >OBJ
GETP OBJ,P?GENERIC
CALL STACK,TBL >OBJ
ZERO? OBJ /?ELS104
ZERO? DEBUG /?CND107
PRINTI "[Generic: "
PRINTD OBJ
PRINTI "]"
CRLF
?CND107: EQUAL? OBJ,NOT-HERE-OBJECT /TRUE
ZERO? PRSO? /?ELS117
SET 'PRSO,OBJ
RFALSE
?ELS117: SET 'PRSI,OBJ
RFALSE
?ELS104: ZERO? PRSO? \?ELS126
IN? PRSO,HERE \?ELS126
EQUAL? PRSA,V?TELL-ABOUT,V?ASK-FOR,V?ASK-ABOUT /?THN131
?ELS126: ZERO? PRSO? /?ELS128
CALL1 QCONTEXT-GOOD?
ZERO? STACK /?ELS128
EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /?THN131
?ELS128: EQUAL? WINNER,PLAYER /?ELS122
EQUAL? PRSA,V?SGIVE /?THN131
EQUAL? PRSA,V?GIVE,V?WHAT,V?FIND \?ELS122
?THN131: EQUAL? PRSA,V?ASK-FOR,V?ASK-ABOUT \?ELS135
SET 'LEN,PRSO
JUMP ?CND133
?ELS135: CALL1 QCONTEXT-GOOD?
ZERO? STACK /?ELS137
SET 'LEN,QCONTEXT
JUMP ?CND133
?ELS137: EQUAL? WINNER,PLAYER /?ELS139
SET 'LEN,WINNER
JUMP ?CND133
?ELS139: CALL FIND-FLAG,HERE,PERSONBIT,WINNER >OBJ
ZERO? OBJ /?ELS141
SET 'LEN,OBJ
JUMP ?CND133
?ELS141: SET 'LEN,GAME
?CND133: CALL2 START-SENTENCE,LEN
CALL HE-SHE-IT,LEN,-1,STR?6
PRINTI ", "
CALL1 PRODUCE-GIBBERISH
RTRUE
?ELS122: ZERO? PRSO? \?ELS147
PRINTI "You wouldn't find any"
CALL1 NOT-HERE-PRINT
PRINTR " there."
?ELS147: RETURN NOT-HERE-OBJECT
.FUNCT NOT-HERE-PRINT,?TMP1
ZERO? P-OFLAG \?THN6
ZERO? P-MERGED /?ELS5
?THN6: ZERO? P-XADJ /?CND8
PRINTI " "
PRINTB P-XADJ
?CND8: ZERO? P-XNAM /FALSE
PRINTI " "
PRINTB P-XNAM
RTRUE
?ELS5: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS23
GET P-ITBL,P-NC1 >?TMP1
GET P-ITBL,P-NC1L
CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
RSTACK
?ELS23: GET P-ITBL,P-NC2 >?TMP1
GET P-ITBL,P-NC2L
CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
RSTACK
.FUNCT GIVE-SHOW,P1,P2
EQUAL? PRSA,V?GIVE \?ELS5
EQUAL? PRSI,P1,P2 \FALSE
RETURN PRSO
?ELS5: EQUAL? PRSA,V?SHOW \FALSE
EQUAL? PRSO,P1,P2 \FALSE
RETURN PRSI
.FUNCT TICKET-F,COST,OBJ,TKT
EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS5
PRINTI "All you can make out is the destination: "
GETP PRSO,P?CAPACITY
PRINTD STACK
EQUAL? PRSO,TICKET \?ELS10
ZERO? TICKET-VIA /?ELS10
PRINTI " via "
PRINTD TICKET-VIA
JUMP ?CND8
?ELS10: EQUAL? PRSO,TICKET-OTHER \?CND8
ZERO? TICKET-OTHER-VIA /?CND8
PRINTI " via "
PRINTD TICKET-OTHER-VIA
?CND8: PRINTR "."
?ELS5: CALL GIVE-SHOW,CONDUCTOR,GUARD >TKT
ZERO? TKT /?ELS24
EQUAL? TKT,PRSO \?ELS27
SET 'OBJ,PRSI
JUMP ?CND25
?ELS27: EQUAL? TKT,PRSI \?ELS29
SET 'OBJ,PRSO
JUMP ?CND25
?ELS29: PRINTI "[BUG #1]"
CRLF
?CND25: ZERO? ON-TRAIN \FALSE
CALL2 START-SENTENCE,OBJ
PRINTI " looks at"
CALL2 HIM-HER-IT,TKT
PRINTR " and points to this train track."
?ELS24: EQUAL? PRSA,V?BUY-TICKET,V?BUY \FALSE
EQUAL? PRSO,TICKET-OTHER,TICKET \FALSE
EQUAL? HERE,TICKET-AREA /?ELS47
CALL1 YOU-CANT
RTRUE
?ELS47: EQUAL? PRSA,V?BUY /?THN50
ZERO? PRSI \?CND45
?THN50: SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "(You didn't say where the ticket is for.)"
?CND45: GETP PRSI,P?NORTH >COST
GRTR? COST,0 \?THN57
FSET? PRSI,PERSONBIT \?ELS56
?THN57: PRINTI "You can't buy a ticket to"
CALL2 PRINTT,PRSI
PRINTR "."
?ELS56: GETP PLAYER,P?SOUTH
GRTR? COST,STACK \?CND54
PRINTR "You don't have enough money."
?CND54: GETP PLAYER,P?SOUTH
SUB STACK,COST
PUTP PLAYER,P?SOUTH,STACK
PUTP PRSO,P?CAPACITY,PRSI
CALL ZMEMZ,PRSI,TRAIN-TABLE
ZERO? STACK \?ELS67
EQUAL? SCENERY-OBJ,STATION-KNUT /?ELS67
EQUAL? PRSO,TICKET \?ELS72
SET 'TICKET-VIA,STATION-KNUT
JUMP ?CND65
?ELS72: EQUAL? PRSO,TICKET-OTHER \?CND65
SET 'TICKET-OTHER-VIA,STATION-KNUT
JUMP ?CND65
?ELS67: EQUAL? PRSO,TICKET \?ELS79
SET 'TICKET-VIA,FALSE-VALUE
JUMP ?CND65
?ELS79: EQUAL? PRSO,TICKET-OTHER \?CND65
SET 'TICKET-OTHER-VIA,FALSE-VALUE
?CND65: MOVE PRSO,PLAYER
CALL2 START-SENTENCE,CLERK
PRINTI " takes your money and stamps "
PRINTD PRSO
PRINTR "."
.FUNCT PASSPORT-F
EQUAL? PRSA,V?OPEN,V?READ \FALSE
CALL PERFORM,V?EXAMINE,PRSO,PRSI
RTRUE
.FUNCT CHECK-F,P
EQUAL? PRSA,V?ANALYZE \?ELS5
CALL PERFORM,V?EXAMINE,PRSO,PRSI
RTRUE
?ELS5: EQUAL? PRSA,V?SHOW \?ELS7
EQUAL? PRSO,CLERK,WAITER \?ELS12
FSET? PEN,TOUCHBIT /?ELS12
MOVE PEN,PRSO
FCLEAR PEN,NDESCBIT
FSET PEN,TAKEBIT
CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?8
PRINTI " and"
CALL HE-SHE-IT,PRSO,-1,STR?9
PRINTI " "
CALL2 PRINTA,PEN
PRINTR "."
?ELS12: EQUAL? PRSO,WAITRESS,GUARD,CONDUCTOR \FALSE
CALL HE-SHE-IT,PRSO,TRUE-VALUE
PRINTI " shakes"
CALL HIM-HER-IT,PRSO,FALSE-VALUE,TRUE-VALUE
PRINTI " head and points "
EQUAL? HERE,CAFE \?ELS25
PRINTI "toward"
CALL2 HIM-HER-IT,TICKET-AREA
PRINTR "."
?ELS25: ZERO? ON-TRAIN \?ELS29
PRINTR "into the station."
?ELS29: LESS? CAR-HERE,DINER-CAR \?ELS33
PRINTR "to the rear."
?ELS33: GRTR? CAR-HERE,DINER-CAR \?ELS37
PRINTR "forward."
?ELS37: PRINTR "to a booth."
?ELS7: EQUAL? PRSA,V?USE,V?SIGN \FALSE
SET 'P,WAITER
IN? P,HERE /?THN51
SET 'P,CLERK
IN? P,HERE \FALSE
?THN51: EQUAL? PRSI,PEN /?THN58
FSET? PEN,TOUCHBIT \?THN58
LOC PEN
EQUAL? STACK,PLAYER,POCKET \?ELS57
?THN58: CALL2 START-SENTENCE,P
FSET? PEN,TOUCHBIT /?CND62
PRINTI " lends you a pen and then"
MOVE PEN,PLAYER
FCLEAR PEN,NDESCBIT
FSET PEN,TOUCHBIT
?CND62: MOVE CHECK,P
FCLEAR CHECK,TAKEBIT
GETP PLAYER,P?SOUTH
ADD 20,STACK
PUTP PLAYER,P?SOUTH,STACK
PRINTI " gives you "
PRINTC CURRENCY-SYMBOL
PRINTR "20 in exchange for the check."
?ELS57: CALL2 START-SENTENCE,P
PRINTR " shakes his head and shrugs his shoulders."
.FUNCT CAMERA-F
IN? CAMERA,POCKET \?CND1
EQUAL? PRSA,V?WIND /?THN6
EQUAL? PRSA,V?SHOOT,V?OPEN,V?LOOK-THROUGH /?THN6
EQUAL? PRSA,V?EXAMINE,V?CLOSE,V?AIM \?CND1
?THN6: MOVE CAMERA,PLAYER
?CND1: EQUAL? PRSA,V?AIM \?ELS12
EQUAL? PRSO,CAMERA \FALSE
PRINTR "Okay, then what?"
?ELS12: EQUAL? PRSA,V?EXAMINE \?ELS21
FSET? PRSO,OPENBIT /FALSE
IN? FILM,CAMERA \?ELS28
ZERO? CAMERA-COCKED \?ELS28
PRINTR "It looks as if it needs to be cocked."
?ELS28: PRINTI "Ah! Is this the masterwork of some paranoid genius in ""Q"" Section? A product of years of technological innovation, bordering on magic? Nah, it's just an ordinary "
PRINTD CAMERA
PRINTR " -- no weapons, no motors, nothing to break down. And it's closed."
?ELS21: EQUAL? PRSA,V?LOOK-THROUGH \?ELS38
PRINTR "Everything appears normal."
?ELS38: EQUAL? PRSA,V?OPEN \?ELS42
ZERO? CAMERA-COCKED /FALSE
PUT FILM-TBL,PICTURE-NUMBER,-1
RFALSE
?ELS42: EQUAL? PRSA,V?SHOOT \?ELS50
EQUAL? PRSI,CAMERA \FALSE
CALL PERFORM,V?PHOTO,PRSO,PRSI
RTRUE
?ELS50: EQUAL? PRSA,V?WIND \FALSE
FSET? CAMERA,OPENBIT /?THN61
IN? FILM,CAMERA \?THN61
ZERO? CAMERA-COCKED \?THN61
GRTR? PICTURE-NUMBER,3 \?ELS60
?THN61: PRINTR "You try to cock it, but the lever won't move."
?ELS60: INC 'PICTURE-NUMBER
SET 'CAMERA-COCKED,TRUE-VALUE
PRINTR "Okay."
.FUNCT FILM-F
EQUAL? PRSA,V?WIND \?ELS5
CALL PERFORM,PRSA,CAMERA
RTRUE
?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE \FALSE
PRINTR "It looks like instant-developing film, in a special miniature format."
.FUNCT GLASS-F,X,CNT
EQUAL? PRSA,V?LOOK-THROUGH \?ELS5
PRINTR "Everything appears bigger."
?ELS5: EQUAL? PRSA,V?EXAMINE,V?READ \?ELS9
EQUAL? PRSI,GLASS \?ELS9
EQUAL? PRSO,FILM \?ELS16
PRINTI "With the aid of the magnifying glass you can just make out what's on the film."
ZERO? PICTURE-NUMBER \?CND19
PRINTR " The whole film is unexposed."
?CND19: CRLF
SET 'CNT,1
?PRG24: PRINTI "Picture "
PRINTN CNT
PRINTI " is "
GET FILM-TBL,CNT >X
ZERO? X \?ELS30
PRINTI "unexposed."
JUMP ?CND28
?ELS30: EQUAL? -1,X \?ELS34
PRINTI "fogged."
JUMP ?CND28
?ELS34: PRINTI "a picture of "
EQUAL? X,GLOBAL-OBJECTS \?ELS43
PRINTI "something you can't make out."
JUMP ?CND28
?ELS43: FSET? X,WINDOWBIT \?ELS47
PRINTI "a window."
JUMP ?CND28
?ELS47: ZERO? X /?ELS51
CALL2 PRINTA,X
PRINTI "."
JUMP ?CND28
?ELS51: PRINTI "nothing."
?CND28: CRLF
IGRTR? 'CNT,4 \?PRG24
RTRUE
?ELS16: EQUAL? PRSO,GLASS \?ELS63
CALL1 HAR-HAR
RSTACK
?ELS63: EQUAL? PRSO,PLAYER,MIRROR \?ELS65
PRINTR "You see yourself, only bigger and uglier than ever. Ugh!"
?ELS65: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?10
PRINTR " the same, only much larger."
?ELS9: EQUAL? PRSA,V?EXAMINE,V?READ \FALSE
EQUAL? PRSO,GLASS \FALSE
ZERO? PRSI /FALSE
CALL PERFORM,V?READ,PRSI,PRSO
RTRUE
.FUNCT MCGUFFIN-F
EQUAL? PRSA,V?MUNG \?ELS5
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "(How do you want to do that?)"
?ELS5: EQUAL? PRSA,V?CHANGE \FALSE
EQUAL? PRSI,PEN \FALSE
FSET MCGUFFIN,LOCKED
PRINTI "With a deft hand, you alter"
CALL2 HIM-HER-IT,MCGUFFIN
PRINTR " in a subtle way so that it conveys serious disinformation."
.FUNCT SPY-LIST-F,X
EQUAL? PRSA,V?EAT \?ELS5
MOVE PRSO,LIMBO-FWD
PRINTR "Gulp!"
?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS9
ZERO? LIST-RUBBED /?ELS14
PRINTI "Examining the "
PRINTD SPY-LIST
CALL1 PAD-READ
RSTACK
?ELS14: EQUAL? P-ADVERB,W?CAREFULLY \?ELS19
PRINTI "There are some shiny lines on the "
PRINTD SPY-LIST
PRINTR ", maybe invisible ink."
?ELS19: PRINTI "There doesn't seem to be anything written on the "
PRINTD SPY-LIST
PRINTR "."
?ELS9: EQUAL? PRSA,V?HEAT \FALSE
ZERO? PRSI \?ELS32
PRINTR "It heats up like ordinary newsprint."
?ELS32: EQUAL? PRSI,LIGHTER \?ELS36
SET 'LIST-RUBBED,TRUE-VALUE
PRINTI "Heating"
CALL2 HIM-HER-IT,SPY-LIST
PRINTI " with"
CALL2 HIM-HER-IT,PRSI
CALL1 PAD-READ
RSTACK
?ELS36: PRINTI "Nothing "
ZERO? LIST-RUBBED /?CND43
PRINTI "new "
?CND43: PRINTR "appears."
.FUNCT PAD-READ,CNT,OBJ
FSET? SPY-LIST,MUNGBIT \?CND1
PRINTR " reveals nothing intelligible."
?CND1: PRINTI " shows two things written on it"
EQUAL? VARIATION,3,4 \?CND8
PRINTI ", which you easily translate into English"
?CND8: PRINTI ":
"
SET 'CNT,6
?PRG15: GET PASS-TABLE,CNT >OBJ
EQUAL? OBJ,PASSWORD,PASSOBJECT \?CND17
PRINTI " "
PRINTD OBJ
CRLF
?CND17: DLESS? 'CNT,1 \?PRG15
RTRUE
.FUNCT BRIEFCASE-F,RARG=0
EQUAL? RARG,M-OBJDESC \?ELS5
PRINTI "A black briefcase with a chrome latch is here, "
FSET? BRIEFCASE,SURFACEBIT \?ELS12
PRINTR "closed."
?ELS12: PRINTR "open."
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS20
PRINTI "It's an expensive-looking case, built as sturdy as a tank."
EQUAL? P-ADVERB,W?CAREFULLY \?CND23
CALL1 CASE-CAREFUL
?CND23: CRLF
RTRUE
?ELS20: CALL1 REMOTE-VERB?
ZERO? STACK \FALSE
EQUAL? PRSA,V?MOVE,V?TAKE \?ELS29
EQUAL? PRSO,BRIEFCASE \?ELS29
LOC BRIEFCASE
FSET? STACK,PERSONBIT /FALSE
?ELS29: LOC BRIEFCASE
FSET? STACK,PERSONBIT \?ELS33
CALL2 NOT-HOLDING?,BRIEFCASE
ZERO? STACK \TRUE
?ELS33: EQUAL? PRSA,V?MOVE,V?TAKE \?ELS37
EQUAL? PRSO,BRIEFCASE \?ELS37
FSET? BRIEFCASE,OPENBIT \?ELS44
ZERO? PLAYER-SEATED \?ELS44
CALL TOO-BAD-BUT,BRIEFCASE,STR?12
RTRUE
?ELS44: FSET? BRIEFCASE,SURFACEBIT \FALSE
CALL2 OBJS-SLIDE-OFF,BRIEFCASE
RFALSE
?ELS37: EQUAL? PRSA,V?OPEN \?ELS50
FSET? BRIEFCASE-LATCH,OPENBIT /?ELS55
CALL2 THIS-IS-IT,BRIEFCASE-LATCH
PRINTR "The latch is closed."
?ELS55: IN? BRIEFCASE,PLAYER \?ELS59
ZERO? PLAYER-SEATED \?ELS59
CALL2 TBL-FIRST?,BRIEFCASE-TBL
ZERO? STACK /?ELS59
PRINTR "You open it a crack before you realize that everything inside would fall out. You quickly close it again."
?ELS59: ZERO? LATCH-TURNED \?ELS65
FSET? BRIEFCASE,SURFACEBIT \?ELS65
CALL1 TELL-GAS
RSTACK
?ELS65: FSET BRIEFCASE,OPENBIT
CALL TBL-TO-INSIDE,BRIEFCASE,BRIEFCASE-TBL
RTRUE
?ELS50: EQUAL? PRSA,V?CLOSE \?ELS71
FCLEAR BRIEFCASE,OPENBIT
CALL INSIDE-OBJ-TO,BRIEFCASE-TBL,BRIEFCASE
RSTACK
?ELS71: EQUAL? PRSA,V?LOOK-INSIDE \?ELS73
FSET? BRIEFCASE,OPENBIT /FALSE
CALL TOO-BAD-BUT,BRIEFCASE,STR?13
RTRUE
?ELS73: EQUAL? PRSA,V?SHAKE \FALSE
GET BRIEFCASE-TBL,1
ZERO? STACK /FALSE
PRINTR "Hmm. Something's in there."
.FUNCT TELL-GAS,YOU?=1
ZERO? YOU? /?ELS3
PRINTI "As the lid is lifted, you hear an explosion from inside the case. P"
JUMP ?CND1
?ELS3: PRINTI "Too late, you notice that the compartment is filled with p"
?CND1: PRINTI "ale yellow gas, practically invisible"
ZERO? YOU? /?CND13
PRINTI ", hisses out of tiny vents set into the briefcase's spine"
?CND13: PRINTI ". Holding your breath will not help: this cunning creation of the chemical warfare chaps is absorbed through the skin. Well, ""only the good die young."""
CRLF
CRLF
CALL1 FINISH
RSTACK
.FUNCT LATCH-F
CALL2 VISIBLE?,BRIEFCASE
ZERO? STACK \?ELS5
CALL2 NOT-HERE,BRIEFCASE-LATCH
RSTACK
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7
PRINTI "The latch on the briefcase is operated by sliding a short metal bar that points "
ZERO? LATCH-TURNED \?ELS12
PRINTI "away from "
JUMP ?CND10
?ELS12: PRINTI "toward "
?CND10: PRINTI "the handle of the briefcase. The latch is "
FSET? BRIEFCASE-LATCH,OPENBIT /?ELS23
PRINTI "closed."
JUMP ?CND21
?ELS23: PRINTI "open."
?CND21: EQUAL? P-ADVERB,W?CAREFULLY \?CND30
CALL1 CASE-CAREFUL
?CND30: CRLF
RTRUE
?ELS7: CALL1 REMOTE-VERB?
ZERO? STACK \FALSE
LOC BRIEFCASE
FSET? STACK,PERSONBIT \?ELS36
CALL2 NOT-HOLDING?,BRIEFCASE
ZERO? STACK \TRUE
?ELS36: EQUAL? PRSA,V?TAKE,V?REMOVE \?ELS40
CALL1 YOU-CANT
RSTACK
?ELS40: EQUAL? PRSA,V?AIM,V?TURN \?ELS42
EQUAL? PRSO,BRIEFCASE-LATCH \?ELS42
ZERO? LATCH-TURNED \?PRD45
PUSH 1
JUMP ?PRD46
?PRD45: PUSH 0
?PRD46: SET 'LATCH-TURNED,STACK
PRINTR "A mechanical click comes from within the briefcase."
?ELS42: EQUAL? PRSA,V?CLOSE \?ELS50
FSET? BRIEFCASE,OPENBIT \?ELS55
CALL TOO-BAD-BUT,BRIEFCASE,STR?12
RTRUE
?ELS55: FSET? BRIEFCASE-LATCH,OPENBIT /?ELS57
CALL ALREADY,BRIEFCASE-LATCH,STR?13
RTRUE
?ELS57: CALL OKAY,BRIEFCASE-LATCH,STR?13
RSTACK
?ELS50: EQUAL? PRSA,V?RUB,V?SLIDE,V?MOVE /?THN64
EQUAL? PRSA,V?RAISE,V?OPEN,V?PUSH \FALSE
?THN64: EQUAL? PRSO,BRIEFCASE-LATCH \FALSE
FSET? BRIEFCASE-LATCH,OPENBIT /?ELS70
FSET BRIEFCASE-LATCH,OPENBIT
PRINTI "The metal latch snaps open."
ZERO? LATCH-TURNED \?CND73
PRINTI " At the same time, a loud thump comes from within the briefcase."
?CND73: CRLF
RTRUE
?ELS70: CALL ALREADY,PRSO,STR?12
RSTACK
.FUNCT CASE-CAREFUL
PRINTI " A careful examination shows that the latch can be turned as well as opened. And there are tiny vents set into the briefcase's spine."
RTRUE
.FUNCT BRIEFCASE-HANDLE-F
CALL1 REMOTE-VERB?
ZERO? STACK \FALSE
CALL2 VISIBLE?,BRIEFCASE
ZERO? STACK \?ELS7
CALL2 NOT-HERE,BRIEFCASE-HANDLE
RSTACK
?ELS7: EQUAL? PRSA,V?EXAMINE \FALSE
CALL1 NOTHING-SPECIAL
RSTACK
.FUNCT PLAQUE-F
EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
PRINTI "If you could read the language, it would say:
""This is the CHECKPOINT. All passengers who are crossing the frontier must pass through customs inspection before boarding the train.
CHECKPOINT is also a trademark and product of Infocom, Inc., "
GET CREDITS,0
SUB STACK,1
MOD VARIATION,STACK
ADD 1,STACK
CALL PICK-ONE-NEW,CREDITS,STACK
PRINT STACK
PRINTR "."""
.FUNCT TBL-FIRST?,TBL,OFFS=0,THING,MAX
GET TBL,0 >MAX
?PRG1: IGRTR? 'OFFS,MAX /FALSE
GET TBL,OFFS >THING
EQUAL? 0,THING /?PRG1
RETURN THING
.FUNCT TBL-TO-INSIDE,OBJ,TBL,STR=0,THING,OFFS=0,MAX
FSET? OBJ,SURFACEBIT /?CND1
CALL ALREADY,OBJ,STR?12
RTRUE
?CND1: FIRST? OBJ \?CND4
CALL2 OBJS-SLIDE-OFF,OBJ
?CND4: GET TBL,0 >MAX
ZERO? DEBUG \?THN10
ZERO? STR \?ELS9
?THN10: ZERO? STR /?CND7
PRINTC 91
PRINTI "Opened."
CRLF
JUMP ?CND7
?ELS9: EQUAL? STR,1 /?CND7
PRINT STR
CRLF
?CND7: FCLEAR OBJ,SURFACEBIT
?PRG22: IGRTR? 'OFFS,MAX \?ELS26
JUMP ?REP23
?ELS26: GET TBL,OFFS >THING
ZERO? THING /?PRG22
IN? OBJ,PLAYER \?CND29
FSET THING,TAKEBIT
?CND29: MOVE THING,OBJ
PUT TBL,OFFS,0
JUMP ?PRG22
?REP23: EQUAL? STR,1 /TRUE
FIRST? OBJ \TRUE
PRINTI "Opening"
CALL2 HIM-HER-IT,OBJ
PRINTI " reveals "
CALL2 PRINT-CONTENTS,OBJ
PRINTR "."
.FUNCT INSIDE-OBJ-TO,TBL,OBJ,STR=0,OFFS=0,F,N
FSET? OBJ,SURFACEBIT \?CND1
CALL ALREADY,OBJ,STR?13
RTRUE
?CND1: FSET OBJ,SURFACEBIT
ZERO? DEBUG \?THN7
ZERO? STR \?ELS6
?THN7: ZERO? STR /?CND9
PRINTC 91
?CND9: PRINTI "Closed."
CRLF
JUMP ?CND4
?ELS6: EQUAL? STR,1 /?CND4
PRINT STR
CRLF
?CND4: FIRST? OBJ >F \TRUE
?PRG22: ZERO? F /TRUE
SET 'N,F
NEXT? N >F /?KLU37
?KLU37: MOVE N,LIMBO-FWD
?PRG32: INC 'OFFS
GET TBL,OFFS
ZERO? STACK \?PRG32
PUT TBL,OFFS,N
JUMP ?PRG22
.FUNCT OBJS-SLIDE-OFF,OBJ,SLIDE=0,THERE,F,N
LOC OBJ >THERE
EQUAL? THERE,WINNER \?CND1
SET 'THERE,HERE
?CND1: FIRST? OBJ >F /?KLU22
?KLU22:
?PRG4: ZERO? F \?ELS8
JUMP ?REP5
?ELS8: SET 'N,F
NEXT? N >F /?KLU23
?KLU23: MOVE N,THERE
SET 'SLIDE,TRUE-VALUE
JUMP ?PRG4
?REP5: FIRST? OBJ >F /?KLU24
?KLU24: ZERO? SLIDE /FALSE
PRINTI "Everything on"
CALL2 HIM-HER-IT,OBJ
PRINTI " falls off."
CRLF
CRLF
RTRUE
.FUNCT NEWSPAPER-F
EQUAL? PRSA,V?OPEN \FALSE
PRINTR "You flip through the pages but find nothing readable."
.FUNCT CIGARETTE-F
EQUAL? PRSA,V?BUY \?ELS5
IN? MACHINE,HERE \FALSE
GETP PLAYER,P?SOUTH
GRTR? STACK,0 /?CND11
PRINTI "You dig in "
PRINTD POCKET
PRINTR " but find no cash."
?CND11: SET 'P-DOLLAR-FLAG,TRUE-VALUE
SET 'P-AMOUNT,1
CALL PERFORM,V?PUT-IN,INTNUM,MACHINE
RTRUE
?ELS5: EQUAL? PRSA,V?LAMP-ON,V?SMOKE \FALSE
PRINTR "You think it over and decide that this mission is dangerous enough already."
.FUNCT LIGHTER-F
EQUAL? PRSA,V?HOLD-UNDER \?ELS5
EQUAL? PRSO,LIGHTER \FALSE
CALL PERFORM,V?HEAT,PRSI,PRSO
RTRUE
?ELS5: EQUAL? PRSA,V?LAMP-OFF \?ELS12
PRINTR "It stays off by itself!"
?ELS12: EQUAL? PRSA,V?LAMP-ON \FALSE
PRINTR "The lighter spurts to life for a minute until you turn it off again."
.FUNCT FLOWER-F
FSET? FLOWER-1,NDESCBIT \?ELS5
CALL2 SEARCHING-FOR?,FLOWER-1
RSTACK
?ELS5: FSET? FLOWER-2,NDESCBIT \FALSE
CALL2 SEARCHING-FOR?,FLOWER-2
RSTACK
.FUNCT SEARCHING-FOR?,OBJ
EQUAL? PRSA,V?EXAMINE /?THN6
CALL2 SNEAKY-TAKE?,OBJ
ZERO? STACK /?ELS5
?THN6: PRINTI "You haven't found "
CALL2 PRINTA,OBJ
PRINTR " yet!"
?ELS5: IN? OBJ,HERE \FALSE
EQUAL? PRSA,V?FIND /?THN14
EQUAL? PRSA,V?SEARCH-FOR \FALSE
EQUAL? PRSI,OBJ \FALSE
?THN14: FCLEAR OBJ,NDESCBIT
FSET OBJ,TAKEBIT
MOVE OBJ,WINNER
PRINTI "You find "
CALL2 PRINTA,OBJ
PRINTR " in short order and take it."
.FUNCT BLOOD-SPOT-DESC,X
IN? BLOOD-SPOT,COMPARTMENT-START \FALSE
FSET? BLOOD-SPOT,TOUCHBIT \?ELS7
PRINTR "A spot of blood is still on the floor."
?ELS7: FSET BLOOD-SPOT,TOUCHBIT
PRINTR "Your sharp eyes notice a spot of blood on the floor."
.FUNCT FIND-SEARCH
EQUAL? PRSA,V?FIND \?ELS5
RETURN PRSO
?ELS5: EQUAL? PRSA,V?SEARCH-FOR \FALSE
RETURN PRSI
.FUNCT BLOOD-SPOT-F,OBJ
CALL1 FIND-SEARCH >OBJ
ZERO? OBJ /?ELS5
LOC OBJ
EQUAL? HERE,STACK \FALSE
FSET? OBJ,NDESCBIT \FALSE
FCLEAR OBJ,NDESCBIT
CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?21
PRINTR " it in short order."
?ELS5: EQUAL? PRSA,V?TAKE \?ELS16
PRINTI "You can't pick"
CALL2 HIM-HER-IT,PRSO
PRINTR " up with your bare hands!"
?ELS16: EQUAL? PRSA,V?BRUSH,V?TAKE-WITH \FALSE
EQUAL? PRSI,SPY-LIST /?THN26
ZERO? PRSI \FALSE
IN? SPY-LIST,WINNER \FALSE
?THN26: MOVE PRSO,SPY-LIST
FCLEAR PRSO,NDESCBIT
PRINTR "Okay."
.FUNCT KNIFE-F
CALL KNIFE-NAPKIN-F,KNIFE,COOK
RSTACK
.FUNCT KNIFE-NAPKIN-F,OBJ,PER
FSET? OBJ,NDESCBIT \FALSE
IN? PER,HERE \?ELS10
CALL2 BRIBED?,PER
ZERO? STACK \?ELS10
FCLEAR PER,TOUCHBIT
PUTP PER,P?LDESC,1
CALL2 START-SENTENCE,PER
PRINTI " says, "
CALL1 PRODUCE-GIBBERISH
RSTACK
?ELS10: CALL2 SEARCHING-FOR?,OBJ
RSTACK
.FUNCT NAPKIN-F
CALL KNIFE-NAPKIN-F,NAPKIN,WAITER
RSTACK
.FUNCT SNEAKY-TAKE?,OBJ
EQUAL? PRSO,OBJ \?ELS5
EQUAL? PRSA,V?TAKE /TRUE
GETB P-SYNTAX,P-SLOC1
BTST STACK,STAKE /TRUE
?ELS5: EQUAL? PRSI,OBJ \FALSE
GETB P-SYNTAX,P-SLOC2
BTST STACK,STAKE /TRUE
RFALSE
.ENDI