From 81e000ef8bb95cacfbd99763802cbdb87ca6814d Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 3 Dec 2018 17:14:13 +0000 Subject: Add confessions stroking and chastity release. --- scripts/toy.groovy | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/toy.groovy b/scripts/toy.groovy index 89e1e84..7320b84 100644 --- a/scripts/toy.groovy +++ b/scripts/toy.groovy @@ -804,6 +804,89 @@ def bedtime = { } exit(); }; +// Confession +def confessChastityRelease = { + adjustPunish(75); + present([DRESSED, nTEASE], [ + ["Bad toy!", "Naughty little slut."], + ["I don't keep it locked for nothing.", "It's locked for a reason."], + ["It better have been a good reason.", "I'll presume you had a valid excuse."], + ["Is it locked again now?", "Are you back in chastity now?"]]); + if (getBoolean(null)) { + present([DRESSED, nTEASE], [ + ["Good!", "There's that at least."]]); + showButtonG("Yes, mistress", "ok"); + } + else { + adjustPunish(300); + present([DRESSED, nTEASE], [ + ["disobedient", "dirty", "cheeky"], + ["little"], + ["slut!", "whore!", "brat!"], + ["Get it locked back up", "Back in chastity"], + ["right now!", "this instant!"]]); + showButtonGT("Locked, mistress. Here's the key.", "locked", 180, 1); + } + if (getBoolean("Did you get erect whilst out?")) { + adjustPunish(50); + if (getBoolean("Did you cum!?")) { + adjustPunish(200); + } + } + adjustPunish(getInteger("How many hours were you out?", 1) * 10); +}; +def confessStroked = { + adjustPunish(40); + present([DRESSED,nTEASE], [ + ["Awww, poor little toy.", "Naught little toy!"], + ["You know you aren't allowed.", "You get to stroke only when I say."]]); + showButtonG("Sorry, mistress", "sorry"); + if (getBoolean("Did you get to the edge?")) { + adjustPunish(40); + adjustPunish(getInteger("How many times?", 1) * 5); + if (getBoolean("Did you cum!?")) { + adjustPunish(200); + } + } +}; +def confess = { + // 5 points just for feeling the need to confess + def op = getPunish(); + adjustPunish(5); + dress([[DRESSED,nTEASE], [MEAN,CROP]]); + while (true) { + present([DRESSED, nTEASE], [ + ["I'm not going to like this, am I?", "There is no way this ends well for you."], + ["Out with it.", "Let me hear it."]]); + def opts = [ ]; + if (is(CHASTE)) { + opts.push([lbl: "Freed from chastity", act: confessChastityRelease]); + } + if (!is(CHASTE)) { + opts.push([lbl: "Stroked", act: confessStroked]); + } + opts.push([ lbl: "Nothing listed (phew!)", act: null ]); + def opt = getSelectedValue(null, opts.collect { it.lbl }); + def act = opts[opt].act; + if (!act) return; + act(); + if (!getBoolean("Anything else?")) break; + } + // If sufficient points accrued, punish immediately.. with a bonus + if (getPunish() > 150 + op) { + present([MEAN,CROP], [ + ["I'm very disappointed in you.", "You've been a very bad toy!"], + ["Immediate punishment!", "So you will suffer... right now!"]]); + adjustPunish(100); + showButtonG("Yes, mistress", "ok"); + sessionPlay(); + } + else { + present([DRESSED, nTEASE], [ + ["Good!", "There better not be!"]]); + showButtonG("Yes, mistress", "ok"); + } +}; // Setup // Plans - cannot overlap @@ -949,13 +1032,15 @@ while (true) { "Calendar", "Play", "Plan begin", + "Confess", "Back" ])) { case 0: setupShowState(); break; case 1: setupShowCalendar(); break; case 2: playtime(); break; case 3: beginPlan(LUNCH); exit(); - case 4: return "toy"; + case 4: confess(); break; + case 5: return "toy"; } } else if (localTime() > 25.75) { // 1:45am -- cgit v1.2.3