summaryrefslogtreecommitdiff
path: root/scripts/toy.groovy
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2019-06-23 19:51:51 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2019-06-23 21:18:22 +0100
commita03b4e1b7b78be2aab0381a78ddc74ab0ff405d7 (patch)
tree1adf1b20db8c4d2ecb555b0522ccdf64fd403c67 /scripts/toy.groovy
parentMove clampPulls (diff)
downloadtoy-a03b4e1b7b78be2aab0381a78ddc74ab0ff405d7.zip
Extract humiliation into a module
Diffstat (limited to 'scripts/toy.groovy')
-rw-r--r--scripts/toy.groovy166
1 files changed, 1 insertions, 165 deletions
diff --git a/scripts/toy.groovy b/scripts/toy.groovy
index cea79c0..3bf51a3 100644
--- a/scripts/toy.groovy
+++ b/scripts/toy.groovy
@@ -255,27 +255,7 @@ return new Object() {
}
return tt;
};
- // Pre-tease
- def preStrip = { imageSpec = [DRESSED] ->
- if (stateIs(NAKED)) return 1.1;
- present(imageSpec, [
- ["Clothes off!", "Get naked, slut!"]]);
- wait(10);
- present(imageSpec, [
- ["All of them off!", "And the rest!", "Keep going."]]);
- set(NAKED, true);
- showButtonGT("Naked, ${dommeTitle()}", "naked", 60, 5);
- present(null, [
- ["Very good. Now...", "I see..."],
- ["on your knees before me,", "kneel,", "stand up straight,", "on your feet,"],
- ["hands behind your head,", "arms up,", "hands high up,"],
- ["let me see you properly.", "let's see what we have.", "I want a good view."]]);
- wait(10);
- sessionToys[COCK] = getTime();
- return 1.1;
- };
- // Post
// Play
def playNothing = {
(getRandom(3) + 2).times {
@@ -303,148 +283,6 @@ return new Object() {
sessionToys[SPOON] = getTime();
}
};
- def playKneel = {
- present([DRESSED], [
- ["Right, slut.", "Come here, toy."],
- ["On the floor, right there.", "Kneel at my feet."]]);
- showButtonGT("Yes, ${dommeTitle()}.", "ok", 20, 1);
- present([DRESSED], [
- ["When I say go,", "In a moment,"],
- ["you'll crawl", "turn and crawl"],
- ["away until I ring my bell."],
- ["You'll stay there,", "And then you won't move,"],
- ["head bowed", "face down"],
- ["until I call you back.", "until you're summoned."]]);
- showButtonG("Yes, ${dommeTitle()}.", "ok");
- present(null, [["Wait..."]]);
- wait(getRandom(10) + 10);
- present([DRESSED], [["Ok, go!", "Now! Off you go."]]);
- wait(getRandom(5) + 5);
- playBackgroundSound("bell.wav");
- show(null);
- def kneelTime = 60 + getRandom(240);
- wait(kneelTime);
- while (playBackgroundSound("bell.wav") || true) {
- if (showButtonG("Back, ${dommeTitle()}", "back", 20) != 20) break;
- }
- present([DRESSED], [
- ["Good boy.", "Very good."],
- ["Stay down there.", "Don't move."]]);
- wait(getRandom(5) + 5);
- return kneelTime / 20.0;
- };
- def playSuck = {
- def playWait = { file, time ->
- playBackgroundSound(file);
- wait(time);
- playBackgroundSound(null);
- };
- def suck = { file, n, delay ->
- n.times {
- playWait(file, delay);
- };
- };
- def suckBeat = { beat, n ->
- suck("toy/${beat}bpm.mp3", n, 2 * (60 / beat));
- };
- def completed = loadInteger("toy.deepthroat.completed") ?: 0;
- if (completed >= 4) {
- preStrip();
- preCollar();
- preClamps();
- getCuffs();
- }
- if (sessionToys.containsKey(DILDO)) {
- present([DRESSED], [
- ["Back to your dildo.", "Amuse me some more with that dildo."],
- ["Same as before, listen for my bell, slut."]]);
- showButtonG("Yes, ${dommeTitle()}", "ok");
- }
- else {
- present([DRESSED], [
- ["Time for you to amuse me, you little slut."],
- ["Get your dildo and secure it somewhere nearby, about eye level when kneeling."]]);
- wait(10);
- showButtonGT("Done, ${dommeTitle()}", "done", 60, 1);
- sessionToys[DILDO] = getTime();
- present([DRESSED], [
- ["The rules are simple:\n"],
- ["On my first bell, you take the head in your mouth and start to pleasure it.\n"],
- ["When you hear the beat, you suck the shaft, one beat in, one beat out again.\n"],
- ["Lastly, on the crack of my whip, you take the whole thing in and suck from the base.\n"],
- ["I know you'll enjoy it, don't be shy.\n"],
- ["One more thing..."],
- ["That cock doesn't doesn't leave your mouth until I say so, listen for second bell and then return to me."]]);
- showButtonGT("Understood, ${dommeTitle()}", "understood", 30, 1);
- }
- if (sessionToys[HANDCUFFS]) {
- present([DRESSED, nTEASE], [
- ["Cuff yourself,", "Hands cuffed,"],
- ["behind your back of course.", "behind you."]]);
- wait(20);
- set(CUFFED, true);
- }
- present([TEASE], [
- ["Get ready"]]);
- showButtonGT("Ready, ${dommeTitle()}", "ready", 10, 1);
- show(null);
-
- final target = loadInteger("toy.deepthroat.goal") ?: 5;
- def session = 0;
-
- wait(randRange(10, 20));
- playWait("bell.wav", randRange(10, 40)); // Head
- while (session < target) {
- suckBeat(30, randRange(5, 15)); // Slow
- suckBeat(90, randRange(10, 30)); // Quick
- wait(0.5);
- final deep = randRange(target / 4, target / 2);
- suck("shortwhip.wav", deep, 2.5); // Deep
- session += deep;
- }
- suckBeat(30, randRange(5, 15)); // Slow
- wait(randRange(10, 20)); // Head
- playBackgroundSound("bell.wav"); // End
-
- showButtonGT("Back, ${dommeTitle()}", "back", 15, 1);
- if (stateIs(CUFFED)) {
- present([DRESSED, TEASE], [
- ["Let yourself out.", "Unlock the cuffs."]]);
- wait(10);
- showButtonGT("Freed, ${dommeTitle()}", "freed", 120, 1);
- set(CUFFED, false);
- }
- if (getBoolean("Did you perform as ordered?", "Yes, ${dommeTitle()}", "No, ${dommeTitle()}")) {
- present([DRESSED], [
- ["Good boy"]]);
- adjustPunish(-4 * target);
- completed += 1;
- if (completed >= 5) {
- save("toy.deepthroat.goal", target + 1);
- completed = 0;
- }
- }
- else {
- final missed = getInteger("How many deep sucks did you miss?", 1);
- if (missed > 5) {
- present([DRESSED], [
- ["Very disappointing."]]);
- }
- else {
- present([DRESSED], [
- ["Mmm"],
- ["More practice required."]]);
- }
- adjustPunish(10 * missed);
- completed -= 1;
- if (completed <= -5) {
- save("toy.deepthroat.goal", target - 1);
- completed = 0;
- }
- }
- save("toy.deepthroat.completed", completed);
- wait(10);
- };
def stateToyName = { state ->
switch (state) {
case CUFFED:
@@ -505,10 +343,7 @@ return new Object() {
return false;
};
final activityList = [
- 'preStrip': preStrip,
- 'playKneel': playKneel,
'playNothing': playNothing,
- 'playSuck': playSuck,
];
final addActivity = { String name, func ->
activityList[name] = func;
@@ -953,6 +788,7 @@ return new Object() {
* scripts/toy/cbt.groovy
* scripts/toy/chastity.groovy
* scripts/toy/confession.groovy
+ * scripts/toy/humiliation.groovy
* scripts/toy/imagery.groovy
* scripts/toy/intro.groovy
* scripts/toy/orgasmControl.groovy