Constant Story "RUINS"; Constant Headline "^An Interactive Worked Example^ Copyright (c) 1999 by Angela M. Horns.^"; ! ---------------------------------------------------------------------------- ! ! This version recreated by Roger Firth in May 2001, using the simple ! (albeit time-consuming) process of combining the various fragments ! of "Ruins" quoted in Edition 4/1 of the Inform Designer's Manual. ! ! PLAYER ! lamp,dictionary,map ! GREAT PLAZA ! | mushroom,packing-case,camera,newspaper,steps ! | ! | ! SQUARE CHAMBER -------------------- WORMCAST ! | inscriptions,sunlight,(key) eggsac ! | ! | ! STOOPED CORRIDOR ! | statuette,door ! | ! | ! UPPER CANYON SHRINE ! | ball / \ paintings,altar,mask,(priest) ! | ---------- ---------- ! | / \ ! XIBALBÁ ANTECHAMBER ! | stela | cage,skeletons,(warthog) ! | | ! | | ! LOWER CANYON BURIAL SHAFT ! | chasm honeycomb ! | ! | ! PUMICE LEDGE ! bone ! ! ---------------------------------------------------------------------------- ! Constant MAX_CARRIED = 7; ! Defined in DM4 §22 Constant MAX_SCORE = 30; ! Defined in DM4 §22 Include "Parser"; Include "VerbLib"; ! ---------------------------------------------------------------------------- ! ! The TREASURE class definition. ! ! Defined in DM4 §5, modified in §23 Class Treasure with before [; Take, Remove: if (self in packing_case) "Unpacking such a priceless artifact had best wait until the Carnegie Institution can do it."; if (self.photographed_in_situ == false) "This is the 1930s, not the bad old days. Taking an artifact without recording its context is simply looting."; Photograph: if (self has moved) "What, and fake the archaeological record?"; if (self.photographed_in_situ) "Not again."; ], after [; Insert: if (second == packing_case) { score = score + self.cultural_value; if (score == MAX_SCORE) { deadflag = 2; print_ret "As you carefully pack away ", (the) noun, " a red-tailed macaw flutters down from the tree-tops, feathers heavy in the recent rain, the sound of its beating wings almost deafening, stone falling against stone... As the skies clear, a crescent moon rises above a peaceful jungle. It is the end of March, 1938, and it is time to go home."; } "Safely packed away."; } Photograph: self.photographed_in_situ = true; ], cultural_value 5, photographed_in_situ false; ! ---------------------------------------------------------------------------- ! ! The game beings in the GRAND PLAZA. ! ! Defined in DM4 §4, modified in §8, §9 and §23 Object Forest "~Great Plaza~" with description "Or so your notes call this low escarpment of limestone, but the rainforest has claimed it back. Dark olive trees crowd in on all sides, the air steams with the mist of a warm recent rain, midges hang in the air. ~Structure 10~ is a shambles of masonry which might once have been a burial pyramid, and little survives except stone-cut steps leading down into darkness below.", d_to steps, in_to steps, u_to "The trees are spiny and you'd cut your hands to ribbons trying to climb them.", cant_go "The rainforest is dense, and you haven't hacked through it for days to abandon your discovery now. Really, you need a good few artifacts to take back to civilization before you can justify giving up the expedition.", before [; Listen: "Howler monkeys, bats, parrots, macaw."; ], has light; ! Defined in DM4 §4, modified in Exercise 1 and §23 Object -> mushroom "speckled mushroom" with name 'speckled' 'mushroom' 'fungus' 'toadstool', initial "A speckled mushroom grows out of the sodden earth, on a long stalk.", description "The mushroom is capped with blotches, and you aren't at all sure it's not a toadstool.", after [; Take: if (self.mushroom_picked) "You pick up the slowly-disintegrating mushroom."; self.mushroom_picked = true; "You pick the mushroom, neatly cleaving its thin stalk."; Drop: "The mushroom drops to the ground, battered slightly."; Eat: steps.rubble_filled = false; "You nibble at one corner, unable to trace the source of an acrid taste, distracted by the flight of a macaw overhead which seems to burst out of the sun, the sound of the beating of its wings almost deafening, stone falling against stone."; ], mushroom_picked false, has edible; ! Defined in DM4 §12 Object -> packing_case "packing case" with name 'packing' 'case' 'box' 'strongbox', initial "Your packing case rests here, ready to hold any important cultural finds you might make, for shipping back to civilisation.", before [; Take, Remove, PushDir: "The case is too heavy to bother moving, as long as your expedition is still incomplete."; ], has static container open openable; ! Defined in DM4 §6 Object -> -> camera "wet-plate camera" with name 'wet-plate' 'plate' 'wet' 'camera', description "A cumbersome, sturdy, stubborn wooden-framed wet plate model: like all archaeologists, you have a love-hate relationship with your camera."; ! Defined in DM4 §23 Object -> -> newspaper "month-old newspaper" with name 'times' 'newspaper' 'paper' 'month-old' 'old', description "~The Times~ for 26 February, 1938, at once damp and brittle after a month's exposure to the climate, which is much the way you feel yourself. Perhaps there is fog in London. Perhaps there are bombs."; ! Defined in DM4 §4, modified in §5 and §23 Object -> steps "stone-cut steps" with name 'steps' 'stone' 'stairs' 'stone-cut' 'pyramid' 'burial' 'structure' 'ten' '10', description [; if (self.rubble_filled) "Rubble blocks the way after only a few steps."; print "The cracked and worn steps descend into a dim chamber. Yours might "; if (Square_Chamber hasnt visited) print "be the first feet to tread"; else print "have been the first feet to have trodden"; " them for five hundred years. On the top step is inscribed the glyph Q1."; ], door_to [; if (self.rubble_filled) "Rubble blocks the way after only a few steps."; return Square_Chamber; ], door_dir d_to, rubble_filled true, has scenery door open; ! ---------------------------------------------------------------------------- ! ! The SQUARE CHAMBER. ! ! Defined in DM4 Exercise 2, modified in $8 and $9 Object Square_Chamber "Square Chamber" with name 'lintelled' 'lintel' 'lintels' 'east' 'south' 'doorways', description "A sunken, gloomy stone chamber, ten yards across. A shaft of sunlight cuts in from the steps above, giving the chamber a diffuse light, but in the shadows low lintelled doorways to east and south lead into the deeper darkness of the Temple.", u_to Forest, e_to Wormcast, s_to Corridor, before [; Insert: if (noun == eggsac && second == sunlight) { remove eggsac; move stone_key to self; "You drop the eggsac into the glare of the shaft of sunlight. It bubbles obscenely, distends and then bursts into a hundred tiny insects which run in all directions into the darkness. Only spatters of slime and a curious yellow-stone key remain on the chamber floor."; } ], has light; ! Defined in DM4 §8 Object -> "carved inscriptions" with name 'carved' 'inscriptions' 'carvings' 'marks' 'markings' 'symbols' 'moving' 'scuttling' 'crowd' 'of', initial "Carved inscriptions crowd the walls, floor and ceiling.", description "Each time you look at the carvings closely, they seem to be still. But you have the uneasy feeling when you look away that they're scuttling, moving about. Two glyphs are prominent: Arrow and Circle.", has static pluralname; ! Defined in DM4 §8 Object -> sunlight "shaft of sunlight" with name 'shaft' 'of' 'sunlight' 'sun' 'light' 'beam' 'sunbeam' 'ray' 'rays' 'sun^s' 'sunlit' 'air' 'motes' 'dust', description "Motes of dust glimmer in the shaft of sunlit air, so that it seems almost solid.", before [; Examine, Search: ; default: "It's only an insubstantial shaft of sunlight."; ], has scenery; ! ---------------------------------------------------------------------------- ! ! The STOOPED CORRIDOR. ! ! Defined in DM4 §13 Object Corridor "Stooped Corridor" with description "A low, square-cut corridor, running north to south, stooping you over.", n_to Square_Chamber, s_to StoneDoor; ! Defined in DM4 §5 Treasure -> statuette "pygmy statuette" with name 'snake' 'mayan' 'pygmy' 'spirit' 'precious' 'statuette', initial "A precious Mayan statuette rests here!", description "A menacing, almost cartoon-like statuette of a pygmy spirit with a snake around its neck."; ! Defined in DM4 §13 Object -> StoneDoor "stone door" with name 'door' 'massive' 'big' 'stone' 'yellow', description "It's just a big stone door.", when_closed "The passage is barred by a massive door of yellow stone.", when_open "The great yellow stone door is open.", door_to [; if (self in Corridor) return Shrine; return Corridor; ], door_dir [; if (self in Shrine) return n_to; return s_to; ], with_key stone_key, found_in Corridor Shrine, has static door openable lockable locked; ! ---------------------------------------------------------------------------- ! ! The SHRINE. ! ! Defined in DM4 §23 Object Shrine "Shrine" with description "This magnificent Shrine shows signs of being hollowed out from already-existing limestone caves, especially in the western of the two long eaves to the south.", n_to StoneDoor, se_to Antechamber, sw_to "The eaves taper out into a crevice which would wind further if it weren't jammed tight with icicles. The glyph of the Crescent is not quite obscured by ice."; ! Defined in DM4 §23 Object -> paintings "paintings" with name 'painting' 'paintings' 'lord' 'captive', initial "Vividly busy paintings, of the armoured Lord trampling on a captive, are almost too bright to look at, the graffiti of an organised mob.", description "The flesh on the bodies is blood-red. The markers of the Long Count date the event to 10 baktun 4 katun 0 tun 0 uinal 0 kin, the sort of anniversary when one Lord would finally decapitate a captured rival who had been ritually tortured over a period of some years, in the Balkanised insanity of the Maya city states.", has static; ! Defined in DM4 §12 and §15 Object -> stone_table "slab altar" with name 'stone' 'table' 'slab' 'altar' 'great', initial "A great stone slab of a table, or altar, dominates the Shrine.", has enterable supporter static; ! Defined in DM4 §11 Treasure -> -> mask "jade mosaic face-mask" with name 'jade' 'mosaic' 'face-mask' 'mask' 'face', initial "Resting on the altar is a jade mosaic face-mask.", description "How exquisite it would look in the Museum.", after [; Wear: move priest to Shrine; if (location == Shrine) "Looking through the obsidian eyeslits of the mosaic mask, a ghostly presence reveals itself: a mummified calendrical priest, attending your word."; Disrobe: remove priest; ], cultural_value 10, has clothing; ! ---------------------------------------------------------------------------- ! ! The UPPER/NORTH CANYON. ! ! Defined in DM4 §23 Object Canyon_N "Upper End of Canyon" with description "The higher, broader northern end of the canyon rises only to an uneven wall of volcanic karst.", s_to Junction, d_to Junction, has light; ! Defined in DM4 §15, modified in Exercise 24 and §23 Object -> huge_ball "huge pumice-stone ball" with name 'huge' 'pumice' 'pumice-stone' 'stone' 'ball', initial "A huge pumice-stone ball rests here, eight feet wide.", description "A good eight feet across, though fairly lightweight.", before [; PushDir: if (location == Junction && second == ne_obj) "The Shrine entrance is far less than eight feet wide."; AllowPushDir(); rtrue; Pull, Push, Turn: "It wouldn't be so very hard to get rolling."; Take, Remove: "There's a lot of stone in an eight-foot sphere."; ], after [; PushDir: if (second == n_obj) "You strain to push the ball uphill."; if (second == u_obj) <>; if (second == s_obj) "The ball is hard to stop once underway."; if (second == d_obj) <>; ], has static; ! ---------------------------------------------------------------------------- ! ! The XIBALBÁ/JUNCTION. ! Defined in DM4 §23 Object Junction "Xibalb@'a" with description "Fifty metres beneath rainforest, and the sound of water is everywhere: these deep, eroded limestone caves extend like taproots. A slither northeast by a broad collapsed column of ice-covered rock leads back to the Shrine, while a kind of canyon floor extends uphill to the north and downwards to south, pale white like shark's teeth in the diffused light from the sodium lamp above.", ne_to Shrine, n_to Canyon_N, u_to Canyon_N, s_to Canyon_S, d_to Canyon_S, has light; ! Defined in DM4 §23 Treasure -> stela "stela" with name 'stela' 'boundary' 'stone' 'marker', initial "A modest-sized stela, or boundary stone, rests on a ledge at head height.", description "The carvings appear to warn that the boundary of Xibalb@'a, Place of Fright, is near. The Bird glyph is prominent."; ! ---------------------------------------------------------------------------- ! ! The LOWER/SOUTH CANYON. ! ! Defined in DM4 §23 Object Canyon_S "Lower End of Canyon" with description "At the lower, and narrower, southern end, the canyon stops dead at a chasm of vertiginous blackness. Nothing can be seen or heard from below.", n_to Junction, u_to Junction, s_to "Into the chasm?", d_to nothing, has light; ! Defined in DM4 §12, modified in §21 and §23 Object -> chasm "horrifying chasm" with name 'blackness' 'chasm' 'pit' 'horrifying' 'bottomless', before [; Enter: deadflag = 3; "You plummet through the silent void of darkness, cracking your skull against an outcrop of rock. Amidst the pain and redness, you dimly make out the God with the Owl-Headdress..."; JumpOver: "It's far too wide."; ], after [; Receive: remove noun; print_ret (The) noun, " tumbles silently into the darkness of the chasm."; Search: "The chasm is deep and murky."; ], react_before [; Jump: <>; Go: if (noun == d_obj) <>; ], each_turn [; if (huge_ball in parent(self)) { remove huge_ball; Canyon_S.s_to = On_Ball; Canyon_S.description = "The southern end of the canyon now continues onto the pumice-stone ball, wedged into the chasm."; "^The pumice-stone ball rolls out of control down the last few feet of the canyon before shuddering into the jaws of the chasm, bouncing back a little and catching you a blow on the side of the forehead. You slump forward, bleeding, and... the pumice-stone shrinks, or else your hand grows, because you seem now to be holding it, staring at Alligator, son of seven-Macaw, across the ball-court of the Plaza, the heads of his last opponents impaled on spikes, a congregation baying for your blood, and there is nothing to do but to throw anyway, and... but this is all nonsense, and you have a splitting headache."; } ], has scenery open container; ! ---------------------------------------------------------------------------- ! ! The PUMICE LEDGE. ! ! Defined in DM4 §23 Object On_Ball "Pumice-Stone Ledge" with description "An impromptu ledge formed by the pumice-stone ball, wedged into place in the chasm. The canyon nevertheless ends here.", n_to Canyon_S, d_to Canyon_S, u_to Canyon_S, has light; ! Defined in DM4 §23 Treasure -> "incised bone" with name 'incised' 'carved' 'bone', initial "Of all the sacrificial goods thrown into the chasm, perhaps nothing will be reclaimed: nothing but an incised bone, lighter than it looks, which projects from a pocket of wet silt in the canyon wall.", description "A hand holding a brush pen appears from the jaws of Itzamn@'a, inventor of writing, in his serpent form."; ! ---------------------------------------------------------------------------- ! ! The ANTECHAMBER. ! ! Defined in DM4 §23 Object Antechamber "Antechamber" with description "The southeastern eaves of the Shrine make a curious antechamber.", nw_to Shrine; ! Defined in DM4 Exercise 22, modified in Exercise 55 Object -> cage "iron cage" with name 'iron' 'cage' 'bars' 'barred' 'frame' 'glyphs', description "The glyphs read: Bird Arrow Warthog.", inside_description [; if (self.floor_open) "From the floor of the cage, an open earthen pit cuts down into the burial chamber."; "The bars of the cage surround you."; ], when_open "An iron-barred cage, large enough to stoop over inside, looms ominously here, its door open. There are some glyphs on the frame.", when_closed "The iron cage is closed.", after [; Enter: print "The skeletons inhabiting the cage come alive, locking bony hands about you, crushing and pummelling. You lose consciousness, and when you recover something grotesque and impossible has occurred...^"; move warthog to Antechamber; remove skeletons; give self ~open; give warthog light; self.after = 0; ChangePlayer(warthog, 1); <>; ], react_before [; Go: if (noun == d_obj && self.floor_open) { PlayerTo(Burial_Shaft); rtrue; } ], floor_open false, has enterable transparent container openable open static; ! Defined in Exercise 55 Object -> -> skeletons "skeletons" with name 'skeletons' 'skeleton' 'bone' 'skull' 'bones' 'skulls', article "deranged", has pluralname static; ! ---------------------------------------------------------------------------- ! ! The BURIAL SHAFT. ! ! Defined in Exercise 55 Object Burial_Shaft "Burial Shaft" with description "In your eventual field notes, this will read: ~A corbel-vaulted crypt with an impacted earthen plug as seal above, and painted figures conjecturally representing the Nine Lords of the Night. Dispersed bones appear to be those of one elderly man and several child sacrifices, while other funerary remains include jaguar paws.~ (In field notes, it is essential not to give any sense of when you are scared witless.)", n_to Wormcast, u_to [; cage.floor_open = true; self.u_to = self.opened_u_to; move selfobj to self; print "Making a mighty warthog-leap, you butt at the earthen-plug seal above the chamber, collapsing your world in ashes and earth. Something lifeless and terribly heavy falls on top of you: you lose consciousness, and when you recover, something impossible and grotesque has happened...^"; ChangePlayer(selfobj); give warthog ~light; <>; ], cant_go "The architects of this chamber were less than generous in providing exits. Some warthog seems to have burrowed in from the north, though.", before [; Jump: <>; ], opened_u_to [; PlayerTo(cage); rtrue; ], has light; ! Defined in DM4 §5 Treasure -> honeycomb "ancient honeycomb" with name 'ancient' 'old' 'honey' 'honeycomb', article "an", initial "An exquisitely preserved, ancient honeycomb rests here!", description "Perhaps some kind of funerary votive offering.", after [; Eat: "Perhaps the most expensive meal of your life. The honey tastes odd, perhaps because it was used to store the entrails of the Lord buried here, but still like honey."; ], has edible; ! ---------------------------------------------------------------------------- ! ! The WORMCAST. ! ! Defined in DM4 Exercises 7 and 8, modified in Exercise 54 Object Wormcast "Wormcast" with description "A disturbed place of hollows carved like a spider's web, strands of empty space hanging in stone. The only burrows wide enough to crawl through begin by running northeast, south and upwards.", w_to Square_Chamber, s_to [; print "The wormcast becomes slippery around you, as though your body-heat is melting long hardened resins, and you shut your eyes tightly as you burrow through darkness.^"; if (eggsac in player) return Square_Chamber; return random(Square_Chamber, Corridor, Forest); ], ne_to [; return self.s_to(); ], u_to [; return self.s_to(); ], cant_go [; if (player ~= warthog) "Though you begin to feel certain that something lies behind and through the wormcast, this way must be an animal-run at best: it's far too narrow for your armchair-archaeologist's paunch."; print "The wormcast becomes slippery around your warthog body, and you squeal involuntarily as you burrow through the darkness, falling finally southwards to...^"; PlayerTo(Burial_Shaft); rtrue; ], after [; Drop: move noun to Square_Chamber; print_ret (The) noun, " slips through one of the burrows and is quickly lost from sight."; ], has light; ! Defined in DM4 §23 Object -> eggsac "glistening white eggsac", with name 'egg' 'sac' 'eggs' 'eggsac', initial "A glistening white eggsac, like a clump of frogspawn the size of a beach ball, has adhered itself to something in a crevice in one wall.", after [; Take: "Oh my."; ], react_before [; Go: if (location == Square_Chamber && noun == u_obj) { deadflag = true; "The moment that natural light falls upon the eggsac, it bubbles obscenely and distends. Before you can throw it away, it bursts into a hundred tiny, birth-hungry insects..."; } ]; ! ---------------------------------------------------------------------------- ! ! These objects are moved into place as the game proceeds. ! ! Defined in DM4 §14, modified in §23 Object sodium_lamp "sodium lamp" with name 'sodium' 'lamp' 'heavy', describe [; if (self has on) "^The sodium lamp squats on the ground, burning away."; "^The sodium lamp squats heavily on the ground."; ], before [; Examine: print "It is a heavy-duty archaeologist's lamp, "; if (self hasnt on) "currently off."; if (self.battery_power < 10) "glowing a dim yellow."; "blazing with brilliant yellow light."; Burn: <>; SwitchOn: if (self.battery_power <= 0) "Unfortunately, the battery seems to be dead."; if (parent(self) hasnt supporter && self notin location) "The lamp must be securely placed before being lit."; Take, Remove: if (self has on) "The bulb's too delicate and the metal handle's too hot to lift the lamp while it's switched on."; PushDir: if (location == Shrine && second == sw_obj) "The nearest you can do is to push the sodium lamp to the very lip of the Shrine, where the cave floor falls away."; AllowPushDir(); rtrue; ], after [; SwitchOn: give self light; SwitchOff: give self ~light; ], daemon [; if (self hasnt on) return; if (--self.battery_power == 0) give self ~light ~on; if (self in location) { switch (self.battery_power) { 10: "^The sodium lamp is getting dimmer!"; 5: "^The sodium lamp can't last much longer."; 0: "^The sodium lamp fades and suddenly dies."; } } ], battery_power 100, has switchable; ! Defined in DM4 §16 Object dictionary "Waldeck's Mayan dictionary" with name 'dictionary' 'local' 'guide' 'book' 'mayan' 'waldeck' 'waldeck^s', description "Compiled from the unreliable lithographs of the legendary raconteur and explorer ~Count~ Jean Frederic Maximilien Waldeck (1766??-1875), this guide contains what little is known of the glyphs used in the local ancient dialect.", before [ w1 w2 glyph; Consult: wn = consult_from; w1 = NextWord(); ! First word of subject w2 = NextWord(); ! Second word (if any) of subject if (consult_words==1 && w1~='glyph' or 'glyphs') glyph = w1; else if (consult_words==2 && w1=='glyph') glyph = w2; else if (consult_words==2 && w2=='glyph') glyph = w1; else "Try ~look up in book~."; switch (glyph) { 'q1': "(This is one glyph you have memorised!)^^ Q1: ~sacred site~."; 'crescent': "Crescent: believed pronounced ~xibalba~, though its meaning is unknown."; 'arrow': "Arrow: ~journey; becoming~."; 'skull': "Skull: ~death, doom; fate (not nec. bad)~."; 'circle': "Circle: ~the Sun; also life, lifetime~."; 'jaguar': "Jaguar: ~lord~."; 'monkey': "Monkey: ~priest?~."; 'bird': if (self.correct) "Bird: ~dead as a stone~."; "Bird: ~rich, affluent?~."; default: "That glyph is so far unrecorded."; } ], correct false, has proper; ! Defined in DM4 §23 Object map "sketch-map of Quintana Roo" with name 'map' 'sketch' 'sketch-map' 'quintana' 'roo', description "This map marks little more than the creek which brought you here, off the south-east edge of Mexico and into deepest rainforest, broken only by this raised plateau."; ! Defined in DM4 §23 Object stone_key "stone key" with name 'stone' 'key'; ! Defined in DM4 §17, modified in §18 and §23 Object priest "mummified priest" with name 'mummified' 'priest', initial "Behind the slab, a mummified priest stands waiting, barely alive at best, impossibly venerable.", description "He is desiccated and hangs together only by will-power. Though his first language is presumably local Mayan, you have the curious instinct that he will understand your speech.", life [; Answer: "The priest coughs, and almost falls apart."; Ask: switch (second) { 'dictionary', 'book': if (dictionary.correct == false) "~The ~bird~ glyph... very funny.~"; "~A dictionary? Really?~"; 'glyph', 'glyphs', 'mayan', 'dialect': "~In our culture, the Priests are ever literate.~"; 'lord', 'tomb', 'shrine', 'temple': "~This is a private matter.~"; 'paintings': "The calendrical priest frowns. ~10 baktun, 4 katun, that makes 1,468,800 days since the beginning of time: in your calendar 19 January 909.~"; 'ruins': "~The ruins will ever defeat thieves. In the underworld, looters are tortured throughout eternity.~ A pause. ~As are archaeologists.~"; 'web', 'wormcast': "~No man can pass the Wormcast.~"; 'xibalba': if (Shrine.sw_to == Junction) "The priest shakes his bony finger."; Shrine.sw_to = Junction; "The priest extends one bony finger southwest toward the icicles, which vanish like frost as he speaks. ~Xibalb@'a, the Underworld.~"; } "~You must find your own answer.~"; Tell: "The priest has no interest in your sordid life."; Attack, Kiss: remove self; "The priest desiccates away into dust until nothing remains, not a breeze nor a bone."; ThrowAt: move noun to location; <>; Show, Give: if (noun == dictionary && dictionary.correct == false) { dictionary.correct = true; "The priest reads a little of the book, laughing in a hollow, whispering way. Unable to restrain his mirth, he scratches in a correction somewhere before returning the book."; } if (noun == newspaper) "He looks at the date. ~12 baktun 16 katun 4 tun 1 uinal 12 kin~, he declares before browsing the front page. ~Ah. Progress, I see.~"; "The priest is not interested in earthly things."; ], orders [; Go: "~I must not leave the Shrine.~"; NotUnderstood: "~You speak in riddles.~"; default: "~It is not your orders I serve.~"; ], has animate; ! Defined in DM4 Exercise 53 Object warthog "Warthog" with name 'wart' 'hog' 'warthog', initial "A warthog snuffles and grunts about in the ashes.", description "Muddy and grunting.", orders [; Go, Look, Examine, Smell, Taste, Touch, Search,Jump, Enter: rfalse; Eat: "You haven't the knack of snuffling up to food yet."; default: "Warthogs can't do anything so involved. If it weren't for the nocturnal eyesight and the lost weight, they'd be worse off all round than people."; ], has animate proper; ! Defined in DM4 §8 Object low_mist "low mist" with name 'low' 'swirling' 'mist', description "The mist has an aroma reminiscent of tortilla.", before [; Examine, Search: ; Smell: <>; default: "The mist is too insubstantial."; ], react_before [; Smell: if (noun == nothing) <>; ], found_in Square_Chamber Forest, has scenery; ! Defined in DM4 Exercise 46 Object tiny_claws "sound of tiny claws" thedark with name 'tiny' 'claws' 'sound' 'of' 'scuttling' 'scuttle' 'things' 'creatures' 'monsters' 'insects', article "the", initial "Somewhere, tiny claws are scuttling.", before [; Listen: "How intelligent they sound, for mere insects."; Touch, Taste: "You wouldn't want to. Really."; Smell: "You can only smell your own fear."; Attack: "They easily evade your flailing about."; default: "The creatures evade you, chittering."; ], each_turn [; StartDaemon(self); ], daemon [; if (location ~= thedark) { self.turns_active = 0; StopDaemon(self); rtrue; } switch (++(self.turns_active)) { 1: "^The scuttling draws a little nearer, and your breathing grows loud and hoarse."; 2: "^The perspiration of terror runs off your brow. The creatures are almost here!"; 3: "^You feel a tickling at your extremities and kick outward, shaking something chitinous off. Their sound alone is a menacing rasp."; 4: deadflag = true; "^Suddenly there is a tiny pain, of a hypodermic-sharp fang at your calf. Almost at once your limbs go into spasm, your shoulders and knee-joints lock, your tongue swells..."; } ], turns_active 0; ! ---------------------------------------------------------------------------- ! ! Utility routines. ! Defined in DM4 §4, modified in §21 and §23 [ Initialise; TitlePage(); location = Forest; move map to player; move sodium_lamp to player; move dictionary to player; StartDaemon(sodium_lamp); thedark.description = "The darkness of ages presses in on you, and you feel claustrophobic."; "^^^Days of searching, days of thirsty hacking through the briars of the forest, but at last your patience was rewarded. A discovery!^"; ]; ! Defined in DM4 Exercise 123 [ TitlePage i; @erase_window -1; print "^^^^^^^^^^^^^"; i = 0->33; if (i > 30) i = (i-30)/2; style bold; font off; spaces(i); print " RUINS^"; style roman; print "^^"; spaces(i); print "[Please press SPACE to begin.]^"; font on; box "But Alligator was not digging the bottom of the hole" "Which was to be his grave," "But rather he was digging his own hole" "As a shelter for himself." "" "-- from the Popol Vuh"; @read_char 1 -> i; @erase_window -1; ]; ! Defined in DM4 §22 [ PrintRank; print ", earning you the rank of "; if (score == 30) "Director of the Carnegie Institution."; if (score >= 20) "Archaeologist."; if (score >= 10) "Curiosity-seeker."; if (score >= 5) "Explorer."; "Tourist."; ]; ! Defined in DM4 §21 [ DeathMessage; if (deadflag == 3) print "You have been captured"; ]; ! ---------------------------------------------------------------------------- ! Include "Grammar"; ! Defined in DM4 §6 [ PhotographSub; if (camera notin player) "Not without the use of your camera."; if (noun == player) "Best not. You haven't shaved since Mexico."; if (children(player) > 1) "Photography is a cumbersome business, needing the use of both hands. You'll have to put everything else down."; if (location == Forest) "In this rain-soaked forest, best not."; if (location == thedark) "It is far too dark."; if (AfterRoutines()) return; print_ret "You set up the elephantine, large-format, wet-plate camera, adjust the sodium lamp and make a patient exposure of ", (the) noun, "."; ]; Verb 'photograph' * noun -> Photograph; ! ---------------------------------------------------------------------------- !