Tease AI Scripting Overview Part 4: Edging and CBT

Webteases are great, but what if you're in the mood for a slightly more immersive experience? Chat about Tease AI and other offline tease software.

Moderator: 1885

Post Reply
User avatar
1885
Explorer At Heart
Explorer At Heart
Posts: 648
Joined: Fri Jul 08, 2011 4:27 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Tease AI Scripting Overview Part 4: Edging and CBT

Post by 1885 »

Welcome to Part 4 of the Tease AI script overview. Before we get started with Edging and Edge Taunts, let's take a real quick look at the flow of a Tease AI session again. As you remember from Part 1, Tease AI flows like this:

Start -> (Taunts -> Module -> Link) -> End

The domme will taunt you as you stroke for a certain amount of time, then move to a randomly selected Module. This transition is seamless, so you will still be stroking when each Module begins. At some point in each Module, you will be told to stop stroking, or you will be told to edge. You might be told any number of things in addition to that, but every Module will involve stopping or edging (and then stopping) at some point. So how does edging work when writing Tease AI scripts? Well, let's make a very small Module and see for ourselves:

Image

Looking at this you might be thinking, "Is...this a complete Module? There's nothing here!"

Modules can be much more involved and interesting than this, but yes, this is a complete, functional Module that will work in Tease AI. When Tease AI reaches the @Edge Command, the script pauses itself as the domme begins using Edge Taunts. Once the user says he's close, the program will automatically tell him what to do (stop stroking or hold the edge. If the domme has the user hold the edge, then she'll start using Hold The Edge Taunts, which folow the same principle. Once the domme is finished making him hold the edge, she'll tell him to stop). Once the domme tells the user to stop, the program continues with the script. That's why as a scripter, you don't have to worry about writing things for the domme to say as the user gets close, or try to map out how long that will take. It also means that there's never any pause as the domme "waits" for the user to edge. The domme in Tease AI remains engaged as you edge, taunting you about getting close in any wicked way you can think of. As a scripter writing a Module, all you have to do is use then @Edge command, and then keep writing from the point the user was told to stop. Stopping at the edge or holding the edge is randomly decided by the domme, which means the user will never know exactly what the domme will do.

So what can we do with Edge Taunts? Same thing we do with Stroke Taunts! Let's make a few right now:

Image

As you try to get close for the domme, she'll randomly choose a line from this list and taunt you with it. And since this is a List-type script, we can use Command Filters to enhance the experience:


Image

You can also use Commands as well:

Image

Now there's one Command Filter that's unique to Edge Taunts, and that's @LongEdge. To understand this Command Filter, let's take a quick look at the Sub Settings Panel:

Image

If you look in the lower right-hand corner, you'll notice a section where the user can set a range for "Long Edge Threshold" in seconds. What this means is, once the user has passed this amount of time after initially being told to get to the edge, the domme will consider that as taking a long time to get to the edge. Each user can set this value low or high depending on his own physical nature, or the program can look at how long he takes to get close on average if he checks the "Use Avg" box. You'll notice in the "Performance" section that two different average times to edge are tracked - While Stroking and Rest. (In this picture, the times say "WAIT" because the program requires you to edge 5 times in each case before it creates an average, and I personally have not used the program to edge since my last settings reset, I was working on other features) The program keeps track of two different averages depending on whether or not the user was already stroking when told to edge. I think this is important, because personally I'll have much different edge times if I'm told to get close after I've been stroking for a while, compared to getting close from nothing at all. When the "Use Avg" box is checked, the program knows which average to use for any given situation.

So how can this help us make good Edge Taunts? With the Edge Taunt-specific Command Filter "@LongEdge". These are simply Taunts that the domme will only start using once the user is considered edging for too long. Let's add a few Taunts to our Edge Taunts using this Command Filter:

Image

With this Command Filter, and the options each individual user has for determining when it activates, this keeps edging expectations from the domme relevant and tailored to each individual who uses Tease AI. I'm sure you've probably played through more than one webtease where the domme tells you to edge, but then suddenly stops everything because you didn't get close enough in time - even though you really NEEDED more time to get close like she was asking. What's even worse is when the tease will set you back to an earlier point as a result of this and you have to do large sections of it over. For me, it just gets to the point where I try to anticipate those sections and just click the "Edge" button to progress, even though I wish I could just keep playing through at my own pace. With Tease AI, every individual user's pace can be exactly accounted for, with no extra effort required from scripters.

