From c6863ea1c63f2d74b911f1dfb77c8a3b218e0030 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 3 Dec 2018 11:27:35 +0000 Subject: Accumulate punishment for poor behaviour, performance, etc --- scripts/toy.groovy | 55 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 11 deletions(-) (limited to 'scripts') diff --git a/scripts/toy.groovy b/scripts/toy.groovy index 3807e97..304e2bd 100644 --- a/scripts/toy.groovy +++ b/scripts/toy.groovy @@ -197,6 +197,17 @@ def present = { imageSpec, texts -> } return null; }; +def showButtonGT = { s, p, t, pc -> + def tt = showButton(gagText(s, p), t); + if (tt == t) { + present(null, [ + ["Don't keep me waiting!", "Hurry up!", "Quicker, toy!"]]); + def pt = showButton(gagText(s, p)); + adjustPunish(pt * pc); + return pt + tt; + } + return tt; +}; def harden = { imageSpec -> present([DRESSED], [ @@ -208,7 +219,7 @@ def harden = { imageSpec -> present(null, [ ["What's taking so long!?", "Come on!", "Don't disappoint me."], ["Slap it about a bit!.", "Get it hard, now!", "Pinch your nipples."]]); - showButtonG("Hard, mistress", "hard"); + showButtonGT("Hard, mistress", "hard", 60, 0.5); } }; def expose = { imageSpec -> @@ -237,12 +248,13 @@ def mightCum = { time -> return false; }; def edge = { amount, imageSpec -> + def allowedTime = 128; (getRandom(amount) + 2).times { if (sessionAborted) return; present(imageSpec, [ ["Stroke to edge now, toy...", "Edge!"], ["Don't cum.", "No cumming.", "No accidents though."]]); - showButtonG("Edging, mistress", "edging"); // TODO: time check + showButtonGT("Edging, mistress", "edging", allowedTime + 20, 1); if (getRandom(2) == 1) { present(imageSpec, [ ["Hold it...", "And hold...", "Keeping going..."]]); @@ -251,6 +263,7 @@ def edge = { amount, imageSpec -> present(imageSpec, [ ["Hands off!", "Stop!"]]); if (mightCum(getRandom(5) + 5)) return; + allowedTime /= 2; }; }; def strokes = { amount, imageSpec -> @@ -295,12 +308,20 @@ def strokes = { amount, imageSpec -> gagText("No, mistress, please torment me more!", "no") ])) { case 0: - present(imageSpec, [ - ["No you may not!", "Nope.", "Not a chance."]]); + if (can(CUM)) { + present(imageSpec, [ + ["Maybe...", "Perhaps.", "We'll see."]]); + } + else { + present(imageSpec, [ + ["No you may not!", "Nope.", "Not a chance."]]); + adjustPunish(5); + } break; case 1: present(imageSpec, [ ["Good boy.", "Very well.", "OK then!"]]); + adjustPunish(-5); break; } if (mightCum(getRandom(8) + 5)) return; @@ -329,7 +350,7 @@ def preRelease = { showButtonG("Yes, mistress", "ok"); wait(15); set(CHASTE, false); - showButtonG("Thank you, mistress", "ok"); + showButtonGT("Thank you, mistress", "ok", 80, 1); }; def preEdge = { if (is(CHASTE)) return; @@ -350,14 +371,14 @@ def preGag = { showButton("Yes, mistress"); show(null); wait(10); - showButton("Back, mistress"); // TODO: time check + showButtonGT("Back, mistress", 50, 2); present([DRESSED], [ ["Good boy.", "Very good."], ["Put it on..."], ["Nice and tight.", "Tight!"], ["I don't want to a hear a word from you.", "A quiet toy is a good toy."]]); set(GAGGED, true); - showButtonG("Gagged, mistress", "gagged"); // TODO: time check + showButtonGT("Gagged, mistress", "gagged", 20, 2); }; def preClamps = { if (is(CLAMPED)) return; @@ -377,7 +398,7 @@ def preClamps = { show(null); wait(10); set(CLAMPED, true); - showButtonG("Back, mistress", "back"); // TODO: time check + showButtonGT("Back, mistress", "back", 60, 1); present([DRESSED], [ ["On your knees,", "Kneel before me"], ["let me see.", "hands behind your back."]]); @@ -410,7 +431,7 @@ def preCollar = { show(null); wait(10); set(COLLARED, true); - showButtonG("Back, mistress", "back"); // TODO: time check + showButtonGT("Back, mistress", "back", 60, 1); }; def preStrip = { imageSpec = [DRESSED] -> if (is(NAKED)) return; @@ -420,7 +441,7 @@ def preStrip = { imageSpec = [DRESSED] -> present([DRESSED], [ ["All of them off!", "And the rest!", "Keep going."]]); set(NAKED, true); - showButtonG("Naked, mistress", "naked"); + showButtonGT("Naked, mistress", "naked", 60, 5); (getRandom(2) + 1).times { switch (getRandom(2)) { case 0: @@ -478,7 +499,7 @@ def postChastity = { ["Bring back the key.", "I want the key of course."]]); wait(10); show(null); - showButtonG("Locked, mistress. Here's the key.", "locked"); + showButtonGT("Locked, mistress. Here's the key.", "locked", 180, 1); set(CHASTE, true); present([DRESSED,TEASE], [ ["Good boy.", "Thank you, toy."]]); @@ -553,6 +574,7 @@ def sessionSummon = { imageSpec -> present(imageSpec, [ ["TOY!", "SLAVE!", "SLUT!"], ["Last chance!", "Final warning!"]]); + adjustPunish(5); break; case limit - 1: case limit - 2: @@ -570,6 +592,9 @@ def sessionSummon = { imageSpec -> return true; }; } + setImage(null); + show(null); + adjustPunish(5); return false; }; def sessionPlay = { @@ -627,6 +652,9 @@ def sessionRelease = { goodToy -> wait(10); setImage(null); sessionAborted = null; + if (goodToy) { + adjustPunish(-20); + } show(null); }; def playtime = { @@ -635,6 +663,9 @@ def playtime = { sessionPlay(); sessionRelease(sessionAborted == null); } + else { + adjustPunish(25); + } } def bedtime = { dress([[LINGERIE,nTITS]]); @@ -694,10 +725,12 @@ def beginPlan = { plan -> present([DRESSED,TEASE], [ [ "Back later!", "See you soon, toy" ]]); wait(5); + return; } else if (has(CHASTITY)) { leaveNote("I want you in chastity until I return!", CHASTE); } + adjustPunish(5); }; // Initial - basic checks and defaults def setupInitial = { -- cgit v1.2.3