Grouped Messages As Dialogue by Ron Newcomb begins here. "Allows the full complement of standard error and reporting messages to be changed wholesale to another set, instantly. Now these messages can be dressed-up as dialogue with whichever NPC is present." Include Complex Listing by Emily Short. Include Pronouns by Ron Newcomb. Section 1 - Errors As Dialogue [ ACTIVITIES MUST COME FIRST in rulebooks!] Use grouped messages as dialogue debugging translates as (- Constant DEBUG_GROUPED_MSGS_AS_DIALOGUE; -). The default errors are a rulebook. The default errors have default success. First default errors rule: if using grouped messages as dialogue debugging option, say "// Parser error holds a [parser-error in words]"; continue the action. Last default errors rule (this is the Setup For I6 Call rule): if using grouped messages as dialogue debugging option, say "// Consulting Inform6 for messages for [message of game error]"; rule fails. A person has a rulebook called observations. The observations of a person is usually the default errors rulebook. The observer is a person that varies. The observer finder rules are a rulebook. A rule for observer finder (this is the Consult Character's Errorbook rule): if observer is nothing begin; if using grouped messages as dialogue debugging option, say "// 'Observer Finder' can't consult 'observer' for [message of game error]: 'observer' is Nothing"; continue the action; end if; if using grouped messages as dialogue debugging option, say "// 'Observer Finder' consults [observer]'s '[observations of the observer]' for [message of game error]"; abide by the observations of the observer. Last observer finder rule (this is the Consult Default Errorbook rule): if using grouped messages as dialogue debugging option, say "// 'Observer Finder' consults the default errors rulebook for [message of game error]"; abide by the default errors rulebook. The current errorbook is a rulebook that varies. The current errorbook is usually the observer finder rulebook. To say consult the/a/an/-- (code - a rule): abide by the code. Before clarifying the parser's choice: if using grouped messages as dialogue debugging option, say "// Clarifying the parser's choice"; now cull inform default messages is 1; consider the current errorbook; if the rule failed, now cull inform default messages is 0. Rule for clarifying the parser's choice when cull inform default messages is 1: if using grouped messages as dialogue debugging option, say "// 'Errors As Dialogue' skipping normal Clarifying the Parser's Choice processing"; do nothing. After clarifying the parser's choice: now cull inform default messages is 0. To decide which number is the parser-error: (- etype -). To decide whether the/-- parser error is did not make sense in this context: (- (etype == ASKSCOPE_PE) -). [ missing parser error ] [ deprecated code, but I won't delete in case I need it again. Before printing a parser error: if parser-error is 1, set the game error to LibMsg ; [when the parser error is didn't understand: ] ["I didn't understand that sentence."] if parser-error is 2, set the game error to LibMsg ; [when the parser error is only understood as far as:] ["I only understood you as far as wanting to "] if parser-error is 3, set the game error to LibMsg ; [when the parser error is didn't understand that number] ["I didn't understand that number."] if parser-error is 4, set the game error to LibMsg ; [when the parser error is can't see any such thing] ["You can't see any such thing."] if parser-error is 5, set the game error to LibMsg ; [when the parser error is said too little] ["You seem to have said too little!"] if parser-error is 6, set the game error to LibMsg ; [when the parser error is aren't holding that: ] ["You aren't holding that!"] if parser-error is 7, set the game error to LibMsg ; [when the parser error is can't use multiple objects:] ["You can't use multiple objects with that verb."] if parser-error is 8, set the game error to LibMsg ; [when the parser error is can only use multiple objects] ["You can only use multiple objects once on a line."] if parser-error is 9, set the game error to LibMsg ; [when the parser error is not sure what it refers to:] [I'm not sure what {the pronoun} refers to.] if parser-error is 10, set the game error to LibMsg ; [when the parser error is excepted something not included:] [You excepted something not included anyway!] if parser-error is 11, set the game error to LibMsg ; [when the parser error is can only do that to something animate:] [You can only do that to something animate.] if parser-error is 12, set the game error to LibMsg ; [when the parser error is not a verb i recognise:] [That's not a verb I recognize.] [NOTE the code is always S, but may print a Z for American dialect ] if parser-error is 13, set the game error to LibMsg ; [when the parser error is not something you need to refer to:] [That's not something you need to refer to in the course of this game.] if parser-error is 14, set the game error to LibMsg ; [when the parser error is can't see it at the moment: ] ["You can't see {the pronoun} ([the main object]) at the moment."] ; [ sometimes will change itself to instead ] if parser-error is 15, set the game error to LibMsg ; [when the parser error is didn't understand the way that finished:] [I didn't understand the way that finished.] if parser-error is 16, set the game error to LibMsg ; [when the parser error is not enough of those available:] ["None/Only [the number understood] of those is/are available."] [(address) pronoun_word,] if parser-error is 17, set the game error to LibMsg ; [when the parser error is not enough of those available: ] ["There are none at all available!"] ; [ sometimes will change to instead ] [when the parser error is nothing to do:] ["Nothing to do!"] if parser-error is 18, set the game error to LibMsg ; [when the parser error is did not make sense in this context:] ["That noun did not make sense in this context"] if parser-error is 19, set the game error to LibMsg ; [when the parser error is i beg your pardon:] ["I beg your pardon?"] if using grouped messages as dialogue debugging option, say "// 'Errors As Dialogue' attempting parser error processing for #[parser-error]: [message of game error]"; now cull inform default messages is 1; consider the current errorbook; if the rule failed, now cull inform default messages is 0. ] I6 error bug workaround is a truth state that varies. I6 error bug workaround is usually false. [ There's a bug in I6 file parserm.inf line 2000 that prints some stuff right there instead of putting that little routine inside L__M routine where it can be overridden properly. ] Before printing a parser error when parser error is only understood as far as: set the game error to LibMsg ; if using grouped messages as dialogue debugging option, say "// 'Errors As Dialogue' attempting parser error processing for [message of game error]"; now cull inform default messages is 1; consider the current errorbook; if the rule failed, now cull inform default messages is 0; now I6 error bug workaround is true. [ There's a bug in I7 that does not express this parser error. ] Before printing a parser error when parser error is did not make sense in this context: set the game error to LibMsg ; if using grouped messages as dialogue debugging option, say "// 'Errors As Dialogue' attempting parser error processing for [message of game error]"; now cull inform default messages is 1; consider the current errorbook; if the rule failed, now cull inform default messages is 0; now I6 error bug workaround is true. [ These two lines are needed in order to finish the processing of the above two paragraphs ] Rule for printing a parser error when cull inform default messages is 1 and I6 error bug workaround is true: if using grouped messages as dialogue debugging option, say "// 'Errors As Dialogue' skipping normal parser error processing for [message of game error]"; do nothing. After printing a parser error: now cull inform default messages is 0; now I6 error bug workaround is false. Section 2 - Which Do You Mean as Dialogue - written by Emily Short Definition: a thing is parselist-fitting if it fits the parse list. Rule for asking which do you mean: if message of game error is LibMsg , set game error to LibMsg ; if answering the NPC is changing phase begin; [ setting up the parser for a third go] now answering the NPC is ready for answer; rule succeeds; end if; prepare a list of parselist-fitting things; if using grouped messages as dialogue debugging option, say "// Asking which do you mean with [the number of filled rows in the table of scored listing in words] nouns"; [ if using grouped messages as dialogue debugging option, say "// Asking which do you mean, [the prepared list delimited in disjunctive style]."; [ CAN ONLY PRINT THIS LIST ONCE! ] ] abide by the current errorbook; [say "'Which one, man? I've got [a prepared list delimited in sequential style].'"] To decide whether (N - an object) fits the parse list: (- (FindInParseList({N})) -) Include (- [ FindInParseList obj i k marker; marker = 0; for (i=1 : i<=number_of_classes : i++) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; k = match_list-->marker; if (k==obj) rtrue; } rfalse; ]; -). Section 3 - Understand As Far As as Dialogue - written by Emily Short To decide what number is the first misunderstood word: (- (wn - 1) -). To say parser-understood words: (- PrintPatternCommand(); -). Include (- [ PrintPatternCommand m pcount pcount2; if (etype == UPTO_PE) { for (m=0 : m<32 : m++) pattern-->m = pattern2-->m; pcount = pcount2; PrintCommand(0); } ]; -). To say parser-confusing words: let N be indexed text; let N be the player's command; repeat with index running from first misunderstood word to the number of words in N begin; if index is greater than the first misunderstood word, say " "; say word number index in N; end repeat. Section - free parser from question state (doesn't work well if at all) Free parser from question state is a truth state that varies. Free parser from question state is false. To end the parser's question: now free parser from question state is true; change the text of the player's command to "l"; now cull inform default messages is 1; carry out the reading a command activity. [ DOESN'T WORK WELL ] Rule for reading a command when free parser from question state is true: [ INSTEAD OF ACTUALLY READING A COMMAND, DO THIS: ] do nothing. First after reading a command when free parser from question state is true: now free parser from question state is false; reject the player's command. Section 4 - How an NPC Causes A Parser Error, on Purpose The verb word is some text that varies. A thing can be relevant or irrelevant. A thing is usually irrelevant. Understand the relevant property as describing a thing. A respond phase is a kind of value. The respond phases are normal, changing phase, ready for answer, and answered. Answering the NPC is a respond phase that varies. Answering the NPC is usually normal. [ this rule will skip asking the player to type in his next command, instead re-supplying his previous command in a way to specifically cause the Which Did You Mean activity ] Rule for reading a command while answering the NPC is changing phase: [ INSTEAD OF ACTUALLY READING A COMMAND, DO THIS: ] change the text of the player's command to "[run paragraph on][verb word] relevant "; Before reading a command while answering the NPC is ready for answer: [ ] change answering the NPC to answered. Before reading a command while answering the NPC is answered: change answering the NPC to normal. Section 5 - The 'Asks' Phrases To decide whether (character - a person) ask/asks (quotation - some text): [if answering the NPC < ready for answer begin;] [ CAN'T REMEMBER WHY I HAD THIS IF STATEMENT HERE. BETTER NOT DELETE IT TIL I REMEMBER WHY ] if using grouped messages as dialogue debugging option, say "// [character] asks [quotation] expecting: [list of relevant things]."; if the number of relevant things > 0 begin; say quotation; now answering the NPC is changing phase; decide yes; otherwise; reset yes and no; decide no; end if; [end if.] To decide whether (character - a person) ask/asks (quotation - some text) expecting/including (d - a description): repeat with item running through d begin; now item is relevant; end repeat; if character asks quotation, decide yes; otherwise decide no. To decide whether (character - a person) ask/asks (quotation - some text) excluding/except (d - a description): repeat with item running through d begin; now item is irrelevant; end repeat; if character asks quotation, decide yes; otherwise decide no. To decide whether (character - a person) ask/asks (quotation - some text) expecting/including (d - a description) excluding/except (d2 - a description): repeat with item running through d begin; now item is relevant; end repeat; if character asks quotation excluding d2, decide yes; otherwise decide no. To (character - a person) ask/asks (quotation - some text): if character asks quotation, do nothing. To (character - a person) ask/asks (quotation - some text) expecting/including (answer - a description): if character asks quotation expecting answer, do nothing. To (character - a person) ask/asks (quotation - some text) excluding/except (items - a description): if character asks quotation excluding items, do nothing. To (character - a person) ask/asks (quotation - some text) expecting/including (answer - a description) excluding/except (items - a description): if character asks quotation expecting answer excluding items, do nothing. To ask/asks (quotation - some text): The observer asks quotation. To ask/asks (quotation - some text) expecting/including (answer - a description): The observer asks quotation expecting answer. To ask/asks (quotation - some text) excluding/except (items - a description): The observer asks quotation excluding items. To ask/asks (quotation - some text) expecting/including (answer - a description) excluding/except (items - a description): The observer asks quotation expecting answer excluding items. To decide whether ask/asks (quotation - some text): if the observer asks quotation, decide yes; otherwise decide no. To decide whether ask/asks (quotation - some text) expecting/including (answer - a description): if the observer asks quotation expecting answer, decide yes; otherwise decide no. To decide whether ask/asks (quotation - some text) excluding/except (items - a description): if the observer asks quotation excluding items, decide yes; otherwise decide no. To decide whether ask/asks (quotation - some text) expecting/including (answer - a description) excluding/except (items - a description): if the observer asks quotation expecting answer excluding items, decide yes; otherwise decide no. Section 6 - Yes and No This is the picking response to yes rule: if answering the NPC is ready for answer, now answering the NPC is changing phase; [BACKS UP A STEP FOR THE CASE WHERE PLAYER ANSWERS YES TO WHICH DID MEAN; THIS MAY HAPPEN IF THE NPC PHRASES HIS/HER QUESTION IN CERTAIN WAYS] if spurious yes is true, now answering the NPC is changing phase; now spurious yes is false; [ SPURIOUS ANSWERS ARE IGNORED, BUT WE "TURN BACK THE CLOCK" BY BACKING UP THE "ANSWERING THE NPC" VARIABLE ] abide by The yes-answer. This is the picking response to no rule: if spurious no is true, now answering the NPC is changing phase; now spurious no is false; [ SPURIOUS ANSWERS ARE IGNORED, BUT WE "TURN BACK THE CLOCK" BY BACKING UP THE "ANSWERING THE NPC" VARIABLE ] abide by The no-answer. The picking response to yes rule is listed instead of the block saying yes rule in the check saying yes rules. The picking response to no rule is listed instead of the block saying no rule in the check saying no rules. The no-answer is a rule that varies. The no-answer is usually the block saying yes rule. The yes-answer is a rule that varies. The yes-answer is usually the block saying no rule. Spurious yes is a truth state that varies. Spurious yes is usually false. Spurious no is a truth state that varies. Spurious no is usually false. To Yes is (code - a rule): now spurious yes is false; now the yes-answer is the code. To No is (code - a rule): now spurious no is false; now the no-answer is the code. To Yes is (code - a rule) and ignored: now spurious yes is true; now the yes-answer is the code. To No is (code - a rule) and ignored: now spurious no is true; now the no-answer is the code. To reset yes and no: Yes is the block saying yes rule; No is the block saying no rule; To say the/-- pronoun understood: if the main object is nothing begin; say "that"; otherwise if the main object is the pronoun him; say "him"; otherwise if the main object is the pronoun her; say "her"; otherwise if the main object is the pronoun it; say "it"; otherwise if the main object is the pronoun them; say "them"; otherwise; say "that"; end if. Section 7 - Scripts as a Series of Relevant Things Section 8 - Excerpt from Default Messages - written by David Fisher A library-message-value is a kind of value. The library-message-values are defined by the table of library messages. A library-message is a kind. A library-message has a library-message-value called the message. A library-message can be out of world. A library-message can be action acknowledgement. [ not all actions that fail are futile. Attempting to open a locked door would fail, but the attempt wasn't futile. How are we to know a door's locked until we try it? ] A library-message can be failing. [ an action stopped, usually because of some sort of "cannot" rule ] A library-message can be futile. [ searching in the dark, doing something already done, emptying something into itself, etc] A library-message can be re-attempting. [ doing something already done is always a futile activity, but not all futile activies involve re-doing something ] A library-message can be blocked. [ blocked actions. See the Actions index ] A library-message can be darkness-involving. A library-message can be parser-erroring. [ the built-in parser errors ] A library-message can be parser-modal. [ the parser is in a special mode: waiting for a Disambig. answer, a Yes/No answer, a menu selection, a SPACE to continue... ] A library-message can be answer-awaiting. [ a disambig answer, yes/no, or menu selection] A library-message can be physically-vigorous. [ Indiana-Jones kind of stuff. ] A library-message can be bodily-senses. A library-message can be civilized. [ giving, showing, asking, saying, telling, kissing, hugging, and all conversation. Sadly, a small list ] A library-message can be conversational. [ including the answer-awaiting parser problems ] A library-message can be involving-nothing. The game error is a library-message. [ Special handling for "go" without a direction ] The block vaguely going rule is not listed in the for supplying a missing noun rules. Rule for supplying a missing noun while going: change message of the game error to LibMsg ; abide by the current errorbook; say "". [ if this isn't here, it says "You must supply a noun" ! ] [ discovering things in newly opened containers ] To say what's on the object: list the contents of the main object, prefacing with is/are, as a sentence, including contents, giving brief inventory information, tersely, not listing concealed items. To say what's inside the object part 1: if main object is the location, say "You"; otherwise say "On/In [the main object] you"; say " can". To say what's inside the object part 2: say "see "; list the contents of the main object, as a sentence, including contents, listing marked items only, giving brief inventory information, tersely, not listing concealed items; if the main object is the location, say " here"; say "." The main object is an object that varies. section 9b - Setting the game error and Observe statements To set (ge - a library-message) to (x - a library-message-value): now the message of ge is x; consider the categorizing errors rulebook. To say observe (x - a library-message): if x is observed, do nothing. To observe (x - a library-message): if x is observed, do nothing. To say (character - a person) observes/observe (x - a library-message): let o be the observer; change the observer to the character; if x is observed, do nothing; change the observer to o. To (character - a person) observes/observe (x - a library-message): let o be the observer; change the observer to the character; if x is observed, do nothing; change the observer to o. To decide whether (id - a library-message) is observed: consider the print library message rule; if cull inform default messages is 0 begin; decide no; otherwise; change cull inform default messages to 0; decide yes; end if. To say observe (x - a library-message-value): set game error to x; if x is observed, do nothing. To observe (x - a library-message-value): set game error to x; if x is observed, do nothing. To say (character - a person) observes/observe (x - a library-message-value): set game error to x; let o be the observer; change the observer to the character; if x is observed, do nothing; change the observer to o. To (character - a person) observes/observe (x - a library-message-value): set game error to x; let o be the observer; change the observer to the character; if x is observed, do nothing; change the observer to o. To decide whether (id - a library-message-value) is observed: set game error to id; if game error is observed, decide yes; otherwise decide no. To say defer to/-- (character - a person): if cannot defer to character, do nothing. To defer to/-- (character - a person): if cannot defer to character, do nothing. To decide whether cannot defer to (character - a person): if character is in the location begin; let save cull value be cull inform default messages; [now the current interlocutor is the character;] character observes game error; now cull inform default messages is save cull value; decide no; otherwise; decide yes; end if. section 10 - Pre-empting all built-in actions' Report rules - written by David Fisher First report someone trying closing: if LibMsg is observed, stop the action. First report closing rule: if LibMsg is observed, stop the action. First report someone taking: if LibMsg is observed, stop the action. First report taking: if LibMsg is observed, stop the action. The first report someone trying consulting: if LibMsg is observed, stop the action; First report consulting it about rule: if LibMsg is observed, stop the action; First report someone trying dropping: if LibMsg is observed, stop the action; First report dropping rule: if LibMsg is observed, stop the action; First report someone trying eating: if LibMsg is observed, stop the action; First report eating rule: if LibMsg is observed, stop the action; First report someone trying entering: if LibMsg is observed, stop the action; First report entering rule: if LibMsg is observed begin; abide by the describe contents entered into rule; stop the action; end if; This is the custom report exiting rule: if the actor is the player begin; if LibMsg is observed, stop the action; [ no need to call the "describe room emerged into rule" - comes next in the ruleboook ] otherwise; if LibMsg is observed, stop the action; end if; [ Inform 7 separates getting "out of" (a non-supporter) and getting "off" (a supporter); these are grouped together in this extension. ] The custom report exiting rule is listed instead of the standard report exiting rule in the report exiting rules. The custom report exiting rule is listed instead of the standard report getting off rule in the report getting off rules. First report someone trying giving: if LibMsg is observed, stop the action. First report giving it to rule: if LibMsg is observed, stop the action. First report someone trying inserting: if LibMsg is observed, stop the action. First report inserting it into rule: if LibMsg is observed, stop the action. First report someone trying locking: if LibMsg is observed, stop the action. First report locking it with rule: if LibMsg is observed, stop the action. First report someone trying opening: if LibMsg is observed, stop the action. First report opening rule: if LibMsg is observed, stop the action. [ there are two "report opening" rules, and this one needs to happen before the one above ] First report opening rule: abide by the reveal any newly visible interior rule. First report someone trying pulling: if LibMsg is observed, stop the action. First report pulling rule: if LibMsg is observed, stop the action. First report someone trying pushing: if LibMsg is observed, stop the action. First report pushing rule: if LibMsg is observed, stop the action. First report someone trying putting: if LibMsg is observed, stop the action. First report putting it on rule: if LibMsg is observed, stop the action. [There are no "report removing" rules in Inform 7 any more ] Rule for default errors when the message of the game error is LibMsg : say "Removed." Rule for default errors when the message of the game error is LibMsg : say "Removed." First report someone trying removing: if LibMsg is observed, stop the action. First report removing it from rule: if LibMsg is observed, stop the action. First report someone trying squeezing: if LibMsg is observed, stop the action. First report squeezing rule: if LibMsg is observed, stop the action. First report someone trying switching on: if LibMsg is observed, stop the action. First report switching on rule: if LibMsg is observed, stop the action. First report someone trying switching off: if LibMsg is observed, stop the action. First report switching off rule: if LibMsg is observed, stop the action. First report someone trying taking off: if LibMsg is observed, stop the action. First report taking off rule: if LibMsg is observed, stop the action. [ there are two "report taking" rules, and this one needs to happen before the one above ] First report taking rule: abide by the don't report successful implicit takes rule. First report someone trying turning: if LibMsg is observed, stop the action. First report turning rule: if LibMsg is observed, stop the action. First report someone trying unlocking: if LibMsg is observed, stop the action. First report unlocking it with rule: if LibMsg is observed, stop the action. First report someone trying waiting: if LibMsg is observed, stop the action. First report waiting rule: if LibMsg is observed, stop the action. First report someone trying waving some thing: if LibMsg is observed, stop the action. First report waving rule: if LibMsg is observed, stop the action. First report someone trying wearing: if LibMsg is observed, stop the action. First report wearing rule: if LibMsg is observed, stop the action. First report someone trying touching: if the noun is the actor and LibMsg is observed, stop the action; if the noun is a person or the noun is the player and LibMsg is observed, stop the action; if LibMsg is observed, stop the action. First report touching rule: if the noun is the player and LibMsg is observed, stop the action; if the noun is a person and LibMsg is observed, stop the action; if LibMsg is observed, stop the action; First report someone trying examining: if LibMsg is observed, stop the action. This is the fake report npc looking rule: do nothing. First report someone trying looking: if LibMsg is observed, stop the action. First report someone trying looking under: if LibMsg is observed, stop the action. First report someone trying searching: if LibMsg is observed, stop the action. First report someone trying taking inventory: if LibMsg is observed, stop the action. This is the fake examine directions rule: say "You see nothing unexpected in that direction." The new examine directions rule is listed instead of the examine directions rule in the carry out examining rules. Carry out examining (this is the new examine directions rule): now the main object is the noun; if the noun is a direction and LibMsg is observed, stop the action. Section 11 - Remove all "Before Printing a Library Message" routines (I6) - written by David Fisher - unindexed When play begins: init library messages. To init library messages: (- InitLibraryMessages(); -). Include (- Constant LibraryMessages = (+I7_LibraryMessages+); [ InitLibraryMessages n; #Ifndef TARGET_GLULX; if ((+I7_LibraryMessages+).&before) { ! get rid of any other "before" routines for (n = 0 : n < (+I7_LibraryMessages+).#before / WORDSIZE : n++) { if ((+I7_LibraryMessages+).&before --> n ~= LibraryMessagesBefore) (+I7_LibraryMessages+).&before --> n = nothing; } } #Endif; ! TARGET_GLULX ]; -) before the library. Section 11 - The New Before Printing a Library Message (I6) - written by David Fisher - unindexed Cull inform default messages is a number that varies. [USED AS THE I6 RETURN VALUE] Cull inform default messages is 0. Message-game-error is a library-message-value that varies. [ USED AS ANOTHER I6 RETURN VALUE ] This is the I6 returns rule: if using grouped messages as dialogue debugging option, say "// in 'I6 returns' rule"; set game error to message-game-error; now cull inform default messages is 1; consider the current errorbook; if the rule failed, now cull inform default messages is 0; set game error to LibMsg . This is the print library message rule: if using grouped messages as dialogue debugging option, say "// in 'print library message' rule"; now cull inform default messages is 1; consider the current errorbook; if the rule failed, now cull inform default messages is 0; set game error to LibMsg . I7_LibraryMessages is a thing. Include (- with before LibraryMessagesBefore, -) when defining I7_LibraryMessages. Include (- [ LibraryMessagesBefore id isImplicitAction; id = -1; (+main object+) = lm_o; -) [*** Miscellany ***] Include (- Miscellany: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); 3: id = (+LibMsg +); 4: id = (+LibMsg +); ! 5 is "Would you like to restart ...", handled specially by Inform 7 6: id = (+LibMsg +); 7: id = (+LibMsg +); 8: id = (+LibMsg +); 9: id = (+LibMsg +); 10: id = (+LibMsg +); 11: id = (+LibMsg +); 12: id = (+LibMsg +); 13: id = (+LibMsg +); 14: id = (+LibMsg +); 15: id = (+LibMsg +); 16: id = (+LibMsg +); 17: id = (+LibMsg +); 18: id = (+LibMsg +); ! 19 was LibMsg ! - use "The description of the player is ..." instead 20: id = (+LibMsg +); 21: id = (+LibMsg +); 22: id = (+LibMsg +); 23: id = (+LibMsg +); 24: id = (+LibMsg +); 25: id = (+LibMsg +); 26: (+main object+) = not_holding; id = (+LibMsg +); 27: id = (+LibMsg +); 28: id = (+LibMsg +); 29: id = (+LibMsg +); 30: id = (+LibMsg +); -) Include (- 31: id = (+LibMsg +); 32: id = (+LibMsg +); 33: id = (+LibMsg +); 34: id = (+LibMsg +); 35: id = (+LibMsg +); 36: id = (+LibMsg +); 37: id = (+LibMsg +); 38: id = (+LibMsg +); 39: id = (+LibMsg +); 40: !print (address) pronoun word; ! (address) (+main object+) = pronoun_obj; id = (+LibMsg +); 41: id = (+LibMsg +); 42: (+the number understood+) = multi_had; id = (+LibMsg +); 43: id = (+LibMsg +); ! same as Miscellany #2 (?) 44: id = (+LibMsg +); 45: id = (+LibMsg +); 46: id = (+LibMsg +); 47: id = (+LibMsg +); 48: (+main object+) = actor; id = (+LibMsg +); 49: (+main object+) = actor; id = (+LibMsg +); 50: id = (+LibMsg +); 51: id = (+LibMsg +); 52: id = (+LibMsg +); 53: id = (+LibMsg +); 54: id = (+LibMsg +); 55: id = (+LibMsg +); } jump end_part; -) [ The ListMiscellany rules ("providing light", etc) can be handled OK by Inform 7 ] [*** Quit, Restart ***] Include (- Quit: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); } jump end_part; Restart: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); } jump end_part; -) [*** File Operations ***] Include (- Restore: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); } jump end_part; Save: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); } jump end_part; Verify: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); } jump end_part; -) [*** Transcripts ***] Include (- ScriptOn: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); 3: id = (+LibMsg +); } jump end_part; ScriptOff: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); 3: id = (+LibMsg +); } jump end_part; -) [*** Scoring ***] Include (- NotifyOn: id = (+LibMsg +); jump end_part; NotifyOff: id = (+LibMsg +); jump end_part; Score: id = (+LibMsg +); jump end_part; FullScore: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); 3: id = (+LibMsg +); 4: id = (+LibMsg +); } jump end_part; -) [*** Orders ***] Include (- Order: id = (+LibMsg +); jump end_part; -) [*** Listing ***] Include (- Pronouns: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); 3: id = (+LibMsg +); 4: id = (+LibMsg +); } jump end_part; Places: id = (+LibMsg +); jump end_part; Objects: if (lm_n == 1) { id = (+LibMsg +); } ! 2: "None."; ! 3: print " (worn)"; ! 4: print " (held)"; ! 5: print " (given away)"; ! 6: print " (in ", (name) x1, ")"; ! 7: print " (in ", (the) x1, ")"; ! 8: print " (inside ", (the) x1, ")"; ! 9: print " (on ", (the) x1, ")"; ! 10: print " (lost)"; ! (there are others as well) jump end_part; Inv: switch (lm_n) { 1: id = (+LibMsg +); 2: id = (+LibMsg +); } jump end_part; -) [*** Take, Remove ***] Include (- Take: switch (lm_n) { ! 1 is for the report taken rule, which will be called instead 2: id = (+LibMsg +); 3: id = (+LibMsg +); 4: id = (+LibMsg +); 5: id = (+LibMsg +); 6: id = (+LibMsg +); 7: id = (+LibMsg +); 8: id = (+LibMsg