├── README.md ├── Directionality.i7x ├── Readme.txt ├── Snippets.i7x ├── Template.ni ├── LICENSE ├── Moisturizer.i7x ├── Simple Conversations.i7x ├── Templates.i7x └── Posturing.i7x /README.md: -------------------------------------------------------------------------------- 1 | # AIF 2 | Support for writing Adult Interactive Fiction (AIF) using Inform 7. 3 | See https://informedaif.wordpress.com/framework/ for more information. 4 | 5 | **Erotic Storytelling.i7x**: 6 | Main extension, containing layered clothing model, erotic actions and support functions, with templates for easy implementation. 7 | 8 | **Posturing.i7x**: 9 | Support extension, providing postures for actors. 10 | 11 | **Simple Conversations.i7x**: 12 | Support extension, containing a conversation model. 13 | 14 | **Directionality.i7x**: 15 | Helper extension for listing out visible exits from a room. 16 | 17 | **Moisturizer.i7x** 18 | Experimental testbed for new features. 19 | 20 | **Templates.i7x** 21 | Documentation extension with copy-paste templates for implementation. 22 | 23 | **Template.ni**: 24 | Sample project layout for an Inform 7 story. 25 | -------------------------------------------------------------------------------- /Directionality.i7x: -------------------------------------------------------------------------------- 1 | Version 2/170401 of Directionality by Fictitious Frode begins here. 2 | 3 | "Provides automated listing of all exits from a room." 4 | 5 | Include Epistemology by Eric Eve. 6 | 7 | Carry out looking (This is the direction listing rule): 8 | Let known-exits be a list of text; 9 | Let unknown-exits be a list of text; 10 | Repeat with direction running through directions: 11 | Let destination be the room-or-door direction from location; 12 | If destination is a door and destination is undescribed, next; [This should cover the Standard Rules' implementation of hidden doors] 13 | If destination is a door: 14 | Let throughfare be destination; 15 | Let destination be the other side of destination from location; 16 | If destination is visited or destination is known, add "[Destination] [are] [direction] (through [throughfare])" to known-exits; 17 | Else: 18 | If destination is visited or destination is known, add "[Destination] [are] [direction]" to known-exits; 19 | If destination is not known and destination is unvisited, add "[direction]" to unknown-exits; 20 | If number of entries in known-exits is 0: 21 | If number of entries in unknown-exits is 0, say "There are no clear exits from here."; 22 | Else say "There are exits [unknown-exits]."; 23 | Else: 24 | If number of entries in unknown-exits is 0, say "[Known-exits]."; 25 | Else say "[Known-exits]. There are also exits [unknown-exits]."; 26 | 27 | Directionality ends here. 28 | 29 | ---- DOCUMENTATION ---- 30 | 31 | Chapter 1 - Using this Extension 32 | 33 | The main purpose for this extensions is for testing and development work, when room connections change and updating room descriptions can be easily forgotten. 34 | 35 | To use this framework, you need to download and install it (which you probably have if you're reading this) and include it in your story: 36 | 37 | *: 38 | Include Directionality by Fictitious Frode. 39 | 40 | After printing the room description, Inform will now print a line listing all the exits from the current location. 41 | If the player has knowledge of the destination by visiting it, the name will also be listed. 42 | Note that this does not check that the player knows that this exits leads to the destination. 43 | 44 | Section 1.1 - Exploration 45 | 46 | For games where the player is "exploring" an area that is known to the character, it's possible to set rooms as familiar, in order to have them show up in the destination listing. 47 | Eric Eve's Epistemology extension is used to provide this support. 48 | 49 | The Library is north of the Hallway. 50 | The Hallway is familiar. 51 | 52 | When determining wether an exit is known or unknown, it's not the exit that's being evaluated but the destination. 53 | This has some implications for rooms that are accessible from multiple directions, and shortcuts. 54 | Secret doors are handled according to the Standard Rules; a door that is not described is not listed. 55 | 56 | Section 1.2 - Version History 57 | 58 | 2015-01-26 (Release 1) 59 | 60 | Initial functionality. 61 | 62 | 2017-04-01 (Release 2) 63 | 64 | Incorporated Eric Eve's Epistemology instead of the custom 'known/unknown' property. 65 | Support for hidden doors, as implemented in the Standard Rules (using undescribed to imply the player is unaware they exist) 66 | Minor documentation changes. 67 | 68 | Section 1.3 - Contact Info 69 | 70 | The author of this extension can be reached in the following ways: 71 | 72 | Mail: fictitious.frode@gmail.com 73 | Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF with Inform 7, and is the official host of the extension. It contains both dicussions around AIF and tutorials on both Inform in general and this extension in particular. 74 | Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF community, and the author checks this regularly. 75 | GitHub: https://github.com/FictitiousFrode/AIF Contains the latest version of the extension, possibly including functionality that hasn't been released yet. 76 | 77 | Feedback of all varieties is welcome, but constructive criticism and discussion is the most appreciated, along with reports of bugs and other issues. 78 | For support I would appreciate using public communication, so that other may learn from the request as well. 79 | 80 | Example: * Directions to known and unknown rooms. 81 | 82 | Library is a room. "This is a library." 83 | Closet is inside from Library. "A small closet." 84 | Closet is familiar. 85 | Hallway is south of Library. "A long hallway." 86 | Bathroom is a room. "A public bathroom." 87 | A bathroom door is a door. A bathroom door is north of library and south of bathroom. 88 | 89 | Test me with "n / s / s / n" -------------------------------------------------------------------------------- /Readme.txt: -------------------------------------------------------------------------------- 1 | Introduction 2 | ============== 3 | 4 | The Big Hairy Audacious Goal for the Erotic Storytelling extension is to make 5 | writing AIFs as simple as writing the descriptions of responses and objects. 6 | The actions and layered clothing model provided by the Erotic Storytelling 7 | extension goes a long way to accomplishing this goal, although a good game 8 | would still need some custom work to create good puzzles and interactions. 9 | 10 | The Features 11 | ============== 12 | 13 | The extensions in the framework provides: 14 | * A system for layered clothing with body parts, including templates for 15 | both body parts and garments. Supports transparent and shiftable clothing. 16 | * Erotic actions that take clothing level and decency threshold of the location 17 | into consideration: 18 | - hugging a person 19 | - kissing a person 20 | - dancing with a person 21 | - touching a body part 22 | - rubbing a body part 23 | - pinching a body part 24 | - tickling a body part 25 | - spanking a body part 26 | - licking a body part 27 | - biting a body part 28 | - fucking a body part 29 | * A framework to provide consent for actions affecting other actors, similar 30 | to how persuasion rules work. 31 | * Optional framework for arousal based consent, similar to TADS libraries. 32 | * Optional support posturing by actors. 33 | * A model of simple conversations. 34 | 35 | Installation 36 | ============== 37 | 38 | To install the extensions into Inform 7, use the File -> Install Extension 39 | command inside Inform 7, navigate to the folder where you've unpacked the 40 | extension files and select all the files apart from this readme. If you 41 | have a previous version installed, you will be prompted to overwrite it. 42 | 43 | In order to use the extensions in a story, you need to include the extensions 44 | you want for your story. A full inclusion would look like this: 45 | 46 | Include Erotic Storytelling by Fictitious Frode. 47 | Include Simple Conversations by Fictitious Frode. 48 | Include Posturing by Fictitious Frode. 49 | Include Directionality by Fictitious Frode. 50 | 51 | All of the extensions have proper documentation, available from the Extensions 52 | tab inside Inform. This includes proper instructions on how to activate the 53 | features and examples. Erotic Storytelling also includes an in-depth tutorial. 54 | 55 | Part Details 56 | ============== 57 | 58 | * Erotic Storytelling contains the functionality that is specific for the 59 | adult parts of the game, including the layered clothing model and actions. 60 | * Template is an example of how a story can be organized. 61 | * Simple Conversations lets you define a list of subjects that your actors 62 | can have corresponding dialogue for. Supports varying the availability of 63 | dialogue options and cueing the player to viable subjects. 64 | * Directionality is a helper extension that automatically lists all visible 65 | exits from a room, stating the destination if it is known to the player. 66 | 67 | What is New? 68 | ============== 69 | 70 | Each individual extension has a more detailed log of changes. 71 | 72 | 2016-12-23: Beta-1 73 | ------------- 74 | * The previous framework has been completely reworked and rewritten, and 75 | the release history has been updated to only include the remake. 76 | 77 | 2017-04-01: Beta-2 78 | ------------- 79 | * Posturing has been updated and remade. 80 | * Bug-fixes and minor updated to other extensions, see documentation in 81 | each extension for details. 82 | 83 | Future Plans 84 | ============== 85 | 86 | These are some ideas for future development: 87 | * Ropework 88 | * Lasting Penetrations 89 | * Numerical Arousal (NACS) 90 | 91 | Contact Info 92 | ============== 93 | 94 | The author of the framework can be reached in the following ways: 95 | * Mail: fictitious.frode@gmail.com 96 | * Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF 97 | with Inform 7, and is the official host of the framework. It contains both 98 | dicussions around AIF and tutorials on both Inform in general and this 99 | framework in particular. 100 | * Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF 101 | community, and the author checks this regularly. 102 | 103 | Feedback of all varieties is welcome, but constructive criticism and discussion 104 | is the most appreciated, along with reports of bugs and other issues. For 105 | support I would appreciate using public communication, so that other may learn 106 | from the request as well. 107 | 108 | Uninstalling 109 | ============== 110 | 111 | To uninstall the framework (or perform cleanup of old versions) navigate to the 112 | Inform folder, usually found in "My Documents" on windows or a similar location 113 | on Mac and Linux. This contains an "Extensions" folder, which again contains 114 | one folder for each author. Find the "Fictitious Frode" folder, and either 115 | delete the whole folder to remove all the extensions, or enter it and remove 116 | the extensions that are unwanted. -------------------------------------------------------------------------------- /Snippets.i7x: -------------------------------------------------------------------------------- 1 | Version 1/180202 of Snippets by Fictitious Frode begins here. 2 | "A collection of code snippets for common concepts." 3 | 4 | Snippets ends here. 5 | 6 | ---- DOCUMENTATION ---- 7 | 8 | Chapter 1 - Using this Extension 9 | 10 | The purpose of this extension is to provide an easily testable repository of code snippets that can inspire or be re-used. 11 | Most of the snippets come in the examples, but there is some discussion of concepts in the main documentation. 12 | 13 | To make full use this extension, you need to download and install it (which you probably have if you're reading this) and open it's extension documentation in the IDE. 14 | 15 | Section 1.1 - Overview 16 | 17 | Section 1.2 - Version History 18 | 19 | 2018-01-11 (Release 1) 20 | 21 | Secret Doors and Passages 22 | 23 | Section 1.3 - Contact Info 24 | 25 | The author of this extension can be reached in the following ways: 26 | 27 | Mail: fictitious.frode@gmail.com 28 | Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF with Inform 7, and is the official host of the extension. It contains both dicussions around AIF and tutorials on both Inform in general and this extension in particular. 29 | Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF community, and the author checks this regularly. 30 | GitHub: https://github.com/FictitiousFrode/AIF Contains the latest version of the extension, possibly including functionality that hasn't been released yet. 31 | 32 | Feedback of all varieties is welcome, but constructive criticism and discussion is the most appreciated, along with reports of bugs and other issues. 33 | For support I would appreciate using public communication, so that other may learn from the request as well. 34 | 35 | Chapter 2 - Secrets 36 | 37 | Section 2.1 - Secret Doors and Passages 38 | 39 | Having the player discover new passages is a staple of Interactive Fiction, often called secret doors although the passage doesn't need to be a door. 40 | 41 | The standard Inform 7 rules has built-in support for this using the not well-documented "undescribed" property, which completely removes the thing in question from scope. 42 | The "can't go through undescribed doors rule" uses this property to stop the player from passing through an undescribed door, and we can combine this with an external action triggering the availability of the passage. 43 | This is shown in the Concealed Passages example. 44 | 45 | Another approach to secret doors is something that is obviously present in the room but has obvious method of travel or opening, which would make the "openable" property of doors seem like a natural fit. 46 | When we have a non-openable door connecting two rooms and try to go in the direction of the door, Inform correctly detects that the door is there. 47 | Unfortunately it then tries to open that door which results in a "That isn't something we can open" message instead of "We can't go that way", which alerts the player to the presence of a secret door. 48 | We can work around this with some alterations to the default rules, as seen in the Secret Doors example. 49 | 50 | 51 | Regardless of which method is used to implement secret doors, they have the additional complication of being present in both rooms. 52 | We therefore have to tailor both the description and appearance in room description according to where the player is. 53 | It's often useful to understand different synonyms for the door depending on location as well. 54 | 55 | 56 | Example: ** Concealed Passages 57 | 58 | *: "Concealed Passages" 59 | 60 | When play begins, say "A small snippet showing secret doors can be implemented using the undescribed property." 61 | 62 | Section - The World Model 63 | 64 | The Study is a room. 65 | "A small study is nestled in the east end of the library. A [massive desk] in the center of the room vies for attention with the [shelves] covering the northern wall. Tall [glass windows] cover the south and eastern walls, flooding the room in natural sunlight and providing a magnificent view of the sprawling garden outside." 66 | 67 | Some glass windows are scenery in Study. 68 | The description is "The tall windows lets the sun illuminate the room while affording a good view of the garden outside." 69 | Instead of opening glass windows, say "These windows aren't made for opening." 70 | 71 | Some shelves is scenery in Study. 72 | The description is "Massive shelves filled with all sorts of books cover the entire northern wall.[if dark passage is not undescribed] The middle shelf has swung open, revealing a dark passage behind." 73 | Understand "bookshelf" and "bookshelves" as shelves. 74 | 75 | A dark passage is a door. It is north of Study and south of Dark Hallway. It is open, not openable and undescribed. 76 | "A dark passage leads [if player is in Study]in[else]out[end if]side." 77 | 78 | Dark Hallway is a room. 79 | "[If dark passage is undescribed]Faint electrical light inset in the roof[else]A beam of bright light from the open passage to the south[end if] illuminates a brick-lined hallway descending into darkness." 80 | 81 | Understand "bright" as dark passage when the player is in Dark Hallway. 82 | 83 | Instead of going west in Study, say "You aren't ready to leave just yet." 84 | Instead of going inside in Study when dark passage is not undescribed, try going north. 85 | Instead of going outside in Dark Hallway when dark passage is not undescribed, try going south. 86 | Instead of going north in Dark Hallway, try going down. 87 | Instead of going down in Dark Hallway, end the story finally saying "Trundling down into darkness wasn't the best of ideas. You're eating by a grue." 88 | 89 | Section - Passage Activation 90 | 91 | A massive desk is a supporter in Study. 92 | The description is "A massive desk dominates the room. It's owner must be of the fastidious kind, as the only clutter on the desk is an ornamental statue depicting a bronze lion." 93 | 94 | A bronze lion statue is on massive desk. It is fixed in place. 95 | The description is "The statue depicts a male lion standing on its hind legs." 96 | 97 | Instead of pulling bronze lion statue, try pushing bronze lion statue. 98 | Instead of pushing bronze lion statue: 99 | If dark passage is undescribed: 100 | Say "The statue gives way ever so slightly and the bookshelves pivots silently into the room, revealing a dark passage behind."; 101 | Now the dark passage is described; 102 | The passage blocking happens in 1 turn from now; 103 | Otherwise: 104 | Say "You wriggle the statue back and forth but nothing happens."; 105 | 106 | At the time when the passage blocking happens: 107 | If the player can see dark passage, say "The cabinet slides back into place, closing off the dark passage."; 108 | Now the dark passage is undescribed; 109 | 110 | Test me with "n / x shelves / push shelves / x desk / x statue / push statue / g / g / enter passage / x passage / down" 111 | 112 | 113 | Example: *** Secret Doors 114 | 115 | *: "Secret Doors" 116 | 117 | When play begins, say "A small snippet showing secret doors can be implemented using the unopenable property." 118 | 119 | Section - The World Model 120 | 121 | The Study is a room. 122 | "A small study is nestled in the east end of the library. A [massive desk] in the center of the room vies for attention with the [shelves] covering the northern wall. Tall [glass windows] cover the south and eastern walls, flooding the room in natural sunlight and providing a magnificent view of the sprawling garden outside." 123 | 124 | Some glass windows are scenery in Study. 125 | The description is "The tall windows lets the sun illuminate the room while affording a good view of the garden outside." 126 | Instead of opening glass windows, say "These windows aren't made for opening." 127 | 128 | Some shelves is a door. It is closed and not openable. It is north of Study and south of Dark Hallway. 129 | The description is "Massive shelves filled with all sorts of books cover the entire northern wall.[if shelves are open] The middle shelf has swung open, revealing a dark passage behind." 130 | Understand "bookshelf" and "bookshelves" as shelves. 131 | Understand "passage" as shelves when shelves are open. 132 | Understand "bright" as shelves when the player is in Dark Hallway. 133 | Understand "dark" as shelves when the player is in Study. 134 | 135 | Rule for writing a paragraph about shelves: 136 | Now shelves are mentioned; 137 | If shelves are open, say "A dark passage leads [if player is in Study]in[else]out[end if]side." 138 | 139 | Dark Hallway is a room. 140 | "[If shelves are open]Faint electrical light inset in the roof[else]A beam of bright light from the open passage to the south[end if] illuminates a brick-lined hallway descending into darkness." 141 | 142 | Instead of going west in Study, say "You aren't ready to leave just yet." 143 | Instead of going inside in Study when shelves are open, try going north. 144 | Instead of going outside in Dark Hallway when shelves are open, try going south. 145 | Instead of going north in Dark Hallway, try going down. 146 | Instead of going down in Dark Hallway, end the story finally saying "Trundling down into darkness wasn't the best of ideas. You're eating by a grue." 147 | 148 | Section - Passage Activation 149 | 150 | A massive desk is a supporter in Study. 151 | The description is "A massive desk dominates the room. It's owner must be of the fastidious kind, as the only clutter on the desk is an ornamental statue depicting a bronze lion." 152 | 153 | A bronze lion statue is on massive desk. It is fixed in place. 154 | The description is "The statue depicts a male lion standing on its hind legs." 155 | 156 | Instead of pulling bronze lion statue, try pushing bronze lion statue. 157 | Instead of pushing bronze lion statue: 158 | If shelves are closed: 159 | Say "The statue gives way ever so slightly and the bookshelves pivots silently into the room, revealing a dark passage behind."; 160 | Now the shelves are open; 161 | The shelf closing happens in 1 turn from now; 162 | Otherwise: 163 | Say "You wriggle the statue back and forth but nothing happens."; 164 | 165 | At the time when the shelf closing happens: 166 | If the player can see shelves, say "The cabinet slides back into place, closing off the dark passage."; 167 | Now the shelves are closed; 168 | 169 | Section - Adapting Default Rules 170 | 171 | The convert enter door into go rule does nothing when entering a closed unopenable door. 172 | 173 | Check an actor going through a closed door (this is the can't go through unopenable doors rule): 174 | If the door gone through is not openable: 175 | If the actor is the player, say "[text of can't go that way rule response (A)]"; 176 | Stop the action; 177 | 178 | Test me with "n / x shelves / push shelves / x desk / x statue / push statue / g / g / enter passage / x passage / down" 179 | -------------------------------------------------------------------------------- /Template.ni: -------------------------------------------------------------------------------- 1 | "Story" by Author 2 | 3 | Volume 0 - Setup 4 | 5 | Use American dialect, full-length room descriptions, and the serial comma. 6 | Use unabbreviated object names. 7 | Use scoring. 8 | Use consensual persuasion. [Defer persuasion to consent for the actions that require consent.] 9 | [Use DACS. - Enable Discrete Arousal-based Consent and Stimulation.] 10 | 11 | Include Erotic Storytelling by Fictitious Frode. 12 | [Include Simple Conversations by Fictitious Frode.] 13 | [Include Posturing by Fictitious Frode.] 14 | Include Directionality by Fictitious Frode. 15 | 16 | Book 0.1 - Titlepage 17 | 18 | Part 0.1.1 - Metadata 19 | 20 | The story creation year is 2017. 21 | The story genre is "Erotica". 22 | The story headline is "The byline printed when the story begins." 23 | The story description is "A short introduction giving the premise of the story. Will be used in the out-of-game titlecard." 24 | The release number is 0. 25 | 26 | Part 0.1.2 - Contents 27 | 28 | [Heterosexuality is a story content.] 29 | [Bondage is a disabled story content.] 30 | 31 | Part 0.1.3 - Dramatis Personae 32 | 33 | [Defining the actors taking part in the story.] 34 | 35 | Part 0.1.4 - Conversation Subjects 36 | 37 | [Defining the general conversation subjects relevant to the story.] 38 | 39 | Part 0.2 - General Declarations 40 | 41 | Book 0.2.1 - Body Part Creation 42 | 43 | A head is a part of every person. Understand "face" as head. 44 | Some hair is a part of every person. 45 | Some eyes are a part of every person. 46 | A mouth is a part of every person. 47 | Some feet are a part of every person. 48 | Some legs are a part of every person. Understand "thighs" as legs. 49 | Some hands are a part of every person. Understand "arms" as hands. 50 | An ass is a part of every person. 51 | 52 | A vagina is a part of every woman. 53 | Some breasts are a part of every woman. 54 | 55 | A chest is a part of every man. 56 | A penis is a part of every man. 57 | 58 | Book 0.2.2 - Custom Properties 59 | 60 | [Any story-wide custom properties should go here.] 61 | 62 | [A body part can be spermed. A body part is usually not spermed.] 63 | [A person can be proper-named. A person is usually not proper-named.] 64 | 65 | Book 0.3 - A Helping Hand 66 | 67 | Book 0.3.1 - Text Substitutions 68 | 69 | To say i -- beginning say_i -- running on: (- style underline; -). 70 | To say /i -- ending say_i -- running on: (- style roman; -). 71 | To say b -- beginning say_b -- running on: (- style bold; -). 72 | To say /b -- ending say_b -- running on: (- style roman; -). 73 | 74 | Book 0.3.2 - Math 75 | 76 | To decide if (X - A number) is between (low - a number) and (high - a number): 77 | If X >= low and X <= high, decide yes; 78 | Decide no; 79 | 80 | Book 0.3.3 - Movement 81 | 82 | [Make exit mean go outside.] 83 | Instead of exiting when the player is not in something: 84 | Try going outside instead; 85 | 86 | Volume 1 - Act I 87 | 88 | [Divide the game into Acts, one volume for each] 89 | 90 | Book 1.1 - Geology 91 | 92 | [The locations related to Act I, divided into parts for regions with chapters for each room.] 93 | 94 | Part 1.1.1 - Region 95 | 96 | Chapter 1.1.1a - Room 97 | 98 | Book 1.2 - Inhabitants 99 | 100 | [The actors related to Act I, one part for each.] 101 | 102 | Part 1.2.1 - Person 103 | 104 | Chapter 1.2.1a - Agency 105 | 106 | ACTOR is agency-enabled. 107 | The priority of ACTOR is 10. 108 | Idleness for ACTOR: 109 | If a random chance of 1 in 3 succeeds, say "[one of]TEXT[or]TEXT[completely at random]". 110 | 111 | Chapter 1.2.1b - Body Parts 112 | 113 | The description of ACTOR's head is "ACTOR has [short description of ACTOR's hair], [short description of ACTOR's eyes], and [short description of ACTOR's mouth]." 114 | The short description of ACTOR's head is "TEXT". 115 | Description notability for ACTOR's head: unnotable. 116 | 117 | The description of ACTOR's hair is "ACTOR has [short description], EXTRA DETAILS." 118 | The short description of ACTOR's hair is "FORM COLOUR hair". 119 | Description notability for ACTOR's hair: distinct. 120 | 121 | The description of ACTOR's eyes is "ACTOR has [short description], EXTRA DETAILS." 122 | The short description of ACTOR's eyes is "COLOUR eyes". 123 | Description notability for ACTOR's eyes: grouped. 124 | 125 | The description of ACTOR's mouth is "ACTOR has [short description], EXTRA DETAILS." 126 | The short description of ACTOR's mouth is "DETAILS mouth". 127 | Description notability for ACTOR's mouth: grouped. 128 | 129 | The description of ACTOR's feet is "ACTOR has [short description], EXTRA DETAILS." 130 | The short description of ACTOR's feet is "DETAILS feet". 131 | Description notability for ACTOR's feet: unnotable. 132 | 133 | The description of ACTOR's legs is "ACTOR has [short description], EXTRA DETAILS." 134 | The short description of ACTOR's legs is "DETAILS legs". 135 | Description notability for ACTOR's legs: grouped. 136 | 137 | The description of ACTOR's hands is "ACTOR has [short description], EXTRA DETAILS." 138 | The short description of ACTOR's hands is "DETAILS hands". 139 | Description notability for ACTOR's hands: unnotable. 140 | 141 | The covered description of ACTOR's ass is "ACTOR has [short description], covered by [the concealing vision of ACTOR's ass]." 142 | The uncovered description of ACTOR's ass is "ACTOR has [short description], NAKED DETAILS." 143 | The short description of ACTOR's ass is "DETAILS ass". 144 | Description notability for ACTOR's ass: Unless ACTOR's ass can be seen, Hidden; Distinct. 145 | 146 | [If female: 147 | The covered description of ACTOR's vagina is "ACTOR has [short description], covered by [the concealing vision of ACTOR's vagina]." 148 | The uncovered description of ACTOR's vagina is "ACTOR has [short description], NAKED DETAILS." 149 | The short description of ACTOR's vagina is "DETAILS vagina". 150 | Description notability for ACTOR's vagina: Unless ACTOR's vagina can be seen, Hidden; Distinct. 151 | 152 | The covered description of ACTOR's breasts is "ACTOR has [short description], covered by [the concealing vision of ACTOR's breasts]." 153 | The uncovered description of ACTOR's breasts is "ACTOR has [short description], NAKED DETAILS." 154 | The short description of ACTOR's breasts is "DETAILS breasts". 155 | Description notability for ACTOR's breasts: Unless ACTOR's breasts can be seen, Hidden; Distinct. 156 | ] 157 | 158 | [If male: 159 | The covered description of your penis is "My [short description] is safely tucked away under [the concealing vision of your penis]." 160 | The uncovered description of your penis is "My penis is [if player is aroused or more]standing prudly at attention[else]hanging flaccidly[end if]." 161 | The short description of your penis is "[if player is aroused or more]erect[else]limp[end if] penis". 162 | Description notability for your penis: Unless your penis can be seen, Hidden; Distinct. 163 | 164 | The covered description of your chest is "My [short description] is hidden away under [the concealing vision of your chest]." 165 | The uncovered description of your chest is "My [short description] is displayed proudly." 166 | The short description of your chest is "muscular chest". 167 | Description notability for your chest: Unless your chest can be seen, Hidden; grouped. 168 | ] 169 | 170 | Chapter 1.2.1c - Clothing 171 | 172 | A GARMENT is a TYPE worn by ACTOR. 173 | Description notability for GARMENT: Unless GARMENT can be seen, Hidden; Distinct/Grouped/Unnotable/Hidden. 174 | It is transparent. It is allow touching through. 175 | It is rippable. It is shiftable. The shiftyness of GARMENT is moveable/buttonable/zipable/fastenable/raisable/lowerable. 176 | The short description is "SHORTDESCRIPTION". 177 | The unworn description is "A [short description] DETAILS." 178 | The worn description is "The [short description] is slightly transparent, allowing you to see that [the holder of GARMENT] is wearing [revealed by shifting/taking off GARMENT] underneath." 179 | The shifted description is "The [short description] is SHIFTED, revealing [revealed by shifting GARMENT] underneath." 180 | The ripped description is "The [short description] is RIPPED, revealing [revealed by ripping GARMENT] underneath." 181 | 182 | 183 | Chapter 1.2.1d - Dialogue 184 | 185 | The dialogue of ACTOR is the Table of ACTOR's Dialogue. 186 | 187 | Table of ACTOR's Dialogue 188 | subject (a thing) availability (a truth state) cue (a text) turn stamp (a number) dialogue (some text) 189 | -- -- -- -- -- 190 | 191 | After talking to ACTOR about SUBJECT: 192 | If SUBJECT has been talked about to ACTOR: 193 | Deactivate SUBJECT for PERSON; 194 | Activate SUBJECT for PERSON; 195 | Clear the cue of SUBJECT for ACTOR; 196 | Update the cue of SUBJECT for ACTOR to "TEXT"; 197 | Clear the dialogue of SUBJECT for ACTOR; 198 | Update the dialogue of SUBJECT for ACTOR to "TEXT"; 199 | 200 | 201 | Book 1.3 - Mechanics 202 | 203 | [Any mechanics pertaining to the act, one part for each main feature.] 204 | 205 | Book 1.4 - Chronology 206 | 207 | [Break the act into scenes] 208 | 209 | Part X.4.Y - PROLOGUE 210 | 211 | PROLOGUE is a scene. 212 | PROLOGUE begins when play begins. 213 | PROLOGUE ends when CONDITION. 214 | 215 | Chapter X.4.Ya - Setup 216 | 217 | When PROLOGUE begins (this is the PROLOGUE quotation rule): 218 | [display the boxed quotation;] 219 | Say "QUOTATION[paragraph break]"; 220 | Say "—SOURCE[paragraph break]"; 221 | [show the current quotation;] 222 | Say "(-continue-)[paragraph break]"; 223 | Wait for any key; 224 | Clear the screen; 225 | 226 | When PROLOGUE begins (this is the PROLOGUE introduction rule): 227 | Say "INTRODUCTION TEXT"; 228 | 229 | When PROLOGUE begins (this is the PROLOGUE stage-setting rule): 230 | [Place the things that are relvant for the prologue] 231 | Now the THING is in LOCATION; 232 | [Place and dress ACTOR] 233 | Now ACTOR is in LOCATION; 234 | Now ACTOR is agency-enabled; 235 | Now the agency state description of ACTOR is "ACTOR STATE"; 236 | Now the uninterested response of ACTOR is "ACTOR DENIAL"; 237 | Now the preferred clothing of ACTOR is {GARMENT, GARMENT}; 238 | Force dress ACTOR in the preferred clothing of ACTOR; 239 | 240 | Chapter X.4.Yb - Teardown 241 | 242 | When PROLOGUE ends (this is the PROLOGUE ending rule): 243 | Say "(-continue-)[paragraph break]"; 244 | Wait for any key; 245 | Clear the screen; 246 | 247 | When PROLOGUE ends (this is the PROLOGUE achievements rule): 248 | If CONDITION, award the ACHIEVEMENT; 249 | 250 | When PROLOGUE ends (this is the PROLOGUE stage-cleaning rule): 251 | [Ensure a consistent end-state for the world] 252 | 253 | Chapter X.4.Yc - Agency 254 | 255 | Planned agency for ACTOR during PROLOGUE: 256 | Unless ACTOR can see player: 257 | Let the way be the best route from the location of ACTOR to location of player, using doors; 258 | If the way is a direction: 259 | Try ACTOR going the way; 260 | 261 | Planned agency for ACTOR during PROLOGUE: 262 | Let the way be the best route from the location of ACTOR to DESTINATION, using doors; 263 | If the way is a direction: 264 | Try ACTOR going the way; 265 | 266 | Chapter X.4.Yd - Consent 267 | 268 | Consent for doing something to ACTOR during PROLOGUE: If CONDITION, give consent; Make no decision. 269 | Consent for doing something to a body part enclosed by ACTOR during PROLOGUE: If CONDITION, give consent; Make no decision. 270 | Consent for doing something to a garment enclosed by ACTOR during PROLOGUE: If CONDITION, give consent; Make no decision. 271 | 272 | Consent for ACTOR doing something during PROLOGUE: If CONDITION, give consent; Make no decision. 273 | 274 | Chapter X.4.Yd - Erotica 275 | 276 | After kissing ACTOR during PROLOGUE, say "RESPONSE." 277 | After hugging ACTOR during PROLOGUE, say "RESPONSE." 278 | After dancing ACTOR during PROLOGUE, say "RESPONSE." 279 | 280 | After touching ACTOR's feet during PROLOGUE, say "RESPONSE." 281 | After rubbing ACTOR's feet during PROLOGUE, say "RESPONSE." 282 | After tickling ACTOR's feet during PROLOGUE, say "RESPONSE." 283 | After licking ACTOR's feet during PROLOGUE, say "RESPONSE." 284 | After biting ACTOR's feet during PROLOGUE, say "RESPONSE." 285 | 286 | After touching ACTOR's legs during PROLOGUE, say "RESPONSE." 287 | After rubbing ACTOR's legs during PROLOGUE, say "RESPONSE." 288 | 289 | After touching ACTOR's hands during PROLOGUE, say "RESPONSE." 290 | After rubbing ACTOR's hands during PROLOGUE, say "RESPONSE." 291 | 292 | After touching ACTOR's ass during PROLOGUE, say "RESPONSE." 293 | After rubbing ACTOR's ass during PROLOGUE, say "RESPONSE." 294 | After spanking ACTOR's ass during PROLOGUE, say "RESPONSE." 295 | After pinching ACTOR's ass during PROLOGUE, say "RESPONSE." 296 | After licking ACTOR's ass during PROLOGUE, say "RESPONSE." 297 | 298 | After touching ACTOR's breasts during PROLOGUE, say "RESPONSE." 299 | After rubbing ACTOR's breasts during PROLOGUE, say "RESPONSE." 300 | After tickling ACTOR's breasts during PROLOGUE, say "RESPONSE." 301 | After licking ACTOR's breasts during PROLOGUE, say "RESPONSE." 302 | After biting ACTOR's breasts during PROLOGUE, say "RESPONSE." 303 | After pinching ACTOR's breasts during PROLOGUE, say "RESPONSE." 304 | 305 | After touching ACTOR's vagina during PROLOGUE, say "RESPONSE." 306 | After rubbing ACTOR's vagina during PROLOGUE, say "RESPONSE." 307 | After touching ACTOR's vagina during PROLOGUE, say "RESPONSE." 308 | 309 | After touching ACTOR's chest during PROLOGUE, say "RESPONSE." 310 | After rubbing ACTOR's chest during PROLOGUE, say "RESPONSE." 311 | After tickling ACTOR's chest during PROLOGUE, say "RESPONSE." 312 | After licking ACTOR's chest during PROLOGUE, say "RESPONSE." 313 | After biting ACTOR's chest during PROLOGUE, say "RESPONSE." 314 | 315 | After touching ACTOR's penis during PROLOGUE, say "RESPONSE." 316 | After rubbing ACTOR's penis during PROLOGUE, say "RESPONSE." 317 | After pinching ACTOR's penis during PROLOGUE, say "RESPONSE." 318 | After licking ACTOR's penis during PROLOGUE, say "RESPONSE." 319 | After biting ACTOR's penis during PROLOGUE, say "RESPONSE." 320 | 321 | After fucking ACTOR's ass with SOMETHING during PROLOGUE: say "RESPONSE." 322 | After fucking ACTOR's vagina with SOMETHING during PROLOGUE, say "RESPONSE." 323 | After fucking SOMETHING with ACTOR's penis during PROLOGUE, say "RESPONSE." -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | 341 | -------------------------------------------------------------------------------- /Moisturizer.i7x: -------------------------------------------------------------------------------- 1 | Version 1/170819 of Moisturizer by Fictitious Frode begins here. 2 | "An experimental testbed for Erotic Storytelling, use at your own risk as features can change drastically. 3 | It started out as a way providing some of the features from Moist, hence the name. 4 | It currently covers charged items, lubrication, reading, numeric arousal, penetrations." 5 | 6 | Include Erotic Storytelling by Fictitious Frode. 7 | 8 | Volume 0 - New Verbs 9 | 10 | [These are the new verbs the framework uses; We put this in it's own volume in case anyone needs to rewrite it for compatibility:] 11 | 12 | To prevent is a verb. 13 | To charge is a verb. 14 | To smear is a verb. 15 | 16 | Volume 1 - General Features 17 | 18 | Book 1.1 - Charged Items 19 | 20 | Part 1.1.1 - Charges 21 | 22 | [Devices have both a charge and a max charge. We use -1 as a null value.] 23 | A device has a number called charges. The charges of a device is usually -1. 24 | A device has a number called max charges. The max charges of a device is usually -1. 25 | A device has some text called extinguishing. The extinguishing of a device is usually "[The printed name] suddenly stops working." 26 | 27 | Chapter 1.1.1a - Consumption 28 | 29 | Every turn: 30 | Repeat with D running through switched on devices: 31 | If charges of D > 0, decrease the charges of D by 1; 32 | If charges of D is 0: 33 | Now D is switched off; 34 | If the player can see D, say the extinguishing of D; 35 | 36 | Chapter 1.1.1b - Switching On 37 | 38 | Check an actor switching on (this is the can't switch without charges rule): 39 | If the charges of noun is 0: 40 | If the actor is the player or the player can see the actor: 41 | say "Nothing happens." (A); 42 | Stop the action. 43 | 44 | Part 1.1.2 - Recharging 45 | 46 | A recharger is a kind of thing. 47 | 48 | Recharging is an action applying to one touchable thing. 49 | The specification of the fucking action is "Fucking is a helper action that can allows the player to target a person, and logic is applied to decide what parts are supposed to be involved. Redirects to the fucking it with action." 50 | 51 | Chapter 1.1.2 - Understanding 52 | 53 | Understand "charge [something preferably held]" as recharging. 54 | Understand "recharge [something preferably held]" as recharging. 55 | Understand "refill [something preferably held]" as recharging. 56 | 57 | The recharging action has an object called the charger (matched as "with"). 58 | Rule for setting action variables for recharging: 59 | If the actor carries a recharger (called R), now the charger is R; 60 | 61 | Chapter 1.1.2b - Checking 62 | 63 | [Moist: You don't have a recharger.] 64 | Check an actor recharging (This is the must have a recharger rule): 65 | If the charger is nothing: 66 | If the actor is the player: 67 | Say "[We] [don't] have anything to charge with." (A); 68 | Else if the player can see the actor and the action is not silent: 69 | Say "[The Actor] [don't] have anything to charge with." (B); 70 | Stop the action; 71 | 72 | Check an actor recharging (This is the can only recharge charged items rule): 73 | Unless the noun provides the property charges and the noun provides the property max charges: 74 | If the actor is the player: 75 | Say "[Regarding the noun][Those] [aren't] something [we] [can] charge." (A); 76 | Else if the player can see the actor and the action is not silent: 77 | Say "[Regarding the noun][Those] [aren't] something [the actor] [can] charge." (B); 78 | Stop the action; 79 | 80 | Chapter 1.1.2c - Carry Out 81 | 82 | Carry out an actor recharging (this is the charge to full capacity rule): 83 | Now the charges of noun is the max charges of noun; 84 | 85 | Chapter 1.1.2d - Report 86 | 87 | Report an actor recharging (this is the standard report recharging rule): 88 | If the actor is the player: 89 | Say "[We] [charge] [the noun] to full capacity." (A); 90 | Else if the player can see the actor and the action is not silent: 91 | Say "[The actor] [charge] [the noun] to full capacity." (B); 92 | 93 | Book 1.2 - Lubricating 94 | 95 | Part 1.2.1 - Foundations 96 | 97 | [Status: Complete] 98 | 99 | Chapter 1.2.1a - Definition 100 | 101 | [A thing can be lubricated if it provides the property lubrication time, and is lubricated if this property is positive. Lubrication medium is optional. 102 | We define these two properties for the templates they are most applicable for.] 103 | 104 | Definition: A thing (called T) is lubricated if T provides the property lubrication time and the lubrication time of T > 0. 105 | 106 | An ass has a number called lubrication time. 107 | An ass has some text called lubrication medium. 108 | A penis has a number called lubrication time. 109 | A penis has some text called lubrication medium. 110 | A vagina has a number called lubrication time. 111 | A vagina has some text called lubrication medium. 112 | A sex toy has a number called lubrication time. 113 | A sex toy has some text called lubrication medium. 114 | A strap-on has a number called lubrication time. 115 | A strap-on has some text called lubrication medium. 116 | 117 | Chapter 1.2.1b - Drying 118 | 119 | Every turn (this is the lubricant drying rule): 120 | Repeat with T running through things: 121 | If T provides the property lubrication time and the lubrication time of T > 0: 122 | Decrease the lubrication time of T by 1; 123 | If the player can see T: 124 | Let medium be "lubricant"; 125 | If T provides the property lubrication medium and the lubrication medium of T is not the default value of text, now medium is the lubrication medium of T; 126 | Say "The [medium] on [T][if T is in a body part] inside [holder of T][end if] seems to have dried up." (A); 127 | 128 | Chapter 1.2.1c - Lubricant 129 | 130 | A lubricant is a kind of thing. 131 | A lubricant has a number called duration. The duration of a lubricant is usually 15. 132 | A lubricant has a number called charges. The charges of a lubricant is usually 10. 133 | A lubricant has a number called max charges. The max charges of a lubricant is usually 10. 134 | A lubricant has some text called lubrication medium. The lubrication medium of a lubricant is usually "jelly". 135 | 136 | Part 1.2.2 - Action 137 | 138 | [Status: Mostly complete] 139 | 140 | Lubricating is an action applying to one touchable thing. 141 | 142 | Chapter 1.2.2a - Understanding 143 | 144 | Understand "lubricate [something]" as lubricating. 145 | Understand "lube [something]" as lubricating. 146 | Understand "wet [something]" as lubricating. 147 | Understand "moisten [something]" as lubricating. 148 | Understand "moist [something]" as lubricating. 149 | 150 | The lubricating action has an object called lubricator (matched as "with"). 151 | Rule for setting action variables for lubricating: 152 | Let L be the list of lubricants carried by the actor; 153 | Sort L in reverse charges order; 154 | Unless L is empty, now the lubricator is entry 1 of L; 155 | 156 | Chapter 1.2.2b - Checking 157 | 158 | [Make sure the noun can be lubricated:] 159 | Check an actor lubricating (This is the lubricating correct things rule): 160 | If the noun does not provide the property lubrication time: 161 | [Moist: It's of no use to lubricate [the noun].] 162 | If the actor is the player: 163 | Say "[The noun] is not something [we] [can] lubricate." (A); 164 | Else if the player can see the actor and the action is not silent: 165 | Say "[The noun] is not something [the actor] [can] lubricate." (B); 166 | Stop the action; 167 | 168 | [Make sure that we have a charged lubricator:] 169 | Check an actor lubricating (This is the lubricant control rule): 170 | If the lubricator is nothing: 171 | Say "You don't have anything to lubricate with."; 172 | Stop the action; 173 | If the charges of lubricator is 0: 174 | Say "The [lubricator] is empty."; 175 | Stop the action; 176 | 177 | [Make sure the body part is accessible] 178 | Check an actor lubricating (This is the lubricating body parts require access rule): 179 | If the noun is a body part: 180 | Unless the noun can be touched: 181 | If the actor is the player or the player can see the actor and the action is not silent: 182 | Say "[The noun] [are] covered by [preventing touching of the noun]." (A); 183 | Stop the action; 184 | 185 | [TODO: Either reinstate these checks, or make a reference to lubricating around in the reporting rule 186 | If the noun contains something (called blocker): 187 | Say "First remove [the blocker] which is inserted in [the noun]."; 188 | Stop the action; 189 | If the noun is in something (called blocker): 190 | Say "First remove [the noun] out of [the blocker]."; 191 | Stop the action;] 192 | 193 | [TODO: Make sure it's not already lubricated] 194 | 195 | [Check for consent.] 196 | Check an actor lubricating (This is the lubricating requires consent rule): 197 | If the noun is enclosed by a person: 198 | Follow the consent rules; 199 | Unless the outcome of the rulebook is the give consent outcome: 200 | Stop the action; 201 | 202 | Chapter 1.2.2c - Carry Out 203 | 204 | [Use charge and apply medium for duration:] 205 | Carry out an actor lubricating something (this is the apply lubrication rule): 206 | Decrease the charges of the lubricator by 1; 207 | Now the lubrication time of the noun is duration of lubricator; 208 | If noun provides the property lubrication medium, now the lubrication medium of noun is the lubrication medium of lubricator; 209 | 210 | Chapter 1.2.2d - Reporting 211 | 212 | Report an actor lubricating (this is the standard report lubricating rule): 213 | If the actor is the player: 214 | Say "[We] [smear] a layer of [lubrication medium of lubricator] on [the noun]." (A); 215 | Else if the player can see the actor: 216 | Say "[The actor] [smear] a layer of [lubrication medium of lubricator] on [the noun]." (B); 217 | Else if the actor can see the noun: 218 | Say "[The noun] [are] covered by a layer of [lubrication medium of lubricator]." (C); 219 | 220 | Chapter 1.2.2e - Persuasion 221 | 222 | Persuasion for asking someone to try lubricating something (this is the consensual lubriaction persuasion rule): If consensual persuasion option is active and noun is enclosed by a person, persuasion succeeds. 223 | Unsuccessful attempt by someone lubricating something when the reason the action failed is the lubricating requires consent rule: Rule succeeds; 224 | 225 | Book 1.3 - Reading 226 | 227 | Volume 2 - Erotic Features 228 | 229 | Book 2.1 - Penetrations 230 | 231 | [Penetrations can be achieved through a new relation with related actions and restrictions, or through hijacking the existing containment relation and the insert/remove actions. 232 | We opt for the second option.] 233 | 234 | Part 2.1.1 - Penetrating 235 | 236 | [Status: Complete 237 | Inserting should allow a penetrating thing to be inserted into an orificial body part, taking into account clothing and capacity. 238 | NOTE: If the thing being inserted is a body part we redirect to fucking - This might be changed.] 239 | 240 | Chapter 2.1.1 - Checking 241 | 242 | [Allow allow inserting into orificial body parts by modifying existing rules. Note the special handling of breasts.] 243 | The can't insert into what's not a container rule is not listed in any rulebook. 244 | [The modified can't insert into what's not a container rule substitutes for the can't insert into what's not a container rule.] 245 | Check an actor inserting something into (this is the modified can't insert into what's not a container rule): 246 | If the second noun is a container, continue the action; 247 | If the second noun is a an orificial body part and the second noun is not some breasts, continue the action; 248 | If the actor is the player or the player can see the noun and the action is not silent: 249 | Say "[regarding the second noun][Those] [can't contain] things." (A); 250 | Stop the action. 251 | 252 | [Modify the capacity check to account for body parts.] 253 | The can't insert if this exceeds carrying capacity rule is not listed in any rulebook. 254 | [The modified can't insert if this exceeds carrying capacity rule substitutes for the can't insert if this exceeds carrying capacity rule.] 255 | Check an actor inserting something into (this is the modified can't insert if this exceeds carrying capacity rule): 256 | If the second noun provides the property carrying capacity: 257 | If the number of things in the second noun is at least the carrying capacity of the second noun: 258 | If the actor is the player or the player can see the noun and the action is not silent: 259 | Now the prior named object is nothing; 260 | Say "[There] [are] no more room in [the second noun]." (A); 261 | Stop the action; 262 | If the second noun is an orificial body part: 263 | If something is in second noun: 264 | If the actor is the player or the player can see the noun and the action is not silent: 265 | Now the prior named object is nothing; 266 | Say "[The second noun] already contains [the list of things in second noun]." (B); 267 | Stop the action; 268 | 269 | [Check that only penetrating things are inserted into body parts. Note the redirect to fucking for body parts] 270 | Check an actor inserting something into (this is the penetrating body parts rule): 271 | If the second noun is an orificial body part: 272 | If the noun is a penetrating body part: 273 | If the actor is the player or the player can see the noun and the action is not silent: 274 | Try the actor fucking the noun with the second noun instead; 275 | If the noun is penetrating, continue the action; 276 | If the actor is the player or the player can see the noun and the action is not silent: 277 | Say "[The noun] is not something you can put in [the second noun]." (A); 278 | Stop the action; 279 | 280 | [Check that the body part is accessible. We allow for touching rather than requiring full access.] 281 | Check an actor inserting something into (this is the penetrating accessible body parts rule): 282 | If the second noun is a body part: 283 | Unless noun can be touched: 284 | If the actor is the player: 285 | Say "[The preventing touching of second noun] [prevent] [us] from reaching [the noun]." (A); 286 | Else if the player can see the noun and the action is not silent: 287 | Say "[The preventing touching of second noun] [prevent] [the actor] from reaching [the noun]." (B); 288 | Stop the action; 289 | 290 | [Check for consent.] 291 | Check an actor inserting something into (This is the penetrating requires consent rule): 292 | If the second noun is a body part: 293 | Follow the consent rules; 294 | Unless the outcome of the rulebook is the give consent outcome: 295 | Stop the action; 296 | 297 | Chapter 2.1.1b - Persuasion 298 | 299 | Persuasion for asking someone to try inserting something into something (this is the consensual penetration persuasion rule): If consensual persuasion option is active and the second noun is a body part, persuasion succeeds. 300 | Unsuccessful attempt by someone inserting something into when the reason the action failed is the penetrating requires consent rule: Rule succeeds; 301 | 302 | Part 2.1.2 - Withdrawing 303 | 304 | [Status: Complete 305 | Taking should account for removing a penetrator from a body part.] 306 | 307 | Chapter 2.1.2a - Checking 308 | 309 | [NOTE: This rule is already modified by Erotic Storytelling] 310 | 311 | The revised can't take people's possessions rule is not listed in any rulebook. 312 | [The third can't take people's possessions rule substitutes for the can't take people's possessions rule.] 313 | Check an actor taking (this is the third can't take people's possessions rule): 314 | If the noun is a garment and the noun is worn by someone, continue the action; [Defer judgement to consent rules] 315 | If noun is in a body part, continue the action; [Defer judgement to consent rules] 316 | Let the local ceiling be the common ancestor of the actor with the noun; 317 | Let the owner be the not-counting-parts holder of the noun; 318 | While the owner is not nothing and the owner is not the local ceiling: 319 | If the owner is a person: 320 | If the actor is the player: 321 | Say "[regarding the noun][Those] [seem] to belong to [the owner]." (A); 322 | Stop the action; 323 | Let the owner be the not-counting-parts holder of the owner; 324 | 325 | [Check that the body part is accessible. We allow for touching rather than requiring full access.] 326 | Check an actor taking something (this is the withdrawing from accessible body parts rule): 327 | If the noun is in a body part (called orifice): 328 | Unless orifice can be touched: 329 | If the actor is the player: 330 | Say "[The preventing touching of orifice] [prevent] [us] from reaching [the noun]." (A); 331 | Else if the player can see the noun and the action is not silent: 332 | Say "[The preventing touching of orifice] [prevent] [the actor] from reaching [the noun]." (B); 333 | Stop the action; 334 | 335 | [Check for consent.] 336 | Check an actor taking something (This is the withdrawing requires consent rule): 337 | If the noun is in a body part (called orifice): 338 | Follow the consent rules; 339 | Unless the outcome of the rulebook is the give consent outcome: 340 | Stop the action; 341 | 342 | Chapter 2.1.2b - Persuasion 343 | 344 | Persuasion for asking someone to try taking something (this is the consensual withdrawing persuasion rule): If consensual persuasion option is active and the noun is in a body part , persuasion succeeds. 345 | Unsuccessful attempt by someone taking something when the reason the action failed is the withdrawing requires consent rule: Rule succeeds; 346 | 347 | Book 2.2 Voyeurism 348 | 349 | Part 2.2.1 - Kinds 350 | 351 | A voyeur point is a kind of container. 352 | The printed name is usually "voyeurism modus". 353 | A voyeur point is usually enterable. A voyeur point is usually transparent. 354 | A voyeur point has a room called the destination. 355 | [TODO Instead of an actor exiting a voyeur point (called V), move the actor to the destination of V.] 356 | 357 | Book 2.3 - Numeric Arousal 358 | 359 | A person has a number called the excitement. 360 | Definition: A person (called P) is excited if the excitement of P > 15. 361 | 362 | Book 2.4 - Restraints 363 | 364 | To decide whether (P - a person) is confined by (C - a container): 365 | If P is in C and C is closed and C is locked, decide yes; 366 | Decide no; 367 | 368 | To decide whether (P - a person) is confined: 369 | If P is in a container (called C): 370 | If P is confined by C, decide yes; 371 | Decide no; 372 | 373 | [TODO: Surely there's a smarter way to do this?] 374 | To decide whether (P - a person) is not confined: 375 | If P is in a container (called C): 376 | If P is confined by C, decide no; 377 | Decide yes; 378 | 379 | To decide which object is the restraint of (P - a person): 380 | If P is in a container (called C): 381 | If P is confined by C, decide on C; 382 | Decide on nothing; 383 | 384 | 385 | Moisturizer ends here. 386 | 387 | ---- DOCUMENTATION ---- 388 | 389 | Chapter 1 - Using this Extension 390 | 391 | To use this extension (which relies on Erotic Storytelling), you need to download and install it (which you probably have if you're reading this) and include it in your story: 392 | 393 | *: 394 | Include Moisturizer by Fictitious Frode. 395 | 396 | As this extension makes use of Erotic Storytelling, you don't need to include both but if you then this extension must be loaded last. 397 | 398 | Section 1.1 - Extension Overview 399 | 400 | 'Moisturizer' is a pun on the fact that this started out as a way to supply functionality in Moist (by Scarlett Herring) that wasn't ready or suitable for Erotic Storytelling. 401 | It is now an experimental testbed so changes (and bugs!) are to be expected and the documentation is not always complete or updated. 402 | 403 | Section 1.2 - Version History 404 | 405 | 2017-08-19: Release 1 406 | 407 | * Charged items and recharging; functionally complete 408 | * Lubrication; functionally complete 409 | * Penetrations; functionally complete 410 | * Numeric Arousal; partial implementation 411 | * Readables; idea stage 412 | * Voyeurism; idea stage 413 | 414 | 415 | Section 1.3 - Contact Info 416 | 417 | The author of this extension can be reached in the following ways: 418 | 419 | Mail: fictitious.frode@gmail.com 420 | Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF with Inform 7, and is the official host of the extension. It contains both dicussions around AIF and tutorials on both Inform in general and this extension in particular. 421 | Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF community, and the author checks this regularly. 422 | GitHub: https://github.com/FictitiousFrode/AIF Contains the latest version of the extension, possibly including functionality that hasn't been released yet. 423 | 424 | Feedback of all varieties is welcome, but constructive criticism and discussion is the most appreciated, along with reports of bugs and other issues. 425 | For support I would appreciate using public communication, so that other may learn from the request as well. 426 | -------------------------------------------------------------------------------- /Simple Conversations.i7x: -------------------------------------------------------------------------------- 1 | Version 2/170401 of Simple Conversations by Fictitious Frode begins here. 2 | 3 | Include Epistemology by Eric Eve. 4 | 5 | Volume 1 - Simple Conversations 6 | 7 | Book 1.1 - Concepts 8 | 9 | Part 1.1.1 - Subjects 10 | 11 | [We use Epistemology's subject type, but add a property to allow once-only responses. 12 | We use Epistemology's 'known' definition to mark subjects as enabled.] 13 | 14 | A subject can be repeatable or one-time. A subject is usually repeatable. 15 | 16 | Part 1.1.2 - Dialogue 17 | 18 | Chapter 1.1.2a - Dialogue Table 19 | 20 | [Dialogue for subjects are stored in tables; each person should have their own table but it's possible to share. 21 | Subject: The thing/subject being asked about 22 | Availability: If the dialogue is available 23 | Cue: If defined, printed as part of the 'talk to' action to hint at this subject 24 | Turn stamp: The turn the subject was last talked about 25 | Dialogue: The textual response] 26 | 27 | A person has a table-name called the dialogue. 28 | The dialogue of a person is usually the Table of No Dialogue. 29 | 30 | Table of No Dialogue 31 | subject (a thing) availability (a truth state) cue (a text) turn stamp (a number) dialogue (some text) 32 | -- -- -- -- -- 33 | 34 | Chapter 1.1.2b - Updating Cue 35 | 36 | To update the cue of (subject - a thing) for (conversationalist - a person) to (cue - some text): 37 | Let updated be false; 38 | Repeat through dialogue of the conversationalist: 39 | If there is a subject entry and the subject entry is subject: 40 | Now cue entry is cue; 41 | Let updated be true; 42 | If updated is false: 43 | If number of blank rows in dialogue of the conversationalist is 0: 44 | Say "ERROR: Unable to insert [subject] into dialogue for [conversationalist] - table is full."; 45 | Else: 46 | Choose a blank row in dialogue of the conversationalist; 47 | Now availability entry is false; 48 | Now subject entry is subject; 49 | Now cue entry is cue; 50 | Now dialogue entry is ""; 51 | 52 | To clear the cue of (subject - a thing) for (conversationalist - a person): 53 | Repeat through dialogue of the conversationalist: 54 | If there is a subject entry and the subject entry is subject: 55 | Blank out the cue entry; 56 | 57 | Chapter 1.1.2c - Updating Dialogue 58 | 59 | To update the dialogue of (subject - a thing) for (conversationalist - a person) to (dialogue - some text): 60 | Let updated be false; 61 | Repeat through dialogue of the conversationalist: 62 | If there is a subject entry and the subject entry is subject: 63 | Now dialogue entry is dialogue; 64 | Let updated be true; 65 | If updated is false: 66 | If number of blank rows in dialogue of the conversationalist is 0: 67 | Say "ERROR: Unable to insert [subject] into dialogue for [conversationalist] - table is full."; 68 | Else: 69 | Choose a blank row in dialogue of the conversationalist; 70 | Now availability entry is false; 71 | Now subject entry is subject; 72 | Now dialogue entry is dialogue; 73 | 74 | To clear the dialogue of (subject - a thing) for (conversationalist - a person): 75 | Repeat through dialogue of the conversationalist: 76 | If there is a subject entry and the subject entry is subject: 77 | Blank out the dialogue entry; 78 | 79 | Chapter 1.1.2d - Toggling Availability 80 | 81 | To activate (subject - a thing) for (conversationalist - a person): 82 | Repeat through dialogue of the conversationalist: 83 | If there is a subject entry and the subject entry is subject: 84 | Now availability entry is true; 85 | 86 | To deactivate (subject - a thing) for (conversationalist - a person): 87 | Repeat through dialogue of the conversationalist: 88 | If there is a subject entry and the subject entry is subject: 89 | Now availability entry is false; 90 | 91 | Chapter 1.1.2e - Checking For Dialogue 92 | 93 | To decide whether (subject - a thing) has been talked about to (conversationalist - a person): 94 | Repeat through dialogue of the conversationalist: 95 | If there is a subject entry and the subject entry is subject: 96 | If there is a turn stamp entry and the turn stamp entry > 0, decide yes; 97 | Decide no; 98 | 99 | Part 1.1.3 - Default Responses 100 | 101 | [The default dialogue is issued when talking about something that isn't recognized as a subject/thing, or when the person doesn't have an available dialogue in their conversation table.] 102 | A person has some text called the default dialogue. 103 | 104 | Book 1.2 - New Actions 105 | 106 | Part 1.2.1 - Talking To 107 | 108 | [Talking to checks the responses of the person to see which subjects are available, and which should be hinted at.] 109 | 110 | Talking to is an action applying to one thing. 111 | The specification of the talking to action is "Talking to engages a person in conversation, giving the player some options on subjects to talk about." 112 | 113 | Chapter 1.2.1a - Understanding 114 | 115 | Understand "talk --/to [something]" as talking to. 116 | 117 | Chapter 1.2.1b - Check 118 | 119 | [Make sure that we're talking to a person] 120 | Check an actor talking to something (this is the talking to inanimate objects rule): 121 | If the noun is not a person: 122 | Now the prior named object is nothing; 123 | If the actor is the player and the action is not silent: 124 | Say "[We] [don't] expect to get much response from [the noun]." (A); 125 | Stop the action; 126 | 127 | Chapter 1.2.1c - Carry Out 128 | 129 | [Go through the person's dialogue options, and see if there are any that are available and have a defined cue.] 130 | Carry out an actor talking to someone (this is the conversation cueing rule): 131 | Let cues be a list of text; 132 | Repeat through dialogue of the noun: 133 | If there is a cue entry and there is an availability entry and the availability entry is true: 134 | If the subject entry is known, add the cue entry to cues; 135 | If the actor is the player: 136 | If the cues is empty: 137 | Say "[We] [can't] think of anything to talk to [the noun] about." (A); 138 | Else: 139 | Say "[We] [can] talk with [the noun] about [cues]." (B); 140 | 141 | Chapter 1.2.1d - Report 142 | 143 | Report an actor talking to someone (this is the report conversations rule): 144 | If the actor is not the player: 145 | Say "[The actor] talks to [the noun]." (A); 146 | 147 | Part 1.2.2 - Talking About 148 | 149 | [Talk to a person about a specific subject; checking the dialogue for a response.] 150 | 151 | Talking to it about is an action applying to one thing and one visible thing. 152 | 153 | Chapter 1.2.2a - Understanding 154 | 155 | [Understand "talk --/to [something] about [any thing]" as talking to it about.] 156 | Understand "talk --/to [something] about [any known thing]" as talking to it about. 157 | 158 | Chapter 1.2.2b - Check 159 | 160 | [Make sure that we're talking to a person] 161 | Check an actor talking to about something (this is the conversing about with inanimate objects rule): 162 | If the noun is not a person: 163 | Now the prior named object is nothing; 164 | If the actor is the player and the action is not silent: 165 | Say "[We] [don't] expect to get much response from [the noun]." (A); 166 | Stop the action; 167 | 168 | [Make sure the subject is known and dialogue is available] 169 | Check an actor talking to about something (this is the conversation viability rule): 170 | If the second noun is not known: 171 | If the action is not silent: 172 | If the actor is the player or the player can see the actor: 173 | If the default dialogue of the noun is the default value of text: 174 | Say "[The noun] [don't] know what to say about [the second noun]." (A); 175 | Else: 176 | Say "[default dialogue of noun][paragraph break]" (B); 177 | Stop the action; 178 | 179 | Chapter 1.2.2c - Carry Out 180 | 181 | [Print the dialogue, log turn count and toggle availability for one-time dialogue.] 182 | Carry out talking to someone about something (this is the conversation rule): 183 | Repeat through dialogue of the noun: 184 | If there is a subject entry and the second noun is the subject entry and the availability entry is true: 185 | Say "[dialogue entry][paragraph break]" (A); 186 | Now turn stamp entry is the turn count; 187 | If the subject is one-time, now the availability entry is false; 188 | 189 | Chapter 1.2.2d - Report 190 | 191 | Report an actor talking to someone (this is the report specific conversation rule): 192 | If the actor is not the player: 193 | Say "[The actor] talks to [the noun] about [the second noun]." (A); 194 | 195 | Part 1.2.3 - Pondering About Unknown Things 196 | 197 | [If what the player writes isn't understood as a thing, we still want to catch and process it.] 198 | 199 | Pondering to it about is an action applying to one thing and one topic. 200 | 201 | Chapter 1.2.3a - Understanding 202 | 203 | Understand "talk --/to [something] about [text]" as pondering to it about. 204 | Understand "converse --/with [something] about [text]" as pondering to it about. 205 | 206 | Chapter 1.2.3b - Check 207 | 208 | [Make sure that we're talking to a person] 209 | Check an actor pondering to something about something (this is the pondering with inanimate objects rule): 210 | If the noun is not a person: 211 | Now the prior named object is nothing; 212 | If the actor is the player and the action is not silent: 213 | Say "[We] [don't] expect to get much response from [the noun]." (A); 214 | Stop the action; 215 | 216 | Chapter 1.2.3c - Carry Out 217 | 218 | Carry out an actor pondering to someone about something (this is the pondering unknown topics rule): 219 | If the actor is the player: 220 | If the default dialogue of the noun is the default value of text: 221 | Say "[The noun] [don't] know what to say about that." (A); 222 | Else: 223 | Say "[default dialogue of noun][paragraph break]" (B); 224 | 225 | Book 1.3 - Action Integration 226 | 227 | The conversation redirection is initially "[We] should 'talk to' them about it instead."; 228 | 229 | Part 1.3.1 - Asking 230 | 231 | Check an actor asking someone about a topic: 232 | Say the conversation redirection; 233 | Stop the action; 234 | 235 | Part 1.3.2 - Telling 236 | 237 | Check an actor telling someone about a topic: 238 | Say the conversation redirection; 239 | Stop the action; 240 | 241 | Part 1.3.3 - Showing 242 | 243 | Check an actor showing something to someone: 244 | Say the conversation redirection; 245 | Stop the action; 246 | 247 | Part 1.3.4 - Giving 248 | 249 | Check an actor giving something to someone: 250 | Say the conversation redirection; 251 | Stop the action; 252 | 253 | Simple Conversations ends here. 254 | 255 | ---- DOCUMENTATION ---- 256 | 257 | Chapter 1 - Using this Extension 258 | 259 | To use this framework, you need to download and install it (which you probably have if you're reading this) and include it in your story: 260 | 261 | *: 262 | Include Simple Conversations by Fictitious Frode. 263 | 264 | By including this extension, you will disable the 'ask', 'tell', 'give' and 'show' actions. 265 | In their place you get two new actions, 'talk to person' and 'talk to person about subject'. 266 | These are covered in greater detail in chapter 2. 267 | 268 | This extension makes use of Eric Eve's Epistemology extension to provide subjects and keep track of the player's knowledge. 269 | It's bundled with Inform and should already be installed for you. 270 | 271 | Section 1.1 - Documentation Overview 272 | 273 | The documentation will cover the following subjects: 274 | 275 | Chapter 1: A short overview of the extension. 276 | Chapter 2: Techniques and guidelines on how to create simple conversations. 277 | Chapter 3: A complete technical reference for everything added or changed with this extension. 278 | 279 | The following examples are included: 280 | 281 | A: Hard Rock - A conversational example 282 | 283 | Section 1.2 - Version History 284 | 285 | 2016-12-23: Beta-1 (Release 1) 286 | 287 | Table-based dialogue options for subjects. 288 | Individual default dialogue responses for each person. 289 | Availability for both subjects and individual dialogues can be toggled. 290 | Support for runtime alterations to dialogues. 291 | 292 | 2017-04-01: Beta-2 (Release 2) 293 | 294 | Support for clearing cue and dialogue entries. 295 | 296 | Section 1.3 - Contact Info 297 | 298 | The author of this extension can be reached in the following ways: 299 | 300 | Mail: fictitious.frode@gmail.com 301 | Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF with Inform 7, and is the official host of the extension. It contains both dicussions around AIF and tutorials on both Inform in general and this extension in particular. 302 | Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF community, and the author checks this regularly. 303 | GitHub: https://github.com/FictitiousFrode/AIF Contains the latest version of the extension, possibly including functionality that hasn't been released yet. 304 | 305 | Feedback of all varieties is welcome, but constructive criticism and discussion is the most appreciated, along with reports of bugs and other issues. 306 | For support I would appreciate using public communication, so that other may learn from the request as well. 307 | 308 | Chapter 2 - Simple Conversations 309 | 310 | When dealing with other characters in Interactive Fiction one of the key challenges is conversations. 311 | Because the player is free to converse about anything that strikes their fancy, a good conversation system must both understand what topic the player is referring to and have a response for it. 312 | Over time two main styles of conversation has evolved; the keyword conversation approach which underlies Inform's default conversation actions, or using a branching tree of conversation subjects. 313 | This extension implements the first approach, simplifying the four default actions ('ask', 'tell', 'give' and 'show') down to the simple 'talk to' and 'talk to about'. 314 | 315 | Conceptually we divide the conversation model into two parts, subjects to talk about and the dialogue options of other characters. 316 | The next two sections will provide detail on how to use these 317 | 318 | Section 2.1 - Subjects 319 | 320 | Inform's default behavior is to allow conversation on text tokens, which handles just about anything the player types. 321 | This approach has some downsides besides trying to decipher what the player actually means; we also don't have a simple way to apply properties to a topic. 322 | The player's knowledge of conversation topics is one such thing that needs to be kept track of, which we do using Eric Eve's Epistemology extension. 323 | This includes a 'subject' type which we extend with a property marking it the subject is repeatable (the default) or something you can only ask a person about once. 324 | It's very important to make liberal use of 'understand' statements to link phrases the player might use to talk about the subject. 325 | 326 | Section 2.2 - Dialogues 327 | 328 | A subject isn't very interesting without a dialogue response for it from the other characters. 329 | To facilitate this we use a table-based approach, which allows for both shared and individual dialogue options. 330 | Each person has a 'dialogue' property which points to a table, which should look like the example below: 331 | 332 | *: 333 | Library is a room. 334 | Bob is a person in Library. Bob's dialogue is the Table of Bob's Dialogue. 335 | 336 | A conversation is a subject. 337 | Understand "conversations", "help --/on" and "talking" as conversation. 338 | 339 | Table of Bob's Dialogue 340 | subject (a thing) availability (a truth state) cue (a text) turn stamp (a number) dialogue (some text) 341 | conversation true "help on how to talk to other people" -- "'You should try reading the documentation,' Bob answers. Not much help in that." 342 | 343 | Test me with "talk to bob / talk to bob about help". 344 | 345 | It's important that the table contains the following five columns: 346 | 347 | Subject: The subject (or any other thing) the dialogue is for 348 | Availability: True/false for if the option is enabled 349 | Cue: If not blank, the text here is listed together to guide the player when using the 'talk to' action 350 | Turn stamp: The turn on which the dialogue was last talked about, or blank (--) if it's never been talked about 351 | Dialogue: The text to output when talking about the option 352 | 353 | It's also possible to write 'after talking to person about subject' rules. 354 | Typically these would be to unlock the effects of talking about the subject, such as updating cues and making other dialogues available. 355 | 356 | Each person also have their own default dialogue property, which will be used as the response to all subjects that are not listed in the dialogue table. 357 | Only subjects that the player knows about (which is handled using Eric Eve's Epistemology extension) can be talked about in this manner. 358 | Attempts to converse about an unknown thing will be caught by the pondering to it about action, which when the noun is a person will also use the default dialogue. 359 | 360 | Section 2.3 - Changing Dialogues 361 | 362 | Dialogue is seldom static, and the author has a few options on how to alter conversations. 363 | As the dialogues are stored in a table, all the regular table operators in Inform can be used. 364 | These can be rather cumbersome for updating single values though, so some phrases are provided to simplify matters. 365 | The most common update is changing the availability of a dialogue, which is done with the 'ACTIVATE/DEACTIVE subject FOR person' phrases. 366 | Similarly it's also possible to update the cue and dialogue itself, using the 'UPDATE THE CUE/DIALOGUE OF subject FOR person TO text' phrases. 367 | Note that if you try to update the cue or dialogue for a subject that doesn't exist, these phrases try to create a new record in the table if there is room. 368 | These are covered in more details in section 3.3 369 | 370 | When the story moves to a new act it's often necessary to make larger alterations to dialogue. 371 | For these occasions you can have a separate table of dialogue for each act, and use the 'when scene begins' rule to change the dialogue of the actors to refer to a new table. 372 | 373 | Chapter 3 - Technical Reference 374 | 375 | Contained in this chapter is a technical description of all the new and altered mechanics for the extension, divided by type. 376 | It's intended as a companion to the other chapters, although an experienced author could glean much of the previous information from this chapter alone. 377 | 378 | Section 3.1 - New Kind: Subject 379 | 380 | Subject is a new kind which is defined by Eric Eve's Epistemology extension, to represent intangible knowledge that the player might want to talk to other characters about. 381 | By default every subject is familiar to the player, which allows it to be talked about. 382 | For subjects representing knowledge the player learns during play, you should state that it is initially 'not familiar' and update it at the appropriate time. 383 | Subjects can also be repeatable (the default) or one-time, which determines if the dialogue is disabled after talking about it. 384 | This should be mainly used for dialogue options that have some lasting effect on the world model. 385 | It's also very important to use understand phrases to link the subject to the various words the player might use to refer to the knowledge. 386 | 387 | Section 3.2 - The Dialogue Table 388 | 389 | Dialogue is stored in table form for each person, which allows us to keep track of dialogue for each person individually while still being flexible. 390 | It's very important that the table contains the following five columns: 391 | 392 | Subject: Can contain any thing in the story world. Will only be matched against the players query if the thing is 'known', according to the Epistemology extension. 393 | Availability: A simple flag to determine if the person has knowledge about the subject. For subjects that are not repeatable, this will be toggled to false after talking about it. 394 | Cue: Used to populate the results of the 'talk to' action which cues the player to subjects. 395 | Turn stamp: Used to keep track of which dialogue options have been talked about, storing the turn number it was previously talked about. 396 | Dialogue: The text to output when talking about the option. 397 | 398 | Section 3.3 - Phrases 399 | 400 | The following phrases can be used to update the dialogues of a person, by altering the table that the dialogue property points to. 401 | 402 | UPDATE THE CUE OF (thing) FOR (person) TO (text): Sets the cue text of the thing in the person's table to the given text. If the thing isn't listed in the table, it tries to find a blank row to insert a new row with no dialogue and 'false' availability. Often used after talking about something that no longer requires cueing. 403 | CLEAR THE CUE OF (thing) FOR (person): Blanks out the cue of the thing in the person's table. 404 | UPDATE THE DIALOGUE OF (thing) FOR (person) TO (text): Sets the dialogue text of the thing in the person's table to the given text. If the thing isn't listed in the table, it tries to find a blank row to insert a new row with the dialogue and 'false' availability. 405 | CLEAR THE DIALOGUE OF (thing) FOR (person) : Blanks out the dialogue of the thing in the person's table. Rarely needed but provided for completion. 406 | ACTIVATE (thing) FOR (person): Sets the availability of the thing in the person's table to true. 407 | DEACTIVATE (thing) FOR (person): Sets the availability of the thing in the person's table to false. 408 | 409 | It's also possible to check if something has been talked about with a given person: 410 | 411 | whether (thing) HAS BEEN TALKED ABOUT TO (person): Checks if the turn stamp entry is filled in the person's dialogue table. 412 | 413 | Example: ** Hard Rock - A conversational example 414 | 415 | *: "Hard Rock" 416 | 417 | Include Simple Conversations by Fictitious Frode. 418 | 419 | Cavern is a room. Understand "this place" as cavern. 420 | A mysterious chest is a a closed container in cavern. It is fixed in place. 421 | A stone is in mysterious chest. 422 | 423 | Adam is a person in Cavern. Adam's dialogue is the Table of Adam's Dialogue. 424 | 425 | Some music is a subject. Understand "sound", "rock" and "roll" as music. 426 | 427 | Table of Adam's Dialogue 428 | subject (a thing) availability (a truth state) cue (a text) turn stamp (a number) dialogue (some text) 429 | cavern true "this place" -- "'This is where I retreat to when the world gets to be too much,' he answers." 430 | mysterious chest true -- -- "'[if stone is known]It's just where I keep my rock collection[else]It wouldn't be much of a mystery if I told you that[end if],' he answers." 431 | stone true -- -- "'It's no longer rolling.'" 432 | music true -- -- "'Sometimes I like to bang the stone against the cave walls.'" 433 | 434 | After talking to Adam about stone, update the cue of music for Adam to "rock 'n' roll music". 435 | 436 | Test me with "talk to adam / talk to adam this place / talk to adam about chest / talk to adam about stone / open chest / talk to adam about stone / talk to adam about rock". 437 | -------------------------------------------------------------------------------- /Templates.i7x: -------------------------------------------------------------------------------- 1 | Version 1/170820 of Erotic Storytelling Templates by Fictitious Frode begins here. 2 | "A documentation extension providing fill-in-the-blanks templates for easier writing of Adult Interactive Fiction (AIF) in Inform." 3 | 4 | Include Erotic Storytelling by Fictitious Frode. 5 | 6 | Erotic Storytelling Templates ends here. 7 | 8 | ---- DOCUMENTATION ---- 9 | 10 | Chapter 1 - Using this Extension 11 | 12 | This Extension provides no functionality on it's own, instead providing easy access to various templates for use with the Erotic Storytelling extension. 13 | To use that framework, you need to download and install it (which you probably have if you're reading this) and include it in your story: 14 | 15 | *: 16 | Include Erotic Storytelling by Fictitious Frode. 17 | 18 | Section 1.1 - Documentation Overview 19 | 20 | Each chapter in this documentation will provide templates for different concepts. 21 | 22 | Chapter 1: Story Fundamentals such as use options, standard imports and body part creation. 23 | Chapter 2: Actors with agency, body parts, clothing and dialogue. 24 | Chapter 3: Scenes with setup and teardown as well erotic integration. 25 | 26 | The enclosed Template.ni file contains one way of structuring a story. 27 | 28 | 29 | Section 1.2 - Version History 30 | 31 | 2017-08-20: Beta-1 (Release 1) 32 | 33 | Initial release, with templates for: 34 | Story Fundamentals: Useful imports and options; Creation of body parts. 35 | Actors: Agency, body parts, clothing and dialogue. 36 | Scenes: Scene setup and teardown with erotic integration. 37 | 38 | Section 1.3 - Contact Info 39 | 40 | The author of this extension can be reached in the following ways: 41 | 42 | Mail: fictitious.frode@gmail.com 43 | Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF with Inform 7, and is the official host of the extension. It contains both dicussions around AIF and tutorials on both Inform in general and this extension in particular. 44 | Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF community, and the author checks this regularly. 45 | GitHub: https://github.com/FictitiousFrode/AIF Contains the latest version of the extension, possibly including functionality that hasn't been released yet. 46 | 47 | Feedback of all varieties is welcome, but constructive criticism and discussion is the most appreciated, along with reports of bugs and other issues. 48 | For support I would appreciate using public communication, so that other may learn from the request as well. 49 | 50 | Chapter 1 - Story Fundamentals 51 | 52 | This chapter lists some of the most common options applying to the story in general. 53 | These templates are also included in the sample story structure file template.ni. 54 | 55 | Section 1.1 - Options 56 | 57 | These are some of the use options defined in Inform that the author finds most useful. 58 | Chapter 2.12 of 'Writing with Inform' has more information on most of these options. 59 | 60 | Signalling that the game is written in US rather than UK dialect changes some response texts in the core rules and extensions: 61 | 62 | *: 63 | Use American dialect. 64 | 65 | Traditionally interactive fiction has three levels of verbosity that the player controls, but these use options allows us to set a default for the story. 66 | Full-length is the current default for Inform and prints the entire room description every time the player visits. 67 | Brief prints the full description on the first visit but only the room title thereafter, while superbrief always prints just the room title. 68 | 69 | *: 70 | Use full-length room descriptions. 71 | Use brief room descriptions. 72 | Use superbrief room descriptions. 73 | 74 | The serial comma, also known as the Oxford comma, is a comma placed after the penultimate item in a list of three or more items: 75 | 76 | *: 77 | Use serial comma. 78 | 79 | To force Inform to only recognize full object names instead of the default behavior of trying to understand partial object references: 80 | 81 | *: 82 | Use unabbreviated object names. 83 | 84 | Scoring is by default disabled (see 9.2 of 'Writing with Inform' for more details). 85 | 86 | *: 87 | Use scoring. 88 | 89 | The persuasion rules (for when the player issues commands to other actors) has some overlap with the consent rules introduced in Erotic Storytelling, so we have an option to use consent rules for persuasion: 90 | 91 | *: 92 | Use consensual persuasion. 93 | 94 | The Discrete Arousal-based Consent and Stimulation system is an optional emulation of TADS-style arousal systems: 95 | 96 | *: 97 | Use DACS. 98 | 99 | Section 1.2 - Imports 100 | 101 | To include the full range of extensions in the framework: 102 | 103 | *: 104 | Include Erotic Storytelling by Fictitious Frode. 105 | Include Simple Conversations by Fictitious Frode. 106 | Include Posturing by Fictitious Frode. 107 | Include Directionality by Fictitious Frode. 108 | 109 | Some other extensions worth mentioning: 110 | 111 | *: 112 | Include Mood Variations by Emily Short. 113 | Include Locksmith by Emily Short. 114 | 115 | Section 1.3 - Default Body Parts 116 | 117 | The following body parts should be sufficient for most stories: 118 | 119 | *: 120 | A head is a part of every person. Understand "face" as head. 121 | Some hair is a part of every person. 122 | Some eyes are a part of every person. 123 | A mouth is a part of every person. 124 | Some feet are a part of every person. 125 | Some legs are a part of every person. Understand "thighs" as legs. 126 | Some hands are a part of every person. Understand "arms" as hands. 127 | An ass is a part of every person. 128 | 129 | A vagina is a part of every woman. 130 | Some breasts are a part of every woman. 131 | 132 | A chest is a part of every man. 133 | A penis is a part of every man. 134 | 135 | For completeness, these are the rest of the templated body parts: 136 | 137 | *: 138 | A face is a part of every person. 139 | Some thighs are a part of every person. 140 | Some ankles are a part of every person. 141 | Some arms are a part of every person. 142 | Some wrists are a part of every person. 143 | A neck is a part of every person. 144 | Some shoulders are a part of every person. 145 | An abdomen is a part of every person. 146 | A waist is a part of every person. 147 | A backside is a part of every person. 148 | 149 | Section 1.4 - Custom Body Parts 150 | 151 | The template below contains the main code for creating custom body parts and cover areas, see the 'A Furry Tale' example for complete details. 152 | 153 | *: 154 | Table of Coverage(continued) 155 | Cover Area Uncovered Decency (decency) 156 | The tail area immodest 157 | 158 | A tail is a kind of body part. 159 | The cover locations of a tail is usually {tail area}. 160 | A tail is usually touchable. A tail is usually rubbable. 161 | 162 | When play begins, add tail area to the body areas of ACTOR. 163 | 164 | Note that clothing would also have to be tailed to accomodate new cover areas. 165 | 166 | Chapter 2 - Actors 167 | 168 | Tailoing actors to your story is an exercise in descriptions. 169 | The chapter has templates for easily getting descriptions (and properties) right for body parts and clothing, as well as skeletons for dialogue and agency. 170 | 171 | Section 2.1 - Agency 172 | 173 | Agency has to be enabled for each relevant actor, and should also include a state description for the default description generation. 174 | It's often more useful to link these to scenes rather than have them always running. 175 | 176 | *: 177 | ACTOR is agency-enabled. 178 | The priority of ACTOR is 10. 179 | The agency state description of ACTOR is "ACTOR STATE." 180 | 181 | Idle message that only displays randomly: 182 | 183 | *: 184 | Idleness for ACTOR during SCENE: 185 | If a random chance of 1 in 3 succeeds, say "[one of]TEXT[or]TEXT[completely at random]". 186 | 187 | Planned agency for following the player or moving towards a given room: 188 | 189 | *: 190 | Planned agency for ACTOR during SCENE: 191 | Unless ACTOR can see player: 192 | Let the way be the best route from the location of ACTOR to location of player, using doors; 193 | If the way is a direction: 194 | Try ACTOR going the way; 195 | 196 | Planned agency for ACTOR during SCENE: 197 | Let the way be the best route from the location of ACTOR to DESTINATION, using doors; 198 | If the way is a direction: 199 | Try ACTOR going the way; 200 | 201 | Section 2.2 - Body Parts 202 | 203 | Description notability determines which parts are listed when examining the actor, using the short description property. 204 | The covered and uncovered descriptions are available for every body part, but the template only uses them for the intimate parts. 205 | The template below contains a suggested notability for each part, but this should be changed to one of distinct/grouped/unnotable/hidden as needed. 206 | 207 | *: 208 | The description of ACTOR's head is "ACTOR has [short description of ACTOR's hair], [short description of ACTOR's eyes], and [short description of ACTOR's mouth]." 209 | The short description of ACTOR's head is "TEXT". 210 | Description notability for ACTOR's head: unnotable. 211 | 212 | The description of ACTOR's hair is "ACTOR has [short description], EXTRA DETAILS." 213 | The short description of ACTOR's hair is "FORM COLOUR hair". 214 | Description notability for ACTOR's hair: distinct. 215 | 216 | The description of ACTOR's eyes is "ACTOR has [short description], EXTRA DETAILS." 217 | The short description of ACTOR's eyes is "COLOUR eyes". 218 | Description notability for ACTOR's eyes: grouped. 219 | 220 | The description of ACTOR's mouth is "ACTOR has [short description], EXTRA DETAILS." 221 | The short description of ACTOR's mouth is "DETAILS mouth". 222 | Description notability for ACTOR's mouth: grouped. 223 | 224 | The description of ACTOR's feet is "ACTOR has [short description], EXTRA DETAILS." 225 | The short description of ACTOR's feet is "DETAILS feet". 226 | Description notability for ACTOR's feet: unnotable. 227 | 228 | The description of ACTOR's legs is "ACTOR has [short description], EXTRA DETAILS." 229 | The short description of ACTOR's legs is "DETAILS legs". 230 | Description notability for ACTOR's legs: grouped. 231 | 232 | The description of ACTOR's hands is "ACTOR has [short description], EXTRA DETAILS." 233 | The short description of ACTOR's hands is "DETAILS hands". 234 | Description notability for ACTOR's hands: unnotable. 235 | 236 | The covered description of ACTOR's ass is "ACTOR has [short description], covered by [the concealing vision of ACTOR's ass]." 237 | The uncovered description of ACTOR's ass is "ACTOR has [short description], NAKED DETAILS." 238 | The short description of ACTOR's ass is "DETAILS ass". 239 | Description notability for ACTOR's ass: Unless ACTOR's ass can be seen, Hidden; Distinct. 240 | 241 | The covered description of ACTOR's vagina is "ACTOR has [short description], covered by [the concealing vision of ACTOR's vagina]." 242 | The uncovered description of ACTOR's vagina is "ACTOR has [short description], NAKED DETAILS." 243 | The short description of ACTOR's vagina is "DETAILS vagina". 244 | Description notability for ACTOR's vagina: Unless ACTOR's vagina can be seen, Hidden; Distinct. 245 | 246 | The covered description of ACTOR's breasts is "ACTOR has [short description], covered by [the concealing vision of ACTOR's breasts]." 247 | The uncovered description of ACTOR's breasts is "ACTOR has [short description], NAKED DETAILS." 248 | The short description of ACTOR's breasts is "DETAILS breasts". 249 | Description notability for ACTOR's breasts: Unless ACTOR's breasts can be seen, Hidden; Distinct. 250 | 251 | For the male body parts, we assume them to belong to the player. 252 | 253 | *: 254 | The covered description of your penis is "My [short description] is safely tucked away under [the concealing vision of your penis]." 255 | The uncovered description of your penis is "My penis is [if player is aroused or more]standing prudly at attention[else]hanging flaccidly[end if]." 256 | The short description of your penis is "[if player is aroused or more]erect[else]limp[end if] penis". 257 | Description notability for your penis: Unless your penis can be seen, Hidden; Distinct. 258 | 259 | The covered description of your chest is "My [short description] is hidden away under [the concealing vision of your chest]." 260 | The uncovered description of your chest is "My [short description] is displayed proudly." 261 | The short description of your chest is "muscular chest". 262 | Description notability for your chest: Unless your chest can be seen, Hidden; grouped. 263 | 264 | For a more complete description of orificies the following template can be used. 265 | Note that this references several custom properties that are not defined. 266 | 267 | *: 268 | The uncovered description of ACTOR's ass is 269 | "ACTOR's [short decription] is [if spanked][spanking description][else]SKINTONE[end if][if ACTOR's ass is spermed] with sperm leaking from her hole[end if]. 270 | [if lubricated]Her anus is gleaming from [lubrication medium][end if][if ACTOR's ass is lubricated and ACTOR's ass contains something] with [a list of things in ACTOR's ass] peeking out[end if]. 271 | [if ACTOR's ass is not lubricated and ACTOR's ass contains something][A list of things in ACTOR's ass] is peeking out of her tight anus.[end if]". 272 | 273 | The uncovered description of ACTOR's vagina is 274 | "ACTOR's [short decription] is [shaved description][if ACTOR's vagina is spermed] with sperm dripping down her thighs[end if]. 275 | [if lubricated]Her lips are gleaming from [lubrication medium][end if][if ACTOR's vagina is lubricated and ACTOR's vagina contains something] with [a list of things in ACTOR's vagina] firmly inserted[end if]. 276 | [if ACTOR's vagina is not lubricated and ACTOR's vagina contains something]Her lips are parted by [a list of things in ACTOR's vagina].[end if]". 277 | 278 | 279 | Section 2.3 - Clothing 280 | 281 | The template below covers the most commonly set properties for garments. 282 | Most of these are not applicable to all forms of clothing. 283 | 284 | *: 285 | A GARMENT is a TYPE worn by ACTOR. 286 | Description notability for GARMENT: Unless GARMENT can be seen, Hidden; Distinct/Grouped/Unnotable/Hidden. 287 | It is transparent. It is allow touching through. 288 | It is rippable. It is shiftable. The shiftyness of GARMENT is moveable/buttonable/zipable/fastenable/raisable/lowerable. 289 | The short description is "SHORTDESCRIPTION". 290 | The unworn description is "A [short description] DETAILS." 291 | The worn description is "The [short description] is slightly transparent, allowing you to see that [the holder of GARMENT] is wearing [revealed by shifting/taking off GARMENT] underneath." 292 | The shifted description is "The [short description] is SHIFTED, revealing [revealed by shifting GARMENT] underneath." 293 | The ripped description is "The [short description] is RIPPED, revealing [revealed by ripping GARMENT] underneath." 294 | 295 | The template below covers the all properties for garments. 296 | 297 | *: 298 | A GARMENT is a TYPE worn by ACTOR. 299 | Description notability for GARMENT: Unless GARMENT can be seen, Hidden; Distinct/Grouped/Unnotable/Hidden. 300 | It is transparent. It is allow touching through. The clothing size is NUMBER. 301 | The cloth decency is indecent/immodest/casual/formal. The clothing layer is skinwear/underwear/normalwear/overwear/outerwear. 302 | It is rippable. It is shiftable. The shiftyness of GARMENT is moveable/buttonable/zipable/fastenable/raisable/lowerable. 303 | The ripping revealed cover areas are {LIST}. 304 | The shifting revealed cover areas are {LIST}. 305 | The short description is "SHORTDESCRIPTION". 306 | The unworn description is "A [short description] DETAILS." 307 | The worn description is "The [short description] is slightly transparent, allowing you to see that [the holder of GARMENT] is wearing [revealed by shifting/taking off GARMENT] underneath." 308 | The shifted description is "The [short description] is SHIFTED, revealing [revealed by shifting GARMENT] underneath." 309 | The ripped description is "The [short description] is RIPPED, revealing [revealed by ripping GARMENT] underneath." 310 | 311 | Section 2.4 - Dialogue 312 | 313 | The Simple Conversations extension can be used to easily set up dialogue with actors. 314 | The template below show how to set up a dialogue table, as well as the relevant phrases to use for manipulating conversations. 315 | 316 | *: 317 | The dialogue of ACTOR is the Table of ACTOR's Dialogue. 318 | 319 | Table of ACTOR's Dialogue 320 | subject (a thing) availability (a truth state) cue (a text) turn stamp (a number) dialogue (some text) 321 | -- -- -- -- -- 322 | 323 | After talking to ACTOR about SUBJECT: 324 | If SUBJECT has been talked about to ACTOR: 325 | Deactivate SUBJECT for PERSON; 326 | Activate SUBJECT for PERSON; 327 | Clear the cue of SUBJECT for ACTOR; 328 | Update the cue of SUBJECT for ACTOR to "TEXT"; 329 | Clear the dialogue of SUBJECT for ACTOR; 330 | Update the dialogue of SUBJECT for ACTOR to "TEXT"; 331 | 332 | Chapter - Scenes 333 | 334 | 335 | Section - Setup and Teardown 336 | 337 | One of the benefits of scenes is that you can tie any relevant entry and exit parameters to them. 338 | The following template provides the structure and phrases for setting up most scenes, divided into seperate rules for clarity. 339 | 340 | *: 341 | Part 1.4.1 - PROLOGUE 342 | 343 | PROLOGUE is a scene. 344 | PROLOGUE begins when play begins. 345 | PROLOGUE ends when CONDITION. 346 | 347 | Chapter 1.4.1a - Setup 348 | 349 | When PROLOGUE begins (this is the PROLOGUE quotation rule): 350 | [display the boxed quotation;] 351 | Say "QUOTATION[paragraph break]"; 352 | Say "—SOURCE[paragraph break]"; 353 | [show the current quotation;] 354 | Say "(-continue-)[paragraph break]"; 355 | Wait for any key; 356 | Clear the screen; 357 | 358 | When PROLOGUE begins (this is the PROLOGUE introduction rule): 359 | Say "INTRODUCTION TEXT"; 360 | 361 | When PROLOGUE begins (this is the PROLOGUE stage-setting rule): 362 | [Place the things that are relvant for the prologue] 363 | Now the THING is in LOCATION; 364 | [Place and dress ACTOR] 365 | Now ACTOR is in LOCATION; 366 | Now ACTOR is not keep clothes after undress; 367 | Now ACTOR is agency-enabled; 368 | Now the agency state description of ACTOR is "ACTOR STATE"; 369 | Now the uninterested response of ACTOR is "ACTOR DENIAL"; 370 | Now the preferred clothing of ACTOR is {GARMENT, GARMENT}; 371 | Force dress ACTOR in the preferred clothing of ACTOR; 372 | 373 | Chapter 1.4.1b - Teardown 374 | 375 | When PROLOGUE ends (this is the PROLOGUE ending rule): 376 | Say "(-continue-)[paragraph break]"; 377 | Wait for any key; 378 | Clear the screen; 379 | 380 | When PROLOGUE ends (this is the PROLOGUE achievements rule): 381 | If CONDITION, award the ACHIEVEMENT; 382 | 383 | When PROLOGUE ends (this is the PROLOGUE stage-cleaning rule): 384 | [Ensure a consistent end-state for the world] 385 | 386 | Section - Involving Actors 387 | 388 | An actor's agency is usually tied to a scene. 389 | 390 | *: 391 | Chapter 1.4.1c - Agency 392 | 393 | Planned agency for ACTOR during PROLOGUE: 394 | Unless ACTOR can see player: 395 | Let the way be the best route from the location of ACTOR to location of player, using doors; 396 | If the way is a direction: 397 | Try ACTOR going the way; 398 | 399 | Planned agency for ACTOR during PROLOGUE: 400 | Let the way be the best route from the location of ACTOR to DESTINATION, using doors; 401 | If the way is a direction: 402 | Try ACTOR going the way; 403 | 404 | Erotic actions can be similarly tied to a scene, to control that they don't happen at inopportune times. 405 | Consent rules will default to deny consent if nothing else is specified. 406 | Note the seperate consent rule for the actor doing something; if consensual persuasion is enabled this will allow the actor to perform any action that is governed by consent (i.e. any erotic action or dealing with garments). 407 | To let the player instruct the actor to do other actions you need to use the persuasion rules. 408 | 409 | Also included are after rules for all the default body parts, taking into account the default limiting factors described in chapter 2.1 of Erotic Storytelling documentation. 410 | Note how the fucking actions needs to account for both the actor performing the action as well as the orifice and penetrator; breasts must be made orificial to enable titfucking. 411 | Custom refusal messages for the actions are best handled by using instead rules. 412 | 413 | *: 414 | Chapter 1.4.1d - Consent 415 | 416 | Consent for doing something to ACTOR during PROLOGUE: If CONDITION, give consent; Make no decision. 417 | Consent for doing something to a body part enclosed by ACTOR during PROLOGUE: If CONDITION, give consent; Make no decision. 418 | Consent for doing something to a garment enclosed by ACTOR during PROLOGUE: If CONDITION, give consent; Make no decision. 419 | 420 | Consent for ACTOR doing something during PROLOGUE: If CONDITION, give consent; Make no decision. 421 | 422 | Chapter 1.4.1d - Erotica 423 | 424 | After kissing ACTOR during PROLOGUE, say "RESPONSE." 425 | After hugging ACTOR during PROLOGUE, say "RESPONSE." 426 | After dancing ACTOR during PROLOGUE, say "RESPONSE." 427 | 428 | After touching ACTOR's feet during PROLOGUE, say "RESPONSE." 429 | After rubbing ACTOR's feet during PROLOGUE, say "RESPONSE." 430 | After tickling ACTOR's feet during PROLOGUE, say "RESPONSE." 431 | After licking ACTOR's feet during PROLOGUE, say "RESPONSE." 432 | After biting ACTOR's feet during PROLOGUE, say "RESPONSE." 433 | 434 | After touching ACTOR's legs during PROLOGUE, say "RESPONSE." 435 | After rubbing ACTOR's legs during PROLOGUE, say "RESPONSE." 436 | 437 | After touching ACTOR's hands during PROLOGUE, say "RESPONSE." 438 | After rubbing ACTOR's hands during PROLOGUE, say "RESPONSE." 439 | 440 | After touching ACTOR's ass during PROLOGUE, say "RESPONSE." 441 | After rubbing ACTOR's ass during PROLOGUE, say "RESPONSE." 442 | After spanking ACTOR's ass during PROLOGUE, say "RESPONSE." 443 | After pinching ACTOR's ass during PROLOGUE, say "RESPONSE." 444 | After licking ACTOR's ass during PROLOGUE, say "RESPONSE." 445 | 446 | After touching ACTOR's breasts during PROLOGUE, say "RESPONSE." 447 | After rubbing ACTOR's breasts during PROLOGUE, say "RESPONSE." 448 | After tickling ACTOR's breasts during PROLOGUE, say "RESPONSE." 449 | After licking ACTOR's breasts during PROLOGUE, say "RESPONSE." 450 | After biting ACTOR's breasts during PROLOGUE, say "RESPONSE." 451 | After pinching ACTOR's breasts during PROLOGUE, say "RESPONSE." 452 | 453 | After touching ACTOR's vagina during PROLOGUE, say "RESPONSE." 454 | After rubbing ACTOR's vagina during PROLOGUE, say "RESPONSE." 455 | After touching ACTOR's vagina during PROLOGUE, say "RESPONSE." 456 | 457 | After touching ACTOR's chest during PROLOGUE, say "RESPONSE." 458 | After rubbing ACTOR's chest during PROLOGUE, say "RESPONSE." 459 | After tickling ACTOR's chest during PROLOGUE, say "RESPONSE." 460 | After licking ACTOR's chest during PROLOGUE, say "RESPONSE." 461 | After biting ACTOR's chest during PROLOGUE, say "RESPONSE." 462 | 463 | After touching ACTOR's penis during PROLOGUE, say "RESPONSE." 464 | After rubbing ACTOR's penis during PROLOGUE, say "RESPONSE." 465 | After pinching ACTOR's penis during PROLOGUE, say "RESPONSE." 466 | After licking ACTOR's penis during PROLOGUE, say "RESPONSE." 467 | After biting ACTOR's penis during PROLOGUE, say "RESPONSE." 468 | 469 | After fucking ACTOR's ass with SOMETHING during PROLOGUE: say "RESPONSE." 470 | After fucking ACTOR's vagina with SOMETHING during PROLOGUE, say "RESPONSE." 471 | After fucking SOMETHING with ACTOR's penis during PROLOGUE, say "RESPONSE." 472 | -------------------------------------------------------------------------------- /Posturing.i7x: -------------------------------------------------------------------------------- 1 | Version 2/170401 of Posturing by Fictitious Frode begins here. 2 | 3 | Volume 0 - New Verbs 4 | 5 | [These are the new verbs the extension uses; We put this in it's own volume in case anyone needs to rewrite it for compatibility:] 6 | 7 | To stand is a verb. 8 | To sit is a verb. 9 | To kneel is a verb. 10 | To bend is a verb. 11 | To lie is a verb. 12 | To drop is a verb. 13 | To turn is a verb. 14 | 15 | Volume 1 - Posturing 16 | 17 | Book 1.1 - Concepts 18 | 19 | Part 1.1.1 - Postures 20 | 21 | Chapter 1.1.1a - Kind of Value 22 | 23 | A posture is a kind of value. The postures are defined by the Table of Postures. 24 | The specification of posture is "A posture is the position or bearing of a person. It can as an example be used to distinguish between sitting, standing or lying down." 25 | 26 | Table of Postures 27 | Posture describe posture (text) assume posture (text) 28 | standing "standing" "[stand] up" 29 | sitting "sitting" "[sit] down" 30 | kneeling "kneeling" "[kneel]" 31 | bending "bending" "[bend]" 32 | prone "laying prone" "[lie] prone" 33 | supine "supine" "[lie] supine" 34 | 35 | To say describe posture of (P - a posture): 36 | Repeat with N running from 1 to the number of rows in the Table of Postures: 37 | Choose row N in the Table of Postures; 38 | If P is the Posture entry, say the describe posture entry; 39 | 40 | To say assume posture of (P - a posture): 41 | Repeat with N running from 1 to the number of rows in the Table of Postures: 42 | Choose row N in the Table of Postures; 43 | If P is the Posture entry, say the assume posture entry; 44 | 45 | Chapter 1.1.1b - Property Integrations 46 | 47 | A person has a posture called the current posture. 48 | A supporter has a list of postures called compatible postures. The compatible postures of a supporter is usually {standing}. 49 | A container has a list of postures called compatible postures. The compatible postures of a container is usually {standing}. 50 | A supporter has a number called the occupant limit. The occupant limit of a supporter is usually 1. 51 | A container has a number called the occupant limit. The occupant limit of a container is usually 1. 52 | 53 | Chapter 1.1.1c - Checking for Posture 54 | 55 | [Checks if a given individual is in a given posture] 56 | To decide whether (individual - a person) is posing (position - a posture): 57 | If the current posture of the individual is the position, decide yes; 58 | Else decide No; 59 | 60 | [Checks if a given individual is in a given posture for a given location] 61 | To decide whether (individual - a person) is posing (position - a posture) on (location - an object): 62 | If the current posture of the individual is the position and the individual is enclosed by the location, decide yes; 63 | Else decide no; 64 | 65 | [Checks if *any* person is in a given posture for a given location] 66 | To decide whether someone is posing (position - a posture) on (location - an object): 67 | If the location is enterable: 68 | Repeat with individual running through the list of persons enclosed by the location: 69 | If the current posture of the individual is the position, decide yes; 70 | Decide no; 71 | 72 | [Determines if a location allows a posture] 73 | To decide whether (location - an object) allows (position - a posture) posture: 74 | If location provides the property compatible postures: 75 | If position is listed in the compatible postures of location, decide yes; 76 | Decide no; 77 | 78 | [Negation:] 79 | To decide whether (location - an object) blocks (position - a posture) posture: 80 | If location provides the property compatible postures: 81 | If position is listed in the compatible postures of location, decide no; 82 | Decide yes; 83 | 84 | [Determines if a location is filled to it's occupant limit] 85 | To decide whether (location - an object) has vacancy: 86 | If location provides the property occupant limit: 87 | If the number of people enclosed by location is not less than the occupant limit of location, decide no; 88 | Decide yes; 89 | 90 | Book 1.2 - New Actions 91 | 92 | [As most of the logic for assuming a posture is shared between the postures, we use the posturing action to apply the logic and actions for each posture to redirect.] 93 | 94 | Part 1.2.1 - Posturing 95 | 96 | [Status: Complete 97 | This actions is responsible for changing the posture of an actor. This includes checking that it's actually a change, and that the location of the actor can support the posture.] 98 | 99 | Posturing is an action applying to one posture. 100 | The specification of the posturing action is "Posturing is the action that alters the posture of an actor. It ensures that the location of the actor can support the new posture, and that the new posture is a change from the current. There are several other actions that redirect to this one." 101 | 102 | Chapter 1.2.1a - Check 103 | 104 | Check an actor posturing (this is the changing posture rule): 105 | Let P be the posture understood; 106 | If the current posture of the actor is P: 107 | If the actor is the player: 108 | Say "[We] [are] already [describe posture of P]." (A); 109 | Else if the player can see the actor and the action is not silent: 110 | Say "[The actor] [are] already [describe posture of P]." (B); 111 | Stop the action; 112 | 113 | Check an actor posturing (this is the verify posture rule): 114 | Let P be the posture understood; 115 | If the holder of the actor is not a room: 116 | If the holder of the actor allows P posture, continue the action; 117 | If the holder of the actor is a container: 118 | If the actor is the player: 119 | Say "[We] [can't] [assume posture of P] in [the holder of the actor]." (A); 120 | Else if the player can see the actor and the action is not silent: 121 | Say "[The actor] [can't] [assume posture of P] in [the holder of the actor]." (B); 122 | Else: 123 | If the actor is the player: 124 | Say "[We] [can't] [assume posture of P] on [the holder of the actor]." (C); 125 | Else if the player can see the actor and the action is not silent: 126 | Say "[The actor] [can't] [assume posture of P] on [the holder of the actor]." (D); 127 | Stop the action; 128 | 129 | Chapter 1.2.1b - Carry Out 130 | 131 | Carry out an actor posturing (this is the assume posture rule): 132 | Now the current posture of the actor is the posture understood; 133 | 134 | Chapter 1.2.1c - Report 135 | 136 | Report an actor posturing (this is the report posturing rule): 137 | Let P be the current posture of the actor; 138 | If the holder of the actor is a room: 139 | If the actor is the player: 140 | Say "[We] [assume posture of P]." (A); 141 | Else if the player can see the actor and the action is not silent: 142 | Say "[The actor] [assume posture of P]." (B); 143 | Else if the holder of the actor is a container: 144 | If the actor is the player: 145 | Say "[We] [assume posture of P] in [the holder of the actor]." (C); 146 | Else if the player can see the actor and the action is not silent: 147 | Say "[The actor] [assume posture of P] in [the holder of the actor]." (D); 148 | Else: 149 | If the actor is the player: 150 | Say "[We] [assume posture of P] on [the holder of the actor]." (E); 151 | Else if the player can see the actor and the action is not silent: 152 | Say "[The actor] [assume posture of P] on [the holder of the actor]." (F); 153 | 154 | Part 1.2.2 - Stand In/On 155 | 156 | [Status: Complete 157 | We need two actions: one for changing to the posture and one for assuming the posture on/in something. 158 | Standing can also serve as a redirect to exiting/getting off.] 159 | 160 | Standing is an action applying to nothing. 161 | Standing on is an action applying to one thing. 162 | 163 | Chapter 1.2.2a - Understanding 164 | 165 | Understand the command "stand" as something new. 166 | Understand "stand" as standing. 167 | Understand "stand on [a supporter]" as standing on. 168 | Understand "stand in [a container]" as standing on. 169 | Understand "stand on/in/-- [something]" as standing on. 170 | 171 | Chapter 1.2.2b - Carry Out 172 | 173 | [Redirect to assuming the standing posture] 174 | Carry out an actor standing (this is the implicit standing redirect rule): 175 | If the holder of the actor is a supporter (called location) and location blocks standing posture: 176 | Say "(getting off [the location])[command clarification break]"; 177 | Try the actor getting off location instead; 178 | If the holder of the actor is a container (called location) and location blocks standing posture: 179 | Say "(exiting [the location])[command clarification break]"; 180 | Try the actor exiting instead; 181 | Try the actor posturing standing; 182 | 183 | [Try to enter the noun, then redirect to assume the standing posture] 184 | Carry out an actor standing on (this is the explicit standing redirect rule): 185 | If the holder of the actor is not the noun, silently try the actor entering the noun; 186 | If the holder of the actor is the noun: 187 | Unless the current posture of the actor is standing, try the actor posturing standing; 188 | Else follow the report posturing rules; 189 | 190 | Part 1.2.3 - Sit In/On/At 191 | 192 | [Status: Complete 193 | We need two actions: one for changing to the posture and one for assuming the posture on/in something.] 194 | 195 | Sitting is an action applying to nothing. 196 | Sitting on is an action applying to one thing. 197 | 198 | Chapter 1.2.3a - Understanding 199 | 200 | Understand the command "sit" as something new. 201 | Understand "sit" as sitting. 202 | Understand "sit on [a supporter]" as sitting on. 203 | Understand "sit in [a container]" as sitting on. 204 | Understand "sit on/in/at/-- [something]" as sitting on. 205 | 206 | Chapter 1.2.3b - Carry Out 207 | 208 | [Redirect to assuming the sitting posture] 209 | Carry out an actor sitting (this is the implicit sitting redirect rule): 210 | Try the actor posturing sitting; 211 | 212 | [Try to enter the noun, then redirect to assume the sitting posture] 213 | Carry out an actor sitting on (this is the explicit sitting redirect rule): 214 | If the holder of the actor is not the noun, silently try the actor entering the noun; 215 | If the holder of the actor is the noun: 216 | Unless the current posture of the actor is sitting, try the actor posturing sitting; 217 | Else follow the report posturing rules; 218 | 219 | Part 1.2.4 - Kneel Over/On/In 220 | 221 | [Status: Complete 222 | We need two actions: one for changing to the posture and one for assuming the posture on/in something.] 223 | 224 | Kneeling is an action applying to nothing. 225 | Kneeling on is an action applying to one thing. 226 | 227 | Chapter 1.2.4a - Understanding 228 | 229 | Understand "kneel" as kneeling. 230 | Understand "kneel on/over [a supporter]" as kneeling on. 231 | Understand "kneel in [a container]" as kneeling on. 232 | Understand "kneel on/in/over/-- [something]" as kneeling on. 233 | 234 | Chapter 1.2.4b - Carry Out 235 | 236 | [Redirect to assuming the kneeling posture] 237 | Carry out an actor kneeling (this is the implicit kneeling redirect rule): 238 | Try the actor posturing kneeling; 239 | 240 | [Try to enter the noun, then redirect to assume the kneeling posture] 241 | Carry out an actor kneeling on (this is the explicit kneeling redirect rule): 242 | If the holder of the actor is not the noun, silently try the actor entering the noun; 243 | If the holder of the actor is the noun: 244 | Unless the current posture of the actor is kneeling, try the actor posturing kneeling; 245 | Else follow the report posturing rules; 246 | 247 | Part 1.2.5 - Bend Over/On/In 248 | 249 | [Status: Complete 250 | We need two actions: one for changing to the posture and one for assuming the posture on/in something.] 251 | 252 | Bending is an action applying to nothing. 253 | Bending on is an action applying to one thing. 254 | 255 | Chapter 1.2.5a - Understanding 256 | 257 | Understand "bend" as bending. 258 | Understand "bend on/over [a supporter]" as bending on. 259 | Understand "bend in [a container]" as bending on. 260 | Understand "bend on/in/over/-- [something]" as bending on. 261 | 262 | Chapter 1.2.5b - Carry Out 263 | 264 | [Redirect to assuming the bending posture] 265 | Carry out an actor bending (this is the implicit bending redirect rule): 266 | Try the actor posturing bending; 267 | 268 | [Try to enter the noun, then redirect to assume the bending posture] 269 | Carry out an actor bending on (this is the explicit bending redirect rule): 270 | If the holder of the actor is not the noun, silently try the actor entering the noun; 271 | If the holder of the actor is the noun: 272 | Unless the current posture of the actor is bending, try the actor posturing bending; 273 | Else follow the report posturing rules; 274 | 275 | Part 1.2.6 - Lie Down On/In (Supine) 276 | 277 | [Status: Complete 278 | We need two actions: one for changing to the posture and one for assuming the posture on/in something.] 279 | 280 | Lying down is an action applying to nothing. 281 | Lying down on is an action applying to one thing. 282 | 283 | Chapter 1.2.6a - Understanding 284 | 285 | Understand the command "lie" as something new. 286 | Understand "lie down/--" as lying down. 287 | Understand "lay down/--" as lying down. 288 | Understand "lie down/-- on [a supporter]" as lying down on. 289 | Understand "lay down/-- on [a supporter]" as lying down on. 290 | Understand "lie down/-- in [a container]" as lying down on. 291 | Understand "lay down/-- in [a container]" as lying down on. 292 | Understand "lie down/-- on/in/-- [something]" as lying down on. 293 | Understand "lay down/-- on/in/-- [something]" as lying down on. 294 | 295 | Chapter 1.2.6b - Carry Out 296 | 297 | [Redirect to assuming the supine posture] 298 | Carry out an actor lying down (this is the implicit lying down redirect rule): 299 | Try the actor posturing supine; 300 | 301 | [Try to enter the noun, then redirect to assume the supine posture] 302 | Carry out an actor lying down on (this is the explicit lying down redirect rule): 303 | If the holder of the actor is not the noun, silently try the actor entering the noun; 304 | If the holder of the actor is the noun: 305 | Unless the current posture of the actor is supine, try the actor posturing supine; 306 | Else follow the report posturing rules; 307 | 308 | Part 1.2.7 - Drop Down On/In (Prone) 309 | 310 | [Status: Complete 311 | We need two actions: one for changing to the posture and one for assuming the posture on/in something.] 312 | 313 | Dropping down is an action applying to nothing. 314 | Dropping down on is an action applying to one thing. 315 | 316 | Chapter 1.2.7a - Understanding 317 | 318 | Understand "drop down" as dropping down. 319 | Understand "drop down on [a supporter]" as dropping down on. 320 | Understand "drop down in [a container]" as dropping down on. 321 | Understand "drop down on/in/-- [something]" as dropping down on. 322 | 323 | Chapter 1.2.7b - Carry Out 324 | 325 | [Redirect to assuming the prone posture] 326 | Carry out an actor dropping down (this is the implicit dropping down redirect rule): 327 | Try the actor posturing prone; 328 | 329 | [Try to enter the noun, then redirect to assume the prone posture] 330 | Carry out an actor dropping down on (this is the explicit dropping down redirect rule): 331 | If the holder of the actor is not the noun, silently try the actor entering the noun; 332 | If the holder of the actor is the noun: 333 | Unless the current posture of the actor is prone, try the actor posturing prone; 334 | Else follow the report posturing rules; 335 | 336 | Part 1.2.8 - Turn Around 337 | 338 | [Status: Complete 339 | Turning around tries to change between the two lying down postures.] 340 | 341 | Turning around is an action applying to nothing. 342 | 343 | Chapter 1.2.8a - Understanding 344 | 345 | Understand "turn around/--" as turning around. 346 | 347 | Chapter 1.2.8b - Check 348 | 349 | [Ensure that the actor is actually lying down] 350 | Check an actor turning around (this is the must lie down to turn around rule): 351 | Unless the current posture of the actor is supine or the current posture of the actor is prone: 352 | If the actor is the player: 353 | Say "[We] [have] to be lying down to turn around." (A); 354 | Else if the player can see the actor and the action is not silent: 355 | Say "[The actor] [have] to be lying down to turn around." (B); 356 | Stop the action; 357 | 358 | Chapter 1.2.8c - Carry Out 359 | 360 | [Redirect to assuming the prone or supine posture] 361 | Carry out an actor turning around (this is the turning around redirect rule): 362 | If the current posture of the actor is supine, silently try the actor posturing prone; 363 | Else silently try the actor posturing supine; 364 | 365 | Chapter 1.2.8c - Report 366 | 367 | Report an actor turning around (this is the report turning around rule): 368 | Let P be the current posture of the actor; 369 | If the holder of the actor is a room: 370 | If the actor is the player: 371 | Say "[We] [turn] around and are now [assume posture of P]." (A); 372 | Else if the player can see the actor and the action is not silent: 373 | Say "[The actor] [turn] around and are now [assume posture of P]." (B); 374 | Else if the holder of the actor is a container: 375 | If the actor is the player: 376 | Say "[We] [turn] around and are now [assume posture of P] in [the holder of the actor]." (C); 377 | Else if the player can see the actor and the action is not silent: 378 | Say "[The actor] [turn] around and are now [assume posture of P] in [the holder of the actor]." (D); 379 | Else: 380 | If the actor is the player: 381 | Say "[We] [turn] around and are now [assume posture of P] on [the holder of the actor]." (E); 382 | Else if the player can see the actor and the action is not silent: 383 | Say "[The actor] [turn] around and are now [assume posture of P] on [the holder of the actor]." (F); 384 | 385 | Book 1.3 - Action Integration 386 | 387 | Part 1.3.1 - Default Postures 388 | 389 | [Status: Complete 390 | After entering/exiting something, make the actor conform to the default posture of the new location if needed.] 391 | 392 | Carry out an actor exiting (this is the default posture rule): 393 | Let location be the holder of the actor; 394 | Let P be standing; 395 | If location provides the property compatible postures: 396 | If the compatible postures of location is not empty, let P be entry 1 of the compatible postures of the location; 397 | Now the current posture of the actor is P; 398 | 399 | The default posture rule is listed after the standard exiting rule in the carry out exiting rulebook. 400 | The default posture rule is listed after the standard getting off rule in the carry out getting off rulebook. 401 | The default posture rule is listed after the standard entering rule in the carry out entering rulebook. 402 | 403 | Part 1.3.2 - Occupancy Check 404 | 405 | [Status: Complete 406 | Before entering/exiting something, make sure there is room for the actor.] 407 | 408 | Check an actor entering (this is the entering occupancy control rule): 409 | Unless the noun has vacancy: 410 | If the actor is the player: 411 | Say "There [are] no room for [us] on [the noun]." (A); 412 | Else if the player can see the actor and the action is not silent: 413 | Say "There [regarding the actor][are] no room for [the actor] on [the noun]." (B); 414 | Stop the action; 415 | 416 | Check an actor exiting (this is the exiting occupancy control rule): 417 | Let the former exterior be the not-counting-parts holder of the container exited from; 418 | Unless the former exterior has vacancy: 419 | If the actor is the player: 420 | Say "There [are] no room for [us] on [the noun]." (A); 421 | Else if the player can see the actor and the action is not silent: 422 | Say "There [regarding the actor][are] no room for [the actor] on [the noun]." (B); 423 | Stop the action; 424 | 425 | Check an actor getting off (this is the getting off occupancy control rule): 426 | Let the former exterior be the not-counting-parts holder of the noun; 427 | Unless the former exterior has vacancy: 428 | If the actor is the player: 429 | Say "There [are] no room for [us] on [the noun]." (A); 430 | Else if the player can see the actor and the action is not silent: 431 | Say "There [regarding the actor][are] no room for [the actor] on [the noun]." (B); 432 | Stop the action; 433 | 434 | Part 1.3.3 - Travelling Posture 435 | 436 | [Status: Complete 437 | Before going somewhere, make sure the actor is standing. 438 | TODO: This could be expanded to allow movement in other postures.] 439 | 440 | The control traveling posture rule is listed after the stand up before going rule in the check going rulebook. 441 | Check an actor going somewhere (this is the control traveling posture rule): 442 | Unless the current posture of the actor is standing: 443 | If the actor is the player: 444 | Say "(first standing up)[command clarification break]" (A); 445 | Else if the player can see the actor and the action is not silent: 446 | Say "([the actor] first standing up)[command clarification break]" (B); 447 | Silently try the actor posturing standing; 448 | If the current posture of the actor is not standing, stop the action. 449 | 450 | Part 1.3.4 - Describing Postures 451 | 452 | [TODO 453 | Rule for writing a paragraph about someone (called target): 454 | say "[The target] is [describe posture of current posture of target] here." 455 | 456 | Rule for writing a paragraph about someone (called target) on a supporter (called location): 457 | Say "[The target] is [describe posture of current posture of target] on [the location]." 458 | 459 | Rule for writing a paragraph about someone (called target) in a container (called location): 460 | say "[The target] is [describe posture of current posture of target] in [the location]." 461 | 462 | 463 | Rule for writing a paragraph about someone (called target): 464 | say "[The target] is [posture] [if the holder of the target is the location]nearby[otherwise][in-on the holder of the target][end if]." 465 | 466 | Rule for writing a paragraph about something which encloses an unmentioned person (called target): 467 | carry out the writing a paragraph about activity with the target instead. 468 | ] 469 | 470 | Book 1.4 - Templates 471 | 472 | Part 1.4.1 - Furniture Catalog 473 | 474 | Chapter 1.4.1a - Chair 475 | 476 | A chair is a kind of supporter. A chair is usually enterable. 477 | The occupant limit of a chair is usually 1. The compatible postures of a chair is usually {sitting, bending}. 478 | The specification of a chair is "Chairs are made for sitting on, but also support bending (over). It usually has room for one person." 479 | 480 | Chapter 1.4.1b - Table 481 | 482 | A table is a kind of supporter. A table is usually enterable. 483 | The occupant limit of a table is usually 2. The compatible postures of a table is usually {supine, prone, sitting, bending}. 484 | The specification of a table is "Tables are made for laying (supine) on, but also support laying prone, sitting on and bending over. It usually has room for two persons." 485 | 486 | Chapter 1.4.1c - Desk 487 | 488 | A desk is a kind of supporter. A desk is usually enterable. 489 | The occupant limit of a desk is usually 1. The compatible postures of a desk is usually {sitting, bending, supine, prone}. 490 | The specification of a desk is "Desks are made for sitting on/at, but also support laying prone/supine and bending over. It usually has room for one person." 491 | 492 | Chapter 1.4.1d - Sofa 493 | 494 | A sofa is a kind of supporter. A sofa is usually enterable. 495 | The occupant limit of a sofa is usually 3. The compatible postures of a sofa is usually {sitting, bending, supine, prone}. 496 | The specification of a sofa is "Sofas are made for sittin on, but also support laying prone/supine and bending over. It usually has room for three persons." 497 | Understand "couch" as sofa. 498 | 499 | Chapter 1.4.1e - Bed 500 | 501 | A bed is a kind of supporter. A bed is usually enterable. 502 | The occupant limit of a bed is usually 3. The compatible postures of a bed is usually {supine, prone, sitting, kneeling}. 503 | The specification of a bed is "Beds are made for laying (supine) on, but also support laying prone, sitting and kneeling on. It usually has room for three persons." 504 | 505 | Chapter 1.4.1f - Cabinet 506 | 507 | A cabinet is a kind of container. A cabinet is usually enterable. A cabinet is usually openable. 508 | The occupant limit of a cabinet is usually 2. The compatible postures of a cabinet is usually {standing, sitting, kneeling}. 509 | The specification of a cabinet is "Cabinets are usually large enough for two people to stand in, but also support sitting and kneeling." 510 | 511 | Posturing ends here. 512 | 513 | ---- DOCUMENTATION ---- 514 | 515 | Chapter 1 - Using this Extension 516 | 517 | To use this extension, you need to download and install it (which you probably have if you're reading this) and include it in your story: 518 | 519 | *: 520 | Include Posturing by Fictitious Frode. 521 | 522 | By including this extension you will allow the player (and other actors) to assume postures. 523 | The included postures are 'standing' (default), 'sitting', 'bending', 'kneeling, 'prone' (laying face-down) and 'supine' (laying face-up). 524 | Also included are the relevant actions to change into these postures, as well as 'turning around' to change between the two laying down postures. 525 | It's also possible for actors to posture on and in certain things. 526 | While the first version of this extension used a special kind of supporter to represent this furniture, this version allows posturing on anything that is enterable and has the 'compatible postures' property. 527 | 528 | Section 1.1 - Documentation Overview 529 | 530 | The documentation will cover the following subjects: 531 | 532 | Chapter 1: A short overview of the extension. 533 | Chapter 2: Techniques and guidelines on how to use postures. 534 | Chapter 3: A technical reference for everything added or changed with this extension. 535 | 536 | The following examples are included: 537 | 538 | A: Garden Lounge - 539 | B: Customization: Crawling - How to create new postures 540 | 541 | Section 1.2 - Version History 542 | 543 | 2015-01-26: AIF Framework Extension (Release 1) 544 | 545 | Inflexible posture model based on furniture 546 | 547 | 2017-04-01: Beta-2 (Release 2) 548 | 549 | Complete re-coding, keeping the same postures but using centralized control with posture-specific redirects. 550 | Moved from kind-based furniture to property-based checks for greater flexibility. 551 | 552 | Section 1.3 - Contact Info 553 | 554 | The author of this extension can be reached in the following ways: 555 | 556 | Mail: fictitious.frode@gmail.com 557 | Blog: https://informedaif.wordpress.com/ is a blog dedicated to writing AIF with Inform 7, and is the official host of the extension. It contains both dicussions around AIF and tutorials on both Inform in general and this extension in particular. 558 | Reddit: https://www.reddit.com/r/AIFCentral/ is the subreddit for the AIF community, and the author checks this regularly. 559 | GitHub: https://github.com/FictitiousFrode/AIF Contains the latest version of the extension, possibly including functionality that hasn't been released yet. 560 | 561 | Feedback of all varieties is welcome, but constructive criticism and discussion is the most appreciated, along with reports of bugs and other issues. 562 | For support I would appreciate using public communication, so that other may learn from the request as well. 563 | 564 | Section 1.4 - Acknowledgments 565 | 566 | This extension probably wouldn't have been remade if it wasn't for Mister Flibble's Photoshoot which showed the power of properly implemented postures. 567 | The deck chair from the examples is based on his creation. 568 | 569 | Example 394 - Slouching provided much of the inspiration for this implementation. 570 | The relation-based approch is replaced with lists, and everything is implemented in a more robust and customizable fashion. 571 | 572 | Chapter 2 - Posturing 573 | 574 | Postures provide an option for further depth in how actors are placed in the world model. 575 | This brings both new opportunity for immersion, but also requires the author to consider more options. 576 | This chapter will cover how postures can be used in a story, and how to create your own custom postures and furniture. 577 | 578 | Section 2.1 - Postures and Actions 579 | 580 | The extension comes with the most common postures defined, including actions for changing to these postures. 581 | Changes to a persons posture is generally performed by the posturing action, except for some cases related to entering and exiting locations. 582 | The following is a list of the postures made available by this extension, and the commands the player can use to reach them: 583 | 584 | Standing: stand (on/in something) 585 | Sitting: sit (on/in/at something) 586 | Kneeling: kneel (on/in/over something) 587 | Bending: bend (on/in/over something) 588 | Supine: lie/lay (down) (on/in something), or turn (around) when already prone. 589 | Prone: drop down (on/in something), or turn (around) when already supine. 590 | 591 | Postures aren't limited to just being in a room however. 592 | Through Inform's standard rules supporters and containers can be entered, and now also has a property stating which postures are supported on them. 593 | By using the compatible postures (a list of postures), any enterable object in Inform's world model can now control which postures they allow. 594 | The first entry in the list is assumed to be the preferred posture, which is taken when a person enters without a valid posture. 595 | In order to control how many people there is room for, the property occupant limit is also available. 596 | For convenience, the following ready-to-use furniture templates are provided: 597 | 598 | Chair (supporter): sitting and bending for 1 person 599 | Table (supporter): supine, prone, sitting and bending for 2 persons 600 | Desk (supporter): sitting, bending, supine and prone for 1 person 601 | Sofa (supporter): sitting, bending, supine and prone for 3 persons 602 | Bed (supporter): supine, prone, sitting and kneeling for 3 persons 603 | Cabinet (openable container): standing, sitting and kneeling for 2 persons 604 | 605 | Section 2.2 - Integrating Postures 606 | 607 | For postures to have full effect it's important they are integrated with the other actions that are relevant for the story. 608 | This can be as simple as descriptions taking the posture into account, or more comprehensive where certain postures prevent actions from taking place. 609 | An example of the latter is something that is out of reach unless the player is standing on something. 610 | 611 | While most of this integration is left up to the author to decide on, some of the standard actions are integrated: 612 | 613 | Entering: The entering occupancy control rule ensures that the occupancy limit is observed, and the default posture rule makes an actor conform to the default posture of what is entered. 614 | Exiting: The exiting occupancy control rule ensures that the occupancy limit is observed, and the default posture rule makes an actor conform to the default posture of what is exited. 615 | Getting off: The getting off occupancy control rule ensures that the occupancy limit is observed, and the default posture rule makes an actor conform to the default posture of what is exited. 616 | Going: The control traveling posture rule ensures that an actor can only go somewhere while standing. 617 | 618 | Section 2.3 - Customization 619 | 620 | Creating custom furniture to pose on is very simple, especially when it's to function like a supporter or container. 621 | Example A shows how to create a deck chair as a custom furniture, which is as easy setting the compatible postures and occupant limit properties to what is desired. 622 | In order to create new furniture that is not a supporter or container, your new piece will have to provide the compatible postures or occupant limit properties depending on what functionality you want to enable. 623 | 624 | Adding support for new postures can be achieved in a similar fashion. 625 | The postures are defined by the Table of Postures, which features the columns posture, describe posture (text) and assume posture (text). 626 | Adding a new posture is as easy as extending this table with a new row, giving a name to the posture as well as some text describing how the postures looks and is assumed. 627 | In order for players to make use of the new posture we also need some actions that redirect to the posturing action, and you might have to alter some furniture to accomodate the new posture. 628 | Example B shows how to create a crawling posture. 629 | 630 | Chapter 3 - Technical Reference 631 | 632 | Contained in this chapter is a technical description of all the new and altered mechanics for the extension, divided by type. 633 | It's intended as a companion to the other chapters, although an experienced author could glean much of the previous information from this chapter alone. 634 | 635 | Section 3.1 - New Kind of Value: Posture 636 | 637 | The postures are defined in the Table of Postures, which is reproduced below. 638 | The text values describe posture and assume posture are used to describe the value of the posture, the first for when a person is in the posture and the other for when a person assumes the posture. 639 | Postures are used for people, as the current posture, and for containers and supporters as a list called compatible postures. 640 | For changing the posture of a person in a controlled manner, the posturing action should be used. 641 | 642 | Table of Postures 643 | Posture describe posture (text) assume posture (text) 644 | standing "standing" "[stand] up" 645 | sitting "sitting" "[sit] down" 646 | kneeling "kneeling" "[kneel]" 647 | bending "bending" "[bend]" 648 | prone "laying prone" "[lie] prone" 649 | supine "supine" "[lie] supine" 650 | 651 | Section 3.2 - Phrases 652 | 653 | The following phrases can be used to describe a posture in a text substitution: 654 | 655 | say DESCRIBE POSTURE OF (posture): Uses the describe posture entry in the Table of Postures to describe someone in the posture. 656 | say ASSUME POSTURE OF (posture): Uses the assume posture entry in the Table of Postures to describe someone assuming the posture. 657 | 658 | The following phrases can be used to check for postures: 659 | 660 | whether (person) IS POSING (posture): Checks if the current posture of the person is the specified posture. 661 | whether (person) IS POSING (posture) ON (object): Checks if the current posture of the person is the specified posture and that the person is enclosed by the given object. 662 | whether SOMEONE IS POSING (posture) ON (object): Checks each person enclosed by the object to see if any of them are in the given posture. 663 | whether (object) ALLOWS (posture) POSTURE: Checks if the compatible postures of the given object contains the specified posture. If the compatible postures property isn't available, it's assumed to be allowed. 664 | whether (object) BLOCKS (posture) POSTURE: Checks if the compatible postures of the given object does not contain the specified posture. If the compatible postures property isn't available, it's assumed to not be blocked. 665 | whether (object) HAS VACANCY: Checks if the number of people enclosed by the object is less than the occupant limit. If the object doesn't provide the occupant limit, it's assumed to have vacancy. 666 | 667 | Example: * Garden Lounge - Relaxing in various postures 668 | 669 | Getting started with postures is as easy as using the furniture templates. 670 | 671 | *: "Garden Lounge" 672 | 673 | Include Posturing by Fictitious Frode. 674 | Garden Patio is a room. 675 | 676 | A hammock is a bed in Garden Patio. 677 | A stone bench is a sofa in Garden Patio. 678 | 679 | We can also easily create new furniture according to our own needs. 680 | 681 | A deck chair is an enterable supporter in Garden Patio. The compatible postures are {supine, prone, sitting}. 682 | 683 | These will work for both the player and other actors. 684 | 685 | Clarice is a woman in Garden Patio. 686 | A persuasion rule: persuasion succeeds. 687 | 688 | Test me with "sit on bench / clarice, sit on bench / stand / lie on chair / clarice, enter chair / look" 689 | 690 | Example: ** Crawling - Creating new postures 691 | 692 | Adding a new posture is rather simple, but we must also remember to add new actions for the actors to use. 693 | 694 | *: "Crawling" 695 | 696 | Include Posturing by Fictitious Frode. 697 | 698 | First we expand the Table of Postures to create the crawling posture. 699 | 700 | To crawl is a verb. 701 | 702 | Table of Postures (continued) 703 | Posture describe posture (text) assume posture (text) 704 | crawling "crawling" "[crawl] on all four" 705 | 706 | We can then create two new actions, one to crawl and one to crawl on and in something. 707 | 708 | Crawling is an action applying to nothing. 709 | Understand "crawl" as crawling. 710 | Carry out an actor crawling: try the actor posturing crawling. 711 | 712 | Crawling on is an action applying to one thing. 713 | Understand "crawl on/over [a supporter]" as crawling on. 714 | Understand "crawl in [a container]" as crawling on. 715 | Understand "crawl on/in/over/-- [something]" as crawling on. 716 | 717 | Carry out an actor crawling on: 718 | If the holder of the actor is not the noun, silently try the actor entering the noun; 719 | If the holder of the actor is the noun: 720 | Unless the current posture of the actor is crawling, try the actor posturing crawling; 721 | Else follow the report posturing rules; 722 | 723 | We can now create containers and supporters that work with crawling. 724 | 725 | Garage is a room. 726 | A cardboard box is an enterable container in Garage. The compatible postures is {crawling}. 727 | 728 | Test me with "enter box / stand / crawl in box" 729 | --------------------------------------------------------------------------------