! ########################################################################################################## ! Augmented Fourth Brian Uri!, brian@urizone.net ! Release 3 Inform 6.21 / 6/10 Libraries ! ! ### Copyright #### ! ! The Augmented Fourth story file (Aug4.z8) and source code (Aug4.inf, Misc.inf, Places.inf, Things.inf) ! are copyright ©2000 - 2013 by Brian Uri!. They may be freely distributed; however, they are NOT Public ! Domain. Consider this game commentware: if you would like to reimburse me, please send any and all ! constructive criticism or comments about the game to the above e-mail address. ! ! ### Note from the Author ### ! ! I'm making this code available in the hopes that it will help or inspire someone else to start ! their own Interactive Fiction work. I learned gads by simple diving in, making mistakes, and studying ! the coding styles of various authors in the IF Archive. However, I make no guarantees about the ! quality or correctness of the code. Source code does not age well, especially Inform 6 source code ! from the only game I've ever written. ! ! The source code is split up into four separate files: ! - Aug4.inf contains general purpose stuff like constants, verbs, and defaults. ! - Misc.inf contains shared base classes, custom functions, and tricky code. ! - Places.inf contains all of the rooms and scenery objects. ! - Things.inf contains inventory, books, and NPCs. ! To keep routine structure visible, I grouped some strings into single calls, which often extended for miles ! beyond the width of the screen. I had no problems coding like this in the year 2000, but you may wish to ! turn on Word Wrap. ! ! ### Changes Log ### ! ! Release 1 (April 1, 2000): ! - This was the initial public release. ! Release 2 (July 21, 2009): ! - Fixed a crash bug caused by examining an object in the Fifth Bank of Nolava. ! - Removed a maddening red herring from Finney's House. ! - Removed the random, unenjoyable "chance to fail" from attempts to play your trumpet. ! - Added several default verb actions and new verbs suggested by players. ! - Added a few more gentle hints to one of Leonine's puzzles. ! - Cleaned up source code formatting. ! Release 3 (July 2, 2013): ! - Fixed various bugs related to the "Lively Jig" sheet music. ! - Fixed descriptive text related to the gender of the duck and Madame Fou-llama. ! - Added synonyms for various scenery and inventory objects. ! - Added a few more gentle hints to the Silver Key puzzle. ! - Added a gentle hint to the Bank puzzle. ! - Cleaned up source code formatting. ! ! ### Open Issues ### ! ! - When using the viewscope, room descriptions still appear in the first-person (describing smells and ! such). ! - It would be fun to see into Moilan's house, the widow's private quarters, or the flood quarry with the ! viewscope. ! - If you empty the cup of mud/water indoors, it is absorbed into the ground. Also, NPCs do not notice. ! - TAKE ALL in the Mess Hall doesn't take the fudge, since it is tied to a cutscene. ! ! ### Aug4.inf File Contents ### ! ! Abbreviations ! Game Constants ! Global Variables ! Attributes ! Replacements ! Includes ! Extended Grammar ! ########################################################################################################## Release 3; ! Current Release Number ! ##################### ! ### Abbreviations ### ! ##################### Abbreviate ". " ", " " the " "The" "You" "Leonine" "ing" "Mullog" "you" "and" "Odd Communit" "Papoosen" " th" " to" " of" " granite" " st" " in" " fr" " wa" " ma" " lo" " li" " abo" " hi" " wh" " so" " mo" " with" " is" " wo" " pla" " sh" " de" " duck" " mu" " be" " out" " fi" " cl" " ho" " have" " ch" " noth" " tr" " up" " cou" " qu" " hea" " si" " pu" " doo" "'t see" " pa" " for" " back" " di" " can" " bu" " are" " on" " un" "..." " ro"; ! ###################### ! ### Game Constants ### ! ###################### Constant AMUSING_PROVIDED; ! Display Full Score and Amusing after Win Constant DEATH_MENTION_UNDO; ! Show UNDO after death Constant MAX_CARRIED 10; ! Inventory Limit Constant MAX_SCORE 70; ! Maximum Possible Score Constant NO_PLACES; ! Removes the PLACES and OBJECTS verbs Constant WITHOUT_DIRECTIONS; ! Removes default directions Constant DUCK 1; ! Constants for the 8 Songs Constant RAIN 2; Constant HEAVY 3; Constant JIG 4; Constant LOVE 5; Constant COLOUR 6; Constant LITERAL 7; Constant MODULATE 8; Constant Story "Augmented Fourth"; ! Game Title #IFDEF DEBUG; ! Headline with testing info Constant Headline "^^DEBUG IS ENABLED!!!^^"; #IFNOT; ! Headling without testing info Constant Headline "^An Interactive Performance^(c) 2000-2013 by Brian Uri!, http://www.urizone.net/^Type ~help~ at any time for game information.^"; #ENDIF; ! ############### ! ### Globals ### ! ############### Global gMode = 0; ! 0 = Normal parser / 1 = Consult mode Global gBook; ! Which book is being consulted. ! ################## ! ### Attributes ### ! ################## Attribute asleep; ! NPC Flag Attribute firstTime; ! Actions triggered on first visit Flag Attribute flag; ! All-Purpose Flag (like general but faster to type ;) ) Attribute happy; ! NPC Flag Attribute novisit; ! If Leonine can visit the room. ! #################### ! ### Replacements ### ! #################### Replace BurnSub; Replace ConsultSub; Replace DrawStatusLine; Replace TurnSub; ! ################ ! ### Includes ### ! ################ Include "Parser"; ! Inform Library Include ">Misc"; ! (Aug4 File) Miscellaneous Info Include ">Places"; ! (Aug4 File) Rooms and Scenery Include ">Things"; ! (Aug4 File) Inventory, Books, and People Include "Verblib"; ! Inform Library Include "Grammar"; ! Inform Library ! ######################## ! ### Extended Grammar ### ! ######################## ! ########################################################################################################## ! LIST OF VERBS BY CATEGORY: Verbs to consider when making a new object ! Room Verbs ! Colour, DigRoom, Duck, Heavy, Jig, Listen, Literal, LookDown, LookUp, Love, Modulate, Rain, Shout, ! Sleep, Smell, Think ! Object Verbs ! Attack, Burn, Catch, Climb, Close, Colour, Consult, Count, Cut, Dig, Drink, Drop, Eat, Empty, Enlarge, ! Enter, Examine, Exit, Fill, GetOff, Give, Heavy, Insert, Irrigate, Jump, JumpOff, JumpOver, Knock, ! Learn, Lift, Listen, Literal, Lock, LookUnder, Lower, Modulate, Open, Play, Pull, Push, PushDir, ! PutOn, Remove, Search, Show, Smell, Squeeze, StandUnder, Stretch, Take, Taste, ThrowAt, Tie, Touch, ! Tune, Turn, Unlock, Wave ! NPC Verbs ! Answer, Ask, AskFor, Attack, Bribe, Colour, Cut, Duck, Fill, Give, Greet, Heavy, Jig, Jump, JumpOver, ! Kiss, Lift, Listen, Literal, Love, Lower, Modulate, Pull, Push, Rain, Rub, Show, SingX, Smell, ! Squeeze, Talk, Taste, Tie, Touch, WakeOther, Where, WhoWhat ! # Less Commonly Called Verbs (at least in Aug4) ! Buy, Cachinnate, ClimbDown, Dance, Disrobe, DrinkOil, DuckX, Echo, Fall, Fire, Flail, Follow, ! Forget, Frotz, Glock, Go, GoIn, Hang, Health, Help, Hide, Hum, Inv, InvTall, InvWide, KeepFall, KW., ! Look, Lose, Mild, Ni, Nictitate, No, Nu, Odysseus, Pandiculate, Pick, PlayX, Plugh, Pray, Ruminate, ! Set, SetTo, Sing, Sleep, Sorry, Strong, StopFall, Swim, SwitchOff, SwitchOn, Time, Transfer, ! Ululate, Undress, Wait, Wake, WaveHands, Wear, Whistle, Yawn, Yes ! ! LIST OF ALL VERBS: Every verb in the vocabulary ! New Verbs ! About, Beta, Bribe, Cachinnate, Catch, Cheat, ClimbDown, Count, Dance, DigRoom, DrinkOil, DuckX, Echo, ! Enlarge, Fall, Fire, Flail, Follow, Frotz, Forget, Glock, Greet, Health, Help, Hide, Hum, Irrigate, JumpOff, ! KeepFall, Knock, KW., Learn, Lift, LookUp, LookDown, Lose, Lower, Ni, Nictitate, Nu, Odysseus, Pandiculate, ! Pick, Play, PlayX, Ruminate, Shout, SingX, StandUnder, StopFall, Stretch, Talk, Time, Tune, Ululate, ! Undress, Where, Whistle, WhoWhat, Yawn ! Song Verbs ! Duck, Rain, Heavy, Jig, Love, Colour, Literal, Modulate ! Standard Verbs that just use Before ! Answer, Ask, AskFor, Attack, Blow, Burn, Buy, Climb, Consult, Cut, Dig, Drink, Fill, Jump, JumpOver, ! Kiss, Listen, LookUnder, Mild, No, Pray, Pull, Push, PushDir, Rub, Set, SetTo, Sing, Sleep, Smell, ! Sorry, Squeeze, Strong, Swim, Swing, Taste, Think, ThrowAt, Tie, Touch, Turn, Wait, Wake, WakeOther, ! Wave, WaveHands, Yes ! Standard Verbs that sometimes reach After ! Close, Disrobe, Drop, Eat, Empty, Enter, Examine, Exit, GetOff, Give, Go, GoIn, Insert, Inv, InvTall, ! InvWide, Lock, Lock, Open, PutOn, Remove, Search, Show, SwitchOff, SwitchOn, Take, Transfer, Unlock, ! Wear ! Standard META Verbs ! Fullscore, LMode1, LMode2, LMode3, NotifyOff, NotifyOn, Objects, Places, Pronouns, Quit, Restart, ! Restore, Save, Score, ScriptOff, ScriptOn, Verify, Version ! Standard DEBUG Verbs ! ActionsOff, ActionsOn, CommandsOff, CommandsOn, CommandsRead, Gonear, Goto, Predictable, RoutinesOff, ! RoutinesOn, Scope, TimersOff, TimersOn, TraceLevel, TraceOff, TraceOn, XAbstract, XPurloin, XTree ! ########################################################################################################## Verb meta "about" * -> Help; Verb "apologize" * -> Sorry; Verb "beg" * "for" noun -> Pray * noun "for" noun -> AskFor; Verb "bribe" * noun -> Bribe; Verb "bitch" * -> Strong * topic -> Strong; Verb "build" "construct" * noun -> Construct; Verb "cachinnate" * -> Cachinnate; Verb "carve" "rip" "saw" "tear" * noun -> Cut * noun "with" held -> Cut; Verb "catch" * noun -> Catch; Extend "climb" * "in" noun -> Climb * "on" noun -> Climb * "through" noun -> Climb * "down" noun -> ClimbDown; Verb "continue" * "falling" -> KeepFall; Verb "cook" * noun -> Burn; Verb "count" * noun -> Count; Extend "cut" * noun "with" held -> Cut * "down" noun "with" held -> Cut; Verb "dance" * -> Dance; Verb "dent" "kick" * noun -> Attack; Extend only "die" replace * -> Suicide; Extend "dig" replace * -> DigRoom * noun -> Dig * noun 'with' held -> Dig * "through"/"in" noun -> Dig * "hole" -> DigRoom * "hole" "in" noun -> Dig; Extend "disrobe" first * -> Undress; Extend "dive" * "in" noun -> Enter; Extend "drink" last * "trumpet" "oil" -> DrinkOil; Extend "eat" replace * noun -> Eat; Verb "echo" * -> Echo; Verb "enlarge" "widen" * noun -> Enlarge; Extend "examine" first * "me" -> MeLook; Verb "fall" * -> Fall; Extend "feel" first * "me"/"self" -> MeFeel; Extend "fill" * noun "with" noun -> Insert reverse; Verb "fire" "launch" "shoot" * noun -> Fire * noun "at" noun -> Fire; Verb "flail" * -> Flail * 'helplessly' -> Flail; Verb "fly" * -> Fly; Verb "follow" * topic -> Follow; Verb "forget" * topic -> Forget; Verb "frotz" "rezrov" "plover" "zork" "abracadabra" * -> Frotz; Extend "get" replace * 'out'/'off'/'up' -> Exit * multi -> Take * 'in'/'into' noun -> Enter * 'on'/'onto' noun -> Climb * 'off' noun -> GetOff * multiinside 'from' noun -> Remove * "out" "of" noun -> Exit; Verb "glock" * -> Glock * noun -> Glock; Extend "go" * "down" noun -> Enter * "to" noun -> Enter; Verb "grab" "grasp" * "at" noun -> Take * noun -> Take; Verb "greet" * noun -> Greet; Verb "hang" * noun -> Hang; Verb "health" "diagnose" * -> Health; Verb "hello" * "sailor" -> Frotz; Verb "hide" * -> Hide; Verb "hum" * -> Hum * topic -> SingX; Verb meta "help" * -> Help; Extend "jump" * "in"/"on" noun -> Jump * "off" noun -> JumpOff; Verb "keep" * "falling" -> KeepFall * "on" "falling" -> KeepFall; Verb "kw" * "stop" -> KeywordOff * topic -> Keyword; Extend "kill" first * "me"/"self" -> Suicide; Extend 'kill' * topic -> Attack; Verb "knock" * "on"/"at" noun -> Knock; Extend "lock" first * noun -> LockKey; Extend "look" first * "up" -> LookUp * "down" -> LookDown * "at" "me"/"self" -> MeLook; Extend "look" last * "on" noun -> Examine * "up" noun -> Search * "behind" noun -> LookUnder; Verb "learn" "memorize" "memorise" * noun -> Learn; Verb "lose" * -> Lose; Verb "lower" * noun -> Lower; Verb "lick" * noun -> Taste; Verb "lift" "raise" "elevate" * noun -> Lift * "up" noun -> Lift; Verb "make" * noun "bigger"/"larger" -> Enlarge * noun -> Construct * topic -> Construct * "hole" "in" noun -> Dig * "hole" -> DigRoom; Verb "ni" * -> Ni; Verb "nictitate" * -> Nictitate; Verb "noodle" * 'on' noun -> Play; Extend "notify" replace * -> Notify * "on" -> Notify * "off" -> Notify; Verb "nu" * -> Nu; Verb "odysseus" * -> Odysseus; Verb "pandiculate" * -> Pandiculate; Verb "peer" * "in" noun -> Search; Verb "pet" * noun -> Touch; Extend "pick" last * noun -> Pick; Verb "pour" * noun "on"/"in" noun -> Insert; Verb "play" * noun -> Play * topic -> PlayX; Verb "plugh" * -> Plugh; Verb "practice" "practise" * -> Practice * noun -> Practice; Extend "pronouns" replace * -> Pronoun; Extend "put" * noun "under" noun -> PutUnder; Verb "quack" * -> Quack * 'at' noun -> Quack; Verb "reach" * "for" noun -> Take * 'in' noun -> Search; Extend "read" replace * noun -> Read * "about" topic "in" noun -> Consult * topic "in" noun -> Consult; Extend "remove" first * "clothes"/"clothing" -> Undress; Verb "roll" * noun -> Push * noun noun -> PushDir; Verb "ruminate" * -> Ruminate; Extend "say" first * 'odysseus' -> Odysseus; Verb "scream" "shriek" * -> Shout; Verb "shake" * noun -> Wave; Extend only "shout" replace * -> Shout * 'at' noun -> Shout; Extend "sing" last * topic -> SingX; Verb "slide" * noun -> Push * noun noun -> PushDir * noun 'to' noun -> Transfer; Extend "smell" first * "me"/"self" -> MeSmell; Extend "stand" * "under" noun -> StandUnder; Verb "stop" * "falling"/"fall" -> StopFall; Verb "stretch" * noun -> Stretch; Extend "swim" * "in" noun -> Swim; Extend "take" first * "off" "clothes" -> Undress * "off" "clothing" -> Undress; Verb "talk" * "to" noun -> Talk; Extend "taste" first * "me"/"self" -> MeEat; Extend "think" * "happy" "thoughts" -> Think; Extend "throw" * held "through" noun -> ThrowAt; Verb "time" "hour" * -> Time; Verb "tip" * "over" noun -> Push; Extend "touch" first * "me"/"self" -> MeFeel; Verb "tune" * noun -> Tune; Verb "ululate" * -> Ululate; Verb "undress" * -> Undress; Extend "unlock" first * noun -> UnlockKey; Verb "vandalize" "deface" * noun -> Cut * noun "with" held -> Cut; Verb "wash" * noun -> Rub; Verb "water" * noun -> Irrigate; Verb "where" * IsAmAre -> Where * IsAmAre topic -> Where; Verb "whistle" * -> Whistle; Verb "who" "what" * IsAmAre -> WhoWhat * IsAmAre topic -> WhoWhat; Verb "wobble" "jiggle" * noun -> Push; Verb "win" * -> Win * "game" -> Win; Verb "yank" * noun -> Pull * 'on' noun -> Pull; Verb "yawn" * -> Yawn; Verb "yell" * -> Shout; Verb "xyzzy" * -> Xyzzy; IFDEF DEBUG; Verb meta "cheat" * topic -> Cheat; ENDIF; IFDEF DEBUG; ! Cheat command should only compile in DEBUG mode [CheatSub w; ! Give essential goodies to the player. wn = consult_from; w = NextWord(); switch (w) { 'inv': move cupMud to player; move mirror to player; move herring to player; move lostRing to player; move boxKey to player; move doorKey to player; move endDoor to player; move rubber to player; move instructions to player; "Inventory Cheat."; 'leo': give Leonine firstTime; move Leonine to Void; give Leonine general; StartDaemon(Leonine); "Leonine Daemon started."; 'songs': SongBag --> 1 = 1; SongBag --> 2 = 1; SongBag --> 3 = 1; SongBag --> 4 = 1; SongBag --> 5 = 1; SongBag --> 6 = 1; SongBag --> 7 = 1; "All songs learned."; 'tpt': move trumpet to player; give trumpet flag; "Trumpet given magic."; default: "[Syntax: CHEAT xxxxx]"; } ]; ENDIF; [BribeSub; "You can't bribe ", (the) noun, "."; ]; [BurnSub; "You don't have anything to make a fire with."; ]; [CachinnateSub; "You laugh noisily."; ]; [CatchSub; "Catching ", (the) noun, " would not accomplish much."; ]; [ClimbDownSub; "You can't climb down ", (the) noun, "."; ]; [ColourSub; if (NPCinRoom()) (AffectNPC(COLOUR)); else "You play a melody brimming with runs and arpeggios. The world around you seems a little brighter but nothing else happens."; ]; [ConstructSub; "You cannot build that."; ]; [ConsultSub; if (~~(noun ofclass BookObj)) "You can't look things up in there."; noun.consult(); rtrue; ]; [CountSub; "You practice your number skills."; ]; [DanceSub; "You shuffle your feet to an unheard melody."; ]; [DigRoomSub; "Unless you have a treasure map, digging here would be a waste of time."; ]; [DrinkOilSub; "You don't have any on you, but drinking trumpet oil is not particularly beneficial to your health anyhow."; ]; [DuckSub; if (theDuck in location || parent(theDuck) in location) "The melody echoes through the air but nothing happens."; if (fishBomb in location || fishBomb in player) "Oddly, no ducks arrive at your call. Perhaps self-preservation ranks higher than magical summoning."; give theDuck ~asleep; move theDuck to location; "As soon as you sound the final cadence, a duck appears in front of you."; ]; [EchoSub; "A hollow voice says, ~Echo...~."; ]; [EnlargeSub; "You can't make ", (the) noun, " any larger."; ]; [FallSub; "Summer is much more pleasant."; ]; [FireSub; if (noun == player) "You cannot shoot yourself."; "", (The) noun, " cannot be fired."; ]; [FlailSub; "That would just make you look foolish."; ]; [FlySub; "You flap your arms determinedly, but gravity defeats you."; ]; [FollowSub; "(To follow someone, simply go in the direction they did once they leave the area)"; ]; [ForgetSub song w; wn = consult_from; w = NextWord(); switch (w) { 'ode', 'duck': song = DUCK; 'rainy', 'day', 'rain': song = RAIN; 'heavy', 'heart': song = HEAVY; 'lively', 'jig': song = JIG; 'springtime', 'love': song = LOVE; 'dab', 'colour', 'indigo': song = COLOUR; 'literal', 'melody': song = LITERAL; 'modulate', 'modulation', 'spirit': song = MODULATE; 'song', 'songs', 'music', 'tune', 'tunes': "There's no reason to forget any music."; default: "You don't know that particular ditty."; } if (SongBag --> (song - 1) || (song == JIG && JigMusic in player)) "You've always had a hard time forgetting music after learning it. Today is no exception."; "You don't know that particular ditty."; ]; [FrotzSub; "Nothing happens. You get the feeling that perhaps you're in the wrong game."; ]; [GlockSub; "You swallow in large gulps, but nothing happens."; ]; [GreetSub; "You say hello."; ]; [HangSub; "You can't hang that here."; ]; [HealthSub; switch (location) { FallingPit: "You feel a little gravitationally inclined at the moment."; PitBottom: if (PitBottom hasnt flag) "Other than being a little sore, you are thankfully unharmed."; Maze: "You feel disoriented and confused."; default: print_ret (string) random("You are feeling fine. A serious wound from a gold-tined pitchfork could probably kill you. ", "You are feeling pretty good at the moment. ", "You feel pretty good. "); } ]; [HeavySub; if (NPCinRoom()) AffectNPC(HEAVY); else "The threnody seems to weigh upon your soul, but no physical effects can be seen."; ]; [HelpSub; DoMenu(HelpPrint, HelpMenu, HelpInfo); ]; [HideSub; if (NPCinRoom()) "You can't hide while someone's watching."; "There's nobody to hide from."; ]; [HumSub; "You hum a little ditty to yourself."; ]; [IrrigateSub; "That doesn't need water."; ]; [JigSub; if (NPCinRoom()) AffectNPC(JIG); else "You play a lively toe-tapping gigue, which puts you in a brighter mood. However, nothing else happens."; ]; [JumpOffSub; "There's no reason to jump off ", (the) noun, "."; ]; [KeepFallSub; "You aren't falling at the moment."; ]; [KeywordSub; wn = consult_from; if (NextWord() == 'close' && NextWord() == 'book') gBook.endConsult(); else gBook.consult(); ]; [KeywordOffSub; gBook.endConsult(); ]; [KnockSub; if (noun has animate) "That wouldn't be very courteous."; "You rap on ", (the) noun, ". There is no reply."; ]; [LearnSub; "That's not something you can easily learn."; ]; [LiftSub; "", (The) noun, " can't be lifted."; ]; [LiteralSub; "The marcato accents of the song jar your thoughts but nothing seems to happen. Perhaps you should play it near one of the many large purple vault doors in the area."; ]; [LockKeySub; if (noun == BSafe) { if (boxKey in player) { print "(with the copper key)^"; <>; } else "You don't seem to have the proper key."; } else if (noun == endDoor) { if (doorKey in player) "The door is already locked."; else "The keyhole seems to have disappeared."; } else if (noun == PADoor) <>; else "That doesn't seem to be something you can lock."; ]; [LookUpSub; "You crane your neck looking up."; ]; [LookDownSub; "You look down at your feet."; ]; [LoseSub; style bold; print "^^ *** You have won...or lost, actually ***^^^"; style roman; "Somewhere in the back of your mind, a hollow voice snickers and mutters, ~Heh...loser.~ "; ]; [LoveSub; if (NPCinRoom()) AffectNPC(LOVE); else "A pleasing suspension of major sevenths outlines this lovely melody. Nothing happens though."; ]; [LowerSub; "", (The) noun, " can't be lowered."; ]; [MeEatSub; "You lick your arm."; ]; [MeFeelSub; "You feel like you always have."; ]; [MeLookSub; if (player in OfficeDark) "You can't see yourself."; if (player in FallingPit or PitBottom or NarrowPass or StoneQuarry or QuarryEntrance) "You're looking a bit worse for the wear."; "You're looking quite spiffy today."; ]; [MeSmellSub; "You sniff yourself."; ]; [ModulateSub; "The melody jumps from E major to Bb minor and back again, providing a welcome change of pace from dull diatonic dances. However, nothing seems to have been affected."; ]; [NiSub; "Very good."; ]; [NictitateSub; "You wink."; ]; [NuSub; "No, no. ~NI~. ~Eneeh~."; ]; [NotifySub; print "Notify is now set to ~", (string) random("Only When Scored", "Papoosen-Controlled", "Grey Platypus", "Flannel Hat", "Squinky the Orangutan", "Might Be On/Might Be Off", "You'll Never Know", "Dit-Dah-Dit"); "~ mode."; ]; [OdysseusSub; "If there were a cyclops nearby, no doubt it'd be fleeing in terror."; ]; [PandiculateSub; "You yawn widely."; ]; [PickSub; "You can't pick that."; ]; [PracticeSub; if ((noun == trumpet && trumpet in player) || (noun == nothing && trumpet in player)) "You practice on the trumpet for a few minutes."; if (noun == trumpet && trumpet notin player) "You aren't holding the trumpet."; if (noun == OHXylophone or MSPiano) "You wouldn't know where to begin."; if (noun == nothing) "You'll have to specify what you want to practice."; "You can't practice that."; ]; [PronounSub; LibraryMessages.nounCount++; if (LibraryMessages.nounCount == 1) print "Pronouns: pl. n. A group of nouns which have scored more than fifty points.^"; <>; ]; [PlaySub; "You can't play that."; ]; [PlayXSub song w; if (trumpet notin player) "You can't play a song without your trumpet."; if (player in Endgame or UpperBalcony) <>; wn = consult_from; w = NextWord(); switch (w) { 'ode', 'duck': song = DUCK; 'rainy', 'day', 'rain': song = RAIN; 'heavy', 'heart': song = HEAVY; 'lively', 'jig': song = JIG; 'springtime', 'love': song = LOVE; 'dab', 'colour', 'indigo': song = COLOUR; 'literal', 'melody': song = LITERAL; 'modulate', 'modulation', 'spirit': song = MODULATE; 'song', 'songs', 'music', 'tune', 'tunes': <>; default: "You don't know that particular ditty."; } if (song == DUCK && trumpet.countSongs() == 1) ! No magic before meeting Leonine <>; trumpet.playPick(song); ]; [PlughSub; "A hollow voice asks, ~How do you pronounce that, anyways?~ "; ]; [PutUnderSub; "That doesn't seem to accomplish anything."; ]; [QuackSub topic; if (theDuck notin location && parent(theDuck) ~= location) "You quack, feeling foolish."; topic = 'quack'; <>; ]; [RainSub; "The melody echoes through the air but nothing happens. You sense that something is missing."; ]; [ReadSub; <>; ]; [RuminateSub; "You ponder the events of the day."; ]; [ShoutSub; "You shout as loud as you can. Nothing happens, but your blood pressure goes down a bit."; ]; [SingXSub song w; wn = consult_from; w = NextWord(); switch (w) { 'ode', 'duck': song = DUCK; 'rainy', 'day', 'rain': song = RAIN; 'heavy', 'heart': song = HEAVY; 'lively', 'jig': song = JIG; 'springtime', 'love': song = LOVE; 'dab', 'colour', 'indigo': song = COLOUR; 'literal', 'melody': song = LITERAL; 'modulate', 'modulation', 'spirit': song = MODULATE; 'song', 'songs', 'music': <>; default: "You don't know that particular ditty."; } if (SongBag --> (song - 1) || (song == JIG && JigMusic in player)) { switch (song) { DUCK: "You hum the tune from ~Ode to a Duck~, but nothing happens."; RAIN: "You hum the tune from ~Rainy Day~, but nothing happens."; HEAVY: "You hum the tune from ~Heavy Heart~, but nothing happens."; JIG: "You hum the tune from ~Lively Jig~, but nothing happens."; LOVE: "You hum the tune from ~Springtime Love~, but nothing happens."; COLOUR: "You hum the tune from ~Dab of Colour~, but nothing happens."; LITERAL: "You hum the tune from ~Literal Melody~, but nothing happens."; MODULATE: "You hum the tune from ~Spirit of Modulation~, but nothing happens."; } } "You don't know that particular ditty."; ]; [StandUnderSub; "You can't stand underneath ", (the) noun, "."; ]; [StretchSub; "Stretching ", (the) noun, " would serve no purpose."; ]; [StopFallSub; "You aren't falling at the moment."; ]; [SuicideSub; deadflag = 1; print "With great determination, you will yourself to die. As your life ebbs away, your last thought is one of amazement at the power of the human mind."; " You wonder if you could just have easily won by thinking about it..."; ]; [TalkSub; "Talking to ", (the) noun, " accomplishes nothing."; ]; [TimeSub; print "It's "; switch (Cutscenes.count) { 0: print "dawn"; 1: print "early morning"; 2: print "midmorning"; 3: print "around noontime"; 4: print "sometime in the afternoon"; 5: print "late afternoon"; 6: print "evening"; 7: print "sunset"; } " in Central Papoosen."; ]; [TuneSub; "You cannot seem to tune that."; ]; [TurnSub; if (ObjectIsUntouchable(noun)) return; if (noun has static) return L__M(##Turn,1,noun); if (noun has scenery) "There's no reason to turn ", (the) noun, "."; if (noun == player) "You turn around."; if (noun has animate) return L__M(##Pull,4,noun); L__M(##Turn,3,noun); ]; [UlulateSub; "You wail loudly."; ]; [UndressSub; "Wrong game. Papoosen doesn't even have any interstates."; ]; [UnlockKeySub; if (noun == BSafe) { if (boxKey in player) { print "(with the copper key)^"; <>; } else "You don't seem to have the proper key."; } else if (noun == endDoor && endDoor has lockable) { if (doorKey in player) { print "(with the silver key)^"; <>; } else "You don't seem to have the proper key."; } else if (noun == PADoor) <>; else "That doesn't seem to be something you can unlock."; ]; [WhereSub; "(To ask this kind of question, try something like JOHN, WHERE IS JIM?) "; ]; [WhistleSub; "You whistle like a songbird."; ]; [WhoWhatSub; "(To ask this kind of question, try something like JOHN, WHAT IS A TRUMPET?) "; ]; [WinSub; style bold; print "^^ *** You have won ***^^^"; style roman; "Somewhere in the back of your mind, a hollow voice snickers and mutters, ~Heh...not bloody likely.~ "; ]; [XyzzySub; ControlRoom.lastRoom = location; if (ControlRoom.visits == 10) { ControlRoom.visits++; "Nothing happens. But a hollow voice in the back of your mind, which sounds suspiciously like Lenny the Head Gnome mutters, ~Heh...fool.~ "; } else if (ControlRoom.visits > 10) "A hollow voice in the back of your mind mutters, ~Heh...fool.~ "; print "You feel a tugging sensation at the tips of your toes. Without warning, you suddenly wink out of existence...^"; PlayerTo(ControlRoom); ]; [YawnSub; "You yawn widely."; ];