diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index e539c6a9765cbe73412ad9d778e650edd5444afe..47a5bb4e56318711a9f1cc86e699db599c12183d 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -2627,6 +2627,13 @@ may accept strings, use at own risk "long, large dildo" "long, huge dildo" +vaginalAttachment: + +may accept strings, use at own risk +"none" +"vibrating dildo" +"bullet vibrator" + dickAccessory: may accept strings, use at own risk diff --git a/src/art/vector/VectorArtJS.js b/src/art/vector/VectorArtJS.js index fe6ebc59ad2dcb011fd928d0e7c145bc2838ce6b..dc03b5d4d1e20a76653784d395adbcb518a1ff83 100644 --- a/src/art/vector/VectorArtJS.js +++ b/src/art/vector/VectorArtJS.js @@ -969,7 +969,7 @@ window.VectorArt = (function () { r += jsInclude(`Art_Vector_Chastity_Base${bodySize}`); } } - if (slave.vaginalAccessory !== "none") { + if (slave.vaginalAccessory !== "none" || slave.vaginalAttachment !== "none") { switch (slave.clothes) {/* shows vaginal accessories on the outfits below */ case "a bra": case "a button-up shirt": @@ -1016,7 +1016,7 @@ window.VectorArt = (function () { case "slutty jewelry": case "striped underwear": case "uncomfortable straps": - if (slave.vaginalAccessory === "dildo") { + if (slave.vaginalAccessory === "dildo" || slave.vaginalAttachment === "vibrating dildo") { r += jsInclude("Art_Vector_Dildo_Short"); } else if (slave.vaginalAccessory === "long dildo") { r += jsInclude("Art_Vector_Dildo_Long"); @@ -1029,6 +1029,8 @@ window.VectorArt = (function () { r += jsInclude("Art_Vector_Dildo_Huge"); else if (slave.vaginalAccessory === "long, huge dildo") r += jsInclude("Art_Vector_Dildo_Huge_Long"); + } else if (slave.vaginalAttachment === "bullet vibrator") { + r += jsInclude("Art_Vector_Bullet_Vibrator"); } } } diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index 4af2015b252fc6f25d115988eed1083dccb18ab7..9aaa61c928ce418f87d44c4991b36239e8f82f1b 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -865,6 +865,7 @@ You should have received a copy of the GNU General Public License along with thi <<set $clothesBoughtSwimwear = 0>> <<set $toysBoughtDildos = 0>> <<set $toysBoughtGags = 0>> +<<set $toysBoughtVaginalAttachments = 0>> <<set $toysBoughtButtPlugs = 0>> <<set $toysBoughtButtPlugTails = 0>> <<set $buckets = 0>> diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 8a04c68ae01f8da30d881c56cbe1cae451ec0d34..cf1333e72a6b57b6249316e06f43861148d508a3 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -554,6 +554,7 @@ window.DefaultRules = (function() { ProcessAVirginDildos(slave, rule); else if (slave.vagina > 0) ProcessNonVirginDildos(slave, rule); + ProcessVaginalAttachments(slave, rule); } /** @param {App.Entity.SlaveState} slave */ @@ -729,6 +730,45 @@ window.DefaultRules = (function() { } } + /** @param {App.Entity.SlaveState} slave */ + function ProcessVaginalAttachments(slave, rule) { + // apply vaginal accessories to slaves + if (slave.vaginalAccessory === "none" && slave.vaginalAttachment === "vibrating dildo") { + slave.vaginalAttachment = "none"; // clears dildo attachment when dildos are removed above + } else if ((rule.vaginalAttachment !== undefined) && (rule.vaginalAttachment !== "no default setting")) { + if ((slave.vaginalAttachment !== rule.vaginalAttachment)) { + slave.vaginalAttachment = rule.vaginalAttachment; + if (slave.vaginalAccessory !== "none") { + switch (slave.vaginalAttachment) { + + case "none": + r += `<br>${slave.slaveName} has been instructed not to use an attachment for ${his} dildo.`; + break; + + case "vibrating dildo": + r += `<br>${slave.slaveName}'s dildo has been replaced with a vibrating model.`; + break; + + default: + r += `<br>${slave.slaveName} has been given a ${slave.vaginalAttachment}.`; + break; + } + } else { + switch (slave.vaginalAttachment) { + + case "none": + r += `<br>${slave.slaveName} has been instructed not to use any vaginal accessories.`; + break; + + default: + r += `<br>${slave.slaveName} has been given a ${slave.vaginalAttachment}.`; + break; + } + } + } + } + } + /** @param {App.Entity.SlaveState} slave */ function ProcessDickAccessories(slave, rule) { // apply dick accessories to slave @@ -968,7 +1008,7 @@ window.DefaultRules = (function() { function ProcessButtplugAttachments(slave, rule) { // apply buttplug accessories to slaves if (slave.buttplug === "none" && slave.buttplugAttachment !== "none") { - slave.buttplugAttachment = "none"; //clears buttplug attachments when buttplugs are removed above + slave.buttplugAttachment = "none"; // clears buttplug attachments when buttplugs are removed above } else if ((rule.buttplugAttachment !== undefined) && (rule.buttplugAttachment !== "no default setting")) { if ((slave.buttplugAttachment !== rule.buttplugAttachment)) { slave.buttplugAttachment = rule.buttplugAttachment; diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index c6ff59497fef4f514841191d6bd9ac06367606e9..74a79f4a95504f4a680360e7b0dafeba46300218 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -1552,6 +1552,7 @@ App.Entity.SlaveState = class SlaveState { */ this.vaginalAttachment = "none"; /** + * may accept strings, use at own risk * * "none" * * "bullet vibrator" * * "vibrating dildo" diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index ee85d117c5f79af24af26de6dda7956ead60d767..38d6a19c33d95c8ba366c4c8008bcc0c8c2dc624 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -404,7 +404,7 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() { if (typeof slave.vaginalAccessory !== "string") { slave.vaginalAccessory = "none"; } - if (typeof slave.vaginalAttachments !== "string") { + if (typeof slave.vaginalAttachment !== "string") { slave.vaginalAttachments = "none"; } if (typeof slave.dickAccessory !== "string") { @@ -980,7 +980,7 @@ window.childCosmeticsDatatypeCleanup = function childCosmeticsDatatypeCleanup(ch if (typeof child.vaginalAccessory !== "string") { child.vaginalAccessory = "none"; } - if (typeof child.vaginalAttachments !== "string") { + if (typeof child.vaginalAttachment !== "string") { child.vaginalAttachments = "none"; } if (typeof child.dickAccessory !== "string") { diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js index 4f06d45d4718beb412310765b99b1bd500b888d7..288cff46e5e3fcb3df8b0c34f0af73ac8ab5812a 100644 --- a/src/js/itemAvailability.js +++ b/src/js/itemAvailability.js @@ -138,6 +138,10 @@ window.isItemAccessible = function(string) { case 'long, large dildo': case 'long, huge dildo': return (V.toysBoughtDildos === 1); + case 'vibrator': + case 'bullet vibrator': + case 'vibrating dildo': + return (V.toysBoughtVaginalAttachments === 1); case 'long plug': case 'long, large plug': case 'long, huge plug': diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index 0c3c512c5a1a08a0eeb76f201222c2acc0c21eef..06f22d4045170aeb953ca7180a14d623c97b2c38 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -918,7 +918,7 @@ window.rulesAssistantOptions = (function() { this.appendChild(new VagAccVirginsList()); this.appendChild(new VagAccAVirginsList()); this.appendChild(new VagAccOtherList()); - this.appendChild(new VagAccAttachmentsList();) + this.appendChild(new VaginalAttachmentsList()); if (V.seeDicks !== 0 || V.makeDicks !== 0) { this.appendChild(new DickChastityList()); this.appendChild(new DickAccVirginsList()); @@ -1354,14 +1354,21 @@ window.rulesAssistantOptions = (function() { } } - class VagAccAttachmentsList extends List { /**TODO: this will need expanding */ + class VaginalAttachmentsList extends List { /**TODO: this will need expanding */ constructor() { + const accs = []; + setup.vaginalAttachments.forEach(acc => { + if (acc.fs === undefined && acc.rs === undefined) + accs.push([acc.name, acc.value]); + else if (acc.rs === "buyVaginalAttachments" && V.toysBoughtVaginalAttachments === 1) + accs.push([acc.name + " (Purchased)", acc.value]); + }); super("Vaginal attachments for slaves with vaginal accessories", accs); this.setValue(current_rule.set.vaginalAttachment); this.onchange = (value) => current_rule.set.vaginalAttachment = value; } } - + class DickChastityList extends List { constructor() { const items = [ diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index 036ec1176954fede742947ae15f5c273222faf41..532f515afa49600294f0bb8cc44a517ae46320fa 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -4622,35 +4622,37 @@ window.SlaveSummaryUncached = (function(){ /** @param {App.Entity.SlaveState} slave */ function long_vaginal_acc(slave) { - switch (slave.vaginalAccessory) { - case "dildo": - r += `Vaginal dildo.`; - break; - case "large dildo": - r += `Large vaginal dildo.`; - break; - case "huge dildo": - r += `Huge vaginal dildo.`; - break; - case "long dildo": - r += `Long vaginal dildo.`; - break; - case "long, large dildo": - r += `Long and large vaginal dildo.`; - break; - case "long, huge dildo": - r += `Long and wide vaginal dildo.`; - break; + if (slave.vaginalAttachment !== "vibrating dildo") { + switch (slave.vaginalAccessory) { + case "dildo": + r += `Vaginal dildo.`; + break; + case "large dildo": + r += `Large vaginal dildo.`; + break; + case "huge dildo": + r += `Huge vaginal dildo.`; + break; + case "long dildo": + r += `Long vaginal dildo.`; + break; + case "long, large dildo": + r += `Long and large vaginal dildo.`; + break; + case "long, huge dildo": + r += `Long and wide vaginal dildo.`; + break; + } } - r += " "; - switch (slave.vaginalAttachment) { /** TODO: this will need serious work */ + switch (slave.vaginalAttachment) { case "bullet vibrator": - r += `Attached bullet vibrator.`; - break; + r += `Attached bullet vibrator.`; + break; case "vibrating dildo": - r += `Vibrating dildo.`; - break; + r += `Vibrating dildo.`; + break; } + r += " "; } /** @param {App.Entity.SlaveState} slave */ diff --git a/src/pregmod/saClothes.tw b/src/pregmod/saClothes.tw index 221e26ae97b6a92160f07d33fe506c0540be0f11..8fe8b4d034c6926299ad549a02ce1ff6c1bd8af7 100644 --- a/src/pregmod/saClothes.tw +++ b/src/pregmod/saClothes.tw @@ -819,7 +819,12 @@ <</if>> <</if>> <</if>> - +<</if>> +<<if ($slaves[$i].vaginalAttachment != "none")>> + /* TODO: write effects here */ + <<if ($slaves[$i].vaginalAttachment == "bullet vibrator")>> + <<elseif ($slaves[$i].vaginalAttachment == "vibrating dildo")>> + <</if>> <</if>> <<if ($slaves[$i].buttplug != "none")>> diff --git a/src/pregmod/widgets/bodyswapWidgets.tw b/src/pregmod/widgets/bodyswapWidgets.tw index a84e235344458da4a196c85258b17b397de79002..2cfd5eb8247d50c687c0e8a6711b669d07614257 100644 --- a/src/pregmod/widgets/bodyswapWidgets.tw +++ b/src/pregmod/widgets/bodyswapWidgets.tw @@ -126,7 +126,6 @@ <<set $args[0].teeth = $args[1].teeth>> <<set $args[0].tonguePiercing = $args[1].tonguePiercing>> <<set $args[0].vagina = $args[1].vagina>> -<<set $args[0].vaginalAttachment = $args[1].vaginalAttachment>> <<set $args[0].vaginaLube = $args[1].vaginaLube>> <<set $args[0].vaginaPiercing = $args[1].vaginaPiercing>> <<set $args[0].vaginaTat = $args[1].vaginaTat>> @@ -181,6 +180,7 @@ <<set $args[0].collar = $args[1].collar>> <<set $args[0].shoes = $args[1].shoes>> <<set $args[0].vaginalAccessory = $args[1].vaginalAccessory>> +<<set $args[0].vaginalAttachment = $args[1].vaginalAttachment>> <<set $args[0].dickAccessory = $args[1].dickAccessory>> <<set $args[0].chastityVagina = $args[1].chastityVagina>> <<set $args[0].chastityPenis = $args[1].chastityPenis>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index fe0abac38ddf8a452796b6551c788fc9da89e367..0a2912481b96e43e4477d1aa07649642e224bfe0 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -452,6 +452,9 @@ <<if ndef $toysBoughtGags>> <<set $toysBoughtGags = 0>> <</if>> +<<if ndef $toysBoughtVaginalAttachments>> + <<set $toysBoughtVaginalAttachments = 0>> +<</if>> <<if ndef $toysBoughtButtPlugs>> <<set $toysBoughtButtPlugs = 0>> <</if>> diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index feb33fb8b6fc8107d82c7de5d0412217522ca53d..c4c65b1b35ffd4240144cfb5ad6692a39694b369 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -4851,7 +4851,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><<link "Deny $him from ever having satisfying sex again">> <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly find $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ - <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.chastityVagina = 0>> + <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> <<= AnalVCheck()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> @@ -4951,7 +4951,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><<link "Deny $him from ever having satisfying sex again">> <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly find $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ - <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.chastityVagina = 0>> + <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> <<= AnalVCheck()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> @@ -5046,7 +5046,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><<link "Deny $him from ever having satisfying sex again">> <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly find $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ - <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.chastityVagina = 0>> + <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> <<= AnalVCheck()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> @@ -5116,7 +5116,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><<link "Deny $him from ever having satisfying sex again">> <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly find $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ - <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.chastityVagina = 0>> + <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> <<= AnalVCheck()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> @@ -7651,7 +7651,7 @@ You tell $him kindly that you understand, and that $he'll be trained to address <</if>> <</replace>> <</link>> -<<if $activeSlave.buttPlug == "none" && ($activeSlave.vagina < 0 || $activeSlave.vaginalAccessory == "none")>> +<<if $activeSlave.buttPlug == "none" && ($activeSlave.vagina < 0 || ($activeSlave.vaginalAccessory == "none" && $activeSlave.vaginalAttachment == "none"))>> <br><<link "Add dildos to $his gear">> <<EventNameDelink $activeSlave>> <<replace "#result">> diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw index 2b1a916c6bd29be3544cca5ce2f23dc2b64b229a..c102a4800cd9579dd8c32b4d0e78ef6e424cbc28 100644 --- a/src/uncategorized/dairyReport.tw +++ b/src/uncategorized/dairyReport.tw @@ -368,7 +368,7 @@ <<set $slaves[$i].diet = "healthy">> <</if>> <<if $dairyRestraintsSetting > 1>> - <<set $slaves[$i].collar = "none", $slaves[$i].choosesOwnClothes = 0, $slaves[$i].clothes = "no clothing", $slaves[$i].buttplug = "none", $slaves[$i].vaginalAccessory = "none", $slaves[$i].dickAccessory = "none", $slaves[$i].chastityAnus = 0, $slaves[$i].chastityPenis = 0, $slaves[$i].chastityVagina = 0>> + <<set $slaves[$i].collar = "none", $slaves[$i].choosesOwnClothes = 0, $slaves[$i].clothes = "no clothing", $slaves[$i].vaginalAccessory = "none", $slaves[$i].vaginalAttachment = "none", $slaves[$i].dickAccessory = "none", $slaves[$i].buttplug = "none", $slaves[$i].chastityAnus = 0, $slaves[$i].chastityPenis = 0, $slaves[$i].chastityVagina = 0>> <</if>> <<switch $dairyDecoration>> <<case "Roman Revivalist" "Aztec Revivalist" "Chinese Revivalist" "Chattel Religionist" "Edo Revivalist" "Arabian Revivalist" "Egyptian Revivalist" "Supremacist" "Subjugationist" "Degradationist">> diff --git a/src/uncategorized/reShelterInspection.tw b/src/uncategorized/reShelterInspection.tw index 54dc48e2bc813bcac848bc8019e71a8c9a6691ce..1bb46387b5b45d2df8bd60927209d6ffdb708b83 100644 --- a/src/uncategorized/reShelterInspection.tw +++ b/src/uncategorized/reShelterInspection.tw @@ -179,7 +179,7 @@ Not waiting to be greeted, the inspector looks up at the nearest camera and dema <<run cashX(forceNeg($contractCost/2), "slaveTransfer", $activeSlave)>> <<replace "#result">> You have _him2 ushered up to your office, and order _Inspectee.slaveName brought in. The inspector has a single moment to stiffen in shock at the sight before _he2 stiffens involuntarily due to the security drone tasing _him2 unconscious. It takes a few credits here and there to circumvent the Shelter's various legal and contractual defenses to prevent slaveowners from doing exactly what you're doing, but you finish the day richer by one more Fuckdoll. Odds are _he2 wants to be defiant, but the suit works perfectly and leaves _him2 no outlet to make _his2 thoughts known. - <<set $activeSlave.toyHole="all her holes", $activeSlave.pubicHStyle="waxed", $activeSlave.livingRules="spare", $activeSlave.speechRules="restrictive", $activeSlave.releaseRules="restrictive", $activeSlave.relationshipRules="restrictive", $activeSlave.fuckdoll=1, $activeSlave.choosesOwnClothes=0, $activeSlave.clothes="a Fuckdoll suit", $activeSlave.collar="none", $activeSlave.shoes="heels",$activeSlave.legAccessory="none", $activeSlave.vaginalAccessory="none", $activeSlave.dickAccessory="none", $activeSlave.buttplug="none", $activeSlave.chastityAnus = 0, $activeSlave.chastityPenis = 0, $activeSlave.chastityVagina = 0, $activeSlave.attrKnown=1, $activeSlave.fetishKnown=1>> + <<set $activeSlave.toyHole="all her holes", $activeSlave.pubicHStyle="waxed", $activeSlave.livingRules="spare", $activeSlave.speechRules="restrictive", $activeSlave.releaseRules="restrictive", $activeSlave.relationshipRules="restrictive", $activeSlave.fuckdoll=1, $activeSlave.choosesOwnClothes=0, $activeSlave.clothes="a Fuckdoll suit", $activeSlave.collar="none", $activeSlave.shoes="heels",$activeSlave.legAccessory="none", $activeSlave.vaginalAccessory="none", $activeSlave.vaginalAttachment="none", $activeSlave.dickAccessory="none", $activeSlave.buttplug="none", $activeSlave.chastityAnus = 0, $activeSlave.chastityPenis = 0, $activeSlave.chastityVagina = 0, $activeSlave.attrKnown=1, $activeSlave.fetishKnown=1>> <<set $shelterAbuse += 10>> <<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */ <<run newSlave($activeSlave)>> /* skip New Slave Intro */ diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw index 9ab15476d39a6502be639d9844225b35bd86b8d3..249c988b8ad5d9743ffa4f0aa67b0045bfcf3cdb 100644 --- a/src/uncategorized/remoteSurgery.tw +++ b/src/uncategorized/remoteSurgery.tw @@ -1123,11 +1123,11 @@ Work on $his sex: <<if ($activeSlave.vagina > -1) && ($activeSlave.dick > 0)>> <<if $activeSlave.indentureRestrictions < 1 && ($activeSlave.breedingMark != 1 || $propOutcome == 0)>> - | [[Remove pussy|Surgery Degradation][$activeSlave.vagina = -1,$activeSlave.ovaries = 0,$activeSlave.preg = -2,$activeSlave.pregSource = 0,$activeSlave.vaginalSkill = 0,$activeSlave.vaginalAccessory = "none",$activeSlave.chastityVagina = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave),$activeSlave.health -= 20,$surgeryType = "vaginaRemoval"]] <<if $activeSlave.ovaries == 1>>//This will remove $his ovaries as well//<</if>> + | [[Remove pussy|Surgery Degradation][$activeSlave.vagina = -1,$activeSlave.ovaries = 0,$activeSlave.preg = -2,$activeSlave.pregSource = 0,$activeSlave.vaginalSkill = 0,$activeSlave.vaginalAccessory = "none",$activeSlave.vaginalAttachment = "none",$activeSlave.chastityVagina = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave),$activeSlave.health -= 20,$surgeryType = "vaginaRemoval"]] <<if $activeSlave.ovaries == 1>>//This will remove $his ovaries as well//<</if>> <</if>> <<elseif $activeSlave.vagina > -1>> <<if $activeSlave.indentureRestrictions < 1 && ($activeSlave.breedingMark != 1 || $propOutcome == 0)>> - | [[Remove pussy|Surgery Degradation][$activeSlave.vagina = -1,$activeSlave.ovaries = 0,$activeSlave.preg = -2,$activeSlave.pregSource = 0,$activeSlave.vaginalSkill = 0,$activeSlave.vaginalAccessory = "none",$activeSlave.chastityVagina = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave),$activeSlave.health -= 20,$surgeryType = "vaginaRemoval"]] <<if $activeSlave.ovaries == 1>>//This will remove $his ovaries as well//<</if>> + | [[Remove pussy|Surgery Degradation][$activeSlave.vagina = -1,$activeSlave.ovaries = 0,$activeSlave.preg = -2,$activeSlave.pregSource = 0,$activeSlave.vaginalSkill = 0,$activeSlave.vaginalAccessory = "none",$activeSlave.vaginalAttachment = "none",$activeSlave.chastityVagina = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave),$activeSlave.health -= 20,$surgeryType = "vaginaRemoval"]] <<if $activeSlave.ovaries == 1>>//This will remove $his ovaries as well//<</if>> <</if>> <</if>> @@ -1849,7 +1849,7 @@ Work on $him structurally: <<if $activeSlave.fuckdoll == 0>> <br>$He is a normal sex slave, not a living sex toy. <<if $activeSlave.indentureRestrictions < 1 && ($activeSlave.breedingMark != 1 || $propOutcome == 0)>> - [[Encase in a Fuckdoll suit|Surgery Degradation][$activeSlave.subTarget=0, $activeSlave.sentence=0, $activeSlave.training=0, $activeSlave.toyHole="all her holes", $activeSlave.pubicHStyle="waxed", $activeSlave.livingRules="spare", $activeSlave.speechRules="restrictive", $activeSlave.releaseRules="restrictive", $activeSlave.relationshipRules="restrictive", $activeSlave.fuckdoll=1, $activeSlave.choosesOwnClothes=0, $activeSlave.clothes="a Fuckdoll suit", $activeSlave.collar="none", $activeSlave.shoes="heels",$activeSlave.legAccessory="none", $activeSlave.vaginalAccessory="none", $activeSlave.dickAccessory="none", $activeSlave.chastityAnus=0, $activeSlave.chastityPenis=0, $activeSlave.chastityVagina=0, $activeSlave.buttplug="none", $activeSlave.attrKnown=1, $activeSlave.fetishKnown=1, $activeSlave.inflation=0, $activeSlave.inflationType="none", $activeSlave.inflationMethod=0, $activeSlave.milkSource=0, $activeSlave.cumSource=0, $surgeryType = "fuckdoll"]] //This will greatly restrict $him// + [[Encase in a Fuckdoll suit|Surgery Degradation][$activeSlave.subTarget=0, $activeSlave.sentence=0, $activeSlave.training=0, $activeSlave.toyHole="all her holes", $activeSlave.pubicHStyle="waxed", $activeSlave.livingRules="spare", $activeSlave.speechRules="restrictive", $activeSlave.releaseRules="restrictive", $activeSlave.relationshipRules="restrictive", $activeSlave.fuckdoll=1, $activeSlave.choosesOwnClothes=0, $activeSlave.clothes="a Fuckdoll suit", $activeSlave.collar="none", $activeSlave.shoes="heels",$activeSlave.legAccessory="none", $activeSlave.vaginalAccessory="none", $activeSlave.vaginalAttachment="none", $activeSlave.dickAccessory="none", $activeSlave.chastityAnus=0, $activeSlave.chastityPenis=0, $activeSlave.chastityVagina=0, $activeSlave.buttplug="none", $activeSlave.attrKnown=1, $activeSlave.fetishKnown=1, $activeSlave.inflation=0, $activeSlave.inflationType="none", $activeSlave.inflationMethod=0, $activeSlave.milkSource=0, $activeSlave.cumSource=0, $surgeryType = "fuckdoll"]] //This will greatly restrict $him// <</if>> <<else>> <br>$He is encased in a Fuckdoll suit. [[Extract " + $him + "|Surgery Degradation][$activeSlave.fuckdoll=0, $activeSlave.clothes="no clothing", $activeSlave.shoes="none", $surgeryType = "fuckdollExtraction"]] diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw index b594684e526135302ddbdbd0542623aef78d37c5..9b7496cda6e0ae18a7671039bb484e9fe41454ce 100644 --- a/src/uncategorized/saLongTermEffects.tw +++ b/src/uncategorized/saLongTermEffects.tw @@ -1,5 +1,7 @@ :: SA long term effects [nobr] +/* TODO: add vaginal attachments to long term effects */ + <<set _fetishChangeChance = fetishChangeChance($slaves[$i])>> <<set $bellyAccessory = $slaves[$i].bellyAccessory>> <<if $bellyAccessory == "a support band">> diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw index da485fd6c8065265d495fc6ebd2d0054ae2b71bf..eea0e6d8e36f0a74f76d87cdce9f49b4fc8638fb 100644 --- a/src/uncategorized/slaveInteract.tw +++ b/src/uncategorized/slaveInteract.tw @@ -1068,6 +1068,20 @@ | <<link "Huge and long dildo">><<set $activeSlave.vaginalAccessory = "long, huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>> <</if>> <</if>> + <<if isItemAccessible("vibrator")>> + <br> + <<if $activeSlave.vaginalAccessory != "none">> + Vaginal accessory attachment: + <<else>> + Vaginal attachment: + <</if>> + ''<span id="vaginalAttachment">$activeSlave.vaginalAttachment</span>.'' + <<link "None">><<set $activeSlave.vaginalAttachment = "none">><<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>><</link>> + <<if $toysBoughtVaginalAttachments == 1>> + | <<link "Bullet vibrator">><<set $activeSlave.vaginalAttachment = "bullet vibrator">><<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>><</link>> + | <<link "Vibrating dildo">><<set $activeSlave.vaginalAttachment = "vibrating dildo">><<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>><</link>> + <</if>> + <</if>> <</if>> <<if $activeSlave.dick > 0>> diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw index b43a18f78a6bea8b2c4c93653fe79f49d52940cb..55fac2ac597c40a2c096c2c83eabb580aafe5485 100644 --- a/src/uncategorized/surgeryDegradation.tw +++ b/src/uncategorized/surgeryDegradation.tw @@ -1512,7 +1512,7 @@ As the remote surgery's long recovery cycle completes, <</if>> Naturally, @@.red;$his health has been greatly affected@@ by such serious surgery. <<set $activeSlave.chastityVagina = 0>> - <<set $activeSlave.vaginalAccessory = "none">> + <<set $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none">> <<if $activeSlave.cervixImplant == 1>> <<set $activeSlave.cervixImplant = 0>> <<elseif $activeSlave.cervixImplant == 3>> diff --git a/src/uncategorized/walkPast.tw b/src/uncategorized/walkPast.tw index 855b9e625560a1c4295a2035b5113508de03af5e..0b6fc7a0b56b454c095e38626df30ebc52bccb6d 100644 --- a/src/uncategorized/walkPast.tw +++ b/src/uncategorized/walkPast.tw @@ -1927,12 +1927,12 @@ <</if>> <</switch>> <<if ($activeSlave.vaginalAccessory == "long dildo") || ($activeSlave.vaginalAccessory == "long, large dildo") || ($activeSlave.vaginalAccessory == "long, huge dildo")>> - With every motion $he makes; $his dildo shifts, bulging out $his stomach. + With every motion $he makes, $his dildo shifts, bulging out $his stomach. <<if ($activeSlave.buttPlug == "long plug") || ($activeSlave.buttPlug == "long, large plug") || ($activeSlave.buttPlug == "long, huge plug")>> Beside it, a second bulge caused by $his extra long buttplug. <</if>> <<elseif ($activeSlave.buttPlug == "long plug") || ($activeSlave.buttPlug == "long, large plug") || ($activeSlave.buttPlug == "long, huge plug")>> - With every motion $he makes; $his buttplug shifts, bulging out $his stomach. + With every motion $he makes, $his buttplug shifts, bulging out $his stomach. <</if>> <</if>> <<else>> /* implant descs */ diff --git a/src/uncategorized/wardrobe.tw b/src/uncategorized/wardrobe.tw index 3fa1244f011f541ab4920bcc561755c6be3c0a15..80c2c5509a98c0688fd2c6e2a2c96c3ca137a9e4 100644 --- a/src/uncategorized/wardrobe.tw +++ b/src/uncategorized/wardrobe.tw @@ -14,7 +14,7 @@ The room containing all the clothes and accessories you have available to dress <</if>> <<if $toysBoughtDildos == 1 && $toysBoughtGags == 1 && $toysBoughtButtPlugs == 1>> Sex toys of all kinds and shapes line the shelves. -<<elseif $toysBoughtDildos == 1 || $toysBoughtGags == 1 || $toysBoughtButtPlugs == 1 || $toysBoughtButtPlugTails == 1>> +<<elseif $toysBoughtDildos == 1 || $toysBoughtGags == 1 || $toysBoughtButtPlugs == 1 || $toysBoughtButtPlugTails == 1 || $toysBoughtVaginalAttachments == 1>> Some sex toys line the shelves. <</if>> <<if $buckets == 1>> @@ -275,6 +275,14 @@ The room containing all the clothes and accessories you have available to dress You are well stocked with extra long dildos in a variety of sizes. <</if>> +<br> +<<if $toysBoughtVaginalAttachments == 0>> + [[Order a shipment of bullet vibes and vibrating dildos|Wardrobe][cashX(-10000, "capEx"), $toysBoughtVaginalAttachments = 1]] + //Costs <<print cashFormat(10000)>>// +<<else>> + You are well stocked with bullet vibrators and vibrating dildos. +<</if>> + <br> <<if $toysBoughtButtPlugs == 0>> [[Order a shipment of extra long buttplugs|Wardrobe][cashX(-10000, "capEx"), $toysBoughtButtPlugs = 1]] diff --git a/src/uncategorized/wardrobeUse.tw b/src/uncategorized/wardrobeUse.tw index d2d1346855f2921e9306ebd72c5c074681fc3523..77821169725ccce22b9bec9bb686993e8f91c172 100644 --- a/src/uncategorized/wardrobeUse.tw +++ b/src/uncategorized/wardrobeUse.tw @@ -1146,6 +1146,35 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <</link>> <</if>> <</if>> + <<if isItemAccessible("vibrator")>> + <br><br> + <<if $activeSlave.vaginalAccessory != "none">> + Vaginal accessory attachment: + <<else>> + Vaginal attachment: + <</if>> + ''<span id="vaginalAttachment">$activeSlave.vaginalAttachment</span>.'' + <span id="vaginalAttachmentDescription"><<if ($activeSlave.vaginalAttachment != "none")>><br><</if>>//<<vaginalAttachmentDescription>>//</span> + <br> + <<link "None">> + <<set $activeSlave.vaginalAttachment = "none">> + <<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>> + <<replace "#vaginalAttachmentDescription">>//<<vaginalAccessoryDescription>>//<</replace>> + <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> /* TODO: don't actually know if I need this - what is this for? */ + <</link>> + | <<link "Bullet vibrator">> + <<set $activeSlave.vaginalAttachment = "bullet vibrator">> + <<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>> + <<replace "#vaginalAttachmentDescription">>//<<vaginalAccessoryDescription>>//<</replace>> + <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> + <</link>> + | <<link "Vibrating dildo">> + <<set $activeSlave.vaginalAttachment = "vibrating dildo">> + <<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>> + <<replace "#vaginalAttachmentDescription">>//<<vaginalAccessoryDescription>>//<</replace>> + <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> + <</link>> + <</if>> <</if>> <<if $activeSlave.dick > 0>> diff --git a/src/utility/descriptionWidgetsStyle.tw b/src/utility/descriptionWidgetsStyle.tw index b8c90b4416f0cd9c5b6e477d6e59e13e81683fbd..eec3e8da596f0dbad7420dcb758d83e965af0b8d 100644 --- a/src/utility/descriptionWidgetsStyle.tw +++ b/src/utility/descriptionWidgetsStyle.tw @@ -5914,6 +5914,14 @@ $His <</switch>> <</widget>> +<<widget "vaginalAttachmentDescription">> +<<switch $activeSlave.vaginalAttachment>> + /* TODO: write descriptions here */ +<<case "bullet vibrator">> +<<case "vibrating dildo">> +<</switch>> +<</widget>> + <<widget "dickAccessoryDescription">> <<if ($activeSlave.chastityPenis == 1)>> $His cock is encased in a tight chastity cage, which is designed to be comfortable as long as $he remains soft.