The Comprehensive Dialogue Guide (3 Viewers)

Pim_gd

Content Creator
Joined
Jan 25, 2013
http://en.wikipedia.org/wiki/Boolean_data_type
It's just a string in SDT, of course. (That is, a string of characters - a piece of text).
 

Bluey5

Potential Patron
Joined
Aug 22, 2013
Are you saying it's there to be there? I meant does it determine if the variable exits or something. I know what Truth value, I just don't know how it would play a part here. (Example to explain myself: If it is {"intro":0,"introend":"false"}, then does the variable NOT activate, or is it there to be there?)
 

Pim_gd

Content Creator
Joined
Jan 25, 2013
It is a value.
false and true are there to help you.

See them like this...
Code:
initial_settings:{"wasPulledDown":"false"}

pulled_down:"Hey, don't push me!" {"set":{"wasPulledDown":"true"}}

restart:"That was fun, wasn't it?" {"check":{"wasPulledDown":"false"}}
restart:"That was fun! But don't push me next time, okay?" {"check":{"wasPulledDown":"true"}}

Now compare it with this...
Code:
initial_settings:{"wasPulledDown":0}

pulled_down:"Hey, don't push me!" {"set":{"wasPulledDown":1}}

restart:"That was fun, wasn't it?" {"check":{"wasPulledDown":0}}
restart:"That was fun! But don't push me next time, okay?" {"check":{"wasPulledDown":1}}

With the numbers, it's a bit harder to read. Boolean values can simplify your understanding of how a dialogue might work. In programming languages, they're a good way to get or store a firm yes or no - something either is, or something is not.
Now you could just go "wasPulledDown":"well yeah maybe I guess so" and SDT will happily accept it but that's just going to make your dialogue rather unwieldy.

Now if you were to see this in action... you can take just about any dialogue with a non repeating intro... here's one from f93 (Latex model)
Code:
initial_settings:{"introset":"false"}

intro:"[introDone*introset*]"
introDonefalse:"[LOOK_UP]So you're the one who e-mailed me begging for a private photoshoot.ББББББББББББ[intro1]"
intro1:"I just had to know who this* YOU* person was, and I was БББpleasantlyБББ surprised.ББББББББББББ[intro2]"
intro2:"[CLOSE_EYES]A handsome young man with a latex fetish[OPEN_EYES] who was just my type.ББББББББ[intro3]"
intro3:"How about this - I'll suck you off in[LOOK_DOWN] this outfit before you take pictures of me,ББББББББББББ[intro4]"
intro4:"And after that, we can get a little more[BLINK]...БББББББ creative."{"set":{"introset":"true"}}
introDonetrue:"[general]"

