Verb 'greeting' 'hello' 'hi' 'salutations' * object -> Hello * -> Hello ; Verb 'nap' * 'onto'/'on' object(in_room,on_ground) -> Board * 'into'/'inside'/'in' object(in_room,on_ground) -> Board * -> Sleep ; Verb 'ask' 'interrogate' 'query' 'quiz' * animate 'about' object -> AskAbout * animate 'for' object -> AskFor ; Verb 'thank' 'thanks' * -> Thank * object -> Thank ; Verb 'snooze' * 'onto'/'on' object(in_room,on_ground) -> Board * 'into'/'inside'/'in' object(in_room,on_ground) -> Board * -> Sleep ; Verb 'know' 'learn' 'memorize' * object(held,carried,many) -> Memorize ; Verb 'launch' * vehicle -> Launch ; Verb 'forget' 'unlearn' 'unmemorize' * object -> Forget ; Verb 'climb' 'scale' * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * 'over' object(in_room,on_ground) -> ClimbOver * 'down'/'d//' dry_land(in_room,on_ground) -> ClimbDown * 'up'/'u//' dry_land(in_room,on_ground) -> ClimbUp * 'onto'/'on' vehicle(in_room,on_ground) -> ClimbOn * object(in_room,on_ground) -> Climb ; Verb 'squeeze' * object(held,many,have) 'onto'/'on' object -> Insert * object -> Squeeze ; Verb 'lean' * 'onto'/'on' object(held,have) -> LeanOn ; Verb 'fill' * container(held,carried,in_room,on_ground) 'at' object -> Fill * container(held,carried,in_room,on_ground) 'with'/'using' object -> Fill * container(held,carried,in_room,on_ground) -> Fill ; Verb 'consume' 'devour' 'eat' 'gobble' 'ingest' 'nibble' 'taste' * object(held,carried,in_room,on_ground,many) -> Eat ; Verb 'check' 'describe' 'examine' 'inspect' 'observe' 'study' 'survey' 'watch' * 'for' object -> Find * 'onto'/'on' object(held,carried,in_room,on_ground) -> LookIn * 'into'/'inside'/'in' object(held,carried,in_room,on_ground) -> LookIn * object(held,carried,in_room,on_ground) -> Examine ; Verb 'depart' 'exit' 'withdraw' * object -> Exit * -> Exit ; Verb 'polish' 'shine' 'wax' * object 'with'/'using' object -> Polish * object -> Polish ; Verb 'beckon' 'brandish' 'motion' 'wave' * object(held,carried) 'at' object -> Yell * 'to' object -> Yell * 'at' object -> Yell * object(held,carried) -> Wave ; Verb 'slide' * object(in_room,on_ground) 'to' object -> SlideReverse * object(in_room,on_ground) object -> SlideReverse * object 'underneath'/'under'/'beneath'/'below' object -> PutUnder * object -> Slide ; Verb 'strike' * animate(in_room,on_ground) -> Strike * animate(in_room,on_ground) 'with'/'using' weapon(held,carried,in_room,on_ground,have) -> Attack ; Verb 'close' 'shut' * container(held,carried,in_room,on_ground) -> Close ; Verb 'who' 'whos' * object -> Who ; Verb 'break' 'crack' 'damage' 'demolish' 'destroy' 'smash' 'wreck' * 'down'/'d//' object(held,carried,in_room,on_ground) 'with'/'using' object(held,carried,take) -> Destroy * object(held,carried,in_room,on_ground) 'with'/'using' object(held,carried,take) -> Destroy * object(in_room,on_ground) -> Destroy ; Verb 'fweep' * object -> CastFweep * -> CastFweep ; Verb 'cross' 'ford' 'traverse' * object -> Cross ; Verb '#reco' * -> DebugReco ; Verb 'flip' 'set' 'turn' * 'off' switchable(held,carried,in_room,on_ground,take) -> SwitchOff * 'onto'/'on' switchable(held,carried,in_room,on_ground) -> SwitchOn * object 'with'/'using' toolbit(have) -> Turn * object -> Turn * object 'for' object -> Turn * object 'to' object -> Turn ; Verb 'gesture' 'point' * 'to' object -> Gesture * 'at' object -> Gesture ; Verb 'bite' * object -> Bite ; Verb 'kick' * object -> Kick ; Verb 'burn' 'combust' 'ignite' 'kindle' * 'down'/'d//' object(held,carried,in_room,on_ground) 'with'/'using' object(held,carried,in_room,on_ground,have) -> Burn * object(held,carried,in_room,on_ground) 'with'/'using' object(held,carried,in_room,on_ground,have) -> Burn ; Verb 'lock' * object(in_room,on_ground) 'with'/'using' toolbit(held,carried,in_room,on_ground,take) -> Lock ; Verb 'what' 'whats' * object -> What ; Verb 'howl' 'scream' 'shout' 'yell' * -> Howl * 'at' object -> Yell ; Verb 'vezza' * object -> CastVezza * -> CastVezza ; Verb 'answer' 'reply' 'respond' * object -> AnswerObj * -> Answer ; Verb 'doff' 'remove' 'shed' * clothing(have) -> Remove ; Verb 'drink' 'guzzle' 'imbibe' 'quaff' 'sip' 'swallow' 'swill' * 'from' object(held,carried) -> DrinkFrom * object(held,carried,in_room,on_ground) -> Drink ; Verb 'awake' 'rouse' 'startle' 'surprise' 'wake' * 'up'/'u//' dry_land -> Wake * dry_land -> Wake ; Verb 'sleep' * 'onto'/'on' object(in_room,on_ground) -> Board * 'into'/'inside'/'in' object(in_room,on_ground) -> Board * -> Sleep ; Verb 'bestow' 'donate' 'feed' 'give' 'hand' 'offer' 'present' * animate(on_ground) object(held,many,have) -> GiveReverse * object(held,many,have) 'to' animate(on_ground) -> Give ; Verb 'diagnose' * -> Diagnose ; Verb 'brief' * -> Brief ; Verb 'smell' 'sniff' 'whiff' * object -> Smell ; Verb 'vardik' * animate -> CastVardik ; Verb 'blind' 'jab' 'poke' * animate(in_room,on_ground) 'with'/'using' weapon(held,carried,have) -> Destroy ; Verb 'descend' * object(in_room,on_ground) -> ClimbDown ; Verb 'swing' * weapon(held,carried,have) 'at' animate(in_room,on_ground) -> Swing * weapon(held,carried,have) -> Swing ; Verb 'douse' 'extinguish' 'quench' * switchable(held,carried,in_room,on_ground,take,many,have) -> SwitchOff ; Verb '$ve' * -> Verify ; Verb 'gyrate' 'rotate' 'spin' 'whirl' * object -> Spin ; Verb 'script' * -> Script ; Verb 'leave' * object -> Drop * -> Leave ; Verb 'roll' * 'up'/'u//' object(in_room,on_ground) -> Move ; Verb 't//' 'time' * -> Time ; Verb 'swanzo' * object -> CastSwanzo ; Verb 'compare' * object 'to' object -> Compare ; Verb 'drop' 'dump' 'release' * object(held,many,have) 'onto'/'on' object -> Insert * object(held,many,have) 'into'/'inside'/'in' object -> Insert * object(held,many,have) 'down'/'d//' object -> Insert * object(held,many,have) -> Drop ; Verb 'cast' 'incant' 'invoke' * object 'at' object -> Cast * object 'onto'/'on' object -> Cast * object -> Cast ; Verb 'spray' * object 'with'/'using' object -> SprayReverse * object 'onto'/'on' object -> Spray * object -> Spray ; Verb 'gnusto' * object -> CastGnusto ; Verb 'gaze' 'l//' 'look' 'stare' * object -> LookObj * 'for' object -> Find * 'up'/'u//' object 'into'/'inside'/'in' object -> ReadAbout * 'up'/'u//' dry_land -> ReadAbout * 'at' object(held,carried,in_room,on_ground,take) 'thru'/'through' object -> Read * 'into'/'inside'/'in' object(held,carried,in_room,on_ground) -> LookIn * 'onto'/'on' object(held,carried,in_room,on_ground) -> Examine * 'behind' object -> LookBehind * 'underneath'/'under'/'beneath'/'below' object -> LookUnder * 'thru'/'through' object -> LookIn * 'at' object(held,carried,in_room,on_ground) -> Examine * 'down'/'d//' dry_land -> LookDown * 'around'/'along' dry_land -> Look * -> Look ; Verb 'golmac' * object -> CastGolmac ; Verb 'izyuk' * object -> CastIzyuk ; Verb 'banish' 'drive' 'exorcise' * 'away' animate -> Banish * 'out' animate -> Banish * object -> Banish ; Verb 'score' * -> Score ; Verb 'send' * 'for' object -> SendFor ; Verb 'dig' 'excavate' * 'into'/'inside'/'in' object(in_room,on_ground) 'with'/'using' toolbit(held,carried,have) -> Dig * object(in_room,on_ground) 'with'/'using' toolbit(held,carried,have) -> Dig * 'thru'/'through' object -> Dig * 'with'/'using' object -> Dig * 'into'/'inside'/'in' object -> Dig ; Verb 'reach' * 'into'/'inside'/'in' object(in_room,on_ground) -> ReachIn ; Verb 'restart' * -> Restart ; Verb 'rest' 'sit' 'squat' * 'at' object -> LieDown * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * 'down'/'d//' dry_land(in_room,on_ground) -> LieDown * 'onto'/'on' vehicle(in_room,on_ground) -> ClimbOn ; Verb 'super' 'superbrief' * -> Superbrief ; Verb 'nudge' 'press' 'push' 'thrust' * object 'underneath'/'under'/'beneath'/'below' object -> PutUnder * object(in_room,on_ground) 'to' object -> SlideReverse * object(in_room,on_ground) object -> SlideReverse * 'onto'/'on' object(in_room,on_ground,many) -> Slide * object(in_room,on_ground,many) -> Slide ; Verb 'yonk' * object -> CastYonk ; Verb 'gaspar' * object -> CastGaspar * -> CastGaspar ; Verb 'dissolve' 'liquify' 'melt' 'thaw' * object 'with'/'using' object(held,carried,in_room,on_ground) -> Melt ; Verb 'unscript' * -> Unscript ; Verb 'cleave' 'cut' 'gash' 'lacerate' 'sever' 'slash' 'slice' 'split' * 'thru'/'through' object 'with'/'using' weapon(held,carried) -> Cut * object 'with'/'using' weapon(held,carried) -> Cut ; Verb 'malyon' * object -> CastMalyon ; Verb 'pump' * 'up'/'u//' object 'with'/'using' object -> PumpUp * 'up'/'u//' object -> PumpUp ; 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 'clog' 'fix' 'glue' 'patch' 'plug' 'repair' * object 'with'/'using' object -> Repair ; Verb 'meef' * object -> CastMeef ; Verb 'bathe' 'swim' 'wade' * 'into'/'inside'/'in' object -> Swim * -> Swim ; Verb 'debark' 'disembark' * vehicle(in_room,on_ground) -> Disembark ; Verb 'hone' 'sharpen' * object 'with'/'using' toolbit(have) -> Sharpen ; Verb 'pay' * animate object(held,many,have) -> Pay * object(held,many,have) 'to' animate -> PayReverse * animate 'with'/'using' object(held,many,have) -> Pay * object(held,many,have) -> Pay ; Verb 'don' 'wear' * object -> Wear ; Verb 'frisk' 'ransack' 'rummage' 'search' * 'for' object -> Find * 'into'/'inside'/'in' object -> Search * object -> Search ; Verb 'enter' * object -> EnterObj * -> Enter ; Verb 'restore' * -> Restore ; Verb 'spells' * -> Spells ; Verb 'dispatch' 'kill' 'murder' 'slay' 'stab' 'vanquish' * animate(in_room,on_ground) 'with'/'using' weapon(held,carried,have) -> Kill * animate(in_room,on_ground) -> Kill ; Verb 'frotz' * object -> CastFrotz ; Verb 'assault' 'attack' 'fight' 'hit' 'hurt' 'injure' * animate(in_room,on_ground) 'with'/'using' weapon(held,carried,have) -> Attack * animate(in_room,on_ground) -> Attack ; Verb 'i//' 'inventory' * -> Inventory ; Verb 'jostle' 'rattle' 'shake' * object -> Shake ; Verb 'conceal' 'ensconce' 'hide' 'secret' 'stash' * object(held,have) 'from' object -> Hide * 'behind' object -> Hide * 'underneath'/'under'/'beneath'/'below' object -> Hide * object(held,have) -> Hide * -> Hide ; Verb 'lower' * object 'down'/'d//' object -> LowerIn * object 'into'/'inside'/'in' object -> LowerIn * object -> Lower ; Verb 'chuck' 'fling' 'hurl' 'pitch' 'throw' 'toss' * object(held,many,have) 'onto'/'on' object -> Insert * object(held,many,have) 'into'/'inside'/'in' object -> Insert * object(held,many,have) 'down'/'d//' object -> Insert * object(held,carried,have) 'thru'/'through' object(in_room,on_ground) -> ThrowAt * object(held,carried,have) 'over' object -> ThrowOver * object(held,carried,have) 'off' object -> ThrowOver * object(held,carried,have) 'at' object(in_room,on_ground) -> ThrowAt ; Verb 'tell' * animate(in_room) -> Tell ; Verb 'help' 'hint' 'hints' * -> Help ; Verb 'save' * -> Save ; Verb 'show' * object object -> ShowReverse * object 'to' object -> Show ; Verb 'where' 'wheres' * object -> Where ; Verb 'attach' 'fasten' 'secure' 'tie' * 'up'/'u//' animate(in_room,on_ground) 'with'/'using' toolbit(held,carried,in_room,on_ground,have) -> TieWith * object 'to' object -> Tie ; Verb 'harken' 'listen' * 'for' object -> Listen * 'to' object -> Listen ; Verb 'rise' 'stand' * 'onto'/'on' object -> StandOn * 'up'/'u//' dry_land -> Rise * -> Rise ; Verb 'apply' * object(held,many,have) 'to' object -> Insert ; Verb '#rand' * object -> DebugRand ; Verb 'rezrov' * object -> CastRezrov ; Verb 'board' 'embark' 'ride' * vehicle(in_room,on_ground) -> Board ; Verb 'deflate' * object -> Deflate ; Verb 'land' * -> Land ; Verb 'pick' * 'up'/'u//' takeable(on_ground,many) -> Take * object 'with'/'using' object -> Pick * object -> Pick ; Verb 'knock' 'rap' * 'down'/'d//' animate(in_room,on_ground) -> Attack * 'onto'/'on' object -> Knock * 'at' object -> Knock ; Verb 'yomin' * animate -> CastYomin ; Verb 'discha' 'fire' 'shoot' * object -> Shoot ; Verb 'blow' * 'out' object -> SwitchOff * 'up'/'u//' object -> Inflate ; Verb '#comm' * -> DebugComm ; Verb 'feel' 'pat' 'pet' 'rub' 'touch' * object 'with'/'using' object -> Touch * object -> Touch ; Verb 'aimfiz' * object 'to' object -> CastAimfizTo * object -> CastAimfiz ; Verb 'open' * door(held,carried,in_room,on_ground) 'with'/'using' 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 'play' * object -> Play ; Verb 'dislocate' 'display' 'move' 'shift' * object(in_room,on_ground) -> Move ; Verb 'lie' 'recline' 'repose' * 'onto'/'on' vehicle -> LieOn * 'down'/'d//' dry_land -> LieOn ; Verb 'light' * switchable(held,carried,in_room,on_ground) 'with'/'using' object(held,carried,have) -> Burn * switchable(held,carried,in_room,on_ground) -> SwitchOn ; Verb '#unre' * -> DebugUnre ; Verb 'version' * -> Version ; Verb 'combination' 'combo' * object -> Combination ; Verb 'fly' * object -> Fly * -> Fly ; Verb 'pulverize' * object -> CastPulver ; Verb 'chase' 'follow' 'pursue' * object -> Follow * -> Follow ; Verb 'elevate' 'hoist' 'lift' 'raise' * 'up'/'u//' object -> Raise * object -> Raise ; Verb 'damn' 'fuck' 'shit' * -> Curse ; Verb 'count' 'tally' * object -> Count ; Verb 'carry' 'catch' 'confiscate' 'get' 'grab' 'hold' 'seize' 'snatch' 'take' * 'off' clothing(have) -> Remove * takeable(carried,in_room,many) 'into'/'inside'/'in' object -> 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//' dry_land -> Rise * 'onto'/'on' vehicle(in_room,on_ground) -> ClimbOn * 'out' vehicle(on_ground) -> Disembark * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * takeable(in_room,on_ground,many) -> Take ; Verb 'wait' 'z//' * 'for' object -> WaitFor * -> Wait ; Verb 'torture' * object -> Torture ; Verb 'pour' 'spill' 'sprinkle' * object(held,carried) 'from' object -> Pour * object(held,carried) 'onto'/'on' object -> Pour * object(held,carried) 'into'/'inside'/'in' object -> Pour * object(held,carried) -> Pour ; Verb 'bound' 'dive' 'hurdle' 'jump' 'leap' 'vault' * 'off' object -> Jump * 'from' object -> Jump * 'into'/'inside'/'in' object -> Jump * 'across' object -> Jump * 'over' object -> Jump * -> Jump ; Verb 'call' 'proclaim' 'say' 'talk' 'utter' * -> Call * 'to' animate(in_room) -> Tell ; Verb 'read' 'skim' * 'about' object 'into'/'inside'/'in' object -> ReadAbout * 'about' object -> ReadAbout * readable(held,carried,in_room,on_ground,take) 'thru'/'through' object -> Read * readable(held,carried,in_room,on_ground,take) -> Read ; Verb 'unlock' * object(in_room,on_ground) 'with'/'using' toolbit(have) -> Unlock ; Verb 'find' 'see' 'seek' * object -> Find ; Verb 'q//' 'quit' * -> Quit ; Verb 'advance' 'go' 'hike' 'proceed' 'run' 'step' 'tramp' 'trudge' 'walk' * 'to' object -> WalkTo * 'down'/'d//' object(in_room,on_ground) -> ClimbDown * 'up'/'u//' object(in_room,on_ground) -> ClimbUp * 'around'/'along' object -> WalkAround * 'thru'/'through' object -> EnterObj * 'over' object -> Jump * 'onto'/'on' object -> WalkAround * 'into'/'inside'/'in' object -> EnterObj * object -> Go * -> WalkAround ; Verb 'verbose' * -> Verbose ; Verb 'defile' 'molest' 'rape' 'ravish' * animate -> Defile ; Verb 'insert' 'lay' 'place' 'put' 'stuff' * object(held,many,have) 'behind' object -> PutBehind * 'onto'/'on' object(carried,in_room,on_ground,many) -> Wear * object(held,many,have) 'underneath'/'under'/'beneath'/'below' object -> PutUnder * 'down'/'d//' object(held,many) -> Drop * object(held,many,have) 'across' object -> PutOn * object(held,many,have) 'over' object -> PutOn * object(held,many,have) 'onto'/'on' object -> PutOn * object(held,many,have) 'down'/'d//' object -> Insert * object(held,many,have) 'into'/'inside'/'in' object -> Insert ; Verb 'drag' 'pull' 'shove' 'tug' 'yank' * 'down'/'d//' object -> Lower * 'onto'/'on' object(in_room,on_ground) -> Move * object(in_room,on_ground) -> Move ; Verb 'inflate' * object -> Inflate ; Verb 'cavort' 'gambol' 'hop' 'skip' * -> Cavort ; Verb 'kiss' 'smooch' * animate(in_room,on_ground) -> Kiss ; Object local_globals "" has ; Object -> stairs "stairs" with adjectives 'marble' 'wide' 'narrow' 'steep' 'winding' 'spiral', action StairsAction, name 'stair' 'stairs' 'stairway' 'staircase', has climbable_unused scenery trytakebit; Object Room_Holder "" with in_to Room_Holder, has ; Object -> Belbozs_Hideout "Belboz's Hideout" with description "An acrid stench fills this small room, which is obviously a control center for the evil experiments in the cavern outside.", contains cave, name 'jungle' 'miznia', e_to "An invisible force stops you.", has inside light dry_land; Object -> -> diamond_studded_knife "diamond-studded knife" with adjectives 'heavy' 'diamond' 'studded' 'encrust', size 10, initial "Hanging on the wall is a heavy dagger, its handle encrusted with diamonds.", name 'knife' 'dagger' 'handle', has takeable weapon; Object -> -> Jeearr "Jeearr" with adjectives 'evil' 'powerful', action JearrAction, name 'jeearr' 'demon' 'force' 'spirit', has scenery trytakebit animate; Object -> -> Belboz "Belboz" with action BelbozAction, description "Belboz is lying here, motionless but not asleep. He seems to be in some sort of trance.", name 'belboz' 'necromancer', has trytakebit animate; Object -> Hall_of_Eternal_Pain "Hall of Eternal Pain" with action HallOfEternalPainAction, pseudo 'force' PseudoForceAction 'forces' PseudoForceAction, description "This room is filled with blinding light that stabs at your eyes.", contains cave, has inside light dry_land; Object -> Chamber_of_Living_Death "Chamber of Living Death" with action ChamberOfLivingDeath, pseudo 'parasite' PseudoParasiteAction, description "The very walls of this room seem to soak up all light, so it seems as though you're floating in the center of an infinite void.", contains cave, has inside light dry_land; Object -> Mammoth_Cavern "Mammoth Cavern" with action MammothCavernAction, description "This cavern is of extraordinary size, but nevertheless crowded with powerful-looking machinery. You recognize a breeder for producing millions of the mutated grues you just passed. Other devices seem designed to aid the forces of evil while sapping magic powers of Enchanters everywhere.^^At the far end of the cavern are three closed doors: a black marble door leading to the northwest, a shiny silver door heading due west, and a door of bleached white wood to the southwest.", contains cave, nw_to (TO Chamber_of_Living_Death IF black_marble_door IS OPEN), w_to (TO Hall_of_Eternal_Pain IF shiny_silver_door IS OPEN), sw_to (TO Belbozs_Hideout IF white_wooden_door IS OPEN), e_to Grue_Lair, has inside dry_land; Object -> -> white_wooden_door "white wooden door" with adjectives 'white' 'wooden' 'bleached' 'wood', action WhiteDoorAction, name 'door' 'doors', has scenery door; Object -> -> shiny_silver_door "shiny silver door" with adjectives 'shiny' 'silver', action SilverDoorAction, name 'door' 'doors', has scenery door; Object -> -> black_marble_door "black marble door" with adjectives 'black' 'marble', action BlackDoorAction, name 'door' 'doors', has scenery door; Object -> -> diabolic_machinery "diabolic machinery" with adjectives 'diabolical' 'evil' 'powerful' 'tiny', action DiabolicMachineryAction, name 'machine' 'device' 'breeder' 'plaque', has scenery; Object -> Grue_Lair "Grue Lair" with action GrueLairAction, description "This is a low, shadowy cave leading east to west. The rocky walls are scarred with deep claw marks.", contains cave, w_to Mammoth_Cavern, e_to Mouth_of_River, has inside dry_land; Object -> -> pack_of_mutated_grues "pack of mutated grues" with adjectives 'mutated', action MutatedGrueAction, initial2 GrueDescription, name 'pack' 'grues' 'grue', has ; Object -> Mouth_of_River "Mouth of River" with action MouthOfRiverAction, pseudo 'cliff' PseudoCliff1Action 'cliffs' PseudoCliff1Action, contains water ocean river fort cave waterfall, nw_to "There's a tall cliff there.", w_to WestFromMouth_dir, sw_to "There's a tall cliff there.", s_to Ocean_Shore_North, se_to "Entering the ocean is certain death.", e_to "Entering the ocean is certain death.", ne_to "Entering the ocean is certain death.", n_to "The river is too wide to cross.", has light dry_land; Object -> -> mass_of_wriggling_vines "mass of wriggling vines" with adjectives 'wrigling' 'writhing' 'green', action WrigglingVinesAction, name 'mass' 'vines' 'vine' 'plants', has scenery; Object -> Lagoon_Floor "Lagoon Floor" with action LagoonFloorAction, pseudo 'coral' PseudoCoralAction 'sand' PseudoSandAction, description "This is the floor of a cove off the turbulent ocean to the east. The ground slopes upward to the north, west, and south. Light filters down from the surface of the water.", contains lagoon ocean water, u_to Surface_of_Lagoon, nw_to Lagoon_Shore, w_to Lagoon_Shore, sw_to Lagoon_Shore, s_to Ocean_Shore_South, se_to "Entering the ocean is certain death.", e_to "Entering the ocean is certain death.", ne_to "Entering the ocean is certain death.", n_to Ocean_Shore_North, has light; Object -> -> spenseweeds "spenseweeds" with adjectives 'sea' 'stunning' 'beautiful', action SpenseWeedAction, description "Nestled among some coral is a clump of stunningly beautiful spenseweeds, waving slowly in the currents of the lagoon.", name 'clump' 'spense' 'weeds' 'weed', has trytakebit; Object -> Surface_of_Lagoon "Surface of Lagoon" with action SurfaceOfLagoonAction, pseudo 'sand' PseudoSandAction, contains lagoon ocean water, out_to Lagoon_Shore, d_to DiveIntoLagoon, nw_to Lagoon_Shore, w_to Lagoon_Shore, sw_to Lagoon_Shore, s_to Ocean_Shore_South, se_to "Entering the ocean is certain death.", e_to "Entering the ocean is certain death.", ne_to "Entering the ocean is certain death.", n_to Ocean_Shore_North, has light; Object -> Ocean_Shore_South "Ocean Shore South" with adjectives 'royal', action OceanShoreAction, pseudo 'cliff' PseudoCliff1Action 'cliffs' PseudoCliff1Action, contains lagoon ocean water beach, name 'museum', in_to Surface_of_Lagoon, nw_to Lagoon_Shore, w_to "There's a tall cliff there.", sw_to "There's a tall cliff there.", s_to "There's a tall cliff there.", se_to "Entering the ocean is certain death.", e_to "Entering the ocean is certain death.", ne_to "Entering the ocean is certain death.", n_to Surface_of_Lagoon, has light dry_land; Object -> Ocean_Shore_North "Ocean Shore North" with adjectives 'flood' 'control', action OceanShoreAction, pseudo 'cliff' PseudoCliff1Action 'cliffs' PseudoCliff1Action, contains lagoon ocean beach water, name 'dam' 'fcd', in_to Surface_of_Lagoon, nw_to "There's a tall cliff there.", w_to "There's a tall cliff there.", sw_to Lagoon_Shore, s_to Surface_of_Lagoon, se_to "Entering the ocean is certain death.", e_to "Entering the ocean is certain death.", ne_to "Entering the ocean is certain death.", n_to Mouth_of_River, has light dry_land; Object -> Lagoon_Shore "Lagoon Shore" with action LagoonShoreAction, pseudo 'cliff' PseudoCliff1Action 'cliffs' PseudoCliff1Action, description "This is a narrow beach between a small cove to the east and tall cliffs to the west. The shore curves to the southeast and northeast. A metal chute leads up into the cliff.", contains lower_coal_chute lagoon water beach, in_to Surface_of_Lagoon, u_to SlantedRoom_up_dir, nw_to "There's a tall cliff there.", w_to "There's a tall cliff there.", sw_to "There's a tall cliff there.", s_to "There's a tall cliff there.", se_to Ocean_Shore_South, e_to Surface_of_Lagoon, ne_to Ocean_Shore_North, n_to "There's a tall cliff there.", has light dry_land; Object -> Slanted_Room "Slanted Room" with action SlantedRoomAction, description "This small room has a slanted roof, presumably due to the coal chute which passes overhead. You can reenter the chute to the east.", contains upper_coal_chute, name 'frobozz' 'wizard', d_to SlantedRoom_east_dir, u_to SlantedRoom_up_dir, e_to SlantedRoom_east_dir, has inside dry_land; Object -> -> shimmering_scroll "shimmering scroll" with adjectives 'shimmering', action SoiledScrollAction, size 3, name 'scroll', has paper transparent readable takeable container; Object -> -> -> golmac_spell "golmac spell" with memorized 0, text_string "travel temporally", adjectives 'golmac', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> kerosene_lamp "kerosene lamp" with adjectives 'kerosene' 'small' 'metal' 'glass', action KeroseneLampAction, capacity 5, initial2 KeroseneLampDesc, name 'lamp' 'door' 'compare' 'bowl', has light scope_inside open container; Object -> Top_of_Chute "Top of Chute" with action TopOfChuteAction, description "You are at the western end of the coal mine. A metal chute leads downward.", contains upper_coal_chute, d_to Chute_down_dir, e_to Coal_Mine2, has inside dry_land; Object -> Coal_Mine2 "Coal Mine" with adjectives 'lord' 'dimwit', description "You are in a winding tunnel in a large coal mine. Passages lead off in many directions.", name 'flathead', d_to Coal_Mine3, w_to Top_of_Chute, sw_to Coal_Mine1, e_to Coal_Mine3, n_to Coal_Mine2, has inside dry_land; Object -> Coal_Mine3 "Coal Mine" with adjectives 'king', description "You are in a winding tunnel in a large coal mine. Passages lead off in many directions.", name 'duncan', u_to Coal_Mine2, w_to Coal_Mine1, s_to Shaft_Top, se_to Coal_Mine3, n_to Coal_Mine2, has inside dry_land; Object -> Coal_Mine1 "Coal Mine" with adjectives 'king', description "You are in a winding tunnel in a large coal mine. Passages lead off in many directions.", name 'entharion', nw_to Coal_Mine2, s_to Shaft_Top, e_to Shaft_Top, ne_to Coal_Mine3, has inside dry_land; Object -> -> beam_of_wood "beam of wood" with adjectives 'wooden', action BeamOfWoodAction, size 40, initial "Lying near the mouth of one passage is a wooden timber, probably left over from the construction of the mine.", name 'beam' 'wood' 'timber', has takeable; Object -> Shaft_Top "Shaft Top" with pseudo 'shaft' PseudoShaftAction, description "You are deep inside a large coal mine, at the top of an air shaft. You could descend into the shaft; passages in many directions lead further into the mine.", name 'troll' 'trolls' 'tholl', d_to Shaft_Bottom, nw_to Coal_Mine1, sw_to Coal_Mine1, e_to Shaft_Top, ne_to Coal_Mine3, has inside dry_land; Object -> Shaft_Bottom "Shaft Bottom" with adjectives 'castle' 'largon', action ShaftBottomAction, pseudo 'shaft' PseudoShaftAction, description "You are at the bottom of an air shaft which looks climbable. A heavy door leads west.", contains heavy_door, name 'castle' 'largon', u_to Shaft_Top, w_to (TO Dial_Room IF heavy_door IS OPEN), has inside dry_land; Object -> -> rope "rope" with action RopeAction, size 20, initial "Lying in one corner is a coil of rope.", name 'coil' 'rope', has takeable; Object -> Dial_Room "Dial Room" with adjectives 'aragain', pseudo 'lamp' PseudoLampAction, description "On the eastern wall is a heavy door with a dial set into it. There is a sign on the door. Another exit leads west, and a wall-mounted lamp provides illumination. The floor is deeply covered with lumps of coal.", contains heavy_door lumps_of_coal, name 'falls', w_to Coal_Bin_Room, e_to (TO Shaft_Bottom IF heavy_door IS OPEN), has inside light dry_land; Object -> -> combination_dial "combination dial" with adjectives 'combination', action DialAction, name 'dial', has scenery; Object -> -> -> wooden_crate "wooden crate" with adjectives 'wood' 'wooden' 'black' 'stencil', action CrateAction, capacity 40, size 45, name 'letter' 'crate' 'label', has scope_inside readable takeable container; Object -> -> -> -> can_of_grue_repellent "can of grue repellent" with text_string "^~!!! FROBOZZ MAGIC GRUE REPELLENT !!!^^Instructions for use: Apply liberally to creature to be protected. Duration of effect is unpredictable. Use only in place of death!^^(No warranty expressed or implied)~", adjectives 'grue' 'magic', action GrueRepellentAction, name 'repell' 'can', has readable takeable; Object -> -> -> -> brass_lantern "brass lantern" with adjectives 'brass' 'batter' 'powered', action BrassLampAction, size 15, name 'lantern' 'lamp', has takeable switchable; Object -> -> -> -> grue_suit "grue suit" with adjectives 'grue', size 15, name 'suit', has clothing takeable; Object -> -> -> troglodyte "troglodyte" with action TroglodyteAction, name 'troglodyte', has animate; Object -> -> -> your_younger_self "your younger self" with adjectives 'your' 'younger' 'my', action YoungerSelfAction, initial2 YoungerSelfInitial, name 'self' 'younger' 'twin', has trytakebit scope_inside open container animate; Object -> -> -> you "you" has scenery trytakebit; Object -> -> -> your_older_self "your older self" with adjectives 'your' 'my' 'older', action OlderSelfAction, name 'strange' 'self' 'older' 'twin', has trytakebit scope_inside open container animate; Object -> -> -> -> smelly_scroll "smelly scroll" with adjectives 'smelly', action SoiledScrollAction, size 3, name 'scroll', has paper transparent readable takeable container; Object -> -> -> -> -> vardik_spell "vardik spell" with memorized 0, text_string "shield a mind from an evil spirit", adjectives 'vardik', action SpellAction, size 1, name 'spells' 'spell', has spell scenery concealed; Object -> -> -> splattered_body "splattered body" with adjectives 'dead' 'splattered', action SplatteredBodyAction, description "A somewhat splattered corpse is sprawled across the floor.", name 'corpse' 'body', has ; Object -> -> -> ferocious_dorn_beast "ferocious dorn beast" with adjectives 'ferocious' 'dorn', action DornBeastAction, name 'dornbeast' 'dorn' 'beast' 'dorns', has ; Object -> -> -> glittering_scroll "glittering scroll" with adjectives 'glittering', action SoiledScrollAction, size 3, name 'scroll', has paper transparent readable takeable container; Object -> -> -> -> malyon_spell "malyon spell" with memorized 0, text_string "bring life to inanimate objects", adjectives 'malyon', action SpellAction, size 1, name 'spells' 'spell', has spell scenery visited; Object -> -> -> gnome2 "gnome" with action FlashyGnomeAction, description "A gnome, dressed in flashy attire, stands here looking impatient.", name 'gnome', has animate; Object -> -> -> ordinary_scroll "ordinary scroll" with adjectives 'single' 'ordinary', action SoiledScrollAction, size 3, name 'scroll', has paper vowel_start transparent readable takeable container; Object -> -> -> -> yonk_spell "yonk spell" with memorized 0, text_string "augment the power of certain spells", adjectives 'yonk', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> aqua_vial "aqua vial" with adjectives 'aqua' 'fooble', action FoobleVialAction, capacity 1, size 3, name 'vial' 'vials' 'label', has vial vowel_start scope_inside readable takeable container; Object -> -> -> -> aqua_potion "aqua potion" with adjectives 'aqua' 'fooble', action FooblePotionAction, name 'potion', has trytakebit vowel_start; Object -> -> -> orange_vial "orange vial" with adjectives 'vivid' 'orange' 'vilstu' 'tiny', action VilstuVialAction, capacity 1, size 3, description "An orange vial, labelled in tiny letters, is lying here.", name 'vial' 'vials' 'label' 'letter', has vial vowel_start scope_inside readable takeable container; Object -> -> -> -> orange_potion "orange potion" with adjectives 'orange' 'vilstu', action VilstuPotionAction, name 'potion', has trytakebit vowel_start; Object -> -> -> issue_of_Popular_Enchanting "issue of Popular Enchanting" with adjectives 'popular', action PopularEnchantingAction, size 7, name 'magazine' 'issue' 'enchant' 'label', has vowel_start readable takeable; Object -> -> -> small_key "small key" with adjectives 'tiny' 'small', size 3, name 'key', has takeable toolbit; Object -> -> -> spell_book "spell book" with adjectives 'my' 'spell' 'marginal', action SpellBookAction, name 'book' 'notes', has open visited readable takeable container; Object -> -> -> -> vezza_spell "vezza spell" with memorized 0, text_string "view the future", adjectives 'vezza', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> -> pulver_spell "pulver spell" with memorized 0, text_string "cause liquids to become dry", adjectives 'pulverize', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> -> izyuk_spell "izyuk spell" with memorized 0, text_string "fly like a bird", adjectives 'izyuk', action SpellAction, size 1, name 'spells' 'spell', has spell scenery vowel_start; Object -> -> -> -> yomin_spell "yomin spell" with memorized 0, text_string "mind probe", adjectives 'yomin', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> -> rezrov_spell "rezrov spell" with memorized 0, text_string "open even locked or enchanted objects", adjectives 'rezrov', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> -> frotz_spell "frotz spell" with memorized 0, text_string "cause something to give off light", adjectives 'frotz', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> -> gnusto_spell "gnusto spell" with memorized 0, text_string "write a magic spell into a spell book", adjectives 'gnusto', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> -> author "author" with adjectives 'steve' 'steven' 'bearded', action MeretzkyAction, name 'implementor' 'meretzky' 'author' 'oracle', has vowel_start animate; Object -> -> -> Frobar "Frobar" with action FrobarAction, name 'frobar', has trytakebit animate; Object -> -> -> Helistar "Helistar" with action HelistarAction, name 'helistar', has trytakebit animate; Object -> Coal_Bin_Room "Coal Bin Room" with action CoalBinRoomAction, pseudo 'lamp' PseudoLampAction, description "This is obviously the heart of a large coal mine, illuminated by a wall-mounted lamp. The bottom of a metal coal chute is visible at the north end of the room. Another chute continues downward at the southern end. A large coal bin is overflowing, and the floor is completely covered with lumps of coal. A passage leads east, but a western passage is blocked by rubble.", contains upper_coal_chute lower_coal_chute lumps_of_coal, d_to Lagoon_Shore, u_to SlantedRoom_up_dir, w_to Coalmine_passage_dir, s_to Lagoon_Shore, e_to Dial_Room, n_to SlantedRoom_up_dir, has inside light dry_land; Object -> -> coal_bin "coal bin" with adjectives 'large' 'coal', action CoalBinObjectAction, name 'bin', has scenery; Object -> Sooty_Room "Sooty Room" with adjectives 'frigid', action SootyRoomAction, pseudo 'timber' PseudoTimberAction, description "The walls and ceiling of this room are covered with soot and held up by timbers which don't look very sturdy. A winding tunnel leads north. From the east comes a sulfurous odor.", contains soot, name 'river', e_to Coalmine_passage_dir, n_to Hall_of_Carvings, has inside dry_land; Object -> Hollow "Hollow" with action HollowAction, pseudo 'cliff' PseudoCliff1Action 'cliffs' PseudoCliff1Action, description "The maze opens here onto a tiny outdoor plateau, completely surrounded by towering cliffs. The only way out is back through the dazzling archway of glass to the west.^Near the glass arch is a small rectangular brick structure. The center of the structure is a hole about a foot wide, leading down into darkness.", contains chimney opening soot glass_maze doorway, name 'antharia', d_to "The opening in the brick structure is too small for humans or even bats.", u_to "You couldn't even fly over these cliffs.", w_to Inside_the_Glass_Maze, has light dry_land; Object -> -> parchment_scroll "parchment scroll" with adjectives 'parchment', action SoiledScrollAction, size 3, name 'scroll', has paper transparent trytakebit readable takeable container; Object -> -> -> swanzo_spell "swanzo spell" with memorized 0, text_string "exorcise an inhabiting presence", adjectives 'swanzo', action SpellAction, size 1, name 'spells' 'spell', has spell scenery vowel_start; Object -> -> brick_structure "brick structure" with adjectives 'brick' 'rectangle' 'small', action BrickStructureAction, name 'structure' 'bricks' 'shaft' 'opening', has scenery; Object -> Inside_the_Glass_Maze "Inside the Glass Maze" with action GlassMazeAction, contains glass_maze, out_to "Please use compass directions here.", d_to MoveInMaze, u_to MoveInMaze, w_to MoveInMaze, s_to MoveInMaze, e_to MoveInMaze, n_to MoveInMaze, has inside light dry_land; Object -> Outside_Glass_Arch "Outside Glass Arch" with adjectives 'gue', description "Through a breathtaking archway of glass to the east is an area glistening with reflected light. Another exit leads south.", contains glass_maze doorway, name 'tech', s_to Entrance_Hall, e_to Inside_the_Glass_Maze, has inside dry_land; Object -> Entrance_Hall "Entrance Hall" with adjectives 'great' 'underground', description "This is a large entrance hall, paved with polished stone. Large doorways lead north and south.", contains doorway, name 'empire' 'gue', s_to End_of_Highway, n_to Outside_Glass_Arch, has inside dry_land; Object -> -> statue "statue" with text_string "~I, Duncanthrax, King of Quendor and all its subjugated outlands, invite you to sample the delights of my Glass Labyrinth.~", adjectives 'life-' 'sized' 'marble', action DuncanthraxStatueAction, description "There is a marble statue here, in a strikingly life-like pose of pompous bellicosity.", initial "Standing in the center of the hall is a life-sized statue. An inscription at the base is in a familiar language.", name 'statue' 'inscribe', has readable; Object -> Stone_Hut "Stone Hut" with description "This is a small underground hovel. On the far wall is a small fireplace, long unused.", contains chimney stone_hovel, name 'quendor' 'kingdom', out_to End_of_Highway, u_to StoneHutAction, w_to End_of_Highway, has inside dry_land; Object -> -> fireplace "fireplace" with adjectives 'small' 'unused', action fireplaceAction, capacity 50, name 'fireplace', has scenery scope_inside open container; Object -> End_of_Highway "End of Highway" with adjectives 'ancient', description "The underground road ends here. A hovel, carved into the rock, lies to the east. To the north, wide marble stairs lead upward.", contains road stone_hovel stairs, name 'galepa' 'mareilon' 'city', in_to Stone_Hut, u_to Entrance_Hall, w_to Outside_Store, e_to Stone_Hut, n_to Entrance_Hall, has inside dry_land; Object -> Casino "Casino" with action CasinoAction, pseudo 'lever' OneArmedBanditAction 'midway' MidwayAction, description "This is a large, plush room, slightly neglected.", contains amusement_park, e_to West_End_of_Midway, has inside dry_land; Object -> -> odd_machine "odd machine" with adjectives 'odd' 'one-' 'armed' 'three' 'section', description "Standing on one side of the room is an odd machine, with a three-section display and a large lever on the side.", name 'machine' 'bandit' 'display', has vowel_start; Object -> Arcade "Arcade" with action ArcadeAction, pseudo 'midway' MidwayAction 'booth' PseudoBoothAction, description "This is a huge tent filled with hectic noise, blinking lights, and the smell of frying food. Near the exit is a game booth lined with prizes. The concept of the game seems to be bashing cute little mechanical bunnies with a rubber ball as they hop around a little artificial meadow.", contains amusement_park, n_to Arcade_north_dir, has inside light dry_land; Object -> -> hopping_bunny "hopping bunny" with adjectives 'hopping' 'cute' 'mechant', action HoppingBunnyAction, name 'bunny' 'bunnies' 'rabbit', has scenery; Object -> -> hawker "hawker" with action HawkerAction, description "A hawker stands within the booth, studying you through half-closed eyes.", name 'hawker', has scope_inside open container animate; Object -> -> -> rubber_ball "rubber ball" with adjectives 'rubber', action RubberBallAction, name 'ball', has scenery trytakebit takeable; Object -> Roller_Coaster "Roller Coaster" with action RollerCoasterAction, pseudo 'midway' MidwayAction 'plaque' PseudoPlaqueAction, contains amusement_park, s_to West_End_of_Midway, has inside light dry_land; Object -> -> car "car" with action RollerCoasterCarAction, name 'car', has scenery scope_inside open container vehicle; Object -> Flume_Room "Flume" with action FlumeRoomAction, pseudo 'midway' MidwayAction 'plaque' PseudoPlaqueAction, contains water amusement_park, n_to East_End_of_Midway, has inside light dry_land; Object -> -> log_boat "log boat" with adjectives 'log', action LogBoatAction, name 'boat', has scenery scope_inside open container vehicle; Object -> -> flume "flume" with action FlumeAction, name 'flume' 'flumes', has scenery; Object -> Haunted_House "Haunted House" with action HauntedHouseAction, pseudo 'midway' MidwayAction, contains amusement_park, d_to Haunted_House, u_to Haunted_House, nw_to Haunted_House, w_to Haunted_House, sw_to Haunted_House, s_to East_End_of_Midway, se_to Haunted_House, e_to Haunted_House, ne_to Haunted_House, n_to Haunted_House, has inside dry_land; Object -> West_End_of_Midway "West End of Midway" with pseudo 'midway' MidwayAction, description "Entrances lead north, west and south, and the rest of the midway lies to the east.", contains amusement_park, w_to Casino, s_to Arcade, e_to East_End_of_Midway, n_to Roller_Coaster, has inside light dry_land; Object -> East_End_of_Midway "East End of Midway" with action EastEndOfMidwayAction, pseudo 'midway' MidwayAction, description "You are at the eastern end of a long midway. The park entrance lies to the east, and rides lie to the north and south.", contains amusement_park, w_to West_End_of_Midway, s_to Flume_Room, e_to Park_Entrance, n_to Haunted_House, has inside light dry_land; Object -> Park_Entrance "Park Entrance" with pseudo 'sign' PseudoSign2Action, description "This looks like the entrance to a run-down amusement park, no longer gaudy with lights and glitter. A sign above the entrance proclaims ~Welcome to Bozbarland - The Entertainment Capital of the Empire.~ The park lies to the west and a tunnel leads northeast.", contains amusement_park, w_to ParkEntranceAction, ne_to Winding_Tunnel, has inside dry_land; Object -> Gun_Emplacement "Gun Emplacement" with description "This is a battlement with a view of a river to the north and an ocean to the east. Openings northwest, west, and southwest lead to other parts of the fort.", contains river ocean fort, nw_to Barracks, w_to Parade_Ground, sw_to Armory, e_to GunEmplacement_east_dir, n_to GunEmplacement_east_dir, has light dry_land; Object -> -> cannon "cannon" with adjectives 'magnificent' 'cast-' 'cast' 'iron' 'wide' 'shallow', action CannonAction, capacity 80, description "A magnificent cast-iron cannon stands atop the battlement. Its wide, shallow barrel points toward the ocean, as though daring enemy ships to approach.", name 'cannon' 'barrel', has scope_inside open container; Object -> -> -> pile_of_identical_scrolls "pile of identical scrolls" with adjectives 'identical', action IdenticalScrollAction, name 'pile' 'scroll', has trytakebit concealed; Object -> Barracks "Barracks" with pseudo 'barracks' PseudoBarracksAction, description "This was a barracks for the battalion stationed in this fort. You could leave to the south, or to the southeast.", contains fort, s_to Parade_Ground, se_to Gun_Emplacement, has inside dry_land; Object -> Armory "Armory" with description "Once the armory for the fort, this room has been picked clean by vandals and soldiers of fortune. Exit north or northeast.", contains fort, ne_to Gun_Emplacement, n_to Parade_Ground, has inside dry_land; Object -> Parade_Ground "Parade Ground" with action ParadeGroundAction, pseudo 'rope' PseudoRopeAction, description "You are at the center of a level field inside the fort. Entrances to rooms around the perimeter lie in several directions.", contains fort, u_to "If you want to climb the flagpole, just say so.", w_to Fort_Entrance, s_to Armory, e_to Gun_Emplacement, n_to Barracks, has light dry_land; Object -> -> flag_of_Quendor "flag of Quendor" with adjectives 'tattered' 'brown' 'gold', action FlagOfQuendorAction, size 8, initial2 FlagOfQuendorDescription, name 'flag', has trytakebit takeable; Object -> -> flagpole "flagpole" with adjectives 'flag', action FlagpoleAction, name 'pole' 'flagpole', has scenery; Object -> Fort_Entrance "Fort Entrance" with description "You are at the entrance to Fort Griffspotter, which lies to the east. A trail leads along the river bank to the northwest.", contains fort road river_bank, nw_to River_Bank_Room, e_to Parade_Ground, has light dry_land; Object -> Hall_of_Carvings "Hall of Carvings" with action HallOfCarvingsAction, s_to (TO Sooty_Room IF Dragon_carving_moved), n_to Winding_Tunnel, has inside dry_land; Object -> -> carving_of_a_dragon "carving of a dragon" with adjectives 'huge' 'stone' 'sleeping' 'largest' 'most' 'striking' 'intricate', action DragonCarvingAction, name 'carving' 'dragon', has scenery vowel_start; Object -> Winding_Tunnel "Winding Tunnel" with pseudo 'crater' SlimyRoomAction, description "This is a meandering north-south tunnel. A side passage leads to the southwest.", name 'infocom' 'fibbsb' 'magicle' 'softspell', sw_to Park_Entrance, s_to Hall_of_Carvings, n_to Crater, has inside dry_land; Object -> Tree_Room "Tree Room" with action TreeRoomAction, description "This is a tall room flooded with light from an unseen source. The only exit is south.", name 'gurth' 'mithic', s_to Elbow_Room, has inside light dry_land; Object -> -> zorkmid_coin "zorkmid coin" with adjectives 'zorkmid', action ZorkmidAction, size 3, name 'zorkmid' 'coin' 'coins' 'toll', has scenery trytakebit takeable; Object -> -> zorkmid_tree "zorkmid tree" with adjectives 'zorkmid', action ZorkmidTreeAction, description "Growing in the center of the room is a tree, thick with foliage. As though to disprove the ancient adage, every branch, bow, and twig has a zorkmid coin growing on it.", name 'tree' 'branch' 'bow' 'twig', has ; Object -> Elbow_Room "Elbow Room" with description "The tunnel turns a corner here. You could go either north or east.", name 'nymph' 'nymphs', e_to Bare_Passage, n_to Tree_Room, has inside dry_land; Object -> Bare_Passage "Bare Passage" with pseudo 'chasm' PseudoGorgeAction 'gorge' PseudoGorgeAction, description "This is a featureless tunnel, narrowing to the west. To the east is a deep gorge, probably too wide to jump across.", name 'amathradonis', w_to Elbow_Room, e_to CrossingGorge_dir, has inside dry_land; Object -> Edge_of_Chasm "Edge of Chasm" with pseudo 'chasm' PseudoGorgeAction 'crater' SlimyRoomAction, description "This is a strip of land to the east of a gaping chasm. You might try jumping across, but I'd advise against it. A wide crater lies to the east.", name 'village' 'accardi', w_to CrossingGorge_dir, e_to Crater, has inside dry_land; Object -> Crater "Crater" with adjectives 'ocean', action CraterAction, pseudo 'crater' SlimyRoomAction, name 'sea', out_to CraterNoGoAnywhere, nw_to CraterCantGo, w_to Edge_of_Chasm, sw_to CraterCantGo, s_to Winding_Tunnel, se_to CraterCantGo, e_to CraterCantGo, ne_to Edge_of_Crater, n_to Slimy_Room, has inside dry_land; Object -> Edge_of_Crater "Edge of Crater" with pseudo 'crater' SlimyRoomAction, description "You are at the northeastern rim of a gigantic crater, the result of some ancient explosion. A wide underground highway, which ends at the crater's edge, leads northeast.", contains road, d_to Crater, sw_to Crater, ne_to Bend, has inside dry_land; Object -> Bend "Bend" with adjectives 'kovall', description "The road curves here, heading east and southwest.", contains road, name 'desert', sw_to Edge_of_Crater, e_to Highway, has inside dry_land; Object -> Store "Store" with pseudo 'store' PseudoStoreAction, description "This is an appliance store, apparently abandoned. The entrance lies to the north.", name 'gnomes', out_to Outside_Store, n_to Outside_Store, has inside dry_land; Object -> -> floor_waxer "floor waxer" with adjectives 'floor', action FloorWaxerAction, size 50, name 'waxer' 'appliance', has takeable; Object -> Outside_Store "Outside Store" with pseudo 'sign' PseudoSignr1Action 'store' PseudoStoreAction, description "A store lies to the south from this section of the east-west road. There is a sign over the entrance.", contains road, in_to Store, w_to Toll_Gate_Room, s_to Store, e_to End_of_Highway, has inside dry_land; Object -> Toll_Gate_Room "Toll Gate" with description "You have reached a toll gate which spans the highway.", contains road, w_to Highway, e_to TollGateRoomAction, has inside dry_land; Object -> -> gnome1 "gnome" with adjectives 'fat' 'old' 'long' 'white' 'gnome', action TollGnomeAction, initial2 TollGnomeDescription, name 'gnome' 'beard' 'pocket', has animate; Object -> -> toll_booth "toll booth" with adjectives 'toll', action TollBoothAction, name 'booth', has scenery; Object -> -> toll_gate "toll gate" with adjectives 'toll' 'sturdy', action TollGateObjectAction, name 'gate', has scenery door; Object -> Highway "Highway" with adjectives 'enchant', description "This is a wide road winding away to the east and west, perhaps a relic of the Great Underground Empire you read about in history class. A passage leads up to the north.", contains road, name 'guild' 'circle' 'enchant', u_to Dungeon, w_to Bend, e_to Toll_Gate_Room, n_to Dungeon, has inside dry_land; Object -> Pit_of_Bones "Pit of Bones" with pseudo 'bones' PseudoBonesAction 'pit' PseudoPit2Action, description "In the center of the room is a deep pit filled with countless bones, an indication of the brutality of dungeon life. There are exits south and southwest. High above you is a small opening in the ceiling.", contains opening castle cave, d_to "Do you really want to add your bones to the others in the pit?", u_to PitOfBones_u_dir, sw_to Dungeon, s_to Torture_Chamber, has inside dry_land; Object -> Dungeon "Dungeon" with adjectives 'temporal' 't//', description "This is the dark and dank dungeon of the ruined castle. There's probably a torture chamber nearby. You can go east, northeast, or upward. A small opening leads down as well.", contains opening castle, name 'travel', d_to Highway, u_to Ruins, e_to Torture_Chamber, ne_to Pit_of_Bones, has inside dry_land; Object -> Torture_Chamber "Torture Chamber" with description "This is a large and well-equipped torture chamber. These were very popular in castles of several centuries ago, but are somewhat out of fashion now. There are exits to the west and north.", contains castle, w_to Dungeon, n_to Pit_of_Bones, has inside dry_land; Object -> -> indigo_vial "indigo vial" with adjectives 'indigo' 'flaxo' 'tiny', action FlaxoVialAction, capacity 1, size 3, initial "Sitting near one of the torture devices is an indigo vial, labelled in tiny letters.", name 'vial' 'vials' 'letter' 'label', has vial vowel_start scope_inside readable takeable container; Object -> -> -> indigo_potion "indigo potion" with adjectives 'flaxo' 'indigo', action FlaxoPotionAction, name 'potion', has trytakebit vowel_start; Object -> -> torture_devices "torture devices" with adjectives 'torture', action TortureDeviceAction, name 'device' 'rack' 'pit' 'pendulum', has scenery; Object -> Turret "Turret" with adjectives 'messen', pseudo 'turret' RuinsAction, description "This is the only turret of the castle still standing. It affords a marvelous view of a meadow to the west, and beyond that a twisted forest. To the north is a mighty fortress which stands atop a cliff where a turbulent river pours into an ocean. The ocean stretches out of sight to the east. A spiralling staircase leads downward.", contains fort ocean river meadow stairs blighted_forest castle waterfall, name 'mailman' 'messen' 'guild', d_to Ruins, has light dry_land; Object -> Ruins "Ruins" with adjectives 'double', pseudo 'turret' RuinsAction, description "You are amongst the ruins of an ancient castle. A winding stairway leads up to a crumbling turret, and a dark passage leads downward. A path heads through the rubble to the west.", contains stairs castle, name 'fannucci', d_to Dungeon, u_to Turret, w_to Drawbridge, has light dry_land; Object -> Drawbridge "Drawbridge" with action DrawbridgeAction, contains water castle meadow, d_to Drawbridge_d_dir, w_to Meadow_Room, e_to Ruins, has light dry_land; Object -> -> wooden_drawbridge "wooden drawbridge" with adjectives 'rotted' 'wooden' 'draw', action wooden_DrawbridgeAction, name 'bridge' 'drawbridge', has scenery; Object -> -> moat "moat" with action MoatAction, name 'moat', has scenery; Object -> Hidden_Cave "Hidden Cave" with action HiddenAcaveAction, contains water cave opening, out_to (TO River_Bed IF River_bed_dry ELSE "Entering that swirling, turbulent pool looks very dangerous."), d_to Pit_of_Bones, sw_to (TO River_Bed IF River_bed_dry ELSE "Entering that swirling, turbulent pool looks very dangerous."), has inside dry_land; Object -> -> soiled_scroll "soiled scroll" with adjectives 'soiled', action SoiledScrollAction, size 3, initial "Lying in the corner, in a pile of bat guano, is a scroll.", name 'scroll', has paper transparent trytakebit readable takeable container; Object -> -> -> fweep_spell "fweep spell" with memorized 0, text_string "turn caster into a bat", adjectives 'fweep', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> amber_vial "amber vial" with adjectives 'amber' 'blort', action BlortVialAction, capacity 1, size 3, name 'vial' 'vials' 'label', has vial vowel_start scope_inside trytakebit readable takeable container; Object -> -> -> amber_potion "amber potion" with adjectives 'amber' 'blort', action BlortPotionAction, name 'potion', has trytakebit vowel_start; Object -> -> pile_of_bat_guano "pile of bat guano" with adjectives 'bat' 'feces' 'turds' 'dung', action GuanoAction, size 10, name 'pile' 'guano' 'shit', has scenery trytakebit takeable; Object -> Top_of_Falls "Top of Falls" with pseudo 'cliff' PseudoHazeAction 'haze' PseudoCliff2Action, description "The river bed ends here at a steep cliff, where the river once plunged over a waterfall. Below the falls, in the distance, is a large sea, covered with haze. The bed continues northwest, but the banks here are unclimbable. Atop the southwestern bank stands a proud fortress.", contains water fort river_bank ocean waterfall river_bed, name 'borpheus', d_to TopOfFalls_down_dir, u_to TopOfFalls_up_dir, nw_to River_Bed, sw_to TopOfFalls_up_dir, se_to TopOfFalls_down_dir, ne_to TopOfFalls_up_dir, has light dry_land; Object -> Near_Stagnant_Pool "Near Stagnant Pool" with adjectives 'gabber', description "The river bed to the northwest is a pool covered with algae and other scum. The bed to the southeast is slightly drier. The banks are too tall and steep to climb here.", contains water river_bank river_bed, name 'tumper', u_to TopOfFalls_up_dir, nw_to DieInPool, sw_to TopOfFalls_up_dir, se_to River_Bed, ne_to TopOfFalls_up_dir, has light dry_land; Object -> River_Bed "River Bed" with adjectives 'servant', action RiverBedAction, pseudo 'puddle' PseudePuddleAction 'fish' PseudoFishAction, description "You are on the bed of an evaporated river. Fish splash helplessly in tiny puddles. The bed leads northwest and southeast. A climb up the southwest bank is possible. To the northeast is a dark cave, hollowed out by years of rushing water.", contains water cave river_bank river_bed, name 'servant' 'guild', u_to River_Bank_Room, nw_to Near_Stagnant_Pool, sw_to River_Bank_Room, se_to Top_of_Falls, ne_to Hidden_Cave, has light dry_land; Object -> River_Bank_Room "River Bank" with action RiverBankRoomAction, pseudo 'rock' PseudoRocksAction 'rocks' PseudoRocksAction, contains water river meadow river_bank river_bed, d_to RiverBank_down_dir, nw_to "Undergrowth prevents travel along the bank.", sw_to Meadow_Room, s_to Meadow_Room, se_to Fort_Entrance, e_to RiverBank_down_dir, ne_to RiverBank_down_dir, n_to RiverBank_down_dir, has light dry_land; Object -> -> undergrowth "undergrowth" with action UndergrowthAction, name 'underground', has scenery trytakebit vowel_start; Object -> Meadow_Room "Meadow" with action MeadowAction, pseudo 'fence' MineFieldAction 'turret' RuinsAction, contains meadow castle, w_to Forest_Edge, s_to "A tall fence blocks your way.", e_to Drawbridge, ne_to River_Bank_Room, n_to River_Bank_Room, has light dry_land; Object -> -> plague_of_locusts "plague of locusts" with adjectives 'blood' 'sucking', action LocustAction, name 'plague' 'swarm' 'locusts', has scenery; Object -> Slimy_Room "Slimy Room" with adjectives 'evil' 'warlock', pseudo 'crater' SlimyRoomAction, description "This is a moist room whose walls are thick with moss and lichens. A small hole leads up and a rocky passage leads south.", contains opening, name 'krill', d_to Crater, u_to Snake_Pit, s_to Crater, has inside dry_land; Object -> -> moss_and_lichens "moss and lichens" with action LichenAction, name 'moss' 'lichen' 'slime', has scenery trytakebit; Object -> Snake_Pit "Snake Pit" with action SnakePitAction, pseudo 'pit' PseudoPit1Action 'crack' PseudoCrackAction, description "You have entered a shadowy pit full of nooks and crannies. From every direction you hear the hissing of vipers and the irregular clicking of giant beetles. Light spills down from above, and a small crack leads further downward into darkness.", out_to Forest_Edge, d_to Slimy_Room, u_to Forest_Edge, has light dry_land; Object -> -> group_of_unseen_creatures "group of unseen creatures" with adjectives 'giant' 'viper' 'vipers' 'unseen' 'group', name 'snake' 'snakes' 'beetle' 'creature', has scenery; Object -> Mine_Field "Mine Field" with pseudo 'fence' MineFieldAction, description "This is a flat and featureless dirt path leading north and south.", contains blighted_forest, w_to "The forest is too dense to enter here.", s_to StepOnMine, e_to "A tall fence blocks your way.", n_to StepOnMine, has light dry_land; Object -> Forest_Edge "Forest Edge" with adjectives 'lonely', pseudo 'fence' MineFieldAction, description "To the west, a path enters the blighted woods, which stretch out of sight. A signpost stands beside another path leading north, and to the east is a wide meadow. At the base of the signpost is a slimy hole leading down.", contains opening road blighted_forest Meadow_Room, name 'mountain', d_to Snake_Pit, w_to Twisted_Forest, s_to "A tall fence blocks your way.", e_to Meadow_Room, n_to Mine_Field, has light dry_land; Object -> -> signpost "signpost" with adjectives 'sign', action MineFieldSignMsg, name 'signpost' 'post' 'sign', has scenery readable; Object -> Tree_Branch "Tree Branch" with action TreeBranchAction, contains blighted_forest gnarled_tree, d_to Twisted_Forest, u_to ClimbTreeHigherMsg, has unknown_unused light; Object -> -> boa_constrictor "boa constrictor" with adjectives 'giant' 'boa', action SnakeAction, name 'boa' 'constrictor' 'snake', has scenery; Object -> Twisted_Forest "Twisted Forest" with description "You are on a path through a blighted forest. The trees are sickly, and there is no undergrowth at all. One tree here looks climbable. The path, which ends here, continues to the northeast.", contains road blighted_forest gnarled_tree, u_to Tree_Branch, ne_to Forest_Edge, has light dry_land; Object -> -> hellhound "hellhound" with adjectives 'hell', action HellhoundAction, name 'hellhound' 'hound' 'dog', has scenery; Object -> Cellar "Cellar" with pseudo 'cobweb' PseudoCobwebAction, description "You are in the basement of the Guild Hall. A steep, narrow stair leads upward from the southwest corner.", contains stairs, name 'rotgrub' 'bloodwort' 'brogmo', out_to Lobby, u_to Lobby, sw_to Lobby, has inside dry_land; Object -> -> white_button "white button" with adjectives 'white', action ButtonAction, name 'button' 'dove', has scenery; Object -> -> purple_button "purple button" with adjectives 'purple' 'royal', action ButtonAction, name 'button' 'crown', has scenery; Object -> -> red_button "red button" with adjectives 'bloody' 'red', action ButtonAction, name 'button' 'knife', has scenery; Object -> -> gray_button "gray button" with adjectives 'gray' 'grey', action ButtonAction, name 'button' 'moon', has scenery; Object -> -> black_button "black button" with adjectives 'black', action ButtonAction, name 'button' 'star', has scenery; Object -> -> sturdy_trunk "sturdy trunk" with adjectives 'large' 'sturdy', action SturdyTrunkAction, capacity 60, description "At the far end of the cellar, draped in cobwebs, is a large trunk. At each corner of its lid is a button: a black button with a picture of a star, a gray button depicting the moon, a red button illustrated with a bloody knife, and a purple button engraved with a royal crown. In the center of the lid is a white button picturing a dove in flight.", name 'trunk' 'lid' 'chest', has scope_inside trytakebit container; Object -> -> -> moldy_scroll "moldy scroll" with adjectives 'moldy', action SoiledScrollAction, size 3, name 'scroll', has paper transparent readable takeable container; Object -> -> -> -> aimfiz_spell "aimfiz spell" with memorized 0, text_string "transport caster to someone else's location", adjectives 'aimfiz', action SpellAction, size 1, name 'spells' 'spell', has spell scenery vowel_start; Object -> Store_Room "Store Room" with description "This is a closet for storage. The only exit is east.", name 'dryad' 'dryads' 'kobold' 'surmin', out_to Lobby, e_to Lobby, has inside dry_land; Object -> -> calendar "calendar" with text_string "The calendar is for the current year, 957 GUE, and bears many stunning pictures: the marble mines of Antharia, the sand dunes of the Kovalli Desert, ancient Fort Griffspotter, and the giant infotater factories of Borphee. A legend reads ~Best wishes for a leak-less year, from the Accardi Plumbers Guild.~", action CalendarAction, size 8, name 'calendar' 'legend', has light readable takeable; Object -> -> depleted_matchbook "depleted matchbook" with adjectives 'match' 'deplete' 'inner', action MatchbookAction, size 3, name 'matches' 'matchbook' 'cover' 'printing', has readable takeable; Object -> -> ochre_vial "ochre vial" with adjectives 'berzio' 'ochre' 'small' 'tiny', action BerzioVialAction, capacity 1, size 3, initial "Among the provisions here is a small ochre-colored vial, closed and labelled with tiny lettering.", name 'vial' 'vials' 'label' 'letter', has vial vowel_start scope_inside readable takeable container; Object -> -> -> ochre_potion "ochre potion" with adjectives 'ochre' 'berzio', action BerzioPotionAction, name 'potion', has trytakebit vowel_start; Object -> Library "Library" with pseudo 'stand' PseudoStandAction, description "This is a study chamber for members of the Guild. Usually, there would be several elder Enchanters patiently training novices, but no one is here at the moment. The only exit is west.^Lying open on a stand in one corner is a heavy volume, probably a copy of the Encyclopedia Frobizzica.", w_to Lobby, has inside dry_land; Object -> -> dusty_scroll "dusty scroll" with adjectives 'dusty', action SoiledScrollAction, size 3, initial "The servants have been lax lately, for a scroll is lying among the dust in the corner.", name 'scroll', has paper transparent readable takeable container; Object -> -> -> meef_spell "meef spell" with memorized 0, text_string "cause plants to wilt", adjectives 'meef', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> -> Encyclopedia_Frobizzica "copy of Encyclopedia Frobizzica" with text_string "It would take days to read the entire encyclopedia. A better idea would be to read about specific persons or things.", adjectives 'heavy' 'encycle', action EncyclopediaAction, name 'encycle' 'copy' 'volume' 'frobiz', has scenery trytakebit readable; Object -> Lobby "Lobby" with pseudo 'marble' PseudoMarbleAction, description "This is the entrance lobby of the Guild Hall. Befitting the status and wealth of the Guild, the lobby is finished with polished Antharian marble, inlaid with intricate patterns of silver leaf. To the north is a wide arch, and smaller openings flank the area on the eastern and western sides, as well as the northeastern and northwestern corners. A narrow stair leads downward. Through another arch to the south, you can see the entrance steps and the main road into town.", contains opening road stairs doorway, name 'orc' 'orcs' 'yipple' 'nabiz', d_to Cellar, nw_to Apprentice_Quarters, w_to Store_Room, s_to "A tiny warning nymph appears, floating in the air next to your ear. ~There's no one else here,~ it reminds you, ~so you'd better not leave just now. Bye!~ It winks at you before vanishing.", e_to Library, ne_to Servants_Quarters, n_to Hallway1, has inside light dry_land; Object -> -> receptacle "receptacle" with adjectives 'ornate' 'brass', capacity 20, description "Affixed to the southern arch is an ornate brass receptacle, intended for use by messengers.", name 'mailbox' 'receptacle', has scope_inside container; Object -> Chamber_of_the_Circle "Chamber of the Circle" with action ChamberOfCircleAction, pseudo 'table' PseudoTableAction, contains heavy_wooden_door, s_to (TO Hallway2 IF heavy_wooden_door IS OPEN), has inside dry_land; Object -> -> list_of_tenets "list of tenets" with text_string "The first tenet states that Enchanters may never use their talents to aid evil. The second points out that an Enchanter's duty is to the Guild and to the Kingdom, not to the individual. Lesser tenets include rules for conducting votes at meetings, guidelines for passing dishes at Guild banquets, and penalties for revealing the Guild's secret handshake.", adjectives 'ancient' 'flower', name 'engrave' 'list' 'tenets' 'tenet', has scenery readable; Object -> Hallway1 "Hallway" with action Hallway1Action, contains doorway, name 'zork', w_to Helistars_Quarters, s_to Lobby, e_to Frobars_Quarters, n_to Hallway2, has inside light dry_land; Object -> Hallway2 "Hallway" with action Hallway2Action, contains heavy_wooden_door, w_to Belbozs_Quarters, s_to Hallway1, e_to Your_Quarters, n_to (TO Chamber_of_the_Circle IF heavy_wooden_door IS OPEN), has inside light dry_land; Object -> -> scribbled_note "scribbled note" with text_string "~I have taken the apprentices into town to shop for the Guild picnic. I tried rousing you, but you seemed deep asleep. By the way, have you seen Belboz anywhere? It's not like him to leave without telling someone -- but then, he's been acting pretty odd of late.^^ -- Frobar~", adjectives 'scribbled' 'parchment', size 3, initial "Tacked to the doorframe of your room is a note, hurriedly scribbled on parchment.", name 'note' 'message', has readable takeable; Object -> Apprentice_Quarters "Apprentice Quarters" with adjectives 'razor', description "This is a large hall where the Guild's young apprentices live and study as they strive to achieve a seat on the Circle. You think back to the days when you occupied these quarters. The apprentices are gone, having accompanied Frobar into town to shop. You can leave to the southeast.", name 'gorge', out_to Lobby, se_to Lobby, has inside dry_land; Object -> Servants_Quarters "Servants' Quarters" with description "This is a sparsely furnished living area for the servants of the Guild. None are in sight; presumably they are out doing their daily errands. You can leave to the southwest.", name 'sorcerer', out_to Lobby, sw_to Lobby, has inside dry_land; Object -> Helistars_Quarters "Helistar's Quarters" with description "Helistar is one of the foremost members of the Circle, and this is her private chamber.", name 'thriff', out_to Hallway1, e_to Hallway1, has inside dry_land; Object -> -> shiny_scroll "shiny scroll" with adjectives 'new' 'shiny', action SoiledScrollAction, size 3, initial "Among Helistar's possessions is a scroll, new and shiny.", name 'scroll', has paper transparent readable takeable container; Object -> -> -> gaspar_spell "gaspar spell" with memorized 0, text_string "provide for your own resurrection", adjectives 'gaspar', action SpellAction, size 1, name 'spells' 'spell', has spell scenery; Object -> Frobars_Quarters "Frobar's Quarters" with description "This is the room of Frobar the Enchanter. There isn't much here in the way of furnishings, Frobar being a pretty dull kind of guy.", name 'barbel' 'orkan', out_to Hallway1, w_to Hallway1, has inside dry_land; Object -> Belbozs_Quarters "Belboz's Quarters" with action BelbozQuartersAction, pseudo 'perch' PseudoPerchAction, out_to Hallway2, e_to Hallway2, has inside dry_land; Object -> -> morgia_plant "morgia plant" with adjectives 'morgia' 'exotic', action MorgiaPlantAction, name 'plant' 'plants', has scenery trytakebit; Object -> -> wall_hanging "wall hanging" with adjectives 'wall' 'beautiful' 'woven', action TapestryAction, name 'hanging' 'tapestry', has scenery trytakebit; Object -> -> desk_drawer "desk drawer" with adjectives 'desk', capacity 40, name 'drawer', has scenery scope_inside container; Object -> -> -> infotater "infotater" with adjectives 'leather' 'bound' 'data', action InfotaterAction, size 10, name 'infota' 'wheel', has vowel_start readable takeable; Object -> -> -> journal "journal" with adjectives 'person' 'note' 'last' 'three', action JournalAction, size 10, description "The personal journal of Belboz the Necromancer is lying here.", name 'diary' 'noteboook' 'entries' 'journal', has readable takeable; Object -> -> -> tiny_box "tiny box" with adjectives 'tiny', action TinyBoxAction, capacity 3, size 4, name 'box' 'lid' 'writing', has scope_inside readable takeable container; Object -> -> -> -> magic_amulet "magic amulet" with adjectives 'magic' 'blue', action AmuletAction, size 3, initial2 AmuletDescription, name 'amulet' 'jewel' 'aggthora', has clothing takeable; Object -> -> darkwood_desk "darkwood desk" with adjectives 'wood' 'wide' 'crafted' 'dark' 'darkwood', action DarkwoodDeskAction, capacity 60, name 'desk', has scenery scope_inside open openable container; Object -> -> parrot "parrot" with adjectives 'prized' 'pet', action ParrotAction, initial "Pacing back and forth on a perch in the corner is Belboz's prized pet parrot, native to the jungles of Miznia.", name 'parrot' 'bird' 'pollib' 'polly', has trytakebit; Object -> Your_Quarters "Your Quarters" with description "This is your chamber in the Hall of the Guild of Enchanters, with a doorway to the west. A private chamber is a great privilege, especially for an Enchanter as young as yourself, but how many Enchanters can say they defeated the infamous Krill?", contains doorway bed2, name 'chevau', out_to Hallway2, w_to Hallway2, has inside dry_land; Object -> -> bed1 "bed" with action MyBedAction, capacity 60, description "Your bed occupies the far corner of the room.", name 'bed', has scope_inside open openable container vehicle; Object local_globals "" has light vowel_start transparent scope_inside open trytakebit openable visited concealed wet clothing dry_land; Object -> sleep "sleep" with adjectives 'forty', action SleepAction, name 'sleep' 'nap' 'snooze' 'winks', has trytakebit; Object -> room "room" with adjectives 'area', action RoomAction, name 'room' 'chamber' 'place' 'hall', has ; Object -> sky "sky" with action SkyAction, name 'sky' 'stars', has ; Object -> lurking_grue "lurking grue" with adjectives 'lurking' 'sinister' 'hungry' 'silent' 'legend', action LurkingGrueAction, name 'grue', has ; Object -> yourself1 "yourself" with action PseudoAction, name 'me' 'myself' 'self' 'enchant', has trytakebit visited animate; Object -> yourself2 "yourself" with adjectives 'large', action PseudoBatAction, name 'bat', has trytakebit visited animate; Object -> your_hand "your hand" with adjectives 'bare', name 'hands', has scenery trytakebit visited toolbit; Object -> ceiling "ceiling" with adjectives 'high' 'domed', action CeilingAction, name 'ceiling' 'roof' 'dome', has scenery visited; Object -> wall "wall" with action WallAction, name 'wall' 'walls', has scenery visited; Object -> passage "passage" with adjectives 'rocky' 'winding' 'long' 'dark' 'meander', action PassageAction, name 'passage' 'corridor' 'hallway' 'tunnel', has ; Object -> ground "ground" with adjectives 'stone' 'sandy' 'tiny' 'outdoor' 'level', action GroundAction, name 'floor' 'ground' 'plateau' 'field', has ; Object -> dust_and_debris "dust and debris" with name 'rubble' 'debris' 'cave-' 'dust', has trytakebit; Object -> it "it" with name 'it' 'that' 'her' 'him', has scenery trytakebit vowel_start visited; Object -> number "number" with name 'intnum', has ; Object -> unnamed2 "" with capacity 0, size 0, prop12 [0 0], pseudo 'foobar' GoSub, description "F", initial "F", prop16 [0 0], contains local_globals, initial2 0, name 'zzmgck', has ; Object -> -> lagoon "lagoon" with adjectives 'small' 'calm', action LagoonObjAction, name 'lagoon' 'inlet' 'cove', has scenery; Object -> -> ocean "ocean" with adjectives 'mighty' 'flathead' 'turbulant', action OceanAction, name 'ocean' 'waters', has scenery vowel_start; Object -> -> beach "beach" with adjectives 'curved' 'sandy' 'narrow', name 'beach' 'shore' 'sand', has scenery; Object -> -> heavy_door "heavy door" with text_string "~See the foreman for the current combination.^^(signed)^Ernie Flathead, Manager^GUE Coal Mine #502~", adjectives 'heavy', action HeavyDoorAction, name 'door' 'doors' 'sign', has scenery readable door; Object -> -> lower_coal_chute "lower coal chute" with adjectives 'lower' 'coal' 'metal', action LowerCoalChuteAction, name 'chute', has ; Object -> -> upper_coal_chute "upper coal chute" with adjectives 'upper' 'coal' 'metal', action UpperCoalChuteAction, name 'chute', has vowel_start; Object -> -> lumps_of_coal "lumps of coal" with action LumpOfCoalAction, name 'lumps' 'coal', has scenery trytakebit; Object -> -> soot "soot" with adjectives 'large' 'black', name 'soot' 'quantity', has scenery trytakebit; Object -> -> chimney "chimney" with action ChimneyAction, name 'chimney', has scenery; Object -> -> stone_hovel "stone hovel" with adjectives 'underground' 'stone', action StoneHovelObjectAction, name 'hut' 'hovel', has scenery; Object -> -> glass_maze "glass maze" with adjectives 'glass', action GlassMazeObjectAction, name 'maze' 'labyrinth', has scenery; Object -> -> amusement_park "amusement park" with adjectives 'amusement' 'zorky', action AmusementParkObjAction, name 'park' 'bozbar', has scenery vowel_start; Object -> -> fort "fort" with adjectives 'fort' 'proud' 'mighty', action FortAction, name 'fort' 'griffs' 'rampart' 'fortress', has scenery; Object -> -> waterfall "waterfall" with adjectives 'water' 'tall', action WaterfallObjectAction, name 'waterfall' 'fall' 'falls', has scenery; Object -> -> river_bed "river bed" with adjectives 'river', action RiverBedObjectAction, name 'bed', has scenery; Object -> -> river_bank "river bank" with adjectives 'river' 'muddy' 'tall' 'steep' 'high', action RiverBankAction, name 'bank' 'banks', has scenery; Object -> -> river "river" with adjectives 'mighty' 'fast-' 'moving' 'turbulant' 'foaming', action RiverObjectAction, name 'river' 'waters' 'rapids', has scenery; Object -> -> meadow "meadow" with adjectives 'tall' 'rolling' 'wide', action MeadowObjectAction, name 'meadow' 'grass' 'field', has scenery; Object -> -> gnarled_tree "gnarled tree" with adjectives 'large' 'gnarled' 'old' 'twisted', action GnarledTreeAction, name 'tree' 'branch', has scenery; Object -> -> heavy_wooden_door "heavy wooden door" with adjectives 'heavy' 'wooden', name 'door' 'doors', has door; Object -> -> bed2 "bed" with action OtherBedAction, name 'bed', has scope_inside open openable container vehicle; Object -> -> cave "cave" with adjectives 'mammoth' 'hidden' 'dark', action CaveObjectAction, name 'cave' 'cavern', has scenery; Object -> -> castle "castle" with adjectives 'castle' 'egreth' 'ruined' 'ancient', action CastleObjectAction, name 'castle' 'egreth' 'ruins', has scenery; Object -> -> blighted_forest "blighted forest" with adjectives 'blighted' 'dense' 'sickly' 'twisted', action BlightedForestAction, name 'forest' 'woods' 'trees', has scenery; Object -> -> opening "opening" with adjectives 'small' 'slimy' 'dark', action OpeningObjectAction, name 'hole' 'opening' 'well', has scenery; Object -> -> doorway "doorway" with adjectives 'large' 'wide' 'marble' 'dazzling' 'glass' 'breath', action DoorwayObjectAction, name 'arch' 'archway' 'doorway', has scenery vowel_start; Object -> -> water "water" with adjectives 'swirling' 'turbulant' 'stagnant', action WaterObjectAction, name 'water' 'trickle' 'pool', has trytakebit; Object -> -> road "road" with adjectives 'dirt' 'featureless' 'wide' 'curved' 'main' 'underground', action RoadObjAction, name 'highway' 'road' 'trail' 'path', has scenery; Object not_here_object "something" with action Not_Here_Object_F, has trytakebit; Object protagonist "protagonist" with action 0, name 'protagonist', has scenery concealed; Object pseudo "pseudo" with action PseudoAction, has ; Constant M_END = 0; Constant M_HANDLED = 1; Constant M_ENTER = 2; Constant M_LOOK = 3; Constant M_WAKE = 4; Constant M_FIGHT = 5; Constant M_BEFORE = 6; Constant P_FIBBSBOZZA = 1; Constant P_MAGICLAND = 2; Constant P_FROBOZZ = 3; Constant H_THIRSTY = 0; Constant H_HUNGRY = 1; Constant B_OPEN_TRUNK = 0; Constant B_BLACK = 1; Constant B_GRAY = 2; Constant B_RED = 3; Constant B_PURPLE = 4; Constant B_WHITE = 5; Constant M_1_NxNxN = 1; Constant M_2_NxNxN = 2; Constant M_3_NxNxN = 3; Constant M_4_NxNxN = 4; Constant M_5_NxNxN = 5; Constant M_6_NxNxN = 6; Constant M_7_NxNxN = 7; Constant M_8_NxNxN = 8; Constant M_9_NxNxN = 9; Constant M_10_NxNxN = 10; Constant M_11_NxNxN = 11; Constant M_12_NxNxN = 12; Constant M_13_NxNxN = 13; Constant M_14_NxNxN = 14; Constant M_15_NxNxN = 15; Constant M_16_NxNxN = 16; Constant M_17_NxNxN = 17; Constant M_18_NxNxN = 18; Constant M_19_NxNxN = 19; Constant M_20_NxNxN = 20; Constant M_21_NxNxN = 21; Constant M_22_NxNxN = 22; Constant M_23_NxNxN = 23; Constant M_24_NxNxN = 24; Constant M_25_NxNxN = 25; Constant M_26_NxNxN = 26; Constant M_27_NxNxN = 27; 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 global3; Global Superbrief; Global Parchment_scroll_score = 25; Global verbose; Global Mind_protected; Global P_dir; Global P_aclause; Global exhausted = 65535; Global Combination_found; Global Rope_in_upper_chute; Global Rope_in_lower_chute; Global P_slocbits; Global P_matchlen; Global adverb; Global Spellbook_in_lagoon; Global Hellhound_here; Global Gnome_interrupted_once; Global P_mult; Global Clock_wait; Global Next_button; Global P_name; Global Player_frotzed; Global Wrong_button_pushed; Global P_xnam; Global P_object; Global Park_admission_paid; Global GLOBAL36 = 11674[?]; Global Direction; Global P_anam; Global actor; Global Infotater_select; Global Toll_gnome_annoyance_cnt; Global prev_location; Global start_of_day = 40; Global Bat_p; Global P_cont; Global Flying_p; Global global48 = 10956[?]; Global Gaspar_location; Global Current_dornbeast_loc; Global Fly_dir_obj_unused; Global Combination_number; Global Won_slotmachine; Global Maze_location = M_13_NxNxN; Global Maximum_held = 7; Global Desc_object; Global Glass_maze_rearranged; Global Yonk_enhanced_malyon; Global Bridge_creaks; Global Lit = true; Global Holding_breath_counter; Global P_redirected_noun; Global P_xadjn; Global Maze_score = 20; Global global67 = 11194[?]; Global P_moby_flag; Global GLOBAL69; Global P_adj; Global P_len; Global Boa_snake_here; Global Jackpot_hit; Global C_ints = 300; Global Potion_drunk; Global Load_max = 100; Global Spells_learnable = 3; Global Thirst_cnt; Global Flag_raised = true; Global Time_around_older_self; Global Vilstu_potion_drunk; Global Blort_potion_drunk; Global Toll_gnome_asleep = true; Global Grue_repellent; Global noun; Global P_merged; Global Time_spent_near_riverbank; Global P_gwimbit; Global C_ints2 = 300; Global Start_of_game = true; Global Combination_solved_score = 20; Global P_syntax; Global Previous_dornbeast_loc; Global P_xadj; Global Twin_was_here; Global Locust_cnt; Global Ressurected; Global P_aadj; Global Hunger_cnt; Global Aqua_vial_found; Global action; Global Maximum_spells = 4; Global Find_Belboz_score = 20; Global Notholding_msg = "You're not holding"; Global P_GLOBAL118; Global Grue_suit_found; Global Gaspar_cast_on_Belboz; Global P_oneobj; Global Paradox; Global Casting_spell; Global Repellent_empty; Global King_animated; Global P_won; Global Twin_msg = "Although your clothes are much cleaner and less torn, the stranger looks virtually like your own twin!"; Global River_bed_dry; Global global134 = 11730[?]; Global Frotz_msg = "Your spell book begins to glow softly. "; Global Belboz_dead; Global Vilstu_counter; Global Roller_coaster_cnt; Global Turns_around_younger_self; Global P_quote_flag; Global P_table; Global Twin_has_spellbook; Global Load_allowed = 100; Global P_getflags; Global Rope_tied_to_beam; Global Dragon_carving_moved; Global Fooble_coordination; Global Dornbeast_dead; Global Table_warning_nymph; Global Dornbeast_alerted; Global GLOBAL158 = 11553[?]; Global Mailman_here; Global P_number; Global Won_pitch; Global P_oflag; Global player; Global P_adjn; Global P_cctbl; Global Combination_told; Global Spells_memorized_cnt = 4; Global Encyclopedia_read; Global P_it_objectobject; Global Troglodyte_just_left; Global second; Global GLOBAL182; Global Youve_told_combination; Global Mammoth_cave_score = 20; Global P_not_here; Global Twin_has_been_seen; Global Dial_set_to; Global On_rollercoaster; Global Bitten_p; Global P_ncn; Global Trunk_button_cnt; Global Transcript_msg = " a transcript of interaction with SORCERER."; Global No_need_sustenance; Global Time_travelled; Global Zorkmid_stolen; Global Almost_out_of_breath; Global Verbs = invalidArray12482; Array Frobar_goto_tbl table "shopping in the marketplace. A horse-drawn chariot runs you down, trampling you beneath dozens of hooves" "crossing the bridge over Razor Gorge between town and the Guild Hall. Unfortunately, you didn't quite make the bridge, and plummet onto nasty rocks below" "praying in the town's temple. Angered by your sacrilegious violation of the ceremony, the priests skewer you with several handy sacred ornaments" ; Array P_buts --> 50; Array Helistar_goto_tbl table "skydiving near the mountains of Gurth. Not having a parachute, your descent is considerably faster" "scuba diving in the Sea of Mithicus. Before you can drown, a ferocious sea lion devours you" "sharpening her bullfighting skills. The crowd cheers wildly as the bull gores you with its horns" ; Array Maze2_north --> 0 0 0 0 1 2 3 0 0 ; Array P_otbl --> 10; Array C_table --> 180; Array Maze1_ceiling --> 0 0 0 12 13 0 0 16 0 ; Array P_prsi --> 50; Array Trunk_sequence --> B_OPEN_TRUNK B_OPEN_TRUNK B_OPEN_TRUNK B_OPEN_TRUNK B_OPEN_TRUNK B_OPEN_TRUNK B_WHITE B_GRAY B_BLACK B_RED B_BLACK B_OPEN_TRUNK B_RED B_PURPLE B_RED B_BLACK B_PURPLE B_OPEN_TRUNK B_GRAY B_PURPLE B_BLACK B_GRAY B_WHITE B_OPEN_TRUNK B_BLACK B_GRAY B_WHITE B_RED B_RED B_OPEN_TRUNK B_BLACK B_BLACK B_RED B_BLACK B_PURPLE B_OPEN_TRUNK B_PURPLE B_WHITE B_GRAY B_RED B_GRAY B_OPEN_TRUNK B_RED B_PURPLE B_BLACK B_PURPLE B_RED B_OPEN_TRUNK B_PURPLE B_BLACK B_BLACK B_BLACK B_RED B_OPEN_TRUNK B_RED B_GRAY B_PURPLE B_GRAY B_RED B_OPEN_TRUNK B_GRAY B_RED B_GRAY B_PURPLE B_RED B_OPEN_TRUNK B_BLACK B_BLACK B_PURPLE B_RED B_BLACK B_OPEN_TRUNK ; Array P_vtbl --> 4; Array Pitching_game_tbl table "You miss the rabbit by a mile!" "Your throw is way off!" "The rabbit hops obliviously as your throw sails far off target!" ; Array Maze1_floor --> 9; Array P_cctbl --> 4; Array P_lexv -> 59 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 ('invalidDictWord15104'/256) ('invalidDictWord15104'%256) ; Array Maze2_east --> 0 0 0 0 5 0 0 8 9 ; Array MazeObjects --> 40; Array Spells_memorized table 10; Array P_oclause --> 20; Array Maze1_north --> 0 0 0 0 1 2 3 0 0 ; Array Maze1_west --> 0 0 0 2 0 4 0 0 7 ; Array Infotater_codes --> 0 "bloodworm" "brogmoid" "dorn" "dryad" "grue" "hellhound" "kobold" "nabiz" "orc" "rotgrub" "surmin" "yipple" ; Array Degrees_of_need --> "a bit" "somewhat" "quite" "very" "extremely" "incredibly" "dangerously" ; Array P_prso --> 50; Array P_inbuf string 120; Array P_merge --> 50; Array Predictions --> 0 "a dried-up river bed, full of sharp rocks and muddy puddles. A dark cave beckons." "a field surrounded by fortified ramparts. A tattered flag flies atop a tall pole." "a brightly lit room. A tree fills the room, its branches twinkling with gold and silver." "a glittering midway filled with garish lights and honky-tonk music, surrounded by a spidery wooden structure." "a startling location of transparent walls, twinkling with reflected light." "a small room with a slanted roof, covered with black dust. The room is bathed in orange light." "a door of the whitest wood, opening slowly to reveal the face of Belboz, which quickly melts into a frightening visage of unspeakable malevolence." "a heated debate among the Guildmasters of the land, in the ancient Guild Hall at Borphee." "a pile of pure-white blocks, engraved with runes of power. Each block has a word written on it." ; Array First_turn_around_older_self --> 4; Array Mix_potions_tbl table "You turn into a spot of moss" "Your left ear turns into a carnivorous toad and devours your brain" "Your entire body, starting from the toes and moving upward, turns into gelatin" "Certain parts of your anatomy, including your pulmonary artery and adrenal gland, suddenly teleport seven feet to the west" ; Array Parrot_talk table "Pollibar want a cracker!" "Now where can I hide this key?" "You should never have let down your mindshield, you doddering old Enchanter." "This tea is cold! Get me another cup." "Where did I leave my spectacles?" "Belboz, the Circle is waiting for you." ; Array P_itbl --> 10; Array Last_turn_around_older_self --> 4; Array Potion_manufacturers --> 0 "Fibbsbozza" "Magicland" "Frobozz Magic Potion Company" ; Array Maze2_south --> 0 4 5 6 0 0 9 0 0 ; Array Memorized_counter_tbl --> "once" "twice" "thrice" "four times" "many times" ; Array Yuks_table table "No spell would help with that!" "It would take more magic than you've got!" "You can't be serious." "You must have had a silliness spell cast upon you." ; Array Indents --> " " " " " " " " " " " " ; Array Dreams table "You dream of being pursued through a dank cavern. Something is behind you, something horrible that you can't turn to face. It gets closer and closer, and you can feel its hot breath on your neck." "You dream of an idyllic scene in the country, a picnic of wood-sprites and dryads." "You dream of dancing penguins in formal dress. One has a particularly nice tuxedo and a cane with a gold top." "You dream of a river, slow and muddy. Great grey hippopotami sport there, bellowing and splashing, and twitching their ears." ; Array Maze2_west --> 0 0 0 0 0 4 0 0 7 ; Array Rank_tbl --> "Charlatan" "Parlor Magician" "Novice Enchanter" "Intermediate Enchanter" "Senior Enchanter" "Expert Enchanter" "Member of the Circle of Enchanters" "Sorcerer" "Leader of the Circle of Enchanters" ; Array First_turn_around_older_self --> 4; Array Wheel_items --> 0 "pot of gold" "clove of garlic" "noisome stew" "hot pepper sandwich" ; Array Maze2_ceiling --> 0 10 0 12 0 0 0 16 0 ; Array Maze2_floor --> 9; Array Ho_hum_table table " doesn't do anything." " accomplishes nothing." " has no desirable effect." ; Array Exhaustion_table --> "beginning to tire" "feeling tired" "getting more and more tired" "worn out" "dead tired" "so tired you can barely concentrate" "moving only on your last reserves of strength" "practically asleep" "unable to keep your eyes open for more than a few moments at a time" "about to keel over from exhaustion" ; Array Haunted_msg table "You feel a cold breath on your shoulder. You whirl around, but there is nothing there." "Something slimy brushes across your face." "An unseen door creaks slowly open." "Something slithers across your foot." "You feel a strange shiver in your chest, almost as though something had passed through your body." "From several directions comes a sound like rattling chains." "A long silence is suddenly broken by a piercing scream!" "A glowing apparition sails by, briefly illuminating a spiral staircase and wooden balcony." "A deep-throated chuckle echoes about the room." "A roller coaster car zooms past, almost knocking you over!" ; Array Hello_table table "Hello." "Good day." "Nice weather we've been having lately." "Good-bye." ; Array Spell_manufacturers table "Borphee Infotaters Incorporated" "SpellBound" "SoftSpel" "International Business Magic" "Spell Shack" "United Thaumaturgy" "Smoothscroll Draughtsmen" "Frobozz Magic Spell Company" ; Array Maze1_south --> 0 4 5 6 0 0 0 0 0 ; Array Maze1_east --> 0 0 3 0 5 0 0 8 9 ; Array Spells_list table gnusto_spell frotz_spell rezrov_spell izyuk_spell aimfiz_spell fweep_spell swanzo_spell golmac_spell vardik_spell pulver_spell meef_spell vezza_spell gaspar_spell yomin_spell yonk_spell malyon_spell ; Array Prepositions --> 19 'around' 237 'off' 238 'across' 239 'behind' 240 'under' 241 'at' 242 'away' 243 'from' 244 'through' 245 'in' 246 'over' 247 'on' 248 'down' 249 'out' 250 'up' 251 'with' 252 'about' 253 'for' 254 'to' 255 ; Array Actions --> VerboseSub BriefSub SuperbriefSub DiagnoseSub InventorySub QuitSub RestartSub RestoreSub SaveSub ScoreSub ScriptSub UnscriptSub VersionSub VerifySub DebugRandSub DebugCommSub DebugRecoSub DebugUnreSub AnswerSub AnswerObjSub InsertSub AskForSub AskAboutSub AttackSub BiteSub InflateSub SwitchOffSub BoardSub BurnSub ClimbSub ClimbOnSub ClimbUpSub ClimbDownSub ClimbOverSub LieOnSub CloseSub CombinationSub CompareSub CountSub CrossSub CutSub CurseSub DeflateSub DestroySub DigSub DisembarkSub DrinkSub DrinkFromSub DropSub EatSub EnterSub EnterObjSub ExitSub ExamineSub LookInSub FindSub BanishSub FillSub FlySub FollowSub ForgetSub GiveSub GiveReverseSub HelloSub HelpSub HideSub JumpSub KickSub KillSub KissSub KnockSub LandSub LaunchSub LeanOnSub LeaveSub SwitchOnSub ListenSub LockSub LookSub LookDownSub LookUnderSub LookBehindSub ReadSub ReadAboutSub LookObjSub LowerSub LowerInSub MeltSub MoveSub PaySub PayReverseSub PlaySub OpenSub PickSub TakeSub RepairSub GestureSub PourSub PumpUpSub SlideSub SlideReverseSub PutUnderSub PutOnSub WearSub PutBehindSub RaiseSub DefileSub ReachInSub RemoveSub TellSub CallSub SearchSub SendForSub ShakeSub SharpenSub ShootSub ShowSub ShowReverseSub LieDownSub SleepSub CavortSub SmellSub SpinSub SpraySub SprayReverseSub SqueezeSub RiseSub StandOnSub StrikeSub SwimSub SwingSub ThankSub ThrowAtSub ThrowOverSub TieSub TieWithSub TimeSub TortureSub TouchSub TurnSub UnlockSub UntieSub WaitSub WaitForSub WakeSub WalkAroundSub GoSub WalkToSub WaveSub YellSub PolishSub WhatSub WhereSub WhoSub HowlSub CastSub MemorizeSub SpellsSub CastAimfizSub CastAimfizToSub CastFrotzSub CastFweepSub CastGasparSub CastGnustoSub CastGolmacSub CastIzyukSub CastMeefSub CastMalyonSub CastPulverSub CastRezrovSub CastSwanzoSub CastVardikSub CastVezzaSub CastYominSub CastYonkSub ; Array Preactions --> 0 0 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PreExamineSub 0 0 0 0 0 0 0 PreGiveSub 0 0 0 0 0 PreKickSub 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PreReadSub PreReadAboutSub 0 0 0 0 0 0 0 0 PreKickSub 0 PreTakeSub 0 0 0 0 0 0 0 PrePutOnSub 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PreShowReverseSub 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 PreCastSpellSub 0 PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub PreCastSpellSub ; [ PickOne tbl ; return tbl-->random(tbl-->0); ]; [ FixedWidthFont ; 0-->8 = 0-->8 | 2; rtrue; ]; [ NotFixedWidthFont ; 0-->8 = 0-->8 & 65533; rtrue; ]; [ Main ; .labelXXX; P_lexv->0 = 59; Queue(LightningTimer,7)-->0 = true; Queue(HellhoundDaemon,65535)-->0 = true; Lit = true; player = protagonist; actor = player; location = Twisted_Forest; move player to location; SetPronoun(hellhound); ! not popped P_inbuf->0 = '<'; print "You are in a strange location, but you cannot remember how you got here. Everything is hazy, as though viewed through a gauze..."; new_line; new_line; LookSub(); ! not popped HellhoundDaemon(); ! not popped MainLoop(); ! not popped jump labelXXX; ]; [ MainLoop UNUSED ; .labelXXX; UNUSED = CommandLoop(); jump labelXXX; ]; [ CommandLoop icnt ocnt num cnt obj tbl v ptbl obj1 temp local11 ; P_redirected_noun = nothing; cnt = 0; obj = nothing; ptbl = true; P_won = Parser(); if (P_won) { icnt = P_prsi-->P_matchlen; ocnt = P_prso-->P_matchlen; if (P_it_objectobject && AccessibleP(P_it_objectobject)) { temp = false; .labelXXX; if (++cnt > icnt) { ! no code } else { if (P_prsi-->cnt ~= 72) jump labelXXX; P_prsi-->cnt = P_it_objectobject; temp = true; } if (~~temp) { cnt = 0; .labelXXX; if (++cnt > ocnt) { ! no code } else { if (P_prso-->cnt ~= 72) jump labelXXX; P_prso-->cnt = P_it_objectobject; } } cnt = 0; } 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) && (~~Blort_potion_drunk)) { P_quote_flag = false; P_cont = 0; TooDarkToSee(); ! not popped } else if (location == Chamber_of_Living_Death or Hall_of_Eternal_Pain) { P_quote_flag = false; P_cont = 0; AgonyMsg(); ! not popped } else { print "There isn't anything to "; temp = P_itbl-->1; if (action == ##Tell) { print "talk to"; } else if (P_oflag || P_merged) { print (address) temp-->0; } else { local11 = temp->2; Word_Print(local11,temp->3); ! not popped } print "!"; 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) { ReferringMsg(); ! not popped } } 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 (P_getflags == 1 && action == ##Take) { if (parent(obj1) ~= player or location or obj && parent(obj1) hasnt openable && parent(obj1) ~= fireplace) jump labelXXX; if (obj1 hasnt takeable && obj1 hasnt trytakebit) { jump labelXXX; } } if (action == ##Take && second && P_itbl-->6-->0 == 'all' && (noun notin second && InDeskP())) { jump labelXXX; } if (P_getflags == 1 && action == ##Drop && obj1 notin player && P_it_objectobject notin player) { jump labelXXX; } if (~~InScope(obj1)) { jump labelXXX; } if (obj1 == it) { print (name) P_it_objectobject; } else { print (name) obj1; } print ": "; } temp = true; v = Perform(action,noun,second); P_redirected_noun = noun; if (v ~= A_FAILURE) jump labelXXX; } } if (v ~= A_FAILURE && action ~= ##Superbrief or ##Brief or ##Tell && action ~= ##Version or ##Save or ##Verbose) { if (action == ##Unscript or ##Script or ##Restore) { ! no code } else { v = parent(player).action(M_BEFORE); } } if (v == A_FAILURE) { P_cont = 0; } } else { P_cont = 0; } if (~~P_won) rfalse; if (action == ##Superbrief or ##Brief or ##Tell or ##Version or ##Save or ##Verbose or ##Restart or ##Quit or ##Time or ##Unscript or ##Script or ##Score or ##DebugComm or ##DebugRand or ##Restore or ##DebugUnre or ##DebugReco) rtrue; v = Clocker(); return v; ]; [ InDeskP ; if (second ~= darkwood_desk || noun notin desk_drawer) rtrue; rfalse; ]; [ FakeOrphan what res ; Orphan(P_syntax,0); ! not popped print "Be specific: what object do you want to "; what = P_otbl-->1; if (~~what) { print "tell"; } else if (~~P_vtbl->2) { print (address) what-->0; } else { res = what->2; Word_Print(res,what->3); ! not popped P_vtbl->2 = 0; } P_oflag = true; P_won = false; DoYouWant(P_syntax->1); ! not popped "?"; ]; [ Perform act obj ind_obj v verbtmp objtmp indtmp ; verbtmp = action; objtmp = noun; indtmp = second; action = act; if (it == ind_obj or obj) { if (~~ind_obj) { FakeOrphan(); ! not popped return 2; } ReferringMsg(); ! not popped return 2; } noun = obj; if (noun && action ~= ##Go && noun ~= not_here_object) { SetPronoun(noun); ! not popped } second = ind_obj; if (not_here_object == noun or second) { v = DebugInfo("Not Here",Not_Here_Object_F); if (v) { P_won = false; jump labelXXX; } } obj = noun; ind_obj = second; v = DebugInfo("Actor",player.action); if (v) { ! no code } else { v = DebugInfo("Room (M-BEG)",parent(player).action,blighted_forest); if (v) { ! no code } else { v = DebugInfo("Preaction",Preactions-->act); if (v) { ! no code } else { if (ind_obj) { v = DebugInfo("PRSI",ind_obj.action); if (v) { jump labelXXX; } } if (obj && act ~= ##Go && parent(obj) && parent(obj).prop12) { v = DebugInfo("Container",parent(obj).prop12); if (v) { jump labelXXX; } } if (obj && act ~= ##Go) { v = DebugInfo("PRSO",obj.action); if (v) { jump labelXXX; } } v = DebugInfo(0,Actions-->act); if (~~v) { ! no code } } } } .labelXXX; action = verbtmp; noun = objtmp; second = indtmp; return v; ]; [ DebugInfo what rtn arg result ; if (~~rtn) rfalse; result = (arg ? (rtn(arg)) : (rtn())); return result; ]; [ Queue rtn ticks cint ; cint = QueueInterrupt(rtn); cint-->1 = ticks; return cint; ]; [ QueueInterrupt rtn int2flag end c int ; end = C_table + 300; 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 + 300; .labelXXX; if (c == end) { ++turns; 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; ]; [ PossibleDebuggingFunction ; rfalse; ]; [ Parser ptr=P_LEXSTART word val vrb len dir nw TEST tmpword num UNUSED cnt=65535 local13 local14 ; .labelXXX; if (++cnt > 9) { ! no code } else { if (~~P_oflag) { P_otbl-->cnt = P_itbl-->cnt; } P_itbl-->cnt = 0; jump labelXXX; } dir = player; nw = P_merged; adverb = 0; P_merged = false; global3 = 0; P_prso-->P_matchlen = 0; P_prsi-->P_matchlen = 0; P_buts-->P_matchlen = 0; if ((~~P_quote_flag) && player ~= actor) { player = actor; location = Meta_Loc(actor); Lit = LitP(location); } Casting_spell = false; if (GLOBAL182) { ptr = GLOBAL182; Unknown_Parser_Routine_I(global67,P_lexv); ! not popped if ((~~Superbrief) && actor == player) { new_line; } GLOBAL182 = 0; P_cont = 0; } else if (P_cont) { ptr = P_cont; if ((~~Superbrief) && actor == player && action ~= ##Call) { 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; } word = P_lexv-->ptr; if (word == 'oops') { if (P_lexv-->(ptr + 2) == './/' or ',//') { ptr = ptr + 2; --P_len; } if (P_len <= 1) { print "I can't help your clumsiness."; new_line; rfalse; } if (GLOBAL36-->0) { if (P_len > 2 && P_lexv-->(ptr + 2) == '"//') { print "Sorry, you can't correct mistakes in quoted text."; new_line; rfalse; } if (P_len > 2) { print "Warning: only the first word after OOPS is used."; new_line; } local14 = GLOBAL36-->0; global48-->local14 = P_lexv-->(ptr + 2); player = dir; local13 = P_lexv->(ptr * 2 + 6); local14 = P_lexv->(ptr * 2 + 7); Unknown_Parser_Routine_III(local13,local14,GLOBAL36-->0 * 2 + 3); ! not popped Unknown_Parser_Routine_I(global48,P_lexv); ! not popped P_len = P_lexv->1; ptr = GLOBAL36-->1; Unknown_Parser_Routine_II(GLOBAL158,P_inbuf); ! not popped jump labelXXX; } GLOBAL36-->3 = 0; print "There was no word to replace!"; new_line; rfalse; } if (word ~= 'again' or 'g//') { P_number = 0; } GLOBAL36-->3 = 0; .labelXXX; if (P_lexv-->ptr == 'again' or 'g//') { if (~~GLOBAL158->1) { print "Beg pardon?"; new_line; rfalse; } if (P_oflag) { print "It's difficult to repeat fragments."; new_line; rfalse; } if (~~P_won) { print "That would just repeat a mistake."; new_line; rfalse; } if (P_len > 1) { if (P_lexv-->(ptr + 2) == './/' or ',//' or 'then' || P_lexv-->(ptr + 2) == 'and') { ptr = ptr + 2 * 2; P_lexv->1 = P_lexv->1 - 2; jump labelXXX; } print "I couldn't understand that sentence."; new_line; rfalse; } ptr = ptr + 2; P_lexv->1 = P_lexv->1 - 1; .labelXXX; if (P_lexv->1 > 0) { Unknown_Parser_Routine_I(P_lexv,global67); ! not popped GLOBAL182 = ptr; } else { GLOBAL182 = 0; } player = dir; P_merged = nw; Unknown_Parser_Routine_II(GLOBAL158,P_inbuf); ! not popped Unknown_Parser_Routine_I(global48,P_lexv); ! not popped cnt = 65535; tmpword = P_cctbl; .labelXXX; if (++cnt > 9) { jump labelXXX; } P_itbl-->cnt = P_otbl-->cnt; jump labelXXX; } Unknown_Parser_Routine_I(P_lexv,global48); ! not popped Unknown_Parser_Routine_II(P_inbuf,GLOBAL158); ! not popped GLOBAL36-->1 = ptr; GLOBAL36-->2 = 4 * P_len; TEST = 2 * (ptr + 2 * P_lexv->1); local14 = P_lexv->(TEST - 1); GLOBAL36-->3 = local14 + P_lexv->(TEST - 2); GLOBAL182 = 0; TEST = 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 (~~P_len) { num = 0; } else { num = P_lexv-->(ptr + 2); } if (word == 'to' && vrb == #v$tell) { word = '"//'; } else if (word == 'then' && P_len > 0 && (~~vrb) && (~~P_quote_flag)) { if (UNUSED == 0 or 16277['.//'?]) { word = 'the'; } else { P_itbl-->0 = #v$tell; 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$advance && (TEST == 1[?] || (TEST == 2[?] && vrb == #v$advance) || (num == 22444['then'?] or 16277['.//'?] or 16319['"//'?] && TEST >= 2) || (P_quote_flag && TEST == 2[?] && num == 16319['"//'?]) || (TEST > 2 && num == 16284[',//'?] or 16445['and'?]))) { tmpword = val; if (num == 16284[',//'?] or 16445['and'?]) { P_lexv-->(ptr + 2) = 'then'; } if (TEST > 2) jump labelXXX; P_quote_flag = false; } else { 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; cnt = ptr * 2 + 2; P_vtbl->2 = P_lexv->cnt; P_vtbl->3 = P_lexv->(cnt + 1); } else { val = Wt(word,PS_PREPOSITION,P1_OBJECT); if (~~val) { if (word ~= 'all' or 'one' or 'both' && (~~Wt(word,PS_ADJECTIVE)) && (~~Wt(word,PS_OBJECT))) jump labelXXX; val = 0; } if (P_len > 1 && num == 20365['of'?] && (~~val) && word ~= 'all' or 'one' or 'a//') { len = 1; } else if (val && ((~~P_len) || num == 22444['then'?] or 16277['.//'?])) { global3 = 1[?]; 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; GLOBAL69 = vrb; ptr = Clause(ptr,val,word); if (~~ptr) rfalse; if (ptr < 0) { P_quote_flag = false; jump labelXXX; .labelXXX; if (word == 'of') { if ((~~len) || num == 16277['.//'?] or 22444['then'?]) { Cant_Use(ptr); ! not popped rfalse; } len = 0; } else if (Wt(word,PS_BUZZ_WORD)) { ! no code } else { if (vrb == #v$tell && Wt(word,PS_VERB,P1_VERB) && player == actor) { 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; UNUSED = word; ptr = ptr + 2; jump labelXXX; } } } .labelXXX; GLOBAL36-->0 = 0; if (tmpword) { action = ##Go; PossibleDebuggingFunction(); ! not popped noun = tmpword; P_oflag = false; Direction = tmpword; P_cctbl = tmpword; return P_cctbl; } if (P_oflag) { Orphan_Merge(); ! not popped } Direction = 0; P_cctbl = 0; if ((~~Syntax_Check()) || (~~Snarf_Objects()) || (~~Many_Check()) || (~~Take_Check())) rfalse; rtrue; ]; [ Unknown_Parser_Routine_I ptr optr local3=29 local4=1 local5=1 local6 ; optr->0 = ptr->0; optr->1 = ptr->1; .labelXXX; optr-->local4 = ptr-->local4; local6 = local4 * 2 + 2; optr->local6 = ptr->local6; local6 = local4 * 2 + 3; optr->local6 = ptr->local6; local4 = local4 + 2; if (++local5 <= local3) jump labelXXX; rtrue; ]; [ Unknown_Parser_Routine_II ptr optr ndx ; ndx = ptr->0 - 1; .labelXXX; optr->ndx = ptr->ndx; if (--ndx >= 0) jump labelXXX; rtrue; ]; [ Unknown_Parser_Routine_III local1 local2 local3 local4 local5 local6 local7 ; local6 = GLOBAL36-->3; if (local6) { local4 = local6; } else { local6 = GLOBAL36-->2; local7 = global48->local6; local4 = local7 + global48->(local6 + 1); } GLOBAL36-->3 = local4 + local1; .labelXXX; local7 = local4 + local5; GLOBAL158->local7 = P_inbuf->(local2 + local5); ++local5; if (local5 ~= local1) jump labelXXX; global48->local3 = local4; global48->(local3 - 1) = local1; 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 flag flag=true wd 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) { wd = 0; } else { wd = P_lexv-->(ptr + 2); } if (word == 'and' or ',//') { flag = true; } else if (word == 'all' or 'one' or 'both') { if (wd == 'of') { --P_len; ptr = ptr + 2; } } else { if (word == 'then' or './/' || (Wt(word,PS_PREPOSITION) && P_itbl-->0 && (~~flag))) { ++P_len; cnt = num + 1; P_itbl-->cnt = P_lexv + ptr * 2; return ptr - 2; } if (Wt(word,PS_OBJECT)) { if (P_len > 0 && wd == 'of' && word ~= 'all' or 'one') { ! no code } else if (Wt(word,PS_ADJECTIVE,P1_ADJECTIVE) && wd && Wt(wd,PS_OBJECT)) { ! no code } else { if ((~~flag) && wd ~= 'but' or 'except' && wd ~= 'and' or ',//') { cnt = num + 1; P_itbl-->cnt = P_lexv + (ptr + 2) * 2; return ptr; } flag = 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 (flag && ((~~P_itbl-->0) || 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; flag = 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 == 58) { 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 local8 ; P_oflag = false; word = P_itbl-->1-->0; local8 = Wt(word,PS_VERB,P1_VERB); if (local8 == P_otbl-->0 || Wt(word,PS_ADJECTIVE)) { adj = true; } else if (Wt(word,PS_OBJECT,P1_OBJECT) && (~~P_ncn)) { P_itbl-->0 = 0; P_itbl-->1 = 0; P_itbl-->6 = P_lexv + 2; P_itbl-->7 = P_lexv + 6; P_ncn = 1; } verb = P_itbl-->0; if (verb && (~~adj) && verb ~= P_otbl-->0 || P_ncn == 2) rfalse; if (P_otbl-->6 == 1) { temp = P_itbl-->2; if (temp ~= P_otbl-->2 && temp) rfalse; if (adj) { P_otbl-->6 = P_lexv + 2; if (~~P_itbl-->7) { P_itbl-->7 = P_lexv + 6; } if (~~P_ncn) { P_ncn = 1; } } else { P_otbl-->6 = P_itbl-->6; } P_otbl-->7 = P_itbl-->7; } else if (P_otbl-->8 == 1) { temp = P_itbl-->2; if (temp ~= P_otbl-->4 && temp) rfalse; if (adj) { P_itbl-->6 = P_lexv + 2; if (~~P_itbl-->7) { 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) { NClauseWin(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 == 'one') { NClauseWin(adj); ! not popped jump labelXXX; } if (word->4 & 128 == 128) { if (word == P_anam) { NClauseWin(adj); ! not popped jump labelXXX; } AClause_Win(); ! 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; P_vtbl-->0 = global134-->0; P_vtbl->2 = global134->2; P_vtbl->3 = global134->3; P_otbl-->1 = P_vtbl; P_vtbl->2 = 0; .labelXXX; if (++cnt > 9) { P_merged = true; rtrue; } P_itbl-->cnt = P_otbl-->cnt; jump labelXXX; ]; [ NClauseWin otbl ; P_itbl-->0 = P_otbl-->0; P_cctbl-->0 = P_aclause; P_cctbl-->1 = P_aclause + 1; P_cctbl-->2 = P_aclause; P_cctbl-->3 = P_aclause + 1; Clause_Copy(P_otbl,P_otbl,otbl); ! not popped if (P_otbl-->8) { P_ncn = 2; } P_aclause = P_VERB; rtrue; ]; [ AClause_Win ; P_cctbl-->0 = P_NC1; P_cctbl-->1 = P_NC1L; P_cctbl-->2 = P_aclause; P_cctbl-->3 = P_aclause + 1; Clause_Copy(P_itbl,P_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 ; GLOBAL36-->0 = ptr; if (action == ##Call) { 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 == ##Call) { 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 bits local4 local5 local6 local7 vrb local9 local10 local11 ; 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; .labelXXX; bits = syn->0 & 3; if (P_ncn > bits) { ! no code } else { if (bits >= 1 && (~~P_ncn)) { local7 = P_itbl-->2; if ((~~local7) || local7 == syn->1) { local5 = syn; jump labelXXX; } } local11 = syn->1; if (local11 == P_itbl-->2) { if (bits == 2 && P_ncn == 1) { local6 = syn; } else { local11 = syn->2; if (local11 == P_itbl-->4) { Syntax_Found(syn); ! not popped rtrue; } } } } .labelXXX; if (--len < 1) { if (local5) jump labelXXX; if (local6) { jump labelXXX; } print "That sentence isn't one I recognize."; new_line; rfalse; } syn = syn + 8; jump labelXXX; .labelXXX; if (local5) { local10 = local5->3; local11 = local5->5; local4 = GWim(local10,local11,local5->1); if (local4) { P_prso-->P_matchlen = 1; P_prso-->1 = local4; return Syntax_Found(local5); } } if (local6) { local10 = local6->4; local11 = local6->6; local4 = GWim(local10,local11,local6->2); if (local4) { P_prsi-->P_matchlen = 1; P_prsi-->1 = local4; return Syntax_Found(local6); } } if (vrb == #v$find) { print "That question can't be answered."; new_line; rfalse; } if (player ~= actor) { return Cant_Orphan(); } Orphan(local5,local6); ! not popped print "What do you want to "; local9 = P_otbl-->1; if (~~local9) { print "tell"; } else if (~~P_vtbl->2) { print (address) local9-->0; } else { local11 = local9->2; Word_Print(local11,local9->3); ! not popped P_vtbl->2 = 0; } if (local6) { print " "; Clause_Print(P_VERBN,P_VERBN); ! not popped } P_oflag = true; DoYouWant((local5 ? (local5->1) : (local6->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 ; if (~~P_merged) { P_oclause-->P_matchlen = 0; } global134-->0 = P_vtbl-->0; global134->2 = P_vtbl->2; global134->3 = P_vtbl->3; .labelXXX; if (++cnt > 9) { ! no code } else { P_otbl-->cnt = P_itbl-->cnt; jump labelXXX; } if (P_ncn == 2) { P_cctbl-->0 = P_NC2; P_cctbl-->1 = P_NC2L; P_cctbl-->2 = P_NC2; P_cctbl-->3 = P_NC2L; Clause_Copy(P_itbl,P_otbl); ! not popped } if (P_ncn >= 1) { P_cctbl-->0 = P_NC1; P_cctbl-->1 = P_NC1L; P_cctbl-->2 = P_NC1; P_cctbl-->3 = P_NC1L; Clause_Copy(P_itbl,P_otbl); ! not popped } if (d1) { P_otbl-->2 = d1->1; P_otbl-->6 = 1; rtrue; } if (~~d2) rfalse; P_otbl-->4 = d2->2; P_otbl-->8 = 1; rtrue; ]; [ Clause_Print beg_ptr end_ptr the_p beginning ; if (beg_ptr) { the_p = P_itbl-->6; beginning = P_itbl-->7; } else { the_p = P_itbl-->8; beginning = P_itbl-->9; } return Buffer_Print(the_p,beginning,end_ptr); ]; [ Buffer_Print beg end cp nosp=true wrd first=true not_prefixed pn local9 ; .labelXXX; if (beg == end) rtrue; wrd = beg-->0; if (wrd == ',//') { print ", "; } else if (nosp) { nosp = false; } else { print " "; } if (wrd == './/' or ',//') { nosp = true; } else if (wrd == 'me') { print (name) yourself1; not_prefixed = true; } else if (wrd == 'intnum') { print P_number; not_prefixed = true; } else { if (first && (~~not_prefixed) && cp) { print "the "; } if (P_oflag || P_merged) { print (address) wrd; } else if (wrd == 'it' && AccessibleP(P_it_objectobject)) { print (name) P_it_objectobject; } else { local9 = beg->2; Word_Print(local9,beg->3); ! not popped } first = false; } beg = beg + 4; jump labelXXX; ]; [ DoYouWant obj prep ; if (~~obj) rfalse; print " "; if (obj == gnome1) { print "through"; rtrue; } prep = Prep_Find(obj); print (address) prep; rtrue; ]; [ Clause_Copy bptr eptr insrt beg end local6 ; beg = bptr-->(P_cctbl-->0); end = bptr-->(P_cctbl-->1); local6 = P_cctbl-->2; eptr-->local6 = P_oclause + (P_oclause-->P_matchlen * 2 + 2); .labelXXX; if (beg == end) { local6 = P_cctbl-->3; eptr-->local6 = 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 == dry_land) { 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; print "("; if (prep && (~~global3)) { prep = Prep_Find(prep); print (address) prep; if (prep == 'out') { print " of"; } print " "; if (obj == your_hand) { print "your hands"; } else { print "the ", (name) obj; } print ")"; new_line; return obj; } print (name) obj, ")"; new_line; return obj; } P_gwimbit = 0; rfalse; ]; [ Snarf_Objects ptr local2 local3 ; P_buts-->P_matchlen = 0; local2 = P_itbl-->8; if (local2) { P_slocbits = P_syntax->6; if (~~Snarfem(local2,P_itbl-->9,P_prsi)) rfalse; } 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) rtrue; local3 = P_prso-->P_matchlen; if (ptr) { P_prso = But_Merge(P_prso); } if ((~~local2) || (ptr && local3 ~= P_prso-->P_matchlen)) 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 local9 ; P_GLOBAL118 = 0; if (P_getflags == 1) { local9 = 1[?]; } P_getflags = 0; tbl-->P_matchlen = 0; word = ptr-->0; .labelXXX; if (ptr == eptr) { wv = Get_Object((but ? but : tbl)); if (local9) { P_getflags = 1; } return wv; } if (eptr == ptr + 4) { nw = 0; } else { nw = ptr-->2; } if (word == 'all' or 'both') { 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_GLOBAL118 = 1[?]; 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 && Adj_Check(word)) { 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; ]; [ Adj_Check wrd ; if (P_adj && wrd == 'enchant' or 'spell' or 'castle' or 'river') rfalse; if ((~~P_adj) || P_adj ~= 'upper' or 'lower') rtrue; rfalse; ]; [ 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) { if (Wt(P_adjn,PS_OBJECT,P1_OBJECT)) { P_name = P_adjn; P_adj = 0; } else if (~~PossibleDebuggingFunction()) { ! no code } } 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 || Blort_potion_drunk) { give actor ~transparent; Do_SL(location,SOG,SIR); ! not popped give actor transparent; } Do_SL(actor,SH,SC); ! not popped if (tbl-->0 == tlen) { if (P_adj && P_name == 'spell' or 0) { P_name = P_adjn; } MatchSpell(tbl,P_name); ! 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) { P_slocbits = xbits; if (Lit || Blort_potion_drunk || action == ##What or ##Where or ##Tell || action == ##CastFrotz or ##Who) { Obj_Found(200[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_moby_flag = true; P_slocbits = 65535; P_table = list; 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(unnamed2,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_moby_flag = false; 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_GLOBAL118) { print (address) (P_name ? P_name : (P_adj ? P_adjn : "one")); } else { Clause_Print(((list ~= P_prso) ? P_VERB : P_VERBN)); ! 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)) { prev_location = location; pseudo.action = rmg-->(cnt * 2 + 1); foo = pseudo.&action - 5; foo-->0 = P_name-->0; foo-->1 = P_name-->1; Obj_Found(252[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(local_globals,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 openable && (nobj = child(obj)) ~= nothing && (obj has open || obj has transparent || P_moby_flag)) { fls = Search_List(obj,tbl,((obj has openable) ? 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) { if (~~AccessibleP(P_it_objectobject)) { print "I don't see what you're referring to."; new_line; rfalse; } obj = P_it_objectobject; } if (ThingInPlayer(obj) || obj == your_hand or yourself1) jump labelXXX; noun = obj; if (obj has trytakebit) { taken = true; } else if (player ~= actor) { taken = false; } else if (bits & 8 == 8 && ITake(false) == A_SUCCESS) { taken = false; } else { taken = true; } if (taken && bits & 2 == 2 && player == actor) { if (obj == not_here_object) { print "You don't have that!"; new_line; rfalse; } print "You don't have "; if (tbl-->P_matchlen > 1) { print "all those things"; } else if (obj == not_here_object) { print "that"; } else { print "the ", (name) obj; SetPronoun(obj); ! not popped } print "."; new_line; rfalse; } if (taken || player ~= actor) 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) { return tbl + cnt * 2; } 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 (Player_frotzed && player == actor) rtrue; P_gwimbit = light; oldroom = location; location = room; if (darkflag && room has light) { islit = true; } else { if (PossibleDebuggingFunction()) rtrue; 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; ]; [ This_It_P obj UNUSED1 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; ]; [ AccessibleP obj env local3 ; env = parent(obj); if (obj has concealed) rfalse; if (obj == pseudo) { if (prev_location ~= location) rfalse; rtrue; } if (~~env) rfalse; if (env == local_globals || (env == unnamed2 && InRoomContains(obj,location))) rtrue; local3 = Meta_Loc(obj); if (local3 ~= location or parent(player)) rfalse; if (env == player or location or parent(player)) rtrue; if (env hasnt open || (~~AccessibleP(env))) rfalse; rtrue; ]; [ Meta_Loc obj ; .labelXXX; if (~~obj) rfalse; if (obj in local_globals) { return local_globals; } if (obj in Room_Holder) { return obj; } obj = parent(obj); jump labelXXX; ]; [ VerboseSub ; verbose = true; Superbrief = false; print "Maximum verbosity."; new_line; new_line; return LookSub(); ]; [ BriefSub ; verbose = false; Superbrief = false; "Brief descriptions."; ]; [ SuperbriefSub ; Superbrief = true; "Superbrief descriptions."; ]; [ DiagnoseSub hungry_p ; if (exhausted < 0) { print "You are wide awake"; } else { print "You are ", (string) Exhaustion_table-->exhausted; } print ", and you are in good health."; if (Hunger_cnt > 0 || Thirst_cnt > 0) { print " You feel "; if (Hunger_cnt > 0) { hungry_p = true; print (string) Degrees_of_need-->Hunger_cnt, " hungry"; } if (Thirst_cnt > 0) { if (hungry_p) { print ", and "; } print (string) Degrees_of_need-->Thirst_cnt, " thirsty"; } print "."; } if (Bitten_p) { print " You have a small bite on your hand which doesn't seem too serious."; } new_line; rtrue; ]; [ InventorySub ; if (child(protagonist) ~= nothing) { return PrintCont(protagonist); } print "You are empty-"; if (Bat_p) { print "taloned"; } else { print "handed"; } "."; ]; [ QuitSub ; ScoreSub(); ! not popped Confirmation_msg("leave the game"); ! not popped if (Confirm()) { @quit; rtrue; } "Ok."; ]; [ RestartSub ; ScoreSub(); ! not popped Confirmation_msg("restart"); ! not popped if (~~Confirm()) rfalse; print "Restarting."; new_line; @restart; "Failed."; ]; [ Confirmation_msg msg ; new_line; print "Do you wish to ", (string) msg, "? (Y is affirmative): "; rtrue; ]; [ EndGame printscore ; new_line; if (~~printscore) { ScoreSub(); ! not popped new_line; } print "Would you like to restart the game from the beginning, restore a saved game position, or end this session of the game? (Type RESTART, RESTORE, or QUIT):^^>"; P_inbuf->0 = '@{a}'; @sread P_inbuf P_lexv; P_inbuf->0 = '<'; if (P_lexv-->1 == 'restart') { @restart; print "Failed."; new_line; return EndGame(true); } if (P_lexv-->1 == 'restore') { RestoreSub(); ! not popped return EndGame(true); } if (P_lexv-->1 == 'quit' or 'q//') { @quit; rtrue; } return EndGame(true); ]; [ Confirm ; .labelXXX; print ">"; P_inbuf->0 = '@{a}'; @sread P_inbuf P_lexv; P_inbuf->0 = '<'; if (P_lexv-->1 == 'yes' or 'y//') rtrue; if (P_lexv-->1 == 'no' or 'n//') rfalse; print "Please type YES or NO."; new_line; new_line; jump labelXXX; ]; [ RestoreSub ; @restore ?rfalse; "Failed."; ]; [ SaveSub ; @save ?~labelXXX; "Ok."; .labelXXX; "Failed."; ]; [ ScoreSub ; if (Paradox) { print "If you still existed, your score would be "; } else { print "Your score is "; } print score, " of a possible 400, in ", turns, " move"; if (turns ~= 1) { print "s"; } print ". This puts you in the class of "; if (score < 0) { print "Menace to Society"; } else { print (string) Rank_tbl-->(score / 50); } "."; ]; [ ScriptSub ; 0-->8 = 0-->8 | 1; print "Here begins", (string) Transcript_msg; new_line; return VersionSub(); ]; [ UnscriptSub ; print "Here ends", (string) Transcript_msg; new_line; VersionSub(); ! not popped 0-->8 = 0-->8 & 65534; rtrue; ]; [ VersionSub offset=17 ; print "SORCERER^Infocom interactive fiction - a fantasy story^Copyright (c) 1984 by Infocom, Inc. All rights reserved.^SORCERER is a trademark of Infocom, Inc.^Release ", 0-->1 & 2047, " / Serial number "; .labelXXX; if (++offset > 23) { ! no code } else { print (char) 0->offset; jump labelXXX; } new_line; rtrue; ]; [ VerifySub ; if (noun == number && P_number == 502) { print 7; new_line; rtrue; } print "Performing the VERIFY spell..."; new_line; @verify ?~labelXXX; "Good."; .labelXXX; new_line; "** Bad **"; ]; [ DebugCommSub ; @input_stream 1; rtrue; ]; [ DebugRandSub ; if (noun ~= number) { "Illegal call to #RANDOM."; } random(0 - P_number); ! not popped rtrue; ]; [ DebugRecoSub ; @output_stream 4; rtrue; ]; [ DebugUnreSub ; @output_stream 65532; rtrue; ]; [ WakeSub ; if (noun == Room_Holder) { Perform(##Wake,yourself1); ! not popped rtrue; } print "I don't think that"; PrintName(noun,true); ! not popped " is sleeping."; ]; [ AnswerSub ; print "Nobody seems to be awaiting your answer."; new_line; return StopParse(); ]; [ AskAboutSub ; if (noun == yourself1) { Perform(##Tell,yourself1); ! not popped rtrue; } if (noun has animate) { print "After a moment's thought,"; PrintName(noun,true); ! not popped print " denies any knowledge of"; PrintName(second,true); ! not popped print "."; if (noun == second) { print " (Rather disingenuous, if you ask me.)"; } new_line; rtrue; } Perform(##Tell,noun); ! not popped rtrue; ]; [ AskForSub ; if (noun == your_younger_self && second == spell_book && GivenASpellbookP()) rtrue; print "Unsurprisingly,"; PrintName(noun,true); ! not popped " is not likely to oblige."; ]; [ AttackSub ; return ActuallyAttackSub("attack"); ]; [ BiteSub ; return HackHack("Biting"); ]; [ PreBoardSub env ; env = parent(protagonist); if (noun has vehicle) { if (Flying_p) { WhileFlying(); ! not popped return 2; } if (env hasnt vehicle) rfalse; print "You are already in"; PrintName(noun,true); ! not popped print "!"; new_line; return 2; } print "You can't get into"; PrintName(noun,true); ! not popped print "!"; new_line; return 2; ]; [ BoardSub ; move protagonist to noun; print "You are now in"; PrintName(noun,true); ! not popped print "."; new_line; return noun.action(M_ENTER); ]; [ BurnSub ; if (~~second) { "Your blazing gaze is insufficient."; } return WithAbsurd(); ]; [ LookObjSub ; "Use prepositions to indicate precisely what you want to do: LOOK AT the object, LOOK INSIDE it, LOOK UNDER it, etc."; ]; [ ClimbDownSub ; if (noun == Room_Holder) { return Do_Walk(d_to); } return DeflateSub(); ]; [ ClimbSub ; if (noun == Room_Holder) { return Do_Walk(u_to); } return DeflateSub(); ]; [ ClimbOnSub ; if (noun has vehicle) { Perform(##Board,noun); ! not popped rtrue; } print "You can't climb onto"; PrintName(noun,true); ! not popped "."; ]; [ ClimbOverSub ; "You can't do that."; ]; [ ClimbUpSub ; if (noun == Room_Holder) { return Do_Walk(u_to); } return DeflateSub(); ]; [ CloseSub ; if (noun has paper) { return HowToDoThat(); } if (noun has animate) { "Huh?"; } if (noun has openable) { print "There's no way to close"; PrintName(noun); ! not popped "."; } if (noun has door) { if (noun has open) { print "Okay,"; PrintName(noun,true); ! not popped print " is now closed."; new_line; give noun ~open; rtrue; } return AlreadyClosed(); } if (noun has container || noun == journal) { if (noun has open) { give noun ~open; print "Closed."; Lit = LitP(location); if ((~~Lit) && (~~Blort_potion_drunk)) { print " "; ItIsDarkNow(); ! not popped } new_line; rtrue; } return AlreadyClosed(); } return HowToDoThat(); ]; [ CombinationSub ; if (your_younger_self in location && noun == number) { "Don't tell me. Talk to your confused twin over there."; } "What are you talking about?"; ]; [ CompareSub ; return LieDownSub(); ]; [ CountSub ; "You have lost your mind."; ]; [ CrossSub ; "You can't cross that!"; ]; [ CurseSub ; "Such language from an Enchanter!"; ]; [ CutSub ; if (noun has animate) { Perform(##Kill,noun,second); ! not popped rtrue; } if (noun has paper && second has weapon) { move noun to combination_dial; print "Your skillful", (name) second, "smanship slices"; PrintName(noun,true); ! not popped " into slivers, which vanish."; } if (second hasnt weapon) { print "I doubt that the ~cutting edge~ of"; PrintName(second); ! not popped " is adequate."; } print "Strange concept, cutting"; PrintName(noun,true); ! not popped "...."; ]; [ DeflateSub ; "Bizarre."; ]; [ DigSub ; if (Flying_p) { return WhileFlying(); } return LieDownSub(); ]; [ DisembarkSub ; if (parent(protagonist) ~= noun) { LookAroundMsg(); ! not popped return 2; } print "You are now on your feet."; new_line; move protagonist to location; rtrue; ]; [ DrinkSub local1 ; "You can't drink that!"; ]; [ DrinkFromSub local1 ; if (noun == water) { Perform(##Drink,noun); ! not popped rtrue; } if (noun has vial) { if (noun has open) { if (child(noun) ~= nothing) { local1 = child(noun); Perform(##Drink,local1); ! not popped rtrue; } "The vial is empty."; } "The vial is closed!"; } "How peculiar!"; ]; [ DropSub ; if (~~Idrop()) rfalse; if (location == Coal_Bin_Room or Dial_Room && noun.size < 20) { return DisappearInCoal("drop"); } if (location == Haunted_House) { move noun to combination_dial; } "Dropped."; ]; [ EatSub ; "Did they teach you to eat that in survival school?"; ]; [ EnterSub local1 ; local1 = FindIn(location,vehicle); if (local1) { Perform(##Board,local1); ! not popped rtrue; } return Do_Walk(in_to); ]; [ PreExamineSub ; if (Lit || Blort_potion_drunk) rfalse; return TooDarkToSee(); ]; [ ExamineSub ; if (noun.text_string) { Perform(##Read,noun); ! not popped rtrue; } if (noun has door) { return LookInSub(); } if (noun has container) { if (noun has open) { return LookInSub(); } "It's closed."; } if (noun has light) { print "Someone must have cast the frotz spell on"; PrintName(noun,true); ! not popped ", because it is glowing brightly."; } print "You see nothing special about"; PrintName(noun,true); ! not popped "."; ]; [ ExitSub ; if (noun has vehicle) { Perform(##Disembark,noun); ! not popped rtrue; } return Do_Walk(out_to); ]; [ BanishSub ; "You can't do that with mere words!"; ]; [ FillSub ; if (~~second) { if (InRoomContains(water,location)) { Perform(##Fill,noun,water); ! not popped rtrue; } "There's nothing to fill it with."; } "Huh?"; ]; [ FindSub print_msg env ; env = parent(noun); if (noun == your_hand) { "Within six feet of your head, assuming you haven't left that somewhere."; } if (noun == yourself1) { "You're around here somewhere..."; } if (noun in protagonist) { "You have it!"; } if (noun in location || noun == pseudo) { if (noun has animate) { print "He's"; } else { print "It's"; } " right in front of you."; } if (noun in unnamed2) { "You're the magician!"; } if (env has animate && InScope(env)) { print "As far as you can tell,"; PrintName(env,true); ! not popped " has it."; } if (env has container && InScope(env)) { print "It's in"; PrintName(env,true); ! not popped "."; } if (print_msg) { "Beats me."; } "You'll have to do that yourself."; ]; [ FirstLook ; if ((~~Describe_Room()) || Superbrief) rfalse; return Describe_Objects(); ]; [ FlySub ; if ((~~noun) || noun == yourself1) { if (Flying_p) { "You are!"; } "Perhaps a spell would be useful..."; } if (noun == Fly_dir_obj_unused) { Perform(##Go,noun); ! not popped rtrue; } print "You can't make"; PrintName(noun,true); ! not popped " fly!"; ]; [ FollowSub ; if (noun in location) { print "But"; PrintName(noun,true); ! not popped " is right here!"; } if (noun == Turret && Mailman_here) { return Do_Walk(s_to); } return LieDownSub(); ]; [ ForgetSub ; "You might also try not thinking about a purple hippopotamus!"; ]; [ PreGiveSub ; if (~~ThingInPlayer(noun)) { "That's easy for you to say since you don't even have it."; } if (noun hasnt spell) rfalse; "The spell is permanently inscribed in your spell book!"; ]; [ GiveSub ; if (second hasnt animate) { print "You can't give"; PrintName(noun); ! not popped print " to"; PrintName(second); ! not popped "!"; } print "Politely,"; PrintName(second,true); ! not popped " refuses your offer."; ]; [ HelloSub ; if (noun) { if (noun has animate) { print "Silently,"; PrintName(noun,true); ! not popped " bows his head to you in greeting."; } print "Only schizophrenics say ~Hello~ to"; PrintName(noun); ! not popped "."; } print (string) PickOne(Hello_table); new_line; rtrue; ]; [ HelpSub ; "If you're really stuck, maps and InvisiClues hint booklets are available. If you have misplaced the order form that came in your package, send us a note at:^ P.O. Box 620^ Garden City, NY 11530^ Dept. Z5^and we'll be happy to send you an order form."; ]; [ HideSub ; if (~~noun) { print "There's no place to hide here."; new_line; return 2; } if (second && second has animate) { print "Why hide it when"; PrintName(second,true); ! not popped " isn't interested in it."; } if (second) rfalse; "From what? From whom? Why?"; ]; [ InflateSub ; "How can you inflate that?"; ]; [ KickSub ; return HackHack("Kicking"); ]; [ KillSub ; return ActuallyAttackSub("kill"); ]; [ ActuallyAttackSub towhat ; if (~~noun) { print "There is nothing here to ", (string) towhat, "."; new_line; } else if ((~~second) && ThingInPlayer(diamond_studded_knife)) { second = diamond_studded_knife; print "(with the ", (name) second, ")"; new_line; Perform(##Kill,noun,second); ! not popped rtrue; } if (noun hasnt animate && noun ~= boa_constrictor or hellhound or ferocious_dorn_beast) { print "I've known strange people, but fighting"; PrintName(noun); ! not popped "?"; } if ((~~second) || second == your_hand) { print "Trying to ", (string) towhat; PrintName(noun); ! not popped " with your bare hands is suicidal."; } if (second notin protagonist) { print "You aren't even holding"; PrintName(second,true); ! not popped "."; } if (second hasnt weapon) { print "Trying to ", (string) towhat; PrintName(noun,true); ! not popped print " with"; PrintName(second); ! not popped " is suicidal."; } "You'd never survive the attack."; ]; [ KnockSub ; if (noun has door) { "Nobody's home."; } print "Why knock on"; PrintName(noun); ! not popped "?"; ]; [ KissSub ; "I'd sooner kiss a pig."; ]; [ SwitchOffSub ; if (noun has switchable) { if (noun hasnt light) { "It is already off."; } give noun ~light; if (Lit) { Lit = LitP(location); } print "Okay,"; PrintName(noun,true); ! not popped print " is now off."; new_line; Lit = LitP(location); if (Lit || Blort_potion_drunk) rtrue; ItIsDarkNow(); ! not popped new_line; rtrue; } if (noun has light) { "How? It's glowing by magic."; } "You can't turn that off."; ]; [ SwitchOnSub ; if (noun has switchable) { if (noun has light) { "It is already on."; } give noun light; print "Okay,"; PrintName(noun,true); ! not popped print " is now on."; new_line; if (Lit || Blort_potion_drunk) rtrue; Lit = LitP(location); new_line; LookSub(); ! not popped rtrue; } "You can't turn that on."; ]; [ LandSub ; if (Flying_p) { "You'll have to wait for the spell to wear off."; } return LookAroundMsg(); ]; [ LaunchSub ; if (noun has vehicle) { "You can't launch that by saying ~launch~!"; } "Huh?"; ]; [ LeanOnSub ; "Are you so very tired, then?"; ]; [ JumpSub ; if (Flying_p) { return WhileFlying(); } if (noun) { if (noun in location) { return CavortSub(); } "That would be a good trick."; } if (location == River_Bank_Room or Drawbridge or Top_of_Falls or Turret or Edge_of_Chasm or Bare_Passage or Tree_Branch or Gun_Emplacement || On_rollercoaster) { return JigsUp("This was not a safe place to try jumping. You should have looked before you leaped."); } if (location == Surface_of_Lagoon or Drawbridge or Coal_Bin_Room or Top_of_Chute) { return Do_Walk(d_to); } return CavortSub(); ]; [ LeaveSub ; return Do_Walk(out_to); ]; [ LieOnSub ; Perform(##Sleep); ! not popped rtrue; ]; [ ListenSub ; print "At the moment,"; PrintName(noun,true); ! not popped " makes no sound."; ]; [ LockSub ; print (string) PickOne(Yuks_table); new_line; rtrue; ]; [ LookSub ; if (~~Describe_Room(true)) rfalse; return Describe_Objects(true); ]; [ LookBehindSub ; print "There is nothing behind"; PrintName(noun,true); ! not popped "."; ]; [ LookDownSub ; if ((~~Lit) && (~~Blort_potion_drunk)) { return TooDarkToSee(); } if (noun == Room_Holder) { Perform(##Examine,ground); ! not popped rtrue; } Perform(##LookIn,noun); ! not popped rtrue; ]; [ LookInSub ; if (noun has animate) { "There is nothing special to be seen."; } if (noun has openable) { if (child(noun) ~= nothing) { return PrintCont(noun); } print "There is nothing on"; PrintName(noun,true); ! not popped "."; } if (noun has door) { print "All you can tell is that"; if (noun has open) { PrintName(noun,true); ! not popped print " is open."; } else { PrintName(noun,true); ! not popped print " is closed."; } new_line; rtrue; } if (noun has paper) { Perform(##Read,noun); ! not popped rtrue; } if (noun has container) { if (noun == parent(protagonist)) { move protagonist to Room_Holder; if (child(noun) ~= nothing) { PrintCont(noun); ! not popped } else { print "It's empty (not counting you)."; new_line; } move protagonist to noun; rtrue; } if (SeeInside(noun)) { if (child(noun) ~= nothing) { return PrintCont(noun); } "It's empty."; } if (noun hasnt open && child(noun) ~= nothing) { Perform(##Open,noun); ! not popped rtrue; } print "It seems that"; PrintName(noun,true); ! not popped " is closed."; } print "You can't look inside"; PrintName(noun); ! not popped "."; ]; [ LookUnderSub ; if (ThingInPlayer(noun)) { print "You're "; if (noun has clothing) { print "wear"; } else { print "hold"; } "ing it!"; } print "There is nothing but "; if (location == Lagoon_Floor) { print "sand"; } else { print "dust"; } " there."; ]; [ LowerSub ; return RaiseSub(); ]; [ LowerInSub ; return RaiseSub(); ]; [ MeltSub ; print "I'm not sure that"; PrintName(noun); ! not popped " can be melted."; ]; [ MoveSub ; if (ThingInPlayer(noun)) { "Why juggle objects?"; } if (noun has takeable) { print "Moving"; PrintName(noun,true); ! not popped " reveals nothing."; } print "You can't move"; PrintName(noun,true); ! not popped "."; ]; [ DestroySub ; return HackHack("Trying to break"); ]; [ PreKickSub ; if (~~Bat_p) rfalse; return Batty(); ]; [ OpenSub UNUSED1 UNUSED2 ; if (noun has paper) { return HowToDoThat(); } if (noun == local_globals) { "Huh?"; } if (noun has vial && location == Surface_of_Lagoon or Lagoon_Floor && child(noun) ~= nothing) { remove child(noun); "As you open the vial it fills with water, washing away the potion. A moment later a fish swims by, acting very strangely."; } if (noun has door) { if (noun has open) { return AlreadyOpen(); } give noun open; print "Okay,"; PrintName(noun,true); ! not popped " is now open."; } if (noun has container) { if (noun has open) { return AlreadyOpen(); } give noun open; give noun visited; if (child(noun) == nothing || noun has transparent) { "Opened."; } print "Opening"; PrintName(noun,true); ! not popped print " reveals "; PrintContents(noun); ! not popped "."; } return HowToDoThat(); ]; [ PaySub ; if (~~second) { if (noun == zorkmid_coin) { second = FindIn(location,animate); if (second) { Perform(##Give,noun,second); ! not popped rtrue; } "There's no one here to pay."; } if (ThingInPlayer(zorkmid_coin)) { second = zorkmid_coin; } else { "Pay with what?"; } } if (second == zorkmid_coin) { Perform(##Give,second,noun); ! not popped rtrue; } return WithAbsurd(); ]; [ PickSub ; "You can't pick that!"; ]; [ PlaySub ; "How peculiar!"; ]; [ RepairSub ; "This has no effect."; ]; [ GestureSub ; "It's usually impolite to point."; ]; [ PourSub ; "You can't pour that!"; ]; [ PumpUpSub ; "It's not clear how."; ]; [ SlideSub ; return HackHack("Pushing"); ]; [ SlideReverseSub ; "You can't push things to that."; ]; [ PrePutOnSub ; if (noun notin local_globals && noun has takeable) rfalse; "Nice try."; ]; [ InsertSub wt ; if (second hasnt open && second hasnt door && second hasnt container && second hasnt openable && second hasnt vehicle) { "You can't do that."; } if (second hasnt open && second hasnt openable) { SetPronoun(second); ! not popped print "Inspection reveals that"; PrintName(second,true); ! not popped " isn't open."; } if (second == noun) { "How can you do that?"; } if (noun in second) { print "I think"; PrintName(noun,true); ! not popped print " is already in"; PrintName(second,true); ! not popped "."; } wt = QueryWeight(second); wt = wt + QueryWeight(noun); wt = wt - second.size; if (wt > second.capacity) { "There's no room."; } if ((~~ThingInPlayer(noun)) && ITake() == A_FAILURE or 0) rtrue; move noun to second; give noun visited; "Done."; ]; [ PutBehindSub ; "That hiding place is too obvious."; ]; [ PutOnSub ; if (second == yourself1) { Perform(##Wear,noun); ! not popped rtrue; } if (second has openable) { return InsertSub(); } print "There's no good surface on"; PrintName(second,true); ! not popped "."; ]; [ PutUnderSub ; "You can't put anything under that."; ]; [ DefileSub ; "What a (ahem!) strange idea."; ]; [ RaiseSub ; return HackHack("Playing in this way with"); ]; [ ReachInSub itm ; if (noun hasnt container || noun has animate) { "What a maroon!"; } if (noun hasnt open) { "It's not open."; } if ((itm = child(noun)) == nothing || itm has concealed || itm hasnt takeable) { "It's empty."; } print "You reach into"; PrintName(noun,true); ! not popped " and feel something."; ]; [ PreReadSub ; if (Bat_p) { return Batty(); } if (noun == spell_book || (noun has spell && noun in spell_book)) rfalse; if ((~~Lit) && (~~Blort_potion_drunk)) { "It is impossible to read in the dark."; } if ((~~second) || second has transparent) rfalse; print "How does one look through"; PrintName(second); ! not popped "?"; ]; [ ReadSub ; if (noun has readable || noun has spell) { print (string) noun.text_string; new_line; rtrue; } print "How can you read"; PrintName(noun); ! not popped "?"; ]; [ AnswerObjSub ; print "It is hardly likely that"; PrintName(noun,true); ! not popped print " is interested."; new_line; return StopParse(); ]; [ PreReadAboutSub ; if ((~~second) && location == Library) { second = Encyclopedia_Frobizzica; } if (noun == Room_Holder) { if (Lit) { TooDarkToSee(); ! not popped rtrue; } if (location == Inside_the_Glass_Maze) { Perform(##Examine,glass_maze); ! not popped rtrue; } if (location has inside) { Perform(##Examine,ceiling); ! not popped rtrue; } Perform(##Examine,sky); ! not popped rtrue; } if ((~~second) && noun == lower_coal_chute or upper_coal_chute or stairs or chimney or fireplace or flagpole or pseudo or zorkmid_tree or gnarled_tree) { return CantMakeOut(); } if ((~~Lit) && (~~Blort_potion_drunk)) { Perform(##Read,Encyclopedia_Frobizzica); ! not popped rtrue; } if (~~second) { "There's no encyclopedia here to look it up in."; } if (second ~= Encyclopedia_Frobizzica) { print "You can't read about things in"; PrintName(second); ! not popped "."; } Encyclopedia_read = true; rfalse; ]; [ ReadAboutSub ; if (noun == Lobby or Cellar or Store_Room) { "The spot where the entry should be is blank, as though the text were magically excised or transported to some other location."; } if (noun == Coal_Mine1) { "Entharion the Wise united many warring tribes to form the kingdom of Quendor. He ruled from Largoneth Castle, near the ancient cities of Galepath and Mareilon. Our current calendar dates from the first year of his reign."; } if (noun == Coal_Mine3) { "Duncanthrax was King of Quendor from 659 GUE through 688 GUE. Known as the ~Bellicose King~, he extended Quendor's domain, even conquering lands across the Great Sea (thus forming what his great-great-grandson, Dimwit Flathead, named the Great Underground Empire). Duncanthrax was quite eccentric, and his castle, Egreth, was reputed to be located in the most dangerous and deadly territory in the known lands."; } if (noun == Coal_Mine2) { "Lord Dimwit Flathead the Excessive, a descendant of King Duncanthrax, ruled the Great Underground Empire from 770 GUE until 789 GUE. His accomplishments, achieved by overtaxing the kingdom, include Flood Control Dam #3 and the Royal Museum. Extremely vain, he renamed the Great Sea the Flathead Ocean, and preferred to spend his time in the strange lands that lay across it."; } if (noun == Slanted_Room) { "The Wizard of Frobozz was once a member of the influential Accardi chapter of the Enchanter's Guild. He was exiled by Dimwit Flathead after accidentally turning Flathead's castle into a mountain of fudge."; } if (noun == Ocean_Shore_North) { "Flood Control Dam #3, a great engineering feat, is the source of the Frigid River."; } if (noun == Ocean_Shore_South) { "The article describes the exhibits of the Royal Museum, which included the crown jewels and a sandstone & marble maze."; } if (noun == Shaft_Bottom) { "Largoneth was the castle of Entharion the Wise."; } if (noun == End_of_Highway) { "A short article calls it an ancient city of Quendor."; } if (noun == Stone_Hut) { "The entry says ~See GREAT UNDERGROUND EMPIRE.~"; } if (noun == Entrance_Hall) { "Formerly known as Quendor, the Great Underground Empire reached its height under King Duncanthrax, began declining under the excessive rule of Dimwit Flathead, and finally fell in 883 GUE. The area is now called the Land of Frobozz, after its largest province."; } if (noun == Crater) { "The entry says ~See FLATHEAD OCEAN.~"; } if (noun == Edge_of_Chasm) { "The tiniest of articles mentions that Accardi-By-The-Sea is a village in the Land of Frobozz."; } if (noun == Belbozs_Hideout) { "Miznia is a province in the southlands, mostly jungle."; } if (noun == Sooty_Room) { "The Frigid River, the mightiest in the Great Underground Empire, runs from Flood Control Dam #3 to Aragain Falls."; } if (noun == Dial_Room) { "According to this article, Aragain Falls is the most breathtaking and awesome waterfall in the known lands. It lies at the end of the Frigid River, and was a favorite honeymoon spot during the 8th and 9th centuries."; } if (noun == Bare_Passage) { "Amathradonis was a terrible giant who terrorized Accardi-By-The-Sea for many centuries. He was finally vanquished by Belboz the Necromancer in 952 GUE."; } if (noun == Elbow_Room) { "Nymphs are tiny, magical beings. They are known for their exuberance, fondness for practical jokes, and willingness to perform small tasks. The leading temporary nymph services agency is the venerable firm Nymph-O-Mania."; } if (noun == Hallway1) { "Zork is a classic folk myth about a treasure-hunting adventurer who became a master of magic. It has been translated into novels, theatricals, giant wall murals ... almost every imaginable medium."; } if (noun == Tree_Room) { "The encyclopedia describes it as one of the southlands, known for its fine artisans, and a popular vacation spot."; } if (noun == Hollow) { "Antharia an island in the Flathead Ocean, is very prosperous thanks to its rich marble quarries."; } if (noun == Winding_Tunnel) { "A leading manufacturer of magic scrolls and potions."; } if (noun == Bend) { "The Kovalli Desert lies beyond the mountains that formed the western boundary of ancient Quendor. It is an uncrossable wasteland, believed to stretch to the edge of the world."; } if (noun == Forest_Edge) { "Lonely Mountain is a towering peak to the west of Largoneth Castle."; } if (noun == Slimy_Room) { "A long article tells that Krill was a powerful warlock who plotted to overthrow the Circle of Enchanters and enslave this corner of the kingdom. He almost achieved his goal, but was vanquished by a young Enchanter."; } if (noun == River_Bed) { "The article points out that the Servants Guild is not the most respected of trade guilds."; } if (noun == Near_Stagnant_Pool) { "It is a corrupt and simplified form of Double Fannucci, popular in taverns, and frequently played for stakes."; } if (noun == Ruins) { "A complex, thinking man's version of Gabber Tumper, and probably the most popular game in the world."; } if (noun == Top_of_Falls) { "The capital and biggest city in Frobozz, and the center of the spell scroll and infotater industries. The port of Borphee is the busiest on the Flathead Ocean."; } if (noun == Turret) { "The Messengers Guild is among the oldest guilds, and its members are incredibly dedicated. Their motto is ~Not even really bad precipitation or very early nightfall will prevent us from completing our route.~"; } if (noun == Dungeon) { "Temporal travel technology, though in existence for many centuries, is still considered to be experimental by the magic industry. Several government agencies are currently looking into its potential long-term effects."; } if (noun == Highway) { "The Enchanter's Guild can date its roots to the reign of Entharion, over 900 years ago. Chapters are usually located in small villages, since the bustle of city life interferes with an Enchanter's work (~Excuse me, I locked my keys in my house. Could you please rezrov my door?~). The most influential chapter is Accardi Chapter, home of the Circle of Enchanters."; } if (noun == Store) { "Gnomes are a race of short, furry people known for their greed and business acumen. They are often employed as toll and fare collectors, bank tellers, ticket sellers, and presidents of small software firms."; } if (noun == Shaft_Top) { "Trolls are a race of ferocious, semi-intelligent creatures. They are often employed as security guards and bouncers."; } if (noun == Your_Quarters) { "The leading supplier of designer spell books."; } if (noun == Frobars_Quarters) { "The head of one chapter of the Enchanters Guild."; } if (noun == Helistars_Quarters) { "A village in the northlands."; } if (noun == Servants_Quarters) { "According to this article, there are two meanings for Sorcerer. In general, it refers to a powerful magic-user. More specifically, the term is used by the Enchanters Guild to denote a senior member of the Circle."; } if (noun == Apprentice_Quarters) { "A famous chasm near Accardi-By-The-Sea."; } if (noun == Outside_Glass_Arch) { "The most prestigious engineering school in the land."; } print "You look in the encyclopedia but find no entry about"; PrintName(noun,true); ! not popped "."; ]; [ TouchSub ; return HackHack("Fiddling with"); ]; [ CallSub who ; who = FindIn(location,animate); if (who) { print "You must address"; PrintName(who,true); ! not popped print " directly."; new_line; return StopParse(); } if (P_lexv-->P_cont == 'hello') { P_quote_flag = false; rtrue; } P_quote_flag = false; P_cont = 0; Perform(##Tell,yourself1); ! not popped rtrue; ]; [ SearchSub ; if (Bat_p) { return Batty(); } "You find nothing unusual."; ]; [ SendForSub ; if (noun has animate) { print "Why would you send for"; PrintName(noun,true); ! not popped "?"; } print (string) PickOne(Yuks_table); new_line; rtrue; ]; [ GiveReverseSub ; Perform(##Give,second,noun); ! not popped rtrue; ]; [ ShakeSub ; if (noun has animate) { "Be real."; } if (noun hasnt takeable) { "You can't take it; thus, you can't shake it!"; } "There's no point in shaking that."; ]; [ SharpenSub ; "You'll never sharpen anything with that!"; ]; [ ShootSub ; "Don't bother applying for a job as an armaments expert."; ]; [ ShowSub ; print "I doubt"; PrintName(second,true); ! not popped " is interested."; ]; [ LieDownSub ; "That would be a waste of time."; ]; [ CavortSub ; "Wasn't that fun?"; ]; [ SleepSub flag ; if (Flying_p) { "You'd better settle down before thinking about settling down."; } if (exhausted == 65535) { "You settle down to sleep, but you really aren't tired, so you thrash around for a while and then give up."; } ++Maximum_spells; Spells_memorized_cnt = Maximum_spells; Spells_learnable = Spells_memorized_cnt; turns = turns + 50; start_of_day = turns; Load_max = Load_allowed; Maximum_held = 7; Queue(ExhaustionDaemon,80)-->0 = true; exhausted = 65535; ResetSpells(); ! not popped KillTimers(); ! not popped if (Twisted_Forest hasnt visited) { print "You drift off to sleep and dream of the distant Kovalli Desert. Waves of heat from the sand make breathing hard, and the bright sunlight burns against your eyelids. Suddenly you awake -- the Guild Hall is on fire! Through the thick smoke, you see Belboz standing before you. But no, this could not be Belboz, his face an unrecognizable mask of hatred, his outstretched arms dripping with blood.^^He who is not Belboz speaks, in a voice filled with malevolence. ~So, you are the young Enchanter that Belboz thinks so highly of. That senile wizard thought you would be the one to rescue him from my clutches. I wonder why I bothered to come at all -- an insect like you poses no threat! Still...~ He gestures and your surroundings change."; new_line; new_line; Filch(protagonist); ! not popped QueueInterrupt(ExhaustionDaemon)-->0 = false; QueueInterrupt(HungerTimer)-->0 = false; QueueInterrupt(ThirstTimer)-->0 = false; KillTimers(); ! not popped Goto(Chamber_of_Living_Death); ! not popped rtrue; } if (location == River_Bed or Near_Stagnant_Pool or Top_of_Falls) { JigsUp("Just as you doze off, a wall of water smashes over you!"); ! not popped rtrue; } if (InCoalMine() && Vilstu_potion_drunk) { JigsUp("The vilstu potion wears off as you sleep, and you awaken clawing frantically at your chest."); ! not popped rtrue; } if (InCoalMine()) { JigsUp("Before you fall asleep you pass out from the bad air."); ! not popped rtrue; } if (location == Twisted_Forest) { JigsUp("You awake in the middle of the night to find a hellhound gnawing on you."); ! not popped rtrue; } if (location == Tree_Branch) { JigsUp("Your eyes are barely closed before the snake reaches you."); ! not popped rtrue; } if (location == Snake_Pit) { JigsUp("You awake to find snakes and beetles crawling all over you."); ! not popped rtrue; } if (location == Mine_Field) { JigsUp("Unfortunately, you roll over in the middle of the night. Kaboom!!"); ! not popped rtrue; } if (location == Meadow_Room) { JigsUp("Locusts pick your bones clean while you sleep."); ! not popped rtrue; } if (location == Drawbridge) { print "You are rudely awakened by the collapse of the rotting drawbridge. "; Do_Walk(d_to); ! not popped rtrue; } if (location == River_Bank_Room) { JigsUp("During the night the river bank collapses beneath you, throwing you into the turbulent waters."); ! not popped rtrue; } if (location == Hollow) { JigsUp("You have a nightmare about a ferocious dorn beast. When it begins gnawing on you, you realize that it isn't a dream at all."); ! not popped rtrue; } if (location == Surface_of_Lagoon or Lagoon_Floor) { JigsUp("Amazing how difficult it is to sleep while swimming (and vice versa)."); ! not popped rtrue; } if (location == Belbozs_Hideout) { print "An unknown amount of time later you awake and look around. "; JearrGetsRevenge(); ! not popped rtrue; } if (protagonist in bed1 && (~~flag)) { print "You're not all that tired, but the bed is very comfortable."; new_line; } else if (On_rollercoaster) { UnconcealStuffOnRide(); ! not popped print "Hard to believe that you could fall asleep during such an exciting ride, but you are pretty tired."; new_line; } else { print "Ah, sleep! It's been a long day and rest will do you good. You spread your cloak on the floor and drift off, renewing your powers and refreshing your mind. Time passes as you snore blissfully."; new_line; } new_line; move protagonist to location; if (50 >= random(100)) { "You sleep uneventfully, awake refreshed, and rise to your feet."; } (string) PickOne(Dreams), " You awaken and stand."; ]; [ SmellSub ; print "It smells just like"; PrintName(noun); ! not popped "."; ]; [ PayReverseSub ; Perform(##Pay,second,noun); ! not popped rtrue; ]; [ SpinSub ; "You can't spin that!"; ]; [ SpraySub ; if (~~second) { if (noun == can_of_grue_repellent) { "Specify who or what you want to spray."; } if (ThingInPlayer(can_of_grue_repellent)) { Perform(##Spray,can_of_grue_repellent,noun); ! not popped rtrue; } "You don't have anything that sprays!"; } return SqueezeSub(); ]; [ SqueezeSub ; "How singularly useless."; ]; [ PreShowReverseSub ; Perform(##Show,second,noun); ! not popped rtrue; ]; [ ShowReverseSub ; return GiveReverseSub(); ]; [ SprayReverseSub ; Perform(##Spray,second,noun); ! not popped rtrue; ]; [ RiseSub ; if (parent(protagonist) has vehicle) { Perform(##Disembark,parent(protagonist)); ! not popped rtrue; } if (Flying_p) { return WhileFlying(); } "You are already standing."; ]; [ StandOnSub ; return LieDownSub(); ]; [ StrikeSub ; Perform(##Attack,noun); ! not popped rtrue; ]; [ SwingSub ; if (~~second) { "Whoosh!"; } Perform(##Attack,second,noun); ! not popped rtrue; ]; [ SwimSub ; if (noun) { Perform(##EnterObj,noun); ! not popped rtrue; } if (location == Surface_of_Lagoon or Lagoon_Floor) { return LookAroundMsg(); } if (location == Lagoon_Shore or Ocean_Shore_North or Ocean_Shore_South) { Perform(##EnterObj,lagoon); ! not popped rtrue; } if (location == River_Bank_Room) { return Do_Walk(d_to); } if (location == Mouth_of_River) { return Do_Walk(e_to); } if (location == Hidden_Cave) { return Do_Walk(out_to); } if (location == Drawbridge) { return Do_Walk(d_to); } if (location == Near_Stagnant_Pool) { return Do_Walk(nw_to); } "There's nothing to swim in!"; ]; [ PreTakeSub env ; env = parent(noun); if (Bat_p) { return Batty(); } if (noun in protagonist) { if (noun has clothing) { "You are already wearing it."; } "You already have it."; } if (noun has spell && env && env has paper && AccessibleP(env)) { Perform(##Take,env); ! not popped rtrue; } if (env && env has container && env hasnt open) { "You can't reach that."; } if (second) { if (noun == yourself1) { Perform(##Drop,second); ! not popped rtrue; } if (second ~= env or darkwood_desk) { print "But"; PrintName(noun,true); ! not popped print " isn't in"; PrintName(second,true); ! not popped "."; } second = nothing; rfalse; } if (noun ~= parent(protagonist)) rfalse; "You are in it!"; ]; [ TakeSub ; if (ITake() ~= A_SUCCESS) rfalse; if (noun has clothing) { print "You are now wearing"; PrintName(noun,true); ! not popped "."; } if (Flying_p) { "You swoop low and pick it up."; } if (noun == rope && (Rope_in_upper_chute || Rope_in_lower_chute)) { Rope_in_upper_chute = false; Rope_in_lower_chute = false; give beam_of_wood ~trytakebit; give rope ~trytakebit; } "Taken."; ]; [ RemoveSub ; if (noun == parent(protagonist)) { Perform(##Disembark,noun); ! not popped rtrue; } if (ThingInPlayer(noun) && noun has clothing) { Perform(##Drop,noun); ! not popped rtrue; } "You're not wearing that!"; ]; [ TellSub ; if (noun has animate) { if (P_cont) { player = noun; location = parent(player); return location; } if (noun == gnome1 && Toll_gnome_asleep) { return SleepingGnomeMsg(); } print "Hmmm..."; PrintName(noun,true); ! not popped " looks at you expectantly, as though he thought you were about to talk."; } if (noun == parrot) { print "Although the parrot is a marvelous imitator of human speech, it is incapable of understanding or initiating any."; new_line; return StopParse(); } print "You can't talk to"; PrintName(noun); ! not popped print "!"; new_line; return StopParse(); ]; [ ThankSub ; if (noun has animate) { print "You do so, but"; PrintName(noun,true); ! not popped " seems less than overjoyed."; } "The Circle will revoke your certificate if you keep this up."; ]; [ EnterObjSub ; if (noun has door) { Do_Walk(OtherSide(noun)); ! not popped rtrue; } if (noun has vehicle) { Perform(##Board,noun); ! not popped rtrue; } if (noun hasnt takeable) { print "You hit your head against"; PrintName(noun,true); ! not popped " as you attempt this feat."; } if (noun in protagonist) { "That would involve quite a contortion!"; } print (string) PickOne(Yuks_table); new_line; rtrue; ]; [ ThrowAtSub ; if (~~Idrop()) rfalse; if (location == Coal_Bin_Room or Dial_Room && noun.size < 20) { return DisappearInCoal("throw"); } if (location == Haunted_House) { move noun to combination_dial; } "Thrown."; ]; [ ThrowOverSub ; "You can't throw anything off that!"; ]; [ TieSub ; print "You can't tie"; PrintName(noun,true); ! not popped " to that."; ]; [ TieWithSub ; "You could certainly never tie it with that!"; ]; [ TimeSub time_since_morning ; time_since_morning = turns - start_of_day; print "It's "; if (time_since_morning < 15) { print "early morning"; } else if (time_since_morning < 30) { print "mid-morning"; } else if (time_since_morning < 50) { print "mid-day"; } else if (time_since_morning < 65) { print "late afternoon"; } else if (time_since_morning < 80) { print "early evening"; } else { print "late evening"; } "."; ]; [ TortureSub ; if (location ~= Torture_Chamber) { "There are no torture devices here!"; } if (noun == yourself1) { return JigsUp("Ooops! You overdid it a little."); } print "Despite your best effort,"; PrintName(noun,true); ! not popped " fails to divulge any useful information."; ]; [ TurnSub ; "This has no effect."; ]; [ UnlockSub ; return LockSub(); ]; [ UntieSub ; "This cannot be tied, so it cannot be untied!"; ]; [ GoSub prop propsize str obj room ; if (~~Direction) { Perform(##WalkTo,noun); ! not popped rtrue; } prop = location.&noun; if (prop) { propsize = get_prop_len(prop); if (propsize == 1) { return Goto(prop->0); } if (propsize == 2) { print (string) prop-->0; new_line; return 2; } if (propsize == 3) { room = (prop-->0)(); if (room) { return Goto(room); } if (location == Inside_the_Glass_Maze or Park_Entrance) rfalse; return 2; } if (propsize == 4) { @load (prop->1) -> SP; @jz SP ?labelXXX; return Goto(prop->0); .labelXXX; str = prop-->1; if (str) { print (string) str; new_line; return 2; } CantGoThatWay(); ! not popped return 2; } if (propsize ~= 5) rfalse; obj = prop->1; if (obj has open) { return Goto(prop->0); } str = prop-->1; if (str) { print (string) str; new_line; SetPronoun(obj); ! not popped return 2; } print "The ", (name) obj, " is closed."; new_line; SetPronoun(obj); ! not popped return 2; } if (Flying_p && noun == shiny_scroll) { print "You're already flying as high as you can."; new_line; return 2; } CantGoThatWay(); ! not popped return 2; ]; [ WalkAroundSub ; "Please use compass directions for movement."; ]; [ WalkToSub ; if (noun in location || InRoomContains(noun,location)) { "It's here!"; } return WalkAroundSub(); ]; [ 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; ]; [ WaitForSub ; if (parent(noun) == location or protagonist) { "It's already here!"; } "You will probably be waiting quite a while."; ]; [ WaveSub ; return HackHack("Waving"); ]; [ YellSub ; print "Despite your friendly nature,"; PrintName(noun,true); ! not popped " isn't likely to respond."; ]; [ PolishSub ; if ((~~second) && InScope(floor_waxer)) { second = floor_waxer; } else if (~~second) { "With what?"; } if (second == floor_waxer && noun == ground) { Perform(##SwitchOn,floor_waxer); ! not popped rtrue; } return WithAbsurd(); ]; [ WearSub ; if (noun hasnt clothing) { print "You can't wear"; PrintName(noun,true); ! not popped "."; } Perform(##Take,noun); ! not popped rtrue; ]; [ WhatSub ; "Try reading an encyclopedia."; ]; [ WhereSub ; if (noun == River_Bed) { "Out doing their daily errands, probably."; } return FindSub(1[?]); ]; [ WhoSub ; if (noun has animate) { Perform(##What,noun); ! not popped rtrue; } if (noun == Coal_Mine1 or Coal_Mine3 or Coal_Mine2 or Slanted_Room or Bare_Passage or Slimy_Room or River_Bed or Turret or Frobars_Quarters) { Perform(##What,noun); ! not popped rtrue; } "That's not a person!"; ]; [ HowlSub ; print "Aarrrrrgggggggghhhhhhhhhhh!"; new_line; if (location ~= Toll_Gate_Room || (~~Toll_gnome_asleep) || ((~~Lit) && (~~Blort_potion_drunk))) rfalse; new_line; Perform(##Wake,gnome1); ! not popped rtrue; ]; [ PreCastSpellSub itself env ; if (Casting_spell) { Casting_spell = false; rfalse; } itself = ((action == ##CastGnusto) ? gnusto_spell : ((action == ##CastFrotz) ? frotz_spell : ((action == ##CastRezrov) ? rezrov_spell : ((action == ##CastIzyuk) ? izyuk_spell : ((action == ##CastAimfiz) ? aimfiz_spell : ((action == ##CastFweep) ? fweep_spell : ((action == ##CastSwanzo) ? swanzo_spell : ((action == ##CastGolmac) ? golmac_spell : ((action == ##CastVardik) ? vardik_spell : ((action == ##CastPulver) ? pulver_spell : ((action == ##CastMeef) ? meef_spell : ((action == ##CastVezza) ? vezza_spell : ((action == ##CastGaspar) ? gaspar_spell : ((action == ##CastYomin) ? yomin_spell : ((action == ##CastYonk) ? yonk_spell : ((action == ##CastMalyon) ? malyon_spell : nothing)))))))))))))))); if (itself == noun || (parent(itself) == noun && parent(itself) ~= spell_book)) { "As you must remember from Thaumaturgy 101, you cannot cast a spell upon itself, or upon the scroll it is written on."; } if (parent(itself) has wet && (~~KnowByHeart(itself)) && (~~itself.memorized)) { "The spell is no longer readable."; } if (parent(itself) has paper) { env = parent(itself); if (env in protagonist) { if (itself == yonk_spell && (~~InScope(noun))) rfalse; move env to combination_dial; print "As you cast the spell, the ", (name) env, " vanishes!"; new_line; new_line; itself.memorized = 1; } else { if (itself has visited || env in location) { "You don't have the ", (name) itself, " memorized, nor do you have the scroll on which it is written."; } "The ", (name) itself, " is not committed to memory, and you haven't seen any scroll on which it is written."; } } if (Bat_p) { "When you attempt to incant the ", (name) itself, ", all that comes out is a high-pitched squeak!"; } if (KnowByHeart(itself)) rfalse; if (~~itself.memorized) { SetPronoun(itself); ! not popped "You don't have the ", (name) itself, " committed to memory!"; } itself.memorized = itself.memorized - 1; ++Spells_learnable; rfalse; ]; [ CastSub spell_verb ; if (noun hasnt spell) { print "You might as well be casting with a fly rod, as to try to cast"; PrintName(noun); ! not popped "."; } if (noun == gnusto_spell) { 163[River_Bank_Room?]; ! not popped } else if (noun == frotz_spell) { 160[Tree_Room?]; ! not popped } else if (noun == rezrov_spell) { 169[torture_devices?]; ! not popped } else if (noun == izyuk_spell) { 165[vardik_spell?]; ! not popped } else if (noun == aimfiz_spell) { 158[doorway?]; ! not popped } else if (noun == fweep_spell) { 161[aqua_potion?]; ! not popped } else if (noun == swanzo_spell) { 170[meadow?]; ! not popped } else if (noun == golmac_spell) { 164[heavy_door?]; ! not popped } else if (noun == vardik_spell) { 171[swanzo_spell?]; ! not popped } else if (noun == pulver_spell) { 168[Forest_Edge?]; ! not popped } else if (noun == meef_spell) { 166[Barracks?]; ! not popped } else if (noun == vezza_spell) { 172[Surface_of_Lagoon?]; ! not popped } else if (noun == gaspar_spell) { 162[pulver_spell?]; ! not popped } else if (noun == yomin_spell) { 173[Encyclopedia_Frobizzica?]; ! not popped } else if (noun == yonk_spell) { 174[lurking_grue?]; ! not popped } else if (noun == malyon_spell) { 167[diamond_studded_knife?]; ! not popped } else { "Bug #90"; } @store 1 SP; if (~~second) { "You might as well be casting it away as not cast it on something."; } Perform(spell_verb,second); ! not popped rtrue; ]; [ SpellsSub cnt UNUSED mem_p spell nextspell ; cnt = Spells_list-->0; print "The gnusto, rezrov, and frotz spells are yours forever. Other than that, you have "; .labelXXX; if (~~cnt) { if (spell) { PrintMemorizedSpell(spell,mem_p,true); ! not popped mem_p = true; } if (~~mem_p) { print "no spells memorized."; } else { print " committed to memory."; } new_line; rtrue; } nextspell = GetSpell(Spells_list-->cnt); if (nextspell) { if (spell) { PrintMemorizedSpell(spell,mem_p); ! not popped mem_p = true; } spell = nextspell; } --cnt; jump labelXXX; ]; [ PrintMemorizedSpell spell cnt lastp times ; if (cnt) { if (lastp) { print " and "; } else { print ", "; } } print "the ", (name) spell, " "; times = spell.memorized - 1; if (times > 4) { times = 4; } print (string) Memorized_counter_tbl-->times; return spell; ]; [ GetSpell spell ; if (spell.memorized <= 0) rfalse; if (spell in spell_book) { return spell; } if (spell == aimfiz_spell && aimfiz_spell notin moldy_scroll) { return spell; } if (spell ~= yonk_spell || yonk_spell in ordinary_scroll) rfalse; return spell; ]; [ MemorizeSub ; "You don't have that spell, if indeed that is a spell."; ]; [ CastAimfizSub ; if (noun == Coal_Mine1 or Coal_Mine3 or Coal_Mine2) { return JigsUp("You materialize in a royal tomb somewhere. Before being devoured by rats, you notice a well-decayed corpse nearby."); } if (noun == Slanted_Room) { return JigsUp("You appear in a strange room. Framed diplomas and wand racks adorn the walls, and a stuffed owl is perched above a trophy case. An incredibly old man with a long white beard spots you. ~Fertilize!~ he cries, pointing a slightly bent wand at you. You turn into a pile of bat guano, a fitting end for a trespasser."); } if (noun == Slimy_Room) { print "You join Krill in oblivion."; new_line; return EndGame(); } if (noun == River_Bed) { return JigsUp("You appear in the woods behind the Guild Hall. The servants (who should be doing their daily chores) are lazing about, drinking ale and betting on games of Gabber Tumper. To prevent you from reporting their goofing off, they cut your throat. You just can't get good help these days."); } if (noun == Turret) { return JigsUp("You appear on the lawn of a large estate. A domesticated wolf, foaming saliva, is chasing the messenger across the lawn. With graceful agility, the messenger jumps aside, and the wolf sinks its rabid teeth into you instead."); } if (noun == Frobars_Quarters) { return JigsUp("You materialize in the middle of a powerful thaumaturgical experiment. A Guildmaster stands nearby, but before he can react you have turned into a large and rather ugly mushroom."); } if (noun == Servants_Quarters) { Casting_spell = true; Perform(##CastAimfiz,yourself1); ! not popped rtrue; } return CastSwanzoSub(); ]; [ CastAimfizToSub ; if (noun ~= yourself1) { "This spell only has an effect on the caster."; } "You should just say ~aimfiz ", (name) second, "~."; ]; [ CastGasparSub ; if (~~noun) { Casting_spell = true; Perform(##CastGaspar,yourself1); ! not popped rtrue; } print "How nice --"; PrintName(noun,true); ! not popped print " is now provided for in the event of "; if (noun has animate) { print "his"; } else { print "its"; } " death."; ]; [ CastGnustoSub env ; if (spell_book notin protagonist) { "The spell quests around in your hands, looking for your spell book, and not finding it, fades reluctantly."; } if (noun hasnt spell) { print "You can't inscribe"; PrintName(noun); ! not popped " in your spell book!"; } if (noun in spell_book) { "You already have that spell inscribed in your book!"; } if (parent(noun) has wet) { "The spell no longer readable."; } env = parent(noun); if (env has paper && ThingInPlayer(env)) { if (noun == aimfiz_spell or yonk_spell) { (string) Frotz_msg, "In a spectacular effort of magic, the powers of the gnusto spell attempt to copy the ", (name) noun, " into your book, but the spell is too long, too complicated, and too powerful. The glow fades, but fortunately the ", (name) env, " remains intact."; } move env to combination_dial; move noun to spell_book; noun.memorized = 0; print (string) Frotz_msg, "Slowly, ornately, the words of the ", (name) noun, " are inscribed, glowing even more brightly than the book itself. The book's brightness fades, "; if (spell_book has wet) { print "and the spell is now illegible in the damp, ruined book. T"; } else { print "but the spell remains! However, t"; } "he scroll on which it was written vanishes as the last word is copied."; } "You must have a legible spell scroll in your hands before the gnusto spell will work on it."; ]; [ CastFrotzSub litp ; litp = Lit; if (noun has light) { print "Have you forgotten that you already frotzed"; PrintName(noun,true); ! not popped "?"; } if (noun has takeable || noun has animate) { give noun light; if (noun ~= pile_of_bat_guano or soiled_scroll) { give noun visited; } print "There is an almost blinding flash of light as"; PrintName(noun,true); ! not popped print " begins to glow! It slowly fades to a less painful level, but"; PrintName(noun,true); ! not popped print " is now quite usable as a light source."; if (noun == gnome2 || (noun == gnome1 && (~~Toll_gnome_asleep))) { JigsUp(" The gnome looks livid. ~Very funny! Have you seen this one?~ He incants a brief spell, and you turn into a bowl of petunias (which eventually wilt)."); ! not popped rtrue; } new_line; Lit = LitP(location); if (litp || (~~Lit)) rtrue; new_line; LookSub(); ! not popped rtrue; } return CastSwanzoSub(); ]; [ CastFweepSub itm sib ; if ((~~noun) || noun == yourself1) { if (On_rollercoaster) { IzyukOnRide(); ! not popped rtrue; } if (location == Surface_of_Lagoon or Lagoon_Floor) { JigsUp("Unfortunately, bats make poor swimmers. Glug, glug."); ! not popped rtrue; } Bat_p = true; Flying_p = true; Queue(FweepExpiresTimer,15)-->0 = true; QueueInterrupt(IzyukExpiresTimer)-->0 = false; itm = child(protagonist); print "With keen disappointment, you note that nothing has changed. Then, you slowly realize that you are black, have two wing-like appendages, and are flying a few feet above the ground."; if (itm) { print " Understandably, you dropped everything you were carrying."; } if (location == Inside_the_Glass_Maze) { SonarSurroundings(); ! not popped } new_line; .labelXXX; if (~~itm) rtrue; sib = sibling(itm); move itm to location; itm = sib; jump labelXXX; } "The fweep spell can be cast only on yourself."; ]; [ CastIzyukSub ; if (Flying_p && noun == yourself1) { "You are already flying."; } if ((~~noun) || noun == yourself1) { if (On_rollercoaster) { IzyukOnRide(); ! not popped rtrue; } if (location == Lagoon_Floor) { print "Gloooop! "; } print "You are now floating serenely in midair."; new_line; if (location == Lagoon_Floor) { Do_Walk(u_to); ! not popped } Flying_p = true; Queue(IzyukExpiresTimer,3)-->0 = true; move protagonist to location; rtrue; } if (noun == flag_of_Quendor) { return FlySub(); } Perform(##Fly,noun); ! not popped rtrue; ]; [ IzyukOnRide ; print "You fly out of the "; if (location == Flume_Room) { print "log boat"; } else { print "car"; } print ", and immediately splat into one of the structural cross-beams of the "; if (location == Flume_Room) { print "flume"; } else { print "roller coaster"; } return JigsUp("."); ]; [ CastMalyonSub ; if (noun has animate) { print "Wow! It looks like"; PrintName(noun,true); ! not popped " is now alive! What a magician you are!"; } if (noun has takeable) { print "As you complete the spell,"; PrintName(noun,true); ! not popped " comes alive! It blinks, dances a little jig, and a moment later returns to normal."; } return CastSwanzoSub(); ]; [ CastMeefSub ; return CastSwanzoSub(); ]; [ CastPulverSub ; if (noun == aqua_potion or indigo_potion or amber_potion or orange_potion or ochre_potion) { move noun to combination_dial; "The potion vanishes."; } print "After completing the spell,"; PrintName(noun,true); ! not popped " remains unchanged. It must not be a liquid."; ]; [ CastRezrovSub ; if (noun has container || noun has door) { if (noun has open) { return AlreadyOpen(); } if (noun hasnt paper) { print "Silently,"; PrintName(noun,true); ! not popped print " swings open"; if (child(noun) ~= nothing) { print ", revealing "; PrintContents(noun); ! not popped } print ". Like swatting a fly with a sledge hammer, if you ask me."; new_line; give noun open; rtrue; } return CastSwanzoSub(); } return CastSwanzoSub(); ]; [ CastSwanzoSub ; print "Although you complete the spell, nothing seems to have happened"; if (action == ##CastAimfiz) { print ". Perhaps this spell only works on people"; } "."; ]; [ CastGolmacSub ; if (noun has animate && noun ~= Belboz or Jeearr) { move noun to combination_dial; print "With a puff of smoke,"; PrintName(noun,true); ! not popped " vanishes!"; } print "There is a puff of smoke, but when it clears"; PrintName(noun,true); ! not popped " is still there."; ]; [ CastVardikSub ; print "The mind of"; PrintName(noun,true); ! not popped if (noun hasnt animate) { print " (if it has one)"; } " is now shielded against evil spirits."; ]; [ CastVezzaSub prediction ; if ((~~noun) || noun == yourself1) { print "You see "; .labelXXX; prediction = Predictions-->random(10); if (~~prediction) jump labelXXX; (string) prediction, " A moment later, the vision fades."; } print "Thanks to you,"; PrintName(noun,true); ! not popped print " is given a brilliant but momentary glimpse of "; if (noun has animate) { print "his"; } else { print "its"; } " own future."; ]; [ CastYominSub ; print "I'm afraid"; PrintName(noun,true); ! not popped " doesn't have much of a mind for you to read."; ]; [ CastYonkSub ; if (noun hasnt spell) { "Nothing happens. I think this spell is meant to be cast on other spells..."; } print "The words of the spell glow brightly for a moment."; new_line; if (noun ~= malyon_spell) rfalse; Yonk_enhanced_malyon = true; return Yonk_enhanced_malyon; ]; [ ITake vb=true num_items UNUSED weight ; if (Bat_p) { if (~~vb) rfalse; Batty(); ! not popped rfalse; } if (noun hasnt takeable) { if (~~vb) rfalse; print (string) PickOne(Yuks_table); new_line; rfalse; } if (noun in your_younger_self && noun == spell_book && GivenASpellbookP()) { return A_FAILURE; } if (noun in your_younger_self or your_older_self) { print "Your twin refuses to part with"; PrintName(noun,true); ! not popped print "."; new_line; return A_FAILURE; } if (parent(noun) notin protagonist) { weight = QueryWeight(noun); if (weight + QueryWeight(protagonist) > Load_max) { if (vb) { if (child(protagonist) ~= nothing) { print "Your load is too heavy"; } else { print "It's a little too heavy"; } if (Load_max < Load_allowed) { print ", especially in light of your exhaustion"; } print "."; new_line; } return A_FAILURE; } } num_items = CCount(protagonist); if (num_items > Maximum_held) { if (vb) { print "You're holding too many things already."; new_line; } return A_FAILURE; } move noun to protagonist; Score_Object(); ! not popped give noun visited; rtrue; ]; [ Score_Object ; if (noun == parchment_scroll && location == Stone_Hut) { score = score + Parchment_scroll_score; Parchment_scroll_score = 0; return Parchment_scroll_score; } if (noun == smelly_scroll && smelly_scroll hasnt visited) { score = score + 25; return score; } if (noun == orange_vial && orange_vial hasnt visited) { score = score + 10; return score; } if (noun == dusty_scroll && dusty_scroll hasnt visited) { score = score + 10; return score; } if (noun ~= ordinary_scroll || ordinary_scroll has visited) rfalse; score = score + 10; return score; ]; [ Idrop ; if (noun == your_hand) { LockSub(); ! not popped rfalse; } if (noun notin protagonist && parent(noun) notin protagonist) { print "You're not carrying"; PrintName(noun,true); ! not popped print "."; new_line; rfalse; } if (noun notin protagonist && parent(noun) hasnt open) { print "Impossible since"; PrintName(noun,true); ! not popped print " is closed."; new_line; rfalse; } if (location == Tree_Branch) { move noun to Twisted_Forest; rtrue; } if (location == Surface_of_Lagoon) { move noun to Lagoon_Floor; rtrue; } if (location == Inside_the_Glass_Maze && NoFloorHereP()) { DropItemInMaze(); ! not popped move noun to combination_dial; "It drops into the shimmering light below you. A moment later, you hear a gentle thud."; } move noun to parent(protagonist); 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; ]; [ Describe_Room look v text environment ; v = (look ? look : verbose); if ((~~Lit) && (~~Blort_potion_drunk)) { print "It is pitch black"; if (Bat_p) { print ", and your bat sonar-sense isn't much help in this terrain"; } print "."; if (location == Grue_Lair) { print " Gurgling noises come from every direction!"; } else if (~~Grue_repellent) { print " Dangerous creatures, such as grues, probably abound in the darkness."; } new_line; return 0; } if (location hasnt visited) { give location visited; v = true; } if (location in Room_Holder) { print (name) location; if (Flying_p) { print " (you are flying)"; } if (parent(protagonist) hasnt vehicle) { new_line; } } if ((~~look) && Superbrief && location ~= Inside_the_Glass_Maze) rtrue; environment = parent(protagonist); if (environment has vehicle) { print ", in the ", (name) environment; new_line; } 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 || Blort_potion_drunk) { if (child(location) == nothing) rfalse; v = (v ? v : verbose); return PrintCont(location,v,65535); } return TooDarkToSee(); ]; [ DescribeOb obj v level text av ; Desc_object = obj; if ((~~level) && obj.initial2(M_FIGHT)) 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) { if (obj == your_older_self && (~~Twin_has_been_seen)) rtrue; print "There is"; PrintName(obj); ! not popped print " here"; SuffixDesc(obj); ! not popped print "."; } else { print (string) Indents-->level; Article(obj); ! not popped SuffixDesc(obj); ! not popped } .labelXXX; if (~~level) { av = parent(protagonist); if (av && av has vehicle) { print " (outside the ", (name) av, ")"; } } new_line; if ((~~SeeInside(obj)) || child(obj) == nothing) rfalse; return PrintCont(obj,v,level); ]; [ SuffixDesc obj ; if (obj == rope && Rope_tied_to_beam) { print " (tied to the beam)"; rtrue; } if (obj has clothing && obj in protagonist) { print " (being worn"; if (obj has light) { print " and providing light)"; rtrue; } print ")"; rtrue; } if (obj hasnt light) rfalse; print " (providing light)"; rtrue; ]; [ PrintCont obj v level itm first environment text pv inv ; if ((itm = child(obj)) == nothing) rtrue; if (parent(protagonist) has vehicle) { environment = parent(protagonist); } else { environment = 0; } first = true; if (protagonist == obj or parent(obj)) { inv = true; jump labelXXX; } .labelXXX; if (~~itm) { ! no code } else { if (itm == environment) { pv = true; } else if (itm == protagonist) { ! no code } else if (itm hasnt concealed && itm hasnt visited) { text = itm.initial; if (text) { if (itm hasnt scenery) { print (string) text; new_line; } if (SeeInside(itm) && (~~parent(itm).initial2) && child(itm) ~= nothing) { PrintCont(itm,v,0); ! not popped } } } itm = sibling(itm); jump labelXXX; } .labelXXX; itm = child(obj); .labelXXX; if (~~itm) { if (pv && environment && child(environment) ~= nothing) { PrintCont(environment,v,level); ! not popped } if (first) rfalse; rtrue; } if (itm == environment or protagonist) { ! 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; } DescribeOb(itm,v,level); ! not popped } else if (child(itm) ~= nothing && SeeInside(itm)) { PrintCont(itm,v,level); ! not popped } } itm = sibling(itm); jump labelXXX; ]; [ 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 "; } } Article(itm); ! not popped 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; ]; [ Firster obj level ; if (obj == protagonist) { "You are carrying:"; } if (obj in Room_Holder) rfalse; if (level > 0) { print (string) Indents-->level; } if (obj has openable) { "Sitting on the ", (name) obj, " is:"; } if (obj has animate) { print "It looks like"; PrintName(obj,true); ! not popped " is holding:"; } "The ", (name) obj, " contains:"; ]; [ Goto room lb=true old_lit environment ; environment = location; old_lit = Lit; move protagonist to room; location = room; Lit = LitP(location); if ((~~old_lit) && (~~Lit) && (~~Grue_repellent) && (~~Ressurected) && location ~= Haunted_House && grue_suit notin protagonist && 80 >= random(100)) { if (Blort_potion_drunk) { JigsUp("A hideous creature with slavering fangs lurks up and, before you can move, begins feasting!"); ! not popped rtrue; } JigsUp("Oh, no! Something lurked up and devoured you!"); ! not popped rtrue; } Ressurected = false; MoveWithRopeOrBeam(true); ! not popped location.action(M_ENTER); ! not popped if (location ~= room || (~~lb)) rtrue; FirstLook(); ! not popped rtrue; ]; [ MoveWithRopeOrBeam printtake ; if (ThingInPlayer(beam_of_wood) && (~~ThingInPlayer(rope)) && Rope_tied_to_beam) { move rope to protagonist; Rope_in_upper_chute = false; Rope_in_lower_chute = false; give beam_of_wood ~trytakebit; give rope ~trytakebit; if (~~printtake) rfalse; "(taking the rope first)"; } if ((~~ThingInPlayer(rope)) || ThingInPlayer(beam_of_wood) || (~~Rope_tied_to_beam)) rfalse; move beam_of_wood to protagonist; if (~~printtake) rfalse; "(taking the beam of wood first)"; ]; [ JigsUp deathmsg playerp ; if (deathmsg) { print (string) deathmsg; new_line; } ResetSpells(); ! not popped ResetTimersAtDeath(); ! not popped if (Start_of_game) { new_line; print "...and a moment later you wake up in a cold sweat and realize you've been dreaming."; new_line; Start_of_game = false; give Twisted_Forest ~visited; give Tree_Branch ~visited; give Forest_Edge ~visited; give Mine_Field ~visited; give Snake_Pit ~visited; give Meadow_Room ~visited; give River_Bank_Room ~visited; give Fort_Entrance ~visited; give Drawbridge ~visited; give Ruins ~visited; Queue(ParrotDaemon,65535)-->0 = true; Queue(MailDeliveryTimer,25)-->0 = true; Queue(ExhaustionDaemon,80)-->0 = true; Queue(HungerTimer,21)-->0 = true; Queue(ThirstTimer,18)-->0 = true; start_of_day = turns; Infotater_select = random(12); Trunk_button_cnt = Infotater_select * 6; Next_button = Trunk_sequence-->Trunk_button_cnt; score = score + 5; move spell_book to protagonist; location = Your_Quarters; move protagonist to bed1; new_line; VersionSub(); ! not popped new_line; noun = nothing; Lit = false; "Your frotz spell seems to have worn off during the night, and it is now pitch black."; } print " ^ **** You have died ****^^"; if (Gaspar_location) { if (parchment_scroll in protagonist && Parchment_scroll_score) { move parchment_scroll to Hollow; give parchment_scroll ~visited; } MoveWithRopeOrBeam(); ! not popped MoveObjectsAfterDeath(); ! not popped KillTimers(); ! not popped print "Your guardian angel, draped in white, appears floating in the nothingness before you. ~Gotten in a bit of a scrape, eh?~ he asks, writing frantically in a notebook. ~I'd love to chat, but we're so busy this month.~ "; if (Gaspar_location == Inside_the_Glass_Maze) { print "The angel looks pained. ~I hate resurrections in these stupid glass mazes! I can never tell one room from the next.~ A moment later, you appear in the maze. Unfortunately, this is one of the floor-less rooms. This time, your demise is permanent."; new_line; EndGame(); ! not popped } else if (Gaspar_location == River_Bed or Near_Stagnant_Pool or Top_of_Falls && (~~River_bed_dry)) { print "A moment later you find yourself at the bottom of a river, between a whirpool, some sharp rocks, and a school of river sharks. This time, your death is terminal."; new_line; EndGame(); ! not popped } else if (InGuildHall(Gaspar_location) && Twisted_Forest has visited) { print "A look of consternation crosses the angel's face. ~According to the records, you're to be resurrected in your local Guild Hall. But that's quite far, and I've had a rough day. How about Egreth Castle instead, hmmm?~ Being disembodied, you find it difficult to object, and a moment later you are among the..."; Gaspar_location = Ruins; } else { print "The angel twitches his nose, and the nothingness is replaced by..."; } new_line; new_line; Ressurected = true; Goto(Gaspar_location); ! not popped if (Gaspar_location == Hollow) { Maze_location = M_24_NxNxN; if (~~Dornbeast_dead) { Dornbeast_alerted = false; Previous_dornbeast_loc = 0; Current_dornbeast_loc = 0; Queue(DornbeastTimer,2)-->0 = true; } } if (playerp) { print "Unfortunately, you are still long overdue for a meal and immediately drop dead again."; new_line; EndGame(); ! not popped } if (InCoalMine()) { Queue(OutOfBreathTimer,2)-->0 = true; print "The air here is almost unbreathable."; new_line; } Gaspar_location = nothing; P_cont = 0; return 2; } print "Unfortunately, you made no provisions for your untimely death."; new_line; return EndGame(); ]; [ MoveObjectsAfterDeath itm sib ; itm = child(protagonist); .labelXXX; if (~~itm) rtrue; sib = sibling(itm); if (itm has paper) { if (location == Haunted_House or Coal_Bin_Room or Dial_Room) { move itm to combination_dial; } else { move itm to location; } } itm = sib; jump labelXXX; ]; [ ResetTimersAtDeath ; QueueInterrupt(LightningTimer)-->0 = false; QueueInterrupt(HellhoundDaemon)-->0 = false; Hellhound_here = false; QueueInterrupt(SnakeTimer)-->0 = false; Boa_snake_here = false; QueueInterrupt(LocustDaemon)-->0 = false; Locust_cnt = 0; QueueInterrupt(OutOfBreathTimer)-->0 = false; QueueInterrupt(RideDaemon)-->0 = false; UnconcealStuffOnRide(); ! not popped Maze_location = M_13_NxNxN; Previous_dornbeast_loc = 0; Current_dornbeast_loc = 0; QueueInterrupt(DornbeastTimer)-->0 = false; Dornbeast_alerted = false; give ferocious_dorn_beast ~scenery; move ferocious_dorn_beast to combination_dial; Bat_p = false; Almost_out_of_breath = false; QueueInterrupt(FweepExpiresTimer)-->0 = false; QueueInterrupt(JearrGetsRevenge)-->0 = false; rtrue; ]; [ SetPronoun obj ; P_it_objectobject = obj; return P_it_objectobject; ]; [ InScope obj env ; env = parent(obj); if (AccessibleP(obj)) rtrue; if ((~~SeeInside(env)) || (~~InScope(env))) rfalse; rtrue; ]; [ OtherSide door prop addr ; .labelXXX; prop = get_next_prop(location,prop); if (prop < 20) rfalse; addr = location.∝ if (get_prop_len(addr) ~= 5 || addr->1 ~= door) jump labelXXX; return prop; ]; [ CarryingAnything obj sib ; obj = child(protagonist); .labelXXX; if (~~obj) rtrue; if (obj hasnt clothing) rfalse; obj = sibling(obj); jump labelXXX; ]; [ ThingInPlayer obj ; if (~~obj) rfalse; if (obj in protagonist) rtrue; if (obj in Room_Holder or local_globals) rfalse; return ThingInPlayer(parent(obj)); ]; [ SeeInside obj ; if (obj has concealed) rfalse; if (obj has transparent || obj has open) rtrue; rfalse; ]; [ 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) { return obj; } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; rfalse; ]; [ Do_Walk dir ; Direction = dir; return Perform(##Go,dir); ]; [ Filch from sib itm ; itm = child(from); .labelXXX; if (~~itm) rtrue; sib = sibling(itm); move itm to combination_dial; itm = sib; jump labelXXX; ]; [ StopParse ; P_cont = 0; P_quote_flag = false; return 2; ]; [ HackHack str ; print (string) str; PrintName(noun,true); ! not popped print (string) PickOne(Ho_hum_table); new_line; rtrue; ]; [ OpenOrClose ; if (action == ##Open && noun has open) { AlreadyOpen(); ! not popped rtrue; } if (action ~= ##Close || noun has open) rfalse; AlreadyClosed(); ! not popped rtrue; ]; [ Article obj the ; if (obj has trytakebit) { ! no code } else if (the) { print "the "; } else if (obj has vowel_start) { print "an "; } else { print "a "; } print (name) obj; rtrue; ]; [ PrintName obj with_article ; print " "; if (with_article) { return Article(obj,true); } return Article(obj); ]; [ EnterOrEgress obj leave_p ; print "You can't "; if (leave_p) { print "leave"; } else { print "enter"; } PrintName(obj,true); ! not popped " from here."; ]; [ NoSeeAny what ; "You can't see any ", (string) what, " here!"; ]; [ WithAbsurd ; print "With"; PrintName(second); ! not popped "??!?"; ]; [ HowToDoThat ; print "You must tell me how to do that to"; PrintName(noun); ! not popped "."; ]; [ GetOutFirst obj ; "You're not going anywhere until you get out of the ", (name) obj, "."; ]; [ PlaceInWater ; print "With a splash,"; PrintName(noun,true); ! not popped " plunges into the water."; ]; [ DisappearInCoal do_what ; move noun to combination_dial; print "When you ", (string) do_what; PrintName(noun,true); ! not popped " it falls between the lumps of coal and is buried."; ]; [ LookAroundMsg ; "Look around you."; ]; [ Batty ; "You're batty!"; ]; [ TooDarkToSee ; print "It's too dark to see"; if (Bat_p) { print ", and your bat sonar-sense isn't of much help, either."; } else { print "!"; } new_line; rtrue; ]; [ WhileFlying ; "While flying?"; ]; [ CantGoThatWay ; "You can't go that way."; ]; [ ItIsDarkNow ; "It is now pitch black."; ]; [ AlreadyOpen ; "It is already open."; ]; [ AlreadyClosed ; "It is already closed."; ]; [ CantMakeOut ; "You can't make out anything."; ]; [ BookIsWet ; "The book is damp and the writing unreadable."; ]; [ ReferringMsg ; "I don't see what you're referring to."; ]; [ SleepingGnomeMsg ; "Sleeping gnomes make poor listeners."; ]; [ SettleBranch ; "You settle onto the branch."; ]; [ SplashInWater ; "You splash down into the water."; ]; [ Not_Here_Object_F obj ind_object=true local3 remote_spell ; if (noun == not_here_object && second == not_here_object) { "Those things aren't here!"; } if (noun == not_here_object) { obj = P_prso; } else { obj = P_prsi; ind_object = false; } if (ind_object) { if (action == ##Find or ##Follow or ##CastAimfiz or ##What or ##Where or ##Who or ##WaitFor or ##SendFor or ##WalkTo or ##ReadAbout) { remote_spell = true; local3 = Find_Not_Here(obj,ind_object); if (~~local3) rfalse; if (local3 ~= 200[not_here_object?]) rtrue; } } else if (action == ##CastAimfizTo && noun == yourself1 || (action == ##Cast && noun == aimfiz_spell)) { remote_spell = true; local3 = Find_Not_Here(obj,ind_object); if (~~local3) rfalse; if (local3 ~= 200[not_here_object?]) rtrue; } if (remote_spell) { print "You'll have to be more specific, I'm afraid."; new_line; } else if (player == protagonist) { print "You can't see "; if (P_xnam ~= 'belboz' or 'helistar' or 'krill' or 'frobar' or 'jeearr' or 'flathead' or 'duncan' or 'entharion' or 'tholl' or 'gurth' or 'miznia' or 'accardi' or 'borpheus' or 'antharia' or 'mithic' or 'galepa' or 'mareilon' or 'thriff') { if (P_xnam == 'orkan' or 'barbel' or 'chevau') { ! no code } else { print "any "; } } DescribePerson(ind_object); ! not popped print " here!"; new_line; } else { print "Looking confused,"; PrintName(player,true); ! not popped print " says, ~I don't see any "; DescribePerson(ind_object); ! not popped print " here!~"; new_line; } P_cont = 0; P_quote_flag = false; rtrue; ]; [ Find_Not_Here rms obj objcnt clist ; objcnt = Moby_Find(rms); if (1 == objcnt) { if (obj) { noun = P_object; rfalse; } second = P_object; rfalse; } if (~~obj) { print "You wouldn't find any "; DescribePerson(obj); ! not popped " there."; } return not_here_object; ]; [ DescribePerson thing unknown_parser_variable ; if (P_xnam == 'belboz') { print "Belboz"; rtrue; } if (P_xnam == 'tholl') { print "Tholl"; rtrue; } if (P_xnam == 'gurth' or 'miznia' or 'accardi' or 'borpheus' or 'antharia' or 'mithic' or 'galepa' or 'mareilon' or 'thriff') { print "that place"; rtrue; } if (P_xnam == 'helistar' or 'frobar' or 'orkan' or 'barbel' or 'chevau') { print "that person"; rtrue; } if (P_xnam == 'jeearr') { print "Jeearr"; rtrue; } if (P_xnam == 'krill') { print "Krill"; rtrue; } if (P_xnam == 'flathead') { print "Flathead"; rtrue; } if (P_xnam == 'duncan' or 'entharion') { print "that King"; rtrue; } if (P_oflag) { if (P_xadj) { print (address) P_xadjn; } if (~~P_xnam) rfalse; print (address) P_xnam; rtrue; } if (thing) { unknown_parser_variable = P_itbl-->6; return Buffer_Print(unknown_parser_variable,P_itbl-->7,false); } unknown_parser_variable = P_itbl-->8; return Buffer_Print(unknown_parser_variable,P_itbl-->9,false); ]; [ GroundAction ; if (action == ##Climb or ##ClimbOn or ##ClimbUp or ##Board) { return LieDownSub(); } if (action == ##Examine && location == Surface_of_Lagoon) { "Through the water you can see sandy ground below."; } if (action == ##Examine or ##LookIn or ##LookUnder && location == Inside_the_Glass_Maze) { Perform(##Examine,glass_maze); ! not popped rtrue; } if (action ~= ##LookUnder) rfalse; "You've never mastered an X-ray vision spell."; ]; [ RoadObjAction ; if (action ~= ##Follow) rfalse; return WalkAroundSub(); ]; [ PassageAction ; if (action ~= ##WalkTo or ##EnterObj) rfalse; return WalkAroundSub(); ]; [ WallAction ; if (action == ##Read && location == Chamber_of_the_Circle) { Perform(##Read,list_of_tenets); ! not popped rtrue; } if (action == ##Examine && location == Hall_of_Carvings && (~~Dragon_carving_moved)) { "A dragon carving adorns the far wall."; } if (location == Slimy_Room && action == ##Examine) { "The walls are covered with moss and stuff."; } if (location ~= Inside_the_Glass_Maze || action ~= ##LookIn or ##Examine) rfalse; Perform(##Examine,glass_maze); ! not popped rtrue; ]; [ CeilingAction ; if (action == ##Examine) { if (location == Slanted_Room) { "The ceiling is slanted, making the room trapezoidal in shape."; } if (location == Pit_of_Bones) { "There's an opening in the ceiling."; } if (location ~= Chamber_of_the_Circle) rfalse; "Other than its shape, there's nothing of interest."; } if (location == Inside_the_Glass_Maze && action == ##LookIn or ##Examine) { Perform(##Examine,glass_maze); ! not popped rtrue; } if (action ~= ##LookUnder) rfalse; Perform(##Look); ! not popped rtrue; ]; [ StairsAction ; if (action == ##Climb or ##ClimbUp) { return Do_Walk(u_to); } if (action ~= ##ClimbDown) rfalse; return Do_Walk(d_to); ]; [ PseudoBatAction ; if (Bat_p) { if (noun == yourself2) { Casting_spell = true; Perform(action,yourself1,second); ! not popped rtrue; } Casting_spell = true; Perform(action,noun,yourself1); ! not popped rtrue; } if (action ~= ##ReadAbout) { return NoSeeAny("bat"); } "The entry about bats is long and uninteresting."; ]; [ PseudoAction lit_p ; if (action == ##Tell) { print "Talking to yourself is said to be a sign of impending mental collapse."; new_line; return StopParse(); } if (action == ##Listen) { "Yes?"; } if (action == ##Wake) { if (Start_of_game) { print "As you wake up, Frobar sticks his head in the door and invites you shopping. When you return late that evening, you find the Guild Hall sacked, and many fellow Enchanters slaughtered. Servants of evil, teeth smeared with blood, fall upon you as well. A menacing voice echoes about the room. ~Pathetic Enchanters ... Who can save you now?~^^Some days it just doesn't pay to wake up."; return EndGame(); } "You are obviously awake already."; } if (action == ##ReadAbout) { "You find several sentences mentioning your heroic defeat of the warlock Krill."; } if (action == ##CastAimfiz) { print "You are suddenly "; if (Flying_p) { print "floating"; } else { print "standing"; } " right next to your former location! Wow!!"; } if (action == ##CastVardik) { Mind_protected = true; Queue(Vardik_timer,12)-->0 = true; "A feeling of warmth and protection fills your mind."; } if (action == ##CastYomin) { "You sense a mind concentrating on casting the yomin spell."; } if (action == ##CastGaspar) { Gaspar_location = location; "A sense of peace of mind passes over you."; } if (action == ##CastGolmac) { if (Time_travelled) { EekParadox(); ! not popped } Time_travelled = true; give kerosene_lamp ~open; move smelly_scroll to kerosene_lamp; move shimmering_scroll to Slanted_Room; give shimmering_scroll ~light; move rope to Shaft_Bottom; move beam_of_wood to Coal_Mine1; Rope_in_upper_chute = false; Rope_tied_to_beam = false; Dial_set_to = 0; give rope ~visited; give heavy_door ~open; Combination_found = false; print "You are surrounded by a puff of smoke, and feel disoriented for a moment. When the smoke clears, nothing seems to have changed"; if (location == Slanted_Room) { print ", except that the kerosene lamp is now closed"; } "."; } if (action == ##LowerIn && second == lower_coal_chute or upper_coal_chute) { return Do_Walk(d_to); } if (action == ##Examine) { if (Bat_p) { "You're batty! (And a rather large one, at that.)"; } if (protagonist hasnt light) rfalse; "You seem to have been frotzed."; } if (action == ##CastFrotz && protagonist hasnt light) { if (Start_of_game) { return CastSwanzoSub(); } lit_p = Lit; Player_frotzed = true; give yourself1 light; give protagonist light; give your_younger_self light; print "You are bathed in a sickly yellow light, bright enough to read by."; new_line; Lit = LitP(location); if (lit_p || (~~Lit)) rtrue; new_line; LookSub(); ! not popped rtrue; } if (action == ##Give && second == yourself1) { if (ThingInPlayer(noun)) { "You already have it."; } Perform(##Take,noun); ! not popped rtrue; } if (action == ##Attack or ##Destroy or ##Kill) { return JigsUp("Done."); } if (action ~= ##Find) rfalse; "You're right here!"; ]; [ LurkingGrueAction ; if (location == Grue_Lair) { SetPronoun(pack_of_mutated_grues); ! not popped } if (action == ##Raise or ##Touch or ##Examine or ##Take or ##Kick or ##Lower or ##LookUnder) { "You can't see any grue here (thankfully)."; } if (action == ##Where) { "There is no grue here, but I'm sure there is at least one lurking in the darkness nearby. I'd stay near a light source if I were you!"; } if (action == ##Listen) { "It makes no sound but is always lurking in the darkness nearby."; } if (action == ##CastFrotz) { if (location == Grue_Lair) { print "There is a flash of light from nearby!"; new_line; if (~~Lit) { Lit = true; LookSub(); ! not popped } give location light; rtrue; } if (Lit) { "There aren't any grues here -- it's light!"; } "There's a flash of light nearby, and you glimpse a horrible, multi-fanged creature, a look of sheer terror on its face. It charges away, gurgling in agony, tearing at its glowing fur."; } if (action ~= ##ReadAbout) rfalse; Perform(##ReadAbout,Lobby); ! not popped rtrue; ]; [ WaterObjectAction ; if (action == ##DrinkFrom or ##Drink) { "It's dangerous to drink untested water!"; } if (action == ##LookIn) { return CantMakeOut(); } if (action == ##Fill && noun has vial) { "A vial nymph appears to warn that water can destroy the delicate magic properties of potion vials. It wags a finger at you before vanishing."; } if (water == second && location ~= Near_Stagnant_Pool or Hidden_Cave) { return NearWaterP(); } if (location == Lagoon_Shore or Surface_of_Lagoon or Lagoon_Floor) { Casting_spell = true; Perform(action,lagoon,second); ! not popped rtrue; } if (location == Ocean_Shore_North or Ocean_Shore_South or Mouth_of_River) { Casting_spell = true; Perform(action,ocean,second); ! not popped rtrue; } if (location == Drawbridge) { Casting_spell = true; Perform(action,moat,second); ! not popped rtrue; } if (location == River_Bank_Room) { Casting_spell = true; Perform(action,river,second); ! not popped rtrue; } if (location == Flume_Room) { Casting_spell = true; Perform(action,flume,second); ! not popped rtrue; } if (location == Near_Stagnant_Pool) { if (action == ##EnterObj) { return Do_Walk(nw_to); } if (action ~= ##CastPulver) rfalse; return JigsUp("The pool evaporates, to the annoyance of a multi-tentacled denizen, who proceeds to take out its anger on you."); } if (location == Hidden_Cave) { if (River_bed_dry) { return NoSeeAny("water"); } if (action == ##CastPulver) { "The water recedes for a moment, then swirls back."; } if (action ~= ##EnterObj) rfalse; return Do_Walk(out_to); } if (location ~= River_Bed or Top_of_Falls or Near_Stagnant_Pool) rfalse; "Hardly enough water here to get a good pulveration going."; ]; [ NearWaterP ; if (location == Lagoon_Shore or Surface_of_Lagoon or Lagoon_Floor) { Casting_spell = true; Perform(action,noun,lagoon); ! not popped rtrue; } if (location == Ocean_Shore_North or Ocean_Shore_South or Mouth_of_River) { Casting_spell = true; Perform(action,noun,ocean); ! not popped rtrue; } if (location == Drawbridge) { Casting_spell = true; Perform(action,noun,moat); ! not popped rtrue; } if (location == River_Bank_Room) { Casting_spell = true; Perform(action,noun,river); ! not popped rtrue; } if (location ~= Flume_Room) rfalse; Casting_spell = true; Perform(action,noun,flume); ! not popped rtrue; ]; [ SkyAction UNUSED ; if (action ~= ##Examine) rfalse; if (location has inside) { "That would be difficult from here."; } if (location ~= Lagoon_Floor) rfalse; "The sky is blurry but visible."; ]; [ BelbozAction ; if (action == ##AskFor or ##AskAbout or ##Tell or ##Give) { print "Belboz is in some sort of trance."; new_line; return StopParse(); } if (action == ##Who) { "Belboz, your friend and mentor, is the head of the Circle of Enchanters. Recently, he has been acting oddly and seems to have been avoiding you."; } if (action == ##Wake) { QueueInterrupt(JearrGetsRevenge)-->0 = false; return JearrGetsRevenge(); } if (action == ##ReadAbout) { "There is a small entry about Belboz, mentioning that he is the Guildmaster of the Accardi Chapter of the Guild of Enchanters, and has served three terms as kingdomwide Secretary of the Guild."; } if (action == ##Find or ##Where && Belboz notin location) { "You last saw Belboz a few days ago. You can't begin to guess where he is now."; } if (action == ##CastGaspar) { Gaspar_cast_on_Belboz = true; rfalse; } if (action == ##CastAimfiz) { AimfizBelboz(); ! not popped Goto(Twisted_Forest); ! not popped score = score + 20; QueueInterrupt(ParrotDaemon)-->0 = false; Queue(HellhoundDaemon,65535)-->0 = true; rtrue; } if (action == ##CastYomin) { "You get a horrifying glimpse of a monstrous creature intertwined throughout Belboz's mind. You concentrate, attempting to translate this image into visual terms, and imagine a giant spider with millions of legs, wrapped around and feasting upon the body and spirit of Belboz. The image fades, and you stagger backwards."; } if (action == ##Kill && second == diamond_studded_knife) { return StabBelboz(); } if (action ~= ##CastSwanzo) rfalse; return JearrLeavesBelboz(); ]; [ AimfizBelboz ; print "After a momentary dizziness, you realize that your location has changed, although ", (name) noun, " is not in sight..."; new_line; new_line; rtrue; ]; [ RoomAction ; if (action == ##LookIn or ##Examine or ##Look) { LookSub(); ! not popped rtrue; } if (action == ##Exit or ##Drop or ##EnterObj) { return WalkAroundSub(); } if (action ~= ##WalkAround) rfalse; "Walking around the room reveals nothing new. If you want to move elsewhere, simply indicate the desired direction."; ]; [ DoorwayObjectAction ; if (action == ##Cross or ##EnterObj) { return WalkAroundSub(); } if (action ~= ##LookIn) rfalse; return CantMakeOut(); ]; [ OpeningObjectAction ; if (location == Hollow) { Casting_spell = true; if (opening == noun) { Casting_spell = true; Perform(action,brick_structure,second); ! not popped rtrue; } Casting_spell = true; Perform(action,noun,brick_structure); ! not popped rtrue; } if (action == ##ClimbUp or ##Climb or ##EnterObj or ##ClimbDown) { if (location == Forest_Edge) { return Do_Walk(d_to); } if (location == Slimy_Room) { return Do_Walk(u_to); } if (location == Hidden_Cave) { return Do_Walk(d_to); } if (location == Pit_of_Bones) { return Do_Walk(u_to); } if (location == Dungeon) { return Do_Walk(d_to); } if (location ~= Lobby) rfalse; return WalkAroundSub(); } if (action ~= ##LookIn) rfalse; return CantMakeOut(); ]; [ BlightedForestAction ; if (action == ##CastMeef) { "You're too late -- this forest dried up eons ago."; } if (action ~= ##EnterObj) rfalse; if (location == Mine_Field or Forest_Edge) { return Do_Walk(w_to); } if (location == Twisted_Forest or Tree_Branch) { return LookAroundMsg(); } return EnterOrEgress(blighted_forest); ]; [ CastleObjectAction ; if (action == ##ReadAbout) { "Egreth was the castle of King Duncanthrax."; } if (action ~= ##EnterObj) rfalse; if (location == Drawbridge or Ruins) { return Do_Walk(e_to); } return LookAroundMsg(); ]; [ CaveObjectAction ; if (action == ##EnterObj) { if (location == Mouth_of_River or Grue_Lair) { return Do_Walk(w_to); } if (location == River_Bed) { return Do_Walk(ne_to); } if (location == Pit_of_Bones) { return Do_Walk(u_to); } if (location == Belbozs_Hideout) { return Do_Walk(e_to); } return LookAroundMsg(); } if (action ~= ##LookIn) rfalse; return CantMakeOut(); ]; [ HelistarAction ; if (action == ##Who) { "Helistar is an old and powerful member of the Circle. Although a skilled and experienced magic-user, she is humorless to the point of being grim. Despite this personality flaw, Helistar is the most likely candidate to become the next Guildmaster of the Circle."; } if (action == ##Where) { "Helistar has gone on her annual two-week vacation. She usually goes to the southlands, Gurth and Mithicus."; } if (action ~= ##CastAimfiz) rfalse; AimfixPrefixMsg(); ! not popped print (string) PickOne(Helistar_goto_tbl); return JigsUp("."); ]; [ FrobarAction ; if (action == ##Who) { "Frobar is the most loyal and hard-working member of the Guild. However, he is somewhat dull and lacks imagination. It is doubtful that he would ever succeed Belboz as head of the Circle."; } if (action == ##Where) { "Perhaps he's gone into town to perform some errands."; } if (action ~= ##CastAimfiz) rfalse; AimfixPrefixMsg(); ! not popped print (string) PickOne(Frobar_goto_tbl); return JigsUp("."); ]; [ AimfixPrefixMsg ; print "When you recover from a brief dizziness, you notice ", (name) noun, " nearby, looking surprised to see you. A moment later, you realize that ", (name) noun, " is "; rtrue; ]; [ MeretzkyAction ; if (action == ##CastAimfiz) { return JigsUp("You appear on a road in a far-off province called Cambridge. As you begin choking on the polluted air, a mugger stabs you in the back with a knife. A moment later, a wild-eyed motorist plows over you."); } if (action ~= ##ReadAbout) rfalse; "Possibly the largest entry in the volume, detailing the facts and the myths about the man known as the Bearded Oracle of Yonkers."; ]; [ JearrAction ; if (action == ##ReadAbout) { "There's a long write-up in the mythology section. The evil force called Jeearr once spread pestilence and terror across many lands. Only the combined magic of many kings and wizards stopped him, even as he was preparing his final assault. He was imprisoned in the void beyond our world, his jailors warning future generations that his exile might not be permanent."; } if (action == ##CastSwanzo) { Casting_spell = true; Perform(action,Belboz); ! not popped rtrue; } if (action ~= ##CastAimfiz) rfalse; AimfizBelboz(); ! not popped Goto(Twisted_Forest); ! not popped score = score + 20; QueueInterrupt(ParrotDaemon)-->0 = false; Queue(HellhoundDaemon,65535)-->0 = true; rtrue; ]; [ SpellBookAction spell ; spell = child(spell_book); if (action == ##Examine) { print "This is the spell book given to you by Belboz after your original book was lost during your battle with Krill. "; if (spell_book has wet) { return BookIsWet(); } "There are several spells written in the book, with marginal notes about their effects and how to cast them."; } if (action == ##Close or ##Open) { "Thanks to its magic properties, the spell book is always open to the right place at the right time, but it is also always closed. This innovation eliminates tedious leafing and hunting for spells in tight situations. Many wizardly lives have been saved by this advance in magical technology."; } if (action ~= ##LookIn or ##Read) rfalse; if (spell_book has wet) { BookIsWet(); ! not popped rtrue; } if ((~~Lit) && (~~Blort_potion_drunk)) { print "Though it is dark, the magic writing of your spells casts enough light that you can read them."; new_line; } new_line; print "My Spell Book"; new_line; new_line; .labelXXX; if (~~spell) rtrue; print "The ", (name) spell, " (", (string) spell.text_string, ")."; new_line; spell = sibling(spell); jump labelXXX; ]; [ IzyukExpiresTimer ; Flying_p = false; new_line; if (location == Inside_the_Glass_Maze && NoFloorHereP()) { JigsUp("The izyuk spell wears off. Unfortunately, this room of the maze has no floor."); ! not popped } else if (location == Tree_Branch) { SettleBranch(); ! not popped } else if (location == Surface_of_Lagoon) { SplashInWater(); ! not popped } else { print "You settle gently to the ground."; new_line; } if (exhausted <= 8) rfalse; return ExhaustionDaemon(); ]; [ SoiledScrollAction itm ; if (action == ##Take) { itm = child(noun); give itm visited; give noun ~trytakebit; if (noun == parchment_scroll && (~~Glass_maze_rearranged)) { give noun visited; Glass_maze_rearranged = true; MazeRearranges(); ! not popped move noun to protagonist; "As you take the scroll, a deep and evil laugh rumbles around the hollow. You hear a sliding, grinding noise and turn just in time to catch a flicker of light from within the glass maze, indicating that its transparent panels have shifted around."; } if (noun ~= soiled_scroll) rfalse; give noun ~trytakebit; give pile_of_bat_guano ~scenery; rfalse; } if (child(noun) == nothing && child(second) == nothing) { "Bug #72"; } if (action == ##CastGnusto) { itm = child(noun); Perform(##CastGnusto,itm); ! not popped rtrue; } if (action ~= ##Read or ##Examine) rfalse; if (noun has wet) { "The scroll is wet and the spell illegible."; } itm = child(noun); print "The scroll reads ~", (name) itm, ": ", (string) itm.text_string, "~."; if (itm == aimfiz_spell or yonk_spell) { print " The spell seems very long and extremely complicated."; } new_line; rtrue; ]; [ KnowByHeart spell ; if (spell ~= gnusto_spell or frotz_spell or rezrov_spell) rfalse; rtrue; ]; [ SpellAction cnt memorized ; if (action == ##ReadAbout) { "A spell produced by ", (string) PickOne(Spell_manufacturers), "."; } if (action == ##Read) { if (noun notin spell_book && parent(noun) notin protagonist) { "You can't do that without having the spell in your book or on a scroll in your hand."; } if (parent(noun) has wet) { Perform(##Read,spell_book); ! not popped SetPronoun(noun); ! not popped rtrue; } "The spell reads ~", (string) noun.text_string, "~."; } if (action == ##Memorize) { if (KnowByHeart(noun)) { "You already know that spell by heart."; } if (noun notin spell_book) { if (parent(noun) in protagonist) { "You can't memorize a spell until you've written it into your spell book."; } return MemorizeSub(); } if (spell_book notin protagonist) { "You don't have your spell book. How do you expect to learn a spell without a spell book?"; } if ((~~Lit) && (~~Blort_potion_drunk)) { "You can't learn it in the dark."; } if (spell_book has wet) { Perform(##Read,spell_book); ! not popped SetPronoun(noun); ! not popped rtrue; } cnt = noun.memorized; if (~~Spells_learnable) { if (Spells_memorized_cnt == 1) { "You can't concentrate well enough to learn the spell."; } if (cnt == Spells_memorized_cnt) { "You try and try, but you just can't memorize those complex syllables again. They slip playfully out of your memory as soon as you cram them in."; } ForgetASpell(noun); ! not popped ++cnt; noun.memorized = cnt; memorized = true; } else { --Spells_learnable; ++cnt; noun.memorized = cnt; } print "Using your best study habits, you learn the ", (name) noun; if (cnt > 1) { print " yet another time"; } print "."; new_line; if (~~memorized) rtrue; "You have so much buzzing around in your head, though, that it's likely that something may have been forgotten in the shuffle."; } if ((~~InScope(noun)) && action ~= ##Cast) { "You can't see that spell here!"; } if (action ~= ##ThrowAt or ##Drop or ##Take) rfalse; print (string) PickOne(Yuks_table); new_line; rtrue; ]; [ ForgetASpell new_spell chosen_spell spell times_memorized spells_tbl total_spells forgotten_spell ; spell = child(spell_book); spells_tbl = Spells_memorized; .labelXXX; if (~~spell) { ! no code } else { times_memorized = spell.memorized; if (times_memorized > 0) { .labelXXX; forgotten_spell = spell; spells_tbl-->1 = spell; ++total_spells; spells_tbl = spells_tbl + 2; if (--times_memorized >= 1) jump labelXXX; } spell = sibling(spell); jump labelXXX; } if (total_spells > 0 && forgotten_spell.memorized == total_spells) { forgotten_spell.memorized = total_spells - 1; rtrue; } Spells_memorized-->0 = total_spells; if (~~total_spells) rtrue; .labelXXX; chosen_spell = PickOne(Spells_memorized); if (chosen_spell == new_spell) jump labelXXX; chosen_spell.memorized = chosen_spell.memorized - 1; rtrue; ]; [ ResetSpells cnt ; Spells_learnable = Spells_memorized_cnt; cnt = child(spell_book); .labelXXX; if (~~cnt) rtrue; cnt.memorized = 0; cnt = sibling(cnt); jump labelXXX; ]; [ KillTimers ; Potion_drunk = nothing; Flying_p = false; Bat_p = false; Mind_protected = false; Vilstu_potion_drunk = false; Blort_potion_drunk = false; Fooble_coordination = false; QueueInterrupt(IzyukExpiresTimer)-->0 = false; QueueInterrupt(FweepExpiresTimer)-->0 = false; QueueInterrupt(Vardik_timer)-->0 = false; QueueInterrupt(VilstuPotionTimer)-->0 = false; QueueInterrupt(BlortPotionExpireTimer)-->0 = false; QueueInterrupt(FoobleWearsOffTimer)-->0 = false; Toll_gnome_asleep = true; QueueInterrupt(TollBoothTimer)-->0 = false; move gnome2 to combination_dial; QueueInterrupt(ParkGnomeTimer)-->0 = false; rtrue; ]; [ WhichManufacturer ndx company ; company = Potion_manufacturers-->ndx; "A potion made by ", (string) company, "."; ]; [ Potion_evaporates potion_obj ; if (~~ThingInPlayer(potion_obj)) { SetPronoun(potion_obj); ! not popped print (string) Notholding_msg; PrintName(potion_obj,true); ! not popped "."; } move noun to combination_dial; print "The potion evaporates before it even reaches"; if (second) { PrintName(second,true); ! not popped "."; } " the ground."; ]; [ PotionWithPotionReaction ; print "Uh oh. The ", (name) noun, " seems to be having an unpleasant reaction with the ", (name) Potion_drunk, ". ", (string) PickOne(Mix_potions_tbl); return JigsUp("."); ]; [ SleepAction ; if (action == ##Take or ##WalkTo) { if (protagonist in Your_Quarters) { move protagonist to bed1; } Perform(##Sleep); ! not popped rtrue; } if (action ~= ##Find) rfalse; "Sleep anywhere."; ]; [ ExhaustionDaemon lost_spells ; if (protagonist in bed1) { new_line; print "The bed is comfortable and you are becoming tired."; new_line; ++exhausted; SleepSub(true); ! not popped return 2; } if (Load_max > 10) { Load_max = Load_max - 10; } if (Maximum_held > 1) { --Maximum_held; } if (Spells_memorized_cnt > 1) { --Spells_memorized_cnt; if (Spells_learnable) { --Spells_learnable; } if (~~Spells_learnable) { lost_spells = true; } } Queue(ExhaustionDaemon,8)-->0 = true; ++exhausted; if (exhausted > 8) { if (Flying_p) { Queue(ExhaustionDaemon,14)-->0 = true; rfalse; } new_line; print "You drop in your tracks from exhaustion."; new_line; new_line; SleepSub(); ! not popped return 2; } new_line; print "You are ", (string) Exhaustion_table-->exhausted; if (lost_spells) { print " and the spells you've memorized are becoming confused"; } "."; ]; [ HungerTimer ; if (No_need_sustenance) { Hunger_cnt = 0; Queue(HungerTimer,580 + random(80))-->0 = true; rfalse; } if (Hunger_cnt == 6) { Thirst_cnt = 6; return ThirstTimer(); } Queue(HungerTimer,11)-->0 = true; HungerThirstMsg(Hunger_cnt,H_HUNGRY); ! not popped ++Hunger_cnt; return Hunger_cnt; ]; [ ThirstTimer ; if (No_need_sustenance) { Thirst_cnt = 0; Queue(ThirstTimer,540 + random(100))-->0 = true; rfalse; } if (Thirst_cnt == 6) { new_line; return JigsUp("You pass out from lack of food and water.",true); } Queue(ThirstTimer,9)-->0 = true; HungerThirstMsg(Thirst_cnt); ! not popped ++Thirst_cnt; return Thirst_cnt; ]; [ HungerThirstMsg ndx hungry_p ; new_line; print "You are now ", (string) Degrees_of_need-->ndx; if (hungry_p) { print " hungry"; } else { print " thirsty"; } "."; ]; [ MatchSpell local1 spellname spell_obj ; if (spellname == 'gnusto') { spell_obj = gnusto_spell; } else if (spellname == 'frotz') { spell_obj = frotz_spell; } else if (spellname == 'rezrov') { spell_obj = rezrov_spell; } else if (spellname == 'izyuk') { spell_obj = izyuk_spell; } else if (spellname == 'aimfiz') { spell_obj = aimfiz_spell; } else if (spellname == 'fweep') { spell_obj = fweep_spell; } else if (spellname == 'swanzo') { spell_obj = swanzo_spell; } else if (spellname == 'golmac') { spell_obj = golmac_spell; } else if (spellname == 'vardik') { spell_obj = vardik_spell; } else if (spellname == 'pulverize') { spell_obj = pulver_spell; } else if (spellname == 'meef') { spell_obj = meef_spell; } else if (spellname == 'vezza') { spell_obj = vezza_spell; } else if (spellname == 'gaspar') { spell_obj = gaspar_spell; } else if (spellname == 'yomin') { spell_obj = yomin_spell; } else if (spellname == 'yonk') { spell_obj = yonk_spell; } else if (spellname == 'malyon') { spell_obj = malyon_spell; } if (~~spell_obj) rtrue; Obj_Found(spell_obj,local1); ! not popped rtrue; ]; [ MyBedAction rarg ; if (rarg == M_HANDLED) { if (action == ##Go) { return GetOutFirst(bed1); } if (action ~= ##Take || ThingInPlayer(noun) || (noun == sleep or lurking_grue or yourself1 or bed1 || noun in bed1)) rfalse; "You can't reach it from the bed."; } if (rarg) rfalse; if (action == ##Close or ##Open) { "Huh?"; } if (action == ##WalkTo) { Perform(##WalkTo,sleep); ! not popped rtrue; } if (action ~= ##LieOn or ##ClimbOn) rfalse; Perform(##Board,noun); ! not popped rtrue; ]; [ OtherBedAction ; if (bed2 == noun) { Casting_spell = true; Perform(action,bed1,second); ! not popped rtrue; } Casting_spell = true; Perform(action,noun,bed1); ! not popped rtrue; ]; [ BelbozQuartersAction rarg ; if (rarg ~= M_LOOK) rfalse; print "The personal chamber of Belboz, who presides over the Circle of Enchanters, is appointed with a beautiful woven wall hanging"; if (morgia_plant in location) { print ", an exotic morgia plant,"; } " and a wide darkwood desk crafted by the artisans of Gurth. The hallway lies to the east."; ]; [ PseudoPerchAction ; if (action ~= ##ClimbOn) rfalse; "I'd recommend a good doctor, but we need the eggs."; ]; [ ParrotAction ; if (action ~= ##Take) rfalse; "The parrot hops to the other end of the perch."; ]; [ ParrotDaemon ; if (parrot notin location || 40 < random(100)) rfalse; new_line; "~Squawk! ", (string) PickOne(Parrot_talk), " Squawk!~"; ]; [ DarkwoodDeskAction ; if (action == ##Examine) { print "The desk has one drawer which is "; if (desk_drawer has open) { print "open"; } else { print "closed"; } print "."; new_line; if (child(noun) == nothing) rtrue; rfalse; } if (action == ##Search && desk_drawer hasnt open && child(desk_drawer) ~= nothing) { print "You open the desk drawer and find "; PrintContents(desk_drawer); ! not popped give desk_drawer open; "."; } if (action == ##CastRezrov or ##Open or ##Close or ##LookIn or ##ReachIn) { Casting_spell = true; Perform(action,desk_drawer); ! not popped rtrue; } if (action == ##Take && darkwood_desk == second && child(desk_drawer) ~= nothing) { Perform(##Take,noun,desk_drawer); ! not popped if (child(darkwood_desk) == nothing) rtrue; rfalse; } if (action ~= ##Insert || second ~= darkwood_desk) rfalse; Perform(##Insert,noun,desk_drawer); ! not popped rtrue; ]; [ TinyBoxAction ; if (action == ##Examine) { print "There is writing on the lid of the box."; new_line; Perform(##Read,noun); ! not popped rtrue; } if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^~ MAGIC AMULET^^The closer this amulet is to^its owner, the brighter it may^glow. Ideal for leaving with^your loved ones if you go on^a long and hazardous journey.^^This amulet is sensitized to^-> BELBOZ THE NECROMANCER^^Another fine product of the^Frobozz Magic Amulet Company.~"; new_line; return NotFixedWidthFont(); ]; [ AmuletAction ; if (action == ##Examine) { print "A blue jewel hangs from a long golden chain. The jewel is "; AmuletGlowing(); ! not popped "."; } if (action ~= ##ReadAbout) rfalse; "The Amulet of Aggthora was a legendary jewel renowned for its powers of augury."; ]; [ AmuletDescription UNUSED ; print "There is an amulet here. The amulet's jewel is "; AmuletGlowing(); ! not popped "."; ]; [ AmuletGlowing ; if (InGuildHall()) { print "dark"; rtrue; } if (SomewhatNearBelboz()) { print "glowing"; rtrue; } if (SlighlyNearBelboz()) { print "glowing brightly"; rtrue; } if (InCoalMine()) { print "glowing very brightly"; rtrue; } if (VeryNearBelboz()) { print "pulsing with flashes of brilliant light"; rtrue; } print "glowing dimly"; rtrue; ]; [ InGuildHall where ; if (~~where) { where = location; } if (where == Hallway2 or Hallway1 or Chamber_of_the_Circle or Your_Quarters or Belbozs_Quarters or Lobby or Frobars_Quarters or Helistars_Quarters or Store_Room or Library or Cellar) rtrue; if (where ~= Apprentice_Quarters or Servants_Quarters) rfalse; rtrue; ]; [ InCoalMine ; if (location == Coal_Bin_Room or Dial_Room or Shaft_Bottom or Shaft_Top or Top_of_Chute or Slanted_Room) rtrue; if (location ~= Coal_Mine1 or Coal_Mine3 or Coal_Mine2) rfalse; rtrue; ]; [ SomewhatNearBelboz ; if (location == Toll_Gate_Room or End_of_Highway or Hollow or Outside_Glass_Arch or Inside_the_Glass_Maze or Store) rtrue; if (location ~= Entrance_Hall or Stone_Hut or Outside_Store) rfalse; rtrue; ]; [ SlighlyNearBelboz ; if (location == Highway or Bend or Edge_of_Crater or Crater or Winding_Tunnel or Hall_of_Carvings or Edge_of_Chasm or Bare_Passage or Sooty_Room or Elbow_Room or Tree_Room or Park_Entrance or East_End_of_Midway or Flume_Room or Haunted_House or West_End_of_Midway or Roller_Coaster or Arcade) rtrue; if (location ~= Casino) rfalse; rtrue; ]; [ VeryNearBelboz ; if (location == Ocean_Shore_North or Ocean_Shore_South or Belbozs_Hideout or Mouth_of_River or Grue_Lair or Mammoth_Cavern or Chamber_of_Living_Death or Lagoon_Shore or Lagoon_Floor) rtrue; if (location ~= Hall_of_Eternal_Pain or Surface_of_Lagoon) rfalse; rtrue; ]; [ JournalAction ; if (action == ##LookIn or ##Examine or ##Read) { if (journal has open) { "You skim through the pages of the journal, a combination diary and notebook. Most of the notations, written in Belboz's familiar flowing script, deal with meetings of the Circle and business of the Guild.^^There is one interesting entry toward the end of the book. Belboz refers to an ancient and evil force known simply as Jeearr, a demon whose powers could endanger the Circle and possibly the entire kingdom. He has decided to conduct some dangerous exploratory experiments, operating alone to shield the Circle from the perils involved.^^The last three entries are strange and frightening -- written in a hand quite different from that of Belboz, and in a language totally unfamiliar to you.^^On the inside cover is an inscription, written in a light script, which reads ~Current code: ", (string) Infotater_codes-->Infotater_select, "~."; } "It's closed and sealed with a lock."; } if (action ~= ##CastRezrov or ##Unlock or ##Open) rfalse; if (journal has open) { "The journal is already open!"; } if (action == ##CastRezrov) { "The journal seems to bear a spell protecting it against the simple rezrov spell."; } if (~~second) { if (small_key in protagonist) { second = small_key; print "(with the key)"; new_line; } else { second = your_hand; } } if (second == small_key) { give journal open; "The journal springs open."; } print "You can't unlock it with"; PrintName(second); ! not popped "."; ]; [ InfotaterAction ; if (action == ##Examine) { print "Like most infotaters, this one has several windows and a rotating data wheel. It is leather-bound and beautifully illustrated. "; return FoundInGamePackage(); } if (action == ##Read) { print "The infotater has entries on a dozen native beasts. "; return FoundInGamePackage(); } if (action == ##Spin or ##Turn) { "Refer to the infotater in your SORCERER package."; } if (action ~= ##ReadAbout) rfalse; "The infotater, which popular legends say was invented by Entharion the Wise, is the best way to store data ever discovered."; ]; [ FoundInGamePackage ; "(NOTE: This is the infotater included in your game package.)"; ]; [ TapestryAction ; if (action == ##LookUnder or ##LookBehind or ##Move or ##Raise or ##Shake or ##Touch) { if (small_key hasnt visited) { move small_key to location; SetPronoun(small_key); ! not popped give small_key visited; score = score + 15; "As you move the tapestry, a key falls out from behind it and lands on the floor."; } "Nope, no more keys."; } if (action == ##Untie or ##Take) { "It looks too well fastened to remove from the wall."; } if (action ~= ##Examine) rfalse; "It is a beautiful piece of local handiwork, given to Belboz by the grateful townspeople after his (admittedly showy) pyrotechnical destruction of the evil giant Amathradonis. The hanging is affixed to the wall at its upper corners."; ]; [ MorgiaPlantAction ; if (action == ##CastMeef) { move morgia_plant to combination_dial; "The morgia plant, particularly susceptible to the meef spell, shrivels up and vanishes."; } if (action == ##Take) { "The plant is so heavy you succeed only in budging it a few inches."; } if (action == ##Eat) { "Morgias taste terrible; besides, Belboz wouldn't like someone munching on his favorite plant."; } if (action ~= ##ReadAbout) rfalse; "A beautiful and exotic plant, the morgia is well-known for its susceptibility to magic spells."; ]; [ Hallway2Action rarg ; if (rarg ~= M_LOOK) rfalse; DescribeHallwayRooms(); ! not popped print "A heavy wooden door, currently "; if (heavy_wooden_door has open) { print "open"; } else { print "closed"; } ", leads north."; ]; [ Hallway1Action rarg ; if (rarg ~= M_LOOK) rfalse; DescribeHallwayRooms(); ! not popped "A large marble archway to the south leads into an open area."; ]; [ DescribeHallwayRooms ; print "Rooms lie to the east and west from this north-south corridor. "; rtrue; ]; [ ChamberOfCircleAction rarg ; if (rarg ~= M_LOOK) rfalse; print "The meeting place of the Circle of Enchanters is a large, round room with a high domed ceiling. A table occupies the center of the room. Engraved on the wall is a list of tenets, the Guild's code of honor. The only door, at the southernmost point of the perimeter, is "; if (heavy_wooden_door has open) { print "open"; } else { print "closed"; } "."; ]; [ PseudoTableAction ; if (action == ##ClimbOn or ##PutOn) { Table_warning_nymph = true; "A warning nymph appears, floating over the table. ~The servants just finished waxing the table, and it's still wet.~ With a sly grin, the nymph vanishes."; } if ((~~Table_warning_nymph) || action ~= ##CastPulver) rfalse; "That would cause the wax to dry dull and yellowish!"; ]; [ PseudoMarbleAction ; rfalse; ]; [ MailDeliveryTimer ; move issue_of_Popular_Enchanting to receptacle; give receptacle ~open; if (depleted_matchbook in receptacle) { move orange_vial to receptacle; move depleted_matchbook to combination_dial; } if (location == Lobby) { Mailman_here = true; Queue(MailpersonHereTimer,1)-->0 = true; new_line; "A member of the Messengers Guild walks up and puts something in the receptacle. He closes it, and rings the doorbell. Noticing you, he gives a friendly wave before departing."; } if (~~InGuildHall()) rfalse; new_line; "The Guild Hall doorbell chimes."; ]; [ MailpersonHereTimer ; Mailman_here = false; rfalse; ]; [ PopularEnchantingAction ; if (action ~= ##Read or ##LookIn or ##Open) rfalse; print "This month's cover story is about Belboz! Other stories relate the explosion of spell scroll manufacturers, and the coming shakedown in the magic potion industry. The address label on the cover reads:^^"; FixedWidthFont(); ! not popped print " ~Z5 ACCAR256 4-964^ Hall of the Guild of Enchanters^ Village of Accardi-By-The-Sea^ Land of Frobozz~"; new_line; return NotFixedWidthFont(); ]; [ VilstuVialAction ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^ ~VILSTU POTION^(obviate need for breathing)~"; new_line; return NotFixedWidthFont(); ]; [ VilstuPotionAction ; if (action == ##Drink or ##Eat && orange_vial notin protagonist) { return Potion_evaporates(orange_vial); } if (action == ##ReadAbout) { return WhichManufacturer(P_FROBOZZ); } if (action == ##Drink or ##Eat) { move orange_potion to combination_dial; if (Potion_drunk) { PotionWithPotionReaction(); ! not popped rtrue; } Potion_drunk = orange_potion; Queue(VilstuPotionTimer,19)-->0 = true; Vilstu_potion_drunk = true; if (location == Coal_Bin_Room or Dial_Room) { QueueInterrupt(OutOfBreathTimer)-->0 = false; Queue(OlderSelfDaemon,1)-->0 = true; } "The orange potion tasted like pepper, and made your nose tingle."; } if (action == ##Drop) { Perform(##Pour,noun,second); ! not popped rtrue; } if (action ~= ##Pour || noun ~= orange_potion) rfalse; return Potion_evaporates(orange_vial); ]; [ VilstuPotionTimer ; ++Vilstu_counter; if (Potion_drunk == orange_potion) { Potion_drunk = nothing; } if (Vilstu_counter == 1) { Queue(VilstuPotionTimer,4)-->0 = true; new_line; print "You feel the vilstu potion beginning to wear off"; if (InCoalMine()) { print ", and the air here seems pretty unbreathable"; } "."; } if (Vilstu_counter == 2) { Queue(VilstuPotionTimer,6)-->0 = true; new_line; print "The vilstu potion has almost completely worn off now"; if (InCoalMine()) { print ", and I doubt you could survive here without it"; } "."; } Vilstu_potion_drunk = false; if (location == Lagoon_Floor) { Queue(HoldingBreathTimer,65535)-->0 = true; } new_line; print "You feel the final effects of the vilstu potion vanish"; if (InCoalMine()) { return JigsUp(". Unfortunately, coal gas is a poor substitute for oxygen."); } exhausted = 8; Load_max = 20; Maximum_held = 1; Queue(ExhaustionDaemon,8)-->0 = true; ", leaving you totally exhausted (an unfortunate side effect)."; ]; [ PseudoStandAction ; if (action ~= ##Examine) rfalse; "A volume lies open on the stand."; ]; [ EncyclopediaAction ; if (action == ##Examine) { print "The volume lies open to "; if (Encyclopedia_read) { "a random entry."; } print "an entry about the Glass Maze of King Duncanthrax. "; Perform(##ReadAbout,glass_maze); ! not popped new_line; "You could probably read about all sorts of other interesting people, places, and things by looking them up in the encyclopedia."; } if (action == ##Open) { "It is."; } if (action == ##Close) { "Why bother?"; } if (action == ##Take) { "A library nymph appears, sitting on your wrist. ~Sorry, but the encyclopedia is never to be removed from the stand.~ Kicking you gently in the thumb, the nymph vanishes."; } if (action ~= ##LookIn) rfalse; Perform(##Read,noun); ! not popped rtrue; ]; [ BerzioVialAction ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^ ~BERZIO POTION^(obviate need for food or drink)~"; new_line; return NotFixedWidthFont(); ]; [ BerzioPotionAction ; if (action == ##Drink or ##Eat && ochre_vial notin protagonist) { return Potion_evaporates(ochre_vial); } if (action == ##ReadAbout) { return WhichManufacturer(P_FIBBSBOZZA); } if (action == ##Drink or ##Eat) { move ochre_potion to combination_dial; No_need_sustenance = true; Queue(BerzioWearsOffTimer,100)-->0 = true; score = score + 10; print "The potion was completely tasteless."; if (Hunger_cnt > 0 || Thirst_cnt > 0) { print " You no longer feel hungry and thirsty, though."; } Hunger_cnt = 0; Thirst_cnt = 0; new_line; rtrue; } if (action == ##Drop) { Perform(##Pour,noun,second); ! not popped rtrue; } if (action ~= ##Pour || noun ~= ochre_potion) rfalse; return Potion_evaporates(ochre_vial); ]; [ BerzioWearsOffTimer ; No_need_sustenance = false; rfalse; ]; [ MatchbookAction ; if (action == ##Close) { "Why bother?"; } if (action == ##Count or ##Examine or ##Open or ##Strike) { "The matches are all gone, but there is some printing on the inner cover."; } if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "~Amazing Vilstu Potion!^^Get by without breathing! Amaze your^friends! Be the first person on the^block to own some!^^Order today by dropping this in any^mailbox. Our shipping department will^use the latest in temporal travel^techniques to insure that your potion^arrives the same day you order it!^(Orders received before noon will^arrive the day before you order).~"; new_line; return NotFixedWidthFont(); ]; [ CalendarAction ; if (action ~= ##LookIn or ##Open) rfalse; Perform(##Read,calendar); ! not popped rtrue; ]; [ PseudoCobwebAction ; rfalse; ]; [ SturdyTrunkAction ; if (action == ##Take && noun == sturdy_trunk) { "It's too heavy to even budge."; } if (sturdy_trunk has open) rfalse; if (action == ##Open) { "The lid won't budge."; } if (action == ##Unlock) { "Perhaps the buttons..."; } if (action ~= ##CastRezrov) rfalse; "The lid bulges outward for a moment."; ]; [ ButtonAction ; if (action == ##LookUnder) { print (string) PickOne(Yuks_table); new_line; rtrue; } if (action ~= ##Slide) rfalse; print "There is a click from the lid of the trunk"; if (noun == black_button && Next_button == 1 || (noun == gray_button && Next_button == 2) || (noun == red_button && Next_button == 3) || (noun == purple_button && Next_button == 4) || (noun == white_button && Next_button == 5)) { ++Trunk_button_cnt; Next_button = Trunk_sequence-->Trunk_button_cnt; if ((~~Next_button) && (~~Wrong_button_pushed)) { give sturdy_trunk open; score = score + 25; print ". A moment later, the lid of the trunk swings slowly open, revealing "; PrintContents(sturdy_trunk); ! not popped } } else { Wrong_button_pushed = true; } "."; ]; [ LightningTimer ; return JigsUp("^Suddenly, seemingly from nowhere, a bolt of lightning strikes you in the center of your chest..."); ]; [ GnarledTreeAction ; if (action == ##ClimbUp or ##Climb) { return Do_Walk(u_to); } if (action == ##ClimbDown) { return Do_Walk(d_to); } if (action == ##LookUnder) { Perform(##Examine,ground); ! not popped rtrue; } if (action ~= ##CastMeef) rfalse; Casting_spell = true; Perform(##CastMeef,blighted_forest); ! not popped rtrue; ]; [ HellhoundAction ; if (action ~= ##ReadAbout) rfalse; Perform(##ReadAbout,Lobby); ! not popped rtrue; ]; [ HellhoundDaemon ; if (location == Twisted_Forest) { if (Hellhound_here) { return JigsUp("^The hellhound reaches you and tears you apart with its powerful teeth."); } Hellhound_here = true; new_line; "A hellhound is racing straight toward you, its open jaws displaying rows of razor-sharp teeth."; } if (location == Tree_Branch) { "The hellhound leaps madly about the base of the tree, gnashing its jaws."; } move hellhound to combination_dial; QueueInterrupt(HellhoundDaemon)-->0 = false; "The hellhound stops at the edge of the forest and bellows. After a moment, it turns and slinks into the trees."; ]; [ TreeBranchAction rarg ; if (rarg == M_LOOK) { print "You are "; if (Flying_p) { print "flying near"; } else { print "on"; } " a large gnarled branch of an old and twisted tree."; } if (rarg ~= M_ENTER) rfalse; Queue(SnakeTimer,65535)-->0 = true; rfalse; ]; [ ClimbTreeHigherMsg ; print "You can't "; if (Flying_p) { print "fly"; } else { print "climb"; } print " any higher."; new_line; rfalse; ]; [ SnakeAction ; if (action ~= ##Examine) rfalse; "Your average giant carnivorous snake -- except that this one has three heads and an appetite to match."; ]; [ SnakeTimer ; if (location == Tree_Branch) { if (Flying_p) rfalse; if (Boa_snake_here) { return JigsUp("^The snake begins wrapping itself around your torso, squeezing the life out of you..."); } Boa_snake_here = true; new_line; "A giant boa constrictor is slithering along the branch toward you!"; } Boa_snake_here = false; QueueInterrupt(SnakeTimer)-->0 = false; rfalse; ]; [ MineFieldAction ; if (action ~= ##Jump or ##Climb or ##ClimbOver) rfalse; "It's too tall."; ]; [ MineFieldSignMsg ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^~ *** !!! >>> WARNING <<< !!! ***^ This path is protected by a^ Magic Mine Field^ installed by the^ Frobozz Magic Mine Field Company"; new_line; return NotFixedWidthFont(); ]; [ StepOnMine ; if (noun == vezza_spell && 50 >= random(100)) { return Forest_Edge; } if (Flying_p) { print "Unfortunately, one of the properties of magic mine fields is their ability to blow you up even if you're floating above them. "; } JigsUp("Kaboom!!!..."); ! not popped rfalse; ]; [ PseudoPit1Action ; if (action ~= ##EnterObj) rfalse; return LookAroundMsg(); ]; [ PseudoCrackAction ; if (action ~= ##EnterObj) rfalse; return Do_Walk(d_to); ]; [ SnakePitAction rarg ; if (rarg ~= M_ENTER) rfalse; Queue(SnakePitTimer,1 + random(3))-->0 = true; rfalse; ]; [ SnakePitTimer ; if (location == Snake_Pit) { return JigsUp("^Suddenly, the pit comes alive as dozens of vipers strike and thousands of giant beetles pour from their hiding places."); } QueueInterrupt(SnakePitTimer)-->0 = false; rtrue; ]; [ LichenAction ; if (action == ##CastMeef) { "A few patches of the moss and lichens become brown and dry."; } if (action ~= ##Eat) rfalse; return JigsUp("Uh, oh. They taste poisonous."); ]; [ MeadowAction rarg ; if (rarg == M_ENTER) { Queue(LocustDaemon,65535)-->0 = true; rfalse; } if (rarg ~= M_LOOK) rfalse; print "You are in the center of a "; if (meadow in location) { print "rolling meadow of tall grass"; } else { print "barren field"; } ". To the east is the turret of a ruined castle, and from the northeast comes the sound of rushing water."; ]; [ MeadowObjectAction ; if (location ~= Meadow_Room && action == ##CastMeef or ##Touch) { "The meadow is too far away."; } if (action ~= ##CastMeef) rfalse; move meadow to combination_dial; "The grass vanishes as far as the eye can see."; ]; [ LocustAction ; if (action ~= ##LookUnder) rfalse; Perform(##Examine,meadow); ! not popped rtrue; ]; [ LocustDaemon ; if (location ~= Meadow_Room) { QueueInterrupt(LocustDaemon)-->0 = false; Locust_cnt = 0; rfalse; } if (~~Locust_cnt) { ++Locust_cnt; new_line; "A swarm of bloodsucking locusts appears on the horizon."; } if (Locust_cnt == 1) { ++Locust_cnt; new_line; "The locusts are much closer now, blotting out the sun like a black storm cloud."; } Locust_cnt = 0; return JigsUp("^The locusts swarm over you and pick you clean to the bones."); ]; [ RiverBankRoomAction rarg ; if (rarg == M_LOOK) { print "You are on a muddy bank "; if (River_bed_dry) { print "above a dried-up river bed"; } else { print "of a fast-moving river, full of sharp rocks and foaming rapids, flowing to the southwest. The ground is soft and eroded, and continually threatens to dump you into the turbulent waters"; } ". A field lies to the southwest, and a trail leads southeast along the bank."; } if (rarg ~= M_BEFORE) rfalse; if (Time_spent_near_riverbank < 3) { ++Time_spent_near_riverbank; rfalse; } if (River_bed_dry || Flying_p || 75 < random(100)) rfalse; return JigsUp("Oops! A section of the bank gives way and you tumble into the river. The current dashes you against the rocks."); ]; [ PseudoRocksAction ; if (action ~= ##Cross) rfalse; print (string) PickOne(Yuks_table); new_line; rtrue; ]; [ RiverBank_down_dir ; if (River_bed_dry) { return River_Bed; } if (Flying_p) { JigsUp("You fly across the river's surface. Suddenly, a downdraft plunges you into the swirling rapids!"); ! not popped rfalse; } print "You'd never survive the rapids."; new_line; rfalse; ]; [ RiverObjectAction ; if (location == Gun_Emplacement or Turret) { "The river lies far below."; } if (River_bed_dry) { "River? What river?"; } if (action == ##DrinkFrom or ##Drink) { Perform(##Drink,water); ! not popped rtrue; } if (action == ##CastPulver) { if (location == River_Bank_Room) { River_bed_dry = true; Queue(TrickleTimer,3)-->0 = true; "The river dries up, leaving only a few puddles between the rocks! It's now safe to climb down into the river bed."; } "The water level drops several feet, but quickly surges back."; } if (action == ##Examine) { "The river flows quickly by below you."; } if (action == ##Insert && river == second) { move noun to combination_dial; return PlaceInWater(); } if (action ~= ##EnterObj) rfalse; return Do_Walk(n_to); ]; [ TrickleTimer ; Queue(RiverReturnsTimer,2)-->0 = true; if (location ~= River_Bank_Room or River_Bed or Near_Stagnant_Pool or Top_of_Falls) rfalse; new_line; "A trickle of water begins flowing down the center of the river bed."; ]; [ RiverReturnsTimer ; River_bed_dry = false; ClearRoomOfObjects(River_Bed); ! not popped ClearRoomOfObjects(Near_Stagnant_Pool); ! not popped ClearRoomOfObjects(Top_of_Falls); ! not popped new_line; if (location == Near_Stagnant_Pool or River_Bed or Top_of_Falls) { return JigsUp("A wall of water comes rushing down the river bed! You are smashed into jelly against the rocks."); } if (location == River_Bank_Room) { "A wall of water rushes down the river bed as the river returns with a vengeance."; } if (location ~= Hidden_Cave) rfalse; "There is a roar of water from outside the cave. The lower part of the cave, near the mouth, fills with a pool of swirling water!"; ]; [ ClearRoomOfObjects room itm sib ; itm = child(room); if (~~itm) rtrue; .labelXXX; sib = sibling(itm); if (itm ~= protagonist) { move itm to combination_dial; } if (~~sib) rtrue; itm = sib; jump labelXXX; ]; [ UndergrowthAction ; if (action ~= ##CastMeef) rfalse; "The nearest part of the undergrowth withers away ... revealing more undergrowth."; ]; [ RiverBankAction ; if (action ~= ##Climb or ##ClimbDown or ##ClimbUp) rfalse; return WalkAroundSub(); ]; [ RiverBedObjectAction ; if (action == ##EnterObj) { if (location == River_Bank_Room) { return Do_Walk(d_to); } return LookAroundMsg(); } if (action ~= ##Exit or ##Drop) rfalse; if (location == River_Bank_Room) { return LookAroundMsg(); } return Do_Walk(u_to); ]; [ RiverBedAction rarg ; if (rarg ~= M_ENTER) rfalse; Predictions-->1 = 0; rfalse; ]; [ PseudePuddleAction ; if (action == ##EnterObj) { "The puddles are very shallow."; } if (action ~= ##CastPulver) rfalse; Casting_spell = true; Perform(##CastPulver,water); ! not popped rtrue; ]; [ PseudoFishAction ; if (action ~= ##Take) rfalse; "They squirm from your grasp."; ]; [ DieInPool ; if (Flying_p) { print "You fly over the surface of the pool."; } else { print "You wade into the stagnant pool."; } JigsUp(" Suddenly, powerful tentacles lash out and drag you under the surface."); ! not popped rfalse; ]; [ TopOfFalls_up_dir ; print "The banks are too "; if (Flying_p) { print "high to fly over."; new_line; rfalse; } print "steep to climb."; new_line; rfalse; ]; [ TopOfFalls_down_dir ; if (Flying_p) { print "That would be foolhardy, as flying spells are of limited duration."; new_line; rfalse; } print "That would involve quite a plunge."; new_line; rfalse; ]; [ PseudoHazeAction ; if (action == ##ClimbDown) { "Impossible."; } if (action ~= ##Jump) rfalse; return JigsUp("Brilliant move."); ]; [ PseudoCliff2Action ; if (action ~= ##Touch) rfalse; "From here?"; ]; [ WaterfallObjectAction ; if (action == ##Examine) { "It's no Aragain Falls, but it's pretty impressive."; } if (action == ##Jump && location == Top_of_Falls) { noun = nothing; Perform(##Jump); ! not popped rtrue; } if (location ~= Mouth_of_River or Turret || action ~= ##Smell or ##Touch or ##Jump or ##Listen) rfalse; "From here?"; ]; [ HiddenAcaveAction rarg ; if (rarg == M_ENTER && Hidden_Cave hasnt visited) { score = score + 20; return score; } if (rarg ~= M_LOOK) rfalse; print "This is a hollow area under the northeast bank of the river. The floor rises away from the mouth of the cave, which is at its southwest end. "; if (~~River_bed_dry) { print "The mouth is filled with a pool of swirling water. "; } "A dark hole leads downward at the far end of the cave."; ]; [ GuanoAction ; if (action ~= ##Take || soiled_scroll has visited) rfalse; give soiled_scroll visited; give pile_of_bat_guano visited; give pile_of_bat_guano ~trytakebit; give pile_of_bat_guano ~scenery; move pile_of_bat_guano to protagonist; "As you take the guano, the soiled scroll falls to the ground."; ]; [ BlortVialAction ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^ ~BLORT POTION^(ability to see in dark places)~"; new_line; return NotFixedWidthFont(); ]; [ BlortPotionAction ; if (action == ##Drink or ##Eat && (~~ThingInPlayer(amber_vial))) { return Potion_evaporates(amber_vial); } if (action == ##ReadAbout) { return WhichManufacturer(P_FIBBSBOZZA); } if (action == ##Drink or ##Eat) { move amber_potion to combination_dial; if (Potion_drunk) { PotionWithPotionReaction(); ! not popped rtrue; } Queue(BlortPotionExpireTimer,24)-->0 = true; Blort_potion_drunk = true; Potion_drunk = amber_potion; "The amber potion tasted like chives, and made your eyes tingle."; } if (action == ##Drop) { Perform(##Pour,noun,second); ! not popped rtrue; } if (action ~= ##Pour || noun ~= amber_potion) rfalse; return Potion_evaporates(amber_vial); ]; [ BlortPotionExpireTimer ; Blort_potion_drunk = false; if (Potion_drunk == amber_potion) { Potion_drunk = nothing; } new_line; print "Your eyes tingle for a moment."; if (~~Lit) { print " You can no longer see anything around you!"; } new_line; rtrue; ]; [ FweepExpiresTimer ; Bat_p = false; Flying_p = false; new_line; print "After a moment of futilely flapping your arms, you realize that the fweep spell has worn off. "; if (location == Inside_the_Glass_Maze && NoFloorHereP()) { JigsUp("Unfortunately, this room of the maze has no floor."); ! not popped } else if (location == Tree_Branch) { SettleBranch(); ! not popped } else if (location == Surface_of_Lagoon) { SplashInWater(); ! not popped } else { print "You fall several feet to the ground."; new_line; } if (exhausted <= 8) rfalse; return ExhaustionDaemon(); ]; [ DrawbridgeAction rarg ; if (rarg == M_BEFORE && (~~Flying_p)) { if (Bridge_creaks) { if (40 >= random(100)) { print "With a scream of splintering wood, part of the drawbridge collapses and spills you into the moat. "; return Do_Walk(d_to); } "The bridge continues to creak."; } Bridge_creaks = true; rfalse; } if (rarg ~= M_LOOK) rfalse; print "You are "; if (Flying_p) { print "floating over"; } else { print "standing on"; } print " the drawbridge of a ruined castle which lies to your east. The wood of the bridge looks severely rotted"; if (Flying_p) { print ". The moat is"; } else { print " and creaks ominously beneath you. The moat, although an easy dive from here, looks dangerous,"; } " full of sinister shapes beneath the surface of the water. To the west is a wide field."; ]; [ Drawbridge_d_dir ; JigsUp("You are immediately set upon by alligators and piranhas."); ! not popped rfalse; ]; [ MoatAction ; if (action == ##CastPulver) { "The moat dries up, leaving vicious-looking creatures flopping around in puddles. Immediately, the castle's automatic moat-filler turns on, and refills the moat."; } if (action == ##DrinkFrom or ##Drink) { Perform(##Drink,water); ! not popped rtrue; } if (action == ##Examine) { "The water is murky, and lily pads cover most of the surface. Dark shapes swim about below the surface."; } if (action ~= ##EnterObj or ##Jump) rfalse; return Do_Walk(d_to); ]; [ wooden_DrawbridgeAction ; if (action == ##LookUnder) { Perform(##Examine,moat); ! not popped rtrue; } if (action ~= ##Listen) rfalse; "Creak, creak."; ]; [ RuinsAction ; if (action == ##EnterObj) { if (location == Ruins) { return Do_Walk(u_to); } if (location == Meadow_Room) { return EnterOrEgress(it); } return LookAroundMsg(); } if (action == ##Exit or ##Drop) { if (location == Turret) { return Do_Walk(d_to); } return LookAroundMsg(); } if (action ~= ##Jump || location ~= Turret) rfalse; noun = nothing; Perform(##Jump); ! not popped rtrue; ]; [ TortureDeviceAction ; if (action ~= ##Examine) rfalse; "All the usual torture devices are here, all quite mean and deadly looking."; ]; [ FlaxoVialAction ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^ ~FLAXO POTION^(exquisite torture)~"; new_line; return NotFixedWidthFont(); ]; [ FlaxoPotionAction ; if (action == ##Drink or ##Eat && (~~ThingInPlayer(indigo_vial))) { return Potion_evaporates(indigo_vial); } if (action == ##ReadAbout) { return WhichManufacturer(P_MAGICLAND); } if (action == ##Drink or ##Eat) { move indigo_potion to combination_dial; print "The potion tastes like a combination of anchovies, prune juice, and garlic powder. As you finish swallowing the potion, a well-muscled troll saunters in"; if (location == Torture_Chamber) { print " and straps you to a torture device"; } ". He whacks your head with a wooden two-by-four, grunting ~You are playing Sorcerer. It was written by S. Eric Meretzky. You will have fun and enjoy yourself.~ He repeats this action 999 more times, then vanishes without a trace."; } if (action == ##Drop) { Perform(##Pour,noun,second); ! not popped rtrue; } if (action ~= ##Pour || noun ~= indigo_potion) rfalse; return Potion_evaporates(indigo_vial); ]; [ PitOfBones_u_dir ; if (Flying_p) { print "You can't fly high enough to reach the hole."; new_line; rfalse; } print "The hole is too high to reach."; new_line; rfalse; ]; [ PseudoBonesAction ; if (action == ##Dig or ##Search or ##Take) { "They're at the bottom of the pit."; } if (action ~= ##CastMalyon) rfalse; return JigsUp("The results are too hideous to describe."); ]; [ PseudoPit2Action ; if (action == ##EnterObj or ##Jump) { return Do_Walk(d_to); } if (action ~= ##LookIn) rfalse; "Bones. Lots of bones."; ]; [ TollGateRoomAction ; if (toll_gate has open) { return 152[Outside_Store?]; } if (Flying_p) { Perform(##ClimbOver,toll_gate); ! not popped rfalse; } print "A sturdy toll gate blocks the highway."; new_line; rfalse; ]; [ TollGateObjectAction ; if (action == ##Close or ##Open) { if (OpenOrClose()) rtrue; "Only the gnome can do that."; } if (action == ##CastRezrov) { if (toll_gate has open) rfalse; if (Toll_gnome_asleep) { Toll_gnome_asleep = false; Queue(TollBoothTimer,2)-->0 = true; "The gate flies open, waking the gnome, who leaps up and slams it closed again. ~Hey! This is a toll gate! Nobody gets through here without paying the one zorkmid toll. Not nobody, not no how.~"; } Toll_gnome_asleep = true; return JigsUp("The gate flies open, but the gnome immediately slams it shut again. ~Trying to gate crash, huh? We have an answer for scofflaws like you. Hey, Tholl!~ A troll lumbers out of the toll booth. ~This is Tholl the Toll Troll. Tholl, remove this cheat.~ Tholl approaches and slices you neatly in half with his axe."); } if (action ~= ##Climb or ##ClimbOver) rfalse; "The gate extends to the roof of the tunnel, and there are pointed nasties all over it."; ]; [ TollBoothAction ; if (action == ##EnterObj) { if (toll_gate has open) { return JigsUp("As you enter, you stumble over a sleeping troll. With stunning reflexes, he grabs a battle axe and minces you."); } "The booth is on the other side of the toll gate."; } if (action ~= ##LookIn) rfalse; if (toll_gate has open) { "It's dark inside the toll booth."; } Perform(##EnterObj,toll_booth); ! not popped rtrue; ]; [ TollGnomeDescription UNUSED ; if (Toll_gnome_asleep) { "A fat old gnome with a long white beard is sleeping soundly just outside the toll booth. His loud snores echo around the caverns."; } "A chubby gnome stands behind the toll gate, grinning broadly."; ]; [ TollGnomeAction ; if (gnome1 == player) { if (Toll_gnome_asleep) { SleepingGnomeMsg(); ! not popped return StopParse(); } if (action == ##Open && noun == toll_gate) { "~You'll have to pay the toll first,~ explains the gnome cheerfully, ~and the toll is one zorkmid.~"; } print "~Conversing with customers is disallowed by union rules.~"; new_line; return StopParse(); } if (action == ##Kick or ##Shake && Toll_gnome_asleep) { Perform(##Wake,gnome1); ! not popped rtrue; } if (action == ##Listen && Toll_gnome_asleep) { "The gnome snores loudly."; } if (action == ##Wake) { if (~~Toll_gnome_asleep) { "He's awake!"; } if (toll_gate has open) { "The gnome opens one eye and looks at you. ~You again! Just go through. Let me sleep.~ He begins snoring again."; } if (Gnome_interrupted_once) { return JigsUp("~You again! You've interrupted my nap for the last time! THOLL!!~ A huge troll lumbers out of the toll booth and tears you into itsy-bitsy pieces."); } Toll_gnome_asleep = false; Queue(TollBoothTimer,2)-->0 = true; "The gnome stirs a bit and opens one eye, which wanders around until it notices you. He jumps to his feet. ~One zorkmid, please,~ he yells with a smile."; } if (action == ##AskFor or ##AskAbout or ##Give && Toll_gnome_asleep) { "The gnome is asleep, remember?"; } if (toll_gate has open && action == ##ReachIn or ##LookIn or ##Search or ##Pick && ((~~Zorkmid_stolen) && (~~Bat_p))) { Zorkmid_stolen = true; move zorkmid_coin to protagonist; "You carefully search the sleeping gnome, and take the zorkmid coin you find in his pocket!"; } if (action == ##Give && noun == zorkmid_coin) { if (zorkmid_coin has light) { CoinIsFrotzedMsg(); ! not popped rtrue; } give toll_gate open; Toll_gnome_asleep = true; move zorkmid_coin to combination_dial; QueueInterrupt(TollBoothTimer)-->0 = false; score = score + 20; "The gnome pockets the coin and opens the gate. Before you can take a step the gnome falls asleep again."; } if (action ~= ##CastYomin) rfalse; if (Toll_gnome_asleep) { "The thoughts of the sleeping gnome are focused on certain activities involving female gnomes. Embarrassed, you withdraw."; } "The thoughts of the gnome seem evenly divided between getting money from you and getting back to sleep."; ]; [ CoinIsFrotzedMsg ; "The gnome refuses, saying ~That coin is giving off light, and is therefore not legal tender.~"; ]; [ TollBoothTimer ; Queue(TollBoothTimer,65535)-->0 = true; if (location == Toll_Gate_Room) { ++Toll_gnome_annoyance_cnt; if (Toll_gnome_annoyance_cnt == 5) { Toll_gnome_asleep = true; QueueInterrupt(TollBoothTimer)-->0 = false; Gnome_interrupted_once = true; new_line; "~Thanks for nothing, chum,~ growls the gnome as he resumes his nap."; } new_line; "~Well?~ asks the gnome, tapping impatiently. ~You've interrupted my nap. Are you going to pay the toll, or not?~"; } Toll_gnome_asleep = true; Toll_gnome_annoyance_cnt = 3; QueueInterrupt(TollBoothTimer)-->0 = false; rfalse; ]; [ PseudoSignr1Action ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^~ZEKE'S APPLIANCE STORE^^ Official outlet for all^Frobozz Magic Appliances~"; new_line; return NotFixedWidthFont(); ]; [ PseudoStoreAction ; if (action == ##EnterObj) { if (location == Store) { return LookAroundMsg(); } return Do_Walk(s_to); } if (action == ##Drop or ##Exit) { if (location == Store) { return Do_Walk(n_to); } return LookAroundMsg(); } if (action ~= ##LookIn) rfalse; if (location == Store) { return LookAroundMsg(); } return CantMakeOut(); ]; [ FloorWaxerAction ; if (action == ##SwitchOn) { if (ThingInPlayer(floor_waxer)) { "Better put it down, first."; } if (Bat_p) { return Batty(); } if (location == Surface_of_Lagoon or Lagoon_Floor) { return JigsUp("The waxer short circuits in the water, electrocuting you and several nearby fishies."); } if (location == Mine_Field) { Flying_p = false; move floor_waxer to combination_dial; return Do_Walk(n_to); } print "The waxer whirrs about the "; if (parent(protagonist) has vehicle) { print "vehicle"; } else { print "room"; } " for a minute, polishing the floor."; } if (action ~= ##SwitchOff) rfalse; "It is."; ]; [ CraterAction rarg ; if (rarg ~= M_LOOK) rfalse; print "You are "; if (Flying_p) { print "floating near"; } else { print "standing in"; } " the center of an enormous crater, strewn with debris. Several points around the perimeter look climbable."; ]; [ CraterNoGoAnywhere ; WalkAroundSub(); ! not popped rfalse; ]; [ CraterCantGo ; if (Flying_p) { print "As you try to fly over the rim here, a heavy gust of wind blows you back."; new_line; rfalse; } print "You attempt to climb the rim here, but the rubble is loose and you slide back down."; new_line; rfalse; ]; [ SlimyRoomAction ; if (action == ##EnterObj) { if (location == Crater) { "Where do you think you are?"; } if (location == Edge_of_Crater) { return Do_Walk(sw_to); } if (location == Edge_of_Chasm) { return Do_Walk(e_to); } if (location == Slimy_Room) { return Do_Walk(s_to); } return Do_Walk(n_to); } if (action == ##Climb) { return WalkAroundSub(); } if (action ~= ##Disembark or ##Exit or ##Leave) rfalse; if (location == Crater) { return Do_Walk(u_to); } return LookAroundMsg(); ]; [ CrossingGorge_dir ; if (Flying_p) { print "You fly easily across the chasm..."; new_line; new_line; if (location == Bare_Passage) { return Edge_of_Chasm; } return Bare_Passage; } print "If you really want to jump across the chasm, just say so."; new_line; rfalse; ]; [ PseudoGorgeAction ; if (action ~= ##Jump) rfalse; if (75 >= random(100)) { return JigsUp("Too bad. Didn't quite make it."); } if (location == Edge_of_Chasm) { return Goto(Bare_Passage); } return Goto(Edge_of_Chasm); ]; [ TreeRoomAction rarg ; if (rarg ~= M_ENTER) rfalse; Predictions-->3 = 0; rfalse; ]; [ ZorkmidTreeAction ; if (action == ##Examine) { "It is laden with zorkmids, glinting in the light."; } if (action == ##CastRezrov) { return CastSwanzoSub(); } if (action ~= ##ClimbUp or ##Climb) rfalse; "The branches don't look sturdy enough."; ]; [ ZorkmidAction ; if (action == ##Pick && noun has trytakebit && zorkmid_coin == noun) { Perform(##Take,noun,second); ! not popped rtrue; } if (action == ##Take && noun has trytakebit) { give noun ~trytakebit; give noun ~scenery; move zorkmid_tree to combination_dial; move zorkmid_coin to protagonist; score = score + 15; "As you pluck the first zorkmid, the tree shimmers and vanishes! (I guess it was just an illusion.) You are left holding a solitary zorkmid coin."; } if (action == ##Examine or ##Count && zorkmid_tree in location) { "There are countless coins, hanging from every branch of the tree."; } if (action == ##Examine) { "The coin pictures a man with an incredibly flat head, wearing a gaudy crown."; } if (action == ##Bite) { "Yep, it's real."; } if (action ~= ##ReadAbout) rfalse; print "An article in the monetary section explains that the zorkmid was the unit of currency of the Great Underground Empire, and is still used in most parts of the kingdom today. A picture of a zorkmid coin is included. "; Perform(##Examine,zorkmid_coin); ! not popped rtrue; ]; [ HallOfCarvingsAction rarg ; if (rarg ~= M_LOOK) rfalse; print "You have entered a large room whose walls are covered with intricate carvings. "; if (Dragon_carving_moved) { print "A passage has been recently opened to the south, and is only partially blocked by a huge stone dragon, poised in the midst of an attack."; } else { print "The largest and most striking carving, on the southern wall, is of a huge sleeping dragon!"; } " A winding tunnel leads north."; ]; [ DragonCarvingAction ; if (action ~= ##CastMalyon) rfalse; if (Yonk_enhanced_malyon) { if (Dragon_carving_moved) { return JigsUp("The dragon comes to life again! He spews a tremendous gout of flame right at you!"); } Dragon_carving_moved = true; "The dragon is suddenly imbued with life and begins to move. It shakes itself loose from the wall, which crumbles down upon the dragon, revealing a southward passage! The dragon howls with pain and anger. Spotting you, the dragon rears back its head, smoke billowing from its nostrils. Then, just as it seems that you will be barbecued, the dragon reverts to stone!"; } "The dragon seems to shiver for a moment, but that is all."; ]; [ FortAction ; if (action == ##EnterObj) { if (location == Parade_Ground or Gun_Emplacement or Barracks or Armory) { return LookAroundMsg(); } if (location == Fort_Entrance) { return Do_Walk(e_to); } return EnterOrEgress(fort); } if (action == ##Exit or ##Drop) { if (location == Parade_Ground) { return Do_Walk(w_to); } if (location == Gun_Emplacement or Barracks or Armory) { return EnterOrEgress(fort,true); } return LookAroundMsg(); } if (action ~= ##ReadAbout) rfalse; "Fort Griffspotter once guarded the lands near Egreth Castle from attack by sea."; ]; [ ParadeGroundAction rarg ; if (rarg == M_ENTER) { Predictions-->2 = 0; rfalse; } if (rarg ~= M_BEFORE || (~~Start_of_game)) rfalse; QueueInterrupt(LightningTimer)-->0 = false; return LightningTimer(); ]; [ PseudoRopeAction ; if (action == ##Move) { Perform(##Lower,flag_of_Quendor); ! not popped rtrue; } if (action ~= ##Take) rfalse; "The rope is attached to the pole and can't possibly be removed."; ]; [ FlagpoleAction ; if (action == ##ClimbUp or ##Climb or ##ClimbOn) { "That sort of thing went out of fashion years ago."; } if (action ~= ##Examine) rfalse; "A rope runs up the side of the pole."; ]; [ FlagOfQuendorDescription UNUSED ; if (Flag_raised) { "A tattered flag, apparently that of ancient Quendor, still flies atop a mighty flagpole in the center of the field."; } "A flag displaying the brown and gold of ancient Quendor is lying here."; ]; [ FlagOfQuendorAction ; if (action == ##Fly) { Perform(##Raise,flag_of_Quendor); ! not popped rtrue; } if (Flag_raised) { if (action == ##Raise) { "It's already at the top of the pole."; } if (action == ##Lower) { Flag_raised = false; give flag_of_Quendor ~trytakebit; give flagpole ~scenery; "The flag is lowered to the ground."; } if (action == ##Examine) { "You can't see it very well from here -- the flagpole is very tall."; } if (action == ##Take or ##Wave or ##Shake or ##Eat or ##Touch or ##Move or ##LookIn or ##Drink) { print "The flag is "; if (Flying_p) { print "still "; } "way above you at the top of the flagpole!"; } if (action ~= ##LookUnder) rfalse; Perform(##Examine,flagpole); ! not popped rtrue; } if (action == ##Raise) { if (location == Parade_Ground) { give flag_of_Quendor trytakebit; move flag_of_Quendor to location; give flagpole scenery; Flag_raised = true; "The flag is raised to the top of the pole."; } "There's no flagpole in sight."; } if (action == ##Lower) { "You've already done that."; } if (action == ##Wave) { "How patriotic!"; } if (action == ##Wear) { "Who do you think you are, Abbie Hoffman?"; } if (action == ##Shake or ##LookIn or ##Examine or ##Search or ##Touch && (~~Aqua_vial_found)) { Aqua_vial_found = true; move aqua_vial to location; SetPronoun(aqua_vial); ! not popped "As you fiddle with the flag, an aqua vial drops from a hidden pocket and falls to the ground."; } if (action ~= ##Examine) rfalse; "The tattered flag displays the brown and gold of ancient Quendor."; ]; [ FoobleVialAction ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^ ~FOOBLE POTION^(increase muscular coordination)~"; new_line; return NotFixedWidthFont(); ]; [ FooblePotionAction ; if (action == ##Drink or ##Eat && (~~ThingInPlayer(aqua_vial))) { return Potion_evaporates(aqua_vial); } if (action == ##ReadAbout) { return WhichManufacturer(P_MAGICLAND); } if (action == ##Drink or ##Eat) { move aqua_potion to combination_dial; if (Potion_drunk) { PotionWithPotionReaction(); ! not popped rtrue; } Potion_drunk = aqua_potion; Queue(FoobleWearsOffTimer,17)-->0 = true; Fooble_coordination = true; "The aqua potion tasted like lime jelly, and sent vibrations through your muscles."; } if (action == ##Drop) { Perform(##Pour,noun,second); ! not popped rtrue; } if (action ~= ##Pour || noun ~= aqua_potion) rfalse; return Potion_evaporates(aqua_vial); ]; [ FoobleWearsOffTimer ; Fooble_coordination = false; if (Potion_drunk == aqua_potion) { Potion_drunk = nothing; } new_line; "Your muscles feel limp for a moment."; ]; [ PseudoBarracksAction ; Casting_spell = true; Perform(action,room,second); ! not popped rtrue; ]; [ GunEmplacement_east_dir ; if (Flying_p) { print "The updrafts from the "; if (noun == local_globals) { print "river"; } else { print "ocean"; } } else { print "The plunge"; } print " would kill you."; new_line; rfalse; ]; [ CannonAction ; if (action == ##SwitchOn or ##Shoot) { "This cannon probably hasn't worked for centuries!"; } if (action == ##Close) { return DeflateSub(); } if (action == ##Search or ##ReachIn && pile_of_identical_scrolls has concealed) { Bitten_p = true; Queue(BiteTimer,20)-->0 = true; "Something bites your hand!"; } if (action == ##LookIn && pile_of_identical_scrolls has concealed) { give pile_of_identical_scrolls ~concealed; "Lying at the bottom of the barrel is a pile of identical scrolls!"; } if (action == ##Examine) { "The barrel is wide enough to hold the hugest of cannonballs, but it isn't very deep."; } if (action == ##Search or ##ReachIn && pile_of_identical_scrolls in cannon) { Perform(##Take,pile_of_identical_scrolls); ! not popped rtrue; } if (action == ##Insert && pile_of_identical_scrolls in cannon && pile_of_bat_guano == noun) { move pile_of_identical_scrolls to combination_dial; move ordinary_scroll to cannon; SetPronoun(ordinary_scroll); ! not popped move pile_of_bat_guano to cannon; print "When you drop the guano into the barrel, "; if (pile_of_identical_scrolls has concealed) { print "dozens of scrolls pour out and literally run off"; } else { print "the scrolls sprout feet and spill out of the cannon, dashing away"; } print " in every direction! A single ordinary scroll is left sitting at the bottom of the barrel."; new_line; give pile_of_identical_scrolls ~concealed; rtrue; } if (action ~= ##EnterObj || (~~Bat_p)) rfalse; "Your wingspan is too large."; ]; [ IdenticalScrollAction ; if (action == ##Take) { Bitten_p = true; Queue(BiteTimer,20)-->0 = true; "As you reach into the cannon, something bites you painfully on the hand!"; } if (action ~= ##Examine) rfalse; "Every scroll is virtually identical."; ]; [ BiteTimer ; Bitten_p = false; rfalse; ]; [ AmusementParkObjAction ; if (action == ##EnterObj) { if (location == Park_Entrance) { return Do_Walk(w_to); } return LookAroundMsg(); } if (action == ##Drop or ##Exit) { if (location == East_End_of_Midway) { return Do_Walk(e_to); } if (location == Park_Entrance) { return LookAroundMsg(); } return EnterOrEgress(amusement_park,true); } if (action ~= ##ReadAbout) rfalse; "Bozbarland was a magical futuristic fantasy amusement park, oft referred to as the entertainment capital of the Great Underground Empire. The lower classes usually called it simply Zorky Park."; ]; [ PseudoSign2Action ; if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "^$$$$$ WELCOME TO BOZBARLAND $$$$$^ The Entertainment Capital^ of the Empire"; new_line; return NotFixedWidthFont(); ]; [ ParkEntranceAction ; if (Park_admission_paid) { return 45[East_End_of_Midway?]; } if (gnome2 in location) { print "As you bounce off the barrier, the gnome admonishes, ~Tsk, tsk ... you can't enter without paying your zorkmid!~"; new_line; rfalse; } move gnome2 to location; Queue(ParkGnomeTimer,6)-->0 = true; print "You bounce off an invisible barrier. A moment later a gnome appears, dressed in a gaudy plaid outfit. ~Admission to the park is only one zorkmid. What a bargain, chum, eh?~"; new_line; rfalse; ]; [ ParkGnomeTimer ; move gnome2 to combination_dial; if (location ~= Park_Entrance) rfalse; new_line; "~Well, I can't wait all day, buddy,~ growls the gnome before vanishing."; ]; [ FlashyGnomeAction ; if (action == ##Tell) { print "~Listen, fella, I was in the middle of something important and I don't have time to gab. Gonna pay the admission fee, or not?~"; new_line; return StopParse(); } if (action == ##CastYomin) { "The gnome is thinking about the poker game you interrupted."; } if (action ~= ##Give || second ~= gnome2 || noun ~= zorkmid_coin) rfalse; if (zorkmid_coin has light) { CoinIsFrotzedMsg(); ! not popped rtrue; } move zorkmid_coin to combination_dial; move gnome2 to combination_dial; Park_admission_paid = true; QueueInterrupt(ParkGnomeTimer)-->0 = false; "~Okay, you can go through now, bub. Enjoy your trip to Bozbarland.~ The gnome vanishes as suddenly as he appeared."; ]; [ MidwayAction ; if (action == ##EnterObj) { if (location == Flume_Room or Arcade) { return Do_Walk(n_to); } if (location == Roller_Coaster or Haunted_House) { return Do_Walk(s_to); } if (location == Casino) { return Do_Walk(e_to); } return LookAroundMsg(); } if (action ~= ##Exit or ##Drop) rfalse; return WalkAroundSub(); ]; [ EastEndOfMidwayAction rarg ; if (rarg ~= M_ENTER) rfalse; Predictions-->4 = 0; rfalse; ]; [ HauntedHouseAction rarg ; if (rarg == M_LOOK) { if (Lit) { print "Something about this place seems to soak up all light, so that it"; } else if (Blort_potion_drunk) { print "Despite the effects of the blort potion, this place "; } else { print "It"; } " is quite dark. You can see vague shapes swaying about in the darkness."; } if (rarg ~= M_ENTER) rfalse; Queue(HauntedHouseDaemon,1)-->0 = true; rfalse; ]; [ HauntedHouseDaemon ; Queue(HauntedHouseDaemon,65535)-->0 = true; if (location ~= Haunted_House) { QueueInterrupt(HauntedHouseDaemon)-->0 = false; rfalse; } if (65 < random(100)) rfalse; new_line; print (string) PickOne(Haunted_msg); new_line; rtrue; ]; [ HideStuffOnRide room itm sib ; On_rollercoaster = true; itm = child(room); .labelXXX; sib = sibling(itm); if (itm ~= protagonist or car or log_boat) { give itm concealed; } if (~~sib) rtrue; itm = sib; jump labelXXX; ]; [ UnconcealStuffOnRide itm sib ; On_rollercoaster = false; Roller_coaster_cnt = 0; QueueInterrupt(RideDaemon)-->0 = false; QueueInterrupt(RollerCoasterDaemon)-->0 = false; itm = child(Flume_Room); .labelXXX; sib = sibling(itm); give itm ~concealed; if (~~sib) { ! no code } else { itm = sib; jump labelXXX; } itm = child(Roller_Coaster); .labelXXX; sib = sibling(itm); give itm ~concealed; if (~~sib) rtrue; itm = sib; jump labelXXX; ]; [ DescribeRide ride ; print " A ", (name) ride, " sits at the platform, beckoning you to enter."; rtrue; ]; [ ParkNymphMsg ride ; "An amusement park nymph appears for a moment, warning you not to leave the ", (name) ride, " during the course of the ride."; ]; [ PlaqueMsg ; print " A small plaque hangs nearby. The midway is visible to the "; rtrue; ]; [ PseudoPlaqueAction ; if (action ~= ##Examine or ##Read) rfalse; print "~Constructed by the Frobozz Magic "; if (location == Flume_Room) { print "Flume"; } else { print "Roller Coaster"; } " Company.~"; ]; [ FlumeRoomAction rarg ; if (rarg ~= M_LOOK) rfalse; if (On_rollercoaster) rtrue; print "You are at the boarding platform of a fast-moving flume, flowing off beyond your view."; PlaqueMsg(); ! not popped print "north."; if (protagonist notin log_boat) { DescribeRide(log_boat); ! not popped } new_line; rtrue; ]; [ FlumeAction ; if (action == ##CastPulver) { "In order to prevent damage to public life and property, flumes are protected against this sort of prank."; } if (action == ##Board) { Perform(##Board,log_boat); ! not popped rtrue; } if (action ~= ##ReadAbout) rfalse; "Flumes are artifical water channels, usually with boat rides. The boat is typically a hollowed-out log. The largest flume of this kind is in Bozbarland."; ]; [ LogBoatAction rarg ; if (rarg == M_HANDLED && action == ##Go) { return GetOutFirst(log_boat); } if (rarg) rfalse; if (action == ##Close or ##Open) { "Huh?"; } if (action == ##ClimbOn or ##Enter or ##EnterObj) { Perform(##Board,noun); ! not popped rtrue; } if (action == ##Rise or ##Disembark or ##Drop or ##Exit && On_rollercoaster) { UnconcealStuffOnRide(); ! not popped return JigsUp("Bad time to leave the log boat. The flume is fast and rough."); } if (action ~= ##Board || On_rollercoaster) rfalse; HideStuffOnRide(Flume_Room); ! not popped move protagonist to log_boat; Queue(RideDaemon,2)-->0 = true; print "As you enter the log boat, it lurches away from the platform and is carried swiftly away by the current of the flume. "; return ParkNymphMsg(log_boat); ]; [ RideDaemon ; Queue(RideDaemon,65535)-->0 = true; ++Roller_coaster_cnt; if (~~On_rollercoaster) { QueueInterrupt(RideDaemon)-->0 = false; Roller_coaster_cnt = 0; rfalse; } new_line; if (Roller_coaster_cnt == 1) { "The flume is wide here, and straight as an arrow. The ride is quite relaxing."; } if (Roller_coaster_cnt == 2) { "You enter a stretch of sharp, winding curves! Spray dashes your face as you are tossed about the log boat!"; } if (Roller_coaster_cnt == 3) { "The twists and turns are left behind as you approach the mouth of a dark tunnel."; } if (Roller_coaster_cnt == 4) { if (Lit || Blort_potion_drunk) { "The flume winds through a tunnel whose walls are black as coal. You pass an opening which provides a brief glimpse of troglodytes digging and hauling coal."; } "It is pitch black. The roar of the flume's current echoes about the tunnel. A spot of light is visible ahead."; } if (Roller_coaster_cnt == 5) { "The log boat leaves the tunnel and passes through a series of rapids, shooting straight toward jagged rocks and then veering away at the last moment!"; } if (Roller_coaster_cnt == 6) { "Magically, the flume flows uphill here! The current slows as the boat climbs and climbs..."; } if (Roller_coaster_cnt == 7) { "You reach the crest of the flume's final drop. You can see swirling white water below!"; } if (Roller_coaster_cnt == 8) { "The log boat plunges down into the swirling waters at the base of the slope! Huge splashes of water spray off in every direction, but amazingly you stay dry!"; } if (Roller_coaster_cnt ~= 9) rfalse; UnconcealStuffOnRide(); ! not popped QueueInterrupt(RideDaemon)-->0 = false; "The boat floats serenely around a final turn and pulls up to the boarding platform."; ]; [ RollerCoasterAction rarg ; if (rarg ~= M_LOOK) rfalse; if (On_rollercoaster) rtrue; print "You are at the boarding platform of a huge roller coaster, sprawling above and around you in every direction."; PlaqueMsg(); ! not popped print "south."; if (protagonist notin car) { DescribeRide(car); ! not popped } new_line; rtrue; ]; [ RollerCoasterCarAction rarg ; if (rarg == M_HANDLED && action == ##Go) { return GetOutFirst(car); } if (rarg) rfalse; if (action == ##Close or ##Open) { "Huh?"; } if (action == ##ClimbOn or ##Enter or ##EnterObj) { Perform(##Board,noun); ! not popped rtrue; } if (action == ##Rise or ##Disembark or ##Drop or ##Exit && On_rollercoaster) { UnconcealStuffOnRide(); ! not popped return JigsUp("Dumb idea. Your body ricochets off several wooden supports as it plummets to the ground."); } if (action == ##Exit or ##Drop) { Perform(##Disembark,noun); ! not popped rtrue; } if (action ~= ##Board || On_rollercoaster) rfalse; HideStuffOnRide(Roller_Coaster); ! not popped move protagonist to car; Queue(RollerCoasterDaemon,2)-->0 = true; print "As you enter the car, it rolls away from the platform in a gentle curve. "; return ParkNymphMsg(car); ]; [ RollerCoasterDaemon ; Queue(RollerCoasterDaemon,65535)-->0 = true; ++Roller_coaster_cnt; if (~~On_rollercoaster) { QueueInterrupt(RollerCoasterDaemon)-->0 = false; UnconcealStuffOnRide(); ! not popped rfalse; } new_line; if (Roller_coaster_cnt == 1) { "The car, propelled by some unseen force, rolls up a huge incline. The crest grows tantalizingly closer."; } if (Roller_coaster_cnt == 2) { "You reach the crest, the highest point of the roller coaster! The park is laid out beneath you like a map; the lights of the midway, the booths of the arcade, the sparkling blue ribbon of water that must be the flume. In the distance is a wide crater. The sounds and smells of the park seem distant, and time feels suspended for a moment."; } if (Roller_coaster_cnt == 3) { "The breath is swept from your lungs as the car begins diving, seemingly straight downward. You rise from the seat as the ground rushes closer! At the last moment, the car swings upward, and your stomach settles in your ankles."; } if (Roller_coaster_cnt == 4) { "The car zips through a series of wild turns and sharp drops. Wooden roller coaster supports whiz past, inches from your head!"; } if (Roller_coaster_cnt == 5) { "This section of track is shaped like a corkscrew, and as the car hurtles forward it turns upside down almost every second. It is impossible to tell up from down, as the ground seems to spin around you."; } if (Roller_coaster_cnt == 6) { "The car shoots into a rapid climb, which gets progressively slower and steeper. Your heart beats wildly as the track begins to swing back above you, and you realize that you are entering a giant loop!"; } if (Roller_coaster_cnt == 7) { "As you reach the highest point of the loop, you hang completely upside-down for a brief moment. The blood rushes to your head as the ground suspended ~above~ you like a canopy. Then, you hurtle down the far side of the loop with breakneck speed!"; } if (Roller_coaster_cnt == 8) { print "The roller coaster speeds out of the loop and into a tunnel"; if (Lit || Blort_potion_drunk) { print ", which seems to run through the middle of a haunted house! Wispy ghosts and ghoulish skeletons brush past you"; } else { print ". You shiver as horrible slimy things brush across your face"; } "."; } if (Roller_coaster_cnt ~= 9) rfalse; UnconcealStuffOnRide(); ! not popped QueueInterrupt(RollerCoasterDaemon)-->0 = false; "The car zooms out into daylight, and glides to a stop at the boarding platform."; ]; [ ArcadeAction rarg ; if (rarg ~= M_BEFORE || Won_pitch || rubber_ball notin hawker) rfalse; "~C'mon, pal!~ cries the hawker from the game booth. ~Try your luck!~ He holds the ball out toward you."; ]; [ Arcade_north_dir ; if (ThingInPlayer(rubber_ball)) { print "The hawker yells after you, ~Hey buddy, come back with that ball!~"; new_line; new_line; return West_End_of_Midway; } return West_End_of_Midway; ]; [ PseudoBoothAction ; if (action ~= ##EnterObj) rfalse; "The hawker pushes you away."; ]; [ HawkerAction ; if (hawker == player) { if (noun == rubber_ball && second == yourself1 && action == ##Give) { player = protagonist; Perform(##Take,rubber_ball); ! not popped rtrue; } print "~No time to gab, kid."; if (~~Won_pitch) { print " C'mon and give it a try. One hit wins!"; } print "~"; new_line; return StopParse(); } if (action == ##CastYomin) { "The hawker is thinking about finding a good stogie, whatever that is."; } if (action ~= ##CastAimfiz) rfalse; return JigsUp("You appear in an amusement park game booth. The point of the game is to pierce balloons with darts. Speaking of points, you are suddenly pierced by 37 flying darts."); ]; [ RubberBallAction ; if (action == ##Take) { give rubber_ball ~scenery; give rubber_ball ~trytakebit; rfalse; } if (action == ##Attack && noun == hopping_bunny) { Perform(##ThrowAt,rubber_ball,hopping_bunny); ! not popped rtrue; } if (action ~= ##ThrowAt || second ~= hopping_bunny || (~~ThingInPlayer(rubber_ball))) rfalse; if (Fooble_coordination) { move glittering_scroll to protagonist; score = score + 10; Won_pitch = true; move rubber_ball to combination_dial; "A tremendous pitch sends a bunny spinning. ~What an arm, kid, what an arm!~ cries the hawker. He hands you a glittering scroll from the shelf of prizes. ~Here's your prize, now scram.~"; } move rubber_ball to hawker; give rubber_ball scenery; give rubber_ball trytakebit; (string) PickOne(Pitching_game_tbl), " This game is harder than it looks. The hawker, leering, retrieves the ball."; ]; [ HoppingBunnyAction ; if (action ~= ##CastMalyon) rfalse; "The bunnies hop away and the startled hawker scrambles after them. He returns a moment later, holding the again inanimate bunnies, and gives you a nasty glare."; ]; [ CasinoAction rarg ; if (rarg ~= M_ENTER || (~~Jackpot_hit)) rfalse; Jackpot_hit = false; print "You enter just as a group of casino nymphs finish cleaning up the last of the zorkmid coins."; new_line; new_line; rtrue; ]; [ OneArmedBanditAction wheel1 wheel2 wheel3 ; if (action ~= ##Slide or ##Move) rfalse; if (Bat_p) { return Batty(); } if (Won_slotmachine) { "The machine rattles loudly and makes a few feeble pings."; } if (25 >= random(100)) { wheel1 = Wheel_items-->1; } else if (33 >= random(100)) { wheel1 = Wheel_items-->2; } else if (50 >= random(100)) { wheel1 = Wheel_items-->3; } else { wheel1 = Wheel_items-->4; } if (25 >= random(100)) { wheel2 = Wheel_items-->1; } else if (33 >= random(100)) { wheel2 = Wheel_items-->2; } else if (50 >= random(100)) { wheel2 = Wheel_items-->3; } else { wheel2 = Wheel_items-->4; } if (25 >= random(100)) { wheel3 = Wheel_items-->1; } else if (33 >= random(100)) { wheel3 = Wheel_items-->2; } else if (50 >= random(100)) { wheel3 = Wheel_items-->3; } else { wheel3 = Wheel_items-->4; } print "Ping!^A ", (string) wheel1, " appears in the first section of the display.^Ping!^A ", (string) wheel2, " appears in the second section of the display.^Ping!^A ", (string) wheel3, " appears in the third section of the display."; new_line; if (wheel1 ~= wheel2 || wheel1 ~= wheel3) rtrue; if (wheel1 == Wheel_items-->1) { Jackpot_hit = true; return JigsUp("Ping! Ping! Ping! Ping! Ping! Ping!^An unbelievable torrent of zorkmid coins pours out of the machine -- far more than the machine could possibly contain! You are buried and crushed under the huge mass of coins."); } move zorkmid_coin to location; Won_slotmachine = true; "Ping! Ping! Ping!^A zorkmid coin drops out of the machine and lands at your feet."; ]; [ GlassMazeObjectAction ; if (action == ##EnterObj) { if (location == Outside_Glass_Arch) { return Do_Walk(e_to); } if (location == Hollow) { return Do_Walk(w_to); } return LookAroundMsg(); } if (action == ##Exit or ##Drop) { if (location == Inside_the_Glass_Maze) { return Do_Walk(out_to); } return LookAroundMsg(); } if (action == ##LookIn or ##Examine) { "You see nothing but reflected light in all directions."; } if (action ~= ##ReadAbout) rfalse; "According to the article, Duncanthrax built the Glass Maze on a whim, to amuse his friends and torture his enemies. A labyrinth of 27 cubicles, it was full of devilish pitfalls and was located near his castle, Egreth."; ]; [ StoneHovelObjectAction ; if (action == ##EnterObj) { if (location == End_of_Highway) { return Do_Walk(e_to); } return LookAroundMsg(); } if (action == ##Exit or ##Drop) { if (location == Stone_Hut) { return Do_Walk(w_to); } return LookAroundMsg(); } if (action ~= ##LookIn) rfalse; if (location == Stone_Hut) { return LookAroundMsg(); } return CantMakeOut(); ]; [ StoneHutAction ; if (Bat_p) { print "Too narrow even for bats."; new_line; rfalse; } print "Where did you get the bizarre notion that you might fit up a chimney?"; new_line; rfalse; ]; [ fireplaceAction ; if (action ~= ##Close or ##Open) rfalse; return DeflateSub(); ]; [ DuncanthraxStatueAction ; if (action == ##CastMalyon) { print "The statue transforms into a living figure, probably a King if the royal attire is any clue. The King seems angry, and quickly settles his wrathful gaze on you. He bellows ~Guards! Throw this trespasser into the glass maze! Guards! ... GUARDS!!!~ When the guards fail to respond, the King becomes livid, his voice rises to an incoherent squeak, and flecks of foam spit from the corners of his mouth. Finally, eyes bulging with rage, he storms out of the room."; new_line; give statue visited; King_animated = true; Queue(DuncanthraxTurnsIntoStatueTimer,1)-->0 = true; if (location == Entrance_Hall or Outside_Store) { if (50 >= random(100)) { move statue to Highway; rtrue; } move statue to Bend; rtrue; } if (50 >= random(100)) { move statue to Entrance_Hall; rtrue; } move statue to Outside_Store; rtrue; } if (action ~= ##Follow || (~~King_animated)) rfalse; "The King moved too quickly to follow."; ]; [ DuncanthraxTurnsIntoStatueTimer ; King_animated = false; rfalse; ]; [ NoFloorHereP ; if (Glass_maze_rearranged && (~~Maze1_floor-->Maze_location)) rfalse; if (Glass_maze_rearranged || Maze2_floor-->Maze_location) rtrue; rfalse; ]; [ GlassMazeAction rarg ; if (rarg == M_ENTER) { RelocateMazeObjectsIn(Maze_location); ! not popped give Inside_the_Glass_Maze ~visited; Predictions-->5 = 0; rtrue; } if (rarg ~= M_LOOK) rfalse; print "You are inside a huge cubical maze, shimmering with light from an unseen source above."; if (~~Bat_p) { print " It is impossible to tell if the walls and ceilings around you are glass surfaces or openings."; } if ((~~Flying_p) && NoFloorHereP() && Maze_location == M_13_NxNxN) { print " "; OopsNoFloor(); ! not popped rtrue; } if ((~~Flying_p) && (~~NoFloorHereP())) { print " Since you are standing on something, the floor must be solid, but it is virtually invisible and you feel as though you were walking on air."; } if (Bat_p) { SonarSurroundings(); ! not popped } new_line; rtrue; ]; [ SonarSurroundings one_printed cnt abovep belowp northp southp eastp westp ; one_printed = false; abovep = false; belowp = false; northp = false; southp = false; eastp = false; westp = false; cnt = 0; print " Thanks to your sonar-like bat senses, you can tell that there are surfaces "; if (Glass_maze_rearranged && (~~Maze1_ceiling-->Maze_location) || ((~~Glass_maze_rearranged) && (~~Maze2_ceiling-->Maze_location))) { abovep = true; ++cnt; } if (Glass_maze_rearranged && (~~Maze1_floor-->Maze_location) || ((~~Glass_maze_rearranged) && (~~Maze2_floor-->Maze_location))) { belowp = true; ++cnt; } if (Glass_maze_rearranged && (~~Maze1_north-->Maze_location) || ((~~Glass_maze_rearranged) && (~~Maze2_north-->Maze_location))) { northp = true; ++cnt; } if (Glass_maze_rearranged && (~~Maze1_south-->Maze_location) || ((~~Glass_maze_rearranged) && (~~Maze2_south-->Maze_location))) { southp = true; ++cnt; } if (Glass_maze_rearranged && (~~Maze1_east-->Maze_location) || ((~~Glass_maze_rearranged) && (~~Maze2_east-->Maze_location))) { eastp = true; ++cnt; } if (Glass_maze_rearranged && (~~Maze1_west-->Maze_location) || ((~~Glass_maze_rearranged) && (~~Maze2_west-->Maze_location))) { westp = true; ++cnt; } if (abovep) { if (cnt == 1) { print " and "; } else if (one_printed) { print ", "; } one_printed = true; --cnt; print "above you"; } if (belowp) { if (cnt == 1) { print " and "; } else if (one_printed) { print ", "; } one_printed = true; --cnt; print "below you"; } if (northp) { if (cnt == 1) { print " and "; } else if (one_printed) { print ", "; } one_printed = true; --cnt; print "to the north"; } if (southp) { if (cnt == 1) { print " and "; } else if (one_printed) { print ", "; } one_printed = true; --cnt; print "to the south"; } if (eastp) { if (cnt == 1) { print " and "; } else if (one_printed) { print ", "; } one_printed = true; --cnt; print "to the east"; } if (westp) { if (cnt == 1) { print " and "; } else if (one_printed) { print ", "; } one_printed = true; --cnt; print "to the west"; } print "."; rtrue; ]; [ MoveInMaze ; if (Glass_maze_rearranged) { RelocateMazeObjectsOut(Maze_location); ! not popped if (noun == shiny_scroll) { if (~~Flying_p) { NoJump(); ! not popped RelocateMazeObjectsIn(Maze_location); ! not popped rfalse; } if (~~Maze1_ceiling-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze1_ceiling-->Maze_location; } else if (noun == rezrov_spell) { if (~~Flying_p) { FloorIsSolid(); ! not popped RelocateMazeObjectsIn(Maze_location); ! not popped rfalse; } if (~~Maze1_floor-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze1_floor-->Maze_location; } else if (noun == local_globals) { if (~~Maze1_north-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze1_north-->Maze_location; } else if (noun == vezza_spell) { if (~~Maze1_south-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze1_south-->Maze_location; } else { if (noun == yourself1) { if (~~Maze1_east-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze1_east-->Maze_location; if (Maze_location ~= (M_26_NxNxN|M_4_NxNxN)) jump labelXXX; Maze_location = M_24_NxNxN; return Hollow; } if (noun == Shaft_Bottom) { if (~~Maze1_west-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze1_west-->Maze_location; if (Maze_location == (M_8_NxNxN|invalidEnum32)) { Maze_location = M_13_NxNxN; return Outside_Glass_Arch; } } } .labelXXX; RelocateMazeObjectsIn(Maze_location); ! not popped LookSub(); ! not popped OopsNoFloor(); ! not popped rfalse; } RelocateMazeObjectsOut(Maze_location); ! not popped if (noun == shiny_scroll) { if (~~Flying_p) { NoJump(); ! not popped RelocateMazeObjectsIn(Maze_location); ! not popped rfalse; } if (~~Maze2_ceiling-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze2_ceiling-->Maze_location; } else if (noun == rezrov_spell) { if (~~Flying_p) { FloorIsSolid(); ! not popped RelocateMazeObjectsIn(Maze_location); ! not popped rfalse; } if (~~Maze2_floor-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze2_floor-->Maze_location; } else if (noun == local_globals) { if (~~Maze2_north-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze2_north-->Maze_location; } else if (noun == vezza_spell) { if (~~Maze2_south-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze2_south-->Maze_location; } else { if (noun == yourself1) { if (~~Maze2_east-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze2_east-->Maze_location; if (Maze_location ~= (M_26_NxNxN|M_4_NxNxN)) jump labelXXX; score = score + Maze_score; Maze_score = 0; Maze_location = M_24_NxNxN; return Hollow; } if (noun == Shaft_Bottom) { if (~~Maze2_west-->Maze_location) { RunIntoWall(); ! not popped rfalse; } Maze_location = Maze2_west-->Maze_location; if (Maze_location == (M_8_NxNxN|invalidEnum32)) { Maze_location = M_13_NxNxN; return Outside_Glass_Arch; } } } .labelXXX; RelocateMazeObjectsIn(Maze_location); ! not popped LookSub(); ! not popped OopsNoFloor(); ! not popped rfalse; ]; [ RunIntoWall ; print "BONK! You "; if (Flying_p) { print "fly"; } else { print "walk"; } " right into an almost invisible wall of glass -- a stunning blow!"; ]; [ NoJump ; "You can't possibly jump that high."; ]; [ FloorIsSolid ; "Fortunately, the floor is solid."; ]; [ OopsNoFloor ; if (Flying_p || (~~NoFloorHereP())) rfalse; JigsUp("Unfortunately, this section of the glass maze has no floor."); ! not popped rfalse; ]; [ RelocateMazeObjectsOut room_num ndx itm sib ; itm = child(Inside_the_Glass_Maze); .labelXXX; if (~~itm) rtrue; sib = sibling(itm); if (itm == player) { ! no code } else if (itm has takeable || itm == splattered_body) { .labelXXX; if (~~MazeObjects-->ndx) { MazeObjects-->ndx = room_num; MazeObjects-->(ndx + 1) = itm; ndx = ndx + 2; move itm to combination_dial; } else { ndx = ndx + 2; jump labelXXX; } } itm = sib; jump labelXXX; ]; [ RelocateMazeObjectsIn room_num UNUSED=102 ndx ; .labelXXX; if (ndx >= 40) rtrue; if (MazeObjects-->ndx == room_num) { MazeObjects-->ndx = 0; move MazeObjects-->(ndx + 1) to Inside_the_Glass_Maze; } ndx = ndx + 2; jump labelXXX; ]; [ DropItemInMaze ndx room_below ; if (Glass_maze_rearranged) { if (Maze_location == M_12_NxNxN) { room_below = M_3_NxNxN; } else if (Maze_location == M_13_NxNxN) { room_below = M_4_NxNxN; } else if (Maze_location == M_16_NxNxN) { room_below = M_7_NxNxN; } else if (Maze_location == M_18_NxNxN) { room_below = M_9_NxNxN; } else if (Maze_location == M_19_NxNxN) { room_below = M_10_NxNxN; } else if (Maze_location == M_20_NxNxN) { room_below = M_11_NxNxN; } else if (Maze_location == M_25_NxNxN) { room_below = M_7_NxNxN; } else if (Maze_location == M_27_NxNxN) { room_below = M_9_NxNxN; } } else if (Maze_location == M_10_NxNxN) { room_below = M_1_NxNxN; } else if (Maze_location == M_12_NxNxN) { room_below = M_3_NxNxN; } else if (Maze_location == M_16_NxNxN) { room_below = M_7_NxNxN; } else if (Maze_location == M_20_NxNxN) { room_below = M_11_NxNxN; } else if (Maze_location == M_21_NxNxN) { room_below = M_3_NxNxN; } else if (Maze_location == M_26_NxNxN) { room_below = M_17_NxNxN; } if (~~room_below) { "Bug #14"; } .labelXXX; if (~~MazeObjects-->ndx) { MazeObjects-->ndx = room_below; MazeObjects-->(ndx + 1) = noun; ndx = ndx + 2; rtrue; } ndx = ndx + 2; jump labelXXX; ]; [ MazeRearranges ndx ; .labelXXX; if (ndx >= 40) rtrue; if (MazeObjects-->ndx == M_12_NxNxN) { MazeObjects-->ndx = M_3_NxNxN; } else if (MazeObjects-->ndx == M_13_NxNxN) { MazeObjects-->ndx = M_4_NxNxN; } else if (MazeObjects-->ndx == M_16_NxNxN) { MazeObjects-->ndx = M_7_NxNxN; } else if (MazeObjects-->ndx == M_18_NxNxN) { MazeObjects-->ndx = M_9_NxNxN; } else if (MazeObjects-->ndx == M_19_NxNxN) { MazeObjects-->ndx = M_10_NxNxN; } else if (MazeObjects-->ndx == M_20_NxNxN) { MazeObjects-->ndx = M_11_NxNxN; } else if (MazeObjects-->ndx == M_25_NxNxN) { MazeObjects-->ndx = M_7_NxNxN; } else if (MazeObjects-->ndx == M_27_NxNxN) { MazeObjects-->ndx = M_9_NxNxN; } ndx = ndx + 2; jump labelXXX; ]; [ HollowAction rarg ; if (rarg ~= M_BEFORE || (~~ThingInPlayer(spell_book))) rfalse; move spell_book to combination_dial; "~Caw! Caw!~ A giant bird of prey with a fondness for gnusto-receptive paper swoops down and flies off with your spell book."; ]; [ ChimneyAction ; if (location ~= Hollow) rfalse; if (noun == chimney) { Casting_spell = true; Perform(action,brick_structure,second); ! not popped rtrue; } Casting_spell = true; Perform(action,noun,brick_structure); ! not popped rtrue; ]; [ BrickStructureAction ; if (action == ##Examine) { "The structure is about two feet on each side, and extends up from the ground about three feet. Except for a large quantity of soot around the opening, it looks a lot like a small, rectangular well."; } if (action == ##LookIn) { "The opening is dark and you can only see a few feet into it."; } if (action == ##ClimbDown or ##Enter) { return Do_Walk(d_to); } if (action == ##Insert && second == brick_structure) { move noun to fireplace; if (noun == parchment_scroll) { Queue(DornbeastTimer,2)-->0 = true; } "The ", (name) noun, " disappears into the shaft."; } if (action == ##ReachIn) { "The shaft extends beyond your reach."; } if (action ~= ##EnterObj) rfalse; return Do_Walk(d_to); ]; [ DornBeastAction ; if (action ~= ##ReadAbout) rfalse; Perform(##ReadAbout,Lobby); ! not popped rtrue; ]; [ SplatteredBodyAction ; if (action ~= ##CastMalyon) rfalse; return JigsUp("The corpse comes to life just long enough to fry you."); ]; [ DornbeastTimer ; Queue(DornbeastTimer,65535)-->0 = true; if (location == Hollow) { if (Dornbeast_alerted) { return DornbeastGaze(); } move ferocious_dorn_beast to location; Dornbeast_alerted = true; new_line; "With a loud roar, a dreadfully huge dorn beast emerges from the shadows at the base of the cliff and gallops toward you."; } give ferocious_dorn_beast scenery; if (~~Dornbeast_alerted) { Dornbeast_alerted = true; new_line; "From outside the maze, you hear the bellowing of a ferocious dorn beast!"; } if (Maze_location == Previous_dornbeast_loc or Current_dornbeast_loc) { new_line; return DornbeastGaze(); } new_line; print "The dorn beast rushes after you. Its ear-splitting bellowing resounds throughout the glass maze."; if (Maze_location == M_27_NxNxN) { Dornbeast_dead = true; QueueInterrupt(DornbeastTimer)-->0 = false; move ferocious_dorn_beast to combination_dial; MazeObjects-->38 = M_9_NxNxN; MazeObjects-->39 = (M_17_NxNxN|invalidEnum64); print " Suddenly, the dorn-beast realizes that it is galloping through midair, and gives a surprisingly high-pitched squeal. It claws frantically at thin air, trying desperately to invent dorn beast flight. You happily notice that dorn beasts do not so much fly as plummet."; } else { Current_dornbeast_loc = Previous_dornbeast_loc; Previous_dornbeast_loc = Maze_location; move ferocious_dorn_beast to location; } new_line; rtrue; ]; [ DornbeastGaze ; return JigsUp("The dorn beast fries your brain with its hypnotic gaze and begins secreting digestive juices."); ]; [ LumpOfCoalAction ; if (action ~= ##Take) rfalse; "Such menial tasks are best left to troglodytes."; ]; [ SootyRoomAction rarg ; if (rarg ~= M_ENTER || Sooty_Room has visited) rfalse; score = score + 20; return score; ]; [ Coalmine_passage_dir ; if (Coal_Bin_Room has visited) { print "That passage is now completely blocked by a cave-in."; new_line; rfalse; } return Coal_Bin_Room; ]; [ PseudoTimberAction ; if (action ~= ##Move) rfalse; return JigsUp("Part of the ceiling collapses onto you."); ]; [ CoalBinRoomAction rarg ; if (rarg == M_ENTER) { if (location hasnt visited) { Combination_number = random(873); Predictions-->5 = 0; print "There is a rumbling noise behind you as the ceiling of the tunnel collapses, blocking your retreat! The air smells strongly of coal gas. "; if (Vilstu_potion_drunk) { Queue(OlderSelfDaemon,2)-->0 = true; print "Good thing you took that vilstu potion"; } else { Queue(OutOfBreathTimer,2)-->0 = true; print "You won't survive long in this atmosphere"; } print "."; new_line; new_line; rtrue; } if (~~Time_travelled) rfalse; Queue(YoungerSelfDaemon,65535)-->0 = true; move your_younger_self to location; if (Twin_has_spellbook) { if (spell_book in Lagoon_Floor) { Spellbook_in_lagoon = true; } move spell_book to your_younger_self; give spell_book trytakebit; } Lit = LitP(location); return Lit; } if (rarg ~= M_BEFORE || 35 < random(100)) rfalse; new_line; "A few lumps of coal spill from the coal chute."; ]; [ OutOfBreathTimer ; new_line; if (Almost_out_of_breath) { return JigsUp("Finally, the shortage of oxygen gets to you."); } Almost_out_of_breath = true; Queue(OutOfBreathTimer,2)-->0 = true; "You are about to pass out from the bad air."; ]; [ CoalBinObjectAction ; if (action == ##LookIn) { "It's full of coal."; } if (action ~= ##Dig or ##Search) rfalse; "You find nothing of interest."; ]; [ UpperCoalChuteAction ; if (action == ##Jump or ##EnterObj) { if (location == Top_of_Chute or Slanted_Room) { return Do_Walk(d_to); } return LookAroundMsg(); } if (action == ##Climb or ##ClimbUp) { if (location == Top_of_Chute) { return TopOfChuteMsg(true); } return Do_Walk(u_to); } if (action == ##ClimbDown) { if (location == Coal_Bin_Room) { return TopOfChuteMsg(); } return Do_Walk(d_to); } if (action == ##LowerIn or ##Insert && second == upper_coal_chute) { if (location == Top_of_Chute or Slanted_Room) { if (noun == beam_of_wood && Rope_tied_to_beam) { move rope to Coal_Bin_Room; move beam_of_wood to Coal_Bin_Room; Rope_in_upper_chute = false; give beam_of_wood ~trytakebit; give rope ~trytakebit; return BeamAndRopeSlideMsg(); } if (noun == rope && Rope_tied_to_beam) { if (MustDropBeam()) rtrue; Rope_in_upper_chute = true; give beam_of_wood trytakebit; give rope trytakebit; move rope to location; return RopeInChuteMsg(); } if (noun.size < 20) { move noun to combination_dial; } else { move noun to Coal_Bin_Room; } return ThingDownChuteMsg(); } if (location ~= Coal_Bin_Room) rfalse; return LookAroundMsg(); } if (action ~= ##LookIn) rfalse; Perform(##ReadAbout,upper_coal_chute); ! not popped rtrue; ]; [ LowerCoalChuteAction ; if (action == ##Climb or ##ClimbUp) { if (location == Coal_Bin_Room) { return TopOfChuteMsg(true); } return Do_Walk(u_to); } if (action == ##Jump or ##EnterObj or ##ClimbDown) { if (location == Lagoon_Shore) { return TopOfChuteMsg(); } return Do_Walk(d_to); } if (action == ##LowerIn or ##Insert && second == lower_coal_chute) { if (location == Coal_Bin_Room) { if (noun == beam_of_wood && Rope_tied_to_beam) { move rope to Lagoon_Floor; move beam_of_wood to Lagoon_Floor; Rope_in_lower_chute = false; give rope ~trytakebit; return BeamAndRopeSlideMsg(); } if (noun == rope && Rope_tied_to_beam) { if (MustDropBeam()) rtrue; Rope_in_lower_chute = true; give rope trytakebit; move rope to location; return RopeInChuteMsg(); } move noun to Lagoon_Floor; if (noun has paper || noun == spell_book) { give noun wet; } return ThingDownChuteMsg(); } if (location ~= Coal_Bin_Room) rfalse; return LookAroundMsg(); } if (action ~= ##LookIn) rfalse; Perform(##ReadAbout,lower_coal_chute); ! not popped rtrue; ]; [ MustDropBeam ; if (~~ThingInPlayer(beam_of_wood)) rfalse; "You'll have to drop the beam before doing that."; ]; [ BeamAndRopeSlideMsg ; "The beam and rope both slide into the chute."; ]; [ RopeInChuteMsg ; "The rope hangs from the beam, into the chute."; ]; [ ThingDownChuteMsg ; "The ", (name) noun, " disappears into the chute."; ]; [ OlderSelfAction ; if (player == your_older_self) { print "Your older self ignores your words."; new_line; return StopParse(); } if (action == ##Examine) { (string) Twin_msg, " The stranger is carrying a smelly scroll."; } if (action == ##Give && noun == spell_book) { move spell_book to your_older_self; give spell_book trytakebit; "Your older self accepts the spell book gratefully."; } if (action == ##Follow && Twin_was_here) { return Do_Walk(d_to); } if (action == ##CastAimfiz) { return CastSwanzoSub(); } if (action ~= ##CastYomin) rfalse; "The thoughts of your older self center on attempting to breathe."; ]; [ OlderSelfDaemon ; Queue(OlderSelfDaemon,65535)-->0 = true; ++Time_around_older_self; if (Time_around_older_self == 1) { move your_older_self to Coal_Bin_Room; if (ThingInPlayer(spell_book)) { Twin_has_spellbook = true; } if (location == Coal_Bin_Room) { new_line; print "Someone slides out of the coal chute, and lands near the bin. ", (string) Twin_msg; new_line; Twin_has_been_seen = true; return Twin_has_been_seen; } if (location == Dial_Room) { new_line; "You here a commotion from the room to the west."; } QueueInterrupt(OlderSelfDaemon)-->0 = false; rfalse; } if (Time_around_older_self == 2) { RecordWhatYouAreDoing(First_turn_around_older_self); ! not popped if (location == Coal_Bin_Room) { new_line; if (~~Twin_has_been_seen) { Twin_has_been_seen = true; print "Someone is standing near the coal bin. ", (string) Twin_msg; new_line; new_line; } Combination_told = true; TellCombinationNumber(); ! not popped if (spell_book notin your_older_self) { print " Your older self then looks at you, almost expectantly."; } new_line; rtrue; } new_line; "From the next room you glimpse someone gasping for air."; } if (Time_around_older_self == 3) { RecordWhatYouAreDoing(First_turn_around_older_self); ! not popped if (location == Coal_Bin_Room) { if (~~Twin_has_been_seen) { Twin_has_been_seen = true; new_line; print "Someone is standing near the coal bin. ", (string) Twin_msg; new_line; } if (spell_book in your_older_self) { move spell_book to your_younger_self; give spell_book trytakebit; move your_older_self to combination_dial; move smelly_scroll to combination_dial; Twin_was_here = true; Queue(TwinGoneTimerTwinGoneTimer,1)-->0 = true; new_line; "Your look-alike dives into the lower chute and slides out of view."; } if (~~Combination_told) { new_line; TellCombinationNumber(); ! not popped new_line; rtrue; } new_line; "~Give me...the spell book,~ croaks your older self."; } move your_older_self to combination_dial; move smelly_scroll to combination_dial; new_line; "Someone in the coal bin room dives into the lower chute."; } RecordWhatYouAreDoing(Last_turn_around_older_self); ! not popped QueueInterrupt(OlderSelfDaemon)-->0 = false; if (location == Coal_Bin_Room && your_older_self in location) { new_line; print "Your older self dives into the lower chute."; new_line; } move your_older_self to combination_dial; move smelly_scroll to combination_dial; rtrue; ]; [ TellCombinationNumber ; print "Your disheveled ~twin~ is having difficulty breathing, but gasps, ~The combination is ", Combination_number, ".~"; rtrue; ]; [ TwinGoneTimerTwinGoneTimer ; Twin_was_here = false; rfalse; ]; [ RecordWhatYouAreDoing tbl ; tbl-->1 = action; tbl-->2 = noun; tbl-->3 = second; rtrue; ]; [ YoungerSelfAction ; if (your_younger_self == player) { if (action == ##Combination && noun == number) { if (P_number == Combination_number) { Youve_told_combination = true; } "Your younger self seems surprised by your statement."; } if (action == ##Give && noun == spell_book && second == yourself1 && GivenASpellbookP()) rtrue; print "Your younger self seems confused, and doesn't respond."; new_line; return StopParse(); } if (action == ##CastYomin) { "The thoughts of your younger self are confused, and seem to center on whether or not to perform a SAVE."; } if (action == ##CastAimfiz) { return CastSwanzoSub(); } if (action ~= ##Examine) rfalse; print "It's almost like looking in a mirror. Your younger self looks confused"; if (spell_book in your_younger_self) { print ", and is carrying a spell book"; } "."; ]; [ YoungerSelfInitial doing ; if (Turns_around_younger_self < 3) { doing = First_turn_around_older_self; } else if (Turns_around_younger_self == 3) { doing = First_turn_around_older_self; } else { doing = Last_turn_around_older_self; } if (your_younger_self has visited) { print "Your younger self is here"; if (Twin_has_spellbook) { ", holding your spell book."; } "."; } give your_younger_self visited; print "Standing here, looking quite confused, is someone who could only be your younger self -- an exact duplicate of you, but cleaner and breathing with considerably less difficulty. You remember seeing this scene from another viewpoint just a short while ago."; if (Twin_has_spellbook) { print " Among the items carried by your ~twin~ is your spell book."; } new_line; rtrue; ]; [ GivenASpellbookP doing_tbl ; if (Turns_around_younger_self == 1) { doing_tbl = First_turn_around_older_self; } else if (Turns_around_younger_self == 2) { doing_tbl = First_turn_around_older_self; } else { if (Turns_around_younger_self ~= 3) rfalse; doing_tbl = Last_turn_around_older_self; } if (doing_tbl-->2 == spell_book && doing_tbl-->3 == your_older_self && doing_tbl-->1 == ##Give) rtrue; if (doing_tbl-->2 ~= your_older_self || doing_tbl-->3 ~= spell_book || doing_tbl-->1 ~= ##GiveReverse) rfalse; rtrue; ]; [ YoungerSelfDaemon ; ++Turns_around_younger_self; if (your_younger_self notin location || ((~~Lit) && (~~Blort_potion_drunk))) rfalse; if (Turns_around_younger_self == 2) { return YoungerSelfDoing(First_turn_around_older_self); } if (Turns_around_younger_self == 3) { return YoungerSelfDoing(First_turn_around_older_self); } if (Turns_around_younger_self ~= 4) rfalse; return YoungerSelfDoing(Last_turn_around_older_self); ]; [ YoungerSelfDoing tbl ; if (~~tbl-->2) { tbl-->2 = not_here_object; } if (~~tbl-->3) { tbl-->3 = not_here_object; } if (tbl-->2 == your_older_self) { tbl-->2 = you; } else if (tbl-->2 == yourself1) { tbl-->2 = your_younger_self; } if (tbl-->3 == your_older_self) { tbl-->3 = you; } else if (tbl-->3 == yourself1) { tbl-->3 = your_younger_self; } new_line; print "Your younger self "; if (tbl-->2 == spell_book && tbl-->3 == you && tbl-->1 == ##Give || (tbl-->2 == you && tbl-->3 == spell_book && tbl-->1 == ##GiveReverse)) { move spell_book to protagonist; give spell_book ~trytakebit; "hands you your spell book!"; } if (tbl-->1 == ##Verbose or ##Brief or ##Superbrief || tbl-->1 == ##Score or ##Script or ##Unscript) { "is performing a spell of high technology."; } if (tbl-->1 == ##Answer or ##AnswerObj or ##Curse || tbl-->1 == ##Hello or ##Tell or ##AskFor || tbl-->1 == ##Call or ##Thank or ##Howl || tbl-->1 == ##AskAbout) { "is attempting to talk."; } if (tbl-->1 == ##Cast or ##CastGnusto or ##CastFrotz || tbl-->1 == ##CastRezrov or ##CastIzyuk or ##CastFweep || tbl-->1 == ##CastAimfiz or ##CastSwanzo or ##CastVardik || tbl-->1 == ##CastMeef or ##CastPulver or ##CastGolmac || tbl-->1 == ##CastYomin or ##CastVezza or ##CastGaspar || tbl-->1 == ##CastYonk or ##CastMalyon) { "is casting a familiar spell."; } if (tbl-->1 == ##Inventory) { "is doing an inventory."; } if (tbl-->1 == ##Diagnose) { "is checking for wounds."; } if (tbl-->1 == ##Wait) { "is doing absolutely nothing."; } if (tbl-->1 == ##Sleep) { "is trying to fall asleep!"; } if (tbl-->1 == ##Memorize) { "is studying a spell book."; } if (tbl-->1 == ##Spells) { "seems lost in thought."; } if (tbl-->1 == ##Look) { "is looking around."; } if (tbl-->1 == ##Jump or ##Cavort) { "is hopping around like a crazed rabbit."; } if (tbl-->1 == ##Go or ##WalkAround or ##WalkTo) { "is moving around."; } if (tbl-->1 == ##Give) { print "is trying to give"; PrintName(tbl-->2); ! not popped print " to"; PrintName(tbl-->3); ! not popped "."; } if (tbl-->1 == ##Show) { print "is trying to show"; PrintName(tbl-->2); ! not popped print " to"; PrintName(tbl-->3); ! not popped "."; } if (tbl-->1 == ##Raise or ##Lower or ##Touch || tbl-->1 == ##Move or ##Shake or ##Slide || tbl-->1 == ##Kick or ##PutOn or ##SlideReverse || tbl-->1 == ##Insert or ##PutUnder or ##PutBehind) { if (tbl-->1 == ##Insert && tbl-->2 == spell_book && tbl-->3 == lower_coal_chute) { move spell_book to combination_dial; } print "is attempting to move"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Examine or ##LookIn || tbl-->1 == ##LookBehind or ##LookUnder) { print "is examining"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Board or ##Enter or ##EnterObj) { print "is trying to get into"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##ThrowAt or ##ThrowOver) { print "is performing aeronautical experiments with"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##What or ##Where or ##Who) { print "is asking about"; PrintName(tbl-->2); ! not popped ", addressing the question to no one in particular."; } if (tbl-->1 == ##Attack or ##Kill or ##Destroy) { print "is attacking"; PrintName(tbl-->2,true); ! not popped "."; } if (tbl-->1 == ##Eat or ##Drink) { print "is attempting to ingest"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##ClimbOn or ##ClimbUp or ##Climb || tbl-->1 == ##ClimbDown or ##ClimbOver) { print "is climbing"; PrintName(tbl-->2,true); ! not popped "."; } if (tbl-->1 == ##Read) { print "is reading"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Smell) { print "is smelling"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Listen) { print "seems to be listening to"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Kiss) { print "tries to kiss"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Open) { print "is trying to open"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Close) { print "is closing"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Exit or ##Disembark) { print "is trying to leave"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Take) { print "is reaching for"; PrintName(tbl-->2); ! not popped "."; } if (tbl-->1 == ##Drop) { print "is dropping"; PrintName(tbl-->2); ! not popped "."; } "is doing something."; ]; [ PseudoLampAction ; if (action ~= ##Take) rfalse; Perform(##Take,kerosene_lamp); ! not popped rtrue; ]; [ HeavyDoorAction ; if (action == ##Open && heavy_door hasnt open) { if (Combination_found) { give heavy_door open; score = score + Combination_solved_score; Combination_solved_score = 0; "The door opens easily."; } "The door won't budge."; } if (action == ##Examine) { Perform(##Examine,combination_dial); ! not popped rtrue; } if (action ~= ##CastRezrov) rfalse; return JigsUp("The door swings open as a loud alarm sounds. Laser beams criss-cross the room, glinting off the blades of the thousand flying daggers. A hundred well-armed and vicious kobolds rush into the room, swinging battle axes."); ]; [ DialAction ; if (action == ##Read or ##Examine) { "Set in the door is a large circular dial which can be set to any number up to 873. It is currently set to ", Dial_set_to, "."; } if (action ~= ##Turn) rfalse; if (Bat_p) { return Batty(); } if ((~~second) || second ~= number) { "You must say what number to turn it to."; } if (Dial_set_to == P_number) { "The dial is already set to ", Dial_set_to, "."; } Dial_set_to = P_number; print "The dial is now set to ", Dial_set_to, "."; if (Dial_set_to == Combination_number) { print " You hear a click from inside the door."; Combination_found = true; } new_line; rtrue; ]; [ RopeAction ; if (action == ##Insert && (~~AccessibleP(rope))) rfalse; if (action == ##Tie && second == beam_of_wood) { print "The rope is "; if (Rope_tied_to_beam) { print "already "; } print "tied securely to the center of the beam."; new_line; Rope_tied_to_beam = true; return Rope_tied_to_beam; } if (action == ##Tie && second == coal_bin) { "The bin is too large."; } if (action == ##Untie && Rope_tied_to_beam) { Rope_tied_to_beam = false; "The rope is untied."; } if (action == ##ClimbDown) { if ((~~Rope_in_upper_chute) && (~~Rope_in_lower_chute)) { "It would be hard to climb down the rope in its current state."; } return Do_Walk(d_to); } if (action == ##ClimbUp) { "Do you also charm snakes?"; } if (action ~= ##Examine) rfalse; if (Rope_in_upper_chute || Rope_in_lower_chute) { "The rope is tied to the beam and hangs into the chute."; } if (~~Rope_tied_to_beam) rfalse; "It is tied to the center of the timber."; ]; [ ShaftBottomAction rarg ; if (rarg ~= M_ENTER || smelly_scroll hasnt visited) rfalse; Vilstu_counter = 3; return VilstuPotionTimer(); ]; [ PseudoShaftAction ; if (action == ##ClimbDown) { if (location == Shaft_Top) { return Do_Walk(d_to); } return LookAroundMsg(); } if (action == ##ClimbUp or ##Climb) { if (location == Shaft_Top) { return LookAroundMsg(); } return Do_Walk(u_to); } if (action == ##PutOn && noun == beam_of_wood) { "The shaft is too wide."; } if (action ~= ##Insert || location ~= Shaft_Top) rfalse; if (noun == rope && Rope_tied_to_beam) { "The rope now dangles into the shaft."; } move noun to Shaft_Bottom; "It disappears into the shaft. A moment later comes a distant thud."; ]; [ BeamOfWoodAction ; if (action == ##PutOn && second == upper_coal_chute or lower_coal_chute) { move beam_of_wood to location; "The beam is now lying across the mouth of the chute."; } if (action == ##Take && Rope_in_upper_chute) { "You'd have to take the rope out of the chute first."; } if (action ~= ##Examine) rfalse; if (Rope_in_upper_chute) { "A rope hangs from the beam, into the chute."; } if (~~Rope_tied_to_beam) rfalse; "A rope is tied to the beam."; ]; [ TopOfChuteAction rarg ; if (rarg ~= M_BEFORE || troglodyte in location || ((~~Lit) && (~~Blort_potion_drunk)) || 30 < random(100)) rfalse; move troglodyte to location; Queue(TroglodyteTimer,2)-->0 = true; new_line; "A troglodyte trundles in and dumps a load of coal into the chute."; ]; [ TroglodyteTimer ; move troglodyte to combination_dial; if (location ~= Top_of_Chute) rfalse; Troglodyte_just_left = true; Queue(TroglodyteIsGoneTimer,1)-->0 = true; new_line; "The troglodyte trundles off into the coal mine."; ]; [ TroglodyteIsGoneTimer ; Troglodyte_just_left = false; rfalse; ]; [ TroglodyteAction ; if (player == troglodyte) { print "The troglodyte ignores you."; new_line; return StopParse(); } if (action == ##Follow && Troglodyte_just_left) { "You didn't notice which passage it took."; } if (action == ##CastYomin) { "The troglodyte is worried about filling his coal quotas."; } if (action ~= ##ReadAbout) rfalse; "Semi-intelligent subterranean beasts frequently used to dig and haul coal."; ]; [ Chute_down_dir ; if (Rope_in_upper_chute) { print "You climb carefully down the rope, which is slippery with coal dust, "; if (exhausted > 0) { print "but because of your fatigue you lose your grip."; GoDownChute(); ! not popped new_line; new_line; return Coal_Bin_Room; } if (~~CarryingAnything()) { print "but because of your load you are unable to maintain your grip."; GoDownChute(); ! not popped new_line; new_line; return Coal_Bin_Room; } print "and soon reach a small opening off the chute. You clamber inside..."; new_line; new_line; score = score + 20; give vardik_spell ~concealed; return Slanted_Room; } MoveWithRopeOrBeam(true); ! not popped print "Wheee!!! "; GoDownChute(); ! not popped print " You land beside an enormous bin of coal."; new_line; new_line; return Coal_Bin_Room; ]; [ GoDownChute ; print " As you "; if (Flying_p) { print "float"; } else { print "whiz"; } print " down the chute, you notice a flash of orange light spilling from an opening onto the chute."; rtrue; ]; [ SlantedRoomAction rarg ; if (rarg ~= M_ENTER) rfalse; Predictions-->6 = 0; rtrue; ]; [ SlantedRoom_east_dir ; if (shimmering_scroll notin protagonist && (~~Time_travelled)) { EekParadox(); ! not popped rfalse; } if (shimmering_scroll in protagonist && Time_travelled) { EekParadox(); ! not popped rfalse; } print "Wheeee!!!"; new_line; new_line; return Coal_Bin_Room; ]; [ KeroseneLampDesc UNUSED ; print "Mounted securely to the wall is a kerosene lamp, filling the room with a serene orange glow. "; if (kerosene_lamp has open) { print "A small compartment at its base is open."; } new_line; rtrue; ]; [ KeroseneLampAction ; if (action == ##Examine) { "The lamp has a glass bowl where the flame burns. Below is a small metal door, perhaps a compartment for storing extra wicks or kerosene."; } if (action == ##Take) { "It's mounted securely to the wall."; } if (action ~= ##SwitchOff) rfalse; "You can't spare the breath to blow out the lamp."; ]; [ SlantedRoom_up_dir ; if (Flying_p) { print "The chute is too narrow to fly up."; } else { print "The chute is too steep and slippery."; } new_line; rfalse; ]; [ TopOfChuteMsg top_p ; print "You're already at the "; if (top_p) { print "top"; } else { print "bottom"; } " of the chute."; ]; [ LagoonShoreAction rarg possessions_p ; if (rarg ~= M_ENTER || Lagoon_Shore has visited) rfalse; if (Spellbook_in_lagoon) { move spell_book to Lagoon_Floor; } Predictions-->6 = 0; score = score + 20; QueueInterrupt(OutOfBreathTimer)-->0 = false; QueueInterrupt(YoungerSelfDaemon)-->0 = false; QueueInterrupt(OlderSelfDaemon)-->0 = false; if (Time_travelled && (~~Youve_told_combination)) { EekParadox(); ! not popped } else if (~~Time_travelled) { if (ThingInPlayer(rope)) { move rope to combination_dial; possessions_p = true; } if (ThingInPlayer(beam_of_wood)) { move beam_of_wood to combination_dial; possessions_p = true; } if (ThingInPlayer(smelly_scroll)) { move smelly_scroll to combination_dial; possessions_p = true; } if (ThingInPlayer(shimmering_scroll)) { move shimmering_scroll to combination_dial; possessions_p = true; } if (possessions_p) { print "As you slide down the chute, some of your possessions suddenly vanish! "; } } print "You fly out of the chute and land just at the edge of some water..."; new_line; new_line; rtrue; ]; [ EekParadox ; Paradox = true; print "Suddenly, without the slightest fanfare, you cease to exist!"; new_line; return EndGame(); ]; [ OceanShoreAction rarg ; if (rarg ~= M_LOOK) rfalse; print "You are "; if (Flying_p) { print "floating above"; } else { print "standing on"; } print " the western shore of the mighty Flathead Ocean. According to legends you read at the University, the eastern shore of this ocean is a strange land of magical beings and priceless treasures. "; if (location == Ocean_Shore_North) { print "You could go north along the shore; the edge of a small cove lies to the southwest."; } else { print "The beach to the south is blocked by a tall cliff; a lagoon shore lies to the northwest."; } new_line; rtrue; ]; [ OceanAction UNUSED ; if (location == Gun_Emplacement or Turret or Top_of_Falls) { "The ocean lies far below you."; } if (action == ##CastPulver) { Casting_spell = true; Perform(##CastPulver,lagoon); ! not popped rtrue; } if (action == ##DrinkFrom or ##Drink) { Perform(##Drink,water); ! not popped rtrue; } if (action == ##Examine) { "It streches east as far as the eye can see."; } if (action == ##ReadAbout) { "The Flathead Ocean, called the Great Sea by the ancients, has a very unusual feature -- its western shore basks in the sunlight while its eastern shore lies far underground."; } if (action == ##Insert && ocean == second) { move noun to combination_dial; return PlaceInWater(); } if (action ~= ##EnterObj) rfalse; return JigsUp("Certain death."); ]; [ PseudoCliff1Action ; if (action ~= ##Climb or ##ClimbUp) rfalse; if (Flying_p) { "The cliff is too high to fly over."; } "The cliff is unclimbable."; ]; [ LagoonObjAction ; if (action == ##EnterObj) { if (location == Surface_of_Lagoon or Lagoon_Floor) { return LookAroundMsg(); } return Goto(Surface_of_Lagoon); } if (action == ##Insert && location ~= Lagoon_Floor && second == lagoon) { move noun to Lagoon_Floor; if (noun has paper || noun == spell_book) { give noun wet; } return PlaceInWater(); } if (action == ##Examine) { "The water looks calm and hospitable."; } if (action == ##DrinkFrom or ##Drink) { Perform(##Drink,water); ! not popped rtrue; } if (action ~= ##CastPulver) rfalse; "The water level seems to drop an inch or two, for a moment."; ]; [ SurfaceOfLagoonAction rarg itm ; if (rarg == M_ENTER) { itm = child(protagonist); .labelXXX; if (~~itm) rtrue; if (itm has paper || itm == spell_book) { give itm wet; } itm = sibling(itm); jump labelXXX; } if (rarg ~= M_LOOK) rfalse; print "You are "; if (Flying_p) { print "flying over"; } else { print "swimming on"; } " the surface of a calm lagoon, whose sandy floor is visible below. A curved beach surrounds this inlet on its western side."; ]; [ DiveIntoLagoon ; if (Flying_p) { WhileFlying(); ! not popped rfalse; } return Lagoon_Floor; ]; [ PseudoSandAction ; if (pseudo == noun) { Casting_spell = true; Perform(action,ground,second); ! not popped rtrue; } Casting_spell = true; Perform(action,noun,ground); ! not popped rtrue; ]; [ LagoonFloorAction rarg ; if (rarg ~= M_ENTER) rfalse; Queue(HoldingBreathTimer,65535)-->0 = true; rfalse; ]; [ HoldingBreathTimer ; if (location == Lagoon_Floor) { if (Vilstu_potion_drunk) rfalse; ++Holding_breath_counter; if (Holding_breath_counter == 3) { new_line; "You won't be able to hold your breath much longer."; } if (Holding_breath_counter == 4) { new_line; "Better get some fresh air soon!"; } if (Holding_breath_counter ~= 5) rfalse; Holding_breath_counter = 0; new_line; return JigsUp("You run out of air and drown."); } Holding_breath_counter = 0; QueueInterrupt(HoldingBreathTimer)-->0 = false; rfalse; ]; [ PseudoCoralAction ; if (action ~= ##Examine || location notin spenseweeds) rfalse; "The coral is covered by swaying spenseweeds."; ]; [ SpenseWeedAction ; if (action == ##CastMeef) { move spenseweeds to combination_dial; move wooden_crate to location; SetPronoun(wooden_crate); ! not popped "The spenseweeds wilt away, revealing a wooden crate labelled with black lettering."; } if (action ~= ##LookUnder) rfalse; "That's difficult -- they're well rooted in the coral."; ]; [ CrateAction ; if (action == ##CastRezrov or ##Open && (~~Grue_suit_found)) { Grue_suit_found = true; score = score + 15; rfalse; } if (action ~= ##Read) rfalse; FixedWidthFont(); ! not popped print "Stencilled diagonally across the crate:^^ GRUE PROTECTION KIT^^Below, in much smaller letters:^^ FROM:^ Frobozz Magic Grue Accessories Co.^^ TO:^ Aragain Brothers Circus^ Attn: Grue Trainer"; new_line; return NotFixedWidthFont(); ]; [ BrassLampAction ; if (action ~= ##Examine) rfalse; print "It is a battery-powered lantern like those used by adventurers and explorers. It is currently "; if (brass_lantern has light) { print "on"; } else { print "off"; } "."; ]; [ GrueRepellentAction ; if (action == ##Shake) { if (Repellent_empty) { "The can seems empty."; } "There is a sloshing sound from inside."; } if (action ~= ##PutOn or ##Spray || noun ~= can_of_grue_repellent) rfalse; if (Repellent_empty) { "The repellent is all gone."; } if (~~second) { Repellent_empty = true; "The spray stinks amazingly for a few moments, then drifts away."; } if (second == yourself1) { Queue(RepellentWearsOffTimer,5)-->0 = true; Grue_repellent = true; } Repellent_empty = true; "The spray smells like a mixture of old socks and burning rubber. If I were a grue I'd sure stay clear!"; ]; [ RepellentWearsOffTimer ; Grue_repellent = false; new_line; "That horrible smell is much less pungent now."; ]; [ MouthOfRiverAction rarg ; if (rarg == M_LOOK) { print "A mighty river spills into the ocean here. Looking up the river valley, you see a tall waterfall. Atop a cliff, high above you, is the rampart of a fortress. A cave entrance "; if (mass_of_wriggling_vines in location) { print "at the base of the cliff to the west is blocked by writhing green vines"; } else { print "lies to the west"; } "."; } if (rarg ~= M_BEFORE || mass_of_wriggling_vines notin location || 15 < random(100)) rfalse; new_line; print "Suddenly you realize that, without really thinking about it, you were "; if (Flying_p) { print "flying"; } else { print "walking"; } " toward the wriggling vines. As you stop, a feeling of annoyance seems to radiate from the plants."; ]; [ WrigglingVinesAction ; if (action == ##CastMeef) { move mass_of_wriggling_vines to combination_dial; "You can almost feel a wave of pain from the vines as they shrivel away."; } if (action == ##Kill or ##Attack) { return JigsUp("Your attack is somewhat quixotic as the vines wrap around and tear you to pieces."); } if (action ~= ##Bite or ##Kick or ##EnterObj or ##Climb or ##ClimbUp or ##Take or ##Touch or ##Move or ##Slide) rfalse; return Do_Walk(w_to); ]; [ WestFromMouth_dir ; if (mass_of_wriggling_vines in location) { JigsUp("The vines encircle you and tear you limb from limb."); ! not popped rfalse; } return Grue_Lair; ]; [ GrueLairAction rarg ; if (Grue_repellent || rarg ~= M_BEFORE || grue_suit in protagonist) rfalse; if (Lit || Blort_potion_drunk) { return JigsUp("The grues lurk toward you! Your last sight is a hundred slavering fangs."); } return JigsUp("Suddenly, you are set upon by countless slavering fangs!"); ]; [ MutatedGrueAction ; if (action == ##CastFrotz) { "One of the grues gives off a flash of light but, strangely, it doesn't seem to notice or care."; } if (action ~= ##ReadAbout) rfalse; Perform(##ReadAbout,lurking_grue); ! not popped rtrue; ]; [ GrueDescription UNUSED ; if (Lit || Blort_potion_drunk) { if (Grue_repellent) { PackOfGruesAction(); ! not popped "They stagger about the room, covering their noses and making horrid gurgling noises."; } if (grue_suit in protagonist) { PackOfGruesAction(); ! not popped "They seem to be ignoring you, aside from a few suspicious gurgles in your direction."; } PackOfGruesAction(); ! not popped "Baring tremendous fangs, they form a circle around you..."; } "There are terrifying gurgling noises from the darkness!"; ]; [ PackOfGruesAction ; print "A pack of grues fills the room! "; if (~~Lit) rfalse; print "The grues, contrary to all conventional wisdom, aren't bothered by your light in the least. They must be mutated grues, no longer fearing light! "; rtrue; ]; [ MammothCavernAction rarg ; if (rarg ~= M_ENTER) rfalse; score = score + Mammoth_cave_score; Mammoth_cave_score = 0; Predictions-->7 = 0; rtrue; ]; [ DiabolicMachineryAction ; if (action == ##SwitchOn or ##Destroy) { return JigsUp("A field of energy leaps forth, reducing you to a pile of smoldering ash."); } if (action ~= ##Read or ##Examine) rfalse; "You notice, on one machine, a tiny plaque which reads:^^FROBOZZ MAGIC MUTATED GRUE BREEDER CO."; ]; [ ChamberOfLivingDeath rarg ; if (rarg == M_HANDLED && action ~= ##Version or ##Save or ##Quit && action ~= ##Restart or ##Restore && action ~= ##Superbrief or ##Verbose or ##Brief && action ~= ##Unscript or ##Script) { AgonyMsg(); ! not popped rtrue; } if (rarg ~= M_BEFORE) rfalse; "Hideous parasites descend upon you and tear the flesh from your bones, gnaw the eyes from your sockets, and feast upon your very brain tissue. Amazingly, you do not die, and your body regenerates itself as you await the next attack..."; ]; [ PseudoParasiteAction ; rfalse; ]; [ HallOfEternalPainAction rarg ; if (rarg == M_HANDLED && action ~= ##Version or ##Save or ##Quit && action ~= ##Restart or ##Restore && action ~= ##Superbrief or ##Verbose or ##Brief && action ~= ##Unscript or ##Script) { AgonyMsg(); ! not popped rtrue; } if (rarg ~= M_BEFORE) rfalse; "Disembodied forces suck the very thoughts from your mind, savoring each moment and growing stronger. Every second is an agonizing torment, as though thousands of raging fires were exploding in your skull, filling you with a pain greater than you could ever imagine."; ]; [ PseudoForceAction ; rfalse; ]; [ AgonyMsg ; "Your agony is too great to concentrate on such an action."; ]; [ BlackDoorAction ; if (action ~= ##CastRezrov or ##Open) rfalse; print "As the door opens, hundreds of slime-covered tentacles stream out and drag you across the threshold..."; new_line; new_line; Filch(protagonist); ! not popped QueueInterrupt(ExhaustionDaemon)-->0 = false; QueueInterrupt(ThirstTimer)-->0 = false; QueueInterrupt(HungerTimer)-->0 = false; KillTimers(); ! not popped return Goto(Chamber_of_Living_Death); ]; [ SilverDoorAction ; if (action ~= ##CastRezrov or ##Open) rfalse; print "The door blows open, knocking you to the ground. You are pulled through the open doorway by an unseen force..."; new_line; new_line; Filch(protagonist); ! not popped QueueInterrupt(ExhaustionDaemon)-->0 = false; QueueInterrupt(HungerTimer)-->0 = false; QueueInterrupt(ThirstTimer)-->0 = false; KillTimers(); ! not popped return Goto(Hall_of_Eternal_Pain); ]; [ WhiteDoorAction ; if (action ~= ##CastRezrov or ##Open) rfalse; if (location == Belbozs_Hideout) { Do_Walk(e_to); ! not popped rtrue; } score = score + Find_Belboz_score; Find_Belboz_score = 0; print "The door creaks slowly open. Within, you see someone lying as though asleep. You feel yourself drawn into the room..."; new_line; new_line; Queue(JearrGetsRevenge,8)-->0 = true; return Goto(Belbozs_Hideout); ]; [ Vardik_timer ; Mind_protected = false; new_line; "Your head feels numb for a moment, and your mind feels suddenly open and unprotected."; ]; [ StabBelboz ; if (Gaspar_cast_on_Belboz) { Gaspar_cast_on_Belboz = false; print "As you stab Belboz, an apparition rises from his body. Floating above him like a cloud of fog, it howls with laughter. A moment later, gaspar begins to heal the wounds, and the spirit flows back into the body."; new_line; new_line; return JearrGetsRevenge(); } print "You stab the knife time and again into Belboz, who writhes in pain, eyes bulging outward. Sickened and dizzy, you stagger back."; new_line; new_line; Belboz_dead = true; return JearrLeavesBelboz(); ]; [ JearrLeavesBelboz ; print "A wispy translucent shape rises from the "; if (Belboz_dead) { print "corpse"; } else { print "body"; } print " of Belboz. It speaks in a voice so deep that your whole body seems to hear it. ~Foolish Charlatan! I am forced to flee that weak, old body -- I shall take your own, instead! Already I have sucked all knowledge, all secrets from that ancient Enchanter. Now begins an epoch of evil transcending even your worst nightmares; a reign of terror that will last a thousand thousand years!~ The shape blows toward you on a cold wind."; new_line; new_line; if (Mind_protected) { print "Jeearr surrounds you like a cloud and begins to contract. Suddenly, it strikes your invisible protection and recoils as if burned. ~No!~ it cries. ~Such a guileless Enchanter developing a mind shield?~ The cloud is thinner, the voice fainter. ~It cannot be! I cannot survive ... without a host.~ The demon roils in agony, then thins and dissipates. There is a final scream of pain, then silence."; new_line; new_line; if (Belboz_dead) { print "Jeearr is vanquished; the kingdom is saved. But you - you are stranded in a land unknown, and your closest friend, the greatest Enchanter of his age, lies dead by your own hand. Kneeling by his blood-soaked corpse, you beg for another chance..."; new_line; return EndGame(); } print "Belboz moans softly, and begins stirring. He sees you and rises, instantly alert. After posing a few well-chosen questions, he casts a brief but unfamiliar spell.^^An instant later, "; if (grue_suit in protagonist) { print "your grue suit has vanished and "; } print "you are standing in the Chamber of the Circle. The Circle of Enchanters is assembled. Belboz speaks. ~Once again, this young Enchanter has done a matchless service to the Guild and to the entire kingdom, displaying resourcefulness and imagination worthy of the greatest of Enchanters. I grow old, and must soon step down as Head of the Circle. But let it be known that a successor has been found.~"; new_line; new_line; score = score + 25; location = Chamber_of_the_Circle; ScoreSub(); ! not popped @show_status; new_line; print "Here ends the second chapter of the Enchanter saga, in which, by virtue of your skills, you have been appointed as the next leader of the Circle of Enchanters. The final adventure awaits you as the Enchanter series concludes."; new_line; if (morgia_plant notin Belbozs_Quarters) { new_line; print "You hear a distant bellow. ~What happened to my morgia plant?~"; new_line; } return EndGame(true); } print "You feel an overwhelming sense of oppression as the demon seizes control of your mind and body. The monster reaches into the recesses of your mind, adding your hard-earned magic powers to its own. As it settles comfortably into your skull, the demon grants you a vision of the future. You see the enslaved people of the land toiling to erect great idols to Jeearr. Parents offer up their own children upon these altars, as the rivers of the land fill with blood. And YOU embody Jeearr; you are cursed by ten thousand generations of victims; your face adorns the idols. And worst of all, you remain awake and aware, a witness to horror, never sleeping, and never, ever to escape."; new_line; score = 65437; return EndGame(); ]; [ JearrGetsRevenge ; if (location ~= Belbozs_Hideout) rfalse; new_line; print "Suddenly, Belboz's eyes flicker and he leaps to his feet. His face is unrecognizable, a twisted mask of hatred. ~Meddlesome Enchanter! I should have killed you all before I left! But better late than never...~ Lightning bolts flash toward you from his fingers, but rather than dying, you find yourself in the..."; new_line; new_line; Filch(protagonist); ! not popped QueueInterrupt(ExhaustionDaemon)-->0 = false; QueueInterrupt(ThirstTimer)-->0 = false; QueueInterrupt(HungerTimer)-->0 = false; KillTimers(); ! not popped return Goto(Hall_of_Eternal_Pain); ];