-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathprincess.zap
460 lines (417 loc) · 12.1 KB
/
princess.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
.FUNCT FORMAL-GARDEN-F,RARG
EQUAL? RARG,M-ENTER \FALSE
CALL QUEUE,I-GARDEN,-1
PUT STACK,0,1
RTRUE
.FUNCT I-GARDEN
EQUAL? HERE,FORMAL-GARDEN \?CCL3
IN? UNICORN,FORMAL-GARDEN \?CCL6
RANDOM 100
GRTR? 33,STACK \?CCL6
REMOVE UNICORN
PRINTR "The unicorn bounds lightly away."
?CCL6: IN? PRINCESS,DRAGON-LAIR \FALSE
IN? UNICORN,FORMAL-GARDEN /FALSE
RANDOM 100
GRTR? 25,STACK \FALSE
ZERO? UNICORN-FRIGHTENED /?CND16
SET 'UNICORN-FRIGHTENED,FALSE-VALUE
RFALSE
?CND16: MOVE UNICORN,FORMAL-GARDEN
PRINTI "A beautiful unicorn is peacefully cropping grass across the garden. A gold key hangs from a red satin ribbon around its neck."
RTRUE
?CCL3: REMOVE UNICORN
CALL INT,I-GARDEN
PUT STACK,0,0
RFALSE
.FUNCT UNICORN-F
CALL HELLO?,UNICORN
ZERO? STACK /?CCL3
PRINTR "The unicorn continues cropping grass."
?CCL3: EQUAL? PRSA,V?FOLLOW \?CCL7
PRINTR "The unicorn shies away as you near."
?CCL7: EQUAL? PRSA,V?RUB,V?PUT,V?TAKE /?CCL11
EQUAL? PRSA,V?ATTACK,V?MUNG \FALSE
?CCL11: REMOVE UNICORN
SET 'UNICORN-FRIGHTENED,TRUE-VALUE
PRINTR "The unicorn, unsurprised to discover that you are indeed the uncouth sort it suspected you were, melts into the hedges and is gone."
.FUNCT GAZEBO-OBJECT-F
EQUAL? PRSA,V?ENTER \?CCL3
EQUAL? HERE,FORMAL-GARDEN \?PRG7
CALL DO-WALK,P?IN
RSTACK
?PRG7: PRINT LOOK-AROUND
RTRUE
?CCL3: EQUAL? HERE,GAZEBO \FALSE
EQUAL? PRSA,V?EXIT,V?LEAVE \FALSE
CALL DO-WALK,P?OUT
RSTACK
.FUNCT NEWSPAPER-F
EQUAL? PRSA,V?READ \FALSE
PRINTI "Famed Adventurer to Explore"
PRINT GUE-NAME
PRINTI "! A world-famous and battle-hardened adventurer has been seen in the vicinity of"
PRINT GUE-NAME
PRINTR ". Local grues have been reported sharpening their (slavering) fangs..."
.FUNCT PLACE-MAT-F
EQUAL? PRSA,V?PUT-UNDER \?CCL3
EQUAL? PRSI,PDOOR \?CCL6
MOVE PRSO,HERE
SET 'MUD-FLAG,TRUE-VALUE
PRINTR "The mat slies under the door."
?CCL6: EQUAL? PRSI,WIZ-DOOR,RIDDLE-DOOR \FALSE
PRINTR "There's not enough room."
?CCL3: EQUAL? PRSA,V?MOVE,V?TAKE \FALSE
ZERO? MATOBJ /FALSE
MOVE MATOBJ,HERE
SET 'MATOBJ,FALSE-VALUE
SET 'MUD-FLAG,FALSE-VALUE
PRINTI "As the place mat is moved, a "
PRINTD MATOBJ
PRINTR " falls from it to the floor."
.FUNCT TEAPOT-F
EQUAL? PRSA,V?CLOSE,V?OPEN \FALSE
PRINTR "The teapot has no lid."
.FUNCT MATCH-F,CNT
EQUAL? PRSA,V?BURN,V?LAMP-ON \?CCL3
EQUAL? PRSO,MATCH \?CCL3
GRTR? MATCH-COUNT,0 \?CND6
DEC 'MATCH-COUNT
?CND6: GRTR? MATCH-COUNT,0 /?CCL10
PRINTR "You've run out of matches."
?CCL10: FSET MATCH,FLAMEBIT
FSET MATCH,ONBIT
CALL QUEUE,I-MATCH,2
PUT STACK,0,1
PRINTR "A match starts to burn."
?CCL3: EQUAL? PRSA,V?LAMP-OFF \?CCL16
FSET? MATCH,FLAMEBIT \?CCL16
FCLEAR MATCH,FLAMEBIT
FCLEAR MATCH,ONBIT
CALL QUEUE,I-MATCH,0
PRINTR "The match is out."
?CCL16: EQUAL? PRSA,V?COUNT \?CCL22
PRINTI "You have "
SUB MATCH-COUNT,1 >CNT
PRINTN CNT
PRINTI " match"
EQUAL? CNT,1 /?PRG31
PRINTI "es"
?PRG31: PRINT PERIOD-CR
RTRUE
?CCL22: EQUAL? PRSA,V?EXAMINE \FALSE
FSET? MATCH,ONBIT \?PRG40
PRINTC 65
JUMP ?PRG42
?PRG40: PRINTI "No"
?PRG42: PRINTR " match is burning."
.FUNCT I-MATCH
FCLEAR MATCH,FLAMEBIT
FCLEAR MATCH,ONBIT
PRINTR "The match has gone out."
.FUNCT TOPIARY-F,RARG
EQUAL? RARG,M-ENTER \FALSE
CALL QUEUE,I-TOPIARY,-1
PUT STACK,0,1
RTRUE
.FUNCT I-TOPIARY
EQUAL? HERE,TOPIARY \?CCL3
ZERO? TOPIARY-COUNTER \?CCL6
RANDOM 100
GRTR? 12,STACK \?CCL6
SET 'TOPIARY-COUNTER,1
PRINTR "Strangely, the topiary animals seem to have shifted position a bit."
?CCL6: ZERO? TOPIARY-COUNTER \?CCL12
RANDOM 100
GRTR? 8,STACK \?CCL12
SET 'TOPIARY-COUNTER,2
PRINTR "You turn, and the topiary animals seem to have closed in on you."
?CCL12: ZERO? TOPIARY-COUNTER \FALSE
RANDOM 100
GRTR? 4,STACK \FALSE
SET 'TOPIARY-COUNTER,0
CALL JIGS-UP,STR?144
RSTACK
?CCL3: CALL INT,I-TOPIARY
PUT STACK,0,0
RFALSE
.FUNCT HEDGES-F
EQUAL? PRSA,V?EXAMINE \FALSE
PRINTR "The hedges are shaped like various animals: dogs, serpents, dragons..."
.FUNCT DRAGON-F
CALL QUEUE,I-DRAGON,-1
PUT STACK,0,1
CALL HELLO?,DRAGON
ZERO? STACK /?CCL3
ADD DRAGON-ANGER,2 >DRAGON-ANGER
PRINTR "The dragon looks amused."
?CCL3: EQUAL? PRSA,V?EXAMINE \?CCL7
INC 'DRAGON-ANGER
PRINTR "He looks back at you, his cat's eyes yellow in the gloom. You start to feel weak, and quickly turn away."
?CCL7: EQUAL? PRSA,V?KICK,V?MUNG,V?ATTACK /?CTR10
EQUAL? PRSA,V?LAMP-ON \?CCL11
?CTR10: ADD DRAGON-ANGER,4 >DRAGON-ANGER
EQUAL? PRSA,V?LAMP-ON /?PRG21
EQUAL? PRSA,V?ATTACK \?PRG23
ZERO? PRSI \?PRG23
?PRG21: PRINTR "With your bare hands? I doubt the dragon even noticed."
?PRG23: CALL RANDOM-ELEMENT,DRAGON-ATTACKS
PRINT STACK
CRLF
RTRUE
?CCL11: EQUAL? PRSA,V?GIVE \?CCL26
EQUAL? PRSI,DRAGON \?CCL26
INC 'DRAGON-ANGER
FSET? PRSO,TREASUREBIT \?CCL31
MOVE PRSO,CHEST
PRINTI "The dragon excuses himself for a moment and returns without the "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
?CCL31: CALL BOMB?,PRSO
ZERO? STACK /?PRG38
ADD DRAGON-ANGER,2 >DRAGON-ANGER
REMOVE BRICK
PRINTR "The politely swallows the bomb. A moment later, he belches and smoke curls from his nostrils."
?PRG38: PRINTR "The dragon refuses it."
?CCL26: EQUAL? PRSA,V?WALK \FALSE
EQUAL? HERE,DRAGON-ROOM \FALSE
EQUAL? PRSO,P?NORTH \FALSE
ADD DRAGON-ANGER,3 >DRAGON-ANGER
PRINTR "The dragon puts out a claw and blocks your way."
.FUNCT DRAGON-LEAVES
MOVE DRAGON,DRAGON-ROOM
SET 'DRAGON-ANGER,0
CALL INT,I-DRAGON
PUT STACK,0,0
RTRUE
.FUNCT I-DRAGON,ROOM
GRTR? DRAGON-ANGER,6 \?CCL3
PRINTI "With an almost bored yawn, the dragon opens his mouth and blasts you with a gout of white-hot flame"
EQUAL? SPELL?,S-FIREPROOF \?CCL8
PRINTI ", but it washes over you harmlessly."
CRLF
JUMP ?CND1
?CCL8: CALL DRAGON-LEAVES
CALL JIGS-UP,STR?11
JUMP ?CND1
?CCL3: EQUAL? HERE,DRAGON-ROOM \?CCL12
IN? DRAGON,DRAGON-ROOM /?CCL12
MOVE DRAGON,DRAGON-ROOM
PRINTI "The dragon charges in, maddened by your attempt to sneak past him. His eyes glow with anger. He opens his mouth, and a huge ball of flame engulfs you"
EQUAL? SPELL?,S-FIREPROOF \?CCL19
CALL JIGS-UP,STR?153
JUMP ?CND1
?CCL19: CALL JIGS-UP,STR?11
JUMP ?CND1
?CCL12: GRTR? DRAGON-ANGER,0 /?CCL21
RANDOM 100
GRTR? 50,STACK \?CCL24
IN? DRAGON,HERE \?CCL24
PRINTI "The dragon looks bored."
CRLF
JUMP ?CND1
?CCL24: CALL DRAGON-LEAVES
EQUAL? HERE,OLD-HERE \?CND1
PRINTI "The dragon seems to have lost interest in you."
EQUAL? OLD-HERE,DRAGON-ROOM \?PRG36
CRLF
JUMP ?CND1
?PRG36: PRINTI " He wanders off."
CRLF
JUMP ?CND1
?CCL21: CALL FIND-TARGET,WINNER >ROOM
ZERO? ROOM \?CCL40
RANDOM 100
GRTR? 25,STACK \?CND1
CALL DRAGON-LEAVES
JUMP ?CND1
?CCL40: EQUAL? ROOM,CAROUSEL-ROOM,DREARY-ROOM,LEDGE-IN-RAVINE \?CCL44
RANDOM 100
GRTR? 25,STACK \?PRG47
CALL DRAGON-LEAVES
?PRG47: PRINTI "The dragon follows no further."
CRLF
JUMP ?CND1
?CCL44: EQUAL? ROOM,ICE-ROOM \?CCL50
REMOVE DRAGON
REMOVE ICE
CALL INT,I-DRAGON
PUT STACK,0,0
ADD SCORE,5 >SCORE
SET 'ICE-MELTED,TRUE-VALUE
CRLF
PRINTI "The dragon enters and spies his reflection on the icy surface of the glacier. Thinking that another dragon has invaded his territory, he rears up to his full height and roars a challenge! The intruder responds! The dragon takes a deep breath and expels a massive gout of flame. It washes over the ice, which melts rapidly, sending out huge cloud of steam! When the steam dissipates, the glacier is gone, and so is the dragon.
With the ice gone, you notice a passage leading west."
CRLF
JUMP ?CND1
?CCL50: EQUAL? ROOM,OLD-HERE /?PRG58
MOVE DRAGON,ROOM
PRINTI "The dragon follows you, out of mingled curiosity and anger."
CRLF
JUMP ?CND53
?PRG58: PRINTI "The dragon continues to watch you carefully."
CRLF
?CND53: GRTR? DRAGON-ANGER,0 /?CND1
SET 'DRAGON-ANGER,0
CALL INT,I-DRAGON
PUT STACK,0,0
?CND1: LOC DRAGON >OLD-HERE
SUB DRAGON-ANGER,2 >DRAGON-ANGER
LESS? DRAGON-ANGER,0 \TRUE
SET 'DRAGON-ANGER,0
RTRUE
.FUNCT CHEST-F
EQUAL? PRSA,V?OPEN \FALSE
IN? PRINCESS,HERE \?PRG12
ZERO? PRINCESS-AWAKE \?PRG12
RANDOM 100
GRTR? 25,STACK \?PRG12
CALL V-OPEN
PRINTI "The squeaky lid startles the young woman."
CRLF
JUMP ?CND4
?PRG12: PRINTI "The rusty hinges almost give. It would probably open if you tried again."
IN? PRINCESS,HERE \?CND14
ZERO? PRINCESS-AWAKE \?CND14
PRINTI " The commotion has startled the young woman."
?CND14: CRLF
?CND4: PUTP CHEST,P?ACTION,0
IN? PRINCESS,HERE \TRUE
ZERO? PRINCESS-AWAKE \TRUE
CALL PERFORM,V?ALARM,PRINCESS
RTRUE
.FUNCT PRINCESS-F,DEM
CALL INT,I-PRINCESS >DEM
EQUAL? PRSA,V?FOLLOW \?CCL3
ZERO? PRFOLLOW /?PRG7
CALL DO-WALK,PRFOLLOW
RSTACK
?PRG7: PRINTR "You've lost track of her."
?CCL3: EQUAL? PRSA,V?RAPE,V?MUNG,V?ATTACK \?CCL10
REMOVE PRINCESS
PRINTI "The princess screams, ""Won't someone deliver me from this awful fate?"" The Wizard of Frobozz "
IN? WIZARD,HERE \?PRG18
PRINTI "turns toward you"
JUMP ?CND13
?PRG18: PRINTI "appears"
?CND13: CALL JIGS-UP,STR?158
RSTACK
?CCL10: CALL HELLO?,PRINCESS
ZERO? STACK \?CTR20
EQUAL? PRSA,V?EXAMINE,V?KISS,V?ALARM /?CTR20
EQUAL? PRSA,V?RUB \?CCL21
?CTR20: IN? PRINCESS,DRAGON-LAIR \?PRG32
GET DEM,C-ENABLED?
ZERO? STACK \?PRG32
CALL QUEUE,I-PRINCESS,2
PUT STACK,0,1
SET 'PRINCESS-AWAKE,TRUE-VALUE
PRINTR "The princess shakes herself awake, notices you, and smiles. ""Thank you for rescuing me from that horrid worm, but I must depart."" She rises, looking purposefully out of the lair."
?PRG32: PRINTI "The princess ignores you; her eyes fix on the "
EQUAL? HERE,GAZEBO \?CCL36
PRINTI "garden"
JUMP ?PRG49
?CCL36: EQUAL? HERE,FORMAL-GARDEN \?CCL40
PRINTI "gazebo"
JUMP ?PRG49
?CCL40: EQUAL? HERE,LEDGE-IN-RAVINE \?PRG47
PRINTI "ledge"
JUMP ?PRG49
?PRG47: MUL PRCOUNT,4
GET PRDIRS,STACK
PRINT STACK
?PRG49: PRINT PERIOD-CR
RTRUE
?CCL21: ZERO? PRINCESS-AWAKE \FALSE
PRINTR "She's in a trance!"
.FUNCT I-PRINCESS,DEM,OLDP,PC
CALL INT,I-PRINCESS >DEM
LOC PRINCESS >OLDP
MUL PRCOUNT,4 >PC
ADD PC,1
GET PRDIRS,STACK
MOVE PRINCESS,STACK
SET 'PRFOLLOW,FALSE-VALUE
IN? PRINCESS,DARK-TUNNEL \?CCL3
IN? ADVENTURER,DEEP-FORD \?CCL3
PRINTI "The princess touches the ravine wall and a section slides away, revealing a passage to the east. She enters it."
CRLF
IN? WINNER,OLDP \?CND8
ADD PC,3
GET PRDIRS,STACK >PRFOLLOW
?CND8: SET 'SECRET-DOOR,TRUE-VALUE
JUMP ?CND1
?CCL3: IN? PRINCESS,DARK-TUNNEL \?CCL11
IN? WINNER,DARK-TUNNEL \?CCL11
SET 'SECRET-DOOR,TRUE-VALUE
PRINTI "The princess appears from behind some rocks, as though she had walked through a wall."
CRLF
JUMP ?CND1
?CCL11: IN? WINNER,OLDP \?CCL17
ADD PC,3
GET PRDIRS,STACK >PRFOLLOW
EQUAL? OLDP,FORMAL-GARDEN \?CCL20
PRINTI "The princess enters the gazebo."
CRLF
JUMP ?CND1
?CCL20: EQUAL? OLDP,LEDGE-IN-RAVINE \?PRG27
PRINTI "The princess climbs daintily down the rock face."
CRLF
JUMP ?CND1
?PRG27: PRINTI "The princess walks "
GET PRDIRS,PC
PRINT STACK
PRINTI ". She glances back at you as she goes."
CRLF
JUMP ?CND1
?CCL17: IN? PRINCESS,HERE \?CND1
EQUAL? HERE,GAZEBO \?CCL36
PRINTI "The princess joins you in the gazebo."
CRLF
JUMP ?CND1
?CCL36: EQUAL? HERE,DEEP-FORD \?PRG43
PRINTI "The princess clambers down from the ledge."
CRLF
JUMP ?CND1
?PRG43: PRINTI "The princess enters from the "
ADD 2,PC
GET PRDIRS,STACK
PRINT STACK
PRINTI ". She seems surprised to see you."
CRLF
?CND1: IN? PRINCESS,GAZEBO \?CCL51
PUT DEM,0,0
CALL QUEUE,I-UNICORN,6
PUT STACK,0,1
RTRUE
?CCL51: INC 'PRCOUNT
RANDOM 100
GRTR? 75,STACK \?CCL54
PUSH 1
JUMP ?CND52
?CCL54: PUSH 2
?CND52: CALL QUEUE,I-PRINCESS,STACK
PUT STACK,0,1
RTRUE
.FUNCT I-UNICORN
EQUAL? HERE,GAZEBO,FORMAL-GARDEN \?CCL3
FCLEAR GOLD-KEY,NDESCBIT
MOVE GOLD-KEY,WINNER
CALL SCORE-OBJ,GOLD-KEY
PUTP GOLD-KEY,P?ACTION,0
REMOVE PRINCESS
PRINTR "Shyly, a unicorn peeks out of the hedges and approaches the princess. Around its neck hangs a gold key. The princess takes the key and, smiling, hands it to you. ""It is the least I can do for one who rescued me from a fate I dare not contemplate."" With that, she mounts the unicorn and rides away."
?CCL3: REMOVE PRINCESS
RFALSE
.FUNCT ICE-ROOM-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "This is a large hall of ancient lava, worn smooth by a glacier. Tunnels lead east and south."
ZERO? ICE-MELTED /?CND6
PRINTR " A damp, scorched passage leads west."
?CND6: CRLF
RTRUE
.FUNCT ICE-F
EQUAL? PRSA,V?MELT \FALSE
PRINTR "This is a big glacier; you'll need lots of heat."
.ENDI