-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathglobal.zap
More file actions
657 lines (578 loc) · 15.8 KB
/
global.zap
File metadata and controls
657 lines (578 loc) · 15.8 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
.FUNCT DO-INSTEAD-OF,OBJ1,OBJ2
EQUAL? PRSI,OBJ2 \?ELS5
CALL PERFORM,PRSA,PRSO,OBJ1
RTRUE
?ELS5: EQUAL? PRSO,OBJ2 \?ELS7
CALL PERFORM,PRSA,OBJ1,PRSI
RTRUE
?ELS7: CALL1 V-FOO
ZERO? STACK /FALSE
RTRUE
.FUNCT TURN-F
EQUAL? PRSA,V?USE \FALSE
CALL PERFORM,V?WAIT-FOR,PRSO
RTRUE
.FUNCT IT-F
EQUAL? PRSI,IT \?THN10
EQUAL? PRSA,V?TELL-ABOUT /?THN10
EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT /?THN14
?THN10: EQUAL? PRSO,IT \FALSE
EQUAL? PRSA,V?WHAT /?THN14
EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \FALSE
?THN14: CALL1 PRODUCE-GIBBERISH
RSTACK
.FUNCT FLOOR-F,OBJ
EQUAL? PRSA,V?PUT \?ELS5
EQUAL? PRSI,FLOOR \?ELS5
CALL PERFORM,V?DROP,PRSO
RTRUE
?ELS5: EQUAL? PRSA,V?LOOK-ON,V?SEARCH,V?EXAMINE \?ELS9
CALL FIND-FLAG,HERE,NDESCBIT,WINNER >OBJ
ZERO? OBJ /?ELS14
FCLEAR OBJ,NDESCBIT
CALL2 THIS-IS-IT,OBJ
PRINTI "Something catches your eye: it's "
CALL2 PRINTA,OBJ
PRINTR "."
?ELS14: PRINTR "You don't find anything new there."
?ELS9: EQUAL? PRSA,V?TAKE,V?BRUSH \FALSE
IN? BLOOD-SPOT,HERE \FALSE
CALL PERFORM,V?BRUSH,BLOOD-SPOT,PRSI
RTRUE
.FUNCT DOLLARS-F
EQUAL? PRSA,V?COUNT \?ELS5
CALL DO-INSTEAD-OF,GLOBAL-MONEY,DOLLARS
RTRUE
?ELS5: ZERO? P-DOLLAR-FLAG /?ELS10
ZERO? P-AMOUNT \?CND8
SET 'P-AMOUNT,1
JUMP ?CND8
?ELS10: SET 'P-DOLLAR-FLAG,TRUE-VALUE
ZERO? P-NUMBER \?CND8
SET 'P-AMOUNT,1
?CND8: CALL DO-INSTEAD-OF,INTNUM,DOLLARS
RTRUE
.FUNCT INTNUM-F
ZERO? P-DOLLAR-FLAG /FALSE
CALL2 DIVESTMENT?,PRSO
ZERO? STACK /?ELS11
CALL1 TELL-FLASHING-CASH
RTRUE
?ELS11: EQUAL? PRSA,V?ASK-FOR,V?TAKE /FALSE
EQUAL? WINNER,PLAYER \FALSE
GETP PLAYER,P?SOUTH
GRTR? P-AMOUNT,STACK \FALSE
PRINTR "You don't have that much."
.FUNCT YOU-F
EQUAL? WINNER,PLAYER /?ELS5
CALL DO-INSTEAD-OF,WINNER,YOU
RTRUE
?ELS5: EQUAL? PRSA,V?ASK-ABOUT \FALSE
EQUAL? PRSI,YOU \FALSE
CALL PERFORM,V?ASK-ABOUT,PRSO,PRSO
RTRUE
.FUNCT CORRIDOR-GLOBAL-F,RM
EQUAL? PRSA,V?LOOK-UP,V?LOOK-DOWN /?THN6
EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE,V?ANALYZE \FALSE
?THN6: ZERO? ON-TRAIN /FALSE
CALL ZMEMQ,HERE,CAR-ROOMS-CORRID
ZERO? STACK /?ELS14
CALL2 PERFORM,V?LOOK
RTRUE
?ELS14: CALL NEXT-ROOM,HERE,P?OUT >RM
ZERO? RM /FALSE
CALL ROOM-PEEK,RM,TRUE-VALUE
RSTACK
.FUNCT GLOBAL-HERE-F,FLG=0,F,HR,TIM,VAL
EQUAL? PRSA,V?SIT,V?WALK-TO \?ELS5
CALL DO-INSTEAD-OF,HERE,GLOBAL-HERE
RTRUE
?ELS5: EQUAL? PRSA,V?KNOCK \?ELS7
PRINTR "Knocking on the walls reveals nothing unusual."
?ELS7: EQUAL? PRSA,V?TIE-TO,V?PUT-IN,V?PUT \?ELS11
CALL1 MORE-SPECIFIC
RSTACK
?ELS11: EQUAL? PRSA,V?EXAMINE,V?SEARCH \FALSE
GETP HERE,P?CORRIDOR
ZERO? STACK /?ELS16
SET 'TIM,3
JUMP ?CND14
?ELS16: GETP HERE,P?SIZE
ADD 2,STACK >TIM
?CND14: EQUAL? P-ADVERB,W?CAREFULLY \?CND19
MUL 2,TIM >TIM
?CND19: PRINTI "(It's better to examine or search one thing at a time. It would take a long time to search a whole room or area thoroughly. A "
EQUAL? P-ADVERB,W?CAREFULLY \?ELS26
PRINTI "careful"
JUMP ?CND24
?ELS26: PRINTI "brief"
?CND24: PRINTI " search would take "
PRINTN TIM
PRINTI " minutes, and it might not reveal much. Would you like to do it anyway?)"
CALL1 YES?
ZERO? STACK /?ELS39
CALL2 INT-WAIT,TIM >VAL
EQUAL? M-FATAL,VAL /TRUE
ZERO? VAL /?ELS46
PRINTI "Your "
EQUAL? P-ADVERB,W?CAREFULLY \?ELS52
PRINTI "careful"
JUMP ?CND50
?ELS52: PRINTI "brief"
?CND50: PRINTI " search reveals"
CALL2 FOUND?,HERE >VAL
ZERO? VAL /?ELS65
CALL2 PRINTT,VAL
PRINTR " under the seat."
?ELS65: PRINTR " nothing exciting."
?ELS46: PRINTR "You didn't finish looking over the place."
?ELS39: SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "Okay."
.FUNCT FOUND?,RM,X
CALL ZMEMQ,RM,CAR-ROOMS-COMPS >X
ZERO? X /?ELS5
GET CAR-ROOMS-UNDER,X
FIRST? STACK >X \?ELS5
RETURN X
?ELS5: EQUAL? RM,BOOTH-1 \?ELS9
FIRST? UNDER-BOOTH-1 /TRUE
RFALSE
?ELS9: EQUAL? RM,BOOTH-2 \?ELS13
FIRST? UNDER-BOOTH-2 /TRUE
RFALSE
?ELS13: EQUAL? RM,BOOTH-3 \FALSE
FIRST? UNDER-BOOTH-3 /TRUE
RFALSE
.FUNCT AIR-F
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTR "You can see through the air around you."
?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS9
PRINTR "It's all around you!"
?ELS9: EQUAL? PRSA,V?SMELL \FALSE
CALL2 OUTSIDE?,HERE
ZERO? STACK /?ELS18
PRINTR "The air is clear and fresh."
?ELS18: CALL2 FRESH-AIR?,HERE
ZERO? STACK \TRUE
PRINTR "The air is rather musty."
.FUNCT SOMETHING-F
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTI "(Type a real word instead of "
PRINTD SOMETHING
PRINTR ".)"
.FUNCT TOILET-F
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5
CALL1 YOU-CANT
RSTACK
?ELS5: EQUAL? PRSA,V?PUT-IN \?ELS7
EQUAL? PRSI,TOILET \FALSE
FSET PRSO,MUNGBIT
RFALSE
?ELS7: EQUAL? PRSA,V?FLUSH-DOWN,V?FLUSH \FALSE
ZERO? IN-STATION /?ELS19
ZERO? ON-TRAIN /?ELS19
PRINTR "An old refrain comes to mind:
""Passengers will please refrain
From flushing toilets while the train
Is standing in the station. (I love you!)"""
?ELS19: EQUAL? PRSA,V?FLUSH-DOWN \?CND26
CALL1 ITAKE
EQUAL? STACK,TRUE-VALUE \TRUE
MOVE PRSO,TOILET
?CND26: FIRST? TOILET \?CND32
PRINTI "Say goodbye to"
CALL ROB,TOILET,LIMBO-FWD,TRUE-VALUE
?CND32: PRINTR """Whhoooossshhhhh!"""
.FUNCT ROB,WHAT,THIEF,TELL?=0,N,X,TOLD?=0
FIRST? WHAT >X /?KLU29
?KLU29:
?PRG1: ZERO? X /TRUE
NEXT? X >N /?KLU30
?KLU30: ZERO? N \?CND6
ZERO? TOLD? /?CND6
ZERO? TELL? /?CND6
PRINTI " and"
?CND6: SET 'TOLD?,TRUE-VALUE
ZERO? TELL? /?CND13
CALL2 PRINTT,X
ZERO? N /?ELS21
PRINTI ","
JUMP ?CND13
?ELS21: PRINTI ". "
?CND13: MOVE X,THIEF
FCLEAR X,TAKEBIT
SET 'X,N
JUMP ?PRG1
.FUNCT SINK-F
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5
CALL1 YOU-CANT
RSTACK
?ELS5: EQUAL? PRSA,V?LAMP-ON \FALSE
PRINTR "You push on the handle, and water runs until you let go. A silly idea comes into your head: what is the sound of one hand washing?"
.FUNCT TOWEL-LOOP-F
EQUAL? PRSA,V?CUT \?ELS5
EQUAL? PRSI,KNIFE \FALSE
MOVE SCARF,PLAYER
FSET SCARF,TAKEBIT
PUTP SCARF,P?CAR,CAR-HERE
MOVE TOWEL-FIXTURE-BROKEN,HERE
PUTP TOWEL-FIXTURE-BROKEN,P?CAR,CAR-HERE
MOVE TOWEL-LOOP-BROKEN,HERE
PUTP TOWEL-LOOP-BROKEN,P?CAR,CAR-HERE
CALL2 THIS-IS-IT,TOWEL-LOOP-BROKEN
PRINTI "Well done! You now have a government-issue "
PRINTD SCARF
PRINTR ", and the janitor has a mess to repair."
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS14
PRINTR "This cloth towel must be very long, but most of it is rolled up inside the dispenser. Only about a meter hangs below it in a ""U"" shape."
?ELS14: EQUAL? PRSA,V?TAKE /?THN19
EQUAL? PRSA,V?USE,V?MOVE-DIR,V?MOVE \FALSE
?THN19: PRINTR "As you pull on the towel, a fresh portion appears from a slot, and the used portion starts to disappear into the dispenser."
.FUNCT TOWEL-LOOP-BROKEN-F
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTR "This cloth towel must be very long, but most of it is rolled up inside the dispenser. The part that should hang below is cut away."
?ELS5: EQUAL? PRSA,V?TAKE,V?USE /?THN10
EQUAL? PRSA,V?MOVE-DIR,V?MOVE,V?CUT \FALSE
?THN10: PRINTR "There's not enough left!"
.FUNCT PAPER-FIXTURE-F
EQUAL? PRSA,V?LOOK-INSIDE \FALSE
FCLEAR PAPER-LOOP,NDESCBIT
RFALSE
.FUNCT PAPER-LOOP-F
EQUAL? PRSA,V?TAKE /?THN6
EQUAL? PRSA,V?USE,V?MOVE-DIR,V?MOVE \FALSE
?THN6: PRINTR "Whatever you have in mind, it'll never work!"
.FUNCT MIRROR-F
EQUAL? PRSA,V?MUNG \?ELS5
PRINTR "You don't need any bad luck!"
?ELS5: EQUAL? PRSA,V?EXAMINE,V?LOOK-INSIDE \FALSE
PRINTI "A harried and weary "
EQUAL? VARIATION,3,4 \?ELS16
PUSH STR?151
JUMP ?CND12
?ELS16: PUSH STR?152
?CND12: PRINT STACK
PRINTR " looks back at you, with a look that seems to say, ""I don't need this aggravation!"""
.FUNCT POCKET-F,X
CALL2 DIVESTMENT?,POCKET
ZERO? STACK /?ELS5
CALL1 HAR-HAR
RSTACK
?ELS5: EQUAL? PRSA,V?LOOK-THROUGH,V?LOOK-INSIDE \?ELS7
CALL2 PRINT-CONT,POCKET >X
EQUAL? WINNER,PLAYER \?ELS10
GETP PLAYER,P?SOUTH
GRTR? STACK,0 \?ELS10
CALL2 THIS-IS-IT,GLOBAL-MONEY
ZERO? X /?ELS15
PRINTR "And some money."
?ELS15: PRINTI "You have some money in your pocket."
IN? CUSTOMS-AGENT,HERE \?CND23
PRINTI " But"
CALL2 HE-SHE-IT,CUSTOMS-AGENT
PRINTI " won't mind."
?CND23: CRLF
RTRUE
?ELS10: ZERO? X \TRUE
PRINTR "Your pocket is empty."
?ELS7: EQUAL? PRSA,V?EMPTY \?ELS33
FIRST? POCKET \FALSE
PRINTI "You are now holding"
CALL ROB,POCKET,PLAYER,TRUE-VALUE
CRLF
RTRUE
?ELS33: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS42
PRINTR "You don't need to do that."
?ELS42: EQUAL? PRSA,V?PUT-IN \FALSE
EQUAL? PRSI,POCKET \FALSE
EQUAL? PRSO,GLOBAL-MONEY /?THN54
EQUAL? PRSO,INTNUM \?ELS53
ZERO? P-DOLLAR-FLAG /?ELS53
?THN54: PRINTR "It's already there."
?ELS53: EQUAL? PRSO,CAMERA \FALSE
FSET? PRSO,OPENBIT \FALSE
FCLEAR PRSO,OPENBIT
PRINTI "(You close"
CALL2 HIM-HER-IT,PRSO
PRINTI " first.)"
CRLF
RFALSE
.FUNCT POCKET-C-F,X
CALL2 DIVESTMENT?,POCKET-C
ZERO? STACK /?ELS5
CALL1 HAR-HAR
RSTACK
?ELS5: EQUAL? PRSA,V?LOOK-THROUGH,V?LOOK-INSIDE \?ELS7
FSET? CONDUCTOR,MUNGBIT /?THN11
FSET? CONDUCTOR,PERSONBIT /?ELS10
?THN11: CALL2 PRINT-CONT,POCKET-C >X
RTRUE
?ELS10: CALL HE-SHE-IT,CONDUCTOR,TRUE-VALUE
PRINTR " brushes your hand away without even looking."
?ELS7: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS18
PRINTR "You don't need to do that."
?ELS18: EQUAL? PRSA,V?PUT-IN \FALSE
EQUAL? PRSI,POCKET-C \FALSE
EQUAL? PRSO,CAMERA \FALSE
FSET? PRSO,OPENBIT \FALSE
FCLEAR PRSO,OPENBIT
PRINTI "(You close"
CALL2 HIM-HER-IT,PRSO
PRINTI " first.)"
CRLF
RFALSE
.FUNCT TELL-FLASHING-CASH
PRINTR "Flashing your bankroll is not a good idea."
.FUNCT GLOBAL-MONEY-F
EQUAL? PRSA,V?FIND \?ELS5
PRINTR "It's not that easy!"
?ELS5: CALL1 REMOTE-VERB?
ZERO? STACK \FALSE
EQUAL? PRSA,V?PUT-IN,V?PUT \?ELS11
EQUAL? PRSO,GLOBAL-MONEY \?ELS11
CALL1 MORE-SPECIFIC
RSTACK
?ELS11: GETP PLAYER,P?SOUTH
GRTR? STACK,0 \?ELS15
EQUAL? PRSA,V?EXAMINE,V?COUNT \?ELS20
PRINTI "You are carrying "
PRINTC CURRENCY-SYMBOL
GETP PLAYER,P?SOUTH
PRINTN STACK
PRINTR "."
?ELS20: EQUAL? PRSA,V?GIVE \?ELS26
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "(You didn't say how much money to give.)"
?ELS26: EQUAL? PRSA,V?TAKE \?ELS30
ZERO? PRSI /?ELS30
PRINTI "You can't see any money on"
CALL2 HIM-HER-IT,PRSI
PRINTR "."
?ELS30: EQUAL? PRSA,V?SHOW /FALSE
CALL1 TELL-FLASHING-CASH
RSTACK
?ELS15: CALL2 NOT-HERE,GLOBAL-MONEY
RSTACK
.FUNCT MENU-F
EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
GETP MENU,P?TEXT
PRINT STACK
CRLF
RTRUE
.FUNCT ITEMS-F
EQUAL? PRSA,V?BUY,V?ASK-FOR \?ELS5
EQUAL? P-ADJ,W?FIRST \?ELS10
CALL DO-INSTEAD-OF,FOOD,ITEMS
RTRUE
?ELS10: CALL DO-INSTEAD-OF,FOOD-2,ITEMS
RTRUE
?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
GETP MENU,P?TEXT
PRINT STACK
CRLF
RTRUE
.FUNCT FOOD-GLOBAL-F
EQUAL? PRSA,V?SMELL,V?BUY,V?ASK-FOR \?ELS5
CALL DO-INSTEAD-OF,FOOD,FOOD-GLOBAL
RTRUE
?ELS5: CALL1 REMOTE-VERB?
ZERO? STACK \FALSE
CALL2 NOT-HERE,FOOD-GLOBAL
RSTACK
.FUNCT DRINK-F
CALL2 FOOD-F,TRUE-VALUE
RSTACK
.FUNCT DRINK-1-F
CALL DO-INSTEAD-OF,DRINK-GLOBAL,DRINK-1
RTRUE
.FUNCT FOOD-F,DRINK?=0,PER,OBJ,X,?ORTMP
EQUAL? PRSA,V?DRINK,V?SMELL,V?EAT \?ELS5
EQUAL? PRSA,V?SMELL /?THN11
IN? PRSO,GLOBAL-OBJECTS /?ELS10
?THN11: PRINTI "It's pungent but not very flavorful."
EQUAL? PRSA,V?SMELL /?CND15
GETP PRSO,P?SIZE >X
PUTP PRSO,P?SIZE,X
EQUAL? X,FOOD-HALF-SIZE \?ELS20
PRINTI " And it's half gone."
JUMP ?CND15
?ELS20: ZERO? X \?CND15
MOVE PRSO,GLOBAL-OBJECTS
PRINTI " And it's gone."
?CND15: EQUAL? VARIATION,3,4 \?CND27
PRINTI " You've had better in some mighty dank corners of the world."
?CND27: CRLF
RTRUE
?ELS10: PRINTR "That wouldn't be very polite."
?ELS5: EQUAL? PRSA,V?MUNG /?THN38
EQUAL? PRSA,V?PUT-IN,V?PUT,V?POUR \?ELS37
?THN38: EQUAL? PRSI,TOILET /FALSE
EQUAL? PRSA,V?POUR /?ELS46
EQUAL? PRSI,TABLE-3,TABLE-2,TABLE-1 /FALSE
?ELS46: PRINTR "What a mess that would make!"
?ELS37: EQUAL? PRSA,V?BUY,V?ASK-FOR \FALSE
EQUAL? HERE,PANTRY \?CND55
CALL2 INVASION?,WAITER
ZERO? STACK \TRUE
?CND55: ZERO? ON-TRAIN /?ELS62
SET 'PER,WAITER
JUMP ?CND60
?ELS62: SET 'PER,WAITRESS
?CND60: ZERO? DRINK? /?ELS68
SET 'OBJ,WINE-RED
JUMP ?CND66
?ELS68: SET 'OBJ,FOOD
?CND66: ZERO? DRINK? /?ELS74
FSET? WINE-RED,TOUCHBIT /?THN79
FSET? WINE-WHITE,TOUCHBIT \?CND72
?THN79: PRINTR "You've bought enough to drink already."
?ELS74: FSET? FOOD,TOUCHBIT \?CND72
PRINTR "You've bought enough to eat already."
?CND72: GETP PLAYER,P?SOUTH
ZERO? STACK \?ELS91
PRINTR "You don't have enough money."
?ELS91: IN? PER,HERE /?ELS95
PRINTI "You'd better talk to "
CALL2 PRINTA,PER
PRINTR " first."
?ELS95: GETP PLAYER,P?SOUTH
SUB STACK,1
PUTP PLAYER,P?SOUTH,STACK
EQUAL? OBJ,WINE-RED,WINE-WHITE \?ELS102
CALL CALL-FOR-PROP,CUP-A,WAITER
POP '?ORTMP
ZERO? ?ORTMP /?ORP106
PUSH ?ORTMP
JUMP ?THN103
?ORP106: CALL CALL-FOR-PROP,CUP-B,WAITER
?THN103: POP 'X
MOVE OBJ,X
PUTP OBJ,P?CAR,CAR-HERE
PUTP OBJ,P?SIZE,FOOD-SIZE
FSET OBJ,TOUCHBIT
SET 'OBJ,X
JUMP ?CND100
?ELS102: PUTP OBJ,P?SIZE,FOOD-SIZE
?CND100: CALL2 TABLE?,HERE
POP '?ORTMP
ZERO? ?ORTMP /?ORP112
PUSH ?ORTMP
JUMP ?THN109
?ORP112: PUSH HERE
?THN109: MOVE OBJ,STACK
PUTP OBJ,P?CAR,CAR-HERE
FSET OBJ,TAKEBIT
FSET OBJ,TOUCHBIT
FCLEAR OBJ,NDESCBIT
FCLEAR PER,TOUCHBIT
PUTP PER,P?LDESC,29
CALL HE-SHE-IT,PER,TRUE-VALUE
PRINTI " returns in an instant with "
CALL2 PRINTA,OBJ
PRINTI " and takes "
PRINTC CURRENCY-SYMBOL
PRINTR "1 from you."
.FUNCT CUP-F
EQUAL? PRSA,V?EMPTY,V?THROW-THROUGH,V?THROW-AT \?ELS5
LOC WINE-RED
EQUAL? STACK,PRSO,PRSI \?CND6
MOVE WINE-RED,GLOBAL-OBJECTS
?CND6: LOC WINE-WHITE
EQUAL? STACK,PRSO,PRSI \?CND9
MOVE WINE-WHITE,GLOBAL-OBJECTS
?CND9: CALL ROB,PRSO,HERE
CALL ROB,PRSI,HERE
EQUAL? PRSA,V?EMPTY \FALSE
PRINTR "Okay."
?ELS5: EQUAL? PRSA,V?PUT-IN \FALSE
EQUAL? PRSO,TOWEL-WAITER,NAPKIN,SCARF \FALSE
EQUAL? PRSI,CUP-B,CUP-A \FALSE
IN? WINE-RED,PRSI \FALSE
CALL DO-INSTEAD-OF,WINE-RED,PRSI
RTRUE
.FUNCT WINE-PUT?
EQUAL? PRSA,V?PUT \?ELS5
EQUAL? PRSI,TOWEL-WAITER,NAPKIN,SCARF \FALSE
EQUAL? PRSO,WINE-RED \FALSE
RETURN PRSI
?ELS5: EQUAL? PRSA,V?PUT-IN \FALSE
EQUAL? PRSO,TOWEL-WAITER,NAPKIN,SCARF \FALSE
EQUAL? PRSI,WINE-RED \FALSE
RETURN PRSO
.FUNCT WINE-F,OBJ
EQUAL? PRSA,V?TAKE \?ELS5
LOC PRSO
EQUAL? STACK,CUP-A,CUP-B \?ELS5
LOC PRSO
CALL PERFORM,PRSA,STACK,PRSI
RTRUE
?ELS5: CALL1 WINE-PUT? >OBJ
ZERO? OBJ /?ELS9
LOC OBJ
MOVE HANKY,STACK
FSET HANKY,TAKEBIT
MOVE OBJ,LIMBO-FWD
FCLEAR OBJ,TAKEBIT
MOVE WINE-RED,GLOBAL-OBJECTS
PRINTI "The "
PRINTD OBJ
PRINTI " soaks up the wine, and the stain spreads to every nook and cranny. Within a minute, you have a decent imitation of a "
PRINTD HANKY
PRINTR "."
?ELS9: CALL2 FOOD-F,TRUE-VALUE
RSTACK
.FUNCT NO-FOOD-F,PER
ZERO? ON-TRAIN /?ELS3
SET 'PER,WAITER
JUMP ?CND1
?ELS3: SET 'PER,WAITRESS
?CND1: EQUAL? PRSA,V?BUY,V?ASK-ABOUT \FALSE
CALL2 START-SENTENCE,PER
PRINTI " shakes"
CALL HIM-HER-IT,PER,FALSE-VALUE,TRUE-VALUE
CALL2 THIS-IS-IT,FOOD
CALL2 THIS-IS-IT,PER
PRINTR " head and points to the first item on the menu, which you find unreadable."
.FUNCT TABLE?,RM
EQUAL? RM,CAFE \?ELS5
RETURN COUNTER-CAFE
?ELS5: EQUAL? RM,BOOTH-1 \?ELS7
RETURN TABLE-1
?ELS7: EQUAL? RM,BOOTH-2 \?ELS9
RETURN TABLE-2
?ELS9: EQUAL? RM,BOOTH-3 \FALSE
RETURN TABLE-3
.FUNCT LANGUAGE-F
EQUAL? PRSA,V?LEARN,V?ANALYZE \FALSE
PRINTR "Maybe you should have taken your company's offer to pay for language lessons before you started this trip. After all, English isn't spoken everywhere."
.FUNCT GESTURE-F,P
EQUAL? PRSA,V?LEARN,V?ANALYZE \?ELS5
PRINTR "Maybe you should have taken your company's offer to pay for gesture lessons before you started this trip. After all, English gestures aren't used everywhere."
?ELS5: EQUAL? PRSA,V?MAKE \FALSE
ZERO? PRSI /?ELS12
FSET? PRSI,PERSONBIT \?ELS12
SET 'P,PRSI
JUMP ?CND10
?ELS12: CALL1 QCONTEXT-GOOD?
ZERO? STACK /?ELS16
SET 'P,QCONTEXT
JUMP ?CND10
?ELS16: CALL FIND-FLAG,HERE,PERSONBIT,WINNER >P
ZERO? P \?CND10
CALL2 NOT-CLEAR-WHOM,TRUE-VALUE
RTRUE
?CND10: CALL2 START-SENTENCE,P
CALL HE-SHE-IT,P,-1,STR?154
PRINTR " a gesture right back. Somehow it looks nastier than yours."
.FUNCT GAME-F
EQUAL? PRSA,V?READ,V?PLAY,V?EXAMINE \FALSE
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "(You're doing it now!)"
.FUNCT HEAD-F
EQUAL? PRSA,V?NOD \?ELS5
CALL2 PERFORM,V?YES
RTRUE
?ELS5: EQUAL? PRSA,V?SHAKE \FALSE
CALL2 PERFORM,V?NO
RTRUE
.ENDI