Slingerbult
Content Creator
- Joined
- Sep 15, 2012
What's This?
This is a guide for writing your own SDT dialogues. Custom dialogues come in very different levels of complexity, from a few simple lines of spoken text to complex hypnotic adventures, from interactive eroge mini-games to fully automated hentai scenes. Your imagination is the only limit, but it is best to start small! In this guide, I'll go through both the core functions and share my own tips as a dialogue writer on how to make things run more smoothly.
Before We Begin...
First off, a caveat. Resources like these need continous updating since the core game and Loader mods are developing at such a rapid pace, and I'm not sure I'll be able to fulfill that long term. If I'm gone from the forum for several months or more, check out this thread for updates not included in the OP. Or check out the latest dialogues from some popular dialogue writers who are probably using the latest tech. If you have problems with your dialogue, please check the troubleshooting section below before asking for help in this thread.
I've tried to incorporate the wisdom from old threads in this new guide, but in case you're interested in previous dialogue tutorials, check out these threads:
EO's original dialogue guide from 2011
Kona's thread on custom variables
Table of Contents
1. What You'll Need
2. Lines, Triggers, Conditions and Variables
3. What to Use and How
4. Troubleshooting
What You'll Need
There are basically two ways to make a custom dialogue - using the in-game editor or a text editor, such as Notepad. DO NOT WORK IN A WORD PROCESSOR AT ANY POINT. It will ruin everything with auto formatting that's hard to remove or disable. Using the in-game editor can be a good way for some to learn the basics, but this guide assumes you're writing everything from scratch in a text editor, which is the way most dia writers do it.
So make a new .txt file and enter these lines at the top:
all:"CLEAR"
dialogue_name:"name"
And of course change "name" to whatever you want to call your dialogue - ideally, the same thing you named the .txt file. The CLEAR command clears whatever dia the game may have loaded previously. Now you're ready to add your dialogue!
If you want to go beyond this guide as far as dialogue scripting is involved, check out the Loader and in particular gollum's DialogueActions mod (eventually, its extra features will hopefully be included in the core game). But first learn stand, then learn fly, Daniel-san...
Lines, Triggers, Conditions and Variables
This section goes through a few fundamental concepts that it helps to have a basic understanding of to avoid unnecessarily banging your head against the wall. See the spoilers below for a complete listing or lines, triggers, conditions and variables.
A line always has a specific type that determines when the Her or Him model will say whatever it is you've typed. For example, an intro line will be spoken before he deepthroats her and never after, and a head_grabbed line will only be prompted when her head is grabbed. If you have several lines with the same name, one will be chosen randomly at the appropriate time (you can micromanage the order by using custom variables and conditions, see below). You can even make up your own line types from scratch, like so:
custom:"This is a custom line."
All lines share this basic format of type + colon + line within quotation marks. A line will fail unless formated like this. However, since the game doesn't know when it's supposed to use this custom line, you will have to call it up yourself in some other line through a trigger. A trigger causes something to happen in the game and is usually typed in capital letters within brackets, for instance [ARMS_LEGS] moves her arms to her legs and [HOLD] makes him grab her head. You call a custom line by using it as a trigger in another line:
intro:"I will now speak a custom line. [custom]"
This will cause the custom line to be spoken immediately after the intro line has been spoken in its entirety (it doesn't matter where in the line you put the [custom] trigger). If you want to substitute a word or short phrase INSIDE a line, you'll need to use a variable instead. More on that below. There's actually another way to call a custom line after a standard one, and that's using something I like to call conditions. Conditions are used to check, set or change a standard or custom variable, in order to modify a line, only display it during certain circumstances, or changing something behind the scenes when it's called. Conditions are always within wavy brackets at the end of a line, like so:
intro:"I will now speak a custom line." {"next":"custom"}
"Next" conditions that the next line to be played immediately after this intro line will be the line called custom. It doesn't really matter if you use a trigger or a condition to call your custom lines, the result is the same. Another very important use for conditions is to define the style of a line, that is if it's spoken by her or him, or if it's a thought line. Thought and him lines have the benefit of triggering even if her mouth is occupied, which is something I'll get back to in a bit.
There are a few hidden variables within the game that you can set in various ways. One is mood, which can be set via dialogue by triggers such as [HAPPY_MOOD] (or via Options menu). The four moods are also conditions that can be checked so that a line conditioned {"mood":"Happy"} will only play if her mood is indeed happy. Similarly, lines can be conditioned based on his arm positioning (whether he's holding her or not). Variables can also be called mid-sentence by using asterisks, like so:
intro:"Hey* YOU*, this is an intro line."
YOU is a hidden variable that substitutes whatever you've entered as your name in the Options menu. Note that you can include other characters like commas and spaces between the asterisks, so if you haven't entered a name, the above line will simple play like "Hey, this is an intro line." *ME* works the same way but uses the Her model's name as specified under charName in Her character code. YOUR and MY works similarly.
FINISHES is another hidden variable that automatically increases when the Him model cums, so that whenever this variable is called, the appropriate line will be displayed. This can be immensely useful in creating a progressive dialogue. Though you could accomplish the same thing through custom variables, using finishes makes it easier by using a mechanism already hard coded into SDT.
Setting and checking your own custom variables is a more advanced form of dialogue coding that let's you micromanage how the dia will progress. You make up a variable, decide when it changes and can condition lines to played only when it has a certain value. This is coded like a "condition within a condition", like so:
intro:"Hey* YOU*, this is an intro line." {"set":{"intro":"true"}}
This sets the variable intro (which you just made up) to true, telling the game that this intro line has now been played. This can then be used to condition other lines, perhaps intro lines, to only be played when intro is true, that is after this first line has been played, by using check rather than set:
intro:"This is a second intro line, played only after the first." {"check":{"intro":"true"}}
The variable can be a number or string, depending on what's preferable. DO NOT attempt to set and check the same variable in the same line condition, it won't work so you'll need to use several lines to accomplish this. More on using custom variables below, this is just to introduce the concept. If you use custom variables, you can set their initial value when the dialogue is loaded like so:
initial_settings:{"variable1":0,"variable2":"false"}
The formating when using wavy brackets and setting variables is quite important. You can't stack sets of wavy brackets after each other, but must use a comma instead, as per the example above. Also note that straight numbers are without quotation marks, but you must use quotation marks as soon as a non-numerical is part of the variable's value. Many more examples will follow below and hopefully clear this up. The following spoilers list all the available lines, triggers, conditions and variables for easy reference:
What to Use and How
The best way to write a good dialogue IS NOT to write several variations of every possible line, trigger or other nifty thing in the spoilers above. In fact, not only will it make writing your dialogue a chore, but the experience of running it will be bad, as many lines won't play, come in conflict with each other or execute poorly. This section will elaborate on how to use the dia system practically to make it all work smoothly.
The Intro
You will typically choose between a progressive or a discontinuous intro depending on what you have in mind. A progressive intro features a longer back-and-forth dialogue between Him and Her which is only repeated once. A discontinuous intro features several shorter lines that appear randomly, some of which may be repeated if the intro drags on long enough before he deepthroats her. Hybrid forms are certainly possible, for example using a progressive intro if she starts in one mood, and discontiunous lines conditioned to another mood - or by having several different shorter exchanges between Him and Her. Here's an example:
Since the Her model spends a lot of her time with cock in her mouth, intro lines represent a good opportunity for her to actually talk, since they only trigger when she's idle anyway. On the other hand, resistance, first_throat and first_dt all trigger when her mouth is by definition occupied. To avoid losing dialogue lines in bouts of coughing and drooling, I really recommend making these style Thought or Him. Since it's difficult to control whether a first_throat or resistance line will trigger, I usually substitute these for a common custom line type. Putting this together, we get this:
Dialogue Features
Of course, the same philosophy of having her mouth occupied applies to first_dt, however this line will never repeat so there's no need to have a high number of first_dt lines. For this reason, I like to use this as an opportunity for something unique and slightly more complex to happen. I like to call these things dialogue features. A dialogue feature is a combination of several triggers, lines and conditions that (whether taking up lots of coding or little space) gives the player the illusion of a more complex, coherent action or reaction. Examples include slapping her for being too eager, her flailing objections to being pushed down so far, or ejaculating instantly from the triumph of finally penetrating her throat fully.
You can find inspiration for many different such features scattered throughout many of the more elaborate dialogues on the forum - they are too numerous to cover in a guide and any listing could never be complete as you could always compose new features. However one particularly popular and useful feature is to use the pulled_up and pulled_down lines to accomplish crucial plot devices, since these actions are always under the player's direct control and do not affect the game state by themselves. Here's an example:
General lines is another good opportunity for her to speak since they also trigger when idle. This is a good place to hide interesting features, which provides an incentive for the player to take a break from throating her occasionally. Alternately, if she's eager, you could use these lines to express impatience on her part. I also recommend pull_off lines to be in the default speech style only, or else they will be all you hear for the bulk of the dialogue. However, if they can't trigger when she has a cock in her mouth, you're golden. Conversely, vigorous lines need to be Thought or Him if you want a chance to hear them - they can be difficult to trigger at times even if you take these steps.
Using Delays and Line Breaks
Held lines are a mixed bag. If you make them Thought/Him they will trigger very frequently when she's actually held, so you'll need a lot of them (dozens) if you want to avoid repetition until you choke her out. On the other hand, if you make them speech style, it's quite possible that the line will be lost in excessive coughing once she is released. A solution is to use the cyrillic letter Б to introduce a pause. SDT doesn't know what to print for this character, so it prints nothing and pauses for a while instead. So fill those Thought/Him styled Held lines with as many Бs as seem appropriate and see how it plays out and fine tune from there to get the result you want. Also, you can combine these pauses with line breaks (the URL code is %0A to introduce a line break) to really go beyond the timing limitations of the dialogue system as coded in the game.
Simplify and Substitute
The various cum-related lines are an undependable bunch that often stack out each other. Therefore, I usually don't bother with pre_cum and restart lines at all, unless I'd want to use them instead of actual cum lines for some reason. She will have difficulties talking with cum over her face and obviously it will be impossible with cum in her mouth/throat/nose. It always made more sense to me that the guy is the expressive one during ejaculation, and he probably doesn't have time to reflect on exactly where he's cumming. To save lots of time and dia space, I therefore recommend making style Him substitutions for all cum lines, unless it's very important to you to discriminate between them.
Unless you need to, I also recommend AGAINST using head_grabbed, swallow or drool lines as these too are undependable and have a tendency to trigger when you don't want them to, override stuff or be overridden by other lines that want to trigger simultaneously, such as when or after ejaculating. Wake up lines are good to use but since she'll be coughing and choking for a while when waking up, you'll have a better chance of actually seeing them if you make them Thought/Him, or at least start them up like that and make it progress into speech to buy her time to finish coughing.
Troubleshooting
1) I can't get ANY dialogues to work in SDT - Did you enable dialogue in the Options menu check box? Are you loading them in the correct box in the Options menu? Are you using an extremely old version of SDT?
2) MY dialogue won't play at all, but others will - Did you work in a word processor? Then your quotation marks may be poorly formatted and you will need to replace them all manually in a proper text editor.
3) My dialogue plays except for this here LINE - Are you missing a quotation mark or is the formatting lacking in any other respect? If it's a custom line type, is it called properly in its parent line? Is a bad condition that will never be fulfilled preventing the line from being played?
4) All lines are played but this here TRIGGER doesn't do anything - If you're calling a custom line with a trigger, are the names identical? Is there an unfulfilled condition preventing the call? Are you trying to make her speak with a mouthful of cock? Is the trigger actually outside the line's quotation marks, making it useless?
This is a guide for writing your own SDT dialogues. Custom dialogues come in very different levels of complexity, from a few simple lines of spoken text to complex hypnotic adventures, from interactive eroge mini-games to fully automated hentai scenes. Your imagination is the only limit, but it is best to start small! In this guide, I'll go through both the core functions and share my own tips as a dialogue writer on how to make things run more smoothly.
Before We Begin...
First off, a caveat. Resources like these need continous updating since the core game and Loader mods are developing at such a rapid pace, and I'm not sure I'll be able to fulfill that long term. If I'm gone from the forum for several months or more, check out this thread for updates not included in the OP. Or check out the latest dialogues from some popular dialogue writers who are probably using the latest tech. If you have problems with your dialogue, please check the troubleshooting section below before asking for help in this thread.
I've tried to incorporate the wisdom from old threads in this new guide, but in case you're interested in previous dialogue tutorials, check out these threads:
EO's original dialogue guide from 2011
Kona's thread on custom variables
Table of Contents
1. What You'll Need
2. Lines, Triggers, Conditions and Variables
3. What to Use and How
4. Troubleshooting
What You'll Need
There are basically two ways to make a custom dialogue - using the in-game editor or a text editor, such as Notepad. DO NOT WORK IN A WORD PROCESSOR AT ANY POINT. It will ruin everything with auto formatting that's hard to remove or disable. Using the in-game editor can be a good way for some to learn the basics, but this guide assumes you're writing everything from scratch in a text editor, which is the way most dia writers do it.
So make a new .txt file and enter these lines at the top:
all:"CLEAR"
dialogue_name:"name"
And of course change "name" to whatever you want to call your dialogue - ideally, the same thing you named the .txt file. The CLEAR command clears whatever dia the game may have loaded previously. Now you're ready to add your dialogue!
If you want to go beyond this guide as far as dialogue scripting is involved, check out the Loader and in particular gollum's DialogueActions mod (eventually, its extra features will hopefully be included in the core game). But first learn stand, then learn fly, Daniel-san...
Lines, Triggers, Conditions and Variables
This section goes through a few fundamental concepts that it helps to have a basic understanding of to avoid unnecessarily banging your head against the wall. See the spoilers below for a complete listing or lines, triggers, conditions and variables.
A line always has a specific type that determines when the Her or Him model will say whatever it is you've typed. For example, an intro line will be spoken before he deepthroats her and never after, and a head_grabbed line will only be prompted when her head is grabbed. If you have several lines with the same name, one will be chosen randomly at the appropriate time (you can micromanage the order by using custom variables and conditions, see below). You can even make up your own line types from scratch, like so:
custom:"This is a custom line."
All lines share this basic format of type + colon + line within quotation marks. A line will fail unless formated like this. However, since the game doesn't know when it's supposed to use this custom line, you will have to call it up yourself in some other line through a trigger. A trigger causes something to happen in the game and is usually typed in capital letters within brackets, for instance [ARMS_LEGS] moves her arms to her legs and [HOLD] makes him grab her head. You call a custom line by using it as a trigger in another line:
intro:"I will now speak a custom line. [custom]"
This will cause the custom line to be spoken immediately after the intro line has been spoken in its entirety (it doesn't matter where in the line you put the [custom] trigger). If you want to substitute a word or short phrase INSIDE a line, you'll need to use a variable instead. More on that below. There's actually another way to call a custom line after a standard one, and that's using something I like to call conditions. Conditions are used to check, set or change a standard or custom variable, in order to modify a line, only display it during certain circumstances, or changing something behind the scenes when it's called. Conditions are always within wavy brackets at the end of a line, like so:
intro:"I will now speak a custom line." {"next":"custom"}
"Next" conditions that the next line to be played immediately after this intro line will be the line called custom. It doesn't really matter if you use a trigger or a condition to call your custom lines, the result is the same. Another very important use for conditions is to define the style of a line, that is if it's spoken by her or him, or if it's a thought line. Thought and him lines have the benefit of triggering even if her mouth is occupied, which is something I'll get back to in a bit.
There are a few hidden variables within the game that you can set in various ways. One is mood, which can be set via dialogue by triggers such as [HAPPY_MOOD] (or via Options menu). The four moods are also conditions that can be checked so that a line conditioned {"mood":"Happy"} will only play if her mood is indeed happy. Similarly, lines can be conditioned based on his arm positioning (whether he's holding her or not). Variables can also be called mid-sentence by using asterisks, like so:
intro:"Hey* YOU*, this is an intro line."
YOU is a hidden variable that substitutes whatever you've entered as your name in the Options menu. Note that you can include other characters like commas and spaces between the asterisks, so if you haven't entered a name, the above line will simple play like "Hey, this is an intro line." *ME* works the same way but uses the Her model's name as specified under charName in Her character code. YOUR and MY works similarly.
FINISHES is another hidden variable that automatically increases when the Him model cums, so that whenever this variable is called, the appropriate line will be displayed. This can be immensely useful in creating a progressive dialogue. Though you could accomplish the same thing through custom variables, using finishes makes it easier by using a mechanism already hard coded into SDT.
Setting and checking your own custom variables is a more advanced form of dialogue coding that let's you micromanage how the dia will progress. You make up a variable, decide when it changes and can condition lines to played only when it has a certain value. This is coded like a "condition within a condition", like so:
intro:"Hey* YOU*, this is an intro line." {"set":{"intro":"true"}}
This sets the variable intro (which you just made up) to true, telling the game that this intro line has now been played. This can then be used to condition other lines, perhaps intro lines, to only be played when intro is true, that is after this first line has been played, by using check rather than set:
intro:"This is a second intro line, played only after the first." {"check":{"intro":"true"}}
The variable can be a number or string, depending on what's preferable. DO NOT attempt to set and check the same variable in the same line condition, it won't work so you'll need to use several lines to accomplish this. More on using custom variables below, this is just to introduce the concept. If you use custom variables, you can set their initial value when the dialogue is loaded like so:
initial_settings:{"variable1":0,"variable2":"false"}
The formating when using wavy brackets and setting variables is quite important. You can't stack sets of wavy brackets after each other, but must use a comma instead, as per the example above. Also note that straight numbers are without quotation marks, but you must use quotation marks as soon as a non-numerical is part of the variable's value. Many more examples will follow below and hopefully clear this up. The following spoilers list all the available lines, triggers, conditions and variables for easy reference:
//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.
//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.
NOTE: You can manage hands individually if you prefer through [LEFT_ARM_<ACTION>] and [RIGHT_ARM_<ACTION>]
//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.
NOTE: You can manage hands individually if you prefer through [LEFT_ARM_<ACTION>] and [RIGHT_ARM_<ACTION>]
[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]
[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]
[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.
{"next":"lineX"} - Plays lineX as the next line, if possible
{"style":"Him"} - The line comes out in Him style (in blue font and irrespective of her state).
{"style":"Thought"} - The line comes out in Thought style (with a white, foggy text background and even if her mouth is busy).
{"mood":"Normal"} - Plays this line only if her mood is Normal. Works the same with Happy, Angry and Ahegao of course.
{"held":"true"} - Plays this line only if he is holding her head.
{"held":"false"} - Plays this line only if he isn't holding her head.
{"check":{"var":"val"}} - Plays this line only if the variable var has value val.
{"check":{"chapter":2},"mood":"Happy","held":"false"} Plays this line only if the stars align so that the variable chapter has the value 2, her mood is happy, and he's not holding her head (just as an example).
{"set":{"var":"val"}} - Sets the variable var to value val (generic example)
{"set":{"chapter":"+1"}} - Increases the value of the numerical variable chapter by one (generic example)
{"style":"Him"} - The line comes out in Him style (in blue font and irrespective of her state).
{"style":"Thought"} - The line comes out in Thought style (with a white, foggy text background and even if her mouth is busy).
{"mood":"Normal"} - Plays this line only if her mood is Normal. Works the same with Happy, Angry and Ahegao of course.
{"held":"true"} - Plays this line only if he is holding her head.
{"held":"false"} - Plays this line only if he isn't holding her head.
{"check":{"var":"val"}} - Plays this line only if the variable var has value val.
{"check":{"chapter":2},"mood":"Happy","held":"false"} Plays this line only if the stars align so that the variable chapter has the value 2, her mood is happy, and he's not holding her head (just as an example).
{"set":{"var":"val"}} - Sets the variable var to value val (generic example)
{"set":{"chapter":"+1"}} - Increases the value of the numerical variable chapter by one (generic example)
YOU - The name of the Him model as entered through the options meny.
ME - The name of the Her model, such as Asuka.
YOUR - See above
MY - See above
FINISHES - a variable that calls up lines based on how many times he's finished.
finish0:"text0" - what FINISHES displays when he hasn't finished yet, in this case text0.
finish1:"text1" - what FINISHES displays, when called through asterisks, when he's cum once.
finishOther:"textOther" - what FINISHES displays when no specific finish line has been defined for the current number of finishes.
ME - The name of the Her model, such as Asuka.
YOUR - See above
MY - See above
FINISHES - a variable that calls up lines based on how many times he's finished.
finish0:"text0" - what FINISHES displays when he hasn't finished yet, in this case text0.
finish1:"text1" - what FINISHES displays, when called through asterisks, when he's cum once.
finishOther:"textOther" - what FINISHES displays when no specific finish line has been defined for the current number of finishes.
What to Use and How
The best way to write a good dialogue IS NOT to write several variations of every possible line, trigger or other nifty thing in the spoilers above. In fact, not only will it make writing your dialogue a chore, but the experience of running it will be bad, as many lines won't play, come in conflict with each other or execute poorly. This section will elaborate on how to use the dia system practically to make it all work smoothly.
The Intro
You will typically choose between a progressive or a discontinuous intro depending on what you have in mind. A progressive intro features a longer back-and-forth dialogue between Him and Her which is only repeated once. A discontinuous intro features several shorter lines that appear randomly, some of which may be repeated if the intro drags on long enough before he deepthroats her. Hybrid forms are certainly possible, for example using a progressive intro if she starts in one mood, and discontiunous lines conditioned to another mood - or by having several different shorter exchanges between Him and Her. Here's an example:
intro:"Hello there! [intro1]" {"style":"Him","check":{"chapter":0}}
intro1:"[LOOK_UP]Hi *YOU*! I'm gonna suck your cock! [ARMS_BACK][intro2]"
intro2:"[HOLD]Excellent, open wide! [SHOCK]" {"style":"Him","set":{"chapter":"+1"}}
In this example, we introduce the custom lines intro1 and intro2 and call them up through triggers. The first line that sets the snowball rolling so to speak will only come up when it's chapter 0, and as the intro finishes, the variable is increased to prevent repetition. Some appropriate facial expressions and hand positioning spice up the trivial text and makes it much more entertaining. This short progressive intro could be supplemented with additional intro lines that only play on higher chapter numbers if so desired. Or you could rely mostly on resistance lines until he deepthroats her.
intro1:"[LOOK_UP]Hi *YOU*! I'm gonna suck your cock! [ARMS_BACK][intro2]"
intro2:"[HOLD]Excellent, open wide! [SHOCK]" {"style":"Him","set":{"chapter":"+1"}}
In this example, we introduce the custom lines intro1 and intro2 and call them up through triggers. The first line that sets the snowball rolling so to speak will only come up when it's chapter 0, and as the intro finishes, the variable is increased to prevent repetition. Some appropriate facial expressions and hand positioning spice up the trivial text and makes it much more entertaining. This short progressive intro could be supplemented with additional intro lines that only play on higher chapter numbers if so desired. Or you could rely mostly on resistance lines until he deepthroats her.
Since the Her model spends a lot of her time with cock in her mouth, intro lines represent a good opportunity for her to actually talk, since they only trigger when she's idle anyway. On the other hand, resistance, first_throat and first_dt all trigger when her mouth is by definition occupied. To avoid losing dialogue lines in bouts of coughing and drooling, I really recommend making these style Thought or Him. Since it's difficult to control whether a first_throat or resistance line will trigger, I usually substitute these for a common custom line type. Putting this together, we get this:
first_throat:"[resH]" {"style":"Him"}
first_throat:"[resT]" {"style":"Thought"}
resistance:"[resH]" {"style":"Him"}
resistance:"[resT]" {"style":"Thought"}
resH:"A sample line, spoken by him" {"style":"Him"}
resT:"A sample reflection on having a cock pushed down her throat" {"style":"Thought"}
You will want to increase the number of resH and resT lines to avoid repetition of course. This saves space since you'll use the same lines for first_throat and resistance, and also get a nice alternation between Thought and Him lines to keep it more interesting. Unless you use extremely tough throat resistance settings, 5-10 lines total of this type should avoid repetition.
first_throat:"[resT]" {"style":"Thought"}
resistance:"[resH]" {"style":"Him"}
resistance:"[resT]" {"style":"Thought"}
resH:"A sample line, spoken by him" {"style":"Him"}
resT:"A sample reflection on having a cock pushed down her throat" {"style":"Thought"}
You will want to increase the number of resH and resT lines to avoid repetition of course. This saves space since you'll use the same lines for first_throat and resistance, and also get a nice alternation between Thought and Him lines to keep it more interesting. Unless you use extremely tough throat resistance settings, 5-10 lines total of this type should avoid repetition.
Dialogue Features
Of course, the same philosophy of having her mouth occupied applies to first_dt, however this line will never repeat so there's no need to have a high number of first_dt lines. For this reason, I like to use this as an opportunity for something unique and slightly more complex to happen. I like to call these things dialogue features. A dialogue feature is a combination of several triggers, lines and conditions that (whether taking up lots of coding or little space) gives the player the illusion of a more complex, coherent action or reaction. Examples include slapping her for being too eager, her flailing objections to being pushed down so far, or ejaculating instantly from the triumph of finally penetrating her throat fully.
You can find inspiration for many different such features scattered throughout many of the more elaborate dialogues on the forum - they are too numerous to cover in a guide and any listing could never be complete as you could always compose new features. However one particularly popular and useful feature is to use the pulled_up and pulled_down lines to accomplish crucial plot devices, since these actions are always under the player's direct control and do not affect the game state by themselves. Here's an example:
pulled_up:"[NORMAL_STYLE][RELEASE][ARMS_LEGS][HAPPY_MOOD][general]" {"held":true"}
pulled_up:"[FACE_FUCK_STYLE][HOLD][ARMS_BACK][AHEGAO_MOOD][vigorous]" {"held":false"}
This simple dialogue feature makes it so that the player can switch between one mode where she's happily going solo and another where he face fucks her with gusto, by pulling her up. In each case, there is appropriate dialogue (assuming of course you've written it with this dialogue feature in mind) without adding any more unneeded text.
pulled_up:"[FACE_FUCK_STYLE][HOLD][ARMS_BACK][AHEGAO_MOOD][vigorous]" {"held":false"}
This simple dialogue feature makes it so that the player can switch between one mode where she's happily going solo and another where he face fucks her with gusto, by pulling her up. In each case, there is appropriate dialogue (assuming of course you've written it with this dialogue feature in mind) without adding any more unneeded text.
General lines is another good opportunity for her to speak since they also trigger when idle. This is a good place to hide interesting features, which provides an incentive for the player to take a break from throating her occasionally. Alternately, if she's eager, you could use these lines to express impatience on her part. I also recommend pull_off lines to be in the default speech style only, or else they will be all you hear for the bulk of the dialogue. However, if they can't trigger when she has a cock in her mouth, you're golden. Conversely, vigorous lines need to be Thought or Him if you want a chance to hear them - they can be difficult to trigger at times even if you take these steps.
Using Delays and Line Breaks
Held lines are a mixed bag. If you make them Thought/Him they will trigger very frequently when she's actually held, so you'll need a lot of them (dozens) if you want to avoid repetition until you choke her out. On the other hand, if you make them speech style, it's quite possible that the line will be lost in excessive coughing once she is released. A solution is to use the cyrillic letter Б to introduce a pause. SDT doesn't know what to print for this character, so it prints nothing and pauses for a while instead. So fill those Thought/Him styled Held lines with as many Бs as seem appropriate and see how it plays out and fine tune from there to get the result you want. Also, you can combine these pauses with line breaks (the URL code is %0A to introduce a line break) to really go beyond the timing limitations of the dialogue system as coded in the game.
Simplify and Substitute
The various cum-related lines are an undependable bunch that often stack out each other. Therefore, I usually don't bother with pre_cum and restart lines at all, unless I'd want to use them instead of actual cum lines for some reason. She will have difficulties talking with cum over her face and obviously it will be impossible with cum in her mouth/throat/nose. It always made more sense to me that the guy is the expressive one during ejaculation, and he probably doesn't have time to reflect on exactly where he's cumming. To save lots of time and dia space, I therefore recommend making style Him substitutions for all cum lines, unless it's very important to you to discriminate between them.
cum_on_face:"[cumH]" {"style":"Him"}
cum_in_eye:"[cumH]" {"style":"Him"}
cum_in_mouth:"[cumH]" {"style":"Him"}
cum_in_throat:"[cumH]" {"style":"Him"}
cum_in_nose:"[cumH]" {"style":"Him"}
cumH:"Oh God how good it feels, yadayadayada. " {"style":"Him"}
Add several cumH lines, introduce cyrillic pauses, add a progressive exchange mixing it up with Thought lines or whatever. You know the drill.
cum_in_eye:"[cumH]" {"style":"Him"}
cum_in_mouth:"[cumH]" {"style":"Him"}
cum_in_throat:"[cumH]" {"style":"Him"}
cum_in_nose:"[cumH]" {"style":"Him"}
cumH:"Oh God how good it feels, yadayadayada. " {"style":"Him"}
Add several cumH lines, introduce cyrillic pauses, add a progressive exchange mixing it up with Thought lines or whatever. You know the drill.
Unless you need to, I also recommend AGAINST using head_grabbed, swallow or drool lines as these too are undependable and have a tendency to trigger when you don't want them to, override stuff or be overridden by other lines that want to trigger simultaneously, such as when or after ejaculating. Wake up lines are good to use but since she'll be coughing and choking for a while when waking up, you'll have a better chance of actually seeing them if you make them Thought/Him, or at least start them up like that and make it progress into speech to buy her time to finish coughing.
Troubleshooting
1) I can't get ANY dialogues to work in SDT - Did you enable dialogue in the Options menu check box? Are you loading them in the correct box in the Options menu? Are you using an extremely old version of SDT?
2) MY dialogue won't play at all, but others will - Did you work in a word processor? Then your quotation marks may be poorly formatted and you will need to replace them all manually in a proper text editor.
3) My dialogue plays except for this here LINE - Are you missing a quotation mark or is the formatting lacking in any other respect? If it's a custom line type, is it called properly in its parent line? Is a bad condition that will never be fulfilled preventing the line from being played?
4) All lines are played but this here TRIGGER doesn't do anything - If you're calling a custom line with a trigger, are the names identical? Is there an unfulfilled condition preventing the call? Are you trying to make her speak with a mouthful of cock? Is the trigger actually outside the line's quotation marks, making it useless?