! ------ Silent world #ifndef SKIP_SILENT; Attribute blue; Attribute yellow; Attribute pissed alias general2; Attribute higher alias general2; Property guard_by; Fake_Action HearSound; Fake_Action HearSoundPair; Fake_Action HearSoundAlone; Class guard with name "wearing" "silk" "robe", life [; Answer, Ask, Tell, Order: <>; Attack, Kiss: print "You don't want any trouble, and ", (heshe) self, " looks like ", (heshe) self, "'s got some to spare.^"; rtrue; ], react_before [; Applaud, Shout: <>; Sing: if (noun ~= voicebox) <>; ], before [ ix; HearSound: ix = findpartner(self); if (ix == nothing) <>; else <>; HearSoundAlone: !print "[DEBUG] HearSoundAlone ", (name) noun, "^"; rtrue; give self pissed; print (The) self, " impales you with icy eyes. You freeze; but ", (heshe) self, " only raises a palm, stiffly, and then turns away.^"; rtrue; HearSoundPair: !print "[DEBUG] HearSoundPair ", (name) noun, ", ", (name) second, "^"; rtrue; if (self hasnt pissed && second hasnt pissed) { give self pissed; give second pissed; print (The) second, " glares at you furiously, and begins moving \ towards you, but ", (the) self, " puts a hand on ", (hisher) second, " arm. ", (The) self, " holds your eyes impassively for a moment. Then \ your gaze drops.^"; rtrue; } print (The) self, " stares at you, and ", (the) second, " shakes ", (hisher) second, " head in disgust. Before you can move, the two of them \ have pinioned your arms, and you find yourself rapidly elsewhere.^^"; SilentArrest(); rtrue; ], has static animate; Class blueguard class guard, with name "blue", has blue; Class yellowguard class guard, with name "yellow", has yellow; [ heshe obj; if (obj == 1 || (obj ~= 0 && obj hasnt female)) print "he"; else print "she"; ]; [ cheshe obj; if (obj == 1 || (obj ~= 0 && obj hasnt female)) print "He"; else print "She"; ]; [ hisher obj; if (obj == 1 || (obj ~= 0 && obj hasnt female)) print "his"; else print "her"; ]; [ himher obj; if (obj == 1 || (obj ~= 0 && obj hasnt female)) print "him"; else print "her"; ]; [ guardrobe obj colstr; if (obj has yellow) colstr = "yellow"; else colstr = "blue"; print "breeches and a half-robe of ", (string) colstr, " silk, bound tightly with ", (string) colstr, " cords at the wrists and knees"; ]; [ guardcolor obj; if (obj == 1 || (obj ~= 0 && obj has yellow)) print "yellow"; else { if (obj == 0 || obj has blue) print "blue"; else print "octarine [BUG]"; } ]; [ findpartner obj ix oppcolor; if (obj has blue) oppcolor = yellow; else oppcolor = blue; objectloop (ix near obj) { if (ix has oppcolor) return ix; } return nothing; ]; [ findguard obj ix; while (parent(obj) ~= nothing) { obj = parent(obj); } objectloop (ix in obj) { if (ix has blue || ix has yellow) return ix; } return nothing; ]; [ SilentArrest; deadflag = 1; "In less than an hour, you are in an uncomfortably official-looking room, facing \ several official-looking people in blue and yellow robes. They offer you a beaker \ of something murky. Something in the way they stare tells you that drinking it \ would be less painful than refusing it. The world goes murky as well.^^\ If it's any comfort, the officials looked horrified when you collapsed. There \ must be something different about your metabolism.^"; ]; [ VoiceBoxArrest; deadflag = 1; "The resonance of your voice and the box spread out into the quiet... and \ people turn, and you see the light in their eyes.^^\ And the fury --^^\ The crowd knots, a surge of clawing, kicking, smashing, with you at the \ center. In the brief moments of pain, you still manage to be surprised at the \ utter silence of the mob."; ]; Object SilBehindStand "Field Behind Platform" with name "people", description "You are alone to the east of a long wooden platform. \ This must be the back, for a slat fence runs around this small field, \ enclosing you, assorted rolls of canvas, and a small mountain of hay \ bales. A small closed gate breaks the fence to the north. The sun is bright, \ but the air is mild and fertile-scented.", n_to [; <>; ], w_to platformback, u_to platformback, d_to CantGoThatWay, before [; Go: if (noun == w_obj || noun == u_obj || noun == platformback) { print "You pull yourself up the ladder."; if (silplatformcrowd in SilPlatform) { print " No heads turn."; } new_line; } ], cant_go "The fence surrounds all directions but north and west.", has light outdoors; Nearby canvasrolls "rolls of canvas" with name "stack" "roll" "rolls" "of" "canvas", description "Several long rolls of canvas are stacked in a corner of the field. \ There's nothing very remarkable about them.", before [; Take, Push, Pull: "The rolls are each fifteen or twenty feet long, and do you know how \ heavy canvas is?"; Search: "You peer narrowly into a roll. There is nothing but dust there."; LookUnder: "There doesn't seem to be anything under the stack of canvas rolls."; ], has scenery; Nearby fencebehindstand "fence" with name "fence" "gate" "board" "boards" "slat" "slats" "wire", description "The fence begins and ends at the corners of the platform, sealing \ this area off, but for the closed gate to the north. \ It's of board slats bound in wire, \ and a little higher than you.", before [; Open, Unlock: "The gate is barred from the other side."; Close: "The gate is already closed."; Lock: "The gate is already barred."; Enter: "The gate is closed and barred."; Search, LookBehind: "Peering between the boards, you can make out tree-lined fields to the north. \ A road runs by the fence to the south, and to the east are the anonymous \ backs of brick buildings."; Climb: "If you had to guess, you'd guess that this fence was built to discourage \ climbing. Well-built, then."; ], has scenery; Nearby platformback "wooden platform" with name "long" "wooden" "platform" "ladder", description [; print "The platform is just high weathered boards on this side, running all along \ the west side of the field."; if (silplatformcrowd in SilPlatform) { print " Atop, you can see the backs of people's heads; \ they are intent on something on the other side."; } " A ladder runs up one corner-post."; ], door_dir w_to, door_to SilPlatform, before [; Climb: <>; Search: <>; LookUnder: "You see only dusty bare earth."; LookBehind: "You cannot see past the platform."; ], has scenery door open; Nearby haybales "bales of hay" with name "bale" "bales" "of" "hay", description "The hay is baled in massive blocks, bound with coarse twine, breathing \ sweet dusty warmth. And... a touch of smoky coolness, too. You look for and find \ the night-black behind the hay bales: the shadow you stepped out of when first you \ came between this springtime land and its sky.", before [; Touch: "The hay holds a moist warmth."; Smell: "It smells, wonderfully, just like hay. The shadow behind the bales adds \ its own touch of spicy autumn breeze."; LookUnder: "There doesn't seem to be anything under the stack of hay bales."; Search: "One might as well search for a reed in a haystack."; Pull, Push: "The bales of hay are too large to move."; Take: if (self has general) "There's no need to start a collection."; give self general; move haywisp to player; "You pull a wisp of hay from one bale."; LookBehind: <>; Ignite: "There's quite a lot of hay there. It would probably all catch fire, and \ the results would be unpleasant."; ], has scenery; ! general means wisp is taken Nearby hayshadow "shadow behind the hay bales" class shadowclass, with description "The shadow of the hay bales lies on the grass, black, impossible, \ and real. You wonder how you can be not even surprised, anymore.", door_to NovChimneyRoad, door_world world_November, before [; Smell: "It smells of smoky autumn, no more in place here than it was in the death-hot \ theater."; Receive: print (The) noun, " slides into the shadow, moving beyond the simple \ limits of grass and sky, leaving your hand empty.^"; rfalse; Enter: print "The shadow ", (emphstring) "widens", " in the way you are coming \ almost to understand. Again the blackness falls upon you, and your \ thoughts, scattering and wearing them down into their own ends --^^"; PauseClear(); print "-- And the world begins again in the rich autumn wind.^^"; rfalse; ]; Object haywisp "wisp of hay" with name "wisp" "of" "hay", description "It's dried grass.", before [; Ignite: remove self; "The wisp of hay flares up, and crumbles to white ash."; Insert, PutOn: if (second == ears) { "It doesn't make much difference in what you hear, and it \ won't stay in, and it would be miserably itchy if it did."; } ]; Object SilPlatform "On the Platform" with name "step" "steps", description [; print "The platform sweeps gently down to the west, in a series of low, \ wide, sunny steps."; if (silplatformcrowd in SilPlatform) { print " And the steps are filled with people. \ Quiet people; they sit and gaze intently out to the west."; } " A long oval of earth is spread out below you in that \ direction. Clearly this is a cyclia of some kind. The platform is mostly \ fenced, but a broad path leads southwest, and a ladder drops down the east \ side."; ], e_to [; if (silplatformcrowd in SilPlatform) { print "You let your eyes wander east, and let your body absently follow, until \ you reach the ladder. Unnoticed, you descend.^"; } else { print "You climb down the ladder.^"; } return SilBehindStand; ], d_to [; <>; ], sw_to [; print "You make your way down the steps.^"; return SilYard; ], cant_go "The platform is surrounded by a low fence, except to the southwest.", has light outdoors; Nearby platformfence "fence" with name "low" "fence" "rail" "railing", description "It's just a low railing.", before [; Climb: "People squint disgustedly at you, until you stop trying."; ], has scenery; Nearby ringfromplatform "oval arena" with name "arena" "oval" "cyclia" "earth", description [; print "The arena is a long, scarred oval of bare earth. It stretches along the \ west side of the platform, although you are separated by a low railing. You \ can see a gate in the south side of the arena.^^"; <>; ], before [; Examine: rfalse; Search: <>; default: "A fence stands between you and the arena."; ], has scenery; Nearby thecircus "performance" with name "show" "performance" "animal" "animals" "creature" "creatures" "people" "rider" "riders", description [; if (self.number == 26 || self.number == 27 || self.number == 28) { "A few people in nondescript clothing are cleaning the arena."; } if (self.number >= 1 && self.number < 17) { "The arena is filled with animals; strange animals. You can't quite make \ out details, but the quick darting movements are nothing \ you have seen before, not in anything larger than a sparrow. These \ creatures are taller than you: four legs, but some rearing to walk on two, \ shaggy hair -- or something, \ in rich earth-toned stripes -- \ narrow heads with long toothy muzzles -- or beaks? \ You give up; you're too far away. But the animals move with practiced \ precision. They are led and ridden by \ people in brilliant colors, reds and violets and greens."; } "The arena is empty."; ], before [; Examine: rfalse; default: "A fence stands between you and the arena."; ], number 38, ! start just before show begins (crowd is out) daemon [ skipped; self.number = self.number+1; ! always do switch (self.number) { 1: give southstable open; give silyardgate open; give silsouthdoorsouth open; move yardblueguard to SilYard; move yardyellowguard to SilYard; if (dasher.number == 0) { remove dasher; if (saddle in dasher) move saddle to SilYard; } if (lowleaper.number == 0 && highleaper.number == 0) { remove lowleaper; remove highleaper; if (saddle in lowleaper || saddle in highleaper) move saddle to SilSouthStable; } 2: give silsouthdoorsouth ~open; 3: give silplatformchains general; 13: skipped = 0; if (lowleaper.number ~= 0 || highleaper.number ~= 0) { skipped = 1; self.number = 15; } 16: give southstable open; give silsouthdoorsouth open; if (dasher.number == 0) { move dasher to SilYard; give tether ~general; } if (lowleaper.number == 0 && highleaper.number == 0) { move lowleaper to SilSouthStable; move highleaper to SilSouthStable; give lowharness ~general; give highharness ~general; } 17: give silplatformchains ~general; give silyardgate ~open; give silsouthdoorsouth ~open; remove yardblueguard; remove yardyellowguard; 19: remove silplatformcrowd; move silyardcrowd to SilYard; 20: remove silyardcrowd; 26: give silyardgate open; move ringsweeps to SilRing; 29: give silyardgate ~open; remove ringsweeps; 38: move silyardcrowd to SilYard; 39: move silplatformcrowd to SilPlatform; silplatformcrowd.number = 0; 40: remove silyardcrowd; self.number = 0; } ! do depending on location (messages only, please!) switch (location) { SilBehindStand: switch (self.number) { 5, 10: "^You see hands waving up on the platform. The hands sparkle bright \ silver, too bright to make out the cause."; 12: "^The hands on the platform continue to wave and glitter."; 14: "^You can see the people on the platform have risen to their feet, \ waving their sparkling hands madly."; 16: "^The hands on the platform continue to wave and glitter."; 18: "^The people up on the platform seem to be getting up and leaving."; 39: "^You see motion up on the platform -- people, though they're \ facing the other way."; } SilSouthStable: switch (self.number) { 1: print "^Without warning, the door to the south slams open, and a torrent \ of stomping, snorting, snapping animals pours through the building."; if (player in location) { ! ie, not riding print " You find yourself flattened against one wall, desperately trying \ to retract your toes."; } new_line; if (lowleaper.number == 0 && highleaper.number == 0) { ! both leapers already removed if (player in lowleaper || player in highleaper) { print "^A very large woman in a brightly-striped tunic lifts you \ off ", (the) parent(player), ". With one hand.^"; move player to SilSouthStable; ! whew! } print "^The two clawed animals seem to have been swept away \ in the flood.^"; } else { if (lowleaper.number == 0) { print "^You notice a man looking angrily around the building. \ He stalks out, leaving ", (the) lowleaper, " still tied.^"; } if (highleaper.number == 0) { print "^You notice a man looking angrily around the building. \ He stalks out, leaving ", (the) highleaper, " still tied.^"; } } rtrue; 2: "^The cavalcade of creatures ends abruptly; one last scurrying thing \ vanishes through the northern door. The door to the south whaps \ shut, leaving a thunderous silence."; 16: print "^Without warning, a torrent \ of stomping, snorting, snapping animals pours into the building \ from the north, funnelling into the southern door. \ You find yourself flattened against one wall, desperately trying \ to retract your toes.^"; if (lowleaper.number == 0 && highleaper.number == 0) { ! both leapers already in place print "^You notice that two large animals with evil-looking claws \ have just been tethered here -- a small diversion from the flood.^"; } rtrue; 17: "^The cavalcade of creatures ends abruptly; one last scurrying thing \ vanishes through the southern door. It whaps \ shut, leaving a thunderous silence."; } SilYard: switch (self.number) { 40,0: "^The yard empties as the last of the crowd leaves to the northeast."; 1: print "^Two men, one in yellow and one in blue, enter from the east. \ Without speaking, they nod formally to each other, and then \ pull open the large gate to the north. \ They take up position at either side of the gate, waiting... \ and then a stream of animals and people pours across the yard, \ from the south building, through the gate.^"; if (dasher.number == 0) { ! dasher has already been removed if (player in dasher) { move player to SilYard; ! whew! print "^A very large man in a brightly-striped tunic lifts you \ off the crested animal. With one hand.^"; } if (tether has general) print "^You notice someone examining the crested animal's \ tether. She puzzles for a moment, then shrugs and leads it to \ join the procession.^"; else print "^A woman in bright checkered cloth untethers the \ crested animal, and they join the procession.^"; } rtrue; 2: "^The last few animals are led away through the gate."; 16: print "^People and strange animals begin filing out of the gate. They \ stream through the yard, into the building to the south.^"; if (dasher.number == 0) { print "^You notice one creature hooting distressedly, balking \ at the southern doorway. After a moment, its trainer shakes \ her head and tethers it to a post in the yard.^"; } rtrue; 17: "^The last few animals dart through the northern gate, and are led \ to the south. The men in blue and yellow nod formally to each \ other, slide the gate shut, nod again, and vanish still silent \ through the arch."; 19: "^People are walking down from the platform, and moving through the \ arch, and away."; 20: "^The yard empties as the last of the crowd leaves to the east."; 26: "^Three people in dull clothing enter from the arch. \ They drag open the northern gate, and disappear through it."; 29: "^Three people in nondescript clothing come through the gate, \ pulling it shut behind them. They walk away to the east without \ a word or glance."; 38: "^People are entering the yard through the brick arch."; 39: "^More people are entering the yard, and crowding up the platform \ to the northeast."; } SilRing: switch (self.number) { 1: print "^The gate to the south scrapes open suddenly. Two irritated faces \ look in at you; then their owners, a pair of men in blue and \ yellow, trot in and grab you unceremoniously by the arms.^^\ You are hauled out and dumped in the yard, as a \ stream of animals and people rushes past you into the arena. \ The two men take up position on either side of the gate, \ staring deliberately past you.^"; PlayerTo(SilYard, 2); ! standard look rtrue; 26: "^The gate suddenly opens, and three people in dull clothing enter."; 27: "^The people here continue sweeping and picking up scraps."; 28: "^The three people reach the north end of the arena, and begin making \ their way back, sweeping industriously."; 29: "^The three people have swept and cleaned their way back to the \ south end of the arena. Without even glancing at you, they walk out \ through the gate, and heave it shut. You stare at their tracks, \ slightly too astonished to be angry."; } SilPlatform: switch (self.number) { 1, 2: "^Animals are filing into the arena, led by people in bright colors."; 3: "^Animals and people begin circling around the arena."; 4: "^The circle of animals splits and doubles back, smoothly."; 5: "^The arena is a complex weave of animals and people, circling \ and interlocking.^^\ The people sitting here are waving their hands silently in the air. \ Tiny silver chains swing and glitter on their fingers."; 6: "^The arena begins to separate out again, into a circle \ of precisely-stepping animals and people.^^\ The crowd around you is still quietly waving their bright \ finger chains in the sunlight."; 7: "^Most of the animals file out of the arena. A few move \ to the center and kneel placidly."; 8: "^In one simultaneous leap, people in brightly-colored clothing \ mount the animals in the center of the arena."; 9: "^In the arena, \ the animals rear up and begin marching around, upright, their \ riders still clinging firmly."; 10: "^In the arena, \ the animals leap back and forth in formation. Their riders \ are waving their hands in the air.^^\ The people sitting here are waving back. \ Tiny silver chains swing and glitter on their fingers."; 11: "^One animal stops suddenly and lies down in the center of the arena. \ The others leap over it, one after another.^^\ The crowd around you wave its hands harder, but the only sound is \ the faint scratching of claws in the arena."; 12: "^Two animals are lying in the arena, with the rest leaping over both of them. \ Then two, and now three; the leaps grow longer.^^\ The people around you wave their chains harder."; 13: "^Four animals are crouched side by side in the center of the arena. \ The other two, still carrying their proud riders, leap back \ and forth madly. Their harnesses, green and violet, blur against \ the dusty air.^^\ The people sitting here have their hands upraised, waving wildly. \ The small bright chains on their hands are like a waterfall \ of sunlight across the platform."; 14: "^Four animals are crouched side by side in the center of the arena. \ The other two, one in green harness and one in violet, face each \ other across the line.^^The riders lean forward, and the two \ creatures hurl toward each other. They leap simultaneously, and \ the animal in green hurtles over the crouching four -- and the one in \ violet, incredibly, sails over all five, clearing the green's \ head even at the peak of its leap.^^\ Everyone is on their feet, utterly silent, waving silver chains."; 15: print "^All the animals in the arena rise, and parade slowly around."; if (skipped ~= 0) print "^^The audience hesitates for a moment; they look a little \ disappointed."; new_line; rtrue; 16: "^The animals, weaving in complex patterns, are leaving the arena through \ its south gate.^^\ The audience continues to wave the bright chains on their fingers."; 17: "^The last animals file out of the arena, followed by the brightly-clothed \ people."; 18: "^The people here on the platform begin to get up and leave. \ They are still quiet, although now they are gesturing and \ looking at each other animatedly."; 19: "^The last few people leave to the southwest."; 26: "^A few nondescript people move into the arena and begin sweeping and \ tidying."; 29: "^The people down in the arena finish sweeping and leave."; 39: "^People are wandering up to the platform, and sitting down. \ They seem excited, looking around and smiling, \ but they're strangely quiet."; 40,0: "^The platform is now crowded with people. Slowly they stop looking \ at each other, and begin watching the arena below."; } } ], has scenery; Object silplatformcrowd "crowd" with name "crowd" "audience" "people", description [; print "The people sitting on the steps look about like people. The clothes \ are a little strange, with long archaic-looking folded sleeves. But by far \ the oddest thing is that everyone is quiet. They look at each other, smile, \ move their hands, nod; but nobody speaks. You notice also that most of the \ crowd are wearing rings on both hands."; if (silplatformchains has general) " Small silver chains dangle from the rings, and glitter as they move."; else " Small silver chains wrap loosely around their hands."; ], number 0, ! annoyance counter for hearing noise before [; Follow: if (thecircus.number == 18) { itobj = silyardcrowd; <>; } Listen: "The crowd is absolutely quiet, except for rustling of clothing and \ jewelry."; HearSound: self.number = self.number + 1; if (platblueguard in SilPlatform) <>; switch (self.number) { 1: "The people around you turn, in utter shock and horror."; 2: ! call the blue guard platblueguard.number = 0; StartDaemon(platblueguard); "The people around you turn to you again. Their faces are flushed, their \ eyes narrow. Then, as one, they all turn away and fix their eyes on \ the arena."; default: "People quiver slightly, but resolutely ignore you."; } ], life [; Answer, Ask, Tell, Order: <>; default: "Everyone's attention is on the arena to the west."; ], react_before [ ix; Listen: if (noun == 0) <>; Applaud, Shout: <>; Sing: if (noun ~= voicebox) <>; VoiceBoxArrest(); rtrue; Wave, WaveHands: ix = 0; ! set to 1 if the ring is being waved if (action == ##Wave) { if (noun ~= glittering) rfalse; ! else continue ix = 1; } else { ! just waving hands if (glittering in player && glittering has worn) ix = 1; } if (ix == 1) print "The ring glitters as you"; else print "You"; if (thecircus.number < 18) { if (thecircus.number < 5) " wave your hands enthusiastically in the air."; else " join the enthusiastic hand-waving."; } else { " wave your hands in the air. People look at you oddly."; } ], has scenery animate hiddengender transparent; Object silplatformchains "rings and chains" silplatformcrowd with name "silver" "rings" "chains", description [; print "Trying not to stare too blatantly, you examine the nearest \ person's rings. They're plain silver bands, one on each forefinger. \ Each ring has a short silver chain"; if (self has general) " dangling from it; the chains seem to be cut in glittering facets."; else " attached to it, which is wrapped around the hand."; ], before [; Examine: rfalse; default: "Those belong to the people sitting here."; ], has scenery; ! general means freed for use. Object platblueguard "short man in blue" class blueguard, with name "short" "heavy" "man" "menhir", describe [; "^A short man of medium age, wearing blue, is sitting on the steps \ nearby. He's not watching you obtrusively; but his attention never gets \ too far away."; ], description [; print "He's short and a little heavy, with greying hair; his face is \ rough, wrinkled around the eyes. He's wearing ", (guardrobe) self, ".^"; rtrue; ], before [; HearSound: !print "(Resetting platblueguard.number. [DEBUG])^"; self.number = 1; rfalse; HearSoundAlone: !print "(Summoning yellow guard. [DEBUG])^"; platyellowguard.number = 0; StartDaemon(platyellowguard); rfalse; ], number 0, daemon [; self.number = self.number + 1; if (self.number == 1) { move self to SilPlatform; "^A short, middle-aged man wearing blue silk is climbing towards you. \ He moves heavily, like an animate menhir. Without a word, he sits \ down a few rows behind you and to one side, and begins staring \ absently out over the arena."; } if (self.number == 6) { if (location == parent(self)) { print "^The short man in blue gets up, nods curtly to you, and \ stumps away down the steps."; if (location == parent(platyellowguard)) print " The wiry woman follows him silently."; new_line; remove platyellowguard; } StopDaemon(self); StopDaemon(platyellowguard); remove self; silplatformcrowd.number = 1; } ]; Object platyellowguard "thin woman in yellow" class yellowguard, with name "thin" "wiry" "young" "woman", describe [; "^A thin, wiry young woman wearing yellow silk is standing here, watching you."; ], description [; print "She's of medium height, thin -- not muscular, but obviously stronger \ than you. She's wearing ", (guardrobe) self, ".^"; rtrue; ], before [; HearSound: !print "(Resetting platyellowguard.number. [DEBUG])^"; self.number = 1; rfalse; ], number 0, daemon [; self.number = self.number + 1; if (self.number == 1) { move self to SilPlatform; StopDaemon(self); "^A thin woman wearing yellow silk appears. \ She is watching you coldly."; } ], has female; Object SilYard "Dusty Yard" with name "post", description [; print "This broad yard is the center of the compound, if the worn and \ cross-tracked earth is any sign. A road runs east under a brick arch; a path \ leads northeast to the seating platform;"; if (silyardgate has open) print " a wide gate stands open in the fence to the north;"; else print " a wide gate stands closed in the fence to the north;"; print " and unpainted wooden buildings stand west and south."; if (southstable has open) " The west building's door is closed, and the south door is open."; else " Both buildings' doors are closed."; ], ne_to SilPlatform, e_to silringarch, w_to weststable, s_to southstable, n_to silyardgate, u_to CantGoThatWay, d_to CantGoThatWay, cant_go "The yard is fenced on that side.", before [; Go: if (noun == n_obj || noun == silyardgate) { if (player notin SilYard) { ! riding something rfalse; } if (silyardgate hasnt open) { "The gate is closed."; } if (yardblueguard in self && yardyellowguard in self) "The men in blue and yellow step together, in unison, blocking \ your way. They say nothing. You retreat nevertheless."; else rfalse; } ], has light outdoors; Nearby silringarch "brick arch" with name "slender" "golden" "brick" "arch", description "The arch is a slender curve of golden brick, light and wide. It \ flies over the road, unrepentantly, for its own sake.", door_dir e_to, door_to SilMallNorth, before [; Climb: "You're not agile enough for the smooth brick."; Search, LookBehind, LookUnder: "People crowd a sunny avenue beyond the arch."; ], has door open scenery; Nearby silyardgate "northern gate" with name "n" "north" "northern" "wide" "gate", description [; print "A gate, of heavy logs, wide enough for a road to pass through. \ The gate is"; if (self has open) " open."; else " closed."; ], door_dir n_to, door_to SilRing, before [; Open, Close, Push, Pull: "The gate is too heavy for one person to move."; Climb: "You can't."; Search, LookBehind: print "Beyond the gate is a broad oval of bare earth. "; <>; ], has door open scenery; Nearby southstable "south building" with name "s" "south" "door" "wood" "wooden" "building", description [; print "It's a plain building, one story, with a wide high door and narrow \ windows."; if (self has open) " The door is open."; else " The door is closed."; ], door_dir s_to, door_to SilSouthStable, before [; Lock, Unlock: "You can't figure out how."; Search: print "You squint into the dimness beyond a window"; if (highleaper in SilSouthStable || lowleaper in SilSouthStable) " -- and a pair of \ huge unsettling eyes stare back. You jump, and the eyes vanish \ without ever having blinked."; ", to no avail."; KnockOn: if (highleaper in SilSouthStable || lowleaper in SilSouthStable) "The only response is a brief rustling."; "There is no response."; Open: if (player in dasher || player in lowleaper || player in highleaper) "You can't reach the door from where the creature is standing."; Close: if (player in dasher || player in lowleaper || player in highleaper) "You can't reach the door from where the creature is standing."; if (thecircus.number == 1 or 16) "You can't, not with this stampede blasting through."; ], after [; Open: "You haul the door open."; Close: "You drag the door shut."; ], has door open openable scenery; Nearby weststable "west building" with name "w" "west" "door" "wood" "wooden" "building", description [; print "It's a plain building, one story, with a wide high door and narrow \ windows."; if (self has open) " The door is open."; else " The door is closed."; ], door_dir w_to, door_to SilYard, before [; Open: "The door to the west building seems to be locked, although you can't \ see any lock mechanism."; Lock, Unlock: "You can't figure out how."; Search: "You squint into the dimness beyond a window -- and something sharp snaps \ at your face. You jump back."; KnockOn: "The only response is a disturbingly light tenor hooting."; ], has door openable locked scenery; Nearby dasher "crested animal" with name "odd" "crest" "crested" "animal" "creature", describe [; print "^An odd creature with a bony crest stands at one edge of the "; switch (parent(self)) { SilYard: print "yard."; default: print "mall."; } print " A tether is looped around its neck"; if (tether hasnt general) print " and tied to a post near the west building."; else print " and hangs loosely to the ground."; if (saddle in self) print " A length of orange leather is draped unevenly across the \ creature's back."; new_line; rtrue; ], description [; print "It's as strange as any creature you've seen in this place. The creature \ has four slender legs, deer-like, with small three-toed feet. \ Its head is long and tapered, with huge eyes set wide and high up the skull, \ and a short broad bill at the end of the muzzle. A gentle, slightly goofy face. \ Most of the body has a fine \ tan plush coat, lightening to cream on the belly; but this thickens to a tufty \ black mane up the neck and across the forehead. And from the top of the mane, \ reaching back from the top of the skull, an absurd bone crest hooks back, a \ knobby curve at least as long as the head itself."; if (tether hasnt general) print " The creature is tied to a \ post with a long tether, which is looped around its neck."; else print " A tether is looped around \ the creature's neck; the cut end dangles on the ground."; if (saddle in self) print " A length of orange leather is draped unevenly across \ its back."; new_line; rtrue; ], number 0, ! number means: 0: calm, in yard. 1: running, carrying you. 2: calm, by river ! 3: vanished or dead life [ obj; Answer, Ask, Tell, Order: "The creature looks at you sideways. Its eyes are large and dark and liquid, \ but not particularly bright-looking."; Kiss: "Complex puns about animal husbandry come to mind."; Attack, ThrowAt: if (self.number ~= 0) { if (player in self) { if (self.number == 1) "The creature shivers, but does not slow."; else "The creature stiffens, and shivers, but does not move. \ Once was apparently enough."; } else "The creature shies from your approach. Once was apparently enough."; } if (action == ##ThrowAt) obj = noun; else obj = second; print "You whap the creature with "; if (obj == nothing) print "your hand"; else print (the) obj; print ". It shies violently"; if (tether hasnt general) { print ", leaps, and is brought up short by its tether."; if (player in self) print " You hold desperately as the"; else print " The"; " creature tries to leap again, and staggers; then it seems to calm. \ It shakes its crested \ head, hoots a few times, and looks around for some grass."; } print ", and leaps across the yard, towards the arch."; if (player in self) { new_line; self.number = 1; StartDaemon(self); rtrue; } else { self.number = 2; move self to SilMallSouth; " The clatter of its claws fades rapidly."; } Give, Show: if (noun == haywisp) { remove noun; "The creature bills up the hay, and chews placidly."; } "The creature doesn't show much interest."; ], react_before [; Exit: if (player in self) { if (location == thedark) move player to real_location; else move player to location; if (self.number == 1) { StopDaemon(self); self.number = 2; print "You slide from the careening creature's back. There is a painful \ interval of hooves and cobblestones, and then you are lying on \ your bruises"; if (self notin SilMallSouth) { move self to SilMallSouth; ", watching the crest vanish down the mall."; } else { ".^^The creature bounds towards the river, and for a moment it \ seems about to leap -- but then its claws are skittering \ on the cobblestones, scrambling to a stop. \ It looks around nervously, \ then begins billing at a tuft of grass by the river."; } } "You slide off the crested creature. It gives you a sidelong stare and goes \ back to cropping grass."; } Drop: if (player in self) { if (noun == saddle) "You can't drape the leather on the animal's back when you're \ sitting there."; "It would just fall off onto the ground."; } Jump: if (player in self) { "It's hard enough staying on."; } ], before [; Climb: <>; Touch, Rub: if (self.number ~= 0) "The creature sidles away from you, with a nervous glance."; "The creature's short fur ruffles pleasantly. It gives a low hoot, and pokes \ your arm gently with its bill. A friendly scene, all around."; Smell: "The creature has a musty, slightly sour odor."; LookUnder: "The creature is male. Did you really care?"; Push, Pull, PushDir: "The creature takes an obliging step, albeit in an arbitrary direction."; Ignite: "What a nasty thought. Bite your tongue."; Untie: <>; Go: if (second ~= 0) { if (second ~= 2) { print "The creature asks, ~What's motion reason ", second, "?~ [BUG]^"; return 2; } ! daemon-ordered movement print "You cling to the creature's mane as it gallops furiously.^"; return 1; } if (self.number == 1) print "Your mount is in a blind gallop.^"; else print "Your mount is blissfully oblivious to your desires.^"; return 2; Search: if (saddle in self) "It's wearing the orange leather, but that's all."; "You find nothing unusual."; Receive: if (player in self) { <>; } if (noun == saddle) { move saddle to self; "You drape the leather over the animal's back. It wrinkles and hangs \ awkwardly, but it stays on."; } print (The) noun, " slides off the creature's back.^"; keep_silent = 1; ; keep_silent = 0; rtrue; LetGo: if (noun == saddle && player in self) { "You can't take the leather; you're sitting on it."; } Enter: if (self.number ~= 0) <>; rfalse; ], after [; Enter: "The creature whuffles a bit as you slide onto its back, but it seems \ able to carry you."; ! Receive: ! print "You balance ", (the) noun, " on the creature's back.^"; ! rtrue; ], daemon [ dir; ! runs iff self.number == 1, meaning that the creature is running and you're ! on board. if (player notin self) { "^The creature runs away without you, humming ~The Liberty Bell.~ [BUG]"; } if (self.number ~= 1) { print "^The crested creature runs without moving. [BUG]^"; } switch (parent(self)) { SilMallSouth: self.number = 2; StopDaemon(self); print "^The creature jerks its head abruptly. It sees the river ahead. \ For one instant you feel it bunch up, as if to leap -- but then its \ claws are skittering on the cobbles, scrambling to a stop. Your \ knotted fingers stop protesting and simply give up; you slide over the \ creature's shoulder, flop to the pavement. The stone pavement.^^\ A moment later you look \ up, and see it unconcernedly billing at some grass by the river's margin. \ There's no justice.^"; move player to location; rtrue; SilYard: dir = e_obj; SilMallNorth: dir = s_obj; SilMallMiddle: dir = s_obj; default: "What's the crested creature doing here? [BUG]"; } new_line; ; rtrue; ], each_turn [; switch (self.number) { 0: switch (random(9)) { 1: print "^The crested animal noses around the edge of the yard"; if (tether hasnt general) print ", to the limit of its tether"; ", and crops some grass with its bill."; 2: if (tether hasnt general) "^The crested animal pulls absently at its tether."; else "^The crested animal wanders absently across the yard."; 3: "^The crested animal chews thoughtfully."; } 2: switch (random(9)) { 1: "^The crested animal crops some grass by the river's edge."; 2: "^The crested animal wanders absently across the mall."; 3: "^The crested animal chews thoughtfully."; } } ], has static animate supporter enterable hiddengender; Object tether "tether" dasher with name "leather" "strap" "tether" "line", description [; print "It's a long line of tanned black leather, which shows an irregular diamond \ pattern. The tether is tied around the crested creature's neck \ at one end"; if (self hasnt general) ", and knotted around a heavy post at the other."; else "; the other end dangles free."; ], before [; Untie, Take: if (self hasnt general) "The knots are pulled too tight. You can't get anywhere with them."; else "The creature hoots in vague irritation, twitches its head, \ and yanks the tether out of your hands."; Tie: if (self hasnt general) "It's quite tied enough already."; else "There must be more to this animal-training stuff than you thought. \ You can't get a knot to stay firm."; Pull: "The crested animal grunts in protest."; Ignite: "The tanned leather won't burn."; Attack: if (second == knife) { if (self has general) "The tether is already cut."; give self general; "A few moments of determined sawing, and the tether dangles free."; } ! else, including case of second == nothing if (self has general) "The remaining length of leather won't snap."; else "The leather won't snap."; ], has scenery; ! general means broken Object rundasher "crested animal" with name "odd" "crest" "crested" "animal" "creature", description "It's galloping madly from you, head down, crest sticking up.", before [; Examine: rfalse; default: "The crested creature is too far ahead."; ], has scenery; ! general means that it's running in front of you. Object silyardcrowd "crowd" with name "crowd" "audience" "people", description [; "They look about like people. The clothes \ are a little strange, with long archaic-looking folded sleeves. But by far \ the oddest thing is that everyone is quiet. They look at each other, smile, \ move their hands, nod; but nobody speaks. You notice also that most of the \ crowd are wearing rings on both hands. \ Small silver chains wrap loosely around their hands."; ], before [; Follow: if (thecircus.number == 19) { itobj = silmallcrowd; <>; } else { itobj = silplatformcrowd; <>; } Listen: "The crowd is absolutely quiet, except for rustling of clothing and \ movement."; HearSound: "The people around you turn, in utter shock and horror."; ], life [; Answer, Ask, Tell, Order: <>; default: "Nobody pays much attention."; ], react_before [; Listen: if (noun == 0) <>; Applaud, Shout: <>; Sing: if (noun ~= voicebox) <>; VoiceBoxArrest(); rtrue; ], has scenery animate hiddengender transparent; Object yardblueguard "tall man in blue" class blueguard, with name "tall" "thin" "man" "men", describe [; if (parent(yardyellowguard) ~= parent(self)) "Half of a guard-pair is here! [BUG]"; "^Two men flank the open gate. The tall one is wearing blue silk and the fat \ one yellow, in identical styles; but you'd guessed they have some formal function \ just from the way they stand."; ], description [; print "He's very tall, much taller than you, and bonily thin. His hair is \ lank white over a thin, emotionless face. \ He's wearing ", (guardrobe) self, ".^"; rtrue; ], react_before [; Applaud, Shout: <>; Sing: if (noun ~= voicebox) <>; else { give self pissed; if (silyardcrowd notin SilYard) <>; } ]; Object yardyellowguard "fat man in yellow" class yellowguard, with name "fat" "large" "man" "men", describe [; if (parent(yardblueguard) ~= parent(self)) "Half of a guard-pair is here! [BUG]"; rtrue; ], description [; print "He's terribly overweight, and he looks like he was large-boned \ to begin with. Even in this mild air, his face is moist. \ He's wearing baggy ", (guardrobe) self, ".^"; rtrue; ], react_before [; Applaud, Shout: <>; Sing: if (noun ~= voicebox) <>; else { give self pissed; if (silyardcrowd notin SilYard) <>; } ]; Object SilRing "In the Arena" with name "rail" "railing", description [; print "You stand in a long arena of soft, dry earth. The ground is scarred \ with tracks, both of claws and hooves and booted feet; a musty smell rises \ around you, but the arena is quiet and still. A railing surrounds \ you, with a wide gate to the south, which lies "; if (silyardgate has open) print "open"; else print "closed"; "."; ], u_to CantGoThatWay, d_to CantGoThatWay, cant_go "A low railing surrounds the arena, except to the south.", s_to [; if (silyardgate hasnt open) "The gate is closed."; print "You silently slip through the gate.^"; return SilYard; ], has light outdoors; Nearby silyardgateback "southern gate" with name "s" "south" "southern" "wide" "gate", before [; Examine: <>; Climb: <>; Open, Close, Push, Pull: <>; Search: "Beyond the gate is the dusty yard."; Enter: <>; ], has scenery; Nearby silringmess "mess" with name "mess" "trash" "garbage", before [; "Unappetizing and unimportant."; ], has scenery; Nearby saddle "length of orange leather" with name "length" "of" "orange" "leather", ! initial "You notice a length of brighter color, something orange, lying along the \ ! edge of the arena.", describe [; if (self hasnt moved) { "^You notice a length of brighter color, something orange, lying along the \ edge of the arena."; } if (self in lowleaper || self in highleaper || self in dasher) rtrue; rfalse; ], description [; if (self hasnt moved) { give self moved; } "It seems to be a crumpled length of heavy leather, fairly long, six feet or more. \ Its shape is odd, a rough diamond with straps and loops hanging off of it \ here and there. Dust, sun, and rain have faded it terribly; but it must have \ been garish orange, once."; ], before [; Wear: "You try wrapping the leather around yourself, but it doesn't work very \ well. It's much too wide for a sash or belt, at least in the middle. \ You could heave it across your back as a sort of half-cape, but the \ tapering ends don't even slightly work as sleeves. And the whole thing \ is really too stiff to be clothing. You give up."; Rub: "The leather is faded as well as \ dirty. You rub the worst of the dust off, but it doesn't make \ much difference."; Eat: "Heavy leather that's been lying in the dirt for weeks at least?"; Smell: "It smells of warm dirt and dung, with an underlying thread of something \ acridly unfamiliar."; Tie: if (second ~= nothing && second ~= self) { print_ret "You can't find any way to tie the orange leather to ", (the) second, "."; } if (self in dasher) { if (player in dasher) "You can't do that while you're sitting on it."; "The orange leather hangs awkwardly on the crested animal, and you can't \ quite rearrange it so that the ends meet around its belly, \ much less tie them together."; } if (self in highleaper || self in lowleaper) { if (player in parent(self)) "You can't do that while you're sitting on it."; "The tapered ends of the leather do look exactly long enough to meet beneath the \ creature's belly, and there are straps that might fasten together there. Also \ beneath the creature's belly are two powerful legs and many large hindclaws. \ The leather really looks like it's settled \ snugly enough, you decide."; } "You puzzle over the various straps that are attached to the orange leather; \ but there aren't any parts that obviously tie together."; Enter, Climb, GetOff: if (self in dasher || self in lowleaper || self in highleaper) { <<(action) parent(self)>>; } ], after [; Take: if (self hasnt moved) "You pick it up, and try to shake it out. It's a \ crumpled length of heavy leather, at least six feet long, and \ oddly shaped."; ]; Object ringsweeps "three people" with name "three" "person" "people" "dull" "nondescript" "sweepers" "cleaners", describe [; "^Three people are working here, sweeping and cleaning the ground, and \ gathering scraps and trash. They move methodically and don't seem to \ notice you at all."; ], description "The three are wearing dull clothing, just dirty grey wraps and breeches. \ They're carrying brooms, spades, and sacks, and they're carefully tidying the earth \ of... well, the usual mess. They do not speak; in fact, they never even look up \ from their work.", has static animate hiddengender; Object SilSouthStable "Musty Building" with name "low" "partitions", description [; print "The building is dim and slightly damp, lit only by narrow windows"; if (southstable has open) print " and the open door to the north."; else print ". The wide door to the north is closed."; print " Another, smaller door stands"; if (silsouthdoorsouth has open) print " open"; else print " closed"; " in the south wall. This room is divided \ by several low partitions; the sections are open to each other, and floored \ with soft earth."; ], n_to SilYard, s_to silsouthdoorsouth, u_to CantGoThatWay, d_to CantGoThatWay, cant_go "The doors lead north and south.", before [; Go: if (noun == n_obj) { if (southstable hasnt open) "The wide door is closed."; else rfalse; } if (noun == s_obj || noun == silsouthdoorsouth) { if (silsouthdoorsouth has open) "The door is filled with people and big heavy animals. You can't \ get through."; } Smell: if (noun == nothing) "The air here has a musty, acrid smell."; ], has light; Nearby silsouthdoorback "wide door", with name "n" "north" "northern" "wide" "wood" "wooden" "door", description [; if (southstable has open) "The wide door is open."; else "The wide door is closed."; ], before [; Open, Close: <<(action) southstable>>; Enter: <>; KnockOn: if (highleaper in SilSouthStable || lowleaper in SilSouthStable) { if (highleaper notin SilSouthStable) print_ret (The) lowleaper, " shifts restlessly."; if (lowleaper notin SilSouthStable) print_ret (The) highleaper, " shifts restlessly."; "The creatures shift restlessly."; } "There is no response."; ], has scenery; Nearby silsouthdoorsouth "smaller door", with name "s" "south" "southern" "small" "smaller" "narrow" "door", description [; print "It's smaller than the north door, but not by much. The door is"; if (self has open) " open, and a line of animals is streaming through it."; else " closed."; ], door_dir s_to, door_to [; print "The door turns you around. [BUG]^"; return SilYard; ], before [; Open: if (self hasnt open) "It seems to be locked, although you can't see any way to unlock it."; Close: if (self has open) "People and animals are still passing through the door."; Lock, Unlock: "You can't see any way to lock or unlock it."; Search: if (self has open) "The door is filled with people and big heavy animals. You can't \ see anything."; else "The door is closed."; KnockOn: <>; ], has scenery door openable; Nearby silsouthstablewindow "windows" with name "window" "windows", description "You see the yard outside to the north.", before [; Search: <>; Enter: "You can't fit through the windows."; ], has scenery; [ leapercolor obj; if (obj has higher) print "violet"; else print "green"; ]; Class leaperclass with name "clawed" "claw" "animal" "animals" "creature" "creatures", short_name [; print (leapercolor) self; if (statusprinting ~= 0) print " creature"; else print " clawed creature"; rtrue; ], describe [; ! description is only for number==0, since that's the only way you can ! be standing next to it. print "^A large, evil-looking creature is tethered to one side. It sports an \ astonishingly long tail, and an astonishing assortment of claws. The claws \ are stained ", (leapercolor) self, ", matching the dyed leather of its \ harness."; if (saddle in self) { print " The length of orange is rather jarring, though it fits well enough on \ its back."; } new_line; rtrue; ], description [; print "It's a potent thing. The creature is \ higher at the shoulder than the top of your head. \ It stands on two legs, naked and clawed like a giant bird's, but thick \ with scarred muscle. An orange-furred torso cants forward, balanced by \ a stiff tail, which is longer than the rest of the animal together. \ A shaggy black-striped mane runs up the neck and surrounds the head; but \ the face is long, a river-snapper's fanged face, with evil eyes angled \ close together at the top. Hunter eyes, you feel sure. Its arms seem small, \ tucked against its chest, but you wouldn't care to try its reach -- especially \ of the massive, sabre-like claw that is most of its right hand."; print " The creature wears a harness of ", (leapercolor) self, " leather around \ its head and neck; the claws are stained ", (leapercolor) self, " as well."; if (saddle in self) print " A length of orange leather fits neatly across the creature's back."; new_line; rtrue; ], number 0, ! 0: standing in barn; 1: running w/you; 2: standing on shore w/you; 3: gone life [; Answer, Ask, Tell, Order: switch (self.number) { 0: "The creature snaps its gaze to you. \ After a moment of unnerving, unblinking \ regard, it bares its pointed teeth and returns to studying the walls."; 1: "The clawed creature gleefully ignores you."; 2: "The creature snaps its gaze to you. \ After a moment of unnerving, unblinking \ regard, it bares its pointed teeth and returns to studying the trees."; default: "The creature flosses. [BUG]"; } Kiss: "It'll never work. It has many more teeth than you do."; Attack, ThrowAt: "You doubt it would take much provocation to get yourself mauled -- harness \ or no harness."; Give, Show: "The creature snaps interestedly at your hand, or tries to."; ], react_before [; Exit: if (player in self) { if (location == thedark) move player to real_location; else move player to location; switch (self.number) { 1: StopDaemon(self); self.number = 3; remove self; print "You dive from ", (the) self, ", trying to hit the \ ground rolling. You manage the hitting part.^^You stagger \ up"; if (rundasher has general) { give rundasher ~general; remove rundasher; if (location == SilMallSouth) { print ", watching -- the crested creature is in the midst \ of a tremendous leap, right over the river. It sails \ towards the far bank, and ", (the) self, " launches \ itself after it"; if (self hasnt higher) { print "; but your erstwhile mount doesn't quite make \ the distance. It crashes into the water, spluttering \ and thrashing, and is slowly swept away. The crested \ creature has vanished as well.^"; } else { print ". One after another, they tear away on the far \ side.^"; } } else { print ", watching the two creatures vanish to the "; switch (location) { SilYard: print "east"; default: print "south"; } print " amid startled pedestrians.^"; if (location == SilYard || location == SilMallNorth) { ! leaper catches dasher on the plaza move bloodstain to SilMallSouth; StartDaemon(bloodstain); } } } else { print ", watching the creature vanish to the "; switch (location) { SilYard, SilMallSouth: print "east"; default: print "south"; } print " amid startled pedestrians.^"; } rtrue; 2: self.number = 3; remove self; print "You slide off ", (the) self, ". It flicks its tail -- in \ respect, perhaps -- and flashes away to the west.^"; rtrue; default: print "You slide off ", (the) self, ". It stomps a foot, without much \ real threat, you hope.^"; rtrue; } } Drop: if (player in self) { if (noun == saddle) "You can't drape the leather on the animal's back when you're \ sitting there."; "It would just fall off onto the ground."; } Jump: if (player in self) { "It's hard enough staying on."; } ], before [; Climb: <>; Touch, Rub: if (player in self) "The creature ducks its head."; else "The creature turns away, nearly knocking you down with its heavy tail."; Smell: "The fur is sharply acrid."; LookUnder: print "You sneak a very cautious peek. "; if (self has female) print "Female"; else print "Male"; ", you guess."; Push, Pull, PushDir: "The creature pushes back."; Ignite: <>; Go: if (second ~= 0) { if (second ~= 2) { print "The creature asks, ~What's motion reason ", second, "?~ [BUG]^"; return 2; } ! daemon-ordered movement print "You cling to straps as the ground blurs."; if (self in SilMallNorth) print " A couple walking hand-in-hand are knocked aside \ as your mount darts between them."; new_line; return 1; } print "The clawed creature gleefully ignores you.^"; return 2; Untie: if (self.number ~= 0) { print (The) self, " is quite thoroughly out of control already.^"; rtrue; } print "The moment the harness is unhooked, ", (the) self, " emits a piercing \ shriek. There is a white glint in its eye which must have been there all \ along... and then the long legs bunch.^^"; if (player in self && saddle in self) { print "There is a tremendous ", (emphstring) "surge.", " You find yourself \ lying flat on the creature's neck, your feet caught in some orange \ straps -- no, maybe they're supposed to be there, at least you're \ not falling off -- and the creature is into another tremendous flat \ leap"; if (southstable hasnt open) { give southstable open; print ", crashing the door open with a single clawed kick"; } print ", the door lintel nearly shears your head off, and ", (emphstring) "sunlight....", "^"; self.number = 1; StartDaemon(self); rtrue; } if (player in self) { move player to SilSouthStable; print "There is a tremendous ", (emphstring) "surge,", " and you discover \ the absurdity of trying to ride something that you could barely cling \ to when it was standing still. The creature's spine flattens underneath \ you, the neck jerks down and forward, the tail is up and back... and \ whipping away to nothing below you. You crash nearly straight down \ into dirt. The creature"; } else { print "The creature is across the building in a single flat leap, its \ neck lowered, the tail up and straight back. You spin; it"; } if (southstable hasnt open) { give southstable open; print " crashes the northern door open with a single clawed kick, and \ is away.^"; } else { print " is already away through the northern door.^"; } remove self; self.number = 3; if (dasher in SilYard) { if (tether has general) { print "^You hear a piercing wail from outside; then a shriek \ fades to distance, followed by clattering claws.^"; KillDasher(SilMallMiddle); } else { KillDasher(SilYard); } } if (dasher in SilMallSouth) { KillDasher(SilMallSouth); } rtrue; Search: if (saddle in self) "It's wearing the orange leather, but that's all."; "You find nothing unusual."; Receive: if (player in self) { <>; } if (noun == saddle) { move saddle to self; "You fit the leather over the animal's back. The ends hang neatly in \ front of its legs."; } print (The) noun, " slides off the creature's back.^"; keep_silent = 1; ; keep_silent = 0; rtrue; LetGo: if (noun == saddle && player in self) { "You can't take the leather; you're sitting on it."; } ], after [; Enter: print "You clamber up ", (the) self, "'s back. It hisses and rears -- not \ angrily, just stretching --"; if (saddle notin self) " and you bury your hands in the black mane, trying not to slide down \ the nearly vertical spine. The creature hisses again."; " and you grab for support, trying not to slide down \ the nearly vertical spine. The orange leather gives your legs purchase, \ though, and you steady yourself with some convenient straps."; ], daemon [ dir; ! runs iff self.number == 1, meaning that the creature is running and you're ! on board. if (player notin self) { "^The creature runs away without you, humming ~Umbabara'uma.~ [BUG]"; } if (self.number ~= 1) { print "^The clawed creature runs without moving. [BUG]^"; } switch (parent(self)) { SilMallSouth: if (rundasher has general) { ! jump time! give rundasher ~general; remove rundasher; StopDaemon(self); self.number = 3; print "^With the power of desperation, the crested creature launches \ itself over the water. It hangs for a moment in the light -- and \ then your own mount gathers itself, and the world is momentarily \ as distant as the sky --^^"; if (self hasnt higher) { deadflag = 1; print (emphstring) "Splash.", " Cool silence surrounds you. \ The clawed creature, clearly not used to water, begins to \ thrash around. Unfortunately, you are tangled in straps; \ you don't quite manage to get clear, and your mount doesn't \ quite learn to swim.^"; } else { print "Clawed feet ", (emphstring) "thud", " into dry earth, and your abused fingers \ finally slip. The ground smacks you hard. By the time you pull \ yourself to your feet, both animals are gone.^"; remove self; PlayerTo(SilPark); } rtrue; } else { if (dasher in SilMallSouth) { print "^Your mount dumps you and takes the crested creature out \ to a movie. [BUG]^"; self.number = 3; StopDaemon(self); move player to SilMallSouth; remove self; dasher.number = 3; remove dasher; } else { print "^The creature digs in its claws, scoring the cobblestones, \ and comes to a halt at the edge of the river. \ It glances back at you, not even breathing hard, \ and with an astonishing glint -- who envies who now?^"; self.number = 2; StopDaemon(self); } rtrue; } SilSouthStable: dir = n_obj; SilYard: dir = e_obj; SilMallNorth: dir = s_obj; SilMallMiddle: dir = s_obj; default: "What's the clawed creature doing here? [BUG]"; } new_line; ; if (rundasher has general) { move rundasher to parent(self); switch (parent(self)) { SilMallNorth: print "^The crested creature swerves south, dashing down the mall.^"; SilMallMiddle: print "^The crested creature is just a few yards ahead of you.^"; SilMallSouth: print "^The crested creature is heading straight at the river!^"; default: print "^The crested creature is sprinting ahead of you, \ sides heaving.^"; } } if (dasher in parent(self)) { if (self in SilYard) { remove dasher; dasher.number = 3; if (tether hasnt general) { print "^The crested creature shrieks as you come into view; it \ leaps, is jerked short by its tether, yanks, and yanks again. \ And again, as your mount twists in midair, hissing in triumph. \ You lose your grip and the ground strikes you violently in the side; \ and perhaps that's best, for by the time you pull yourself up, \ the clawed creature is gone. There is only the scent of blood \ and the icy raw memory of the death-cry.^"; move bloodstain to SilYard; StartDaemon(bloodstain); self.number = 3; StopDaemon(self); move player to SilYard; remove self; } else { print "^The crested creature shrieks as you come into view. It leaps \ for the arch, eyes darting back at your mount.^"; give rundasher general; move rundasher to SilYard; } rtrue; } if (self in SilMallSouth) { print "^The crested creature freezes as you come into view, then shrieks. \ Then it takes off in a flail of claws -- but too late. \ Your mount twists in midair, hissing in triumph. \ You lose your grip and the ground strikes you violently in the side; \ and perhaps that's best, for by the time you pull yourself up, \ the clawed creature is gone. There is only the scent of blood \ and the icy raw memory of the death-cry.^"; remove dasher; dasher.number = 3; move bloodstain to SilMallSouth; StartDaemon(bloodstain); self.number = 3; StopDaemon(self); move player to SilMallSouth; remove self; rtrue; } print "^The crested critter is doing its nails here. [BUG]^"; } rtrue; ], each_turn [; if (self.number == 0) { switch (random(13)) { 1: print "^", (The) self, " hisses.^"; 2: print "^", (The) self, " arches its back"; if (player in self) print " under you"; print ".^"; 3: print "^", (The) self, " digs idly at a post with one claw, raising \ splinters.^"; } } ], has static animate supporter enterable hiddengender; Nearby lowleaper "bigclaw" class leaperclass, with name "green", describe [; if (parent(highleaper) == parent(lowleaper)) { print "^A pair of large, evil-looking creatures are tethered to one side. \ They sport \ astonishingly long tails, and an astonishing assortment of claws. The claws \ of one are stained green, matching the dyed leather of its \ harness; the other's claws and tack are violet."; if (saddle in highleaper || saddle in lowleaper) { print " The length of orange is rather jarring, though it fits well enough on \ the ", (leapercolor) parent(saddle), " one's back."; } new_line; rtrue; } ], has ~higher; Nearby highleaper "bigclaw" class leaperclass, with name "violet", describe [; if (parent(highleaper) == parent(lowleaper)) { rtrue; } ], has higher female; Class harnessclass with name "tack" "harness" "strap" "straps" "tether", description [; print "The tack is made from heavy leather straps, neatly knotted into a \ harness and dyed a slightly worn ", (leapercolor) self; if (parent(self).number == 0) ". A side strap loops around a hook on the wall."; ". A side strap hangs loose."; ], before [; Untie, Take: <>; Attack: if (second == knife) { if (parent(self).number ~= 0) { print (The) self, " is already free.^"; rtrue; } print "Several moments of determined sawing, and the strap parts. "; <>; } ! else, including case of second == nothing "The leather won't snap."; Ignite: "The leather won't burn."; Pull: if (parent(self).number == 1) print (The) parent(self), " does not slow.^"; else print (The) parent(self), " jerks its head in annoyance.^"; rtrue; ], has scenery; Object lowharness "green harness" lowleaper class harnessclass, with name "green", has ~higher; Object highharness "violet harness" highleaper class harnessclass, with name "violet", has higher; Object bloodstain "bloodstain" with name "patch" "blood" "stain" "bloodstain", describe [; if (dashercorpse in self) { print "^A torn, shredded carcass lies here, leaking blood and entrails. Flaps \ of plush tan hide lie across the ground, and black mane, and the bony crest \ still juts from the skull, half-severed as it is -- entirely horrible."; if (self notin SilYard) print " People step around it, looking everywhere but down."; new_line; rtrue; } print "^A wide patch of blood stains the"; if (self notin SilYard) print " cobblestones"; else print " earth"; print " here."; if (self.number <= 15) print " The blood is slowly drying in the sun."; else print " It's dried to a crusty black."; new_line; rtrue; ], description [; if (self.number <= 5) print "It's dark red, still fluid, mostly."; else { if (self.number <= 10) print "It's dark red, crusted black at the edges."; else { if (self.number <= 15) print "It's mostly a dark brown crust, fluid red here and there."; else print "It's a blackened, dried crust."; } } " Do you really want more detail?"; ], react_before [; Smell: if (noun == nothing) { if (dashercorpse in self) <>; else <>; } rfalse; ], before [; Receive: "No need to make things any messier."; Enter: "Everyone knows it's bad luck to stand where someone -- or even something -- \ has been murdered."; Smell: "Rusty, rank... a hint of... never mind."; Take, Taste, Touch: "No."; ], number 0, daemon [; self.number = self.number+1; if (self.number > 16) { if (self in location) { print "^A team of men and women, wearing silvery-grey silk, surround \ the corpse. They slide it carefully onto a sheet and carry it away. \ Little is left but the drying blood.^"; } remove dashercorpse; StopDaemon(self); } ], has static supporter; Object dashercorpse "torn carcass" bloodstain with name "torn" "dead" "carcass" "crest" "crested" "creature" "animal" "corpse", description "You force an objective stance upon your stomach, and examine the \ dead animal. The wounds are claw marks. Undoubtedly the clawed creature you... \ unhh... you turn away.", before [; Take, Taste, Touch: "No."; Smell: print_ret "I am ", (emphstring) "not", " going to describe what the shredded, \ disembowelled corpse smells like."; ], has scenery; [ KillDasher loc dir; dir = 0; switch (loc) { SilYard: switch (location) { SilSouthStable: dir = "outside"; SilMallNorth: dir = "beyond the arch"; } SilMallNorth: switch (location) { SilYard: dir = "beyond the arch"; SilMallMiddle: dir = "north"; } SilMallMiddle: switch (location) { SilMallNorth: dir = "south"; SilMallSouth: dir = "north"; } SilMallSouth: switch (location) { SilMallMiddle: dir = "south"; } } if (dir ~= 0) { print "^You hear a piercing wail from ", (string) dir, ". Then a single heavy thud; \ and ", (emphstring) "crack.", "^"; } remove dasher; if (saddle in dasher) move saddle to loc; dasher.number = 3; move bloodstain to loc; StartDaemon(bloodstain); ]; Object SilMallNorth "North End of Mall" with name "cobble" "cobbles" "cobblestone" "stone" "stones" "grass" "mall" "plaza", description "A busy crowd surrounds you, here in the sun. Spacious brick \ buildings line the square; a road runs east, a path leads west under a \ wide arch; and to the south the plaza continues, a stream of cobblestone, \ trees, grass-cuts, and lively people. Lively, but... quiet. Feet moving, \ smiles, waving hands, but not one voice. It feels too normal to feel odd. \ In the center of the cobble circle that forms this end of the mall, a statue \ rises from sprawled shrubbery.", w_to silmallarch, cant_go "There is no entrance to the buildings in that direction.", e_to [; return TryLeaveMall("road to the east", SilTmpRoad); ], n_to [; return TryLeaveMall("building to the north", SilTmpBuildingN); ], sw_to [; return TryLeaveMall("building to the southwest", SilTmpBuildingN); ], s_to SilMallMiddle, u_to CantGoThatWay, d_to CantGoThatWay, has light outdoors; Nearby silmallarch "brick arch" with name "slender" "golden" "brick" "arch", door_dir w_to, door_to SilYard, before [; Climb, Examine: <<(action) silringarch>>; ], has door open scenery; Nearby silmallbushes "shrubbery" with name "bush" "bushes" "shrub" "shrubs" "shrubbery", description [; print "The bushes are pretty, but not very well-trimmed, and they're heavier \ and thornier than they look.^"; if (glittering in self) { if (glittering hasnt moved) print "^A glint under one bush looks more metallic than floral.^"; else print "^A bright silver ring lies under one bush.^"; } rtrue; ], before [; LookUnder, Search: if (glittering in self) { give glittering moved; "Bending, you see a silver ring with a bit of chain attached."; } "Good black soil, but nothing else."; LookBehind: "The marble statue stands in the center of the bushes."; Enter: "The branches are thorny and tangled. It's not worth the blood."; Receive: "There's no point in losing things in the bushes."; ], after [; LetGo: if (noun == glittering) { if (glittering hasnt moved) print "What, that glint under the bush? "; "You slide a hand carefully under thorns, and -- ouch -- manage \ to snag the ring."; } "You get it, even though it wasn't there. [BUG]"; ], has scenery container open; Nearby silmallstatue "statue" with name "marble" "statue", description "The statue is of some black marble, veined in red and gold. A tall man, \ larger than life, faces south down the plaza; but he is not looking to the \ horizon. His eyes are lowered; his expression pensive, turned inward. A hint \ of bitterness quirks his lips.", before [; Examine: rfalse; default: "The bushes surround the statue; you cannot approach closely."; ], has scenery; Nearby silbuildingdoornorth "buildings" with name "door" "doors" "doorway" "doorways" "building" "buildings", description "Spacious brick buildings line the square; there are entrances \ north and southwest.", before [; Enter: <>; Search: "You can't see from the sunlight into the dim interior."; ], has scenery; Object glittering "silver ring" silmallbushes with name "silver" "ring" "chain", description [; if (self hasnt moved) { print "What, that glint under the bush? "; give self moved; } "It's a plain ring, of silver, or at least something as brightly \ polished. A fine glittering chain is attached to the edge. And \ the last link of the chain looks broken, as if it had once been longer."; ], before [; Wave: if (self in player && self has worn) { if (location == thedark) "The chain spins on your finger, invisible in the darkness."; else "The chain spins and sparkles from your finger."; } else { if (location == thedark) "The chain spins, invisible in the darkness."; else "The chain spins and sparkles."; } ], after [; Wear: "You slip on the ring. Its chain hangs loose across your hand."; ], has clothing; ! moved means you've seen it Object SilTmpRoad "Busy Road" with initial [; give self ~visited; ], description "A busy road runs west, towards the plaza, and east, towards a tall \ tower that gleams whitely in the distance.", cant_go "No exit. [BUG]", guard_by SilMallNorth, has light; Object SilTmpBuildingN "Crowded Building" with initial [; give self ~visited; ], description "The light is dim after the bright plaza.", cant_go "No exit. [BUG]", guard_by SilMallNorth, has light; Object SilMallMiddle "Center of Mall" with name "grass" "mall" "plaza", description "The crowded mall stretches north and south, a cheerful bustle of \ people, trees, benches, and grass. The hush of the crowd \ is merely restful. Ornamental building facades stand along \ the sides of the plaza, although a dark and narrow alley slips between brick \ walls to the east.", n_to SilMallNorth, s_to SilMallSouth, e_to [; give SilAlley ~general; ! guards see you return TryLeaveMall("alley", SilAlley); ], w_to westmalldoor, u_to CantGoThatWay, d_to CantGoThatWay, cant_go "There is no entrance to the buildings in that direction.", has light outdoors; Nearby silalleyfar "alley" with name "dark" "narrow" "alley", description "The alley is narrow and deep, but the late sun falls square along it. \ Something stands motionless in the light at the far end.", before [; Examine: rfalse; Search: <>; Enter: <>; default: "The alley is off to the east."; ], has scenery; Nearby silmallmiddlecobbles "cobblestones" with name "cobble" "cobbles" "cobblestone", before [; Examine, Search: if (match in SilMallMiddle && match hasnt moved) { "There is a small ceramic square lying on the ground here."; } else { ParserError(SCENERY_PE); rtrue; } default: ParserError(SCENERY_PE); rtrue; ], has scenery; Nearby westmalldoor "west building" with name "w" "west" "brick" "door" "building", description [; print "The building to the west is particularly pleasant; brick scrollwork \ surrounds the door and runs up the facade. The door is "; if (self has open) "open."; else "closed."; ], door_dir w_to, door_to SilMallMiddle, before [; Open: "The door to the west building seems to be locked from the inside."; Lock, Unlock: "You can't figure out how."; Search: "There are no windows."; ], has door openable locked scenery; Nearby silmallbench "bench" with name "bench" "benches", description "Benches stand here and there on the edges of the mall. They're simple slabs \ of rough sandstone, and people are smoking, gesturing in groups, dozing, \ and simply sitting on one and many of them.", react_before [; Exit: if (player in self) { if (location == thedark) move player to real_location; else move player to location; "You stand."; } ], before [; LookUnder: "You find nothing but feet. People look curiously at you."; ], after [; Enter: "You sit, finding a moment of stillness."; ], has scenery supporter enterable; Object SilMallSouth "South End of Mall" with name "cobble" "cobbles" "cobblestone" "stone" "stones" "grass" "square" "mall" "plaza", description "The cobble way from the north ends here, at a broad tree-lined square \ which runs down to a gentle river. Smaller roads runs east and west, along \ the water's edge. In the center of the square is a marble pedestal. Silent \ people stand and flow around the mall, animated or relaxed.", n_to SilMallMiddle, e_to [; return TryLeaveMall("road to the east", SilTmpRoadSE); ], w_to [; return TryLeaveMall("road to the west", SilTmpRoadSW); ], ne_to [; return TryLeaveMall("building to the northeast", SilTmpBuildingS); ], s_to "The river runs along the south edge of the square.", se_to [; <>; ], sw_to [; <>; ], u_to CantGoThatWay, d_to CantGoThatWay, cant_go "There is no entrance to the buildings in that direction.", has light outdoors; Nearby silbuildingdoorsouth "buildings" with name "door" "doors" "doorway" "doorways" "building" "buildings", description "Buildings line the square. There is an entrance to the northeast.", before [; Enter: <>; Search: "You can't see from the sunlight into the dim interior."; ], has scenery; Nearby silmallpedestal "marble pedestal" with name "marble" "pedestal" "foot" "footprint" "print" "prints", description [; print "The pedestal is empty"; if (children(self) ~= 0) { print ", aside from "; WriteListFrom(child(self), TERSE_BIT | ENGLISH_BIT | RECURSE_BIT); } ". In its center is a pair of bare footprints, slight depressions \ in the veined black marble. Another is visible near the pedestal's \ edge, as if a statue had just stepped down \ for a moment-- And you smile."; ], react_before [; Exit: if (player in self) { if (location == thedark) move player to real_location; else move player to location; "You leave the platform."; } ], before [; Touch: "The marble is polished and cool. The footprints are the only flaw, and they \ are carved delicately enough that you can almost feel the whorls of the \ skin that left them."; ], after [; Enter: if (verb_word == 'stand') "You step up onto the platform. You try to match your feet to the footprints, \ but they are noticably smaller than your own."; "You sit, finding a moment of stillness."; ], has scenery supporter enterable; Nearby silparkfar "grassy park" with name "grassy" "park" "flag" "flagpole" "pole", description "You can't make out much in the park besides the flagpole; even that \ is partially hidden, and you can't see the top or its flag, if indeed there \ is one. But you do recognize the inky shadow that streaks the grass at the \ pole's foot. Stranger than that are the people moving through the park: \ though sound doesn't carry beyond the hedges, they seem to be laughing and talking.", before [; Examine: rfalse; Listen: "You can't hear anything from this side of the river."; default: "The park is across the river."; ], has scenery; Object silriver "river" with name "gentle" "murky" "river" "water", found_in SilMallSouth SilPark, description [; print "The river isn't large, no more than five or six yards wide. You can't see \ the bottom; perhaps that's just the murky water, but then again you sense \ quiet depths."; if (self in SilMallSouth) { " The far side of the river is closely lined with rough-cut \ hedges. Through a gap you can see people strolling, a grassy park, a flagpole."; } else { " The far side of the river is the broad square you remember. It's still full \ of people, still silent."; } ], react_before [; Swim: if (noun == nothing) <>; ], before [; Take: if (jar in player) { <>; } "You have nothing in which to carry water."; Drink, Taste: "You kneel and scoop some water to your lips. It's... well, it's a bit murky \ and stagnant."; Touch: "Wet, and a bit slimy."; Search: "You can't see far into the water."; Empty, EmptyT: "You're not likely to empty the river."; Listen: "The river makes no sound."; JumpOver: "Five or six yards isn't wide for a river, but it's farther than you can jump."; Enter, Swim: if (self hasnt general) { give self general; "You hesitate. The surface is a bit ruffled farther out, as though by \ a gentle current. And nobody else is swimming."; } deadflag = 4; "You gather yourself, and dive in. The murky silence surrounds you, and then \ rushes away as you break the surface again. But you're farther downstream \ than you thought; the current isn't so gentle, after all. And the river \ is narrowing. And the banks are steep walls here...^^You pull yourself \ ashore, beyond a long struggle of exhaustion, and far from where you were."; Insert: <>; Receive: if (IsOilPod(noun) ~= 0) { remove noun; "You crush the pod. Oil splashes into the water, and spreads into bright \ queasy rainbows. It's rather more disturbing than pretty, but \ the swirling film of color is slowly carried away."; } switch (noun) { jar: <>; jarwater: remove noun; "You empty the jar into the river."; jaroil: remove noun; "You empty the jar. Oil splashes into the water, and spreads into bright \ queasy rainbows. It's rather more disturbing than pretty, but \ the swirling film of color is slowly carried away."; default: print "Water eddies around ", (the) noun, ", but nothing else \ happens, so you retrieve it.^"; rtrue; } ], has scenery container open absent; ! absent switched. general means you can try swimming. Object SilTmpBuildingS "Empty Building" with initial [; give self ~visited; ], description "The light is dim after the bright plaza.", cant_go "No exit. [BUG]", guard_by SilMallSouth, has light; Object SilTmpRoadSE "Busy Road" with initial [; give self ~visited; ], description "A busy road runs west, towards the plaza, and east, along the river.", cant_go "No exit. [BUG]", guard_by SilMallSouth, has light; Object SilTmpRoadSW "Busy Road" with initial [; give self ~visited; ], description "A busy road runs east, towards the plaza, and west, along the river.", cant_go "No exit. [BUG]", guard_by SilMallSouth, has light; Object SilAlley "Narrow Alley" with name "brick" "bricks" "blank", description "Blank walls stand close, all ways but west. The sun, hovering \ low over the west horizon, shines almost directly into this alley; the brick \ walls are streaked with the vivid scratchy shadows of their own roughness.", w_to SilMallMiddle, u_to CantGoThatWay, d_to CantGoThatWay, cant_go "This is a blind alley.", guard_by SilMallMiddle, has light outdoors; ! general means the guards don't see you. Nearby silplazafar "plaza" with name "mall" "plaza", description "Crowds teem silently to the west.", before [; Examine: rfalse; Search: <>; Enter: <>; default: "The plaza is off to the west."; ], has scenery; Nearby silalleystatue "granite statue" with name "granite" "statue" "lumpy" "chunk" "woman" "figure", describe [; "^A lumpy chunk of granite stands here, embedded end-on in the cobblestones. \ It's taller than you... and then the curves click, and you are looking \ at an abstracted human figure. A woman, you think. Its shadow is black \ syrup poured down the alley and up the east wall."; ], description [; print "There is artistry here, the skill to bring a human form out of such \ rough, irregular carving. The figure is facing west, towards the plaza, and \ the aura of its posture is... you are not sure. A familiar black shadow \ stretches behind it.^"; if (oldcorner hasnt moved) { print "^You notice a small chip of clay lying by the statue's base.^"; give oldcorner moved; } rtrue; ], before [; Push, Pull, Turn, Take: "The statue is much too heavy to move."; Touch: "The granite is rough, with chisel marks clear on it."; LookUnder: print "There's no way to tell; the statue is much too heavy to move.^"; if (oldcorner hasnt moved) { print "^However, you notice a small chip of clay lying by the statue's base.^"; give oldcorner moved; } rtrue; LookBehind: <>; ReceiveBehind: <>; ], has static; Nearby statueshadow "shadow behind the statue" class shadowclass, with description [; "The shadow is opaque, and pulsates violently as you move."; ], door_to DryEntry, door_world world_Dry, before [; Smell: "You smell nothing."; Receive: print (The) noun, " slides into blackness and is gone.^"; move noun to self.door_to; rfalse; Enter: give SilAlley general; ! since when you come back, the guards won't see you. give self general; print "The shadow ", (emphstring) "leaps", " in every direction as you \ dash into it. Sudden hurried footsteps behind you become muffled, \ then merge into the faint rustle of a thousand silent people in \ a crowd that stares at you, invisible, inaudible, not there at all --^^"; PauseClear(); print "-- And the wind ruffles you, and you are merely alone, beneath \ vast sky.^^"; rfalse; ]; [ TryLeaveMall destname destnum ix jx kx; ix = findguard(location); if (ix == nothing) { if (destnum ~= nothing) return destnum; print "You bounce off a wall of pixels. [BUG]^"; rtrue; } jx = findpartner(ix); if (jx == nothing) { print "As you approach the ", (string) destname, ", ", (the) ix, " frowns. ", (cheshe) ix, " glances around, tense. But ", (hisher) ix, " search seems to be in vain, and ", (heshe) ix, " makes no move towards you.^"; if (destnum ~= nothing) return destnum; print "You bounce off a wall of pixels. [BUG]^"; rtrue; } if (random(41) <= 20) { kx = ix; ix = jx; jx = kx; } print "As you approach the ", (string) destname, ", ", (the) ix, " and ", (the) jx, " step together before you. ", (The) ix, " holds a small \ metal sphere toward your face; then ", (heshe) ix, " shakes ", (hisher) ix, " head, and hides the sphere again in ", (hisher) ix, " ", (guardcolor) ix, " silks. The two, in unison, gesture you away.^"; rtrue; ]; Object silmalltrees "trees" with name "tree" "trees" "flower" "flowers" "garden" "plot" "plots", found_in SilMallNorth SilMallMiddle SilMallSouth, description "The mall is dusted with small trees, each rising from a small plot \ of gardened earth. The trees are spread wide enough to keep the mall whole and \ clear, but close enough that one or two are always nearby. They are of \ several kinds; many show spring flowers.", before [; Climb: "The trees are too small to support your weight."; LookUnder: if (location == SilMallMiddle) "Some of the trees have benches resting under them."; else "Nothing lies under the trees but shade. (Normal springtime shade, \ not the world-edge black that brought you here.)"; ], has scenery absent; ! absent switched by MoveToWorld. [ PrintRandomPerson ix sex; ix = random(11); if (ix <= 5) { switch (random(7)) { 1: print "tall "; 2: print "short "; 3: print "rather attractive "; 4: print "thick-set "; 5: print "young "; 6: print "slender "; 7: print "pale "; } } sex = random(41); if (sex <= 20) { if (sex <= 10) print "girl"; else print "woman"; sex = 0; } else { if (sex <= 30) print "boy"; else print "man"; sex = 1; } if (ix >= 5) { switch (random(13)) { 1: print " in red"; 2: print " in orange"; 3: print " in brown"; 4: print " in black"; 5: print " in white"; 6: print " in silks"; 7: print " with dark hair"; 8: print " with fair hair"; 9: print " with long hair"; 10: print " with hair-loops"; 11: print " with finger-bars"; 12: print " with thumb-bars"; 13: print " in a collar"; } } return sex; ]; Object silmallcrowd "crowd" with name "crowd" "people", found_in SilMallNorth SilMallMiddle SilMallSouth, description [; print "The crowd surges up and down the mall. "; "They look about like people. The clothes \ are a little strange, with long archaic-looking folded sleeves. But by far \ the oddest thing is that everyone is quiet. They look at each other, smile, \ move their hands, nod; but nobody speaks."; ], before [; Listen: "The crowd is absolutely quiet, except for rustling of clothing and \ movement."; Search: if (self has general) "You see no one who looks like Aessa."; HearSound: "The people around you turn, in utter shock and horror."; ], life [; Answer, Ask, Tell, Order: <>; default: "Nobody pays much attention."; ], react_before [; Listen: if (noun == 0) <>; ! ! the following are unnecessary, since there are always guards around. ! Applaud, Shout: ! <>; ! Sing: ! if (noun ~= voicebox) ! <>; ! VoiceBoxArrest(); ! rtrue; Sing: if (noun == voicebox) { VoiceBoxArrest(); rtrue; } ], number 3, ! when 0, the match has been dropped each_turn [ sex; if (player in lowleaper || player in highleaper || player in silmallpedestal || player in dasher) rtrue; if (player in SilMallMiddle && self.number > 0) { ! note that the condition precludes the player riding anything self.number = self.number - 1; if (self.number == 0) { move match to parent(player); print "^A "; sex = PrintRandomPerson(); print " lifts a smoking tube to ", (hisher) sex, " lips. As ", (heshe) sex, " vanishes into the crowd, something tiny drops \ from ", (hisher) sex, " sleeve to the cobblestones.^"; rtrue; } } if (player in SilMallNorth && self.number ~= 3 && self hasnt general) { give self general; print "^Copper hair swings through the crowd, familiar for an instant, then gone. \ You search the many faces around you -- Aessa couldn't be in this \ strange place, could she? You do not see her now. If ever.^"; rtrue; } switch (random(13)) { 1: print "^A "; sex = PrintRandomPerson(); print " lifts a smoking tube to ", (hisher) sex, " lips.^"; rtrue; 2: print "^A "; PrintRandomPerson(); " dodges around you."; 3: print "^A ", (PrintRandomPerson) 0, " and a ", (PrintRandomPerson) 0, " pass by, "; switch (random(7)) { 1: "grinning."; 2: "staring discreetly at you."; 3: "absorbed."; 4: "hurriedly."; 5: "briskly."; 6: "idly strolling."; default: "huddled together."; } 4: print "^Someone stumbles into you. You glance back, and a ", (PrintRandomPerson) 0, " waves apologetically before vanishing.^"; rtrue; } ], has scenery animate hiddengender absent; ! absent switched by MoveToWorld. general means you've seen Aessa. Constant NumMallSpots 4; Object silmallboss "guard-changer" with n_to bluemallguard1 0 bluemallguard2 bluemallguard3, s_to 0 yellowmallguard1 yellowmallguard2 yellowmallguard3, e_to silmallboss SilMallNorth SilMallMiddle SilMallSouth, number 0, ! swap spot daemon [ ix jx obj ptr spots ploc; spots = self.&e_to; if (player in location) ploc = location; else ploc = 0; ! set ploc to zero to suppress display. latch(" ", 1); ! do blue movement ptr = self.&n_to; for (ix=0 : ix < NumMallSpots : ix++) { obj = ptr-->ix; if (obj ~= 0) { if (ix ~= 0) { jx = ix-1; if (ix == 1) { if (ptr-->(ix+1) ~= 0) { ! Guard will be bumped move obj to spots-->jx; ptr-->ix = 0; if (ploc == spots-->ix) { print (latch) "^", "A ", (name) ptr-->(ix+1), " walks up \ from the south. ", (cheshe) ptr-->(ix+1), " paces formally \ up to ", (the) obj, "; they bow slightly, and ", (the) obj, " vanishes into a building."; } ptr-->jx = obj; if (ploc == spots-->jx) { print (latch) "^", "A", (name) obj, " paces toward you \ from the south."; } } } else { move obj to spots-->jx; ptr-->ix = 0; if (ploc == spots-->ix) { print (latch) "^", (The) obj, " walks away north."; } ptr-->jx = obj; if (jx ~= 1 && ploc == spots-->jx) { print (latch) "^", "A ", (name) obj, " paces toward you \ from the south."; } } } else { remove obj; ! move it to swap spot, effectively ! no need to print ptr-->ix = 0; self.number = obj; } } } obj = self.number; if (obj ~= 0) { jx = NumMallSpots-1; move obj to spots-->jx; self.number = 0; ptr-->jx = obj; if (ploc == spots-->jx) { print (latch) "^", "A ", (name) obj, " appears from a doorway."; } } ! do yellow movement ptr = self.&s_to; for (ix=NumMallSpots-1 : ix >= 0 : ix--) { obj = ptr-->ix; if (obj ~= 0) { if (ix ~= NumMallSpots-1) { jx = ix+1; move obj to spots-->jx; ptr-->ix = 0; if (ploc == spots-->ix) { print (latch) "^", (The) obj, " walks away south."; } ptr-->jx = obj; if (jx ~= NumMallSpots-1 && ploc == spots-->jx) { if (ploc == spots-->1) print (latch) "^", "A ", (name) obj, " appears from a \ building's doorway."; else print (latch) "^", "A ", (name) obj, " walks toward you \ from the north."; } } else { if (ptr-->(NumMallSpots-2) ~= 0) { ! guard will be bumped if (ploc == spots-->(NumMallSpots-1)) { print (latch) "^", "A ", (name) ptr-->(NumMallSpots-2), " walks up \ from the north. ", (cheshe) ptr-->(NumMallSpots-2), " paces formally up to ", (the) obj, "; they bow slightly, and ", (the) obj, " vanishes into a small doorway."; } remove obj; ! move it to swap spot, effectively ptr-->ix = 0; self.number = obj; } } } } obj = self.number; if (obj ~= 0) { jx = 0; move obj to spots-->jx; self.number = 0; ptr-->jx = obj; if (ploc == spots-->jx) { print (latch) "^", "A ", (name) obj, " appears from a building's doorway."; } } unlatch(0, "^"); ! That's it for the guards. if (location.&guard_by ~= 0) { if (location == SilAlley && SilAlley has general) { ! guards don't see you. ix = findguard(location.guard_by); jx = findpartner(ix); if (jx == nothing) { print "^You see ", (a) ix, " in the plaza to the west; ", (heshe) ix, " passes by the alley without a glance.^"; } else { print "^You see ", (a) ix, " and ", (a) jx, " in the plaza to the west; \ they pass by the alley without a glance.^"; } rtrue; } ix = findguard(location.guard_by); if (ix ~= nothing) { jx = findpartner(ix); if (jx == nothing) { print "^The back of your neck itches. You glance and see ", (a) ix, " in the plaza behind you. ", (cheshe) ix, " is angrily \ tight-lipped, but after a moment, ", (heshe) ix, " shakes ", (hisher) ix, " head and passes beyond your view.^"; } else { if (location == SilAlley) print "^The back of your neck itches. Before you can react, "; else print "^Before you can see any more, "; print (a) ix, " and ", (a) jx, " seize your arms from behind. \ You are marched back to the plaza and deposited definitively \ on the cobblestones.^"; PlayerTo(location.guard_by, 2); ! standard look } } } ]; Object bluemallguard1 "stumpy woman in blue" class blueguard, with name "stumpy" "short" "old" "barrel" "woman", describe [; "^A stumpy old woman wearing blue silk stands here."; ], description [; print "She's built like a short barrel, with grey hair. Some amusement glitters \ in her eyes. She's wearing ", (guardrobe) self, ".^"; rtrue; ], has female; Object yellowmallguard1 "wiry woman in yellow" class yellowguard, with name "snow" "whippet" "frost" "snow-frost" "hair" "wiry" "fair" "woman", describe [; "^There is a wiry woman here, in yellow silk."; ], description [; print "She has a wiry figure, with snow-frost hair, but the poise of a \ whippet. She's wearing ", (guardrobe) self, ".^"; rtrue; ], has female; Object bluemallguard2 "muscular man in blue" class blueguard, with name "muscular" "tall" "man", describe [; "^A tall, muscular man in blue silk stands here."; ], description [; print "He looks like he tosses cows in his spare time -- possibly over buildings. \ His arms, legs, and chest are slabs of muscle. So is his face. \ The man is wearing ", (guardrobe) self, ".^"; rtrue; ]; Object yellowmallguard2 "stout woman in yellow" class yellowguard, with name "dark" "dark-haired" "hair" "haired" "stout" "woman", describe [; "^There is a stout dark-haired woman here, in yellow silk."; ], description [; print "She has a wiry figure, with snow-frost hair, but the poise of a \ whippet. She's wearing ", (guardrobe) self, ".^"; rtrue; ], has female; Object bluemallguard3 "tall young man in blue" class blueguard, with name "tall" "odd" "peculiar" "unkempt" "hair" "young" "man", describe [; "^A tall, peculiar-looking young man in blue silk stands here."; ], description [; print "He's skinnier than he is tall, with unkempt hair. \ He has ", (guardrobe) self, "; but they don't quite fit.^"; rtrue; ]; Object yellowmallguard3 "wrinkled woman in yellow" class yellowguard, with name "wrinkled" "old" "lean" "woman", describe [; "^There is a lean, wrinkled woman here, in yellow silk."; ], description [; print "She's quite old, with a worn wrinkled face, but her frame is lean \ and tall. She's wearing ", (guardrobe) self, ".^"; rtrue; ], has female; !Class farguard ! with ! before [; ! print_ret (The) self, " is not visible any more."; ! ], ! has scenery; !Object yellowmallguard3far "wrinkled woman in yellow" SilMallNorth ! class farguard, ! with ! name "wrinkled" "old" "lean" "woman"; Object SilPark "Shady Park" with description "The space is cool and half-shaded by frequent trees. Shaggy bushes, \ untrimmed, surround the park, casting the aura of unspoiled wilderness. \ A river peeps through shyly to the north, and a wider \ gap in the irregular rhythm of hedges leads your eye west. \ In the center of the space rises a bare flagpole. \ A few people stroll here, chatting quietly or simply walking.", w_to [; print "You move through scattered trees and shrubbery.^"; return SilAtHarp; ], n_to "You walk to the gap between the hedges, and find the river at your feet. \ The shrubbery grows right to the water's edge; there's nowhere to go.", u_to CantGoThatWay, d_to CantGoThatWay, cant_go "You move behind a bush, and find another couple of bushes blocking \ your way. There doesn't seem to be any way through here.", number 4, ! used by each_turn each_turn [; ! this uses SilPark rather than self, so that the other park area can call it. if (SilPark.number <= 0) return; if (random(11) == 2) { SilPark.number = SilPark.number - 1; "^Something rushes through the hedges, just beyond sight -- no, two \ things, one on the other's heels."; } ], has light outdoors; Nearby flagpole "flagpole" with name "flag" "pole" "bare" "flagpole", description [; print "Perhaps it's silly to assume it's a flagpole, given the absence of \ flag at the top. It's just a pole; a single bole of polished blonde wood, narrow \ enough to encircle with your two hands. The unadorned top rises higher than \ the trees, and it casts a line of inky shadow across the grass and the more \ mundane shadows of the trees."; if (flagpoleshadow has general) print " Several people are investigating the shadow."; new_line; rtrue; ], before [; Climb: print "You jump and grab, but you can't get much a grip with your legs, and \ you're not strong enough to pull yourself up with arms alone. \ Eventually you slide your meager few handspans to the ground."; if (random(41) <= 20) print " A few people, watching, smile and shrug good-naturedly."; new_line; rtrue; Push, Pull: "The pole is solidly rooted."; LookBehind: <>; ReceiveBehind: <>; ], has scenery; Nearby flagpoleshadow "shadow behind the flagpole" class shadowclass, with description [; print "The shadow is a narrow and eye-aching dark."; if (self has general) print " Several people are standing or kneeling around it, examining \ and prodding."; new_line; rtrue; ], door_to DarkEntry, door_world world_Dark, before [; Touch: print "You reach into the shadow, and in, in, and the farther you stretch the \ farther there is to go -- you pull back, shivering.^"; if (self has general) { print "^Watching, someone asks, ~"; PrintFunkyLanguage("tatuara"); print "?~^"; } rtrue; Smell: "You smell a faint dampness."; Receive: print (The) noun, " slides into blackness and is gone.^"; rfalse; Enter: if (self has general) print "One of the people standing nearby cries ~Dae!~^^"; print "The shadow seems too narrow to cover you, but you pass towards it, \ and through it, and the darkness does not end, everything beyond \ is beyond reach and miles away and dark --^^"; PauseClear(); print "-- And the darkness remains. You jerk around wildly, panicked -- lost \ in shadow? No; you are real again, at least, and there's solid \ ground underfoot.^^"; rfalse; ]; ! general means people are staring at it Object SilAtHarp "Shady Park, at Pedestal" with description "This corner of the park centers around a grey stone pedestal. The \ pedestal supports a large and curious sculpture, or construction -- or something, \ made of metal columns and wire. Trees and bushes ring the pedestal, granting \ it unspoken precedence in the quiet landscape. A path leads east through the \ hedges. A few people stroll here, chatting quietly or simply walking.", e_to [; print "You make your winding way through the hedges.^"; return SilPark; ], u_to CantGoThatWay, d_to CantGoThatWay, cant_go [; print_ret (string) SilPark.cant_go; ], each_turn [; indirect(SilPark.each_turn); ], has light outdoors; Nearby silparkpedestal "pedestal" with name "grey" "granite" "stone" "slab" "pedestal", description "It's an unadorned rectangular slab of some grainy grey granite. It's just \ big enough for the construction which rests on it.", before [; Search: "Nothing rests on the pedestal but the sculpture."; Receive, Enter: "There's no room."; Touch: "The stone is rough as sand."; Push, Pull, LookUnder: "You can't move the pedestal."; ], has scenery supporter; Nearby silharp "sculpture" with name "large" "curious" "sculpture" "statue" "construction", description [; "The construction is complex. Two heavy metal columns rise from the pedestal, \ somewhat taller than you; they lean sharply away from each other. Bridging \ the space between the columns, and apparently tethering them together, is \ a series of horizontal metal wires. And a wide bronze disc hangs from the \ midpoint of one wire, waist-high in the center of the sculpture."; ], before [; Listen: if (silharpdisc.number > 0) { <>; } Attack, KnockOn: print "(", (the) silharpwires, ")^"; <>; Touch: print "(", (the) silharpwires, ")^"; <>; Push, Pull: print "(the metal columns)^"; <>; ], each_turn [; if (self has general) { give self ~general; switch (random(5)) { 1: print "^A "; PrintRandomPerson(); print " smiles appreciatively.^"; 2: print "^A "; PrintRandomPerson(); print " nods at you.^"; 3: print "^A "; PrintRandomPerson(); print " and a "; PrintRandomPerson(); print " are listening.^"; } } ], has scenery transparent; ! general means the crowd may react at the end of the turn. Object silharpwires "series of metal wires" silharp with name "series" "metal" "wire" "wires", description "There are perhaps two dozen wires, \ each running horizontally from \ one outward-leaning column to the other. They are polished and twisted \ strands of some black metal. The bronze disc hangs \ horizontally between two of them, pinned to the wire just above it.", before [; Touch: "Each wire is rigidly taut."; Attack, KnockOn: give silharp general; "You draw a thrumming note from one wire."; Pull, Push: "The wires are under too much tension to flex."; ], has scenery; Object silharpdisc "bronze disc" silharp with name "wide" "bronze" "disc" "disk" "circle", description "The disc is nearly half a yard wide. A pin rising from its center \ attaches to the midpoint of one wire; the disc hangs horizontally between \ the columns, at belt height. A delicate tracery is etched on its upper \ surface... a map? The shapes are nearly familiar... yes, the outlines of the \ continents, but distorted, strangely flattened around the rim of the circle. \ And even by that, not quite right. Some islands are too small, or missing. \ That peninsula should continue across the southern ocean. Odd.", react_before [; Listen: if (noun == nothing) { if (self.number > 0) "The disc still hums softly."; } ], before [; LookUnder: "The bottom surface of the disk is smooth, and slightly hollowed. A \ few unreadable runes are marked inside one edge."; Touch: "You can just feel the etched lines on the bronze."; Push, Pull: "The disc rocks slightly."; Attack, KnockOn: give silharp general; self.number = 2; StartDaemon(self); "A deep chime spreads between the trees."; Listen: if (self.number > 0) "The disc still hums softly."; ], number 0, daemon [; self.number = self.number - 1; if (self.number == 0) { StopDaemon(self); if (location == SilAtHarp) { give silharp general; print "^The last whisper of the disc's vibration dies away.^"; } } ], has scenery; Class silharpcolumnclass with name "heavy" "metal" "column", description [; "Both columns are square in cross-section, but they are slanted steeply \ away from the vertical, and from each other. They seem about to fall, \ in fact, but for the wires that bind them together. \ The left column is polished \ to a near-mirror finish; the right one, in contrast, is rough."; ], before [; Push, Pull: "The columns are rigidly anchored."; Attack, KnockOn: print_ret (The) self, " emits a deep gentle ", (emphstring) "toonk."; ], has scenery; Object silharpbothcolumns "columns" silharp with name "columns", before [; Examine: <>; Push, Pull: <>; Touch: print_ret (The) silharpleftcolumn, " is polished slick-smooth; ", (the) silharprightcolumn, " is rough and pitted."; Attack, KnockOn: print_ret "You rap on the left column, then the right. Each \ emits a deep gentle ", (emphstring) "toonk."; ], has scenery; Object silharpleftcolumn "left column" silharp class silharpcolumnclass, with name "left", before [; Touch: print_ret (The) self, " is polished slick-smooth."; ]; Object silharprightcolumn "right column" silharp class silharpcolumnclass, with name "right", before [; Touch: print_ret (The) self, " is rough and pitted; the metal scrapes your \ fingertips."; ]; Object silparktrees "trees" with name "tree" "trees", found_in SilPark SilAtHarp, description "They are of several kinds; many show spring flowers.", before [; Climb: "You climb up into a tree. There's really nothing there, so you drop to \ the ground."; LookUnder: "Just grass, and the occasional park-goer."; ], has scenery absent; ! absent switched by MoveToWorld. Object silparkbushes "overgrown hedges" with name "wild" "shaggy" "untrimmed" "overgrown" "bush" "bushes" "hedge" "hedges", found_in SilPark SilAtHarp, description "The bushes seem wild, untrimmed. But you notice their foliage \ is everywhere rich and healthy; and their pattern is ideal, making every nook \ of the park private, without being isolated or hemmed in.", before [; Enter: "The bushes are too dense to push into."; Smell: "The hedges smell of cool damp soil."; LookUnder, Search: if (random(5) == 1) "A pair of tiny eyes stare back at you, and then blink, \ and then vanish."; "Nothing but rich soil."; ], has scenery absent; ! absent switched by MoveToWorld. Object silparkcrowd "crowd" with name "crowd" "people" "person", found_in SilPark SilAtHarp, description [; print "The people here are in short robes or caped tunics. They stroll between the \ hedges, sit under trees, walk hand-in-hand."; if (self in SilPark && flagpoleshadow has general) { print " Several are investigating the flagpole and its shadow."; } new_line; rtrue; ], before [; Listen: "A few people are talking quietly to each other; most are just enjoying \ the park."; ], life [ sex; Ask, Tell: if (second ~= 0 && self in SilPark) { if (Refers(flagpoleshadow, second) ~= 0 || Refers(flagpole, second) ~= 0) { if (flagpoleshadow hasnt general) { print "You wave at a "; sex = PrintRandomPerson(); print " and gesture at the night-black shadow. "; if (random(41) <= 25) { print_ret (cheshe) sex, " looks at it, frowning; then ", (heshe) sex, " shrugs and wanders away."; } else { give flagpoleshadow general; print (cheshe) sex, " stares at it, puzzled; then ", (heshe) sex, " turns to you with a delighted grin. ~"; PrintFunkyLanguage("tatuara"); print ",~ ", (heshe) sex, " says. A "; PrintRandomPerson(); print_ret " joins ", (himher) sex, ", and they begin examining \ the phenonemon, excited as masons with a new toy."; } } print "One of the people standing around the flagpole looks up \ and shrugs, saying, ~"; PrintFunkyLanguage("tatuare"); print_ret ".~"; } } if (second ~= 0 && self in SilAtHarp) { if (Refers(silharp, second) ~= 0 || Refers(silharpdisc, second) ~= 0 || Refers(silharpwires, second) ~= 0 || Refers(silharpleftcolumn, second) ~= 0 || Refers(silharprightcolumn, second) ~= 0) { print "A "; sex = PrintRandomPerson(); print " nods, saying ~"; PrintFunkyLanguage("ntuni"); print ".~"; switch (random(3)) { 1: print " ", (cheshe) sex, " taps a few of the metal wires, \ producing a bright breath of music."; 2: print " ", (cheshe) sex, " knocks briskly on the bronze \ disc. A deep chime rolls across the park."; silharpdisc.number = 2; StartDaemon(silharpdisc); } new_line; rtrue; } } print "You attract the attention of a "; sex = PrintRandomPerson(); print ", but ", (heshe) sex; switch (random(3)) { 1: print " frowns"; 2: print " shakes ", (hisher) sex, " head"; default: print " looks baffled"; } print ". ~"; PrintFunkyLanguage("mhiele"); switch (random(3)) { 1: print ".~^"; 2: print ",~ ", (heshe) sex, " adds.^"; default: print "?~ ", (heshe) sex, " asks.^"; } rtrue; default: "Nobody pays much attention."; ], react_before [; Listen: if (noun == 0) { if (silharpdisc.number ~= 0) rfalse; ! let the disc take priority. <>; } ], has scenery animate hiddengender absent; ! absent switched by MoveToWorld. [ PrintFunkyLanguage sneakword numsyl cap ix anyvow; numsyl = random(5) + 3; cap = 1; anyvow = 0; for ( ix = 1 : ix <= numsyl : ix++ ) { if (cap == 1) { cap = 0; anyvow = 0; switch (random(11)) { 1: print "Mw"; 2: print "Tu"; 3: print "De"; 4: print "Nt"; 5: print "Rw"; 6: print "Nw"; 7: print "M"; 8: print "T"; 9: print "D"; 10: print "R"; 11: print "Lt"; } } else { switch (random(17)) { 1: print "n"; 2: print "d"; 3: print "t"; 4: print "l"; 5: print "w"; 6: print "r"; 7: print "ll"; 8: print "t"; 9: print "m"; 10: print "nd"; 11: print "nt"; 12: print "mw"; 13: print "mr"; 14: print "rm"; 15: print "rw"; 16: print "lh"; 17: print "nh"; 18: print "s"; 19: print "th"; } if (anyvow > 0 && random(99) < 20) { switch (random(3)) { 1: print "? "; default: print ". "; } cap = 1; ix--; } } if (cap == 0) { switch (random(11)) { 1: print "a"; 2: print "i"; 3: print "e"; 4: print "o"; 5: print "u"; 6: print "e"; 7: print "a"; 8: print "ua"; 9: print "ue"; 10: print "ui"; 11: print "ao"; } if (anyvow > 0 && random(99) <= (60+10*anyvow)) { print " "; if (random(41) <= 27) { switch (random(9)) { 1: print "du "; 2: print "av "; 3: print "ab "; 4: print "mo "; 5: print "mu "; 6: print "se "; 7: print "li "; 8: print "lle "; 9: print "ntei "; } } if (sneakword ~= 0 && random(41) <= 10) { print (string) sneakword, " "; sneakword = 0; } anyvow = 0; ix--; } else { anyvow++; } } } ]; ! Mwarisen tuante. Denwa ntuvaale ltev ltamna. Rwe entua nvi. Object match "ceramic square" with name "ceramic" "clay" "square" "symbol" "symbols", parse_name [ num wd; num = 0; wd = NextWord(); while ((Refers(self, wd) ~= 0) || ((self hasnt general) && (wd == 'corner' or 'groove'))) { num++; wd = NextWord(); } return num; ], describe [; if (matchflame in self) "^A ceramic square is lying here, emitting a tiny jet of blue flame."; ], description [; if (verb_word == 'read') "You can't read the symbols printed on the ceramic square."; print "It's a thin square of some pale ceramic, about as wide as two of your \ fingers together. The edges and corners are a little rounded; the \ surface is matte, not polished. A few symbols are stamped on one side, \ slightly smudged, in bright red ink."; if (self hasnt general) " A deep groove cuts diagonally across one corner of the square. That corner \ bears a red dot."; else { if (matchflame in self) " One corner of the square is gone. A tiny hot needle of blue flame jets \ from the break."; else " One corner of the square is gone. The break is clean and straight, \ just slightly rough."; } ], invent [; if (inventory_stage == 2) { if (matchflame in self) { print " (jetting a tiny blue flame)"; rtrue; } } ], before [; Touch: if (matchflame in self) "The square is warm, particularly near the broken corner."; else "The square feels like ceramic: smooth, dry, a little chalky."; Smell: if (matchflame in self) <>; if (self has general) "It smells slightly scorched."; Listen: if (matchflame in self) <>; Attack: if (self has general) "You can't break the square anywhere else."; move matchflame to self; move matchcorner to player; StartDaemon(matchflame); give self general; "The corner breaks off easily along the groove. The snap is followed \ by a faint hiss; and then you jerk your fingers quickly away, \ for a tiny, blue-hot jet of flame has begun to shoot from the \ broken edge."; Tie: if (second == matchcorner) <>; if (second == oldcorner && self has general) <>; ], has transparent; ! general means broken Object matchflame "blue flame" with name "needle" "jet" "of" "hot" "blue" "flame" "fire", description "The flame is no longer than the last joint of your thumb. It shoots \ straight out from the broken corner of the square, a bright diagonal line: \ dim blue at the base, but eye-stingingly bright along the rest of its length.", before [; Smell: "It has a distant, acrid odor, like steamed elixirs."; Take, Touch: "Ow!"; Listen: "The flame hisses gently."; ], number 4, daemon [; self.number = self.number-1; if (TestScope(match) ~= 0) { switch (self.number) { 2: print "^The blue flame is weakening.^"; 1: print "^The blue flame is flickering badly.^"; 0: print "^The blue flame sputters out.^"; } } if (self.number == 0) { StopDaemon(self); remove self; } ], has light scenery; Object matchcorner "ceramic corner" with name "triangle" "triangular" "ceramic" "clay" "corner", description "It's just a small triangular chip, slightly rough \ where you broke it from the ceramic square. The red dot is still visible \ on one side.", before [; Touch: "The corner feels like ceramic: smooth, dry, a little chalky."; Attack: "You can't break the corner any further."; Tie, PutOn, Insert: if (second == match) "You can't reattach the corner to the square."; ]; Object oldcorner "worn clay chip" SilAlley with name "triangle" "triangular" "ceramic" "worn" "clay" "chip", describe [; if (self hasnt moved) rtrue; else rfalse; ], description [; if (self hasnt moved) { give self moved; print "What, the one lying on the ground here? "; } "It's a small, triangular chip of ceramic. The edges are worn and weathered grey, \ although there is yet a trace of something red on one side, and the long edge \ of the triangle seems slightly rough."; ], before [; Touch: "The chip feels like ceramic: smooth, dry, a little chalky."; Attack: "You can't break the chip."; Tie, PutOn, Insert: if (second == match && match has general) "You can't attach the chip to the square, although it looks the right shape \ to replace the broken corner."; ], after [; Take: if (self hasnt moved) { give self moved; print "What, the one lying on the ground here? "; } rfalse; ]; ! moved means you see it #ifnot; ! SKIP_SILENT; Object SilBehindStand "Behind Platform" with description "Third room.", has light outdoors; Constant SilAlley SilBehindStand; Constant SilAtHarp SilBehindStand; Object tether "tether"; Constant bloodstain tether; Constant dashercorpse tether; Constant silyardgate tether; Object glittering "silver ring"; Object silmallcrowd "thing" has static; Constant silparkcrowd silmallcrowd; Object silmalltrees "thing" has static; Constant silparktrees silmalltrees; Constant silparkbushes silmalltrees; Object match "match" with name "match"; Object matchflame "flame" with name "flame"; Nearby silriver "river" with name "river", has static; Nearby thecircus "circus" with daemon [; StopDaemon(self); ], has static absent; Nearby silmallboss "silmallboss" with daemon [; StopDaemon(self); ], has static absent; #endif; ! SKIP_SILENT;