Verb 'greet' 'hello' 'hi' * object -> Hello * -> Hello ; Verb 'ask' * 'for' object -> AskFor * animate 'for' object -> AskPerson * animate 'toward'/'to' climbable -> AskPerson * animate 'about' object -> AskAbout ; Verb 'cut' 'slice' 'stab' * 'thru'/'through' object 'with'/'using' object(held,carried) -> Slice * object 'with'/'using' object(held,carried) -> Slice * object -> Slice ; Verb 'unroll' * object -> Unroll ; Verb 'break' 'crush' 'damage' 'demolish' 'destroy' 'smash' 'trample' 'wreck' * 'downstairs'/'down'/'d//' object -> Attack * 'outside'/'out' climbable -> Destroy * object 'with'/'using' object(held,carried,take) -> Destroy * object(in_room,on_ground) -> Destroy ; Verb 'return' * object(held,carried,have) 'toward'/'to' object(on_ground) -> ReturnObj * object(held,carried,have) -> ReturnObj ; Verb 'launch' * object -> Launch ; Verb 'climb' 'crawl' 'scale' * 'underneath'/'under'/'beneath'/'below' object -> DuckUnder * 'thru'/'through' object -> CrawlThru * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * 'over' object(in_room,on_ground) -> CrawlOver * 'off' vehicle(in_room,on_ground) -> ClimbOut * 'outside'/'out' vehicle(in_room,on_ground) -> ClimbOut * 'downstairs'/'down'/'d//' climbable(in_room,on_ground) -> ClimbDown * 'upstairs'/'up'/'u//' climbable(in_room,on_ground) -> Climb * 'onto'/'on' vehicle(in_room,on_ground) -> ClimbOn * object(in_room,on_ground) -> Climb ; Verb 'lean' * 'against' object -> Hug ; Verb 'fill' 'load' * object(held,carried,have) 'into'/'inside'/'in' object -> FillWith * openable(held,carried,have) 'with'/'using' object -> Fill * openable(held,carried,have) -> Fill ; Verb 'devour' 'eat' 'nibble' 'taste' * object(held,carried,in_room,on_ground) -> Eat ; Verb 'oar' 'row' * object 'toward'/'to' object -> RowTo * 'toward'/'to' object -> RowTo * object object -> RowDirection * object -> Row ; Verb 'describe' 'examine' 'inspect' 'observe' 'study' 'x//' * object(held,carried,in_room,on_ground) -> Examine ; Verb 'depart' 'exit' 'withdraw' * object -> Exit * -> Exit ; Verb 'wave' * object(have) 'at' object -> Point * object(have) 'into'/'inside'/'in' object -> Point * 'at' animate -> WaveAt * object(have) -> Wave ; Verb 'slide' * 'downstairs'/'down'/'d//' climbable(in_room,on_ground) -> ClimbDown ; Verb 'reflection' * object 'into'/'inside'/'in' object(held) -> Reflect ; Verb 'duck' 'go' 'wade' * -> LeapOverboard * 'with'/'using' object -> ComeWith * 'away' climbable -> Leave * 'toward'/'to' object -> Approach * 'downstairs'/'down'/'d//' object(in_room,on_ground) -> ClimbDown * 'upstairs'/'up'/'u//' object(in_room,on_ground) -> Climb * 'behind' object -> WalkBehind * 'underneath'/'under'/'beneath'/'below' object -> DuckUnder * 'around'/'along' climbable -> Circle * 'thru'/'through' object -> CrawlThru * 'into'/'inside'/'in' object -> CrawlThru * climbable -> Go ; Verb 'fix' 'repair' 'sharpen' 'whet' * object(have) -> Fix ; Verb 'close' 'shut' * object 'onto'/'on' animate -> Close * 'upstairs'/'up'/'u//' climbable -> CloseUp * 'off' attrib25(held,carried,in_room,on_ground,take) -> BlowOut * door(held,carried,in_room,on_ground) -> Close ; Verb 'make' * 'love' animate -> MakeLove * 'outside'/'out' climbable -> MakeOut ; Verb '#reco' * -> DebugReco ; Verb 'flick' 'flip' 'rotate' 'set' 'spin' 'switch' 'turn' * 'off' attrib25 -> BlowOut * 'onto'/'on' attrib25 -> Light * object 'toward'/'to' object -> Turn * 'around'/'along' climbable -> Turn * object -> Turn ; Verb 'aim' 'point' 'shine' 'signal' * object(held) 'into'/'inside'/'in' object -> Point * object(held) 'outside'/'out' object -> Point * object 'with'/'using' object(take) -> Shine * object(held) 'onto'/'on' object -> Point * object(held) 'at' object -> Point * object -> Point * object 'from' object -> Shine ; Verb 'bite' * object -> Bite ; Verb 'kick' * object -> Kick ; Verb 'burn' 'melt' * attrib27 'into'/'inside'/'in' object -> Burn * 'upstairs'/'up'/'u//' attrib27 -> Burn * attrib27 -> Burn ; Verb 'lock' * object(in_room,on_ground) 'with'/'using' object -> Lock * object -> Lock ; Verb 'aaieee' 'scream' 'shout' 'shriek' 'yell' * 'toward'/'to' object -> Yell * 'at' object -> Yell * -> Yell ; Verb 'what' 'what^' 'whats' 'who' 'whos' * object -> What ; Verb 'remove' * takeable(carried,in_room,many) 'from' object -> Take * worn -> Remove ; Verb 'drink' 'quaff' 'sip' 'swallow' * object 'from' object(have) -> DrinkFrom * 'from' object(held,carried) -> DrinkFrom * object(held,carried,in_room,on_ground) -> Drink ; Verb 'awake' 'revive' 'rouse' 'wake' * animate 'with'/'using' object -> Wake * 'upstairs'/'up'/'u//' climbable -> Wake * climbable -> Wake ; Verb 'doze' 'nap' 'sleep' 'snooze' * 'onto'/'on' object(in_room,on_ground) -> Board * 'into'/'inside'/'in' object(in_room,on_ground) -> Board * -> Sleep ; Verb 'brief' * -> Brief ; Verb 'smell' 'sniff' 'whiff' * object -> Smell * -> Smell ; Verb 'bind' 'fetter' 'hobble' 'manacles' 'shackles' * animate -> PlaceOn ; Verb 'descend' * object(in_room,on_ground) -> ClimbDown ; Verb 'swing' * object(held,carried,have) 'at' animate -> Swing * object(held,carried,have) -> Swing * 'from' object(take) -> Swing * 'downstairs'/'down'/'d//' climbable(take) -> Swing * 'onto'/'on' object(take) -> Swing ; Verb 'deactivate' 'douse' 'extinguish' * light -> BlowOut ; Verb '$ve' * object -> Verify * -> Verify ; Verb 'script' * -> Script ; Verb 'dry' 'squeeze' 'wring' * object 'onto'/'on' object -> Dry * object 'into'/'inside'/'in' object -> Dry * object 'outside'/'out' object -> Dry * object 'from' object -> Dry * object(held,carried) -> Dry ; Verb 'give' 'hand' 'offer' 'present' * animate 'with'/'using' object(many,have) -> FeedWith * animate(on_ground) object(many,have) -> FeedWith * object(held,many,have) 'toward'/'to' animate(on_ground) -> Give ; Verb 'leave' * object(held,many) 'onto'/'on' object -> PlaceOn * object(held,many) 'into'/'inside'/'in' object -> Insert * object -> Leave * -> Leave ; Verb 'roll' 'tip' * object -> KnockOver * object 'toward'/'to' object -> Push ; Verb 'drop' 'dump' * object(held,many,have) 'thru'/'through' object -> PutThrough * object(held,many,have) 'outside'/'out' object -> PutThrough * object(held,many) 'onto'/'on' object -> PlaceOn * object(held,many,have) 'into'/'inside'/'in' object -> Insert * object(held,many,have) 'downstairs'/'down'/'d//' object -> Insert * object(held,many,have) -> Drop ; Verb 'rip' 'tear' * object 'with'/'using' object -> RipUp * 'upstairs'/'up'/'u//' object -> RipUp * object 'into'/'inside'/'in' object -> RipUp * object -> RipUp ; Verb 'empty' * object(many) 'from' object -> EmptyFrom * object 'into'/'inside'/'in' object -> EmptyIn * object 'onto'/'on' object -> EmptyIn * 'outside'/'out' object -> EmptyIn * object -> EmptyIn ; Verb 'l//' 'look' 'watch' * object -> LookClarify * 'over' object -> Examine * 'for' object -> Find * 'toward'/'to' object -> Examine * 'onto'/'on' object -> Examine * 'into'/'inside'/'in' object(held,carried,in_room,on_ground) -> LookIn * 'behind' object -> LookBehind * 'underneath'/'under'/'beneath'/'below' object -> LookUnder * 'outside'/'out' climbable -> LookIn * 'thru'/'through' object -> LookIn * 'at' object(held,carried,in_room,on_ground) -> Examine * 'upstairs'/'up'/'u//' climbable -> LookUp * 'downstairs'/'down'/'d//' climbable -> LookDown * 'around'/'along' climbable -> Look * -> Look ; Verb 'dance' 'pirouette' 'twirl' * 'with'/'using' animate -> Dance * climbable -> Dance ; Verb 'come' * 'with'/'using' object -> ComeWith ; Verb 'bow' 'curtsey' 'curtsy' * 'toward'/'to' animate -> Bow ; Verb 'cover' * object 'with'/'using' object(held,many) -> Cover ; Verb 'laugh' 'smile' * 'at' object -> Lauch * -> Lauch ; Verb 'cry' 'gasp' 'sob' 'weep' * -> Cry ; Verb 'score' * -> Score ; Verb 'soak' 'wet' * object(held) 'with'/'using' object -> Soak * object(held) 'into'/'inside'/'in' object -> Soak * object -> Soak ; Verb 'dig' * 'thru'/'through' object -> Dig * 'into'/'inside'/'in' object -> Dig ; Verb 'reach' * 'into'/'inside'/'in' object(in_room,on_ground) -> ReachIn ; Verb 'disrobe' 'strip' 'undress' * object -> Disrobe * -> Disrobe ; Verb 'applaud' 'clap' * object -> Applaud * -> Applaud ; Verb 'restart' * -> Restart ; Verb 'sit' * 'into'/'inside'/'in' object(in_room,on_ground) -> ClimbOn * 'downstairs'/'down'/'d//' climbable(in_room,on_ground) -> SitDown * 'onto'/'on' object(in_room,on_ground) -> ClimbOn ; Verb 'super' 'superbrief' * -> Superbrief ; Verb 'press' 'push' * 'upstairs'/'up'/'u//' object -> Raise * 'onto'/'on' object(in_room,on_ground) -> Push * 'downstairs'/'down'/'d//' object -> Lower * object 'upstairs'/'up'/'u//' climbable -> Raise * object 'underneath'/'under'/'beneath'/'below' object -> PushUnder * object 'toward'/'to' object -> Push * object 'onto'/'on' object -> Push * object object -> MoveDirection * object 'into'/'inside'/'in' object -> Push * object 'downstairs'/'down'/'d//' climbable -> Lower * object -> Push ; Verb 'muzzle' * object 'with'/'using' object(held,carried) -> Muzzle ; Verb 'unscript' * -> Unscript ; Verb 'circle' * object -> Circle ; Verb 'clean' 'wash' 'wipe' * 'off' object -> Clean * 'upstairs'/'up'/'u//' climbable -> Clean * object -> Clean ; Verb 'free' 'loosen' 'unattach' 'unknot' 'untie' 'unweave' * object(in_room,on_ground) -> Free ; Verb 'swim' * 'into'/'inside'/'in' object -> Swim * -> Swim ; Verb 'debark' 'disembark' * object(in_room,on_ground) -> ClimbOut * -> ClimbOut ; Verb 'pay' * object(held,many,have) 'toward'/'to' animate(on_ground) -> Give ; Verb 'don' 'wear' * clothing(take) -> Wear ; Verb 'rummage' 'search' * 'thru'/'through' object -> Search * 'for' object -> Find * 'into'/'inside'/'in' object -> Search * 'underneath'/'under'/'beneath'/'below' object -> LookUnder * object -> Search ; Verb 'thank' 'thanks' * -> Thank * object -> Thank ; Verb 'enter' * object -> CrawlThru * -> Enter ; Verb 'restore' * -> Restore ; Verb 'attack' 'bash' 'fight' 'hit' 'kill' 'murder' 'punch' 'slap' 'strike' 'whack' * animate(in_room,on_ground) 'with'/'using' object(carried,have) -> Attack * animate(in_room,on_ground) -> Attack ; Verb 'bounce' 'shake' * object 'with'/'using' object -> Shake * object -> Shake ; Verb 'hide' * 'behind' object -> WalkBehind * 'underneath'/'under'/'beneath'/'below' object -> WalkBehind * -> WalkBehind ; Verb 'use' * object 'onto'/'on' animate -> Use * object -> Use ; Verb 'speak' 'talk' * 'toward'/'to' animate(in_room) -> Tell ; Verb 'lower' * object 'outside'/'out' object -> PutThrough * object 'thru'/'through' object -> PutThrough * object -> Lower ; Verb 'fiddle' 'joggle' 'wiggle' * 'with'/'using' object -> Fiddle ; Verb 'dress' * object -> Dress * -> Dress ; Verb 'feed' * animate 'with'/'using' object(held,many,have) -> FeedWith * animate(on_ground) object(held,many,have) -> FeedWith * object(held,many,have) 'toward'/'to' animate(on_ground) -> Give * animate -> Feed ; Verb 'hurl' 'throw' 'toss' * object(held,carried) 'with'/'using' object -> Shoot * object(carried) 'over' object -> ThrowOver * object(carried) 'outside'/'out' object -> PutThrough * object(carried) 'thru'/'through' object(in_room,on_ground) -> PutThrough * animate(in_room,on_ground) object(held,carried) -> ThrowDir * object(carried) 'toward'/'to' object(in_room,on_ground) -> ThrowwTo * object(carried) 'onto'/'on' object(in_room,on_ground) -> Throw * object(carried) 'at' object(in_room,on_ground) -> ThrowAt * object(carried) 'downstairs'/'down'/'d//' object -> Throw * object(held,carried) 'into'/'inside'/'in' object -> Throw * 'overboard' object(carried) -> ThrowOverboard * 'away' object(carried) -> Throw * object(carried) -> Throw ; Verb 'tell' * object object -> TellReverse * animate 'about' object -> TellAbout * animate(in_room) -> Tell ; Verb 'help' 'hint' 'warn' * object -> Rescue * -> Help ; Verb 'rescue' 'save' * animate -> Rescue * -> Save ; Verb 'tap' * 'onto'/'on' object -> Knock * object -> Touch ; Verb 'show' * animate object(held,many) -> ShowReverse * object(held,many) 'toward'/'to' animate -> Show ; Verb 'pass' * object(held,many,have) 'toward'/'to' animate(on_ground) -> Give ; Verb 'where' 'wheres' 'whither' * object -> Where ; Verb 'attach' 'fasten' 'moor' 'secure' 'tie' 'weave' * object 'with'/'using' object(held) -> TieWith * 'upstairs'/'up'/'u//' object 'with'/'using' object(held) -> TieWith * object(held) 'around'/'along' object -> Tie * object(held) 'toward'/'to' object -> Tie ; Verb 'listen' * 'toward'/'to' object -> Listen * -> Listen ; Verb 'rise' 'stand' * 'behind' object -> WalkBehind * 'into'/'inside'/'in' object -> StandOn * 'onto'/'on' object -> StandOn * 'upstairs'/'up'/'u//' climbable -> Rtand * -> Rtand ; Verb 'embrace' 'hug' * object -> Hug ; Verb '#rand' * object -> DebugPredictable ; Verb 'board' 'mount' 'ride' * vehicle(in_room,on_ground) -> Board ; Verb 'pick' * 'upstairs'/'up'/'u//' takeable(on_ground,many) -> Take * object 'with'/'using' object -> Pick * object -> Pick ; Verb 'i//' 'inventory' * 'love' object -> ILove * -> Inventory ; Verb 'knock' 'pound' 'rap' * 'over' object -> KnockOver * 'downstairs'/'down'/'d//' animate(in_room,on_ground) -> Attack * 'at' door -> Knock * 'onto'/'on' door -> Knock ; Verb 'wrap' * object 'into'/'inside'/'in' object(held,many) -> WrapIn * object(held,many) 'around'/'along' object -> Wrap ; Verb 'fire' 'shoot' 'sling' * object 'into'/'inside'/'in' object -> Shoot * 'at' object -> Shoot * object 'at' object -> Shoot * object 'with'/'using' object(held,have) -> Shoot * object -> Shoot ; Verb 'blow' * 'outside'/'out' light -> BlowOut * object(held) 'onto'/'on' animate -> Blow * object(held) 'at' animate -> Blow * object -> Blow ; Verb '#comm' * -> DebugComm ; Verb 'feel' 'grip' 'rub' 'smooth' 'touch' * 'thru'/'through' openable -> Touch * object 'onto'/'on' object -> Touch * object 'with'/'using' object -> Touch * object -> Touch ; Verb 'marry' 'wed' * animate -> Marry ; Verb 'open' * door(held,carried,in_room,on_ground) 'with'/'using' object(held,carried,in_room,on_ground,have) -> Open * 'upstairs'/'up'/'u//' door(held,carried,in_room,on_ground) -> Open * door(held,carried,in_room,on_ground) -> Open ; Verb 'play' * 'with'/'using' object -> Touch ; Verb 'let' * 'go' object(many) -> Drop ; Verb 'move' 'pull' * object 'toward'/'to' object -> Move * 'into'/'inside'/'in' object -> Move * 'downstairs'/'down'/'d//' object(in_room,on_ground) -> Lower * 'upstairs'/'up'/'u//' object(in_room,on_ground) -> Raise * 'around'/'along' climbable -> Circle * object 'downstairs'/'down'/'d//' climbable -> Lower * object 'upstairs'/'up'/'u//' climbable -> Raise * object object -> MoveDirection * object(in_room,on_ground) -> Move ; Verb 'lie' * 'downstairs'/'down'/'d//' climbable -> LieOn * 'into'/'inside'/'in' vehicle -> LieOn * 'onto'/'on' vehicle -> LieOn ; Verb 'light' * object(in_room,on_ground) 'onto'/'on' object -> Light * attrib25(held,carried,in_room,on_ground) 'with'/'using' object -> Light * attrib25(held,carried,in_room,on_ground) 'into'/'inside'/'in' object -> Light * attrib25(held,carried,in_room,on_ground) -> Light ; Verb '#unre' * -> DebugUnReco ; Verb 'version' * -> Version ; Verb 'chase' 'follow' 'pursue' * object -> ComeWith ; Verb 'boost' 'lift' 'raise' * 'upstairs'/'up'/'u//' object -> Raise * object -> Raise ; Verb 'moan' 'sigh' * -> Moan ; Verb 'nay' 'never' 'no' 'nope' * -> No ; Verb 'carry' 'get' 'grab' 'hold' 'take' * 'drunk' climbable -> GetDrunk * 'downstairs'/'down'/'d//' vehicle(on_ground) -> ClimbOut * 'outside'/'out' vehicle(on_ground) -> ClimbOut * 'undress' climbable -> GetUndressed * 'dresser' climbable -> GetDressed * 'off' object -> TakeOff * object(carried,in_room,many) 'with'/'using' object(have) -> TakeFrom * object(carried,in_room,many) 'onto'/'on' object -> Take * object(carried,in_room,many) 'into'/'inside'/'in' object -> Take * object(carried,in_room,many) 'from' object -> Take * object(carried,in_room,many) 'off' object -> Take * object(carried,in_room,many) 'outside'/'out' object -> Take * 'upstairs'/'up'/'u//' climbable -> Rtand * 'onto'/'on' vehicle(in_room,on_ground) -> Board * 'into'/'inside'/'in' vehicle(in_room,on_ground) -> Board * takeable(in_room,on_ground,many) -> Take ; Verb 'wait' 'z//' * -> Wait ; Verb 'pour' 'spill' * object(held,carried) 'outside'/'out' object -> PourFrom * object(held,carried) 'from' object -> PourFrom * object(held,carried) 'into'/'inside'/'in' object -> Pour * object(held,carried) 'onto'/'on' object -> Pour * object(held,carried) -> Pour ; Verb 'dive' 'jump' 'leap' 'vault' * 'overboard' climbable -> LeapOverboard * 'toward'/'to' object -> DiveTo * 'downstairs'/'down'/'d//' climbable -> DiveTo * 'upstairs'/'up'/'u//' climbable -> DiveTo * 'thru'/'through' object -> CrawlThru * 'outside'/'out' object -> DiveOut * 'across' object -> DiveTo * 'off' object -> DiveOut * 'into'/'inside'/'in' object -> CrawlThru * 'across' object -> DiveTo * 'over' object -> DiveTo * -> DiveTo ; Verb 'browse' 'read' 'skim' * object 'with'/'using' object -> Browse * object 'thru'/'through' object -> Browse * 'thru'/'through' object -> Browse * object -> Browse ; Verb 'unbar' 'unlock' * object 'with'/'using' object(have) -> Unbar * object -> Unbar ; Verb 'sink' * object -> Sink ; Verb 'stop' * climbable -> Stop ; Verb 'zzmgck' * object -> Zzmgck ; Verb 'nod' 'ok' 'okay' 'sure' 'y//' 'yes' 'yup' * -> Nod ; Verb 'hear' * object -> Listen ; Verb 'find' 'locate' 'seek' * object 'onto'/'on' object -> Find * object -> Find ; Verb 'q//' 'quit' * -> QuitGame ; Verb 'dip' 'hang' 'insert' 'lay' 'place' 'put' 'sprinkle' 'stick' * 'outside'/'out' light -> BlowOut * object(held,many,have) 'outside'/'out' object -> PutThrough * object(many) 'thru'/'through' object -> PutThrough * object 'behind' object -> DipBehinp * 'onto'/'on' clothing(take) -> Wear * object 'underneath'/'under'/'beneath'/'below' object -> PushUnder * 'downstairs'/'down'/'d//' object(held,many,have) -> Drop * object(held,many) 'over' object -> PlaceOn * object(held,many) 'around'/'along' object -> PlaceOn * object(held,many) 'onto'/'on' object -> PlaceOn * object(held,many) 'into'/'inside'/'in' object -> Insert ; Verb 'proceed' 'run' 'sidle' 'step' 'walk' * 'away' climbable -> Leave * 'toward'/'to' object -> Approach * 'downstairs'/'down'/'d//' object(in_room,on_ground) -> ClimbDown * 'upstairs'/'up'/'u//' object(in_room,on_ground) -> Climb * 'behind' object -> WalkBehind * 'around'/'along' climbable -> Circle * 'thru'/'through' object -> CrawlThru * 'over' object -> CrawlThru * 'across' object -> CrawlThru * 'outside'/'out' object -> CrawlThru * 'into'/'inside'/'in' object -> CrawlThru * object -> Go * -> Circle ; Verb 'faint' 'swoon' * climbable -> Swoon ; Verb 'verbose' * -> Verbose ; Verb 'rape' * animate -> Rape ; Verb 'bribe' * object 'with'/'using' object -> Bribe * object -> Bribe ; Verb 'approach' * object -> Approach ; Verb 'kiss' * animate(in_room,on_ground) -> Kiss ; Object whip "whip" with action Whip_action, name 'whip', has trytakebit; Object Crulley "Crulley" with initial2 Crulley_action, referred_to Referred_to_Pirate, size 10, action Crulley_action, adjectives 'andrew' 'andy', name 'pirate' 'crulley' 'hook', has proper transparent open openable animate; Object Room_Holder "it" with in_to Room_Holder, has ; Object -> Cell2 "Cell" with contains iron_door cell_ob, description "Hewn from dense rock, the cell is a stagnant burrow. Except for the tiniest glow of light from the torch two rooms away, it is pitch black.", action Cell2_action, s_to (TO Corner IF iron_door IS OPEN), has proper attrib12 light climbable; Object -> -> your_father "your father" with initial2 Your_father_action, size 10, action Your_father_action, adjectives 'ernest' 'ryall' 'my', name 'dad' 'papa' 'father' 'dimsford', has proper attrib9 open openable animate; Object -> Corner "Corner" with contains iron_door cell_ob, description "This short passage turns from east to north to stop abruptly at an iron door.", e_to Corner_e_dir, n_to (TO Cell2 IF iron_door IS OPEN), has proper attrib12 light climbable; Object -> Dungeon "Dungeon" with contains torch, action Dungeon_action, w_to Dungeon_w_dir, n_to Dungeon_w_dir, name 'dungeon', has proper attrib12 light climbable; Object -> -> trapdoor "trapdoor" with referred_to Referred_to_trapdooor, action Trapdoor_action, adjectives 'trap', name 'door' 'well' 'trapdoor', has attrib9 transparent scope_inside openable door vehicle; Object -> -> pair_of_manacles "pair of manacles" with action Pair_of_manacles_action, adjectives 'iron' 'pair' 'locks' 'fetter', name 'manacles' 'chains' 'lock' 'chain', has plural attrib9 transparent scope_inside open clothing openable; Object -> Anteroom "Anteroom" with contains chain, action Anteroom_action, s_to Anteroom_s_dir, n_to Bottom_of_Stairwell, has proper attrib12 light climbable; Object -> -> pool "pool" with action Pool_action, adjectives 'black', name 'pool' 'water', has attrib9; Object -> -> crocodile "crocodile" with initial2 Crocodile_action, action Crocodile_action, adjectives 'croc^' 'jaws' 'reptile' 'gator', name 'croc' 'crocodile' 'lebs' 'mouth', has scope_inside open openable animate; Object -> Cell1 "Cell" with contains wooden_door cell_ob, description "This tiny cell is airless and shivering cold, entirely empty of anything but darkness. A wooden door leads west.", w_to (TO South_Passage IF wooden_door IS OPEN), has proper attrib12 light climbable; Object -> South_Passage "South Passage" with contains wooden_door cell_ob, description "You are at the far end of a dank passageway heading north. A wooden door leads east.", e_to (TO Cell1 IF wooden_door IS OPEN), n_to North_Passage, has proper attrib12 light climbable; Object -> Guards_Bunkroom "Guard's Bunkroom" with contains cell_ob, description "Once a cell, now, with the door missing, made into a guard's bunkroom, this room is distinctly uncomfortable. Gasps of air are forced through a crack in the seaward wall of the room. The way out is west of you.", w_to North_Passage, has proper attrib12 light climbable; Object -> -> powder_horn "powder horn" with initial "A powder horn hangs on a long strap from the wall.", action Powder_horn_action, adjectives 'powder', name 'horn' 'strap', has scope_inside open takeable openable; Object -> -> -> gunpowder "gunpowder" with name 'powder' 'gunpowder' 'shot', has proper attrib9; Object -> -> crack "crack" with action Crack_action, name 'crack', has attrib9; Object -> -> cot "cot" with capacity 20, description "A canvas cot is shoved against a wall.", action Generic_bed_action, adjectives 'canvas', name 'cot' 'bed', has transparent scope_inside open supporter openable vehicle; Object -> -> -> large_key "large key" with size 2, action Large_key_action, adjectives 'large', name 'key', has trytakebit takeable; Object -> North_Passage "North Passage" with contains cell_ob, description "A strong wet breeze blows from a low doorway to the east. A circle of light leads west. The passageway continues south.", w_to Bottom_of_Stairwell, s_to South_Passage, e_to Guards_Bunkroom, has proper attrib12 light climbable; Object -> Bottom_of_Stairwell "Bottom of Stairwell" with contains stair torch, description "Flickering torchlight lights the bottom of a spiral staircase. A draft blows from the east; a passage leads south.", u_to Stairwell, s_to Anteroom, e_to North_Passage, has proper attrib12 light climbable; Object -> Stairwell "Stairwell" with contains stair portrait torch, description "Cool salt air, blowing past a torch on a spiral staircase below you, ruffles your hair and circles south into the library.", out_to Library_different_dir, d_to Bottom_of_Stairwell, s_to Library_different_dir, has proper attrib12 light climbable; Object -> Gallery "Gallery" with contains chandelier railing, action Gallery_action, n_to Upstairs_Hall2, has proper attrib12 light climbable; Object -> -> rope "rope" with initial2 Rope_action, action Rope_action, adjectives 'heavy', name 'rope', has general_3 trytakebit attrib27; Object -> Lafonds_Bedroom "Lafond's Bedroom" with contains ornate_door table drapes sea, action Lafonds_Bedroom_action, s_to Lafonds_Bedroom_s_dir, has proper attrib12 light climbable; Object -> -> Lafond "Lafond" with initial2 Lafond_action, size 10, action Lafond_action, adjectives 'jean', name 'lafond' 'villain' 'governor', has proper open openable animate; Object -> -> -> gold_ring "gold ring" with referred_to Referred_to_ring, action Gold_ring.action, adjectives 'gold', name 'ring' 'latin', has attrib9; Object -> -> table "table" with capacity 14, description "A lace-covered table crouches beside a wing-backed chair in one corner.", adjectives 'lace-' 'lace' 'covered' 'wooden', name 'table', has scope_inside open supporter openable; Object -> -> -> green_goblet "green goblet" with capacity 2, number 0, size 2, action Goblet_action, adjectives 'green' 'his', name 'cup' 'glass' 'goblet', has open takeable openable; Object -> -> -> blue_goblet "blue goblet" with capacity 2, number 0, size 2, action Goblet_action, adjectives 'blue' 'my', name 'cup' 'glass' 'goblet', has open takeable openable; Object -> -> -> flagon "flagon" with number 1, size 3, action Flagon_action, name 'flagon', has scope_inside open trytakebit takeable openable; Object -> -> -> -> quantity_of_wine "quantity of wine" with size 1, action Quantity_of_wine_action, name 'wine', has attrib9 trytakebit; Object -> -> shutters "shutters" with action Shutters_action, adjectives 'wooden', name 'shutters' 'sill' 'window', has plural attrib9 open door; Object -> -> bed4 "bed" with capacity 100, action Generic_bed_action, name 'bed', has attrib9 scope_inside open supporter openable vehicle; Object -> -> chair "chair" with name 'chair', has attrib9 scope_inside open supporter openable vehicle; Object -> Upstairs_Hall2 "Upstairs Hall" with contains ornate_door, description "You stand in a carpeted hallway, leading west to a stair landing. To the north is an ornately carved door. From the south comes the impression of light and air.", w_to Stair_Landing, s_to Gallery, n_to (TO Lafonds_Bedroom IF ornate_door IS OPEN), has proper attrib12 light climbable; Object -> Parlour "Parlour" with description "This room is exotically furnished with a Turkey divan and chairs. The exit is south.", s_to Upstairs_Hall1, has proper attrib12 light climbable; Object -> -> duelling_pistols "pair of duelling pistols" with description "A pair of duelling pistols is mounted high on one wall.", action Duelling_pistols_action, adjectives 'duelling', name 'pistol' 'gun', has plural; Object -> -> divan "divan" with action Divan_action, adjectives 'turkey', name 'couch' 'divan', has attrib9 scope_inside supporter openable; Object -> Stair_Landing "Stair Landing" with contains chandelier railing, action Stair_Landing_action, d_to Foyer, w_to Upstairs_Hall1, e_to Upstairs_Hall2, has proper attrib12 light climbable; Object -> Upstairs_Hall1 "Upstairs Hall" with description "You stand in a carpeted hallway, leading east to a stair landing. Rooms lie north and south of you.", s_to Bedroom, e_to Stair_Landing, n_to Parlour, has proper attrib12 light climbable; Object -> Bedroom "Bedroom" with contains window1 vine, description "Lit only with moonlight through the open window, tonight this room is serving as a ladies' dressing room. An exit lies to the north.", d_to MoveAroundShip, n_to Upstairs_Hall1, has proper attrib12 light climbable; Object -> -> beautiful_ball_gown "beautiful ball gown" with initial "Draped across the bed is a lovely cream colored watered silk gown. It looks about your size.", referred_to Referred_to_clothes, action Generic_clothes_action, adjectives 'ball' 'silk', name 'gown' 'dress' 'clothes', has clothing takeable; Object -> -> bed2 "bed" with capacity 100, action Generic_bed_action, name 'bed', has attrib9 scope_inside open supporter openable vehicle; Object -> Library "Library" with contains portrait window1 desk drapes, action Library_action, in_to Library_different_dir, s_to East_Hallway, e_to (TO By_the_House IF window2 IS OPEN), n_to Library_different_dir, name 'library', has proper attrib12 light climbable; Object -> -> hat "hat" with capacity 2, initial2 Hat_action, action Hat_action, adjectives 'plumed' 'white', name 'hat' 'tricorn' 'quill', has general_3 scope_inside clothing takeable; Object -> -> knob "knob" with action Knob_action, name 'knob', has general_1 attrib9 scope_inside supporter openable; Object -> -> bookcase "bookcase" with capacity 99, action Bookcase_action, adjectives 'book' 'case', name 'bookcase' 'bookshelf' 'shelf' 'shelves', has attrib9 scope_inside open openable; Object -> -> -> book "book" with referred_to Referred_to_books, action Book_action, adjectives 'treatise' 'well-', name 'book' 'power', has attrib9 trytakebit; Object -> -> books "books" with referred_to Referred_to_books, action Books_action, name 'book' 'books', has plural attrib9 trytakebit; Object -> -> globe "globe" with action Globe_action, adjectives 'world' 'st' 'wooden', name 'globe' 'sinister' 'island', has attrib9 trytakebit; Object -> East_Hallway "East Hallway" with contains long_table, description "The carpeted hallway turns from west to north here, extending into the east wing. A long table blocks the way south.", action East_Hallway_action, w_to Foyer, s_to Scuttle_under_tables, n_to Library, has proper attrib12 light climbable; Object -> Supper_Room "Supper Room" with contains long_table window1, description "One long table set across the north entrance indicates that supper was served here earlier. West of you is the ballroom.", action Supper_Room_action, w_to Into_Ballroom, s_to "The windows overlooking the veranda do not open.", n_to Scuttle_under_tables, has proper attrib12 light climbable; Object -> Orchestra "Orchestra" with contains window1 dancer musicians, action Orchestra_action, s_to "The windows overlooking the veranda do not open.", e_to Ballroom, has proper attrib12 light climbable; Object -> Ballroom "Ballroom" with contains chandelier french_door pirate dancer, action Ballroom_action, adjectives 'dance', w_to Out_of_Ballroom, s_to Out_of_Ballroom, e_to Out_of_Ballroom, n_to Out_of_Ballroom, name 'floor' 'dance' 'ballroom', has proper attrib12 light climbable; Object -> Foyer "Foyer" with description "A grandiose staircase splits and twists up to the next floor here, framing the entrance south to the ballroom. Long hallways lead east and west; cool night air drifts in through the front door, north of you.", action Foyer_action, u_to Foyer_move_dir, w_to Foyer_move_dir, s_to Foyer_move_dir, e_to Foyer_move_dir, n_to Main_Entrance, has proper attrib12 light climbable; Object -> -> butler "butler" with initial2 Butler_action, size 10, action Butler_action, name 'butler', has scope_inside open animate; Object -> Hall "Hall" with contains door, description "No expense has been spared to make this long dim hallway anything but a servant's corridor. The foyer is east, a kitchen north of you.", e_to Foyer, n_to Kitchen, has proper attrib12 light climbable; Object -> Kitchen "Kitchen" with contains fire, description "A firepit in the floor smokes badly, fogging up the depths of this large kitchen, somehow not escaping through either the south or west doors.", action Kitchen_action, w_to Out_of_Kitchen, s_to Out_of_Kitchen, has proper attrib12 light climbable; Object -> -> Lucy "Lucy" with initial2 Lucy_action, size 10, action Lucy_action, adjectives 'blond', name 'woman' 'cook' 'lucy', has proper female open openable animate; Object -> -> -> garter "garter" with capacity 1, size 2, action Garter_action, adjectives 'red', name 'garter' 'sling' 'slings', has attrib8 transparent scope_inside open concealed clothing takeable openable; Object -> Front_Drive "Front Drive" with description "A rutted drive runs north-south here, from a high spiked gate through the jungle to Lafond's mansion. You hide in the bushes nearby.", w_to "The underbrush is much too thick to enter.", s_to Main_Entrance, e_to "The underbrush is much too thick to enter.", n_to "Dragoons guard the gate.", has proper light climbable; Object -> -> patrol "patrol" with description "Dragoons, conversing quietly, patrol the other side of the gate.", action Patrol_action, adjectives 'dragoon', name 'dragoon' 'patrol', has animate; Object -> -> gate2 "gate" with name 'gate' 'fence', has attrib9 locked door; Object -> Main_Entrance "Main Entrance" with contains hedge, description "The front door stands open to the south, light splayed out onto a drive stretching north into the jungle. A path leads around the western wing of the house; jutting out from the east wing is a tall hedge.", in_to Foyer, w_to Around_drive_dir, s_to Foyer, e_to "A tall hedge prevents you from going around the east wing of the house.", n_to Front_Drive, has proper light climbable; Object -> Clearing "Clearing" with contains window1 tree vine, description "You are in a small clearing under the western side of the house. Heavy vines creep up the wall past a second floor window, open to the night air. Southwest is an opening in the bushes.", action Clearing_action, out_to Forest, u_to MoveAroundShip, w_to Forest, e_to "The west wall of the house is that way.", southw_to Forest, has proper light climbable; Object -> Forest "Forest" with description "Buried in the subtropical undergrowth, you lose all sense of being on someone's private estate; jungle seems to extend for miles on all sides of you. A footworn path curves from east to north here, and the vegetation lessens to the northeast.", action Forest_action, e_to Lawn, ne Clearing, n_to Trade_Entrance, has proper light climbable; Object -> Trade_Entrance "Trade Entrance" with description "You are on a well-trampled lawn at the side of the house, one low doorway leading in to the east. Gravelled paths lead north and south into the undergrowth.", in_to Kitchen, w_to "The undergrowth is much too thick to enter.", s_to Forest, e_to Kitchen, n_to Around_drive_dir, has proper light climbable; Object -> Veranda_Room "Veranda" with contains stair veranda french_door, action Veranda_Room_action, d_to Lawn, w_to "The steps lead south.", s_to Lawn, e_to "The steps lead south.", n_to Into_Ballroom, has proper light climbable; Object -> By_the_House "By the House" with contains window2 hedge, action By_the_House_action, w_to (TO Library IF window2 IS OPEN), s_to In_the_Hedge, e_to "Death lies that way, my lady.", n_to "You might fight your way a few feet into the thorns but you'd only tear your clothes.", has proper light climbable; Object -> In_the_Hedge "In the Hedge" with contains folly hedge, description "You crouch in the green rustlings of the hedge. Not far east, wind keens up the cliff, high above swells breaking against a rocky shore. You know the folly is somewhere to the west. North, the hedge is somewhat less dense.", w_to (TO Folly_Room IF Folly_slats_pulled_back ELSE "You can't see any way to get past into the folly."), s_to "You might fight your way a few feet into the thorns but you'd only tear your clothes.", e_to "Death lies that way, my lady.", n_to By_the_House, has proper light climbable; Object -> Folly_Room "Folly" with contains folly, description "Perfumed by the heady odor of the night-blooming jasmine entwined in the bamboo latticework, this folly is a cool, dark haven.", action Folly_Room_action, out_to Lawn, in_to Folly_into_hole, w_to Lawn, e_to Folly_into_hole, name 'folly', has proper attrib12 light climbable; Object -> -> hole "hole" with action Hole_action, name 'hole', has open concealed; Object -> -> loose_slat "loose slat" with description "One bamboo slat at the back seems to be loose.", action Loose_slat_action, adjectives 'bamboo' 'loose', name 'slat', has trytakebit; Object -> -> bench "bench" with description "A bench is built into the wall, circling the folly.", name 'bench', has scope_inside open supporter openable vehicle; Object -> -> flower "flower" with referred_to Referred_to_flower, action Flower_action, adjectives 'lovely', name 'flower' 'jasmine', has attrib9; Object -> Lawn "Lawn" with contains veranda folly hedge, action Lawn_action, in_to Folly_Room, d_to Beach, u_to Veranda_Room, w_to Forest, s_to Beach, prop25 Beach, e_to Folly_Room, n_to Veranda_Room, has proper light climbable; Object -> Beach "Beach" with contains stair sea vine skiff1 debris, action Beach_action, u_to Beach_u_to, e_to Shallows, n_to Beach_u_to, northw_to Beach_u_to, has proper light climbable; Object -> -> bushes "bushes" with name 'bushes' 'dragoon' 'soldier', has plural attrib9; Object -> Shallows "Shallows" with contains sea debris, action Shallows_action, w_to EnterOcean, s_to "You stop at a steep cliff-face.", e_to EnterOcean, n_to "You stop at a steep cliff-face.", name 'shallow', has proper light climbable; Object -> -> skiff2 "skiff" with capacity 50, initial2 Skiff2_action, referred_to Referred_to_boat, action Skiff2_action, name 'skiff' 'boat', has attrib8 transparent scope_inside open openable vehicle; Object -> -> -> pair_of_oars "pair of oars" with action Pair_of_oars_action, adjectives 'metal', name 'oars' 'oar' 'oarlock', has plural attrib9 trytakebit; Object -> Lagoon "Lagoon" with contains sea debris, action Lagoon_action, w_to EnterOcean, s_to "You'll have to row that way.", e_to "You'll have to row that way.", n_to "You'll have to row that way.", has proper light climbable; Object -> By_the_Ship "By the Ship" with contains ladder sea skiff1, action By_the_Ship_action, u_to MoveAroundShip, w_to EnterOcean, s_to "You'll have to row that way.", e_to "You'll have to row that way.", n_to "You'll have to row that way.", has proper light climbable; Object -> Crows_Nest "Crow's Nest" with contains rigging sea, description "You perch on a platform high above the deck, giving a view of the endless sea and the southernmost cliffs of the island, where a house pokes out of the vegetation. It gives off a general glow, but no lights can be seen in any of the second story windows. A tiny beach nestles into the base of the cliff.", d_to In_the_Rigging, u_to "Don't push your luck too far.", has proper light climbable; Object -> In_the_Rigging "In the Rigging" with contains rigging sea ladder, action In_the_Rigging_action, d_to MoveAroundShip, u_to MoveAroundShip, has proper light climbable; Object -> Bowsprit "Bowsprit" with contains chain sea railing, action Bowsprit_action, w_to "You can't swim, and decide not to jump.", s_to Forecastle, e_to "You can't swim, and decide not to jump.", n_to "You can't swim, and decide not to jump.", has proper light climbable; Object -> -> anchor "anchor" with action Anchor_action, name 'anchor', has attrib9 vowel_start; Object -> -> stub_of_rope "stub of rope" with initial2 Stub_of_rope_action, action Stub_of_rope_action, adjectives 'stub', name 'rope' 'hawser', has trytakebit; Object -> Galley "Galley" with contains shack fire, description "This tiny kitchen smells of old stew and yeast. A low door to starboard shows the way out.", action Galley_action, out_to Forecastle, e_to Forecastle, has proper light climbable; Object -> -> Cookie "Cookie" with initial2 Cookie_action, size 10, action Cookie_action, adjectives 'rodney', name 'cookie' 'quick' 'cook' 'rodney', has proper transparent scope_inside open openable animate; Object -> -> dagger "dagger" with initial "A dagger is driven into the wooden floorboards.", action Dagger_action, name 'dagger' 'knife', has takeable; Object -> Forecastle "Forecastle" with contains chain grate sea railing rigging shack, action Forecastle_action, in_to Galley, d_to "The grate is too small.", u_to MoveAroundShip, w_to "You can't swim, and decide not to jump.", s_to Main_Deck, e_to "You can't swim, and decide not to jump.", n_to Forecastle_n_to, has proper light climbable; Object -> -> lever "lever" with action Lever_action, name 'lever' 'writing', has attrib9; Object -> -> mooring_winch "mooring winch" with action Mooring_winch_action, adjectives 'mooring' 'anchor', name 'winch' 'windlass' 'barrel', has ; Object -> Main_Deck "Main Deck" with contains canvas_hatch stair railing pirate sea rigging, action Main_Deck_action, d_to Onto_deck, u_to MoveAroundShip, w_to "You can't swim, and decide not to jump.", s_to Quarterdeck, e_to "You can't swim, and decide not to jump.", n_to Forecastle, has proper light climbable; Object -> -> water_barrel "water barrel" with referred_to Referred_to_barrel, action Barrel_action, adjectives 'fresh' 'water', name 'barrel' 'cask' 'keg', has attrib9 scope_inside open openable; Object -> -> -> water "water" with action Sea_action, adjectives 'fresh', name 'water', has attrib9; Object -> -> rum_barrel "rum barrel" with referred_to Referred_to_barrel, action Barrel_action, adjectives 'rum' 'stained' 'dark', name 'barrel' 'cask' 'keg' 'stains', has attrib9 scope_inside open openable; Object -> -> -> rum "rum" with action Rum_action, name 'rum' 'grog', has attrib9; Object -> Quarterdeck "Quarterdeck" with contains door pirate sea railing line, action Quarterdeck_action, in_to "The door is barred.", d_to "The door is barred.", u_to "If you wish to go to the Poop, go AFT.", w_to "You can't swim, and decide not to jump.", s_to Poop, e_to "You can't swim, and decide not to jump.", n_to Main_Deck, has proper light climbable; Object -> -> pyramid_of_casks "pyramid of casks" with initial2 Pyramid_of_casks_action, referred_to Referred_to_cask, action Pyramid_of_casks_action, adjectives 'rum', name 'pyramid' 'casks' 'cask', has ; Object -> -> line "line" with action Line_action, adjectives 'heavy', name 'rope' 'line', has attrib9; Object -> -> cask "cask" with initial2 Cask_action, referred_to Referred_to_cask, action Cask_action, adjectives 'empty' 'rum' 'warped', name 'cask' 'keg', has attrib8 attrib9 scope_inside open openable vehicle; Object -> -> -> slab_of_pork "slab of pork" with action Slab_of_pork_action, adjectives 'salt' 'slab', name 'pork' 'meat' 'something' 'pork', has ; Object -> -> cannon "cannon" with description "Cannon line the deck, aimed at open sea and the island.", action Cannon_action, name 'cannon', has plural; Object -> -> navigation_wheel "navigation wheel" with action Navigation_wheel_action, adjectives 'navigate', name 'wheel', has attrib9; Object -> Poop "Poop" with contains ladder sea railing quarters, action Poop_action, d_to MoveAroundShip, w_to "You can't swim, and decide not to jump.", s_to "You can't swim, and decide not to jump.", e_to "You can't swim, and decide not to jump.", n_to Quarterdeck, has proper light climbable; Object -> Crews_Quarters "Crew's Quarters" with contains grate, action Crews_Quarters_action, u_to "A grate blocks your way.", s_to Hold, has attrib12 light climbable; Object -> -> leather_bottle "leather bottle" with initial "A small bottle has been dropped nearby.", action Leather_bottle_action, adjectives 'brown' 'small' 'leather', name 'bottle' 'label', has transparent scope_inside takeable openable; Object -> -> -> laudanum "laudanum" with size 1, action Laudanum_action, adjectives 'laud', name 'laudanum' 'liquid' 'drug' 'drops', has attrib9 trytakebit; Object -> -> bit_of_mirror "bit of mirror" with initial "A chipped piece of mirror sits propped on a shoulder-high timber.", action Bit_of_mirror_action, adjectives 'chipped' 'piece' 'bit', name 'mirror', has takeable; Object -> -> mess "mess" with name 'mess' 'powder' 'potion' 'stains', has attrib9; Object -> Hold "Hold" with contains canvas_hatch stair, action Hold_action, out_to Onto_deck, u_to Onto_deck, s_to Aft_Hold, n_to Crews_Quarters, name 'hold', has proper attrib12 light climbable; Object -> -> fuse "fuse" with initial2 Fuse_action, action Fuse_action, adjectives 'burning' 'slow' 'red', name 'fuse' 'glow' 'fire', has attrib9 concealed light; Object -> -> sign "sign" with action Sign_action, name 'sign', has attrib9; Object -> -> keg "keg" with action Keg_or_supplies_action, name 'keg' 'kegs' 'cask' 'casks', has attrib9 trytakebit; Object -> -> gate1 "gate" with action Gate1_action, adjectives 'iron' 'mesh', name 'gate' 'gap' 'lock', has attrib9 locked door; Object -> -> fence "fence" with action Fence_action, adjectives 'mesh' 'wire', name 'fence' 'cage', has attrib9 transparent scope_inside openable; Object -> -> -> supplies "food and ammunition supplies" with action Keg_or_supplies_action, adjectives 'supplies', name 'food' 'ammunion' 'gunpowder', has plural attrib9; Object -> Aft_Hold "Aft Hold" with contains stair, description "This is a gloomy, damp area at the bottom of the Helena Louise. To the fore there seems to be a little more light, or you can climb up some steep stairs.", u_to Landing, n_to Hold, has proper attrib12 light climbable; Object -> Sleeping_Cupboard "Sleeping Cupboard" with contains door, action Sleeping_Cupboard_action, out_to Through_cupboard_dir, n_to Through_cupboard_dir, has attrib12 light climbable; Object -> -> shirt "shirt" with referred_to Referred_to_clothes, action Generic_clothes_action, adjectives 'white', name 'shirt' 'clothes', has attrib9 clothing takeable; Object -> -> breeches "breeches" with referred_to Referred_to_clothes, action Generic_clothes_action, adjectives 'breeks', name 'breeches' 'pants' 'clothes' 'britches', has plural attrib9 clothing takeable; Object -> Landing "Landing" with contains door curtain stair large_cupboard, action Landing_action, out_to "The door at the top of the stairs won't open.", in_to Through_cupboard_dir, d_to Aft_Hold, u_to "The door at the top of the stairs won't open.", s_to Through_window, has proper attrib12 light climbable; Object -> On_the_Ladder "On the Ladder" with contains ladder sea quarters skiff1, action On_the_Ladder_action, in_to Ladder_in_dir, d_to MoveAroundShip, u_to MoveAroundShip, n_to Ladder_in_dir, has proper light; Object -> Captains_Quarters "Captain's Quarters" with contains curtain window1 desk door sea ladder quarters, action Captains_Quarters_action, u_to MoveAroundShip, s_to Onto_ledge_move, n_to Through_window, has proper attrib12 light climbable; Object -> -> Captain_Jamison "Captain Jamison" with initial2 Captain_Jamison_action, referred_to Referred_to_Pirate, size 10, action Captain_Jamison_action, adjectives 'nicholas' 'nick' 'captain' 'falcon', name 'hero' 'pirate' 'jamison' 'captain', has proper scope_inside open openable animate; Object -> -> -> new_ring "new ring" with referred_to Referred_to_ring, action Gold_ring.action, adjectives 'new', name 'ring' 'latin', has attrib9; Object -> -> -> rapier "rapier" with initial2 Rapier_action, action Rapier_action, adjectives 'sharp', name 'sword' 'rapier', has trytakebit takeable; Object -> -> large_cupboard "large cupboard" with referred_to Referred_to_bed, action Large_cupboard_action, name 'cupboard' 'bed' 'door', has attrib8 attrib9 scope_inside openable door; Object -> -> -> pile_of_clothes "pile of clothes" with initial "Kicked into a far corner is a pile of clothes.", referred_to Referred_to_clothes, size 10, action Pile_of_clothes_action, adjectives 'pile', name 'clothes', has trytakebit clothing takeable; Object -> -> bed1 "bed" with capacity 100, referred_to Referred_to_bed, action Generic_bed_action, name 'bed', has attrib9 scope_inside open supporter openable vehicle; Object -> -> ledge "ledge" with action Ledge_action, name 'ledge' 'sill', has attrib9 transparent scope_inside open openable vehicle; Object -> Deck "Deck" with contains quarters pirate fire, action Deck_action, in_to "~It's not safe down there,~ the Falcon calls.", d_to "~It's not safe down there,~ the Falcon calls.", w_to "~It's not safe down there,~ the Falcon calls.", s_to "The Falcon follows a step behind.", e_to "The Falcon follows a step behind.", n_to "The Falcon follows a step behind.", has proper light climbable; Object -> -> Davis "Davis" with description "Out of the smoke staggers Davis, tugging a bloodied knife from the back of a pirate. Davis's eyes gleam white from a face blackened and bloody, his lips dark red as if he has been drinking blood. He turns to face you.", action Davis_action, name 'davis', has proper animate; Object -> Cabin "Cabin" with contains window1 door quarters, description "You are in an officer's cabin, lit by the firelight glowing through a porthole. A door is to starboard. Except for the built-in bed, the room seems to have been emptied thoroughly, if hurriedly.", out_to Cabin_out_dir, e_to Cabin_out_dir, has proper attrib12 light climbable; Object -> -> coffer "coffer" with capacity 15, size 10, action Coffer_action, adjectives 'small' 'metal' 'heavy', name 'coffer' 'chest' 'lock' 'box', has attrib9 locked scope_inside openable; Object -> -> -> invitation "invitation" with action Invitation_action, adjectives 'large' 'white', name 'invite' 'card' 'invitation', has vowel_start takeable; Object -> -> bed3 "bed" with capacity 100, action Generic_bed_action, name 'bed', has attrib9 scope_inside open supporter openable vehicle; Object -> -> -> player "it" with action Player_action, name 'protagonist', has attrib9 concealed animate; Object -> -> -> -> your_reticule "your reticule" with capacity 50, action Your_reticule_action, adjectives 'your' 'my', name 'reticule', has proper scope_inside open clothing openable; Object -> -> -> -> -> smelling_salts "smelling salts" with size 3, action Smelling_salts_action, adjectives 'smelling' 'ammonia', name 'salts' 'carbon' 'tag', has plural takeable; Object -> -> -> -> -> banknote "banknote" with size 1, action Banknote_action, adjectives 'fifty' 'guinea' 'front' 'back', name 'money' 'note' 'banknote', has takeable; Object -> -> -> -> your_kid_slippers "your kid slippers" with action Linen_chemise.action, adjectives 'kid', name 'shoes' 'slippers', has plural proper clothing worn; Object -> -> -> -> linen_chemise "linen chemise" with referred_to Referred_to_clothes, action Linen_chemise.action, adjectives 'linen', name 'clothes' 'chemise' 'slip' 'petticoats', has general_3 clothing worn takeable; Object -> -> -> -> cotton_frock "cotton frock" with referred_to Referred_to_clothes, size 5, action Generic_clothes_action, adjectives 'cotton', name 'clothes' 'dress' 'frock', has clothing worn takeable; Object -> Plundered_Hearts "Plundered Hearts" with name 'zzmgck', southw_to "You can't go that way.", northw_to "You can't go that way.", has ; Object globals "it" with name 'zzmgck', has general_1 general_3 female attrib8 attrib9 locked vowel_start attrib12 general_2 transparent scope_inside open trytakebit supporter visited concealed clothing worn openable attrib25 door vehicle light climbable animate; Object -> air "air" with name 'air', has ; Object -> unmentionables "unmentionables" with action Unmentionables_action, name 'unmentionables' 'smallshorts', has proper attrib9; Object -> St_Sinistra "St. Sinistra" with action St_Sinistra_action, adjectives 'st', name 'island' 'sinister' 'cliff' 'beach', has proper; Object -> reefs "reefs" with action Reefs_action, name 'reefs' 'reef', has ; Object -> Helena_Louise "Helena Louise" with referred_to Referred_to_boat, action Helena_Louise_action, adjectives 'helena' 'pirate', name 'boat' 'ship' 'louise', has ; Object -> mansion "mansion" with action Mansion_action, adjectives 'huge' 'stone', name 'house' 'mansion' 'library', has ; Object -> room "room" with action Room_action, name 'room' 'place' 'location' 'area', has ; Object -> yourself "yourself" with number 0, size 10, action Pseudo_action, name 'i//' 'me' 'myself' 'self', has attrib3 proper visited; Object -> your_mouth "your mouth" with action Your_mouth_action, adjectives 'your' 'my' 'croc^' 'crocodile' 'lafond', name 'mouth' 'lip' 'lips' 'snout', has attrib3 proper; Object -> your_eyes "your eyes" with action Your_eyes_action, adjectives 'your' 'my' 'his' 'lafond', name 'eye' 'eyes', has plural attrib3 proper; Object -> your_head "your head" with adjectives 'your' 'my', name 'head', has attrib3 proper; Object -> your_hand "your hand" with action Your_hand_action, adjectives 'bare' 'my' 'your', name 'hands' 'hand' 'finger' 'nails', has attrib3 proper attrib9 visited; Object -> moonbeam "moonbeam" with action Moonbeam_action, adjectives 'moon', name 'moonlight' 'moonbeam' 'beam' 'light', has attrib9; Object -> sky "sky" with action Sky_action, name 'sky', has ; Object -> ceiling "ceiling" with action Ceiling_action, adjectives 'low', name 'ceiling' 'roof', has attrib9 visited; Object -> wall "wall" with name 'wall' 'walls', has attrib9 visited; Object -> ground "ground" with action Ground_action, name 'floor' 'ground' 'deck', has ; Object -> sleep "sleep" with action Sleep_action, name 'sleep' 'nap' 'snooze', has proper; Object -> man "man" with action Man_action, adjectives 'sir' 'bewigged' 'sirrah' 'gentle', name 'man' 'men' 'you' 'sailor', has ; Object -> her "her" with name 'her' 'herself', has proper visited; Object -> him "him" with name 'him' 'himself', has proper visited; Object -> it6 "it" with name 'it' 'them', has proper vowel_start visited; Object -> number "number" with name 'number', has ; Object -> direction "direction" with action Direction_action, adjectives 'f//' 's//' 'e//' 'w//' 'northwest' 'ne' 'southwest' 'se', name 'direct', has ; Object -> it4 "it" with name 'zzmgck', has ; Object -> -> dancer "dancer" with size 10, action Dancer_action, adjectives 'dancers', name 'woman' 'men' 'lady' 'ladies', has animate; Object -> -> pirate "pirate" with size 10, action Pirate_action, name 'sailor' 'pirate' 'seaman', has plural attrib9 animate; Object -> -> cell_ob "cell" with action Cell_ob_action, name 'cell', has ; Object -> -> iron_door "iron door" with action Generic_door_action, adjectives 'iron' 'cell', name 'door', has attrib9 locked door; Object -> -> wooden_door "wooden door" with action Generic_door_action, adjectives 'wood' 'wooden', name 'door', has attrib9 door; Object -> -> chandelier "chandelier" with action Chandelier_action, name 'chandelier' 'pulley' 'candle', has attrib25 light; Object -> -> railing "railing" with name 'railing', has ; Object -> -> ornate_door "ornate door" with action Generic_door_action, adjectives 'ornate', name 'door' 'lock', has attrib9 locked door; Object -> -> portrait "portrait" with action Portrait_action, adjectives 'opening' 'secret', name 'portrait' 'picture' 'painting' 'door', has attrib9 door; Object -> -> torch "torch" with action Torch_action, adjectives 'burning', name 'torch' 'flame', has trytakebit attrib25 light; Object -> -> drapes "drapes" with action Drapes_action, adjectives 'black' 'velvet' 'purple' 'gold', name 'drapes' 'curtain', has plural attrib9 door attrib27; Object -> -> musicians "musicians" with action Musicians_action, name 'musicians' 'orchestra', has animate; Object -> -> hedge "hedge" with name 'hedge', has ; Object -> -> vine "vine" with action Vine_action, adjectives 'heavy', name 'vine' 'vines', has plural attrib9 trytakebit; Object -> -> veranda "veranda" with name 'veranda' 'porch', has attrib9; Object -> -> french_door "french door" with action Generic_door_action, name 'door' 'doors', has attrib9 door; Object -> -> window2 "window" with action Generic_window_action, adjectives 'large' 'glass' 'small' 'pane' 'panes', name 'glass' 'window', has ; Object -> -> folly "folly" with referred_to Referred_to_flower, action Folly_action, name 'folly' 'gazebo' 'jasmine', has attrib9; Object -> -> skiff1 "skiff" with action Skiff1_action, name 'skiff' 'boat', has attrib9; Object -> -> rigging "rigging" with action Rigging_action, adjectives 'tangled', name 'rigging' 'mast' 'mainmast' 'foremast', has transparent scope_inside open trytakebit openable; Object -> -> shack "shack" with action Shack_action, adjectives 'wooden', name 'galley' 'hut' 'shack', has attrib9 open openable; Object -> -> chain "chain" with adjectives 'anchor', name 'chain', has ; Object -> -> grate "grate" with action Grate_action, adjectives 'air', name 'grate' 'hole', has ; Object -> -> canvas_hatch "canvas hatch" with action Canvas_hatch_action, adjectives 'canvas' 'covered', name 'hatch' 'frame', has door; Object -> -> quarters "quarters" with referred_to Referred_to_boat, action Quarters_action, adjectives 'captain', name 'quarterdeck' 'ship' 'cabin', has ; Object -> -> desk "desk" with action Desk_action, adjectives 'messy', name 'desk' 'table', has attrib9 supporter openable; Object -> -> debris "debris" with initial2 Debris_action, action Debris_action, adjectives 'plank' 'human' 'canvas' 'flesh', name 'debris' 'wood' 'remain' 'sail', has plural proper trytakebit; Object -> -> tree "tree" with action Tree_action, name 'tree' 'trees', has ; Object -> -> window1 "window" with action Generic_window_action, adjectives 'large' 'glass' 'small' 'pane' 'panes', name 'glass' 'window' 'porthole', has ; Object -> -> curtain "curtain" with action Curtain_action, name 'curtain', has door; Object -> -> stair "stair" with action Stair_action, adjectives 'wood' 'rock' 'wet', name 'stair' 'stairs' 'stairway' 'step', has ; Object -> -> fire "fire" with action Fire_action, adjectives 'warm' 'smoky', name 'fire' 'firepit' 'pit', has light; Object -> -> sea "sea" with action Sea_action, adjectives 'sea' 'dark' 'cold', name 'water' 'ocean' 'lagoon' 'shallow', has ; Object -> -> door "door" with referred_to Referred_to_door, action Generic_door_action, name 'door' 'lock', has attrib9 locked door; Object -> -> ladder "ladder" with action Ladder_action, adjectives 'rope', name 'ladder' 'rope', has attrib9 trytakebit; Object -> -> pseudo "pseudo" with action Pseudo_action, has ; Object pistol "pistol" with size 3, action Pistol_action, name 'pistol' 'gun', has takeable; Object jewelled_brooch "jewelled brooch" with action Jewelled_brooch_action, adjectives 'jewelled' 'diamond' 'sapphire' 'ruby', name 'brooch' 'pin' 'clasp', has clothing takeable; Object stone "stone" with size 1, action Stone_action, adjectives 'pointed' 'sharp', name 'stone' 'rock', has takeable; Object long_table "long table" with capacity 50, adjectives 'long', name 'table', has attrib9 scope_inside open supporter openable; Object not_here_object "it" with action Not_here_object_action, has proper; Object silver_tray "silver tray" with action Silver_tray_action, name 'tray', has transparent scope_inside open supporter takeable; Object -> cold_chicken "cold chicken" with size 3, action Cold_chicken_action, adjectives 'cold' 'pieces', name 'food' 'chicken' 'viands' 'fowl', has trytakebit; Object -> well "well" with referred_to Referred_to_trapdooor, action Well_action, adjectives 'spice' 'silver', name 'well', has attrib9 scope_inside open openable; Object -> -> spices "spices" with referred_to Referred_to_spices, size 2, action Spices_action, adjectives 'pinch', name 'spice' 'spices' 'pepper', has plural attrib9 takeable; Object -> -> -> pinch_of_spices "pinch of spices" with referred_to Referred_to_spices, size 1, action Spices_action, name 'pinch' 'spice' 'spices' 'pepper', has trytakebit takeable; Object rag "rag" with action Rag_action, adjectives 'wet' 'scrap' 'piece', name 'rag' 'cloth', has takeable; Object missive "missive" with action Missive_action, name 'paper' 'letter' 'missive', has takeable; Constant M_END = 0; Constant M_HANDLED = 1; Constant M_ENTER = 2; Constant M_LOOK = 3; Constant M_INITIAL = 5; Constant OTHER = 100; Constant SUPERBRIEF = 0; Constant BRIEF = 1; Constant VERBOSE = 2; Constant NONE = 0; Constant SHORT_DISTANCE = 1; Constant LONG_DISTANCE = 2; 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; Constant A_FAILURE = 8; Constant Q_NOT_A_YES_NO_QUESTION = 1; Constant Q_RHETORICAL_QUESTION = 2; Constant Q_SEARCHING_FOR_SECRET_DOOR = 3; Constant Q_DO_YOU_MEAN_THAT = 4; Constant Q_WILLING_TO_TRUST_JAMISON = 5; Constant Q_DO_YOU_KNOW_LUCY = 6; Constant Q_7 = 7; Constant Q_8 = 8; Constant Q_LET_JAMISON_PROTECT_YOU = 9; Constant Q_ANY_IDEA_WHERE_TO_LOOK = 10; Constant Q_WILL_YOU_DANCE_WITH_LAFOND = 11; Constant Q_DENY_LAFOND = 12; Constant Q_HAVE_THE_KEY = 13; Constant Q_DANCE_WITH_JAMISON = 14; Constant Q_LET_JAMISON_KISS_YOU = 15; Constant Q_DO_YOU_LIKE_JAMISON = 16; Constant Q_COME_TO_HIT_CRULLEY_AGAIN = 17; Global location = Plundered_Hearts; Global score; Global turns; Global Crulley_plot_overheard; Global P_end_on_prep; Global Told_how_to_use_look; Global Lafond_seduction_cnt; Global P_all_flag; Global Have_to_str = "You'll have to "; Global Looks_you_over_str = " his eyes rake over your inadequately dressed body, the damp chemise clinging to your legs and heaving bosom, your gleaming hair"; Global Requests_presence_str = " walks up to you. ~M. Lafond requests your presence in his room immediately, Miss.~ He points "; Global Drips_str = " drips off your fingers.^"; Global Pardon_str = "Pardon?^"; Global No_see_str = "You can't see any "; Global Person_to_refuse; Global Jamison_seen_you_ashore; Global He_doesnt_respond_str = "He doesn't respond.^"; Global P_him_object; Global Monster_lunges_str = "The monster lunges at you, chain rattling, roaring and angry. "; Global P_aclause; Global You_pull_cloth_str = "You pull the cloth aside momentarily."; Global The_ballroom_is_str = "The ballroom is a "; Global You_already_have_str = "You already have"; Global P_slocbits; Global On_rope_ladder_cnt; Global Distance_one_row_takes; Global Youve_already_str = "You're already "; Global Snorts_in_sleep_str = ". The monster snorts in its sleep"; Global P_matchlen; Global P_adverb; Global P_mult; Global Clock_wait; Global Wobbly_pyramid_cnt; Global Chestnut_hair_str = "Chestnut hair, tousled by the wind, frames the tanned oval of his face. "; Global C_last_int = 60; Global Halfway_up_str = " halfway up the cliff stairs."; Global P_name; Global Cookie_hasnt_found_you_yet; Global Eyes_closed_str = "Eyes closed, his skin with the pallor of death, Nick looks entirely spent.^"; Global Battle_cry_str = "An eerie battle cry arises on the wind, from all sides of the house"; Global Jamison_knows_Papa_is_rescued; Global P_xnam; Global P_moby_found; Global Pistol_loaded; Global P_walk_dir; Global P_anam; Global Hit_over_head_str = "Something cracks over your head, knocking you unconscious.^ You awaken, cuddled in a huge purple and gold curtained bed, with a shocking migraine. The man lying next to you pays no heed to your complaints, and commands you in French when you try to defend yourself. He tires of you within a few weeks, but lets you work the streets of Santa Ananas."; Global C_last_interrupt; Global Assorted_situations_FIGURE_OUT_LATER; Global prev_location; Global Person_who_drank_drugged_wine; Global P_alt_cont; Global global63 = 8338[?]; Global Only_darkness_str = " only darkness beyond"; Global Verbosity = BRIEF; Global Brief_str = "rief descriptions.^"; Global Lafond_in_bedroom = true; Global Row_direction; Global Help_me_str = "~Help me!~ you cry, hoping someone will help you."; Global Current_dancing_partner; Global skiff_distance_from_shore = 5; Global global72 = 9055[?]; Global Cant_go_str = "You can't go that way.^"; Global Butler_points_str = "~ The butler points up the stairs.^"; Global Push_you_str = ", pushing you out of the house.^"; Global Cookie_hrmph_str = " Cookie harrumphs, surprised."; Global Salt_pork_is_drugged; Global Complete_common_str = "Completely common looking "; Global Dot_newline_str = ".^"; Global Lit = true; Global Noun_missing_str = "[There seems to be a noun missing in that sentence.]^"; Global P_xadjn; Global He_leaves_str = " With an engaging smile he bows and leaves the folly.^"; Global global89 = 8656[?]; Global P_debug_universal_search; Global P_adj; Global P_len; Global Rag_soaked_in; Global C_ints = 48; Global Cookie_attacking_alligator; Global Reveals_nothing_str = "This reveals nothing new.^"; Global Waiting_for_you_to_drink_wine_cnt; Global No_verb_str = "[There was no verb in that sentence!]^"; Global Shrugging_off_str = ", shrugging off your lack of cooperation"; Global Jamison_imprisoned; Global Butler_waiting_for_invitation; Global A_sinewy_arm_str = "A sinewy arm encircles you, ~Stay, my lady.~"; Global Too_dark_str = "It's too dark to see a thing."; Global Crulley_knocked_out_cnt; Global Spices_taken; Global Have_loaded_pistol_or_garter; Global noun; Global Entered_rigging_from; Global Laudenum_left = 5; Global P_merged; Global Stairs_down_str = "Steep stairs descend "; Global P_gwimbit = attrib0; Global The_fall_down_str = " The fall to the bottom of the well is endless; you've lost consciousness by the time the water overtakes you."; Global You_cant_str = "You can't "; Global No_strength_str = "You haven't the strength.^"; Global Lafond_has_forced_kiss; Global Failed_str = "Failed.^"; Global Garter_around_crocodile; Global P_syntax; Global P_xadj; Global P_aadj; Global Laughs_and_dances_str = "He laughs triumphantly and pulls you into the dance.^"; Global Dotdotdot_str = "...^^"; Global action; Global P_initial_word; Global You_can_see_str = "You can see"; Global Only_the_back_str = " only the back of"; Global The_pirate_captain_str = "The pirate captain "; Global Crocodile_asleep; Global You_find_yourself_str = "You find yourself speechless with dread.^"; Global Rope_ladder_climb_cnt; Global Not_holding_str = "You're not holding"; Global Not_done_in_polite_str = "That's not done in polite society.^"; Global Fuse_is_burning; Global P_and; Global Kisses_forehead_str = "He kisses your forehead.^"; Global P_oneobj; Global There_is_nothing_str = "There's nothing "; Global Have_worn_gown; Global It_seems_that_str = "It seems that"; Global You_arent_str = "You aren't "; Global Suicide_str = "Suicide is not the answer.^"; Global Tried_to_hide_scent_with_spices_ORPHANED; Global Squeeze_thru_str = " squeeze through the opening between cupboard and wall"; Global Dancer_requesting_dance; Global Disguised_as_boy; Global Rope_ladder_twisting_in_breeze; Global P_won; Global Over_your_chemise_str = " over your white linen chemise. Mama would say you belonged in a brothel.^"; Global Crulley_collapses_str = "Stunned, Crulley collapses at your feet, his eyes rolling"; Global Crulley_alone_with_you_timer; Global Jamison_convo_cnt; Global What_the_devil_str = "What the devil are you doing here! Lafond is a dangerous man to play with!~ Jamison "; Global Sleepy_counter; Global Look_around_you_str = "Look around you.^"; Global Sorry_no_loiter_str = "Sorry, no loitering,~ says the butler"; Global P_quote_flag; Global P_table; Global A_tangled_mass_str = " A tangled mass of rigging hangs down from the mast, like many rope ladders woven together."; Global A_tiny_glow_str = "A tiny glow of fire creeps across a stretch of floor -- inside the cage full of ammunition"; Global P_getflags; Global Crulley_not_gotten_revenge_on_Jamison = true; Global Hey_boy_get_away_str = ". ~Hey, boy! Get away from those. It ain't safe!~ yells a sailor."; Global global177 = 9473[?]; Global Cant_do_that_from_here_str = "You can't do that from here.^"; Global Jamisons_men_have_attacked; Global global180 = 9136[?]; Global Death_str = "^^ *** You have died ***^^"; Global P_number; Global Have_encountered_crulley_in_dungeon; Global P_oflag; Global actor = player; Global P_adjn; Global Turns_on_ocean = 5; Global Way_to_do_that_str = "way to do that.^"; Global Youre_holding_it_str = "You're holding it!^"; Global P_dont_flag; Global Lafonds_goblet = green_goblet; Global Over_the_head_with_str = " over the head with"; Global Press_return_str = "[Press RETURN or ENTER to "; Global Squeeze_three_drops_str = "You squeeze three colorless drops "; Global Nothing_happens_str = "Nothing happens.^"; Global Title_str = "PLUNDERED HEARTS"; Global Various_duel_or_ship_or_dance_counters = 1; Global Folly_slats_pulled_back; Global Is_not_flush_str = " is not flush against the doorsill. "; Global Question_cnt; Global P_it_objectobject; Global global203 = 9423[?]; Global Lafond_smacks_you_str = " Lafond smacks you hard across the face with the back of his hand, ~Fool.~ He casts aside all formalities."; Global Your_goblet = blue_goblet; Global Butler_cnt; Global second; Global P_cont; Global Some_sort_of_wearing_variable; Global Unladylike_str = "It is thoroughly unladylike to "; Global Skiff_tied_to_ladder = true; Global Not_polite_str = "That wouldn't be polite.^"; Global Already_is_str = "It already is.^"; Global Is_closed_str = " is closed"; Global Knocked_Crulley_unconscious; Global Mama_shocked_str = "Mama would have been shocked.^"; Global Skirt_soaked_in; Global P_not_here; Global Drugged_player_cnt; Global Beautiful_night_str = "But it's such a beautiful night!^"; Global Lafond_saw_the_drug; Global Aye_aye_str = "Aye-aye.^"; Global Lafond_grabs_hair_str = "Lafond grabs your hair and pulls your head sharply back, clinching your arms to your sides. "; Global P_ncn; Global Father_has_taunted_alligator; Global P_her_object; Global Cask_distance_from_shore = 10; Global You_dip_oars_str = "You dip the oars and pull them towards you. The "; Global Floated_into_lagoon; Global Spacing_str = " "; Global Ending_rank; Global Crocodile_mouth_closed; Global Verbs = invalidArray9715; Array P_buts --> 50; Array Ship_near_reef_strs --> 0 0 0 0 0 "The ship is floating midway between the island and a line of reefs" "The reefs seem a little larger than you thought before" "The reefs are definitely getting larger" "Bswish! Waves smash against the reefs nearby" "You are misted in the spray of waves hitting the reefs. The island is far away" "The sound of splintering wood reverberates through the ship as it drifts onto the reefs" ; Array Ho_hum_table table 0 " doesn't do anything." " accomplishes nothing." " has no desirable effect." ; Array Getting_sleepy --> " seems to be having some problems stifling a yawn" "'s eyes are getting heavier" " collapses, head back, snoring loudly" ; Array Ending_title --> 0 "Orphan" "Love Transcending Death" "Pirate Queen" "Happily Ever After" ; Array global38 --> 2; Array P_otbl --> 8; Array C_table --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Crulley_breaks_into_cabin_daemon 9 Ship_lurches_timer 5 PirateAttack_daemon 65535 ; Array Oops_buffer --> 4; Array First_conversation_with_Jamison --> "~We have anchored off St. Sinistra,~ says Captain Jamison, ~and I must look like a guest at Lafond's dance tonight. I will find and free your father, and then finally wreak my revenge on Lafond.~ He half draws his rapier from its scabbard." "~I am sorry you have been confined down here, but I don't trust my lonely crew with such beauty. Crulley isn't the only man aboard with few principles.~ He smiles at you, eyes lingering, and takes your hand. You feel your color rising. ~If anything goes wrong, turn to Cookie. He is quite deaf, but capable. He'll see you through.~" "His look darkens. ~You should know why I hate Lafond: Some years ago, as my brother and his bride sailed to a new life in Virginia, pirates struck. Their ship was boarded, looted and burned, the women taken, never to be seen again. A sailor, the one survivor, watched as a man of Lafond's description shot my brother in the back as he tried to save the women. Lafond has now bought respectability, but he shall never buy peace.~ Jamison straightens resolutely, bows, and departs." ; Array P_prsi --> 50; Array Yuks_table table 0 "Think again, guv'nor." "This is no time to get hysterical." "It's Bedlam for you!" "Don't be absurd." "You have lost your mind." ; Array Crulley_threats --> "Me name's Andy Crulley, and ladies learn to love me" "Avast me, but ain't ye a beauty" "They calls me Andy, but I'm really randy" ; Array Pirate_attack_tbl table 0 "~Aaieeee!~ echoes a scream, followed by several grunts and thumps" "~Cap'n Jamison! We've got 'em!~ cries a rough voice" "~The Falcon! The Falcon conquers!~ yells someone" "With a creak and a crash, somewhere a mast falls to the deck" "You recognize a voice from far away, ~Don't take that! Look in the cabin at the stern -- you'll find some fun there!~ It sounds like Davis" ; Array P_vtbl --> 4; Array P_adjectives --> 2; Array P_noun_names --> 2; Array Goblet_contents_tbl --> " is ornate and expensive" " is brimming with wine" " has a small pool of liquid at the bottom" " is brimming with wine" ; Array P_cctbl --> P_VERB P_VERB P_VERB invalidEnum20224 ; Array P_lexv -> 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; Array Pirate_gender_discrimination_tbl table 0 "Would yer like a taste o' water?" "What, afrighted of a lick o' the whip?" "Leave yer honey be, wench. He'll join ye anon." "Ye're a tasty doxy to let slip, but no 'elp fer it." ; Array P_prso --> 50; Array Jamison_meets_you_ashore_convo_tbl --> "~I haven't found your father. We've long suspected a passage under the library, but I cannot find an entrance,~ says Jamison" "~If there is any trouble, and I am unable to help -- a signal from an upstairs seaward window will bring my men. They can be here in moments,~ the Captain says" "~I wish you would call me 'Nicholas' -- I feel I know you much better than our brief acquaintance would allow.~ He presses your hand" ; Array P_inbuf string 80; Array P_merge --> 50; Array P_ovtbl --> 4; Array Random_stuff_in_debris table 0 "A plank of wood " "Some bloodied flesh " "A bit of canvas sail " ; Array P_itbl --> 10; Array Jamison_contact_tbl table 0 "Jamison touches your hair softly" "Jamison grins down at you, a dazzling white smile" "The blue of the captain's eyes seems to deepen, looking at you" "His eyes twinkle, like moonlight on the sea" "Nicholas's hands are smooth and cool" ; Array Duel_tbl table 0 "Swords engage and disengage." "You hear metal scrape metal. A woman gasps." "Lafond's voice is cold, lazy, ~You will die, you know, Jamison.~" "You hear a piece of furniture being knocked over." "~You must ... pay ... for your actions!~ Nicholas gasps." "Rapiers click and slide. ~Bad parry, Captain,~ Lafond says." "You hear a duellist leap forward, and swords clash, parrying." ; Array Useless_table table 0 "What an odd thing to attempt." "That is a waste of time." "Don't dally around." "It's not worth it. Believe me." "That seems a useless idea." "Don't bother." ; Array Father_stuff_tbl table 0 "mutters something to himself. You hear an occasional ~Zounds!~" "follows you." "enters just a few steps behind you." ; Array Drug_table --> 0 "Your face convulses in a prodigious yawn." "You stare into space for a long, thoughtless moment. It seems very hard to think, you think, but you aren't sure." "Your eyes are extraordinarily dry. You blink to moisten them, and snort awake a minute later, drool dripping down your chin." "Sleep overtakes you and you slump into unconsiousness." ; Array Prepositions --> 26 'drunk' 230 'undress' 231 'dresser' 232 'go' 233 'against' 234 'across' 235 'overboard' 236 'away' 237 'behind' 238 'around' 239 'from' 240 'under' 241 'through' 242 'over' 243 'off' 244 'down' 245 'in' 246 'up' 247 'out' 248 'on' 249 'at' 250 'with' 251 'for' 252 'to' 253 'about' 254 'love' 255 ; Array Actions --> VerboseSub BriefSub SuperbriefSub InventorySub ILoveSub QuitGameSub RestartSub RestoreSub SaveSub ScriptSub UnscriptSub VersionSub DebugPredictableSub DebugCommSub DebugRecoSub DebugUnRecoSub VerifySub ApplaudSub ApproachSub AskAboutSub AskPersonSub AskForSub AttackSub BiteSub BlowSub BlowOutSub BoardSub BribeSub BurnSub CircleSub ClimbSub ClimbOnSub ClimbDownSub ClimbOutSub CrawlOverSub CrawlThruSub DuckUnderSub CloseSub CloseUpSub ComeWithSub CoverSub CrySub DanceSub DestroySub WrapSub DressSub DrinkSub DrinkFromSub DropSub InsertSub PlaceOnSub PutThroughSub EatSub EmptyInSub PourFromSub EnterSub ExamineSub ExitSub FeedSub GiveSub FeedWithSub FiddleSub FillSub FillWithSub FindSub FixSub GoSub WalkBehindSub LeaveSub LeapOverboardSub StopSub ListenSub HelloSub HelpSub RescueSub HugSub DiveToSub DiveOutSub KickSub KissSub BowSub KnockSub KnockOverSub LauchSub LaunchSub LieOnSub LightSub WrapSub LookSub LookDownSub LookUpSub LookInSub LookUnderSub LookBehindSub LookClarifySub RaiseSub MakeLoveSub MakeLoveSub MarrySub MoveSub MoveDirectionSub RaiseSub MuzzleSub NoSub OpenSub PickSub TakeSub TouchSub ShineSub PointSub DrySub WrapSub PourFromSub PushSub WrapSub RapeSub ReachInSub BrowseSub ReflectSub RemoveSub ReturnObjSub RipUpSub RowSub RowDirectionSub RowToSub ScoreSub SearchSub ShakeSub ShakeSub ShootSub ShootSub ShowSub ShowReverseSub MoanSub FreeSub SitDownSub SleepSub SliceSub SmellSub SoakSub RtandSub WrapSub WearSub WrapSub SwimSub SwingSub SwoonSub TakeFromSub TakeOffSub GetDressedSub GetUndressedSub GetDrunkSub TellSub TellAboutSub TellReverseSub ThankSub ThrowSub ThrowOverboardSub ThrowAtSub ThrowwToSub ThrowDirSub ThrowOverSub WrapSub TieWithSub TouchSub TurnSub DisrobeSub UnbarSub FreeSub FreeSub UseSub WaitSub WakeSub CleanSub WaveSub WaveAtSub WhatSub WhereSub WrapSub WrapInSub YellSub NodSub ZzmgckSub ; Array Preactions --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PreTouchSub PreBoardSub 0 PreTouchSub 0 0 0 0 0 0 0 0 PreTouchSub 0 0 0 0 0 0 0 0 0 0 PreThrowOverSub PreWrapSub PreWrapSub PreThrowOverSub 0 PreTouchSub 0 0 0 0 0 PreGiveSub 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PreTouchSub 0 0 PreTouchSub 0 0 0 PreTouchSub PreUnbarSub 0 0 0 0 0 0 0 PreTouchSub 0 0 0 PreTouchSub 0 PreTouchSub 0 0 PreTouchSub PreUnbarSub PreTakeSub PreTouchSub 0 0 PrePourSub PrePourSub 0 0 0 0 0 0 0 PreDisrobeSub 0 0 0 0 0 0 0 0 0 0 PreShootSub 0 0 0 0 0 0 0 0 0 0 0 PreWearSub 0 0 0 0 0 PreDisrobeSub 0 PreDisrobeSub 0 0 0 0 0 PreThrowOverSub PreThrowOverSub PreThrowOverSub PreThrowOverSub 0 PreThrowOverSub 0 0 PreTouchSub 0 PreDisrobeSub PreUnbarSub 0 0 0 0 0 0 0 0 0 0 PreWrapSub 0 0 0 0 ; [ ComplexPickOne tbl len offset ndx choice msg_tbl ; len = tbl-->0; offset = tbl-->1; --len; tbl = tbl + 2; msg_tbl = tbl + offset * 2; ndx = random(len - offset); choice = msg_tbl-->ndx; msg_tbl-->ndx = msg_tbl-->1; msg_tbl-->1 = choice; ++offset; if (offset == len) { offset = 0; } tbl-->0 = offset; return choice; ]; [ Article obj ; if (obj has proper || obj == breeches or rum or smelling_salts) { print ' '; } else if (obj has vowel_start) { print " an "; } else { print " a "; } print (name) obj; rtrue; ]; [ Cast_with_the obj ; if (obj has proper) { print ' '; } else { print " the "; } print (name) obj; rtrue; ]; [ Cast_with_capital_The obj ; print "The ", (name) obj; rtrue; ]; [ Cast_noun_with_the ; return Cast_with_the(noun); ]; [ Cast_second_with_the ; return Cast_with_the(second); ]; [ Cast_with_article_and_print_dots obj ; Article(obj); ! not popped print (string) Dot_newline_str; rtrue; ]; [ Cast_with_the_and_print_dots obj ; Cast_with_the(obj); ! not popped print (string) Dot_newline_str; rtrue; ]; [ Main ; .labelXXX; print ">SHOOT THE PIRATE^Trembling, you fire the heavy arquebus. You hear its loud report over the roaring wind, yet the dark figure still approaches. The gun falls from your nerveless hands.^ ~You won't kill me,~ he says, stepping over the weapon. ~Not when I am the only protection you have from Jean Lafond.~^ ", (string) Chestnut_hair_str, "Lips curving,", (string) Looks_you_over_str, ". You are intensely aware of the strength of his hard seaworn body, of the deep sea blue of his eyes. And then his mouth is on yours, lips parted, demanding, and you arch into his kiss...^ He presses you against him, head bent. ~But who, my dear,~ he whispers into your hair, ~will protect you from me?~^"; new_line; print (string) Press_return_str, "begin.]"; new_line; @sread P_inbuf P_lexv; @show_status; PrintNewlines(11); ! not popped location = Cabin; @show_status; VersionSub(); ! not popped new_line; print "LATE ONE SPRING NIGHT IN THE WEST INDIES...^^ A crash overhead! Pirates are boarding the Lafond Deux! The first mate hurries you into Captain Davis's cabin.^ ~Good, you brought the girl,~ Davis smirks. ~She'll keep the pirates busy. She was only a tool of Lafond's, anyway. Let me just find that cof--~ A man on deck screams in agony and Davis starts. ~Let's go.~ The captain thrusts you on the bed and walks out, locking the door.^ His laugh echoes. ~Best get comfortable, girl. You're likely to be there for the rest of your life.~"; new_line; new_line; LookSub(); ! not popped MainLoop(); ! not popped jump labelXXX; ]; [ PrintNewlines num=24 ; .labelXXX; new_line; --num; if (num) jump labelXXX; rtrue; ]; [ MainLoop res ; .labelXXX; res = CommandLoop(); jump labelXXX; ]; [ CommandLoop local1 local2 local3 local4 local5 local6 local7 local8=1[?] local9 local10 local11 local12 ; P_won = Parser(); if (P_won) { local1 = P_prsi->P_matchlen; local2 = P_prso->P_matchlen; if (P_it_objectobject && AccessibleP(P_it_objectobject)) { local10 = 0; .labelXXX; if (++local4 <= local1) { if (P_prsi->local4 ~= 63[it6?]) jump labelXXX; if (IsDarkP()) rtrue; P_prsi->local4 = P_it_objectobject; local10 = 1[?]; } if (~~local10) { local4 = 0; .labelXXX; if (++local4 <= local2) { if (P_prso->local4 ~= 63[it6?]) jump labelXXX; if (IsDarkP()) rtrue; P_prso->local4 = P_it_objectobject; } } local4 = 0; } local11 = P_syntax->0 & 3; if ((~~local2) || ((~~local1) && local11 == 2[?])) { local3 = 0; } else if (local2 > 1) { local6 = P_prso; if (~~local1) { local5 = 0; } else { local5 = P_prsi->1; } local3 = local2; } else if (local1 > 1) { local8 = 0; local6 = P_prsi; local5 = P_prso->1; local3 = local1; } else { local3 = 1[?]; } if ((~~local5) && local1 == 1[?]) { local5 = P_prsi->1; } if (action == ##Go) { local7 = ReversePerform(noun); } else if (~~local3) { if (~~P_syntax->0 & 3) { local7 = ReversePerform(); noun = nothing; } else { print "There isn't anything to "; local10 = P_itbl-->1; if (action == ##Tell) { print "talk to"; } else if (P_oflag || P_merged) { print (address) local10-->0; } else { local12 = local10->2; Word_Print(local12,local10->3); ! not popped } print '!'; new_line; local7 = 0; Clear_itbl(); ! not popped } } else { P_not_here = 0; P_mult = false; if (local3 > 1) { P_mult = true; } local10 = 0; .labelXXX; if (++local4 > local3) { if (P_not_here > 0) { print "[The "; if (P_not_here ~= local3) { 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 (~~local10) { DontSeeReferredtothing(); ! not popped } } else { if (local8) { local9 = P_prso->local4; } else { local9 = P_prsi->local4; } if (local8) { noun = local9; } else { noun = local5; } if (local8) { second = local5; } else { second = local9; } if (local3 > 1 || P_itbl-->6-->0 == 'all' or 'everything') { if (TakeableP(local9)) jump labelXXX; if (local9 == 63[it6?]) { print (name) P_it_objectobject; } else if (local9 == 122[him?]) { print (name) P_him_object; } else if (local9 == 41[her?]) { print (name) P_her_object; } else { print (name) local9; } print ": "; } local10 = 1[?]; local7 = ReversePerform(noun,second); if (local7 ~= 8[Crulley?]) jump labelXXX; } } if (local7 == 8[Crulley?]) { P_alt_cont = 0; } if (NonMetaVerbP() && (action ~= ##Tell && P_won)) { local7 = location.action((M_ENTER|invalidEnum4)); } } else { P_alt_cont = 0; } if (~~P_won) rfalse; if (NonMetaVerbP()) { local7 = Clocker(); } action = ##Verbose; noun = nothing; second = nothing; return second; ]; [ IsDarkP ; if (Lit || Ultimately_InP(P_it_objectobject,actor) || actor in P_it_objectobject) rfalse; print (string) Too_dark_str; new_line; rtrue; ]; [ TakeableP obj env ; env = parent(obj); if (obj == not_here_object) { ++P_not_here; rtrue; } if (action == ##Take && second && noun notin second || (~~AccessibleP(obj))) rtrue; if (P_getflags ~= 1) rfalse; if (second && noun == second) rtrue; if (action == ##Take) { if (obj hasnt takeable && obj hasnt trytakebit) rtrue; if (env ~= actor or location or second or parent(actor)) { if (env hasnt supporter || env has takeable) rtrue; rfalse; } if (obj == books or book) rtrue; if (second || (~~Ultimately_InP(noun))) rfalse; rtrue; } if (action == ##PlaceOn or ##Insert or ##Drop or ##FeedWith or ##Give && obj notin actor) rtrue; if (action ~= ##PlaceOn or ##Insert || noun in actor) rfalse; if (Ultimately_InP(noun,second)) rtrue; rfalse; ]; [ NonMetaVerbP ; if (action == ##DebugReco or ##Help or ##Version or ##DebugPredictable or ##DebugComm or ##DebugUnReco or ##Restart or ##Restore or ##Save or ##Unscript or ##Script or ##QuitGame or ##Verbose or ##Superbrief or ##Brief or ##Score) rfalse; rtrue; ]; [ Which_Print is_inanimate local2 local3 ; Orphan(P_syntax,0); ! not popped local2 = P_otbl-->1; print "[Be specific: Wh"; if (is_inanimate) { print "at object"; } else { print 'o'; } print " do you want to "; if (~~local2) { print "tell"; } else if (~~P_vtbl->2) { print (address) local2-->0; } else { local3 = local2->2; Word_Print(local3,local2->3); ! not popped P_vtbl->2 = 0; } P_oflag = true; P_won = false; Prep_Print(P_syntax->1); ! not popped "?]"; ]; [ ReversePerform dir_obj ind_obj ; Perform(action,dir_obj,ind_obj); ! not popped rtrue; ]; [ Perform v obj ind_obj local4 local5 local6 local7 ; local5 = action; local6 = noun; local7 = second; action = v; if (it6 == obj or ind_obj && v ~= ##Go) { if (~~VisibleP(P_it_objectobject)) jump labelXXX; if (it6 == obj) { obj = P_it_objectobject; } else { ind_obj = P_it_objectobject; } } if (him == obj or ind_obj && v ~= ##Go) { if (~~VisibleP(P_him_object)) jump labelXXX; if (him == obj) { obj = P_him_object; jump labelXXX; .labelXXX; if (~~ind_obj) { Which_Print(true); ! not popped return 8[Crulley?]; } DontSeeReferredtothing(); ! not popped return 8[Crulley?]; } ind_obj = P_him_object; } .labelXXX; if (her == obj or ind_obj && v ~= ##Go) { if (~~VisibleP(P_her_object)) jump labelXXX; if (her == obj) { obj = P_her_object; jump labelXXX; .labelXXX; if (~~ind_obj) { Which_Print(); ! not popped return 8[Crulley?]; } DontSeeReferredtothing(1[?]); ! not popped return 8[Crulley?]; } ind_obj = P_her_object; } .labelXXX; noun = obj; second = ind_obj; if (v ~= ##Go && not_here_object == noun or second) { local4 = DebugFunc("Not Here",Not_here_object_action); if (local4) { P_won = false; jump labelXXX; .labelXXX; if (~~ind_obj) { Which_Print(); ! not popped return 8[Crulley?]; } DontSeeReferredtothing(1[?]); ! not popped return 8[Crulley?]; } } obj = noun; ind_obj = second; SetPronoun(second); ! not popped SetPronoun(noun); ! not popped local4 = DebugFunc("Actor",actor.action); if (~~local4) { local4 = DebugFunc("M-Beg",parent(actor).action,M_HANDLED); if (~~local4) { local4 = DebugFunc("Preaction",Preactions-->v); if (~~local4) { if (ind_obj) { local4 = DebugFunc("PRSI",ind_obj.action); if (local4) jump labelXXX; } if (obj && v ~= ##Go) { local4 = DebugFunc("PRSO",obj.action); if (local4) jump labelXXX; } local4 = DebugFunc(0,Actions-->v); if (~~local4) { ! no code } } } } .labelXXX; action = local5; noun = local6; second = local7; return local4; ]; [ DebugFunc msg_UNUSED rtn rarg result ; if (~~rtn) rfalse; if (rarg) { result = rtn(rarg); return result; } result = rtn(); return result; ]; [ Unqueue rtn ; rtn = FindDaemon_or_Timer(rtn); if (~~rtn) rfalse; rtn-->0 = 0; rtrue; ]; [ FindDaemon_or_Timer rtn cnt end ; end = C_table + 60; cnt = C_table + C_ints; .labelXXX; if (cnt == end) rfalse; if (cnt-->0 == rtn) { if (~~cnt-->1) rfalse; return cnt; } cnt = cnt + 4; jump labelXXX; ]; [ FindDaemon rtn ptr ; ptr = FindDaemon_or_Timer(rtn); if (~~ptr) rfalse; if (ptr-->1 <= 1) rtrue; rfalse; ]; [ QueueInterrupt rtn ticks cnt end ptr ; end = C_table + 60; cnt = C_table + C_ints; .labelXXX; if (cnt == end) { if (ptr) { cnt = ptr; } else { if (C_ints < 4) { print "**Too many ints!**"; new_line; } C_ints = C_ints - 4; if (C_ints < C_last_int) { C_last_int = C_ints; } ptr = C_table + C_ints; } ptr-->0 = rtn; } else { if (cnt-->0 ~= rtn) jump labelXXX; ptr = cnt; } if (C_last_interrupt && ptr > C_last_interrupt) { ticks = 0 - (ticks + 3); } ptr-->1 = ticks; return ptr; .labelXXX; if (~~cnt-->0) { ptr = cnt; } cnt = cnt + 4; jump labelXXX; ]; [ Clocker end tick rtn executed_p break_loop player_tmp ; if (Clock_wait) { Clock_wait = false; rfalse; } C_last_interrupt = C_table + C_ints; end = C_table + 60; player_tmp = actor; actor = player; .labelXXX; if (C_last_interrupt == end) { C_last_interrupt = end; ++turns; actor = player_tmp; return executed_p; } if (C_last_interrupt-->0) { tick = C_last_interrupt-->1; if (tick < 65535) { C_last_interrupt-->1 = 0 - tick - 3; break_loop = C_last_interrupt; } else if (tick) { if (tick > 0) { --tick; C_last_interrupt-->1 = tick; } if (tick) { break_loop = C_last_interrupt; } if (tick <= 0) { rtn = C_last_interrupt-->0; if (~~tick) { C_last_interrupt-->0 = 0; } if (rtn()) { executed_p = true; } if ((~~break_loop) && C_last_interrupt-->0) { break_loop = true; } } } } C_last_interrupt = C_last_interrupt + 4; if (break_loop) jump labelXXX; C_ints = C_ints + 4; jump labelXXX; ]; [ SetPronoun obj ; if ((~~obj) || (action == ##Go && noun == obj) || obj == player or not_here_object or yourself or room) rtrue; if (obj has female) { P_her_object = obj; return P_her_object; } if (obj has animate) { P_him_object = obj; return P_him_object; } P_it_objectobject = obj; return P_it_objectobject; ]; [ OopsError what ; "[Warning: there are too many ", (string) what, " after OOPS.]"; ]; [ Parser local1=1[?] local2 local3 local4 local5 local6 local7 local8 dont temp local11 local12=65535[?] local13 local14 ; .labelXXX; if (++local12 <= 9) { if (~~P_oflag) { P_otbl-->local12 = P_itbl-->local12; } P_itbl-->local12 = 0; jump labelXXX; } local5 = P_merged; local6 = actor; P_adverb = 0; P_merged = false; P_end_on_prep = false; P_prso->P_matchlen = 0; P_prsi->P_matchlen = 0; P_buts->P_matchlen = 0; if ((~~P_quote_flag) && actor ~= player) { actor = player; if (parent(actor) hasnt vehicle) { location = parent(actor); } Lit = LitP(location); } if (P_cont) { local1 = P_cont; ParserUnknown1(P_lexv,global89); ! not popped ParserOops1(P_inbuf,global72); ! not popped if (Verbosity && player == actor) { new_line; } P_cont = 0; P_alt_cont = 0; } else if (P_alt_cont) { local1 = P_alt_cont; if (Verbosity && player == actor) { new_line; } P_alt_cont = 0; } else { actor = player; P_quote_flag = false; if (parent(actor) hasnt vehicle) { location = parent(actor); } Lit = LitP(location); if (Verbosity) { new_line; } print '>'; @sread P_inbuf P_lexv; local7 = P_lexv->1; } P_len = P_lexv->1; if (~~P_len) { print "[Prithee, pardon?]"; new_line; rfalse; } if (P_lexv-->local1 == 'oops') { if (P_lexv-->(local1 + 2) == './/' or ',//') { local1 = local1 + 2; --P_len; } if (P_len <= 1) { YouCantUseItThatway("OOPS"); ! not popped rfalse; } local3 = Oops_buffer-->0; if (local3) { local8 = 2 * global63->0; local12 = P_len - 2; if (local8 < local3 + 2 * local12) { local12 = (local8 - local3) / 2; OopsError("words"); ! not popped } if (local12) { local8 = global63->1; global63->1 = local8 + local12; local12 = 2 * local12; local8 = 2 * local8; .labelXXX; local14 = local12 + local8; global63-->local14 = global63-->local8; if (--local8 >= local3) jump labelXXX; } local12 = P_len; .labelXXX; if (--local12 >= 1) { local1 = local1 + 2; global63-->local3 = P_lexv-->local1; local2 = local1 * 2 + 2; local13 = P_lexv->local2; local14 = P_lexv->(local2 + 1); if (ParserOops2(local13,local14,local3 * 2 + 3)) jump labelXXX; OopsError("letters"); ! not popped } actor = local6; ParserUnknown1(P_lexv,global63); ! not popped P_len = P_lexv->1; local1 = Oops_buffer-->1; ParserOops1(P_inbuf,global180); ! not popped jump labelXXX; .labelXXX; local3 = local3 + 2; jump labelXXX; } Oops_buffer-->3 = 0; print "[There was no word to replace!]"; new_line; rfalse; } Oops_buffer-->3 = 0; .labelXXX; if (P_lexv-->local1 == 'again' or 'g//') { if (P_oflag) { YouCantUseItThatway("AGAIN"); ! not popped rfalse; } if (~~P_won) { print "[That would just repeat a mistake!]"; new_line; rfalse; } if (local6 ~= 192[player?] && (~~VisibleP(local6))) { print '[', (string) You_cant_str, "see ", (name) local6, " any more.]"; new_line; rfalse; } if (P_len > 1) { if (P_lexv-->(local1 + 2) == './/' or ',//' or 'then' || P_lexv-->(local1 + 2) == 'and') { local1 = local1 + 4; P_lexv->1 = P_lexv->1 - 2; jump labelXXX; } DontRecognizeSentence(); ! not popped rfalse; } local1 = local1 + 2; P_lexv->1 = P_lexv->1 - 1; .labelXXX; if (P_lexv->1 > 0) { ParserUnknown1(global89,P_lexv); ! not popped ParserOops1(global72,P_inbuf); ! not popped P_cont = local1; } else { P_cont = 0; } actor = local6; P_merged = local5; ParserOops1(P_inbuf,global180); ! not popped ParserUnknown1(P_lexv,global63); ! not popped local12 = 65535[?]; dont = P_dont_flag; .labelXXX; if (++local12 > 9) jump labelXXX; P_itbl-->local12 = P_otbl-->local12; jump labelXXX; } ParserUnknown1(global63,P_lexv); ! not popped ParserOops1(global180,P_inbuf); ! not popped Oops_buffer-->1 = local1; Oops_buffer-->2 = 4 * P_len; local8 = 2 * (local1 + 2 * P_lexv->1); local14 = P_lexv->(local8 - 1); Oops_buffer-->3 = local14 + P_lexv->(local8 - 2); P_cont = 0; local8 = P_len; P_ncn = 0; P_getflags = 0; .labelXXX; if (--P_len < 0) { P_quote_flag = false; } else { local2 = P_lexv-->local1; if (~~local2) { local2 = ParseNumber(local1); if (~~local2) jump labelXXX; } temp = PreParseNumberMaybe(local1); if (local2 == 19240['to'?] && local4 == 201[bookcase?] or 113[Clearing?] && Wt(temp,PS_VERB,P1_VERB)) { P_itbl-->0 = #v$tell; local2 = 14305['"//'?]; } else if (local2 == 19191['then'?] && P_len > 0 && (~~local4) && (~~P_quote_flag)) { P_itbl-->0 = #v$tell; P_itbl-->1 = 0; local2 = 14305['"//'?]; } else if (local2 == 14263['.//'?] && local11 == 18890['st'?]) { --P_ncn; ParserUnknown2(local1,local11,1[?]); ! not popped local2 = local11; local11 = 0; } if (local2 == 19191['then'?] or 14263['.//'?] or 14305['"//'?]) { if (local2 == 14305['"//'?]) { if (P_quote_flag) { P_quote_flag = false; } else { P_quote_flag = true; } } if (P_len) { P_alt_cont = local1 + 2; } P_lexv->1 = P_len; } else { local3 = Wt(local2,PS_DIRECTION,P1_DIRECTION); if (local3 && local4 == 0 or 249[?] or 129[trapdoor?] && (local8 == 1[?] || (local8 == 2[?] && local4 == 249[?] or 129[trapdoor?]) || (temp == 19191['then'?] or 14263['.//'?] or 14305['"//'?] && local8 >= 2) || (P_quote_flag && local8 == 2[?] && temp == 14305['"//'?]) || (local8 > 2 && temp == 14270[',//'?] or 14424['and'?]))) { dont = local3; if (temp == 14270[',//'?] or 14424['and'?]) { ParserUnknown2(local1 + 2,'then'); ! not popped } if (local8 > 2) jump labelXXX; P_quote_flag = false; } else { local3 = Wt(local2,PS_VERB,P1_VERB); if (local3 && (~~local4)) { P_initial_word = local2; local4 = local3; P_itbl-->0 = local3; P_itbl-->1 = P_vtbl; P_vtbl-->0 = local2; local12 = local1 * 2 + 2; P_vtbl->2 = P_lexv->local12; P_vtbl->3 = P_lexv->(local12 + 1); jump labelXXX; } local3 = Wt(local2,PS_PREPOSITION,P1_OBJECT); if ((~~local3) && local2 ~= 14375['all'?] or 17434['one'?] or 14732['both'?] && local2 ~= 15649['everything'?] && (~~Wt(local2,PS_ADJECTIVE)) && (~~Wt(local2,PS_OBJECT))) jump labelXXX; if (P_len > 0 && temp == 17392['of'?] && (~~local3) && local2 ~= 14375['all'?] or 17434['one'?] or 14312['a//'?] && local2 ~= 14732['both'?] or 15649['everything'?]) jump labelXXX; if (local3 && ((~~P_len) || temp == 19191['then'?] or 14263['.//'?])) { P_end_on_prep = true; if (P_ncn >= 2) jump labelXXX; P_itbl-->2 = local3; P_itbl-->3 = local2; jump labelXXX; } if (P_ncn == 2) { print "[There were too many nouns in that sentence.]"; new_line; rfalse; } ++P_ncn; local1 = Clause(local1,local3,local2); if (~~local1) rfalse; if (local1 >= 0) jump labelXXX; P_quote_flag = false; } } } .labelXXX; Oops_buffer-->0 = 0; if (dont) { action = ##Go; P_initial_word = 0; noun = dont; P_oflag = false; P_walk_dir = dont; P_dont_flag = dont; rtrue; .labelXXX; if (~~Wt(local2,PS_BUZZ_WORD)) { if (local4 == 201[bookcase?] && Wt(local2,PS_VERB,P1_VERB) && actor == player) { ReferToManualTo("talk to characters."); ! not popped rfalse; } Cant_Use(local1); ! not popped rfalse; .labelXXX; Unknown_Word(local1); ! not popped rfalse; } .labelXXX; local11 = local2; local1 = local1 + 2; jump labelXXX; } P_walk_dir = 0; P_dont_flag = false; if (P_oflag) { Orphan_Merge(); ! not popped } if ((~~Syntax_Check()) || (~~Snarf_Objects()) || (~~Many_Check())) rfalse; if (Take_Check()) rtrue; rfalse; ]; [ ParserUnknown2 local1 w local3 local4 local5 local6 ; if (local3) { local4 = 2 + 2 * (local1 - 2); local5 = P_lexv->local4; local6 = 2 + 2 * local1; P_lexv->local6 = local5; global63->local6 = local5; local5 = P_lexv->(1 + local4); local6 = 3 + 2 * local1; P_lexv->local6 = local5; global63->local6 = local5; } P_lexv-->local1 = w; global63-->local1 = w; rtrue; ]; [ ParserUnknown1 local1 local2 local3=29 local4=1 local5=1[?] local6 ; local1->0 = local2->0; local1->1 = local2->1; .labelXXX; local1-->local4 = local2-->local4; local6 = local4 * 2 + 2; local1->local6 = local2->local6; local6 = local4 * 2 + 3; local1->local6 = local2->local6; local4 = local4 + 2; if (++local5 <= local3) jump labelXXX; rtrue; ]; [ ParserOops1 local1 local2 local3=65535[?] ; .labelXXX; if (++local3 > 80) rtrue; local1->local3 = local2->local3; jump labelXXX; ]; [ ParserOops2 local1 local2 local3 local4 local5 local6 local7 ; local6 = Oops_buffer-->3; if (local6) { local4 = local6; } else { local6 = Oops_buffer-->2; local7 = global63->local6; local4 = local7 + global63->(local6 + 1); } Oops_buffer-->3 = local4 + local1; .labelXXX; local7 = local4 + local5; global180->local7 = P_inbuf->(local2 + local5); ++local5; if (local5 ~= local1) jump labelXXX; global63->local3 = local4; global63->(local3 - 1) = local1; rtrue; ]; [ Wt ptr bit category=5 offset=P_P1OFF type ; type = ptr->4; if (type & bit ~= bit) rfalse; if (category > 4 || bit == PS_OBJECT) rtrue; type = type & 3; if (type ~= category) { ++offset; } return ptr->offset; ]; [ PreParseNumberMaybe local1 local2 ; if (~~P_len) rfalse; local2 = P_lexv-->(local1 + 2); if (local2) { return local2; } return ParseNumber(local1 + 2); ]; [ Clause local1 local2 wrd local4 local5 local6 local7=1[?] local8 local9 local10 ; local4 = (P_ncn - 1) * 2; if (local2) { local5 = 2 + local4; P_itbl-->local5 = local2; P_itbl-->(local5 + 1) = wrd; local1 = local1 + 2; } else { ++P_len; } if (~~P_len) { --P_ncn; return 65535[?]; } local5 = 6 + local4; P_itbl-->local5 = P_lexv + local1 * 2; .labelXXX; if (--P_len < 0) { local10 = local5 + 1; P_itbl-->local10 = P_lexv + local1 * 2; return 65535[?]; } wrd = P_lexv-->local1; if (~~wrd) { wrd = ParseNumber(local1); if (~~wrd) jump labelXXX; } local8 = PreParseNumberMaybe(local1); if (local7 && (wrd == 'the' or 'a//' or 'an' || (local2 && Wt(wrd,PS_PREPOSITION) && (~~Wt(wrd,PS_ADJECTIVE))))) { P_itbl-->local5 = P_itbl-->local5 + 4; } else if (wrd == './/' && local9 == 18890['st'?]) { local9 = 0; } else if (wrd == 'and' or ',//') { local6 = 1[?]; } else if (wrd == 'all' or 'one' or 'both' or 'everything') { if (local8 == 17392['of'?]) { --P_len; local1 = local1 + 2; } } else { if (wrd == 'then' or './/' || (Wt(wrd,PS_PREPOSITION) && P_itbl-->0 && (~~local7))) { ++P_len; local10 = local5 + 1; P_itbl-->local10 = P_lexv + local1 * 2; return local1 - 2; } if (local6 && (~~P_itbl-->0)) { local1 = local1 - 4; ParserUnknown2(local1 + 2,'then'); ! not popped P_len = P_len + 2; } else if (Wt(wrd,PS_OBJECT)) { if (P_len <= 0 || local8 ~= 17392['of'?] || wrd == 'all' or 'everything' or 'one' && ((~~Wt(wrd,PS_ADJECTIVE)) || (~~local8) || ((~~Wt(local8,PS_OBJECT)) && (~~Wt(local8,PS_ADJECTIVE))))) { if ((~~local6) && local8 ~= 14851['but'?] or 15663['except'?] && local8 ~= 14424['and'?] or 14270[',//'?]) { local10 = local5 + 1; P_itbl-->local10 = P_lexv + (local1 + 2) * 2; return local1; } local6 = 0; } } else if ((~~Wt(wrd,PS_ADJECTIVE)) && (~~Wt(wrd,PS_BUZZ_WORD)) && (~~Wt(wrd,PS_PREPOSITION))) { Cant_Use(local1); ! not popped rfalse; .labelXXX; Unknown_Word(local1); ! not popped rfalse; } } local9 = wrd; local7 = 0; local1 = local1 + 2; jump labelXXX; ]; [ ParseNumber ptr len nptr local4 num local6 local7 local8 local9 ; len = (P_lexv + ptr * 2)->2; nptr = (P_lexv + ptr * 2)->3; .labelXXX; if (num > 10000) rfalse; if (--len >= 0) { local4 = P_inbuf->nptr; if (local4 < 58 && local4 > 47) { local9 = num * 10; num = local9 + (local4 - 48); } else { if (local4 ~= 35[patrol?]) rfalse; } ++nptr; jump labelXXX; } ParserUnknown2(ptr,'number'); ! not popped if (P_lexv-->(ptr + 2) == ',//' && P_len > 1) { local8 = ptr + 4; local7 = ParseNumberWithCommas(local8); if (local7) { local6 = P_lexv->(ptr * 2 + 2); local6 = local6 + P_lexv->(local8 * 2 + 2); ++local6; P_lexv->(ptr * 2 + 2) = local6; if (local7 == 1000[?]) { local7 = 0; } num = 1000 * num + local7; local6 = P_len - 2; .labelXXX; if (--local6 >= 0) { ptr = ptr + 2; local8 = ptr + 4; ParserUnknown2(ptr,P_lexv-->local8); ! not popped local9 = ptr * 2 + 2; P_lexv->local9 = P_lexv->(local8 * 2 + 2); local9 = ptr * 2 + 3; P_lexv->local9 = P_lexv->(local8 * 2 + 3); jump labelXXX; } P_len = P_len - 2; P_lexv->1 = P_lexv->1 - 2; } } if (num > 10000) rfalse; P_number = num; return 'number'; ]; [ ParseNumberWithCommas local1 local2 local3 local4 local5 local6 local7 ; local2 = (P_lexv + local1 * 2)->2; local3 = (P_lexv + local1 * 2)->3; .labelXXX; if (--local2 >= 0) { local5 = P_inbuf->local3; if (++local4 <= 3) { if (local5 >= 58 || local5 <= 47) rfalse; local7 = local6 * 10; local6 = local7 + (local5 - 48); ++local3; jump labelXXX; } } if (local4 ~= 3[air?]) rfalse; if (local6) { return local6; } return 1000; ]; [ Orphan_Merge cnt=65535 local2 local3 local4 local5 local6 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)) { local6 = 1[?]; } 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; } local3 = P_itbl-->0; if (local3 && (~~local6) && local3 ~= P_otbl-->0 || P_ncn == 2) rfalse; if (P_otbl-->6 == true) { local2 = P_itbl-->2; if (local2 ~= P_otbl-->2 && local2) rfalse; if (local6) { 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 == true) { local2 = P_itbl-->2; if (local2 ~= P_otbl-->4 && local2) rfalse; if (local6) { 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 && (~~local6)) { P_aclause = P_VERB; rfalse; } local4 = P_itbl-->6; if (local6) { local4 = P_lexv + 2; local6 = 0; } local5 = P_itbl-->7; .labelXXX; word = local4-->0; if (local4 == local5) { if (local6) { AClause_Win(local6); ! not popped jump labelXXX; } P_aclause = P_VERB; rfalse; } if (word == 'all' or 'everything' or 'one' || (word->4 & 32 == 32 && NOTOnArg2(word,local6,local6))) { local6 = word; .labelXXX; local4 = local4 + 4; if (local5) jump labelXXX; local5 = local4; P_ncn = 1; P_itbl-->6 = local4 - 4; P_itbl-->7 = local4; jump labelXXX; } if (word == 'one') { AClause_Win(local6); ! not popped } else { if (word->4 & 128 ~= 128) jump labelXXX; if (word == P_anam) { AClause_Win(local6); ! not popped } else { AClause_Win(); ! not popped } } } .labelXXX; P_vtbl-->0 = P_ovtbl-->0; P_vtbl->2 = P_ovtbl->2; P_vtbl->3 = P_ovtbl->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; ]; [ AClause_Win otbl ; if (otbl) { P_itbl-->0 = P_otbl-->0; } else { otbl = 'invalidDictWord1'; } P_cctbl-->0 = P_aclause; P_cctbl-->1 = P_aclause + 1; if (P_aclause == P_NC1) { P_cctbl-->2 = global203; } else { P_cctbl-->2 = global177; } Clause_Copy(P_otbl,P_otbl,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 wrd ; Oops_buffer-->0 = ptr; print "[I don't know the word ~"; buf = ptr * 2; wrd = (P_lexv + buf)->2; Word_Print(wrd,(P_lexv + buf)->3); ! not popped print ".~]"; new_line; P_quote_flag = false; P_oflag = false; return P_oflag; ]; [ Cant_Use local1 local2 local3 local4 ; print "[You used the word ~"; if (~~local2) { local3 = local1 * 2; local4 = (P_lexv + local3)->2; Word_Print(local4,(P_lexv + local3)->3); ! not popped } print "~ in a way that I don't understand.]"; new_line; return Clear_itbl(); ]; [ Syntax_Check syn len num obj drive1 drive2 prep vrb local9 local10 ; vrb = P_itbl-->0; if (~~vrb) { print (string) No_verb_str; rfalse; } syn = Verbs-->(255 - vrb); len = syn->0; ++syn; .labelXXX; num = syn->0 & 3; if (P_ncn <= num) { if (num >= 1 && (~~P_ncn)) { prep = P_itbl-->2; if ((~~prep) || prep == syn->1) { drive1 = syn; jump labelXXX; } } local10 = syn->1; if (local10 == P_itbl-->2) { if (num ~= 2 || P_ncn ~= 1) jump labelXXX; drive2 = syn; } } .labelXXX; if (--len < 1) { if (drive1 || drive2) jump labelXXX; DontRecognizeSentence(); ! not popped rfalse; .labelXXX; local10 = syn->2; if (local10 ~= P_itbl-->4) jump labelXXX; Syntax_Found(syn); ! not popped rtrue; } syn = syn + 8; jump labelXXX; .labelXXX; if (drive1) { local9 = drive1->3; local10 = drive1->5; obj = GWim(local9,local10,drive1->1); if (obj) { P_prso->P_matchlen = 1[?]; P_prso->1 = obj; return Syntax_Found(drive1); } } if (drive2) { local9 = drive2->4; local10 = drive2->6; obj = GWim(local9,local10,drive2->2); if (obj) { P_prsi->P_matchlen = 1[?]; P_prsi->1 = obj; return Syntax_Found(drive2); } } if (actor == player) { Orphan(drive1,drive2); ! not popped print "[Wh"; } else { print "[Your command was not complete. Next time, type wh"; } if (vrb == ##Action249 or ##Shoot) { print "ere"; } else if (drive1 && drive1->3 == 31[Room_Holder?] || (drive2 && drive2->4 == 31[Room_Holder?])) { print "om"; } else { print "at"; } if (actor == player) { print " do you want to "; } else { print " you want"; Cast_with_the(actor); ! not popped print " to "; } ParserUnknown3(); ! not popped P_oflag = false; if (drive2) { prep = P_merged; P_merged = false; Clause_Print(P_NC1,P_NC1L); ! not popped P_merged = prep; } Prep_Print((drive1 ? (drive1->1) : (drive2->2))); ! not popped if (actor == player) { P_oflag = true; print "?]"; new_line; rfalse; } P_oflag = false; print ".]"; new_line; rfalse; ]; [ ParserUnknown3 w local2 ; w = P_itbl-->1; if (~~w) { print "tell"; rtrue; } if (w == 'zzmgck') { print "answer"; rtrue; } if (~~w->2) { print (address) w-->0; rtrue; } local2 = w->2; Word_Print(local2,w->3); ! not popped w->2 = 0; rtrue; ]; [ Cant_Orphan ; print "~I don't understand! What are you referring to?~"; new_line; rfalse; ]; [ Orphan d1 d2 cnt=65535 ; if (~~P_merged) { global203-->P_matchlen = 0; global177-->P_matchlen = 0; } P_ovtbl-->0 = P_vtbl-->0; P_ovtbl->2 = P_vtbl->2; P_ovtbl->3 = P_vtbl->3; .labelXXX; if (++cnt <= 9) { 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 = global177; 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 = global203; Clause_Copy(P_itbl,P_otbl); ! not popped } if (d1) { P_otbl-->2 = d1->1; P_otbl-->6 = true; rtrue; } if (~~d2) rfalse; P_otbl-->4 = d2->2; P_otbl-->8 = true; rtrue; ]; [ Clause_Print beg_ptr end_ptr the_p=true beginning ; beginning = P_itbl-->beg_ptr; return Buffer_Print(beginning,P_itbl-->end_ptr,the_p); ]; [ Buffer_Print beg end cp nosp wrd first=true not_prefixed pn ; .labelXXX; if (beg == end) rtrue; if (nosp) { nosp = false; } else { print ' '; } wrd = beg-->0; if (wrd == 14263['.//'?] || (first && wrd == 17392['of'?])) { nosp = true; } else if (wrd == 17035['me'?] or 17210['myself'?]) { print (name) yourself; not_prefixed = 1[?]; } else if (QueryActorName(wrd)) { Capitalize(beg); ! not popped not_prefixed = 1[?]; } else { if (first && (~~not_prefixed) && cp && wrd ~= 17203['my'?] or 16272['her'?]) { print "the "; } if (P_oflag || P_merged) { print (address) wrd; } else if (wrd == 16510['it'?] or 19184['them'?] && AccessibleP(P_it_objectobject)) { print (name) P_it_objectobject; } else if (wrd == 16314['him'?] or 16321['himself'?] && AccessibleP(P_him_object)) { print (name) P_him_object; } else if (wrd == 16272['her'?] or 16293['herself'?] && AccessibleP(P_her_object)) { print (name) P_her_object; } else { pn = beg->2; Word_Print(pn,beg->3); ! not popped } first = false; } beg = beg + 4; jump labelXXX; ]; [ QueryActorName a_name ; if (a_name == 'dad' or 'papa' or 'father' or 'dimsford' or 'crulley' or 'lucy' or 'lafond' or 'governor' or 'jamison' or 'cookie' or 'quick' or 'rodney' or 'louise' or 'davis' or 'sinister' or 'latin' or 'nick' or 'nicholas' or 'falcon' or 'helena' or 'jean' or 'andy' or 'andrew' or 'st' or 'ernest' or 'ryall' or 'rodney') rtrue; rfalse; ]; [ Adj_Check local1 ; if (local1 == 178[On_the_Ladder?] or 179[Trade_Entrance?] or 177[Lucy?] or 217[door?] or 110[dancer?] or 116[unmentionables?] or 117[room?] or 176[Lafonds_Bedroom?] or 112[Foyer?] or 111[fence?] or 115[large_key?]) rtrue; rfalse; ]; [ Capitalize ptr word ; if (P_oflag || P_merged) { print (address) ptr-->0; rtrue; } print (char) P_inbuf->(ptr->3) - 32; word = ptr->2 - 1; return Word_Print(word,ptr->3 + 1); ]; [ Prep_Print ndx prep ; if (~~ndx) rfalse; print ' '; if (ndx == 242) { print "through"; rtrue; } prep = Prep_Find(ndx); print (address) prep; rtrue; ]; [ Clause_Copy local1 local2 local3 local4 local5 local6 local7 local8 local9 local10 local11 local12 ; local7 = P_cctbl-->0; local8 = P_cctbl-->1; local4 = P_cctbl-->2; local5 = local1-->local7; local6 = local1-->local8; local9 = local4-->P_matchlen; .labelXXX; if (local5 ~= local6) { if (local3 && P_anam == local5-->0) { if (local3 == 1[?]) { local11 = P_itbl-->6; local12 = P_itbl-->7; .labelXXX; if (local11 == local12) jump labelXXX; Clause_Add(local11-->0); ! not popped local11 = local11 + 4; jump labelXXX; } if (local3 ~= local4-->1) { Clause_Add(local3); ! not popped Clause_Add(local5-->0); ! not popped } } else { Clause_Add(local5-->0); ! not popped } .labelXXX; local5 = local5 + 4; jump labelXXX; } if (local1 == local2 && local9 > 0) { local10 = local4-->P_matchlen - local9; local4-->P_matchlen = 0; ++local9; .labelXXX; Clause_Add(local4-->local9); ! not popped local10 = local10 - 2; if (local10) { local9 = local9 + 2; jump labelXXX; } local9 = 0; } local2-->local7 = local4 + (local9 * 2 + 2); local2-->local8 = local4 + (local4-->P_matchlen * 2 + 2); rtrue; ]; [ Clause_Add word oclause len ; oclause = P_cctbl-->2; len = oclause-->P_matchlen + 2; oclause-->(len - 1) = word; oclause-->len = 0; 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 == climbable) { return Room_Holder; } P_gwimbit = gbit; P_slocbits = lbit; P_merge->P_matchlen = 0; if (Get_Object(P_merge,0)) { P_gwimbit = attrib0; if (P_merge->P_matchlen ~= 1[?]) rfalse; obj = P_merge->1; print '['; if (prep && (~~P_end_on_prep)) { prep = Prep_Find(prep); print (address) prep; if (prep == 'out') { print " of"; } if (obj hasnt proper) { print " the "; } else { print ' '; } } print (name) obj, ']'; new_line; return obj; } P_gwimbit = attrib0; rfalse; ]; [ Snarf_Objects ptr ; ptr = P_itbl-->6; if (ptr) { P_all_flag = 0; P_slocbits = P_syntax->5; if (~~Snarfem(ptr,P_itbl-->7,P_prso)) rfalse; if (P_buts->P_matchlen) { P_prso = But_Merge(P_prso); } } ptr = P_itbl-->8; if (~~ptr) rtrue; P_all_flag = 1; P_slocbits = P_syntax->6; if (~~Snarfem(ptr,P_itbl-->9,P_prsi)) rfalse; if (~~P_buts->P_matchlen) rtrue; if (P_prsi->P_matchlen == 1[?]) { P_prso = But_Merge(P_prso); rtrue; } P_prsi = But_Merge(P_prsi); rtrue; ]; [ But_Merge tbl len butlen cnt=1 matches obj ntbl ; len = tbl->P_matchlen; P_merge->P_matchlen = 0; .labelXXX; if (--len >= 0) { obj = tbl->cnt; if (~~ZMemQB(obj,P_buts)) { ++matches; P_merge->matches = obj; } ++cnt; jump labelXXX; } P_merge->P_matchlen = matches; ntbl = P_merge; P_merge = tbl; return ntbl; ]; [ Snarfem ptr eptr tbl local4 local5 local6 word nw was_all ; P_and = false; if (P_getflags == 1) { was_all = true; } P_getflags = 0; P_buts->P_matchlen = 0; tbl->P_matchlen = 0; word = ptr-->0; .labelXXX; if (ptr == eptr) { local6 = Get_Object((local4 ? local4 : tbl)); if (~~was_all) { return local6; } P_getflags = 1; return local6; } if (eptr == ptr + 4) { nw = 0; } else { nw = ptr-->2; } if (word == 'all' or 'both' or 'everything') { if (~~Many_Check(P_all_flag)) rfalse; P_getflags = 1; if (nw == 'of') { ptr = ptr + 4; } } else if (word == 'but' or 'except') { if (~~Get_Object((local4 ? local4 : tbl))) rfalse; local4 = P_buts; local4->P_matchlen = 0; } else { if (word == 'a//' or 'one') { if (~~P_adj) { P_getflags = 2; if (nw ~= 'of') jump labelXXX; ptr = ptr + 4; jump labelXXX; } P_name = P_oneobj; if (~~Get_Object((local4 ? local4 : tbl))) rfalse; if (nw) jump labelXXX; rtrue; } if (word == 'and' or ',//' && nw ~= 'and' or ',//') { P_and = true; if (Get_Object((local4 ? local4 : tbl))) jump labelXXX; rfalse; } if ((~~Wt(word,PS_BUZZ_WORD)) && word ~= 'and' or ',//') { if (word == 'of') { if (~~P_getflags) { P_getflags = 4; } } else { local6 = Wt(word,PS_ADJECTIVE,P1_ADJECTIVE); if (local6 && NOTOnArg2(word,P_adj,P_adjn) && nw ~= 'of') { P_adj = local6; 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; ]; [ NOTOnArg2 UNUSED1 arg2 UNUSED2 ; if (arg2) rfalse; rtrue; ]; [ Get_Object tbl local2=1[?] local3 local4 local5 local6 local7 local8 local9 ; local5 = P_slocbits; local6 = 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; P_adjn = 0; } else { local3 = Wt(P_adjn,PS_DIRECTION,P1_DIRECTION); if (local3) { Row_direction = local3; } } } if ((~~P_name) && (~~P_adj) && P_getflags ~= 1 && (~~P_gwimbit)) { if (~~local2) rfalse; print (string) Noun_missing_str; rfalse; } if (P_getflags ~= 1 || (~~P_slocbits)) { P_slocbits = 65535; } P_table = tbl; .labelXXX; if (local7) { Global_Check(tbl); ! not popped } else { if (Lit || action == ##Tell) { give player ~transparent; Do_SL(location,SOG,SIR); ! not popped give player transparent; } else if (parent(player) has vehicle && This_It_P(parent(player))) { Obj_Found(parent(player),tbl); ! not popped } Do_SL(player,SH,SC); ! not popped } local4 = tbl->P_matchlen - local6; if (P_getflags & 1 ~= 1) { if (P_getflags ~= 1 && (local4 > 1 || ((~~local4) && P_slocbits ~= 65535))) { if (P_slocbits == 65535) { P_slocbits = local5; local8 = local4; tbl->P_matchlen = tbl->P_matchlen - local4; jump labelXXX; } ParseIt(); ! not popped if (~~local4) { local4 = local8; } if (P_name) { local9 = tbl->(local6 + 1); if (local9) { local9 = local9.referred_to(); if (local9) { if (local9 == 170[not_here_object?]) rfalse; tbl->1 = local9; tbl->P_matchlen = 1[?]; P_name = 0; P_adj = 0; rtrue; } } } if (local2 && actor ~= player) { Cant_Orphan(); ! not popped P_name = 0; P_adj = 0; rfalse; } if (local2 && P_name) { Which_Print(local6,local4,tbl); ! not popped if (tbl == P_prso) { P_aclause = P_NC1; } else { P_aclause = P_NC2; } P_aadj = P_adj; P_anam = P_name; Orphan(0,0); ! not popped P_oflag = true; } else if (local2) { print (string) Noun_missing_str; } P_name = 0; P_adj = 0; rfalse; } if ((~~local4) && local7) { ParseIt(); ! not popped if (local2) { P_slocbits = local5; if (Lit || action == ##Tell or ##Open || action == ##Where or ##What) { Obj_Found(not_here_object,tbl); ! not popped P_xnam = P_name; P_xadj = P_adj; P_xadjn = P_adjn; P_name = 0; P_adj = 0; P_adjn = 0; rtrue; } print (string) Too_dark_str; new_line; } P_name = 0; P_adj = 0; rfalse; } if (~~local4) { local7 = 1[?]; jump labelXXX; } } P_slocbits = local5; ParseIt(); ! not popped P_name = 0; P_adj = 0; rtrue; ]; [ ParseIt ; if (P_name == 'it') rfalse; P_noun_names-->P_all_flag = P_name; P_adjectives-->P_all_flag = P_adj; rtrue; ]; [ MobyFind tbl objcnt=1 len foo tmpname tmpadj ; tmpname = P_name; tmpadj = P_adj; P_name = P_xnam; P_adj = P_xadj; tbl->P_matchlen = 0; .labelXXX; foo = This_It_P(objcnt); if (foo) { foo = Obj_Found(objcnt,tbl); } if (++objcnt <= 223) jump labelXXX; len = tbl->P_matchlen; if (len == 1) { P_moby_found = tbl->1; } P_name = tmpname; P_adj = tmpadj; return len; ]; [ Which_Print tlen len tbl obj rlen ; rlen = len; print "[Which"; if (P_oflag || P_merged || P_and) { print ' ', (address) P_name; } else if (tbl == P_prso) { Clause_Print(P_NC1,P_NC1L,false); ! not popped } else { Clause_Print(P_NC2,P_NC2L,false); ! not popped } print " dost thou mean, "; .labelXXX; ++tlen; obj = tbl->tlen; if (obj hasnt proper) { print "the "; } print (name) obj; if (len == 2[?]) { if (rlen ~= 2[?]) { print ','; } print " or "; } else if (len > 2) { print ", "; } if (--len >= 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)) { Obj_Found(obj,tbl); ! not popped } if (++cnt <= rmg_len) jump labelXXX; } if (tbl->P_matchlen ~= ptr) rfalse; P_slocbits = 65535; P_table = tbl; Do_SL(globals,1,1); ! not popped P_slocbits = obits; return P_slocbits; ]; [ 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)) { Obj_Found(obj,tbl); ! not popped } if (lvl || obj has scope_inside || obj has supporter && (nobj = child(obj)) ~= nothing && (obj has open || obj has transparent || P_debug_universal_search)) { fls = Search_List(obj,tbl,((obj has supporter) ? P_SRCALL : ((obj has scope_inside) ? P_SRCALL : P_SRCTOP))); } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; rtrue; ]; [ Obj_Found obj tbl ptr ; ptr = tbl->P_matchlen; tbl->(ptr + 1) = obj; tbl->P_matchlen = ptr + 1; rtrue; ]; [ Take_Check ; if (~~ITake_Check(P_prso,P_syntax->5)) rfalse; return ITake_Check(P_prsi,P_syntax->6); ]; [ ITake_Check tbl bits ptr obj taken ; ptr = tbl->P_matchlen; if ((~~ptr) || (bits & 2 ~= 2 && bits & 8 ~= 8)) rtrue; .labelXXX; if (--ptr < 0) rtrue; obj = tbl->(ptr + 1); if (obj == it6) { if (~~VisibleP(P_it_objectobject)) { DontSeeReferredtothing(); ! not popped rfalse; } obj = P_it_objectobject; } else if (obj == him) { if (~~VisibleP(P_him_object)) { DontSeeReferredtothing(1[?]); ! not popped rfalse; } obj = P_him_object; } else if (obj == her) { if (~~VisibleP(P_her_object)) { DontSeeReferredtothing(1[?]); ! not popped rfalse; } obj = P_her_object; } if (Ultimately_InP(obj) || obj == your_hand || (action == ##TakeFrom && obj == man)) jump labelXXX; noun = obj; if (obj has trytakebit) { taken = true; } else if (OutOfReachP(obj)) { taken = true; } else if (obj == quantity_of_wine && (Ultimately_InP(blue_goblet) || Ultimately_InP(green_goblet))) { taken = false; } else if (location == On_the_Ladder && obj == ladder) { taken = false; } else if (actor ~= player) { taken = false; } else if (bits & 8 == 8 && ITake(false) == 1[?]) { taken = false; } else { taken = true; } if (taken && bits & 2 == 2) { if (1 < tbl->P_matchlen) { print (string) Not_holding_str, " those things!"; new_line; rfalse; } if (obj == not_here_object) { print (string) You_cant_str, "see that here!"; new_line; rfalse; } if (actor == player) { print (string) Not_holding_str; } else { print "It doesn't look like"; Cast_with_the(actor); ! not popped print " has"; } SetPronoun(obj); ! not popped Cast_with_the_and_print_dots(obj); ! not popped rfalse; } if (taken || player in obj || actor ~= player) jump labelXXX; print "[taking"; Cast_with_the(obj); ! not popped print " first]"; new_line; jump labelXXX; ]; [ Many_Check allflag=2 loss tmp word ; if ((~~allflag) && P_syntax->5 & 4 ~= 4) { loss = 1; } else if (allflag == 1 && P_syntax->6 & 4 ~= 4) { loss = 2; } else if (allflag == 2 && P_prso->P_matchlen > 1 && P_syntax->5 & 4 ~= 4) { loss = 1; } else if (allflag == 2 && P_prsi->P_matchlen > 1 && P_syntax->6 & 4 ~= 4) { loss = 2; } if (~~loss) rtrue; print '[', (string) You_cant_str, "use multiple "; if (loss == 2) { print "in"; } print "direct objects with ~"; tmp = P_itbl-->1; if (~~tmp) { print "tell"; } else if (P_oflag || P_merged) { print (address) tmp-->0; } else { word = tmp->2; Word_Print(word,tmp->3); ! not popped } print "~.]"; new_line; rfalse; ]; [ ZMemQ itm tbl size=65535 cnt=1 ; if (~~tbl) rfalse; if (size >= 0) { cnt = 0; } else { size = tbl-->0; } .labelXXX; if (itm == tbl-->cnt) rtrue; if (++cnt <= size) jump labelXXX; rfalse; ]; [ ZMemQB itm tbl size=65535 cnt=1 ; if (size >= 0) { cnt = 0; } else { size = tbl->0; } .labelXXX; if (itm == tbl->cnt) rtrue; if (++cnt <= size) jump labelXXX; rfalse; ]; [ LitP room local2=true oldroom islit ; P_gwimbit = light; oldroom = location; location = room; if (local2 && room has light) { islit = true; } else { P_merge->P_matchlen = 0; P_table = P_merge; P_slocbits = 65535; if (oldroom == room) { Do_SL(actor,1,1); ! not popped if (actor ~= player && player in room) { Do_SL(player,1,1); ! not popped } } Do_SL(room,1,1); ! not popped if (P_table-->P_matchlen > 0) { islit = true; } } location = oldroom; P_gwimbit = attrib0; return islit; ]; [ Prso_Print ptr ; if (~~P_merged) { ptr = P_itbl-->6; if (ptr-->0 ~= 'it') jump labelXXX; } print ' ', (name) noun; rtrue; .labelXXX; return Buffer_Print(ptr,P_itbl-->7,0); ]; [ Prsi_Print ptr ; if (~~P_merged) { ptr = P_itbl-->8; if (ptr-->0 ~= 'it') jump labelXXX; } print ' ', (name) second; rtrue; .labelXXX; return Buffer_Print(ptr,P_itbl-->9,0); ]; [ This_It_P obj syns UNUSED ; if (obj has concealed) rfalse; if (P_name) { syns = obj.&name; if (~~ZMemQ(P_name,syns,get_prop_len(syns) / 2 - 1)) rfalse; } if (P_adj) { syns = obj.&adjectives; if ((~~syns) || (~~ZMemQB(P_adj,syns,get_prop_len(syns) - 1))) rfalse; } if ((~~P_gwimbit) || obj has P_gwimbit) rtrue; rfalse; ]; [ VerboseSub ; Verbosity = VERBOSE; print "Maximum verbosity."; new_line; new_line; return LookSub(); ]; [ BriefSub ; Verbosity = BRIEF; print 'B', (string) Brief_str; rtrue; ]; [ SuperbriefSub ; Verbosity = SUPERBRIEF; print "Superb", (string) Brief_str; rtrue; ]; [ SaveSub ; P_alt_cont = 0; P_quote_flag = false; @save ?~labelXXX; print (string) Aye_aye_str; rtrue; .labelXXX; print (string) Failed_str; rtrue; ]; [ RestoreSub ; @restore ?~labelXXX; print (string) Aye_aye_str; rtrue; .labelXXX; print (string) Failed_str; rtrue; ]; [ ScriptSub ; 0-->8 = 0-->8 | 1; TranscriptMsg("begins"); ! not popped return VersionSub(); ]; [ UnscriptSub ; TranscriptMsg("ends"); ! not popped VersionSub(); ! not popped 0-->8 = 0-->8 & 65534; rtrue; ]; [ TranscriptMsg msg ; "Here ", (string) msg, " a transcript of interaction with"; ]; [ InventorySub ; if (FindDaemon(LafondSeductionDaemon) && Lafond_seduction_cnt > 10) { if (Ultimately_InP(pinch_of_spices)) { Cast_with_capital_The(pinch_of_spices); ! not popped print " is not enough to cover"; } else { print "You blush to look at"; } " your naked body."; } Some_sort_of_wearing_variable = 0 - 22; DescribeOb(actor,0,3[air?]); ! not popped Some_sort_of_wearing_variable = worn; DescribeOb(actor,0,3[air?]); ! not popped Some_sort_of_wearing_variable = 0; new_line; rtrue; ]; [ QuitGameSub ; ScoreSub(); ! not popped DoYouWishToMsg("leave the game"); ! not popped if (AskUntil_Y_or_N_Answer()) { @quit; rtrue; } print (string) Aye_aye_str; rtrue; ]; [ RestartSub ; ScoreSub(); ! not popped DoYouWishToMsg("restart"); ! not popped if (~~AskUntil_Y_or_N_Answer()) rfalse; print "Restarting."; new_line; @restart; print (string) Failed_str; rtrue; ]; [ DoYouWishToMsg msg ; print (string) Spacing_str, "Do you wish to ", (string) msg, "? (Y is affirmative): "; rtrue; ]; [ AskUntil_Y_or_N_Answer ; .labelXXX; print '>'; @sread P_inbuf P_lexv; if (Confirmation(P_lexv-->1)) rtrue; if (Negative(P_lexv-->1) || P_lexv-->1 == 'n//') rfalse; print "This is important: please answer YES or NO. "; jump labelXXX; ]; [ EndGame local1 local2 ; .labelXXX; new_line; if (~~local1) { local1 = 1[?]; print (string) Spacing_str; ScoreSub(); ! not popped } if (score > 24) { print (string) Spacing_str, "Thus you have finished the story of ", (string) Title_str, ", earning the title, ~", (string) Ending_title-->Ending_rank, ".~"; if (Ending_rank < 4) { print " There are other, perhaps more satisfying, conclusions."; } new_line; } print (string) Spacing_str, "You may start over, restore a saved position, or end this session of the game. (Type RESTART, RESTORE, or QUIT):^>"; P_lexv->0 = 10; @sread P_inbuf P_lexv; P_lexv->0 = 60; ++local2; if (P_lexv-->1 == 'restart') { @restart; print (string) Failed_str; jump labelXXX; } if (P_lexv-->1 == 'restore') { @restore ?labelXXX; print (string) Failed_str; jump labelXXX; } .labelXXX; if (P_lexv-->1 ~= 'quit' or 'q//' && local2 <= 10) jump labelXXX; @quit; jump labelXXX; ]; [ VersionSub offset=17 local2 ; local2 = 0-->1 & 2047; print (string) Title_str; new_line; print "Infocom interactive fiction^Copyright (c) 1987 by Infocom, Inc. All rights reserved.^", (string) Title_str, " is a trademark of Infocom, Inc.^Release ", local2, " / Serial number "; .labelXXX; if (++offset <= 23) { print (char) 0->offset; jump labelXXX; } new_line; rtrue; ]; [ DebugCommSub ; @input_stream 1; rtrue; ]; [ DebugPredictableSub ; if (noun ~= number) { "ILLEGAL."; } random(0 - P_number); ! not popped rtrue; ]; [ DebugRecoSub ; @output_stream 4; rtrue; ]; [ DebugUnRecoSub ; @output_stream 65532; rtrue; ]; [ VerifySub ; if (noun == number && P_number == 25) { print 36; new_line; rtrue; } print "Verifying."; new_line; @verify ?~labelXXX; print (string) Aye_aye_str; rtrue; .labelXXX; new_line; "** Bad **"; ]; [ WakeSub ; if (noun == Room_Holder) { ReversePerform(yourself); ! not popped rtrue; } if (noun == yourself) { print "You pinch yourself. ", (string) You_arent_str, " dreaming", (string) Dot_newline_str; rtrue; } if (noun hasnt general_1 && (noun has animate || noun == crocodile)) { PrintPronoun(); ! not popped " isn't asleep."; } return FreeSub(); ]; [ ZzmgckSub ; if (CheckIfWordUsedToIdentifyObj('i//',yourself)) { return InventorySub(); } P_won = false; print (string) No_verb_str; return Clear_itbl(); ]; [ ApplaudSub ; "Clap."; ]; [ AskAboutSub local1 ; if (noun == yourself) { Perform(##Tell,yourself); ! not popped rtrue; } if (noun has animate) { local1 = actor; actor = noun; Perform(##TellAbout,yourself,second); ! not popped actor = local1; SetPronoun(second); ! not popped SetPronoun(noun); ! not popped rtrue; } Perform(##Tell,noun); ! not popped rtrue; ]; [ AskPersonSub ; print "Naturally,"; Cast_noun_with_the(); ! not popped " doesn't oblige."; ]; [ AskForSub local1 ; local1 = FindIn(location,animate); if (local1) { Perform(##AskPerson,local1,noun); ! not popped rtrue; } return NoOneHereTo("ask"); ]; [ BiteSub ; return Pre_Hack_Hack("Biting"); ]; [ BlowSub ; return YouCantWhatANoun("blow"); ]; [ PreBoardSub ; if (player in noun) { print (string) Look_around_you_str; rtrue; } if (Ultimately_InP(noun)) { print (string) Youre_holding_it_str; rtrue; } if (~~OutOfReachP(noun)) rfalse; return YouCantReachThe(noun); ]; [ BoardSub local1 ; local1 = parent(player); if (noun has vehicle) { move player to noun; print "You are now "; if (noun has attrib8) { print 'i'; } else { print 'o'; } print 'n'; Cast_noun_with_the(); ! not popped print '.'; parent(player).action(M_ENTER); ! not popped new_line; rtrue; } if (noun has animate) { print (string) Not_done_in_polite_str; rtrue; } if (P_itbl-->2 == 246[?]) { return YouCantWhatANoun("get into"); } return YouCantWhatANoun("get onto"); ]; [ BribeSub ; if (~~second) { if (Ultimately_InP(banknote)) { Perform(##Give,banknote,noun); ! not popped rtrue; } print "A lady bribes only with money", (string) Dot_newline_str; rtrue; } Perform(##Give,second,noun); ! not popped rtrue; ]; [ BurnSub ; if ((~~second) && (~~InRoomContains(fire,location)) && (~~InRoomContains(torch,location))) { print "You have no source of fire."; new_line; if (noun hasnt worn) jump labelXXX; print "Unless you relish a fiery death, you had best remove"; return Cast_with_the_and_print_dots(noun); } "Ladies do not play with fire."; .labelXXX; if (noun == gunpowder) { "Papa says never put ", (name) gunpowder, " near a flame."; } if (Ultimately_InP(noun)) { return YouHaveToFirst("drop",noun); } if (noun has animate) { print "That is thoroughly unladylike behavior.^"; rtrue; } if (noun has attrib27) { remove noun; print "In an instant,"; Cast_noun_with_the(); ! not popped " is consumed by fire."; } return YouCantWhatANoun("burn"); ]; [ LookClarifySub ; if (noun == direction) { (string) Have_to_str, "go in that ", (name) direction, " to see what's there."; } if (~~Told_how_to_use_look) { print "You may use prepositions to indicate precisely what you want to do: LOOK AT the object, LOOK INSIDE it, LOOK UNDER it, etc. In this case I'll take you to mean LOOK AT the object."; new_line; print (string) Spacing_str; Told_how_to_use_look = true; } if (noun == Room_Holder) { Perform(##Look); ! not popped rtrue; } Perform(##Examine,noun); ! not popped rtrue; ]; [ CleanSub ; Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Do you also do windows?"; ]; [ ClimbSub ; if (noun == direction && P_initial_word == 'crawl') { Do_Walk(Row_direction); ! not popped rtrue; } if (noun == Room_Holder) { return Do_Walk(u_to); } if (Ultimately_InP(noun)) { print (string) Youre_holding_it_str; rtrue; } return FreeSub(); ]; [ ClimbDownSub ; if (noun == Room_Holder) { return Do_Walk(d_to); } if (Ultimately_InP(noun)) { print (string) Youre_holding_it_str; rtrue; } return FreeSub(); ]; [ ClimbOnSub ; if (noun has vehicle || noun has animate) { Perform(##Board,noun); ! not popped rtrue; } if (Ultimately_InP(noun)) { print (string) Youre_holding_it_str; rtrue; } if (P_itbl-->2 == 246[?]) { return YouCantWhatANoun("climb into"); } return YouCantWhatANoun("climb onto"); ]; [ CrawlOverSub ; if (Ultimately_InP(noun)) { print (string) Youre_holding_it_str; rtrue; } return FreeSub(); ]; [ CloseSub ; if (noun has door || noun has openable && (noun hasnt supporter && noun hasnt animate && noun ~= rigging or garter or crocodile)) { return OpenOrClose(noun); } return YouCantWhatANoun("close"); ]; [ DuckUnderSub ; if (noun hasnt takeable) { return KnockyourBrowAgainst(); } return FreeSub(); ]; [ CrySub ; return NoTimeFor("have hysterics"); ]; [ SliceSub ; if ((~~second) || second == Room_Holder) { if (Ultimately_InP(dagger)) { Perform(##Slice,noun,dagger); ! not popped rtrue; } if (noun has animate) { Perform(##Attack,noun); ! not popped rtrue; } "Your fingernails aren't that sharp!"; } print "To put it bluntly, neither"; Cast_second_with_the(); ! not popped print " nor you are very sharp", (string) Dot_newline_str; rtrue; ]; [ DanceSub local1 ; if (actor ~= player && noun == nothing or yourself or player) { local1 = actor; actor = player; Perform(##Dance,local1); ! not popped actor = local1; rtrue; } if (noun has animate) { if (location ~= Ballroom or Orchestra) { print "This isn't a good place to dance", (string) Dot_newline_str; rtrue; } print "It is unlikely"; Cast_noun_with_the(); ! not popped " would want to dance just now."; } if (noun == Room_Holder or yourself) { if (Dancer_requesting_dance) { print "You pace out the steps.^"; rtrue; } "One cannot dance the minuet alone."; } print "Dancing with"; Article(noun); ! not popped " is an early symptom of the plague."; ]; [ ClimbOutSub ; if (~~noun) { if (player notin location) { ReversePerform(parent(player)); ! not popped rtrue; } print (string) Look_around_you_str; rtrue; } if (P_initial_word == 'take') { Perform(##Take,noun); ! not popped rtrue; } if (noun == ledge && location == Cabin) { Perform(##ClimbOn,noun); ! not popped rtrue; } if (player notin noun) { print (string) Look_around_you_str; return 8[Crulley?]; } if (location == By_the_Ship or Lagoon) { return SwimSub(); } move player to location; print "You"; if (Captain_Jamison in noun) { move Captain_Jamison to location; print " and ", (name) Captain_Jamison; } print " get o"; if (QueryLedgeOrBranch(noun)) { print "ff"; } else { print "ut of"; } Cast_noun_with_the(); ! not popped "."; ]; [ DressSub ; if (noun) { if (noun has animate) { "There's no need for that."; } return FreeSub(); } noun = Room_Holder; return GetDressedSub(); ]; [ DrinkSub ; return YouCantWhatANoun("drink"); ]; [ DrinkFromSub ; return YouCantWhatANoun("drink from"); ]; [ DropSub ; if (DropThingOnShipOrOcean()) rfalse; if (parent(player) == skiff2 or cask) { move noun to parent(player); } else { move noun to location; } "Dropped."; ]; [ DropThingOnShipOrOcean ; if (location == Bowsprit or On_the_Ladder) { remove noun; print "With a splash,"; Cast_noun_with_the(); ! not popped " is lost forever."; } if (parent(player) == Shallows) { remove noun; print "With a plop,"; Cast_noun_with_the(); ! not popped " is dragged out by a wave."; } if (location ~= In_the_Rigging && (location ~= Crows_Nest || action ~= ##Throw)) rfalse; if (noun has clothing && noun hasnt worn) { move noun to location; print "Billowing out,"; Cast_noun_with_the(); ! not popped print " catch"; if (noun hasnt plural) { print "es"; } print " in"; Cast_with_the(rigging); ! not popped " nearby."; } move noun to Entered_rigging_from; Cast_with_capital_The(noun); ! not popped " falls to the deck below."; ]; [ EatSub ; print "A lady is trained to eat anything, but this is absurd", (string) Dot_newline_str; rtrue; ]; [ HugSub ; if (PhysicallyTouchVerbP(noun)) { print "You give"; Cast_noun_with_the(); ! not popped print " a brief embrace"; if (noun hasnt animate) { print " and are not surprised when it doesn't respond"; } print (string) Dot_newline_str; rtrue; } if (noun in globals) { return FreeSub(); } return YouCantReachThe(noun); ]; [ EmptyInSub local1 local2 ; if (~~second) { second = ground; } if (noun hasnt openable) { print (string) Pardon_str; rtrue; } if (noun hasnt open) { print "But"; Cast_noun_with_the(); ! not popped " isn't open."; } if (child(noun) == nothing) { print "But"; Cast_noun_with_the(); ! not popped " is already empty!"; } if (child(noun) == nothing) rfalse; @je second SP ?~labelXXX; if (sibling(second) == nothing) { print (string) There_is_nothing_str, "in"; Cast_noun_with_the(); ! not popped print " but"; return Cast_with_the_and_print_dots(second); } .labelXXX; local1 = child(noun); .labelXXX; local2 = sibling(local1); if (local1 ~= 192[player?]) { print (name) local1, ": "; if (local1 has takeable) { move local1 to player; if (second == your_hand) { print "Taken."; new_line; } else if (second == ground) { Perform(##Drop,local1); ! not popped } else if (second has supporter) { Perform(##PlaceOn,local1,second); ! not popped } else { Perform(##Insert,local1,second); ! not popped } } else { WrapSub(); ! not popped } } if (~~local2) rtrue; local1 = local2; jump labelXXX; ]; [ PourFromSub ; if (noun in second) { if (noun has takeable) { move noun to player; Perform(##Drop,noun); ! not popped rtrue; } return WrapSub(); } return ItIsntOnOrIn(); ]; [ CrawlThruSub ; if (noun has door) { Do_Walk(OtherSide(noun)); ! not popped rtrue; } if (noun has vehicle) { Perform(##Board,noun); ! not popped rtrue; } if (noun has animate) { Perform(##Board,noun); ! not popped rtrue; } if (noun in it4) { return FreeSub(); } if (noun hasnt takeable) { return KnockyourBrowAgainst(); } if (Ultimately_InP(noun)) { print (string) Youre_holding_it_str; rtrue; } return FreeSub(); ]; [ ExamineSub ; if (noun has animate) { if (child(noun) ~= nothing) { Perform(##LookIn,noun); ! not popped rtrue; } InterestingAbout(); ! not popped print "about"; return Cast_with_the_and_print_dots(noun); } if (noun has door || noun has supporter) { return LookInSub(); } if (noun has openable) { if (noun has open) { return LookInSub(); } print "It", (string) Is_closed_str, (string) Dot_newline_str; rtrue; } if (noun has attrib25) { print "It's o"; if (noun has light) { print 'n'; } else { print "ff"; } print (string) Dot_newline_str; rtrue; } if (noun has proper) { return JustLike("look"); } if (25 >= random(100) || noun == pseudo) { print (string) Complete_common_str, (name) noun, (string) Dot_newline_str; rtrue; } if (60 >= random(100)) { InterestingAbout(); ! not popped print "about"; return Cast_with_the_and_print_dots(noun); } PrintPronoun(); ! not popped print " look"; if (noun hasnt plural && noun ~= yourself) { print 's'; } " like every other ", (name) noun, " you've ever seen."; ]; [ InterestingAbout ; print (string) There_is_nothing_str; if (25 >= random(100)) { print "unusual"; } else if (33 >= random(100)) { print "noteworthy"; } else if (50 >= random(100)) { print "extraordinary"; } else { print "special"; } print ' '; rtrue; ]; [ ExitSub ; if (noun && noun has vehicle) { Perform(##ClimbOut,noun); ! not popped rtrue; } if (GetOutOfIfPossible()) rfalse; return Do_Walk(out_to); ]; [ GetOutOfIfPossible env ; env = parent(player); if (env ~= cask or skiff2 or ledge or bed4 or bed1 or cot or bed3) rfalse; Perform(##ClimbOut,parent(player)); ! not popped rtrue; ]; [ FeedSub ; return UseSub(); ]; [ FiddleSub ; return Pre_Hack_Hack("Fiddling with"); ]; [ FillSub ; if (~~second) { (string) There_is_nothing_str, "to fill it with."; } return FreeSub(); ]; [ FillWithSub ; Perform(##Fill,second,noun); ! not popped rtrue; ]; [ FindSub local1 local2 ; local2 = parent(noun); if (~~local2) { PrintPronoun(); ! not popped " could be anywhere!"; } if (noun in player) { "You have it!"; } if (noun in location) { "Right in front of you."; } if (noun in globals || InRoomContains(noun,location) || noun == pseudo) { return FigureOutYourself(); } if (local2 has animate && VisibleP(local2)) { print "Looks as if"; Cast_with_the(local2); ! not popped " has it."; } if (local2 has openable && VisibleP(noun) && local2 notin globals) { if (local2 has supporter) { print 'O'; } else if (local2 has vehicle && local2 hasnt attrib8) { print 'O'; } else { print 'I'; } print 'n'; return Cast_with_the_and_print_dots(local2); } if (local1) { "Beats me."; } return FigureOutYourself(); ]; [ ComeWithSub ; if (VisibleP(noun)) { print "But"; Cast_noun_with_the(); ! not popped " is right here!"; } if (noun hasnt animate) { return FreeSub(); } print "You have no idea where"; Cast_noun_with_the(); ! not popped " is."; ]; [ PreGiveSub local1 ; if (noun has general_1 && second ~= smelling_salts) { print "It's unlikely"; Cast_noun_with_the(); ! not popped " will want that."; } if (action == ##Give && noun == your_hand) { Perform(##Shake,second); ! not popped rtrue; } if (noun == quantity_of_wine && (Ultimately_InP(blue_goblet) || Ultimately_InP(green_goblet))) { if (Ultimately_InP(blue_goblet)) { local1 = 90[blue_goblet?]; } else if (Ultimately_InP(green_goblet)) { local1 = 141[green_goblet?]; } ReversePerform(local1,second); ! not popped rtrue; } if (PreThrowOverSub()) rtrue; rfalse; ]; [ GetDressedSub ; if (noun == Room_Holder) { return UseSub(); } return DontRecognizeSentence(); ]; [ GetDrunkSub ; if (noun ~= Room_Holder) { return DontRecognizeSentence(); } Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Here?"; ]; [ GetUndressedSub ; if (noun == Room_Holder) { return StripDown(true); } return DontRecognizeSentence(); ]; [ StripDown voluntarily itm sib ; if (voluntarily) { if (UndressInFrontOfLafond()) rtrue; print "You"; if (linen_chemise hasnt general_3 && breeches hasnt worn && shirt hasnt worn) { "'re already stripped!"; } print " strip down to your chemise", (string) Dot_newline_str; } itm = child(player); .labelXXX; if (itm) { if (itm has worn) { give itm ~worn; } sib = sibling(itm); itm = sib; jump labelXXX; } move your_reticule to player; give your_kid_slippers worn; give linen_chemise worn; give linen_chemise ~general_3; Disguised_as_boy = false; rtrue; ]; [ DisrobeSub ; if (noun) { if (noun == your_father) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Undress your father?!"; } if (noun == yourself) { Perform(##GetUndressed,Room_Holder); ! not popped rtrue; } if (noun has animate && noun hasnt female) { print (string) Mama_shocked_str; rtrue; } return FreeSub(); } noun = Room_Holder; return GetUndressedSub(); ]; [ GiveSub ; if (second has animate) { if (second has general_1) { print (string) He_doesnt_respond_str; rtrue; } print "Briskly,"; Cast_second_with_the(); ! not popped " refuses your offer."; } print (string) You_cant_str, "give"; Article(noun); ! not popped print " to"; Article(second); ! not popped "!"; ]; [ HelloSub ; if (noun) { if (noun == invalidObj18239) { print "Nothing happens", (string) Dot_newline_str; rtrue; } "[The proper way to talk to characters in the story is PERSON, HELLO.]"; } if (location == Cabin && Captain_Jamison in location) { Perform(##Hello,Captain_Jamison); ! not popped rtrue; } Perform(##Tell,yourself); ! not popped rtrue; ]; [ StopSub ; if (noun == Room_Holder) { print "You haven't started", (string) Dot_newline_str; rtrue; } return HowDoYouDoThat(); ]; [ HelpSub ; print "If you're feeling pillaged, maps and hint booklets are available from your dealer, or via mail order with the form"; return CameWithGamePackage(); ]; [ WalkBehindSub ; print (string) You_cant_str, "hide "; if (noun) { print 't'; } "here."; ]; [ ILoveSub ; if (P_initial_word == 'i//') { "[Why... I'm speechless! Thank you.]"; } return DontRecognizeSentence(); ]; [ EnterSub local1 ; return Do_Walk(in_to); ]; [ KickSub ; if (noun has animate) { if (noun has general_1) { print (string) He_doesnt_respond_str; rtrue; } "~Hey! Cut that out!~"; } return Pre_Hack_Hack("Kicking"); ]; [ AttackSub ; "Relax."; ]; [ KissSub ; "~Smooch!~"; ]; [ BowSub ; "You curtsey gracefully."; ]; [ KnockSub ; return Pre_Hack_Hack("Knocking on"); ]; [ LauchSub ; "~Ha-ha.~"; ]; [ LaunchSub ; "Your brain is out to launch."; ]; [ DiveToSub ; if ((~~noun) || noun == Room_Holder) { if (location == Dungeon && trapdoor has open) { Perform(##CrawlThru,trapdoor); ! not popped rtrue; } if (location == In_the_Rigging or Crows_Nest or Bowsprit) { print (string) Suicide_str; rtrue; } return WasntThatFun(); } if (noun notin location) { return FreeSub(); } return WasntThatFun(); ]; [ DiveOutSub ; if (noun has vehicle) { Perform(##ClimbOut,noun); ! not popped rtrue; } if (OnShipP(location)) { print (string) Suicide_str; rtrue; } Perform(##DiveTo,noun); ! not popped rtrue; ]; [ LeapOverboardSub ; if (OnShipP(location)) { print (string) Suicide_str; rtrue; } return FreeSub(); ]; [ LeaveSub ; if (~~noun) { noun = Room_Holder; } if (noun == Room_Holder) { return Do_Walk(out_to); } if (player in noun) { Perform(##ClimbOut,noun); ! not popped rtrue; } Perform(##Drop,noun); ! not popped rtrue; ]; [ LieOnSub ; if (noun has vehicle || noun has animate) { Perform(##Board,noun); ! not popped rtrue; } return WrapSub(); ]; [ ListenSub ; if (FindDaemon(Lucy_gives_garter)) { Perform(##Listen,Lucy); ! not popped rtrue; } if (Captain_Jamison in location || your_father in location || Lafond in location || Cookie in location) { print "You listen intently", (string) Dot_newline_str; rtrue; } if (noun == patrol) { Cast_with_capital_The(patrol); ! not popped " confers quietly."; } if (FindDaemon(Jamisons_men_arrive_timer)) { (string) The_ballroom_is_str, "tumult of screams."; } if (location == Orchestra or Ballroom or Supper_Room && (~~Jamisons_men_have_attacked)) { "The orchestra plays a sprightly dance tune."; } if (noun) { return JustLike("sound"); } "You hear nothing of interest."; ]; [ PreUnbarSub ; if (location == Quarterdeck or Landing && P_initial_word == 'unbar') rfalse; if (noun == flower && action == ##Pick) { Perform(##Take,flower); ! not popped rtrue; } if (noun == Captain_Jamison && location == Dungeon) { if (second) { Perform(##Unbar,pair_of_manacles,second); ! not popped rtrue; } return HowDoYouDoThat(); } if (noun hasnt locked && action == ##Pick or ##Unbar || (noun has locked && action == ##Lock)) { if (noun == pair_of_manacles) { print "They already are.^"; rtrue; } print (string) Already_is_str; rtrue; } if (second) rfalse; if (action == ##Pick && Ultimately_InP(jewelled_brooch)) { print "[with"; Cast_with_the(jewelled_brooch); ! not popped print ']'; new_line; return ReversePerform(noun,jewelled_brooch); } if (Ultimately_InP(large_key)) { print "[with"; Cast_with_the(large_key); ! not popped print ']'; new_line; return ReversePerform(noun,large_key); } HowDoYouDoThat(); ! not popped rtrue; ]; [ LookSub ; if (~~Describe_Room(true)) rtrue; Describe_Objects(); ! not popped rtrue; ]; [ LookBehindSub ; if (noun has door) { Perform(##LookIn,noun); ! not popped rtrue; } print "There is nothing behind"; return Cast_with_the_and_print_dots(noun); ]; [ LookDownSub ; if (noun == Room_Holder) { Perform(##Examine,ground); ! not popped rtrue; } Perform(##LookIn,noun); ! not popped rtrue; ]; [ LookInSub ; if (noun has animate) { print (string) It_seems_that_str; if (noun has female) { print " sh"; } else { print " h"; } print "e has"; if (PlayerInsideNoun()) rtrue; print (string) Dot_newline_str; rtrue; } if (player in noun) { return OtherThingsInVehicle(); } if (noun has supporter) { print (string) You_can_see_str; if (PlayerInsideNoun()) rtrue; print " on"; Cast_with_the_and_print_dots(noun); ! not popped rtrue; } if (noun has door) { print "You can only tell that"; Cast_noun_with_the(); ! not popped print " is"; PrintOpenOrClosed(noun); ! not popped print ".^"; rtrue; } if (noun has openable) { if (SeeInside(noun)) { print (string) You_can_see_str; if (PlayerInsideNoun()) rtrue; print " in"; Cast_with_the_and_print_dots(noun); ! not popped rtrue; } if (noun hasnt open && child(noun) ~= nothing) { if (PreTouchSub()) rtrue; Perform(##Open,noun); ! not popped rtrue; } return YouHaveToFirst("open",noun); } if (P_itbl-->2 == 246[?]) { return YouCantWhatANoun("look inside"); } print "Even if Queen Augusta commanded it, you couldn't see through that", (string) Dot_newline_str; rtrue; ]; [ LookUnderSub ; if (Ultimately_InP(noun)) { if (noun has worn) { "You're wearing it!"; } print (string) Youre_holding_it_str; rtrue; } if (noun has door) { "The space is too narrow to see anything."; } InterestingAbout(); ! not popped print "under"; return Cast_with_the_and_print_dots(noun); ]; [ LookUpSub ; if (noun == Room_Holder) { if (location == In_the_Rigging or Crows_Nest) { (string) You_can_see_str, " a mess of sails and rope."; } if (location has attrib12) { Perform(##Examine,ceiling); ! not popped rtrue; } "The midnight sky is clear of all but a full moon."; } Perform(##LookIn,noun); ! not popped rtrue; ]; [ MakeLoveSub local1 ; if (noun ~= Room_Holder) { local1 = noun; } else { local1 = FindIn(location,animate,"with"); if (~~local1) { local1 = 15[yourself?]; } } Perform(##Kiss,local1); ! not popped rtrue; ]; [ MarrySub ; if (noun == Cookie or Crulley or Lafond) { print "I doubt that"; Cast_noun_with_the(); ! not popped " is the marrying type."; } if (noun == your_father) { "Don't be absurd."; } if (noun == Captain_Jamison) { return NeedFathersPermission("marrying"); } return WrapSub(); ]; [ MoveSub ; if (Ultimately_InP(noun)) { return WrapSub(); } if (CanReachInContainer()) rtrue; if (noun has takeable) { print "Moving"; Cast_noun_with_the(); ! not popped " reveals nothing."; } if (P_initial_word == 'pull') { return Pre_Hack_Hack("Pulling"); } return YouCantWhatANoun("move"); ]; [ DestroySub ; return Pre_Hack_Hack("Trying to destroy"); ]; [ MuzzleSub ; return Pre_Hack_Hack("Trying to muzzle"); ]; [ NoSub ; if (Question_cnt == Q_NOT_A_YES_NO_QUESTION or Q_RHETORICAL_QUESTION) { return NodSub(); } if (Question_cnt == Q_SEARCHING_FOR_SECRET_DOOR) { print "One should hope not! Lafond is too respectable to harbour such secrets", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_DO_YOU_MEAN_THAT) { print "~Foolish of me to have thought you were serious,~ he smiles, relieved", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_WILLING_TO_TRUST_JAMISON) { print "~No!~ you say pertly", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_DO_YOU_KNOW_LUCY) { "Papa clucks. ~Pity. I'll introduce you to Lucy after we're out of this mess.~"; } if (Question_cnt == Q_LET_JAMISON_PROTECT_YOU) { "You shake your head", " firmly, ~No.~"; } if (Question_cnt == Q_ANY_IDEA_WHERE_TO_LOOK) { print "You shake your head", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_WILL_YOU_DANCE_WITH_LAFOND) { print "~No,~ you say, chin trembling", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_DENY_LAFOND) { "You shake your head", ", teeth clenched."; } if (Question_cnt == Q_HAVE_THE_KEY) { "~God's blood! We'll have to find some other way.~"; } if (Question_cnt == Q_DANCE_WITH_JAMISON) { print "~Sorry, but I'm enjoying this dance too much to just let you go.~ Jamison tightens his grip on ", (name) your_hand, " as you circle each other", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_LET_JAMISON_KISS_YOU) { "You shake your head", " breathlessly."; } if (Question_cnt == Q_DO_YOU_LIKE_JAMISON) { "~'Tis a pity. I was hoping...~"; } if (Question_cnt == Q_COME_TO_HIT_CRULLEY_AGAIN) { "~I'll do the hittin' 'ere.~"; } return PositiveOrNegative("nega"); ]; [ Negative w ; if (w == 'no' or 'nope' or 'nay' or 'never') rtrue; rfalse; ]; [ BlowOutSub ; if (noun has attrib25) { if (noun has light) { give noun ~light; print "Okay,"; Cast_noun_with_the(); ! not popped " is now off."; } "It isn't on!"; } return YouCantWhatANoun("extinguish"); ]; [ LightSub ; if (noun has animate) { print (string) Pardon_str; rtrue; } if (noun has attrib25) { if (noun has light) { print (string) Already_is_str; rtrue; } give noun light; print "Okay,"; Cast_noun_with_the(); ! not popped " is now on."; } return YouCantWhatANoun("light"); ]; [ OpenSub ; if (noun has locked) { "It's quite locked."; } if (noun has door || noun has openable && (noun hasnt supporter && noun hasnt animate)) { return OpenOrClose(noun); } return YouCantWhatANoun("open"); ]; [ PickSub ; if (noun has door && Ultimately_InP(jewelled_brooch)) { print "That doesn't work here", (string) Dot_newline_str; rtrue; } return YouCantWhatANoun("pick"); ]; [ PointSub ; "That would be pointless."; ]; [ ShineSub ; Perform(##Point,second,noun); ! not popped rtrue; ]; [ Be_specific_do_what do_what with_what ; print (string) Have_to_str, "specify what you want to ", (string) do_what; Cast_with_the(with_what); ! not popped print " in", (string) Dot_newline_str; rtrue; ]; [ PrePourSub ; if (noun == quantity_of_wine && (~~second) && P_initial_word ~= 'spill') { return Be_specific_do_what("pour",noun); } if (noun ~= laudanum or leather_bottle) rfalse; if (~~Ultimately_InP(noun)) { print (string) Not_holding_str; return Cast_with_the_and_print_dots(leather_bottle); } if (~~Laudenum_left) { "There's no ", (name) laudanum, " left."; } if (~~second) { move leather_bottle to player; print "A bubble of ", (name) laudanum, " forms on the tip of"; Cast_with_the(leather_bottle); ! not popped " then slurps back in."; } if (second == quantity_of_wine) { print (string) Have_to_str, "specify which glass you want to put"; Cast_with_the(laudanum); ! not popped " into."; } if (second.number ~= 2 or 3) rfalse; print (string) You_already_have_str, " dosed"; Cast_second_with_the(); ! not popped print ". Any more might be dangerous", (string) Dot_newline_str; rtrue; ]; [ PushSub ; return Pre_Hack_Hack("Pushing"); ]; [ MoveDirectionSub ; if (second == direction) { return PushSub(); } return DontRecognizeSentence(); ]; [ PreWrapSub ; if (second == ground) { Perform(##Drop,noun); ! not popped rtrue; } if (noun == laudanum or quantity_of_wine) { Perform(##Pour,noun,second); ! not popped rtrue; } if (noun == your_hand) { if (action == ##Insert) { Perform(##ReachIn,second); ! not popped rtrue; } return WrapSub(); } if (second == sea && location == In_the_Rigging or Crows_Nest or Bowsprit or Poop or Quarterdeck or Main_Deck or Forecastle && action == ##PlaceOn or ##Drop or ##Throw or ##Insert) rfalse; if (second has animate && action ~= ##PlaceOn) { return WrapSub(); } if (Ultimately_InP(second,noun)) { print (string) You_cant_str, "put"; Cast_noun_with_the(); ! not popped if (P_itbl-->4 == 249[?]) { print " on"; } else { print " in"; } Cast_second_with_the(); ! not popped print " when"; Cast_second_with_the(); ! not popped print " is already "; if (noun has supporter) { print "on"; } else { print "in"; } Cast_noun_with_the(); ! not popped "!"; } if ((~~Ultimately_InP(noun)) && noun ~= pair_of_manacles) { print (string) Not_holding_str; return Cast_with_the_and_print_dots(noun); } if (OutOfReachP(second)) { return YouCantReachThe(second); } if (PreThrowOverSub()) rtrue; rfalse; ]; [ InsertSub local1 local2 local3 ; if (second hasnt open && second hasnt openable && second hasnt supporter && second hasnt vehicle) { print (string) You_cant_str, "put"; Cast_noun_with_the(); ! not popped print " in"; Article(second); ! not popped "!"; } if (second == noun || (Ultimately_InP(noun) && noun hasnt takeable)) { return WrapSub(); } if (second has door) { print (string) Cant_do_that_from_here_str; rtrue; } if (second hasnt open && second hasnt supporter) { SetPronoun(second); ! not popped return YouHaveToFirst("open",second); } if (noun in second) { print "But"; Cast_noun_with_the(); ! not popped print " is already in"; return Cast_with_the_and_print_dots(second); } local3 = QueryWeight(second); local2 = local3 + QueryWeight(noun); local1 = local2 - second.size; if (local1 > second.capacity && (~~Ultimately_InP(noun,second))) { print "There's no room "; if (second has supporter) { print "on"; } else { print "in"; } Cast_second_with_the(); ! not popped print " for"; return Cast_with_the_and_print_dots(noun); } if ((~~Ultimately_InP(noun)) && ITake(false) == 8[Crulley?] or 0) rtrue; move noun to second; give noun visited; "Done."; ]; [ PlaceOnSub ; if (second == yourself) { Perform(##Wear,noun); ! not popped rtrue; } if (second has supporter) { return InsertSub(); } print "There's no good surface on"; return Cast_with_the_and_print_dots(second); ]; [ PutThroughSub ; if (second has door) { if (second has open) { return ThrowSub(); } return YouHaveToFirst("open",second); } if (second == parent(player) && P_initial_word == 'throw' or 'toss' or 'hurl') { second = nothing; return ThrowSub(); } return FreeSub(); ]; [ RaiseSub ; return Pre_Hack_Hack("Playing in this way with"); ]; [ RapeSub ; print "That is thoroughly unladylike behavior.^"; rtrue; ]; [ ReachInSub local1 ; local1 = child(noun); if (noun has animate || noun has supporter || noun hasnt openable) { return WrapSub(); } if (noun hasnt open) { return YouHaveToFirst("open",noun); } if ((~~local1) || local1 has concealed || local1 hasnt takeable) { print (string) There_is_nothing_str, "in"; return Cast_with_the_and_print_dots(noun); } print "You feel something inside"; return Cast_with_the_and_print_dots(noun); ]; [ BrowseSub ; return YouCantWhatANoun("read"); ]; [ ReflectSub ; if (noun == moonbeam && second == silver_tray or bit_of_mirror && location == Lafonds_Bedroom) { Perform(##Shine,Helena_Louise,second); ! not popped rtrue; } return WrapSub(); ]; [ RemoveSub ; if (noun has clothing && noun in player) { if (noun hasnt worn) { (string) You_arent_str, "wearing that!"; } if (UndressInFrontOfLafond()) rfalse; give noun ~worn; print "You remove"; return Cast_with_the_and_print_dots(noun); } Perform(##Take,noun); ! not popped rtrue; ]; [ UndressInFrontOfLafond ; if (location ~= Lafonds_Bedroom || Lafond notin location) rfalse; if (Lafond_seduction_cnt > 10) { (string) There_is_nothing_str, "to remove!"; } print (name) Lafond, " chuckles. ~No, ma cherie, "; if (Lafond_seduction_cnt < 3) { "have some wine first.~"; } print "I'll do that.~"; new_line; Lafond_seduction_cnt = 10; QueueInterrupt(LafondSeductionDaemon,65535); ! not popped rtrue; ]; [ ReturnObjSub local1 ; if (~~second) { local1 = FindIn(location,animate,"to"); if (local1) { Perform(##Give,noun,local1); ! not popped rtrue; } return NoOneHereTo("return it to"); } if (second has animate) { Perform(##Give,noun,second); ! not popped rtrue; } Perform(##Insert,noun,second); ! not popped rtrue; ]; [ RipUpSub ; if (noun == missive or invitation) { print "There's no reason to be so destructive", (string) Dot_newline_str; rtrue; } "It doesn't tear."; ]; [ KnockOverSub ; if (noun == your_eyes) { "You ARE exasperated."; } if (OutOfReachP(noun)) { return YouCantReachThe(noun); } if (P_initial_word == 'tip') { if (noun == your_head) { return NodSub(); } PrintPronoun(); ! not popped " can't take tips!"; } "A rolling ", (name) noun, " gathers no moss."; ]; [ RowSub ; "You haven't any oars!"; ]; [ RowDirectionSub ; if (second == direction) { return RowSub(); } return DontRecognizeSentence(); ]; [ RowToSub ; if (noun == St_Sinistra || (noun == skiff2 && second == St_Sinistra)) { Row_direction = w_to; Perform(##RowDirection,skiff2,direction); ! not popped rtrue; } if (noun == reefs or Helena_Louise || (noun == skiff2 && second == reefs or Helena_Louise)) { Row_direction = e_to; Perform(##RowDirection,skiff2,direction); ! not popped rtrue; } if (parent(player) == skiff2) { return WrapSub(); } return YouHaveToFirst("get in",skiff2); ]; [ RescueSub ; return HowDoYouDoThat(); ]; [ ScoreSub ; print "In ", turns, " turn"; if (turns ~= 1) { print 's'; } print ", you have achieved a score of ", score, " out of 25 points"; if (score < 25) { print ". This gives you the rank of "; if (score < 5) { print "Damsel in Distress"; } else if (score < 10) { print "Missish Minx"; } else if (score < 15) { print "Plucky Lass"; } else if (score < 20) { print "Daring Demoiselle"; } else if (score < 25) { print "Lady Leman"; } } print (string) Dot_newline_str; rtrue; ]; [ SearchSub ; if (noun has animate) { return ShakeSub(); } if (player in noun) { return OtherThingsInVehicle(); } if (noun has openable && noun hasnt open) { return YouHaveToFirst("open",noun); } if (noun has openable) { print "You find"; if (PlayerInsideNoun()) rtrue; print (string) Dot_newline_str; rtrue; } return YouCantWhatANoun("search"); ]; [ TurnSub ; if (noun == Room_Holder) { return WasntThatFun(); } if (~~second) { if (noun has takeable) { return Pre_Hack_Hack("Turning"); } print (string) Not_holding_str; return Cast_with_the_and_print_dots(noun); } return FreeSub(); ]; [ FeedWithSub ; Perform(##Give,second,noun); ! not popped rtrue; ]; [ ShakeSub ; if (noun has animate) { print (string) Not_polite_str; rtrue; } return Pre_Hack_Hack("Shaking"); ]; [ ShakeSub ; if (noun ~= your_hand) { return DontRecognizeSentence(); } if (second hasnt animate) { print "I don't think"; Cast_second_with_the(); ! not popped " even has hands."; } Perform(##Thank,second); ! not popped rtrue; ]; [ ShootSub ; if (~~second) { if (Ultimately_InP(pistol)) { Perform(##Shoot,noun,pistol); ! not popped rtrue; } return HowDoYouDoThat(); } "Don't ever bother applying for a job as a gunswoman."; ]; [ PreShootSub ; if (noun == cannon || Ultimately_InP(noun)) rfalse; if (~~second) { if (~~Ultimately_InP(pistol)) { return HowDoYouDoThat(); } Perform(##Shoot,noun); ! not popped rtrue; } print (string) Not_holding_str; return Cast_with_the_and_print_dots(noun); ]; [ ShootSub ; Perform(##Shoot,second,noun); ! not popped rtrue; ]; [ ShowSub ; print "It doesn't look like"; Cast_second_with_the(); ! not popped " is interested."; ]; [ CloseUpSub ; if (noun == Room_Holder) { "[I hope you're not addressing me...]"; } Perform(##Close,noun); ! not popped rtrue; ]; [ MoanSub ; "You sigh contentedly, smiling."; ]; [ SitDownSub local1 ; local1 = FindIn(location,vehicle); if (local1) { Perform(##Board,local1); ! not popped rtrue; } return WrapSub(); ]; [ SleepSub ; if (FindDaemon_or_Timer(I_am_drugged_daemon)) { return I_am_drugged_daemon(); } "You're not tired."; ]; [ SmellSub ; if (noun) { print "Smells like any other ", (name) noun, (string) Dot_newline_str; rtrue; } if (parent(player) == cask) { print "You recoil from the taint of rancid meat", (string) Dot_newline_str; rtrue; } if (location == Forecastle or Galley) { "The odor of old grease and char does not improve your appetite."; } if (location == Cabin) { print "The odors of charred wood, sea salt and blood burn your nose", (string) Dot_newline_str; rtrue; } if (location == Crews_Quarters) { "Close quarters, indeed."; } print "Nothing smells unusual", (string) Dot_newline_str; rtrue; ]; [ SoakSub ; if (~~second) { return Be_specific_do_what("soak",noun); } return FreeSub(); ]; [ JustLike what ; PrintPronoun(); ! not popped print ' ', (string) what; if (noun hasnt plural && noun ~= yourself) { print 's'; } print " just like"; return Cast_with_article_and_print_dots(noun); ]; [ CoverSub ; Perform(##PlaceOn,second,noun); ! not popped rtrue; ]; [ ShowReverseSub ; Perform(##Show,second,noun); ! not popped rtrue; ]; [ RtandSub ; if (P_initial_word == 'hold') { return WrapSub(); } if (parent(player) has vehicle) { Perform(##ClimbOut,parent(player)); ! not popped rtrue; } if (noun && noun has takeable) { return WrapSub(); } if (location == In_the_Hedge or By_the_House or Sleeping_Cupboard) { "There's not enough room for even your petite frame to stand straight."; } (string) Youve_already_str, "standing."; ]; [ TellReverseSub ; Perform(##Tell,second); ! not popped rtrue; ]; [ ThrowDirSub ; Perform(##ThrowwTo,second,noun); ! not popped rtrue; ]; [ FixSub ; if (noun == dagger) { return WellBred(59612["Dagger s..."?]); } print "But"; Cast_noun_with_the(); ! not popped print " isn't "; if (P_initial_word == 'sharpen' or 'whet') { print "dull"; } else { print "broken"; } "!"; ]; [ SwimSub ; if (noun == sea || ((~~noun) && InRoomContains(sea,location))) { return WellBred(62528["Swimming"?]); } "Your head must be swimming."; ]; [ SwingSub ; if (second) { Perform(##Attack,second,noun); ! not popped rtrue; } if (noun == Room_Holder && location == Gallery) { Perform(##Swing,rope); ! not popped rtrue; } return WasntThatFun(); ]; [ SwoonSub ; print "You've never been missish enough to faint on demand", (string) Dot_newline_str; rtrue; ]; [ WrapInSub ; Perform(##Wrap,second,noun); ! not popped rtrue; ]; [ PreTakeSub ; if (CanReachInContainer()) rtrue; if (player in noun) { print "You're "; if (noun has attrib8) { print 'i'; } else { print 'o'; } "n it!"; } if (Lafond_seduction_cnt > 10 && location == Lafonds_Bedroom && location in Lafond) rfalse; if (noun in player || (Ultimately_InP(noun) && noun hasnt takeable)) { if (noun has worn) { print (string) Youve_already_str, "wearing"; } else { print (string) You_already_have_str; } return Cast_with_the_and_print_dots(noun); } if (noun == laudanum && second ~= leather_bottle) { return WrapSub(); } if ((~~second) || noun in second) rfalse; if (noun notin second) { return ItIsntOnOrIn(); } if (noun == yourself) { Perform(##Drop,second); ! not popped rtrue; } second = nothing; rfalse; ]; [ TakeSub ; if (ITake() ~= 1[?]) rfalse; "Taken."; ]; [ TakeOffSub ; if (noun has worn) { Perform(##Remove,noun); ! not popped rtrue; } if (noun has vehicle) { Perform(##ClimbOut,noun); ! not popped rtrue; } print (string) You_arent_str, "wearing"; return Cast_with_the_and_print_dots(noun); ]; [ TakeFromSub ; print "Sorry,"; Cast_second_with_the(); ! not popped print " is no help in getting"; return Cast_with_the_and_print_dots(noun); ]; [ TellSub ; if (noun has animate && noun ~= crocodile) { if (noun has general_1) { print (string) He_doesnt_respond_str; return Clear_itbl(); } if (P_alt_cont) { actor = noun; Clock_wait = true; rtrue; } print "Hmmm ..."; Cast_noun_with_the(); ! not popped " looks at you expectantly, as if you seemed to be about to talk."; } YouCantWhatANoun("talk to"); ! not popped return Clear_itbl(); ]; [ TellAboutSub ; if (noun == yourself) { Perform(##What,second); ! not popped rtrue; } Perform(##Show,second,noun); ! not popped rtrue; ]; [ ThankSub ; if (~~noun) { "[Just doing my job.]"; } if (noun has animate) { "~You're welcome.~"; } return FreeSub(); ]; [ ThrowAtSub ; Perform(##Destroy,second,noun); ! not popped rtrue; ]; [ ThrowSub ; if (DropThingOnShipOrOcean()) rfalse; if (location == Lagoon or By_the_Ship or Shallows) { Perform(##Insert,noun,sea); ! not popped rtrue; } if (second) { move noun to location; "You missed."; } move noun to location; "Thrown."; ]; [ ThrowOverSub ; move noun to location; "You missed."; ]; [ ThrowOverboardSub ; if (location == Lagoon or Shallows || OnShipP(location)) { Perform(##Insert,noun,sea); ! not popped rtrue; } "One normally tries this on a boat."; ]; [ ThrowwToSub ; if (second has animate) { Perform(##Give,noun,second); ! not popped rtrue; } Perform(##Throw,noun,second); ! not popped rtrue; ]; [ TieWithSub ; Perform(##Tie,second,noun); ! not popped rtrue; ]; [ PreTouchSub ; if (action == ##Lower or ##Raise && second && second ~= Room_Holder) { return DontRecognizeSentence(); } if (action == ##Touch && noun == Cookie && second == dagger) { print "That is thoroughly unladylike behavior.^"; rtrue; } if (action == ##Close or ##Open && noun == bed3 or cot or divan or bed2 or bed4 or bed1) { return YouCantWhatANoun("do that to"); } if (noun == line && action == ##Touch && parent(player) == cask) { print "Your fingers just brush"; return Cast_with_the_and_print_dots(line); } if (OutOfReachP(noun)) { return YouCantReachThe(noun); } if (action == ##EmptyIn) { if (noun == rum_barrel or water_barrel || (Ultimately_InP(noun) && Take_Check())) rfalse; print (string) Not_holding_str; Cast_with_the_and_print_dots(noun); ! not popped return 8[Crulley?]; } if (action ~= ##EmptyFrom || second == rum_barrel or water_barrel || (Ultimately_InP(noun) && Take_Check())) rfalse; print (string) Not_holding_str; Cast_with_the_and_print_dots(noun); ! not popped return 8[Crulley?]; ]; [ TouchSub ; if (CanReachInContainer()) rtrue; return Pre_Hack_Hack("Caressing"); ]; [ TouchSub ; Perform(##Touch,second,noun); ! not popped rtrue; ]; [ UnbarSub ; if (second) { return FreeSub(); } if (noun has locked) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Your nose is key-shaped, I suppose?"; } if (noun has door) { print "But"; Cast_noun_with_the(); ! not popped " isn't locked."; } return WrapSub(); ]; [ GoSub local1 local2 local3 local4 local5 local6 local7 ; local1 = parent(player); if (~~P_walk_dir) { Perform(##Approach,noun); ! not popped rtrue; } if (noun == veranda && GetOutOfIfPossible()) rtrue; if (noun == Front_Drive && (~~location.&in_to)) { local2 = FindIn(location,vehicle); if (local2 && (~~Ultimately_InP(local2))) { Perform(##Board,local2); ! not popped rtrue; } } local3 = location.&noun; if (local3) { local4 = get_prop_len(local3); if (local4 == 1[?]) { return Goto(local3->0); } if (local4 == 2[?]) { print (string) local3-->0; new_line; return 8[Crulley?]; } if (local4 == 3[air?]) { local7 = (local3-->0)(); if (local7) { if (local7 == 31[Room_Holder?]) rtrue; return Goto(local7); } return 8[Crulley?]; } if (local4 == 4[well?]) { @load (local3->1) -> SP; @jz SP ?labelXXX; return Goto(local3->0); .labelXXX; local5 = local3-->1; if (local5) { print (string) local5; new_line; return 8[Crulley?]; } print (string) Cant_go_str; return 8[Crulley?]; } if (local4 ~= 5[your_hand?]) rfalse; local6 = local3->1; if (local6 has open) { return Goto(local3->0); } local5 = local3-->1; if (local5) { SetPronoun(local6); ! not popped print (string) local5; new_line; return 8[Crulley?]; } SetPronoun(local6); ! not popped YouHaveToFirst("open",local6); ! not popped return 8[Crulley?]; } if (noun == Front_Drive or veranda) { CircleSub(); ! not popped return 8[Crulley?]; } print (string) Cant_go_str; return 8[Crulley?]; ]; [ WaveSub local1 ; print "You wave"; if (~~local1) { Prso_Print(); ! not popped print " in the air", (string) Dot_newline_str; rtrue; } print " cheerfully at"; return Cast_with_the_and_print_dots(noun); ]; [ WaveAtSub ; WaveSub(1[?]); ! not popped rtrue; ]; [ DrySub ; if (~~second) { if (noun == cotton_frock && Skirt_soaked_in || (noun == rag && Rag_soaked_in)) { "You don't have time to dry it."; } if (P_initial_word == 'dry') { "That isn't wet!"; } return WrapSub(); } if (second == rag or cotton_frock) { Perform(##Dry,second); ! not popped rtrue; } return WrapSub(); ]; [ CircleSub ; Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Did you have any particular ", (name) direction, " in mind?"; ]; [ ApproachSub ; if (noun == direction) { return Do_Walk(Row_direction); } return CircleSub(); ]; [ WaitSub turns=3 ; print "Time passes..."; new_line; .labelXXX; if (--turns >= 0 && (~~Clocker())) jump labelXXX; Clock_wait = true; return Clock_wait; ]; [ PreDisrobeSub local1 ; if (CheckIfWordUsedToIdentifyObj('deck',ground) && (location == Deck || OnShipP(location))) { CircleSub(); ! not popped rtrue; } if (noun && action == ##Disrobe) rfalse; if (AppropriateTimeToChangeP()) rtrue; if (location == Lafonds_Bedroom || (location == Anteroom && your_father notin location)) rfalse; if (FindIn(location,animate,"in front of") || location == Orchestra or Supper_Room or Ballroom) { print (string) Not_done_in_polite_str; rtrue; } if (location == Anteroom) { local1 = parent(your_father); if (location ~= local1 or parent(Cookie)) rfalse; } if ((~~noun) || noun == your_reticule || (noun hasnt worn && noun hasnt clothing) || noun has worn) rfalse; print "You're not wearing"; Cast_noun_with_the(); ! not popped "!"; ]; [ PreWearSub ; if (noun hasnt clothing) { return YouCantWhatANoun("wear"); } if (noun has worn) { print (string) Youve_already_str, "wearing"; Cast_noun_with_the(); ! not popped "!"; } if (AppropriateTimeToChangeP()) rtrue; if (FindDaemon(LafondSeductionDaemon) && parent(Lafond) == location) { (name) Lafond, " prevents you."; } if (Jamisons_men_have_attacked || location ~= Foyer or Ballroom or Supper_Room or Orchestra) rfalse; "People might notice."; ]; [ AppropriateTimeToChangeP ; if (location == Cabin) { print "With pirates attacking?! ", (string) Mama_shocked_str; rtrue; } if (location == On_the_Ladder or In_the_Rigging) { print (string) You_cant_str, "manage the fastenings while whipping to and fro "; if (location == On_the_Ladder) { print "on"; return Cast_with_article_and_print_dots(ladder); } print "in"; return Cast_with_the_and_print_dots(rigging); } if (location ~= In_the_Hedge or By_the_House) rfalse; (string) You_cant_str, "even stand straight, much less change clothes!"; ]; [ WearSub ; move noun to player; give noun worn; print "You're now wearing"; return Cast_with_the_and_print_dots(noun); ]; [ WhatSub ; "Good question."; ]; [ WhereSub ; return FindSub(1[?]); ]; [ YellSub ; if (location == Gallery or Deck) { print "Although your voice is quite piercing, no one notices you."; new_line; } else if (location == Cabin) { print (string) Help_me_str; new_line; } else { print "Papa always says, ~Action, not reaction, girl!~"; new_line; } return Clear_itbl(); ]; [ QuestionExpireTimer ; Question_cnt = 0; rfalse; ]; [ NodSub ; if (Question_cnt == Q_NOT_A_YES_NO_QUESTION) { print "That wasn't a yes or no question", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_RHETORICAL_QUESTION) { "That was just a rhetorical question."; } if (Question_cnt == Q_SEARCHING_FOR_SECRET_DOOR) { "Whither goes a will, goes a way."; } if (Question_cnt == Q_DO_YOU_MEAN_THAT) { remove Captain_Jamison; AbsolutelyRefuseJamison(); ! not popped "Silently he drops your arm and retreats. You are alone."; } if (Question_cnt == Q_WILLING_TO_TRUST_JAMISON) { "You nod tentatively."; } if (Question_cnt == Q_DO_YOU_KNOW_LUCY) { print "~Quite a girl, isn't she? You two will be great friends,~ he says", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_LET_JAMISON_PROTECT_YOU) { print "You have no breath to speak. You nod once, never taking ", (name) your_eyes, " off Nicholas Jamison", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_ANY_IDEA_WHERE_TO_LOOK) { "You nod eagerly."; } if (Question_cnt == Q_WILL_YOU_DANCE_WITH_LAFOND) { "You summon a gracious smile, ~Why yes, I'd love to.~"; } if (Question_cnt == Q_DENY_LAFOND) { print "You nod", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_HAVE_THE_KEY) { print "Nicholas pulls forward a fettered wrist", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_DANCE_WITH_JAMISON) { print "Jamison grins at you", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_LET_JAMISON_KISS_YOU) { print "Breathless, eager, you lean into him", (string) Dot_newline_str; rtrue; } if (Question_cnt == Q_DO_YOU_LIKE_JAMISON) { "Your father twinkles, ~Good! He's of good family, you know.~"; } if (Question_cnt == Q_COME_TO_HIT_CRULLEY_AGAIN) { "~Har, just you try!~"; } return PositiveOrNegative("posi"); ]; [ PositiveOrNegative w ; "You sound rather ", (string) w, "tive."; ]; [ Confirmation wrd ; if (wrd == 'yes' or 'y//' or 'yup' or 'ok' or 'okay' or 'sure') rtrue; rfalse; ]; [ ITake vb=true UNUSED weight ; if (noun hasnt takeable) { if (vb) { WrapSub(); ! not popped } return 8[Crulley?]; } if (PreTouchSub()) { return 8[Crulley?]; } if (~~Ultimately_InP(noun)) { weight = QueryWeight(noun); if (weight + QueryWeight(player) > 110) { if (vb) { print "It's too heavy, considering your current load."; new_line; } return 8[Crulley?]; } } if (CCount(player) > 12) { if (vb) { print (string) Youve_already_str, "juggling as many items as you can possibly carry."; new_line; } return 8[Crulley?]; } give noun visited; give noun ~attrib9; if (player in noun) rfalse; move noun to player; rtrue; ]; [ PreThrowOverSub ; if (noun == your_hand) { if (action ~= ##Give or ##Throw or ##Drop) rfalse; return FreeSub(); } if (noun == your_reticule) { if (action ~= ##Give or ##Throw or ##Drop) rfalse; "A lady is never without her reticule."; } if (noun == yourself && action == ##Insert && second has animate) { Perform(##Board,second); ! not popped rtrue; } if (second == yourself && action == ##Insert && noun has animate) { Perform(##Board,noun); ! not popped rtrue; } if (noun == spices or pinch_of_spices && Ultimately_InP(pinch_of_spices)) rfalse; if (~~Ultimately_InP(noun)) { if (noun == yourself || noun has attrib3) { FreeSub(); ! not popped return 8[Crulley?]; } print (string) Not_holding_str; Cast_with_the_and_print_dots(noun); ! not popped return 8[Crulley?]; } if (noun notin player && parent(noun) has openable && parent(noun) hasnt open) { return YouHaveToFirst("open",parent(noun)); } if (noun hasnt worn) rfalse; return YouHaveToFirst("remove",noun); ]; [ CCount obj cnt x ; if ((x = child(obj)) == nothing) { return cnt; } .labelXXX; if (x hasnt worn) { ++cnt; } if ((x = sibling(x)) ~= nothing) jump labelXXX; return cnt; ]; [ QueryWeight obj cont wt ; if ((cont = child(obj)) ~= nothing) { .labelXXX; wt = wt + QueryWeight(cont); if ((cont = sibling(cont)) ~= nothing) jump labelXXX; } return wt + obj.size; ]; [ Describe_Room look v UNUSED ; if (~~Lit) { print (string) Too_dark_str; new_line; rfalse; } if (location hasnt visited) { give location visited; v = true; } print (name) location; if (parent(player) has vehicle) { print ", "; if (parent(player) has attrib8) { print 'i'; } else { print 'o'; } print 'n'; Cast_with_the(parent(player)); ! not popped } new_line; if ((~~look) && Verbosity ~= VERBOSE && ((~~v) || Verbosity ~= BRIEF)) rtrue; print (string) Spacing_str; if (~~location.action(M_LOOK)) { print (string) location.description; } new_line; rtrue; ]; [ Describe_Objects obj init first=true env ; env = parent(actor); obj = child(location); if (~~obj) rfalse; .labelXXX; if (obj) { if (SomeScopeInsideP(obj) && obj hasnt visited) { init = obj.initial; if (init) { print (string) Spacing_str, (string) init; if (obj has openable) { DescribeOb(obj,1[?],3[air?]); ! not popped } new_line; } } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; jump labelXXX; } obj = child(location); first = true; .labelXXX; if (obj) { if (SomeScopeInsideP(obj) && ((~~obj.initial) || obj has visited)) { init = obj.initial2; if (init) { init = init(M_INITIAL); if (init) { if (obj has openable && init ~= routine16) { DescribeOb(obj,1[?],3[air?]); ! not popped } new_line; jump labelXXX; } } init = obj.description; if (init) { print (string) Spacing_str, (string) init; if (obj has openable) { DescribeOb(obj,1[?],3[air?]); ! not popped } new_line; } } .labelXXX; if ((obj = sibling(obj)) ~= nothing) jump labelXXX; jump labelXXX; } DescribeOb(location,0,0); ! not popped if ((~~env) || location == env) rfalse; return DescribeOb(env,0,0); ]; [ DescribeOb where local2=65535[?] local3=1[?] obj local5 local6=1[?] local7 local8 local9 local10 local11 ; if (local2 == 2[?]) { local2 = 1[?]; local10 = 1[?]; local9 = 1[?]; } else if (local3 & 2 == 2) { local10 = 1[?]; } local5 = child(where); if ((~~local9) && where notin Room_Holder && where hasnt animate && ((~~local5) || where hasnt openable || (where hasnt open && where hasnt transparent) || (local2 ~= 65535[?] && where hasnt scope_inside))) rfalse; .labelXXX; if ((~~local5) || (SomeScopeInsideP(local5) && (local3 & 1 == 1 || RunInitial(local5)))) { if (obj) { if (local6) { local6 = 0; if (local2 == 0 or 1[?]) { if (~~local9) { if (~~local10) { if (where ~= player) { print (string) Spacing_str; } local10 = 1[?]; } else if (local2 == 1[?]) { print ' '; } Firster(where); ! not popped } } else if (local2 ~= 65535[?]) { print (string) local2; } } else if (local5) { print ','; } else { print " and"; } Article(obj); ! not popped if (obj has light) { print " (providing light)"; } else if (obj == your_reticule) { print " (hanging from your wrist)"; } if ((~~local7) && (~~local8)) { local7 = obj; } else { local8 = 1[?]; local7 = 0; } } obj = local5; } if (local5) { local5 = sibling(local5); } if (obj || local5) jump labelXXX; if (local7 && (~~local8)) { SetPronoun(local7); ! not popped } if (local6 && local9) { print " nothing"; rfalse; } if ((~~local6) && local2 == 0 or 1[?]) { if (where == location) { print " here"; } print '.'; } if (local2 == 0 or 1[?]) { obj = child(where); .labelXXX; if (obj) { if (obj has openable && SomeScopeInsideP(obj,true) && (local3 & 1 == 1 || RunInitial(obj))) { local11 = Some_sort_of_wearing_variable; Some_sort_of_wearing_variable = 0; if (DescribeOb(obj,1[?],(local10 ? 3[air?] : 1[?]))) { local6 = 0; local10 = 1[?]; } Some_sort_of_wearing_variable = local11; } if ((obj = sibling(obj)) ~= nothing) jump labelXXX; jump labelXXX; } } if ((~~local6) && local2 == 0 or 1[?] && where == location or parent(actor)) { new_line; } if (~~local6) rtrue; rfalse; ]; [ Firster where ; if (where == location) { print (string) You_can_see_str; rtrue; } if (where == player) { if (Some_sort_of_wearing_variable == worn) { print " You are wearing"; rtrue; } print "You have"; rtrue; } if (where has supporter) { print "Sitting on"; Cast_with_the(where); ! not popped print " is"; rtrue; } if (where has animate && where ~= crocodile) { if (where == Lucy) { print "Sh"; } else { print 'H'; } print "e has"; rtrue; } if (where == fence or leather_bottle or powder_horn) rtrue; print (string) It_seems_that_str; Cast_with_the(where); ! not popped print " contains"; rtrue; ]; [ SomeScopeInsideP obj can_look_inside ; if (obj has concealed || obj == actor || (obj == parent(actor) && location ~= parent(actor)) || ((~~can_look_inside) && obj has attrib9)) rfalse; if (~~Some_sort_of_wearing_variable) rtrue; if (Some_sort_of_wearing_variable > 0) { if (obj has Some_sort_of_wearing_variable) rtrue; rfalse; } if (obj has 0 - Some_sort_of_wearing_variable) rfalse; rtrue; ]; [ RunInitial obj rtn ; if (obj.initial && obj hasnt visited) rfalse; rtn = obj.initial2; if (rtn && rtn((M_HANDLED|invalidEnum8))) rfalse; if (~~obj.description) rtrue; rfalse; ]; [ OtherThingsInVehicle ; print "Other than ", (name) yourself, ", you can see"; if (PlayerInsideNoun()) rtrue; if (noun has attrib8) { print " in"; } else { print " on"; } Cast_with_the_and_print_dots(noun); ! not popped rtrue; ]; [ PlayerInsideNoun ; if (~~DescribeOb(noun,2[?])) rfalse; if (player in noun) rtrue; new_line; rtrue; ]; [ Goto where local2 old_location ; old_location = location; move player to where; if (where in Room_Holder) { location = where; } else { location = parent(where); } Lit = LitP(location); if (old_location == Library && Ultimately_InP(hat) && location == By_the_House or East_Hallway) { ReturnHatToKnob(); ! not popped new_line; } location.action(M_ENTER); ! not popped if (location == Corner && your_father in location) { print "~What a brave tot! You've inherited all your mother's spirit.~ Your father beams with pride", (string) Dot_newline_str; new_line; } else if (location == Bottom_of_Stairwell && Cookie in Anteroom) { Cookie_attacking_alligator = false; give crocodile ~attrib9; print "~I ain't goin' to fight this beast if you're headin' back upstairs.~"; Cast_with_the(Cookie); ! not popped if (rapier in player) { move rapier to Cookie; print " eyes"; Cast_with_the(rapier); ! not popped print " in"; Cast_with_the(your_hand); ! not popped print ". ~Not a proper thing fer a lady,~ he grumbles, taking it from you. He"; } print " follows you", (string) Dot_newline_str; new_line; } else { if (location == Lagoon) rtrue; } if (Describe_Room() && Verbosity) { Describe_Objects(); ! not popped } if (your_father in old_location && player in location && (~~local2) && (~~Jamisons_men_have_attacked)) { FatherFollowsYou(); ! not popped } if (Captain_Jamison in old_location && player in location && (~~Jamisons_men_have_attacked)) { if (location == Ballroom && Dancer_requesting_dance == Captain_Jamison) { move Captain_Jamison to location; print (name) Captain_Jamison, " smiles and follows you, pulling you onto", " the dance floor", (string) Dot_newline_str; } else { if (old_location == Ballroom) { move Captain_Jamison to location; rtrue; } AbsolutelyRefuseJamison(); ! not popped remove Captain_Jamison; print (string) Spacing_str, "~No, wait -- !~ Jamison cries. He "; if (location == Lawn) { print "slips past you into the forest"; } else { print "hesitates and turns away"; } print (string) Dot_newline_str; } } if ((~~Jamisons_men_have_attacked) || Cookie notin old_location || player notin location || Cookie_attacking_alligator || FindDaemon(Finale) || (FindDaemon(TheDuelDaemon) && old_location == Gallery or Stair_Landing) || location == Beach) rtrue; move Cookie to location; print (string) Spacing_str, (name) Cookie, " pegs after you", (string) Dot_newline_str; rtrue; ]; [ ReturnHatToKnob ; move hat to Library; give hat ~worn; give hat general_3; give knob ~general_3; give knob general_1; print "For safety's sake, you leave"; Cast_with_the(hat); ! not popped print " on its knob. Best not to show that you've been wandering", (string) Dot_newline_str; rtrue; ]; [ FatherFollowsYou ; if (location == Cell2) { "Your father chuckles in the darkness of the passageway, ~No dear, I'm not going in there again!~"; } move your_father to parent(player); print (string) Spacing_str, "Papa ", (string) ComplexPickOne(Father_stuff_tbl); new_line; rtrue; ]; [ JigsUp msg ; print (string) msg, (string) Death_str; return EndGame(); ]; [ FatherIsDead str self_murder ; print (string) str, (string) Death_str, (string) Spacing_str; if (self_murder) { print "Troubled by Papa's death, caused by your own unthinking pride, your life loses meaning. You die by your own hand, in grief and shame."; } else { print "Rather, your flesh is intact, but your spirit has flown with the death of your heart's love. The years pass, unnoticed, twisting you into an old and ugly spinster, that dies alone, loved by no one."; } new_line; return EndGame(); ]; [ JigsUpWorseThanDeath msg ; print (string) msg; new_line; new_line; print " *** You have suffered^ a fate worse than death ***"; new_line; return EndGame(); ]; [ AccessibleP obj env ; if (~~obj) rfalse; env = parent(obj); if (obj has concealed) rfalse; if (obj == pseudo) { if (prev_location == location) rtrue; rfalse; } if (~~env) rfalse; if (env == globals || (env == it4 && InRoomContains(obj,location))) rtrue; if (Meta_Loc(obj) ~= location) rfalse; if (env == actor or location) rtrue; if (env hasnt open || (~~AccessibleP(env))) rfalse; rtrue; ]; [ VisibleP obj env ; if (~~obj) rfalse; env = parent(obj); if (AccessibleP(obj)) rtrue; if ((~~SeeInside(env)) || (~~VisibleP(env))) rfalse; rtrue; ]; [ OutOfReachP obj ; if (~~obj) rfalse; if (obj == sea) { if (location == Lagoon or Shallows or Main_Deck or Beach) rfalse; rtrue; } if (obj == ladder && parent(player) == ledge || player in location || Ultimately_InP(obj,parent(player)) || (obj == parent(player) || obj in globals)) rfalse; rtrue; ]; [ Meta_Loc obj ; .labelXXX; if (~~obj) rfalse; if (obj in globals) { return globals; } if (obj in Room_Holder) { return obj; } obj = parent(obj); jump labelXXX; ]; [ OtherSide door prop addr ; .labelXXX; prop = get_next_prop(location,prop); if (prop < 19) rfalse; addr = location.∝ if (get_prop_len(addr) ~= 5 || addr->1 ~= door) jump labelXXX; return prop; ]; [ Ultimately_InP obj potential_container ; if (~~potential_container) { potential_container = actor; } if (~~obj) rfalse; if (obj in potential_container) rtrue; if (obj in Room_Holder) rfalse; return Ultimately_InP(parent(obj),potential_container); ]; [ SeeInside obj ; if ((~~obj) || 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 obj attr str itm recursed_obj ; itm = child(obj); if (~~itm) rfalse; .labelXXX; if (itm has attr && itm hasnt concealed) { if (~~str) { return itm; } print '[', (string) str; Cast_with_the(itm); ! not popped print ']'; new_line; return itm; } recursed_obj = FindIn(itm,attr); if (recursed_obj) { return recursed_obj; } if ((itm = sibling(itm)) ~= nothing) jump labelXXX; rfalse; ]; [ CanReachInContainer env ; env = parent(noun); if (env hasnt openable || env has open || noun hasnt takeable) rfalse; return YouHaveToFirst("open",env); ]; [ Do_Walk dir ; P_walk_dir = dir; return Perform(##Go,dir); ]; [ Clear_itbl ; P_alt_cont = 0; P_quote_flag = false; return invalidEnum8; ]; [ IsNotNaked clothingp sib itm ; itm = child(player); .labelXXX; if (itm) { if (itm hasnt worn && itm ~= your_reticule) { clothingp = true; } sib = sibling(itm); itm = sib; jump labelXXX; } return clothingp; ]; [ DropAll who where sib itm ; itm = child(who); .labelXXX; if (itm) { sib = sibling(itm); if (itm hasnt worn && itm ~= pinch_of_spices) { if (where) { move itm to where; } else { remove itm; } } itm = sib; jump labelXXX; } move your_reticule to player; rtrue; ]; [ Pre_Hack_Hack w ; print (string) w; Cast_noun_with_the(); ! not popped return Hack_Hack(); ]; [ Hack_Hack ; print (string) ComplexPickOne(Ho_hum_table); new_line; rtrue; ]; [ FreeSub ; print (string) ComplexPickOne(Yuks_table); new_line; rtrue; ]; [ WrapSub ; print (string) ComplexPickOne(Useless_table); new_line; rtrue; ]; [ Direction_action local1 ; if (action ~= ##RowTo or ##Row or ##RowDirection || player notin skiff2) rfalse; if (Row_direction == e_to) { if (location == By_the_Ship) { print "That would take you past"; Cast_with_the(Helena_Louise); ! not popped " into the open sea!"; } Distance_one_row_takes = LONG_DISTANCE; print (string) You_dip_oars_str, (name) skiff2, " plows through the lagoon."; if (location == Shallows) { QueueInterrupt(FloatInOceanDaemon,65535); ! not popped Distance_one_row_takes = SHORT_DISTANCE; move skiff2 to Lagoon; new_line; return Goto(skiff2); } local1 = skiff_distance_from_shore + Distance_one_row_takes; if (local1 == Turns_on_ocean or Turns_on_ocean + 1) { if (Helena_Louise has general_2) { return JigsUp(" Suddenly, an offshore current pulls you past the reefs into the open sea. You haven't the strength to row back."); } print " You glide into the shadow of"; Cast_with_the_and_print_dots(Helena_Louise); ! not popped new_line; skiff_distance_from_shore = Turns_on_ocean; Distance_one_row_takes = NONE; move skiff2 to By_the_Ship; return Goto(skiff2); } new_line; rtrue; } if (Row_direction == w_to) { Distance_one_row_takes = (SHORT_DISTANCE|invalidEnum65532); if (location == Shallows) { print "You can row"; Cast_with_the(skiff2); ! not popped print " no farther west", (string) Dot_newline_str; rtrue; } if (skiff_distance_from_shore + Distance_one_row_takes < 2) { print (string) You_dip_oars_str, (name) skiff2, " noses into the sand of the shallows. You get out", (string) Dot_newline_str; new_line; Unqueue(FloatInOceanDaemon); ! not popped skiff_distance_from_shore = 1; move skiff2 to Shallows; Goto(Shallows); ! not popped rtrue; } print (string) You_dip_oars_str, (name) skiff2, " shoots over the waves", (string) Dot_newline_str; if (location ~= By_the_Ship) rtrue; move skiff2 to Lagoon; Goto(skiff2); ! not popped rtrue; } if (Row_direction ~= n_to or northw_to or ne or s_to or southw_to or prop25) rfalse; "You can barely row back and forth, much less side to side!"; ]; [ Man_action local1 ; if (noun == yourself && action == ##TakeFrom) { return DontRecognizeSentence(); } if (CheckIfWordUsedToIdentifyObj('sailor',man) && action == ##Hello) { if (InRoomContains(pirate,location)) { Perform(##Hello,pirate); ! not popped rtrue; } "Nothing happens here."; } if (P_noun_names-->0 == 'man' && noun == man) { if (CheckCorrectAdjectives('bewigged')) { return ReversePerform(Lafond,second); } if (CheckIfWordUsedToIdentifyObj('men',man) && location ~= Ballroom or Orchestra or Supper_Room) { return UseSub(); } local1 = FindAnimateHere(); if (local1) { ReversePerform(local1,second); ! not popped rtrue; } return Cant_see(man); } if (P_noun_names-->1 ~= 'man' || second ~= man) rfalse; if (CheckCorrectAdjectives('bewigged')) { return ReversePerform(noun,Lafond); } if (CheckIfWordUsedToIdentifyObj('men',man) && location ~= Ballroom or Orchestra or Supper_Room) { return UseSub(); } local1 = FindAnimateHere(); if (local1) { ReversePerform(noun,local1); ! not popped rtrue; } return Cant_see(man); ]; [ FindAnimateHere ; if (Captain_Jamison in location) { return Captain_Jamison; } if (Lafond in location) { return Lafond; } if (your_father in location) { return your_father; } if (Crulley in location) { return Crulley; } if (Cookie in location) { return Cookie; } if (butler in location) { return butler; } if (InRoomContains(dancer,location)) { return dancer; } if (InRoomContains(pirate,location)) { return pirate; } if (crocodile notin location) rfalse; return crocodile; ]; [ Not_here_object_action local1 local2=1[?] local3 local4 ; if (noun == not_here_object && second == not_here_object) { "Those things aren't here!"; } if (P_xnam == 'mouth' or 'eyes' && P_xadjn == 'lafond' or 0) { if (noun == not_here_object) { noun = Lafond; rfalse; } second = Lafond; rfalse; } if (P_xadjn == 'powder' && Ultimately_InP(powder_horn)) { if (noun == not_here_object) { noun = gunpowder; } else { second = gunpowder; } } else { if (P_xnam == 'hands' or 'hand' or 'finger' or 'eye' or 'eyes' or 'head' or 'jamison' or 'lip' or 'lips' or 'mouth' && P_xadjn == 'nick' or 'nicholas' or 'croc^' or 'dad' or 'father' or 'papa' or 'woman' or 'lucy' or 'jean' or 'lafond') { "[Sadly, we haven't the space to handle everything. Try to refer only to characters in the story, not individual body parts or possessions. For example, you can EXAMINE PIRATE but you can't EXAMINE PIRATE'S EYEPATCH.]"; } if (noun == not_here_object) { local1 = P_prso; } else { local1 = P_prsi; local2 = 0; } } if (local2 && ExtraScopeVerbP()) { local4 = 1[?]; } else if ((~~local2) && TalkVerbP()) { local4 = 1[?]; } if (local4) { local3 = Find_Not_Here(local1,local2); if (~~local3) rfalse; if (local3 ~= 170[not_here_object?]) rtrue; if (action == ##ComeWith or ##Approach) { CircleSub(); ! not popped } else { UseSub(); ! not popped } } else { if (actor == player) { print "You"; } else { if (actor has general_1) { print (string) He_doesnt_respond_str; return 8[Crulley?]; } print "Looking confused,"; Cast_with_the(actor); ! not popped print " says, ~I"; } print " can't see"; if ((~~Adj_Check(P_xadj)) && (~~QueryActorName(P_xnam))) { print " any"; } Print_no_see(local2); ! not popped print " here!"; if (actor ~= player) { print '"'; } new_line; } return Clear_itbl(); ]; [ ExtraScopeVerbP ; if (action == ##What or ##Where or ##Shoot or ##Shoot or ##Approach or ##ILove or ##Find or ##ComeWith or ##Rescue or ##Zzmgck) rtrue; rfalse; ]; [ TalkVerbP ; if (action == ##AskAbout or ##AskPerson or ##TellAbout or ##ILove) rtrue; rfalse; ]; [ Find_Not_Here tbl prso_p m_f obj ; m_f = MobyFind(tbl); if (1[?] == m_f) { if (prso_p) { noun = P_moby_found; SetPronoun(noun); ! not popped rfalse; } second = P_moby_found; rfalse; } if (1 < m_f) { obj = tbl->1; obj = obj.referred_to(); if (obj) { if (obj == 170[not_here_object?]) rtrue; if (prso_p) { noun = obj; SetPronoun(noun); ! not popped rfalse; } second = obj; rfalse; } } return not_here_object; ]; [ Print_no_see obj ptr ; if (P_oflag) { if (P_xadj) { print ' ', (address) P_xadjn; } if (~~P_xnam) rfalse; print ' ', (address) P_xnam; rtrue; } if (obj) { ptr = P_itbl-->6; return Buffer_Print(ptr,P_itbl-->7,0); } ptr = P_itbl-->8; return Buffer_Print(ptr,P_itbl-->9,0); ]; [ Ladder_action ; if (~~Rope_ladder_twisting_in_breeze) { return Cant_see(ladder); } if (action == ##Board or ##Climb or ##Take) { if (parent(player) == Captains_Quarters) { if (ledge has general_2) { print "You lean over"; Cast_with_the(ledge); ! not popped print ", but"; Cast_with_the(ladder); ! not popped print " is too far out to reach", (string) Dot_newline_str; rtrue; } print "It's on the other side of the window", (string) Dot_newline_str; rtrue; } if (parent(player) == ledge) { print "You "; if (IsNotNaked()) { DropAll(player,your_reticule); ! not popped print "put everything in"; Cast_with_the(your_reticule); ! not popped print " and "; } if (Poop has visited) { print "hop out, catching the"; } else { QueueInterrupt(ClimbingRopeLadderDaemon,65535); ! not popped print "reach out for"; Cast_with_the(ladder); ! not popped print " and over-balance, tumbling from your perch. Your hand closes on a slimy hemp rung as you fly out over the waves, clinging tenuously, feet free, to the"; } Prso_Print(); ! not popped print (string) Dot_newline_str; new_line; return Goto(On_the_Ladder); } if (location == On_the_Ladder && action == ##Take) { print (string) Youre_holding_it_str; rtrue; } if (parent(player) == skiff2) { return Tie_skiff_to_ladder_and_board(); } if (location == Poop) { print "If you wish to climb down"; Cast_with_the(ladder); ! not popped print ", say so", (string) Dot_newline_str; rtrue; } return Do_Walk(u_to); } if (action == ##Slice) { if (Ultimately_InP(dagger)) { Cast_with_capital_The(dagger); ! not popped print " isn't sharp enough to cut through"; return Cast_with_the_and_print_dots(ladder); } return HowDoYouDoThat(); } if (action == ##Free) { Cast_with_capital_The(rope); ! not popped print " is tied in too complex a knot", (string) Dot_newline_str; rtrue; } if (action == ##ClimbDown) { if (location == Captains_Quarters) { return YouHaveToFirst("get on",ladder); } Do_Walk(d_to); ! not popped rtrue; } if (action ~= ##Examine || location ~= Captains_Quarters or On_the_Ladder or Poop) rfalse; print (string) Complete_common_str, "rope ", (name) ladder, (string) Dot_newline_str; rtrue; ]; [ EndOfTheBeginning ; print (string) Spacing_str, "Davis leaps across the deck to your side, ~Free me or she dies!~ he yells, jabbing a knife up to your throat. In one smooth motion,"; Cast_with_the(Captain_Jamison); ! not popped print " draws his rapier, pulls you free and stabs. Davis slumps into a bloody heap.^ Swooning, you fall into the Falcon's arms. You are dimly aware of being carried to the other ship, down a short flight of stairs, and laid gently on a soft bed. When you gather strength to look around, the Falcon has left you in peace.^ You remain confined to this room, a large cupboard blocking the door. Meals are brought by a peg-legged old man and eaten in silence. Of your handsome rescuer you see nothing. Slowly the days pass.^"; new_line; print (string) Press_return_str, "continue.]"; new_line; @sread P_inbuf P_lexv; PrintNewlines(10); ! not popped Goto(Captains_Quarters); ! not popped give Crulley ~general_1; give door ~general_2; move Captain_Jamison to Captains_Quarters; give Captain_Jamison ~attrib9; remove coffer; give coffer general_2; give coffer ~locked; give rapier attrib9; give door ~open; rtrue; ]; [ Sleep_action ; if (action ~= ##Take or ##Approach) rfalse; Perform(##Sleep); ! not popped rtrue; ]; [ Ground_action ; if (action == ##Examine) { if (location == In_the_Rigging or Crows_Nest) { print "Looking down at the distant deck is a mistake. Your stomach flips over"; } else if (OnShipP(location)) { print "Well scrubbed and smoothed floorboards make up the deck"; } else if (location == By_the_Ship or Lagoon or Shallows) { print "A sandy bottom shifts under the waves"; } else if (location == Guards_Bunkroom or Cell2) { print "Like the walls and ceiling, rock"; } else if (location == Cell1) { print "The floor is ankle deep in mud"; } else { InterestingAbout(); ! not popped print "about "; if (location has attrib12) { print "the floor"; } else { Cast_with_the(ground); ! not popped } } print (string) Dot_newline_str; rtrue; } if (action == ##Board or ##Climb or ##ClimbOn) { return WrapSub(); } if (action == ##LookUnder) { return FreeSub(); } if (action == ##Leave) { return Do_Walk(u_to); } if (action ~= ##Approach || (~~CheckIfWordUsedToIdentifyObj('deck',ground))) rfalse; if (location == Cabin or Landing or Hold or Galley) { return Do_Walk(out_to); } if (location == Deck or Poop or Quarterdeck or Main_Deck or Forecastle) { print (string) Look_around_you_str; rtrue; } if (location == Crows_Nest or In_the_Rigging) { return Do_Walk(d_to); } if (OnShipP(location)) { return CircleSub(); } return WrapSub(); ]; [ Large_key_action ; if (action ~= ##Take || large_key hasnt trytakebit) rfalse; move large_key to player; give large_key ~trytakebit; ++score; "Taken."; ]; [ Referred_to_door ; if (coffer has attrib9) rfalse; return door; ]; [ Generic_door_action ; if (location == Captains_Quarters) { ReversePerform(curtain); ! not popped rtrue; } if (action == ##LookIn or ##Examine) { if (CheckIfWordUsedToIdentifyObj('lock',ornate_door)) { print "Ladies do not look through keyholes!"; new_line; } else if (noun has open) { print "It is open"; } else { print "It", (string) Is_closed_str; if (location == Quarterdeck) { print " and barred"; } else if (door has general_2) { print ". Or, what remains of it is"; } } SetPronoun(noun); ! not popped print (string) Dot_newline_str; rtrue; } if (action == ##Pick && noun == ornate_door) { "The mechanism is too complex to pick."; } if (action == ##Unbar) { if (location == Upstairs_Hall2) { print "Only one man has the key to this room: Jean Lafond", (string) Dot_newline_str; rtrue; } if (location == Quarterdeck) { Perform(##Open,door); ! not popped rtrue; } if (noun == wooden_door) { print "But"; Cast_with_the(door); ! not popped print " isn't locked", (string) Dot_newline_str; rtrue; } if (second == large_key) { if (noun == iron_door) { give noun ~locked; print "Unlocked", (string) Dot_newline_str; rtrue; } print "That key does not unlock this door", (string) Dot_newline_str; rtrue; } print "You are unable to unlock"; return Cast_with_the_and_print_dots(door); } if (action == ##Lock) { if (noun == iron_door && second == large_key) { give noun locked; print "You "; if (noun has open) { give noun ~open; print "close and "; } print "lock"; return Cast_with_the_and_print_dots(door); } if (second == large_key) { print "That key won't work here", (string) Dot_newline_str; rtrue; } if (noun == french_door) { print (string) You_cant_str, "lock that", (string) Dot_newline_str; rtrue; } return HowDoYouDoThat(); } if (action == ##Knock) { if (location == Upstairs_Hall2 && ornate_door hasnt locked && Lafond in Lafonds_Bedroom) { (name) Lafond, " calls, ~Come.~"; } "Silence answers back."; } if (action ~= ##Open) rfalse; if (location == Cabin) { "It appears to be locked."; } if (location == Landing) { Cast_with_capital_The(door); ! not popped print " won't open", (string) Dot_newline_str; rtrue; } if (location == Quarterdeck) { print "Someone yells from ahead, ~Cap'n 'll have your hide if you go down there!~ You haven't the strength to lift the bar anyway", (string) Dot_newline_str; rtrue; } if (location ~= Veranda_Room || door has open) rfalse; print (string) No_see_str, (string) Way_to_do_that_str; rtrue; ]; [ Ceiling_action ; if (action ~= ##Examine) rfalse; if (location == Crews_Quarters) { print (string) You_can_see_str, " a sail rippling against the night sky through"; return Cast_with_the_and_print_dots(grate); } if (location has attrib12) rfalse; return Cant_see(ceiling); ]; [ Sea_action ; if (location == Lafonds_Bedroom or In_the_Rigging or Bowsprit or Crows_Nest && action ~= ##PlaceOn or ##Insert or ##Throw) { if (action == ##CrawlThru) { print (string) Suicide_str; rtrue; } return YouCantReachThe(sea); } if ((~~InRoomContains(sea,location)) && (~~Ultimately_InP(water,location))) { "There's no water here."; } if (action == ##Examine or ##LookUnder or ##LookIn) { print "The water is sparkling clear", (string) Dot_newline_str; rtrue; } if (action == ##ReachIn) { print "Water", (string) Drips_str; rtrue; } if (action == ##DrinkFrom or ##Drink) { if (noun == water) { print "You take a long draft. It is quite refreshing", (string) Dot_newline_str; rtrue; } print "This water is much too salty to drink", (string) Dot_newline_str; rtrue; } if (action == ##PlaceOn && second == sea) { Perform(##Insert,noun,sea); ! not popped rtrue; } if (action == ##Throw) { if (location == Captains_Quarters && ledge hasnt general_2) { print "But"; Cast_with_the(window1); ! not popped (string) Is_closed_str, "!"; } remove noun; print "You toss"; Cast_noun_with_the(); ! not popped print " into"; return Cast_with_the_and_print_dots(sea); } if (action == ##Soak or ##Insert) { if (noun == missive or invitation) { remove noun; print "It disintegrates quickly into nothing", (string) Dot_newline_str; rtrue; } if (location == Poop or Quarterdeck or Forecastle or Bowsprit or Captains_Quarters) { Perform(##Throw,noun,sea); ! not popped rtrue; } if (location == Main_Deck) { if (second == sea) { Perform(##Throw,noun,sea); ! not popped rtrue; } Perform(##Insert,noun,water_barrel); ! not popped rtrue; } if (location == Beach or Shallows or Lagoon or By_the_Ship) { if (noun == rag or cotton_frock) { return SoakItem(); } print "You dip"; Cast_noun_with_the(); ! not popped print " into the water", (string) Dot_newline_str; rtrue; } print (string) You_cant_str, "reach any water", (string) Dot_newline_str; rtrue; } if (action == ##Swim or ##CrawlThru or ##Board) { if (location == Beach) { return Do_Walk(e_to); } return SwimSub(); } if (~~PhysicallyTouchVerbP(sea)) rfalse; print "The cool water runs through your fingers", (string) Dot_newline_str; rtrue; ]; [ Sky_action ; if (location hasnt attrib12) rfalse; return Cant_see(sky); ]; [ Moonbeam_action ; if (location has attrib12 && location ~= Crews_Quarters or Captains_Quarters or Bedroom && location ~= Lafonds_Bedroom && action ~= ##TellAbout or ##AskAbout) { print (string) You_cant_str, "see the moon from here", (string) Dot_newline_str; rtrue; } if (action ~= ##Examine) rfalse; "A dusty moonbeam swirls down from the sky."; ]; [ Your_hand_action local1 ; if (action == ##Applaud) { noun = nothing; return ApplaudSub(); } if (action == ##Shake) { local1 = FindIn(location,animate,"with"); if (local1) { Perform(##Shake,your_hand,local1); ! not popped rtrue; } "Pleased to meet you."; } if (action == ##Clean) { "Done."; } if (action ~= ##TakeFrom || second ~= your_hand) rfalse; Perform(##Take,noun); ! not popped rtrue; ]; [ Your_eyes_action ; if (action == ##Close) { print "You blink", (string) Dot_newline_str; rtrue; } if (action == ##Open) { "They are open!"; } if (action ~= ##LookIn or ##Examine || (~~CheckCorrectAdjectives('his')) || Captain_Jamison notin location) rfalse; print (string) Jamison_contact_tbl-->3; new_line; rtrue; ]; [ Your_mouth_action ; if (action == ##Open or ##CrawlThru or ##PlaceOn or ##Examine or ##Pour or ##Dry or ##Insert) { if (CheckCorrectAdjectives('croc^') || CheckCorrectAdjectives('crocodile') || CheckIfWordUsedToIdentifyObj('snout',your_mouth)) { ReversePerform(noun,crocodile); ! not popped rtrue; } if (CheckCorrectAdjectives('lafond')) { return ReversePerform(noun,Lafond); } if (second ~= your_mouth) rfalse; Perform(##Eat,noun); ! not popped rtrue; } if (action ~= ##Open) rfalse; if (FindDaemon(JamisonInFollyDaemon)) { "Jamison will do that for you."; } "You fail to stifle a yawn."; ]; [ Player_action ; if ((~~Person_to_refuse) || MetaVerbP()) rfalse; if (action == ##No || (AttackVerbP() && Person_to_refuse == noun or second)) { Assorted_situations_FIGURE_OUT_LATER = 65535; } else if (action == ##Nod || FriendlyVerbP()) { Assorted_situations_FIGURE_OUT_LATER = 1; } else { Assorted_situations_FIGURE_OUT_LATER = 0; } Person_to_refuse = nothing; rfalse; ]; [ FriendlyVerbP ; if (action == ##ClimbOn or ##Applaud or ##Give or ##ComeWith or ##Dance or ##FeedWith or ##Bow or ##Kiss or ##Hello or ##Lauch or ##Marry or ##ILove or ##Hug or ##Touch or ##Rescue or ##Approach or ##Thank or ##ShowReverse or ##Show or ##MakeOut or ##MakeLove) rtrue; if (action ~= ##Tell || (~~Confirmation(P_lexv-->P_alt_cont))) rfalse; rtrue; ]; [ AttackVerbP ; if (action == ##Burn or ##Bite or ##Attack or ##Rape or ##Kick or ##Destroy or ##Yell or ##Swing or ##Shake) rtrue; if (action ~= ##Tell || (~~Negative(P_lexv-->P_alt_cont))) rfalse; rtrue; ]; [ MetaVerbP ; if (action == ##QuitGame or ##Restore or ##Save or ##Superbrief or ##Brief or ##Verbose or ##Version or ##Unscript or ##Script or ##DebugReco or ##DebugComm or ##DebugPredictable or ##DebugUnReco or ##Verify or ##Score or ##Help) rtrue; rfalse; ]; [ Pseudo_action ; if (action == ##Tell) { print "You'll end up in Bedlam, talking to ", (name) yourself, " that way."; new_line; return Clear_itbl(); } if (action == ##Give && second == yourself) { Perform(##Take,noun); ! not popped rtrue; } if (action == ##TakeFrom && second == man) { return DontRecognizeSentence(); } if (action == ##Show && second == yourself) { Perform(##Examine,noun); ! not popped rtrue; } if (action == ##Move) { return CircleSub(); } if (action == ##Search) { InventorySub(); ! not popped rtrue; } if (action == ##Wake && Ultimately_InP(smelling_salts)) { Perform(##Smell,smelling_salts); ! not popped rtrue; } if (action == ##Dress) { Perform(##GetDressed,Room_Holder); ! not popped rtrue; } if (action == ##Examine) { if (FindDaemon(LafondSeductionDaemon) && Lafond_seduction_cnt > 10) { return InventorySub(); } print "You are wearing"; if (Disguised_as_boy) { Article(shirt); ! not popped " and ", (name) breeches, ". Mama herself would think you a plump boy."; } if (cotton_frock has worn) { Article(cotton_frock); ! not popped ", very pretty, if a tad outmoded for today's fashions."; } if (beautiful_ball_gown has worn) { Article(beautiful_ball_gown); ! not popped " of creamy watered silk."; } if (shirt has worn) { Article(shirt); ! not popped print (string) Over_your_chemise_str; rtrue; } if (breeches has worn) { Article(breeches); ! not popped print (string) Over_your_chemise_str; rtrue; } if (linen_chemise has general_3) rfalse; print " absolutely nothing besides"; Article(linen_chemise); ! not popped print ", ", (name) your_kid_slippers, " and a few layers of ", (name) unmentionables, ". ", (string) Mama_shocked_str; rtrue; } if (action == ##Shoot or ##Destroy or ##Attack or ##Shoot) { print (string) Suicide_str; rtrue; } if (action == ##Where or ##Find) { print "You're in"; return Cast_with_the_and_print_dots(location); } if (action == ##ComeWith) { "Next time, please specify who you wish to follow."; } if (action ~= ##Hug or ##Kiss) rfalse; print "Mama warned you of the dangers of onanism", (string) Dot_newline_str; rtrue; ]; [ Room_action ; if (action == ##Examine or ##LookIn or ##Look) { return LookSub(); } if (action == ##Approach or ##CrawlThru) { return CircleSub(); } if (action == ##ClimbOut or ##Exit or ##Leave) { return Do_Walk(out_to); } if (action == ##Search) { if (location == Cabin && (~~FindDaemon(Ship_lurches_timer)) && (~~Ultimately_InP(coffer))) { Perform(##LookUnder,bed3); ! not popped rtrue; } print (string) Reveals_nothing_str; rtrue; } if (action ~= ##Insert || second ~= room) rfalse; if (P_initial_word == 'throw') { Perform(##Throw,noun); ! not popped rtrue; } Perform(##Drop,noun); ! not popped rtrue; ]; [ Mansion_action ; if (action == ##Board or ##Approach or ##CrawlThru) { if (location == Main_Entrance) { return Do_Walk(s_to); } if (location == Trade_Entrance) { return Do_Walk(e_to); } if (location == Veranda_Room or Lawn) { return Do_Walk(n_to); } if (location == By_the_House) { return Do_Walk(w_to); } (string) You_cant_str, "do that from here."; } if (action == ##ClimbOut or ##Leave or ##Exit) { if (location == Kitchen) { return Do_Walk(w_to); } if (location == Foyer) { return Do_Walk(n_to); } if (location == Ballroom) { return Do_Walk(s_to); } if (location == Library) { return Do_Walk(e_to); } if (location == Bedroom) { return Do_Walk(d_to); } print (string) Look_around_you_str; rtrue; } if (action == ##LookIn) { if (location == Main_Entrance or Trade_Entrance or Lawn or By_the_House) { print (string) Cant_do_that_from_here_str; rtrue; } return LookSub(); } if (action ~= ##Examine) rfalse; if (location == Crews_Quarters) { print "Bathed in moonbeams and candlelight, the house squats at the crest of a cliff. The upstairs window is dark", (string) Dot_newline_str; rtrue; } if (OnShipP(location) && (~~UnderDecksP(location)) || location == Beach) { print (string) You_cant_str, "make out much of the house from this angle", (string) Dot_newline_str; rtrue; } if (UnderDecksP(location) || UndergroundP(location) || location == Forest or Folly_Room or In_the_Hedge) { print (string) No_see_str, "house here", (string) Dot_newline_str; rtrue; } if (location == Front_Drive or Main_Entrance or Lawn or Trade_Entrance or Clearing or Veranda_Room) { print "An entrance to"; Cast_with_the(mansion); ! not popped print " is nearby", (string) Dot_newline_str; rtrue; } return LookSub(); ]; [ MoveAroundShip ; if (cotton_frock has worn || beautiful_ball_gown has worn) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped print "In these clothes? You jest", (string) Dot_newline_str; rfalse; } if (P_walk_dir == u_to) { if (location == Clearing) { print "You take a firm grasp on a particularly thick tendril, jerk once to secure it, and scamper up the wall like some huge tropical spider. It is easy to climb through the window", (string) Dot_newline_str; new_line; return Bedroom; } if (location == Captains_Quarters) { if (~~Rope_ladder_twisting_in_breeze) { print (string) Cant_go_str; rfalse; } if (Poop hasnt visited) { if (parent(player) == ledge) { YouHaveToFirst("be holding",ladder); ! not popped rfalse; } YouHaveToFirst("get on",ledge); ! not popped rfalse; } print "You dash up"; Cast_with_the_and_print_dots(ladder); ! not popped new_line; return Poop; } if (location == Main_Deck or Forecastle) { Entered_rigging_from = location; if (parent(dagger) == player) { print "You bite down on"; Cast_with_the(dagger); ! not popped print ", freeing ", (name) your_hand, "s to climb. When you stop, you take it back again. "; } print "The wind, a mere breeze on the deck, blows more fiercely", (string) Dot_newline_str; new_line; return In_the_Rigging; } if (In_the_Rigging == location) { if (Entered_rigging_from == Forecastle) { print "You clamber up"; Cast_with_the_and_print_dots(rigging); ! not popped new_line; return Crows_Nest; } print "Above you there only appears to be more of the same, except higher, and you can not vouch for the effects on your stomach", (string) Dot_newline_str; rfalse; } if (location == On_the_Ladder) { if (Poop hasnt visited) { ++Rope_ladder_climb_cnt; if (Rope_ladder_climb_cnt ~= 4) { print "You climb up"; Cast_with_the(ladder); ! not popped if (Rope_ladder_climb_cnt == 2) { print ", passing the halfway point"; } print (string) Dot_newline_str; rfalse; } print "You heave ", (name) yourself, " over the stern rail and sink breathless to the deck of"; Cast_with_the_and_print_dots(Helena_Louise); ! not popped new_line; Unqueue(ClimbingRopeLadderDaemon); ! not popped return Poop; } print "You dash up"; Cast_with_the_and_print_dots(ladder); ! not popped new_line; return Poop; } if (location ~= By_the_Ship) rfalse; Tie_skiff_to_ladder_and_board(); ! not popped rfalse; } if (P_walk_dir ~= d_to) rfalse; if (location == Bedroom) { print "Absently, you slide down"; Cast_with_the(vine); ! not popped print ". You're getting quite adept at clambering about", (string) Dot_newline_str; new_line; return Clearing; } if (location == Crows_Nest or In_the_Rigging) { print "You half-climb, half-fall, down to the deck", (string) Dot_newline_str; new_line; return Entered_rigging_from; } if (location == Poop) { print "You climb down to opposite"; Cast_with_the_and_print_dots(ledge); ! not popped new_line; return On_the_Ladder; } if (location ~= On_the_Ladder) rfalse; if (Skiff_tied_to_ladder) { Skiff_tied_to_ladder = false; print "Freeing your feet from the rungs, you slide down the wet rope to the skiff, and quickly untie it from the ship", (string) Dot_newline_str; new_line; return By_the_Ship; } print "A watery grave awaits you that way."; new_line; rfalse; ]; [ Fire_action ; if (action == ##BlowOut) { return FreeSub(); } if (action == ##PlaceOn or ##Insert or ##Light or ##Throw) { Perform(##Burn,noun,fire); ! not popped rtrue; } if (action == ##TellAbout) rfalse; return NoNeedForThat(); ]; [ Stair_action ; if (action == ##Climb) { if (location == Main_Deck) { return Do_Walk(n_to); } return Do_Walk(u_to); } if (action == ##ClimbDown) { return Do_Walk(d_to); } if (action == ##Throw && second == stair) { return WrapSub(); } if (action ~= ##Examine) rfalse; if (location == Hold) { print "Steep stairs mount up to"; return Cast_with_the_and_print_dots(canvas_hatch); } if (location ~= Main_Deck) rfalse; if (canvas_hatch has open) { print (string) Stairs_down_str, "down from "; Cast_with_the(canvas_hatch); ! not popped print ". Another leads"; } else { Cast_with_capital_The(stair); ! not popped print " lead"; } print " to the foredeck", (string) Dot_newline_str; rtrue; ]; [ Generic_bed_action rarg bed_ob where ; if (rarg) { if (rarg ~= M_HANDLED) rfalse; if (action ~= ##Go) { if ((~~noun) || action ~= ##Take || noun == gold_ring or new_ring || noun in globals) rfalse; where = parent(player); if (where == parent(noun)) rfalse; } YouHaveToFirst("stand up"); ! not popped return invalidEnum8; } if (action == ##Rtand or ##ClimbOut && Lafond in bed4) { print "Lafond slams you back into the feather mattress", (string) Dot_newline_str; rtrue; } if (action == ##Board or ##CrawlThru && parent(player) == Lafonds_Bedroom && Lafond in location) { (name) Lafond, " stops you. ~I'll tell you when to do that.~"; } if (action == ##Examine) { if (location == Cabin) { bed_ob = bed3; } else if (location ~= Captains_Quarters) { bed_ob = nothing; } else { bed_ob = bed1; } if (bed_ob && child(bed_ob) == nothing) { print "Someone appears to have tumbled out of it in a hurry"; } else if (location == Lafonds_Bedroom) { print "You gaze at the purple and gold bed, fearing it is your destiny"; } else { if (location ~= Guards_Bunkroom) rfalse; print "It is an uncomfortable canvas cot, old and torn"; } print (string) Dot_newline_str; rtrue; } if (action == ##LookUnder) { if (FindDaemon_or_Timer(Ship_lurches_timer)) { print (string) You_can_see_str; Article(coffer); ! not popped print ' '; give coffer ~attrib9; give coffer visited; } else { print (string) There_is_nothing_str; } print "under"; return Cast_with_the_and_print_dots(noun); } if (action == ##Push or ##Move) { print "It is nailed to the floor", (string) Dot_newline_str; rtrue; } if (action ~= ##PushUnder || location ~= Captains_Quarters or Cabin) rfalse; if (noun == yourself) { Perform(##DuckUnder,bed3); ! not popped rtrue; } if (noun == your_reticule) rfalse; print "You do so, but the ship rolls to one side and"; Cast_noun_with_the(); ! not popped print " rolls out", (string) Dot_newline_str; move noun to location; rtrue; ]; [ Curtain_action ; if (action == ##Fiddle or ##Move or ##Open or ##LookBehind) { print (string) You_pull_cloth_str, " Behind it,"; Article(large_cupboard); ! not popped " mostly blocks the doorway."; } if (action == ##Close) { print (string) Already_is_str; rtrue; } if (action ~= ##Approach or ##Go) rfalse; print "Please indicate a ", (name) direction, (string) Dot_newline_str; rtrue; ]; [ Generic_window_action ; if (action == ##Open) { if (window1 hasnt open) { if (location == Cabin) { print "This isn't the opening kind of porthole", (string) Dot_newline_str; rtrue; } if (location == Captains_Quarters) { print "These windows don't open", (string) Dot_newline_str; rtrue; } if (location == Library or By_the_House) { return OpenOrClose(window2); } print "That's not necessary", (string) Dot_newline_str; rtrue; } print "It's already open", (string) Dot_newline_str; rtrue; } if (action == ##Close) { if (location == Library or By_the_House) { return OpenOrClose(window2); } print (string) Beautiful_night_str; rtrue; } if (action == ##Examine) { if (location == Cabin) { print "Through the porthole you see the bow of the pirate ship bucking in the high seas, lit by the fires burning on deck. It is called the ~", (name) Helena_Louise, ".~ Odd, that was your mother's name", (string) Dot_newline_str; rtrue; } if (location == Captains_Quarters) { Perform(##Examine,ledge); ! not popped rtrue; } if (location ~= Library or By_the_House) rfalse; print (string) You_can_see_str, (string) Only_darkness_str; return Cast_with_the_and_print_dots(window1); } if (action == ##LookIn) { if (Cabin == location) { Perform(##Examine,window1); ! not popped rtrue; } if (location == Captains_Quarters) { if (Rope_ladder_twisting_in_breeze) { QueueInterrupt(RopeTwistsInWindDaemon,2); ! not popped print "A rope ", (name) ladder, " twists by in the breeze, and the"; } else { print "The"; } print " moon beckons across the lagoon to ", (name) St_Sinistra; if (Skiff_tied_to_ladder) { print ". Moored to the stern is"; Article(skiff2); ! not popped } print '.'; Ship_draws_closer_to_shore_timer(false); ! not popped new_line; rtrue; } if (location == Library or By_the_House) { Perform(##Examine,window2); ! not popped rtrue; } if (location == Bedroom) { print "It has a lovely view of grey-green palm trees extending for miles", (string) Dot_newline_str; rtrue; } print (string) You_can_see_str, (string) Only_darkness_str; return Cast_with_the_and_print_dots(window1); } if (action == ##Destroy) { if (~~second) { return HowDoYouDoThat(); } if (second == coffer) { Perform(##PutThrough,coffer,window1); ! not popped rtrue; } if (location == Captains_Quarters) { print (string) Have_to_str, "find something else to break"; Cast_with_the(window1); ! not popped print " with", (string) Dot_newline_str; rtrue; } "Then again, a lady would just open it."; } if (action == ##Attack) { if (~~second) { print "You haven't the strength to damage"; return Cast_with_the_and_print_dots(window1); } Perform(##Destroy,noun,second); ! not popped rtrue; } if (action == ##Insert or ##PutThrough or ##Throw) { if (location == Cabin) { if (action == ##Throw) { return ThrowSub(); } print "It doesn't fit through the porthole", (string) Dot_newline_str; rtrue; } if (noun == coffer) { if (Captain_Jamison in location) { "Jamison stops you, ~Nay, lady, glass is expensive.~"; } remove noun; give ledge general_2; ++score; print "You hurl"; Cast_with_the(coffer); ! not popped print " through"; Cast_with_the(window1); ! not popped print ", sending it and a shower of glass into the sea. "; Cast_with_capital_The(ledge); ! not popped print " now looks deep enough to sit upon", (string) Dot_newline_str; rtrue; } if (ledge hasnt general_2 && location == Captains_Quarters) { Cast_with_capital_The(window1); ! not popped print " isn't open", (string) Dot_newline_str; rtrue; } if (noun == your_hand) { print (string) Pardon_str; rtrue; } return ThrowThingOutWindow(); } if (action ~= ##ClimbOut or ##Exit or ##CrawlThru or ##Board or ##DiveOut) rfalse; if (location == Cabin) { return FreeSub(); } if (parent(player) == Captains_Quarters) { ReversePerform(ledge); ! not popped rtrue; } if (location == Library) { return Do_Walk(e_to); } if (location == By_the_House) { return Do_Walk(w_to); } if (location == Bedroom) { return Do_Walk(d_to); } return WrapSub(); ]; [ ThrowThingOutWindow ; if (location == Captains_Quarters && ledge hasnt general_2) { print "The window isn't open", (string) Dot_newline_str; rtrue; } if (noun == your_reticule) rfalse; PrintPronoun(); ! not popped print " fall"; if (noun hasnt plural) { print 's'; } if (location == Captains_Quarters) { remove noun; print " into the seas below"; } else if (location == Bedroom) { move noun to Clearing; print " onto the forest floor"; } else if (location == Library or Lafonds_Bedroom) { move noun to By_the_House; print " into the darkness of the hedge"; } else if (location == By_the_House) { move noun to Library; print " with a thunk over", " the edge of"; Cast_with_the(window2); ! not popped } print (string) Dot_newline_str; rtrue; ]; [ OpenOrClose itm open_msg close_msg ; if (action == ##Move or ##Raise or ##Open) { if (itm has open) { if (itm has plural) { print "They are"; } else { print "It is"; } " already open."; } give itm open; give itm visited; if (open_msg) { (string) open_msg, "."; } if (itm == large_cupboard && location ~= Sleeping_Cupboard) { print "Opened. "; Perform(##LookIn,large_cupboard); ! not popped rtrue; } if (child(itm) == nothing || itm has transparent || itm has door) { "Opened."; } print "Opening"; Cast_with_the(itm); ! not popped print " reveals"; if (PlayerInsideNoun()) rtrue; print '.'; rtrue; } if (action ~= ##Close) rfalse; if (itm hasnt open) { if (itm has plural) { print "They are"; } else { print "It is"; } print " already closed", (string) Dot_newline_str; rtrue; } give itm ~open; if (itm == pair_of_manacles) { give itm locked; } if (close_msg) { (string) close_msg, "."; } print "Shut."; if (noun == large_cupboard && Sleeping_Cupboard == location) { " You imagine Jamison being lulled to sleep by the waves lapping against the ship."; } new_line; rtrue; ]; [ Tree_action ; if (action ~= ##Climb) rfalse; "The trees are all unclimbable."; ]; [ PhysicallyTouchVerbP obj ; if (noun == obj && action == ##Wake or ##Bite or ##Board or ##Clean or ##CrawlOver or ##DuckUnder or ##Climb or ##ClimbDown or ##ClimbOn or ##Slice or ##Dance or ##Hug or ##CrawlThru or ##Fiddle or ##Kick or ##Attack or ##Kiss or ##Knock or ##LookUnder or ##LookIn or ##Move or ##Destroy or ##Dry or ##Light or ##BlowOut or ##Open or ##Close or ##Pick or ##Push or ##Raise or ##Turn or ##StandOn or ##Swim or ##Tie or ##Throw or ##Rape or ##Take or ##Touch or ##Shake or ##Unbar or ##Lock or ##Free) rtrue; if (second ~= obj) rfalse; if (action == ##PlaceOn or ##Insert or ##Give or ##PushUnder) rtrue; rfalse; ]; [ Cant_see obj who ; who = P_noun_names-->((noun == obj) ? 0 : 1); if (~~who) { who = P_adjectives-->((noun == obj) ? 0 : 1); } P_won = false; print (string) You_cant_str, "see"; if (obj && (~~QueryActorName(who))) { print " any"; } if (obj == second) { Prsi_Print(); ! not popped } else { Prso_Print(); ! not popped } print " here."; new_line; return Clear_itbl(); ]; [ YouCantWhatANoun w ; print (string) You_cant_str, (string) w; Article(noun); ! not popped "!"; ]; [ KnockyourBrowAgainst ; print "You knock your brow against"; Cast_noun_with_the(); ! not popped " as you attempt this."; ]; [ CheckIfWordUsedToIdentifyObj w obj ; if (noun == obj && P_noun_names-->0 == w) rtrue; if (second ~= obj) rfalse; if (P_noun_names-->1 == w) rtrue; rfalse; ]; [ CheckCorrectAdjectives n1 n2 ; n2 = P_adjectives-->0; if (n1 == n2 or P_adjectives-->1) rtrue; rfalse; ]; [ QueryLedgeOrBranch obj ; if (obj == ledge or bench) rtrue; rfalse; ]; [ PrintOpenOrClosed obj vowelp ; if (obj has open) { if (vowelp) { print 'n'; } print " open"; rtrue; } print " closed"; rtrue; ]; [ WasntThatFun ; Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Wasn't that fun?"; ]; [ CameWithGamePackage ; print " that came in your game package.^"; rtrue; ]; [ YouCantReachThe obj ; print (string) You_cant_str, "reach"; Cast_with_the(obj); ! not popped if (player notin location) { print " from"; Cast_with_the(parent(player)); ! not popped } print (string) Dot_newline_str; rtrue; ]; [ YouHaveToFirst msg obj ; print (string) Have_to_str, (string) msg; if (obj) { Cast_with_the(obj); ! not popped } " first."; ]; [ ItIsntOnOrIn ; print "But"; Cast_noun_with_the(); ! not popped print " isn't "; if (second has animate) { print "being held by"; } else if (second has supporter) { print "on"; } else { print "in"; } return Cast_with_the_and_print_dots(second); ]; [ YouGetASore what ; print "You begin to get a sore ", (string) what, (string) Dot_newline_str; rtrue; ]; [ YouCantUseItThatway what ; '[', (string) You_cant_str, "use ", (string) what, " that way.]"; ]; [ DontRecognizeSentence ; P_won = false; print "[That sentence isn't one I recognize.]^"; rtrue; ]; [ PrintPronoun ; if (noun == yourself) { print "You"; rtrue; } if (noun has plural) { print "They"; rtrue; } if (noun == Lucy) { print "She"; rtrue; } if (noun has animate) { print "He"; rtrue; } print "It"; rtrue; ]; [ DontSeeReferredtothing local1 ; print "I don't see wh"; if (local1) { print 'o'; } else { print "at"; } " you're referring to."; ]; [ NoOneHereTo w ; print "There's no one here to ", (string) w, (string) Dot_newline_str; rtrue; ]; [ ReferToManualTo str ; "[See the instruction manual section entitled ~Communicating With Infocom's Interactive Fiction.~ to properly ", (string) str, "]"; ]; [ NoNeedForThat ; "You have no need for that, milady."; ]; [ HowDoYouDoThat ; Question_cnt = Q_NOT_A_YES_NO_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "And how do you propose to do that?"; ]; [ AbsolutelyRefuseJamison ; if (FindDaemon(JamisonDancesWithYouDaemon)) { Dancer_requesting_dance = nothing; return Unqueue(JamisonDancesWithYouDaemon); } if (~~FindDaemon(JamisonInFollyDaemon)) rfalse; return Unqueue(JamisonInFollyDaemon); ]; [ WellBred local1 ; (string) local1, " is not in the repertoire of well-bred young ladies."; ]; [ UnladylikeToHitWhenDown ; (string) Unladylike_str, "hit a man when he's down!"; ]; [ NoTimeFor msg ; print "This is no time to ", (string) msg, "!^"; rtrue; ]; [ UseSub ; (string) Have_to_str, "be more specific."; ]; [ YourWhatWontHurtCrulley what ; print "Your ", (string) what, " could not hurt"; return Cast_with_the_and_print_dots(Crulley); ]; [ SailorNoticesYouAreAWoman ; print (string) Spacing_str, "A sailor notices "; if (breeches has worn) { print "the roundness of your body through the lace of your chemise"; } else { print "the ~swish~ of your petticoats"; } print ". ~A woman,~ he gasps, ~free, aboard this ship!~"; new_line; return JigsUp(" It's been rather a long time since any of the crew have dealt with the fairer sex, and they are a bit rough, despite Rodney Quick's exhortations."); ]; [ NeedFathersPermission w ; "A lady must obtain her father's permission before ", (string) w, " anyone."; ]; [ FigureOutYourself ; print (string) Have_to_str, "figure that out ", (name) yourself, (string) Dot_newline_str; rtrue; ]; [ VillagersNotAdmitted ; print (string) Spacing_str; if (location == East_Hallway) { print "A black-garbed ", (name) butler; } else { Cast_with_capital_The(butler); ! not popped } print " marches up to you, ~It was made clear at the whippings that villagers are not admitted in this house.~ He grasps you by the scruff of the neck and propels you headfirst out the front door", (string) Dot_newline_str; new_line; return Goto(Main_Entrance); ]; [ DuelistsMeet ; if (FindDaemon(DuelWithCrulleyDaemon) && Crulley_alone_with_you_timer == 10) { QueueInterrupt(DuelWithCrulleyDaemon,2); ! not popped } move Captain_Jamison to Gallery; move Lafond to Gallery; move your_father to Gallery; move Lucy to Gallery; Various_duel_or_ship_or_dance_counters = 1; QueueInterrupt(TheDuelDaemon,65535); ! not popped give rapier attrib9; give Ballroom ~general_3; print (string) Spacing_str, "Nick kisses you briefly, a butterfly touching your lips,"; if (Meta_Loc(rapier) == location or Corner or Cell2) { move rapier to Captain_Jamison; print " then seizes his rapier"; } print " and runs off to the north. Cookie calls a breathless ~Hullo, Cap'n~ to him as he races past", (string) Dot_newline_str; rtrue; ]; [ Helena_Louise_action ; if (action == ##Examine) { if (OnShipP(location)) { return LookSub(); } if (location == Cabin or Deck) { if (CheckCorrectAdjectives('helena') || CheckIfWordUsedToIdentifyObj('louise',Helena_Louise)) { Perform(##LookIn,window1); ! not popped rtrue; } return LookSub(); } if (location == Guards_Bunkroom or Cell1 or Lafonds_Bedroom or Beach or Lagoon or Shallows) { if (Helena_Louise has general_2) { print (string) You_cant_str, "see"; Cast_with_the(Helena_Louise); ! not popped print " anywhere, but a lot of debris floats in the lagoon", (string) Dot_newline_str; rtrue; } Cast_with_capital_The(Helena_Louise); ! not popped print " floats, silent and serene, some distance out in the lagoon", (string) Dot_newline_str; rtrue; } print (string) You_cant_str, "see"; Cast_with_the(Helena_Louise); ! not popped " from here."; } if (action == ##Point) { if (second) rfalse; return HowDoYouDoThat(); } if (action ~= ##Insert || noun ~= bit_of_mirror or silver_tray) rfalse; return FreeSub(); ]; [ Referred_to_boat ; if (InRoomContains(quarters,location)) { return quarters; } if (parent(skiff2) ~= location) { return Helena_Louise; } return skiff2; ]; [ Debris_action ; if (Helena_Louise hasnt general_2) { (string) No_see_str, (name) debris, " here!"; } if (action == ##LookIn or ##Search or ##Examine) { print (string) Spacing_str, (string) ComplexPickOne(Random_stuff_in_debris); if (location == Beach or Shallows) { "bobs briefly in the waves."; } "floats by you."; } if (action ~= ##Take) rfalse; print "You reconsider, thinking of"; Cast_with_the(Helena_Louise); ! not popped " as it was, whole and proud."; ]; [ OnShipP where ; if (where == Captains_Quarters or Landing or Sleeping_Cupboard or Aft_Hold or Hold or Crews_Quarters or Poop or Quarterdeck or Main_Deck or Forecastle or Galley or Bowsprit or Crows_Nest or By_the_Ship or On_the_Ladder or In_the_Rigging) rtrue; rfalse; ]; [ UnderDecksP where ; if (where == Sleeping_Cupboard or Landing or Aft_Hold or Hold or Crews_Quarters or Galley) rtrue; rfalse; ]; [ Cabin_out_dir ; if (Captain_Jamison in location) { if (Various_duel_or_ship_or_dance_counters > 3) { Unqueue(JamisonRescuesYouTimer); ! not popped Unqueue(PirateAttack_daemon); ! not popped print (string) The_pirate_captain_str, "follows you through"; Cast_with_the_and_print_dots(door); ! not popped new_line; return Deck; } print (string) A_sinewy_arm_str; new_line; rfalse; } if (Captain_Jamison in Deck) { return Deck; } if (Crulley in location) { print "~Not that way, me pretty,~ says"; Cast_with_the(Crulley); ! not popped print ", blocking your way", (string) Dot_newline_str; rfalse; } Cast_with_capital_The(door); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; SetPronoun(door); ! not popped rfalse; ]; [ Deck_action rarg ; if (rarg == M_LOOK) { move Captain_Jamison to location; print "The deck is an avalanche of noise and blood. Lit by roaring fires, silhouetted forms crash swords, dancing around the screaming wounded."; rtrue; } if (rarg ~= M_ENTER) rfalse; return QueueInterrupt(EndOfTheBeginning,1); ]; [ Coffer_action ; if (action == ##Examine) { print "It is a small heavy chest, with a "; if (coffer has general_2) { print "smashed "; } print "lock. It is"; PrintOpenOrClosed(noun); ! not popped print ".^"; rtrue; } if (action == ##Take) { if (noun ~= coffer) rfalse; if (coffer hasnt attrib9) { give coffer takeable; Unqueue(Ship_lurches_timer); ! not popped move coffer to player; give coffer ~attrib9; "Taken."; } print (string) Pardon_str; rtrue; } if (action == ##Destroy && noun == window1) { Perform(##PutThrough,coffer,window1); ! not popped rtrue; } if (action == ##StandOn or ##Board) { Cast_with_capital_The(coffer); ! not popped " is too small to stand on."; } if (action ~= ##Shake || coffer hasnt locked) rfalse; print "It seems to be full of small, heavy objects", (string) Dot_newline_str; rtrue; ]; [ Missive_action ; if (action ~= ##Examine or ##Browse) rfalse; Cast_with_capital_The(missive); ! not popped print " is in dear Papa's handwriting:^^~Dearest child,^ You are in gravest danger! Lafond is a viper with the smile of a saint, my most particular enemy. I have only now learned the depth of his deception. Should Lafond get you in his power... It is unspeakable!^ I have sided with Nicholas Jamison, a sea captain and a gentleman, whose circumstances have driven him to extreme measures, even branding him a pirate. Nevertheless, I trust him and so may you.^ You will be safe -- but there is another for whom I fear! My horse is waiting and I ride to her rescue. Jamison will deliver this to you. Should anything happen to me, you must rely on him. I remain, with love,"; Cast_with_the(your_father); ! not popped print ".~"; new_line; new_line; rtrue; ]; [ Invitation_action ; if (action == ##Examine or ##Browse) { Cast_with_capital_The(invitation); ! not popped print " is addressed to ~Davis~:^^ In Honor of Jean Lafond,^ recently proclaimed^ Governor of ", (name) St_Sinistra, "^ A Dance at his Mansion^ Ananas Road, ", (name) St_Sinistra, "^Formal Dress and Invitation Required", (string) Dot_newline_str; new_line; if (invitation has general_2) rfalse; give invitation general_2; (string) Spacing_str, "A ball! You haven't been to a ball in months!"; } if (action ~= ##FeedWith or ##ShowReverse || noun ~= butler) rfalse; Perform(##Give,invitation,butler); ! not popped rtrue; ]; [ Ship_lurches_timer ; if (Ultimately_InP(coffer)) rfalse; give coffer ~attrib9; give coffer takeable; SetPronoun(coffer); ! not popped print (string) Spacing_str, "Suddenly, the ship lurches to one side, throwing you "; if (parent(player) == bed3) { move player to location; print "out of the bed. "; } else { print "off balance. "; } if (coffer has visited) { Cast_with_capital_The(coffer); ! not popped } else { print "A ", (name) coffer, " slides from under the bed and"; } " bumps against your foot."; ]; [ Captains_Quarters_action rarg ; if (rarg == M_ENTER) { if (ledge in On_the_Ladder) { move ledge to Captains_Quarters; rtrue; } if (Captains_Quarters has visited) rfalse; move player to bed1; Various_duel_or_ship_or_dance_counters = 0; QueueInterrupt(JamisonFirstTalksToYouDaemon,2); ! not popped print "TWO DAYS LATER", (string) Dotdotdot_str, (string) Spacing_str, "You blear awake from a bored nap, focusing on something shiny. You discern it to be"; Article(new_ring); ! not popped print ", on a strong hand in the act of tying a ribbon onto"; Cast_with_article_and_print_dots(rapier); ! not popped print (string) Spacing_str, "The man with"; Cast_with_the(rapier); ! not popped print " and the ring turns, ~Sorry, I tried not to wake you.~ You sit up as if the bed had caught fire, for this is the Falcon, changed from his rags to a finery all red velvet and white lace -- and in your presence!"; new_line; new_line; rtrue; } if (rarg ~= M_LOOK) rfalse; if (location hasnt general_2) { give location general_2; print "You are in the captain's ", (name) quarters, " of the ", (name) Helena_Louise, ", where you have been trapped these past days since your ~rescue~ from the Lafond Deux. "; } print "The room has a masculine air, with ebony panelling, a large messy table, and a rumpled bed"; if (parent(player) == bed1) { print " (upon which you lie)"; } print ". A curtain masks the forward exit and "; if (ledge has general_2) { print "air breezes in over the ledge"; } else { print "gilded woodwork decorates the sill of the tall window looking"; } print " aft."; rtrue; ]; [ Jamison_leaves_ship_timer ; if (location == Captains_Quarters) { print (string) Spacing_str, "Men clomp about overhead and a rope ladder unfurls itself past the window. Jamison climbs down it, entering"; Cast_with_the(skiff2); ! not popped print " that awaits him below. He rows to the island as the men above ", (name) your_head, " disperse, calling farewells to their captain", (string) Dot_newline_str; } skiff_distance_from_shore = 1; Skiff_tied_to_ladder = false; remove Captain_Jamison; Rope_ladder_twisting_in_breeze = true; return QueueInterrupt(RopeTwistsInWindDaemon,65535); ]; [ RopeTwistsInWindDaemon ; if (location == Captains_Quarters) { QueueInterrupt(RopeTwistsInWindDaemon,65535); ! not popped if (40 < random(100)) rfalse; print (string) Spacing_str, "The end of a rope ladder blows "; if (parent(player) == bed1 or Captains_Quarters) { "past the window."; } "by."; } return Unqueue(RopeTwistsInWindDaemon); ]; [ Desk_action ; return NoNeedForThat(); ]; [ On_the_Ladder_action rarg ; if (rarg == M_ENTER) { move ledge to location; return Unqueue(RopeTwistsInWindDaemon); } if (rarg == M_HANDLED && (action == ##DiveOut or ##DiveTo || (action == ##Drop && noun == ladder))) { return Do_Walk(d_to); } if (rarg ~= M_LOOK) rfalse; print "You are clinging to a slimy ladder, tied to a rail of the poop deck above you. Not far from your feet,"; if (Skiff_tied_to_ladder) { Article(skiff2); ! not popped print " bobs in the water"; } else { print " waves kiss the stern of the ship"; } if (On_the_Ladder hasnt visited) { print ". The ladder twists under your weight"; } print '.'; rtrue; ]; [ Quarters_action ; if (action == ##Examine) { if (CheckIfWordUsedToIdentifyObj('quarterdeck',quarters) && location == Poop or Landing) { "Why don't you go there and look?"; } return LookSub(); } if (action ~= ##CrawlThru or ##Climb or ##Board || location ~= Deck or On_the_Ladder) rfalse; return Do_Walk(in_to); ]; [ ClimbingRopeLadderDaemon ; ++On_rope_ladder_cnt; if (On_rope_ladder_cnt < 2) rtrue; print (string) Spacing_str; if (On_rope_ladder_cnt == 2 or 5) { print "All air is driven out of you as"; Cast_with_the(ladder); ! not popped " slams into the stern."; } if (On_rope_ladder_cnt == 3 or 6) { print "Rebounding,"; Cast_with_the(ladder); ! not popped print " twists you around to face"; return Cast_with_the_and_print_dots(Helena_Louise); } if (On_rope_ladder_cnt == 4) { print "The ladder swings back towards"; return Cast_with_the_and_print_dots(Helena_Louise); } if (On_rope_ladder_cnt ~= 7) rfalse; return JigsUp("Your battered hands can take no more. Your grip loosens and the sea comes up to break your fall."); ]; [ Ladder_in_dir local1 ; Unqueue(ClimbingRopeLadderDaemon); ! not popped print "You pull ", (name) yourself, " over"; Cast_with_the(ledge); ! not popped print ", tumbling head over heels into Jamison's ", (name) quarters, (string) Dot_newline_str; new_line; if (~~local1) { return Captains_Quarters; } return Goto(Captains_Quarters); ]; [ Through_window ; if (Captain_Jamison in location) { print (string) A_sinewy_arm_str; new_line; rfalse; } if (parent(player) == ledge) { return Captains_Quarters; } if (Landing hasnt visited) { Cast_with_capital_The(large_cupboard); ! not popped print (string) Is_not_flush_str; } print "You", (string) Squeeze_thru_str, (string) Dot_newline_str; new_line; if (P_walk_dir == s_to) { if (Rope_ladder_twisting_in_breeze) { QueueInterrupt(RopeTwistsInWindDaemon,65535); ! not popped } give pile_of_clothes attrib9; move large_cupboard to Captains_Quarters; return Captains_Quarters; } give pile_of_clothes ~attrib9; move large_cupboard to Landing; Unqueue(RopeTwistsInWindDaemon); ! not popped return Landing; ]; [ Onto_ledge_move ; Perform(##Board,ledge); ! not popped rfalse; ]; [ Ledge_action local1 ; if (local1 == 1[?]) { if (action == ##TakeOff or ##ClimbDown or ##ClimbOut && noun ~= cotton_frock or ladder) { move player to location; give ladder trytakebit; "You clamber off the sill to safety."; } if (action == ##DiveOut or ##DiveTo || (action == ##CrawlThru && noun == sea)) { print (string) Suicide_str; rtrue; } if (action ~= ##Go) rfalse; if (P_walk_dir == n_to) { Perform(##ClimbOut,ledge); ! not popped rtrue; } if (P_walk_dir == u_to) rfalse; return YouHaveToFirst("get off",ledge); } if (local1) rfalse; if (action == ##Examine) { if (ledge has general_2) { print "Glass shards decorate"; return Cast_with_the_and_print_dots(ledge); } print "Tall panes of glass are inset into"; return Cast_with_the_and_print_dots(ledge); } if (action == ##Destroy && (~~second)) { return HowDoYouDoThat(); } if (action == ##DiveOut) { if (ledge has general_2) { return YouHaveToFirst("climb onto",ledge); } print (string) Suicide_str; rtrue; } if (action ~= ##ClimbOut or ##ClimbOn or ##Board or ##CrawlThru or ##StandOn) rfalse; if (location == Captains_Quarters) { if (ledge hasnt general_2) { print "The available ledge on this side of the window is hardly deep enough to sit on", (string) Dot_newline_str; rtrue; } print "You climb onto the ledge. "; if (Poop hasnt visited) { give ladder takeable; } if (Rope_ladder_twisting_in_breeze) { QueueInterrupt(RopeTwistsInWindDaemon,2); ! not popped Cast_with_capital_The(ladder); ! not popped print " drifts within reach."; } new_line; move player to ledge; rtrue; } if (location ~= On_the_Ladder) rfalse; Ladder_in_dir(1[?]); ! not popped rtrue; ]; [ Referred_to_bed ; return bed1; ]; [ Landing_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You are on the landing of a steep stairway heading up and down. A ", (name) large_cupboard, " against the aft wall blocks the doorway to the captain's ", (name) quarters, '.'; rtrue; ]; [ Sleeping_Cupboard_action rarg ; if (rarg == M_LOOK) { print "The bed is softer than it looks, plumped up with fresh straw. A soft, if somewhat cramped, bunk for the tall bulk of Jamison. The cupboard opens to the fore."; rtrue; } if (rarg ~= M_HANDLED || action ~= ##ClimbOut || noun ~= large_cupboard) rfalse; return Do_Walk(out_to); ]; [ Through_cupboard_dir ; if (large_cupboard hasnt open) { if (P_walk_dir == in_to) { YouHaveToFirst("open",large_cupboard); ! not popped rfalse; } give large_cupboard open; print "You open"; Cast_with_the(large_cupboard); ! not popped print " and clamber out", (string) Dot_newline_str; new_line; move large_cupboard to Landing; return Landing; } if (P_walk_dir == in_to) { if (pile_of_clothes in large_cupboard) { move pile_of_clothes to Sleeping_Cupboard; } move large_cupboard to Sleeping_Cupboard; return Sleeping_Cupboard; } if (pile_of_clothes in Sleeping_Cupboard) { move pile_of_clothes to large_cupboard; } move large_cupboard to Landing; return Landing; ]; [ Large_cupboard_action ; if (action == ##Move or ##Push) { Cast_with_capital_The(large_cupboard); ! not popped print (string) Is_not_flush_str, "You might be able to squeeze past it.^"; rtrue; } if (action == ##Close or ##Open && location == Captains_Quarters) { Cast_with_capital_The(door); ! not popped print " is on the other side of"; return Cast_with_the_and_print_dots(large_cupboard); } if (action == ##Search or ##LookIn or ##Examine) { if (location == Sleeping_Cupboard) { return LookSub(); } if (location == Captains_Quarters) { print (string) You_can_see_str, (string) Only_the_back_str; Cast_with_the(large_cupboard); ! not popped print ". ", "You might be able to squeeze past it.^"; rtrue; } if (large_cupboard has open) { print "It is a dark messy bed, set entirely within and filling"; Cast_with_the(large_cupboard); ! not popped print ". A cabin boy must sleep here when Jamison isn't using it."; if (pile_of_clothes hasnt visited) { print ' ', (string) pile_of_clothes.initial; } new_line; rtrue; } print "It", (string) Is_closed_str, (string) Dot_newline_str; rtrue; } if (action == ##Board or ##CrawlThru) { if (location == Sleeping_Cupboard) { print (string) Look_around_you_str; rtrue; } if (location == Captains_Quarters) { print (string) No_see_str, (string) Way_to_do_that_str; rtrue; } return Do_Walk(in_to); } if (action ~= ##Insert) rfalse; print (string) Have_to_str, "get in the ", (name) large_cupboard, " to do that", (string) Dot_newline_str; rtrue; ]; [ Hold_action rarg ; if (rarg == M_ENTER && location hasnt visited && Poop hasnt visited) { print "You hear a scuffling noise ahead, and scraping up near the ceiling. You would think it was caused by rats, but for the definite curse you heard before all the movement", (string) Dot_newline_str; new_line; rtrue; } if (rarg == (M_ENTER|invalidEnum4) && Fuse_is_burning && fuse hasnt visited) { Unqueue(Fuse_is_burning); ! not popped Fuse_is_burning(); ! not popped rfalse; } if (rarg ~= M_LOOK) rfalse; DescribeHatch(); ! not popped print " above. Rats' scratchings counterpoint the lullaby of bilge water sloshing in the bulkheads, punctuated by footsteps slapping the deck overhead. You may move fore or aft.^ Behind a high fence, decorated by a sign, are stacked"; Cast_with_the(supplies); ! not popped print "; casks of rum, water, flour and salt meat interspersed with kegs of gunpowder and shot. A closed gate is the only way in."; rtrue; ]; [ Canvas_hatch_action ; if (action == ##Examine) { if (location == Hold) { DescribeHatch(); ! not popped print (string) Dot_newline_str; rtrue; } if (canvas_hatch has open) { (string) Stairs_down_str, "into murky darkness."; } print "Canvas stretches across"; return Cast_with_the_and_print_dots(canvas_hatch); } if (action == ##LookIn) { if (canvas_hatch has open) { Perform(##Examine,canvas_hatch); ! not popped rtrue; } Cast_with_capital_The(canvas_hatch); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; rtrue; } if (action ~= ##Open || canvas_hatch has open) rfalse; if (location == Main_Deck) { give canvas_hatch open; print "You pull a corner of canvas out of the frame. "; Perform(##Examine,canvas_hatch); ! not popped rtrue; } print (string) No_see_str, (string) Way_to_do_that_str; rtrue; ]; [ DescribeHatch ; if (canvas_hatch has open) { print "Moonlight shines down the stairs through an open corner of the canvas hatch"; rtrue; } print "Steep stairs lead up in the dimness to a canvas hatch"; rtrue; ]; [ Fence_action ; if (action == ##LookIn or ##LookBehind) { Cast_with_capital_The(supplies); ! not popped print " are kept locked behind the fence. "; if (Fuse_is_burning) { Perform(##Examine,fuse); ! not popped rtrue; } new_line; rtrue; } if (action == ##Examine) { Cast_with_capital_The(fence); ! not popped " is made of thick, finely woven wire mesh, uncuttable and unclimbable. Except for a gap of about 6 inches over the closed gate, the cage is secure from ceiling to damp floorboards."; } if (action == ##ThrowOver) { print "You'd best throw"; Cast_noun_with_the(); ! not popped print " over"; return Cast_with_the_and_print_dots(gate1); } if (action == ##Climb) { print "You can't get a toehold in"; return Cast_with_the_and_print_dots(fence); } if (action ~= ##Close or ##Open) rfalse; print (string) Have_to_str, "do that to the gate in"; return Cast_with_the_and_print_dots(fence); ]; [ DescribeGate material ; print "The gate is made of the same ", (string) material, " wire as"; return Cast_with_the(fence); ]; [ Gate1_action ; if (action == ##Examine) { print "It has a huge iron lock. Between"; Cast_with_the(gate1); ! not popped " and the ceiling, however, is a gap of about 6 inches."; } if (action == ##CrawlThru && CheckIfWordUsedToIdentifyObj('gap',gate1)) { Perform(##Climb,gate1); ! not popped rtrue; } if (action == ##Exit or ##CrawlOver or ##Climb) { DescribeGate("finely woven"); ! not popped print ", and you cannot get a foothold", (string) Dot_newline_str; rtrue; } if (action == ##Slice) { DescribeGate("thick"); ! not popped print (string) Dot_newline_str; rtrue; } if (action == ##LookBehind) { return ReversePerform(fence); } if (action == ##ThrowOver) { print "You throw"; if (noun == rag) { remove rag; give rag ~visited; Cast_with_the(rag); ! not popped print " over the gate. "; if (~~Fuse_is_burning) { print "It falls to the floor amongst the food supplies", (string) Dot_newline_str; rtrue; } if (Rag_soaked_in == nothing) { print "It flaps haplessly in the air, settling to the floor not far from the burning fuse", (string) Dot_newline_str; rtrue; } print "Luckily, it lands directly on the burning end of the fuse. "; if (Rag_soaked_in == rum) { QueueInterrupt(Ship_explodes_timer,9); ! not popped Unqueue(Clothes_tear_leaving_rag_timer); ! not popped print "Unluckily, it is soaked with flammable rum, and flares up, making the fuse burn much faster. You have perhaps 3 minutes to live."; new_line; } else if (Rag_soaked_in == water) { Unqueue(Ship_explodes_timer); ! not popped Unqueue(Clothes_tear_leaving_rag_timer); ! not popped Fuse_is_burning = false; give fuse attrib9; ++score; print "With a sputter and a sigh, the flame dies."; new_line; } Rag_soaked_in = nothing; rtrue; } if (noun == cotton_frock) { Cast_with_the(cotton_frock); ! not popped print " up, "; if (Skirt_soaked_in) { move cotton_frock to Hold; print "its soaked skirt slapping ", (name) your_head, ". Too heavy and bulky to make it over the gate, it squelches to the floor nearby. A cold tear of ", (name) Skirt_soaked_in, " dribbles down the back of your neck", (string) Dot_newline_str; rtrue; } move cotton_frock to location; print "but it billows out and catches on the top of the gate. It floats to the floor near you", (string) Dot_newline_str; rtrue; } remove noun; Cast_noun_with_the(); ! not popped print " into the ammunition area. It skids into the darkness"; if (Fuse_is_burning) { print ", over the burning end of the fuse. The fuse falters, spits and resumes burning"; } print (string) Dot_newline_str; rtrue; } if (action ~= ##Throw or ##PutThrough or ##Insert || (~~CheckIfWordUsedToIdentifyObj('gap',gate1))) rfalse; Perform(##ThrowOver,noun,gate1); ! not popped rtrue; ]; [ Keg_or_supplies_action ; if ((~~PhysicallyTouchVerbP(keg)) && (~~PhysicallyTouchVerbP(supplies))) rfalse; return YouCantReachThe(supplies); ]; [ Sign_action ; if (action ~= ##Examine or ##Browse) rfalse; "The sign proclaims ~Thieves be keel-hauled~ in uncertain lettering."; ]; [ Fuse_is_burning ; if (~~FindDaemon_or_Timer(Ship_explodes_timer)) { Fuse_is_burning = true; give fuse ~attrib9; QueueInterrupt(Clothes_tear_leaving_rag_timer,85); ! not popped } if (fuse has visited || (location ~= Main_Deck || canvas_hatch hasnt open && location ~= Hold)) rfalse; give fuse visited; give fuse ~concealed; print (string) Spacing_str, "You gradually notice a familiar, worrying smell, sniff, and identify it as smoke. "; if (location == Main_Deck) { print "It appears to come from below decks."; new_line; rfalse; } if (location ~= Hold) rfalse; print (string) A_tiny_glow_str, (string) Dot_newline_str; rfalse; ]; [ Clothes_tear_leaving_rag_timer ; QueueInterrupt(Ship_explodes_timer,15); ! not popped if (parent(rag) || (~~Fuse_is_burning)) rfalse; if (cotton_frock has worn || cotton_frock in player) { if (Skirt_soaked_in) { Rag_soaked_in = Forest; } give cotton_frock general_2; print (string) Spacing_str, "Your frock"; } else if (shirt in player) { give shirt general_2; print (string) Spacing_str, "The tail of your shirt"; } else { if (linen_chemise has general_3) rtrue; give linen_chemise general_2; print (string) Spacing_str, "Your chemise"; } move rag to parent(player); " suddenly catches on something, tearing the fabric. A large scrap flutters to your feet."; ]; [ Ship_explodes_timer ; if (~~Fuse_is_burning) rfalse; give Helena_Louise general_2; Turns_on_ocean = 10; Unqueue(Ship_explodes_timer); ! not popped Unqueue(Clothes_tear_leaving_rag_timer); ! not popped if (OnShipP(location) || location == By_the_Ship) { return JigsUp(" Suddenly you appreciate what it is to be a ball in an exploding cannon. The intense heat, the push of fire, and the sense of release when spit from the cannon's mouth -- these you feel when the lighted fuse finally burns up to the largest keg of gunpowder in the hold."); } if (parent(player) == skiff2 or cask or Beach) { print (string) Spacing_str, "A huge wave "; if (location == Beach) { print "rolls up the beach"; } else { print "rocks"; Cast_with_the(parent(player)); ! not popped } print " as"; Cast_with_the(Helena_Louise); ! not popped print " explodes into flames across the lagoon", (string) Dot_newline_str; rtrue; } print (string) Spacing_str, "You hear a noise like a huge explosion in the distance, and the ground shakes beneath your feet. There should be good beachcombing tomorrow", (string) Dot_newline_str; rtrue; ]; [ Fuse_action local1 local2 local3 ; if (local1) { if (local1 == 9[torch?]) rtrue; print (string) Spacing_str, (string) A_tiny_glow_str, '.'; rtrue; } if (action == ##PlaceOn or ##Pour && noun == cotton_frock or rag) { return HowDoYouDoThat(); } if (action == ##Take or ##Move) { return YouCantReachThe(fuse); } if (action == ##Pour or ##BlowOut or ##Light or ##Slice or ##PlaceOn || PhysicallyTouchVerbP(fuse)) { print (string) You_arent_str, "anywhere near"; Cast_with_the(fuse); ! not popped "!"; } if (action == ##Examine) { if (Fuse_is_burning) { print "The burning fuse is "; local2 = FindDaemon_or_Timer(Ship_explodes_timer); if (local2) { local3 = 15 - local2-->1; if (local3 > 12) { print "boring a hole through the largest powder keg", (string) Dot_newline_str; rtrue; } if (local3 > 7) { print "mere inches"; } else { print "only a foot"; } } else { local2 = FindDaemon_or_Timer(Clothes_tear_leaving_rag_timer); local3 = 85 - local2-->1; if (local3 > 70) { print "a few feet"; } else if (local3 > 60) { print "several feet"; } else if (local3 > 45) { print "a few yards"; } else { print "quite near the fence, several yards"; } } print " from the pile of gunpowder kegs opposite"; return Cast_with_the_and_print_dots(gate1); } print (string) You_can_see_str, (string) Only_darkness_str; return Cast_with_the_and_print_dots(fence); } if (action ~= ##ThrowAt or ##ThrowOver or ##Throw || noun ~= cotton_frock or rag) rfalse; Perform(##ThrowOver,noun,gate1); ! not popped rtrue; ]; [ Crews_Quarters_action rarg ; if (rarg == M_ENTER && (~~Crulley_plot_overheard)) { return QueueInterrupt(Overhear_crulleys_plot_timer,2); } if (rarg ~= M_LOOK) rfalse; print "The crew sleeps, in shifts, in this cramped space under the forecastle. A breeze blows in on a moonbeam through a grate in the ceiling. A low doorsill is abaft.^", (string) Spacing_str; if (mess hasnt visited) { give mess visited; print "This area must also serve as sickroom. "; } print "Strewn about the floor are various powders and spills of malodorous potions. In one corner, a large blood stain indicates an amputation; in another is the smear of a leech, dropped off a bloodletting."; rtrue; ]; [ Grate_action ; if (action ~= ##LookIn) rfalse; if (location == Crews_Quarters) { Perform(##Examine,ceiling); ! not popped rtrue; } print (string) You_can_see_str, (string) Only_darkness_str; return Cast_with_the_and_print_dots(grate); ]; [ Bit_of_mirror_action ; if (action == ##LookIn) { print "You are aglow with excitement", (string) Dot_newline_str; rtrue; } if (action == ##Point or ##Insert && second == moonbeam or shutters or Helena_Louise or window1) { Signal_in_moonlight(bit_of_mirror); ! not popped rtrue; } if (action ~= ##Examine) rfalse; print "Probably a remnant of a pirated lady's boudoir,"; Cast_with_the(bit_of_mirror); ! not popped print "'s edges are dulled from use", (string) Dot_newline_str; rtrue; ]; [ Signal_in_moonlight withwhat ; if (location has attrib12 && (~~InRoomContains(location,window1)) && location ~= Lafonds_Bedroom or Captains_Quarters) { print (string) No_see_str, (string) Way_to_do_that_str; rtrue; } move withwhat to player; if (cold_chicken in withwhat) { remove cold_chicken; remove spices; print "You scrape everything off"; Cast_with_the(silver_tray); ! not popped print " into the bushes below. "; } if (location == Bedroom) { print (string) You_cant_str, "quite catch the moon, just peeking over the house, in the little mirror", (string) Dot_newline_str; rtrue; } print "You roll"; Cast_with_the(withwhat); ! not popped print " around in the beam of moonlight till it glows silver-white. "; if (location == Lafonds_Bedroom) { if (Helena_Louise has general_2) { print "The breeze picks up, howling off"; Cast_with_the_and_print_dots(sea); ! not popped rtrue; } if ((~~FindDaemon_or_Timer(Jamisons_men_arrive_timer)) && (~~Jamisons_men_have_attacked)) { ++score; if (Lafond in location) { QueueInterrupt(Jamisons_men_arrive_timer,14); ! not popped } else { QueueInterrupt(Jamisons_men_arrive_timer,6); ! not popped } print "After a moment, a flash of light responds from"; return Cast_with_the_and_print_dots(Helena_Louise); } new_line; rtrue; } new_line; rtrue; ]; [ Jamisons_men_arrive_timer ; Jamisons_men_have_attacked = true; Cookie_hasnt_found_you_yet = true; give Lucy attrib9; give your_father attrib9; move Crulley to Dungeon; give Cookie ~attrib9; give Ballroom general_3; give skiff2 attrib9; print (string) Spacing_str; if (location == Lawn or Veranda_Room or Forest or Trade_Entrance) { print "Silently, a dozen ragged men creep in from the beach. Small groups move in all ", (name) direction, "s, surrounding the mansion, until, with a hair-raising cry, they attack the house. Screams of terror come from the ballroom", (string) Dot_newline_str; rtrue; } if (location == Lafonds_Bedroom && Lafond in location) { print (string) Battle_cry_str, ", and Lafond whirls around, every sinew taut. ~Damnation! Jamison somehow called his men!~ Holding a knife to your throat, Lafond drags you downstairs and away from rescue, as Cookie and the crew watch helpless."; return JigsUp(" The blade bites less then you expected."); } if (location == Lafonds_Bedroom && butler hasnt general_1) { print (string) Battle_cry_str, ", as Jamison's men respond to your signal. "; Cast_with_capital_The(butler); ! not popped print ", looking scared, grabs you and runs downstairs and out to the front drive."; return JigsUp(" Lafond's dragoons deal with you quickly."); } if (location == Gallery or Stair_Landing or Foyer or Ballroom or Orchestra or Supper_Room) { print (string) Battle_cry_str, ", and Jamison's men stream in from all ", (name) direction, "s, huddling the dancers in the middle of the ballroom", (string) Dot_newline_str; rtrue; } print (string) Battle_cry_str, ". It is drowned out a few minutes later by screams of terror from the dancers in the ballroom", (string) Dot_newline_str; if (location ~= Front_Drive) rfalse; (string) Spacing_str, "The dragoons look alarmed, and confer among themselves."; ]; [ Dagger_action ; if (action == ##Examine) { Cast_with_capital_The(dagger); ! not popped print " is quite dull", (string) Dot_newline_str; rtrue; } if (action ~= ##Slice) rfalse; if (noun has clothing) { Perform(##RipUp,noun); ! not popped rtrue; } if (noun == line) rfalse; if (noun == dagger) { return FreeSub(); } Cast_with_capital_The(dagger); ! not popped print " is much too dull to cut"; return Cast_with_the_and_print_dots(noun); ]; [ Poop_action rarg ; if (rarg == M_ENTER && Poop hasnt visited) { if (~~Crulley_plot_overheard) { Crulley_plot_overheard = true; give anchor general_2; give lever general_2; QueueInterrupt(Catch_glimpse_of_Crulley,2); ! not popped QueueInterrupt(Ship_draws_closer_to_shore_timer,10); ! not popped } ++score; return score; } if (rarg ~= M_LOOK) rfalse; print "From this platform deck you can see the whole of the two-masted ship, shadowy forms moving about here and there. A railing protects you from stepping off the deck in any ", (name) direction, " but to the fore."; if (Rope_ladder_twisting_in_breeze) { print " A rope ladder is tied to the railing at the stern of the ship."; } return Ship_draws_closer_to_shore_timer(false); ]; [ Quarterdeck_action rarg ; if (rarg == M_LOOK) { print "No torches are lit, or needed on this moonlit night, except in the deep shadows cast by the huge navigation wheel. Men move about to the fore, talking quietly. Under the stairs aft to the poop is a barred door."; return Ship_draws_closer_to_shore_timer(false); } if (rarg ~= (M_ENTER|invalidEnum4) || Disguised_as_boy) rfalse; return SailorNoticesYouAreAWoman(); ]; [ Navigation_wheel_action ; if (~~PhysicallyTouchVerbP(navigation_wheel)) rfalse; print "From the grumbling emitted as you near"; Cast_with_the(navigation_wheel); ! not popped ", you gather that the sailors close by would not appreciate your action."; ]; [ Cannon_action ; if (PhysicallyTouchVerbP(cannon)) { "A crewman growls angrily, ~Boy! Get away from me guns -- they've killed better men than thee by just rollin' backwards.~"; } if (action == ##Examine) { print "Huge, old and blackened, these cannon have seen many battles", (string) Dot_newline_str; rtrue; } if (action ~= ##Shoot or ##Shoot) rfalse; return WellBred(62671["Firing c..."?]); ]; [ Cask_action local1 ; if (local1) { if (local1 == 1[?]) { if (action == ##RowTo or ##RowDirection or ##Row) { return RowSub(); } if (action ~= ##Go || noun == veranda && (~~PhysicallyTouchVerbP(pyramid_of_casks))) rfalse; return YouHaveToFirst("get out of",cask); } if (local1 == 9[torch?]) rtrue; if (local1 ~= 5[your_hand?] || location ~= Shallows or Lagoon) rfalse; print (string) Spacing_str, "Waves lap at"; Cast_with_the(cask); ! not popped print '.'; rtrue; } if (action == ##Examine) { print "This large, empty cask smells of salt and rancid meat. The head of"; Cast_with_the(cask); ! not popped print " is missing", (string) Dot_newline_str; rtrue; } if (action == ##CrawlThru or ##Board) { move player to cask; print "You crawl into"; Cast_with_the(cask); ! not popped if (slab_of_pork hasnt visited) { print ", feeling a slab of something stuck on the bottom"; } if (location == Quarterdeck) { print ". From this close, you can see"; Cast_with_the(line); ! not popped print " is getting frayed where it rubs against"; return Cast_with_the_and_print_dots(cask); } print (string) Dot_newline_str; rtrue; } if (action == ##Close or ##Open) { print "One end of"; Cast_with_the(cask); ! not popped print " is missing, so it can't be opened or closed", (string) Dot_newline_str; rtrue; } if (action == ##Launch) { if (location == Quarterdeck) { print (string) Pardon_str; rtrue; } print (string) Already_is_str; rtrue; } if (action ~= ##ClimbOut) rfalse; if (location == Lagoon) { print "Although the lagoon is warm and clear, it is much too deep.^"; rtrue; } if (location ~= Shallows) rfalse; move player to location; remove cask; print "Free of your weight,"; Cast_with_the(cask); ! not popped print " bobs and spins in the current, pulled out into the lagoon. You splash after it, but it is gone", (string) Dot_newline_str; rtrue; ]; [ Slab_of_pork_action ; if (action == ##Examine) { Cast_with_capital_The(slab_of_pork); ! not popped ", caked white with salt, is rock-hard."; } if (action == ##Eat) { Cast_with_capital_The(slab_of_pork); ! not popped " is too salty to eat."; } if (action ~= ##Take || slab_of_pork notin cask || slab_of_pork has takeable) rfalse; if (player in cask) { give slab_of_pork takeable; move slab_of_pork to player; print "You peel it off"; return Cast_with_the_and_print_dots(cask); } Cast_with_capital_The(slab_of_pork); ! not popped print " is beyond your reach at the bottom of"; return Cast_with_the_and_print_dots(cask); ]; [ Line_action ; if (action == ##Examine) { print "Heavy-duty, hand-twisted rope is pulled taut around"; Cast_with_the(pyramid_of_casks); ! not popped print ". "; if (line hasnt general_2) { print "It runs directly over the open-ended cask. "; } print "A seaman calls over, ~Boy, take care"; if (line has general_2) { print " -- or I'll see you flogged"; } else { print ". Them casks ain't safe, they could push ye overboard"; } "!~"; } if (action == ##Slice) { if ((~~second) && Ultimately_InP(dagger)) { print "[with the dagger]"; new_line; Perform(##Slice,line,dagger); ! not popped rtrue; } if (second ~= dagger) rfalse; if (Fuse_is_burning && player in cask && line hasnt general_3) { give line general_3; "You hesitate, thinking of the fates of those left aboard this ship."; } Cast_with_capital_The(line); ! not popped print " snaps, and the pyramid collapses into dozens of tumbling casks. "; if (parent(player) == cask) { give cask ~attrib9; give line general_2; remove dagger; Cask_distance_from_shore = Turns_on_ocean - 2; ++score; print "Your cask is thrust into the sea,"; Cast_with_the(dagger); ! not popped print " flying from ", (name) your_hand, (string) Dot_newline_str; if (anchor has general_2) { JigsUpWorseThanDeath(" The tides are against you, however, and carry you out to sea. Days later you collapse, exhausted, to wake in the heaven on earth of a Swedish merchant marine. A midshipman, an ice-eyed blond with Viking physique and no English, nurses you back to health; in a moment of weakness you thank him in the only language all men and women share."); ! not popped } else { print (string) Spacing_str, "Sputtering mouthfuls of salt water, you first look around several minutes later", (string) Dot_newline_str; new_line; } give door ~open; give door locked; QueueInterrupt(FloatInOceanDaemon,65535); ! not popped move cask to Lagoon; Goto(cask); ! not popped return LookSub(); } if (parent(player) ~= Quarterdeck) rfalse; return JigsUp("A large one rolls into you, stumbling you through the railing into the sea."); } if (action ~= ##Remove or ##Free) rfalse; print (string) No_see_str, "knots to untie, just line", (string) Dot_newline_str; rtrue; ]; [ Referred_to_cask ; if (cask notin location) { return pyramid_of_casks; } return cask; ]; [ Pyramid_of_casks_action local1 ; if (local1) { if (local1 == 9[torch?]) rtrue; print (string) Spacing_str, "Abaft the wheel sits a "; if (line has general_2) { print "small, hastily constructed"; } else { print "large"; } print " pyramid of casks, held in place by a heavy rope."; rtrue; } if (action == ##Examine) { print "Lying on their sides, the casks are stacked in a rather shaky pyramid: perhaps that's why someone has tied the rope about them"; if (line hasnt general_2) { print ". A cask on one corner has lost its lid"; } print (string) Hey_boy_get_away_str; new_line; rtrue; } if (action == ##LookIn) { print "All of the casks seem empty"; if (line hasnt general_2) { print ", but the only one you can actually look in is the open-ended cask."; if (slab_of_pork in cask) { print " There appears to be"; Article(slab_of_pork); ! not popped " dried to the bottom of that one."; } } new_line; rtrue; } if (~~PhysicallyTouchVerbP(pyramid_of_casks)) rfalse; if (line has general_2) { "A sailor swoops down on you from nowhere, whapping your backside painfully. ~Boy!~ he booms, ~get away from those! We already had to clean up after you once. Cap'n'll hear of this, I tell you.~"; } ++Wobbly_pyramid_cnt; print "The pyramid wobbles"; if (Wobbly_pyramid_cnt == 3) { JigsUp(" and collapses.^ You were warned, of course, but did not listen. A stray keg pushes you off the deck into the sea."); ! not popped rtrue; } print (string) Hey_boy_get_away_str; new_line; rtrue; ]; [ Main_Deck_action rarg ; if (rarg == M_LOOK) { print "It is a deceptively quiet evening on the ship, the pirates singing low shanties as they repair cannon, twist ropes and sharpen daggers. The mainmast casts an inky shadow over the "; if (canvas_hatch has open) { print "open hatch and stairs leading down to the hold."; } else { print "canvas screening the hatch."; } print (string) A_tangled_mass_str; Ship_draws_closer_to_shore_timer(false); ! not popped new_line; print (string) Spacing_str, "Two large barrels stand near the stair to the foredeck."; rtrue; } if (rarg == M_ENTER && Fuse_is_burning && fuse hasnt visited) { Unqueue(Fuse_is_burning); ! not popped return Fuse_is_burning(); } if (rarg ~= (M_ENTER|invalidEnum4) || Disguised_as_boy) rfalse; return SailorNoticesYouAreAWoman(); ]; [ Onto_deck ; if (canvas_hatch hasnt open) { Cast_with_capital_The(canvas_hatch); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; rfalse; } if (location == Main_Deck) { print "You glance around to see that no one is watching, and duck through the open corner of"; Cast_with_the_and_print_dots(canvas_hatch); ! not popped new_line; return Hold; } print "You slip lithely through"; Cast_with_the_and_print_dots(canvas_hatch); ! not popped new_line; return Main_Deck; ]; [ Rum_action ; if (action == ##Soak or ##Insert) { Perform(##Insert,noun,rum_barrel); ! not popped rtrue; } if (action == ##LookUnder or ##LookIn or ##Examine) { print "The rum is a dark brown color", (string) Dot_newline_str; rtrue; } if (action == ##ReachIn) { print "Rum", (string) Drips_str; rtrue; } if (action ~= ##Drink) rfalse; "You take a sip and spit it out, coughing. This is much stronger than ratafia!"; ]; [ Referred_to_barrel ; if (action ~= ##Examine) rfalse; return water_barrel; ]; [ Barrel_action ; if (action == ##LookIn or ##Examine) { if (noun == water_barrel) { if (CheckCorrectAdjectives('water') || CheckCorrectAdjectives('fresh')) { "This large barrel is full of fresh water for the long sea voyage."; } print "The two open barrels contain rum and water, you can tell by the smell of each. They are identical but for the dark stains around the mouth of"; return Cast_with_the_and_print_dots(rum_barrel); } if (noun ~= rum_barrel) rfalse; print "Stained around the mouth by the spills of over-eager sailors,"; Cast_with_the(rum_barrel); ! not popped " is nearly full."; } if (action == ##DrinkFrom) { if (second == rum_barrel) { Perform(##Drink,rum); ! not popped rtrue; } if (second ~= water_barrel) rfalse; Perform(##Drink,water); ! not popped rtrue; } if (action == ##MoveDirection or ##Push or ##KnockOver) { if (P_initial_word == 'tip') { "You notice a scrawl on the side, ~No tipping, please.~"; } "The barrel is secured to the deck."; } if (action == ##EmptyFrom or ##EmptyIn) { return HowDoYouDoThat(); } if (action == ##ReachIn) { if (noun == rum_barrel) { print "Rum"; } else { print "Water"; } print (string) Drips_str; rtrue; } if (action == ##Close) { "There is no lid."; } if (action == ##Soak or ##Insert) { if (noun == laudanum) { "The few drops left would be too diluted to affect anyone."; } if (second hasnt open) { Cast_with_capital_The(second); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; rtrue; } if (noun == missive or invitation) { Perform(##Insert,noun,sea); ! not popped rtrue; } if (noun == rag or cotton_frock) { return SoakItem(); } remove noun; print "You drop"; Cast_noun_with_the(); ! not popped print " into"; Cast_second_with_the(); ! not popped print ". It sinks from sight", (string) Dot_newline_str; rtrue; } if (action ~= ##Drink || P_noun_names-->0) rfalse; if (CheckCorrectAdjectives('water')) { Perform(##Drink,water); ! not popped rtrue; } if (~~CheckCorrectAdjectives('rum')) rfalse; Perform(##Drink,rum); ! not popped rtrue; ]; [ SoakItem what ; if (~~second) { SoakSub(); ! not popped rtrue; } if (second == rum_barrel or rum) { what = rum; } else if (second == water_barrel or water or sea or pool || location == By_the_Ship or Lagoon or Shallows || location == Beach) { what = water; } if (Skirt_soaked_in && noun == cotton_frock || (Rag_soaked_in && noun == rag)) { "That's already wet enough."; } print "Keeping hold on"; Cast_noun_with_the(); ! not popped print ", you soak it with "; if (noun == cotton_frock) { move cotton_frock to parent(player); cotton_frock.size = 10; Skirt_soaked_in = what; print (name) what, ". It becomes so heavy, however, that you drop it, with a loud squelch"; } else if (noun == rag) { Rag_soaked_in = what; print (name) what; } print (string) Dot_newline_str; rtrue; ]; [ Forecastle_action rarg ; if (rarg == M_LOOK) { print "Higher than all but the poop deck, this end of the ship commands a good view of the island; the ~crow's nest,~ swinging above in the heights of the foremast, would command a better.", (string) A_tangled_mass_str; new_line; print " Imbedded in the deck is a grated air hole to the crew's ", (name) quarters, " below. You can go aft, or forward through a break in the ubiquitous railing.^ Odors of old grease and char waft from a little shack perched behind the mast."; return Ship_draws_closer_to_shore_timer(false); } if (rarg ~= (M_ENTER|invalidEnum4) || Disguised_as_boy) rfalse; return SailorNoticesYouAreAWoman(); ]; [ Mooring_winch_action ; if (action == ##Examine) { print "Made of an old barrel turning on a pole,"; Cast_with_the(mooring_winch); ! not popped print " is used to coil in the anchor chain. A pair of metal teeth bite the links to prevent it from dragging out; a lever is connected to the teeth. Something is written on the lever", (string) Dot_newline_str; rtrue; } if (action == ##Turn) { if (lever has general_2) { print "The teeth are closed, so you can't move the chain", (string) Dot_newline_str; rtrue; } print (string) No_strength_str; rtrue; } if (action ~= ##Close or ##Open) rfalse; return HowDoYouDoThat(); ]; [ Lever_action ; if (action == ##Examine or ##Browse) { "On the lever is written ~Open Up, Close Down.~ You notice the lever is pointed down."; } if (action == ##Raise) { if (anchor has general_2) { ++score; give anchor ~general_2; remove anchor; Unqueue(Ship_draws_closer_to_shore_timer); ! not popped QueueInterrupt(Forecastle_n_to,3); ! not popped print "The metal teeth open as you raise up"; Cast_with_the(lever); ! not popped print ". The anchor, released, splashes down into the sea, dragging its clanking chain. After a moment, you feel the ship pull slightly against the current. You lower the lever to prevent any more chain from spooling out", (string) Dot_newline_str; rtrue; } print "Raising"; Cast_with_the(lever); ! not popped print " would release more chain and you might "; if (FindDaemon_or_Timer(Forecastle_n_to)) { print "cast"; Cast_with_the(Helena_Louise); ! not popped " against the reefs!"; } print "ground"; return Cast_with_the_and_print_dots(Helena_Louise); } if (action == ##Lower) { print (string) Already_is_str; rtrue; } if (action ~= ##Push or ##Move) rfalse; print (string) Have_to_str, "specify which way you want to move it", (string) Dot_newline_str; rtrue; ]; [ Forecastle_n_to ; print (string) Spacing_str, "With a heave and creak of timbers,"; Cast_with_the(Helena_Louise); ! not popped " drifts a little way back towards the island. The tide has turned."; ]; [ Galley_action rarg ; if (rarg == (M_ENTER|invalidEnum4) && Cookie hasnt visited) { give Cookie visited; print (string) Spacing_str, "The man looks you over sharply,"; if (Disguised_as_boy) { print " then winks an eye. ~Hullo, boy -- Sam, I'll call you. N"; } else { print "frowning. ~Tut, lass, you don't foller orders, do ye? 'Tain't safe to go about dressed like that. Mayhap ye're n"; } print "ervous about Cap'n? He'll come to no harm. And if there is trouble, he only has to signal from that seaward winder of the house -- ye can see it from the crow's nest -- and we'll be there in a jiffy. Me and my peg are to stay aboard and guard y"; if (Disguised_as_boy) { print "--, the Cap'n's"; } else { print "ou,"; } " young lady.~"; } if (rarg ~= M_ENTER) rfalse; SetPronoun(Cookie); ! not popped return SetPronoun(dagger); ]; [ Shack_action ; if (action == ##Examine) { print "It's a tiny charred wooden shack", (string) Dot_newline_str; rtrue; } if (action == ##Search or ##LookIn) { ReversePerform(Galley); ! not popped rtrue; } if (action ~= ##CrawlThru) rfalse; return Goto(Galley); ]; [ Bowsprit_action rarg ; if (rarg ~= M_LOOK) rfalse; print "Hanging on the bowsprit, your arms and legs wrapped tightly around the narrow spar, you can't see much beside an upside-down view of the figurehead of the ", (name) Helena_Louise, ", "; if (anchor has general_2) { print "the barnacle encrusted main anchor dripping from its chain, and the nauseous"; } else { print "and"; Cast_with_the(anchor); ! not popped print " chain descending into the"; } print " swelling and breaking waves over (under?) ", (name) your_head, '.'; rtrue; ]; [ Forecastle_n_to ; if (location == Forecastle) { print "You"; if (IsNotNaked()) { DropAll(player,location); ! not popped print " drop all you are carrying and"; } print " creep out over the waves", (string) Dot_newline_str; new_line; return Bowsprit; } print "You inch back down to", (string) Dotdotdot_str; return Forecastle; ]; [ Stub_of_rope_action local1 ; if (local1) { if (local1 == 9[torch?]) rtrue; print (string) Spacing_str, "A ", (name) stub_of_rope, ", roughly cut, swings rudely over the waves."; if (anchor hasnt general_2) rtrue; print " The line holding the sea anchor has been cut!"; rtrue; } if (~~PhysicallyTouchVerbP(stub_of_rope)) rfalse; (string) You_cant_str, "quite reach it."; ]; [ Anchor_action ; if (action ~= ##Raise) rfalse; print (string) No_strength_str; rtrue; ]; [ In_the_Rigging_action rarg ; if (rarg ~= M_LOOK) rfalse; print "The deck swings far below as you cling to"; Cast_with_the(rigging); ! not popped print " in the wind.", (string) A_tangled_mass_str; if (Entered_rigging_from ~= Forecastle) rtrue; print " Farther up"; Cast_with_the(rigging); ! not popped print " is a small platform."; rtrue; ]; [ Rigging_action ; if (action == ##Take) { "The only thing rigging is good for is climbing."; } if (action == ##Climb) { Do_Walk(u_to); ! not popped rtrue; } if (action == ##ClimbDown) { Do_Walk(d_to); ! not popped rtrue; } if (action ~= ##Examine) rfalse; print "The mast stands tall and powerful, shrouded in"; return Cast_with_the_and_print_dots(rigging); ]; [ PirateAttack_daemon ; if (40 < random(100)) rfalse; print (string) Spacing_str, (string) ComplexPickOne(Pirate_attack_tbl), (string) Dot_newline_str; rfalse; ]; [ Ship_draws_closer_to_shore_timer called_by_timer=true underdeck ; if (UnderDecksP(location)) { underdeck = true; } if (called_by_timer) { QueueInterrupt(Ship_draws_closer_to_shore_timer,15); ! not popped ++Turns_on_ocean; if (Turns_on_ocean == 10) { print (string) Spacing_str, (string) Ship_near_reef_strs-->Turns_on_ocean; return JigsUpWorseThanDeath(". The next few minutes last forever as havoc breaks out. Grabbing a plank, you manage to stay afloat, but you are washed out to sea. A brig, Portuguese by its sails, rescues you. The sailors are brown skinned and smooth, and the first mate, the ship's and yours, is gentle. They leave you in Rio, alone and forgotten."); } if (underdeck) { if (Turns_on_ocean ~= 8) rfalse; (string) Spacing_str, "The crash of surf is increasing in volume. You'd best find out what's going on!"; } print (string) Spacing_str, (string) Ship_near_reef_strs-->Turns_on_ocean, (string) Dot_newline_str; rtrue; } if (anchor hasnt general_2) rtrue; if (FindDaemon(Ship_draws_closer_to_shore_timer)) { QueueInterrupt(Ship_draws_closer_to_shore_timer,2); ! not popped return Ship_draws_closer_to_shore_timer(false); } new_line; print (string) Spacing_str, (string) Ship_near_reef_strs-->Turns_on_ocean, '.'; rtrue; ]; [ FloatInOceanDaemon local1 ; if (player in cask) { local1 = Cask_distance_from_shore + Distance_one_row_takes; } else if (player notin skiff2) { local1 = 0; } else { local1 = skiff_distance_from_shore + Distance_one_row_takes; } if (Distance_one_row_takes == (LONG_DISTANCE|SHORT_DISTANCE|invalidEnum65532)) { print (string) Spacing_str, "The current pulls you in towards the island."; if (location == By_the_Ship) { new_line; new_line; move skiff2 to Lagoon; Goto(skiff2); ! not popped LookSub(); ! not popped } else if (local1 < 2 && location ~= Shallows) { local1 = 1[?]; Unqueue(FloatInOceanDaemon); ! not popped print " With a scrape,"; Cast_with_the(parent(player)); ! not popped print " lodges in the sand", (string) Dot_newline_str; new_line; if (player in cask) { move cask to Shallows; Goto(cask); ! not popped } else if (player in skiff2) { move skiff2 to Shallows; Goto(skiff2); ! not popped } } else { if (location ~= Lagoon) rtrue; new_line; if (~~Floated_into_lagoon) { LookSub(); ! not popped } else { Floated_into_lagoon = false; } } } Distance_one_row_takes = (LONG_DISTANCE|SHORT_DISTANCE|invalidEnum65532); if (player in cask) { Cask_distance_from_shore = local1; rtrue; } if (player notin skiff2) rtrue; skiff_distance_from_shore = local1; rtrue; ]; [ Skiff2_action local1 local2 ; if (local1) { if (local1 == 9[torch?]) rtrue; if (local1 ~= 5[your_hand?]) rfalse; print (string) Spacing_str; if (skiff2 has visited) { Cast_with_capital_The(skiff2); ! not popped } else { give skiff2 visited; print "A ", (name) skiff2; } print " nods in the waves, its oars jerking around in the current."; rtrue; } if (action == ##Examine) { Cast_with_capital_The(skiff2); ! not popped print " is large enough to carry several men, but light enough that you feel able to row it", (string) Dot_newline_str; rtrue; } if (action == ##LookIn) { give pair_of_oars ~attrib9; if (player in skiff2) { OtherThingsInVehicle(); ! not popped } else { print "In"; Cast_with_the(skiff2); ! not popped print " is"; DescribeOb(skiff2); ! not popped print (string) Dot_newline_str; } give pair_of_oars attrib9; rtrue; } if (action == ##Launch || (action == ##Push && second == sea)) { print (string) Already_is_str; rtrue; } if (action == ##Tie) { if (location == By_the_Ship) { return Tie_skiff_to_ladder_and_board(); } (string) There_is_nothing_str, "to moor it to!"; } if (action == ##Row) { if (parent(player) == skiff2) { if (location == Beach) { return YouHaveToFirst("launch",skiff2); } print (string) Have_to_str, "specify a ", (name) direction, (string) Dot_newline_str; rtrue; } return YouHaveToFirst("get in",skiff2); } if (action == ##ClimbOut) { if (location == Lagoon) { print "Although the lagoon is warm and clear, it is much too deep.^"; rtrue; } if (location ~= By_the_Ship) rfalse; return Tie_skiff_to_ladder_and_board(); } if (action ~= ##PlaceOn || second ~= skiff2) rfalse; Perform(##Insert,noun,skiff2); ! not popped rtrue; ]; [ Pair_of_oars_action ; if (action ~= ##Remove or ##Take) rfalse; print "They are fastened to"; Cast_with_the(skiff2); ! not popped print " with metal oarlocks", (string) Dot_newline_str; rtrue; ]; [ Tie_skiff_to_ladder_and_board ; Unqueue(FloatInOceanDaemon); ! not popped Skiff_tied_to_ladder = true; print "You tie"; Cast_with_the(skiff2); ! not popped print " to the end of"; Cast_with_the(ladder); ! not popped print ", then climb partway up it", (string) Dot_newline_str; new_line; move player to location; move skiff2 to By_the_Ship; return Goto(On_the_Ladder); ]; [ By_the_Ship_action rarg ; if (rarg == M_ENTER) { move player to skiff2; rtrue; } if (rarg == M_LOOK) { print "You are floating in a small skiff "; if (Turns_on_ocean > 4 && Turns_on_ocean < 9) { print "at the stern of"; Cast_with_the(Helena_Louise); ! not popped print ", "; if (Turns_on_ocean == 7 or 8) { print "at the far edge of"; } else if (Turns_on_ocean == 5 or 6) { print "in the middle of"; } } else { print "in"; } print " the lagoon."; if (~~Rope_ladder_twisting_in_breeze) rtrue; print " A rope ladder, frayed ends dripping water, hangs down from the poop deck."; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4) || FindDaemon(FloatInOceanDaemon)) rfalse; Distance_one_row_takes = NONE; return QueueInterrupt(FloatInOceanDaemon,65535); ]; [ Lagoon_action rarg distance ; if (rarg == M_LOOK) { print "You are "; if (parent(player) == cask) { print "crouched in a cask"; distance = Cask_distance_from_shore; } else { print "sitting in a skiff"; distance = skiff_distance_from_shore; } print " on the lagoon of ", (name) St_Sinistra; if (Turns_on_ocean - distance < 2) { print ". You are quite near"; if (Helena_Louise has general_2) { Cast_with_the(reefs); ! not popped } else { Cast_with_the(Helena_Louise); ! not popped } } else if (10 - distance < 5) { print ". The crash of surf hitting"; Cast_with_the(reefs); ! not popped print " is quite loud"; } else if (distance < 3) { print ". Music floats down to the water, mingling with the distant roar of the sea"; } else { print ". The jungle looms gray-green in the light of the full moon"; } print '.'; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4) || action == ##Look) rfalse; Floated_into_lagoon = true; rfalse; ]; [ Stone_action ; if (action == ##Shoot) { if (~~second) { remove stone; Cast_with_capital_The(stone); ! not popped print ", unaimed, flies into the air, arcing up and into the sea", (string) Dot_newline_str; rtrue; } if (noun == garter) { return WrapSub(); } if (noun.size < 5) { print "You don't trust your aim to hit something that small", (string) Dot_newline_str; rtrue; } if (stone notin garter) { print (string) Have_to_str, "put"; Cast_with_the(stone); ! not popped print " into"; return Cast_with_the_and_print_dots(garter); } if (noun has general_1) { return UnladylikeToHitWhenDown(); } if (noun == yourself) { print (string) Suicide_str; rtrue; } if (noun == Lucy) { print "That is thoroughly unladylike behavior.^"; rtrue; } if (noun == pistol) { ReversePerform(Crulley,second); ! not popped rtrue; } if (noun == mansion or Helena_Louise) { "That is too far away."; } if (noun == Captain_Jamison) { move garter to location; print "You falter, dropping the makeshift sling. Your heart rules too well", (string) Dot_newline_str; rtrue; } print "You pull"; Cast_with_the(garter); ! not popped print " taut, aim, and let fly"; Cast_with_the(stone); ! not popped print ". "; give stone trytakebit; move stone to location; if (noun == Lafond && Lafond_seduction_cnt < 5 || (noun == Crulley && Lafond_seduction_cnt < 7)) { print "It clatters onto the rocks, short of the mark", (string) Dot_newline_str; rtrue; } if (noun has animate) { new_line; print (string) Spacing_str, "He ducks as it whirs past his ear"; if (noun == Crulley) { give your_father general_1; ++score; print ". Papa, creeping unnoticed up the stairs, leaps and wrests the gun from his grip, toppling all three, father, pirate and gun, off the cliff. Lucy screams as the struggling pair fall to the rocks below.^ You run to Nicholas. You have lost"; Cast_with_the(your_father); ! not popped print ", but Nicholas's embrace remains, comforting, shielding, a world of love", (string) Dot_newline_str; return WinGame(); } print " to disappear with a quiet thud into the sand"; if (noun == your_father) { print ". He looks a bit surprised, but nods encouragingly"; } print (string) Dot_newline_str; rtrue; } print "It bounces off"; return Cast_with_the_and_print_dots(noun); } if (action == ##Take && stone has trytakebit) { return YouCantReachThe(stone); } if (action == ##ThrowAt or ##Throw && noun == stone) { if (~~second) { Perform(##Shoot,stone); ! not popped rtrue; } if (Ultimately_InP(second)) { return WrapSub(); } if (second has general_1) { UnladylikeToHitWhenDown(); ! not popped rtrue; } move stone to location; print "You hurl"; Cast_with_the(stone); ! not popped print ", but it falls far short of"; return Cast_with_the_and_print_dots(second); } if (action == ##Attack) { if (stone notin garter) { return HowDoYouDoThat(); } Perform(##Shoot,noun,stone); ! not popped rtrue; } if (action ~= ##Examine) rfalse; print "It is a pretty little stone", (string) Dot_newline_str; rtrue; ]; [ Shallows_action rarg ; if (rarg == M_LOOK) { print "You are "; if (parent(player) == location) { if (Disguised_as_boy) { print "soaking your shoes and stockings in"; } else if (linen_chemise hasnt general_3) { print "soaking the hem of your chemise in"; } else { print "holding your skirts high over"; } } else { if (parent(player) == cask) { print "crouched in"; Cast_with_the(cask); ! not popped } else { print "sitting in"; Cast_with_the(skiff2); ! not popped } print " in"; } print " the warm, lapping waves of the shallows. A white sand beach is west of you."; rtrue; } if (rarg ~= M_HANDLED || action ~= ##Shoot or ##Shoot || (Meta_Loc(noun) == location or globals && Meta_Loc(second) == location or globals)) rfalse; "Your aim is too unsure from this distance. Go to the beach."; ]; [ EnterOcean ; if (location == Shallows) { if (player in skiff2) { if (P_walk_dir == w_to) { YouHaveToFirst("get out of",skiff2); ! not popped rfalse; } if (P_walk_dir ~= e_to) rfalse; print (string) Have_to_str, "row that way", (string) Dot_newline_str; rfalse; } if (P_walk_dir == w_to) { return Beach; } print "You wade in the shallow water, unable to swim", (string) Dot_newline_str; rfalse; } if (P_walk_dir == w_to) { print "You're going that way anyway", (string) Dot_newline_str; rfalse; } print (string) Have_to_str, "row that way", (string) Dot_newline_str; rfalse; ]; [ Reefs_action ; if (action ~= ##Examine) rfalse; if (UnderDecksP(location)) { print (string) No_see_str, (name) reefs, " from here", (string) Dot_newline_str; rtrue; } print "A line of reefs separates the lagoon from the sea beyond", (string) Dot_newline_str; rtrue; ]; [ Captain_Jamison_action rarg ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; if (location ~= Folly_Room) { print (string) Spacing_str; } if (location == Cabin) { print (string) The_pirate_captain_str, "is studying you"; } else if (location == Deck) { print (string) The_pirate_captain_str, "stands protectively a few steps behind you"; } else if (location == Captains_Quarters) { print (name) Captain_Jamison, " is adjusting his clothes"; } else if (FindDaemon(TheDuelDaemon)) { print "Battered and bruised, Nicholas can hardly stand"; } else if (Captain_Jamison has general_1) { print (string) Eyes_closed_str; } else if (location == Beach) { print "Nicholas "; if (Lafond has general_1) { print "walks toward you, smiling wearily"; } else if (Lafond_seduction_cnt > 4) { print "and Lafond are fighting"; } else { print "stands alone at one edge of the beach"; } } else if (FindDaemon_or_Timer(Finale)) { print "Nicholas stands, half-supported by Lucy and"; Cast_with_the(your_father); ! not popped } else { if (location ~= Ballroom) rfalse; print "Nicholas looks quite rakish, in red velvet and white, his rapier flashing in the light of the ", (name) chandelier; } print '.'; rtrue; } if (Captain_Jamison == actor) { if (FindDaemon(TheDuelDaemon) && location == Gallery or Stair_Landing) { print (string) You_find_yourself_str; rtrue; } if (location == Beach && FindDaemon(Finale)) { if (Lafond hasnt general_1 && Lafond_seduction_cnt > 4) { print (string) You_find_yourself_str; rtrue; } if (action == ##Go or ##LookIn or ##Stop or ##ClimbDown) { return FatherIsDead("Nicholas stops at your cry, and turns, curious, to face Crulley just as the pistol sprays shot into his chest."); } return DoesntHearYou(); } if (Captain_Jamison has general_1) { print (string) He_doesnt_respond_str; rtrue; } if (action == ##ComeWith && noun == yourself && FindDaemon(JamisonDancesWithYouDaemon) && your_father has visited) { Jamison_knows_Papa_is_rescued = true; "~I will follow you anywhere you please, but first I must kill Lafond.~"; } if (action == ##ILove) { if (noun == Captain_Jamison or man) { "He smiles at you warmly, his eyes full of passion."; } if (noun == Lafond) { if (FindDaemon(JamisonInFollyDaemon) || FindDaemon(JamisonDancesWithYouDaemon)) { remove Captain_Jamison; AbsolutelyRefuseJamison(); ! not popped "He looks at you in disgust and walks away."; } "~Don't jest,~ he says."; } "He isn't all that interested."; } if (action == ##Leave) { if (Beach has visited) { Question_cnt = Q_DO_YOU_MEAN_THAT; QueueInterrupt(QuestionExpireTimer,2); ! not popped "He catches your arm, ~Nay, can you mean that?~"; } "~I have business to attend to here, and have no intention of leaving.~"; } if (action == ##Browse && noun == missive) { Perform(##TellAbout,yourself,missive); ! not popped rtrue; } if (action == ##TellAbout && noun == yourself) { if (second == missive) { print "~Your father wrote it for you.~"; new_line; } else { if (second == new_ring) { actor = player; Perform(##Take,new_ring); ! not popped rtrue; } if (second == Lafond) { print "~I abhor the fiend.~ He clenches a fist."; new_line; } else if (second == your_father) { if (FindDaemon(JamisonDancesWithYouDaemon)) { Jamison_knows_Papa_is_rescued = true; print (string) Jamison_meets_you_ashore_convo_tbl-->0, (string) Dot_newline_str; } else if (FindDaemon(JamisonInFollyDaemon)) { print "~Let's not discuss"; Cast_with_the(your_father); ! not popped print " just now,~ he says, kissing your neck", (string) Dot_newline_str; } else { print "~I admire and respect your father greatly.~"; new_line; } } else { DoesntHearYou(); ! not popped } } return Clear_itbl(); } if (action == ##Take && noun == flower) { actor = player; Perform(##Give,flower,Captain_Jamison); ! not popped actor = Captain_Jamison; rtrue; } rarg = GenericLivingResponses(Captain_Jamison); if ((~~rarg) || rarg == invalidEnum8) rfalse; rtrue; } if (action == ##Examine) { if (Captain_Jamison has general_1) { if (FindDaemon(TheDuelDaemon)) { "He lies in a pool of blood."; } print (string) Eyes_closed_str; rtrue; } if (location == Captains_Quarters or Ballroom or Folly_Room && (~~Jamisons_men_have_attacked)) { print "Jamison is finely dressed, in red velvet coat and full breeches, with a long gold embroidered vest and waterfalls of white lace at his neck, wrists and boottops. His rapier is bedecked with a fringed gold ribbon. He wears no wig, his unpowdered hair tied neatly at the back of his neck", (string) Dot_newline_str; rtrue; } print "Jamison carries an aura of power unusual in men so slim and tall, the strength of a willow in his hard seaworn body, straight shouldered and resilient. ", (string) Chestnut_hair_str, "A jagged scar etches one cheek, harsh against the warmth of his limpid blue eyes", (string) Dot_newline_str; rtrue; } if (action == ##KnockOver or ##Rescue && FindDaemon(Finale)) { actor = Captain_Jamison; Perform(##Stop,Room_Holder); ! not popped actor = player; rtrue; } if (Captain_Jamison has general_1) { if (action == ##Give && noun == smelling_salts) { return UseSmellSaltsOnJamison(); } if (action == ##ThrowAt or ##PlaceOn or ##Blow && noun == spices) { "He sneezes involuntarily, unconscious."; } if (action == ##Destroy or ##Kick or ##Attack) { return UnladylikeToHitWhenDown(); } if (action == ##Move) { "He's too heavy."; } if (action == ##Hug or ##Kiss) { print "You press your lips to his cold mouth. ", (string) He_doesnt_respond_str; rtrue; } if (action ~= ##AskAbout or ##TellAbout or ##Tell || noun == Captain_Jamison && (~~PhysicallyTouchVerbP(Captain_Jamison))) rfalse; print (string) He_doesnt_respond_str; rtrue; } if (action == ##Give) { if (noun == smelling_salts) { return UseSmellSaltsOnJamison(); } if (noun == banknote) { print (name) Captain_Jamison, " returns"; Cast_with_the(banknote); ! not popped print " to you", (string) Dot_newline_str; rtrue; } if (noun == flower) { "He prevents you, smiling. ~It looks much too pretty against your hair. Keep it.~"; } if (noun ~= coffer) rfalse; return DoesntHearYou(); } if (action == ##Wake) { if (second ~= smelling_salts) { (string) You_cant_str, "revive him with that!"; } if (Ultimately_InP(smelling_salts)) { return UseSmellSaltsOnJamison(); } print (name) Captain_Jamison, " is not asleep", (string) Dot_newline_str; rtrue; } if (action == ##Free && P_initial_word == 'free') { if (Captain_Jamison in pair_of_manacles) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "You have the key, maybe?"; } print "Jamison is free enough as it is", (string) Dot_newline_str; rtrue; } if (action == ##Destroy or ##Kick or ##Attack) { print "~Please, I'm not trying to hurt you,~"; if (location == Cabin) { print " the stranger"; } else { Cast_with_the(Captain_Jamison); ! not popped } print " says, casually deflecting the blow", (string) Dot_newline_str; rtrue; } if (action == ##Kiss && actor == player) { if (location == Cabin or Deck) { "You are not so pert as to kiss a stranger, and a pirate, at that!"; } if (OnShipP(location)) { print "That thought has occurred to you before, but now does not seem appropriate", (string) Dot_newline_str; rtrue; } if (location == Folly_Room) { Assorted_situations_FIGURE_OUT_LATER = 1; print "You lean into his arms, face lifted", (string) Dot_newline_str; rtrue; } if (FindDaemon(TheDuelDaemon) || FindDaemon(Finale)) { print "You would only distract"; return Cast_with_the_and_print_dots(Captain_Jamison); } if (FindDaemon(JamisonDancesWithYouDaemon)) { print "In view of all"; Cast_with_the(dancer); ! not popped print "s, you exchange only a peck on the cheek", (string) Dot_newline_str; rtrue; } print "He kisses you back", (string) Dot_newline_str; rtrue; } if (action == ##TellAbout) { if (CheckIfWordUsedToIdentifyObj('library',mansion) || CheckIfWordUsedToIdentifyObj('cell',Cell2) || second == Dungeon or portrait) { "He nods. ~That area is guarded well.~"; } if (second == your_father) { if (your_father in Cell2) { "He smiles fondly at your reminiscing. ~I never knew my father -- he died when I was a boy.~"; } Jamison_knows_Papa_is_rescued = true; "~Such bravery joined with such beauty!~"; } if (second ~= Crulley || Beach hasnt visited) rfalse; "~Crulley?! God's blood!~"; } if (action == ##Touch or ##Hug && location == Folly_Room) { Perform(##Kiss,Captain_Jamison); ! not popped rtrue; } if (action == ##Dance) { if (location == Ballroom && Dancer_requesting_dance == Captain_Jamison) { print "You pace out the steps.^"; rtrue; } if (~~FindDaemon(JamisonDancesWithYouDaemon)) rfalse; move player to Ballroom; move Captain_Jamison to Ballroom; Dancer_requesting_dance = Captain_Jamison; print "You whirl back out to", " the dance floor", (string) Dot_newline_str; rtrue; } if (action ~= ##Show || noun ~= jewelled_brooch || Captain_Jamison notin pair_of_manacles) rfalse; "Nick smiles dazzlingly, ~Of course! Now pick the locks.~"; ]; [ Referred_to_Pirate ; if (Jamisons_men_have_attacked && location == Ballroom) { return pirate; } if (Captains_Quarters hasnt visited) rfalse; return Crulley; ]; [ JamisonRescuesYouTimer ; Question_cnt = Q_WILLING_TO_TRUST_JAMISON; QueueInterrupt(QuestionExpireTimer,1); ! not popped Person_to_refuse = Captain_Jamison; print (string) Spacing_str; if (Various_duel_or_ship_or_dance_counters == 1) { move Captain_Jamison to location; QueueInterrupt(JamisonRescuesYouTimer,65535); ! not popped if (Crulley_knocked_out_cnt < 2) { Unqueue(Crulley_breaks_into_cabin_daemon); ! not popped give Crulley general_1; print (name) Crulley, " drags you, despite your resistance, to"; if (parent(player) == bed3) { move player to location; print " your feet"; } else { print "wards him"; } print ". Then suddenly he grunts, stiffens and slumps into your arms. ", (string) Crulley_collapses_str, ".^ A tall form blocks the shattered door, one fist still raised from striking your attacker"; } else { Cast_with_capital_The(door); ! not popped print " creaks slightly as a tall form bends through its smashed remains. ~You seem to have this situation well in hand,~ timbers a well-bred voice"; } print ". You catch a glimpse of the hard masculinity of his broad shoulders, the implied power in the scar that etches the stranger's jaw, and feel tremors course through your veins. Then you realize how ragged are his shirt, patched breeches and high boots. Intuitively, you understand -- he is the dreaded Falcon, scourge of the sea! Alas, your fate is sealed. Resigned, you meet his sea-blue eyes."; new_line; } else if (Various_duel_or_ship_or_dance_counters == 2) { move missive to player; SetPronoun(missive); ! not popped print "To your surprise, ", "the stranger bows. ~Well met, my lady.~ His accent is cultured, his smile vibrant. ~I am Captain Nicholas Jamison, known in these waters as 'The Falcon'. Your father has sent me.~ He chuckles at your glare of distrust. ~Yes, you are like your sire. You needn't believe me untried -- I carry this.~ He hands you"; Cast_with_article_and_print_dots(missive); ! not popped } else if (Various_duel_or_ship_or_dance_counters == 3) { give door open; print (string) The_pirate_captain_str, "glances around the empty room, then notices the coffer"; if (coffer in player) { print " in your arms"; } move coffer to Captain_Jamison; print ". ~Davis's safety box -- my men were hoping I'd find it.~ He takes it and nudges the unconscious man on the floor, ~I wonder how ", (name) Crulley, " knew you were here? Just his bad luck? He'll be flogged when he wakes.~^ The pirate bows. ~My lady, may I offer my protection and my ship until your father is free?~"; new_line; } else if (Various_duel_or_ship_or_dance_counters == 4 or 5) { if (Various_duel_or_ship_or_dance_counters == 4 && (~~Assorted_situations_FIGURE_OUT_LATER)) { Person_to_refuse = Captain_Jamison; print "~We haven't time to waste. Will you come willingly or not?~ says"; Cast_with_the_and_print_dots(Captain_Jamison); ! not popped } else { Unqueue(JamisonRescuesYouTimer); ! not popped Unqueue(PirateAttack_daemon); ! not popped if (Assorted_situations_FIGURE_OUT_LATER == 1) { print "He chuckles. ~Brave lady, to trust a stranger -- and a pirate. Who knows, perhaps I forged your father's signature? Keep by my side as we go to my ship -- few sailors respect a lady's dignity.~ He helps you through"; Cast_with_the_and_print_dots(door); ! not popped new_line; } else { print "He sighs, ~You share"; Cast_with_the(your_father); ! not popped print "'s stubborn streak. I wished not to do this.~ He leaps to your side, hauling you up onto his shoulder, and carries you out of the room."; Cast_with_the(Captain_Jamison); ! not popped print " sets you on your feet again on the horror of the deck", (string) Dot_newline_str; new_line; } give Captain_Jamison attrib9; move Captain_Jamison to Deck; Goto(Deck); ! not popped } } ++Various_duel_or_ship_or_dance_counters; return Various_duel_or_ship_or_dance_counters; ]; [ JamisonFirstTalksToYouDaemon ; print (string) Spacing_str, (string) First_conversation_with_Jamison-->Various_duel_or_ship_or_dance_counters; new_line; if (Various_duel_or_ship_or_dance_counters == 2) { remove Captain_Jamison; QueueInterrupt(JamisonAboutToLeaveShipDaemon,8); ! not popped } else { QueueInterrupt(JamisonFirstTalksToYouDaemon,1); ! not popped } ++Various_duel_or_ship_or_dance_counters; return Various_duel_or_ship_or_dance_counters; ]; [ JamisonAboutToLeaveShipDaemon ; if (FindDaemon(Overhear_crulleys_plot_timer) || location == Sleeping_Cupboard) { return QueueInterrupt(JamisonAboutToLeaveShipDaemon,2); } move jewelled_brooch to player; print (string) Spacing_str, "You hear"; if (location == Captains_Quarters) { Cast_with_the(large_cupboard); ! not popped print " scrape"; } else if (location == Landing) { Cast_with_the(door); ! not popped print " being unbarred"; } else { print " a footstep"; } print ", "; if (linen_chemise hasnt general_3) { print "turn, and cover ", (name) yourself, " as best you can with what you are holding, for Jamison stands there, his eyes burning through your lightweight chemise. He chuckles, ~I am not sorry in the least that I surprised you."; } else if (Disguised_as_boy) { print "and"; Cast_with_the(Captain_Jamison); ! not popped print "'s startled laugh. ~For a moment I thought you were Matthew, the boy who used to sleep in the cupboard. He ran off last port."; } else { print "and turn to see"; Cast_with_the(Captain_Jamison); ! not popped print ". ~Hello!"; } if (location ~= Captains_Quarters) { print " How did you escape? Don't stutter, I won't lock you up again -- you are safe as long as you remain below-decks."; } print " I came down to give you this -- my allotment from"; Cast_with_the(coffer); ! not popped print ".~ He nods at the box in his arms.^ Jamison starts to pin"; Article(jewelled_brooch); ! not popped print " on your clothes, but, ~Devil take it, the clasp is broken. I'll have it repaired.~ He folds the pretty thing into ", (name) your_hand, ". ~And I meant to reassure you that if the men suddenly abandon ship, they are off to help me. Rodney will stay behind with you.~ He "; if (location == Captains_Quarters) { move coffer to location; print "drops"; Cast_with_the(coffer); ! not popped print " on the floor, smiling in farewell,"; } else { move coffer to player; print "hands"; Cast_with_the(coffer); ! not popped print " to you. ~Please return this to my quarters for me, will you?~"; } print " and walks swiftly "; if (location == Landing) { print "up the stairs to the deck, barring the door a moment later"; } else { print "away"; } print (string) Dot_newline_str; QueueInterrupt(Fuse_is_burning,3); ! not popped QueueInterrupt(Jamison_leaves_ship_timer,5); ! not popped return 8[Crulley?]; ]; [ JamisonDancesWithYouDaemon ; if (Various_duel_or_ship_or_dance_counters == 1 && Ballroom == location) { move Captain_Jamison to location; Lafond_seduction_cnt = 1; QueueInterrupt(LafondDanceDaemon,7); ! not popped Dancer_requesting_dance = Captain_Jamison; Person_to_refuse = Captain_Jamison; Question_cnt = Q_DANCE_WITH_JAMISON; QueueInterrupt(QuestionExpireTimer,2); ! not popped Current_dancing_partner = Captain_Jamison; print (string) Spacing_str, (name) Captain_Jamison, " moves up to you, saying, ~May I have this dance?~ He doesn't await an answer, sweeping you out onto", " the dance floor", (string) Dot_newline_str; } else if (Various_duel_or_ship_or_dance_counters == 2) { Person_to_refuse = Captain_Jamison; if (~~Jamison_seen_you_ashore) { Jamison_seen_you_ashore = true; print (string) Spacing_str, '"', (string) What_the_devil_str, "smiles suddenly. ~Why should I complain? You are quite safe, since no one expects you here. And you are looking lovely.~"; new_line; } else { JamisonTalksToYouInFollyDaemon(); ! not popped } if (location == Ballroom) { print (string) Spacing_str, "The steps of the dance separate you a moment, as you twirl around and curtsey to another dancer. You glide back into the captain's arms", (string) Dot_newline_str; } } else if (Various_duel_or_ship_or_dance_counters == 3) { Person_to_refuse = Captain_Jamison; JamisonTalksToYouInFollyDaemon(); ! not popped if (location == Ballroom) { print (string) Spacing_str, "Your hands linked tightly with his and held high over ", (name) your_head, "s, a line of dancers files between you and Jamison", (string) Dot_newline_str; } } else if (Various_duel_or_ship_or_dance_counters == 4) { Person_to_refuse = Captain_Jamison; JamisonTalksToYouInFollyDaemon(); ! not popped if (location == Ballroom) { print (string) Spacing_str, "Together you whirl around the ballroom, his arm snug around your waist, leading you gracefully, masterfully.^ Nicholas's grip tenses as he nods to a bewigged man staring at you. You turn, and the man moves on", (string) Dot_newline_str; } } else { if (Various_duel_or_ship_or_dance_counters ~= 5) rfalse; remove Captain_Jamison; Dancer_requesting_dance = nothing; Unqueue(JamisonDancesWithYouDaemon); ! not popped JamisonTalksToYouInFollyDaemon(); ! not popped print (string) Spacing_str, "The music ends with a flourish"; if (location == Ballroom) { print " and you pirouette once more before curtseying to Jamison. As you move"; } else { print ". As he guides you back"; } print " to the side of", " the dance floor", ", Nick adds, ~We should separate -- I'm sure I am being watched. You would be safer aboard"; Cast_with_the(Helena_Louise); ! not popped print ". If you slip out the veranda doors, no one will notice you leaving.~ He touches ", (name) your_hand, " and dissolves into the crowd", (string) Dot_newline_str; if (location ~= Ballroom) { Goto(Ballroom); ! not popped } } ++Various_duel_or_ship_or_dance_counters; return Various_duel_or_ship_or_dance_counters; ]; [ DragoonsSeizeJamison byorder ; Jamison_imprisoned = true; print (string) Spacing_str, "There is a commotion from the west. A woman screams and a man yells, ~Stop, Pirate!~ "; if ((~~byorder) && location ~= Foyer) { if (Ultimately_InP(hat)) { give hat ~worn; move hat to Library; } print "You run to the foyer in time to see two dragoons dragging out the battered frame of"; Cast_with_the(Captain_Jamison); ! not popped } else { print "and Jamison is dragged out of the ballroom by two burly dragoons"; } print (string) Dot_newline_str, " An officer quiets the guests, ~This is the buccaneer who has been pirating our ships. He had the audacity to come here tonight intending to assassinate our dear governor. Do not worry, ladies, he was arrogant enough to come alone.~ The officer marches after his men. "; Cast_with_capital_The(dancer); ! not popped print "s return to their banal conversations", (string) Dot_newline_str; if (~~byorder) { new_line; return Goto(Foyer); } QueueInterrupt(LafondDanceDaemon,1); ! not popped Dancer_requesting_dance = Lafond; print (string) Spacing_str, "Only the painful grip"; Cast_with_the(Lafond); ! not popped " has on your arm prevents you from swooning away. ~Ah, so that's the way of it,~ he purrs, noticing your sudden pallor. ~All the better for me.~ He pulls you unresisting into a dance."; ]; [ JamisonInFollyDaemon called_explicitly ; if (location ~= Folly_Room) rfalse; Person_to_refuse = Captain_Jamison; if (~~called_explicitly) { print (string) Spacing_str; } if (Various_duel_or_ship_or_dance_counters == 1) { QueueInterrupt(JamisonInFollyDaemon,65535); ! not popped move Captain_Jamison to Folly_Room; print (name) Captain_Jamison, " enters"; Cast_with_the(folly); ! not popped print ", stooping to avoid the flowers dangling over the door. ~I thought I heard someone."; if (~~Jamison_seen_you_ashore) { Jamison_seen_you_ashore = true; print ' ', (string) What_the_devil_str; } else { print "~ Jamison "; } print "sighs. ~What an astonishing girl you are, my dear. "; if (linen_chemise hasnt general_3) { print "If --~", (string) Looks_you_over_str, ", ~somewhat underdressed"; } else if (Disguised_as_boy) { print "And so ingeniously dressed"; } else { print "And looking more lovely than ever"; } print ".~ He plucks"; Article(flower); ! not popped print " from the tangle above the door, and sets it in your hair. ~The beauty of this blossom is nothing to yours.~"; new_line; move flower to player; give flower ~attrib9; give flower takeable; } else if (Assorted_situations_FIGURE_OUT_LATER == 65535 || Various_duel_or_ship_or_dance_counters == 6 && Captain_Jamison in location) { Unqueue(JamisonInFollyDaemon); ! not popped Person_to_refuse = nothing; remove Captain_Jamison; print "Jamison backs away from you, smiling wistfully", '.', (string) He_leaves_str; } else if (Various_duel_or_ship_or_dance_counters == 2) { print "Catching his breath, Jamison pulls you against him, his hands circling your waist"; if (flower in player) { print ", crushing"; Cast_with_the(flower); ! not popped print " between you"; } print ". ~Darling,~ he whispers, leaning over you, ~oh, my angel ...~"; new_line; } else if (Various_duel_or_ship_or_dance_counters == 3) { Question_cnt = Q_LET_JAMISON_KISS_YOU; QueueInterrupt(QuestionExpireTimer,2); ! not popped print "~My lovely,~ Jamison says huskily. His eyes burn intently, their blue like the sea on a summer day. A shiver of warmth flows through you, and you tremble at his touch. The pirate's hands, warm and exciting, caress you, searing through the thin linen of your chemise. His lips near yours, his breath softly scented. ~May I kiss you?~"; new_line; } else if (Various_duel_or_ship_or_dance_counters == 4) { print "Tender is his kiss, soft his lips as his body presses hard against you. You drown in the tide of your passion, swept like the sea against the rocks of the shore."; new_line; } else if (Various_duel_or_ship_or_dance_counters == 5) { remove Captain_Jamison; print "With a pent-up sigh, Nicholas forces himself away from you. ~Now is not the time or the place to advance my suit,~ he says, wistfully. ~But the night is still young and you are so beautiful! I must be gone, lest I lose my soul in you.~", (string) He_leaves_str; } ++Various_duel_or_ship_or_dance_counters; return Various_duel_or_ship_or_dance_counters; ]; [ JamisonTalksToYouInFollyDaemon ; print (string) Spacing_str; if (65 >= random(100) && Jamison_convo_cnt < 3) { if ((~~Jamison_convo_cnt) && Jamison_knows_Papa_is_rescued) { print (string) ComplexPickOne(Jamison_contact_tbl), (string) Dot_newline_str; rtrue; } print (string) Jamison_meets_you_ashore_convo_tbl-->Jamison_convo_cnt, (string) Dot_newline_str; ++Jamison_convo_cnt; return Jamison_convo_cnt; } print (string) ComplexPickOne(Jamison_contact_tbl), (string) Dot_newline_str; rtrue; ]; [ Rapier_action local1 ; if (local1) { if (location ~= Dungeon) rfalse; if (local1 == 9[torch?]) rtrue; print (string) Spacing_str, "A rapier lies in the half-dark of a corner."; rtrue; } if (action == ##Take) { if (Captain_Jamison hasnt general_1 && Captain_Jamison in location) { "Jamison prevents you, ~This is not a weapon for ladies.~"; } if (location == Dungeon && Crulley in Dungeon && rapier hasnt visited && ITake(false) ~= 8[Crulley?] or 0) { "Taken. ", (name) Crulley, " snorts, ~Be careful, you might hurt yer dearie.~"; } if (rapier notin Cookie) rfalse; (name) Cookie, " objects. ~It ain't fer a lady.~"; } if (action == ##PutThrough or ##Insert or ##Throw && (second == trapdoor || (second == Crulley && Crulley has general_2))) { "But you might need it later!"; } if (action ~= ##Examine) rfalse; print "Jamison's rapier is a dangerous looking sword with a narrow pointed blade"; if (location ~= Cabin or Deck) { print ". It is decorated with a big floppy ribbon"; } print (string) Dot_newline_str; rtrue; ]; [ St_Sinistra_action ; if (action ~= ##Examine) rfalse; if (location == Library) { return Perform(##Examine,globe); } if (UnderDecksP(location)) { print (string) You_cant_str, "see it from here", (string) Dot_newline_str; rtrue; } if (OnShipP(location) || location == Shallows or Lagoon or By_the_Ship or On_the_Ladder) { print "St. Sinistra is blessed with lush tropical beauty, jungle besieging the mansion atop the southern cliffs", (string) Dot_newline_str; rtrue; } Perform(##Look); ! not popped rtrue; ]; [ UndergroundP where ; if (where == Stairwell or Bottom_of_Stairwell or Anteroom or Dungeon or North_Passage or South_Passage or Corner or Guards_Bunkroom or Cell1 or Cell2) rtrue; rfalse; ]; [ Beach_action rarg ; if (rarg == M_LOOK) { print "This is a tiny beach, at the base of vine-covered cliffs. To the east,"; if (Helena_Louise has general_2) { print " across the debris-ridden lagoon, black reefs speckle the blue endless sea"; } else { Cast_with_the(Helena_Louise); ! not popped print " floats serenely on the lagoon"; } if (Jamisons_men_have_attacked) { print ". Halfway out to the ship is a skiff crowded with men; another skiff sits on the sand"; } print (string) Dot_newline_str, (string) Spacing_str, "Immediately north of you, a rocky staircase is hewn into the cliff. "; if (~~FindDaemon(Finale)) rtrue; print "A sizable number of dragoons huddle at the top."; rtrue; } if (rarg == (M_ENTER|invalidEnum4) && Jamisons_men_have_attacked && stone hasnt visited && FindDaemon_or_Timer(Finale)) { move stone to Beach; give stone visited; print (string) Spacing_str, "You splash into the rising surf and pain needles up your leg. Blood swirls out from your shoe in the shallow water, flowing over a small pointed stone", (string) Dot_newline_str; rtrue; } if (rarg == M_HANDLED && action == ##CrawlThru && noun == Shallows) { Do_Walk(e_to); ! not popped rtrue; } if (rarg ~= M_ENTER || Cookie notin Lawn) rfalse; "~I know 'e ain't down there!~ Cookie cries."; ]; [ Beach_u_to ; if (FindDaemon(Finale)) { print "You would be safer aboard"; Cast_with_the_and_print_dots(Helena_Louise); ! not popped rfalse; } return Lawn; ]; [ Skiff1_action ; if (location == Beach) { Cast_with_capital_The(skiff2); ! not popped print " is out of reach. Wade into the shallows", (string) Dot_newline_str; rtrue; } if (location ~= On_the_Ladder) rfalse; if (~~Skiff_tied_to_ladder) { print (string) No_see_str, (name) skiff2, " here."; new_line; return 8[Crulley?]; } if (action ~= ##Board or ##CrawlThru) rfalse; return Do_Walk(d_to); ]; [ Lawn_action rarg ; if (rarg == M_LOOK) { print "Jungle looms around this clipped lawn, a path meandering westward into the dense undergrowth. To the east is a folly entangled in blooming jasmine. The way to the beach is obscure, but visible to the southeast. Behind the folly a thorny hedge blocks the cliff view of the sea."; if (Jamisons_men_have_attacked) rtrue; new_line; print (string) Spacing_str, "Music and voices float from the veranda to the north."; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4)) rfalse; if (location hasnt animate) { give location animate; (string) Spacing_str, "Two men stand whispering in the shadows. You catch an occasional word, ~Davis dead... girl... Falcon on Sinistra.~ The men separate, the well-dressed one going into the ballroom as the other slinks into the bushes. You see his face. Crulley!"; } if (~~Cookie_hasnt_found_you_yet) rtrue; return CookieFindsYou_timer(true); ]; [ Referred_to_flower ; if (location ~= Folly_Room) rfalse; return flower; ]; [ Flower_action ; if (action == ##Pick or ##Take && flower hasnt takeable) { print "You can't bear to pick"; return Cast_with_the_and_print_dots(flower); } if (action ~= ##Smell) rfalse; print "Ah, jasmine! Mama grew this in her garden", (string) Dot_newline_str; rtrue; ]; [ Folly_Room_action rarg ; if (rarg ~= M_ENTER || Folly_Room has visited || Lafonds_Bedroom has visited || your_father notin Cell2) rfalse; Various_duel_or_ship_or_dance_counters = 1; return QueueInterrupt(JamisonInFollyDaemon,2); ]; [ Folly_action ; if (action == ##CrawlThru) { if (location == In_the_Hedge) { return Do_Walk(w_to); } if (location == Lawn) { return Do_Walk(e_to); } print (string) Look_around_you_str; rtrue; } if (action ~= ##Examine) rfalse; if (location == In_the_Hedge) { Cast_with_capital_The(folly); ! not popped print " is invisible beyond the leaves to the west", (string) Dot_newline_str; rtrue; } if (location == Folly_Room) { LookSub(); ! not popped rtrue; } Cast_with_capital_The(folly); ! not popped print " is obscured by tangled vines", (string) Dot_newline_str; rtrue; ]; [ Loose_slat_action ; if (action == ##Take && (~~Folly_slats_pulled_back)) { print "Only the bottom of the slat is loose. The rest is tightly woven into the frame of the folly", (string) Dot_newline_str; rtrue; } if (action == ##Remove or ##Free) { return FreeSub(); } if (action == ##Push or ##Fiddle or ##Move) { if (Folly_slats_pulled_back) { (string) You_already_have_str, " done that."; } Folly_slats_pulled_back = 1; give hole ~concealed; give loose_slat attrib9; print "You twist aside the ", (name) loose_slat, ", wedging the end into the woven wall. The remaining hole, just above the bench, looks big enough to snake ", (name) yourself, " through", (string) Dot_newline_str; rtrue; } if (action ~= ##Examine) rfalse; print "The bamboo slat at the back of the folly "; if (loose_slat has attrib9) { print "has been pulled aside, making a hole in the wall", (string) Dot_newline_str; rtrue; } print "appears to be loose", (string) Dot_newline_str; rtrue; ]; [ Hole_action ; if (action == ##CrawlThru) { return Do_Walk(e_to); } if (action == ##Insert or ##PutThrough or ##Throw) { if (noun == your_hand) { print (string) Pardon_str; rtrue; } if (noun == your_reticule) rfalse; PrintPronoun(); ! not popped print " fall"; if (noun hasnt plural) { print 's'; } print " through the hole"; move noun to In_the_Hedge; print (string) Dot_newline_str; rtrue; } if (action ~= ##LookIn) rfalse; print (string) You_can_see_str, " a few leaves near to you, more fading into green obscurity", (string) Dot_newline_str; rtrue; ]; [ Folly_into_hole ; if (Folly_slats_pulled_back) { if (beautiful_ball_gown hasnt worn) { return In_the_Hedge; } print "You might rip"; Cast_with_the_and_print_dots(beautiful_ball_gown); ! not popped rfalse; } print (string) Cant_go_str; return nothing; ]; [ By_the_House_action rarg ; if (rarg ~= M_LOOK) rfalse; print "You crouch in"; Cast_with_the(hedge); ! not popped print " by the house, twigs poking into you, the cliff crumbling away to the east. "; Cast_with_capital_The(hedge); ! not popped print " seems less dense to the south. A"; PrintOpenOrClosed(window2,true); ! not popped print " window is directly west of you."; rtrue; ]; [ Veranda_Room_action rarg ; if (rarg == M_LOOK) { print "Steps lead south from this white marble veranda to a clipped lawn. To the north"; if (FindDaemon_or_Timer(Finale)) { print " the wreckage left by the duel is visible in the ballroom."; rtrue; } if (french_door hasnt open) { print ", beyond a closed glass door,"; } if (Jamisons_men_have_attacked) { print " is"; } else { print " a line of people blocks your view of"; } print " the ballroom."; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4) || (~~Cookie_hasnt_found_you_yet)) rfalse; return CookieFindsYou_timer(true); ]; [ Around_drive_dir ; print "The gravel path is just wide enough for a cart to pass. It bends around the west wing of the house, leading you to", (string) Dotdotdot_str; if (location ~= Main_Entrance) { return Main_Entrance; } return Trade_Entrance; ]; [ Forest_action rarg ; if (rarg ~= (M_ENTER|invalidEnum4) || Forest hasnt general_3) rfalse; Unqueue(Lucy_and_Father_leave_forest_timer); ! not popped give Forest ~general_3; print (string) Spacing_str, "Two whispered voices come from the path ahead, one reassuring, the other desperate -- they sound like"; Cast_with_the(your_father); ! not popped " and Lucy. Peering over a bush, you see the couple share a fond embrace before they meander off into the jungle."; ]; [ Clearing_action rarg ; if (rarg ~= M_HANDLED || (noun ~= window1 && second ~= window1)) rfalse; if (action == ##LookIn or ##Examine) { (string) You_can_see_str, " only an embossed ceiling."; } if (action == ##CrawlThru) { Do_Walk(u_to); ! not popped rtrue; } return YouCantReachThe(window1); ]; [ Vine_action ; if (location == Beach && action ~= ##Examine) { return YouCantReachThe(vine); } if (action == ##Take) { print "You tug, but are unable to get any substantial length of vine", (string) Dot_newline_str; rtrue; } if (action == ##Climb && location == Clearing) { Do_Walk(u_to); ! not popped rtrue; } if (action ~= ##ClimbDown or ##Climb || location ~= Bedroom) rfalse; Do_Walk(d_to); ! not popped rtrue; ]; [ Kitchen_action rarg ; if (rarg ~= (M_ENTER|invalidEnum4) || Lucy notin Kitchen) rfalse; if (Disguised_as_boy) { if (Lucy has visited) rfalse; give Lucy visited; QueueInterrupt(Lucy_gives_garter,2); ! not popped (string) Spacing_str, "The woman smiles uncertainly, then rushes over. ~Are you come from the village, boy? Dost know Lord Dimsford?~ She sighs at your surprise. ~So he sent you -- I am his Lucy. It's been so long since I've seen him. Lafond caught me eavesdropping and now I can't leave the grounds.~"; } if (beautiful_ball_gown has worn) { print (string) Spacing_str, "~Milady,~ exclaims the woman. ~Lafond's guests are wisest not to stray. Maybe you should stay at the ball.~ You find ", (name) yourself, " ushered into a hallway", (string) Dot_newline_str; new_line; return Goto(Hall); } print (string) Spacing_str, "The woman shrieks, pushing you out the door. ~Has not the governor made clear his position on light-skirts? Out, slattern, before I report you!~ Her voice drops to a whisper, ~Sorry, but it's not safe around here. Stay in the village.~ You find yourself outside", (string) Dot_newline_str; new_line; return Goto(Trade_Entrance); ]; [ Out_of_Kitchen ; if (Meta_Loc(garter) == location && (~~Ultimately_InP(garter)) && (Lucy in location && your_father notin location)) { remove garter; Unqueue(Lucy_gives_garter); ! not popped print "Lucy spits at you, ~Yes, desert a helpless woman. Tell Lafond I'm a spy. Dimsford will avenge me, runt!~ She comes after you with a rolling pin, pushing you out the door", (string) Dot_newline_str; new_line; return Trade_Entrance; } if (Lucy in location && your_father notin location && garter has visited) { print "~Don't forget -- tell Dimsford,~"; Cast_with_the(Lucy); ! not popped print " calls after you.^^"; } if (P_walk_dir ~= s_to) { return Trade_Entrance; } return Hall; ]; [ Into_Ballroom ; if (location == Veranda_Room && french_door hasnt open) { Cast_with_capital_The(door); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; rfalse; } if (Jamisons_men_have_attacked) { if (FindDaemon(TheDuelDaemon)) { print (string) You_cant_str, "force ", (name) yourself, " between the amazed spectators of the duel", (string) Dot_newline_str; return nothing; } return Ballroom; } if (beautiful_ball_gown hasnt worn) { print "Though you glimpse whirling bodies beyond, the spectators fail to admit such a "; if (Disguised_as_boy) { print "grubby youth"; } else { print "poorly dressed female"; } print ".^"; return nothing; } print "The sea of spectators parts to admit you, murmuring approval", (string) Dot_newline_str; new_line; return Ballroom; ]; [ Foyer_action rarg ; if (rarg == (M_ENTER|invalidEnum4)) { if (butler hasnt general_1 && butler in location) { if (beautiful_ball_gown has worn) { if (Foyer has general_3) { give Foyer ~general_3; remove butler; print (string) Spacing_str, "~Miss, the master has been expecting you, up in his room. I did look for you.~ "; Cast_with_capital_The(butler); ! not popped " bows and leaves."; } if (butler hasnt general_2) rfalse; print (string) Spacing_str, '"', (string) Sorry_no_loiter_str, (string) Push_you_str; new_line; return Goto(Main_Entrance); } if (Disguised_as_boy) { return VillagersNotAdmitted(); } print (string) Spacing_str, "~You may not ply your wares here, Paphian. Leave before I have you thrown off the cliff!~ You contemplate this pleasant prospect as you are tossed onto the gravel drive."; new_line; new_line; return Goto(Main_Entrance); } if (~~Cookie_hasnt_found_you_yet) rtrue; return CookieFindsYou_timer(true); } if (rarg ~= M_ENTER || butler has general_1 || butler has attrib12) rfalse; return QueueInterrupt(ButlerDaemon,3); ]; [ Foyer_move_dir ; if (butler has attrib12) { if (P_walk_dir == s_to) { return Into_Ballroom(); } if (P_walk_dir == w_to) { return Hall; } if (P_walk_dir == u_to) { return Stair_Landing; } if (P_walk_dir ~= e_to or u_to) rfalse; if (butler notin location) { return East_Hallway; } print "~No, ma'am, that way's private.~ The butler stops you", (string) Dot_newline_str; rfalse; } if (FindDaemon(ButlerDaemon)) { QueueInterrupt(ButlerDaemon,2); ! not popped print "~Excuse me!~ The ", (name) butler, " pushes you back. ~Your invitation, please!~"; new_line; rfalse; } QueueInterrupt(ButlerDaemon,2); ! not popped Butler_waiting_for_invitation = true; print "The butler prevents you. ~Miss... your invitation?~"; new_line; rfalse; ]; [ Ballroom_action rarg ; if (rarg == M_LOOK) { if (Jamisons_men_have_attacked) { if (FindDaemon_or_Timer(Finale)) { Cast_with_capital_The(dancer); ! not popped print "s stare amazed at Lafond's limp body, some disbelieving, some hopeful, all stock still. The pirates have fled to the darkness of the lawn"; } else { print "All is chaos, screaming women fainting on terrified men. Several of Jamison's scruffiest men round the dancers into a huddle in the center of", " the dance floor"; } } else { print "Lafond's party is well attended: you can hardly move for the crush. However, the room is oddly silent, no talk interrupting the musical efforts of"; Cast_with_the(musicians); ! not popped print " to the west. Despite the heat, no one ventures south to the veranda, nor through the opening east. The foyer is north of you"; } print '.'; rtrue; } if (rarg == M_ENTER) { if (location hasnt visited) { Various_duel_or_ship_or_dance_counters = 1; return QueueInterrupt(JamisonDancesWithYouDaemon,65535); } if (Dancer_requesting_dance || Current_dancing_partner ~= Captain_Jamison || Jamisons_men_have_attacked) rfalse; Lafond_seduction_cnt = 1; QueueInterrupt(LafondDanceDaemon,1); ! not popped rfalse; } if (rarg == M_HANDLED) { if (pirate == noun or second && (~~CheckIfWordUsedToIdentifyObj('man',pirate)) && (action ~= ##AskAbout && noun ~= Lafond or Captain_Jamison && Ballroom hasnt general_3)) { print (string) No_see_str, "of Jamison's crew here", (string) Dot_newline_str; return Clear_itbl(); } if (action == ##AskPerson && noun in location && second == Ballroom) { Perform(##Dance,noun); ! not popped rtrue; } if (action == ##Insert && second == Ballroom) { Perform(##Drop,noun); ! not popped rtrue; } if (Dancer_requesting_dance ~= Captain_Jamison or Lafond || (~~PhysicallyTouchVerbP(french_door))) rfalse; (name) Dancer_requesting_dance, " sweeps you past."; } if (rarg ~= (M_ENTER|invalidEnum4) || (~~Cookie_hasnt_found_you_yet)) rfalse; return CookieFindsYou_timer(true); ]; [ Out_of_Ballroom ; if (Dancer_requesting_dance == Captain_Jamison) { print "~Would you rather not dance? "; if (P_walk_dir == s_to) { print "Apparently the guests have orders not to go outside.~ Instead"; Cast_with_the(Captain_Jamison); ! not popped print " whirls and twirls you towards"; Cast_with_the_and_print_dots(musicians); ! not popped new_line; return Orchestra; } if (P_walk_dir == e_to) { print "Hungry?~ He guides you into the supper room, then tsks in dismay. ~They've cleared the food away already!~"; new_line; new_line; return Supper_Room; } if (P_walk_dir == w_to) { print "Let's listen to the music while we talk.~ He walks you towards"; Cast_with_the_and_print_dots(musicians); ! not popped new_line; return Orchestra; } print "It wouldn't be wise to put ourselves into the butler's sight, though.~ He escorts you into the supper-room instead", (string) Dot_newline_str; new_line; return Supper_Room; } if (FindDaemon_or_Timer(LafondOrdersPapasDeathTimer)) { print (name) Lafond, " stops you. ~Stay until we hear the sad news.~"; new_line; rfalse; } if (Lafond == Dancer_requesting_dance) { print "~How dare you walk away!~ Lafond grips your arm, so you may not leave the floor", (string) Dot_newline_str; rfalse; } if (FindDaemon(LafondDanceDaemon) && parent(Lafond) == location) { Person_to_refuse = Lafond; print "~Your answer, cherie?~ His twists your wrist mercilessly", (string) Dot_newline_str; rfalse; } if (P_walk_dir == n_to) { return Foyer; } if (P_walk_dir == s_to) { if (french_door has open) { return Veranda_Room; } Cast_with_capital_The(door); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; rfalse; } if (P_walk_dir == w_to) { return Orchestra; } if (P_walk_dir ~= e_to) rfalse; return Supper_Room; ]; [ Musicians_action ; if (action == ##Listen or ##Examine) { if (Jamisons_men_have_attacked) { print "The musicians are with"; Cast_with_the(dancer); ! not popped "s in the ballroom."; } "The small band is made up of a virginal, bass and treble viols, and several recorders. They are playing ~I Want to Kiss Your Hand,~ by J.S. Beatle."; } NoNeedForThat(); ! not popped return Clear_itbl(); ]; [ Orchestra_action rarg ; if (rarg == M_LOOK) { if (Jamisons_men_have_attacked && (~~FindDaemon_or_Timer(Finale))) { print "This end of the ballroom is empty of people."; rtrue; } print "A few older women and young girls sit near the small orchestra assembled at this end of the ballroom."; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4) || (~~Cookie_hasnt_found_you_yet)) rfalse; return CookieFindsYou_timer(true); ]; [ Supper_Room_action rarg ; if (rarg == M_ENTER) { move long_table to location; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4) || (~~Cookie_hasnt_found_you_yet)) rfalse; return CookieFindsYou_timer(true); ]; [ Scuttle_under_tables ; print "You scuttle underneath"; Cast_with_the_and_print_dots(long_table); ! not popped new_line; if (location ~= East_Hallway) { return East_Hallway; } return Supper_Room; ]; [ East_Hallway_action rarg ; if (rarg == (M_ENTER|invalidEnum4) && butler hasnt general_1 && butler in Foyer) { if (beautiful_ball_gown hasnt worn) { return VillagersNotAdmitted(); } if (butler has attrib12) rfalse; print (string) Spacing_str, "A ", (name) butler, " takes your arm, pulling you into the foyer. ~I have not seen your ", (name) invitation, ", Miss.~"; new_line; new_line; return Goto(Foyer); } if (rarg ~= M_ENTER) rfalse; move long_table to East_Hallway; rtrue; ]; [ Library_action rarg ; if (rarg == M_LOOK) { print "Everything in this private office is larger than life. A huge ", (name) portrait; if (portrait has open) { print ", slightly awry from the wall,"; } print " decorates the north side, and black drapes mask the east wall. Bookshelves tower over a cherry desk, and a massive wooden globe squats in a corner."; if (~~Jamisons_men_have_attacked) { print " Music wafts distantly from the ballroom across the hall to the south."; } if (knob has general_1) rtrue; new_line; print (string) Spacing_str, "A knob juts out of the wall."; rtrue; } if (rarg == M_ENTER && Cookie in location && Cookie hasnt general_3) { give Cookie general_3; print "To your surprise, ", (name) Cookie, " is here, studying the walls. ~Cap'n said somethin' about a secret door, mebbe.~"; new_line; new_line; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4)) rfalse; if (your_father in location) { if (Current_dancing_partner == Lafond && (~~Jamison_imprisoned)) { QueueInterrupt(DragoonsSeizeJamison,2); ! not popped } QueueInterrupt(Lucy_and_Father_leave_forest_timer,25); ! not popped give Forest general_3; give window2 open; Folly_slats_pulled_back = 1; give hole ~concealed; give loose_slat attrib9; remove your_father; remove Lucy; print (string) Spacing_str, "~A ", (name) window1, "!~ your father exclaims. ~I shall creep out to the kitchen. Get the Falcon.~ He climbs out"; return Cast_with_the_and_print_dots(window1); } if (Cookie notin location || (~~FindDaemon(TheDuelDaemon))) rfalse; move Cookie to Gallery; remove pirate; print (string) Spacing_str, (name) Cookie, " cocks his head. ~What is that noise? Is Cap'n duelling Lafond? There's no chance he could win as beaten as he is!~ Cookie races out towards the ballroom", (string) Dot_newline_str; rtrue; ]; [ Library_different_dir ; if (portrait hasnt general_2) { print (string) Cant_go_str; rfalse; } if (portrait hasnt open) { Cast_with_capital_The(portrait); ! not popped print (string) Is_closed_str, (string) Dot_newline_str; rfalse; } if (Ultimately_InP(hat)) { ReturnHatToKnob(); ! not popped print (string) Spacing_str; } print "You move beyond"; Cast_with_the(portrait); ! not popped print " into the "; if (location == Stairwell) { print "library", (string) Dot_newline_str; new_line; return Library; } if (location ~= Library) rfalse; print "flickering torchlight", (string) Dot_newline_str; new_line; return Stairwell; ]; [ Drapes_action ; if (action == ##LookBehind) { if (location == Lafonds_Bedroom) { print (string) There_is_nothing_str, "interesting behind"; return Cast_with_the_and_print_dots(drapes); } print "In the dark behind"; Cast_with_the(drapes); ! not popped print " is"; return Cast_with_article_and_print_dots(window1); } if (action == ##Move or ##Push or ##Open) { print (string) You_pull_cloth_str; new_line; rtrue; } if (action == ##Close) { if (location == Library) { print "They already are.^"; rtrue; } print (string) Beautiful_night_str; rtrue; } if (action ~= ##Examine) rfalse; if (location == Library) { print "Dark drapes cover an entire wall of the room", (string) Dot_newline_str; rtrue; } print "The purple hangings are densely embroidered with gold", (string) Dot_newline_str; rtrue; ]; [ Torch_action ; if (action == ##Examine) { Cast_with_capital_The(torch); ! not popped " is flickering madly in the breeze."; } if (action == ##PlaceOn or ##Insert && second has attrib27) { "Mama disapproved of pyromaniacs."; } if (~~PhysicallyTouchVerbP(torch)) rfalse; print (string) You_cant_str, "reach"; Cast_with_the(torch); ! not popped ". Ladies don't carry them anyway."; ]; [ Portrait_action ; if (action == ##Examine) { if (location == Library) { if (portrait has open) { print "Cool air seeps out from"; return Cast_with_the_and_print_dots(portrait); } Cast_with_capital_The(portrait); ! not popped print " seems familiar, and you realize it is exactly the picture on the front of"; Cast_with_the(banknote); ! not popped Cast_with_the(Lafond); ! not popped " sent you, same clothes, same surroundings, same pose."; } print (string) You_can_see_str, (string) Only_the_back_str; return Cast_with_the_and_print_dots(portrait); } if (action == ##LookBehind) { if (portrait has open) { Perform(##Examine,portrait); ! not popped rtrue; } Cast_with_capital_The(portrait); ! not popped print " is firmly fastened to the wall", (string) Dot_newline_str; rtrue; } if (action == ##Go or ##WalkBehind or ##CrawlThru) { if (portrait hasnt general_2) { print "This is a ", (name) portrait, ", not a looking glass", (string) Dot_newline_str; rtrue; } return Do_Walk(in_to); } if (action == ##Open) { if (portrait has open) { print (string) Already_is_str; rtrue; } if (portrait has general_2) { give portrait open; if (location == Library) { print "Quickly you pull the book, joggle"; Cast_with_the(knob); ! not popped print " and touch"; Cast_with_the(globe); ! not popped print ", and"; Cast_with_the(portrait); ! not popped print " pops open."; if (Cookie in location) { print (string) Cookie_hrmph_str; } new_line; rtrue; } print "You push outwards on the wall, opening"; return Cast_with_the_and_print_dots(portrait); } "Open a ", (name) portrait, "?!"; } if (action ~= ##Close) rfalse; if (portrait hasnt general_2) { print (string) Pardon_str; rtrue; } if (portrait hasnt open) rfalse; give portrait ~open; give book ~general_3; give knob ~general_3; Cast_with_capital_The(portrait); ! not popped " swings shut with a tiny snap."; ]; [ Globe_action ; if (action == ##Push or ##Touch || (action == ##PlaceOn && noun == your_hand)) { print "You press the "; if (CheckIfWordUsedToIdentifyObj('sinister',globe) || CheckIfWordUsedToIdentifyObj('island',globe) || CheckCorrectAdjectives('st')) { print "painted island, and it sinks into the wooden sea."; if (knob has general_3 && book has general_3 && portrait hasnt open) { give portrait open; if (portrait hasnt general_2) { give portrait general_2; ++score; } print " You hear a whirr and a click and"; Cast_with_the(portrait); ! not popped print " pops open. A draft of sea-scented air flows in from behind it."; if (Cookie in location) { print (string) Cookie_hrmph_str; } } new_line; rtrue; } "globe at random."; } if (action == ##Turn or ##Take) { Cast_with_capital_The(globe); ! not popped " is solidly fastened to the floor."; } if (action == ##Find && second == globe && (CheckIfWordUsedToIdentifyObj('sinister',globe) || CheckIfWordUsedToIdentifyObj('island',globe) || CheckCorrectAdjectives('st'))) { "It is in the West Indies, surrounded by blue."; } if (action ~= ##Examine) rfalse; if (CheckIfWordUsedToIdentifyObj('sinister',globe) || CheckIfWordUsedToIdentifyObj('island',globe) || CheckCorrectAdjectives('st')) { print "A tiny replica of ", (name) St_Sinistra, " is painted on"; Cast_with_the(globe); ! not popped print " in greater detail than any other country, showing even the road from Santa Ananas to Lafond's mansion", (string) Dot_newline_str; rtrue; } print "The massive wooden globe, painted in greens and blues and white, describes the world as presently known", (string) Dot_newline_str; rtrue; ]; [ Books_action ; if (action == ##Take or ##Browse or ##LookIn or ##Open) { print "You pick one at random. You always preferred horses to reading, so you put it back", (string) Dot_newline_str; rtrue; } if (action == ##Search or ##Examine) { print "Most of the books appear unread, their pages uncut, the spines not yet creased. All except one, ~Treatise of Power~ by Sir Michael Villiers", (string) Dot_newline_str; rtrue; } if (action ~= ##Push or ##Move) rfalse; print (string) Pardon_str; rtrue; ]; [ Bookcase_action ; if (action == ##Search or ##LookIn or ##Examine) { Perform(##Examine,books); ! not popped rtrue; } if (action == ##Turn or ##Push or ##Move) { Question_cnt = Q_SEARCHING_FOR_SECRET_DOOR; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Why tamper with a ", (name) bookcase, "? Searching for a secret door or some such?"; } if (action ~= ##Close or ##Open) rfalse; return WrapSub(); ]; [ Book_action ; if (action == ##Open or ##Take or ##Browse or ##Fiddle or ##Move) { print "You half tip"; Cast_with_the(book); ! not popped print " out of the shelf when it snaps surprisingly back into place"; if (book hasnt general_2) { give book general_2; ++score; } if (book hasnt general_3) { give book general_3; print ". There is a mysterious scraping sound from inside the wall"; } print (string) Dot_newline_str; rtrue; } if (action ~= ##Examine) rfalse; "You gaze at ~Treatise of Power~ without taking it. It seems to be the only book that has been read in the library, the leather creased and dull with use."; ]; [ Referred_to_books UNUSED1 UNUSED2 ; if (location ~= Library) rfalse; return books; ]; [ Knob_action ; if (action == ##Turn or ##Move or ##Push or ##Fiddle or ##Lower) { if (knob has general_3) { return Pre_Hack_Hack("Fiddling with"); } give knob general_3; return DoSomethingToKnob("As you fiddle with the"); } if (action == ##Insert or ##PlaceOn && noun == hat) { if (knob has general_1) { print (string) Already_is_str; rtrue; } if (~~Ultimately_InP(hat)) { print (string) Not_holding_str; return Cast_with_the_and_print_dots(hat); } give hat general_3; give knob general_1; move hat to Library; print "You prop"; Cast_with_the(hat); ! not popped print " back on"; return Cast_with_the_and_print_dots(knob); } if (action ~= ##Examine || knob hasnt general_1) rfalse; Cast_with_capital_The(hat); ! not popped print " is on"; return Cast_with_the_and_print_dots(knob); ]; [ Stair_Landing_action rarg ; if (rarg ~= M_LOOK) rfalse; print "The east-west hallway opens here to curve into a grand staircase sweeping down to the foyer."; rtrue; ]; [ Divan_action ; if (action == ##Examine) { print "Backless, upholstered in Oriental silk,"; Cast_with_the(divan); ! not popped print " looks exotic and comfortable", (string) Dot_newline_str; rtrue; } if (action == ##CrawlThru or ##ClimbOn or ##Board) { "You haven't time to relax now."; } return NoNeedForThat(); ]; [ Duelling_pistols_action ; if (~~PhysicallyTouchVerbP(duelling_pistols)) rfalse; (string) You_cant_str, "reach them. Ladies don't carry ", (name) pistol, "s, anyway."; ]; [ Lafonds_Bedroom_action rarg itm ; if (rarg == M_HANDLED && Lafond_in_bedroom) { if (Lafond_seduction_cnt > 9 && noun ~= spices or pinch_of_spices && action == ##Wear or ##Take) { if (action ~= ##Wear or ##Take) rtrue; print (name) Lafond, " stops you", (string) Dot_newline_str; rtrue; } if (second == laudanum or leather_bottle || noun == laudanum or leather_bottle) { itm = leather_bottle; } else { if (action ~= ##Point or ##Wave or ##Insert) rfalse; if (bit_of_mirror == noun or second) { itm = bit_of_mirror; } else { if (silver_tray ~= noun or second) rfalse; itm = silver_tray; } } remove itm; print "Lafond bounds to your side, grabbing"; Cast_with_the(itm); ! not popped print " out of ", (name) your_hand, " before you can use it. ~What have we here? Trying to "; if (itm == leather_bottle) { print "poison ", (name) yourself, "? Or me?"; } else if (itm == bit_of_mirror or silver_tray) { print "signal for help? You are beyond help."; } print "~ He throws it out"; return Cast_with_the_and_print_dots(shutters); } if (rarg == M_ENTER && Lafonds_Bedroom hasnt visited) { give Lafonds_Bedroom visited; ++score; Lafond_seduction_cnt = 1; QueueInterrupt(LafondSeductionDaemon,1); ! not popped print "~Welcome, ma petite"; if (beautiful_ball_gown hasnt worn) { print " -- but where is your ", (name) beautiful_ball_gown, "? Ah, chacun a son gout"; } print ".~ Lafond bows you in", (string) Dot_newline_str; new_line; rtrue; } if (rarg ~= M_LOOK) rfalse; print (name) Lafond, "'s bedroom shows all the outpourings of his megalomania. Royal hues of purple and gold weigh down the hangings on the bed and the eastward window, as if trying to smother the moonbeam shining in."; rtrue; ]; [ Lafonds_Bedroom_s_dir ; if (Lafond_in_bedroom) { print "Lafond whirls you around. ~My pretty, you came here freely, but you may not leave freely.~"; new_line; rfalse; } if (butler in location && butler hasnt general_1) { Cast_with_capital_The(butler); ! not popped print " stops you easily", (string) Dot_newline_str; rfalse; } print "You "; if (ornate_door hasnt open) { give ornate_door open; print "open the door and "; } if (butler has general_1 && parent(Lafond) ~= location) { print "creep over the prostrate butler", (string) Dot_newline_str; new_line; return Upstairs_Hall2; } print "run out -- into"; Cast_with_the(butler); ! not popped print "'s barrel chest and leering grin. You return to the bedroom"; if (Lafond in location) { print '.'; Cast_with_the(Lafond); ! not popped print " acts as if nothing has happened", (string) Dot_newline_str; rfalse; } move butler to Lafonds_Bedroom; print ','; Cast_with_the(butler); ! not popped print " following. ~The governor said you were not to leave this room.~"; new_line; rfalse; ]; [ Shutters_action ; if (action == ##ClimbOut or ##Exit or ##CrawlThru or ##Board or ##DiveOut) { "One look at the sheer drop, from sill to hedge to jagged rocks far below, is enough to dissuade you."; } if (action == ##LookIn) { print "The full moon is high in the night sky. Some distance out from the shallow curve of the island, "; if (Helena_Louise has general_2) { print "black reefs catch the full force of the sea"; } else { print "you see the slow swelling of sails, grey turning black turning grey, on"; Cast_with_the(Helena_Louise); ! not popped } "."; } if (action == ##Examine) { print "Old fashioned wooden ", (name) shutters, ", not glass, fill"; Cast_with_the(window1); ! not popped print " frame. A dusty ", (name) moonbeam, " swirls in, setting alight threads of gold embroidered in"; return Cast_with_the_and_print_dots(drapes); } if (action == ##Shine && noun == Helena_Louise) { return HowDoYouDoThat(); } if (action == ##Close) { print (string) Beautiful_night_str; rtrue; } if (action ~= ##PutThrough) rfalse; if (noun == your_hand) { print (string) Pardon_str; rtrue; } if (noun == green_goblet or blue_goblet or flagon && Lafond in location) { (name) Lafond, " stops you."; } return ThrowThingOutWindow(); ]; [ Referred_to_spices ; if (Ultimately_InP(pinch_of_spices)) { return pinch_of_spices; } return spices; ]; [ Spices_action ; if (action == ##Take) { if (pinch_of_spices in player) { print (string) You_already_have_str; return Cast_with_article_and_print_dots(pinch_of_spices); } move pinch_of_spices to player; give pinch_of_spices visited; Spices_taken = true; QueueInterrupt(Drop_spices_timer,3); ! not popped print "You take"; Article(pinch_of_spices); ! not popped print " between your thumb and forefinger", (string) Dot_newline_str; rtrue; } if (action == ##Examine) { if (pinch_of_spices in player) { print "You are holding"; Article(pinch_of_spices); ! not popped print ". "; if (Ultimately_InP(silver_tray,location) && parent(spices) == well) { print "More is in"; Cast_with_the(well); ! not popped print " of"; Cast_with_the_and_print_dots(silver_tray); ! not popped } new_line; rtrue; } Perform(##Examine,well); ! not popped rtrue; } if (action == ##Eat) { move pinch_of_spices to spices; print "Your eyes start to water", (string) Dot_newline_str; rtrue; } if (action == ##Smell) { move pinch_of_spices to spices; print "You take a sharp sniff of"; Cast_with_the(spices); ! not popped print " and sneeze, until ", (name) your_eyes, " fill with tears", (string) Dot_newline_str; rtrue; } if (action == ##Throw && second && second ~= spices) { Perform(##ThrowAt,noun,second); ! not popped rtrue; } if (action ~= ##ThrowAt or ##PlaceOn or ##Blow) rfalse; if (pinch_of_spices in player) { if (second == butler && butler hasnt general_1) { print "You try to get close enough to"; Cast_with_the(butler); ! not popped ", but he backs off. ~That wouldn't be seemly, Miss.~"; } if (second == yourself) { FreeSub(); ! not popped rtrue; } if (second == your_father or Cookie or Lucy) { print "That is thoroughly unladylike behavior.^"; rtrue; } if (second == Crulley && parent(Crulley) == Dungeon) { (name) Crulley, " snaps the whip at your elbow. ~Keep away from me!~"; } print "You blow"; Cast_with_the(spices); ! not popped print " off your fingertips"; move pinch_of_spices to spices; if ((~~second) || second has general_1) { print (string) Dot_newline_str; rtrue; } if (second == Lafond && location == Lafonds_Bedroom) { ++score; move pinch_of_spices to spices; remove Lafond; Lafond_in_bedroom = false; Unqueue(LafondSeductionDaemon); ! not popped Unqueue(DrinkWineDaemon); ! not popped QueueInterrupt(Lafond_returns_and_very_angry,15); ! not popped give ornate_door open; remove Lafonds_goblet; print ", directly into Lafond's face. He sneezes, his eyes watering from the heat of the peppers. Reaching blindly for some wine, he instead upsets the table, shattering a glass. Lafond stumbles cursing out of the room, in search of relief"; if (Lafond_seduction_cnt > 10) { move player to location; move your_reticule to player; move linen_chemise to player; give linen_chemise ~general_3; give linen_chemise worn; move your_kid_slippers to player; give your_kid_slippers worn; print ". You stand up, quickly pulling on"; Cast_with_the(linen_chemise); ! not popped } print (string) Dot_newline_str; rtrue; } print " at"; Cast_second_with_the(); ! not popped print ". ", (string) Nothing_happens_str; rtrue; } print (string) Not_holding_str, " any ", (name) spices, (string) Dot_newline_str; rtrue; ]; [ Lafond_returns_and_very_angry ; if (location ~= Upstairs_Hall2 or Lafonds_Bedroom && Helena_Louise hasnt general_2 || Cookie in location) rfalse; return JigsUp(" Roaring anger and revenge, Lafond runs in, pouncing upon you. Your death, when it comes, is wished for."); ]; [ Drop_spices_timer ; if (pinch_of_spices notin player) rfalse; move pinch_of_spices to spices; print (string) Spacing_str, "The spices dribble out from between your fingers", (string) Dot_newline_str; rtrue; ]; [ Silver_tray_action ; if (action == ##Examine) { print "Cabbage leaves are etched onto the mirror-bright ", (name) silver_tray, ", forming a well in the center where the metallic stalks meet."; if (parent(cold_chicken) == silver_tray) { print " Some ", (name) cold_chicken, " is heaped around the dry spices filling"; return Cast_with_the_and_print_dots(well); } new_line; rtrue; } if (action == ##Point or ##Insert && second == moonbeam or shutters or Helena_Louise) { return Signal_in_moonlight(silver_tray); } if (action == ##EmptyIn) { print "You have no other way of carrying"; return Cast_with_the_and_print_dots(cold_chicken); } if (action ~= ##PlaceOn or ##Insert || second ~= silver_tray) rfalse; print "Because of the metal work, nothing sits flat on"; return Cast_with_the_and_print_dots(silver_tray); ]; [ Well_action ; if (action == ##LookIn or ##Examine) { if (spices in well) { Cast_with_capital_The(well); ! not popped print " in"; Cast_with_the(silver_tray); ! not popped print " is filled with a mixture of salt and other spices, predominantly red and black pepper", (string) Dot_newline_str; rtrue; } "It is empty."; } if (action ~= ##Take) rfalse; Cast_with_capital_The(well); ! not popped " is part of the tray!"; ]; [ Cold_chicken_action ; if (action == ##Take or ##Eat) { print "You sprinkle some ", (name) spices, " on a wing and nibble at it. The peppery heat hits you like a wave, leaving you gasping, eyes watering", (string) Dot_newline_str; rtrue; } if (action == ##Examine) { if (cold_chicken in silver_tray) { Perform(##Examine,silver_tray); ! not popped rtrue; } Cast_with_capital_The(cold_chicken); ! not popped print " looks tasty", (string) Dot_newline_str; rtrue; } if (action == ##PlaceOn && noun == pinch_of_spices or spices) { Perform(##Eat,cold_chicken); ! not popped rtrue; } if (action ~= ##Insert || noun ~= cold_chicken) rfalse; Perform(##Eat,cold_chicken); ! not popped rtrue; ]; [ Flagon_action ; if (action == ##Examine or ##LookIn or ##Shake) { "Some wine sloshes around inside."; } if (action == ##Take && flagon has trytakebit) { print "Lafond takes it from you, setting it on"; return Cast_with_the_and_print_dots(table); } if (action == ##Drop && location == Lafonds_Bedroom) { move flagon to table; print "You set"; Cast_with_the(flagon); ! not popped print " on"; return Cast_with_the_and_print_dots(table); } if (action == ##Throw or ##EmptyIn && location == Lafonds_Bedroom && Lafond in location) { return JigsUpWorseThanDeath(Lafond_smacks_you_str); } if (action ~= ##DrinkFrom) rfalse; print "That is thoroughly unladylike behavior.^"; rtrue; ]; [ Quantity_of_wine_action ; if (action == ##Give or ##Drink or ##Eat or ##Show) { if (Ultimately_InP(blue_goblet)) { return DrinkWine(blue_goblet); } if (Ultimately_InP(green_goblet)) { return DrinkWine(green_goblet); } (string) Not_holding_str, " a goblet of wine!"; } if (noun == quantity_of_wine && action == ##Pour) { if (~~second) { if (P_initial_word == 'spill' && location == Lafonds_Bedroom && Lafond in location) { return JigsUpWorseThanDeath(Lafond_smacks_you_str); } return Be_specific_do_what("pour",noun); } if (second == flagon) { print "It's not sanitary to pour wine back into"; return Cast_with_the_and_print_dots(flagon); } if (second == green_goblet or blue_goblet) { if (second.number == 1 or 3) { "It is already full!"; } return FillGobletWithWine(second); } print (string) Not_done_in_polite_str; rtrue; } if (action == ##Dry or ##PourFrom && noun == quantity_of_wine) { return Be_specific_do_what("pour",noun); } if (action ~= ##Throw or ##Drop) rfalse; if (location == Lafonds_Bedroom && Lafond in location) { return AnnoyLafondWithWine(); } if (Ultimately_InP(blue_goblet) && blue_goblet.number > 0) { Perform(##Drop,blue_goblet); ! not popped rtrue; } if (Ultimately_InP(green_goblet) && green_goblet.number > 0) { Perform(##Drop,green_goblet); ! not popped rtrue; } (string) Not_holding_str, " any wine!"; ]; [ DrinkWine cup ; if (cup.number == 0 or 2) { print "There is no wine in"; Cast_with_the_and_print_dots(cup); ! not popped rtrue; } if (action == ##Show or ##Give) { Perform(##Give,cup,second); ! not popped rtrue; } if (cup.number == 3 && (~~FindDaemon_or_Timer(I_am_drugged_daemon))) { QueueInterrupt(I_am_drugged_daemon,2); ! not popped } Assorted_situations_FIGURE_OUT_LATER = 1; cup.number = 0; print "You empty"; Cast_with_the(cup); ! not popped print " of wine", (string) Dot_newline_str; rtrue; ]; [ FillGobletWithWine goblet by_lafond ; if (flagon.number == 2) { goblet.number = 3; } else { goblet.number = goblet.number + 1; } if (by_lafond) rtrue; print "You fill"; Cast_with_the(goblet); ! not popped print " with wine", (string) Dot_newline_str; rtrue; ]; [ DruggedWineEffectsDaemon ; if (~~Person_who_drank_drugged_wine) rfalse; if (Person_who_drank_drugged_wine == butler && Sleepy_counter == 2) { ++score; give butler general_1; if (butler notin location) { print (string) Spacing_str, "You hear a ~thump-phoosh,~ like someone slumping against a wall", (string) Dot_newline_str; } else if (location == Lafonds_Bedroom) { if (Ultimately_InP(leather_bottle,location)) { remove leather_bottle; print (string) Spacing_str, "With a grunt of anger, the butler realizes he has been drugged. He grabs"; Cast_with_the(leather_bottle); ! not popped print " and throws it out"; Cast_with_the_and_print_dots(shutters); ! not popped } print (string) Spacing_str; Cast_with_capital_The(Person_who_drank_drugged_wine); ! not popped print (string) Getting_sleepy-->Sleepy_counter, (string) Dot_newline_str; } Person_who_drank_drugged_wine = nothing; rtrue; } if (Person_who_drank_drugged_wine in location) { print (string) Spacing_str; Cast_with_capital_The(Person_who_drank_drugged_wine); ! not popped print (string) Getting_sleepy-->Sleepy_counter, (string) Dot_newline_str; } QueueInterrupt(DruggedWineEffectsDaemon,1); ! not popped ++Sleepy_counter; return Sleepy_counter; ]; [ Crocodile_drugged_counter ; if (location == Anteroom) { print (string) Spacing_str, "Without warning,"; Cast_with_the(crocodile); ! not popped print " relaxes, eyes closed, asleep."; new_line; } ++score; Crocodile_asleep = true; Crocodile_mouth_closed = true; rfalse; ]; [ I_am_drugged_daemon ; print (string) Spacing_str; ++Drugged_player_cnt; print (string) Drug_table-->Drugged_player_cnt; new_line; if (Drugged_player_cnt < 4) { return QueueInterrupt(I_am_drugged_daemon,2); } if (Drugged_player_cnt ~= 4) rfalse; print (string) Spacing_str; if (location == On_the_Ladder or In_the_Rigging) { return JigsUp("Too drugged to keep your grip on the ropes, you slip into the sea."); } if (OnShipP(location) && (FindDaemon_or_Timer(Ship_draws_closer_to_shore_timer) || FindDaemon_or_Timer(Ship_explodes_timer))) { return JigsUp("You awake too late to save the ship -- or rather, you never wake at all."); } print "You wake at sunrise"; if (Lafonds_Bedroom hasnt visited) { print ", too late to save your father or his friend Jamison"; } return JigsUpWorseThanDeath(". The governor of St. Sinistra provides you with food and shelter; at least, until he grows tired of your body and your presence."); ]; [ Goblet_action ; if (action == ##LookIn or ##Examine) { Cast_with_capital_The(noun); ! not popped print (string) Goblet_contents_tbl-->noun.number, (string) Dot_newline_str; rtrue; } if (action == ##Close or ##Open) { return FreeSub(); } if (action == ##DrinkFrom) { if (second) { return DrinkWine(second); } return DrinkWine(noun); } if (action == ##Fill) { Perform(##Pour,quantity_of_wine,noun); ! not popped rtrue; } if (action == ##Drop && location == Lafonds_Bedroom) { move noun to table; print "You set"; Cast_noun_with_the(); ! not popped print " on"; return Cast_with_the_and_print_dots(table); } if (action == ##ThrowAt or ##Destroy or ##Throw) { return AnnoyLafondWithWine(); } if (action ~= ##Take) rfalse; if (noun == laudanum) { return FreeSub(); } if (noun == green_goblet && Lafond_seduction_cnt < 3 && location == Lafonds_Bedroom) { (name) Lafond, " stops you. ~That is mine.~"; } if ((~~Ultimately_InP(blue_goblet)) && (~~Ultimately_InP(green_goblet))) rfalse; print (string) You_already_have_str, " a goblet", (string) Dot_newline_str; rtrue; ]; [ AnnoyLafondWithWine ; if (noun == blue_goblet or green_goblet) { remove noun; noun.number = 0; print "The delicate glass of"; Cast_noun_with_the(); ! not popped print " shatters into pieces."; new_line; } else if (noun == quantity_of_wine) { print "You dash"; Cast_with_the(quantity_of_wine); ! not popped print " into Lafond's face."; new_line; } else { WrapSub(); ! not popped } if (location ~= Lafonds_Bedroom || Lafond notin location) rtrue; return JigsUpWorseThanDeath(Lafond_smacks_you_str); ]; [ Gallery_action rarg v ; if (rarg == M_HANDLED) { v = ##Action190; if (~~PhysicallyTouchVerbP(v)) { v = ##Go; if (~~PhysicallyTouchVerbP(v)) { v = ##Exit; if (~~PhysicallyTouchVerbP(v)) { v = ##Where; if (~~PhysicallyTouchVerbP(v)) { v = ##TieWith; if (~~PhysicallyTouchVerbP(v)) { v = ##Verify; if (~~PhysicallyTouchVerbP(v)) jump labelXXX; } } } } } return YouCantReachThe(v); .labelXXX; if (action == ##ThrowAt) { "You missed."; } if (noun == Gallery && action == ##Look or ##Examine) { return LookSub(); } if (noun == Ballroom) { if (action == ##Examine) { return LookSub(); } if (action ~= ##DiveTo or ##CrawlThru) rfalse; Perform(##Swing,rope); ! not popped rtrue; } if (action == ##DiveOut) { Perform(##Swing,rope); ! not popped rtrue; } if (action == ##Swing && noun == Room_Holder) { Perform(##Swing,rope); ! not popped rtrue; } if (action ~= ##TellAbout or ##Tell or ##AskAbout || (~~FindDaemon(TheDuelDaemon))) rfalse; print "No one is listening to you."; new_line; Clear_itbl(); ! not popped rtrue; } if (rarg == M_ENTER && FindDaemon(TheDuelDaemon)) { give Captain_Jamison attrib9; give Lafond attrib9; give Cookie attrib9; rtrue; } if (rarg ~= M_LOOK) rfalse; print "You are on a wide balcony overlooking the ballroom. A hallway lies to the north.^ Down on", " the dance floor"; if (FindDaemon(TheDuelDaemon)) { Cast_with_the(dancer); ! not popped print "s are pressed in a wide circle around Nicholas and Lafond. Cookie stands anxiously in the door to the veranda, near"; Cast_with_the(your_father); ! not popped print " and Lucy"; } else if (Ballroom has general_3) { print " a small number of Jamison's scruffiest men are corralling"; Cast_with_the(dancer); ! not popped print " into a screaming huddle in the center of the room"; } else { print " you see myriad colors as the guests weave the intricate steps of their dances"; } print '.'; rtrue; ]; [ Rope_action local1 ; if (local1) { if (local1 == 9[torch?]) rtrue; print (string) Spacing_str; return DescribeChandelier(); } if (action == ##Examine) { return DescribeChandelier(); } if (action == ##ClimbOn or ##ClimbDown or ##Swing) { if (rope has general_3) { Cast_with_capital_The(rope); ! not popped print " is looped over the railing -- you'd hang ", (name) yourself, (string) Dot_newline_str; rtrue; } if (Cookie in location && (~~FindDaemon(TheDuelDaemon))) { (name) Cookie, " grabs hold of you, ~Ye lost yer mind, lass!~"; } print "~Aaieeee!~ The cry comes uncalled to your lips as you swoop down from the balcony"; if (~~Disguised_as_boy) { print ", petticoats flying,"; } print " on the end of"; Cast_with_the_and_print_dots(rope); ! not popped print (string) Spacing_str; if (FindDaemon(TheDuelDaemon)) { if (Various_duel_or_ship_or_dance_counters < 15) { Unqueue(TheDuelDaemon); ! not popped give rapier ~attrib9; move Captain_Jamison to Beach; give Captain_Jamison ~attrib9; move Lafond to Ballroom; give Lafond ~attrib9; move your_father to Beach; move Lucy to Beach; move Cookie to Beach; give Cookie ~attrib9; give Ballroom ~general_3; give french_door open; give Lafond general_2; ++score; if (blue_goblet in player) { remove blue_goblet; } else if (green_goblet in player) { remove green_goblet; } if (pinch_of_spices in player) { move pinch_of_spices to spices; } DropAll(player,Ballroom); ! not popped Lafond_seduction_cnt = 1; QueueInterrupt(Finale,6); ! not popped print "Your timing is perfect: you slam into Lafond just as he steps into his lunge. His rapier stabs wildly, piercing Nicholas's shoulder, missing his heart. You and Lafond roll into a snowball of "; if (~~Disguised_as_boy) { print "petticoats"; } else { print "breeches"; } print " and brocade, dropping everything between you."; PrintNewlines(15); ! not popped print (string) Spacing_str, "Nicholas shouts, from far away, ~Let me go! Let me deliver Lafond to a 'better' world.~^ ~A gentleman can't kill an unconscious man!~ That is Papa's voice. ~And you're in no shape to continue, Nicholas. Rodney -- help my daughter. I'll take Nick.~^ Cookie leans over you. ~We must get back to the ship, Miss. Dragoons surround the house.~ Nicholas, injured but still arguing, is already on the veranda, half-forced, half-supported by your father, shadowed by Lucy. Cookie helps you to your feet and rushes after them, expecting you to follow. Lafond lies nearby, apparently unconscious", (string) Dot_newline_str; new_line; return Goto(Ballroom); } return JigsUp("Startled, Lafond raises his sword and you fly onto the blade. You fall over your lover's body and expire, your lips on his in a kiss outlasting death."); } if (Ballroom has general_3) { return JigsUp("You sweep down into the ballroom, felling dancer and pirate alike. Unfortunately, one of Jamison's crew, mistaking your shortcut for an attack, greets you with a sharpened dagger."); } return JigsUpWorseThanDeath("Other cries rise to match yours as you sweep down the center of the ballroom in an avalanche of dancers, knocking yourself unconscious against the far wall. You awaken the next morning, in the village, embarrassed and alone."); } if (action == ##Tie && second == railing) { if (rope has general_3) { print (string) Already_is_str; rtrue; } give rope general_3; "Tied."; } if (action == ##Remove or ##Free) { if (rope has general_3) { give rope ~general_3; print "Untied. "; Cast_with_capital_The(chandelier); ! not popped " swings slightly, dribs of hot wax spilling to the floor."; } return WrapSub(); } if (action == ##Take) { if (rope has general_3) { return YouHaveToFirst("untie it"); } if (rope has general_1) { return YouCantReachThe(rope); } print "Pray describe what you intend to do with"; return Cast_with_the_and_print_dots(rope); } if (action ~= ##Fiddle or ##Raise or ##Move) rfalse; Cast_with_capital_The(chandelier); ! not popped print " swings, but is too heavy for you to pull up", (string) Dot_newline_str; rtrue; ]; [ DescribeChandelier ; print "A ", (name) chandelier, " is held above", " the dance floor", " by a rope and pulley system, so that the servants can lower it to light and snuff its candles. Several feet of ", (name) rope, " hang down from the pulley, the "; if (rope has general_3) { print "excess tied around"; } else { print "end resting on"; } Cast_with_the(railing); ! not popped print '.'; if (action ~= ##Examine) rtrue; new_line; rtrue; ]; [ Chandelier_action ; if (action == ##BlowOut) { return YouCantReachThe(chandelier); } if (action == ##Examine) { print "Held in place by a rope running through a pulley,"; Cast_with_the(chandelier); ! not popped print " gently swings its one hundred candles over", " the dance floor", (string) Dot_newline_str; rtrue; } if (action ~= ##Swing or ##Free) rfalse; return ReversePerform(rope); ]; [ Crack_action ; if (action == ##LookIn) { Perform(##Examine,Helena_Louise); ! not popped rtrue; } if (action ~= ##Board or ##ClimbOn or ##CrawlThru) rfalse; Cast_with_capital_The(crack); ! not popped " is too narrow."; ]; [ Powder_horn_action ; if (action == ##EmptyIn) { "You start to empty it, but reconsider."; } if (action == ##EmptyFrom && second == powder_horn) { Perform(##EmptyIn,powder_horn); ! not popped rtrue; } if (action == ##Take && ITake(false) ~= 8[Crulley?] or 0 && powder_horn hasnt visited) { give gunpowder ~concealed; "Taken."; } if (action == ##Fill && noun == powder_horn) { return YouCantWhatANoun("put anything into"); } if (action == ##Insert or ##Pour && second == powder_horn) { Perform(##Fill,second,noun); ! not popped rtrue; } if (action == ##Close or ##Open) { print (string) No_see_str, (string) Way_to_do_that_str; rtrue; } if (action == ##LookIn or ##Examine) { print "Almost triangular, with a little spout on top,"; Cast_with_the(powder_horn); ! not popped print " is similar to the one your father used to carry when hunting. It is filled with a mixture of ", (name) gunpowder, " and shot", (string) Dot_newline_str; rtrue; } if (action ~= ##Take || (~~CheckIfWordUsedToIdentifyObj('powder',powder_horn)) || (~~Ultimately_InP(powder_horn))) rfalse; "You pour out some ", (name) gunpowder, ". It blows away."; ]; [ Anteroom_action rarg ; if (rarg == M_LOOK) { print "Two exits lead from this cavernous room, north and south. The walls drip with wet, forming a huge pool on the floor."; rtrue; } if (rarg ~= (M_ENTER|invalidEnum4)) rfalse; if ((~~Father_has_taunted_alligator) && your_father in location) { print (string) Spacing_str, "Your father stops, smiling at"; Cast_with_the(crocodile); ! not popped print ", ~Hello, chum, how are you?~ He bends over the creature, and "; if (Garter_around_crocodile) { Question_cnt = Q_DO_YOU_KNOW_LUCY; QueueInterrupt(QuestionExpireTimer,2); ! not popped move garter to your_father; give garter ~attrib9; print "laughs. ~That's my Lucy! Never one to shirk belling the cat. What a woman! Have you been to the kitchen, dear?~ He slips off"; Cast_with_the(garter); ! not popped print " and"; } else if (Crocodile_asleep) { print "scratches its bumpy snout, muttering, ~Never seen you sleep like this before.~ It stirs to life as ", (name) your_father; } print " walks over to you by the north entrance. The reptile"; if (Crocodile_asleep) { print ", waking,"; } Father_has_taunted_alligator = true; Crocodile_mouth_closed = false; Garter_around_crocodile = false; Crocodile_asleep = false; give garter ~trytakebit; give garter takeable; " lunges after him, choking on its chain."; } if (Cookie_attacking_alligator || Cookie notin location) rfalse; Cookie_attacking_alligator = true; give crocodile attrib9; print (string) Spacing_str, "Cookie rushes at"; Cast_with_the(crocodile); ! not popped print ", crying, ~I'll take care of this monster, sweetheart. You run by and do what you must do.~ He dives headlong into"; Cast_with_the(pool); ! not popped if (rapier in Cookie) { move rapier to location; print ", throwing free"; Cast_with_the(rapier); ! not popped } print (string) Dot_newline_str; rtrue; ]; [ Anteroom_s_dir ; if (Cookie_attacking_alligator) { return Corner_e_dir(); } if (Garter_around_crocodile || Crocodile_asleep) { print "You edge past the reptile", (string) Dot_newline_str; new_line; return Dungeon; } if (FindDaemon(Crocodile_opens_mouth)) { Unqueue(Crocodile_opens_mouth); ! not popped } Cast_with_capital_The(crocodile); ! not popped print " roars at you. You retreat to the north entrance and the monster stills, waiting, chops open, almost smiling", (string) Dot_newline_str; rfalse; ]; [ Corner_e_dir ; if (~~Cookie_attacking_alligator) { return Dungeon; } give Dungeon ~visited; Verbosity = BRIEF; if (Crulley hasnt general_2 && (~~Have_encountered_crulley_in_dungeon)) { Crulley_alone_with_you_timer = 1; QueueInterrupt(CrulleyInDungeonDaemon,65535); ! not popped print "A whip cracks "; if (Crulley_not_gotten_revenge_on_Jamison) { Crulley_not_gotten_revenge_on_Jamison = false; print "the air. ~Flogs me, will ye, Cap'n? Taste it ", (name) yourself, ", har.~ Jamison groans, half conscious"; } else { print "against flesh"; } print ". You rush in", (string) Dot_newline_str; new_line; } return Dungeon; ]; [ Crocodile_action rarg ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; if (crocodile has visited) { print (string) Spacing_str; Cast_with_capital_The(crocodile); ! not popped } else { give crocodile visited; print (string) Spacing_str, "A ", (name) crocodile; } print " lies half in the pool, "; if (Crocodile_asleep) { print "sleeping."; rtrue; } print "gazing at you,"; if (Garter_around_crocodile) { Article(garter); ! not popped print " around its snout."; rtrue; } if (Crocodile_mouth_closed) { print " mouth closed."; rtrue; } print " with baleful eyes, jaws wide open. Dagger-sharp teeth glint in"; Cast_with_the(torch); ! not popped print "light."; rtrue; } if (action == ##PlaceOn && noun == garter) { if (Father_has_taunted_alligator) { remove noun; print (string) Monster_lunges_str, "Screaming, you dash back, dropping"; Cast_with_the(garter); ! not popped print " into"; return Cast_with_the_and_print_dots(pool); } if (Crocodile_mouth_closed) { move garter to crocodile; give garter attrib9; Garter_around_crocodile = true; give garter trytakebit; give garter ~takeable; if (~~Crocodile_asleep) { if (~~FindDaemon_or_Timer(Crocodile_drugged_counter)) { ++score; } print "With great daring and greater speed, you slip"; Cast_with_the(garter); ! not popped print " around"; Cast_with_the(crocodile); ! not popped print "'s snout. "; Cast_with_capital_The(crocodile); ! not popped " thrashes about, unable to remove it."; } Cast_with_capital_The(garter); ! not popped print " fits on its snout like a ring on a wedding finger", (string) Dot_newline_str; rtrue; } Cast_with_capital_The(garter); ! not popped print " won't fit around that open maw", (string) Dot_newline_str; rtrue; } if (Crocodile_asleep && action == ##Wake) { "That is the last thing you want to do!"; } if (action == ##Hug or ##Kiss) { "The very thought makes you shiver."; } if (action == ##Touch or ##PlaceOn or ##Insert or ##CrawlThru) { print "It would be safer to stay distant and throw things at"; return Cast_with_the_and_print_dots(crocodile); } if (CheckIfWordUsedToIdentifyObj('mouth',crocodile) && (~~P_adjectives-->0) && (~~P_adjectives-->1)) rfalse; if (action == ##Muzzle && second == garter) { Perform(##PlaceOn,garter,crocodile); ! not popped rtrue; } if (action == ##ThrowwTo or ##Give or ##Throw or ##ThrowAt) { if (Cookie_attacking_alligator) { Cast_with_capital_The(crocodile); ! not popped " is too busy fighting Cookie to notice."; } if (noun == leather_bottle) { "You might need that later."; } if (noun == your_reticule) rfalse; if (Crocodile_asleep) { if (noun == smelling_salts && action == ##Give) { Perform(##Wake,crocodile,smelling_salts); ! not popped rtrue; } print "But"; Cast_with_the(crocodile); ! not popped " is asleep."; } if (noun == pinch_of_spices or spices && pinch_of_spices in player) { move pinch_of_spices to spices; Cast_with_capital_The(crocodile); ! not popped print " blinks its eyes once, but takes no other notice of"; return Cast_with_the_and_print_dots(spices); } if (Father_has_taunted_alligator) { remove noun; print (string) Monster_lunges_str; Cast_with_capital_The(noun); ! not popped print " drops ignored into"; Cast_with_the_and_print_dots(pool); ! not popped rtrue; } if (Garter_around_crocodile) { Cast_with_capital_The(crocodile); ! not popped print " is helpless! ", (string) Mama_shocked_str; rtrue; } remove noun; Crocodile_mouth_closed = true; QueueInterrupt(Crocodile_opens_mouth,2); ! not popped Cast_with_capital_The(crocodile); ! not popped print " snaps its jaws shut as"; Cast_noun_with_the(); ! not popped if (noun == smelling_salts) { print " bounce", " off its hide, sinking into"; return Cast_with_the_and_print_dots(pool); } print " disappear"; if (noun ~= breeches) { print 's'; } print " into"; if (noun == slab_of_pork) { if (Salt_pork_is_drugged) { QueueInterrupt(Crocodile_drugged_counter,3); ! not popped } " its maw."; } return Cast_with_the_and_print_dots(pool); } if (action == ##DiveTo) { "You can't jump that far."; } if (action == ##ThrowAt or ##ThrowDir or ##FeedWith) { Perform(##ThrowwTo,second,crocodile); ! not popped rtrue; } if (action == ##Examine) { if (Cookie_attacking_alligator) { Cast_with_capital_The(pool); ! not popped print " boils with the bodies of"; Cast_with_the(crocodile); ! not popped print " and"; return Cast_with_the_and_print_dots(Cookie); } if (Garter_around_crocodile) { Cast_with_capital_The(crocodile); ! not popped print "'s snout is pinned closed by"; Article(garter); ! not popped if (Crocodile_asleep) { print (string) Snorts_in_sleep_str; } print (string) Dot_newline_str; rtrue; } if (Crocodile_mouth_closed) { print "Two gleaming teeth poke out of"; Cast_with_the(crocodile); ! not popped print "'s closed mouth"; if (Crocodile_asleep) { print (string) Snorts_in_sleep_str; } print (string) Dot_newline_str; rtrue; } Cast_with_capital_The(crocodile); ! not popped print " smiles at you invitingly, white teeth shining in"; Cast_with_the(torch); ! not popped "light."; } if (action ~= ##Kick or ##Destroy or ##Attack) rfalse; if (Cookie_attacking_alligator) { print (name) Cookie, " is seeing to"; return Cast_with_the_and_print_dots(crocodile); } if (Crocodile_asleep) { print "Harm a sleeping animal! ", (string) Mama_shocked_str; rtrue; } if (Garter_around_crocodile) { print "The tear welling up in"; Cast_with_the(crocodile); ! not popped print "'s eye is rather poignant. You can't bear to hurt the beast in this state", (string) Dot_newline_str; rtrue; } print "You have no wish to get any closer to"; return Cast_with_the_and_print_dots(crocodile); ]; [ Crocodile_opens_mouth ; if (Garter_around_crocodile || crocodile notin location) rfalse; Crocodile_mouth_closed = false; print (string) Spacing_str, "With an inaudible creak,"; Cast_with_the(crocodile); ! not popped print "'s mouth opens again", (string) Dot_newline_str; rtrue; ]; [ Pool_action ; if (action == ##Swim or ##DuckUnder or ##CrawlThru) { print "You splash around at the outskirts of"; return Cast_with_the_and_print_dots(pool); } if (action == ##ThrowAt or ##ThrowwTo or ##Throw) { if (noun == slab_of_pork && (~~Crocodile_mouth_closed) && (~~Crocodile_asleep)) { print "With a terrific splash,"; Cast_with_the(crocodile); ! not popped print " throws itself after"; Cast_noun_with_the(); ! not popped print ". "; Perform(##Throw,slab_of_pork,crocodile); ! not popped rtrue; } if (noun == leather_bottle) { Perform(##Throw,leather_bottle,crocodile); ! not popped rtrue; } remove noun; Cast_with_capital_The(noun); ! not popped print " splashes into"; return Cast_with_the_and_print_dots(pool); } if (action == ##LookIn) { print "It's too murky to see anything", (string) Dot_newline_str; rtrue; } if (action == ##Insert) { remove noun; Cast_with_capital_The(noun); ! not popped " sinks from sight."; } if (action ~= ##DrinkFrom or ##Drink) rfalse; "Yechh!"; ]; [ Dungeon_action rarg ; if (rarg == M_LOOK) { print "You sense, rather than see, the rusty skeletons of old cages and torture devices that line the walls of this cavernous room. One flaming torch, high on a wall, casts mad licks of light into the darkness. Passages lead north and west. Set deep in the rocky floor is a"; PrintOpenOrClosed(trapdoor,true); ! not popped print ' ', (name) trapdoor, (string) Dot_newline_str, (string) Spacing_str; return DescribeShackles(); } if (rarg == M_HANDLED && Jamisons_men_have_attacked && Crulley in location && Crulley hasnt general_2) { if (Captain_Jamison == noun or second && FriendlyVerbP() || (PhysicallyTouchVerbP(Captain_Jamison) || PhysicallyTouchVerbP(pair_of_manacles))) { (name) Crulley, " growls, ~Keep away from 'im.~"; } if ((~~PhysicallyTouchVerbP(trapdoor)) || action == ##Board or ##CrawlThru) rfalse; (name) Crulley, " barks, ~Leave that alone.~"; } if (rarg ~= (M_ENTER|invalidEnum4) || (~~Have_encountered_crulley_in_dungeon)) rfalse; print (string) Spacing_str, (name) Crulley, " jumps out of the shadows at you."; return JigsUp(The_fall_down_str); ]; [ Dungeon_w_dir ; if (FindDaemon(CrulleyInDungeonDaemon)) { Unqueue(CrulleyInDungeonDaemon); ! not popped give Crulley ~general_3; print "~Come back 'ere, wench!~"; Cast_with_the(Crulley); ! not popped print " calls after you.^^"; } if (P_walk_dir == w_to) { return Corner; } if (P_walk_dir ~= n_to) rfalse; return Anteroom; ]; [ Pair_of_manacles_action ; if (action == ##LookIn or ##Examine) { return DescribeShackles(); } if (action == ##Close) { if (second) { Perform(##PlaceOn,pair_of_manacles,second); ! not popped rtrue; } return OpenOrClose(noun,0,"They clamp shut"); } if (action == ##Open) { if (pair_of_manacles has open) { "They are already open!"; } if (second == jewelled_brooch) { return HowDoYouDoThat(); } print "It isn't that easy", (string) Dot_newline_str; rtrue; } if (action == ##Unbar or ##Pick && second == jewelled_brooch) { print "You twist the pin of"; Cast_with_the(jewelled_brooch); ! not popped print " in the "; if (Captain_Jamison in pair_of_manacles) { move Captain_Jamison to location; ++score; give pair_of_manacles open; print "locks, quickly freeing Nicholas. "; if (Captain_Jamison has general_1) { print "He falls in a faint at your feet", (string) Dot_newline_str; rtrue; } new_line; return DuelistsMeet(); } give pair_of_manacles open; give pair_of_manacles ~locked; print "manacles until they pop open", (string) Dot_newline_str; rtrue; } if (action == ##Unbar) { print "That key is much too large to fit in"; return Cast_with_the_and_print_dots(pair_of_manacles); } if (action == ##Wear or ##ReachIn) { Perform(##PlaceOn,pair_of_manacles,yourself); ! not popped rtrue; } if (action == ##Insert) { if (noun == yourself) { Perform(##PlaceOn,pair_of_manacles,yourself); ! not popped rtrue; } if (noun == large_key) { Perform(##Unbar,pair_of_manacles); ! not popped rtrue; } move noun to location; Cast_with_capital_The(noun); ! not popped " drops to the floor."; } if (action ~= ##Wear or ##PlaceOn && (action ~= ##Tie || P_initial_word ~= 'fasten' or 'secure' or 'attach')) rfalse; if (second == yourself) { print "Mama would not have praised your intelligence", (string) Dot_newline_str; rtrue; } if (second == your_father) { Question_cnt = Q_NOT_A_YES_NO_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "He wanders off before you can get them on him. ~Oh dear, you have learned atrocious manners these last few year in London!~"; } if (second == Captain_Jamison) { (string) You_cant_str, "lift him high enough."; } (string) You_cant_str, "put that in ", (name) pair_of_manacles, "!"; ]; [ DescribeShackles ; if (Captain_Jamison in pair_of_manacles) { print "Nicholas is spread-eagled against the wall, shackled in the ", (name) pair_of_manacles, '.'; } else if (player in pair_of_manacles) { print "You lean against the wall, one arm raised above ", (name) your_head, ", cuffed in a manacle."; } else { print "A ", (name) pair_of_manacles, " hangs from iron chains attached high on the wall."; } if (action ~= ##LookIn or ##Examine) rtrue; new_line; rtrue; ]; [ Referred_to_trapdooor ; if (location ~= Dungeon) rfalse; return 129[trapdoor?]; ]; [ Trapdoor_action ; if (action == ##Move or ##Raise or ##Open or ##Lower or ##Close) { return OpenOrClose(trapdoor,"The door creaks open to reveal a black well, water hushing deep within",0); } if (action == ##LookIn or ##LookUnder) { if (trapdoor has open) { if (Crulley in trapdoor) { (name) Crulley, " is slowly climbing up the well."; } print "You smell salt water and mold, but you can see nothing", (string) Dot_newline_str; rtrue; } print "It", (string) Is_closed_str, (string) Dot_newline_str; rtrue; } if (action == ##StandOn or ##Board or ##CrawlThru) { if (trapdoor has open) { print "You start to climb down the well, but lose your footing on the slimy rock."; if (Crulley has general_2) { print " At least you take"; Cast_with_the(Crulley); ! not popped print " with you as you fall."; } } else { print "As you stand on"; Cast_with_the(trapdoor); ! not popped print ", the rotted wood tears away."; } return JigsUp(The_fall_down_str); } if (action == ##PlaceOn && trapdoor has open) { Perform(##Throw,noun,trapdoor); ! not popped rtrue; } if (action ~= ##PutThrough or ##Insert or ##Throw or ##ThrowAt) rfalse; if (noun == rapier) { (name) Captain_Jamison, " would not thank you for doing that."; } if (noun == your_reticule) rfalse; if (Crulley has general_2) { Perform(##Throw,noun,Crulley); ! not popped rtrue; } remove noun; print "You drop"; Cast_noun_with_the(); ! not popped print " into the well. Several seconds later you hear a tiny splash", (string) Dot_newline_str; rtrue; ]; [ Cell2_action rarg ; if (rarg == (M_ENTER|invalidEnum4) && your_father hasnt visited) { give your_father visited; give your_father ~attrib9; ++score; if (Current_dancing_partner == Lafond) { QueueInterrupt(LafondRequestsPresenceDaemon,15); ! not popped } QueueInterrupt(DescribeSituationToDad,2); ! not popped print (string) Spacing_str, "As you enter, a tall bony man moves out of the darkness. ~Papa,~ you cry, rushing into his arms.^ ~Why, hullo, my dear.~ He hugs you tightly. ~Nick certainly took his time about fetching you."; if (Disguised_as_boy || linen_chemise hasnt general_3) { print "~ He squints in horror at your clothes. ~I have always found the London fashions quite abominable."; if (linen_chemise hasnt general_3) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped print " Aren't you a trifle cold?"; } } "~"; } if (rarg) rfalse; rfalse; ]; [ Cell_ob_action ; if (action == ##Board or ##CrawlThru) { if (location == Guards_Bunkroom or Cell1 or Cell2) { print (string) Look_around_you_str; rtrue; } if (location == North_Passage or South_Passage) { return Do_Walk(e_to); } if (location ~= Corner) rfalse; return Do_Walk(n_to); } if (action ~= ##Examine or ##Look) rfalse; if (location == Guards_Bunkroom or Cell1 or Cell2) { return LookSub(); } print "You would do better to enter it", (string) Dot_newline_str; rtrue; ]; [ Pile_of_clothes_action ; if (action ~= ##PlaceOn or ##Examine or ##Take or ##Wear) rfalse; if (location == Landing or Captains_Quarters) { return YouCantReachThe(noun); } if (ITake(false) == 8[Crulley?] or 0) rfalse; remove pile_of_clothes; give pile_of_clothes visited; move shirt to player; move breeches to player; give shirt ~attrib9; give breeches ~attrib9; give shirt visited; give breeches visited; ++score; if (action == ##Examine) { print "To get a better look, y"; } else { print 'Y'; } print "ou pick up"; Cast_with_the(pile_of_clothes); ! not popped print ". It separates into a pair of ", (name) breeches, " and"; return Cast_with_article_and_print_dots(shirt); ]; [ Referred_to_clothes w ; w = P_noun_names-->0; if ('clothes' == w or P_noun_names-->1) { if (location == Sleeping_Cupboard && shirt hasnt visited && breeches hasnt visited) { return pile_of_clothes; } if (action ~= ##TakeOff or ##Remove) rfalse; if (PreDisrobeSub()) { return not_here_object; } StripDown(true); ! not popped return not_here_object; } w = P_noun_names-->0; if ('dress' ~= w or P_noun_names-->1) rfalse; if (action == ##TakeOff or ##Remove) { if (PreDisrobeSub()) { return not_here_object; } StripDown(true); ! not popped return not_here_object; } if (action ~= ##Drop) rfalse; if (beautiful_ball_gown has worn && Ultimately_InP(cotton_frock)) { print '[', (name) cotton_frock, ']'; new_line; return cotton_frock; } if (cotton_frock has worn && Ultimately_InP(beautiful_ball_gown)) { print '[', (name) beautiful_ball_gown, ']'; new_line; return beautiful_ball_gown; } YouHaveToFirst("remove"); ! not popped return not_here_object; ]; [ Generic_clothes_action ; if (action == ##Examine) { if (noun == cotton_frock) { if (Skirt_soaked_in) { DescribeSoakedObj(cotton_frock); ! not popped rtrue; } print "It is your favorite old frock, looking rather bedraggled without its hoops"; if (cotton_frock hasnt general_3) { give cotton_frock general_3; print ", which you hadn't time to put on during the pirate attack"; } print ". "; if (cotton_frock has general_2) { print "There is a tear out of the skirt"; } else { print "The worn fabric of the skirt often catches on things, tearing"; } print (string) Dot_newline_str; rtrue; } if (noun == beautiful_ball_gown) { print "Of cream silk, heavily embroidered on the stiffened skirt and stomacher,"; Cast_with_the(beautiful_ball_gown); ! not popped print " is a work of art", (string) Dot_newline_str; rtrue; } if (noun == shirt) { Cast_with_capital_The(shirt); ! not popped print " is clean and not too big"; if (shirt has general_2) { print ". There is a tear at the bottom"; } print (string) Dot_newline_str; rtrue; } Cast_with_capital_The(breeches); ! not popped " are about your size."; } if (action == ##LookUnder or ##LookIn && noun has worn) { print "Just"; Article(linen_chemise); ! not popped print ", and a couple fleas", (string) Dot_newline_str; rtrue; } if (action == ##Wear) { if (noun == beautiful_ball_gown or cotton_frock && (shirt has worn || breeches has worn) || (noun == breeches or shirt && (cotton_frock has worn || beautiful_ball_gown has worn))) { Cast_with_capital_The(noun); ! not popped print " doesn't fit over what you are already wearing", (string) Dot_newline_str; rtrue; } if (Skirt_soaked_in && noun == cotton_frock) { "The clammy cotton makes it too uncomfortable to wear."; } give noun worn; move noun to player; if (noun == shirt or breeches && pile_of_clothes in Sleeping_Cupboard) { give pile_of_clothes visited; remove pile_of_clothes; ++score; } if (noun == breeches) { print "You tuck"; Cast_with_the(linen_chemise); ! not popped if (shirt has worn) { Disguised_as_boy = true; give linen_chemise general_3; print " and"; Cast_with_the(shirt); ! not popped } print " into the pants. You look a little fat, but now you can move freely", (string) Dot_newline_str; rtrue; } if (noun == shirt) { if (breeches has worn) { give linen_chemise general_3; Disguised_as_boy = true; } print "It fits loosely, masking your figure", (string) Dot_newline_str; rtrue; } give linen_chemise general_3; if ((~~Have_worn_gown) && noun == beautiful_ball_gown) { Have_worn_gown = true; ++score; Cast_with_capital_The(beautiful_ball_gown); ! not popped print " fits perfectly, the creamy silk bringing a glow to your cheeks. You comb your hair with your fingers and bite your lips to make them red", (string) Dot_newline_str; rtrue; } print "You don"; return Cast_with_the_and_print_dots(noun); } if (action == ##Remove or ##TakeOff && noun has worn) { if (noun == cotton_frock) { give noun ~worn; give linen_chemise ~general_3; print "You take off"; Cast_with_the(cotton_frock); ! not popped print (string) Dot_newline_str; rtrue; } if (noun == breeches or shirt) { Disguised_as_boy = false; } give noun ~worn; give linen_chemise ~general_3; print "You remove"; Cast_noun_with_the(); ! not popped print ", exposing your "; if (noun == breeches) { print "ankles"; } else if (noun == shirt) { print "elbows"; } else { print (name) linen_chemise; } print (string) Dot_newline_str; rtrue; } if (action == ##RipUp || (action == ##Slice && Ultimately_InP(dagger))) { if (noun == cotton_frock) { if (~~parent(rag)) { move rag to player; if (Skirt_soaked_in == water) { Rag_soaked_in = water; } else if (Skirt_soaked_in == rum) { Rag_soaked_in = rum; } else { Rag_soaked_in = nothing; } give rag visited; if (cotton_frock hasnt general_2) { give cotton_frock general_2; } print "You "; if (action == ##Slice) { move dagger to player; print "cut"; } else { print "rip"; } print " a large rag out of"; return Cast_with_the_and_print_dots(cotton_frock); } if (~~Ultimately_InP(rag)) { print "There already is a rag around here somewhere", (string) Dot_newline_str; rtrue; } print (string) You_already_have_str; return Cast_with_article_and_print_dots(rag); } if (noun == beautiful_ball_gown) { Cast_with_capital_The(beautiful_ball_gown); ! not popped print " is too fine to ruin", (string) Dot_newline_str; rtrue; } print "The fabric is too tightly woven", (string) Dot_newline_str; rtrue; } if (action ~= ##Take || noun ~= breeches or shirt || pile_of_clothes notin location) rfalse; Perform(##Take,pile_of_clothes); ! not popped rtrue; ]; [ Rag_action ; if (action == ##Soak) { if (location == By_the_Ship or Lagoon or Shallows or Beach or Main_Deck) { return SoakItem(); } return HowDoYouDoThat(); } if (CheckCorrectAdjectives('wet') && (~~Rag_soaked_in)) { print (string) No_see_str, "wet rag here", (string) Dot_newline_str; rtrue; } if (action == ##Examine) { if (~~Rag_soaked_in) { print "It is a fairly hefty scrap of fabric", (string) Dot_newline_str; rtrue; } return DescribeSoakedObj(rag); } if (action == ##RipUp) { return WrapSub(); } if (action == ##Tie) { print "It won't stay tied", (string) Dot_newline_str; rtrue; } if (action == ##Insert) { if (second == gate1 or fence) { return WrapSub(); } if (second ~= fuse) rfalse; return HowDoYouDoThat(); } if (action ~= ##Throw || second ~= fuse) rfalse; Perform(##ThrowOver,rag,fence); ! not popped rtrue; ]; [ DescribeSoakedObj obj ; print "The ", (name) obj, " is soaked and dripping with "; if (obj == rag && Rag_soaked_in == rum || (obj == cotton_frock && Skirt_soaked_in == rum)) { print "rum"; } else if (obj == rag && Rag_soaked_in == water || (obj == cotton_frock && Skirt_soaked_in == water)) { print "water"; } print (string) Dot_newline_str; rtrue; ]; [ Linen_chemise.action ; if (action == ##Examine) { if (noun == linen_chemise) { if (linen_chemise has general_3) { print "It's covered by other clothes", (string) Dot_newline_str; rtrue; } Cast_with_capital_The(linen_chemise); ! not popped print ", kneelength and sleeveless, clings damply to your legs and torso"; if (linen_chemise has general_2) { print ". There is a tear at the bottom"; } print (string) Dot_newline_str; rtrue; } if (noun ~= your_kid_slippers) rfalse; print "They are dainty yet practical kidskin shoes", (string) Dot_newline_str; rtrue; } if (action == ##LookUnder or ##LookIn) { if (noun == linen_chemise) { print "Just you and your ", (name) unmentionables, (string) Dot_newline_str; rtrue; } print "Your feet are in"; return Cast_with_the_and_print_dots(your_kid_slippers); } if (action == ##Remove or ##TakeOff) { print "But"; if (noun == your_kid_slippers) { Cast_noun_with_the(); ! not popped print " are so comfortable"; } else { print " that wouldn't be decent"; } "!"; } if (action ~= ##Slice or ##RipUp) rfalse; print (string) You_cant_str, "bring yourself to ruin"; return Cast_with_the_and_print_dots(linen_chemise); ]; [ Garter_action ; if (action == ##Wear) { if (Garter_around_crocodile) { Perform(##Take,garter); ! not popped rtrue; } if (breeches has worn) { print "One doesn't wear"; Article(garter); ! not popped " over ", (name) breeches, "!"; } give garter worn; move garter to player; print "You slide"; Cast_with_the(garter); ! not popped print " up around your thigh", (string) Dot_newline_str; rtrue; } if (action == ##Take or ##Remove && Garter_around_crocodile) { if (~~Crocodile_asleep) { print "The reptile surges forward as you remove"; Cast_with_the(garter); ! not popped return JigsUp(". You are pulled struggling into the pool."); } Garter_around_crocodile = false; give garter ~trytakebit; give garter takeable; move garter to player; "You slip it off the scaly snout."; } if (action == ##Take) { if (garter hasnt visited && location == Kitchen && ITake(false) ~= 8[Crulley?] or 0) { print "Taken.^ Lucy kisses ", (name) your_head, " and returns to the fire, humming", (string) Dot_newline_str; rtrue; } if (garter notin your_father) rfalse; move garter to player; "~Take it, dear,~ Papa says."; } if (action == ##PlaceOn or ##Insert && second == garter) { if (garter notin player) { print (string) Not_holding_str; return Cast_with_the_and_print_dots(garter); } if (P_initial_word == 'throw' && noun == stone) { Perform(##Throw,stone,garter); ! not popped rtrue; } if (noun == stone) { if (garter has worn) { print "Not while you're wearing"; return Cast_with_the_and_print_dots(garter); } move stone to garter; if (~~Have_loaded_pistol_or_garter) { Have_loaded_pistol_or_garter = true; ++score; } print "You slip"; Cast_with_the(stone); ! not popped print " into"; return Cast_with_the_and_print_dots(garter); } print "It falls through"; return Cast_with_the_and_print_dots(garter); } if (action == ##Attack && (noun has animate || noun == crocodile)) { return HowDoYouDoThat(); } if (action == ##Shoot or ##Throw) { if (stone in garter) { if (~~second) { Perform(##Shoot,stone); ! not popped rtrue; } return WrapSub(); } if ((~~second) && action == ##Throw) { move garter to location; "Thrown."; } if (noun ~= stone) rfalse; return YouHaveToFirst("put the stone in",garter); } if (action == ##Shoot && noun == garter && Ultimately_InP(stone)) { Perform(##Shoot,second,stone); ! not popped rtrue; } if (action ~= ##Examine) rfalse; Cast_with_capital_The(garter); ! not popped print " is "; if (Garter_around_crocodile) { print "stretched taut around the jaws of"; Cast_with_the(crocodile); ! not popped print (string) Dot_newline_str; rtrue; } print "made of abnormally strong, red, stretchy lace", (string) Dot_newline_str; rtrue; ]; [ Unmentionables_action ; "Shh! Why do you think they're called ", (name) unmentionables, "?"; ]; [ Your_reticule_action ; if (action == ##Insert or ##Remove or ##Drop or ##PushUnder or ##PutThrough or ##PlaceOn or ##ThrowwTo or ##ThrowAt or ##Throw or ##Give && noun == your_reticule) { print "A lady is never without her reticule", (string) Dot_newline_str; rtrue; } if (action == ##Insert && noun == rapier or coffer) { Cast_with_capital_The(noun); ! not popped print " won't fit in"; return Cast_with_the_and_print_dots(your_reticule); } if (action ~= ##Examine) rfalse; print "You and Mama made the little drawstring bag a few months before she passed on. It's amazing how much it can hold", (string) Dot_newline_str; rtrue; ]; [ Banknote_action ; if (action == ##Examine) { print "This is"; Cast_with_the(banknote); ! not popped return CameWithGamePackage(); } if (action ~= ##Point or ##Wave || butler notin location || butler has general_1) rfalse; return ShowInvitationOrBribeButler(noun); ]; [ Smelling_salts_action local1 ; if (action == ##Smell) { print "You jerk"; Cast_with_the(smelling_salts); ! not popped print " away from your nose after one brief ammoniac whiff. Your burning nostrils make you feel more alert", (string) Dot_newline_str; rtrue; } if (action == ##Wave) { if (location == Dungeon && Captain_Jamison has general_1) { Perform(##Wake,Captain_Jamison,smelling_salts); ! not popped rtrue; } Perform(##Smell,smelling_salts); ! not popped rtrue; } if (action == ##Use) { if (~~second) { local1 = FindIn(location,animate,"on"); if (local1 && local1 ~= 8[Crulley?]) { Perform(##Wake,local1,smelling_salts); ! not popped rtrue; } Perform(##Smell,smelling_salts); ! not popped rtrue; } if (second has animate) { Perform(##Wake,second,smelling_salts); ! not popped rtrue; } print (string) Pardon_str; rtrue; } if (action == ##PlaceOn or ##PushUnder && second has animate) { Perform(##Wake,second,smelling_salts); ! not popped rtrue; } if (action == ##Give) { Perform(##Wake,second,smelling_salts); ! not popped rtrue; } if (action == ##FeedWith or ##Wake) { if (noun == Captain_Jamison) { return UseSmellSaltsOnJamison(); } if (noun == yourself) { Perform(##Smell,smelling_salts); ! not popped rtrue; } if (noun == butler && butler has general_1) { print (string) You_cant_str, "wake him", (string) Dot_newline_str; rtrue; } if (noun == Crulley && Crulley has general_1) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "Are you sure that's really wise?"; } PrintPronoun(); ! not popped print " doesn't need reviving", (string) Dot_newline_str; rtrue; } if (action == ##Examine) { print "You always carry your ", (name) smelling_salts, ", for emergencies. There is a small tag on one side of them", (string) Dot_newline_str; rtrue; } if (action ~= ##Browse) rfalse; "It says, ~For cases of vapors, hysteria or collapse, revive persons with the smelling salts.~"; ]; [ UseSmellSaltsOnJamison ; if (Captain_Jamison has general_1) { ++score; give Captain_Jamison ~general_1; print "You wave"; Cast_with_the(smelling_salts); ! not popped print " under Nicholas's nose. He stirs, sneezes and looks at you blearily. ~How --?~ he says, bewildered. ~Lafond, did he --?~ He "; if (linen_chemise hasnt general_3) { print "looks at you in growing horror, glancing from your chemise to your face, and "; } print "straightens. ~Darling, you are an angel, to have gone through all this and then rescue me. Your ravisher will not go unpunished.~ He squares his shoulders. ~For my brother, his wife, and your honor, I will kill Jean Lafond.~"; new_line; if (Captain_Jamison in pair_of_manacles) { Question_cnt = Q_HAVE_THE_KEY; QueueInterrupt(QuestionExpireTimer,2); ! not popped (string) Spacing_str, "He tugs at his chains with a wry smile. ~But I must get free first. Have you the key?~"; } return DuelistsMeet(); } "Jamison brushes you away, ~Thank you, but I'm not having the vapors.~"; ]; [ Leather_bottle_action ; if (action == ##Close or ##Open) { print "This is a squeezable bottle. You don't need to open or close it", (string) Dot_newline_str; rtrue; } if (action == ##Take && leather_bottle hasnt visited && ITake(false) ~= 8[Crulley?] or 0) { ++score; "Taken."; } if (action == ##Insert or ##Pour && second == leather_bottle) { Perform(##Fill,leather_bottle,noun); ! not popped rtrue; } if (action == ##Dry or ##DrinkFrom && noun == leather_bottle) { return Drug_something(); } if (action == ##Dry or ##PourFrom && noun == laudanum) { return Be_specific_do_what("put",laudanum); } if (action == ##DrinkFrom) { Perform(##Dry,laudanum,your_mouth); ! not popped rtrue; } if (action == ##Fill) { if (second == leather_bottle) { Perform(##Pour,second,noun); ! not popped rtrue; } print (string) You_cant_str, "get anything into"; return Cast_with_the_and_print_dots(leather_bottle); } if (action == ##LookIn or ##Examine) { print "It's a small leather bottle, with a tiny label on one side"; if (Laudenum_left > 0) { print ". It appears to be almost empty"; } print (string) Dot_newline_str; rtrue; } if (action ~= ##Browse) rfalse; "The label reads, ~Laudanum drops. Squeeze into a glass of wine to sleep free of pain and mental anguish.~"; ]; [ Laudanum_action ; if (action == ##Dry or ##Insert or ##Pour or ##PlaceOn && noun == laudanum) { return Drug_something(); } if (action == ##Take) { print "If you intend to drink"; Cast_with_the(laudanum); ! not popped ", say so."; } if (action == ##Drink or ##Eat) { Perform(##Dry,leather_bottle,yourself); ! not popped rtrue; } if (noun == laudanum) { ReversePerform(leather_bottle,second); ! not popped rtrue; } if (second ~= laudanum) rfalse; ReversePerform(noun,leather_bottle); ! not popped rtrue; ]; [ Drug_something ; if (second == leather_bottle) { return FreeSub(); } if (second has animate) { print (string) Not_polite_str; rtrue; } if (second == crocodile) { Perform(##Insert,leather_bottle,crocodile); ! not popped rtrue; } if (Laudenum_left < 3 && location ~= Lafonds_Bedroom) { "You stop, deciding you might need some later."; } --Laudenum_left; if (Laudenum_left <= 0) rfalse; move leather_bottle to player; if (second == yourself) { QueueInterrupt(I_am_drugged_daemon,2); ! not popped yourself.number = 2; print (string) Squeeze_three_drops_str, "into"; Cast_with_the(your_mouth); ! not popped print '.'; } else if (second == flagon) { flagon.number = 2; Drug_wine_with_laudanum(); ! not popped } else if (second == slab_of_pork) { Salt_pork_is_drugged = true; print (string) Squeeze_three_drops_str, "onto"; Cast_with_the(slab_of_pork); ! not popped print ". A patch of salt dissolves as"; Cast_with_the(laudanum); ! not popped print " absorbs into the meat."; } else if (second == green_goblet or blue_goblet) { second.number = second.number + 2; Drug_wine_with_laudanum(); ! not popped } else { print (string) Squeeze_three_drops_str, "into"; Cast_second_with_the(); ! not popped print '.'; if (second has clothing) { print " It evaporates quickly."; } } if (~~Laudenum_left) { " From the feel of it, the bottle is now empty."; } new_line; rtrue; ]; [ Drug_wine_with_laudanum ; Lafond_saw_the_drug = true; print (string) Squeeze_three_drops_str, "into"; Cast_second_with_the(); ! not popped print '.'; if (Lafond notin location) rtrue; print " You sense Lafond hesitate, then continue primping."; rtrue; ]; [ Jewelled_brooch_action ; if (action == ##Wear || (action == ##PlaceOn && second == yourself)) { Cast_with_capital_The(jewelled_brooch); ! not popped print " won't stay clasped", (string) Dot_newline_str; rtrue; } if (action == ##Examine) { print "All diamonds winking fire, tears of sapphire and crushed rubies in an oval setting, it is a pity that the clasp of"; Cast_with_the(jewelled_brooch); ! not popped print " has broken. The gold pin at the back swings about uselessly", (string) Dot_newline_str; rtrue; } if (action ~= ##Fix) rfalse; "That will have to be done by a goldsmith."; ]; [ Hat_action local1 ; if (local1) { if (hat hasnt general_3) rfalse; if (local1 == 9[torch?]) rtrue; print (string) Spacing_str, "An expensive hat is hanging on"; Article(knob); ! not popped print '.'; rtrue; } if (action == ##Examine) { if (CheckIfWordUsedToIdentifyObj('quill',hat)) { "It's a curling ostrich plume."; } "It is a crimson tricorne with a curling ostrich plume stuck in the crown."; } if (action == ##Wear or ##Take) { if (CheckIfWordUsedToIdentifyObj('quill',hat)) { Cast_with_capital_The(hat); ! not popped " looks so drab without its plume that you cannot bear to."; } if (hat hasnt general_3) rfalse; give knob ~general_1; give knob general_3; give hat ~general_3; move hat to player; give hat visited; if (action == ##Wear) { give hat worn; } return DoSomethingToKnob("As you lift the hat from its"); } if (action == ##TakeOff or ##Remove && hat has worn) { give hat ~worn; print "Doffed", (string) Dot_newline_str; rtrue; } if (action ~= ##PlaceOn || noun ~= hat) rfalse; if (second == your_head or yourself) { Perform(##Wear,hat); ! not popped rtrue; } if (second has animate) { if (second has general_1) { "It slides off."; } Cast_with_capital_The(hat); ! not popped print " doesn't go with what "; if (second == Lucy) { print 's'; } "he's wearing."; } return WrapSub(); ]; [ DoSomethingToKnob what ; print (string) what, " knob on the wall, a low vibration tingles up your legs from the floor", (string) Dot_newline_str; rtrue; ]; [ Crulley_action rarg local2 ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; print (string) Spacing_str; if (location == Beach) { print (name) Crulley, " stands"; if (Lafond_seduction_cnt > 6) { print ", pistol ready,", (string) Halfway_up_str; rtrue; } print " with the dragoons."; rtrue; } if (location ~= Cabin) rfalse; print (name) Crulley, " the pirate"; if (Crulley has general_1) { print " lies unconscious on the floor."; rtrue; } print ", hook raised, leering, comes toward you."; rtrue; } if (Crulley == actor) { if (Crulley has general_1) { print (string) He_doesnt_respond_str; rtrue; } if (action == ##TellAbout && noun == yourself) { if (CheckIfWordUsedToIdentifyObj('hook',Crulley)) { print "He snarls at the memory, ~'Twere bit off by a monster crocodile.~"; new_line; } else if (second == Lafond) { print "~'E's a hard 'un, who won't take no guff. But 'e pays well"; if (Beach hasnt visited) { print " -- er, so I hear"; } print ".~"; new_line; } else { print (name) Crulley, " ignores you", (string) Dot_newline_str; } return Clear_itbl(); } if (action == ##Hello) { "~Har-har.~"; } if (action == ##Kiss && noun == yourself) { "~Wi' a wannion! I likes me ladies forward!~"; } local2 = GenericLivingResponses(Crulley); if ((~~local2) || local2 == 8[Crulley?]) rfalse; rtrue; } if (action == ##Slice or ##Attack) { if (Crulley has general_1) { return UnladylikeToHitWhenDown(); } if ((~~second) || second == your_hand) { if (P_initial_word == 'slap') { print "Slap! The pirate fingers the red welt left by"; Cast_with_the(your_hand); ! not popped ", and laughs."; } if (coffer in player && (~~second)) { Perform(##Attack,Crulley,coffer); ! not popped rtrue; } if (rapier in player && (~~second)) { Perform(##Attack,Crulley,rapier); ! not popped rtrue; } return YourWhatWontHurtCrulley("dainty fists"); } if (second == coffer) { ++Crulley_knocked_out_cnt; Knocked_Crulley_unconscious = true; print "With all your strength you whack the pirate", (string) Over_the_head_with_str; Cast_with_the_and_print_dots(second); ! not popped move player to location; Unqueue(Crulley_breaks_into_cabin_daemon); ! not popped return Crulley_breaks_into_cabin_daemon(); } if (second == rapier) { if (Crulley has general_3) { if (Crulley has general_2) { print (string) You_cant_str, "very well reach"; Cast_with_the(Crulley); ! not popped print " when he's down in"; return Cast_with_the_and_print_dots(well); } Unqueue(CrulleyInDungeonDaemon); ! not popped ++score; Crulley_alone_with_you_timer = 1; QueueInterrupt(DuelWithCrulleyDaemon,2); ! not popped give Crulley general_2; give Crulley attrib9; move Crulley to trapdoor; remove whip; print "You flick"; Cast_with_the(rapier); ! not popped print " across his chest, barely scratching him. He cries, ~Avast me! Pricked by a woman!~ and trips into"; Cast_with_the_and_print_dots(trapdoor); ! not popped print (string) Spacing_str, "You peer down the hole to find ", (name) Crulley, " hanging in midair, his hook caught in the rocks a few yards down. He curses and starts to climb up the sheer slimy walls of"; return Cast_with_the_and_print_dots(well); } give Crulley general_3; print (name) Crulley, " seems more amazed than frightened of your attack, guessing correctly that you hardly know the tip from the hilt of"; Cast_with_the(rapier); ! not popped print ". He steps sideways in surprise, so he stands at", " the edge of"; return Cast_with_the_and_print_dots(trapdoor); } print "You slap"; Cast_with_the(Crulley); ! not popped print (string) Over_the_head_with_str; Cast_second_with_the(); ! not popped print ", to no effect", (string) Dot_newline_str; rtrue; } if (action == ##Kiss) { actor = Crulley; Perform(##Kiss,yourself); ! not popped actor = player; rtrue; } if (action == ##Kick) { return YourWhatWontHurtCrulley("slippered toes"); } if (action == ##PlaceOn or ##Insert or ##Throw or ##ThrowAt) { if (Crulley has general_2) { if (noun == rapier) { Perform(##Insert,rapier,trapdoor); ! not popped rtrue; } if (noun == your_reticule) rfalse; remove noun; print (name) Crulley, " curses as"; Cast_noun_with_the(); ! not popped print " sails past him down into"; return Cast_with_the_and_print_dots(well); } if (noun ~= coffer) rfalse; return Perform(##Attack,Crulley,noun); } if (action == ##Search) { if (Crulley has general_1) { "And dirty your lily hands? Never!"; } if (Crulley has general_2) { return YouCantReachThe(Crulley); } "You are uncomfortably sure he would love to have you frisk him."; } if (action == ##Give && noun == banknote && location ~= Beach) { print "He takes it, smiling blackly", (string) Dot_newline_str; rtrue; } if (action ~= ##Examine) rfalse; if (CheckIfWordUsedToIdentifyObj('hook',Crulley)) { "The hook replaces one of his hands."; } print "The pirate's unsavory face is crisscrossed with scars, and those not from shaving nicks, to judge by his scruffy beard. A hook replaces one of his hands at the end of a torn black sleeve", (string) Dot_newline_str; rtrue; ]; [ Crulley_breaks_into_cabin_daemon ; print (string) Spacing_str; if ((~~Crulley_knocked_out_cnt) && Crulley hasnt visited) { QueueInterrupt(JamisonRescuesYouTimer,2); ! not popped give Crulley visited; move Crulley to Cabin; QueueInterrupt(Crulley_breaks_into_cabin_daemon,65535); ! not popped give door general_2; print "Crash! You whirl around to see"; Cast_with_the(door); ! not popped print " shatter, kicked by a hulking man, his twisted visage blackened with soot and blood. "; } else if (Crulley_knocked_out_cnt == 1) { print "The pirate stumbles, dizzy. "; } if (Crulley_knocked_out_cnt == 2) { give Crulley general_1; print (string) Crulley_collapses_str, (string) Dot_newline_str; } else { Crulley_threatens_you(); ! not popped } ++Crulley_alone_with_you_timer; return Crulley_alone_with_you_timer; ]; [ Crulley_threatens_you ; print '"', (string) Crulley_threats-->Crulley_alone_with_you_timer, ",~ "; if (Crulley_knocked_out_cnt == 1) { print "slurs"; } else { print "sniggers"; } print " the pirate"; if (Crulley_alone_with_you_timer == 1) { print ". His breath is heavy with rum"; } else if (60 >= random(100)) { print ", advancing toward you"; } print (string) Dot_newline_str; rtrue; ]; [ Overhear_crulleys_plot_timer ; if (location ~= Crews_Quarters) rfalse; Crulley_plot_overheard = true; give anchor general_2; give lever general_2; QueueInterrupt(Catch_glimpse_of_Crulley,20); ! not popped QueueInterrupt(Ship_draws_closer_to_shore_timer,10); ! not popped print (string) Spacing_str, "~I gotta let"; Cast_with_the(Lafond); ! not popped print " know 'e's comin'.~"; Cast_with_the(Crulley); ! not popped print " stands on deck above, talking to himself, his voice floating down through"; Article(grate); ! not popped print " in"; Cast_with_the(ceiling); ! not popped print ". ~First, I do in the mates aboard-ship, with this and t'other mischief,~ he grunts, and you hear a snapping noise, like a taut rope being cut. ~Now to warn the boss and collect me pay. Off I go, har.~ He dives into"; return Cast_with_the_and_print_dots(sea); ]; [ Catch_glimpse_of_Crulley ; if (OnShipP(location) && (~~UnderDecksP(location))) { print (string) Spacing_str, "Your eyes are drawn to a flicker of light off the sea. Squinting, you see a man swimming to shore, moonlight flashing off his hook."; if (location == Poop or Quarterdeck or Main_Deck or Forecastle) { " A wisp of breeze brings an odor of onions and rum, and the occasional gargling chuckle, ~...mischief, har...reefs.~"; } new_line; rtrue; } return QueueInterrupt(Catch_glimpse_of_Crulley,3); ]; [ CrulleyInDungeonDaemon ; if (Crulley_alone_with_you_timer < 7) { print (string) Spacing_str, (name) Crulley; if (Crulley_alone_with_you_timer == 1) { print " steps leering out of the shadows and"; } print " cracks"; Cast_with_the(whip); ! not popped print " near you, hopping you towards the open ", (name) trapdoor, ". ~"; if (Knocked_Crulley_unconscious && Crulley_alone_with_you_timer == 1) { QueueInterrupt(QuestionExpireTimer,2); ! not popped Question_cnt = Q_COME_TO_HIT_CRULLEY_AGAIN; print "Come to hit me agin, are ye?"; } else { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped print (string) ComplexPickOne(Pirate_gender_discrimination_tbl); } print '"'; new_line; } else { print (string) Spacing_str, (name) Crulley, " snaps"; Cast_with_the(whip); ! not popped print " around your neck, jerking you sideways and down through"; Cast_with_the(trapdoor); ! not popped print '.'; JigsUp(The_fall_down_str); ! not popped } ++Crulley_alone_with_you_timer; return Crulley_alone_with_you_timer; ]; [ DuelWithCrulleyDaemon ; QueueInterrupt(DuelWithCrulleyDaemon,65535); ! not popped ++Crulley_alone_with_you_timer; if (Crulley_alone_with_you_timer == 10) { Have_encountered_crulley_in_dungeon = true; give Crulley ~attrib9; Unqueue(DuelWithCrulleyDaemon); ! not popped if (location ~= Dungeon) { give Crulley ~general_2; move Crulley to Dungeon; rfalse; } if (trapdoor hasnt open) { print (string) Spacing_str, "Roaring with anger,"; Cast_with_the(Crulley); ! not popped print " slaps"; Cast_with_the(trapdoor); ! not popped print " back on its hinges and"; } else { print (string) Spacing_str, (name) Crulley; } print " leaps out of"; Cast_with_the(well); ! not popped print ", seizing you."; return JigsUp(The_fall_down_str); } if (50 < random(100) || location ~= Dungeon) rfalse; print (string) Spacing_str, "Sounds of scraping hook against stone and curses echo out of"; Cast_with_the(well); ! not popped if (trapdoor hasnt open) { print ", muffled by"; Cast_with_the(trapdoor); ! not popped } print (string) Dot_newline_str; rtrue; ]; [ Whip_action ; if (action ~= ##Take) rfalse; print (name) Crulley, " snaps"; Cast_with_the(whip); ! not popped " near you. ~Get away wit' ye.~"; ]; [ Davis_action ; if (action == ##Destroy or ##Kick or ##Attack or ##Kiss) { (name) Davis, " dodges."; } if (action == ##Examine) { (name) Davis, " is ugly with fear."; } if (Davis ~= actor) rfalse; return DoesntHearYou(); ]; [ Cookie_action rarg local2 ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; print (string) Spacing_str; if (location == Galley) { print "An entirely bald man sits here, carving into his peg leg"; } else if (Cookie_attacking_alligator) { print "The pool is roily with the writhing bodies of"; Cast_with_the(Cookie); ! not popped print " and"; Cast_with_the(crocodile); ! not popped } else if (FindDaemon_or_Timer(Finale) && location == Beach) { if (Cookie has general_1) { print "Lucy cleans the sand from Quick's quiescent face, as Papa "; if (Lafond has general_1) { print "sneaks up the cliff stairs"; } else { print "stands nearby"; if (garter in your_father) { print ", holding"; Cast_with_the(garter); ! not popped } } } else { print (name) Cookie, ", Lucy and your father are moving towards"; Cast_with_the(skiff2); ! not popped } } else { print (name) Cookie, " chews anxiously at a cheroot"; } print '.'; rtrue; } if (Cookie == actor) { if (Cookie has general_1) { print (string) He_doesnt_respond_str; rtrue; } if (action == ##Browse) { "~I can't read! I'm a cook, not a gentleman!~"; } if (action == ##Hello) { print "~Hullo -- boy!~ He winks at you", (string) Dot_newline_str; rtrue; } if (action == ##Rescue or ##Help) { if (location == Galley) { print "~Eh? Don't be panicking. We'll be fine.~ He carves a smile into his leg", (string) Dot_newline_str; rtrue; } (name) Cookie, " grumbles, ~What d'ye think I'm trying to do!~"; } if (action == ##Fix && noun == dagger) { "~I never was able to sharpen that dagger.~"; } if (action == ##TellAbout && noun == yourself) { if (second == Captain_Jamison) { if (Captain_Jamison in pair_of_manacles) { print "~I'm tryin' to find him!~"; new_line; } else { print "~The Cap'n? I been with him since the war. Then came Lafond.~"; new_line; } } else if (second == Cookie) { print "~'Rodney Quick's me name, cookin's me game.^Lost me leg in sixty-eight, 'tis why I bake.^Losin' me hearin' in every fight, but I've got me sight --^And come our Good Lord's 1701, I'll lose me life to a ruffian's gun.'^-- Old dame told me that. Leastways, I've several years left.~"; new_line; } else if (second == Lafond) { print "~He murdered Cap'n's brother and family these three year'n past. Cap'n's been searching for a time to avenge the dead ones, and now he's found it.~"; new_line; } else if (second == Crulley) { print "~Don't trust 'im. Never 'ave.~"; new_line; } else { print (name) Cookie, " cocks an ear, ~Eh, what's that?~"; new_line; } return Clear_itbl(); } if (action == ##Give && noun == yourself && rapier in Cookie) { Perform(##Take,rapier); ! not popped rtrue; } if (action == ##ComeWith && noun == yourself) { print "~Foller you?"; if (location ~= Galley) { print " Anywheres"; } "!~"; } if (action == ##Take && noun == duelling_pistols && location == Parlour) { "~No, lass. A lady don't use guns, and I've no need for one.~"; } local2 = GenericLivingResponses(Cookie); if ((~~local2) || local2 == 8[Crulley?]) rfalse; rtrue; } if (action == ##Examine) { (name) Cookie, " is a grizzled old man with a peg-leg."; } if (action == ##TellAbout) { if (CheckIfWordUsedToIdentifyObj('gunpowder',supplies)) { "~Clam chowder? Never make it -- too fancy.~"; } if (second == reefs) { "~We dropped the sea anchor -- no need to fear.~"; } if (second == supplies) { "~Aye, you must mean the supplies in the hold. Yep, that's where we store them.~"; } if (second == fire or Hold) { "~Fire for the cold? I think it be too warm...~"; } if (second == fuse) { "~Lose sommat? I be always losing things. Think there be thieves aboard.~"; } if (second ~= Captain_Jamison) rfalse; if (Cookie_attacking_alligator) { return DoesntHearYou(); } if (Ultimately_InP(Captain_Jamison,Dungeon)) { print "~Well, show me, lass!~ he grumbles", (string) Dot_newline_str; rtrue; } print "~He's a fine man, is Cap'n,~ he smiles", (string) Dot_newline_str; rtrue; } if (action == ##Kiss) { "~Nah, me pretty, ye belong to Cap'n.~"; } if (action == ##Give && noun == banknote) { print "~I hain't no need fer that kind of money,~ he waves away your offer", (string) Dot_newline_str; rtrue; } if (action ~= ##Slice or ##Destroy or ##Attack) rfalse; if (Cookie has general_1) { return UnladylikeToHitWhenDown(); } "He holds you off, ~'Ere now, there's no call for that!~"; ]; [ CookieFindsYou_timer called_explicitly ; if (called_explicitly) { Cookie_hasnt_found_you_yet = false; Person_to_refuse = Cookie; Question_cnt = Q_ANY_IDEA_WHERE_TO_LOOK; QueueInterrupt(QuestionExpireTimer,2); ! not popped QueueInterrupt(CookieFindsYou_timer,(Clock_wait ? 1 : 2)); ! not popped move Cookie to location; give Cookie general_2; Crulley_alone_with_you_timer = 0; print (string) Spacing_str, (name) Cookie, " rushes up to you, looking worried. ~Miss, we must find the Cap'n. Have ye any idea where to look?~"; new_line; } else if (Cookie notin location) { Unqueue(CookieFindsYou_timer); ! not popped } else if (Assorted_situations_FIGURE_OUT_LATER == 1 || action == ##Go) { print (string) Spacing_str, (name) Cookie, " grins broadly, ~I knew we could depend on you, lass. Lead on!~"; new_line; } else if (Crulley_alone_with_you_timer == 2) { move Cookie to Library; if (Assorted_situations_FIGURE_OUT_LATER == 65535) { print (string) Spacing_str, "~Hell and damnation, I was afraid of that"; } else { print (string) Spacing_str, "He harrumphs. ~So ye do not care fer him after all"; } print "!~ ", (name) Cookie, " orders the men to search, moving off himself.^"; } else { Person_to_refuse = Cookie; Question_cnt = Q_ANY_IDEA_WHERE_TO_LOOK; QueueInterrupt(QuestionExpireTimer,2); ! not popped QueueInterrupt(CookieFindsYou_timer,1); ! not popped print (string) Spacing_str, (name) Cookie, " urges you, ~Think agin. Any idea?~"; new_line; } ++Crulley_alone_with_you_timer; return Crulley_alone_with_you_timer; ]; [ Pirate_action ; if (pirate == actor) { if (action == ##Hello) { print "He grins at you toothlessly", (string) Dot_newline_str; } else { if (Jamisons_men_have_attacked && action == ##Find or ##Where && noun == Captain_Jamison or Cookie) { Perform(##TellAbout,yourself,noun); ! not popped rtrue; } if (action == ##TellAbout && noun == yourself) { if (Jamisons_men_have_attacked && second == Captain_Jamison or Cookie) { if (second == Cookie) { print "~'E went"; } else { print "~Cookie be"; } print " a-lookin' for Cap'n.~"; new_line; } else if (second == Lafond) { print "~'E be an evil man, I do hear.~"; new_line; } else { DoesntHearYou(); ! not popped } } else { print "~I'm busy. Do it yerself, boy.~ He cuffs you aside."; new_line; } } return Clear_itbl(); } if (action ~= ##Examine) rfalse; print (name) Captain_Jamison, "'s crew are a ragged, toothless bunch, all sporting jagged scars. Despite their abhorrent appearances, they call friendlily to each other", (string) Dot_newline_str; rtrue; ]; [ Lucy_action rarg ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; if (location ~= Kitchen) rfalse; print (string) Spacing_str; if (Lucy has visited) { print (name) Lucy; } else { print "A blond woman"; } if (FindDaemon(Lucy_gives_garter)) { print " stands talking to you"; } else { print " huddles alone by the fire, as if cold"; } print '.'; rtrue; } if (Lucy == actor) { if (action == ##TellAbout && noun == yourself) { if (CheckIfWordUsedToIdentifyObj('library',mansion)) { print "~I ain't allowed in that wing of"; Cast_with_the_and_print_dots(mansion); ! not popped } else if (second == Lafond) { print "~He's a regular lout who don't like my cooking.~"; new_line; } else { DoesntHearYou(); ! not popped } return Clear_itbl(); } if (action == ##Hello) { print "She smiles", (string) Dot_newline_str; rtrue; } if (action == ##Kiss && noun == yourself) { "~I hardly know you!~ she gasps."; } rarg = GenericLivingResponses(Lucy); if ((~~rarg) || rarg == invalidEnum8) rfalse; rtrue; } if (action == ##TellAbout && second == your_father) { if (your_father has visited) { "~Yes, he told me.~"; } Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped "She yelps, ~Dear Dimsy, how can I save him?~"; } if (action == ##Give) { if (noun == garter && garter hasnt concealed) { (name) Lucy, " frowns. ~No, you silly boy! Give that to Dimsford!~"; } if (noun ~= banknote) rfalse; (name) Lucy, " slaps you hard across the face. ~I'm not that sort of girl!~"; } if (action == ##Listen) { if (FindDaemon(Lucy_gives_garter)) { "You are listening to her!"; } print "She talks a lot, but doesn't say much", (string) Dot_newline_str; rtrue; } if (action == ##AskPerson && second == garter) { Perform(##Take,garter); ! not popped rtrue; } if (action ~= ##Examine) rfalse; print "Lucy is a very pretty woman, a few years your senior, her yellow hair neatly arranged. She wears a cook's apron", (string) Dot_newline_str; rtrue; ]; [ Lucy_gives_garter ; give garter ~concealed; SetPronoun(garter); ! not popped print (string) Spacing_str, "~I haven't found Lafond's papers, I'm watched too closely. Tell Dimsford that I -- I'm scared, and I want him to come get me. Give this to him -- he'll recognize it.~ Lucy slides"; Article(garter); ! not popped print " down her leg and holds it out to you", (string) Dot_newline_str; rtrue; ]; [ Lucy_and_Father_leave_forest_timer ; give Forest ~general_3; rtrue; ]; [ Butler_action rarg local2 ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; print (string) Spacing_str; Cast_with_capital_The(butler); ! not popped if (butler hasnt general_1) { print " stands near the entrance to "; if (location == Foyer) { print "the ballroom"; } else { print "the hallway"; } } else { print " lies on the floor, prone and snoring loudly"; } print '.'; rtrue; } if (butler == actor) { if (butler has general_1) { print (string) He_doesnt_respond_str; rtrue; } if (action == ##Hello) { print "He bows", (string) Dot_newline_str; rtrue; } if (action == ##Take && noun == blue_goblet or banknote or invitation or green_goblet) { actor = player; Perform(##Give,noun,butler); ! not popped actor = butler; rtrue; } if (action == ##TellAbout && noun == yourself && second == Lafond) { if (FindDaemon_or_Timer(LafondRequestsPresenceDaemon) || ornate_door hasnt locked) { if (location == Lafonds_Bedroom) { "~He's gone for water, Miss.~"; } print "~He's awaiting you now, Miss. In his room.~"; new_line; move Lafond to Lafonds_Bedroom; rtrue; } if (Current_dancing_partner == Lafond) { "~He has retired to his room, and requests not to be disturbed.~"; } "~The governor is in the ballroom, Miss.~"; } rarg = GenericLivingResponses(butler); if ((~~rarg) || rarg == invalidEnum8) rfalse; rtrue; } if (action == ##Examine) { Cast_with_capital_The(butler); ! not popped print ", scarred and burly, looks uncomfortable in his formal blacks, as if he'd prefer the rags of a pirate"; if (butler has general_1) { print ". He lies snoring on the floor"; } print (string) Dot_newline_str; rtrue; } if (butler has general_1) { if (action == ##Search) { print (string) Reveals_nothing_str; rtrue; } if (action == ##Hello or ##AskAbout or ##Tell) rfalse; print (string) He_doesnt_respond_str; rtrue; } if (action == ##Show or ##Give) { if (noun == banknote or invitation) { return ShowInvitationOrBribeButler(noun); } if (noun ~= green_goblet or blue_goblet) rfalse; print "He looks pleased"; if (noun.number == 0 or 2) { ", then disappointed. ~There's no wine in that glass, Ma'am.~"; } if (noun.number == 3) { Person_who_drank_drugged_wine = butler; QueueInterrupt(DruggedWineEffectsDaemon,2); ! not popped } move noun to butler; noun.number = 0; print ". ~I am rather parched, Ma'am,~ he says, taking and emptying"; return Cast_with_the_and_print_dots(noun); } if (P_initial_word ~= 'tip') rfalse; if (Ultimately_InP(banknote)) { return ShowInvitationOrBribeButler(banknote); } "You have nothing to do that with."; ]; [ ButlerDaemon called_by_daemon ; ++Butler_cnt; if (called_by_daemon) { QueueInterrupt(ButlerDaemon,2); ! not popped } else { QueueInterrupt(ButlerDaemon,65535); ! not popped } if (location ~= Foyer) { Butler_waiting_for_invitation = false; Unqueue(ButlerDaemon); ! not popped rfalse; } if (beautiful_ball_gown hasnt worn) rfalse; if (~~called_by_daemon) { print (string) Spacing_str, '"'; } if (Butler_cnt == 3) { Unqueue(ButlerDaemon); ! not popped give butler general_2; print (string) Have_to_str, "hope to be invited to the next party,~ smirks"; Cast_with_the(butler); ! not popped print (string) Push_you_str; new_line; return Goto(Main_Entrance); } print "Your invitation, Miss?~ says"; Cast_with_the(butler); ! not popped if (Butler_cnt == 4) { print " snapping his fingers"; } else { print " bowing"; } print (string) Dot_newline_str; rtrue; ]; [ ShowInvitationOrBribeButler obj ; move obj to butler; if (butler has attrib12) { print "He takes"; Cast_with_the(obj); ! not popped print " and bows. ~Thank you, Miss"; if (obj == invitation) { print " Davis"; } ".~"; } give butler attrib12; give butler ~general_2; Unqueue(ButlerDaemon); ! not popped ++score; Cast_with_capital_The(butler); ! not popped print " takes"; Cast_with_the(obj); ! not popped if (obj == banknote) { print " and secrets it away"; } print ". ~Enjoy the dance, Miss"; if (obj == invitation) { print " Davis"; } ".~"; ]; [ Dancer_action ; if (dancer == actor) { if (Jamisons_men_have_attacked) { Cast_with_capital_The(dancer); ! not popped " looks away, terrified."; } if (action == ##Hello) { print "A dancer smiles nervously and looks away", (string) Dot_newline_str; rtrue; } if (action ~= ##TellAbout || noun ~= yourself) rfalse; if (second == Lafond) { print "~He's such a good host! I've never been to such a fine party! I'm so glad he is our governor.~ You have never seen anyone so nervous before", (string) Dot_newline_str; } else { print "Nobody seems inclined to chat with you", (string) Dot_newline_str; } return Clear_itbl(); } if (action == ##Dance || (action == ##AskPerson && second == Ballroom)) { "A man regretfully shakes his head. ~We haven't been introduced by the governor.~"; } if (action == ##AskPerson && second == Ballroom) { Perform(##Dance,dancer); ! not popped rtrue; } if (action ~= ##Examine) rfalse; Cast_with_capital_The(dancer); ! not popped print "s are dressed in powdered wigs and heavy jewels. All seem paler than fashion and the tropics would decree, and rather nervous", (string) Dot_newline_str; rtrue; ]; [ Your_father_action rarg ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; print (string) Spacing_str, "Your father calmly stands nearby."; rtrue; } if (your_father == actor) { if (action == ##TellAbout && noun == yourself) { if (second == garter) { print "~That belongs to -- a friend.~"; new_line; } else { print "~My dear,~ he says rather impatiently, ~There are people waiting for our help -- I haven't time to answer your questions just now.~"; new_line; } return Clear_itbl(); } if (action == ##ILove) { if (second == your_eyes) { print (string) Kisses_forehead_str; rtrue; } if (second == Captain_Jamison) { "~I hoped you would,~ he smiles."; } if (second == Lafond) { "~My poor doomed daughter!~"; } return DoesntHearYou(); } if (action == ##ComeWith && noun == yourself) { "~Lead on, daughter!~"; } if (action == ##Hello) { print (string) Kisses_forehead_str; rtrue; } rarg = GenericLivingResponses(your_father); if ((~~rarg) || rarg == invalidEnum8) rfalse; rtrue; } if (action == ##AskPerson && second == garter) { Perform(##Take,garter); ! not popped rtrue; } if (action == ##TellAbout) { if (second == Lucy) { "He listens intently, and laughs, ~What a delightful girl she is, to be sure!~"; } if (second ~= Captain_Jamison) rfalse; if (FindDaemon(DescribeSituationToDad)) { Unqueue(DescribeSituationToDad); ! not popped return DescribeSituationToDad(true); } Question_cnt = Q_DO_YOU_LIKE_JAMISON; QueueInterrupt(QuestionExpireTimer,2); ! not popped print "~So you like him?~ he asks, smiling", (string) Dot_newline_str; rtrue; } if (action == ##Show or ##Give) { if (noun == banknote) { remove banknote; print "~Do not stain yourself with that dirty money,~ he takes"; Cast_with_the(banknote); ! not popped print " and rips it up", (string) Dot_newline_str; rtrue; } if (noun ~= garter) rfalse; "He smiles dreamily at a memory."; } if (action ~= ##Examine) rfalse; print "Prison has only added a peppery beard to your father's handsome features. His green eyes still twinkle, his wrists still poke bonily out of his shirt cuffs", (string) Dot_newline_str; rtrue; ]; [ DescribeSituationToDad spacep ; if (~~spacep) { print (string) Spacing_str; } "You briefly explain the current situation to your father.^ ~I knew Falcon would do his best to rescue me, once you were safe,~ he responds. ~Now to rescue Lucy -- Nicholas will have told you about her. You get him while I get Lucy, and the four of us will meet down at the beach. Just show me the way out of this maze, and we'll get started.~"; ]; [ Lafond_action rarg ; if (rarg) { if (rarg == (M_HANDLED|invalidEnum8)) rtrue; print (string) Spacing_str, (name) Lafond; if (Lafond has general_2) { print ", his wig awry, sprawls across the parquet floor."; rtrue; } if (Lafond has general_1) { print " is slumped in the sand, dead."; rtrue; } if (location == Beach) { print " stands", (string) Halfway_up_str; rtrue; } print " is leering, lip curled."; rtrue; } if (Lafond == actor) { if (FindDaemon(TheDuelDaemon) || FindDaemon(Finale) && Lafond hasnt general_1) { "He ignores you."; } if (action == ##TellAbout && noun == yourself && second == gold_ring) { actor = player; Perform(##Take,gold_ring); ! not popped actor = Lafond; rtrue; } rarg = GenericLivingResponses(Lafond); if ((~~rarg) || rarg == invalidEnum8) rfalse; rtrue; } if (action == ##Pour && noun == quantity_of_wine && Lafond hasnt general_1) { return JigsUpWorseThanDeath(Lafond_smacks_you_str); } if (action == ##Dance && location == Ballroom) { if (Dancer_requesting_dance == Lafond) { print "You pace out the steps.^"; rtrue; } if (~~FindDaemon(LafondDanceDaemon)) rfalse; print "You curtsey and walk to", " the dance floor", (string) Dot_newline_str; Assorted_situations_FIGURE_OUT_LATER = 1; return Assorted_situations_FIGURE_OUT_LATER; } if (action == ##Kick or ##Bite or ##Attack) { if (Lafond has general_2) { return UnladylikeToHitWhenDown(); } if (location == Ballroom) { Question_cnt = Q_RHETORICAL_QUESTION; QueueInterrupt(QuestionExpireTimer,2); ! not popped (string) Lafond_grabs_hair_str, (string) The_ballroom_is_str, "whirling blur through your tears as he leads you around the floor. ~Ma petite, a ball is not the right place to kill me. What would my guests think?!~"; } if (~~Lafond_has_forced_kiss) { Lafond_has_forced_kiss = true; print (string) Lafond_grabs_hair_str, "Twisting your wrist, pain stabbing down your arm, he forces his mouth on yours, hard, thrusting, cutting your lips. He releases you"; if (second && second ~= your_reticule && second hasnt worn) { move second to Lafond; print ", taking"; Cast_second_with_the(); ! not popped } ". ~Let that be a warning to you, my love.~"; } return JigsUp("Lafond hits you back. The end is not sweet and not fast."); } if (action == ##Touch && Lafond hasnt general_1) { "He smiles."; } if (action == ##Give && noun == green_goblet or blue_goblet) { if (blue_goblet in Lafond || green_goblet in Lafond) { "~I already have a glass, thank you.~"; } move noun to Lafond; print "He takes"; return Cast_with_the_and_print_dots(noun); } if (action == ##Kiss) { if (location == Lafonds_Bedroom) { if (Lafond_seduction_cnt > 10) { "Queasy, you turn up your face to be kissed. His lips are cold, dry."; } "He laughs. ~Not yet, petite.~"; } print "You shudder at the thought", (string) Dot_newline_str; rtrue; } if (action ~= ##Examine) rfalse; if (FindDaemon(LafondSeductionDaemon) && Lafond_seduction_cnt > 11) { print "You turn away in modesty after a brief glimpse of pasty pink flesh", (string) Dot_newline_str; rtrue; } if (Lafond has general_2) { print (name) Lafond, ", his wig awry, sprawls across the parquet floor."; new_line; rtrue; } if (Jamisons_men_have_attacked || (FindDaemon(LafondSeductionDaemon) && Lafond_seduction_cnt > 4)) { print "Lafond is dressed in a rich brocade robe", (string) Dot_newline_str; rtrue; } print "Wigged in dark brown curls, dressed in velvets and brocade, he is warmly attractive. Until you meet his eyes, stone gray and cold", (string) Dot_newline_str; rtrue; ]; [ Gold_ring.action ; if (CheckIfWordUsedToIdentifyObj('latin',gold_ring) || CheckIfWordUsedToIdentifyObj('latin',new_ring) || action == ##Browse) { return WellBred(61963["The stud..."?]); } if (action == ##Examine) { if (noun == gold_ring) { print "It's an ancient gold band, with"; } else { print "Made of copper,"; Cast_with_the(new_ring); ! not popped print " has"; } print " a curious design of gargoyles, curled tongues extended, on its flat face, with ~Sal Sapit Omnia~ engraved at the bottom", (string) Dot_newline_str; rtrue; } if (action ~= ##Take) rfalse; if (noun == gold_ring && gold_ring in Lafond) { if (Lafond has general_2) { print (name) Lafond, "'s fingers are curled tight in a fist. You cannot get it", (string) Dot_newline_str; rtrue; } "~It is an impressive crest, no? I've thought of making it my own.~"; } if (Captain_Jamison has general_1) { return NoTimeFor("steal jewelry"); } print (name) Captain_Jamison, " curls his fist around it. ~This is "; if (new_ring in Captain_Jamison) { print "a copy of "; } "the family ring lost with my brother.~"; ]; [ Referred_to_ring ; return new_ring; ]; [ GenericLivingResponses who ; if (action == ##Help) { if (who == Lafond) { "He snickers, ~So I shall, petite.~"; } if (who == Crulley) { "~An' what'll I get fer it?~ he says, eying your body."; } "~I'm doing all I can.~"; } if (action == ##Kiss && noun == yourself) { actor = player; Perform(##Kiss,who); ! not popped actor = who; rtrue; } if (action == ##Go) { "~After you!~"; } if (action == ##ComeWith && noun == yourself) { "~Anywhere!~"; } if (action == ##Hello) { "~Hello!~"; } if (action == ##What) { Perform(##TellAbout,yourself,noun); ! not popped rtrue; } if (action == ##Give && second == yourself) { actor = player; Perform(##AskPerson,who,noun); ! not popped actor = who; rtrue; } if (action == ##FeedWith) { return 8[Crulley?]; } if (action == ##No or ##Nod) { actor = player; ReversePerform(); ! not popped actor = who; rtrue; } DoesntHearYou(); ! not popped if (action == ##Drink) { Assorted_situations_FIGURE_OUT_LATER = 65535; } Clear_itbl(); ! not popped rtrue; ]; [ LafondDanceDaemon ; if (location ~= Ballroom) { return Unqueue(LafondDanceDaemon); } if (Lafond_seduction_cnt == 1) { move Lafond to location; QueueInterrupt(LafondDanceDaemon,65535); ! not popped Question_cnt = Q_WILL_YOU_DANCE_WITH_LAFOND; QueueInterrupt(QuestionExpireTimer,2); ! not popped Person_to_refuse = Lafond; Current_dancing_partner = Lafond; print (string) Spacing_str, "A fashionably bewigged man stalks up to you and bows deeply. ~Will you dance?~ he asks, with a light French accent. ~Not that you have much choice. If you turn me down,"; Cast_with_the(your_father); ! not popped print " dies.~"; new_line; } else if (Lafond_seduction_cnt == 2) { if (Assorted_situations_FIGURE_OUT_LATER == 1) { Dancer_requesting_dance = Lafond; ++Lafond_seduction_cnt; print (string) Spacing_str, "~I am, of course, Lafond.~ ", (string) Laughs_and_dances_str; } else { Person_to_refuse = Lafond; Question_cnt = Q_WILL_YOU_DANCE_WITH_LAFOND; QueueInterrupt(QuestionExpireTimer,2); ! not popped print (string) Spacing_str, "The man's smile hardens. ~You have"; Cast_with_the(your_father); ! not popped print "'s eyes. I am Lafond -- I have recently become intimate with that gentleman.~ He slightly stresses the word ~intimate.~^ ~Now, tell me 'yes.' And remember, I am a man of my word.~"; new_line; } } else if (Lafond_seduction_cnt == 3) { if (Assorted_situations_FIGURE_OUT_LATER == 65535 or 0) { Unqueue(LafondDanceDaemon); ! not popped QueueInterrupt(LafondOrdersPapasDeathTimer,2); ! not popped print (string) Spacing_str, "~A mistake, ma petite.~ Lafond gestures to a shadowy figure, who disappears into the east wing. ~Say adieu to your dear Papa.~"; new_line; } else { Dancer_requesting_dance = Lafond; print (string) Laughs_and_dances_str; } } else if (Lafond_seduction_cnt == 4) { QueueInterrupt(LafondDanceDaemon,65535); ! not popped print (string) Spacing_str, "~So you know I am not your father's friend,~ Lafond says, offering a hand for the promenade. ~Unfortunately, you are in my power, "; if (Jamison_imprisoned) { print "the Falcon is with my dragoons"; } else { print "he is in my dungeon"; } print " and I am still King of these waters.~ A gold ring flashes on his hand. It seems vaguely familiar", (string) Dot_newline_str; } else { if (Lafond_seduction_cnt ~= 5) rfalse; if (your_father has visited) { if (~~Jamison_imprisoned) { QueueInterrupt(DragoonsSeizeJamison,3); ! not popped } QueueInterrupt(LafondRequestsPresenceDaemon,5); ! not popped } ++score; Unqueue(LafondDanceDaemon); ! not popped remove Lafond; Dancer_requesting_dance = nothing; print (string) Spacing_str, (name) Lafond, "'s eyes rake your body. ~When I am ready,"; Cast_with_the(butler); ! not popped print " will summon you to sup with me in my room"; if (your_father hasnt visited) { print "; it may be some time"; } print ". We will find much in common before dawn, I am sure. Then I may free your "; if (Jamison_imprisoned) { print "lover"; } else { print "father"; } print ".~"; Cast_with_the(Lafond); ! not popped print " bows as the dance ends, and kisses ", (name) your_hand, ". "; if (your_father hasnt visited) { print "He cocks his head, curious, ~You have far less spirit than"; Cast_with_the(your_father); ! not popped print " credited you. He swore you would have him freed in no time at all. A pity, I prefer doyennes with mettle.~ "; } print "He moves to speak with"; Cast_with_the(butler); ! not popped print ", then "; if (FindDaemon_or_Timer(LafondRequestsPresenceDaemon)) { print "heads upstairs."; } else { print "drifts into the crowd."; } new_line; } ++Lafond_seduction_cnt; return Lafond_seduction_cnt; ]; [ LafondSeductionDaemon ; Question_cnt = Q_DENY_LAFOND; QueueInterrupt(QuestionExpireTimer,1); ! not popped print (string) Spacing_str; if (Lafond_seduction_cnt == 1) { move Lafond to location; move blue_goblet to player; blue_goblet.number = 1; move green_goblet to Lafond; move flagon to table; give ornate_door ~open; QueueInterrupt(DrinkWineDaemon,1); ! not popped print "~Have some wine.~ Lafond pours wine into two glasses, giving a blue one to you. ~Drink this down. We have a long night ahead of us.~ He drains his own", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 2) { move green_goblet to table; move butler to Upstairs_Hall2; move Captain_Jamison to pair_of_manacles; give Captain_Jamison general_1; give Captain_Jamison attrib9; give trapdoor open; give portrait ~open; give knob ~general_3; give book ~general_3; move rapier to Dungeon; give rapier ~attrib9; give pair_of_manacles ~open; give pair_of_manacles locked; give Crulley attrib9; move Crulley to Dungeon; move whip to Crulley; QueueInterrupt(LafondSeductionDaemon,65535); ! not popped give flagon ~trytakebit; Lafond_in_bedroom = false; print "Suddenly, the door slams open. It is Jamison, coatless, sword bared, his shirt ripped. ~Thank God I am not too late. Leave, darling, before I skewer this dog to his bedposts,~ he cries. The scar on his cheek gleams coldly.^ With a yell,"; Cast_with_the(Crulley); ! not popped print " and"; Cast_with_the(butler); ! not popped print " jump out of the darkness behind him. Nicholas struggles, but soon lies unconscious on the floor.^ ~Take him to the dungeon,~ Lafond says, setting down his glass. ~You, butler, stay nearby. I do not wish to be disturbed again.^ ~Now that we are rid of that intrusion, cherie, I will change into something more comfortable. Pour me more wine.~ He crosses to the wardrobe removing his coat and vest, turned slightly away from you", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 3) { print "~In private, call me Jean, or whatever endearment you choose, once I have approved it.~ Lafond is looking into the wardrobe", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 4) { move silver_tray to table; Cast_with_capital_The(butler); ! not popped print " enters, laying"; Article(silver_tray); ! not popped print " of ", (name) cold_chicken, " on"; Cast_with_the(table); ! not popped print ". ~The kitchen wench has gone, your grace. I took the liberty of fetching these myself.~ He bows and leaves the room.^ ~Sprinkle some spices on the fowl, ma petite,~ Lafond says, donning a long brocade robe, his back to you. ~They are hot, but delicious.~"; new_line; } else if (Lafond_seduction_cnt == 5) { print "~Tsk. The cook has gone too far. She shall be 'leaving us' tomorrow.~ Lafond adjusts the lace at his neck", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 6) { Person_to_refuse = Lafond; Lafond_in_bedroom = true; print (name) Lafond, " strolls to"; if (parent(green_goblet) == table) { Cast_with_the(table); ! not popped } else { print " you,"; } print " smiling slyly"; if (blue_goblet.number == 2 or 0 || green_goblet.number == 2 or 0) { print ". ~But you haven't finished pouring the wine.~ He tops off both glasses"; if (blue_goblet.number == 2 or 0) { FillGobletWithWine(blue_goblet,true); ! not popped } if (green_goblet.number == 2 or 0) { FillGobletWithWine(green_goblet,true); ! not popped } } if (Lafond_saw_the_drug) { print ". ~Which glass was mine? I seem to have forgotten.~ He points at"; Cast_with_the(green_goblet); ! not popped print " and smiles in a way that does not grant you confidence. ~Is this it?~"; new_line; } else { ++Lafond_seduction_cnt; print ".^ Lafond takes"; Cast_with_the(green_goblet); ! not popped print " and salutes you, gulping down the contents", (string) Dot_newline_str; } } else if (Lafond_seduction_cnt == 7) { Person_to_refuse = Lafond; print "~Ah yes, of course.~ Lafond obligingly takes"; if (Lafond_saw_the_drug) { if (Assorted_situations_FIGURE_OUT_LATER == 1) { SwitchDruggedGoblet(green_goblet); ! not popped } else if (Assorted_situations_FIGURE_OUT_LATER == 65535) { SwitchDruggedGoblet(blue_goblet); ! not popped } else { if (blue_goblet.number > 1 && green_goblet.number == 1) { SwitchDruggedGoblet(blue_goblet); ! not popped } else { SwitchDruggedGoblet(green_goblet); ! not popped } print (string) Shrugging_off_str; } } print (string) Dot_newline_str, (string) Spacing_str; Unqueue(LafondSeductionDaemon); ! not popped QueueInterrupt(DrinkWineDaemon,1); ! not popped print "He inhales deeply of the bouquet of his wine, then turns to you. ~You must think me very naive to fall for such a trick. I saw you pour something into one of these glasses -- although "; if (Tried_to_hide_scent_with_spices_ORPHANED) { print "you have tried to cover the scent with"; Cast_with_the(spices); ! not popped } else { print "I cannot smell it"; } print ".~ He switches goblets, setting"; Cast_with_the(Your_goblet); ! not popped print " into your nerveless grasp and taking up the other, smiling evilly. ~Now you will drink from the cup intended for me.~"; new_line; } else if (Lafond_seduction_cnt == 8) { QueueInterrupt(LafondSeductionDaemon,65535); ! not popped print (name) Lafond, " draws near, whispering indecencies. He caresses your lily white neck, his fingers ice-cold despite the tropic heat", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 9) { DropAll(player,Lafonds_Bedroom); ! not popped print (name) Lafond, " slides his hand up your neck and into your hair, letting it fall down your back in thick waves and tresses. He lays everything you carry on the floor", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 10) { print "One by one Lafond undoes your buttons. He pulls open your "; if (shirt has worn) { print "shirt"; } else if (beautiful_ball_gown has worn || cotton_frock has worn) { print "bodice"; } else { print "chemise"; } StripDown(); ! not popped give linen_chemise ~worn; give linen_chemise general_3; give your_kid_slippers ~worn; DropAll(player,Lafonds_Bedroom); ! not popped move your_reticule to Lafonds_Bedroom; DropAll(Lafond,Lafonds_Bedroom); ! not popped print ". Your clothes float to the floor", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 11) { print (name) Lafond, " runs his fingers down your naked spine, and compliments your body. He removes his dressing gown", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 12) { print (name) Lafond, " kisses your shoulder, your neck, your ear. ~Close your eyes, if you will,~ he taunts, ~and pretend I am your dearest"; Cast_with_the(Captain_Jamison); ! not popped print ". But I am greater than he will ever be.~ He kisses you, his lips thin and cold", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 13) { if (player in bed4) { Lafond_seduction_cnt = 14; LafondSeductionDaemon(); ! not popped } else { move Lafond to bed4; move player to bed4; print (name) Lafond, " leads you over to the bed", (string) Dot_newline_str; } } else if (Lafond_seduction_cnt == 14) { JigsUpWorseThanDeath("Lafond pulls the sheets up to cover you both, pressing his long flaccid body against yours. Waves crash against the base of the cliff."); ! not popped } ++Lafond_seduction_cnt; return Lafond_seduction_cnt; ]; [ SwitchDruggedGoblet drugged_one ; if (drugged_one == green_goblet) { Lafonds_goblet = blue_goblet; Your_goblet = green_goblet; } else { Lafonds_goblet = green_goblet; Your_goblet = blue_goblet; } move Your_goblet to player; move Lafonds_goblet to Lafond; return Cast_with_the(drugged_one); ]; [ DrinkWineDaemon second_time ; if (Lafond_seduction_cnt > 7) { second_time = true; } ++Waiting_for_you_to_drink_wine_cnt; Person_to_refuse = Lafond; Question_cnt = Q_DENY_LAFOND; QueueInterrupt(QuestionExpireTimer,2); ! not popped print (string) Spacing_str; if (Assorted_situations_FIGURE_OUT_LATER ~= 65535 && (noun == Your_goblet && action == ##DrinkFrom || (noun == quantity_of_wine && (action == ##DrinkFrom or ##Drink or ##Eat || (action == ##Pour && second == yourself or your_mouth))))) { Your_goblet.number = 0; print "~Good girl,~ he says"; if (second_time) { print ". "; return LafondDrinksWine(); } print ", ~Let's see more cooperation of this sort.~"; new_line; return LafondSeductionDaemon(); } if (Waiting_for_you_to_drink_wine_cnt > 2) { QueueInterrupt(LafondSeductionDaemon,1); ! not popped if (second_time) { print "Lafond grows suddenly violent. ~I will not have insubordination. You shall cooperate, minx.~ He forces"; Cast_with_the(quantity_of_wine); ! not popped print " down your throat", (string) Dot_newline_str; if (Your_goblet.number > 1 && (~~FindDaemon_or_Timer(I_am_drugged_daemon))) { QueueInterrupt(I_am_drugged_daemon,2); ! not popped } Your_goblet.number = 0; print (string) Spacing_str; return LafondDrinksWine(); } move Your_goblet to table; Your_goblet.number = 0; print "He angrily takes"; Cast_with_the(Your_goblet); ! not popped print " and sets it on"; Cast_with_the(table); ! not popped print ". "; Cast_with_capital_The(quantity_of_wine); ! not popped " slops a dark stain across the lace. ~Do not try my patience, little one. I have those you love, remember.~"; } QueueInterrupt(DrinkWineDaemon,1); ! not popped if (Waiting_for_you_to_drink_wine_cnt == 1) { print (name) Lafond, " waits impatiently for you to drink", (string) Dot_newline_str; rtrue; } if (Waiting_for_you_to_drink_wine_cnt ~= 2) rfalse; print "~Drink. We must not waste all night.~"; Cast_with_the(Lafond); ! not popped print " pushes the glass toward ", (name) your_mouth, (string) Dot_newline_str; rtrue; ]; [ LafondDrinksWine ; if (Lafonds_goblet.number > 1) { Person_who_drank_drugged_wine = butler; QueueInterrupt(DruggedWineEffectsDaemon,1); ! not popped } Lafonds_goblet.number = 0; Laudenum_left = 0; QueueInterrupt(LafondSeductionDaemon,1); ! not popped if (Meta_Loc(leather_bottle) == location) { remove leather_bottle; print "Lafond takes"; Cast_with_the(leather_bottle); ! not popped print " and drops it out the window. ~You shall not need this. You may suffer no headaches in my employ.~"; new_line; print (string) Spacing_str; } print "He lifts his glass to drink, but stops. ~Your father, for all his idiotic meddling in other people's business, is not a fool. I doubt you are, either.~ He calls in"; Cast_with_the(butler); ! not popped print ", ordering him to empty"; Cast_with_the(Lafonds_goblet); ! not popped print ". The man reports no odd taste and returns to his post", (string) Dot_newline_str; rtrue; ]; [ LafondRequestsPresenceDaemon ; give ornate_door ~locked; move Lafond to Lafonds_Bedroom; if (location == Library) { if (your_father in location) { QueueInterrupt(LafondRequestsPresenceDaemon,2); ! not popped rtrue; } print (string) Spacing_str; Cast_with_capital_The(butler); ! not popped print " enters the room"; if (portrait has open) { print ", sees the open ", (name) portrait, ", and seizes your arms, pinning them behind your back. "; return JigsUpWorseThanDeath(Hit_over_head_str); } remove butler; print ". ~Excuse me for interrupting, Miss, but the master requests your company in his room.~ He "; if (knob has general_3 || book has general_3) { give knob ~general_3; give book ~general_3; print "moves around the room, straightening things, then "; } print "guides you back to the foyer. ~The governor's ", (name) quarters, " are in the east wing.", (string) Butler_points_str; new_line; return Goto(Foyer); } if (location == Ballroom or Supper_Room or Orchestra or Hall or Foyer or East_Hallway or Bedroom or Gallery or Parlour or Main_Entrance or Veranda_Room or Kitchen or Stair_Landing or Upstairs_Hall1 or Upstairs_Hall2) { if (beautiful_ball_gown has worn) { remove butler; print (string) Spacing_str; Cast_with_capital_The(butler); ! not popped print (string) Requests_presence_str; if (location == Upstairs_Hall2) { print "to"; Cast_with_the(ornate_door); ! not popped print ", unlocks it"; } else if (location == Stair_Landing or Upstairs_Hall1 or Parlour or Bedroom) { print "to the east"; } else if (location == Gallery) { print "to the north"; } else { print "up"; Cast_with_the(stair); ! not popped print 's'; } ", bows, and leaves."; } give Foyer general_3; print (string) Spacing_str; Cast_with_capital_The(butler); ! not popped print ", who looks like he is seeking someone, grabs your collar, ~Who invited beggars? Get back to the village where you belong.~"; if (location ~= Main_Entrance) { print " He escorts you out of the house", (string) Dot_newline_str; new_line; return Goto(Main_Entrance); } new_line; rtrue; } give Foyer general_3; rtrue; ]; [ LafondOrdersPapasDeathTimer ; if (location ~= Ballroom or Foyer or Supper_Room or Orchestra) rfalse; print (string) Spacing_str, "You see"; Cast_with_the(Crulley); ! not popped print " come in from the east wing and beckon to Lafond. ~'E's gone"; if (your_father has visited) { QueueInterrupt(LafondDanceDaemon,2); ! not popped remove Captain_Jamison; print "! The cocky crupper 'as disappeared!~ Lafond looks around angrily, eyes narrowed, ~Then get his compatriot. Take Falcon.~"; Cast_with_the(Crulley); ! not popped print " runs out the front door, reappearing a moment later with help", (string) Dot_newline_str; DragoonsSeizeJamison(true); ! not popped } else { FatherIsDead(". Visiting that Neptune you tol' me about. Gone to sea, poor man,~ he laughs, and returns to lurking around the doorway.",true); ! not popped } ++Crulley_alone_with_you_timer; return Crulley_alone_with_you_timer; ]; [ TheDuelDaemon ; if ((~~InMansionP()) || Various_duel_or_ship_or_dance_counters >= 16) { if (Various_duel_or_ship_or_dance_counters < 12) { print (string) Spacing_str; if (location == Gallery) { print "Nicholas and Lafond circle each other intently, the one breathing hard, the other casual, sword tips almost touching. Jamison has lost copious amounts of blood and is no match for Lafond, cool and competent."; new_line; } print (string) ComplexPickOne(Duel_tbl); new_line; } else if (Various_duel_or_ship_or_dance_counters == 12) { print (string) Spacing_str, "Someone calls out, ~We've got the Dimsford girl, Governor~ -- lying, of course, since you're obviously free"; if (location == Gallery) { print ". But Nick glances towards the voice, missteps, and slips in his own blood, falling backwards to the floor, his rapier skittering aside"; } print (string) Dot_newline_str; } else if (Various_duel_or_ship_or_dance_counters == 13) { print (string) Spacing_str; if (location == Gallery) { print (name) Lafond, " leaps to Jamison's side, placing one heeled boot on the prostrate man's throat, the tip of his sword over Nick's heart. He sneers then, one eyebrow tilted, and moves to plunge in the sword. Nicholas cannot move."; } else { Various_duel_or_ship_or_dance_counters = 15; print "One of the duellists falls heavily to the floor, his sword skittering away. All is silence for a moment, broken once by a low chuckle. Then a woman screams, someone gasps, and Jean Lafond's wicked laugh blasts your ears, ~Who else cares to taste my blade?~"; } new_line; } else if (Various_duel_or_ship_or_dance_counters == 14) { if (location == Gallery) { print (string) Spacing_str, "The sword plunges down into Jamison's heart, a red stain flowing up to meet it on his breast. Nicholas draws his last breath, his tortured gaze drawn heavenwards, to your face. He reaches for you, his hand dripping his own blood, and breathes your name...^ Nicholas's hand falls limply to the swelling pool of wine red blood and silence pounds on your ears", (string) Dot_newline_str; } } else if (Various_duel_or_ship_or_dance_counters == 15) { if (location == Gallery) { print (string) Spacing_str, "Lafond wipes his sword on your lover's inert body, ordering someone to drag away the corpse. Suddenly there are sounds of fighting all about, and you realize dragoons surround the house", (string) Dot_newline_str; } else { print "Time has stopped. Silence reigns."; new_line; } } else if (Various_duel_or_ship_or_dance_counters == 16) { if (~~InMansionP()) { print (string) Spacing_str, "~Find the girl and bring her to me,~ Lafond orders."; new_line; } print (string) Spacing_str, "Dragoons surround you. "; JigsUpWorseThanDeath(Hit_over_head_str); ! not popped } } ++Various_duel_or_ship_or_dance_counters; return Various_duel_or_ship_or_dance_counters; ]; [ InMansionP ; if (location == Upstairs_Hall2 or Stair_Landing or Hall or Foyer or Library or East_Hallway or Veranda_Room or Gallery) rfalse; rtrue; ]; [ Pistol_action ; if (action == ##Fill) { if ((~~second) && P_initial_word == 'load') { if (Ultimately_InP(gunpowder)) { Perform(##Fill,pistol,gunpowder); ! not popped rtrue; } print (string) Not_holding_str, " any ", (name) gunpowder, (string) Dot_newline_str; rtrue; } if (second == gunpowder) { if (Pistol_loaded) { print (string) You_already_have_str, " loaded"; return Cast_with_the_and_print_dots(pistol); } Pistol_loaded = true; move powder_horn to player; if (~~Have_loaded_pistol_or_garter) { Have_loaded_pistol_or_garter = true; ++score; } print "You pour a lumpy stream of"; Cast_with_the(gunpowder); ! not popped print " mixture into the barrel of"; Cast_with_the(pistol); ! not popped print " tamping it as best you can", (string) Dot_newline_str; rtrue; } if (noun ~= pistol) rfalse; print (string) You_cant_str, "put that into"; return Cast_with_article_and_print_dots(pistol); } if (action == ##Pour or ##Insert && second == pistol) { if (noun == gunpowder) { Perform(##Fill,pistol,noun); ! not popped rtrue; } print (string) Pardon_str; rtrue; } if (action == ##Examine) { print "One of"; Article(duelling_pistols); ! not popped print ", the gun is "; if (Pistol_loaded) { "primed and ready to fire."; } "not loaded."; } if (action == ##Attack) { Perform(##Shoot,noun,second); ! not popped rtrue; } if (action == ##Shoot) { if (~~Pistol_loaded) { print "But"; Cast_with_the(pistol); ! not popped " is not loaded."; } if ((~~second) || noun == air) { ++score; print "You fire"; Cast_with_the(pistol); ! not popped print " into the air. Startled by the loud report,"; Cast_with_the(Crulley); ! not popped print " jerks his pistol and fires, aiming not at Nicholas, but at you. You hear a distant scream, your own, and watch, as through from afar,"; Cast_with_the(your_father); ! not popped print " wrestle"; Cast_with_the(Crulley); ! not popped print " to"; Cast_with_the(ground); ! not popped print ". You feel only numbness as loving arms take you up, and Nicholas kisses you into death, his tears damp on your cheek.", (string) Death_str; Ending_rank = 2; return EndGame(); } if (noun == bushes or patrol) { "They are out of range."; } if (noun == Crulley) { ++score; print "Trembling, you fire the heavy pistol. You hear its loud report over roaring surf. Crulley staggers, hit, and falls from the cliff. The gun falls from your nerveless hands.^ Time stops as you and Nicholas gaze at one another, adoring and amazed. Slowly he bows and offers his hand.^ ", (string) Chestnut_hair_str, "His eyes, twin seas of blue, devour you with a love deep and true-hearted, and you are pulled into his embrace, your mouth on his, lips parted, thirsting, arching into his kiss..."; new_line; return WinGame(); } if (noun == pistol) { return FreeSub(); } if (noun has general_1) { return UnladylikeToHitWhenDown(); } if (noun has animate) { print "You wouldn't kill"; Cast_noun_with_the(); ! not popped "!"; } if (noun notin location) { Cast_with_capital_The(pistol); ! not popped print " can't fire that far", (string) Dot_newline_str; rtrue; } return WrapSub(); } if (noun ~= stone || action ~= ##Shoot) rfalse; return WrapSub(); ]; [ Finale ; if (location == Lagoon or By_the_Ship && Lafond_seduction_cnt > 1) { score = 25; print (string) Spacing_str, "You hear distant shots and screams, and gaze back across the restless waves to the massacre on the beach. The sight blurs with your tears of shame, tears for the father and the lover you left behind."; new_line; PrintNewlines(15); ! not popped print (string) Spacing_str, "The tale you tell Jamison's crew, of rapine and blood, of your heroic attempt to save their captain, and of your own escape after his death in your arms, is not so far from the truth that you cannot appear sincere. Cannily, you take advantage of their temporary grief, select a private guard, and teach the rest the discipline of the whip."; Ending_rank = 3; if (Lafond_seduction_cnt < 7) { print " You have started on the ruthless road to revenge. You intend to meet Lafond again, and that time, you intend to win."; } new_line; EndGame(); ! not popped rfalse; } print (string) Spacing_str; if (Lafond_seduction_cnt == 1) { if (location ~= Beach or Shallows or Lagoon) { JigsUpWorseThanDeath("Dragoons surround you, appearing from nowhere. They show you no mercy, though they let you survive."); ! not popped } else { QueueInterrupt(Finale,65535); ! not popped move Lafond to Beach; give Lafond ~general_2; move Crulley to Beach; give Crulley ~general_2; print "A shot rings out over the roar of the surf. Turning, you see that Lafond stands at the top of the cliff, a pistol in each hand. ~Trying to sneak out the back, cowards? You will die like your brother, Falcon. Snivelling for mercy.~ He hands one gun to ", (name) Crulley, ", standing nearby, and levels the other at Jamison", (string) Dot_newline_str; } } else if (Lafond_seduction_cnt == 2) { give Cookie general_1; Person_to_refuse = Captain_Jamison; Question_cnt = Q_LET_JAMISON_PROTECT_YOU; QueueInterrupt(QuestionExpireTimer,2); ! not popped print "As the gun fires, Cookie throws himself before his captain. He cries out, blood blossoming on his shoulder, and falls face first into the sand. Lucy runs to him.^ Jamison yells up the cliff, brandishing his sword. ~Fight like a man, Lafond. You have drawn my blood once tonight -- let me draw yours.~^ Lafond sneers. ~On one condition. If I win, your lady comes to me. You will have no need of her when you are dead.~^ Nicholas stiffens, glances at the dragoons on the cliff above, and turns slowly to you. He says nothing, his face hard, but his eyes tell you what you want to know. ~Answer, my darling. Yes or no?~"; new_line; } else if (Lafond_seduction_cnt == 3 or 4) { Person_to_refuse = Captain_Jamison; Question_cnt = Q_LET_JAMISON_PROTECT_YOU; QueueInterrupt(QuestionExpireTimer,2); ! not popped if (FriendlyVerbP() || action == ##Nod) { give rapier attrib9; give Lafond attrib9; give Crulley ~attrib9; move pistol to Beach; Lafond_seduction_cnt = 4; print "Nicholas looks determined. ~I accept. So long as my people go free if I win. Order your dragoons to obey us, then.~ In answer, Lafond jumps off the cliff like a huge brocaded bat to land in front of"; Cast_with_the(Captain_Jamison); ! not popped print ". ~Die then, fool!~^ "; Cast_with_capital_The(pistol); ! not popped print ", spinning from Lafond's grip, drops to the sand "; if (location == Beach) { print "nearby."; new_line; } else { print "of the beach."; new_line; } } else if ((~~Assorted_situations_FIGURE_OUT_LATER) && Lafond_seduction_cnt == 3) { print "Lafond calls down to you, ~My pretty doxy, do make up your mind. Yes or no?~"; new_line; } else { JigsUp("Lafond cries, ~No deal then. Take them, men!~ The dragoons pour down the cliff."); ! not popped } } else if (Lafond_seduction_cnt == 5) { print (name) Lafond, " immediately takes the advantage, forcing Nicholas in a retreat towards the foaming surf. But Nicholas fights hard, jaw set, ignoring his wounds. Lafond finally loses his smile.^ Behind the duellists, far away atop the cliff, you notice ", (name) Crulley, " madly reloading the pistol", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 6) { give Lafond ~attrib9; remove new_ring; move gold_ring to Captain_Jamison; give rapier ~attrib9; give Lafond general_1; print "Suddenly the force of the duel turns, Nicholas advancing against Lafond's retreat. Their blades silently flash in the moonlight. Lafond is pressed back into the shadow of the cliff, sweat beading on his forehead. Abruptly, Jamison leaps forward, metal scrapes, and his rapier licks neatly into Lafond's ribs, like a snake slipping into its burrow. The body of the governor of St. Sinistra convulses, as in amazement, then sags dead on the sword.^ Nicholas removes"; Article(gold_ring); ! not popped print " from the dead man's finger, throwing his own cheap copy into the surf.^ Far above him,"; Cast_with_the(Crulley); ! not popped print " moves down the stairs."; new_line; } else if (Lafond_seduction_cnt == 7) { print (name) Crulley, " is levelling"; Cast_with_the(pistol); ! not popped print ", feet apart, braced by the cliff wall."; new_line; } else if (Lafond_seduction_cnt == 8) { print (name) Crulley, " carefully aims"; Cast_with_the(pistol); ! not popped print ", a triumphal grin benighting his face. Nicholas turns and walks smiling towards you, oblivious to his danger", (string) Dot_newline_str; } else if (Lafond_seduction_cnt == 9) { JigsUp("The pistol fires with a deafening roar, spraying shot into Nicholas. Time stops as he falls, reaching for you, your name his last breath.^ The battle afterwards is short and bloody. Spurred by grief, you fight hard, yet greet benumbing death thankfully."); ! not popped } ++Lafond_seduction_cnt; return Lafond_seduction_cnt; ]; [ WinGame ; move Captain_Jamison to Forecastle; PrintNewlines(15); ! not popped Verbosity = SUPERBRIEF; Goto(Forecastle); ! not popped print (string) Spacing_str, "As dawn breaks over the eastern seas, you stand with Nicholas on his ship, looking north. ~I have nothing left in England,~ he says. ~There I am but a destitute gentleman, wanted for piracy. Here -- this isle holds too many memories"; if (your_father has general_1) { Ending_rank = 1; print " --~ he pauses, gazing into your tear-filled eyes with compassion. ~"; } else { Ending_rank = 4; print "; your father may have it. "; } print "Mayhap my brother's wife yet lives. I must try to find her, either way.~ He takes you into his arms. ~Come with me, my love? To America -- they tell of endless fertile fields and strange beasts in that wild land. It won't be easy, but we will have each other. Together, shall we carve a kingdom blessed with fair children and freedom?~^ You wrap your arms about his waist and lean into him, and smile at the rising sun", (string) Dot_newline_str; return EndGame(); ]; [ Patrol_action ; if (patrol == actor) { "A rough voice yells to leave them alone."; } if (~~PhysicallyTouchVerbP(patrol)) rfalse; return YouCantReachThe(patrol); ]; [ DoesntHearYou ; if (actor == Lucy) { print "Sh"; } else { print 'H'; } print "e fails to notice you've spoken", (string) Dot_newline_str; rtrue; ];