From 70badb6916c0b4d375d50e534e1a7259a2f5bee0 Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Tue, 24 Dec 2019 18:14:59 -0800 Subject: [PATCH] Make rapists usually follow release rules, and punish them when they disobey. --- src/endWeek/saRules_old.js | 15 +++++++++++++++ src/js/utilJS.js | 7 +++++-- src/utility/saRulesWidgets.tw | 12 ++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/endWeek/saRules_old.js b/src/endWeek/saRules_old.js index 6e2f3084720..85ed0e37dc1 100644 --- a/src/endWeek/saRules_old.js +++ b/src/endWeek/saRules_old.js @@ -1081,6 +1081,11 @@ rival.counter.penetrative += fuckCount; V.penetrativeTotal += fuckCount; } + + if (!App.Utils.sexAllowed(slave, rival)) { + r += `As the rules do not permit ${slave.slaveName} and ${rival.slaveName} to have sex, ${he} is <span class="yellow">severely punished.</span> `; + slave.trust -= 4; + } } } SimpleSexAct.Slave(slave, 4); @@ -1156,6 +1161,11 @@ rival.counter.penetrative += fuckCount; V.penetrativeTotal += fuckCount; } + + if (!App.Utils.sexAllowed(slave, rival)) { + r += `As the rules do not permit ${slave.slaveName} and ${rival.slaveName} to have sex, ${he} is <span class="yellow">severely punished.</span> `; + slave.trust -= 4; + } } } SimpleSexAct.Slave(slave, 4); @@ -1201,6 +1211,11 @@ slave.rivalryTarget = rival.ID; rival.rivalryTarget = slave.ID; SimpleSexAct.Slave(rival, 4); + + if (!App.Utils.sexAllowed(slave, rival)) { + r += `As the rules do not permit ${slave.slaveName} and ${rival.slaveName} to have sex, ${he} is <span class="yellow">severely punished.</span> `; + slave.trust -= 4; + } } } SimpleSexAct.Slave(slave, 7); diff --git a/src/js/utilJS.js b/src/js/utilJS.js index 44b6cb949fc..bd73b7fa982 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -3244,6 +3244,8 @@ window.disobedience = function(slave) { * @returns {App.Entity.SlaveState | undefined} */ window.randomRapeRivalryTarget = function(slave, predicate) { + const willIgnoreRules = disobedience(rapist) > jsRandom(0, 100); + function canBeARapeRival(s) { return (s.devotion <= 95 && s.energy <= 95 && !s.rivalry && !s.fuckdoll && s.fetish !== "mindbroken"); } @@ -3251,7 +3253,8 @@ window.randomRapeRivalryTarget = function(slave, predicate) { function canRape(rapist, rapee) { const opportunity = (assignmentVisible(rapist) && assignmentVisible(rapee)) || rapist.assignment === rapee.assignment; const desire = !(rapist.relationship >= 3 && rapist.relationshipTarget === rapee.id); - return opportunity && desire; + const permission = willIgnoreRules || App.Utils.sexAllowed(rapist, rapee); + return opportunity && desire && permission; } if (typeof predicate !== 'function') { @@ -3260,7 +3263,7 @@ window.randomRapeRivalryTarget = function(slave, predicate) { const arr = V.slaves.filter((s) => { return canBeARapeRival(s) && canRape(slave, s); }).shuffle(); return arr.find(predicate); -} +}; /** * Topological sorting algorithm diff --git a/src/utility/saRulesWidgets.tw b/src/utility/saRulesWidgets.tw index 9875b5bdd95..28932d0984f 100644 --- a/src/utility/saRulesWidgets.tw +++ b/src/utility/saRulesWidgets.tw @@ -447,6 +447,10 @@ and <<set _fuckCount = random(1,3)>> <<set _rival.counter.penetrative += _fuckCount, $penetrativeTotal += _fuckCount>> <</if>> + <<if !App.Utils.sexAllowed($slaves[$i], _rival)>> + As the rules do not permit $slaves[$i].slaveName and _rival.slaveName to have sex, $he is @@.yellow;severely punished.@@ + <<set $slaves[$i].trust -= 4>> + <</if>> <</if>> <</if>> <<run SimpleSexAct.Slave($slaves[$i], 4)>> @@ -502,6 +506,10 @@ and <<set _fuckCount = random(1,3)>> <<set _rival.counter.penetrative += _fuckCount, $penetrativeTotal += _fuckCount>> <</if>> + <<if !App.Utils.sexAllowed($slaves[$i], _rival)>> + As the rules do not permit $slaves[$i].slaveName and _rival.slaveName to have sex, $he is @@.yellow;severely punished.@@ + <<set $slaves[$i].trust -= 4>> + <</if>> <</if>> <</if>> <<run SimpleSexAct.Slave($slaves[$i], 4)>> @@ -538,6 +546,10 @@ and $He repeatedly rapes a reluctant <<= SlaveFullName(_rival)>>; $he can't seem to keep $his hand<<if (hasBothArms($slaves[$i]) || !hasAnyArms($slaves[$i]))>>s<</if>><<if (!hasAnyArms($slaves[$i]))>> (so to speak)<</if>> off the poor slave, who can't avoid $him. Not surprisingly, _rival.slaveName resents this, and $slaves[$i].slaveName's ongoing sexual abuse @@.lightsalmon;starts a rivalry@@ between them. <<set $slaves[$i].rivalry = 1, _rival.rivalry = 1, $slaves[$i].rivalryTarget = _rival.ID, _rival.rivalryTarget = $slaves[$i].ID>> <<run SimpleSexAct.Slave(_rival, 4)>> + <<if !App.Utils.sexAllowed($slaves[$i], _rival)>> + As the rules do not permit $slaves[$i].slaveName and _rival.slaveName to have sex, $he is @@.yellow;severely punished.@@ + <<set $slaves[$i].trust -= 4>> + <</if>> <</if>> <</if>> <<run SimpleSexAct.Slave($slaves[$i], 7)>> -- GitLab