-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathpeople.zap
1537 lines (1353 loc) · 32.5 KB
/
people.zap
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
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
.FUNCT PREVENTS-YOU?,L=0,DIR=0,PER=0
ZERO? L \?CND1
SET 'L,HERE
?CND1: ZERO? DIR \?CND4
CALL1 EXIT-VERB? >DIR
?CND4: ZERO? PER \?CND7
SET 'PER,PLAYER
?CND7: ZERO? ON-TRAIN /FALSE
ZERO? TICKETS-PUNCHED? /?ELS16
ZERO? CUSTOMS-SWEEP /FALSE
?ELS16: IN? CONDUCTOR,L \FALSE
EQUAL? DIR,P?NORTH \FALSE
FSET? PER,LOCKED /TRUE
RFALSE
.FUNCT PLAYER-F,ARG=0,L=0
EQUAL? ARG,M-WINNER /?CND1
EQUAL? PRSO,PLAYER \FALSE
EQUAL? PRSA,V?GOODBYE,V?HELLO \?ELS9
CALL1 HAR-HAR
JUMP ?CND4
?ELS9: EQUAL? PRSA,V?SEARCH,V?EXAMINE \?CND4
CALL2 PERFORM,V?INVENTORY
RTRUE
?CND4:
?CND1: ZERO? KILLED-PERSON /?CND14
IN? KILLED-PERSON,PLAYER \?CND14
CALL2 ANYONE-VISIBLE?,KILLED-PERSON >L
ZERO? L /?CND14
CALL ARREST-PLAYER,STR?28,L,TRUE-VALUE,KILLED-PERSON
RETURN 2
?CND14: CALL1 SPEAKING-VERB?
ZERO? STACK /?ELS25
CALL2 NOISY?,HERE
ZERO? STACK /?ELS25
SET 'P-CONT,FALSE-VALUE
PRINTR "You can't make yourself heard above the noise."
?ELS25: CALL1 PREVENTS-YOU?
ZERO? STACK /?ELS31
CALL2 START-SENTENCE,CONDUCTOR
PRINTI " prevents you from passing him."
CRLF
RETURN 2
?ELS31: ZERO? PLAYER-SEATED \?ELS37
ZERO? PLAYER-HIDING /FALSE
?ELS37: EQUAL? PRSO,FALSE-VALUE,ROOMS \?ELS41
EQUAL? PRSA,V?STAND /?THN47
CALL1 EXIT-VERB?
ZERO? STACK /FALSE
?THN47: IN? BRIEFCASE,PLAYER \FALSE
FSET? BRIEFCASE,OPENBIT \FALSE
FCLEAR BRIEFCASE,OPENBIT
CALL INSIDE-OBJ-TO,BRIEFCASE-TBL,BRIEFCASE,1
PRINTI "(You close the briefcase first.)"
CRLF
RFALSE
?ELS41: ZERO? P-WALK-DIR /?ELS52
CALL1 TOO-BAD-SIT-HIDE
RSTACK
?ELS52: EQUAL? PRSA,V?FIND /?THN56
EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH,V?WALK-TO \?ELS55
?THN56: CALL1 TOO-BAD-SIT-HIDE
RSTACK
?ELS55: CALL1 SPEAKING-VERB?
ZERO? STACK \FALSE
CALL1 GAME-VERB?
ZERO? STACK \FALSE
CALL1 REMOTE-VERB?
ZERO? STACK \FALSE
EQUAL? PRSA,V?SMILE,V?SHOOT /FALSE
EQUAL? PRSA,V?NOD,V?LOOK-ON,V?AIM /FALSE
CALL2 HELD?,PRSO
ZERO? STACK \FALSE
CALL2 TABLE?,HERE
CALL HELD?,PRSO,STACK
ZERO? STACK \FALSE
CALL HELD?,PRSO,GLOBAL-OBJECTS
ZERO? STACK \FALSE
EQUAL? PRSA,V?EXAMINE \?ELS75
EQUAL? P-ADVERB,W?CAREFULLY \FALSE
?ELS75: CALL HELD?,PRSO,PLAYER-SEATED
ZERO? STACK \?ELS79
CALL1 TOO-BAD-SIT-HIDE
RSTACK
?ELS79: ZERO? PRSI /FALSE
CALL2 HELD?,PRSI
ZERO? STACK \FALSE
CALL HELD?,PRSI,GLOBAL-OBJECTS
ZERO? STACK \FALSE
CALL HELD?,PRSI,PLAYER-SEATED
ZERO? STACK \FALSE
CALL1 TOO-BAD-SIT-HIDE
RSTACK
.FUNCT TOO-BAD-SIT-HIDE
ZERO? PLAYER-SEATED /?ELS5
EQUAL? PRSA,V?LIE \?ELS11
GRTR? 0,PLAYER-SEATED \?ELS11
CALL ALREADY,WINNER,STR?29
RSTACK
?ELS11: EQUAL? PRSA,V?SIT \?ELS15
LESS? 0,PLAYER-SEATED \?ELS15
CALL ALREADY,WINNER,STR?30
RSTACK
?ELS15: SET 'PLAYER-SEATED,FALSE-VALUE
PRINTI "(You "
IN? BRIEFCASE,PLAYER \?CND22
FSET? BRIEFCASE,OPENBIT \?CND22
PRINTI "close the briefcase and "
FCLEAR BRIEFCASE,OPENBIT
CALL INSIDE-OBJ-TO,BRIEFCASE-TBL,BRIEFCASE,1
?CND22: PRINTI "stand up first.)"
CRLF
RFALSE
?ELS5: ZERO? PLAYER-HIDING /FALSE
SET 'CLOCK-WAIT,TRUE-VALUE
EQUAL? PRSA,V?HIDE-BEHIND \?ELS38
ZERO? PRSI \?ELS38
CALL ALREADY,WINNER,STR?31
RSTACK
?ELS38: PRINTR "(You can't do that while you're hiding.)"
.FUNCT CONDUCTOR-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,CONDUCTOR
RSTACK
.FUNCT CONDUCTOR-GIVE-SHOW
EQUAL? PRSA,V?GIVE \?ELS5
RETURN PRSO
?ELS5: EQUAL? PRSA,V?SHOW \FALSE
RETURN PRSI
.FUNCT CONDUCTOR-F,ARG=0,OBJ
EQUAL? ARG,M-WINNER \?ELS5
CALL PERSON-F,CONDUCTOR,ARG
RSTACK
?ELS5: CALL2 PASS-OBJECT?,MCGUFFIN
ZERO? STACK /?ELS7
CALL2 SHOW-MCGUFFIN,CONDUCTOR
RSTACK
?ELS7: CALL1 CONDUCTOR-GIVE-SHOW >OBJ
ZERO? OBJ /?ELS9
EQUAL? OBJ,PASSPORT,BRIEFCASE /?THN12
EQUAL? OBJ,TICKET,TICKET-OTHER \?ELS9
?THN12: EQUAL? OBJ,PASSPORT,BRIEFCASE \?ELS18
ZERO? CUSTOMS-SWEEP /FALSE
CALL HE-SHE-IT,CONDUCTOR,TRUE-VALUE
PRINTI " nods and points toward"
ZERO? ON-TRAIN /?ELS29
CALL2 HIM-HER-IT,PLATFORM-GLOBAL
JUMP ?CND27
?ELS29: CALL2 HIM-HER-IT,CUSTOMS-AGENT
?CND27: PRINTR "."
?ELS18: ZERO? ON-TRAIN /FALSE
CALL2 START-SENTENCE,CONDUCTOR
EQUAL? OBJ,TICKET \?ELS50
CALL ZMEMZ,TICKET-VIA,TRAIN-TABLE
ZERO? STACK \?ELS50
GETP TICKET,P?CAPACITY
CALL ZMEMZ,STACK,TRAIN-TABLE
ZERO? STACK /?THN47
?ELS50: EQUAL? OBJ,TICKET-OTHER \?ELS46
CALL ZMEMZ,TICKET-OTHER-VIA,TRAIN-TABLE
ZERO? STACK \?ELS46
GETP TICKET-OTHER,P?CAPACITY
CALL ZMEMZ,STACK,TRAIN-TABLE
ZERO? STACK \?ELS46
?THN47: CALL2 ARREST-PLAYER,STR?33
PRINTI " looks at"
CALL2 HIM-HER-IT,OBJ
PRINTR " and rushes away."
?ELS46: FSET? PLAYER,LOCKED /?ELS56
PRINTI " looks at"
JUMP ?CND44
?ELS56: FCLEAR PLAYER,LOCKED
SET 'TICKET-COUNT,0
PRINTI " punches"
?CND44: MOVE OBJ,PLAYER
CALL2 PRINTT,OBJ
PRINTR " and then gives it back to you."
?ELS9: CALL PERSON-F,CONDUCTOR,ARG
RSTACK
.FUNCT CUSTOMS-AGENT-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,CUSTOMS-AGENT
RSTACK
.FUNCT CUSTOMS-AGENT-F,ARG=0,OBJ
EQUAL? ARG,M-WINNER \?ELS5
CALL PERSON-F,CUSTOMS-AGENT,ARG
RSTACK
?ELS5: EQUAL? PRSA,V?PASS \?ELS7
IN? CUSTOMS-AGENT,HERE \FALSE
CALL2 DO-WALK,P?NORTH
RTRUE
?ELS7: EQUAL? PRSA,V?SHOW \?ELS14
EQUAL? PRSI,GLOBAL-MONEY \?ELS14
CALL HE-SHE-IT,CUSTOMS-AGENT,TRUE-VALUE,STR?34
PRINTR " approvingly."
?ELS14: CALL1 CONDUCTOR-GIVE-SHOW >OBJ
ZERO? OBJ /?ELS20
EQUAL? OBJ,PASSPORT,BRIEFCASE,MCGUFFIN \?ELS20
EQUAL? OBJ,PASSPORT \?ELS27
CALL2 START-SENTENCE,CUSTOMS-AGENT
FSET? PASSPORT,LOCKED \?CND28
FCLEAR PASSPORT,LOCKED
PRINTI " looks at you and "
PRINTD PASSPORT
PRINTI ", barely suppresses a smirk, stamps it, and then"
?CND28: MOVE PASSPORT,PLAYER
PRINTI " gives it back to you."
CRLF
LOC BRIEFCASE
EQUAL? STACK,HERE,PLAYER \TRUE
ZERO? BRIEFCASE-PASSED \TRUE
PRINTI "Then"
CALL2 HE-SHE-IT,CUSTOMS-AGENT
PRINTI " notices the "
PRINTD BRIEFCASE
PRINTR ", points to it and says, ""Fleegle quidpro mushnets?"""
?ELS27: EQUAL? OBJ,BRIEFCASE \?ELS43
CALL HE-SHE-IT,CUSTOMS-AGENT,TRUE-VALUE
ZERO? BRIEFCASE-PASSED /?ELS48
PRINTR " gives it back to you."
?ELS48: FSET? BRIEFCASE,OPENBIT /?ELS53
PRINTR " refuses it, making an ""open it"" gesture."
?ELS53: IN? MCGUFFIN,BRIEFCASE \?ELS57
CALL1 CONFISCATE-MCGUFFIN
RTRUE
?ELS57: SET 'BRIEFCASE-PASSED,TRUE-VALUE
PRINTR " looks in it and then gives it back to you."
?ELS43: EQUAL? OBJ,MCGUFFIN \FALSE
CALL HE-SHE-IT,CUSTOMS-AGENT,TRUE-VALUE
CALL1 CONFISCATE-MCGUFFIN
RSTACK
?ELS20: CALL PERSON-F,CUSTOMS-AGENT,ARG
RSTACK
.FUNCT CONFISCATE-MCGUFFIN
PRINTI " examines"
CALL2 HIM-HER-IT,MCGUFFIN
PRINTI " for a moment, realizes its import, confiscates it, and arrests you!"
CRLF
CALL1 FINISH
RSTACK
.FUNCT WAITER-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,WAITER
RSTACK
.FUNCT WAITER-F,ARG=0
EQUAL? HERE,PANTRY \?ELS5
CALL2 INVASION?,WAITER
ZERO? STACK \TRUE
?ELS5: EQUAL? ARG,M-WINNER \?ELS9
CALL1 BRING-GIVE
ZERO? STACK \TRUE
CALL PERSON-F,WAITER,ARG
RSTACK
?ELS9: EQUAL? PRSA,V?GOODBYE,V?THANKS \?ELS18
CALL ESTABLISH-GOAL-TRAIN,WAITER,PANTRY,DINER-CAR
RFALSE
?ELS18: CALL PERSON-F,WAITER,ARG
RSTACK
.FUNCT BRING-GIVE
EQUAL? PRSI,PLAYER \?ELS5
EQUAL? PRSA,V?BRING,V?GIVE \?ELS5
SET 'WINNER,PLAYER
CALL PERFORM,V?BUY,PRSO
RTRUE
?ELS5: EQUAL? PRSO,PLAYER \FALSE
EQUAL? PRSA,V?SBRING,V?SGIVE \FALSE
SET 'WINNER,PLAYER
CALL PERFORM,V?BUY,PRSI
RTRUE
.FUNCT COOK-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,COOK
RSTACK
.FUNCT COOK-F,ARG=0
EQUAL? HERE,GALLEY \?ELS5
CALL2 INVASION?,COOK
ZERO? STACK \TRUE
?ELS5: EQUAL? ARG,M-WINNER \?ELS9
CALL PERSON-F,COOK,ARG
RSTACK
?ELS9: EQUAL? PRSA,V?EXAMINE \?ELS11
PRINTI "He's dressed all in white, from a "
IN? HAT-COOK,COOK \?ELS18
PUSH STR?36
JUMP ?CND14
?ELS18: PUSH STR?37
?CND14: PRINT STACK
PRINTI " to his well-worn sneakers. You can tell from the size of his gut that he likes his own cooking."
CRLF
CALL2 CARRY-CHECK,COOK
RTRUE
?ELS11: CALL PERSON-F,COOK,ARG
RSTACK
.FUNCT HAT-COOK-F
EQUAL? PRSA,V?TAKE,V?ASK-FOR \FALSE
IN? HAT-COOK,COOK \FALSE
CALL2 BRIBED?,COOK
ZERO? STACK \?ELS12
CALL2 START-SENTENCE,COOK
PRINTR " won't give you his hat yet."
?ELS12: FSET HAT-COOK,TAKEBIT
RFALSE
.FUNCT BRIBED?,PER,N
EQUAL? PER,BAD-SPY /FALSE
GETP PER,P?NORTH >N
ZERO? N /FALSE
GETP PER,P?SOUTH
GRTR? N,STACK \TRUE
RFALSE
.FUNCT CLERK-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,CLERK
RSTACK
.FUNCT CLERK-F,ARG=0,N
EQUAL? ARG,M-WINNER \?ELS5
CALL PERSON-F,CLERK,ARG
RSTACK
?ELS5: EQUAL? PRSA,V?ASK-ABOUT \?ELS7
IN? CLERK,TICKET-AREA \?ELS7
CALL ZMEMQ,PRSI,STATIONS
ZERO? STACK /?ELS7
GETP PRSI,P?NORTH >N
ZERO? N /?ELS7
PRINTI """Lizlong frmzi "
PRINTC CURRENCY-SYMBOL
PRINTN N
PRINTR "."""
?ELS7: CALL PERSON-F,CLERK,ARG
RSTACK
.FUNCT BOND-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,BOND
RSTACK
.FUNCT BOND-OTHER-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,BOND-OTHER
RSTACK
.FUNCT BOND-F,ARG=0
CALL PERSON-F,BOND,ARG
RSTACK
.FUNCT BOND-OTHER-F,ARG=0
EQUAL? ARG,M-WINNER \?ELS5
CALL PERSON-F,BOND-OTHER,ARG
RSTACK
?ELS5: EQUAL? PRSA,V?SHOW \?ELS7
EQUAL? PRSO,BOND-OTHER \?ELS7
EQUAL? PRSI,GUN \?ELS7
SET 'SUPPRESS-INTERRUPT,TRUE-VALUE
CALL HE-SHE-IT,BOND-OTHER,TRUE-VALUE
PRINTR " bobs and weaves, trying to avoid your aim."
?ELS7: EQUAL? PRSA,V?SLAP /?THN14
EQUAL? PRSA,V?SHOOT,V?PUSH,V?MUNG /?THN14
EQUAL? PRSA,V?MOVE-DIR,V?KILL,V?ATTACK \?ELS13
?THN14: SET 'SUPPRESS-INTERRUPT,TRUE-VALUE
RANDOM 100
LESS? 33,STACK /?ELS20
EQUAL? PRSA,V?SHOOT /?THN24
EQUAL? PRSI,GUN \?ELS23
?THN24: IN? GUN,POCKET \?CND26
MOVE GUN,PLAYER
?CND26: PRINTI "Your shot goes wild. "
JUMP ?CND21
?ELS23: PRINTI "You go for him, but he dodges. "
?CND21: CALL HE-SHE-IT,BOND-OTHER,TRUE-VALUE
PRINTI " hesitates, "
RANDOM 100
LESS? 50,STACK /?ELS41
PRINTR "then lunges at you!"
?ELS41: PRINTR "preparing his next move."
?ELS20: RANDOM 100
LESS? 50,STACK /?ELS49
ZERO? PLAYER-SEATED \?ELS49
CALL HE-SHE-IT,BOND-OTHER,TRUE-VALUE
PRINTI " dodges away. A sudden lurch knocks you off balance, and your last sight is the ground speeding up to meet you."
CRLF
CALL1 FINISH
RSTACK
?ELS49: MOVE BOND-OTHER,LIMBO-FWD
CALL QUEUE,I-BOND-OTHER,0
SET 'SUPPRESS-INTERRUPT,FALSE-VALUE
EQUAL? PRSA,V?SHOOT /?THN59
EQUAL? PRSI,GUN \?ELS58
?THN59: IN? GUN,POCKET \?CND61
MOVE GUN,PLAYER
?CND61: PRINTI "Your shot almost misses, but it wings him and he "
JUMP ?CND56
?ELS58: PRINTI "You lunge at him and almost miss, but he loses footing and "
?CND56: PRINTR "falls off the edge of the roof! The train quickly leaves his body behind."
?ELS13: CALL PERSON-F,BOND-OTHER,ARG
RSTACK
.FUNCT THIN-MAN-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,THIN-MAN
RSTACK
.FUNCT THIN-MAN-F,ARG=0
CALL PERSON-F,THIN-MAN,ARG
RSTACK
.FUNCT FAT-MAN-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,FAT-MAN
RSTACK
.FUNCT FAT-MAN-F,ARG=0
CALL PERSON-F,FAT-MAN,ARG
RSTACK
.FUNCT HUNK-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,HUNK
RSTACK
.FUNCT HUNK-F,ARG=0
CALL PERSON-F,HUNK,ARG
RSTACK
.FUNCT PEEL-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,PEEL
RSTACK
.FUNCT PEEL-F,ARG=0
CALL PERSON-F,PEEL,ARG
RSTACK
.FUNCT DUCHESS-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,DUCHESS
RSTACK
.FUNCT DUCHESS-F,ARG=0
CALL PERSON-F,DUCHESS,ARG
RSTACK
.FUNCT NATASHA-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,NATASHA
RSTACK
.FUNCT NATASHA-F,ARG=0
CALL PERSON-F,NATASHA,ARG
RSTACK
.FUNCT GUARD-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,GUARD
RSTACK
.FUNCT GUARD-F,ARG=0,OBJ
EQUAL? ARG,M-WINNER \?ELS5
CALL PERSON-F,GUARD,ARG
RSTACK
?ELS5: CALL2 PASS-OBJECT?,MCGUFFIN
ZERO? STACK /?ELS7
CALL2 SHOW-MCGUFFIN,GUARD
RSTACK
?ELS7: CALL1 CONDUCTOR-GIVE-SHOW >OBJ
ZERO? OBJ /?ELS9
EQUAL? OBJ,PASSPORT \?ELS9
SET 'GUARD-SAW-PASSPORT,TRUE-VALUE
SET 'GUARD-SUSPICION,0
CALL2 START-SENTENCE,GUARD
MOVE PASSPORT,PLAYER
PRINTI " looks at you and "
PRINTD PASSPORT
PRINTR ", barely suppresses a smirk, then gives it back to you."
?ELS9: CALL PERSON-F,GUARD,ARG
RSTACK
.FUNCT THUG-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,THUG
RSTACK
.FUNCT THUG-F,ARG=0,OBJ
CALL PERSON-F,THUG,ARG
RSTACK
.FUNCT DEFECTOR-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,DEFECTOR
RSTACK
.FUNCT DEFECTOR-F,ARG=0,OBJ
CALL PERSON-F,DEFECTOR,ARG
RSTACK
.FUNCT WAITRESS-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,WAITRESS
RSTACK
.FUNCT WAITRESS-F,ARG=0
EQUAL? ARG,M-WINNER \?ELS5
CALL1 BRING-GIVE
ZERO? STACK \TRUE
CALL PERSON-F,WAITRESS,ARG
RSTACK
?ELS5: CALL PERSON-F,WAITRESS,ARG
RSTACK
.FUNCT OFFICER-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
FCLEAR OFFICER,NDESCBIT
CALL2 DESCRIBE-PERSON,OFFICER
RSTACK
.FUNCT OFFICER-F,ARG=0
FCLEAR OFFICER,NDESCBIT
EQUAL? ARG,M-WINNER \?ELS5
CALL PERSON-F,OFFICER,ARG
RSTACK
?ELS5: CALL2 PASS-OBJECT?,MCGUFFIN
ZERO? STACK /?ELS7
CALL2 SHOW-MCGUFFIN,OFFICER
RSTACK
?ELS7: CALL PERSON-F,OFFICER,ARG
RSTACK
.FUNCT YOUNG-MAN-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,YOUNG-MAN
RSTACK
.FUNCT YOUNG-MAN-F,ARG=0
CALL PERSON-F,YOUNG-MAN,ARG
RSTACK
.FUNCT YOUNG-WOMAN-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,YOUNG-WOMAN
RSTACK
.FUNCT YOUNG-WOMAN-F,ARG=0
CALL PERSON-F,YOUNG-WOMAN,ARG
RSTACK
.FUNCT BOY-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,BOY
RSTACK
.FUNCT BOY-F,ARG=0
CALL PERSON-F,BOY,ARG
RSTACK
.FUNCT GIRL-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,GIRL
RSTACK
.FUNCT GIRL-F,ARG=0
CALL PERSON-F,GIRL,ARG
RSTACK
.FUNCT OLD-MAN-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,OLD-MAN
RSTACK
.FUNCT OLD-MAN-F,ARG=0
CALL PERSON-F,OLD-MAN,ARG
RSTACK
.FUNCT OLD-WOMAN-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,OLD-WOMAN
RSTACK
.FUNCT OLD-WOMAN-F,ARG=0
CALL PERSON-F,OLD-WOMAN,ARG
RSTACK
.FUNCT YOUNG-COUPLE-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,YOUNG-COUPLE
RSTACK
.FUNCT YOUNG-COUPLE-F,ARG=0
CALL PERSON-F,YOUNG-COUPLE,ARG
RSTACK
.FUNCT MIDDLE-COUPLE-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,MIDDLE-COUPLE
RSTACK
.FUNCT MIDDLE-COUPLE-F,ARG=0
CALL PERSON-F,MIDDLE-COUPLE,ARG
RSTACK
.FUNCT OLD-COUPLE-DESC,ARG
EQUAL? ARG,M-OBJDESC \FALSE
CALL2 DESCRIBE-PERSON,OLD-COUPLE
RSTACK
.FUNCT OLD-COUPLE-F,ARG=0
CALL PERSON-F,OLD-COUPLE,ARG
RSTACK
.FUNCT ELIMINATE,TBL,CNT,N
LESS? CNT,N \FALSE
?PRG4: ADD 1,CNT
GET TBL,STACK
PUT TBL,CNT,STACK
IGRTR? 'CNT,N \?PRG4
RTRUE
.FUNCT MONEY?
EQUAL? PRSO,DOLLARS \?ELS5
RETURN P-NUMBER
?ELS5: EQUAL? PRSO,INTNUM \FALSE
ZERO? P-DOLLAR-FLAG /FALSE
RETURN P-AMOUNT
.FUNCT PERSON-F,PER,ARG,OBJ,X,Y,Z,L,C,N
LOC PER >L
GETP PER,P?CHARACTER >C
IN? PER,GLOBAL-OBJECTS \?ELS3
CALL2 GLOBAL-PERSON,PER
RSTACK
?ELS3: CALL2 META-LOC,PER
EQUAL? HERE,STACK /?CND1
EQUAL? EXTRA-C,C /?CND1
GET GLOBAL-CHARACTER-TABLE,C >PER
?CND1: EQUAL? ARG,M-WINNER \?ELS12
CALL2 GRAB-ATTENTION,PER
ZERO? STACK /TRUE
CALL2 COM-CHECK,PER >X
ZERO? X /?ELS19
EQUAL? X,M-FATAL \TRUE
RFALSE
?ELS19: CALL2 PRODUCE-SOMETHING,PER
RTRUE
?ELS12: EQUAL? PRSA,V?ALARM \?ELS30
CALL2 UNSNOOZE,PER
ZERO? STACK /FALSE
CALL HE-SHE-IT,PER,TRUE-VALUE,STR?1
PRINTR " startled to see you so close!"
?ELS30: EQUAL? PRSA,V?GIVE \?ELS39
EQUAL? PRSI,PER \FALSE
CALL2 HELD?,PRSO
ZERO? STACK /FALSE
CALL2 GRAB-ATTENTION,PER
ZERO? STACK /TRUE
SET 'X,0
GETP PER,P?NORTH >Y
GETP PER,P?SOUTH >Z
CALL1 MONEY? >N
ZERO? N /?ELS52
ADD N,Z >X
PUTP PER,P?SOUTH,X
GETP PLAYER,P?SOUTH
SUB STACK,N
PUTP PLAYER,P?SOUTH,STACK
JUMP ?CND50
?ELS52: EQUAL? PRSO,MCGUFFIN \?CND55
FCLEAR PRSO,TAKEBIT
?CND55: MOVE PRSO,PER
?CND50: CALL HE-SHE-IT,PER,TRUE-VALUE,STR?55
PRINTI " your gift and"
CALL HE-SHE-IT,PER,-1,STR?34
PRINTC 32
ADD X,X
GRTR? Y,STACK \?ELS64
PRINTR "briefly."
?ELS64: GRTR? Y,X \?ELS68
ZERO? Z \?ELS73
PRINTR "hopefully."
?ELS73: PRINTR "longer."
?ELS68: PRINTR "broadly."
?ELS39: EQUAL? PRSA,V?LISTEN \?ELS85
GETP PER,P?LDESC >X
EQUAL? X,8 \FALSE
CALL1 PRODUCE-GIBBERISH
RTRUE
?ELS85: EQUAL? PRSA,V?SLAP,V?MUNG \?ELS92
CALL ZMEMQ,PER,SPY-TABLE
ZERO? STACK /FALSE
ZERO? MUNGED-PERSON \FALSE
CALL2 GRAB-ATTENTION,PER
ZERO? STACK /TRUE
RANDOM 100
LESS? 33,STACK /?CND103
FSET PER,MUNGBIT
SET 'MUNGED-PERSON,PER
GETP PER,P?CHARACTER
GET GOAL-TABLES,STACK
GET STACK,GOAL-ENABLE >MUNGED-ENABLE
RANDOM 6
ADD 9,STACK
CALL QUEUE,I-COME-TO,STACK
PUT STACK,0,1
PUTP PER,P?LDESC,34
CALL2 IMMOBILIZE,PER
CALL2 ANYONE-VISIBLE?,PER >X
ZERO? X /TRUE
CALL ARREST-PLAYER,STR?56,X,TRUE-VALUE,PER
RTRUE
?CND103: CALL HE-SHE-IT,PER,TRUE-VALUE,STR?57
PRINTI " your thrust and"
RANDOM 100
LESS? 50,STACK /?ELS115
CALL HE-SHE-IT,PER,-1,STR?58
PRINTI " a chop to your "
RANDOM 100
LESS? 50,STACK /?ELS122
PRINTR "nose."
?ELS122: PRINTR "breadbasket."
?ELS115: CALL HE-SHE-IT,PER,-1,STR?59
PRINTI " you unconscious."
CALL2 GENERIC-REST-ROOM-F,0 >X
MOVE PER,X
CALL FIND-FLAG-LG,X,DOORBIT >Y
ZERO? Y /?CND133
FSET Y,LOCKED
?CND133: CALL1 UNCONSCIOUS-FCN
RTRUE
?ELS92: EQUAL? PRSA,V?SHOOT,V?KILL \?ELS137
CALL ZMEMQ,PER,SPY-TABLE
ZERO? STACK /FALSE
EQUAL? PRSI,KNIFE,GUN \FALSE
FSET? PER,PERSONBIT \FALSE
ZERO? KILLED-PERSON \FALSE
FSET PER,LOCKED
SET 'KILLED-PERSON,PER
EQUAL? MUNGED-PERSON,PER \?CND145
SET 'MUNGED-PERSON,FALSE-VALUE
CALL QUEUE,I-COME-TO,0
?CND145: PUTP PER,P?LDESC,36
CALL2 IMMOBILIZE,PER
CALL2 ANYONE-VISIBLE?,PER >X
ZERO? X /?CND148
CALL ARREST-PLAYER,STR?28,X,TRUE-VALUE,PER
?CND148: FCLEAR PER,PERSONBIT
RTRUE
?ELS137: EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH \?ELS152
EQUAL? PER,PRSO \FALSE
FSET? PER,PERSONBIT \FALSE
FSET? PER,MUNGBIT /FALSE
CALL HE-SHE-IT,PER,TRUE-VALUE,STR?5
PRINTI " you away and"
CALL HE-SHE-IT,PER,-1,STR?60
PRINTI ", "
CALL1 PRODUCE-GIBBERISH
RTRUE
?ELS152: EQUAL? PRSA,V?SHOW \?ELS163
EQUAL? PER,PRSO \FALSE
CALL2 GRAB-ATTENTION,PER
ZERO? STACK /TRUE
EQUAL? PRSI,GUN \?ELS175
EQUAL? PER,CONDUCTOR,GUARD,WAITER \?ELS178
CALL ARREST-PLAYER,STR?61,PER,TRUE-VALUE,GUN
RTRUE
?ELS178: CALL2 ANYONE-VISIBLE?,PER >X
ZERO? X /?CND176
CALL ARREST-PLAYER,STR?61,X,TRUE-VALUE,GUN
?CND176: CALL2 GENERIC-REST-ROOM-F,0
CALL ESTABLISH-GOAL,PER,STACK
EQUAL? PER,BAD-SPY \?CND183
SET 'BAD-SPY-KNOWS-YOU,TRUE-VALUE
GET GOAL-TABLES,BAD-SPY-C
PUT STACK,GOAL-FUNCTION,TRAVELER-FLEES
CALL2 INT,I-TRAVELER
PUT STACK,0,0
?CND183: CALL HE-SHE-IT,PER,TRUE-VALUE,STR?12
CALL HIM-HER-IT,PER,FALSE-VALUE,TRUE-VALUE
PRINTI " eyes wider and"
CALL HE-SHE-IT,PER,-1,STR?6
PRINTI ", "
CALL1 PRODUCE-GIBBERISH
RTRUE
?ELS175: EQUAL? PRSI,CIGARETTE \FALSE
IN? LIGHTER,PRSO /?ELS195
EQUAL? PRSO,WAITRESS,WAITER \?ELS195
CALL CALL-FOR-PROP,LIGHTER,PRSO
ZERO? STACK /FALSE
?ELS195: EQUAL? PRSO,BAD-SPY /FALSE
FSET LIGHTER,TAKEBIT
FSET LIGHTER,TOUCHBIT
MOVE LIGHTER,PLAYER
CALL HE-SHE-IT,PER,TRUE-VALUE
PRINTI " kindly"
CALL HE-SHE-IT,PER,-1,STR?62
PRINTI " you a "
PRINTD LIGHTER
PRINTR "."
?ELS163: CALL2 ASK-WHAT?,PER >OBJ
ZERO? OBJ /?ELS199
CALL2 GRAB-ATTENTION,PER
ZERO? STACK /TRUE
CALL2 SAID-TO,PER
ZERO? ON-TRAIN \?ELS207
CALL ZMEMZ,OBJ,TRAIN-TABLE
ZERO? STACK /?ELS207
EQUAL? PER,CONDUCTOR,GUARD \?ELS207
CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?63
PRINTR " to this train track."
?ELS207: CALL DONT-KNOW,PER,OBJ
RSTACK
?ELS199: CALL2 COMMON-OTHER,PER
RSTACK
.FUNCT ASK-WHAT?,PER
EQUAL? PRSA,V?CONFRONT,V?ASK-ABOUT \?ELS5
ZERO? PRSI /FALSE
EQUAL? PRSO,PER \FALSE
RETURN PRSI
?ELS5: EQUAL? PRSA,V?WHAT,V?FIND \FALSE
ZERO? PRSO /FALSE
IN? PRSO,GLOBAL-OBJECTS \FALSE
RETURN PRSO
.FUNCT IMMOBILIZE,PER,X
GETP PER,P?CHARACTER
GET GOAL-TABLES,STACK >X
PUT X,GOAL-ENABLE,0
FSET PER,OPENBIT
FSET PER,TAKEBIT
FCLEAR PER,TOUCHBIT
EQUAL? PER,BAD-SPY \?CND1
IN? GUN,OTHER-LIMBO-FWD \?CND1
MOVE GUN,PER
?CND1: FIRST? PER >X /?KLU22
?KLU22:
?PRG6: ZERO? X \?ELS10
JUMP ?REP7
?ELS10: FSET X,TAKEBIT
NEXT? X >X /?KLU23
?KLU23: JUMP ?PRG6
?REP7: CALL HE-SHE-IT,PER,TRUE-VALUE
IN? BRIEFCASE,PER \?CND15
LOC PER
MOVE BRIEFCASE,STACK
CALL HE-SHE-IT,PER,-1,STR?64
CALL2 HIM-HER-IT,BRIEFCASE
PRINTI " and"
?CND15: CALL HE-SHE-IT,PER,-1,STR?65
PRINTC 32
CALL1 GROUND-DESC
PRINT STACK
PRINTR "."
.FUNCT UNCONSCIOUS-FCN,TIM=0,HR
ZERO? TIM \?CND1
RANDOM 6
ADD 9,STACK >TIM
?CND1: SET 'MUNGED-PERSON,PLAYER
SET 'HR,HERE
MOVE PLAYER,UNCONSCIOUS
SET 'HERE,UNCONSCIOUS
PRINTI "...
"
CALL1 STATUS-LINE
CALL QUEUE,I-COME-TO,TIM
PUT STACK,0,1
CALL V-WAIT,TIM,FALSE-VALUE,TRUE-VALUE
MOVE PLAYER,HR
SET 'HERE,HR
ZERO? PLAYER-SEATED \TRUE
SUB 0,HERE >PLAYER-SEATED
RTRUE
.FUNCT ANYONE-VISIBLE?,VICTIM=0,CNT,X,VAL=0
SET 'X,COR-ALL-DIRS
SET 'COR-ALL-DIRS,TRUE-VALUE
SET 'CNT,0
?PRG1: IGRTR? 'CNT,CHARACTER-MAX \?ELS5
SET 'VAL,FALSE-VALUE
JUMP ?REP2
?ELS5: GET CHARACTER-TABLE,CNT >VAL
EQUAL? VICTIM,VAL \?ELS7
JUMP ?PRG1
?ELS7: CALL2 VISIBLE?,VAL
ZERO? STACK /?PRG1
?REP2: ZERO? VAL /?CND10
SET 'COR-ALL-DIRS,X
RETURN VAL
?CND10: GET EXTRA-TABLE,0 >CNT
?PRG13: GET EXTRA-TABLE,CNT >VAL
EQUAL? VICTIM,VAL \?ELS17
JUMP ?PRG13
?ELS17: CALL2 VISIBLE?,VAL
ZERO? STACK /?ELS19
JUMP ?REP14
?ELS19: DLESS? 'CNT,1 \?PRG13
SET 'VAL,FALSE-VALUE
?REP14: SET 'COR-ALL-DIRS,X
RETURN VAL
.FUNCT BODY-F
ZERO? KILLED-PERSON \?ELS5
CALL2 NOT-HERE,BODY
RSTACK
?ELS5: CALL DO-INSTEAD-OF,KILLED-PERSON,BODY
RTRUE
.FUNCT I-COME-TO,GARG=0,P,L,V,X
ZERO? IDEBUG \?THN4
EQUAL? GARG,G-DEBUG \?CND1
?THN4: PRINTI "[I-COME-TO:"
EQUAL? GARG,G-DEBUG /FALSE
?CND1: SET 'P,MUNGED-PERSON
ZERO? P \?ELS15
ZERO? IDEBUG /FALSE