Of course, now that we're tailoring what "taking too long to edge" means for each person, we can give them the option to get punished for taking too long if they wish. This brings me to the Edge Taunt-specific Command - @InterruptLongEdge

Tease AI uses a type of script called Interrupts which we'll get more into later. But for now let's just describe them as doing exactly what it says on the tin - They interrupt the action and move you to something else. When combined with Tease AI's Response system, they give you the ability to affect the program in very powerful ways, without anything needed to be hard-coded. But we'll get more into Responses and Interrupts next time. For now let's focus on a System Interrupt, @InterruptLongEdge. Let's use a few in our Edge Taunts, and then walk through what happens when the program calls them:

Image

As you can see, these will only be called if the user has been edging too long and the "Long Edge Interrupt" box is checked. So what happens when the @InterruptLongEdge Command is used? The program looks in the Interrupt folder and checks for all files that begin with "LongEdge_". It then randomly selects one of these files and runs it as a script. Let's take a look at one in my domme's folder called "LongEdge_I Don't Think You're Ready.txt":

Image

With this Interrupt, the domme will have the sub stop stroking. Every Interrupt is considered a Module, so when it gets to the @End Command, it will move on to a Link script, that will cycle it back to more stroking as the Taunt cycle begins again. Like a Module, you can do anything the scripting system allows in an Interrupt - be as imaginative as you want.

So now that you know how edging works, what about holding the edge? This is actually even simpler : D

Any time you tell the domme you're close to the edge, she will automatically decide what to do based on her level and a couple other factors. The domme decides whether you should stop stroking or hold each edge. This, combined with many other aspects of Tease AI help us create a very unique experience across many playthroughs, even in cases where we might repeat the same scripts! Now you might be thinking that spontaneity is great, but is it possible for the scripter to force the domme to make certain choices for the sake of a scenario? Yes it is! The following Commands are available to influence the domme's decision or leave it up to her:

@Edge - Domme decides whether you hold it or stop stroking
@EdgeHold - Domme will make you hold it when you get close
@EdgeNoHold - Domme will tell you to stop stroking when you get close
@EdgeToRuin - Domme will make you ruin the orgasm after deciding whether to make you hold it or not
@EdgeToRuinHold - Domme will make you hold then ruin it
@EdgeToRuinNoHold - Domme will make you ruin it the second you get close
@EdgeToRuinSecret, @EdgeToRuinHoldSecret, @EdgeToRuinNoHoldSecret - Just like the previous three EdgeToRuins, except the domme won't taunt you about it or let you know it's coming

As you can see, we can even have the domme ruin an edge if we want. This lets us create some pretty great Edge Taunts as well:

Image

@RuinTaunt is a Command specific to Edge and Hold The Edge Taunts, and will only be randomly called if the secret options for EdgeToRuin weren't used. Yeah... Ruined orgasms are pretty great.

But getting back to holding the edge now. Once the domme tells the user to hold the edge, she starts drawing from Hold The Edge Taunts until she decides to let him stop. We can take a look at a few of mine just to get an idea of how they look:

Image

So, exactly how long does the domme keep us on the edge? As you can see from the Sub Settings panel above, we have two choices: We can set our own hard limit in seconds, or we can set that value to 0 for no max amount. That doesn't mean you could hold the edge indefinitely, or even necessarily for a long period of time. That simply means the domme will decide her own maximum amount of time based on her level. A level 1 domme probably won't hold you there for longer than 30 seconds at MOST, where as if you leave it in the hands of a level 5 domme... All I can say is godspeed, my son. There's even some nice Command Filters for Hold The Edge Taunts available for people who like holding the edge for prolonged periods of time, and you can imagine at what point they become active:

@1MinuteHold
@2MinuteHold
@3MinuteHold
@4MinuteHold
@5MinuteHold
@10MinuteHold
@15MinuteHold
@30MinuteHold
@45MinuteHold
@60MinuteHold
(Yes, some of us are masochists)

