summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2019-06-23 12:52:47 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2019-06-23 12:52:47 +0100
commit7df3916ea12dcd8f6e9763a3dd1c5b029bed24b8 (patch)
treea147609e4598539164e8ca1ff042792030b1c582 /scripts
parentExtract teasing into a module (diff)
downloadtoy-7df3916ea12dcd8f6e9763a3dd1c5b029bed24b8.zip
Extract orgasm control into a module
Diffstat (limited to 'scripts')
-rw-r--r--scripts/toy.groovy134
-rw-r--r--scripts/toy/orgasmControl.groovy141
2 files changed, 142 insertions, 133 deletions
diff --git a/scripts/toy.groovy b/scripts/toy.groovy
index 7ca5beb..82427ac 100644
--- a/scripts/toy.groovy
+++ b/scripts/toy.groovy
@@ -296,122 +296,6 @@ return new Object() {
}
return null;
};
- // Return whether toy came or not
- def mightCum = { time, lenient = false, reason = "without permission" ->
- final taken = showButtonG("Sorry, ${dommeTitle()}, I'm cumming $reason", "cumming", time);
- if (taken < time) {
- playBackgroundSound(null);
- if (lenient && taken < 2) {
- present(null, [
- ["Awww.", "Damn."],
- ["That was close;", "I'll let you have that one;"],
- ["And I was looking forward to punishing you.", "No punishment this time."]]);
- }
- else {
- present(null, [
- ["Bah!", "Pfft. I'm very disappointed in you."],
- ["Ruin it.", "Don't touch it."]]);
- sessionAborted = CUM;
- adjustPunish(80);
- }
- adjustPunish(taken * 10);
- wait(10);
- present([DRESSED], [["Clean up your mess!"]]);
- showButtonG("Yes, ${dommeTitle()}", "ok");
- wait(10);
- showButtonG("Cleaned up, ${dommeTitle()}, back", "back");
- return true;
- }
- return false;
- };
- // Return whether toy came or not, despite being denied
- def cumChanceDenied = { lenient = false ->
- present([TEASE], [
- ["Stop!", "Nope!", "Haha! No!"],
- ["Let go.", "Hands off!", "Hands behind your back."],
- ["Not this time.", "Maaaaybe next time, toy."]]);
- return mightCum(15, lenient);
- };
- def cumChanceCountdown = {
- present([TEASE], [
- ["OK, toy, I'm going to count you down.", "Would you like a countdown, toy?"],
- ["Get stroking!", "Jerk it!"]]);
- if (mightCum(5 + getRandom(5))) return true;
- present([TITS], []);
- def numbers = "";
- for (def n = 10; n > 0; n--) {
- numbers += "${n}... ";
- show(numbers);
- mightCum(1, false, "too soon");
- if (getRandom(100) > 85 || !can(CUM)) {
- return cumChanceDenied();
- }
- }
- present([TITS], [
- ["Cum, cum", "Cum for me"],
- ["you little slut.", "my lucky toy.", "you dirty boy."]]);
- wait(10);
- showButtonG("Thank you, ${dommeTitle()}.", "ok");
- return true;
- };
- def cumChanceWindow = {
- present([TEASE], [
- ["OK, toy, I'm going to give you a chance to cum.", "Would you like a small chance to cum, toy?"],
- ["Get stroking!", "Stroke it, you'll need to be close!"],
- ["You won't get long.", "You might not get long.", "Wait for my say so..."]]);
- if (mightCum(15 + getRandom(60), false, "too soon")) return true;
- if (getRandom(5) > 0 || !can(CUM)) {
- return cumChanceDenied();
- }
- present([TITS], [
- ["Cum, cum", "Cum for me"],
- ["you little slut.", "my lucky toy.", "you dirty boy."]]);
- def w = 4 + getRandom(4);
- if (showButtonG("Cumming, ${dommeTitle()}", "cumming", w) == w) {
- w = 3;
- present(null, [
- ["Quickly now!", "Hurry!"]]);
- if (showButtonG("Cumming, ${dommeTitle()}", "cumming", w) == w) {
- present([TEASE], [
- ["Stop!", "Let go.", "Hands off!"],
- ["Time's up!", "You had your chance."]]);
- return mightCum(15, true, "too late");
- }
- }
- wait(10);
- showButtonG("Thank you, ${dommeTitle()}.", "ok");
- return true;
- };
- def cumChanceRuin = {
- present([TEASE], [
- ["Stroke!", "Jerk it."],
- ["Get close to the edge, toy...", "Get yourself close..."]]);
- if (mightCum(5 + getRandom(10), false, "too soon")) return true;
- if (getRandom(5) > 0 || !can(CUM)) {
- return cumChanceDenied();
- }
- for (def n = 3 + getRandom(6); n >= 0; n--) {
- present([TITS], [
- ["Try to cum!"]]);
- def w = 3 + getRandom(8);
- if (showButtonG("Cumming, ${dommeTitle()}", "cumming", w) < w) {
- present([TEASE], [
- ["Hands off!", "Leave it."],
- ["Let it all ooze out.", "You're not getting a proper release."]]);
- wait(10);
- showButtonG("Thank you, ${dommeTitle()}.", "ok");
- return true;
- }
- if (n > 0) {
- present([TITS], [
- ["Stop!", "Not now!", "Wait!"],
- ["Hands off!", "Hands by your side."]]);
- w = (w - 2) + getRandom(8);
- if (mightCum(w, true, "but it's ruined")) return true;
- }
- }
- return cumChanceDenied(true);
- };
def clampPulls = { amount ->
getRandom(1 + amount).times {
if (getRandom(2)) {
@@ -559,19 +443,6 @@ return new Object() {
};
// Post
- def postCum = {
- if (stateIs(CHASTE)) return;
- present([TEASE], [
- ["How about I let you cum?", "Maybe I should let you cum."],
- ["Would you like that?", "Let some of that frustration out?"]]);
- wait(getRandom(5) + 5);
- def ways = [cumChanceRuin, cumChanceWindow, cumChanceCountdown];
- if (ways[getRandom(ways.size())]()) {
- // Once toy has cum, revoke permission for a while
- revokePermission(CUM);
- }
- };
-
// Play
def playNothing = {
(getRandom(3) + 2).times {
@@ -979,10 +850,6 @@ return new Object() {
'playNothing': playNothing,
'playBondage': playBondage,
'playSuck': playSuck,
- 'postCum': postCum,
- 'postPermitCum': {
- addEventIfMissing(CUM, getTime() + (DAY * 2) + getRandom(DAY * 2), PERMIT, CUM); // 2 - 4 days from now
- },
];
final addActivity = { String name, func ->
activityList[name] = func;
@@ -1427,6 +1294,7 @@ return new Object() {
* scripts/toy/confession.groovy
* scripts/toy/imagery.groovy
* scripts/toy/intro.groovy
+ * scripts/toy/orgasmControl.groovy
* scripts/toy/sleep.groovy
* scripts/toy/social.groovy
* scripts/toy/tease.groovy
diff --git a/scripts/toy/orgasmControl.groovy b/scripts/toy/orgasmControl.groovy
new file mode 100644
index 0000000..dc5214e
--- /dev/null
+++ b/scripts/toy/orgasmControl.groovy
@@ -0,0 +1,141 @@
+{ toy ->
+ // Return whether toy came or not
+ toy.metaClass.mightCum { time, lenient = false, reason = "without permission" ->
+ final taken = showButtonG("Sorry, ${dommeTitle()}, I'm cumming $reason", "cumming", time);
+ if (taken < time) {
+ playBackgroundSound(null);
+ if (lenient && taken < 2) {
+ present(null, [
+ ["Awww.", "Damn."],
+ ["That was close;", "I'll let you have that one;"],
+ ["And I was looking forward to punishing you.", "No punishment this time."]]);
+ }
+ else {
+ present(null, [
+ ["Bah!", "Pfft. I'm very disappointed in you."],
+ ["Ruin it.", "Don't touch it."]]);
+ sessionAborted = CUM;
+ adjustPunish(80);
+ }
+ adjustPunish(taken * 10);
+ pause(10);
+ present([DRESSED], [["Clean up your mess!"]]);
+ showButtonG("Yes, ${dommeTitle()}", "ok");
+ pause(10);
+ showButtonG("Cleaned up, ${dommeTitle()}, back", "back");
+ return true;
+ }
+ return false;
+ };
+
+ // Return whether toy came or not, despite being denied
+ toy.metaClass.cumChanceDenied { lenient = false ->
+ present([TEASE], [
+ ["Stop!", "Nope!", "Haha! No!"],
+ ["Let go.", "Hands off!", "Hands behind your back."],
+ ["Not this time.", "Maaaaybe next time, toy."]]);
+ return mightCum(15, lenient);
+ };
+
+ toy.metaClass.cumChanceCountdown {
+ present([TEASE], [
+ ["OK, toy, I'm going to count you down.", "Would you like a countdown, toy?"],
+ ["Get stroking!", "Jerk it!"]]);
+ if (mightCum(5 + getRandom(5))) return true;
+ present([TITS], []);
+ def numbers = "";
+ for (def n = 10; n > 0; n--) {
+ numbers += "${n}... ";
+ show(numbers);
+ mightCum(1, false, "too soon");
+ if (getRandom(100) > 85 || !can(CUM)) {
+ return cumChanceDenied();
+ }
+ }
+ present([TITS], [
+ ["Cum, cum", "Cum for me"],
+ ["you little slut.", "my lucky toy.", "you dirty boy."]]);
+ pause(10);
+ showButtonG("Thank you, ${dommeTitle()}.", "ok");
+ return true;
+ };
+
+ toy.metaClass.cumChanceWindow {
+ present([TEASE], [
+ ["OK, toy, I'm going to give you a chance to cum.", "Would you like a small chance to cum, toy?"],
+ ["Get stroking!", "Stroke it, you'll need to be close!"],
+ ["You won't get long.", "You might not get long.", "Wait for my say so..."]]);
+ if (mightCum(15 + getRandom(60), false, "too soon")) return true;
+ if (getRandom(5) > 0 || !can(CUM)) {
+ return cumChanceDenied();
+ }
+ present([TITS], [
+ ["Cum, cum", "Cum for me"],
+ ["you little slut.", "my lucky toy.", "you dirty boy."]]);
+ def w = 4 + getRandom(4);
+ if (showButtonG("Cumming, ${dommeTitle()}", "cumming", w) == w) {
+ w = 3;
+ present(null, [
+ ["Quickly now!", "Hurry!"]]);
+ if (showButtonG("Cumming, ${dommeTitle()}", "cumming", w) == w) {
+ present([TEASE], [
+ ["Stop!", "Let go.", "Hands off!"],
+ ["Time's up!", "You had your chance."]]);
+ return mightCum(15, true, "too late");
+ }
+ }
+ pause(10);
+ showButtonG("Thank you, ${dommeTitle()}.", "ok");
+ return true;
+ };
+
+ toy.metaClass.cumChanceRuin {
+ present([TEASE], [
+ ["Stroke!", "Jerk it."],
+ ["Get close to the edge, toy...", "Get yourself close..."]]);
+ if (mightCum(5 + getRandom(10), false, "too soon")) return true;
+ if (getRandom(5) > 0 || !can(CUM)) {
+ return cumChanceDenied();
+ }
+ for (def n = 3 + getRandom(6); n >= 0; n--) {
+ present([TITS], [
+ ["Try to cum!"]]);
+ def w = 3 + getRandom(8);
+ if (showButtonG("Cumming, ${dommeTitle()}", "cumming", w) < w) {
+ present([TEASE], [
+ ["Hands off!", "Leave it."],
+ ["Let it all ooze out.", "You're not getting a proper release."]]);
+ pause(10);
+ showButtonG("Thank you, ${dommeTitle()}.", "ok");
+ return true;
+ }
+ if (n > 0) {
+ present([TITS], [
+ ["Stop!", "Not now!", "Wait!"],
+ ["Hands off!", "Hands by your side."]]);
+ w = (w - 2) + getRandom(8);
+ if (mightCum(w, true, "but it's ruined")) return true;
+ }
+ }
+ return cumChanceDenied(true);
+ };
+
+ toy.metaClass.postCum {
+ if (stateIs(CHASTE)) return;
+ present([TEASE], [
+ ["How about I let you cum?", "Maybe I should let you cum."],
+ ["Would you like that?", "Let some of that frustration out?"]]);
+ pause(getRandom(5) + 5);
+ def ways = [cumChanceRuin, cumChanceWindow, cumChanceCountdown];
+ if (ways[getRandom(ways.size())]()) {
+ // Once toy has cum, revoke permission for a while
+ revokePermission(CUM);
+ }
+ };
+
+ toy.addActivity("postCum", { toy.postCum() });
+ toy.addActivity("postPermitCum", {
+ // 2 - 4 days from now
+ toy.addEventIfMissing(CUM, getTime() + (DAY * 2) + getRandom(DAY * 2), PERMIT, CUM);
+ });
+}