!--------------------------------------------------------------------------------------------------- ! Medusa ! A one-room example of NPC conversations using selected ORLibrary modules. !--------------------------------------------------------------------------------------------------- ! Created by Jim Fisher !--------------------------------------------------------------------------------------------------- ! 2002.04.14 0100 Initial half completed release. ! 2002.04.19 0101 Enhancements and expansions ! 2002.04.21 0102 Added End game code and Enhancements and expansions ! 2002.11.28 0103 Modified to work with current state of ORLibrary. ! 2003.01.16 0104 Minor modification to turn on the AutoMenuSystem by default. ! 2003.03.03 0105 Minor modification to adjust for number of optionlist options ! These were limited in a recent modification to the library. ! Also added code back in to access the menu system and revised the menuspeak ! directions. ! 2003.03.14 0106 A few points of revision, preparing for a release to the archive. !--------------------------------------------------------------------------------------------------- Serial "030314"; Release 106; [ORBannerText; print (italics)"Type HELP or MENU to access the Online Help System."; ]; !--------------------------------------------------------------------------------------------------- ! General setup !--------------------------------------------------------------------------------------------------- Constant Story "Medusa"; Constant Headline "^An Example in NPC Conversations^Copyright (c) 2002, 2003: Jim Fisher^"; !--------------------------------------------------------------------------------------------------- ! Specify which extensions to use !--------------------------------------------------------------------------------------------------- Constant DIALECT_US; Constant USE_ORMenu; !--Normal Menu (for help system) Constant USE_ORNPC; !--base NPC class Constant USE_ORNPC_converse; !--NPC componant class: (NPC will initiate conversations if they have anything to say) Constant USE_ORKnowledgeWeb; !--Knowledge topic that contains information about related topics Constant USE_OROptionListMenu; !--Used to implement the PC's and NPC's "conversation pool" Constant USE_ORInformLibrary; !--allows us to access the end of game sequence without actually processing any commands Constant USE_ORConverseMenu; !--Used to display the PCs "conversation pool" as a menu !----------------------------------------------------------------------------------------------- ! The following modules are automatically met as dependancies by the OREnglish LDF or the above modules. ! ORDynaString ! ORObjectInitialise ! ORRoutinesList ! ORLibraryMessages ! ORReverseDirection ! ORKnowledgeTopic ! ORPronoun ! ORTextFormatting ! ORNPCVerb ! ORNPC_Interact ! ORNPC_doverb ! ORNPC_asktelllearn ! OROptionList ! ORMiniMenu ! ORCenter ! ORRedefineObject !----------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------- ! Replace Directives !--------------------------------------------------------------------------------------------------- [DeathMessage; print "Game Over";]; !--define here before parser stubs it out. !--------------------------------------------------------------------------------------------------- ! Attributes !--------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------- #Include "OR_Library_Include"; #Include "Parser"; !--------------------------------------------------------------------------------------------------- ! SackObject, LibraryMessages Object, tasks... !--------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------- #Include "OR_Library_Include"; #Include "VerbLib"; #Include "OR_Library_Include"; !--------------------------------------------------------------------------------------------------- ! Variables !--------------------------------------------------------------------------------------------------- Constant FLOOR_COUNT 15; !--------------------------------------------------------------------------------------------------- ! Object Templates (class declarations) !--------------------------------------------------------------------------------------------------- class object_c; class room_c has light; class npc_c class OROptionList ORNPC_converse ORNPC_interact ORNPC_asktelllearn ORNPC_doverb ORNPC with acknowledge_conversation false !--turn off the generic responses when talking to an NPC , OptionList 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , AssociationList 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , AssociationList2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; class topic_c class ORKnowledgeWeb; !--------------------------------------------------------------------------------------------------- ! Maps (Just the elevator and a few scenery objects) !--------------------------------------------------------------------------------------------------- room_c elevator "Elevator" with description "An elevator; pretty much like any other elevator you've ever been in. Your increased weight conveys the sensation of movement and the floor indicator above the closed doors changes as the elevator passes floors. Next to the elevator doors, several dozen buttons are arranged in two rows.^^All the walls in this elevator are mirrored and exhibit a matrix of identical vampires and gorgons stretching to infinity in all directions." , n_to "The elevator door is closed." , cant_go "You are surrounded in all directions by a multitude of vampires and gorgons. No way your going anywhere." , each_turn[; if(turns>FLOOR_COUNT){ deadflag=3; print "^^Butterflies momentarily flutter around in your stomach as the elevator slows to a stop and the doors open. Beyond is the party with dozens of people dressed in creative costumes."; HandleEnding(); } ] ; object_c -> "elevator door" has scenery openable ~open with before[; open: print_ret "You can't open the elevator door in the conventional manner. It'll open itself when you reach floor number ",FLOOR_COUNT,"."; ] , name 'door' 'elevator' ; object_c -> "floor indicator" has scenery with description[count; count=FLOOR_COUNT-turns; print "The flashing indicator currently displays the number "; print turns; print ". Only ",count," floor"; if(count>1) print "s"; print " until you arrive a Reed's party."; ] , name 'floor' 'indicator' ; object_c -> "buttons" has scenery pluralname with description [; print_ret "There are about a bazillion buttons. This is, after all, a ",(italics)"really"," tall building. One button in particular, number ",FLOOR_COUNT," is lit.";] , name 'button' 'buttons' , before[; push: "No. Floor number ",FLOOR_COUNT," has already been selected. Selecting anymore floors would delay arrival at the party."; ] ; object_c -> "mirrors" has scenery pluralname with description "The mirrors on each of the four walls cast infinite reflections. Endless lines of Draculas and Medusas can be seen stretching to the vanishing point in all." , name 'mirror' 'mirrors' ; !--------------------------------------------------------------------------------------------------- ! NPCs !--------------------------------------------------------------------------------------------------- !---------------------- ! Medusa !---------------------- npc_c medusa "girl" elevator has female with name 'woman' 'medusa' 'gorgon' 'girl' , description "Beautiful, just as the Greek myths describe her. The girl's shapely curves show themselves through her toga. A dozen or so thin rubber snakes, painted red to blend almost unnoticeably with her long curls, bounce around her head and face as she moves. Her blue eyes glint in the dim lighting of the elevator." , add_to_scope toga hair snakes , initial "A slender, red headed girl dressed as Medusa stands beside you. Her reflections surround you in all directions." , Speechless[; print (string)random( "There is a brief moment of uncomfortable silence." , "The girl turns to the mirror for a moment and arranges her snakes." , "The girl gives a barely audible sigh and brushes some previously unnoticed lent off of her toga." , "With a faint glimmer of boredom, the girl seems to develop an intense interest in some invisible, far away object well beyond the walls of this elevator." ); ] ; object_c toga "toga" medusa has worn with description "Nothing special. If you've seen one white toga wrapped around a beautifully tanned gorgon, you've seen them all." , name 'toga' 'white' 'clothes' , article "her" ; object_c hair "hair" medusa has worn with description "Beautiful, with tiny scarlet serpents intertwined in the long, red, curled locks." , name 'hair' 'red' , article "her" ; object_c snakes "snakes" medusa has pluralname worn with name 'snake' 'snakes' , description "Rubber, dyed red to match the girl's hair color. The tiny snakes curl about, interwoven with her natural curls. The affect is really quite stunning." , article "her" ; !---------------------- ! Player !---------------------- npc_c dracula elevator with description "Just you, all dressed up in the Dracula costume your brother helped to make." , name 'dracula' 'vampire' ; object_c costume "costume" dracula has pluralname worn with name 'costume' , description "Rubber, dyed red to match the girl's hair color. The tiny snakes curl about, interwoven with her natural curls. The affect is really quite stunning." , article "your" ; !--------------------------------------------------------------------------------------------------- ! Movable Objects !--------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------- ! Non-physical objects (i.e. Menus, KnowledgeTopics, spells, etc) !--------------------------------------------------------------------------------------------------- !------------------------------------------------ ! Help System !------------------------------------------------ ORMenu HelpSys "Medusa"; ORMenu -> "About this Game" with text[; print "~Medusa~ is a demonstration of implementing conversations between the player character and NPCs using the ORLibrary. It is meant to augment an article entitled ~NPC Conversation: Theory and Implementation with the ORLibrary~ which can be found at the following URL:"; center("^http://www.onyxring.com/InformGuide.aspx?article=74"); print "^If you are a developer looking into the ORLibrary, the article should be well worth the time it takes to read. And the source code... Well, there is no better example than an example. You can download it from:^"; center("^http://www.onyxring.com/downloads/ORLib%20Examples/medusa.inf"); print"^This game, its Inform source code, and the accompanying article are a combined effort to demonstrate some of the functionality of the ORLibrary and provide developers with an example of leveraging it in one of the most diversified, and at times frustrating, aspects of NPC development: conversations.^"; print "^The latest revision of the ORLibrary can be found at:"; center("^^www.OnyxRing.com"); print "^As a side note, a map of the primary knowledge nodes which the player and NPC traverse in this game can be found here:"; center("^http://www.onyxring.com/downloads/ORLib%20Examples/medusa%20conversation.jpg"); ] ; ORMenu -> "NPC Conversations" with text "The NPCs in this game (and the PC for that matter) have been designed with a conversation system that attempts to mimic normal conversation in humans. Each topic of discussion relates to other topics which, in turn, relate to still other topics. As one subject is addressed, other potential topics accumulate in a decision pool. In this way, a conversation web has been created which can be traversed.^^At any given point in the game, each character will have a list of topics which they can either ASK or TELL the other character. Obviously the player is not restricted to these related topics as an NPC would be and is free to try and ASK or TELL anything that comes to mind, however a menu system has been built on top of this ASK/TELL Topic-pool paradigm and will display the related topics that have accumulated thus far in the conversation. The entire game can be played via this menu system, or it can be turned off in favor of explicit ASK/TELL commands."; ORMenu -> "Special Commands"; ORMenu ->-> "A" with text "For convenience, the normal ASK command can be abbreviated as the letter A. In addition, the character to which you are referring can also be presumed so that commands such as:^^ ASK GIRL ABOUT COSTUME^^can be abbreviated as:^^ A COSTUME"; ORMenu ->-> "T" with text "Like the ASK command, TELL has also been abbreviated to a single letter and the need to specify whom you are speaking to has been removed. Commands like:^^ TELL GIRL ABOUT COSTUME^^can be abbreviated as:^^ T COSTUME"; ORMenu ->-> "Talk" with text "As was discussed in the section ~NPC Conversations,~ each character in the game has a pool of potential conversation topics that can be discussed. For the player character, these are normally displayed in the conversation menu; however a topic from this pool can also be selected at random with the TALK command which is issued in the following format:^^ TALK TO GIRL."; ORMenu ->-> "AutoMenuSpeak" with text "The AutoMenuSpeak command (or AMS for short) can be used to turn the automatic conversation menu on or off with the following syntax:^^ AMS ON^^Or^^ AMS OFF^^By default it is turned ON."; ORMenu ->-> "MenuSpeak" with text "The MenuSpeak command (abbreviated MS) turns on the conversation menu if there are conversation topics to display. This is most often used when the conversation menu has been exited or AutoMenuSpeak has been turned off."; ORMenu -> "About the ~ORLibrary~" with text "The ORLibrary, or the ~OnyxRing~ Library is a framework of extensions to the standard library. It contains a broad spectrum of usable entries that do everything from centering text on the screen to enabling NPCs to walk around and talk with one another.^^If you are an Inform author and are interested in finding out more about the ORLibrary framework, point your browser to: www.OnyxRing.com."; ORMenu -> "About the Author" with text "Jim Fisher, a software engineer by profession, has programmed in a dozen or more languages including Assembler, BASIC, C/C++, C#, Delphi, Java, LISP, Perl, and T-SQL. He has been coding IF games as a hobby since the late 1970's, runs the OnyxRing web site, has written multiple articles on programming in Inform, and is the author of the ORLibrary extensions to the Inform standard library.^^His first completed work of interactive fiction was ~The Wade Wars: Book 3.~ The game, written originally on the TRS-80 model I in BASIC, has been ported to five different platforms over the years, including MSDOS (written in Quick Basic) which was released in 1993 to the Shareware Distribution Network and the Z-Machine (Inform) which was released in 2000 to GMD. ^^In addition, he wrote the game, ~Got Toast?~ for Mark Musante's ~Toaster Comp~."; !--------------------------------------------------------------------------------------------------- ! Topics known by Dracula !--------------------------------------------------------------------------------------------------- topic_c drac_t with KnownBy dracula; !--grouping topic (used to group a collection of topics as known by the dracula) topic_c -> d_mother_t "mother" with query "What about your mother? What does she do?" , TopicInformation "~My mother's the president of Securities Bank and Trust over in Milhelm.~^^I used to live in Milhelm. I know where that bank is.^" , menu_display "My mother's the president of..." , name 'mother' , RelatedTopics m_familydoeswell_t ; topic_c -> d_grandmother_t "grandmother" with query "So what other 'Great women' are in that 'long line' you come from?" , TopicInformation "~My grandmother makes the best blackberry cobbler on the planet.~^^She smiled at that. ~That's certainly great if you like blackberry cobbler.~^" , menu_display "My grandmother makes the best..." , name 'grandmother' 'grandma' , RelatedTopics !--deadend ; topic_c -> d_sister_t "sister" with TopicInformation "~My sister is a neural surgeon.~^^~Wow! Very impressive.~^^You nod. ~Except that its carries more weight when she tells me I'm messed up in the head.~^" , menu_display "My sister is a neural surgeon." , name 'sister' , RelatedTopics !--deadend ; topic_c -> d_theater_t "theater" with TopicInformation "~I took theater for a couple of semesters and also remember Dr. Davidson being particularly budget conscious.~^" , name 'theater' 'classes' 'creative' 'arts' , menu_display "I took theater..." , RelatedTopics d_macbeth_t d_sewing_t ; topic_c -> d_macbeth_t "macbeth" with query "~You were in theater?~ She pauses as though having difficulty believing that. ~I've seen you around campus a few times; never would have pegged you for an actor. Play in anything traditional, or are you a full time vampire?~^" , TopicInformation "~I played Macbeth.~^^~You're kidding. Macbeth?~^^You nod and dig deep into your memories for a quote. ~Had I but died an hour before this chance, I had lived a blessed time; for, from this instant, There's nothing serious in mortality.~ You strike a melodramatic pose for a moment, then smile at her, baring your fangs.^^She bursts out laughing.^" , menu_display "I played Macbeth." , name 'macbeth' , RelatedTopics d_lawyer_t ; topic_c -> d_lawyer_t "Harvard" with query "~So you want to be an actor?~^^You shake your head at this." , name 'lawyer' , TopicInformation "~I only took theater as an elective. I'll be transferring to Harvard Law after next year.~^^~A lawyer! You're taking this bloodsucking theme a little far aren't you?~^^~Hey, not all lawyers are bad!~^^~Okay.~ She rolls her eyes, unconvinced.^" , menu_display "I only took theater as an elective." , RelatedTopics m_major_t m_lawyer_t ; topic_c -> d_aunt_t "aunt" with TopicInformation "~My aunt is an accountant. You remind me of her actually.~^^~I'm not sure how to take that,~ she replies with a queer look upon her face.^^~Take it well,~ you say. ~She's a great woman. In fact, I come from a long line of great women.~^" , menu_display "My aunt is an accountant." , name 'aunt' , RelatedTopics d_grandmother_t d_mother_t d_sister_t ; topic_c -> d_costume_t "Dracula costume" with TopicInformation "~Dracula was always my favorite monster,~ you say, glancing at one of your many reflections.^" , menu_display "Dracula was always my favorite..." , query "~So you chose Dracula,~ she arches her eyebrows and gives a look of ridicule. ~Any significance to that?~^" , name 'dracula' 'costume' , RelatedTopics m_costume_t m_vampire_t , initiatable true !-- topic that can be started at random by the "Talk" command ; topic_c -> d_sewing_t "sewing" with query "~So you came out of acting class with some experience making theater costumes,~ she says. You watch her eyes look over your costume as though assessing your skills." , TopicInformation "~Some,~ You say, then on impulse: ~It isn't the most important thing you can know; but if the world falls apart, at least you can sew.~^^She looks at you with a strange expression. ^^~Dr. Dave used to say that. He had a bunch of corny rhymes that seemed to come out of his mouth non-stop.~" , relatedtopics d_rhyme_t , response true !--a topic that cannot be initiated, just responded to if asked about ; topic_c -> d_rhyme_t "teacher's rhymes" with relatedtopics d_frost_t , query "She thinks for a moment, and then says ~Now that you mention it I vaguely remember Lisa telling me about the stupid rhymes her teacher spouts. There was one she told me about when trying to make a point. It was something about falling over if you forget your lines.~" , topicinformation "~'You can stand back up if you happen to fall, but forget your lines and make fools of us all.' Yes, I think he makes them up himself. We used to cringe when someone would mess up on their lines in rehearsal, knowing that it was coming.~^^~Sounds like he considers himself a poet.~^^~He's no Robert Frost.~" , response true ; topic_c -> d_frost_t "frost" with query "~So you're a Frost fan?~" , topicinformation "You smile. ~My mother used to stay up late and read poetry to me to me as a child. 'The Road Not Taken' stands out most in my memories.~" , relatedtopics m_vampire_t d_mother_t , menu_display "My mother used to read Frost to me..." , name 'robert' 'frost' ; topic_c -> d_mummies_t "mummies" with topicinformation "~Mummies always scared me.~^^A look of mock concern comes across her face. ~That's sad,~ she says. ~It's okay to be scared of monsters, but no child should be scared of mommies.~^^You start to shake your head at her misunderstanding but see her smile and realize she was joking." , relatedtopics d_childfear_t , menu_display "Mummies scared me..." , name 'mummies' 'mummy' 'fear' ; topic_c -> d_childfear_t "child fear" with query "~So what other things scare you?~ she asks." , topicinformation "~As a child, I was scared to death of Grover.~^^~Grover? You mean from Sesame Street?~^^~Yes,~ you say, nodding. ~He used to give me nightmares.~^^She chuckles from that. ~I think he sounds like Yoda.~" , relatedtopics m_starwars_t d_adultfear_t , menu_display "Grover scared me..." , name 'grover' ; topic_c -> d_adultfear_t "adult fear" with query "~Okay, as a child you were afraid of a Muppet. What scares you now?~ she inquires." , topicinformation "~Being trapped in an elevator with Medusa,~ you answer.^^~What, with those fangs?~^^~Fangs won't do me any good if I'm a statue.~^^~Well if you turn to stone I'll give you a nice home in my garden,~ she says. ~You can scare away the birds.~" , relatedtopics m_garden_t , response true ; topic_c -> d_flashgordon_t "Flash Gordon" with topicinformation "~I always liked Flash Gordon.~^^~That's a little before my time,~ she responds with a smirk.^^~Not the original,~ you laugh. ~They remade it into new movie some time back.~^^~A few decades ago,~ she says.^^~Well... yeah, I guess.~ you admit grudgingly.^^She nods, ~I repeat, that's a little before my time.~" , menu_display "I always liked Flash Gordon..." , relatedtopics m_buckrogers_t , name 'flash' 'gordon' ; topic_c -> d_vegetarian_t "vegetarian" with query "~So I bet you're a meat-eater, huh?~" , topicinformation "~I could never be a vegetarian. Nothing is better than a juicy, tender steak.~ You say.^^She cringes. ~I just can't eat anything that once had a face.~^^~Chocolate bunnies have faces.~^^She laughs at this. ~Okay, chocolate bunnies are the exception to the rule.~" , menu_display "I could never be a vegetarian..." , name 'vegetarian' ; topic_c -> d_cousingarden_t "cousin's garden" with topicinformation "~I have a cousin who grows a flower garden for a living,~ you say.^^~For a living?~^^~Uh-hmm. He has a big green house and supplies flower shops around his town with their inventory.~^^~Hmmm,~ she thinks for a moment, then: ~I never really thought about where floral shops get what they sell. Flowers don't live very long.~" , menu_display "I have a cousin who grows a flower garden..." , name 'cousin' ; topic_c -> d_capitolpunishment_t "death penalty" with query "~You don't agree with our position?~ she asks, knowing the answer already from your expression." , topicinformation "~I'm actually a firm believer in capitol punishment,~ you say.^^She seems disappointed to hear you say this and responds, as though reading from a well-rehearsed script: ~Murdering another person won't change what they did.~^^~It isn't murder, its justice,~ you respond. ~And the mindset of a murderer is cancerous. Cutting it out of society is the only way to ensure it doesn't grow.~^^She reacts visibly to this, actually turning to face you. ~You can remove it from society without...~ Then she stops, closes her eyes and turns back to the door. She takes a deep breath and exhales. Then she opens her eyes. ~Let's just agree to disagree,~ she says.^^You remain agreeably silent.^^For a moment there is an uncomfortable pause. Then she looks at you with a glint in her eye and serious expression on her face. ~It's good that you care one way or the other. Apathy kills a person from the inside out, so it's good to have strong opinions.~^^You stand for a moment listening to her, conscious that there seems to be an invisible wall of separation between you now. Then she speaks again with that sly smile on her face. ~Even though you're wrong,~ she says. And suddenly the wall is gone." , menu_display "I'm a firm believer in capitol punishment..." , name 'capitol' 'punishment' 'death' 'penalty' ; !--------------------------------------------------------------------------------------------------- ! Topics known by Medusa !--------------------------------------------------------------------------------------------------- topic_c medus_t with KnownBy medusa; topic_c -> m_costume_t "costume" with query "~I like your costume,~ You say, conscious of how lame you sound.^" , menu_display_alt "I like your costume." , TopicInformation "The girl smiles at you. ~I've always been fascinated with Greek mythology.~ She glances at her reflection in the mirror. ~My room mate helped me make this. She's a theatrical major and gets a lot of experience working with costumes. I understand her professor is a little on the cheap side so they often just have to make do.~^^That rings true to your ears, having taken some creative arts classes before.^" , name 'costume' 'medusa' , RelatedTopics d_theater_t d_costume_t , initiatable true ; topic_c -> m_lawyer_t "lawyers" with query "~What's the root of this aversion to lawyers, you seem to have?~^" , menu_display_alt "Why do you dislike lawyers?" , TopicInformation "~I dated a lawyer for a while.~ She shrugs her shoulders. ~He argued with me about everything. I don't think he cared which side of an argument he was on, just as long as we disagreed. It was frustrating.~^^~I refer you to my previous statement: 'Not all lawyers are bad.'~^^~I'm sorry, but are you arguing with me?~ she asks with a smirk on her face.^" , name 'lawyer' 'lawyers' , RelatedTopics !--dead end ; topic_c -> m_major_t "major" with query "~What about you? What do you want to be when you grow up?~ You ask jovially.^^~An astronaut,~ she answers.^^You start to chuckle but stop when you see her straight face.^^~Really?~^^She smiles. ~No.~^" , menu_display_alt "What about you? What do you..." , TopicInformation "~I've been majoring in accounting. I was thinking that would be a good fall back career in case my space faring ambitions don't pan out.~ Hmmm. You like her dry humor. It reminds you of your aunt who, incidentally is also an accountant.^" , name 'major' , RelatedTopics d_aunt_t m_accountant_t ; topic_c -> m_accountant_t "accounting" with query "~You want to be an accountant? Math has just never been my thing.~^^She nods." , menu_display_alt "You want to be an accountant?" , name 'accountant' , TopicInformation "~I want to be a CPA. I've been fascinated with numbers most of my life. I think I find comfort in the clear-cut, logical rules.~^" , RelatedTopics !--deadend ; topic_c -> m_familydoeswell_t "Milhelm" with response true with query "~Milhelm is an expensive area of town. Your family must live pretty comfortably.~^" , menu_display_alt "Milhelm is an expensive area..." , name 'milhelm' 'finances' 'family' , TopicInformation "~We do okay. My father's a workaholic.~" , RelatedTopics m_father_t ; topic_c -> m_father_t "father" with response true with query "~What does he do? Your father, I mean.~^" , menu_display_alt "What does your father do?" , name 'father' , TopicInformation "~I'm not all that sure to be honest. Something with computers, I think.~^^You nod. ~I hear some people think those things have potential.~^^She giggles.^" , RelatedTopics !--dead end ; topic_c -> m_vampire_t "vampires" with topicinformation "~I used to stay up late at night and watch vampire shows with my father when I was a little girl. At least I did when he wasn't working.~^^You grimace. ~Not exactly Sesame Street.~^^She shrugs. ~It's true. I was too young to be watching those kinds of shows. Vampires scare me even today.~" , relatedtopics d_mummies_t m_father_t , query "~So what do you think about vampires?~ you ask." , name 'vampires' 'dracula' ; topic_c -> m_starwars_t "Star Wars" with response true with query "So you're a Star Wars fan?" , topicinformation "She smiles. ~I love Star Wars... And Star Trek.~^^~I'm surprised. You don't look like a 'Treky,'~ you say.^^~Well, I draw the line at going to conventions, but yes. I tend to like Science Fiction as a whole.~" , relatedtopics d_flashgordon_t , menu_display_alt "So you're a Star Wars fan?" , name 'starwars' 'star' 'wars' 'yoda' ; topic_c -> m_buckrogers_t "Buck Rogers" !--no query, cannot be asked with topicinformation "~My favorite was Buck Rogers in the 24th and a half century,~ she says with a sly look on her face.^^You're beginning to catch on to her joking personality now, but decide to take the bait anyway: ~I think that was 'Duck Dodgers' from a bugs bunny cartoon.~^^~Oh,~ she responds dismissively. ~I hadn't realized.~^^~Yeah, I bet,~ you say, smiling." ; topic_c -> m_garden_t "garden location" with query "~So where exactly is this garden you need a stone scarecrow for?~" , response true , topicinformation "~I keep my garden in the back of our sorority house.~" , relatedtopics m_gardentype_t m_sorority_t , menu_display_alt "So where is this garden?" , name 'garden' 'location' ; topic_c -> m_gardentype_t "garden type" with response true with query "~Do you grow a flower garden, or a vegetable garden?~" , topicinformation "~Vegetable, definitely. I love flowers, but there's something about growing vegetables that I find more satisfying. Also, I'm a vegetarian so it comes in handy.~" , relatedtopics d_vegetarian_t d_cousingarden_t , menu_display_alt "Is it a flower or vegetable garden?" , name 'garden' 'type' ; topic_c -> m_sorority_t "sorority" with query "~What sorority are you in?~" , topicinformation "~I'm in the Chi Lambda sorority,~ the girls says.^^~Oh yes,~ you say recalling an event last summer. ~You held that protest against the death-penalty last year.~^^She smiles at the recognition and nods. ~Yes, it was fairly successful I think. It definitely heightened public awareness.~^^You suddenly feel a little warm. ~I suppose,~ you say and suddenly gain an intense interest in the floor indicator." , relatedtopics d_capitolpunishment_t , menu_display_alt "What sorority are you in?" , name 'sorority' ; !------------------------------------------------------------------------------- ! Orphan Medusa topics (won't come up in the convesation unless the player ! specifically ASKs about them and don't lead to additional conversation ! topics, although they easily could if this game were expanded upon.) !------------------------------------------------------------------------------- topic_c -> m_snakes_t "snakes" with name 'snakes' 'snake' , query "~So,~ you begin with a smile. ~You seem to have quite the affinity for snakes.~" , topicinformation "~Just the rubber kind,~ she responds, and twirls one around her fingers. ~They don't bite.~" ; topic_c -> m_mythology_t "mythology" with name 'mythology' 'greek' 'myths' , query "~Your interest in Greek mythology led you to a medusa costume,~ you comment." , topicinformation "She nods. ~Poor Medusa, an innocent woman just trying to make do in a man's world.~ Her voice almost drips in sarcasm. ~And what does all of her work get her? Decapitation by 'the man'.~ She shakes her head in mock sorrow." ; topic_c -> m_mother_t "mother" with name 'mother' 'mom' , query "~What does your mother do?~ you ask, looking to find more about this enchanting girl's roots." , topicinformation "~She's a homemaker,~ is her matter-a-fact response." ; topic_c -> m_roommate_t "Lisa" with name 'lisa' 'roommate' , query "~Your roommate sounds like she seriously into theatrics.~" , topicinformation "~I like to think of her as a 'drama queen.'~ she responds.^^You smile at this." ; !--------------------------------------------------------------------------------------------------- ! Code !--------------------------------------------------------------------------------------------------- [HandleEnding; !--Were this game to be expanded and multiple endings added. This would be the place to do it. print "^^~Well,~ says the girl. ~It was nice to meet you.~ With that she turns and steps off of the elevator. ^^You watch her blend into the party, mildly disappointed to see her walk away, then shrug it off. ",(italics)"After all",", you think to yourself. ",(italics)" If you could just keep a girl confined in a one-room conversation all the time, there wouldn't be much use for a party, now would there?^^"; ]; [Initialise; AutoShowConverseMenu=true; ChangePlayer(dracula); ConMenu.source=player; print "^^^^It took you a little time to get your vampire costume together, so you've been running late for Gary's costume party. You've arrived now on the ground floor of his high-rise apartment building. Better late than never as they say. ^^The elevator makes a soft jingle as it opens and you step into the mirrored interior. For a moment you think, struggling to remember Gary's floor number... Oh yes, you remember now, ",FLOOR_COUNT,". You reach out and push the appropriate button. The doors begin to close but stop suddenly as a slender hand appears. There's another jingle and the doors open again revealing a beautiful, red-headed girl dressed in a toga. ^^You recognize her from campus although you do not actually know her. For a moment you almost do not see the red rubber snakes entwined with her long red curls. She steps into the elevator and reaches for a button, but stops, apparently seeing that it is already lit. ^^",(italics)"It seems,"," you think as the doors close and the elevator begins to move, ",(italics)"that this ~Medusa~ is going to same costume party that you are.^^^^"; ]; !--------------------------------------------------------------------------------------------------- ! Grammer !--------------------------------------------------------------------------------------------------- #Include "Grammar"; #Include "OR_Library_Include"; !--------------------------------------------------------------------------------------------------- verb meta 'help' 'menu' 'about' 'info' * -> Help; [HelpSub; DoORMenu(HelpSys);]; !--------------------------------------------------------------------------------------------------- end; --------------------------------------------------------------------------------------------------- N O T E S --------------------------------------------------------------------------------------------------- Conversation Map: Because of the complexity, the conversation map has been moved to a better medium. It can be found at the following URL: http://www.onyxring.com/downloads/ORLib%20Examples/medusa%20conversation.jpg