//PARSE WITH NORMAL TADS OPERATORS #pragma C- //BEGINNING OF SECOND TEST, THE LOWER LEVEL// GearRoom: room sdesc = "Gear Room" ldesc = "The room in which you now stand is truly a monument to the Artisan sect. There are gears and pumps everywhere, in mechanical combinations too complicated for the eye to follow. Most of the gears seem to involve rotating sections of the ceiling, but it is hard to be sure. <> and a pipe runs from a hydraulic lift under the staircase through an exit to the north. Another exit leads east.\n" up = { if ( GearStair.isfull ) //IS THE PUZZLE SOLVED? { "A voice echoes in the room around you: <>\b"; return MirrorRoom; } else return HalfStair; } north = TankRoom east = BreakRoom ; GearStair: hard, fixeditem, surface location = GearRoom noun = 'staircase' 'stairs' 'case' 'steps' 'stairway' 'stairwell' adjective = 'stair' sdesc = "staircase" ldesc = { if( Chain.ispulled ) //DO THE STAIRS STILL LOOK LIKE STAIRS? { "The staircase has been transformed into an odd ladder that extends to the room above.\n"; } else { "The staircase looks like any other perfectly normal staircase might"; if ( self.isfull ) ", it extends to the room above.\n"; //STAIRCASE MUST BE EXTENDED TO REACH THE ROOM ABOVE else " except that it goes no more than a few feet up toward a hole in the ceiling before stopping.\n"; } } isfull = nil verIoPutOn( actor ) = { "If you would like to put something on top of the stairs try going up them and then dropping the item.\n"; } verDoClimb( actor ) = {} doClimb( actor ) = { if ( GearStair.isfull ) //IS THE PUZZLE SOLVED? { "A voice echoes in the room around you: <>\b"; Me.travelTo( MirrorRoom ); } else Me.travelTo( HalfStair ); } ; LiftPipe: hard, fixeditem location = GearRoom noun = 'pipe' sdesc = "pipe" ldesc = "The pipe is perhaps a hand wide and made of metal. It runs from the hydraulic lift under the stairs, through the room, and out the exit to the north. It would seem that it is designed to carry pressure of some sort to the hydraulic lift to cause it to, well, lift.\n" ; Machinery: hard, decoration location = GearRoom noun = 'gear' 'gears' 'pump' 'pumps' 'machinery' sdesc = "machinery" ldesc = "The various gears and pumps scattered across the ceiling are too high above to examine closely. What you can see from this distance seems to indicate that their primary function is to rotate sections of the floor above. Undoubtedly you will be faced with that rotating floor when you manage to get past the stairway in this room.\n" ; Lift: hard, fixeditem location = GearRoom noun = 'lift' adjective ='hydraulic' sdesc = "hydraulic lift" ldesc = { if( GearStair.isfull ) //A SOLUTION HAS ALREADY BEEN USED SO DON'T BOTHER HINTING AT OTHERS "There is nothing exceptionally noteworthy about the lift. Its intended function is apparently to raise the staircase, which has already been done.\n"; else { "The lift looks slightly odd, and upon closer inspection you realize why. Apparently the lift is designed to hold the staircase down, more than lift it up. The design is such, that when pressure is supplied through the pipe the hydraulic lift extends allowing the staircase to rise, but it is also obvious from the large coiled spring you see here, that if the hydraulic lift were not connected to the stairs, they would simply rise the remaining distance on their own.\n"; if( !self.isseen ) //FIRST TIME PLAYER LOOKS AT LIFT FIND CHAIN { "You notice a chain lying on the floor beside the lift.\n"; Chain.moveInto( GearRoom ); //MOVE THE CHAIN INTO EXISTENCE self.isseen := true; } else "There is a chain lying on the floor beside the lift.\n"; } } isseen = nil specialbreak = true //BREAKS DIFFERENTLY THAN OTHER HARD OBJECTS broke( iobj ) = { "You swing <> violently against <>. The impact sends a wave of pain up your arms but you manage to break <> off of the stairs. With nothing holding them down the stairs lurch upward and with a click as they reach the ceiling above the stairway is complete.\n"; GearStair.isfull := true; Desc.Warrior := Desc.Warrior +1; //WARRIOR SOLUTION TO THE PUZZLE Desc.current := MaesterWarrior; self.specialbreak := nil; //LIFT REVERTS TO A REGULAR HARD OBJECT AFTER FIRST BREAK addword( Lift, &adjective, 'broken' ); //THE LIFT IS NOW BROKEN self.ldesc := "The hydraulic lift is broken beyond repair, a large dent bends it nearly in half but it is still firmly fastened to the ground.\n"; } ; Spring: hard, fixeditem location = GearRoom noun = 'spring' adjective = 'large' 'coiled' sdesc = "spring" ldesc = "The spring is wound tight, pushing upward against the stairs. If the lift were not holding the stairs in place they would no doubt be launched toward the ceiling by the force of the spring.\n" ; Chain: hard, fixeditem noun = 'chain' sdesc = "chain" ldesc = "The chain is attached at one end to the bottom of the staircase. " verDoTake( actor ) = { "<>It cannot be taken."; } verDoPull( actor ) = {} doPull( actor ) = { "Leaning all of your weight against the chain you pull. For a moment the only effect is for your face to turn red with the effort but then with a shudder the bottom of the staircase begins to move toward you. As it does the stairs rotate and the top stair moves closer and closer to the ceiling above, each individual step also turns as you pull until with a click everything locks into place.\n The former staircase has now been transformed into a useable ladder that extends all the way to the room above.\n"; GearStair.isfull := true; Desc.Alchemist := Desc.Alchemist +1; //ALCHEMIST SOLUTION TO THE PUZZLE Desc.current := MaesterAlchemist; self.ispulled := true; //KEEP TRACK OF THE CONDITION OF THE STAIRS addword( GearStair, &noun, 'ladder' ); //THE STAIRS CAN NOW BE REFERRED TO AS A LADDER } ispulled = nil ; HalfStair: room sdesc = "Incomplete Staircase" ldesc = "You are standing on an incomplete staircase that extends a short way toward the room above but not far enough to allow you to go up any farther.\n" down = GearRoom up = { if ( BreakChair.location = self ) //SEER SOLUTION TO THE PUZZLE { "You climb up on the stool and pull yourself into the room above.\b"; if( !GearRoom.solved ) { Desc.Seer := Desc.Seer +1; Desc.current := MaesterSeer; "A voice echoes in the room around you: <>\b"; GearRoom.solved := true; } return MirrorRoom; } else return self.noexit; } ; TankRoom: room sdesc = "Pipe’s End" ldesc = "The pipe ends here in a large tank sitting against the wall. The only exit leads south.\n" south = GearRoom enterRoom(actor) = { notify (self, &script, 0); pass enterRoom; } leaveRoom(actor) = { unnotify(self, &script); pass leaveRoom; } script = { if ( not GearStair.isfull ) { if ( Meter.lastvalue <> Meter.value ) { if ( Meter.value < 42 ) { "Bubbling and hissing sounds come out of the pipes around the tank for a moment but nothing obvious happens.\n"; } if ( Meter.value > 42 ) { "The hissing sound of pressure building up fills the inside of the tank. The sound increases in volume until suddenly vents open up in the top of the tank.\n"; } if ( Meter.value = 42 ) { "You can hear the hiss of pressure building up inside the tank and suddenly the sound shoots down the pipe to the south."; if( GearStair.isfull ) " Nothing else obvious happens.\n"; else { " You hear the steady thumping noise of the hydraulic lift followed by a loud click.\n"; Desc.Artisan := Desc.Artisan +1; //ARTISAN SOLUTION TO THE PUZZLE Desc.current := MaesterArtisan; GearStair.isfull := true; } } } if ( Meter.value > 42 ) { "\bClouds of steam are rising out of the top of the tank.\n"; } } Meter.lastvalue := Meter.value; } ; Tank: hard, fixeditem location = TankRoom noun = 'tank' adjective = 'large' sdesc = "tank" ldesc = "A large metal tank, presumably for holding water or some other liquid. There are six valves connected to the tank that can be open or closed. Above the valves is a meter with a needle that points to a number between 0 and 100. The meter currently reads <>.\n" ; Meter: fixeditem, readable location = TankRoom noun = 'meter' 'needle' 'number' sdesc = "meter" readdesc = self.ldesc ldesc = "The meter currently reads <>.\n" value = { return ValveOne.num + ValveTwo.num + ValveThree.num + ValveFour.num + ValveFive.num + ValveSix.num; } lastvalue = 0 ; Valves: hard, fixeditem location = TankRoom noun = 'valves' sdesc = "valves" ldesc = "You can refer to individual valves by their number, such as valve one. There are six valves.\n" verDoOpen( actor ) = {self.ldesc;} verDoClose( actor ) = {self.ldesc;} ; TankPipe: hard, fixeditem location = TankRoom noun = 'pipe' sdesc = "pipe" ldesc = "The pipe is perhaps a hand wide and made of metal. It ends here where it reaches the tank, continuing in the other direction to the south. It would seem that it is designed to carry pressure from the tank to the lift in the room to the south.\n" ; class valve: hard, fixeditem location = TankRoom ldesc = "The valve is currently <>.\n" isopen = nil thedesc = self.sdesc verDoOpen( actor ) = { if ( self.isopen ) "It is already open.\n"; } doOpen( actor ) = { "The valve is now open.\n"; self.isopen := true; } verDoClose( actor ) = { if ( not self.isopen ) "It is already closed.\n"; } doClose( actor ) = { "The valve is now closed.\n"; self.isopen := nil; } ; ValveOne: valve noun = 'one' 'valve' adjective = 'valve' 'first' '1' sdesc = "valve one" num = { if ( self.isopen ) return 9; else return 0; } ; ValveTwo: valve noun = 'two' 'valve' adjective = 'valve' 'second' '2' sdesc = "valve two" num = { if ( self.isopen ) return 1; else return 0; } ; ValveThree: valve noun = 'three' 'valve' adjective = 'valve' 'third' '3' sdesc = "valve three" num = { if ( self.isopen ) return 27; else return 0; } ; ValveFour: valve noun = 'four' 'valve' adjective = 'valve' 'fourth' '4' sdesc = "valve four" num = { if ( self.isopen ) return 8; else return 0; } ; ValveFive: valve noun = 'five' 'valve' adjective = 'valve' 'fifth' '5' sdesc = "valve five" num = { if ( self.isopen ) return 31; else return 0; } ; ValveSix: valve noun = 'six' 'valve' adjective = 'valve' 'sixth' '6' sdesc = "valve six" num = { if ( self.isopen ) return 24; else return 0; } ; BreakRoom: room sdesc = "Break Room" ldesc = "Looking around you reveals a room striped bare of any adornment. From the layout it is quite possible this room once served as a break room of some sort. A slightly rusted metal table sits off to one side of the room. An exit leads west.\n" west = GearRoom ; BreakTable: hard, surface, fixeditem, readable location = BreakRoom noun = 'table' adjective = 'slightly' 'rusted' 'metal' sdesc = "metal table" ldesc = "Obviously old, rust has begun to eat through the metal in places on the table. A number has been scratched into the rust.\n" readdesc = {Number.ldesc;} ; Number: decoration, readable location = BreakRoom noun = 'number' 'rust' sdesc = "number" ldesc = "The number scratched into the rust reads 42.\n" ; BreakChair: hard, vehicle //NOT REALLY A VEHICLE BUT IT'S THE CLOSEST THING TO A CHAIR THAT CAN BE TAKEN location = BreakRoom noun = 'stool' adjective = 'metal' sdesc = "metal stool" ldesc = "A plain but sturdy metal stool.\n" bulk = 10 outOfPrep = "off of" statusPrep = "on" verDoClimb(actor) = { self.verDoBoard(actor); } doClimb(actor) = { self.doBoard(actor); } verDoStandon(actor) = { self.verDoBoard(actor); } doStandon(actor) = { self.doBoard(actor); } verDoSiton(actor) = { self.verDoBoard(actor); } doSiton(actor) = { self.doBoard(actor); } down = (self.location) doBoard(actor) = { if( self.location = HalfStair ) { "You climb up on the stool and pull yourself into the room above.\b"; if( !GearRoom.solved ) { Desc.Seer := Desc.Seer +1; Desc.current := MaesterSeer; "A voice echoes in the room around you: <>\b"; GearRoom.solved := true; } Me.travelTo( MirrorRoom ); } else pass doBoard; } isListed = //IT LOOKS ODD FOR THE GAME TO SAY THERE IS A STOOL HERE WHEN YOU'RE STANDING ON IT. { if( Me.location = self ) return nil; else return true; } ; //SECOND TEST CONTINUED, THE UPPER LEVEL MirrorRoom: room sdesc = "Mirror Room" ldesc = "There are four exits leading out of this room in the cardinal directions. The main feature of the room is a very large mirror standing straight up in the center of the room. Beside the mirror is an iron lever. <>\n<>\n" north = ExitRoom east = Empty1 south = Empty2 west = LensRoom extra = nil rotationCW = { self.extra := self.west; self.west := self.south; self.south := self.east; self.east := self.north; self.north := self.extra; } rotationCC = { self.extra := self.north; self.north := self.east; self.east := self.south; self.south := self.west; self.west := self.extra; } enterRoom(actor) = { if( !self.isseen ) { "As you enter the room there is a brief sound of gears rotating and a section of floor slides over the stairway covering it completely.\b"; } notify (self, &script, 0); //TELL WHAT LIGHT IF ANY COMES FROM THE WEST AND WHERE IT GOES pass enterRoom; } isseen = nil script = { if ( MirrorRoom.west = LensRoom and Lens.isopen = nil ) { "\bThe western exit seems to glow with a diffuse light.\n"; } else { "\bA beam of light shoots out of the exit to the west, "; if ( Mirror.from = 'west' or Mirror.to = 'west' ) { "hits the reflective surface of the mirror and shoots off to the "; if ( Mirror.from <> 'west' ) "<>.\n"; else "<>.\n"; } else "hits the back of the mirror and goes no further.\n"; } unnotify(self, &script); } ; Mirror: fixeditem location = MirrorRoom noun = 'mirror' adjective = 'large' 'very' 'standing' sdesc = "mirror" ldesc = "The mirror is angled so that it reflects from one of the room’s four exits straight to another. Currently it is aligned so that the <>ern exit is reflected into the <>ern exit and vice versa.\n" from = 'south' to = 'west' nextto = 'north' afterto = 'east' extra = nil rotationCC = { self.extra := self.from; self.from := self.to; self.to := self.nextto; self.nextto := self.afterto; self.afterto := self.extra; } ; Lever: hard, fixeditem location = MirrorRoom noun = 'lever' adjective = 'iron' sdesc = "lever" ldesc = "The lever is about waist high and made of iron.\n" verDoPush( actor ) = {} doPush( actor ) = (self.doPull( actor )) verDoPull( actor ) = {} doPull( actor ) = { "You pull the lever and the mirror begins to turn. "; if( BurnedGear.location = MirrorRoom ) Desc.current := MaesterAlchemist; //ALCHEMIST SOLUTION HAS BEEN INVOKED if( BrokenGear.location = MirrorRoom or BrokenGear2.location = MirrorRoom ) Desc.current := MaesterWarrior; //WARRIOR SOLUTION HAS BEEN INVOKED Mirror.rotationCC; if ( Gear.location = MirrorRoom ) { Desc.current := MaesterArtisan; //ARTISAN SOLUTION HAS BEEN INVOKED "As the mirror turns its edge catches the large wooden gear on the floor of the room and causes it to turn as well. As soon as the gear begins to turn large rumbling sounds start to emanate from the floor below. The ground shakes for a moment and suddenly the walls around you are rotating. When they stop rotating you can see that the door that once led north now leads east, the door that led east now leads south, and so on around the room. "; MirrorRoom.rotationCW; } if ( MirrorRoom.west = LensRoom and Lens.isopen = nil ) { "\bThe western exit seems to glow with a diffuse light.\n"; } else { "\bA beam of light shoots out of the exit to the west, "; if ( Mirror.from = 'west' or Mirror.to = 'west' ) { "hits the reflective surface of the mirror and shoots off to the "; if ( Mirror.from <> 'west' ) "<>.\n"; else "<>.\n"; } else "hits the back of the mirror and goes no further.\n"; } } ; Gear: wood, fixeditem location = MirrorRoom noun = 'gear' adjective = 'wooden' sdesc = "wooden gear" ldesc = "The wooden gear is approximately four feet in diameter, a shaft extends from the center of the gear down through the floor of the room.\n" broken = BrokenGear burned = BurnedGear ; BrokenGear: wood, item noun = 'gear' adjective = 'broken' 'wooden' sdesc = "broken gear" ldesc = "Other than being thoroughly broken there is nothing notable about the wooden gear.\n" broken = BrokenGear2 burned = BurnedGear ; BrokenGear2: wood, item noun = 'gear' adjective = 'broken' 'wooden' sdesc = "broken gear" ldesc = "Other than being thoroughly broken there is nothing notable about the wooden gear.\n" broken = BrokenGear2 burned = BurnedGear ; BurnedGear: earth, item noun = 'gear' 'ashes' adjective = 'pile' 'gear' sdesc = "pile of ashes" ldesc = "There is nothing notable about the pile of ashes.\n" ; Shaft: hard, fixeditem location = MirrorRoom noun = 'shaft' sdesc = "shaft" ldesc = "The shaft is a metal cylinder that extends down through the floor, presumably it connects the gear to the machinery you saw on the ceiling of the room below.\n" ; LensRoom: rotatingroom sdesc = "Lens Room" ldesc = { "You are in a square stone room. Directly across from the exit <> There is an iron lever set in the floor of the room. The only exit leads <>.\b"; if ( MirrorRoom.west = self ) { if ( Lens.isopen ) "A beam of light shoots out of the hole and through the exit to the <>. "; else "A diffuse light radiates out from the lens. "; } if ( MirrorRoom.north = self ) { if ( Mirror.from = 'north' or Mirror.to = 'north' ) { "A beam of light shoots in to the room from the exit to the south and dissapears into "; if ( Lens.isopen ) "the hole to the north.\n"; else "the lens on the north wall.\n"; } } } hashole = true ; Lens: fixeditem, seethruItem location = LensRoom noun = 'lens' sdesc = "lens" thrudesc = self.ldesc ldesc = { "A large glass lens in a brass cell that has been mounted to the wall by a track. "; if ( self.isopen ) "Looking through it reveals a stone wall on the other side of the glass.\n"; else { if ( MirrorRoom.west = self.location ) "A bright light from the other side of the lens hits the glass and spreads through the room in a diffuse glow.\n"; else if ( MirrorRoom.north = self.location ) { if ( Mirror.from = 'north' or Mirror.to = 'north' ) "The light entering through the exit to the south hits the lens and illuminates an open doorway behind it.\n"; else "Looking through it reveals an open doorway on the other side of the glass.\n"; } else "There is a hole in the wall behind the glass but on the other side of the hole is another stone wall.\n"; } } isopen = nil verDoLookin( actor ) = {} doLookin( actor ) = ( self.ldesc ) ; BrassCell: hard, fixeditem location = LensRoom noun = 'cell' adjective = 'brass' sdesc = "brass cell" ldesc = "The circular brass cell holds the lens in place on the track.\n" ; Track: hard, fixeditem location = LensRoom noun = 'track' sdesc = "track" ldesc = "The track allows the lens to move sideways, covering or uncovering the hole in the wall. How it is moved is not clear from looking at the track, but the lever probably has something to do with it.\n" ; Lever2: hard, fixeditem location = LensRoom noun = 'lever' sdjective = 'iron' sdesc = "lever" ldesc = "The lever is about waist high and made of iron.\n" verDoPush( actor ) = {} doPush( actor ) = (self.doPull( actor )) verDoPull( actor ) = {} doPull( actor ) = { "You pull the lever and the floor lurches under you as the outer rooms begin to rotate around the central mirror room in what would be a clockwise direction if you were looking down on it from above.\b"; MirrorRoom.rotationCW; if ( Lens.isopen ) { if ( MirrorRoom.west = self ) "A beam of light shoots out of the hole in the wall but is quickly cut off as "; else "\^"; "the lens slides in front of the hole in the wall. "; if ( MirrorRoom.west = self ) "A diffuse glow now radiates outward from the lens. "; Lens.isopen := nil; } else { "The lens slides away from the hole in the wall. "; if ( MirrorRoom.west = self ) "A beam of light shoots out of the hole and through the exit to the <>. "; Lens.isopen := true; } } ; ExitRoom: rotatingroom sdesc = "Archway" ldesc = "You are in a square stone room that is completely empty. An exit to the <> leads back to the mirror room. An archway has been cut into the wall directly across from the exit. <> " west = { if ( self.direction = 'west' ) return MirrorRoom; if ( self.direction = 'east' ) { "You step into the blinding light...\n"; //SEER SOLUTION TO THE PUZZLE Desc.Seer := Desc.Seer +1; Desc.current := MaesterSeer; "You hear a voice echoing through the stillness as the light wraps itself around you: <>\b As the voice fades away the world lurches suddenly and the blinding light vanishes.\b"; return DampRoom; } else { "You can’t go that way.\n"; return nil; } } north = { if ( self.direction = 'north' ) return MirrorRoom; if ( self.direction = 'south' ) return LightDoor; else { "You can’t go that way.\n"; return nil; } } ; Archway: fixeditem, seethruItem location = ExitRoom noun = 'arch' 'archway' 'way' adjective = 'arch' 'empty' sdesc = "Archway" thrudesc = self.ldesc ldesc = { if ( MirrorRoom.west = self.location ) "A beam of light shoots out of the archway and through the exit to the east. "; else if ( MirrorRoom.north = self.location ) { if ( Lens.isopen ) { if ( Mirror.from = 'north' or Mirror.to = 'north' ) "A beam of light shoots in to the room from the exit to the south and shoots through the archway which now leads to an open door.\n"; else "On the other side of the archway is a closed door.\n"; } else "On the other side of the archway is a closed door.\n"; } else if ( MirrorRoom.east = self.location or MirrorRoom.south = self.location ) "On the other side of the archway is a stone wall.\n"; } isopen = true verDoOpen( actor ) = {} doOpen( actor ) = { "It is an empty archway, there is nothing to open.\n"; return nil; } verDoClose( actor ) = {} doClose( actor ) = { "It is an empty archway, there is nothing to close.\n"; return nil; } ; LightDoor: doorway, floatingItem sdesc = "door" noun = 'door' location = { if ( Me.location = MirrorRoom.north ) return Me.location; else return nil; } isopen = { if ( Mirror.from = 'north' or Mirror.to = 'north' ) { if ( MirrorRoom.east <> LensRoom ) return true; else if ( MirrorRoom.east = LensRoom and Lens.isopen ) return true; else return nil; } else return nil; } noAutoOpen = true verDoOpen( actor ) = { if ( self.isopen ) "It is already open.\n"; } doOpen( actor ) = { if ( self.location = ExitRoom ) "There does not seem to be any way to open the door manually.\n"; else "You cannot reach the door through the hole in the wall.\n"; return nil; } verDoClose( actor ) = { if ( not self.isopen ) "It is already closed.\n"; } doClose( actor ) = { if ( self.location = ExitRoom ) "There does not seem to be any way to close the door manually.\n"; else "You cannot reach the door through the hole in the wall.\n"; return nil; } doordest = { if( Desc.current = MaesterArtisan ) //INCREMENT THE CURRENT SECT - SEER IS HANDLED SEPARATELY Desc.Artisan := Desc.Artisan +1; if( Desc.current = MaesterWarrior ) Desc.Warrior := Desc.Warrior +1; if( Desc.current = MaesterAlchemist ) Desc.Alchemist := Desc.Alchemist +1; "You step forward blindly and a voice intrudes upon your thoughts: <>\b As the voice fades away the world lurches suddenly and you find yourself transported to a totally new setting.\b"; return DampRoom; } ; class rotatingroom: room direction = { if ( MirrorRoom.north = self ) return 'south'; if ( MirrorRoom.east = self ) return 'west'; if ( MirrorRoom.south = self ) return 'north'; if ( MirrorRoom.west = self ) return 'east'; } north = { if ( self.direction = 'north' ) return MirrorRoom; else { self.redirect; return nil; } } south = { if ( self.direction = 'south' ) return MirrorRoom; else { self.redirect; return nil; } } east = { if ( self.direction = 'east' ) return MirrorRoom; else { self.redirect; return nil; } } west = { if ( self.direction = 'west' ) return MirrorRoom; else { self.redirect; return nil; } } redirect = { "In a place where all of the rooms rotate it can be hard to keep track of where the exits are, however the exit from this room currently leads <>.\n"; } ; class emptyroom: rotatingroom sdesc = "Empty Room" ldesc = { "You are in a square stone room that is completely empty. The only exit leads <>. The room has only one noticeable feature: a small circular hole cut into the wall directly across from the exit. "; if ( MirrorRoom.west = self ) "A beam of light shoots out of the hole and through the exit to the <>. "; if ( MirrorRoom.north = self ) { if ( Mirror.from = 'north' or Mirror.to = 'north' ) { if ( MirrorRoom.east <> LensRoom or Lens.isopen ) { "A beam of light shoots in to the room from the exit to the south and dissapears in the hole to the north.\n"; } } } } hashole = true ; Empty1: emptyroom ; Empty2: emptyroom ; StoneHole: floatingItem, fixeditem, seethruItem location = { if ( Me.location.hashole ) return Me.location; else return nil; } noun = 'hole' 'circle' adjective = 'circular' 'small' sdesc = "hole" thrudesc = self.ldesc ldesc = { if ( MirrorRoom.west = self.location ) "A hole cut into the stone wall; there is a beam of light coming out of it from the other side of the wall.\n"; else if ( MirrorRoom.north = self.location ) { if ( Mirror.from = 'north' or Mirror.to = 'north' ) "The beam of light disappears into the hole. Looking through the hole you can see an open door on the other side.\n"; else "Looking through the hole you can see what looks like a closed door on the other side.\n"; } else if ( MirrorRoom.east = self.location or MirrorRoom.south = self.location ) "The hole is cut straight through the wall but there is another wall on the other side so you see nothing but stone.\n"; } verDoLookin( actor ) = {} doLookin( actor ) = ( self.ldesc ) ; //