diff options
| -rw-r--r-- | scripts/toy.groovy | 134 | ||||
| -rw-r--r-- | scripts/toy/orgasmControl.groovy | 141 | 
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); +	}); +}  | 
