Verb 'verbose' * -> Verbose ; Verb 'brief' * -> Brief ; Verb 'super' 'superbrief' * -> Superbrief ; Verb 'diagnose' * -> Diagnose ; Verb 'i//' 'inventory' * -> Inventory ; Verb 'q//' 'quit' * -> Quit ; Verb 'restart' * -> Restart ; Verb 'restore' * -> Restore ; Verb 'save' * -> Save ; Verb 'score' * -> Score ; Verb 'script' * -> Script ; Verb 'unscript' * -> Unscript ; Verb 'version' * -> Version ; Verb '$ve' * -> Verify ; Verb 'activate' * on(held,carried,in_room,on_ground) -> SwitchOn ; Verb 'again' 'g//' * -> Again ; Verb 'answer' 'reply' * object -> AnswerObj * -> Answer ; Verb 'apply' * object 'to' object -> Insert ; Verb 'attack' 'fight' 'hit' 'hurt' 'injure' * animate(in_room,on_ground) 'with'/'using'/'thru'/'through' weapon(held,carried,have) -> Attack ; Verb 'back' * -> Back ; Verb 'blast' * -> BlowUp ; Verb 'blow' * 'into'/'inside'/'in' object -> BlowIn * 'up'/'u//' object -> BlowUp * 'up'/'u//' object 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground) -> Inflate * 'out' object -> SwitchOff ; Verb 'board' * vehicle(in_room,on_ground) -> Board ; Verb 'brush' 'clean' * object(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' object -> Brush * object(held,carried,in_room,on_ground) -> Brush ; Verb 'bug' * -> Bug ; Verb 'burn' 'ignite' 'incinerate' * 'down'/'d//' flammable(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' flame(held,carried,in_room,on_ground,have) -> Burn * flammable(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' flame(held,carried,in_room,on_ground,have) -> Burn ; Verb 'barf' 'chomp' 'lose' * -> Vomit ; Verb 'climb' 'sit' * 'with'/'using'/'thru'/'through' object -> EnterObj * 'onto'/'on' vehicle(in_room,on_ground) -> ClimbOn * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * climbable(in_room,on_ground) -> ClimbObj * 'down'/'d//' climbable(in_room,on_ground) -> ClimbDown * -> ClimbDown * 'up'/'u//' climbable(in_room,on_ground) -> ClimbUp * -> ClimbUp ; Verb 'close' * door(held,carried,in_room,on_ground) -> Close ; Verb 'command' * animate -> Command ; Verb 'count' * object -> Count ; Verb 'cross' 'ford' * object -> Cross ; Verb 'cut' 'pierce' 'slice' * object 'with'/'using'/'thru'/'through' weapon(held,carried) -> Cut ; Verb 'curse' 'damn' 'fuck' 'shit' * animate -> Curse * -> Curse ; Verb 'deflate' * object -> Deflate ; Verb 'block' 'break' 'damage' 'destroy' 'smash' * 'into'/'inside'/'in' object(held,carried,in_room,on_ground) -> Open * 'down'/'d//' object(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' object(held,carried,take) -> Poke * object(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' object(held,carried,take) -> Poke ; Verb 'dig' * object(in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,have) -> Dig * 'into'/'inside'/'in' object(in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,have) -> Dig ; Verb 'disembark' * vehicle(in_room,on_ground) -> Disembark ; Verb 'disenchant' * object -> Disenchant ; Verb 'drink' 'imbibe' 'swallow' * 'from' object(held,carried) -> DrinkFrom * drinkable(held,carried,in_room,on_ground) -> Drink ; Verb 'drop' 'release' * object(held,many,have) 'onto'/'on' object -> PutOn * object(held,many,have) 'into'/'inside'/'in' object -> Insert * object(held,many,have) 'down'/'d//' object -> Insert * object(held,many,have) -> Drop ; Verb 'bite' 'consume' 'eat' 'taste' * edible(held,carried,in_room,on_ground,take) -> Eat ; Verb 'echo' * -> Echo ; Verb 'enchant' * object(in_room,on_ground) -> Enchant ; Verb 'enter' * object -> EnterObj * -> Enter ; Verb 'exit' * object -> Exit * -> Exit ; Verb 'describe' 'examine' 'what' 'whats' * 'onto'/'on' object(held,carried,in_room,on_ground,many) -> LookIn * 'into'/'inside'/'in' object(held,carried,in_room,on_ground,many) -> LookIn * object(many) -> Examine ; Verb 'banish' 'begone' 'cast' 'drive' 'exorcise' * 'away' animate -> Banish * 'out' animate -> Banish * object -> Banish ; Verb 'douse' 'extinguish' * light(held,carried,in_room,on_ground,take,have) -> SwitchOff ; Verb 'fill' * container(held,carried,in_room,on_ground) -> Fill * container(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' object -> Fill ; Verb 'find' 'see' 'seek' 'where' * object -> Find ; Verb 'chase' 'come' 'follow' 'pursue' * object -> Follow * -> Follow ; Verb 'frobozz' * -> Frobozz ; Verb 'donate' 'feed' 'give' 'offer' * animate(on_ground) object(held,many,have) -> Give * object(held,many,have) 'to' animate(on_ground) -> GiveTo ; Verb 'hand' * animate(on_ground) object(held,many,have) -> Give * object(held,many,have) 'to' animate(on_ground) -> GiveTo ; Verb 'hatch' * object -> Hatch ; Verb 'hello' 'hi' * object -> Hello * -> Hello ; Verb 'chant' 'incant' * -> Chant ; Verb 'inflatable' * object 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground) -> Inflate ; Verb 'is' * object 'onto'/'on' object -> IsOn * object 'into'/'inside'/'in' object -> IsOn ; Verb 'dive' 'jump' 'leap' * 'off' object -> Dive * 'from' object -> Dive * 'into'/'inside'/'in' object -> Dive * 'across' object -> Dive * 'over' object -> Dive * -> Dive ; Verb 'kick' 'taunt' * object -> Kick ; Verb 'dispatch' 'kill' 'murder' 'slay' * animate(in_room,on_ground) 'with'/'using'/'thru'/'through' weapon(held,carried,have) -> Attack ; Verb 'stab' * animate(in_room,on_ground) 'with'/'using'/'thru'/'through' weapon(held,carried,have) -> Attack * animate(in_room,on_ground) -> Stab ; Verb 'kiss' * animate(in_room,on_ground) -> Kiss ; Verb 'knock' 'rap' * 'down'/'d//' animate(in_room,on_ground) -> Attack * 'onto'/'on' object -> Knock * 'at' object -> Knock ; Verb 'launch' * vehicle -> Launch ; Verb 'lean' * 'onto'/'on' object(held,have) -> LeanOn ; Verb 'leave' * object -> Drop * -> Leave ; Verb 'light' * on(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' flame(held,carried,take,have) -> Burn * on(held,carried,in_room,on_ground,take,have) -> SwitchOn ; Verb 'listen' * 'for' object -> Listen * 'to' object -> Listen ; Verb 'lock' * object(in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground,take) -> Lock ; Verb 'gaze' 'l//' 'look' 'stare' * 'for' object -> Find * 'at' object(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' object -> Read * 'into'/'inside'/'in' object(held,carried,in_room,on_ground,many) -> LookIn * 'behind' object -> LookBehind * 'underneath'/'under'/'beneath'/'below' object -> LookUnder * 'with'/'using'/'thru'/'through' object(held,carried,in_room,on_ground,many) -> LookIn * 'onto'/'on' object -> LookOn * 'at' object(held,carried,in_room,on_ground,many) -> Examine * 'down'/'d//' rmungbit -> Look * 'up'/'u//' rmungbit -> Look * 'around' rmungbit -> Look * -> Look ; Verb 'lower' * object -> Lower ; Verb 'grease' 'lubricate' 'oil' * object 'with'/'using'/'thru'/'through' object(held,carried) -> Grease ; Verb 'make' * object -> Make ; Verb 'liquify' 'melt' * object 'with'/'using'/'thru'/'through' flame(held,carried,in_room,on_ground) -> Melt ; Verb 'move' * object 'with'/'using'/'thru'/'through' toolbit -> MoveWith * object(held,many,have) 'into'/'inside'/'in' object -> Insert * object(in_room,on_ground) -> Move ; Verb 'roll' * object(in_room,on_ground) -> Move * 'up'/'u//' object(in_room,on_ground) -> Move ; Verb 'mumble' 'sigh' * -> Mumble ; Verb 'odysseus' 'ulysses' * -> Odysseus ; Verb 'open' * door(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground,have) -> Open * 'up'/'u//' door(held,carried,in_room,on_ground) -> Open * door(held,carried,in_room,on_ground) -> Open ; Verb 'pick' * 'up'/'u//' takeable(on_ground,many) -> Take * object 'with'/'using'/'thru'/'through' object -> Pick * object -> Pick ; Verb 'play' * object -> Play ; Verb 'fix' 'glue' 'patch' 'plug' 'repair' * object 'with'/'using'/'thru'/'through' object -> Fix ; Verb 'plugh' 'xyzzy' * -> Plugh ; Verb 'poke' * animate(in_room,on_ground) 'with'/'using'/'thru'/'through' weapon(held,carried,have) -> Poke ; Verb 'punctured' * animate(in_room,on_ground) 'with'/'using'/'thru'/'through' weapon(held,carried,have) -> Poke ; Verb 'pour' 'spill' * object(held,carried) 'from' object -> Drop * object(held,carried) 'onto'/'on' object -> Pour * object(held,carried) 'into'/'inside'/'in' object -> Drop * object(held,carried) -> Drop ; Verb 'pray' * -> Pray ; Verb 'pull' 'tug' 'yank' * 'up'/'u//' object(in_room,on_ground) -> Move * 'onto'/'on' object(in_room,on_ground) -> Move * object(in_room,on_ground) -> Move ; Verb 'pump' * 'up'/'u//' object 'with'/'using'/'thru'/'through' object -> PumpUp * 'up'/'u//' object -> PumpUp ; Verb 'press' 'push' * object 'underneath'/'under'/'beneath'/'below' object -> PutUnder * object 'with'/'using'/'thru'/'through' toolbit -> MoveWith * 'onto'/'on' object(in_room,on_ground,many) -> Push * object(in_room,on_ground,many) -> Push * object(in_room,on_ground) 'to' object -> Slide * object(in_room,on_ground) object -> Slide ; Verb 'hide' 'insert' 'place' 'put' 'stuff' * object(held,many,have) 'behind' object -> PutBehind * 'onto'/'on' object(carried,in_room,on_ground,many) -> Wear * 'out' light(held,carried,in_room,on_ground,take,have) -> SwitchOff * object(held,have) 'underneath'/'under'/'beneath'/'below' object -> PutUnder * 'down'/'d//' object(held,many) -> Drop * object(held,many,have) 'onto'/'on' object -> PutOn * object(held,many,have) 'into'/'inside'/'in' object -> Insert ; Verb 'lift' 'raise' * 'up'/'u//' object -> Raise * object -> Raise ; Verb 'molest' 'rape' * animate -> Molest ; Verb 'read' 'skim' * readable(held,carried,in_room,on_ground,take) object -> ReadObjObj * readable(held,carried,in_room,on_ground,take) 'with'/'using'/'thru'/'through' object -> Read * 'from' readable(held,carried,in_room,on_ground,take) -> Read * readable(held,carried,in_room,on_ground,take) -> Read ; Verb 'repent' * -> Repent ; Verb 'peal' 'ring' * object(take) 'with'/'using'/'thru'/'through' object -> Ring * object(take) -> Ring ; Verb 'feel' 'pat' 'pet' 'rub' 'touch' * object 'with'/'using'/'thru'/'through' object -> Touch * object -> Touch ; Verb 'talk' * 'to' animate(in_room) -> TalkTo ; Verb 'say' * -> Say ; Verb 'search' * 'for' object -> Find * 'into'/'inside'/'in' object -> Search * object -> Search ; Verb 'send' * 'for' object -> SendFor ; Verb 'shake' * object(have) -> Shake ; Verb 'hop' 'skip' * -> Jump ; Verb 'slide' * object(in_room,on_ground) 'to' object -> Slide * object(in_room,on_ground) object -> Slide * object 'underneath'/'under'/'beneath'/'below' object -> PutUnder ; Verb 'smell' 'sniff' * object -> Smell ; Verb 'spin' * object -> Spin ; Verb 'spray' * object 'with'/'using'/'thru'/'through' object -> SprayWith * object 'onto'/'on' object -> SprayOn ; Verb 'squeeze' * object 'onto'/'on' object -> Insert * object -> Squeeze ; Verb 'stand' * 'up'/'u//' rmungbit -> Stand * -> Stand ; Verb 'stay' * -> Stay ; Verb 'strike' * object(held,carried,in_room,on_ground) -> Strike * animate(in_room,on_ground) 'with'/'using'/'thru'/'through' weapon(held,carried,in_room,on_ground,have) -> Attack ; Verb 'bathe' 'swim' 'wade' * 'into'/'inside'/'in' object -> Swim * -> Swim ; Verb 'swing' 'thrust' * weapon(held,carried,have) 'at' animate(in_room,on_ground) -> Swing * weapon(held,carried,have) -> Swing ; Verb 'carry' 'catch' 'get' 'grab' 'hold' 'remove' 'take' * takeable(carried,in_room,many) 'from' object -> Take * takeable(carried,in_room,many) 'off' object -> Take * takeable(carried,in_room,many) 'out' object -> Take * 'up'/'u//' rmungbit -> Stand * 'onto'/'on' vehicle(in_room,on_ground) -> ClimbOn * 'out' vehicle(in_room,on_ground) -> Disembark * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * takeable(in_room,on_ground,many) -> Take ; Verb 'ask' 'tell' * animate(in_room) -> TalkTo ; Verb 'chuck' 'hurl' 'throw' 'toss' * object(held,carried,have) 'over' object -> ThrowOver * object(held,carried,have) 'off' object -> ThrowOver * object(held,carried,have) 'onto'/'on' object -> PutOn * object(held,carried,have) 'into'/'inside'/'in' object -> Insert * object object -> ThrowTo * object(held,carried,have) 'with'/'using'/'thru'/'through' animate(in_room,on_ground) -> Throw * object(held,carried,have) 'at' animate(in_room,on_ground) -> Throw ; Verb 'attach' 'fasten' 'secure' 'tie' * 'up'/'u//' animate(in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground,have) -> TieWith * object 'to' object -> TieTo ; Verb 'temple' 'treasure' * -> TempleWord ; Verb 'flip' 'set' 'shut' 'turn' * turnable 'for' object -> MoveWith * turnable 'to' object -> MoveWith * 'off' light(held,carried,in_room,on_ground,take,have) -> SwitchOff * 'onto'/'on' object 'with'/'using'/'thru'/'through' object(have) -> SwitchOn * 'onto'/'on' on(held,carried,in_room,on_ground) -> SwitchOn * turnable(held,carried,in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground,have) -> MoveWith ; Verb 'unlock' * object(in_room,on_ground) 'with'/'using'/'thru'/'through' toolbit(held,carried,in_room,on_ground,take) -> Unlock ; Verb 'free' 'unattach' 'unfasten' 'unhook' 'untie' * object(held,carried,in_room,on_ground) 'from' object -> Untie * object(held,carried,in_room,on_ground) -> Untie ; Verb 'wait' 'z//' * -> Wait ; Verb 'awake' 'startle' 'surprise' 'wake' * 'up'/'u//' animate(in_room,on_ground) -> Wake * animate(in_room,on_ground) -> Wake ; Verb 'go' 'proceed' 'run' 'step' 'walk' * 'down'/'d//' climbable(in_room,on_ground) -> ClimbDown * 'up'/'u//' climbable(in_room,on_ground) -> ClimbUp * 'around' object -> WalkAround * 'to' object -> WalkTo * 'over' object -> Dive * 'onto'/'on' object -> EnterObj * 'with'/'using'/'thru'/'through' object -> EnterObj * 'into'/'inside'/'in' object -> EnterObj * 'away' object -> Go * object -> Go ; Verb 'brandish' 'wave' * object(held,carried,take,have) 'at' object -> Wield * object(held,carried,take,have) -> Wield ; Verb 'wear' * object -> Wear ; Verb 'win' 'winnage' * -> Win ; Verb 'wind' * 'up'/'u//' object -> WindUp * object -> WindUp ; Verb 'wish' * -> Wish ; Verb 'scream' 'shout' 'yell' * -> Yell ; Verb 'zork' * -> Zork ; Object cretin "cretin" with strength 0, action 0, name 'adventurer', has concealed sacred scenery animate; Object not_here_object "such thing" with action Not_Here_Object_F, has ; Object Room_Holder "" with in_to Room_Holder, has ; Object -> West_of_House "West of House" with contains white_house board, action WestHouse_action, in_to (TO Stone_Barrow IF Won_flag), sw_to (TO Stone_Barrow IF Won_flag), se_to South_of_House, ne_to North_of_House, s_to South_of_House, w_to Forest1, e_to "The door is boarded and you can't remove the boards.", n_to North_of_House, has dry_land sacred light; Object -> -> front_door "door" with adjectives 'front' 'boarded', action Door_action, name 'door', has scenery door; Object -> -> small_mailbox "small mailbox" with capacity 10, adjectives 'small', action Mailbox_action, name 'mailbox' 'box', has trytakebit container; Object -> -> -> leaflet "leaflet" with text_string "~WELCOME TO ZORK!^^ZORK is a game of adventure, danger, and low cunning. In it you will explore some of the most amazing territory ever seen by mortals. No computer should be without one!~^", description "A small leaflet is on the ground.", size 2, adjectives 'small', name 'advertisement' 'leaflet' 'booklet' 'mail', has readable takeable flammable; Object -> Slide_Room "Slide Room" with contains chute, description "This is a small chamber, which appears to have been part of a coal mine. On the south wall of the chamber the letters ~Granite Wall~ are etched in the rock. To the east is a long passage, and there is a steep metal slide twisting downward. To the north is a small opening.", d_to Cellar, e_to Cold_Passage, n_to Mine_Entrance, has dry_land; Object -> Coal_Mine1 "Coal Mine" with description "This is a non-descript part of a coal mine.", d_to Ladder_Top, w_to Coal_Mine1, n_to Coal_Mine2, has dry_land; Object -> Coal_Mine2 "Coal Mine" with description "This is a non-descript part of a coal mine.", sw_to Coal_Mine1, s_to Coal_Mine2, e_to Coal_Mine3, has dry_land; Object -> Coal_Mine3 "Coal Mine" with description "This is a non-descript part of a coal mine.", se_to Coal_Mine2, s_to Coal_Mine4, n_to Coal_Mine3, has dry_land; Object -> Coal_Mine4 "Coal Mine" with description "This is a non-descript part of a coal mine.", ne_to Coal_Mine3, e_to Coal_Mine4, n_to Gas_Room, has dry_land; Object -> Machine_Room "Machine Room" with action Machine_Room_action, n_to Drafty_Room, has dry_land; Object -> -> machine "machine" with capacity 50, action Machine_action, name 'machine' 'pdp1' 'dryer' 'lid', has trytakebit scenery container; Object -> -> switch "switch" with action Switch_action, name 'switch', has scenery turnable; Object -> Drafty_Room "Drafty Room" with pseudo 'chain' Pseudo_Chain_action, description "This is a small drafty room in which is the bottom of a long shaft. To the south is a passageway and to the east a very narrow passage. In the shaft can be seen a heavy iron chain.", action Drafty_Room_action, out_to (TO Timber_Room IF Empty_handed ELSE "You cannot fit through this passage with that load."), s_to Machine_Room, e_to (TO Timber_Room IF Empty_handed ELSE "You cannot fit through this passage with that load."), has dry_land sacred; Object -> -> basket2 "basket" with description "From the chain is suspended a basket.", adjectives 'lowered', action Basket_action, name 'cage' 'dumbwaiter' 'basket', has trytakebit; Object -> Timber_Room "Timber Room" with description "This is a long and narrow passage, which is cluttered with broken timbers. A wide passage comes from the east and turns at the west end of the room into a very narrow passageway. From the west comes a strong draft.", action Drafty_Room_action, w_to (TO Drafty_Room IF Empty_handed ELSE "You cannot fit through this passage with that load."), e_to Ladder_Bottom, has dry_land sacred; Object -> -> broken_timber "broken timber" with size 50, adjectives 'wooden' 'broken', name 'timber' 'pile', has takeable; Object -> Dead_End "Dead End" with description "You have come to a dead end in the mine.", n_to Ladder_Bottom, has dry_land; Object -> -> pile_of_coal "small pile of coal" with size 20, adjectives 'small', name 'coal' 'pile' 'heap', has takeable flammable; Object -> Ladder_Bottom "Ladder Bottom" with contains wooden_ladder, description "This is a rather wide room. On one side is the bottom of a narrow wooden ladder. To the west and the south are passages leaving the room.", u_to Ladder_Top, s_to Dead_End, w_to Timber_Room, has dry_land; Object -> Ladder_Top "Ladder Top" with contains wooden_ladder stairs, description "This is a very small room. In the corner is a rickety wooden ladder, leading downward. It might be safe to descend. There is also a staircase leading upward.", d_to Ladder_Bottom, u_to Coal_Mine1, has dry_land; Object -> Gas_Room "Gas Room" with pseudo 'gas' Pseudo_Gas_action 'odor' Pseudo_Gas_action, contains stairs, description "This is a small room which smells strongly of coal gas. There is a short climb up some stairs and a narrow tunnel leading east.", action Gas_Room_action, u_to Smelly_Room, e_to Coal_Mine4, has dry_land sacred; Object -> -> bracelet "sapphire-encrusted bracelet" with trophy_value 5, take_value 5, size 10, adjectives 'sapphire', name 'bracelet' 'jewel' 'sapphire' 'treasure', has takeable; Object -> Smelly_Room "Smelly Room" with pseudo 'odor' Pseudo_Gas_action 'gas' Pseudo_Gas_action, contains stairs, description "This is a small non-descript room. However, from the direction of a small descending staircase a foul odor can be detected. To the south is a narrow tunnel.", d_to Gas_Room, s_to Shaft_Room, has dry_land; Object -> Shaft_Room "Shaft Room" with pseudo 'chain' Pseudo_Chain_action, description "This is a large room, in the middle of which is a small shaft descending through the floor into darkness below. To the west and the north are exits from this room. Constructed over the top of the shaft is a metal framework to which a heavy iron chain is attached.", d_to "You wouldn't fit and would die if you could.", w_to Bat_Room, n_to Smelly_Room, has dry_land; Object -> -> basket1 "basket" with capacity 50, description "At the end of the chain is a basket.", action Basket_action, name 'cage' 'dumbwaiter' 'basket', has open transparent trytakebit container; Object -> Bat_Room "Bat Room" with action Bat_Room_action, s_to Squeaky_Room, e_to Shaft_Room, has dry_land sacred; Object -> -> bat "bat" with initial2 BatInitial, adjectives 'vampire' 'deranged', action Bat_action, name 'bat' 'vampire', has trytakebit animate; Object -> -> jade_figurine "jade figurine" with description "There is an exquisite jade figurine here.", trophy_value 5, take_value 5, size 10, adjectives 'exquisite' 'jade', name 'figurine' 'treasure', has takeable; Object -> Squeaky_Room "Squeaky Room" with description "You are in a small room. Strange squeaky sounds may be heard coming from the passage at the north end. You may also escape to the east.", e_to Mine_Entrance, n_to Bat_Room, has dry_land; Object -> Mine_Entrance "Mine Entrance" with description "You are standing at the entrance of what might have been a coal mine. The shaft enters the west wall, and there is another exit on the south end of the room.", in_to Squeaky_Room, s_to Slide_Room, w_to Squeaky_Room, has dry_land; Object -> Canyon_View "Canyon View" with contains cliff river rainbow, description "You are at the top of the Great Canyon on its west wall. From here there is a marvelous view of the canyon and parts of the Frigid River upstream. Across the canyon, the walls of the White Cliffs join the mighty ramparts of the Flathead Mountains to the east. Following the Canyon upstream to the north, Aragain Falls may be seen, complete with rainbow. The mighty Frigid River flows out from a great dark cavern. To the west and south can be seen an immense forest, stretching for miles around. A path leads northwest. It is possible to climb down into the canyon from here.", action Canyon_View_F, d_to Rocky_Ledge, nw_to Clearing2, s_to "Storm-tossed trees block your way.", w_to Forest4, e_to Rocky_Ledge, has dry_land sacred light; Object -> Rocky_Ledge "Rocky Ledge" with contains cliff river, description "You are on a ledge about halfway up the wall of the river canyon. You can see from here that the main flow from Aragain Falls twists along a passage which it is impossible for you to enter. Below you is the canyon bottom. Above you is more cliff, which appears climbable.", d_to Canyon_Bottom, u_to Canyon_View, has dry_land sacred light; Object -> Canyon_Bottom "Canyon Bottom" with contains water cliff river, description "You are beneath the walls of the river canyon which may be climbable here. The lesser part of the runoff of Aragain Falls flows by below. To the north is a narrow path.", u_to Rocky_Ledge, n_to End_of_Rainbow, has dry_land sacred light; Object -> End_of_Rainbow "End of Rainbow" with contains water rainbow river, description "You are on a small, rocky beach on the continuation of the Frigid River past the Falls. The beach is narrow due to the presence of the White Cliffs. The river canyon opens here and sunlight shines in from above. A rainbow crosses over the falls to the east and a narrow path continues to the southwest.", u_to (TO On_the_Rainbow IF Rainbow_flag), sw_to Canyon_Bottom, ne_to (TO On_the_Rainbow IF Rainbow_flag), e_to (TO On_the_Rainbow IF Rainbow_flag), has dry_land light; Object -> -> pot_of_gold "pot of gold" with trophy_value 10, take_value 10, initial "At the end of the rainbow is a pot of gold.", size 15, adjectives 'gold', name 'pot' 'gold' 'treasure', has concealed takeable; Object -> On_the_Rainbow "On the Rainbow" with contains rainbow, description "You are on top of a rainbow (I bet you never thought you would walk on a rainbow), with a magnificent view of the Falls. The rainbow travels east-west here.", w_to End_of_Rainbow, e_to Aragain_Falls, has dry_land sacred light; Object -> Aragain_Falls "Aragain Falls" with contains water river rainbow, action Falls_action, d_to "It's a long way...", u_to (TO On_the_Rainbow IF Rainbow_flag), w_to (TO On_the_Rainbow IF Rainbow_flag), n_to Shore, has dry_land sacred light; Object -> Sandy_Cave "Sandy Cave" with description "This is a sand-filled cave whose exit is to the southwest.", sw_to Sandy_Beach, has dry_land; Object -> -> sand "sand" with action SandFunction, name 'sand', has scenery; Object -> -> scarab "beautiful jeweled scarab" with trophy_value 5, take_value 5, size 8, adjectives 'beautiful' 'carved' 'jeweled', name 'scarab' 'bug' 'beetle' 'treasure', has concealed takeable; Object -> Sandy_Beach "Sandy Beach" with contains water river, description "You are on a large sandy beach on the east shore of the river, which is flowing quickly by. A path runs beside the river to the south here, and a passage is partially buried in sand to the northeast.", ne_to Sandy_Cave, s_to Shore, has dry_land sacred; Object -> -> shovel "shovel" with size 15, name 'shovel' 'tool' 'tools', has takeable toolbit; Object -> Shore "Shore" with contains water river, description "You are on the east shore of the river. The water here seems somewhat treacherous. A path travels from north to south here, the south end quickly turning around a sharp corner.", s_to Aragain_Falls, n_to Sandy_Beach, has dry_land sacred light; Object -> Frigid_River1 "Frigid River" with contains water river, description "The sound of rushing water is nearly unbearable here. On the east shore is a large landing area.", land_to Shore, u_to "You cannot go upstream due to strong currents.", e_to Shore, has water_room sacred light; Object -> Frigid_River5 "Frigid River" with contains water river, description "The river is running faster here and the sound ahead appears to be that of rushing water. On the east shore is a sandy beach. A small area of beach can also be seen below the cliffs on the west shore.", action River2Action, land_to "You can land either to the east or the west.", d_to Frigid_River1, u_to "You cannot go upstream due to strong currents.", w_to White_Cliffs_Beach1, e_to Sandy_Beach, has water_room sacred; Object -> -> red_buoy "red buoy" with capacity 20, initial "There is a red buoy here (probably a warning).", size 10, adjectives 'red', action Treasure_Inside_Buoy, name 'buoy', has takeable container; Object -> -> -> large_emerald "large emerald" with trophy_value 10, take_value 5, adjectives 'large', name 'emerald' 'treasure', has takeable; Object -> White_Cliffs_Beach1 "White Cliffs Beach" with contains water white_cliffs river, description "You are on a rocky, narrow strip of beach beside the Cliffs. A narrow path leads north along the shore.", action Beach_action, n_to (TO White_Cliffs_Beach2 IF Deflated ELSE "The path is too narrow."), has dry_land sacred; Object -> White_Cliffs_Beach2 "White Cliffs Beach" with contains water white_cliffs river, description "You are on a narrow strip of beach which runs along the base of the White Cliffs. There is a narrow path heading south along the Cliffs and a tight passage leading west into the cliffs themselves.", action Beach_action, s_to (TO White_Cliffs_Beach1 IF Deflated ELSE "The path is too narrow."), w_to (TO Damp_Cave IF Deflated ELSE "The path is too narrow."), has dry_land sacred; Object -> Frigid_River2 "Frigid River" with contains water river, description "The river descends here into a valley. There is a narrow beach on the west shore below the cliffs. In the distance a faint rumbling can be heard.", land_to White_Cliffs_Beach2, d_to Frigid_River5, u_to "You cannot go upstream due to strong currents.", w_to White_Cliffs_Beach2, has water_room sacred; Object -> Frigid_River3 "Frigid River" with contains water river, description "The river turns a corner here making it impossible to see the Dam. The White Cliffs loom on the east bank and large rocks prevent landing on the west.", land_to "There is no safe landing spot here.", d_to Frigid_River2, u_to "You cannot go upstream due to strong currents.", w_to "Just in time you steer away from the rocks.", e_to "The White Cliffs prevent your landing here.", has water_room sacred; Object -> Frigid_River4 "Frigid River" with contains water river, description "You are on the Frigid River in the vicinity of the Dam. The river flows quietly here. There is a landing on the west shore.", land_to Dam_Base, d_to Frigid_River3, u_to "You cannot go upstream due to strong currents.", w_to Dam_Base, e_to "The White Cliffs prevent your landing here.", has water_room sacred light; Object -> Dam_Base "Dam Base" with contains water river, description "You are at the base of Flood Control Dam #3, which looms above you and to the north. The river Frigid is flowing by here. Along the river are the White Cliffs which seem to form giant walls stretching from north to south along the shores of the river as it winds its way downstream.", u_to Dam_Room, n_to Dam_Room, has dry_land sacred light; Object -> -> pile_of_plastic "pile of plastic" with description "There is a folded pile of plastic here which has a small valve attached.", size 20, adjectives 'plastic' 'inflatable', action Plastic_action, name 'boat' 'pile' 'plastic' 'valve', has takeable flammable; Object -> Maintenance_Room "Maintenance Room" with description "This is what appears to have been the maintenance room for Flood Control Dam #3. Apparently, this room has been ransacked recently, for most of the valuable equipment is gone. On the wall in front of you is a group of buttons colored blue, yellow, brown, and red. There are doorways to the west and south.", s_to Dam_Lobby, w_to Dam_Lobby, has dry_land; Object -> -> tool_chests "group of tool chests" with adjectives 'tool', action Chest_action, name 'chest' 'chests' 'group' 'toolchests', has sacred open trytakebit container; Object -> -> wrench "wrench" with size 10, name 'wrench' 'tool' 'tools', has takeable toolbit; Object -> -> tube "tube" with text_string "---> Frobozz Magic Gunk Company <---^@{9} All-Purpose Gunk", capacity 7, description "There is an object which looks like a tube of toothpaste here.", size 5, action Tube_action, name 'tube' 'tooth' 'paste', has readable takeable container; Object -> -> -> viscous_material "viscous material" with size 6, adjectives 'viscous', action Glue_action, name 'material' 'gunk', has takeable toolbit; Object -> -> screwdriver "screwdriver" with adjectives 'screw', name 'screwdriver' 'tool' 'tools' 'driver', has takeable toolbit; Object -> -> leak "leak" with action Leak_action, name 'leak' 'drip' 'pipe', has concealed scenery; Object -> -> blue_button "blue button" with adjectives 'blue', action Button_action, name 'button' 'switch', has scenery; Object -> -> red_button "red button" with adjectives 'red', action Button_action, name 'button' 'switch', has scenery; Object -> -> brown_button "brown button" with adjectives 'brown', action Button_action, name 'button' 'switch', has scenery; Object -> -> yellow_button "yellow button" with adjectives 'yellow', action Button_action, name 'button' 'switch', has scenery; Object -> Dam_Lobby "Dam Lobby" with description "This room appears to have been the waiting room for groups touring the dam. There are open doorways here to the north and east marked ~Private~, and there is a path leading south over the top of the dam.", s_to Dam_Room, e_to Maintenance_Room, n_to Maintenance_Room, has dry_land light; Object -> -> matchbook "matchbook" with text_string "^(Close cover before striking)^^YOU too can make BIG MONEY in the exciting field of PAPER SHUFFLING!^^Mr. Anderson of Muddle, Mass. says: ~Before I took this course I was a lowly bit twiddler. Now with what I learned at GUE Tech I feel really important and can obfuscate and confuse with the best.~^^Dr. Blank had this to say: ~Ten short days ago all I could look forward to was a dead-end job as a doctor. Now I have a promising future and make really big Zorkmids.~^^GUE Tech can't promise these fantastic results to everyone. But when you earn your degree from GUE Tech, your future will be brighter.^", description "There is a matchbook whose cover says ~Visit Beautiful FCD#3~ here.", size 2, adjectives 'match', action Match_action, name 'match' 'matches' 'matchbook', has readable takeable; Object -> -> tour_guidebook "tour guidebook" with text_string "~@{9}Flood Control Dam #3^^FCD#3 was constructed in year 783 of the Great Underground Empire to harness the mighty Frigid River. This work was supported by a grant of 37 million zorkmids from your omnipotent local tyrant Lord Dimwit Flathead the Excessive. This impressive structure is composed of 370,000 cubic feet of concrete, is 256 feet tall at the center, and 193 feet wide at the top. The lake created behind the dam has a volume of 1.7 billion cubic feet, an area of 12 million square feet, and a shore line of 36 thousand feet.^^We will now point out some of the more interesting features of FCD#3 as we conduct you on a guided tour of the facilities:^ 1) You start your tour here in the Dam Lobby. You will notice on your right that....", initial "Some guidebooks entitled ~Flood Control Dam #3~ are on the reception desk.", adjectives 'tour' 'guide', name 'guide' 'book' 'books' 'guidebook', has readable takeable flammable; Object -> Dam_Room "Dam" with contains water, action Dam_action, d_to Dam_Base, s_to Deep_Canyon, w_to Reservoir_South, e_to Dam_Base, n_to Dam_Lobby, has dry_land light; Object -> -> bolt "bolt" with adjectives 'metal' 'large', action Bolt_action, name 'bolt' 'nut', has trytakebit scenery turnable; Object -> -> control_panel "control panel" with adjectives 'control', name 'panel', has scenery; Object -> -> dam_scenery "dam" with action Dam_Scenery_action, name 'dam' 'gate' 'gates' 'fcd#', has trytakebit scenery; Object -> -> green_bubble "green bubble" with adjectives 'small' 'green' 'plastic', action Bubble_action, name 'bubble', has trytakebit scenery; Object -> Altar "Altar" with description "This is the south end of a large temple. In front of you is what appears to be an altar. In one corner is a small hole in the floor which leads into darkness. You probably could not get back up it.", action Altar_action, d_to (TO Cave1 IF Coffin_held ELSE "You haven't a prayer of getting the coffin down there."), n_to Temple, has dry_land sacred light; Object -> -> altar_scenery "altar" with capacity 50, name 'altar', has supporter open scenery container; Object -> -> -> black_book "black book" with text_string "Commandment #12592^^Oh ye who go about saying unto each: ~Hello sailor~:^Dost thou know the magnitude of thy sin before the gods?^Yea, verily, thou shalt be ground between two stones.^Shall the angry gods cast thy body into the whirlpool?^Surely, thy eye shall be put out with a sharp stick!^Even unto the ends of the earth shalt thou wander and^Unto the land of the dead shalt thou be sent at last.^Surely thou shalt repent of thy cunning.", initial "On the altar is a large black book, open to page 569.", size 10, adjectives 'large' 'black', action Book_action, name 'book' 'prayer' 'page' 'books', has turnable readable takeable container flammable; Object -> -> pair_of_candles "pair of candles" with initial "On the two ends of the altar are burning candles.", size 10, adjectives 'burning', action Candle_action, name 'candle' 'pair', has takeable light flame on; Object -> Temple "Temple" with contains stairs, description "This is the north end of a large temple. On the east wall is an ancient inscription, probably a prayer in a long-forgotten language. Below the prayer is a staircase leading down. The west wall is solid granite. The exit to the north end of the room is through huge marble pillars.", out_to Torch_Room, d_to Egyptian_Room, u_to Torch_Room, s_to Altar, e_to Egyptian_Room, n_to Torch_Room, has dry_land sacred light; Object -> -> brass_bell "brass bell" with adjectives 'small' 'brass', action Bell_action, name 'bell', has takeable; Object -> -> prayer "prayer" with text_string "The prayer is inscribed in an ancient script, rarely used today. It seems to be a philippic against small insects, absent-mindedness, and the picking up and dropping of small objects. The final verse consigns trespassers to the land of the dead. All evidence indicates that the beliefs of the ancient Zorkers were obscure.", adjectives 'ancient' 'old', name 'prayer' 'inscription', has sacred scenery readable; Object -> Torch_Room "Torch Room" with pseudo 'dome' Pseudo_Dome_action, contains stairs, action Torch_Room_action, d_to Temple, u_to "You cannot reach the rope.", s_to Temple, has dry_land; Object -> -> pedestal "pedestal" with capacity 30, adjectives 'white' 'marble', action Pedestal_action, name 'pedestal', has supporter open scenery container; Object -> -> -> torch "torch" with trophy_value 6, take_value 14, initial "Sitting on the pedestal is a flaming torch, made of ivory.", size 20, adjectives 'flaming' 'ivory', action Torch_action, name 'torch' 'ivory' 'treasure', has takeable light flame on; Object -> Dome_Room "Dome Room" with pseudo 'dome' Pseudo_Dome_action, action Dome_Room_action, d_to (TO Torch_Room IF Dome_flag ELSE "You cannot go down without fracturing many bones."), w_to Engravings_Cave, has dry_land; Object -> -> wooden_railing "wooden railing" with adjectives 'wooden', name 'railing' 'rail', has scenery; Object -> Egyptian_Room "Egyptian Room" with contains stairs, description "This is a room which looks like an Egyptian tomb. There is an ascending staircase to the west.", u_to Temple, w_to Temple, has dry_land; Object -> -> gold_coffin "gold coffin" with capacity 35, description "The solid-gold coffin used for the burial of Ramses II is here.", trophy_value 15, take_value 10, size 55, adjectives 'solid' 'gold', name 'coffin' 'casket' 'treasure', has scope_inside sacred takeable container; Object -> -> -> sceptre "sceptre" with description "An ornamented sceptre, tapering to a sharp point, is here.", trophy_value 6, take_value 4, initial "A sceptre, possibly that of ancient Egypt itself, is in the coffin. The sceptre is ornamented with colored enamel, and tapers to a sharp point.", size 3, adjectives 'sharp' 'egyptian' 'ancient' 'enamel', action Sceptre_action, name 'sceptre' 'scepter' 'treasure', has takeable weapon; Object -> Engravings_Cave "Engravings Cave" with description "You have entered a low cave with passages leading northwest and east.", nw_to Round_Room, e_to Dome_Room, has dry_land; Object -> -> wall_with_engravings "wall with engravings" with text_string "The engravings were incised in the living rock of the cave wall by an unknown hand. They depict, in symbolic form, the beliefs of the ancient Zorkers. Skillfully interwoven with the bas reliefs are excerpts illustrating the major religious tenets of that time. Unfortunately, a later age seems to have considered them blasphemous and just as skillfully excised them.", description "There are old engravings on the walls here.", adjectives 'old' 'ancient', name 'wall' 'engravings' 'inscription', has sacred readable; Object -> Land_of_the_Dead "Land of the Dead" with contains pile_of_bodies, description "You have entered the Land of the Living Dead. Thousands of lost souls can be heard weeping and moaning. In the corner are stacked the remains of dozens of previous adventurers less fortunate than yourself. A passage exits to the north.", out_to Entrance_to_Hades, n_to Entrance_to_Hades, has dry_land light; Object -> -> crystal_skull "crystal skull" with trophy_value 10, take_value 10, initial "Lying in one corner of the room is a beautifully carved crystal skull. It appears to be grinning at you rather nastily.", adjectives 'crystal', name 'skull' 'head' 'treasure', has takeable; Object -> Entrance_to_Hades "Entrance to Hades" with pseudo 'gate' Pseudo_Gate_action 'gates' Pseudo_Gate_action, contains pile_of_bodies, action Hades_action, in_to (TO Land_of_the_Dead IF LLD_flag ELSE "Some invisible force prevents you from passing through the gate."), u_to Cave1, s_to (TO Land_of_the_Dead IF LLD_flag ELSE "Some invisible force prevents you from passing through the gate."), has dry_land light; Object -> -> number_of_ghosts "number of ghosts" with adjectives 'invisible' 'evil', action Ghost_action, name 'ghosts' 'spirit' 'fiends' 'force', has scenery animate; Object -> Chasm "Chasm" with pseudo 'chasm' Pseudo_Chasm_action, contains crack stairs, description "A chasm runs southwest to northeast and the path follows it. You are on the south side of the chasm, where a crack opens into a passage.", d_to "Are you out of your mind?", u_to East_West_Passage, sw_to East_West_Passage, ne_to Reservoir_South, s_to North_South_Passage, has dry_land; Object -> North_South_Passage "North-South Passage" with description "This is a high north-south passage, which forks to the northeast.", ne_to Deep_Canyon, s_to Round_Room, n_to Chasm, has dry_land; Object -> Loud_Room "Loud Room" with contains stairs, action Loud_Room_action, u_to Deep_Canyon, w_to Round_Room, e_to Damp_Cave, has dry_land; Object -> -> platinum_bar "platinum bar" with description "On the ground is a large platinum bar.", trophy_value 5, take_value 10, size 20, adjectives 'platinum' 'large', name 'bar' 'platinum' 'treasure', has sacred takeable; Object -> Damp_Cave "Damp Cave" with contains crack, description "This cave has exits to the west and east, and narrows to a crack toward the south. The earth is particularly damp here.", s_to "It is too narrow for most insects.", w_to Loud_Room, e_to White_Cliffs_Beach2, has dry_land; Object -> Deep_Canyon "Deep Canyon" with contains stairs, action Deep_Canyon_action, d_to Loud_Room, sw_to North_South_Passage, nw_to Reservoir_South, e_to Dam_Room, has dry_land; Object -> Round_Room "Round Room" with description "This is a circular stone room with passages in all directions. Several of them have unfortunately been blocked by cave-ins.", se_to Engravings_Cave, s_to Narrow_Passage, w_to East_West_Passage, e_to Loud_Room, n_to North_South_Passage, has dry_land; Object -> -> thief "thief" with strength 5, description "There is a suspicious-looking individual, holding a large bag, leaning against one wall. He is armed with a deadly stiletto.", adjectives 'shady' 'suspicious' 'seedy', action Thief_action, name 'thief' 'robber' 'man' 'person', has concealed open trytakebit container animate; Object -> -> -> large_bag "large bag" with adjectives 'large' 'thiefs', action Thief_Bag_action, name 'bag', has trytakebit scenery; Object -> -> -> stiletto "stiletto" with size 10, adjectives 'vicious', action Stiletto_action, name 'stiletto', has trytakebit scenery takeable weapon; Object -> East_West_Passage "East-West Passage" with contains stairs, description "This is a narrow east-west passageway. There is a narrow stairway leading down at the north end of the room.", take_value 5, d_to Chasm, w_to Troll_Room, e_to Round_Room, n_to Chasm, has dry_land; Object -> Atlantis_Room "Atlantis Room" with contains stairs, description "This is an ancient room, long under water. There is an exit to the south and a staircase leading up.", u_to Cave2, s_to Reservoir_North, has dry_land; Object -> -> crystal_trident "crystal trident" with trophy_value 11, take_value 4, initial "On the shore lies Poseidon's own crystal trident.", size 20, adjectives 'poseidon' 'own' 'crystal', name 'trident' 'fork' 'treasure', has takeable; Object -> Twisting_Passage "Twisting Passage" with description "This is a winding passage. It seems that there are only exits on the east and north.", e_to Cave2, n_to Mirror_Room1, has dry_land; Object -> Winding_Passage "Winding Passage" with description "This is a winding passage. It seems that there are only exits on the east and north.", e_to Cave1, n_to Mirror_Room2, has dry_land; Object -> Narrow_Passage "Narrow Passage" with description "This is a long and narrow corridor where a long north-south passageway briefly narrows even further.", s_to Mirror_Room2, n_to Round_Room, has dry_land; Object -> Cold_Passage "Cold Passage" with description "This is a cold and damp corridor where a long east-west passageway turns into a southward path.", s_to Mirror_Room1, w_to Slide_Room, has dry_land; Object -> Cave1 "Cave" with contains stairs, description "This is a tiny cave with entrances west and north, and a dark, forbidding staircase leading down.", action Cave_Wind_action, d_to Entrance_to_Hades, w_to Winding_Passage, n_to Mirror_Room2, has dry_land; Object -> Cave2 "Cave" with contains stairs, description "This is a tiny cave with entrances west and north, and a staircase leading down.", d_to Atlantis_Room, s_to Atlantis_Room, w_to Twisting_Passage, n_to Mirror_Room1, has dry_land; Object -> Mirror_Room2 "Mirror Room" with action Mirror_Room_action, w_to Winding_Passage, e_to Cave1, n_to Narrow_Passage, has dry_land light; Object -> -> mirror2 "mirror" with action Mirror_action, name 'reflection' 'mirror' 'enormous', has trytakebit scenery; Object -> Mirror_Room1 "Mirror Room" with action Mirror_Room_action, w_to Twisting_Passage, e_to Cave2, n_to Cold_Passage, has dry_land; Object -> -> mirror1 "mirror" with action Mirror_action, name 'reflection' 'mirror' 'enormous', has trytakebit scenery; Object -> Stream "Stream" with pseudo 'stream' Pseudo_Stream_action, contains water, description "You are on the gently flowing stream. The upstream route is too narrow to navigate, and the downstream route is invisible due to twisting walls. There is a narrow beach to land on.", land_to Stream_View, d_to Reservoir, u_to "The channel is too narrow.", w_to "The channel is too narrow.", e_to Reservoir, has water_room; Object -> Stream_View "Stream View" with pseudo 'stream' Pseudo_Stream_action, contains water, description "You are standing on a path beside a gently flowing stream. The path follows the stream, which flows from west to east.", w_to "The stream emerges from a spot too small for you to enter.", e_to Reservoir_South, has dry_land; Object -> Reservoir_North "Reservoir North" with pseudo 'lake' Pseudo_Lake_action, contains water stairs, action Reservoir_N_action, s_to (TO Reservoir IF Low_tide ELSE "You would drown."), n_to Atlantis_Room, has dry_land; Object -> -> air_pump "hand-held air pump" with adjectives 'small' 'hand-', name 'pump' 'air-p' 'tool' 'tools', has takeable toolbit; Object -> Reservoir "Reservoir" with pseudo 'stream' Pseudo_Stream_action, contains water, action Reservoir_action, d_to "The dam blocks your way.", u_to Stream, s_to Reservoir_South, w_to Stream, n_to Reservoir_North, has water_room; Object -> -> trunk_of_jewels "trunk of jewels" with description "There is an old trunk here, bulging with assorted jewels.", trophy_value 5, take_value 15, initial "Lying half buried in the mud is an old trunk, bulging with jewels.", size 35, adjectives 'old', action Trunk_action, name 'trunk' 'chest' 'jewels' 'treasure', has concealed takeable; Object -> Reservoir_South "Reservoir South" with pseudo 'lake' Pseudo_Lake_action 'chasm' Pseudo_Chasm_action, contains water, action Reservoir_S_action, sw_to Chasm, se_to Deep_Canyon, w_to Stream_View, e_to Dam_Room, n_to (TO Reservoir IF Low_tide ELSE "You would drown."), has dry_land; Object -> Treasure_Room "Treasure Room" with contains stairs, description "This is a large room, whose east wall is solid granite. A number of discarded bags, which crumble at your touch, are scattered about on the floor. There is an exit down a staircase.", take_value 25, action Treasure_Room_action, d_to Cyclops_Room, has dry_land; Object -> -> chalice "chalice" with capacity 5, description "There is a silver chalice, intricately engraved, here.", trophy_value 5, take_value 10, size 10, adjectives 'silver' 'engravings', action Chalice_action, name 'chalic' 'cup' 'silver' 'treasure', has trytakebit takeable container; Object -> Strange_Passage "Strange Passage" with description "This is a long passage. To the west is one entrance. On the east there is an old wooden door, with a large opening in it (about cyclops sized).", in_to Cyclops_Room, w_to Cyclops_Room, e_to Living_Room, has dry_land; Object -> Cyclops_Room "Cyclops Room" with contains stairs, action Cyclops_Room_action, u_to (TO Treasure_Room IF Cyclops_flag ELSE "The cyclops doesn't look like he'll let you past."), nw_to Maze8, e_to (TO Strange_Passage IF Magic_flag ELSE "The east wall is solid rock."), has dry_land; Object -> -> cyclops "cyclops" with strength 10000, adjectives 'hungry' 'giant', action Cyclops_action, name 'cyclops' 'monster' 'eye', has trytakebit scenery animate; Object -> Maze8 "Maze" with description "This is part of a maze of twisty little passages, all alike.", se_to Cyclops_Room, s_to Maze7, w_to Maze9, has maze_room dry_land; Object -> Maze9 "Maze" with description "This is part of a maze of twisty little passages, all alike.", nw_to Maze9, ne_to Maze7, s_to Maze7, w_to Maze8, has maze_room dry_land; Object -> Maze10 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Maze12, s_to Maze14, w_to Maze13, e_to Maze15, has maze_room dry_land; Object -> Maze11 "Dead End" with description "You have come to a dead end in the maze.", s_to Maze12, has maze_room dry_land; Object -> Maze12 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Down_Maze_action, u_to Maze15, sw_to Maze13, e_to Maze10, n_to Maze11, has maze_room dry_land; Object -> Grating_Room "Grating Room" with contains grating, action Grating_Room_action, u_to (TO Clearing1 IF grating IS OPEN ELSE "The grating is closed."), sw_to Maze13, has dry_land; Object -> Maze13 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Maze14, sw_to Maze12, nw_to Maze10, ne_to Grating_Room, has maze_room dry_land; Object -> Maze14 "Maze" with description "This is part of a maze of twisty little passages, all alike.", u_to Maze13, w_to Maze10, e_to Maze15, has maze_room dry_land; Object -> Maze15 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Down_Maze_action, nw_to Maze15, s_to Maze10, w_to Maze12, e_to Maze14, n_to Maze6, has maze_room dry_land; Object -> Maze16 "Dead End" with description "You have come to a dead end in the maze.", n_to Maze17, has maze_room dry_land; Object -> Maze17 "Maze" with description "This is part of a maze of twisty little passages, all alike.", se_to Maze16, ne_to Maze7, w_to Maze17, has maze_room dry_land; Object -> Maze7 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Down_Maze_action, u_to Maze9, s_to Maze8, w_to Maze6, e_to Maze17, has maze_room dry_land; Object -> Maze6 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Maze5, u_to Maze15, w_to Maze6, e_to Maze7, has maze_room dry_land; Object -> Maze18 "Dead End" with description "You have come to a dead end in the maze.", w_to Maze5, has maze_room dry_land; Object -> Maze5 "Maze" with description "This is part of a maze of twisty little passages, all alike. A skeleton, probably the remains of a luckless adventurer, lies here.", sw_to Maze6, e_to Maze18, n_to Maze3, has maze_room dry_land; Object -> -> skeleton "skeleton" with action Skeleton_action, name 'bones' 'skeleton' 'body', has trytakebit scenery; Object -> -> skeleton_key "skeleton key" with size 10, adjectives 'skeleton', name 'key', has takeable toolbit; Object -> -> rusty_knife "rusty knife" with initial "Beside the skeleton is a rusty knife.", size 20, adjectives 'rusty', action Rusty_Knife_action, name 'knives' 'knife', has trytakebit takeable toolbit weapon; Object -> -> bag_of_coins "leather bag of coins" with description "An old leather bag, bulging with coins, is here.", trophy_value 5, take_value 10, size 15, adjectives 'old' 'leather', action Coin_Bag_action, name 'bag' 'coins' 'treasure', has takeable; Object -> -> burned_out_lantern "burned-out lantern" with initial "The deceased adventurer's useless lantern is here.", size 20, adjectives 'rusty' 'burned' 'dead' 'useless', name 'lantern' 'lamp', has takeable; Object -> Maze19 "Dead End" with description "You have come to a dead end in the maze.", s_to Maze2, has maze_room dry_land; Object -> Maze2 "Maze" with description "This is part of a maze of twisty little passages, all alike.", w_to Maze3, e_to Maze19, n_to Maze1, has maze_room dry_land; Object -> Maze3 "Maze" with description "This is part of a maze of twisty little passages, all alike.", u_to Maze5, w_to Maze4, n_to Maze2, has maze_room dry_land; Object -> Maze4 "Maze" with description "This is part of a maze of twisty little passages, all alike.", d_to Down_Maze_action, s_to Maze1, e_to Maze3, has maze_room dry_land; Object -> Maze1 "Maze" with description "This is part of a maze of twisty little passages, all alike.", s_to Maze4, w_to Maze2, e_to Troll_Room, n_to Maze1, has maze_room dry_land; Object -> Studio "Studio" with pseudo 'door' Pseudo_Door_action 'paint' Pseudo_Paint_action, contains chimney, description "This appears to have been an artist's studio. The walls and floors are splattered with paints of 69 different colors. Strangely enough, nothing of value is hanging here. At the south end of the room is an open door (also covered with paint). A dark and narrow chimney leads up from a fireplace; although you might be able to get up it, it seems unlikely you could get back down.", u_to UpChimney_action, s_to Gallery, has dry_land; Object -> -> zork_owners_manual "ZORK owner's manual" with text_string "^Congratulations!^^You are the privileged owner of ZORK I: The Great Underground Empire, a self-contained and self-maintaining universe. If used and maintained in accordance with normal operating practices for small universes, ZORK will provide many months of trouble-free operation.^^", initial "Loosely attached to a wall is a small piece of paper.", adjectives 'zork' 'owners' 'small', name 'manual' 'piece' 'paper', has readable takeable; Object -> Gallery "Gallery" with description "This is an art gallery. Most of the paintings have been stolen by vandals with exceptional taste. The vandals left through either the north or west exits.", w_to East_of_Chasm, n_to Studio, has dry_land light; Object -> -> painting "painting" with description "A painting by a neglected genius is here.", trophy_value 6, take_value 4, initial "Fortunately, there is still one chance for you to be a vandal, for on the far wall is a painting of unparalleled beauty.", size 15, adjectives 'beautiful', action Painting_action, name 'painting' 'art' 'canvas' 'treasure', has takeable flammable; Object -> East_of_Chasm "East of Chasm" with pseudo 'chasm' Pseudo_Chasm_action, description "You are on the east edge of a chasm, the bottom of which cannot be seen. A narrow passage goes north, and the path you are on continues to the east.", d_to "The chasm probably leads straight to the infernal regions.", e_to Gallery, n_to Cellar, has dry_land; Object -> Troll_Room "The Troll Room" with description "This is a small room with passages to the east and south and a forbidding hole leading west. Bloodstains and deep scratches (perhaps made by an axe) mar the walls.", action Troll_Room_action, s_to Cellar, w_to (TO Maze1 IF Troll_flag ELSE "The troll fends you off with a menacing gesture."), e_to (TO East_West_Passage IF Troll_flag ELSE "The troll fends you off with a menacing gesture."), has dry_land; Object -> -> troll "troll" with strength 2, description "A nasty-looking troll, brandishing a bloody axe, blocks all passages out of the room.", adjectives 'nasty', action Troll_action, name 'troll', has open trytakebit animate; Object -> -> -> bloody_axe "bloody axe" with size 25, adjectives 'bloody', action Axe_action, name 'axe' 'ax', has trytakebit scenery takeable weapon; Object -> Cellar "Cellar" with contains trap_door chute stairs, take_value 25, action Cellar_action, u_to (TO Living_Room IF trap_door IS OPEN), s_to East_of_Chasm, w_to "You try to ascend the ramp, but it is impossible, and you slide back down.", n_to Troll_Room, has dry_land; Object -> Living_Room "Living Room" with pseudo 'nails' Pseudo_Nail_action 'nail' Pseudo_Nail_action, contains stairs, action Living_Room_action, d_to TrapDoorDown, w_to (TO Strange_Passage IF Magic_flag ELSE "The door is nailed shut."), e_to Kitchen, has dry_land sacred light; Object -> -> trophy_case "trophy case" with capacity 10000, adjectives 'trophy', action Trophy_action, name 'case', has scope_inside transparent trytakebit scenery container; Object -> -> -> ancient_map "ancient map" with text_string "The map shows a forest with three clearings. The largest clearing contains a house. Three paths leave the large clearing. One of these paths, leading southwest, is marked ~To Stone Barrow~.", initial "In the trophy case is an ancient parchment which appears to be a map.", size 2, adjectives 'antique' 'old' 'ancient', name 'parchment' 'map', has concealed readable takeable; Object -> -> sword "sword" with trophy_value 0, initial "Above the trophy case hangs an elvish sword of great antiquity.", size 30, adjectives 'elvish' 'old' 'antique', action Sword_action, name 'sword' 'orcrist' 'glamdring' 'blade', has trytakebit takeable weapon; Object -> -> wooden_door "wooden door" with text_string "The engravings translate to ~This space intentionally left blank.~", adjectives 'wooden' 'gothic' 'strange' 'w//', action Door_action, name 'door' 'letter' 'writing', has transparent scenery readable door; Object -> -> brass_lantern "brass lantern" with description "There is a brass lantern (battery-powered) here.", initial "A battery-powered brass lantern is on the trophy case.", size 15, adjectives 'brass', action Lamp_action, name 'lamp' 'lantern' 'light', has takeable on; Object -> -> trap_door "trap door" with adjectives 'trap' 'dusty', action Trapdoor_action, name 'door' 'trapdoor' 'trap-' 'cover', has concealed scenery door; Object -> -> carpet "carpet" with adjectives 'large' 'oriental', action Rug_action, name 'rug' 'carpet', has trytakebit scenery; Object -> Attic "Attic" with contains stairs, description "This is the attic. The only exit is a stairway leading down.", d_to Kitchen, has dry_land sacred; Object -> -> table "table" with capacity 40, name 'table', has supporter open scenery container; Object -> -> -> nasty_knife "nasty knife" with initial "On a table is a nasty-looking knife.", adjectives 'nasty' 'unrusted', action Nasty_Knife_action, name 'knives' 'knife' 'blade', has trytakebit takeable weapon; Object -> -> rope "rope" with initial "A large coil of rope is lying in the corner.", size 10, adjectives 'large', action Rope_action, name 'rope' 'hemp' 'coil', has sacred trytakebit takeable; Object -> Kitchen "Kitchen" with contains kitchen_window chimney stairs, take_value 10, action Kitchen_action, out_to (TO East_of_House IF kitchen_window IS OPEN), d_to (TO Studio IF Chimney_flag ELSE "Only Santa Claus climbs down chimneys."), u_to Attic, w_to Living_Room, e_to (TO East_of_House IF kitchen_window IS OPEN), has dry_land sacred light; Object -> -> kitchen_table "kitchen table" with capacity 50, adjectives 'Kitchen', name 'table', has supporter open scenery container; Object -> -> -> brown_sack "brown sack" with capacity 15, initial "On the table is an elongated brown sack, smelling of hot peppers.", size 3, adjectives 'brown' 'elongated' 'smelly', action Sack_action, name 'bag' 'sack', has takeable container flammable; Object -> -> -> -> lunch "lunch" with description "A hot pepper sandwich is here.", adjectives 'hot' 'pepper', name 'food' 'sandwich' 'lunch' 'dinner', has takeable edible; Object -> -> -> -> clove_of_garlic "clove of garlic" with action Garlic_action, name 'garlic' 'clove', has takeable edible; Object -> -> -> glass_bottle "glass bottle" with capacity 4, initial "A bottle is sitting on the table.", adjectives 'clear' 'glass', action Bottle_action, name 'bottle' 'container', has transparent takeable container; Object -> -> -> -> quantity_of_water "quantity of water" with size 4, action Water_Function, name 'water' 'quantity' 'liquid' 'h2o', has trytakebit takeable drinkable; Object -> Clearing2 "Clearing" with contains tree songbird white_house forest, description "You are in a small clearing in a well marked forest path that extends to the east and west.", action Forest_action, u_to "There is no tree here suitable for climbing.", s_to Forest4, w_to East_of_House, e_to Canyon_View, n_to Forest2, has dry_land sacred light; Object -> Clearing1 "Clearing" with contains white_house grating, action Clearing1Action, d_to Grating_Exit, s_to Forest_Path, w_to Forest1, e_to Forest2, n_to "The forest becomes impenetrable to the north.", has dry_land sacred light; Object -> -> pile_of_leaves "pile of leaves" with description "On the ground is a pile of leaves.", size 25, action Leaves_action, name 'leaves' 'leaf' 'pile', has trytakebit takeable flammable; Object -> Up_a_Tree "Up a Tree" with contains tree forest songbird white_house, action Tree_action, d_to Forest_Path, u_to "You cannot climb any higher.", has dry_land sacred light; Object -> -> birds_nest "bird's nest" with capacity 20, initial "Beside you on the branch is a small bird's nest.", adjectives 'birds', name 'nest', has scope_inside open takeable container flammable; Object -> -> -> jeweled_egg "jewel-encrusted egg" with capacity 6, trophy_value 5, take_value 5, initial "In the bird's nest is a large egg encrusted with precious jewels, apparently scavenged by a childless songbird. The egg is covered with fine gold inlay, and ornamented in lapis lazuli and mother-of-pearl. Unlike most eggs, this one is hinged and closed with a delicate looking clasp. The egg appears extremely fragile.", adjectives 'birds' 'encrusted' 'jeweled', action Egg_action, name 'egg' 'treasure', has scope_inside takeable container; Object -> -> -> -> golden_canary "golden clockwork canary" with trophy_value 4, take_value 6, initial "There is a golden clockwork canary nestled in the egg. It has ruby eyes and a silver beak. Through a crystal window below its left wing you can see intricate machinery inside. It appears to have wound down.", adjectives 'clockw' 'gold' 'golden', action Canary_action, name 'canary' 'treasure', has scope_inside takeable; Object -> Forest_Path "Forest Path" with contains tree songbird white_house forest, description "This is a path winding through a dimly lit forest. The path heads north-south here. One particularly large tree with some low branches stands at the edge of the path.", action Forest_action, u_to Up_a_Tree, s_to North_of_House, w_to Forest1, e_to Forest2, n_to Clearing1, has dry_land sacred light; Object -> Forest4 "Forest" with contains tree songbird white_house forest, description "This is a dimly lit forest, with large trees all around.", action Forest_action, u_to "There is no tree here suitable for climbing.", nw_to South_of_House, s_to "Storm-tossed trees block your way.", w_to Forest1, e_to "The rank undergrowth prevents eastward movement.", n_to Clearing2, has dry_land sacred light; Object -> Forest3 "Forest" with contains tree white_house, description "The forest thins out, revealing impassable mountains.", u_to "The mountains are impassable.", s_to Forest2, w_to Forest2, e_to "The mountains are impassable.", n_to Forest2, has dry_land sacred light; Object -> -> mountain_range "mountain range" with adjectives 'impassable' 'flathead', action Mountain_action, name 'mountain' 'range', has scenery climbable; Object -> Forest2 "Forest" with contains tree songbird white_house forest, description "This is a dimly lit forest, with large trees all around.", action Forest_action, u_to "There is no tree here suitable for climbing.", s_to Clearing2, w_to Forest_Path, e_to Forest3, n_to "The forest becomes impenetrable to the north.", has dry_land sacred light; Object -> Forest1 "Forest" with contains tree songbird white_house forest, description "This is a forest, with trees in all directions. To the east, there appears to be sunlight.", action Forest_action, u_to "There is no tree here suitable for climbing.", s_to Forest4, w_to "You would need a machete to go further west.", e_to Forest_Path, n_to Clearing1, has dry_land sacred light; Object -> East_of_House "Behind House" with contains white_house kitchen_window, action BehindHouse_action, in_to (TO Kitchen IF kitchen_window IS OPEN), sw_to South_of_House, nw_to North_of_House, s_to South_of_House, w_to (TO Kitchen IF kitchen_window IS OPEN), e_to Clearing2, n_to North_of_House, has dry_land sacred light; Object -> South_of_House "South of House" with contains boarded_window board white_house, description "You are facing the south side of a white house. There is no door here, and all the windows are boarded.", nw_to West_of_House, ne_to East_of_House, s_to Forest4, w_to West_of_House, e_to East_of_House, n_to "The windows are all boarded.", has dry_land sacred light; Object -> North_of_House "North of House" with contains boarded_window board white_house, description "You are facing the north side of a white house. There is no door here, and all the windows are boarded up. To the north a narrow path winds through the trees.", sw_to West_of_House, se_to East_of_House, s_to "The windows are all boarded.", w_to West_of_House, e_to East_of_House, n_to Forest_Path, has dry_land sacred light; Object -> Stone_Barrow "Stone Barrow" with description "You are standing in front of a massive barrow of stone. In the east face is a huge stone door which is open. You cannot see into the dark of the tomb.", action Barrow_action, ne_to West_of_House, has dry_land sacred light; Object -> -> stone_door "stone door" with adjectives 'huge' 'stone', action Barrow_Door_action, name 'door', has scenery door; Object -> -> stone_barrow_ob "stone barrow" with adjectives 'massive' 'stone', action EnterBarrow, name 'barrow' 'tomb', has scenery; Object brass_bauble "beautiful brass bauble" with trophy_value 1, take_value 1, adjectives 'brass' 'beautiful', name 'bauble' 'treasure', has takeable; Object broken_egg "broken jewel-encrusted egg" with capacity 6, description "There is a somewhat ruined egg here.", trophy_value 2, adjectives 'broken' 'birds' 'encrusted' 'jewel', name 'egg' 'treasure', has open takeable container; Object -> broken_canary "broken clockwork canary" with trophy_value 1, initial "There is a golden clockwork canary nestled in the egg. It seems to have recently had a bad experience. The mountings for its jewel-like eyes are empty, and its silver beak is crumpled. Through a cracked crystal window below its left wing you can see the remains of intricate machinery. It is not clear what result winding it would have, as the mainspring seems sprung.", adjectives 'broken' 'clockw' 'gold' 'golden', action Canary_action, name 'canary' 'treasure', has takeable; Object punctured_boat "punctured boat" with size 20, adjectives 'plastic' 'punctured' 'large', action Punctured_Boat_action, name 'boat' 'pile' 'plastic', has takeable flammable; Object vitreous_slag "small piece of vitreous slag" with size 10, adjectives 'small' 'vitreous', action Slag_action, name 'gunk' 'piece' 'slag', has trytakebit takeable; Object magic_boat "magic boat" with vtype water_room, capacity 100, size 20, adjectives 'inflatable' 'magic' 'plastic' 'seaworthy', action Boat_action, name 'boat' 'raft', has scope_inside open takeable flammable vehicle; Object -> tan_label "tan label" with text_string "@{9} !!!! @{9}FROBOZZ MAGIC BOAT COMPANY !!!!^^Hello, Sailor!^^Instructions for use:^^ To get into a body of water, say ~Launch~.^ To get to shore, say ~Land~ or the direction in which you want to maneuver the boat.^^Warranty:^^ This boat is guaranteed against all defects for a period of 76 milliseconds from date of purchase or until first used, whichever comes first.^^Warning:^ This boat is made of thin plastic.^ Good Luck!^", size 2, adjectives 'tan' 'fine', name 'label' 'fineprint' 'print', has readable takeable flammable; Object huge_diamond "huge diamond" with description "There is an enormous diamond (perfectly cut) here.", trophy_value 10, take_value 10, adjectives 'huge' 'enormous', name 'diamon' 'treasure', has takeable; Object broken_lantern "broken lantern" with adjectives 'broken', name 'lamp' 'lantern', has takeable; Object red_hot_bell "red hot brass bell" with description "On the ground is a red hot bell.", adjectives 'brass' 'hot' 'red' 'small', action HotBell_action, name 'bell', has trytakebit; Object global_objects "" has clothing staggered fightbit visited dry_land concealed scope_inside supporter open transparent trytakebit rmungbit light; Object -> set_of_teeth "set of teeth" with action Teeth_action, name 'overboard' 'teeth', has scenery; Object -> pair_of_hands "pair of hands" with adjectives 'bare', name 'pair' 'hands' 'hand', has scenery toolbit; Object -> zorkmid "zorkmid" with action Zorkmid_Function, name 'zorkmid', has ; Object -> way "way" with adjectives 'forest' 'narrow' 'long' 'winding', action Path_Fcn, name 'passage' 'crawlway' 'trail' 'path', has scenery; Object -> you "you" with action Cretin_Fcn, name 'me' 'myself' 'self' 'cretin', has animate; Object -> blast_of_air "blast of air" with name 'lungs' 'air' 'mouth' 'breath', has scenery; Object -> lurking_grue "lurking grue" with adjectives 'lurking' 'sinister' 'hungry' 'silent', action Grue_Function, name 'grue', has ; Object -> ground "ground" with action Ground_Function, name 'ground' 'sand' 'dirt' 'floor', has ; Object -> sailor "sailor" with action Sailor_Fcn, name 'sailor' 'footpad' 'aviator', has scenery; Object -> blessings "blessings" with name 'blessings' 'graces', has scenery; Object -> it_object "random object" with name 'it' 'them' 'her' 'him', has visited scenery; Object -> number_ob "number" with name 'intnum', has toolbit; Object -> local_globals "" with container_action 0, unknown_prop 0, pseudo 'foobar' GoSub, contains global_objects, vtype staggered, initial2 Path_Fcn, capacity 0, description "F", initial "F", size 0, name 'zzmgck', has ; Object -> -> board "board" with action Board_action, name 'boards' 'board', has scenery; Object -> -> stairs "stairs" with adjectives 'stone' 'dark' 'marble' 'forbidding' 'steep', action Stairs_F, name 'stairs' 'steps' 'staircase' 'stairway', has scenery climbable; Object -> -> pseudo "pseudo" with action Cretin_Fcn, has ; Object -> -> white_cliffs "white cliffs" with adjectives 'white', action Cliff_action, name 'cliff' 'cliffs', has scenery climbable; Object -> -> cliff "cliff" with adjectives 'rocky' 'sheer', action Cliff2Action, name 'wall' 'cliff' 'walls' 'ledge', has scenery climbable; Object -> -> wooden_ladder "wooden ladder" with adjectives 'wooden' 'ricketty' 'narrow', name 'ladder', has scenery climbable; Object -> -> river "river" with adjectives 'frigid', action River_action, name 'river', has scenery; Object -> -> rainbow "rainbow" with action Rainbow_action, name 'rainbow', has scenery climbable; Object -> -> pile_of_bodies "pile of bodies" with adjectives 'mangled', action Dead_Bodies_action, name 'bodies' 'body' 'remains' 'pile', has trytakebit scenery; Object -> -> grating "grating" with action Grating_action, name 'grate' 'grating', has concealed scenery door; Object -> -> crack "crack" with adjectives 'narrow', action Crack_action, name 'crack', has scenery; Object -> -> boarded_window "boarded window" with adjectives 'boarded', action Boarded_Window_action, name 'window', has scenery; Object -> -> chute "chute" with adjectives 'steep' 'metal' 'twisting', action Chute_action, name 'chute' 'ramp' 'slide', has climbable; Object -> -> chimney "chimney" with adjectives 'dark' 'narrow', action Chimney_action, name 'chimney', has scenery climbable; Object -> -> kitchen_window "kitchen window" with adjectives 'Kitchen' 'small', action Kitchen_Window_action, name 'window', has scenery door; Object -> -> water "water" with action Water_Function, name 'water' 'quantity', has drinkable; Object -> -> tree "tree" with adjectives 'large' 'storm', name 'tree' 'branch', has scenery climbable; Object -> -> forest "forest" with action Forest_action, name 'forest' 'trees' 'pines' 'hemlocks', has scenery; Object -> -> white_house "white house" with adjectives 'white' 'beautiful' 'colonial', action House_action, name 'house', has scenery; Object -> -> songbird "songbird" with adjectives 'song', action Songbird_action, name 'bird' 'songbird', has scenery; Object -> granite_wall "granite wall" with adjectives 'granite', action Granite_action, name 'wall', has ; Object -> surrounding_wall "surrounding wall" with adjectives 'surrounding', name 'wall' 'walls', has ; Constant M_END = 0; Constant M_BEG = 1; Constant M_ENTER = 2; Constant M_LOOK = 3; Constant M_WAKE = 4; Constant M_FIGHT_OR_OBJDESC = 5; Constant M_END = 6; Constant MISSED = 1; Constant UNCONSCIOUS = 2; Constant KILLED = 3; Constant LIGHT_WOUND = 4; Constant SERIOUS_WOUND = 5; Constant STAGGER = 6; Constant LOSE_WEAPON = 7; Constant HESITATE = 8; Constant SITTING_DUCK = 8; Constant X_ROOMBYTE = 1; Constant X_STRING = 2; Constant X_ROUTINE = 3; Constant X_VARIABLE = 4; Constant X_DOOR = 5; Constant P_SRCTOP = 0; Constant P_SRCALL = 1; Constant P_SRCBOT = 2; Constant SHAVE = 2; Constant SMANY = 4; Constant STAKE = 8; Constant SOG = 16; Constant SIR = 32; Constant SC = 64; Constant SH = 128; Constant P_VERB = 0; Constant P_VERBN = 1; Constant P_PREP1 = 2; Constant P_PREP1N = 3; Constant P_PREP2 = 4; Constant P_PREP2N = 5; Constant P_NC1 = 6; Constant P_NC1L = 7; Constant P_NC2 = 8; Constant P_NC2L = 9; Constant P_P1OFF = 5; Constant PS_BUZZ_WORD = 4; Constant PS_PREPOSITION = 8; Constant PS_DIRECTION = 16; Constant PS_ADJECTIVE = 32; Constant PS_VERB = 64; Constant PS_OBJECT = 128; Constant P1_OBJECT = 0; Constant P1_VERB = 1; Constant P1_ADJECTIVE = 2; Constant P1_DIRECTION = 3; Constant A_SUCCESS = 1; Constant A_FAILURE = 2; Constant P_LEXSTART = 1; Constant P_LEXELEN = 2; Constant P_WORDLEN = 4; Global location; Global score; Global turns; Global Sing_song; Global Beach_dig = 65535; Global Buoy_flag = true; Global Light_shaft = 13; Global Matches_count = 6; Global Thief_out_desc = "There is a suspicious-looking individual lying unconscious on the ground."; Global Thief_desc = "There is a suspicious-looking individual, holding a bag, leaning against one wall. He is armed with a vicious-looking stiletto."; Global Thief_engrossed; Global Thief_here; Global Egg_solve; Global Echo_flag; Global Cyclowrath; Global Leak_sprung; Global Dam_open; Global Gate_flag; Global Exorcism_candle; Global Exorcism_bell; Global Global_unused1; Global Mirror_broken; Global Grate_unlocked; Global Leaves_moved; Global Global_unused2; Global Rug_moved; Global Basket_up = true; Global Window_munged; Global Max_held_mult = 8; Global Maximum_held = 7; Global Lucky = true; Global Deaths; Global Dead; Global Base_score; Global Desc_object; Global Grue_Repellent; Global Lit; Global HS_count; Global superbrief; Global verbose; Global Always_lit; Global P_xadjn; Global P_xadj; Global P_xnam; Global P_object; Global P_and; Global P_ceptr; Global P_csptr; Global P_getflags; Global P_matchlen; Global P_adjn; Global P_adverb; Global P_adj; Global P_name; Global P_gwimbit; Global P_slocbits; Global Global_unused1; Global P_number; Global P_walk_dir; Global P_quote_flag; Global P_ncn; Global P_aadj; Global P_anam; Global P_aclause; Global P_merged; Global P_oflag; Global LastNounPlace; Global P_it_object; Global P_cont; Global player; Global P_dir; Global P_len; Global P_cctbl; Global P_syntax; Global P_oneobj; Global P_table; Global noun; Global second; Global action; Global Assigned_but_unused; Global P_not_here; Global P_mult; Global prev_second; Global prev_noun; Global prev_verb; Global P_won; Global actor; Global Clock_wait; Global C_ints = 180; Global C_ints2 = 180; Global Load_max = 100; Global Load_allowed = 100; Global Coffin_held; Global Won_flag; Global Troll_flag; Global Rainbow_flag; Global Magic_flag; Global Low_tide; Global LLD_flag; Global Empty_handed; Global Dome_flag; Global Deflated; Global Cyclops_flag; Global Chimney_flag; Global Max_score = 350; Global Low_direction = land_to; Global Ten_thousand_unused = 10000; Global Verbs = verb_table; Array Villains table [ troll sword 1 0 Troll_melee ] [ thief nasty_knife 1 0 Thief_melee ] [ cyclops nothing 0 0 Cyclops_melee ] ; Array Thief_melee --> [ 4 [ 1 "The thief stabs nonchalantly with his stiletto and misses." ] [ 1 "You dodge as the thief comes in low." ] [ 1 "You parry a lightning thrust, and the thief salutes you with a grim nod." ] [ 1 "The thief tries to sneak past your guard, but you twist away." ] ] [ 2 [ 1 "Shifting in the midst of a thrust, the thief knocks you unconscious with the haft of his stiletto." ] [ 1 "The thief knocks you out." ] ] [ 3 [ 1 "Finishing you off, the thief inserts his blade into your heart." ] [ 1 "The thief comes in from the side, feints, and inserts the blade into your ribs." ] [ 1 "The thief bows formally, raises his stiletto, and with a wry grin, ends the battle and your life." ] ] [ 4 [ 1 "A quick thrust pinks your left arm, and blood starts to trickle down." ] [ 1 "The thief draws blood, raking his stiletto across your arm." ] [ 1 "The stiletto flashes faster than you can follow, and blood wells from your leg." ] [ 1 "The thief slowly approaches, strikes like a snake, and leaves you wounded." ] ] [ 4 [ 1 "The thief strikes like a snake! The resulting wound is serious." ] [ 1 "The thief stabs a deep cut in your upper arm." ] [ 1 "The stiletto touches your forehead, and the blood obscures your vision." ] [ 1 "The thief strikes at your wrist, and suddenly your grip is slippery with blood." ] ] [ 3 [ 1 "The butt of his stiletto cracks you on the skull, and you stagger back." ] [ 1 "The thief rams the haft of his blade into your stomach, leaving you out of breath." ] [ 1 "The thief attacks, and you fall back desperately." ] ] [ 3 [ 5 "A long, theatrical slash. You catch it on your " 0 ", but the thief twists his knife, and the " 0 " goes flying." ] [ 3 "The thief neatly flips your " 0 " out of your hands, and it drops to the floor." ] [ 3 "You parry a low thrust, and your " 0 " slips out of your hand." ] ] [ 3 [ 1 "The thief, a man of superior breeding, pauses for a moment to consider the propriety of finishing you off." ] [ 1 "The thief amuses himself by searching your pockets." ] [ 1 "The thief entertains himself by rifling your pack." ] ] [ 2 [ 1 "The thief, forgetting his essentially genteel upbringing, cuts your throat." ] [ 1 "The thief, a pragmatist, dispatches you as a threat to his livelihood." ] ] ; Array Troll_melee --> [ 4 [ 1 "The troll swings his axe, but it misses." ] [ 1 "The troll's axe barely misses your ear." ] [ 1 "The axe sweeps past as you jump aside." ] [ 1 "The axe crashes against the rock, throwing sparks!" ] ] [ 1 [ 1 "The flat of the troll's axe hits you delicately on the head, knocking you out." ] ] [ 3 [ 1 "The troll neatly removes your head." ] [ 1 "The troll's axe stroke cleaves you from the nave to the chops." ] [ 1 "The troll's axe removes your head." ] ] [ 4 [ 1 "The axe gets you right in the side. Ouch!" ] [ 1 "The flat of the troll's axe skins across your forearm." ] [ 1 "The troll's swing almost knocks you over as you barely parry in time." ] [ 1 "The troll swings his axe, and it nicks your arm as you dodge." ] ] [ 3 [ 3 "The troll charges, and his axe slashes you on your " 0 " arm." ] [ 1 "An axe stroke makes a deep wound in your leg." ] [ 1 "The troll's axe swings down, gashing your shoulder." ] ] [ 4 [ 1 "The troll hits you with a glancing blow, and you are momentarily stunned." ] [ 1 "The troll swings; the blade turns on your armor but crashes broadside into your head." ] [ 1 "You stagger back under a hail of axe strokes." ] [ 1 "The troll's mighty blow drops you to your knees." ] ] [ 3 [ 3 "The axe hits your " 0 " and knocks it spinning." ] [ 3 "The troll swings, you parry, but the force of his blow knocks your " 0 " away." ] [ 3 "The axe knocks your " 0 " out of your hand. It falls to the floor." ] ] [ 2 [ 1 "The troll hesitates, fingering his axe." ] [ 1 "The troll scratches his head ruminatively: Might you be magically protected, he wonders?" ] ] [ 1 [ 1 "Conquering his fears, the troll puts you to death." ] ] ; Array Cyclops_melee --> [ 2 [ 1 "The Cyclops misses, but the backwash almost knocks you over." ] [ 1 "The Cyclops rushes you, but runs into the wall." ] ] [ 1 [ 1 "The Cyclops sends you crashing to the floor, unconscious." ] ] [ 1 [ 1 "The Cyclops breaks your neck with a massive smash." ] ] [ 2 [ 1 "A quick punch, but it was only a glancing blow." ] [ 1 "A glancing blow from the Cyclops' fist." ] ] [ 2 [ 1 "The monster smashes his huge fist into your chest, breaking several ribs." ] [ 1 "The Cyclops almost knocks the wind out of you with a quick punch." ] ] [ 2 [ 1 "The Cyclops lands a punch that knocks the wind out of you." ] [ 1 "Heedless of your weapons, the Cyclops tosses you against the rock wall of the room." ] ] [ 2 [ 3 "The Cyclops grabs your " 0 ", tastes it, and throws it to the ground in disgust." ] [ 3 "The monster grabs you on the wrist, squeezes, and you drop your " 0 " in pain." ] ] [ 1 [ 1 "The Cyclops seems unable to decide whether to broil or stew his dinner." ] ] [ 1 [ 1 "The Cyclops, no sportsman, dispatches his unconscious victim." ] ] ; Array Hero_melee --> [ 6 [ 5 "Your " 0 " misses the " 1 " by an inch." ] [ 3 "A good slash, but it misses the " 1 " by a mile." ] [ 3 "You charge, but the " 1 " jumps nimbly aside." ] [ 3 "Clang! Crash! The " 1 " parries." ] [ 3 "A quick stroke, but the " 1 " is on guard." ] [ 3 "A good stroke, but it's too slow; the " 1 " dodges." ] ] [ 5 [ 5 "Your " 0 " crashes down, knocking the " 1 " into dreamland." ] [ 3 "The " 1 " is battered into unconsciousness." ] [ 3 "A furious exchange, and the " 1 " is knocked out!" ] [ 5 "The haft of your " 0 " knocks out the " 1 "." ] [ 3 "The " 1 " is knocked out!" ] ] [ 3 [ 5 "It's curtains for the " 1 " as your " 0 " removes his head." ] [ 3 "The fatal blow strikes the " 1 " square in the heart: He dies." ] [ 3 "The " 1 " takes a fatal blow and slumps to the floor dead." ] ] [ 4 [ 3 "The " 1 " is struck on the arm; blood begins to trickle down." ] [ 5 "Your " 0 " pinks the " 1 " on the wrist, but it's not serious." ] [ 1 "Your stroke lands, but it was only the flat of the blade." ] [ 3 "The blow lands, making a shallow gash in the " 1 "'s arm!" ] ] [ 4 [ 3 "The " 1 " receives a deep gash in his side." ] [ 3 "A savage blow on the thigh! The " 1 " is stunned but can still fight!" ] [ 1 "Slash! Your blow lands! That one hit an artery, it could be serious!" ] [ 1 "Slash! Your stroke connects! This could be serious!" ] ] [ 5 [ 3 "The " 1 " is staggered, and drops to his knees." ] [ 3 "The " 1 " is momentarily disoriented and can't fight back." ] [ 3 "The force of your blow knocks the " 1 " back, stunned." ] [ 3 "The " 1 " is confused and can't fight back." ] [ 3 "The quickness of your thrust knocks the " 1 " back, stunned." ] ] [ 2 [ 3 "The " 1 "'s weapon is knocked to the floor, leaving him unarmed." ] [ 3 "The " 1 " is disarmed by a subtle feint past his guard." ] ] ; Array Def3_res --> Def3a 0 Def3b 0 Def3c ; Array Def2_res --> Def2a Def2b 0 0 ; Array Def1_res --> Def1 0 0 ; Array Def3c --> MISSED STAGGER STAGGER LIGHT_WOUND LIGHT_WOUND LIGHT_WOUND LIGHT_WOUND SERIOUS_WOUND SERIOUS_WOUND SERIOUS_WOUND ; Array Def3b --> MISSED MISSED MISSED STAGGER STAGGER LIGHT_WOUND LIGHT_WOUND LIGHT_WOUND SERIOUS_WOUND SERIOUS_WOUND SERIOUS_WOUND ; Array Def3a --> MISSED MISSED MISSED MISSED MISSED STAGGER STAGGER LIGHT_WOUND LIGHT_WOUND SERIOUS_WOUND SERIOUS_WOUND ; Array Def2b --> MISSED MISSED MISSED STAGGER STAGGER LIGHT_WOUND LIGHT_WOUND LIGHT_WOUND UNCONSCIOUS KILLED KILLED KILLED ; Array Def2a --> MISSED MISSED MISSED MISSED MISSED STAGGER STAGGER LIGHT_WOUND LIGHT_WOUND UNCONSCIOUS ; Array Def1 --> MISSED MISSED MISSED MISSED STAGGER STAGGER UNCONSCIOUS UNCONSCIOUS KILLED KILLED KILLED KILLED KILLED ; Array Bdigs --> "You seem to be digging a hole here." "The hole is getting deeper, but that's about it." "You are surrounded by a wall of sand on all sides." ; Array Near_water table Dam_Base Frigid_River4 White_Cliffs_Beach2 Frigid_River2 White_Cliffs_Beach1 Frigid_River5 Shore Frigid_River1 Sandy_Beach Frigid_River5 Reservoir_South Reservoir Reservoir_North Reservoir Stream_View Stream ; Array River_next table Frigid_River4 Frigid_River3 Frigid_River2 Frigid_River5 Frigid_River1 ; Array River_speeds --> 10 Frigid_River4 4 Frigid_River3 4 Frigid_River2 3 Frigid_River5 2 Frigid_River1 1 you 36 Frigid_River3 34 Frigid_River5 31 Coal_Mine1 140 Frigid_River4 33 ; Array Candle_table --> 20 "The candles grow shorter." 10 "The candles are becoming quite short." 5 "The candles won't last long now." ; Array Lamp_table --> 100 "The lamp appears a bit dimmer." 70 "The lamp is definitely dimmer now." 15 "The lamp is nearly out." ; Array Cyclo_messages --> "The cyclops seems somewhat agitated." "The cyclops appears to be getting more agitated." "The cyclops is moving about the room, looking for something." "The cyclops was looking for salt and pepper. No doubt they are condiments for his upcoming snack." "The cyclops is moving toward you in an unfriendly manner." "You have two choices: 1. Leave 2. Become dinner." ; Array LeakLevel --> "up to your ankles." "up to your shin." "up to your knees." "up to your hips." "up to your waist." "up to your chest." "up to your neck." "over your head." "high in your lungs." ; Array Near_loudroom table nothing Damp_Cave Round_Room Deep_Canyon ; Array coalmine_rooms table nothing Coal_Mine4 Coal_Mine3 Coal_Mine2 Coal_Mine1 Ladder_Top Ladder_Bottom Squeaky_Room Mine_Entrance ; Array Dummy_table table 0 "Look around." "Too late for that." "Have your eyes checked." ; Array Yuks_table table 0 "A valiant attempt." "You can't be serious." "An interesting idea..." "What a concept!" ; Array Hello_table table 0 "Hello." "Good day." "Nice weather we've been having lately." "Goodbye." ; Array Noswim_table table 0 "You can't swim in the dungeon." ; Array Ho_hum_table table 0 " doesn't seem to work." " isn't notably helpful." " has no effect." ; Array Indents --> " " " " " " " " " " " " ; Array Hop_msg table 0 "Very good. Now you can go to the second grade." "Are you enjoying yourself?" "Wheeeeeeeeee!!!!!" "Do you expect me to applaud?" ; Array Dive_msg table 0 "You should have looked before you leaped." "In the movies, your life would be passing before your eyes." "Geronimo..." ; Array P_oclause --> 50; Array P_merge --> 50; Array P_buts --> 50; Array P_prsi --> 50; Array P_prso --> 50; Array P_vtbl --> 4; Array P_otbl --> 8; Array P_itbl --> 10; Array P_inbuf string 100; Array P_lexv -> 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; Array C_table --> 90; Array Above_ground table West_of_House North_of_House East_of_House South_of_House Forest1 Forest2 Forest4 Forest_Path Clearing2 Clearing1 Canyon_View ; Array In_house table Living_Room Kitchen Attic Kitchen ; Array Forest_around table Forest1 Forest2 Forest4 Forest_Path Clearing2 Forest1 ; Array House_around table West_of_House North_of_House East_of_House South_of_House West_of_House ; Array Prepositions --> 17 'behind' 239 'under' 240 'around' 241 'for' 242 'at' 243 'off' 244 'across' 245 'over' 246 'away' 247 'from' 248 'on' 249 'down' 250 'in' 251 'up' 252 'out' 253 'with' 254 'to' 255 ; Array Actions --> VerboseSub BriefSub SuperbriefSub DiagnoseSub InventorySub QuitSub RestartSub RestoreSub SaveSub ScoreSub ScriptSub UnscriptSub VersionSub VerifySub SwitchOnSub AgainSub AnswerSub PreAnswerSub InsertSub AttackSub BackSub BlowUpSub SwitchOffSub InflateSub BlowInSub BoardSub BrushSub BugSub BurnSub VomitSub ClimbUpSub ClimbDownSub ClimbObjSub ClimbOnSub EnterObjSub CloseSub CommandSub CountSub CrossSub CutSub CurseSub DeflateSub PokeSub OpenSub DigSub DisembarkSub DisenchantSub DrinkSub DrinkFromSub DropSub PutOnSub EatSub EchoSub EnchantSub EnterSub ExitSub ExamineSub LookInSub BanishSub FillSub FindSub FollowSub FrobozzSub GiveToSub GiveSub HatchSub HelloSub ChantSub IsOnSub DiveSub KickSub StabSub KissSub KnockSub LaunchSub LeanOnSub LeaveSub ListenSub LockSub LookSub LookOnSub LookUnderSub LookBehindSub ReadSub LowerSub GreaseSub MakeSub MeltSub MoveSub MoveWithSub MumbleSub OdysseusSub PickSub TakeSub PlaySub FixSub PlughSub PourSub PraySub PumpUpSub SlideSub PushSub PutUnderSub WearSub PutBehindSub RaiseSub MolestSub ReadObjObjSub RepentSub RingSub TouchSub TalkToSub SaySub SearchSub SendForSub ShakeSub JumpSub SmellSub SpinSub SprayOnSub SprayWithSub SqueezeSub StandSub StaySub StrikeSub SwimSub SwingSub ThrowSub ThrowToSub ThrowOverSub TieToSub TieWithSub TempleWordSub UnlockSub UntieSub WaitSub WakeSub GoSub WalkToSub WalkAroundSub WieldSub WinSub WindUpSub WishSub YellSub ZorkSub ; Array Preactions --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PrePutOnSub 0 0 0 0 0 0 PreBoardSub 0 0 PreBurnSub 0 0 0 0 0 0 0 0 0 0 0 0 0 PrePokeSub 0 0 0 0 0 0 PreDropSub PrePutOnSub 0 0 0 0 0 0 0 0 PreFillSub 0 0 0 PreGiveToSub PreGiveSub 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PreReadSub 0 0 0 0 PreMoveSub PreMoveWithSub 0 0 0 PreTakeSub 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; Array verb_table --> [ Article obj ; print "a ", (name) obj; rtrue; ]; [ Probability chance ; if (Lucky) { if (chance > random(100)) rtrue; rfalse; } if (chance > random(300)) rtrue; rfalse; ]; [ PickOne tbl ; return tbl-->random(tbl-->0); ]; [ ComplexPickOne tbl len offset ndx choice msg_tbl ; len = tbl-->0; offset = tbl-->1; --len; tbl = tbl + 2; msg_tbl = tbl + offset * 2; ndx = random(len - offset); choice = msg_tbl-->ndx; msg_tbl-->ndx = msg_tbl-->1; msg_tbl-->1 = choice; ++offset; if (offset == len) { offset = 0; } tbl-->0 = offset; return choice; ]; [ Treasure_Inside_Buoy ; if (action ~= ##Open) rfalse; Score_Obj(large_emerald); ! not popped rfalse; ]; [ Grating_Exit ; if (Leaves_moved) { if (grating has open) { return Grating_Room; } print "The grating is closed!"; new_line; SetPronoun(grating); ! not popped rfalse; } print "You can't go that way."; new_line; rfalse; ]; [ Canyon_View_F rarg ; if (rarg ~= M_BEG || action ~= ##Dive || noun) rfalse; JigsUp("Nice view, lousy place to jump."); ! not popped rtrue; ]; [ Main ; .labelXXX; Queue(I_Fight,65535)-->0 = true; Queue(I_Sword,65535); ! not popped Queue(I_Thief,65535)-->0 = true; Queue(I_Candles,40); ! not popped Queue(I_Lantern,200); ! not popped magic_boat.vtype = water_room; Def1_res-->1 = Def1 + 2; Def1_res-->2 = Def1 + 4; Def2_res-->2 = Def2b + 2; Def2_res-->3 = Def2b + 4; Def3_res-->1 = Def3a + 2; Def3_res-->3 = Def3b + 2; location = West_of_House; SetPronoun(small_mailbox); ! not popped if (location hasnt visited) { VersionSub(); ! not popped new_line; } Lit = true; player = cretin; actor = player; move player to location; LookSub(); ! not popped CommandLoop(); ! not popped jump labelXXX; ]; [ Not_Here_Object_F tbl prso_p=true obj ; if (noun == not_here_object && second == not_here_object) { "Those things aren't here!"; } if (noun == not_here_object) { tbl = P_prso; } else { tbl = P_prsi; prso_p = false; } P_cont = 0; P_quote_flag = false; if (player == actor) { print "You can't see any"; Not_Here_Print(prso_p); ! not popped " here!"; } print "The ", (name) player, " seems confused. ~I don't see any"; Not_Here_Print(prso_p); ! not popped " here!~"; ]; [ Find_Not_Here tbl prso_p m_f obj ; m_f = Moby_Find(tbl); if (m_f > 1) { obj = (tbl-->1).contains; if (obj) { m_f = 1[?]; P_object = obj; } } if (1[?] == m_f) { if (prso_p) { noun = P_object; rfalse; } second = P_object; rfalse; } if (~~prso_p) { print "You wouldn't find any"; Not_Here_Print(prso_p); ! not popped " there."; } return not_here_object; ]; [ Global_Not_Here_Print obj ; P_cont = 0; P_quote_flag = false; print "You can't see any"; if (obj == noun) { Prso_Print(); ! not popped } else { Prsi_Print(); ! not popped } " here."; ]; [ Not_Here_Print prso_p ptr ; if (P_oflag) { if (P_xadj) { print " ", (address) P_xadjn; } if (~~P_xnam) rfalse; print " ", (address) P_xnam; rtrue; } if (prso_p) { ptr = P_itbl-->6; return Buffer_Print(ptr,P_itbl-->7,false); } ptr = P_itbl-->8; return Buffer_Print(ptr,P_itbl-->9,false); ]; [ Null_F a1 a2 ; rfalse; ]; [ Stairs_F ; if (action ~= ##EnterObj) rfalse; "You should say whether you want to go up or down."; ]; [ Sailor_Fcn ; if (action ~= ##Hello) rfalse; ++HS_count; Null_F(); ! not popped if (~~HS_count % 20) { "You seem to be repeating yourself."; } if (~~HS_count % 10) { "I think that phrase is getting a bit worn out."; } "Nothing happens here."; ]; [ Ground_Function ; if (action == ##PutOn or ##Insert && second == ground) { Perform(##Drop,noun); ! not popped rtrue; } if (location == Sandy_Cave) { return SandFunction(); } if (action ~= ##Dig) rfalse; "The ground is too hard for digging here."; ]; [ Grue_Function ; if (action == ##Examine) { "The grue is a sinister, lurking presence in the dark places of the earth. Its favorite diet is adventurers, but its insatiable appetite is tempered by its fear of light. No grue has ever been seen by the light of day, and few have survived its fearsome jaws to tell the tale."; } if (action == ##Find) { "There is no grue here, but I'm sure there is at least one lurking in the darkness nearby. I wouldn't let my light go out if I were you!"; } if (action ~= ##Listen) rfalse; "It makes no sound but is always lurking in the darkness nearby."; ]; [ Cretin_Fcn in_mirror_room ; if (action == ##TalkTo) { P_cont = 0; P_quote_flag = false; "Talking to yourself is said to be a sign of impending mental collapse."; } if (action == ##GiveTo && second == you) { Perform(##Take,noun); ! not popped rtrue; } if (action == ##Make) { "Only you can do that."; } if (action == ##Disembark) { "You'll have to do that on your own."; } if (action == ##Eat) { "Auto-cannibalism is not the answer."; } if (action == ##Poke or ##Attack) { if (second && second has weapon) { return JigsUp("If you insist.... Poof, you're dead!"); } "Suicide is not the answer."; } if (action == ##Take) { "How romantic!"; } if (action ~= ##Examine) rfalse; in_mirror_room = parent(mirror1); if (location == in_mirror_room or parent(mirror2)) { "Your image in the mirror looks tired."; } "That's difficult unless your eyes are prehensile."; ]; [ Path_Fcn ; if (action == ##Follow or ##Take) { "You must specify a direction to go."; } if (action == ##Find) { "I can't help you there...."; } if (action ~= ##Dig) rfalse; "Not a chance."; ]; [ Zorkmid_Function ; if (action == ##Examine) { "The zorkmid is the unit of currency of the Great Underground Empire."; } if (action ~= ##Find) rfalse; "The best way to find zorkmids is to go out and look for them."; ]; [ Queue_Daemon rtn ticks cint ; cint = QueueInterrupt(rtn,true); cint-->1 = ticks; return cint; ]; [ Queue rtn ticks cint ; cint = QueueInterrupt(rtn); cint-->1 = ticks; return cint; ]; [ QueueInterrupt rtn int2flag end c int ; end = C_table + 180; c = C_table + C_ints; .labelXXX; if (c == end) { C_ints = C_ints - 6; if (int2flag) { C_ints2 = C_ints2 - 6; } int = C_table + C_ints; int-->2 = rtn; return int; } if (c-->2 == rtn) { return c; } c = c + 6; jump labelXXX; ]; [ Clocker c end tick flag ; if (Clock_wait) { Clock_wait = false; rfalse; } c = C_table + (P_won ? C_ints : C_ints2); end = C_table + 180; .labelXXX; if (c == end) { if (++turns > 999) { turns = 0; } return flag; } if (c-->0) { tick = c-->1; if (~~tick) { ! no code } else { c-->1 = tick - 1; if (tick <= 1 && (c-->2)()) { flag = true; } } } c = c + 6; jump labelXXX; ]; [ CommandLoop icnt ocnt num cnt obj tbl v ptbl obj1 temp ; .labelXXX; cnt = 0; obj = nothing; ptbl = true; P_won = Parser(); if (P_won) { icnt = P_prsi-->P_matchlen; ocnt = P_prso-->P_matchlen; if (~~ocnt) { ocnt; ! not popped } else if (ocnt > 1) { tbl = P_prso; if (~~icnt) { obj = nothing; } else { obj = P_prsi-->1; } ocnt; ! not popped } else if (icnt > 1) { ptbl = false; tbl = P_prsi; obj = P_prso-->1; icnt; ! not popped } else { 1[?]; ! not popped } @store 3 SP; if ((~~obj) && icnt == true) { obj = P_prsi-->1; } if (action == ##Go) { v = Perform(action,noun); } else if (~~num) { if (~~P_syntax->0 & 3) { v = Perform(action); noun = nothing; } else if (~~Lit) { print "It's too dark to see."; new_line; } else { print "It's not clear what you're referring to."; new_line; v = 0; } } else { P_not_here = 0; P_mult = false; if (num > 1) { P_mult = true; } temp = false; .labelXXX; if (++cnt > num) { if (P_not_here > 0) { print "The "; if (P_not_here ~= num) { print "other "; } print "object"; if (P_not_here ~= 1) { print "s"; } print " that you mentioned "; if (P_not_here ~= 1) { print "are"; } else { print "is"; } print "n't here."; new_line; } else if (~~temp) { print "There's nothing here you can take."; new_line; } } else { if (ptbl) { obj1 = P_prso-->cnt; } else { obj1 = P_prsi-->cnt; } noun = (ptbl ? obj1 : obj); second = (ptbl ? obj : obj1); if (num > 1 || P_itbl-->6-->0 == 'all') { if (obj1 == not_here_object) { ++P_not_here; jump labelXXX; } if (action == ##Take && second && P_itbl-->6-->0 == 'all' && noun notin second) { jump labelXXX; } if (P_getflags == 1 && action == ##Take) { if (parent(obj1) ~= player or location && parent(obj1) hasnt supporter) jump labelXXX; if (obj1 hasnt takeable && obj1 hasnt trytakebit) { jump labelXXX; } } if (obj1 == it_object) { print (name) P_it_object; } else { print (name) obj1; } print ": "; } temp = true; v = Perform(action,noun,second); if (v ~= A_FAILURE) jump labelXXX; } } if (v ~= A_FAILURE) { v = parent(player).action(M_END); } if (action ~= ##Save or ##Go or ##Again) { if (action == ##Version or ##Score or ##Restore) { ! no code } else { prev_verb = action; prev_noun = noun; prev_second = second; } } if (v == A_FAILURE) { P_cont = 0; } } else { P_cont = 0; } if ((~~P_won) || action == ##Superbrief or ##Brief or ##TalkTo || action == ##Version or ##Save or ##Verbose || action == ##Score or ##Restart or ##Quit) jump labelXXX; if (action == ##Restore or ##Unscript or ##Script) { jump labelXXX; } v = Clocker(); jump labelXXX; ]; [ Perform act obj ind_obj v verbtmp objtmp indtmp ; verbtmp = action; objtmp = noun; indtmp = second; if (it_object == ind_obj or obj && LastNounPlace ~= location) { print "I don't see what you are referring to."; new_line; return A_FAILURE; } if (obj == it_object) { obj = P_it_object; } if (ind_obj == it_object) { ind_obj = P_it_object; } action = act; noun = obj; if (noun && second ~= it_object && action ~= ##Go) { P_it_object = noun; LastNounPlace = location; } second = ind_obj; if (not_here_object == noun or second) { v = Not_Here_Object_F(); if (v) { jump labelXXX; } } obj = noun; ind_obj = second; v = player.action(); if (v) { ! no code } else { v = parent(player).action(M_BEG); if (v) { ! no code } else { v = (Preactions-->act)(); if (v) { ! no code } else { if (ind_obj) { v = ind_obj.action(); if (v) { jump labelXXX; } } if (obj && act ~= ##Go && parent(obj)) { v = parent(obj).container_action(); if (v) { jump labelXXX; } } if (obj && act ~= ##Go) { v = obj.action(); if (v) { jump labelXXX; } } v = (Actions-->act)(); if (~~v) { ! no code } } } } .labelXXX; action = verbtmp; noun = objtmp; second = indtmp; return v; ]; [ Parser ptr=P_LEXSTART word val vrb len dir nw tmpword num UNUSED cnt=65535 ; .labelXXX; if (++cnt > 9) { ! no code } else { P_itbl-->cnt = 0; jump labelXXX; } P_adverb = 0; P_merged = false; P_prso-->P_matchlen = 0; P_prsi-->P_matchlen = 0; P_buts-->P_matchlen = 0; if ((~~P_quote_flag) && player ~= actor) { player = actor; if (parent(player) hasnt vehicle) { location = parent(player); } Lit = LitP(location); } if (P_cont) { ptr = P_cont; if ((~~superbrief) && actor == player && action ~= ##Say) { new_line; } P_cont = 0; } else { player = actor; P_quote_flag = false; if (parent(player) hasnt vehicle) { location = parent(player); } Lit = LitP(location); if (~~superbrief) { new_line; } print ">"; @sread P_inbuf P_lexv; } P_len = P_lexv->1; if (~~P_len) { print "I beg your pardon?"; new_line; rfalse; } len = P_len; P_dir = 0; P_ncn = 0; P_getflags = 0; .labelXXX; if (--P_len < 0) { P_quote_flag = false; } else { word = P_lexv-->ptr; if (~~word) { word = ParseNumber(ptr); if (~~word) jump labelXXX; } if (word == 'to' && vrb == #v$ask) { word = '"//'; } else if (word == 'then' && (~~vrb) && (~~P_quote_flag)) { P_itbl-->0 = #v$ask; P_itbl-->1 = 0; word = '"//'; } if (word == 'then' or './/' or '"//') { if (word == '"//') { if (P_quote_flag) { P_quote_flag = false; } else { P_quote_flag = true; } } if (P_len) { P_cont = ptr + 2; } P_lexv->1 = P_len; } else { val = Wt(word,PS_DIRECTION,P1_DIRECTION); if (val && vrb == 0 or #v$go) { if (len ~= 1 && (len ~= 2 || vrb ~= #v$go)) { nw = P_lexv-->(ptr + 2); if (nw ~= 'then' or './/' or '"//' || len < 2 && ((~~P_quote_flag) || len ~= 2 || nw ~= '"//') && (len <= 2 || nw ~= ',//' or 'and')) jump labelXXX; } dir = val; if (nw == ',//' or 'and') { P_lexv-->(ptr + 2) = 'then'; } if (len > 2) jump labelXXX; P_quote_flag = false; jump labelXXX; } .labelXXX; val = Wt(word,PS_VERB,P1_VERB); if (val && (~~vrb)) { vrb = val; P_itbl-->0 = val; P_itbl-->1 = P_vtbl; P_vtbl-->0 = word; num = ptr * 2 + 2; P_vtbl->2 = P_lexv->num; P_vtbl->3 = P_lexv->(num + 1); } else { val = Wt(word,PS_PREPOSITION,P1_OBJECT); if (~~val) { if (word ~= 'all' or 'one' && (~~Wt(word,PS_ADJECTIVE)) && (~~Wt(word,PS_OBJECT))) jump labelXXX; val = 0; } if (P_len > 0 && P_lexv-->(ptr + 2) == 'of' && ((~~val) && word ~= 'all' or 'one' or 'a//')) { ! no code } else if (val && ((~~P_len) || P_lexv-->(ptr + 2) == 'then' or './/')) { if (P_ncn < 2) { P_itbl-->2 = val; P_itbl-->3 = word; } } else { if (P_ncn == 2) { print "There were too many nouns in that sentence."; new_line; rfalse; } ++P_ncn; ptr = Clause(ptr,val,word); if (~~ptr) rfalse; if (ptr < 0) { P_quote_flag = false; jump labelXXX; .labelXXX; if (Wt(word,PS_BUZZ_WORD)) { ! no code } else { if (vrb == #v$ask && Wt(word,PS_VERB,P1_VERB)) { print "Please consult your manual for the correct way to talk to other people or creatures."; new_line; rfalse; } Cant_Use(ptr); ! not popped rfalse; .labelXXX; Unknown_Word(ptr); ! not popped rfalse; } } } } .labelXXX; tmpword = word; ptr = ptr + 2; jump labelXXX; } } .labelXXX; if (dir) { action = ##Go; noun = dir; P_walk_dir = dir; rtrue; } P_walk_dir = 0; if (P_oflag) { Orphan_Merge(); ! not popped } if ((~~Syntax_Check()) || (~~Snarf_Objects()) || (~~Many_Check()) || (~~Take_Check())) rfalse; rtrue; ]; [ Wt ptr bit category=5 offset=P_P1OFF type ; type = ptr->4; if (type & bit ~= bit) rfalse; if (category > 4) rtrue; type = type & 3; if (type ~= category) { ++offset; } return ptr->offset; ]; [ Clause ptr val word off num andflag first=true nw tmpword cnt ; off = (P_ncn - 1) * 2; if (val) { num = 2 + off; P_itbl-->num = val; P_itbl-->(num + 1) = word; ptr = ptr + 2; } else { ++P_len; } if (~~P_len) { --P_ncn; return 65535; } num = 6 + off; P_itbl-->num = P_lexv + ptr * 2; if (P_lexv-->ptr == 'the' or 'a//' or 'an') { P_itbl-->num = P_itbl-->num + 4; } .labelXXX; if (--P_len < 0) { cnt = num + 1; P_itbl-->cnt = P_lexv + ptr * 2; return 65535; } word = P_lexv-->ptr; if (~~word) { word = ParseNumber(ptr); if (~~word) jump labelXXX; } if (~~P_len) { nw = 0; } else { nw = P_lexv-->(ptr + 2); } if (word == 'and' or ',//') { andflag = true; } else if (word == 'all' or 'one') { if (nw == 'of') { --P_len; ptr = ptr + 2; } } else { if (word == 'then' or './/' || (Wt(word,PS_PREPOSITION) && P_itbl-->0 && (~~first))) { ++P_len; cnt = num + 1; P_itbl-->cnt = P_lexv + ptr * 2; return ptr - 2; } if (Wt(word,PS_OBJECT)) { if (P_len > 0 && nw == 'of' && word ~= 'all' or 'one') { ! no code } else if (Wt(word,PS_ADJECTIVE,P1_ADJECTIVE) && nw && Wt(nw,PS_OBJECT)) { ! no code } else { if ((~~andflag) && nw ~= 'but' or 'except' && nw ~= 'and' or ',//') { cnt = num + 1; P_itbl-->cnt = P_lexv + (ptr + 2) * 2; return ptr; } andflag = false; } } else { if (P_merged || P_oflag || P_itbl-->0) { if (Wt(word,PS_ADJECTIVE)) jump labelXXX; if (Wt(word,PS_BUZZ_WORD)) { jump labelXXX; } } if (andflag && (Wt(word,PS_DIRECTION) || Wt(word,PS_VERB))) { ptr = ptr - 4; P_lexv-->(ptr + 2) = 'then'; P_len = P_len + 2; } else if (Wt(word,PS_PREPOSITION)) { ! no code } else { Cant_Use(ptr); ! not popped rfalse; .labelXXX; Unknown_Word(ptr); ! not popped rfalse; } } } .labelXXX; tmpword = word; first = false; ptr = ptr + 2; jump labelXXX; ]; [ ParseNumber ptr len nptr digit num clocknum mult ; len = (P_lexv + ptr * 2)->2; nptr = (P_lexv + ptr * 2)->3; .labelXXX; if (--len < 0) { ! no code } else { digit = P_inbuf->nptr; if (digit == ':') { clocknum = num; num = 0; } else { if (num > 10000 || digit >= 58 || digit <= 47) rfalse; mult = num * 10; num = mult + (digit - 48); } ++nptr; jump labelXXX; } P_lexv-->ptr = 'intnum'; if (num > 1000) rfalse; if (clocknum) { if (clocknum < 8) { clocknum = clocknum + 12; } else { if (clocknum > 23) rfalse; } num = num + clocknum * 60; } P_number = num; return 'intnum'; ]; [ Orphan_Merge cnt=65535 temp verb beg end adj word UNUSED ; P_oflag = false; if (Wt(P_itbl-->1-->0,PS_ADJECTIVE,P1_ADJECTIVE)) { adj = true; } verb = P_itbl-->0; if (verb && (~~adj) && verb ~= P_otbl-->0 || P_ncn == 2) rfalse; if (P_otbl-->6 == true) { temp = P_itbl-->2; if (temp ~= P_otbl-->2 && temp) rfalse; if (adj) { P_otbl-->6 = P_lexv + 2; P_otbl-->7 = P_lexv + 6; } else { P_otbl-->6 = P_itbl-->6; P_otbl-->7 = P_itbl-->7; } } else if (P_otbl-->8 == true) { temp = P_itbl-->2; if (temp ~= P_otbl-->4 && temp) rfalse; if (adj) { P_itbl-->6 = P_lexv + 2; P_itbl-->7 = P_lexv + 6; } P_otbl-->8 = P_itbl-->6; P_otbl-->9 = P_itbl-->7; P_ncn = 2; } else if (P_aclause) { if (P_ncn ~= 1 && (~~adj)) { P_aclause = P_VERB; rfalse; } beg = P_itbl-->6; if (adj) { beg = P_lexv + 2; adj = false; } end = P_itbl-->7; .labelXXX; word = beg-->0; if (beg == end) { if (adj) { AClause_Win(adj); ! not popped jump labelXXX; } P_aclause = P_VERB; rfalse; } if ((~~adj) && (word->4 & 32 == 32 || word == 'all' or 'one')) { adj = word; } else if (word->4 & 128 == 128 || word == 'one') { if (word ~= P_anam or 'one') rfalse; AClause_Win(adj); ! not popped jump labelXXX; } beg = beg + 4; if (end) jump labelXXX; end = beg; P_ncn = 1; P_itbl-->6 = beg - 4; P_itbl-->7 = beg; jump labelXXX; } .labelXXX; if (++cnt > 9) { P_merged = true; rtrue; } P_itbl-->cnt = P_otbl-->cnt; jump labelXXX; ]; [ AClause_Win otbl ; P_itbl-->0 = P_otbl-->0; P_cctbl = P_otbl; Clause_Copy(P_aclause,P_aclause + 1,otbl); ! not popped if (P_otbl-->8) { P_ncn = 2; } P_aclause = P_VERB; rtrue; ]; [ Word_Print cnt buf ; .labelXXX; if (--cnt < 0) rtrue; print (char) P_inbuf->buf; ++buf; jump labelXXX; ]; [ Unknown_Word ptr buf word ; if (action == ##Say) { print "Nothing happens."; new_line; rfalse; } print "I don't know the word ~"; buf = ptr * 2; word = (P_lexv + buf)->2; Word_Print(word,(P_lexv + buf)->3); ! not popped print "~."; new_line; P_quote_flag = false; P_oflag = false; return P_oflag; ]; [ Cant_Use ptr buf word ; if (action == ##Say) { print "Nothing happens."; new_line; rfalse; } print "You used the word ~"; buf = ptr * 2; word = (P_lexv + buf)->2; Word_Print(word,(P_lexv + buf)->3); ! not popped print "~ in a way that I don't understand."; new_line; P_quote_flag = false; P_oflag = false; return P_oflag; ]; [ Syntax_Check syn len num obj drive1 drive2 prep vrb tmp attr lbit ; vrb = P_itbl-->0; if (~~vrb) { print "There was no verb in that sentence!"; new_line; rfalse; } syn = Verbs-->(255 - vrb); len = syn->0; syn = 1 + syn; .labelXXX; num = syn->0 & 3; if (P_ncn > num) { ! no code } else { if (num >= 1 && (~~P_ncn)) { prep = P_itbl-->2; if ((~~prep) || prep == syn->1) { drive1 = syn; jump labelXXX; } } lbit = syn->1; if (lbit == P_itbl-->2) { if (num == 2 && P_ncn == 1) { drive2 = syn; } else { lbit = syn->2; if (lbit == P_itbl-->4) { Syntax_Found(syn); ! not popped rtrue; } } } } .labelXXX; if (--len < 1) { if (drive1) jump labelXXX; if (drive2) { jump labelXXX; } print "That sentence isn't one I recognize."; new_line; rfalse; } syn = syn + 8; jump labelXXX; .labelXXX; if (drive1) { attr = drive1->3; lbit = drive1->5; obj = GWim(attr,lbit,drive1->1); if (obj) { P_prso-->P_matchlen = 1; P_prso-->1 = obj; return Syntax_Found(drive1); } } if (drive2) { attr = drive2->4; lbit = drive2->6; obj = GWim(attr,lbit,drive2->2); if (obj) { P_prsi-->P_matchlen = 1; P_prsi-->1 = obj; return Syntax_Found(drive2); } } if (vrb == #v$find) { print "That question can't be answered."; new_line; rfalse; } if (player ~= actor) { return Cant_Orphan(); } Orphan(drive1,drive2); ! not popped print "What do you want to "; tmp = P_otbl-->1; if (~~tmp) { print "tell"; } else if (~~P_vtbl->2) { print (address) tmp-->0; } else { lbit = tmp->2; Word_Print(lbit,tmp->3); ! not popped P_vtbl->2 = 0; } if (drive2) { Clause_Print(P_NC1,P_NC1L); ! not popped } P_oflag = true; Prep_Print((drive1 ? (drive1->1) : (drive2->2))); ! not popped print "?"; new_line; rfalse; ]; [ Cant_Orphan ; print "~I don't understand! What are you referring to?~"; new_line; rfalse; ]; [ Orphan d1 d2 cnt=65535 ; P_oclause-->P_matchlen = 0; P_cctbl = P_itbl; .labelXXX; if (++cnt > 9) { ! no code } else { P_otbl-->cnt = P_itbl-->cnt; jump labelXXX; } if (P_ncn == 2) { Clause_Copy(8,9); ! not popped } if (P_ncn >= 1) { Clause_Copy(6,7); ! not popped } if (d1) { P_otbl-->2 = d1->1; P_otbl-->6 = true; rtrue; } if (~~d2) rfalse; P_otbl-->4 = d2->2; P_otbl-->8 = true; rtrue; ]; [ Clause_Print beg_ptr end_ptr the_p=true beginning ; beginning = P_itbl-->beg_ptr; return Buffer_Print(beginning,P_itbl-->end_ptr,the_p); ]; [ Buffer_Print beg end cp nosp wrd first=true not_prefixed pn ; .labelXXX; if (beg == end) rtrue; if (nosp) { nosp = false; } else { print " "; } wrd = beg-->0; if (wrd == './/') { nosp = true; } else { if (first && (~~not_prefixed) && cp) { print "the "; } if (P_oflag || P_merged) { print (address) wrd; } else if (wrd == 'it' && LastNounPlace == location) { print (name) P_it_object; } else { pn = beg->2; Word_Print(pn,beg->3); ! not popped } first = false; } beg = beg + 4; jump labelXXX; ]; [ Capitalize ptr word ; print (char) P_inbuf->(ptr->3) - 32; word = ptr->2 - 1; return Word_Print(word,ptr->3 + 1); ]; [ Prep_Print ndx prep ; if (~~ndx) rfalse; print " "; prep = Prep_Find(ndx); print (address) prep; rtrue; ]; [ Clause_Copy bptr eptr insrt beg end ; beg = P_cctbl-->bptr; end = P_cctbl-->eptr; P_otbl-->bptr = P_oclause + (P_oclause-->P_matchlen * 2 + 2); .labelXXX; if (beg == end) { P_otbl-->eptr = P_oclause + (P_oclause-->P_matchlen * 2 + 2); rtrue; } if (insrt && P_anam == beg-->0) { Clause_Add(insrt); ! not popped } Clause_Add(beg-->0); ! not popped beg = beg + 4; jump labelXXX; ]; [ Clause_Add word len ; len = P_oclause-->P_matchlen + 2; P_oclause-->(len - 1) = word; P_oclause-->len = 0; P_oclause-->P_matchlen = len; rtrue; ]; [ Prep_Find prep cnt len ; len = Prepositions-->0 * 2; .labelXXX; if (++cnt > len) rfalse; if (Prepositions-->cnt ~= prep) jump labelXXX; return Prepositions-->(cnt - 1); ]; [ Syntax_Found syn ; P_syntax = syn; action = syn->7; return action; ]; [ GWim gbit lbit prep obj ; if (gbit == rmungbit) { return Room_Holder; } P_gwimbit = gbit; P_slocbits = lbit; P_merge-->P_matchlen = 0; if (Get_Object(P_merge,false)) { P_gwimbit = 0; if (P_merge-->P_matchlen ~= 1) rfalse; obj = P_merge-->1; if (obj == you) rfalse; print "("; if (prep) { prep = Prep_Find(prep); print (address) prep; if (prep == 'out') { print " of"; } if (obj == pair_of_hands) { print " your hands)"; new_line; } else { print " the "; } } if (obj ~= pair_of_hands) { print (name) obj, ")"; new_line; } return obj; } P_gwimbit = 0; rfalse; ]; [ Snarf_Objects ptr ; ptr = P_itbl-->6; if (ptr) { P_slocbits = P_syntax->5; if (~~Snarfem(ptr,P_itbl-->7,P_prso)) rfalse; if (P_buts-->P_matchlen) { P_prso = But_Merge(P_prso); } } ptr = P_itbl-->8; if (~~ptr) rtrue; P_slocbits = P_syntax->6; if (~~Snarfem(ptr,P_itbl-->9,P_prsi)) rfalse; if (~~P_buts-->P_matchlen) rtrue; if (P_prsi-->P_matchlen == 1) { P_prso = But_Merge(P_prso); rtrue; } P_prsi = But_Merge(P_prsi); rtrue; ]; [ But_Merge tbl len butlen cnt=1 matches obj ntbl ; len = tbl-->P_matchlen; P_merge-->P_matchlen = 0; .labelXXX; if (--len < 0) { ! no code } else { obj = tbl-->cnt; if (ZMemQ(obj,P_buts)) { ! no code } else { P_merge-->(matches + 1) = obj; ++matches; } ++cnt; jump labelXXX; } P_merge-->P_matchlen = matches; ntbl = P_merge; P_merge = tbl; return ntbl; ]; [ Snarfem ptr eptr tbl but UNUSED wv word nw ; P_getflags = 0; P_csptr = ptr; P_ceptr = eptr; P_and = false; P_buts-->P_matchlen = 0; tbl-->P_matchlen = 0; word = ptr-->0; .labelXXX; if (ptr == eptr) { return Get_Object((but ? but : tbl)); } nw = ptr-->2; if (word == 'all') { P_getflags = 1; if (nw == 'of') { ptr = ptr + 4; } } else if (word == 'but' or 'except') { if (~~Get_Object((but ? but : tbl))) rfalse; but = P_buts; but-->P_matchlen = 0; } else if (word == 'a//' or 'one') { if (~~P_adj) { P_getflags = 2; if (nw == 'of') { ptr = ptr + 4; } } else { P_name = P_oneobj; if (~~Get_Object((but ? but : tbl))) rfalse; if (~~nw) rtrue; } } else { if (word == 'and' or ',//' && nw ~= 'and' or ',//') { P_and = true; if (Get_Object((but ? but : tbl))) jump labelXXX; rfalse; } if (Wt(word,PS_BUZZ_WORD)) { ! no code } else if (word == 'and' or ',//') { ! no code } else if (word == 'of') { if (~~P_getflags) { P_getflags = 4; } } else { wv = Wt(word,PS_ADJECTIVE,P1_ADJECTIVE); if (wv && (~~P_adj)) { P_adj = wv; P_adjn = word; } else if (Wt(word,PS_OBJECT,P1_OBJECT)) { P_name = word; P_oneobj = word; } } } .labelXXX; if (ptr == eptr) jump labelXXX; ptr = ptr + 4; word = nw; jump labelXXX; ]; [ Get_Object tbl vrb=true bits len xbits tlen gcheck tmp UNUSED ; xbits = P_slocbits; tlen = tbl-->P_matchlen; if (P_getflags & 4 == 4) rtrue; if ((~~P_name) && P_adj && Wt(P_adjn,PS_OBJECT,P1_OBJECT)) { P_name = P_adjn; P_adj = 0; } if ((~~P_name) && (~~P_adj) && P_getflags ~= 1 && (~~P_gwimbit)) { if (~~vrb) rfalse; print "There seems to be a noun missing in that sentence!"; new_line; rfalse; } if (P_getflags ~= 1 || (~~P_slocbits)) { P_slocbits = 65535; } P_table = tbl; .labelXXX; if (gcheck) { Global_Check(tbl); ! not popped } else { if (Lit) { give actor ~transparent; Do_SL(location,SOG,SIR); ! not popped give actor transparent; } Do_SL(actor,SH,SC); ! not popped } len = tbl-->P_matchlen - tlen; if (P_getflags & 1 == 1) { ! no code } else if (P_getflags & 2 == 2 && len) { if (len ~= 1) { tbl-->1 = tbl-->random(len); print "(How about the ", (name) tbl-->1, "?)"; new_line; } tbl-->P_matchlen = 1; } else { if (len > 1 || ((~~len) && P_slocbits ~= 65535)) { if (P_slocbits == 65535) { P_slocbits = xbits; tmp = len; tbl-->P_matchlen = tbl-->P_matchlen - len; jump labelXXX; } if (~~len) { len = tmp; } if (player ~= actor) { Cant_Orphan(); ! not popped rfalse; } if (vrb && P_name) { Which_Print(tlen,len,tbl); ! not popped P_aclause = ((tbl == P_prso) ? P_NC1 : P_NC2); P_aadj = P_adj; P_anam = P_name; Orphan(0,0); ! not popped P_oflag = true; } else if (vrb) { print "There seems to be a noun missing in that sentence!"; new_line; } P_name = 0; P_adj = 0; rfalse; } if ((~~len) && gcheck) { if (vrb) { if (Lit) { Obj_Found(not_here_object,tbl); ! not popped P_xnam = P_name; P_xadj = P_adj; P_xadjn = P_adjn; P_name = 0; P_adj = 0; P_adjn = 0; rtrue; } print "It's too dark to see!"; new_line; } P_name = 0; P_adj = 0; rfalse; } if (~~len) { gcheck = true; jump labelXXX; } } P_slocbits = xbits; P_name = 0; P_adj = 0; rtrue; ]; [ Moby_Find list rlist cnt ; P_slocbits = 65535; P_name = P_xnam; P_adj = P_xadj; list-->P_matchlen = 0; rlist = child(Room_Holder); .labelXXX; if (~~rlist) { ! no code } else { Search_List(rlist,list,P_SRCALL); ! not popped rlist = sibling(rlist); jump labelXXX; } cnt = list-->P_matchlen; if (~~cnt) { Do_SL(local_globals,1,1); ! not popped } cnt = list-->P_matchlen; if (~~cnt) { Do_SL(Room_Holder,1,1); ! not popped } cnt = list-->P_matchlen; if (cnt == 1) { P_object = list-->1; } P_name = 0; P_adj = 0; return cnt; ]; [ Which_Print num cnt list obj total ; total = cnt; print "Which"; if (P_oflag || P_merged || P_and) { print " ", (address) P_name; } else if (list == P_prso) { Clause_Print(P_NC1,P_NC1L,false); ! not popped } else { Clause_Print(P_NC2,P_NC2L,false); ! not popped } print " do you mean, "; .labelXXX; ++num; obj = list-->num; print "the ", (name) obj; if (cnt == 2) { if (total ~= 2) { print ","; } print " or "; } else if (cnt > 2) { print ", "; } if (--cnt >= 1) jump labelXXX; "?"; ]; [ Global_Check tbl ptr rmg rmg_len cnt obj obits foo ; ptr = tbl-->P_matchlen; obits = P_slocbits; rmg = location.&contains; if (rmg) { rmg_len = get_prop_len(rmg) - 1; .labelXXX; obj = rmg->cnt; if (This_It_P(obj,tbl)) { Obj_Found(obj,tbl); ! not popped } if (++cnt <= rmg_len) jump labelXXX; } rmg = location.&pseudo; if (rmg) { rmg_len = get_prop_len(rmg) / 4 - 1; cnt = 0; .labelXXX; if (P_name == rmg-->(cnt * 2)) { pseudo.action = rmg-->(cnt * 2 + 1); foo = pseudo.&action - 5; foo-->0 = P_name-->0; foo-->1 = P_name-->1; Obj_Found(pseudo,tbl); ! not popped } else { if (++cnt <= rmg_len) jump labelXXX; } } if (tbl-->P_matchlen ~= ptr) rfalse; P_slocbits = 65535; P_table = tbl; Do_SL(global_objects,1,1); ! not popped P_slocbits = obits; if (tbl-->P_matchlen || action ~= ##LookIn or ##Search or ##Examine) rfalse; return Do_SL(Room_Holder,1,1); ]; [ Do_SL obj bit1 bit2 UNUSED ; if (P_slocbits & (bit1 + bit2) == bit1 + bit2) { return Search_List(obj,P_table,P_SRCALL); } if (P_slocbits & bit1 == bit1) { return Search_List(obj,P_table,P_SRCTOP); } if (P_slocbits & bit2 ~= bit2) rtrue; return Search_List(obj,P_table,P_SRCBOT); ]; [ Search_List obj tbl lvl fls nobj ; if ((obj = child(obj)) == nothing) rfalse; .labelXXX; if (lvl ~= P_SRCBOT && obj.&name && This_It_P(obj,tbl)) { Obj_Found(obj,tbl); ! not popped } if (lvl ~= P_SRCTOP || obj has scope_inside || obj has supporter && (nobj = child(obj)) ~= nothing && (obj has open || obj has transparent)) { fls = Search_List(obj,tbl,((obj has supporter) ? P_SRCALL : ((obj has scope_inside) ? P_SRCALL : P_SRCTOP))); } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; rtrue; ]; [ Obj_Found obj tbl ptr ; ptr = tbl-->P_matchlen; tbl-->(ptr + 1) = obj; tbl-->P_matchlen = ptr + 1; rtrue; ]; [ Take_Check ; if (~~ITake_Check(P_prso,P_syntax->5)) rfalse; return ITake_Check(P_prsi,P_syntax->6); ]; [ ITake_Check tbl bits ptr obj taken ; ptr = tbl-->P_matchlen; if ((~~ptr) || (bits & 2 ~= 2 && bits & 8 ~= 8)) rtrue; .labelXXX; if (--ptr < 0) rtrue; obj = tbl-->(ptr + 1); if (obj == it_object) { obj = P_it_object; } if (ThingInPlayer(obj) || obj == pair_of_hands) jump labelXXX; noun = obj; if (obj has trytakebit) { taken = true; } else if (player ~= cretin) { taken = false; } else if (bits & 8 == 8 && ITake(false) == A_SUCCESS) { taken = false; } else { taken = true; } if (taken && bits & 2 == 2) { if (obj == not_here_object) { print "You don't have that!"; new_line; rfalse; } print "You don't have the ", (name) obj, "."; new_line; rfalse; } if (taken || player ~= cretin) jump labelXXX; print "(Taken)"; new_line; jump labelXXX; ]; [ Many_Check loss tmp word ; if (P_prso-->P_matchlen > 1 && P_syntax->5 & 4 ~= 4) { loss = 1; } else if (P_prsi-->P_matchlen > 1 && P_syntax->6 & 4 ~= 4) { loss = 2; } if (~~loss) rtrue; print "You can't use multiple "; if (loss == 2) { print "in"; } print "direct objects with ~"; tmp = P_itbl-->1; if (~~tmp) { print "tell"; } else if (P_oflag || P_merged) { print (address) tmp-->0; } else { word = tmp->2; Word_Print(word,tmp->3); ! not popped } print "~."; new_line; rfalse; ]; [ ZMemQ itm tbl size=65535 cnt=1 ; if (~~tbl) rfalse; if (size >= 0) { cnt = 0; } else { size = tbl-->0; } .labelXXX; if (itm == tbl-->cnt) rtrue; if (++cnt <= size) jump labelXXX; rfalse; ]; [ ZMemQB itm tbl size cnt ; .labelXXX; if (itm == tbl->cnt) rtrue; if (++cnt <= size) jump labelXXX; rfalse; ]; [ LitP room darkflag=true oldroom islit ; if (Always_lit && player == actor) rtrue; P_gwimbit = light; oldroom = location; location = room; if (darkflag && room has light) { islit = true; } else { P_merge-->P_matchlen = 0; P_table = P_merge; P_slocbits = 65535; if (oldroom == room) { Do_SL(player,1,1); ! not popped if (player ~= actor && actor in room) { Do_SL(actor,1,1); ! not popped } } Do_SL(room,1,1); ! not popped if (P_table-->P_matchlen > 0) { islit = true; } } location = oldroom; P_gwimbit = 0; return islit; ]; [ Prso_Print ptr ; if (~~P_merged) { ptr = P_itbl-->6; if (ptr-->0 ~= 'it') jump labelXXX; } print " ", (name) noun; rtrue; .labelXXX; return Buffer_Print(ptr,P_itbl-->7,false); ]; [ Prsi_Print ptr ; if (~~P_merged) { ptr = P_itbl-->8; if (ptr-->0 ~= 'it') jump labelXXX; } print " ", (name) noun; rtrue; .labelXXX; return Buffer_Print(ptr,P_itbl-->9,false); ]; [ This_It_P obj UNUSED syns UNUSED2 ; if (obj has concealed) rfalse; if (P_name) { syns = obj.&name; if (~~ZMemQ(P_name,syns,get_prop_len(syns) / 2 - 1)) rfalse; } if (P_adj) { syns = obj.&adjectives; if ((~~syns) || (~~ZMemQB(P_adj,syns,get_prop_len(syns) - 1))) rfalse; } if ((~~P_gwimbit) || obj has P_gwimbit) rtrue; rfalse; ]; [ VerboseSub ; verbose = true; superbrief = false; "Maximum verbosity."; ]; [ BriefSub ; verbose = false; superbrief = false; "Brief descriptions."; ]; [ SuperbriefSub ; superbrief = true; "Super-brief descriptions."; ]; [ InventorySub ; if (child(player) ~= nothing) { return PrintCont(player); } "You are empty-handed."; ]; [ QuitSub askfirst=true UNUSED ; ScoreSub(); ! not popped if (askfirst) { print "Do you wish to leave the game? (Y is affirmative): "; if (Ask()) jump labelXXX; } if (~~askfirst) { .labelXXX; @quit; rtrue; } "Ok."; ]; [ RestartSub ; ScoreSub(true); ! not popped print "Do you wish to restart? (Y is affirmative): "; if (~~Ask()) rfalse; print "Restarting."; new_line; @restart; "Failed."; ]; [ RestoreSub ; @restore ?~labelXXX; print "Ok."; new_line; return FirstLook(); .labelXXX; "Failed."; ]; [ SaveSub ; @save ?~labelXXX; "Ok."; .labelXXX; "Failed."; ]; [ ScriptSub ; 0-->8 = 0-->8 | 1; print "Here begins a transcript of interaction with"; new_line; VersionSub(); ! not popped rtrue; ]; [ UnscriptSub ; print "Here ends a transcript of interaction with"; new_line; VersionSub(); ! not popped 0-->8 = 0-->8 & 65534; rtrue; ]; [ VersionSub offset=17 ; print "ZORK I: The Great Underground Empire^Copyright (c) 1981, 1982, 1983 Infocom, Inc. ", "All rights reserved."; new_line; if (0->1 & 8) { print "Licensed to Tandy Corporation."; new_line; } print "ZORK is a registered trademark of Infocom, Inc.^Revision ", 0-->1 & 2047, " / Serial number "; .labelXXX; if (++offset > 23) { ! no code } else { print (char) 0->offset; jump labelXXX; } new_line; rtrue; ]; [ VerifySub ; print "Verifying disk..."; new_line; @verify ?~labelXXX; "The disk is correct."; .labelXXX; new_line; "** Disk Failure **"; ]; [ PlughSub ; "A hollow voice says ~Fool.~"; ]; [ AgainSub obj ; if (prev_verb == ##Go) { return Perform(prev_verb,prev_noun); } if (prev_noun && ((~~parent(prev_noun)) || prev_noun has concealed)) { obj = prev_noun; } if (prev_second && ((~~parent(prev_second)) || prev_second has concealed)) { obj = prev_second; } if (obj && obj ~= pseudo or Room_Holder) { print "You can't see the ", (name) obj, " anymore."; new_line; return A_FAILURE; } return Perform(prev_verb,prev_noun,prev_second); ]; [ WakeSub ; if (noun has animate) { if (noun.strength < 0) { print "The ", (name) noun, " is rudely awakened."; new_line; return CheckStrength(noun); } "He's wide awake, or haven't you noticed..."; } "The ", (name) noun, " isn't sleeping."; ]; [ AnswerSub ; print "Nobody seems to be awaiting your answer."; new_line; P_cont = 0; P_quote_flag = false; rtrue; ]; [ AttackSub ; if (noun hasnt animate) { "I've known strange people, but fighting a ", (name) noun, "?"; } if ((~~second) || second == pair_of_hands) { "Trying to attack a ", (name) noun, " with your bare hands is suicidal."; } if (second notin player) { "You aren't even holding the ", (name) second, "."; } if (second hasnt weapon) { "Trying to attack the ", (name) noun, " with a ", (name) second, " is suicidal."; } return HeroBlow(); ]; [ BackSub ; "Sorry, my memory is poor. Please give a direction."; ]; [ BlowUpSub ; "You can't blast anything by using words."; ]; [ PreBoardSub env ; env = parent(player); if (Null_F()) rtrue; if (noun has vehicle) { if (noun notin location) { print "The ", (name) noun, " must be on the ground to be boarded."; new_line; return A_FAILURE; } if (env hasnt vehicle) rfalse; print "You are already in the ", (name) env, "!"; new_line; return A_FAILURE; } print "You have a theory on how to board a ", (name) noun, ", perhaps?"; new_line; return A_FAILURE; ]; [ BoardSub UNUSED ; print "You are now in the ", (name) noun, "."; new_line; move player to noun; noun.action(M_ENTER); ! not popped rtrue; ]; [ BlowInSub ; return Perform(##Inflate,noun,blast_of_air); ]; [ BrushSub ; "If you wish, but heaven only knows why."; ]; [ BugSub ; "Bug? Not in a flawless program like this! (Cough, cough)."; ]; [ PreBurnSub ; if (second has flame && second has light) rfalse; "With a ", (name) second, "??!?"; ]; [ BurnSub ; if (Null_F()) rfalse; if (noun has flammable) { if (noun in player || player in noun) { Remove_Carefully(noun); ! not popped print "The ", (name) noun, " catches fire. Unfortunately, you were "; if (player in noun) { print "in"; } else { print "holding"; } return JigsUp(" it at the time."); } Remove_Carefully(noun); ! not popped "The ", (name) noun, " catches fire and is consumed."; } "You can't burn a ", (name) noun, "."; ]; [ VomitSub ; "Preposterous!"; ]; [ ClimbDownSub ; return ClimbUpSub(d_to,noun); ]; [ ClimbObjSub ; return ClimbUpSub(u_to,noun); ]; [ ClimbOnSub ; if (noun has vehicle) { Perform(##Board,noun); ! not popped rtrue; } "You can't climb onto the ", (name) noun, "."; ]; [ ClimbUpSub dir=u_to obj pnum paddr UNUSED ; if ((~~obj) && noun) { obj = noun; } paddr = location.&dir; if (paddr) { if (obj) { pnum = get_prop_len(paddr); if (pnum == 2 || (pnum == 4 or 5 or 1 && (~~InRoomContains(noun,paddr->0)))) { print "The ", (name) obj, " do"; if (obj ~= stairs) { print "es"; } print "n't lead "; if (dir == u_to) { print "up"; } else { print "down"; } "ward."; } } Do_Walk(dir); ! not popped rtrue; } if (~~obj) { "You can't go that way."; } if (obj) { pnum = noun.&name; if (ZMemQ('wall',pnum,get_prop_len(pnum))) { "Climbing the walls is to no avail."; } } "You can't do that!"; ]; [ CloseSub ; if (noun hasnt container && noun hasnt door) { "You must tell me how to do that to a ", (name) noun, "."; } if (noun hasnt supporter && noun.capacity) { if (noun has open) { give noun ~open; print "Closed."; new_line; if (~~Lit) rtrue; Lit = LitP(location); if (Lit) rtrue; "It is now pitch black."; } "It is already closed."; } if (noun has door) { if (noun has open) { give noun ~open; "The ", (name) noun, " is now closed."; } "It is already closed."; } "You cannot close that."; ]; [ CommandSub ; if (noun has animate) { "The ", (name) noun, " pays no attention."; } "You cannot talk to that!"; ]; [ CountSub ; if (noun == blessings) { "Well, for one, you are playing Zork..."; } "You have lost your mind."; ]; [ CrossSub ; "You can't cross that!"; ]; [ CurseSub ; if (noun) { if (noun has animate) { "Insults of this nature won't help you."; } "What a loony!"; } "Such language in a high-class establishment like this!"; ]; [ CutSub ; if (noun has animate) { return Perform(##Attack,noun,second); } if (noun has flammable && second has weapon) { if (player in noun) { "Not a bright idea, especially since you're in it."; } Remove_Carefully(noun); ! not popped "Your skillful ", (name) second, "smanship slices the ", (name) noun, " into innumerable slivers which blow away."; } if (second hasnt weapon) { "The ~cutting edge~ of a ", (name) second, " is hardly adequate."; } "Strange concept, cutting the ", (name) noun, "...."; ]; [ DeflateSub ; "Come on, now!"; ]; [ DigSub ; if (~~second) { second = pair_of_hands; } if (second == shovel) { "There's no reason to be digging here."; } if (second has toolbit) { "Digging with the ", (name) second, " is slow and tedious."; } "Digging with a ", (name) second, " is silly."; ]; [ DisembarkSub ; if (parent(player) ~= noun) { print "You're not in that!"; new_line; return A_FAILURE; } if (location has dry_land) { print "You are on your own feet again."; new_line; move player to location; rtrue; } print "You realize that getting out here would be fatal."; new_line; return A_FAILURE; ]; [ DisenchantSub ; "Nothing happens."; ]; [ DrinkSub ; return EatSub(); ]; [ DrinkFromSub ; "How peculiar!"; ]; [ PreDropSub ; if (noun ~= parent(player)) rfalse; Perform(##Disembark,noun); ! not popped rtrue; ]; [ DropSub ; if (~~Idrop()) rfalse; "Dropped."; ]; [ EatSub can_eat can_drink env ; can_eat = ((noun hasnt edible) ? false : true); if (can_eat) { if (noun notin player && parent(noun) notin player) { print "You're not holding that."; new_line; } else if (action == ##Drink) { print "How can you drink that?"; } else { print "Thank you very much. It really hit the spot."; Remove_Carefully(noun); ! not popped } new_line; rtrue; } if (noun has drinkable) { can_drink = true; env = parent(noun); if (noun in global_objects or local_globals || noun == pseudo) { return Hit_Spot(); } if (~~env) { "You don't have any to drink."; } if (env notin player) { "You have to be holding the ", (name) env, " first."; } if (env hasnt open) { "You'll have to open the ", (name) env, " first."; } return Hit_Spot(); } if (can_eat || can_drink) rfalse; "I don't think that the ", (name) noun, " would agree with you."; ]; [ Hit_Spot ; print "Thank you very much. I was rather thirsty (from all this talking, probably)."; new_line; return Remove_Carefully(noun); ]; [ EchoSub ptr len echocnt char_cnt end ; if (P_lexv->1 > 0) { ptr = P_lexv + P_lexv->1 * 4; end = ptr->0; len = end + ptr->1 - 1; .labelXXX; if (++echocnt > 2) { "..."; } char_cnt = ptr->1 - 1; .labelXXX; if (++char_cnt > len) { ! no code } else { print (char) P_inbuf->char_cnt; jump labelXXX; } print " "; jump labelXXX; } "echo echo ..."; ]; [ EnchantSub ; Null_F(); ! not popped return DisenchantSub(); ]; [ Remove_Carefully obj old_lit ; if (obj == P_it_object) { P_it_object = nothing; LastNounPlace = nothing; } old_lit = Lit; remove obj; Lit = LitP(location); if ((~~old_lit) || old_lit == Lit) rtrue; "You are left in the dark..."; ]; [ EnterSub ; return Do_Walk(in_to); ]; [ ExamineSub ; if (noun.text_string) { print (string) noun.text_string; new_line; rtrue; } if (noun has container || noun has door) { return LookInSub(); } "There's nothing special about the ", (name) noun, "."; ]; [ ExitSub ; return Do_Walk(out_to); ]; [ BanishSub ; "What a bizarre concept!"; ]; [ PreFillSub paddr ; if (~~second) { paddr = location.&contains; if (paddr) { if (ZMemQB(water,paddr,get_prop_len(paddr) - 1)) { second = water; rfalse; } "There is nothing to fill it with."; } } if (second == water) rfalse; Perform(##Insert,second,noun); ! not popped rtrue; ]; [ FillSub ; if (~~second) { if (InRoomContains(water,location)) { Perform(##Fill,noun,water); ! not popped rtrue; } if (quantity_of_water in parent(player)) { Perform(##Fill,noun,quantity_of_water); ! not popped rtrue; } "There's nothing to fill it with."; } "You may know how to do that, but I don't."; ]; [ FindSub env ; env = parent(noun); if (noun == pair_of_hands or blast_of_air) { "Within six feet of your head, assuming you haven't left that somewhere."; } if (noun == you) { "You're around here somewhere..."; } if (env == global_objects) { "You find it."; } if (noun in player) { "You have it."; } if (noun in location || InRoomContains(noun,location) || noun == pseudo) { "It's right here."; } if (env has animate) { "The ", (name) env, " has it."; } if (env has supporter) { "It's on the ", (name) env, "."; } if (env has container) { "It's in the ", (name) env, "."; } "Beats me."; ]; [ FollowSub ; "You're nuts!"; ]; [ FrobozzSub ; "The FROBOZZ Corporation created, owns, and operates this dungeon."; ]; [ PreGiveToSub ; if (ThingInPlayer(noun)) rfalse; "That's easy for you to say since you don't even have the ", (name) noun, "."; ]; [ GiveToSub ; if (second hasnt animate) { "You can't give a ", (name) noun, " to a ", (name) second, "!"; } "The ", (name) second, " refuses it politely."; ]; [ HatchSub ; "Bizarre!"; ]; [ HelloSub ; if (noun) { if (noun has animate) { "The ", (name) noun, " bows his head to you in greeting."; } "It's a well known fact that only schizophrenics say ~Hello~ to a ", (name) noun, "."; } print (string) ComplexPickOne(Hello_table); new_line; rtrue; ]; [ ChantSub ; print "The incantation echoes back faintly, but nothing else happens."; new_line; P_quote_flag = false; P_cont = 0; rtrue; ]; [ InflateSub ; "How can you inflate that?"; ]; [ IsOnSub ; if (noun in second) { print "Yes, it is "; if (second has supporter) { print "on"; } else { print "in"; } " the ", (name) second, "."; } "No, it isn't."; ]; [ KickSub ; return HackHack("Kicking the "); ]; [ KissSub ; "I'd sooner kiss a pig."; ]; [ KnockSub ; if (noun has door) { "Nobody's home."; } "Why knock on a ", (name) noun, "?"; ]; [ SwitchOffSub ; if (noun has on) { if (noun hasnt light) { "It is already off."; } give noun ~light; if (Lit) { Lit = LitP(location); } print "The ", (name) noun, " is now off."; new_line; if (Lit) rtrue; print "It is now pitch black."; new_line; rtrue; } "You can't turn that off."; ]; [ SwitchOnSub ; if (noun has on) { if (noun has light) { "It is already on."; } give noun light; print "The ", (name) noun, " is now on."; new_line; if (Lit) rtrue; Lit = LitP(location); new_line; LookSub(); ! not popped rtrue; } "You can't turn that on."; ]; [ LaunchSub ; if (noun has vehicle) { "You can't launch that by saying ~launch~!"; } "That's pretty weird."; ]; [ LeanOnSub ; "Getting tired?"; ]; [ DiveSub prop propsize ; if (noun) { if (noun in location) { if (noun has animate) { "The ", (name) noun, " is too big to jump over."; } return JumpSub(); } "That would be a good trick."; } prop = location.&d_to; if (prop) { propsize = get_prop_len(prop); if (propsize ~= X_STRING) { if (propsize ~= X_VARIABLE) jump labelXXX; @load (prop->1) -> SP; @jz SP ?~labelXXX; } print "This was not a very safe place to try jumping."; new_line; return JigsUp(ComplexPickOne(Dive_msg)); .labelXXX; if (location == Up_a_Tree) { print "In a feat of unaccustomed daring, you manage to land on your feet without killing yourself."; new_line; new_line; Do_Walk(d_to); ! not popped rtrue; } return JumpSub(); } return JumpSub(); ]; [ LeaveSub ; return Do_Walk(out_to); ]; [ ListenSub ; "The ", (name) noun, " makes no sound."; ]; [ LockSub ; "It doesn't seem to work."; ]; [ LookSub ; if (~~Describe_Room(true)) rfalse; return Describe_Objects(true); ]; [ LookBehindSub ; "There is nothing behind the ", (name) noun, "."; ]; [ LookInSub ; if (noun has door) { if (noun has open) { print "The ", (name) noun, " is open, but I can't tell what's beyond it."; } else { print "The ", (name) noun, " is closed."; } new_line; rtrue; } if (noun has container) { if (noun has animate) { "There is nothing special to be seen."; } if (SeeInside(noun)) { if (child(noun) ~= nothing && PrintCont(noun)) rtrue; "The ", (name) noun, " is empty."; } "The ", (name) noun, " is closed."; } "You can't look inside a ", (name) noun, "."; ]; [ LookOnSub ; if (noun has supporter) { Perform(##LookIn,noun); ! not popped rtrue; } "Look on a ", (name) noun, "???"; ]; [ LookUnderSub ; "There is nothing but dust there."; ]; [ LowerSub ; return HackHack("Playing in this way with the "); ]; [ MakeSub ; "You can't do that."; ]; [ MeltSub ; "It's not clear that a ", (name) noun, " can be melted."; ]; [ PreMoveSub ; if (~~ThingInPlayer(noun)) rfalse; "You aren't an accomplished enough juggler."; ]; [ MoveSub ; if (noun has takeable) { "Moving the ", (name) noun, " reveals nothing."; } "You can't move the ", (name) noun, "."; ]; [ MumbleSub ; "You'll have to speak up if you expect me to hear you!"; ]; [ PrePokeSub ; if (Null_F()) rtrue; if (second && second has weapon) rfalse; print "Trying to destroy the ", (name) noun, " with "; if (~~second) { print "your bare hands"; } else { print "a ", (name) second; } " is futile."; ]; [ PokeSub ; if (noun has animate) { Perform(##Attack,noun); ! not popped rtrue; } "Nice try."; ]; [ OdysseusSub ; if (location == Cyclops_Room && cyclops in location && (~~Cyclops_flag)) { QueueInterrupt(I_Cyclops)-->0 = false; Cyclops_flag = true; print "The cyclops, hearing the name of his father's deadly nemesis, flees the room by knocking down the wall on the east of the room."; new_line; Magic_flag = true; give cyclops ~fightbit; return Remove_Carefully(cyclops); } "Wasn't he a sailor?"; ]; [ GreaseSub ; "You probably put spinach in your gas tank, too."; ]; [ OpenSub obj revealmsg ; if (noun has container && noun.capacity) { if (noun has open) { "It is already open."; } give noun open; give noun visited; if (child(noun) == nothing || noun has transparent) { "Opened."; } if ((obj = child(noun)) ~= nothing && sibling(obj) == nothing && obj hasnt visited) { revealmsg = obj.initial; if (revealmsg) { print "The ", (name) noun, " opens."; new_line; print (string) revealmsg; new_line; rtrue; } } print "Opening the ", (name) noun, " reveals "; PrintContents(noun); ! not popped "."; } if (noun has door) { if (noun has open) { "It is already open."; } print "The ", (name) noun, " opens."; new_line; give noun open; rtrue; } "You must tell me how to do that to a ", (name) noun, "."; ]; [ ThrowToSub env ; if (second == set_of_teeth) { env = parent(player); if (env has vehicle) { move noun to parent(env); "Ahoy -- ", (name) noun, " overboard!"; } "You're not in anything!"; } "Huh?"; ]; [ PickSub ; "You can't pick that."; ]; [ PlaySub ; "That's silly!"; ]; [ FixSub ; "This has no effect."; ]; [ PourSub ; if (noun == quantity_of_water) { Remove_Carefully(noun); ! not popped if (second has flame && second has light) { print "The ", (name) second, " is extinguished."; new_line; give second ~light; give second ~flame; rtrue; } "The water spills over the ", (name) second, ", to the floor, and evaporates."; } if (noun == viscous_material) { return Perform(##Insert,viscous_material,second); } "You can't pour that."; ]; [ PraySub ; if (location == Altar) { return Goto(Forest1); } "If you pray enough, your prayers may be answered."; ]; [ PumpUpSub ; if (second && second ~= air_pump) { "Pump it up with a ", (name) second, "?"; } if (air_pump in player) { return Perform(##Inflate,noun,air_pump); } "It's really not clear how."; ]; [ PushSub ; return HackHack("Pushing the "); ]; [ SlideSub ; "You can't push things to that."; ]; [ PrePutOnSub ; if (Null_F()) rfalse; return PreGiveToSub(); ]; [ InsertSub weight ; if (second hasnt open && (second has door || second hasnt container)) { if (second has vehicle) { ! no code } else { "You can't do that."; } } if (second hasnt open) { print "The ", (name) second, " isn't open."; new_line; return SetPronoun(second); } if (second == noun) { "How can you do that?"; } if (noun in second) { "The ", (name) noun, " is already in the ", (name) second, "."; } weight = QueryWeight(second); weight = weight + QueryWeight(noun); weight = weight - second.size; if (weight > second.capacity) { "There's no room."; } if ((~~ThingInPlayer(noun)) && noun has trytakebit) { "You don't have the ", (name) noun, "."; } if ((~~ThingInPlayer(noun)) && (~~ITake())) rtrue; move noun to second; give noun visited; Score_Obj(noun); ! not popped "Done."; ]; [ PutBehindSub ; "That hiding place is too obvious."; ]; [ PutOnSub ; if (second == ground) { Perform(##Drop,noun); ! not popped rtrue; } if (second has supporter) { return InsertSub(); } "There's no good surface on the ", (name) second, "."; ]; [ PutUnderSub ; "You can't do that."; ]; [ RaiseSub ; return LowerSub(); ]; [ MolestSub ; "What a (ahem!) strange idea."; ]; [ PreReadSub ; if (~~Lit) { "It is impossible to read in the dark."; } if ((~~second) || second has transparent) rfalse; "How does one look through a ", (name) second, "?"; ]; [ ReadSub ; if (noun hasnt readable) { "How does one read a ", (name) noun, "?"; } print (string) noun.text_string; new_line; rtrue; ]; [ ReadObjObjSub ; Perform(##Read,noun); ! not popped rtrue; ]; [ RepentSub ; "It could very well be too late!"; ]; [ PreAnswerSub ; print "It is hardly likely that the ", (name) noun, " is interested."; new_line; P_cont = 0; P_quote_flag = false; rtrue; ]; [ RingSub ; "How, exactly, can you ring that?"; ]; [ TouchSub ; return HackHack("Fiddling with the "); ]; [ SaySub who ; if (~~P_cont) { "Say what?"; } P_quote_flag = false; rtrue; who = FindIn(location,animate); if (who) { print "You must address the ", (name) who, " directly."; new_line; P_quote_flag = false; P_cont = 0; return P_cont; } if (P_lexv-->P_cont == 'hello') { P_quote_flag = false; rtrue; } P_quote_flag = false; P_cont = 0; "Talking to yourself is a sign of impending mental collapse."; ]; [ SearchSub ; "You find nothing unusual."; ]; [ SendForSub ; if (noun has animate) { "Why would you send for the ", (name) noun, "?"; } "That doesn't make sends."; ]; [ PreGiveSub ; Perform(##GiveTo,second,noun); ! not popped rtrue; ]; [ GiveSub ; "Foo!"; ]; [ ShakeSub ; if (noun has animate) { "This seems to have no effect."; } if (noun hasnt takeable) { "You can't take it; thus, you can't shake it!"; } if (noun has container) { if (noun has open) { if (child(noun) ~= nothing) { Shake_Loop(); ! not popped print "The contents of the ", (name) noun, " spills "; if (location hasnt dry_land) { print "out and disappears"; } else { print "to the ground"; } "."; } "Shaken."; } if (child(noun) ~= nothing) { "It sounds like there is something inside the ", (name) noun, "."; } "The ", (name) noun, " sounds empty."; } "Shaken."; ]; [ Shake_Loop obj ; .labelXXX; if ((obj = child(noun)) == nothing) rtrue; give obj visited; move obj to ((location == Up_a_Tree) ? Forest_Path : ((location hasnt dry_land) ? pseudo : location)); jump labelXXX; ]; [ JumpSub ; print (string) ComplexPickOne(Hop_msg); new_line; rtrue; ]; [ SmellSub ; "It smells like a ", (name) noun, "."; ]; [ SpinSub ; "You can't spin that!"; ]; [ SprayOnSub ; return SqueezeSub(); ]; [ SqueezeSub ; if (noun has animate) { print "The ", (name) noun, " does not understand this."; } else { print "How singularly useless."; } new_line; rtrue; ]; [ SprayWithSub ; return Perform(##SprayOn,second,noun); ]; [ StabSub weap ; weap = HasWeapon(player); if (weap) { Perform(##Attack,noun,weap); ! not popped rtrue; } "No doubt you propose to stab the ", (name) noun, " with your pinky?"; ]; [ StandSub ; if (parent(player) has vehicle) { Perform(##Disembark,parent(player)); ! not popped rtrue; } "You are already standing, I think."; ]; [ StaySub ; "You will be lost without me!"; ]; [ StrikeSub ; if (noun has animate) { "Since you aren't versed in hand-to-hand combat, you'd better attack the ", (name) noun, " with a weapon."; } Perform(##SwitchOn,noun); ! not popped rtrue; ]; [ SwimSub ; if (InRoomContains(water,location)) { print "Swimming isn't usually allowed in the "; if (noun) { print (name) noun, "."; } else { print "dungeon."; } new_line; rtrue; } if (Null_F()) rfalse; "Go jump in a lake!"; ]; [ SwingSub ; if (~~second) { "Whoosh!"; } return Perform(##Attack,second,noun); ]; [ PreTakeSub ; if (noun in player) { if (noun has clothing) { "You are already wearing it."; } "You already have that!"; } if (parent(noun) has container && parent(noun) hasnt open) { "You can't reach something that's inside a closed container."; } if (second) { if (second == ground) { second = nothing; rfalse; } if (second ~= parent(noun)) { "The ", (name) noun, " isn't in the ", (name) second, "."; } second = nothing; rfalse; } if (noun ~= parent(player)) rfalse; "You're inside of it!"; ]; [ TakeSub ; if (ITake() ~= A_SUCCESS) rfalse; if (noun has clothing) { "You are now wearing the ", (name) noun, "."; } "Taken."; ]; [ TalkToSub ; if (noun has animate) { if (P_cont) { player = noun; location = parent(player); return location; } "The ", (name) noun, " pauses for a moment, perhaps thinking that you should re-read the manual."; } print "You can't talk to the ", (name) noun, "!"; new_line; P_quote_flag = false; P_cont = 0; return A_FAILURE; ]; [ EnterObjSub obj UNUSED ; if (noun has door) { Do_Walk(OtherSide(noun)); ! not popped rtrue; } if ((~~obj) && noun has vehicle) { Perform(##Board,noun); ! not popped rtrue; } if ((~~obj) && noun hasnt takeable) { if (Null_F() || Null_F() || Null_F() || Null_F()) rtrue; "You hit your head against the ", (name) noun, " as you attempt this feat."; } if (obj) { "You can't do that!"; } if (noun in player) { "That would involve quite a contortion!"; } print (string) ComplexPickOne(Yuks_table); new_line; rtrue; ]; [ ThrowSub ; if (~~Idrop()) rfalse; if (second == you) { print "A terrific throw! The ", (name) noun; return JigsUp(" hits you squarely in the head. Normally, this wouldn't do much damage, but by incredible mischance, you fall over backwards trying to duck, and break your neck, justice being swift and merciful in the Great Underground Empire."); } if (second has animate) { "The ", (name) second, " ducks as the ", (name) noun, " flies by and crashes to the ground."; } "Thrown."; ]; [ ThrowOverSub ; "You can't throw anything off of that!"; ]; [ TieToSub ; if (second == player) { "You can't tie anything to yourself."; } "You can't tie the ", (name) noun, " to that."; ]; [ TieWithSub ; "You could certainly never tie it with that!"; ]; [ TempleWordSub ; if (location == Temple) { return Goto(Treasure_Room); } if (location == Treasure_Room) { return Goto(Temple); } "Nothing happens."; ]; [ PreMoveWithSub ; if (noun has turnable) rfalse; "You can't turn that!"; ]; [ MoveWithSub ; "This has no effect."; ]; [ UnlockSub ; return LockSub(); ]; [ UntieSub ; "This cannot be tied, so it cannot be untied!"; ]; [ WaitSub turns=3 ; print "Time passes..."; new_line; .labelXXX; if (--turns < 0) { ! no code } else { if (~~Clocker()) jump labelXXX; } Clock_wait = true; return Clock_wait; ]; [ GoSub prop propsize str obj room ; if (~~P_walk_dir) { Perform(##WalkTo,noun); ! not popped rtrue; } prop = location.&noun; if (prop) { propsize = get_prop_len(prop); if (propsize == X_ROOMBYTE) { return Goto(prop->0); } if (propsize == X_STRING) { print (string) prop-->0; new_line; return A_FAILURE; } if (propsize == X_ROUTINE) { room = (prop-->0)(); if (room) { return Goto(room); } if (Null_F()) rfalse; return A_FAILURE; } if (propsize == X_VARIABLE) { @load (prop->1) -> SP; @jz SP ?labelXXX; return Goto(prop->0); .labelXXX; str = prop-->1; if (str) { print (string) str; new_line; return A_FAILURE; } print "You can't go that way."; new_line; return A_FAILURE; } if (propsize ~= X_DOOR) rfalse; obj = prop->1; if (obj has open) { return Goto(prop->0); } str = prop-->1; if (str) { print (string) str; new_line; return A_FAILURE; } print "The ", (name) obj, " is closed."; new_line; SetPronoun(obj); ! not popped return A_FAILURE; } if ((~~Lit) && 80 > random(100) && location hasnt water_room) { if (Grue_Repellent) { print "There are odd noises in the darkness, and there is no exit in that direction."; new_line; return A_FAILURE; } if (Null_F()) rfalse; return JigsUp("Oh, no! You have walked into the slavering fangs of a lurking grue!"); } print "You can't go that way."; new_line; return A_FAILURE; ]; [ WalkAroundSub ; "Use compass directions for movement."; ]; [ WalkToSub ; if (noun in location || InRoomContains(noun,location)) { "It's here!"; } "You should supply a direction!"; ]; [ WieldSub ; return HackHack("Waving the "); ]; [ WearSub ; if (noun hasnt clothing) { "You can't wear the ", (name) noun, "."; } Perform(##Take,noun); ! not popped rtrue; ]; [ WinSub ; "Naturally!"; ]; [ WindUpSub ; "You cannot wind up a ", (name) noun, "."; ]; [ WishSub ; "With luck, your wish will come true."; ]; [ YellSub ; "Aaaarrrrgggghhhh!"; ]; [ ZorkSub ; "At your service!"; ]; [ FirstLook ; if ((~~Describe_Room()) || superbrief) rfalse; return Describe_Objects(); ]; [ Describe_Room look v text environment ; v = (look ? look : verbose); if (~~Lit) { print "It is pitch black."; if (~~Grue_Repellent) { print " You are likely to be eaten by a grue."; } new_line; Null_F(); ! not popped return 0; } if (location hasnt visited) { give location visited; v = true; } if (location has maze_room) { give location ~visited; } if (location in Room_Holder) { print (name) location; environment = parent(player); if (environment has vehicle) { print ", in the ", (name) environment; } new_line; } if ((~~look) && superbrief) rtrue; environment = parent(player); if (v && location.action(M_LOOK)) rtrue; if (v) { text = location.description; if (text) { print (string) text; new_line; jump labelXXX; } } location.action(M_WAKE); ! not popped .labelXXX; if (location == environment || environment hasnt vehicle) rtrue; environment.action(M_LOOK); ! not popped rtrue; ]; [ Describe_Objects v ; if (Lit) { if (child(location) == nothing) rfalse; v = (v ? v : verbose); return PrintCont(location,v,65535); } "Only bats can see in the dark. And you're not one."; ]; [ DescribeOb obj v level text av ; Desc_object = obj; if ((~~level) && obj.initial2(M_FIGHT_OR_OBJDESC)) rtrue; if (~~level) { if (obj hasnt visited) { text = obj.initial; if (text) jump labelXXX; } text = obj.description; if (text) { .labelXXX; print (string) text; jump labelXXX; } } if (~~level) { print "There is a ", (name) obj, " here"; if (obj has light) { print " (providing light)"; } print "."; } else { print (string) Indents-->level, "A ", (name) obj; if (obj has light) { print " (providing light)"; } else if (obj has clothing) { print " (being worn)"; } } .labelXXX; Null_F(); ! not popped if (~~level) { av = parent(player); if (av && av has vehicle) { print " (outside the ", (name) av, ")"; } } new_line; if ((~~SeeInside(obj)) || child(obj) == nothing) rfalse; return PrintCont(obj,v,level); ]; [ PrintContents obj itm nextitem first=true last it_flag ; if ((itm = child(obj)) == nothing) rfalse; .labelXXX; nextitem = sibling(itm); if (first) { first = false; } else { print ", "; if (~~nextitem) { print "and "; } } print "a ", (name) itm; if ((~~last) && (~~it_flag)) { last = itm; } else { it_flag = true; last = nothing; } itm = nextitem; if (itm) jump labelXXX; if ((~~last) || it_flag) rtrue; SetPronoun(last); ! not popped rtrue; ]; [ PrintCont obj v level itm first av environment text pv inv ; if ((itm = child(obj)) == nothing) rtrue; environment = parent(player); if (environment && environment has vehicle) { ! no code } else { environment = 0; } first = true; av = true; if (player == obj or parent(obj)) { inv = true; jump labelXXX; } .labelXXX; if (~~itm) { ! no code } else { if (itm == environment) { pv = true; } else if (itm == player) { ! no code } else if (itm hasnt concealed && itm hasnt visited) { text = itm.initial; if (text) { if (itm hasnt scenery) { print (string) text; new_line; av = false; } if (SeeInside(itm) && (~~parent(itm).initial2) && (child(itm) ~= nothing && PrintCont(itm,v,0))) { first = false; } } } itm = sibling(itm); jump labelXXX; } .labelXXX; itm = child(obj); .labelXXX; if (~~itm) { if (pv && environment && child(environment) ~= nothing) { ++level; PrintCont(environment,v,level); ! not popped } } else { if (itm == environment or cretin) { ! no code } else if (itm hasnt concealed && (inv || itm has visited || (~~itm.initial))) { if (itm hasnt scenery) { if (first) { if (Firster(obj,level) && level < 0) { level = 0; } ++level; first = false; } if (level < 0) { level = 0; } DescribeOb(itm,v,level); ! not popped } else if (child(itm) ~= nothing && SeeInside(itm)) { ++level; PrintCont(itm,v,level); ! not popped } } itm = sibling(itm); jump labelXXX; } if ((~~first) || (~~av)) rtrue; rfalse; ]; [ Firster obj level ; if (obj == trophy_case) { "Your collection of treasures consists of:"; } if (obj == player) { "You are carrying:"; } if (obj in Room_Holder) rfalse; if (level > 0) { print (string) Indents-->level; } if (obj has supporter) { "Sitting on the ", (name) obj, " is: "; } if (obj has animate) { "The ", (name) obj, " is holding: "; } "The ", (name) obj, " contains:"; ]; [ SeeInside obj ; if (obj has concealed) rfalse; if (obj has transparent || obj has open) rtrue; rfalse; ]; [ ScoreUPD val ; Base_score = Base_score + val; score = score + val; if (score ~= 350 || Won_flag) rtrue; Won_flag = true; give ancient_map ~concealed; give West_of_House ~visited; "An almost inaudible voice whispers in your ear, ~Look to your treasures for the final secret.~"; ]; [ Score_Obj obj val ; val = obj.take_value; if (val <= 0) rfalse; ScoreUPD(val); ! not popped obj.take_value = 0; rtrue; ]; [ Finish ; ScoreSub(); ! not popped @quit; ]; [ Ask ; print ">"; @sread P_inbuf P_lexv; if (P_lexv-->1 ~= 'yes' or 'y//') rfalse; rtrue; ]; [ ITake vb=true num_items UNUSED weight ; if (Dead) { if (~~vb) rfalse; print "Your hand passes through its object."; new_line; rfalse; } if (noun hasnt takeable) { if (~~vb) rfalse; print (string) ComplexPickOne(Yuks_table); new_line; rfalse; } if (Null_F() || (parent(noun) has container && parent(noun) hasnt open)) rfalse; if (parent(noun) notin player) { weight = QueryWeight(noun); if (weight + QueryWeight(player) > Load_max) { if (vb) { print "Your load is too heavy"; if (Load_max < Load_allowed) { print ", especially in light of your condition."; } else { print "."; } new_line; } return A_FAILURE; } } if (action == ##Take) { num_items = CCount(player); if (num_items > Maximum_held) { weight = num_items * Max_held_mult; if (weight > random(100)) { print "You're holding too many things already!"; new_line; rfalse; } } } move noun to player; give noun visited; Null_F(); ! not popped Score_Obj(noun); ! not popped rtrue; ]; [ Idrop ; if (noun notin player && parent(noun) notin player) { print "You're not carrying the ", (name) noun, "."; new_line; rfalse; } if (noun notin player && parent(noun) hasnt open) { print "The ", (name) noun, " is closed."; new_line; rfalse; } move noun to parent(player); rtrue; ]; [ CCount obj cnt x ; if ((x = child(obj)) ~= nothing) { .labelXXX; if (x hasnt clothing) { ++cnt; } if ((x = sibling(x)) ~= nothing) jump labelXXX; } return cnt; ]; [ QueryWeight obj cont wt ; if ((cont = child(obj)) ~= nothing) { .labelXXX; if (obj == actor && cont has clothing) { ++wt; } else { wt = wt + QueryWeight(cont); } if ((cont = sibling(cont)) ~= nothing) jump labelXXX; } return wt + obj.size; ]; [ HackHack str ; if (noun in global_objects && action == ##Lower or ##Raise or ##Wield) { "The ", (name) noun, " isn't here!"; } print (string) str, (name) noun, (string) ComplexPickOne(Ho_hum_table); new_line; rtrue; ]; [ BadVehicle need_vehicle veh ; if (need_vehicle) { print "You can't go there in a ", (name) veh, "."; } else { print "You can't go there without a vehicle."; } new_line; rtrue; ]; [ Goto room v=true lb environment av old_lit ; lb = ((room hasnt dry_land) ? false : true); environment = parent(player); old_lit = Lit; if (environment has vehicle) { av = environment.vtype; } if ((~~lb) && (~~av)) { BadVehicle(av,environment); ! not popped rfalse; } if ((~~lb) && room hasnt av) { BadVehicle(av,environment); ! not popped rfalse; } if (location has dry_land && lb && av && av ~= dry_land && room hasnt av) { BadVehicle(av,environment); ! not popped rfalse; } if (room has rmungbit) { print (string) room.description; new_line; rfalse; } if (lb && location hasnt dry_land && (~~Dead) && environment has vehicle) { print "The ", (name) environment, " comes to a rest on the shore."; new_line; new_line; } if (av) { move environment to room; } else { move player to room; } location = room; Lit = LitP(location); if ((~~old_lit) && (~~Lit) && 80 > random(100)) { if (Grue_Repellent) { print "There are sinister gurgling noises in the darkness all around you!"; new_line; } else { if (Null_F()) rfalse; print "Oh, no! A lurking grue slithered into the "; if (parent(player) has vehicle) { print (name) parent(player); } else { print "room"; } JigsUp(" and devoured you!"); ! not popped rtrue; } } if ((~~Lit) && player == cretin) { print "You have moved into a dark place."; new_line; P_cont = 0; } location.action(M_ENTER); ! not popped Score_Obj(room); ! not popped if (location ~= room) rtrue; if (cretin ~= player) { "The ", (name) player, " leaves the room."; } if (~~v) rtrue; FirstLook(); ! not popped rtrue; ]; [ GoNext tbl room ; room = SearchArray(location,tbl); if (~~room) rfalse; if (Goto(room)) rtrue; return 2; ]; [ SearchArray itm tbl cnt len ; len = tbl-->0; .labelXXX; if (++cnt > len) rfalse; if (tbl-->cnt ~= itm) jump labelXXX; if (cnt == len) rfalse; return tbl-->(cnt + 1); ]; [ Do_Walk dir ; P_walk_dir = dir; return Perform(##Go,dir); ]; [ WordType obj word addr UNUSED ; addr = obj.&name; return ZMemQ(word,addr,get_prop_len(addr) / 2 - 1); ]; [ InRoomContains itm room addr ; addr = room.&contains; if (~~addr) rfalse; return ZMemQB(itm,addr,get_prop_len(addr) - 1); ]; [ FindIn rm attr obj ; obj = child(rm); if (~~obj) rfalse; .labelXXX; if (obj has attr && obj ~= cretin) { return obj; } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; rfalse; ]; [ InRoom obj ; if (obj in location) rtrue; return InRoomContains(obj,location); ]; [ ThingInPlayer itm ; .labelXXX; itm = parent(itm); if (~~itm) rfalse; if (itm ~= player) jump labelXXX; rtrue; ]; [ OtherSide door prop addr ; .labelXXX; prop = get_next_prop(location,prop); if (prop < Low_direction) rfalse; addr = location.∝ if (get_prop_len(addr) ~= 5 || addr->1 ~= door) jump labelXXX; return prop; ]; [ MungeRoom room str ; give room rmungbit; room.description = str; rtrue; ]; [ SetPronoun it ; P_it_object = it; LastNounPlace = location; return LastNounPlace; ]; [ WestHouse_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are standing in an open field west of a white house, with a boarded front door."; if (Won_flag) { print " A secret path leads southwest into the forest."; } new_line; rtrue; ]; [ BehindHouse_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are behind the white house. A path leads into the forest to the east. In one corner of the house there is a small window which is "; if (kitchen_window has open) { print "open."; } else { print "slightly ajar."; } new_line; rtrue; ]; [ OpenOrClose itm open_msg close_msg ; if (action == ##Open) { if (itm has open) { print (string) ComplexPickOne(Dummy_table); } else { print (string) open_msg; give itm open; } new_line; rtrue; } if (action ~= ##Close) rfalse; if (itm has open) { print (string) close_msg; give itm ~open; } else { print (string) ComplexPickOne(Dummy_table); } new_line; rtrue; ]; [ Board_action ; if (action ~= ##Examine or ##Take) rfalse; "The boards are securely fastened."; ]; [ Teeth_action ; if (action ~= ##Brush || noun ~= set_of_teeth) rfalse; if (second == viscous_material && second in player) { return JigsUp("Well, you seem to have been brushing your teeth with some sort of glue. As a result, your mouth gets glued together (with your nose) and you die of respiratory failure."); } if (~~second) { "Dental hygiene is highly recommended, but I'm not sure what you want to brush them with."; } "A nice idea, but with a ", (name) second, "?"; ]; [ Granite_action ; if (location == Temple) { if (action ~= ##Find) rfalse; "The west wall is solid granite here."; } if (location == Treasure_Room) { if (action ~= ##Find) rfalse; "The east wall is solid granite here."; } if (location == Slide_Room) { if (action == ##Read or ##Find) { "It only SAYS ~Granite Wall~."; } "The wall isn't granite."; } "There is no granite wall here."; ]; [ Songbird_action ; if (action == ##Take or ##Find) { "The songbird is not here but is probably nearby."; } if (action == ##Listen) { "You can't hear the songbird now."; } if (action == ##Follow) { "It can't be followed."; } "You can't see any songbird here."; ]; [ House_action ; if (location == Kitchen or Living_Room or Attic) { if (action == ##Find) { "Why not find your brains?"; } if (action ~= ##WalkAround) rfalse; GoNext(In_house); ! not popped rtrue; } if (location ~= East_of_House or West_of_House or North_of_House or South_of_House) { if (action == ##Find) { if (location == Clearing2) { "It seems to be to the west."; } "It was here just a minute ago...."; } "You're not at the house."; } if (action == ##Find) { "It's right here! Are you blind or something?"; } if (action == ##WalkAround) { GoNext(House_around); ! not popped rtrue; } if (action == ##Examine) { "The house is a beautiful colonial house which is painted white. It is clear that the owners must have been extremely wealthy."; } if (action == ##Open or ##EnterObj) { if (location == East_of_House) { if (kitchen_window has open) { return Goto(Kitchen); } print "The window is closed."; new_line; return SetPronoun(kitchen_window); } "I can't see how to get in from here."; } if (action ~= ##Burn) rfalse; "You must be joking."; ]; [ Forest_action ; if (action == ##WalkAround) { return GoNext(Forest_around); } if (action == ##Disembark) { "You will have to specify a direction."; } if (action == ##Find) { "You cannot see the forest for the trees."; } if (action ~= ##Listen) rfalse; "The pines and the hemlocks seem to be murmuring."; ]; [ Mountain_action ; if (action ~= ##ClimbObj or ##ClimbDown or ##ClimbUp) rfalse; "Don't you believe me? The mountains are impassable!"; ]; [ Water_Function av w pi ; if (action == ##Give) rfalse; if (action == ##EnterObj) { print (string) ComplexPickOne(Noswim_table); new_line; rtrue; } if (action == ##Fill) { w = second; action = ##Insert; second = noun; noun = w; pi = false; } else if (noun == water or quantity_of_water) { w = noun; pi = false; } else { w = second; if (w) { pi = true; } } if (w == water) { w = quantity_of_water; if (action == ##Insert or ##Take) { Remove_Carefully(w); ! not popped } } if (pi) { second = w; } else { noun = w; } av = parent(player); if (av hasnt vehicle) { av = 0; } if (action == ##Insert or ##Take && (~~pi)) { if (av && (av == second || ((~~second) && w notin av))) { print "There is now a puddle in the bottom of the ", (name) av, "."; new_line; Remove_Carefully(noun); ! not popped move noun to av; rtrue; } if (second && second ~= glass_bottle) { print "The water leaks out of the ", (name) second, " and evaporates immediately."; new_line; return Remove_Carefully(w); } if (glass_bottle in player) { if (glass_bottle hasnt open) { print "The bottle is closed."; new_line; return SetPronoun(glass_bottle); } if (child(glass_bottle) == nothing) { move quantity_of_water to glass_bottle; "The bottle is now full of water."; } "The water slips through your fingers."; } if (noun in glass_bottle && action == ##Take && (~~second)) { "It's in the bottle. Perhaps you should take that instead."; } "The water slips through your fingers."; } if (pi) { "Nice try."; } if (action == ##GiveTo or ##Drop) { Remove_Carefully(quantity_of_water); ! not popped if (av) { print "There is now a puddle in the bottom of the ", (name) av, "."; new_line; move quantity_of_water to av; rtrue; } print "The water spills to the floor and evaporates immediately."; new_line; return Remove_Carefully(quantity_of_water); } if (action ~= ##Throw) rfalse; print "The water splashes on the walls and evaporates immediately."; new_line; return Remove_Carefully(quantity_of_water); ]; [ Kitchen_Window_action ; if (action == ##Close or ##Open) { Window_munged = true; return OpenOrClose(kitchen_window,"With great effort, you open the window far enough to allow entry.","The window closes (more easily than it opened)."); } if (action == ##Examine && (~~Window_munged)) { "The window is slightly ajar, but not enough to allow entry."; } if (action == ##EnterObj or ##Board or ##Go) { if (location == Kitchen) { Do_Walk(e_to); ! not popped rtrue; } Do_Walk(w_to); ! not popped rtrue; } if (action ~= ##LookIn) rfalse; print "You can see "; if (location == Kitchen) { "a clear area leading towards a forest."; } "what appears to be a kitchen."; ]; [ Ghost_action ; if (action == ##TalkTo) { print "The spirits jeer loudly and ignore you."; new_line; P_cont = 0; return P_cont; } if (action == ##Banish) { "Only the ceremony itself has any effect."; } if (action == ##Poke or ##Attack && noun == number_of_ghosts) { "How can you attack a spirit with material objects?"; } "You seem unable to interact with these spirits."; ]; [ Basket_action ; if (action == ##Raise) { if (Basket_up) { print (string) ComplexPickOne(Dummy_table); new_line; rtrue; } move basket1 to Shaft_Room; move basket2 to Drafty_Room; Basket_up = true; SetPronoun(basket1); ! not popped "The basket is raised to the top of the shaft."; } if (action == ##Lower) { if (~~Basket_up) { print (string) ComplexPickOne(Dummy_table); new_line; rtrue; } move basket1 to Drafty_Room; move basket2 to Shaft_Room; SetPronoun(basket2); ! not popped print "The basket is lowered to the bottom of the shaft."; new_line; Basket_up = false; if (~~Lit) rtrue; Lit = LitP(location); if (Lit) rtrue; print "It is now pitch black."; new_line; rtrue; } if (noun == basket2 || second == basket2) { "The basket is at the other end of the chain."; } if (action ~= ##Take || noun ~= basket1 or basket2) rfalse; "The cage is securely fastened to the iron chain."; ]; [ Bat_action ; if (action == ##TalkTo) { Fweep(6); ! not popped P_cont = 0; return P_cont; } if (action ~= ##Poke or ##Attack or ##Take) rfalse; if (parent(clove_of_garlic) == player or location) { "You can't reach him; he's on the ceiling."; } return Fly_Me(); ]; [ Fly_Me ; Fweep(4); ! not popped new_line; print "The bat grabs you by the scruff of your neck and lifts you away...."; new_line; new_line; Goto(ComplexPickOne(coalmine_rooms),false); ! not popped FirstLook(); ! not popped rtrue; ]; [ Fweep cnt ; .labelXXX; if (--cnt < 1) { ! no code } else { print " Fweep!"; new_line; jump labelXXX; } new_line; rtrue; ]; [ Bell_action ; if (action ~= ##Ring || (location == Hades_action && (~~LLD_flag))) rfalse; "Ding, dong."; ]; [ HotBell_action ; if (action == ##Take) { "The bell is very hot and cannot be taken."; } if (action == ##Touch || (action == ##Ring && second)) { if (second has flammable) { print "The ", (name) second, " burns and is consumed."; new_line; return Remove_Carefully(second); } if (second == pair_of_hands) { "The bell is too hot to touch."; } "The heat from the bell is too intense."; } if (action == ##Pour) { Remove_Carefully(noun); ! not popped print "The water cools the bell and is evaporated."; new_line; Queue(I_XBH,0); ! not popped return I_XBH(); } if (action ~= ##Ring) rfalse; "The bell is too hot to reach."; ]; [ Boarded_Window_action ; if (action == ##Open) { "The windows are boarded and can't be opened."; } if (action ~= ##Poke) rfalse; "You can't break the windows open."; ]; [ Pseudo_Nail_action ; if (action ~= ##Take) rfalse; "The nails, deeply imbedded in the door, cannot be removed."; ]; [ Crack_action ; if (action ~= ##EnterObj) rfalse; "You can't fit through the crack."; ]; [ Kitchen_action rarg ; if (rarg == M_LOOK) { print "You are in the kitchen of the white house. A table seems to have been used recently for the preparation of food. A passage leads to the west and a dark staircase can be seen leading upward. A dark chimney leads down and to the east is a small window which is "; if (kitchen_window has open) { "open."; } "slightly ajar."; } if (rarg ~= M_BEG) rfalse; if (action == ##ClimbUp && noun == stairs) { return Do_Walk(u_to); } if (action ~= ##ClimbUp || noun ~= stairs) rfalse; "There are no stairs leading down."; ]; [ Barrow_action rarg ; if (rarg ~= M_BEG || (action ~= ##Enter && (action ~= ##Go || noun ~= Aragain_Falls or Ladder_Top) && (action ~= ##EnterObj || noun ~= stone_barrow_ob))) rfalse; print "Inside the Barrow^As you enter the barrow, the door closes inexorably behind you. Around you it is dark, but ahead is an enormous cavern, brightly lit. Through its center runs a wide stream. Spanning the stream is a small wooden footbridge, and beyond a path leads into a dark tunnel. Above the bridge, floating in the air, is a large sign. It reads: All ye who stand before this bridge have completed a great and perilous adventure which has tested your wit and courage. You have mastered"; if (~~0->1 & 8) { print " the first part of the ZORK trilogy. Those who pass over this bridge must be prepared to undertake an even greater adventure that will severely test your skill and bravery!^^The ZORK trilogy continues with ~ZORK II: The Wizard of Frobozz~ and is completed in ~ZORK III: The Dungeon Master.~"; new_line; } else { print " ZORK: The Great Underground Empire.^"; new_line; } return QuitSub(false); ]; [ Barrow_Door_action ; if (action ~= ##Close or ##Open) rfalse; "The door is too heavy."; ]; [ EnterBarrow ; if (action ~= ##EnterObj) rfalse; return Do_Walk(w_to); ]; [ Trophy_action ; if (action ~= ##Take || noun ~= trophy_case) rfalse; "The trophy case is securely fastened to the wall."; ]; [ Living_Room_action rarg rugflag UNUSED ; if (rarg == M_LOOK) { print "You are in the living room. There is a doorway to the east"; if (Magic_flag) { print ". To the west is a cyclops-shaped opening in an old wooden door, above which is some strange gothic lettering, "; } else { print ", a wooden door with strange gothic lettering to the west, which appears to be nailed shut, "; } print "a trophy case, "; rugflag = Rug_moved; if (rugflag && trap_door has open) { print "and a rug lying beside an open trap door."; } else if (rugflag) { print "and a closed trap door at your feet."; } else if (trap_door has open) { print "and an open trap door at your feet."; } else { print "and a large oriental rug in the center of the room."; } new_line; rtrue; } if (rarg ~= M_END || (action ~= ##Take && (action ~= ##Insert || second ~= trophy_case))) rfalse; if (noun in trophy_case) { Touch_All(noun); ! not popped } score = Base_score + TrophyValue(); ScoreUPD(0); ! not popped rfalse; ]; [ Touch_All cont obj ; obj = child(cont); .labelXXX; if (~~obj) rtrue; give obj visited; if (child(obj) ~= nothing) { Touch_All(obj); ! not popped } obj = sibling(obj); jump labelXXX; ]; [ TrophyValue case=trophy_case obj tscore ; obj = child(case); .labelXXX; if (~~obj) { return tscore; } tscore = tscore + obj.trophy_value; if (child(obj) ~= nothing) { TrophyValue(obj); ! not popped } obj = sibling(obj); jump labelXXX; ]; [ Trapdoor_action ; if (action == ##Raise) { Perform(##Open,trap_door); ! not popped rtrue; } if (action == ##Close or ##Open && location == Living_Room) { return OpenOrClose(noun,"The door reluctantly opens to reveal a rickety staircase descending into darkness.","The door swings shut and closes."); } if (action == ##LookUnder && location == Living_Room) { if (trap_door has open) { "You see a rickety staircase descending into darkness."; } "It's closed."; } if (location ~= Cellar) rfalse; if (action == ##Unlock or ##Open && trap_door hasnt open) { "The door is locked from above."; } if (action == ##Close && trap_door hasnt open) { give trap_door ~visited; give trap_door ~open; "The door closes and locks."; } if (action ~= ##Close or ##Open) rfalse; print (string) ComplexPickOne(Dummy_table); new_line; rtrue; ]; [ Cellar_action rarg ; if (rarg == M_LOOK) { "You are in a dark and damp cellar with a narrow passageway leading north, and a crawlway to the south. On the west is the bottom of a steep metal ramp which is unclimbable."; } if (rarg ~= M_ENTER || trap_door hasnt open || trap_door has visited) rfalse; give trap_door ~open; give trap_door visited; print "The trap door crashes shut, and you hear someone barring it."; new_line; new_line; rtrue; ]; [ Chimney_action ; if (action ~= ##Examine) rfalse; print "The chimney leads "; if (location == Kitchen) { print "down"; } else { print "up"; } "ward, and looks climbable."; ]; [ UpChimney_action obj ; if ((obj = child(player)) == nothing) { print "Going up empty-handed is a bad idea."; new_line; rfalse; } if ((obj = sibling(obj)) == nothing || sibling(obj) == nothing && brass_lantern in player) { if (trap_door hasnt open) { give trap_door ~visited; return Kitchen; } return Kitchen; } print "You can't get up there with what you're carrying."; new_line; rfalse; ]; [ TrapDoorDown ; if (Rug_moved) { if (trap_door has open) { return Cellar; } print "The trap door is closed."; new_line; SetPronoun(trap_door); ! not popped rfalse; } print "You can't go that way."; new_line; rfalse; ]; [ Rug_action ; if (action == ##Raise) { print "The rug is too heavy to lift"; if (Rug_moved) { "."; } ", but in trying to take it you have noticed an irregularity beneath it."; } if (action == ##Push or ##Move) { if (Rug_moved) { "Having moved the carpet previously, you find it impossible to move it again."; } print "With a great effort, the rug is moved to one side of the room, revealing the dusty cover of a closed trap door."; new_line; give trap_door ~concealed; SetPronoun(trap_door); ! not popped Rug_moved = true; return Rug_moved; } if (action == ##Take) { "The rug is extremely heavy and cannot be carried."; } if (action == ##LookUnder && (~~Rug_moved) && trap_door hasnt open) { "Underneath the rug is a closed trap door. As you drop the corner of the rug, the trap door is once again concealed from view."; } if (action ~= ##ClimbOn) rfalse; if ((~~Rug_moved) && trap_door hasnt open) { "As you sit, you notice an irregularity underneath it. Rather than be uncomfortable, you stand up again."; } "I suppose you think it's a magic carpet?"; ]; [ Axe_action ; if (Troll_flag) rfalse; return TryTakeWeapon(bloody_axe,troll); ]; [ Stiletto_action ; return TryTakeWeapon(stiletto,thief); ]; [ TryTakeWeapon obj villain ; if (villain notin location || action ~= ##Take) rfalse; if (obj in villain) { "The ", (name) villain, " swings it out of your reach."; } print "The ", (name) obj, " seems white-hot. You can't hold on to it."; new_line; rtrue; ]; [ Troll_action rarg ; if (action == ##TalkTo) { print "The troll isn't much of a conversationalist."; new_line; P_cont = 0; return P_cont; } if (rarg == M_BEG) { if (bloody_axe in troll) rfalse; if (bloody_axe in location && Probability(75)) { give bloody_axe scenery; give bloody_axe ~weapon; move bloody_axe to troll; troll.description = "A nasty-looking troll, brandishing a bloody axe, blocks all passages out of the room."; if (troll notin location) rtrue; "The troll, angered and humiliated, recovers his weapon. He appears to have an axe to grind with you."; } if (troll notin location) rfalse; troll.description = "A pathetically babbling troll is here."; print "The troll, disarmed, cowers in terror, pleading for his life in the guttural tongue of the trolls."; new_line; rtrue; } if (rarg == M_ENTER) { if (bloody_axe in troll) { move bloody_axe to location; give bloody_axe ~scenery; give bloody_axe weapon; } Troll_flag = true; return Troll_flag; } if (rarg == M_LOOK) { give troll ~fightbit; if (bloody_axe in troll) { move bloody_axe to location; give bloody_axe ~scenery; give bloody_axe weapon; } troll.description = "An unconscious troll is sprawled on the floor. All passages out of the room are open."; Troll_flag = true; return Troll_flag; } if (rarg == M_WAKE) { if (troll in location) { give troll fightbit; print "The troll stirs, quickly resuming a fighting stance."; new_line; } if (bloody_axe in troll) { troll.description = "A nasty-looking troll, brandishing a bloody axe, blocks all passages out of the room."; } else if (bloody_axe in Troll_Room) { give bloody_axe scenery; give bloody_axe ~weapon; move bloody_axe to troll; troll.description = "A nasty-looking troll, brandishing a bloody axe, blocks all passages out of the room."; } else { troll.description = "A troll is here."; } Troll_flag = false; return Troll_flag; } if (rarg == M_FIGHT_OR_OBJDESC) { if (33 <= random(100)) rfalse; give troll fightbit; P_cont = 0; rtrue; } if (rarg) rfalse; if (action == ##Examine) { print (string) troll.description; new_line; rtrue; } if (action == ##GiveTo or ##Throw && noun && second == troll || action == ##Poke or ##Move or ##Take) { CheckStrength(troll); ! not popped if (action == ##GiveTo or ##Throw) { if (noun == bloody_axe && bloody_axe in player) { print "The troll scratches his head in confusion, then takes the axe."; new_line; give troll fightbit; move bloody_axe to troll; rtrue; } if (noun == troll or bloody_axe) { "You would have to get the ", (name) noun, " first, and that seems unlikely."; } if (action == ##Throw) { print "The troll, who is remarkably coordinated, catches the ", (name) noun; } else { print "The troll, who is not overly proud, graciously accepts the gift"; } if (20 > random(100) && noun == nasty_knife or sword or bloody_axe) { Remove_Carefully(noun); ! not popped print " and eats it hungrily. Poor troll, he dies from an internal hemorrhage and his carcass disappears in a sinister black fog."; new_line; Remove_Carefully(troll); ! not popped troll.action(M_ENTER); ! not popped Troll_flag = true; return Troll_flag; } if (noun == nasty_knife or sword or bloody_axe) { move noun to location; print " and, being for the moment sated, throws it back. Fortunately, the troll has poor control, and the ", (name) noun, " falls to the floor. He does not look pleased."; new_line; give troll fightbit; rtrue; } print " and not having the most discriminating tastes, gleefully eats it."; new_line; return Remove_Carefully(noun); } if (action == ##Move or ##Take) { "The troll spits in your face, grunting ~Better luck next time~ in a rather barbarous accent."; } if (action ~= ##Poke) rfalse; "The troll laughs at your puny gesture."; } if (action == ##Listen) { "Every so often the troll says something, probably uncomplimentary, in his guttural tongue."; } if ((~~Troll_flag) || action ~= ##Hello) rfalse; "Unfortunately, the troll can't hear you."; ]; [ RevealGrating ; if (grating has open || Leaves_moved) rfalse; if (action == ##Take or ##Move) { print "In disturbing the pile of leaves, a grating is revealed."; new_line; } else { print "With the leaves moved, a grating is revealed."; new_line; } give grating ~concealed; Leaves_moved = true; rfalse; ]; [ Leaves_action ; if (action == ##Count) { "There are 69,105 leaves here."; } if (action == ##Burn) { RevealGrating(); ! not popped Remove_Carefully(noun); ! not popped if (noun in location) { "The leaves burn."; } return JigsUp("The leaves burn, and so do you."); } if (action == ##Cut) { print "You rustle the leaves around, making quite a mess."; new_line; RevealGrating(); ! not popped rtrue; } if (action == ##Take or ##Move) { if (action == ##Move) { print "Done."; new_line; } if (Leaves_moved) rfalse; RevealGrating(); ! not popped if (action ~= ##Take) rtrue; rfalse; } if (action ~= ##LookUnder || Leaves_moved) rfalse; "Underneath the pile of leaves is a grating. As you release the leaves, the grating is once again concealed from view."; ]; [ Clearing1Action rarg ; if (rarg == M_ENTER) { if (Leaves_moved) rfalse; give grating concealed; rtrue; } if (rarg ~= M_LOOK) rfalse; print "You are in a clearing, with a forest surrounding you on all sides. A path leads south."; if (grating has open) { new_line; print "There is an open grating, descending into darkness."; } else if (Leaves_moved) { new_line; print "There is a grating securely fastened into the ground."; } new_line; rtrue; ]; [ Grating_Room_action rarg ; if (rarg == M_ENTER) { give grating ~concealed; rtrue; } if (rarg ~= M_LOOK) rfalse; print "You are in a small room near the maze. There are twisty passages in the immediate vicinity."; new_line; if (grating has open) { print "Above you is an open grating with sunlight pouring in."; } else if (Grate_unlocked) { print "Above you is a grating."; } else { print "Above you is a grating locked with a skull-and-crossbones lock."; } new_line; rtrue; ]; [ Grating_action ; if (action == ##Open && second == skeleton_key) { Perform(##Unlock,grating,skeleton_key); ! not popped rtrue; } if (action == ##Lock) { if (location == Grating_Room) { Grate_unlocked = false; "The grate is locked."; } if (location ~= Clearing1) rfalse; "You can't lock it from this side."; } if (action == ##Unlock && noun == grating) { if (location == Grating_Room && second == skeleton_key) { Grate_unlocked = true; "The grate is unlocked."; } if (location == Clearing1 && second == skeleton_key) { "You can't reach the lock from here."; } "Can you unlock a grating with a ", (name) second, "?"; } if (action == ##Pick) { "You can't pick the lock."; } if (action == ##Close or ##Open) { if (Grate_unlocked) { OpenOrClose(grating,((location == Clearing2) ? "The grating opens." : "The grating opens to reveal trees above you."),"The grating is closed."); ! not popped if (grating has open) { if (location ~= Clearing2 && (~~Leaves_moved)) { print "A pile of leaves falls onto your head and to the ground."; new_line; Leaves_moved = true; move pile_of_leaves to location; } give Grating_Room light; rtrue; } give Grating_Room ~light; rtrue; } "The grating is locked."; } if (action ~= ##Insert || second ~= grating) rfalse; if (noun.size > 20) { "It won't fit through the grating."; } move noun to Grating_Room; "The ", (name) noun, " goes through the grating into the darkness below."; ]; [ Down_Maze_action ; print "You won't be able to get back up to the tunnel you are going through when it gets to the next room."; new_line; new_line; if (location == Maze4) { return Maze2; } if (location == Maze7) { return Maze19; } if (location == Maze15) { return Maze13; } if (location ~= Maze12) rfalse; return Maze5; ]; [ Rusty_Knife_action ; if (action == ##Take) { if (sword notin player) rfalse; print "As you touch the rusty knife, your sword gives a single pulse of blinding blue light."; new_line; rfalse; } if (second ~= rusty_knife || action ~= ##Attack && (action ~= ##Swing || noun ~= rusty_knife || (~~second))) rfalse; Remove_Carefully(rusty_knife); ! not popped return JigsUp("As the knife approaches its victim, your mind is submerged by an overmastering will. Slowly, your hand turns, until the rusty blade is an inch from your neck. The knife seems to sing as it savagely slits your throat."); ]; [ Nasty_Knife_action ; if (action ~= ##Take) rfalse; give table ~scenery; rfalse; ]; [ Skeleton_action ; if (action ~= ##Move or ##Touch or ##Take or ##Lower or ##Raise or ##Push or ##Kiss or ##Kick or ##Attack) rfalse; print "A ghost appears in the room and is appalled at your desecration of the remains of a fellow adventurer. He casts a curse on your valuables and banishes them to the Land of the Living Dead. The ghost leaves, muttering obscenities."; new_line; Rob(location,Land_of_the_Dead,100); ! not popped Rob(cretin,Land_of_the_Dead); ! not popped rtrue; ]; [ Torch_action ; if (action == ##Examine) { "The torch is burning."; } if (action == ##Pour && second == torch) { "The water evaporates before it gets close."; } if (action ~= ##SwitchOff || noun hasnt light) rfalse; "You nearly burn your hand trying to extinguish the flame."; ]; [ Mirror_Room_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are in a large square room with tall ceilings. On the south wall is an enormous mirror which fills the entire wall. There are exits on the other three sides of the room."; new_line; if (~~Mirror_broken) rfalse; "Unfortunately, the mirror has been destroyed by your recklessness."; ]; [ Mirror_action opposite_room=Mirror_Room2 item_here item_there nextitem ; if ((~~Mirror_broken) && action == ##Touch) { if (second && second ~= pair_of_hands) { "You feel a faint tingling transmitted through the ", (name) second, "."; } if (location == opposite_room) { opposite_room = Mirror_Room1; } item_here = child(location); item_there = child(opposite_room); .labelXXX; if (~~item_here) { ! no code } else { nextitem = sibling(item_here); move item_here to opposite_room; item_here = nextitem; jump labelXXX; } .labelXXX; if (~~item_there) { ! no code } else { nextitem = sibling(item_there); move item_there to location; item_there = nextitem; jump labelXXX; } Goto(opposite_room,false); ! not popped "There is a rumble from deep within the earth and the room shakes."; } if (action == ##Examine or ##LookIn) { if (Mirror_broken) { print "The mirror is broken into many pieces."; } else { print "There is an ugly person staring back at you."; } new_line; rtrue; } if (action == ##Take) { "The mirror is many times your size. Give up."; } if (action ~= ##Attack or ##Throw or ##Poke) rfalse; if (Mirror_broken) { "Haven't you done enough damage already?"; } Mirror_broken = true; Lucky = false; "You have broken the mirror. I hope you have a seven years' supply of good luck handy."; ]; [ Torch_Room_action rarg ; if (rarg ~= M_LOOK) rfalse; print "This is a large room with a prominent doorway leading to a down staircase. Above you is a large dome. Up around the edge of the dome (20 feet up) is a wooden railing. In the center of the room sits a white marble pedestal."; new_line; if (~~Dome_flag) rfalse; "A piece of rope descends from the railing above, ending some five feet above your head."; ]; [ Dome_Room_action rarg ; if (rarg == M_LOOK) { print "You are at the periphery of a large dome, which forms the ceiling of another room below. Protecting you from a precipitous drop is a wooden railing which circles the dome."; new_line; if (~~Dome_flag) rfalse; "Hanging down from the railing is a rope which ends about ten feet from the floor below."; } if (rarg ~= M_ENTER) rfalse; if (Dead) { print "As you enter the dome you feel a strong pull as if from a wind drawing you over the railing and down."; new_line; move player to Torch_Room; location = Torch_Room; rtrue; } if (action ~= ##Dive) rfalse; return JigsUp("I'm afraid that the leap you attempted has done you in."); ]; [ Hades_action rarg ; if (rarg == M_LOOK) { print "You are outside a large gateway, on which is inscribed^^ Abandon every hope all ye who enter here!^^The gate is open; through it you can see a desolation, with a pile of mangled bodies in one corner. Thousands of voices, lamenting some hideous fate, can be heard."; new_line; if (LLD_flag || Dead) rfalse; "The way through the gate is barred by evil spirits, who jeer at your attempts to pass."; } if (rarg == M_BEG) { if (action == ##Banish) { if (LLD_flag) rfalse; if (brass_bell in player && black_book in player && pair_of_candles in player) { "You must perform the ceremony."; } "You aren't equipped for an exorcism."; } if ((~~LLD_flag) && action == ##Ring && noun == brass_bell) { Exorcism_bell = true; Remove_Carefully(brass_bell); ! not popped SetPronoun(red_hot_bell); ! not popped move red_hot_bell to location; print "The bell suddenly becomes red hot and falls to the ground. The wraiths, as if paralyzed, stop their jeering and slowly turn to face you. On their ashen faces, the expression of a long-forgotten terror takes shape."; new_line; if (pair_of_candles in player) { print "In your confusion, the candles drop to the ground (and they are out)."; new_line; move pair_of_candles to location; give pair_of_candles ~light; QueueInterrupt(I_Candles)-->0 = false; } Queue(I_XB,6)-->0 = true; Queue(I_XBH,20)-->0 = true; rtrue; } if ((~~Exorcism_candle) || action ~= ##Read || noun ~= black_book || LLD_flag) rfalse; print "Each word of the prayer reverberates through the hall in a deafening confusion. As the last word fades, a voice, loud and commanding, speaks: ~Begone, fiends!~ A heart-stopping scream fills the cavern, and the spirits, sensing a greater power, flee through the walls."; new_line; Remove_Carefully(number_of_ghosts); ! not popped LLD_flag = true; QueueInterrupt(I_XC)-->0 = false; rtrue; } if (rarg ~= M_END || (~~Exorcism_bell) || pair_of_candles notin player || pair_of_candles hasnt light || Exorcism_candle) rfalse; Exorcism_candle = true; print "The flames flicker wildly and appear to dance. The earth beneath your feet trembles, and your legs nearly buckle beneath you. The spirits cower at your unearthly power."; new_line; QueueInterrupt(I_XB)-->0 = false; Queue(I_XC,3)-->0 = true; rtrue; ]; [ I_XB ; if ((~~Exorcism_candle) && location == Entrance_to_Hades) { print "The tension of this ceremony is broken, and the wraiths, amused but shaken at your clumsy attempt, resume their hideous jeering."; new_line; } Exorcism_bell = false; return Exorcism_bell; ]; [ I_XC ; Exorcism_candle = false; return I_XB(); ]; [ I_XBH ; Remove_Carefully(red_hot_bell); ! not popped move brass_bell to Entrance_to_Hades; if (location ~= Entrance_to_Hades) rfalse; "The bell appears to have cooled down."; ]; [ Dam_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are standing on the top of the Flood Control Dam #3, which was quite a tourist attraction in times far distant. There are paths to the north, south, and west, and a scramble down."; new_line; if (Low_tide && Dam_open) { print "The water level behind the dam is low: The sluice gates have been opened. Water rushes through the dam and downstream."; new_line; } else if (Dam_open) { print "The sluice gates are open, and water rushes through the dam. The water level behind the dam is still high."; new_line; } else if (Low_tide) { print "The sluice gates are closed. The water level in the reservoir is quite low, but the level is rising quickly."; new_line; } else { print "The sluice gates on the dam are closed. Behind the dam, there can be seen a wide reservoir. Water is pouring over the top of the now abandoned dam."; new_line; } print "There is a control panel here, on which a large metal bolt is mounted. Directly above the bolt is a small green plastic bubble"; if (Gate_flag) { print " which is glowing serenely"; } "."; ]; [ Bolt_action ; if (action == ##MoveWith) { if (second == wrench) { if (Gate_flag) { give Reservoir_South ~visited; if (Dam_open) { Dam_open = false; give Loud_Room ~visited; print "The sluice gates close and water starts to collect behind the dam."; new_line; Queue(I_Res_Fill,8)-->0 = true; Queue(I_Res_Empty,0); ! not popped rtrue; } Dam_open = true; print "The sluice gates open and water pours through the dam."; new_line; Queue(I_Res_Empty,8)-->0 = true; Queue(I_Res_Fill,0); ! not popped rtrue; } "The bolt won't turn with your best effort."; } if (second) { "The bolt won't turn using the ", (name) second, "."; } "You can't with your bare hands."; } if (action == ##Take) { return IntegralMsg(); } if (action ~= ##Grease) rfalse; "Hmm. It appears the tube contained glue, not oil. Turning the bolt won't get any easier...."; ]; [ Bubble_action ; if (action ~= ##Take) rfalse; return IntegralMsg(); ]; [ IntegralMsg ; "It is an integral part of the control panel."; ]; [ I_Res_Fill ; give Reservoir water_room; give Reservoir ~dry_land; give Deep_Canyon ~visited; give Loud_Room ~visited; if (trunk_of_jewels in Reservoir) { give trunk_of_jewels concealed; } Low_tide = false; if (location == Reservoir) { if (parent(player) has vehicle) { "The boat lifts gently out of the mud and is now floating on the reservoir."; } JigsUp("You are lifted up by the rising river! You try to swim, but the currents are too strong. You come closer, closer to the awesome structure of Flood Control Dam #3. The dam beckons to you. The roar of the water nearly deafens you, but you remain conscious as you tumble over the dam toward your certain doom among the rocks at its base."); ! not popped rtrue; } if (location == Deep_Canyon) { "A sound, like that of flowing water, starts to come from below."; } if (location == Loud_Room) { print "All of a sudden, an alarmingly loud roaring sound fills the room. Filled with fear, you scramble away."; new_line; Goto(ComplexPickOne(Near_loudroom)); ! not popped rtrue; } if (location ~= Reservoir_North or Reservoir_South) rtrue; "You notice that the water level has risen to the point that it is impossible to cross."; ]; [ I_Res_Empty ; give Reservoir dry_land; give Reservoir ~water_room; give Deep_Canyon ~visited; give Loud_Room ~visited; give trunk_of_jewels ~concealed; Low_tide = true; if (location == Reservoir && parent(player) has vehicle) { "The water level has dropped to the point at which the boat can no longer stay afloat. It sinks into the mud."; } if (location == Deep_Canyon) { "The roar of rushing water is quieter now."; } if (location ~= Reservoir_North or Reservoir_South) rtrue; "The water level is now quite low here and you could easily cross over to the other side."; ]; [ Button_action ; if (action == ##Read) { "They're greek to you."; } if (action ~= ##Push) rfalse; if (noun == blue_button) { if (~~Leak_sprung) { give leak ~concealed; print "There is a rumbling sound and a stream of water appears to burst from the east wall of the room (apparently, a leak has occurred in a pipe)."; new_line; Leak_sprung = 1; Queue(I_Maint_Room_Leak,65535)-->0 = true; rtrue; } "The blue button appears to be jammed."; } if (noun == red_button) { print "The lights within the room "; if (location has light) { give location ~light; "shut off."; } give location light; "come on."; } if (noun == brown_button) { give Dam_Room ~visited; Gate_flag = false; "Click."; } if (noun ~= yellow_button) rfalse; give Dam_Room ~visited; Gate_flag = true; "Click."; ]; [ Chest_action ; if (action == ##Examine) { "The chests are all empty."; } if (action == ##Insert or ##Open or ##Take) { Remove_Carefully(tool_chests); ! not popped "The chests are so rusty and corroded that they crumble when you touch them."; } if (action ~= ##Open) rfalse; "The chests are already open."; ]; [ I_Maint_Room_Leak in_danger ; in_danger = ((location ~= Maintenance_Room) ? false : true); if (in_danger) { print "The water level here is now ", (string) LeakLevel-->(Leak_sprung / 2); new_line; } ++Leak_sprung; if (Leak_sprung >= 14) { MungeRoom(Maintenance_Room,"The room is full of water and cannot be entered."); ! not popped Queue(I_Maint_Room_Leak,0); ! not popped if (~~in_danger) rtrue; JigsUp("I'm afraid you have done drowned yourself."); ! not popped rtrue; } if (player notin magic_boat || location ~= Maintenance_Room or Dam_Room or Dam_Lobby) rtrue; JigsUp("The rising water carries the boat over the dam, down the river, and over the falls. Tsk, tsk."); ! not popped rtrue; ]; [ Leak_action ; if (Leak_sprung <= 0) rfalse; if (action == ##PutOn or ##Insert && noun == viscous_material) { return FixLeak(); } if (action ~= ##Fix) rfalse; if (second == viscous_material) { return FixLeak(); } return WithTell(second); ]; [ FixLeak ; Leak_sprung = 65535; Queue(I_Maint_Room_Leak,0); ! not popped "By some miracle of Zorkian technology, you have managed to stop the leak in the dam."; ]; [ Glue_action ; if (action ~= ##Grease || second ~= viscous_material && (action ~= ##Insert || noun ~= viscous_material)) rfalse; "The all-purpose gunk isn't a lubricant."; ]; [ Tube_action ; if (action == ##Insert && second == tube) { "The tube refuses to accept anything."; } if (action ~= ##Squeeze) rfalse; if (noun has open && viscous_material in noun) { move viscous_material to player; "The viscous material oozes into your hand."; } if (noun has open) { "The tube is apparently empty."; } "The tube is closed."; ]; [ Dam_Scenery_action ; if (action == ##Close or ##Open) { "Sounds reasonable, but this isn't how."; } if (action ~= ##Fix) rfalse; if (second == pair_of_hands) { "Are you the little Dutch boy, then? Sorry, this is a big dam."; } "With a ", (name) second, "? Do you know how big this dam is? You could only stop a tiny leak with that."; ]; [ WithTell obj ; "With a ", (name) obj, "?"; ]; [ Reservoir_S_action rarg ; if (rarg ~= M_LOOK) rfalse; if (Low_tide && Dam_open) { print "You are in a long room, to the north of which was formerly a lake. However, with the water level lowered, there is merely a wide stream running through the center of the room."; } else if (Dam_open) { print "You are in a long room. To the north is a large lake, too deep to cross. You notice, however, that the water level appears to be dropping at a rapid rate. Before long, it might be possible to cross to the other side from here."; } else if (Low_tide) { print "You are in a long room, to the north of which is a wide area which was formerly a reservoir, but now is merely a stream. You notice, however, that the level of the stream is rising quickly and that before long it will be impossible to cross here."; } else { print "You are in a long room on the south shore of a large lake, far too deep and wide for crossing."; } new_line; "There is a path along the stream to the east or west, a steep pathway climbing southwest along the edge of a chasm, and a path leading into a canyon to the southeast."; ]; [ Reservoir_action rarg ; if (rarg == M_END && parent(player) hasnt vehicle && ((~~Dam_open) && Low_tide)) { "You notice that the water level here is rising rapidly. The currents are also becoming stronger. Staying here seems quite perilous!"; } if (rarg ~= M_LOOK) rfalse; if (Low_tide) { print "You are on what used to be a large lake, but which is now a large mud pile. There are ~shores~ to the north and south."; } else { print "You are on the lake. Beaches can be seen north and south. Upstream a small stream enters the lake through a narrow cleft in the rocks. The dam can be seen downstream."; } new_line; rtrue; ]; [ Reservoir_N_action rarg ; if (rarg ~= M_LOOK) rfalse; if (Low_tide && Dam_open) { print "You are in a large cavernous room, the south of which was formerly a lake. However, with the water level lowered, there is merely a wide stream running through there."; } else if (Dam_open) { print "You are in a large cavernous area. To the south is a wide lake, whose water level appears to be falling rapidly."; } else if (Low_tide) { print "You are in a cavernous area, to the south of which is a very wide stream. The level of the stream is rising rapidly, and it appears that before long it will be impossible to cross to the other side."; } else { print "You are in a large cavernous room, north of a large lake."; } new_line; "There is a slimy stairway leaving the room to the north."; ]; [ Bottle_action filled ; if (action == ##Throw && noun == glass_bottle) { Remove_Carefully(noun); ! not popped filled = true; print "The bottle hits the far wall and shatters."; new_line; } else if (action == ##Poke) { filled = true; Remove_Carefully(noun); ! not popped print "A brilliant maneuver destroys the bottle."; new_line; } else if (action == ##Shake && noun has open && quantity_of_water in noun) { filled = true; } if (filled && quantity_of_water in noun) { print "The water spills to the floor and evaporates."; new_line; Remove_Carefully(quantity_of_water); ! not popped rtrue; } if (~~filled) rfalse; rtrue; ]; [ Cyclops_action wrath ; wrath = Cyclowrath; if (player == cyclops) { if (Cyclops_flag) { "No use talking to him. He's fast asleep."; } if (action == ##Odysseus) { player = cretin; Perform(##Odysseus); ! not popped rtrue; } "The cyclops prefers eating to making conversation."; } if (Cyclops_flag) { if (action == ##Examine) { "The cyclops is sleeping like a baby, albeit a very ugly one."; } if (action ~= ##Attack or ##Kick or ##Wake or ##Poke or ##Burn) rfalse; print "The cyclops yawns and stares at the thing that woke him up."; new_line; Cyclops_flag = false; give cyclops fightbit; if (wrath < 0) { Cyclowrath = 0 - wrath; return Cyclowrath; } Cyclowrath = wrath; return Cyclowrath; } if (action == ##Examine) { "A hungry cyclops is standing at the foot of the stairs."; } if (action == ##GiveTo && second == cyclops) { if (noun == lunch) { if (wrath >= 0) { Remove_Carefully(lunch); ! not popped print "The cyclops says ~Mmm Mmm. I love hot peppers! But oh, could I use a drink. Perhaps I could drink the blood of that thing.~ From the gleam in his eye, it could be surmised that you are ~that thing~."; new_line; Cyclowrath = Least(65535,0 - wrath); } Queue(I_Cyclops,65535)-->0 = true; rtrue; } if (noun == quantity_of_water || (noun == glass_bottle && quantity_of_water in glass_bottle)) { if (wrath < 0) { Remove_Carefully(quantity_of_water); ! not popped move glass_bottle to location; give glass_bottle open; give cyclops ~fightbit; print "The cyclops takes the bottle, checks that it's open, and drinks the water. A moment later, he lets out a yawn that nearly blows you over, and then falls fast asleep (what did you put in that drink, anyway?)."; new_line; Cyclops_flag = true; return Cyclops_flag; } "The cyclops apparently is not thirsty and refuses your generous offer."; } if (noun == clove_of_garlic) { "The cyclops may be hungry, but there is a limit."; } "The cyclops is not so stupid as to eat THAT!"; } if (action == ##Poke or ##Attack or ##Throw) { Queue(I_Cyclops,65535)-->0 = true; if (action == ##Poke) { "~Do you think I'm as stupid as my father was?~, he says, dodging."; } print "The cyclops shrugs but otherwise ignores your pitiful attempt."; new_line; if (action ~= ##Throw) rtrue; move noun to location; rtrue; } if (action == ##Take) { "The cyclops doesn't take kindly to being grabbed."; } if (action == ##TieTo) { "You cannot tie the cyclops, though he is fit to be tied."; } if (action ~= ##Listen) rfalse; "You can hear his stomach rumbling."; ]; [ I_Cyclops ; if (Cyclops_flag || Dead) rtrue; if (location ~= Cyclops_Room) { QueueInterrupt(I_Cyclops)-->0 = false; rtrue; } if (((Cyclowrath < 0) ? (0 - Cyclowrath) : Cyclowrath) > 5) { QueueInterrupt(I_Cyclops)-->0 = false; return JigsUp("The cyclops, tired of all of your games and trickery, grabs you firmly. As he licks his chops, he says ~Mmm. Just like Mom used to make 'em.~ It's nice to be appreciated."); } if (Cyclowrath < 0) { --Cyclowrath; } else { ++Cyclowrath; } if (Cyclops_flag) rfalse; print (string) Cyclo_messages-->(((Cyclowrath < 0) ? (0 - Cyclowrath) : Cyclowrath) - 1); new_line; rtrue; ]; [ Cyclops_Room_action rarg ; if (rarg == M_LOOK) { print "This room has an exit on the northwest, and a staircase leading up."; new_line; if (Cyclops_flag && (~~Magic_flag)) { "The cyclops is sleeping blissfully at the foot of the stairs."; } if (Magic_flag) { "The east wall, previously solid, now has a cyclops-sized opening in it."; } if (~~Cyclowrath) { "A cyclops, who looks prepared to eat horses (much less mere adventurers), blocks the staircase. From his state of health, and the bloodstains on the walls, you gather that he is not very friendly, though he likes people."; } if (Cyclowrath > 0) { "The cyclops is standing in the corner, eyeing you closely. I don't think he likes you very much. He looks extremely hungry, even for a cyclops."; } if (Cyclowrath >= 0) rfalse; "The cyclops, having eaten the hot peppers, appears to be gasping. His enflamed tongue protrudes from his man-sized mouth."; } if (rarg ~= M_ENTER) rfalse; if (~~Cyclowrath) rtrue; QueueInterrupt(I_Cyclops)-->0 = true; rtrue; ]; [ Loud_Room_action rarg v ; if (rarg == M_LOOK) { print "This is a large room with a ceiling which cannot be detected from the ground. There is a narrow passage from east to west and a stone stairway leading upward."; if (Echo_flag || ((~~Dam_open) && Low_tide)) { print " The room is eerie in its quietness."; } else { print " The room is deafeningly loud with an undetermined rushing sound. The sound seems to reverberate from all of the walls, making it difficult even to think."; } new_line; rtrue; } if (rarg == M_END && Dam_open && (~~Low_tide)) { print "It is unbearably loud here, with an ear-splitting roar seeming to come from all around you. There is a pounding in your head which won't stop. With a tremendous effort, you scramble out of the room."; new_line; new_line; Goto(ComplexPickOne(Near_loudroom)); ! not popped rfalse; } if (rarg ~= M_ENTER || Echo_flag || ((~~Dam_open) && Low_tide) || (Dam_open && (~~Low_tide))) rfalse; FirstLook(); ! not popped if (P_cont) { print "The rest of your commands have been lost in the noise."; new_line; P_cont = 0; } .labelXXX; new_line; print ">"; @sread P_inbuf P_lexv; if (~~P_lexv->1) { print "I beg your pardon?"; new_line; jump labelXXX; } v = P_lexv-->1; if (v == 'go' or 'walk' or 'run') { v = P_lexv-->3; } else if (v == 'say') { v = P_lexv-->5; } if (v == 'save') { SaveSub(); ! not popped jump labelXXX; } if (v == 'restore') { RestoreSub(); ! not popped jump labelXXX; } if (v == 'q//' or 'quit') { QuitSub(); ! not popped jump labelXXX; } if (v == 'w//' or 'west') { return Goto(Round_Room); } if (v == 'e//' or 'east') { return Goto(Damp_Cave); } if (v == 'u//' or 'up') { return Goto(Deep_Canyon); } if (v == 'bug') { print "That's only your opinion."; new_line; jump labelXXX; } if (v == 'echo') { Echo_flag = true; give platinum_bar ~sacred; print "The acoustics of the room change subtly."; new_line; new_line; rtrue; } EchoSub(); ! not popped jump labelXXX; ]; [ Deep_Canyon_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are on the south edge of a deep canyon. Passages lead off to the east, northwest and southwest. A stairway leads down."; if (Dam_open && (~~Low_tide)) { print " You can hear a loud roaring sound, like that of rushing water, from below."; } else { if ((~~Dam_open) && Low_tide) { new_line; rtrue; } print " You can hear the sound of flowing water from below."; } new_line; rtrue; ]; [ Thief_vs_Adventurer here robbed robbed_player found_anything ; if ((~~Dead) && location == Treasure_Room) rfalse; if (~~Thief_here) { if ((~~Dead) && (~~here) && 30 > random(100)) { if (stiletto in thief) { give thief ~concealed; print "Someone carrying a large bag is casually leaning against one of the walls here. He does not speak, but it is clear from his aspect that the bag will be taken only over his dead body."; new_line; Thief_here = true; rtrue; } if (stiletto notin player) rfalse; move stiletto to thief; give stiletto scenery; give thief ~concealed; print "You feel a light finger-touch, and turning, notice a grinning figure holding a large bag in one hand and a stiletto in the other."; Thief_here = true; rtrue; } if (here && thief has fightbit && (~~TimeToRetreat(thief))) { print "Your opponent, determining discretion to be the better part of valor, decides to terminate this little contretemps. With a rueful nod of his head, he steps backward into the gloom and disappears."; new_line; give thief concealed; give thief ~fightbit; RetreiveStiletto(); ! not popped rtrue; } if (here && thief has fightbit && 90 > random(100)) rfalse; if (here && 30 > random(100)) { print "The holder of the large bag just left, looking disgusted. Fortunately, he took nothing."; new_line; give thief concealed; RetreiveStiletto(); ! not popped rtrue; } if (70 > random(100) || Dead) rfalse; if (Rob(location,thief,100)) { robbed = true; } else if (Rob(player,thief)) { robbed = true; robbed_player = true; } Thief_here = true; if (robbed && (~~here)) { print "A seedy-looking individual with a large bag just wandered through the room. On the way through, he quietly abstracted some valuables from the room and from your possession, mumbling something about ~Doing unto others before...~"; new_line; RobYouBlind(); ! not popped rfalse; } if (here) { RetreiveStiletto(); ! not popped if (robbed) { print "The thief just left, still carrying his large bag. You may not have noticed that he "; if (robbed_player) { print "robbed you blind first."; } else { print "appropriated the valuables in the room."; } new_line; RobYouBlind(); ! not popped } else { print "The thief, finding nothing of value, left disgusted."; new_line; } give thief concealed; here = 0; rtrue; } "A ~lean and hungry~ gentleman just wandered through, carrying a large bag. Finding nothing of value, he left disgruntled."; } if ((~~here) || 30 <= random(100)) rfalse; found_anything = Rob(location,thief,100); robbed = (found_anything ? found_anything : (Rob(player,thief))); if (robbed) { print "The thief just left, still carrying his large bag. You may not have noticed that he robbed you blind first."; new_line; RobYouBlind(); ! not popped } else { print "The thief, finding nothing of value, left disgusted."; new_line; } give thief concealed; here = 0; RetreiveStiletto(); ! not popped rfalse; ]; [ RobYouBlind old_lit ; old_lit = Lit; Lit = LitP(location); if (Lit || (~~old_lit)) rtrue; "The thief seems to have left you in the dark."; ]; [ HackTreasures itm ; RetreiveStiletto(); ! not popped give thief concealed; itm = child(Treasure_Room); .labelXXX; if (~~itm) rtrue; give itm ~concealed; itm = sibling(itm); jump labelXXX; ]; [ ThiefDies room obj nextitem dropped ; obj = child(thief); .labelXXX; if (~~obj) { return dropped; } nextitem = sibling(obj); if (obj == stiletto or large_bag) { ! no code } else if (obj.trophy_value > 0) { move obj to room; dropped = true; if (obj == jeweled_egg) { Egg_solve = true; give jeweled_egg open; } } obj = nextitem; jump labelXXX; ]; [ RobMaze room itm nextitem ; itm = child(room); .labelXXX; if (~~itm) rfalse; nextitem = sibling(itm); if (itm has takeable && itm hasnt concealed && 40 > random(100)) { print "You hear, off in the distance, someone saying ~My, I wonder what this fine ", (name) itm, " is doing here.~"; new_line; if (~~Probability(60)) rtrue; move itm to thief; give itm visited; give itm concealed; rtrue; } itm = nextitem; jump labelXXX; ]; [ Thief_action rarg deadflag obj UNUSED ; if (action == ##TalkTo) { print "The thief is a strong, silent type."; new_line; P_cont = 0; return P_cont; } if (~~rarg) { if (action == ##Hello && thief.description == Thief_out_desc) { "The thief, being temporarily incapacitated, is unable to acknowledge your greeting with his usual graciousness."; } if (noun == nasty_knife && action == ##Throw && thief hasnt fightbit) { if (Probability(10)) { print "You evidently frightened the robber, though you didn't hit him. He flees"; if ((obj = child(thief)) ~= nothing) { EmptyThiefBag(thief,location); ! not popped print ", but the contents of his bag fall on the floor."; } else { print "."; } new_line; give thief concealed; rtrue; } print "You missed. The thief makes no attempt to take the knife, though it would be a fine addition to the collection in his bag. He does seem angered by your attempt."; new_line; give thief fightbit; rtrue; } if (action == ##GiveTo or ##Throw && noun && noun ~= thief && second == thief) { if (thief.strength < 0) { thief.strength = 0 - thief.strength; QueueInterrupt(I_Thief)-->0 = true; RetreiveStiletto(); ! not popped thief.description = Thief_desc; print "Your proposed victim suddenly recovers consciousness."; new_line; } move noun to thief; if (noun.trophy_value > 0) { Thief_engrossed = true; "The thief is taken aback by your unexpected generosity, but accepts the ", (name) noun, " and stops to admire its beauty."; } "The thief places the ", (name) noun, " in his bag and thanks you politely."; } if (action == ##Take) { "Once you got him, what would you do with him?"; } if (action == ##LookIn or ##Examine) { "The thief is a slippery character with beady eyes that flit back and forth. He carries, along with an unmistakable arrogance, a large bag over his shoulder and a vicious stiletto, whose blade is aimed menacingly in your direction. I'd watch out if I were you."; } if (action ~= ##Listen) rfalse; "The thief says nothing, as you have not been formally introduced."; } if (rarg == M_BEG) { if (stiletto in thief || stiletto notin parent(thief)) rfalse; move stiletto to thief; give stiletto scenery; if (thief notin location) rtrue; print "The robber, somewhat surprised at this turn of events, nimbly retrieves his stiletto."; new_line; rtrue; } if (rarg == M_ENTER) { move stiletto to location; give stiletto ~scenery; obj = ThiefDies(location); if (location == Treasure_Room) { obj = child(location); .labelXXX; if (~~obj) { print "The chalice is now safe to take."; new_line; jump labelXXX; } if (obj ~= chalice or thief or cretin) { give obj ~concealed; if (~~deadflag) { deadflag = 1; print "As the thief dies, the power of his magic decreases, and his treasures reappear:"; new_line; } print " A ", (name) obj; if (child(obj) ~= nothing && SeeInside(obj)) { print ", with "; PrintContents(obj); ! not popped } new_line; } obj = sibling(obj); jump labelXXX; } if (obj) { print "His booty remains."; new_line; } .labelXXX; QueueInterrupt(I_Thief)-->0 = false; rtrue; } if (rarg == M_FIGHT_OR_OBJDESC) { if ((~~Thief_here) || thief has concealed || 20 <= random(100)) rfalse; give thief fightbit; P_cont = 0; rtrue; } if (rarg == M_LOOK) { QueueInterrupt(I_Thief)-->0 = false; give thief ~fightbit; move stiletto to location; give stiletto ~scenery; thief.description = Thief_out_desc; rtrue; } if (rarg ~= M_WAKE) rfalse; if (parent(thief) == location) { give thief fightbit; print "The robber revives, briefly feigning continued unconsciousness, and, when he sees his moment, scrambles away from you."; new_line; } QueueInterrupt(I_Thief)-->0 = true; thief.description = Thief_desc; return RetreiveStiletto(); ]; [ Thief_Bag_action ; if (action == ##Take) { if (thief.description == Thief_out_desc) { "Sadly for you, the robber collapsed on top of the bag. Trying to take it would wake him."; } "The bag will be taken over his dead body."; } if (action == ##Insert && second == large_bag) { "It would be a good trick."; } if (action == ##Close or ##Open) { "Getting close enough would be a good trick."; } if (action ~= ##LookIn or ##Examine) rfalse; "The bag is underneath the thief, so one can't say what, if anything, is inside."; ]; [ EmptyThiefBag thief room itm nextitem ; if ((itm = child(thief)) == nothing) rfalse; .labelXXX; if (~~itm) rtrue; nextitem = sibling(itm); give itm ~concealed; move itm to room; itm = nextitem; jump labelXXX; ]; [ Chalice_action ; if (action == ##Take) { if (noun notin Treasure_Room || thief notin Treasure_Room || thief hasnt fightbit || thief has concealed || thief.description == Thief_out_desc) rfalse; "You'd be stabbed in the back first."; } if (action == ##Insert && second == chalice) { "You can't. It's not a very good chalice, is it?"; } return Pedestal_action(); ]; [ Treasure_Room_action rarg thief_here UNUSED ; if (rarg ~= M_ENTER || QueueInterrupt(I_Thief)-->0 ~= true || Dead) rfalse; thief_here = ((thief notin location) ? true : false); if (thief_here) { print "You hear a scream of anguish as you violate the robber's hideaway. Using passages unknown to you, he rushes to its defense."; new_line; move thief to location; give thief fightbit; give thief ~concealed; } else { give thief fightbit; } return ThiefInTreasure(); ]; [ ThiefInTreasure obj nextitem ; obj = child(location); if (obj && sibling(obj) ~= nothing) { print "The thief gestures mysteriously, and the treasures in the room suddenly vanish."; new_line; new_line; } .labelXXX; if (~~obj) rtrue; if (obj ~= chalice or thief) { give obj concealed; } obj = sibling(obj); jump labelXXX; ]; [ Door_action ; if (action == ##Open) { "The door cannot be opened."; } if (action == ##Burn) { "You cannot burn this door."; } if (action == ##Poke) { "You can't seem to damage the door."; } if (action ~= ##LookBehind) rfalse; "It won't open."; ]; [ Dead_Bodies_action ; if (action == ##Take) { "A force keeps you from taking the bodies."; } if (action ~= ##Burn or ##Poke) rfalse; return JigsUp("The voice of the guardian of the dungeon booms out from the darkness, ~Your disrespect costs you your life!~ and places your head on a sharp pole."); ]; [ Book_action ; if (action == ##Open) { "The book is already open to page 569."; } if (action == ##Close) { "As hard as you try, the book cannot be closed."; } if (action == ##MoveWith || (action == ##ReadObjObj && second == number_ob && P_number ~= 569)) { "Beside page 569, there is only one other page with any legible printing on it. Most of it is unreadable, but the subject seems to be the banishment of evil. Apparently, certain noises, lights, and prayers are efficacious in this regard."; } if (action ~= ##Burn) rfalse; Remove_Carefully(noun); ! not popped return JigsUp("A booming voice says ~Wrong, cretin!~ and you notice that you have turned into a pile of dust. How, I can't imagine."); ]; [ Painting_action ; if (action ~= ##Poke) rfalse; noun.trophy_value = 0; noun.description = "There is a worthless piece of canvas here."; "Congratulations! Unlike the other vandals, who merely stole the artist's masterpieces, you have destroyed one."; ]; [ Lamp_action ; if (action == ##Throw) { print "The lamp has smashed into the floor, and the light has gone out."; new_line; QueueInterrupt(I_Lantern)-->0 = false; Remove_Carefully(brass_lantern); ! not popped move broken_lantern to location; rtrue; } if (action == ##SwitchOn) { if (brass_lantern has rmungbit) { "A burned-out lamp won't light."; } QueueInterrupt(I_Lantern)-->0 = true; rfalse; } if (action == ##SwitchOff) { if (brass_lantern has rmungbit) { "The lamp has already burned out."; } QueueInterrupt(I_Lantern)-->0 = false; rfalse; } if (action ~= ##Examine) rfalse; print "The lamp "; if (brass_lantern has rmungbit) { print "has burned out."; } else if (brass_lantern has light) { print "is on."; } else { print "is turned off."; } new_line; rtrue; ]; [ Mailbox_action ; if (action ~= ##Take || noun ~= small_mailbox) rfalse; "It is securely anchored."; ]; [ Match_action mleft ; if (action == ##Burn or ##SwitchOn && noun == matchbook) { if (Matches_count > 0) { --Matches_count; } if (Matches_count <= 0) { "I'm afraid that you have run out of matches."; } if (location == Drafty_Room or Timber_Room) { "This room is drafty, and the match goes out instantly."; } give matchbook flame; give matchbook light; Queue(I_Match,2)-->0 = true; print "One of the matches starts to burn."; new_line; if (Lit) rtrue; Lit = true; LookSub(); ! not popped rtrue; } if (action == ##SwitchOff && matchbook has flame) { print "The match is out."; new_line; give matchbook ~flame; give matchbook ~light; Lit = LitP(location); if (~~Lit) { print "It's pitch black in here!"; new_line; } Queue(I_Match,0); ! not popped rtrue; } if (action == ##Open or ##Count) { print "You have "; mleft = Matches_count - 1; if (mleft <= 0) { print "no"; } else { print mleft; } print " match"; if (mleft ~= 1) { print "es."; } else { print "."; } new_line; rtrue; } if (action ~= ##Examine) rfalse; if (matchbook has light) { print "The match is burning."; } else { print "The matchbook isn't very interesting, except for what's written on it."; } new_line; rtrue; ]; [ I_Match ; print "The match has gone out."; new_line; give matchbook ~flame; give matchbook ~light; Lit = LitP(location); rtrue; ]; [ I_Lantern len msg_table ; msg_table = Lamp_table; len = msg_table-->0; Queue(I_Lantern,len)-->0 = true; GoDark(brass_lantern,msg_table,len); ! not popped if (~~len) rfalse; Lamp_table = msg_table + 4; return Lamp_table; ]; [ I_Candles len msg_table ; msg_table = Candle_table; give pair_of_candles visited; len = msg_table-->0; Queue(I_Candles,len)-->0 = true; GoDark(pair_of_candles,msg_table,len); ! not popped if (~~len) rfalse; Candle_table = msg_table + 4; return Candle_table; ]; [ GoDark light_src msg_table time_left ; if (~~time_left) { give light_src ~light; give light_src rmungbit; } if ((~~ThingInPlayer(light_src)) && light_src notin location) rfalse; if (~~time_left) { "You'd better have more light than from the ", (name) light_src, "."; } print (string) msg_table-->1; new_line; rtrue; ]; [ Least x y ; if (x < y) { return x; } return y; ]; [ Candle_action ; if (pair_of_candles hasnt visited) { QueueInterrupt(I_Candles)-->0 = true; } if (pair_of_candles == second) rfalse; if (action == ##Burn or ##SwitchOn) { if (pair_of_candles has rmungbit) { "Alas, there's not much left of the candles. Certainly not enough to burn."; } if (~~second) { if (matchbook has flame) { print "(with the match)"; new_line; Perform(##SwitchOn,pair_of_candles,matchbook); ! not popped rtrue; } print "You should say what to light them with."; new_line; return 2; } if (second == matchbook && matchbook has light) { print "The candles are "; if (pair_of_candles has light) { "already lit."; } give pair_of_candles light; print "lit."; new_line; QueueInterrupt(I_Candles)-->0 = true; rtrue; } if (second == torch) { if (pair_of_candles has light) { "You realize, just in time, that the candles are already lighted."; } print "The heat from the torch is so intense that the candles are vaporized."; new_line; return Remove_Carefully(pair_of_candles); } "You have to light them with something that's burning, you know."; } if (action == ##Count) { "Let's see, how many objects in a pair? Don't tell me, I'll get it."; } if (action == ##SwitchOff) { QueueInterrupt(I_Candles)-->0 = false; if (pair_of_candles has light) { print "The flame is extinguished."; give pair_of_candles ~light; Lit = LitP(location); if (~~Lit) { print " It's really dark in here...."; } new_line; rtrue; } "The candles are not lighted."; } if (action == ##Insert && second has flammable) { "That wouldn't be smart."; } if (action ~= ##Examine) rfalse; print "The candles are "; if (pair_of_candles has light) { print "burning."; } else { print "out."; } new_line; rtrue; ]; [ Cave_Wind_action rarg ; if (rarg ~= M_END || pair_of_candles notin player || (~~Probability(50)) || pair_of_candles hasnt light) rfalse; QueueInterrupt(I_Candles)-->0 = false; give pair_of_candles ~light; print "A gust of wind blows out your candles!"; new_line; Lit = LitP(location); if (Lit) rfalse; "It is now completely dark."; ]; [ Sword_action villainnear ; if (action == ##Take && player == cretin) { Queue(I_Sword,65535)-->0 = true; rfalse; } if (action ~= ##Examine) rfalse; villainnear = sword.trophy_value; if (villainnear == 1) { "Your sword is glowing with a faint blue glow."; } if (villainnear ~= 2) rfalse; "Your sword is glowing very brightly."; ]; [ Gas_Room_action rarg burn_flag UNUSED ; if (rarg ~= M_END) rfalse; if (rarg == M_END && action == ##Burn or ##SwitchOn && noun == pair_of_candles or torch or matchbook) { burn_flag = true; } if ((~~ThingInPlayer(pair_of_candles)) || pair_of_candles hasnt light && ((~~ThingInPlayer(torch)) || torch hasnt light) && ((~~ThingInPlayer(matchbook)) || matchbook hasnt light)) rfalse; if (burn_flag) { print "How sad for an aspiring adventurer to light a ", (name) noun, " in a room which reeks of gas. Fortunately, there is justice in the world."; new_line; } else { print "Oh dear. It appears that the smell coming from this room was coal gas. I would have thought twice about carrying flaming objects in here."; new_line; } return JigsUp("^ ** BOOOOOOOOOOOM **"); ]; [ BatInitial UNUSED ; if (parent(clove_of_garlic) == player or location) { "In the corner of the room on the ceiling is a large vampire bat who is obviously deranged and holding his nose."; } "A large vampire bat, hanging from the ceiling, swoops down at you!"; ]; [ Bat_Room_action rarg ; if (rarg == M_LOOK) { "You are in a small room which has doors only to the east and south."; } if (rarg ~= M_ENTER || Dead || parent(clove_of_garlic) == player or location) rfalse; LookSub(); ! not popped return Fly_Me(); ]; [ Machine_Room_action rarg ; if (rarg ~= M_LOOK) rfalse; print "This is a large, cold room whose sole exit is to the north. In one corner there is a machine which is reminiscent of a clothes dryer. On its face is a switch which is labelled ~START~. The switch does not appear to be manipulable by any human hand (unless the fingers are about 1/16 by 1/4 inch). On the front of the machine is a large lid, which is "; if (machine has open) { print "open."; } else { print "closed."; } new_line; rtrue; ]; [ Machine_action ; if (action == ##Take) { "It is far too large to carry."; } if (action == ##Open) { if (machine has open) { print (string) ComplexPickOne(Dummy_table); new_line; rtrue; } if (child(machine) ~= nothing) { print "The lid opens, revealing "; PrintContents(machine); ! not popped print "."; new_line; give machine open; rtrue; } print "The lid opens."; new_line; give machine open; rtrue; } if (action == ##Close) { if (machine has open) { print "The lid closes."; new_line; give machine ~open; rtrue; } print (string) ComplexPickOne(Dummy_table); new_line; rtrue; } if (action ~= ##SwitchOn) rfalse; if (~~second) { "It's not clear how to turn it on with your bare hands."; } Perform(##MoveWith,switch,second); ! not popped rtrue; ]; [ Switch_action obj ; if (action ~= ##MoveWith) rfalse; if (second == screwdriver) { if (machine has open) { "The machine doesn't seem to want to do anything."; } print "The machine comes to life (figuratively) with a dazzling display of colored lights and bizarre noises. After a few moments, the excitement abates."; new_line; if (pile_of_coal in machine) { Remove_Carefully(pile_of_coal); ! not popped move huge_diamond to machine; rtrue; } .labelXXX; if ((obj = child(machine)) ~= nothing) { Remove_Carefully(obj); ! not popped jump labelXXX; } move vitreous_slag to machine; rtrue; } if (~~second) { "You can't turn it with your hands..."; } "It seems that a ", (name) second, " won't do."; ]; [ Slag_action ; Remove_Carefully(vitreous_slag); ! not popped "The slag was rather insubstantial, and crumbles into dust at your touch."; ]; [ Drafty_Room_action rarg itm ; if (rarg ~= M_BEG) rfalse; itm = child(player); Empty_handed = true; .labelXXX; if (~~itm) { ! no code } else if (QueryWeight(itm) > 4) { Empty_handed = false; } else { itm = sibling(itm); jump labelXXX; } if (location ~= Drafty_Room || (~~Lit)) rfalse; ScoreUPD(Light_shaft); ! not popped Light_shaft = 0; rfalse; ]; [ Altar_action rarg ; if (rarg ~= M_BEG) rfalse; Coffin_held = ((gold_coffin notin player) ? true : false); rfalse; ]; [ Beach_action rarg ; if (rarg ~= M_END) rfalse; if (magic_boat in player) { Deflated = false; return Deflated; } Deflated = true; return Deflated; ]; [ Sceptre_action ; if (action ~= ##Raise or ##Wield) rfalse; if (location == Aragain_Falls or End_of_Rainbow) { if (~~Rainbow_flag) { give pot_of_gold ~concealed; print "Suddenly, the rainbow appears to become solid and, I venture, walkable (I think the giveaway was the stairs and bannister)."; new_line; if (location == End_of_Rainbow && pot_of_gold in End_of_Rainbow) { print "A shimmering pot of gold appears at the end of the rainbow."; new_line; } Rainbow_flag = true; return Rainbow_flag; } Rob(On_the_Rainbow,surrounding_wall); ! not popped print "The rainbow seems to have become somewhat run-of-the-mill."; new_line; Rainbow_flag = false; return Rainbow_flag; } if (location == On_the_Rainbow) { Rainbow_flag = false; return JigsUp("The structural integrity of the rainbow is severely compromised, leaving you hanging in mid-air, supported only by water vapor. Bye."); } "A dazzling display of color briefly emanates from the sceptre."; ]; [ Falls_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are at the top of Aragain Falls, an enormous waterfall with a drop of about 450 feet. The only path here is on the north end."; new_line; if (Rainbow_flag) { print "A solid rainbow spans the falls."; } else { print "A beautiful rainbow can be seen over the falls and to the west."; } new_line; rtrue; ]; [ Rainbow_action ; if (action == ##EnterObj or ##Cross) { if (location == Canyon_View) { "From here?!?"; } if (Rainbow_flag) { if (location == Aragain_Falls) { return Goto(End_of_Rainbow); } if (location == End_of_Rainbow) { return Goto(Aragain_Falls); } "You'll have to say which way..."; } "Can you walk on water vapor?"; } if (action ~= ##LookUnder) rfalse; "The Frigid River flows under the rainbow."; ]; [ Punctured_Boat_action ; if (action == ##PutOn or ##Insert && noun == viscous_material) { return RepairBoat(); } if (action == ##Fill or ##Inflate) { "No chance. Some moron punctured it."; } if (action ~= ##Fix) rfalse; if (second == viscous_material) { return RepairBoat(); } return WithTell(second); ]; [ RepairBoat ; print "Well done. The boat is repaired."; new_line; move pile_of_plastic to parent(punctured_boat); return Remove_Carefully(punctured_boat); ]; [ River_action ; if (action == ##Insert) { if (second ~= river) rfalse; if (noun == you) { return JigsUp("You splash around for a while, fighting the current, then you drown."); } if (noun == magic_boat) { "You should get in the boat then launch it."; } if (noun has flammable) { Remove_Carefully(noun); ! not popped "The ", (name) noun, " floats for a moment, then sinks."; } Remove_Carefully(noun); ! not popped "The ", (name) noun, " splashes into the water and is gone forever."; } if (action ~= ##EnterObj or ##Dive) rfalse; "A look before leaping reveals that the river is wide and dangerous, with swift currents and large, half-hidden rocks. You decide to forgo your swim."; ]; [ I_River room ; if (location ~= Frigid_River4 or Frigid_River3 or Frigid_River2 or Frigid_River5 or Frigid_River1) { QueueInterrupt(I_River)-->0 = false; rtrue; } room = SearchArray(location,River_next); if (room) { print "The flow of the river carries you downstream."; new_line; new_line; Goto(room); ! not popped Queue(I_River,SearchArray(location,River_speeds))-->0 = true; rtrue; } return JigsUp("Unfortunately, the magic boat doesn't provide protection from the rocks and boulders one meets at the bottom of waterfalls. Including this one."); ]; [ Boat_action rarg body_of_water ; if (rarg == M_ENTER or M_END or M_LOOK) rfalse; if (rarg == M_BEG) { if (action == ##Go) { if (noun == Coal_Mine4 or Shore or Aragain_Falls || (location == Reservoir && noun == Frigid_River1 or On_the_Rainbow) || (location == Stream && noun == On_the_Rainbow)) rfalse; "Read the label for the boat's instructions."; } if (action == ##Launch) { if (location == Frigid_River4 or Frigid_River3 or Frigid_River2 or Frigid_River5 or Reservoir or Stream) { print "You are on the "; if (location == Reservoir) { print "reservoir"; } else if (location == Stream) { print "stream"; } else { print "river"; } ", or have you forgotten?"; } body_of_water = GoNext(Near_water); if (body_of_water == 1) { Queue(I_River,SearchArray(location,River_speeds))-->0 = true; rtrue; } if (body_of_water == 2) rtrue; "You can't launch it here."; } if (action == ##Drop && noun has weapon || (action == ##Insert && noun has weapon && second == magic_boat) || (action == ##Poke or ##Attack && second has weapon)) { Remove_Carefully(magic_boat); ! not popped move punctured_boat to location; Rob(magic_boat,location); ! not popped move player to location; print "It seems that the "; if (action == ##Insert or ##Drop) { print (name) noun; } else { print (name) second; } print " didn't agree with the boat, as evidenced by the loud hissing noise issuing therefrom. With a pathetic sputter, the boat deflates, leaving you without."; new_line; if (location hasnt water_room) rtrue; new_line; if (location == Reservoir or Stream) { JigsUp("Another pathetic sputter, this time from you, heralds your drowning."); ! not popped rtrue; } JigsUp("In other words, fighting the fierce currents of the Frigid River. You manage to hold your own for a bit, but then you are carried over a waterfall and into some nasty rocks. Ouch!"); ! not popped rtrue; } if (action ~= ##Launch) rfalse; "You're not in the boat!"; } if (action == ##Board) { if (sceptre notin player && nasty_knife notin player && sword notin player && rusty_knife notin player && bloody_axe notin player && stiletto notin player) rfalse; print "Oops! Something sharp seems to have slipped and punctured the boat. The boat deflates to the sounds of hissing, sputtering, and cursing."; new_line; Remove_Carefully(magic_boat); ! not popped move punctured_boat to location; SetPronoun(punctured_boat); ! not popped rtrue; } if (action == ##Fill or ##Inflate) { "Inflating it further would probably burst it."; } if (action ~= ##Deflate) rfalse; if (parent(player) == magic_boat) { "You can't deflate the boat while you're in it."; } if (magic_boat notin location) { "The boat must be on the ground to be deflated."; } print "The boat deflates."; new_line; Deflated = true; Remove_Carefully(magic_boat); ! not popped move pile_of_plastic to location; return SetPronoun(pile_of_plastic); ]; [ BlowUpRaft ; return Perform(##Inflate,noun,blast_of_air); ]; [ Plastic_action ; if (action ~= ##Fill or ##Inflate) rfalse; if (pile_of_plastic notin location) { "The boat must be on the ground to be inflated."; } if (second == air_pump) { print "The boat inflates and appears seaworthy."; new_line; if (tan_label hasnt visited) { print "A tan label is lying inside the boat."; new_line; } Deflated = false; Remove_Carefully(pile_of_plastic); ! not popped move magic_boat to location; return SetPronoun(magic_boat); } if (second == blast_of_air) { "You don't have enough lung power to inflate it."; } "With a ", (name) second, "? Surely you jest!"; ]; [ River2Action rarg ; if (rarg ~= M_END || red_buoy notin player || (~~Buoy_flag)) rfalse; print "You notice something funny about the feel of the buoy."; new_line; Buoy_flag = false; return Buoy_flag; ]; [ SandFunction ; if (action ~= ##Dig || second ~= shovel) rfalse; ++Beach_dig; if (Beach_dig > 3) { Beach_dig = 65535; if (scarab in location) { give scarab concealed; } return JigsUp("The hole collapses, smothering you."); } if (Beach_dig == 3) { if (scarab hasnt concealed) rfalse; print "You can see a scarab here in the sand."; new_line; SetPronoun(scarab); ! not popped give scarab ~concealed; rtrue; } print (string) Bdigs-->Beach_dig; new_line; rtrue; ]; [ Tree_action rarg itm ; if (rarg == M_LOOK) { print "You are about 10 feet above the ground nestled among some large branches. The nearest branch above you is above your reach."; new_line; if ((itm = child(Forest_Path)) == nothing || sibling(itm) == nothing) rfalse; print "On the ground below you can see: "; PrintContents(Forest_Path); ! not popped "."; } if (rarg == M_BEG) { if (action == ##ClimbDown && noun == tree) { return Do_Walk(d_to); } if (action == ##ClimbObj or ##ClimbUp && noun == tree) { return Do_Walk(u_to); } if (action ~= ##Drop) rfalse; if (~~Idrop()) rtrue; if (noun == birds_nest && jeweled_egg in birds_nest) { print "The nest falls to the ground, and the egg spills out of it, seriously damaged."; new_line; Remove_Carefully(jeweled_egg); ! not popped move broken_egg to Forest_Path; rtrue; } if (noun == jeweled_egg) { print "The egg falls to the ground and springs open, seriously damaged."; move jeweled_egg to Forest_Path; BreakEgg(); ! not popped new_line; rtrue; } if (noun ~= player or tree) { move noun to Forest_Path; "The ", (name) noun, " falls to the ground."; } if (action ~= ##Dive) rfalse; return JigsUp("That was just a bit too far down."); } if (rarg ~= M_ENTER) rfalse; Queue(I_Songbird,65535)-->0 = true; rtrue; ]; [ Egg_action ; if (action == ##Poke or ##Open && noun == jeweled_egg) { if (noun has open) { "The egg is already open."; } if (~~second) { "You have neither the tools nor the expertise."; } if (second == pair_of_hands) { "I doubt you could do that without damaging it."; } if (second has weapon || second has toolbit || action == ##Poke) { print "The egg is now open, but the clumsiness of your attempt has seriously compromised its esthetic appeal."; BreakEgg(); ! not popped new_line; rtrue; } if (noun has fightbit) { "Not to say that using the ", (name) second, " isn't original too..."; } print "The concept of using a ", (name) second, " is certainly original."; new_line; give noun fightbit; rtrue; } if (action == ##Hatch or ##ClimbOn) { print "There is a noticeable crunch from beneath you, and inspection reveals that the egg is lying open, badly damaged."; BreakEgg(); ! not popped new_line; rtrue; } if (action ~= ##Throw or ##Poke or ##Open) rfalse; if (action == ##Throw) { move noun to location; } print "Your rather indelicate handling of the egg has caused it some damage, although you have succeeded in opening it."; BreakEgg(); ! not popped new_line; rtrue; ]; [ BreakEgg UNUSED ; if (golden_canary in jeweled_egg) { print " ", (string) broken_canary.initial; } else { Remove_Carefully(broken_canary); ! not popped } move broken_egg to parent(jeweled_egg); Remove_Carefully(jeweled_egg); ! not popped rtrue; ]; [ Canary_action ; if (action ~= ##WindUp) rfalse; if (noun == golden_canary) { if ((~~Sing_song) && ForestRoom()) { print "The canary chirps, slightly off-key, an aria from a forgotten opera. From out of the greenery flies a lovely songbird. It perches on a limb just over your head and opens its beak to sing. As it does so a beautiful brass bauble drops from its mouth, bounces off the top of your head, and lands glimmering in the grass. As the canary winds down, the songbird flies away."; new_line; Sing_song = true; move brass_bauble to ((location == Up_a_Tree) ? Forest_Path : location); rtrue; } "The canary chirps blithely, if somewhat tinnily, for a short time."; } "There is an unpleasant grinding noise from inside the canary."; ]; [ ForestRoom ; if (location == Forest1 or Forest2 or Forest4 or Forest_Path or Up_a_Tree) rtrue; rfalse; ]; [ I_Songbird ; if (~~ForestRoom()) { QueueInterrupt(I_Songbird)-->0 = false; rfalse; } if (15 <= random(100)) rfalse; "You hear in the distance the chirping of a song bird."; ]; [ Forest_action rarg ; if (rarg == M_ENTER) { Queue(I_Songbird,65535)-->0 = true; rtrue; } if (rarg ~= M_BEG || action ~= ##ClimbUp or ##ClimbObj || noun ~= tree) rfalse; return Do_Walk(u_to); ]; [ Cliff_action ; if (action ~= ##ClimbObj or ##ClimbDown or ##ClimbUp) rfalse; "The cliff is too steep for climbing."; ]; [ Cliff2Action ; if (action == ##Dive || (action == ##Insert && noun == you)) { "That would be very unwise. Perhaps even fatal."; } if (second ~= cliff || action ~= ##ThrowOver or ##Insert) rfalse; print "The ", (name) noun, " tumbles into the river and is seen no more."; new_line; return Remove_Carefully(noun); ]; [ Rope_action env ; if (location ~= Dome_Room) { Dome_flag = false; if (action ~= ##TieTo) rfalse; "You can't tie the rope to that."; } if (action == ##TieTo) { if (second ~= wooden_railing) rfalse; if (Dome_flag) { "The rope is already tied to it."; } print "The rope drops over the side and comes within ten feet of the floor."; new_line; Dome_flag = true; give rope scenery; env = parent(rope); if (env && env in Room_Holder) rtrue; move rope to location; rtrue; } if (action == ##ClimbDown && noun == rope && Dome_flag) { return Do_Walk(d_to); } if (action == ##TieWith && rope == second) { if (noun has animate) { if (noun.strength < 0) { print "Your attempt to tie up the ", (name) noun, " awakens him."; return CheckStrength(noun); } "The ", (name) noun, " struggles and you cannot tie him up."; } "Why would you tie up a ", (name) noun, "?"; } if (action == ##Untie) { if (Dome_flag) { Dome_flag = false; give rope ~scenery; "The rope is now untied."; } "It is not tied to anything."; } if (action == ##Drop && location == Dome_Room && (~~Dome_flag)) { move rope to Torch_Room; "The rope drops gently to the floor below."; } if (action ~= ##Take || (~~Dome_flag)) rfalse; "The rope is tied to the railing."; ]; [ UntieFrom ; if (noun == rope && Dome_flag && second == wooden_railing) { return Perform(##Untie,noun); } "It's not attached to that!"; ]; [ Chute_action ; if (action ~= ##ClimbDown or ##ClimbUp or ##EnterObj && action == ##ClimbObj || (action == ##Insert && noun == you)) { if (location == Cellar) { Do_Walk(w_to); ! not popped rtrue; } print "You tumble down the slide...."; new_line; return Goto(Cellar); } if (action ~= ##Insert) rfalse; return SlideFunction(noun); ]; [ SlideFunction obj ; if (obj has takeable) { print "The ", (name) obj, " falls into the slide and is gone."; new_line; if (obj == quantity_of_water) { return Remove_Carefully(obj); } move obj to Cellar; rtrue; } print (string) ComplexPickOne(Yuks_table); new_line; rtrue; ]; [ Sack_action ; if (action ~= ##Smell || lunch notin noun) rfalse; "It smells of hot peppers."; ]; [ Spirit_actions rarg UNUSED ; if (action == ##Go) { if (location ~= Timber_Room || noun ~= Aragain_Falls) rfalse; "You cannot enter in your condition."; } if (action == ##Superbrief or ##Verbose or ##Brief or ##Save or ##Again or ##Version or ##Restart or ##Quit or ##Restore) rfalse; if (action == ##Wake or ##Poke or ##Attack or ##Swing) { "All such attacks are vain in your condition."; } if (action == ##Eat or ##Close or ##Open or ##Deflate or ##Inflate or ##Drink or ##TieTo or ##Burn or ##MoveWith or ##Touch or ##Untie) { "Even such an action is beyond your capabilities."; } if (action == ##Wait) { "Might as well. You've got an eternity."; } if (action == ##SwitchOn) { "You need no light to guide you."; } if (action == ##Score) { "You're dead! How can you think of your score?"; } if (action == ##Take) { "Your hand passes through its object."; } if (action == ##Inventory or ##Throw or ##Drop) { "You have no possessions."; } if (action == ##Diagnose) { "You are dead."; } if (action == ##Look) { print "The room looks strange and unearthly"; if (child(location) == nothing) { print "."; } else { print " and objects appear indistinct."; } new_line; if (location hasnt light) { print "Although there is no light, the room seems dimly illuminated."; new_line; } new_line; rfalse; } if (action == ##Pray) { if (location == Altar) { give brass_lantern ~concealed; player.action = 0; Assigned_but_unused = false; Always_lit = false; Dead = false; if (troll in Troll_Room) { Troll_flag = false; } print "From the distance the sound of a lone trumpet is heard. The room becomes very bright and you feel disembodied. In a moment, the brightness fades and you find yourself rising as if from a long sleep, deep in the woods. In the distance you can faintly hear a songbird and the sounds of the forest."; new_line; new_line; return Goto(Forest1); } "Your prayers are not heard."; } print "You can't even do that."; new_line; P_cont = 0; return 2; ]; [ Pseudo_Lake_action ; if (Low_tide) { "There's not much lake left...."; } if (action == ##Cross) { "It's too wide to cross."; } if (action ~= ##EnterObj) rfalse; "You can't swim in this lake."; ]; [ Pseudo_Stream_action ; if (action == ##EnterObj or ##Swim) { "You can't swim in the stream."; } if (action ~= ##Cross) rfalse; "The other side is a sheer rock cliff."; ]; [ Pseudo_Chasm_action ; if (action == ##Dive || (action == ##Insert && noun == you)) { "You look before leaping, and realize that you would never survive."; } if (action == ##Cross) { "It's too far to jump, and there's no bridge."; } if (action ~= ##ThrowOver or ##Insert || second ~= pseudo) rfalse; print "The ", (name) noun, " drops out of sight into the chasm."; new_line; return Remove_Carefully(noun); ]; [ Pseudo_Dome_action ; if (action ~= ##Kiss) rfalse; "No."; ]; [ Pseudo_Gate_action ; if (action == ##EnterObj) { Do_Walk(in_to); ! not popped rtrue; } "The gate is protected by an invisible force. It makes your teeth ache to touch it."; ]; [ Pseudo_Door_action ; if (action == ##Close or ##Open) { "The door won't budge."; } if (action ~= ##EnterObj) rfalse; return Do_Walk(s_to); ]; [ Pseudo_Paint_action ; if (action ~= ##Poke) rfalse; "Some paint chips away, revealing more paint."; ]; [ Pseudo_Gas_action ; if (action == ##BlowIn) { "There is too much gas to blow away."; } if (action ~= ##Smell) rfalse; "It smells like coal gas in here."; ]; [ DoFight len cnt res o oo out ; .labelXXX; cnt = 0; .labelXXX; ++cnt; if (cnt == len) { res = 1; } else { oo = Villains-->cnt; o = oo-->0; if (o hasnt fightbit) { jump labelXXX; } if (o.action(M_BEG)) { jump labelXXX; } res = VillainBlow(oo,out); if (~~res) { res = 0; } else { if (res ~= 2) jump labelXXX; out = 1 + random(3); jump labelXXX; } } if ((~~res) || (~~out)) rtrue; @dec out; if (out) jump labelXXX; rtrue; ]; [ Remark remark_tbl defender weap len cnt text ; len = remark_tbl-->0; .labelXXX; if (++cnt > len) { ! no code } else { text = remark_tbl-->cnt; if (text == 0) { print (name) weap; jump labelXXX; } if (text == 1) { print (name) defender; jump labelXXX; } print (string) text; jump labelXXX; } new_line; rtrue; ]; [ FightStrength adjust=1 str ; str = 2 + score / (Max_score / (7 - 2)); if (adjust) { return str + player.strength; } return str; ]; [ VillainStrength oo villain od tmp ; villain = oo-->0; od = villain.strength; if (od >= 0) { if (villain == thief && Thief_engrossed) { if (od > 2) { od = 2; } Thief_engrossed = false; } if (second && second has weapon && oo-->1 == second) { tmp = od - oo-->2; if (tmp < 1) { tmp = 1; } od = tmp; } } return od; ]; [ HasWeapon who obj ; obj = child(who); if (~~obj) rfalse; .labelXXX; if (obj == stiletto or bloody_axe or sword or nasty_knife or rusty_knife) { return obj; } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; rfalse; ]; [ VillainBlow oo out villain v_msgs p_weapon v_str p_str unused_flag o_p_str tbl result n_weapon ; villain = oo-->0; v_msgs = oo-->4; give player ~staggered; if (villain has staggered) { print "The ", (name) villain, " slowly regains his feet."; new_line; give villain ~staggered; rtrue; } v_str = VillainStrength(oo); unused_flag = 1; p_str = FightStrength(); if (p_str <= 0) rtrue; o_p_str = FightStrength(0); p_weapon = HasWeapon(player); if (p_str < 0) { result = 3; } else { if (p_str == 1) { if (v_str > 2) { v_str = 3; } tbl = Def1_res-->(v_str - 1); } else if (p_str == 2) { if (v_str > 3) { v_str = 4; } tbl = Def2_res-->(v_str - 1); } else if (p_str > 2) { v_str = v_str - p_str; if (v_str < 65535) { v_str = 65534; } else if (v_str > 1) { v_str = 2; } tbl = Def3_res-->(v_str + 2); } result = tbl-->(random(9) - 1); if (out) { if (result == 6) { result = 8; } else { result = 9; } } if (result == 6 && p_weapon && Probability(25)) { result = 7; } Remark(PickOne(v_msgs-->(result - 1)),player,p_weapon); ! not popped } if (result ~= 1) { if (result == 8) { ! no code } else if (result == 2) { ! no code } else if (result == 3 or 9) { p_str = 0; } else if (result == 4) { --p_str; if (p_str < 0) { p_str = 0; } if (Load_max > 50) { Load_max = Load_max - 10; } } else if (result == 5) { p_str = p_str - 2; if (p_str < 0) { p_str = 0; } if (Load_max > 50) { Load_max = Load_max - 20; } } else if (result == 6) { give player staggered; } else { if (result == 7) { ! no code } move p_weapon to location; n_weapon = HasWeapon(player); if (n_weapon) { print "Fortunately, you still have a ", (name) n_weapon, "."; new_line; } } } return WinnerResult(p_str,result,o_p_str); ]; [ HeroBlow oo villain nohesitate dweapon att def cnt oa od tbl res UNUSED len ; len = Villains-->0; .labelXXX; ++cnt; if (cnt == len) { ! no code } else { oo = Villains-->cnt; if (oo-->0 ~= noun) jump labelXXX; } give noun fightbit; if (player has staggered) { print "You are still recovering from that last blow, so your attack is ineffective."; new_line; give player ~staggered; rtrue; } att = FightStrength(); if (att < 1) { att = 1; } oa = att; villain = oo-->0; def = VillainStrength(oo); od = true; if (~~od) { if (noun == player) { return JigsUp("Well, you really did it that time. Is suicide painless?"); } "Attacking the ", (name) villain, " is pointless."; } dweapon = HasWeapon(villain); if ((~~dweapon) || def < 0) { print "The "; if (~~dweapon) { print "unarmed"; } else { print "unconscious"; } print " ", (name) villain, " cannot defend himself: He dies."; new_line; res = 3; } else { if (def == 1) { if (att > 2) { att = 3; } tbl = Def1_res-->(att - 1); } else if (def == 2) { if (att > 3) { att = 4; } tbl = Def2_res-->(att - 1); } else if (def > 2) { att = att - def; if (att < 65535) { att = 65534; } else if (att > 1) { att = 2; } tbl = Def3_res-->(att + 2); } res = tbl-->(random(9) - 1); if (nohesitate) { if (res == 6) { res = 8; } else { res = 9; } } if (res == 6 && dweapon && 25 > random(100)) { res = 7; } Remark(PickOne(Hero_melee-->(res - 1)),noun,second); ! not popped } if (res ~= 1) { if (res == 8) { ! no code } else if (res == 2) { def = 0 - def; } else if (res == 3 or 9) { def = 0; } else if (res == 4) { --def; if (def < 0) { def = 0; } } else if (res == 5) { def = def - 2; if (def < 0) { def = 0; } } else if (res == 6) { give noun staggered; } else { if (res == 7) { ! no code } give dweapon ~scenery; give dweapon weapon; move dweapon to location; SetPronoun(dweapon); ! not popped } } return VillainResult(noun,def,res); ]; [ WinnerResult def res od ; player.strength = ((~~def) ? 55536 : (def - od)); if (def - od < 0) { Queue(HealFunction,30)-->0 = true; } if (FightStrength() <= 0) { player.strength = 1 + (0 - FightStrength(0)); JigsUp("It appears that that last blow was too much for you. I'm afraid you are dead."); ! not popped rfalse; } return res; ]; [ VillainResult villain def res ; villain.strength = def; if (~~def) { give villain ~fightbit; print "Almost as soon as the ", (name) villain, " breathes his last breath, a cloud of sinister black fog envelops him, and when the fog lifts, the carcass has disappeared."; new_line; Remove_Carefully(villain); ! not popped villain.action(M_ENTER); ! not popped return res; } if (res == 2) { villain.action(M_LOOK); ! not popped return res; } return res; ]; [ TimeToRetreat villain vill_str play_str ; vill_str = villain.strength; play_str = vill_str - FightStrength(); if (play_str > 3) { if (90 > random(100)) rtrue; rfalse; } if (play_str > 0) { if (75 > random(100)) rtrue; rfalse; } if (~~play_str) { if (50 > random(100)) rtrue; rfalse; } if (vill_str > 1) { if (25 > random(100)) rtrue; rfalse; } if (10 > random(100)) rtrue; rfalse; ]; [ HealFunction pstr ; pstr = player.strength; if (pstr > 0) { pstr = 0; player.strength = pstr; } else if (pstr < 0) { ++pstr; player.strength = pstr; } if (pstr < 0) { if (Load_max < Load_allowed) { Load_max = Load_max + 10; } Queue(HealFunction,30)-->0 = true; rtrue; } Load_max = Load_allowed; QueueInterrupt(HealFunction)-->0 = false; rtrue; ]; [ I_Fight fightp len cnt oo o p ; len = Villains-->0; if (Dead) rfalse; cnt = 0; .labelXXX; ++cnt; if (cnt == len) { ! no code } else { oo = Villains-->cnt; o = oo-->0; if (o in location && o hasnt concealed) { if (o == thief && Thief_engrossed) { Thief_engrossed = false; jump labelXXX; } if (o.strength < 0) { p = oo-->3; if (p && p > random(100)) { oo-->3 = 0; CheckStrength(o); ! not popped jump labelXXX; } oo-->3 = p + 25; jump labelXXX; } if (o hasnt fightbit && (~~o.action(M_FIGHT_OR_OBJDESC))) jump labelXXX; fightp = true; jump labelXXX; } if (o has fightbit) { o.action(M_BEG); ! not popped } if (o == thief) { Thief_engrossed = false; } give player ~staggered; give o ~staggered; give o ~fightbit; CheckStrength(o); ! not popped jump labelXXX; } if (~~fightp) rfalse; return DoFight(len); ]; [ CheckStrength villain str ; str = villain.strength; if (str >= 0) rtrue; villain.strength = 0 - str; villain.action(M_WAKE); ! not popped rtrue; ]; [ I_Sword dem g ng p t l ; dem = QueueInterrupt(I_Sword); g = sword.trophy_value; if (sword in cretin) { if (Infested(location)) { ng = 2; } else { p = 0; .labelXXX; p = get_next_prop(location,p); if (~~p) { ! no code } else { if (p < Low_direction) jump labelXXX; t = location.&p; l = get_prop_len(t); if (l ~= 1 or 4 or 5 || (~~Infested(t->0))) jump labelXXX; ng = 1; } } if (ng == g) rfalse; if (ng == 2) { print "Your sword has begun to glow very brightly."; new_line; } else if (ng == 1) { print "Your sword is glowing with a faint blue glow."; new_line; } else if (~~ng) { print "Your sword is no longer glowing."; new_line; } sword.trophy_value = ng; rtrue; } dem-->0 = 0; rfalse; ]; [ Infested room obj ; obj = child(room); .labelXXX; if (~~obj) rfalse; if (obj has animate && obj hasnt concealed) rtrue; if ((obj = sibling(obj)) ~= nothing) jump labelXXX; rfalse; ]; [ I_Thief room robj here once robbed ; room = parent(thief); .labelXXX; here = ((thief hasnt concealed) ? true : false); if (here) { room = parent(thief); } if (room == Treasure_Room && room ~= location) { if (here) { HackTreasures(); ! not popped here = false; } ThiefDies(Treasure_Room); ! not popped } else if (room == location && room hasnt light && troll notin location) { if (Thief_vs_Adventurer(here)) rtrue; if (thief has concealed) { here = false; } } else { if (thief in room && thief hasnt concealed) { give thief concealed; here = false; } if (room has visited) { Rob(room,thief,75); ! not popped robbed = ((room has maze_room && location has maze_room) ? (RobMaze(room)) : (StealJunk(room))); } } once = ((~~once) ? true : false); if (once && (~~here)) { RetreiveStiletto(); ! not popped .labelXXX; if (room && (room = sibling(room)) ~= nothing) { ! no code } else { room = child(Room_Holder); } if (room has sacred || room hasnt dry_land) jump labelXXX; move thief to room; give thief ~fightbit; give thief concealed; Thief_here = false; jump labelXXX; } if (room ~= Treasure_Room) { DropJunk(room); ! not popped return robbed; } return robbed; ]; [ DropJunk room obj nextitem dropflag ; obj = child(thief); .labelXXX; if (~~obj) { return dropflag; } nextitem = sibling(obj); if (obj == stiletto or large_bag) { ! no code } else if ((~~obj.trophy_value) && Probability(30)) { give obj ~concealed; move obj to room; if ((~~dropflag) && room == location) { print "The robber, rummaging through his bag, dropped a few items he found valueless."; new_line; dropflag = true; } } obj = nextitem; jump labelXXX; ]; [ RetreiveStiletto ; if (stiletto notin parent(thief)) rfalse; give stiletto scenery; move stiletto to thief; rtrue; ]; [ StealJunk room obj nextitem ; obj = child(room); .labelXXX; if (~~obj) rfalse; nextitem = sibling(obj); if ((~~obj.trophy_value) && (obj has takeable && obj hasnt sacred && obj hasnt concealed) && (obj == stiletto || Probability(10))) { move obj to thief; give obj visited; give obj concealed; if (obj == rope) { Dome_flag = false; } if (room ~= location) rfalse; "You suddenly notice that the ", (name) obj, " vanished."; } obj = nextitem; jump labelXXX; ]; [ Rob what thief prob nextitem itm robbed ; itm = child(what); .labelXXX; if (~~itm) { return robbed; } nextitem = sibling(itm); if (itm hasnt concealed && itm hasnt sacred && itm.trophy_value > 0 && ((~~prob) || prob > random(100))) { move itm to thief; give itm visited; if (thief == thief) { give itm concealed; } robbed = true; } itm = nextitem; jump labelXXX; ]; [ DiagnoseSub my_str wounds remaining_str curetime ; my_str = FightStrength(0); wounds = player.strength; remaining_str = my_str + wounds; if (~~QueueInterrupt(HealFunction)-->0) { wounds = 0; } else { wounds = 0 - wounds; } if (~~wounds) { print "You are in perfect health."; } else { print "You have "; if (wounds == 1) { print "a light wound,"; } else if (wounds == 2) { print "a serious wound,"; } else if (wounds == 3) { print "several wounds,"; } else if (wounds > 3) { print "serious wounds,"; } } if (wounds) { print " which will be cured after "; curetime = 30 * (wounds - 1); print curetime + QueueInterrupt(HealFunction)-->1, " moves."; } new_line; print "You can "; if (~~remaining_str) { print "expect death soon"; } else if (remaining_str == 1) { print "be killed by one more light wound"; } else if (remaining_str == 2) { print "be killed by a serious wound"; } else if (remaining_str == 3) { print "survive one serious wound"; } else if (remaining_str > 3) { print "strong enough to take several wounds."; } print "."; new_line; if (~~Deaths) rfalse; print "You have been killed "; if (Deaths == 1) { print "once"; } else { print "twice"; } "."; ]; [ ScoreSub ask=true ; print "Your score is ", score, " (total of 350 points), in ", turns; if (turns == 1) { print " move."; } else { print " moves."; } new_line; print "This gives you the rank of "; if (score == 350) { print "Master Adventurer"; } else if (score > 330) { print "Wizard"; } else if (score > 300) { print "Master"; } else if (score > 200) { print "Adventurer"; } else if (score > 100) { print "Junior Adventurer"; } else if (score > 50) { print "Novice Adventurer"; } else if (score > 25) { print "Amateur Adventurer"; } else { print "Beginner"; } print "."; new_line; return score; ]; [ JigsUp deathmsg playerp ; if (Dead) { print "^It takes a talented person to be killed while already dead. YOU are such a talent. Unfortunately, it takes a talented person to deal with it. I am not such a talent. Sorry."; new_line; Finish(); ! not popped } print (string) deathmsg; new_line; if (~~Lucky) { print "Bad luck, huh?"; new_line; } ScoreUPD(65526); ! not popped print " ^ **** You have died **** ^^"; if (parent(player) has vehicle) { move player to location; } if (Deaths >= 2) { print "You clearly are a suicidal maniac. We don't allow psychotics in the cave, since they may harm other adventurers. Your remains will be installed in the Land of the Living Dead, where your fellow adventurers may gloat over them."; new_line; return Finish(); } ++Deaths; move player to location; if (Altar has visited) { print "As you take your last breath, you feel relieved of your burdens. The feeling passes as you find yourself before the gates of Hell, where the spirits jeer at you and deny you entry. Your senses are disturbed. The objects in the dungeon appear indistinct, bleached of color, even unreal."; new_line; new_line; Dead = true; Troll_flag = true; Assigned_but_unused = true; Always_lit = true; player.action = Spirit_actions; Goto(Entrance_to_Hades); ! not popped } else { print "Now, let's take a look here... Well, you probably deserve another chance. I can't quite fix you up completely, but you can't have everything."; new_line; new_line; Goto(Forest1); ! not popped } give trap_door ~visited; P_cont = 0; RandomizeObjects(); ! not popped return KillInterrupts(); ]; [ RandomizeObjects room itm nextitem len ; if (brass_lantern in player) { move brass_lantern to Living_Room; } if (gold_coffin in player) { move gold_coffin to Egyptian_Room; } sword.trophy_value = 0; nextitem = child(player); len = Above_ground-->0; .labelXXX; itm = nextitem; if (~~itm) rtrue; nextitem = sibling(itm); if (itm.trophy_value > 0) { .labelXXX; if (~~room) { room = child(Room_Holder); } if (room has dry_land && room hasnt light && 50 > random(100)) { move itm to room; jump labelXXX; } room = sibling(room); jump labelXXX; } move itm to Above_ground-->random(len); jump labelXXX; ]; [ KillInterrupts ; QueueInterrupt(I_XB)-->0 = false; QueueInterrupt(I_XC)-->0 = false; QueueInterrupt(I_Cyclops)-->0 = false; QueueInterrupt(I_Lantern)-->0 = false; QueueInterrupt(I_Candles)-->0 = false; QueueInterrupt(I_Sword)-->0 = false; QueueInterrupt(I_Songbird)-->0 = false; QueueInterrupt(I_Match)-->0 = false; give matchbook ~light; rtrue; ]; [ Coin_Bag_action ; return DoNotEmpty(bag_of_coins,"coins"); ]; [ Trunk_action ; return DoNotEmpty(trunk_of_jewels,"jewels"); ]; [ DoNotEmpty obj ob_name ; if (action == ##Close or ##Open) { "The ", (string) ob_name, " are safely inside; there's no need to do that."; } if (action == ##Examine or ##LookIn) { "There are lots of ", (string) ob_name, " in there."; } if (action ~= ##Insert || second ~= obj) rfalse; "Don't be silly. It wouldn't be a ", (name) obj, " anymore."; ]; [ Pedestal_action ; if (action == ##LookIn or ##Close or ##Open) { "You can't do that."; } if (action ~= ##Examine) rfalse; "It looks pretty much like a ", (name) noun, "."; ]; [ Garlic_action ; if (action ~= ##Eat) rfalse; Remove_Carefully(noun); ! not popped "What the heck! You won't make friends this way, but nobody around here is too friendly anyhow. Gulp!"; ]; [ Pseudo_Chain_action ; if (action == ##Move or ##Take) { "The chain is secure."; } if (action == ##Lower or ##Raise) { "Perhaps you should do that to the basket."; } if (action ~= ##Examine) rfalse; "The chain secures a basket within the shaft."; ]; [ Troll_Room_action rarg ; if (rarg ~= M_ENTER || troll notin location) rfalse; return SetPronoun(troll); ];