diff --git a/js/003-data/slaveWearData.js b/js/003-data/slaveWearData.js index 7345fbb910f9c52e0eeacb2df004de7f6d08d2dc..ace71088316d4e3dba0128fb0bf89806d3e05299 100644 --- a/js/003-data/slaveWearData.js +++ b/js/003-data/slaveWearData.js @@ -1156,7 +1156,8 @@ App.Data.slaveWear = { name: "Vibrating attachment", get requirements() { return V.boughtItem.toys.vaginalAttachments === 1; - } + }, + vibrates: 1 } ], ["smart vibrator", @@ -1164,7 +1165,8 @@ App.Data.slaveWear = { name: "Smart vibrating attachment", get requirements() { return V.boughtItem.toys.smartVaginalAttachments === 1; - } + }, + vibrates: 2 } ] ]), diff --git a/src/005-passages/managePassages.js b/src/005-passages/managePassages.js index 5591493ec449406469094da681bff190e4c83464..3911b98eb13bdaf45da03ef99aa20dc77439f8b2 100644 --- a/src/005-passages/managePassages.js +++ b/src/005-passages/managePassages.js @@ -13,7 +13,7 @@ new App.DomPassage("Future Society", () => { return App.UI.fsPassage(); }, ["jum new App.DomPassage("Manage Penthouse", () => { V.nextButton = "Back"; - V.nextLink = "Manage Penthouse"; + V.nextLink = "Main"; V.encyclopedia = "What the Upgrades Do"; return App.UI.managePenthouse(); }, ["jump-to-safe", "jump-from-safe"] diff --git a/src/facilities/surgery/surgeryPasageFaceAndHair.js b/src/facilities/surgery/surgeryPasageFaceAndHair.js index d689bb8b280e1f8b350eb853e3aada92a42db36a..ea66d7452149a4a5cf4d0179fb99d42a1cea7c68 100644 --- a/src/facilities/surgery/surgeryPasageFaceAndHair.js +++ b/src/facilities/surgery/surgeryPasageFaceAndHair.js @@ -926,20 +926,22 @@ App.UI.surgeryPassageHairAndFace = function(slave, cheat = false) { r.push(`${His} crooked teeth are in braces.`); linkArray.push(makeLink( "Remove braces", - "teeth", + "oral", () => { slave.teeth = "crooked"; - } + }, + 0 )); break; case "cosmetic braces": r.push(`${He} has braces on ${his} straight teeth.`); linkArray.push(makeLink( "Remove braces", - "teeth", + "oral", () => { slave.teeth = "normal"; - } + }, + 0 )); break; case "removable": @@ -1030,7 +1032,7 @@ App.UI.surgeryPassageHairAndFace = function(slave, cheat = false) { r.push(`${He} has normal, healthy teeth.`); linkArray.push(makeLink( "Unnecessary braces", - "teeth", + "braces", () => { slave.teeth = "cosmetic braces"; } diff --git a/src/interaction/siWardrobe.js b/src/interaction/siWardrobe.js index 67e3cd0eb84aab04244d6ebcf282a2640ff4688b..34a8c0bb79aa34619d45164287e90e27ba2060ed 100644 --- a/src/interaction/siWardrobe.js +++ b/src/interaction/siWardrobe.js @@ -637,6 +637,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { function vaginalAttachment() { let el = document.createElement('div'); if (dildoWidth(slave) === 0) { + slave.vaginalAttachment = "none"; return el; } diff --git a/src/js/utilsAssessSlave.js b/src/js/utilsAssessSlave.js index eb84a673e9283ba12d04584d2a8fcef2d62b9e02..4798dc8339a132a3a3d9c05083684bae76509886 100644 --- a/src/js/utilsAssessSlave.js +++ b/src/js/utilsAssessSlave.js @@ -310,10 +310,17 @@ globalThis.dildoLength = function(slave) { }; /** + * Returns the best vibe mode available between the dildo itself, and any attachment that may be present. * @param {App.Entity.SlaveState} slave - * @returns {number} + * @returns {0|1|2} */ globalThis.dildoVibeLevel = function(slave) { + // Vaginal accessory/dildo const dildo = App.Data.vaginalAccessory.get(slave.vaginalAccessory) || V.customItem.vaginalAccessory.get(slave.vaginalAccessory); - return dildo.vibrates || 0; + const dildoVibrationLevel = ((dildo) ? dildo.vibrates : 0) || 0; + + // Attachment, if present + const vaginalAttachment = App.Data.slaveWear.vaginalAttachment.get(slave.vaginalAttachment) || 0; + const vaginalAttachmentVibrationLevel = ((vaginalAttachment) ? vaginalAttachment.vibrates : 0) || 0; + return Math.max(dildoVibrationLevel, vaginalAttachmentVibrationLevel); }; diff --git a/src/npc/descriptions/crotch/vaginalAccessory.js b/src/npc/descriptions/crotch/vaginalAccessory.js index cc054a389f1aee05d5af0676be1c2c0e025fb3be..f86f846aa52dbcc4953bc2c2fcde68210e9f66c3 100644 --- a/src/npc/descriptions/crotch/vaginalAccessory.js +++ b/src/npc/descriptions/crotch/vaginalAccessory.js @@ -105,7 +105,7 @@ App.Desc.vaginalAttachment = function(slave) { switch (dildoVibeLevel(slave)) { case 2: // TODO: not sure about this description - r.push(`${His} dildo buzzes every so often, when prompted by the arcology's systems to train ${his} sexuality.`); + r.push(`${His} ${slave.vaginalAccessory} buzzes every so often, when prompted by the arcology's systems to train ${his} sexuality.`); if (slave.chastityVagina) { r.push(`The chastity belt locking it in place means there is no escape.`); } @@ -113,7 +113,7 @@ App.Desc.vaginalAttachment = function(slave) { break; case 1: // TODO: not sure about this description - r.push(`${He} looks distinctly uncomfortable as ${his} dildo buzzes every so often.`); + r.push(`${He} looks distinctly uncomfortable as ${his} ${slave.vaginalAccessory} buzzes every so often.`); if (slave.chastityVagina) { r.push(`The chastity belt locking it in place means there is no escape.`); }