Inform - Resources - Examples

Back to List

Inventory
Complete

Backward
Forward

Plain
Coloured
Gaudy

This code
in plain text

Browsing Museum.inf

Ground Floor (lines 105-704)

0105  Object Room10 "Hall of Senses"
0106    with description
0107            "This is Room 10, north of the foyer. If you try going further 
0108             north, a string will be printed instead. The exit to the @00 
0109             has a routine attached, and randomly leads either to the 
0110             Directions Room or back to the foyer.",
0111         s_to Foyer,
0112         n_to "This string is the ~n_to~ value for this room.",
0113         e_to
0114         [;  if (random(2)==1) return Foyer; return Room10a; ],
0115    has  light;
0116   
0117  Object -> "TRAP lever"
0118    with name "trap" "lever",
0119         before
0120         [;  Pull, Push:
0121                 if (self has on) <<SwitchOff self>>;
0122                 <<SwitchOn self>>;
0123         ],
0124         after
0125         [;  SwitchOn: move orange_cloud to location;
0126                "Clunk! An orange cloud suddenly descends upon you.";
0127             SwitchOff: remove orange_cloud;
0128                "Click! The orange cloud vanishes.";
0129         ],
0130    has  switchable static;
0131   
0132  Object -> "gold watch"
0133    with name "gold" "watch",
0134         description "The watch has no hands, oddly.",
0135         react_before
0136         [;  Listen: if (noun==0 or self) "The watch ticks loudly."; ];
0137   
0138  Object -> "sprig of lavender"
0139    with name "sprig" "of" "lavender",
0140         react_before
0141         [;  Smell: if (noun==0 or self) "Lavender-perfume. Ahh!"; ];
0142   
0143  Object orange_cloud "orange cloud"
0144    with name "orange" "cloud",
0145         react_before
0146         [;  Look: "You can't see for the orange cloud surrounding you.";
0147             Go, Exit: "You wander round in circles, choking.";
0148             Smell: if (noun==0 or self) "Cinnamon? No, nutmeg.";
0149         ],
0150    has  scenery;
0151   
0152  ! --------------------------------------------------------------------------
0153  !   For east-west reflection
0154  ! --------------------------------------------------------------------------
0155   
0156  Lowstring east_str "east"; Lowstring west_str "west";
0157  [ NormalWorld; string 0 east_str; string 1 west_str;
0158    e_obj.door_dir = e_to; w_obj.door_dir = w_to;
0159  ];
0160  [ ReversedWorld; string 0 west_str; string 1 east_str;
0161    w_obj.door_dir = e_to; e_obj.door_dir = w_to;
0162  ];
0163   
0164  Object Room10a "Hall of Directions"
0165    with name "mirror",
0166         description
0167            "An annexe to Room 10: the main exit is back @01, and there's a 
0168             curiously misty mirror on the north wall. Also, there's an exit 
0169             in the fourth, ~hyper~ dimension (which is only visible in the 
0170             weird geometry of this room).",
0171         initial
0172         [;  move hyper to compass; StartDaemon(hyper);
0173         ],
0174         w_to Room10,
0175         n_to
0176         [;  print "Walking through the mirror is confusing...^";
0177             if (self has general) NormalWorld(); else ReversedWorld();
0178             if (self has general) give self ~general; else give self general;
0179             <<Look>>;
0180         ],
0181         in_to [; print "Amazing! Your body corkscrews as you pass.^";
0182                  return Room11; ],
0183    has  light;
0184   
0185  Object hyper "hyper-dimensional direction"
0186    with name "hyper" "fourth" "dimension", article "the", door_dir in_to,
0187         daemon
0188         [;  if (location ~= Room10a) { remove self; StopDaemon(self); }
0189         ],
0190    has  scenery;
0191   
0192  ! --------------------------------------------------------------------------
0193   
0194  Object Room11 "Wonderful World of Containers"
0195    with description
0196            "This is Room 11, @00 of the foyer. You notice a typical piece 
0197             of scenery which turns out to be a supporter: a mantelpiece.",
0198         w_to Foyer,
0199    has  light;
0200   
0201  Object -> "bearded psychiatrist"
0202    with name "bearded" "doctor" "psychiatrist" "psychologist" "shrink",
0203         initial "A bearded psychiatrist has you under observation.",
0204         life
0205         [;  "He is fascinated by your behaviour, but makes no attempt to 
0206              interfere with it.";
0207         ],
0208         react_after
0209         [;  Insert: print "~Subject puts ", (a) noun, " in ", (the) second,
0210                        ". Interesting.~^";
0211             PutOn:  print "~Subject puts ", (a) noun, " in ", (the) second,
0212                        ". Interesting.~^";
0213         ],
0214         react_before
0215         [;  Take, Remove: print "~Subject feels lack of ", (the) noun,
0216                 ". Suppressed Oedipal complex? Mmm.~^";
0217         ],
0218    has  animate;
0219   
0220  Object -> "mantelpiece"
0221    with name "mantel" "mantle" "piece" "mantelpiece"
0222    has  scenery supporter;
0223   
0224  Object -> "green ball" with name "green" "ball";
0225  Object -> "red cone" with name "red" "cone";
0226  Object -> "blue pyramid" with name "blue" "pyramid";
0227   
0228  Object -> "plain shopping bag (which can only hold 2 things)"
0229    with name "plain" "shopping" "bag", capacity 2,
0230    has  container open;
0231   
0232  Object -> "glass box with a lid" with name "glass" "box" "with" "lid"
0233    has  container transparent openable open;
0234  Object -> "steel box with a lid" with name "steel" "box" "with" "lid"
0235    has  container openable open;
0236   
0237  Key -> bolted_key "bolted key" with name "bolted";
0238   
0239  Object -> "toothed bag"
0240    with name "toothed" "bag",
0241         description "A capacious bag with a toothed mouth.",
0242         before
0243         [; LetGo: "The bag defiantly bites itself 
0244                    shut on your hand until you desist.";
0245            Close: "The bag resists all attempts to close it.";
0246         ],
0247         after
0248         [; Receive:
0249                   "The bag wriggles hideously as it swallows ",
0250                   (the) noun, ".";
0251         ],
0252    has  container open;
0253   
0254  Object -> "bolted cupboard"
0255    with name "bolted" "cupboard",
0256         describe
0257         [; if (self hasnt open)
0258                "^A pretty typical shut cupboard is bolted to one wall.";
0259            "^Bolted up on one wall is an open cupboard.";
0260         ],
0261         with_key bolted_key
0262    has  locked container openable lockable static;
0263   
0264  Object -> "portable television set"
0265    with name "tv" "television" "set" "portable",
0266         initial "A portable television set has two sub-objects attached: 
0267                  a power button and a screen.",
0268         before
0269         [;  SwitchOn: <<SwitchOn power_button>>;
0270             SwitchOff: <<SwitchOff power_button>>;
0271             Examine: <<Examine screen>>;
0272         ],
0273    has  transparent;
0274  Object -> -> power_button "power button"
0275    with name "power" "button" "switch",
0276         after
0277         [;  SwitchOn, SwitchOff: <<Examine screen>>;
0278         ],
0279    has  switchable;
0280  Object -> -> screen "television screen"
0281    with name "screen",
0282         before
0283         [;  Examine: if (power_button hasnt on) "The screen is black.";
0284                 "The screen writhes with a strange Japanese cartoon.";
0285         ];
0286   
0287  Object -> "macrame bag"
0288    with name "macrame" "bag" "string" "net" "sack",
0289         react_before
0290         [;  Examine, Search, Listen, Smell: ;
0291             default:
0292                 if (inp1>1 && inp1 in self)
0293                     print_ret (The) inp1, " is tucked away in the bag.";
0294                 if (inp2>1 && inp2 in self)
0295                     print_ret (The) inp2, " is tucked away in the bag.";
0296         ],
0297         describe
0298         [;  print "^A macrame bag hangs from the ceiling, shut tight";
0299             if (child(self)==0) ".";
0300             print ". Inside you can make out ";
0301             WriteListFrom(child(self), ENGLISH_BIT); ".";
0302         ],
0303    has  container transparent static;
0304  Object -> -> "music box"
0305    with name "music" "box" "musical",
0306         description "Attractively lacquered.",
0307         react_before
0308         [;  Listen: if (noun==0 or self)
0309                "The musical box chimes some Tchaikovsky."; ];
0310   
0311  ! --------------------------------------------------------------------------
0312   
0313  Object Corridor12 "Corridor 12"
0314    with description
0315            "Runs south of the foyer. A side exit leads @01 to Room 15, 
0316             the manuscripts room.",
0317         n_to Foyer, s_to Oak_Door, w_to Room15,
0318    has  light;
0319   
0320  Object -> "sinister curator"
0321    with name "sinister" "curator",
0322         initial
0323         [;  if (self hasnt general)
0324                "A sinister curator leans against the wall, asleep.";
0325            "The curator is here, casting menacing looks.";
0326         ],
0327         daemon
0328         [ i p j n k;
0329             if (random(3)~=1 || self hasnt general) rfalse;
0330             p=parent(self);
0331             objectloop (i in compass)
0332             {   j=p.(i.door_dir);
0333                 if (ZRegion(j)==1 && j hasnt door) n++;
0334             }
0335             if (n==0) rfalse;
0336             k=random(n); n=0;
0337             objectloop (i in compass)
0338             {   j=p.(i.door_dir);
0339                 if (ZRegion(j)==1 && j hasnt door) n++;
0340                 if (n==k)
0341                 {   move self to j;
0342                     if (p==location) "^The curator stalks away.";
0343                     if (j==location) "^The curator stalks in.";
0344                     rfalse;
0345                 }
0346             }
0347         ],
0348         orders
0349         [;  if (self hasnt general) "The curator only snores.";
0350            "He raises a skeletal finger to his lips. ~Shh!~";
0351         ],
0352         life
0353         [;  WakeOther:
0354                 if (self hasnt general)
0355                 {   give self general; move self to Foyer;
0356                    "He wakes and rouses to his feet, pushes past you 
0357                     and stalks away.";
0358                 }
0359             default: "He rears back with disdain.";
0360         ],
0361    has  animate;
0362   
0363  Object Oak_Door "oaken door"
0364    with name "oak" "door" "oaken",
0365         description "Despite appearances, there is no key to this door.",
0366         door_dir
0367         [; if (location==Corridor12) return s_to; return n_to; ],
0368         door_to
0369         [; if (location==Corridor12) return Room13; return Corridor12; ],
0370         describe
0371         [; if (self has open) "^The oaken door stands open.";
0372            if (self hasnt locked) "^The corridor ends in an oaken door.";
0373         ],
0374         found_in  Corridor12  Room13
0375    has  static door openable lockable;
0376   
0377  ! --------------------------------------------------------------------------
0378   
0379  Object Room15 "Manuscripts Room"
0380    with description
0381            "This is Room 15, adjoining a corridor to the @00.",
0382         e_to Corridor12,
0383    has  light;
0384   
0385  Object -> "black Tyndale Bible"
0386    with name "bible" "black" "book",
0387         initial "A black Bible rests on a spread-eagle lectern.",
0388         description "A splendid foot-high Bible, which must have survived 
0389             the burnings of 1520.",
0390         before
0391         [ w x; Consult:
0392                 wn = consult_from; w = NextWord();
0393                 switch(w)
0394                 {   'matthew': x="Gospel of St Matthew";
0395                     'mark': x="Gospel of St Mark";
0396                     'luke': x="Gospel of St Luke";
0397                     'john': x="Gospel of St John";
0398                     default: "There are only the four Gospels.";
0399                 }
0400                 if (consult_words==1)
0401                     "You read the ", (string) x, " right through.";
0402                 w = TryNumber(wn);
0403                 if (w==-1000)
0404                     "I was expecting a chapter number in the ",
0405                               (string) x, ".";
0406                 "Chapter ", (number) w, " of the ", (string) x,
0407                       " is too sacred for you to understand now.";
0408         ];
0409   
0410  ! --------------------------------------------------------------------------
0411   
0412  Object Room13 "Switches Hall"
0413    with description
0414            "This is Room 13, at the south end of a long corridor leading 
0415             north. Progress further south is blocked by a chasm.",
0416         n_to Oak_Door, s_to PlankBridge,
0417    has  light;
0418   
0419  Object -> "Gotham City searchlight"
0420    with name "gotham" "city" "search" "light" "template" "searchlight",
0421         article "the",
0422         description "It has some kind of template on it.",
0423         when_on "The old city searchlight shines out a bat against 
0424                  the alabaster ceiling of the Museum.",
0425         when_off "The old Gotham city searchlight has been lovingly 
0426                  restored and housed here."
0427    has  switchable static;
0428   
0429  Object -> "basement light switch"
0430    with name "basement" "light" "switch",
0431         after
0432         [;  SwitchOn: give basement light; "Click!";
0433             SwitchOff: give basement ~light; "Click!";
0434         ],
0435    has  switchable static;
0436   
0437  Object -> PlankBridge "plank bridge"
0438    with description "Extremely fragile and precarious.",
0439         name "precarious" "fragile" "wooden" "plank" "bridge",
0440         when_open
0441             "A precarious plank bridge spans the chasm.",
0442         door_to
0443         [;  if (children(player)~=0)
0444              {   deadflag=1;
0445                 "You step gingerly across the plank, which bows under 
0446                  your weight. But your meagre possessions are the straw 
0447                  which breaks the camel's back! There is a horrid crack...";
0448              }
0449              print "You step gingerly across the plank, grateful that 
0450                     you're not burdened.^";
0451             if (location==Room13) return FarSide; return Room13;
0452         ],
0453         door_dir
0454         [;  if (location==Room13) return s_to; return n_to;
0455         ],
0456         found_in Room13 FarSide,
0457    has  static door open;
0458   
0459  Object FarSide "Far Side of Chasm in Room 13"
0460    with description
0461            "This side of the chasm is dull and dusty after all.",
0462         n_to PlankBridge,
0463    has  light;
0464   
0465  ! --------------------------------------------------------------------------
0466   
0467  Object Room14 "Large Exhibits Room"
0468    with description
0469            "This is Room 14, @01 of the foyer, which gives onto the Weights 
0470             Room to the north.",
0471         e_to Foyer, n_to Weights_Room,
0472    has  light;
0473   
0474  Object -> "hypnotic portrait"
0475    with name "hypnotic" "portrait" "warthog" "picture" "of" "hog",
0476         initial "A somewhat hypnotic full-length portrait of a warthog hangs 
0477             on the wall.",
0478         before
0479         [;  Examine: <Examine hog>; print "^...and somehow, so do you...^";
0480                 ChangePlayer(hog); <<Look>>;
0481         ],
0482    has  static;
0483   
0484  Object -> "Louis XV chair"
0485    with name "louis" "xv" "quinze" "chair",
0486         initial "A valuable Louis XV chair takes pride of place.",
0487    has  enterable supporter;
0488   
0489  Object -> car "little red car"
0490    with name "little" "red" "car" "kar1",
0491         description "Large enough to sit inside. Among the controls is a 
0492                   prominent on/off switch. The numberplate is KAR 1.",
0493         when_on  "The red car sits here, its engine still running.",
0494         when_off "A little red car is parked here.",
0495         before
0496         [; PushDir: AllowPushDir(); rtrue;
0497            Go: if (car has on) { Achieved(1); "Brmm! Brmm!"; }
0498                print "(The ignition is off at the moment.)^";
0499         ],
0500         after
0501         [; PushDir: "The car rolls very slowly as you push it.";
0502         ],
0503    has  switchable enterable static container open;
0504   
0505  Object -> -> "small note"
0506    with name "small" "note",
0507         description
0508             "  !!!! FROBOZZ MAGIC CAR COMPANY !!!!^
0509             ^Hello, Driver!^
0510             ^Instructions for use:^
0511             ^Switch on the ignition and off you go!^
0512             ^Warranty:^
0513             ^This car is guaranteed against all defects for a period of 
0514              76 milliseconds from date of purchase or until used, 
0515              whichever comes first.^
0516             ^Good Luck!";
0517   
0518  Object -> "Giant"
0519    with name "giant",
0520         initial "A Giant is here. (And you know the old legend... push a 
0521             Giant, become a Giant!)",
0522         before
0523         [;  Push: ChangePlayer(self); <<Look>>;
0524             Take: rtrue;
0525         ],
0526         number 0,
0527         orders
0528         [;  if (player==self)
0529             {   if (actor~=self)
0530                    "You only become tongue-tied and gabble.";
0531                 if (action==##Push && noun==selfobj)
0532                 {   ChangePlayer(selfobj); <<Look>>; }
0533                 rfalse;
0534             }
0535             Attack: "The Giant looks at you with doleful eyes. 
0536                      ~Me not be so bad!~";
0537             default: "The Giant is unable to comprehend your instructions.";
0538         ],
0539    has  animate;
0540   
0541   
0542  ! --------------------------------------------------------------------------
0543   
0544  Object "Caldera"
0545    with description
0546            "An old volcanic crater of mud and ash, from which there is 
0547             nowhere to go.",
0548    has  light;
0549   
0550  Object -> hog "Warthog"
0551    with name "wart" "hog" "warthog",
0552         description "Muddy, sniffing and grunting.",
0553         number,
0554         orders
0555         [;  if (player~=self || actor~=self) rfalse;
0556   
0557             ! So now we have just the case where the player
0558             ! is currently the warthog, ordering himself about:
0559   
0560             Go, Look, Examine, Eat, Smell, Taste, Touch: rfalse;
0561             default: "Warthogs can't do anything as tricky as that!";
0562         ],
0563    has  animate proper;
0564   
0565  Object -> "red berry"
0566    with name "red" "berry" "magic",
0567         initial "A magic red berry is half-uncovered in the mud.",
0568         before
0569         [;  Smell, Taste, Touch:
0570                 print "The blood-smell of the berry brings you back, 
0571                      back...^";
0572                  ChangePlayer(selfobj); <<Look>>;
0573         ];
0574   
0575  ! --------------------------------------------------------------------------
0576   
0577  Constant CARRYING_STRENGTH = 500;
0578  Constant HEAVINESS_THRESHOLD = 100;
0579   
0580  Object Weights_Room "Weights Room"
0581    with description
0582            "This is an annexe, south of Room 14. In here (though nowhere 
0583             else) objects have given weights, and 
0584             you can carry only a limited total weight. (Items from elsewhere 
0585             in the museum all weigh 10 zobs, regardless of what they are.)
0586             The longer you carry heavy objects, the more tired you become,
0587             until you're forced to drop them; your strength recovers once
0588             you're carrying only a light load.",
0589         initial [; weight_monitor.activate(); ],
0590         s_to Room14,
0591    has  light;
0592   
0593  Object -> "feather" with name "feather", weight 1;
0594  Object -> "iron anvil" with name "iron" "anvil", article "an", weight 300;
0595  Object -> "five-zob weight" with name "five" "zob" "weight", weight 5;
0596  Object -> "ten-zob weight" with name "ten" "zob" "weight", weight 10;
0597  Object -> "twenty-zob weight" with name "twenty" "zob" "weight", weight 20;
0598  Object -> "fifty-zob weight" with name "fifty" "zob" "weight", weight 50;
0599  Object -> "hundred-zob weight" with name "hundred" "zob" "weight", weight 100;
0600   
0601  [ WeightOf obj t i;
0602     t = obj.weight;
0603     objectloop (i in obj) t = t + WeightOf(i);
0604     return t;
0605  ];
0606   
0607  Object weight_monitor
0608    with
0609         players_strength,
0610         warning_level 5,
0611   
0612         activate
0613         [;  self.players_strength = CARRYING_STRENGTH; StartDaemon(self);
0614         ],
0615         daemon
0616         [ w s b bw;
0617              if (location ~= Weights_Room) { StopDaemon(self); return; }
0618   
0619              s = self.players_strength
0620                  - WeightOf(player) + HEAVINESS_THRESHOLD;
0621              if (s<0) s=0; if (s>CARRYING_STRENGTH) s=CARRYING_STRENGTH;
0622              self.players_strength = s;
0623   
0624              if (s==0)
0625              {   bw=-1;
0626                  objectloop(b in player)
0627                      if (WeightOf(b) > bw) { bw = WeightOf(b); w=b; }
0628                  self.players_strength = self.players_strength + bw;
0629                  print "^Exhausted with carrying so much, you decide 
0630                      to discard ", (the) w, ": "; <<Drop w>>;
0631              }
0632   
0633              w=s/100; if (w==self.warning_level) return;
0634   
0635              self.warning_level = w;
0636              switch(w)
0637              {   3: "^You are feeling a little tired.";
0638                  2: "^You possessions are weighing you down.";
0639                  1: "^Carrying so much weight is wearing you out.";
0640                  0: "^You're nearly exhausted enough to drop everything
0641                       at an inconvenient moment.";
0642              }
0643         ];
0644   
0645  ! --------------------------------------------------------------------------
0646   
0647  Constant SUNRISE  360;  ! i.e., 6 am
0648  Constant SUNSET  1140;  ! i.e., 7 pm
0649  Global day_state = 2;
0650   
0651  Object balcony "Balcony"
0652    with description
0653         [;  print "An open-air balcony on the cliffside wall of the 
0654                 cathedral-like Museum, hundreds of feet above ";
0655             if (day_state==1) "sunlit plains of farms and settlements.";
0656             "a darkling plain. Dim light from the walls above is 
0657              the only beacon in this vast night.";
0658         ],
0659         in_to Foyer,
0660         cant_go "The only way is back inside.",
0661         each_turn
0662         [ f;
0663             if (the_time >= SUNRISE && the_time < SUNSET) f=1;
0664             if (day_state == f) return;
0665             if (day_state==2) { day_state = f; return; }
0666             day_state = f;
0667             if (f==1) "^The sun rises, illuminating the landscape!";
0668           "^As the sun sets, the landscape is plunged into darkness.";
0669         ],
0670    has  light;
0671   
0672  Object -> "giant clock"
0673    with name "giant" "clock" "face" "clockface" "clock-face",
0674         before
0675         [;  Examine: "According to the giant clockface on the wall 
0676                 above, it is now ", the_time/60, ":", (the_time%60)/10,
0677                 the_time%10, ".";
0678             default: "The giant clock-face is too high above you.";
0679         ],
0680         react_after [; Look: new_line; <Examine self>; ],
0681    has  static concealed;
0682   
0683  Object -> moth "moth"
0684    with name "moth",
0685         initial "A catchable moth flits about.";
0686   
0687  [ GoMothGo;
0688     if (moth in player)
0689     {   remove moth;
0690        "As your eyes try to adjust, you feel a ticklish sensation 
0691         and hear a tiny fluttering sound.";
0692     }
0693  ];
0694   
0695  Object -> "Commander Data"
0696    with name "data" "commander",
0697         orders
0698         [; "~I regret that I am only here to make an example work elsewhere. 
0699              Please proceed upstairs to 10 Forward to see.~";
0700         ],
0701    has  proper animate crewmember;
0702   
0703  ! ==========================================================================
0704   


Last updated 23 June 2004. This web site has not been fully supported since April 2008. Information may be out of date. This page was originally managed by Graham Nelson (graham@gnelson.demon.co.uk) assisted by C Knight.