Pim_gd
Content Creator
- Joined
- Jan 25, 2013
This is kinda still a work in progress. Red words are things I need to change/test/update/delete. Additionally, I'm wondering what I should write for Tips & Tricks with Loader Dialogues - you have all the building blocks already, so do you guys need help illustrating how you'd do something, or... ? Let me know.
Introduction
We've gone through a couple dialogue guides already...
One by EO
One by Konashion
One by Slingerbult
But those have aged... and don't contain advanced information. They're pretty basic.
This Dialogue Guide intends to provide in-depth information about how dialogues work and what you can do with them.
See this guide as a reference guide - to provide you with help when you need to know something. If you wish to learn how dialogues work in general then you should read Slingerbult's guide. Slingerbult's guide explains how dialogues work in general very well - however, it's slightly outdated.
The intended audience for this guide is those who already know how to write a dialogue... but want to learn more.
Most of the information within this guide is available on other sections of the forum. However, to get to that information you'd have to dig around the forum in many, many threads. I have compiled the information here.
Index
This guide is split up in a couple segments, each detailing a particular aspect of Dialogues.
Additionally, the guide is split up in a vanilla and a Loader section.
--Introduction
--Index
--General terminology
--What is a dialogue?
Vanilla SDT
--Linetypes and Wildcards
--Triggers
--Variables
--Lineattributes
--Tips, Tricks and things to watch out for
Loader
--Animtools
--BreastExpansion
--DialogueActions
--VariableArithmetic
--Tips, Tricks and things to watch out for
Technical Details
- Playing a line
General terminology
Action trigger - A trigger that will cause an action to occur (other than defining the next line in queue).
Linetype - A predefined linename, such as "intro" and "general". "intro1" would be a custom line instead.
Variable insertion - Using asterisks to insert the value of a variable into a dialogue line.
Variable substitution - A variable insertion that may have extra characters which will only display if the variable has a value. Only Vanilla SDT's variables have this functionality.
(more to come)
What is a dialogue?
A dialogue is a collection of lines for use in SDT. The lines can fit any scenario and they can be expressed in a variety of manners, be it a fully automated script or a bunch of reactionary lines that will play depending on things that happen.
A dialogue is a .txt (or .swf, for Audio Dialogues) file that you can load in SDT via the modding tab. Dialogues can enhance the game enormously. Having a girl suck you off is awesome... but if she's also talking dirty whilst doing that?
Vanilla SDT
Vanilla SDT refers to SDT without the loader. You can use .swf costumes, character codes and whatnot, but generally you are bound by the things that SDT can do. Not everyone knows how to use the Loader, and if you just want to reach a broad audience with your dialogue, it might be better to write the dialogue for Vanilla SDT.
Vanilla SDT - Linetypes & Wildcards
A list of linetypes and when they will trigger: (shamelessly ripped from Slingerbult's guide)
Additionally, there are a few other settings you can access with linetypes in Vanilla SDT. These shouldn't be used for content, though.
Vanilla SDT - Triggers
A list of triggers available in Vanilla SDT (also shamelessly ripped from Slingerbult's Guide)
Vanilla SDT - Variables
(Shamelessly ripped from Slingerbult's guide)
Vanilla SDT - Lineattributes
(Not ripped from Slingerbult's Guide ;D)
All line attributes are optional to add to a line.
You cannot add line attributes to cough, interrupt, font, all, dialogue_name, finish# and finishOther lines. If you do so, unexpected behavior will occur (line attributes ignored or line not loaded).
Vanilla SDT - Tips, Tricks and things to watch out for
Welcome to the real meat of the guide.
I'll first tell you some tricks, then some tips regarding their usage... and then what you have to watch out for when writing a dialogue.
If you can't understand why it works from just reading the explanation, I suggest trying it out.
Tricks
Things to watch out for
SDT has many quirks in the dialogue system. It's implemented, but not refined.
There are many other things that can cause SDT to react unexpectedly to your dialogue. The DialogueChecker will be able to explain why for most of the problems. I suggest you use it.
Loader
The Loader is a way to give modders access to modifying the code of SDT (in a broad sense of speaking). With Loader mods, it's possible to add new default linetypes, automatically update variables, and probably just anything else you can think of (some things may require more effort but it all ought to be possible). If you wish to focus your dialogue on providing maximal "entertainment", Loader mods can provide you with more tools to achieve this goal.
There are a couple of Loader mods out there for Dialogues. This guide will list them, as well as a broad overview of their features, and an in-depth list of trickery you can attain with them. The version of the mod will also be listed - this is the version the mod was at when the guide was made/updated, and it's the version that the guide is about. Information that applies to older versions may not apply to newer versions, so try things out before integrating them into your dialogue.
Loader Mods - Animtools
Version: V8
Animtools allows you to create, save and load position files. Not just any position files - you can use Animtools to adjust just about every limb of each model. This means you can make it look like they are engaging in other types of sex rather than blowjobs or handjobs.
Animtools offers some support for dialogues. You can load positions within your dialogue.
Loader Mods - BreastExpansion
Version: V2_4a
BreastExpansion is not so much a dialogue mod as it is a mod that has dialogue capabilities. Nevertheless, it has some tricks you could use; by including the mod and tweaking the settings to negate the expansion you can use it as a way to access things like breastsize.
Loader Mods - DialogueActions
Version: V1.13
DialogueActions is a mod that intends to open up more features of SDT to dialogue writers. Its main functionality consists of giving the dialogue access to things that you can already do with the in game menu, such as loading backgrounds, changing clothes, loading hair files, etc. Beyond that, it also includes some other features to help make dialogues play smoother.
Passive effect: Whenever DialogueActions is loaded, lines that consist of a single non-action trigger will play instantaneously.
Loader Mods - VariableArithmetic
Version: V1.08
VariableArithmetic is a mod that intends to expand the versatility of variables. In Vanilla SDT, checking of variables is expensive. So when you wish to execute complex checks... it will slow down a dialogue tremendously. Additionally, it's not possible to assign the value of one variable to another in Vanilla SDT. VariableArithmetic solves these problems.
VariableArithmetic does not define any linetypes.
Loader - Tips, Tricks and things to watch out for
Be sure to look at the Vanilla SDT Tips, tricks and things to watch out for section as well - things that apply to Vanilla SDT also tend to apply to the Loader.
I still need content for this...
Technical Details
This section of the guide is dedicated towards explaining the internal workings of SDT when it comes to dialogues. It's going to be hard to read, it's going to be technical, but with a bit of study you should be able to read how SDT works, rather than having to guess the workings from the code.
Technical Details - Playing a line
When playing a line, SDT will go through a series of steps...
Guide updates
Introduction
We've gone through a couple dialogue guides already...
One by EO
One by Konashion
One by Slingerbult
But those have aged... and don't contain advanced information. They're pretty basic.
This Dialogue Guide intends to provide in-depth information about how dialogues work and what you can do with them.
See this guide as a reference guide - to provide you with help when you need to know something. If you wish to learn how dialogues work in general then you should read Slingerbult's guide. Slingerbult's guide explains how dialogues work in general very well - however, it's slightly outdated.
The intended audience for this guide is those who already know how to write a dialogue... but want to learn more.
Most of the information within this guide is available on other sections of the forum. However, to get to that information you'd have to dig around the forum in many, many threads. I have compiled the information here.
Index
This guide is split up in a couple segments, each detailing a particular aspect of Dialogues.
Additionally, the guide is split up in a vanilla and a Loader section.
--Introduction
--Index
--General terminology
--What is a dialogue?
Vanilla SDT
--Linetypes and Wildcards
--Triggers
--Variables
--Lineattributes
--Tips, Tricks and things to watch out for
Loader
--Animtools
--BreastExpansion
--DialogueActions
--VariableArithmetic
--Tips, Tricks and things to watch out for
Technical Details
- Playing a line
General terminology
Action trigger - A trigger that will cause an action to occur (other than defining the next line in queue).
Linetype - A predefined linename, such as "intro" and "general". "intro1" would be a custom line instead.
Variable insertion - Using asterisks to insert the value of a variable into a dialogue line.
Variable substitution - A variable insertion that may have extra characters which will only display if the variable has a value. Only Vanilla SDT's variables have this functionality.
(more to come)
What is a dialogue?
A dialogue is a collection of lines for use in SDT. The lines can fit any scenario and they can be expressed in a variety of manners, be it a fully automated script or a bunch of reactionary lines that will play depending on things that happen.
A dialogue is a .txt (or .swf, for Audio Dialogues) file that you can load in SDT via the modding tab. Dialogues can enhance the game enormously. Having a girl suck you off is awesome... but if she's also talking dirty whilst doing that?
Vanilla SDT
Vanilla SDT refers to SDT without the loader. You can use .swf costumes, character codes and whatnot, but generally you are bound by the things that SDT can do. Not everyone knows how to use the Loader, and if you just want to reach a broad audience with your dialogue, it might be better to write the dialogue for Vanilla SDT.
Vanilla SDT - Linetypes & Wildcards
A list of linetypes and when they will trigger: (shamelessly ripped from Slingerbult's guide)
//These line types play only before first deepthroat.
intro - When idle, this will trigger eventually.
resistance - When going down far enough and encountering resistance.
first_throat - As with resistance, but requires more force to get down deep enough.
first_dt - What she says on the first full deep throat when her resistance is gone.
//These line types play only after first deepthroat.
general -When idle, this will trigger eventually
vigorous - Triggers from fast and deep throat fucking
pull_off - Triggers often, typically when sliding off the cock or pulling her off.
held - When held down through spacebar/mouse.
//Cum-related lines.
pre_cum - Triggers when your screen does that white, flashy thing before he cums.
cum_on_face - When he comes on her face.
cum_in_mouth - When he comes in her mouth.
cum_in_throat - When he comes in her throat.
cum_in_eye - When he comes in her eye.
cum_in_nose - When cum squirts out from her nose, due to the cock being inserted at the appropriate depth when cumming.
restart - When you continue after ejaculating.
//These line types always trigger when their condition is met.
cough - Inserted into lines to represent coughing. Most dialogues use a list of various coughs like "-ack!"
interrupt - Inserted into lines when she's interrupted. Most dialogues use a list of various interrupts like "-ngh!"
swallow - Whenever she swallows.
drool - Whenever she drools.
head_grabbed - Whenever he grabs her head.
wake - If she passes out, this is what she says when waking up.
hand_job_stroke - Dialogue displayed only when jerking him off (I don't know the exact trigger mechanism)
lick_penis - She auto licks in proximity to his body, this is what she says when the penis is licked.
lick_balls - And this is what she says when the balls are licked (may also trigger when deepthroating balls deep)
pulled_up - When you pull her up by holding down the mouse button.
pulled_down - When you pull her down.
intro - When idle, this will trigger eventually.
resistance - When going down far enough and encountering resistance.
first_throat - As with resistance, but requires more force to get down deep enough.
first_dt - What she says on the first full deep throat when her resistance is gone.
//These line types play only after first deepthroat.
general -When idle, this will trigger eventually
vigorous - Triggers from fast and deep throat fucking
pull_off - Triggers often, typically when sliding off the cock or pulling her off.
held - When held down through spacebar/mouse.
//Cum-related lines.
pre_cum - Triggers when your screen does that white, flashy thing before he cums.
cum_on_face - When he comes on her face.
cum_in_mouth - When he comes in her mouth.
cum_in_throat - When he comes in her throat.
cum_in_eye - When he comes in her eye.
cum_in_nose - When cum squirts out from her nose, due to the cock being inserted at the appropriate depth when cumming.
restart - When you continue after ejaculating.
//These line types always trigger when their condition is met.
cough - Inserted into lines to represent coughing. Most dialogues use a list of various coughs like "-ack!"
interrupt - Inserted into lines when she's interrupted. Most dialogues use a list of various interrupts like "-ngh!"
swallow - Whenever she swallows.
drool - Whenever she drools.
head_grabbed - Whenever he grabs her head.
wake - If she passes out, this is what she says when waking up.
hand_job_stroke - Dialogue displayed only when jerking him off (I don't know the exact trigger mechanism)
lick_penis - She auto licks in proximity to his body, this is what she says when the penis is licked.
lick_balls - And this is what she says when the balls are licked (may also trigger when deepthroating balls deep)
pulled_up - When you pull her up by holding down the mouse button.
pulled_down - When you pull her down.
cough - Inserted into lines to represent coughing. Most dialogues use a list of various coughs like "-ack!"
interrupt - Inserted into lines when she's interrupted. Most dialogues use a list of various interrupts like "-ngh!"
finish# - Can be accessed by *FINISHES*. *FINISHES* is based on how many times he came - useful for plot progression. Don't over rely on finish lines though.
finishOther - When there is no finish# with the correct number available, finishOther will be used.
interrupt - Inserted into lines when she's interrupted. Most dialogues use a list of various interrupts like "-ngh!"
finish# - Can be accessed by *FINISHES*. *FINISHES* is based on how many times he came - useful for plot progression. Don't over rely on finish lines though.
finishOther - When there is no finish# with the correct number available, finishOther will be used.
Additionally, there are a few other settings you can access with linetypes in Vanilla SDT. These shouldn't be used for content, though.
font - sets the font for a dialogue.
dialogue_name - sets the name of the dialogue. That's what will be displayed near the Save, Load and Edit buttons on the Modding panel.
initial_settings - for declaring initialization values for attributes.
all - can be used to refer to all lines. You can do all:"CLEAR" to remove all the standard lines.
dialogue_name - sets the name of the dialogue. That's what will be displayed near the Save, Load and Edit buttons on the Modding panel.
initial_settings - for declaring initialization values for attributes.
all - can be used to refer to all lines. You can do all:"CLEAR" to remove all the standard lines.
Vanilla SDT - Triggers
A list of triggers available in Vanilla SDT (also shamelessly ripped from Slingerbult's Guide)
//These triggers set her mood, causing her AI to behave differently as well as changing her facial expression.
[NORMAL_MOOD]
[HAPPY_MOOD]
[ANGRY_MOOD]
[AHEGAO_MOOD]
//These triggers manage her hands.
[ARMS_BACK] - Positions her arms behind her back.
[ARMS_LEGS] - Positions her arms on her legs.
[ARMS_HIS_LEGS] - Positions her arms on his legs.
[ARMS_LOOSE] - Causes her arms to hang loose.
[ARMS_HAND_JOB] - Switches to hand job.
[TAP_HANDS] - She taps her hands on her/his legs, as she does when held down for too long.
//Individual arm functions. Act like ARMS_, but for one arm.
[LEFT_ARM_BACK]
[LEFT_ARM_LEGS]
[LEFT_ARM_HIS_LEGS]
[LEFT_ARM_HAND_JOB]
[LEFT_ARM_LOOSE]
[RIGHT_ARM_BACK]
[RIGHT_ARM_LEGS]
[RIGHT_ARM_HIS_LEGS]
[RIGHT_ARM_HAND_JOB]
[RIGHT_ARM_LOOSE]
//These triggers manage other positioning.
[FACE_FUCK_STYLE] - Switches to Face Fuck style, a different base position
[NORMAL_STYLE] - Switches back to Normal style
[HOLD] - He grabs her head.
[RELEASE] - He releases her head.
//Facial expression triggers - use liberally!
[LOOK_UP] - She looks up at him and continues to do so.
[LOOK_DOWN] - She looks "down" and continues to do so (more forward than down).
[CLOSE_EYES] - She closes her eyes.
[OPEN_EYES] - She opens her eyes.
[BLINK] - She blinks.
[WINCE] - She briefly shuts her mouth and furrows her brow.
[SHOCK] - She briefly makes a wide-eyed, surprised expression.
//Other triggers
[SWALLOW] - She swallows, preventing speech and penetration until the animation finishes.
[CLENCH_TEETH] - She clenches her teeth for a while, preventing speech and penetration until the animation finishes.
[COUGH] - She coughs, and the game inserts cough text.
[ADD_TEARS] - She tears, though it takes a while to show typically.
[EJACULATE] - He cums immediately.
[DROOL] - She drools a cum-like substance whether she "actually" has it in her mouth or not.
[NORMAL_MOOD]
[HAPPY_MOOD]
[ANGRY_MOOD]
[AHEGAO_MOOD]
//These triggers manage her hands.
[ARMS_BACK] - Positions her arms behind her back.
[ARMS_LEGS] - Positions her arms on her legs.
[ARMS_HIS_LEGS] - Positions her arms on his legs.
[ARMS_LOOSE] - Causes her arms to hang loose.
[ARMS_HAND_JOB] - Switches to hand job.
[TAP_HANDS] - She taps her hands on her/his legs, as she does when held down for too long.
//Individual arm functions. Act like ARMS_, but for one arm.
[LEFT_ARM_BACK]
[LEFT_ARM_LEGS]
[LEFT_ARM_HIS_LEGS]
[LEFT_ARM_HAND_JOB]
[LEFT_ARM_LOOSE]
[RIGHT_ARM_BACK]
[RIGHT_ARM_LEGS]
[RIGHT_ARM_HIS_LEGS]
[RIGHT_ARM_HAND_JOB]
[RIGHT_ARM_LOOSE]
//These triggers manage other positioning.
[FACE_FUCK_STYLE] - Switches to Face Fuck style, a different base position
[NORMAL_STYLE] - Switches back to Normal style
[HOLD] - He grabs her head.
[RELEASE] - He releases her head.
//Facial expression triggers - use liberally!
[LOOK_UP] - She looks up at him and continues to do so.
[LOOK_DOWN] - She looks "down" and continues to do so (more forward than down).
[CLOSE_EYES] - She closes her eyes.
[OPEN_EYES] - She opens her eyes.
[BLINK] - She blinks.
[WINCE] - She briefly shuts her mouth and furrows her brow.
[SHOCK] - She briefly makes a wide-eyed, surprised expression.
//Other triggers
[SWALLOW] - She swallows, preventing speech and penetration until the animation finishes.
[CLENCH_TEETH] - She clenches her teeth for a while, preventing speech and penetration until the animation finishes.
[COUGH] - She coughs, and the game inserts cough text.
[ADD_TEARS] - She tears, though it takes a while to show typically.
[EJACULATE] - He cums immediately.
[DROOL] - She drools a cum-like substance whether she "actually" has it in her mouth or not.
Vanilla SDT - Variables
(Shamelessly ripped from Slingerbult's guide)
Substitutions:
YOU - The name of the Him model. This is entered in the "Dialogue Name" box on the "Custom" tab of the options menu.
ME - The name of the Her model. This is the name shown in the Character selections menu (SD Chan, Asuka, Etc.). Can be set in charcodes via charName:name.
YOUR - See above
MY - See above.
FINISHES - a variable that calls up lines based on how many times he's finished. Insertion only.
YOU - The name of the Him model. This is entered in the "Dialogue Name" box on the "Custom" tab of the options menu.
ME - The name of the Her model. This is the name shown in the Character selections menu (SD Chan, Asuka, Etc.). Can be set in charcodes via charName:name.
YOUR - See above
MY - See above.
FINISHES - a variable that calls up lines based on how many times he's finished. Insertion only.
Vanilla SDT - Lineattributes
(Not ripped from Slingerbult's Guide ;D)
All line attributes are optional to add to a line.
You cannot add line attributes to cough, interrupt, font, all, dialogue_name, finish# and finishOther lines. If you do so, unexpected behavior will occur (line attributes ignored or line not loaded).
held - (Needs testing) EITHER whether his arm position is set to held or not OR Whether his arm is holding her. Acts as a check. Possible values: true, false
mood - A check for a specific mood value. The associated line will only play if she's in that mood. Possible values: Normal, Angry, Happy, Ahegao. Do not write ANY other value or the dialogue will fail to load.
style - Determines the manner in which the line will be displayed. Is case-sensitive, but is a tad lenient. Possible values: Him, Speak, Thought, him, speak, thought. If you write another value, unexpected behavior will occur. If you leave it blank (don't set the line attribute) then SDT will assume you wrote "style":"Speak".
next - The line to play directly after this line. Note: If one of the triggers in the line is not an action trigger, then it's possible this value will be overridden. Additionally, if this is empty {"next":""}, SDT will ignore it.
set - Sets variables. Has a different syntax: "set":{"variable":value}. For multiple variables, use "set":{"variable":value,"variable2":value}. value must be wrapped in "" if you want to use text, and should NOT be wrapped in quotes if you're using numerical values.
check - Checks values of variables. Checks using the same variable seem to function as OR (Untested), rather than AND. If you want to have AND, you'll need to store the same value in two variables or use multiple lines.
mood - A check for a specific mood value. The associated line will only play if she's in that mood. Possible values: Normal, Angry, Happy, Ahegao. Do not write ANY other value or the dialogue will fail to load.
style - Determines the manner in which the line will be displayed. Is case-sensitive, but is a tad lenient. Possible values: Him, Speak, Thought, him, speak, thought. If you write another value, unexpected behavior will occur. If you leave it blank (don't set the line attribute) then SDT will assume you wrote "style":"Speak".
next - The line to play directly after this line. Note: If one of the triggers in the line is not an action trigger, then it's possible this value will be overridden. Additionally, if this is empty {"next":""}, SDT will ignore it.
set - Sets variables. Has a different syntax: "set":{"variable":value}. For multiple variables, use "set":{"variable":value,"variable2":value}. value must be wrapped in "" if you want to use text, and should NOT be wrapped in quotes if you're using numerical values.
check - Checks values of variables. Checks using the same variable seem to function as OR (Untested), rather than AND. If you want to have AND, you'll need to store the same value in two variables or use multiple lines.
Vanilla SDT - Tips, Tricks and things to watch out for
Welcome to the real meat of the guide.
I'll first tell you some tricks, then some tips regarding their usage... and then what you have to watch out for when writing a dialogue.
If you can't understand why it works from just reading the explanation, I suggest trying it out.
Tricks
Discovered (or, atleast, first shared by) T0mcat, this trick allows you to switch lines based on a variable's value.
Checks are expensive (more on that later), and with this trick you won't have to use check statements.
Okay, so the basic idea is this: You insert a variable's value into a trigger.
An example:
You have a variable... chapter.
It's either 1, 2, or 3, depending on how far the player has advanced.
At chapter 1 the girl isn't very willing, at chapter 2 the girl is getting into it, and in chapter 3 she goes absolutely nuts (ahegao).
How do you separate the lines of each of these chapters?
You'd have to use checks for each line.
general:"Do I really have to?" {"check":{"chapter":1}}
general:"This isn't so bad after all..." {"style":"Thought","check":{"chapter":2}}
general:"Hey... come on, please put it back in... my tongue wants to taste you more..." {"check":{"chapter":3}}
That's a bit annoying, prone to typos, and you have to copy paste the check code everywhere...
What if we insert the value of chapter into a trigger, and reroute the lines?
general:"[generalChapter*chapter*]" {"style":"Thought"}
generalChapter1:"Do I really have to?"
generalChapter2:"This isn't so bad after all..." {"style":"Thought"}
generalChapter3:"Hey... come on, please put it back in... my tongue wants to taste you more..."
Now you don't have checks, but instead a direct access to the lines you need. This speeds up your dialogue and makes it easier to read when you're editing.
Checks are expensive (more on that later), and with this trick you won't have to use check statements.
Okay, so the basic idea is this: You insert a variable's value into a trigger.
An example:
You have a variable... chapter.
It's either 1, 2, or 3, depending on how far the player has advanced.
At chapter 1 the girl isn't very willing, at chapter 2 the girl is getting into it, and in chapter 3 she goes absolutely nuts (ahegao).
How do you separate the lines of each of these chapters?
You'd have to use checks for each line.
general:"Do I really have to?" {"check":{"chapter":1}}
general:"This isn't so bad after all..." {"style":"Thought","check":{"chapter":2}}
general:"Hey... come on, please put it back in... my tongue wants to taste you more..." {"check":{"chapter":3}}
That's a bit annoying, prone to typos, and you have to copy paste the check code everywhere...
What if we insert the value of chapter into a trigger, and reroute the lines?
general:"[generalChapter*chapter*]" {"style":"Thought"}
generalChapter1:"Do I really have to?"
generalChapter2:"This isn't so bad after all..." {"style":"Thought"}
generalChapter3:"Hey... come on, please put it back in... my tongue wants to taste you more..."
Now you don't have checks, but instead a direct access to the lines you need. This speeds up your dialogue and makes it easier to read when you're editing.
SDT comes with wordwrap built-in, so you don't have to worry about a line running off the screen.
But when you want to have a line continue on a new line in the display (Because she's rhyming or singing or because it just looks nicer), you can use a linebreak!
Problem is, SDT strips special characters and doesn't parse lines with linebreaks in them. Darn.
A workaround exists, however.
If you write "%0A" in a dialogue line, SDT will convert it to a character. And %0A is a linebreak. So when SDT plays the line, the %0A will turn into a linebreak, causing text after the %0A to be displayed on the next line of the display.
But when you want to have a line continue on a new line in the display (Because she's rhyming or singing or because it just looks nicer), you can use a linebreak!
Problem is, SDT strips special characters and doesn't parse lines with linebreaks in them. Darn.
A workaround exists, however.
If you write "%0A" in a dialogue line, SDT will convert it to a character. And %0A is a linebreak. So when SDT plays the line, the %0A will turn into a linebreak, causing text after the %0A to be displayed on the next line of the display.
Humans have very complex speech patterns. Just by changing the speed and tone of your words, you can alter the meaning of what you're saying.
Compare...
"I'll take it you had fun, then?" and...
"I'll take it you had ... fun, then?"
It's not much, since you only have text to work with.
You can use a Cyrillic character - Б - to slow down the dialogue. SDT does not know what to do with this character (IF you save your dialogue as Unicode or UTF-8 - not ANSI!) - and displays nothing. But to display the character still takes time, and thus the end user sees a delay.
This is useful for emphasizing things. I generally tend to use it with ellipses - .Б.Б.Б
Compare...
"I'll take it you had fun, then?" and...
"I'll take it you had ... fun, then?"
It's not much, since you only have text to work with.
You can use a Cyrillic character - Б - to slow down the dialogue. SDT does not know what to do with this character (IF you save your dialogue as Unicode or UTF-8 - not ANSI!) - and displays nothing. But to display the character still takes time, and thus the end user sees a delay.
This is useful for emphasizing things. I generally tend to use it with ellipses - .Б.Б.Б
Player input is one of those things that's hard to handle. Communication is important for achieving better performance. So... how do you allow your player to interact with your dialogue?
One of the commonly used ways is using pulled_up and pulled_down. But those are rather limited functions - you only have 2 of them, and implementing a choice menu on that is just hard to do and clumsy to navigate.
Pim_gd came up with a solution for this. When the girl talks, you can interrupt her. The game will automatically add interrupt text, and then the line will eventually stop playing. But internally, SDT still has a next line queued.
So what if you changed the next line that SDT will play after the current line is finished... whilst the line is playing? The player could interrupt the line at the option that he wants.
An example, hooked up to pulled_up:
pulled_up:"Position switch? [switchHandjob]Sure, how about I use my hands? .БББ.БББ.БББ [switchFacefuck]Okay, how about facefucking me? .БББ.БББ.БББ [switchBlowjob] Just a blowjob, then? .БББ.БББ.БББ[dontSwitch]"
dontSwitch:"Or I could just continue."
switchHandjob:"Handjob it is![ARMS_HAND_JOB]" {"style":"Thought"}
switchFacefuck:"Facefucking it is![ARMS_LEGS][FACE_FUCK_STYLE]" {"style":"Thought"}
switchBlowjob:"Blowjob it is![ARMS_LEGS][NORMAL_STYLE]" {"style":"Thought"}
A few notes:
- You have to start with a speak line (no style or "style":"Speak"). Otherwise, no interrupts can be done.
- The follow up lines should be Thought or Him style. If her mouth is filled with cock, how is she gonna talk?
- You might have to explain to the user how to use this line. Have a line before the selection line explain how this works. f93 uses the following line for his shapeshifting succubus dialogue:
shiftdisguisechoice:"[NORMAL_MOOD]It's your choice. Just fill my mouth with your delicious cock when you want me to stop.БББББ.БББББ.БББББ.[shiftoffice] I could be that pretty lady you work for, she's so dominant.БББББ.БББББ.БББББ.[shiftfriend] Or maybe that friend you wish was one with benefits.БББББ.БББББ.БББББ.[shiftsister] Maybe you really do want me to be your sister for a while? Nobody would know.БББББ.БББББ.БББББ.[shiftsuccubus] Or maybe, just maybe, you really want to fuck me as I really am - a smoking hot demon girl.[general]Maybe you've changed your mind about me changing?БББББ.БББББ.БББББ.[shiftdisguisechoice][ANGRY_MOOD] Or maybe you've not been listening at all.[TAP_HANDS][NORMAL_MOOD]"
One of the commonly used ways is using pulled_up and pulled_down. But those are rather limited functions - you only have 2 of them, and implementing a choice menu on that is just hard to do and clumsy to navigate.
Pim_gd came up with a solution for this. When the girl talks, you can interrupt her. The game will automatically add interrupt text, and then the line will eventually stop playing. But internally, SDT still has a next line queued.
So what if you changed the next line that SDT will play after the current line is finished... whilst the line is playing? The player could interrupt the line at the option that he wants.
An example, hooked up to pulled_up:
pulled_up:"Position switch? [switchHandjob]Sure, how about I use my hands? .БББ.БББ.БББ [switchFacefuck]Okay, how about facefucking me? .БББ.БББ.БББ [switchBlowjob] Just a blowjob, then? .БББ.БББ.БББ[dontSwitch]"
dontSwitch:"Or I could just continue."
switchHandjob:"Handjob it is![ARMS_HAND_JOB]" {"style":"Thought"}
switchFacefuck:"Facefucking it is![ARMS_LEGS][FACE_FUCK_STYLE]" {"style":"Thought"}
switchBlowjob:"Blowjob it is![ARMS_LEGS][NORMAL_STYLE]" {"style":"Thought"}
A few notes:
- You have to start with a speak line (no style or "style":"Speak"). Otherwise, no interrupts can be done.
- The follow up lines should be Thought or Him style. If her mouth is filled with cock, how is she gonna talk?
- You might have to explain to the user how to use this line. Have a line before the selection line explain how this works. f93 uses the following line for his shapeshifting succubus dialogue:
shiftdisguisechoice:"[NORMAL_MOOD]It's your choice. Just fill my mouth with your delicious cock when you want me to stop.БББББ.БББББ.БББББ.[shiftoffice] I could be that pretty lady you work for, she's so dominant.БББББ.БББББ.БББББ.[shiftfriend] Or maybe that friend you wish was one with benefits.БББББ.БББББ.БББББ.[shiftsister] Maybe you really do want me to be your sister for a while? Nobody would know.БББББ.БББББ.БББББ.[shiftsuccubus] Or maybe, just maybe, you really want to fuck me as I really am - a smoking hot demon girl.[general]Maybe you've changed your mind about me changing?БББББ.БББББ.БББББ.[shiftdisguisechoice][ANGRY_MOOD] Or maybe you've not been listening at all.[TAP_HANDS][NORMAL_MOOD]"
Okay, so you have the following problem...
You have a set of dialogue lines that use the player's name... but if the player's name is not set, they're gonna be ugly.
Of course, you can use some characters inside the variable substitution...
Like "Hey*, YOU*!".
But you can only go so far with that.
For instance...
"So, is* YOU* your real name or just an alias?"
How are you going to rewrite a line like that?! It's just not possible - there's a direct reference to the player's name.
Pim_gd found a partial solution to this problem, though.
Consider placing this line in a dialogue...
general:"So, is* YOU* your real name or just an alias?"
And we have the problem.
But we can apply the trick of adding extra characters to a variable insertion to change which line is played!
general:"[generalUnnamed]*YOU[generalNamed]*"
generalNamed:"So, is* YOU* your real name or just an alias?"
generalUnnamed:"So, is batdude your real name or just an alias?"
There's just the problem of the player's name being displayed. So how do we get rid of that?
We can wrap it in a trigger.
general:"[generalUnnamed]*[YOU][generalNamed]*"
generalNamed:"So, is* YOU* your real name or just an alias?"
generalUnnamed:"So, is batdude your real name or just an alias?"
Now SDT will try to find the line associated with the player's name - likely there isn't any. Even if there was, the next line is quickly set to generalNamed afterwards.
The only thing that makes this solution imperfect is that triggers with spaces in them will still be displayed. So if you are Mr. Bob, you'd see [Mr. Bob] displayed before the dialogue would switch to the name. You should probably check if the name is set, and use that to set the value of a variable. Then you can use that, instead of displaying the players name.
You have a set of dialogue lines that use the player's name... but if the player's name is not set, they're gonna be ugly.
Of course, you can use some characters inside the variable substitution...
Like "Hey*, YOU*!".
But you can only go so far with that.
For instance...
"So, is* YOU* your real name or just an alias?"
How are you going to rewrite a line like that?! It's just not possible - there's a direct reference to the player's name.
Pim_gd found a partial solution to this problem, though.
Consider placing this line in a dialogue...
general:"So, is* YOU* your real name or just an alias?"
And we have the problem.
But we can apply the trick of adding extra characters to a variable insertion to change which line is played!
general:"[generalUnnamed]*YOU[generalNamed]*"
generalNamed:"So, is* YOU* your real name or just an alias?"
generalUnnamed:"So, is batdude your real name or just an alias?"
There's just the problem of the player's name being displayed. So how do we get rid of that?
We can wrap it in a trigger.
general:"[generalUnnamed]*[YOU][generalNamed]*"
generalNamed:"So, is* YOU* your real name or just an alias?"
generalUnnamed:"So, is batdude your real name or just an alias?"
Now SDT will try to find the line associated with the player's name - likely there isn't any. Even if there was, the next line is quickly set to generalNamed afterwards.
The only thing that makes this solution imperfect is that triggers with spaces in them will still be displayed. So if you are Mr. Bob, you'd see [Mr. Bob] displayed before the dialogue would switch to the name. You should probably check if the name is set, and use that to set the value of a variable. Then you can use that, instead of displaying the players name.
Things to watch out for
SDT has many quirks in the dialogue system. It's implemented, but not refined.
Lines and triggers are not instant. A line ends when it is either ended forcibly, or when it runs out of characters.
SDT normally displays characters 1 by 1 (unless adding interrupt or coughing). We'll refer to this as "takes 1 character to play 1 character".
To play a trigger, it takes 1 character. To end a line, it takes 1 character (SDT will go to the next line when it tries to print the next character, but it has ran out).
This means that if you have a general line...
which triggers a generalChapter2 line...
which triggers a generalChapter2Handjob line that has something you want to display,
then you have trigger+general+trigger+generalChapter2 = 4 characters of time where you have no content.
This means that the user sees an empty dialogue box for that period of time. There's not much you can do about it in Vanilla SDT. It's just how it is.
SDT normally displays characters 1 by 1 (unless adding interrupt or coughing). We'll refer to this as "takes 1 character to play 1 character".
To play a trigger, it takes 1 character. To end a line, it takes 1 character (SDT will go to the next line when it tries to print the next character, but it has ran out).
This means that if you have a general line...
which triggers a generalChapter2 line...
which triggers a generalChapter2Handjob line that has something you want to display,
then you have trigger+general+trigger+generalChapter2 = 4 characters of time where you have no content.
This means that the user sees an empty dialogue box for that period of time. There's not much you can do about it in Vanilla SDT. It's just how it is.
Text and numeric variables are different.
Lets say you have a variable that holds either a number... or a special value if something else is happening.
initial_settings:{"variable":"special"}
intro:"[var*variable*]"
varspecial:"Special line!" {"set":{"variable":"0"}}
Based on the special value we'll do something completely different than the numbers.
What will happen here? When SDT sees a number in a string (text), it will try to increase/decrease the variable's value by that amount. But since there is no + or -, it can't pick whether it needs to decrease or increase... so it does neither. It doesn't set the variable.
You must place numerical values outside of double quotes.
varspecial:"Special line!" {"set":{"variable":0}}
Lets say you have a variable that holds either a number... or a special value if something else is happening.
initial_settings:{"variable":"special"}
intro:"[var*variable*]"
varspecial:"Special line!" {"set":{"variable":"0"}}
Based on the special value we'll do something completely different than the numbers.
What will happen here? When SDT sees a number in a string (text), it will try to increase/decrease the variable's value by that amount. But since there is no + or -, it can't pick whether it needs to decrease or increase... so it does neither. It doesn't set the variable.
You must place numerical values outside of double quotes.
varspecial:"Special line!" {"set":{"variable":0}}
Consider this line:
:"Hello!"
Is this a valid line?
Yes, it is! SDT will happily parse it and load it.
However, you can't refer to it via the next-lineattribute, as SDT will think that it's not set if it's set to empty string ({"next":""}). Therefore, the only way to reach a line like that is via an empty trigger ([]).
:"Hello!"
Is this a valid line?
Yes, it is! SDT will happily parse it and load it.
However, you can't refer to it via the next-lineattribute, as SDT will think that it's not set if it's set to empty string ({"next":""}). Therefore, the only way to reach a line like that is via an empty trigger ([]).
SDT has no such thing as comments.
The general consensus (as much as you can have one with an anonymous community) is that you can turn a line into a comment by prepending the line with -.
That is to say, by adding a hypen in front of the line.
SDT does not care about hypens or any other characters - it will still try to parse your line.
If you must write comments in your dialogue script, I suggest not having colons and double quotes on the same line (or using them at all).
The general consensus (as much as you can have one with an anonymous community) is that you can turn a line into a comment by prepending the line with -.
That is to say, by adding a hypen in front of the line.
SDT does not care about hypens or any other characters - it will still try to parse your line.
If you must write comments in your dialogue script, I suggest not having colons and double quotes on the same line (or using them at all).
There are many other things that can cause SDT to react unexpectedly to your dialogue. The DialogueChecker will be able to explain why for most of the problems. I suggest you use it.
Loader
The Loader is a way to give modders access to modifying the code of SDT (in a broad sense of speaking). With Loader mods, it's possible to add new default linetypes, automatically update variables, and probably just anything else you can think of (some things may require more effort but it all ought to be possible). If you wish to focus your dialogue on providing maximal "entertainment", Loader mods can provide you with more tools to achieve this goal.
There are a couple of Loader mods out there for Dialogues. This guide will list them, as well as a broad overview of their features, and an in-depth list of trickery you can attain with them. The version of the mod will also be listed - this is the version the mod was at when the guide was made/updated, and it's the version that the guide is about. Information that applies to older versions may not apply to newer versions, so try things out before integrating them into your dialogue.
Loader Mods - Animtools
Version: V8
Animtools allows you to create, save and load position files. Not just any position files - you can use Animtools to adjust just about every limb of each model. This means you can make it look like they are engaging in other types of sex rather than blowjobs or handjobs.
Animtools offers some support for dialogues. You can load positions within your dialogue.
[ANIMTOOLS_$POSITIONFILENAME] - Loads a position file.
atv_position - determines which "hole" the position uses. 0=oral, 1=tit, 2=vaginal, 3=anal, 4=other
bodycontactspaceheldpush - triggered when body contact enabled, and the spacebar is held down
cuminher - triggered when body contact enabled, and he cums when his penis is in contact with her body
cuminher - triggered when body contact enabled, and he cums when his penis is in contact with her body
Loader Mods - BreastExpansion
Version: V2_4a
BreastExpansion is not so much a dialogue mod as it is a mod that has dialogue capabilities. Nevertheless, it has some tricks you could use; by including the mod and tweaking the settings to negate the expansion you can use it as a way to access things like breastsize.
[ADD_EFFECTIVE_CUM] - increases effective cum inside her, possibly causing expansions
[PUKE] - causes her to puke (and triggers puke linetype)
[SUB_EFFECTIVE_CUM] - decreases effective cum inside her, possibly causing size reductions
[PUKE] - causes her to puke (and triggers puke linetype)
[SUB_EFFECTIVE_CUM] - decreases effective cum inside her, possibly causing size reductions
These variables come in pairs for checking. Since checks on the same variable are treated as OR and checks on different variables are treated as AND, you can use this to do AND checks with the same variable.
bellysize - 0-150, size of her belly
bellysize2
bigpenisbellychange - (Need to find out)
bigpenisbellychange2
bigpenisbodychange - (Need to find out)
bigpenisbodychange2
bigpenisbreastchange - (Need to find out)
bigpenisbreastchange2
bodysize - 0-150, size of her body
bodysize2
breastsize - 0-150, size of her breasts
breastsize2
breathLevel - (need to find out whether this is the first or second level of breathing)
breathLevel2
effectivecuminside - Effective cum inside, what BE uses for expansion calculations. You can use this to allow the player some sway with his settings, rather than forcing a breastsize for certain lines
effectivecuminside2
eyecumtimer - (Need to find out)
eyecumtimer2
mouthFull - whether she has her mouth full. true or false value.
passOutFactor - (Need to find out)
passOutFactor2
penisInMouthDist - (Need to find out)
penisInMouthDist2
superbreastsize - (Need to find out)
superbreastsize2
timerpuke - time left until next puke occurs, in (need to find out format)
timerpuke2
bellysize - 0-150, size of her belly
bellysize2
bigpenisbellychange - (Need to find out)
bigpenisbellychange2
bigpenisbodychange - (Need to find out)
bigpenisbodychange2
bigpenisbreastchange - (Need to find out)
bigpenisbreastchange2
bodysize - 0-150, size of her body
bodysize2
breastsize - 0-150, size of her breasts
breastsize2
breathLevel - (need to find out whether this is the first or second level of breathing)
breathLevel2
effectivecuminside - Effective cum inside, what BE uses for expansion calculations. You can use this to allow the player some sway with his settings, rather than forcing a breastsize for certain lines
effectivecuminside2
eyecumtimer - (Need to find out)
eyecumtimer2
mouthFull - whether she has her mouth full. true or false value.
passOutFactor - (Need to find out)
passOutFactor2
penisInMouthDist - (Need to find out)
penisInMouthDist2
superbreastsize - (Need to find out)
superbreastsize2
timerpuke - time left until next puke occurs, in (need to find out format)
timerpuke2
The priority of these linetypes is defined in the settings file for this mod.
bellyexpansion - triggered when belly expands
bellyreduction - triggered when belly reduces in size
bodyexpansion - triggered when body expands
bodyreduction - triggered when body reduces in size
breastexpansion - triggered when breasts expand
breastreduction - triggered when breasts reduce in size
cumfrombreast - triggered when cumming from breasts (happens when there's too much cum inside her)
puke - triggered upon puking (happens every so often if enabled)
bellyexpansion - triggered when belly expands
bellyreduction - triggered when belly reduces in size
bodyexpansion - triggered when body expands
bodyreduction - triggered when body reduces in size
breastexpansion - triggered when breasts expand
breastreduction - triggered when breasts reduce in size
cumfrombreast - triggered when cumming from breasts (happens when there's too much cum inside her)
puke - triggered upon puking (happens every so often if enabled)
Loader Mods - DialogueActions
Version: V1.13
DialogueActions is a mod that intends to open up more features of SDT to dialogue writers. Its main functionality consists of giving the dialogue access to things that you can already do with the in game menu, such as loading backgrounds, changing clothes, loading hair files, etc. Beyond that, it also includes some other features to help make dialogues play smoother.
Passive effect: Whenever DialogueActions is loaded, lines that consist of a single non-action trigger will play instantaneously.
Audio & Visuals (+Animation):
[HIDE_HIM] - Hides him by setting the visible attribute to false. Handjob can still make him cum, sucking him can not, but licking him can. SDT works in mysterious ways.
[SHOW_HIM] - Shows him by setting the visible attribute to true. Penis functionality reinstated.
[FLASH_<hex>] - Flashes the screen briefly, like [FADE_BACKGROUND_<hex>]. Can be used as a cover up for changing positions, loading character codes...
[FLASH_<hex>_<timeInMilliseconds>] - Same speed as [FLASH_<hex>], but pauses for <timeInMilliseconds> milliseconds.
[END_FLASH] - Sets the remaining pause time for a [FLASH_<hex>_<timeInMilliseconds>] to 0. Usable in a "cover your eyes" scenario... although dialogue can't be seen when it's dark because the flash effect is in front of the dialogue box.
[RUB_HIS_CROTCH_ON] - She starts rubbing his crotch with her right hand. You MUST call [RUB_HIS_CROTCH_OFF] before relocating the arm.
[RUB_HIS_CROTCH_OFF] - She stops rubbing his crotch.
[RIGHT_ARM_BREAST] - Places her right arm on her right breast (hand cupping breast).
[LEFT_ARM_BREAST] - Places her left arm on her left breast (hand cupping breast).
[ARMS_BREAST] - Places both her arms on her breasts (hands cupping breasts).
[SHRINK_PENIS] - Shrinks his penis by 10%.
[GROW_PENIS] Max penis size (credit to sby for code)
[BOUNCE_TITS] Causes her tits to bounce a bit.
[MOAN] Makes her moan, plays random (1 out of 3) wretch sound. (credit to sby for sound code)
[ARMS_CROTCH] Places her left hand in her crotch.
[ARMS_HIS_CROTCH] Places her hands on his crotch.
[HIDE_PENIS] Hide Penis. Penis is still there, just not visible.
[SHOW_PENIS] Show Penis.
[HIDE_BALLS] Remove Balls.
[SHOW_BALLS] Show Balls.
[GAG] Makes her gag, plays random (1 out of 3) wretch sound.
[MASTURBATE_ON] She starts to masturbate (credit to modguy for masturbation code)
[MASTURBATE_OFF] She stops masturbation. (not instant, time until arms return to normal depending on her arousal)
Automation:
[PULL_OFF] - Pulls her off his cock. Should be compatible with all oral positions of Animtools (if they set her.releasePos). Will pause current recording.
[AUTO_KEYS_ON] - Turns on Auto Keys.
[AUTO_KEYS_OFF] - Turns off Auto Keys.
[AUTO_KEYS] - Inverts Auto Keys (if it was on, it's now off - if it was off, it's now on).
[PAUSE] Pauses the current playback.
[CONTINUE] Continues the current playback.
[AUTO_NORMAL] Turns on AutoMode, sets to normal.
[AUTO_SOFT] Turns on AutoMode, sets to soft.
[AUTO_HARD] Turns on AutoMode, sets to hard.
[AUTO_SELF] Turns on AutoMode, sets to self.
[AUTO_OFF] Turns off AutoMode.
Scene alterations:
[CLEAN_CUM] - Removes all cum strands, similar to pressing Clear Cum button on options tab
[CLEAN_SPIT] - Removes all spit strands, similar to pressing Clear spit button on options tab
[CLEAN_LIPSTICK] - Removes all lipstick smear, similar to pressing Clear lipstick button on options tab
[CLEAN_MASCARA] - Removes all mascara staining, similar to pressing Clear mascara button on options tab
[CLEAN_ALL] - Acts as [CLEAN_CUM]+[CLEAN_SPIT]+[CLEAN_LIPSTICK]+[CLEAN_MASCARA]
[RANDOMIZE_HER] - Acts as if you pressed the Shuffle button on the modding tab.
[LOAD_CHARCODE] - For use with the loadCharCode variable. Delays loading of the character code until the trigger is reached.
[CHANGE_BACKGROUND] - Delays swapping of the background until this trigger is reached. See "About backgrounds.txt" for more info.
[FADE_BACKGROUND_<hex>] - Initiates the fading to swap backgrounds. hex is 6-character hexadecimal string (do not put # or 0x in front).
Dialogue functions:
[CLEAR] Clears the current dialogue.
[WAKE_UP] Plays wake up animation and triggers wake-dialogue.
[DEEPTHROAT] Enables her to deepthroat after call.
[HIDE_HIM] - Hides him by setting the visible attribute to false. Handjob can still make him cum, sucking him can not, but licking him can. SDT works in mysterious ways.
[SHOW_HIM] - Shows him by setting the visible attribute to true. Penis functionality reinstated.
[FLASH_<hex>] - Flashes the screen briefly, like [FADE_BACKGROUND_<hex>]. Can be used as a cover up for changing positions, loading character codes...
[FLASH_<hex>_<timeInMilliseconds>] - Same speed as [FLASH_<hex>], but pauses for <timeInMilliseconds> milliseconds.
[END_FLASH] - Sets the remaining pause time for a [FLASH_<hex>_<timeInMilliseconds>] to 0. Usable in a "cover your eyes" scenario... although dialogue can't be seen when it's dark because the flash effect is in front of the dialogue box.
[RUB_HIS_CROTCH_ON] - She starts rubbing his crotch with her right hand. You MUST call [RUB_HIS_CROTCH_OFF] before relocating the arm.
[RUB_HIS_CROTCH_OFF] - She stops rubbing his crotch.
[RIGHT_ARM_BREAST] - Places her right arm on her right breast (hand cupping breast).
[LEFT_ARM_BREAST] - Places her left arm on her left breast (hand cupping breast).
[ARMS_BREAST] - Places both her arms on her breasts (hands cupping breasts).
[SHRINK_PENIS] - Shrinks his penis by 10%.
[GROW_PENIS] Max penis size (credit to sby for code)
[BOUNCE_TITS] Causes her tits to bounce a bit.
[MOAN] Makes her moan, plays random (1 out of 3) wretch sound. (credit to sby for sound code)
[ARMS_CROTCH] Places her left hand in her crotch.
[ARMS_HIS_CROTCH] Places her hands on his crotch.
[HIDE_PENIS] Hide Penis. Penis is still there, just not visible.
[SHOW_PENIS] Show Penis.
[HIDE_BALLS] Remove Balls.
[SHOW_BALLS] Show Balls.
[GAG] Makes her gag, plays random (1 out of 3) wretch sound.
[MASTURBATE_ON] She starts to masturbate (credit to modguy for masturbation code)
[MASTURBATE_OFF] She stops masturbation. (not instant, time until arms return to normal depending on her arousal)
Automation:
[PULL_OFF] - Pulls her off his cock. Should be compatible with all oral positions of Animtools (if they set her.releasePos). Will pause current recording.
[AUTO_KEYS_ON] - Turns on Auto Keys.
[AUTO_KEYS_OFF] - Turns off Auto Keys.
[AUTO_KEYS] - Inverts Auto Keys (if it was on, it's now off - if it was off, it's now on).
[PAUSE] Pauses the current playback.
[CONTINUE] Continues the current playback.
[AUTO_NORMAL] Turns on AutoMode, sets to normal.
[AUTO_SOFT] Turns on AutoMode, sets to soft.
[AUTO_HARD] Turns on AutoMode, sets to hard.
[AUTO_SELF] Turns on AutoMode, sets to self.
[AUTO_OFF] Turns off AutoMode.
Scene alterations:
[CLEAN_CUM] - Removes all cum strands, similar to pressing Clear Cum button on options tab
[CLEAN_SPIT] - Removes all spit strands, similar to pressing Clear spit button on options tab
[CLEAN_LIPSTICK] - Removes all lipstick smear, similar to pressing Clear lipstick button on options tab
[CLEAN_MASCARA] - Removes all mascara staining, similar to pressing Clear mascara button on options tab
[CLEAN_ALL] - Acts as [CLEAN_CUM]+[CLEAN_SPIT]+[CLEAN_LIPSTICK]+[CLEAN_MASCARA]
[RANDOMIZE_HER] - Acts as if you pressed the Shuffle button on the modding tab.
[LOAD_CHARCODE] - For use with the loadCharCode variable. Delays loading of the character code until the trigger is reached.
[CHANGE_BACKGROUND] - Delays swapping of the background until this trigger is reached. See "About backgrounds.txt" for more info.
[FADE_BACKGROUND_<hex>] - Initiates the fading to swap backgrounds. hex is 6-character hexadecimal string (do not put # or 0x in front).
Dialogue functions:
[CLEAR] Clears the current dialogue.
[WAKE_UP] Plays wake up animation and triggers wake-dialogue.
[DEEPTHROAT] Enables her to deepthroat after call.
For clothes:
panties - 3 RGB values
bottoms - (her pants) 6 RGB values
legwear - 8 RGBA values
legwearB - 8 RGBA values
footwear - 6 RGB values
top - (her bra) 3 RGB values
tops - (her shirt) 4 RGBA values
armwear - 3 RGB values
eyewear - 3 RGB values
headwear - 6 RGB values
tonguePiercing - 3 RGB values
nipplePiercing - 3 RGB values
bellyPiercing - 3 RGB values
earring - 3 RGB values
collar - 6 RGB values
cuffs - 6 RGB values
ankleCuffs - 6 RGB values
gag - 3 RGB values
himTop - 3 RGB values, male body only
himBottoms - 3 RGB values, male body only
himFootwear - 3 RGB values
For his penis:
penisSize - write-only, scale 0-100
penisLength - write-only, scale 0-100
penisWidth - write-only, scale 0-100
maxPenisLength - write-only, scale unknown (0-100?)
maxPenisWidth - write-only, scale unknown (0-100?)
minPenisLength - write-only, scale unknown (0-100?)
minPenisWidth - write-only, scale unknown (0-100?)
Others:
background - write-only. Is a filereference to an image file in the last loaded character folder.
hair - write-only. Is a filereference to an image file in the last loaded character folder. Unusable for .swf hairs.
loadCharCode - write-only. Contains a full or partial character code. This character code will be loaded via SDT. Can be delay-set with [LOAD_CHARCODE], like [CHANGE_BACKGROUND].
loadDialogue - write-only. Is a filereference to a dialogue file in the last loaded character folder.
panties - 3 RGB values
bottoms - (her pants) 6 RGB values
legwear - 8 RGBA values
legwearB - 8 RGBA values
footwear - 6 RGB values
top - (her bra) 3 RGB values
tops - (her shirt) 4 RGBA values
armwear - 3 RGB values
eyewear - 3 RGB values
headwear - 6 RGB values
tonguePiercing - 3 RGB values
nipplePiercing - 3 RGB values
bellyPiercing - 3 RGB values
earring - 3 RGB values
collar - 6 RGB values
cuffs - 6 RGB values
ankleCuffs - 6 RGB values
gag - 3 RGB values
himTop - 3 RGB values, male body only
himBottoms - 3 RGB values, male body only
himFootwear - 3 RGB values
For his penis:
penisSize - write-only, scale 0-100
penisLength - write-only, scale 0-100
penisWidth - write-only, scale 0-100
maxPenisLength - write-only, scale unknown (0-100?)
maxPenisWidth - write-only, scale unknown (0-100?)
minPenisLength - write-only, scale unknown (0-100?)
minPenisWidth - write-only, scale unknown (0-100?)
Others:
background - write-only. Is a filereference to an image file in the last loaded character folder.
hair - write-only. Is a filereference to an image file in the last loaded character folder. Unusable for .swf hairs.
loadCharCode - write-only. Contains a full or partial character code. This character code will be loaded via SDT. Can be delay-set with [LOAD_CHARCODE], like [CHANGE_BACKGROUND].
loadDialogue - write-only. Is a filereference to a dialogue file in the last loaded character folder.
passed_out - Triggers once when she passes out (and makes the urkgh noise). To reset the trigger for this line (so that it will play again), she has to breathe a couple times.
general - Triggers faster than default "general".
orgasm - Triggers when she climaxes through masturbation.
start - Triggers once immediately after the game/mod is loaded, and upon loading of a new dialogue.
general - Triggers faster than default "general".
orgasm - Triggers when she climaxes through masturbation.
start - Triggers once immediately after the game/mod is loaded, and upon loading of a new dialogue.
Loader Mods - VariableArithmetic
Version: V1.08
VariableArithmetic is a mod that intends to expand the versatility of variables. In Vanilla SDT, checking of variables is expensive. So when you wish to execute complex checks... it will slow down a dialogue tremendously. Additionally, it's not possible to assign the value of one variable to another in Vanilla SDT. VariableArithmetic solves these problems.
[VA_UPDATE_VARIABLES] - Parses the variable list and attempts to apply operator functions (see Variable section). Use prior to playing a line containing a variable with operators.
[VA_SET_VARIABLE_<variableName>_<value>] - Sets the named variable's value to the provided value. Example: [VA_SET_VARIABLE_var1_5].
[VA_SET_VARIABLEBYNAME_<variableTargetName>_<variableSourceName>] - Sets the named target variable's value to the value of the named source variable. Example: [VA_SET_VARIABLE_var1_var2].
[VA_SET_GLOBALVARIABLE_<globalVariableName>_<value>] - stores a value in VariableArithmetic's memory.
[VA_SET_GLOBALVARIABLEBYNAME_<globalVariableName>_<sourceVariableName>] - stores a value in VariableArithmetic's memory, using a dialogue variable's name to pull the value from.
[VA_LOAD_GLOBALVARIABLE_<globalVariableName>] - sets <globalVariableName> as a dialogue variable using the value stored in VariableArithmetic's memory.
[VA_SET_VARIABLE_<variableName>_<value>] - Sets the named variable's value to the provided value. Example: [VA_SET_VARIABLE_var1_5].
[VA_SET_VARIABLEBYNAME_<variableTargetName>_<variableSourceName>] - Sets the named target variable's value to the value of the named source variable. Example: [VA_SET_VARIABLE_var1_var2].
[VA_SET_GLOBALVARIABLE_<globalVariableName>_<value>] - stores a value in VariableArithmetic's memory.
[VA_SET_GLOBALVARIABLEBYNAME_<globalVariableName>_<sourceVariableName>] - stores a value in VariableArithmetic's memory, using a dialogue variable's name to pull the value from.
[VA_LOAD_GLOBALVARIABLE_<globalVariableName>] - sets <globalVariableName> as a dialogue variable using the value stored in VariableArithmetic's memory.
VariableArithmetic does not have variables of its own. However, it can use variable names to set values of variables.
One of VariableArithmetic's main features is "Variable Operators".
To use VariableArithmetic's Variable operators, you have to add new variables to your initial_settings line. Prior to playing a line where you intend to use them, you must call [VA_UPDATE_VARIABLES] as a trigger. Based on the name of the variable, VariableArithmetic will insert a value in the variable.
The syntax for variable names is as follows:
"var1<OPERATOR>var2"
Example:
"var1+var2"
A listing of supported operators and the result with values (10 and 20 used for example):
Operator var1 var2 output
+ 10 20 30 - Adds both sides together.
- 10 20 -10 - Substracts the right side from the left side.
/ 10 20 0.5 - Divides the left side by the right side. If the right side is 0, ... then I don't know what happens. Check Adobe's manual for division by 0.
!= 10 20 1 - If both sides don't have the same value, returns 1. Returns 0 otherwise.
== 10 20 0 - If both sides have the same value, returns 1. Returns 0 otherwise.
>= 10 20 0 - If the left side is more than, or equal to the right side, returns 1. Otherwise returns 0.
<= 10 20 1 - If the right side is more than, or equal to the left side, returns 1. Otherwise returns 0.
> 10 20 0 - If the left side is more than the right side, returns 1. Otherwise returns 0.
< 10 20 1 - If the right side is more than the left side, returns 1. Otherwise returns 0.
= 10 20 20 - Whatever the result might have been, it's set to the right side.
&& 1 0 0 - Represents a boolean AND. Returns 1 if (var1 + var2) equals 2. Otherwise, returns 0.
|| 1 0 1 - Represents a boolean OR. Returns 1 if (var1 + var2) equals or is more than 1. Otherwise, returns 0.
% 10 4 2 - Returns the remainder of a division of var1 by var2. Represents a modulo.
It is possible to chain operators:
"var1+var2-var3"
When you do this, keep in mind that VariableArithmetic does not care about your normal arithmetical order of operators. So "4+2/2" is 3, not 5.
To get around order of operators, you can use parentheses:
"var1+(var2/var3)"
VariableArithmetic should support up to about 55 levels of parentheses - after that, Flash will see this as "infinite recursion" and halt the current script.
Internal working:
After having found a variable that is eligible for value insertion (contains one of the listed operators, or parentheses/asterisks in the name), VariableArithmetic will copy the variable name and then insert the values of the referred variables into the copied variable name. Then VariableArithmetic resolves the equation, and places the value inside the variable.
One of VariableArithmetic's main features is "Variable Operators".
To use VariableArithmetic's Variable operators, you have to add new variables to your initial_settings line. Prior to playing a line where you intend to use them, you must call [VA_UPDATE_VARIABLES] as a trigger. Based on the name of the variable, VariableArithmetic will insert a value in the variable.
The syntax for variable names is as follows:
"var1<OPERATOR>var2"
Example:
"var1+var2"
A listing of supported operators and the result with values (10 and 20 used for example):
Operator var1 var2 output
+ 10 20 30 - Adds both sides together.
- 10 20 -10 - Substracts the right side from the left side.
/ 10 20 0.5 - Divides the left side by the right side. If the right side is 0, ... then I don't know what happens. Check Adobe's manual for division by 0.
!= 10 20 1 - If both sides don't have the same value, returns 1. Returns 0 otherwise.
== 10 20 0 - If both sides have the same value, returns 1. Returns 0 otherwise.
>= 10 20 0 - If the left side is more than, or equal to the right side, returns 1. Otherwise returns 0.
<= 10 20 1 - If the right side is more than, or equal to the left side, returns 1. Otherwise returns 0.
> 10 20 0 - If the left side is more than the right side, returns 1. Otherwise returns 0.
< 10 20 1 - If the right side is more than the left side, returns 1. Otherwise returns 0.
= 10 20 20 - Whatever the result might have been, it's set to the right side.
&& 1 0 0 - Represents a boolean AND. Returns 1 if (var1 + var2) equals 2. Otherwise, returns 0.
|| 1 0 1 - Represents a boolean OR. Returns 1 if (var1 + var2) equals or is more than 1. Otherwise, returns 0.
% 10 4 2 - Returns the remainder of a division of var1 by var2. Represents a modulo.
It is possible to chain operators:
"var1+var2-var3"
When you do this, keep in mind that VariableArithmetic does not care about your normal arithmetical order of operators. So "4+2/2" is 3, not 5.
To get around order of operators, you can use parentheses:
"var1+(var2/var3)"
VariableArithmetic should support up to about 55 levels of parentheses - after that, Flash will see this as "infinite recursion" and halt the current script.
Internal working:
After having found a variable that is eligible for value insertion (contains one of the listed operators, or parentheses/asterisks in the name), VariableArithmetic will copy the variable name and then insert the values of the referred variables into the copied variable name. Then VariableArithmetic resolves the equation, and places the value inside the variable.
Loader - Tips, Tricks and things to watch out for
Be sure to look at the Vanilla SDT Tips, tricks and things to watch out for section as well - things that apply to Vanilla SDT also tend to apply to the Loader.
I still need content for this...
Technical Details
This section of the guide is dedicated towards explaining the internal workings of SDT when it comes to dialogues. It's going to be hard to read, it's going to be technical, but with a bit of study you should be able to read how SDT works, rather than having to guess the workings from the code.
Technical Details - Playing a line
When playing a line, SDT will go through a series of steps...
(It's possible that steps 1 and 2 are reversed in order, and it's possible the checks are run only once, and the played line filtering is done later. It's not really relevant. It just does those things and you can't interrupt them.)
1) First, define the linetype that will be played. This is done by checking for if a next line is defined, and else going through a set of checks for things like pulled_up, pulled_down...
2) After having defined the linetype, get all the lines that are related to that linetype, and haven't been played yet. Now filter them based on check, mood, held and style (Speak + mouth filled is a no go).
3) If no line is found, clear the list of played lines for the linetype, then repeat step 2.
4) If no line is found after THAT check, stop trying to display a line (it's not possible, there are no lines playable).
5) If lines are found, pick a random one. Add that to the played lines.
6) If the played lines amount is equal to the lines amount for that line type, clear played lines list.
7) Play the random line that was picked by...
8) First applying the set and next line attributes.
9) Then converting percent encoded characters to real characters. This is why you might have to replace % for %25, if it's followed by two hexadecimal characters [REGEX: (%[A-F0-9]{2}) ]
10) Next up, inserting any variables and variable substitutions. When dealing with variable substitutions, they are replaced in this order: FINISHES, YOUR, YOU, ME, MY.
11) The line is played, character for character. When a trigger is found, it's checked for an action. If it doesn't have an action, the content of the trigger is set to be played as the next line. If it does have an action associated with it, that action is triggered and things will happen (Mood changes, coughing, looking up or down, etc...).
12) When SDT tries to print the next character, but it has run out of characters to print, the line ends. If a next line is available, it will try to play that. Otherwise, the dialogue box will slowly fade.
1) First, define the linetype that will be played. This is done by checking for if a next line is defined, and else going through a set of checks for things like pulled_up, pulled_down...
2) After having defined the linetype, get all the lines that are related to that linetype, and haven't been played yet. Now filter them based on check, mood, held and style (Speak + mouth filled is a no go).
3) If no line is found, clear the list of played lines for the linetype, then repeat step 2.
4) If no line is found after THAT check, stop trying to display a line (it's not possible, there are no lines playable).
5) If lines are found, pick a random one. Add that to the played lines.
6) If the played lines amount is equal to the lines amount for that line type, clear played lines list.
7) Play the random line that was picked by...
8) First applying the set and next line attributes.
9) Then converting percent encoded characters to real characters. This is why you might have to replace % for %25, if it's followed by two hexadecimal characters [REGEX: (%[A-F0-9]{2}) ]
10) Next up, inserting any variables and variable substitutions. When dealing with variable substitutions, they are replaced in this order: FINISHES, YOUR, YOU, ME, MY.
11) The line is played, character for character. When a trigger is found, it's checked for an action. If it doesn't have an action, the content of the trigger is set to be played as the next line. If it does have an action associated with it, that action is triggered and things will happen (Mood changes, coughing, looking up or down, etc...).
12) When SDT tries to print the next character, but it has run out of characters to print, the line ends. If a next line is available, it will try to play that. Otherwise, the dialogue box will slowly fade.
Guide updates
Changelogs for documents. Nice way to add more cruft to something which is already an adminstrative task...
v1.01 - 10 December 2013 - Added "Empty Linetype" to "Things to watch out for" in Vanilla SDT section.
v1.00 - 10 December 2013 - Released first version. Describes Animtoolsv8, BreastExpansion v2_4a, DialogueActions v1.13 and VariableArithmetic v1.08.
v1.01 - 10 December 2013 - Added "Empty Linetype" to "Things to watch out for" in Vanilla SDT section.
v1.00 - 10 December 2013 - Released first version. Describes Animtoolsv8, BreastExpansion v2_4a, DialogueActions v1.13 and VariableArithmetic v1.08.