! ########################################################################################################## ! Augmented Fourth Brian Uri!, brian@urizone.net ! Release 3 Inform 6.21 / 6/10 Libraries ! ! ### Copyright #### ! ! The Augmented Fourth story file (Aug4.z8) and source code (Aug4.inf, Misc.inf, Places.inf, Things.inf) ! are copyright ©2000 - 2013 by Brian Uri!. They may be freely distributed; however, they are NOT Public ! Domain. Consider this game commentware: if you would like to reimburse me, please send any and all ! constructive criticism or comments about the game to the above e-mail address. ! ! See Aug4.inf for a note from the author and the changes log. ! ! ### Places.inf File Contents ### ! ! Bank (B) ! BLock ! BPanels ! BPortrait ! BPlatform ! BSafe ! BTrap ! Bear's Den (BD) ! BDChimney ! BDPallet ! ButlerCottage (BC) ! BCBed ! BCBlockage ! BCClothes ! BCCurtains ! BCFireplace ! BCFurniture ! CastleLadder (CL) ! CLExit ! CLLadder ! CLSealedDoor ! CLShaft ! ConstructOffice (CO) ! COBanner ! COCalendar ! COCounter ! CODoorway ! ControlRoom (CR) ! DeadEnd (DE) ! DEDeadEnd ! DEIndent ! DEMud ! DETrapDoor ! DrawingRoom (DR) ! DRBook ! DRDivan ! DRDoor ! DRPlant ! DRStuff ! EastHouse (EH) ! EHDoor ! EHPath (found_in EastHouse FishPond) ! EHRubber ! EHSlingshot ! EHTree ! EHWindow (found_in EastHouse Foyer) ! Endgame (E) ! ECount0 ! ECount2 ! ECount4 ! ECount6 ! FallingPit (FP) ! FPBottom ! FPClothes ! FPLedge ! FPRoot ! FPRope ! FPScroll ! FinneyHouse (FH) ! FHDoor (found_in FinneyHouse Foyer) ! FHHouse (found_in EastHouse FinneyHouse FishPond) ! FHPlaque ! FishPond (FP) ! FPPlaque ! FPPond ! FPWalls (found_in FishPond Overlook) ! Foyer (F) ! FCeiling ! FLight ! FRug ! FTable ! FrontDoor (FD) ! FDDoor ! FDHouse ! FDPlaque ! FDWindows ! FrontYard (FY) ! FYArch ! FYBlueCottage ! FYBlueDoor (found_in FrontYard ButlerCottage) ! FYParts ! FYRedCottage ! FYRedDoor (found_in FrontYard DrawingRoom) ! FYWall ! InsideVault (IV) ! IVCeiling ! IVCurtain ! IVFloor ! IVWalls ! LeonineHouse (LH) ! LHHouse ! LHPath (found_in LeonineHouse RockWall) ! LHPlaque ! LHRubble (found_in LeonineHouse RockWall) ! LM1 - LM20 (LM) ! LMLetter (found_in All LetterMaze) ! LMLetters (found_in All LetterMaze) ! LMWall (found_in LM1 LM2 LM3 LM4 LM5 LM8 LM9 LM12 LM13 LM16 LM17 LM18 LM19 LM20) ! Library (L) ! LBox ! LBoxPamphlets ! LShelf ! LShelves ! LSkylight ! LibraryLane (LL) ! LLBuilding ! LLDoor (found_in Library LibraryLane) ! LLPath ! LLPine ! LLPlaque ! LLRocks (found_in LibraryLane LeonineHouse PavedRoad MazeEntrance VolcanoCenter EastHouse FinneyHouse FishPond) ! LLSkylight ! LowerHall (LH2) ! LH2Balcony ! LH2Staircase ! LH2Statue ! LH2StatueArm ! MagicLab (ML) ! MLDoor ! MLDoorway ! MLHead ! MLHeadString ! MLBalls ! MLDevices ! MLPyramid ! Maze (M) ! MMaze ! MazeEntrance (ME) ! MEBrambles ! MECave ! MESign ! MessHall (MH) ! MHTable ! MHFudge ! MirrorRoom (MR) ! MRSphere ! MRWalls ! MullogsLair (ML2) ! ML2Chute ! ML2Hole ! ML2Rocks ! MusicSalon (MS) ! MSDoorway ! MSPiano ! NarrowPass (NP ! NPHole ! NPMasonry ! NPMud ! NPPile ! NPWall ! NorthGate (NG) ! NGBuilding ! NGGate (found_in NorthGate PrivateAlley) ! NGHelmet ! NGHut ! NGPlaque ! NGSick ! NGSpear ! NGWall ! OfficeDark (OD) ! ODBackground ! ODRaccoons ! OldQuarry (OQ) ! OQCavern ! OQDeadEnd ! OQIncline (found_in ConstructOffice OldQuarry) ! OQPath (found_in DeadEnd OldQuarry) ! OQPillars ! OQTracks ! OperaHall (OH) ! OHBook ! OHCeiling ! OHSeats ! OHStage ! OHWall ! OHXylophone ! OHXyloMallets ! OutCourt (OC) ! OCArch ! OCBuilding ! OCPlaque ! OCWall ! Overlook (OL) ! OLBoulder ! OLClearing ! OLRecess ! OLRubble ! PavedRoad (PR) ! PRCamels ! PRRoad (found_in FinneyHouse PavedRoad) ! PitBottom (PB) ! PBBrokenCase ! PBCase ! PBHatch ! PBHole ! PBInvisible ! PBLight (found_in PitBottom NarrowPass StoneQuarry QuarryEntrance) ! PBMonsters ! PBPuddle ! PBSides (found_in FallingPit PitBottom) ! PBSun (found_in FallingPit PitBottom) ! PoontLab (PL) ! PLChairs ! PLContraptions ! PLHole ! PLPrototype ! PLRubbish ! PLViewer ! PrivateAlley (PA) ! PABank ! PABankPlaque ! PACleft ! PADoor ! PAHole ! PAHouse ! PAHousePlaque ! PATower ! PATowerPlaque ! QuarryEntrance (QE) ! QEChain ! QEChunk ! QEHand ! QEPlaque ! QEScale ! QETrapdoor ! RockWall (RW) ! RWClearing (found_in RockWall CastleLadder) ! RWCubbyhole ! RWDepression ! RWKeyhole ! RWSpire ! Slope (S) ! SCommunity ! SHole ! SPath (found_in Slope Overlook) ! SPurpleHouse (found_in Slope Overlook) ! SRidge (found_in Slope Overlook) ! SValley (found_in Slope Overlook) ! SVolcano (found_in Slope Overlook) ! StoneQuarry (SQ) ! SQChain ! SQDebris ! SQHole ! SQScale ! Study (S) ! SDesk ! SFoyer ! SFurniture ! SShelves ! SWindow ! SWindow2 ! TowerTop (TT) ! TTFloor ! TTMach ! TTStairs (found_in TowerTop MullogsLair) ! UpperBalcony (UB) ! UBBalcony ! UBCourt ! UBHangings ! UBTapestry ! UBTrumpets ! UpstairsCorridor (UC) ! UCBalcony ! UCFloor ! UCStaircase ! UCStatue ! VaultDoor (VD) ! VDDoor ! VDRemains ! VDRooms ! VDFrame ! Void (V) ! VolcanoCenter (VC) ! VCBirds ! VCBuilding ! VCCommunity ! VCClouds ! VCDrain ! VCMouth ! VCPark ! VCPath ! VCPlaque ! VCRain ! VCRoad ! VCSky ! Workshop (W) ! WShapes ! WDevice ! WDeviceBlackSlot ! WDeviceWhiteSlot ! ! ########################################################################################################## ! ################ ! ### Bank (B) ### ! ################ Room Bank "Fifth Bank of Nolava" with name "bank", description [; print "Were it not for the sign out front, you would have no idea as to the purpose of this building. Unlike most banks, there are no teller windows, no potted plants,"; " and not even the token lollipop jar. The far end of the room is dominated by a suspicious-looking sandstone platform. In the middle of the platform is a metal safe."; ], before [; Colour: if (BPortrait hasnt flag) "The man in the portrait disappears from view and then reappears a moment later. Nothing else seems to happen."; Heavy: if (child(BPlatform) == nothing) { print "The safe presses down noticeably against the sandstone platform, but nothing else happens."; " Perhaps the area of the platform directly underneath the safe is sturdier and less suspicious than the rest of it."; } if (BPlatform has flag) "There is a clicking sound in the walls, but evidently the trap was never supposed to be set off more than once."; give BPlatform flag; score = score + 2; print "As you play the melody, ", (the) child(BPlatform), " starts to shake on the platform."; print " The entire affair sinks a couple inches into the floor and an alarm bell sounds insistently."; print " Unseen panels lower from the ceiling and encase the platform completely while music begins playing inside."; print " You can barely hear a voice proclaim, ~Finney's Two Note Etudes for Bagpipes, First in a Series of Five Hundred Twenty-Two~."; print " Had you been on the platform when it sealed, you're sure the music would have been unbearable."; print " As it is, you only spend the next two hours in minor discomfort before the music stops."; print " The panels disappear and the room looks the way it did before. "; if (theDuck in location) print "The duck eyes you triumphantly. ~Quack!~"; "^^[You have gained two points for Triggering a Lethal Bagpipes Etude.] "; LookDown: "The sandstone part of the floor is distinctly different from the floor you are standing on."; Think: if (BPlatform hasnt flag) "You wonder how to reach the safe."; ], s_to PrivateAlley, cant_go "The only exit is the main entrance to the south."; RoomObj BLock "complicated lock" Bank with name "complicated" "lock", description "The lock looks too complicated to pick, even if you knew how to pick a lock.", before [; Attack: "The lock holds firm under your assault."; Lock: <>; Pick: "You don't know how to pick locks."; Unlock: <>; ]; RoomObj BPanels "panels" Bank with name "hidden" "panels" "unseen", description "You look closely at your surroundings but don't see any panels.", before [; <>; ]; RoomObj BPortrait "portrait" Bank with name "picture" "portrait" "ahtha" "man" "gaudy" "face" "inscription" "rock" "hammer" "fingers", initial "A gaudy portrait hangs on the wall.", description [; print "The portrait shows a muscle-bound man with unlikely slender fingers and rock hammer."; print " He looks to be a down-to-earth type of fellow, and smiles proudly."; print " The inscription below the portrait reads ~In memory of AHTHA, the Master Builder 9/07 who apparently died in a granite mishap~. "; if (self has flag) "A large slash has disfigured the man's face."; ""; ], before [; Attack, Cut: if (self hasnt flag) { give self flag; print "You vandalize the portrait in true schoolboy fashion. "; Vandal.add(); ""; } "The portrait is already defaced."; Lift, LookUnder, Pull: "You lift up the portrait but there are no hidden safes."; Push: "You press against the portrait but find no secret catches."; Take: "The portrait is a little too large to be carried around."; ], has ~scenery static ~flag; ! Whole / Vandalized RoomObj BPlatform "sandstone platform" Bank with name "sandstone" "platform", description [; print "The sandstone platform dominates much of the room and a metal safe sits in the center of it. You have a bad feeling about it. "; if (child(self) ~= nothing) { print "On the platform you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Climb, Enter: if (self hasnt flag) { deadflag = 1; print "As soon as your full weight is on the platform, the entire affair sinks a couple inches into the floor and an alarm bell sounds insistently."; print " Unseen panels lower from the ceiling and enclose you completely while music begins playing inside."; print " A voice shouts in your ear, ~Finney's Two Note Etudes for Bagpipes, First in a Series of Five Hundred Twenty-Two~."; " Mercifully, you have killed yourself in a fit of insanity before the first three hundred are complete."; } move player to BPlatform; "There is a soft clicking in the walls, but the trap does not spring again. Apparently, it was never designed to be needed more than once."; JumpOver: "You cannot jump that far."; Lift: "There are no suitable handholds on the platform."; LookUnder: "The platform is flush against the rest of the floor. You cannot see underneath it."; Push, Touch: "You give the platform a nudge with your finger but nothing happens."; Receive: move noun to self; "You put ", (the) noun, " on the platform, but nothing happens. It looks like the platform might shift with more weight applied to it."; Search: if (child(self) ~= nothing) { print "On the platform you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } "There is nothing on the platform except the safe."; ], has supporter ~flag; ! Trap Ready / Trap Sprung RoomObj BSafe "communal safe" Bank with name "metal" "safe" "box" "communal" "door", description "The safe is a two foot cube sitting in the center of the sandstone platform. A single keyhole adorns the door of the safe.", before [; Attack, Burn, Cut: if (player in BPlatform) { if (self hasnt open) "You spar with the safe but come no closer to opening it than you were before."; "Your attack on the safe has positive effects."; } "You cannot reach the safe from here."; Climb: if (player notin BPlatform) "You cannot reach the safe from here."; "There's no reason to do that with the safe."; Close: if (player notin BPlatform) "You cannot reach the safe from here."; if (self has open) { give self ~open; "You close the safe."; } "The safe is already closed."; Empty: if (player notin BPlatform) "You cannot reach the safe from here."; if (child(self) == nothing) "The safe is already empty."; move child(self) to player; "You empty out the safe."; Enter: if (player notin BPlatform) "You cannot reach the safe from here."; "You cannot fit in the safe."; Examine, Search: if (player notin BPlatform) "You cannot see much detail of the safe from here."; if (self hasnt open) "The safe is closed. The lock looks too complicated to pick, even if you knew how to pick a lock."; "In the safe, you see ", (name) child(self), "."; JumpOver: if (player notin BPlatform) "You cannot reach the safe from here."; "You jump over the safe."; Lift, Pull, Push, Turn: if (player notin BPlatform) "You cannot reach the safe from here."; "Your best efforts at relocating the safe nearly dislocate your shoulder."; Listen: if (player notin BPlatform) "You cannot reach the safe from here."; "You press your ear up against the safe but hear nothing. Perhaps it'd be more productive on a safe with tumblers."; Lock: if (player notin BPlatform) "You cannot reach the safe from here."; if (self hasnt flag) "The safe is already locked."; if (boxKey notin player) "You don't have the proper key to lock the safe."; if (self has open) { give self ~open; give self ~flag; "You close and lock the safe."; } give self ~flag; "You lock the safe."; LookUnder: if (player notin BPlatform) "You cannot reach the safe from here."; "There is nothing under the safe."; Open: if (player notin BPlatform) "You cannot reach the safe from here."; if (self has open) "The safe is already open."; if (self hasnt flag) "The safe is locked."; give self open; "You open the safe to reveal a ", (name) child(self), "."; Receive: if (player notin BPlatform) "You cannot reach the safe from here."; if (self hasnt open) "The safe is closed."; if (child(self) ~= nothing) "The safe is already full."; move noun to self; "You place ", (the) noun, " in the safe."; Take: if (player notin BPlatform) "You cannot reach the safe from here."; "The safe is too heavy to move."; Touch: if (player notin BPlatform) "You cannot reach the safe from here."; "The safe is cool to the touch."; Unlock: if (player notin BPlatform) "You cannot reach the safe from here."; if (self has flag) "The safe is already unlocked."; if (boxKey notin player) "You don't seem to have the proper key."; if (second == boxKey) { give self flag; "You unlock the safe with Leonine's key."; } "That doesn't seem to work."; ], has container ~open openable lockable ~flag; ! Locked / Unlocked RoomObj BTrap "trap" Bank with name "hidden" "trap" "unseen", description "There are no traps visible to the naked eye here.", before [; Examine: rfalse; default: <>; ]; ! ####################### ! ### Bear's Den (BD) ### ! ####################### Room BearsDen "Bear's Den" with name "bearsden", description "Poont's Lab ends flush with the side of the volcano to create a cave of sorts. A pallet of grass and small twigs sits in the corner.", s_to [; if (theBear in location) theBear.move(0); return (MirrorRoom); ], d_to [; if (BDChimney in location) { print "You squeeze into the chimney and begin your descent...^"; return (ButlerCottage); } "The only way out is to the south."; ], cant_go [; if (BDChimney in location) "The only exits are to the south or down the chimney."; "The only way out is to the south."; ]; RoomObj BDChimney "stone chimney" with name "chimney" "stone" "passage" "sooty", initial "A stone chimney descends into the ground here.", description "A sooty stone chimney descends into the ground here. It may have been the vent for a fireplace before the bear made its bed over top of it.", before [; Climb, ClimbDown, Enter: <>; Search: "You see nothing but soot and grime in the chimney."; ], has ~scenery static; RoomObj BDPallet "pallet" BearsDen with name "bed" "pallet" "twigs" "grass", description "The pallet is made from assorted twigs and grass, and looks quite comfortable. You wonder where the bear managed to find grass in a volcano.", before [; Dig, Lift, LookUnder, Pull, Push, Search: if (theBear in location) { if (theBear has asleep) "You don't want to get to close to the sleeping bear."; "The grizzly bear gives you a warning growl. It might be prudent to keep away."; } if (BDChimney in location) "Shuffling the pallet around reveals no more hidden entrances."; move BDChimney to location; if (BCBlockage in ButlerCottage) remove BCBlockage; "You move the pallet aside to find a stone chimney descending into the ground."; Enter: "You aren't feeling particularly drowsy. Plus, you might get fleas."; ]; ! ############################# ! ### Butler's Cottage (BC) ### ! ############################# Room ButlerCottage "Butler's Cottage" with name "butlercottage", description [; print "Bare furniture circles a cold stone hearth in this tiny cottage. The air is thick "; if (BCCurtains has open) print "and faint light shines in through the window."; else print "and all the curtains are closed in this gloomy tomb of a room."; " Over the fireplace, is a framed piece of sheet music with the title ~Springtime Love~."; ], before [; Colour: "The room still feels drab, although the colours look a little brighter."; Duck: if (theButler in location) { give theDuck ~asleep; move theDuck to location; "As you play the final cadence, a duck appears before you. The butler looks startled and then glares at the duck in disdain. ~How vulgar.~"; } Heavy: if (BCBlockage in location) { print "You play ~Heavy Heart~ with gusto. In the chimney, the blockage shifts subtly but remains tightly jammed in place."; if (theButler in location) " The butler, however, staggers slightly before regaining his balance."; ""; } Love: if (theButler in location) "The butler scowls. ~Any song but THAT one...~"; ], u_to [; if (BDChimney in BearsDen) return (BearsDen); "You peer up the chimney, but the shaft seems to be blocked."; ], e_to FrontYard, cant_go [; if (BDChimney in BearsDen) "You can leave the cottage to the east or go up the chimney."; "The only exit is to the east."; ]; RoomObj BCBed "bed" ButlerCottage with name "bed", description "The bed doesn't look very comfortable at all. On top of it is a leather-bound book.", before [; Enter: "You aren't tired. Besides, this isn't your bed."; Jump: "In a cottage this small, you'd no doubt hit your head on the ceiling."; Lift, LookUnder: "There is nothing under the bed."; ]; RoomObj BCBlockage "blockage" with name "blockage" "pulpy" "mass" "leaves" "twigs", description "A pulpy mass of wet leaves and twigs blocks the fireplace high up in the shaft. It is too high to remove from here.", before [; Knock: "You can't reach it from here."; Remove, Take: "You cannot reach the blockage from here."; ]; RoomObj BCClothes "butler's clothes" ButlerCottage with name "butler^s" "clothes" "tuxedo" "cummerbund" "bowtie" "tie" "outfit" "tux", article "the", description "The outfit looks very nice on the butler.", before [; Lift, LookUnder, Remove: "The butler frowns. ~Please do not strip me.~"; Take, Touch, Wear: "~Please stay off of my tuxedo. You would do well to find your own.~"; ], has pluralname; RoomObj BCCurtains "curtains" ButlerCottage with name "curtains" "curtain" "drapes" "shades" "window" "frayed", description [; if (self hasnt open) "There is nothing inherently special or pretty about the curtains. They just do a decent job of making the room dark. Right now, they are closed."; "The curtains are open right now. Through the window you see the front yard."; ], before [; Open: if (self has open) "The curtains are already open and the window does not seem to move."; Take: "You have no use for frayed curtains."; ], has ~open openable pluralname; RoomObj BCFireplace "stone hearth" ButlerCottage with name "fireplace" "chimney" "hearth" "shaft" "stone" "cold" "blackened" "ash" "sooty" "soot", description [; print "The sooty walls of the fireplace imply that the butler has made fires in the past, but the hearth has been swept free of ash. "; if (self has flag) "Evidently the blockage in the chimney prevents the smoke from escaping."; "Either the butler has run out of firewood or something is wrong with the chimney."; ], before [; Climb, Enter: <>; Examine, Search: if (BDChimney in BearsDen) "You peer up the chimney into the Bear's Den but see nothing untoward."; if (self hasnt flag) { give self flag; move BCBlockage to location; } "You peer up the chimney to find that the shaft is obstructed by a mass of wet leaves and twigs. The blockage is high enough up the chimney that you cannot clear it from here."; ], has ~flag; ! Player unaware of blockage / Player aware of blockage RoomObj BCFurniture "bare furniture" ButlerCottage with name "bare" "furniture" "furnishings", description "Only the bare essentials can be found in this cottage. Not much more than what you see will fit into this small space.", before [; Lift, LookUnder: "You peer under the furniture but don't find anything."; Pull, Push: if (theButler in location) "The butler clears his throat. ~Kindly leave my furniture where it is.~"; "It probably wouldn't be very nice to rearrange the butler's cottage without his approval."; ], has pluralname; ! ######################### ! ### CastleLadder (CL) ### ! ######################### Room CastleLadder "Castle Ladder" with name "castleladder", ladderCount 0, description [; switch (self.ladderCount) { 0: print "You are standing at the base of a long ladder which runs high up inside the rock spire. "; if (CLExit has open) "Outside the open door to the west, you can see a small clearing."; "A closed wooden door is in the south wall."; 1: print "You are about halfway up the ladder, and probably very near the ceiling of the volcano, if you were to look at your position from the outside."; " Set in the western wall is what looks to have been an exit at one time, but someone has taken great pains to seal it off completely."; 2: "Judging from the distance you've traveled, you are probably well outside of the volcano by now. However the ladder continues to rise above into the darkness."; } ], before [; Drop: if (self.ladderCount > 0) "This would probably not be a good place to drop anything."; move noun to RockWall; print_ret "", (The) noun, " rebounds off of the sloped rock floor and lands out in the clearing."; Duck: if (self.ladderCount > 0) { print "As you play the tune, a duck appears in midair beside you. With an exclamatory quack, it falls through the air,"; " regaining its balance before landing smoothly at the bottom of the shaft. It glances about, looking quite ruffled before flying out the door."; } Exit: <>; Listen: "You can faintly hear voices high above you."; LookDown: if (self.ladderCount > 0) "You peer back down the ladder."; LookUp: "The ladder extends for quite a distance above you."; Shout: "Your voice echoes up and down the shaft."; Sleep: if (self.ladderCount > 0) "This probably isn't the best place to sleep."; Think: "You wonder what you'll face when you reach the top of the ladder."; ], u_to [; if (self has firstTime) { print "You climb to the top of the ladder...^"; return UpperBalcony; } if (self.ladderCount == 2) { if (self hasnt firstTime) { print "After a tedious journey, made bearable only by the lack of scenery ladder positions in the shaft, you reach the top of the ladder,"; print " pulling aside a tapestry to find yourself in a place that seems quite familiar...^"; give self firstTime; } return UpperBalcony; } self.ladderCount++; if (self.ladderCount == 1) { if (self hasnt flag) { give self ~visited; give self flag; } if (theDuck in location) { remove theDuck; print "In a cloud of dust, the duck flaps through the door and disappears from view.^"; } remove CLExit; move CLSealedDoor to self; } if (self.ladderCount == 2) { if (self hasnt general) { give self ~visited; give self general; } remove CLSealedDoor; } return CastleLadder; ], d_to [; if (self.ladderCount == 0) "You are at the bottom of the ladder."; self.ladderCount--; if (self.ladderCount == 1) move CLSealedDoor to self; if (self.ladderCount == 0) { remove CLSealedDoor; move CLExit to self; } return CastleLadder; ], w_to [; if (self.ladderCount == 1) "The exit there is sealed off very thoroughly."; if (self.ladderCount == 0) { if (CLExit hasnt open) { give CLExit open; print "You push the door open and leave the shaft.^"; } return RockWall; } "The ladder is quite vertical; it only runs up and down."; ], out_to [; <>; ], cant_go [; print "The ladder is quite vertical; it only runs up and down."; if (self.ladderCount == 0) " There is also an exit to the west."; ""; ], has novisit ~flag ! Never visited spot #1 / Visited spot #1 ~general ! Never visited spot #2 / Visited spot #2 ~firstTime; ! Never visited UpperBalcony / Visited UpperBalcony RoomObj CLExit "wooden door" CastleLadder with name "exit" "door" "entrance" "wooden", description "The door is like many others that you've seen up in Papoosen, with the exception that it has no hinges. It seems to be lacking a doorknob on this side.", before [; Close: if (self has open) { give self ~open; "You shut the door as best as you can without a knob to pull on."; } "The door is already closed."; Attack: "From the looks of it, this door is no strange to dents and scratches, but it seems to have held up pretty well."; Enter: <>; Knock: "You knock, but no one answers."; Listen: "You put your ear to the door, but surprisingly, you hear nothing on the other side."; Lock: "There is no keyhole on the door."; LookUnder: "There's nothing underneath the door."; Open: if (self hasnt open) { give self open; "You push on the door, which swings open under your touch."; } "The door is already open."; Pull, Push, PushDir: "Moving the door around won't help."; Remove: "The door seems to have become a permanent part of the marble face."; Search: "You scan the surface of the door, but find nothing untoward."; Smell: "The door smells like oak."; Take: "The door seems to have become a permanent part of the marble face."; Taste: "Because of its rough, and possibly splintery appearance, you refrain from licking the door."; Touch: "The surface of the door is rough and unfinished."; Unlock: "There is no keyhole on the door."; ], has open; RoomObj CLLadder "ladder" CastleLadder class GraniteObj, with name "ladder", description "The ladder seems very sturdy and runs up the entire length of the shaft. It looks like it's made of granite, just like most everything else down here.", before [; Climb: <>; ClimbDown: <>; ]; RoomObj CLSealedDoor "sealed door" class GraniteObj, with name "seal" "sealed" "door" "granite" "mortar" "exit" "wall", description "The door might have led somewhere in the past, but it has been completely covered with some sort of odd granite mortar.", before [; Attack: "You doubt that you can get through the mortar; it looks like solid stuff."; Enter: "The door is sealed off."; Knock: "You pound on the sealed door, but no one seems to answer from the other side."; Open: "You pry at the mortar but find no cracks."; Search: "You don't find any weaknesses in the granite mortar."; ]; RoomObj CLShaft "spire shaft" CastleLadder class GraniteObj, with name "shaft" "spire" "tunnel" "column", description "The shaft is only about three feet across, but it runs the entire height of the spire.", before [; Climb: <>; ClimbDown: <>; ]; ! ############################# ! ### Construct Office (CO) ### ! ############################# Room ConstructOffice "Construction Office" with name "constructoffice", description [; print "This room consists of little more than a large stone counter before a doorway to the east. Behind the counter hangs an aged banner proclaiming,"; " ~Nolava Odd Community Construction Office~. Beneath the banner someone has affixed a small day calendar. To the west, a dusty incline leads up into the quarry."; ], before [; if (Leonine in location && Leonine hasnt general && Leonine.introCount == 0) give codeBook ~scenery; LookUp: "The ceiling of this room has been smoothed out and polished."; LookDown: "The floor shows signs of frequent wear."; Smell: "The air smells musty, as if this room had been sealed up for some time."; Listen: "Outside, you can hear the faint sigh of the wind."; ], u_to [; if (Leonine in location && Leonine hasnt general) "Leonine tugs on your hand. ~Don't go yet, neighbour! We just met.~"; return (OldQuarry); ], out_to [; if (Leonine in location && Leonine hasnt general) "Leonine tugs on your hand. ~Don't go yet, neighbour! We just met.~"; return (VolcanoCenter); ], e_to [; if (Leonine in location && Leonine hasnt general) "Leonine tugs on your hand. ~Don't go yet, neighbour! We just met.~"; return (VolcanoCenter); ], w_to [; if (Leonine in location && Leonine hasnt general) "Leonine tugs on your hand. ~Don't go yet, neighbour! We just met.~"; return (OldQuarry); ], cant_go "A doorway exits the office to the east and a rocky incline climbs into the quarry to the west."; RoomObj COBanner "banner" ConstructOffice with name "sign" "banner" "placard" "hanging", description "The worn and faded banner states that this is the Construction Office. It looks to have been up for some time now.", before [; Blow: "The banner wavers a little."; LookUnder: "There is nothing under the banner."; Take: "You don't need to bring the banner along."; ]; RoomObj COCalendar "calendar" ConstructOffice with name "calendar" "day" "timetable", description "The day calendar was last used on 9-U-07. It's been nearly three years since then.", before [; Consult, Read, Turn: "You thumb through the calendar but find nothing else of interest about it."; Take: "You're quite aware of the date without needing a calendar."; Taste: "Papery."; Touch: "The first page of the calendar is dusty and faded."; ]; RoomObj COCounter "counter" ConstructOffice class GraniteObj, with name "counter" "desk" "top", description [; print "It is a plain granite desk in the center of the room. In all likelihood, it was created when the room was first hollowed out."; if (child(self) ~= nothing) { print " On the counter you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Attack: "Attacking the counter would just make you sore."; Climb, Enter: "There's no reason to climb onto the counter."; JumpOver: "You athletically vault over the top of the counter. Jurgen Yoosa would be proud."; LookUnder, Pull, Push, PushDir: "The counter is carved out of the floor."; Search: <>; ], has supporter transparent; RoomObj CODoorway "doorway" ConstructOffice with name "door" "way" "entrance" "exit" "doorway", description "Up until recently, this doorway was sealed off. Now, light shines in from outside, illuminating the room.", before [; Enter, Exit: <>; Knock: "There is no door there."; ]; ! ######################## ! ### Control Room (CR) ## ! ######################## Room ControlRoom "Control Room" with name "controlroom", visits 0, lastRoom, description [i j obj done; i = 0; done = 0; if (self.visits == 0) { print "Red and blue lights flash from long metal panels of all shapes and sizes. As your eyes become accustomed to this distraction,"; print " you see hundreds of little gnomelike men rushing in every direction, carrying all manner of objects."; print " One particular gnome brushes by with a package labeled ~Papoosen Propworks: "; } else print "A gnome brushes by carrying a package labeled ~Papoosen Props: "; objectloop(obj has scenery) i++; j = random(i); i = 0; objectloop(obj has scenery) { if (i == j) { print (name) obj, "~.^"; done = 1; break; } i++; } if (done == 0) print "Misc. Scenery~.^"; Lenny.description(self.visits); Lenny.visitQuip(self.visits); self.visits++; print "^He snaps his fingers briskly. A moment of disorientation finds you back where you were before"; if (ControlRoom.lastRoom == FallingPit) print " and, unfortunately, still falling"; print ". You can't help but wonder if it was all just a dream, brought on by the stress of the week's events...^"; style bold; print "^", (name) self.lastRoom, "^"; style roman; PlayerTo(ControlRoom.lastRoom, 1); ]; ! ##################### ! ### Dead End (DE) ### ! ##################### QuarryRoom DeadEnd "Dead End" with name "deadend", description [; print "The northeastern quarry path ends abruptly in a fairly sizeable dead end. In the ceiling above you sits a square stone trapdoor."; " A worn indentation in the ground below the trapdoor suggests that something used to be lowered through the trapdoor in the past."; ], before [; Heavy: if (DEMud in self) "The mud seems to ooze a bit thicker momentarily."; LookUp: "You see the trapdoor."; ], ne_to OldQuarry, u_to "You'll need to open the trapdoor before you can climb through it.", cant_go "Besides the trapdoor, the only way out of this dead end is to the northeast.", has ~flag; RoomObj DEDeadEnd "dead end" DeadEnd class GraniteObj, with name "room" "dead" "end" "alcove", description [; <>; ]; RoomObj DEIndent "indentation" DeadEnd class GraniteObj, with name "worn" "indentation" "depression", description "The indentation is about seven feet square and sits directly below the trapdoor.", before [; Fill: "You sweep a little dust into the indentation."; ]; RoomObj DEMud "oozing mud" class MudObj, with name "mud" "oozing" "rivulets" "dirt", initial [; if (self hasnt firstTime) { give self firstTime; "Apparently the upper quarry is flooded, as mud is currently seeping through the cracks around the edges of the trapdoor."; } "Mud continues to drip through the cracks around the trapdoor."; ], description "Thin trails of mud ooze around the edges of the trapdoor in the ceiling.", before [; Insert: if (second == cup) { remove cup; move cupMud to player; if (cupMud hasnt firstTime) { give cupMud firstTime; if (MHFudge in MHTable) move MHFudge to MessHall; ! Trigger's fudge scene } "You fill the cup with mud."; } ], has ~scenery ~firstTime; ! Never taken / taken RoomObj DETrapDoor "trapdoor" DeadEnd with name "trapdoor" "ceiling" "panel" "door" "trap", description [; print "The square trapdoor is about eight feet wide and rests in the ceiling above you."; if (DEMud in DeadEnd) " Mud oozes around the edges of it."; ""; ], before [; Attack: "You are not in an advantageous position to mount your attack upon the trapdoor."; Climb, Enter: "The trapdoor is closed."; Lift, Open, Push: "The trapdoor is almost two feet above your head. You cannot get enough leverage to open it from here."; LookUnder: "You are there."; Pull: "There doesn't seem to be any handhold on this side of the trapdoor."; StandUnder: "You stand underneath the trapdoor. Nothing seems to happen."; Touch: "You can just barely brush your fingers along the underside of the trapdoor."; ]; ! ######################### ! ### Drawing Room (DR) ### ! ######################### Room DrawingRoom "Drawing Room" with name "drawingroom", description [; print "This room has the silence usually associated with an antique shop or grandmother's den. "; if (DRPlant has flag) print "In the corner, a potted fern has tipped over, spilling dirt across the floor."; else print "Nestled in a wide array of useless knick-knacks, a lone potted fern droops forlornly in the corner."; " The entrance to the cottage is west and there is a closed door to the east."; ], before [; Duck: if (theWidow in location) { print "As you play the final cadence, a duck appears before you.^^The widow fans her book at the duck. ~Shoo shoo! Filthy bird, get out of my house!~^^"; "The duck, feeling hurt and unwelcome, flies out the door and is gone."; } Listen: "The room is still."; Love: if (theButler in location && theWidow has flag) { ! Widow is aware remove theButler; remove BCClothes; remove theWidow; remove DRBook; give theButler general; give DRDivan ~scenery; give DRDivan static; StopDaemon(theButler); StopDaemon(theWidow); score = score + 2; print "As you finish the melody, the widow and the butler can't help but to look at each other. Their eyes meet and the proverbial bell of love strikes midnight.^^"; print "~Lovemuffin!~^^~Sugarcakes!~^^The two rise from their spots and embrace.^^~I've loved you for a long time...ever since I cleaned your first teapot!~^^"; print "~And I you...though I'd forgotten about it until this nice musician brought back old memories...~^^~Oh darling, will you marry me?~^^"; print "~Of course, sweetums. Could you ever doubt it?~^^~My heart is so happy! You are the apple of my eye...the cream of my corn!~^^"; print "The soap opera continues as butler Amoshtuff opens the eastern door and carries the new Mrs. Amoshtuff over the threshold."; print " As the door closes, you smile, happy to have done your good deed for the day.^^[You have earned two points for Cupid Substitution.] "; Improvement.playScene(); ""; } if (theButler in location && theWidow hasnt flag) { ! Widow is dumb print "A pleasing suspension of major sevenths outlines this lovely melody and the butler "; if (theButler.timer ~= 4) print "looks up from his spot on the floor and "; "casts longing eyes at the widow. She seems not to notice, however, and continues to read."; } if (theButler notin location && theWidow in location) "The widow gives you a grudging smile. ~Pretty music.~"; Shout: if (theWidow in location) "~Keep your voice down, you!~ The widow peers at you over the top of her book."; Smell: "The air is thick and smells of perfume."; ], w_to [; theWidow.timer = 5; return (FrontYard); ], e_to [; if (theWidow in location && theWidow hasnt general) "The widow clucks her tongue at you. ~Young traveler, please stay out of my private quarters.~"; if (theWidow in location && theWidow has general) "You jiggle the knob, but the door is reluctant to open. You probably won't be able to open it without calling the widow's attention."; "It's probably better if you let them have their privacy."; ], cant_go "The exit is west and a closed door is to the east."; RoomObj DRBook "novel" DrawingRoom with name "novel" "book" "page", description "The book is titled ~My Cat Doth Went a Walking~. Widow Fou-llama seems to be enjoying it.", before [; Consult, Read: "It's rude to read over someone's shoulder."; Take: "The widow clutches her book tightly. ~I'm not done reading yet!~"; ]; RoomObj DRDivan "divan" DrawingRoom with name "divan" "sofa" "chair" "comfy", initial "A divan sits in the middle of the room.", description [; if (theWidow in location) "The widow is sitting on a comfy divan in middle of the room."; else "A comfy divan sits in the middle of the room."; ], before [; Enter: if (theWidow in location) "Someone is already sitting in it."; "You sit down for a few minutes, but soon become bored."; Lift, LookUnder: "There is nothing underneath the divan."; Pull, Push: "The divan is fine where it is."; Search: "There is nothing unusual about the divan."; ]; RoomObj DRDoor "bedroom door" DrawingRoom with name "door" "bedroom" "private" "quarters" "knob", description "It's just a plain door, probably leading to the bedroom.", before [; Enter, Open: <>; Knock: if (theWidow notin location) "It's probably better if you let them have their privacy."; Push: "You jiggle the knob to find that the door is not locked."; ]; RoomObj DRPlant "potted fern" DrawingRoom with name "potted" "dirt" "fern" "plant" "soil" "pot" "topsoil", count 0, description [; if (self has flag) "The potted fern has tipped over and spilled dirt across the floor."; else "The potted fern looks unhappy in the corner, probably wishing for sunnier days and the great outdoors. The pot is filled to the brim with soil."; ], before [; Attack, Burn, Cut: "The fern looks unhappy enough without the added insult of attack."; Climb: "The fern isn't very tall."; Eat: "You almost take a nibble on the fern but stop, realizing how unappetizing it probably is."; Empty, Pull, Push: if (theWidow notin location) "You've had enough delinquent fern fun for one day."; if (self has flag) "The fern has already been tipped over."; if (theWidow hasnt general) ! Widow is not distracted "The widow clucks her tongue. ~Don't you dare do that!~ Apparently she's watching you too closely at the moment."; give self flag; self.count++; print "In one quiet movement, you tip over the potted fern. Topsoil spills across the floor. "; if (self hasnt firstTime) { give self firstTime; Vandal.add(); rtrue; } ""; Insert: if (second == cup) "There's no need to carry around a cup full of dirt."; Irrigate: if (cupWater in player) <>; else "You don't have anything to water the fern with."; Lift, LookUnder: "There's nothing under the plant."; Search: "You search the pot but find nothing untoward."; Smell: "The rich smell of topsoil reaches your nose."; Take: "You see no good reason to carry around a potted fern at the moment."; Talk: if (theWidow in location && theWidow hasnt general) "The widow looks up at you in disbelief. ~Talking to plants are we? You look a bit young to be senile, traveler.~"; "You talk to the fern, but it doesn't respond."; ], orders [; default: if (theWidow in location && theWidow hasnt general) "The widow looks up at you in disbelief. ~Talking to plants are we? You look a bit young to be senile, traveler.~"; "You talk to the fern, but it doesn't respond."; ], has ~flag ! Upright / Tipped Over talkable; RoomObj DRStuff "useless knick-knacks" DrawingRoom with name "useless" "stuff" "knick" "array" "knack" "knick-knacks" "knick-knack", description "All manner of knickknacks can be found here, but they really aren't very interesting.", has pluralname; ! ########################## ! ### East of House (EH) ### ! ########################## Room EastHouse "East of House" with name "easthouse", description [; print "You are facing the east side of a "; FHHouse.showColour(); " house. There is no door here, and the sole window is not boarded up, although it is on the second floor. A path runs alongside the house to the north and south."; ], before [; Colour: FHHouse.changeColour(); rtrue; Listen: "You hear the sound of silence."; Think: "You wonder if the window on the second floor has a purpose."; ], n_to FinneyHouse, s_to FishPond, e_to "Walls of rock bar your way in that direction.", ne_to "Walls of rock bar your way in that direction.", se_to "Walls of rock bar your way in that direction.", sw_to "There seems to be a house in the way.", nw_to "There seems to be a house in the way.", w_to "There seems to be a house in the way."; RoomObj EHDoor "no door" EastHouse with name "no" "door" "boarded" "up", description "There is no door here! It is not boarded up either.", before [; Examine: rfalse; default: <>; ], has proper; RoomObj EHPath "path" with name "path" "trail" "road" "paths", description "The trails near the house are not officially marked; the ground underneath just seems lighter from wear.", before [; Knock: "You rap on the ground, but no one replies. There don't seem to be any moles in residence either."; ], found_in EastHouse FishPond; RoomObj EHRubber "rubber band" with name "rubber" "band" "stretchy" "length", description [; print "The length of rubber is nearly two feet long, unstretched. It is tied tautly onto the Y-shaped tree."; if (child(EHSlingshot) ~= nothing) { print " In the rubber band, you see "; WriteListFrom(child(EHSlingshot), ENGLISH_BIT); "."; } ], before [; Cut: "Cutting the rubber band would seriously decrease its puzzle-solving value."; Pull: <>; Push: "You wiggle the rubber band."; Receive: <>; Search: if (child(EHSlingshot) ~= nothing) { print "In the rubber band, you see "; WriteListFrom(child(EHSlingshot), ENGLISH_BIT); "."; } "You don't see anything in the rubber band."; Stretch: "The rubber band is already about as stretched as it will get without breaking it."; Take: "You pick at the knots, but it seems that you've tied the rubber band too tightly to remove."; Tie: "The rubber band is already tied onto something."; ]; RoomObj EHSlingshot "makeshift slingshot" with name "slingshot" "sling" "catapult" "tree" "shaped" "y//" "makeshift" "stunted", initial [; print "A makeshift slingshot has been created from the stunted tree and a rubber piece. "; self.showIn(); rtrue; ], description [; print "The makeshift slingshot stands about twenty feet from the house. "; self.showIn(); rtrue; ], before [obj; Attack: "The tree looks bad enough as it is. It's probably best to leave it alone."; Cut: if (second == herring) "The herring doesn't make a scratch in the stunted tree. You wonder what possessed you to try such a thing."; <>; Climb, Jump: "The tree creaks alarmingly under your weight and you quickly shimmy back down."; Empty: if (child(self) ~= nothing) { move child(self) to player; "You empty out the contents of the slingshot."; } "The slingshot is empty."; Fill: "You'll have to specify what you wish to fill the slingshot with."; Fire, Pull: if (child(self) == nothing) "You pull back on the rubber band and let go, but nothing happens. Maybe you should put something in the slingshot first."; obj = child(self); switch (obj) { blackPiece: move blackPiece to Foyer; score = score + 1; print "The black puzzle piece arcs high into the air and flies through the open window on the second floor.^^[You have just earned one point for Airborne Commuting.] "; if (Leonine in location) "^^Leonine claps his hands. ~Clever!~"; ""; cupWater, cupMud: remove obj; move cup to location; "The metal cup arcs briefly through the air, its contents spilling out in transit, and lands at the foot of the house. It must be too heavy to get much distance."; lostRing: move lostRing to location; "The gold ring shoots into the air towards the window, but hits the sill moments before entry. It tumbles to the ground."; default: move child(self) to location; "", (The) obj, " arcs briefly through the air and lands at the foot of the house. It must be too heavy to get much distance."; } Receive: if (child(self) ~= nothing) "The slingshot can't hold anything else right now."; if (noun ofclass MusicObj) { move noun to location; "The music blows out of the rubber band."; } switch (noun) { note, mazeMarker, pamphlet: move noun to location; "The paper blows out of the rubber band."; endDoor: "That is much too big to fit in the slingshot."; trumpet: "The trumpet won't stay in the rubber band."; default: move noun to self; "You place ", (the) noun, " in the slingshot."; } LookUnder: "There is nothing interesting at the base of the tree."; Push: "The tree sways back and forth."; Search: self.showIn(); rtrue; Smell: "It smells like a tree."; Take: "The slingshot is too big to carry with you. Besides, it's growing out of the ground."; Taste: "Licking the bark leaves a minty tang on your tongue."; ], showIn [; if (child(self) ~= nothing) "In the slingshot, you see ", (a) child(self), "."; "The slingshot is currently empty."; ], has ~scenery container ~openable open transparent static; RoomObj EHTree "Y-shaped tree" EastHouse with name "y" "shaped" "tree", waterCount 0, initial "A Y-shaped tree stands about twenty feet from the house, stunted and twisted from lack of nutrients.", description "The tree stands almost five feet tall and looks decidedly unhealthy.", before [; Attack, Cut: "The tree looks bad enough as it is. It's probably best to leave it alone."; Climb, Jump: "The tree creaks alarmingly under your weight and you quickly shimmy back down."; Irrigate: if (cupWater in player) <>; "You have no water."; LookUnder: "There is nothing interesting at the base of the tree."; Pull, Push: "The tree sways back and forth."; Search: "You examine the tree closely but find nothing unusual about it."; Smell: "It smells like a tree."; Taste: "Licking the bark leaves a minty tang on your tongue."; ], has ~scenery static; RoomObj EHWindow "window" with name "window" "opening" "second" "story" "wall", description [; if (self in EastHouse) "The window is high up on the second floor of the house. Someone seems to have left it open."; "The open window is very high up on the wall, close to the ceiling."; ], before [; Climb, Enter, Jump: "There is no way to get up to the window from here."; Close, Pull, Push, Take, Touch: "You can't reach the window from down here."; Lower: "You will the window to move farther down the wall, but it doesn't seem to be listening."; Open: "The window is already open."; Search: "You can't make out much about the window from down here."; StandUnder: if (self in EastHouse) "You stand on the ground below the window."; "You stand on the floor below the window."; Receive, ThrownAt: move noun to location; print "You try to throw ", (the) noun, " at the window, but lacking enough force, ", (the) noun, " misses and returns to the "; if (self in EastHouse) "ground."; "floor."; ], found_in EastHouse Foyer; ! ################### ! ### Endgame (E) ### ! ################### Room Endgame "Throne Room" with name "endgame", count 0, description [; switch (self.count) { 0: StartDaemon(self); print "^Chaos erupts in the throne room as you slide down the banner, landing at the foot of the dais."; print "Onlookers press against the walls and the King stops his argument with the Royal Advisor, dumbfounded. Recognition registers soon after.^^"; print "~You're the foul trumpet player I had thrown into the Pit! How dare you have the audacity to escape!~ The King waves his sceptre in your general direction."; " ~I sentence you to death...Guards! Seize the musician!~^^Two guards step forward to carry out the King's wishes, their cumbersome halberds glinting in the dusk."; } ], daemon [i; switch (self.count) { 1: deadflag = 1; "In the blink of an eye, the guards are upon you, swinging their deadly halberds to the detriment of your health."; 2: remove ECount0; move ECount2 to location; give trumpet general; print "^~Preposterous!~ King Goosen sputters, flabbergasted. ~Send in my Piddle Ball championship team!~^^"; print "Like a mechanical dance company, the twenty Piddle Ball champions of Papoosen file into the room, quickly forming a circle around your position."; print " The looks in their eyes show that they're about to tackle you like the final wicket.^"; 3: deadflag = 1; print "The Piddle Ball champions close in, and every last man and woman on the team dogpiles you where you stand."; " The last thing you hear as you are knocked unconscious is the King's nasal voice. ~Feed the musician to my ill-tempered ferrets!~"; 4: remove ECount2; move ECount4 to location; print "^The King fumes, his anger palpable. ~You think you can just waltz in here and bewitch my people? Send in the Elite Snipers of Papoosen!~"; print " Creeping shadows flit through the room, visible only out of the corners of your eyes."; print " You don't see any new threat, but if the stories are true, then the Elite Snipers of Papoosen are masters of camouflage, and almost invisible in the crowd of onlookers.^"; 5: deadflag = 1; print "The clack of a crossbow calls your attention as a hidden sniper fires. You drop to the floor, but you can't tell from which direction the bolt came."; " More crossbows fire, and your luck at dodging soon comes to an end."; 6: remove ECount4; move ECount6 to location; print "^~Enough!~ The King pounds his sceptre on the dais, much to the dismay of the Royal Advisor, whose foot was in the way. Ignoring the man's cries, King Goosen stands."; print " ~You have made a mockery of my court and soiled my tapestries with your magic rain! By my royal declaration I will kill you myself!~"; print " The King marches across the dais, his bald pate reflecting the setting sun up above.^"; 7: deadflag = 1; print "^For a ruler of impotence, King Goosen has quite the backhand. That's the last thought to cross your mind before you are knocked unconscious by the swing of his sceptre."; 8: deadflag = 2; score = score + 10; print "[Hit any key.]"; @read_char 1 i; @erase_window -1; print "^^Leonine swings down the wall hanging like a boy from a treehouse and runs up to the fallen King. ~Clamouring cheetahs, he's down for the count!~"; print " The magician shakes your hand and winks. ~Shows you what a little practice can do, eh?~ When he sees your clueless look, he points at your trumpet.^^"; print "The horn looks like it always has, its clean lines and shining silver a foreshadower of the music within. However, the bell is no longer glowing with magic."; print " Shocked, you look to Leonine for explanation. He slaps his thigh and qualifies."; print "^^~Heck, I turned off that magic ages ago, silly neighbour! Everything you just did was the result of hard work and practice!"; print " Leapin' lemurs, who says that music isn't a little magical?~ The crowd cheers madly and an older gentleman steps through the press.^^"; print "~Great giraffes, it's Finney!~ Leonine dives through the crowd and gives his old friend a big bear hug."; print " A little embarassed by the sudden attention, the man pats Leonine on the back and turns his attentions to you.^^"; print "~As this old coot has said, I am Finney...formerly Finney of Nolava, but now Finney the Augmented!"; print " I am third in a succession of musicians chosen to lead the Royal Conservatory of Papoosen.~ He points at the comatose King."; print " ~The talent I just saw today proves beyond a doubt that you're a fit candidate to be the fourth Augmented soul!"; print " I would be honoured if you would take my place and lead our musicians to a bright future. After all, King Goosen never did get the chance to melt down our trumpets!~"; print " He points to the corner where the crates sit."; print "^^Still shocked by your sudden turn of good luck, you can only stand in place, hoping a sudden gust of wind doesn't knock you over. Leonine elbows you in the ribs."; print " ~Say yes, neighbour! Finney and I need to catch up on old times, and he can't get away if he's got a position and a title and all that hodge-podge."; print " But first, I think you'd better do something about Old Pudgy over there on the carpet.~ Looking at the inert body on the floor, a mischievous thought crosses your mind."; print " You look up at Leonine and see that he's thinking the same thing. ~Go for it, neighbour!~"; print "^^One more time, you raise the trumpet to your lips and play. This special song, you dedicate to King Goosen and his many 'dedicated' years of service to Papoosen."; print " Nothing happens at first, and you start to wonder if Leonine was pulling your leg."; print "^^Then a duck flies through the skylight...^^...followed by a second, and a third.^^Like a cacophonous mobile dinner party, a massive rain of ducks pours through the skylight."; print " You count forty or fifty before you lose yourself in the sheer magnitude of the flock. The ducks settle around King Goosen and move him with their bills."; print " Forming a living canvas underneath the King, the flock takes flight. Like a bug in a rug,"; print " the King is helplessly carried through the skylight by the ducks before disappearing over the horizon forever.^^"; print "Perhaps ~Ode to a Duck~ was a good repertoire choice after all.^"; } self.count++; rtrue; ], before [x; Listen, LookDown, LookUp, Shout, Sleep, Smell, Think: rtrue; Play: print "^"; if (trumpet has general) { x = trumpet.endPlayNew(); switch (x) { 1: self.heavyDuck(); 2: self.colourRain(); 3: self.heavyLove(); 4: self.modulateJig(); } rtrue; } if (trumpet hasnt general) { x = trumpet.endPlay(); switch (x) { 1: deadflag = 1; "^As soon as you play the final cadence, a duck appears in front of you. Despite its appearance, the guards are upon you, swinging their deadly halberds to the detriment of your health."; 2: deadflag = 1; "^The melody echoes through the air and the clouds outside look a little darker. Regardless of the imminent rain, the guards are upon you, swinging their deadly halberds to the detriment of your health."; 3: self.count++; print "^The notes take on a mystic quality and the guards' halberds suddenly drop to the ground -- dead weight. The guards look at you in disbelief and back away slowly.^^"; print "It dawns on you that the melody was more receptive to your playing that it ever has been. The music feels alive inside of you, flowing through your arms and trumpet."; " With this mastery of skill comes the realization that you are no longer confined by the bounds of paper music! "; 4: deadflag = 1; "^You play a lively toe-tapping gigue, which puts you in a brighter mood. The guards dance as well. They continue to dance as they cleave you in two."; 5: deadflag = 1; "^A pleasing suspension of major sevenths outlines this lovely melody. It's a shame that the guards never had any love for you to begin with. They swing their deadly halberds to the detriment of your health."; 6: deadflag = 1; "^You play a melody brimming with runs and arpeggios. The world around you seems a little brighter but it doesn't stop the guards from killing you."; 7: deadflag = 1; "^The marcato accents of the song jar your thoughts but nothing seems to happen. The guards continue to advance towards you, swinging their deadly halberds to the detriment of your health."; 8: deadflag = 1; "^You play the tune better than you ever have before. Regardless of this artistry, the guards continue to advance towards you, swinging their deadly halberds to the detriment of your health."; 9: rtrue; } } ], heavyDuck [; switch (self.count) { 3: deadflag = 1; print "Testing the limits of your skill, you play your medley in a plodding, but comical manner. The notes echo across the dais as a single duck falls through the skylight."; print " Unlike the white ducks you're accustomed to, this one must weigh nearly fifty pounds! It strikes the dais and bounces twice before coming to a rest."; print " The duck looks frazzled, but otherwise uninjured. ~Quack!~^^The court gasps and then giggles at the appearance of the duck, and the Piddle Ball champions close in,"; " dogpiling you where you stand. The last thing you hear as you are knocked unconscious is the King's nasal voice. ~Feed the musician to my ill-tempered ferrets!~"; 5: deadflag = 1; print "You take a deep breath, hoping for a miracle, and play your medley in a plodding, but comical manner. The notes echo across the dais as a single duck falls through the skylight."; print " Unlike the white ducks you're accustomed to, this one must weigh nearly fifty pounds! It strikes the dais and bounces twice before coming to a rest. The duck looks frazzled,"; print " but otherwise uninjured. ~Quack!~^^The clack of a crossbow diverts your attention from the duck as a hidden sniper fires."; " You drop to the floor, but you can't tell from which direction the bolt came. More crossbows fire, and your luck at dodging soon comes to an end."; 7: self.count++; print "Aiming straight for the king, you play your medley in a plodding, but comical manner. The notes echo across the dais as a single duck falls through the skylight."; print " Unlike the white ducks you're accustomed to, this one must weigh nearly fifty pounds! The retainers gasp and give warning, but the furious King is bent on your destruction."; print " All eyes except for his watch the course of the fat duck, continuing on its inevitable course.^^"; print "~Aieghh!~ The duck lands on the King's head with mind-shattering ramifications. The duck survives, frazzled, but otherwise uninjured."; print " The same can't be said for the King, who is sprawled on the carpet, out cold. The crowd edges closer to the fallen King, and one woman nudges him with her slipper."; print " When it becomes apparent that the King won't wake up for quite some time, the court erupts in cheering and applause."; " The Royal Advisor is furiously patting you on the back when someone whoops with joy from the Upper Balcony.^"; } ], colourRain [; switch (self.count) { 3: deadflag = 1; print "Testing the limits of your skill, you play your medley in a shower of major and minor thirds. The notes echo across the dais and rain falls through the skylight."; print " In this case, the individual raindrops are a myriad of colours, crossing the spectrum of a rainbow. ^^"; print "The onlookers applaud in awe at the light show and then gasp as the Piddle Ball champions close in, dogpiling you where you stand."; " The last thing you hear as you are knocked unconscious is the King's nasal voice. ~Feed the musician to my ill-tempered ferrets!~"; 5: self.count++; print "You take a deep breath, hoping for a miracle, and play your medley in a shower of major and minor thirds."; print " The notes echo across the dais and rain falls through the skylight. In this case, the individual raindrops are a myriad of colours, crossing the spectrum of a rainbow.^^"; print "The onlookers applaud in awe at the light show and then gasp as the rain becomes more insistent."; print " Large globs of colour streak the clothes of everyone in the room, including the snipers, who look horrified at being discovered."; " At a loss, since none of their training ever taught them what to do in a situation where they could be seen, the Elite Snipers of Papoosen turn tail and flee."; 7: deadflag = 1; print "Aiming straight for the king, you play your medley again. Another shower of colours falls through the skylight to land on the dais and the King."; print " This doesn't stop his advance, however.^^For a ruler of impotence, King Goosen has quite the backhand."; " That's the last thought to cross your mind before you are knocked unconscious by the swing of his sceptre."; } ], heavyLove [; switch (self.count) { 3: self.count++; print "Testing the limits of your skill, you play your medley with a bittersweet mix of accents and major sevenths. Every Piddle Ball champion staggers,"; print " and a couple even fall to the floor. An agitated man, evidently the captain cries out, ~I'm falling! I'm falling!~^^"; print "The melody changes character and the second aspect of magic takes hold. The ten men on the team cast loving eyes on the ten women,"; print " their dash to embrace made difficult by the increased gravity. Like some twisted musical production, the team continues their cries in a singsong manner.^^"; print "~I'm falling! We're falling from the skies up above! Falling for you...we're falling in love!~"; print " The last is belted out in glorious harmony as each couple throws their arms open for the crowd."; print " The court of Papoosen claps politely and a murmur spreads through the crowd about the thespian display."; 5: deadflag = 1; print "You take a deep breath, hoping for a miracle, and play your medley "; if (self has flag) print "with a bittersweet mix of accents and major sevenths."; else print "again."; print " The song may be working, but it's hard to tell how it affects the snipers, who are nearly invisible. Your question is answered by the clack of a crossbow."; " You drop to the floor, but you can't tell from which direction the bolt came. More crossbows fire, and your luck at dodging soon comes to an end."; 7: deadflag = 1; print "Aiming straight for the king, you play your medley "; if (self has flag) print "with a bittersweet mix of accents and major sevenths."; else print "again."; print " The song causes the King to drop his sceptre, but he never loved you much to begin with. Lacking a sceptre, he uses his fist instead.^^"; "For a ruler of impotence, King Goosen packs quite a punch. That's the last thought to cross your mind before you are knocked unconscious."; } ], modulateJig [; switch (self.count) { 3: self.count++; give self flag; print "Testing the limits of your skill, you play your medley with an upbeat tempo and an amalgamation of duple and triple meter."; print " Hearing the catchy rhythm, the Piddle Ball captain can't help but to snap along. His restrained enthusiasm is contagious,"; print " and soon the entire team (and several onlookers) are engaged in a joyous dance around the dais.^^"; print "The melody changes character and the second aspect of magic takes hold."; " The dancers feel the urge to be in a different place and every member of the Piddle Ball team sashays down the hall and out of the castle."; 5: deadflag = 1; print "You take a deep breath, hoping for a miracle, and play your medley "; if (self hasnt flag) print " with an upbeat tempo and an amalgamation of duple and triple meter."; else print "again."; print " The song may be working, but it's hard to tell how it affects the snipers, who are nearly invisible. Your question is answered by the clack of a crossbow."; " You drop to the floor, but you can't tell from which direction the bolt came. More crossbows fire, and your luck at dodging soon comes to an end."; 7: deadflag = 1; print "Aiming straight for the king, you play your medley "; if (self hasnt flag) print " with an upbeat tempo and an amalgamation of duple and triple meter."; else print "again."; print " The song causes the King to dance. He dances right up to you and makes use of his sceptre.^^For a ruler of impotence, King Goosen has quite the backhand."; " That's the last thought to cross your mind before you are knocked unconscious by his mighty swing."; } ], cant_go [; rtrue; ], has ~visited ~flag; ! Beat Piddle with Love / Beat Piddle with Jig RoomObj ECount0 "Count 0 Background" Endgame with name "retainers" "dusk" "foot" "throne" "cumbersome" "halberds" "banner" "king" "goosen" "crowd" "advisor" "royal" "guards" "dais" "onlooker" "onlookers" "sceptre", before [; rtrue; ]; RoomObj ECount2 "Count 2 Background" with name "retainers" "dusk" "foot" "throne" "banner" "king" "goosen" "crowd" "advisor" "twenty" "royal" "piddle" "ball" "champions" "champion" "dais" "onlooker" "onlookers" "sceptre", before [; rtrue; ]; RoomObj ECount4 "Count 4 Background" with name "retainers" "dusk" "foot" "throne" "banner" "king" "goosen" "crowd" "advisor" "advisor" "dais" "camouflage" "camouflaged" "snipers" "elite" "onlooker" "onlookers" "sceptre", before [; rtrue; ]; RoomObj ECount6 "Count 6 Background" with name "retainers" "dusk" "foot" "throne" "banner" "king" "goosen" "crowd" "advisor" "advisor" "dais" "sceptre", before [; rtrue; ]; ! ######################## ! ### Falling Pit (FP) ### ! ######################## Room FallingPit "Orchestra Pit, in Midair" with name "fallingpit", cantCount 0, ! Times a direction was tried downCount 0, ! Times down was tried fallCount 0, ! Current location in the pit description [; switch (self.fallCount) { 0: "The earthen sides of this pit look loose and near the consistency of mud. They seem to rush past as the speed of your descent increases."; 1: "The light from above dims with each passing moment. A large gnarled root from some hidden root system protrudes from the side of the pit here."; 2: "Although the bottom is quite dark, you think you are about halfway down the pit. The end of a rope is caught in the muddy wall here and the length of the rope hangs down about five feet."; 3: "You can just barely make out the bottom of the pit, far below you. A small outcropping of stone juts from the side of the pit here."; 4: "You are almost at the bottom of the pit. Now that impact is so imminent, you almost wish you could keep on falling."; } ], d_to [; self.downCount++; pitGuards.downQuip(self.downCount); rtrue; ], out_to [; return (self.cant_go()); ], before [; Climb: "To climb out of the pit, you would first need to stop falling."; Dance, DigRoom: "First, you'll need to stop falling."; Exit: "Your feet find no purchase."; Fall, Flail: "You're already doing an admirable job of that."; Fly: "There aren't enough happy thoughts to go around right now."; Jump: "You'd need to be a bit more talented to jump in midair."; KeepFall: "You really don't have much say in the matter."; Listen: "The wind whistles about your ears."; LookDown: "The ground is approaching at an alarmingly steady rate."; LookUp: "You see the guards, standing at the edge of the pit."; Pray: "A good idea, but just in case your prayers aren't answered, a parachute would be nice."; Shout: give self flag; "You shout as loud as you can, but no one comes to your rescue."; Sleep: "Freefall is comfortable, but not that comfortable."; Smell: "The thick musty scent of earth assails your nostrils."; StopFall: "Much easier said than done."; Strong: "The hook-nosed guard points at you and turns to his companion. ~Did ye hear that, Jim? He just swore!~ Jim rubs his nose. ~Indeed...~"; Swim: if (verb_word == 'dive') <>; "You're swimming through the air at the moment."; Think: "You try to think of a way to stop falling."; ], cant_go [; self.cantCount++; switch (self.cantCount) { 1: "Try as you might, you can't seem to move in any direction but down."; 2: "You vainly attempt to stop falling, but are unsuccessful."; 3: "Perhaps if you removed all of your clothing, you could fashion a hot air balloon before you reached the bottom of the pit. But right now, the only direction you're going is down."; 4: "Never one to give up in vain, you futilely attempt to avert your downwards trajectory. It doesn't work, though."; default: "Another attempt to switch directions in midair fails."; } ], each_turn [; pitGuards.fallQuip(self.fallCount); switch (self.fallCount) { 0: move FPRoot to FallingPit; 1: remove FPRoot; move FPRope to FallingPit; 2: if (FPRope notin player) remove FPRope; move FPLedge to FallingPit; 3: if (FPRope in player) { print "The rope whips around the stone outcropping as you fall and the subsequent jolt forces you to let go! "; remove FPRope; } remove FPLedge; 4: PlayerTo(PitBottom, 1); move pitGuards to PitBottom; move FPClothes to PitBottom; move player to PitBottom; give PitBottom firstTime; <>; } if (self.fallCount ~= 4) { switch (self.fallCount) { 0: print "^Flailing helplessly, you fall further into the pit...^"; 1: print "Your face turns an unhealthy green as you fall, and you wonder what ever possessed you to audition for the King...^"; 2: print "The wind runs through your hair like a screaming banshee as you continue your descent. If you had it all to do over you would have practiced a little more. And learned a different song...^"; 3: print "The ground approaches with maddening steadiness. Perhaps you should have been a carpenter... Or perhaps you just needed more than one song in your repertoire.^"; } self.fallCount++; PlayerTo(FallingPit); } ], has ~flag; ! Player hasn't shouted / Player has shouted RoomObj FPBottom "bottom" FallingPit with name "bottom" "ground", article "the", before [; Examine: <>; ]; RoomObj FPClothes "guards' clothes" FallingPit with name "tights" "green" "matching" "spectacles" "glasses", article "the", description "The guards above are dressed in matching green tights, although it is hard to make out any details from down here. The guard named Rob wears spectacles as well.", before [; Examine: rfalse; default: "The guards are too far away to interact with."; ] has pluralname; RoomObj FPLedge "stone outcropping" with name "stone" "outcropping" "crop" "ledge", describe [; rtrue; ], description "The small outcropping sticks about half a foot out and looks fairly stable.", before [; Catch, Take, Touch: if (FPRope in player) { remove FPRope; print "By now, you are moving too fast to grab onto the outcropping. During descent however, your rope whips around it, splattering splotches of mud across your face."; " The subsequent jolt on your arm becomes too much and you are forced to let go of the rope."; } "In a last ditch effort, you grab onto the stone ledge with both hands! But by now, you're moving much too fast, and the ledge disintegrates in a chalky cloud of stone dust."; Examine: rfalse; default: "You're falling too fast to do that."; ], has ~scenery; RoomObj FPRoot "gnarled root" with name "gnarled" "root" "handhold" "stick", describe [; rtrue; ], description "The root is about a foot long and sticks out of the mud.", before [; Catch, Pull, Take, Touch: print "Straining, you reach out and make a grab for the root. "; if (random(100) < 65) "You manage to hang on for a few moments, but the combination of a pulpy texture and the slickness of mud prevents you from keeping it in your grasp."; "Your fingertips brush the edge of the root but you don't quite get it."; Examine: rfalse; default: "You're falling too fast to do that."; ], has ~scenery; RoomObj FPRope "muddy rope" with name "rope" "string" "line" "length" "end", describe [; rtrue; ], description "The rope is about five feet long and seems to have gotten caught in the muddy wall.", before [; Catch, Pull, Take, Touch: if (self in player) "You tug on the rope, but unfortunately it's not attached to anything."; print "With flailing arms, you reach out for the rope. "; if (random(100) > 25) "Your fingertips slide along the rope, but you don't get a firm grip."; move self to player; "Luckily, you're able to get a grip on one end! Unluckily, the other end pulls out of the mud and you continue to fall down the pit."; Drop: if (self in player) { remove self; "You let go of the rope and it quickly becomes entangled on the stone outcropping."; } rfalse; Examine: rfalse; Tie: if (second == FPLedge && FPLedge in FallingPit) { remove self; print "^By now, you are moving too fast to grab onto the outcropping. During descent however, your rope whips around it, splattering splotches of mud across your face."; " The subsequent jolt on your arm becomes too much and you are forced to let go of the rope."; } if (second == player) "You try to tie the rope around you, but with the other end whipping about in the wind, it's hard to make a decent knot."; default: "You're falling too fast to do that."; ], has ~scenery; RoomObj FPScroll "scroll" with name "scroll", description "Rob holds a scroll in his hands, but you can't make out any details while falling through the air.", before [; Examine: rfalse; default: "First you'll need to stop falling."; ]; ! ########################### ! ### Finney's House (FH) ### ! ########################### Room FinneyHouse "Finney's House" with name "finneyhouse", description [; print "You stand at the front of a fairly large "; FHHouse.showColour(); print " house. The doorway stands open to the southwest and a bronze plaque hangs next to it. A paved road leads away from the house to the east."; " All around the house, tall mountains of rock loom in the air, and a narrow path runs around the house to the south."; ], before [; Colour: FHHouse.changeColour(); rtrue; Listen: "You hear nothing out of the ordinary for standing in a dormant volcano, although truthfully, you really haven't been in many."; Think: "You think about the doorway to Finney's House."; ], sw_to [; if (Leonine.trying == 1) rfalse; return FHDoor.enter(); ], in_to [; if (Leonine.trying == 1) rfalse; return FHDoor.enter(); ], e_to [; FHDoor.count = 0; return PavedRoad; ], s_to [; FHDoor.count = 0; return EastHouse; ], cant_go "A paved road runs east and the entrance to the house is to the southwest. You can also go around the house to the south."; RoomObj FHDoor "doorway" with name "door" "doorway" "entrance" "exit", count 0, description "It is a plain doorway without any decorations.", before [; Close, Open: "There's no door in the doorway."; Cut: if (second == jigSaw) "There is nothing in the doorway to cut."; Enlarge: "The doorway is not going to get any bigger."; Enter, Exit: if (self in Foyer) <>; <>; Knock: "There is no door in the doorway."; Receive, ThrownAt: move noun to location; "As ", (the) noun, " reaches the threshold, it seems to be repelled by some unseen force."; Search: "You don't find anything unusual about the doorway."; StandUnder: "Some unseen force prevents you from standing directly in the doorway."; Touch: "The frame of the doorway feels mundane."; ], enter [; if (child(player) ~= nothing) { print "You abruptly hit an invisible barrier in the doorway. From some unseen location, a hollow voice speaks, ~"; self.count++; switch (self.count) { 1: "Warning! This house is protected by a grumganer system! You may not take any possessions through this doorway from either side. If you persist in doing so, you will be grumganed!~"; 2: "I repeat! Do not attempt to use this door while carrying anything unless you want to be grumganed!~"; 3: "Must you be difficult?? Cease and desist immediately!~"; 4: "I'm warning you...~"; default: deadflag = 1; print "You just don't know when to quit do you? Have a pleasant day!~ There is a hiss like escaping steam and you start to feel rather warm."; print " You try to run, but the warmth trails after. In a few minutes, you collapse into a small pile of a red gelatinous substance, which eventually evaporates into the "; if (player in FinneyHouse) "ground."; "floor."; } } print "A slight tickle at your neck is all that you feel as you step through the door.^"; if (self in Foyer) { if (self hasnt flag && SongBag --> 3) { give self flag; Cutscenes.playScene(); } return FinneyHouse; } if (self in FinneyHouse) return Foyer; ], found_in FinneyHouse Foyer, has ~flag; ! Player hasn't seen cutscene / Cutscene viewed RoomObj FHHouse "house" with name "house" "home" "finney", index 0, description [; print "It is a beautiful colonial house which is painted "; self.showColour(); print ". It is clear that the owner must have been quite wealthy."; if (self in EastHouse) "A lone window can be seen up on the second floor of the house."; if (self in FinneyHouse) "The front doorway stands open to the southwest."; if (self in FishPond) "From here, you can just make out the second floor, which peeks over the rocks to the northwest."; ], before [; Climb: if (self in EastHouse) "There aren't enough handholds to reach the upper window from here."; "You don't see any way to climb the house from here."; ], showColour[; switch (self.index) { 0: print "white"; 1: print "blue"; 2: print "red"; } ], changeColour [; self.index++; if (self.index == 3) self.index = 0; print "As you play ~Dab of Colour~, one corner of the house seems to flicker. The outer layer of the house seems to pull away, as if a giant hand were peeling it. When the air settles, the house has become "; self.showColour(); "."; ], found_in EastHouse FinneyHouse FishPond; Plaque FHPlaque "bronze plaque" FinneyHouse with description "FINNEY'S HOUSE^Nolava Odd Community^Building Code #030 "; ! ###################### ! ### Fish Pond (FP) ### ! ###################### Room FishPond "Fish Pond" with name "fishpond", description [; print "Paths from the north and east converge here at a small decorative pond. One side of the volcano rises up to the south and the top of a house peeks over the rocks to the northwest. Next to the pond, a bronze plaque is embedded in the ground. "; if (herring in FPPond) herring.pondText(); if (theDuck in FPPond) { if (herring in FPPond) "There is also a white duck swimming in the pond."; "There is a white duck here, swimming in the pond."; } ""; ], before [; Colour: if (herring in FPPond && herring hasnt asleep) { herring.changeColour(); rtrue; } Glock: "You drink from the pond in large gulps, greedily enjoying the water. In reaction, a hollow voice recites poetry.^^~The guard of the ward meets the traveler and bard.^When the guard is gone, a prize you'll have,^if at the gate you ululate.~"; Jig: if (herring in FPPond && herring hasnt asleep) "Nothing happens. Apparently fish don't dance."; Listen: "it is quiet in this part of the volcano."; Swim: "Though still warm, the season is a bit cool to go swimming."; ], e_to RockWall, n_to EastHouse, cant_go "The only paths lead north and east."; Plaque FPPlaque "bronze plaque" FishPond with description "^FINNEY'S FISH POND^Nolava Odd Community^Building Code #031 "; RoomObj FPPond "decorative fish pond" FishPond class WaterObj, with name "pond" "decorative" "water" "fish" "pool", description [; print "The fish pond is extremely deep and quite colourful. The deepest part of the pond is a rich red and the area closest to the surface is blue. "; if (child(self) == nothing) ""; if (herring in self) { herring.pondText(); if (theDuck in self) "You also see a duck swimming on the surface."; ""; } if (theDuck in self) "There is a duck swimming on the surface of the pond."; ""; ], before [; Empty: "Draining the fish pond would be tedious and affect nothing but Finney's property values."; Enter, Jump, Swim: <>; Glock: <>; Insert: if (second == cup) { remove cup; move cupWater to player; "You fill the cup with pond water."; } JumpOver: "With a running jump, you clear the fish pond."; Knock: "You knock on the water, which parts under your fingers."; Listen: "You listen to the placid waters for a moment but don't hear anything."; Receive: if (noun == cup) <>; if (noun ~= herring) "There's no reason to put that in the fish pond."; Search: if (herring in self) { herring.pondText(); if (theDuck in self) "You also see a duck swimming on the surface."; ""; } if (theDuck in self) "There is a duck swimming on the surface of the pond."; ""; Take: "The water slips through your fingers."; Touch: "You dip your fingers into the cold pond."; ], has transparent container ~openable open; RoomObj FPWalls "granite walls" class GraniteObj, with name "volcano" "corner" "walls" "rock" "face", description "The sides of the volcano arch into the air above you.", before [; Climb: "The granite walls are unscalable without proper equipment."; ], found_in FishPond Overlook; ! ################# ! ### Foyer (F) ### ! ################# Room Foyer "Foyer" with name "foyer", description [; print "The foyer of Finney's house is very majestic in scope. The ceiling is a full two stories above you, and the entire room is bathed in natural light"; print " from a single window high up on the east wall. A massive Osienthal rug covers most of the floor, and a small endtable sits in one corner."; " To the northeast is the doorway, and more of the house can be seen to the west."; ], before [; LookDown: "You see a giant rug covering most of the floor."; LookUp: "The ceiling is very high above you."; Think: "You wonder how you can avoid the security doorway."; ], ne_to [; return FHDoor.enter(); ], out_to [; return FHDoor.enter(); ], w_to [; FHDoor.count = 0; return LowerHall; ], cant_go "The only exits here are west and northeast."; RoomObj FCeiling "ceiling" Foyer with name "ceiling" "roof", description "The ceiling is two stories above you, giving the room a very open feel.", before [; Cut, Knock, Push, Pull: "You can't reach that high."; ]; RoomObj FLight "natural light" Foyer with name "natural" "light", description "The room is bright as a result of the natural light streaming through the open window.", before [; Examine: rfalse; default: "The light is intangible."; ], has proper; RoomObj FRug "Osienthal rug" Foyer with name "carpet" "rug" "osienthal", description [; print "Like most Osienthal rugs, this particular one is a multi-weave of earth tones, composing a surface which is not only aesthetically pleasing, but also good at hiding dirt."; if (self has flag) " There is a slash down the middle of the rug."; ""; ], before [; Cut: if (second == jigSaw) { if (self has flag) "You've already tested out your jigsaw on the rug."; give self flag; print "You give the expensive rug a nice slash down the center."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the rug with your bare hands."; Enter: "The rug may look pretty, but in reality it's quite uncomfortable to sit on."; JumpOver: "You take a running start and leap over the rug."; Lift, LookUnder, Pull, Push: "Overcome by a strange urge, you roll the rug aside and look underneath. The floor below is nondescript and completely normal. You roll the rug back to its original position."; Search: "There's nothing unusual about the rug."; Smell: "The rug smells faintly of dust and the materials used in its creation."; Stretch: "The weave of the rug prevents stretching."; Take: "The rug is much too large to carry around."; Touch: "The rug feels soft and weavy."; ], has novisit ~flag; ! Whole / Vandalized RoomObj FTable "endtable" Foyer with name "table" "endtable", description [; print "The endtable looks to be more for decoration than utility."; if (self has flag) " The edges of the table are scratched up from your earlier handiwork."; if (child(self) ~= nothing) { print " On the table you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Cut: if (second == jigSaw) { if (self has flag) "There's no need to damage the endtable further."; give self flag; print "You mar the corners of the endtable with the saw."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the endtable with your bare hands."; Pull, Push: "You slide the endtable around on the floor."; Enter: "The table would probably break under your weight."; Search: <>; Touch: "The endtable feels smooth."; Turn: "You turn the table on yourself. Other than feeling clever, you feel no different and nothing happens."; ], has supporter ~flag; ! Whole / Vandalized ! ####################### ! ### Front Door (FD) ### ! ####################### Room FrontDoor "Front Door" with name "frontdoor", description [; print "You are standing outside a small purple house which is situated in a small valley. All the windows have been sealed beyond any hope of opening them"; if (self has flag) print ", but the front door has been smashed wide open by a well-placed boulder."; else print " and the front door looks ominously locked."; " A path leads up a fairly steep hill to the northwest."; ], before [; Colour: "The walls of the house shiver momentarily, but they remain purple."; Heavy: "The notes echo through the valley but nothing tangible happens."; Listen: "The air is expectant, however that sounds..."; LookDown: "You see the ground around the house."; Think: if (self hasnt flag) "You try to think of a way to get the front door open."; "You wonder if the boulder was insured."; ], u_to Slope, nw_to Slope, in_to [; if (self has flag) { print "You gingerly step through the rubble and enter the house...^"; return VaultDoor; } "The front door is locked."; ], w_to [; if (self has flag) { print "You gingerly step through the rubble and enter the house...^"; return VaultDoor; } "The front door is locked."; ], d_to "You are already at the bottom of the hill.", cant_go "A path leads away from the house up the hill to the northwest and the entrance to the house is west."; RoomObj FDDoor "front door" FrontDoor with parse_name [i; if (FrontDoor has flag) { while (NextWord() == 'front' or 'door' or 'remnants' or 'shattered' or 'debris' or 'boulder' or 'demolished') i++; } else { while (NextWord() == 'front' or 'door') i++; } return i; ], description [; if (FrontDoor has flag) "The shattered remnants of the front door are mixed with the demolished boulder that caused its demise."; "The front door looks strong and extremely sturdy. If you know your doors well enough, this looks to be a ~Doofa-certified~ door which can only be opened with a ~Doofa-certified~ key. There is probably only one key in existence for this door."; ], before [; Attack: if (FrontDoor has flag) "There isn't much left to assault."; "You pound on the door but it holds up well under the assault."; Close: if (FrontDoor has flag) "That definitely won't happen anytime soon, judging from the door's current state."; "It is closed already."; Enter: if (FrontDoor has flag) <>; "The door is closed and locked tight."; Knock: if (FrontDoor has flag) "There is not much left to knock at."; "You knock politely on the door. After several moments of silence, you presume that no one is coming to answer."; Open: if (FrontDoor has flag) "That won't happen anytime soon, judging from the door's current state."; "The door is closed and locked tight, probably just to increase your puzzle-solving hours."; Pull, Push: if (FrontDoor has flag) "You sift through the debris but find nothing useful."; "The door won't budge."; Search: if (FrontDoor has flag) "You sift through the door remnants but find nothing useful."; "You go over every inch of the door but find no weaknesses."; Take: if (FrontDoor has flag) "You probably won't need to carry the rubble around."; Touch: if (FrontDoor has flag) "You run your fingers through the remnants of the door."; "The door feels sturdily-built."; Unlock: if (FrontDoor has flag) "That won't happen anytime soon, judging from the door's current state."; if (boxKey in player) "You try Leonine's key in the lock but it doesn't fit."; "You aren't even carrying any ~Doofa-certified~ keys."; ]; RoomObj FDHouse "purple house" FrontDoor with name "purple" "house", description [; print "This house is nestled deep in the valley. There are a few windows but they have been sealed shut. Outward appearances suggest that perhaps the owner does not care for visitors. A bronze plaque hangs next to "; if (FrontDoor has flag) "what's left of the front door."; "the front door."; ], before [; Climb: "You don't see any reason to climb up the house. There is no chimney or accessible upper windows."; Enter: <>; Listen: "The house doesn't seem to be talking. This is probably normal."; LookUnder: if (self hasnt firstTime) { give self firstTime; "You can see a pair of ruby slippers sticking up from under the house! But on closer inspection, it turns out to be a worthless clump of reddish-brown bracken."; } "You don't see anything interesting around the sides of the house."; Search: "You inspect the house closely but see no way in except for the front door."; ], has ~firstTime; ! Never looked under house / House inspected Plaque FDPlaque "bronze plaque" FrontDoor with description "The bronze sign seems fairly new.^^SNOOBAR'S HOUSE^Nolava Odd Community^Building Code #080 "; RoomObj FDWindows "sealed windows" FrontDoor with name "window" "sealed" "windows" "adhesive" "foggy", description "Every window on the house has been sealed shut with some sort of foggy adhesive. It is doubtful that you could ever get through them.", before [; Attack: "You doubt that you can even break one of the windows."; Climb, Enter: "The windows are closed."; Close: "The windows are already closed."; LookUnder: "You find nothing in the space under the windows."; Open: "You pry at a window but find it irreversibly sealed."; Search: "You find no cracks in the adhesive on the windows."; ]; ! ####################### ! ### Front Yard (FY) ### ! ####################### Room FrontYard "Front Yard" with name "frontyard", description [; print "With sunlight, this quaint plot of land would look downright pleasant. However, it is tucked against the north side of the volcano"; print " and does not seem to get much light at all. A blue cottage sits to the west and a larger red cottage is east. "; if (LM2.hasExit == 2) "An archway leads into the confines of the security maze to the south."; "A long granite wall prevents any movement to the south."; ], before [; Colour: "As you play ~Dab of Colour~, the two cottages seem to bleed away until both are purple. The effect doesn't last long however, and soon both cottages look no different than before."; Listen: "You hear movements from inside the red cottage."; Ruminate: "Over and over, you think about the events of the day. In reaction, a hollow voice recites poetry.^^~Now head for the surface, don't dally, don't wait,^but up in the balcony, pandiculate.~"; ], w_to ButlerCottage, e_to [; theWidow.timer = 0; return (DrawingRoom); ], s_to [; if (LM2.hasExit == 2) { if (trumpet notin player) "You are about to leave when you realize that you don't have your trumpet. It'd probably be a good idea to get it."; LetterTracker.resetPath(); print "As you step through the archway, a small bell chimes in the eastern cottage, and letters of the alphabet suddenly appear in the air over the courtyard.^"; LM2.openArch(); LM18.closeArch(); return (LM2); } ], cant_go [; if (LM2.hasExit == 2) "An archway leads south, and cottages can be seen to the east and west."; "Cottages can be seen to the east and west."; ]; RoomObj FYArch "courtyard archway" FrontYard with name "arch" "archway" "entrance", description "Like many of the structures in the volcano, the archway in the wall is made from granite. In this case, finely-cut granite has been used in place of brick to form a corbeled arch.", before [; Attack: if (second == nothing) "A swift bare-handed chop at the arch leaves you in pain."; "The arch is not affected by your onslaught."; Enter: <>; LookUnder: "The archway is clear of obstructions."; Pull: "Your attempts to topple the archway fail."; Rub, Touch: "The granite bricks are smooth to the touch."; Taste: "Licking the archway brings a vaguely unappetizing taste to your lips."; ]; RoomObj FYBlueCottage "blue cottage" FrontYard with name "blue" "cottage" "house" "mountain" "of" "granite", description [; print "A small blue cottage is to the west, flush against a mountain of granite. A swinging door provides access to the inside and "; if (theButler in ButlerCottage) "you can hear movement inside."; "the house is silent."; ], before [; Climb: "There is nothing worthwhile on the roof of the cottage."; Enter: <>; ]; RoomObj FYBlueDoor "blue door" with name "door" "swinging" "doorway" "blue", description "The cottage's blue swinging door looks to be more of a decoration than any real deterrent.", before [; Close: "The door is already closed."; Enter: if (self in ButlerCottage) <>; if (self in FrontYard) <>; Knock: if (self in FrontYard && theButler in ButlerCottage) "A voice from within answers. ~Come in!~"; Open, Push: "You push the door with a light touch of your hand. It swings open quite easily and then closes on its own."; ], found_in FrontYard ButlerCottage; RoomObj FYParts "statue parts" FrontYard class GraniteObj, with name "statue" "parts" "pieces" "weeds" "patch", initial "A jumble of granite pieces sits in a patch of weeds.", before [; Climb: "There's no need to climb the granite pieces."; Construct: "The pieces are too disparate to make sense of. You would need the original builder's design plans to even begin constructing the statue."; Examine, Lift, LookUnder, Push, Pull, Search: if (self hasnt flag) { give self flag; move lostRing to location; "The granite pieces look to be parts of an incomplete statue. Evidently the artist dumped them here and never got around to assembling it. As you shift the granite pieces around, a small gold ring rolls out of the stack."; } "You sift through the statue parts but nothing else is hidden in the pile."; Take: "You don't have any good reason to carry around an unfinished statue."; ], has ~scenery pluralname ~flag; ! Not searched / Searched RoomObj FYRedCottage "red cottage" FrontYard with name "red" "cottage" "house", description "A red cottage is to the east, slightly larger than its western counterpart. A swinging door provides access to the inside and you can hear movement inside.", before [; Climb: "There is nothing worthwhile on the roof of the cottage."; Enter: <>; ]; RoomObj FYRedDoor "red door" with name "door" "swinging" "flimsy" "doorway" "red", description "The cottage's red flimsy door looks to be more of a decoration than any real deterrent.", before [; Close: "The door is already closed."; Enter: if (self in FrontYard) <>; if (self in DrawingRoom) <>; Knock: if (self in FrontYard && theWidow in DrawingRoom) "You knock on the door. A voice from within answers, ~Come in!~"; Open, Push: "You push the door with a light touch of your hand. It swings open quite easily and then closes on its own."; ], found_in FrontYard DrawingRoom; RoomObj FYWall "maze wall" FrontYard class GraniteObj, with name "wall" "maze", description "The wall is made of smooth grey granite. It seems fairly new, in respect to other works of architecture you have seen down here.", before [; Attack: "A swift bare-handed chop at the wall leaves your hand in pain."; Climb: if (LM18.hasExit == 1) "You can't seem to find any good places to grip the wall."; "Why climb when there's a perfectly good entrance?"; Rub, Touch: "The granite bricks are smooth to the touch."; Pull: "Your attempts to topple the wall fail."; ]; ! ######################### ! ### Inside Vault (IV) ### ! ######################### Room InsideVault "Inside Vault" with name "insidevault", description [; print "It is highly unlikely that a vault this size could fit in a house so small. Smooth purple walls meet at right angles to form a closed space about twelve feet square."; print " While this in itself is not spectacular, what amazes you is the ceiling, which dances at the limits of your vision some nine hundred yards above."; " A shimmering curtain of light hangs over the entrance to the east and there appears to be something written on the floor."; ], before [; Colour: "The walls of the vault shimmering momentarily, but do not change. The owner of the house must have applied ~Purple-Forever~ on his entire abode."; Listen: "You hear nothing."; Literal: "The vault door is already gone. It's a good thing too; you wouldn't want to cause an overpopulation of hamsters."; LookDown: "The floor, it seems, is much closer than the ceiling. There seems to be something written in tiny letters."; LookUp: "You study the ceiling as best as you can, but can't see anything from here."; Modulate: "The notes reverberate through the vault, but nothing happens."; Nictitate: "You wink. In reaction, a hollow voice recites poetry.^^~You're nearing the end, you're reaching your fate.^Now go to the front yard and ruminate.~"; Rain: "There is a rumbling up above, and for a moment you can almost see storm clouds forming in the stratosphere of the vault. Abruptly the clouds wink out of existence and all is quiet."; Shout: "A few seconds later, you hear an echo from somewhere above."; Smell: "The room smells faintly musty."; Think: "You wonder why there is a curtain of light here."; ], e_to [; print "You feel nothing unusual as you walk through the curtain of light...perhaps you'll never know why Snoobar put it there.^"; return VaultDoor; ], u_to "It'd be easier to sprint the length of five Piddle-Ball courts in ten seconds than it would be to reach the ceiling from here.", cant_go "The only exit from the vault is east."; RoomObj IVCeiling "vault ceiling" InsideVault with name "ceiling" "roof", description "The ceiling is just barely visible from here. Some magic must be in play; if the vault were truly this tall it would surely be seen from outside.", before [; Knock: "You cannot reach the ceiling."; ]; RoomObj IVCurtain "curtain of light" InsideVault with name "curtain" "light" "shimmering" "violet" "luminescence" "diaphanous" "spider" "web", description "There's nothing special about the shimmering veil of violet luminescence which mystically floats across the entrance of the vault like a diaphanous spider web.", before [; Attack, Cut, Knock, Lift, Lower, Open, Pull, Push, PushDir, Remove, Touch: "You seem to go right through it."; Enter: <>; JumpOver: "The curtain of light extends from floor to ceiling."; LookUnder: "There is nothing under the curtain."; Search: "Through the curtain, you can see the inside of Snoobar's house, exactly as you remembered it. The only noticeable difference seems to be the violet tint that everything on the other side has taken."; Smell: "It smells like a shimmering veil of violet luminescence which mystically floats across the entrance of the vault like a diaphanous spider web."; Taste: "The curtain has no taste. It turns your tongue purple for a few moments though."; ]; RoomObj IVFloor "vault floor" InsideVault with name "floor" "ground" "vault" "writing", description "Looking closely at the floor of the vault you read, ~Help! I'm trapped inside my house! -Snoobar 2/08~."; RoomObj IVWalls "vault walls" InsideVault with name "walls" "wall", description "Like the rest of the house, these walls are purple in colour.", has pluralname; ! ############################ ! ### Leonine's House (LH) ### ! ############################ Room LeonineHouse "Leonine's House" with name "leoninehouse", description "To the east, a peculiar manor grows out of the rocks like an eccentric fungus, a haphazard collection of walls, additions, and minarets. The lane curves from north to southwest around an immense wall of rubble to the south.", before [; Listen: "You can hear someone singing (rather off-key) inside the house."; Heavy: "The wall of rubble quavers momentarily, but luckily you don't start an avalanche."; Shout: if (Leonine notin location) "A faint voice cries out, ~Shampooing sheepdogs, stop that racket! "; ], n_to LibraryLane, sw_to RockWall, in_to MagicLab, e_to MagicLab, s_to "An impassable wall of rubble blocks your way.", cant_go "The path runs from southwest to north and the entrance to the house is east."; RoomObj LHHouse "quaint house" LeonineHouse with name "house" "minaret" "quaint" "minarets" "home" "doorway", description "The first word that comes to your mind when you see this house is - patchwork. Probably a small stylish structure upon creation, years of additions in random directions give the appearance that it will topple in upon itself. The entrance stands open invitingly and a small bronze plaque is mounted by the doorway.", before [; Close: "You can't seem to close the door to Leonine's house."; Enter: <>; Open: "The door is already open."; ]; RoomObj LHPath "path" with name "road" "path" "lane", description [; if (self in LeonineHouse) "The path ran from north to south at one time, but a massive heap of debris to the south has made it detour to the southwest."; "The path enters the clearing from the northeast, edging around a massive heap of debris."; ], before [; Knock: "You knock on the ground, but no one replies."; ], found_in LeonineHouse RockWall; Plaque LHPlaque "bronze plaque" LeonineHouse with description "^LEONINE'S HOUSE^Nolava Odd Community^Building Code #020 "; RoomObj LHRubble "granite rubble" class GraniteObj, with name "wall" "rubble" "debris" "granite" "piles" "of", description [; if (self in LeonineHouse) "It looks like the result of a cave-in or earthquake, and effectively bars any progress to the south."; "It looks like the result of a cave-in or earthquake and greatly limits travel possibilities in many directions."; ], before [; Climb: "The rubble seems too unstable to climb safely."; Dig, Pull, Push, PushDir, Remove: "It would take years to move all of this rubble."; Eat: "Eating rubble? You're not quite that hungry yet."; JumpOver: "Even Jurgen Yoosa couldn't accomplish a feat like that."; Search: "You sift through some of the smaller rubble but find nothing."; Smell: "The rubble smells very rocky, in a peculiar granite kind of way."; Take: "Your pants aren't big enough to carry around a pile of rubble."; ], found_in LeonineHouse RockWall; ! ######################## ! ### Letter Maze (LM) ### ! ######################## LetterMaze LM1 "Grassy Courtyard" with letter 'S', hasWall 5, e_to LM2, s_to LM5, se_to LM6; LetterMaze LM2 "Grassy Courtyard" with letter 'A', hasWall 1, w_to LM1, e_to LM3, sw_to LM5, s_to LM6, se_to LM7, n_to [; if (self.hasExit == 2) { LetterTracker.resetPath(); print "The letters vanish as you leave the courtyard.^"; return (FrontYard); } ], closeArch [; self.hasExit = 0; self.hasWall = 1; ], openArch [; self.hasExit = 2; self.hasWall = 0; ]; LetterMaze LM3 "Grassy Courtyard" with letter 'M', hasWall 1, w_to LM2, e_to LM4, sw_to LM6, s_to LM7, se_to LM8; LetterMaze LM4 "Grassy Courtyard" with letter 'G', hasWall 6, w_to LM3, sw_to LM7, s_to LM8; LetterMaze LM5 "Grassy Courtyard" with letter 'L', hasWall 2, n_to LM1, ne_to LM2, e_to LM6, s_to LM9, se_to LM10; LetterMaze LM6 "Grassy Courtyard" with letter 'E', nw_to LM1, n_to LM2, ne_to LM3, w_to LM5, e_to LM7, sw_to LM9, s_to LM10, se_to LM11; LetterMaze LM7 "Grassy Courtyard" with letter 'S', nw_to LM2, n_to LM3, ne_to LM4, w_to LM6, e_to LM8, sw_to LM10, s_to LM11, se_to LM12; LetterMaze LM8 "Grassy Courtyard" with letter 'O', hasWall 3, nw_to LM3, n_to LM4, w_to LM7, sw_to LM11, s_to LM12; LetterMaze LM9 "Grassy Courtyard" with letter 'L', hasWall 2, n_to LM5, ne_to LM6, e_to LM10, s_to LM13, se_to LM14; LetterMaze LM10 "Grassy Courtyard" with letter 'T', nw_to LM5, n_to LM6, ne_to LM7, w_to LM9, e_to LM11, sw_to LM13, s_to LM14, se_to LM15; LetterMaze LM11 "Grassy Courtyard" with letter 'H', nw_to LM6, n_to LM7, ne_to LM8, w_to LM10, e_to LM12, sw_to LM14, s_to LM15, se_to LM16; LetterMaze LM12 "Grassy Courtyard" with letter 'O', hasWall 3, nw_to LM7, n_to LM8, w_to LM11, sw_to LM15, s_to LM16; LetterMaze LM13 "Grassy Courtyard" with letter 'O', hasWall 2, n_to LM9, ne_to LM10, e_to LM14, s_to LM17, se_to LM18; LetterMaze LM14 "Grassy Courtyard" with letter 'U', nw_to LM9, n_to LM10, ne_to LM11, w_to LM13, e_to LM15, sw_to LM17, s_to LM18, se_to LM19; LetterMaze LM15 "Grassy Courtyard" with letter 'I', nw_to LM10, n_to LM11, ne_to LM12, w_to LM14, e_to LM16, sw_to LM18, s_to LM19, se_to LM20; LetterMaze LM16 "Grassy Courtyard" with letter 'N', hasWall 3, nw_to LM11, n_to LM12, w_to LM15, sw_to LM19, s_to LM20; LetterMaze LM17 "Grassy Courtyard" with letter 'A', hasWall 7, n_to LM13, ne_to LM14, e_to LM18; LetterMaze LM18 "Grassy Courtyard" with letter 'F', hasExit 1, nw_to LM13, n_to LM14, ne_to LM15, w_to LM17, e_to LM19, sw_to [; if (self.hasExit == 1) { if (self hasnt flag && theWidow has flag) { give self flag; Cutscenes.playScene(); } LetterTracker.resetPath(); print "The letters vanish as you leave the courtyard.^"; PlayerTo(OutCourt); rtrue; } ], closeArch [; self.hasExit = 0; self.hasWall = 4; ], openArch [; self.hasExit = 1; self.hasWall = 0; ], has novisit ~flag; ! Cutscene not viewed / Cutscene viewed LetterMaze LM19 "Grassy Courtyard" with letter 'F', hasWall 4, nw_to LM14, n_to LM15, ne_to LM16, w_to LM18, e_to LM20; LetterMaze LM20 "Grassy Courtyard" with letter 'E', hasWall 8, nw_to LM15, n_to LM16, w_to LM19; RoomObj LMLetter "nearest letter" with parse_name [i j; switch (location) { LM1, LM7: j = 's//'; LM2, LM17: j = 'a//'; LM3: j = 'm//'; LM4: j = 'g//'; LM5, LM9: j = 'l//'; LM6, LM20: j = 'e//'; LM8, LM12, LM13: j = 'o//'; LM10: j = 't//'; LM11: j = 'h//'; LM14: j = 'u//'; LM15: j = 'i//'; LM16: j = 'n//'; LM18, LM19: j = 'f//'; default: j = 'letter'; } while (NextWord() == 'large' or 'floating' or 'nearest' or 'letter' or j) i++; return i; ], description "The giant letter floats above you, slowly shimmering and rotating.", before [; Attack, Cut, Knock, Lift, Pull, Push, Rub, Squeeze, Take, Touch, Turn: "Your hand passes right through the floating letter. You feel no sensations as it goes through."; LookUnder: "Surprisingly, the letter casts no shadow."; ], found_in LM1 LM2 LM3 LM4 LM5 LM6 LM7 LM8 LM9 LM10 LM11 LM12 LM13 LM14 LM15 LM16 LM17 LM18 LM19 LM20; RoomObj LMLetters "similar letters" with name "others" "other" "letters" "floating" "similar", description "The letters in adjacent plots seem to shimmer on the brink of existence. You will need to move another plot of land to see them.", before [; Attack, Cut, Knock, Lift, Pull, Push, Rub, Squeeze, Take, Touch, Turn: "You can't reach them from here."; LookUnder: "Surprisingly, the letters don't seem to cast shadows."; ], found_in LM1 LM2 LM3 LM4 LM5 LM6 LM7 LM8 LM9 LM10 LM11 LM12 LM13 LM14 LM15 LM16 LM17 LM18 LM19 LM20, has pluralname; RoomObj LMWall "maze wall" with name "wall", description "The granite of the wall seems fairly new, in respect to other works of architecture you have seen down here.", before [; Attack: "A swift bare-handed chop at the wall leaves your hand in pain."; Climb: "Some unseen force keeps your hands from finding purchase on the wall."; JumpOver: "The walls are too high to jump over."; Pull: "Your attempts to topple the wall fail."; Rub, Touch: "The granite bricks are smooth to the touch."; Taste: "Licking the wall brings a vaguely unappetizing taste to your lips."; ], found_in LM1 LM2 LM3 LM4 LM5 LM8 LM9 LM12 LM13 LM16 LM17 LM18 LM19 LM20; ! ################### ! ### Library (L) ### ! ################### Room Library "Library" with name "library", description "The room is awash with natural light from several well-placed skylights in the ceiling. Row upon row of shelves fill the center of the library, although it seems that only one of the shelves has any literature upon it. The only exit is back out to the northeast.", before [; Listen: "All is quiet, as it should be in a library."; LookUp: "You can see the sides of the volcano through the skylights."; Shout: "Your bloodcurdling scream disturbs the sanctity of the reference section. Although there are none present, you can almost envision a rankled librarian glaring at you over the top of her spectacles."; Smell: "The library has that stereotypical information-archive smell."; Sleep: "It's certainly quiet enough, but there's probably more constructive things you could do."; ], out_to LibraryLane, ne_to LibraryLane, cant_go "The only exit is to the northeast."; RoomObj LBox "display box" Library with name "box" "display", description "There are several hundred pamphlets in the box.", before [; Receive: if (noun == pamphlet) "There's no need to put it back in the box."; "That doesn't belong there."; Search: <>; Take: "You don't need the whole box."; ], has container open ~openable transparent; RoomObj LBoxPamphlets "pamphlets" LBox with name "pamphlets" "pamphlet" "leaflets" "leaflet", description "The pamphlets are titled ~A BRIEF TIMELINE OF THE ILLUSTRIOUS HISTORY OF THE NOLAVA ODD COMMUNITY~.", before [; Consult: if (pamphlet in player) <>; "You don't have a pamphlet."; Count: if (pamphlet in nothing) "You count about 753 pamphlets in the box."; "You reach a final tally of 752 pamphlets."; Read: if (pamphlet in player) <>; "You don't have a pamphlet."; Take: if (pamphlet in nothing) { move pamphlet to player; PronounNotice(pamphlet); "You take a pamphlet from the box."; } "You already took one of the pamphlets from the box."; ] has scenery pluralname; RoomObj LShelf "bookshelf" Library with name "bookshelf" "shelf", description [; print "The center bookshelf has a display box which contains several hundred copies of an informational pamphlet entitled ~A Timeline of the Nolava Odd Community, by Poont~. Apparently they aren't in high demand."; if (child(self) ~= nothing) { print " You also see "; WriteListFrom(child(self), ENGLISH_BIT); " on the shelf."; } ""; ], before [; Climb: "You climb on top of a bookshelf but find that things look much the same from above as they do from below. You return to the floor."; Lift, Take: "It would take a bit more muscle to pick up the shelves."; Pull, Push: "Causing a domino effect with the bookshelves might look neat, but in the end, you'd have to clean up the mess."; Search: <>; ], has supporter; RoomObj LShelves "empty bookshelves" Library with name "bookshelves" "empty" "shelves", description "The other shelves are all bare. Either someone has stolen the books, or there were never any to begin with.", before [; Receive: <>; ], has pluralname; RoomObj LSkylight "skylights" Library with name "window" "skylight" "sky" "light" "skylights" "windows", description "Large panes of glass allow light from the outside to brighten this room considerably.", before [; Attack: "It wouldn't be wise to break the skylights. You might be charged."; Close: "The skylights are closed already."; Knock: "You can't reach them from here."; Open, Touch: "They can't be reached from down here, but regardless of that, they're probably just extra scenery added to the room to make the world seem larger."; StandUnder: "You stand underneath the skylights."; ], has pluralname; ! ######################### ! ### Library Lane (LL) ### ! ######################### Room LibraryLane "Library Lane" with name "librarylane", description "Quaint miniature pine trees line the path which runs south through a manicured park from the north. Nestled in the rocks to the southwest is a single-story building adorned with a bronze plaque.", before [; Colour: "As you play your song, the pine trees turn a reddish hue. The effects are short-lived, however, and soon they return to normal."; Listen: "Somewhere to the south you can hear someone humming."; ], each_turn [; return (VolcanoCenter.farRain()); ], s_to LeonineHouse, n_to VolcanoCenter, in_to Library, sw_to Library, cant_go "The path runs from north to south and a building is to the southwest."; RoomObj LLBuilding "library" LibraryLane with name "building" "library", description "Surprisingly, this building is made out of regular brick. There are no windows, but skylights dot the roof every twenty feet or so. The front door is of a swinging variety, without a latch.", before [; Climb: "The library is too tall to climb."; Enter: <>; ]; RoomObj LLDoor "library doorway" with name "door" "swinging" "flimsy" "doorway", description "The building's flimsy door looks to be more of a decoration than any real deterrent.", before [; Close: "The door is already closed."; Enter: if (self in Library) <>; <>; Knock: "You knock on the swinging door, but no one answers."; Open, Push: "You push the door with a light touch of your hand. It swings open quite easily and then closes on its own."; ], found_in Library LibraryLane; RoomObj LLSkylight "skylights" LibraryLane with name "skylight" "sky" "light" "skylights", description "Skylights dot the roof every twenty feet or so. They are far out of your reach.", before [; Attack: "You can't reach them from here."; Close: "The skylights are closed already."; Knock: "You can't reach them from here."; Open, Touch: "They can't be reached from down here, but regardless of that, they're probably just extra scenery added to the building for effect."; StandUnder: "You can't stand under the skylights while you're outside."; ], has pluralname; RoomObj LLPath "path" LibraryLane with name "road" "path" "lane", description "The path is lined with tiny pine trees and runs from the north to the south.", before [; Enter: "There's no need to dawdle here."; Knock: "You knock on the ground, but no one answers."; ]; RoomObj LLPine "pine trees" LibraryLane with name "small" "plastic" "pine" "pines" "tree" "trees" "miniature" "tiny", description [; if (self hasnt firstTime) give self firstTime; "Upon closer inspection, you find that the trees are all imitation plastic. Perhaps plantlife does not survive well down here."; ], before [; Attack: "What did the poor pitiful pines ever do to you?"; Cut: if (second == herring) "The herring doesn't make a scratch in the plastic trees. You wonder what possessed you to try such a thing."; <>; Irrigate: if (cupWater in player) <>; "You have no water."; Squeeze: "You give one of the pine trees a healthy squeeze."; Take: if (self hasnt firstTime) { give self firstTime; print "Upon closer inspection, you find that the trees are all imitation plastic. "; } "It's unlikely that you'll require the services of a tiny plastic pine tree down here."; ], has pluralname ~firstTime; ! Player unaware / Aware of plasticity Plaque LLPlaque "bronze plaque" LibraryLane with description "^LIBRARY^Nolava Odd Community^Building Code #089 "; RoomObj LLRocks "mountains of rocks" class GraniteObj, with name "rocks" "mountain" "mountains" "rock", description "Jagged teeth of granite project from the volcano floor carving the area into numerous valleys.", before [; Climb: "The rocks are too high to climb without proper equipment."; ], found_in LibraryLane LeonineHouse PavedRoad MazeEntrance VolcanoCenter EastHouse FinneyHouse FishPond, has pluralname; ! ######################## ! ### Lower Hall (LH2) ### ! ######################## Room LowerHall "Lower Hallway" with name "lowerhall", description "You stand at the foot of a grand double staircase which leads up to the second floor. The centerpiece of this room is a granite statue of Finney, which looks across the room from its proud pose. A smaller doorway is to the southeast and the entrance to the house is east.", before [; Shout: "No one answers."; Smell: "The air here is musty, as if no one has visited in a long time."; LookUp: "Above you, you can see the balcony on the second floor."; ], u_to UpstairsCorridor, e_to Foyer, se_to Workshop, cant_go "You can go up the stairs here, or east and southeast."; RoomObj LH2Balcony "balcony" LowerHall with name "balcony" "second" "story" "landing", description "The balcony is built at the landing of the double staircase and overlooks the granite statue.", before [; Climb: "Just go up the stairs."; Cut: "You can't reach the balcony from here."; ]; RoomObj LH2Staircase "double staircase" LowerHall with name "stairs" "staircase" "stairway" "double" "flight" "flights" "grand", description [; print "The staircase is very artistically designed, with two separate flights on either side of the statue meeting at a landing on the second floor."; if (self has flag) " There are some odd scratches on some of the stairs."; ""; ], before [; Climb: <>; Cut: if (second == jigSaw) { if (self has flag) "There's no need to damage the stairs further."; give self flag; print "You carve wavy lines in the staircase."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the staircase with your bare hands."; ], has ~flag; ! Whole / Vandalized RoomObj LH2Statue "statue" LowerHall class GraniteObj, with name "statue" "finney" "granite" "centerpiece", description "The statue depicts a portly mustachioed gentleman in foppish clothing. He carries a pair of keyboard mallets in one hand and smiles benevolently. At the base of the statue, ~FINNEY, MASTER XYLOPHONIST IN ALL TWENTY-FOUR KEYS~ is etched.", before [; Climb: "It's probably easier to take the stairs."; Cut: if (second == jigSaw) "The blade of the jigsaw is not sturdy enough to slice through the statue."; if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the statue with your bare hands."; Lift: "Not likely."; Listen: "You put your ear up to the statue but hear nothing unusual."; LookUnder: "It's doubtful that you'd be able to move the statue aside to look underneath it."; Pull, Push: "The statue cannot be moved; it is too heavy."; Search: "You discover nothing unusual about the statue."; ]; RoomObj LH2StatueArm "statue's arm" LowerHall class GraniteObj, with name "arm" "hand" "mallets" "keyboard" "pair", description "The arm of the statue carries a granite pair of keyboard mallets, frozen in time as if downbeat is imminent.", before [; Cut: if (second == jigSaw) "The blade of the jigsaw is not sturdy enough to slice through the statue."; if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the statue with your bare hands."; Pull, Push, Turn: "You tug on the statue's arm but it does not budge."; Search: "There is a hairline crack around the shoulder of the statue's arm."; Squeeze: "You shake the statue's hand firmly."; Take: "You can't seem to remove the arm or the granite mallets from the rest of the statue."; ]; ! ###################### ! ### Magic Lab (ML) ### ! ###################### Room MagicLab "Magic Lab" with name "magiclab", doorSpot 0, ! 0 - 6: Door locations description [; print "The lab of Leonine holds an impressive collection of magical devices, half of which you can't even begin to comprehend."; print " Overhead, tiny balls of light soar through the air, and the entire room feels alive with energy."; print " Where the average house would have a wide array of unnecessary furniture, the only artifices of this room are a giant wooden head with a string and a pyramid model."; print " The front doorway is west and there is also a closed door in the "; self.doorLoc(); " wall."; ], catchDoor [i; if (self.doorSpot == i) <>; "There is no exit on that wall."; ], doorLoc [; switch (self.doorSpot) { 0: print "northwest"; 1: print "southwest"; 2: print "east"; 3: print "northeast"; 4: print "southeast"; 5: print "north"; 6: print "south"; } ], moveDoor [; self.doorSpot++; if (self.doorSpot == 7) self.doorSpot = 0; ], before [; Cachinnate: "You laugh noisily at some unknown joke. In respone, a hollow voice recites poetry.^^~The secrets to fame and beyond,^for those who will glock at the pond.~"; Colour: "The balls of light overhead flicker through the colours of the rainbow before returning to their original searing white."; Listen: "Some of the devices give off a low humming sound while others are quiet."; LookUp: "Looking up at the balls of light makes you dizzy."; Shout: if (Leonine notin location) "A faint voice cries out, ~Shampooing sheepdogs, stop that racket! "; Think: "You wonder about the closed door."; ], w_to [; if (Leonine.trying == 0 && SongBag --> 1 && self hasnt flag) { give self flag; Cutscenes.playScene(); } return (LeonineHouse); ], nw_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(0)); ], n_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(5)); ], ne_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(3)); ], e_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(2)); ], se_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(4)); ], s_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(6)); ], sw_to [; if (Leonine.trying == 1) rfalse; return (self.catchDoor(1)); ], has ~flag; ! Cutscene not viewed / Cutscene viewed RoomObj MLBalls "balls of light" MagicLab with name "ball" "balls" "light" "lights" "soaring" "tiny" "orbs" "orb" "of", description "The tiny balls of light shoot through the air over your head in random patterns, seemingly without purpose.", before [; Attack: "By the time you have readied an attack, the balls of light have already flown away."; Catch, Knock, Take: "You jump into the air, hoping to catch one of the lights, but they seem to elude your grasp quite readily."; Listen: "The lights fly through air silently."; Smell: "None of the balls will hold still enough for you to smell."; Taste: "None of the balls will hold still enough for you to taste."; Touch: "None of the balls will hold still enough for you to touch."; ], has pluralname; RoomObj MLDevices "magical devices" MagicLab with name "magical" "magic" "devices" "device" "humming" "disappearing", description "Most of the devices are far beyond your comprehension. Some of the devices emit low humming sounds while others sporadically disappear from view. Still others have no discernable purpose and don't even look useful.", before [; Attack: "Just because you don't understand them doesn't mean you should destroy them."; Count: "You count at least forty devices, although the fact that several of them have a tendency to disappear without warning, tends to upset your count."; Eat, Taste: "Putting your tongue on these devices might be dangerous."; Lift, Pull, Push, Touch: "You don't want to risk breaking the devices, in case they are delicate."; Listen: "Some of the devices give off a low humming sound while others are quiet."; Search: "You can't make heads or tails of the devices."; Take: "Leonine might be upset if you took one of his experiments."; SwitchOn, SwitchOff: "You don't know how to operate the devices."; ], has pluralname; RoomObj MLDoor "closed door" MagicLab with name "closed" "door", description "The door looks normal enough. At about eye level, the words ~Private Quarters~ are written in stenciled letters.", before [; Close: "The door is already closed."; Attack, Enter, Open: if (self hasnt firstTime) { give self firstTime; print "As you reach for the door, it suddenly rolls up and reappears on the "; MagicLab.moveDoor(); MagicLab.doorLoc(); print " wall! "; if (Leonine in location) "^^Leonine cackles gleefully and claps his hands. ~It works!~"; ""; } else { print (string) random("The door eludes your grasp ", "The door slips away ", "The door rolls up "); print "and reappears on the "; MagicLab.moveDoor(); MagicLab.doorLoc(); print " wall."; if (Leonine in location && random(100) < 25) "^^Leonine sniggers at your efforts."; ""; } Knock: "The door mimics your knock threefold. It sounds like a den of woodpeckers."; Listen: "You press an ear against the door but hear nothing on the other side."; ], has ~firstTime; ! First time trying door / Tried door before RoomObj MLDoorway "front doorway" MagicLab with name "doorway" "front", description "The entrance stands open invitingly.", before [; Close: "You can't seem to close the door. Perhaps it is permanently open."; Enter: <>; Knock: "There is no door there."; Open: "The door is already open."; ]; RoomObj MLHead "wooden head" MagicLab with name "head" "talking" "wooden" "head" "statue" "base" "tall", quipCount 0, description "The giant wooden head has been painstakingly carved to resemble Leonine himself. At the base of the neck, there is an inscription:^^To my great friend, Leonine^From Finney^First in a series of four thousand, twenty-two. The head is seated on a tall base which is affixed to the floor.", before [; Consult: "The wooden head remains mysteriously quiet about that."; Attack: if (Leonine in location) "Leonine shoos you away from the wooden head. ~Don't be destroyin' my valuable property!~"; "You pound on the wooden head, but it remains pleasantly taciturn."; Climb: "There's no reason to clamber all over the wooden head."; Enter: "There is no way to get inside the head."; JumpOver: "The head is too tall to jump over."; Lift, LookUnder, Take: "You try to lift the head, but its tall base seems to be affixed to the floor."; Taste: if (Leonine in location) "Leonine blanches. ~Gitcher tongue off my talking head!~ He frantically scampers up to it and rubs it with his sleeve, muttering something about sterilization."; "The head tastes wooden."; Touch: "The wooden head has been sanded smooth and varnished."; Turn: "The head does not rotate."; ], life [; Ask: "The wooden head remains mysteriously quiet about that."; Kiss: "It doesn't return your affections."; WakeOther: "The wooden head remains silent."; ], quip [; if (self hasnt firstTime) { give self firstTime; print "A voice emanates from the wooden head..."; } print "^^~"; if (random(100) < 50) print (string) random("Some people consider donkey diving a form of entertainment.", "Those are my principles. If you don't like them I have others.", "I often quote myself; it adds spice to my conversation.", "Everybody talks about the weather and nobody does anything about it.", "May you live to eat the hen that scratches on your grave.", "Time is the storyteller you can't shut up.", "It is better to have loafed and lost than never to have loafed at all.", "We can't all be heroes...because someone has to sit on the curb and clap as they go by.", "The answer is 'yes' or 'no', depending on the interpretation.", "I am at two with nature.", "You can't change the music of your soul.", "If you put too many rabbits in one cage, they will pee on each other.", "Look for the shades of gray in any situation.", "Check for fur around the inside of every doughnut. You never know if a gopher's been through it.", "Keep your pet armadillo away from the Camelkian Toffees because he might eat them.", "Things are more like they are now then they ever have been.", "If your camel should drink from the spring at dawn, take the lunch meat out of your sandwich.", "I was determined to know beans.", "Arguments with furniture are rarely productive.", "Verbosity leads to unclear, inarticulate things.", "Hello, sailor!"); else ! Split up the sayings so as not to overflow the randomizer print (string) random("Gregarious gophers, is this piece over with yet?", "Oh, really?", "I personally think they should have gone with the maroon and violet.", "Let's do it all in shades of purple.", "Choosing the right colour for a fish pond is never an easy feat.", "Perhaps it will help if we import the armadillos first.", "How do you catch an armadillo if there aren't any to catch?", "With your teeth, of course.", "I think we've overstepped the bounds of common sense and ethical disposition of eating utensils.", "How should I know if he's trapped in his house?", "It's so much fun going up to the Castle and throwing my voice at the King!", "Maybe we can get a few ducks out of this whole mess.", "Have you decided which of the four moose you will hire?", "These granite undergarments are really chafing.", "I don't know...I'll have to consult with my talking head.", "Where else would a musician hide a key? The answer is obvious.", "We need more fudge down here.", "The answer is infinity.", "Could you give me that again?", "O-D-Y-S-S-E-U-S.", "Want to test out my grumganer system?", "But if we toss the cat into the basket first, how will the aardvark learn to swim?", "It must get pretty tedious explorin' a room with no exits in any of the four cardinal directions.", "You need to let the sea turtle do it for you. "); print "~"; ""; ], has ~firstTime animate; ! Never pulled string / Head talked before RoomObj MLHeadString "string" MagicLab with name "string" "line" "cord", description "The string is a few inches long and hangs from the wooden head's ear.", before [; Climb: "The string is definitely not strong enough to support your weight."; Pull: print "You pull on the string. "; return (MLHead.quip()); Take: "The string is attached to the wooden head."; Tie: "The string isn't long enough to make decent knots with."; Touch: "It's just an ordinary length of string."; ]; RoomObj MLPyramid "pyramid model" MagicLab with name "pyramid" "model" "statue", description [; print "It is a featureless white pyramid with a four foot square base."; if (RainMusic has firstTime) " The pyramid seems a bit wobbly."; ""; ], before [; Attack: "Beating on the sides of the pyramid does no good."; Climb, Enter: "Sitting or standing on top of the pyramid might be a bit painful."; Lift, Pull: "The model is too heavy."; Listen: "There is a low humming sound coming from the inside of the pyramid."; LookUnder: "You can't see much but it looks like nothing is there."; Push: if (RainMusic hasnt firstTime) "You press against one of the pyramid's faces but nothing happens."; "You wobble the pyramid on its uneven base."; Receive: if (RainMusic has firstTime) "The pyramid might be wobbly, but does not seem any more useful than when it was sturdy. You might as well leave it alone."; "That can't contain things."; Search: "You scrutinize every inch of the pyramid but find nothing which might explain its purpose."; Smell: "The pyramid has no discernable scent."; Squeeze: "Nothing happens to the pyramid."; Take: "The pyramid is too unwieldy to carry around."; Taste: "You lick the pyramid. It tastes peculiar, if not unpleasant."; Touch: "The pyramid feels pointy."; ]; ! ################ ! ### Maze (M) ### ! ################ Room Maze "Maze" with name "maze", description "You are in a maze of twisty little passages, all alike.", w_to [; if (self hasnt firstTime) { give self firstTime; print "You crawl out of the maze, thankful to be alive...^"; } return (MazeEntrance); ], e_to [; if (Slope hasnt firstTime) { give Slope firstTime; print "You crawl out of the maze, thankful to be alive...^"; } return (Slope); ], out_to "Easier said than done.", cant_go [; PlayerTo(Maze); ], has novisit ~firstTime; ! Never beat maze / Maze is beat RoomObj MMaze "maze" Maze with name "maze" "twisty" "little" "passages" "passage", description "One passage looks the same as the next. Your sense of direction is a bit disoriented.", before [; Enter: Maze.cant_go(); rtrue; ]; ! ########################## ! ### Maze Entrance (ME) ### ! ########################## Room MazeEntrance "Maze Entrance" with name "mazeentrance", description "The dirt path comes to an abrupt halt outside of a foreboding cave to the east. Amidst a patch of brambles, an old wooden sign proclaims, ~WARNING: Maze of Dread - Turn Back While You Still Can!~, followed by a smaller footnote, ~Building Code #081~.", before [; Colour: "The cave entrance slowly morphs from grey to pale yellow, but abruptly reverts, as if someone up high realized that a maize maze would be a horrible pun."; ], e_to [; if (Leonine.trying == 1) rfalse; if (MazeEntrance hasnt firstTime) { give MazeEntrance firstTime; print "Taking a deep breath, you plunge into the maze...^"; } return Maze; ], nw_to VolcanoCenter, cant_go "The cave entrance is to the east and a dirt path leads away to the northwest.", has ~firstTime; ! Never entered maze / Maze entered RoomObj MEBrambles "brambles" MazeEntrance with name "bushes" "brambles" "thicket" "thorns", description [; print "A gnarled copse of prickly brambles surrounds the wooden sign."; if (mazeMarker hasnt firstTime) " In the brambles is a scrap of paper."; ""; ], before [; Lift, Pull, Take: "Ouch! The thorns prevent you from handling the brambles."; Receive: "It's not worth the risk of scratching yourself up."; Search: print "A search of the brambles reveals nothing but thorns"; if (mazeMarker hasnt firstTime) " and a scrap of paper."; ""; ], has pluralname; RoomObj MECave "cave" MazeEntrance with name "cave" "entrance" "maze", description "The cave is formed from grey rock, and you can't see much beyond the entrance.", before [; Enter: <>; Search: "You see nothing in the entrance of the cave. Farther back, it is too dim to see."; ]; RoomObj MESign "wooden sign" MazeEntrance with name "sign" "wooden", description "Someone has posted a warning sign concerning what's inside of the cave.", before [; Lift, Pull, Take: "You pull on the sign, but evidently the post is buried deep beneath the ground."; ]; ! ###################### ! ### Mess Hall (MH) ### ! ###################### Room MessHall "Mess Hall" with name "messhall", description "You are standing in a long room, empty except for a wooden table in the center. Doorways lead back out to the north and south.", before [; Listen: if (Moilan in NorthGate) "You hear a faint humming to the north."; "Silence."; ], n_to NorthGate, s_to [; if (Leonine.trying == 0) print "You follow the dirt path back to the center of the community...^"; return (VolcanoCenter); ], cant_go "Exits from the mess hall are to the north and south."; RoomObj MHTable "table" MessHall with name "table" "bench" "picnic" "benches", description [; print "The table is fairly plain, with benches attached on either side."; if (child(self) ~= nothing) { print " On the table you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Eat, Taste: "It tastes woody."; Enter: "You have more important things to worry about than sitting."; Pull, Push: "You slide the table around on the floor."; Search: <>; Touch: "The table feels smooth, from many years of use, no doubt."; Turn: "You turn the table on yourself. Other than feeling clever, you feel no different and nothing happens."; ], has supporter transparent; RoomObj MHFudge "fudge brownie" MHTable with name "chocolate" "fudge" "brownie" "cookie", initial [; remove MHFudge; if (Moilan has firstTime) print "Moilan "; else print "A short bearded man in a helmet "; "is here, eating the last of the fudge brownie. Seeing your approach, he jumps. ~Hurr...lunchtime is over! Oi'd better get back to moi' post...~ He beats a hasty retreat to the north."; ], description "The brownie doesn't look more than a day-old. It probably hasn't been here long.", before [; Eat, Take, Taste: remove MHFudge; print "As you reach for the brownie, a voice rings out over your shoulder. ~Hurr hurr! You be getting away from moi' brownie, thief!~ "; if (Moilan has firstTime) print "Moilan "; else print "A short bearded man in a helmet "; print "charges into the room and snatches the brownie off the counter, popping it into his mouth with great relish. ~Mmmmm, fudge.~ He glares at you. ~You be staying offa moi' lunch, you hear me? Hurr!~ He stalks away."; if (Leonine in location) "^^Leonine chuckles. ~That man sure takes his chocolate confections seriously!~"; ""; Smell: "The brownie smells of rich, appetizing fudge."; ], has ~scenery; ! ######################## ! ### Mirror Room (MR) ### ! ######################## Room MirrorRoom "Mirror Room" with name "mirrorroom", description [; print "Every wall of this room is paneled with highly-glossy mirrors. Above you, a glowing blue sphere imbues the room with an ethereal quality. An unfinished chamber can be seen to the north, and the main laboratory is to the south."; if (self hasnt firstTime && trumpet in player) { give self firstTime; "^^Your trumpet is glowing with a faint blue glow."; } ""; ], before [; Colour: "The blue sphere cycles through a dazzling array of colours, making the mirror room seem like more of a hallucination than real life. The effects soon fade, although your eyes still see a few spots."; Listen: if (PLChairs in PoontLab) "You hear the clomping of dancing chairs to the south."; "You hear nothing unusual."; Shout: "Evidently, sound does not reflect off mirrors as effectively as light."; ], s_to [; if (theBear in location && theBear hasnt flag) theBear.move(1); return (PoontLab); ], n_to [; if (theBear in location && theBear hasnt flag) theBear.move(0); return (BearsDen); ], cant_go "The only exits from the Mirror Room are north and south.", has ~firstTime; ! Never glowed blue / Trumpet glowed blue RoomObj MRSphere "blue sphere" MirrorRoom with name "light" "blue" "sphere" "ball" "glowing", description "The sphere bathes the mirror room in a warm blue light.", before [; Attack, Climb, Cut, Knock, Lift, Lower, Pull, Push, Search, Take, Touch, Turn: "The sphere is out of your reach."; StandUnder: "You feel a little blue, but nothing happens."; ]; RoomObj MRWalls "mirrored walls" MirrorRoom with name "walls" "mirror" "mirrored" "mirrors" "panels" "wall" "highly-glossy" "highly" "glossy", description "The mirrors are well-shined and free of imperfections. It's almost as if you're in an infinitely long hallway.", before [; Attack, Burn, Cut: "You'd rather not tempt a bout of bad luck."; Enter: "Attempts at entering the mirrored walls result in a sore forehead."; Examine, Search: print "You see a stalwart trumpeter"; if (theDuck in location && theBear in location) print ", a duck, and a bear"; if (theDuck in location) print " and a duck"; if (theBear in location) print " and a bear"; " looking back at you."; Listen: "You hear nothing on the other side of the walls."; Open: "The mirrors do not seem to open."; Pull, Push: "You search for hidden switches, but the mirrors are solid."; Touch: if (self hasnt flag) { give self flag; "There is a rumble from deep within the earth and the room shakes. You panic for a moment, but realize that it's probably a natural coincidence."; } "Nothing happens."; ], has ~flag; ! Never touched mirror / Mirror touched. ! ########################### ! ### Mullog's Lair (ML2) ### ! ########################### Room MullogsLair "Mullog's Lair" with name "mullogslair", description "The smell of mildew and toffees permeates this subterranean lair. A grimy chute exits the south wall and a yawning crevice in the east wall leads back to the surface. The other end of the lair is much cleaner and finished, with a winding staircase leading up into the tower above you.", before [; Colour, Duck, Heavy, Jig, Literal, Love, Modulate, Rain: "Mullog pulls the trumpet away from your lips before you can complete the song. ~Too piercing!~"; Listen: "All you hear is Mullog mumbling to himself."; Shout: "Mullog covers his ears and whines."; Smell: "You smell a healthy mix of wet dog, Camelkian Toffees, mildew, and granite."; Think: if (Mullog hasnt flag) "You wonder how to get past Mullog into the tower."; ], u_to [; if (Mullog has flag) return (TowerTop); "With a silent shake of his head, Mullog pushes you away from the stairway. ~Not today, not today...~"; ], out_to [; <>; ], e_to PrivateAlley, s_to "The chute is too high up on the wall to climb into. You can't seem to get enough leverage from down here.", cant_go "You can leave the lair to the east or climb the stairs into the tower."; RoomObj ML2Chute "grimy chute" MullogsLair with name "grimy" "chute", description "The chute disappears into the darkness high above you on the south wall. If your geographical senses are correct, it probably leads up to the Quarry near Orchestra Pit.", before [; Climb, Enter: <>; Search: "You find nothing but rock dust in the chute."; ]; RoomObj ML2Hole "yawning crevice" MullogsLair with name "yawning" "crevice" "hole" "exit", description "A large hole to the east provides a route to the surface; courtesy of an unstable herring.", before [; Climb, Enter: <>; Dig: "There is already a ready-made hole here."; Enlarge: "The hole is in rocky earth. It would be very hard to enlarge it."; ]; RoomObj ML2Rocks "rock pile" class GraniteObj, with name "rock" "rocks" "pile" "heavy", rockCount 0, ! number of rocks dropped from the Quarry initial [; if (self.rockCount == 1) "A heavy rock has come to rest below the mouth of the chute."; if (self.rockCount < 6) "A small pile of rocks sits below the mouth of the chute."; if (self.rockCount > 5) "A large pile of rocks sits below the mouth of the chute."; ], description [; print "This must be the final resting place for "; if (self.rockCount == 1) print "that rock "; else print "those rocks "; "you threw away in the Quarry."; ], before [; Climb: if (self.rockCount == 1) "You stand on the rock. Thrilled with your prowess, you get off."; "You climb to the top of the pile but you are still a good distance below the chute."; Count: print "You see ", self.rockCount, " "; if (self.rockCount == 1) "rock."; "rocks in the pile."; JumpOver: print "You decide against jumping over the "; if (self.rockCount == 1) print "rock "; else print "rock pile "; "after noting the wall on the other side."; Lift, Take: "You have a strange, almost omniscient feeling that there will be no more puzzles involving heavy rocks."; LookUnder, Search: if (self.rockCount == 1) "You roll the rock aside but find nothing underneath it."; "There is nothing in the rock pile."; ], has ~scenery static; ! ######################## ! ### Music Salon (MS) ### ! ######################## Room MusicSalon "Music Salon" with name "musicsalon", description [; print "This room is small, but acoustically significant. The ceiling has been shaped to provide for the maximum benefit of the small ensembles which must have played here at one time,"; print " and even the smallest sound provides a rich timbre here. A Grandunk piano sits in the center of the room, just waiting to be played."; " There are no windows here, but a doorway in the back of the room leads north."; ], before [; Listen: if (self hasnt firstTime) { give MusicSalon firstTime; "echo echo ...^^Whoops! Wrong context...The acoustics of the room change subtly."; } "You can hear even the faintest scuffle of your movements in here."; Shout: "Your voice rings out clearly in the room."; ], n_to UpstairsCorridor, cant_go "The only way out is to the north.", has ~firstTime; ! Never Echoed / Echo RoomObj MSDoorway "doorway" MusicSalon with name "doorway", description "The salon's exit is to the north.", before [; Enter: <>; Knock: "There is no door there."; ]; RoomObj MSPiano "piano" MusicSalon with name "piano" "grandunk" "keyboard" "cover" "lid" "grand" "keys", description [; print "The piano is a very expensive model, coated in a sleek black material that doesn't inhibit its resonance. Eighty-eight polished keys sit elegantly in the keyboard, hinting at infinite musical possibilities. "; if (self has open) { print "The lid of the piano is open"; if (whitePiece in self) " and there is a white puzzle piece inside."; "."; } "The piano's lid is closed."; ], before [; Attack: "Assault an expensive piano like this? Your musician's instincts shudder at the thought."; Climb, Enter: "Your voice isn't practiced enough to be comfortable with singing from a piano top."; Cut: if (second == jigSaw) "You think about attacking the defenseless piano with the jigsaw, but it just doesn't seem right. Your musician's mentality overrides your need for senseless violence in the end."; "You think about attacking the defenseless piano, but it just doesn't seem right. Your musician's mentality overrides your need for senseless violence in the end."; Count: "You count eighty-eight piano keys."; Receive: "There's no reason to put anything in the piano. You might alter the tuning of the strings."; Lift: "You haven't received any official training in piano-lifting. You might pull a muscle."; Listen: "The piano is silent."; LookUnder: "You peek under the piano but don't see anything out of the ordinary."; Open: if (self has open) "The piano is already open."; if (whitePiece in self) { give self open; PronounNotice(whitePiece); "You raise the lid of the piano, revealing the strings inside. Tucked underneath the middle C string is a light puzzle piece. How could that have fallen in there?"; } give self open; "You raise the piano lid."; Play: print "You noodle a bit on the keys, but two-handed playing skills have always eluded you."; if (whitePiece in self) " A couple of the notes sound tinny, as if something is interfering with the movement of the strings."; ""; Pull, Push, PushDir: "This piano has no wheels on its legs."; Search: if (child(self) == nothing) "There is nothing in the piano that shouldn't already be there."; rfalse; Take: "You'll never be able to carry a piano around."; Touch: "You finger one of the keys gently. A sweet tone fills the air."; Tune: "You should probably leave that to a professional."; ], has container openable ~open; ! ########################### ! ### Narrow Passage (NP) ### ! ########################### QuarryRoom NarrowPass "Narrow Passage" with name "narrowpass", description [; print "In the dim light, you see that you have entered a roughly-carved hallway running in from the north and around a sharp turn to the northeast."; print " The light outlines a massive pile of uncut rocks against the south wall. In the midst of crumbled masonry, a large hole decorates the west wall,"; print " with stray rivulets of mud oozing from within."; if (self hasnt firstTime) { give self firstTime; if (random(100) < 40) "^^You feel a bit hungry. It doesn't matter though...you're a pretty tough cookie."; } ""; ], before [; Smell: "A breeze from the hole brings the scent of earth to the passage, mixing with the undisturbed dust in the air."; ], ne_to QuarryEntrance, n_to StoneQuarry, w_to PitBottom, cant_go "The passage curves from the north to the northeast.", has ~firstTime; ! Never visited / Visited RoomObj NPHole "hole in the west wall" NarrowPass with name "hole" "opening" "wall" "west", description "In the west wall, a hole connects to the bottom of Orchestra Pit. Evidently, years of run-off from the pit destroyed the masonry separating the pit from this passage.", before [; Climb, Enter: <>; Close, Fill: "It would be counterproductive to fill the hole back up."; Dig, Enlarge, Open, Pull, Push: "The hole is already big enough to fit through."; Jump: "It'd be much easier to just enter the hole normally."; Search: "The pit is on the other side of the hole."; Touch: "You run your fingers around the circumference of the hole."; ]; RoomObj NPMasonry "crumbling masonry" NarrowPass with name "masonry" "brickwork" "crumbling", description "Years of moisture and neglect made it possible for you to dig through the masonry.", before [; Attack: "You take out your aggression on some of the poor defenseless masonry, which crumbles even more under the sudden onslaught."; Take: "The masonry is too lightweight and crumbly to be of much good."; ], has proper; RoomObj NPMud "rivulets of mud" NarrowPass class MudObj, with name "rivulet" "rivulets" "mud", description "Mud slowly oozes over the lip of the hole, almost like melted fudge in its texture.", before [; Drink: "You're not quite that thirsty yet. You'd only resort to drinking water this muddy if your dehydrated flag was set."; ], has pluralname; RoomObj NPPile "pile of rocks" NarrowPass class GraniteObj, with parse_name [i j; ! only call it rock when rock isn't in room if (heavyRock in player || heavyRock in location) j = 'stones'; else j = 'rock'; while (NextWord() == 'pile' or 'rocks' or 'stones' or j) i++; return i; ], rockCount 0, description "The rock pile against the south wall consists mostly of massive chunks of granite, although you do see a few heavy rocks of more manageable size close to the top.", before [; Climb, Empty, Lift, Pull, Push: "Upsetting the rock pile would be extremely dangerous, especially when you're standing next to it."; Eat: "These rocks are much, much, much more than you can chew."; Jump: "You'd likely break a leg doing that."; JumpOver: "The wall on the other side hinders your progress."; LookUnder: "The rocks on the bottom of the pile are too heavy to move."; Receive: if (noun == heavyRock) { move heavyRock to self; self.rockCount--; "You put the rock back in the pile."; } Rub: "You'd need a file to smooth out these rocks."; Search: "It's difficult to search behind the larger rocks, but you don't seem to find anything."; Take: if (self.rockCount == 1) "You've already removed one rock from the pile. It should be sufficient for now, unless you plan on building that palatial manor you've always dreamed of."; if (heavyRock in self) { PronounNotice(heavyRock); <>; } rfalse; Touch: "The rocks feel rough and uncut, as if they'd come straight from a quarry."; ] has scenery container open ~openable transparent; RoomObj NPWall "south wall" NarrowPass class GraniteObj, with name "wall" "south", description "A rock pile sits against the south wall."; ! ####################### ! ### North Gate (NG) ### ! ####################### Room NorthGate "North Gate" with name "northgate", description [; print "A long granite wall surrounds the more elite section of the Odd Community. To the northwest, a massive gate has been erected to keep out rummer salesmen."; " The mess hall is south of here, and a small stone hut sits by the gate forlornly."; ], before [; Duck: if (Moilan in location) { give theDuck ~asleep; move theDuck to location; "As you play the final cadence, a duck appears before you. Moilan looks at the duck in surprise and smiles. ~Hurr! That be a cute duck, thar!~"; } Listen: if (Moilan in location) "You hear Moilan humming tunelessly."; Think: "You wonder about the best way to go through the gate."; Ululate: if (Moilan in location) "Moilan covers his ears as you wail loudly. ~Hurr! Stop that racket!~"; "You wail loudly. In reaction, a hollow voice recites poetry.^^~The answers to your life and fate,^if in the vault you nictitate.~"; ], nw_to [; if (Leonine.trying == 1) rfalse; if (NGGate has open) { if (Leonine.trying == 0 && self hasnt flag) { give self flag; Cutscenes.playScene(); } return (PrivateAlley); } "The gate is closed."; ], s_to MessHall, cant_go "The mess hall is south and a gate lies to the northwest.", has ~flag; ! Cutscene not viewed / Cutscene viewed RoomObj NGBuilding "mess hall" NorthGate with name "building" "mess" "hall", description "The mess hall is a plain building without gaudy architecture or pretension. It must be hard to sculpt granite.", before [; Climb: "There is nothing worthwhile on the roof of the mess hall."; Enter: <>; ]; RoomObj NGGate "massive gate" with name "massive" "gate" "recessed", description [; if (self in NorthGate) { if (self has open) "The gate is open."; "This gate bars any further travel to the northwest. There does not seem to be any sort of raising mechanism attached...perhaps it just swings open."; } "The gate is open and allows passage to the southeast."; ], before [; Attack, Burn, Cut: print "The gate is impervious to your assault. "; if (Moilan in location) "Moilan chuckles. ~Ha, ye wank!~"; ""; Climb: if (Moilan in location) "The guard waves you away. ~Away from the gate, churlio!~"; if (self in NorthGate) <>; "There's no reason to climb over the wall. Just use the gate."; Close: if (self has open) { give self ~open; "The gate swings shut with a click."; } JumpOver: "Not bloody likely."; Push, Open: if (Moilan in location) "The guard pushes you back. ~Ye cannot get through the gate while I'm on duty. Hurr!~"; if (self has open) "The gate is already open."; give self open; "The gate swings open noiselessly, with the feather touch of your finger."; ], found_in NorthGate PrivateAlley, has ~open openable; RoomObj NGHelmet "Moilan's helmet" NorthGate with name "helmet" "hat" "metal" "coif", description "The helmet is standard pikeman issue and fits Moilan's head snugly.", before [; Knock, Take: "~Offa moi' helmet, churlio!~ Moilan swats you away."; ], has proper; RoomObj NGHut "stone hut" NorthGate with name "stone" "hut" "door" "wooden", description "The hut lacks the grandiloquence of the gate which it stands next too. There are no windows, just a plain wooden door on the front.", before [; Attack, Burn, Climb, Cut, Enter, JumpOver, Lift, Open, Pull, Push, Search, Touch: if (Moilan in location) "The guard waves you away. ~Hurr! Offa me hoose, ya loon!~"; "A sickly voice comes from inside the hut. ~Boour! I hear you out thar. Get away from me hoose, ya loon!~ Moilan still sounds sick, but he should be just fine in a little while."; ]; Plaque NGPlaque "bronze plaque on hut" NorthGate with name "plaque" "on" "hut", description "The plaque resembles others scattered throughout the community.^^NORTH GATE^Nolava Odd Community^Building Code #048 "; RoomObj NGSick "Moilan" with name "moilan" "guard" "bearded" "beard" "man", description "You can't see Moilan anywhere, but you can hear him inside the stone hut.", before [; Examine: rfalse; default: <>; ], orders [; "A sickly voice comes from inside the hut. ~Boour! Get away from me hoose, ya loon!~ Moilan still sounds sick, but he should be just fine in a little while."; ], has talkable proper; RoomObj NGSpear "Moilan's spear" NorthGate with name "weapon" "spear" "pike" "pole", description "The spear is a few inches taller than Moilan himself.", before [; Take: "~Offa moi' spear, churlio!~ Moilan swats you away."; ], has proper; RoomObj NGWall "granite wall" NorthGate class GraniteObj, with name "granite" "wall" "long", description "The wall circles an entire section of the community to the north and northwest. It stands about nine feet tall and a recessed gate provides access to the inside.", before [; Climb: print "You start to climb, but are surprised to find that the wall seems to grow, the higher you climb! There is always a good four feet more to go, no matter where you are. Resigned to using the gate the normal way, you slip back down."; if (Moilan in location) " Moilan chuckles at your efforts."; ""; JumpOver: "Not bloody likely."; ]; ! ####################### ! ### OfficeDark (OD) ### ! ####################### Room OfficeDark "Darkness" with name "officedark", count 0, ! Which room of darkness player is in timer 0, ! Echo of trumpet dies away after time description "It is pitch black. You are unlikely to be tripped by a polydactyl raccoon.", before [; Drop: "You'd better not drop anything in the darkness. It could be lost forever."; Examine, LookDown, LookUnder, LookUp, Search: "You see nothing but a murky blackness."; Jump: "Jumping produces a faint echo in the darkness."; Listen: "The only sound you hear is faint tinkling of a wind chime, somewhere far away."; Shout: "Shouting produces a faint echo which quickly dies away."; Sing: "Singing produces a faint echo which quickly dies away."; Sleep: "You'd prefer knowing where exactly you were sleeping before you did that."; Taste: if (noun == trumpet) "There's probably a better way to get a taste of music."; "The darkness has an indescribable taste."; Think: "You think about how you can find your way around in the darkness."; Touch: if (noun == trumpet) "You run a finger along the leadpipe of the trumpet."; "You blindly feel around in the darkness, hoping to find something that will give you some direction."; WaveHands: "No one, not even yourself, can see you."; ], ne_to [; if (self has flag && self.count == 0) { self.count++; "You follow the sound of the echo to the northeast, gingerly moving through the darkness."; } ], e_to [; if (self has flag && self.count == 1) { self.count++; "You follow the sound of the echo to the east, gingerly moving through the darkness, down an incline."; } ], sw_to [; if (self has flag && self.count == 1) { self.count--; "You follow the sound of the echo to the southwest, gingerly moving through the darkness."; } ], u_to "You can't go that way.", d_to [; <>; ], in_to [; <>; ], out_to [; return (self.cant_go()); ], cant_go [; if (random(100) <= 10) { deadflag = 1; "There is a rustling underfoot and suddenly you find yourself propelled through the air! You brace yourself to hit the ground, only to belatedly find that the ground is not where you expect it. As a devious raccoon runs off triumphantly, you tumble down a very painful rocky incline."; } print_ret (string) random("You fumble around in the darkness without a sense of direction, but only get yourself even more disoriented.", "You blindly move a few paces in the darkness. "); ], each_turn [; if (self has flag) { if (self.timer == 1) { give self ~flag; self.timer = 0; "^The sound of the trumpet echo fades away completely."; } self.timer++; } if (random(100) < 20) print_ret (string) random("^You sense a slight movement near your feet.", "^There is a faint rustling in the darkness.", "^Something treads across the stone floor nearby."); ], has ~flag ! Trumpet silent / Trumpet Echo ~general; ! Never scored / Score for Trumpet RoomObj ODBackground "darkness" OfficeDark with name "floor" "dark" "walls" "darkness" "murky" "black" "room", description "It is pitch black. You are unlikely to be tripped by a polydactyl raccoon.", before [; Examine, LookDown, LookUnder, LookUp, Search: "You see nothing but a murky blackness."; Listen: "The only sound you hear is faint tinkling of a wind chime, somewhere far away."; Smell: "You catch a whiff of fresh air. Evidently this area is not as sealed off like the quarry was."; Taste: "The darkness has an indescribable taste."; Touch: "You blindly feel around in the darkness, hoping to find something that will give you some direction."; ], has proper; RoomObj ODRaccoons "raccoons" OfficeDark with name "raccoon" "raccoons" "polydactyl", description "It's too dark to see, but you hope that none are nearby.", before [; Listen: "The more you listen, the quieter it is. The raccoons may be hiding."; Smell: "You don't smell any strong raccoon odours, but you could be mistaken."; Touch: "You blindly feel around in the darkness, but find no raccoons."; ], has pluralname; ! ####################### ! ### Old Quarry (OQ) ### ! ####################### QuarryRoom OldQuarry "Old Quarry" with name "oldquarry", description [; print "You stand on a cart path which crosses through a low sprawling cavern. Although it looks as if granite was once mined here,"; print " the lack of tools and supplies in the area suggest that this area was picked clean several years ago."; print " The odd set of raccoon tracks can be seen through the granite pillars which line the path, and small clouds of dust take flight with each step across the uneven floor."; " The trail leads into a dead end to the southwest, and down a long rocky incline to the east."; ], before [; Listen: "If you remain quiet, you can hear the faint rustling of a raccoon somewhere in the quarry."; ], sw_to DeadEnd, d_to ConstructOffice, e_to ConstructOffice, cant_go "The path through the quarry runs from southwest to east.", each_turn [; if (random(100) < 10) print_ret (string) random ("^Somewhere in the quarry, something chitters excitedly.", "^You hear a rustling close by. "); ]; RoomObj OQCavern "cavern" OldQuarry class GraniteObj, with name "cave" "cavern" "quarry" "ceiling" "roof", description "The cavern is vast, although the ceiling is just a few inches above your head. A path connects the Construction Office to the east with an alcove to the southwest."; RoomObj OQDeadEnd "dead end" OldQuarry class GraniteObj, with name "dead" "end" "alcove", description "The alcove is at the far end of the quarry. There seems to be a trapdoor in the ceiling but you cannot make out much detail from here.", before [; Enter: <>; ]; RoomObj OQIncline "incline" class GraniteObj, with name "rocky" "slope" "incline", description "The incline is fairly steep in some places and frequently covered with a fine layer of granite dust elsewhere. It could be fairly dangerous to someone in the dark who isn't expecting it, but it's quite harmless in the light.", before [; Climb, Enter: if (self in OldQuarry) <>; <>; Rub: "You wipe away a bit of dust, but there's too much to do any good."; ], found_in OldQuarry ConstructOffice; RoomObj OQPath "path" with name "path" "trail" "dust", description [; if (self in OldQuarry) "The path runs through the dust from the southwest to the east. It was probably used to transport granite from deep in the quarry."; if (self in DeadEnd) "The path runs into the old quarry to the northeast."; ], before [; Knock: "You knock on the ground, but no one replies."; ], found_in OldQuarry DeadEnd; RoomObj OQPillars "pillars" OldQuarry class GraniteObj, with name "pillar" "pillars", description "Naturally occurring pillars of granite adorn the room in random places. You can't be sure if they were left behind for structural support or just dug around for reasons of laziness. The smallest pillars are still four feet in diameter.", before [; Climb: "You manage to shinny a few inches up the pillar before your progress is halted by the ceiling."; ], has pluralname; RoomObj OQTracks "raccoon tracks" OldQuarry with name "raccoon" "tracks" "footprints" "marks", description "The tracks are abundant in this part of the quarry. Several of the footprints seem to have six claws, although it could just be several overlapping sets of tracks.", before [; Construct: "There's no reason to make tracks."; Rub: "You sift away some of the raccoon tracks."; Touch: "Your hand is roughly twice the size of a claw print."; ], has pluralname; ! ####################### ! ### Opera Hall (OH) ### ! ####################### Room OperaHall "Opera Hall" with name "operahall", description "Every step you take serves to showcase the wonderful acoustics in this building. The ceiling is a full two stories above you and the room is brighter than normal because of its blue glass walls. Beyond the seats, you see a small semicircular stage with a xylophone.", before [; Colour: "The walls of the hall turn yellow as you play the piece. The beautiful effect of the light shining through lasts only a few moments, however, before the walls revert to blue."; Heavy: "The xylophone book looks like it might break its stand, but fortunately remains supported."; LookUp: "The ceiling high above you has been designed to provide the best acoustics possible."; Modulate: if (self has flag) "The music in the xylophone book blurs and transposes itself again."; give self flag; move doorKey to self; score = score + 4; print "The music in the xylophone book seems to blur as you play the melody. One by one, each major key in the book becomes minor and each minor key becomes major."; print " However, the spell seems to go awry at the twenty-fifth key, finding nowhere to transpose it to. As a result, the final transposition manifests itself physically."; print " There is a metallic click and the twenty-fifth key suddenly appears on the floor."; if (theDuck in location) print " The duck quacks and looks at you proudly."; print "^^[You have just gained four points in Musical Transposition.] "; Improvement.playScene(); ""; Shout: "Your voice echoes throughout the hall."; ], w_to OutCourt, cant_go [; print "The only exit from the Opera Hall is to the west. "; if (self hasnt firstTime) "Apparently the Nolava Community is not concerned with the fire hazards created by a single exit."; ""; ], has ~flag ! Key not modulated / Key modulated ~firstTime; ! Never false-exited / False-exited before RoomObj OHBook "practice book" OperaHall with name "book" "tampered" "practice" "music" "page" "stand", initial "Next to the xylophone sits a monstrous leather-bound book mounted on a stand, open to a page in the middle.", description "Across the top of each page, the title has been printed in small fancy letters: ~The Well-Tampered Xylophone - A Collection of Twelve-Thousand-Two-Hundred-Seventy-Four Etudes in Each of Twenty-Five Major and Minor Keys~. The current page looks to be fairly difficult, especially for a non-keyboardist like yourself.", before [; Close: "You have a feeling that if you closed the book, you'd never be able to open it again."; Lift, Pull, Push, Take: "It would take a horse and cart to even consider moving that book."; Open: "The book is already open."; Play: "You try to make sense of the hand-written music, but it is too difficult for you to play."; Turn: "You thumb through the book."; ], has ~scenery static; RoomObj OHCeiling "ceiling" OperaHall with name "ceiling" "roof", description "The ceiling has been designed for maximum acoustical effect.", before [; Knock, Push, Pull: "You can't reach that high."; ]; RoomObj OHSeats "seats" OperaHall with name "chairs" "seats" "seat", description "Despite the grandeur of the opera hall, there are only enough seats for twelve people. This is, after all, a very small community.", before [; Enter: "You take a seat. After a few moments, it becomes apparent that no shows will be starting anytime soon. Seeing no reason to remain sitting, you get back up."; Take: "You have no need to carry around a seat."; ], has pluralname; RoomObj OHStage "stage" OperaHall with name "stage" "semicircular" "circular", description "The stage is made of varnished wood and is about two feet higher than the surrounding seats.", before [; Enter: if (theDuck in location && Leonine notin location) "You climb up on stage and recite a little poetry. The duck looks at you proudly. ~Quack!~ Fulfilled, you climb down."; if (Leonine in location && theDuck notin location) "You climb up on stage and recite a little poetry. Leonine shrugs. ~I've heard better...~ Embarassed, you climb down."; if (theDuck in location && Leonine in location) "You climb up on stage and recite a little poetry. Leonine applauds politely and the duck quacks. Fulfilled, you climb down."; "You'd prefer to have an audience when you perform in a hall."; ]; RoomObj OHWall "blue glass walls" OperaHall with name "blue" "glass" "walls" "wall", description "The walls of the building are made of some sort bluish glass. Light shines through freely.", before [; Attack: "You deal the walls a resounding blow, but surprisingly, your attack is rebuffed. The designer of the hall apparently had a contingency plan for vandals like yourself."; Blow: "Feeling rather childish, you press your lips against the glass and make a blowfish."; Climb: "There is nothing to hold on to."; Rub, Touch: "You leave a fingerprint on the glass."; Taste: "Licking the walls has no effect."; ], has pluralname; RoomObj OHXylophone "xylophone" OperaHall with name "xylophone" "keyboard" "bells" "xylo" "baleen" "baleens" "side", description "The xylophone seems to be constructed from baleens. It is highly polished and there are a pair of mallets hanging off the side.", before [; Blow: "A xylophone is not a wind instrument."; Knock, Play: "You pick up the mallets and play a fairly decent scale."; Take: "The xylophone is too big to be porting about and there are no wheels to roll it."; Tune: "You gently sound a middle C on the xylophone."; ]; RoomObj OHXyloMallets "mallets" OperaHall with name "mallets" "sticks" "beaters" "strikers", description "The xylophone seems to be constructed from baleens. It is highly polished and there are a pair of mallets hanging off the side.", before [; Play: "You pick up the mallets and play a fairly decent scale."; Take: "The mallets are attached to the xylophone. Although there is enough slack to play with them, you cannot seem to remove them from the xylophone."; ], has pluralname; ! ############################## ! ### Outside Courtyard (OC) ### ! ############################## Room OutCourt "Outside Courtyard" with name "outcourt", description "The western path ends between a granite wall to the north and a two-story building to the east. A tasteful granite arch to the northeast leads into a courtyard which resembles a giant grassy checkerboard. The capstone of the archway bears a small bronze plaque.", ne_to [; if (Leonine.trying == 1) rfalse; if (trumpet notin player) "The courtyard seems a little eerie. You'd feel better if you didn't leave your trumpet behind."; LetterTracker.resetPath(); print "As you step through the archway, a small bell chimes far to the north, and letters of the alphabet suddenly appear in the air over the courtyard.^"; return (LM18); ], in_to OperaHall, w_to VolcanoCenter, e_to OperaHall, each_turn [; return (VolcanoCenter.farRain()); ], cant_go "The path leads back west, a building is to the east, and an archway leads into a courtyard to the northeast."; RoomObj OCArch "courtyard archway" OutCourt with name "arch" "archway" "entrance", description "Like many of the structures in the volcano, the archway in the wall is made from granite. In this case, finely-cut granite has been used in place of brick to form a corbeled arch.", before [; Attack: if (second == nothing) "A swift blow to the arch leaves you in pain."; "The arch is not affected by your onslaught."; Enter: <>; LookUnder: "The archway is clear of obstructions."; Pull: "Your attempts to topple the archway fail."; Rub, Touch: "The granite bricks are smooth to the touch."; Taste: "Licking the archway brings a vaguely unappetizing taste to your lips."; ]; RoomObj OCBuilding "opera hall" OutCourt with name "building" "opera" "house" "two-story" "story" "hall" "doorway", description "The building is constructed from some sort of blue glass, and probably shines brilliantly on days when the sun shines through the volcano opening. Over the entrance to the east, you see:^^OPERA HALL^Nolava Odd Community^Building Code #101 ", before [; Climb: "The building is too tall to climb."; Enter: <>; ]; Plaque OCPlaque "bronze plaque" OutCourt with name "capstone", description "The bronze sign seems fairly new, showing no signs of weather deterioration.^^SECURITY MAZE^Nolava Odd Community^Building Code #113 "; RoomObj OCWall "courtyard wall" OutCourt class GraniteObj, with name "wall", description "The wall is made of smooth grey granite. It seems fairly new, in respect to other works of architecture you have seen down here.", before [; Attack: "A swift bare-handed chop at the wall leaves your hand in pain."; Climb: "Why climb when there's a perfectly good entrance?"; Rub, Touch: "The granite bricks are smooth to the touch."; Pull: "Your attempts to topple the wall fail."; ]; ! ##################### ! ### Overlook (OL) ### ! ##################### Room Overlook "Overlook" with name "overlook", description "The slope melds with the side of the volcano to the east, ending in an abrupt dead end. Although the clearing is rather cramped, it provides a breathtaking view of the valley to the south. Nestled in the face on the east side is a small empty recess, probably left from some ancient rockslide, since a sizeable pile of rubble has collected against the north ridge.", before [; Colour: if (OLBoulder in self) "The boulder shifts from grey to mauve and back to grey."; Heavy: if (OLBoulder in self) { if (player in self) { deadflag = 1; "As you sound the last notes of Heavy Heart, the boulder burgeons with a sudden added weight. With a crash, it falls out of the rubble and begins rolling down the footpath. You try to run, but a ridge on one side and a cliff on the other makes for very few escape routes. After a frantic race, the boulder wins, and its face is adorned by a peel-off decal of a trumpeter."; } if (player in OLRecess) { score = score + 2; remove OLBoulder; give FrontDoor flag; give FrontDoor ~visited; print "From the safety of the recess, you play ~Heavy Heart~. The boulder shifts dangerously before finally succumbing to the force of gravity."; if (theDuck in location) { remove theDuck; print " The duck quacks excitedly and flies away in the face of the oncoming boulder."; } " It rolls down the footpath, bouncing and careening out of sight. After several moments, you hear a sound like muffled fireworks from somewhere in the valley.^^[You have just gained two points in Moving Mountains.] "; } } ], w_to Slope, d_to Slope, n_to "A long ridge of rock prevents movement to the north.", s_to [; <>; ], cant_go "The only way out of the clearing is the narrow path to the west."; RoomObj OLBoulder "boulder" Overlook with name "boulder" "rock", initial "Leaning precariously against the north ridge is a massive boulder, almost as wide as the entire clearing.", description "The boulder sits atop a pile of rubble against the north ridge.", before [; Attack: "You pound futilely on the boulder."; Blow: "Blowing on the boulder fails to move it. You stop before you pass out."; Climb: "Climbing onto the boulder would dislodge it, but it would also take you with it."; Lift, Take: "Not bloody likely."; LookUnder: "There is a pile of rubble underneath the boulder."; Pull, Push, PushDir: "You don't see a way to move the boulder without getting crushed underneath it. There is no room behind it to push it away."; Rub, Touch: "You knock on the boulder. It is definitely not hollow."; Taste: "The boulder leaves a bad taste in your mouth."; ], has ~scenery static; RoomObj OLClearing "clearing" Overlook with name "clearing" "dead" "end", description "The clearing is fairly small, but provides a good view of the valley below you.", before [; Examine: rfalse; ]; RoomObj OLRecess "recess" Overlook with parse_name [i j k; if (self has firstTime) { j = 'charcoal'; k = 'etching'; } else { j = 'hole'; k = 'hole'; } while (NextWord() == 'small' or 'empty' or 'recess' or 'shallow' or 'cubbyhole' or 'hole' or j or k) i++; return i; ], description [; print "The open recess is only a few feet deep, but you could probably squeeze into it if you tried."; if (self hasnt firstTime && random(100) < 10) give self firstTime; if (self has firstTime) " On the back panel of the recess, is a strange charcoal etching of a man looking at an etching in a shallow recess."; ""; ], after [; Enter: "You crouch down and squeeze into the recess."; Exit: "You roll out of the recess and stretch gratefully."; ], has enterable container open ~openable transparent ~firstTime; ! Never looked at / Looked at RoomObj OLRubble "rubble" Overlook with name "rubble" "debris" "rocks" "pile" "rockslide" "slide", description "An assortment of rocks rests against the north ridge.", before [; LookUnder, Search, Take: "You sift through the rubble but don't find anything interesting."; ], has pluralname; ! ####################### ! ### Paved Road (PR) ### ! ####################### Room PavedRoad "Paved Road" with name "pavedroad", description "A well-maintained road threads across the barren floor of the volcano, running roughly northeast to west. The road is probably wide enough for three camels to travel side by side.", ne_to VolcanoCenter, w_to FinneyHouse, each_turn [; return (VolcanoCenter.farRain()); ], cant_go "The road runs from west to northeast. Ponderous mountains of granite close in on either side."; RoomObj PRCamels "camels" PavedRoad with name "camels" "three", description "You don't see any camels here. They're probably off targeting children.", before [; Examine: rfalse; default: "What camels?"; ], has pluralname; RoomObj PRRoad "road" with name "road" "path" "pave", description "The road is kept in good condition, although it does not seem to have much traffic these days.", before [; Knock: "You knock on the road, but no one is answering."; ], found_in PavedRoad FinneyHouse; ! ####################### ! ### Pit Bottom (PB) ### ! ####################### Room PitBottom "Pit Bottom" with name "pitbottom", timeCount 0, ! Time spent in pit descCount 0, ! Show "steps squelch" description [; self.descCount++; print "The pit is about twenty yards in diameter and run-off from the sides drains into a large mud puddle in the center of floor."; if (self.descCount == 1) print " The air is thick with the odour of mud and mildew.^^You stretch and do a quick check, thankfully finding that you're still whole."; else print " Every step squelches like grapes under a cart wheel and the air is thick with the odour of mud and mildew."; if (self has flag) print " Far above you can see light peeking around a giant metal hatch which is covering the opening of the pit."; if (self.timeCount == 0) { pitGuards.bottomQuip(self.timeCount); self.timeCount++; rtrue; } ""; ], before [; DigRoom: "You try to dig a hole in the ground, but mud just oozes back into it."; Jump: "Jumping results in an unsatisfying splash of mud and grime."; Listen: if (self hasnt flag) "You hear the occasional drip of water and the two guards high above you."; "Apart from the occasional drip of water, it is silent when you're standing still."; LookDown: "Mud. It seems to have a muddy consistency."; LookUp: if (self has flag) "Far above you can see faint cracks of light around a giant metal hatch which is covering the opening of the pit."; "You see the guards, standing at the edge of the pit far above you."; Shout: give FallingPit flag; "You shout as loud as you can, but no one comes to your rescue."; Sleep: "If you slept in the mud, you might roll over and suffocate, or even worse, get eaten by a lurking mud beast."; Smell: "The thick musty scent of earth assails your nostrils."; Swim: "The puddle isn't deep enough to swim in."; Think: "You try to think of a way to get out of this pit."; WaveHands: if (pitGuards in PitBottom) "~Hallo there!~ The hook-nosed guard waves back."; ], u_to [; <>; ], e_to [; if (PBHole notin PitBottom) "You seem to be trapped in a pit at the moment."; if (PBHole.holeSize < 5) "The hole is too small to get through."; if (PitBottom hasnt flag) { print "You gingerly climb through the hole, careful to avoid the occasional drip of water which threatens your pate.^^Up above, Jim leans over the edge of the pit, squinting. ~Hallo down there! Where'd ye go?~ He frowns and turns to Rob. ~He must have already gotten eaten by the little devils... Poor fellow"; if (FallingPit has flag) print "!~"; else print ", he didn't even have a chance to shout out!~"; print "^^~Indeed...~ muses Rob.^^The two continue their vigil into the pit for a few more minutes before deciding that nothing else will happen."; print " ~Ah well, Jim, there's always that lad involved in the pickle caper that we get to toss in next week! Come on, let's cover the pit back up!~^^"; print "From your vantage point, you watch as the two guards struggle with a heavy metal hatch. There is a resounding clang as the hatch is locked into place"; print " and fourteen less-resounding clicks as the guards ensure that it will not be openable from the inside. A few more minutes pass and all sounds from above fade away."; print " In the pale light which peeks around the hatch, you take stock of your new surroundings, resigned to your new dismal home.^"; give PitBottom flag; give self scenery; remove pitGuards; remove FPClothes; move PBHatch to self; } return (NarrowPass); ], out_to [; <>; ], cant_go "You seem to be trapped in a pit at the moment.", each_turn [; if (pitGuards in PitBottom) pitGuards.bottomQuip(self.timeCount); switch (self.timeCount) { 1: move PBCase to PitBottom; 2: print "^The trumpet case continues its descent, occasionally rebounding off the sides of the pit.^"; 4: print "^Spinning like a house dropped from a cyclone, the trumpet case falls further into the pit. It is only about ten feet above, and falling fast.^"; 5: print "^With a sickening squish, the case lands in the mud, its top torn off and clasps lost in transit. The trumpet rolls out, and though a little dirty, it seems to have weathered the fall pretty well. It's a good thing your case was Doofa-certified!^"; remove PBCase; move PBBrokenCase to PitBottom; move trumpet to PitBottom; } self.timeCount++; rtrue; ], has ~flag ~firstTime; RoomObj PBBrokenCase "broken case" with name "case" "smashed" "broken" "container" "pack" "large", initial "Nearby, the shattered trumpet case sits, looking hopelessly destroyed.", description "The fall has rendered this trumpet case useless. The clasps have fallen off into the mud and the lining is ripped to shreds. Luckily the mud saved your trumpet.", before [; Close, Open: "The case can no longer be opened or closed."; Fill, Receive: "The case's current disrepair keeps it from holding anything in."; Rub: "You brush away a bit of mud. It still looks pretty bad."; Search: "All of your trumpet supplies seem to have gotten lost on the way down."; Smell: "The fine leathery smell of the case is slowly being overpowered by the stench of mud."; Take: "It's useless in its current state."; ], has ~scenery; RoomObj PBCase "trumpet case" with name "case" "falling" "trumpet" "container" "large" "house" "tpt", description [; print_ret (string) random("It is currently careening off the sides of the pit in a mad dash for the bottom.", "There is a trumpet case falling from the sky. On any other day, that might seem peculiar. "); ], before [; Catch: "The force of catching the case at its current speed would pound you into the mud like a nail."; Examine: rfalse; StandUnder: "Standing under a large falling trumpet case would be suicide! "; default: "The case is too high up to do that."; ], has container open; RoomObj PBHatch "giant metal hatch" with name "giant" "metal" "hatch", description "you'll never be able to open the hatch from this side.", before [; Examine: rfalse; default: "You can't reach the hatch from here."; ]; RoomObj PBHole "hole" with parse_name [i j k l; if (self.holeSize > 3) j = 'large'; else j = 'small'; if (self.holeSize >= 4) { k = 'shapes'; l = 'vague'; } else { k = 'hole'; l = 'hole'; } while (NextWord() == 'hole' or 'opening' or 'muddy' or j or k or l) i++; return i; ], holeSize 0, initial [; switch (self.holeSize) { 1: "A small hole, about the size of your fist is in the east side."; 2: "A cantaloupe-sized hole is here."; 3: "There is a hole here, about as big as four koalas pressed back to back."; 4: "A hole, about half your size, is taking shape to the east."; 5: "A large man-sized hole dominates the east side."; } ], description [; switch (self.holeSize) { 1: "It is hard to tell what is on the other side from here. But the hole looks like it could easily be enlarged."; 2: "The hole is now the size of a cantaloupe. It is still hard to tell what is on the other side."; 3: "The hole is about as big as four koalas pressed back to back. It is still hard to tell what is on the other side from here."; 4: "The hole is about half your size now. Vague shapes can be seen on the other side but you can't make out any detail."; 5: "A large man-sized hole dominated the east side. On the other side, you see a narrow passageway, a good deal cleaner than your current position."; } ], before [; Climb, Enter: <>; Close, Fill: "It would be counterproductive to fill the hole back up."; Dig, Enlarge, Open, Push, Pull: if (self.holeSize < 5) { self.holeSize++; print "You pull away some mud from around the hole. "; switch (self.holeSize) { 2: "It is a little bigger now."; 3: "It is now fairly sizeable, but still not big enough to go through."; 4: "It's fairly big, about half your size, and vague shapes are taking form on the other side."; 5: score = score + 1; "It is now large enough to fit through. ^^[You have just gained one point in Masonry Deconstruction.]"; } } "The hole is already big enough to fit through."; Jump: "It'd be much easier to just enter the hole normally."; Receive: "There's no reason to do that."; Search: if (verb_word == 'reach') "A little groping reveals nothing unusual besides mud."; <>; Smell: <>; Take: "It might be a bit surreal if you could take the hole."; Taste: <>; Touch: "You run your fingers around the circumference of the hole."; ], has ~scenery static; RoomObj PBInvisible "sword, lamp, and spellbook" PitBottom with name "sword" "lamp" "lantern" "brass" "elvish" "spellbook", description "You can't see any such thing.", before [; default: "You can't see any such thing."; ]; RoomObj PBLight "light" with name "light", description "The light is just enough to see by.", before [; Examine: rfalse; default: "The light is intangible."; ], found_in PitBottom NarrowPass StoneQuarry QuarryEntrance; RoomObj PBMonsters "sea monsters" PitBottom with name "monsters" "sea", description "You can't see any monsters...yet.", before [; default: "You can't see any monsters...yet."; ], has pluralname; RoomObj PBPuddle "mud puddle" PitBottom class MudObj, with name "mud" "puddle" "pool" "run-off", description "The puddle collects run-off from the sides of the pit, and is a murky brown. It's only a couple inches deep, so you are fairly certain there are no sea monsters lurking just below the surface.", before [; Dig: "You attempt to burrow through the floor, but mud simply oozes back into the hole."; Drink: "You're not quite that thirsty yet. After seeing this mud, you'd sooner drink trumpet oil."; Empty: <>; Jump: "Jumping results in a satisfying splash of mud and grime."; JumpOver: "You successfully clear the puddle."; Receive: switch (noun) { trumpet: "Your trumpet's been through enough. There's no need to drop it in the mud puddle."; note: "If you dropped the note in the puddle, you wouldn't be able to read it anymore."; } "There's no reason to put that in the mud puddle."; Search: "You bravely run your fingers through mud, but you don't find any lurking sea monsters."; Sleep: "If you slept in the mud, you might roll over and suffocate, or even worse, get eaten by a lurking mud beast."; ], each_turn [; if (random(100) <= 10 && PitBottom has flag) print_ret (string) random("^Tiny bubbles appear in the puddle.", "^Ripples glide across the surface of the mud puddle.", "^Something disturbs the stillness of the mud. "); ], has enterable transparent; RoomObj PBSides "sides of pit" with name "sides" "side" "mud" "pit" "walls" "wall", article "the", description "The sides of Orchestra Pit are slick with mud.", before [; Attack, Pull, Push, Touch: if (self in PitBottom) { if (PBHole.holeSize == 0) { PBHole.holeSize = 1; move PBHole to PitBottom; "As you pound on the sides mercilessly, you accidently dislodge some mud from the east side. There is now a small muddy hole to show for your efforts."; } "You pound on the sides of the pit in vain."; } "First, you need to stop falling."; Catch, Take: "You try to get a grip on the sides of the pit, but they are slick with mud."; Climb: if (self in PitBottom) { if (PBHole.holeSize == 0) { PBHole.holeSize = 1; move PBHole to PitBottom; "The sides of the pit are too slippery to climb, but in your attempt, you dislodge some mud from the east side. There is now a small muddy hole to show for your efforts."; } "The sides of the pit are too slippery to climb."; } "First, you'll have to find a way to stop falling."; Dig: if (self in PitBottom) { if (PBHole.holeSize == 0) { PBHole.holeSize = 1; move PBHole to PitBottom; "As you pound on the sides mercilessly, you accidently dislodge some mud from the east side. There is now a small muddy hole to show for your efforts."; } <>; } "First, you need to stop falling."; Kiss: "You'd prefer not to get a mud moustache."; Smell: if (self in PitBottom) <>; "The world is flying by too fast to stop and smell the muddy sides. It's not like they're roses, anyhow."; Taste: if (self in PitBottom) <>; "You consider sticking your tongue out on the way down, but decide to skip the risk of ~mud-burn~"; ], found_in PitBottom FallingPit, has pluralname; RoomObj PBSun "sun" with name "sun", description "The sun is very high above you.", before [; Examine: rfalse; default: "You cannot reach the sun from here."; ], found_in FallingPit PitBottom; ! ######################## ! ### Poont's Lab (PL) ### ! ######################## Room PoontLab "Poont's Lab" with name "poontslab", description [; if (self has flag) { print "What remains of Poont's Lab isn't a pretty sight. Charred blackened rubbish is all that remains of the room."; if (self hasnt firstTime) { give self firstTime; " You have an uneasy feeling that you may have wasted the only herring in this entire volcano on the senseless destruction of the lab."; } ""; } print "This room is the epitome of tidiness. There is a place for everything and everything looks to be in its place. Mounted on the east wall are several contraptions, one of which you recognize as a viewscope, and a large experimental prototype sits against the south wall."; if (PLChairs has asleep) " A doorway to the north is obscured by two chairs stacked on top of each other."; if (PLChairs hasnt flag) " A doorway to the north is obscured by two chairs side by side."; " Two chairs are madly dancing around the lab."; ], before [; Jig: if (PLChairs has flag) "The chairs continue to dance their tarantella."; if (PLChairs has asleep) { give PLChairs ~asleep; print "CLOMP! As you play the tune, the two chairs suddenly unstack and begin to dance! "; } score = score + 2; give PLChairs flag; print "It starts off slow, with the two chairs sidestepping each other. As the melody soars to new heights and catchy triple-meters, the chairs pick up speed. Finally, they dance a crazy jig about the room, abandoning their spot by the doorway entirely.^^[You have gained two points for Distracting "; if (poontBook has firstTime) print "Frick and Frack.] "; else print "Dancing Chairs.] "; Improvement.playScene(); ""; Think: "You wonder if Poont worked with technology or magic. Perhaps they are one and the same."; ], w_to PrivateAlley, n_to [; if (PLRubbish in PoontLab) return (MirrorRoom); if (PLChairs has asleep) { give PLChairs ~asleep; "CLOMP! You are surprised as the top chair hops down off its perch. The twin chairs scuttle around in front of the door, intent on keeping you out."; } if (PLChairs hasnt flag) "The chairs scuttle around you, preventing you from heading north."; print "You wend your way through the dancing chairs...^"; return (MirrorRoom); ], cant_go "You can leave the lab to the west. Another doorway leads north.", has ~firstTime ! Herring not wasted / Herring wasted ~flag; ! Lab whole / Lab blown up RoomObj PLChairs "walking chairs" PoontLab with name "twin" "two" "walking" "chairs" "frick" "frack" "wooden" "legs" "chair", description [; print "Two wooden chairs on shifty legs "; if (self has asleep) "are stacked in front of the northern doorway."; if (self has flag) "dance in circles around the room."; "guard the northern doorway."; ], before [; if (self has asleep) { give self ~asleep; "CLOMP! You are surprised as the top chair hops down off its perch. The twin chairs scuttle around in front of the door, intent on keeping you out."; } Attack, Burn, Cut: "The chairs agilely evade your assault."; Catch, Lift, Pull, Push, Take, Touch: "The chairs are too fast for you to catch."; Enter: "You chase after one of the chairs but can't even catch it, much less sit on it."; JumpOver: "You jump across one of the chairs. The other reciprocates by flying over your head, narrowly missing your ear."; Listen: "The chairs in the room go ~CLOMP, CLOMP, CLOMP.~"; ], each_turn [; if (random(100) < 20) { if (self has flag) print_ret (string) random("^The chairs incorporate a rock-step in their dance.", "^One chair flips the other over its highback. "); if (self hasnt flag && self hasnt asleep) print_ret (string) random("^The chairs crawl around the doorway.", "^The chairs sway on wooden legs. "); } rtrue; ], has pluralname asleep ! Not disturbed / disturbed ~flag; ! Not dancing / Dancing RoomObj PLContraptions "contraptions" PoontLab with name "contraptions" "guages", description "The contraptions that line the wall look to be ongoing experiments or complex gauges. A thin layer of dust shows that they have not been used in some time.", before [; Attack, Burn, Cut, Empty, Enlarge, Lift, Open, Pull, Push, Receive, Search, Squeeze, Stretch, Take, Touch, Turn: "You aren't quite sure what the contraptions do, so you decide that it's best to let them be."; ], has pluralname; RoomObj PLHole "receptacle" PoontLab with name "receptacle" "receptable" "top" "hole" "container", description "There is a receptacle on top of the prototype. It is about twelve inches square and made of brass.", before [; Attack, Cut: <>; Close, Open: "The receptacle is permanently open."; Empty: "There doesn't seem to be anything in the receptacle at the moment."; Enter: "You are much too big to fit in the receptacle."; Receive: if (noun == trumpet) "That's probably not a good thing to do with your pride and joy."; print "You place ", (the) noun, " in the receptacle. The prototype senses the addition and a low hum emanates from its innards."; if (noun ~= herring) { move noun to location; print " After a moment, ", (the) noun, " is deemed unsuitable and is forcibly ejected."; if (noun == cupWater or cupMud) { remove noun; move cup to location; " In the process, the cup overturns and empties out onto the floor."; } ""; } move fishBomb to location; PronounNotice(fishBomb); fishBomb.start(); remove herring; score = score + 1; " There is a flash of light and the herring starts to smell like a savory roasted chicken. The humming crescendoes into a high-pitched whistle before the herring is forcibly ejected into the air to land on the floor.^^[You have gained one point for Imbalancing a Herring.] ^^There is an unstable herring on the floor."; Search: "The receptacle is empty."; Take: "The receptacle is part of the prototype. You cannot detach it."; ]; RoomObj PLPrototype "experimental prototype" PoontLab with name "experimental" "prototype" "machine" "sign", description "The prototype is an ominous black box as long as a camel and half as high. A receptacle sits atop the machine and a small sign below it reads, ~WARNING! Do not use unless you know what you are doing!~.", before [; Attack, Cut: "Violence isn't the answer with technology that you don't understand."; Close, Open: "There are no panels to open or close on the machine."; Enter: <>; Lift: "The prototype is far too heavy."; Listen: "The machine is silent."; LookUnder: "There is nothing but dust underneath the machine."; Pull, Push: "The prototype seems to be fastened to the floor."; Receive: <>; Search: <>; Smell: "The prototype smells faintly of salmon."; ]; RoomObj PLRubbish "charred rubbish" with name "charred" "rubbish" "burned" "blackened" "debris", description "The rubbish is no longer identifiable. It is completely useless.", before [; Take: "The rubbish is completely worthless."; ]; RoomObj PLViewer "viewscope" PoontLab with name "binculars" "periscope" "scope" "viewscope", description "It is a plain device set in the wall with two eyepieces. It allows the user to view places within some radius as if they were actually there.", before [; Enlarge: "They don't get any bigger than this."; Listen, LookUnder, Smell, Taste, Touch: "You're supposed to look in them."; Search: self.view(); rtrue; SwitchOn: "There don't seem to be any switches. You're probably just supposed to look in it."; Take: "The viewscope is embedded in the wall, in between a couple other devices."; ], view [i j obj done; i = 0; done = 0; objectloop(obj ofclass Room) i++; j = random(i); i = 0; objectloop(obj ofclass Room) { if (obj ofclass LetterMaze || obj == OfficeDark or FallingPit or nothing or ControlRoom or UpperBalcony or CastleLadder or Void or Endgame or PoontLab or MirrorRoom) {} else { if (i == j) { print "You peer into the viewscope and see an image in startling clarity...^^"; style bold; print (name) obj; style roman; print "^^"; obj.description(); print "^The scene fades from view...^"; done = 1; break; } i++; } } if (done == 0) print "The viewscope is dark this time.^"; rtrue; ]; ! ########################## ! ### Private Alley (PA) ### ! ########################## Room PrivateAlley "Private Alley" with name "privatealley", description [; print "Enclosed in this ~high-class~ area of the Community are three buildings of varied architecture. To the west is a smooth granite tower,"; print " two stories high, without doors or windows. To the north is the Fifth Bank of Nolava, and a solid black house is to the east."; " Each of the buildings has a plaque affixed to it. The massive gate is the only exit from this area, leading southeast."; ], before [; Colour: if (PAHouse has flag) { give PAHouse ~flag; "At the sound of your trumpet, the house changes colour from black to 'midnight'."; } give PAHouse flag; "At the sound of your trumpet, the house changes colour from 'midnight' back to black."; Listen: "This area is sophisticatedly quiet. You half expect an irate matron to silence you, should you shout."; Shout: "Somewhere off in the distance, you hear someone stage-whisper, ~Hush!~"; Think: "You wonder how to gain access to the tower."; Yawn: if (PACleft notin location) "You yawn, but the yawning crevice can still do it better."; ], w_to [; if (PACleft in location) "There doesn't seem to be any way to enter the tower."; "There is no way into the tower from here, but you can go down into the hole at your feet."; ], d_to [; if (PACleft in location) "There doesn't seem to be any way to enter the tower."; return (MullogsLair); ], n_to Bank, e_to [; return PADoor.enter(); ], in_to [; if (PACleft in location) "You can enter the bank to the north or the black house to the east."; "You can enter the bank to the north, the black house to the east, or go down into the hole at your feet."; ], se_to [; if (NGGate hasnt open) "The gate is closed."; return NorthGate; ], cant_go [; print "The gate out of this area is to the southeast, and there are building entrances to the north and east."; if (PACleft notin location) " There is also a yawning crevice in the ground."; ""; ], has novisit; RoomObj PABank "Fifth Bank" PrivateAlley with name "fifth" "bank" "of" "nolava", description "The bank is the sleek-looking building to the north. Its doorway looks invitingly open and a plaque is affixed by the entrance.", before [; Enter: <>; ], has proper; Plaque PABankPlaque "bank plaque" PrivateAlley with name "bank", description "The bronze sign reads:^^FIFTH BANK OF NOLAVA^Nolava Odd Community^Building Code #045 "; RoomObj PACleft "small cleft" PrivateAlley with name "cleft" "small" "niche" "hole", description [; print "You see a small cleft in the rocks at the foot of the tower."; if (child(self) ~= nothing) { print " In the cleft, you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Empty: if (child(self) ~= nothing) { move child(self) to player; "You empty out the contents of the cleft."; } "The cleft is already empty."; Receive, ThrownAt: if (child(self) ~= nothing && noun ~= fishBomb) "The cleft is full right now."; switch (noun) { fishBomb: if (child(self) ~= nothing) print "After removing ", (the) child(self), " from the cleft, you "; else print "You "; score = score + 2; remove fishBomb; remove PACleft; move PAHole to PrivateAlley; print "quickly deposit the unstable herring and take cover behind the bank. Mere seconds go by before an explosion shakes the buildings around you."; " When the dust settles, a large hole has been blown in the ground by the tower.^^[You have gained two points for Blowing Stuff Up with a Fish.] "; endDoor, mirror: "That is much too big to fit."; trumpet: "The trumpet is too big to fit in the cleft."; default: move noun to self; "You place ", (the) noun, " in the cleft."; } Search: if (child(self) ~= nothing) { print "In the cleft, you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } "The cleft is empty."; ], has container open ~openable; RoomObj PADoor "black door" PrivateAlley with name "door" "device" "complex" "black" "levers" "buttons", description [; if (self hasnt flag) "The door is covered with a hopelessly complex device. Without instructions, you'll never be able to open it."; "Where the door once stood, there is now only a plain doorway."; ], before [; Attack, Burn, Cut: if (self has flag) "The doorway stands strong under your assault."; "The door doesn't even show wear after your barrage."; Close: if (self has flag) "The door has disappeared. There is no way to close it."; "The door is already closed."; Knock: if (self has flag) "There is no door there."; "You knock on the door, but no one answers."; Lock: if (self has flag) "What door?"; "The door is already thoroughly locked."; LookUnder: if (self has flag) "It is dark beyond the door."; "You peer under the door, but can't make out anything distinctly."; Open, Unlock: if (self has flag) "The door has already been opened."; if (instructions notin player) "You push a few buttons and pull a lever, but this is one door that probably won't open with trial and error."; give self flag; score = score + 1; remove instructions; "Step by step, you carefully follow the directions from the safe, hoping to unlock the door. In the midst of the final moose-dance, the door vaporizes with a musical chime. Satisfied, you dispose of the instructions.^^[You have earned one point for Following Directions.] "; Pull, Push: if (self has flag) "You push and pull against the doorway but it doesn't budge."; "You push and pull on the door but it is locked up tight."; Search: if (self hasnt flag) "Arrays of gears, wheels, pulleys, levers, and bars adorn the front of this door. You are unlikely to get through without instructions."; "There is nothing in the doorway."; ], enter [; if (self hasnt flag) "The door is closed. You almost go cross-eyed from trying to comprehend the complex locking device on it."; return (PoontLab); ], has ~flag; ! Closed / Open RoomObj PAHole "yawning crevice" with name "yawning" "crevice" "hole" "orifice", description "The feats of one kamikaze herring have created a new orifice in the earth at the foot of the tower. It's hard to see much inside, but you could fit in the hole.", before [; Climb, Enter: <>; Dig: "There is already a ready-made hole here."; Enlarge: "The hole is in rocky earth. It would be very hard to enlarge it."; JumpOver: "You leap across the hole in a single bound."; ], has ~scenery static; RoomObj PAHouse "Poont's house" PrivateAlley with name "poont" "poont^s" "house" "black", description "This austere house is painted completely black and only has a single black door. The house is only a single-story but extends fairly far towards the wall of the volcano.", before [; Climb: "You see no reason to climb onto the roof of the house. There is no chimney to climb down."; Enter: <>; ], has proper; Plaque PAHousePlaque "house plaque" PrivateAlley with name "house", description "The plaque on the house says:^^POONT'S LAB^Nolava Odd Community^Building Code #059, 062 "; RoomObj PATower "tall tower" PrivateAlley class GraniteObj, with name "tower" "tall", description [; print "The tower rises several stories into the air and very nearly brushes the side of the volcano at the top. There are no doors or windows visible to the naked eye...perhaps the occupant knew how to fly. At the base of the tower, there is a"; if (PACleft in location) " small cleft in the rocks."; " yawning crevice in the ground."; ], before [; Climb: "You manage to shimmy a few feet up before running out of handholds."; Enter: "There doesn't seem to be any way to enter the tower."; Search: "You inspect the base of the tower carefully but find nothing out of the ordinary."; ThrownAt: if (noun == fishBomb) { move noun to location; "You throw the unstable herring at the side of the tower. It bounces several times and lands at your feet."; } ]; Plaque PATowerPlaque "tower plaque" PrivateAlley with name "tower", description "The plaque on the tower reads:^^SQUIGGY'S TOWER^Nolava Odd Community^Building Code #071 "; ! ############################ ! ### Quarry Entrance (QE) ### ! ############################ QuarryRoom QuarryEntrance "Quarry Entrance" with name "quarryentrance", description [; if (StoneQuarry has visited) print "The walls of this chamber are much more regular and clean-cut than the one to the west."; else print "The walls of this chamber are regular and clean-cut."; " A square trapdoor is embedded into the stone floor in the center of the room and a passage leads southwest."; ], detainCheck [; if (player has flag) { give player ~flag; if (SQScale has flag) print "You let go of the broken platform which squeals back into its original position.^"; else print "You let go of the broken platform.^"; } if (QETrapdoor has open) { give QETrapdoor ~open; print "The trapdoor slams shut in a cloud of stone dust.^"; } ], before [; Exit: <>; LookUp: "The ceiling is quite high in here, and you cannot see much in the dim light."; ], w_to [; self.detainCheck(); return (StoneQuarry); ], sw_to [; self.detainCheck(); return (NarrowPass); ], d_to [; if (player has flag) { give player ~flag; if (SQScale has flag) print "You let go of the broken platform which squeals back into its original position.^"; else print "You let go of the broken platform.^"; } if (QETrapdoor has open) <>; PronounNotice(QETrapdoor); "The trapdoor is closed."; ], cant_go "The quarry extends to the west and a passage leads southwest."; RoomObj QEChain "chain" QuarryEntrance with name "chain" "line" "support", description "The chain connects to each of the four corners of the platform. It merges into a single line several feet above the platform and disappears into the darkness near the ceiling. Two of the corners have snapped, upsetting the suspended platform.", before [; Climb: if (player in SQScale) { if (child(player) ~= nothing) "You're carrying too much to climb the chain."; "You shimmy a ways up the chain to find out that it loops around a pulley wheel and follows along the ceiling to the west. Your curiosity satisfied, you climb back down."; } "You can't climb it from here."; Pull: "You pull on the chain, and hear movement to the west."; Touch: "The chain is cold to the touch."; ]; RoomObj QEChunk "granite chunk" QuarryEntrance class GraniteObj, with name "boulder" "granite" "chunk" "rock" "block" "stone", description [; print "The giant granite chunk seems to have rolled off the platform when the chain broke. It rests partially on one edge of the broken platform. A skeletal hand peeks out from under the granite. It's possible that the rest of the unfortunate person is somewhere underneath."; if (note hasnt firstTime) " A note is clutched in the skeletal hand."; ""; ], before [; Climb, Enter: "You scale the side of the granite chunk, and find that the chamber looks the same from up top as it does from ground level. You climb back down."; Lift: "You're not strong enough."; LookUnder: "A skeletal hand peeks out from under the granite."; Pull, Push: "Your attempts to move the granite result in nothing more than strained muscles."; Eat: "This chunk of granite is much, much more than you can chew."; Jump: "You'd likely break a leg doing that."; JumpOver: "The chunk of granite is too big to jump over."; Take: "None of your pockets are big enough to carry around a giant granite chunk."; Touch: "The granite chunk feels rough and uncut, as if it'd come straight from a quarry."; ]; RoomObj QEHand "skeletal hand" QuarryEntrance with name "hand" "skeleton" "bone" "arm" "fingers", description [; print "The hand has decayed to the point where only bone remains. The curled fingers are all you can see of the hapless victim underneath the chunk of granite."; if (note hasnt firstTime) " A note is clutched in the skeletal hand."; ""; ], before [; Lift, Pull, Take: "You tug on the skeletal hand but it is wedged too tightly underneath the granite."; LookUnder: "There is nothing under the hand."; Open: if (note hasnt firstTime) <>; Receive: switch (noun) { heavyRock: "The rock is too big to fit in the hand."; note: "There's no reason to put the note back in the hand."; trumpet: "You feel leery about letting a dead guy or girl hold your trumpet."; } Rub: "You polish the bones."; Taste: "Licking the bone, you find...well, perhaps it's best that you don't lick other peoples' bones."; Touch: "The skeletal hand is cool to the touch."; Wave: "You grab the hand firmly and introduce yourself. There is no response."; ]; Plaque QEPlaque "bronze plaque" QuarryEntrance with description [; if (self hasnt flag) "The bronze sign shows a thin layer of settled dust.^^Nolava Odd Community^Building Code #006 "; else "The bronze sign reads:^^Nolava Odd Community^Building Code #006 "; ], before [; Rub: if (self hasnt flag) { give self flag; "You polish the plaque."; } "The plaque already looks cleaner."; ], has ~flag; RoomObj QEScale "broken platform" QuarryEntrance with name "platform" "scale" "wooden" "broken" "elevator", initial "A wooden platform hangs over the trapdoor, suspended from a chain. The chain seems to have snapped on two of the four corners and the edge of the platform rests on top of the trapdoor. A giant chunk of granite wedges the lower edge to the ground.", description [; print "The platform is about seven feet square and hangs by a metal chain which is only connected to two of its four corners. A giant chunk of granite sits half on the platform, wedging one side to the ground."; if (SQScale hasnt flag || player has flag) " The suspended side of the platform is higher than its original position."; ""; ], before [; Climb: if (player has flag) "You can't get on the platform while you're holding it."; <>; Drop: if (player has flag) <>; "You aren't holding the platform."; Enter: if (player has flag) "You can't get on the platform while you're holding it."; rfalse; GetOff, Jump, JumpOff: move player to QuarryEntrance; print "You hop off the platform. With a squeal, the chained side rises back up."; if (heavyRock in QEScale) { move heavyRock to QuarryEntrance; " The heavy rock rolls off and lands on the floor."; } ""; Lift: if (player has flag || SQScale hasnt flag) "Raising the broken platform any further would be awkward."; give player flag; "You manage to lift the platform a few inches. It is very unwieldy."; LookUnder: "You see the trapdoor partially underneath the platform."; Lower: if (player hasnt flag) { if (SQScale has flag) "You push down on the platform but it slants back up."; if (heavyRock in SQScale) "The platform won't go down any further because of the counterweight."; } if (player has flag) { give player ~flag; "You lower the platform."; } Pull, Push: if (SQScale hasnt flag) "The platform does not move noticeably."; <>; Take: "You cannot take the platform while it is still attached to the chain. You could probably lift one end though."; Touch: "It feels like a wooden platform."; ], after [; Enter: print "A squeal emanates from somewhere near the ceiling and the platform levels out with both sides on the ground, covering about three quarters of the trapdoor."; if (QETrapdoor has open) { give QETrapdoor ~open; " The trapdoor underneath slams shut."; } ""; ], has enterable ~scenery static supporter; RoomObj QETrapdoor "trapdoor" QuarryEntrance with name "trap" "door" "trapdoor" "panel", description [; print "It is a simple trapdoor set into the floor of the chamber, almost eight feet square. There is a small bronze plaque on its surface."; if (SQScale has flag) " The broken platform is partially blocking the trapdoor."; ""; ], before [; Attack: "You make scuff marks on the trapdoor."; Climb, Enter: if (self hasnt open) "The trapdoor is closed."; if (trumpet notin player) "You start to climb down but then realize that you don't have your trumpet. It'd probably be a good idea to go get it, just in case you can't get back up once you've gone down."; print "You carefully crawl under the broken platform and drop through the trapdoor, landing in the room below."; print " In a cloud of disturbed dust, the trapdoor slams shut, leaving you in the dark.^^"; print "Although stuffy, the air is a good deal dryer than the dungeon where you spent last night."; print " You hope you're in a tunnel back to the surface, so you can return home and forget your foolish decisions.^^"; print "More likely, you're trapped in some bleak cavity of the earth, worse off than before."; give self ~open; score = score + 3; print "^^[You have just gained three points for Dark Hole Bravery.]^"; PlayerTo(OfficeDark); rtrue; Close, Push: if (self has open) { if (player has flag) "First you'll have to drop the broken platform."; give self ~open; "The trapdoor slams shut in a cloud of dust."; } "The trapdoor is already closed."; Enlarge: "It would be impossible to enlarge the trapdoor without decent stone tools."; Jump, JumpOver: "The platform is in the way."; LookUnder, Search: if (self has open) "It's hard to make out much in the darkness, but you can see the floor not too far down."; "The trapdoor is closed."; Open, Pull: if (self has open) "The trapdoor is already open."; if (player has flag) "You can't keep the platform suspended and open the trapdoor underneath it at the same time."; if (player in QEScale) "You can't open the trapdoor while standing on the platform."; if (heavyRock in SQScale && self hasnt open) { give self open; "With one side of the platform raised, you manage to open the trapdoor enough to fit through."; } if (player hasnt flag && SQScale has flag) "The broken platform prevents the trapdoor from opening more than a few inches."; Take: "The trapdoor is hinged into the floor."; Touch: "The trapdoor is smooth from heavy use sometime in the past."; ], has ~open; ! ###################### ! ### Rock Wall (RW) ### ! ###################### Room RockWall "Rock Wall" with name "rockwall", description [; print "A narrow strip of lane winds between the rocks from the northeast, ending in a small clearing. To the east, a spire of rock shoots out of the ground and extends all the way up to the ceiling of the volcano. "; if (endDoor notin RWDepression) print "Set at the base of the spire is a smooth marble surface which is slightly depressed."; else { print "Set at the base of the spire is a"; if (endDoor has open) print "n open "; else print " closed "; print "wooden door."; } " Gigantic piles of granite rubble bar your progress in most directions, although it looks like you could squeeze through to the west."; ], before [; Think: "You wonder about the marble surface."; ], e_to [; if (Leonine.trying == 1) rfalse; if (endDoor notin RWDepression) "A blank face of marble blocks your path."; if (endDoor hasnt open) "The wooden door is shut."; if (Leonine in location) { remove Leonine; print "Leonine waves. ~Farewell, neighbour! I hope you're prepared for what lies ahead, for it will be extremely dangerous...of course, you could always just stay here and be my compatriot!~^"; } return CastleLadder; ], in_to [; if (Leonine.trying == 1) rfalse; if (endDoor notin RWDepression) "The lane leads northeast and an opening leads through the granite rubble to the west."; if (endDoor hasnt open) "The wooden door is shut."; if (Leonine in location) print "Leonine waves. ~Farewell, neighbour! I hope you're prepared for what lies ahead, for it will be extremely dangerous...of course, you could always just stay here and be my compatriot!~^"; return CastleLadder; ], ne_to LeonineHouse, w_to FishPond, cant_go "The lane leads northeast and an opening leads through the granite rubble to the west."; RoomObj RWClearing "clearing" with name "clearing", description [; if (self in RockWall || (self in CastleLadder && CastleLadder.ladderCount == 0 && CLExit has open)) "The clearing is fairly small, not much more than a bare patch of ground among mountains of rock."; "You can't see any such thing."; ], before [; Enter: if (self in CastleLadder && CastleLadder.ladderCount == 0 && CLExit has open) <>; default: if (~~(self in CastleLadder && CastleLadder.ladderCount == 0 && CLExit has open)) "You can't see any such thing."; ], found_in RockWall CastleLadder; RoomObj RWCubbyhole "cubbyhole" with name "cubbyhole" "cave", description "A small cubbyhole is on the other side of the wooden door. It looks like you could fit in there.", before [; Enter: <>; ]; RoomObj RWDepression "marble depression" RockWall with name "marble" "smooth" "depression" "indentation" "base" "face" "wall", description [; print "The depression in the rock spire is definitely not natural. "; if (endDoor in self) { print "In the depression is a plain wooden door which is currently "; if (endDoor has open) "open."; "closed."; } "It's about the size of three orangutans standing on each others' shoulders."; ], before [; Attack: "Violence isn't the answer to this one. Not that there was a question to begin with."; Climb: <>; Close: if (endDoor in self) <>; Cut: "You have nothing suitable for carving marble."; Dig: "You'd never be able to dig through the marble."; Enter: if (endDoor in self) <>; "Although the depression is large, it is only a couple inches deep."; Open: if (endDoor in self) <>; Push: "You poke around at the marble face, but you don't find any secret switches."; Receive: if (noun ~= endDoor) "That doesn't seem to fit in the marble depression."; Search: "You don't find anything out of the ordinary about the marble face."; ], has container ~openable open; RoomObj RWKeyhole "keyhole" with name "hole" "keyhole", description "The keyhole is extremely small, not much more than a crack in the doorknob.", before [; Enter: "You're a bit to big to fit in the keyhole."; Fill: "Plugging up the keyhole would be useless."; Listen: "You hear nothing in the keyhole."; Pick: "You don't know how to pick locks."; Receive: if (noun ~= doorKey) "That doesn't seem to fit in the keyhole."; Search: "You take a peek in the keyhole but it doesn't go all the way through the door."; Unlock: <>; ]; RoomObj RWSpire "rock spire" RockWall class GraniteObj, with name "rock" "spire" "column" "tower", description [; print "The spire runs from floor to ceiling in the volcano, possibly an age-old stalactite. There seems to be a smooth marble depression at the base of the spire."; if (endDoor in self) { print " In the depression is a plain wooden door which is currently "; if (endDoor has open) "open."; "closed."; } ""; ], before [; Climb: "The spire is much too high to climb safely."; ]; ! ################# ! ### Slope (S) ### ! ################# Room Slope "Slope" with name "slope", description [; print "A sizeable ridge of rock separates the small valley to the southeast of here from the community proper several hundred yards to the northwest."; print " The valley is rimmed by a narrow footpath which climbs the slope to the east and curves around into the valley to the southeast."; " The black eye of a hole peers across the valley from the west."; ], before [; Listen: "The rock ridge muffles the echoes from the rest of the volcano, making this little valley quite peaceful."; ], w_to [; PlayerTo(Maze); rtrue; ], e_to Overlook, u_to Overlook, d_to FrontDoor, se_to FrontDoor, cant_go "A path curves from the east to the southeast, and a hole is in the western hillside.", has ~firstTime; ! Never entered / Entered from maze RoomObj SCommunity "community proper" Slope with name "community" "proper", description "You can't really see much of the community from here.", before [; Examine: rfalse; default: "You can't really see much of the community from here."; ]; RoomObj SHole "hole" Slope with name "hole" "maze" "black" "eye", description "The hole leads back into the Maze of Dread.", before [; Enter: <>; Search: "You see nothing in the hole from here. Farther back, it is too dim to see."; ]; RoomObj SPath "path" with name "path" "footpath" "road" "narrow" "slope", description [; if (self in Slope) "The footpath leads farther up the slope to east and down the slope to the southeast, encircling the rim around a valley."; "The footpath leads back down the slope to the west."; ], before [; Knock: "You knock on the ground, but no one hears."; ], found_in Slope Overlook; RoomObj SPurpleHouse "house" with name "house" "purple" "home" "windows" "door" "sealed", description "It is a quaint little house nestled snugly in this valley. The house has sealed windows and a massive front door, which cannot be seen clearly from here.", found_in Slope Overlook; RoomObj SRidge "ridge" with name "ridge" "rock" "rocky" "mountain" "range" "north", description "Almost like a miniature mountain range within the volcano, the rocky ridge prevents you from easily reaching the rest of the community.", before [; Climb: "The spires of rock along the ridge are too steep to scale."; JumpOver: "It would be quite painful if you misjudged the distance."; ], found_in Slope Overlook; RoomObj SValley "valley" with name "valley" "below" "small" "view", description "In the valley below sits a small purple house. It would probably be underwater if it ever flooded down here.", before [; Climb: if (self in Slope) print "The path to the southeast leads "; else print "The path to the west leads "; "down into the valley. It would be safer than climbing from here."; ], found_in Slope Overlook; RoomObj SVolcano "volcano side" with name "volcano" "side", description "The volcano rises up high above you. To the east you can see where the ground meets the side of the volcano.", before [; Climb: if (self in Overlook) "There are no good handholds on the side of the volcano."; ], found_in Slope Overlook; ! ######################### ! ### Stone Quarry (SQ) ### ! ######################### QuarryRoom StoneQuarry "Stone Quarry" with name "stone" "quarry", description "Shattered rocks and debris litter this chamber, evidently the site of a quarry or an excavation. A faint light from the south shows the dark shape of a gaping hole in the center of the floor. A well-traveled passage leads south and the chamber extends to the east.", before [; Exit: <>; Jump: if (player in SQScale) "The platform rocks on its chains. You almost fall off, but regain your balance at the last moment."; LookUp: "The ceiling is quite high in here, and you cannot see much in the dim light."; ], s_to NarrowPass, e_to QuarryEntrance, d_to [; <>; ], cant_go "A passage leads south, and the quarry continues to the east."; RoomObj SQChain "chain" StoneQuarry with name "chain" "line" "support", description "The chain connects to each of the four corners of the platform. It merges into a single line several feet above the platform and disappears into the darkness near the ceiling.", before [; Climb: if (player in SQScale) { if (child(player) ~= nothing) "You're carrying too much to climb the chain."; "You shimmy a ways up the chain to find out that it loops around a pulley wheel and follows along the ceiling to the east. Your curiosity satisfied, you climb back down."; } "You can't climb it from here."; Pull: if (player in SQScale) "The chain is already taut, since you're standing on the platform."; "You pull on the chain, and hear movement to the east."; Touch: "The chain is cold to the touch."; ]; RoomObj SQDebris "debris" StoneQuarry class GraniteObj, with parse_name [i j; if (self.searchCount > 5) j = 'message'; else j = 'debris'; while (NextWord() == 'debris' or 'scattered' or 'rocks' or 'stone' or 'pebbles' or j) i++; return i; ], searchCount 0, description [; print "Scattered across the chamber is much stone debris. Most of the debris is quite large and cracked, probably the reason why it was not removed."; if (self.searchCount > 5) " Etched in the ground beneath some debris is a faint, almost invisible message.^^~A prize in the magic lab awaits,^to the traveler who goes and cachinnates.~"; ""; ], before [; Climb: "Playing around on the debris could be dangerous."; Eat: "This debris is much, much, much more than you can chew."; Jump: "You'd likely break a leg doing that."; JumpOver: "You can't jump that high."; LookUnder: "If there is anything under the debris, it is no doubt quite flat by now."; Rub: if (self.searchCount > 5) "You try to erase the message but it is set in stone."; "You'd need a file to smooth out these rocks."; Push, Push: "With all your might, you strain against the debris, but accomplish little."; Search: self.searchCount++; if (self.searchCount > 5) "Etched in the ground beneath some debris is a faint, almost invisible message.^^~A prize in the magic lab awaits,^to the traveler who goes and cachinnates.~"; print "You don't find any "; switch (self.searchCount) { 1: print "bronze"; 2: print "silver"; 3: print "copper"; 4: print "iron"; 5: print "tin"; } " keys in the debris."; Take: "The debris is too large to carry around, and you have no use for a handful of pebbles."; Touch: "The rocks feel rough and uncut, as if they'd come straight from the quarry."; ]; RoomObj SQHole "gaping hole" StoneQuarry with name "hole" "opening" "pit" "shaft" "shape" "dark" "of", jumpCount 0, ! Jumping attempts description "The opening looks vaguely foreboding. You kick a few pebbles down the shaft but hear no echo.", before [; Climb, Enter: if (SQScale hasnt flag) "The wooden platform is blocking your jump in its current position."; "Your hands can find no purchase around the hole. Enter that way, and you'd surely slip."; Dig: "It has already been dug."; Enlarge: "This hole is dug into the rock."; Fill: "You kick a few pebbles into the shaft, but it seems too deep to fill up."; Jump: if (SQScale hasnt flag) "The wooden platform is blocking your jump in its current position."; self.jumpCount++; switch (self.jumpCount) { 1: "That could be extremely dangerous...you can't even see the bottom, but..."; 2: "You stand at the edge of the hole, contemplating the wisdom of jumping."; 3: deadflag = 1; print "Taking a deep breath, you jump feet first into the hole, ignoring the fact that jumping into strange holes is unwise."; print " You also ignore the fact that there's no way to tell how deep the shaft is or what's inside."; " But unfortunately, it's awfully hard to ignore the blade-like edges of granite that protrude from the floor of the unfinished quarry."; } Search: "It's too dim to see anything in the hole."; Touch: "You run your fingers around the circumference of the hole."; ]; RoomObj SQScale "wooden platform" StoneQuarry with name "platform" "scale" "wooden" "elevator", initial "A wooden platform hangs over the gaping hole, suspended from a chain.", description [; print "The platform is about seven feet square and hangs above the hole by a metal chain."; if (self hasnt flag) " It is about two feet lower than its original position."; ""; ], before [; Climb: <>; GetOff, Jump, JumpOff: if (player notin self) "You aren't on the platform right now."; move player to StoneQuarry; if (heavyRock notin self) { give SQScale flag; "You hop off the platform. With a squeal, it returns to its original height."; } if (heavyRock hasnt firstTime) { score = score + 1; give heavyRock firstTime; "You hop off the platform, but the heavy rock prevents it from returning to its original height.^^[You have earned one point in Mineral Levitation.] "; } <>; Lift, Push, Pull: "The platform sways a little, but does not move noticeably in any direction."; LookUnder: "You see a hole under the platform."; Take: "You cannot carry the platform."; Touch: "It feels like a wooden platform, about seven feet square, hanging over a hole."; ], after [; Enter: give self ~flag; if (heavyRock notin SQScale) "A squeal emanates from somewhere near the ceiling and the platform sinks about two feet."; "You clamber onto the platform."; ], has enterable ~scenery supporter transparent static flag; ! Up / Down ! ################# ! ### Study (S) ### ! ################# Room Study "Study" with name "study", description [; print "The study is a richly furnished room where Finney must have spent many of his days. A mahogany bookshelf fills up the entire north wall,"; print " its shelves lined with all manner of books and treatises. A round window is set in the east wall and Finney's writing desk sits in the center of the room,"; " nestled in a wide array of furniture. The only exit is to the northwest."; ], before [; Listen: "The study is very quiet. Perhaps Finney engineered this room to reduce background noise."; Smell: "The air is a bit sweeter here than in other rooms."; ], nw_to UpstairsCorridor, cant_go "The only doorway in this room is to the northwest."; RoomObj SDesk "writing desk" Study with name "writing" "desk" "table", description [; print "The writing desk is slightly "; if (self has flag) print "scratched "; else print "slanted "; print "and sits in the middle of the room."; if (child(self) ~= nothing) { print "On top of the desk, you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Climb, Enter: "The writing desk probably won't support you."; Cut: if (second == jigSaw) { if (self has flag) "There's no need to damage the desk further."; give self flag; print "You run the blade of the jigsaw along the writing desk."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the desk with your bare hands."; JumpOver: "The room is a little to cluttered to make a good leap over the desk."; Lift, LookUnder: "You find nothing underneath the desk."; Open: "There are no drawers on this desk."; Pull, Push: "The furniture in the room obstructs the desk's movement."; Search: <>; ], has supporter ~flag; ! Whole / Vandalized RoomObj SFoyer "foyer" Study with name "foyer", description [; if (SWindow hasnt firstTime) { give self firstTime; move SWindow2 to Study; } "The foyer can be seen out the round window. You can also see an outer window in the foyer."; ]; RoomObj SFurniture "furniture" Study with name "furniture" "gaudy" "stylish", description [; print "A wide array of stylish furniture decorates the study. Most of it is quite gaudy, if useless."; if (self has flag) " After your merry escapade with the jigsaw however, most of it is quite gaudy, useless, AND worthless."; ""; ], before [; Cut: if (second == jigSaw) { if (self has flag) "There's not much furniture left to damage."; give self flag; print "You lay waste to all the furniture with your trusty jigsaw."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the furniture with your bare hands."; Lift, LookUnder: print "You peer under the furniture "; if (self has flag) print "debris "; "but don't find anything."; Pull, Push: print "There is so much furniture "; if (self has flag) print "debris "; "in the room that it's quite impossible to move anything without collisions."; ], has ~flag pluralname; ! Whole / Vandalized RoomObj SShelves "mahogany bookcase" Study with name "bookcase" "bookshelf" "bookshelves" "shelf" "shelves" "books" "treatises" "mahogany" "case", description [; print "The bookcase houses a gargantuan collection of books and treatises. Everything from "; print (string) random("~The Great GF Handles Water Music: A Study in Underwater Accordion Playing~", "~Nine Hundred Odes about Liver and Onions~", "~My Cat Doth Went a Walking~", "~There's a Hair in the Soup of Life~", "~Millions of Fun Things to Do with Granite~", "~I.F. - Tellers of Interpretive Fiction in Papoosen~", "~My Piano Fell Down the Mine Shaft: A Tale of A Flat Minor~"); print " to "; print (string) random("~A Study in the Use of Moose in Security Systems~", "~My Piano Fell in the Ranks: A Tale of A Flat Major~", "~Tribal Dances and the Xylophone~", "~Yodelus Eggplant Looks Into the Tuba~", "~The Blizzard of '01: Clarinets to Firewood~", "~Why An Armadillo Shouldn't Wear Socks~", "~A Study in the Mating Habits of Raccoons~"); print " can be found on the shelves."; if (musBook in self) print " However, the only book of interest is a compact book entitled, ~Finney's Music Dictionary~."; if (self has flag) " The bookcase seems to have been scratched up quite a bit."; ""; ], before [; Attack: "There's no reason to damage the bookshelves."; Climb: "It looks like you could scale the bookcase but there is nothing but a plain ceiling above."; Count: "The books on the shelves are too numerous to count."; Cut: if (second == jigSaw) { if (self has flag) "There's no reason to damage the bookcase further."; give self flag; print "You carve decorative lines into the bookcase with your trusty jigsaw."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the shelves with your bare hands."; Empty: "If you removed all the books from the bookcase there'd be nowhere to put them! "; Enter: "To outward appearances, there doesn't seem to be any secret entrances in the bookcase."; Receive: if (noun ~= musBook) "That doesn't belong in the bookcase."; Lift, Lower, Pull, Push, Turn: "The bookcase will not budge."; LookUnder: "You can't look under the bookcase; it is too heavy."; Open: "You tug on the bookcase, but it doesn't seem to want to open for you."; Search: <>; Smell: "The bookcase has a woodsy smell."; Take: "You really don't have much use for all of those books."; Touch: "You run your fingers along the shelf, finding it to be rather dusty."; ], has container open ~openable pluralname ~flag; ! Whole / Vandalized RoomObj SWindow "round window" Study with name "window" "round" "east", description "The window is about the size of a Piddle ball and looks to be used for air circulation in the room. It overlooks the foyer downstairs.", before [; Climb, Enter, Jump: "You won't be able to fit through the window."; Close, Open: "There is no pane in the window, it is completely open already."; Cut: if (second == jigSaw || jigsaw in player) "To enlarge the window with the jigsaw, one of the handles would be on the other side, and you can't operate the saw without holding both handles."; "You can't cut the window with your bare hands."; Enlarge: "You press against the sides of the window, but it stubbornly remains the same size."; Receive, ThrownAt: if (noun == jigSaw or musicStand) "", (The) noun, " won't fit through the round window."; if (noun == armadillo) { move noun to Foyer; if (noun has flag) "The broken armadillo falls through the window and lands below."; give noun flag; "You toss the armadillo through the window. It sails a short distance through the air before crashing to the ground below. Unfortunately, it misses the rug and smashes against the floor.^^[You have just Broken an Armadillo.] "; } move noun to Foyer; "You toss ", (the) noun, " through the round window. It sails a short distance through the air, but gravity makes its presence known before very long and it lands in the foyer below."; Search: if (self hasnt firstTime) { give self firstTime; move SWindow2 to Study; } "Through the window, you can see the foyer. Directly across from the window, at a distance of almost twenty feet, you can see an outer window through which a fresh breeze from the outside blows."; ], has ~firstTime; ! Never looked through / Looked through RoomObj SWindow2 "outer window" with name "window" "outer" "other", description "From here, you can see the window high up in the foyer. It is almost directly across from the round study window. A fresh breeze blows in from the outside.", before [; Climb, Close, Cut, Enlarge, Enter, Jump, Open: "There's no way to reach the foyer window from here."; Receive, ThrownAt: <>; Search: "You can't see much detail from here."; ]; ! ##################### ! ### TowerTop (TT) ### ! ##################### Room TowerTop "Top of Tower" with name "towertop", description "Cold drafts blow across the uneven flooring at the top of this tower. The edges are lined with faux machicolations and a winding staircase descends back into the tower.", before [; Colour: if (TTBars in location) { score = score + 2; remove TTBars; give LiteralMusic ~scenery; move LiteralMusic to location; print "In a show of dazzling effervescence, the colourless grey bars cycle through all the colours of the rainbow. Stripes of red and yellow intertwine with bubbles of blue until the bars are the same colour as the floor around it. Either the bars are gone, or superbly camouflaged."; if (theDuck in location) print " The duck looks at you proudly. ~Quack!~"; "^^[You have gained two points for Colouring Inside the Lines.] "; } Listen: "You hear the whistling of the wind."; LookDown: "You see the flooring of the tower."; LookUp: "The side of the volcano slopes about twenty feet above you."; Shout: "Your shout seems to echo across the Community."; Think: if (TTBars in location) "You wonder how to remove the grey bars."; ], d_to MullogsLair, cant_go "The only exit is down the stairs."; RoomObj TTBars "grey bars" TowerTop with name "bars" "grey" "gray" "colourless" "colorless" "mesh" "cage", initial "In the center of the floor, a mesh of colourless grey bars encircle a piece of sheet music with the title ~Literal Melody~.", description "The bars seem to be void of colour; even their greyish tint seems lackluster. Inside you see a piece of sheet music, but the bars are too close together to reach it.", before [; Attack, Burn, Cut: "Although they look almost insubstantial, the bars survive the assault with nary a scratch."; Climb: "The bars don't go high enough off the floor to be worth climbing."; JumpOver: "You jump to the other side of the grey bars. Things look much the same from here."; Lift, Pull, Take: "You attempt to pull the grey bars off of the floor, but they feel solidly embedded."; LookUnder, Search: "You see a piece of sheet music inside the bars."; Open, Unlock: "There do not seem to be any doors or hinges on the grey bars."; Knock, Push, Touch: "It feels solid."; Receive: if (noun == mirror) "You hold the mirror near the grey bars and are surprised to find that they leave no reflection! However, they still prove to be as solid as before."; Stretch: "The bars do not stretch, despite your efforts."; Taste: "You lick the bars, but no apparent taste can be discerned."; ], has ~scenery static pluralname; RoomObj TTFloor "flooring" TowerTop class GraniteObj, with name "floor" "flooring", description "Years of wind have made the floor smooth and polished. Faux machicolations line the outer edges."; RoomObj TTMach "faux machicolations" TowerTop with name "faux" "machicolations" "holes" "murder" "hole" "machicolation", description "At one point in Papoosen history, it was chic to have machicolations, or ~murder-holes~ on every tower constructed. The practice fell out of favour as towers became taller, since the boiling oil used to deter attackers usually cooled before it could be carted to the top.", before [; Open: "The machicolations are firmly sealed."; Receive: "Upon closer inspection, you find that the machicolations are sealed shut. Apparently they are just for looks."; ], has pluralname; RoomObj TTStairs "winding stairs" with name "winding" "stairs" "steps" "staircase" "stairway", description [; if (self in TowerTop) "The stairs descend back to the basement of the tower."; "The stairs ascend into the tower proper."; ], before [; ClimbDown: if (self in TowerTop) <>; "The stairs do not go any farther down."; Climb: if (self in TowerTop) <>; <>; ], found_in TowerTop MullogsLair, has pluralname; ! ########################## ! ### Upper Balcony (UB) ### ! ########################## Room UpperBalcony "Upper Balcony" with name "upperbalcony", chatCount 0, description [; print "You are standing in a small balcony overlooking King Goosen's throne room. Far below, you can see the court where you were convicted of playing ~Ode to a Duck~"; print " just a few days ago. You can hear the king speaking to his retainers from here, but a series of gaudy banners hanging from the ceiling in front of the balcony"; " prevent anyone from seeing you. Behind you to the west, a tapestry hides the shaft which leads down into the volcano."; ], before [; Listen: "You hear voices down below."; LookDown: "Far below, you can see the court of King Goosen."; Pandiculate: if (self has flag) "You yawn."; give self flag; score = score + 1; "You yawn expansively, glad that this tedious affair is almost over.^^[You have just gained the Last Lousy Point.]"; Shout: "Better not, you might give away the element of surprise."; Think: "You wonder how to get down off the balcony."; ], each_turn [; if (self.chatCount == 0) { self.chatCount++; print "^Down below, King Goosen's voice rises through the murmur of the crowd. ~There's nothing to dispute! They are worthless in their current state,"; print " but priceless with my beautiful face emblazoned on them. Melt them now!~ Eyes wide, you peek through the hangings to see the King gesturing at a stack of crates."; " The top crate is open, revealing a priceless Conservatory trumpet!"; } else if (random(100) < 65) { self.chatCount++; switch (self.chatCount) { 2: "^~I am the King here! We have no time for the petty interests of the musicians.~"; 3: "^~Well you know best, but best isn't good enough. Trust in my judgement and we shall transform this kingdom into what it once was.~"; 4: "^~No, you fool, not an active volcano!~"; 5: "^~Preposterous!~"; 6: "^~Keep it up and I shall have you demoted. I want those trumpets melted now!~"; 7: "^~Scribe! Write down the fact that I have demoted my Advisor!~"; 8: "^~This is mutinous! First Guard, take my Scribe and Advisor away and slap him with irons. Or in, as the case may be.~"; 9: "^~Don't make me hire a second staff member...~"; } print (string) random("^~Preposterous!~ ", "^~There's no hope at all then...~", "^~I should have you arrested for that...~ ", "^~I am the law!~ "); ""; } ], w_to [; print "You climb down to the bottom of the ladder...^"; CastleLadder.ladderCount = 0; move CLExit to CastleLadder; return CastleLadder; ], d_to [; if (UBHangings has flag) { @erase_window -1; give trumpet ~flag; return (EndGame); } "There don't seem to be any ladders or stairways down to the throne room. What kind of architect would build such a balcony?"; ], e_to "There don't seem to be any ladders or stairways down to the throne room. What kind of architect would build such a balcony? ", cant_go "The throne room is far below you to the east, and a hole in the wall to the west leads back to the volcano.", has ~flag; ! No score / Last Lousy Point scored RoomObj UBBalcony "balcony" UpperBalcony with name "balcony" "landing" "small", description "The balcony is about thirty feet across and looks out over the King's court.", before [; JumpOff: "The floor is too far below you. You would probably injure yourself, not to mention what it would do to your precious trumpet."; ]; RoomObj UBCourt "court" UpperBalcony with name "court" "below" "king" "goosen" "retainers", description "You can see the King's court in session down below. You don't see King Goosen from your vantage point, but you can hear his voice.", before [; Enter: <>; Examine: rfalse; default: "You are too far away."; ], has animate; RoomObj UBHangings "gaudy hangings" UpperBalcony with name "banner" "series" "banners" "long" "gaudy" "hanging" "hangings" "ceiling" "streamer" "streamers" "festive", description "Festive streamers and long tapestries of all colours hang haphazardly from the ceiling.", before [; Attack: "You take a swing at the nearest hangings and get a faceful of dust for your efforts."; Climb, ClimbDown, Enter: give self flag; <>; Lift, Pull, Take: "You start to pull up one of the long hangings but then realize that someone down below might notice the motion."; Lower: "The hangings are already fully extended."; Push, Wave: "You nudge one of the streamers, causing it to wave slightly."; Search: "You don't notice anything unusual about the tapestries."; Touch: "Several of the hangings are within reach. You feel the closest one."; ], has ~flag pluralname; ! Never climbed / Climbed RoomObj UBTapestry "west wall tapestry" UpperBalcony with name "west" "wall" "tapestry", description "The tapestry hangs over the entrance to the volcano shaft and portrays the massive visage of the current King Goosen.", before [; Attack, Wave: "A small cloud of dust explodes off of the tapestry. Evidently no one has been here in some time."; Climb: "There is nothing at the top of the tapestry."; Enter: <>; Lift, LookUnder, Search: "Peering behind the tapestry, you see the ladder shaft that you came up in."; Listen: "The tapestry of King Goosen does not speak."; Pull, Stretch, Take: "You tug on the tapestry but it is firmly anchored into the ceiling."; Smell: "The tapestry smells of the many colour byproducts used in its creation."; Touch: "It feels soft under your fingers."; ]; RoomObj UBTrumpets "priceless trumpets" UpperBalcony with name "crates" "crate" "top" "priceless" "conservatory" "trumpet" "trumpets" "silver" "gleaming" "finish", description "You can't make out any detail from here, but the gleaming silver finish is a sure sign that there are Conservatory trumpets down there.", before [; Examine: rfalse; default: "You are too far away."; ], has animate; ! ############################## ! ### Upstairs Corridor (UC) ### ! ############################## Room UpstairsCorridor "Upstairs Corridor" with name "upstairscorridor", description "The two flights of the double staircase meet here at a balcony which overlooks the first floor of the house. Matching doorways lead southeast and south.", before [; LookDown: "You have a decent view of the first floor from up here."; ], d_to LowerHall, se_to Study, s_to MusicSalon, cant_go "You can go down the stairs, or south and southeast."; RoomObj UCBalcony "balcony" UpstairsCorridor with name "balcony" "landing", description [; print "The balcony is about twenty feet across and looks out over the statue on the first floor."; if (self has flag) " It shows signs of your jigsaw handiwork."; ""; ], before [; Cut: if (second == jigSaw) { if (self has flag) "There's no need to damage the balcony further."; give self flag; print "You test the edge of the jigsaw on the woodwork of the balcony."; Vandal.add(); rtrue; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the balcony with your bare hands."; JumpOff: print "You take a deep breath and a running leap, landing athletically on the floor below.^"; <>; ]; RoomObj UCFloor "first floor" UpstairsCorridor with name "first" "floor" "ground", description "The first floor can be seen below you at the bottom of the stairs.", before [; Enter: <>; ]; RoomObj UCStaircase "double staircase" UpstairsCorridor with name "stairs" "staircase" "stairway" "double" "flight" "flights", description "The staircase is very artistically designed, with two separate flights splitting apart from the balcony and descending to the first floor.", before [; Climb, ClimbDown: <>; Cut: <>; ]; RoomObj UCStatue "statue" UpstairsCorridor class GraniteObj, with name "statue" "finney" "granite" "centerpiece", description "The statue at the bottom of the stairs. You should probably go downstairs if you want to get a closer look.", before [; Attack, Burn, Catch, Climb, Cut, Knock, Lift, Pull, Push, Search, Smell, Take, Taste, Tie, Touch, Turn: "You cannot reach the statue from here."; ]; ! ####################### ! ### Vault Door (VD) ### ! ####################### Room VaultDoor "Vault Door" with name "vaultdoor", description [; print "From this central location, you can see into empty rooms to the north and south."; print " Both are scavenged clean of furniture, like giant purple voids. To the east, you can see the remnants of the front door, amidst the rubble of a formerly large boulder. "; if (self has flag) "The entrance to a massive vault sits in the west wall."; "A giant vault door covers most of the west wall."; ], before [; Colour: "The walls of the vault shimmering momentarily, but do not change. The owner of the house must have applied ~Purple-Forever~ on his entire abode."; Literal: if (self hasnt flag) { give self flag; score = score + 2; print "As the notes leave your horn, they seem to hang in the air, coiling and twining into thin black strands."; print " You come to rest on the final cadence and the strands begin to dance, whipping through the air until they cover the entire vault door."; print " There is a cacophonous clatter of grating metal and suddenly the vault door is no more!"; print " In its place stands a blinking, and thoroughly confused hamster, which quickly takes the opportunity to run out the front door.^^"; "[You have earned two points for Assisting in the Population Regeneration of the Indigenous Volcano hamster.] "; } "You play the tune but nothing else happens."; Think: if (self has flag) "You wonder where the hamster went."; "You wonder how to get past the giant purple vault door."; ], e_to [; if (self hasnt general && SongBag --> 5) { give self general; Cutscenes.playScene(); } if (self hasnt firstTime && SongBag --> 7) { give self firstTime; Cutscenes.playScene(); } return FrontDoor; ], n_to "You peek in the northern room but see nothing of interest.", s_to "You peek in the southern room but it is empty.", w_to [; if (self hasnt flag) "There seems to be a giant purple vault door in your way."; return InsideVault; ], cant_go "There doesn't seem to be a doorway there.", has ~general ! Never seen cutscene / Seen cutscene ~flag ! Vault door there / No door ~firstTime; ! Never seen second cutscene / Seen second cutscene RoomObj VDDoor "vault door" VaultDoor with name "vault" "door" "entrance" "wall", description [; if (VaultDoor has flag) "The vault is now open."; "The vault door is a massive purple affair with no visible handles or hinges. It covers the wall like a giant leech."; ], before [; Attack: if (VaultDoor has flag) "There is no longer a door there."; "You pound on the door but it remains shut. On the other side, echoes can be heard for several seconds."; Climb, Jump: if (VaultDoor has flag) "There is no longer a door there."; "You find no purchase on the vault door."; Close: if (VaultDoor has flag) "The door has disappeared."; "The vault door is already closed."; Cut: if (VaultDoor has flag) "There is no longer a door there."; "The door seems to be made out of some strong metal alloy. You won't be cutting through it anytime soon."; Dig: if (VaultDoor has flag) "There is no longer a door there."; "The door is not made of earth."; Eat: if (VaultDoor has flag) "There is no longer a door there."; "Your teeth are definitely not strong enough."; Enter: if (VaultDoor has flag) <>; "The vault door is closed."; Knock: if (VaultDoor has flag) "There is no longer a door there."; "You knock on the vault door but nothing responds beyond echoes."; Lift: if (VaultDoor has flag) "There is no longer a door there."; "Not likely. It'd be easier to run backwards up a hill with no legs than it would to lift such a door."; Listen: "You don't hear anything inside the vault."; Lock, Unlock: "You don't seem to see any keyholes or latches."; LookUnder: if (VaultDoor has flag) "There is no longer a door there."; "You try to peer through the cracks around the vault door, but there aren't any."; Open: if (VaultDoor has flag) "There is no longer a door there."; "You run your hands across the door but don't find any handles or levers with which to open it."; Pull: if (VaultDoor has flag) "There is no longer a door there."; "The lip of the vault door is flush with the wall, and your fingers cannot get a grip."; Push, PushDir: if (VaultDoor has flag) "There is no longer a door there."; "You brace yourself against the door and valiantly push it, but it doesn't budge an inch."; Search: if (VaultDoor has flag) "There is no longer a door there."; "Going over the vault door with a fine tooth comb brings up nothing that will help you open it."; Smell: if (VaultDoor has flag) "There is no longer a door there."; "It smells faintly of purple paint, applied years ago."; Take: if (VaultDoor has flag) "There is no longer a door there."; "Where would you put it?"; Taste: if (VaultDoor has flag) "There is no longer a door there."; "You lick the metal vault door, thankful that it's not below freezing in here."; Touch: if (VaultDoor has flag) "There is no longer a door there."; "The surface of the vault door is smooth."; ]; RoomObj VDRemains "front door remnants" VaultDoor with parse_name [i; if (FrontDoor has flag) { while (NextWord() == 'front' or 'door' or 'remnants' or 'rubble' or 'debris' or 'boulder' or 'demolished') i++; } else { while (NextWord() == 'front' or 'door') i++; } return i; ], description "The remnants of the front door are mixed with the demolished boulder that caused its demise.", before [; Attack: "There isn't much left to assault."; Close, Open: "That definitely won't happen anytime soon, judging from the door's current state."; Enter: <>; Pull, Push, Search: if (FrontDoor has flag) "You sift through the debris but find nothing useful."; "The door won't budge."; Take: "You probably won't need to carry the rubble around."; Touch: "You run your fingers through the remnants of the door."; ]; RoomObj VDRooms "rooms" VaultDoor with name "room" "rooms" "northern" "southern", description "The rooms are empty except for dust. They were evidently cleaned out quite thoroughly sometime in the past.", has pluralname; RoomObj VDFrame "mirror frame" VaultDoor with parse_name [i j k; k = 'frame'; if (mirror in player || mirror in location) j = 'empty'; if (mirror in self) j = 'frame'; if (mirror notin player && mirror notin self && mirror notin location) { j = 'mirror'; k = 'empty'; } while (NextWord() == 'frame' or j or k) i++; return i; ], initial [; if (mirror notin self) { print "An empty mirror frame sits on one wall."; if (self hasnt firstTime) { give self firstTime; " The resident mirror is nowhere in sight."; } ""; } "A mirror hangs on the wall."; ], description [; print "The frame is purple with gilt edges."; if (child(self) ~= nothing) { print " In the frame you see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Empty: if (child(self) ~= nothing) "The mirror looks fine where it is."; LookUnder, Search: "There is nothing behind the mirror frame except the wall."; Pull, Push: "The frame is permanently attached to the wall."; Receive: if (child(self) ~= nothing) "The mirror frame is full."; switch (noun) { mirror: move noun to self; if (self has flag) "You hang the mirror in its frame."; move ColourMusic to location; score = score + 2; give self flag; print "You place the mirror in the frame and notice an odd reflection out of the corner of your eye."; print " A closer inspection reveals that an indigo piece of sheet music sits on the floor behind you."; print " It is titled ~Dab of Colour~.^^[You have gained two points for Retro-vampiric Music Location.] "; default: "That doesn't belong there."; } ""; Take: if (child(self) ~= nothing) <>; "The frame is securely fastened to the wall."; Touch: "The mirror frame feels smooth."; ], has ~scenery container ~openable open transparent static ~firstTime ! Never seen / Seen ~flag; ! No score / scored ! ################ ! ### Void (V) ### ! ################ Room Void "Void" with name "void", description "~What do you think you're doing in here? Keep your hands off the TXD and stay away from those debugging verbs, churlio!~"; ! ########################### ! ### Volcano Center (VC) ### ! ########################### Room VolcanoCenter "Center of Volcano" with name "volcanocenter", rainCount 0, ! Intensity of rain description [; print "You stand in the center of a small community built inside a dormant volcano. High above you, the mouth of the volcano allows a view of the outside sky and the occasional birds in flight."; print "A paved road runs from the southwest to the east and a small well-manicured park is to the south. A dirt path crosses the paved one from the north and goes to the southeast."; print " To the west, stands a small granite building with a bronze plaque by its doorway."; if (self.rainCount > 3) " Rain from above is collecting in the storm drain in the center of the paths."; ""; ], before [; Listen: "The whispering of the wind across the mouth of the volcano echoes down from above."; LookDown: "In the center of the crossed paths sits a large grated drain, about three feet across."; LookUp: "Far above you, you see clouds passing over the mouth of the volcano."; Rain: if (self.rainCount >= 6) { self.rainCount = 9; "The wind picks up, but the storm does not get any worse."; } else if (self.rainCount >= 4) { self.rainCount = 7; print "The fury of the sky bursts forth and heavy rain pours through the volcano mouth."; if (DeadEnd hasnt flag) { score = score + 3; give DeadEnd flag; move DEMud to DeadEnd; " You hear an ominous rumble from deep inside the Construction Office.^^[You have just gained three Rainmaker points.] "; } ""; } else if (self.rainCount >= 1) { self.rainCount = 5; move VCRain to VolcanoCenter; "As the unmistakable scent of rain reaches your nose, the first drops of rain fall through the volcano mouth."; } else if (self.rainCount == 0) { self.rainCount = 3; "The clouds grow darker and more threatening far above, but it has not yet begun to rain."; } Smell: "You smell a faint gust of fresh air from above."; ], farRain [; switch (self.rainCount) { 0: rtrue; 1: print "^The sky no longer looks threatening.^"; 4: print "^The light rain abates.^"; remove VCRain; 6: print "^The fury of the storm lessens.^"; } self.rainCount--; rtrue; ], each_turn [; switch (self.rainCount) { 0: if (random(100) < 25) print_ret (string) random("^Clouds cross over the mouth of the volcano, casting shadows for a moment.", "^Sunlight peeks past the clouds to shine into the volcano. "); rtrue; 1: print "^The sky no longer looks threatening.^"; 4: print "^The light rain abates.^"; remove VCRain; 6: print "^The fury of the storm lessens.^"; } self.rainCount--; rtrue; ], in_to ConstructOffice, w_to ConstructOffice, n_to [; if (Leonine.trying == 0) print "The dirt path meanders through odd rock formations before leading you to a Mess Hall...^"; return (MessHall); ], s_to LibraryLane, se_to MazeEntrance, sw_to PavedRoad, e_to OutCourt, cant_go "Paths and roads lead away in every direction except northeast and northwest, and buildings are to the north and west."; RoomObj VCBirds "birds" VolcanoCenter with name "birds" "bird", description "The occasional bird flies through the sky outside the volcano.", before [; Knock: "You can't reach the birds."; ], has pluralname; RoomObj VCBuilding "Construction Building" VolcanoCenter with name "building" "construction" "house" "doorway", description "This building looks quite large, and eventually connects with the side of the volcano farther to the west. There is no door in the doorway, and a bronze plaque is hung on one side.", before [; Climb: "The construction building is too tall to climb."; Enter: <>; ]; RoomObj VCCommunity "community" VolcanoCenter with name "community" "small", description "You are standing in the center of the community.", before [; Enter: "You are already in the community."; Search: <>; ]; RoomObj VCClouds "clouds" VolcanoCenter with name "clouds" "cloud", description [; switch (VolcanoCenter.rainCount) { 0: "Fluffy clouds, light as air."; 1,2,3: print "The clouds look dark.^"; default: "Rain falls from the clouds, to be collected by the storm drain in the road."; } rtrue; ], before [; Examine: rfalse; default: "You can't reach the clouds."; ], has pluralname; RoomObj VCDrain "Storm Drain" VolcanoCenter with name "drain" "storm" "grate", description "A storm drain sits in the middle of the road. Judging from its placement, it probably keeps the roads from flooding when it rains up above. Etched into the grating is:^^Nolava Odd Community^Building Code #015 ", before [; Attack: "You bang on the drain, but don't accomplish anything."; Climb, Enter: "You cannot enter the storm drain since it is closed."; JumpOver: "Jumping over the drain gives you a strong sense of accomplishment."; Lift, Pull, Take: "The drain cover seems to be held firmly in place."; LookUnder, Search: "You peer through the grating and see nothing interesting in the conduit below."; Open: "There does not seem to be any obvious way to open up the drain."; Smell: "The drain smells of mildew and rotted leaves."; Taste: "That's unsanitary."; Touch, Rub: "You scratch a few flakes of rust from the drain."; ], has container; RoomObj VCMouth "mouth" VolcanoCenter with name "volcano" "mouth", description "The volcano mouth is over a quarter of a mile above you. You could probably escape through it if you had a hot-air balloon, a newspaper, some matches, and a receptacle.", before [; Knock: "You can't reach the mouth of the volcano."; Receive: "You don't have enough strength to throw anything that far."; ]; RoomObj VCPark "park" VolcanoCenter with name "manicured" "park", description "To the south, you see a dainty little park with a lane running down the center.", before [; Knock: "You can't reach the park from here."; ]; RoomObj VCPath "dirt path" VolcanoCenter with name "dirt" "path", description "The dirt path crosses the paved road and runs from north to southeast. In the center, there is a large storm drain.", before [; Knock: "You knock on the ground, but no one hears."; Rub, Touch: "The road feels dusty."; Taste: "Licking dirt roads can be dangerous to your health."; ]; Plaque VCPlaque "bronze plaque" VolcanoCenter with description "The bronze sign shows wear from the elements, probably since it is directly under the volcano mouth.^^CONSTRUCTION OFFICE^Nolava Odd Community^Building Code #001 "; RoomObj VCRain "falling rain" with name "rain" "water" "falling", description "Rain falls from the clouds, to be collected by the storm drain in the road.", before [; Examine: rfalse; Insert: if (second == cup) { remove cup; move cupWater to player; "You fill the cup with rain."; } Touch: "The rain feels obviously wet."; default: "You can't do that to the rain."; ]; RoomObj VCRoad "paved road" VolcanoCenter with name "road" "pave" "paved", description "The paved road leads from the southwest to the east and looks well-traveled. In the center, there is a large storm drain.", before [; Knock: "You can't reach the park from here."; Rub, Touch: "The road feels rough."; Taste: "Licking roads can be dangerous to your health."; ]; RoomObj VCSky "sky" VolcanoCenter with parse_name [i j; if (VolcanoCenter.rainCount == 0) j = 'sun'; else j = 'sky'; while (NextWord() == 'sky' or j) i++; return i; ], description [; if (VolcanoCenter.rainCount == 0) "The sky is clear and sunny, except for an occasional passing cloud."; "The sky is overcast."; ], before [; Examine: rfalse; default: "You reach for the sky, but can't quite get there."; ]; ! #################### ! ### Workshop (W) ### ! #################### Room Workshop "Workshop" with name "workshop", description "You stand in a cluttered woodworking shop whose only exit is to the northwest. All around the room you see various half-completed shapes carved from wood.", before [; Listen: "Somewhere far away, you can just make out the sound of one hand clapping."; Smell: "The air smells of fine wood and sawdust."; ], nw_to LowerHall, cant_go "The only exit from the workshop is back to the northwest."; RoomObj WShapes "wooden shapes" Workshop with name "half" "complete" "completed" "finney^s" "unfinished" "projects" "wooden" "wood" "shapes" "carved" "carving" "carvings" "sculptures" "sculpture", description "It would seem that Finney was quite a talented and prolific woodcarver, but it would also seem that he was not very good at finishing his projects. Half-formed carvings and sculptures take up most of the available space in the room.", before [; Attack: "It might be therapeutic but taking your aggressions out on the unfinished carvings would accomplish nothing."; Count: "The unfinished sculptures are numerous. You see at least twenty larger ones and several hundred smaller trinkets and figurines."; Cut: if (second == jigSaw) { if (self hasnt firstTime) { give self firstTime; move armadillo to location; "Taking one of the smaller blocks of wood, you carve out a pleasant little armadillo."; } "You consider finishing one of the other sculptures, but finally decide that the original creator should be the one to do it."; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the wood with your bare hands."; LookUnder, Search: "You peer underneath a few sculptures but don't find anything."; Pull, Push: "You don't need to move the sculptures."; Take: "You have no use for a bunch of incomplete pieces of art."; ], has pluralname ~firstTime; ! Never cut the wood / Wood cut RoomObj WDevice "rectangular device" Workshop with name "device" "rectangular" "frame" "metal", initial "A squat metal device sits on the floor here.", description [; print "It is a squat metal device sitting in the center of the workshop. The surface is unmarked and the only noticeable feature are two adjacent slots on top, one white and one black."; if (child(WDeviceWhiteSlot) == nothing && child(WDeviceBlackSlot) ~= nothing) " In the black slot you see ", (a) child(WDeviceBlackSlot), "."; if (child(WDeviceWhiteSlot) ~= nothing && child(WDeviceBlackSlot) == nothing) " In the white slot you see ", (a) child(WDeviceWhiteSlot), "."; if (child(WDeviceWhiteSlot) ~= nothing && child(WDeviceBlackSlot) ~= nothing) " There is ", (a) child(WDeviceWhiteSlot), " in the white slot and ", (a) child(WDeviceBlackSlot), " in the black slot."; ""; ], before [; Attack: "You kick the metal device, but nothing changes."; Climb: "The device is only about two feet high."; Close, Open: "There are no noticeable panels to open or close."; LookUnder: "There is nothing below the metal device except for the workshop floor."; Receive: "You'll have to specify which of the device's two slots you wish to insert that in."; Search: "Other than the two adjacent slots, the device is unspectacular."; Push, Pull, Take, Turn: "Though small, the device is much heavier than it first appears. You can't move it more than a few inches to either side."; Taste: "Licking the metal device, you taste a little errant sawdust."; Touch: "The metal device is cold to the touch."; ], completeCheck [; if (whitePiece in WDeviceWhiteSlot && blackPiece in WDeviceBlackSlot) { remove WDevice; move jigSaw to location; score = score + 2; print " There is an unspectacular puff of air and the device disappears from view. In its place, a small portable jigsaw sits on the floor.^^[You have gained two points for Humouring a Bad Pun.] "; } if (whitePiece in WDeviceBlackSlot && blackPiece in WDeviceWhiteSlot) print " With both slots filled, you stand back expectantly. After several minutes, it becomes apparent that nothing is going to happen, and you can almost see your childhood teacher berating you for not following instructions."; ], has ~scenery transparent; RoomObj WDeviceBlackSlot "black slot" WDevice with name "slot" "black", description [; print "The black slot is quite small, and almost square. "; if (child(self) ~= nothing) "In the slot you see ", (a) child(self), "."; "In tiny letters, you see ~BLACK GOES HERE~."; ], before [ ; Enter: "You can't fit in the slot."; Receive: if (child(self) ~= nothing) "The slot is already full."; if (noun ofclass PuzzlePiece) { move noun to self; print "You place the puzzle piece in the black slot."; WDevice.completeCheck(); ""; } "That won't fit in the slot."; Search: if (child(self) ~= nothing) "In the slot you see ", (a) child(self), "."; "The slot is empty."; ], has container ~openable open; RoomObj WDeviceWhiteSlot "white slot" WDevice with name "slot" "white", description [; print "The white slot is quite small, and almost square. "; if (child(self) ~= nothing) "In the slot you see ", (a) child(self), "."; "In tiny letters, you see ~WHITE GOES HERE~."; ], before [; Enter: "You can't fit in the slot."; Receive: if (child(self) ~= nothing) "The slot is already full."; if (noun ofclass PuzzlePiece) { move noun to self; print "You place the puzzle piece in the white slot."; WDevice.completeCheck(); ""; } "That won't fit in the slot."; Search: if (child(self) ~= nothing) "In the slot you see ", (a) child(self), "."; "The slot is empty."; ], has container ~openable open;