"Blue Lacuna" by "Aaron A. Reed" [Blue Lacuna should be compiled with Inform build 5Z71. Note that the Glulx interpreter in the "Game" panel will not properly run this version of the game; to play, you'll have to "Release" the story and use an external interpreter. ] [All versions of Blue Lacuna and its source code are released under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 license. In summary, you may freely distribute, perform, or create derivative works, but not for commercial purposes without permission from the author. More information is available at http://creativecommons.org/licenses/by-nc-sa/3.0/us/.] Include Legacy Extensions for Blue Lacuna by Blue Lacuna. [This extension contains snapshots of the following extensions as they existed at the time of Blue Lacuna's release: Smarter Parser by Aaron Reed, Poor Man's Mistype by Aaron Reed, Epistemology by Eric Eve, Remembering by Aaron Reed, Default Messages by David Fisher, Glulx Entry Points by Emily Short, Glulx Text Effects by Emily Short, Flexible Windows by Jon Ingold, Simple Debugger by Michael Hilborn, Plurality by Emily Short, Improved Menus by Aaron Reed (based on Basic Menus by Emily Short), Intelligent Hinting by Aaron Reed, and Numbered Disambiguation Choices by Aaron Reed.] Volume - Core Part - Definitions & Setup The story headline is "An Interactive Novel In Ten Chapters". The story genre is "Fiction". The release number is 4. The story description is "You have always been different. One in a trillion have your gift, your curse: to move between worlds, never settling, always alone. To Wayfare. Yet there are others like you, and something stronger than coincidence binds you together, bumps your lives against each other like charged particles. Now you feel the Call again, and know another of your kind is in need. But when you arrive there are no answers. Just an old man with fraying sanity and a long-buried secret. A tropical paradise more alive than it seems. And a conflict left unresolved that could change the course of two civilizations forever. There are no easy choices, wayfarer. Your decisions will shape the fate of many things. Three worlds. Two lives. And what your own story will become.". The story creation year is 2009. Use fast route-finding. Use the serial comma. Use no scoring. Use full-length room descriptions. Use MAX_PROP_TABLE_SIZE of 3000000. Use MAX_SYMBOLS of 100000. Use MAX_STATIC_DATA of 100000. Use MAX_OBJECTS of 6000. Use MAX_DICT_ENTRIES of 10000. Use MAX_ACTIONS of 500. Use MAX_VERBS of 500. Use MAX_VERBSPACE of 12000. Use MAX_STATIC_DATA of 6000000. Use MAX_NUM_STATIC_STRINGS of 50000. Use MAX_EXPRESSION_NODES of 200. Use MAX_OBJ_PROP_COUNT of 100. Use ALLOC_CHUNK_SIZE of 30000. Use MAX_ARRAYS of 3000. Use MAX_ZCODE_SIZE of 100000. Use MAX_LABELS of 20000. Release along with cover art, the source text, a website, a file of "Legacy Extensions" called "Legacy Extensions for Blue Lacuna.i7x". Your Bedroom is a room. [ So we start in this room.] UnRoom is a room. Chapter - Intelligent Hinting Understand the command "solve" as something new. Understand the command "suggest" as something new. [ For this release, we haven't fully enabled IH.] Winning-The-Game requires Homeworld-Sequence, Lacuna-Sequence, Twoworlds-Sequence, Endgame-Sequence. Extended-hint-mode is a truth state that varies. Extended-hint-mode is true. [ true=Intelligent Hinting includes hints and color. false=bare minimum path to finish the game.] Homeworld-Sequence is a puzzle. Lacuna-Sequence is a puzzle. Twoworlds-Sequence is a not sequential puzzle. It requires Rebelworld-Sequence, Treeworld-Sequence. Endgame-Sequence is a puzzle. [ Finding-The-Egg is a task. Powering-Both-Devices is a task. Opening-The-Pyramid is a task. Contacting-All-The-Trees is a task.] [ Reaching-Rebelworld is a task. Finishing-Rebelworld is a task. Reaching-Treeworld is a task. Finishing-Treeworld is a task.] Completing-Progue's-Character-Arc is a puzzle. Finishing-the-Epilogue is a task. Meeting-Progue is a task. Chapter - Smarter Parser Table of Extended Smarter Parser Messages (continued) therule message signs of confusion rule "[as the parser]Look for emphasized object keywords ([o]things[x] you can examine) or emphasized [o]exit[x] keywords (places you can go). Type a single keyword and press enter to advance. If you can't see the emphasis on the keywords, type KEYWORDS. Type LOOK to get a fresh description of your surroundings. Type HELP to get access to more detailed instructions." unnecessary movement rule "[as the parser]Usually, you won't need to move within a single location; everything you can see is usually touchable. If you're trying to get somewhere that's not nearby, use emphasized [d]exits[x] keywords to move from one location to another, or type [d]landmark[x] to see a list of areas you can quickly move beween.[as normal]" asking random questions rule "[as the parser]You can't ask direct questions to the game. Try typing an emphasized keyword (or LOOK if you don't see any on the screen) or HELP for more instructions.[as normal]" making assertions rule "[as the parser]Please rephrase your command by typing just an emphasized keyword, or a verb like LOOK. Type HELP for more info.[as normal]" starting command with i rule "[as the parser]Please rephrase your command by typing just an emphasized keyword, or a verb like LOOK. Type HELP for more info.[as normal]" Section - Lacuna Print Rule (in place of Section - The Print Rule in Legacy Extensions for Blue Lacuna by Blue Lacuna) To print explanation for (why - a rule): if sp-debug is true, say "(smart parser debug: printing message for [why])[command clarification break]"; if there is a therule of why in Table of Extended Smarter Parser Messages: choose row with a therule of why in Table of Extended Smarter Parser Messages; say "[as the parser][message entry][as normal]"; otherwise if there is a therule of why in Table of Smarter Parser Messages: choose row with a therule of why in Table of Smarter Parser Messages; say "[as the parser][message entry][as normal]". Chapter - Misc Setup Conditions The can't act in the dark rule is not listed in any rulebook. The adjust light rule is not listed in any rulebook. The check light in new location rule is not listed in any rulebook. [ We don't use the default light/dark model, so might as well declutter the rulebooks.] The examine described devices rule is not listed in any rulebook. To decide whether parser error is did not make sense in this context: (- (etype == ASKSCOPE_PE) -) To say notsurewhatyoumeant: if location is regionally in Dreamlands: say "You can't seem to.[run paragraph on]"; [ This is mostly because we tend to flippantly refer to a lot of things in the dreams that aren't actually there.] otherwise: if notsure_num is turn count, increase frust_ctr by 1; otherwise now frust_ctr is 0; say "[if frust_ctr is 2]I seem to be having difficulties understanding you. I apologize! Remember, I'm only likely to understand the emphasized keywords you see in the prose: [o]nouns[x], [d]directions[x], or [t]topics[x]. If a word is not emphasized, it's a good bet I won't understand it. Type keywords alone, or try combining them with basic verbs to do more complex actions. (Type VERBS to see a full list: if a verb is not on the list, it's a good bet I won't understand that, either.)[paragraph break]If you don't see any keywords, try pressing enter by itself, or typing LOOK, to get a fresh description of your surroundings and new keywords to try. You can also type HELP at any time for more detailed instructions[otherwise]Sorry, I'm not sure what you meant. [nearbypersonbit]Try LOOK to reorient yourself to your surroundings, or HELP for more instructions[end if]"; now notsure_num is turn count. [ The rule related to this is in the conversation "Not Understanding" section. ] notsure_num is a number that varies. frust_ctr is a number that varies. To say nearbypersonbit: if an idle nonbestial other person is enclosed by location: unless tutorial mode is switched on, say "If you were trying to speak to [a random idle nonbestial other person enclosed by location], try typing HELLO first. "; otherwise if a nonbestial other person is enclosed by the location: say "If you were trying to speak to [a random nonbestial other person enclosed by location], try typing an emphasized keyword from recent dialogue. ". Chapter - Beginning Play [The functionality here, to ensure the player gets to choose keywords they can see before the game proper begins, was later worked into the Highlighted Keywords extensions.] When play begins: follow the very-beginning rule. This is the very-beginning rule: clear the screen; if Milestone mode is true or final release mode is true begin; let ready-to-go be false; let show-toc be false; say "Welcome to [o]Blue Lacuna[x], release [release number].[paragraph break]If no words above were [one of]blue[or]emphasized[stopping], press K now.[paragraph break]Press [t]N[x] to begin from the beginning, [t]R[x] to restore an existing story, or [t]C[x] to show the Table of Contents."; while ready-to-go is false begin; let k be 0; while k is 0 begin; let k be the chosen letter; end while; if k is 82 or k is 114, restore the game; [ restore ] if k is 67 or k is 99 begin; now ready-to-go is true; now show-toc is true; end if; [ table ] if k is 75 or k is 107 begin; try setting the keyword style; stop; end if; if k is 89 or k is 121 begin; [ yes ] try setting screen reader mode; say "[paragraph break]Press any key to continue."; wait for any key; now k is 78; end if; if k is 78 or k is 110 begin; [ new ] now ready-to-go is true; end if; end while; end if; if show-toc is true, show table of contents; else clear the screen. To restore the game: (- RESTORE_THE_GAME_R(); -). To restart the game: (- @restart; -). Part - Beta Testing [ Include Simple Debugger by Michael Hilborn. ] Section - Milestone mode Milestone mode is a truth state that varies. Milestone mode is false. Final release mode is a truth state that varies. Final release mode is true. [ These two set up different testing environments. Milestone mode was for frequent releases to testers, and included special prompts to save transcripts and certain testing commands.] First After reading a command when milestone mode is true (this is the ignore beta-comments rule): if the player's command matches the regular expression "^\p" begin; speak as the parser "Comment noted."; reject the player's command; end if. Section - Hacks (not for release) Include (- [ XTreeSub; print "***In debug mode this conflicts with the test command 'tree'; try typing 'tree9' instead.***^^"; ]; -) instead of "Tree Command" in "Tests.i6t". [ This prevents the tester who haplessly types the highlighted keyword "tree" from being buried in an epic poem's worth of debugging code.] Chapter - Fast Forward [ A testing command to quickly jump forward through the major sections of the story. The fast-forward rules are defined in each of the individual sections, making adjustments to the game world so that conditions will be the same as if the entire game has been played to this point.] Fast-forward is an object-based rulebook. Section - The Fast Forward Command Ffing is an action applying to nothing. Understand "ff" as ffing. Carry out ffing: now yourself is awake; if Finishing-the-Prologue is unsolved begin; follow the fast-forward rules for Finishing-The-Prologue; speak as the parser "BETA: **advanced to Exploring Homeworld**[line break](You make a few key decisions.)"; otherwise if Starting-The-Painting is unsolved; follow the fast-forward rules for Starting-the-Painting; speak as the parser "BETA: **advanced to Rume-Conversation**[line break](You learn some things about yourself: that you are a Wayfarer, a traveller between worlds, who tonight feels the Call, a bond between your kind. Though you have toyed with settling down with Rume, who you may be in love with, the Call pulls at you insistently. But if you answer it by painting, you will not be able to return, for a Wayfarer's journey is one way only, and none may go with him.)"; otherwise if Finishing-The-Painting is unsolved; follow the fast-forward rules for Finishing-the-Painting; speak as the parser "BETA:**advanced to Exploring Lacuna**[line break](After a final conversation with Rume, you have answered the call, and Wayfared to another world through your painting of a curious tree.)"; otherwise if Meeting-Progue is unsolved; follow the fast-forward rules for Meeting-Progue; speak as the parser "BETA:**met Progue**[line break]You find yourself on a tropical island, deserted save for a half-mad old man named Progue.)[if The-Mysterious-Door is incomplete]yes[else]no"; otherwise if The-Mysterious-Door is unsolved; follow the fast-forward rules for The-Mysterious-Door; speak as the parser "BETA:**advanced to lava door puzzle solved**[line break](Various signs of former inhabitation abound: an old treehouse with a clockwork head, a non-working ropeway leading to the top of the island's highest mountain, a cabin on a beach. It seems the past residents must have been artists, for there are two beautiful paintings in the cabin-- the work of Wayfarers?-- and a spectacular sculpture on the lip of the island's volcano. A secret door in the cabin inscribed with a cipher finally opens to you after you match the bands of color painted on it to animals and plants around the island used to make the paints.)"; otherwise if Getting-To-The-Lawn is unsolved; follow the fast-forward rules for Getting-To-The-Lawn; speak as the parser "BETA:**advanced to power chairlift puzzle solved**[line break](On the floor of the volcano you discover a boiler, channelling steam power to various points around the island. One of these is the ropeway, which, once powered, takes you to the top of the mountain, where a strange pyramid object awaits.)"; otherwise if Finding-The-Egg is unsolved; follow the fast-forward rules for Finding-The-Egg; speak as the parser "BETA:**advanced to Find the Egg puzzle solved**[line break](On the east side of the island is a huge beehive, and various clues have led you to believe the bees are key to discovering some secret deep within the nearby rain forest. After watching the bees inside the hive do their strange dance, you finally manage to decipher its meaning, and follow the bees to a discovery deep within the forest. Meanwhile you have befriended Progue, whose memory is slowly beginning to return to him, and have been having a series of very strange dreams, where two entities both seem to be trying to reach you.)"; otherwise if Powering-Both-Devices is unsolved; follow the fast-forward rules for Powering-Both-Devices; speak as the parser "BETA:**advanced to Power Both puzzle solved (climbing variation)**[line break](To get to the pyramid, which the dreams and Progue are both hinting is somehow important, you must use the ropeway, but when it is powered there isn't enough left over power to run the pyramid, which seems to need an extraordinary amount. Fortunately, you are able to figure out a way to bypass the ropeway and get to the top of the mountain anyway, with the pyramid at full power.)"; otherwise if Opening-The-Pyramid is unsolved; follow the fast-forward rules for Opening-The-Pyramid; speak as the parser "BETA:**advanced to Pyramid Opened puzzle solved**[line break](The symbols on the sides of the pyramid sync up with symbols in an echoing cave beneath your rain forest discovery. After piecing together more clues, you realize the echo cave is some sort of security system enacted by Progue; only people who know his names for things around the island will be able to get in. After working out the puzzle you return to the pyramid and are able to open it.)"; otherwise if Contacting-All-The-Trees is unsolved; follow the fast-forward rules for Contacting-All-The-Trees; speak as the parser "BETA:**advanced to All Trees Found (tree PW: [tree-password]; rebel PW: [rebel-password])**[line break](The dreams have led to a shocking revelation: one of the groups trying to reach you is actually a race of intelligent, telepathic beings: the trees, who are reliant on a symbiont race of human-like creatures to be their eyes, ears, and hands. Your forest discovery was the crashed ship the trees arrived in on this island; they lived while the symbiont humans died. The other group trying to reach you in dreams is from a mirrored world where the opposite ocurred: the trees died and the humans lived, and, force to think and fend for themselves, have decided they aren't so keen on their former 'masters.' By finding all the trees on the island, you are able to learn the whole story, and set encryption keys that will allow you to communicate in secret with either side (see passwords above). You have also calibrated the seiver device inside the pyramid, and are ready to begin.)"; otherwise if Being-In-Rebelworld is unsolved; follow the fast-forward rules for Being-In-Rebelworld; speak as the parser "BETA:**advanced to Rebel World**[line break](Setting the seiver for the human symbionts, you activate the link.)"; otherwise if Finishing-Rebelworld is unsolved; follow the fast-forward rules for Finishing-Rebelworld; speak as the parser "BETA:**advanced to Rebel World Completed**[line break]("; otherwise if Being-In-Treeworld is unsolved; follow the fast-forward rules for Being-In-Treeworld; speak as the parser "BETA:**advanced to Treeworld**[line break]("; otherwise if Finishing-Treeworld is unsolved; follow the fast-forward rules for Finishing-Treeworld; speak as the parser "BETA:**advanced to Treeworld Completed**[line break]("; otherwise if Completing-Progue's-Character-Arc is unsolved; follow the fast-forward rules for Completing-Progue's-Character-Arc; speak as the parser "BETA:**advanced to Final Confrontation resolved**[line break]("; otherwise if Finishing-The-Epilogue is unsolved; [ force solve Finishing-The-Epilogue;] speak as the parser "BETA:**advanced to Epilogue**[line break]("; otherwise; speak as the parser "**Can't advance past Epilogue!**"; end if. Section - Changing the time rate [ Changing the time factor is an action out of world applying to one number. Understand "tf [a number]" as changing the time factor. Carry out changing the time factor: change the time factor to the number understood. Report changing the time factor: say "set to [the number understood]." ] Section - Teleportation Teleporting is an action out of world applying to one thing. Understand "teleport [any room]" or "tp [any room]" as teleporting. Carry out teleporting: move the player to noun. Section - Debug Verbs [ Revealing all is an action out of world applying to nothing. Understand "reveal all" as revealing all. Carry out revealing all: say "Visible things: [list of visible things]." ] Part - Menus and Help Understand "help" or "menu" as asking for help. Asking for help is an action out of world. Carry out asking for help: if topics-window is g-present, shut down the topics-window; show table of contents; if out-of-line keywords < 3 and an other attentive person is enclosed by location: open up the topics-window; follow the drawing rule of the topics-window. After printing the banner text when turn count >= 2: say "Type MENU for more information.". Chapter - Table of Contents To show table of contents: change the current menu to the Table of Main Contents; carry out the displaying activity; clear the screen; if Finishing-The-Prologue is complete, try looking. Table of Main Contents title subtable description toggle "PREMENU" -- "Please select an option from the menu using the arrow keys. Press enter to confirm your choice." "Dedication" -- "[dedicationtext]" -- "About This Edition" -- "[abouttext]" -- "" -- "" -- "Basic [wtfinstructions]" -- "[simplehelptext].[paragraph break]Hit enter or type LOOK from any prompt to get a fresh description of your surroundings. Type SAVE to save your progress through the story; you can pick up where you left off later by typing RESTORE." -- "Detailed [wtfinstructions]" Table of Helpy Stuff -- -- "Verb List" -- "[otherverbs]." -- "Adjust Keyword Style" -- -- keyword setting rule "" -- "" -- "Tutorial Mode ([if tutorial mode is switched on]ON[else]OFF[end if])" Table of Tutorial Mode Options -- "Stats Mode ([if stats mode is true]ON[else]OFF[end if])" Table of Stats Mode Options -- "" -- "" -- "Acknowledgements" -- "[acknowledgements]" -- "About the Author" -- "[authortext]" -- "Where to Find More Interactive Fiction" -- "[ifprimer]" -- "POSTMENU" -- "Press Q or the ESC key when you are ready to [if turn count <= 1]begin[otherwise]continue[end if]. You may type HELP from any prompt to return to this menu." To say wtfinstructions: say "Instructions". [ Oddly, just writing "Instructions" in the menu table causes problems. ] To say ifprimer: say "An embarrassment of riches exists in the interactive fiction community, where a disproportionally talented group of writers, designers, and programmers have released hundreds of quality interactive stories for free over the past 15 years. The only problem is how to find them. The Internet Fiction Database (ifdb.tads.org) collects reviews, ratings, and technical info about IF games. If you click 'Search' and then 'Recommended Lists,' you can search through user compilations of favorite games or even create your own. Baf's Guide to the IF Archive (wurb.com/if) is a similar resource that also allows you to browse games sorted by genre, rating, or awards received. The five-star game list here is an excellent place to find quality games to play. Emily Short's Reading IF page (emshort.wordpress.com/reading-if) categorizes games by their noteworthiness: games known for great settings, a focus on characterization, or interesting puzzles, for instance. The Annual IF Comp (ifcomp.org) has been the preeminent venue for new works of short IF for well over a decade; browsing lists of past winners is an excellent way to find high-quality games.". Table of Helpy Stuff title subtable description toggle "More on Verbs" -- "[commandstext]" -- "More on Movement" -- "[movementtext]" -- "More on Conversation" -- "[convotext]" -- "Game Options" -- "[optionstext]" -- "What To Do If You Get Stuck" -- "[hintstext]" -- This is the keyword setting rule: try setting the keyword style. To say dedicationtext: say "[paragraph break]To Benton, Fievel, and Fitz.". To say commandstext: say "In addition to typing emphasized keywords, you can also enter basic commands beginning with verbs to perform more complex actions in the story world. Type things like TOUCH GRASS, CLIMB TREE, OPEN BOX, or PUSH BUTTON in the appropriate situations, and the story will respond to your action. As with keywords, capitalization and punctuation doesn’t matter, and you can usually leave out pronouns like 'the,' but spelling does count. A few other useful verbs: LOOK (or just pressing enter) will give you a fresh description of your surroundings. WAIT (or Z) will pass a few minutes of time in the story world-- you can also WAIT UNTIL a certain time of day (such as noon, sunset, night, etc.) or WAIT FOR a certain number of hours or minutes. Finally, AGAIN (or G, or pressing the up arrow on most interpreters) will repeat the last command you typed. [otherverbs].". To say movementtext: say "Type emphasized direction words to move in that direction or towards that distant piece of scenery. Type EXITS to be reminded of the places you can go from your current location. (Note that there may be concealed exits that require closer examination of nearby objects to uncover.) Early in the story you may find a compass, which will allow you to navigate using cardinal directions instead by typing OPEN COMPASS. In large open areas, moving one location at a time can become tedious. At any prompt, you can type LANDMARK to see a list of landmarks you've discovered. Typing the name of a landmark will quickly move you to that area, unless it is currently inaccessible or something interrupts you along the way. Finally, you can also sometimes FOLLOW someone, or type GO TO a distant piece of scenery to move one area towards it. Type GO BACK to return to the last area you were in.". To say convotext: say "Type HELLO to start speaking. [convotext1][paragraph break][convotext2][paragraph break][convotext3]". To say convotext1: say "During a conversation, watch for emphasized keywords, which you can type to control the direction of the discussion, and keep your eyes on the small window that appears at the bottom of the screen, which sometimes shows additional words like YES or NO in response to questions. As the discussion moves forward, old emphasized keywords will become irrelevant and disappear, meaning you can no longer bring them up at the moment; you'll always know what you can still talk about by referencing the small window." To say convotext2: say "You can also always say NOTHING (sometimes a wise conversational tactic) or GOODBYE when you want to stop talking. In some conversations you can change the SUBJECT; the small window will show a list of available topics." To say convotext3: say "During conversation, you can also take physical actions, such as (in order of friendliness) KISS, HUG, PUSH, or ATTACK. You can also simply walk away, though people may find that rude if you don't say GOODBYE first. (Similarly, type HELLO to begin a conversation with someone you aren't speaking with.) You can FOLLOW someone who walks away from you, or SHOUT to get the attention of some characters." [ touch redirects to HUG.] Displaying the options text is an action out of world. Understand "options" as displaying the options text. Carry out displaying the options text: say "[optionstext]". To say optionstext: say "You can save your progress in the story by typing SAVE, and return to the same point later by typing RESTORE. You can QUIT to end the story immediately, or RESTART to begin from the beginning. If you want to take back your last move, type UNDO. To begin a transcript of your game session, type SCRIPT ON; to end it, type SCRIPT OFF. Feel free to send transcripts to aaron@lacunastory.com." Displaying the hints text is an action out of world. Understand the command "think" as something new. Understand "hint" or "hints" or "think" as displaying the hints text. Carry out displaying the hints text: say "[hintstext]". To say hintstext: say "If you're not sure what to do, [if Homeworld-Sequence is solved]you may just need to keep exploring. The scenery changes with both the time of day, the tides, the weather, and your own actions. Retrace your steps and keep a close eye on the changing descriptions[else]remember you can type LOOK or press enter alone to be reminded of your surroundings[end if]. Make sure you try typing any emphasized [d]direction[x] keywords you haven't explored or [o]objects[x] you haven't examined. Asking other characters you meet about obstacles is also a good tactic. It also may help to sleep on your problem, particularly in a comfy, shady spot[if puzzle mode and Homeworld-Sequence is solved]. If you're having a particularly difficult time with puzzles, you might consider starting a new game and selecting 'story mode' instead at the end of Chapter One. The puzzles are less complex and less important in story mode[end if]. If you want specific hints, try asking on the newsgroup rec.games.int-fiction or e-mailing the address below. Finally, if you encounter a bug or problem with the workings of the story, think something is unclear, or have suggestions, the author would love to hear from you. Please write to aaron@lacunastory.com or visit lacunastory.com." To say simplehelptext: say "In Blue Lacuna, you take the role of a character in the story. As you read, you'll see certain emphasized keywords in the prose. Type any keyword and press enter to interact with the story.[paragraph break]There are three kinds of keywords: type[line break] -- a [o]noun[x] to examine that thing more closely[line break] -- an [d]exit[x] to move in that direction[line break] -- a [t]word[x] recently spoken (if you're talking with someone) to direct the conversation". Displaying the about text is an action out of world. Understand "about" as displaying the about text. Carry out displaying the about text: say "[abouttext]". To say abouttext: say "[banner text][line break][list of extension credits]Smarter Parser by Aaron Reed[line break]Poor Man's Mistype by Aaron Reed[line break]Epistemology by Eric Eve[line break]Remembering by Aaron Reed[line break]Default Messages by David Fisher[line break]Flexible Windows by Jon Ingold[line break]Improved Menus by Aaron Reed (based on Basic Menus by Emily Short)[line break]Intelligent Hinting by Aaron Reed[line break]Numbered Disambiguation Choices by Aaron Reed.[paragraph break]The official website for Blue Lacuna is lacunastory.com.[paragraph break]Blue Lacuna was first publicly previewed in April 2008 in the Spring Thing Competition. Release 1 debuted in January 2009.[paragraph break]All versions of Blue Lacuna and its source code are released under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 license. In summary, you may freely distribute, perform, or create derivative works, but not for commercial purposes without permission from the author. More information is available at http://creativecommons.org/licenses/by-nc-sa/3.0/us/. The cover art contains photography by Kevin N. Murphy under the Creative Commons Attribution 2.0 Generic license." To say acknowledgements: say "First and foremost, I owe a huge debt to those whose shoulders I've stood on, most directly those of the Inform 7 team: Graham Nelson, Emily Short, Andrew Hunter, and David Kinder. In addition to creating the wonderful, free tools that were used to create Blue Lacuna, they also answered an endless series of pesky questions and were generous with advice, bug fixes, and esprit de corps. Find out how to create your own interactive fiction at inform-fiction.org. In addition, the entire community on the newsgroup rec.arts.int-fiction deserves commendation for their amazing responsiveness, friendliness, and willingness to answer questions no matter how unusual or dubious. Among others are Ron Newcomb, Mike Tarbert, JDC, Andrew Plotkin, vaporware, and Khelwood, but a special thanks to everyone on raif who helped me out with problems over the development of this project. Many of my close friends took time with me to discuss various aspects of the story's design over the past several years. They know who they are and their insight was tremendously helpful in shaping the final product. My beta testers were instrumental in finding bugs and tweaking the puzzles, spending countless hours hunched over their interpreters with keen eyes. A million thank-yous to Alexei Othenin-Girard, Basti, Depresiv, Doug Egan, Emily Boegheim, George Oliver, HenryMikel, James Jolley, Jeremy Rishe, Justin Lowmaster, katzy, Lynnutte, Mario Carneiro, Neale, Scott Maddix, Sharon Rishe, Stephanie Camus, and Victor Gijsbers. Any remaining bugs in the story are of course entirely my fault and not theirs. Finally, Blue Lacuna owes a stylistic debt to the Miller brothers and the creative team at Cyan Worlds, whose Myst and Uru games have been a huge inspiration in my desire to create thought-provoking interactive stories. The ending is never written." Displaying the verbs text is an action out of world. Understand "verb" or "verbs" as displaying the verbs text. Carry out displaying the verbs text: speak as the parser "[otherverbs]." To say otherverbs: say "Below are some of the most important verbs the story understands: LOOK[line break] TOUCH[line break] PUSH (and PULL)[line break] OPEN (and CLOSE)[line break] WEAR (and TAKE OFF)[line break] TASTE (or EAT or DRINK)[line break] TAKE (and DROP)[line break] CLIMB[line break][ov2]". To say ov2: say " WAIT[line break] LANDMARK[line break] SLEEP[line break] SIT[line break] LISTEN[line break] HELLO (and GOODBYE)[line break] ATTACK[line break] HUG[line break] KISS[line break] FOLLOW (or APPROACH) Other verbs which may be useful in specific situations include READ, JUMP, GIVE, TURN, SQUEEZE, SMELL, WAKE, SWIM, SHAKE, and PAINT. Verbs useful for controlling the story itself include UNDO, SAVE, RESTORE, QUIT, RESTART, HELP, KEYWORDS, THINGS, EXITS, and TOPICS". To say authortext: say "Aaron A. Reed has worked as a travel writer, web monkey, offensive t-shirt designer, graphic artist, 3D animator, filmmaker, and murder mystery producer. His fiction has appeared in 'Fantasy & Science Fiction' magazine, and his interactive fiction has won numerous awards and been taught in new media courses from Australia to Sweden. Blue Lacuna is his first novel. His website may be visited at aaronareed.net." Chapter - God Mode Understand "god" or "backstage" as god modeing. God modeing is an action out of world. Carry out god modeing: if out-of-line keywords < 3: if topics-window is g-present, shut down the topics-window; change the current menu to Table of God Options; carry out the displaying activity; clear the screen; if Finishing-The-Prologue is complete, try looking; if out-of-line keywords < 3 and an other attentive person is enclosed by location: open up the topics-window; follow the drawing rule of the topics-window. Table of God Options title subtable description toggle "PREMENU" -- "From these menus, you can access information on and sometimes change certain variables that Blue Lacuna uses to help tell the story." "Progue Options" Table of Progue Options -- -- "Drama Options" Table of Drama Options -- -- "Puzzle Cheats" Table of Puzzle Options -- -- Table of Progue Options title subtable description toggle "PREMENU" -- "Progue is currently in [location of Progue] and in the [psyche of Progue] psychological state. He is [if Progue is wishing]on his way to [progue-venue] for [end if][animus of Progue]. His activity counter is [activity counter of Progue] (usually he'll pick a new activity at 15)[if an episode is playing]. The current episode is [current episode][end if]." [ Based on his scores, if the endgame began now Progue would fall into the [progue-archetype] archetype.] "Affinity Score: [affinity of Progue]" Table of Progue Affinity -- -- "Submission Score: [submission of Progue]" Table of Progue Submission -- -- "Paternalism Score: [paternalism of Progue]" Table of Progue Paternalism -- -- "Romance Score: [romance of Progue]" Table of Progue Romance -- -- Table of Progue Affinity title subtable description toggle "PREMENU" -- "Current Affinity: [affinity of Progue] (If this number is above 0, Progue likes you; if below, he doesn't.) After meeting Progue it's not possible to be 0. The maximum and minimum are based on Progue's current psychological state." -- "Raise Affinity" -- -- Progue-likes-you rule "Lower Affinity" -- -- Progue-dislikes-you rule "POSTMENU" -- "Press Q to go back." This is the Progue-likes-you rule: Progue likes you more, silently. This is the Progue-dislikes-you rule: Progue likes you less, silently. Table of Progue Submission title subtable description toggle "PREMENU" -- "Current Submission: [submission of Progue] (If this number is above 0, Progue feels submissive towards you; otherwise, he feels dominant towards you.) After meeting Progue it's not possible to be 0. The maximum and minimum are based on Progue's current psychological state." -- "Raise Submission" -- -- Progue-more-sub rule "Lower Submission" -- -- Progue-less-sub rule "POSTMENU" -- "Press Q to go back." This is the Progue-more-sub rule: Progue is more submissive, silently. This is the Progue-less-sub rule: Progue is less submissive, silently. Table of Progue Paternalism title subtable description toggle "PREMENU" -- "Current Paternalism: [paternalism of Progue] (The higher above 0 this number is, the more fatherly Progue feels towards you.) It's not possible to be less than 0. The maximum is based on Progue's current psychological state. Raising this lowers the romance attribute." -- "Raise Paternalism" -- -- Progue-more-dad rule "Lower Paternalism" -- -- Progue-less-dad rule "POSTMENU" -- "Press Q to go back." This is the Progue-more-dad rule: Progue feels more like a father, silently. This is the Progue-less-dad rule: Progue feels less like a father, silently. Table of Progue Romance title subtable description toggle "PREMENU" -- "Current Romance: [romance of Progue] (The higher above 0 this number is, the more romantic Progue feels towards you.) Normally, it's not possible to drop this below 0, unless Progue is spurned in this phase, in which it becomes -1. The maximum is based on Progue's current psychological state. Raising this lowers the paternlaism attribute." -- "Raise Romance" -- -- Progue-more-love rule "Lower Romance" -- -- Progue-less-love rule "Break Progue's Heart" -- -- Progue-wayless-love rule "POSTMENU" -- "Press Q to go back." This is the Progue-more-love rule: Progue is aroused, silently. This is the Progue-less-love rule: Progue is losing interest, silently. This is the Progue-wayless-love rule: Progue is heartbroken. Table of Progue Reset title subtable description toggle "PREMENU" -- "This can sometimes fix Progue if he gets stuck[if an episode is playing]. WARNING: Since an episode is playing ([current episode]) resetting Progue right now may break the drama manager and prevent the game's narrative from continuing." "Reset Progue" -- -- Progue-reset rule. This is the Progue-reset rule: if an episode is playing, complete current episode; pick a new activity for Progue. Table of Drama Options title subtable description toggle "[if an episode is playing]Current Episode: [current episode][else]No Current Episode" Table of Episode Status -- -- "Boredom Meter: [boredom meter][if time for excitement] (Time for excitement)[end if]" Table of Boredom Status -- -- "Rume Interest Tracker: [Rume-tracker]" Table of Rume Tracker -- -- "Injury Status: [if yourself is hale]Uninjured[else]Injured[end if]" Table of Injury Status -- -- "Genders" Table of Gender Status -- -- "Time Of Day: [time of day] ([current interval])" Table of Time Status -- -- "Chose [if we chose art]Art[else]Love" Table of Art Love Status -- -- Table of Episode Status title subtable description toggle "PREMENU" -- "Episodes control the narrative progression of the story, particularly as it relates to Progue. Using this tool to end vital story episodes may cause the narrative to derail: use with caution." "[if an episode is playing]End Current Episode ([current episode])[else]No Episode Is Playing" -- -- end-curr-ep rule This is the end-curr-ep rule: if an episode is playing, complete current episode. Table of Boredom Status title subtable description toggle "PREMENU" -- "Boredom Meter: [boredom meter]. As time goes on without any new or exciting events, the boredom meter continually rises. When it gets above [the excitement level], episodes and hint scenes are more likely to be triggered." "Set Boredom Meter to 0" -- -- reset-boredom rule "Set Boredom Meter to [the excitement level]" -- -- upset-boredom rule This is the reset-boredom rule: now boredom meter is 0. This is the upset-boredom rule: now boredom meter is excitement level. Table of Rume Tracker title subtable description toggle "PREMENU" -- "Rume Interest Tracker: [Rume-tracker]. Depending on how much interest you show in Rume, this number rises and falls. If it has reached +10 by the endgame, you'll get the Rume-centric epilogue. (If not, you'll get the Progue-centric epilogue, or, if Progue is dead, the player-centric epilogue.)" "Miss Rume a Lot" -- -- miss-rume-lots rule "Miss Rume a Little" -- -- miss-rume rule "Dis Rume a Little" -- -- dis-rume rule "Dis Rume a Lot" -- -- dis-rume-lots rule This is the miss-rume-lots rule: miss Rume a lot. This is the miss-rume rule: miss Rume. This is the dis-rume rule: dis Rume. This is the dis-rume-lots rule: dis Rume a lot. Table of Injury Status title subtable description toggle "PREMENU" -- "Injury Status: [if yourself is hale]Uninjured[else]Injured[end if]. It's possible to injury your leg in various ways during the game, which changes Progue's reaction to you and affects the ways you can solve various puzzles." "Switch to [if yourself is hale]Injured[else]Uninjured[end if]" -- -- injury-toggle rule This is the injury-toggle rule: if yourself is hale, now yourself is wounded; else now yourself is hale. Table of Gender Status title subtable description toggle "Player: [if yourself is male]Male (Change to Female[else]Female (Change to Male[end if])" -- -- player-gender rule "Rume: [if Rume is male]Male (Change to Female[else]Female (Change to Male[end if])" -- -- rume-gender rule This is the player-gender rule: if yourself is male, now yourself is female; else now yourself is male. This is the rume-gender rule: if Rume is male, now Rume is female; else now Rume is male. Table of Time Status title subtable description toggle "PREMENU" -- "Time of Day: [time of day] ([current interval])[if raining] and raining[end if]. Tide is [tidestatus]." "Next Interval" -- -- next-interval rule "Previous Interval" -- -- prev-interval rule "Force Low Tide" -- -- force-lowtide rule "Force High Tide" -- -- force-hightide rule This is the next-interval rule: if current interval is night, let tmpint be dawn; else let tmpint be the interval after current interval; change the time of day to the time corresponding to tmpint; update interval. This is the prev-interval rule: if current interval is dawn, let tmpint be night; else let tmpint be the interval before current interval; change the time of day to the time corresponding to tmpint; update interval. This is the force-lowtide rule: now the tide counter is 590. This is the force-hightide rule: now the tide counter is 20. Table of Art Love Status title subtable description toggle "PREMENU" -- "Chose [if we chose art]Art[else]Love[end if]. This choice colors certain aspects of gameplay and becomes significant in the endgame." "Switch to [if we chose art]Love[else]Art[end if]" -- -- art-love-switch rule This is the art-love-switch rule: if we chose love: now pr_love is unspoken; now pr_art is spoken; else: now pr_art is unspoken; now pr_love is spoken. Table of Puzzle Options title subtable description toggle "PREMENU" -- "WARNING: This is not a hint mode, but a tool that lets you bypass certain puzzles. The next screen assumes you have familiarity with all the puzzles in the game and might contain spoilers if you haven't already completed it once. Furthermore, these options may cause execution problems if selected at certain moments during the game. Please save your game in progress before selecting anything here." "Proceed" Table of Puzzle2 Options -- -- Table of Puzzle2 Options title subtable description toggle "Open Color Door In Shack" -- -- open-shack-door rule "Increase Power In Steam System" -- -- increase-steam rule "Teleport to Egg in Rain Forest" -- -- tp-egg rule "Lower Secret Island Bridge" -- -- secret-bridge rule "Open Pyramid" -- -- open-pyramid rule "Mark All Trees Contacted (inventory shows passwords)" -- -- contact-trees rule "Mark City as Visited" -- -- city-done rule "Mark Forest as Visited" -- -- forest-done rule This is the open-shack-door rule: now lava tunnel door is open; if the psyche of Progue is ignorance, now the psyche of Progue is denial. This is the increase-steam rule: now the system power is 30. This is the tp-egg rule: move player to Egg Room. This is the secret-bridge rule: now secret rope bridge is open. This is the open-pyramid rule: remove the pyramid from play; move the mind chair to Observatory Exterior; move the mind machinery to Observatory Exterior. This is the contact-trees rule: now every windsigh tree is contacted; change the tree-password to "itchy"; change the rebel-password to "scratchy". This is the city-done rule: now cl_story7 is spoken; now the player is yourself; now the psyche of Progue is fugue. This is the forest-done rule: now gp_outtro is spoken; now the player is yourself; now the psyche of Progue is fugue. Table of Stats Mode Options title subtable description toggle "PREMENU" -- "Stats mode shows you notifications every time significant variables change, such as other characters['] feelings towards you. Turn it on if you want to expose some of the mechanics behind the story.[paragraph break]Stats mode is currently [if stats mode is true]ON[else]OFF[end if]." "Toggle Stats Mode" -- -- stats-mode rule This is the stats-mode rule: if stats mode is true, now stats mode is false; else now stats mode is true. When play begins: if final release mode is false and milestone mode is false, now stats mode is true. Stats mode is a truth state that varies. Table of Tutorial Mode Options title subtable description toggle "PREMENU" -- "The tutorial shows you messages in the earlier parts of the game that help you learn how to interact with the story in Blue Lacuna, and is recommended for both experienced interactive fiction players and those new to the genre.[paragraph break]Tutorial mode is currently [if tutorial mode is switched on]ON[else]OFF[end if]." "Toggle Tutorial Mode" -- -- tutorial toggling rule Part - New Kinds & Extending the World Model Section - Props [ Blue Lacuna ordinarily doesn't allow items to be picked up and carried around. This kind is for objects that are small and light enough that they would be take-able in an ordinary game.] A prop is a kind of thing. A prop is usually fixed in place and undescribed. Check taking a fixed in place prop: say "You'd rather not carry that around." instead. Section - Setpieces [ A setpiece is something too large to carry enclosed by the location.] A setpiece is a kind of thing. A setpiece is usually fixed in place and undescribed. A setpiece can be perchable or unperchable. A setpiece is usually unperchable. [Things Progue can sit on.] Section - Set Dressing [ Set dressing is something that vanishes from the location as soon as the player leaves. This is useful for unimportant objects mentioned in ambient messages, or ephemeral details like footprints.] A set dressing is a kind of prop. After going (this is the remove set dressing rule): repeat with item running through on-stage set dressings begin; remove item from play; end repeat; continue the action. Section - Views [ Views are large objects that can be seen from multiple locations.] A view is a kind of backdrop. Instead of touching or taking or pushing or pulling or attacking or climbing or entering or tasting or opening a view, say "You are too far from [the noun] to do anything but look." . asdf787 is a view. [ This prevents a crash during testing situations where all modules containing views are turned off.] Every view has a room called the base room. The base room of a view is usually UnRoom. [ This is used so we can "approach mountain" and know where to go.] [ Also see Section - Visibility ] Section - Minor Things A thing can be major or minor. A thing is usually major. Every thing has some text called provoke message. Instead of doing anything other than examining or remembering or examining by name or following to a minor thing (called target): if the provoke message of target is "", try examining target; otherwise say "[provoke message of target][line break]". [ not sure why the extra line break here is needed, but it is...] Section - Abstractions [ Used for non-tangible things.] An abstraction is a kind of thing. An abstraction is always undescribed and minor. Section - Intervals The interval is a kind of value. The intervals are dawn, sunrise, morning, midmorning, midday, afternoon, evening, sunset, twilight, night, moonrise, high tide, falling uptide, falling downtide, moonset, low tide, rising downtide, and rising uptide. Understand "daybreak" as dawn. Understand "noon" as midday. Understand "dusk" as twilight. Understand "dark" as night. Current interval is an interval that varies. First every turn when location is regionally in Lacuna and we are not landmark-going (this is the deciding which interval is current rule): update interval. To update interval: if dawn begin; now current interval is dawn; otherwise if sunrise; now current interval is sunrise; otherwise if morning; now current interval is morning; otherwise if midmorning; now current interval is midmorning; otherwise if midday; now current interval is midday; otherwise if afternoon; now current interval is afternoon; otherwise if evening; now current interval is evening; otherwise if sunset; now current interval is sunset; otherwise if twilight; now current interval is twilight; otherwise; now current interval is night; end if. Section - Prose Name Every room has some text called prose name. The prose name of a room (called locale) is usually "NULL". Section - Books Understand the command "read" as something new. Reading is an action applying to one visible thing. Understand "read [something]" as reading. Check reading when night and location is not regionally in Dreamlands: say "It's too dark to read right now." instead. Check reading: if noun is not a book, try examining noun instead. A book is a kind of thing. Understand "book" or "books" or "page" or "pages" as a book. A book can be open or closed. A book can be openable. A book is usually closed. A book is always openable. Does the player mean doing something to an open book: it is likely. Check opening a book (called tome): try reading tome instead. Check closing a book (called tome): now tome is closed; say "You close [the tome] again." instead. A book has a number called current page. The current page of a book is usually 0. To say current page of (tome - a book): let n be the current page of tome; choose row n in the contents of tome; say "[desc entry]". A book has a table-name called contents. The contents of a book is usually Table of No Contents. Table of No Contents desc "The page is blank." Carry out reading: repeat with tome running through books enclosed by location: now tome is closed; now noun is open; if current page of noun is 0, now current page of noun is 1; say "[if current page of noun is 1]You open [the noun] and study the first page.[paragraph break][end if][current page of noun][paragraph break][if the current page of noun is at most the number of rows in contents of noun - 1]It looks like you could see more if you turn the page[otherwise][The noun] is turned to the last page[end if].". Check turning a book (called tome): increase the current page of tome by 1; if current page of tome is greater than the number of rows in contents of tome begin; now the current page of tome is 0; say "You seem to have reached the end of [the tome]. You close it again." instead; otherwise; say "You turn the page."; try reading tome instead; end if. Section - Posture player_imperiled is a truth state that varies. Posture is a kind of value. The postures are reclining, sitting, standing, pacing, imperiled, and restraining. A person has a posture. A person is usually standing. Section - Elevation An elevation is a kind of value. -1000 feet specifies an elevation. A room has an elevation. Definition: a room is low if its elevation is 50 feet or less. Definition: a room is uphigh if its elevation is 75 feet or more. Check going down when the room down from the location is not a room (this is the using elevation to determine which direction is down rule): if an adjacent room is lower than the location begin; head to the lowest adjacent room; do nothing instead; otherwise; say "You can't see any way to go down from here." instead; end if. Check going up when the room up from the location is not a room (this is the using elevation to determine which direction is up rule): if an adjacent room is uphigher than the location begin; head to the uphighest adjacent room; do nothing instead; otherwise; say "You can't see any way to go up from here." instead; end if. Section - Wakefulness [ This should probably be deprecated. The proper way to make Progue asleep is to give him the animus "resting." Only yourself needs to be asleep/awake. (I think. Or do we use it for Rume?] A person is either asleep or awake. A person is usually awake. Section - In and Out A room can be indoorsy or outdoorsy. A room is usually outdoorsy. Definition: a room is outward: if it is indoorsy and the location is outdoorsy then no; if it is outdoorsy and the location is indoorsy then yes; if the number of rooms adjacent to it is greater than the number of rooms adjacent to the location then yes; otherwise no. Definition: a room is inward: if it is outdoorsy and the location is indoorsy then no; if it is indoorsy and the location is outdoorsy then yes; if the number of rooms adjacent to it is less than the number of rooms adjacent to the location then yes; otherwise no. Check going nowhere when the noun is outside: try exiting instead. Check exiting when the player is in a room (this is the guessing which way is out rule): if at least one adjacent room is outward begin; head to a random adjacent outward room; do nothing instead; otherwise; say "I'm not sure which way you mean. [exits]." instead; end if. Check going inside when the room inside from the location is not a room and at least one adjacent room is inward (this is the guessing which way is in rule): if more than one adjacent room is inward begin; say "I'm not sure which way you mean. [exits]." instead; otherwise; head to a random adjacent inward room; do nothing instead; end if. Section - Exits A room has some text called the exits text. The exits text of a room is usually " ". Requesting the exits text is an action applying to nothing. Understand "exits" as requesting the exits text. Report requesting the exits text: say "[exits]." [ We can't make this out of world since it is called by room descriptions, and if an OOW action is called the rest of the action routine no longer runs correctly. --Actually, I'm not sure this is true. Isn't the "to say exits" all that's called?] Definition: a direction is viable if the room it from the location is a room. Check going nowhere: say "[goingnowhere]" instead. To say goingnowhere: say "You can't see an exit in that direction. [exits].[actfast]". To say exits: if the exits text of the location is not " " begin; say "[the exits text of the location]"; otherwise; let count of exits be the number of viable directions; if the count of exits is 0, say "You can't see anywhere to go from here"; if the count of exits is 1, say "From here, the only way out is to [list of viable directions]"; if the count of exits > 1, say "From here, the viable exits are to [list of viable directions]"; end if. Section - Injury A person can be wounded or hale. A person is usually hale. [ For the player breaking leg subplot.] Section - Scrawls [ These are the secret messages in Progue's language that provide hints and backstory.] Reading level is a kind of value. The reading levels are uneducated, vowel-knowing, and language-knowing. The player has a reading level. The reading level of the player is uneducated. A scrawl is a kind of prop. Check taking a scrawl: say "It's just writing." instead. A scrawl has some text called the standard message. A scrawl has some text called the secret message. show-secret-scrawl is a truth state that varies. A scrawl is either hint-based or story-based. A scrawl is usually hint-based. Understand "copy [a scrawl]" or "write [a scrawl]" as a mistake ("You don't have anything to copy it down with."). Understand "message/letters" as a scrawl. Check examining a scrawl: let full-message be indexed text; if show-secret-scrawl is true: if secret message of noun is "", say "You touch your fingers to the message, but no additional words appear.[paragraph break]"; else say "As you touch the message, faint glowing letters appear below it, appearing in slow waves of heat diffusion spreading from your hand.[paragraph break]"; change full-message to "[standard message of noun][secret message of noun]"; otherwise: change full-message to "[standard message of noun]"; if reading level of player is uneducated: say "The message is written in strange letters that you don't understand."; otherwise if reading level of player is vowel-knowing: say "You recognize some of the letters from the clockwork head in the treehouse, but the message is still mostly incomprehensible."; if reading level of player is not language-knowing: if screen reader mode is true: say "Though you can't make it out, you see that the message runs from right to left." instead; otherwise: say line break; designify full-message; say line break instead; otherwise: if noun is hint-based: say "From what you learned from the clockwork head in the treehouse, you think you'd be able to [t]translate[x] the message, though it will take some time[one of].[paragraph break][as the parser]Many of the writings you can translate can be seen as hints to nearby puzzles. If you don't want to see any hints related to this part of the island, don't translate the messages just yet.[as normal][or].[stopping]" instead; else: try translating noun instead. Check touching a scrawl: if night: now show-secret-scrawl is true; try examining noun instead; else: say "You rub your fingers along the message, but feel nothing unexpected." instead. After going (this is the reset secret scrawl rule): now show-secret-scrawl is false; continue the action. Understand "translate [a scrawl]" as translating. Translating is an action applying to one thing. Rule for supplying a missing noun when translating: let Phil be a random scrawl enclosed by the location; if Phil is not a scrawl, say "There's nothing here to translate." instead; change the noun to Phil. Carry out translating: if the reading level of player is language-knowing: pass 30 minutes of time; say "[one of]Read right to left and phonetically, you are unsurprised to discover you can read the script. In all worlds you've wayfared to, while the writing always changes, the spoken language, strangely, remains the same.[paragraph break][or][stopping]The message reads:[line break]"; say line break; if screen reader mode is false: designify standard message of noun; say "[paragraph break]Or, the way you're more used to reading it:[paragraph break]"; say "'[standard message of noun][if show-secret-scrawl is true][i][secret message of noun][r][end if]'."; otherwise: say "You don't know enough about this language yet to be able to translate it.". To designify (msg - an indexed text): let original be indexed text; let coded be indexed text; now original is msg; let line-length be 35; let line-ctr be 0; repeat with wd running from 1 to the number of punctuated words in original: if line-ctr + 1 + the number of characters in punctuated word number wd in original > line-length: let padspaces be indexed text; now padspaces is ""; while line-length - line-ctr > 0: now padspaces is " [padspaces]"; increase line-ctr by 1; now coded is "[line break][padspaces][coded]"; now line-ctr is 0; increase line-ctr by the number of characters in punctuated word number wd in original + 1; let tmpword be indexed text; let tmpword be punctuated word number wd in original; [ Alright, this is admittedly ridiculous and a real man would have just coded this in Inform 6. But this is faster than a more automated I7 version might be.] if the number of characters in tmpword is 12: now coded is " [character number 12 in tmpword][character number 11 in tmpword][character number 10 in tmpword][character number 9 in tmpword][character number 8 in tmpword][character number 7 in tmpword][character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 11: now coded is " [character number 11 in tmpword][character number 10 in tmpword][character number 9 in tmpword][character number 8 in tmpword][character number 7 in tmpword][character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 10: now coded is " [character number 10 in tmpword][character number 9 in tmpword][character number 8 in tmpword][character number 7 in tmpword][character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 9: now coded is " [character number 9 in tmpword][character number 8 in tmpword][character number 7 in tmpword][character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 8: now coded is " [character number 8 in tmpword][character number 7 in tmpword][character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 7: now coded is " [character number 7 in tmpword][character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 6: now coded is " [character number 6 in tmpword][character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 5: now coded is " [character number 5 in tmpword][character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 4: now coded is " [character number 4 in tmpword][character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 3: now coded is " [character number 3 in tmpword][character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 2: now coded is " [character number 2 in tmpword][character number 1 in tmpword][coded]"; else if the number of characters in tmpword is 1: now coded is " [character number 1 in tmpword][coded]"; let padspaces2 be indexed text; while line-length - line-ctr > 0: now padspaces2 is " [padspaces2]"; increase line-ctr by 1; now coded is "[padspaces2][coded]"; if the reading level of player is vowel-knowing: [obscure everything except the vowels] replace the regular expression "" in coded with "-"; otherwise if reading level of player is uneducated: replace the regular expression "" in coded with "-"; replace the regular expression " (<,?!.>) " in coded with " \1"; replace the regular expression " (<[quotation mark][apostrophe]>) " in coded with " \1"; say "[fixed letter spacing][coded][variable letter spacing]". To decide which indexed text is the reverse of (wd - an indexed text): let candidate be indexed text; repeat with lt running from 1 to the number of characters in wd: now candidate is "[character number lt in wd][candidate]"; decide on candidate. Section - Passwords The tree-password is indexed text that varies. The tree-password is "not.hing". The rebel-password is indexed text that varies. The rebel-password is "noth.ing". The machinery-password is indexed text that varies. The machinery-password is "no.thing". To decide whether tree-password is set: if tree-password is not "not.hing", decide yes; decide no. To decide whether rebel-password is set: if rebel-password is not "noth.ing", decide yes; decide no. To decide whether tree-password is unset: if tree-password is set, decide no; decide yes. To decide whether rebel-password is unset: if rebel-password is set, decide no; decide yes. Defining a password is an action applying to one thing and one topic. Understand "setkey [any thing] [text]" as defining a password. Rule for asking which do you mean while defining a password: do nothing; now disambiguation_flag is true. [ If we type a word that matches an object, the parser tries to disambiguate.] Passwords is a thing. [ For debugging. ] To decide whether (passage - an indexed text) is blank: if passage matches the text "no.thing", decide yes; decide no. To decide whether (passage - an indexed text) is not blank: if passage is blank, decide no; decide yes. [ Check defining a password: if not valid player password, do nothing instead.] To decide whether (trial - indexed text) is an invalid password: if passwords is being debugged, say "// Passwords: deciding whether [trial] is an invalid password."; if a meta command matches trial, decide yes; if the number of characters in trial is less than 2 begin; speak as the parser "The word you choose must be more than 1 character."; decide yes; otherwise if the number of characters in trial is greater than 15; speak as the parser "The word you choose must have no more than 15 characters."; decide yes; otherwise if the number of words in trial is greater than 1; speak as the parser "You must choose a single word."; decide yes; otherwise if final release mode is false and trial exactly matches the text "tree"; speak as the parser "{Since TREE is a testing command, you can't use that as a password in the beta.}"; decide yes; end if; decide no. To decide whether a meta command matches (trial - indexed text) : if trial exactly matches the text "undo" or trial exactly matches the text "save" or trial exactly matches the text "restore" or trial exactly matches the text "oops" or trial exactly matches the text "quit" or trial exactly matches the text "restart": decide yes; decide no. [ A procedural rule when defining a password: ignore the basic accessibility rule. ] [AAR4]The my-basic-accessibility rule is listed instead of The basic accessibility rule in the action-processing rulebook. This is the my-basic-accessibility rule: if not defining a password and not discussing and not exhausting and not remembering and not examining by name, abide by the basic accessibility rule. tree1pw is a thing. verjpw is a thing. machpw is a thing. Carry out defining a password: if passwords is being debugged, say "// Passwords: Carry out defining a password for [noun]."; if noun is tree1pw begin; change the tree-password to the topic understood; rule succeeds; otherwise if noun is Verjpw; change the rebel-password to the topic understood; rule succeeds; otherwise if noun is machpw; change the machinery-password to the topic understood; rule succeeds; otherwise; if passwords is being debugged, say "// Passwords: ERROR: invalid password destination specified."; end if. [ Testers often tried to type their passwords in different contexts, such as the Echo Chamber or while calibrating the seiver, so we go to some lengths to understand the passwords typed alone or after "say." ] First smarter parser rule (this is the understand passwords rule): if input contains the tree-password or input contains the rebel-password: now the rejected command is "try#pw"; rule succeeds. Password-trying is an action applying to nothing. Understand "try#pw" as password-trying. Check password-trying: if location is Echo Chamber, say "You say the word and it echoes and distorts weirdly through the cave, the strange formations twisting the syllables around into different orders and shapes, but as the sounds slowly die away nothing further seems to happen." instead. Carry out password-trying: say "You speak the word aloud, but nothing happens.". The Smarter Parser trying harder to understand rule is not listed in any rulebook. Before printing a parser error (this is the Blue Lacuna trying harder to understand rule): now the original rejected command is the player's command; now the rejected command is the player's command; follow the Smarter Parser rules; if the rule succeeded: if rejected command is not original rejected command: unless rejected command is "try#pw", follow the announcing new command rule; now sp reparse flag is true; otherwise if the rule failed: now suppress parser error is true. Section - Visibility Verynearing relates various views to various rooms. Nearing relates various views to various rooms. Faring relates various views to various rooms. Veryfaring relates various views to various rooms. The verb to be very near implies the verynearing relation. The verb to be near implies the nearing relation. The verb to be far from implies the faring relation. The verb to be very far from implies the veryfaring relation. Check examining a view: if noun is very near the location or noun is near the location or noun is far from the location or noun is very far from the location, continue the action; otherwise say "You don't have a good view of [the noun] from here." instead. To say distance of (obj - a view): if obj is very near location, say "quite close by"; if obj is near location, say "a ways off"; if obj is far from location, say "off in the distance"; if obj is very far from location, say "hazy blue with distance". Part - Commands Chapter - Meta Commands Section - Tutorial Mode Tutorial mode is a device. Tutorial mode is switched on. Tutorial-switching is an action out of world applying to nothing. Understand "tutorial" as tutorial-switching. Understand "tutorial [text]" as a mistake ("[as the parser]Type TUTORIAL to toggle tutorial mode on and off[as normal]."). Carry out tutorial-switching: if tutorial mode is switched off: if location is not regionally in Homeworld: speak as the parser "Tutorial mode is no longer available at this stage of the story." instead; speak as the parser "Tutorial mode is now on."; otherwise: speak as the parser "Tutorial mode is now off."; follow the tutorial toggling rule. This is the tutorial toggling rule: if tutorial mode is switched on, now tutorial mode is switched off; else now tutorial mode is switched on. Section - Requesting the score Understand the command "score" as something new. Understand the command "notify" as something new. Understand "score" as requesting the score. Check requesting the score: say "You've made it to chapter [current chapter in words] (out of ten)"; if current chapter > 1, say " in [if puzzle mode]puzzle[else]story[end if] mode"; say ", exploring [the number of explored regions in words] region[s] (out of [the number of regions in words])"; if met_progue is true: say ". You've met [the Progue], who [if affinity of Progue > 0]likes you[else]dislikes you[end if] ([if affinity of Progue > 0]+[end if][affinity of Progue]), [if submission of Progue > 0]feels submissive towards you[else]feels dominant towards you[end if] ([if submission of Progue > 0]+[end if][submission of Progue]), and "; if paternalism of Progue > 1: say "feels paternal towards you (+[paternalism of Progue])"; else if romance of Progue > 1: say "feels romantic towards you (+[romance of Progue])"; else if romance of Progue < 0: say "feels bitter towards you ([romance of Progue])"; else: say "feels neither particularly paternal (+[paternalism of Progue]) nor romantic (+[romance of Progue]) towards you"; if current chapter > 1, say ". You've shown [if rume-tracker <= -10]almost no[else if Rume-tracker < 0]a little[else if Rume-tracker < 10]some[else]significant[end if] interest in finding a way back to Rume[if player is wounded], you've injured yourself[end if][if time for excitement], and based on my best guess, I'd say you're a little bored right now[end if]"; say ". And never forget that at first you chose [if we chose love]love[else]art[end if]." instead. Definition: a region is explored: if the number of visited rooms regionally in it is at least 1, yes; no. Understand "notify" as switching score notification. Switching score notification is an action out of world applying to nothing. Understand "notify on" or "notify off" as a mistake ("[as the parser]You can simply type NOTIFY to toggle stats mode[as normal]."). Check switching score notification: if stats mode is false: now stats mode is true; say "[as the parser]Stats mode turned on[as normal]." instead; else: now stats mode is false; say "[as the parser]Stats mode turned off[as normal]." instead. Section - xyzzy [ A little Easter egg.] Xyzzying is an action out of world applying to nothing. Understand "xyzzy" as xyzzying. Carry out xyzzying: say "Here are some of the albums that were on constant play during my writing of Blue Lacuna, along with, in some cases, which sequence they helped shape. These albums can perhaps be thought of as the unofficial soundtrack: Gyorgi Ligeti, Requiem[line break] Lisa Gerrard, The Silver Tree -- the Windsigh[line break] Ryan Miller, Tim Larkin and Jack Wall, soundtracks to the Myst games -- exploring[line break] Michael Stearns, The Lost World -- the eastern forest[line break] Colleen, The Golden Morning Breaks -- Phoebe and Lethe[line break] amiina, Animamina and Kurr -- Phoebe and Lethe[line break] Kenji Kawai, Ghost In The Shell Soundtrack -- The Great Philosopher[line break]"; say "Robert Rich, Gaudi / Below Zero -- The Heart of the Forest[line break] Jakob Draminsky Højmark, En Landsoldats Dagbog -- Progue's Despair[line break] Jocelyn Pook, various -- painting[line break] Jeremy Soule, Game Soundtracks[line break] Michael Andrews, Donnie Darko Original Score -- Progue's Playfulness[line break] Aphex Twin, Melodies From Mars -- Progue[line break] Eluvium, various albums -- the dreams And other albums which are not tied to particular moments but which nevertheless received heavy play during the writing: Geinoh Yamashirogumi, Akira Soundtrack / Ecophony Gaia[line break] [xyzzy2]". To say xyzzy2: say "Brian Tyler, Children of Dune[line break] Matt Uelmen, Diablo II Soundtrack[line break] Leon Willet, Dreamfall Soundtrack[line break] Philip Glass, Koyaanisquatsi[line break] Paul Ruskay, Homeworld Soundtrack[line break] Juno Reactor, Labyrinth[line break] Sigur Rós, various albums[line break] Lemon Demon[line break] Vangelis, various albums[line break] Clint Mansell, The Fountain[line break] and the entire Jonathan Coulton catalog.". Understand "things" as thing-listing. Thing-listing is an action out of world applying to nothing. Carry out thing-listing: say "Nearby [is-are the list of mentionable things]." Chapter - Emphasized Keyword Processing [ Precedence rules: Mistakes always take precedence over non-mistakes. A more specific grammar line takes precedence: "a door" is more specific than "a thing" "a robust thing" is more specific than "a thing" "a thing" is more specific than "any thing" Earlier lines of equal specificity take precedence. Ergo, the following lines are in order of precendence. ] Understand "[a metalike prop]" as examining by name. Understand "[a metalike thing]" as examining by name. [ If we need to discuss a thing, add a check rule (see distant-tree3 in Lacuna). ] [This is distinct so that takeable things will be selected before background objects without disambiguation questions. Players can always "x something" to disambiguate as normal.] Understand "discuss [any metalike beat]" or "[any metalike beat]" as discussing. Understand "[any landmarkable room]" or "go [any landmarkable room]" or "go to [any landmarkable room]" or "go back to [any landmarkable room]" as landmark-going. Definition: a room is landmarkable if it is landmarked and it is visited. Understand "go to [a direction]" as going. Understand "go in to [something]" as entering. Understand "go down [something]" as entering. Understand "go up [something]" as entering. Understand "[any seen thing]" as remembering. [ See Remembering for definition of seen.] Understand "examine [an unimplemented door]" or "x [an unimplemented door]" as a mistake ("[as the parser]Most of the time, exits are more useful for moving towards than examining more closely. In this case, there are no further interesting details to be seen.[as normal]"). Definition: a thing is metalike if 1 is 1. A door can be either implemented or unimplemented. A door is usually unimplemented. Chapter - Synonyms and New Grammar Understand the command "nothing" as "listen". Understand "say nothing" as listening. Understand "look [something]" as examining. Understand the command "bring" or "grab" as "take". Understand the command "see" as "look". Understand the command "place" as "put". Understand "wayfarer" as yourself when last beat is silence. Understand the command "shift" as something new. Understand the command "cover" as something new. Check taking a person: try touching noun instead. Check swearing mildly: try swearing obscenely instead. Understand "sit [something]" or "sit at [something]" as entering. Does the player mean entering a supporter: it is likely. Understand the command "descend" or "ascend" as "climb". The can't push what's fixed in place rule is not listed in any rulebook. Understand the command "raise" or "lift" as "pull". Understand the command "lower" [or "poke"] as "push". Understand the command "catch" or "untie" as "take". Understand the command "spin" as "turn". Understand the command "wave" as something new. Understand the command "shed" as something new. Understand the command "tree" as something new. Understand the command "pay" as something new. Understand the command "buy" as something new. Understand "add [something] to [something]" as putting it on. sleeponing is an action applying to one thing. Understand "sleep on/in [something enterable]" or "rest on/in [something enterable]" or "lie down on/in [something enterable]" or "lay down on/in [something enterable]" or "lay on/in [something enterable]" or "lie on/in [something enterable]" as sleeponing. Check sleeponing: if it is before 5:01 AM or it is after 6:59 PM, try entering noun; try sleeping instead. Understand the command "light" as something new. Understand "climb [a direction]" as going. Understand "climb into/in/on/through [something]" as entering. [ Understand "climb [a direction] [something]" as overly-specific-going. Understand "climb [something] [a direction]" as overly-specific-going (with nouns reversed). Overly-specific-going is an action applying to two things. Carry out overly-specific-going: try going noun instead. ][ Doesn't work because of issues parsing directions.] Understand "get in" as entering. Rule for supplying a missing noun when entering: if an enterable supporter (called platform) is enclosed by the location begin; change the noun to platform; otherwise if an enterable container (called platform) is enclosed by the location; change the noun to platform; otherwise; speak as the parser "I'm not sure what you wanted to do that to."; end if. Understand "get out of/from [something enterable]" or "exit [something enterable]" as specific-exiting. Specific-exiting is an action applying to one thing. Carry out specific-exiting: try exiting. Understand "off" as exiting. Understand "go to bed" or "go to sleep" or "lie down" as sleeping. Understand the command "cross" as something new. Understand "sit down" as entering. Understand "sit down on [something]" as entering. [ Understand "drink from [something]" as tasting. ][For some reason, this doesn't work.] Check looking (this is the differentiate player-requested looks rule): let pcmd be indexed text; let pcmd be the player's command; if pcmd exactly matches the text "l" or pcmd exactly matches the text "look", now player-looking is true. Before reading a command (this is the reset player-looking rule): now player-looking is false. player-looking is a truth state that varies. Understand "extinguish [something]" or "douse [something]" or "blow [something]" as switching off. Understand the command "fix" as something new. Understand the command "short" as something new. Understand the command "long" as something new. Understand the command "explore" as "go". Understand the command "find" as "examine". Understand the command "place" as something new. Chapter - Player Commands Section - Wayfaring and Painting Understand "wayfare" as wayfaring. Wayfaring is an action applying to nothing. Check wayfaring: say "You wayfare by painting." instead. Vague painting is an action applying to nothing. Understand "paint" or "draw" or "work" or "make" or "finish" as "[paintword]". Understand "[paintword]" or "answer call" or "answer the call" as vague painting. Painting is an action applying to one thing. Understand "use [lacuna-canvas]" or "use [paintbrushes]" or "[paintword] with [paintbrushes]" or "[paintword] [lacuna-canvas]" or "[paintword] on [lacuna-canvas]" as painting. Carry out painting: say "[cantpainthere].". Carry out vague painting: say "[cantpainthere].". To say cantpainthere: say "There's nothing here to paint with[if location is regionally in Homeworld]; you must get to your studio[end if]". Section - Using Understand "use [an edible thing]" as eating. Understand "use [a wearable thing]" as wearing. Understand "use [a closed openable container]" as opening. Understand "use [an open openable container]" as closing. Understand "use [a switched off device]" as switching on. Understand "flip [something]" as switching on. Understand "use [something]" as using. Using is an action applying to one thing. Carry out using: say "[as the parser]You will have to be more specific about your intentions[as normal]." Understand "use [a door]" as opening. Understand "use [an open door]" as entering. Understand "use [something enterable]" as entering. Section - Leaping and Crossing Understand "jump in/into/across/over [something]" or "dive in/into [something]" as leaping. Understand "jump off/from [something]" or "jump off/out of [something]" as leaping. Understand "jump on/onto [something]" as entering. Leaping is an action applying to one thing. Carry out leaping: if noun is not enterable, try jumping instead; try entering noun. Understand "cross [something]" or "cross over [something]" as crossing. Understand "cross" as crossing. Crossing is an action applying to one thing. Carry out crossing: say "That's not something you can cross." Section - Going Back The former location is a room that varies. First carry out going rule (this is the update the former location rule): change the former location to the location. Understand "go back" as retreating. Understand "back" or "return" or "retreat" as retreating. Retreating is an action applying to nothing. Check retreating when the former location is the location: say "You haven't gone anywhere yet." instead. Carry out retreating: if former location is an adjacent room, head to former location; otherwise say "You can't see an open way back." Section - Following Following is an action applying to one thing. Understand "follow [any seen thing]" or "approach [any seen thing]" or "go to/towards/after [any seen thing]" or "go [any seen thing]" or "walk to/towards/after [any seen thing]" or "move to/towards [any seen thing]" as following. Check following: if noun is off-stage and noun is distant-progue, try following Progue instead; if noun is off-stage, say "[as the parser]You can't approach or follow that noun, either because it's not important, no longer relevant, or I misunderstood the noun.[as normal]" instead; if noun is a heavenly body, say "Would that you could." instead; if noun is distant-rayfish and location is not Ocean Waters: let way be the best route from location to Ocean Waters; if way is a direction: try going way instead; else: say "[cantfollowmsg]" instead; if noun is not a backdrop and noun is enclosed by location, say "But [the noun] [is-are of noun] right here." instead; if noun is an adjacent room, head to noun instead; [ if noun is a landmarked room, try wordgoing noun instead;] if noun is a view and the base room of noun is not Unroom: if base room of noun is location, say "You're already there." instead; let way be the best route from location to base room of noun; if way is a direction: unless the room way from location is base room of noun, say "(moving one area towards that destination)[command clarification break]"; try going way instead; else: say "[cantfollowmsg]" instead; if noun is old path: if location is South Beach: try going southeast instead; if location is Sloping Meadow: try going west instead; if location is Big Tree: try going north instead; try requesting the exits text instead; if noun is bridge: if location is Volcano Floor, try going northwest instead; if location is Sloping Meadow, try going east instead; if location is Rockslide, try going southwest instead; if location is Jumble, try going southeast instead; if ( location is regionally in Homeworld and noun is not regionally in Homeworld ) or ( location is regionally in Lacuna and noun is not regionally in Lacuna ) or ( location is regionally in Rebelworld and noun is not regionally in Rebelworld ) or ( location is regionally in Treeworld and noun is not regionally in Treeworld ) or ( location is regionally in Dreamlands and noun is not regionally in Dreamlands ) , say "You wish you knew how to get there from here." instead; if noun is a person and noun is enclosed by location: say "[The noun] [is-are] still here." instead; if noun is a person and location of noun is adjacent to location: head to location of noun; do nothing instead; [ let way be the best route from location to location of noun; if way is a direction, try going way instead; else say "[cantfollowmsg]" instead;] if noun is a room: let way be the best route from location to noun; if way is a direction: unless the room way from location is location of noun: say "(moving one area towards that destination)[command clarification break]"; try going way instead; else: say "[cantfollowmsg]" instead; if noun is off-stage: say "[cantfollowmsg]" instead; let way be the best route from location to location of noun; if way is a direction: unless the room way from location is location of noun: say "(moving one area towards that destination)[command clarification break]"; if noun is distant-Progue or noun is Progue, move distant-Progue to the room way from location; try going way instead; say "[cantfollowmsg]" instead. To say cantfollowmsg: say "You'll have to work out how to get there on your own.[actfast]". [ After deciding the scope of the player while following: repeat with locale running through adjacent rooms begin; place locale in scope; end repeat. ] The my-reach-inside-rooms rule is listed instead of the can't reach inside rooms rule in the reaching inside rulebook. This is the my-reach-inside-rooms rule: if not following and not remembering, abide by the can't reach inside rooms rule. Carry out following: do nothing. Section - Navigate by room names [Speed tests showed that the below method was significantly faster than using Inform's built-in pathfinding, which became very significant when travelling via landmark, where both Progue and the player would be doing this calculation multiple times per move.] To head to (destination - a room): if the room north of location is destination begin; try going north; else if the room northeast of location is destination; try going northeast; else if the room east of location is destination; try going east; else if the room southeast of location is destination; try going southeast; else if the room south of location is destination; try going south; else if the room southwest of location is destination; try going southwest; else if the room west of location is destination; try going west; else if the room northwest of location is destination; try going northwest; else if destination is above location; try going up; else if destination is below location; try going down; else if the room inside location is destination; try going inside; else if the room outside from location is destination; try going outside; else; try going north; end if. Rule for clarifying the parser's choice of a room: do nothing instead. Section - Type nouns alone to examine them Examining by name is an action applying to one thing. Carry out examining by name: try examining noun. Section - Going by Landmark A room can be landmarked or unlandmarked. A room is usually unlandmarked. A room has some text called the landmark name. The landmark name of a room is usually "null". The last landmark turn is a number that varies. The last landmark turn is 0. [ This number stores the turn count on which we last discovered a new landmark, useful for the drama manager.] Understand "landmark" or "landmarks" as landmark-listing. Landmark-listing is an action applying to nothing. we-are-landmark-going is a truth state that varies. First report going to an unvisited landmarked room: say "(new [d]landmark[x] discovered)[command clarification break]"; now last landmark turn is turn count; continue the action. After reading a command: if the player's command matches "go" or the player's command matches "walk", replace the player's command with "landmark"; if the player's command matches "lie down" or the player's command matches "lay down" or the player's command matches "go to sleep", replace the player's command with "sleep". Definition: a room is unadjacent if it is not the location and it is not adjacent to the location. Landmark-going is an action applying to one thing. Check landmark-going: if noun is location, say "You're already here." instead; if noun is adjacent to location, head to noun instead. To decide whether ready to landmark-go: if ( noun is regionally in Homeworld and player is not regionally in Homeworld ) or ( noun is regionally in Lacuna and player is not regionally in Lacuna ) or ( noun is regionally in Rebelworld and player is not regionally in Rebelworld ) or ( noun is regionally in Treeworld and player is not regionally in Treeworld ) begin; say "That's in a whole other world[if noun is regionally in Homeworld]... one you can never return to[end if]."; decide no; end if; if the holder of the player is not a room, try exiting; if location is not noun begin; say "You head towards "; if the prose name of noun is "NULL", say "[the noun]."; otherwise say "[the prose name of noun]."; end if; truncate travelogue to 0 entries; decide yes. Travelogue is a list of objects that varies. To clean up landmark-go, silently: if we-are-landmark-going is false, stop; [ If this has been set by hand, it's assumed we've done all this already.] now we-are-landmark-going is false; remove location from travelogue, if present; if not silently: if location is not noun, say "(Before you arrive, you were distracted"; if the number of entries in travelogue is at least 1: if location is noun, say "On your way, you pass through "; otherwise say ", after passing through "; let ctr be 1; repeat with loc running through travelogue: say prose name of loc; if ctr is ( number of entries in travelogue - 1 ) : say " and "; otherwise if ctr < number of entries in travelogue: say ", "; increase ctr by 1; say "[if location is not noun].)[otherwise if the number of entries in travelogue is at least 1].[end if]"; say "[line break][bold type][location][roman type][line break][description of location][line break]". [ We do it this way so we don't spend a turn looking, which would prevent us from immediately reacting to something that stopped us.] Carry out landmark-going: if ready to landmark-go begin; now we-are-landmark-going is true; while location is not noun and we-are-landmark-going is true begin; let aim be the best route from the location to noun, using doors; let target be the room aim from location; if aim is not a direction or target is not a room begin; say "You can't seem to progress any farther ([aim])."; stop; end if; try silently going aim; if location is not target begin; clean up landmark-go; stop; otherwise; add location to travelogue; end if; follow the turn sequence rules; [ Why? well, for Progue to move. ] end while; clean up landmark-go; end if. Section - Swimming Swimming in is an action applying to one visible thing. Understand "swim in [something]" or "wade in [something]" as swimming in. Carry out swimming in: say "You don't see a good place to swim here." Vague swimming is an action applying to nothing. Understand "swim" or "go swimming" as vague swimming. Carry out vague swimming: say "You don't see a good place to swim here." Section - Digging [ This is something people often try, so we implement it. It's also used in the Rebelworld segment. ] Digging is an action applying to nothing. Understand "dig" as digging. Specific digging is an action applying to one topic. Understand "dig [text]" as specific digging. Check specific digging: try digging instead. Carry out digging: if location is regionally in Beachfront begin; say "You dig a little in the sand with your hands, down to a cooler layer of wetter beach, but find little of interest."; otherwise if location is regionally in Tiderooms or location is regionally in Marshlands; say "It's too wet to dig here."; otherwise if location is Rockslide; say "It's too rocky to dig here."; otherwise if location is Hive Room or location is Edge of Ravine or location is Viewpoint or location is regionally in Rain Forest; say "You dig a little through the dirt, but it's not very fun, clean, or effective with just your bare hands."; otherwise if location is Sloping Meadow or location is Crater Pond or location is Lawn or location is Observatory Exterior; say "The grass is too hardy to dig through with just your bare hands."; otherwise if location is regionally in Frozen Hell or location is Chasm Edge or location is Rise; say "Through hardened lava rock? Not likely."; otherwise if location is Ledge; say "Through rock? Not likely."; otherwise; say "You don't really have the proper tools or energy to dig here."; end if. Section - Knocking Knocking is an action applying to one visible thing. Understand "knock [something]" or "knock on [something]" as knocking. Carry out knocking: say "Nothing happens." Vague knocking is an action applying to nothing. Understand "knock" as vague knocking. Carry out vague knocking: speak as the parser "You'll have to specify what you want to knock." Section - Taking Shelter From Taking shelter from is an action applying to one topic. Understand "take shelter [text]" or "hide under [text]" as taking shelter from. Check taking shelter from: try taking shelter in general. Taking shelter in general is an action applying to nothing. Understand "take shelter" or "hide" as taking shelter in general. Check taking shelter in general (this is the can't take shelter when no reason rule): if weather state is not raining, say "There's nothing you need to take shelter from right now." instead. Report taking shelter in general: if the location contains a setpiece, say "You huddle in the leeward side of [the random setpiece in the location], managing to avoid most of the downpour."; otherwise say "You take shelter as best you can from the rain.". Section - Help Understand "help [someone]" or "save [someone]" as a mistake ("[if noun is Progue and psyche of Progue is emotional]You pull the blankets closer around him and make him as comfortable as you can, but otherwise there's not much else you can do[else if current episode is Water Works][as the parser]You'll have to try something specific[as normal][else]You're not sure how to help [it-them of noun][end if]."). Section - Mourning Understand "cry" or "weep" or "mourn" or "grieve" or "regret" or "repent" or "pray" or "lament" as "[mourning word]". Understand "[mourning word]" or "think of/about Rume" as mourning. Mourning is an action applying to nothing. Understand "[mourning word] [text]" as a mistake ("[mourning-text]"). Carry out mourning: say mourning-text. To say mourning-text: if current chapter is 1 begin; say "You feel only the mounting dread of impending loss. The loss itself is not yet real."; otherwise if current chapter <= 3; say "[one of][missRumelots][or][stopping]"; if the player's command includes "cry" or the player's command includes "weep", say "Tears fill your eyes and then trickle down your cheek, slow, wet. "; if the player's command includes "think" or the player's command includes "mourn" or the player's command includes "grieve", say "You sink to your knees and clutch yourself tightly as the pain of your loss rolls through you. "; say "Dread finality fills you, tinged with red regret, and you know your loss all over again. Finally, you recover yourself. Rume is gone, and you must move on."; otherwise; say "You remember Rume, but the memory is only a dull ache that your consciousness will not, for the moment, allow you to prod."; end if. To say missRumelots: miss Rume a lot. Section - Shaking Understand "shake [something]" as shaking. Shaking is an action applying to one thing. Carry out shaking: try pushing noun instead. Section - Tasting [ We make no distinction between eat, drink, and taste, and as tasting does not require the object to be held, we route them all into that action.] Understand the command "eat" as something new. Understand the command "drink" as something new. Understand "eat [something]" or "drink [something]" as tasting. Understand the command "lick" as "taste". Section - Extended Waiting [ Two forms of waiting which are often tried by players in a game with a day/night system-- waiting for a certain time and waiting for a certain *amount* of time. First some utility functions:] To decide which time is the time corresponding to (moment - an interval): if moment is dawn, decide on 4:01 AM; if moment is sunrise, decide on 5:01 AM; if moment is morning, decide on 5:10 AM; if moment is midmorning, decide on 7:01 AM; if moment is midday, decide on 10:31 AM; if moment is afternoon, decide on 2:31 PM; if moment is evening, decide on 5:31 PM; if moment is sunset, decide on 7:01 PM; if moment is twilight, decide on 7:20 PM; if moment is night, decide on 8:01 PM; decide on 12:01 PM. To decide what number is the number of minutes between (starttime - a time) and (endtime - a time): [ The math goes wrong if we do this too fast for some reason...] let startt be the hours part of starttime; if startt > 12, decrease startt by 12; now startt is startt * 60; if starttime is after 12:59 PM and starttime is before 12:00 AM, now startt is startt + 720; increase startt by the minutes part of starttime; let endt be the hours part of endtime; if endt > 12, decrease endt by 12; now endt is endt * 60; if endtime is after 12:59 PM and endtime is before 12:00 AM, now endt is endt + 720; increase endt by the minutes part of endtime; let finalt be endt - startt; if finalt < 0, increase finalt by 720; decide on finalt. [ Map a command like "wait till sunset" to waiting for a specific amount of time.] Understand "wait til/till/until/for [an interval]" as waiting until. Waiting until is an action applying to one interval. Check waiting until: if location is not regionally in Lacuna, say "[if location is regionally in Dreamlands]You're not sure whether time passes or not[else]There's too much at stake to just wait around right now[end if]." instead. Check waiting until: if current interval is the interval understood, say "It's [current interval] now." instead. Check waiting until: if the interval understood is low tide or the interval understood is high tide, say "You don't know the tides here well enough to be sure when that might be, but you can try waiting for a certain number of hours, or until a certain time of day." instead. Carry out waiting until: let target time be the time corresponding to the interval understood; try waiting for ( 12:01 AM + the number of minutes between the time of day and target time minutes - 1 minute ) instead. [ Now understand waiting for a specific amount of time. Because of the way episodes are triggered, we have to be careful not to skip over things that should be happening at certain times.] Understand "wait for [a time period]" or "wait [a time period]" as waiting for. Waiting for is an action applying to one time. Check waiting for: if location is not regionally in Lacuna, say "[if location is regionally in Dreamlands]You're not sure whether time passes or not[else]There's too much at stake to just wait around right now[end if]." instead. Carry out waiting for: if the heavens are being debugged, say "**waiting for [the time understood]**"; if the time understood > 8 hours, say "You can't just wait around for that long." instead; if the time understood < 5 minutes, speak as the parser "In the future, to wait for just a few minutes you can simply type WAIT." instead; if current interval is night, say "If you try to wait that long, you're likely to fall asleep. Better find a good spot for that." instead; if an attentive other person is enclosed by location, say "That would be rude to do while you're in the middle of this discussion." instead; if an episode is playing, say "You find you are too keyed up just now to wait around." instead; let old-time be the time of day; let old-interval be current interval; let new-time be the time understood; if ambience_on is 1, say "You pace restlessly as the time passes[time-of-day-bit]."; let totaltime be new-time; increase totaltime by the time of day; if the heavens are being debugged, say "**about to test 'while the time of day [the time of day] < the time of day + new-time ([new-time]) (which is [totaltime]) and an attentive other person is not enclosed by location ([if an attentive other person is not enclosed by location]yes[else]no[end if])'**"; while the time of day < totaltime and the number of attentive people is 0 begin; if the heavens are being debugged, say "**yes**"; increase the time of day by new-time; [ This is temporary; we'll set it back and use the proper "pass x minutes" method in a moment.] if the heavens are being debugged, say "%[the time of day]%%[current interval]%"; update interval; change the time of day to old-time; if the heavens are being debugged, say "**about to test whether current interval [current interval] > old-interval [old-interval]"; if current interval > old-interval or ( current interval is night and current interval < old-interval ) begin; [ if the total amount of waiting time remaining switches us to a new interval, we need to change so that we're only advancing one interval's worth of time. This is because certain events may be triggered by the transition to a certain interval, so we need to give them a change to fire and potentially interrupt the waiting.] if the heavens are being debugged, say "**yes**"; if old-interval is night, let tmptime be the time corresponding to dawn; else let tmptime be the time corresponding to the interval after old-interval; if the heavens are being debugged, say "**old-time: [old-time]; tmptime: [tmptime]; mins: [the number of minutes between old-time and tmptime]; old-interval: [old-interval]; current interval: [current interval]**"; pass ( the number of minutes between old-time and tmptime ) minutes of time; if old-interval is night, now old-interval is dawn; else now old-interval is the interval after old-interval; if the heavens are being debugged, say "**decreasing new-time [new-time] by [the number of minutes between old-time and tmptime] minutes --> "; decrease new-time by ( the number of minutes between old-time and tmptime ) minutes; if the heavens are being debugged, say "[new-time] (-3 mins)**"; now old-time is the time of day; else; if the heavens are being debugged, say "**no**"; decrease new-time by ( the number of minutes between the time of day and totaltime ) minutes; pass ( the number of minutes between the time of day and totaltime ) minutes of time; end if; decrease new-time by 3 minutes; [ to account for the time that will pass when we follow the turn sequence rules.] if the heavens are being debugged, say "**following turn sequence**"; follow the turn sequence rules; now totaltime is new-time; increase totaltime by the time of day; if the heavens are being debugged, say "**about to test 'while the time of day [the time of day] < the time of day + new-time ([new-time]) (which is [totaltime])'**"; end while; if ambience_on is 1, try looking. Section - Sleeping A room has some text called the sleep message. The sleep message of a room is usually "". A person can be either asleep or awake. A person is usually awake. Yourself is awake. Yourself has a number called sleep debt. The sleep debt of yourself is 0. Every turn when yourself is awake and night and player is regionally in Lacuna and the sleep debt of yourself <= 7 (this is the growing tired rule): if a random chance of 1 in 10 succeeds begin; add potential messages from the Table of Sleepy Messages; increase the sleep debt of yourself by 1; end if. Every turn when yourself is awake and night and player is regionally in Lacuna and the sleep debt of yourself > 7 (this is the growing really tired rule): if a random chance of 1 in 8 succeeds begin; add potential messages from the Table of Really Sleepy Messages; increase the sleep debt of yourself by 1; end if. Table of Sleepy Messages freq start time end time text table trigger flag guaranteed -- -- "You stifle a yawn[one of] and rub your eyes... you're getting tired[or]. You're starting to feel pretty tired[in random order]." Table of Really Sleepy Messages freq start time end time text table trigger flag guaranteed -- -- "You blink away haze from your eyes blearily. You aren't sure how much longer you can stay awake." guaranteed -- -- "You feel dead on your feet. You really need to get some sleep." guaranteed -- -- "You are dead tired. Better find some place to rest." The block sleeping rule is not listed in any rulebook. The block waking up rule is not listed in any rulebook. [ Override Inform's normal behavior.] Sleeptime is a number that varies. Old time factor is a number that varies. Wakeup time is a time that varies. Wakeup time is 5:20 AM. Check sleeping when location is regionally in Lacuna and it is after 5:00 AM and it is before 7:00 PM (this is the napping rule): if already-napped is true: say "You can only take so many naps in one day, you know. Might as well make it to sunset." instead; otherwise if evening: say "It's close to sunset; you might as well stay up at least till then." instead; otherwise if an episode is playing: say "You lay your head down and try to shut your eyes, but you seem to be too keyed up for sleep just now; thoughts and images race through your mind. Finally you stand again, resigned to wakefulness for now." instead; otherwise if Epilogue is happening: say "You can't. Not now." instead; otherwise: now already-napped is true; if the sleep message of location is not "", say sleep message of location; otherwise say "Yawning, you lie down and settle in for a good nap."; print a section break; let old_ambience be ambience_on; now ambience_on is 0; try waiting for two hours; now ambience_on is old_ambience; be more bored with "taking a nap"; say "[if good place to dream]You drowse lazily, half-aware on occasion of your surroundings, but also half-aware of something else, faint ticklings of premonition or urgent murmurs you can't quite catch, seeping up from some fuller, deeper sleep.[paragraph break][end if]You awaken a few hours later, "; if it is after 6:00 PM, say "still feeling sleepy"; else say "feeling refreshed"; say "."; try looking instead. already-napped is a truth state that varies. Dreams is a thing. Carry out sleeping: let xmins be 0; now wakeup time is a random number from -50 to 20 minutes after 5:00 AM; if the hours part of the time of day < 12, now xmins is ( 60 * -1 * the hours part of time of day ) - 60; otherwise now xmins is ( 23 - the hours part of the time of day ) * 60; now xmins is xmins + ( 60 - the minutes part of the time of day ) ; now xmins is xmins + ( the hours part of wakeup time * 60 ) ; now xmins is xmins + the minutes part of wakeup time; now sleeptime is xmins; if location encloses a nook (called platform) and player is not enclosed by platform, try entering platform; if the sleep message of location is not "", say sleep message of location; otherwise say "Yawning, you kick off your shoes and settle in for a good rest."; if dreams are being debugged, say "// Dreams: time now: [time of day]; sleeptime [sleeptime] minutes, wakeup time: [wakeup time]."; now old time factor is time factor; now time factor is 0; [ stop time ] now the player is asleep. Check waking up (this is the can't wake up if already awake rule): if the player is awake, say "But you're already awake." instead. [ See also the special rules in Lacuna-Dreams that prevent waking up from a dream early.] pseudo-dream is a number that varies. pseudo-dream is 0. Carry out waking up: wake up now. To wake up now: if yourself is awake begin; if dreams are being debugged, say "// Dreams: wake up now: skipping since yourself already awake."; otherwise; if dreams are being debugged, say "// Dreams: wake up now."; if pseudo-dream is 0 begin; [ normally time passes after a dream; if this variable is larger than 0, we don't want it to. ] now time factor is sleeptime; [ this ensures we only have to follow the turn sequence rules once. ] if dreams are being debugged, say "// Dreams: setting time factor to sleeptime ([sleeptime])."; follow the turn sequence rules; if dreams are being debugged, say "// Dreams: setting time factor to old time factor ([old time factor])."; now time factor is old time factor; [ restart time ] now the sleep debt of yourself is 0; now wakeup time is 5:00 AM; now already-napped is false; if dreams are being debugged, say "// Dreams: advanced time to [time of day]."; end if; update interval; now yourself is awake; end if. The list of remembered stuff is a list of objects that varies. Every thing has some text called dream-text. The dream-text of a thing is usually "". Every turn when location is regionally in Lacuna and a random chance of 1 in 7 succeeds (this is the brain makes note of memorable things rule): if noun is a thing and noun is enclosed by location begin; if noun is not a person, add noun to the list of remembered stuff, if absent; otherwise; let macguffin be a random other thing enclosed by location; if macguffin is a thing begin; if macguffin is part of something (called mother), now macguffin is mother; if macguffin is a thing, add macguffin to the list of remembered stuff, if absent; end if; end if; let num be number of entries of list of remembered stuff; if num > 25, truncate list of remembered stuff to the last 10 entries; let num be number of entries of list of remembered stuff; if dreams are being debugged and num > 0, say "// Dreams: adding [entry num of list of remembered stuff] to list of remembered stuff.". The list of convo stuff is a list of objects that varies. [ Understand "lcs" as lcsing. Lcsing is an action out of world applying to nothing. Carry out lcsing: say "[list of convo stuff]". ] [ Noticing referencable things rule is in Lacuna-Progue.] Understand "yawn" as a mistake ("You yawn widely, starting to feel the day catching up with you. Maybe you should find a spot to get some [d]sleep[x]."). Understand "nap" or "take nap" or "take a nap" as sleeping. Section - Eyes Eye opening is an action applying to nothing. Understand "open eyes" or "open my eyes" as eye opening. Carry out eye opening: say "Your eyes are already open." [ This command can be synonymous with "wake up" but it mostly exists merely as a logical counterpart to "close eyes," which is used to leave Treeworld. ] Eye closing is an action applying to nothing. Understand "close eyes" or "close my eyes" or "close the eyes" or "blink" as eye closing. Check eye closing: try sleeping instead. [ See also Lacuna-Lacuna for dealing with other worlds.] Section - Inventory The print standard inventory rule is not listed in any rulebook. Carry out taking inventory: now everything is unmarked for listing; [ Don't ask. Please don't.] let pobj be yourself; if player is DrQuick, now pobj is DrQuick; if player is Lacunite-Follower, now pobj is Lacunite-Follower; if the number of things enclosed by pobj is 0, say "You are naked." instead; say "You are wearing "; now all things enclosed by pobj are unmarked for listing; now all things worn by pobj are marked for listing; if no things are marked for listing: say "nothing"; otherwise: list the contents of pobj, as a sentence, listing marked items only; now all things carried by pobj are marked for listing; now all things worn by pobj are unmarked for listing; now pobj is unmarked for listing; if at least one thing is marked for listing: if Progue is carried: say ", and carry Progue on your shoulders"; else: say ", and hold "; list the contents of pobj, giving inventory information, as a sentence, including contents, listing marked items only; say " in your hand"; if ( tree-password is set or rebel-password is set ) and location is regionally in Lacuna: say ". You are also carrying around "; if tree-password is set and rebel-password is set, say "two passwords"; else say "a password"; say " in your head: "; if tree-password is set, say "['][tree-password]"; if tree-password is set and rebel-password is set, say "['] and "; if rebel-password is set, say "['][rebel-password]"; say ".['][line break]"; else: say ".". Section - Examining Yourself Conds is a list of indexed texts that varies. Check examining yourself: truncate conds to 0 entries; let legmsg be indexed text; let legmsg be "Your leg still pains you enough that you won't be doing any jumping or climbing"; let rainmsg be indexed text; let rainmsg be "You are soaking wet"; let tire1msg be indexed text; let tire1msg be "You're exhausted"; let tire2msg be indexed text; let tire2msg be "You could really use a good night's sleep"; let rumemsg be indexed text; let rumemsg be "The pain of loss is still sharp in your chest"; let nakedmsg be indexed text; let nakedmsg be "You're naked"; let lovemsg be indexed text; let lovemsg be "Something inside you is giddy and flush with excitement"; let dreammsg be indexed text; let dreammsg be "You're still rubbing the sleep from your eyes"; [imperiled] if the player is wounded, add legmsg to conds; if raining and location is outdoorsy, add rainmsg to conds; if sleep debt of yourself > 10 begin; add tire1msg to conds; otherwise if sleep debt of yourself > 5; add tire2msg to conds; end if; if current chapter <= 3, add rumemsg to conds; if homemade outfit is not worn, add nakedmsg to conds; if romance of Progue >= 3, add lovemsg to conds; if the number of entries in list of remembered stuff <= 1, add dreammsg to conds; let endctr be number of entries in conds; repeat with ctr running from 2 to endctr begin; now entry ctr of conds is "[entry ctr of conds in lower case]"; end repeat; if the number of entries in conds is 0, say "You're not sure what to do next"; say "[conds], but otherwise you're doing all right." instead. Instead of touching or hugging yourself, try examining yourself. Part - Parser Improvements Section - Numbering disambiguation choices First before printing the name of something while asking which do you mean: if we are discussing, now disambiguation-busy is true. [ This prevents numbers from being printed before any objects like Progue we ask to describe themselves during a refusal to disambiguate.] Section - Eliminate inappropriate noun guessing Vague unlocking is an action applying to one thing. Understand "unlock [something]" as vague unlocking. Carry out vague unlocking: if noun is lockable, say "You don't have a key."; otherwise say "That's not something you can lock." [ Rule for supplying a missing noun when vague unlocking: if a random locked thing is visible, change the noun to a random locked visible thing.] Vague locking is an action applying to one thing. Understand "lock [something]" as vague locking. Carry out vague locking: if noun is lockable, say "You don't have a key."; otherwise say "That's not something you can lock." Rule for supplying a missing noun: if noun part of last-action is visible, change the noun to noun part of last-action; else speak as the parser "You must do that to something specific. Try your command again but with a noun as well.". [ last-action is defined in Drama Manager.] Rule for supplying a missing second noun: speak as the parser "You'll need to specify what you want to do that with." Does the player mean entering a thing which is not enterable: it is very unlikely. Understand the command "tie" as something new. Understand "tie" as a mistake ("[as the parser]You won't need to 'tie' anything in this story.[as normal]"). [ The following lines prevent Inform from guessing inappropriately if there is only one noun in the location and the player types the verb alone, something the one-word input encourages players to do. ] Understand "touch" as touching. Understand "take" as taking. Understand "examine" as examining. Understand "swim" or "wade" as vague swimming. Understand "open" as opening. Understand "close" as closing. Understand "push" as pushing. Understand "pull" as pulling. Understand "eat" as tasting. Understand "drink" as tasting. Understand "taste" as tasting. Understand "read" as reading. Section - Looking in Directions Check examining a direction (called dir): let rm be the room dir from location; if rm is a room, say "[if dir is up]Above you[otherwise if dir is down]Below you[otherwise if dir is inside]Inside[otherwise if dir is outside]Outside[otherwise]To the [dir][end if] is [if rm is visited][prose name of rm][otherwise]an unexplored area[end if]." instead; otherwise say "Unnavigable." instead. Section - Auto Get Off Check going somewhere (this is the auto get off rule): if player is in something (called the encloser) and the encloser is not a room: auto get off encloser; else if player is on something (called the encloser) and the encloser is not a room: auto get off encloser. To auto get off (encloser - a thing): say "(first leaving [the encloser])[line break]"; silently try exiting. Does the player mean getting off something not onable: it is very unlikely. Definition: a thing is onable: if it is a room, no; if it supports the player or it contains the player, yes; no. Section - Recognizing Unimplemented Scenery A stuff is a kind of thing. Stuff is always undescribed, fixed in place, and privately-named. The printed name of stuff is usually "scenery". Instead of doing anything to stuff: say "It's just part of the scenery.". Does the player mean doing anything to stuff: it is very unlikely. Section - Disable "All" After reading a command (this is the can't use all rule): if the player's command includes "all" and final release mode is true begin; speak as the parser "For various reasons, use of ALL is not allowed in Blue Lacuna. Please deal with objects one at a time instead."; reject the player's command; end if. Section - Clarifying the Parser's Choices Silently Rule for clarifying the parser's choice of something: do nothing. [ This tends to produce a confusing and obvious message most of the time; if we need to override with a more specific rule, we can. ] Section - Custom Library Error Messages [ Librarydebug-toggling is an action out of world applying to nothing. Understand "libdebug" as librarydebug-toggling. Carry out librarydebug-toggling: if library message debug is on, change library message debug to off; otherwise change library message debug to on.] To say emptylineinit: if the number of initapped things enclosed by location > 0 and final release mode is false, say "[paragraph break][the list of initapped things enclosed by location]". To say emptylineperson: if a described other person is enclosed by location and final release mode is false, say "[paragraph break][a random other person enclosed by the location]". Table of custom library messages (continued) Message Id Message Text LibMsg "Okay, I've taken back your last move.[as normal][line break]" LibMsg "[unless location is a flash-room][lookfudge][as normal][bold type][location][roman type][line break][description of location][emptylineinit][the initial appearance of a random initapped thing enclosed by location][emptylineperson][initial appearance of a random other uncarried person enclosed by location][end unless]" [ Hack of the year award.] LibMsg "[as the parser]Sorry, that doesn't make sense to me.[as normal][actfast]" LibMsg "[if location is regionally in Homeworld]You don't have the heart to burn [that-those of noun][else]There's no fire here to burn [that-those of noun] with[end if].[line break]" LibMsg "[as the parser]I'm interpreting that as an attempt to take part of the scenery, which either doesn't make sense or isn't an action I know how to process-- please try rephrasing![as normal][actfast]" LibMsg "Better keep it, for now.[line break]" LibMsg "You're already holding [that-those of noun].[as normal][line break]" LibMsg "I believe you're already on [the main object].[as normal][actfast]" LibMsg "You feel nothing unexpected.[line break]" LibMsg "I'm sorry if you're feeling frustrated. You might try typing HELP for an introduction to the commands, or SAVE to record your progress and come back later.[as normal][actfast]" LibMsg "You're not sure there's anything to be gained by climbing on [that-those of noun].[as normal][actfast]" LibMsg "Not here.[line break]" LibMsg "You wave, but you're unsure if anyone sees you.[as normal][line break]" LibMsg "[if the main object is a person]Think carefully before you take such a rash action[otherwise]You doubt violence will change much of anything[end if].[line break]" LibMsg "[as the parser]You seem to be trying to push something in a direction, but that's probably trying to be more specific than the story is capable of understanding. Try TAKE to pick up objects, or just mention the object in conversation if you want to show it to someone.[as normal][actfast]" LibMsg "Sorry, that doesn't make sense to me. Try again?[as normal][actfast]" LibMsg "Sorry, that doesn't make sense to me. Try again?[as normal][actfast]" LibMsg "[correct conv]" LibMsg "[if noun is bestial]You're a little afraid to get your lips near [it-them of noun].[otherwise]Now's not the right time for that[end if].[as normal][actfast]" LibMsg "[The noun] sh[ies] away from your touch.[line break]" LibMsg "[if location is Echo Chamber]The song bounces and echoes around the cave, distorted and twisted in weird ways, some syllables seeming to arrive later and some earlier than the order in which you sang them.[else if player is yourself]You sing quietly, an old song you learned as a child, forgotten for years until surfacing now.[otherwise]Nothing comes to mind.[end if][line break]" LibMsg "[invalidresponse]" LibMsg "[invalidresponse]" LibMsg "No problem.[as normal]" LibMsg "I couldn't understand that, or the noun you used isn't nearby.[as normal][actfast]" LibMsg "[if final release mode is false]1[end if][as the parser][notsurewhatyoumeant].[as normal]" LibMsg "[if final release mode is false]2[end if][as the parser][notsurewhatyoumeant].[as normal]" LibMsg "[if location is regionally in Dreamlands]There will be time for that later.[else]That's either too far away or not something I expected you to do that to.[actfast][end if]" LibMsg "You can't reach it from here.[line break][actfast]" LibMsg "You can't reach it from here.[line break][actfast]" LibMsg "You can't reach it from here.[line break][actfast]" LibMsg "[as the parser]Apologies, but that isn't something the story expected you to try eating[as normal].[line break]" LibMsg "[as the parser]For the most part, exit keywords should just be typed alone to move in that direction.[as normal][actfast]" LibMsg "Sorry, I didn't understand the part after " LibMsg "[as the parser]You can move to a new location by typing an emphasized [d]direction[x] keyword. Type LOOK to see nearby keywords again.[as normal]" LibMsg