So now that we know how Edging and Holding The Edge works, let's talk for a minute about how Tease AI handles CBT, because it uses a very similar system. To understand how the CBT system works, let's look at in use in one of the Modules I've already created:

Image

You probably noticed the use of @EdgeNoHold there, so you know she's making us edge but we'll never end up having to hold it in this case. But a little further down we see the Command @CBTBalls, but no actual CBT instructions. That's because, much like Edging, CBT is handled automatically by the program and resumes at the same point in the script when the CBT has finished. So what happens in this case when @CBTBalls is called? Let's find out by taking a quick peek at the domme's CBT folder:

Image

When CBTBalls is called, it the program randomly selects a line from CBTBalls_First.txt. Let's look at an excerpt from that file:

Image

If the domme decides to keep going, all subsequent instructions are pulled from CBTBalls.txt. Let's take a look at an excerpt from that file now:

Image

The first thing you'll notice is the new Command Filter, @CBTLevelX. If you look back to the Sub Settings panel screenshot, you'll notice a setting for CBT Level. This allows the scripter to filter CBT commands by severity, and the user to only be given commands that fit his personal CBT capacity. Once the domme is satisfied that she's tortured you enough, the tease picks back up at where @CBTBalls left off in the script. There's three possible @CBT Commands:

@CBTBalls - Outlined above
@CBTCock - Works the same as balls, just focuses on the cock
@CBT - Domme randomly decides between administering CBT to the user's cock or balls

Now you may have noticed that the sub also has the option to disable either aspect of CBT. If the sub has a CBT option disabled when it is called, the script will simply keep moving forward instead of doing the CBT routine. It will also provide feedback for one of the best aspects of Tease AI's interface, but we'll have to get into that a little later down the line. : )

I'll leave this here for now. In the next part I'll be discussing Responses and Interrupts, which will show you two of the most powerful features of Tease AI, and how they make the potential of scripting for this program nearly limitless.
Image
djord
Explorer
Explorer
Posts: 7
Joined: Sat Aug 15, 2015 7:11 am
Gender: Male
Sexual Orientation: Straight
I am a: Submissive

Re: Tease AI Scripting Overview Part 4: Edging and CBT

Post by djord »

So much awesome! I really enjoy what you've done with this program!

My first question is, is there a way to have the list items in CBTBalls, (or CBTCock), call out to a script? I've tried using:
Going to Ball_Torture01! @Interrupt(Ball_Torture01)
Going to Ball_Torture02! @Interrupt(Ball_Torture02)
Which works, but not very reliably. I was hoping to be able to use the CBT lists to randomly select punishment scripts/modules instead of the one liner method.
User avatar
1885
Explorer At Heart
Explorer At Heart
Posts: 648
Joined: Fri Jul 08, 2011 4:27 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: Tease AI Scripting Overview Part 4: Edging and CBT

Post by 1885 »

djord wrote:So much awesome! I really enjoy what you've done with this program!

My first question is, is there a way to have the list items in CBTBalls, (or CBTCock), call out to a script?
Which works, but not very reliably. I was hoping to be able to use the CBT lists to randomly select punishment scripts/modules instead of the one liner method.
Can you clarify what you mean by "not very reliably"? What behavior does it do that makes this an unreliable method? This isn't something I've actually tried to do before so, I'm interested to hear what's happened in your attempts.

I can think of a couple ways to do this in the scripts themselves, such as stacking @Chance Commands, like:
  • I want to punish those balls a bit @Chance50(CBT2-3)
    @NullResponse @Interrupt(Ball_Torture01)
    (CBT2-3)
    @NullResponse @Chance50(CBT3)
    @NullResponse @Interrupt(Ball_Torture02)
    (CBT3)
    @NullResponse @Interrupt(Ball_Torture03)
But that's really not ideal. I would rather hear what's unreliable about calling Interrupts from List scripts like CBTBalls and make them work correctly so you can do it like you originally tried to. Let me know and I'll try to get it into a patch.
Image
djord
Explorer
Explorer
Posts: 7
Joined: Sat Aug 15, 2015 7:11 am
Gender: Male
Sexual Orientation: Straight
I am a: Submissive

