diff --git a/game/03-JavaScript/04-Pregnancy/pregnancy.js b/game/03-JavaScript/04-Pregnancy/pregnancy.js index 96ecfab48f374796f358da43bf5796fdc471a956..e2e0251200a5975084798d2ce52692c140a84327 100644 --- a/game/03-JavaScript/04-Pregnancy/pregnancy.js +++ b/game/03-JavaScript/04-Pregnancy/pregnancy.js @@ -81,7 +81,7 @@ function fetishPregnancy({ genital = "vagina", target = null, spermOwner = null, if (["hand", "kiss"].includes(genital)) genital = target === "pc" && !V.player.vaginaExist ? "anus" : "vagina"; const motherObject = npcPregObject(target, true); - const [pregnancy, fertility, magicTattoo] = pregPrep({ motherObject, genital }); + const [pregnancy, fertility, magicTattoo, contraceptive] = pregPrep({ motherObject, genital }); // Check the cycle settings let multi = 1; @@ -108,6 +108,9 @@ function fetishPregnancy({ genital = "vagina", target = null, spermOwner = null, multi = 1 / Math.pow(4, C.npc[target].pregnancy.nonCycleRng[0]); } } + + if (!forcePregnancy && contraceptive && (random(0, 100) >= 10 || contraceptive > 1)) return "contraceptive fail"; + if (["hawk", "harpy"].includes(spermType) || target === "Great Hawk") { if (!["pc", "Great Hawk"].includes(target)) return false; if ((target === "pc" && !V.harpyEggs) || (target === "Great Hawk" && multi === 1)) return false; @@ -138,7 +141,6 @@ function fetishPregnancy({ genital = "vagina", target = null, spermOwner = null, } return false; } -window.fetishPregnancy = fetishPregnancy; /* Player pregnancy starts here */ /* V.pregnancytype === "realistic" uses this function */ @@ -163,8 +165,8 @@ function playerPregnancyAttempt(baseMulti = 1, genital = "vagina") { /* The lower basePenalty is, the easier it is for the player to get pregnant */ let basePenalty = Math.floor((100 - V.basePlayerPregnancyChance) * Math.clamp(fertilityBoost, 0.1, 1) * baseMulti); - if (V.earSlime.growth >= 100 && V.earSlime.focus === "pregnancy") basePenalty = Math.floor(basePenalty * 2); - if (V.earSlime.growth >= 100 && V.earSlime.focus === "impregnation") basePenalty = Math.floor(basePenalty / 2); + if (V.earSlime.growth >= 100 && V.earSlime.focus === "pregnancy") basePenalty = Math.floor(basePenalty / 2); + if (V.earSlime.growth >= 100 && V.earSlime.focus === "impregnation") basePenalty = Math.floor(basePenalty * 2); /* When spermArray.length - 1 is lower than basePenalty, it uses basePenalty to determin if the pregnancy should occur or not diff --git a/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js b/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js index 83de1ec3b1e2378ee148616f57003c19752fdf91..9abc518f7a0f422f655aa248e4780b596e6ef03a 100644 --- a/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js +++ b/game/03-JavaScript/04-Pregnancy/pregnancyTypes.js @@ -119,6 +119,7 @@ function pregPrep({ motherObject, fatherObject, parasiteType = null, genital = n let pregnancy; let fertility = 0; let magicTattoo = 0; + let contraceptive = 0; if (!motherObject) { return [`mother object not provided`]; } else if (!["anus", "vagina"].includes(genital)) { @@ -147,6 +148,7 @@ function pregPrep({ motherObject, fatherObject, parasiteType = null, genital = n if (parasiteType && pregnancy.fetus.length >= maxParasites(genital)) return ["Player does not have room for more parasites"]; fertility += Math.clamp(V.sexStats.pills.pills["fertility booster"].doseTaken || 0, 0, Infinity); + contraceptive += Math.clamp(V.sexStats.pills.pills.contraceptive.doseTaken || 0, 0, 2); } else if (!parasiteType) { if (V.npcPregnancyDisable === "t") return ["NPC pregnancy disabled"]; @@ -165,9 +167,8 @@ function pregPrep({ motherObject, fatherObject, parasiteType = null, genital = n if (pregnancy.fetus.length && pregnancy.fetus[0] && pregnancy.fetus[0].eggTimer) return ["Hawk eggs already fertilised"]; } else if (pregnancy.type !== "parasite" && pregnancy.fetus.length) return ["NPC currently pregnant and cannot support other types"]; - if (pregnancy.pills === "fertility") { - fertility += 1; - } + if (pregnancy.pills === "fertility") fertility += 1; + if (pregnancy.pills === "contraceptive") contraceptive += 1; } else { // ToDo: Random npc pregnancy pregnancy = { @@ -189,7 +190,7 @@ function pregPrep({ motherObject, fatherObject, parasiteType = null, genital = n } } - return [pregnancy, fertility, magicTattoo]; + return [pregnancy, fertility, magicTattoo, contraceptive]; } function bodySizeCalc(bodysize) { diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index 73446785f6588e13771e5e70d518f6f7d108ca2f..265ee309a829517f1a49065a31c64efd9ac9c584 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -4817,4 +4817,9 @@ <<if $brothelVending.status is "sold">><<set $brothelVending.status to "idea">><</if>> /*fix weeksEmpty increasing even when the player hasn't started the vending machine questline. reset vending machine questline if vending machines were sold despite never having started the questline*/ <</if>> + + /* To fix cases where the value could be delete after starting the game */ + <<if $cycledisable is undefined>> + <<set $cycledisable to "f">> + <</if>> <</widget>> diff --git a/game/base-clothing/widgets.twee b/game/base-clothing/widgets.twee index 5c9a553898c8611fdd1145ac2faedcbf5ca621dd..6547128e66d95ae92fa7c7639db4818054d9649a 100644 --- a/game/base-clothing/widgets.twee +++ b/game/base-clothing/widgets.twee @@ -1449,6 +1449,7 @@ <<if _args[0] and _args[1]>> <<set $_location to _args[0]>> <<set $_slot to _args[1]>> + <<if $store[$_slot] is undefined>>/* Slot not found */<<exit>><</if>> <<set $_item to $store[$_slot].find(item => item.location is $_location)>> <<if $_item isnot undefined>> <<set $_index to $store[$_slot].indexOf($_item)>> diff --git a/game/base-combat/close-images.twee b/game/base-combat/close-images.twee index 8435d2763dc0cf769b651bbf88944fe732f0b815..63a65e7252f8b28c039cde7ca9cd59d70e312adb 100644 --- a/game/base-combat/close-images.twee +++ b/game/base-combat/close-images.twee @@ -103,6 +103,7 @@ <<elseif $vaginastate is "penetrated" or $vaginastate is "doublepenetrated">> <<if ($enemytype is "beast" and $NPCList[_na].penissize gte 5) or ($vaginastate is "doublepenetrated" and $NPCList[$vaginatarget].penis is "vaginadouble" and $NPCList[$vaginadoubletarget].penis is "vaginadouble")>> <<set _vagina = _img.vaginapenetratebig>> + <<set _penetratebig to true>> <<else>> <<set _vagina = _img.vaginapenetrate>> <</if>> @@ -246,10 +247,10 @@ <img @class="'pbhair-' + _pbColour + ' ' + _frames" @src="'img/sex/close/' + _position + '/vaginahirsute.png'"> <</if>> <<if $_parasiteGenitals>> - <<if $earSlime.focus is "impregnation">> - <img @class="_frames" @src="'img/sex/close/' + _position + '/vaginaparasiteshorts.png'"> + <<if $earSlime.focus is "impregnation" or true>> + <img @class="_frames" @src="'img/sex/close/' + _position + '/vagina' + (_penetratebig ? 'big' : '') + 'parasiteshorts.png'"> <<else>> - <img @class="_frames" @src="'img/sex/close/' + _position + '/vaginaparasitepanty.png'"> + <img @class="_frames" @src="'img/sex/close/' + _position + '/vagina' + (_penetratebig ? 'big' : '') + 'parasitepanty.png'"> <</if>> <</if>> <!-- Hermaphrodite penis --> diff --git a/game/base-system/feats.twee b/game/base-system/feats.twee index 76b7ebfee561c6a04cc75507818d8c389cd70585..b86798568f8c796b76473d09239b4bb6a3dda52a 100644 --- a/game/base-system/feats.twee +++ b/game/base-system/feats.twee @@ -55,7 +55,7 @@ <<elseif $feats.allSaves.specialClothes is undefined>> <<set $feats.allSaves.specialClothes to {}>> <</if>> - <<if $specialClothes>> + <<if $specialClothes and $feats.locked is false and $cheatdisable is "t">> <<for $_label, $_value range $specialClothes>> <<if $_value is "unlocked">> <<set $feats.allSaves.specialClothes[$_label] to $_value>> diff --git a/game/base-system/orgasm.twee b/game/base-system/orgasm.twee index beedfde8d54a8c18e56ac0db207bac2ea6af1f94..ed7fc0662ff2f0ff15248503777628fb18218c28 100644 --- a/game/base-system/orgasm.twee +++ b/game/base-system/orgasm.twee @@ -76,7 +76,7 @@ /*ToDo: Pregnancy, figure out how the Wraith, plantpeople, etc will handle pregnancy.*/ <<elseif $npcrow.includes($penistarget)>> <<recordSperm `{target: $NPCList[$penistarget].fullDescription, spermOwner: "pc", spermType: "human", rngModifier: _orgasmSpermRng}`>> - <<elseif $NPCList[$penistarget].pregnancy is 0 and $consensual is 1 and ["realistic", "fetish"].includes($pregnancytype)>> + <<elseif $NPCList[$penistarget].pregnancy is 0 and ["realistic", "fetish"].includes($pregnancytype)>> /* Pregnancy Count */ <<set $_count to Object.values($storedNPCs).reduce((prev, curr) => { if(curr.pregnancy) return prev + 1; @@ -92,14 +92,14 @@ <</if>> <<set $_impregnatedChance to Math.floor($_impregnatedChance * (_orgasmSpermRng / 100))>> /*If random NPC is impregnated, compress NPC and fetus*/ - <<if ($_impregnatedChance gte random(0,200) or _npcForceImpregnation) and $_count lte 10>> + <<if ($_impregnatedChance gte random(0,200) or _npcForceImpregnation)>> <<switch $NPCList[$penistarget].type>> <<case "human">><<set $_pregnancy to pregnancyGenerator.human(V.NPCList[$penistarget], "pc", true)>> <<case "wolf">><<set $_pregnancy to pregnancyGenerator.wolf(V.NPCList[$penistarget], "pc", true, "vagina", false)>> <<case "wolfgirl" "wolfboy">><<set $_pregnancy to pregnancyGenerator.wolf(V.NPCList[$penistarget], "pc", true, "vagina", true)>> <</switch>> <<if $_pregnancy and !(typeof $_pregnancy is "string" || $_pregnancy instanceof String)>> - <<if random(0,2) is 0 or setup.pregnancy.randomAlwaysKeep.includes($location)>> + <<if $consensual is 1 and ((random(0, 1 + $_count) is 0 and $_count lte 10) or (setup.pregnancy.randomAlwaysKeep.includes($location) and $_count lte 15))>> <<compressNPC $penistarget "pregnancy">> <<set $storedNPCs[_lastCompressedName].pregnancy to $_pregnancy>> /* ToDo: Uncomment when compression when is ready */ diff --git a/game/base-system/overlays/featsUI.twee b/game/base-system/overlays/featsUI.twee index cc2cccb09bba508b3310c2e06a3f10a7e8af8394..a0aed7763c61dde0a7d116089e12bc7800e61b03 100644 --- a/game/base-system/overlays/featsUI.twee +++ b/game/base-system/overlays/featsUI.twee @@ -423,11 +423,11 @@ <</if>> <<if _name is "aNewBestFriend" and $featsBoosts.upgradeDetails.aNewBestFriend.count gte 2>> <div id="aNewBestFriend"> - <label>Earslime Starting type: + <label>Earslime starting type: <<listbox "$featsBoosts.earSlimeType" autoselect>> <<option "Immature and passive" "immaturePassive">> <<option "Immature and aggressive" "immatureAggressive">> - <<option "Partly grown and agressive" "grownAggressive">> + <<option "Partly grown and aggressive" "grownAggressive">> <</listbox>> </label> </div> diff --git a/game/base-system/settings.twee b/game/base-system/settings.twee index 8a5a53df5b51386749d12ff65e4d6eea1a0d0402..5ed065bba03576c131967bc42fd963dae5f5bf67 100644 --- a/game/base-system/settings.twee +++ b/game/base-system/settings.twee @@ -286,7 +286,6 @@ <<unset _maleChanceSplit>> <<unset _beastMaleChanceSplit>> <<unset _pregnancytype>> - <<unset _cycledisable>> <<unset _incompletePregnancyDisable>> <</button>> </div> @@ -461,7 +460,6 @@ <<set $playerPregnancyBeastDisable to "f">> <<set $npcPregnancyDisable to "f">> <</if>> - <<set $cycledisable to _cycledisable>> <<if _incompletePregnancyDisable is "t" or (_incompletePregnancyDisable is "f" and !_foundPregnancy)>> <<set $incompletePregnancyDisable to _incompletePregnancyDisable>> <<npcPregnancyUpdater>> diff --git a/game/base-system/transformations.twee b/game/base-system/transformations.twee index 2f7963e475ad00e3bf80c6eea21e20af344e7f68..fe0e935e6782da64c3ce418c9d221b2de8bb8098 100644 --- a/game/base-system/transformations.twee +++ b/game/base-system/transformations.twee @@ -150,7 +150,7 @@ <<case "demon">> <<set $demonbuild = Math.clamp($demonbuild + _args[1], 0, 100)>> <</switch>> <</if>> - <<if _args[0] isnot "angel" and _args[0] isnot "demon" and _args[1] gte 1>> + <<if !["angel", "fallen", "demon"].includes(_args[0]) and _args[1] gte 1>> <<if _args[0] isnot "wolf" and $worn.neck.name isnot "spiked collar" and $worn.neck.name isnot "spiked collar with leash">> <<set $wolfbuild = Math.clamp($wolfbuild - _args[1], 0, 100)>> <</if>> diff --git a/game/overworld-town/loc-chalets/widgets.twee b/game/overworld-town/loc-chalets/widgets.twee index ecf5b754840c9beab3562d933e21f61ef205d8df..e77b475471c33c5a31a5f78f843627dc911177e1 100644 --- a/game/overworld-town/loc-chalets/widgets.twee +++ b/game/overworld-town/loc-chalets/widgets.twee @@ -157,7 +157,7 @@ <br><br> There are two others inside, a <<person2>><<person>> and a <<person3>><<person>>, both seated. They pretend to ignore you as you go about your work. <br><br> - <<if random(1, 3) is 3>> + <<if random(1, 3) is 3 and $worn.neck.collared isnot 1>> "Fancy making some extra cash?" the <<person1>><<person>> asks as you're finishing up. "We could use some entertainment." <<He>> holds a dog collar and leash. <br><br> "I'll give you <span class="gold">£30</span> If you let me lead you around with this, just for five minutes." diff --git a/game/overworld-town/loc-home/widgets.twee b/game/overworld-town/loc-home/widgets.twee index c12aa1068eb5cb6c5bd7878bc0ebdb2a75ecfc4c..cda685ab03c46fd80df5e5319395839b02235a73 100644 --- a/game/overworld-town/loc-home/widgets.twee +++ b/game/overworld-town/loc-home/widgets.twee @@ -70,8 +70,6 @@ <</widget>> <<widget "slimeWakeAlleyway">> - <<set _newLocation to ["Residential alleyways", "Commercial alleyways", "Park", "Industrial alleyways"].random()>> - <<set $eventskip to 1>> <<set $earSlime.eventTimer to 3>> <<storeon "bed" "return">> /* effects and sleepeffects requires due to ending sleep and changing location */ @@ -80,23 +78,31 @@ You wake up in a confused and disoriented state. The last thing you recall is getting into bed <<if $robinbed is "theirs">>with Robin<<else>>like normal<</if>>. However, you're clearly not in it anymore. You have a feeling that the slime in your ear is involved in some way. <br><br> + <<if $tutorial or $debug>> + <<set _newLocation to ["Residential alleyways", "Commercial alleyways", "Park", "Industrial alleyways"].random()>> + <<set $eventskip to 1>> - <<if random(0,100) gt 80 and (maleChance() lt 100 or $cbchance gt 0) and $earSlime.deviancy gte 3>> - <<set _coveredIn to "slime">> - <<slimeWakeBodyliquid "goo">> - <</if>> - <<if random(0,100) gt 80 and (maleChance() gt 0 or $dgchance gt 0) and $earSlime.promiscuity gte 3>> - <<set _coveredIn to (_coveredIn is "slime" ? "slime and semen" : "semen")>> - <<slimeWakeBodyliquid "semen">> - <</if>> - <<if _coveredIn isnot undefined>> - On top of this predicament, you find yourself covered in <<print _coveredIn>>. If this was the slime's doing, it clearly had its fun with your body while you slept. + <<if random(0,100) gt 80 and (maleChance() lt 100 or $cbchance gt 0) and $earSlime.deviancy gte 3>> + <<set _coveredIn to "slime">> + <<slimeWakeBodyliquid "goo">> + <</if>> + <<if random(0,100) gt 80 and (maleChance() gt 0 or $dgchance gt 0) and $earSlime.promiscuity gte 3>> + <<set _coveredIn to (_coveredIn is "slime" ? "slime and semen" : "semen")>> + <<slimeWakeBodyliquid "semen">> + <</if>> + <<if _coveredIn isnot undefined>> + On top of this predicament, you find yourself covered in <<print _coveredIn>>. If this was the slime's doing, it clearly had its fun with your body while you slept. + <br><br> + <</if>> + Having a look round your surroundings, you think that you've somehow been relocated to the <<print _newLocation.toLocaleLowerCase()>>. + <br><br> + <<link [[Next|_newLocation]]>><</link>> + <<else>> + <<set $tutorial to 1>> + <<generate1>><<person1>>Without warning, a <<person>> passing by, bumps into you. <<He>> staggers back and looks at you with anger, but <<his>> rage turns to lechery as <<he>> beholds you. "You're the cutest thing I've seen all week! Come 'ere." <br><br> + <<link [[Next|Tutorial]]>><<set $molestationstart to 1>><<set $tutorialExit to "Residential alleyways">><</link>> <</if>> - Having a look round your surroundings, you think that you've somehow been relocated to the <<print _newLocation.toLocaleLowerCase()>>. - <br><br> - <<link [[Next|_newLocation]]>><</link>> - <<exitAll>> <</widget>> diff --git a/img/sex/close/doggy/vaginabigparasitepanty.png b/img/sex/close/doggy/vaginabigparasitepanty.png new file mode 100644 index 0000000000000000000000000000000000000000..5c43b276556cd3de132b19526b91e1fab555bef4 Binary files /dev/null and b/img/sex/close/doggy/vaginabigparasitepanty.png differ diff --git a/img/sex/close/doggy/vaginabigparasitepanty_gray.png b/img/sex/close/doggy/vaginabigparasitepanty_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..0e55908d7c854e401dcf0ba36bfcd5ff2417479f Binary files /dev/null and b/img/sex/close/doggy/vaginabigparasitepanty_gray.png differ diff --git a/img/sex/close/doggy/vaginabigparasiteshorts.png b/img/sex/close/doggy/vaginabigparasiteshorts.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8ef6e583d69a0402b3fa84a3f64e83fd0e23ef Binary files /dev/null and b/img/sex/close/doggy/vaginabigparasiteshorts.png differ diff --git a/img/sex/close/doggy/vaginabigparasiteshorts_gray.png b/img/sex/close/doggy/vaginabigparasiteshorts_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9ba1793be1f4f88904217385248e8934ac8e20 Binary files /dev/null and b/img/sex/close/doggy/vaginabigparasiteshorts_gray.png differ diff --git a/img/sex/close/doggy/vaginaparasitepenetratebig_gray.png b/img/sex/close/doggy/vaginaparasitepenetratebig_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..0e55908d7c854e401dcf0ba36bfcd5ff2417479f Binary files /dev/null and b/img/sex/close/doggy/vaginaparasitepenetratebig_gray.png differ diff --git a/img/sex/close/missionary/vaginabigparasitepanty.png b/img/sex/close/missionary/vaginabigparasitepanty.png new file mode 100644 index 0000000000000000000000000000000000000000..acf7fecf4a216f87e0c4cceeded832ded2a67d9c Binary files /dev/null and b/img/sex/close/missionary/vaginabigparasitepanty.png differ diff --git a/img/sex/close/missionary/vaginabigparasitepanty_gray.png b/img/sex/close/missionary/vaginabigparasitepanty_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..9e350205f130fba2309cbb00255046d12039e780 Binary files /dev/null and b/img/sex/close/missionary/vaginabigparasitepanty_gray.png differ diff --git a/img/sex/close/missionary/vaginabigparasiteshorts.png b/img/sex/close/missionary/vaginabigparasiteshorts.png new file mode 100644 index 0000000000000000000000000000000000000000..8e34f9dc62139324d67ff87c259d1c4fad4e2599 Binary files /dev/null and b/img/sex/close/missionary/vaginabigparasiteshorts.png differ diff --git a/img/sex/close/missionary/vaginabigparasiteshorts_gray.png b/img/sex/close/missionary/vaginabigparasiteshorts_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..0070af56ac3ca9c880ab22a17c3e4036f97869ce Binary files /dev/null and b/img/sex/close/missionary/vaginabigparasiteshorts_gray.png differ diff --git a/img/sex/close/missionary/vaginapenetratebig.png b/img/sex/close/missionary/vaginapenetratebig.png index e2a6a67c5bf5659728af66e07dcdc77f72c50636..219173de3450956a5d7719b530bbf351b2519276 100644 Binary files a/img/sex/close/missionary/vaginapenetratebig.png and b/img/sex/close/missionary/vaginapenetratebig.png differ diff --git a/img/sex/closeRed/missionary/vaginapenetratebig.png b/img/sex/closeRed/missionary/vaginapenetratebig.png index 05733ca26617e782294c62de982bd9c5e1717d7e..8111aa57cd658c6b66edd486d95b4483e916121f 100644 Binary files a/img/sex/closeRed/missionary/vaginapenetratebig.png and b/img/sex/closeRed/missionary/vaginapenetratebig.png differ