]> github.com/historicalsource and other repositories - zork2.git/blob - gverbs.zap
Extensions on Z-Machine Fixed.
[zork2.git] / gverbs.zap
1
2
3         .FUNCT  V-VERBOSE
4         SET     'VERBOSE,TRUE-VALUE
5         SET     'SUPER-BRIEF,FALSE-VALUE
6         PRINTR  "Maximum verbosity."
7
8
9         .FUNCT  V-BRIEF
10         SET     'VERBOSE,FALSE-VALUE
11         SET     'SUPER-BRIEF,FALSE-VALUE
12         PRINTR  "Brief descriptions."
13
14
15         .FUNCT  V-SUPER-BRIEF
16         SET     'SUPER-BRIEF,TRUE-VALUE
17         PRINTR  "Superbrief descriptions."
18
19
20         .FUNCT  V-INVENTORY
21         FIRST?  WINNER \?ELS5
22         CALL    PRINT-CONT,WINNER
23         RSTACK  
24 ?ELS5:  PRINTR  "You are empty-handed."
25
26
27         .FUNCT  FINISH,WRD
28         CALL    V-SCORE
29 ?PRG1:  CRLF    
30         PRINTI  "Would you like to restart the game from the beginning, restore a saved game position, or end this session of the game?
31 (Type RESTART, RESTORE, or QUIT):
32 >"
33         READ    P-INBUF,P-LEXV
34         GET     P-LEXV,1 >WRD
35         EQUAL?  WRD,W?RESTART \?ELS7
36         RESTART 
37         PRINTI  "Failed."
38         CRLF    
39         JUMP    ?PRG1
40 ?ELS7:  EQUAL?  WRD,W?RESTORE \?ELS11
41         RESTORE  \?ELS14
42         PRINTI  "Ok."
43         CRLF    
44         JUMP    ?PRG1
45 ?ELS14: PRINTI  "Failed."
46         CRLF    
47         JUMP    ?PRG1
48 ?ELS11: EQUAL?  WRD,W?QUIT,W?Q \?PRG1
49         QUIT    
50         JUMP    ?PRG1
51
52
53         .FUNCT  V-QUIT,SCOR
54         CALL    V-SCORE
55         PRINTI  "Do you wish to leave the game? (Y is affirmative): "
56         CALL    YES?
57         ZERO?   STACK /?ELS7
58         QUIT    
59         RTRUE   
60 ?ELS7:  PRINTR  "Ok."
61
62
63         .FUNCT  V-RESTART
64         CALL    V-SCORE,TRUE-VALUE
65         PRINTI  "Do you wish to restart? (Y is affirmative): "
66         CALL    YES?
67         ZERO?   STACK /FALSE
68         PRINTI  "Restarting."
69         CRLF    
70         RESTART 
71         PRINTR  "Failed."
72
73
74         .FUNCT  V-RESTORE
75         RESTORE  \?ELS5
76         PRINTI  "Ok."
77         CRLF    
78         CALL    V-FIRST-LOOK
79         RSTACK  
80 ?ELS5:  PRINTR  "Failed."
81
82
83         .FUNCT  V-SAVE
84         SAVE     \?ELS5
85         PRINTR  "Ok."
86 ?ELS5:  PRINTR  "Failed."
87
88
89         .FUNCT  V-SCRIPT
90         GET     0,8
91         BOR     STACK,1
92         PUT     0,8,STACK
93         PRINTI  "Here begins a transcript of interaction with"
94         CRLF    
95         CALL    V-VERSION
96         RTRUE   
97
98
99         .FUNCT  V-UNSCRIPT
100         PRINTI  "Here ends a transcript of interaction with"
101         CRLF    
102         CALL    V-VERSION
103         GET     0,8
104         BAND    STACK,-2
105         PUT     0,8,STACK
106         RTRUE   
107
108
109         .FUNCT  V-VERSION,CNT=17
110         PRINTI  "ZORK II: The Wizard of Frobozz
111 Infocom interactive fiction - a fantasy story
112 Copyright (c) 1981, 1982, 1983, 1986"
113         PRINTI  " Infocom, Inc. All rights reserved."
114         CRLF    
115         PRINTI  "ZORK is a registered trademark of Infocom, Inc.
116 Release "
117         GET     0,1
118         BAND    STACK,2047
119         PRINTN  STACK
120         PRINTI  " / Serial number "
121 ?PRG9:  IGRTR?  'CNT,23 \?ELS13
122         JUMP    ?REP10
123 ?ELS13: GETB    0,CNT
124         PRINTC  STACK
125         JUMP    ?PRG9
126 ?REP10: CRLF    
127         RTRUE   
128
129
130         .FUNCT  V-VERIFY
131         PRINTI  "Verifying disk..."
132         CRLF    
133         VERIFY   \?ELS7
134         PRINTR  "The disk is correct."
135 ?ELS7:  CRLF    
136         PRINTR  "** Disk Failure **"
137
138
139         .FUNCT  V-COMMAND-FILE
140         DIRIN   1
141         RTRUE   
142
143
144         .FUNCT  V-RANDOM
145         EQUAL?  PRSO,INTNUM /?ELS5
146         PRINTR  "Illegal call to #RND."
147 ?ELS5:  SUB     0,P-NUMBER
148         RANDOM  STACK
149         RTRUE   
150
151
152         .FUNCT  V-RECORD
153         DIROUT  4
154         RTRUE   
155
156
157         .FUNCT  V-UNRECORD
158         DIROUT  -4
159         RTRUE   
160
161
162         .FUNCT  V-ADVENT
163         PRINTR  "A hollow voice says ""Fool."""
164
165
166         .FUNCT  V-ALARM
167         FSET?   PRSO,ACTORBIT \?ELS5
168         CALL    NULL-F
169         ZERO?   STACK \TRUE
170         PRINTR  "He's wide awake, or haven't you noticed..."
171 ?ELS5:  PRINTI  "The "
172         PRINTD  PRSO
173         PRINTR  " isn't sleeping."
174
175
176         .FUNCT  V-ANSWER
177         PRINTI  "Nobody seems to be awaiting your answer."
178         CRLF    
179         SET     'P-CONT,FALSE-VALUE
180         SET     'QUOTE-FLAG,FALSE-VALUE
181         RTRUE   
182
183
184         .FUNCT  V-ATTACK
185         FSET?   PRSO,ACTORBIT /?ELS5
186         PRINTI  "I've known strange people, but fighting a "
187         PRINTD  PRSO
188         PRINTR  "?"
189 ?ELS5:  ZERO?   PRSI /?THN10
190         EQUAL?  PRSI,HANDS \?ELS9
191 ?THN10: PRINTI  "Trying to attack a "
192         PRINTD  PRSO
193         PRINTR  " with your bare hands is suicidal."
194 ?ELS9:  IN?     PRSI,WINNER /?ELS15
195         PRINTI  "You aren't even holding the "
196         PRINTD  PRSI
197         PRINTR  "."
198 ?ELS15: FSET?   PRSI,WEAPONBIT /?ELS19
199         PRINTI  "Trying to attack the "
200         PRINTD  PRSO
201         PRINTI  " with a "
202         PRINTD  PRSI
203         PRINTR  " is suicidal."
204 ?ELS19: PRINTR  "You can't."
205
206
207         .FUNCT  V-BACK
208         PRINTR  "Sorry, my memory is poor. Please give a direction."
209
210
211         .FUNCT  V-BLAST
212         PRINTR  "You can't blast anything by using words."
213
214
215         .FUNCT  PRE-BOARD,AV
216         LOC     WINNER >AV
217         CALL    NULL-F
218         ZERO?   STACK \TRUE
219         FSET?   PRSO,VEHBIT \?ELS5
220         IN?     PRSO,HERE /?ELS8
221         PRINTI  "The "
222         PRINTD  PRSO
223         PRINTI  " must be on the ground to be boarded."
224         CRLF    
225         RETURN  2
226 ?ELS8:  FSET?   AV,VEHBIT \FALSE
227         PRINTI  "You are already in the "
228         PRINTD  AV
229         PRINTI  "!"
230         CRLF    
231         RETURN  2
232 ?ELS5:  EQUAL?  PRSO,WATER,GLOBAL-WATER \?ELS18
233         CALL    PERFORM,V?SWIM,PRSO
234         RTRUE   
235 ?ELS18: PRINTI  "You have a theory on how to board a "
236         PRINTD  PRSO
237         PRINTI  ", perhaps?"
238         CRLF    
239         RETURN  2
240
241
242         .FUNCT  V-BOARD,AV
243         PRINTI  "You are now in the "
244         PRINTD  PRSO
245         PRINTI  "."
246         CRLF    
247         MOVE    WINNER,PRSO
248         GETP    PRSO,P?ACTION
249         CALL    STACK,M-ENTER
250         RTRUE   
251
252
253         .FUNCT  V-BREATHE
254         CALL    PERFORM,V?INFLATE,PRSO,LUNGS
255         RSTACK  
256
257
258         .FUNCT  V-BRUSH
259         PRINTR  "If you wish, but heaven only knows why."
260
261
262         .FUNCT  V-BUG
263         PRINTR  "Bug? Not in a flawless program like this! (Cough, cough)."
264
265
266         .FUNCT  TELL-NO-PRSI
267         PRINTR  "You didn't say with what!"
268
269
270         .FUNCT  PRE-BURN
271         ZERO?   PRSI \?ELS5
272         CALL    TELL-NO-PRSI
273         RSTACK  
274 ?ELS5:  FSET?   PRSI,FLAMEBIT \?ELS7
275         FSET?   PRSI,ONBIT /FALSE
276 ?ELS7:  PRINTI  "With a "
277         PRINTD  PRSI
278         PRINTR  "??!?"
279
280
281         .FUNCT  V-BURN
282         LOC     PRSO
283         EQUAL?  STACK,RECEPTACLE \?ELS5
284         CALL    BALLOON-BURN
285         RTRUE   
286 ?ELS5:  FSET?   PRSO,BURNBIT \?ELS7
287         IN?     PRSO,WINNER /?THN13
288         IN?     WINNER,PRSO \?ELS12
289 ?THN13: CALL    REMOVE-CAREFULLY,PRSO
290         PRINTI  "The "
291         PRINTD  PRSO
292         PRINTI  " catches fire. Unfortunately, you were "
293         IN?     WINNER,PRSO \?ELS21
294         PRINTI  "in"
295         JUMP    ?CND19
296 ?ELS21: PRINTI  "holding"
297 ?CND19: CALL    JIGS-UP,STR?168
298         RSTACK  
299 ?ELS12: CALL    REMOVE-CAREFULLY,PRSO
300         PRINTI  "The "
301         PRINTD  PRSO
302         PRINTR  " catches fire and is consumed."
303 ?ELS7:  PRINTI  "You can't burn a "
304         PRINTD  PRSO
305         PRINTR  "."
306
307
308         .FUNCT  V-CHOMP
309         PRINTR  "Preposterous!"
310
311
312         .FUNCT  V-CLIMB-DOWN
313         CALL    V-CLIMB-UP,P?DOWN,PRSO
314         RSTACK  
315
316
317         .FUNCT  V-CLIMB-FOO
318         CALL    V-CLIMB-UP,P?UP,PRSO
319         RSTACK  
320
321
322         .FUNCT  V-CLIMB-ON
323         FSET?   PRSO,VEHBIT \?ELS5
324         CALL    PERFORM,V?BOARD,PRSO
325         RTRUE   
326 ?ELS5:  PRINTI  "You can't climb onto the "
327         PRINTD  PRSO
328         PRINTR  "."
329
330
331         .FUNCT  V-CLIMB-UP,DIR=P?UP,OBJ=0,X,TX,?TMP1
332         ZERO?   OBJ /?CND1
333         EQUAL?  PRSO,ROOMS /?CND1
334         SET     'OBJ,PRSO
335 ?CND1:  GETPT   HERE,DIR >TX
336         ZERO?   TX /?ELS10
337         ZERO?   OBJ /?CND11
338         PTSIZE  TX >X
339         EQUAL?  X,NEXIT /?THN18
340         EQUAL?  X,CEXIT,DEXIT,UEXIT \?CND11
341         GETB    TX,0
342         CALL    GLOBAL-IN?,PRSO,STACK
343         ZERO?   STACK \?CND11
344 ?THN18: PRINTI  "The "
345         PRINTD  OBJ
346         PRINTI  " do"
347         EQUAL?  OBJ,STAIRS /?CND24
348         PRINTI  "es"
349 ?CND24: PRINTI  "n't lead "
350         EQUAL?  DIR,P?UP \?ELS33
351         PRINTI  "up"
352         JUMP    ?CND31
353 ?ELS33: PRINTI  "down"
354 ?CND31: PRINTR  "ward."
355 ?CND11: CALL    DO-WALK,DIR
356         RTRUE   
357 ?ELS10: ZERO?   OBJ /?ELS43
358         GETPT   PRSO,P?SYNONYM >X
359         PTSIZE  X
360         CALL    ZMEMQ,W?WALL,X,STACK
361         ZERO?   STACK /?ELS43
362         PRINTR  "Climbing the walls is to no avail."
363 ?ELS43: CALL    NULL-F
364         ZERO?   STACK /?ELS49
365         PRINTR  "There are no climbable trees here."
366 ?ELS49: EQUAL?  OBJ,FALSE-VALUE,ROOMS \?ELS53
367         PRINTR  "You can't go that way."
368 ?ELS53: PRINTR  "You can't do that!"
369
370
371         .FUNCT  V-CLOSE
372         FSET?   PRSO,CONTBIT /?ELS5
373         FSET?   PRSO,DOORBIT /?ELS5
374         PRINTI  "You must tell me how to do that to a "
375         PRINTD  PRSO
376         PRINTR  "."
377 ?ELS5:  FSET?   PRSO,SURFACEBIT /?ELS11
378         GETP    PRSO,P?CAPACITY
379         ZERO?   STACK /?ELS11
380         FSET?   PRSO,OPENBIT \?ELS18
381         FCLEAR  PRSO,OPENBIT
382         PRINTI  "Closed."
383         CRLF    
384         ZERO?   LIT /TRUE
385         CALL    LIT?,HERE >LIT
386         ZERO?   LIT \TRUE
387         PRINTR  "It is now pitch black."
388 ?ELS18: PRINTR  "It is already closed."
389 ?ELS11: FSET?   PRSO,DOORBIT \?ELS33
390         FSET?   PRSO,OPENBIT \?ELS38
391         FCLEAR  PRSO,OPENBIT
392         PRINTI  "The "
393         PRINTD  PRSO
394         PRINTR  " is now closed."
395 ?ELS38: PRINTR  "It is already closed."
396 ?ELS33: PRINTR  "You cannot close that."
397
398
399         .FUNCT  V-COMMAND
400         FSET?   PRSO,ACTORBIT \?ELS5
401         PRINTI  "The "
402         PRINTD  PRSO
403         PRINTR  " pays no attention."
404 ?ELS5:  PRINTR  "You cannot talk to that!"
405
406
407         .FUNCT  V-COUNT
408         EQUAL?  PRSO,BLESSINGS \?ELS5
409         PRINTR  "Well, for one, you are playing Zork..."
410 ?ELS5:  PRINTR  "You have lost your mind."
411
412
413         .FUNCT  V-CROSS
414         PRINTR  "You can't cross that!"
415
416
417         .FUNCT  V-CURSES
418         ZERO?   PRSO /?ELS5
419         FSET?   PRSO,ACTORBIT \?ELS11
420         PRINTR  "Insults of this nature won't help you."
421 ?ELS11: PRINTR  "What a loony!"
422 ?ELS5:  PRINTR  "Such language in a high-class establishment like this!"
423
424
425         .FUNCT  V-CUT
426         FSET?   PRSO,ACTORBIT \?ELS5
427         CALL    PERFORM,V?ATTACK,PRSO,PRSI
428         RSTACK  
429 ?ELS5:  FSET?   PRSO,BURNBIT \?ELS7
430         FSET?   PRSI,WEAPONBIT \?ELS7
431         IN?     WINNER,PRSO \?CND10
432         PRINTR  "Not a bright idea, especially since you're in it."
433 ?CND10: CALL    REMOVE-CAREFULLY,PRSO
434         PRINTI  "Your skillful "
435         PRINTD  PRSI
436         PRINTI  "smanship slices the "
437         PRINTD  PRSO
438         PRINTR  " into innumerable slivers which blow away."
439 ?ELS7:  FSET?   PRSI,WEAPONBIT /?ELS18
440         PRINTI  "The ""cutting edge"" of a "
441         PRINTD  PRSI
442         PRINTR  " is hardly adequate."
443 ?ELS18: PRINTI  "Strange concept, cutting the "
444         PRINTD  PRSO
445         PRINTR  "...."
446
447
448         .FUNCT  V-DEFLATE
449         PRINTR  "Come on, now!"
450
451
452         .FUNCT  V-DIG
453         ZERO?   PRSI \?CND1
454         SET     'PRSI,HANDS
455 ?CND1:  FSET?   PRSI,TOOLBIT \?ELS8
456         PRINTI  "Digging with the "
457         PRINTD  PRSI
458         PRINTR  " is slow and tedious."
459 ?ELS8:  PRINTI  "Digging with a "
460         PRINTD  PRSI
461         PRINTR  " is silly."
462
463
464         .FUNCT  V-DISEMBARK
465         EQUAL?  PRSO,ROOMS \?ELS5
466         LOC     WINNER
467         FSET?   STACK,VEHBIT \?ELS5
468         LOC     WINNER
469         CALL    PERFORM,V?DISEMBARK,STACK
470         RTRUE   
471 ?ELS5:  LOC     WINNER
472         EQUAL?  STACK,PRSO /?ELS9
473         PRINTI  "You're not in that!"
474         CRLF    
475         RETURN  2
476 ?ELS9:  FSET?   HERE,RLANDBIT \?ELS15
477         PRINTI  "You are on your own feet again."
478         CRLF    
479         MOVE    WINNER,HERE
480         RTRUE   
481 ?ELS15: PRINTI  "You realize that getting out here would be fatal."
482         CRLF    
483         RETURN  2
484
485
486         .FUNCT  V-DISENCHANT
487         IN?     PRSO,HERE \TRUE
488         EQUAL?  SPELL-USED,W?FEEBLE,W?FUMBLE,W?FEAR /?THN8
489         EQUAL?  SPELL-USED,W?FREEZE,W?FALL,W?FERMENT /?THN8
490         EQUAL?  SPELL-USED,W?FIERCE,W?FENCE,W?FANTASIZE \?ELS7
491 ?THN8:  FSET?   PRSO,ACTORBIT \FALSE
492         EQUAL?  SPELL-USED,W?FEEBLE \?ELS19
493         PRINTI  "The "
494         PRINTD  PRSO
495         PRINTR  " seems stronger now."
496 ?ELS19: EQUAL?  SPELL-USED,W?FUMBLE \?ELS23
497         PRINTI  "The "
498         PRINTD  PRSO
499         PRINTR  " no longer appears clumsy."
500 ?ELS23: EQUAL?  SPELL-USED,W?FEAR \?ELS27
501         PRINTI  "The "
502         PRINTD  PRSO
503         PRINTR  " no longer appears afraid."
504 ?ELS27: EQUAL?  SPELL-USED,W?FREEZE \?ELS31
505         PRINTI  "The "
506         PRINTD  PRSO
507         PRINTR  " moves again."
508 ?ELS31: EQUAL?  SPELL-USED,W?FERMENT \?ELS35
509         PRINTI  "The "
510         PRINTD  PRSO
511         PRINTR  " stops swaying."
512 ?ELS35: EQUAL?  SPELL-USED,W?FIERCE \FALSE
513         PRINTI  "The "
514         PRINTD  PRSO
515         PRINTR  " appears more peaceful."
516 ?ELS7:  EQUAL?  SPELL-USED,W?FLOAT \?ELS43
517         PRINTI  "The "
518         PRINTD  PRSO
519         PRINTR  " sinks to the ground."
520 ?ELS43: EQUAL?  SPELL-USED,W?FUDGE \FALSE
521         PRINTR  "The sweet smell has dispersed."
522
523
524         .FUNCT  V-DRINK
525         CALL    V-EAT
526         RSTACK  
527
528
529         .FUNCT  V-DRINK-FROM
530         PRINTR  "How peculiar!"
531
532
533         .FUNCT  PRE-DROP
534         LOC     WINNER
535         EQUAL?  PRSO,STACK \FALSE
536         CALL    PERFORM,V?DISEMBARK,PRSO
537         RTRUE   
538
539
540         .FUNCT  V-DROP
541         CALL    IDROP
542         ZERO?   STACK /FALSE
543         PRINTR  "Dropped."
544
545
546         .FUNCT  V-EAT,EAT?=0,DRINK?=0,NOBJ=0
547         FSET?   PRSO,FOODBIT /?PRD6
548         PUSH    0
549         JUMP    ?PRD7
550 ?PRD6:  PUSH    1
551 ?PRD7:  SET     'EAT?,STACK
552         ZERO?   EAT? /?ELS5
553         IN?     PRSO,WINNER /?ELS10
554         LOC     PRSO
555         IN?     STACK,WINNER /?ELS10
556         PRINTI  "You're not holding that."
557         CRLF    
558         JUMP    ?CND8
559 ?ELS10: EQUAL?  PRSA,V?DRINK \?ELS16
560         PRINTI  "How can you drink that?"
561         JUMP    ?CND8
562 ?ELS16: PRINTI  "Thank you very much. It really hit the spot."
563         CALL    REMOVE-CAREFULLY,PRSO
564 ?CND8:  CRLF    
565         RTRUE   
566 ?ELS5:  FSET?   PRSO,DRINKBIT \?ELS24
567         SET     'DRINK?,TRUE-VALUE
568         LOC     PRSO >NOBJ
569         IN?     PRSO,GLOBAL-OBJECTS /?THN30
570         CALL    GLOBAL-IN?,GLOBAL-WATER,HERE
571         ZERO?   STACK \?THN30
572         EQUAL?  PRSO,PSEUDO-OBJECT \?ELS29
573 ?THN30: CALL    HIT-SPOT
574         RSTACK  
575 ?ELS29: ZERO?   NOBJ /?THN34
576         CALL    ACCESSIBLE?,NOBJ
577         ZERO?   STACK \?ELS33
578 ?THN34: PRINTR  "There isn't any water here."
579 ?ELS33: CALL    ACCESSIBLE?,NOBJ
580         ZERO?   STACK /?ELS39
581         PRINTI  "You have to be holding the "
582         PRINTD  NOBJ
583         PRINTR  " first."
584 ?ELS39: FSET?   NOBJ,OPENBIT /?ELS43
585         PRINTI  "You'll have to open the "
586         PRINTD  NOBJ
587         PRINTR  " first."
588 ?ELS43: CALL    HIT-SPOT
589         RSTACK  
590 ?ELS24: ZERO?   EAT? \FALSE
591         ZERO?   DRINK? \FALSE
592         PRINTI  "I don't think that the "
593         PRINTD  PRSO
594         PRINTR  " would agree with you."
595
596
597         .FUNCT  HIT-SPOT
598         EQUAL?  PRSO,WATER \?CND1
599         CALL    GLOBAL-IN?,GLOBAL-WATER,HERE
600         ZERO?   STACK \?CND1
601         CALL    REMOVE-CAREFULLY,PRSO
602 ?CND1:  PRINTR  "Thank you very much. I was rather thirsty (from all this talking, probably)."
603
604
605         .FUNCT  V-ECHO,LST,MAX,ECH=0,CNT
606         PRINTR  "echo echo ..."
607
608
609         .FUNCT  V-ENCHANT
610         ZERO?   WAND-ON /?CND1
611         SET     'SPELL-VICTIM,WAND-ON
612 ?CND1:  ZERO?   SPELL-VICTIM /?ELS9
613         ZERO?   SPELL-USED \?CND11
614         PRINTR  "You must be more specific."
615 ?CND11: EQUAL?  SPELL-USED,W?FEEBLE,W?FUMBLE,W?FEAR /?THN21
616         EQUAL?  SPELL-USED,W?FREEZE,W?FALL,W?FERMENT /?THN21
617         EQUAL?  SPELL-USED,W?FIERCE,W?FENCE,W?FANTASIZE \?ELS20
618 ?THN21: FSET?   PRSO,ACTORBIT \?ELS27
619         PRINTR  "The wand stops glowing, but there is no other obvious effect."
620 ?ELS27: PRINTI  "That might have done something, but it's hard to tell with a "
621         PRINTD  PRSO
622         PRINTR  "."
623 ?ELS20: EQUAL?  SPELL-USED,W?FUDGE \?ELS35
624         PRINTR  "A strong odor of chocolate permeates the room."
625 ?ELS35: EQUAL?  SPELL-USED,W?FLUORESCE \?ELS39
626         FSET    PRSO,LIGHTBIT
627         FSET    PRSO,ONBIT
628         SET     'LIT,TRUE-VALUE
629         PRINTI  "The "
630         PRINTD  PRSO
631         PRINTR  " begins to glow."
632 ?ELS39: EQUAL?  SPELL-USED,W?FILCH \?ELS43
633         SET     'SPELL-HANDLED?,TRUE-VALUE
634         FSET?   PRSO,TAKEBIT \?ELS48
635         MOVE    PRSO,WINNER
636         CALL    SCORE-OBJ,PRSO
637         PRINTR  "Filched!"
638 ?ELS48: PRINTI  "You can't filch the "
639         PRINTD  PRSO
640         PRINTR  "!"
641 ?ELS43: EQUAL?  SPELL-USED,W?FLOAT \?ELS56
642         FSET?   PRSO,TAKEBIT \?ELS56
643         EQUAL?  SPELL-VICTIM,COLLAR \?CND59
644         IN?     COLLAR,CERBERUS \?CND59
645         SET     'SPELL-VICTIM,CERBERUS
646 ?CND59: PRINTI  "The "
647         PRINTD  PRSO
648         PRINTR  " floats serenely in midair."
649 ?ELS56: EQUAL?  SPELL-USED,W?FRY \?ELS67
650         FSET?   PRSO,TAKEBIT \?ELS67
651         SET     'SPELL-HANDLED?,TRUE-VALUE
652         CALL    REMOVE-CAREFULLY,PRSO
653         PRINTI  "The "
654         PRINTD  PRSO
655         PRINTR  " goes up in a puff of smoke."
656 ?ELS67: SET     'SPELL-VICTIM,FALSE-VALUE
657         PRINTR  "The wand stops glowing, but there is no other apparent effect."
658 ?ELS9:  SET     'SPELL-VICTIM,FALSE-VALUE
659         PRINTR  "Nothing happens."
660
661
662         .FUNCT  REMOVE-CAREFULLY,OBJ,OLIT
663         EQUAL?  OBJ,P-IT-OBJECT \?CND1
664         SET     'P-IT-OBJECT,FALSE-VALUE
665 ?CND1:  SET     'OLIT,LIT
666         REMOVE  OBJ
667         CALL    LIT?,HERE >LIT
668         ZERO?   OLIT /TRUE
669         EQUAL?  OLIT,LIT /TRUE
670         PRINTR  "You are left in the dark..."
671
672
673         .FUNCT  V-ENTER
674         CALL    DO-WALK,P?IN
675         RSTACK  
676
677
678         .FUNCT  V-EXAMINE
679         GETP    PRSO,P?TEXT
680         ZERO?   STACK /?ELS5
681         GETP    PRSO,P?TEXT
682         PRINT   STACK
683         CRLF    
684         RTRUE   
685 ?ELS5:  FSET?   PRSO,CONTBIT /?THN10
686         FSET?   PRSO,DOORBIT \?ELS9
687 ?THN10: CALL    V-LOOK-INSIDE
688         RSTACK  
689 ?ELS9:  PRINTI  "There's nothing special about the "
690         PRINTD  PRSO
691         PRINTR  "."
692
693
694         .FUNCT  V-EXIT
695         EQUAL?  PRSO,FALSE-VALUE,ROOMS \?ELS5
696         LOC     WINNER
697         FSET?   STACK,VEHBIT \?ELS5
698         LOC     WINNER
699         CALL    PERFORM,V?DISEMBARK,STACK
700         RTRUE   
701 ?ELS5:  ZERO?   PRSO /?ELS9
702         IN?     WINNER,PRSO \?ELS9
703         CALL    PERFORM,V?DISEMBARK,PRSO
704         RTRUE   
705 ?ELS9:  CALL    DO-WALK,P?OUT
706         RSTACK  
707
708
709         .FUNCT  V-EXORCISE
710         PRINTR  "What a bizarre concept!"
711
712
713         .FUNCT  PRE-FILL,TX
714         ZERO?   PRSI \?CND1
715         GETPT   HERE,P?GLOBAL >TX
716         ZERO?   TX /?ELS6
717         PTSIZE  TX
718         SUB     STACK,1
719         CALL    ZMEMQB,GLOBAL-WATER,TX,STACK
720         ZERO?   STACK /?ELS6
721         CALL    PERFORM,V?FILL,PRSO,GLOBAL-WATER
722         RTRUE   
723 ?ELS6:  LOC     WINNER
724         IN?     WATER,STACK \?ELS10
725         CALL    PERFORM,V?FILL,PRSO,WATER
726         RTRUE   
727 ?ELS10: PRINTR  "There is nothing to fill it with."
728 ?CND1:  EQUAL?  PRSI,WATER /FALSE
729         EQUAL?  PRSI,GLOBAL-WATER /FALSE
730         CALL    PERFORM,V?PUT,PRSI,PRSO
731         RTRUE   
732
733
734         .FUNCT  V-FILL
735         ZERO?   PRSI \?ELS5
736         CALL    GLOBAL-IN?,GLOBAL-WATER,HERE
737         ZERO?   STACK /?ELS10
738         CALL    PERFORM,V?FILL,PRSO,GLOBAL-WATER
739         RTRUE   
740 ?ELS10: LOC     WINNER
741         IN?     WATER,STACK \?ELS12
742         CALL    PERFORM,V?FILL,PRSO,WATER
743         RTRUE   
744 ?ELS12: PRINTR  "There's nothing to fill it with."
745 ?ELS5:  PRINTR  "You may know how to do that, but I don't."
746
747
748         .FUNCT  V-FIND,L
749         LOC     PRSO >L
750         EQUAL?  PRSO,HANDS,LUNGS \?ELS5
751         PRINTR  "Within six feet of your head, assuming you haven't left that somewhere."
752 ?ELS5:  EQUAL?  PRSO,ME \?ELS9
753         PRINTR  "You're around here somewhere..."
754 ?ELS9:  EQUAL?  L,GLOBAL-OBJECTS \?ELS13
755         PRINTR  "You find it."
756 ?ELS13: IN?     PRSO,WINNER \?ELS17
757         PRINTR  "You have it."
758 ?ELS17: IN?     PRSO,HERE /?THN22
759         CALL    GLOBAL-IN?,PRSO,HERE
760         ZERO?   STACK \?THN22
761         EQUAL?  PRSO,PSEUDO-OBJECT \?ELS21
762 ?THN22: PRINTR  "It's right here."
763 ?ELS21: FSET?   L,ACTORBIT \?ELS27
764         PRINTI  "The "
765         PRINTD  L
766         PRINTR  " has it."
767 ?ELS27: FSET?   L,SURFACEBIT \?ELS31
768         PRINTI  "It's on the "
769         PRINTD  L
770         PRINTR  "."
771 ?ELS31: FSET?   L,CONTBIT \?ELS35
772         PRINTI  "It's in the "
773         PRINTD  L
774         PRINTR  "."
775 ?ELS35: PRINTR  "Beats me."
776
777
778         .FUNCT  V-FOLLOW
779         PRINTR  "You're nuts!"
780
781
782         .FUNCT  V-FROBOZZ
783         PRINTR  "The FROBOZZ Corporation created, owns, and operates this dungeon."
784
785
786         .FUNCT  PRE-GIVE
787         CALL    HELD?,PRSO
788         ZERO?   STACK \FALSE
789         PRINTI  "That's easy for you to say since you don't even have the "
790         PRINTD  PRSO
791         PRINTR  "."
792
793
794         .FUNCT  V-GIVE
795         FSET?   PRSI,ACTORBIT /?ELS5
796         PRINTI  "You can't give a "
797         PRINTD  PRSO
798         PRINTI  " to a "
799         PRINTD  PRSI
800         PRINTR  "!"
801 ?ELS5:  PRINTI  "The "
802         PRINTD  PRSI
803         PRINTR  " refuses it politely."
804
805
806         .FUNCT  V-HATCH
807         PRINTR  "Bizarre!"
808
809
810         .FUNCT  V-HELLO
811         ZERO?   PRSO /?ELS5
812         FSET?   PRSO,ACTORBIT \?ELS11
813         PRINTI  "The "
814         PRINTD  PRSO
815         PRINTR  " bows his head to you in greeting."
816 ?ELS11: PRINTI  "It's a well known fact that only schizophrenics say ""Hello"" to a "
817         PRINTD  PRSO
818         PRINTR  "."
819 ?ELS5:  CALL    PICK-ONE,HELLOS
820         PRINT   STACK
821         CRLF    
822         RTRUE   
823
824
825         .FUNCT  V-INCANT
826         ZERO?   SPELL-USED /?ELS3
827         PRINTI  "Nothing happens."
828         CRLF    
829         JUMP    ?CND1
830 ?ELS3:  ZERO?   WAND-ON /?ELS8
831         SET     'SPELL-VICTIM,WAND-ON
832         GET     P-LEXV,P-CONT >SPELL-USED
833         PRINTI  "The wand glows very brightly for a moment."
834         CRLF    
835         RANDOM  10
836         ADD     10,STACK
837         CALL    QUEUE,I-SPELL,STACK
838         PUT     STACK,0,1
839         SET     'WAND-ON,FALSE-VALUE
840         CALL    PERFORM,V?ENCHANT,SPELL-VICTIM
841         JUMP    ?CND1
842 ?ELS8:  PRINTI  "The incantation echoes back faintly, but nothing else happens."
843         CRLF    
844 ?CND1:  SET     'QUOTE-FLAG,FALSE-VALUE
845         SET     'P-CONT,FALSE-VALUE
846         RTRUE   
847
848
849         .FUNCT  V-INFLATE
850         PRINTR  "How can you inflate that?"
851
852
853         .FUNCT  V-KICK
854         CALL    HACK-HACK,STR?169
855         RSTACK  
856
857
858         .FUNCT  V-KISS
859         PRINTR  "I'd sooner kiss a pig."
860
861
862         .FUNCT  V-KNOCK
863         FSET?   PRSO,DOORBIT \?ELS5
864         PRINTR  "Nobody's home."
865 ?ELS5:  PRINTI  "Why knock on a "
866         PRINTD  PRSO
867         PRINTR  "?"
868
869
870         .FUNCT  V-LAMP-OFF
871         FSET?   PRSO,LIGHTBIT \?ELS3
872         FSET?   PRSO,ONBIT /?ELS6
873         PRINTR  "It is already off."
874 ?ELS6:  FCLEAR  PRSO,ONBIT
875         ZERO?   LIT /?CND11
876         CALL    LIT?,HERE >LIT
877 ?CND11: PRINTI  "The "
878         PRINTD  PRSO
879         PRINTI  " is now off."
880         CRLF    
881         ZERO?   LIT \TRUE
882         PRINTI  "It is now pitch black."
883         CRLF    
884         RTRUE   
885 ?ELS3:  PRINTR  "You can't turn that off."
886
887
888         .FUNCT  V-LAMP-ON
889         FSET?   PRSO,LIGHTBIT \?ELS3
890         FSET?   PRSO,ONBIT \?ELS6
891         PRINTR  "It is already on."
892 ?ELS6:  FSET    PRSO,ONBIT
893         PRINTI  "The "
894         PRINTD  PRSO
895         PRINTI  " is now on."
896         CRLF    
897         ZERO?   LIT \TRUE
898         CALL    LIT?,HERE >LIT
899         CRLF    
900         CALL    V-LOOK
901         RTRUE   
902 ?ELS3:  FSET?   PRSO,BURNBIT \?ELS17
903         PRINTI  "If you wish to burn the "
904         PRINTD  PRSO
905         PRINTR  ", you should say so."
906 ?ELS17: PRINTR  "You can't turn that on."
907
908
909         .FUNCT  V-LAUNCH
910         FSET?   PRSO,VEHBIT \?ELS5
911         PRINTR  "You can't launch that by saying ""launch""!"
912 ?ELS5:  PRINTR  "That's pretty weird."
913
914
915         .FUNCT  V-LEAN-ON
916         PRINTR  "Getting tired?"
917
918
919         .FUNCT  V-LEAP,TX,S
920         ZERO?   PRSO /?ELS5
921         IN?     PRSO,HERE \?ELS11
922         FSET?   PRSO,ACTORBIT \?ELS16
923         PRINTI  "The "
924         PRINTD  PRSO
925         PRINTR  " is too big to jump over."
926 ?ELS16: CALL    V-SKIP
927         RSTACK  
928 ?ELS11: PRINTR  "That would be a good trick."
929 ?ELS5:  GETPT   HERE,P?DOWN >TX
930         ZERO?   TX /?ELS26
931         PTSIZE  TX >S
932         EQUAL?  S,2 /?THN32
933         EQUAL?  S,4 \?ELS31
934         GETB    TX,1
935         VALUE   STACK
936         ZERO?   STACK \?ELS31
937 ?THN32: PRINTI  "This was not a very safe place to try jumping."
938         CRLF    
939         CALL    PICK-ONE,JUMPLOSS
940         CALL    JIGS-UP,STACK
941         RSTACK  
942 ?ELS31: CALL    NULL-F
943         ZERO?   STACK \TRUE
944         CALL    V-SKIP
945         RSTACK  
946 ?ELS26: CALL    V-SKIP
947         RSTACK  
948
949
950         .FUNCT  V-LEAVE
951         CALL    DO-WALK,P?OUT
952         RSTACK  
953
954
955         .FUNCT  V-LISTEN
956         PRINTI  "The "
957         PRINTD  PRSO
958         PRINTR  " makes no sound."
959
960
961         .FUNCT  V-LOCK
962         PRINTR  "It doesn't seem to work."
963
964
965         .FUNCT  V-LOOK
966         CALL    DESCRIBE-ROOM,TRUE-VALUE
967         ZERO?   STACK /FALSE
968         CALL    DESCRIBE-OBJECTS,TRUE-VALUE
969         RSTACK  
970
971
972         .FUNCT  V-LOOK-BEHIND
973         PRINTI  "There is nothing behind the "
974         PRINTD  PRSO
975         PRINTR  "."
976
977
978         .FUNCT  V-LOOK-INSIDE
979         FSET?   PRSO,DOORBIT \?ELS5
980         FSET?   PRSO,OPENBIT \?ELS8
981         PRINTI  "The "
982         PRINTD  PRSO
983         PRINTI  " is open, but I can't tell what's beyond it."
984         JUMP    ?CND6
985 ?ELS8:  PRINTI  "The "
986         PRINTD  PRSO
987         PRINTI  " is closed."
988 ?CND6:  CRLF    
989         RTRUE   
990 ?ELS5:  FSET?   PRSO,CONTBIT \?ELS16
991         FSET?   PRSO,ACTORBIT \?ELS21
992         PRINTR  "There is nothing special to be seen."
993 ?ELS21: CALL    SEE-INSIDE?,PRSO
994         ZERO?   STACK /?ELS25
995         FIRST?  PRSO \?ELS30
996         CALL    PRINT-CONT,PRSO
997         ZERO?   STACK \TRUE
998 ?ELS30: CALL    NULL-F
999         ZERO?   STACK \TRUE
1000         PRINTI  "The "
1001         PRINTD  PRSO
1002         PRINTR  " is empty."
1003 ?ELS25: PRINTI  "The "
1004         PRINTD  PRSO
1005         PRINTR  " is closed."
1006 ?ELS16: PRINTI  "You can't look inside a "
1007         PRINTD  PRSO
1008         PRINTR  "."
1009
1010
1011         .FUNCT  V-LOOK-ON
1012         FSET?   PRSO,SURFACEBIT \?ELS5
1013         CALL    PERFORM,V?LOOK-INSIDE,PRSO
1014         RTRUE   
1015 ?ELS5:  PRINTI  "Look on a "
1016         PRINTD  PRSO
1017         PRINTR  "???"
1018
1019
1020         .FUNCT  V-LOOK-UNDER
1021         PRINTR  "There is nothing but dust there."
1022
1023
1024         .FUNCT  V-LOWER
1025         CALL    HACK-HACK,STR?173
1026         RSTACK  
1027
1028
1029         .FUNCT  V-MAKE
1030         PRINTR  "You can't do that."
1031
1032
1033         .FUNCT  V-MELT
1034         PRINTI  "It's not clear that a "
1035         PRINTD  PRSO
1036         PRINTR  " can be melted."
1037
1038
1039         .FUNCT  PRE-MOVE
1040         CALL    HELD?,PRSO
1041         ZERO?   STACK /FALSE
1042         PRINTR  "You aren't an accomplished enough juggler."
1043
1044
1045         .FUNCT  V-MOVE
1046         FSET?   PRSO,TAKEBIT \?ELS5
1047         PRINTI  "Moving the "
1048         PRINTD  PRSO
1049         PRINTR  " reveals nothing."
1050 ?ELS5:  PRINTI  "You can't move the "
1051         PRINTD  PRSO
1052         PRINTR  "."
1053
1054
1055         .FUNCT  V-MUMBLE
1056         PRINTR  "You'll have to speak up if you expect me to hear you!"
1057
1058
1059         .FUNCT  PRE-MUNG
1060         CALL    NULL-F
1061         ZERO?   STACK \TRUE
1062         ZERO?   PRSI /?THN8
1063         FSET?   PRSI,WEAPONBIT /FALSE
1064 ?THN8:  PRINTI  "Trying to destroy the "
1065         PRINTD  PRSO
1066         PRINTI  " with "
1067         ZERO?   PRSI \?ELS14
1068         PRINTI  "your bare hands"
1069         JUMP    ?CND12
1070 ?ELS14: PRINTI  "a "
1071         PRINTD  PRSI
1072 ?CND12: PRINTR  " is futile."
1073
1074
1075         .FUNCT  V-MUNG
1076         FSET?   PRSO,ACTORBIT \?ELS5
1077         CALL    PERFORM,V?ATTACK,PRSO
1078         RTRUE   
1079 ?ELS5:  PRINTR  "Nice try."
1080
1081
1082         .FUNCT  V-ODYSSEUS
1083         CALL    NULL-F
1084         ZERO?   STACK \TRUE
1085         PRINTR  "Wasn't he a sailor?"
1086
1087
1088         .FUNCT  V-OIL
1089         PRINTR  "You probably put spinach in your gas tank, too."
1090
1091
1092         .FUNCT  V-OPEN,F,STR
1093         FSET?   PRSO,CONTBIT \?ELS5
1094         GETP    PRSO,P?CAPACITY
1095         ZERO?   STACK /?ELS5
1096         FSET?   PRSO,OPENBIT \?ELS12
1097         PRINTR  "It is already open."
1098 ?ELS12: FSET    PRSO,OPENBIT
1099         FSET    PRSO,TOUCHBIT
1100         FIRST?  PRSO \?THN22
1101         FSET?   PRSO,TRANSBIT \?ELS21
1102 ?THN22: PRINTR  "Opened."
1103 ?ELS21: FIRST?  PRSO >F \?ELS27
1104         NEXT?   F /?ELS27
1105         FSET?   F,TOUCHBIT /?ELS27
1106         GETP    F,P?FDESC >STR
1107         ZERO?   STR /?ELS27
1108         PRINTI  "The "
1109         PRINTD  PRSO
1110         PRINTI  " opens."
1111         CRLF    
1112         PRINT   STR
1113         CRLF    
1114         RTRUE   
1115 ?ELS27: PRINTI  "Opening the "
1116         PRINTD  PRSO
1117         PRINTI  " reveals "
1118         CALL    PRINT-CONTENTS,PRSO
1119         PRINTR  "."
1120 ?ELS5:  FSET?   PRSO,DOORBIT \?ELS41
1121         FSET?   PRSO,OPENBIT \?ELS46
1122         PRINTR  "It is already open."
1123 ?ELS46: PRINTI  "The "
1124         PRINTD  PRSO
1125         PRINTI  " opens."
1126         CRLF    
1127         FSET    PRSO,OPENBIT
1128         RTRUE   
1129 ?ELS41: PRINTI  "You must tell me how to do that to a "
1130         PRINTD  PRSO
1131         PRINTR  "."
1132
1133
1134         .FUNCT  V-OVERBOARD,LOCN
1135         CALL    NULL-F
1136         ZERO?   STACK \TRUE
1137         LOC     WINNER
1138         FSET?   STACK,VEHBIT \?ELS7
1139         CALL    PERFORM,V?THROW,PRSO
1140         RTRUE   
1141 ?ELS7:  PRINTR  "Huh?"
1142
1143
1144         .FUNCT  V-PICK
1145         PRINTR  "You can't pick that."
1146
1147
1148         .FUNCT  V-PLAY
1149         FSET?   PRSO,ACTORBIT \?ELS5
1150         PRINTI  "You become so engrossed in the role of the "
1151         PRINTD  PRSO
1152         PRINTI  " that you kill yourself, just as he might have done!"
1153         CRLF    
1154         CALL    JIGS-UP,STR?174
1155         RSTACK  
1156 ?ELS5:  PRINTR  "That's silly!"
1157
1158
1159         .FUNCT  V-PLUG
1160         PRINTR  "This has no effect."
1161
1162
1163         .FUNCT  V-POUR-ON
1164         EQUAL?  PRSO,WATER \?ELS5
1165         CALL    REMOVE-CAREFULLY,PRSO
1166         FSET?   PRSI,FLAMEBIT \?ELS10
1167         FSET?   PRSI,ONBIT \?ELS10
1168         PRINTI  "The "
1169         PRINTD  PRSI
1170         PRINTI  " is extinguished."
1171         CRLF    
1172         EQUAL?  PRSI,BINF-FLAG \?CND15
1173         SET     'BINF-FLAG,FALSE-VALUE
1174 ?CND15: FCLEAR  PRSI,ONBIT
1175         FCLEAR  PRSI,FLAMEBIT
1176         RTRUE   
1177 ?ELS10: PRINTI  "The water spills over the "
1178         PRINTD  PRSI
1179         PRINTR  ", to the floor, and evaporates."
1180 ?ELS5:  CALL    NULL-F
1181         ZERO?   STACK \TRUE
1182         PRINTR  "You can't pour that."
1183
1184
1185         .FUNCT  V-PRAY
1186         CALL    NULL-F
1187         ZERO?   STACK \TRUE
1188         PRINTR  "If you pray enough, your prayers may be answered."
1189
1190
1191         .FUNCT  V-PUMP
1192         CALL    NULL-F
1193         ZERO?   STACK \TRUE
1194         CALL    NULL-F
1195         ZERO?   STACK \TRUE
1196         PRINTR  "It's really not clear how."
1197
1198
1199         .FUNCT  V-PUSH
1200         CALL    HACK-HACK,STR?174
1201         RSTACK  
1202
1203
1204         .FUNCT  V-PUSH-TO
1205         PRINTR  "You can't push things to that."
1206
1207
1208         .FUNCT  PRE-PUT
1209         CALL    NULL-F
1210         ZERO?   STACK \FALSE
1211         CALL    PRE-GIVE
1212         RSTACK  
1213
1214
1215         .FUNCT  V-PUT,?TMP1
1216         FSET?   PRSI,OPENBIT /?CND1
1217         FSET?   PRSI,DOORBIT /?CND1
1218         FSET?   PRSI,CONTBIT /?CND1
1219         FSET?   PRSI,VEHBIT \?ELS3
1220         JUMP    ?CND1
1221 ?ELS3:  PRINTR  "You can't do that."
1222 ?CND1:  FSET?   PRSI,OPENBIT /?ELS14
1223         PRINTI  "The "
1224         PRINTD  PRSI
1225         PRINTI  " isn't open."
1226         CRLF    
1227         CALL    THIS-IS-IT,PRSI
1228         RSTACK  
1229 ?ELS14: EQUAL?  PRSI,PRSO \?ELS18
1230         PRINTR  "How can you do that?"
1231 ?ELS18: IN?     PRSO,PRSI \?ELS22
1232         PRINTI  "The "
1233         PRINTD  PRSO
1234         PRINTI  " is already in the "
1235         PRINTD  PRSI
1236         PRINTR  "."
1237 ?ELS22: CALL    WEIGHT,PRSI >?TMP1
1238         CALL    WEIGHT,PRSO
1239         ADD     ?TMP1,STACK >?TMP1
1240         GETP    PRSI,P?SIZE
1241         SUB     ?TMP1,STACK >?TMP1
1242         GETP    PRSI,P?CAPACITY
1243         GRTR?   ?TMP1,STACK \?ELS26
1244         PRINTR  "There's no room."
1245 ?ELS26: CALL    HELD?,PRSO
1246         ZERO?   STACK \?ELS30
1247         FSET?   PRSO,TRYTAKEBIT \?ELS30
1248         PRINTI  "You don't have the "
1249         PRINTD  PRSO
1250         PRINTR  "."
1251 ?ELS30: CALL    HELD?,PRSO
1252         ZERO?   STACK \?ELS36
1253         CALL    ITAKE
1254         ZERO?   STACK /TRUE
1255 ?ELS36: MOVE    PRSO,PRSI
1256         FSET    PRSO,TOUCHBIT
1257         CALL    SCORE-OBJ,PRSO
1258         PRINTR  "Done."
1259
1260
1261         .FUNCT  V-PUT-BEHIND
1262         PRINTR  "That hiding place is too obvious."
1263
1264
1265         .FUNCT  V-PUT-ON
1266         EQUAL?  PRSI,GROUND \?ELS5
1267         CALL    PERFORM,V?DROP,PRSO
1268         RTRUE   
1269 ?ELS5:  FSET?   PRSI,SURFACEBIT \?ELS7
1270         CALL    V-PUT
1271         RSTACK  
1272 ?ELS7:  PRINTI  "There's no good surface on the "
1273         PRINTD  PRSI
1274         PRINTR  "."
1275
1276
1277         .FUNCT  V-PUT-UNDER
1278         PRINTR  "You can't do that."
1279
1280
1281         .FUNCT  V-RAISE
1282         CALL    V-LOWER
1283         RSTACK  
1284
1285
1286         .FUNCT  V-RAPE
1287         PRINTR  "What a (ahem!) strange idea."
1288
1289
1290         .FUNCT  PRE-READ
1291         ZERO?   LIT \?ELS5
1292         PRINTR  "It is impossible to read in the dark."
1293 ?ELS5:  ZERO?   PRSI /FALSE
1294         FSET?   PRSI,TRANSBIT /FALSE
1295         PRINTI  "How does one look through a "
1296         PRINTD  PRSI
1297         PRINTR  "?"
1298
1299
1300         .FUNCT  V-READ
1301         FSET?   PRSO,READBIT /?ELS5
1302         PRINTI  "How does one read a "
1303         PRINTD  PRSO
1304         PRINTR  "?"
1305 ?ELS5:  GETP    PRSO,P?TEXT
1306         PRINT   STACK
1307         CRLF    
1308         RTRUE   
1309
1310
1311         .FUNCT  V-READ-PAGE
1312         CALL    PERFORM,V?READ,PRSO
1313         RTRUE   
1314
1315
1316         .FUNCT  V-REPENT
1317         PRINTR  "It could very well be too late!"
1318
1319
1320         .FUNCT  V-REPLY
1321         PRINTI  "It is hardly likely that the "
1322         PRINTD  PRSO
1323         PRINTI  " is interested."
1324         CRLF    
1325         SET     'P-CONT,FALSE-VALUE
1326         SET     'QUOTE-FLAG,FALSE-VALUE
1327         RTRUE   
1328
1329
1330         .FUNCT  V-RING
1331         PRINTR  "How, exactly, can you ring that?"
1332
1333
1334         .FUNCT  V-RUB
1335         CALL    HACK-HACK,STR?175
1336         RSTACK  
1337
1338
1339         .FUNCT  V-SAY,V
1340         ZERO?   SPELL-USED \?THN4
1341         ZERO?   WAND-ON /?CND1
1342 ?THN4:  CALL    PERFORM,V?INCANT
1343         RTRUE   
1344 ?CND1:  CALL    FIND-IN,HERE,ACTORBIT >V
1345         ZERO?   V /?ELS10
1346         PRINTI  "You must address the "
1347         PRINTD  V
1348         PRINTI  " directly."
1349         CRLF    
1350         SET     'QUOTE-FLAG,FALSE-VALUE
1351         SET     'P-CONT,FALSE-VALUE
1352         RETURN  P-CONT
1353 ?ELS10: GET     P-LEXV,P-CONT
1354         EQUAL?  STACK,W?HELLO \?ELS14
1355         SET     'QUOTE-FLAG,FALSE-VALUE
1356         RTRUE   
1357 ?ELS14: SET     'QUOTE-FLAG,FALSE-VALUE
1358         SET     'P-CONT,FALSE-VALUE
1359         PRINTR  "Talking to yourself is a sign of impending mental collapse."
1360
1361
1362         .FUNCT  V-SEARCH
1363         PRINTR  "You find nothing unusual."
1364
1365
1366         .FUNCT  V-SEND
1367         FSET?   PRSO,ACTORBIT \?ELS5
1368         PRINTI  "Why would you send for the "
1369         PRINTD  PRSO
1370         PRINTR  "?"
1371 ?ELS5:  PRINTR  "That doesn't make sends."
1372
1373
1374         .FUNCT  PRE-SGIVE
1375         CALL    PERFORM,V?GIVE,PRSI,PRSO
1376         RTRUE   
1377
1378
1379         .FUNCT  V-SGIVE
1380         PRINTR  "Foo!"
1381
1382
1383         .FUNCT  V-SHAKE
1384         FSET?   PRSO,ACTORBIT \?ELS5
1385         PRINTR  "This seems to have no effect."
1386 ?ELS5:  FSET?   PRSO,TAKEBIT /?ELS9
1387         PRINTR  "You can't take it; thus, you can't shake it!"
1388 ?ELS9:  FSET?   PRSO,CONTBIT \?ELS13
1389         FSET?   PRSO,OPENBIT \?ELS18
1390         FIRST?  PRSO \?ELS23
1391         CALL    SHAKE-LOOP
1392         PRINTI  "The contents of the "
1393         PRINTD  PRSO
1394         PRINTI  " spill "
1395         FSET?   HERE,RLANDBIT /?ELS28
1396         PRINTI  "out and disappears"
1397         JUMP    ?CND26
1398 ?ELS28: PRINTI  "to the ground"
1399 ?CND26: PRINTR  "."
1400 ?ELS23: PRINTR  "Shaken."
1401 ?ELS18: FIRST?  PRSO \?ELS47
1402         PRINTI  "It sounds like there is something inside the "
1403         PRINTD  PRSO
1404         PRINTR  "."
1405 ?ELS47: PRINTI  "The "
1406         PRINTD  PRSO
1407         PRINTR  " sounds empty."
1408 ?ELS13: PRINTR  "Shaken."
1409
1410
1411         .FUNCT  SHAKE-LOOP,X
1412 ?PRG1:  FIRST?  PRSO >X \TRUE
1413         FSET    X,TOUCHBIT
1414         EQUAL?  X,WATER \?ELS10
1415         PUSH    PSEUDO-OBJECT
1416         JUMP    ?CND6
1417 ?ELS10: FSET?   HERE,RLANDBIT /?ELS12
1418         PUSH    PSEUDO-OBJECT
1419         JUMP    ?CND6
1420 ?ELS12: PUSH    HERE
1421 ?CND6:  MOVE    X,STACK
1422         JUMP    ?PRG1
1423
1424
1425         .FUNCT  V-SKIP
1426         CALL    PICK-ONE,WHEEEEE
1427         PRINT   STACK
1428         CRLF    
1429         RTRUE   
1430
1431
1432         .FUNCT  V-SMELL
1433         PRINTI  "It smells like a "
1434         PRINTD  PRSO
1435         PRINTR  "."
1436
1437
1438         .FUNCT  V-SPIN
1439         PRINTR  "You can't spin that!"
1440
1441
1442         .FUNCT  V-SPRAY
1443         CALL    V-SQUEEZE
1444         RSTACK  
1445
1446
1447         .FUNCT  V-SQUEEZE
1448         FSET?   PRSO,ACTORBIT \?ELS3
1449         PRINTI  "The "
1450         PRINTD  PRSO
1451         PRINTI  " does not understand this."
1452         JUMP    ?CND1
1453 ?ELS3:  PRINTI  "How singularly useless."
1454 ?CND1:  CRLF    
1455         RTRUE   
1456
1457
1458         .FUNCT  V-SSPRAY
1459         CALL    PERFORM,V?SPRAY,PRSI,PRSO
1460         RSTACK  
1461
1462
1463         .FUNCT  V-STAB,W
1464         CALL    FIND-WEAPON,WINNER >W
1465         ZERO?   W /?ELS5
1466         CALL    PERFORM,V?ATTACK,PRSO,W
1467         RTRUE   
1468 ?ELS5:  PRINTI  "No doubt you propose to stab the "
1469         PRINTD  PRSO
1470         PRINTR  " with your pinky?"
1471
1472
1473         .FUNCT  V-STAND
1474         LOC     WINNER
1475         FSET?   STACK,VEHBIT \?ELS5
1476         LOC     WINNER
1477         CALL    PERFORM,V?DISEMBARK,STACK
1478         RTRUE   
1479 ?ELS5:  PRINTR  "You are already standing, I think."
1480
1481
1482         .FUNCT  V-STAY
1483         PRINTR  "You will be lost without me!"
1484
1485
1486         .FUNCT  V-STRIKE
1487         FSET?   PRSO,ACTORBIT \?ELS5
1488         PRINTI  "Since you aren't versed in hand-to-hand combat, you'd better attack the "
1489         PRINTD  PRSO
1490         PRINTR  " with a weapon."
1491 ?ELS5:  CALL    PERFORM,V?LAMP-ON,PRSO
1492         RTRUE   
1493
1494
1495         .FUNCT  V-SWIM
1496         CALL    GLOBAL-IN?,GLOBAL-WATER,HERE
1497         ZERO?   STACK /?ELS5
1498         PRINTI  "Swimming isn't usually allowed in the "
1499         EQUAL?  PRSO,WATER,GLOBAL-WATER /?ELS10
1500         PRINTD  PRSO
1501         PRINTI  "."
1502         JUMP    ?CND8
1503 ?ELS10: PRINTI  "dungeon."
1504 ?CND8:  CRLF    
1505         RTRUE   
1506 ?ELS5:  CALL    NULL-F
1507         ZERO?   STACK \FALSE
1508         PRINTR  "Go jump in a lake!"
1509
1510
1511         .FUNCT  V-SWING
1512         ZERO?   PRSI \?ELS5
1513         PRINTR  "Whoosh!"
1514 ?ELS5:  CALL    PERFORM,V?ATTACK,PRSI,PRSO
1515         RSTACK  
1516
1517
1518         .FUNCT  PRE-TAKE
1519         IN?     PRSO,WINNER \?ELS5
1520         FSET?   PRSO,WEARBIT \?ELS10
1521         PRINTR  "You are already wearing it."
1522 ?ELS10: PRINTR  "You already have that!"
1523 ?ELS5:  LOC     PRSO
1524         FSET?   STACK,CONTBIT \?ELS18
1525         LOC     PRSO
1526         FSET?   STACK,OPENBIT /?ELS18
1527         PRINTR  "You can't reach something that's inside a closed container."
1528 ?ELS18: ZERO?   PRSI /?ELS24
1529         EQUAL?  PRSI,GROUND \?CND26
1530         SET     'PRSI,FALSE-VALUE
1531         RFALSE  
1532 ?CND26: EQUAL?  PRSO,DOOR-KEEPER \?CND29
1533         SET     'PRSI,FALSE-VALUE
1534         RFALSE  
1535 ?CND29: LOC     PRSO
1536         EQUAL?  PRSI,STACK /?ELS36
1537         PRINTI  "The "
1538         PRINTD  PRSO
1539         PRINTI  " isn't in the "
1540         PRINTD  PRSI
1541         PRINTR  "."
1542 ?ELS36: SET     'PRSI,FALSE-VALUE
1543         RFALSE  
1544 ?ELS24: LOC     WINNER
1545         EQUAL?  PRSO,STACK \FALSE
1546         PRINTR  "You're inside of it!"
1547
1548
1549         .FUNCT  V-TAKE
1550         CALL    ITAKE
1551         EQUAL?  STACK,TRUE-VALUE \FALSE
1552         FSET?   PRSO,WEARBIT \?ELS10
1553         PRINTI  "You are now wearing the "
1554         PRINTD  PRSO
1555         PRINTR  "."
1556 ?ELS10: PRINTR  "Taken."
1557
1558
1559         .FUNCT  V-TELL
1560         FSET?   PRSO,ACTORBIT \?ELS5
1561         ZERO?   P-CONT /?ELS10
1562         SET     'WINNER,PRSO
1563         LOC     WINNER >HERE
1564         RETURN  HERE
1565 ?ELS10: PRINTI  "The "
1566         PRINTD  PRSO
1567         PRINTR  " pauses for a moment, perhaps thinking that you should reread the manual."
1568 ?ELS5:  PRINTI  "You can't talk to the "
1569         PRINTD  PRSO
1570         PRINTI  "!"
1571         CRLF    
1572         SET     'QUOTE-FLAG,FALSE-VALUE
1573         SET     'P-CONT,FALSE-VALUE
1574         RETURN  2
1575
1576
1577         .FUNCT  V-THROUGH,OBJ=0,M
1578         FSET?   PRSO,DOORBIT \?ELS5
1579         CALL    OTHER-SIDE,PRSO >M
1580         ZERO?   M /?ELS5
1581         CALL    DO-WALK,M
1582         RTRUE   
1583 ?ELS5:  ZERO?   OBJ \?ELS9
1584         FSET?   PRSO,VEHBIT \?ELS9
1585         CALL    PERFORM,V?BOARD,PRSO
1586         RTRUE   
1587 ?ELS9:  ZERO?   OBJ \?THN14
1588         FSET?   PRSO,TAKEBIT /?ELS13
1589 ?THN14: ZERO?   SCOL-ROOM /?ELS18
1590         ZERO?   OBJ \?THN21
1591         EQUAL?  PRSO,CURTAIN \?ELS18
1592 ?THN21: CALL    SCOL-GO,OBJ
1593         RTRUE   
1594 ?ELS18: EQUAL?  HERE,DEPOSITORY \?ELS24
1595         EQUAL?  PRSO,SNWL \?ELS24
1596         ZERO?   SCOL-ROOM /?ELS24
1597         CALL    SCOL-GO,OBJ
1598         RTRUE   
1599 ?ELS24: EQUAL?  HERE,SCOL-ACTIVE \?ELS28
1600         CALL    GET-WALL,HERE >M
1601         GET     M,1
1602         EQUAL?  PRSO,STACK \?ELS28
1603         GET     M,2 >SCOL-ROOM
1604         GETP    PRSO,P?SIZE >PRSO
1605         ZERO?   OBJ /?ELS33
1606         CALL    SCOL-OBJ,OBJ,0,DEPOSITORY
1607         RTRUE   
1608 ?ELS33: CALL    SCOL-THROUGH,0,DEPOSITORY
1609         RTRUE   
1610 ?ELS28: EQUAL?  PRSO,CURTAIN \?CND16
1611         PRINTR  "You can't go more than part way through the curtain."
1612 ?CND16: PRINTI  "You hit your head against the "
1613         PRINTD  PRSO
1614         PRINTR  " as you attempt this feat."
1615 ?ELS13: IN?     PRSO,WINNER \?ELS44
1616         PRINTR  "That would involve quite a contortion!"
1617 ?ELS44: CALL    PICK-ONE,YUKS
1618         PRINT   STACK
1619         CRLF    
1620         RTRUE   
1621
1622
1623         .FUNCT  V-THROW
1624         CALL    IDROP
1625         ZERO?   STACK /?ELS5
1626         EQUAL?  PRSI,ME \?ELS10
1627         PRINTI  "A terrific throw! The "
1628         PRINTD  PRSO
1629         SET     'WINNER,PLAYER
1630         CALL    JIGS-UP,STR?180
1631         RSTACK  
1632 ?ELS10: ZERO?   PRSI /?ELS14
1633         FSET?   PRSI,ACTORBIT \?ELS14
1634         PRINTI  "The "
1635         PRINTD  PRSI
1636         PRINTI  " ducks as the "
1637         PRINTD  PRSO
1638         PRINTR  " flies by and crashes to the ground."
1639 ?ELS14: PRINTR  "Thrown."
1640 ?ELS5:  PRINTR  "Huh?"
1641
1642
1643         .FUNCT  V-THROW-OFF
1644         PRINTR  "You can't throw anything off of that!"
1645
1646
1647         .FUNCT  V-TIE
1648         EQUAL?  PRSI,WINNER \?ELS5
1649         PRINTR  "You can't tie anything to yourself."
1650 ?ELS5:  PRINTI  "You can't tie the "
1651         PRINTD  PRSO
1652         PRINTR  " to that."
1653
1654
1655         .FUNCT  V-TIE-UP
1656         PRINTR  "You could certainly never tie it with that!"
1657
1658
1659         .FUNCT  V-TREASURE
1660         CALL    NULL-F
1661         ZERO?   STACK \TRUE
1662         CALL    NULL-F
1663         ZERO?   STACK \TRUE
1664         PRINTR  "Nothing happens."
1665
1666
1667         .FUNCT  PRE-TURN
1668         EQUAL?  PRSI,FALSE-VALUE,ROOMS \?ELS5
1669         PRINTR  "Your bare hands don't appear to be enough."
1670 ?ELS5:  FSET?   PRSO,TURNBIT /FALSE
1671         PRINTR  "You can't turn that!"
1672
1673
1674         .FUNCT  V-TURN
1675         PRINTR  "This has no effect."
1676
1677
1678         .FUNCT  V-UNLOCK
1679         CALL    V-LOCK
1680         RSTACK  
1681
1682
1683         .FUNCT  V-UNTIE
1684         PRINTR  "This cannot be tied, so it cannot be untied!"
1685
1686
1687         .FUNCT  V-WAIT,NUM=3
1688         PRINTI  "Time passes..."
1689         CRLF    
1690 ?PRG3:  DLESS?  'NUM,0 \?ELS7
1691         JUMP    ?REP4
1692 ?ELS7:  CALL    CLOCKER
1693         ZERO?   STACK /?PRG3
1694 ?REP4:  SET     'CLOCK-WAIT,TRUE-VALUE
1695         RETURN  CLOCK-WAIT
1696
1697
1698         .FUNCT  V-WALK,PT,PTS,STR,OBJ,RM
1699         ZERO?   P-WALK-DIR \?ELS5
1700         CALL    PERFORM,V?WALK-TO,PRSO
1701         RTRUE   
1702 ?ELS5:  GETPT   HERE,PRSO >PT
1703         ZERO?   PT /?ELS7
1704         PTSIZE  PT >PTS
1705         EQUAL?  PTS,UEXIT \?ELS12
1706         GETB    PT,REXIT
1707         CALL    GOTO,STACK
1708         RSTACK  
1709 ?ELS12: EQUAL?  PTS,NEXIT \?ELS14
1710         GET     PT,NEXITSTR
1711         PRINT   STACK
1712         CRLF    
1713         RETURN  2
1714 ?ELS14: EQUAL?  PTS,FEXIT \?ELS20
1715         GET     PT,FEXITFCN
1716         CALL    STACK >RM
1717         ZERO?   RM /?ELS25
1718         CALL    GOTO,RM
1719         RSTACK  
1720 ?ELS25: CALL    NULL-F
1721         ZERO?   STACK \FALSE
1722         RETURN  2
1723 ?ELS20: EQUAL?  PTS,CEXIT \?ELS33
1724         GETB    PT,CEXITFLAG
1725         VALUE   STACK
1726         ZERO?   STACK /?ELS38
1727         GETB    PT,REXIT
1728         CALL    GOTO,STACK
1729         RSTACK  
1730 ?ELS38: GET     PT,CEXITSTR >STR
1731         ZERO?   STR /?ELS40
1732         PRINT   STR
1733         CRLF    
1734         RETURN  2
1735 ?ELS40: PRINTI  "You can't go that way."
1736         CRLF    
1737         RETURN  2
1738 ?ELS33: EQUAL?  PTS,DEXIT \FALSE
1739         GETB    PT,DEXITOBJ >OBJ
1740         FSET?   OBJ,OPENBIT \?ELS57
1741         GETB    PT,REXIT
1742         CALL    GOTO,STACK
1743         RSTACK  
1744 ?ELS57: GET     PT,DEXITSTR >STR
1745         ZERO?   STR /?ELS59
1746         PRINT   STR
1747         CRLF    
1748         RETURN  2
1749 ?ELS59: PRINTI  "The "
1750         PRINTD  OBJ
1751         PRINTI  " is closed."
1752         CRLF    
1753         CALL    THIS-IS-IT,OBJ
1754         RETURN  2
1755 ?ELS7:  ZERO?   LIT \?ELS71
1756         RANDOM  100
1757         GRTR?   80,STACK \?ELS71
1758         EQUAL?  WINNER,ADVENTURER \?ELS71
1759         FSET?   HERE,NONLANDBIT /?ELS71
1760         ZERO?   SPRAYED? /?ELS78
1761         PRINTI  "There are odd noises in the darkness, and there is no exit in that direction."
1762         CRLF    
1763         RETURN  2
1764 ?ELS78: CALL    NULL-F
1765         ZERO?   STACK \FALSE
1766         CALL    JIGS-UP,STR?181
1767         RSTACK  
1768 ?ELS71: PRINTI  "You can't go that way."
1769         CRLF    
1770         RETURN  2
1771
1772
1773         .FUNCT  V-WALK-AROUND
1774         PRINTR  "Use compass directions for movement."
1775
1776
1777         .FUNCT  V-WALK-TO
1778         ZERO?   PRSO /?ELS5
1779         IN?     PRSO,HERE /?THN8
1780         CALL    GLOBAL-IN?,PRSO,HERE
1781         ZERO?   STACK /?ELS5
1782 ?THN8:  PRINTR  "It's here!"
1783 ?ELS5:  PRINTR  "You should supply a direction!"
1784
1785
1786         .FUNCT  V-WAVE
1787         CALL    HACK-HACK,STR?182
1788         RSTACK  
1789
1790
1791         .FUNCT  V-WEAR
1792         FSET?   PRSO,WEARBIT /?ELS5
1793         PRINTI  "You can't wear the "
1794         PRINTD  PRSO
1795         PRINTR  "."
1796 ?ELS5:  CALL    PERFORM,V?TAKE,PRSO
1797         RTRUE   
1798
1799
1800         .FUNCT  V-WIN
1801         PRINTR  "Naturally!"
1802
1803
1804         .FUNCT  V-WIND
1805         PRINTI  "You cannot wind up a "
1806         PRINTD  PRSO
1807         PRINTR  "."
1808
1809
1810         .FUNCT  V-WISH
1811         CALL    PERFORM,V?MAKE,WISH
1812         RSTACK  
1813
1814
1815         .FUNCT  V-YELL
1816         PRINTR  "Aaaarrrrgggghhhh!"
1817
1818
1819         .FUNCT  V-ZORK
1820         PRINTR  "At your service!"
1821
1822
1823         .FUNCT  V-FIRST-LOOK
1824         CALL    DESCRIBE-ROOM
1825         ZERO?   STACK /FALSE
1826         ZERO?   SUPER-BRIEF \FALSE
1827         CALL    DESCRIBE-OBJECTS
1828         RSTACK  
1829
1830
1831         .FUNCT  DESCRIBE-ROOM,LOOK?=0,V?,STR,AV
1832         ZERO?   LOOK? /?ORP4
1833         PUSH    LOOK?
1834         JUMP    ?THN1
1835 ?ORP4:  PUSH    VERBOSE
1836 ?THN1:  POP     'V?
1837         ZERO?   LIT \?CND5
1838         PRINTI  "It is pitch black."
1839         ZERO?   SPRAYED? \?CND10
1840         PRINTI  " You are likely to be eaten by a grue."
1841 ?CND10: CRLF    
1842         CALL    NULL-F
1843         RFALSE  
1844 ?CND5:  FSET?   HERE,TOUCHBIT /?CND15
1845         FSET    HERE,TOUCHBIT
1846         SET     'V?,TRUE-VALUE
1847 ?CND15: CALL    NULL-F
1848         IN?     HERE,ROOMS \?CND18
1849         PRINTD  HERE
1850         LOC     WINNER >AV
1851         FSET?   AV,VEHBIT \?CND23
1852         PRINTI  ", in the "
1853         PRINTD  AV
1854 ?CND23: CRLF    
1855 ?CND18: ZERO?   LOOK? \?THN31
1856         ZERO?   SUPER-BRIEF /?THN31
1857         EQUAL?  HERE,ZORK3 \TRUE
1858 ?THN31: LOC     WINNER >AV
1859         ZERO?   V? /?ELS35
1860         GETP    HERE,P?ACTION
1861         CALL    STACK,M-LOOK
1862         ZERO?   STACK \TRUE
1863 ?ELS35: ZERO?   V? /?ELS39
1864         GETP    HERE,P?LDESC >STR
1865         ZERO?   STR /?ELS39
1866         PRINT   STR
1867         CRLF    
1868         JUMP    ?CND33
1869 ?ELS39: GETP    HERE,P?ACTION
1870         CALL    STACK,M-FLASH
1871 ?CND33: EQUAL?  HERE,AV /TRUE
1872         FSET?   AV,VEHBIT \TRUE
1873         GETP    AV,P?ACTION
1874         CALL    STACK,M-LOOK
1875         RTRUE   
1876
1877
1878         .FUNCT  DESCRIBE-OBJECTS,V?=0
1879         ZERO?   LIT /?ELS5
1880         FIRST?  HERE \FALSE
1881         ZERO?   V? /?ORP15
1882         PUSH    V?
1883         JUMP    ?THN12
1884 ?ORP15: PUSH    VERBOSE
1885 ?THN12: POP     'V?
1886         CALL    PRINT-CONT,HERE,V?,-1
1887         RSTACK  
1888 ?ELS5:  PRINTR  "Only bats can see in the dark. And you're not one."
1889
1890
1891         .FUNCT  DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV
1892         SET     'DESC-OBJECT,OBJ
1893         ZERO?   LEVEL \?ELS3
1894         GETP    OBJ,P?DESCFCN
1895         CALL    STACK,M-OBJDESC
1896         ZERO?   STACK \TRUE
1897 ?ELS3:  ZERO?   LEVEL \?ELS7
1898         FSET?   OBJ,TOUCHBIT /?ELS13
1899         GETP    OBJ,P?FDESC >STR
1900         ZERO?   STR \?THN10
1901 ?ELS13: GETP    OBJ,P?LDESC >STR
1902         ZERO?   STR /?ELS7
1903 ?THN10: PRINT   STR
1904         JUMP    ?CND1
1905 ?ELS7:  ZERO?   LEVEL \?ELS17
1906         PRINTI  "There is a "
1907         PRINTD  OBJ
1908         PRINTI  " here"
1909         FSET?   OBJ,ONBIT \?CND20
1910         PRINTI  " (providing light)"
1911 ?CND20: PRINTI  "."
1912         JUMP    ?CND1
1913 ?ELS17: GET     INDENTS,LEVEL
1914         PRINT   STACK
1915         PRINTI  "A "
1916         PRINTD  OBJ
1917         FSET?   OBJ,ONBIT \?ELS35
1918         PRINTI  " (providing light)"
1919         JUMP    ?CND1
1920 ?ELS35: FSET?   OBJ,WEARBIT \?CND1
1921         IN?     OBJ,WINNER \?CND1
1922         PRINTI  " (being worn)"
1923 ?CND1:  EQUAL?  OBJ,SPELL-VICTIM \?CND44
1924         EQUAL?  SPELL-USED,W?FLOAT \?CND44
1925         PRINTI  " (floating in midair)"
1926 ?CND44: ZERO?   LEVEL \?CND51
1927         LOC     WINNER >AV
1928         ZERO?   AV /?CND51
1929         FSET?   AV,VEHBIT \?CND51
1930         PRINTI  " (outside the "
1931         PRINTD  AV
1932         PRINTI  ")"
1933 ?CND51: CRLF    
1934         CALL    SEE-INSIDE?,OBJ
1935         ZERO?   STACK /FALSE
1936         FIRST?  OBJ \FALSE
1937         CALL    PRINT-CONT,OBJ,V?,LEVEL
1938         RSTACK  
1939
1940
1941         .FUNCT  PRINT-CONTENTS,OBJ,F,N,1ST?=1,IT?=0,TWO?=0
1942         FIRST?  OBJ >F \FALSE
1943 ?PRG6:  NEXT?   F >N /?KLU38
1944 ?KLU38: ZERO?   1ST? /?ELS10
1945         SET     '1ST?,FALSE-VALUE
1946         JUMP    ?CND8
1947 ?ELS10: PRINTI  ", "
1948         ZERO?   N \?CND8
1949         PRINTI  "and "
1950 ?CND8:  PRINTI  "a "
1951         PRINTD  F
1952         ZERO?   IT? \?ELS25
1953         ZERO?   TWO? \?ELS25
1954         SET     'IT?,F
1955         JUMP    ?CND23
1956 ?ELS25: SET     'TWO?,TRUE-VALUE
1957         SET     'IT?,FALSE-VALUE
1958 ?CND23: SET     'F,N
1959         ZERO?   F \?PRG6
1960         ZERO?   IT? /TRUE
1961         ZERO?   TWO? \TRUE
1962         CALL    THIS-IS-IT,IT?
1963         RTRUE   
1964
1965
1966         .FUNCT  PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,SHIT,AV,STR,PV?=0,INV?=0
1967         FIRST?  OBJ >Y \TRUE
1968         LOC     WINNER >AV
1969         ZERO?   AV /?ELS6
1970         FSET?   AV,VEHBIT \?ELS6
1971         JUMP    ?CND4
1972 ?ELS6:  SET     'AV,FALSE-VALUE
1973 ?CND4:  SET     '1ST?,TRUE-VALUE
1974         SET     'SHIT,TRUE-VALUE
1975         LOC     OBJ
1976         EQUAL?  WINNER,OBJ,STACK \?ELS13
1977         SET     'INV?,TRUE-VALUE
1978         JUMP    ?CND11
1979 ?ELS13: 
1980 ?PRG16: ZERO?   Y \?ELS20
1981         ZERO?   LEVEL \?REP17
1982         EQUAL?  SPELL?,S-FANTASIZE \?REP17
1983         RANDOM  100
1984         GRTR?   20,STACK \?REP17
1985         PRINTI  "There is a "
1986         CALL    PICK-ONE,FANTASIES
1987         PRINT   STACK
1988         PRINTI  " here."
1989         CRLF    
1990         SET     '1ST?,FALSE-VALUE
1991         JUMP    ?REP17
1992 ?ELS20: EQUAL?  Y,AV \?ELS29
1993         SET     'PV?,TRUE-VALUE
1994         JUMP    ?CND18
1995 ?ELS29: EQUAL?  Y,WINNER \?ELS31
1996         JUMP    ?CND18
1997 ?ELS31: FSET?   Y,INVISIBLE /?CND18
1998         FSET?   Y,TOUCHBIT /?CND18
1999         GETP    Y,P?FDESC >STR
2000         ZERO?   STR /?CND18
2001         FSET?   Y,NDESCBIT /?CND36
2002         PRINT   STR
2003         CRLF    
2004         SET     'SHIT,FALSE-VALUE
2005 ?CND36: CALL    SEE-INSIDE?,Y
2006         ZERO?   STACK /?CND18
2007         LOC     Y
2008         GETP    STACK,P?DESCFCN
2009         ZERO?   STACK \?CND18
2010         FIRST?  Y \?CND18
2011         CALL    PRINT-CONT,Y,V?,0
2012         ZERO?   STACK /?CND41
2013         SET     '1ST?,FALSE-VALUE
2014 ?CND41: 
2015 ?CND18: NEXT?   Y >Y /?KLU96
2016 ?KLU96: JUMP    ?PRG16
2017 ?REP17: 
2018 ?CND11: FIRST?  OBJ >Y /?KLU97
2019 ?KLU97: 
2020 ?PRG49: ZERO?   Y \?ELS53
2021         ZERO?   PV? /?REP50
2022         ZERO?   AV /?REP50
2023         FIRST?  AV \?REP50
2024         INC     'LEVEL
2025         CALL    PRINT-CONT,AV,V?,LEVEL
2026         JUMP    ?REP50
2027 ?ELS53: EQUAL?  Y,AV,ADVENTURER \?ELS60
2028         JUMP    ?CND51
2029 ?ELS60: FSET?   Y,INVISIBLE /?CND51
2030         ZERO?   INV? \?THN65
2031         FSET?   Y,TOUCHBIT /?THN65
2032         GETP    Y,P?FDESC
2033         ZERO?   STACK \?CND51
2034 ?THN65: FSET?   Y,NDESCBIT /?ELS69
2035         ZERO?   1ST? /?CND70
2036         CALL    FIRSTER,OBJ,LEVEL
2037         ZERO?   STACK /?CND74
2038         LESS?   LEVEL,0 \?CND74
2039         SET     'LEVEL,0
2040 ?CND74: INC     'LEVEL
2041         SET     '1ST?,FALSE-VALUE
2042 ?CND70: LESS?   LEVEL,0 \?CND80
2043         SET     'LEVEL,0
2044 ?CND80: CALL    DESCRIBE-OBJECT,Y,V?,LEVEL
2045         JUMP    ?CND51
2046 ?ELS69: FIRST?  Y \?CND51
2047         CALL    SEE-INSIDE?,Y
2048         ZERO?   STACK /?CND51
2049         INC     'LEVEL
2050         CALL    PRINT-CONT,Y,V?,LEVEL
2051         DEC     'LEVEL
2052 ?CND51: NEXT?   Y >Y /?KLU98
2053 ?KLU98: JUMP    ?PRG49
2054 ?REP50: ZERO?   1ST? /TRUE
2055         ZERO?   SHIT /TRUE
2056         RFALSE  
2057
2058
2059         .FUNCT  FIRSTER,OBJ,LEVEL
2060         CALL    NULL-F
2061         ZERO?   STACK \TRUE
2062         EQUAL?  OBJ,WINNER \?ELS7
2063         PRINTR  "You are carrying:"
2064 ?ELS7:  IN?     OBJ,ROOMS /FALSE
2065         GRTR?   LEVEL,0 \?CND12
2066         GET     INDENTS,LEVEL
2067         PRINT   STACK
2068 ?CND12: FSET?   OBJ,SURFACEBIT \?ELS21
2069         PRINTI  "Sitting on the "
2070         PRINTD  OBJ
2071         PRINTR  " is: "
2072 ?ELS21: FSET?   OBJ,ACTORBIT \?ELS25
2073         PRINTI  "The "
2074         PRINTD  OBJ
2075         PRINTR  " is holding: "
2076 ?ELS25: PRINTI  "The "
2077         PRINTD  OBJ
2078         PRINTR  " contains:"
2079
2080
2081         .FUNCT  SEE-INSIDE?,OBJ
2082         FSET?   OBJ,INVISIBLE /FALSE
2083         FSET?   OBJ,TRANSBIT /TRUE
2084         FSET?   OBJ,OPENBIT /TRUE
2085         RFALSE  
2086
2087
2088         .FUNCT  SCORE-UPD,NUM
2089         ADD     BASE-SCORE,NUM >BASE-SCORE
2090         ADD     SCORE,NUM >SCORE
2091         CALL    NULL-F
2092         RTRUE   
2093
2094
2095         .FUNCT  SCORE-OBJ,OBJ,TEMP
2096         GETP    OBJ,P?VALUE >TEMP
2097         GRTR?   TEMP,0 \FALSE
2098         CALL    SCORE-UPD,TEMP
2099         PUTP    OBJ,P?VALUE,0
2100         RTRUE   
2101
2102
2103         .FUNCT  YES?
2104         PRINTI  ">"
2105         READ    P-INBUF,P-LEXV
2106         GET     P-LEXV,1
2107         EQUAL?  STACK,W?YES,W?Y \FALSE
2108         RTRUE   
2109
2110
2111         .FUNCT  ITAKE,VB=1,CNT,OBJ,?TMP1
2112         CALL    NULL-F
2113         ZERO?   STACK \FALSE
2114         FSET?   PRSO,TAKEBIT /?ELS7
2115         ZERO?   VB /FALSE
2116         CALL    PICK-ONE,YUKS
2117         PRINT   STACK
2118         CRLF    
2119         RFALSE  
2120 ?ELS7:  EQUAL?  PRSO,SPELL-VICTIM \?ELS15
2121         EQUAL?  SPELL-USED,W?FLOAT,W?FREEZE \?ELS15
2122         EQUAL?  SPELL-USED,W?FLOAT \?ELS20
2123         PRINTI  "You can't reach that. It's floating above your head."
2124         CRLF    
2125         RFALSE  
2126 ?ELS20: PRINTI  "It seems rooted to the spot."
2127         CRLF    
2128         RFALSE  
2129 ?ELS15: LOC     PRSO
2130         FSET?   STACK,CONTBIT \?ELS28
2131         LOC     PRSO
2132         FSET?   STACK,OPENBIT \FALSE
2133 ?ELS28: LOC     PRSO
2134         IN?     STACK,WINNER /?ELS32
2135         CALL    WEIGHT,PRSO >?TMP1
2136         CALL    WEIGHT,WINNER
2137         ADD     ?TMP1,STACK
2138         GRTR?   STACK,LOAD-ALLOWED \?ELS32
2139         ZERO?   VB /?CND35
2140         PRINTI  "Your load is too heavy"
2141         LESS?   LOAD-ALLOWED,LOAD-MAX \?ELS43
2142         PRINTI  ", especially in light of your condition."
2143         JUMP    ?CND41
2144 ?ELS43: PRINTI  "."
2145 ?CND41: CRLF    
2146 ?CND35: RETURN  2
2147 ?ELS32: EQUAL?  PRSA,V?TAKE \?ELS53
2148         CALL    CCOUNT,WINNER >CNT
2149         GRTR?   CNT,FUMBLE-NUMBER \?ELS53
2150         MUL     CNT,FUMBLE-PROB >?TMP1
2151         RANDOM  100
2152         GRTR?   ?TMP1,STACK \?ELS53
2153         PRINTI  "You're holding too many things already!"
2154         CRLF    
2155         RFALSE  
2156 ?ELS53: MOVE    PRSO,WINNER
2157         FCLEAR  PRSO,NDESCBIT
2158         FSET    PRSO,TOUCHBIT
2159         EQUAL?  SPELL?,S-FILCH \?CND60
2160         CALL    RIPOFF,PRSO,WIZARD-CASE
2161         ZERO?   STACK /?CND60
2162         PRINTI  "When you touch the "
2163         PRINTD  PRSO
2164         PRINTI  " it immediately disappears!"
2165         CRLF    
2166         RFALSE  
2167 ?CND60: CALL    SCORE-OBJ,PRSO
2168         RTRUE   
2169
2170
2171         .FUNCT  IDROP
2172         IN?     PRSO,WINNER /?ELS5
2173         LOC     PRSO
2174         IN?     STACK,WINNER /?ELS5
2175         PRINTI  "You're not carrying the "
2176         PRINTD  PRSO
2177         PRINTI  "."
2178         CRLF    
2179         RFALSE  
2180 ?ELS5:  IN?     PRSO,WINNER /?ELS11
2181         LOC     PRSO
2182         FSET?   STACK,OPENBIT /?ELS11
2183         PRINTI  "The "
2184         PRINTD  PRSO
2185         PRINTI  " is closed."
2186         CRLF    
2187         RFALSE  
2188 ?ELS11: LOC     WINNER
2189         MOVE    PRSO,STACK
2190         RTRUE   
2191
2192
2193         .FUNCT  CCOUNT,OBJ,CNT=0,X
2194         FIRST?  OBJ >X \?CND1
2195 ?PRG4:  FSET?   X,WEARBIT /?CND6
2196         INC     'CNT
2197 ?CND6:  NEXT?   X >X /?PRG4
2198 ?CND1:  RETURN  CNT
2199
2200
2201         .FUNCT  WEIGHT,OBJ,CONT,WT=0
2202         FIRST?  OBJ >CONT \?CND1
2203 ?PRG4:  EQUAL?  OBJ,PLAYER \?ELS8
2204         FSET?   CONT,WEARBIT \?ELS8
2205         INC     'WT
2206         JUMP    ?CND6
2207 ?ELS8:  CALL    WEIGHT,CONT
2208         ADD     WT,STACK >WT
2209 ?CND6:  NEXT?   CONT >CONT /?PRG4
2210 ?CND1:  GETP    OBJ,P?SIZE
2211         ADD     WT,STACK
2212         RSTACK  
2213
2214
2215         .FUNCT  HACK-HACK,STR
2216         IN?     PRSO,GLOBAL-OBJECTS \?ELS5
2217         EQUAL?  PRSA,V?LOWER,V?RAISE,V?WAVE \?ELS5
2218         PRINTI  "The "
2219         PRINTD  PRSO
2220         PRINTR  " isn't here!"
2221 ?ELS5:  PRINT   STR
2222         PRINTD  PRSO
2223         CALL    PICK-ONE,HO-HUM
2224         PRINT   STACK
2225         CRLF    
2226         RTRUE   
2227
2228
2229         .FUNCT  NO-GO-TELL,AV,WLOC
2230         ZERO?   AV /?ELS3
2231         PRINTI  "You can't go there in a "
2232         PRINTD  WLOC
2233         PRINTI  "."
2234         JUMP    ?CND1
2235 ?ELS3:  PRINTI  "You can't go there without a vehicle."
2236 ?CND1:  CRLF    
2237         RTRUE   
2238
2239
2240         .FUNCT  GOTO,RM,V?=1,LB,WLOC,AV=0,OLIT,OHERE
2241         FSET?   RM,RLANDBIT /?PRD1
2242         PUSH    0
2243         JUMP    ?PRD2
2244 ?PRD1:  PUSH    1
2245 ?PRD2:  SET     'LB,STACK
2246         LOC     WINNER >WLOC
2247         SET     'OLIT,LIT
2248         SET     'OHERE,HERE
2249         FSET?   WLOC,VEHBIT \?CND3
2250         GETP    WLOC,P?VTYPE >AV
2251 ?CND3:  ZERO?   LB \?ELS10
2252         ZERO?   AV \?ELS10
2253         CALL    NO-GO-TELL,AV,WLOC
2254         RFALSE  
2255 ?ELS10: ZERO?   LB \?ELS14
2256         FSET?   RM,AV /?ELS14
2257         CALL    NO-GO-TELL,AV,WLOC
2258         RFALSE  
2259 ?ELS14: FSET?   HERE,RLANDBIT \?ELS18
2260         ZERO?   LB /?ELS18
2261         ZERO?   AV /?ELS18
2262         EQUAL?  AV,RLANDBIT /?ELS18
2263         FSET?   RM,AV /?ELS18
2264         CALL    NO-GO-TELL,AV,WLOC
2265         RFALSE  
2266 ?ELS18: FSET?   RM,RMUNGBIT \?ELS22
2267         GETP    RM,P?LDESC
2268         PRINT   STACK
2269         CRLF    
2270         RFALSE  
2271 ?ELS22: ZERO?   LB /?CND27
2272         FSET?   HERE,RLANDBIT /?CND27
2273         ZERO?   DEAD \?CND27
2274         FSET?   WLOC,VEHBIT \?CND27
2275         EQUAL?  WLOC,BALLOON \?ELS34
2276         PRINTI  "The balloon lands."
2277         CRLF    
2278         JUMP    ?CND27
2279 ?ELS34: FSET?   WLOC,VEHBIT \?CND27
2280         PRINTI  "The "
2281         PRINTD  WLOC
2282         PRINTI  " comes to a stop."
2283         CRLF    
2284         CRLF    
2285 ?CND27: ZERO?   AV /?ELS43
2286         MOVE    WLOC,RM
2287         JUMP    ?CND41
2288 ?ELS43: MOVE    WINNER,RM
2289 ?CND41: SET     'HERE,RM
2290         CALL    LIT?,HERE >LIT
2291         ZERO?   OLIT \?CND47
2292         ZERO?   LIT \?CND47
2293         RANDOM  100
2294         GRTR?   80,STACK \?CND47
2295         ZERO?   SPRAYED? /?ELS54
2296         PRINTI  "There are sinister gurgling noises in the darkness all around you!"
2297         CRLF    
2298         JUMP    ?CND47
2299 ?ELS54: CALL    NULL-F
2300         ZERO?   STACK \FALSE
2301         PRINTI  "Oh, no! A lurking grue slithered into the "
2302         LOC     WINNER
2303         FSET?   STACK,VEHBIT \?ELS66
2304         LOC     WINNER
2305         PRINTD  STACK
2306         JUMP    ?CND64
2307 ?ELS66: PRINTI  "room"
2308 ?CND64: CALL    JIGS-UP,STR?191
2309         RTRUE   
2310 ?CND47: ZERO?   LIT \?CND73
2311         EQUAL?  WINNER,ADVENTURER \?CND73
2312         PRINTI  "You have moved into a dark place."
2313         CRLF    
2314         SET     'P-CONT,FALSE-VALUE
2315 ?CND73: GETP    HERE,P?ACTION
2316         CALL    STACK,M-ENTER
2317         CALL    SCORE-OBJ,RM
2318         EQUAL?  HERE,RM \TRUE
2319         EQUAL?  ADVENTURER,WINNER /?ELS84
2320         IN?     ADVENTURER,OHERE \?ELS84
2321         PRINTI  "The "
2322         PRINTD  WINNER
2323         PRINTR  " leaves the room."
2324 ?ELS84: CALL    NULL-F
2325         ZERO?   STACK \TRUE
2326         ZERO?   V? /TRUE
2327         EQUAL?  WINNER,ADVENTURER \TRUE
2328         CALL    V-FIRST-LOOK
2329         RTRUE   
2330
2331
2332         .FUNCT  LKP,ITM,TBL,CNT=0,LEN
2333         GET     TBL,0 >LEN
2334 ?PRG1:  IGRTR?  'CNT,LEN /FALSE
2335         GET     TBL,CNT
2336         EQUAL?  STACK,ITM \?PRG1
2337         EQUAL?  CNT,LEN /FALSE
2338         ADD     CNT,1
2339         GET     TBL,STACK
2340         RSTACK  
2341
2342
2343         .FUNCT  DO-WALK,DIR
2344         SET     'P-WALK-DIR,DIR
2345         CALL    PERFORM,V?WALK,DIR
2346         RSTACK  
2347
2348
2349         .FUNCT  GLOBAL-IN?,OBJ1,OBJ2,TX
2350         GETPT   OBJ2,P?GLOBAL >TX
2351         ZERO?   TX /FALSE
2352         PTSIZE  TX
2353         SUB     STACK,1
2354         CALL    ZMEMQB,OBJ1,TX,STACK
2355         RSTACK  
2356
2357
2358         .FUNCT  FIND-IN,WHERE,WHAT,W
2359         FIRST?  WHERE >W /?KLU13
2360 ?KLU13: ZERO?   W /FALSE
2361 ?PRG4:  FSET?   W,WHAT \?ELS8
2362         EQUAL?  W,ADVENTURER /?ELS8
2363         RETURN  W
2364 ?ELS8:  NEXT?   W >W /?PRG4
2365         RFALSE  
2366
2367
2368         .FUNCT  HELD?,CAN
2369 ?PRG1:  LOC     CAN >CAN
2370         ZERO?   CAN /FALSE
2371         EQUAL?  CAN,WINNER \?PRG1
2372         RTRUE   
2373
2374
2375         .FUNCT  OTHER-SIDE,DOBJ,P=0,TX
2376 ?PRG1:  NEXTP   HERE,P >P
2377         LESS?   P,LOW-DIRECTION /FALSE
2378         GETPT   HERE,P >TX
2379         PTSIZE  TX
2380         EQUAL?  STACK,DEXIT \?PRG1
2381         GETB    TX,DEXITOBJ
2382         EQUAL?  STACK,DOBJ \?PRG1
2383         RETURN  P
2384
2385
2386         .FUNCT  MUNG-ROOM,RM,STR
2387         EQUAL?  RM,INSIDE-BARROW /FALSE
2388         FSET    RM,RMUNGBIT
2389         PUTP    RM,P?LDESC,STR
2390         RTRUE   
2391
2392
2393         .FUNCT  THIS-IS-IT,OBJ
2394         SET     'P-IT-OBJECT,OBJ
2395         RETURN  P-IT-OBJECT
2396
2397         .ENDI