diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-03-04 19:06:42 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-03-04 19:27:35 +0000 |
commit | 6ed3a93aeab904188e4d8dd4445167a619f36a24 (patch) | |
tree | 71f7e7a11e091ecb38e30df6593635e68c6bd1ec /scripts | |
parent | Stop bedtime wear always being selected first. (diff) | |
download | toy-6ed3a93aeab904188e4d8dd4445167a619f36a24.zip |
Initial commit of dildo sucking instructions.
Could do with more work.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/toy.groovy | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/scripts/toy.groovy b/scripts/toy.groovy index 0d1f069..e8cb381 100644 --- a/scripts/toy.groovy +++ b/scripts/toy.groovy @@ -980,6 +980,89 @@ def playBondage = { showButtonGT("Freed, mistress", "freed", 120, 1); return waitTime; }; +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)); + }; + 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, mistress", "done", 60, 1); + present([DRESSED], [ + ["The rules are simple:\n"], + ["On my first bell, you take the head in your mouth and start to pleasue 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, mistress", "understood", 30, 1); + present([TEASE], [ + ["Get ready"]]); + showButtonGT("Ready, mistress", "ready", 10, 1); + show(null); + + final target = loadInteger("toy.deepthroat.goal") ?: 5; + def completed = loadInteger("toy.deepthroat.completed") ?: 0; + 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, mistress", "back", 15, 1); + if (getBoolean("Did you perform as ordered?", "Yes, mistress", "No, mistress")) { + 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 playClamps = { if (!has(CLAMPS)) return; if (!is(CLAMPED)) clamps(); @@ -1145,6 +1228,7 @@ def sessionPlay = { 'playClamps': playClamps, 'playNothing': playNothing, 'playBondage': playBondage, + 'playSuck': playSuck, 'postCum': postCum, 'postPermitCum': { addEventIfMissing(CUM, getTime() + (DAY * 2) + getRandom(DAY * 2), PERMIT, CUM); // 2 - 4 days from now |