{ 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); executeTrigger("toyCum"); if (lenient && taken < 2) { executeTrigger("toyCumClose"); 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 { executeTrigger("toyCumBad"); present(null, [ ["Bah!", "Pfft. I'm very disappointed in you."], ["Ruin it.", "Don't touch it."]]); setSessionAbort(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(); } } executeTrigger("toyCum"); executeTrigger("toyCumGood"); 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"); } } executeTrigger("toyCum"); executeTrigger("toyCumGood"); 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."]]); executeTrigger("toyCum"); executeTrigger("toyCumGood"); 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.TEASE], [toy.TITS], [toy.DRESSED]]); toy.addActivity("postPermitCum", { // 2 - 4 days from now toy.addEventIfMissing(toy.CUM, toy.getTime() + (toy.DAY * 2) + toy.getRandom(toy.DAY * 2), toy.PERMIT, toy.CUM); }); return null; }