~ubuntu-branches/ubuntu/vivid/inform/vivid

« back to all changes in this revision

Viewing changes to inform-6.31.1/demos/adventureland.inf

  • Committer: Bazaar Package Importer
  • Author(s): Jan Christoph Nordholz
  • Date: 2008-05-26 22:09:44 UTC
  • mfrom: (2.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080526220944-ba7phz0d1k4vo7wx
Tags: 6.31.1+dfsg-1
* Remove a considerable number of files from the package
  due to unacceptable licensing terms.
* Repair library symlinks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
! ----------------------------------------------------------------------------
 
2
!  Adventureland 961111             One of the standard Inform 6 example games
 
3
!
 
4
!                                             Designed by Scott Adams: c. 1979
 
5
!                                                   Ported to Inform: 16.10.94
 
6
!                                                  Slightly corrected: 11.5.96
 
7
!                    Modernised to Inform 6 and library 6/1 or later: 11.11.96
 
8
! ----------------------------------------------------------------------------
 
9
 
 
10
Constant Story "ADVENTURELAND";
 
11
Constant Headline
 
12
           "^An Interactive Classic by Scott Adams (circa 1979/80)^";
 
13
 
 
14
Release 1;
 
15
Serial "961111";
 
16
 
 
17
Constant MAX_CARRIED = 6;
 
18
Constant MAX_SCORE = 100;
 
19
 
 
20
Replace BurnSub;
 
21
 
 
22
Include "Parser";
 
23
Include "VerbLib";
 
24
 
 
25
Global genie_gifts;
 
26
Global dark_warning;
 
27
 
 
28
Class Treasure
 
29
 with depositpoints 7,
 
30
      after
 
31
      [; Take: if (location==Inside_Stump) "Taken!";
 
32
         Drop: if (location==Inside_Stump) "Safely deposited.";
 
33
      ];
 
34
 
 
35
Class Sign
 
36
 with name "sign",
 
37
      short_name
 
38
      [;  print "sign reads- ", (object) self; rtrue;
 
39
      ],
 
40
  has static;
 
41
 
 
42
Class ScottRoom
 
43
 with initial
 
44
      [;  give self ~visited;
 
45
      ],
 
46
      describe
 
47
      [ i c d;  print (string) self.description;
 
48
          print "^^Obvious exits: ";
 
49
          for (i=n_to: i<=d_to: i++)
 
50
              if (self.i ~= 0) c++;
 
51
          if (c==0) print "none!";
 
52
          else
 
53
          {   for (i=n_to: i<=d_to: i++)
 
54
                  if (self.i ~= 0)
 
55
                  {   if (d++>0) print ", ";
 
56
                      if (i==n_to) print "North";
 
57
                      if (i==s_to) print "South";
 
58
                      if (i==e_to) print "East";
 
59
                      if (i==w_to) print "West";
 
60
                      if (i==u_to) print "Up";
 
61
                      if (i==d_to) print "Down";
 
62
                  }
 
63
              print ".";
 
64
          }
 
65
          new_line;
 
66
          c=0; d=0;
 
67
          objectloop (i in self)
 
68
              if (i ~= player) { c++; give i concealed; }
 
69
          if (c==0) rtrue;
 
70
          print "^You can also see: ";
 
71
          objectloop (i in self)
 
72
              if (i ~= player)
 
73
              {   if (d++>0) print " - "; PrintShortName(i);
 
74
              }
 
75
          new_line; rtrue;
 
76
      ];
 
77
 
 
78
[ GamePreRoutine i c d;
 
79
   if (action~=##Inv) rfalse;
 
80
   c=0; d=0;
 
81
   objectloop (i in player) c++;
 
82
   if (c==0) "You're carrying nothing.";
 
83
   print "You're carrying:^";
 
84
   objectloop (i in player)
 
85
   {   if (d++>0) print " - "; PrintShortName(i);
 
86
   }
 
87
   new_line; rtrue;
 
88
];
 
89
 
 
90
[ GamePostRoutine i;
 
91
    if (action==##Look)
 
92
        objectloop (i in location)
 
93
            if (i ~= player && i has concealed)
 
94
                give i ~concealed;
 
95
    rfalse;
 
96
];
 
97
 
 
98
! ----------------------------------------------------------------------------
 
99
!   Into Adventureland...
 
100
! ----------------------------------------------------------------------------
 
101
 
 
102
ScottRoom Lake_Shore "Lakeside"
 
103
  with description "You're on the shore of a lake.",
 
104
       n_to Forest,  s_to Lake_Shore,  w_to Dismal_Swamp,
 
105
       d_to Quicksand,
 
106
       before
 
107
       [;  Swim: "Below you and before the lake is quicksand.";
 
108
       ],
 
109
  has  light;
 
110
Object -> water "water"
 
111
  with name "water", article "some",
 
112
       before
 
113
       [; Drink: "Boy, that really hit the spot.";
 
114
          Take: if (bottle notin player)
 
115
                    "You have nothing in which to carry the water.";
 
116
                <<Fill bottle>>;
 
117
          Insert: if (second == bottle) <<Fill bottle>>;
 
118
                    "You have nothing in which to carry the water.";
 
119
          Receive: if (noun == bottle) <<Fill bottle>>;
 
120
                remove noun; CDefArt(noun); " washes away into the lake.";
 
121
       ],
 
122
  has  scenery;
 
123
Treasure -> "*GOLDEN FISH*"
 
124
  with name "gold" "golden" "fish",
 
125
       each_turn
 
126
       [;  if (self notin player) rfalse;
 
127
           if (net notin player && random(100) <= 75)
 
128
           {   move self to Lake_Shore;
 
129
               "^The fish escape back to the lake.";
 
130
           }
 
131
           if ((water_in_the_bottle notin bottle
 
132
                || bottle notin player) && random(100)<=50)
 
133
           {   remove self; move dead_fish to player;
 
134
               "^Too dry. Fish die.";
 
135
           }
 
136
       ];
 
137
Object -> axe "rusty axe (magic word- BUNYON -on it)"
 
138
  with name "rusty" "axe",
 
139
       description "The magic word BUNYON is written on the haft.";
 
140
Sign -> "NO SWIMMING ALLOWED";
 
141
Object dead_fish "dead fish"
 
142
  with name "dead" "fish"
 
143
  has  edible;
 
144
 
 
145
ScottRoom Quicksand "Bog"
 
146
  with description "You're in a quick-sand bog.",
 
147
       before
 
148
       [;  Swim: if (child(player)==nothing)
 
149
                 {   PlayerTo(Lake_Shore); rtrue; }
 
150
                 "Something's too heavy.";
 
151
       ],
 
152
  has  light;
 
153
Treasure -> ox "*SMALL STATUE OF A BLUE OX*"
 
154
  with name "ox" "blue" "small" "statue";
 
155
 
 
156
ScottRoom Forest "Forest"
 
157
  with description "You're in a forest.",
 
158
       n_to Forest,  s_to Forest,  e_to Sunny_Meadow,  w_to Forest,
 
159
       u_to trees
 
160
  has  light;
 
161
Object -> trees "trees"
 
162
  with name "tree" "trees",
 
163
       before
 
164
       [;   Climb: <<Enter self>>;
 
165
       ],
 
166
       door_to Up_Oak, door_dir u_to
 
167
  has  open door static;
 
168
 
 
169
ScottRoom Up_Oak "Branch"
 
170
  with description "You're in a branch on the top of an old oak tree.^
 
171
                    To the east you see a meadow beyond a lake.",
 
172
       d_to Forest,  
 
173
  has  light;
 
174
 
 
175
ScottRoom Sunny_Meadow "Meadow"
 
176
  with description "You're in a sunny meadow.",
 
177
       n_to Lake_Shore,  s_to Dismal_Swamp,  e_to Lake_Shore,
 
178
       w_to Forest,
 
179
  has  light;
 
180
Object -> dragon "sleeping Dragon"
 
181
  with name "dragon" "sleeping" "sleepy",
 
182
       before
 
183
       [;  WakeOther: deadflag=1; "The dragon wakes!";
 
184
       ],
 
185
       life
 
186
       [;  Order, Answer, Ask: "Shh! You don't want to wake the dragon.";
 
187
           Give:    "The dragon is too drowsy to notice.";
 
188
           ThrowAt: if (noun==axe) 
 
189
                    {   move axe to location; "The dragon isn't bothered."; }
 
190
       ],
 
191
       each_turn
 
192
       [;  if (mud in location && random(100)<=50)
 
193
           {   deadflag=1;
 
194
               "Dragon smells something - awakens - attacks you!";
 
195
           }
 
196
       ],
 
197
  has  animate;
 
198
Sign -> "IN SOME CASES MUD IS GOOD, IN OTHERS...";
 
199
Treasure eggs "*DRAGON EGGS* (very rare)"
 
200
  with name "dragon" "eggs" "very" "rare", depositpoints 12;
 
201
Object gore "smoking hole - pieces of dragon and gore"
 
202
  with name "gore" "hole" "dragon" "smoking"
 
203
  has  static;
 
204
 
 
205
ScottRoom Hidden_Grove "Grove"
 
206
  with description "You're in a hidden grove.",
 
207
       n_to Forest,  e_to Dismal_Swamp,  w_to Forest,  
 
208
  has  light;
 
209
Treasure -> "*JEWELLED FRUIT*"
 
210
  with name "jewelled" "jewel" "fruit",
 
211
       after
 
212
       [;  Eat: "Boy that really hit the spot!"; ],
 
213
  has  edible;
 
214
Sign -> "PAUL'S PLACE";
 
215
 
 
216
ScottRoom Dismal_Swamp "Dismal Swamp"
 
217
  with description "You're in a dismal swamp.",
 
218
       n_to Sunny_Meadow,  s_to Dismal_Swamp,  e_to Dismal_Swamp,
 
219
       w_to Hidden_Grove,  in_to 0,            u_to cypress_tree
 
220
  has  light;
 
221
Object -> cypress_tree "cypress tree"
 
222
  with name "cypress" "tree",
 
223
       before
 
224
       [;   Climb: <<Enter self>>;
 
225
            Cut:    if (axe notin player) rfalse;
 
226
                    remove self; move tree_remains to Dismal_Swamp;
 
227
                    Dismal_Swamp.in_to = tree_remains;
 
228
                    Dismal_Swamp.u_to = 0;
 
229
                    print "TIMBER..";
 
230
                    if (keys in Tree_Top)
 
231
                    {   remove keys;
 
232
                        ". Something fell from the treetop and vanished!";
 
233
                    }
 
234
                    ".";
 
235
       ],
 
236
       door_to Tree_Top, door_dir u_to
 
237
  has  open door static;     
 
238
 
 
239
Object -> mud "evil smelling mud"
 
240
  with name "evil" "smelling" "mud", article "some",
 
241
       after
 
242
       [ f; Take:
 
243
                if (infected_bites in player) { remove infected_bites; f=1; }
 
244
                if (chigger_bites in player)  { remove chigger_bites; f=1; }
 
245
                if (f==1) "Boy that really hit the spot!";
 
246
       ],
 
247
       each_turn
 
248
       [;  if (self notin player) rtrue;
 
249
           if (random(100)<=5 &&
 
250
               (bottle notin player || water_in_the_bottle notin bottle))
 
251
           {   move self to Dismal_Swamp;
 
252
               "The mud dried up and fell off.";
 
253
           }
 
254
       ];
 
255
 
 
256
Object -> gas "swamp gas"
 
257
  with name "swamp" "gas", article "some",
 
258
       before
 
259
       [;  Take:
 
260
               if (distended_bladder in player) "Bladder full already.";
 
261
               if (wine_bladder notin player) "You have nothing suitable.";
 
262
               <<Insert self wine_bladder>>;
 
263
           Insert:
 
264
               if (second == distended_bladder) "The bladder's full.";
 
265
               if (second ~= wine_bladder)
 
266
                   "That won't hold gas.";
 
267
               move distended_bladder to player; remove wine_bladder;
 
268
               itobj = distended_bladder;
 
269
               "The bladder distends with swamp gas.";
 
270
       ],
 
271
  has  static;
 
272
Object -> slime "floating patch of oily slime"
 
273
  with name "patch" "oil" "slime" "oily",
 
274
       before
 
275
       [;  Take: brass_lantern.time_left=125; give brass_lantern general;
 
276
                 remove self; move brass_lantern to player;
 
277
                 "Magic oil attracts magic lamp. Lamp is now full.";
 
278
       ],
 
279
  has  static;
 
280
Object -> chiggers "chiggers"
 
281
  with name "chiggers", article "a swarm of",
 
282
       daemon
 
283
       [;  if (chigger_bites in player && mud notin player && random(100)<=10)
 
284
           {   remove chigger_bites; move infected_bites to player;
 
285
               "^Your chigger bites are now infected.";
 
286
           }
 
287
           if (infected_bites in player && random(100)<=8)
 
288
           {   deadflag=1;
 
289
               "^The bites have rotted your whole body.";
 
290
           }
 
291
           if (infected_bites notin player
 
292
               && chigger_bites notin player
 
293
               && slime in location && mud notin player
 
294
               && random(100)<=5)
 
295
           {   move chigger_bites to player;
 
296
               "^You're bitten by chiggers.";
 
297
           }
 
298
           if (infected_bites notin player
 
299
               && chigger_bites notin player
 
300
               && chiggers in player
 
301
               && random(100)<=30)
 
302
           {   move chigger_bites to player;
 
303
               "^You're bitten by chiggers.";
 
304
           }
 
305
       ];
 
306
Object chigger_bites "chigger bites"
 
307
  with name "chigger" "bites", article "some",
 
308
       before [; "The bites are annoying. Perhaps medicine would help?"; ];
 
309
Object infected_bites "infected chigger bites"
 
310
  with name "chigger" "bites" "infected", article "some",
 
311
       before [; "The bites are frightening. Get medicine!"; ];
 
312
 
 
313
Object tree_remains "hollow stump and remains of a felled tree"
 
314
  with name "tree" "stump" "hollow" "remains",
 
315
       door_to Inside_Stump, door_dir in_to
 
316
  has  open door static;
 
317
 
 
318
ScottRoom Tree_Top "Tree Top"
 
319
  with description "You're in the top of a tall cypress tree.",
 
320
       d_to Dismal_Swamp,  
 
321
  has  light;
 
322
 
 
323
Object -> "spider web with writing on it"
 
324
  with name "spider" "web" "writing",
 
325
       description "~CHOP IT DOWN!~",
 
326
       before
 
327
       [;  Take: deadflag=1; "You're bitten by a spider.";
 
328
       ];
 
329
Object -> keys "ring of skeleton keys"
 
330
  with name "keys" "ring" "skeleton" "keyring";
 
331
 
 
332
ScottRoom Inside_Stump "Inside Stump"
 
333
  with description "You're in a large hollow damp stump in the swamp.",
 
334
       n_to Dismal_Swamp,  s_to Dismal_Swamp,  e_to Dismal_Swamp,
 
335
       w_to Dismal_Swamp,  u_to Dismal_Swamp,  d_to Root_Chamber, 
 
336
  has  light;
 
337
Sign -> "LEAVE TREASURE HERE - (say 'SCORE')";
 
338
Object -> bottle "the bottle"
 
339
  with name "bottle" "jar" "flask",
 
340
       short_name
 
341
       [;  if (water_in_the_bottle in self) { print "bottle of water"; rtrue; }
 
342
           if (bees in self) { print "bottle of bees"; rtrue; }
 
343
           print "empty bottle"; rtrue;
 
344
       ],
 
345
       before
 
346
       [ x; LetGo:
 
347
             if (noun in bottle)
 
348
                 "You're holding that already (in the bottle).";
 
349
         Receive:
 
350
             if (noun==water or bees) <<Fill self>>;
 
351
             "That won't go in the bottle.";
 
352
         Fill:
 
353
             if (child(bottle)~=0)
 
354
               "The bottle is full already.";
 
355
             if (water in location)
 
356
             {   move water_in_the_bottle to bottle;
 
357
                 "The bottle is now full of water.";
 
358
             }
 
359
             if (bees in location)
 
360
             {   move bees to bottle;
 
361
                 "The bottle is now full of bees.";
 
362
             }
 
363
             "There is nothing here with which to fill the bottle.";
 
364
         Empty: if (child(bottle)==0) "The bottle is already empty!";
 
365
             x=child(bottle);
 
366
             remove x;
 
367
             if (x==bees)
 
368
             {   move x to location; "You release the bees.";
 
369
             }
 
370
             "Your bottle is now empty and the ground is now wet.";
 
371
       ],
 
372
  has  container open;
 
373
 
 
374
Object -> brass_lantern "old fashioned lamp"
 
375
  with name "lamp" "fashioned" "lamp", article "an",
 
376
       power 125,
 
377
       time_left 0,
 
378
       daemon
 
379
       [ t; if (self hasnt on) { StopDaemon(self); rtrue; }
 
380
          t=--(self.power);
 
381
          if (t==0) give self ~on ~light;
 
382
          if (self in player or location)
 
383
          {   if (t==0) "Your lamp has run out of power.";
 
384
              if (t==30) "Your lamp is getting dim.";
 
385
          }
 
386
       ],
 
387
       before
 
388
       [; Examine: print "It is a shiny brass lamp";
 
389
                if (self hasnt on)
 
390
                    ". It is not currently lit.";
 
391
                if (self.power < 30)
 
392
                    ", glowing dimly.";
 
393
                ", glowing brightly.";
 
394
          Burn: <<SwitchOn self>>;
 
395
          Rub:  if (self has on) "No! It's too hot.";
 
396
                if (self hasnt general) "Nothing happens.";
 
397
                switch(++genie_gifts)
 
398
                {   1: move ring to location;
 
399
                       "A glowing genie appears -
 
400
                        drops something - then vanishes.";
 
401
                    2: move bracelet to location;
 
402
                       "A glowing genie appears -
 
403
                        drops something - then vanishes.";
 
404
                    3: if (ring in Inside_Stump)
 
405
                           score=score-ring.depositpoints;
 
406
                       remove ring; move player to Misty_Room;
 
407
                       "A genie appears - says ~boy you're selfish~ - takes 
 
408
                        something - then vanishes!";
 
409
                    4: if (bracelet in Inside_Stump)
 
410
                           score=score-bracelet.depositpoints;
 
411
                       remove bracelet; move player to Misty_Room;
 
412
                       "A genie appears - says ~boy you're selfish~ - takes 
 
413
                        something - then vanishes!";
 
414
                    default: "Nothing happens.";
 
415
                }
 
416
          SwitchOn: if (self.power <= 0) "It's run out.";
 
417
          Receive, Open:
 
418
                "You can't put things in the lamp.";
 
419
       ],
 
420
       after
 
421
       [; SwitchOn: give self light; StartDaemon(self);
 
422
              "Flameless lamp now on.";
 
423
          SwitchOff: give self ~light;
 
424
       ],
 
425
  has  switchable;
 
426
 
 
427
Treasure ring "*DIAMOND RING*"
 
428
  with name "diamond" "ring";
 
429
Treasure bracelet "*DIAMOND BRACELET*"
 
430
  with name "diamond" "bracelet";
 
431
 
 
432
Object water_in_the_bottle "bottled water" bottle
 
433
  with name "bottled" "water" "h2o", article "some",
 
434
       before
 
435
       [; Drink:  remove water_in_the_bottle; <<Drink water>>;
 
436
       ],
 
437
       description "It looks like ordinary water to me.";
 
438
 
 
439
ScottRoom Root_Chamber "Root Chamber"
 
440
  with description "You're in a root chamber under the stump.",
 
441
       u_to Inside_Stump,  d_to dark_hole,  
 
442
  has  light;
 
443
Object -> dark_hole "dark hole"
 
444
  with description "Leading below.",
 
445
       door_dir d_to,
 
446
       door_to Semidark_Hole
 
447
  has  open door static;
 
448
Treasure -> "*POT OF RUBIES*"
 
449
  with name "pot" "of" "rubies";
 
450
 
 
451
ScottRoom Semidark_Hole "Hole"
 
452
  with description "You're in a semi-dark hole by the root chamber.",
 
453
       u_to Root_Chamber, d_to root_door
 
454
  has  light;
 
455
Object -> root_door "the door"
 
456
  with name "door",
 
457
       short_name
 
458
       [;  if (self has locked) { print "locked door"; rtrue; }
 
459
           if (self has open)
 
460
           {   print "open door with a hallway beyond"; rtrue; }
 
461
           print "closed door"; rtrue;
 
462
       ],
 
463
       before
 
464
       [;  ThrowAt:
 
465
               if (second==axe)
 
466
               {   give self ~locked ~lockable ~openable open;
 
467
                   "Lock shatters!";
 
468
               }
 
469
       ],
 
470
       door_to Long_Hall, door_dir d_to, with_key keys
 
471
  has  static door openable lockable locked;
 
472
 
 
473
ScottRoom Long_Hall "Hall"
 
474
  with description "You're in a long down-sloping hall.",
 
475
       u_to Semidark_Hole,  d_to Large_Cavern;
 
476
 
 
477
ScottRoom Large_Cavern "Cavern"
 
478
  with description "You're in a large cavern.",
 
479
       n_to Hive,  s_to Royal_Anteroom,  w_to Memory_RAM,
 
480
       u_to Long_Hall,  d_to Maze1;
 
481
 
 
482
ScottRoom Hive "Octagonal Hive"
 
483
  with description "You're in a large 8-sided room.",
 
484
       s_to Large_Cavern;
 
485
Treasure -> "*ROYAL HONEY*"
 
486
  with name "royal" "honey", article "some",
 
487
       before
 
488
       [;  Take:
 
489
               if (bees in location && mud notin player)
 
490
               {   deadflag=1; "Bees sting you."; }
 
491
           Drop:
 
492
               if (bear in location)
 
493
               {   remove self; give bear general;
 
494
                   "The bear eats the honey and falls asleep.";
 
495
               }
 
496
       ],
 
497
  has  edible;
 
498
Object -> bees "large African bees"
 
499
  with name "large" "african" "bees", article "a swarm of",
 
500
       before
 
501
       [;  Take:
 
502
               if (mud notin player)
 
503
               {   deadflag=1; "Bees sting you."; }
 
504
               if (bottle in player) <<Fill bottle>>;
 
505
               "You have nothing to carry the bees in.";
 
506
           Drop:
 
507
               if (self in bottle
 
508
                   && dragon in location)
 
509
               {   move self to location;
 
510
                   move eggs to location; remove dragon;
 
511
                   "The bees attack the dragon which gets up and flies away...";
 
512
               }
 
513
               if (self in bottle
 
514
                   && bear in location)
 
515
               {   move self to location;
 
516
                   give bear ~general; deadflag=1;
 
517
                   "Bees madden the bear. Bear then attacks you!";
 
518
               }
 
519
       ],
 
520
       each_turn
 
521
       [;  #IFNDEF DEBUG;
 
522
           !  A completely unfair rule! And in the original the bees are lost.
 
523
           if (self in bottle && random(100)<=8)
 
524
           {   move self to Hive; "^The bees in the bottle all suffocated."; }
 
525
           #ENDIF;
 
526
           if (self in bottle) rfalse;
 
527
           if (self in location && mud notin player && mud notin location &&
 
528
               random(100)<=8)
 
529
           {   deadflag=1; "Bees sting you."; }
 
530
       ];
 
531
 
 
532
ScottRoom Royal_Anteroom "Anteroom"
 
533
  with description "You're in a royal anteroom.",
 
534
       n_to Large_Cavern,  u_to Royal_Chamber;
 
535
Object -> wine_bladder "empty wine bladder"
 
536
  with name "empty" "wine" "bladder",
 
537
       before
 
538
       [;  Fill: if (gas notin location)
 
539
                     "The bladder could only just hold a vapour nowadays.";
 
540
                 <<Insert gas self>>;
 
541
       ];
 
542
Object distended_bladder "distended gas bladder"
 
543
  with name "distended" "gas" "bladder",
 
544
       before
 
545
       [;  Open: move wine_bladder to parent(self); remove self;
 
546
                 "Gas dissipates!";
 
547
       ];
 
548
 
 
549
ScottRoom Maze1 "Maze"
 
550
  with description "You're in a maze of pits.",
 
551
       n_to Maze2,  s_to Maze4,  e_to Maze4,  d_to Maze2;
 
552
 
 
553
ScottRoom Maze2 "Maze"
 
554
  with description "You're in a maze of pits.",
 
555
       w_to Maze3,  u_to Maze1;
 
556
Object -> flint_and_steel "flint and steel"
 
557
  with name "flint" "steel";
 
558
 
 
559
ScottRoom Maze3 "Maze"
 
560
  with description "You're in a maze of pits.",
 
561
       n_to Maze6,  s_to Maze1,  e_to Maze2,  w_to Maze5,
 
562
       u_to Maze5,  d_to Maze6;
 
563
Object -> "scratchings"
 
564
  with name "scratchings", article "strange",
 
565
       short_name "strange scratchings on rock reveals- ALADDIN WAS HERE",
 
566
  has  static;
 
567
 
 
568
ScottRoom Maze4 "Maze"
 
569
  with description "You're in a maze of pits.",
 
570
       n_to Maze1,  e_to Maze2,  w_to Maze1,  u_to Maze2;
 
571
 
 
572
ScottRoom Maze5 "Maze"
 
573
  with description "You're in a maze of pits.",
 
574
       s_to Maze6,  u_to Maze3,  d_to Maze6;
 
575
 
 
576
ScottRoom Maze6 "Maze"
 
577
  with description "You're in a maze of pits.",
 
578
       n_to Maze6,  s_to Maze1,  e_to Maze1,  w_to Maze4,
 
579
       u_to Maze3,  d_to Chasm_Bottom;
 
580
Treasure -> rug "*THICK PERSIAN RUG*"
 
581
  with name "thick" "persian" "rug" "carpet";
 
582
Object -> "arrow pointing down"
 
583
  with name "arrow"
 
584
  has  static;
 
585
 
 
586
ScottRoom Chasm_Bottom "Chasm"
 
587
  with description "You're in a bottom of a chasm. Above 2 ledges. 
 
588
                    One has a bricked up window.",
 
589
       u_to Maze6;
 
590
Treasure -> net "*GOLDEN NET*"
 
591
  with name "gold" "golden" "net";
 
592
Sign -> "MAGIC WORD IS AWAY. X LA -(rest of sign is missing)";
 
593
Object -> lava "the lava"
 
594
  with name "stream" "of" "lava",
 
595
       short_name
 
596
       [;  print "stream of lava";
 
597
           if (self has general) print " with a brick dam";
 
598
           rtrue;
 
599
       ],
 
600
       description
 
601
       [;  if (self hasnt general)
 
602
             "There's something there all right! Maybe you should go there?";
 
603
           "Just more dammed lava.";
 
604
       ],
 
605
       before
 
606
       [;  Enter, Push, Pull, Take: "NO! It's too hot.";
 
607
       ],
 
608
  has  static;
 
609
Treasure firestone "*FIRESTONE* (cold now)"
 
610
  with name "firestone", depositpoints 11;
 
611
 
 
612
ScottRoom Narrow_Ledge_1 "Ledge"
 
613
  with description "You're on a narrow ledge by a chasm. 
 
614
                    Across the chasm is a throne room.",
 
615
       before
 
616
       [;  Jump: if (firebricks in player)
 
617
                 {   deadflag=1; "Oh no! Something was too heavy!"; }
 
618
                 print "You leap across the chasm...^";
 
619
                 PlayerTo(Narrow_Ledge_2); rtrue;
 
620
       ],
 
621
       w_to Royal_Chamber;
 
622
 
 
623
ScottRoom Royal_Chamber "Royal Chamber"
 
624
  with description "You're in the Royal Chamber.",
 
625
       d_to Royal_Anteroom, e_to 0;
 
626
Object -> bricked_window "bricked-up window"
 
627
  with name "window" "bricked" "brick" "bricks"
 
628
  has  static;
 
629
Object holed_window "bricked up window with a hole in it - beyond is a ledge"
 
630
  with name "window" "bricked" "hole" "ledge",
 
631
       door_dir e_to, door_to Narrow_Ledge_1
 
632
  has  static door open;
 
633
Object firebricks "loose fire bricks"
 
634
  with name "loose" "fire" "bricks", article "some",
 
635
       after
 
636
       [;  Take: "Taken. (Heavy!)";
 
637
           Drop: if (location~=Chasm_Bottom) rfalse;
 
638
                 remove self; give lava general;
 
639
                 move firestone to location;
 
640
                 "The bricks dam the lava, revealing a *FIRESTONE*!";
 
641
       ];
 
642
 
 
643
ScottRoom Narrow_Ledge_2 "Ledge"
 
644
  with description
 
645
          "You're on a narrow ledge by the throne room-across chasm-ledge.",
 
646
       before
 
647
       [;  Sing:
 
648
           if (bear in location && bear hasnt general)
 
649
           {   move dead_bear to Chasm_Bottom;
 
650
               remove bear;
 
651
               "The bear got startled and fell off the ledge!";
 
652
           }
 
653
           Jump: print "You leap across the chasm...^";
 
654
                 PlayerTo(Narrow_Ledge_1); rtrue;
 
655
       ],
 
656
       e_to
 
657
       [;  if (bear in location && bear hasnt general)
 
658
               "The bear won't let you!";
 
659
           return Throne_Room;
 
660
       ];
 
661
Treasure -> mirror "*MAGIC MIRROR*"
 
662
  with name "magic" "mirror",
 
663
       side_up 0,
 
664
       before
 
665
       [;  Take:
 
666
               if (bear in location && bear hasnt general)
 
667
                   "The bear won't let you!";
 
668
       ],
 
669
       after
 
670
       [;  Drop:
 
671
             if (rug in location)
 
672
             {   print "Mirror lands softly on the rug - lights up and says:^";
 
673
                 self.side_up++;
 
674
                 if (self.side_up % 2 == 1)
 
675
                   "*DRAGON STINGS* and fades. I don't get it - hope you do.";
 
676
                 "Don't waste *HONEY*. Get mad instead. Dam lava!";
 
677
             }
 
678
             remove self; move broken_glass to location;
 
679
             "The mirror hits the floor and shatters into a million pieces!";
 
680
       ];
 
681
Object -> bear "the bear"
 
682
  with name "thin" "black" "bear",
 
683
       short_name
 
684
       [;  if (self has general) { print "sleeping bear"; rtrue; }
 
685
           print "thin black bear"; rtrue;
 
686
       ],
 
687
       before
 
688
       [;  WakeOther: give self ~general; "The bear rouses!^";
 
689
       ],
 
690
       life
 
691
       [;  Ask, Order, Answer: <<Sing>>;
 
692
           Attack, ThrowAt:
 
693
               if (self has general) <WakeOther self>;
 
694
               remove mirror; move broken_glass to location;
 
695
               "Oh no...Bear dodges...CRASH!";
 
696
       ],
 
697
  has  animate;
 
698
Object broken_glass "broken glass"
 
699
  with name "broken" "glass" "jagged" "fragments", article "some";
 
700
Object dead_bear "dead bear"
 
701
  with name "dead" "bear" "black" "thin"
 
702
  has  static;
 
703
 
 
704
ScottRoom Throne_Room "Throne Room"
 
705
  with description "You're in a throne room.",
 
706
       w_to Narrow_Ledge_2;
 
707
Treasure -> "*GOLD CROWN*"
 
708
  with name "gold" "golden" "crown";
 
709
 
 
710
ScottRoom Real_Trouble "Trouble!"
 
711
  with description
 
712
           "I think you're in real trouble. Here's a guy with a pitchfork!^^
 
713
            You lost *ALL* treasures.",
 
714
       initial
 
715
       [;  deadflag=3;
 
716
       ],
 
717
  has  light;
 
718
 
 
719
ScottRoom Memory_RAM "Ugly Place"
 
720
  with description
 
721
          "You're in the memory RAM of an IBM-PC. You took a wrong turn!",
 
722
       e_to Large_Cavern,  
 
723
  has  light;
 
724
Sign -> "To the Architects - TSURRIS";
 
725
 
 
726
ScottRoom Misty_Room "Misty Room"
 
727
  with description "You're in a large misty room with strange letters
 
728
                    over the exits.",
 
729
       s_to Real_Trouble,  e_to Forest,  w_to Real_Trouble,
 
730
       u_to Up_Oak,  d_to Real_Trouble,  
 
731
  has  light;
 
732
Sign -> "LIMBO. FIND RIGHT EXIT AND LIVE AGAIN!";
 
733
 
 
734
! ----------------------------------------------------------------------------
 
735
!   A soupcon of code
 
736
! ----------------------------------------------------------------------------
 
737
 
 
738
[ Initialise;
 
739
  location=Forest; score = 0;
 
740
 
 
741
  StartDaemon(chiggers);
 
742
 
 
743
  "^^^^^A voice booms out ...^
 
744
  Treasures have an * in their name. Say 'SCORE'^
 
745
  If you need a hint on something, try 'HELP'.^";
 
746
];
 
747
 
 
748
[ TimePasses i;
 
749
  if (location ~= Inside_Stump) rfalse;
 
750
 
 
751
  score=0;
 
752
  objectloop (i in Inside_Stump && i ofclass Treasure)
 
753
      score = score + i.depositpoints;
 
754
 
 
755
  if (score ~= 100) rfalse;
 
756
 
 
757
  deadflag=2;
 
758
  "Congratulations! By finding and depositing all 13 *TREASURES*, you 
 
759
   have solved Scott Adams's ~Adventureland~ and it remains only to say 
 
760
   that...";
 
761
];
 
762
 
 
763
[ AfterLife;
 
764
   if (deadflag==3) { deadflag=1; rfalse; }
 
765
   remove chigger_bites; remove infected_bites;
 
766
   deadflag=0; PlayerTo(Misty_Room);
 
767
];
 
768
 
 
769
[ PrintRank; "."; ]; 
 
770
 
 
771
[ DarkToDark;
 
772
  if (dark_warning==0)
 
773
  {   dark_warning=1; "It is now pitch dark. 
 
774
                       If you proceed you will likely fall into a pit.";
 
775
  }
 
776
  if (random(4) == 1)
 
777
  {   deadflag=1;
 
778
      "You fell into a pit and broke every bone in your body!";
 
779
  }
 
780
  rfalse;
 
781
];
 
782
 
 
783
[ BunyonSub;
 
784
  if (axe notin player) "Nothing happens.";
 
785
  if (ox in player or location)
 
786
  {   move ox to Hidden_Grove;
 
787
      move axe to Hidden_Grove;
 
788
      "Something you're holding vibrated and...";
 
789
  }
 
790
  if (player notin Quicksand)
 
791
  {   move axe to Hidden_Grove;
 
792
      print "Something you're holding vibrated and...";
 
793
      <<Inv>>;
 
794
  }
 
795
  "Nothing happens.";
 
796
];
 
797
 
 
798
[ TsurrisSub;
 
799
  if (location ~= Memory_RAM) "Nothing happens.";
 
800
  "A voice booms out...^
 
801
   May all your teeth but one fall out, and may that one give you toothache.^
 
802
   (You can't help feeling you have stumbled on a private quarrel which is 
 
803
    nothing to do with your game.)";
 
804
];
 
805
 
 
806
[ BurnSub;
 
807
  if (flint_and_steel notin player)
 
808
      "You have nothing to strike a light with.";
 
809
  if (noun==gas) "Gas needs to be contained before it will burn.";
 
810
  if (noun==distended_bladder)
 
811
  {   if (noun in player)
 
812
      {   remove noun; deadflag=1; "Gas bladder blew up in your hands!";
 
813
      }
 
814
      remove noun;
 
815
      print "Gas bladder blew up!^";
 
816
      if (dragon in location)
 
817
      {   remove dragon; move gore to location;
 
818
          "The dragon has been blown to bits!";
 
819
      }
 
820
      if (bricked_window in location)
 
821
      {   remove bricked_window;
 
822
          move holed_window to location; move firebricks to location;
 
823
          Royal_Chamber.e_to = holed_window;
 
824
          "The bricked window has been blown to bits!";
 
825
      }
 
826
      rtrue;
 
827
  }
 
828
  "That won't ignite.";
 
829
];
 
830
 
 
831
[ HelpSub;
 
832
   print "A voice booms out...^";
 
833
   print "Try:  LOOK,JUMP,SWIM,CLIMB,THROW,FIND,GO,TAKE,INVENTORY,SCORE.^";
 
834
   if (chigger_bites in player || infected_bites in player)
 
835
       "Medicine is good for bites.";
 
836
   if (location == Quicksand) "You may need magic words here.";
 
837
   if (location == Sunny_Meadow)
 
838
       "Only 3 things will wake the dragon. One of them is dangerous!";
 
839
   if (location == Hive)
 
840
       "Read the sign in the meadow!";
 
841
   if (location == Maze1 or Maze2 or Maze3
 
842
       || location == Maze4 or Maze5 or Maze6)
 
843
       "You may need magic words here.";
 
844
   if (location == Royal_Chamber) "Blow it up. Try the swamp.";
 
845
];
 
846
 
 
847
[ AwaySub;
 
848
  if (rug notin player || location~=Maze3) "Nothing happens.";
 
849
  print "Something you're holding vibrates, and...^";
 
850
  PlayerTo(Sunny_Meadow);
 
851
];
 
852
 
 
853
[ FindSub;
 
854
  "A voice booms out...^Find it yourself.";
 
855
];
 
856
 
 
857
! ----------------------------------------------------------------------------
 
858
!   Grammar: the usual grammar and some extensions
 
859
! ----------------------------------------------------------------------------
 
860
 
 
861
Include "Grammar";
 
862
 
 
863
Extend "cut"
 
864
                * "up" noun                      -> Cut
 
865
                * "down" noun                    -> Cut;
 
866
 
 
867
Verb "bunyon"   *                                -> Bunyon;
 
868
Verb "away"     *                                -> Away;
 
869
Verb "tsurris"  *                                -> Tsurris;
 
870
Verb "help"     *                                -> Help;
 
871
Verb "find"     * special                        -> Find;
 
872
 
 
873
! ----------------------------------------------------------------------------