Pim_gd's Advanced Dialogue Guide (v1.01 - updated 10 December 2013)


Club Regular
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.

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.

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.

--General terminology
--What is a dialogue?

Vanilla SDT
--Linetypes and Wildcards
--Tips, Tricks and things to watch out for

--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.
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.

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.

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.
//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.
//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)
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.

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.

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.
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.
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.
"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]"
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!

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.
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.
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.


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:

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).

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.

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

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
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
bigpenisbellychange - (Need to find out)
bigpenisbodychange - (Need to find out)
bigpenisbreastchange - (Need to find out)
bodysize - 0-150, size of her body
breastsize - 0-150, size of her breasts
breathLevel - (need to find out whether this is the first or second level of breathing)
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
eyecumtimer - (Need to find out)
mouthFull - whether she has her mouth full. true or false value.
passOutFactor - (Need to find out)
penisInMouthDist - (Need to find out)
superbreastsize - (Need to find out)
timerpuke - time left until next puke occurs, in (need to find out format)
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)

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)

[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
[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?)

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.

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.
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:

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:
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:
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.
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...
(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.

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.


Content Creator
Jun 13, 2013
I have a question. Is there a shortcut for >= or <= similar to inserts like:


Please pardon my ignorance.


Club Regular
Jan 25, 2013
Covert said:
I have a question. Is there a shortcut for >= or <= similar to inserts like:


Please pardon my ignorance.
I don't quite comprehend, but <= and >= will work for check lines.


Potential Patron
Aug 12, 2013
I think this can be done with the Variable Arithmetic mod.

On the other hand, instead of using check, if you want say, resistance lines that play at random until some other line increments your count to 2, use

resistance :"[resistance _*count*]"{style whatever}
resistance _1:"Your lines"
resistance _1:"Your other lines"


Club Regular
Jan 25, 2013
Yes, variable arithmetic will do that for you.
VariableArithmetic will be integrated into DialogueActions,
in V2.00 of DialogueActions you won't need to declare a special variable and can do this anywhere in your dialogue:
resistance_0:"count lower than 2"
resistance_1:"count 2 or higher"


Content Creator
Jun 13, 2013
T.Y. for the clarification Mr. Pim_gd. This will save me a lot of trouble. Hope this can be integrated into Vanilla SDT in future(if any) updates. Tnx also for the guide.


Club Regular
Jan 25, 2013
Keep in mind that for v1.08 of VariableArithmetic, you'll have to use this syntax:


resistance_0:"count lower than 2"
resistance_1:"count 2 or higher"


Content Creator
Sep 15, 2012
Thirding the sticky request. Great job as always Pim! Sorry I haven't kept my guide updated, but tbh, I can no longer overview all the triggers, linetypes and other thingamajings in all the mods so I'm glad someone who could pulled this together.


Content Creator
Sep 15, 2012
Oh, and as for Pim's request in the OP, things/clarifications that would improve the guide:
- Some things are explained in detail (like reactive interrupts), others not so much. Every subsection in spoilers should ideally have coded examples (see below for specifics).
- Animtools: uses for atv_position for dia writers? Also, what does "body contact enabled" mean? Refer to V8 tutorial for info on where to put position files etc.
- I note in passing that mouthfull (from Breast Expansion) would probably be a useful addition to Dia Actions...
- DialogueActions: Examples very much needed - here or in the tips and tricks section. How do you type in RGB values for clothing variables correctly? How does it all look when you combine it in actual dia lines? Also, I forget - what does [CLEAR] do in more detail?
- Variable Arit: Maybe I'm just uninspired, but having red what this mod does now in more detail, I still don't see what I should use it for... like, I'm having trouble finding a situation where I couldn't just use a single variable instead. Maybe add a few nifty applications in the tips and tricks section, keeping in mind that the check lag problem is already solved with T0mcat's variable trick.


Club Regular
Jan 25, 2013
Will comment on the rest later, but "keeping in mind that the check lag problem is already solved with T0mcat's variable trick"
is only valid for the == operator.
You want to work with BreastExpansion's breastsize? Well, that's a floating point value ("76.23444444444444") and you can't really do anything with it like that.
I'll update this after DialogueActions v2.00.


Content Creator
Sep 15, 2012
Not sure where to put this, but I thought it could be of general interest to writers:

Having experimented with dias and Animtools, here's what I've found (applies to all vag and anal positions)
*Vigorous: You'll see a lot of these lines, for almost no action at all. Even small amounts of back and forth will trigger vigorous.
*General: You'll see some general lines, but only if thought/him-styled. Not sure she can be made to talk when fucked vag/anal at all.
*Pre-cum: This also plays if him/thought-styled.

I could get no other lines to play actually. The Animtools specific ones work of course. Bodycontactspaceheldpush will trigger when he's very deep inside her, for some positions you'll have to hold down that space bar a while to get there. I'm not sure if this line also triggers same as "held" with normal oral positions, or if it's strictly non-oral. Standard cum lines don't play, but the cum inside her one works.

Another "advanced" consideration is that TONGUE_OUT and TONGUE_IN (DA) mostly won't work as intended if you use sby's auto close mouth. If you use it, these commands will only work when her mouth is open due to proximity to the penis head. OTOH, in those cases, some auto tongue functionality seems to taking over anyway so that her tongue will pop right out if you try to force it in. The way it works now, I think I'll mostly be using TONGUE_OUT as a way to ensure triggering lick_penis and lick_balls more reliably.

If DA could add CLOSE_MOUTH and OPEN_MOUTH triggers, I think the tongue commands would also be more useful for dramatic effect.

Also a question to Pim that I didn't understand from the documentation with DA 2.04: With the da.clothes commands, is it actually possible to - say - set an alpha value for a clothing slot, without actually setting, say, a tank top? Such that, IF there's an article of clothing there, it will become more see through, but if there isn't one, it won't suddenly appear. I guess one solution would be to insert all the clothing variants for that slot as variables-in-lines, so that the line will only trigger if the clothing is there, but I was wondering if the new system allowed a more direct path.


Club Regular
Jan 25, 2013
"Also a question to Pim that I didn't understand from the documentation with DA 2.04: With the da.clothes commands, is it actually possible to - say - set an alpha value for a clothing slot"

It's in the examples!
Ahhh you people

Using DialogueActions.txt
An example:
resistance:"Let me get rid of these pants."{"set":{"da.clothes.bottoms.type":"None"}}
drool:"My *da.clothes.tops.type* is turning transparent!"{"set":{"da.clothes.tops.a":"-0.5"}}

It's the second one and no it will not make something mysteriously appear because all we do is alter the alpha slider (like you would in the Scene menu)


Content Creator
Sep 15, 2012
Ah good, then I know how that works (I saw that example but didn't know exactly how it worked). I love that these variables are readable too, so you can make her say what she's wearing or make lines that trigger based on what she's wearing (since users can modify this on the fly with options menu/mouse, it's really a must). Thanks Pim!


Content Creator
Sep 15, 2012
More experiment data in!

[PULL_OFF] (DA) doesn't seem to do anything unless you're using recording. It failed to break any action (regular mouse back and forth as well as space holding) when doing things manually or via auto mode. I'd advise using ARMS_HAND_JOB if you want to break throating action.

I can also confirm RESET_RESIST does indeed cause intro, resistance, first throat and even first_dt lines to retrigger. Also, even if you hold space and mouse button with all your might, she will come flying off that cock as fast as can be as soon as RESET_RESIST triggers. Holding her down will be impossible! This:

first_dt:"[RESET_RESIST]" {"style":"Thought"}

is something of a "hard lock" against the eager player (you will never progress past the intro and she'll only take it deep once - then you have to wear her down again). You can bypass it by changing positions with animtools though, as that automatically fast forwards past first_dt and into general/held lines etc.


Content Creator
Nov 8, 2013
I was looking into making audio dialogs, and it looks like dialogs need to be written using actions script like:

registerDialogue("intro", "This is an intro line.", "Intro1");

and then linking the audio asset to "Intro1".
I tried doing this using DialogueActions, for example:

registerDialogue("start", "This is a start line.", "Intro1");

but this start line would not fire. Are audio dialogs incompatible with DialogueActions, or am I doing something wrong?


Potential Patron
Feb 12, 2014
Hello, I'm new member to the forum, but a long time guest, downloading some dialogues.
Well, this past days I decided to create one of my own. Almost everything seems to be working, but I need to set the initial Throat and Intro Resistance dynamically on the dialog.

Can anybody help on this?

If I put this question in the wrong topic, I'm sorry.
Top Bottom