summaryrefslogtreecommitdiff
path: root/scripts/toy/orgasmControl.groovy
blob: fa440c56dff86c99b419f1b3b256847dd88c53bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
{ 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."]]);
				toy.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(toy.CUM, toy.getTime() + (toy.DAY * 2) + toy.getRandom(toy.DAY * 2),
				toy.PERMIT, toy.CUM);
	});
	return null;
}