! The Tale of the Kissing Bandit ! Copyright 2001 by J. Robinson Wheeler ! for SmoochieComp Started: 01-30-2001 3:00am ! Version history ! Alpha version 1.0 01-30-01 3:00am ! Alpha version 2.0 02-01-01 11:17pm Constant Story "The Tale of the Kissing Bandit"; Constant Headline "^by Cary Valentino^"; Release 1; Replace AskSub; Replace AskForSub; Replace TellSub; Replace AnswerSub; Replace InvWideSub; Replace InvTallSub; Replace StrongSub; Replace SwimSub; Replace KissSub; Include "Parser"; Attribute activeloop; Attribute kissed; Attribute paused; Constant DIALECT_US; Constant MAX_SCORE = 20; Constant SACK_OBJECT grouch_bag; Object LibraryMessages "lm" with before [; Miscellany: switch( lm_n ) { 5: print "^Would you like to RESTART, RESTORE a saved game"; if ( deadflag == 1 ) print ", UNDO your last move"; ", or QUIT?"; 19: << Examine player >>; 38: #Ifdef DIALECT_US; "That's not a verb I recognize."; #ifnot; "That's not a verb I recognise."; #endif; } ]; Include "VerbLib"; Include "looptalk"; !Include "menus"; Class Room has light ; Class Detail has scenery ; Object game "game" with state 0, number 0, ; [ Initialise o; lookmode = 2; ! verbose on notify_mode = 0; ! notify off inventory_style = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT + CONCEAL_BIT; objectloop (o ofclass Character) { o.InitQuips(); } location = startroom; ChangePlayer( Kissing_Bandit ); print "^^^The grand ballroom is awhirl with color and gaiety on this, the night of the annual Governor's Ball. All of the choice mademoiselles are spinning in their lace finery, bewitching upright young suitors, lined up five deep to kiss a wrist.^^ The Kissing Bandit has other plans, though. First, he must be cautious. Find a fetching femme who has parted from her company, to rest alone in a shaded alcove. Or perhaps take a stroll on the veranda. Yes, perhaps... ah, you twirl your moustache with delight. The Kissing Bandit shall have no trouble tonight finding a pair of pert lips, ready for a stolen kiss...^^^"; HitReturnOrSpace(); ]; Room startroom "Grand Ballroom, center", with description [; if ( self hasnt general ) { give self general; "The grand ballroom of the Emerson Hotel is a busy spin of high society's young and old. The Warthingtons, the Worthingtons, the Wellingtons (London and Boston branches), the Westons, the Wooltons, the Whitestones...^^ Hmm, maybe the room is arranged alphabetically, you think. The upper class loves hewing to arbitrary orders, almost by definition. It's up to the Kissing Bandit to inject a note of blessed confusion to the events."; } "The grand ballroom of the Emerson Hotel is a busy spin of high society's young and old. Exits lead in all directions. "; ], e_to e_ballroom, sw_to sw_ballroom, ; Object -> Kissing_Bandit "the Kissing Bandit" with name 'kissing' 'bandit', article 'the', description "Ha-HA! No one will ever guess the identity of the Kissing Bandit! Not even... uh... yourself!", number 0, each_turn [; if ( Kissing_Bandit hasnt paused ) { Kissing_Bandit.number++; switch ( Kissing_Bandit.number ) { 2: if ( location == startroom ) { give peaches_and_cream ~scenery; move peaches_and_cream to sw_ballroom; "^A lovely young demoiselle, looking in her ruffled ball gown like a plenteous dish of peaches and whipped cream, parts from the general company. Fanning herself, she retreats to the southwest. "; } else if ( location == sw_ballroom ) { give peaches_and_cream ~scenery; move peaches_and_cream to sw_ballroom; "^A lovely young dameoiselle, looking in her ruffled ball gown like a plenteous dish of peaches and whipped cream, arrives from the central dance floor. Fanning herself, she relaxes in the shade. "; } ! give self paused; Kissing_Bandit.number--; } } give self ~paused; ], has transparent proper ; Detail -> -> wrist "wrist" with name 'wrist' 'her', description "The Kissing Bandit is not interested in wrists at the moment.", before [; Kiss: "The Kissing Bandit did not put himself at risk tonight for the sake of a mere kiss on a wrist!"; ], ; Object -> -> black_mask "black mask" with name 'black' 'mask', description "The black mask protects your identity.", has clothing worn ; Object -> -> fake_mustache "fake moustache" with name 'fake' 'mustache' 'mustaches' 'moustache' 'moustaches', description "The moustache conceals your identity and adds a touch of melodrama to the Kissing Bandit's appearance, you do think. ", before [; Twirl: "You twirl your moustaches. Ha-HA!"; ], has clothing worn ; Object -> -> pair_of_buckled_boots "pair of buckled boots" with name 'pair' 'of' 'buckled' 'boot' 'boots', description "Ah, these are magic boots, boots full of secrets. They allow the Kissing Bandit to move swiftly and silently; to climb and jump like a jackrabbit; and to run with the fleetness of quicksilver." has clothing worn ; Object -> -> velvet_cloak "velvet cloak" with name 'velvet' 'cloak', description "The velvet cloak allows you to melt into shadows." has clothing worn ; Object -> -> rakish_hat "rakish hat" with name 'rakish' 'hat', description "The rakish hat is becomingly sly." has clothing worn ; Object -> -> locket "locket" with name 'locket', description [; print "The locket is made of carved gold, inlaid with delicate ornaments. "; <>; ], before [; Receive: "You can't fit that into the locket."; LetGo: if ( noun == silhouette ) "You have vowed that you shall never take the silhouette out of the locket, nor remove the locket, until you win the heart of Marianne."; ], after [; Open: print "Opening the locket reveals a silhouette"; if ( tiny_lock_of_brown_hair in locket ) print " and a tiny lock of brown hair"; print ".^"; if ( self hasnt general ) { give self general; "^Ah! Your heart breaks once again over your one true lost love! Fair Marianne, twas you that spurned my love, flaming a fury that turned one simple boy into this dashing rogue, that steals kisses by night! If only I could find you..."; } rtrue; ], has clothing worn container openable ; Object -> -> -> silhouette "silhouette" with name 'silhouette', description "It is a silhouette of Marianne, the fair creature that broke your heart. It is the only image you have of her. Even your memories of her face have been blurred by tears.", before [; Kiss: "You kiss the silhouette; it is, alas, a pale imitation. It leaves ashes in your mouth."; Take: "You shall never take the silhouette out of the locket, nor remove the locket, until you win the heart of Marianne."; ], ; Object -> -> -> tiny_lock_of_brown_hair "tiny lock of brown hair" with name 'tiny' 'lock' 'of' 'brown' 'hair', description "A lock of Marianne's hair. The gently curved strands catch the light in autumn colors of brown, red, and gold.", before [; Kiss: "You kiss the tiny lock of hair. If only, you think with amusement, it were still attached to the one you love."; ], ; Object -> -> grouch_bag "grouch bag" with name 'grouch' 'bag', description [; print "The grouch bag is special; a magician once gave it to you in return for helping him escape from persecutors. It is small and light, made of oiled leather. You have found that it can hold many things, including your entire costume -- cloak, boots, and all.^^"; <>; ], has clothing worn openable ; Detail -> young "high society young" with name 'young' 'high' 'society', has animate pluralname ; Detail -> old "high society old" with name 'old' 'high' 'society', has animate pluralname ; Detail -> The_Warthingtons "Warthingtons" with name 'warthingtons', article "the" has animate pluralname ; Detail -> The_Worthingtons "Worthingtons" with name 'worthingtons', article "the" has animate pluralname ; Detail -> The_London_Wellingtons "London Wellingtons" with name 'london' 'wellingtons', article "the" has animate pluralname ; Detail -> The_Boston_Wellingtons "Boston Wellingtons" with name 'boston' 'wellingtons', article "the" has animate pluralname ; Detail -> The_Westons "Westons" with name 'westons', article "the" has animate pluralname ; Detail -> The_Wooltons "Wooltons" with name 'wooltons' 'woolltons', article "the" has animate pluralname ; Detail -> The_Whitestones "Whitestones" with name 'whitestones', article "the" has animate pluralname ; Object -> peaches_and_cream "Lily Whitestone" with name 'peaches' 'and' 'whipped' 'cream' 'dameoiselle' 'damoiselle' 'lily' 'whitestone' 'lovely' 'young' 'woman', description [; if ( self hasnt general ) { give self general; "Why, it's little Lily Whitestone herself! She's chanced to escape the plump pursed lips of the Kissing Bandit on other occasions... but no one ever escapes your kisses for long! "; } "It's young Lily Whitestone, looking in her ruffled ball gown like a plenteous dish of peaches and whipped cream. "; ], describe [; if ( self hasnt general ) "^Young Peaches-and-Cream stands here, looking flushed. "; "^Lily Whitestone is here. "; ], life [; Attack: "Good heavens! The Kissing Bandit's intentions stop at the innocent kiss!"; ], has animate female scenery proper ; Room sw_ballroom "Grand Ballroom, southwest corner" with description "This corner of the ballroom is cool and shaded, with a russet portico leading west to a series of private salons. ", ne_to startroom, ; Room e_ballroom "Grand Ballroom, east side" with description "This side of the ballroom is open to the night air, which is not much cooler than the room itself on this moist spring evening. A set of French doors leads east out onto the veranda. ", w_to startroom, e_to veranda, ; Room veranda "On the Veranda" with description "The moonlight is exquisite, like milky champagne flowing over the city. The air is husky, humid, and fresh -- redolent of garden greenery and buzzy with insects of the night. Moths to flames -- a metaphor for the Kissing Bandit, you laugh to yourself.", w_to e_ballroom ; Object -> Gabriella "Gabriella Cavortini" with name 'gabby' 'gabriella' 'cavortini' 'striking' 'young' 'woman', description [; if ( self hasnt general ) { give self general; "Ahhh, it's none other than Gabriella Cavortini, enjoying a cocktail by moonlight. Her painted lips touch the tip of the glass, leaving a glossy imprint.^^ An interlocked young couple return to the ballroom. Thus the Kissing Bandit finds himself alone with an exquisite find! "; } "It's Gabriella Cavortini, alone and enjoying a cocktail by moonlight. "; ], describe [; if ( self has kissed ) "^Gabriella is here, hand to her chest, breathing heavily."; if ( self hasnt general ) "^A striking young woman in a sheathlike gown of daring purple is standing here, looking out over the balcony at the lights of the city below. "; "^Gabriella Cavortini is here. "; ], life [; Attack: "Good heavens! The Kissing Bandit's intentions stop at the innocent kiss!"; ], before [; Kiss: if ( self hasnt kissed ) { give self kissed; "The moment is now! The Kissing Bandit's blood is hot in his breast! The young woman spins, her mouth gently open in an O of surprise --^^ The kiss is hot, and warm, and returned. A spontaneous instant of passion...^^ And then The Kissing Bandit breaks off, to bow, leap over the veranda, and steal away into the night."; } "The Kissing Bandit kisses each but once."; ], has animate female proper ; ! Insert more routines here [ HitAnyKey i; print "^[Hit any key.]^"; @read_char 1 0 0 i; "^"; ]; [ HitReturnOrSpace i; print "^^[Hit return or space to continue.]^"; do { @read_char 1 0 0 i; } until (i==32 or 10 or 13); "^"; ]; [ DeathMessage; switch(deadflag) { 3: print "The End"; 4: print "Game over"; } ]; ! You may want to Replace some or all of AskSub, AskForSub, TellSub, ! GiveSub, ShowSub, and AnswerSub with: [ AskSub; "Please use >TALK TO PLAYER to interact in this game."; ]; [ AskForSub; "Please use >TALK TO PLAYER to interact in this game."; ]; [ TellSub; "Please use >TALK TO PLAYER to interact in this game."; ]; [ AnswerSub; "Please use >TALK TO PLAYER to interact in this game."; ]; [ InvWideSub; inventory_style = FULLINV_BIT + ENGLISH_BIT + RECURSE_BIT + CONCEAL_BIT; ; ]; [ InvTallSub; inventory_style = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT + CONCEAL_BIT; ; ]; Include "Grammar"; ! Insert new grammar lines here [ QuitySub; quit; ]; [ KickSub; "Save it for the bugs. "; ]; [ LaughSub; "Ha-ha-HA! "; ]; [ LaughAtSub; "Good way to get your head busted open."; ]; [ ReplySub; "I don't know how to reply to that. "; ]; [ CleanSub; print_ret (The) noun, " looks a little cleaner now. "; ]; [ ClimbOutSub; "But you aren't in anything at the moment. "; ]; [ LookBehindSub; print_ret "There's nothing of interest behind ", (the) noun, ". "; ]; [ XyzzySub; if ( game.state == -1 ) { HitAnyKey(); rtrue; } "Nothing happens. ";]; [ AboutSub; banner(); "Type CREDITS for more information."; ]; [ CreditsSub; "Appreciative thanks to Emily Short for dreaming up kissieComp."; ]; [ GameHelpSub; "The Kissing Bandit needs no one's help!"; ]; [ HelpSub; "That isn't important."; ]; [ StrongSub; "You mutter a naughty oath to yourself."; ]; [ FuckSub; if (noun==0) "You mutter a few oaths and curses to yourself."; "Good heavens! The Kissing Bandit's intentions stop at the innocent kiss!"; ]; [ StandSub; "You're already on your feet. "; ]; [ SwimSub; L__M(##Swim,1,noun); ]; [ ScratchBodySub; "You scratch yourself."; ]; [ ScratchItchSub; "You haven't got an itch -- except to steal some kissies."; ]; [ ScratchFaceSub; "You scratch your face."; ]; [ ScratchHandsSub; "You scratch your hands a little bit, get some circulation going in them."; ]; [ ScratchThumbsSub; "You scratch your thumbs."; ]; [ ScratchWristsSub; "You scratch your wrists. It feels good."; ]; [ RubEyesSub; "You shouldn't rub your eyes."; ]; [ ExamineItchSub; "You haven't got an itch -- except to steal some kisses."; ]; [ ExamineFaceSub; "On your face are a black mask and a fake mustache."; ]; [ ExamineBodySub; << Examine player >>; ]; [ ExamineHandsSub; "Your hands are just fine."; ]; [ ExamineThumbsSub; "Your thumbs are in good shape."; ]; [ ExamineWristsSub; "Your wrists are just fine."; ]; [ ExamineHeadSub; "On your head is a rakish hat."; ]; [ ExamineFeetSub; "Your feet are warm in your shiny buckled boots. "; ]; [ ImpressSub; if (noun==0) "Impressive."; print_ret (name) noun, " isn't impressed."; ]; [ HugSub; "Hugs? Pah! Hugs are not what the Kissing Bandit is after!"; ]; [ TwirlSub; "I don't know how to twirl that. "; ]; [ KissSub; print (The) noun; if ( noun has pluralname ) print " aren't"; else print " isn't"; " a proper target for the Kissing Bandit!"; ]; ! Verbs Extend 'look' * 'out' noun -> Search * 'behind' noun -> LookBehind; Extend 'climb' last * 'out' -> Exit * 'out' noun -> ClimbOut; Verb 'yank' 'tug' = 'pull'; Extend 'pull' last * "on" noun -> Pull; Extend only 'answer' replace * creature -> TalkTo * noun -> Reply; Extend only 'clean' first * noun -> Clean * 'up' noun -> Clean * noun 'up' -> Clean; Verb 'hint' * -> GameHelp; Verb 'help' * -> GameHelp * noun -> Help * 'up' noun -> Help * noun 'up' -> Help; Verb 'neaten' 'tidy' * noun -> Clean * 'up' noun -> Clean * noun 'up' -> Clean; Verb 'reply' 'respond' * noun -> Reply * 'to' creature -> TalkTo * 'to' noun -> Reply; Verb 'leap' = 'jump'; Extend 'jump' * noun -> Jump * 'up' -> Jump * 'up' 'to' noun -> Jump * 'on'/'at' creature -> Attack * 'on' noun -> Enter * 'to'/'at'/'in'/'inside'/'for'/'into' noun -> Jump * 'over' 'to' noun -> Jump * 'out' noun -> ClimbOut; Extend only 'speak' * 'in' creature -> TalkTo * 'in' noun -> TalkTo ; Extend 'talk' * 'in' creature -> TalkTo * 'in' noun -> TalkTo ; Verb 'stop' 'halt' 'abort' * -> No; Extend 'drop' first * noun 'at'/'against'/'on'/'onto' noun -> ThrowAt; Extend 'close' * noun 'with' held -> Close; Verb 'slap' = 'attack'; Verb 'zz' = 'wait'; Verb 'kick' * noun -> Kick; Verb 'laugh' 'snort' 'hee' 'ha' 'hah' 'heh' 'har' 'giggle' 'chortle' 'snicker' 'guffaw' * -> Laugh * 'at' noun -> LaughAt; Verb meta 'quity' 'xquit' * -> Quity; Verb meta 'xyzzy' * -> Xyzzy; Extend 'drop' first * held -> Drop; Extend only 'throw' * held 'at'/'against'/'on'/'onto' noun -> ThrowAt; Extend 'go' * 'out' -> Exit; Extend only 'fuck' replace * -> Fuck * noun -> Fuck; Verb 'rape' 'ravage' * -> Fuck * noun -> Fuck; Verb 'caress' = 'touch'; Extend 'get' replace * 'up' -> Stand * 'out'/'off' -> Exit * multi -> Take * 'in'/'into'/'on'/'onto' noun -> Enter * 'off' noun -> GetOff * multiinside 'from' noun -> Remove * 'it' 'on' -> Fuck * 'it' 'on' 'with' noun -> Fuck; Extend 'stand' replace * -> Stand * 'up' -> Stand * 'on' noun -> Enter; Verb 'scratch' 'scrape' 'claw' * -> ScratchBody * 'my' 'forehead'/'head' -> ScratchItch * 'it'/'itch'/'forehead'/'head' -> ScratchItch * 'nose'/'face'/'mouth'/'eyes'/'eye' -> ScratchFace * 'my' 'nose'/'face'/'mouth'/'eyes'/'eye' -> ScratchFace * 'crotch'/'stomach'/'gut'/'leg'/'legs' -> ScratchBody * 'my' 'crotch'/'stomach'/'gut'/'leg'/'legs' -> ScratchBody * 'arm'/'arms'/'chest'/'body'/'foot'/'feet' -> ScratchBody * 'my' 'arm'/'arms'/'chest'/'body'/'foot'/'feet' -> ScratchBody * 'hand'/'hands'/'finger'/'fingers' -> ScratchHands * 'my' 'hand'/'hands'/'finger'/'fingers' -> ScratchHands * 'my' 'thumb'/'thumbs' -> ScratchThumbs * 'wrist'/'wrists' -> ScratchWrists * 'my' 'wrist'/'wrists' -> ScratchWrists; Extend 'rub' first * 'eye'/'eyes' -> RubEyes; Extend only 'hug' replace * -> Hug * noun -> Hug; Extend 'kiss' first * noun -> Kiss; Verb 'smooch' = 'kiss'; Verb 'buss' = 'kiss'; Verb 'plant' * 'one' 'on' creature -> Kiss; Extend 'examine' * 'itch'/'forehead' -> ExamineItch * 'nose'/'face'/'mouth'/'eyes'/'eye' -> ExamineFace * 'crotch'/'stomach'/'gut'/'leg'/'legs' -> ExamineBody * 'arm'/'arms'/'chest'/'body'/'foot'/'feet' -> ExamineBody * 'hand'/'hands'/'finger'/'fingers' -> ExamineHands * 'thumb'/'thumbs' -> ExamineThumbs * 'wrist'/'wrists' -> ExamineWrists * 'head'/'hair' -> ExamineHead * 'feet'/'foot' -> ExamineFeet; Verb 'about' * -> About; Verb 'credit' 'credits' * -> Credits; Extend 'listen' first * 'to' creature -> TalkTo; Extend only 'throw' * multiheld -> ThrowAt * multiheld 'down' -> Drop * 'down' multiheld -> Drop * multiexcept 'in'/'into'/'down' noun -> Insert * multiexcept 'on'/'onto' noun -> PutOn * held 'at'/'against'/'on'/'onto' noun -> ThrowAt; Extend only 'show' * 'off' -> Impress * 'off' 'for'/'to' creature -> Impress; Verb 'impress' 'dazzle' * creature -> Impress; Verb 'spin' 'twirl' * noun -> Twirl; ! EOF