! ------ Dark world #ifndef SKIP_DARK; Property darkpos; ! global Fake_Action DarkLook; Fake_Action DarkSearch; Fake_Action DarkTake; Fake_Action DarkDrop; Global darkgot = 0; ! The thing what you've got. [ DarkEnter; darkgot = 0; StartDaemon(darkbat); darkchord.number = 0; darkchord.darkpos = 0; StartDaemon(darkchord); lastdesc = -1; ]; [ DarkExit; darkgot = 0; StopDaemon(darkbat); StopDaemon(darkchord); AdjustDarkNoises(0); remove darkfloor; if (children(thedark) ~= 0) { print (The) child(thedark), " yells ~I can't see!~ [BUG]^"; } ]; [ DarkInitialDark; if (world ~= world_Dark) return; !print "[DEBUG] thedark initial, lastdesc=", lastdesc, " location=", location, "/", (the) location, ".^"; switch (lastdesc) { -1: ! entered world 0: ! just walking default: ! just turned off light } AdjustDarkNoises(real_location); ]; Class DarkClass with initial [; !print "[DEBUG] lit room initial, lastdesc=", lastdesc, " location=", ! location, "/", (the) location, ".^"; switch (lastdesc) { -1: print "^There is a taste of an echo in the air, as if some sound had ceased \ a fraction of a second before you could become aware of it.^"; 0: ! just walking default: print "^Every sound that surrounded you in the dark \ goes silent, all at once.^"; } AdjustDarkNoises(0); ], description [; "You stand on packed mud, which spreads to the dim limits of your circle \ of light, and who knows how far beyond. Above you, darkness; around you, \ the same."; ], u_to CantGoThatWay, d_to "The ground is solid.", in_to "In to what?", out_to "Out from what?", before [ ix k; Listen: if (location == thedark) { if (noun == 0) { ; <>; } } else "The air is dead still."; DarkSearch: k = action; action = ##DarkLook; objectloop (ix in thedark) { if (ix hasnt static && ix.&darkpos ~= 0) { if (RunRoutines(ix, before) == 0) { print "You see ", (a) ix, " in the dark! [BUG]^"; } } } action = k; rtrue; ], after [; Look: if (location == thedark) { new_line; ; <>; } Drop: if (location == thedark) { "Dropped and lost."; } ], has ~light; Class darksoundclass with name "noise" "sound", darkpos 0, before [; Examine: <>; Take, Touch: "There is nothing tangible within your reach."; Follow, Enter: if (self.&door_dir == 0) "You shift back and forth, but the sound is oddly \ difficult to locate."; ! print "You head ", (dirstring) self.door_dir, ".^"; <>; DarkLook: print_ret "^A tape recorder is playing ", (a) self, " nearby. [BUG]"; DarkTake: if (darkgot ~= 0) { if (darkgot == self) { print_ret (The) darkgot, " is already all around you."; } print_ret "You can't tell where ", (the) self, " is coming from, precisely. ", (The) darkgot, " that surrounds you is too loud."; } darkgot = self; if (AfterRoutines() == 1) rtrue; print_ret "You turn your head slowly, concentrating on ", (the) self, ". There. A step... the sound surrounds you, seemingly everywhere. \ You've got it, or it's got you, or something."; DarkDrop: if (darkgot ~= self) { print_ret "I'm not sure what you mean. ", (The) self, " is off to one side."; } darkgot = 0; print_ret "You step quickly to one side, leaving ", (the) self, " behind."; ], has scenery static; ! for path objects, door_dir contains direction object Class darksoundtakable class darksoundclass, with react_before [; Exit: if (darkgot == self) { <>; } ], before [; Touch: <>; Take, Enter, Follow: <>; Drop, GetOff, GetOutOf: <>; ]; [ dirstring dirobj dirto; if (dirobj == 0) { print "your nose [BUG]"; rtrue; } dirto = dirobj.door_dir; switch (dirto) { n_to: print "north"; s_to: print "south"; e_to: print "east"; w_to: print "west"; ne_to: print "northeast"; se_to: print "southeast"; sw_to: print "southwest"; nw_to: print "northwest"; default: print "your chin [BUG]"; } ]; [ dark_go dest str; if (location == thedark) { if (str == 0) print "You advance through the blind dark."; else print (string) str; if (darkgot ~= 0) { darkgot.darkpos = dest; print " ", (The) darkgot, " seems to keep pace about you."; } if (real_location == darkchord.darkpos) { darkchord.darkpos = dest; if (darkgot ~= 0) print " Above, the thrumming chord does as well."; else print " Above, the thrumming chord seems to keep pace with you."; } new_line; lastdesc = 0; } else { darkgot = 0; print "You pace across changeless mud.^"; lastdesc = 0; } return dest; ]; [ dark_cant_go str; if (location == thedark) print (string) str, "^"; else print "Something unseen resists your motion.^"; ]; Array darksoundtable table [; darkchord darkbat; darkplipdoor darkbubbling darkthudkey darkshadow; darkrapfar darkrapfar2; darkwailfar darkwailfar2 darkwailfar3; darkbellsfar darkbellsfar2; darkrattlefar darkrattlefar2 darkrattlefar3; darkrumblefar darkrumblefar2; darkplipfar darkplipfar2; darkmurmurfar darkmurmurfar2; darkglassfar darkglassfar2; darkthudfar darkthudfar2; darktrafficfar darktrafficfar2; darkrapping darkwailing darkbells darkrattling darkrumbling; darkplipping darkmurmuring darkglassing darkthudding darktrafficking; ]; Global darkallin = 1; ! TRUE if every member of darksoundtable is removed; else FALSE [ AdjustDarkNoises loc ix ob; if (loc == 0) { if (darkallin == 0) { for (ix=1 : ix <= darksoundtable-->0 : ix++) { ob = darksoundtable-->ix; remove ob; } darkallin = 1; } move darkfloor to location; !print "[DEBUG] moved darkfloor to ", location, "/", (the) location, ".^"; rtrue; } for (ix=1 : ix <= darksoundtable-->0 : ix++) { ob = darksoundtable-->ix; if (ob.darkpos == loc) { if (ob notin thedark) { move ob to thedark; darkallin = 0; } } else { if (ob in thedark) remove ob; } if (darkfloor notin thedark) { move darkfloor to thedark; !print "[DEBUG] moved darkfloor to ", thedark, "/", (the) thedark, ".^"; } } ]; ! ------------- Object DarkEntry "Muddy Plane" class DarkClass, with s_to [; return dark_go(DarkWailRoom); ], w_to [; return dark_go(DarkBellsRoom); ], cant_go [; return dark_cant_go("The rapping echoes louder, a percussive blow \ that sends you stumbling back."); ], before [; DarkLook: "A sharp, irregular rapping comes from somewhere nearby. Farther away, \ to the west, is a jangle of bells; and a thin wailing drifts from \ the south."; ]; Object darkbubbling "bubbling sound" class darksoundtakable, with name "cheery" "merry" "bubbling" "bubble" "burbling" "burble" "bubbles", darkpos DarkEntry, before [; Listen: print "Whatever it is bubbles and pops happily to itself. It seems to be \ coming from"; if (darkgot == self) " all around you."; else " the ground somewhere near here, but you're not quite sure where."; DarkLook: new_line; if (darkgot == self) "A cheery bubbling sound surrounds you."; else "It sounds like something is bubbling merrily on the ground nearby."; Smell: "Whatever the bubbling is, it doesn't have any particular odor."; ], has ~static; Object darkrapping "rapping sound" class darksoundclass, with name "irregular" "rap" "rapping" "tap" "tapping" "clapping", darkpos DarkEntry, react_before [; Applaud: print "The rapping noise"; if (random(41) <= 20) print " accelerates"; else print " decelerates"; " for a moment, matching your beat."; ], before [; Listen: "It might be two boards clapping together in the dark. There is no pattern \ that you can hear; slower, faster, a staccato burst, another, a pause. \ The sound rings faintly in your ears."; ]; Object darkwailfar "distant wailing" class darksoundclass, with name "distant" "wail" "wailing", darkpos DarkEntry, door_dir s_obj, door_to [ ob; print_ret "Human? Animal? Something much older? To the ", (dirstring) ob.door_dir, ", whatever it is."; ], before [; Listen: return indirect(darkwailfar.door_to, self); ]; Object darkbellsfar "distant bells" class darksoundclass, with name "distant" "jangling" "jangle" "clangor" "bell" "bells", darkpos DarkEntry, door_dir w_obj, door_to [ ob; print_ret "There might be someone speaking behind the unremitting clangor to the ", (dirstring) ob.door_dir, "."; ], before [; Listen: return indirect(darkbellsfar.door_to, self); ]; ! ------- Object DarkBellsRoom "Muddy Plane" class DarkClass, with e_to [; return dark_go(DarkEntry); ], n_to [; return dark_go(DarkPlipRoom); ], cant_go [; return dark_cant_go("You would run into the teeth of the tintinnabulation."); ], before [; DarkLook: "You are nearly deafened by unseen clangor. A thousand bells might be \ roiling a foot above your head. The noise is dampened to the east, \ where you can hear an occasional sharp rap, and to the north, \ where a echoing plipping noise gives the impression of dripping water."; Jump: "You jump on the spot. Apparently there isn't anything above you, after \ all."; ]; Array bellspoem --> [; "Hear the sledges with the bells... silver bells..."; "What a world of merriment their melody foretells..."; "To the tintinnabulation that so musically wells..."; "From the jingling and the tingling of the bells."; "Hear the mellow wedding bells... golden bells..."; "What a world of happiness their harmony foretells..."; "What a gush of euphony voluminously wells..."; "To the rhyming and the chiming of the bells."; "Hear the loud alarum bells... brazen bells..."; "What a tale of terror, now, their turbulency tells..."; "In a clamorous appealing to the mercy of the fire..."; "In the clamor and the clangor of the bells."; "Hear the tolling of the bells... iron bells..."; "What a world of solemn thought their monody compels..."; "Keeping time, time, time, in a sort of Runic rhyme..."; "To the moaning and the groaning of the bells."; ]; Object darkbells "sound of bells" class darksoundclass, with name "jangling" "jangle" "clangor" "bell" "bells" "indistinct" "voice", darkpos DarkBellsRoom, number 0, before [ ix; Listen: print "The noise is a thousand incessant bells, from a ice-sweet chime to \ a fierce, deep gongen. Not one of them pauses, for one moment.^"; print "^Somewhere behind the noise, there is an indistinct voice, \ chanting: ~"; ix = self.number + 4 * (random(79) % 4); self.number = self.number + 1; if (self.number == 4) self.number = 0; print (string) bellspoem-->ix; "~"; ]; Object darkrapfar2 "distant rapping" class darksoundclass, with name "distant" "irregular" "rap" "rapping" "tap" "tapping", darkpos DarkBellsRoom, door_dir e_obj, before [; Listen: return indirect(darkrapfar.door_to, self); ]; Object darkplipfar "distant plipping" class darksoundclass, with name "distant" "metallic" "plip" "plop" "drip" "plip-plop" "plipping" "plopping" "dripping", darkpos DarkBellsRoom, door_dir n_obj, door_to [ ob; print_ret "From the ", (dirstring) ob.door_dir, " comes a bright resonant \ plip-plopping."; ], before [; Listen: return indirect(darkplipfar.door_to, self); ]; ! ------- Object DarkWailRoom "Muddy Plane" class DarkClass, with n_to [; return dark_go(DarkEntry); ], se_to [; return dark_go(DarkRattleRoom); ], sw_to [; return dark_go(DarkRumbleRoom); ], cant_go [; return dark_cant_go("The wail rises to a glass-edged shriek before you can \ complete a step."); ], before [; DarkLook: "You are surrounded by a thin, high wailing sound; it wavers up \ and down, setting your ears on edge. A rattling hiss is audible \ to the southeast, a much deeper rumble to the southwest, and \ there is an occasional echoing rap from the north."; ]; Object darkwailing "wailing" class darksoundclass, with name "thin" "high" "wail" "wailing", darkpos DarkWailRoom, before [; Listen: "The sound might almost be a human voice; but it stretches and stretches, \ without breath. Or might it be many voices, a thousand?"; ]; Object darkrapfar "distant rapping" class darksoundclass, with name "distant" "irregular" "rap" "rapping" "tap" "tapping", darkpos DarkWailRoom, door_dir n_obj, door_to [ ob; print_ret "You can hear a sharp, irregular tapping sound to the ", (dirstring) ob.door_dir, "."; ], before [; Listen: return indirect(darkrapfar.door_to, self); ]; Object darkrattlefar "distant hiss" class darksoundclass, with name "distant" "rattling" "rattle" "rustling" "rustle" "hiss", darkpos DarkWailRoom, door_dir se_obj, door_to [ ob; print_ret "A surging, coarse hiss blows in from the ", (dirstring) ob.door_dir, "."; ], before [; Listen: return indirect(darkrattlefar.door_to, self); ]; Object darkrumblefar "distant rumble" class darksoundclass, with name "distant" "rumbling" "rumble" "deep" "powerful" "vibration", darkpos DarkWailRoom, door_dir sw_obj, door_to [ ob; print_ret "To the ", (dirstring) ob.door_dir, " you can make out a rumble, \ quiet and vastly deep."; ], before [; Listen: return indirect(darkrumblefar.door_to, self); ]; ! ------- Object DarkRattleRoom "Muddy Plane" class DarkClass, with nw_to [; return dark_go(DarkWailRoom); ], w_to [; return dark_go(DarkRumbleRoom); ], ne_to [; if (location == thedark) "There is a deafening blare, and something rushes right past your face, \ horribly fast. More blaring calls and squeals erupt. You back away, \ hurriedly."; deadflag = 1; "Something strikes you a crushing, but utterly silent, blow."; ], cant_go [; return dark_cant_go("The rattling attenuates as you move that way. \ You freeze, vaguely disturbed by the abrupt sense of echoing distance."); ], before [; DarkLook: "A rattling, rustling hiss courses back and forth here. It reminds you of... \ what? Perhaps the sound of the wind in the dry grassy plains, back \ wherever they are. If so, the wind itself is a distant high wail to the \ northwest; a deep rumble is barely detectable to the west; and a cacophony \ of shrieks and brassy calls pours from the northeast."; ]; Object darkrattling "rattling hiss" class darksoundclass, with name "rattling" "rattle" "rustling" "rustle" "hiss", darkpos DarkRattleRoom, before [; Listen: "The sound seems to endlessly circle -- a gust to one side; a surge approaching \ the other, then slacking."; ], each_turn [; switch (random(7)) { 1: "^The rattling surges and crests."; 2: "^The hissing ceases for a moment."; } ]; Object darkwailfar2 "distant wailing" class darksoundclass, with name "distant" "wail" "wailing", darkpos DarkRattleRoom, door_dir nw_obj, before [; Listen: return indirect(darkwailfar.door_to, self); ]; Object darkrumblefar2 "distant rumble" class darksoundclass, with name "distant" "rumbling" "rumble" "deep" "powerful" "vibration", darkpos DarkRattleRoom, door_dir w_obj, before [; Listen: return indirect(darkrumblefar.door_to, self); ]; Object darktrafficfar "distant cacophony" class darksoundclass, with name "distant" "shrieks" "shriek" "brassy" "calls" "call" "blares" "blare" "squeal" "cacophony", darkpos DarkRattleRoom, door_dir ne_obj, door_to [ ob; print_ret "The noise to the ", (dirstring) ob.door_dir, " is not like anything \ you've heard. It's a mixture of brassy monotone blares -- trumpets, perhaps -- \ and painfully high squeals, with fainter growls and snarls underneath."; ], before [; Listen: return indirect(darktrafficfar.door_to, self); ]; ! ------- Object DarkRumbleRoom "Muddy Plane" class DarkClass, with ne_to [; return dark_go(DarkWailRoom); ], e_to [; return dark_go(DarkRattleRoom); ], cant_go [; return dark_cant_go("As you begin to move that way, the rumbling scales \ abyssally downward in pitch. You retreat quickly, before you are drawn \ with it."); ], before [; DarkLook: "A steady, deep, and powerful rumble burns just below the surface of this \ spot. You feel it more than hear it -- a colorless vibration behind your \ ears and in your bones. \ A much higher, keening wail is audible far to the northeast, and \ from the east comes a rushing hiss."; ]; Object darkthudkey "gentle thudding" class darksoundtakable, with name "gentle" "thud" "thudding", darkpos DarkRumbleRoom, before [; Listen: print "The rhythm is steady but in an odd pattern: thud, thud; \ thud, thud; thud, thud. \ It seems to be coming from"; if (darkgot == self) " all around you."; else " just beside you."; DarkLook: if (self.darkpos == DarkThudRoom) "^There's a lost thud here. [BUG]"; if (darkgot == self) "^A gentle, irregular thudding sound envelops you."; else "^A gentle, irregular thudding sound comes from the dark air."; ], has ~static; ! general means it's in the thud room and gone. Object darkrumbling "deep rumble" class darksoundclass, with name "rumbling" "rumble" "deep" "powerful" "vibration", darkpos DarkRumbleRoom, before [; Listen: "The monotonous grumble permeates the air, and your blood."; ]; Object darkrattlefar2 "distant hiss" class darksoundclass, with name "distant" "rattling" "rattle" "rustling" "rustle" "hiss", darkpos DarkRumbleRoom, door_dir e_obj, before [; Listen: return indirect(darkrattlefar.door_to, self); ]; Object darkwailfar3 "distant wailing" class darksoundclass, with name "distant" "keen" "keening" "wail" "wailing", darkpos DarkRumbleRoom, door_dir ne_obj, before [; Listen: return indirect(darkwailfar.door_to, self); ]; ! ------- Object DarkPlipRoom "Muddy Plane" class DarkClass, with s_to [; if (location == thedark && darkgot == darkplipdoor) { darkgot = 0; darkplipdoor.darkpos = 0; remove darkplipdoor; darkmurmurfar.darkpos = DarkPlipRoom; move darkmurmurfar to thedark; print "You begin to move through the blind dark, towards the bells. The low \ plooping sound keeps pace with you... and as you move, something ", (emphstring) "shifts", " behind you. You whirl, as a cascade of dripping \ sounds rolls over you from the northeast. For a moment you're nearly \ certain of drowning... but nothing touches you; \ and then much of the plipping is \ gone, including your lowest note. A murmur of human voices now drifts \ from the northeast.^"; rtrue; } return dark_go(DarkBellsRoom); ], ne_to [; if (location == thedark && darkgot == darkplipdoor) { "The incessant dripping is strongest that way. \ Its force, particularly combined with the low plooping that moves \ with you, threatens to overwhelm you. You back away."; } if (darkplipdoor.darkpos == DarkPlipRoom) { return dark_cant_go("The incessant dripping is strongest that way, and its \ force threatens to overwhelm you, until you back away."); } return dark_go(DarkMurmurRoom); ], cant_go [; return dark_cant_go("A particularly loud note, as of silver on steel, flays \ your thoughts for an instant."); ], before [; DarkLook: print "A metallic plopping sound resonates here, over and over again, in \ several pitches and at several rates. You could easily believe that \ you were surrounded by dripping fountains, although the ground underfoot \ seems to be no damper than usual for this place. Bells jangle somewhere \ to the south, and"; if (darkplipdoor.darkpos == DarkPlipRoom) { " the plipping grows more intense to the northeast."; } else { " quiet voices murmur to the northeast."; } ]; Object darkplipdoor "low plooping" class darksoundtakable, with name "low" "low-pitched" "lowest" "ploop" "plooping", darkpos DarkPlipRoom, before [; Listen: if (self has static) { give self ~static; } print "The lowest dripping sound is plooping away"; if (darkgot == self) " all around you."; else " just to the northeast."; DarkLook: print "^A particularly low-pitched ploop comes from"; if (darkgot == self) " all around you."; else " just to the northeast."; ], after [; DarkTake: give self ~static; rfalse; ], has static; ! initially static, but is ~static when noticed. Object darkplipping "plip-plopping" class darksoundclass, with name "metallic" "plip" "plop" "drip" "plip-plop" "plipping" "plopping" "dripping", darkpos DarkPlipRoom, before [; Listen: if (darkplipdoor.darkpos == DarkPlipRoom) { give darkplipdoor ~static; print "The sound echoes all around you. To the northeast, it is \ louder and more rapid,"; if (darkgot == darkplipdoor) " but the lowest plooping note seems to be centered just behind \ your forehead."; else " and you notice a particularly low source of plooping in that direction."; } else { "The sound echoes all around you."; } ]; Object darkbellsfar2 "distant bells" class darksoundclass, with name "distant" "jangling" "jangle" "clangor" "bell" "bells", darkpos DarkPlipRoom, door_dir s_obj, before [; Listen: return indirect(darkbellsfar.door_to, self); ]; Object darkmurmurfar "distant voices" class darksoundclass, with name "distant" "murmuring" "murmur" "voice" "voices" "hub-bub" "crowd", darkpos 0, ! will be changed when door opens door_dir ne_obj, door_to [ ob; print_ret "You can hear a vast crowd of people, all quietly conversing, to the ", (dirstring) ob.door_dir, "."; ], before [; Listen: return indirect(darkmurmurfar.door_to, self); ]; ! ------- Object DarkMurmurRoom "Muddy Plane" class DarkClass, with sw_to [; return dark_go(DarkPlipRoom); ], e_to [; return dark_go(DarkGlassRoom); ], cant_go [; return dark_cant_go("The voices rise as you begin to move, and take on a definite \ tone of hostility. Another step brings on an angry hub-bub. You \ move back, glancing futilely around in the dark."); ], before [; DarkLook: "Voices seem to surround you, but you cannot make out the words, or \ even determine whether the language is one you understand. A rapid sound \ of dripping water comes from the southwest, and there are constant violent \ crashes to the east."; ]; Object darkmurmuring "murmuring voices" class darksoundclass, with name "murmuring" "murmur" "voice" "voices" "hub-bub" "crowd", darkpos DarkMurmurRoom, before [; Listen: "The murmuring of hundreds of voices comes from all around you. They're not \ speaking to you, you feel fairly sure."; ], number 3, each_turn [; if (self.number > 0) { self.number = self.number - 1; if (self.number == 0) { "^A voice edges above the murmur, familiar -- Aessa? You cannot make out \ what she said, if indeed that was her voice."; } } switch (random(7)) { 1: "^You almost catch a phrase."; 2: "^A word stands out for a moment, nearly comprehensible."; } ]; Object darkglassfar "distant crashing" class darksoundclass, with name "distant" "glass" "glassy" "crash" "crashing" "crashes" "smash" "smashing", darkpos DarkMurmurRoom, door_dir e_obj, door_to [ ob; print_ret "It sounds like someone is smashing a sheet of glass, again and again, ", (dirstring) ob.door_dir, " of you."; ], before [; Listen: return indirect(darkglassfar.door_to, self); ]; Object darkplipfar2 "distant plipping" class darksoundclass, with name "distant" "metallic" "plip" "plop" "drip" "plip-plop" "plipping" "plopping" "dripping", darkpos DarkMurmurRoom, door_dir sw_obj, before [; Listen: return indirect(darkplipfar.door_to, self); ]; ! ------- Object DarkGlassRoom "Muddy Plane" class DarkClass, with w_to [; return dark_go(DarkMurmurRoom); ], s_to [; if (darkgot == darkthudkey && location == thedark) { darkgot = 0; darkthudkey.darkpos = 0; remove darkthudkey; give darkthudkey general; return dark_go(DarkThudRoom, "You move towards the distant thudding sound. \ The gentle thudding around you keeps pace, and the two rhythms blend \ imperceptibly."); } if (darkthudkey has general) return dark_go(DarkThudRoom); return dark_cant_go("The irregular thudding draws closer, and louder. It's almost \ painful -- no, it is painful, the sound is jarring your mind; you back away."); ], cant_go [; return dark_cant_go("A particularly violent crystalline crash comes from \ just in front of your feet. You flinch back, even though nothing \ touches your skin."); ], before [; DarkLook: print "The crash of shattering glass jars you, over and over, from somewhere \ near here. Farther to the west you hear voices, apparently unconcerned; \ to the south pulses"; if (darkthudkey has general) " a regular thudding."; else " an irregular thudding."; ]; Object darkglassing "glassy crashing" class darksoundclass, with name "glass" "glassy" "crash" "crashing" "smash" "smashing", darkpos DarkGlassRoom, before [; Listen: "The smashing noise is not constant; it repeats, each crash delayed just long \ enough to make you think that perhaps it will not occur. The effect scrapes \ your nerves bloody."; ]; Object darkthudfar "distant thudding" class darksoundclass, with name "distant" "soft" "regular" "quiet" "thud" "thudding" "pulse", darkpos DarkGlassRoom, door_dir s_obj, door_to [ ob; print "To the ", (dirstring) ob.door_dir, " is a quiet and"; if (darkthudkey has general) " inhumanly regular thudding rhythm."; else " inhumanly precise, though irregular, rhythm. Thud thud, thud, thud thud, \ thud, thud thud, thud..."; ], before [; Listen: return indirect(darkthudfar.door_to, self); ]; Object darkmurmurfar2 "distant voices" class darksoundclass, with name "distant" "murmuring" "murmur" "voice" "voices" "hub-bub" "crowd", darkpos DarkGlassRoom, door_dir w_obj, before [; Listen: return indirect(darkmurmurfar.door_to, self); ]; ! ------- Object DarkThudRoom "Muddy Plane" class DarkClass, with n_to [; return dark_go(DarkGlassRoom); ], se_to [; return dark_go(DarkTrafficRoom); ], cant_go [; return dark_cant_go("The thudding becomes syncopated as you move that way. \ It grows more irregular, dragging with it the rhythms of your body, pulling \ them off-true and into a queasy weaknesss -- you retreat, quickly, while \ you can."); ], before [; DarkLook: "The thudding that envelops you is quiet and very, very regular. \ Beyond the pulse, dimly, you can make out smashing glass somewhere to \ the north. To the southeast is a more immediate cacophony of squeals \ and blares."; ]; Object darkthudding "soft thudding" class darksoundclass, with name "soft" "regular" "quiet" "thud" "thudding" "pulse", darkpos DarkThudRoom, before [; Listen: print (emphstring) "Thud thud", " thud ", (emphstring) "thud", " thud "; print (emphstring) "thud thud", " thud ", (emphstring) "thud", " thud "; print (emphstring) "thud thud", " thud ", (emphstring) "thud", " thud....^"; rtrue; ]; Object darktrafficfar2 "distant cacophony" class darksoundclass, with name "distant" "shrieks" "shriek" "brassy" "calls" "call" "blares" "blare" "squeal" "cacophony", darkpos DarkThudRoom, door_dir se_obj, before [; Listen: return indirect(darktrafficfar.door_to, self); ]; Object darkglassfar2 "distant crashing" class darksoundclass, with name "distant" "glass" "glassy" "crash" "crashing" "crashes" "smash" "smashing", darkpos DarkThudRoom, door_dir n_obj, before [; Listen: return indirect(darkglassfar.door_to, self); ]; ! ------- Object DarkTrafficRoom "Muddy Plane" class DarkClass, with nw_to [; return dark_go(DarkThudRoom); ], sw_to [; if (location == thedark) print "You take a step towards the hissing noise. "; return 0; ], cant_go [; if (location == thedark) "There is a deafening blare, and something rushes right past your face, \ horribly fast. More blaring calls and squeals erupt. You back away, \ hurriedly."; deadflag = 1; "Something strikes you a crushing, but utterly silent, blow."; ], before [; DarkLook: "You are surrounded by the shrieks of the damned. Or something worse; who \ knows what might lurk in this chain of worlds? Blares, squeals, and soft \ snarling calls: all tear at your ears without respite. Infinitely more \ gentle is the thudding sound far to the northwest, and a rattling, blowing \ hiss comes from the southwest. And in the center of the noise, beside \ you, is a small area of utter silence."; ]; Object darktrafficking "shrieking cacophony" class darksoundclass, with name "shrieks" "shriek" "brassy" "calls" "call" "blares" "blare" "squeal" "cacophony", darkpos DarkTrafficRoom, before [; Listen: "It's unrelentingly horrible. Long, brassy notes \ blare out, at intervals or overlapping -- they could be \ animal, human, or the calls \ of a cathedral's pump-pipes. Above that are terrible rushing squeals, \ and a fainter chorus of snarls and growls never ceases."; ]; Object darkshadow "area of silence" class darksoundclass, with name "area" "spot" "of" "utter" "silence" "quiet" "no", darkpos DarkTrafficRoom, door_to CloLevel1, door_world world_Claustro, before [; Listen: "It's exactly that -- a spot from which no sound comes, whatsoever. \ As you move your head, the silence seems to press at you, unnervingly, \ and then contract again."; Touch: "You reach into the silence, and in, in, with a sensation of going \ infinitely and nowhere at all -- you pull back, shivering."; Smell: "There is a smell of rust about the silent area."; Receive: print (The) noun, " slides away from your hand, somehow, and \ is gone in silence.^"; if (noun == jarwater || noun == jaroil) { remove noun; rtrue; } move noun to self.door_to; rtrue; Enter: print "The silence ", (emphstring) "expands", " as you move into it. Now \ all sound is gone from the world, the black world, and the ground is \ gone, and your voice and your breath and you --^^"; PauseClear(); print "-- Out of nothing, you are struck, hard, in the back \ and neck and knees. There is no down, but a moment of \ dizzying instability rushes past you. Then you are struck again, \ by a metal floor which jars your \ forearms painfully; you flung up your hands just in time.^^"; print "You lie there for a moment, then push yourself up -- and crack your \ head on the ceiling. Ohh. You curl around more carefully.^^"; MoveToWorld(self.door_world); PlayerTo(self.door_to, 0); ! full look rtrue; ], has container; Object darkthudfar2 "distant thudding" class darksoundclass, with name "distant" "soft" "regular" "quiet" "thud" "thudding" "pulse", darkpos DarkTrafficRoom, door_dir nw_obj, before [; Listen: return indirect(darkthudfar.door_to, self); ]; Object darkrattlefar3 "distant hiss" class darksoundclass, with name "distant" "rattling" "rattle" "rustling" "rustle" "hiss", darkpos DarkTrafficRoom, door_dir sw_obj, before [; Listen: return indirect(darkrattlefar.door_to, self); ]; ! ------- Array darkbatpositions table [; DarkRumbleRoom DarkRattleRoom DarkEntry DarkBellsRoom DarkPlipRoom; DarkMurmurRoom DarkThudRoom; ]; Object darkbat "sound of beating wings" class darksoundclass, with name "flap" "flapping" "beat" "beating" "wings" "wing-beats" "thing", darkpos DarkRumbleRoom, before [; Listen: "Something moves overhead, on vast invisible wing-beats."; DarkLook: "^You can hear something moving overhead, slowly, with a sound of heavy \ beating wings."; ], life [; Tell, Ask, Answer, Order: "Whatever flaps above pays no attention to your voice."; Show: print_ret "You hold ", (the) noun, " up to the blind dark. There is \ no response from above."; default: "You can't even see it."; ], daemon [ newpos; newpos = self.darkpos; if (random(3) == 1) { newpos = random(darkbatpositions-->0); newpos = darkbatpositions-->newpos; } if (newpos ~= self.darkpos) { if (location == thedark && real_location == self.darkpos) { print "^A thing flaps slowly away into the silent dark.^"; remove self; } self.darkpos = newpos; if (location == thedark && real_location == self.darkpos) { print "^Something is approaching, high above you -- something with slow, \ heavy beating wings.^"; move self to thedark; } } ], has animate hiddengender ~static; Object darkchord "thrumming chord" class darksoundclass, with name "thrum" "thrumming" "singing" "pure" "chord", darkpos 0, before [; Listen: "The chord is sustained and inhuman. It vibrates mercilessly in your \ bones."; DarkLook: print "^A singing, thrumming chord hangs above you as well"; if (self hasnt general) { give self general; print ". There's something hurtfully pure about the sound"; } else { switch (self.number) { 7, 8: print ", unpleasantly loud"; 9, 10: print ", sending echoes of pain through your head"; 11: print "; the sound is impossibly, agonizingly loud" } } "."; ], react_before [; Sing: if (noun == voicebox && voicebox in player) { print "You essay a few notes, holding the box close to your mouth. The \ sound is immense: a resonant thrum, echoing you \ in harmonics that shift subtly with your voice.^"; print "^Above you, the chord ", (emphstring) "writhes", " in harmony \ with your note. A white pain flashes across your eyes, and then \ the chord is gone.^"; self.darkpos = 0; remove self; self.number = 0; rtrue; } if (voicebox in player) { print "You essay a few notes. The odd wooden box resonates slightly, producing \ a faint thrum that shifts with your voice.^"; print "^Above you, the chord twists painfully, responding somehow to \ the box's thrum. It seems weaker.^"; self.number = self.number - 3; if (self.number < 5) self.number = 5; rtrue; } "You essay a few notes. The chord above pays no attention to your voice."; Attack, KnockOn: if (noun == voicebox) { print "You tap the box in several places; the resulting notes \ glance oddly up and down the scale.^"; print "^Above you, the chord twists painfully, responding somehow to \ the box's sound. It seems slightly weaker.^"; self.number = self.number - 2; if (self.number < 6) self.number = 6; rtrue; } ], life [; Tell, Ask, Answer, Order: "The chord pays no attention to your voice."; Show: print_ret "You hold ", (the) noun, " up to the blind dark. There is \ no response from above."; default: "You can't even see it."; ], number 0, daemon [ ; if (self.number < 5) { self.number = self.number + 1; if (self.number == 5) { ! arrives at DarkWailRoom self.darkpos = DarkWailRoom; if (location == thedark && real_location == self.darkpos) { move self to thedark; print "^You become aware of something thrumming; \ a bare high tone that thrusts delicately behind your eyes. \ You shake your head, but it strengthens, becoming a vibrating \ chord somewhere overhead.^"; } } } else { if (location == thedark && real_location == self.darkpos) { self.number = self.number + 1; switch (self.number) { 0, 1, 2, 3, 4, 5: print "^The chord is doing its lipstick nearby. [BUG]^"; 6: ! nothing 7: print "^The chord is getting louder.^"; 8: ! nothing 9: print "^The thrumming chord is painfully loud.^"; 10: ! nothing 11: print "^The chord is throbbing agonizingly in your ears. \ Nothing seems to shut it out.^"; 12: deadflag = 1; print "^The thrum is like continuous lightning \ through your mind. You don't notice when your legs give way; \ and then the darkness seems to shatter into red needles.^"; } } } ], has animate hiddengender ~static; ! general means you've met it Object darkfloor "ground" with name "ground" "mud" "muddy" "packed", description "It's just mud, packed and smoothed by a million passing feet... \ or passing something. The surface is damp, but too hard to show your \ footprints as more than another irregularity.", react_before [; Examine: if (noun == d_obj) <>; Listen: if (noun == d_obj) <>; Touch: if (noun == d_obj) <>; Search: if (noun == d_obj) <>; ], before [; Examine: if (location == thedark) <>; Search: if (location == thedark) "You brush the floor about yourself, and find nothing. But your \ reach compasses so little of this boundless dark space."; <>; Touch: "You feel the hard, damp surface below you. It's not quite smooth."; Enter: "The ground is quite solid."; Receive: <>; LetGo: "How'd that get stuck in the mud? [BUG]"; Listen: "You kneel and press an ear to the ground. Silence. Or -- that might be the \ faintest echo of a dying tone, endlessly descending, running down -- \ and it's --^^You stand up and shake your head, until you convince yourself \ that you no longer hear it."; ], has scenery supporter; #ifnot; ! SKIP_DARK; Object DarkEntry "Dark Room" with description "Seventh room."; [ DarkEnter; ]; [ DarkExit; ]; [ DarkInitialDark; ]; #endif; ! SKIP_DARK;