Rather than begin by explaining the Response system, I want to start by showing it in action. The follow pictures are screenshots of a brief playthrough I went through before setting up to write this overview. Nothing was prepared or set up in advance, I just ran the program in its current state and let whatever happen, happen.
What you're seeing here is a Start script leading into a full round of Taunts and halfway through a Module. If I've done my job right, this seems as real an online teasing exchange as any you could come across. But what I really want to draw your attention to here is my repeated use of the phrase "I'm aching so bad", particularly what was happening in the session each time I said it:
Before we got started:
After I started stroking for the first time09:15 AM 1885: ok lol I'm aching so bad mistress
09:15 AM Elizabeth: but we haven't even started yet -grin-
As I was stroking to get to the edge09:16 AM 1885: thank you mistress.... I'm aching so bad
09:16 AM Elizabeth: if you're aching already, i'm about to have some real fun -wicked grin-
After she told me to stop stroking09:21 AM 1885: oh fuck I'm aching so bad
09:21 AM Elizabeth: just think how much worse it will be when you get close for me -smiles innocently-
Now hopefully right about now you're going "WTF what? How?! Tell me how!" As tempted as I am to reply "Dark magicks, bitches" and drop the mic, that would be a shame because I've actually designed the Response system to be extremely easy for scripters to use. In fact, by making the program keep track of virtually any state the sub can be in automatically, one of the most complex abilities of Tease AI is actually one of the most easy to utilize.09:23 AM 1885: I'm aching so bad
09:24 AM Elizabeth: just think how much worse it will be when i make you start stroking again lol
To be clear, the Response system in Tease AI is the ability for the user to type anything, at any time, regardless of script and have the domme respond accordingly. So how does this work? The first thing to keep in mind is that Tease AI keeps track of what the sub is doing at any given time. This is not something you have to script for, it is handled automatically by the program throughout the session. Here's a list of some various states:
Before Tease - Period of time during the Start script
First Round - The first Taunt cycle
Stroking - Sub is stroking
Edging - Sub is stroking to the edge
Holding The Edge - Sub is holding the edge
CBT Cock - Sub is enduring cock torture
CBT Balls - Sub is enduring ball torture
Chastity - Sub is in chastity
After Tease - Domme has finished orgasm decision and is saying goodbye
Since these states are tracked, it gives me the ability to create Response files which exist in their own directory in the domme's Vocabulary folder. Let me show you one of those response files that I've named "I'm aching.txt", and I'm willing to bet it will make immediate sense having seen the above transcript:
So what you're looking at here is one of the domme's response files. She has many like it in her Vocabulary, and scripters can add and share as many as they wish. Here's how they work:
Any time the user types something in the chat window (outside of Multiple Choice branches, where the programs is looking for specific input), the program takes what the user typed and compares it to every Response file the domme has until it finds a match. It does this by making three passes of all the files, looking at the first line of each file. As you can see, the first line has a group of words or phrases separated by commas. The program looks at each word or phrase looking for a match to what the user said, loosening the search parameters with each pass as follows (and I"m going to add the first line of that file again for easier viewing):
First Pass: The program looks for an exact match of what the user said. During this pass, Tease AI would only find a match if I said "I'm aching" or just "aching". Tease AI would NOT find a match in this pass if I said "I'm aching so bad"[I'm aching, I am aching, ache]
Second Pass: The program looks to see if what the user said CONTAINS an exact match to the words/phrases in brackets. In the this pass, Tease AI would find a match to "I'm aching" and "I'm aching so bad", but it would NOT find a match to "I'm fucking aching so bad"
Third Pass: The program checks to see if what the user said contains matches in any order and location of words. In this final pass, Tease AI would find a match to "I'm aching", "I'm aching so bad", "I'm aching so fucking bad", "I have a toothache" (As you can see, the third pass becomes so loose as to potentially be ridiculous, but in my testing it has proven effective far, far more times than it's proven laughable. I imagine I'll have a better idea if this needs to be tweaked during open development, but for now that's how the system works.)
If the system finds nothing after three passes, the domme simply doesn't respond to it. (Case and punctuation don't matter when matching Response files. If a bracket contains "I'm aching", that will exact match to any and all of the following the user might type: I'm aching, Im aching, i'm aching, im aching, Im ACHING)
(It's worth noting that there are also such things as System Response files. These are very similar, but they involve some hard-coded trickery to allow me to do certain things in regard to common statements that require the domme's attention, such as the sub asking to stroke, speeding up, slowing down, begging to stop etc. These have much more limited customization, so they're not important to the scope of this overview. Just know that when searching for matches, System Response files take priority over normal Response files.)
Once a match is found, the program then stops searching and looks at the Response file where it found the match. It then randomly selects a line from however many are present and displays it as the domme's response. (Since Response files are List-type scripts, Command Filters can be used here as well to limit appropriate responses. You can add lines with Commands too "I guess this probably doesn't help any, does it? @ShowBlogImage" Another thing to note about Response files is that not every possible sub state needs to be in them. If you like, you can create Response files that only have responses if the sub is holding an edge, or enduring CBT or in Chastity. However it may be a good rule of thumb to keep all sub state brackets in the file as a template for yourself or others to add options later. It's fine to keep sub state options with nothing between them, the program will simply not respond and move on)
Over time, as more and more Response files get created and shared, the domme's Vocabulary will be tightened and honed. Each user can also tweak or add any Response words they like, I intend for these files to be as easy to edit as the Keyword files are.
So now we see how we can easily create Response files that let the domme respond to the things the user says. But what if we don't just want her to respond, what if we want her to possibly react? For that we just need to utilize another powerful feature of Tease AI - Interrupts. To demonstrate, I'm going to create one from scratch right now with the Command @Interrupt() (Don't worry about the parentheses, we'll fill those in in a second)
When the @Interrupt() Command is called, the program stops what it's doing regardless if it's in the middle of a Linear or List script. It then opens the Interrupt file from the domme's Interrupt folder that we specify in parentheses after the Command. So let's create an Interrupt in that folder called "I Can Always Make It Worse.txt". Remember that Interrupts are treated exactly like Modules, which are Linear scripts. So let's make that script right now on the fly:
This looks great, so let's save it in our Interrupt folder now as "I Can Always Make It Worse.txt". Now let's go back to our "I'm aching" response file and add the following line to the Stroking, Not Stroking and any other section we're inclined to:
So now, any time we tell the domme we're aching, there's a chance she could stop what she's doing and run this routine on us. That gives scripters a lot of power to direct the actions of the domme, without having to hard code anything in the program itself. As a scripter, you can easily combine anything the sub says with anything the domme can do or say in response, and that's pretty cool!
You know, I keep looking at that Interrupt we just made. As nice as it is, it occurs to me that it will kinda seem weird running as it is more than once. We can always create several different Interrupts and put them in our Response file for variety, but I have a better idea. There's a set of Commands for Linear scripts we can use that will make this much more natural in repeated viewings: @CheckFlag() and @SetFlag()
The @SetFlag() Command creates a Flag file in the domme's system folder. It's simply a blank file with no extension, named with whatever we put in parentheses. @CheckFlag() checks to see if the file named in its parentheses exists in the Flag folder, and if it does, it goes to the line in the script that is the file name in parentheses ( Much like a @Goto() Command), This is a clunky explanation, but should make much more sense seeing in action. Let's modify that Interrupt file we just made with good use of @SetFlag() and @CheckFlag():
So at the beginning of the script, you can see it's checking if a Flag called "INT_I Can Always Make It Worse" exists. If this is the first time running this Interrupt, then it won't exist and the script continues as normal. When it gets to the end of the section, you can see the @SetFlag() Command creating that Flag right before the script ends. So every subsequent time this script gets run, @CheckFlag() will find "INT_I Can Always Make It Worse" in the Flags folder, and the script will jump to (INT_I Can Always Make It Worse) just like a @Goto() Command. The second section feels much more natural as a recurring event, whereas the first section is more like an introduction to an idea.
The @CheckFlag() and @SetFlag() Commands can be used to give a lot of variety to any Linear script like this, but it also be used for other helpful things, like making sure the user only has to listen to a long set of instructions once.
I'll leave this here for now, but as the overview progresses and I show you more and more Commands in action like this, I think you'll start to see Tease AI take shape for what it was designed to be: Infinite cosmic power, itty bitty living space. Wait, that's not right. I meant infinite creative potential, but simple enough that more people can easily take advantage of content creation. My next post is going to be an intermission of sorts while I unveil a couple of new features of the program, but I'll pick back up with a more in-depth look at the potential of Modules. As always, feel free to ask any questions you have.