Re: Tease AI Scripting Overview Part 4: Edging and CBT

Post by djord »

I'm attempting to see if the Interrupt will catch in either of the CBTBalls files, but it seems to wait until the last iteration to allow the @Interrupt.

Domme Level 5
Apathy Level 5

The files I've created for testing purposes:

Scripts/Domme/Vocabulary/Responses/Test.txt
Spoiler: show
[run test]
Going to CBTBalls @CBTBalls
[Before Tease]
Going to CBTBalls @CBTBalls
[Before Tease End]
[First Round]
Going to CBTBalls @CBTBalls
[First Round End]
...
Scripts/Domme/CBT/CBTBalls.txt
Spoiler: show
In CBTBalls.txt Going to LV501BT @Interrupt(LV501BT)
In CBTBalls.txt Going to LV502BT @Interrupt(LV502BT)
Scripts/Domme/CBT/CBTBalls_First.txt
Spoiler: show
In CBTBalls_First.txt Going to LV501BT @Interrupt(LV501BT)
In CBTBalls_First.txt Going to LV502BT @Interrupt(LV502BT)
Scripts/Domme/Interrupt/LV501BT.txt (LV502BT.txt follows the same template)
Spoiler: show
Welcome to Level 5.01 Ball Torture!
Please type y to continue or n to exit
[y] I'll accept that input #SubName! @Goto(Back)
[n] Ok, let's exit the tease @EndTease
@DifferentAnswer Try again
(Back)
Looping back to where I came from!
@End
This is what happens:
Spoiler: show
01:10 AM djord: Hello Goddess
01:10 AM Goddess: Hello djord :)
01:10 AM djord: run test
01:10 AM Goddess: Going to CBTBalls
01:10 AM Goddess: In CBTBalls_First.txt Going to LV502BT
01:10 AM djord: text
01:10 AM Goddess: In CBTBalls.txt Going to LV501BT
01:10 AM djord: text
01:10 AM Goddess: In CBTBalls.txt Going to LV501BT
01:10 AM djord: text
01:10 AM Goddess: Welcome to Level 5.01 Ball Torture!
01:10 AM Goddess: Please type y to continue or n to exit
01:10 AM djord: y
01:10 AM Goddess: I'll accept that input djord!
01:10 AM Goddess: Looping back to where I came from!
01:11 AM Goddess: After all that I bet your aching cock could use a little break
01:11 AM djord: run test
01:11 AM Goddess: Going to CBTBalls
01:11 AM Goddess: In CBTBalls_First.txt Going to LV502BT
01:11 AM djord: y
01:11 AM Goddess: In CBTBalls.txt Going to LV502BT
01:11 AM djord: y
01:11 AM Goddess: In CBTBalls.txt Going to LV502BT
01:11 AM djord: y
01:11 AM Goddess: Welcome to Level 502 Ball Torture!
01:11 AM Goddess: Please type y to continue or n to exit
01:11 AM djord: n
01:11 AM Goddess: Ok, let's exit the tease
User avatar
1885
Explorer At Heart
Explorer At Heart
Posts: 648
Joined: Fri Jul 08, 2011 4:27 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: Tease AI Scripting Overview Part 4: Edging and CBT

Post by 1885 »

djord wrote:I'm attempting to see if the Interrupt will catch in either of the CBTBalls files, but it seems to wait until the last iteration to allow the @Interrupt.
Okay, I'll verify it but judging by that it seems that I forgot to have Interrupts cancel out of @CBT routines. This should be easy enough to fix so that your scripts will work as expected, and I'll get that in the next patch. I have a bit to catch up on and loose ends in the code to address from my hiatus, so please bear with me but I'll get this sorted for when the next patch makes it out.
Image
djord
Explorer
Explorer
Posts: 7
Joined: Sat Aug 15, 2015 7:11 am
Gender: Male
Sexual Orientation: Straight
I am a: Submissive

Re: Tease AI Scripting Overview Part 4: Edging and CBT

Post by djord »

Awesome! Thank you! :)
Post Reply

Who is online

Users browsing this forum: Chopin1990d, SkyLigth and 27 guests