You see what will happen here?
intro plays.
[introDone*introset*] - introset is "false", so we get introDonefalse.
introDonefalse plays. This leads to intro1.
intro1 plays. This leads to intro2.
intro2 plays. This leads to intro3.
intro3 plays. This leads to intro4.
intro4 plays. introset is set to "true".
No more lines are played...
until a couple seconds later.
intro plays (because still no deepthroat, I guess)
[introDone*introset*] - introset is "true", so we get introDonetrue.
introDonetrue plays. This leads to general.
And so we manage to play the intro once, and play generic general lines later!
(Once again, example dialogue here courtesy of f93 (link to dialogue thread), go play his dialogues, they're pretty good)
 

Slingerbult

Content Creator
Joined
Sep 15, 2012
Just a small heads up for anyone interested in writing complex dialogues, especially using mods such as Animtools and Dialogue Actions:

Don't rely on her-lines (i.e. lines in the default style, not style Him or Thought). Simple, but it took me long enough to realize. You're in for a world of hurt if the progression of your dialogue is keyed to her having her mouth available at a certain moment to give a witty response. The show must go on, even if she never manages to say that line!

This means, don't use her-lines to set important variables either. The line might never play, and your variable might never be set! If you use them to trigger another line, such as in a progressive intro, make sure that next line can trigger through some other more inevitable means too, if the her-line is botched for some reason. Why? Because you never know where the user of your dialogue will have his mouse cursor at the precise moment, or maybe he's using another cock size that makes it very difficult for her to EVER have her mouth available for speech, or maybe strange combinations of non-standard animtools positions and dialogue hand positioning triggers got in the way.

Trust me, don't use them for important stuff. I learned the hard way. Of course, her being able to speak is an important dialogue feature, but when it DOESN'T work for some reason, it's better to not exacerbate the problem by letting that error destroy the entire dialogue progression as well.
 

f93

Casual Client
Joined
Jul 8, 2013
I've only recently noticed something when rewriting bits of my old dialogues. If you have multiple lines for a finish (eg you have two finishOther lines), the in-game editor only shows the first one as the appropriate wildcard - the second one is finishfinishOther, the third is finishfinishfinishOther, etc. This appears to make it impossible to set multiple lines for one finish (eg if you want several lines that will play after an indeterminate amount of finishes). Only the first finishOther line in the file will ever play.
I'm trying to figure out possible workarounds for this. At the moment, I've got finishOther:"[extra]", with several lines for extra, which appears to work. I just want to know if there's a standard way to do this.
 

Pim_gd

Content Creator
Joined
Jan 25, 2013
I present to you a new dialogue trick!
Reactive "shut up" lines for abusive dialogues! (Yay, abuse~)
dialogue_name:"Shut up!"

all:"CLEAR"
intro:"[shutup]Hello hello hello hello hello hello hello hello hello hello hello[hello]"
hello:"You didn't stop me!" {"style":"Thought"}
shutup:"Shut your trap!" {"style":"Him"}
interrupt:"-mllow!"

How does it work?
When you have a trigger that points to a line (such as [shutup] or [hello]), SDT sets that as the next line to run.
So in this example, intro is called...
intro:"[shutup]Hello hello hello hello hello hello hello hello hello hello hello[hello]"
now lets change this line so I can explain it a bit easier
we'll use this intro line
intro:"Hi! [shutup]Hello hello hello[hello]"

But SDT interprets triggers as it plays.
So here's what it does...

Start playing line by splitting line into words
During the playing of the line,
for each word as it comes up,
if the word is a trigger...
... then check to see if that's an action trigger (a trigger that does something, like [COUGH] or [NORMAL_MOOD]). If that's true...
... then perform that action.
... if it's not an action trigger, then look if we have lines named like the trigger. Set that as the next line to play.
... if the word is not a trigger, display the word character by character.

So let's view this line getting played twice...
Once normally...
intro:"Hi! [shutup]Hello hello hello[hello]"

start display
set style speak
Hi!
set shutup as next line
Hello
hello
hello
set hello as next line
play next line
next line is hello
play hello
hello:"You didn't stop me!" {"style":"Thought"}
set style thought
You
didn't
stop
me!
end display

And once with him interrupting.

start display
set style speak
Hi!
set shutup as next line
Hello
h
(at this point, cock is inserted)
add interrupt
-mllow!
wait for mouth to clear or timer to expire
if mouth clears, continue line from last word
if timer expires, play next line
(timer expires)
play next line
next line is shutup
play shutup
shutup:"Shut your trap!" {"style":"Him"}
set style him
Shut
your
trap!
end display

And that's how it works, and that's how you can add reactive dialog!
You don't need to use him style for the reactive line - you can have that thought style, for instance.
So what can you use this for?
- more interactive dialogues "Shut up!" and "Whoa, he's eager!"
- Option choosing, for ... positions? Like you have on callcenters (for english, press 1.)
-- an example
initial_settings:{"position":0}
intro:"[intro*position*]"
intro0:"Please select your style of service by inserting your cock.[pickPosition]"
pickPosition:"[pickPosition1]How about a blowjob?БББ БББ.БББ.БББ.БББ[pickPosition2]Okay, how about I stroke you with my hand, then?БББ БББ.БББ.БББ.БББ[pickPosition3]Ehh... Both hands?БББ БББ.БББ.БББ.БББ[pickPositionNone]"
pickPositionNone:"Come on, you have to pick something! Let's try this again.[intro0]"
pickPosition1:"Yay, a blowjob! Blowjobs are fun![intro]" {"set":{"position":1}}
pickPosition2:"Eh, a handjob? Is it really so much different when I do it?[intro]" {"set":{"position":2}}
pickPosition3:"Wait, so you don't want me to suck it, you don't want me to rub it, but when I offer to do it with both hands then HELL YES you want that? You're weird.[intro]" {"set":{"position":3}}
intro1:"[ARMS_LEGS]Can I start sucking now?"
intro2:"[RIGHT_ARM_LEG][LEFT_ARM_HAND_JOB]See, it's just the same as when you do it. Up, and down... up, and down..."
intro3:"[ARMS_HAND_JOB]Pfff... it looks like I'm trying to strangle a snake. This is silly. Hurry up and cum so I can get back to what I was doing."

I believe you'll be able to come up with your own creative uses.

I'm not sure whether I actually came up with something new, but I hadn't seen it anywhere yet, so I thought I'd share this.
 

karlpaws

Potential Patron
Joined
Aug 12, 2013
I took your idea and used it to modify something I had laying around. The interrupt works a lot better than the pull up or pull down options I was using. (pull up to change, pull up to change again, or push down to keep that option and move to the next choice.

One thing I noticed is that if you have the followup lines in either thought or him style, they will play when the interrupted line is done. That way you know when the timer is up. Otherwise you're left guessing, especially with a longer line, and it might not trigger the way you wanted. This is probably what would be desired normally... from your example: her talking, him doing something to shut her up, and either he speaks with the action or she reacts with a thought. You could use a thought line to set your variable, then call a verbal line if needed.

For creative uses a dialog could change hairs or backgrounds based on choices given, either at the start or later on if you wanted to swap locations or girls. Loading a new charcode could also swap in new girls or guys for that orgy or pulling a chain scenario someone thought about. (I might work on that actually.. I have a couple scenarios that might work with.)

This does not have a lot of dialog in it, to keep it short and simple. You can hold her down to get different lines based on what you choose, and it will play a line based on your choice when you cum as well.
 

Attachments

Reactive_interrupt_dialog.txt
13.6 KB · Views: 258

Slingerbult

Content Creator
Joined
Sep 15, 2012
This reactive interrupt thing is a great invention! I actually used somethhing very similar in the first part of my school saga - she is in a babbly loop and changes mood through the line, interrupt her at the right time to change her mood and bypass the loop (this was before we had arbitrary sets and checks). It is somewhat limiting story-wise though (as in, you have build the plot so that player input based on cock insertion interrupt makes sense), but then again so is pulling up/down. Anyway, a good tool to have in the box, as they say.
 

Corgalas

Vivacious Visitor
Joined
Feb 11, 2013
Does anyone know how to produce the delay character ('Б' for example) using alt-codes or something?
Yes, I could copy and paste, but I want to actually know how to generate it on my keyboard for specific purposes.
 

jase

Vivacious Visitor
Joined
Jun 4, 2014
I'm trying to make a dialog work for vanilla first, so I can't use any of the nifty features I've taken for granted. Is there any way to compare variables with each other? It would be easier than what I'm trying to do, which is subtract one from another by recursion. This is mostly rough pseudocode:

expense:[expense] {"check":{"cost":>0},"set"{"cash":-1,"cost":-1}}
expense:[total] {"check":{"cost":<=0}}

<...>

total: you still have cash left {"check":{"cash":>0}}
total: Insufficient cash! {"check":{"cash":<=0}}

oh, and a similar one for adding:
income:[income] {"check":{"pay":>0},"set{"cash":+1,"pay":-1}}
income:[total] {"check":{"pay":<=0}}

Ideally "cash" would only be modified by functions like these, after the initial setting. "pay" and "cost" would be set to whatever amount you needed to add or subtract.

Is this doable in vanilla? Can numeric variables go negative? Can other lines interrupt by firing, or does it pause everything else until done?

EDIT: rewrote with more illustrative var names.

EDIT: It occurred to me that none of the vanilla scripts I've looked at used check or increment. So I assume those features are in the woefully undersupported SDTDialog and dialogpatch mods. This is the ugly workaround I've used instead:

initial_settings:{"int":0}

inc0:{"set"{"int":1}}
inc1:{"set"{"int":2}}
inc2:{"set"{"int":3}}
inc3:{"set"{"int":4}}
-Use: "[inc*int*]"

dec1:{"set"{"int":0"}}
dec2:{"set"{"int":1"}}
dec3:{"set"{"int":2"}}
dec4:{"set"{"int":3"}}
-Use: "[dec*int*]"
Now there's a hard limit based on how many times I want to reproduce the lines, but a 1-10 scale would be enough for the space of a session.
 

Woopti

Potential Patron
Joined
Feb 11, 2015
I'd love to make a good dialogue.. Sadly when i'm reading that entire page my brain sort of freezes up at some point and i can't make much of it. It'be great if someone could make a video totorial on it showing how it's done, step by step. How it looks when done right and so forth, whilst talking the viewer true the proces.

It would be much eazier for me to put my finger on what's happening how.
I'd appreciate that allot. ;)
 

Pim_gd

Content Creator
Joined
Jan 25, 2013
Honestly video tutorial would be a pain.
Just open SDT, go to Dialogue, edit, save. You'll get SDTs default dialogue that way. Now try playing with it a bit.
 

nmwn

Potential Patron
Joined
Mar 20, 2015
Hello!
That's my first post here. I would appreciate some help with coding.

I have a problem with executing double check. That means two conditions based on the same variable, fulfilled at the same time. For this case I used "counter" variable - I belive it doesn't really matter what name variable gets?

I want some of the lines to increase that number. This part seems fine, lines basing on single "check" are working great. They don't trigger until counter comes in their range.
Unfortunately I can't force a line to appear only in fixed range of counter (from-to). In this case it's supposed to appear when counter is somewhere beetwen 100 and 200. That's the code I have used:



all:"CLEAR"
dialogue_name:"Counter Test"
initial_settings:{"counter":0}

works
general:"Your current counter value is *counter*. Just added 30 units! You can see this message below 100 units!" {"check":{"counter":"<100"},"set":{"counter":"+30"}}

works
general:"Counter value is now *counter*. Just granted 15 units! You see this message above 200 units!" {"check":{"counter":">199"},"set":{"counter":"+15"}}

doesn't work
general:"This message is supposed to appear in 100-199 units range ONLY. You are *counter* now. Another 20 units have been granted." {"check":{"counter":">99","counter":"<200"},"set":{"counter":"+20"}}

doesn't work
general:"This message is supposed to appear in 100-199 units range ONLY. You are *counter* now. Another 20 units have been granted." {"check":{"counter":">99"},"check":{"counter":"<200"},"set":{"counter":"+20"}}


As you can see I was trying to invent proper code change, but I failed. If you don't want to test it, here are results. Messages marked as red used to appear all the time. In fact this is not double-check but any-check. Number that fulfills ANY check is accepted. Therefore it can be number above 99 OR below 200. Therefore it can be ANY number. Therefore this line can be displayed ANYTIME.

How to write a request for fulfilling BOTH conditions at once? I belive there is some way to write it, that would make my work way easier. Of course I did some research and developed this:

bypass
general:"[intercheckline]" {"check":{"counter":">99"}}
intercheckline:"[actualtext]" {"check":{"counter":"<200"}}
actualtext:"This is triple message. Current value is *counter*. Just granted 5 units!" {"set":{"counter":"+5"}}

Yet I still would like to enforce it with proper code instead of adding 2 lines extra.
 

Fleack

Avid Affiliate
Joined
Nov 20, 2014
You need a second variable.

Create a new variable called Counter2. Every time you change the Counter variable, you change the Counter2 variable as well so they're always the same value. So this:

general:"This message is supposed to appear in 100-199 units range ONLY. You are *counter* now. Another 20 units have been granted." {"check":{"counter":">99","counter2":"<200"},"set":{"counter":"+20","counter2":"+20"}}

Here's an example from my dialogue:
{"style":"thought","set":{"cuminMR":2,"mood":"+1","mood2":"+1"},"check":{"mood":">25","mood2":"<70","atv_position":"==2","animtools":38}}
 

nmwn

Potential Patron
Joined
Mar 20, 2015
Thank you very much, that worked perfectly!

I was trying to make counter2 automaticaly equal to counter1 (so I don't need raise both counters at the end of every line) but it doesn't worked like that. Never mind anyway, it's very nice as it stands!



Here are another two questions I would like to ask.

1.) Is this possible to raise value of counter by variable or pre-defined value?

Let's say at the top of dialogue I let user adjust amount of bonus points granted for some special, more spicy lines. Shortcuts stands for small bonus, medium bonus, large bonus. Here's the field:

BONUS POINTS SETTINGS
sb:2
mb:5
lb:10

Then I try to execute that in dialogue:

initial_settings:{"counter":0,"counter2":0,"sb":2,"mb":5,"lb":10}

works - regular raise
held:"This is regular line! Now value1 is *counter* and value2 is *counter2* Enjoy standard 20 units!" {"set":{"counter":"+20","counter2":"+20"}}

doesn't work - summoning particular line
held:"This is line with bonus! Now value1 is *counter* and value2 is *counter2* . Just granted regular 20 units and a small bonus!" {"set":{"counter":"+20+[sb]","counter2":"+20+[sb]"}}

doesn't work - summoning particular variable
held:"This is line with bonus! Now value1 is *counter* and value2 is *counter2* . Just granted regular 20 units and a medium bonus!" {"set":{"counter":"+20+*mb*","counter2":"+20+*mb*"}}

held:"That's the line to show that above two methods failed. Unfortunately value1 is *counter* and value2 is *counter2*"

Last line shows that this code won't do maths as I expected, but will simply replace a number with the text (in this case with +20+[sb] or with +20+*mb*). Is it possible to write code doing simple maths? I'd like to have calculations (mostly addition and subtraction) with two variables/values/lines/whatever, lets say *X* and *Y* or as meant above *regular* and *bonus*, with possibility to adjust their values at the top of the dialogue. This way I'd be able to change the pace of counters' rising (therefore how fast specific events are triggered), with changing just few numbers at the top of the document. Is that possible, or "set" command can't do any calculations?




2.) I'm curious about that part:

"atv_position":"==2","animtools":38

I've seen animtools in action, I have them somewhere here and they are fun! I assume you can trigger usage of animtools position with a dialogue command? How to do it? Would you mind explaining these two commands above, then giving just some basic tips about animtools usage in dialogue?

I just started to learn how to write these codes, trying to figure it out by myself as much as possible. When I can't solve it personally then I ask for advice here. Thanks in advance!
 

Users who are viewing this thread

Top


Are you 18 or older?

This website requires you to be 18 years of age or older. Please verify your age to view the content, or click Exit to leave.