Overview
This screen is where you'll spend the bulk of your time in the editor, as well-written dialogue with a lot of variation is the key to a successful character.Before making dialogue, you need to be familiar with how the game decides what to display.
Each round of Poker consists of multiple phases of dialogue:
- Characters are dealt their hand and trade out cards. This is the Swapping Cards phase.
- Characters react to their hands. This is the Hand (Good, Okay, Bad, Any) phase.
- The character with the worst hand loses. This is the Must Strip phase.
- The loser starts to strip, or if they have lost all their clothing, starts to masturbate. This is the Stripping phase.
- The loser finishes stripping. This is the Stripped phase.
- Another round begins, repeating the same phases.
There are a few other phases that appear at certain points (ex. starting the game or reacting to someone climaxing), but the above is the main game loop.
Choosing Dialogue
For each phase, one line of dialogue is chosen to play for each character. Every line of dialogue has a corresponding image that is displayed with it.
To decide which dialogue line to use, for each character the game performs the following steps:
- It filters out only those cases that are applicable to the current game phase. A case is a group of dialogue lines corresponding to a particular phase.
- Of these cases, it then throws out any cases that do not apply to the character's current stage of undress. A single cases can apply to multiple stages.
- Of the remaining cases, it then looks at any conditions attached to those cases, and filters them out if their conditions don't apply. For instance, a case may have a condition to only play if 3 males are present.
- Finally, for any cases that still remain for selection, the case with the highest priority has a line chosen at random to play.
This is a tad oversimplified, but the full details are not important for most dialogue.
Dialogue Priority
Briefly mentioned above is the concept of case priority. All cases have an internal priority to determine which case will play if all conditions are satisfied and multiple cases remain. Priority works as follows:- If a case has conditions and those conditions are met, the case will always take priority over a case with no conditions.
- If multiple cases have conditions, they will be given specific priorities based on their conditions. For example, a case with a target and target stage will always take priority over a case with just a target. The editor will sort cases in the order of their priority, and display that priority in the list.
The case with the highest priority will then have a random line chosen. If multiple cases have the same priority, the lines from each of these cases will be combined into a single pool and a line will be chosen from that pool at random.
- A. Must Strip - Female
- B. Hand (Good)
- C. Hand (Good) when Fully Dressed
- D. Hand (Good) when hand = Two Pair, custom priority 0
- E. Hand (Good) when hand = Royal Flush
- F. Hand (Bad)
- G. Hand (Any)
The game is at the hand reaction phase. The character has lost a few times and is currently in their Lost Shirt stage. Their hand a Royal Flush. Dialogue is picked as follows:
- Cases not applicable to the current phase are thrown out, so case A is discarded.
- Additionally, the character has a Royal Flush, which is not a Bad Hand, so case F is discarded.
- The character is not Fully Dressed, so case C is discarded.
- The character does not have a Two Pair, so case D is discarded.
- Of the remaining lines, case E has the highest priority, so B and F are discarded.
- Case E is all that remains, so one of its lines will play.
Consider the same game state except the character now has a Two Pair instead of a Royal Flush
- Cases not applicable to the current phase are thrown out, so case A is discarded.
- Additionally, the character has a Royal Flush, which is not a Bad Hand, so case F is discarded.
- The character is not Fully Dressed, so case C is discarded.
- The character does not have a Royal Flush, so case E is discarded.
- Cases with no conditions (of those remaining: B and G) have a priority of 0. Case D has a condition so its priority would normally be over 0, but for this character a custom override of 0 was given to it.
- Cases B, D, and G therefore all have the same priority, so their lines will be pooled together and one chosen at random.
Legend
The Dialogue Tab of the Character Editor is divided into three main components. Refer to their sections for more details.
1. Dialogue Tree
The dialogue tree groups cases by either stage or by case type. This is the area where you can add, remove, or copy entire cases. When you select a case, the Case Editor will populated with that case's information.
- Add: Adds a new case of the same type as the currently selected case, and add it to the currently selected case's stage. Alternatively, clicking the dropdown arrow brings up a list of case types for which you can add the type of your choice.
- Add Recipe: The flask brings up a recipe selection, which creates a case with a predefined list of conditions to match a certain game state (eg. conditions to be able to react to the first character having to get naked).
- Copy Tools: Various options for copying or splitting a case among stages, including:
- Separate This Stage Into a New Case
Example: Using this option on a case in stage 3 that applies to stages 1-4 will create two cases with duplicate lines, one that applies to stage 3 and one that applies to stages 1,2, and 4.
Use case: The editor's placeholder lines by default apply to all stages. For a case like Stripping, dialogue will more than likely be unique between stages, so they shouldn't share the same case. This option will let split out the current stage instead of having to manually uncheck all the other stages.
- Separate This And Later Stages Into a New Case
Example: Using this option on a case in stage 3 that applies to stages 1-5 will create two cases with duplicate lines, one that that applies to stages 1-2 and one that applies to stages 3-5.
Use case: You initially have dialogue shared across all stages, but decide that after the character reaches their underwear, you want to use a new set of shared dialogue going forward.
- Split this Case Into Individual Stages
Example: Using this option on a case that appies to stages 1-5 will create 5 duplicate cases, one for stage 1, one for stage 2, etc. up to stage 5.
Use case: You have dialogue shared across all stages, but decide that each stage should really be unique.
Whenever you save, cases across stages that have duplicate dialogue will be combined, so if you don't edit each stage's case, the unmodified cases will be combined again. - Duplicate This Case
Example: This duplicates a case in its entirety: stages applied to, conditions, and dialogue
Use case: You have a case with 4 lines. You also want some targeted dialogue, but you want the 4 generic lines to also be used even when the target conditions are met. You can duplicate the generic case, add your conditions to the duplicate, and then add your fifth line to the original 4. Note that these lines will not be shared between the generic and targeted cases, so editing one will not update the other.
- Bulk Replace Tool
Example: This copies all generic cases of a particular type across all stages, and applies their dialogue to one or more other case types.
Use case: There are case types for both Must Strip (Male) and Must Strip (Player, Male), but you don't want to bother making separate dialogue for such similar cases. Instead of manually copying each case for Must Strip (Male) to Must Strip (Player, Male), you can fill out all cases for Must Strip (Male) and then use the Bulk Replace Tool to update the Must Strip (Player, Male) to use the same lines. Note that these lines are duplicated, and will not actually shared across case types.
- Separate This Stage Into a New Case
- Remove: Removes the selected case from all applicable stages.
If you delete the case from stage 3, but it applies to stages 1-3, the cases in stage 1 and 2 will also be deleted.Whenever you save, the editor makes sure you have the bare minimum of dialogue. So if you remove a generic case from stage 2, leaving no other generic case for stage 2, the editor will regenerate a placeholder case in stage 2.
- Filters
Various filters can be applied to the tree to narrow its focus. This does not delete filtered cases. They just won't display.
- Filter: Allows you to filter the tree to show all cases, only targeted cases, or only generic cases.
- Target: If filtering to targeted cases, this will further limit the tree to only display targeted cases that involve the selected character.
2. Case Editor
When selecting a case from the Dialogue Tree, this area will populate with details from the case.2a. Stages Grid
You will often want to repeat lines between stages. While you could manually copy lines to each stage, this would get really repetitive and become a massive pain to modify later. To make things easier, the Character Editor allows you to share a case across multiple stages. If a case is shared between stages 1, 2, and 3, it is said that the case applies to stages 1-3. You can open the case from any of these stages in the tree and any modifications will be automatically applied to the case under each stage.To apply a case to multiple stages, check the boxes for each stage you want it to apply to. You can also use Select All to quickly select all available stages, or unselect everything but the current stage.
Note that not all cases are available for all stages. For instance, Swap Cards is not available for the Finished stage, because the character is no longer playing poker.
Check the Applies to Stages area often
Take care not to accidentally apply a case to more stages than you want, or you may find yourself undoing your own work. For instance, if a Stripping case is applied to stages 3 and 4 and you make dialogue for stage 3, when you later go to stage 4 to make its dialogue, you could unknowingly overwrite your lines for stage 3.Variety is Key
While sharing dialogue is very convenient (who really wants to write 15 unique Swapping Cards lines for every stage?), try to maintain a balance between convenience and variety. The more lines you share across stages, the more repetitive your character will be, and the less replayability they will have. Keep note of the Unique Lines of Dialogue counter in the upper right. Characters these days have 700+, with some top performers even reaching multiple thousands.2b. Case Type
This allows to you change the current case's type. Typically you would only ever need to do this if you're copying a case to another one (ex. Must Strip (Male) to Must Strip (Female)).You can also give your case a custom label, color and folder here. These tools are not used by the game, but help organize your dialogue in the tree.
2c. Conditions
This is where you set the conditions that narrow down when a case should be available to play. See the Conditions section for more detailed information.Variety is Key
Adding a lot of targeted dialogue is crucial to making a replayable character. The most lively games are those where characters frequently interact with each other and to the overall flow of the game.2d. Dialogue Editor
This where the dialogue lines for the current case are edited. Each row specifies a unique line of dialogue.-
Image column: Available images are available for selection here to tie with a line of text. When you choose an image, the Pose Preview will automatically update to show you it. This makes it easy to pick poses and dialogue that fit together.
My pose is missing!
Which images are available for a case depends on which stages the case applies to. If your case applies to stages 1, 2, and 3 and you want to use the "happy" pose, 1-happy.png, 2-happy.png and 3-happy.png must all exist in the character's folder. You will be unable to choose the pose otherwise. This is to help prevent creating dialogue with broken images.Animated GIFs
The Character Editor can only create PNG files, but it is capable of reading GIF files, provided they exist in the character folder at the time the editor is launched. As long as the GIFs match the rules outlined in the box above, they can be selected the same way as PNGs.Pose Maker
Poses created in the Pose Maker will display in the sidebar as well, running through any animation once.Controlling the Preview
Initially a case that is shared across stages will show previews of the earliest stage that is shared. You can view other stages by right-clicking that stage's checkbox in the stages grid. - Stage-specific images button: The dobule arrows next to the image will bring up a popup where you can pick different poses between shared stages rather than using the same pose name for all stages. This avoids the need to duplicate cases if you want the same text but only a different image.
- Text column: This is the text that will appear in the character's speech bubble when the line is chosen. Line should be fairly short, since a wall of text will both be glazed over by the player and will often not fit in the speech bubble.
- Marker column: When this line is played in game, it tracks that the line has been played using this "marker." This character or others can then write targeted dialogue based on whether that marker has been "said" yet. This allows you to play a line only once all game, for example, or to only play a line if another line was previously played earlier in the game.
- Advanced marker button: By default markers are like an on/off toggle. This button brings up more detailed options, such as storing a specific piece of information in the marker that can be retrieved later.
- Collectible button: This button allows you to link a collectible to the line.
- Advanced line options: Side effects of a line playing are found here. For instance, you can change the character's label (name), AI, or even gender if a particular line plays.
- Italics: Words can be italicized by encasing them in <i></i>. For example, <i>Wow!</i> will produce Wow!.
-
Variables: Lines can use variables, which are placeholder labels that will be replaced at runtime with a dynamic bit of text. To use a variable, in the text type ~variableName~ where variableName is the name of the variable. There is an ever expanding list of variables, but for dialogue, the most important are:
- ~player~: Replaced with the human player's name.
- ~name~: Replaced with the target's name, if there is a target.
- ~cards~: Used in the Swapping Cards case. Replaced with the number of cards the character is exchanging.
- ~clothing~: Used in stripping cases. Replaced with the lower case name of the clothing being stripped.
- ~Clothing~": Same as ~clothing~ but uses the proper name instead of lower case.
- ~marker.markerName~: Replaced with the value currently stored in a marker. Replace "markerName" with the name of the marker you want to read.
- Copy All: This will copy all of the current case's dialogue lines into the editor's clipboard, useful if you want to copy lines from one case to another.
- Paste All: This will paste previous copied lines into the current case's dialogue. You are given the option to either overwrite the existing dialogue, or add to it.
2e. Advanced Line Options
Side effects of a line playing can be edited here. For more detailed explanations on these features, please see the SPNATI Docs.-
Change State: Allows you to change various attributes of the character's metadata. These will override global and per-stage settings until reset.
- gender: The in-game gender of this character. Characters such as Chihiro use this to implement their gender reveal mechanics.
- intelligence: The difficulty setting of the character's AI.
- size: The size of this character's breasts or penis. This determines what Chest/Crotch reveal size is used by the game, independently of the tags applied to the character.
- label: The name that is displayed above the character's cards, and the name that other characters will use for this character by default. Unlike other operations, changes to a character's label are processed before dialogue is displayed, so other characters will begin using the new label in their dialogue immediately (instead of only using the new name starting from their next lines).
- Arrow: Allows you to manipulate the direction and location of the speech bubble.
- Speech Bubble: Allows you to change the size of the text displayed in the speech bubble, as well as whether or not the speech bubble should display over the top of the character's art.'
-
Forfeit Operations Forfeit operations change various aspects of a character's forfeit. For obvious reasons, none of these operations will have any effect after a character has finished.
-
Attribute: The attribute you are editing. These are stamina, timer, or redirect-finish.
- A character's stamina attribute controls how long the character's forfeit will last once they start. This attribute can only be changed before a character's forfeit starts.
- During a character's forfeit, however, the timer attribute determines how long they have left before finishing; this attribute can only be changed while a character is forfeiting, beginning with the Start Masturbating (Self) case.
- The redirect-finish attribute can 'redirect' the dialogue that plays when this character is finishing. The character that has the redirect-finish operation in their dialogue is passing their dialogue across to the target of the operation. This must be applied before the character with redirect-finish finishes.
- Operation: How the Attribute interacts with the Value field. For redirect-finish, only equals (=) is applicable.
- Value: The value used to modify the Attribute. For timer and stamina, this will be an integer. For redirect-finish, this will be the folder name of the character that the finishing dialogue is being redirected to, e.g. florina.
- Heavy: In addition to changing timers and finishing dialogue redirection, forfeit operations can also affect whether or not a character is heavily masturbating. Setting this to true or false will override the default heavy state; using reset will restore the default state.
-
Attribute: The attribute you are editing. These are stamina, timer, or redirect-finish.
3. Pose Preview
This area displays the image associated with the selected dialogue line in a case.Markers
Each phase is by default computed in a complete bubble from everything else that has happened in the game. You can use conditions to figure out important details about the game like who's naked, or has lost several times in row, or so forth, but your character has no memory of their own.You can give your character a memory by way of markers. A marker is like a bookmark to a line of dialogue. When saying a line, the character can set an associated marker (see above), and then for future dialogue, use a condition to check that marker has been said previously. This lets you track more concrete details from a game, such as whether Florina had run away from the table earlier by checking her "fled" marker.