summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/toy.groovy72
1 files changed, 64 insertions, 8 deletions
diff --git a/scripts/toy.groovy b/scripts/toy.groovy
index 5ec674e..166bbdd 100644
--- a/scripts/toy.groovy
+++ b/scripts/toy.groovy
@@ -7,7 +7,7 @@ final HOUR = 3600.0;
final soonFormatter = java.time.format.DateTimeFormatter.ofPattern("EEEE 'at' h:mma");
// Notes
// toys.<name> ankle_cuffs, ballgag, blindfold, chastity_belt, clothespins, cockring, dog_collar, handcuffs, hood, nipple_clamps, ring_gag
-final BALLGAG = "ballgag", COLLAR = "dog_collar", CLAMPS = "nipple_clamps", CHASTITY = "chastity_belt";
+final BALLGAG = "ballgag", COLLAR = "dog_collar", CLAMPS = "nipple_clamps", CHASTITY = "chastity_belt", HANDCUFFS = "handcuffs";
// fetish.<name>
final BONDAGE = "bondage", CBT = "cbt", CHORES = "chores", PAIN = "pain";
// toy.permission.<name>
@@ -662,6 +662,55 @@ def playKneel = {
wait(getRandom(5) + 5);
return kneelTime / 20.0;
};
+def playBondage = {
+ if (!has(HANDCUFFS)) return;
+ def prep = [ preStrip, preCollar, preClamps, preGag ];
+ Collections.shuffle(prep);
+ prep.collect { p -> p(); };
+ present([DRESSED, nTEASE], [
+ ["Go fetch your handcuffs"]]);
+ showButtonG("Yes, mistress", "ok");
+ wait(10);
+ showButtonGT("Back, mistress", "back", 60, 1);
+ present([DRESSED, nTEASE], [
+ ["Good."],
+ ["Down on the floor.", "On your knees.", "Down there, where you are."]]);
+ wait(15);
+ present([DRESSED, nTEASE], [
+ ["You know what's next.", "Take your cuffs."],
+ ["Cuff yourself,", "Hands cuffed,"],
+ ["behind your back of course", "behind you."]]);
+ wait(15);
+ present([DRESSED, TEASE], [
+ ["Don't go anywhere!", "Do not move!"]]);
+ wait(15);
+ present([STOOD, TITS], [
+ ["I'll be back for you soon.", "I won't leave you too long."]]);
+ wait(15);
+ setImage(null);
+ show(null);
+ def waitTime = 500 + getRandom(1000);
+ waitWithGauge(waitTime);
+ playBackgroundSound("bell.wav");
+ present([DRESSED, nTEASE], [
+ ["Hi slave!", "Hello again."],
+ ["You don't look very comfortable.", "That looks quite awkward."],
+ ["Maybe you've been there long enough.", "It's been a while now."]]);
+ wait(20);
+ present([DRESSED, TEASE], [
+ ["OK,", "Mmmm,"],
+ ["Soon.", "Just a while longer"]]);
+ wait(60 + getRandom(60));
+ playBackgroundSound("bell.wav");
+ present([DRESSED, TEASE], [
+ ["Go find the keys,", "Very well,"],
+ ["let yourself out,", "unlock the cuffs,"],
+ ["and come back.", "and hurry back."]]);
+ wait(10);
+ setImage(null);
+ showButtonGT("Freed, mistress", "freed", 120, 1);
+ return waitTime;
+};
def playClamps = {
if (!has(CLAMPS)) return;
if (!is(CLAMPED)) return preClamps();
@@ -713,21 +762,28 @@ def sessionPlay = {
def ap = { val ->
adjustPunish(-val * ph);
};
+ def apply = { activitity, use = null ->
+ def val = (Float)activitity();
+ if (val && use) {
+ use(val);
+ }
+ };
def play = { amount, activities, use = null ->
(getRandom(amount) + 1).times {
if (!sessionAborted) {
- def val = (Float)activities[getRandom(activities.size())]();
- if (val && use) {
- use(val);
- }
+ apply(activities[getRandom(activities.size())], use);
}
};
};
def cp = getPunish();
if (cp > 50) {
preChastity();
- play((int)(cp / 100), [preGag, preClamps, preCollar, preStrip], pm);
- play(3, [playKneel/*, playCorner*/, playCbt, playClamps], ap);
+ play(2 + (int)(cp / 100), [preGag, preClamps, preCollar, preStrip], pm);
+ play(2 + (int)(cp / 100), [playKneel, playCbt, playClamps], ap);
+ def ends = [playBondage, playCbt, playClamps];
+ Collections.shuffle(ends);
+ ends.take((int)(cp / 100));
+ ends.collect { act -> apply(act, ap); };
}
else {
play(3, [preRelease, preEdge, preGag, preClamps, preCollar, preStrip]);
@@ -959,7 +1015,7 @@ def setupShowState = {
}.join());
showButton("OK");
show(
- [BALLGAG, COLLAR, CLAMPS, CHASTITY].collect {
+ [BALLGAG, COLLAR, CLAMPS, CHASTITY, HANDCUFFS].collect {
def v = has(it);
return "$it: $v\n".capitalize()
}.join());