diff --git a/game/03-JavaScript/04-Pregnancy/pregnancy.js b/game/03-JavaScript/04-Pregnancy/pregnancy.js index 1aba3f824a783469f32b7aabe0d0dbd04a26dc57..96ecfab48f374796f358da43bf5796fdc471a956 100644 --- a/game/03-JavaScript/04-Pregnancy/pregnancy.js +++ b/game/03-JavaScript/04-Pregnancy/pregnancy.js @@ -828,7 +828,7 @@ function giveBirthToChildren(mother, birthLocation, location, pregnancyOverride) pregnancy.givenBirth++; V.children[childObject.childId] = { ...childObject, - name: generateBabyName(childObject.name, childObject.gender, childObject.childId), + name: !childObject.eggTimer ? generateBabyName(childObject.name, childObject.gender, childObject.childId) : "", born: { day: clone(Time.monthDay), month: clone(Time.monthName), year: clone(Time.year) }, location, birthLocation, diff --git a/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js b/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js index 16feb64bf5c4fd879a273e5fece4119b37722a3a..83de1ec3b1e2378ee148616f57003c19752fdf91 100644 --- a/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js +++ b/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js @@ -610,7 +610,7 @@ window.pregnancyGenerator = { hairColour: featherColour[random(0, featherColour.length - 1)], }); // Hours - baby.eggTimer = random(24 * 26, 24 * 32); + baby.eggTimer = new DateTime(Time.date).addHours(random(24 * 26, 24 * 32)).timeStamp; result.fetus.push(baby); parentFunction.increaseKids(motherObject.parentId.id, 0, fatherObject.parentId.id); } diff --git a/game/04-Variables/feats.js b/game/04-Variables/feats.js index 44faf04cda366fab6c98ce34a68730636a0b92b4..87f5bf848878d1a0ecc4f00c4145fd87c501b5b3 100644 --- a/game/04-Variables/feats.js +++ b/game/04-Variables/feats.js @@ -1821,12 +1821,8 @@ function featsMerge() { if (slot) { slot.state.history = State.deltaDecode(slot.state.delta); DoLSave.decompressIfNeeded(slot); - if ( - localStorageSaves.autosave.state.history && - localStorageSaves.autosave.state.history[0] && - localStorageSaves.autosave.state.history[0].variables - ) { - const variables = localStorageSaves.autosave.state.history[0].variables; + if (slot.state.history && slot.state.history[0] && slot.state.history[0].variables) { + const variables = slot.state.history[0].variables; if (variables.feats) { loadFeats(variables.feats.allSaves); loadFeats(variables.feats.currentSave); diff --git a/game/base-combat/tentacles/tentacle-action.twee b/game/base-combat/tentacles/tentacle-action.twee index d9bf74d5a205a5425e1a5b38bd468327ef48286a..53e9c0a6b67b6dcbd4e0513785db03f94ecdb775 100644 --- a/game/base-combat/tentacles/tentacle-action.twee +++ b/game/base-combat/tentacles/tentacle-action.twee @@ -182,7 +182,7 @@ <</if>> <</if>> <<else>> - and tries to find a way inside. Failing, it lashes at the <<print setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].altDamage or "metal">>. + and tries to find a way inside to your <<pussy>>. Failing, it lashes at the <<print setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].altDamage or "metal">>. <<set $worn.genitals.integrity -= 10>><<violence 1>> <</if>> <</if>> @@ -229,7 +229,7 @@ and worms round your $worn.genitals.name, rubbing and squeezing it in the process. <span class="lewd">Your clearly aroused reaction, encourages it further.</span> <<arousal 200 "genitals">><<neutral 2 "genitals">><<set $worn.genitals.integrity -= 5>> <<else>> - and tries to find a way inside. Failing, it lashes at the <<print setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].altDamage or "metal">>. + and tries to find a way inside to envelop your <<penis>>. Failing, it lashes at the <<print setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].altDamage or "metal">>. <<set $worn.genitals.integrity -= 10>><<violence 1>> <</if>> <</if>> @@ -271,7 +271,7 @@ <</if>> <</if>> <<else>> - and tries to find a way inside. Failing, it lashes at the device. + and tries to find a way inside to your <<bottom>>. Failing, it lashes at the device. <<set $worn.genitals.integrity -= 10>><<violence 1>> <</if>> <</if>> diff --git a/game/base-combat/tentacles/tentacle-adv.twee b/game/base-combat/tentacles/tentacle-adv.twee index 4b23e61de9a35174bc2c54c629fff3434da98380..2926c8c9f3a8ef67b8a0ea0e93ffa0ffa5ef1e6d 100644 --- a/game/base-combat/tentacles/tentacle-adv.twee +++ b/game/base-combat/tentacles/tentacle-adv.twee @@ -323,7 +323,7 @@ <</if>> <</if>> <<else>> - and tries to find a way inside. Failing, it lashes the metal. + and tries to find a way inside to your <<pussy>>. Failing, it lashes the <<print setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].altDamage or "metal">>. <<set $worn.genitals.integrity -= 10>><<violence 1>> <</if>> <<set $tentacleVagina to _tentacle.fullDesc>> @@ -381,8 +381,11 @@ <</if>> <</if>> <<tentacle_skin "penis">> + <<elseif $worn.genitals.name is "chastity parasite">> + and worms round your $worn.genitals.name, rubbing and squeezing it in the process. <span class="lewd">Your clearly aroused reaction, encourages it further.</span> + <<arousal 200 "genitals">><<neutral 2 "genitals">><<set $worn.genitals.integrity -= 5>> <<else>> - and tries to find a way inside. Failing, it lashes the metal. + and tries to find a way inside to envelop your <<penis>>. Failing, it lashes the <<print setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].altDamage or "metal">>. <<set $worn.genitals.integrity -= 10>><<violence 1>> <</if>> <<set $tentaclePenis to _tentacle.fullDesc>> @@ -468,7 +471,7 @@ <</if>> <</if>> <<else>> - and tries to find a way inside. Failing, it lashes the device. + and tries to find a way inside to your <<bottom>>. Failing, it lashes the device. <<set $worn.genitals.integrity -= 10>><<violence 1>> <</if>> <<set $tentacleAnus to _tentacle.fullDesc>><<set $tentacleAnusBaby to _tentacle.baby>> diff --git a/game/base-system/overlays/options.twee b/game/base-system/overlays/options.twee index 7af5cf2691743407c2a38c45a81b994abfd983f0..20d53dba7eacc6fe74639cde912d7f1cc999b5bb 100644 --- a/game/base-system/overlays/options.twee +++ b/game/base-system/overlays/options.twee @@ -189,7 +189,7 @@ IMPORTANT: </div> <div class="settingsToggle"> Display play time in the top right of the screen - <mouse class="tooltip linkBlue">(?)<span>Formatted into 'h:mm:ss'. Be aware that leaving the game for hours alone, then saving will have its time tracked, to avoid, save the game before ending play and then load the save when you resume play. Not tracked in versions '0.3.13.X' and older</span></mouse> + <mouse class="tooltip linkBlue">(?)<span>Formatted into 'h:mm:ss'. Be aware that leaving the game for hours alone, then saving will have its time tracked. To avoid, save the game before ending play and then load the save when you resume play. Not tracked in versions '0.3.13.X' and older</span></mouse> <br> <label><<radiobutton "$options.playtime" false autocheck>> Disable</label> <br> diff --git a/game/base-system/overlays/statistics.twee b/game/base-system/overlays/statistics.twee index b03a95ea6dfa1544d6f5368608659753f824b74d..5da7e640e26224e95a240e2bfe7f4472801f758f 100644 --- a/game/base-system/overlays/statistics.twee +++ b/game/base-system/overlays/statistics.twee @@ -495,7 +495,7 @@ <mouse class="tooltip linkBlue">(?)<span>Total number of times a save has been loaded, does not track repeated load times of the same save. Not tracked in versions '0.3.12.X' and older</span></mouse> <br> Play Time: <<print msToTime(($saveDetails.playTime ? $saveDetails.playTime : 0) + ($saveDetails.loadTime ? new Date() - $saveDetails.loadTime : 0))>> - <mouse class="tooltip linkBlue">(?)<span>Formatted into 'h:mm:ss'. Be aware that leaving the game for hours alone, then saving will have its time tracked, to avoid, save the game before ending play and then load the save when you resume play. Not tracked in versions '0.3.13.X' and older</span></mouse> + <mouse class="tooltip linkBlue">(?)<span>Formatted into 'h:mm:ss'. Be aware that leaving the game for hours alone, then saving will have its time tracked. To avoid, save the game before ending play and then load the save when you resume play. Not tracked in versions '0.3.13.X' and older</span></mouse> <br> <</if>> <<if $saveVersions isnot undefined>> diff --git a/game/overworld-forest/loc-lake/mason.twee b/game/overworld-forest/loc-lake/mason.twee index a1d5da54a43077fe7ef1075c78616e9607a0dd92..30803ed9a064bc45174ca6dc388844f117eb19a9 100644 --- a/game/overworld-forest/loc-lake/mason.twee +++ b/game/overworld-forest/loc-lake/mason.twee @@ -252,7 +252,7 @@ You exchange awkward pleasantries. <<He>> remains covered and blushing the whole You follow one of the streams feeding the lake, to the pond Mason likes to relax in. Water bubbles up from a spring beneath it. <br><br> -<<if !Time.schoolDay and $weather is "rain" and Time.dayState is "dusk" or true>> +<<if !Time.schoolDay and $weather is "rain" and Time.dayState is "dusk">> <<npc Mason>><<person1>>Mason sits in it, wearing a swimsuit. <<His>> arms rest on the rocky bank, and <<his>> eyes are shut. <br><br> diff --git a/game/overworld-town/special-nightmares/main.twee b/game/overworld-town/special-nightmares/main.twee index b408cccf8f3e778f21b8d33c9c9869d5bbd54792..4de0432e46d3ae963e8db5b255a704cd24a2e04d 100644 --- a/game/overworld-town/special-nightmares/main.twee +++ b/game/overworld-town/special-nightmares/main.twee @@ -895,8 +895,11 @@ Harper ignores the two in favour of <<his>> friend. <<person2>><<Hes>> in a whit <<if playerChastity()>> <span class="lewd">exposing your $worn.genitals.name.</span> Harper frowns. "That may skew the results." <br><br> - - <<person1>><<He>> produces a sharp implement from <<his>> coat. The <<person4>><<person>> takes it. With surgical precision, <<he>> slides the tip into the keyhole of your belt. It clicks. <span class="red">You scream as a sudden, searing pain shocks your <<genitals>>.</span> When it subsides, your $worn.genitals.name clatters to the floor. + <<if $worn.genitals.name is "chastity parasite">> + <<person1>><<He>> moves a machine from somewhere behind you. The <<person4>><<person>> places small pads on your $worn.genitals.name and quickly attaches it to the machine. <span class="red">You scream as a sudden, searing pain shocks your <<genitals>>. When it subsides, your $worn.genitals.name turns into dust. + <<else>> + <<person1>><<He>> produces a sharp implement from <<his>> coat. The <<person4>><<person>> takes it. With surgical precision, <<he>> slides the tip into the keyhole of your belt. It clicks. <span class="red">You scream as a sudden, searing pain shocks your <<genitals>>.</span> When it subsides, your $worn.genitals.name clatters to the floor. + <</if>> <<set $worn.genitals.type.push("broken")>><<genitalsruined>><<ruined>> <<stress 12>><<pain 10>><<ggstress>><<gggpain>> <<else>> diff --git a/game/special-masturbation/actions.js b/game/special-masturbation/actions.js index c0ebc0e5e82aa0530e96bf6cb1d42cf3ecd7f994..5569ec1955d79e4b9f3026bf43dc59a8e86cd8de 100644 --- a/game/special-masturbation/actions.js +++ b/game/special-masturbation/actions.js @@ -978,9 +978,7 @@ function masturbationActionsMouth({ selectedToy, toyDisplay, genitalsExposed }) result.options.push(rest()); break; case "mdildomouth": - result.text = `Your ${ - V.leftarm === "mdildomouthentrance" ? toyDisplay(selectedToy("left")) : toyDisplay(selectedToy("right")) - } is inside of your mouth.`; + result.text = `Your ${V.leftarm === "mdildomouth" ? toyDisplay(selectedToy("left")) : toyDisplay(selectedToy("right"))} is inside of your mouth.`; result.options.push({ action: "mdildolick", text: "Lick", diff --git a/game/special-masturbation/effects.js b/game/special-masturbation/effects.js index 31240b159cf51a73bc1b5b39cec4ccd245b6544f..da508de0fd4e0e434e7eabe0dfea271a8f202a89 100644 --- a/game/special-masturbation/effects.js +++ b/game/special-masturbation/effects.js @@ -451,6 +451,18 @@ function masturbationeffectsArms( V.rightarm = 0; doubleAction = false; } + if (V[armAction] === "mpickupdildo") { + const currentlySelectedToy = V["selectedToy" + (arm === "left" ? "Left" : "Right")]; + if ( + currentlySelectedToy === V["currentToy" + (arm === "left" ? "Right" : "Left")] || + currentlySelectedToy === V.currentToyVagina || + currentlySelectedToy === V.currentToyAnus + ) { + // The player can only a toy in one type of action + V[armAction] = 0; + doubleAction = false; + } + } if (V[armAction] === "mpickupdildo" && V[otherArmAction] === "mpickupdildo" && V.selectedToyLeft === V.selectedToyRight) { // The player can only pick up a toy with one hand V.rightaction = 0; diff --git a/game/special-masturbation/slimeControl.js b/game/special-masturbation/slimeControl.js index 1cd9f5c6d45d2e72f9cfd96746863745ea6c4797..04041afa074b6b19cdb648157ee7d1e6e44591de 100644 --- a/game/special-masturbation/slimeControl.js +++ b/game/special-masturbation/slimeControl.js @@ -13,7 +13,7 @@ function masturbationSlimeControl() { const playerToys = listUniqueCarriedSextoys().filter( toy => (V.player.penisExist && !playerChastity("penis") && toy.type.includesAny("stroker")) || toy.type.includesAny("dildo", "breastpump") ); - const toysId = Array.from(Array(playerToys.length).keys()).filter(i => !playerToys[i].type.includes("stroker")); + const toysId = clone(Array.from(Array(playerToys.length).keys()).filter(i => !playerToys[i].type.includes("stroker"))); let alternateForcedActions = ""; let disableArmActions; @@ -125,6 +125,9 @@ function masturbationSlimeControl() { ["left", "right"].forEach(arm => { const armCap = arm.toUpperFirst(); const armAction = arm + "action"; + const otherArm = arm === "left" ? "right" : "left"; + const otherArmCap = otherArm.toUpperFirst(); + const otherArmAction = otherArm + "action"; if ( (arm === "left" && ["moverlower", "mlower", "munder"].includes(V.leftaction)) || (arm === "right" && ["moverupper", "mupper", "munder_upper"].includes(V.rightaction)) || @@ -133,6 +136,12 @@ function masturbationSlimeControl() { // Do nothing } else { const currentToy = playerToys[V["currentToy" + armCap]]; + if (!isNaN(V["currentToy" + otherArmCap])) toysId.delete(V["currentToy" + otherArmCap]); + if (!isNaN(V.currentToyVagina)) toysId.delete(V.currentToyVagina); + if (!isNaN(V.currentToyAnus)) toysId.delete(V.currentToyAnus); + if (arm === "right" && V[otherArmAction] === "mpickupdildo" && !isNaN(V["selectedToy" + otherArmCap])) { + toysId.delete(V["selectedToy" + otherArmCap]); + } const currentToyType = currentToy ? currentToy.type : null; const actions = []; switch (V[arm + "arm"]) { diff --git a/game/special-masturbation/widgets.twee b/game/special-masturbation/widgets.twee index 06ec82b6eee1ad9ade78037415f561b18f4e2fb2..5fb7af55480946bc31b48d2c4cf66394e8ea4a46 100644 --- a/game/special-masturbation/widgets.twee +++ b/game/special-masturbation/widgets.twee @@ -58,7 +58,7 @@ <br><br> <span class="red"><<Number $masturbationRuinedOrgasm>> orgasms were ruined by the slime in your ear.</span> <</if>> - <<if ["masturbate to orgasm"].includes($earSlime.event) and $masturbationorgasm gte 1>> + <<if $earSlime.event is "masturbate to orgasm" and $masturbationorgasm gte 1>> <span class="green">The slime in you ear is pleased that you completed it's task of masturbating and having an orgasm.</span> <<pain -4>><<stress -6>><<trauma -12>><<lpain>><<lltrauma>><<lstress>> <<set $earSlime.event to "">>