JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
Welcome to Degrees of Lewdity Plus <<print StartConfig.version>><<if StartConfig.versionName>> <<print StartConfig.versionName>><</if>>. We're making a few changes to your game so it supports this latest version. Remember to update your save if things appear to be working. <<silently>> <<variablesVersionUpdate>> <<pregnancyVar>> <<setFont>> <<set $runWardrobeSanityChecker to true>> <</silently>> Looks like we're done already. <<link [[Resume|$navigation.stack.last()]]>><<run $navigation.stack.pop()>><</link>>
Welcome back to Degrees of Lewdity Plus <<- StartConfig.version>><<if StartConfig.versionName>> <<print StartConfig.versionName>><</if>>. <br><br> You have switched to an older version of the game, from <<- $saveVersions.last()>>, so we just want to confirm you know what you're doing. <br><br> <<link [[Confirm|$passagePrev]]>><</link>> <br> <span class="red">If you want to avoid potential issues, go back to the latest version.</span>
Welcome back to Degrees of Lewdity <<- StartConfig.version>><<if StartConfig.versionName>> <<print StartConfig.versionName>><</if>>. <br><br> You have switched from a modded version of the game, from <<- $saveVersions.last()>> back to Vanilla. <span class="red">This is dangerous, ''DO NOT'' report bugs to the Vanilla Developer Team.</span>. <br><br> <<link [[Confirm|$passagePrev]]>><</link>> <br> <span class="red">If you want to avoid potential issues, create a new save or stay with the mod.</span>
Welcome to Degrees of Lewdity Plus <<- StartConfig.version>><<if StartConfig.versionName>> <<print StartConfig.versionName>><</if>>! <br><br> It seems you're transferring a save from Vanilla <<- $saveVersions.last()>> to DoLP. <span class="gold">Please check your game settings in a safe room like your bedroom to check DoLP Settings!</span> Not doing this will result in you missing out on 99% of DoLP's content! DoLP is built on the idea of player control so nearly everything is a setting the player can change. <br><br> <<link [[Confirm|$passagePrev]]>><</link>> <br> <span class="red">Transferring your save from Vanilla to Modded is fine but Modded to Vanilla or Modded to Modded is almost always going to cause issues.</span>
<<if $intro is undefined>> <<gameStartOnly>> <</if>> <<if $options.images is 1>> <span id="bannerStyle"> <<if $feats.allSaves.points isnot undefined>> <<if ($feats.allSaves.points gte 200 and $bannerstyleintro.gold is false) or $bannerstyle is "gold">> <<set $bannerstyleintro.gold to true>> <<set $bannerstyleintro.silver to true>> <<set $bannerstyleintro.bronze to true>> <<set $bannerstyleintro.blood to true>> <<set $bannerstyleintro.alien to true>> <img class="resize" src="img/misc/bannerGold.png"> <<elseif ($feats.allSaves.points gte 150 and $bannerstyleintro.silver is false) or $bannerstyle is "silver">> <<set $bannerstyleintro.silver to true>> <<set $bannerstyleintro.bronze to true>> <<set $bannerstyleintro.blood to true>> <<set $bannerstyleintro.alien to true>> <img class="resize" src="img/misc/bannerSilver.png"> <<elseif ($feats.allSaves.points gte 100 and $bannerstyleintro.bronze is false) or $bannerstyle is "bronze">> <<set $bannerstyleintro.bronze to true>> <<set $bannerstyleintro.blood to true>> <<set $bannerstyleintro.alien to true>> <img class="resize" src="img/misc/bannerBronze.png"> <<elseif ($feats.allSaves.points gte 50 and $bannerstyleintro.blood is false) or $bannerstyle is "blood">> <<set $bannerstyleintro.blood to true>> <<set $bannerstyleintro.alien to true>> <img class="resize" src="img/misc/bannerBlood.png"> <<elseif ($feats.allSaves.points gte 25 and $bannerstyleintro.alien is false) or $bannerstyle is "alien">> <<set $bannerstyleintro.alien to true>> <img class="resize" src="img/misc/bannerAlien.png"> <<elseif $bannerstyle is "none">> <<else>> <!-- <<banner>> --> <img class="resize" src="img/misc/banner.png"> <</if>> <<elseif $bannerstyle is "none">> <<else>> <!-- <<banner>> --> <img class="resize" src="img/misc/banner.png"> <</if>> </span> <</if>> This work of fiction contains content of a sexual nature and is inappropriate for minors. All characters <span class="camouflage text" onclick="V.debug = 1, V.options.debugdisable = 'f', V.options.historyControls = true">de</span>picted are at least 18 years of age. Everything is consensual role play, and any animals are actually people in costumes. <br><br> <div class="small-description"> - Save files are stored in your browser's cache. Save to file or text in the "Export/Import" tab in "Saves" to avoid losing them. <br> - Be sure to check the "Options" tab on the sidebar for more in-game settings! <br><br> <div class="no-numberify"> <<button "DOL+ CREDITS">> <<overlayReplace "DoLPCredits">> <</button>> </div> <br><br></div> <<set $settingsExitPassage to "Start2">> <<initsettings>> <div id="settingsStart"> <<settingsStart>> </div>
<<variablesStart2>> Welcome to the alpha of Degrees of Lewdity Plus! <br><br> If you want to avoid trouble, dress modestly and stick to safe, well-lit areas. Nights are particularly dangerous. Dressing lewd will attract attention, both good and bad. <br><br> <<if Time.season is "winter">> The school year starts on the first Monday of January at <<ampm 9 0>>. The bus service is the easiest way to get around town. Don't forget your uniform and backpack! <<elseif Time.season is "spring" or Time.season is "summer">> School starts tomorrow at <<ampm 9 0>>. The bus service is the easiest way to get around town. Don't forget your uniform and backpack! <<else>> The new school year starts tomorrow at <<ampm 9 00>>. The bus service is the easiest way to get around town. Don't forget your uniform and backpack! <</if>> <br><br> <<doVersionCheck>> <<link [[Next|Orphanage Intro]]>><</link>> <br><br> <<if $debug is 1>> These options start with cheats enabled and £5000 <br> <<link [[Standard start|Orphanage Intro]]>><<cheatStart>><</link>> <br> <<link [[School Start|Oxford Street]]>><<cheatStart>><<pass 1 day>><</link>> <br> <<link [[Science Start|Oxford Street]]>><<cheatStart>><<pass 1 day>><<pass 2 hours>><</link>> <br> <<link [[Maths Start|Oxford Street]]>><<cheatStart>><<pass 1 day>><<pass 3 hours>><</link>> <br> <<link [[English Start|Oxford Street]]>><<cheatStart>><<pass 1 day>><<pass 4 hours>><</link>> <br> <<link [[History Start|Oxford Street]]>><<cheatStart>><<pass 1 day>><<pass 6 hours>><</link>> <br> <<link [[Swimming Start|Oxford Street]]>><<cheatStart>><<pass 1 day>><<pass 7 hours>><</link>> <br> <<link [[Testing Room]]>><<cheatStart>><<upperstrip>><<lowerstrip>><<underlowerstrip>><</link>> <br> <<link [[Robin Low Trauma Low Love|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set C.npc.Robin.love to 0>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 2>><<trauma 60>><</link>> <br> <<link [[Robin Low Trauma Medium Love|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set C.npc.Robin.love to 50>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 2>><<trauma 60>><</link>> <br> <<link [[Robin Low Trauma High Love|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set C.npc.Robin.love to 90>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 2>><<trauma 60>><</link>> <br> <<link [[Robin High Trauma Low Love|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set C.npc.Robin.love to 0>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>> <br> <<link [[Robin High Trauma Medium Love|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set C.npc.Robin.love to 50>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>> <br> <<link [[Robin High Trauma High Love|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set C.npc.Robin.love to 90>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>> <br> <<link [[Robin After Paying Police With Money|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set $daily.robin.policePay to 1>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>> <br> <<link [[Robin After Paying Police With Body|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set $daily.robin.policeBody to 1>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>> <br> <<link [[Robin's Debt Paid|Robin's Room Entrance]]>><<cheatStart>><<npc Robin>><<endevent>><<set $robinpaid to 1>><<set C.npc.Robin.init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>> <br><br> <<link [[Black Wolf|ForestHuntDebug]]>><<cheatStart>><<npc "Black Wolf">><<ruined>><<endevent>><<set $blackwolfhunt to 1>><<set $wolfpacktrust to 10>><</link>> <br><br> <<link [[Winter Start|Orphanage Intro]]>><<set Time.startDate to new DateTime(2022, 12, 4, 7)>><</link>> (Begins the game at the start of winter. For testing.) <br> <<link [[Christmas Start|Orphanage Intro]]>><<npc Kylar>><<person1>><<endevent>><<set C.npc.Kylar.state to "active">><<set Time.startDate to new DateTime(2022, 12, 23, 7)>><<money 50000 "debug">><</link>> (Begins the game two days before Christmas. For testing.) <br> <<link [[Valentine's Day Start|Orphanage Intro]]>><<set Time.startDate to new DateTime(2022, 2, 12, 7)>><</link>> (Begins the game 2 days before Valentine's Day. For testing.) <br> <</if>>
<<widget "versioninfo">> <h3>Degrees of Lewdity Plus <<print StartConfig.version>></h3> <<if StartConfig.versionName>> <h4><<print StartConfig.versionName>></h4> <</if>> <<if StartConfig.sneaky>> <h4 class="orange">SNEAKY BUILD</h4> <</if>> <</widget>> <<widget "linkinformation">> <div class="m-2"> <p class="gold m-0">Official Vanilla website</p> [[vrelnir.com|"https://www.vrelnir.com"]] </div> <div class="m-2"> <p class="gold m-0">Vanilla Changelog and information</p> [[vrelnir.blogspot.com|"https://vrelnir.blogspot.com"]] </div> <div class="m-2"> <p class="gold m-0">DoLP Changelog and Releases</p> [[gitgud.io/Andrest07/degrees-of-lewdity-plus/-/releases|"https://gitgud.io/Andrest07/degrees-of-lewdity-plus/-/releases"]] </div> <div class="m-2"> <p class="gold m-0">Vanilla Wiki</p> [[degreesoflewdity.miraheze.org/wiki/Main_Page|"https://degreesoflewdity.miraheze.org/wiki/Main_Page"]] </div> <div class="m-2"> <p class="gold m-0">DoLP Wiki</p> [[dolmodding.miraheze.org/wiki/DoL_Plus|"https://dolmodding.miraheze.org/wiki/DoL_Plus"]] </div> <div class="m-2"> <p class="gold m-0">Support Vanilla development</p> [[subscribestar.adult/vrelnir|"https://subscribestar.adult/vrelnir"]] <p class="gold m-0">Support DoLP development</p> [[patreon.com/DegreesofLewdityPlus|"https://www.patreon.com/DegreesofLewdityPlus"]] </div> <<if StartConfig.sourceLinkEnabled>> <div class="m-2"> <p class="gold m-0">Vanilla Source code</p> [[gitgud.io/Vrelnir|"https://gitgud.io/Vrelnir/degrees-of-lewdity"]] </div> <div class="m-2"> <p class="gold m-0">DoLP Source code</p> [[gitgud.io/Andrest07|"https://gitgud.io/Andrest07/degrees-of-lewdity-plus"]] </div> <</if>> <<if StartConfig.socialMediaEnabled>> <div class="m-2"> <p class="gold m-0">Official Vanilla Discord</p> [[discord.gg/VznUtEh|"https://discord.gg/VznUtEh"]] </div> <div class="m-2"> <p class="gold m-0">Official Modding Discord</p> [[discord.gg/mGpRSn9qMF|"https://discord.gg/mGpRSn9qMF"]] </div> <div class="m-2"> <p class="gold m-0">Official DoLP Discord</p> [[discord.gg/H8PRRw8ZvN|"https://discord.gg/H8PRRw8ZvN"]] </div> <</if>> <</widget>>
<<set $demo to $demo or { type: "human", position: "missionary", consent: true, debug: true, }>> <<if $sexstart is 1>> <<set $sexstart to 0>> <div class="combat-init"> <<switch $demo.type>> <<case "human">> <p class="text-muted">Man init</p> <<maninit>> <<case "bestial">> <p class="text-muted">Beast init</p> <<beastCombatInit>> <</switch>> <<if $demo.consent>> <<consensual>> <<set $consensual to 1>> <<else>> <<molested>> <<set $consensual to 0>> <</if>> <<set $position to $demo.position>> </div> <</if>> <<if $demo.type is "tentacles">> <div class="combat-state"> <p class="text-muted">State tentacles</p> <<statetentacles>> </div> <</if>> <div class="combat-effects"> <p class="text-muted">Effects</p> <<effects>> </div> <div class="combat-effectsman"> <p class="text-muted">Effects man</p> <<effectsman>> </div> <div class="combat-man"> <<switch $demo.type>> <<case "human">> <p class="text-muted">Man</p> <<man>> <<case "bestial">> <p class="text-muted">Beast</p> <<beast>> <</switch>> </div> <<if $demo.type.includes("human")>> <div class="combat-state"> <p class="text-muted">State man</p> <<stateman>> </div> <</if>> <div class="combat-actions"> <p class="text-muted">Animate combat</p> <<animateCombat>> </div> <div class="combat-actions"> <p class="text-muted">Actions man</p> <<actionsman>> </div> <span id="next"><<link [[Next|$passage]]>><</link>></span><<nexttext>> <<link [[Bedroom|Bedroom]]>> <<endcombatdemo>> <</link>> <br><br>
<<set $demo to $demo or { type: "human", position: "missionary", consent: true, debug: true, }>> <<endcombat>> Configure setup for the combat system:<br><br> Type: <div> <label><<radiobutton "$demo.type" "human" autocheck>> Human</label> <label><<radiobutton "$demo.type" "animal" autocheck>> Bestial</label> </div> Consent: <div> <label><<radiobutton "$demo.consent" true autocheck>> Consensual</label> <label><<radiobutton "$demo.consent" false autocheck>> Non-con</label> </div> Debugging: <div> <label><<radiobutton "$demo.debug" true autocheck>> Enabled</label> <label><<radiobutton "$demo.debug" false autocheck>> Disabled</label> </div> <div id="combat-setup"> <<combatsetup>> </div> <<combatdemotools>> <br> <<link [[Start|Combat Demo]]>><<set $sexstart to 1>><</link>> <br> <<link [[Editor|Canvas Combat Editor]]>><<set $sexstart to 1>><</link>> <br><br> <<link [[Bedroom|Bedroom]]>><</link>> <br> <<link [[Clothing store|Shopping Centre Top]]>><</link>> <br> <<link [[Forest store|Forest Shop]]>><</link>>
<<set $demo to $demo or { type: "human", position: "missionary", consent: true, debug: true, }>> <<if $sexstart is 1>> <<set $sexstart to 0>> <div class="combat-init"> <<switch $demo.type>> <<case "human">> <p class="text-muted">Man init</p> <<maninit>> <<case "bestial">> <p class="text-muted">Beast init</p> <<beastCombatInit>> <</switch>> <<if $demo.consent>> <<consensual>> <<set $consensual to 1>> <<else>> <<molested>> <<set $consensual to 0>> <</if>> <<set $position to $demo.position>> </div> <</if>> <<if $demo.type is "tentacles">> <div class="combat-state"> <p class="text-muted">State tentacles</p> <<statetentacles>> </div> <</if>> <div class="combat-effects"> <p class="text-muted">Effects</p> <<effects>> </div> <div class="combat-effectsman"> <p class="text-muted">Effects man</p> <<effectsman>> </div> <div class="combat-man"> <<switch $demo.type>> <<case "human">> <p class="text-muted">Man</p> <<man>> <<case "bestial">> <p class="text-muted">Beast</p> <<beast>> <</switch>> </div> <<if $demo.type.includes("human")>> <div class="combat-state"> <p class="text-muted">State man</p> <<stateman>> </div> <</if>> <div class="combat-actions"> <p class="text-muted">Animate combat</p> <<animateCombat>> </div> <div class="combat-actions"> <p class="text-muted">Actions man</p> <<actionsman>> </div> <span id="next"><<link [[Next|$passage]]>><</link>></span><<nexttext>> <<link [[Bedroom|Bedroom]]>> <<endcombatdemo>> <</link>> <br><br> <<combatdemotools>> <br> <<if $demo.consent>> <<link [[Set to Rape|$passage]]>> <<set $demo.consent to false>> <<endcombat>> <<set $sexstart to 1>> <</link>> <<else>> <<link [[Set to Consensual|$passage]]>> <<set $demo.consent to true>> <<endcombat>> <<set $sexstart to 1>> <</link>> <</if>> <br><br> <<if $position isnot "wall">> <<link [[Set to missionary|$passage]]>> <<set $demo.position to "missionary">> <<endcombat>> <<set $sexstart to 1>> <</link>> | <<link [[Set to doggy|$passage]]>> <<set $demo.position to "doggy">> <<endcombat>> <<set $sexstart to 1>> <</link>> | <<link [[Don't set position|$passage]]>> <<set $demo.position to 0>> <<endcombat>> <<set $sexstart to 1>> <</link>> | <br><br> <</if>>
<<link [[Bedroom]]>><</link>> <hr> <!-- "divsex" is cache slot id to preserve layer caches between passages --> <<selectmodel "sexdemo" "divsex">> <<set _modeloptions.animation_speed to "fast">> <<set _modeloptions.position to "doggy">> <<set _modeloptions.penis to "default">> <<set _modeloptions.vagina to true>> <<set _modeloptions.worn.under_lower.index to 1>> <<set _modeloptions.worn.under_lower.state to "totheside">> <<set _modeloptions.worn.under_lower.colour to "blue">> <<set _modeloptions.xray_vaginal_show to true>> <<set _modeloptions.close_vagina_show to true>> <<set _modeloptions.vagina_state to "penetrated">> <<set _modeloptions.vagina_penetrator to "tentacle">> <<set _modeloptions.vagina_penetrator_size to 5>> <<set _modeloptions.vagina_cumming to true>> <<animatemodel "">> <!-- Editor hooks to "last model" --> <<canvasModelEditor>>
<<widget "animateCombat">> <<if !$options.images or !$options.combatImages>> <<exit>> <</if>> <<if $position is "stalk">> <<exit>> <</if>> <<if $debug>> <<addLayerDialog>> <</if>> <<canvasCombatEditor>> <!-- Centres the inner grid --> <div class="d-flex flex-row flex-centre flex-wrap"> <!-- Organises canvas windows into a grid --> <div class="combat-grid d-grid"> <div class="combat-centre"> <!-- Top row - Contains miniture viewports --> <div class="combat-close d-flex flex-row justify-content-center"> <div class="combat-close-chest"> <<selectmodel "combatCloseChest" "divCloseChest">> <<animatemodel "">> </div> <div class="combat-close-penis"> <<selectmodel "combatClosePenis" "divClosePenis">> <<animatemodel "">> </div> <div class="combat-close-vagina"> <<selectmodel "combatCloseVagina" "divCloseVagina">> <<animatemodel "">> </div> <div class="combat-close-arse"> <<selectmodel "combatCloseArse" "divCloseArse">> <<animatemodel "">> </div> </div> <!-- Main canvas container. --> <div class="combat-main d-flex justify-content-center position-relative"> <<setup-multi-canvas "combatMain" "combatMainPc" "combatMainPc0">> <<for $_npcIndex, $_npc range $NPCList>> <<if CombatRenderer.npcTypes.includes($_npc.type)>> <<set _metadata to { index: $_npcIndex }>> <<add-multi-canvas "combatMain" "combatMainNpc" `"combatMainNpc" + $_npcIndex` _metadata>> <</if>> <</for>> <<add-multi-canvas "combatMain" "combatMainSwarm" "combatMainSwarm0">> <<reset-multi-canvas "combatMain">> <<start-multi-canvas-rendering "combatMain">> <<set _animspeed to NpcCombatMapper.getNpcAnimationSpeed()>> </div> </div> <<if XrayCombatMapper.isPcBlowjobVisible()>> <div class="combat-xray-penis"> <<selectmodel "combatXrayPenis" "divXrayPenis">> <<animatemodel "w-100 mw-256">> </div> <</if>> <<if XrayCombatMapper.isPcVaginaVisible()>> <div class="combat-xray-vagina"> <<selectmodel "combatXrayVagina" "divXrayVagina">> <<animatemodel "w-100 mw-256">> </div> <</if>> <<if XrayCombatMapper.isPcAnusVisible()>> <div class="combat-xray-arse"> <<selectmodel "combatXrayArse" "divXrayArse">> <<animatemodel "w-100 mw-256">> </div> <</if>> </div> </div> <<if $debug>> <<set _crOverrides to {}>> <<set _options to T.multiCombatModels.combatMain.models.combatMainPc0.options>> <div class="combat"> <<bindCombatDebugControls>> <details> <summary class="d-flex flex-row justify-content-between"> <span>Layers</span> <<if CombatEditor.layersChecked>> <input type="checkbox" name="layers" checked /> <<else>> <input type="checkbox" name="layers" /> <</if>> </summary> <div @class="'combat-layers ' + (CombatEditor.layersChecked ? 'show-first' : '')"> <<addLayerElements>> </div> </details> <details> <summary>Main options</summary> <label class="d-inline-flex flex-column"> Position: <<listbox "$position" autoselect>> <<optionsfrom setup.positions>> <</listbox>> </label> <<set _crOverrides.legFrontPosition to PlayerCombatMapper.mapPcToLegFrontPosition(_options)>> <label class="d-inline-flex flex-column"> Front leg: <<listbox "_crOverrides.legFrontPosition" autoselect>> <<optionsfrom setup.legPositions>> <</listbox>> </label> <<set _crOverrides.legBackPosition to PlayerCombatMapper.mapPcToLegBackPosition(_options)>> <label class="d-inline-flex flex-column"> Back leg: <<listbox "_crOverrides.legBackPosition" autoselect>> <<optionsfrom setup.legPositions>> <</listbox>> </label> <<set _crOverrides.animFrames to PlayerCombatMapper.getPcAnimationFrameCount(_options)>> <label class="d-inline-flex flex-column"> Frames: <<listbox "_crOverrides.animFrames" autoselect>> <<option "4" 4>> <<option "2" 2>> <</listbox>> </label> <<set _crOverrides.animSpeed to PlayerCombatMapper.getPcAnimationSpeed(_options)>> <label class="d-inline-flex flex-column"> Speed: <<listbox "_crOverrides.animSpeed" autoselect>> <<option "VFast" "vfast">> <<option "Fast" "fast">> <<option "Mid" "mid">> <<option "Slow" "slow">> <<option "Idle" "idle">> <</listbox>> </label> </details> <details> <summary>Clothing options</summary> <div class="d-grid grid-auto-2 gap-1"> <<for _slot range Object.keys($worn)>> <<set _wornSetup to CombatRenderer.getClothingSetupBySlot(_slot)>> <<set _source to CombatRenderer.getSourceClothing(_slot, _wornSetup)>> <<set _worn to $worn[_slot]>> <<capture _worn, _wornSetup, _source>> <div class="d-flex flex-column border rounded justify-content-space-between p-1"> <label class="d-flex flex-row justify-content-space-between"> <<= _slot>> </label> <label class="d-flex flex-row justify-content-space-between"> <<= _wornSetup.name_cap>> </label> <label class="d-flex flex-row justify-content-space-between"> <<= _source.variable>> </label> <label class="d-flex flex-row justify-content-space-between"> State: <<listbox "_worn.state" autoselect>> <<optionsfrom setup.clothingStates>> <</listbox>> </label> </div> <</capture>> <</for>> </div> </details> </div> <</if>> <</widget>> <<widget "endcombatdemo">> <<run delete $demo>> <<endcombat>> <</widget>> <<widget "combatsetup">> <div class="d-flex flex-horizontal flex-wrap gap-2 my-2"> <<for _i = 0; _i lt $NPCList.length; _i++>> <<set _npc to $NPCList[_i]>> <<if _npc.type eq null>> <<continue>> <</if>> <<capture _npc>> <div class="p-2 border border-primary"> Type: <<- _npc.type>> Sex: <<- _npc.gender>> Appearance: <<- _npc.pronoun>> </div> <</capture>> <</for>> </div> <div class="d-flex flex-vertical"> <<button "Add human">> <<generateNPC `$NPCList.countWith(a => a.type) + 1`>> <<replace "#combat-setup">> <<combatsetup>> <</replace>> <</button>> <<listbox "_animalType" autoselect>> <<optionsfrom $BeastList>> <</listbox>> <<button `"Set " + _animalType`>> <<beastNEWinit `$NPCList.countWith(a => a.type) + 1` _animalType>> <<replace "#combat-setup">> <<combatsetup>> <</replace>> <</button>> <<button "Clear">> <<endevent>> <<replace "#combat-setup">> <<combatsetup>> <</replace>> <</button>> </div> <</widget>> <<widget "combatdemotools">> Tools: <div> <div id="tools-random-peek"> Next random: <<- State.prng.peek(1)>> </div> <<button "Randomly shift RNG">> <<script>> const iterations = Math.trunc(Math.random() * 1000); for (let index = 0; index < iterations; index++) { State.random(); } <</script>> <<replace "#tools-random-peek">> Next random: <<- State.prng.peek(1)>> <</replace>> <</button>> </div> <</widget>>
/*Add new hairstyles here. Please put in alphabetical order! alt: Alternate hairstyle to use for certain styles of headwear alt_head_type: Type of headwear that alt style is used for*/ /*Side Styles*/ <<widget "init_hairsides">> <<set setup.hairstyles.sides to [ {name: "natural", name_cap: "Natural", variable: "default", hasCombatImg: true, type: ["loose", "wavy"], shop: ["mirrorhair"], }, {name: "afro", name_cap: "Afro", variable: "fro", type: ["textured", "loose"], shop: ["mirrorhair"], }, {name: "afro pouf", name_cap: "Afro Pouf", variable: "afro pouf", type: ["textured", "ponytail"], shop: ["mirrorhair"], }, {name: "afro puffs", name_cap: "Afro Puffs", variable: "afro puffs", type: ["textured", "pigtails"], shop: ["mirrorhair"], }, {name: "all down", name_cap: "All Down", variable: "all down", type: ["loose"], shop: ["mirrorhair"], }, {name: "bedhead", name_cap: "Bedhead", variable: "bedhead", type: ["loose"], shop: ["mirrorhair"], }, {name: "braid left", name_cap: "Braid Left", variable: "braid left", type: ["braids"], shop: ["mirrorhair"], }, {name: "braid right", name_cap: "Braid Right", variable: "braid right", type: ["braids"], shop: ["mirrorhair"], }, {name: "bubble tails", name_cap: "Bubble Tails", variable: "bubble tails", type: ["pigtails"], shop: ["mirrorhair"], }, {name: "crescent tails", name_cap: "Crescent Tails", variable: "crescent tails", type: ["pigtails"], shop: ["mirrorhair"], }, {name: "curly", name_cap: "Curly", variable: "curl", type: ["loose", "curly"], shop: ["mirrorhair"], }, {name: "curly pigtails", name_cap: "Curly Pigtails", variable: "curly pigtails", type: ["pigtails", "curly"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "curly side up", name_cap: "Curly Side Up", variable: "curly side up", type: ["curly", "loose"], shop: ["mirrorhair"], }, {name: "defined curls", name_cap: "Defined Curls", variable: "defined curl", type: ["loose", "curly"], shop: ["mirrorhair"], }, {name: "draggletail", name_cap: "Draggletail", variable: "messy ponytail", type: ["ponytail"], shop: ["mirrorhair"], }, {name: "dreads", name_cap: "Dreads", variable: "dreads", type: ["braids", "textured"], shop: ["mirrorhair"], }, {name: "drill ringlets", name_cap: "Drill Ringlets", variable: "drill ringlets", type: ["curly", "loose"], shop: ["mirrorhair"], }, {name: "flat ponytail", name_cap: "Flat Ponytail", variable: "flat ponytail", type: ["ponytail", "sleek"], shop: ["mirrorhair"], }, {name: "fluffy ponytail", name_cap: "Fluffy Ponytail", variable: "fluffy ponytail", type: ["ponytail", "wavy"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "french bob", name_cap: "French Bob", variable: "french bob", type: ["loose", "sleek", "short"], shop: ["mirrorhair"], }, {name: "half-up", name_cap: "Half-up", variable: "half-up", type: ["loose"], alt: "all down", alt_head_type: ["hat", "veil"], shop: ["mirrorhair"], }, {name: "half-up twintail", name_cap: "Half-up Twintail", variable: "half up twintail", type: ["loose", "pigtails"], alt: "princess wave", alt_head_type: ["hat", "veil"], shop: ["mirrorhair"], }, {name: "heart braids", name_cap: "Heart Braids", variable: "heart braid", type: ["braids", "loose", "wavy"], shop: ["mirrorhair"], }, {name: "jellyfish ponytail", name_cap: "Jellyfish Ponytail", variable: "jellyfish ponytail", type: ["ponytail", "curly"], shop: ["mirrorhair"], }, {name: "jellyfish twintails", name_cap: "Jellyfish Twintails", variable: "jellyfish twintails", type: ["pigtails", "curly"], shop: ["mirrorhair"], }, {name: "layered bob", name_cap: "Layered Bob", variable: "layered bob", hasCombatImg: true, type: ["short", "loose", "sleek"], shop: ["mirrorhair"], }, {name: "left fishtail", name_cap: "Left Fishtail", variable: "left fishtail", type: ["loose", "braids"], shop: ["mirrorhair"], }, {name: "loop braids", name_cap: "Loop Braids", variable: "loop braid", type: ["braids", "pigtails"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "loose", name_cap: "Loose", variable: "loose", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "low tails", name_cap: "Low Tails", variable: "low tails", type: ["pigtails"], shop: ["mirrorhair"], }, {name: "messy", name_cap: "Messy", variable: "messy", type: ["short"], shop: ["mirrorhair"], }, {name: "messy bun", name_cap: "Messy Bun", variable: "messy bun", type: ["buns"], shop: ["mirrorhair"], }, {name: "neat", name_cap: "Neat", variable: "neat", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "pigtails", name_cap: "Pigtails", variable: "pigtails", type: ["pigtails", "sleek"], shop: ["mirrorhair"], }, {name: "ponytail", name_cap: "Ponytail", variable: "ponytail", type: ["ponytail", "sleek"], shop: ["mirrorhair"], }, {name: "princess twintails", name_cap: "Princess Twintails", variable: "princess twintails", alt: "shaved", alt_head_type: ["veil"], type: ["wavy", "pigtails"], shop: ["mirrorhair"], }, {name: "princess wave", name_cap: "Princess Wave", variable: "princess wave", type: ["loose", "wavy"], shop: ["mirrorhair"], }, {name: "ribbon tail", name_cap: "Ribbon Tail", variable: "ribbon tail", type: ["loose"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "right fishtail", name_cap: "Right Fishtail", variable: "right fishtail", type: ["loose", "braids"], shop: ["mirrorhair"], }, {name: "ruffled", name_cap: "Ruffled", variable: "ruffled", type: ["loose", "wavy"], shop: ["mirrorhair"], }, {name: "sailor buns", name_cap: "Sailor Buns", variable: "sailor buns", type: ["buns", "loose"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "scorpion tails", name_cap: "Scorpion Tails", variable: "scorpion tails", type: ["pigtails"], alt: "bubble tails", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "shaved", name_cap: "Shaved", variable: "shaved", type: ["short"], shop: ["mirrorhair"], }, {name: "short", name_cap: "Short", variable: "short", hasCombatImg: true, type: ["short"], shop: ["mirrorhair"], }, {name: "short spiky", name_cap: "Short Spiky", variable: "short spiky", type: ["loose", "short"], shop: ["mirrorhair"], }, {name: "straight bob", name_cap: "Straight bob", variable: "straight bob", type: ["loose", "sleek", "short"], shop: ["mirrorhair"], }, {name: "sidecut", name_cap: "Sidecut", variable: "sidecut", type: ["loose", "curly"], shop: ["mirrorhair"], }, {name: "sidetail left", name_cap: "Sidetail Left", variable: "sidetail left", type: ["ponytail"], shop: ["mirrorhair"], }, {name: "sidetail right", name_cap: "Sidetail Right", variable: "sidetail right", type: ["ponytail"], shop: ["mirrorhair"], }, {name: "sleek", name_cap: "Sleek", variable: "sleek", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "space buns", name_cap: "Space Buns", variable: "space buns", type: ["buns", "loose", "sleek"], shop: ["mirrorhair"], }, {name: "straight", name_cap: "Straight", variable: "straight", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "swept left", name_cap: "Swept Left", variable: "swept left", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "thick pigtails", name_cap: "Thick Pigtails", variable: "thick pigtails", type: ["pigtails"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "thick ponytail", name_cap: "Thick Ponytail", variable: "thick ponytail", type: ["ponytail"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "thick sidetail", name_cap: "Thick Sidetail", variable: "thick sidetail", type: ["ponytail"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "thick twintails", name_cap: "Thick Twintails", variable: "thick twintails", type: ["pigtails"], alt: "shaved", alt_head_type: ["veil"], shop: ["mirrorhair"], }, {name: "twin braids", name_cap: "Twin Braids", variable: "twin braids", type: ["braids"], shop: ["mirrorhair"], }, {name: "twin fishtails", name_cap: "Twin Fishtails", variable: "twin fishtails", type: ["loose", "braids"], shop: ["mirrorhair"], }, {name: "twintails", name_cap: "Twintails", variable: "twintails", type: ["pigtails"], shop: ["mirrorhair"], }, {name: "twin double braids", name_cap: "Twin Double Braids", variable: "twin double braids", type: ["braids"], shop: ["mirrorhair"], }, ]>> <</widget>> /*Fringe Styles */ <<widget "init_hairfringe">> <<set setup.hairstyles.fringe to [ {name: "natural", name_cap: "Natural", variable: "default", type: ["short"], shop: ["mirrorhair"], }, {name: "aerial", name_cap: "Aerial", variable: "aerial", type: ["sleek"], shop: ["mirrorhair"], }, {name: "blunt locks", name_cap: "Blunt Locks", variable: "blunt locks", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "bowl cut", name_cap: "Bowl Cut", variable: "bowl", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "bedhead", name_cap: "Bedhead", variable: "bedhead", type: ["short"], shop: ["mirrorhair"], }, {name: "buzzcut", name_cap: "Buzzcut", variable: "buzzcut", hasCombatImg: true, type: ["short"], shop: ["mirrorhair"], }, {name: "curtain", name_cap: "Curtain", variable: "curtain", hasCombatImg: true, type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "drill ringlets", name_cap: "Drill Ringlets", variable: "drill ringlets", type: ["curly", "loose"], shop: ["mirrorhair"], }, {name: "dreadlocks", name_cap: "Dreadlocks", variable: "dreadlocks", type: ["textured", "short"], shop: ["mirrorhair"], }, {name: "dread bun", name_cap: "Dread Bun", variable: "dread bun", type: ["textured", "buns"], shop: ["mirrorhair"], }, {name: "emo", name_cap: "Emo", variable: "emo", type: ["wavy", "short"], shop: ["mirrorhair"], }, {name: "emo left", name_cap: "Emo Left", variable: "emo left", type: ["wavy", "short"], shop: ["mirrorhair"], }, {name: "emo right", name_cap: "Emo Right", variable: "emo right", type: ["wavy", "short"], shop: ["mirrorhair"], }, {name: "flat", name_cap: "Flat", variable: "flat", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "framed", name_cap: "Framed", variable: "framed", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "fro", name_cap: "Fro", variable: "fro", type: ["textured", "loose"], shop: ["mirrorhair"], }, {name: "front braids", name_cap: "Front Braids", variable: "front braids", type: ["braids", "pigtails"], shop: ["mirrorhair"], }, {name: "hime", name_cap: "Hime", variable: "hime", hasCombatImg: true, type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "loose", name_cap: "Loose", variable: "loose", type: ["loose"], shop: ["mirrorhair"], }, {name: "messy", name_cap: "Messy", variable: "messy", type: ["short"], shop: ["mirrorhair"], }, {name: "messy curls", name_cap: "Messy curls", variable: "messy curls", type: ["short", "curly"], shop: ["mirrorhair"], }, {name: "middle part", name_cap: "Middle part", variable: "middlepart", type: ["sleek"], shop: ["mirrorhair"], }, {name: "milkmaid braid", name_cap: "Milkmaid braid", variable: "milkmaid", type: ["braid"], shop: ["mirrorhair"], }, {name: "mohawk", name_cap: "Mohawk", variable: "mohawk", hasCombatImg: true, type: ["short"], shop: ["mirrorhair"], }, {name: "overgrown", name_cap: "Overgrown", variable: "overgrown", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "parted", name_cap: "Parted", variable: "parted", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "princess wave", name_cap: "Princess Wave", variable: "princess wave", type: ["loose", "wavy"], shop: ["mirrorhair"], }, {name: "quiff", name_cap: "Quiff", variable: "quiff", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "ringlet curls", name_cap: "Ringlet Curls", variable: "ringlet curl", type: ["curly", "loose"], shop: ["mirrorhair"], }, {name: "ringlets", name_cap: "Ringlets", variable: "ringlets", type: ["curly", "loose"], shop: ["mirrorhair"], }, {name: "ruffled", name_cap: "Ruffled", variable: "ruffled", type: ["loose", "wavy"], shop: ["mirrorhair"], }, {name: "sectioned", name_cap: "Sectioned", variable: "sectioned", type: ["straight"], shop: ["mirrorhair"], }, {name: "sidecut", name_cap: "Sidecut", variable: "sidecut", type: ["loose", "curly"], shop: ["mirrorhair"], }, {name: "side braid", name_cap: "Side Braid", variable: "sideswept braid", type: ["braids", "curly"], shop: ["mirrorhair"], }, {name: "side-pinned", name_cap: "Side-pinned", variable: "side-pinned", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "short air vents", name_cap: "Short Air Vents", variable: "short air vents", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "sleek", name_cap: "Sleek", variable: "sleek", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "split", name_cap: "Split", variable: "split", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "straight", name_cap: "Straight", variable: "straight", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "straight curls", name_cap: "Straight Curls", variable: "straight curl", type: ["curly", "short"], shop: ["mirrorhair"], }, {name: "straight tails", name_cap: "Straight Tails", variable: "straight tails", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "swept back", name_cap: "Swept Back", variable: "swept back", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "swept left", name_cap: "Swept Left", variable: "swept left", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "thin flaps", name_cap: "Thin Flaps", variable: "thin flaps", type: ["loose"], shop: ["mirrorhair"], }, {name: "tied back", name_cap: "Tied Back", variable: "tied back", type: ["short", "sleek"], shop: ["mirrorhair"], }, {name: "trident", name_cap: "Trident", variable: "trident", type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "wide flaps", name_cap: "Wide Flaps", variable: "wide flaps", hasCombatImg: true, type: ["loose", "sleek"], shop: ["mirrorhair"], }, {name: "loose antenna", name_cap: "Loose Antenna", variable: "loose antenna", type: ["loose"], shop: ["mirrorhair"], }, ]>> <</widget>> <<widget "hair_data">> <<set setup.hairstyles to {}>> <<init_hairfringe>> <<init_hairsides>> <<set setup.hairTraits = [...new Set(Object.keys(setup.hairstyles).flatMap(x => setup.hairstyles[x]).flatMap(x => x.type))]>> <</widget>>
<<widget "npcList">> <<script>> const NPCList = []; for (let idx = 0; idx < 6; ++idx) { NPCList.push(clone(setup.baseNPC)); /* carry over values from existing generated npcs and add current index */ /* uses .description to detect if npc is not a stub, in case of trouble try another variable */ if (V.NPCList && V.NPCList[idx].description) { const npc = NPCList[idx]; npc.index = idx; Object.assign(npc, V.NPCList[idx]); if (!npc.type) npc.type = "human"; } } V.NPCList = clone(NPCList); <</script>> /* should this even be here? */ <<set $BeastList to ["dog","cat","pig","wolf","dolphin","lizard","bear","boar","creature","horse","fox","hawk","cow","spider"]>> <<set $npcListVersion to 3>> <</widget>>
<<widget "npcNamed">> <!-- To add new Named NPC, add new npc name to setup.NPCNameList in variables-static.twee, and tag values to end. Rest of code should automatically scope based on size of list. --> <!-- NPC descriptions is set as names, and their titles are being established for compatibility with general NPCs --> <<if $npcNamedVersion is 1>> <<set _tempNPCName to clone($NPCName)>> <</if>> <<set $NPCName = []>> <<for _npc range setup.NPCNameList>> <<run $NPCName.push(clone(setup.baseNNPC))>> <</for>> <<set $NPCNameList to setup.NPCNameList>> /* temporary compatibility layer before full C.npc conversion */ <!-- Draft default pronoun list. Random selection is part of initNPCgender widget --> /% <<set _pro to ["m","f","f","m","m","m","m","m","f","f","m","m","f","m","f","m","m","m","f","m","m","m","m","m","f","m","m", "m"]>> %/ <<set _tit to ["businessperson", "caretaker", "brothel owner", "dance coach", "club owner","English teacher","hunter", "shopkeeper", "doctor", "pious", "loner", "criminal", "headteacher", "swimming teacher", "sewer dweller", "maths teacher", "orphan", "cafe owner", "science teacher", "bully", "history teacher", "alpha", "photographer", "mayor", "farmer", "farmhand", "terror", "smuggler", "faithful", "reflection", "pirate", "MMA coach"]>> <<set _ins to ["weak", "weak", "looks", "ethics", "ethics", "ethics", "looks", "weak", "skill", "ethics", "weak", "skill", "skill", "ethics", "weak", "ethics", "ethics", "ethics", "ethics", "looks", "skill", "weak", "skill", "looks", "looks", "weak", "looks", "ethics", "skill", "looks", "skill", "skill"]>> <!-- Type needs to conform to beast type: wolf, dog, etc. --> <<set _tpe to ["human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "wolf", "human", "human", "human", "human", "hawk", "human", "human", "human", "human", "human"]>> <<set _swi to ["a","a","a","a","a","a","a","t","a","a","t","a","a","a","a","a","t","a","a","t","a","a","a","a","a","t","a","a","t","a", "a", "a"]>> <<for _i to 0; _i lt $NPCName.length; _i++>> <<set $NPCName[_i].nam to $NPCNameList[_i]>> <<set $NPCName[_i].description to $NPCNameList[_i]>> <<set $NPCName[_i].title to _tit[_i]>> <<set $NPCName[_i].chastity to {penis:"", vagina:"", anus:""}>> <<set $NPCName[_i].insecurity to _ins[_i]>> <<if _swi[_i] is "t">> <<set $NPCName[_i].adult to 0>> <<set $NPCName[_i].teen to 1>> <<else>> <<set $NPCName[_i].adult to 1>> <<set $NPCName[_i].teen to 0>> <</if>> <<set $NPCName[_i].type to _tpe[_i]>> <<set $NPCName[_i].purity to 0>> <<set $NPCName[_i].corruption to 0>> <<if _tpe[_i] is "wolf">> <<set $NPCName[_i].claws to "claws">> <!-- Adjusted Wolf and Hawk for the changes converting $claws to .claws --> <<elseif _tpe[_i] is "hawk">> <<set $NPCName[_i].claws to "talons">> <</if>> <<set $NPCName[_i].maxOrgasms to 1>> <</for>> <<generateNPCNameHairAndEyeColors true>> <<npcPregnancyUpdater>> <</widget>> <<widget "npcNamedUpdate">>/*Applies new system to old saves, and carries over relevant variables.*/ <<if $npcNamedVersion isnot 2>><!-- Needed for compatibility with V2.5 and prior saves --> <<npcNamed>> <<for _e to 0; _e lt $NPCNameList.length; _e++>> <<set _lowerCaseName to $NPCNameList[_e].toLowerCase()>> <<set _upperCaseName to $NPCNameList[_e]>> <<if $npcNamedVersion is undefined>> /* .init and .pronoun can't be set within an easy loop */ <<if V['init' + _lowerCaseName] isnot undefined>> <<set C.npc[_upperCaseName].init to V['init' + _lowerCaseName]>> <<run delete V['init' + _lowerCaseName]>> <</if>> <<if V[_lowerCaseName + 'gender'] isnot undefined>> <<set C.npc[_upperCaseName].pronoun to V[_lowerCaseName + 'gender']>> /* do not unset old gender, it is still needed within a loop */ <</if>> /* set new npc attribute vars and remove old ones in a loop */ <<for _attribute range ["trust", "love", "dom", "lust", "rage", "state", "trauma", "gender", "penissize", "penisdesc", "penis", "vagina"]>> <<if V[_lowerCaseName + _attribute] isnot undefined>> <<set C.npc[_upperCaseName][_attribute] to V[_lowerCaseName + _attribute]>> <<run delete V[_lowerCaseName + _attribute]>> <</if>> <</for>> <<elseif $npcNamedVersion is 1>> <<if V[_lowerCaseName + 'gender'] isnot undefined>> <<set C.npc[_upperCaseName].pronoun to V[_lowerCaseName + 'gender']>> <<run delete V[_lowerCaseName + 'gender']>> <</if>> <<if V[_lowerCaseName + 'penis'] isnot undefined>> <<set C.npc[_upperCaseName].penis to V[_lowerCaseName + 'penis']>> <<run delete V[_lowerCaseName + 'penis']>> <</if>> <<if V[_lowerCaseName + 'vagina'] isnot undefined>> <<set C.npc[_upperCaseName].vagina to V[_lowerCaseName + 'vagina']>> <<run delete V[_lowerCaseName + 'vagina']>> <</if>> <</if>> <</for>> <<set $npcNamedVersion to 2>> <<updateNewNamedNpcs>> <</if>> <</widget>> <<widget "newNamedNpc">> <<if _args[0]>> <<if !$NPCNameList.includes(_args[0].nam)>> <<set _values to clone(_args[0])>> <<set _valueKeys to Object.keys(_values)>> <<set _nnpc to clone(setup.baseNNPC)>> <<for _i to 0; _i lt _valueKeys.length; _i++>> <<set _nnpc[_valueKeys[_i]] to _values[_valueKeys[_i]]>> <</for>> <<if !_nnpc.description>><<set _nnpc.description to _nnpc.nam>><</if>> <<set $NPCName.push(clone(_nnpc))>> <<set $NPCNameList.push(clone(_nnpc.nam))>> <<initNNPCVirginity $NPCName.length-1>> <<initnpcgendersingle $NPCName.length-1>> <</if>> <</if>> <</widget>> <<widget "updateNewNamedNpcs">> <<if $npcListVersion gte 1>> <<set _newNNPCs to { "blackwolf": {nam : "Black Wolf", title: "alpha", insecurity: "weak", adult: 1, type: "wolf", claws: "claws"}, "niki": {nam : "Niki", title: "photographer", insecurity: "skill", adult: 1}, "quinn": {nam : "Quinn", title: "mayor", insecurity: "looks", adult: 1}, "remy": {nam : "Remy", title: "farmer", insecurity: "looks", adult: 1}, "alex": {nam : "Alex", title: "farmhand", insecurity: "weak", teen: 1}, "greathawk": {nam : "Great Hawk", title: "terror", insecurity: "looks", adult: 1, type: "hawk", claws: "talons"}, "wren": {nam : "Wren", title: "smuggler", insecurity: "ethics", adult: 1}, "sydney": {nam : "Sydney", title: "faithful", insecurity: "skill", teen: 1}, "ivorywraith": {nam : "Ivory Wraith", title: "reflection", insecurity: "looks", adult: 1}, "zephyr": {nam : "Zephyr", title: "captain", insecurity: "skill", adult: 1} }>> <<for _npc range Object.keys(_newNNPCs)>> <<if !$NPCNameList.includes(_newNNPCs[_npc].nam)>> <<newNamedNpc _newNNPCs[_npc]>> <<set _npcsAdded to true>> <</if>> <</for>> <<if _npcsAdded is true>> <<generateNPCNameHairAndEyeColors>> <</if>> <</if>> <</widget>> <<widget "generateNPCNameHairAndEyeColors">> <<for _i to 0; _i lt $NPCName.length; _i++>> <<switch $NPCName[_i].nam>> <<case "Whitney">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "blond">> <</if>> <<case "Jordan">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined or _args[0] is "default">> <<set $NPCName[_i].eyeColour to "light blue">> <<set $NPCName[_i].hairColour to "blond">> <</if>> <<case "Leighton">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined or _args[0] is "default">> <<set $NPCName[_i].eyeColour to "green">> <<set $NPCName[_i].hairColour to "black">> <</if>> <<case "Landry">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "black">> <</if>> <<case "Darryl">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "brown">> <</if>> <<case "River">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined or _args[0] is "default">> <<set $NPCName[_i].eyeColour to "light blue">> <<set $NPCName[_i].hairColour to "brown">> <</if>> <<case "Kylar" "Bailey">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to ["black","brown"].pluck()>> <</if>> <<case "Gwylan">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "mousy">> <</if>> <<case "Doren">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "red">> <</if>> <<case "Charlie" "Morgan">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "ginger">> <</if>> <<case "Black Wolf">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "black">> <</if>> <<case "Remy">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to "green">> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "brown">> <</if>> <<case "Alex">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to "green">> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "red">> <</if>> <<case "Great Hawk">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to "light blue">> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "brown">> <</if>> <<case "Wren">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined or _args[0] is "default">> <<set $NPCName[_i].eyeColour to "brown">> <<set $NPCName[_i].hairColour to "blond">> <</if>> <<case "Sydney">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to "amber">> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "strawberryblond">> <</if>> <<case "Ivory Wraith">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to "dark blue">> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "white">> <</if>> <<case "Zephyr">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined or _args[0] is "default">> <<set $NPCName[_i].eyeColour to "green">> <<set $NPCName[_i].hairColour to "black">> <</if>> <<case "Harper">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "blond">> <</if>> <<case "Riley">> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to "black">> <</if>> <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "brown">> <</if>> <<default>> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> <<set $NPCName[_i].hairColour to ["red","black","brown","lightbrown","blond","platinumblond","strawberryblond","ginger"].pluck()>> <</if>> <</switch>> <</for>> <</widget>> <<widget "initAllNNPCVirginities">> <<for _i to 0; _i lt $NPCNameList.length; _i++>> <<initNNPCVirginity _i>> <</for>> <</widget>> <<widget "initNNPCVirginity">> <<set $NPCName[_args[0]].purity to 0>> <<set $NPCName[_args[0]].corruption to 0>> <<set $NPCName[_args[0]].virginity to clone(setup.NPCVirginityTypesVirgin)>> <<set $NPCName[_args[0]].chastity to {penis:"", vagina:"", anus:""}>> <<switch $NPCNameList[_args[0]]>> <<case "Sydney">> /* Has all virginities + temple virginity. */ <<set $NPCName[_args[0]].virginity to {"anal": true, "oral": true, "penile": true, "vaginal": true, "handholding": true, "temple": true, "kiss": true}>> <<case "Robin" "Kylar" "Great Hawk">> /* Has all virginities. */ <<case "Jordan">> /* Has anal, oral, penile/vaginal, and kiss virginities. Missing handholding. */ <<set $NPCName[_args[0]].virginity.handholding to false>> <<case "Black Wolf">> /* Has anal, oral, kiss, and handholding virginities. Missing penile/vaginal. */ <<set $NPCName[_args[0]].virginity.penile to false>> <<set $NPCName[_args[0]].virginity.vaginal to false>> <<case "Gwylan" "Zephyr">> /* Missing all virginities. */ <<set $NPCName[_args[0]].virginity to clone(setup.NPCVirginityTypes)>> <<case "Charlie">> /* Has oral, anal, and vaginal/penile virginities. Missing kiss and handholding. */ <<set $NPCName[_args[0]].virginity.kiss to false>> <<set $NPCName[_args[0]].virginity.handholding to false>> <<case "Eden">> /* Has anal, oral and handholding virginity. Missing penile/vaginal and kiss. */ <<set $NPCName[_args[0]].virginity.penile to false>> <<set $NPCName[_args[0]].virginity.vaginal to false>> <<set $NPCName[_args[0]].virginity.kiss to false>> <<case "Sam" "Mason">> /* Has anal and oral virginity. Missing penile/vaginal, kiss, and handholding. */ <<set $NPCName[_args[0]].virginity.penile to false>> <<set $NPCName[_args[0]].virginity.vaginal to false>> <<set $NPCName[_args[0]].virginity.kiss to false>> <<set $NPCName[_args[0]].virginity.handholding to false>> <<case "Alex" "Darryl" "Sirris" "Briar" "Wren" "Ivory Wraith">> /* Missing all virginities. */ <<set $NPCName[_args[0]].virginity to clone(setup.NPCVirginityTypes)>> <<default>> /* Defaults to only having anal virginity. */ <<set $NPCName[_args[0]].virginity.oral to false>> <<set $NPCName[_args[0]].virginity.penile to false>> <<set $NPCName[_args[0]].virginity.vaginal to false>> <<set $NPCName[_args[0]].virginity.kiss to false>> <<set $NPCName[_args[0]].virginity.handholding to false>> <</switch>> <</widget>>
<<widget "pregnancyVar">> <<if $pregnancyStats is undefined>> <<set $pregnancyStats to { playerChildren:0, humanChildren:0, wolfChildren:0, npcChildren:0, npcChildrenUnrelatedToPlayer:0, npcTotalBirthEvents:0, humanToysUnlocked: false, wolfToysUnlocked: false, hawkToysUnlocked: false, mother: 0, aftermorningpills: 0, pregnancyTestsTaken: 0, parasiteBook: 0, parasiteDoctorEvents: 0, awareOfBirthId: {}, }>> <</if>> <<containersInit>> <<if $objectVersion.prenancyObjectRepair isnot 2>> <<prenancyObjectRepair>> <<set $objectVersion.prenancyObjectRepair to 2>> <</if>> <<if $pregnancyStats.morningSicknessGeneral is undefined>> <<set $pregnancyStats.morningSicknessGeneral to 0>> <<set $pregnancyStats.morningSicknessWaking to 0>> <<set $pregnancyStats.parasiteBook to 0>> <</if>> <<if $pregnancyStats.awareOfBirthId is undefined>> /* This will track when the player or npc is aware of a specific pregnancy 'birthid:["pc","NPCNameIndex"]' */ <<set $pregnancyStats.awareOfBirthId to {}>> <</if>> <<if $pregnancyStats.childInteractions is undefined>> <<set $pregnancyStats.childInteractions to 0>> <<set $pregnancyStats.childBreastfedInteractions to 0>> <<set $pregnancyStats.childBottlefedInteractions to 0>> <<set $pregnancyStats.childFirstWordInteractions to 0>> <<set $pregnancyStats.orphanageInteractions to 0>> <<set $pregnancyStats.orphanageMilkBottles to 0>> <<set $pregnancyStats.orphanageMilkBottlesTotal to 0>> <</if>> <<if $pregnancyStats.playerVirginBirths is undefined>> <<set $pregnancyStats.playerVirginBirths to []>> <<set $pregnancyStats.totalDaysPregnant to 0>> <<set $pregnancyStats.totalDaysPregnancyKnown to 0>> <</if>> <<if $pregnancyStats.parasiteBook is undefined>> <<set $pregnancyStats.parasiteBook to 0>> <</if>> <<if $pregnancyStats.parasiteDoctorEvents is undefined>> <<set $pregnancyStats.parasiteDoctorEvents to 0>> <</if>> <<if $pregnancyStats.talkedAboutPregnancy is undefined>> /* This will track when the player or npc has ever talked about specific pregnancy, the set should be during the pregnancy only 'birthid:["pc","NPCNameIndex"]' */ <<set $pregnancyStats.talkedAboutPregnancy to {}>> <</if>> <<if $pregnancyStats.hawkChildren is undefined>> <<set $pregnancyStats.hawkChildren to 0>> <</if>> <</widget>> <<widget "containersInit">> <<if $container is undefined>> <<set $container to { "lastLocation": null, "list":["home", "lake"], "home":{ "upgrades":{ "capacity":0, "foodStorage":0, "luxury":0 }, "name": "Tiny Fish Tank", "count": 0, "maxCount": 1, "daysSinceFed": 0, "maxDaysWithoutFood": 3, "creatures":{ 0: null }, "deadCreatures": 0, "visited": false, "leaveLink": "Bedroom" }, "portable":{ "creatures":[], "value":0 }, "lake":{ "upgrades":{ "capacity":0, "foodStorage":0, "luxury":0 }, "name": "pond", "count": 0, "maxCount": 3, "daysSinceFed": 0, "maxDaysWithoutFood": 31, "creatures":{ 0: null }, "deadCreatures": 0, "visited": false, "leaveLink": "Lake Waterfall" } }>> <</if>> <<if $container.home.kylarDelay is undefined>> <<set $container.home.kylarDelay to 0>> <<set $container.home.kylarFed to false>> <<set $container.home.kylarHelp to false>> <</if>> <<if $container.farm is undefined>> <<set $container.farm to { "upgrades":{ "capacity":0, "foodStorage":0, "luxury":0 }, "name": "Parasite Barn", "count": 0, "maxCount": 5, "daysSinceFed": 0, "maxDaysWithoutFood": 14, "creatures":{ 0: null }, "deadCreatures": 0, "visited": false, "leaveLink": "Farm Work" }>> <<set $container.list.pushUnique("farm")>> <</if>> <<if $pregnancyStats.parasiteTypesSeen is undefined or $pregnancyStats.parasiteVariantsSeen is undefined>> <<set $pregnancyStats.parasiteTypesSeen to []>><<set $pregnancyStats.parasiteVariantsSeen to []>> <<for _i range $container.list>> <<for _o to 0; _o lt $container[_i].maxCount; _o++>> <<if $container[_i].creatures[_o] isnot undefined and $container[_i].creatures[_o] isnot null>> <<if $container[_i].creatures[_o].creature.includes("Tentacle")>> <<set $pregnancyStats.parasiteTypesSeen.pushUnique("Tentacle")>> <<elseif $container[_i].creatures[_o].creature.includes("Vine")>> <<set $pregnancyStats.parasiteTypesSeen.pushUnique("Vine")>> <<elseif $container[_i].creatures[_o].creature.includes("Slime")>> <<set $pregnancyStats.parasiteTypesSeen.pushUnique("Slime")>> <<else>> <<set $pregnancyStats.parasiteTypesSeen.pushUnique($container[_i].creatures[_o].creature)>> <</if>> <<if $container[_i].creatures[_o].creature.includes("Pale")>> <<set $pregnancyStats.parasiteVariantsSeen.pushUnique("Pale")>> <<elseif $container[_i].creatures[_o].creature.includes("Metal")>> <<set $pregnancyStats.parasiteVariantsSeen.pushUnique("Metal")>> <</if>> <<else>> <<break>> <</if>> <</for>> <</for>> <</if>> <<if $containerVine or $containerMetal or $containerPale>> <<unset $containerVine, $containerMetal, $containerPale>> <</if>> <</widget>> <<widget "prenancyObjectRepair">> <<set _pregnancy to $sexStats.anus.pregnancy>> <<if _pregnancy.type is "parasite">> <<for _i to 0; _i lt 4; _i++>> <<if _pregnancy.fetus[_i]>> <<if _pregnancy.fetus[_i].creature is undefined>> <<set _pregnancy.fetus[_i].creature to either("Tentacle","Spider","Fish","Snake","Eel")>> <</if>> <</if>> <</for>> <</if>> <<set _list to ["home", "lake", "farm", "portable"]>> <<for _i to 0; _i lt _list.length; _i++>> <<set _container to $container[_list[_i]]>> <<for _j to 0; _j lt _container.maxCount; _j++>> <<if _container.creatures[_j] isnot undefined and _container.creatures[_j] isnot null>> <<if _container.creatures[_j].creature is undefined>> <<set _container.creatures[_j].creature to either("Tentacle","Spider","Fish","Snake","Eel")>> <</if>> <</if>> <<if _container.upgrades.luxury is undefined>> <<set _container.upgrades.luxury to 0>> <</if>> <</for>> <</for>> <</widget>>
<!--Needs to be json strings, not json objects--> <<widget "presets">> <<unset _preset>> <<unset _presetName>> <<if _args[0]>> <<switch _args[0]>> <<case "vrelDefault">> <<set _preset to '{"general":{"options":{"tipdisable":"f","numberify_enabled":1,"timestyle":"military","showCaptionText":true,"sidebarStats":"disabled","sidebarTime":"disabled","combatControls":"radio","images":1,"silhouetteEnabled":true,"tanImgEnabled":true,"sidebarAnimations":true,"blinkingEnabled":true,"combatAnimations":true},{"map":{"movement":true,"top":false,"markers":false},"malechance":50,"dgchance":0,"cbchance":0,"malevictimchance":50,"homochance":4,"breast_mod":0,"penis_mod":0,"blackchance":10,"straponchance":0,"alluremod":1,"beastmalechance":80,"monsterchance":50,"monsterhallucinations":"t","blackwolfmonster":0,"bestialitydisable":"f","swarmdisable":"f","slimedisable":"f","voredisable":"f","tentacledisable":"f","analdisable":"f","analdoubledisable":"f","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"f","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","analpregdisable":"f","watersportsdisable":"f","facesitdisable":"f","spiderdisable":"f","bodywritingdisable":"f","parasitedisable":"f","slugdisable":"f","waspdisable":"f","lurkerdisable":"f","beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","breastsizemax":12,"bottomsizemax":8,"penissizemax":4,"penissizemin":-1,"debugdisable":"t","statdisable":"f","cheatdisabletoggle":"t","confirmSave":false,"confirmLoad":false,"confirmDelete":true,"reducedLineHeight":false},"npc":{"Avery":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Bailey":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Briar":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Charlie":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Darryl":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Doren":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Eden":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Gwylan":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Harper":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Jordan":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Kylar":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Landry":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Leighton":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Mason":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Morgan":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"River":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Robin":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Sam":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Sirris":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Whitney":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Winter":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Black Wolf":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Niki":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Quinn":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Remy":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Alex":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Great Hawk":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0}, "Zephyr":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0}},"starting":{"player":{"gender":"f","gender_body":"a","bodyshape":"slender","ballsExist":false,"freckles":false,"breastsize":0,"penissize":1,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":2,"breastsensitivity":1,"genitalsensitivity":1,"eyeselect":"purple","hairselect":"red","hairlength":200,"awareselect":"innocent","background":"waif","gamemode":"normal","asphyxiaLvl":3,"pbdisable":"t"}}'>> <<case "lollipopScythe">> <<set _preset to '{"general":{"options":{"tipdisable":"t","numberify_enabled":1,"timestyle":"military","showCaptionText":true,"sidebarStats":"disabled","sidebarTime":"disabled","combatControls":"radio","images":1,"silhouetteEnabled":true,"tanImgEnabled":true,"sidebarAnimations":true,"blinkingEnabled":true,"combatAnimations":true},"map":{"movement":true,"top":true,"markers":true},"malechance":75,"dgchance":25,"cbchance":0,"malevictimchance":90,"homochance":75,"breast_mod":0,"penis_mod":2,"blackchance":10,"straponchance":25,"alluremod":1,"beastmalechance":100,"monsterchance":0,"monsterhallucinations":"t","blackwolfmonster":0,"bestialitydisable":"f","swarmdisable":"f","slimedisable":"f","voredisable":"f","tentacledisable":"f","analdisable":"f","analdoubledisable":"t","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"t","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","analpregdisable":"f","watersportsdisable":"f","facesitdisable":"f","spiderdisable":"f","bodywritingdisable":"f","parasitedisable":"f", "slugdisable":"f", "waspdisable":"f", "lurkerdisable":"f", "beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","breastsizemax":12,"bottomsizemax":8,"penissizemax":4,"penissizemin":-1,"debugdisable":"f","statdisable":"f","cheatdisabletoggle":"t","confirmSave":false,"confirmLoad":false,"confirmDelete":true,"reducedLineHeight":true},"npc":{"Avery":{"pronoun":"m","gender":"m","penissize":4,"breastsize":0},"Bailey":{"pronoun":"m","gender":"m","penissize":1,"breastsize":0},"Briar":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Charlie":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Darryl":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Doren":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Eden":{"pronoun":"m","gender":"m","penissize":4,"breastsize":0},"Gwylan":{"pronoun":"f","gender":"f","penissize":0,"breastsize":5},"Harper":{"pronoun":"m","gender":"m","penissize":4,"breastsize":0},"Jordan":{"pronoun":"m","gender":"m","penissize":1,"breastsize":0},"Kylar":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Landry":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Leighton":{"pronoun":"m","gender":"m","penissize":1,"breastsize":0},"Mason":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Morgan":{"pronoun":"f","gender":"f","penissize":0,"breastsize":5},"River":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Robin":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Sam":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Sirris":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Whitney":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Winter":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Black Wolf":{"pronoun":"m","gender":"m","penissize":4,"breastsize":0},"Niki":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Quinn":{"pronoun":"m","gender":"m","penissize":4,"breastsize":0},"Remy":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Alex":{"pronoun":"m","gender":"m","penissize":4,"breastsize":0},"Great Hawk":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Zephyr":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0}},"starting":{"player":{"gender":"h","gender_body":"f","bodyshape":"curvy","ballsExist":true,"freckles":false,"breastsize":4,"penissize":0,"bottomsize":0},"skinColor":{"natural":"light","range":40},"bodysize":0,"breastsensitivity":3,"genitalsensitivity":3,"eyeselect":"pink","hairselect":"platinumblond","hairlength":400,"awareselect":"innocent","background":"beautiful","gamemode":"hard","asphyxiaLvl":3,"pbdisable":"t"}}'>> <<case "purityGuy">> <<set _preset to '{"general":{"options":{"tipdisable":"f","numberify_enabled":1,"timestyle":"ampm","showCaptionText":true,"sidebarStats":"all","sidebarTime":"top","combatControls":"radio","images":1,"silhouetteEnabled":true,"tanImgEnabled":true,"sidebarAnimations":true,"blinkingEnabled":true,"combatAnimations":true},"map":{"movement":true,"top":false,"markers":true},"malechance":50,"dgchance":0,"cbchance":0,"malevictimchance":10,"homochance":10,"breast_mod":0,"penis_mod":0,"blackchance":0,"straponchance":0,"alluremod":1.2,"beastmalechance":50,"monsterchance":100,"monsterhallucinations":"f","blackwolfmonster":2,"bestialitydisable":"f","swarmdisable":"t","slimedisable":"f","voredisable":"f","tentacledisable":"f","analdisable":"f","analdoubledisable":"t","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"t","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","analpregdisable":"f","watersportsdisable":"t","facesitdisable":"f","spiderdisable":"f","bodywritingdisable":"f","parasitedisable":"f","slugdisable":"f","waspdisable":"f","lurkerdisable":"f","beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","breastsizemax":6,"bottomsizemax":4,"penissizemax":4,"penissizemin":-1,"debugdisable":"f","statdisable":"f","cheatdisabletoggle":"t","confirmSave":true,"confirmLoad":true,"confirmDelete":true,"reducedLineHeight":false},"npc":{"Avery":{"pronoun":"f","gender":"f","penissize":1,"breastsize":4},"Bailey":{"pronoun":"m","gender":"m","penissize":3,"breastsize":2},"Briar":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Charlie":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Darryl":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Doren":{"pronoun":"m","gender":"m","penissize":1,"breastsize":0},"Eden":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Gwylan":{"pronoun":"f","gender":"f","penissize":1,"breastsize":0},"Harper":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Jordan":{"pronoun":"f","gender":"f","penissize":3,"breastsize":5},"Kylar":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Landry":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Leighton":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Mason":{"pronoun":"f","gender":"f","penissize":3,"breastsize":2},"Morgan":{"pronoun":"f","gender":"f","penissize":3,"breastsize":3},"River":{"pronoun":"f","gender":"f","penissize":3,"breastsize":0},"Robin":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Sam":{"pronoun":"f","gender":"f","penissize":1,"breastsize":3},"Sirris":{"pronoun":"f","gender":"f","penissize":3,"breastsize":0},"Whitney":{"pronoun":"f","gender":"f","penissize":4,"breastsize":0},"Winter":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Black Wolf":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Niki":{"pronoun":"f","gender":"f","penissize":3,"breastsize":2},"Quinn":{"pronoun":"m","gender":"m","penissize":3,"breastsize":0},"Remy":{"pronoun":"m","gender":"m","penissize":2,"breastsize":0},"Alex":{"pronoun":"f","gender":"f","penissize":1,"breastsize":0},"Great Hawk":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Zephyr":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0}},"starting":{"player":{"gender":"f","gender_body":"f","bodyshape":"curvy","ballsExist":false,"freckles":false,"breastsize":3,"penissize":1,"bottomsize":1},"skinColor":{"natural":"light","range":0},"bodysize":2,"breastsensitivity":1,"genitalsensitivity":1,"eyeselect":"amber","hairselect":"blond","hairlength":400,"awareselect":"innocent","background":"beautiful","gamemode":"normal","asphyxiaLvl":3,"pbdisable":"t"}}'>> <<case "fangi">> <<set _preset to '{"general":{"options":{"tipdisable":"f","numberify_enabled":1,"timestyle":"military","showCaptionText":true,"sidebarStats":"disabled","sidebarTime":"disabled","combatControls":"radio","images":1,"silhouetteEnabled":true,"tanImgEnabled":true,"blinkingEnabled":true,"sidebarAnimations":true,"combatAnimations":true},"map":{"movement":true,"top":false,"markers":false},"malechance":0,"dgchance":0,"cbchance":0,"malevictimchance":1,"homochance":75,"breast_mod":0,"penis_mod":0,"blackchance":10,"straponchance":0,"alluremod":1,"beastmalechance":0,"monsterchance":100,"monsterhallucinations":"f","blackwolfmonster":1,"bestialitydisable":"f","swarmdisable":"f","slimedisable":"f","voredisable":"f","tentacledisable":"f","analdisable":"f","analdoubledisable":"t","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"t","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","analpregdisable":"f","watersportsdisable":"f","facesitdisable":"f","spiderdisable":"f","bodywritingdisable":"f","parasitedisable":"f","slugdisable":"f","waspdisable":"f","lurkerdisable":"f","beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","breastsizemax":12,"bottomsizemax":8,"penissizemax":4,"penissizemin":-1,"debugdisable":"f","statdisable":"f","cheatdisabletoggle":"f","confirmSave":false,"confirmLoad":false,"confirmDelete":true,"reducedLineHeight":false},"npc":{"Avery":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Bailey":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Briar":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Charlie":{"pronoun":"f","gender":"f","penissize":0,"breastsize":1},"Darryl":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Doren":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Eden":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Gwylan":{"pronoun":"f","gender":"f","penissize":0,"breastsize":1},"Harper":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Jordan":{"pronoun":"f","gender":"f","penissize":0,"breastsize":1},"Kylar":{"pronoun":"f","gender":"f","penissize":0,"breastsize":1},"Landry":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Leighton":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Mason":{"pronoun":"f","gender":"f","penissize":0,"breastsize":2},"Morgan":{"pronoun":"f","gender":"f","penissize":0,"breastsize":5},"River":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Robin":{"pronoun":"f","gender":"f","penissize":0,"breastsize":1},"Sam":{"pronoun":"f","gender":"f","penissize":0,"breastsize":4},"Sirris":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Whitney":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Winter":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Black Wolf":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Niki":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Quinn":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Remy":{"pronoun":"f","gender":"f","penissize":0,"breastsize":3},"Alex":{"pronoun":"f","gender":"f","penissize":0,"breastsize":1},"Great Hawk":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0},"Zephyr":{"pronoun":"none","gender":"none","penissize":0,"breastsize":0}},"starting":{"player":{"gender":"f","gender_body":"f","bodyshape":"curvy","ballsExist":false,"freckles":false,"breastsize":3,"penissize":1,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":3,"breastsensitivity":1,"genitalsensitivity":1,"eyeselect":"purple","hairselect":"red","hairlength":200,"awareselect":"innocent","background":"waif","gamemode":"normal","asphyxiaLvl":3,"pbdisable":"t"}}'>> <<case "femaleWaif">> <<set _preset to '{"starting":{"player":{"gender":"f","gender_body":"f","bodyshape":"curvy","ballsExist":false,"freckles":false,"breastsize":3,"penissize":1,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":3,"breastsensitivity":1,"genitalsensitivity":1,"eyeselect":"purple","hairselect":"red","hairlength":200,"awareselect":"innocent","background":"waif"}}'>> <<case "maleWaif">> <<set _preset to '{"starting":{"player":{"gender":"m","gender_body":"m","bodyshape":"classic","ballsExist":false,"freckles":false,"breastsize":3,"penissize":1,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":3,"breastsensitivity":1,"genitalsensitivity":1,"eyeselect":"purple","hairselect":"brown","hairlength":0,"awareselect":"innocent","background":"waif"}}'>> <<case "hermaphroditeWaif">> <<set _preset to '{"starting":{"player":{"gender":"h","gender_body":"a","bodyshape":"slender","ballsExist":true,"freckles":false,"breastsize":3,"penissize":1,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":3,"breastsensitivity":3,"genitalsensitivity":3,"eyeselect":"purple","hairselect":"red","hairlength":200,"awareselect":"innocent","background":"waif"}}'>> <<case "vrel">> <<set _preset to '{"starting":{"player":{"gender":"f","gender_body":"f","bodyshape":"curvy","ballsExist":false,"freckles":false,"breastsize":0,"penissize":0,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":3,"breastsensitivity":5,"genitalsensitivity":3,"eyeselect":"purple","hairselect":"burntorange","hairlength":400,"awareselect":"knowledgeable","background":"beautiful"}}'>> <<case "crossdresser">> <<set _preset to '{"starting":{"player":{"gender":"m","gender_body":"f","bodyshape":"curvy","ballsExist":false,"freckles":false,"breastsize":2,"penissize":0,"bottomsize":0},"skinColor":{"natural":"light","range":0},"bodysize":0,"breastsensitivity":3,"genitalsensitivity":1,"eyeselect":"light blue","hairselect":"blond","hairlength":400,"awareselect":"innocent","background":"crossdresser"}}'>> <<case "toughGuy">> <<set _preset to '{"starting":{"player":{"gender":"m","gender_body":"m","bodyshape":"classic","ballsExist":false,"freckles":false,"breastsize":0,"penissize":3,"bottomsize":0},"skinColor":{"natural":"light","range":50},"bodysize":2,"breastsensitivity":1,"genitalsensitivity":1,"eyeselect":"light blue","hairselect":"brown","hairlength":0,"awareselect":"knowledgeable","background":"athlete"}}'>> <<case "genericNpcDefaultGender">> <<set _preset to '{"general":{"maleChanceMale":50,"maleChanceFemale":50,"malevictimchance":50}}'>> <<case "genericNpcAllMaleGender">> <<set _preset to '{"general":{"maleChanceMale":100,"maleChanceFemale":100,"malevictimchance":100}}'>> <<case "genericNpc75MaleGender">> <<set _preset to '{"general":{"maleChanceMale":75,"maleChanceFemale":75,"malevictimchance":75}}'>> <<case "genericNpcAllFemaleGender">> <<set _preset to '{"general":{"maleChanceMale":0,"maleChanceFemale":0,"malevictimchance":0}}'>> <<case "genericNpc75FemaleGender">> <<set _preset to '{"general":{"maleChanceMale":25,"maleChanceFemale":25,"malevictimchance":25}}'>> <<case "beastDefaultGenders">> <<set _preset to '{"general":{"beastMaleChanceMale":50,"beastMaleChanceFemale":50,"bestialitydisable":"f"}}'>> <<case "beastMaleGenders">> <<set _preset to '{"general":{"beastMaleChanceMale":100,"beastMaleChanceFemale":100,"bestialitydisable":"f"}}'>> <<case "beast75MaleGenders">> <<set _preset to '{"general":{"beastMaleChanceMale":75,"beastMaleChanceFemale":75,"bestialitydisable":"f"}}'>> <<case "beastFemaleGenders">> <<set _preset to '{"general":{"beastMaleChanceMale":0,"beastMaleChanceFemale":0,"bestialitydisable":"f"}}'>> <<case "beast75FemaleGenders">> <<set _preset to '{"general":{"beastMaleChanceMale":25,"beastMaleChanceFemale":25,"bestialitydisable":"f"}}'>> <<case "beastDisable">> <<set _preset to '{"general":{"bestialitydisable":"t"}}'>> <<case _kinkPreset>> <<switch _kinkPreset>> <<case "kinkDefault">> <<set _preset to '{"general":{"bestialitydisable":"f","swarmdisable":"f","slimedisable":"f","voredisable":"f","tentacledisable":"f","plantdisable":"f","analdisable":"f","analdoubledisable":"f","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"f","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","parasitepregdisable":"f","watersportsdisable":"t","facesitdisable":"f","spiderdisable":"f","bodywritingLvl":3,"parasitedisable":"f","slugdisable":"f","waspdisable":"f","lurkerdisable":"f","beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","toydildodisable":"f","toywhipdisable":"f","playerPregnancyHumanDisable":"f","playerPregnancyBeastDisable":"f","playerPregnancyEggLayingDisable":"f","hypnosisdisable":"f"}}'>> <<case "kinkVanilla">> <<set _preset to '{"general":{"bestialitydisable":"t","swarmdisable":"t","slimedisable":"t","voredisable":"t","tentacledisable":"t","plantdisable":"t","analdisable":"f","analdoubledisable":"t","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"t","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"t","parasitepregdisable":"t","watersportsdisable":"t","facesitdisable":"t","spiderdisable":"t","bodywritingLvl":2,"parasitedisable":"t", "slugdisable":"t","waspdisable":"t","lurkerdisable":"t","beedisable":"t","horsedisable":"t","pregnancyspeechdisable":"f","toydildodisable":"f","toywhipdisable":"f","playerPregnancyHumanDisable":"f","playerPregnancyBeastDisable":"t","playerPregnancyEggLayingDisable":"t","hypnosisdisable":"t"}}'>> <<case "kinkNoBeasts">> <<set _preset to '{"general":{"bestialitydisable":"t","swarmdisable":"t","slimedisable":"f","voredisable":"t","tentacledisable":"f","plantdisable":"f","analdisable":"f","analdoubledisable":"f","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"f","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","parasitepregdisable":"t","watersportsdisable":"t","facesitdisable":"f","spiderdisable":"t","bodywritingLvl":3,"parasitedisable":"t","slugdisable":"t","waspdisable":"t","lurkerdisable":"t","beedisable":"t","horsedisable":"t","pregnancyspeechdisable":"f","toydildodisable":"f","toywhipdisable":"f","playerPregnancyHumanDisable":"f","playerPregnancyBeastDisable":"t","playerPregnancyEggLayingDisable":"t","hypnosisdisable":"f"}}'>> <<case "kinkEverything">> <<set _preset to '{"general":{"bestialitydisable":"f","swarmdisable":"f","slimedisable":"f","voredisable":"f","tentacledisable":"f","plantdisable":"f","analdisable":"f","analdoubledisable":"f","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"f","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","parasitepregdisable":"f","watersportsdisable":"f","facesitdisable":"f","spiderdisable":"f","bodywritingLvl":3,"parasitedisable":"f","slugdisable":"f","waspdisable":"f","lurkerdisable":"f","beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","toydildodisable":"f","toywhipdisable":"f","playerPregnancyHumanDisable":"f","playerPregnancyBeastDisable":"f","playerPregnancyEggLayingDisable":"f","hypnosisdisable":"f"}}'>> <<default>> <<set _preset to '{"general":{"bestialitydisable":"f","swarmdisable":"f","slimedisable":"f","voredisable":"f","tentacledisable":"f","plantdisable":"f","analdisable":"f","analdoubledisable":"f","footdisable":"f","analingusdisablegiving":"f","analingusdisablereceiving":"f","vaginaldoubledisable":"f","transformdisable":"f","transformdisabledivine":"f","breastfeedingdisable":"f","parasitepregdisable":"f","watersportsdisable":"t","facesitdisable":"f","spiderdisable":"f","bodywritingLvl":3,"parasitedisable":"f","slugdisable":"f","waspdisable":"f","lurkerdisable":"f","beedisable":"f","horsedisable":"f","pregnancyspeechdisable":"f","toydildodisable":"f","toywhipdisable":"f","playerPregnancyHumanDisable":"f","playerPregnancyBeastDisable":"f","playerPregnancyEggLayingDisable":"f","hypnosisdisable":"f"}}'>> <</switch>> <<case _namedNpcPreset>> <<switch _namedNpcPreset>> <<case "namedNpcDefaultGender">> <<set _preset to '{"npc":{"Avery":{"pronoun":"none","gender":"none","skincolour":"none"},"Bailey":{"pronoun":"none","gender":"none","skincolour":"none"},"Briar":{"pronoun":"none","gender":"none","skincolour":"none"},"Charlie":{"pronoun":"none","gender":"none","skincolour":"none"},"Darryl":{"pronoun":"none","gender":"none","skincolour":"none"},"Doren":{"pronoun":"none","gender":"none","skincolour":"none"},"Eden":{"pronoun":"none","gender":"none","skincolour":"none"},"Gwylan":{"pronoun":"none","gender":"none","skincolour":"none"},"Harper":{"pronoun":"none","gender":"none","skincolour":"none"},"Jordan":{"pronoun":"none","gender":"none","skincolour":"none"},"Kylar":{"pronoun":"none","gender":"none","skincolour":"none"},"Landry":{"pronoun":"none","gender":"none","skincolour":"none"},"Leighton":{"pronoun":"none","gender":"none","skincolour":"none"},"Mason":{"pronoun":"none","gender":"none","skincolour":"none"},"Morgan":{"pronoun":"none","gender":"none","skincolour":"none"},"River":{"pronoun":"none","gender":"none","skincolour":"none"},"Robin":{"pronoun":"none","gender":"none","skincolour":"none"},"Sam":{"pronoun":"none","gender":"none","skincolour":"none"},"Sirris":{"pronoun":"none","gender":"none","skincolour":"none"},"Whitney":{"pronoun":"none","gender":"none","skincolour":"none"},"Winter":{"pronoun":"none","gender":"none","skincolour":"none"},"Black Wolf":{"pronoun":"none","gender":"none","skincolour":"none"},"Niki":{"pronoun":"none","gender":"none","skincolour":"none"},"Quinn":{"pronoun":"none","gender":"none","skincolour":"none"},"Remy":{"pronoun":"none","gender":"none","skincolour":"none"},"Alex":{"pronoun":"none","gender":"none","skincolour":"none"},"Great Hawk":{"pronoun":"none","gender":"none","skincolour":"none"},"Wren":{"pronoun":"none","gender":"none","skincolour":"none"},"Sydney":{"pronoun":"none","gender":"none","skincolour":"none"},"Zephyr":{"pronoun":"none","gender":"none","skincolour":"none"}}}'>> <<case "namedNpcAllMaleGender">> <<set _preset to '{"npc":{"Avery":{"pronoun":"m","gender":"m"},"Bailey":{"pronoun":"m","gender":"m"},"Briar":{"pronoun":"m","gender":"m"},"Charlie":{"pronoun":"m","gender":"m"},"Darryl":{"pronoun":"m","gender":"m"},"Doren":{"pronoun":"m","gender":"m"},"Eden":{"pronoun":"m","gender":"m"},"Gwylan":{"pronoun":"m","gender":"m"},"Harper":{"pronoun":"m","gender":"m"},"Jordan":{"pronoun":"m","gender":"m"},"Kylar":{"pronoun":"m","gender":"m"},"Landry":{"pronoun":"m","gender":"m"},"Leighton":{"pronoun":"m","gender":"m"},"Mason":{"pronoun":"m","gender":"m"},"Morgan":{"pronoun":"m","gender":"m"},"River":{"pronoun":"m","gender":"m"},"Robin":{"pronoun":"m","gender":"m"},"Sam":{"pronoun":"m","gender":"m"},"Sirris":{"pronoun":"m","gender":"m"},"Whitney":{"pronoun":"m","gender":"m"},"Winter":{"pronoun":"m","gender":"m"},"Black Wolf":{"pronoun":"m","gender":"m"},"Niki":{"pronoun":"m","gender":"m"},"Quinn":{"pronoun":"m","gender":"m"},"Remy":{"pronoun":"m","gender":"m"},"Alex":{"pronoun":"m","gender":"m"},"Great Hawk":{"pronoun":"m","gender":"m"},"Wren":{"pronoun":"m","gender":"m"},"Sydney":{"pronoun":"m","gender":"m"},"Zephyr":{"pronoun":"m","gender":"m"}}}'>> <<case "namedNpcAllFemaleGender">> <<set _preset to '{"npc":{"Avery":{"pronoun":"f","gender":"f"},"Bailey":{"pronoun":"f","gender":"f"},"Briar":{"pronoun":"f","gender":"f"},"Charlie":{"pronoun":"f","gender":"f"},"Darryl":{"pronoun":"f","gender":"f"},"Doren":{"pronoun":"f","gender":"f"},"Eden":{"pronoun":"f","gender":"f"},"Gwylan":{"pronoun":"f","gender":"f"},"Harper":{"pronoun":"f","gender":"f"},"Jordan":{"pronoun":"f","gender":"f"},"Kylar":{"pronoun":"f","gender":"f"},"Landry":{"pronoun":"f","gender":"f"},"Leighton":{"pronoun":"f","gender":"f"},"Mason":{"pronoun":"f","gender":"f"},"Morgan":{"pronoun":"f","gender":"f"},"River":{"pronoun":"f","gender":"f"},"Robin":{"pronoun":"f","gender":"f"},"Sam":{"pronoun":"f","gender":"f"},"Sirris":{"pronoun":"f","gender":"f"},"Whitney":{"pronoun":"f","gender":"f"},"Winter":{"pronoun":"f","gender":"f"},"Black Wolf":{"pronoun":"f","gender":"f"},"Niki":{"pronoun":"f","gender":"f"},"Quinn":{"pronoun":"f","gender":"f"},"Remy":{"pronoun":"f","gender":"f"},"Alex":{"pronoun":"f","gender":"f"},"Great Hawk":{"pronoun":"f","gender":"f"},"Wren":{"pronoun":"f","gender":"f"},"Sydney":{"pronoun":"f","gender":"f"}}}'>> <<default>> <<set _preset to '{"npc":{"Avery":{"pronoun":"none","gender":"none","skincolour":"none"},"Bailey":{"pronoun":"none","gender":"none","skincolour":"none"},"Briar":{"pronoun":"none","gender":"none","skincolour":"none"},"Charlie":{"pronoun":"none","gender":"none","skincolour":"none"},"Darryl":{"pronoun":"none","gender":"none","skincolour":"none"},"Doren":{"pronoun":"none","gender":"none","skincolour":"none"},"Eden":{"pronoun":"none","gender":"none","skincolour":"none"},"Gwylan":{"pronoun":"none","gender":"none","skincolour":"none"},"Harper":{"pronoun":"none","gender":"none","skincolour":"none"},"Jordan":{"pronoun":"none","gender":"none","skincolour":"none"},"Kylar":{"pronoun":"none","gender":"none","skincolour":"none"},"Landry":{"pronoun":"none","gender":"none","skincolour":"none"},"Leighton":{"pronoun":"none","gender":"none","skincolour":"none"},"Mason":{"pronoun":"none","gender":"none","skincolour":"none"},"Morgan":{"pronoun":"none","gender":"none","skincolour":"none"},"River":{"pronoun":"none","gender":"none","skincolour":"none"},"Robin":{"pronoun":"none","gender":"none","skincolour":"none"},"Sam":{"pronoun":"none","gender":"none","skincolour":"none"},"Sirris":{"pronoun":"none","gender":"none","skincolour":"none"},"Whitney":{"pronoun":"none","gender":"none","skincolour":"none"},"Winter":{"pronoun":"none","gender":"none","skincolour":"none"},"Black Wolf":{"pronoun":"none","gender":"none","skincolour":"none"},"Niki":{"pronoun":"none","gender":"none","skincolour":"none"},"Quinn":{"pronoun":"none","gender":"none","skincolour":"none"},"Remy":{"pronoun":"none","gender":"none","skincolour":"none"},"Alex":{"pronoun":"none","gender":"none","skincolour":"none"},"Great Hawk":{"pronoun":"none","gender":"none","skincolour":"none"},"Wren":{"pronoun":"none","gender":"none","skincolour":"none"},"Sydney":{"pronoun":"none","gender":"none","skincolour":"none"},"Zephyr":{"pronoun":"f","gender":"f"},"Zephyr":{"pronoun":"f","gender":"f"},"Zephyr":{"pronoun":"f","gender":"f"}}}'>> <</switch>> <<case _monstersPreset>> <<switch _monstersPreset>> <<case "monstersDefault">> <<set _preset to '{"general":{"monsterchance":20,"monsterhallucinations":"t","blackwolfmonster":0,"greathawkmonster":0,"bestialitydisable":"f"}}'>> <<case "monstersNone">> <<set _preset to '{"general":{"monsterchance":0,"monsterhallucinations":"f","blackwolfmonster":0,"greathawkmonster":0,"bestialitydisable":"f"}}'>> <<case "monstersAll">> <<set _preset to '{"general":{"monsterchance":100,"monsterhallucinations":"f","blackwolfmonster":2,"greathawkmonster":2,"bestialitydisable":"f"}}'>> <<default>> <<set _preset to '{"general":{"monsterchance":20,"monsterhallucinations":"t","blackwolfmonster":0,"greathawkmonster":0,"bestialitydisable":"f"}}'>> <</switch>> <<case "randomize">> <<set _preset to _args[2]>> <</switch>> <<set _presetName to _args[0]>> <</if>> <<if _args[1]>> <<set _presetPage to _args[1]>> <<else>> <<set _presetPage to "characterSettings">> <</if>> <<run importSettings(_preset, "function")>><<if StartConfig.enableImages is true and $passage is "Start" and _presetPage is "characterSettings">><<startingPlayerImageUpdate>><<removeclass #startingPlayerImage "hidden">><</if>> <<if _args[1] isnot "save">> <<displaySettings _presetPage>> <</if>> <</widget>> <<widget "presetConfirmDetails">> <<set _presetObject to JSON.parse(_preset)>> <div style="padding:5px 0px 0px 10px"> <span class="green">Change the below settings?</span><br> <div class="presetButtons"> <<button "Yes">><<run importSettings(_preset, "function")>><<displaySettings "quickStart">><<if StartConfig.enableImages is true and $passage is "Start">><<startingPlayerImageUpdate>><<removeclass #startingPlayerImage "hidden">><</if>><</button>> <<button "No">><<displaySettings "quickStart">><</button>> </div> </div> <<importDetailsDisplay _presetObject>> <</widget>> <<widget "importConfirmDetails">> <<if isJsonString($importString)>> <div style="padding:5px 0px 0px 10px"> <span class="green">Change the below settings?</span><br> <div class="presetButtons"> <<button "Yes">><<run importSettings($importString, "function")>><<displaySettings "exportsettings">><<if StartConfig.enableImages is true and $passage is "Start">><<startingPlayerImageUpdate>><<startingPlayerImageUpdate>><</if>><</button>> <<button "No">><<displaySettings "exportsettings">><</button>> </div> </div> <<importDetailsDisplay `JSON.parse($importString)`>> <<else>> <<link "Back">><<displaySettings "exportsettings">><</link>> <br><br> <span class="red">Import is invalid</span>. Please double check the settings import string before importing again. <</if>> <</widget>> <<widget "importDetailsDisplay">> <<if _args[0]>> <div class="presetConfirm settingsGrid"> <<if _args[0].starting isnot undefined>> <div class="settingsHeader"> Imported Settings </div> <div class="settingsToggleItem"> <span class="gold">Base:</span> <<set _validatorObject to settingsObjects("starting")>> <<presetConfirm _args[0].starting>> </div> <<if _args[0].starting.player isnot undefined>> <div class="settingsToggleItem"> <span class="gold">Player:</span> <<set _validatorObject to settingsObjects("starting")>> <<presetConfirm _args[0].starting.player>> <<if _args[0].starting.skinColor isnot undefined>> <hr style="border-top:1px solid var(--700)"> <span class="gold">Skin Colour:</span> <<set _validatorObject to settingsObjects("starting")>> <<presetConfirm _args[0].starting.skinColor>> <</if>> </div> <</if>> <</if>> <<if _args[0].general isnot undefined>> <div class="settingsToggleItem"> <span class="gold">General Settings:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general>> <<silently>> <<if _args[0].general.skinColor isnot undefined>> <span class="gold">Skin Colour:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general.skinColor>> <</if>> <<if _args[0].general.map isnot undefined>> <span class="gold">Map Settings:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general.map>> <</if>> <<if _args[0].general.shopDefaults isnot undefined>> <span class="gold">Shop Settings:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general.shopDefaults>> <</if>> <</silently>> </div> <div class="settingsToggleItem"> <<if _args[0].general.options isnot undefined>> <span class="gold">Options:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general.options>> <</if>> </div> <div class="settingsToggleItem"> <<if _args[0].general.combatExtended isnot undefined>> <span class="gold">Combat Extended Settings:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general.combatExtended>> <</if>> </div> <div class="settingsToggleItem"> <<if _args[0].general.AMCTraits isnot undefined>> <span class="gold">AMC Traits Settings:</span> <<set _validatorObject to settingsObjects("general")>> <<presetConfirm _args[0].general.AMCTraits>> <</if>> </div> <</if>> <<if _args[0].npc isnot undefined>> <div class="settingsHeader"> Imported NPCs <<set _validatorObject to settingsObjects("npc")>> </div> <<for $_label, $_value range _args[0].npc>> <<if $_label is "Ivory Wraith">> <<continue>> <<else>> <div class="settingsToggleItem"> <span class="gold"><<print $_label>>:</span> <<presetConfirm $_value $_label>> </div> <</if>> <</for>> <</if>> </div> <</if>> <</widget>> <<widget "presetConfirm">> <<if _args[0]>> <<if _args[0].breastsizemin gt _args[0].breastsizemax>> <<set _temp to _args[0].breastsizemin>> <<set _args[0].breastsizemin to _args[0].breastsizemax>> <<set _args[0].breastsizemax to _temp>> <</if>> <<if _args[0].penissizemin gt _args[0].penissizemax>> <<set _temp to _args[0].penissizemin>> <<set _args[0].penissizemin to _args[0].penissizemax>> <<set _args[0].penissizemax to _temp>> <</if>> <ul> <<for $_label, $_value range _args[0]>> <<unset _altValue>> <<unset _altValue2>> <<if ["player","skinColor","map","shopDefaults","options","combatExtended","AMCTraits"].includes($_label)>> <<continue>> <</if>> <<unset _object>> <<unset _valid>> <<set _object to _validatorObject[$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <<if Object.keys(_object).includes("boolLetter")>> <<set _oldValue to V[$_label]>> <<if _oldValue is "t">> <<set _altValue to "True">> <<elseif _oldValue is "f">> <<set _altValue to "False">> <</if>> <<if $_value is "t">> <<set _altValue2 to "True">> <<elseif $_value is "f">> <<set _altValue2 to "False">> <</if>> <</if>> <</if>> <li> <<switch $_label>> <<case "numberify_enabled">> <<set _object to _validatorObject["options"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> Numbered link navigation: <span class="green"><<print (_altValue2 isnot undefined ? _altValue2 : $_value) is false ? "Disabled" : "Enabled">></span> <<case "malechance" "maleChanceMale" "maleChanceFemale" "dgchance" "cbchance" "malevictimchance" "npcVirginityChance" "npcVirginityChanceAdult" "straponchance" "blackchance" "beastmalechance" "beastMaleChanceMale" "beastMaleChanceFemale" "monsterchance">> <<set _object to _validatorObject[$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<print _displayName>> <span class="green"><<print (_altValue2 isnot undefined ? _altValue2 : $_value) + "%">></span> <<case "eyeselect" "hairselect" "awareselect" "background" "gamemode">> <<set _object to _validatorObject[$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "bodysize" "breastsensitivity" "genitalsensitivity" "mouthsensitivity" "bottomsensitivity" >> <<set _object to _validatorObject[$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _validatorObject[$_label]["textMap"][_altValue2] : _validatorObject[$_label]["textMap"][$_value])>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "hairlength">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<print _displayName>> <span class="green"><<print (_altValue2 isnot undefined ? _altValue2 : $_value) gte 400 ? "Neck" : (_altValue2 isnot undefined ? _altValue2 : $_value) gte 200 ? "Chest" : "Ear">></span> <<case "ironmanmode">> Ironman Mode: <span class="green"><<print (_altValue2 isnot undefined ? _altValue2 : $_value) is false ? "Disabled" : "Enabled">></span> <<case "timestyle">> <<set _object to _validatorObject["options"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["options"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is "military" ? "Military (24-Hour)" : "AM/PM (12-Hour)">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "images" "combatImages" "bodywritingImages" "silhouetteEnabled" "tanImgEnabled" "characterLightEnabled" "halfClosedEnabled" "combatAnimations" "blinkingEnabled" "sidebarAnimations">> <<set _object to _validatorObject["options"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["options"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is 1 ? "Enabled" : (_altValue2 isnot undefined ? _altValue2 : $_value) is true ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "basePlayerPregnancyChance" "baseNpcPregnancyChance">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _previousValue to _validatorObject[$_label]>> <<set _changedValue to (_altValue2 isnot undefined ? _validatorObject[$_label][_altValue2] : _validatorObject[$_label][$_value])>> <<if $_label is "basePlayerPregnancyChance">> <<print _displayName>> <span class="green"><<print "1 in "+(100-(_altValue2 isnot undefined ? _altValue2 : $_value))>></span> <<else>> <<print _displayName>> <span class="green"><<print "1 in "+(20-(_altValue2 isnot undefined ? _altValue2 : $_value))>></span> <</if>> <<case "humanPregnancyMonths">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst() + " months">></span> <<case "wolfPregnancyWeeks">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst() + " weeks">></span> <<case "alwaysBackToShopButton" "color" "colourItems" "compactMode" "disableReturn" "highContrast" "mannequinGender" "mannequinGenderFromClothes" "noHelp" "noTraits" "secColor">> <<set _object to _validatorObject["shopDefaults"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> Changes <<print $_label>> from <span class="green"><<print `$shopDefaults.`+$_label>></span> to <span class="green"><<print (_altValue2 isnot undefined ? _altValue2 : $_value)>></span> <<case "neverNudeMenus" "showCaptionText" "sidebarStats" "sidebarTime" "combatControls" "mapMovement" "mapTop" "mapMarkers" "images" "combatImages" "bodywritingImages" "silhouetteEnabled" "images" "sidebarAnimations" "blinkingEnabled" "combatAnimations" "halfClosedEnabled" "characterLightEnabled" "lightSpotlight" "lightGradient" "lightGlow" "lightFlat" "lightCombat" "lightTFColor" "maxStates" "useNarrowMarket" "skipStatisticsConfirmation" "passageCount" "playtime" "pepperSprayDisplay" "condomsDisplay" "closeButtonMobile" "showDebugRenderer" "numpad" "traitOverlayFormat" "font" "passageLineHeight" "overlayLineHeight" "sidebarLineHeight" "passageFontSize" "overlayFontSize" "sidebarFontSize">> <<set _object to _validatorObject["options"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["options"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "tipdisable">> <<set _object to _validatorObject["options"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["options"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is false ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "skin">> <<set _object to _validatorObject.player.skin>> <<if _object isnot undefined>> <<set _valid to validateValue(_object.color, $_value.color)>> <</if>> <<set _displayName to "Skin colour">> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value.color)>> <<print _displayName>> <span class="green"><<print _currentValue.toString().toUpperFirst()>></span> <<case "movement" "top" "markers">> <<set _valid to false>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "bestialitydisable" "slimedisable" "voredisable" "tentacledisable" "analdisable" "analdoubledisable" "analingusdisablegiving" "analingusdisablereceiving" "vaginaldoubledisable" "transformdisable" "transformdisabledivine" "pbdisable" "breastfeedingdisable" "parasitepregdisable" "watersportsdisable" "spiderdisable" "facesitdisable" "parasitedisable" "swarmdisable" "slugdisable" "waspdisable" "beedisable" "lurkerdisable" "horsedisable" "pregnancyspeechdisable" "plantdisable" "footdisable" "toydildodisable" "toywhipdisable" "toymultiplepenetration" "hypnosisdisable" "ruffledisable" "forcedcrossdressingdisable" "playerPregnancyHumanDisable" "playerPregnancyBeastDisable" "playerPregnancyEggLayingDisable" "npcPregnancyDisable" "incompletePregnancyDisable" "cycledisable" "cheatdisabletoggle">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is false ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "breastsizemin" "breastsizemax" "penissizemin" "penissizemax" "bottomsizemin" "bottomsizemax" "blackwolfmonster" "greathawkmonster" "bodywritingLvl" "asphyxiaLvl" "NudeGenderDC" "condomLvl">> <<set _object to _validatorObject[$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _validatorObject[$_label]["textMap"][_altValue2] : _validatorObject[$_label]["textMap"][$_value])>> <<if $_label is "penissizemin" or $_label is "penissizemax">> <<if $_currentGender is "Female">> <<print _displayName>> <span class="green">Not Applicable</span> /*Don't show min/max penis size for players without a penis*/ <<else>> <<print _displayName>> <span class="green"><<print _currentValue>></span> <</if>> <<else>> <<print _displayName>> <span class="green"><<print _currentValue>></span> <</if>> <<case "clothesPriceUnderwear" "clothesPriceSchool" "clothesPriceLewd" "furniturePriceFactor" "clothesPrice" "rentmod" "tending_yield_factor">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue * 100 + "%">></span> <<case "pronoun" "gender" "skincolour" "penissize" "breastsize" "bottomsize" "gender_body" "ballsExist" "freckles">> <<if _args[1]>> <<set _object to _validatorObject[$_label]>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _validatorObject[$_label]["textMap"][_altValue2] : _validatorObject[$_label]["textMap"][$_value])>> <<if $_label is "pronoun">> <<set $_npcGender to _currentValue>> <</if>> <<if $_npcGender is "N/A">> <<print _displayName>><span class="green"><<print "N/A">></span> <<else>> <<print _displayName>><span class="green"><<print _currentValue>></span> <</if>> <<if $_value is "none" and $passage is "Start">> <<set _valid to true>> <</if>> <<elseif $_label is "gender">> <<set _object to _validatorObject["player"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["player"][$_label]["displayName"]>> <<set $_currentGender to (_altValue2 isnot undefined ? _validatorObject["player"][$_label]["textMap"][_altValue2] : _validatorObject["player"][$_label]["textMap"][$_value])>> <<print _displayName>> <span class="green"><<print $_currentGender>></span> <<elseif $_label is "penissize">> <<set _object to _validatorObject["player"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["player"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _validatorObject["player"][$_label]["textMap"][_altValue2] : _validatorObject["player"][$_label]["textMap"][$_value])>> <<if $_currentGender is "Female">> <<print _displayName>> <span class="green">None</span> /*Don't show penis size for players without a penis*/ <<else>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <</if>> <<elseif $_label is "ballsExist">> <<set _object to _validatorObject["player"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["player"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _validatorObject["player"][$_label]["textMap"][_altValue2] : _validatorObject["player"][$_label]["textMap"][$_value])>> <<if $_currentGender is "Male">> <<print _displayName>> <span class="green">Existent</span> /*Don't show 'nonexistent' for players who have a penis*/ <<else>> <<print _displayName>> <span class="green"><<print _currentValue>></span> <</if>> <<else>> <<set _object to _validatorObject["player"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["player"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _validatorObject["player"][$_label]["textMap"][_altValue2] : _validatorObject["player"][$_label]["textMap"][$_value])>> <<print _displayName>> <span class="green"><<print _currentValue>></span> <</if>> <<case "standingFights" "reverseRape" "passiveDodging" "activeDodging" "uncappedDodgeChance" "blocking" "countering" "feinting" "hookpunching" "brawlingToggle" "enemyPassiveDodging" "enemyActiveDodging" "enemyBlocking" "enemyCountering" "enemyFeinting" "enemyLevelDayScaling" "enemyHealthDayScaling" "enemyInfiniteDayScaling" "enemyHealthDefeatScaling" "enemyInfiniteDefeatScaling" "enemyLevelDefeatScaling">> <<set _object to _validatorObject["combatExtended"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["combatExtended"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is 1 ? "Enabled" : (_altValue2 isnot undefined ? _altValue2 : $_value) is true ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "dodgeChanceCap" "enemyLevelDayScalingMult" "enemyHealthDayScalingMult" "enemyLevelDefeatScalingMult" "enemyHealthDefeatScalingMult">> <<set _object to _validatorObject["combatExtended"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _object["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue + "%">></span> <<case "enemyDayScaling" "enemyDayScalingLimit" "enemyDefeatScaling" "enemyDefeatScalingLimit">> <<set _object to _validatorObject["combatExtended"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _object["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue>></span> <<case "npcHealthMult" "npcArousalMult" "beastHealthMult" "beastArousalMult">> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue + "%">></span> <<case "halfGain">> <<set _object to _validatorObject["AMCTraits"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["AMCTraits"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is 1 ? "Enabled" : (_altValue2 isnot undefined ? _altValue2 : $_value) is true ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "physique" "willpower" "skulduggery" "dancing" "swimming" "athletics" "tending" "housekeeping" "fishing" "brawling" "science" "maths" "english" "history" "seduction" "oral" "chest" "hands" "buttocks" "penile" "vaginal" "anal" "thighs" "feet">> <<set _object to _validatorObject["AMCTraits"][$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject["AMCTraits"][$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is 2 ? "Enabled" : (_altValue2 isnot undefined ? _altValue2 : $_value) is true ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<case "multiOrgasmToggle">> <<set _object to _validatorObject[$_label]>> <<if _object isnot undefined>> <<set _valid to validateValue(_object, $_value)>> <</if>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value) is 1 ? "Enabled" : (_altValue2 isnot undefined ? _altValue2 : $_value) is true ? "Enabled" : "Disabled">> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<default>> <<if _validatorObject[$_label]>> <<set _displayName to _validatorObject[$_label]["displayName"]>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print _displayName>> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <<else>> <<set _currentValue to (_altValue2 isnot undefined ? _altValue2 : $_value)>> <<print $_label + ":">> <span class="green"><<print _currentValue .toString().toUpperFirst()>></span> <</if>> <</switch>> <<if _valid is undefined>> <span class="red">(Setting is not recognised so will not be imported)</span> <<elseif _valid is false>> <span class="red">(Value is not valid so will not be imported)</span> <</if>> </li> <</for>> </ul> <</if>> <</widget>>
<<widget "modupdate">> <<if $angeltf is undefined>> <<set $angeltf to 0>> <</if>> <<if $fallenangeltf is undefined>> <<set $fallenangeltf to 0>> <</if>> <<if $fallenangelplustf is undefined>> <<set $fallenangelplustf to 0>> <</if>> <<if $demontf is undefined>> <<set $demontf to 0>> <</if>> <<if $cattf is undefined>> <<set $cattf to 0>> <</if>> <<if $cowtf is undefined>> <<set $cowtf to 0>> <</if>> <<if $wolftf is undefined>> <<set $wolftf to 0>> <</if>> <<if $harpytf is undefined>> <<set $harpytf to 0>> <</if>> <<if $foxtf is undefined>> <<set $foxtf to 0>> <</if>> <<if $fallenangelretribution is undefined>> <<set $fallenangelretribution to 0>> <</if>> <<if $demonseduce is undefined>> <<set $demonseduce to 0>> <</if>> <<if $begoneThot is undefined>> <<set $begoneThot to 0>> <</if>> <<if $farm isnot undefined>> <<if $farm.tractor is undefined>> <<set $farm.tractor to 0>> <<set $farm.tractorplough to false>> <<set $farm.tractorseeddrill to false>> <<set $farm.tractorharvester to false>> <<set $farm.tractorloader to false>> <</if>> <<if $farm.compostbin is undefined>> <<set $farm.compostbin to 0>> <</if>> <<if $farm.compostToProduce is undefined>> <<set $farm.compostToProduce to 0>> <</if>> <<if $farm.compostWaiting is undefined>> <<set $farm.compostWaiting to 0>> <</if>> <<if $farm.compostProducing is undefined>> <<set $farm.compostProducing to [-1,-1,-1,-1]>> <</if>> <<if $farm.compostProducing[0] is undefined>> <<set $farm.compostProducing[0] to -1>> <</if>> <<if $farm.compostProducing[1] is undefined>> <<set $farm.compostProducing[1] to -1>> <</if>> <<if $farm.compostProducing[2] is undefined>> <<set $farm.compostProducing[2] to -1>> <</if>> <<if $farm.compostProducing[3] is undefined>> <<set $farm.compostProducing[3] to -1>> <</if>> <<if $farm.compostReady is undefined>> <<set $farm.compostReady to 0>> <</if>> <<if $farm.watchtowerDailyAttempt is undefined>> <<set $farm.watchtowerDailyAttempt to 0>> <</if>> <<if $farm.dailyHelp is undefined>> <<set $farm.dailyHelp to 0>> <</if>> <<if $farm.player_still_timer is undefined>> <<set $farm.player_still_timer to -1>> <</if>> <<if $farm.barn is undefined>> <<set $farm.barn to 0>> <</if>> <<if $farm.coop is undefined>> <<set $farm.coop to 0>> <</if>> <<if $farm.extract is undefined>> <<set $farm.extract to 0>> <</if>> <<if $farm.net is undefined>> <<set $farm.net to 0>> <</if>> <<if $farm.cooler is undefined>> <<set $farm.cooler to 0>> <</if>> <<if $farm.waterField is undefined>> <<set $farm.waterField to 0>> <</if>> <</if>> <<if $studyBooks is undefined>> <<set $studyBooks to {}>> <<set $studyBooks.rented to {}>> <<set $studyBooks.rented.count to 0>> <<set $studyBooks.rented.science to 0>> <<set $studyBooks.rented.maths to 0>> <<set $studyBooks.rented.english to 0>> <<set $studyBooks.rented.history to 0>> <<set $studyBooks.rented.RaulAndJanet to 0>> <<set $studyBooks.rented.pinch to 0>> <<set $studyBooks.stolen to {}>> <<set $studyBooks.stolen.count to 0>> <<set $studyBooks.stolen.science to 0>> <<set $studyBooks.stolen.maths to 0>> <<set $studyBooks.stolen.english to 0>> <<set $studyBooks.stolen.history to 0>> <<set $studyBooks.stolen.RaulAndJanet to 0>> <<set $studyBooks.stolen.pinch to 0>> <</if>> <<if $studyBooks.rented is "none" or $studyBooks.rented is "science" or $studyBooks.rented is "maths" or $studyBooks.rented is "English" or $studyBooks.rented is "history" or $studyBooks.rented is "Raul and Janet" or $studyBooks.rented is "Pinch">> <<set $studyBooks.rented to {}>> <<set $studyBooks.rented.count to 0>> <<if $studyBooks.rented is "science">> <<set $studyBooks.rented.science to 1>> <<set $studyBooks.rented.count += 1>> <<else>> <<set $studyBooks.rented.science to 0>> <</if>> <<if $studyBooks.rented is "maths">> <<set $studyBooks.rented.maths to 1>> <<set $studyBooks.rented.count += 1>> <<else>> <<set $studyBooks.rented.maths to 0>> <</if>> <<if $studyBooks.rented is "English">> <<set $studyBooks.rented.english to 1>> <<set $studyBooks.rented.count += 1>> <<else>> <<set $studyBooks.rented.english to 0>> <</if>> <<if $studyBooks.rented is "history">> <<set $studyBooks.rented.history to 1>> <<set $studyBooks.rented.count += 1>> <<else>> <<set $studyBooks.rented.history to 0>> <</if>> <<if $studyBooks.rented is "Raul and Janet">> <<set $studyBooks.rented.RaulAndJanet to 1>> <<set $studyBooks.rented.count += 1>> <<else>> <<set $studyBooks.rented.RaulAndJanet to 0>> <</if>> <<if $studyBooks.rented is "Pinch">> <<set $studyBooks.rented.pinch to 1>> <<set $studyBooks.rented.count += 1>> <<else>> <<set $studyBooks.rented.pinch to 0>> <</if>> <</if>> <<if $studyBooks.stolen is "none" or $studyBooks.stolen is "science" or $studyBooks.stolen is "maths" or $studyBooks.stolen is "English" or $studyBooks.stolen is "history" or $studyBooks.stolen is "Raul and Janet" or $studyBooks.stolen is "Pinch">> <<set $studyBooks.stolen to {}>> <<set $studyBooks.stolen.count to 0>> <<if $studyBooks.stolen is "science">> <<set $studyBooks.stolen.science to 1>> <<set $studyBooks.stolen.count to 1>> <<else>> <<set $studyBooks.stolen.science to 0>> <</if>> <<if $studyBooks.stolen is "maths">> <<set $studyBooks.stolen.maths to 1>> <<set $studyBooks.stolen.count to 1>> <<else>> <<set $studyBooks.stolen.maths to 0>> <</if>> <<if $studyBooks.stolen is "English">> <<set $studyBooks.stolen.english to 1>> <<set $studyBooks.stolen.count to 1>> <<else>> <<set $studyBooks.stolen.english to 0>> <</if>> <<if $studyBooks.stolen is "history">> <<set $studyBooks.stolen.history to 1>> <<set $studyBooks.stolen.count to 1>> <<else>> <<set $studyBooks.stolen.history to 0>> <</if>> <<if $studyBooks.stolen is "Raul and Janet">> <<set $studyBooks.stolen.RaulAndJanet to 1>> <<set $studyBooks.stolen.count to 1>> <<else>> <<set $studyBooks.stolen.RaulAndJanet to 0>> <</if>> <<if $studyBooks.stolen is "Pinch">> <<set $studyBooks.stolen.pinch to 1>> <<set $studyBooks.stolen.count to 1>> <<else>> <<set $studyBooks.stolen.pinch to 0>> <</if>> <</if>> <<if $book_rent_deposit is undefined>> <<set $book_rent_deposit to 0>> <</if>> <<if !$plants_known.includes("green_manure")>> <<set $plants_known.push("green_manure")>> <</if>> <<if $lockpickTrainingSet is undefined>> <<set $lockpickTrainingSet to 0>> <</if>> <<if $umbrella isnot undefined>> <<unset $umbrella>> <</if>> <<if $umbrellaDurability isnot undefined>> <<unset $umbrellaDurability>> <</if>> <<if $umbrellaSidebar isnot undefined>> <<unset $umbrellaSidebar>> <</if>> <<if $umbrellaStat is undefined>> <<set $umbrellaStat to 0>> <</if>> <<if $tfearshatposition is undefined>> <<set $tfearshatposition to "under">> <</if>> <<if $tfearsposition is undefined>> <<set $tfearsposition to "back">> <</if>> <<if $bannerstyle is undefined>> <<set $bannerstyle to "default">> <</if>> <<if $bannerstyle is 1>> <<set $bannerstyle to "default">> <</if>> <<if $bannerstyle is 2>> <<set $bannerstyle to "gold">> <</if>> <<if $bannerstyleintro is undefined>> <<set $bannerstyleintro to {}>> <<set $bannerstyleintro.gold to false>> <<set $bannerstyleintro.silver to false>> <<set $bannerstyleintro.bronze to false>> <<set $bannerstyleintro.blood to false>> <<set $bannerstyleintro.alien to false>> <</if>> <<if $bannerstyleintro.silver is undefined>> <<set $bannerstyleintro.silver to false>> <</if>> <<if $bannerstyleintro.bronze is undefined>> <<set $bannerstyleintro.bronze to false>> <</if>> <<if $furnitureLocation is undefined>> <<set $furnitureLocation to "orphanage">> <</if>> <<if $furnitureMovePrice is undefined>> <<set $furnitureMovePrice = []>> <</if>> <<if $multFix is undefined>> <<if $npcHealthMult is 1>> <<set $npcHealthMult to 100>> <</if>> <<if $npcArousalMult is 1>> <<set $npcArousalMult to 100>> <</if>> <<if $beastHealthMult is 1>> <<set $beastHealthMult to 200>> <</if>> <<if $beastArousalMult is 1>> <<set $beastArousalMult to 100>> <</if>> <<set $multFix to 1>> <</if>> <<if $npcHealthMult is undefined>> <<set $npcHealthMult to 100>> <</if>> <<if $npcArousalMult is undefined>> <<set $npcArousalMult to 100>> <</if>> <<if $beastHealthMult is undefined>> <<set $beastHealthMult to 100>> <</if>> <<if $beastArousalMult is undefined>> <<set $beastArousalMult to 100>> <</if>> <<set setup.majorAreas to [ "Orphanage", "Bedroom", "Barb Street", "Cliff Street", "Connudatus Street", "Danube Street", "Domus Street", "Elk Street", "Harvest Street", "High Street", "Mer Street", "Nightingale Street", "Oxford Street", "Starfish Street", "Wolf Street", "Residential alleyways", "Commercial alleyways", "Industrial alleyways", "Park", "Hallways", "Brothel", "Strip Club", "Beach", "Ocean Breeze", "Docks Work", "Residential Drain", "Commercial Drain", "Industrial Drain", "Forest", "Farmland", "Livestock Field", "Moor", "Forest Wolf Cave", "Wolf Cave", "Wolf Cave Clearing", "Asylum", "Asylum Cell", "Underground Cell", "Prison Cell", "Island", "Lake Shore", "Farmland", "Farm Work", "Meadow", "Sea", "town" ]>> <<if $hypnosis_traits.scream is undefined or $hypnosis_traits.scream lt 0>> <<set $hypnosis_traits.scream to -1>> <</if>> <<if $hypnosis_traits.cover is undefined or $hypnosis_traits.cover lt 0>> <<set $hypnosis_traits.cover to -1>> <</if>> <<if $hypnosis_traits.deviancy is undefined or $hypnosis_traits.deviancy lt 0>> <<set $hypnosis_traits.deviancy to -1>> <</if>> <<if $enemystatstyle is undefined>> <<set $enemystatstyle to "default">> <</if>> <<if $uncomfortable.sadoMaso is undefined>> <<set $uncomfortable.sadoMaso to true>> <</if>> <<if $combatExtended is undefined>> <<set $combatExtended to {}>> <</if>> <<if $combatExtended.passiveDodging is undefined>> <<set $combatExtended.passiveDodging to 0>> <</if>> <<if $combatExtended.activeDodging is undefined>> <<set $combatExtended.activeDodging to 0>> <</if>> <<if $combatExtended.activeDodgingActive is undefined>> <<set $combatExtended.activeDodgingActive to 0>> <</if>> <<if $combatExtended.dodgeSuccess is undefined>> <<set $combatExtended.dodgeSuccess to 0>> <</if>> <<if $combatExtended.standingFights is undefined>> <<set $combatExtended.standingFights to 0>> <</if>> <<if $combatExtended.standingFightStart is undefined or $combat isnot 1>> <<set $combatExtended.standingFightStart to 1>> <</if>> <<if $combatExtended.reverseRape is undefined>> <<set $combatExtended.reverseRape to 0>> <</if>> <<if $combatExtended.reverseRapeEnd is undefined>> <<set $combatExtended.reverseRapeEnd to 0>> <</if>> <<if $combatExtended.reverseRapeStart is undefined>> <<set $combatExtended.reverseRapeStart to 0>> <</if>> <<if $combatExtended.stability is undefined>> <<set $combatExtended.stability to 0>> <</if>> <<if $combatExtended.stabilityLost is undefined>> <<set $combatExtended.stabilityLost to 0>> <</if>> <<if $combatExtended.enemyPassiveDodging is undefined>> <<set $combatExtended.enemyPassiveDodging to 0>> <</if>> <<if $combatExtended.enemyActiveDodging is undefined>> <<set $combatExtended.enemyActiveDodging to 0>> <</if>> <<if $combatExtended.enemyFeinting is undefined>> <<set $combatExtended.enemyFeinting to 0>> <</if>> <<if $combatExtended.enemyBlocking is undefined>> <<set $combatExtended.enemyBlocking to 0>> <</if>> <<if $combatExtended.enemyCountering is undefined>> <<set $combatExtended.enemyCountering to 0>> <</if>> <<if $combatExtended.enemyCounterSuccess is undefined>> <<set $combatExtended.enemyCounterSuccess to 0>> <</if>> <<if $combatExtended.brawlingToggle is undefined>> <<set $combatExtended.brawlingToggle to 0>> <</if>> <<if $combatExtended.brawling is undefined>> <<set $combatExtended.brawling to 0>> <</if>> <<if $combatExtended.uncappedDodgeChance is undefined>> <<set $combatExtended.uncappedDodgeChance to 0>> <</if>> <<if $combatExtended.dodgeChanceCap is undefined>> <<set $combatExtended.dodgeChanceCap to 90>> <</if>> <<if $combatExtended.blocking is undefined>> <<set $combatExtended.blocking to 0>> <</if>> <<if $combatExtended.blockingActive is undefined>> <<set $combatExtended.blockingActive to 0>> <</if>> <<if $combatExtended.countering is undefined>> <<set $combatExtended.countering to 0>> <</if>> <<if $combatExtended.counteringActive is undefined>> <<set $combatExtended.counteringActive to 0>> <</if>> <<if $combatExtended.counterSuccess is undefined>> <<set $combatExtended.counterSuccess to 0>> <</if>> <<if $combatExtended.feinting is undefined>> <<set $combatExtended.feinting to 0>> <</if>> <<if $combatExtended.feintingActive is undefined>> <<set $combatExtended.feintingActive to 0>> <</if>> <<if $combatExtended.hookpunching is undefined>> <<set $combatExtended.hookpunching to 0>> <</if>> <<if $combatExtended.hookpunchingActive is undefined>> <<set $combatExtended.hookpunchingActive to 0>> <</if>> /* Enemy Day Scaling */ <<if $combatExtended.enemyLevelDayScaling is undefined>> <<set $combatExtended.enemyLevelDayScaling to 0>> <</if>> <<if $combatExtended.enemyLevelDayScalingMult is undefined>> <<set $combatExtended.enemyLevelDayScalingMult to 1>> <</if>> <<if $combatExtended.enemyHealthDayScaling is undefined>> <<set $combatExtended.enemyHealthDayScaling to 0>> <</if>> <<if $combatExtended.enemyHealthDayScalingMult is undefined or ($combatExtended.enemyHealthDayScalingMult is 0.05 and $combatExtended.enemyHealthDayScalingMultFix is undefined)>> <<set $combatExtended.enemyHealthDayScalingMult to 5>> <</if>> <<if $combatExtended.enemyDayScaling is undefined>> <<set $combatExtended.enemyDayScaling to 7>> <</if>> <<if $combatExtended.enemyInfiniteDayScaling is undefined>> <<set $combatExtended.enemyInfiniteDayScaling to 0>> <</if>> <<if $combatExtended.enemyDayScalingLimit is undefined>> <<set $combatExtended.enemyDayScalingLimit to 20>> <</if>> /* Enemy Defeat Scaling */ <<if $combatExtended.enemyLevelDefeatScaling is undefined>> <<set $combatExtended.enemyLevelDefeatScaling to 0>> <</if>> <<if $combatExtended.enemyLevelDefeatScalingMult is undefined>> <<set $combatExtended.enemyLevelDefeatScalingMult to 1>> <</if>> <<if $combatExtended.enemyHealthDefeatScaling is undefined>> <<set $combatExtended.enemyHealthDefeatScaling to 0>> <</if>> <<if $combatExtended.enemyHealthDefeatScalingMult is undefined or ($combatExtended.enemyHealthDefeatScalingMult is 0.05 and $combatExtended.enemyHealthDefeatScalingMultFix is undefined)>> <<set $combatExtended.enemyHealthDefeatScalingMult to 5>> <</if>> <<if $combatExtended.enemyDefeatScaling is undefined>> <<set $combatExtended.enemyDefeatScaling to 10>> <</if>> <<if $combatExtended.enemyInfiniteDefeatScaling is undefined>> <<set $combatExtended.enemyInfiniteDefeatScaling to 0>> <</if>> <<if $combatExtended.enemyDefeatScalingLimit is undefined>> <<set $combatExtended.enemyDefeatScalingLimit to 20>> <</if>> <<if $combatExtended.reverseRapeInit is undefined>> <<set $combatExtended.reverseRapeInit to 0>> <</if>> <<if $dodgeStat is undefined>> <<set $dodgeStat to 0>> <</if>> <<if $partialDodgeStat is undefined>> <<set $partialDodgeStat to 0>> <</if>> <<if $counterStat is undefined>> <<set $counterStat to 0>> <</if>> <<if $partialCounterStat is undefined>> <<set $partialCounterStat to 0>> <</if>> <<if $hookpunchStat is undefined>> <<set $hookpunchStat to 0>> <</if>> <<if $enemiesDefeatedStat is undefined>> <<set $enemiesDefeatedStat to 0>> <</if>> <<if $brothelExclusiveGloryholeIntro is undefined>> <<set $brothelExclusiveGloryholeIntro to 0>> <</if>> <<if $brothelExclusiveGloryholePrice is undefined>> <<set $brothelExclusiveGloryholePrice to 10>> <</if>> <<if $combat is 0 and $punishmentposition is "gloryhole">> <<set $punishmentposition to 0>> <</if>> <<if $npcStealMoneyToggle is undefined>> <<set $npcStealMoneyToggle to 0>> <</if>> <<if $npcStealMoneyPercentage is undefined>> <<set $npcStealMoneyPercentage to 10>> <</if>> <<if $willpowerDecay is undefined>> <<set $willpowerDecay to 1>> <</if>> <<set $daisyCount to 0>> <<for _i to 0; _i lt $plants_known.length; _i++>> <<if $plants_known[_i] is "daisy">> <<set $daisyCount += 1>> <</if>> <</for>> <<if $daisyCount gte 2>> <<set $plants_known to []>> <<run unlockAllSeeds()>> <</if>> <<if $multiOrgasmToggle is undefined>> <<set $multiOrgasmToggle to 0>> <</if>> <<if $NNPCMultiOrgasmToggle is undefined>> <<set $NNPCMultiOrgasmToggle to 0>> <</if>> <<if $multiOrgasmLustScaling is undefined>> <<set $multiOrgasmLustScaling to 0>> <</if>> <<for _i to 0; _i lt $NPCName.length; _i++>> <<if $NPCName[_i].maxOrgasms is undefined>> <<set $NPCName[_i].maxOrgasms to 1>> <</if>> <</for>> <<if $farm>> <<if $farm.tower>> <<if $farm.tower gte 1 and !$farm.tower_guard>> <<set $farm.tower_guard_can_hire to true>> <</if>> <</if>> <</if>> <<if C.tiredness is undefined>> <<set C.tiredness to { max: 2000, min: 0 }>> <</if>> <<if $tirednessMaxScalingToggle is undefined>> <<set $tirednessMaxScalingToggle to 0>> <</if>> <<if $dockbonus is undefined>> <<set $dockbonus to 0>> <</if>> <<set $CTAngryLowC to ["snarls", "sneers", "growls", "groans", "yells"]>> <<set $CTAngryMidC to ["mocks you", "sneers", "growls", "groans", "yells"]>> <<set $CTAngryHighC to ["snarls", "sneers", "screams", "shouts", "yells"]>> <<set $CTAnnoyedLowC to ["speaks", "snarls", "growl", "jeers"]>> <<set $CTAnnoyedMidC to ["speaks hushedly","snarls","sneers","growls"]>> <<set $CTAnnoyedHighC to ["is lost in the moment","snarls","sneers","growls"]>> <<set $CTHappyLowC to ["speaks", "whispers" , "Murmurs" , "breathes"]>> <<set $CTHappyMidC to ["speaks","whispers","moans"]>> <<set $CTHappyHighC to ["is lost in the moment","speaks","coos","whispers", "speaks hushedly"]>> <<if Array.isArray($mathsTraitBuffs)>> <<set _mathsTraitBuffs to $mathsTraitBuffs>> <<if $mathsTraitBuffs.antiques isnot undefined>> <<set _mathsTraitBuffs.antiques to $mathsTraitBuffs.antiques>> <</if>> <<if $mathsTraitBuffs.stolen isnot undefined>> <<set _mathsTraitBuffs.stolen to $mathsTraitBuffs.stolen>> <</if>> <<if $mathsTraitBuffs.market isnot undefined>> <<set _mathsTraitBuffs.market to $mathsTraitBuffs.market>> <</if>> <<set $mathsTraitBuffs to {}>> <<if _mathsTraitBuffs.antiques isnot undefined>> <<set $mathsTraitBuffs.antiques to _mathsTraitBuffs.antiques>> <</if>> <<if _mathsTraitBuffs.stolen isnot undefined>> <<set $mathsTraitBuffs.stolen to _mathsTraitBuffs.stolen>> <</if>> <<if _mathsTraitBuffs.market isnot undefined>> <<set $mathsTraitBuffs.market to _mathsTraitBuffs.market>> <</if>> <<unset _mathsTraitBuffs>> <</if>> <<if $mathsTraitBuffs is undefined>> <<set $mathsTraitBuffs to {}>> <</if>> <<if $mathsTraitBuffs.antiques is undefined>> <<set $mathsTraitBuffs.antiques to 0>> <</if>> <<if $mathsTraitBuffs.stolen is undefined>> <<set $mathsTraitBuffs.stolen to 0>> <</if>> <<if $mathsTraitBuffs.market is undefined>> <<set $mathsTraitBuffs.market to 0>> <</if>> <<if $npcDescGenType is undefined>> <<set $npcDescGenType to "vanilla">> <</if>> <<if $npcBreastGenType is undefined>> <<set $npcBreastGenType to "vanilla">> <</if>> <<if $npcPenisGenType is undefined>> <<set $npcPenisGenType to "vanilla">> <</if>> <<if "antiqueliquor" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiqueliquor>> <</if>> <<if "antiquebogplate" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquebogplate>> <</if>> <<if "antiquebogbone" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquebogbone>> <</if>> <<if "antiquebogtool" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquebogtool>> <</if>> <<if "antiquebunkertablet" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquebunkertablet>> <</if>> <<if "antiquebunkertag" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquebunkertag>> <</if>> <<if "antiquecannonball" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquecannonball>> <</if>> <<if "antiquearttablet" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquearttablet>> <</if>> <<if "antiqueterracottastatue" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiqueterracottastatue>> <</if>> <<if "antiqueredvial" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiqueredvial>> <</if>> <<if "antiquetribemask" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquetribemask>> <</if>> <<if "antiqueebonystatuette" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiqueebonystatuette>> <</if>> <<if "antiqueglacierplant" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiqueglacierplant>> <</if>> <<if "antiquereal" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquereal>> <</if>> <<if "antiquebullion" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiquebullion>> <</if>> <<if "antiqueindigo" in $museumAntiques.antiques>> <<run delete $museumAntiques.antiques.antiqueindigo>> <</if>> <<if isNaN($stress)>> <<set $stress to 0>> <</if>> <<if isNaN($tiredness)>> <<set $tiredness to 0>> <</if>> <<if $realisticTransparency is undefined>> <<set $realisticTransparency to 0>> <</if>> <<if $DoLPTFBuffs is undefined>> <<set $DoLPTFBuffs to 0>> <</if>> <<if $TFWolfBuffs is undefined>> <<if ($wolfgirl gte 6 or ($transformationParts.wolf.tail isnot "hidden" and $transformationParts.wolf.tail isnot "disabled"))>> <<set $TFWolfBuffs to 1>> <<else>> <<set $TFWolfBuffs to 0>> <</if>> <</if>> <<if $TFCatBuffs is undefined>> <<if ($cat gte 6 or ($transformationParts.cat.tail isnot "hidden" and $transformationParts.cat.tail isnot "disabled"))>> <<set $TFCatBuffs to 1>> <<else>> <<set $TFCatBuffs to 0>> <</if>> <</if>> <<if $TFCowBuffs is undefined>> <<if ($cow gte 6 or ($transformationParts.cow.tail isnot "hidden" and $transformationParts.cow.tail isnot "disabled"))>> <<set $TFCowBuffs to 1>> <<else>> <<set $TFCowBuffs to 0>> <</if>> <</if>> <<if $TFBearBuffs is undefined>> <<if $bear gte 6>> <<set $TFBearBuffs to 1>> <<else>> <<set $TFBearBuffs to 0>> <</if>> <</if>> <<if $TFBirdBuffs is undefined>> <<if ($harpy gte 6 or ($transformationParts.bird.wings isnot "hidden" and $transformationParts.bird.wings isnot "disabled"))>> <<set $TFBirdBuffs to 1>> <<else>> <<set $TFBirdBuffs to 0>> <</if>> <</if>> <<if $TFFoxBuffs is undefined>> <<if ($fox gte 6 or ($transformationParts.fox.tail isnot "hidden" and $transformationParts.fox.tail isnot "disabled"))>> <<set $TFFoxBuffs to 1>> <<else>> <<set $TFFoxBuffs to 0>> <</if>> <</if>> <<if $TFBunnyBuffs is undefined>> <<if ($bunny gte 6 or ($transformationParts.bunny.tail isnot "hidden" and $transformationParts.bunny.tail isnot "disabled"))>> <<set $TFBunnyBuffs to 1>> <<else>> <<set $TFBunnyBuffs to 0>> <</if>> <</if>> <<if $bunnytf is 0 and $TFBunnyBuffs is 1>> <<set $TFBunnyBuffs to 0>> <</if>> <<if typeof $background is "string" or $background is undefined>> <<if $background is "nerd">> <<set _tmp to "nerd">> <</if>> <<if $background is "athlete">> <<set _tmp to "athlete">> <</if>> <<if $background is "delinquent">> <<set _tmp to "delinquent">> <</if>> <<if $background is "promiscuous">> <<set _tmp to "promiscuous">> <</if>> <<if $background is "exhibitionist">> <<set _tmp to "exhibitionist">> <</if>> <<if $background is "deviant">> <<set _tmp to "deviant">> <</if>> <<if $background is "beautiful">> <<set _tmp to "beautiful">> <</if>> <<if $background is "crossdresser">> <<set _tmp to "crossdresser">> <</if>> <<if $background is "lustful">> <<set _tmp to "lustful">> <</if>> <<if $background is "plantlover">> <<set _tmp to "plantlover">> <</if>> <<unset $background>> <<set $background to {}>> <<if _tmp isnot undefined>> <<set $background[_tmp] to true>> <<set $backgroundTraits.push(_tmp)>> <<unset _tmp>> <</if>> <</if>> <<if $background.nerd is undefined>> <<set $background.nerd to false>> <</if>> <<if $background.athlete is undefined>> <<set $background.athlete to false>> <</if>> <<if $background.delinquent is undefined>> <<set $background.delinquent to false>> <</if>> <<if $background.promiscuous is undefined>> <<set $background.promiscuous to false>> <</if>> <<if $background.exhibitionist is undefined>> <<set $background.exhibitionist to false>> <</if>> <<if $background.deviant is undefined>> <<set $background.deviant to false>> <</if>> <<if $background.beautiful is undefined>> <<set $background.beautiful to false>> <</if>> <<if $background.crossdresser is undefined>> <<set $background.crossdresser to false>> <</if>> <<if $background.lustful is undefined>> <<set $background.lustful to false>> <</if>> <<if $background.lustful is true and !$backgroundTraits.includes("lustful")>> <<set $backgroundTraits.push("lustful")>> <</if>> <<if $background.plantlover is undefined>> <<set $background.plantlover to false>> <</if>> <<if $bear is undefined>> <<set $bear to 0>> <</if>> <<if $bearbuild is undefined>> <<set $bearbuild to 0>> <</if>> <<if $beartf is undefined>> <<set $beartf to 0>> <</if>> <<if $transformationParts.bear is undefined>> <<set $transformationParts.bear to {plumage:"disabled", pubes:"disabled", ears:"disabled", tail:"disabled"}>> <</if>> <<if $reverseRapeOptOut is undefined>> <<set $reverseRapeOptOut to 0>> <</if>> <<if $skulduggery is undefined or isNaN($skulduggery)>> <<set $skulduggery to 1000>> <</if>> <<if $historyTraitBuffs is undefined>> <<set $historyTraitBuffs to {}>> <</if>> <<if $historyTraitBuffs.improvedChances is undefined>> <<set $historyTraitBuffs.improvedChances to 0>> <</if>> <<if $wardrobeMult is undefined>> <<set $wardrobeMult to 1>> <</if>> <<if $dancingRebalance is undefined>> <<set $dancingRebalance to 0>> <</if>> <<if $nikiSeen is undefined>> <<set $nikiSeen to []>> <<if $niki_seen isnot undefined>> <<set $nikiSeen.pushUnique($niki_seen)>> <<unset $niki_seen>> <</if>> <<if $livestock_pig gte 1>> <<set $nikiSeen.pushUnique("farm")>> <</if>> <<if $chef_state gte 5>> <<set $nikiSeen.pushUnique("chef")>> <</if>> <<if $winterLakeTalk gte 3>> <<set $nikiSeen.pushUnique("winter")>> <</if>> <</if>> <<if $sydneySeen is undefined>> <<set $sydneySeen to []>> <</if>> <<if $willpowerCum is undefined>> <<set $willpowerCum to 0>> <</if>> <<if $orgasmCum is undefined>> <<set $orgasmCum to 0>> <</if>> <<if $stallDeposit is undefined>> <<set $stallDeposit to 0>> <</if>> <<if $traumaeyes is undefined>> <<set $traumaeyes to false>> <</if>> <<if $bike is undefined>> <<set $bike to 0>> <</if>> <<if $bikeDurability is undefined>> <<set $bikeDurability to 0>> <</if>> <<if $bikePersistentLocation is undefined>> <<set $bikePersistentLocation to 0>> <</if>> <<if $bikeSecurity is undefined>> <<set $bikeSecurity to 0>> <</if>> <<if $bikeSecurityGear is undefined>> <<set $bikeSecurityGear to 0>> <</if>> <<if $bikeLocation is undefined>> <<set $bikeLocation to "">> <</if>> <<if $bikeStart is undefined>> <<set $bikeStart to "">> <</if>> <<if $bikeStartCategory is undefined>> <<set $bikeStartCategory to "">> <</if>> <<if $bikeEndCategory is undefined>> <<set $bikeEndCategory to "">> <</if>> <<if $bikeDestination is undefined>> <<set $bikeDestination to "">> <</if>> <<if $bikeBroken isnot undefined and $bikeDurability gte 1>> <<unset $bikeBroken>> <</if>> <<if $combatTimePass is undefined>> <<set $combatTimePass to 10>> <</if>> <<if $combat isnot 1>> <<set $ejaculating to 0>> <<set $ejaculatingMid to false>> <</if>> <<if $dailySunscreen is undefined>> <<set $dailySunscreen to 0>> <</if>> <<if $statGainMult is undefined>> <<set $statGainMult to 100>> <</if>> <<if $statGainReductionMult isnot undefined>> <<set $statGainMult to 100 - Math.min((Math.round((100 - $statGainReductionMult) / 10) * 10), 10)>> <<unset $statGainReductionMult>> <</if>> <<if $npcDescDemonDisable is undefined>> <<set $npcDescDemonDisable to 0>> <</if>> <<if $stressMaxScalingToggle is undefined>> <<set $stressMaxScalingToggle to 0>> <</if>> <<if $athleticsFitnessToggle is undefined>> <<set $athleticsFitnessToggle to 0>> <</if>> <<if $loveInterest is undefined>> <<set $loveInterest to { primary: "None", secondary: "None", tertiary: "None", quarternary: "None", quinary: "None", senary: "None" }>> <</if>> <<if $loveInterest.quarternary is undefined>> <<set $loveInterest.quarternary to "None">> <</if>> <<if $loveInterest.quinary is undefined>> <<set $loveInterest.quinary to "None">> <</if>> <<if $loveInterest.senary is undefined>> <<set $loveInterest.senary to "None">> <</if>> <<set _food_keys to Object.keys(setup.plants)>> <<for _i to 0; _i lt _food_keys.length; _i++>> <<set $_type to _food_keys[_i]>> <<if $plants[$_type] is undefined>> <<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": 0}>> <<elseif $plants[$_type].name is undefined>> <<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": $plants[$_type].amount}>> <</if>> <</for>> <<if $baileyDeposit is undefined>> <<set $baileyDeposit to 0>> <</if>> <<if $depositMax is undefined>> <<set $depositMax to 0>> <</if>> <<if $depositWithdrawalFee is undefined>> <<set $depositWithdrawalFee to 10>> <</if>> <<set _rentstage to $rentstage - 1>> <<set _baileyDepositMax to 0>> <<for _i to 1; _i <= $depositMax; _i++>> <<set $rentmoney to [10000,30000,50000,70000,100000,150000,200000][Math.clamp(_rentstage,0,6)]>> <<set _rentstage += 1>> <<set _baileyDepositMax += $rentmoney + ($babyRent or 0)>> <</for>> <<if $factoryUpgrades is undefined>> <<set $factoryUpgrades to {}>> <</if>> <<if $rightArmPosition is undefined>> <<set $rightArmPosition to "below">> <</if>> <<if $parasiteCapMult is undefined>> <<set $parasiteCapMult to 1>> <</if>> <<set setup.faceVariantOptions to { "default": { "Gentle": "default", "Catty": "catty", "Aloof": "aloof", "Sweet": "sweet", "Modded 1": "modded1", "Modded 2": "modded2", "Modded 3": "modded3", "Modded 4": "modded4", "Modded 5": "modded5", "Modded 6": "modded6", "Modded 7": "modded7", "Modded 8": "modded8", "Modded 9": "modded9", }, }>> <<if $transformationParts.bunny is undefined>> <<set $transformationParts.bunny to {ears:"disabled", tail:"disabled"}>> <</if>> <<if $stressBeauty is undefined>> <<set $stressBeauty to 0>> <</if>> <<if $beautyMult is undefined>> <<set $beautyMult to 1>> <</if>> <<if $fame.undefined isnot undefined>> <<run delete $fame.undefined>> <</if>> <<if $wingslayer is undefined>> <<set $wingslayer to "back">> <</if>> <<if $harpytf is 1 or $angeltf is 1 or $fallenangeltf is 1 or $fallenangelplustf is 1 or $demontf is 1>> <<set $birdGlide to 1>> <</if>> <<if $harpytf is 1 or $birdFlyUnlocked is 1 or ($bird.syndrome isnot undefined and $bird.lock is undefined)>> <<set $birdFly to 1>> <</if>> <<if $combatExtended.standingFightsType is undefined>> <<set $combatExtended.standingFightsType to "normal">> <</if>> <<if $orphanageLocked is undefined>> <<set $orphanageLocked to 0>> <</if>> <<if $farmCottageLocked is undefined>> <<set $farmCottageLocked to 0>> <</if>> <<if $transformationParts.okami is undefined>> <<set $transformationParts.okami to {ears:"disabled", tail:"disabled", wings:"disabled", misc:"disabled"}>> <</if>> <<if $transformationParts.seraphim is undefined>> <<set $transformationParts.seraphim to {wings:"disabled", plumage:"disabled", eyes:"disabled"}>> <</if>> <<if $transformationParts.kitsune is undefined>> <<set $transformationParts.kitsune to {ears:"disabled", tail:"disabled", cheeks:"disabled", misc:"disabled"}>> <</if>> <<if $produce_yield_factor is undefined>> <<set $produce_yield_factor to 100>> <</if>> <<if $beastGroupFight is undefined>> <<set $beastGroupFight to 0>> <</if>> <<if $beastMultiOrgasmToggle is undefined>> <<set $beastMultiOrgasmToggle to 0>> <</if>> <<if $furniture>> <<if $furniture.bedroom.chair is undefined>> <<set $furniture.bedroom.chair to {id: "chair"}>> <</if>> <</if>> <<if $combatExtended.footwork is undefined>> <<set $combatExtended.footwork to 0>> <</if>> <<if $combatExtended.striking is undefined>> <<set $combatExtended.striking to 0>> <</if>> <<if $combatExtended.kicking is undefined>> <<set $combatExtended.kicking to 0>> <</if>> <<if $combatExtended.footworkToggle is undefined>> <<set $combatExtended.footworkToggle to 0>> <</if>> <<if $combatExtended.strikingToggle is undefined>> <<set $combatExtended.strikingToggle to 0>> <</if>> <<if $combatExtended.kickingToggle is undefined>> <<set $combatExtended.kickingToggle to 0>> <</if>> <<if $combatExtended.enemyMartialArts is undefined>> <<set $combatExtended.enemyMartialArts to 0>> <</if>> <<if $combatExtended.enemyMartialArtsRandom is undefined>> <<set $combatExtended.enemyMartialArtsScaling to "random">> <</if>> <<if $combatExtended.enemyMartialArtsLevelScalingMult is undefined>> <<set $combatExtended.enemyMartialArtsLevelScalingMult to 50>> <</if>> <<if $combatExtended.enemyBaseDodgeChance is undefined>> <<set $combatExtended.enemyBaseDodgeChance to 1>> <</if>> <<if $combatExtended.enemyBaseDodgeChanceMult is undefined>> <<set $combatExtended.enemyBaseDodgeChanceMult to 2>> <</if>> <<modNewNamedNPCs>> <<modParasiteCapUpdate>> <<modWardrobeUpdate>> <<amcTraitsUpdate>> <</widget>> <<widget "amcTraitsUpdate">> <<if $AMCTraits is undefined>> <<set $AMCTraits to {}>> <</if>> <<if $AMCTraits.halfGain is undefined>> <<set $AMCTraits.halfGain to 0>> <</if>> <<if $AMCTraits.beauty is undefined>> <<set $AMCTraits.beauty to 1>> <</if>> <<if $AMCTraits.physique is undefined>> <<set $AMCTraits.physique to 1>> <</if>> <<if $AMCTraits.willpower is undefined>> <<set $AMCTraits.willpower to 1>> <</if>> <<if $AMCTraits.skulduggery is undefined>> <<set $AMCTraits.skulduggery to 1>> <</if>> <<if $AMCTraits.dancing is undefined>> <<set $AMCTraits.dancing to 1>> <</if>> <<if $AMCTraits.swimming is undefined>> <<set $AMCTraits.swimming to 1>> <</if>> <<if $AMCTraits.athletics is undefined>> <<set $AMCTraits.athletics to 1>> <</if>> <<if $AMCTraits.tending is undefined>> <<set $AMCTraits.tending to 1>> <</if>> <<if $AMCTraits.housekeeping is undefined>> <<set $AMCTraits.housekeeping to 1>> <</if>> <<if $AMCTraits.brawling is undefined>> <<set $AMCTraits.brawling to 1>> <</if>> <<if $AMCTraits.science is undefined>> <<set $AMCTraits.science to 1>> <</if>> <<if $AMCTraits.maths is undefined>> <<set $AMCTraits.maths to 1>> <</if>> <<if $AMCTraits.english is undefined>> <<set $AMCTraits.english to 1>> <</if>> <<if $AMCTraits.history is undefined>> <<set $AMCTraits.history to 1>> <</if>> <<if $AMCTraits.seductionskill is undefined>> <<set $AMCTraits.seductionskill to 1>> <</if>> <<if $AMCTraits.oralskill is undefined>> <<set $AMCTraits.oralskill to 1>> <</if>> <<if $AMCTraits.chestskill is undefined>> <<set $AMCTraits.chestskill to 1>> <</if>> <<if $AMCTraits.handskill is undefined>> <<set $AMCTraits.handskill to 1>> <</if>> <<if $AMCTraits.bottomskill is undefined>> <<set $AMCTraits.bottomskill to 1>> <</if>> <<if $AMCTraits.penileskill is undefined>> <<set $AMCTraits.penileskill to 1>> <</if>> <<if $AMCTraits.vaginalskill is undefined>> <<set $AMCTraits.vaginalskill to 1>> <</if>> <<if $AMCTraits.analskill is undefined>> <<set $AMCTraits.analskill to 1>> <</if>> <<if $AMCTraits.thighskill is undefined>> <<set $AMCTraits.thighskill to 1>> <</if>> <<if $AMCTraits.feetskill is undefined>> <<set $AMCTraits.feetskill to 1>> <</if>> <<if $AMCTraits.milk is undefined>> <<set $AMCTraits.milk to 1>> <</if>> <<if $AMCTraits.semen is undefined>> <<set $AMCTraits.semen to 1>> <</if>> <<set $beautymax to 10000>> <<set $willpowermax to 1000>> <<set $skulduggerymax to 1000>> <<set $dancingmax to 1000>> <<set $swimmingmax to 1000>> <<set $athleticsmax to 1000>> <<set $tendingmax to 1000>> <<set $housekeepingmax to 1000>> <<set $brawlingmax to 1000>> <<set $seductionskillmax to 1000>> <<set $oralskillmax to 1000>> <<set $chestskillmax to 1000>> <<set $handskillmax to 1000>> <<set $bottomskillmax to 1000>> <<set $penileskillmax to 1000>> <<set $vaginalskillmax to 1000>> <<set $analskillmax to 1000>> <<set $thighskillmax to 1000>> <<set $feetskillmax to 1000>> <<if $AMCTraits.oral>> <<set $AMCTraits.oralskill to $AMCTraits.oral>> <<unset $AMCTraits.oral>> <</if>> <<if $AMCTraits.chest>> <<set $AMCTraits.chestskill to $AMCTraits.chest>> <<unset $AMCTraits.chest>> <</if>> <<if $AMCTraits.hands>> <<set $AMCTraits.handskill to $AMCTraits.hands>> <<unset $AMCTraits.hands>> <</if>> <<if $AMCTraits.buttocks>> <<set $AMCTraits.bottomskill to $AMCTraits.buttocks>> <<unset $AMCTraits.buttocks>> <</if>> <<if $AMCTraits.penile>> <<set $AMCTraits.penileskill to $AMCTraits.penile>> <<unset $AMCTraits.penile>> <</if>> <<if $AMCTraits.vaginal>> <<set $AMCTraits.vaginalskill to $AMCTraits.vaginal>> <<unset $AMCTraits.vaginal>> <</if>> <<if $AMCTraits.anal>> <<set $AMCTraits.analskill to $AMCTraits.anal>> <<unset $AMCTraits.anal>> <</if>> <<if $AMCTraits.thighs>> <<set $AMCTraits.thighskill to $AMCTraits.thighs>> <<unset $AMCTraits.thighs>> <</if>> <<if $AMCTraits.feet>> <<set $AMCTraits.feetskill to $AMCTraits.feet>> <<unset $AMCTraits.feet>> <</if>> <<if $AMCTraits.seduction>> <<set $AMCTraits.seductionskill to $AMCTraits.seduction>> <<unset $AMCTraits.seduction>> <</if>> <<if $AMCTraits.sexFame is undefined>> <<set $AMCTraits.sexFame to 1>> <</if>> <<if $AMCTraits.prostitutionFame is undefined>> <<set $AMCTraits.prostitutionFame to 1>> <</if>> <<if $AMCTraits.rapeFame is undefined>> <<set $AMCTraits.rapeFame to 1>> <</if>> <<if $AMCTraits.bestialityFame is undefined>> <<set $AMCTraits.bestialityFame to 1>> <</if>> <<if $AMCTraits.exhibitionismFame is undefined>> <<set $AMCTraits.exhibitionismFame to 1>> <</if>> <<if $AMCTraits.pregnancyFame is undefined>> <<set $AMCTraits.pregnancyFame to 1>> <</if>> <<if $AMCTraits.impregFame is undefined>> <<set $AMCTraits.impregFame to 1>> <</if>> <<if $AMCTraits.scrapFame is undefined>> <<set $AMCTraits.scrapFame to 1>> <</if>> <<if $AMCTraits.goodFame is undefined>> <<set $AMCTraits.goodFame to 1>> <</if>> <<if $AMCTraits.businessFame is undefined>> <<set $AMCTraits.businessFame to 1>> <</if>> <<if $AMCTraits.socialFame is undefined>> <<set $AMCTraits.socialFame to 1>> <</if>> <<if $AMCTraits.modelFame is undefined>> <<set $AMCTraits.modelFame to 1>> <</if>> <<if $AMCTraits.footwork is undefined>> <<set $AMCTraits.footwork to 1>> <</if>> <<if $AMCTraits.striking is undefined>> <<set $AMCTraits.striking to 1>> <</if>> <<if $AMCTraits.kicking is undefined>> <<set $AMCTraits.kicking to 1>> <</if>> <</widget>> <<widget "modWardrobeUpdate">> <<if $passage isnot "Start">> <<set _furniture to Furniture.get("wardrobe")>> <<if _furniture.type.includes("organiser")>> <<set $wardrobe.space to 40 * $wardrobeMult>> <<elseif _furniture.type.includes("spacious")>> <<set $wardrobe.space to 30 * $wardrobeMult>> <<else>> <<set $wardrobe.space to 20 * $wardrobeMult>> <</if>> <</if>> <<set $wardrobes.edensCabin.space to 10 * $wardrobeMult>> <<set $wardrobes.alexFarm.space to 40 * $wardrobeMult>> <<set $wardrobes.stripClub.space to 10 * $wardrobeMult>> <<set $wardrobes.brothel.space to 10 * $wardrobeMult>> <<set $wardrobes.temple.space to 20 * $wardrobeMult>> <<set $wardrobes.pirate.space to 5 * $wardrobeMult>> <<set $wardrobes.officeBuilding.space to 5 * $wardrobeMult>> <<set $wardrobes.birdTower.space to 15 * $wardrobeMult>> <</widget>> <<widget "modParasiteCapUpdate">> <<if $container>> <<if $container.home.upgrades.capacity is 0>> <<set $container.home.maxCount to 1 * $parasiteCapMult>> <<elseif $container.home.upgrades.capacity is 1>> <<set $container.home.maxCount to 2 * $parasiteCapMult>> <<elseif $container.home.upgrades.capacity is 2>> <<set $container.home.maxCount to 3 * $parasiteCapMult>> <<elseif $container.home.upgrades.capacity is 3>> <<set $container.home.maxCount to 4 * $parasiteCapMult>> <<elseif $container.home.upgrades.capacity is 4>> <<set $container.home.maxCount to 5 * $parasiteCapMult>> <</if>> <<if $container.farm.upgrades.capacity is 0>> <<set $container.farm.maxCount to 5 * $parasiteCapMult>> <<elseif $container.farm.upgrades.capacity is 1>> <<set $container.farm.maxCount to 7 * $parasiteCapMult>> <<elseif $container.farm.upgrades.capacity is 2>> <<set $container.farm.maxCount to 9 * $parasiteCapMult>> <<elseif $container.farm.upgrades.capacity is 3>> <<set $container.farm.maxCount to 11 * $parasiteCapMult>> <<elseif $container.farm.upgrades.capacity is 4>> <<set $container.farm.maxCount to 14 * $parasiteCapMult>> <<elseif $container.farm.upgrades.capacity is 5>> <<set $container.farm.maxCount to 17 * $parasiteCapMult>> <<elseif $container.farm.upgrades.capacity is 6>> <<set $container.farm.maxCount to 20 * $parasiteCapMult>> <</if>> <</if>> <!--DecoMod Stuff --> <<if $foreground_image1 is undefined>> <<set $foreground_image1 to "none">> <</if>> <<if $background_image1 is undefined>> <<set $background_image1 to "none">> <</if>> <<if $foreground_image2 is undefined>> <<set $foreground_image2 to "none">> <</if>> <<if $background_image2 is undefined>> <<set $background_image2 to "none">> <</if>> <</widget>> <<widget "modNewNamedNPCs">> <<if $dolpNpcListVersion is undefined>> <<set _newNNPCs to { "riley": {nam : "Riley", title: "MMA coach", insecurity: "skill", adult: 1} }>> <<for _npc range Object.keys(_newNNPCs)>> <<if !$NPCNameList.includes(_newNNPCs[_npc].nam)>> <<newNamedNpc _newNNPCs[_npc]>> <<set _npcsAdded to true>> <</if>> <</for>> <<if _npcsAdded is true>> <<generateNPCNameHairAndEyeColors>> <</if>> <<set $dolpNpcListVersion to 1>> <</if>> <<if $NPCName[31].description is "Riley" and $NPCName[31].title is undefined>> <<set $NPCName[31].title to "MMA coach">> <<set $NPCName[31].insecurity to "skill">> <</if>> <</widget>>
<div id="gameVersionDisplay"> <<if $options.passageCount is "total">> Passage Count: <<print $passageCount>> | <</if>> <<if $options.passageCount is "changes">> Passage Changes Count: <<print $passageChangesCount>> | <</if>> <<if $options.playtime>> Play Time: <<print msToTime(($saveDetails.playTime ? $saveDetails.playTime : 0) + ($saveDetails.loadTime ? new Date() - $saveDetails.loadTime : 0))>> | <</if>> <<print StartConfig.version>><<if StartConfig.sneaky>> SNEAKY<</if>> </div> <div id="gameVersionDisplay2"><<print StartConfig.version.slice(1)>></div> <<if $passage isnot "Start">> <div id="feat"></div> <div id="exportWarning" @class="'no-numberify ' + (Time.days gte $saveDetails.exported.days + $saveDetails.exported.frequency ? '':'hidden')"> <span class="red">You haven't exported your save in a while</span> | <<if !Browser.isMobile.any()>> <<link "Export">> <<run Save.export("degrees-of-lewdity")>> <</link>> | <</if>> <<link "Help me export">> <<overlayReplace "export">> <</link>> | <<link "Ignore for now">><<set $saveDetails.exported.days to Math.floor(Time.days - ($saveDetails.exported.frequency * 0.5))>><<addclass #exportWarning "hidden">><</link>> </div> <</if>> <div id="customOverlayContainer" class="customOverlayContainer no-numberify hidden" onclick="closeOverlay()"> <div id="customOverlay" @class="'customOverlay hidden' + ($options.overlayFontSize ? ' fontSize' + $options.overlayFontSize : '') + ($options.overlayLineHeight ? ' lineHeight' + $options.overlayLineHeight.toString().replace('.','') : '')" onclick="event.stopPropagation()"> <div id="customOverlayTitle"></div> <div id="customOverlayContent"></div> </div> </div> <<if $debug is 1>> <div id="debugOverlay" class="debugOverlay"></div> <</if>> <<if $combat is 1>> <<printCombatMenu>> <</if>> <<if !Story.has($passage)>> <br> Please report this, and either reload a previous save or take the emergency exit at the bottom of the page to the last safe location you were in. <<if State.history.length gt 1>> Alternatively, return to the previous passage using the history depth function<<if !Config.history.controls>> that can be enabled in the options<</if>>. <</if>> <br> <<set _exit to $safePassage ? $safePassage : "Bedroom">> <span id="next"><<link [[Back to safety|_exit]]>><<endcombat>><<clotheson>><</link>></span> <<elseif !_link and !tags().includes("exitCheckBypass")>> /* Does not trigger if the scene has a red link. Those will probably be reported anyway */ <br> <<error { message : `The passage ${$passage} has no usable links.`, source : `Previous passage: ${$passagePrev} | phase: ${$phase} | rng: ${$rng}.` }>> <br><br> Please report this, <<if $cheatdisable is "f">> unless you got here through the use of a cheat, <</if>> and either reload a previous save or take the emergency exit at the bottom of the page to the last safe location you were in. <<if State.history.length gt 1>> Alternatively, return to the previous passage using the history depth function<<if !Config.history.controls>> that can be enabled in the options<</if>>. <</if>> <br><br><br> <<set _exit to $safePassage ? $safePassage : "Bedroom">> <span id="next"><<link [[Back to safety|_exit]]>><<endcombat>><<clotheson>><</link>></span> <</if>> <!-- handle autosaves in the footer, so the description getter don't have to guess what happened in the passage --> <<if _autosavehere and !_preventUpdate and !$options.autosaveDisabled>> <<if idb.active>> <<run idb.saveState(0)>> <<else>> <<run Save.autosave.save(null, {"saveId":$saveId, "saveName":$saveName})>> <<run setSaveDetail("autosave",{"saveId":$saveId,"saveName":$saveName},Story.get($passage).description())>> <</if>> <</if>> <<if $options.debugdisable is "f">> <<set _normalised to scanNaNs(V)>> <<if _normalised neq null>> <<error { message: "Corrupted variables have been detected.", source: "The following variables have invalid values:\n" + JSON.stringify(_normalised) + "\n\nCurrent passage is: '" + $passage + "'\nPlease report this to the DoL Discord #bug-reports.", exportable: false, }>> <br> Please expand the above box (click the dropdown arrow on the left) before taking a screenshot. <br><br> <div id="nanClear"> If you are advised to do so by developers, you can click below to reset the corrupted variables. <br> <<link "Reset Corrupted Variables">> <<silently>><<run nukeNaNs()>><</silently>> <<replace "#nanClear" t8n>><span class="green">The variables have been cleared.</span><</replace>> <</link>> <br> <span class="red">WARNING: This will set all corrupted variables to 0. This may have unintended consequences to your game state. Proeceed with caution!</span> </div> <br><br> <</if>> <</if>>
<<if !$cheatReload>> <<set $passagePrev to $passage ? $passage : "none">> <</if>> <<set $passage to $passageOverride ? $passageOverride : passage()>> <<set $tags to tags()>> <<set l10nStrings.errorTitle = StartConfig.version + " Error" + ($passage ? ` (:: ${$passage})` : "")>> <<if !["Start", "Start2", "Clothes Testing", "Renderer Test Page", "Tips"].includes($passage) && !$bypassHeader>> <<doVersionCheck>> <<if !$passage.includes(" Settings") and !$cheatReload>> <<if $passagePrev isnot $passage>> <<set $passageChangesCount to ($passageChangesCount || 0) + 1>> <</if>> <<set $passageCount to ($passageCount || 0) + 1>> <</if>> <</if>> <<unset $passageOverride>> <<unset $bypassHeader>> <<unset $cheatReload>>
<<widget "doVersionCheck">> /* Run stuff on every save load */ <<if onLoadUpdateCheck>> <<set $saveVersion to ($saveVersions ? $saveVersions.last() : "ancient")>> /*update save version */ <</if>> /* Run stuff on every page refresh, save load, or version mismatch */ <<if versionUpdateCheck or onLoadUpdateCheck or !$saveVersions or $saveVersions.last() isnot StartConfig.version>> <<set versionUpdateCheck to false>> <<set onLoadUpdateCheck to false>> /* convert game version to numeric value for use in <<backComp>> */ <<set _version to (V.saveVersions?.last()?.match(/\d+/g) || [0]).map(Number).reduce((acc, num, index) => acc + num * Math.pow(100, 3 - index), 0)>> /* preserve prng so updater code won't alter which events are picked, don't forget to restore it it needs to use $ instead of _ because pre-weather save update code runs Engine.play() and that destroys temp variables and probably causes some other bad effects. honestly, version updater needs a major update itself. */ <<set $prngpull to State.prng.pull>> <<backComp>> <<modupdate>> <<updatehistorycontrols>> <<set _preventUpdate to true>> /*prevent rewriting autosaves */ <<set _saveLoaded to true>> <<set Time.set()>> <<setFont>> <<run zoom($options.zoom)>> <<run syncFavourites()>> <<run initCustomLenses()>> /* push custom eyelenses inside setup.colours.eyes; on every load/refresh it needs to be done. */ <<run syncDebugAddedEvents()>> <<run toggleConfirmDialogUponTabClose()>> /* enable/disable confirm dialog when user tries to close browser tab. based on V.options.confirmDialogUponTabClose */ <<set State.prng.pull to $prngpull>> /* restore prng */ <<unset $prngpull>> <</if>> /* Variables that you need to check on every passage */ <<set $link_table to []>> <<set $map.hideLinksCheck to []>> /* Determine if the player is in a safe passage. Used to catch softlocks */ <<if setup.majorAreas.includes($passage)>> <<set $safePassage to $passage>> <</if>> <</widget>>
/* This passage runs EVERY time the page is opened or refreshed, not just when a new game is started */ /* This passage ALWAYS runs BEFORE story variables are loaded, meaning EVERY variable is undefined. Checking if they are undefined WILL NOT WORK. */ /* You should ONLY use this passage to define setup variables, NOT $variables. */ <<variablesStatic>>
/* The following is only run when the widget is called, which is only on new game start. Add to this if you want something to be run when you start a new game. */ <<widget "gameStartOnly">> <<set _globalThemeDefaults to JSON.parse(localStorage.getItem("dolDefaultThemeSettings"))>> <<set _globalGeneralDefaults to JSON.parse(localStorage.getItem("dolDefaultGeneralSettings"))>> <<if !_globalThemeDefaults>> <<set _globalThemeDefaults to {}>> <</if>> <<if !_globalGeneralDefaults>> <<set _globalGeneralDefaults to {}>> <</if>> <<set $options to { neverNudeMenus: _globalGeneralDefaults.neverNudeMenus or false, autosaveDisabled: false, showCaptionText: true, clothingCaption: true, sidebarStats: "all", sidebarTime: "top", combatControls: "radio", targetYourself: false, scrollRemember: false, mapMovement: _globalGeneralDefaults.mapMovement or true, mapLegacy: _globalGeneralDefaults.mapLegacy or false, mapMarkers: _globalGeneralDefaults.mapMarkers or false, mapTop: _globalGeneralDefaults.mapTop or false, images: 1, combatImages: 1, bodywritingImages: true, silhouetteEnabled: true, tanImgEnabled: true, tanLines: true, sidebarAnimations: true, locationAnimations: true, blinkingEnabled: true, combatAnimations: true, textAnimations: true, halfClosedEnabled: false, characterLightEnabled: true, lightSpotlight: 0.2, lightGradient: 0.1, lightGlow: 0.1, lightFlat: 0, lightCombat: 0.2, lightTFColor: 0.2, maxStates: 5, historyControls: false, numpad: false, useNarrowMarket: false, skipStatisticsConfirmation: false, showDebugRenderer: false, pepperSprayDisplay: "sprays", condomsDisplay: "standard", closeButtonMobile: _globalGeneralDefaults.closeButtonMobile or false, zoom: 100, numberify_enabled: _globalGeneralDefaults.numberify_enabled or 1, timestyle: _globalGeneralDefaults.timestyle or "military", tipdisable: "f", passageCount: _globalGeneralDefaults.passageCount or "disabled", playtime: _globalGeneralDefaults.playtime or false, traitOverlayFormat: "table", debugdisable: "t", theme: _globalThemeDefaults.theme, dateFormat: _globalGeneralDefaults.dateFormat or "en-GB", passageMaxWidth: _globalThemeDefaults.passageMaxWidth, passageLineHeight: _globalThemeDefaults.passageLineHeight, overlayLineHeight: _globalThemeDefaults.overlayLineHeight, sidebarLineHeight: _globalThemeDefaults.sidebarLineHeight, passageFontSize: _globalThemeDefaults.passageFontSize, overlayFontSize: _globalThemeDefaults.overlayFontSize, sidebarFontSize: _globalThemeDefaults.sidebarFontSize, font: _globalThemeDefaults.font, weatherUpdate: true, reflections: true, fahrenheit: _globalGeneralDefaults.fahrenheit or false, }>> <<setFont>> <<if StartConfig.enableImages is false>> <<set $options.images to 0>> <<set $options.combatImages to 0>> <</if>> <<if StartConfig.debug is true>> <<set $debug to 1>> <<else>> <<set $debug to 0>> <</if>> <<if $objectVersion is undefined>> <<set $objectVersion to { "updateClothes": 52, "feats": 1, "wardrobes": 2, "customColors": 4, "uncomfortable": 2, "special_clothes": 5, "chastity": 3, "skinColor": 1, "prenancyObjectRepair": 2, "museumAntiques": 9, "npcClothes": 1, "animations": 1, }>> <</if>> <<set $saveVersions to [StartConfig.version]>> <<set $numberify_enabled to 1>> <<set $options.showDebugRenderer to !!StartConfig.debug>> <<set $lastWardrobeSlot to "head">> <<set $gamemode to "normal">> <<set $intro to 1>> <<set $tutorial to 0>> <<set $initnpccompatibility to 1>> <<set $clothing_update to 1>> <<set $parasite_update to 1>> <<set $npcNamedVersion to 2>> <<set $player = { gender: 0, sex: 0, appearance: 0, penis: 0, vagina: 0, penissize: 0, breastsize: 0, bottomsize: 0, ballssize: 0, pronoun: 0, pronouns: { he: 0, his: 0 }, gender_body: 0, condom: false, virginity: { anal: true, oral: true, penile: true, vaginal: true, temple: false, handholding: true, kiss: true }, bodyTemperature: 37, skin: { color: "light", layers: [], sunscreen: { usesLeft: 0, } } }>> <<npcList>> <<npcNamed>> <<set $controlmax to 1000>> <<set $control to 1000>> <<clothinginit>> <<parasiteinit>> <<init_names>> <<set $money to 500>> <<set $moneyStats to { cheats: { earned: 0, earnedCount: 1 }, startingMoney: { earned: 500, earnedCount: 1 }, }>> <<set $timeStats to {}>> <<set $badEndStats to []>> <<set $awareness to 0>> <<set $awarelevel to 0>> <<set $purity to 1000>> <<set $hairlength to 200>> <<set $fringelength to 200>> <<set $hairtype to "default">> <<set $fringetype to "default">> <<set $trauma to 0>> <<set $traumamax to 5000>> <<set $stressmax to 10000>> <<set $arousalmax to 10000>> <<set $physique to 3500>> <<set $physiquemax to 20000>> <<set $willpower to 200>> <<set $willpowermax to 1000>> <<set $beauty to 100>> <<set $beautymax to 10000>> <<set $birthmonth to "september">> <<set $birthday to 3>> <<set $npc to []>> <<set $npcnum to []>> <<set $npcrow to []>> <<set $dancestudioanger to 0>> <<set $dancelocation to 0>> <<set $alarm to 0>> <<set $finish to 0>> <<set $id to 0>> <<set $forest to 0>> <<set $forestmod to 1>> <<set $tipmod to 1>> /*<<set $worn.genitals.anal_shield to 0>>*/ <<set $blackmoney to 0>> <<set $crime to {}>> <<for _cr range Object.keys(setup.crimeNames)>> /* look in variables-static for the list of crime categories */ <<set $crime[_cr] to {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}>> <</for>> <<set $crime.events to {}>> <<set $ironmanmode to false>> <<set $worn.neck.collaredpolice to 0>> <<set $bullytimer to 50>> <<set $bullytimeroutside to 0>> <<set $bullyevent to 0>> <<set $bullyeventoutside to 0>> <<set $masturbationorgasm to 0>> <<set $masturbationRuinedOrgasm to 0>> <<set $ruinedOrgasmStat to 0>> <<set $malechance to 50>> <<set $maleChanceMale to 50>> <<set $maleChanceFemale to 50>> <<set $maleChanceSplit to "f">> <<set $malevictimchance to 50>> <<set $homochance to 4>> <<set $beastmalechance to 80>> <<set $beastMaleChanceMale to 80>> <<set $beastMaleChanceFemale to 80>> <<set $beastMaleChanceSplit to "f">> <<set $monsterhallucinations to "t">> <<set $monsterchance to 50>> <<set $deviancy to 0>> <<set $baileydefeated to 0>> <<set $baileydefeatedlewd to 0>> <<set $baileydefeatedchain to 0>> <<set $baileyRefusedToPay to 0>> /* Dupicate stats are intentional to use as a potential gameplay mode */ <<set $baileyRefusedToPayTotal to 0>> <<set $baileyRefusedToPayTotalStat to 0>> <<set $soldCount to 0>> <<set $robinmoney to 300>> <<set $alluremod to 1>> <<set $speechcycle to 0>> <<set $npcspeechcycle to 0>> <<set $museuminterest to 0>> <<set $orphan_hope to 0>> <<set $orphan_reb to 0>> <<set $masochism to 0>> <<set $masochism_level to 0>> <<set $sadism to 0>> <<set $sadism_level to 0>> <<set $lessonmissedtext to 0>> <<set $lessonmissed to 0>> <<set $home_event_timer to 3>> <<set $home_event_count to 0>> <<set $home_event_ward_timer to 3>> <<set $home_event_ward_count to 0>> <<set $home_gone to 0>> <<resetEarSlime>> <<set $lactating to 0>> <<set $lactation_pressure to 0>> <<set $milk_amount to 30>> <<set $milk_volume to 30>> <<set $milk_max to 3000>> <<set $milk_produced_stat to 0>> <<set $semen_max to 3000>> <<set $semen_produced_stat to 0>> <<set $lube_produced_stat to 0>> <<set $masturbation_semen to 0>> <<set $masturbation_milk to 0>> <<set $bunstat to 0>> <<set $creamstat to 0>> <<set $chef_sus to 0>> <<set $fluid_forced_stat to 0>> <<set $smuggler_location to "sewer">> <<set $smuggler_timer to 0>> <<set $smuggler_stolen_stat to 0>> <<set $pub_task_stat to 0>> <<set $player.gender_body to "a">> <<set $player.bodyshape to "classic">> <<set $closinghour to 21>> <<set $openinghours to 1>> <<set $dontHide to false>> <<set $swimnudecounter to 0>> <<set $swimall to 0>> <<set $garden_flowers_intro to 1>> <<set $eden_plot_intro to 1>> <<set $wolf_plot_intro to 1>> <<set $asylum_plot_intro to 1>> <<set $plots to {}>> <<set $tendingvars to {}>> <<set $tending_yield_factor to 5>> <<set $plants_known to []>> <<set $plants to {}>> <<set $stall_rejected to 0>> <<set $produce_sold to 0>> <<set $stat_shoot to 0>> <<set $stat_lurkers_captured to 0>> <<set $stat_aphrodisiacs_sold to 0>> <<set $stat_panties_stolen to 0>> <<set $farm_shift to 0>> <<set $cattle_milked to 0>> <<set $masseur_stat to 0>> <<set $machine_stat to 0>> <<set $wild_plant_stat to 0>> <<set $bird to {}>> <<set $moonstate to 0>> <<set $blackjack_played to 0>> <<set $blackjack_won to 0>> <<set $blackjack_streak to 0>> <<set $blackjack_streak_high to 0>> <<set $cardcover = { style: 0, colour: 'red' }>> <<set $hoodDown to 0>> <<set $prof to {}>> <<set $prof.spray to 0>> <<set $stat_police to {}>> <<set $stat_police.pillory to 0>> <<set $stat_police.community to 0>> <<set $stat_police.prison to 0>> <<set $child_played to []>> <<set $speech_attitude to "neutral">> <<set $orgasmtrait to 0>> <<set $ejactrait to 0>> <<set $molesttrait to 0>> <<set $rapetrait to 0>> <<set $bestialitytrait to 0>> <<set $tentacletrait to 0>> <<set $voretrait to 0>> <<set $milkdranktrait to 0>> <<set $choketrait to 0>> <<set $physicalTransform to 0>> <<set $specialTransform to 0>> <<set $angelbuild to 0>> <<set $angel to 0>> <<set $angelforgive to 0>> <<set $angelBanish to 0>> <<set $angelBanishMax to 0>> <<set $demonbuild to 0>> <<set $demon to 0>> <<set $demonabsorb to 0>> <<set $fallenangel to 0>> <<set $fallenbuild to 0>> <<set $catbuild to 0>> <<set $cat to 0>> <<set $heterochromia to 0>> <<set $cowbuild to 0>> <<set $cow to 0>> <<set $bearbuild to 0>> <<set $bear to 0>> <<set $birdbuild to 0>> <<set $harpy to 0>> <<set $foxbuild to 0>> <<set $fox to 0>> <<set $stray_happiness to 50>> <<set $bunnybuild to 0>> <<set $bunny to 0>> <<set $seductionskill to 0>> <<set $oralskill to 0>> <<set $vaginalskill to 0>> <<set $analskill to 0>> <<set $handskill to 0>> <<set $feetskill to 0>> <<set $bottomskill to 0>> <<set $thighskill to 0>> <<set $chestskill to 0>> <<set $penileskill to 0>> <<set $skulduggery to 0>> <<set $skulduggeryday to 0>> <<set $danceskill to 0>> <<set $swimmingskill to 0>> <<set $athletics to 0>> <<set $tending to 0>> <<set $housekeeping to 0>> <<set $fishing to 0>> <<set $hygiene to 0>> <<set $hunger to 0>> <<set $thirst to 0>> <<set $tiredness to 0>> <<set $arousal to 0>> <<set $arousalmasochism to 0>> <<set $stress to 0>> <<set $pain to 0>> <<set $combat to 0>> <<set $location to "banner">> <<set $breastsizeold to 0>> <<set $breastsizemax to 12>> <<set $breastsizemin to 0>> <<set $mouthsensitivity to 1>> <<set $breastsensitivity to 1>> <<set $bottomsensitivity to 1>> <<set $genitalsensitivity to 1>> <<set $bottomsizeold to 0>> <<set $bottomsizemax to 8>> <<set $bottomsizemin to 0>> <<set $bottomgrowthtimer to 350>> <<set $workouts to 0>> <<set $player.penissize to 2>> <<set $penissizemax to 4>> <<set $penissizemin to -2>> <<set $penisgrowthtimer to 700>> <<set $ballssize to 2>> <<set $ballssizemax to 4>> <<set $ballssizemin to 0>> <<set $ballsgrowthtimer to 700>> <<set $physiqueuse to 0>> <<set $rapeavoid to 1>> <<set $sexavoid to 1>> <<set $molestavoid to 1>> <<set $rescued to 0>> <<set $baileyhospital to 0>> <<set $squidcount to 0>> <<set $no_underwear to 0>> <<set $upperwet to 0>> <<set $upperwetstage to 0>> <<set $lowerwet to 0>> <<set $lowerwetstage to 0>> <<set $underlowerwet to 0>> <<set $underlowerwetstage to 0>> <<set $underupperwet to 0>> <<set $underupperwetstage to 0>> <<set $overlowerwet to 0>> <<set $overlowerwetstage to 0>> <<set $overupperwet to 0>> <<set $overupperwetstage to 0>> <<set $genderknown to ["Robin", "Bailey"]>> <<set $vaginause to 0>> <<set $anususe to 0>> <<set $mouthuse to 0>> <<set $leftarm to 0>> <<set $rightarm to 0>> <<set $chestuse to 0>> <<set $penisuse to 0>> <<set $thighuse to 0>> <<set $bottomuse to 0>> <<set $feetuse to 0>> <<set $vaginastate to 0>> <<set $anusstate to 0>> <<set $mouthstate to 0>> <<set $penisstate to 0>> <<set $cheststate to 0>> <<set $head to 0>> <<set $front to 0>> <<set $back to 0>> <<set $chest to 0>> <<set $carryblock to 0>> <<set $beastgenderoverride to 0>> <<set $dgchance to 0>> <<set $cbchance to 0>> <<set $straponchance to 0>> <<set $breast_mod to 0>> <<set $penis_mod to 0>> <<set $facebruise to 0>> <<set $chestbruise to 0>> <<set $tummybruise to 0>> <<set $vaginabruise to 0>> <<set $penisbruise to 0>> <<set $anusbruise to 0>> <<set $bottombruise to 0>> <<set $thighbruise to 0>> <<set $leftarmbruise to 0>> <<set $rightarmbruise to 0>> <<set $neckbruise to 0>> <<set $rapestat to 0>> <<set $beastrapestat to 0>> <<set $tentaclerapestat to 0>> <<set $moleststat to 0>> <<set $vaginalstat to 0>> <<set $vaginalejacstat to 0>> <<set $analstat to 0>> <<set $analejacstat to 0>> <<set $oralstat to 0>> <<set $oralejacstat to 0>> <<set $cunnilingusstat to 0>> <<set $cunnilingusejacstat to 0>> <<set $semenswallowedstat to 0>> <<set $animalsemenswallowedstat to 0>> <<set $handstat to 0>> <<set $handejacstat to 0>> <<set $feetstat to 0>> <<set $feetejacstat to 0>> <<set $thighstat to 0>> <<set $thighejacstat to 0>> <<set $bottomstat to 0>> <<set $bottomejacstat to 0>> <<set $penilestat to 0>> <<set $penileejacstat to 0>> <<set $straponstat to 0>> <<set $clothesstripstat to 0>> <<set $clothesruinstat to 0>> <<set $orgasmstat to 0>> <<set $vaginalentranceejacstat to 0>> <<set $faceejacstat to 0>> <<set $cheststat to 0>> <<set $chestejacstat to 0>> <<set $hairejacstat to 0>> <<set $tummyejacstat to 0>> <<set $neckejacstat to 0>> <<set $ejacstat to 0>> <<set $unsafeSexTimeStat to {}>> <<set $hitstat to 0>> <<set $attackstat to 0>> <<set $prostitutionstat to 0>> <<set $forcedprostitutionstat to 0>> <<set $tablesservedstat to 0>> <<set $parasitestat to 0>> <<set $passoutstat to 0>> <<set $masturbationstat to 0>> <<set $masturbationorgasmstat to 0>> <<set $secondsSpentMasturbating to 0>> <<set $milk_drank_stat to 0>> <<set $nectar_drank_stat to 0>> <<set $nectar_addiction to 0>> <<set $nectar_timer to 0>> <<set $gloryholestat to 0>> <<set $parasite_known to []>> <<set $chokeorgasm to 0>> <<set $analdoublestat to 0>> <<set $vaginaldoublestat to 0>> <<set $sextoystat to 0>> <<set $urinestat to 0>> <<set $hypnosis_traits to {}>> <<set $town_projects to {}>> <<set $danceaction to 0>> <<set $danceactiondefault to 0>> <<set $dancestat to 0>> <<set $dancing to 0>> <<set $pullaway to 0>> <<set $novaginal to 0>> <<set $noanal to 0>> <<set $nopenile to 0>> <<set $nochoke to 0>> <<set $vaginalchastity to 0>> <<set $analchastity to 0>> <<set $penilechastity to 0>> <<set $drinksservedstat to 0>> <<if $rng gte 95>> <<set $brothel_basement_price to 3000>> <<elseif $rng gte 85>> <<set $brothel_basement_price to 2000>> <<elseif $rng gte 45>> <<set $brothel_basement_price to 1000>> <<else>> <<set $brothel_basement_price to 500>> <</if>> <<set $brothelshowdata to { counts:{ agreed:0, done:0 }, type:"none", intro:0, done:false, missed:false }>> <<set $speechorgasmweakcumcount to 0>> <<set $speechorgasmnocumcount to 0>> <<set $speechorgasmcount to 0>> <<set $speechorgasmrepeat to 0>> <<set $underwatertime to 0>> <<set $underwater to 0>> <<set $walltype to "wall">> <<set $position to 0>> <<set $prop to []>> <<set $submissive to 1000>> <<set $assertive to 0>> <<set $assertiveaction to "trauma">> <<set $uncomfortable to { underwear: true, nude: true, prostituting: true, lewd: true, hypnosis: true }>> <<set $rescue to 0>> <<set $drugged to 0>> <<set $drunk to 0>> <<set $exposed to 0>> <<set $traumagain to 0>> <<set $stressgain to 0>> <<set $traumasaved to 0>> <<set $stresssaved to 0>> <<set $phase to 0>> <<set $phase2 to 0>> <<set $orgasmdown to 0>> <<set $noise to 0>> <<set $enemywounded to 0>> <<set $enemyejaculated to 0>> <<set $enemyno to 0>> <<set $enemynomax to 0>> <<set $enemyanger to 0>> <<set $enemytrust to 0>> <<set $semenpuddle to 0>> <<set $eventskip to 0>> <<set $menu to 0>> <<set $consensual to 0>> <<set $attention to 0>> <<set $orgasmcount to 0>> <<set $leftboundcarry to 0>> <<set $rightboundcarry to 0>> <<set $orgasmcurrent to 0>> <<set $hospitalintro to 0>> <<set $traumafocus to 0>> <<set $pubwhore to 0>> <<set $policemolestation to 0>> <<set $npclovehigh to 10>> <<set $npclovehighsu to 30>> /* unused */ <<set $npclovelow to -10>> <<set $npclovelowsu to -30>> /* unused */ <<set $npcdomhigh to 10>> <<set $npcdomlow to -10>> <<set $schoolevent to 0>> <<set $schooleventtimer to 10>> <<set $schoolrep to {}>> <<set $schoolrep.crossdress to 0>> <<set $schoolrep.herm to 0>> <<set $flashbackhome to 0>> <<set $flashbacktown to 0>> <<set $flashbackbeach to 0>> <<set $flashbackunderground to 0>> <<set $flashbackschool to 0>> <<set $panicviolence to 0>> <<set $panicparalysis to 0>> <<set $colouraction to 0>> <<set $hungerenabled to 0>> /* unused */ <<set $thirstenabled to 0>> /* unused */ <<set $hygieneenabled to 0>> /* unused */ <<set $exhibitionism to 0>> <<set $promiscuity to 0>> <<set $diagnosis to 0>> <<set $psych to 0>> <<set $asylum to 0>> <<set $audience to 0>> <<set $audienceexcitement to 0>> <<set $audiencearousal to 0>> <<set $audiencemod to 1>> <<set $venuemod to 1>> <<set $danceevent to 0>> <<set $dancephysique to 0>> <<set $hypnosis to 0>> <<set $hypnotised to 0>> <<set $pillsconsumed to 0>> <<set $medicated to 0>> <<set $trance to 0>> <<set $harperexam to 0>> <<set $schoolLessonsMissed = { science: 0, maths: 0, english: 0, history: 0, swimming: 0, housekeeping: 0 }>> <<set $science_star to 0>> <<set $maths_star to 0>> <<set $english_star to 0>> <<set $history_star to 0>> <<set $fame to { exhibitionism: 0, prostitution: 0, bestiality: 0, sex: 0, rape: 0, good: 0, business: 0, scrap: 0, pimp: 0, social: 0, model: 0, pregnancy: 0, impreg: 0, }>> <<set $internet to { photos: [], videos: [] }>> <<set $park_fame to 0>> <<set $park_run_seen_by to []>> <<set $spray to 0>> <<set $spraymax to 0>> <<set $spraystat to 0>> <<set $infinitespray to 0>> <<set $mathstrait to 0>> <<set $englishtrait to 0>> <<set $sciencetrait to 0>> <<set $historytrait to 0>> <<set $wolfgirl to 0>> <<set $wolfbuild to 0>> <<set $swarm to { "type":0, "name":0, "move":0, "spill":0, "steady":0, "amount":{}, "data":{} }>> <!-- <<set $claws to 1>> --> <<set $water to 0>> <<set $foresthunt to 0>> <<set $edenforesthunt to 0>> <<set $blackwolfhunt to 0>> <<set $wolfpacktrust to 0>> <<set $wolfpackfear to 0>> <<set $sea to 0>> <<set $penilechastityparasite to 0>> <<set $vaginalchastityparasite to 0>> <<set $analchastityparasite to 0>> <<removeparasite penis>> <<removeparasite clit>> <<removeparasite nipples>> <<set $vorestrength to 0>> <<set $vorestruggle to 0>> <<set $voretentacles to 0>> <<set $vorestage to 0>> <<set $vorecreature to 0>> <<set $swallowed to 0>> <<set $swallowedstat to 0>> <<set $tentacles to { 0: null, 1: null, 2: null, 3: null, 4: null, 5: null, 6: null, 7: null, 8: null, 9: null, 10: null, 11: null, 12: null, 13: null, 14: null, 15: null, 16: null, 17: null, 18: null, 19: null, 20: null, "active": 0, "max": 0 }>> <<set $leftleg to 0>> <<set $rightleg to 0>> <<set $leftnipple to 0>> <<set $rightnipple to 0>> <<set $leftarmstate to 0>> <<set $rightarmstate to 0>> <<set $feetstate to 0>> <<set $player.bodyliquid to {}>> <<for _bodypart range setup.bodyliquid.bodyparts>> /* look in variables-static for the list of body parts */ <<set $player.bodyliquid[_bodypart] to {}>> <<set $player.bodyliquid[_bodypart]["goo"] to 0>> <<set $player.bodyliquid[_bodypart]["semen"] to 0>> <<set $player.bodyliquid[_bodypart]["nectar"] to 0>> <</for>> <<exam_difficulty>> <<set $detention to 0>> <<set $delinquency to 10>> <<set $cool to 120>> <<set $coolmax to 400>> <<set $school to 400>> <<set $maths to 100>> <<set $science to 100>> <<set $english to 100>> <<set $history to 100>> <<set $science_exam to 0>> <<set $maths_exam to 0>> <<set $english_exam to 0>> <<set $history_exam to 0>> <<set $sciencetrait to 0>> <<set $mathstrait to 0>> <<set $englishtrait to 0>> <<set $historytrait to 0>> <<set $scienceprogression to 0>> <<set $distinction_stat to 0>> <<set $audienceselector to 0>> <<set $audiencecamera to 0>> <<set $audiencecamera1 to 0>> <<set $audiencecamera2 to 0>> <<set $audiencecamera3 to 0>> <<set $audiencecamera4 to 0>> <<set $audiencecamera5 to 0>> <<set $audiencecamera6 to 0>> <<set $audiencemember to 0>> <<set $leftactioncarry to "leftcoverface">> <<set $rightactioncarry to "rightcoverface">> <<set $feetactioncarry to "rest">> <<set $mouthactioncarry to "plead">> <<set $leftactioncarrypain to "leftprotect">> <<set $rightactioncarrypain to "rightprotect">> <<set $mouthactioncarrypain to "letout">> <<set $leftactioncarryorgasm to "leftgrip">> <<set $rightactioncarryorgasm to "rightgrip">> <<set $mouthactioncarryorgasm to "letoutorgasm">> <<set $leftactioncarrydissociation to "leftcurl">> <<set $rightactioncarrydissociation to "rightcurl">> <<set $mouthactioncarrydissociation to "noises">> <<set $sleeptrouble to 0>> <<set $nightmares to 0>> <<set $anxiety to 0>> <<set $flashbacks to 0>> <<set $panicattacks to 0>> <<set $hallucinations to 0>> <<set $dissociation to 0>> <<set $scienceproject to "none">> <<set $mathsproject to "none">> <<set $englishPlay to "none">> <<set $oxygenmax to 1200>> <<set $oxygen to 1200>> <<set $suffocating to 0>> <<set $hallucinogen to 0>> <<set $antiquemoney to 0>> <<set $antiquemoneyhistory to 0>> <<set $alluretest to 0>> <<set $whitneypantiescheck to 0>> <<set $insecurity_penis_small to 0>> <<set $insecurity_penis_big to 0>> <<set $insecurity_breasts_small to 0>> <<set $insecurity_breasts_big to 0>> <<set $insecurity_pregnancy to 0>> <<set $acceptance_penis_small to 0>> <<set $acceptance_penis_big to 0>> <<set $acceptance_breasts_small to 0>> <<set $acceptance_breasts_big to 0>> <<set $acceptance_pregnancy to 0>> <<set $anus_climax to 0>> <<set $penis_climax to 0>> <<set $mouth_climax to 0>> <<set $active_enemy to 0>> <<set $sewingKit to 0>> <<bodywriting_init>> /*pillory related*/ <<set $pillory to {}>> <<if ndef $pillory.tenant>><<setup_pillory>><</if>> <<set $police_access_card to 0>> <<set $police_intro to 0>> <<set $police_hack to 0>> <<set $pub_hack_job to 0>> <<set $hacker_tasks to []>> <<set $framed to 0>> /*raid related*/ <<set $brothel_raid to 0>> <<set $brothel_raid_day to 0>> <<set $brothel_thief to 0>> /*pharmacy contact lenses related */ <<set $lenses_ordered to []>> <<set $custom_lenses_already_ordered to 0>> <<set $custom_eyecolours to []>> /*long hair related*/ <<set $o_long_and_beautiful to 0>> <<set $hy_sibling to 0>> <<set $hy_parent to 0>> <<set $long_hair_meet_day to 99999>> <<set $misbehaviour_day to 99999>> /*steal related*/ <<set $stealtarget to "">> <<set $stealdifficulty to 1>> <<set $compressSave to true>> <<set $confirmSave to false>> <<set $confirmLoad to false>> <<set $confirmDelete to true>> <<mapLocations>> <<wetness_init>> <<updateMuseumAntiques>> <<set $feats to { "locked":false, "soft":false, "allSaves":{}, "currentSave":{}, "filter":"All" }>> <<set _passageCheck to "Start">> <<updateFeats>> <<unset _passageCheck>> <<setupFeats>> <<setupTransformationPiecesObject>> <<if $facestyle is undefined>> <<set $facestyle to "default">> <</if>> <<if $facevariant is undefined>> <<set $facevariant to "default">> <</if>> <<if $makeup is undefined>> <<set $makeup = {}>> <<set $makeup.owned = {}>> <<set $makeup.owned.lipstick = []>> <<set $makeup.owned.eyeshadow = []>> <<set $makeup.owned.eyelenses = []>> <<set $makeup.owned.hairdye = []>> <<set $makeup.owned.mascara = []>> <<set $makeup.owned.blusher = []>> <<set $makeup.lipstick = 0>> <<set $makeup.eyeshadow = 0>> <<set $makeup.blusher = 0>> <<set $makeup.eyelenses = {"left":0, "right":0}>> <<set $makeup.mascara = 0>> <<set $makeup.mascara_running = 0>> <<set $makeup.pbcolour = 0>> <<set $makeup.browscolour = 0>> <<set $makeup.concealer = 0>> <</if>> <<if $makeup.owned.custom_eyelenses is undefined>> <<set $makeup.owned.custom_eyelenses to []>> /* pharmacy custom eye lenses */ <</if>> <<set $leftEyeColour to "purple">> <<set $rightEyeColour to "purple">> <<set $prepareSaveDetails to true>> <<if $saveDetails is undefined>> <<set $saveDetails to { exported:{ days: 0, frequency: 15, count: 0, dayCount: 0, }, auto:{ count: 0 }, slot:{ count: 0, dayCount: 0, }, playTime: 0, loadTime: new Date(), loadCount: 0, }>> <<unset $lastExported>> <</if>> <<if $saveDetails.exported.dayCount is undefined>> <<set $saveDetails.exported.dayCount to 0>> <<set $saveDetails.slot.dayCount to 0>> <</if>> <<set $shopDefaults to { "color":"black", "colorSet":null, "secColor":"black", "secColorSet":null, "disableReturn": false, "alwaysBackToShopButton": false, "noHelp": false, "noTraits": false, "highContrast": false, "mannequinGender": "same", "mannequinGenderFromClothes": false, "colourItems": "random", "compactMode": false, }>> <<initAllNNPCVirginities>> <<set $templePromised to "">> <<if $sleepStat is undefined>> <<set $sleepStat to 0>> <</if>> <<run window.createInventoryObject()>> <<initEstatePersistent>> <<set $modeloptionsOverride to {}>> <<set $wraith to {"state": "", "init": 0}>> <<set $necklaceThief to "">> <<set $world_corruption_soft to 0>> <<set $world_corruption_hard to 2>> <<set $world_corruption_reduced to 0>> <<set $passageCount to 0>> <<set $passageChangesCount to 0>> <<modupdate>> <</widget>>
<<widget "variablesStart2">> /*Variables required at the start of passage 'Start2', please remove if not required"*/ /*This widget should be used to initialise most or all variables that are required when you begin a new game. also check <<gameStartOnly>> for other initialisations. */ <<set $location to "home">> <<if $hairselect is "random">> <<set $hairselect to ["red","jetblack","black","brown","softbrown","lightbrown","burntorange","blond","softblond","platinumblond","ashyblond","strawberryblond","ginger"].random()>> <</if>> <<if $eyeselect is "random">> <<set $eyeselect to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].random()>> <</if>> <<if $background is "random">> <<set _backgroundOptions to ["waif","nerd","athlete","delinquent","promiscuous","exhibitionist","deviant","beautiful","lustful","plantlover"]>> <<if $player.gender isnot "h">> <<run _backgroundOptions.push("crossdresser")>> <</if>> <<set $background to _backgroundOptions.random()>> <</if>> <<switch $bodysize>> <<case 0>><<set $physiquesize to 6000>> <<case 1>><<set $physiquesize to 10000>> <<case 2>><<set $physiquesize to 12000>> <<case 3>><<set $physiquesize to 16000>> <</switch>> <<clamp>> <!-- <<effects>> --> <<initnpcgender>> <<initnpcskin>> <<if $debug is 1 and $spraymax lt 1>> <<set $spraymax += 1>> <<set $spray += 1>> <</if>> <<set $per_npc to {}>> <<set $storedNPCs to {}>> <<set $perNPCFix to 4>> <<set $physique to ($physiquesize / 7) * 3>> <<set $beauty to ($beautymax / 7)>> <<set $breastgrowthtimer to 350>> <<tryOnInit>> <<givestartclothing>> <<set $intro to 0>> <<set $naturalhaircolour to $hairselect>> <<set $haircolour to $naturalhaircolour>> <<set $hairColourStyle to "simple">> <<set $hairColourGradient to { style: "split", colours: ["red", "black"]}>> <<set $hairfringecolour to $naturalhaircolour>> <<set $hairFringeColourStyle to "simple">> <<set $hairFringeColourGradient to { style: "split", colours: ["red", "black"]}>> <<if $cheatdisable is "f" and !$debug or $rentmod lt 1 and !$debug>> <<set $feats.locked to true>> <</if>> <<set $leftEyeColour to $eyeselect>> <<set $rightEyeColour to $eyeselect>> <<if $awareselect is "innocent">> <<elseif $awareselect is "knowledgeable">> <<set $awareness += 200>> <<set $awarelevel to 1>> <</if>> /*pharmacy contact lenses related */ <<if ndef $lenses_ordered>> <<set $lenses_ordered to []>> <</if>> <<if ndef $custom_lenses_already_ordered>> <<set $custom_lenses_already_ordered to 0>> <</if>> <<if ndef $custom_eyecolours>> <<set $custom_eyecolours to []>> <</if>> <<if ndef $makeup.owned>> <<set $makeup.owned to []>> <<if ndef $makeup.owned.custom_eyelenses>> <<set $makeup.owned.custom_eyelenses to []>> <</if>> <</if>> <<set $player.gender_appearance to $player.gender>> <<set $player.gender_appearance_factors to []>> <<set $player.femininity to 0>> <<set $player.gender_appearance_without_overwear to $player.gender>> <<set $player.gender_appearance_without_overwear_factors to []>> <<set $player.femininity_without_overwear to 0>> <<set $player.gender_posture to "n">> <<if $player.gender is "f">> <<set $vaginause to 0>> <<set $vaginastate to 0>> <<set $penisuse to "none">> <<set $penisstate to "none">> <<set $player.sex to "f">> <<set $player.vaginaExist to true>> <<set $player.penisExist to false>> <<set $player.ballsExist to false>> <<elseif $player.gender is "m">> <<set $vaginause to "none">> <<set $vaginastate to "none">> <<set $penisuse to 0>> <<set $penisstate to 0>> <<set $player.sex to "m">> <<set $player.vaginaExist to false>> <<set $player.penisExist to true>> <<set $player.ballsExist to true>> <<elseif $player.gender is "h">> <<set $vaginause to 0>> <<set $vaginastate to 0>> <<set $penisuse to 0>> <<set $penisstate to 0>> <<set $player.sex to "h">> <<set $player.penisExist to true>> <<set $player.vaginaExist to true>> <</if>> <<physicalAdjustmentsInit>> <<set $player.perceived_breastsize = $player.breastsize>> <<set $player.perceived_bottomsize = $player.bottomsize>> /* Do not use this object directly - use the Weather singleton instead */ <<set $weatherObj to { name: "clear", snow: 0, ice: {}, fog: 0, overcast: 0, targetOvercast: 0, monthlyTemperatures: [], keypointsArr: [] }>> /* Default start date: 6 sept (sunday), 2020, 07:00 */ /* Do not change start date during gameplay as time is relative to the start date */ <<if $startingseason is "random">> <<set $startingseason to ["autumn","winter","spring","summer"].random()>> <</if>> <<switch $startingseason>> <<case "winter">> <<set Time.startDate to new DateTime(2022, 12, 4, 7)>> <<case "spring">> <<set Time.startDate to new DateTime(2022, 3, 6, 7)>> <<case "summer">> <<set Time.startDate to new DateTime(2022, 6, 5, 7)>> <<default>> <<set Time.startDate to new DateTime(2022, 9, 4, 7)>> <</switch>> <<unset $startingseason>> <<set $timeStamp to 0>> <<set Time.set()>> <<run Weather.activeRenderer = Weather.sky>> <<run Weather.sky.initialize()>> <<set $backgroundTraits to []>> <<if $background.nerd is true>> <<set $science += 100>><<set $maths += 100>><<set $english += 100>><<set $history += 100>><<set $school += 400>><<set $cool to 0>> <<set $sciencetrait to 1>><<set $mathstrait to 1>><<set $englishtrait to 1>><<set $historytrait to 1>> <<set $backgroundTraits.push("nerd")>> <</if>> <<if $background.athlete is true>> <<set $physique += ($physiquesize / 4)>><<set $swimmingskill += 200>><<set $athletics += 200>> <<set $science to 0>><<set $maths to 0>><<set $english to 0>><<set $history to 0>><<set $school to 0>> <<set $sciencetrait to -1>><<set $mathstrait to -1>><<set $englishtrait to -1>><<set $historytrait to -1>> <<set $backgroundTraits.push("athlete")>> <</if>> <<if $background.delinquent is true>> <<set $delinquency += 401>><<set $cool += 200>> <<set $backgroundTraits.push("delinquent")>> <</if>> <<if $background.promiscuous is true>> <<set $promiscuity += 35>> <<set $backgroundTraits.push("promiscuous")>> <</if>> <<if $background.exhibitionist is true>> <<set $exhibitionism += 35>> <<set $backgroundTraits.push("exhibitionist")>> <</if>> <<if $background.deviant is true>> <<set $deviancy += 35>> <<set $backgroundTraits.push("deviant")>> <</if>> <<if $background.beautiful is true>> <<set $beauty += ($beautymax / 2) * $AMCTraits.beauty>> <<set $backgroundTraits.push("beautiful")>> <</if>> <<if $background.lustful is true>> <<set $backgroundTraits.push("lustful")>> <</if>> <<if $background.crossdresser is true>> <<if $player.gender is "f">> <<set $player.gender_posture to "m">> <<elseif $player.gender is "m">> <<set $player.gender_posture to "f">> <<else>> <<set $player.gender_posture to "n">> <</if>> <<set $backgroundTraits.push("crossdresser")>> <</if>> /* <<elseif $background is "greenthumb">> */ /* Leaving this here in case we ever turn Green Thumb back into a background. Can't be set to the background variable in current state. */ /* <<set $tending += 200>> */ <<if $background.plantlover is true>> <<set $nectar_addiction to 200>> <<set $nectar_timer to 21>> <<set $backgroundTraits.push("plantlover")>> <</if>> <<if $hairlength gte 900>> <<set $hairlengthstage to "feet">> <<elseif $hairlength gte 700>> <<set $hairlengthstage to "thighs">> <<elseif $hairlength gte 600>> <<set $hairlengthstage to "navel">> <<elseif $hairlength gte 400>> <<set $hairlengthstage to "chest">> <<elseif $hairlength gte 200>> <<set $hairlengthstage to "shoulder">> <<else>> <<set $hairlengthstage to "short">> <</if>> <<if $fringelength gte 900>> <<set $fringelengthstage to "feet">> <<elseif $fringelength gte 700>> <<set $fringelengthstage to "thighs">> <<elseif $fringelength gte 600>> <<set $fringelengthstage to "navel">> <<elseif $fringelength gte 400>> <<set $fringelengthstage to "chest">> <<elseif $fringelength gte 200>> <<set $fringelengthstage to "shoulder">> <<else>> <<set $fringelengthstage to "short">> <</if>> <<if $saveId is undefined>> <<set $saveId to random(10000, 99999)>> <</if>> <<if $player.penisExist>> <<set $semen_amount to 90>> <<set $semen_volume to 90>> <<else>> <<set $semen_amount to 0>> <<set $semen_volume to 0>> <</if>> <<if $dateCount is undefined>> <<set $dateCount to { Total: 0, Robin: 0, Whitney: 0, Kylar: 0, Eden: 0, Avery: 0, BlackWolfHunts: 0, GreatHawkHunts: 0, GreatHawkCasual: 0, Alex: 0, Sydney: 0 }>> <</if>> <<if $virginTaken is undefined>> <<set $virginTaken to { kiss: [], handholding: [], oral: [], anal: [], vaginal: [], penile: [] }>> <</if>> <<set $loveInterest to { primary: "None", secondary: "None", tertiary: "None" }>> <<set $attitudesControl to { showGoldLink:false, unlockExhibitionismUnderwear:false, unlockExhibitionismNude:false, unlockTransformation:false, unlockDemonFlaunt:false, unlockProstitution:false, unlockLoveInterest1:false, unlockLoveInterest2:false, unlockLoveInterest3:false, unlockDefaultActions:false, unlockHypnosis:false, unlockLewd:false, }>> <<set $clothingShop to { ban: 0, banExtension: false, spotted: false, stolenClothes: 0, totalStolenClothes: 0, banCount: 0, rng: random(0,1000) }>> <<set $adultShop to { ban: 0, banExtension: false, spotted: false, stolenClothes: 0, totalStolenClothes: 0, banCount: 0, rng: random(0,1000) }>> <<set $propEquipped to 0>> <<set $balloonStand to { open: false, owner: "friendly", freeDrink: false, robin: {status: "unaffected", talked: false, knows: false} }>> <<set $retrieveShopCustomColor to {}>> <<set $customColors to { presets:{}, action: "set", currentType: "primary", color:{primary:0, secondary:0}, saturation:{primary:1, secondary:1}, brightness:{primary:1, secondary:1}, contrast:{primary:1, secondary:1}, sepia:{primary:1, secondary:1}, value:{primary:100, secondary:100} }>> <<set $combatTrain to { length: 0, generateInit: 1, beastTypes: [], numberPerTrain: [], }>> <<set $enemyArousalLossReduction to 1>> <<set $robinTattoo to []>> <<set $robinmissing to 0>> <<set $robin to { timer: {hurt:0, customer:0}, hurtReason: "nothing", moneyModifier: 0 }>> <<set $kylar to { raped: 0, riddle: 0, timer: {halls:0,street:0,home:0,love:0}, fameStage: 0, }>> <<set $kylarSeen to []>> <<set $museumAntiqueJournalHints to []>> <<specialClothesSetup>> <<pregnancyVar>> <<specialClothesEffectsSetup>> <<childrenSetup>> <<setupTransformationPiecesObject>> <<if $fertiliser is undefined>> <<set $fertiliser to {current:0,used:0}>> <</if>> <<set $actionDefaults = DefaultActions.setDefaults()>> <<set versionUpdateCheck to false>> <<set $rebuy_failure to []>> <<set $rebuy_success to []>> <<pbhairinit>> <<resetLastOptions>> <<set $adultshopprogress to 0>> <<set $adultshopcontribution to 0>> <<run createInventoryObject()>> <<set $robinPunishments to []>> <<set $robinTraumaMultiplier to 1>> <<set $daily to { school: { attended: {} }, whitney: {}, robin: {}, kylar: {}, morgan: {}, eden: {}, alex: {}, sydney: {}, ex: {}, pharm: {}, prison: {}, livestock: {}, giftedFood: {} }>> <<set _food_keys to Object.keys(setup.plants)>> <<for _i to 0; _i lt _food_keys.length; _i++>> <<set $_type to _food_keys[_i]>> <<if $plants[$_type] is undefined>> <<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": 0}>> <<elseif $plants[$_type].name is undefined>> <<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": $plants[$_type].amount}>> <</if>> <</for>> <<supermarketWeekly>> <<set $weekly to { theft: {}, sewers: {} }>> <<set $yearly to { }>> <<if $feats.allSaves.points gt 0>> <<applyFeatsBoost>> <</if>> <<set $school to $science + $english + $maths + $history>> <<set $schooltrait = $school >= 2800 ? 4 : $school >= 2000 ? 3 : $school >= 1600 ? 2 : $school >= 1200 ? 1 : 0>> <<if $ironmanmode is true>> <<set $options.confirmDialogUponTabClose to true>> <<else>> <<set $options.confirmDialogUponTabClose to false>> <</if>> <<run toggleConfirmDialogUponTabClose()>> <<run Furniture.update()>> <<modupdate>> <</widget>>
<<widget "variablesStatic">> /*This is for static variables that will not change during gameplay*/ /*These will not be saved to saves and are best when they are required in multiple location and are required for processing for loops, default objects, etc.*/ /*Can be found at 'SugarCube.setup'*/ <<run try { new Function("const foo = {}; foo?.bar;"); } catch (e) { window.Utils.Defer(() => { Errors.report('This browser does not meet the minimum requirements for DoL (ES2020). Please alert Vrelnir + the dev team and update your web browser.'); Errors.Reporter.show(); }); }>> <<set setup.test to "testing">> <<set setup.baseNPC = { "chastity": { penis: "", vagina: "", anus: "" }, "location": {}, "skills": {}, "pronouns": {}, "traits": [] }>> <<clothing_data>> <<hair_data>> <<init_bodywriting_objects>> <<init_plant_objects>> <<init_locations>> <<init_tips>> <<set setup.baseNNPC = {penis : 0, vagina: 0, gender: "none", description: 0, title: 0, insecurity: 0, pronoun: "none", penissize: 0, penisdesc: "none", bottomsize: 0, ballssize: 0, breastsize: 0, breastdesc: 0, breastsdesc: 0, skincolour: 0, teen: 0, adult: 0, init: 0, intro: 0, type: "human", trust: 0, love: 0, dom: 0, lust: 0, rage: 0, state: "", trauma: 0, eyeColour: 0, hairColour: 0, chastity: {penis: "", vagina: "", anus: ""}}>> <<set setup.NPCNameList = ["Avery","Bailey","Briar","Charlie","Darryl","Doren","Eden","Gwylan","Harper","Jordan","Kylar","Landry","Leighton","Mason","Morgan","River","Robin","Sam","Sirris","Whitney","Winter","Black Wolf","Niki","Quinn","Remy","Alex","Great Hawk","Wren","Sydney","Ivory Wraith","Zephyr","Riley"]>> <<set setup.loveInterestNpc = ["Robin","Whitney","Kylar","Sydney","Eden","Avery","Black Wolf","Great Hawk","Alex"]>> /* this initialises the C.npc object */ <<run initCNPC()>> <<set setup.crimeNames to { assault: "assault", coercion: "coercion", destruction: "destruction of property", exposure: "indecent exposure", obstruction: "obstruction of justice", prostitution: "prostitution", resisting: "resisting arrest", thievery: "thievery", petty: "petty thievery", trespassing: "trespassing", }>> <<set setup.crimeDescs to { default: "general", legacy: "a string of crimes that slipped through the cracks", escape: "escaping prison", cake: "a high-profile theft involving a noble's wedding cake", kylarPrison: "assisting in a prison escape", }>> /* this initialises the C.crime object */ <<run initCCrime()>> <<set setup.skinColor to { light: { hStart: 30, hEnd: 47, sStart: 0.15, sEnd: 0.30,bStart: 4.3, bEnd: 3.4 }, medium: { hStart: 47, hEnd: 50, sStart: 0.30, sEnd: 0.32,bStart: 3.4, bEnd: 1.55 }, dark: { hStart: 50, hEnd: 50, sStart: 0.32, sEnd: 0.4,bStart: 1.55, bEnd: 0.6 }, gyaru: [ { hStart: 30, hEnd: 47, sStart: 0.15, sEnd: 0.30, bStart: 4.3, bEnd: 3.4 }, { hStart: 47, hEnd: 50, sStart: 0.30, sEnd: 0.32, bStart: 3.4, bEnd: 1.55 }, { hStart: 50, hEnd: 50, sStart: 0.32, sEnd: 0.4, bStart: 1.55, bEnd: 0.6 }, ], ylight: { hStart: 50, hEnd: 55, sStart: 0.20, sEnd: 0.20,bStart: 4.4, bEnd: 3.6 }, ymedium: { hStart: 60, hEnd: 60, sStart: 0.25, sEnd: 0.25,bStart: 3.6, bEnd: 2.0 }, ydark: { hStart: 60, hEnd: 60, sStart: 0.25, sEnd: 0.25,bStart: 2.0, bEnd: 1.0 }, ygyaru: [ { hStart: 60, hEnd: 60, sStart: 0.25, sEnd: 0.25, bStart: 4.4, bEnd: 3.6 }, { hStart: 60, hEnd: 60, sStart: 0.25, sEnd: 0.25, bStart: 3.6, bEnd: 2.0 }, { hStart: 60, hEnd: 60, sStart: 0.25, sEnd: 0.25, bStart: 2.0, bEnd: 1.0 }, ], slime: { hStart: 200, hEnd: 200, sStart: 0.3, sEnd: 0.5,bStart: 3.6, bEnd: 3.1 }, dft: { hStart: 45, hEnd: 45, sStart: 0.2, sEnd: 0.4, bStart: 4.5, bEnd: 0.7} }>> <<set setup.tanImg to { "doggy":{ "t":{ "doggyactivebase":"img/sex/doggyRed/active/body/doggyactivebase.png", "doggyactivebaseleftarm":"img/sex/doggyRed/active/body/doggyactivebaseleftarm.png", "doggyactivebaselegs":"img/sex/doggyRed/active/body/doggyactivebaselegs.png", "doggyactivebaserightarm":"img/sex/doggyRed/active/body/doggyactivebaserightarm.png", "doggyactiveblush1":"img/sex/doggyRed/active/body/doggyactiveblush1.png", "doggyactiveblush2":"img/sex/doggyRed/active/body/doggyactiveblush2.png", "doggyactiveblush3":"img/sex/doggyRed/active/body/doggyactiveblush3.png", "doggyactiveblush4":"img/sex/doggyRed/active/body/doggyactiveblush4.png", "doggyactiveblush5":"img/sex/doggyRed/active/body/doggyactiveblush5.png", "doggyactivemouth":"img/sex/doggyRed/active/body/doggyactivemouth.png", "freckles":"img/sex/doggyRed/active/body/freckles.png", "breastsTiny":"img/sex/doggyRed/active/body/doggyactivebreaststiny.png", "breastsSmall":"img/sex/doggyRed/active/body/doggyactivebreastssmall.png", "breastsLarge":"img/sex/doggyRed/active/body/doggyactivebreastslarge.png", "breastsHuge":"img/sex/doggyRed/active/body/doggyactivebreastshuge.png", "doggyactivefeetjob":"img/sex/doggyRed/active/body/doggyactivefeetjob.png", "doggyactivefeetjobpenis":"img/sex/doggyRed/active/body/doggyactivefeetjobpenis.png", "doggyactiveleftarmbound":"img/sex/doggyRed/active/body/doggyactiveleftarmbound.png", "doggyactivelefthandjob":"img/sex/doggyRed/active/body/doggyactivelefthandjob.png", "doggyactivelefthandjobpenis":"img/sex/doggyRed/active/body/doggyactivelefthandjobpenis.png", "doggyactivepenis":"img/sex/doggyRed/active/body/doggyactivepenis.png", "doggyactivepenisvirgin":"img/sex/doggyRed/active/body/doggyactivepenisvirgin.png", "doggyactivepush":"img/sex/doggyRed/active/body/activepush.png", "doggyactivepushlight":"img/sex/doggyRed/active/body/doggyactivepushlight.png", "doggyactiverighthandjob":"img/sex/doggyRed/active/body/doggyactiverighthandjob.png", "doggyactiverighthandjobpenis":"img/sex/doggyRed/active/body/doggyactiverighthandjobpenis.png", "doggyactiveeyelids":"img/sex/doggyRed/active/doggyactiveeyelids.png", "doggyactiveclosedmouth":"img/sex/doggyRed/active/body/doggyactiveclosedmouth.png", "activebeastlefthand":"img/sex/doggyRed/frontbeast/activebeastlefthand.png", "activebeastlefthandpenis":"img/sex/doggyRed/frontbeast/activebeastlefthandpenis.png", "activebeastrighthand":"img/sex/doggyRed/frontbeast/activebeastrighthand.png", "activebeastrighthandpenis":"img/sex/doggyRed/frontbeast/activebeastrighthandpenis.png", "activebearlefthand":"img/sex/doggyRed/frontbeast/bear/activebearlefthand.png", "activebearlefthandpenis":"img/sex/doggyRed/frontbeast/bear/activebearlefthandpenis.png", "activebearrighthand":"img/sex/doggyRed/frontbeast/bear/activebearrighthand.png", "activebearrighthandpenis":"img/sex/doggyRed/frontbeast/bear/activebearrighthandpenis.png", "activecatlefthand":"img/sex/doggyRed/frontbeast/cat/activecatlefthand.png", "activecatlefthandpenis":"img/sex/doggyRed/frontbeast/cat/activecatlefthandpenis.png", "activecatrighthand":"img/sex/doggyRed/frontbeast/cat/activecatrighthand.png", "activecatrighthandpenis":"img/sex/doggyRed/frontbeast/cat/activecatrighthandpenis.png", "activedolphinlefthand":"img/sex/doggyRed/frontbeast/dolphin/activedolphinlefthand.png", "activedolphinlefthandpenis":"img/sex/doggyRed/frontbeast/dolphin/activedolphinlefthandpenis.png", "activedolphinrighthand":"img/sex/doggyRed/frontbeast/dolphin/activedolphinrighthand.png", "activedolphinrighthandpenis":"img/sex/doggyRed/frontbeast/dolphin/activedolphinrighthandpenis.png", "doggyactiveshadow":"img/sex/doggyRed/active/body/doggyactiveshadow.png", "doggyactivechastitycagepenis":"img/sex/doggyRed/active/body/doggyactivechastitycagepenis.png", "doggyactivechastitycagepenissmall":"img/sex/doggyRed/active/body/doggyactivechastitycagepenissmall.png", "doggyactivestrapon":"img/sex/doggyRed/active/body/doggyactivepenisvirgin.png", "doggyanalentrance":"img/sex/doggyRed/doggyanalentrance.png", "doggyanalimminent":"img/sex/doggyRed/doggyanalimminent.png", "doggyoralentrance":"img/sex/doggyRed/doggyoralentrance.png", "doggyoralimminent":"img/sex/doggyRed/doggyoralimminent.png", "doggyvaginalentrance":"img/sex/doggyRed/doggyvaginalentrance.png", "doggyvaginalimminent":"img/sex/doggyRed/doggyvaginalimminent.png", "doggyactiveanal":"img/sex/doggyRed/active/body/doggyactiveanal.png", "doggyactiveanaldap":"img/sex/doggyRed/active/body/doggyactiveanaldap.png", "doggyactiveanaldpp":"img/sex/doggyRed/active/body/doggyactiveanaldpp.png", "doggyactivecheeks":"img/sex/doggyRed/active/body/doggyactivecheeks.png", "doggyactivechest":"img/sex/doggyRed/active/body/doggyactivechest.png", "doggyactivefeetjobpenis":"img/sex/doggyRed/active/body/doggyactivefeetjobpenis.png", "doggyactivefencing":"img/sex/doggyRed/active/body/doggyactivefencing.png", "doggyactivelefthandjobpenis":"img/sex/doggyRed/active/body/doggyactivelefthandjobpenis.png", "doggyactiverighthandjobpenis":"img/sex/doggyRed/active/body/doggyactiverighthandjobpenis.png", "doggyactiveoral":"img/sex/doggyRed/active/body/doggyactiveoral.png", "doggyactivethighs":"img/sex/doggyRed/active/body/doggyactivethighs.png", "doggyactivevaginal":"img/sex/doggyRed/active/body/doggyactivevaginal.png", "doggyactivevaginaldp":"img/sex/doggyRed/active/body/doggyactivevaginaldp.png", "doggyactivepreggybelly":"img/sex/doggyRed/active/body/preggyBelly/pregnancy_belly_" }, "f":{ "doggyactivebase":"img/sex/doggy/active/body/doggyactivebase.png", "doggyactivebaseleftarm":"img/sex/doggy/active/body/doggyactivebaseleftarm.png", "doggyactivebaselegs":"img/sex/doggy/active/body/doggyactivebaselegs.png", "doggyactivebaserightarm":"img/sex/doggy/active/body/doggyactivebaserightarm.png", "breastsTiny":"img/sex/doggy/active/body/doggyactivebreaststiny.png", "doggyactiveblush1":"img/sex/doggy/active/body/doggyactiveblush1.png", "doggyactiveblush2":"img/sex/doggy/active/body/doggyactiveblush2.png", "doggyactiveblush3":"img/sex/doggy/active/body/doggyactiveblush3.png", "doggyactiveblush4":"img/sex/doggy/active/body/doggyactiveblush4.png", "doggyactiveblush5":"img/sex/doggy/active/body/doggyactiveblush5.png", "doggyactivemouth":"img/sex/doggy/active/body/doggyactivemouth.png", "freckles":"img/sex/doggy/active/body/freckles.png", "breastsSmall":"img/sex/doggy/active/body/doggyactivebreastssmall.png", "breastsLarge":"img/sex/doggy/active/body/doggyactivebreastslarge.png", "breastsHuge":"img/sex/doggy/active/body/doggyactivebreastshuge.png", "doggyactivefeetjob":"img/sex/doggy/active/body/doggyactivefeetjob.png", "doggyactivefeetjobpenis":"img/sex/doggy/active/body/doggyactivefeetjobpenis.png", "doggyactiveleftarmbound":"img/sex/doggy/active/body/doggyactiveleftarmbound.png", "doggyactivelefthandjob":"img/sex/doggy/active/body/doggyactivelefthandjob.png", "doggyactivelefthandjobpenis":"img/sex/doggy/active/body/doggyactivelefthandjobpenis.png", "doggyactivepenis":"img/sex/doggy/active/body/doggyactivepenis.png", "doggyactivepenisvirgin":"img/sex/doggy/active/body/doggyactivepenisvirgin.png", "doggyactivepush":"img/sex/doggy/active/body/doggyactivepush.png", "doggyactivepushlight":"img/sex/doggy/active/body/doggyactivepushlight.png", "doggyactiverighthandjob":"img/sex/doggy/active/body/doggyactiverighthandjob.png", "doggyactiverighthandjobpenis":"img/sex/doggy/active/body/doggyactiverighthandjobpenis.png", "doggyactiveeyelids":"img/sex/doggy/active/doggyactiveeyelids.png", "doggyactiveclosedmouth":"img/sex/doggy/active/body/doggyactiveclosedmouth.png", "activebeastlefthand":"img/sex/doggy/frontbeast/activebeastlefthand.png", "activebeastlefthandpenis":"img/sex/doggy/frontbeast/activebeastlefthandpenis.png", "activebeastrighthand":"img/sex/doggy/frontbeast/activebeastrighthand.png", "activebeastrighthandpenis":"img/sex/doggy/frontbeast/activebeastrighthandpenis.png", "activebearlefthand":"img/sex/doggy/frontbeast/bear/activebearlefthand.png", "activebearlefthandpenis":"img/sex/doggy/frontbeast/bear/activebearlefthandpenis.png", "activebearrighthand":"img/sex/doggy/frontbeast/bear/activebearrighthand.png", "activebearrighthandpenis":"img/sex/doggy/frontbeast/bear/activebearrighthandpenis.png", "activecatlefthand":"img/sex/doggy/frontbeast/cat/activecatlefthand.png", "activecatlefthandpenis":"img/sex/doggy/frontbeast/cat/activecatlefthandpenis.png", "activecatrighthand":"img/sex/doggy/frontbeast/cat/activecatrighthand.png", "activecatrighthandpenis":"img/sex/doggy/frontbeast/cat/activecatrighthandpenis.png", "activedolphinlefthand":"img/sex/doggy/frontbeast/dolphin/activedolphinlefthand.png", "activedolphinlefthandpenis":"img/sex/doggy/frontbeast/dolphin/activedolphinlefthandpenis.png", "activedolphinrighthand":"img/sex/doggy/frontbeast/dolphin/activedolphinrighthand.png", "activedolphinrighthandpenis":"img/sex/doggy/frontbeast/dolphin/activedolphinrighthandpenis.png", "doggyactiveshadow":"img/sex/doggy/active/body/doggyactiveshadow.png", "doggyactivechastitycagepenis":"img/sex/doggy/active/body/doggyactivechastitycagepenis.png", "doggyactivechastitycagepenissmall":"img/sex/doggy/active/body/doggyactivechastitycagepenissmall.png", "doggyactivestrapon":"img/sex/doggy/active/body/doggyactivepenisvirgin.png", "doggyanalentrance":"img/sex/doggy/doggyanalentrance.png", "doggyanalimminent":"img/sex/doggy/doggyanalimminent.png", "doggyoralentrance":"img/sex/doggy/doggyoralentrance.png", "doggyoralimminent":"img/sex/doggy/doggyoralimminent.png", "doggyvaginalentrance":"img/sex/doggy/doggyvaginalentrance.png", "doggyvaginalimminent":"img/sex/doggy/doggyvaginalimminent.png", "doggyactiveanal":"img/sex/doggy/active/body/doggyactiveanal.png", "doggyactiveanaldap":"img/sex/doggy/active/body/doggyactiveanaldap.png", "doggyactiveanaldpp":"img/sex/doggy/active/body/doggyactiveanaldpp.png", "doggyactivecheeks":"img/sex/doggy/active/body/doggyactivecheeks.png", "doggyactivechest":"img/sex/doggy/active/body/doggyactivechest.png", "doggyactivefeetjobpenis":"img/sex/doggy/active/body/doggyactivefeetjobpenis.png", "doggyactivefencing":"img/sex/doggy/active/body/doggyactivefencing.png", "doggyactivelefthandjobpenis":"img/sex/doggy/active/body/doggyactivelefthandjobpenis.png", "doggyactiverighthandjobpenis":"img/sex/doggy/active/body/doggyactiverighthandjobpenis.png", "doggyactiveoral":"img/sex/doggy/active/body/doggyactiveoral.png", "doggyactivethighs":"img/sex/doggy/active/body/doggyactivethighs.png", "doggyactivevaginal":"img/sex/doggy/active/body/doggyactivevaginal.png", "doggyactivevaginaldp":"img/sex/doggy/active/body/doggyactivevaginaldp.png", "doggyactivepreggybelly":"img/sex/doggy/active/body/preggyBelly/pregnancy_belly_" } }, "missionary":{ "t":{ "activearmsbound":"img/sex/missionaryRed/active/body/activearmsbound.png", "activebase":"img/sex/missionaryRed/active/body/activebase.png", "activebaseleftarm":"img/sex/missionaryRed/active/body/activebaseleftarm.png", "activebaselegl":"img/sex/missionaryRed/active/body/activebaselegl.png", "activebaselegldown":"img/sex/missionaryRed/active/body/activebaselegldown.png", "activebaselegr":"img/sex/missionaryRed/active/body/activebaselegr.png", "activebaselegrdown":"img/sex/missionaryRed/active/body/activebaselegrdown.png", "activebaserightarm":"img/sex/missionaryRed/active/body/activebaserightarm.png", "activebaserightarmstroke":"img/sex/missionaryRed/active/body/activebaserightarmstroke.png", "activeblush1":"img/sex/missionaryRed/active/body/activeblush1.png", "activeblush2":"img/sex/missionaryRed/active/body/activeblush2.png", "activeblush3":"img/sex/missionaryRed/active/body/activeblush3.png", "activeblush4":"img/sex/missionaryRed/active/body/activeblush4.png", "activeblush5":"img/sex/missionaryRed/active/body/activeblush5.png", "activemouth":"img/sex/missionaryRed/active/body/activemouth.png", "freckles":"img/sex/missionaryRed/active/body/freckles.png", "breastsTiny":"img/sex/missionaryRed/active/body/activebreaststiny.png", "breastsSmall":"img/sex/missionaryRed/active/body/activebreastssmall.png", "breastsLarge":"img/sex/missionaryRed/active/body/activebreastslarge.png", "breastsHuge":"img/sex/missionaryRed/active/body/activebreastshuge.png", "activefeetjob":"img/sex/missionaryRed/active/body/activefeetjob.png", "activefeetjobpenis":"img/sex/missionaryRed/active/body/activefeetjobpenis.png", "activeleftarmbound":"img/sex/missionaryRed/active/body/activeleftarmbound.png", "activelefthandjob":"img/sex/missionaryRed/active/body/activelefthandjob.png", "activelefthandjobpenis":"img/sex/missionaryRed/active/body/activelefthandjobpenis.png", "activepenis":"img/sex/missionaryRed/active/body/activepenis.png", "activepenisdown":"img/sex/missionaryRed/active/body/activepenisdown.png", "activepenisvirgin":"img/sex/missionaryRed/active/body/activepenisvirgin.png", "activepenisvirgindown":"img/sex/missionaryRed/active/body/activepenisvirgindown.png", "activepush":"img/sex/missionaryRed/active/body/activepush.png", "activepushlight":"img/sex/missionaryRed/active/body/activepushlight.png", "activerighthandjob":"img/sex/missionaryRed/active/body/activerighthandjob.png", "activerighthandjobpenis":"img/sex/missionaryRed/active/body/activerighthandjobpenis.png", "activeeyelids":"img/sex/missionaryRed/active/activeeyelids.png", "activeshadow":"img/sex/missionaryRed/active/body/activeshadow.png", "activechastitycagepenis":"img/sex/missionaryRed/active/body/activechastitycagepenis.png", "activechastitycagedownpenis":"img/sex/missionaryRed/active/body/activechastitycagedownpenis.png", "activechastitycagedownpenissmall":"img/sex/missionaryRed/active/body/activechastitycagedownpenissmall.png", "activechastitycagedownpenisflat":"img/sex/missionaryRed/active/body/activechastitycagedownpenisflat.png", "activeclosedmouth":"img/sex/missionaryRed/active/body/activeclosedmouth.png", "activestrapon":"img/sex/missionaryRed/active/body/activepenisvirgin.png", "activestrapondown":"img/sex/missionaryRed/active/body/activepenisvirgindown.png", "analentrance":"img/sex/missionaryRed/analentrance.png", "vaginalentrance":"img/sex/missionaryRed/vaginalentrance.png", "activeanal":"img/sex/missionaryRed/active/body/activeanal.png", "activeanaldoublemissionary":"img/sex/missionaryRed/active/body/activeanaldoublemissionary.png", "activechest":"img/sex/missionaryRed/active/body/activechest.png", "activefeetjobpenis":"img/sex/missionaryRed/active/body/activefeetjobpenis.png", "activeanal":"img/sex/missionaryRed/active/body/activeanal.png", "activefencing":"img/sex/missionaryRed/active/body/activefencing.png", "activelefthandjobpenis":"img/sex/missionaryRed/active/body/activelefthandjobpenis.png", "activerighthandjobpenis":"img/sex/missionaryRed/active/body/activerighthandjobpenis.png", "activeoral":"img/sex/missionaryRed/active/body/activeoral.png", "activethighs":"img/sex/missionaryRed/active/body/activethighs.png", "activevaginal":"img/sex/missionaryRed/active/body/activevaginal.png", "activevaginaldouble":"img/sex/missionaryRed/active/body/activevaginaldouble.png", "activepreggybelly":"img/sex/missionaryRed/active/body/preggyBelly/pregnancy_belly_" }, "f":{ "activearmsbound":"img/sex/missionary/active/body/activearmsbound.png", "activebase":"img/sex/missionary/active/body/activebase.png", "activebaseleftarm":"img/sex/missionary/active/body/activebaseleftarm.png", "activebaselegl":"img/sex/missionary/active/body/activebaselegl.png", "activebaselegldown":"img/sex/missionary/active/body/activebaselegldown.png", "activebaselegr":"img/sex/missionary/active/body/activebaselegr.png", "activebaselegrdown":"img/sex/missionary/active/body/activebaselegrdown.png", "activebaserightarm":"img/sex/missionary/active/body/activebaserightarm.png", "activebaserightarmstroke":"img/sex/missionary/active/body/activebaserightarmstroke.png", "activeblush1":"img/sex/missionary/active/body/activeblush1.png", "activeblush2":"img/sex/missionary/active/body/activeblush2.png", "activeblush3":"img/sex/missionary/active/body/activeblush3.png", "activeblush4":"img/sex/missionary/active/body/activeblush4.png", "activeblush5":"img/sex/missionary/active/body/activeblush5.png", "activemouth":"img/sex/missionary/active/body/activemouth.png", "freckles":"img/sex/missionary/active/body/freckles.png", "breastsTiny":"img/sex/missionary/active/body/activebreaststiny.png", "breastsSmall":"img/sex/missionary/active/body/activebreastssmall.png", "breastsLarge":"img/sex/missionary/active/body/activebreastslarge.png", "breastsHuge":"img/sex/missionary/active/body/activebreastshuge.png", "activefeetjob":"img/sex/missionary/active/body/activefeetjob.png", "activefeetjobpenis":"img/sex/missionary/active/body/activefeetjobpenis.png", "activeleftarmbound":"img/sex/missionary/active/body/activeleftarmbound.png", "activelefthandjob":"img/sex/missionary/active/body/activelefthandjob.png", "activelefthandjobpenis":"img/sex/missionary/active/body/activelefthandjobpenis.png", "activepenis":"img/sex/missionary/active/body/activepenis.png", "activepenisdown":"img/sex/missionary/active/body/activepenisdown.png", "activepenisvirgin":"img/sex/missionary/active/body/activepenisvirgin.png", "activepenisvirgindown":"img/sex/missionary/active/body/activepenisvirgindown.png", "activepush":"img/sex/missionary/active/body/activepush.png", "activepushlight":"img/sex/missionary/active/body/activepushlight.png", "activerighthandjob":"img/sex/missionary/active/body/activerighthandjob.png", "activerighthandjobpenis":"img/sex/missionary/active/body/activerighthandjobpenis.png", "activeeyelids":"img/sex/missionary/active/activeeyelids.png", "activeshadow":"img/sex/missionary/active/body/activeshadow.png", "activechastitycagepenis":"img/sex/missionary/active/body/activechastitycagepenis.png", "activechastitycagedownpenis":"img/sex/missionary/active/body/activechastitycagedownpenis.png", "activechastitycagedownpenissmall":"img/sex/missionary/active/body/activechastitycagedownpenissmall.png", "activechastitycagedownpenisflat":"img/sex/missionary/active/body/activechastitycagedownpenisflat.png", "activeclosedmouth":"img/sex/missionary/active/body/activeclosedmouth.png", "activestrapon":"img/sex/missionary/active/body/activepenisvirgin.png", "activestrapondown":"img/sex/missionary/active/body/activepenisvirgindown.png", "analentrance":"img/sex/missionary/analentrance.png", "vaginalentrance":"img/sex/missionary/vaginalentrance.png", "activeanal":"img/sex/missionary/active/body/activeanal.png", "activeanaldoublemissionary":"img/sex/missionary/active/body/activeanaldoublemissionary.png", "activechest":"img/sex/missionary/active/body/activechest.png", "activefeetjobpenis":"img/sex/missionary/active/body/activefeetjobpenis.png", "activeanal":"img/sex/missionary/active/body/activeanal.png", "activefencing":"img/sex/missionary/active/body/activefencing.png", "activelefthandjobpenis":"img/sex/missionary/active/body/activelefthandjobpenis.png", "activerighthandjobpenis":"img/sex/missionary/active/body/activerighthandjobpenis.png", "activeoral":"img/sex/missionary/active/body/activeoral.png", "activethighs":"img/sex/missionary/active/body/activethighs.png", "activevaginal":"img/sex/missionary/active/body/activevaginal.png", "activevaginaldouble":"img/sex/missionary/active/body/activevaginaldouble.png", "activepreggybelly":"img/sex/missionary/active/body/preggyBelly/pregnancy_belly_" } }, "close":{ "missionary":{ "t":{ "anus":"img/sex/closeRed/missionary/anus.png", "anuspenetrate":"img/sex/closeRed/missionary/anuspenetrate.png", "penis":"img/sex/closeRed/missionary/penis.png", "penisparasite":"img/sex/closeRed/missionary/penisparasite.png", "penisentrance":"img/sex/closeRed/missionary/penisentrance.png", "penispenetrated":"img/sex/closeRed/missionary/penispenetrated.png", "chastitypenis":"img/sex/closeRed/missionary/chastitypenis.png", "chastitypenisparasite":"img/sex/closeRed/missionary/chastitypenisparasite.png", "chastitypenissmall":"img/sex/closeRed/missionary/chastitypenissmall.png", "chastitypenisparasitesmall":"img/sex/closeRed/missionary/chastitypenisparasitesmall.png", "chastitypenisflat":"img/sex/closeRed/missionary/chastitypenisflat.png", "chastitypenisparasiteflat":"img/sex/closeRed/missionary/chastitypenisparasiteflat.png", "penisbase":"img/sex/closeRed/missionary/penisbase.png", "futapenisnoballs":"img/sex/closeRed/missionary/futapenisnoballs.png", "futapenisbase":"img/sex/closeRed/missionary/futapenisbase.png", "vagina":"img/sex/closeRed/missionary/vagina.png", "vaginaaroused":"img/sex/closeRed/missionary/vaginaaroused.png", "futavagina":"img/sex/closeRed/missionary/futavagina.png", "futavaginaparasite":"img/sex/closeRed/missionary/futavaginaparasite.png", "futavaginanoballs":"img/sex/closeRed/missionary/futavaginanoballs.png", "vaginaChastityBase":"img/sex/closeRed/missionary/chastityBelt/vaginaBase.png", "vaginaChastityMan":"img/sex/closeRed/missionary/chastityBelt/man.png", "vaginapenetrate":"img/sex/closeRed/missionary/vaginapenetrate.png", "vaginapenetratebig":"img/sex/closeRed/missionary/vaginapenetratebig.png", "penis1":"img/sex/closeRed/missionary/beast/penis1.png", "penisparasite1":"img/sex/closeRed/missionary/beast/penisparasite1.png", "penisentrance1":"img/sex/closeRed/missionary/beast/penisentrance1.png", "penisparasiteentrance1":"img/sex/closeRed/missionary/beast/penisparasiteentrance1.png", "penisimminent1":"img/sex/closeRed/missionary/beast/penisimminent1.png", "penisparasiteimminent1":"img/sex/closeRed/missionary/beast/penisparasiteimminent1.png", "penisnoballs":"img/sex/closeRed/missionary/beast/penisnoballs.png", "penisentrancenoballs":"img/sex/closeRed/missionary/beast/penisentrancenoballs.png", "penisimminentnoballs":"img/sex/closeRed/missionary/beast/penisimminentnoballs.png", "chest":"img/sex/closeRed/chest/" }, "f":{ "anus":"img/sex/close/missionary/anus.png", "anuspenetrate":"img/sex/close/missionary/anuspenetrate.png", "penis":"img/sex/close/missionary/penis.png", "penisparasite":"img/sex/close/missionary/penisparasite.png", "penisentrance":"img/sex/close/missionary/penisentrance.png", "penispenetrated":"img/sex/close/missionary/penispenetrated.png", "chastitypenis":"img/sex/close/missionary/chastitypenis.png", "chastitypenisparasite":"img/sex/close/missionary/chastitypenis.png", "chastitypenissmall":"img/sex/close/missionary/chastitypenissmall.png", "chastitypenisparasitesmall":"img/sex/close/missionary/chastitypenissmall.png", "chastitypenisflat":"img/sex/close/missionary/chastitypenisflat.png", "chastitypenisparasiteflat":"img/sex/close/missionary/chastitypenisflat.png", "penisbase":"img/sex/close/missionary/penisbase.png", "futapenisnoballs":"img/sex/close/missionary/futapenisnoballs.png", "futapenisbase":"img/sex/close/missionary/futapenisbase.png", "vagina":"img/sex/close/missionary/vagina.png", "vaginaaroused":"img/sex/close/missionary/vaginaaroused.png", "futavagina":"img/sex/close/missionary/futavagina.png", "futavaginaparasite":"img/sex/close/missionary/futavaginaparasite.png", "futavaginanoballs":"img/sex/close/missionary/futavaginanoballs.png", "vaginaChastityBase":"img/sex/close/missionary/chastityBelt/vaginaBase.png", "vaginaChastityMan":"img/sex/close/missionary/chastityBelt/man.png", "vaginapenetrate":"img/sex/close/missionary/vaginapenetrate.png", "vaginapenetratebig":"img/sex/close/missionary/vaginapenetratebig.png", "penis1":"img/sex/close/missionary/beast/penis1.png", "penisparasite1":"img/sex/close/missionary/beast/penisparasite1.png", "penisentrance1":"img/sex/close/missionary/beast/penisentrance1.png", "penisparasiteentrance1":"img/sex/close/missionary/beast/penisparasiteentrance1.png", "penisimminent1":"img/sex/close/missionary/beast/penisimminent1.png", "penisparasiteimminent1":"img/sex/close/missionary/beast/penisparasiteimminent1.png", "penisnoballs":"img/sex/close/missionary/beast/penisnoballs.png", "penisentrancenoballs":"img/sex/close/missionary/beast/penisentrancenoballs.png", "penisimminentnoballs":"img/sex/close/missionary/beast/penisimminentnoballs.png", "chest":"img/sex/close/chest/" } }, "doggy":{ "t":{ "anus":"img/sex/closeRed/doggy/anus.png", "anuspenetrate":"img/sex/closeRed/doggy/anuspenetrate.png", "penis":"img/sex/closeRed/doggy/penis.png", "penisparasite":"img/sex/closeRed/doggy/penisparasite.png", "penisentrance":"img/sex/closeRed/doggy/penisentrance.png", "penispenetrated":"img/sex/closeRed/doggy/penispenetrated.png", "chastitypenis":"img/sex/closeRed/doggy/chastitypenis.png", "chastitypenisparasite":"img/sex/closeRed/doggy/chastitypenisparasite.png", "chastitypenissmall":"img/sex/closeRed/doggy/chastitypenissmall.png", "chastitypenisparasitesmall":"img/sex/closeRed/doggy/chastitypenisparasitesmall.png", "chastitypenisflat":"img/sex/closeRed/doggy/chastitypenisflat.png", "chastitypenisparasiteflat":"img/sex/closeRed/doggy/chastitypenisparasiteflat.png", "penisbase":"img/sex/closeRed/doggy/penisbase.png", "futapenisnoballs":"img/sex/closeRed/doggy/futapenisnoballs.png", "futapenisbase":"img/sex/closeRed/doggy/futapenisbase.png", "vagina":"img/sex/closeRed/doggy/vagina.png", "vaginaaroused":"img/sex/closeRed/doggy/vaginaaroused.png", "futavagina":"img/sex/closeRed/doggy/futavagina.png", "futavaginaparasite":"img/sex/closeRed/doggy/futavaginaparasite.png", "futavaginanoballs":"img/sex/closeRed/doggy/futavaginanoballs.png", "vaginaChastityBase":"img/sex/closeRed/doggy/chastityBelt/vaginaBase.png", "vaginaChastityMan":"img/sex/closeRed/doggy/chastityBelt/man.png", "vaginapenetrate":"img/sex/closeRed/doggy/vaginapenetrate.png", "vaginapenetratebig":"img/sex/closeRed/doggy/vaginapenetratebig.png", "penis1":"img/sex/closeRed/doggy/beast/penis1.png", "penisparasite1":"img/sex/closeRed/doggy/beast/penisparasite1.png", "penisentrance1":"img/sex/closeRed/doggy/beast/penisentrance1.png", "penisparasiteentrance1":"img/sex/closeRed/doggy/beast/penisparasiteentrance1.png", "penisimminent1":"img/sex/closeRed/doggy/beast/penisimminent1.png", "penisparasiteimminent1":"img/sex/closeRed/doggy/beast/penisparasiteimminent1.png", "penisnoballs":"img/sex/closeRed/doggy/beast/penisnoballs.png", "penisentrancenoballs":"img/sex/closeRed/doggy/beast/penisentrancenoballs.png", "penisimminentnoballs":"img/sex/closeRed/doggy/beast/penisimminentnoballs.png", "chest":"img/sex/closeRed/chest/" }, "f":{ "anus":"img/sex/close/doggy/anus.png", "anuspenetrate":"img/sex/close/doggy/anuspenetrate.png", "penis":"img/sex/close/doggy/penis.png", "penisparasite":"img/sex/close/doggy/penisparasite.png", "penisentrance":"img/sex/close/doggy/penisentrance.png", "penispenetrated":"img/sex/close/doggy/penispenetrated.png", "chastitypenis":"img/sex/close/doggy/chastitypenis.png", "chastityparasitepenis":"img/sex/close/doggy/chastitypenis.png", "chastitypenissmall":"img/sex/close/doggy/chastitypenissmall.png", "chastitypenisparasitesmall":"img/sex/close/doggy/chastitypenissmall.png", "chastitypenisflat":"img/sex/close/doggy/chastitypenisflat.png", "chastitypenisparasiteflat":"img/sex/close/doggy/chastitypenisflat.png", "penisbase":"img/sex/close/doggy/penisbase.png", "futapenisnoballs":"img/sex/close/doggy/futapenisnoballs.png", "futapenisbase":"img/sex/close/doggy/futapenisbase.png", "vagina":"img/sex/close/doggy/vagina.png", "vaginaaroused":"img/sex/close/doggy/vaginaaroused.png", "futavagina":"img/sex/close/doggy/futavagina.png", "futavaginaparasite":"img/sex/close/doggy/futavaginaparasite.png", "futavaginanoballs":"img/sex/close/doggy/futavaginanoballs.png", "vaginaChastityBase":"img/sex/close/doggy/chastityBelt/vaginaBase.png", "vaginaChastityMan":"img/sex/close/doggy/chastityBelt/man.png", "vaginapenetrate":"img/sex/close/doggy/vaginapenetrate.png", "vaginapenetratebig":"img/sex/close/doggy/vaginapenetratebig.png", "penis1":"img/sex/close/doggy/beast/penis1.png", "penisparasite1":"img/sex/close/doggy/beast/penisparasite1.png", "penisentrance1":"img/sex/close/doggy/beast/penisentrance1.png", "penisparasiteentrance1":"img/sex/close/doggy/beast/penisparasiteentrance1.png", "penisimminent1":"img/sex/close/doggy/beast/penisimminent1.png", "penisparasiteimminent1":"img/sex/close/doggy/beast/penisparasiteimminent1.png", "penisnoballs":"img/sex/close/doggy/beast/penisnoballs.png", "penisentrancenoballs":"img/sex/close/doggy/beast/penisentrancenoballs.png", "penisimminentnoballs":"img/sex/close/doggy/beast/penisimminentnoballs.png", "chest":"img/sex/close/chest/" } } } }>> <<set setup.npcSkinDefaults to { "white":"hue-rotate(30deg) saturate(0.20) brightness(4.10)", "black":"hue-rotate(52deg) saturate(0.45) brightness(1.70)", "ghost":"hue-rotate(30deg) saturate(0.10) brightness(4.50) opacity(80%)" }>> <<set setup.shadowImage to { "doggy": [ "sexbase", "sexlegsdoggy", "sexbasefront", "beastforeground", "shadowman", "shadowmanbackground", "shadowmanforeground" ], "missionary": [ "sexbase", "sexlower", "sexhair", "sexbasefront", "layer-sexwings", "halo-front", "sexrightleg", "sexarmsbound", "sexaboveclothes", "foreground", "sexbaseoverlay", "beastforeground", "shadowman", "shadowmanbackground", "shadowmanforeground" ] }>> <<set setup.bodyliquid to { /* edit the bodyparts list to add a new bodypart, or the liquidtypes list to add a new liquid */ "bodyparts": [ "neck","rightarm","leftarm","thigh","bottom","tummy","chest","face","hair","feet","vaginaoutside","vagina","penis","anus","mouth" ], "innerbodyparts": [ "vagina","anus","mouth" ], "liquidtype": [ "goo", "semen", "nectar" ], combined(bodypart){ return $player.bodyliquid[bodypart].goo + $player.bodyliquid[bodypart].semen + $player.bodyliquid[bodypart].nectar; } }>> <<set setup.bodyparts to ["forehead", "left_cheek", "right_cheek", "left_shoulder", "right_shoulder", "breasts", "back", "left_bottom", "right_bottom", "pubic", "left_thigh", "right_thigh"]>> <<set setup.clothingLayer to { "all": ["over_upper","over_lower","over_head","upper","lower","under_upper","under_lower","head","face","neck","hands","handheld","legs","feet"], "body": ["upper","lower","under_upper","under_lower","head","face","neck","hands","handheld","legs","feet"], "torso": ["over_upper","over_lower","upper","lower","under_upper","under_lower"], "torso_inner": ["upper","lower","under_upper","under_lower"], "torso_outer": ["over_upper","over_lower","upper","lower"], "over": ["over_upper","over_lower","over_head"], "upper": ["upper", "under_upper"], "lower": ["lower","under_lower"] }>> /*All items that should never be placed in the wardrobe*/ <<set setup.wardrobeSkip to ["naked","towel top","large towel","towel skirt","large towel bottom","plant skirt","plant top"]>> <<set setup.actionsTypes to { 'personTypes': [ 'Everyone', 'Strangers', 'Acquaintances', 'Alternative', 'Defiant', 'Submissive', 'Animals', 'Tentacles', 'Bailey', 'Robin', 'Whitney', 'Kylar', 'Sydney', 'Eden', 'Avery', 'Leighton', 'Alex', 'Ivory Wraith', 'Black Wolf', 'Great Hawk' ], 'combatTypes': [ 'rape', 'consensual' ], 'actionTypes': [ 'leftaction', 'rightaction', 'feetaction', 'mouthaction', 'penisaction', 'vaginaaction', 'anusaction', 'askActions', 'regrab' ] }>> /* Temporary until location rework */ <<set setup.majorAreas to [ "Orphanage", "Bedroom", "Barb Street", "Cliff Street", "Connudatus Street", "Danube Street", "Domus Street", "Elk Street", "Harvest Street", "High Street", "Mer Street", "Nightingale Street", "Oxford Street", "Starfish Street", "Wolf Street", "Residential alleyways", "Commercial alleyways", "Industrial alleyways", "Park", "Hallways", "Brothel", "Strip Club", "Beach", "Ocean Breeze", "Docks Work", "Residential Drain", "Commercial Drain", "Industrial Drain", "Forest", "Farmland", "Livestock Field", "Moor", "Forest Wolf Cave", "Wolf Cave", "Wolf Cave Clearing", "Asylum", "Asylum Cell", "Underground Cell", "Prison Cell", "Island", "Lake Shore", "Farmland", "Farm Work", "Meadow", "Sea", "town", "Eden Cabin", "Bird Tower", ]>> /* Temporary until location rework */ <<set setup.passOutAreas to [...setup.majorAreas, "Sea", "Lake Underwater", "Sea Cliffs", "Sea Docks", "Sea Rocks", "Sea Beach", "Lake Shallows", "Lake Depths", "Lake Shallows Ice", "Lake Depths Ice", "Estate"]>> <<set setup.clothingStateIndex to {"chest": 6, "midriff": 5, "waist": 4, "thighs": 3, "knees": 2, "ankles": 1}>> <<set setup.clothingStateNextDown to { "chest": "midriff", "midriff": "waist", "waist": "thighs", "thighs": "knees", "knees": "ankles", "ankles": 0, }>> <<set setup.clothingStateNextUp to { "chest": 0, "midriff": "chest", "waist": "midriff", "thighs": "waist", "knees": "thighs", "ankles": "knees", }>> <<set setup.npcPenisRemarks to { "big": ["Your body feels weak at the sight.","You shudder at the sight.","You moan involuntarily at its size.","You gasp at its massive girth.","Your thighs feel weak as you look on."], "small": ["You stifle a laugh at the sight.","You smirk at the sight.","You stifle a chuckle at the sight.","You stifle a giggle at the sight.","You try not to laugh."] }>> <<set setup.breastsizes to ["", "budding", "tiny", "small", "pert", "modest", "full", "large", "ample", "massive", "huge", "gigantic", "enormous"]>> <<set setup.penisSizes to ["micro", "mini", "tiny", "small", "normal", "large", "enormous"]>> <<set setup.NPCVirginityTypes to {"anal": false, "oral": false, "penile": false, "vaginal": false, "handholding": false, "temple": false, "kiss": false}>> <<set setup.NPCVirginityTypesVirgin to {"anal": true, "oral": true, "penile": true, "vaginal": true, "handholding": true, "temple": false, "kiss": true}>> <<set setup.pharmacyItems to { "penis_reduction": { "type": "penis reduction", "name": "penis reduction pills", "price": 15000, }, "penis_growth": { "type": "penis growth", "name": "penis growth pills", "price": 15000, }, "penis_blocker": { "type": "penis blocker", "name": "penis growth blocker pills", "price": 20000, }, "breast_reduction": { "type": "breast reduction", "name": "breast reduction pills", "price": 15000, }, "breast_growth": { "type": "breast growth", "name": "breast growth pills", "price": 15000, }, "breast_blocker": { "type": "breast blocker", "name": "breast growth blocker pills", "price": 20000, }, "bottom_reduction": { "type": "bottom reduction", "name": "bottom reduction pills", "price": 15000, }, "bottom_growth": { "type": "bottom growth", "name": "bottom growth pills", "price": 15000, }, "bottom_blocker": { "type": "bottom blocker", "name": "bottom growth blocker pills", "price": 20000, }, "Anti-Parasite Cream": { "type": "Anti-Parasite Cream", "name": "anti-parasite cream", "price": 25000, }, "condoms": { "type": "condoms", "name": "condoms", "price": 6000, }, "pregnancy_test": { "type": "pregnancy test", "name": "pregnancy test", "price": 2500, }, "fertility_pills": { "type": "fertility booster", "name": "fertility booster", "price": 50000, }, "contraceptive_pills": { "type": "contraceptive", "name": "contraceptive", "price": 25000, }, "Morning_After_pill": { "type": "Morning After pill", "name": "Morning After pill", "price": 200, }, "breast_pump": { "type": "Breast Pump", "name": "breast pump", "price": 5000, }, }>> <<set setup.estateBlackjack to { /* stats don't go down, so you can consider the money to be a temporary bypass ("I have £452501558102 so I'll be fine if I lose"), while the stat checks give a "I have won 21958125 games, I won't lose" confidence boost */ /* primary requirements given which the player can choose a given ante */ "primaryRequirements": [ { "message": "Win at least 10 rounds of blackjack, or have £2,500 on you.", "check": "$estatePersistent.totalRoundsWon gte 10" }, { "message": "Win at least £500 worth of bets, or have £5,000 on you.", "check": "$estatePersistent.totalBetMoneyMade gte 50000" }, { "message": "Win at least £1,000 worth of bets, or have £10,000 on you.", "check": "$estatePersistent.totalBetMoneyMade gte 100000" }, { "message": "Win at least £2,500 worth of bets, or have £25,000 on you.", "check": "$estatePersistent.totalBetMoneyMade gte 250000" }, { "message": "Win at least £5,000 worth of bets, or have £50,000 on you.", "check": "$estatePersistent.totalBetMoneyMade gte 500000" }, { "message": "Win at least £10,000 worth of bets, or have £100,000 on you.", "check": "$estatePersistent.totalBetMoneyMade gte 1000000" } ], /* alternatively, the minimum amount of money you need to have for PC to be confident enough to risk betting it */ "confidenceMoney": [250000, 500000, 1000000, 2500000, 5000000, 10000000], /* low max bet usually is used by casinos to make sure players don't make more than the casino can pay out (or rather, makes it safer for the casino) however, there's also the fact that you can use low bets, or a small ratio between the min and max bet prevents the usage of the martingale strategy */ "betSteps": [100, 200, 500, 1000, 2000, 5000], "baseMaxBets": [2500, 5000, 10000, 25000, 50000, 100000], "anteSizes": [25000, 50000, 100000, 250000, 500000, 1000000], }>> <<set setup.parasiteTypesPerBodypart to { "nipples": ["none", "urchin", "slime"], "penis": ["none", "urchin", "slime"], "clit": ["none", "urchin", "slime"], "bottom": ["none", "urchin", "slime", "maggot"], "left_thigh": ["none", "maggot"], "right_thigh": ["none", "maggot"], "left_arm": ["none", "maggot"], "right_arm": ["none", "maggot"], "left_ear": ["none", "slime"], "right_ear": ["none", "slime"], "tummy": ["none", "urchin", "slime", "maggot"], }>> /*Note: Pregnancy - adjust as require and ensure that <<npcPregnancyUpdater>> is running in backComp*/ /*Should match with $NPCNameList*/ /*FOR `canBePregnant` DO NOT REMOVE FROM LIST ONCE ENABLED FOR OFFICAL VERSIONS, IT WILL DELETE EXISTING PREGNANCIES FOR NPCS*/ /*For `typesEnabled` only include pregnancy types that can be achieved ingame, parasites or their sub-types should never be included*/ <<set setup.pregnancy to { canBePregnant: ["Alex","Black Wolf","Great Hawk"], canImpregnatePlayer: ["Alex","Black Wolf","Great Hawk"], infertile: ["Bailey", "Leighton"], ignoresIncompleteCheck: ["Ivory Wraith"], typesEnabled: ["human" , "wolf", "wolfboy", "wolfgirl", "hawk", "harpy"], randomAlwaysKeep: ["wolf_cave"] }>> /* The list of art styles for the face. Please follow this convention: */ /* { "Name presented ingame to players": "actual value within the code / folder name" } */ <<set setup.faceStyleOptions to { "Traditional": "default" }>> /* The list of $facevariant options grouped by $facestyle. Please follow this convention: */ /* { "$facestyle value": */ /* { "Face variant name": "actual value / folder name" } */ /* } */ /* Please update whenever a new face variant or face style is added */ /* The first variant of a style should always be assigned the value "default" within the code, regardless of */ /* what it is presented as to players. As an example: players will see it called "Gentle" variant, but its value */ /* in code, and its folder name shall be "default" */ <<set setup.faceVariantOptions to { "default": { "Gentle": "default", "Catty": "catty", "Aloof": "aloof", "Sweet": "sweet" }, }>> <<set setup.badEndReasonText = { abductedMoor: "Abducted by Remy's goons on the moor", arrested: "Arrested by corrupt cops", asylumBlackWolf: "Rescued by the Black Wolf", asylumDischarged: "Discharged by Harper", asylumDischargedLabour: "Discharged by Harper after giving birth", asylumEden: "Rescued by Eden", asylumHospital: "Hospital bed examination", asylumHospital2: "Asked for an emergency appointment", asylumSabotage: "Escaped by sabotage", asylumTentacle: "Escaped through your mirror in the tentacle plains", asylumTentacleAngel: "Escaped by the tentacle plains with angelic power", cardCheating: "Caught cheating at cards", edenAccepted: "Accepted Eden", edenEscape: "Escaped", edenEscapeNight: "Escaped at night", edenHunted: "Hunted and caught by Eden", edenHuntedSubmitted: "Hunted and submitted to Eden", escaped: "Escaped", escapedSoaring: "Escaped by soaring away", kylarAbduction: "", kylarAbductionLeave: "Escaped", kylarAbductionRescued: "Rescued by Jordan and Bailey", kylarAbductionReleased: "Released by Kylar", kylarStockholm: "Accepted by Kylar", kylarStockholmRefused: "Accepted by Kylar", labour: "Went into labour", minesEscapedBasement: "Found an entrance to a basement", minesEscapedDrain: "Found the town drains", minesEscapedPassoutDrain: "Passed out and found the town drains", minesSold: "Sold to the mines", poundMistake: "Mistaken for a dog", poundSubmitted: "Submitted after freeing the black dog", poundCaught: "Caught after freeing the black dog", poundEscapeCages: "Escaped after opening all of the cages", poundEscapeDoor: "Escaped through the metal door", poundEscapeWon: "Won the pound show", prisonWren: "Escaped on Wren's boat", prisonWrenKylar: "Escaped on Wren's boat with Kylar", prisonRut: "Passed out in the rut", prisonSentenced: "Sentenced to prison", prisonServed: "Served your sentence", prisonSwimming: "Escaped by swimming away", soldBailey: "Sold by Bailey", soldBaileyRobin: "Sold with Robin by Bailey", soldBriar: "Sold out by Briar", tempPassout: "Caught when passed out due to extreme temperatures", uDungeonDefeated: "Defeated molester and escaped", uDungeonDumped: "Dumped down a hole", uDungeonLake: "Escaped into the underground lake", uDungeonLakeRobin: "Escaped into the underground lake with Robin", uDungeonOutran: "Outran the hunters", uDungeonOutranRobin: "Outran the hunters with Robin", uDungeonPolice: "Abducted while trying to escape the police", uDungeonPresented: "Escaped while being presented", uDungeonSaved: "Saved by a plant person", uFarmBetrayedLost: "Lost a fight after being betrayed by the van owner", uFarmBetrayed: "Betrayed by the van owner", uFarmEscaptedCentaurKiss: "Escaped after kissing the centaur", uFarmEscaptedCentaurThank: "Escaped after thanking the centaur", uFarmEscaptedHorse: "Escaped on a horse", uFarmEscaptedNightRiver: "Escaped into the river at night", uFarmEscaptedNightHole: "Escaped at night after digging a hole", wolfCaveCaptured: "", wolfCaveAccepted: "Accepted as a member of the pack", wolfCaveDiggingAHole: "Escaped after digging a hole", wolfCaveDefeated: "Defeated the pack", wolfCaveFeared: "Feared enough to walk away", wolfCaveTrusted: "Trusted enough to walk away", teleportCheater: "Teleported out. You cheater.", }>> <</widget>>
<<widget "variablesVersionUpdate">> /* * * * * * * * * * * * * * * * * * * OLD BACKWARDS COMPATIBILITY CODE * EDIT widget "backComp" FOR VERSIONS 0.3.4.8+ */ <<if $objectVersion is undefined>> <<set $objectVersion to {}>> <</if>> <<if $saveVersions is undefined>> <<set $saveVersions to [StartConfig.version]>> <<elseif $saveVersions.last() isnot StartConfig.version>> <<set $saveVersions.push(StartConfig.version)>> <</if>> <<if $saveId is undefined>> <<set $saveId to random(10000, 99999)>> <</if>> <<if $saveName is undefined>> <<set $saveName to "">> <</if>> <<if $player is undefined>> <<set $player to {}>> <<set $player.sex to $playergender>> <<set $player.gender to $playergender>> <<set $player.gender_appearance to $playergenderappearance>> <<unset $playergenderappearance>> <</if>> <<if $player.appearance isnot undefined>> <<set $player.gender_appearance to $player.appearance>> <<run delete $player.appearance>> <</if>> <<if $toplessgender isnot undefined>> <<set $player.gender_appearance_without_overwear to $toplessgender>> <<unset $toplessgender>> <</if>> <<if $player.virginity is undefined>> <<set $player.virginity to {anal:true,oral:true,penile:true,vaginal:true,temple:false,handholding:true,kiss:true}>> <<if $analvirginity is 0>> <<set $player.virginity.anal to false>> <</if>> <<if $oralvirginity is 0>> <<set $player.virginity.oral to false>> <</if>> <<if $penilevirginity is 0>> <<set $player.virginity.penile to false>> <</if>> <<if $vaginalvirginity is 0>> <<set $player.virginity.vaginal to false>> <</if>> <</if>> <<if $player.virginity.handholding is undefined>> <<set $player.virginity.handholding to true>> <<set $player.virginity.kiss to true>> <</if>> <<if $analvirginity isnot undefined>> <<unset $analvirginity>> <<unset $oralvirginity>> <<unset $penilevirginity>> <<unset $vaginalvirginity>> <<unset $temple_virginity>> <</if>> <<if $player.penisExist is undefined and $penisexist isnot undefined>> <<set $player.penisExist to ($penisexist is 1 ? true : false)>> <<set $player.vaginaExist to ($vaginaexist is 1 ? true : false)>> <</if>> <<if $player.ballsExist is undefined>> <<set $player.ballsExist to ($player.gender isnot "f")>> <</if>> <<if $clothing_update is undefined>><<set $clothing_update to 1>> <<clothinginit>> <<givestartclothing>> <</if>> <<if $outfit_update is undefined or $outfit_update lt 3>><<set $outfit_update to 3>> <<for _i to 0; _i lt $outfit.length; _i++>> <<if $outfit[_i].colors is undefined>> <<set $outfit[_i].colors to false>> <</if>> <<if $outfit[_i].over_upper is undefined>> <<set $outfit[_i].over_upper to "naked">> <<set $outfit[_i].over_lower to "naked">> <<set $outfit[_i].over_head to "naked">> <</if>> <<if $outfit[_i].type[1]>> <<set $outfit[_i].type[0] to $outfit[_i].type[1]>> <<set $outfit[_i].type.deleteAt(1)>> <</if>> <</for>> <</if>> <<if $NPCName>> <<if $NPCName[21].nam is "Remy" and $NPCName[22].nam is "Alex">>/*0.2.20.0 fix for Black Wolf/Quinn/Niki only being partially implemented in rare cases.*/ <<set $NPCNameList.delete("Black Wolf", "Quinn", "Niki", "Remy", "Alex")>> <<set $NPCName.deleteAt(21, 22)>>/*Resets Remy and Alex to ensure proper array order.*/ <</if>> <</if>> <<if $npcNamedVersion gte 2>> <<updateNewNamedNpcs>> <</if>> /* <<clothing_data>> Keeps clothing data up to date with new and changed items */ /* unnecessary because it is run in variables-static every time game is loaded */ <<if $npcListVersion isnot 2>> <<npcList>> <</if>> <<npcNamedUpdate>> /*Updates old Named NPC code to new system*/ <<if $availableMapsVersion isnot 3>> <<mapLocations>> <</if>> <<unset $avaliableMapsVersion>> <<if $parasite_update is undefined>><<set $parasite_update to 1>> <<parasiteinit>> <<if $penisparasite is 1>><<unset $penisparasite>> <<parasite penis urchin>> <<set $parasitestat -= 1>> <</if>> <<if $clitparasite is 1>><<unset $clitparasite>> <<parasite clit urchin>> <<set $parasitestat -= 1>> <</if>> <<if $chestparasite is 1>><<unset $chestparasite>> <<parasite nipples urchin>> <<set $parasitestat -= 1>> <</if>> <</if>> <<if $pubwhore is undefined>> <<set $pubwhore to 0>> <</if>> <<if $masturbationstat is undefined>> <<set $masturbationstat to 0>> <<set $masturbationorgasmstat to 0>> <<set $masturbationtimestat to 0>> <<set $masturbationorgasm to 0>> <</if>> <<if $blackchance is undefined>> <<set $blackchance to 10>> <</if>> <<if $angel is undefined>> <<set $angel to 0>> <<set $angelbuild to 0>> <</if>> <<if $angelBanish is undefined>> <<set $angelBanishMax to 0>> <<set $angelBanish to 0>> <<if $angel gte 4>> <<set $angelBanishMax to Math.floor($angelbuild / 10)>> <<set $angelBanish to $angelBanishMax>> <</if>> <</if>> <<if $demon is undefined>> <<set $demon to 0>> <</if>> <<if $demonbuild is undefined>> <<set $demonbuild to 0>> <</if>> <<if $demonabsorb is undefined>> <<set $demonabsorb to 0>> <</if>> <<if $upperwet is undefined>> <<set $upperwet to 0>> <<set $upperwetstage to 0>> <</if>> <<if $lowerwet is undefined>> <<set $lowerwet to 0>> <<set $lowerwetstage to 0>> <<set $underlowerwet to 0>> <<set $underlowerwetstage to 0>> <<set $underupperwet to 0>> <<set $underupperwetstage to 0>> <<set $overlowerwet to 0>> <<set $overlowerwetstage to 0>> <<set $overupperwet to 0>> <<set $overupperwetstage to 0>> <</if>> <<if $schoolevent is undefined>> <<set $schoolevent to 0>> <<set $schooleventtimer to 5>> <</if>> <<if $stressmax is undefined or $stressmax is 10010>> <<set $stressmax to 10000>> <</if>> <<if $tirednessmax is undefined>> <<set $tirednessmax to 2000>> <</if>> <<if $physiquemax is undefined>> <<set $physiquemax to 20000>> <</if>> <<if $beautymax is undefined>> <<set $beautymax to 10000>> <</if>> <<if $malechance is undefined>> <<set $malechance to 50>> <<if $genderdisable is "f">> <<set $malechance to 100>> <<elseif $genderdisable is "m">> <<set $malechance to 0>> <<elseif $genderdisable is 90>> <<set $malechance to 90>> <<elseif $genderdisable is 10>> <<set $malechance to 10>> <</if>> <</if>> <<if $transformdisable is undefined>> <<set $transformdisable to "f">> <</if>> <<if $robindebtlimit is undefined and $docksrobinintro is 1>> <<set $robindebtlimit to 5>> <<if $robindebt gte $robindebtlimit>> <<set $robindebt to ($robindebtlimit - 1)>> <</if>> <</if>> <<if $robinrescued isnot undefined>> <<set $robindebtknown to 1>> <</if>> <<if $averygender isnot undefined>> <<for _npc range ["avery", "morgan", "kylar", "blackwolf"]>> <<run delete V[_npc + "gender"]>> <<run delete V[_npc + "genitals"]>> <</for>> <</if>> <<if $blackwolfmonster is undefined>> <<rng>> <<if $monsterchance gte $rng>> <<set $blackwolfmonster to 1>> <<else>> <<set $blackwolfmonster to 0>> <</if>> <</if>> <<if $genderknown is undefined>> <<set $genderknown to ["Robin", "Bailey"]>> <</if>> <<if $waterwash is undefined>> <<set $waterwash to 0>> <</if>> <<if C.npc.Whitney.state is undefined and C.npc.Whitney.init is 1>> <<set C.npc.Whitney.state to "active">> <<set C.npc.Whitney.dom to 10>> <</if>> <<if $whitneycollar is 1>> <<earnFeat "Owned">> <</if>> <<if $bullytimeroutside is undefined>> <<set $bullytimeroutside to 0>> <</if>> <<if $bullyeventoutside is undefined>> <<set $bullyeventoutside to 0>> <</if>> <<if $whitneylust is undefined>> <<set $whitneylust to 0>> <</if>> <<if $upperoutfitcasual is undefined>> <<if $player.gender is "m">> <<set $upperoutfitcasual to "t-shirt">> <<set $loweroutfitcasual to "shorts">> <<set $underoutfitcasual to "Y fronts">> <<set $upperoutfitschool to "school shirt">> <<set $loweroutfitschool to "school shorts">> <<set $underoutfitschool to "Y fronts">> <<else>> <<set $upperoutfitcasual to "sundress">> <<set $loweroutfitcasual to "sundress skirt">> <<set $underoutfitcasual to "plain panties">> <<set $upperoutfitschool to "school shirt">> <<set $loweroutfitschool to "school skirt">> <<set $underoutfitschool to "plain panties">> <</if>> <</if>> <<if $famesex is undefined>> <<set $famesex to 0>> <</if>> <<if $famerape is undefined>> <<set $famerape to 0>> <</if>> <<if $pillsconsumed is undefined>> <<set $pillsconsumed to 0>> <</if>> <<if $famegood is undefined>> <<set $famegood to 0>> <</if>> <<if $famebusiness is undefined>> <<set $famebusiness to 0>> <</if>> <<if $arousalmax is undefined>> <<set $arousalmax to 10000>> <</if>> <<if $deviancy is undefined>> <<set $deviancy to 0>> <</if>> <<if $squidcount is undefined>> <<set $squidcount to 0>> <</if>> <<if $schoolevent is -1>> <<set $schoolevent to 1>> <</if>> <<if $baileydefeated is undefined>> <<set $baileydefeated to 0>> <<set $baileydefeatedlewd to 0>> <<set $baileydefeatedchain to 0>> <</if>> <<if $soldCount is undefined>> <<if $rentsale isnot undefined>> <<set $soldCount to $rentsale>> <<else>> <<set $soldCount to 0>> <</if>> <</if>> <<if $robinmoney is undefined>> <<set $robinmoney to 300>> <</if>> <<if $robinPayout is undefined>> <<set $robinPayout to 0>> <</if>> <<if $scienceproject is undefined>> <<set $scienceproject to "none">> <</if>> <<if $yeardays is undefined>> <<set $yeardays to 0>> <</if>> <<if $mathsproject is undefined>> <<set $mathsproject to "none">> <</if>> <<if $gamemode is undefined>> <<set $gamemode to "normal">> <</if>> <<if $alluremod is undefined>> <<set $alluremod to 1>> <</if>> <<if $oxygenmax is undefined>> <<set $oxygenmax to 1200>> <<set $oxygen to 1200>> <</if>> <<if $suffocating is undefined>> <<set $suffocating to 0>> <</if>> <<if $asphyxiaLvl is undefined>> <<set $asphyxiaLvl to 3>> <</if>> <<if $chokeorgasm is undefined>> <<set $chokeorgasm to 0>> <</if>> <<if $NudeGenderDC is undefined or $NudeGenderDC gt 2>> <<set $NudeGenderDC to 2>> <</if>> <<if $hallucinogen is undefined>> <<set $hallucinogen to 0>> <</if>> <<if $antiquemoney is undefined>> <<set $antiquemoney to 0>> <<set $antiquemoneyhistory to 0>> <<if $scienceproject is "done" or $scienceproject is "won">> <<set $scienceproject to "none">> <</if>> <</if>> <<if $controlmax is undefined>> <<set $controlmax to 1000>> <<if $control is 1>> <<set $control to 1000>> <<else>> <<set $control to 0>> <</if>> <</if>> <<if $background is undefined>> <<set $background to "waif">> <</if>> <<if $orgasmtrait is undefined>> <<set $orgasmtrait to 0>> <</if>> <<if $ejactrait is undefined>> <<set $ejactrait to 0>> <</if>> <<if $molesttrait is undefined>> <<set $molesttrait to 0>> <</if>> <<if $rapetrait is undefined>> <<set $rapetrait to 0>> <</if>> <<if $bestialitytrait is undefined>> <<set $bestialitytrait to 0>> <</if>> <<if $tentacletrait is undefined>> <<set $tentacletrait to 0>> <</if>> <<if $voretrait is undefined>> <<set $voretrait to 0>> <</if>> <<if $milkdranktrait is undefined>> <<set $milkdranktrait to 0>> <</if>> <<if $alluretest is undefined>> <<set $alluretest to 0>> <</if>> <<if $whitneypantiescheck is undefined>> <<set $whitneypantiescheck to 0>> <</if>> <<if $assertiveaction is 0 or $assertiveaction is undefined>> <<set $assertiveaction to "trauma">> <</if>> <<if $famepark is undefined>> <<set $famepark to 0>> <</if>> <<if $beastmalechance is undefined>> <<set $beastmalechance to 80>> <</if>> <<if StartConfig.enableImages is false>> <<set $images to 0>> <</if>> <<if $beastgenderoverride is undefined>> <<set $beastgenderoverride to 0>> <</if>> <<if $speechcycle is undefined>> <<set $speechcycle to 0>> <</if>> <<if $npcspeechcycle is undefined>> <<set $npcspeechcycle to 0>> <</if>> <<if $breastfeedingdisable is undefined>> <<set $breastfeedingdisable to "f">> <</if>> <<if $real_gender isnot undefined>> <<set $player.gender to $real_gender>> <<unset $real_gender>> <</if>> <<if $physiquesize is undefined>> <<set $physiquesize to (1000 * $devlevel)>> <<if $physique gte 1>> <<else>> <<set $physique to $physiquemax>> <</if>> <</if>> <<if $fringelength is undefined>> <<set $fringelength to 200>> <<set $hairtype to "default">> <<set $fringetype to "default">> <</if>> <<if $famescrap is undefined>> <<set $famescrap to 0>> <</if>> <<if $famepimp is undefined>> <<set $famepimp to 0>> <</if>> <<if $spray is undefined>> <<set $spray to 1>> <</if>> <<if $spraymax is undefined>> <<set $spraymax to 1>> <</if>> <<if $spraystat is undefined>> <<set $spraystat to 0>> <</if>> <<if $silhouettedisable is undefined>> <<set $silhouettedisable to "f">> <</if>> <<if $watersportsdisable is undefined>> <<set $watersportsdisable to "f">> <</if>> <<if $averyrage isnot undefined>> <<unset $averyrage>> <</if>> <<if (C.npc.Avery.state is undefined or C.npc.Avery.state is "") and C.npc.Avery.init is 1>> <<npcset Avery state "active">> <</if>> <<if (C.npc.Robin.state is undefined or C.npc.Robin.state is "") and C.npc.Robin.init is 1>> <<npcset Robin state "active">> <</if>> <<if $catbuild is undefined>> <<set $catbuild to 0>> <<set $cat to 0>> <</if>> <<if $pain is undefined>> <<set $pain to 0>> <</if>> <<if $hairupdate isnot 1>> <<set $hairupdate to 1>> <<if $hairlength gte 900>> <<set $hairlengthstage to "feet">> <<elseif $hairlength gte 700>> <<set $hairlengthstage to "thighs">> <<elseif $hairlength gte 600>> <<set $hairlengthstage to "navel">> <<elseif $hairlength gte 400>> <<set $hairlengthstage to "chest">> <<elseif $hairlength gte 200>> <<set $hairlengthstage to "shoulder">> <<else>> <<set $hairlengthstage to "short">> <</if>> <<if $fringelength gte 900>> <<set $fringelengthstage to "feet">> <<elseif $fringelength gte 700>> <<set $fringelengthstage to "thighs">> <<elseif $fringelength gte 600>> <<set $fringelengthstage to "navel">> <<elseif $fringelength gte 400>> <<set $fringelengthstage to "chest">> <<elseif $fringelength gte 200>> <<set $fringelengthstage to "shoulder">> <<else>> <<set $fringelengthstage to "short">> <</if>> <</if>> <<if $dockhours is undefined>> <<set $dockhours to 0>> <</if>> <<if $infinitespray is undefined>> <<set $infinitespray to 0>> <</if>> <<if $hairtype is "braided ponytail">> <<set $hairtype to "ponytail">> <</if>> <<if $monsterhallucinations is undefined>> <<set $monsterhallucinations to "t">> <<set $monsterchance to 50>> <</if>> <<if $policemolestation is undefined>> <<set $policemolestation to 0>> <</if>> <<if $player.penissize is undefined>> <<set $player.penissize to 2>> <<set $penissizemax to 4>> <<set $penisgrowthtimer to 700>> <</if>> <<if $penissizemin is undefined>> <<set $penissizemin to -2>> <</if>> <<if $insecurity_penis_tiny is undefined>> <<set $insecurity_penis_tiny to 0>> <<set $insecurity_penis_small to 0>> <<set $insecurity_penis_big to 0>> <<set $insecurity_breasts_tiny to 0>> <<set $insecurity_breasts_small to 0>> <<set $insecurity_breasts_big to 0>> <<set $acceptance_penis_tiny to 0>> <<set $acceptance_penis_small to 0>> <<set $acceptance_penis_big to 0>> <<set $acceptance_breasts_tiny to 0>> <<set $acceptance_breasts_small to 0>> <<set $acceptance_breasts_big to 0>> <</if>> <<if $willpower is undefined>> <<set $willpower to 200>> <<set $willpowermax to 1000>> <</if>> <<if $fringetype is "swept back">> <<set $fringetype to "swept right">> <</if>> <<if $museuminterest is undefined>> <<set $museuminterest to 0>> <</if>> <<if $position is undefined>> <<set $position to 0>> <</if>> <<if $wear_upper is undefined>> <<set $wear_upper to "none">> <<set $wear_lower to "none">> <<set $wear_under_upper to "none">> <<set $wear_under_lower to "none">> <<set $wear_head to "none">> <<set $wear_face to "none">> <<set $wear_neck to "none">> <<set $wear_legs to "none">> <<set $wear_feet to "none">> <<set $wear_genitals to "none">> <<set $wear_outfit to "none">> <</if>> <<if $wear_over_upper is undefined>> <<set $wear_over_upper to "none">> <<set $wear_over_lower to "none">> <<set $wear_over_head to "none">> <</if>> <<if $no_underwear is undefined>> <<set $no_underwear to 0>> <</if>> <<if $arousal is undefined>> <<set $arousal to 0>> <</if>> <<if $breastsensitivity is undefined>> <<set $breastsensitivity to 1>> <</if>> <<if $genitalsensitivity is undefined>> <<set $genitalsensitivity to 1>> <</if>> <<if $hairtype is "swept right">> <<set $hairtype to "swept left">> <</if>> <<if $headnodetention is 1 or $headmoney is 1 or $headphotoshoot is 1>> <<set $headblackmailed to 1>> <</if>> <<physicalAdjustmentsInit>> <<if $tryOn is undefined>> <<tryOnInit>> <</if>> <<if $carryblock is undefined>> <<set $carryblock to 0>> <</if>> <<if $milk_drank_stat is undefined>> <<set $milk_drank_stat to 0>> <<set $milkdranktrait to 0>> <<set $breast_mod to 0>> <</if>> <<if $ballssize is undefined>> <<set $ballssize to $player.penissize>> <<set $ballssizemax to $penissizemax>> <<set $ballssizemin to $penissizemin>> <<set $ballsgrowthtimer to $penisgrowthtimer>> <</if>> <<if $player.bottomsize is undefined>> <<set $player.bottomsize to 2>> <<set $bottomsizemax to 8>> <<set $bottomsizemin to 0>> <<set $bottomsizeold to 0>> <<set $bottomgrowthtimer to 350>> <</if>> <<if $workouts is undefined>> <<set $workouts to 0>> <</if>> <<if $sewingKit is undefined>> <<set $sewingKit to 0>> <</if>> <<if $penis_mod is undefined>> <<set $penis_mod to 0>> <</if>> <<if $tanned is undefined>> <<set $tanned to 0>> <</if>> <<if $avery_penis_size isnot undefined>> <<for _npc range ["avery", "bailey", "charlie", "darryl", "doren", "eden", "gwylan", "harper", "jordan", "kylar", "landry", "leighton", "mason", "morgan", "river", "robin", "sam", "sirris", "whitney", "winter", "zephyr", "riley"]>> <<run delete V[_npc + "_penis_size"]>> <</for>> <</if>> <<if $breast_mod lt -12>> <<set $breast_mod to -12>> <</if>> <<if $breast_mod gt 12>> <<set $breast_mod to 12>> <</if>> <<if $shopDefaults is undefined>> <<set $shopDefaults to { "color":"black", "colorSet":null, "secColor":"black", "secColorSet":null, "disableReturn": false }>> <</if>> <<if $shopDefaults.alwaysBackToShopButton is undefined>> <<set $shopDefaults.alwaysBackToShopButton to false>> <</if>> <<if $shopDefaults.colourItems is undefined>> <<set $shopDefaults.colourItems = "random">> <</if>> <<if $shopDefaults.mannequinGender is undefined>> <<set $shopDefaults.mannequinGender = "same">> <</if>> <<if $shopDefaults.noHelp is undefined>> <<set $shopDefaults.compactMode to false>> <<set $shopDefaults.mannequinGenderFromClothes to false>> <<set $shopDefaults.highContrast to false>> <<set $shopDefaults.noTraits to false>> <<set $shopDefaults.noHelp to false>> <</if>> <<if $tentacles is undefined>> <<set $tentacles to { 0: null, 1: null, 2: null, 3: null, 4: null, 5: null, 6: null, 7: null, 8: null, 9: null, 10: null, 11: null, 12: null, 13: null, 14: null, 15: null, 16: null, 17: null, 18: null, 19: null, 20: null, "active": 0, "max": 0 }>> <</if>> <<if $npclovehigh isnot 10>> <<set $npclovehigh to 10>> <</if>> <<if $npclovelow isnot -10>> <<set $npclovelow to -10>> <</if>> <<if $npcdomhigh isnot 10>> <<set $npcdomhigh to 10>> <</if>> <<if $npcdomlow isnot -10>> <<set $npcdomlow to -10>> <</if>> <<if $scienceproject is "ongoing" and $sciencephallus is undefined>> <<set $sciencephallusready to 0>> <<set $sciencephallus to 0>> <<set $sciencephalluspenis to 0>> <<set $sciencephallusclit to 0>> <</if>> <<if $fallenangel is 2>> <<set $angelbuild to 0>> <</if>> <<if ($demon gte 6 or ($transformationParts.demon.wings isnot "hidden" and $transformationParts.demon.wings isnot "disabled"))>> <<set $demonFeat to true>> <</if>> <<if $orphan_hope is undefined>> <<set $orphan_hope to 0>> <</if>> <<if $orphan_reb is undefined>> <<set $orphan_reb to 0>> <</if>> <<if $masochism is undefined>> <<set $masochism to 0>> <<set $masochism_level to 0>> <</if>> <<if $per_npc is undefined>> <<set $per_npc to {}>> <</if>> <<if $lessonmissedtext is undefined>> <<set $lessonmissedtext to 0>> <<set $lessonmissed to 0>> <</if>> <<if $home_event_timer is undefined>> <<set $home_event_timer to 0>> <<set $home_event_count to 0>> <</if>> <<if $gwylangender is undefined>> <<if $malechance lt random(1, 100)>> <<set $gwylangender to "f">> <<else>> <<set $gwylangender to "m">> <</if>> <</if>> <<if $gwylangenitals is undefined>> <<if $gwylangender is "m">> <<if random(0, 99) gte $cbchance>> <<set $gwylangenitals to "penis">> <<else>> <<set $gwylangenitals to "vagina">> <</if>> <<elseif $gwylangender is "f">> <<if random(0, 99) gte $dgchance>> <<set $gwylangenitals to "vagina">> <<else>> <<set $gwylangenitals to "penis">> <</if>> <</if>> <</if>> <<if $spiderdisable is undefined>> <<set $spiderdisable to "f">> <</if>> <<if $gloryholestat is undefined>> <<set $gloryholestat to 0>> <</if>> <<if $brothel_basement_price is undefined>> <<set $brothel_basement_price to 1000>> <</if>> <<if $brothelshowdata is undefined>> <<set $brothelshowdata to { counts:{ agreed:0, done:0 }, type:"none", intro:0, done:false, missed:false }>> <<if $brothelshow isnot undefined>> <<set $brothelshowdata.type to $brothelshow>> <<unset $brothelshow>> <</if>> <<if $brothelshowintro isnot undefined>> <<set $brothelshowdata.intro to !!$brothelshowintro>> <<unset $brothelshowintro>> <</if>> <<if $brothelshowdone isnot undefined>> <<set $brothelshowdata.done to !!$brothelshowdone>> <<unset $brothelshowdone>> <</if>> <<if $brothelshowmissed isnot undefined>> <<set $brothelshowdata.missed to !!$brothelshowmissed>> <<unset $brothelshowmissed>> <</if>> <</if>> <<if $money is undefined>> <<set $money to 0>> <</if>> <<if $syndromeeden is 1 and $edenshrooms is undefined>> <<unset $syndromeeden>> <</if>> <<if $initnpcfix is undefined>> <<set $initnpcfix to 1>>/*Applies missing NPC settings for saves before 0.2.5*/ <<initnpcgender>> <</if>> <<if C.npc.Kylar.init is 1 and C.npc.Kylar.state is "">> <<set C.npc.Kylar.init to 0>> <</if>> <<if $chestuse is undefined>> <<set $cheststate to 0>> <</if>> <<if $lactating is undefined>>/*Updating to 0.2.7*/ <<set $lactating to 0>> <<set $lactation_pressure to 0>> <<set $milk_amount to 30>> <<set $milk_volume to 30>> <<set $milk_max to 3000>> <<if $penisexist is 1>> <<set $semen_amount to 90>> <<set $semen_volume to 90>> <<else>> <<set $semen_amount to 0>> <<set $semen_volume to 0>> <</if>> <<set $semen_max to 3000>> <<set $milk_produced_stat to 0>> <<set $semen_produced_stat to 0>> <<set $masturbation_semen to 0>> <<set $masturbation_milk to 0>> <<set $bunstat to 0>> <<set $famesocial to 0>> <</if>> <<if $creamstat is undefined>> <<set $creamstat to 0>> <<set $lube_produced_stat to 0>> <</if>> <<if $chef_sus is undefined>> <<set $chef_sus to 0>> <</if>> <<if $pillory is undefined>> <<set $pillory to {}>> <</if>> <<if $pillory.tenant is undefined>> /* Pillory related */ <<setup_pillory>> <</if>> <<if ndef $police_intro>> /* Police hack related*/ <<set $police_intro to 0>> <<set $police_access_card to 0>> <<set $police_hack to 0>> <<set $pub_hack_job to 0>> <<set $hacker_tasks to []>> <</if>> <<if ndef $framed>> <<set $framed to 0>> <</if>> /* brothel */ <<if ndef $brothel_raid>> <<set $brothel_raid to 0>> <</if>> <<if ndef $brothel_raid_day>> <<set $brothel_raid_day to 0>> <</if>> <<if ndef $brothel_thief>> <<set $brothel_thief to 0>> <</if>> <<if $o_long_and_beautiful is undefined>> /*'long hair' girl related*/ <<set $o_long_and_beautiful to 0>> <<set $hy_sibling to 0>> <<set $hy_parent to 0>> <<set $long_hair_meet_day to 9999>> <<set $misbehaviour_day to 9999>> <</if>> <<if $objectVersion.chastity lt 3 or $objectVersion.chastity is undefined>> <<if $worn.genitals is undefined>> <<set $worn.genitals to clone(setup.clothes.genitals[0])>> <<set $carried.genitals to clone(setup.clothes.genitals[0])>> <</if>> <<if $worn.under_lower.type.includes("chastity")>> <<set $worn.genitals to clone($worn.under_lower)>> <<set $worn.under_lower to clone(setup.clothes.under_lower[0])>> <</if>> <<if $worn.genitals.name isnot "naked">> <<set $worn.genitals.hideUnderLower to setup.clothes.genitals[1].hideUnderLower>> <<set $worn.genitals.type to setup.clothes.genitals[1].type>> <</if>> <<set $objectVersion.chastity to 3>> <</if>> <<if $showCaptionText is undefined>> <<set $showCaptionText to true>> <</if>> <<if $parasite.types is undefined>> <<set _oldparasite to $parasite>> <<parasiteinit>> <<for _part, _type range _oldparasite>> <<if _type.name isnot undefined>> <<set $parasite[_part].name to _type.name>> <<set $parasite[_type.name].push(_part.replace(/_/g, " "))>> <</if>> <</for>> <</if>> <<if $slimeSleepEvent is undefined>> <<set $slimeSleepEvent to 0>> <</if>> <<if $parasite.left_thigh.name is undefined>> <<removeparasite left_thigh>> <</if>> <<if $parasite.right_thigh.name is undefined>> <<removeparasite right_thigh>> <</if>> <<if $parasite.left_arm.name is undefined>> <<removeparasite left_arm>> <</if>> <<if $parasite.right_arm.name is undefined>> <<removeparasite right_arm>> <</if>> <<if $objectVersion.feats lt 1 or $objectVersion.feats is undefined>> <<set $feats to { "locked":false, "soft":false, "allSaves":{}, "currentSave":{}, "filter":"All" }>> <<set $objectVersion.feats to 1>> <</if>> <<if ($cheatdisable is "f" and !$debug) or $locked is true>> <<run delete $locked>> <<set $feats.locked to true>> <</if>> <<if $smuggler_location is undefined>> <<set $smuggler_location to "sewer">> <<set $smuggler_timer to 0>> <<set $smuggler_stolen_stat to 0>> <</if>> <<if $gamemode is "soft" or $alluremod lt 1>> <<set $feats.soft to true>> <</if>> <<updateFeats>> <<if $straponchance is undefined>> <<set $straponchance to 0>> <</if>> <<if $lastWardrobeSlot is undefined>> <<set $lastWardrobeSlot to "head">> <</if>> <<if $objectVersion.customColors lt 4 or $objectVersion.customColors is undefined>> <<if $customColors is undefined>> <<set $customColors to { presets:{}, action: "set", currentType: "primary", color:{primary:0, secondary:0}, saturation:{primary:1, secondary:1}, brightness:{primary:1, secondary:1}, value:{primary:100, secondary:100} }>> <</if>> <<if $customColors.contrast is undefined>> <<set $customColors.contrast to{primary:1, secondary:1}>> <</if>> <<if $customColors.sepia is undefined>> <<set $customColors.sepia to{primary:0, secondary:0}>> <</if>> <<set $objectVersion.customColors to 4>> <</if>> <<if $objectVersion.customColors lt 5 or $objectVersion.customColors is undefined>> <<if $customColors.value is undefined>> <<set $customColors.value to {primary:100, secondary:100}>> <</if>> <<set $objectVersion.customColors to 5>> <</if>> <<if $swarm is undefined or $swarm.type is undefined>> <<set $swarm to { "type":0, "name":0, "move":0, "spill":0, "steady":0, "amount":{}, "data":{} }>> <</if>> <<if $bodypart_number is undefined>> <<bodywriting_init>> <</if>> <<if $newlyWritten is undefined and $combat is 1>> <<set $newlyWritten to []>> <</if>> <<wetness_init>> <<if $player.gender_appearance_factors is undefined>> <<set $player.gender_appearance_factors to []>> <</if>> <<if $player.gender_appearance_without_overwear_factors is undefined>> <<set $player.gender_appearance_without_overwear_factors to []>> <</if>> <<if $player.gender_posture is undefined>> <<if $background.crossdresser is true>> <<if $player.gender is "f">> <<set $player.gender_posture to "m">> <<elseif $player.gender is "m">> <<set $player.gender_posture to "f">> <</if>> <<else>> <<set $player.gender_posture to "n">> <</if>> <</if>> <<if $player.femininity is undefined>> <<set $player.femininity to 0>> <</if>> <<if $player.femininity_without_overwear is undefined>> <<set $player.femininity_without_overwear to 0>> <</if>> <<if $player.condom is undefined>> <<set $player.condom to false>> <<set $condomchance to 50>> <<set $condomautochance to 50>> <</if>> <<unset $clothes>> <<if $cat gte 1 or $wolfgirl gte 1 or $cow gte 1 or $harpy gte 1 or $bunny gte 1>> <<set $physicalTransform to 1>> <<else>> <<set $physicalTransform to 0>> <</if>> <<if $demon gte 1 or $angel gte 1 or ($fallenangel gte 2 or ($transformationParts.fallenAngel.wings isnot "hidden" and $transformationParts.fallenAngel.wings isnot "disabled"))>> <<set $specialTransform to 1>> <<else>> <<set $specialTransform to 0>> <</if>> <<unset $transformed>> <<if $backgroundTraits is undefined>> <<set $backgroundTraits to []>> <<if $background.nerd is true>> <<set $backgroundTraits.push("nerd")>> <</if>> <<if $background.athlete is true>> <<set $backgroundTraits.push("athlete")>> <</if>> <<if $background.delinquent is true>> <<set $backgroundTraits.push("delinquent")>> <</if>> <<if $background.promiscuous is true>> <<set $backgroundTraits.push("promiscuous")>> <</if>> <<if $background.exhibitionist is true>> <<set $backgroundTraits.push("exhibitionist")>> <</if>> <<if $background.deviant is true>> <<set $backgroundTraits.push("deviant")>> <</if>> <<if $background.beautiful is true>> <<set $backgroundTraits.push("beautiful")>> <</if>> <<if $background.crossdresser is true>> <<set $backgroundTraits.push("crossdresser")>> <</if>> <<if $background.plantlover is true>> <<set $backgroundTraits.push("plantlover")>> <</if>> <</if>> <<if Array.isArray($rebuy_success) is false>> <<set $rebuy_failure to []>> <<set $rebuy_success to []>> <</if>> <<if $dissociation is undefined>> <<set $dissociation to 0>> <</if>> <<if $worn.over_upper is undefined>> <<set $worn.over_upper to clone(setup.clothes.over_upper[0])>> <<set $worn.over_lower to clone(setup.clothes.over_lower[0])>> <<set $worn.over_head to clone(setup.clothes.over_head[0])>> <<set $carried.over_upper to clone(setup.clothes.over_upper[0])>> <<set $carried.over_lower to clone(setup.clothes.over_lower[0])>> <<set $carried.over_head to clone(setup.clothes.over_head[0])>> <<set $wardrobe.over_upper to []>> <<set $wardrobe.over_lower to []>> <<set $wardrobe.over_head to []>> <<set $store.over_upper to []>> <<set $store.over_lower to []>> <<set $store.over_head to []>> <</if>> <<if $wardrobe.over_head is undefined>> <<set $wardrobe.over_head to []>> <</if>> <<if $worn.hands is undefined>> <<set $worn.hands to clone(setup.clothes.hands[0])>> <<set $carried.hands to clone(setup.clothes.hands[0])>> <<set $wardrobe.hands to []>> <<set $store.hands to []>> <<set $wear_hands to "none">> <</if>> <!-- updateClothes was moved to <<backcomp>> at the bottom of this file --> <<if $objectVersion.wardrobes lt 4 or $objectVersion.wardrobes is undefined>> <<wardrobesUpdate>> <<set $objectVersion.wardrobes to 4>> <</if>> <<if $mathsprojectwon is 1>> <<earnFeat "Maths Competition Winner">> <</if>> <<if $scienceprojectwon is 1>> <<earnFeat "Science Fair Winner">> <</if>> <<if $bodywritingdisable is undefined>> <<set $bodywritingdisable to "f">> <</if>> <<if $arousal is NaN or $arousal is undefined>> <<set $arousal to 0>> <</if>> <<if $pain is NaN or $pain is undefined>> <<set $pain to 0>> <</if>> <<if !$skin.forehead>> <<bodywriting_clear forehead>> <</if>> <<if !$skin.left_cheek>> <<bodywriting_clear left_cheek>> <</if>> <<if !$skin.right_cheek>> <<bodywriting_clear right_cheek>> <</if>> <<if !$skin.left_shoulder>> <<bodywriting_clear left_shoulder>> <</if>> <<if !$skin.right_shoulder>> <<bodywriting_clear right_shoulder>> <</if>> <<if !$skin.breasts>> <<bodywriting_clear breasts>> <</if>> <<if !$skin.back>> <<bodywriting_clear back>> <</if>> <<if !$skin.pubic>> <<bodywriting_clear pubic>> <</if>> <<if !$skin.left_thigh>> <<bodywriting_clear left_thigh>> <</if>> <<if !$skin.right_thigh>> <<bodywriting_clear right_thigh>> <</if>> <<if !$skin.left_bottom>> <<bodywriting_clear left_bottom>> <</if>> <<if !$skin.right_bottom>> <<bodywriting_clear right_bottom>> <</if>> <<if $crime is null or $crime is undefined>> <<set $crime to 0>> <<set $crimehistory to 0>> <<set $blackmoney to 0>> <</if>> <<if isNaN(parseInt($crime))>> <<set $crime to 0>> <</if>> <<if isNaN(parseInt($crimehistory))>> <<set $crimehistory to 0>> <</if>> <<if isNaN(parseInt($blackmoney))>> <<set $blackmoney to 0>> <</if>> <<if $worn.upper is undefined>> <<set $worn.upper to clone(setup.clothes.upper[0])>> <</if>> <<if $worn.lower is undefined>> <<set $worn.lower to clone(setup.clothes.lower[0])>> <</if>> <<if $worn.under_upper is undefined>> <<set $worn.under_upper to clone(setup.clothes.under_upper[0])>> <</if>> <<if $worn.under_lower is undefined>> <<set $worn.under_lower to clone(setup.clothes.under_lower[0])>> <</if>> <<if $worn.head is undefined>> <<set $worn.head to clone(setup.clothes.head[0])>> <</if>> <<if $worn.face is undefined>> <<set $worn.face to clone(setup.clothes.face[0])>> <</if>> <<if $worn.neck is undefined>> <<set $worn.neck to clone(setup.clothes.neck[0])>> <</if>> <<if $worn.legs is undefined>> <<set $worn.legs to clone(setup.clothes.legs[0])>> <</if>> <<if $worn.feet is undefined>> <<set $worn.feet to clone(setup.clothes.feet[0])>> <</if>> <<if ndef $swimnudecounter>> <<set $swimnudecounter to 0>> <<set $swimall to 0>> <</if>> /*for swimming*/ <<if $player.gender_body is undefined>> <<set $player.gender_body to clone($player.gender)>> <</if>> <<if $worn.genitals.exposed is undefined>> <<if $worn.genitals.exposed_base is 0>> <<set $worn.genitals.exposed to 0>> <<else>> <<set $worn.genitals.exposed to 1>> <</if>> <</if>> <<if $closinghour isnot 21>> <<set $closinghour to 21>> <</if>> <!-- specialClothesSetup was moved to <<backComp>> --> <<if $objectVersion.uncomfortable lt 2 or $objectVersion.uncomfortable is undefined>> <<if $uncomfortable is undefined>> <<if $lightexhibitionismaction isnot undefined>> <<set $uncomfortable to { underwear: ($lightexhibitionismaction is "embarrassed" ? true : false), nude: ($exhibitionismaction is "embarrassed" ? true : false), }>> <<unset $lightexhibitionismaction>> <<unset $exhibitionismaction>> <<else>> <<set $uncomfortable to { underwear: true, nude: true, }>> <</if>> <</if>> <<set $objectVersion.uncomfortable to 2>> <</if>> <<if $sidebarStats is undefined>> <<set $sidebarStats to "Disabled">> <</if>> <<if $openinghours is undefined>> <<if $hour gte 8 and $hour lt 21>> <<set $openinghours to 1>> <<else>> <<set $openinghours to 0>> <</if>> <</if>> <<if $athletics is undefined>> <<set $athletics to Math.trunc(($physique / $physiquesize) * 1000)>> <</if>> <<if $dontHide is undefined>> <<set $dontHide to false>> <</if>> <<if $checkstyle is undefined>> <<set $checkstyle to "words">> <<set $tending to 0>> <<set $garden_flowers_intro to 1>> <<set $eden_plot_intro to 1>> <<set $wolf_plot_intro to 1>> <<set $asylum_plot_intro to 1>> <<set $plots to {}>> <<set $plants_known to []>> <<set $plants to {}>> <<set $stall_rejected to 0>> <<set $produce_sold to 0>> <</if>> <<if $combatControls is undefined>> <<set $combatControls to "radio">> <</if>> <<if $loveInterest is undefined>> <<set $loveInterest to { primary: "None", secondary: "None", tertiary: "None" }>> <</if>> <<if $dateCount is undefined>> <<set $dateCount to { Total: 0, Robin: 0, Whitney: 0, Kylar: 0, Eden: 0, Avery: 0, BlackWolfHunts: 0 }>> <</if>> <<if $dateCount.Alex is undefined>> <<set $dateCount.GreatHawkHunts to 0>> <<set $dateCount.Alex to 0>> <<set $dateCount.Sydney to 0>> <</if>> <<if $virginTaken is undefined>> <<set $virginTaken to { kiss: [], handholding: [], oral: [], anal: [], vaginal: [], penile: [] }>> <</if>> <<setupDefaults>> <<if $bodywritingImages is undefined>> <<set $bodywritingImages to true>> <</if>> <<if !$physique and $physique isnot 0>> <<set $physique to ($physiquesize / 7) * 3>> <</if>> <<if !$tiredness and $tiredness isnot 0>> <<set $tiredness to 0>> <</if>> <!-- updateMuseumAntiques was moved to <<backComp>> --> <<if $objectVersion.specialClothesEffectsSetup lt 1 or $objectVersion.specialClothesEffectsSetup is undefined>> <<specialClothesEffectsSetup>> <<set $objectVersion.specialClothesEffectsSetup to 1>> <</if>> <<if $masturbationFix is undefined>> <<set $mouthactiondefault to 0>> <<set $mouthaction to 0>> <<set $mouth to 0>> <<set $masturbationFix to true>> <</if>> <<if $lastOptions is undefined>> <<resetLastOptions>> <</if>> <<set $_npcHairEyeNeedsGenerating to $NPCName.some(n => !(n.eyeColour || n.hairColour))>> <<if $_npcHairEyeNeedsGenerating>> <<generateNPCNameHairAndEyeColors>> <</if>> <<if $stat_shoot is undefined>> <<set $stat_shoot to 0>> <<set $cow to 0>> <<set $cowbuild to 0>> <<set $fluid_forced_stat to 0>> <</if>> <<if $shoot_stat>> /*Checking shoot_stat's existence to assist clean-up for 0.2.14.1 fix*/ <<if $shoot_stat gt 0>> <<set $stat_shoot += $shoot_stat>> <</if>> <<unset $shoot_stat>> <</if>> <<set $BeastList to ["dog","cat","pig","wolf","dolphin","lizard","bear","boar","creature","horse","fox","hawk","spider"]>> <<if $active_enemy is undefined>> <<set $active_enemy to 0>> <</if>> <<if $combatTrain is undefined>> <<set $combatTrain to { length: 0, generateInit: 1, beastTypes: [], numberPerTrain: [] }>> <</if>> <<if isNaN(parseInt($trauma))>> <<set $trauma to 0>> <</if>> <<if $arousalError isnot undefined>> <<set $arousalError to [$arousalError.length]>> <</if>> <<if !$livestock_obey and $livestock_obey isnot 0>> <<set $livestock_obey to 50>> <</if>> <<setupTransformationPiecesObject>> <<if $clothingShop is undefined>> <<set $clothingShop to { ban: 0, banExtension: false, spotted: false, stolenClothes: 0, totalStolenClothes: 0, banCount: 0, rng: random(0,1000) }>> <</if>> <<if $adultShop is undefined>> <<set $adultShop to { ban: 0, banExtension: false, spotted: false, stolenClothes: 0, totalStolenClothes: 0, banCount: 0, rng: random(0,1000) }>> <</if>> <<if $penisWetness is undefined>> <<set $penisWetness to 0>> <</if>> <<if $pbdisable is undefined>> <<set $pbdisable to "t">> <</if>> <<if $facestyle is undefined>> <<set $facestyle to "default">> <</if>> <<if $blinkingdisable is undefined>> <<set $blinkingdisable to "f">> <</if>> <<if $makeup is undefined>> <<set $makeup = {}>> <<set $makeup.owned = {}>> <<set $makeup.owned.lipstick = []>> <<set $makeup.owned.eyeshadow = []>> <<set $makeup.owned.eyelenses = []>> <<set $makeup.owned.hairdye = []>> <<set $makeup.owned.mascara = []>> <<set $makeup.lipstick = 0>> <<set $makeup.eyeshadow = 0>> <<set $makeup.eyelenses = {"left":0, "right":0}>> <<set $makeup.mascara = 0>> <<set $makeup.mascara_running = 0>> <<set $makeup.pbcolour = 0>> <<set $makeup.browscolour = 0>> <<set $makeup.concealer = 0>> <</if>> <<if $makeup.owned.custom_eyelenses is undefined>> <<set $makeup.owned.custom_eyelenses to []>> /* pharmacy custom eye lenses */ <</if>> <<if $uncomfortable.prostituting is undefined>> <<set $uncomfortable.prostituting to true>> <</if>> <<if $malevictimchance is undefined>> <<set $malevictimchance to $malechance>> <<set $homochance to 4>> <</if>> <<if $livestock_intro is 0>> <<if $remySeen is undefined>> <<set $livestock_robin to 1>> <</if>> <<if $livestock_noise is undefined>> <<set $livestock_noise to false>> <</if>> <</if>> <<if $birdbuild is undefined>> <<set $birdbuild to 0>> <<set $harpy to 0>> <<set $home_gone to 0>> <</if>> <<if $hirsutedisable>> <<if $hirsutedisable is "f">> <<if $wolfgirl gte 4>> <<set $transformationParts.wolf.pubes to "default">> <<set $transformationParts.wolf.pits to "default">> <<else>> <<set $transformationParts.wolf.pubes to "disabled">> <<set $transformationParts.wolf.pits to "disabled">> <</if>> <<if ($harpy gte 6 or ($transformationParts.bird.wings isnot "hidden" and $transformationParts.bird.wings isnot "disabled"))>> <<set $transformationParts.bird.pubes to "default">> <<else>> <<set $transformationParts.bird.pubes to "disabled">> <</if>> <<else>> <<if $wolfgirl gte 4>> <<set $transformationParts.wolf.pubes to "hidden">> <<set $transformationParts.wolf.pits to "hidden">> <<else>> <<set $transformationParts.wolf.pubes to "disabled">> <<set $transformationParts.wolf.pits to "disabled">> <</if>> <<if ($harpy gte 6 or ($transformationParts.bird.wings isnot "hidden" and $transformationParts.bird.wings isnot "disabled"))>> <<set $transformationParts.bird.pubes to "hidden">> <<else>> <<set $transformationParts.bird.pubes to "disabled">> <</if>> <</if>> <<unset $hirsutedisable>> <</if>> <<hirsuteHideCheck>> <<if $per_npc.janitor isnot undefined>> <<clearNPC "janitor">> <</if>> <<if $prop is undefined>> <<set $prop to []>> <</if>> <<if $punishmentposition isnot 0 and $location isnot "brothel">> <<set $punishmentposition to 0>> <</if>> <<if $schoolrep is undefined>> <<set $schoolrep to {}>> <<set $schoolrep.crossdress to 0>> <<set $schoolrep.herm to 0>> <</if>> <<if $science_star is undefined>> <<set $science_star to 0>> <<set $maths_star to 0>> <<set $english_star to 0>> <<set $history_star to 0>> <</if>> <<if $farm_shift is undefined>> <<set $farm_shift to 0>> <<unset $beaststance>> <<set $cattle_milked to 0>> <</if>> <<if $fringetype is "swept right">> <<set $fringetype to "swept left">> <</if>> <<if $version === undefined>> <<set $version={}>> <</if>> <<if $version.schema === undefined>> <<set $version.schema = 1>> <</if>> <<if typeof $farm_yield_alex is "string">> <<set $farm_yield_alex to 0>> <</if>> <<if typeof $farm_yield is "string">> <<set $farm_yield to 0>> <</if>> <<if $farm is undefined>> <<elseif $farm.build_finished is "parasite 1">> <<set $farm.build_finished to ["parasites 1"]>> <<elseif $farm.build_finished is "parasite 2">> <<set $farm.build_finished to ["parasites 2"]>> <</if>> <<if $farm is undefined>> <<elseif $farm.build_finished is undefined or $farm.build_finished is 0>> <<set $farm.build_finished to []>> <<elseif Array.isArray($farm.build_finished)>> <<else>> <<set $farm.build_finished to [$farm.build_finished]>> <</if>> <<if typeof $money is "string">> <<set $money to 0>> <</if>> <<if $masseur_stat is undefined>> <<set $masseur_stat to 0>> <<set $machine_stat to 0>> <</if>> /* <<if $year % 4 is 0 and $yeardays gte 366 or $yeardays gte 365>> <<year>> <</if>> */ <<if $mason_pond is 5 and $garden_flowers_intro is 1>> <<unset $garden_flowers_intro>> <<plots_init garden 3 earth 1 small>> <<add_plot garden water 1 small>> <<elseif $mason_pond is 5>> <<if !$plots.garden[3]>> <<add_plot garden water 1 small>> <</if>> <</if>> <<if $science_exam is undefined>> <<set $science_exam to (40 + ($weekday * 10))>> <<set $maths_exam to (40 + ($weekday * 10))>> <<set $english_exam to (40 + ($weekday * 10))>> <<set $history_exam to (40 + ($weekday * 10))>> <<if $science gte 1750>> <<set $sciencetrait to 8>> <<set $science to 2000>> <<elseif $science gte 1500>> <<set $sciencetrait to 7>> <<set $science to 1750>> <<elseif $science gte 1250>> <<set $sciencetrait to 6>> <<set $science to 1500>> <<elseif $science gte 1000>> <<set $sciencetrait to 5>> <<set $science to 1250>> <<elseif $science gte 700>> <<set $sciencetrait to 4>> <<set $science to 1000>> <<elseif $science gte 500>> <<set $sciencetrait to 3>> <<set $science to 700>> <<elseif $science gte 400>> <<set $sciencetrait to 2>> <<set $science to 400>> <<elseif $science gte 200>> <<set $sciencetrait to 1>> <<set $science to 200>> <<elseif $science gte 100>> <<set $sciencetrait to 0>> <<set $science to 100>> <<else>> <<set $sciencetrait to -1>> <<set $science to 0>> <</if>> <<if $maths gte 1750>> <<set $mathstrait to 8>> <<set $maths to 2000>> <<elseif $maths gte 1500>> <<set $mathstrait to 7>> <<set $maths to 1750>> <<elseif $maths gte 1250>> <<set $mathstrait to 6>> <<set $maths to 1500>> <<elseif $maths gte 1000>> <<set $mathstrait to 5>> <<set $maths to 1250>> <<elseif $maths gte 700>> <<set $mathstrait to 4>> <<set $maths to 1000>> <<elseif $maths gte 500>> <<set $mathstrait to 3>> <<set $maths to 700>> <<elseif $maths gte 400>> <<set $mathstrait to 2>> <<set $maths to 400>> <<elseif $maths gte 200>> <<set $mathstrait to 1>> <<set $maths to 200>> <<elseif $maths gte 100>> <<set $mathstrait to 0>> <<set $maths to 100>> <<else>> <<set $mathstrait to -1>> <<set $maths to 0>> <</if>> <<if $english gte 1750>> <<set $englishtrait to 8>> <<set $english to 2000>> <<elseif $english gte 1500>> <<set $englishtrait to 7>> <<set $english to 1750>> <<elseif $english gte 1250>> <<set $englishtrait to 6>> <<set $english to 1500>> <<elseif $english gte 1000>> <<set $englishtrait to 5>> <<set $english to 1250>> <<elseif $english gte 700>> <<set $englishtrait to 4>> <<set $english to 1000>> <<elseif $english gte 500>> <<set $englishtrait to 3>> <<set $english to 700>> <<elseif $english gte 400>> <<set $englishtrait to 2>> <<set $english to 400>> <<elseif $english gte 200>> <<set $englishtrait to 1>> <<set $english to 200>> <<elseif $english gte 100>> <<set $englishtrait to 0>> <<set $english to 100>> <<else>> <<set $englishtrait to -1>> <<set $english to 0>> <</if>> <<if $history gte 1750>> <<set $historytrait to 8>> <<set $history to 2000>> <<elseif $history gte 1500>> <<set $historytrait to 7>> <<set $history to 1750>> <<elseif $history gte 1250>> <<set $historytrait to 6>> <<set $history to 1500>> <<elseif $history gte 1000>> <<set $historytrait to 5>> <<set $history to 1250>> <<elseif $history gte 700>> <<set $historytrait to 4>> <<set $history to 1000>> <<elseif $history gte 500>> <<set $historytrait to 3>> <<set $history to 700>> <<elseif $history gte 400>> <<set $historytrait to 2>> <<set $history to 400>> <<elseif $history gte 200>> <<set $historytrait to 1>> <<set $history to 200>> <<elseif $history gte 100>> <<set $historytrait to 0>> <<set $history to 100>> <<else>> <<set $historytrait to -1>> <<set $history to 0>> <</if>> <<exam_difficulty>> <<set $distinction_stat to 0>> <<unset $arousalsaved>> <</if>> <<if isNaN(parseInt($tiredness))>> <<set $tiredness to 0>> <</if>> <<if ($minute % $time) isnot ($time - ($hour * 60))>> <<set $minute to ($time - ($hour * 60))>> <</if>> <<if $waspdisable is undefined>> <<set $waspdisable to "f">> <</if>> <<if $slugdisable is undefined>> <<set $slugdisable to "f">> <</if>> <<if $season is undefined>> <<if $month is "december" or $month is "january" or $month is "february">> <<set $season to "winter">> <<elseif $month is "march" or $month is "april" or $month is "may">> <<set $season to "spring">> <<elseif $month is "june" or $month is "july" or $month is "august">> <<set $season to "summer">> <<else>> <<set $season to "autumn">> <</if>> <</if>> <<farm_update>> <<if $prepareSaveDetails is undefined>> <<set $prepareSaveDetails to true>> <</if>> <<if $attitudesControl is undefined>> <<set $attitudesControl to { showGoldLink:false, unlockExhibitionismUnderwear:false, unlockExhibitionismNude:false, unlockTransformation:false, unlockDemonFlaunt:false, unlockProstitution:false, unlockLoveInterest1:false, unlockLoveInterest2:false, unlockLoveInterest3:false, unlockDefaultActions:false }>> <</if>> <<if $wild_plant_stat is undefined>> <<set $wild_plant_stat to 0>> <</if>> <<if $fertiliser is undefined>> <<set $fertiliser to {current:0,used:0}>> <</if>> <<if $saveName.includes("<")>> <<set $saveName to $saveName.replace(/[^a-zA-Z\u4e00-\u9fa5 0-9]+/g,"")>> <</if>> <<if $imgLighten is false>> <<set $imgLighten to "">> <<elseif $imgLighten is true>> <<set $imgLighten to "imgLighten">> <</if>> <<if $enemyArousalLossReduction is undefined>> <<set $enemyArousalLossReduction to 1>> <</if>> <<if $pubtask is 1>> <<set $pubtask to "forest">> <</if>> <<if $plants_known.includes("garlic bulb")>> <<set $plants_known.delete("garlic bulb")>> <<set $plants_known.push("garlic_bulb")>> <</if>> <<if $outbuildingvisited is 1 and $outbuildingBeast is undefined>> <<set $outbuildingBeast to "dog">> <</if>> <<if $o_long_and_beautiful gt 10>> <<set $o_long_and_beautiful to 10>> <<elseif !$hy_parent and !$hy_student and $o_long_and_beautiful is 10>> <<set $o_long_and_beautiful to 9>> <</if>> <<if $money is NaN or $money is undefined>> <<set $money to 0>> <</if>> <<if $mannequinHasPenis is undefined>> <<set $mannequinHasPenis to $player.penisExist>> <<set $mannequinBreastsSize to $mannequinHasPenis ? 0 : 3>> <</if>> <<if $shopPage is undefined>> <<set $shopPage = 0>> <</if>> <<if $shopClothingFilter is undefined>> <<shopClothingFilterReset>> <</if>> <<if $shopItemsPerPage is undefined>> <<set $shopItemsPerPage = 12>> <</if>> <<if $saveDetails is undefined>> <<set $saveDetails to { exported:{ days: clone($days), frequency: 15, count: 0, dayCount: 0, }, auto:{ count: 0 }, slot:{ count: 0, dayCount: 0, }, playTime: 0, loadTime: new Date(), loadCount: 0, }>> <<unset $lastExported>> <</if>> <<if $saveDetails.exported.dayCount is undefined>> <<set $saveDetails.exported.dayCount to 0>> <<set $saveDetails.slot.dayCount to 0>> <</if>> <<if $sleepStat is undefined>> <<set $sleepStat to 0>> <</if>> <<if $greathawkmonster is undefined>> <<rng>> <<if $monsterchance gte $rng>> <<set $greathawkmonster to 1>> <<else>> <<set $greathawkmonster to 0>> <</if>> <<set $bird to {}>> <</if>> <<if $harpy is undefined>> <<set $harpy to 0>> <</if>> <<if C.npc["Great Hawk"].type is "bird">> <<set C.npc["Great Hawk"].type to "hawk">> <</if>> <<if $clothesPrice is undefined>> <<set $clothesPrice to 1>> <</if>> <<if $clothesPriceUnderwear is undefined>> <<set $clothesPriceUnderwear to 1>> <<set $clothesPriceSchool to 1>> <<set $clothesPriceLewd to 1>> <</if>> <<childrenSetup>> <<npcPregnancyUpdater>> <<if $basePlayerPregnancyChance is undefined>> <<set $basePlayerPregnancyChance to 50>> <<set $humanPregnancyMonths to 3>> <<set $wolfPregnancyWeeks to 4>> <<set $playerPregnancyHumanDisable to "f">> <<set $playerPregnancyBeastDisable to "f">> <<set $npcPregnancyDisable to "f">> <</if>> <<if $famepregnancy is undefined>> <<set $famepregnancy to 0>> <<set $baseNpcPregnancyChance to 8>> <</if>> <<if $analingusdisablegiving is undefined or $analingusdisablereceiving is undefined>> <<set $analingusdisablegiving to $analdisable>> <<set $analingusdisablereceiving to $analdisable>> <</if>> <<if $analdoubledisable is undefined>> <<set $analdoubledisable to $analdisable>> <</if>> <<if $vaginaldoubledisable is undefined>> <<set $vaginaldoubledisable to "f">> <</if>> <<if $furniturePriceFactor is undefined>> <<set $furniturePriceFactor to 1>> <</if>> <<if $rentmod is undefined>> <<set $rentmod to 1>> /* <<elseif $rentmod gt 3>> <<set $rentmod to 3>> */ <</if>> <<if $money % 1>> <<set $money to Math.floor($money)>> <</if>> <<if $blackjack_played is undefined>> <<set $blackjack_played to 0>> <<set $blackjack_won to 0>> <<set $blackjack_streak to 0>> <<set $blackjack_streak_high to 0>> <</if>> /*To prevent the wardrobe from being inaccessable due to nulls*/ <<for $_label, $_value range $wardrobe>> <<if $_label is "space">> <<continue>> <</if>> <<run $wardrobe[$_label].delete(null)>> <</for>> <<if $fringetype is "flaps">> <<set $fringetype to "thin flaps">> <</if>> <<if $player.virginity.penile is "Great Hawk" or $player.virginity.vaginal is "Great Hawk">> <<earnFeat "Great Hawk the Terror">> <</if>> <<if $player.virginity.penile is "Black Wolf" or $player.virginity.vaginal is "Black Wolf">> <<earnFeat "Great Wolf the Alpha">> <</if>> <<if $bodyPartSelectedKey isnot undefined>> <<set $bodyPartSelected to $bodyPartSelectedKey>> <<unset $bodyPartSelectedKey>> <</if>> <<if $hoodDown is undefined>> <<set $hoodDown to 0>> <</if>> <<if $cardcover is undefined>> <<set $cardcover = { style: 0, colour: 'red' }>> <</if>> <<if $templePromised is undefined>> <<set $templePromised to "">> <</if>> <<if $perNPCFix isnot 2>> <<set $perNPCFix to 2>><<unset $perPronounFix>><<unset $perChastityFix>> <<set _keys to Object.keys($per_npc)>> <<for _npc range _keys>> <<if $per_npc[_npc].pronouns is undefined or $per_npc[_npc].pronouns.he is 0>> <<generatePronouns $per_npc[_npc]>> <</if>> <<if $per_npc[_npc].chastity is undefined>> <<set $per_npc[_npc].chastity to {penis:"", vagina:"", anus:""}>> <</if>> <<if $per_npc[_npc].role is undefined>> <<set $per_npc[_npc].role to "normal">> <</if>> <<if $per_npc[_npc].condom is undefined>> <<set $per_npc[_npc].condom to false>> <</if>> <<if $per_npc[_npc].name_known is undefined>> <<set $per_npc[_npc].name_known to 0>> <</if>> <</for>> <</if>> <<if $sidebarRenderer is undefined>> <<set $sidebarRenderer to 'canvas'>> <</if>> <<if $showDebugRenderer is undefined>> <<set $showDebugRenderer to !!StartConfig.debug>> <</if>> <<if $makeup.pbcolour isnot 0 and !($makeup.pbcolour in setup.colours.hair_map)>> <<set _record to setup.guessColourInMap(setup.colours.hair_map, $makeup.pbcolour)>> <<if _record>> <<set $makeup.pbcolour to _record.variable>> <<else>> <<run Errors.report("Failed to update makeup.pbcolour from " + $makeup.pbcolour)>> <</if>> <</if>> <<for _item range $makeup.owned.hairdye>> <<if !(_item.colour in setup.colours.hair_map)>> <<set _record to setup.guessColourInMap(setup.colours.hair_map, _item.colour)>> <<if _record>> <<set _item.colour to _record.variable>> <<else>> <<run Errors.report("Failed to update dye from " + _item.colour)>> <</if>> <</if>> <</for>> <<if $notifyUpdate is undefined>> <<set $notifyUpdate = true>> <</if>> <<if $beedisable is undefined>> <<set $beedisable to "f">> <</if>> <<if $lurkerdisable is undefined>> <<set $lurkerdisable to "f">> <</if>> <<if $prof is undefined>> <<set $prof to {}>> <<set $prof.spray to 0>> <<set $stat_lurkers_captured to 0>> <<set $stat_aphrodisiacs_sold to 0>> <<set $sadism to 0>> <<set $sadism_level to 0>> <</if>> <<if $horsedisable is undefined>> <<set $horsedisable to "f">> <</if>> <<if $farm_stage gte 10 and $lurkers_held is undefined>> <<set $lurkers_held to 0>> <</if>> <<if $edenprepare is 1 and $edenwall is undefined>> <<set $edenwall to 0>> <<set $edenchimney to 0>> <<set $edenroof to 0>> <</if>> <<if $stat_panties_stolen is undefined>> <<set $stat_panties_stolen to 0>> <<set $stat_police to {}>> <<set $stat_police.pillory to 0>> <<set $stat_police.community to 0>> <<set $stat_police.prison to 0>> <</if>> <<if !$locker_suspicion or !$panties_held or $locker_suspicion lt 0>> <<set $locker_suspicion to 0>> <<set $panties_held to 0>> <</if>> <<if $footdisable is undefined>> <<set $footdisable to "f">> <<set $uncomfortable.lewd to true>> <</if>> <<if $player.bodyliquid is undefined>> <<set $player.bodyliquid to {}>> <<for _bodypart range setup.bodyliquid.bodyparts>> <<set $player.bodyliquid[_bodypart] to {}>> <<set $player.bodyliquid[_bodypart].goo to V[_bodypart+"goo"]>> <<set $player.bodyliquid[_bodypart].semen to V[_bodypart+"semen"]>> <<run delete V[_bodypart+"goo"]>> <<run delete V[_bodypart+"semen"]>> <</for>> <</if>> <<if $npc is 0>> <<unset $npc>> <<set $npc to []>> <<elseif !(Array.isArray($npc))>> <<set _npcsubstitute to clone($npc)>> <<unset $npc>> <<set $npc to [_npcsubstitute]>> <<unset _npcsubstitute>> <</if>> <<if $npcnum is undefined>> <<set $npcnum to []>> <<elseif !(Array.isArray($npcnum))>> <<set _npcsubstitute to clone($npcnum)>> <<unset $npcnum>> <<set $npcnum to [_npcsubstitute]>> <<unset _npcsubstitute>> <</if>> <<if $npcrow is undefined>> <<set $npcrow to []>> <<if $npc[0]>> <<set $npcrow[0] to 0>> <</if>> <</if>> <<if $choketrait is undefined>> <<set $choketrait to 0>> <</if>> <<if $museumAntiqueJournalHints is undefined>> <<set $museumAntiqueJournalHints to []>> <</if>> <<if $plants_known.includes("red rose")>> <<run $plants_known.delete("red rose")>> <<set $plants_known.push("red_rose")>> <</if>> <<if $transformdisabledivine is undefined>> <<if $transformdisable is "f">> <<set $transformdisabledivine to "f">> <<else>> <<set $transformdisabledivine to "t">> <</if>> <</if>> <<if $penisexist isnot undefined and ($player.penisExist != $penisexist or $player.vaginaExist != $vaginaexist)>> <<set $player.vaginaExist to ($player.gender isnot "m")>> /* <<set $vaginaexist to ($player.gender isnot "m" ? 1 : 0)>> */ <<set $player.penisExist to ($player.gender isnot "f")>> /* <<set $penisexist to ($player.gender isnot "f" ? 1 : 0)>> */ <</if>> <<if $penisexist isnot undefined>> <<unset $penisexist>> <<unset $vaginaexist>> <</if>> <<if $NPCName[0].penis is 0>> <<initnpcgender>> <</if>> <<if $kylar is undefined>> <<set $kylar to {}>> <<set $kylar.raped to 0>> <<set $kylar.riddle to 0>> <<set $kylar.timer to {halls:0,street:0,home:0,love:0}>> <<set $kylarSeen to []>> <</if>> <<if $kylarsydneywriting is 1>> <<set $kylarSeen.pushUnique("sydneyWriting")>> <<unset $kylarsydneywriting>> <</if>> <<if $sydneySeen isnot undefined>> <<if $sydneySeen.includes("kylarwriting")>> <<set $kylarSeen.pushUnique("sydneyWriting")>> <<run delete $sydneySeen.pushUnique("kylarwriting")>> <</if>> <</if>> <<if $kylarraped isnot undefined>> <<set $kylar.raped to $kylarraped>> <<unset $kylarraped>> <</if>> <<if $kylartimer isnot undefined>> <<set $kylar.timer.halls to $kylartimer>> <<unset $kylartimer>> <</if>> <<if $kylarstreettimer isnot undefined>> <<set $kylar.timer.street to $kylarstreettimer>> <<unset $kylarstreettimer>> <</if>> <<if $kylarsaidlove isnot undefined>> <<set $kylarSeen.pushUnique("saidLove")>> <<unset $kylarsaidlove>> <</if>> <<if $kylarspray is 1>> <<set $kylarDaily.spray to true>> <<unset $kylarspray>> <</if>> <<if $kylar_bodywriting is 1>> <<set $kylarDaily.bodywriting to true>> <<unset $kylar_bodywriting>> <</if>> <<if $kylar_invite isnot undefined>> <<if $kylar_invite is 1>> <<set $kylarDaily.invite to "home">> <<else>> <<set $kylarDaily.invite to "school">> <</if>> <<unset $kylar_invite>> <</if>> <<if $kylar_undies_taken isnot undefined>> <<set $kylarDaily.undies to true>> <</if>> <<if $kylarpantiescheck isnot undefined>> <<set $kylarSeen.pushUnique("commando")>> <<unset $kylarpantiescheck>> <</if>> <<if $kylarsleeprape isnot undefined>> <<set $kylarDaily.sleepRape to true>> <<unset $kylarsleeprape>> <</if>> <<if $kylarconfessiontimer isnot undefined>> <<set $kylar.timer.love to $kylarconfessiontimer>> <<unset $kylarconfessiontimer>> <</if>> <<if $kylarhome isnot undefined>> <<set $kylar.home to $kylarhome>> <<unset $kylarhome>> <</if>> <<if $kylarhometimer isnot undefined>> <<set $kylar.timer.home to $kylarhometimer>> <<unset $kylarhometimer>> <</if>> <<if $kylarhomeinterrupted isnot undefined>> <<set $kylarSeen.includes("home")>> <<unset $kylarhomeinterrupted>> <</if>> <<if $kylarwalk isnot undefined>> <<set $daily.kylar.walk to true>> <<unset $kylarwalk>> <</if>> <<if $kylarFountain isnot undefined>> <<set $kylar.fountain to $kylarFountain>> <<unset $kylarFountain>> <</if>> <<if $kylarFountainIntroWinter>> <<set $kylarSeen.pushUnique("fountainWinter")>> <<unset $kylarFountainIntroWinter>> <</if>> <<if $kylarFountainKiss isnot undefined>> <<if $kylarFountainKiss is 1>> <<set $daily.kylar.walkKiss to true>> <</if>> <<unset $kylarFountainKiss>> <</if>> <<if $kylarFountainIntro isnot undefined>> <<if $kylarFountainIntro is 1>> <<set $kylarSeen.pushUnique("fountainIntro")>> <</if>> <<unset $kylarFountainIntro>> <</if>> <<if $kylarFountainCoin isnot undefined>> <<set $kylar.fountainCoin to $kylarFountainCoin>> <<unset $kylarFountainCoin>> <</if>> <<if $kylarfamestage isnot undefined>> <<set $kylar.fameStage to $kylarfamestage>> <<unset $kylarfamestage>> <</if>> <<if $kylarchatintro isnot undefined>> <<set $kylarSeen.pushUnique("chatIntro")>> <<unset $kylarchatintro>> <</if>> <<if $kylarcanteen isnot undefined>> <<set $kylarSeen.pushUnique("canteen")>> <<unset $kylarcanteen>> <</if>> <<if $kylarriddle isnot undefined>> <<set $kylar.riddle to $kylarriddle>> <<unset $kylarriddle>> <</if>> <<if $kylar_play isnot undefined>> <<set $kylar.play to $kylar_play>> <<unset $kylar_play>> <</if>> <<if typeof($semen_produced_stat) is "string">> <<set $semen_produced_stat to parseFloat($semen_produced_stat)>> <</if>> <<if !(Array.isArray($event))>> <<unset $event>> <</if>> <<if $multipleWardrobes is undefined>> <<set $multipleWardrobes to "isolated">> <</if>> <<if $nectar_drank_stat is undefined>> <<set $nectar_drank_stat to 0>> <<set $tentacleMouth to 0>> <<set $tentacleAnus to 0>> <<set $tentacleAnusBaby to 0>> <<set $tentacleVagina to 0>> <<set $tentaclePenis to 0>> <</if>> <<if $index is undefined and $enemyno gte 1>> <<set $index to 0>> <<for _n to 0; _n lt $NPCList.length; _n++>> <<if $NPCList[_n].desc is $description>> <<set $index to _n>> <<break>> <</if>> <</for>> <</if>> <<if !$NPC_names_m>> <<init_names>> <</if>> <<if $prison and $prison.kylar is undefined>> <<set $prison.kylar to 0>> <</if>> <<if $plantdisable is undefined>> <<set $plantdisable to "f">> <</if>> <!-- Makes sure $kennel_treats aren't strings due to bug. --> <<if typeof $kennel_treats isnot "number">> <<set $kennel_treats to 0>> <</if>> <<if $bodywritingLvl is undefined>> <<set $bodywritingLvl to ($bodywritingdisable is "f" ? 3 : 0)>> <</if>> /* Start of Target variables */ <<if $npcDAP isnot undefined>> <<set $anustarget to $npcDAP[0]>> <<set $anusdoubletarget to $npcDAP[1]>> <<unset $npcDAP>> <</if>> <<if $targetYourself is undefined>> <<set $targetYourself to false>> <</if>> <<if $NPCList isnot undefined and $NPCList[0].active is undefined>> <<for _i = 0; _i < $NPCList.length; _i++>> <<set $NPCList[_i].active to 0>> <</for>> <<if $combat is 1>> <<for _i = 0; _i < $enemyno; _i++>> <<set $NPCList[_i].active to "active">> <<if $NPCList[_i].type is 0>> <<set $NPCList[_i].type to "human">> <</if>> <<set $NPCList[_i].healthmax to $NPCList[_i].health>> <</for>> <</if>> <</if>> <<if $breastuse isnot undefined and $breastuse isnot 0>> <<set $chestuse to $breastuse>> <<unset $breastuse>> <</if>> <<if $machine isnot undefined and $machine.number lte 0>> <<unset $machine>> <<elseif $enemytype isnot "machine">> <<unset $machine>> <<elseif $combat isnot 1>> <<unset $machine>> <</if>> /* End of Target variables */ <!-- remove duplicates from the hints list --> <<if $objectVersion.museumAntiques lt 8>> <<set $objectVersion.museumAntiques to 8>> <<set _newlist to []>> <!-- run in reverse to preserve only most recently added entries --> <<for _i = $museumAntiqueJournalHints.length - 1; _i gte 0; _i-->> <<if $museumAntiques.antiques[$museumAntiqueJournalHints[_i]] is "notFound">> <<set _newlist.pushUnique($museumAntiqueJournalHints[_i])>> <</if>> <</for>> <<set $museumAntiqueJournalHints to clone(_newlist).reverse()>> <</if>> <<if $stealtarget is undefined>> <<if $combat is 1 and $stealstate is 3>> <<set $stealtarget to "012345">> <<else>> <<set $stealtarget to "">> <</if>> <</if>> <<if $stealdifficulty is undefined>> <<set $stealdifficulty to 1>> <</if>> <<if $stealstate isnot undefined>> <<set $stealstateleft to $stealstate>> <<set $stealstateright to $stealstate>> <<unset $stealstate>> <</if>> <<if $righttarget is undefined>> <<set $righttarget to 0>> <<set $lefttarget to 0>> <</if>> <<if !$NPCList[0].chastity>> <<for _i to 0; _i lt $NPCList.length; _i++>> <<set $NPCList[_i].chastity to {penis: "", vagina: "", anus: ""}>> <</for>> <</if>> <<for _i to 0; _i lt $NPCList.length; _i++>> <<if $NPCList[_i].pronoun and (!$NPCList.pronouns or !$NPCList.pronouns.man)>> <<generatePronouns $NPCList[_i]>> <</if>> <</for>> <!-- pregnancyVar was moved to <<backComp>>--> <</widget>> <<widget "hermNPCsUpdate">> <<if !$hermNPCsVersionFix>> <!-- Version number fixing --> <!-- replaces any "herm" in the save numbers with ".h1", and replaces numbers ending with "h" with ".h1" --> <<for $_i to 0; $_i lt $saveVersions.length; $_i++>> <<set $saveVersions[$_i] to $saveVersions[$_i].replace(/ herm/, ".h1").replace(/(\d)h/, "$1.h1")>> <</for>> <<if $saveVersion>> <<set $saveVersion to $saveVersion.replace(/ herm/, ".h1").replace(/(\d)h/, "$1.h1")>> <</if>> <</if>> <</widget>> <<widget "variablesVersionUpdate2">> /* 0.4.0.0 is the last version that should need the old vvu */ <<run window.backCompPillsInventory()>> /* restructure V.sexStats.pills inventory */ <!--Tracking for the Plant Lover trait--> <<if $nectar_addiction is undefined>> <<set $nectar_addiction to 0>> <<set $nectar_timer to 0>> <</if>> <<if $hypnotised is undefined>> <<set $hypnotised to 0>> <<set $famemodel to 0>> <</if>> <<if $chef_state gte 5 and $photo_known is undefined>> <<set $photo_known to 1>> <</if>> <<if $cardcover is undefined>> <<set $cardcover = { style: 0, colour: 'red' }>> <</if>> <<if $sleepStat is undefined>> <<set $sleepStat to 0>> <</if>> <<for $_i = 0; $_i < $NPCName.length; $_i++>> <<if $NPCName[$_i].virginity is undefined>> <<initNNPCVirginity $_i>> <</if>> <</for>> <<if $player.virginity.vaginal is "Harper" or $player.virginity.penile is "Harper">> <<earnFeat "Harper the Hypnotist">> <</if>> <<if $player.virginity.vaginal is "Morgan" or $player.virginity.penile is "Morgan">> <<earnFeat "Morgan the Lost">> <</if>> <<if $player.virginity.vaginal is "Bailey" or $player.virginity.penile is "Bailey">> <<earnFeat "Bailey the 'caretaker'">> <</if>> <<if $player.virginity.vaginal is "Zephyr" or $player.virginity.penile is "Zephyr">> <<earnFeat "Zephyr the captain">> <</if>> <!-- Jimmy: DefaultActions JS routine for error correction. --> <<run /* Perform check for broken default action structures. */ if ($actionDefaults != undefined) { /* Test 1 - If regrab[0] is an object, there was a failure. */ let temp = DefaultActions.get('rape', 'Everyone', 'regrab')[0]; if (typeof temp === 'object') { /* Reset everything as a final step, the error is consumed. */ V.actionDefaults = temp; V.actionDefaults = DefaultActions.check(DefaultActions.setup()) } } >> <!-- Jimmy: Updater for NNPCs that lack pronouns structures. Based off of $perNPCFix located in VVU --> <<if $pronounsNPCFix isnot 1>> <<for $_npc range $NPCName>> <<if $_npc.pronouns is undefined>> <<generatePronouns $_npc>> <</if>> <</for>> <<set $pronounsNPCFix = 1>> <</if>> <!-- persistent npc fix v3 --> <<if $perNPCFix isnot 4>> <<set $perNPCFix to 4>> <!-- clean nulls and undefineds from name lists --> <<run $NPC_names_f.delete(null, undefined)>> <<run $NPC_names_m.delete(null, undefined)>> <<set $_per_keys to Object.keys($per_npc)>> <<for $_per_ctrl range $_per_keys>> <<if !$per_npc[$_per_ctrl]>> <!-- remove null and undefined --> <<run delete $per_npc[$_per_ctrl]>> <<elseif !$per_npc[$_per_ctrl].type>> <!-- type fix --> <<set $per_npc[$_per_ctrl].type to "human">> <</if>> <</for>> <!-- prison npcs --> <<for $_npc range ["anxious_guard", "methodical_guard", "relaxed_guard", "veteran_guard", "scarred_inmate"]>> <<if $per_npc[$_npc]>> <!-- restore null names--> <<if !$per_npc[$_npc].name>> <<set $per_npc[$_npc].name to ($per_npc[$_npc].pronoun is "m" ? $NPC_names_m.pluck() : $NPC_names_f.pluck())>> <</if>> <!-- fix descriptions --> <<if $per_npc[$_npc].name_known>> <<set $per_npc[$_npc].fullDescription to $per_npc[$_npc].name>> <<else>> <<set $per_npc[$_npc].fullDescription to $_npc.replace('_', ' ')>> <</if>> <</if>> <</for>> <</if>> <!-- v0.3.5.4: pubic hair was accidentally disabled on new saves bc it wasn't initialised properly. --> <<pbhairinit>> <!-- v0.3.6.2: blind stats mode --> <<if $statdisable is undefined>> <<set $statdisable to "f">> <</if>> <!-- v0.3.6.2: tending update --> <<if $tendingvars is undefined>> <<set $tendingvars to {}>> <<for $_plot_locations range $plots>> <<for $_plot range $_plot_locations>> <<set $_plot.plant to ($_plot.name and $_plot.stage gt 0 ? $_plot.name : "none")>> <<run delete $_plot.name>> <</for>> <</for>> <</if>> <<if $tending_yield_factor is undefined>> <<set $tending_yield_factor to 5>> <<else>> <<set $tending_yield_factor to Math.clamp($tending_yield_factor, 1, 10)>> <</if>> <!-- Jimmy: [<=0.3.6.2] Asserts that $outfit[].colors is assigned, default to false. --> <<if $outfit_update is undefined or $outfit_update lt 3>> <<set $outfit_update to 3>> <<for $_i to 0; $_i lt $outfit.length; $_i++>> <<if $outfit[$_i].colors is undefined>> <<set $outfit[$_i].colors to false>> <</if>> <</for>> <</if>> <!-- v0.3.6.2: herm wraith fix --> <<if $per_npc.wraith and ["m", "f"].includes($per_npc.wraith.gender) and $per_npc.wraith.penis isnot "none" and $per_npc.wraith.vagina isnot "none">> <<if $per_npc.wraith.gender is "m">><<set $per_npc.wraith.vagina to "none">><</if>> <<if $per_npc.wraith.gender is "f">><<set $per_npc.wraith.penis to "none">><</if>> <</if>> <!-- v0.3.6.2: Giving Robin clothes if their outfits array is already defined, but they lack the proper normal clothes --> <<if C.npc.Robin.outfits isnot undefined and !C.npc.Robin.outfits.includes("maleSchool")>> <<set $_robin to C.npc.Robin>> <<if $_robin.outfits.includes("shirt")>> <<run $_robin.outfits.delete("shirt")>> <<set $_robin.outfits.pushUnique("robinGiftShirt")>> <</if>> <<if $_robin.outfits.includes("sundress")>> <<run $_robin.outfits.delete("sundress")>> <<set $_robin.outfits.pushUnique("robinGiftSundress")>> <</if>> <<if $_robin.outfits.includes("kimono")>> <<run $_robin.outfits.delete("kimono")>> <<set $_robin.outfits.pushUnique("robinGiftKimono")>> <</if>> <<if $_robin.outfits.includes("tuxedo")>> <<run $_robin.outfits.delete("tuxedo")>> <<set $_robin.outfits.pushUnique("robinGiftTux")>> <</if>> <<if $_robin.outfits.includes("gothic gown")>> <<run $_robin.outfits.delete("gothic gown")>> <<set $_robin.outfits.pushUnique("robinGiftGown")>> <</if>> <<if $_robin.outfits.includes("christmas")>> <<run $_robin.outfits.delete("christmas")>> <<set $_robin.outfits.pushUnique("robinGiftChristmas")>> <</if>> <<initNNPCClothes "Robin" "update">> <<set $_robin.outfits.pushUnique("naked", "maleDefault", "femaleDefault")>> <<if $_robin.currentOutfit>> <<switch $_robin.currentOutfit>> <<case "shirt">><<set $_clothesReplace to "robinGiftShirt">> <<case "sundress">><<set $_clothesReplace to "robinGiftSundress">> <<case "kimono">><<set $_clothesReplace to "robinGiftKimono">> <<case "tuxedo">><<set $_clothesReplace to "robinGiftTuxedo">> <<case "gothic gown">><<set $_clothesReplace to "robinGiftGown">> <<case "christmas">><<set $_clothesReplace to "robinGiftChristmas">> <</switch>> <<npcClothesName $_robin $_clothesReplace>> <<run delete $_robin.currentOutfit>> <</if>> <</if>> <!-- v0.3.6.2: Fixing undefined animations, printing one-time notification for any who had them disabled. --> <<if $objectVersion.animations lt 1 or $objectVersion.animations is undefined>> <<set $objectVersion.animations to 1>> <<if $combatAnimations is false and $sidebarAnimations is false>> <div id="animWarning" @class="'no-numberify '"> <span class='teal'>Animations are currently disabled. This may have been caused by a one-time bug. You can re-enable animations immediately, or in the "general" tab of the settings menu.</span> | <<link "Enable all animations">><<addclass #animWarning "hidden">><<set $combatAnimations to true>><<set $sidebarAnimations to true>><</link>> | <<link "Disable this message">><<addclass #animWarning "hidden">><</link>> </div> <</if>> <<if $combatAnimations is undefined>> <<set $combatAnimations to true>> <<set $sidebarAnimations to true>> <</if>> <</if>> <!-- v0.3.6.2: Improved debug menu --> <<if $debug_favourite is undefined>> /* add favourites constant variable */ <<set $debug_favourite = []>> <</if>> <!-- v0.3.6.2: Init variables necessary for custom contact lenses --> <<if ndef $lenses_ordered>> <<set $lenses_ordered to []>> <</if>> <<if ndef $custom_lenses_already_ordered>> <<set $custom_lenses_already_ordered to 0>> <</if>> <<if ndef $custom_eyecolours>> <<set $custom_eyecolours to []>> <</if>> <<if ndef $makeup.owned.custom_eyelenses>> <<set $makeup.owned.custom_eyelenses to []>> /* pharmacy custom eye lenses */ <</if>> <<if $adultShop is undefined>> <<set $adultShop to { ban: 0, banExtension: false, spotted: false, stolenClothes: 0, totalStolenClothes: 0, banCount: 0, rng: random(0,1000) }>> <</if>> <!-- v0.3.6.2: convert all "underclothes" to "underlowerclothes" --> <<if $handtarget is "underclothes">> <<set $handtarget to "underlowerclothes">> <</if>> <!-- v0.3.6.2: refactor transformation stuff --> <<setupTransformationPiecesObject>> <<for $_npc range $NPCList>> <<if $_npc.mouth is "underclothes">> <<set $_npc.mouth to "underlowerclothes">> <</if>> <<if $_npc.lefthand is "underclothes">> <<set $_npc.lefthand to "underlowerclothes">> <</if>> <<if $_npc.righthand is "underclothes">> <<set $_npc.righthand to "underlowerclothes">> <</if>> <</for>> <!-- v0.3.6.2: convert all "understruggle" to "underlowerstruggle" --> <<if $understruggle isnot undefined>> <<set $underlowerstruggle to $understruggle>> <<unset $understruggle>> <</if>> <!-- v0.3.6.2: remove all of the deprecated variables used in npcstrip --> <!-- note for the future: it's probably a good idea to avoid using these variable names for anything else in the future, they're too non-specific. --> <<if $anus>> <<unset $lefthand, $righthand, $anus, $gender1, $penis, $vagina>> <<unset $lefthand2, $righthand2, $anus2, $gender2, $penis2, $vagina2>> <<unset $lefthand3, $righthand3, $anus3, $gender3, $penis3, $vagina3>> <<unset $lefthand4, $righthand4, $anus4, $gender4, $penis4, $vagina4>> <<unset $lefthand5, $righthand5, $anus5, $gender5, $penis5, $vagina5>> <<unset $lefthand6, $righthand6, $anus6, $gender6, $penis6, $vagina6>> <</if>> <!-- v0.3.7.4: NPC sex toys --> <<if $toydildodisable is undefined>> <<set $toydildodisable to "f">> <</if>> <<if $toywhipdisable is undefined>> <<set $toywhipdisable to "f">> <</if>> <!-- v0.3.6.2 unnamed npc virginity update --> <<if $npcVirginityChance is undefined>> <<set $npcVirginityChance to 50>> <<set $npcVirginityChanceAdult to 10>> <</if>> <!-- for v0.3.7.1 and earlier versions --> <<if _version lte 30701>> <<run window.patchCorruptLensesColors()>> /* custom contact lenses fix corrupt colours */ <</if>> <!-- for v0.3.7.4 and earlier versions --> <<if _version lte 30704>> <<if ndef $pillsTakenOn>> <<set $pillsTakenOn to ($monthday.toString() + $month + $year.toString())>> <</if>> <<if ndef $famemodel>> <<set $famemodel to 0>> <</if>> <<if ndef $heterochromia>> <<set $heterochromia to 0>> <<if $cat > 6>> <<set $cat to 6>> <</if>> <</if>> <<if $ironmanmode == undefined>> <<set $ironmanmode to false>> <</if>> <<if def $breastsize>> <<set $player.breastsize to clone($breastsize)>> <<unset $breastsize>> <</if>> <<if def $penissize>> <<set $player.penissize to clone($penissize)>> <<unset $penissize>> <</if>> <<if def $bottomsize>> <<set $player.bottomsize to clone($bottomsize)>> <<unset $bottomsize>> <</if>> <<run window.createInventoryObject()>> <!-- fix for desynch between TFs and $specialTransform --> <<if $demon gte 1 or $angel gte 1 or ($fallenangel gte 2 or ($transformationParts.fallenAngel.wings isnot "hidden" and $transformationParts.fallenAngel.wings isnot "disabled"))>> <<set $specialTransform to 1>> <<else>> <<set $specialTransform to 0>> <</if>> <!-- fix for transformation traits trauma bugs --> <<if $transformationParts.traits.fangs is "hidden">> <<set $transformationParts.traits.fangs to "default">> <</if>> <<if $transformationParts.traits.sharpEyes is "hidden">> <<set $transformationParts.traits.sharpEyes to "default">> <</if>> <</if>> <!-- v0.3.7.4 RobinCrossDressingQuest update --> <<if C.npc.Robin.cdquest is undefined>> <<set C.npc.Robin.cdquest to 0>> <</if>> <!-- v0.3.7.4: sleep code readability update --> <<if $schoolwake isnot undefined>> <<unset $schoolwake>> <</if>> <!-- v0.3.7.4: An old pregnancy code issue where .fertilize was used and not updated. --> <<script>> const pregnancy = V.sexStats.anus.pregnancy; if(Array.isArray(pregnancy.fetus)){ for (let i = 0; i < pregnancy.fetus.length; i++) { const slot = pregnancy.fetus[i]; if (slot != undefined && slot.hasOwnProperty('fertilized')) { slot.fertilised = slot.fertilized; delete slot.fertilized; } } /* Part 2: Futa manipulation. */ let hasFuta = false; for (let i = 0; i < pregnancy.fetus.length; i++) { const slot = pregnancy.fetus[i]; if (slot != undefined && slot.stats != null && slot.stats.gender === 'Futa') { if (hasFuta) { /* Abort the futa. */ pregnancy.fetus[i].toDelete = true; } else { hasFuta = true; if (V.pregnancyStats.parasiteDoctorEvents < 2) { V.pregnancyStats.parasiteDoctorEvents = 2; } pregnancy.motherStatus = 2; } } } V.sexStats.anus.pregnancy.fetus = V.sexStats.anus.pregnancy.fetus.filter(p => p && !p.toDelete); } <</script>> <!-- v0.3.7.4: sex toy and double penetration stats--> <<if $sextoystat is undefined>> <<set $sextoystat to 0>> <<set $analdoublestat to 0>> <<set $vaginaldoublestat to 0>> <</if>> <!-- v0.3.7.4: underground brothel cleanup --> <<if $undergroundtime isnot undefined>> <<set $undergroundbrothel to { "time": $undergroundtime, "timepass": true, "water": $undergroundwater, "escape": $undergroundescape }>> <<unset $undergroundtime>> <<unset $undergroundwater>> <<unset $undergroundescape>> <<set $undergroundbrothelescaped to true>> <</if>> <<if $adultshopprogress is undefined>> <<set $adultshopprogress to 0>> <</if>> <<if $adultshopcontribution is undefined>> <<set $adultshopcontribution to 0>> <</if>> <<if $facesitdisable is undefined>> <<set $facesitdisable to "f">> <</if>> <<if $objectVersion.sexToys is undefined>> <!-- First fix to sextoy objects: Specifically for NNPCs containing an undefined string in their desc. --> <<script>> V.NPCName.forEach(nnpc => { if (nnpc.strapons instanceof Array) { nnpc.strapons.forEach(strapon => { if (typeof strapon.description === 'string') { strapon.description = strapon.description.replace(/undefined/, 'dildo'); } }); } }); <</script>> <<set $objectVersion.sexToys to 1>> <</if>> <!-- v0.3.8.2: sex toy and double penetration stats--> <<if $toymultiplepenetration is undefined>> <<set $toymultiplepenetration to "f">> <</if>> <!-- v0.3.8.2: sextoy inventory code cleanup --> <<if $passage.startsWith("Sextoys Inventory ") and ["Sextoys Inventory Home","Sextoys Inventory Brothel","Sextoys Inventory Cottage","Sextoys Inventory Cabin"].includes($passage)>> <<set $sextoyInvReturnLink to { "Sextoys Inventory Home": "Bedroom", "Sextoys Inventory Brothel": "Brothel Dressing Room", "Sextoys Inventory Cottage": "Farm Bedroom", "Sextoys Inventory Cabin": "Cabin Actions" }[$passage]>> <</if>> <!-- v.0.3.8.2: undefined $control --> <<if $control is undefined>> <<if $controlSaved>> <<set $control to $controlSaved>><<unset $controlSaved>> <<else>> <<set $control to $controlmax>> <</if>> <</if>> <!-- v0.3.8.6: Fixing mismatched specialtransform after losing your virginity --> <<if $demon gte 1 or $angel gte 1 or ($fallenangel gte 2 or ($transformationParts.fallenAngel.wings isnot "hidden" and $transformationParts.fallenAngel.wings isnot "disabled"))>> <<set $specialTransform to 1>> <<else>> <<set $specialTransform to 0>> <</if>> <!-- v0.3.8.6: Traubin overhaul --> <<if $robinTraumaMultiplier is undefined>> <<set $robinTraumaMultiplier to 1>> <</if>> <<if $robinSeen is undefined>> <<set $robinSeen to []>> <</if>> <<if !$robinTattoo>> <<set $robinTattoo to []>> <</if>> <<if $robinPunishments is undefined>> <<set $robinPunishments to []>> <<if C.npc.Robin.trauma gt 0>> <<set $robinPunishments.pushUnique("docks")>> <<set $robinLastPunishment to "docks">> <</if>> <</if>> <<if $robinmissing is undefined>> <<set $robinmissing to 0>> <<elseif $robinmissing is 1>> <<set $robinmissing to "docks">> <<set $robinLastPunishment to "docks">> <</if>> <<if $baileypaychain is undefined>> <<set $baileypaychain to 0>> <</if>> <<if $NPCList[0].index is undefined>> <<for _i to 0; _i lt $NPCList.length; _i++>> <<set $NPCList[_i].index to _i>> <</for>> <</if>> <!-- v0.3.8.6: Awarding the "Robin's Song" feat to players who missed it --> <<if C.npc.Robin.cdquest gte 7>> <<earnFeat "Robin's Song">> <</if>> <!-- v0.3.8.6: Kylar rework --> <<if $kylar.fameStage is undefined>> <<set $kylar.fameStage to 0>> <</if>> <!-- v0.3.9.0: update --> <<if $pregnancyspeechdisable is undefined>> <<set $pregnancyspeechdisable to "f">> <</if>> <<if $stray_happiness is undefined>> <<set $stray_happiness to 50>> <</if>> <!-- v0.3.9.2: Wardrobe teleport error fix --> <<if $clothes_choice isnot undefined and !["Clothing Shop", "Forest Shop", "School Library Shop", "Adult Shop Store"].includes($passage)>> <<unset $clothes_choice>> <</if>> <!-- v0.3.9.3: Robin pillory bug --> <<if $robinPillory and $robinPillory.danger gt 15>> <<unset $robinPillory>> <</if>> <!-- v0.3.9.3: Heterochromia disablable --> <<if $transformationParts.cat.heterochromia is undefined>> <<if $cat gte 7>> <<set $transformationParts.cat.heterochromia to "default">> <<else>> <<set $transformationParts.cat.heterochromia to "disabled">> <</if>> <</if>> <!-- v0.3.9.3: customColors 'value' property added --> <<if $objectVersion.customColors lt 5 or $objectVersion.customColors is undefined>> <<if $customColors.value is undefined>> <<set $customColors.value to {primary:100, secondary:100}>> <</if>> <<set $objectVersion.customColors to 5>> <</if>> <!-- v0.3.9.3: $retrieveShopCustomColor added // used for shop colour sliders --> <<if $retrieveShopCustomColor is undefined or $retrieveShopCustomColor isnot {}>> <<set $retrieveShopCustomColor to {}>> <</if>> <<if !$objectVersion.transformations>> <<set $_demon to $transformationParts.demon>> <<set $_tfConverter to { blue: { type: 'default', colour: { h: 240, s: 100, l: 50 } }, lime: { type: 'default', colour: { h: 90, s: 100, l: 50 } }, red: { type: 'default', colour: { h: 0, s: 100, l: 50 } }, yellow: { type: 'default', colour: { h: 55, s: 100, l: 50 } }, pink: { type: 'succubus', colour: { h: 320, s: 100, l: 50 } } }>> <<set $_demonHorn to $_tfConverter[$transformationParts.demon.horns]>> <<if typeof $_demonHorn === 'object'>> <<set $_demon.horns to $_demonHorn.type>> <<set $_demon.horns_colour to $_demonHorn.colour>> <</if>> <<set $_demonWings to $_tfConverter[$transformationParts.demon.wings]>> <<if typeof $_demonWings === 'object'>> <<set $_demon.wings to $_demonWings.type>> <<set $_demon.wings_colour to $_demonWings.colour>> <</if>> <<set $_demonTail to $_tfConverter[$transformationParts.demon.tail]>> <<if typeof $_demonTail === 'object'>> <<set $_demon.tail to $_demonTail.type>> <<set $_demon.tail_colour to $_demonTail.colour>> <</if>> <<set $objectVersion.transformations to 0>> <</if>> <!-- v0.3.10.0 update --> <<if $leftarmbruise is undefined>> <<set $leftarmbruise to 0>> <<set $rightarmbruise to 0>> <</if>> <<if $urinestat is "undefined">> <<set $urinestat to 0>> <</if>> <<if $hypnosis_traits is undefined>> <<set $hypnosis_traits to {}>> <</if>> <!-- v0.3.10.0 farm wage fix --> <<if $farm and $farm.wage gte 1500>> <<set $farm.wage to $farm.wage / 100>> <</if>> <!-- v0.3.10.1: Kylar dominance --> <<if C.npc.Kylar.dom gte 1 and ($bus isnot "kylarmanor" or $syndromekylar is 1)>> <<npcincr Kylar dom -100>> <</if>> <!-- v0.3.10.3: fix for Kylar being initialized weirdly in combat after a prior bug set kylar's NPCName data weirdly --> <<if _version lte 31003>> <<set _kylar to C.npc.Kylar>> <<if _kylar.penis isnot "none">> <<set _kylar.penis to "clothed">> <</if>> <<if _kylar.vagina isnot "none">> <<set _kylar.vagina to "clothed">> <</if>> <<run delete _kylar.lefthand>> <<run delete _kylar.righthand>> <</if>> <!-- v0.3.10.4: New character lighting variables --> <<if $imgLighten != undefined>> <<set $lightSpotlight to 0.2>> <<set $lightGradient to 0>> <<set $lightGlow to 0>> <<set $lightFlat to 0>> <<set $lightCombat to 0.2>> <<set $lightTFColor to 0.2>> <<if $imgLighten == "imgLighten">> <<set $lightFlat to 0.5>> <<elseif $imgLighten == "imgLighten2">> <<set $lightFlat to 1>> <</if>> <<unset $imgLighten>> <</if>> <<if $estatePersistent and !$estatePersistent.markedCards>> <<set $estatePersistent.markedCards = new Set()>> <<set $estatePersistent.newDeckTimer = 3>> <</if>> <!-- v0.3.10: blackjack update --> <<initEstatePersistent>> <!-- v0.3.10.5: Kylar scene viewer scenes --> <<if C.npc.Kylar.state is "prison">> <<set $kylarSeen.pushUnique("basement")>> <</if>> <!-- v0.3.10.5: Hypnotic flaunting --> <<if $uncomfortable.hypnosis is undefined>> <<set $uncomfortable.hypnosis to true>> <</if>> <!-- v0.3.10.5: nectar bodyliquid --> <<if $player.bodyliquid.neck.nectar is undefined>> <<for _bodypart range setup.bodyliquid.bodyparts>> <<set $player.bodyliquid[_bodypart].nectar to 0>> <</for>> <</if>> <<unset $goobodycount, $semenbodycount, $liquidbodycount>> <!-- v0.3.10.5/0.3.11.0: Overall school performance fix --> <<if _version lte 31100>> <<run ["science", "maths", "english", "history"].forEach( skill => { V[skill] = [0,100,200,400,700,1000].select(V[skill + "trait"] + 1); })>> <<set $school to $science + $english + $maths + $history>> <</if>> <!-- v0.3.11.0: Dancing Fixes --> <<if _version lte 31100 and $dancing is 1>> <<if $dance_place is undefined>> <<set $dance_place to 1>> <</if>> <<set $dance_place -= 1>> <</if>> <!-- v0.3.11.0: Combat images --> <<if $combatimages is undefined>> <<set $combatimages to $images>> <</if>> <!-- v0.3.10.0/v0.3.10.1/0.3.11.0 NaN variables fix --> <<if _version lte 31100>> /*Check to see if these variables are NaN. If they are, reset them to 0*/ <<run ["stress", "drugged", "drunk", "hallucinogen", "milk_amount", "orgasmcount", "urinestat", "traumagain", "stressgain", "traumasaved", "stresssaved", "enemyanger", "enemytrust", "turnCount"].forEach( v => V[v] ? true : V[v] = 0)>> <</if>> <!-- v0.3.11.4 --> <<if $outfitTmp is undefined>> <<set $outfitTmp to {}>> <</if>> <!-- v0.3.11.4 - Remove $crimemax --> <<if $crimemax isnot undefined>> <<unset $crimemax>> <</if>> <!-- v0.3.11.4 options rework --> <<if $options is undefined>> <<set $options to { neverNudeMenus: $neverNudeMenus !== undefined ? $neverNudeMenus : false, autosaveDisabled: $autosaveDisabled !== undefined ? $autosaveDisabled : false, showCaptionText: $showCaptionText !== undefined ? $showCaptionText : true, sidebarRenderer: $sidebarRenderer !== undefined ? $sidebarRenderer : "canvas", sidebarStats: $sidebarStats && ["disabled", "limited", "all"].includes($sidebarStats) ? $sidebarStats : "disabled", sidebarTime: $sidebarTime && ["disabled", "top", "bottom"].includes($sidebarTime) ? $sidebarTime : "disabled", combatControls: $combatControls !== undefined ? $combatControls : "radio", targetYourself: $targetYourself !== undefined ? $targetYourself : false, scrollRemember: $scroll_remember !== undefined ? $scroll_remember : false, mapMovement: $map.movement !== undefined ? $map.movement : true, mapLegacy: $map.legacy !== undefined ? $map.legacy : false, mapMarkers: $map.markers !== undefined ? $map.markers : false, mapTop: $map.top !== undefined ? $map.top : false, images: $images !== undefined && StartConfig.enableImages !== false ? $images : 0, combatImages: $combatimages !== undefined && StartConfig.enableImages !== false ? $combatimages : 0, bodywritingImages: $bodywritingImages !== undefined ? $bodywritingImages : true, silhouetteEnabled: $silhouettedisable !== undefined ? $silhouettedisable === "f" : true, sidebarAnimations: $sidebarAnimations !== undefined ? $sidebarAnimations : true, blinkingEnabled: $blinkingdisable !== undefined ? $blinkingdisable === "f" : true, combatAnimations: $combatAnimations !== undefined ? $combatAnimations : true, halfClosedEnabled: $halfcloseddisable !== undefined ? $halfcloseddisable === "f" : true, characterLightEnabled: true, lightSpotlight: $lightSpotlight !== undefined ? $lightSpotlight : 0.2, lightGradient: $lightGradient !== undefined ? $lightGradient : 0.1, lightGlow: $lightGlow !== undefined ? $lightGlow : 0.1, lightFlat: $lightFlat !== undefined ? $lightFlat : 0, lightCombat: $lightCombat !== undefined ? $lightCombat : 0.2, lightTFColor: $lightTFColor !== undefined ? $lightTFColor : 0.2, maxStates: $maxStates !== undefined ? $maxStates : 5, historyControls: false, numpad: $numpad !== undefined ? $numpad : false, useNarrowMarket: $useNarrowMarket !== undefined ? $useNarrowMarket : false, skipStatisticsConfirmation: $skipStatisticsConfirmation !== undefined ? $skipStatisticsConfirmation : false, showDebugRenderer: $showDebugRenderer !== undefined ? $showDebugRenderer : !!StartConfig.debug, };>> <</if>> <!-- v0.3.11.4 creampie.npc.penis and tentacle fix --> <!-- IMPORTANT NOTE: please REMOVE this section if these stats come back into use --> <<if _version lte 31104>> <<run delete $sexStats.creampie.npc.penis>> <<run delete $sexStats.creampie.npc.tentacle>> <!-- Fixing most named npcs missing all of their virginities --> <!-- Resetting all virginities to defaults, keeping virginities already taken by player --> <<if C.npc.Jordan.virginity.penile is false>> <<for $_i to 0; $_i lt $NPCNameList.length; $_i++>> <<set $_takenVirginities to []>> <<for $_virginity, $_status range $NPCName[$_i].virginity>> <<if $_status is "player">> <<set $_takenVirginities.push($_virginity)>> <</if>> <</for>> <<if $NPCNameList[$_i] is "Sydney">> <<set $NPCName[$_i].virginity to {"anal": true, "oral": true, "penile": true, "vaginal": true, "handholding": true, "temple": true, "kiss": true}>> <<else>> <<initNNPCVirginity $_i>> <</if>> <<set $_takenVirginities.forEach(taken => $NPCName[$_i].virginity[taken] = "player")>> <</for>> <</if>> <!-- Fix for saves where people were able to change wraith's gender --> <<if $per_npc.wraith and $per_npc.wraith.pronoun isnot "i">> <<set $per_npc.wraith.pronoun to "i">> <<generatePronouns $per_npc.wraith>> <</if>> <</if>> <!-- v0.3.11.4 $tirednessmax change to C.tiredness.max --> <<if $tirednessmax>> <<unset $tirednessmax>> <</if>> <!-- v0.3.11.4 - Add $makeup.mascara_running --> <<if $makeup.mascara_running is undefined>> <<set $makeup.mascara_running = 0>> <</if>> <!-- v0.3.11.4 - Remove defunct vars --> <<if $npcdescription isnot undefined>> <<unset $npcdescription>> <</if>> <<if $currentOverlay isnot undefined>> <<unset $currentOverlay>> <</if>> <!-- v0.3.11.4 New pepper spray display --> <<if $options.pepperSprayDisplay is undefined>> <<set $options.pepperSprayDisplay to "sprays">> <</if>> <<prison_feat_check>> <!-- v0.3.12.1: Changing room refactor --> <<if $bus is "girls" or $bus is "boys">> <<set $changingRoomGender to $bus>> <</if>> <!-- v.0.3.12.1 Fix classroom attendance vars --> <<if _version lte 31201>> <<set $scienceattended to $scienceattended || 0>> <<set $mathsattended to $mathsattended || 0>> <<set $englishattended to $englishattended || 0>> <<set $historyattended to $historyattended || 0>> <<set $swimmingattended to $swimmingattended || 0>> <</if>> <!-- v0.3.12.3 Fix heterochromia --> <<if V.custom_eyecolours.findIndex(i => i.variable === "cat_tf_stage_-1_left") !== -1>> <!-- if there's objects with a bugged variable --> <<script>> /* re-create custom eyecolours without broken variables */ const repairedEyeColours = []; V.custom_eyecolours.forEach(c => c.variable.startsWith("cat_tf") || repairedEyeColours.push(c)); V.custom_eyecolours = repairedEyeColours; /* regenerate cat eye stages from "natural" eye colour (selected at game start) while preserving the current colours */ const lEC = V.leftEyeColour; const rEC = V.rightEyeColour; V.leftEyeColour = V.eyeselect; V.rightEyeColour = V.eyeselect; determineCatEyeStages(); V.leftEyeColour = lEC; V.rightEyeColour = rEC; <</script>> <</if>> <<if $parasitepregdisable is undefined>> <<set $parasitepregdisable to $analpregdisable>> <<unset $analpregdisable>> <</if>> <!-- v0.3.12.4 --> <<if $options.closeButtonMobile is undefined>> <<set $options.closeButtonMobile to false>> <</if>> <!-- v0.3.12.4: Wraith Compound scene/canvasmodel override --> <<if $modeloptionsOverride is undefined>> <<set $modeloptionsOverride to {}>> <</if>> <!-- v0.3.12.4: pubfame --> <<if $pub_task_stat is undefined>> <<set $pub_task_stat to 0>> <</if>> <!-- v0.3.12.4: semen swallowing framework --> <<if $semenswallowedstat is undefined>> <<set $semenswallowedstat to 0>> <<set $animalsemenswallowedstat to 0>> <</if>> <<if $options.passageCount is undefined>> <<set $options.passageCount to "disabled">> <<set $options.playtime to false>> <</if>> <!-- v0.3.12.4 Sensitivity overhaul changes --> <<if $mouthsensitivity is undefined>> <!-- Initialise new sensitivities --> <<set $mouthsensitivity to 1>> <<set $bottomsensitivity to 1>> <!-- Map old sensitivity values (1-6) to new range (1-4), with step 0.25 --> <<set $breastsensitivity to Math.floor(4 + ($breastsensitivity - 1) * 12 / 5) / 4>> <<set $genitalsensitivity to Math.floor(4 + ($genitalsensitivity - 1) * 12 / 5) / 4>> <</if>> <!-- v0.3.12.4 Wraith update --> <<if !$wraith>> <<set $wraith to {"state": "", "init": 0}>> <<elseif $wraith.init is undefined>> <<set $wraith.init to 1>> <<set $wraith.days to 0>> <</if>> <<if $per_npc.wraith>> <<if $wraithAnger>> <<set $wraithAngerCooldown to $wraithAnger>> <<unset $wraithAnger>> <</if>> <<initnpc "Ivory Wraith">> <<run ["pronouns", "pronoun", "gender", "pregnancyAvoidance", "vagina", "penis", "clothes", "chest", "skincolour", "breastsize", "breastsdesc", "breastdesc", "penisdesc", "penissize", "trust", "type"].forEach(s => C.npc["Ivory Wraith"][s] = clone($per_npc.wraith[s]))>> <<set C.npc["Ivory Wraith"].lust to 0>> <<if $wraith.state is "haunt">> <<set C.npc["Ivory Wraith"].lust to 20>> <<if ($wraithPrison and $wraithPrison.vision) or Object.keys(V.feats.currentSave).includes("Schism")>> <<set $wraithPrison.vision to true>> <<set C.npc["Ivory Wraith"].lust -= 5>> <</if>> <</if>> <<if $wraithAngerCooldown>> <<set C.npc["Ivory Wraith"].lust += 3>> <</if>> <<set C.npc["Ivory Wraith"].lust = Math.clamp(C.npc["Ivory Wraith"].lust, 0, 20)>> <<clearNPC "wraith">> <<if $NPC_names_m.includes("Ivory Wraith") or $NPC_names_f.includes("Ivory Wraith")>> <<run delete $NPC_names_m["Ivory Wraith"]>> <<run delete $NPC_names_f["Ivory Wraith"]>> <</if>> <<if $wraith.state and !$wraith.days>> <<set $wraith.days to ($days - 60)>> <</if>> <</if>> <!-- To update the player and named npc pregnancy objects from numbers to a single array --> <<if $sexStats.vagina.pregnancy.fetus is undefined or $sexStats.anus.pregnancy.fetus is undefined or $sexStats.anus.pregnancy.type is undefined or $sexStats.anus.pregnancy.nonCycleRng is undefined or !Array.isArray($sexStats.vagina.sperm) or !$parentList>> <<physicalAdjustmentsInit>> <</if>> <<if !$pregnancytype>> <<set $cycledisable to "f">> <<set $pregnancytype to "realistic">> <</if>> <<if $adultshopunlocked and $adultshopcontribution>> <<earnFeat "Opened Pandoras Box">> <<if $adultshopcontribution gte 11>> <<earnFeat "Opened Pandoras Cocks">> <</if>> <</if>> <<if $baseVaginalPregnancyChance>> <<set $basePlayerPregnancyChance to $baseVaginalPregnancyChance>> <<unset $baseVaginalPregnancyChance>> <</if>> <<if $insecurity_pregnancy is undefined>> <<set $insecurity_pregnancy to 0>> <<set $acceptance_pregnancy to 0>> <</if>> /* For saves where it was set to undefined */ <<if $sciencemissed is undefined>> <<set $sciencemissed to 0>> <<set $mathsmissed to 0>> <<set $englishmissed to 0>> <<set $historymissed to 0>> <<set $swimmingmissed to 0>> <</if>> /* To correct some bad math that let it get into the negatives */ <<if Math.min($sciencemissed,$mathsmissed,$englishmissed,$historymissed,$swimmingmissed) lt 0>> <<set $_min to Math.min($sciencemissed,$mathsmissed,$englishmissed,$historymissed,$swimmingmissed)>> <<set $sciencemissed -= $_min>> <<set $mathsmissed -= $_min>> <<set $englishmissed -= $_min>> <<set $historymissed -= $_min>> <<set $swimmingmissed -= $_min>> <</if>> /* Attempt to sync up individual lessons missed with $lessonmissed */ <<set $_totalMissed to $sciencemissed + $mathsmissed + $englishmissed + $historymissed + $swimmingmissed>> <<if $_totalMissed gt $lessonmissed>> <<set $lessonmissed to $_totalMissed>> <<elseif $_totalMissed lt $lessonmissed>> <<set $_totalToAdd to $lessonmissed - $_totalMissed>> <<set $_toAdd to Math.ceil($_totalToAdd / 5)>> <<if $_totalToAdd gt 0>> <<set $sciencemissed += $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <<set $_totalToAdd -= $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <</if>> <<if $_totalToAdd gt 0>> <<set $mathsmissed += $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <<set $_totalToAdd -= $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <</if>> <<if $_totalToAdd gt 0>> <<set $englishmissed += $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <<set $_totalToAdd -= $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <</if>> <<if $_totalToAdd gt 0>> <<set $historymissed += $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <<set $_totalToAdd -= $_toAdd lt $_totalToAdd ? $_toAdd : $_totalToAdd>> <</if>> <<if $_totalToAdd gt 0>> <<set $swimmingmissed += $_totalToAdd>> <</if>> <</if>> <<if $wolfstate is "hunt" and $huntstate isnot "success">><<set $huntstate to "ongoing">><</if>> <</widget>> <<widget "backComp">> <<if $bunnybuild is undefined or $bunnybuild is NaN>> <<set $bunnybuild to 0>> <<set $bunny to 0>> <</if>> <<if $transformationParts.bunny is undefined>> <<set $transformationParts.bunny to {ears:"disabled", tail:"disabled"}>> <<if $bunny gte 1>> <<set $transformationParts.bunny.ears to "default">> <<set $transformationParts.bunny.tail to "default">> <</if>> <</if>> <<if $transformationParts.traits.preyAnimal is undefined or $transformationParts.traits.strongFeet is undefined or $transformationParts.traits.predatoryAnimal is undefined>> <<set $transformationParts.traits.predatoryAnimal to "disabled">> <<set $transformationParts.traits.preyAnimal to "disabled">> <<set $transformationParts.traits.strongFeet to "disabled">> <</if>> <!-- v0.3.12.4 $daily object --> <<run dailyConvert()>> <<if _version lte 30408>>/* DO NOT INCREMENT */ /* 0.3.4.8 is the last version that should need the old vvu */ /* for versions <= 0.3.4.8, run old version handler */ <<variablesVersionUpdate>> <</if>> <<if $saveVersions.last() isnot StartConfig.version>> <<set $saveVersions.push(StartConfig.version)>> <</if>> /* * * * * * * * * * * * * * * * * * * * * * * * new backwards compatibility code goes here */ /* Code that should not be moved into a check like above */ <<set $runWardrobeSanityChecker to true>> <<if $objectVersion.updateClothes lt 63 or $objectVersion.updateClothes is undefined>> <<updateClothes>> <<if $objectVersion.updateClothes lt 38>> <!-- V0.4.0.7 return items stuck in $store without proper .location --> <<run for (const slot in V.store) V.store[slot].forEach(i => { if (i.location === 0) i.location = "getBack" })>> <<storeon "getBack" "return">> <</if>> <<if $objectVersion.updateClothes lt 63>> <!--Should'nt need to re-run that often--> <<run clothesDataTrimmerLoop()>> <</if>> <!--If you have added any `colour_combat` or `accessory_colour_combat` to clothes that need their `colour` or `accessory_colour`, this will clear them. Remove `colour_combat` or `accessory_colour_combat` where this is the case, they are independant so `colour_combat` will only clear `colour`--> <!-- integrity_max was zero for a piece of clothing [Skimpy Leotard], this caused an infinity money bug at tailor, update people's clothing here --> <<if $objectVersion.updateClothes lt 56>> <<run fixIntegrityUpdater()>> <</if>> <!-- reset propEquipped --> <<if $objectVersion.updateClothes lt 62>> <<if $propEquipped is 1 and $worn.handheld.type !== "prop" and $worn.handheld.variable !== "featherduster">><<set $propEquipped to 0>><</if>> <</if>> <<set $objectVersion.updateClothes to 63>> <</if>> <<if $objectVersion.specialClothes lt 16 or $objectVersion.specialClothes is undefined>> <<specialClothesSetup>> <<specialClothesUpdate>> <<set $objectVersion.specialClothes to 16>> <</if>> <<if $objectVersion.wardrobes lt 13 or $objectVersion.wardrobes is undefined>> <<wardrobesUpdate>> <<set $objectVersion.wardrobes to 13>> <</if>> <<if $objectVersion.museumAntiques lte 14 and $museumAntiques.antiques.antiquewhitescrystal isnot undefined>> <<run delete $museumAntiques.antiques.antiquewhitescrystal>> <</if>> <<if $objectVersion.museumAntiques lt 17 or $objectVersion.museumAntiques is undefined>> /*Moved undefined checks for new antiques to the widget below*/ <<updateMuseumAntiques>> <<set $objectVersion.museumAntiques to 16>> <</if>> <<pregnancyVar>> <<updateNewNamedNpcs>> <!-- Jimmy: Reset NPC slots if necessary Old versions prior to 3.4.* did not have empty slots properly set to baseNPC. --> <<if $npcListVersion lt 3>> <<npcList>> <</if>> <!-- Jimmy: Run updater for EventSystem. Only runs if behind on schema, and if $event exists. --> <<run EventSystem.update()>> <!-- v0.3.6.2: Updating NPC clothing when needed --> <<if $objectVersion.npcClothes lt 1 or $objectVersion.npcClothes is undefined>> <<set $objectVersion.npcClothes to 1>> <<if $halloween is 1 and $robinmissing is 0 and $hour gte 16 and $hour lt 19 and $monthday is 31 and $halloween_robin_costume and C.npc.Robin.init is 1>> <<if !C.npc.Robin.outfits>> <<initNNPCClothes "Robin">> <</if>> <<if !C.npc.Robin.outfits.includes($halloween_robin_costume)>> <<addNNPCOutfit "Robin" $halloween_robin_costume>> <</if>> <</if>> <<if C.npc.Kylar.state is "prison">> <<if !C.npc.Kylar.outfits>> <<initNNPCClothes "Kylar">> <</if>> <<if !C.npc.Kylar.outfits.includes("prisonJumpsuit")>> <<addNNPCOutfit "Kylar" "prisonJumpsuit">> <</if>> <</if>> <!-- Bestow clothing to any active NPCs--> <<if $NPCList isnot undefined and !$NPCList[0].clothes>> <<for _i = 0; _i < $NPCList.length; _i++>> <<if $NPCList[_i].type>> <<if $NPCList[_i].type is "human">> <<npcClothesType $NPCList[_i] "default">> <<else>> <<npcClothesType $NPCList[_i] "naked">> <</if>> <</if>> <</for>> <</if>> <<for $_key, $_npc range $per_npc>> <<if $_npc>> <!-- Bestow clothing to persistent NPCs--> <<if !$_npc.clothes>> <<if ["anxious_guard", "methodical_guard", "relaxed_guard", "veteran_guard"].includes($_key)>> <<npcClothesType $per_npc[$_key] "security">> <<elseif ["scarred_inmate", "tattooed_inmate"].includes($_key)>> <<npcClothesType $per_npc[$_key] "prison">> <<elseif ["tower_creature"].includes($_key)>> <<npcClothesType $per_npc[$_key] "naked">> <<elseif ["farm_tower_guard"].includes($_key)>> <<npcClothesName $per_npc[$_key] "wildsFlannel">> <<elseif ["prison_intro_officer"].includes($_key)>> <<npcClothesType $per_npc[$_key] "police">> <<elseif ["pinch"].includes($_key)>> <<npcClothesType $per_npc[$_key] "robinGiftChristmas">> <<elseif ["wraith"].includes($_key)>> <<npcClothesType $per_npc[$_key] "Wraith">> <<else>> <<npcClothesType $per_npc[$_key] "default">> <</if>> <</if>> <</if>> <</for>> <</if>> <!-- v0.3.8.2: fix for cursed clothing being present in the player's wardrobes --> <<if Object.keys($wardrobe).some(slot => Object.values($wardrobe[slot]).some(clothing => clothing.cursed))>> <<run Object.keys($wardrobe).forEach(slot => { if (slot is "space") return; $wardrobe[slot] = $wardrobe[slot].filter(clothing => clothing.cursed is 0); })>> <<run Object.keys($wardrobes).forEach(location =>{ if (location is "shopReturn" || location is "wardrobe") return; Object.keys($wardrobes[location]).forEach(slot => { if (["isolated", "name", "shopSend", "space", "transfer", "unlocked"].includes(slot)) return; $wardrobes[location][slot] = $wardrobes[location][slot].filter(clothing => clothing.cursed === 0); }) })>> <</if>> <<npcPregnancyUpdater>><!--Has checks to make sure it only changes data when required, don't block behind a check--> <<if _version lt 40000>>/* DO NOT INCREMENT */ /* 0.4.0.0 is the last version that should need the old vvu */ /* for versions <= 0.4.0.0, run old version handler */ <<variablesVersionUpdate2>> <</if>> <!-- Fix for hair style renames --> <<if !$objectVersion.hairFix lt 1 or $objectVersion.hairFix is undefined>> <<set _hairUpdate to { "left fishtail braid": "left fishtail", "right fishtail braid": "right fishtail", "side thicktail": "thick pigtails", "side tail left": "sidetail left", "side tail right": "sidetail right", "side thicktail": "thick sidetail", }>> <<set _fringeUpdate to { "blunt sidelocks": "blunt locks", "french bob": "tied back", }>> <<if _hairUpdate[$hairtype]>><<set $hairtype to _hairUpdate[$hairtype]>><</if>> <<if _fringeUpdate[$fringetype]>><<set $fringetype to _fringeUpdate[$fringetype]>><</if>> <<if $savedHairStyles>> <<run Object.values($savedHairStyles).forEach(style => { if (T.hairUpdate[style.hairtype]) style.hairtype = T.hairUpdate[style.hairtype]; if (T.fringeUpdate[style.fringetype]) style.fringetype = T.fringeUpdate[style.fringetype]; })>> <</if>> <<set $objectVersion.hairFix to 1>> <</if>> /* End of Code that should not be moved */ <!-- v0.3.6.2: cow update - ToDo: Move to variables-static --> <<set $BeastList to ["dog","cat","pig","wolf","dolphin","lizard","bear","boar","creature","horse","fox","hawk","cow","spider"]>> <!-- Will navigate to V.makeup.eyelenses, and attempt to turn that into the proper object this time. Needs configing if it can be moved to `variablesVersionUpdate2`--> <<run restructureEyeColourVariable()>> <!-- v0.3.8.6: furniture update --> <<run Furniture.update(true)>> <!-- v0.3.8.6: Sydney Rite of Promise protects PC's angel TF --> <!-- !! Readjust after marriage is added !! --> <<if $templePromised isnot "" and $player.virginity.vaginal is true and $player.virginity.penile is true>> <<set $virginityProtected to true>> <</if>> <!-- <= v0.3.8.6: fame object --> <<if !$objectVersion.fame>> <<if typeof $fame isnot "object">> <<set $fame to { exhibitionism: $fameexhibitionism, prostitution: $fameprostitution, bestiality: $famebestiality, sex: $famesex, rape: $famerape, good: $famegood, business: $famebusiness, scrap: $famescrap, pimp: $famepimp, social: $famesocial, model: $famemodel, pregnancy: $famepregnancy }>> <<if $statFreeze and !$frozenValues>> <!-- For scenes like Janet and Raul, Pinch, or the Schism --> <<set $real_fame to { exhibitionism: $real_fameexhibitionism, prostitution: $fameprostitution, bestiality: $famebestiality, sex: $real_famesex, rape: $real_famerape, good: $famegood, business: $famebusiness, scrap: $real_famescrap, pimp: $famepimp, social: $famesocial, model: $famemodel, pregnancy: $famepregnancy }>> <</if>> <<unset $fameexhibitionism>> <<unset $fameprostitution>> <<unset $famebestiality>> <<unset $famesex>> <<unset $famerape>> <<unset $famegood>> <<unset $famebusiness>> <<unset $famescrap>> <<unset $famepimp>> <<unset $famesocial>> <<unset $famemodel>> <<unset $famepregnancy>> <<unset $real_fameexhibitionism>> <<unset $real_famesex>> <<unset $real_famerape>> <<unset $real_famescrap>> <<if $park_fame is undefined>> <<set $park_fame to $famepark>> <<unset $famepark>> <</if>> <</if>> <<set $objectVersion.fame to 1>> <</if>> <!-- This patch makes sure certain properties exist in $fame. Defaults to 0. --> <<if $objectVersion.fame is 1>> <<set $_keys to [ 'exhibitionism', 'prostitution', 'bestiality', 'sex', 'rape', 'good', 'business', 'scrap', 'pimp', 'social', 'model', 'pregnancy' ]>> <<for $_key range $_keys>> <<if $fame[$_key] eq null>> <<set $fame[$_key] to 0>> <</if>> <</for>> <<set $objectVersion.fame to 2>> <</if>> <!-- This patch checks existing properties of $fame for non-numeric values, and assigns them a default of 0. --> <<if $objectVersion.fame is 2>> <<for $_key, $_val range $fame>> <<if typeof $_val isnot 'number' or $_val is NaN>> <<set $fame[$_key] to 0>> <</if>> <</for>> <<set $objectVersion.fame to 3>> <</if>> <!-- <= v0.3.8.6: Modeling rework --> <<if typeof $photo is 'object'>> <<script>> const photo = V.photo; const versions = V.objectVersion; if (versions.photo === undefined) { versions.photo = 0; } switch (versions.photo) { case 0: if (typeof photo.fame_stage === 'number') { photo.audienceSize = Math.ceil(photo.fame_stage / 2); photo.timesWithThisAudienceSize = ((photo.fame_stage - 1) % 2) + 1; } else { photo.audienceSize = 1; photo.timesWithThisAudienceSize = 0; } delete photo.fame_stage; if (typeof photo.money !== 'number' || Number.isNaN(photo.money)) { photo.money = 450; } versions.photo = 1; } <</script>> <</if>> <!-- v0.3.13.0 Persistent NPCs stealing the Wraith's name --> <<if $NPC_names_m.includes("Ivory Wraith") or $NPC_names_f.includes("Ivory Wraith")>> <<set $NPC_names_m.delete("Ivory Wraith")>> <<set $NPC_names_f.delete("Ivory Wraith")>> <</if>> <<if Object.values($per_npc).some(npc => npc.name is "Ivory Wraith")>> <<for _i, _npc range $per_npc>> <<if $per_npc[_i].name is "Ivory Wraith">> <<set $per_npc[_i].name to ($per_npc[_i].pronoun is "m" ? $NPC_names_m.pluck() : $NPC_names_f.pluck())>> <</if>> <</for>> <</if>> <!-- v0.3.13.0 Fixed Landry forgetting about Mickey --> <<if $police_hack gte 4>> <<set $mickeyPub to 2>> <</if>> <!-- v0.3.13.3 Schism unset fix --> <<if $schism>> <<unset $schism>> <</if>> <!-- v0.3.13.5 --> <<if $zoom isnot undefined>> <<set $options.zoom to $zoom>> <<unset $zoom>> <</if>> <<if $options.zoom is undefined>> <<set $options.zoom to 100>> <</if>> <<if $numberify_enabled isnot undefined>> <<set $options.numberify_enabled to $numberify_enabled>> <<unset $numberify_enabled>> <</if>> <<if $options.numberify_enabled is undefined>> <<set $options.numberify_enabled to 1>> <</if>> <<if $timestyle isnot undefined>> <<set $options.timestyle to $timestyle>> <<unset $timestyle>> <</if>> <<if $options.timestyle is undefined>> <<set $options.timestyle to "military">> <</if>> <<if $oldclock isnot undefined>> <<unset $oldclock>> <</if>> <!-- v0.3.13.5 Impreg fame in fame object --> <<if $fame.impreg is undefined>> <<set $fame.impreg to 0>> <</if>> <!-- v0.3.13.5 Condom sidebar display --> <<if $options.condomsDisplay is undefined>> <<set $options.condomsDisplay to "standard">> <<set $options.traitOverlayFormat to "table">> <</if>> <!-- v0.3.13.5 Deprecated Code and Bodysize Fix --> <<if !$bodysize>> <<switch $physiquesize>> <<case 6000>><<set $bodysize to 0>> <<case 10000>><<set $bodysize to 1>> <<case 12000>><<set $bodysize to 2>> <<case 16000>><<set $bodysize to 3>> <<default>><<set $bodysize to 2>><<set $physiquesize to 12000>> <</switch>> <</if>> <!-- v0.3.13.5 undefined fringe colour --> <<if $hairfringecolour is undefined>> <<set $hairfringecolour to $haircolour>> <</if>> <!-- v0.3.13.5 Nightmares ruining angel TF --> <<if $activeNightmare and $real_transformationParts is undefined>> <<set $real_angel to $angel>> <<set $real_angelbuild to $angelbuild>> <<set $real_fallenangel to $fallenangel>> <<set $real_transformationParts to clone($transformationParts)>> <<set $real_purity to $purity>> <</if>> <!-- v0.3.13.5 Pregnancy Utilities --> <<if $storedNPCs is undefined>> <!-- Separated object for compressing NPCs --> <<set $storedNPCs to {}>> <!-- Timer for events at the nursery --> <<if $home_event_ward_timer is undefined>> <<set $home_event_ward_timer to 3>> <<set $home_event_ward_timer to 0>> <</if>> <!-- Default condom setting --> <<if $condomLvl is undefined>> <<set $condomLvl to 3>> <</if>> <!-- Condom object for when more condom types are implemented --> <<if $player.inventory and !$player.inventory.condoms>> <<set $player.inventory.condoms to {}>> <</if>> <!-- Clears unused values, establishes debug values --> <<if $condomchance>> <<set $condomChance to 60>> <<set $condomUseChanceRape to 33>> <<set $condomUseChanceCon to 83>> <<unset $condomchance>> <<unset $condomautochance>> <</if>> <!-- Old testing variable I forgot to clear --> <<unset $test>> <</if>> <!-- v0.3.13.5 Save compression --> <<if $compressSave is undefined>> <<set $compressSave to true>> <</if>> <!-- v0.3.13.5 Two-tone hair --> <<if $hairColourStyle is undefined>> <<set $hairColourStyle to "simple">> <<set $hairColourGradient to { style: "split", colours: ["red", "black"]}>> <</if>> <<if $hairFringeColourStyle is undefined>> <<set $hairFringeColourStyle to "simple">> <<set $hairFringeColourGradient to { style: "split", colours: ["red", "black"]}>> <</if>> <!-- v0.3.13.5 Whitney rescued state removal and pillory state addition --> <<if C.npc.Whitney.state is "rescued">> <<set $whitneyrescued to true>> <<set C.npc.Whitney.state to "active">> <</if>> <<if $pillory_tenant isnot undefined and ($pillory_tenant.special.name is "Whitney" and C.npc.Whitney.state isnot "pillory")>> <!-- Making "pillory" a state means that whitney's state shouldn't be anything but "pillory" when they're locked up --> <<set C.npc.Whitney.state to "pillory">> <</if>> <!-- v0.3.13.5 NPC Skin simplification --> <<if $whitechance>> <<unset $whitechance>> <<unset $whitechanceselector>> <<unset $blackchanceselector>> <<for $_i to 0; $_i lt $NPCNameList.length; $_i++>> <<if $NPCName[$_i].init is 1 and !$NPCName[$_i].skincolour>> <<if random(1, 100) lte $blackchance>> <<set $NPCName[$_i].skincolour to "black">> <<else>> <<set $NPCName[$_i].skincolour to "white">> <</if>> <</if>> <</for>> <<if C.npc["Ivory Wraith"].init is 1>> <<set C.npc["Ivory Wraith"].skincolour to "ghost">> <</if>> <<for $_s to 0; $_s lt $NPCList.length; $_s++>> <<if $NPCList[$_s].health and !$NPCList[$_s].skincolour>> <<if $NPCList[$_s].fullDescription is $npc[$_s]>> <<set $NPCList[$_s].skincolour to C.npc[$npc[$_s]].skincolour>> <<else>> <<if random(1, 100) lte $blackchance>> <<set $NPCList[$_s].skincolour to "black">> <<else>> <<set $NPCList[$_s].skincolour to "white">> <</if>> <</if>> <</if>> <</for>> <</if>> <!-- v0.3.13.5 disable old renderer settings --> <<if $options.sidebarRenderer is "both" or $options.sidebarRenderer is 'img'>> <<set $options.sidebarRenderer to 'canvas'>> <</if>> <!-- v0.3.13.5 English play event and some passage renames--> <<if $englishPlay is undefined>> <<set $englishPlay to "none">> <</if>> <<if $debugdisable isnot undefined>> <<set $options.debugdisable to $debugdisable>> <<unset $debugdisable>> <</if>> <<if $masturbationtimestat isnot undefined>> <<if !$secondsSpentMasturbating>> <<set $secondsSpentMasturbating to $masturbationtimestat * 60>> <</if>> <<unset $masturbationtimestat>> <</if>> <<if $prison_scarred_done isnot undefined>> <<unset $prison_scarred_done>> <<set $daily.prison.scarredDone to true>> <</if>> <<if $prison_relaxed_spoke isnot undefined>> <<unset $prison_relaxed_spoke>> <<set $daily.prison.relaxedSpoke to true>> <</if>> <<if $prison_relaxed_greet isnot undefined>> <<unset $prison_relaxed_greet>> <<set $daily.prison.relaxedGreet to true>> <</if>> <<if $prison_anxious_spoke isnot undefined>> <<unset $prison_anxious_spoke>> <<set $daily.prison.anxiousSpoke to true>> <</if>> <<if $prison_anxious_greet isnot undefined>> <<unset $prison_anxious_greet>> <<set $daily.prison.anxiousGreet to true>> <</if>> <<if $prison_veteran_spoke isnot undefined>> <<unset $prison_veteran_spoke>> <</if>> <<if $prison_veteran_greet isnot undefined>> <<unset $prison_veteran_greet>> <<set $daily.prison.veteranGreet to true>> <</if>> <<if $prison_methodical_spoke isnot undefined>> <<unset $prison_methodical_spoke>> <<set $daily.prison.methodicalSpoke to true>> <</if>> <<if $prisonwake isnot undefined>> <<unset $prisonwake>> <<set $daily.prison.wake to true>> <</if>> <<if $prison_attention_day isnot undefined>> <<unset $prison_attention_day>> <<set $daily.prison.attentionDay to true>> <</if>> <<if $glideScared isnot undefined>> <<unset $glideScared>> <<set $daily.glideScared to true>> <</if>> <<if !$daily.school.attended>> <<set $daily.school.attended to {}>> <</if>> <<if $scienceattended isnot undefined>> <<set $daily.school.attended.science to $scienceattended == 1>> <<unset $scienceattended>> <<set $daily.school.attended.maths to $mathsattended == 1>> <<unset $mathsattended>> <<set $daily.school.attended.english to $englishattended == 1>> <<unset $englishattended>> <<set $daily.school.attended.history to $historyattended == 1>> <<unset $historyattended>> <<set $daily.school.attended.swimming to $swimmingattended == 1>> <<unset $swimmingattended>> <</if>> <<if $weekly is undefined>> <<set $weekly to { theft: {}, sewers: {} }>> <</if>> <<if $robinBrothelWeekly isnot undefined>> <<set $weekly.robinBrothel to $robinBrothelWeekly>> <<unset $robinBrothelWeekly>> <</if>> <<if $edenPreyWeekly isnot undefined>> <<set $weekly.edenPrey to $edenPreyWeekly>> <<unset $edenPreyWeekly>> <</if>> <<if $leightondancerefused isnot undefined>> <<set $weekly.leightonDanceRefused to $leightondancerefused>> <<unset $leightondancerefused>> <</if>> <<if $dancestudiotheft isnot undefined>> <<set $weekly.theft.danceStudio to $dancestudiotheft>> <<unset $dancestudiotheft>> <</if>> <<if $oceanbreezetheft isnot undefined>> <<set $weekly.theft.oceanBreeze to $oceanbreezetheft>> <<unset $oceanbreezetheft>> <</if>> <<if $stripclubtheft isnot undefined>> <<set $weekly.theft.stripClub to $stripclubtheft>> <<unset $stripclubtheft>> <</if>> <<if $clothingshoptheft isnot undefined>> <<set $weekly.theft.clothingShop to $clothingshoptheft>> <<unset $clothingshoptheft>> <</if>> <<if $adultshoptheft isnot undefined>> <<set $weekly.theft.adultShop to $adultshoptheft>> <<unset $adultshoptheft>> <</if>> <<if $hairdresserstheft isnot undefined>> <<set $weekly.theft.hairDressers to $hairdresserstheft>> <<unset $hairdresserstheft>> <</if>> <<if $tailortheft isnot undefined>> <<set $weekly.theft.tailor to $tailortheft>> <<unset $tailortheft>> <</if>> <<if $petshoptheft isnot undefined>> <<set $weekly.theft.petShop to $petshoptheft>> <<unset $petshoptheft>> <</if>> <<if $toyshoptheft isnot undefined>> <<set $weekly.theft.toyShop to $toyshoptheft>> <<unset $toyshoptheft>> <</if>> <<if $tattooparlourtheft isnot undefined>> <<set $weekly.theft.tattooParlour to $tattooparlourtheft>> <<unset $tattooparlourtheft>> <</if>> <<if $ridingschooltheft isnot undefined>> <<set $weekly.theft.ridingSchool to $ridingschooltheft>> <<unset $ridingschooltheft>> <</if>> <<if $spatheft isnot undefined>> <<set $weekly.theft.spa to $spatheft>> <<unset $spatheft>> <</if>> <<if $schoollibrarymoneytheft isnot undefined>> <<set $weekly.theft.schoolLibraryMoney to $schoollibrarymoneytheft>> <<unset $schoollibrarymoneytheft>> <</if>> <<if $infirmarydrugstheft isnot undefined>> <<set $weekly.theft.infirmaryDrugs to $infirmarydrugstheft>> <<unset $infirmarydrugstheft>> <</if>> <<if $furnitureshoptheft isnot undefined>> <<set $weekly.theft.furnitureShop to $furnitureshoptheft>> <<unset $furnitureshoptheft>> <</if>> <<if $streetpolice isnot undefined>> <<set $weekly.streetPolice to $streetpolice>> <<unset $streetpolice>> <</if>> <<if $sewersantiquecrystal isnot undefined>> <<set $weekly.sewers.antiqueCrystal to $sewersantiquecrystal>> <<unset $sewersantiquecrystal>> <</if>> <<if $sewersantiquewatch isnot undefined>> <<set $weekly.sewers.antiqueWatch to $sewersantiquewatch>> <<unset $sewersantiquewatch>> <</if>> <<if $sewersantiquedildo isnot undefined>> <<set $weekly.sewers.antiqueDildo to $sewersantiquedildo>> <<unset $sewersantiquedildo>> <</if>> <<if $sewersantiquecandlestick isnot undefined>> <<set $weekly.sewers.antiqueCandlestick to $sewersantiquecandlestick>> <<unset $sewersantiquecandlestick>> <</if>> <<if $sewersantiquehorn isnot undefined>> <<set $weekly.sewers.antiqueHorn to $sewersantiquehorn>> <<unset $sewersantiquehorn>> <</if>> <<if $temple_fire isnot undefined>> <<set $weekly.templeFire to $temple_fire>> <<unset $temple_fire>> <</if>> <<if $police_high isnot undefined>> <<set $weekly.policeHigh to $police_high>> <<unset $police_high>> <</if>> <<if $school_pool_swap isnot undefined>> <<set $weekly.schoolPoolSwap to $school_pool_swap>> <<unset $school_pool_swap>> <</if>> <<if $beach_cave_compass isnot undefined>> <<set $weekly.beachCaveCompass to $beach_cave_compass>> <<unset $beach_cave_compass>> <</if>> <<if $dance_job isnot undefined>> <<set $weekly.danceJob to $dance_job>> <<unset $dance_job>> <</if>> <<if $whitneyPub isnot undefined>> <<set $weekly.whitneyPub to $whitneyPub>> <<unset $whitneyPub>> <</if>> <<if $adultShopWhitney isnot undefined>> <<set $weekly.adultShopWhitney to $adultShopWhitney>> <<unset $adultShopWhitney>> <</if>> <!-- v0.4.0.6 change (87f8e633085bb4be8f4f0d099012b1e0b077242a) that I've moved up here. the reason is - this variable is used in the edge-case handled below (the <<pass _passMinutes>> macro that the v0.4 Time refactor sometimes calls ends up reading schoolLessonsMissed.science, which obviously breaks if this initialization doesn't happen at this point. If you add any calls to <<pass>> before this line in backComp - it will also break for any players whose save doesn't have the schoolLessonsMissed paramm yet. --> <<if $sciencemissed isnot undefined>> <<set $schoolLessonsMissed to { science: $sciencemissed, maths: $mathsmissed, english: $englishmissed, history: $historymissed, swimming: $swimmingmissed }>> <<unset $sciencemissed>> <<unset $mathsmissed>> <<unset $englishmissed>> <<unset $historymissed>> <<unset $swimmingmissed>> <</if>> <!-- v0.4 Time refactor --> <<if $time isnot undefined and !$timeStamp>> <<script>> /* Tries to set the date to the same as the previous version's date. If weekday is different from the real date, well shit, we're faking it. */ const month = Time.monthNames.map(month => month.toLowerCase()).indexOf(V.month) + 1; const date = new DateTime(V.year, month, V.monthday, Math.min(V.hour, 23), Math.min(V.minute, 59), V.seconds); const startDate = new DateTime(date); Time.startDate = startDate.addDays(-V.days); const passMinutes = (V.hour > 23 ? (V.hour - 23) * 60 : 0) + (V.minute > 59 ? V.minute - 59 : 0); if (V.real_season) V.real_timeStamp = new DateTime(V.real_year, Time.monthNames.indexOf(V.real_month.toUpperFirst()) + 1, V.real_monthday, V.real_hour, V.real_minute).timeStamp - V.startDate; Time.setDate(date); V.weekDayOffset = (V.weekday - Time.weekDay + 6) % 7; /* stay positive */ if (V.weekDayOffset === 6) delete V.weekDayOffset; /* and clean the rubbish */ ["time", "year", "yeardays", "season", "month", "monthday", "weekday", "schoolday", "days", "daystate", "dayname", "hour", "minute", "seconds", "pass", "real_year", "real_season", "real_month", "real_monthday", "real_hour", "real_minute", "real_time"].forEach(v => delete V[v]); Time.set(V.timeStamp + passMinutes * 60); <</script>> <</if>> <!-- v0.4 Vrel stuff that he forgot to label --> <<if $hypnosisdisable is undefined>> <<set $hypnosisdisable to "f">> <</if>> <<if $housekeeping is undefined>> <<set $housekeeping to 0>> <</if>> <<if $town_projects is undefined>> <<set $town_projects to {}>> <</if>> <<if $ruffledisable is undefined>> <<set $ruffledisable to "f">> <</if>> <<if $child_played is undefined>> <<set $child_played to []>> <</if>> <!-- v0.4 Wraith stuff --> <<if $necklaceThief is undefined>> <<if $museumAntiques.antiques.antiqueivorynecklace isnot "notFound">> <<set $necklaceThief to "player">> <<elseif $town_projects.diving gte 3 and $museumAntiques.antiques.antiqueivorynecklace is "notFound">> /* for anyone on the dev build that passed the normal trigger already */ <<museumAntiqueStatus "antiqueivorynecklace" "found">> <<museumAntiqueStatus "antiqueivorynecklace" "talk">> <<set $necklaceThief to "diver">> <<else>> <<set $necklaceThief to "">> <</if>> <</if>> <!-- v0.4 Fox TF and fox encounters --> <<if $fox is undefined or typeof $fox is "string">> <<set $foxbuild to 0>> <<set $fox to 0>> <<set $transformationParts.traits.mateForLife to ($harpy gte 3 ? "default" : "disabled")>> <!-- Unrelated fix for fallenbuild being NaN on existing saves --> <<if !$fallenbuild>> <<set $fallenbuild to 0>> <</if>> <</if>> <!-- V0.4 Moving flaunting to mirror --> <<if $uncomfortable.flaunting isnot undefined>> <<if $uncomfortable.flaunting is false and $demon gte 4 and $exhibitionism gte 95>> <<set $transformationParts.traits.flaunting to "default">> <<else>> <<set $transformationParts.traits.flaunting to "disabled">> <</if>> <<run delete $uncomfortable.flaunting>> <</if>> <!-- V0.4 egg --> <<if $plants.egg>> <<set $plants.chicken_egg to $plants.egg>> <<run delete $plants.egg>> <<set $plants.chicken_egg.name to "chicken_egg">> <<set $plants.chicken_egg.plural to "chicken eggs">> <</if>> <<if $farmersProduce !== undefined and $farmersProduce.selling !== undefined && $farmersProduce.selling.egg>> <<set $farmersProduce.selling.chicken_egg to $farmersProduce.selling.egg>> <<run delete $farmersProduce.selling.egg>> <</if>> <!-- V0.4 tower guard state saved --> <<if $per_npc.farm_tower_guard and $per_npc.farm_tower_guard.active isnot undefined>> <<run delete $per_npc.farm_tower_guard.active>> <<set $per_npc.farm_tower_guard.bold to 0>> <<set $per_npc.farm_tower_guard.lefthand to 0>> <<set $per_npc.farm_tower_guard.righthand to 0>> <<set $per_npc.farm_tower_guard.mouth to 0>> <<set $per_npc.farm_tower_guard.chest to "clothed">> <<set $per_npc.farm_tower_guard.health to $per_npc.farm_tower_guard.healthmax>> <<set $per_npc.farm_tower_guard.location to {head: 0, genitals: 0}>> <<set $per_npc.farm_tower_guard.penis to ($per_npc.farm_tower_guard.penis isnot "none") ? "clothed" : "none">> <<set $per_npc.farm_tower_guard.vagina to ($per_npc.farm_tower_guard.vagina isnot "none") ? "clothed" : "none">> <</if>> <!-- V0.4.0.2 SNEAKY posture undefined --> <<if $player.gender_posture is undefined>> <<if $background.crossdresser is true>> <<if $player.gender is "f">> <<set $player.gender_posture to "m">> <<elseif $player.gender is "m">> <<set $player.gender_posture to "f">> <</if>> <<else>> <<set $player.gender_posture to "n">> <</if>> <</if>> <!-- V0.4.0.3 SNEAKY - V0.4.0.6 empty NPC name arrays --> <<if !$NPC_names_m or $NPC_names_m.length is 0 or !$NPC_names_f or $NPC_names_f.length is 0>> <<init_names>> <<set $_per_k to Object.keys($per_npc)>> <<for $_per_c range $_per_k>> <<set $NPC_names_m.delete($per_npc[$_per_c].name)>> <<set $NPC_names_f.delete($per_npc[$_per_c].name)>> <</for>> <</if>> <<if $combat is 1>> <!-- Update the index attached to NPC properties if they exist. --> <<script>> V.NPCList.forEach((e, i) => { if (e.type && !Number.isFinite(e.index)) e.index = i; }); <</script>> <</if>> <!-- Fixing broken transformation stuff --> <<if $tfFIX is undefined or $tfFIX lte 4>> <<if $tfFIX is undefined>> <!-- V0.4.0.5 repair transformationParts object after damage from mid-prayer room or nightmare saves --> <<if $transformationParts.fox is undefined>> <<set $transformationParts.fox to {ears:"disabled", tail:"disabled", cheeks:"disabled"}>> <<if $transformationParts.traits.mateForLife is undefined or $transformationParts.traits.flaunting is undefined>> <<set $transformationParts.traits to {fangs:"disabled", sharpEyes:"disabled", mateForLife:"disabled", flaunting:"disabled"}>> <<if $wolfgirl gte 2 or $cat gte 2 or $fox gte 2>> <<set $transformationParts.traits.fangs to "default">> <</if>> <<if $cat gte 2 or $harpy gte 2 or $fox gte 2>> <<set $transformationParts.traits.sharpEyes to "default">> <</if>> <<if $fox gte 3 or $harpy gte 3>> <<set $transformationParts.traits.mateForLife to "default">> <<else>> <<set $transformationParts.traits.mateForLife to "disabled">> <</if>> <<set $transformationParts.traits.flaunting to "disabled">> <</if>> <<if $fox gte 4>> <<set $transformationParts.fox.ears to "default">> <</if>> <<if $fox gte 5>> <<set $transformationParts.fox.cheeks to "default">> <</if>> <<if ($fox gte 6 or ($transformationParts.fox.tail isnot "hidden" and $transformationParts.fox.tail isnot "disabled"))>> <<set $transformationParts.fox.tail to "default">> <</if>> <</if>> <!-- V0.4.0.5 Stop any saves in the above situation from being broken upon leaving --> <<if $real_transformationParts and !$real_transformationParts.fox>> <<set $real_transformationParts.fox to {ears:"disabled", tail:"disabled", cheeks:"disabled"}>> <<if !$real_transformationParts.traits>> <<set $real_transformationParts.traits to clone($transformationParts.traits)>> <</if>> <<if $real_transformationParts.traits.mateForLife is undefined or $real_transformationParts.traits.flaunting is undefined>> <<if $fox gte 3 or $harpy gte 3>> <<set $real_transformationParts.traits.mateForLife to "default">> <<else>> <<set $real_transformationParts.traits.mateForLife to "disabled">> <</if>> <<set $real_transformationParts.traits.flaunting to "disabled">> <</if>> <</if>> <</if>> <<if $tfFIX is undefined or $tfFIX is 1>> <!-- v0.3.13.5 - v0.4.0.8 Fix for virgin fallen angels, moved and fixed from earlier part of versionupdate --> <<if $fallenangel is 2>> <<set $_isHerm to $player.gender is "h">> <<set $_hasVaginalVirginity to $player.vaginaExist and $player.virginity.vaginal is true>> <<set $_hasPenileVirginity to $player.penisExist and $player.virginity.penile is true>> <<if !$_isHerm and ($_hasVaginalVirginity or $_hasPenileVirginity) or $_isHerm and $_hasVaginalVirginity and $_hasPenileVirginity>> <<set $fallenangel to 0>> <<angelTransform>> <<set $transformationParts.fallenAngel.halo to "disabled">> <<set $transformationParts.fallenAngel.wings to "disabled">> <</if>> <</if>> <!-- V0.4.0.8 Fix for non-virgin herm angels from bad fix earlier that didn't take herms into account --> <<if ($angel gte 6) and $player.gender is "h" and !$virginityProtected and ($player.virginity.vaginal isnot true or $player.virginity.penile isnot true)>> <<fallenTransform>> <</if>> <</if>> <!-- 0.5.3.0 Clear invalid transformation parts --> <<if $tfFIX is undefined or $tfFIX lte 4>> <<validateTransformations>> <</if>> <<set $tfFIX to 5>> <</if>> <!-- V0.4.0.5 Old saves with untyped named NPCs --> <<if $NPCName[0].type is undefined>> <<set $_WHY to ["human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "wolf", "human", "human", "human", "human", "hawk", "human", "human", "human"]>> <<for $_killMe to 0; $_killMe lte $NPCName.length -1; $_killMe++>> <<set $NPCName[$_killMe].type to $_WHY[$_killMe]>> <</for>> <</if>> <!-- To fix issues from when the strap ons overwrote $player.penissize --> <<if $player.penisExist and $playerPenisSizeBackup>> <<set $player.penissize to $playerPenisSizeBackup>> <<elseif $player.penissize is undefined>> <<set $player.penissize to 1>> <</if>> <<unset $playerPenisSizeBackup>> <!-- V0.4.0.6 Separating tentacle forest lurker from daily object to prevent midnight errors in tentacle forest --> <<if $daily and $daily.tentacle_forest_lurker>> <<set $tentacle_forest_lurker to $daily.tentacle_forest_lurker>> <</if>> <!-- To fix issue where Dr Harper failed to remove both hermaphrodite parasites --> <<if $sexStats.vagina.pregnancy.type is "parasite" and $sexStats.vagina.pregnancy.fetus.find(parasite => parasite.stats.gender === "Hermaphrodite")>> <<set $sexStats.vagina.pregnancy.motherStatus to 2>> <</if>> <<if !$objectVersion.wardForceUnlock>> <<if !$objectVersion.wardForceUnlock and !$ward_unlocked and Object.values($children).find(child => child.location is "home" and child.birthLocation isnot "hospital")>> <<set $_childrenToIntro to Object.values($children).filter(child => child.location is "home" and child.birthLocation isnot "hospital")>> <<run console.log($_childrenToIntro)>> <<run $_childrenToIntro.forEach(child => wikifier("setBabyIntro", child.mother, "Bailey", child.birthId))>> <</if>> <<set $objectVersion.wardForceUnlock to 1>> <</if>> <<if $maleChanceMale is undefined>> <<set $maleChanceMale to $malechance>> <<set $maleChanceFemale to $malechance>> <<set $maleChanceSplit to "f">> <<set $beastMaleChanceMale to $beastmalechance>> <<set $beastMaleChanceFemale to $beastmalechance>> <<set $beastMaleChanceSplit to "f">> <</if>> <<if $forcedcrossdressingdisable is undefined>> <<set $forcedcrossdressingdisable to "f">> <</if>> <!-- V0.4.0.9 $currentFurnishing should not be a story variable, and no story variables should be (or include) functions --> <<if $currentFurnishing>> <<unset $currentFurnishing>> <<run State.history.forEach(s => delete s.variables.currentFurnishing)>> <</if>> <!-- V0.4.1.1 Fixed for some wolves having "human" sperm --> <<if !$objectVersion.pregnancyFix>> <<physicalAdjustmentsInit>> <</if>> <<if $speech_attitude is undefined>> <<set $speech_attitude to "neutral">> <</if>> <!-- V0.4.1.7 Set V.options.confirmDialogUponTabClose for the new confirm dialog box prompting when user closes/refresh tab --> <<if $options.confirmDialogUponTabClose is undefined>> <<if $ironmanmode is true>> <<set $options.confirmDialogUponTabClose to true>> <<else>> <<set $options.confirmDialogUponTabClose to false>> <</if>> <</if>> <!-- V0.4.2.0 Ear Slime Extension --> <<if $earSlime is undefined>> <<resetEarSlime>> <<set $earSlime.corruption to $corruption_slime or 0>> <<set $earSlime.event to $slimeEvent or "">> <<set $earSlime.eventTimer to $slimeSleepEvent or 0>> <<set $earSlime.eventLength to $slimeEventLength or 0>> <<set $earSlime.defyCooldown to $slimeDefyCooldown or 0>> <<set $masturbationRuinedOrgasm to 0>> <<set $ruinedOrgasmStat to 0>> <<if ["go running or swimming for an hour", "steal something", "go running or swimming naked for an hour"].includes($earSlime.event)>> <<set $earSlime.noSleep to true>> <</if>> <<unset $corruption_slime>> <<unset $slimeEvent>> <<unset $slimeSleepEvent>> <<unset $slimeDefyCooldown>> <<set $ruinedorgasmdisable to "f">> <</if>> <<if $earSlime.promiscuity is undefined>> <<set $earSlime.promiscuity to 0>> <<set $earSlime.deviancy to 0>> <<set $earSlime.exhibitionism to 0>> /* One off changes */ <<if $earSlime.event is "go commando" and !$slimeBedroomExit>> <<if $earSlime.corruption lt 50 and $earSlime.growth is 0>> <<set $earSlime.forcedCommando to random(2, 4)>> <<elseif $earSlime.growth is 0>> <<set $earSlime.forcedCommando to random(7, 21)>> <<else>> <<set $earSlime.forcedCommando to random(14, 31)>> <</if>> <<set $earSlime.event to "">> <</if>> <<if $earSlimeDaysStat is undefined>> <<set $earSlimeDaysStat to 0>> <<set $earSlimePassiveDaysStat to 0>> <<set $earSlime.days to 0>> /* All old ear slimes were aggressive */ <<set $earSlime.startedThreats to true>> <</if>> <</if>> <<if !$parasite.types.includes("parasite")>> <<run $parasite.types.push("parasite")>> <<run $parasite.parasite to []>> <<run $parasite.breasts to {}>> <</if>> <!-- V0.4.2.0 Give leotards a default colour of black after making them recolourable--> <<script>> let underUpperChanger = item => { if (item.index === 3 || item.index === 4 || item.index === 5 || item.index === 8) { if (item.colour === 0) { item.colour = "black"; item.colour_combat = "black"; } } }; V.wardrobe.under_upper.forEach(underUpperChanger); underUpperChanger(V.worn.under_upper); const underLowerChanger = item => { if (item.index === 8 || item.index === 9 || item.index === 10 || item.index === 13) { if (item.colour === 0) { item.colour = "black"; item.colour_combat = "black"; } } }; V.wardrobe.under_lower.forEach(underLowerChanger); underLowerChanger(V.worn.under_lower); <</script>> <!-- V0.4.2.0 Crime Overhaul --> <<if !$objectVersion.crime>> <<set _oldCrime to parseInt($crime) || 0>> <<set _oldCrimeHistory to parseInt($crimehistory) || 0>> <<unset $crime>><<unset $crimehistory>> <<set $crime to { assault: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, coercion: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, destruction: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, exposure: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, obstruction: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, prostitution: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, resisting: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, thievery: {current: _oldCrime, history: _oldCrimeHistory, daily: 0, count: 0, countHistory: 0}, petty: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, trespassing: {current: 0, history: 0, daily: 0, count: 0, countHistory: 0}, events: {}, }>> <<if $crime.thievery.current gte 1>> <<set $crime.thievery.count to 1>><<set $crime.thievery.countHistory to 1>> <<set C.crime.logEvent(_oldCrime, "thievery", "legacy", 0)>> <</if>> <<set $objectVersion.crime to 1>> <</if>> <!-- V0.4.2.0 Temple rank prep --> <<if $world_corruption_soft is undefined>> <<set $world_corruption_soft to 0>> <<set $world_corruption_hard to 2>> <<set $world_corruption_reduced to 0>> <<if $stat_aphrodisiacs_sold gte 1>> <<world_corruption "soft" $stat_aphrodisiacs_sold>> <</if>> <<if $sydneySeen>> <<if $sydneySeen.includes("corruptroom")>> <<world_corruption "hard" 1>> <</if>> <</if>> <<if $museumAntiques.antiques.antiquebell is "stolen">> <<world_corruption "hard" 2>> <</if>> <<if $museumAntiques.antiques.antiqueivorynecklace is "talk" or $museumAntiques.antiques.antiqueivorynecklace is "museum">> <<world_corruption "hard" 2>> <</if>> <<if $templePromised is "Sydney">> <<world_corruption "hard" -1>> <</if>> <</if>> <!-- V0.4.2.3 Fixes existing saves affected by Moderate Start "f" bug --> <<if $malechance is "f">> <<set $malechance to 0>> <</if>> <<if $beastmalechance is "f">> <<set $beastmalechance to 0>> <</if>> <!-- V0.4.2.7 livestock daily variable --> <<if $daily.livestock is undefined>> <<set $daily.livestock to {}>> <<set $daily.livestock.remyEvent to 0>> <</if>> <!-- V0.4.2.7 Pregnancy type fix --> <<if $pregnancytype is "f">> <<set $pregnancytype to "realistic">> <</if>> <!-- V0.4.2.7 We will never ever know what this code does because Scythe didn't comment it and I had to do it instead --> <<if $straponstat is undefined>> <<set $straponstat to 0>> <</if>> <!-- V0.4.3.0 Confess --> <<if C.npc.Sydney.init is 1 and $sydney and !$sydney.rank>> <<set $sydney.rank to "initiate">> <</if>> <<if $temple_rank is "initiate" or $temple_rank is "monk" or $temple_rank is "priest" and $temple_initiate_days is undefined>> <<set $temple_initiate_days to 0>> <</if>> <<if ($temple_rank is "monk" or $temple_rank is "priest") and $temple_monk_days is undefined>> <<set $temple_monk_days to 0>> <</if>> <!-- V0.4.3.2 Jordan title fix --> <<if C.npc.Jordan.title is "monk">> <<set C.npc.Jordan.title to "priest">> <</if>> <<if C.npc.Jordan.title is "nun">> <<set C.npc.Jordan.title to "priestess">> <</if>> <!-- V.pillory_tenant.endDate update --> <<if $pillory_tenant isnot undefined and (!$pillory_tenant.endDate and $pillory_tenant.endday)>> <<set $pillory_tenant.endDate to ($pillory_tenant.endday * TimeConstants.secondsPerDay + ($pillory_tenant.endhour - 7) * TimeConstants.secondsPerHour)>> <<run delete $pillory_tenant.endday>> <</if>> <<if !$options.dateFormat>> <<set $options.dateFormat to "en-GB">> <</if>> <!-- Fix for the players being able to access the Nursery while refusing to pay Bailey outside the orphanage --> <<if $baileyRefusedToPay is undefined>> <<set $baileyRefusedToPay to 0>> <</if>> <!-- Fix for alex pregnancy to allow for both the pc and Alex to be pregnant at the same time --> <<if C.npc.Alex.pregnancy and C.npc.Alex.pregnancy.knowledge>> <<set _pregnancyUpdate to getPregnancyObject()>> <<if _pregnancyUpdate.type is "human" and _pregnancyUpdate.fetus.length and _pregnancyUpdate.fetus[0].father is "Alex">> <<set C.npc.Alex.pregnancy.pcKnowledge to true>> <</if>> <<set _pregnancyUpdate to getPregnancyObject("Alex")>> <<if _pregnancyUpdate.type is "human" and _pregnancyUpdate.fetus.length>> <<set C.npc.Alex.pregnancy.selfKnowledge to true>> <</if>> <<run delete C.npc.Alex.pregnancy.knowledge>> <</if>> <!-- V0.4.4.0 fix blackjack related sets --> <<if typeof $estatePersistent.markedCards is "string">> <<set $estatePersistent.markedCards to JSON.parse($estatePersistent.markedCards)>> <</if>> <<if $blackjack && typeof $blackjack.seenMarkedCardsSoFar is "string">> <<set $blackjack.seenMarkedCardsSoFar to JSON.parse($blackjack.seenMarkedCardsSoFar)>> <</if>> <!-- V0.4.4.4 clothesPriceLewd being higher than 2 --> <<if $clothesPriceLewd gt 2>><<set $clothesPriceLewd to 2>><</if>> <!-- V0.4.4.4 ear slime typo fix --> <<if !$objectVersion.earSlimeFix and $parasite.left_ear.name isnot "slime" and $parasite.right_ear.name isnot "slime" and $earSlime and ($earSlime.days or $earSlime.corruption or $earSlime.growth)>> <<resetEarSlime>> <<set $objectVersion.earSlimeFix to 1>> <</if>> <!-- Added the new hair growth pills data --> <<if $sexStats.pills.pills && $sexStats.pills.pills["Hair Growth Formula"] is undefined>> <<physicalAdjustmentsInit>> <</if>> <!-- V0.4.5.0 Handheld Items --> <<if $worn.handheld is undefined>> <<set $worn.handheld to clone(setup.clothes.handheld[0])>> <<set $carried.handheld to clone(setup.clothes.handheld[0])>> <<set $wardrobe.handheld to []>> <<set $store.handheld to []>> <<set $wear_handheld to "none">> <<if ($player.gender is "f" and $background.crossdresser is false) or ($player.gender is "m" and $background.crossdresser is true) or ($player.gender is "h" and ( (($player.gender_body is "m" or ($player.gender_body is "a" and $player.breastsize lte 3)) and $background.crossdresser is true) or (($player.gender_body is "f" or ($player.gender_body is "a" and $player.breastsize gt 3)) and $background.crossdresser is false) ) )>> <<set $wardrobe.handheld.push(clone(setup.clothes.handheld[8]))>> <<set $wardrobe.handheld.last().colour to "purple">> <<else>> <<set $wardrobe.handheld.push(clone(setup.clothes.handheld[8]))>> <<set $wardrobe.handheld.last().colour to "blue">> <</if>> <</if>> <<if $propEquipped is undefined>> <<set $propEquipped to 0>> <</if>> <<if $balloonStand is undefined>> <<set $balloonStand to { open: false, owner: "friendly", freeDrink: false, robin: {status: "unaffected", talked: false, knows: false} }>> <</if>> <<if $robin is undefined>> <<set $robin to { timer: {hurt:0, customer:0}, hurtReason: "nothing", moneyModifier: 0 }>> <</if>> <<if $outfit_update is undefined or $outfit_update lt 5>> <<set $outfit_update to 5>> <<for $_i to 0; $_i lt $outfit.length; $_i++>> <<if $outfit[$_i].handheld is undefined>> <<set $outfit[$_i].handheld to "naked">> <</if>> <<if $outfit[$_i].colors and !$outfit[$_i].colors.handheld>> <<set $outfit[$_i].colors.handheld to [0, 0]>> <</if>> <</for>> <</if>> <<if $brothelVending and $brothelVending.status is "sold" and $brothelVending.weeksEmpty lt 4>> <<set $brothelVending.status to "set">>/*return vending machine to players whose machines were incorrectly eaten*/ <</if>> <<if $brothelVending and $brothelVending.products is 0 and $brothelVending.weeksEmpty gt 0>> <<set $brothelVending.weeksEmpty to 0>> <<set $brothelVending.weeksRent to 0>> <<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 deleted after starting the game */ <<if $cycledisable is undefined>> <<set $cycledisable to "f">> <</if>> /*0.4.6.0 Adding arrays for photos and videos taken of the PC that they'll be able to find online*/ <<if $internet is undefined>> <<set $internet to { photos: [], videos: [] }>> <</if>> <!-- V0.4.6.0 Vision type events refactor and $real_ variables cleanup --> <<if !$objectVersion.realVarsFix>><<script>> if (V.passage.startsWith('ScarletBook') && !V.scarletExitPassage){ V.scarletExitPassage = 'School Library'; } else if (V.passage.startsWith('Olive Book ') && V.per_npc.pinch && V.per_npc.pinch.name !== V.per_npc.pinch.fullDescription){ V.per_npc.pinch.name = V.per_npc.pinch.fullDescription; V.per_npc.pinch.name_known = 1; if (V.NPCList[0].fullDescription && V.NPCList[0].fullDescription.endsWith('Pinch')) { V.NPCList[0].name = V.NPCList[0].fullDescription; V.NPCList[0].name_known = 1; } } let event; if (V.passage.match(/^(Drama|Loveth|ScarletBook([^1-5]|10))/)) { event = 'janet'; } else if (V.passage.startsWith('Schism ')) { event = 'wraith'; } else if (V.passage.match(/^Olive Book [^1-4]/)) { event = 'pinch'; } else if (V.activeNightmare) { event = 'nightmare'; } else if ( V.passage.match(/^Sydney Temple Corrupt (Sex( Finish)?|End( [^2F]|$))/) || (V.passage === 'Sydney Temple Corrupt End 2' && !V.sydneySeen.includes("corruptroom")) ) { event = 'prayerroom'; } if (event) { /* $real_ variables are in use */ if (!V.frozenValues) { V.statFreeze = true; V.frozenValues = {}; const skipKeys = ['replayScene', 'frozenKeys', 'frozenValues', 'statFreeze', 'passage', 'debug']; V.frozenKeys = Object.keys(V); V.frozenKeys.forEach(k => { if (skipKeys.includes(k) || k.startsWith('real_')) return; V.frozenValues[k] = clone(V[k]); }); ['pinchSpeech', 'pinchArousal', 'pinchPronoun', 'pinchPenile', 'pinchVaginal', 'pinchAnal', 'pinchKiss', 'pinchSong', 'nightmareWake', 'prayerRoom', 'loveDrunk', 'examSafe', 'wraithSkin', 'penisusue', 'saveTransformtaions'].forEach(v => delete V.frozenValues[v]); } const realVarsToCopy = [ 'moonstate', 'haircolour', 'hairlength', 'goooutsidecount', 'semenoutsidecount', 'pain', 'arousal', 'tiredness', 'stress', 'trauma', 'control', 'angel', 'fallenangel', 'angelbuild', 'demon', 'wolfgirl', 'cat', 'cow', 'harpy', 'fox', 'sexStats', 'skulduggery', 'purity', 'spray', 'skin', 'parasite', 'hairfringecolour', 'hairColourStyle', 'hairColourGradient', 'hairFringeColourStyle', 'hairFringeColourGradient', 'timeStamp', /* only overwrite the frozen values with variables from the current scene, to avoid restoring outdated values */ ...(event === 'wraith' ? [ 'spraymax', 'hairtype', 'fringelength', 'fringetype', 'fringelengthstage', 'submissive', 'awareness', 'awarelevel', 'skinColor', 'condoms', ] : []) ]; const migrateRealVars = (whitelist = realVarsToCopy) => { whitelist.forEach(k => { if (V['real_' + k] !== undefined && V.frozenValues[k] !== undefined) { V.frozenValues[k] = clone(V['real_' + k]); } }); }; const overwriteObjProp = (key, value, obj = V.frozenValues) => { if (value !== undefined) obj[key] = clone(value); }; const freezeRealClothes = (storeKey) => { const tmpWorn = clone(V.worn); Wikifier.wikifyEval(`<<storeon "${storeKey}">>`); V.frozenValues.worn = V.worn; V.worn = tmpWorn; }; const freezeRealSexStats = () => { const tmpSexStats = clone(V.sexStats); V.sexStats = V.frozenValues.sexStats; if (V.sexStats.pills.pills === undefined){ backCompPillsInventory(); } Wikifier.wikifyEval('<<physicalAdjustmentsInit>>'); V.sexStats = tmpSexStats; }; if (event === 'janet') { if (V.frozenValues.scarletExitPassage === undefined) { V.frozenValues.scarletExitPassage = V.scarletExitPassage; } overwriteObjProp('sex', V.real_playersex, V.frozenValues.player); overwriteObjProp('gender', V.real_playergender, V.frozenValues.player); overwriteObjProp('penisExist', V.real_penisexist, V.frozenValues.player); overwriteObjProp('vaginaExist', V.real_vaginaexist, V.frozenValues.player); overwriteObjProp('leftEyeColour', V.real_lefteyecolour || V.real_eyecolour); overwriteObjProp('rightEyeColour', V.real_righteyecolour || V.real_eyecolour); overwriteObjProp('eyecolour', V.real_lefteyecolour || V.real_eyecolour); overwriteObjProp('breastsize', V.real_breastsize, V.frozenValues.player); overwriteObjProp('ballsExist', V.real_ballsexist, V.frozenValues.player); Object.assign(V.frozenValues.player.bodyliquid, V.player.bodyliquid, V.real_bodyliquid); overwriteObjProp('virginity', V.real_virginity, V.frozenValues.player); freezeRealClothes(event); overwriteObjProp('genitals', V.real_wornGenitals, V.frozenValues.worn); Object.assign(V.frozenValues.transformationParts, V.saveTransformtaions); migrateRealVars(); freezeRealSexStats(); } else if (event === 'wraith') { overwriteObjProp('sex', V.real_playersex, V.frozenValues.player); overwriteObjProp('gender', V.real_playergender, V.frozenValues.player); overwriteObjProp('penisExist', V.real_penisexist, V.frozenValues.player); overwriteObjProp('vaginaExist', V.real_vaginaexist, V.frozenValues.player); overwriteObjProp('leftEyeColour', V.real_lefteyecolour || V.real_eyecolour); overwriteObjProp('rightEyeColour', V.real_righteyecolour || V.real_eyecolour); overwriteObjProp('eyecolour', V.real_lefteyecolour || V.real_eyecolour); overwriteObjProp('breastsize', V.real_breastsize, V.frozenValues.player); overwriteObjProp('ballsExist', V.real_ballsexist, V.frozenValues.player); Object.assign(V.frozenValues.player.bodyliquid, V.player.bodyliquid, V.real_bodyliquid); overwriteObjProp('virginity', V.real_virginity, V.frozenValues.player); freezeRealClothes(event); overwriteObjProp('genitals', V.real_wornGenitals, V.frozenValues.worn); Object.assign(V.frozenValues.transformationParts, V.saveTransformtaions); migrateRealVars(); freezeRealSexStats(); overwriteObjProp('hairlengthstage', V.real_hairlenghthstage); overwriteObjProp('state', V.real_wraithState, V.frozenValues.wraith); overwriteObjProp('clothingrebuy', V.real_rebuy); overwriteObjProp('condomLvl', V.real_condomLevel); } else if (event === 'pinch') { overwriteObjProp('location', V.oliveExitPassage === 'School Library' ? 'school' : 'home'); if (V.passage.match(/^Olive Book (Lew|Pinch) /) || (V.phase === 1 && V.passage.match(/(End|8)$/))) { /* player is currently another character */ overwriteObjProp('sex', V.real_playersex, V.frozenValues.player); overwriteObjProp('gender', V.real_playergender, V.frozenValues.player); overwriteObjProp('penisExist', V.real_penisexist, V.frozenValues.player); overwriteObjProp('vaginaExist', V.real_vaginaexist, V.frozenValues.player); overwriteObjProp('leftEyeColour', V.real_lefteyecolour || V.real_eyecolour); overwriteObjProp('rightEyeColour', V.real_righteyecolour || V.real_eyecolour); overwriteObjProp('eyecolour', V.real_lefteyecolour || V.real_eyecolour); overwriteObjProp('breastsize', V.real_breastsize, V.frozenValues.player); overwriteObjProp('ballsExist', V.real_ballsexist, V.frozenValues.player); Object.assign(V.frozenValues.player.bodyliquid, V.player.bodyliquid, V.real_bodyliquid); overwriteObjProp('virginity', V.real_virginity, V.frozenValues.player); freezeRealClothes(event); overwriteObjProp('genitals', V.real_wornGenitals, V.frozenValues.worn); Object.assign(V.frozenValues.transformationParts, V.saveTransformtaions); migrateRealVars(); freezeRealSexStats(); overwriteObjProp('penissize', V.real_penissize, V.frozenValues.player); } else { /* do not copy other variables, even if they exist */ migrateRealVars(['moonstate', 'timeStamp']); } } else if (event === 'nightmare') { Object.assign(V.frozenValues.player.bodyliquid, V.real_bodyliquid); overwriteObjProp('virginity', V.real_virginity, V.frozenValues.player); overwriteObjProp('clothingrebuy', V.real_rebuy); migrateRealVars(['moonstate', 'timeStamp', 'location', 'parasite', 'pain', 'arousal', 'tiredness', 'trauma', 'control', 'angel', 'angelbuild', 'fallenangel', 'transformationParts', 'purity', 'parasitepregdisable', 'worn', 'skin']); } else if (event === 'prayerroom') { /* DO NOT MODIFY FURTHER, SEE 'Fix to freezePlayerStats being used in the Corrupt Temple scene' */ overwriteObjProp('virginity', V.real_virginity, V.frozenValues.player); overwriteObjProp('virginity', V.real_virginity_sydney, V.frozenValues.NPCName[V.NPCNameList.indexOf('Sydney')]); migrateRealVars(['angel', 'fallenangel', 'transformationParts', 'purity', 'trauma']); } V.frozenValues.objectVersion.realVarsFix = 1; } delete V.saveTransformtaions; delete V.penisusue; /* clean up $real_ variables */ Object.keys(V).forEach(k => { if (k.startsWith('real_')) { delete V[k]; } }); V.objectVersion.realVarsFix = 1; <</script>><</if>> <<if $noTraitDescription isnot undefined>> <<unset $noTraitDescription>> <</if>> <<if $shopListMax isnot undefined>> <<unset $shopListMax>> <</if>> <<if $baileyRefusedToPayTotal is undefined>> /* Dupicate stats are intentional to use as a potential gameplay mode */ <<set $baileyRefusedToPayTotal to 0>> <<set $baileyRefusedToPayTotalStat to 0>> <</if>> <!-- V0.4.6.0 Removed a legacy variable that was never needed --> <<unset $robin_naked_room_clothes>> <!-- v <= 0.4.5.3: Consolidated these into $speechSextoyState --> <<unset $speechsextoyangry>> <<unset $speechsextoyshocked>> <<unset $speechsextoyaroused>> <<unset $speechsextoydisappointed>> /*Added npc generation and pronoun widgets to the livestock horse passages*/ <<if $livestock_horse_rescued is $pronoun >> <<set $livestock_horse_rescued to true>> <</if>> /*Adds Gift Variable for Office Manager for old saves*/ <<if $managerGift is undefined>> <<set $managerGift to 1>> <</if>> /* Stat tracking for unsafe sex */ <<if $unsafeSexTimeStat is undefined>> <<set $unsafeSexTimeStat to {}>> <</if>> <!-- V0.4.6.0 Draggletail fix --> <<if $hairtype is "draggletail">> <<set $hairtype to "messy ponytail">> <</if>> /*Fix inconsistent naming for ufarm escape variable*/ <<if $livestockEscape is "birth">> <<set $livestock_escape to "birth">> <<unset $livestockEscape>> <</if>> /* Fix to freezePlayerStats being used in the Corrupt Temple scene, modification of '$real_ variables cleanup' related to this even shouldnt be modified any longer */ <<if !$replayScene and $statFreeze and $frozenValues and ($passage.match(/^Sydney Temple Corrupt (Sex( Finish)?|End( [^2F]|$))/) || ($passage === 'Sydney Temple Corrupt End 2' && !$sydneySeen.includes("corruptroom"))) and !$defileSacredGroundStore and !$objectVersion.defileSacredGroundStore>> <<set $defileSacredGroundStore to { playerVirginity: clone($frozenValues.player.virginity), sydneyVirginity: clone($frozenValues.NPCName[$NPCNameList.indexOf("Sydney")].virginity), angel: $frozenValues.angel, angelbuild: $frozenValues.angelbuild, fallenangel: $frozenValues.fallenangel, transformationParts: $frozenValues.transformationParts, purity: $frozenValues.purity, trauma: $frozenValues.trauma, }>> <<unset $frozenValues>> <<unset $frozenKeys>> <<unset $statFreeze>> <<set $objectVersion.defileSacredGroundStore to 1>> <</if>> /* Fix to statFreeze being left from the previous fix, be aware of this fix when using statFreeze outside of freezePlayerStats */ <<if (!$objectVersion.defileSacredGroundStore or $objectVersion.defileSacredGroundStore lt 2) and !$replayScene and $statFreeze and !$frozenValues>> <<unset $statFreeze>> <<set $objectVersion.defileSacredGroundStore to 2>> <</if>> /* Docks dog-related scenes refactor*/ <<if $dock_dog isnot undefined and typeof $dock_dog is "string">> <<set $_indexTmp to $index>> <<set $_isOverwritingNPC to !!$NPCList[0].fullDescription>> <<if $_isOverwritingNPC>> <<saveNPC 0 "dockDogUpdate">> <<clearsinglenpc 0>> <</if>> <<generateBEAST 1 "dog">> <<set $dock_dog to clone($NPCList[0])>> <<if $_isOverwritingNPC>> <<loadNPC 0 "dockDogUpdate">> <<clearNPC "dockDogUpdate">> <</if>> <<personselect $_indexTmp>> <<unset $_indexTmp>> <<unset $_isOverwritingNPC>> <</if>> /* Kill the leather leggings with fire */ /* Commenting out again due to continued issues <<if !$objectVersion.itemFix lt 1 or $objectVersion.itemFix is undefined>> <<if $worn.under_lower.name isnot "naked" and $worn.legs.name is "leather leggings">><<generalUndress "wardrobe" "under_lower">><</if>> <<run convertLegstoUnder()>> <<set $objectVersion.itemFix to 1>> <</if>>*/ <<if $sydney_spear_talk is 1>> <<set $sydneySeen.pushUnique("spearMission")>> <<unset $sydney_spear_talk>> <</if>> <!-- V0.4.7.0 Unmod --> <!-- To mod dev: SIMPLY REMOVE THIS SECTION WHEN MERGING--> <<if $pplace_number isnot undefined or $pplaces>> <<unset $pplace_number>><<unset $pplaces>> <</if>> <!--V0.5 Great Hawk expansion --> <<if $playerPregnancyEggLayingDisable is undefined>> <<set $playerPregnancyEggLayingDisable to $playerPregnancyBeastDisable>> <</if>> <<if $bird and $bird.state and !$bird.hunts>> <<set $bird.injured to 0>> <<set $bird.clean to 0>> <<set $bird.lurkersEaten to 0>> <<set $bird.firepit to Cooker.create({cookTime: {lurker: 1440 * 60}})>> <<set $bird.hunts to { unlocked: false, lurkers: false, materials: false, valuables: false, estate: false }>> <<set $bird.materials to { wood: 0, fabric: 0, sticks: 0, leaves: 0, junk: 0, lurkers: 0, leather: 0, feathers: 0, valuables: {} }>> <<set $bird.upgrades to { mirror: 0, tools: 0, tarp: 0, telescope: 0, shelter: 1, nest: 0, firepit: 0, pot: 0, rack: 0, snare: 0, decor: 0, wardrobe: 0 }>> <<if $bird.mirror is 1>> <<run delete $bird.mirror>> <<set $bird.upgrades.mirror to 1>> <</if>> <<if $bird.fabric>> <<set $bird.materials.fabric += $bird.fabric>> <<run delete $bird.fabric>> <</if>> <</if>> <<if $dateCount.GreatHawkCasual is undefined>> <<set $dateCount.GreatHawkCasual to 0>> <</if>> <!-- Pillory time fixes --> <<if $pillory_tenant isnot undefined and ($pillory_tenant.starthour isnot undefined or $pillory_tenant.startday isnot undefined)>> <!-- The start day / hour are broken anyways - so resetting the starttime to current time --> <<set $_newTime to new DateTime(Time.date)>> <<set $_endTime to new DateTime($_newTime.timeStamp).addHours($pillory_tenant.duration)>> <<set $pillory_tenant.startTime to $_newTime.timeStamp>> <<set $pillory_tenant.endTime to $_endTime.timeStamp>> <<set $pillory_tenant.lastViewed to $_newTime.timeStamp>> <<unset $pillory_tenant.starthour>> <<unset $pillory_tenant.startday>> <<unset $pillory_tenant.endDate>> <<unset $pillory_tenant.endhour>> <<unset $pillory_tenant.duration>> <</if>> <!-- 5.0.6 --> <<if $pillory is undefined>> <<set $pillory to {}>> <</if>> <<if $pillorytime isnot undefined or $pillory.time is undefined>> <<set _pilloryStartTime to new DateTime(Time.date)>> <<set _pilloryEndTime to new DateTime(Time.date).addMinutes(60 - Time.date.minute)>> <<if !isNaN($pillorytime) and $pillorytime gte 0>> <<set _pilloryEndTime.addHours($pillortime)>> <</if>> <<set $pillory.time to { start: _pilloryStartTime.timeStamp, end: _pilloryEndTime.timeStamp, }>> <<unset $pillorytime>> <</if>> <<if $pilloryaudience isnot undefined>> <<if !isNaN($pilloryaudience) and $pilloryaudience gte 0>> <<set $pillory.audience to $pilloryaudience>> <</if>> <<unset $pilloryaudience>> <</if>> <<if $pillory_tenant isnot undefined>> <<set $pillory.tenant to $pillory_tenant>> <<unset $pillory_tenant>> <</if>> <<if $options.oldclock isnot undefined>> <<run delete $options.oldclock>> <</if>> <<if $options.newWardrobeStyle isnot undefined>> <<run delete $options.newWardrobeStyle>> <</if>> <!-- 5.2 tanning rework --> <!-- Don't move to bottom --> <<if $player.skin is undefined>> <<set $player.skin to { color: "light", layers: [], }>> <</if>> <<if $skinColor isnot undefined>> <<set $player.skin.color to $skinColor.natural>> <<script>> const colorValue = Math.max(...V.skinColor.tanValues); V.player.skin.layers = [ { layers: [], slots: {}, value: colorValue, } ]; <</script>> <<unset $skinColor>> <</if>> <<if $player.skin.sunscreen is undefined>> <<set $player.skin.sunscreen to { usesLeft: 0 }>> <</if>> <<if $options.tanningEnabled isnot undefined>> <<set delete $options.tanningEnabled>> <</if>> <<if $options.tanLines is undefined>> <<set $options.tanLines to true>> <</if>> <<if $tanned isnot undefined>> <<unset $tanned>> <</if>> <<if $gameTanImgSetting isnot undefined>> <<unset $gameTanImgSetting>> <</if>> <!--Skin colours for nonhuman children and inconsistency npc skin colour fix --> <<if !$objectVersion.missingChildSkinColors or $objectVersion.missingChildSkinColors lt 3>> <<script>> const fixChild = (child) => { if (!child.features) return; if (!child.features.skinColour) child.features.skinColour = Skin.color.natural; if (child.features.skinColour === "black") child.features.skinColour = "dark"; if (child.features.skinColour === "white") child.features.skinColour = "light"; }; Object.values(V.children).forEach(child => fixChild(child)); getPregnancyObject().fetus.forEach(child => fixChild(child)); Object.values(V.NPCName).forEach(npc => { if (npc.pregnancy.fetus) { npc.pregnancy.fetus.forEach(child => fixChild(child)); } }); Object.values(V.storedNPCs).forEach(npc => { if (npc?.pregnancy.fetus) { npc.pregnancy.fetus.forEach(child => fixChild(child)); } }) <</script>> <<set $objectVersion.missingChildSkinColors to 3>> <</if>> <!-- 0.5 Weather update --> <<if Time.year is 361 and $location is "temple">> <<set $location to "old_temple">> <</if>> <<if $weatherObj is undefined>> <<switch $weather>> <<case "rain" "snow">> <<set _weather to "heavyPrecipitation">> <<case "overcast">> <<set _weather to "heavyClouds">> <<default>> <<set _weather to "lightClouds">> <</switch>> <<set $weatherObj to { name: _weather, snow: 0, ice: {}, fog: 0, overcast: 0, targetOvercast: 0, monthlyTemperatures: [], keypointsArr: [] }>> <<set $player.bodyTemperature to 37>> <<set $options.weatherUpdate to true>> <<set $options.reflections to true>> <<set $options.fahrenheit to false>> <<unset $weather>> <<unset $nextWeather>> <<unset $warmth>> <<unset $chill>> <<unset $chill_day>> <<unset $body_temperature>> <<unset $body_temperature_outside>> <<unset $skyHidden>> <!-- Also reset the frozenValues (statFreeze) --> <<if $statFreeze>> <<unset $frozenValues.weather>> <<unset $frozenValues.nextWeather>> <<unset $frozenValues.warmth>> <<unset $frozenValues.chill>> <<unset $frozenValues.chill_day>> <<unset $frozenValues.body_temperature>> <<unset $frozenValues.body_temperature_outside>> <<unset $frozenValues.skyHidden>> <</if>> <!-- Failsafe if changing options immediately after load --> <<run Weather.WeatherGeneration.generate(Time.date)>> <<run Weather.sky.initialize()>> <</if>> <<if $options.clothingCaption is undefined>> <<set $options.clothingCaption to true>> <</if>> <<if $frozenKeys isnot undefined>> <<unset $frozenKeys>> <</if>> <<if $startingseason isnot undefined>> <<unset $startingseason>> <</if>> <<if $clothing_number isnot undefined>> <<unset $clothing_number>> <</if>> <!-- Remove old character renderer remnants --> <<if $options.sidebarRenderer isnot undefined>> <<unset $options.sidebarRenderer>> <</if>> <!-- 5.0.3 --> <<if $yearly is undefined>> <<set $yearly = {}>> <</if>> <<if !($popcorn gte 0)>> <<set $popcorn to 0>> <</if>> <<if !Number.isFinite($money)>> <<set $money to 0>> <</if>> <!-- 5.0.6 --> <!-- Fix for not having an island home set, should only be run once --> <<if !$objectVersion.islandHomeFix>> <<if $passage.startsWith("Island") and $island and $island.home is undefined>> <<set $island.home to "rocky_hillock">> <</if>> <<set $objectVersion.islandHomeFix to 1>> <</if>> <!-- Fix for not having an island home set, should only be run once --> <<if !$objectVersion.islandHomeFix>> <<if $passage.startsWith("Island") and $island and $island.home is undefined>> <<set $island.home to "rocky_hillock">> <</if>> <<set $objectVersion.islandHomeFix to 1>> <</if>> <!-- Fix for older instance of 'cat_tf_stage_' not being cleared, leading to exceeded loop iterations --> <<if $custom_eyecolours.filter(obj => obj.variable.includes("cat_tf_stage_")).length gt 8>> <!-- filter out cat_tf_stages, then append only the first instances of them found in the original array --> <<set _newEyecolours to V.custom_eyecolours.filter(i => !i.variable.startsWith("cat_tf_stage_")).concat(["cat_tf_stage_0_left", "cat_tf_stage_0_right", "cat_tf_stage_1_left", "cat_tf_stage_1_right", "cat_tf_stage_2_left", "cat_tf_stage_2_right", "cat_tf_stage_3_left", "cat_tf_stage_3_right"].map(o => V.custom_eyecolours.find(c => c.variable === o)));>> <<set $custom_eyecolours to _newEyecolours>> <</if>> <!-- 0.5.2.0 --> <!-- Converting NPC seen variables to arrays --> <<if $remy_seen isnot undefined>> <<set $remySeen to []>> <<set $remySeen.pushUnique($remy_seen)>> <<set $remySeenLast to $remy_seen>> <<unset $remy_seen>> <<if $farm_stage gte 5>> <<set $remySeen.pushUnique("farm")>> <</if>> <<if $livestock_intro isnot undefined>> <<set $remySeen.pushUnique("livestock")>> <</if>> <<if $ridingschoolintro isnot undefined>> <<set $remySeen.pushUnique("riding_school")>> <</if>> <</if>> <<if $wren_seen isnot undefined>> <<set $wrenSeen to []>> <<set $wrenSeen.pushUnique($wren_seen)>> <<set $wrenSeenLast to $wren_seen>> <<unset $wren_seen>> <<if $wren_intro isnot undefined>> <<set $wrenSeen.pushUnique("cards")>> <</if>> <<if $winterLakeTalk gte 3>> <<set $wrenSeen.pushUnique("winter")>> <</if>> <</if>> <<if $niki_seen isnot undefined>> <<set $nikiSeen to []>> <<set $nikiSeen.pushUnique($niki_seen)>> <<unset $niki_seen>> <<if $livestock_pig gte 1>> <<set $nikiSeen.pushUnique("farm")>> <</if>> <<if $chef_state gte 5>> <<set $nikiSeen.pushUnique("chef")>> <</if>> <<if $winterLakeTalk gte 3>> <<set $nikiSeen.pushUnique("winter")>> <</if>> <</if>> <<if C.npc.Niki.init is 1 and $nikiSeen is undefined>> <<set $nikiSeen to []>> <</if>> <!-- Disabled the npc compressor --> <<if !$objectVersion.npcCompressorDisable>> <<set _storedNPCToDelete to []>> <<run Object.entries($storedNPCs).forEach(([key, npcStore]) => { if (npcStore.npc && (typeof npcStore.npc === 'string' || npcStore.npc instanceof String)) { try { npcStore.npc = npcDecompressor(npcStore.npc); } catch (e) { T.storedNPCToDelete.push(key); } } })>> <<run _storedNPCToDelete.forEach(key => { delete $storedNPCs[key]; })>> <<set $objectVersion.npcCompressorDisable to 1>> <</if>> <<if $objectVersion.npcCompressorDisable lt 2>> <<script>> const decompress = (parent) => { let result = parent; try { result = npcDecompressor(parent); } catch (e) { result = null; } return result; }; V.parentList.fathers.forEach(parent => { if (parent.compressed && parent.compressed !== "none") { parent.npc = decompress(parent.compressed); delete parent.compressed; } else { parent.npc = false; delete parent.compressed; } }); V.parentList.mothers.forEach(parent => { if (parent.compressed && parent.compressed !== "none") { parent.npc = decompress(parent.compressed); delete parent.compressed; } else { parent.npc = false; delete parent.compressed; } }); <</script>> <<set $objectVersion.npcCompressorDisable to 2>> <</if>> <!-- Fix for named npcs whose gender could be changed by the randomizer --> <<if !$objectVersion.npcPregnancyGenderChange>> <<initnpcgender>> <<set $objectVersion.npcPregnancyGenderChange to 1>> <</if>> <!-- 0.5.2.5 Temporarily disabling the toggle to fix bleached PCs in combat --> <<if typeof $options is "object" and $options>> <<set $options.tanImgEnabled to true>> <</if>> <<if $moneyStats is undefined>> <<set $moneyStats to { cheats: { earned: 0, earnedCount: 1 }, startingMoney: { earned: 500, earnedCount: 1 }, }>> <<if $farm>> <<if $farm.wall gte 1>><<money -350000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.wall gte 2>><<money -1000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.wall gte 3>><<money -2500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.wall gte 4>><<money -500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.tower gte 1>><<money -2000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.tower gte 2>><<money -500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.woodland gte 1>><<money -1000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.woodland gte 2>><<money -2000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.woodland gte 3>><<money -5000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.kennel gte 1>><<money -1500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.barn gte 1>><<money -500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.barn gte 2>><<money -2000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.stable gte 1>><<money -2000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.coop gte 1>><<money -200000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.coop gte 2>><<money -500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.parasitebarn gte 1>><<money -500000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.parasitebarn gte 2>><<money -2000000 "farmUpgrades" { recordOnly: true }>><</if>> <<if $farm.irrigation gte 1>><<money `-500000 * $farm.irrigation` "farmUpgrades" { recordOnly: true }>><</if>> <<if C.npc.Alex?.pregnancy.nursery>><<money -300000 "farmUpgrades" { recordOnly: true }>><</if>> <</if>> <<if $loft_river>><<money -2000000 "orphanageUpgrades" { recordOnly: true }>><</if>> <<if $loft_kylar>><<money -2000000 "orphanageUpgrades" { recordOnly: true }>><</if>> <<if $mason_pond gte 3>><<money -600000 "orphanageUpgrades" { recordOnly: true }>><</if>> <<if $loft_whitney gte 6>><<money -200000 "orphanageUpgrades" { recordOnly: true }>><</if>> <<if $estatePersistent>> <<money `$estatePersistent.totalBetMoneyMade or 0` "blackjack" { recordOnly: true }>> <<money `-$estatePersistent.totalBetMoneyLost or 0` "blackjack" { recordOnly: true }>> <<money `-$estatePersistent.totalMoneyConfiscated or 0` "blackjack" { recordOnly: true }>> <<money `$estatePersistent.totalTipMoneyMade or 0` "blackjack" { recordOnly: true }>> <</if>> <<money `-$baileyPaidStat or 0` "baileyRent" { recordOnly: true }>> <<unset $baileyPaidStat>> <<if $museumAntiques.antiques>> <<set _museumAntiquesAmount to 0>> <<run Object.entries($museumAntiques.antiques).forEach(([name, status]) => { if (["museum", "stolen", "recovered"].includes(status)) { switch(name) { case "antiquecopperring": T.museumAntiquesAmount += 500; break; case "antiquecoppercoin": case "antiquerustedcutlass": T.museumAntiquesAmount += 1000; break; case "antiquestrangefetish": case "antiquewoodenfigurine": T.museumAntiquesAmount += 1500; break; case "antiquesilvercoin": case "antiqueforestarrow": case "antiquebox": case "antiqueislandarrow": case "antiqueteacaddy": T.museumAntiquesAmount += 2000; break; case "antiquechocolate": T.museumAntiquesAmount += 2500; break; case "antiquesilverring": T.museumAntiquesAmount += 3000; break; case "antiqueforestdagger": case "antiquewoodenmask": case "antiqueforestdagger": T.museumAntiquesAmount += 4000; break; case "antiquebullet": case "antiquesilverbrooch": case "antiquetrilobitefossil": case "antiquetrashcup": case "antiqueswordcane": case "antiquecoppercompass": case "antiquecandlestick": case "antiquedildo": T.museumAntiquesAmount += 5000; break; case "antiquegrenade": T.museumAntiquesAmount += 8000; break; case "antiquegoldcoin": case "antiqueforestgem": case "antiqueshell": case "antiquetrashburner": case "antiquehorn": T.museumAntiquesAmount += 10000; break; case "antiquebrassstatuette": case "antiquecutlass": T.museumAntiquesAmount += 12000; break; case "antiqueminesign": T.museumAntiquesAmount += 14000; break; case "antiquecrystal": case "antiquewatch": T.museumAntiquesAmount += 20000; break; case "antiquesilverdagger": T.museumAntiquesAmount += 24000; break; case "antiqueivorystatuette": case "antiquegoldnecklace": case "antiquegoldbrooch": case "antiqueobsidiandisc": T.museumAntiquesAmount += 50000; break; case "antiquecoralring": T.museumAntiquesAmount += 80000; break; case "antiquesilvercrown": case "antiquestonetalisman": T.museumAntiquesAmount += 120000; break; case "antiquehourglass": T.museumAntiquesAmount += 140000; break; case "antiquewhitecrystal": case "antiqueivorynecklace": case "antiquegoldchastitybelt": case "antiquediamond": T.museumAntiquesAmount += 200000; break; case "antiquesilvercompass": T.museumAntiquesAmount += 220000; break; case "antiquegoldring": case "antiquesilvermask": T.museumAntiquesAmount += 300000; break; case "antiqueleathermap": T.museumAntiquesAmount += 400000; break; case "antiquegoldcompass": T.museumAntiquesAmount += 500000; break; case "antiquebell": T.museumAntiquesAmount += 1000000; break; } } })>> /* Estimate a reasonable minimum value */ <<set _filteredAntiques to Object.values($museumAntiques.antiques).filter(status => ["museum", "stolen", "recovered"].includes(status)).length>> <<if $museumAntiques.museumCount - _filteredAntiques gt 0>> <<set _museumAntiquesAmount += ($museumAntiques.museumCount - _filteredAntiques) * 5000>> <</if>> <<money _museumAntiquesAmount "museumAntique" { recordOnly: true }>> <</if>> <<if $bunstat gt 0>> <<set _bunMoney to 0>> <<set _bunMoney += (5000 * 0.2) * Math.min($bunstat, 50)>> <<if $bunstat gt 50>> <<set _bunMoney += (10000 * 0.2) * Math.min($bunstat - 50, 200)>> <<elseif $bunstat gt 250 and $bun_cut is 0.2>> <<set _bunMoney += (10000 * 0.2) * ($bunstat - 250)>> <</if>> /* Assumes the player didn't get perfect numbers from here */ <<if $bunstat gt 250>> <<set _bunMoney += (10000 * 0.3) * Math.min($bunstat - 250, 200)>> <<elseif $bunstat gt 450 and $bun_cut is 0.3 and $bun_value is 10000>> <<set _bunMoney += (10000 * 0.3) * ($bunstat - 450)>> <</if>> <<if $bunstat gt 450 and $bun_value gte 15000>> <<set _bunMoney += (15000 * 0.3) * ($bunstat - 450)>> <</if>> <<money _bunMoney "cafeChef" { recordOnly: true }>> <</if>> <<set $_earnedTotal to 0>> <<set $_spentTotal to 0>> <<run Object.values(V.moneyStats).forEach(stat => { if (stat.earned) _earnedTotal += stat.earned; if (stat.spent) _spentTotal += stat.spent; })>> <<set $_earnedTotal += $_spentTotal>> <<if $money gt $_earnedTotal>> <<money `$money - $_earnedTotal` "notTracked" { recordOnly: true }>> <</if>> <</if>> <<if $timeStats is undefined>> <<set $timeStats to {}>> <<if $dockhours>> <<timeTrackingManual "docks" $dockhours>> <<unset $dockhours>> <</if>> <<if $adultshopcontribution>> <<timeTrackingManual "adultShop" $adultshopcontribution>> <</if>> <</if>> /* Money Name corrections */ <<set _moneyIncorrectKeys to ["brothal", "brothalShow"]>> <<if Object.keys($moneyStats).includesAny(_moneyIncorrectKeys)>> <<set _moneyFixedKeys to ["brothel", "brothelShow"]>> <<run _moneyIncorrectKeys.forEach((key, index) => { if ($moneyStats[key]) { $moneyStats[_moneyFixedKeys[index]] to clone($moneyStats[key]); delete $moneyStats[key]; } })>> <</if>> <!-- Setting the default face variant value for existing PCs --> <<if $facevariant is undefined>> <<set $facevariant to "default">> <</if>> <!-- Updating old characters to keep using their chosen body sprite --> <<if $player.bodyshape is undefined>> <<set _map to { "m": "classic", "f": "curvy", "a": "slender" }>> <<set $player.bodyshape to _map[$player.gender_body]>> <</if>> /* Police hack caught */ <<if $police_delete is undefined>> <<set $police_delete to 0>> <</if>> /* Setup object for bad end tracking */ <<if !$badEndStats>> <<set $badEndStats to []>> <</if>> <!-- 0.5.3.0; re-enable combat animations on mobile on any save that had it disabled by versionupdate previously.--> <!-- The code that set the combatfix var has been removed.--> <<if Browser.isMobile.any() and $options.combatAnimations is false and $combatFix is 1>> <<unset $combatFix>> <<set $options.combatAnimations to true>> <</if>> <<unset $mobileZoomFix>> <!-- 0.5.3.0; option to disable text effect from drunk and heat/rut lewd options--> <<if $options.textAnimations is undefined>> <<set $options.textAnimations to true>> <</if>> <!-- Insecurity Rework --> <<if $insecurity_breasts_tiny isnot undefined or $insecurity_penis_tiny isnot undefined>> <<set $insecurity_breasts_small to Math.max($insecurity_breasts_small, $insecurity_breasts_tiny)>> <<set $acceptance_breasts_small to Math.max($acceptance_breasts_small, $acceptance_breasts_tiny)>> <<if $player.gender isnot "f">> <<set $insecurity_breasts_big to Math.max($insecurity_breasts_big, $insecurity_breasts_small)>> <<set $acceptance_breasts_big to Math.max($acceptance_breasts_big, $acceptance_breasts_small)>> <<set $insecurity_breasts_small to 0>> <<set $acceptance_breasts_small to 0>> <</if>> <<set $insecurity_penis_small to Math.max($insecurity_penis_small, $insecurity_penis_tiny)>> <<set $acceptance_penis_small to Math.max($acceptance_penis_small, $acceptance_penis_tiny)>> <<unset $insecurity_breasts_tiny>> <<unset $acceptance_breasts_tiny>> <<unset $insecurity_penis_tiny>> <<unset $acceptance_penis_tiny>> <</if>> <!-- New Makeup Category --> <<if $makeup.owned.blusher is undefined>> <<set $makeup.owned.blusher = []>> <<set $makeup.blusher = 0>> <</if>> <!-- 0.5.3.0 makes sure $plants is defined on all saves, and stocks supermarket--> <<if $plants.salt is undefined>> <<set _food_keys to Object.keys(setup.plants)>> <<for _i to 0; _i lt _food_keys.length; _i++>> <<set $_type to _food_keys[_i]>> <<if $plants[$_type] is undefined>> <<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": 0}>> <<elseif $plants[$_type].name is undefined>> <<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": $plants[$_type].amount}>> <</if>> <</for>> <<supermarketWeekly>> <</if>> <<if $schoolLessonsMissed.housekeeping is undefined>> <<set $schoolLessonsMissed.housekeeping to 0>> <</if>> <!-- 0.5.3.0 make sure named NPCs have .name_known property --> <<if C.npc.Robin.name_known isnot 1>> <<for _i to 0; _i lt $NPCName.length; _i++>> <<switch $NPCName[_i].nam>> <<case "Eden">> <<if $hunterintro is 1>> <<set $NPCName[_i].name_known to 1>> <<else>> <<set $NPCName[_i].name_known to 0>> <</if>> <<default>> <<set $NPCName[_i].name_known to 1>> <</switch>> <</for>> <</if>> <!-- 0.5.3.0 giftedFood $daily variable --> <<if $daily.giftedFood is undefined>> <<set $daily.giftedFood to {}>> <</if>> <!-- 0.5.3.1 makes sure the related $plants names use _ rather than spaces as they get used as object keys --> <<if $plants.cheese_and_crackers.name is "cheese and crackers">> <<run ["cheese_and_crackers", "choc_chip_cookie", "spaghetti_bolognese", "porridge"].forEach(key => $plants[key].name to key)>> <<set $plants.porridge.plural to "servings of porridge">> <<set $plants.chips.plural to "packets of chips">> <<set $plants.yorkshire_pudding.plural to "yorkshire puddings">> <<set $plants.choc_chip_cookie.plural to "chocolate chip cookies">> <</if>> <<if $plants.chilli_con_carne.singular is "serving ">> <<set $plants.chilli_con_carne.singular to "serving of chilli con carne">> <</if>> <!-- $daily.prison not set in at least one save game --> <<set $daily.prison ||= {}>> <!-- Rice does not have a supermarket quantity --> <<set $plants.rice.supermarket ||= 0>> <!-- Avery cards sending face items of the wrong colour --> <<if $avery_cards?.face>> <<facesend `clothesIndex('face',$avery_cards.face)` wardrobe $avery_cards.face.colour $avery_cards.face.accessory_colour>> <<run delete $avery_cards.face>> <</if>> <</widget>> <<if $tfearshatposition is undefined>> <<set $tfearshatposition to "under">> <</if>>
<!-- Low-level canvas renderer composition functions. Example usage: <<set _wetness to 0.9>> <<canvasstart 256 256>> <<run canvaslayer(10, 'img/shirt.png', {blend:'#ff0000',alpha:_wetness})>> <<run canvaslayer(11, 'img/shirt_acc.png', {alpha:_wetness})>> <<run canvaslayer( 8, 'img/skirt.png', {blend:'#ff0000',alpha:_wetness})>> <<canvasdraw>> will create a 256x256 canvas and render 3 images in it: skirt, shirt, and shirt_acc (order by z-index) shirt and skirt are multiplied by red (#ff0000) colour (blend option) the images are semi-transparent (alpha=_wetness=0.9, alpha option) actual <canvas> element will be placed where <<canvasdraw>> is called --> <<widget "canvasstart">> <!-- Creates an off-screen <canvas> element. Usage: <<canvasstart WIDTH HEIGHT FRAMES>> --> <<if _Canvas !== undefined>> <<run throw "Duplicate 'canvasstart' call">> <<elseif _args.length !== 3 or typeof _args[0] !== 'number' or typeof _args[1] !== 'number' or typeof _args[2] !== 'number'>> <<run throw "Invalid 'canvasstart' call">> <<else>> <<set _Canvas = Renderer.createCanvas(_args[0]*_args[2], _args[1])>> <<set _CanvasLayers = []>> <<set _CanvasFrames = _args[2];>> <</if>> <</widget>> <<widget "canvaslayer">> <!-- Prepares a layer to be rendered Usage: <<canvaslayer Z SOURCE [OPTIONS...]*>> where: Z: z-index of the layer (bigger above lower). SOURCE: is URL to the image OPTIONS: Extra CompositeLayerSpec option objects - they are merged, last has most priority Example: <<canvaslayer 20 'img/clothers/upper/schoolshirt/full.png' `{blend:'#00ff00', blendMode:'hard-light'}`>> --> <<twinescript>> var opts = {z:_args[0],src:_args[1]}; for (var i = 2; i < _args.length; i ++) opts = jQuery.extend(opts, _args[i]); _CanvasLayers.push(opts); <</twinescript>> <</widget>> <<widget "canvasanimate">> <!-- Insert HTML <canvas> element right here. Render and animate previously prepared images into it. Usage: <<canvasanimate [CSS_CLASSES]>> --> <<twinescript>> if (!_Canvas) { Errors.report("'canvasdraw' without 'canvasstart'"); } else { Renderer.animateLayers(_Canvas, _CanvasLayers, Renderer.Animations, Renderer.defaultListener); if (typeof _args[0] === 'string') { _Canvas.canvas.className = _args[0]; } output.appendChild(_Canvas.canvas); } <</twinescript>> <<unset _Canvas,_CanvasLayers,_CanvasFrames>> <</widget>> <<widget "canvasdraw">> <!-- Insert HTML <canvas> element right here. Render previously prepared images into it. Usage: <<canvasdraw [FRAMECOUNT] [CSS_CLASSES]>> --> <<twinescript>> if (!_Canvas) { Errors.report("'canvasdraw' without 'canvasstart'"); } else { Renderer.composeLayers(_Canvas, _CanvasLayers, _args[0] || 1, Renderer.defaultListener); if (typeof _args[1] === 'string') { _Canvas.canvas.className = _args[1]; } output.appendChild(_Canvas.canvas); } <</twinescript>> <<unset _Canvas,_CanvasLayers,_CanvasFrames>> <</widget>>
<!-- <<canvasimg [CSSCLASSES]>> Render full player image. --> <<widget "canvasimg">> <<selectmodel "lighting" "sidebar">> <<rendermodel "lighting">> <<selectmodel "main" "sidebar">> <<modelprepare-player-body>> <<modelprepare-player-clothes>> <<if $options.sidebarAnimations isnot false>> <<animatemodel _args[0]>> <<else>> <<rendermodel _args[0]>> <</if>> <<if playerHasStrapon()>> <<set _modeloptions.crotch_visible to false>> <<set _modeloptions.crotch_exposed to false>> <<if $worn.lower.exposed lte 1 and $lowerwetstage lte 0>> <<set _modeloptions.worn.under_lower.index to 0>> <</if>> <</if>> <</widget>> <!-- Set model options & filters from player body Requires prior <<selectmodel "main">> --> <!-- - ██████ ██ ██████ ████████ ██ ██ ███████ ███████ - ██ ██ ██ ██ ██ ██ ██ ██ ██ - ██ ██ ██ ██ ██ ███████ █████ ███████ - ██ ██ ██ ██ ██ ██ ██ ██ ██ - ██████ ███████ ██████ ██ ██ ██ ███████ ███████ --> <!-- Set model options & filters for player clothes --> <<widget "canvas-player-base-body">> <<selectmodel "lighting">> <<set _modeloptions.lights.gradient.enabled = false>> <<set _modeloptions.lights.flat.enabled = false>> <<rendermodel "lighting">> <<selectmodel "main">> <<set _chestVisible to !$options.neverNudeMenus>> <<modelprepare-player-body>> <!-- Reset covering --> <<set _modeloptions.arm_left to "idle">> <<set _modeloptions.arm_right to "idle">> <<set _modeloptions.angel_wing_left to "idle">> <<set _modeloptions.angel_wing_right to "idle">> <<set _modeloptions.fallen_wing_left to "idle">> <<set _modeloptions.fallen_wing_right to "idle">> <<set _modeloptions.demon_wing_left to "idle">> <<set _modeloptions.demon_wing_right to "idle">> <<set _modeloptions.bird_wing_left to "idle">> <<set _modeloptions.bird_wing_right to "idle">> <!-- Reset face --> <<set _modeloptions.blink to false>> <<set _modeloptions.eyes_half to false>> <<set _modeloptions.brows to "top">> <<set _modeloptions.mouth to "neutral">> <<set _modeloptions.tears to 0>> <<set _modeloptions.blush to 0>> <!-- Reset effects --> <<set _modeloptions.drip_vaginal to "">> <<set _modeloptions.drip_anal to "">> <<set _modeloptions.drip_mouth to "">> <<if $options.neverNudeMenus>> <<set _modeloptions.crotch_visible to false>> <<set _modeloptions.penis to "">> <<if $player.gender_appearance neq "m" or $player.perceived_breastsize gte 3>> <<set _modeloptions.worn.under_upper.index to 12>> <<set _modeloptions.worn.under_upper.colour to "pale white">> <</if>> <<set _modeloptions.worn.under_lower.colour to "pale white">> <<if $player.gender_appearance is "m">> <<set _modeloptions.worn.under_lower.index to 4>> <<else>> <<set _modeloptions.worn.under_lower.index to 1>> <</if>> <</if>> <<if playerHasStrapon()>> <<set _modeloptions.worn.under_lower.index to $worn.under_lower.index>> <<set _modeloptions.worn.under_lower.colour to ($worn.under_lower.colourCustom ? $worn.under_lower.colourCustom : $worn.under_lower.colour)>> <</if>> <<rendermodel>> <</widget>> <<widget "canvas-model-override">> <<if _args[0] is "clear">> <<set $modeloptionsOverride to {}>> <<else>> <<set $modeloptionsOverride[_args[0]] to _args[1]>> <</if>> <</widget>>
<!-- High-level canvas model widgets. Example #1: <<selectmodel "main">> /* set model parameters. see model source/docs on required options and filters */ <<set _modeloptions.showEyes to true>> <<modelfilter eyes setup.colours.eyes["hazel"].canvasfilter>> /* show layers */ <<showlayer "base" `{alpha:0.5}`>> <<showlayer "eyes">> /* ignite the sin machine */ <<animatemodel>> /* Will insert <canvas> element here and animate it */ /* <<rendermodel>> can be used for static (non-animated) model */ --> <!-- Example #2. Rerender model with new options. <<selectmodel "main">> /* set options and filters */ <<set _modeloptions.size to 10>> <<animatemodel>> /* _modelclass is used to keep model; preserve it somewhere */ <<set _testmodel to _modelclass>> <<button "Randomize me">> <<set _testmodel.options.size to random(20)>> <<run _testmodel.redraw()>> <</button>> --> <!-- Select model and prepare for rendering <<selectmodel NAME [INSTANCE]>> Parameter INSTANCE is id for caching between passages. Do not render instance multiple times on same passage. --> <<widget "selectmodel">> <<set _modelclass to Renderer.locateModel(_args[0], _args[1])>> <<set _modeloptions to _modelclass.defaultOptions()>> <<run _modelclass.reset()>> <</widget>> <!-- Show layer and optionaly add filters <<showlayer LAYERNAME [...FILTERS]>> --> <<widget "showlayer">> <<run _modelclass.showLayer(_args[0], _args.slice(1))>> <</widget>> <!-- Hide layer <<hidelayer LAYERNAME>> --> <<widget "hidelayer">> <<run _modelclass.hideLayer(_args[0])>> <</widget>> <!-- Set model filter object. <<modelfilter FILTERNAME FILTER>> Will do a copy, so you can safely edit filter options --> <<widget "modelfilter">> <<set _modeloptions.filters[_args[0]] to clone(_args[1])>> <</widget>> <!-- Set model filter option <<modelfilterset FILTERNAME OPTIONNAME OPTIONVALUE>> --> <<widget "modelfilterset">> <<script>> const filter = T.modeloptions.filters[T.args[0]]; if (!filter) filter = T.modeloptions.filters[T.args[0]] = {}; filter[T.args[1]] = T.args[2]; <</script>> <</widget>> <!-- <<animatemodel [CSSCLASS]>> Render model and JS-animate it --> <<widget "animatemodel">> <<script>> const canvas = T.modelclass.canvas || T.modelclass.createCanvas(); T.modelclass.animate(canvas, T.modeloptions, Renderer.defaultListener); canvas.canvas.className = typeof T.args[0] === 'string' ? T.args[0] : ''; output.append(canvas.canvas); <</script>> <</widget>> <!-- <<rendermodel [CSSCLASS] [CSSANIM]>> Render model as a static image If CSSANIM is true (default false), render multiple frames for CSS animation --> <<widget "rendermodel">> <<script>> const canvas = T.modelclass.createCanvas(!!T.args[1]); T.modelclass.render(canvas, T.modeloptions, Renderer.defaultListener); canvas.canvas.className = typeof T.args[0] === 'string' ? T.args[0] : ''; output.append(canvas.canvas); <</script>> <</widget>>
<<widget "clothingCaptionText">> <<run window.outfitChecks()>> <<if _fullyNaked is false>> <<set _clothingCaptionItems to []>> <<set _finally to ".">> <<set _text_output to "">> <<set _wearing to "You are " + (_topless ? "<span class='pink'>topless</span>, " : "") + "wearing ">> <<if !_overNaked>> <<clothingCaptionTextOver>> <</if>> <<if !_middleNaked>> <<clothingCaptionTextMiddle>> <</if>> <<clothingCaptionTextUnder>> <<set _text_output to _wearing>> <<if _clothingCaptionItems.length is 1>> <<set _text_output += (_nothingBut ? "nothing but" : "only")>> <</if>> <<set _text_output += formatList(_clothingCaptionItems) + _finally>> <<print _text_output>> <<clothingCaptionTextGenitals>> <<if $worn.handheld.type.includes("rainproof")>> <br><br> <</if>> <<clothingCaptionTextHandheld>> <<elseif playerHasButtPlug()>> <<set $_a to ($worn.butt_plug.name is "anal beads"? "": "a ")>> <<print `You wear ${$_a}$worn.butt_plug.name.`>> <</if>> <<clothingCaptionTextNothing>> <<clothingCaptionTextMask>> <<if window.checkForExposedClothing()>> <br> <<clothingCaptionTextStrip>> <</if>> <<if $NudeGenderDC gte 0>> <br> <<clothingCaptionTextGender>> <</if>> <<if playerIsPregnant() and playerAwareTheyArePregnant() and playerBellySize() gt 7 or $bellySizeDebug>> <br> <<clothingCaptionTextPreggy>> <</if>> <</widget>> <<widget "pushClothingCaption">> <<set $_output to " ">> <<set $_wornItem to $worn[_args[0]]>> /* word 1: article, example: "a" or "an" or "a pair of" */ <<if def _args[1]>> <<set $_output += _args[1] + " ">> <<else>> <<set $_wornItemWord to setup.clothes[_args[0]][clothesIndex(_args[0],$_wornItem)].word>> <<set $_output += ($_wornItemWord isnot "n" ? $_wornItemWord : "") + " ">> <</if>> /* word 2: damage, example "frayed" */ <<run $_output += window.integrityWord($_wornItem,_args[0])>> /* word 3: colour, example: "red" */ <<run $_output += window.clothesColour($_wornItem) + " ">> /* word 4: clothes name, example: "school shirt" */ <<set $_output += $_wornItem.name>> /* push */ <<set _clothingCaptionItems.pushUnique($_output)>> <</widget>> <<widget "clothingCaptionTextOver">><<silently>> <<if $worn.over_upper.name isnot "naked">> <!--Upper and maybe lower--> <<pushClothingCaption "over_upper">> <</if>> <<if $worn.over_lower.name isnot "naked" and !_overOutfit>> <!-- Lower, if not outfit --> <<pushClothingCaption "over_lower">> <</if>> <</silently>><</widget>> <<widget "clothingCaptionTextMiddle">><<silently>> <<if $worn.upper.name isnot "naked">> <!--Upper and maybe lower--> <<pushClothingCaption "upper">> <</if>> <<if $worn.lower.name isnot "naked" and !_middleOutfit>> <!-- Lower, if not outfit --> <<pushClothingCaption "lower">> <</if>> <</silently>><</widget>> <<widget "clothingCaptionTextUnder">><<silently>> <<set $_exposed to (_overNaked and _middleNaked)>> <<if _underNaked>> <!--Not wearing--> <<if ($worn.over_upper.name isnot "naked" or $worn.upper.name isnot "naked") and ($worn.over_lower.name isnot "naked" or $worn.lower.name isnot "naked")>> <<set _finally to " <span class='purple'>with nothing beneath.</span>">> <<elseif $worn.over_upper.name is "naked" or $worn.over_lower.name is "naked" or $worn.upper.name is "naked" or $worn.lower.name is "naked">> <<set _finally to " <span class='purple'>and no underwear.</span>">> <</if>> <<else>> <<if $_exposed>> <<set _wearing to "<span class='pink'>You are " + (_topless ? "topless, " : "") + "wearing ">> <<set _finally to ".</span>">> <</if>> <<if $worn.under_upper.name isnot "naked" and $worn.under_lower.name isnot "naked">> <!--Both--> <<set _nothingBut to $_exposed and _underOutfit>> <<pushClothingCaption "under_upper">> <<if !_underOutfit>> <<pushClothingCaption "under_lower">> <</if>> <<elseif $worn.under_upper.name isnot "naked">> <!--Upper only--> <<pushClothingCaption "under_upper">> <<set _nothingBut to $_exposed>> <<if !$_exposed and !_bottomless>> <<set _finally to ". <span class='purple'>You are not wearing " + ($player.gender_appearance isnot "m" ? "any panties" : "undies") + ".</span>">> <</if>> <<elseif $worn.under_lower.name isnot "naked">> <!--Lower only--> <<set $_pair to ($worn.under_lower.name.last() is "s" ? "a pair of" : "<<word under_lower>>")>> <<pushClothingCaption "under_lower" $_pair>> <<set _nothingBut to $_exposed>> <<if !$_exposed and !_topless and $player.breastsize gte 4 and ($player.gender isnot "m" or $backgroundTraits.includes("crossdresser"))>> <<set _finally to ". <span class='purple'>You are not wearing a bra.</span>">> <</if>> <</if>> <</if>> <</silently>><</widget>> <<widget "clothingCaptionTextHandheld">> <<silently>> <<if $worn.handheld.name isnot "naked" and $rightarm isnot "bound">> <<set $_text_output to "You are carrying ">> <<if $worn.handheld.integrity lte 24>> <<set _state to "a tattered ">> <<elseif $worn.handheld.integrity lte 60>> <<set _state to "a torn ">> <<elseif $worn.handheld.integrity lte 108>> <<set _state to "a frayed ">> <<else>> <<set _state to "">> <</if>> <<set $_text_output += _state + "<<word 'handheld'>> $worn.handheld.name.">> <</if>> <</silently>> <<if $_text_output>><<print $_text_output>><</if>> <</widget>> <<widget "clothingCaptionTextGenitals">><<silently>> <<if $worn.genitals.name isnot "naked">> <<if _bottomless>> <<set $_text_output to " <span class='red'>Your <<clothingCaptionChastityEffect>> <<genitalsintegrity>> $worn.genitals.name <<if playerChastity('anus')>>with an anal shield<</if>><<if playerHasButtPlug()>> and $worn.butt_plug.name<</if>> gives you no comfort.</span>">> <<else>> <<set $_text_output to " You wear <<genitalsword>> <<clothingCaptionChastityEffect>> <<genitalsintegrity>> $worn.genitals.name<<if playerChastity('anus')>> with an anal shield<</if>><<if playerHasButtPlug()>> and $worn.butt_plug.name<</if>>.">> <</if>> <<elseif playerHasButtPlug()>> <<set $_a to ($worn.butt_plug.name is "anal beads"? "": "a ")>> <<set $_text_output to ` You wear ${$_a}$worn.butt_plug.name.`>> <</if>> <</silently>><<if $_text_output>><<print $_text_output>><</if>> <</widget>> <<widget "clothingCaptionTextMask">> <<if $worn.face.type.includes("mask")>> <br> Your identity is concealed by your <<faceintegrity>> $worn.face.name. <</if>> <</widget>> <<widget "clothingCaptionTextNothing">><<silently>> <<if _fullyNaked>> <<if $worn.genitals.name isnot "naked">> <<set $_text_output to "Your <<clothingCaptionChastityEffect>> <<genitalsintegrity>> $worn.genitals.name <<if playerChastity('anus')>>with an anal shield<</if>> gives you no comfort.">> <<else>> <<set $_text_output to "You are completely naked!">> <</if>> <<elseif _bottomless>> <<set $_text_output to "Your bottom half is completely exposed!">> <</if>> <</silently>><<if $_text_output>><span class="red"><<print $_text_output>></span><</if>><</widget>> <<widget "clothingstatecompare">> /* One argument, a clothing article whose state you want to compare against its original state. Must be the ENTIRE variable, not .name! */ /* Returns the difference between the current and base states. Negative means it's pulled down, positive means it's pulled up. */ /* If the clothing was pulled to the side, this returns 0. It would also return 0 if the current state is the base state. */ <<set _compare_result to _clothing_levels.indexOf($worn[_args[0]].state) - _clothing_levels.indexOf(setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].state_base)>> <<if $worn[_args[0]].state is "totheside">><<set _compare_result to 0>><</if>> <</widget>> <<widget "clothingCaptionTextStrip">> <<set _captionCount to 0>> <<set _clothing_levels to [0,"ankles","knees","thighs","waist","midriff","chest"]>> <<clothingCaptionExposed "upper">> <<clothingCaptionExposed "lower">> <<if _captionCount gte 1>> <br><br> /* insert extra newlines after the caption, if there is one, for better style */ <</if>> <<unset _captionCount>> <</widget>> <<widget "clothingCaptionExposed">> <<set $_clothes to {"naked": [], "wet": [], "up": [], "down": [], "totheside": [], "exposed": []}>> <<set $_plural to {"naked": false, "wet": false, "up": false, "down": false, "totheside": false, "exposed": false}>> <<set $_isExposed to false>> <<set $_revealColour to "purple">> <<set $_highestLevelCovered to "">> <<set $_clothingRevealType to {}>> <<set $_outfitType to _args[0]>> /* Find which clothes are failing to cover the player */ <<for $_i, $_outfitLayer range ["over", "", "under"]>> <<set $_clothing to [$_outfitLayer, $_outfitType].filter(Boolean).join("_")>> <<set _wetstage to $_outfitLayer + $_outfitType + "wetstage">> <<set $_wornClothing to $worn[$_clothing]>> <<if $_wornClothing.type.includes("naked")>> <<set $_clothingRevealType[$_clothing] to "naked">> <<continue>> <<elseif $_wornClothing.state isnot setup.clothes[$_clothing][clothesIndex($_clothing,$_wornClothing)].state_base>> <<clothingstatecompare $_clothing>> <<if _compare_result gte 1>> <<set $_clothingRevealType[$_clothing] to "up">> <<elseif _compare_result lte -1>> <<set $_clothingRevealType[$_clothing] to "down">> <<else>> <<set $_clothingRevealType[$_clothing] to "totheside">> <</if>> <<elseif $_wornClothing.exposed is 2>> <<set $_clothingRevealType[$_clothing] to "exposed">> <<elseif V[_wetstage] gte 3>> <<set $_clothingRevealType[$_clothing] to "wet">> <<else>> <<set $_clothingRevealType[$_clothing] to false>> <<set $_highestLevelCovered to $_wornClothing.name>> <<break>> /* don't check clothing below the current layer if this layer is blocking visibility */ <</if>> <<set $_revealType to $_clothingRevealType[$_clothing]>> <<set $_clothes[$_revealType].pushUnique($_wornClothing.name)>> <<set $_plural[$_revealType] to ($_plural[$_revealType] or ($_wornClothing.plural is 1))>> <<set $_isExposed to true>> <</for>> <<if $_isExposed>> /* Find which areas are exposed */ <<if $_highestLevelCovered is "">> <<silently>> <<if $_outfitType is "upper">> <<breasts>><<set $_undertext to _text_output>> <<else>> <<set $_revealColour to "pink">> <<genitals>><<set $_undertext to _text_output>> <</if>> <</silently>> <<else>> <<set $_undertext to $_highestLevelCovered>> <</if>> /* Piece together the caption */ <<set _output to "">> <<for $_type range ["wet", "up", "down", "totheside", "exposed"]>> <<if $_clothes[$_type].length lte 0>> <<continue>> <</if>> <<set $_verbIsPlural to ($_clothes[$_type].length gte 2 or $_plural[$_type])>> <<switch $_type>> <<case "wet">> <<set $_verb to ($_verbIsPlural ? " are drenched, " : " is drenched, ")>> <<case "exposed">> <<set $_verb to ($_verbIsPlural ? " have been pulled aside, " : " has been pulled aside, ")>> <<case "up">> <<set $_verb to ($_verbIsPlural ? " have been pulled up, " : " has been pulled up, ")>> <<case "down">> <<set $_verb to ($_verbIsPlural ? " have been pulled down, " : " has been pulled down, ")>> <<case "totheside">> <<set $_verb to ($_verbIsPlural ? " have been pulled to the side, " : " has been pulled to the side, ")>> <</switch>> <<if _output isnot "">><<set _output += " and your ">><</if>> <<set _output += formatList($_clothes[$_type]) + $_verb>> <</for>> /* Print the caption */ <<set _captionCount += 1>> <br> Your _output <span @class="$_revealColour">revealing your $_undertext.</span> <</if>> <</widget>> <<widget "clothingCaptionTextGender">><<silently>> <<if ($player.gender isnot "f" or $player.penisExist) and $player.gender_appearance is "f">> <<if $breastindicator is 1 and $player.perceived_breastsize gt 1>> <<set $_text_output to "Your exposed breasts will make people think you're a girl!">> <<elseif $exposed gte 2>> <<set $_text_output to "The way you look, people will think you're a girl!">> <<else>> <<set $_text_output to "The way you're dressed, people will think you're a girl!">> <</if>> <<elseif $player.gender isnot "m" and $player.gender_appearance is "m">> <<if $breastindicator is 0 and $worn.upper.exposed is 2 and $worn.under_upper.exposed gte 1 and $player.perceived_breastsize lte 1>> <<set $_text_output to "Your exposed flat chest will make people think you're a boy!">> <<elseif $exposed gte 2>> <<set $_text_output to "The way you look, people will think you're a boy!">> <<else>> <<set $_text_output to "The way you're dressed, people will think you're a boy!">> <</if>> <</if>> <</silently>><<if $_text_output>><span class="pink"><<print $_text_output>></span><</if>><</widget>> <<widget "clothingCaptionTextPreggy">><<silently>> <<if playerBellyVisible()>> <<set $_textCol to "pink">> <<if _fullyNaked>> <<set $_text_output to `Your complete lack of clothing makes your <<bellyDescription "pc">> more obvious.`>> <<elseif $worn.upper.type.includes("naked") and $worn.over_upper.type.includes("naked")>> <<if $worn.under_upper.type.includes("naked")>> <<set $_text_output to `Your exposed upper body makes your <<bellyDescription "pc">> more obvious.`>> <<else>> <<set $_text_output to `Your $worn.under_upper.name does nothing to conceal your <<bellyDescription "pc">>.`>> <</if>> <<elseif $worn.upper.type.includes("bellyShow") and $worn.over_upper.type.includes("naked")>> <<set $_text_output to `Your $worn.upper.name shows off your <<bellyDescription "pc">>.`>> <<elseif $worn.upper.type.includes("bellyHide") and $worn.over_upper.type.includes("naked")>> <<set $_text_output to `Your <<bellyDescription "pc">> is too large for your $worn.upper.name to hide.`>> <<elseif $worn.lower.type.includes("bellyHide") and $worn.over_upper.type.includes("naked")>> <<set $_text_output to `Your <<bellyDescription "pc">> is too large for your $worn.lower.name to hide.`>> <<else>> <<set $_text_output to `Your <<bellyDescription "pc">> is visible.`>> <</if>> <<else>> <<set $_textCol to "blue">> <<if $worn.upper.type.includes("bellyHide")>> <<set $_text_output to `Your $worn.upper.name hides your <<bellyDescription "pc">>.`>> <<elseif $worn.lower.type.includes("bellyHide")>> <<set $_text_output to `Your $worn.lower.name hides your <<bellyDescription "pc">>.`>> <<elseif !$worn.over_upper.type.includes("naked")>> <<set $_text_output to `Your $worn.over_upper.name hides your <<bellyDescription "pc">>.`>> <<else>> <<set $_text_output to `Your <<bellyDescription "pc">> is not visible.`>> <</if>> <</if>> <</silently>><<if $_text_output>><span @class=$_textCol><<print $_text_output>></span><</if>><</widget>> <<widget "clothingCaptionChastityEffect">><<silently>> <<if $worn.genitals.name is "chastity parasite">> <<if $earSlime.defyCooldown>> <<set $_text_output to (integrityWord(V.worn.genitals, "genitals") ? "compressed," : "compressed")>> <<elseif $earSlime.vibration and $earSlime.vibration lte 20>> <<set $_text_output to (integrityWord(V.worn.genitals, "genitals") ? "pulsating," : "pulsating")>> <<elseif $earSlime.vibration>> <<set $_text_output to (integrityWord(V.worn.genitals, "genitals") ? "vibrating," : "vibrating")>> <</if>> <</if>> <</silently>><<if $_text_output>><<print $_text_output>><</if>> <</widget>>
<<widget "listoutfits">> <label class="no-numberify"><<link "Create new set from current clothing">><<toggleclass "#newClothingSetFromCurrent" "hidden">><</link>></label> | <label class="no-numberify"><<link "Edit all sets">><<overlayReplace "outfitEditor">><</link>></label> <br> <div id="newClothingSetFromCurrent" class="wardrobeSubSection hidden"> <<wardrobeNewOutfit>> <br> </div> <br> <label><<radiobutton "$delete_outfit" "none" checked>> Wear</label> | <label><<radiobutton "$delete_outfit" 1>> Delete</label> | <label><<radiobutton "$delete_outfit" 2>> Overwrite with current clothing</label> <br><br> <!-- List the currently saved outfits --> <div class="outfitContainer no-numberify"> <<for _index, $_outfit range $outfit>> <<if $_outfit.location and $_outfit.location isnot $wardrobe_location>> <<continue>> <</if>> <<set _outfitname to $_outfit.name + ($_outfit.colors is false ? "" : " [C]") + ($_outfit.location is undefined ? "" : " [L]")>> <<capture _index>> <<button _outfitname>><<set $wear_outfit to _index>><<updatewardrobe "outfits">><</button>> <</capture>> <</for>> </div> <</widget>> <<widget "listoutfitsPassage">> <<set $wardrobe_location to _args[0]>> <<set _store_location to _args[1] || _args[0]>> <<set $_indent to _args[2] || false>> <<wardrobeSelection true>> <<for _index, _outfit range $outfit>> <<if (_outfit.location and _outfit.location isnot $wardrobe_location) or _outfit.type.includes("swim") or _outfit.type.includes("sleep")>> <<continue>> <</if>> <<capture _index _outfit>> <<if $_indent>><<ind>><</if>> <<if _outfit.name is currentOutfit()>> <span class="grey"><<print _outfit.name>> (Equipped)</span> <<else>> <<link [["Wear "+_outfit.name|$passage]]>> <<if clothingInStorage(_store_location).length is 0>> <<storesave _store_location>> <</if>> <<set $wearoutfittext to _outfit.name + " clothes">> <<set $eventskip to 1>> <<set $wear_outfit to _index>> <<set $storeLocation to _args[0]>> <</link>> <</if>> <br> <</capture>> <</for>> <</widget>> <<widget "listsleepoutfits">> <<switch _args[0]>> <<case "Farm Bed">> <<set _passage to "Farm Bed">> <<set $wardrobe_location to "alexFarm">> <<set $storeLocation to "Farm Bed">> <<case "Farm Alex Bed">> <<set _passage to "Farm Alex Bed">> <<set $wardrobe_location to "alexFarm">> <<set $storeLocation to "farm alex bed">> <<case "prison bed">> <<set _passage to "Prison Bed">> <<set $wardrobe_location to "prison">> <<set $storeLocation to "prison bed">> <<case "Robin Bed">> <<set _passage to "Robin Room Bed">> <<set $wardrobe_location to "wardrobe">> <<set $storeLocation to "bed">> <<case "Temple Bunk Bed">> <<set _passage to "Temple Bunk Bed">> <<set $wardrobe_location to "temple">> <<set $storeLocation to "Temple Bunk Bed">> <<case "Pirate Bed Lie">> <<set _passage to "Pirate Bed Lie">> <<set $wardrobe_location to "pirate">> <<set $storeLocation to "Pirate Bed Lie">> <<default>> <<set _passage to "Bed">> <<set $wardrobe_location to "wardrobe">> <<set $storeLocation to "bed">> <</switch>> <<wardrobeSelection true>> <<if $earSlime.alwaysSleepNaked is false>> <<for _index, $_outfit range $outfit>> <<if $_outfit.type.includes("sleep")>> <<if _passage is "Bed">> <<if $furnitureLocation is "orphanage">> <<set _bed to Furniture.get('bed')>> <</if>> <<if _bed is undefined or _bed is null>> <<set _bed to Furniture.get('bed','bed')>> <</if>> <<furnitureicon _bed.iconFile>> <<elseif _passage is "Prison Bed">> <<prisonicon "bed">> <<elseif _passage is "Asylum Bed">> <<bedicon "hospital">> <<elseif $location is "alex_cottage">> <<set _farmbed to ($loveInterest.primary is "Alex" or $loveInterest.secondary is "Alex") ? "alex" : "farm">> <<if $furnitureLocation is "farm cottage">> <<if $passage is "Farm Bedroom">> <<set _bed to Furniture.get('bed')>> <<if _bed is undefined or _bed is null>> <<set _bed to Furniture.get('bed','bed')>> <</if>> <<furnitureicon _bed.iconFile>> <<else>> <<farmicon "alexbed">> <</if>> <<else>> <<bedicon _farmbed>> <</if>> <<else>> <<bedicon>> <</if>> <<capture _index>> <<set _outfitname to $_outfit.name + ($_outfit.colors is false ? "" : " [C]")>> <<link [["Wear "+_outfitname+" and climb in bed"|_passage]]>><<set $wear_outfit to _index>><<saveTempHairStyle>><</link>> <</capture>> <br> <</if>> <</for>> <<elseif $outfit.find(outfitSet => outfitSet.type.includes("sleep"))>> <<icon "cross.png" "infront">> <<if _passage is "Bed">> <<furnitureicon _bed.iconFile>> <<elseif _passage is "Prison Bed">> <<prisonicon "bed">> <<elseif _passage is "Asylum Bed">> <<bedicon "hospital">> <<else>> <<bedicon>> <</if>> <<if $possessed>> <span class="purple">The slime in your head is silent.</span> <br> <<else>> <span class="purple">The slime is not allowing you to sleep with anything on.</span> <br> <</if>> <</if>> <</widget>> <<widget "listswimoutfits">> <<set $wardrobe_location to _args[0]>> <<set _store_location to _args[1] || _args[0]>> <<set $_indent to _args[2] || false>> <<wardrobeSelection true>> <<for _index, _outfit range $outfit>> <<if (_outfit.location and _outfit.location isnot $wardrobe_location) or !_outfit.type.includes("swim")>> <<continue>> <</if>> <<capture _index _outfit>> <<if $_indent>><<ind>><</if>> <<if _outfit.name is currentOutfit()>> <span class="grey"><<print _outfit.name>> (Equipped)</span> <<else>> <<link [["Wear "+_outfit.name|$passage]]>> <<storesave _store_location>> <<set $wearoutfittext to _outfit.name>> <<set $eventskip to 1>> <<set $wear_outfit to _index>> <<set $storeLocation to _args[0]>> <</link>> <</if>> <br> <</capture>> <</for>> <</widget>> <<widget "listdancingclothes">> <<set _store_location to _args[0]>> <<set _slot to "under_upper">> <<for _index, _outfit range $wardrobe[_slot].sort((a, b) => (a.name > b.name) ? 1 : -1)>> <<if !_outfit.type.includes("dance")>> <<continue>> <</if>> <<capture _outfit>> <<if !$wardrobe.under_lower.find(item => item.variable is _outfit.variable)>> <span class="grey"><<print _outfit.name>> (Broken)</span> <br> <<elseif _outfit.name isnot _prevName>> <<set _prevName to _outfit.name>> <<if _outfit.name is $worn.under_upper.name>> <span class="grey"><<print _outfit.name>> (Equipped)</span> <<else>> <<link [["Wear "+_outfit.name|$passage]]>> <<if clothingInStorage(_store_location).length is 0>> <<storesave _store_location>> <<set $wearoutfittext to _outfit.name>> <</if>> <<set $eventskip to 1>> <<set _item_index to $wardrobe[_slot].indexOf(_outfit)>> <<generalWearFromWardrobe _slot _item_index>> <</link>> <</if>> <br> <</if>> <</capture>> <</for>> <</widget>> <<widget "radiooutfits">> <<for _index, $_outfit range $outfit>> <<if $_outfit.location and $_outfit.location isnot $wardrobe_location>> <<continue>> <</if>> <<capture _index>> <label>Wear $_outfit.name <<radiobutton "$wear_outfit" _index>></label> | <</capture>> <</for>> <label>Dress like you were <<radiobutton "$wear_outfit" "clotheson" checked>></label> <</widget>> <<widget "deleteoutfit">> <<if $delete_outfit is 1 and $wear_outfit isnot "none">> <<set $outfit.deleteAt($wear_outfit)>> <<set $wear_outfit to "none">> <</if>> <</widget>> <<widget "saveTempHairStyle">> <<set $tempSavedHairStyles to {hairtype:$hairtype, fringetype:$fringetype, hairposition:$hairposition}>> <</widget>> <<widget "loadTempHairStyle">> <<if $tempSavedHairStyles>> <<set $hairtype to $tempSavedHairStyles['hairtype']>> <<set $fringetype to $tempSavedHairStyles['fringetype']>> <<set $hairposition to $tempSavedHairStyles['hairposition']>> <<unset $tempSavedHairStyles>> <</if>> <</widget>> <<widget "wearoutfit">> <<set _selectedWardrobe to selectWardrobe()>> <<updateWornClothingLocation $wardrobe_location>> <<deleteoutfit>> <<overwriteoutfit>> <<set $delete_outfit to "none">> <<if $wear_outfit is "clotheson">> <<storeon $storeLocation>> <<elseif $wear_outfit isnot "none">> <<set _equip to setup.clothingLayer.all>> <<set _equipSkip to {"over_upper":false, "over_lower":false, "upper":false, "lower":false, "under_upper":false, "under_lower":false, "over_head":false, "head":false, "face":false, "neck":false, "hands":false, "handheld":false, "legs":false, "feet":false}>> <<set _storeItemSkip to {"over_upper":false, "over_lower":false, "upper":false, "lower":false, "under_upper":false, "under_lower":false, "over_head":false, "head":false, "face":false, "neck":false, "hands":false, "handheld":false, "legs":false, "feet":false}>> <<set _equipDamageValue to {"over_upper":3, "over_lower":3, "upper":3, "lower":3, "under_upper":3, "under_lower":3, "over_head":1, "head":1, "face":1, "neck":1, "hands":1, "handheld":1, "legs":1, "feet":1}>> <<set _corruptionEquipSkip to ["over_upper","over_lower","upper", "lower", "under_upper", "under_lower"]>> <<set _towels to ["towel top","large towel","towel skirt"]>> <<set _notEquipped to {}>> <<for $_slot range _equip>> /*Skip slots that have been equipped with*/ <<if _equipSkip[$_slot] is true>> <<continue>> <</if>> <<set $_incomingItemName to $outfit[$wear_outfit][$_slot]>> /*Skip slots that have not been defined*/ <<if $_incomingItemName is undefined>> <<continue>> <</if>> /*Check for items that are cursed*/ <<unset _preventItemEquip>> <<if $worn[$_slot].cursed is 1>> <<set _preventItemEquip to true>> <<elseif $worn[$_slot].outfitPrimary isnot undefined>> <<set _preventItemEquip to Object.entries($worn[$_slot].outfitPrimary).some(([slot, name]) => { if (!["broken", "split"].includes(name) and $worn[slot].cursed is 1) _preventItemEquip = true; })>> <</if>> <<set $_storeLocation to ($storeLocation ? $storeLocation : $wardrobe_location)>> <<if _preventItemEquip is true>> <<if $_incomingItemName is "naked">> /*Can't unequip cursed item */ <<set _notEquipped[$_slot] to {"name": setup.clothes[$_slot][clothesIndex($_slot,$worn[$_slot])].name_cap, "reason": "cursed unequip"}>> <<else>> /*Can't swap cursed item for anything else */ <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "cursed slot"}>> <</if>> <<else>> <<if $_incomingItemName is "naked">> <<generalUndress $_storeLocation $_slot>> <<elseif _towels.includes($_incomingItemName)>> <<generalUndress $_storeLocation $_slot>> <<if $worn[$_slot].name is "naked">> <<switch $_incomingItemName>> <<case "towel top">> <<set $worn.upper to clone(setup.clothes.upper[3])>> <<case "large towel">> <<generalUndress $_storeLocation "lower">> <<if $worn.lower.name is "naked">> <<set $worn.upper to clone(setup.clothes.upper[14])>> <<set $worn.lower to clone(setup.clothes.lower[15])>> <<set _equipSkip.lower to true>> <</if>> <<case "towel skirt">> <<set $worn.lower to clone(setup.clothes.lower[3])>> <</switch>> <</if>> <<else>> <<set _foundEquip to null>><<set _lastResort to null>> <<unset _randomColour>> <<unset _randomColourAcc>> <<for $_equipIndex, $_wardrobeItem range _selectedWardrobe[$_slot]>> <<if $_incomingItemName isnot $_wardrobeItem.name or ($_wardrobeItem.outfitSecondary and !["broken", "split"].includes($_wardrobeItem.outfitSecondary[1]))>> <<continue>> <</if>> /* Check for saved colors in clothing set */ <<set $_outfitColors to $outfit[$wear_outfit].colors>> <<if $_outfitColors>> /* Start of checking for random colours */ <<set _randomColourListItem to $_wardrobeItem.name>> <<if $_outfitColors[$_slot][0] is "random" or $_outfitColors[$_slot][1] is "random">> <<set $_randomColourItems to _selectedWardrobe[$_slot].filter(item => item.name === T.randomColourListItem)>> /* Ensures that non-random colours are accounted for*/ <<if $_outfitColors[$_slot][0] and $_outfitColors[$_slot][0] isnot "random">> <<set _tempColour to $_outfitColors[$_slot][0]>> <<set $_randomColourItems to $_randomColourItems.filter(item => item.colour === T.tempColour)>> <<unset _tempColour>> <</if>> <<if $_outfitColors[$_slot][1] and $_outfitColors[$_slot][1] isnot "random">> <<set _tempColour to $_outfitColors[$_slot][1]>> <<set $_randomColourItems to $_randomColourItems.filter(item => item.accessory_colour === T.tempColour)>> <<unset _tempColour>> <</if>> <</if>> /* Picks the random colours*/ <<if $_outfitColors[$_slot][0] is "random" and !_randomColour>> <<set _randomColourList to []>> <<if $_randomColourItems and $_randomColourItems.length>> <<run $_randomColourItems.forEach(item => T.randomColourList.pushUnique(item.colour))>> <</if>> <<if _randomColourList.length>> <<set _randomColour to _randomColourList[random(0, _randomColourList.length - 1)]>> <<set $_randomColourItems to $_randomColourItems.filter(item => item.colour === T.randomColour)>> <</if>> <</if>> <<if $_outfitColors[$_slot][1] is "random" and !_randomColourAcc>> <<set _randomColourAccList to []>> <<if $_randomColourItems and $_randomColourItems.length>> <<run $_randomColourItems.forEach(item => T.randomColourAccList.pushUnique(item.accessory_colour))>> <</if>> <<if _randomColourAccList.length>> <<set _randomColourAcc to _randomColourAccList[random(0, _randomColourAccList.length - 1)]>> <</if>> <</if>> <<unset _randomColourListItem>> /* Skips over items that do not match the random colours */ <<if (!_randomColour or _randomColour isnot $_wardrobeItem.colour) and $_outfitColors[$_slot][0] isnot $_wardrobeItem.colour>> <<continue>> <</if>> <<if (!_randomColourAcc or _randomColourAcc isnot $_wardrobeItem.accessory_colour) and $_outfitColors[$_slot][1] isnot $_wardrobeItem.accessory_colour>> <<continue>> <</if>> /* End of checking for random colours */ <<set $_outfitCustomColors to $_outfitColors[$_slot+"custom"] || [undefined, undefined]>> <<if $_wardrobeItem.colour is "custom" and $_wardrobeItem.colourCustom isnot undefined and $_wardrobeItem.colourCustom isnot $_outfitCustomColors[0]>> /* this item is not a match, move on to the next item */ <<continue>> <</if>> <<if $_wardrobeItem.accessory_colour is "custom" and $_wardrobeItem.accessory_colourCustom isnot undefined and $_wardrobeItem.accessory_colourCustom isnot $_outfitCustomColors[1]>> <<continue>> <</if>> <</if>> /*Check for preggy restriction*/ <<if playerBellySize() gte 12 and $_wardrobeItem.type.includes("constricting")>> <<if $_wardrobeItem.type.includes("chest_bind")>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "constrictingChest"}>> <<else>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "constricting"}>> <</if>> <<break>> <</if>> /*Check for slime corruption*/ <<if _corruptionEquipSkip.includes($_slot) and $earSlime.corruption gte 10>> <<if $earSlime.forcedCommando isnot undefined and ($_slot is "under_lower" or ($_wardrobeItem.outfitPrimary and $_wardrobeItem.outfitPrimary.under_lower and !["broken","split"].includes($_wardrobeItem.outfitPrimary.under_lower)))>> <<if $_wardrobeItem.type.includes("naked") or (_earSlimeEnableSwimwear and $_wardrobeItem.type.includes("swim")) or (_earSlimeEnableDancewear and $_wardrobeItem.type.includes("dance"))>> <<elseif $earSlime.forcedCommando gt 0>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "corruption_slime_deny_commando"}>> <<break>> <<else>> <<run delete $earSlime.forcedCommando>> <</if>> <<elseif $_wardrobeItem.reveal lt earSlimeCorruptionClothes() and (["prison", "asylum"].includes($location) or !_allowSchoolClothes) and !$_wardrobeItem.type.includesAny("event")>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "corruption_slime_deny"}>> <<break>> <<elseif $earSlime.forcedDressing and $_wardrobeItem.gender isnot $earSlime.forcedDressing.type and $_wardrobeItem.gender isnot "n" and !$_wardrobeItem.type.includesAny("event")>> <<if $earSlime.forcedDressing.days gt 0>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "corruption_slime_deny_forcedDressing"}>> <<break>> <<else>> <<run delete $earSlime.forcedDressing>> <</if>> <</if>> <</if>> /*Finds the least damaged outfit if the current clothing item is the main part and sets it as a last resort incase an undamaged one isnt found*/ <<set _damage to 0>> <<if $_wardrobeItem.outfitPrimary isnot undefined>> <<set _outfitPrimaryWearOutfit to $_wardrobeItem.outfitPrimary>> /*Check for damaged parts*/ <<for $_outfitSlot, $_outfitPieceName range _outfitPrimaryWearOutfit>> <<if $_outfitPieceName is "broken" or $_outfitPieceName is "split">> <<set _damage += _equipDamageValue[$_outfitSlot]>> <</if>> <</for>> <<if _damage gt 0>> <<if _lastResort is null or _damage lt _lastResort.damage>> <<set _lastResort to { damage: clone(_damage), id: clone($_equipIndex) }>> <</if>> <<continue>> <</if>> <</if>> <<if _damage is 0>> <<set _foundEquip to {}>> <<set _foundEquip[$_slot] to clone($_equipIndex)>> <<break>> <</if>> <</for>> /*If the main outfit has not been found, use the last resort*/ <<if _foundEquip is null and _lastResort isnot null>> <<if !($worn[$_slot].name is $_incomingItemName and $worn[$_slot].one_piece is 1)>> <<set _foundEquip to {}>> <<set _foundEquip[$_slot] to _lastResort.id>> <</if>> <</if>> /*Ensure at this point, the main piece of clothing has been found*/ <<if _foundEquip isnot null>> /*Undress equip*/ <<generalUndress $_storeLocation $_slot>> /*Find all the outfit pieces now the main least damaged piece has been found if the clothing is part of an outfit*/ <<set $_foundPrimary to _selectedWardrobe[$_slot][_foundEquip[$_slot]]>> <<if $_foundPrimary and $_foundPrimary.outfitPrimary isnot undefined>> /*Check these values once, outside of the loop, so we don't continuously check them on every loop iteration*/ <<set $_primaryColourIsCustom to ($_foundPrimary.colour is "custom")>> <<set $_primaryAccColourIsCustom to ($_foundPrimary.accessory_colour is "custom")>> <<for $_outfitSlot, $_outfitPieceName range $_foundPrimary.outfitPrimary>> <<if $worn[$_outfitSlot].cursed is 1>> <<set _preventItemEquip to true>> <<break>> <</if>> <<if $_outfitPieceName is "broken" or $_outfitPieceName is "split">> <<continue>> <</if>> <<if !_storeItemSkip[$_outfitSlot]>> <<generalUndress $_storeLocation $_outfitSlot>> <</if>> <<set $_itemFound to false>> <<for _index, $_possiblePiece range _selectedWardrobe[$_outfitSlot]>> <<if $_outfitPieceName isnot $_possiblePiece.name>> <<continue>> <</if>> /*Skip broken and split pieces*/ <<if $_possiblePiece.outfitSecondary[1] is "broken" or $_possiblePiece.outfitSecondary[1] is "split">> <<continue>> <</if>> /*Skip items that don't have matching colours*/ <<if $_foundPrimary.colour isnot $_possiblePiece.colour or ($_possiblePiece.accessory isnot 0 and $_foundPrimary.accessory_colour isnot $_possiblePiece.accessory_colour)>> <<continue>> <</if>> /*Skip items that don't have matching custom colours*/ <<if $_primaryColourIsCustom and ($_foundPrimary.colourCustom is undefined or $_foundPrimary.colourCustom isnot $_possiblePiece.colourCustom)>> <<continue>> <</if>> <<if $_primaryAccColourIsCustom and ($_foundPrimary.accessory isnot 0 and $_foundPrimary.accessory_colourCustom is undefined or $_foundPrimary.accessory_colourCustom isnot $_possiblePiece.accessory_colourCustom)>> <<continue>> <</if>> /*Found the correct item*/ <<set _foundEquip[clone($_outfitSlot)] to clone(_index)>> <<set _equipSkip[$_outfitSlot] to true>> <<set $_itemFound to true>> <</for>> <<if $_itemFound is false>> /*None were found, error in code/save?*/ <<set _notEquipped[$_outfitSlot] to {"name": $_incomingItemName, "reason": "not found piece"}>> <</if>> <</for>> <</if>> /*Equip all the clothing items*/ <<if !_preventItemEquip>> <<for $_outfitslot, _index range _foundEquip>> <<set $worn[$_outfitslot] to clone(_selectedWardrobe[$_outfitslot][_index])>> <<set $worn[$_outfitslot].lastTaken to $wardrobe_location>> <<set _selectedWardrobe[$_outfitslot].deleteAt(_index)>> <<run resetClothingState($_outfitslot)>> <</for>> /*If the worn item was a hoodie, make sure the hood is in the correct position*/ <<if $_slot is "upper" and $worn.upper.hoodposition and $worn.upper.outfitPrimary.head isnot "broken" and $worn.upper.outfitPrimary.head isnot "split">> <<if $worn.upper.hoodposition isnot outfitHoodPosition($outfit[$wear_outfit])>> <<toggleHood>> <<set _equipSkip["head"] to ($worn.upper.hoodposition is "up" ? true : false)>> <</if>> <</if>> <<else>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "cursed slot"}>> <</if>> <<else>> <<if $worn[$_slot].name is $_incomingItemName>> <<if !_notEquipped[$_slot]>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "not found replacement"}>> <</if>> /*If the worn item was a hoodie, make sure the hood is in the correct position*/ <<if $_slot is "upper" and $worn.upper.hoodposition and $worn.upper.outfitPrimary.head isnot "broken" and $worn.upper.outfitPrimary.head isnot "split" and $worn.upper.hoodposition isnot outfitHoodPosition($outfit[$wear_outfit])>> <<toggleHood>> <</if>> <<if $wardrobe_location isnot "wardrobe">> <<set _makeTempClothing to 1>> <<storeItem $wardrobe_location $_slot>> <</if>> <<else>> <<if !_notEquipped[$_slot]>> <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "not found"}>> <</if>> <<if $wardrobe_location isnot "wardrobe" and $worn[$_slot].name isnot "naked">> <<set _makeTempClothing to 1>> <<storeItem $wardrobe_location $_slot>> <</if>> <</if>> <</if>> <</if>> <</if>> <</for>> <<if $outfit[$wear_outfit].hairStyle>> /*Update Hairstyle*/ <<set $_outfitHair to $savedHairStyles[$outfit[$wear_outfit].hairStyle]>> <<set $hairtype to $_outfitHair.hairtype>> <<set $fringetype to $_outfitHair.fringetype>> <<set $hairposition to $_outfitHair.hairposition>> <</if>> <</if>> <<if $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to "notWorn">> <</if>> <<if $wear_outfit isnot "none" and _notEquipped>> <<if Object.values(_notEquipped).length gt 0>> <<set _resultStrings to {}>> <<set _locationName to ($wardrobes[$wardrobe_location] is undefined ? "wardrobe" : $wardrobe_location)>> <<set _wardrobeName to $wardrobes[_locationName].name + (!$wardrobes[_locationName].name.includes("locker") ? " wardrobe" : "")>> <<run Object.entries(_notEquipped).forEach(([slot, notEquippedItem]) => { switch (notEquippedItem.reason) { case "not found": if (_resultStrings.notFound === undefined) { _resultStrings.notFound = { "start": "You were unable to find any ", "joiner": "or", "end": " in your " + _wardrobeName + ".", "names": [], "color": "purple" } } _resultStrings.notFound.names.push(notEquippedItem.name); break; case "not found replacement": if (_resultStrings.notFoundReplacement === undefined) { _resultStrings.notFoundReplacement = { "start": "You were unable to find any ", "joiner": "or", "end": " in your " + _wardrobeName + " to replace what you're already wearing.", "names": [], "color": "lewd" } } _resultStrings.notFoundReplacement.names.push(notEquippedItem.name); break; case "constricting": if (_resultStrings.constricting === undefined) { _resultStrings.constricting = { "start": "Your <<bellyDescription 'pc'>> is too large to wear your ", "joiner": "and", "end": ".", "names": [], "color": "red" } } _resultStrings.constricting.names.push(notEquippedItem.name); break; case "constrictingChest": if (_resultStrings.constrictingChest === undefined) { _resultStrings.constrictingChest = { "start": "Your pregnant body is too sensitive to wear your ", "joiner": "and", "end": ".", "names": [], "color": "red" } } _resultStrings.constrictingChest.names.push(notEquippedItem.name); break; case "corruption_slime_deny": if (_resultStrings.corruption_slime_deny === undefined) { _resultStrings.corruption_slime_deny = { "start": "You were unable to equip your ", "joiner": "and", "end": " as the slime in your ear did not permit it.", "names": [], "color": "red" } } _resultStrings.corruption_slime_deny.names.push(notEquippedItem.name); break; case "corruption_slime_deny_commando": if (_resultStrings.corruption_slime_deny_commando === undefined) { _resultStrings.corruption_slime_deny_commando = { "start": "You were unable to equip your ", "joiner": "and", "end": " as the slime in your ear is forcing you to go commando.", "names": [], "color": "red" } } _resultStrings.corruption_slime_deny_commando.names.push(notEquippedItem.name); break; case "corruption_slime_deny_forcedDressing": if (_resultStrings.corruption_slime_deny_forcedDressing === undefined) { _resultStrings.corruption_slime_deny_forcedDressing = { "start": "You were unable to equip your ", "joiner": "and", "end": ` as the slime in your ear is only permitting more ${$earSlime.forcedDressing.type is "f" ? "feminine" : "masculine"} clothing.`, "names": [], "color": "red" } } _resultStrings.corruption_slime_deny_forcedDressing.names.push(notEquippedItem.name); break; case "cursed slot": if (_resultStrings.cursed === undefined) { _resultStrings.cursed = { "start": "You were unable to equip your ", "joiner": "and", "end": " due to not being able to remove what you're already wearing.", "names": [], "color": "red" } } _resultStrings.cursed.names.push(notEquippedItem.name); break; case "cursed unequip": if (_resultStrings.cursedUnequip === undefined) { _resultStrings.cursedUnequip = { "start": "You were unable to unequip your ", "joiner": "and", "end": " due to not being able to remove it on your own.", "names": [], "color": "red" } } _resultStrings.cursedUnequip.names.push(notEquippedItem.name); break; case "not found piece": if (V.worn[slot].name === notEquippedItem.name) break; if (_resultStrings.notFoundPiece === undefined) { _resultStrings.notFoundPiece = { "start": "You were unable to fully equip your ", "joiner": "and", "end": " due to an unexpected issue (Error in save most likely). Discarding and replacing related items should deal with the issue.", "names": [], "color": "red" } } _resultStrings.notFoundPiece.names.push(notEquippedItem.name); break; } })>> <<for $_clothingStrings range _resultStrings>> <<if $_clothingStrings.names.length gt 0>> <<set _string to $_clothingStrings.start>> <<set _string += formatList($_clothingStrings.names, $_clothingStrings.joiner)>> <<set _string += $_clothingStrings.end>> <span @class="$_clothingStrings.color">_string</span> <br> <</if>> <</for>> <</if>> <</if>> <<set $wear_outfit to "none">> <<unset $storeLocation>> <</widget>> <<widget "overwriteoutfit">> <<if $delete_outfit is 2 and $wear_outfit isnot "none">> <<set _equip to setup.clothingLayer.all>> <<set _outfit to $outfit[$wear_outfit]>> <<for $_slot range _equip>> <<set _outfit[$_slot] to $worn[$_slot].name>> <<if _outfit.colors>> <<set _outfit.colors[$_slot] to [clone($worn[$_slot].colour),clone($worn[$_slot].accessory_colour)]>> <<if $worn[$_slot].colour is "custom" or $worn[$_slot].accessory_colour is "custom">> <<run _outfit.colors[$_slot+"custom"] to [clone($worn[$_slot].colourCustom),clone($worn[$_slot].accessory_colourCustom)]>> <</if>> <</if>> <</for>> <<set $wear_outfit to "none">> <</if>> <</widget>> <<widget "outfitEditor">> <<link "Filter Options">><<toggleclass "#outfitEditorFilter" "hidden">><</link>> | <<link "Help">><<toggleclass "#outfitEditorHelp" "hidden">><</link>> <div id="outfitEditorHelp" class="hidden"> All options change the settings the moment you change the option, however, they will only save or be updated in the passage only if you first change the passage (Leave the wardrobe or click on 'Update Wardrobe' at the bottom of this overlay). <br><br> Changing the clothing items may result in the colour settings being reset for that item. This is caused from going from an item with colour options to one that doesn't have any colour options. Just because you can change it to some item's doesn't mean you have access to every item. <br><br> Location is where the Outfit is unique to and will only show for that wardrobe. Please note, where it says 'No access', this is either based on the multiple wardrobe setting or may not be available till a later version of the game. In most cases the 'Orphanage' wardrobe will be shared when Multiple wardrobes is set to 'isolated only' or is disabled. <br><br> </div> <<if _outfitEditorFilter is undefined>> <<outfitEditorDefaultFilter>> <</if>> <<outfitEditorUpdateFilter>> <<set _subState to {}>> <div id="outfitEditorFilter" class="hidden"> <<outfitEditorFilter>> </div> <div id="outfitEditor"> <<outfitEditorList>> </div> <<link [[Update wardrobe|$passage]]>><</link>> <</widget>> <<widget "outfitEditorFilter">> <h4>Filter</h4> <label>Items Per Page: <<numberslider "$outfitEditorPerPage" $outfitEditorPerPage 5 20 1>></label> <br><br> Type: <label><<checkbox "_outfitEditorFilter.type.normal" false true autocheck>> Normal</label> | <label><<checkbox "_outfitEditorFilter.type.sleep" false true autocheck>> Sleep</label> | <label><<checkbox "_outfitEditorFilter.type.swim" false true autocheck>> Swim</label> | <label><<checkbox "_outfitEditorFilter.type.school" false true autocheck>> School (Only used by starter outfits, may be added later)</label> | <br><br> Location: <<for $_label, $_value range _outfitEditorFilter.location>> <<set $_name to $wardrobes[$_label] ? $wardrobes[$_label].name : $_label>> <<set $_var to "_outfitEditorFilter.location." + $_label>> <<capture $_var>> <label> <<checkbox $_var false true autocheck>> <<print $_name>> <<if (!$multipleWardrobes or ($multipleWardrobes is "isolated" and !$_value.isolated)) and $_label isnot "wardrobe">> (No access) <</if>> </label> | <</capture>> <</for>> <br><br> Colour Saved in Outfit: <label><<checkbox "_outfitEditorFilter.colors.notSaved" false true autocheck>> No</label> | <label><<checkbox "_outfitEditorFilter.colors.saved" false true autocheck>> Yes</label> | <br><br> <<link "Update Filter">> <<outfitEditorUpdateFilter>> <<replace "#outfitEditor">><<outfitEditorList>><</replace>> <</link>> | <<link "Reset Filter">> <<outfitEditorDefaultFilter>> <<outfitEditorPageSetup>> <<replace "#outfitEditorFilter">><<outfitEditorFilter>><</replace>> <<replace "#outfitEditor">><<outfitEditorList>><</replace>> <</link>> <br><br> <</widget>> <<widget "outfitEditorDefaultFilter">> <<if $outfitEditorPerPage is undefined>> <<set $outfitEditorPerPage to 10>> <</if>> <<set _outfitEditorFilter to { type:{ normal: true, sleep: true, swim: true, school: true, }, location:{ All: true, disabled: true, }, colors:{ notSaved: true, saved: true }, outfitIndex:[], }>> <<for $_label, $_value range $wardrobes>> <<if $_value.unlocked>> <<set _outfitEditorFilter.location[$_label] to true>> <</if>> <</for>> <<set _outfitEditorFilter.outfitIndex to []>> <<run $outfit.forEach((item, index) => {T.outfitEditorFilter.outfitIndex.push(index);})>> <</widget>> <<widget "outfitEditorUpdateFilter">> <<set _outfitEditorFilter.outfitIndex to []>> <<run $outfit.forEach((item, index) => { if(T.outfitEditorFilter.type[item.type[0]]){ if((T.outfitEditorFilter.location.All && item.type[0].location === undefined) || T.outfitEditorFilter.location[item.type[0].location]){ if((!item.colors && T.outfitEditorFilter.colors.notSaved) || (item.colors && T.outfitEditorFilter.colors.saved)){ T.outfitEditorFilter.outfitIndex.push(index); } } } })>> <<outfitEditorPageSetup>> <</widget>> <<widget "outfitEditorPageSetup">> <<set _outfitEditorPages to { page:1, perPage:$outfitEditorPerPage }>> <<set _outfitEditorPages.maxPages to Math.ceil(_outfitEditorFilter.outfitIndex.length / _outfitEditorPages.perPage)>> <</widget>> <<widget "outfitEditorList">> <<outfitEditorPageControls>> <div id="outfitEditorList"> <<set $_start to (_outfitEditorPages.page - 1) * _outfitEditorPages.perPage>> <<for $_i to $_start; $_i lt $_start + _outfitEditorPages.perPage; $_i++>> <<set _index to _outfitEditorFilter.outfitIndex[$_i]>> <<if !$outfit[_index]>> <<break>> <</if>> <div @id="'outfitItem-' + _index" class="outfitEditorItem"> <<outfitEditorItem _index>> </div> <</for>> </div> <<outfitEditorPageControls>> <</widget>> <<widget "outfitEditorPageControls">> <<if _outfitEditorPages.page gt 1>> <<link "Previous">> <<set _outfitEditorPages.page-->> <<replace "#outfitEditor">><<outfitEditorList>><</replace>> <</link>> | <<else>> Previous | <</if>> Page <<print _outfitEditorPages.page>>/<<print _outfitEditorPages.maxPages>> | <<if _outfitEditorPages.page lt _outfitEditorPages.maxPages and _outfitEditorPages.maxPages gt 1>> <<link "Next">> <<set _outfitEditorPages.page++>> <<replace "#outfitEditor">><<outfitEditorList>><</replace>> <</link>> <<else>> Next <</if>> <</widget>> <<widget "outfitEditorItem">> <<capture _args[0]>> <<set _subState[_args[0]] to "">> <div class="name"> <<set $_name to "$outfit["+_args[0]+"].name">> <label>Name: <<textbox $_name $outfit[_args[0]].name>></label> <!--Runs too many times for some reason, needs to be improved--> <<run $(() => { $('.outfitEditorItem .name .macro-textbox').on('input change', e => { let index = e.target.name.replace(/\D/g,''); V.outfit[index].name = V.outfit[index].name.replace(/[^a-zA-Z\u4e00-\u9fa5 0-9.!()]+/g,"").substr(0,30); }).trigger('input change') })>> </div> <div> <<set $_type to "$outfit["+_args[0]+"].type[0]">> <label> Type: <<listbox $_type autoselect>> <<option "Normal" "normal">> <<option "Sleep" "sleep">> <<option "Swim" "swim">> <<option "School" "school">> <</listbox>> </label> </div> <div> <<set $_location to "$outfit["+_args[0]+"].location">> <<set $_locations to {}>> <<for $_label, $_value range $wardrobes>> <<if $_value.unlocked>> <<set _warning to "">> <<if (!$multipleWardrobes or ($multipleWardrobes is "isolated" and !$_value.isolated)) and $_label isnot "wardrobe">> <<set _warning to " (No access)">> <</if>> <<set $_locations[$_value.name + _warning] to $_label>> <</if>> <</for>> <label> Location: <<listbox $_location autoselect>> <<option "All" undefined>> <<option "Disabled" "disabled">> <<optionsfrom $_locations>> <</listbox>> </label> </div> <div> Items: <<link "View">> <<set _subId to "#outfitItemSub-" + _args[0]>> <<if _subState[_args[0]] is "itemEdit">> <<set _subState[_args[0]] to "">> <<replace _subId>><</replace>> <<else>> <<set _subState[_args[0]] to "itemEdit">> <<replace _subId>><<outfitEditorItemClothes _args[0]>><</replace>> <</if>> <</link>> </div> <div> Colours: <<print $outfit[_args[0]].colors ? "Enabled" : "Disabled">> | <<if $outfit[_args[0]].colors>> <<link "Disable">> <<set $outfit[_args[0]].colors to false>> <<set _id to "#outfitItem-" + _args[0]>> <<replace `_id`>><<outfitEditorItem _args[0]>><</replace>> <</link>> | <<link "Edit">> <<set _subId to "#outfitItemSub-" + _args[0]>> <<if _subState[_args[0]] is "colourView">> <<set _subState[_args[0]] to "">> <<replace _subId>><</replace>> <<else>> <<set _subState[_args[0]] to "colourView">> <<replace _subId>><<outfitEditorItemColour _args[0]>><</replace>> <</if>> <</link>> <<else>> <<link "Enable">> <<set $outfit[_args[0]].colors to {}>> <<set _outfitIndex to _args[0]>> <<for _label, _value range setup.clothes>> <<set _item to setup.clothes[_label].filter((item) => item.name === $outfit[_outfitIndex][_label])[0]>> <<set _colors to [0,0]>> <<if _item>> <<if _item.colour_options.length gt 0>> <<set _colors[0] to _item.colour_options[0]>> <</if>> <<if _item.accessory_colour_options.length gt 0>> <<set _colors[1] to _item.accessory_colour_options[0]>> <</if>> <</if>> <<set $outfit[_args[0]].colors[_label] to clone(_colors)>> <</for>> <<set _id to "#outfitItem-" + _args[0]>> <<replace `_id`>><<outfitEditorItem _args[0]>><</replace>> <</link>> <</if>> </div> <<if $savedHairStyles>> <div> <<set _savedHairStylesKeys to Object.keys($savedHairStyles)>> Hair Style: <<set $_hairStyle to "$outfit["+_args[0]+"].hairStyle">> <<listbox $_hairStyle autoselect>> <<option "Not set" undefined>> <<optionsfrom _savedHairStylesKeys>> <</listbox>> </div> <<else>> <div> Hair Style: No sets saved (Check mirror) </div> <</if>> <div @id="'outfitItemSub-' + _args[0]"></div> <</capture>> <</widget>> <<widget "outfitEditorItemClothes">> <<capture _args[0]>> <<for $_label, $_value range setup.clothes>> <<set $_itemName to $outfit[_args[0]][$_label]>> <<if $_itemName and !setup.clothingLayer.over.includes($_label)>> <label class="outfitEditorItemClothes"> <<set $_options to []>> <<for $_value2 range $_value>> <<run $_options.push($_value2.name)>> <</for>> <<print $_label>> - <<set $_var to "$outfit[" + _args[0] + "]['" + $_label + "']">> <<listbox `$_var` autoselect>> <<optionsfrom $_options>> <</listbox>> <!--Runs too many times for some reason, needs to be improved--> <<run $(() => { $('.outfitEditorItemClothes select').on('input change', e => { let outfitIndex = e.target.name.replace(/\D/g,''); if(!V.outfit[outfitIndex].colors) return; let target = e.target.name.match(/[a-zA-Z]+/g); let slot = target[2] + (target[3] !== undefined ? '_' + target[3] : ''); let item = setup.clothes[slot].filter((item) => item.name === V.outfit[outfitIndex][slot])[0]; if(item !== undefined){ if(item.colour_options.length > 0 && V.outfit[outfitIndex].colors[slot][0] === 0){ V.outfit[outfitIndex].colors[slot][0] = item.colour_options[0]; } else if(item.colour_options.length === 0 && V.outfit[outfitIndex].colors[slot][0] !== 0) { V.outfit[outfitIndex].colors[slot][0] = 0; } if(item.accessory_colour_options.length > 0 && V.outfit[outfitIndex].colors[slot][1] === 0){ V.outfit[outfitIndex].colors[slot][0] = item.accessory_colour_options[0]; } else if(item.accessory_colour_options.length === 0 && V.outfit[outfitIndex].colors[slot][1] !== 0) { V.outfit[outfitIndex].colors[slot][1] = 0; } } }).trigger('input change') })>> </label> <br> <</if>> <</for>> <</capture>> <</widget>> <<widget "outfitEditorItemColour">> <<capture _args[0]>> <<for $_label, $_value range setup.clothes>> <<set _colourLabel to $_label>> <<set _colourOutfit to _args[0]>> <<set $_item to setup.clothes[$_label].filter((item) => item.name === $outfit[_colourOutfit][_colourLabel])[0]>> <<if $_item>> <<if $_item.colour_options.length gt 0 or $_item.accessory_colour_options.length gt 0>> <<print $_label>> - <<print $_item.name>>: <<if $_item.colour_options.length gt 0>> <<set $_colour_options to "$outfit["+_args[0]+"].colors['"+$_label+"'][0]">> <<listbox `$_colour_options` autoselect>> <<optionsfrom $_item.colour_options>> <<option "random">> <</listbox>> <</if>> <<if $_item.accessory_colour_options.length gt 0>> <<set $_accessory_colour_options to "$outfit["+_args[0]+"].colors['"+$_label+"'][1]">> <<listbox `$_accessory_colour_options` autoselect>> <<optionsfrom $_item.accessory_colour_options>> <<option "random">> <</listbox>> <</if>> <br> <</if>> <</if>> <</for>> <</capture>> <</widget>>
<<widget "dancestripeffects">> <<outfitChecks>> <<switch $danceaction>> <<case "stripOverOutfit">> <<if $worn.upper.name isnot "naked" and $worn.lower.name isnot "naked">> You gracefully remove your $worn.over_upper.name, exposing your <<outfit>>. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 3>><<set $audienceexcitement += 3>><<set $audiencemod += 1>><<arousal 100>><<overupperstrip>><<exhibitionism1>> <<elseif $worn.upper.name isnot "naked">> <<if !$worn.under_lower.type.includes("naked")>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_lower.name. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<overupperstrip>><<exhibitionism3>> <<else>> You gracefully remove your $worn.over_upper.name, exposing your <<genitals 1>>. <<if $worn.upper.type.includes("naked")>> You shiver with excitement, your body laid totally bare. <<else>> Your <<allTops>> makes your naked lower half feel particularly conspicuous. <</if>> <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<overupperstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<elseif $worn.lower.name isnot "naked">> <<if !$worn.under_upper.type.includes("naked")>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_upper.name. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<overupperstrip>><<exhibitionism3>> <<else>> <<if $player.breastsize gte 3>> You gracefully remove your $worn.over_upper.name, exposing your $worn.lower.name and <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<overupperstrip>><<exhibitionism4>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if $player.gender is "m">> You gracefully remove your $worn.over_upper.name, exposing your $worn.lower.name and <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.over_upper.name, exposing your $worn.lower.name and <<breasts>>. You feel your nipples harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<overupperstrip>><<exhibitionism4>> <<else>> You gracefully remove your $worn.over_upper.name, exposing your $worn.lower.name and <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<overupperstrip>><<exhibitionism3>> <</if>> <</if>> <<else>> <<if !$worn.under_upper.type.includes("naked") and !$worn.under_lower.type.includes("naked")>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_upper.name and $worn.under_lower.name. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<overupperstrip>><<exhibitionism3>> <<elseif !$worn.under_lower.type.includes("naked")>> <<if $player.breastsize gte 3>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_lower.name and <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<overupperstrip>><<exhibitionism4>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if $player.gender is "m">> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_lower.name and <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_lower.name and <<breasts>>. You feel your nipples harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<overupperstrip>><<exhibitionism4>> <<else>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_lower.name and <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<overupperstrip>><<exhibitionism3>> <</if>> <<elseif !$worn.under_upper.type.includes("naked")>> You gracefully remove your $worn.over_upper.name, exposing your <<genitals 1>>. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<overupperstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <<else>> You gracefully remove your $worn.over_upper.name, exposing your <<genitals 1>>. You shiver with excitement, your body laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<overupperstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <</if>> <<set $danceaction to 0>> <<case "stripOverUpper">> <<if $worn.upper.name isnot "naked">> You gracefully remove your $worn.over_upper.name, exposing your $worn.upper.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 3>><<set $audienceexcitement += 3>><<set $audiencemod += 1>><<arousal 100>><<overupperstrip>><<exhibitionism1>> <<elseif !$worn.under_upper.type.includes("naked")>> You gracefully remove your $worn.over_upper.name, exposing your $worn.under_upper.name. Only one garment protects your chest from the hungry eyes surrounding you. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 100>><<overupperstrip>><<exhibitionism1>> <<else>> <<if $player.breastsize gte 3>> You gracefully remove your $worn.over_upper.name, exposing your <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<overupperstrip>><<exhibitionism4>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if $player.gender is "m">> You gracefully remove your $worn.over_upper.name, exposing your <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.over_upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<overupperstrip>><<exhibitionism4>> <<else>> You gracefully remove your $worn.over_upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 300>><<overupperstrip>><<exhibitionism1>> <</if>> <</if>> <<set $danceaction to 0>> <<case "stripOverLower">> <<if $worn.lower.name isnot "naked">> You gracefully remove your $worn.over_lower.name, exposing your $worn.lower.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 3>><<set $audienceexcitement += 3>><<set $audiencemod += 1>><<arousal 100>><<overlowerstrip>><<exhibitionism1>> <<elseif !$worn.under_lower.type.includes("naked")>> You gracefully remove your $worn.over_lower.name, exposing your $worn.under_lower.name. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<overlowerstrip>><<exhibitionism3>> <<else>> You gracefully remove your $worn.over_lower.name, exposing your <<genitals 1>>. <<if $worn.upper.type.includes("naked") or $worn.over_upper.type.includes("naked")>> You shiver with excitement, your body laid totally bare. <<else>> Your <<allTops>> makes your naked lower half feel particularly conspicuous. <</if>> <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<overlowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<set $danceaction to 0>> <<case "stripOutfit">> <<if !$worn.under_upper.type.includes("naked") and !$worn.under_lower.type.includes("naked")>> <<if $player.breastsize gte 3 or $player.gender_appearance isnot "m">> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Being seen in your underwear excites you. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 500>><<exhibitionism4>> <<else>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Being seen in your underwear excites you. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<exhibitionism3>> <</if>> <<elseif !$worn.under_lower.type.includes("naked")>> <<if $player.breastsize gte 3>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<exhibitionism4>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if $player.gender is "m">> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. You feel your <<nipples>> harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<exhibitionism4>> <<else>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<exhibitionism3>> <</if>> <<else>> You gracefully remove your $worn.upper.name, exposing your nude form. You shiver with excitement, your <<genitals 1>> laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<upperstrip>><<lowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<set $danceaction to 0>> <<case "stripUpper">> <<if !$worn.under_upper.type.includes("naked")>> <<if $player.breastsize gte 3 or $player.gender_appearance isnot "m">> You gracefully remove your $worn.upper.name, exposing your $worn.under_upper.name. Only one garment protects your chest from the hungry eyes surrounding you. <<set $audiencearousal += 4>><<set $audienceexcitement += 4>><<set $audiencemod += 2>><<arousal 200>><<upperstrip>><<exhibitionism3>> <<else>> You gracefully remove your $worn.upper.name, exposing your $worn.under_upper.name. Only one garment protects your chest from the hungry eyes surrounding you. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 100>><<upperstrip>><<exhibitionism1>> <</if>> <<else>> <<if $player.breastsize gte 3>> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<upperstrip>><<exhibitionism4>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if $player.gender is "m">> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<upperstrip>><<exhibitionism4>> <<else>> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 300>><<upperstrip>><<exhibitionism1>> <</if>> <</if>> <<set $danceaction to 0>> <<case "stripLower">> <<if $worn.over_lower.name isnot "naked">> You gracefully remove your $worn.lower.name from below your $worn.over_lower.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 3>><<set $audienceexcitement += 3>><<set $audiencemod += 1>><<arousal 100>><<lowerstrip>><<exhibitionism1>> <<elseif !$worn.under_lower.type.includes("naked")>> You gracefully remove your $worn.lower.name, exposing your $worn.under_lower.name. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<lowerstrip>><<exhibitionism3>> <<else>> You gracefully remove your $worn.lower.name, exposing your <<genitals 1>>. <<if $worn.upper.type.includes("naked") or $worn.over_upper.type.includes("naked")>> You shiver with excitement, your body laid totally bare. <<else>> Your <<allTops>> makes your naked lower half feel particularly conspicuous. <</if>> <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<lowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<set $danceaction to 0>> <<case "stripUnderOutfit">> You gracefully remove your $worn.under_upper.name, exposing your <<genitals 1>>. You shiver with excitement, now laid totally bare. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <<set $danceaction to 0>> <<case "stripUnderUpper">> <<if (!$worn.upper.type.includes("naked") and $worn.upper.open is 1) and $worn.over_upper.type.includes("naked")>> You gracefully remove your $worn.under_upper.name from beneath your $worn.upper.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 3>><<set $audienceexcitement += 3>><<set $audiencemod += 1>><<arousal 100>><<underupperstrip>><<exhibitionism1>> <<elseif $player.breastsize gte 3>> You gracefully remove your $worn.under_upper.name, <<if $worn.under_upper.type.includes("naked")>>despite them not concealing your <<breasts>> at all.<<else>>exposing your <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive.<</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism4>> <<elseif $player.gender_appearance isnot "m" and $worn.under_lower.gender isnot "m">> <<set $danceaction to 0>> <<if $player.gender is "m">> You gracefully remove your $worn.under_upper.name, <<if $worn.under_upper.type.includes("naked")>>despite them not concealing your <<breasts>> at all, you feel more exposed.<<else>>exposing your <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd.<</if>> <<else>> You gracefully remove your $worn.under_upper.name, <<if $worn.under_upper.type.includes("naked")>>despite them not concealing your <<breasts>> at all, you feel more exposed.<<else>>exposing your <<breasts>>. You feel your nipples harden in response to being revealed.<</if>> <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism4>> <<else>> You gracefully remove your $worn.under_upper.name, <<if $worn.under_upper.type.includes("naked")>>despite them not concealing your <<breasts>> at all, you feel more exposed.<<else>>exposing your <<breasts>>. You feel your nipples harden in response to being revealed.<</if>> <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 300>><<underupperstrip>><<exhibitionism1>> <</if>> <<set $danceaction to 0>> <<case "stripUnderLower">> <<if $worn.under_lower.type.includes("naked")>> <<if (!$worn.lower.type.includes("naked") or !$worn.over_lower.type.includes("naked"))>> You gracefully remove your $worn.under_lower.name from beneath your <<allBottoms>>. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<else>> You gracefully remove your $worn.under_lower.name, despite having your <<genitals 1>> exposed already. <</if>> <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<underlowerstrip>><<exhibitionism3>> <<elseif !$worn.lower.type.includes("naked") or !$worn.over_lower.type.includes("naked")>> You gracefully remove your $worn.under_lower.name from beneath your <<allBottoms>>. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<underlowerstrip>><<exhibitionism3>> <<else>> You gracefully remove your $worn.under_lower.name, exposing your <<genitals 1>>. You shiver with excitement, your body laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<underlowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<set $danceaction to 0>> <</switch>> <!--Old clothing actions below, to be removed at a later date--> <<if $danceaction is "outfitstripbreasts">><<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<exhibitionism4>> <</if>> <<if $danceaction is "outfitstripchest">><<set $danceaction to 0>> <<if $player.gender is "m">> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. You feel your <<nipples>> harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<exhibitionism4>> <</if>> <<if $danceaction is "outfitstripunderbreasts">><<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Being seen in your underwear excites you. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 500>><<exhibitionism4>> <</if>> <<if $danceaction is "outfitstripunderchest">><<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Being seen in your underwear excites you. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<exhibitionism3>> <</if>> <<if $danceaction is "outfitstripunder">> <<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your <<upperstrip>><<lowerstrip>><<underoutfit>>. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<exhibitionism3>> <</if>> <<if $danceaction is "outfitstripnude">> <<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your nude form. You shiver with excitement, your <<genitals 1>> laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<upperstrip>><<lowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<if $danceaction is "upperstripbreasts">> <<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<upperstrip>><<exhibitionism4>> <</if>> <<if $danceaction is "upperstripunderbreasts">> <<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your $worn.under_upper.name. Only one garment protects your chest from the hungry eyes surrounding you. <<set $audiencearousal += 4>><<set $audienceexcitement += 4>><<set $audiencemod += 2>><<arousal 200>><<upperstrip>><<exhibitionism2>> <</if>> <<if $danceaction is "upperstripunderchest">> <<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your $worn.under_upper.name. Only one garment protects your chest from the hungry eyes surrounding you. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 100>><<upperstrip>><<exhibitionism1>> <</if>> <<if $danceaction is "upperstripfchest">> <<set $danceaction to 0>> <<if $player.gender is "m">> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<upperstrip>><<exhibitionism4>> <</if>> <<if $danceaction is "upperstripmchest">> <<set $danceaction to 0>> You gracefully remove your $worn.upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 300>><<upperstrip>><<exhibitionism1>> <</if>> <<if $danceaction is "underoutfitstripbreasts">> <<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. The exhibition makes you feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism4>> <</if>> <<if $danceaction is "underoutfitstripchest">> <<set $danceaction to 0>> <<if $player.gender is "m">> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. You feel your buds harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism4>> <</if>> <<if $danceaction is "underoutfitstripunder">> <<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<underupperstrip>><<exhibitionism3>> <</if>> <<if $danceaction is "underoutfitstripnude">> <<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name, exposing your nude form. You shiver with excitement, your <<genitals 1>> laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<underupperstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<if $danceaction is "underoutfitstriptop">> <<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name, exposing your <<genitals 1>>. You shiver with excitement, now laid totally bare. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<if $danceaction is "underupperstripbreasts">> <<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. The exhibition of your breasts makes them feel raw and sensitive. <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism4>> <</if>> <<if $danceaction is "underupperstripfchest">> <<set $danceaction to 0>> <<if $player.gender is "m">> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. Your feminine countenance makes your revealed chest feel especially lewd. <<else>> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <</if>> <<set $audiencearousal += 8>><<set $audienceexcitement += 8>><<set $audiencemod += 3>><<arousal 300>><<underupperstrip>><<exhibitionism4>> <</if>> <<if $danceaction is "underupperstripmchest">> <<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name, exposing your <<breasts>>. You feel your nipples harden in response to being revealed. <<set $audiencearousal += 2>><<set $audienceexcitement += 2>><<set $audiencemod += 1>><<arousal 300>><<underupperstrip>><<exhibitionism1>> <</if>> <<if $danceaction is "lowerstripunder">><<set $danceaction to 0>> You gracefully remove your $worn.lower.name, exposing your $worn.under_lower.name. Being seen in your underwear excites you. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<lowerstrip>><<exhibitionism3>> <</if>> <<if $danceaction is "lowerstripnude">><<set $danceaction to 0>> You gracefully remove your $worn.lower.name, exposing your <<genitals 1>>. <<if $worn.upper.type.includes("naked")>> You shiver with excitement, your body laid totally bare. <<else>> Your $worn.upper.name makes your naked lower half feel particularly conspicuous. <</if>> <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<lowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<if $danceaction is "underupperstripopen">><<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name from beneath your $worn.upper.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 3>><<set $audienceexcitement += 3>><<set $audiencemod += 1>><<arousal 100>><<underupperstrip>><<exhibitionism1>> <</if>> <<if $danceaction is "underoutfitstripopen">><<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name from beneath your $worn.upper.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 9>><<set $audienceexcitement += 9>><<set $audiencemod += 3>><<arousal 500>><<underupperstrip>><<exhibitionism3>> <</if>> <<if $danceaction is "understripskirt">><<set $danceaction to 0>> You gracefully remove your $worn.under_lower.name from beneath your $worn.lower.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 6>><<set $audienceexcitement += 6>><<set $audiencemod += 2>><<arousal 300>><<underlowerstrip>><<exhibitionism3>> <</if>> <<if $danceaction is "underoutfitstripskirt">><<set $danceaction to 0>> You gracefully remove your $worn.under_upper.name from beneath your $worn.upper.name. You're careful not to give too much away, but such a lewd gesture thrills you nonetheless. <<set $audiencearousal += 9>><<set $audienceexcitement += 9>><<set $audiencemod += 3>><<arousal 500>><<underlowerstrip>><<exhibitionism3>> <</if>> <<if $danceaction is "understripnude">><<set $danceaction to 0>> You gracefully remove your $worn.under_lower.name, exposing your <<genitals 1>>. You shiver with excitement, your body laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<underlowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <<if $danceaction is "understripclothed">><<set $danceaction to 0>> You gracefully remove your $worn.under_lower.name, exposing your <<genitals 1>>. You shiver with excitement, your body laid totally bare. <<set $audiencearousal += 10>><<set $audienceexcitement += 10>><<set $audiencemod += 4>><<arousal 300>><<underlowerstrip>><<exhibitionism5>> <<dance_crossdress_reveal>> <</if>> <</widget>> <<widget "danceStripActionObject">> <<set _danceExhibition to { "overOutfit":null, "over_upper":null, "over_lower":null, "middleOutfit":null, "upper":null, "lower":null, "underOutfit":null, "under_upper":null, "under_lower":null, }>> <<set _exhibitionObject to { 1:[1,0], 2:[2,15], 3:[3,35], 4:[4,55], 5:[5,75] }>> <<if _overOutfit>> <<if $worn.upper.name isnot "naked" and $worn.lower.name isnot "naked">> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[1])>> <<elseif $worn.upper.name isnot "naked">> <<if !$worn.under_lower.type.includes("naked")>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[3])>> <<else>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[5])>> <</if>> <<elseif $worn.lower.name isnot "naked">> <<if !$worn.under_upper.type.includes("naked")>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[3])>> <<else>> <<if $player.breastsize gte 3>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[4])>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[3])>> <</if>> <</if>> <<else>> <<if !$worn.under_upper.type.includes("naked") and !$worn.under_lower.type.includes("naked")>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[3])>> <<elseif $worn.under_lower.name isnot "naked">> <<if $player.breastsize gte 3>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[4])>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[3])>> <</if>> <<elseif !$worn.under_upper.type.includes("naked")>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[5])>> <<else>> <<set _danceExhibition.overOutfit to clone(_exhibitionObject[5])>> <</if>> <</if>> <<elseif _overOutfit is false>> <<if !$worn.over_upper.type.includes("naked")>> <<if $worn.upper.name isnot "naked">> <<set _danceExhibition.over_upper to clone(_exhibitionObject[1])>> <<elseif !$worn.under_upper.type.includes("naked")>> <<set _danceExhibition.over_upper to clone(_exhibitionObject[3])>> <<else>> <<if $player.breastsize gte 3>> <<set _danceExhibition.over_upper to clone(_exhibitionObject[4])>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<set _danceExhibition.over_upper to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.over_upper to clone(_exhibitionObject[1])>> <</if>> <</if>> <</if>> <<if !$worn.over_lower.type.includes("naked")>> <<if $worn.lower.name isnot "naked">> <<set _danceExhibition.over_lower to clone(_exhibitionObject[1])>> <<elseif !$worn.under_lower.type.includes("naked")>> <<set _danceExhibition.over_lower to clone(_exhibitionObject[3])>> <<else>> <<set _danceExhibition.over_lower to clone(_exhibitionObject[5])>> <</if>> <</if>> <</if>> <<if _middleOutfit and $worn.over_upper.type.includes("naked") and $worn.over_lower.type.includes("naked")>> <<if !$worn.under_upper.type.includes("naked") and !$worn.under_lower.type.includes("naked")>> <<if $player.breastsize gte 3 or $player.gender_appearance isnot "m">> <<set _danceExhibition.middleOutfit to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.middleOutfit to clone(_exhibitionObject[3])>> <</if>> <<elseif !$worn.under_lower.type.includes("naked")>> <<if $player.breastsize gte 3>> <<set _danceExhibition.middleOutfit to clone(_exhibitionObject[4])>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<set _danceExhibition.middleOutfit to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.middleOutfit to clone(_exhibitionObject[4])>> <</if>> <<else>> <<set _danceExhibition.middleOutfit to clone(_exhibitionObject[5])>> <</if>> <<elseif _middleOutfit is false>> <<if !$worn.upper.type.includes("naked") and $worn.over_upper.type.includes("naked")>> <<if !$worn.under_upper.type.includes("naked")>> <<if $player.breastsize gte 3 or $player.gender_appearance isnot "m">> <<set _danceExhibition.upper to clone(_exhibitionObject[3])>> <<else>> <<set _danceExhibition.upper to clone(_exhibitionObject[1])>> <</if>> <<else>> <<if $player.breastsize gte 3>> <<set _danceExhibition.upper to clone(_exhibitionObject[4])>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<set _danceExhibition.upper to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.upper to clone(_exhibitionObject[1])>> <</if>> <</if>> <</if>> <<if !$worn.lower.type.includes("naked") and ($worn.over_lower.type.includes("naked") or setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt is 1)>> <<if $worn.over_lower.name isnot "naked">> <<set _danceExhibition.lower to clone(_exhibitionObject[3])>> <<elseif !$worn.under_lower.type.includes("naked")>> <<set _danceExhibition.lower to clone(_exhibitionObject[3])>> <<else>> <<set _danceExhibition.lower to clone(_exhibitionObject[5])>> <</if>> <</if>> <</if>> <<if _underOutfit and $worn.over_upper.type.includes("naked") and $worn.over_lower.type.includes("naked") and $worn.upper.type.includes("naked") and $worn.lower.type.includes("naked")>> <<set _danceExhibition.underOutfit to clone(_exhibitionObject[5])>> <<elseif _underOutfit is false>> <<if $worn.under_upper.name isnot "naked" and $worn.over_upper.type.includes("naked")>> <<if (!$worn.upper.type.includes("naked") and $worn.upper.open is 1) and $worn.over_upper.type.includes("naked")>> <<set _danceExhibition.under_upper to clone(_exhibitionObject[1])>> <<elseif $player.breastsize gte 3>> <<set _danceExhibition.under_upper to clone(_exhibitionObject[4])>> <<elseif $player.gender_appearance isnot "m" and $worn.under_lower.gender isnot "m">> <<set _danceExhibition.under_upper to clone(_exhibitionObject[4])>> <<else>> <<set _danceExhibition.under_upper to clone(_exhibitionObject[1])>> <</if>> <</if>> <<if $worn.under_lower.name isnot "naked" and ((setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt is 1 or $worn.over_lower.type.includes("naked")) and (setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")))>> <<if $worn.under_lower.type.includes("naked")>> <<set _danceExhibition.under_lower to clone(_exhibitionObject[3])>> <<elseif !$worn.lower.type.includes("naked") or !$worn.over_lower.type.includes("naked")>> <<set _danceExhibition.under_lower to clone(_exhibitionObject[3])>> <<else>> <<set _danceExhibition.under_lower to clone(_exhibitionObject[5])>> <</if>> <</if>> <</if>> <</widget>> <<widget "dancestripactions">> <<outfitChecks>> <<danceStripActionObject>> <br><br> <<if _danceExhibition isnot undefined>> <<if _danceExhibition.overOutfit isnot null>> <<if $exhibitionism gte _danceExhibition.overOutfit[1]>> <label> <span class="meek">Strip $worn.over_upper.name</span> <<print '<<combatexhibitionist'+_danceExhibition.overOutfit[0]+'>>'>> <<radiobutton "$danceaction" "stripOverOutfit">> </label> | <</if>> <</if>> <<if _danceExhibition.over_upper isnot null>> <<if $exhibitionism gte _danceExhibition.over_upper[1]>> <label> <span class="meek">Strip $worn.over_upper.name</span> <<print '<<combatexhibitionist'+_danceExhibition.over_upper[0]+'>>'>> <<radiobutton "$danceaction" "stripOverUpper">> </label> | <</if>> <</if>> <<if _danceExhibition.over_lower isnot null>> <<if $exhibitionism gte _danceExhibition.over_lower[1]>> <label> <span class="meek">Strip $worn.over_lower.name</span> <<print '<<combatexhibitionist'+_danceExhibition.over_lower[0]+'>>'>> <<radiobutton "$danceaction" "stripOverLower">> </label> | <</if>> <</if>> <<if _danceExhibition.middleOutfit isnot null and $worn.upper.cursed isnot 1>> <<if $exhibitionism gte _danceExhibition.middleOutfit[1]>> <label> <span class="meek">Strip $worn.upper.name</span> <<print '<<combatexhibitionist'+_danceExhibition.middleOutfit[0]+'>>'>> <<radiobutton "$danceaction" "stripOutfit">> </label> | <</if>> <</if>> <<if _danceExhibition.upper isnot null and $worn.upper.cursed isnot 1>> <<if $exhibitionism gte _danceExhibition.upper[1]>> <label> <span class="meek">Strip $worn.upper.name</span> <<print '<<combatexhibitionist'+_danceExhibition.upper[0]+'>>'>> <<radiobutton "$danceaction" "stripUpper">> </label> | <</if>> <</if>> <<if _danceExhibition.lower isnot null and $worn.lower.cursed isnot 1>> <<if $exhibitionism gte _danceExhibition.lower[1]>> <label> <span class="meek">Strip $worn.lower.name</span> <<print '<<combatexhibitionist'+_danceExhibition.lower[0]+'>>'>> <<radiobutton "$danceaction" "stripLower">> </label> | <</if>> <</if>> <<if _danceExhibition.underOutfit isnot null>> <<if $exhibitionism gte _danceExhibition.underOutfit[1]>> <label> <span class="meek">Strip $worn.under_upper.name</span> <<print '<<combatexhibitionist'+_danceExhibition.underOutfit[0]+'>>'>> <<radiobutton "$danceaction" "stripUnderOutfit">> </label> | <</if>> <</if>> <<if _danceExhibition.under_upper isnot null>> <<if $exhibitionism gte _danceExhibition.under_upper[1]>> <label> <span class="meek">Strip $worn.under_upper.name</span> <<print '<<combatexhibitionist'+_danceExhibition.under_upper[0]+'>>'>> <<radiobutton "$danceaction" "stripUnderUpper">> </label> | <</if>> <</if>> <<if _danceExhibition.under_lower isnot null>> <<if $exhibitionism gte _danceExhibition.under_lower[1]>> <label> <span class="meek">Strip $worn.under_lower.name</span> <<print '<<combatexhibitionist'+_danceExhibition.under_lower[0]+'>>'>> <<radiobutton "$danceaction" "stripUnderLower">> </label> | <</if>> <</if>> <</if>> <<if $debug is 1>> <br><br> Old Clothing Controls <br><br> <<if _middleOutfit>> <<if !$worn.under_lower.type.includes("naked")>> <<if !$worn.under_upper.type.includes("naked")>> <<if $player.breastsize gte 3 or $player.gender_appearance isnot "m">> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "outfitstripunderbreasts">></label> | <</if>> <<else>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "outfitstripunderchest">></label> | <</if>> <</if>> <<else>> <<if $player.breastsize gte 3>> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "outfitstripbreasts">></label> | <</if>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "outfitstripchest">></label> | <</if>> <<else>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "outfitstripunder">></label> | <</if>> <</if>> <</if>> <<else>> <<if hasSexStat("exhibitionism", 5)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist5>> <<radiobutton "$danceaction" "outfitstripnude">></label> | <</if>> <</if>> <</if>> <<if !$worn.upper.type.includes("naked") and _middleOutfit is false>> <<if !$worn.under_upper.type.includes("naked")>> <<if $player.breastsize gte 3 or $player.gender_appearance isnot "m">> <<if hasSexStat("exhibitionism", 2)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist2>> <<radiobutton "$danceaction" "upperstripunderbreasts">></label> | <</if>> <<else>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist1>> <<radiobutton "$danceaction" "upperstripunderchest">></label> | <</if>> <<else>> <<if $player.breastsize gte 3>> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "upperstripbreasts">></label> | <</if>> <<elseif $player.gender_appearance isnot "m" and $worn.lower.gender isnot "m">> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "upperstripfchest">></label> | <</if>> <<else>> <label><span class="meek">Strip $worn.upper.name</span> <<combatexhibitionist1>> <<radiobutton "$danceaction" "upperstripmchest">></label> | <</if>> <</if>> <</if>> <<if !$worn.lower.type.includes("naked") and _middleOutfit is false>> <<if !$worn.under_lower.type.includes("naked")>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.lower.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "lowerstripunder">></label> | <</if>> <<else>> <<if hasSexStat("exhibitionism", 5)>> <label><span class="meek">Strip $worn.lower.name</span> <<combatexhibitionist5>> <<radiobutton "$danceaction" "lowerstripnude">></label> | <</if>> <</if>> <</if>> <<if _underOutfit>> <<if !$worn.lower.type.includes("naked") and !$worn.upper.type.includes("naked")>> <<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "underoutfitstripskirt">></label> | <</if>> <<elseif $worn.upper.open is 1>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "underoutfitstripopen">></label> | <</if>> <</if>> <<elseif !$worn.lower.type.includes("naked")>> <<if $player.breastsize gte 3>> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "underoutfitstripbreasts">></label> | <</if>> <<elseif $player.gender_appearance isnot "m" and $worn.under_lower.gender isnot "m">> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "underoutfitstripchest">></label> | <</if>> <<else>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "underoutfitstripunder">></label> | <</if>> <</if>> <<else>> <<if hasSexStat("exhibitionism", 5)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist5>> <<radiobutton "$danceaction" "underoutfitstripnude">></label> | <</if>> <</if>> <</if>> <<if !$worn.under_upper.type.includes("naked") and _underOutfit is false>> <<if !$worn.upper.type.includes("naked") and $worn.upper.open is 1>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist1>> <<radiobutton "$danceaction" "underupperstripopen">></label> | <<elseif $player.breastsize gte 3>> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "underupperstripbreasts">></label> | <</if>> <<elseif $player.gender_appearance isnot "m" and $worn.under_lower.gender isnot "m">> <<if hasSexStat("exhibitionism", 4)>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist4>> <<radiobutton "$danceaction" "underupperstripfchest">></label> | <</if>> <<else>> <label><span class="meek">Strip $worn.under_upper.name</span> <<combatexhibitionist1>> <<radiobutton "$danceaction" "underupperstripmchest">></label> | <</if>> <</if>> <<if !$worn.under_lower.type.includes("naked") and _underOutfit is false>> <<if !$worn.lower.type.includes("naked") and setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> <<if hasSexStat("exhibitionism", 3)>> <label><span class="meek">Strip $worn.under_lower.name</span> <<combatexhibitionist3>> <<radiobutton "$danceaction" "understripskirt">></label> | <</if>> <<elseif $worn.lower.type.includes("naked")>> <<if hasSexStat("exhibitionism", 5)>> <label><span class="meek">Strip $worn.under_lower.name</span> <<combatexhibitionist5>> <<radiobutton "$danceaction" "understripnude">></label> | <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "dance_stage_cum">> <<if $dance_stage_cum is undefined>> <<set $dance_stage_cum to 0>> <</if>> <<if _args[0]>> <<set $dance_stage_cum += _args[0]>> <</if>> <</widget>> <<widget "dance_private_init">> <<if $dance_place isnot 0>> <<saveNPC $dance_place chosen_npc>> <<saveNPC 0 zero_npc>> <<clearsinglenpc $dance_place>> <<clearsinglenpc 0>> <<loadNPC 0 chosen_npc>> <<loadNPC $dance_place zero_npc>> <<clearNPC zero_npc>> <<clearNPC chosen_npc>> <</if>> <<set $enemyno to 1>> <<unset $corruptionDancing>> <<set $phase to 0>> <<person1>> <</widget>>
<<widget "img">> <<if !_thermoDisable>> <<thermometer>> <</if>> <div id="imgInv"> <<if $condoms>> <div><<condomsSidebar>></div> <<else>> <div></div> <</if>> <<if $spraymax>> <div><<peppersprays>></div> <</if>> </div> <div id="img"> <<canvasimg "mainCanvas">> </div> <div id="characterTooltip"></div> <</widget>>
<<widget "baseClothingStrings">> <<set _worn = $worn[_args[0]]>> <<set _class to 'anim-idle-2f' + (_worn.colour_sidebar and typeof(_worn.colour) == "string" ? ' clothes-'+_worn.colour.replace(/ /g, '-'):'')>> <<set _classAcc to 'anim-idle-2f ' + (_worn.accessory_colour_sidebar and typeof(_worn.accessory_colour) == "string" ? ' clothes-'+_worn.accessory_colour.replace(/ /g, '-') :'')>> <<set _style to (_worn.colourCustom ? _worn.colourCustom :'')>> <<set _styleAcc to (_worn.accessory_colourCustom ? _worn.accessory_colourCustom :'')>> <</widget>> <<widget "baseClothingImg">> <<if $worn[_args[0]].name isnot "naked">> <<baseClothingStrings _args[0]>> <div @class="'clothes-div layer-'+_args[0]"> <<if $worn[_args[0]].mainImage isnot 0>> <img @class="_class" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'full.png'" @style="_style"> <</if>> <<if $worn[_args[0]].accessory is 1>> <img @class="_classAcc" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'acc.png'" @style="_styleAcc"> <</if>> </div> <<if $worn[_args[0]].back_img is 1>> <div @class="'clothes-div layer-'+_args[0]+'-back'"> <img @class="$worn[_args[0]].back_img_colour is 'secondary' ? _classAcc : _class" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'back.png'" @style="_styleAcc"> </div> <</if>> <</if>> <</widget>> <<widget "neckimg">> <<if $worn.neck.name isnot "naked">> <<if $worn.neck.name is "necktie">> <<baseClothingStrings "neck">> <<if $worn.upper.has_collar is 1>> <<set _tieimg = "full_nocollar">> <<else>> <<set _tieimg = "full">> <</if>> <div @class="'clothes-div layer-neck'"> <img @class="_class" @src="'img/clothes/neck/' + $worn.neck.variable + '/' + _tieimg + '.png'" @style="_style"> <img @class="_classAcc" @src="'img/clothes/neck/' + $worn.neck.variable + '/' + 'acc.png'" @style="_styleAcc"> <<if $worn.neck.leash is 1>> <img @class="_class" @src="'img/clothes/neck/collar/leash.png'"> <</if>> </div> <<else>> <<baseClothingImg "neck">> <</if>> <</if>> <</widget>> <<widget "handsimg">> <<if $worn.hands.name isnot "naked">> <<baseClothingStrings "hands">> <div @class="'clothes-div layer-hands'"> <<if $worn.hands.mainImage isnot 0>> <img @class="_class" @src="'img/clothes/hands/' + $worn.hands.variable + '/' + 'full.png'" @style="_style"> <</if>> <<if $worn.hands.leftImage is 1 and $leftarm isnot "bound" and $leftarm isnot "grappled" and $leftarm isnot "behind">> <<set _leftImage to "left">> <<if _coverLeft is true>> <<run _leftImage += "_cover">> <</if>> <img @class="_class" @src="'img/clothes/hands/' + $worn.hands.variable + '/' + _leftImage + '.png'" @style="_style"> <<if $worn.hands.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/hands/' + $worn.hands.variable + '/' + _leftImage + '_acc.png'" @style="_styleAcc"> <</if>> <</if>> <<if $worn.hands.rightImage is 1 and $rightarm isnot "bound" and $rightarm isnot "grappled" and $rightarm isnot "behind">> <<set _rightImage to "right">> <<if _coverRight is true>> <<run _rightImage += "_cover">> <</if>> <img @class="_class" @src="'img/clothes/hands/' + $worn.hands.variable + '/' + _rightImage + '.png'" @style="_style"> <<if $worn.hands.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/hands/' + $worn.hands.variable + '/' + _rightImage + '_acc.png'" @style="_styleAcc"> <</if>> <</if>> </div> <</if>> <</widget>> <<widget "underupperimg">> <<if $worn.under_upper.name isnot "naked">> <<baseClothingStrings "under_upper">> <<switch $underupperwetstage>> <<case 1>><<set _underUpperWetness to " clothes-damp">> <<case 2>><<set _underUpperWetness to " clothes-wet">> <<case 3>><<set _underUpperWetness to " clothes-drenshed">> <<default>><<set _underUpperWetness to "">> <</switch>> <<if $worn.under_upper.integrity lte (clothingData('under_upper',$worn.under_upper,'integrity_max') / 10) * 2>> <<set _imgName to "tattered">> <<elseif $worn.under_upper.integrity lte (clothingData('under_upper',$worn.under_upper,'integrity_max') / 10) * 5>> <<set _imgName to "torn">> <<elseif $worn.under_upper.integrity lte (clothingData('under_upper',$worn.under_upper,'integrity_max') / 10) * 9>> <<set _imgName to "frayed">> <<else>> <<set _imgName to "full">> <</if>> <div @class="'clothes-div layer-under_upper' + _underUpperWetness"> <<if $worn.under_upper.mainImage isnot 0>> <img @class="_class" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + _imgName + '.png'" @style="_style"> <</if>> <<if setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].breast_img is 1>> <img @class="_class" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + (Math.min(_breastSize, 5)) + '.png'" @style="_style"> <</if>> <<if $worn.under_upper.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + 'acc' + ($worn.under_upper.accessory_integrity_img ? '_' + _imgName : '') + '.png'" @style="_styleAcc"> <</if>> <<if $worn.under_upper.breast_acc_img is 1>> <img @class="_classAcc" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + (Math.min(_breastSize, 5)) + '_acc.png'" @style="_styleAcc"> <</if>> </div> <<set _sleeveClass to { "": _class, "primary": _class, "no": "", "secondary": _classAcc }[$worn.under_upper.sleeve_colour||""]>> <<if _coverRight isnot undefined and $worn.under_upper.sleeve_img is 1>> <div @class="'clothes-div layer-rightarmunderclothes' + _underUpperWetness"> <<if _coverRight is true>> <img @class="_sleeveClass" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + 'right_cover.png'" @style="_style"> <<else>> <img @class="_sleeveClass" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + 'right.png'" @style="_style"> <</if>> </div> <</if>> <<if _coverLeft isnot undefined and $worn.under_upper.sleeve_img is 1>> <div @class="'clothes-div layer-leftarmunderclothes' + _underUpperWetness"> <<if _coverLeft is true>> <img @class="_sleeveClass" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + 'left_cover.png'" @style="_style"> <<else>> <img @class="_sleeveClass" @src="'img/clothes/under_upper/' + $worn.under_upper.variable + '/' + 'left.png'" @style="_style"> <</if>> </div> <</if>> <</if>> <</widget>> <<widget "underlowerimg">> <<if $worn.under_lower.name isnot "naked">> <<baseClothingStrings "under_lower">> <<switch $underlowerwetstage>> <<case 1>><<set _underlowerWetness to " clothes-damp">> <<case 2>><<set _underlowerWetness to " clothes-wet">> <<case 3>><<set _underlowerWetness to " clothes-drenshed">> <<default>><<set _underlowerWetness to "">> <</switch>> <<if $worn.under_lower.integrity lte (clothingData('under_lower',$worn.under_lower,'integrity_max') / 10) * 2>> <<set _imgName to "tattered">> <<elseif $worn.under_lower.integrity lte (clothingData('under_lower',$worn.under_lower,'integrity_max') / 10) * 5>> <<set _imgName to "torn">> <<elseif $worn.under_lower.integrity lte (clothingData('under_lower',$worn.under_lower,'integrity_max') / 10) * 9>> <<set _imgName to "frayed">> <<else>> <<set _imgName to "full">> <</if>> <<if $worn.under_lower.mainImage isnot 0 and $worn.under_lower.high_img is 1>> <div @class="'clothes-div layer-under_lower-high' + _underlowerWetness"> <img @class="_class" @src="'img/clothes/under_lower/' + $worn.under_lower.variable + '/' + _imgName + '.png'" @style="_style"> </div> <</if>> <div @class="'clothes-div layer-under_lower' + _underlowerWetness"> <<if $worn.under_lower.mainImage isnot 0 and $worn.under_lower.high_img isnot 1>> <img @class="_class" @src="'img/clothes/under_lower/' + $worn.under_lower.variable + '/' + _imgName + '.png'" @style="_style"> <</if>> <<if $worn.under_lower.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/under_lower/' + $worn.under_lower.variable + '/' + 'acc.png'" @style="_styleAcc"> <</if>> </div> <<if $worn.under_lower.penis_img is 1 and $player.penisExist>> <div @class="'clothes-div layer-under_lower-top' + _underlowerWetness"> <img @class="_class" @src="'img/clothes/under_lower/' + $worn.under_lower.variable + '/' + 'penis.png'" @style="_style"> <<if $worn.under_lower.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/under_lower/' + $worn.under_lower.variable + '/' + 'acc_penis.png'" @style="_styleAcc"> <</if>> </div> <</if>> <</if>> <</widget>> <<widget "lowerimg">> <<if $worn.lower.name isnot "naked">> <<baseClothingStrings "lower">> <<switch $lowerwetstage>> <<case 1>><<set _lowerWetness to " clothes-damp">> <<case 2>><<set _lowerWetness to " clothes-wet">> <<case 3>><<set _lowerWetness to " clothes-drenshed">> <<default>><<set _lowerWetness to "">> <</switch>> <<if $worn.lower.integrity lte (clothingData('lower',$worn.lower,'integrity_max') / 10) * 2>> <<set _imgName to "tattered">> <<elseif $worn.lower.integrity lte (clothingData('lower',$worn.lower,'integrity_max') / 10) * 5>> <<set _imgName to "torn">> <<elseif $worn.lower.integrity lte (clothingData('lower',$worn.lower,'integrity_max') / 10) * 9>> <<set _imgName to "frayed">> <<else>> <<set _imgName to "full">> <</if>> <<if $worn.lower.mainImage isnot 0 and $worn.lower.high_img is 1>> <div @class="'clothes-div layer-lower-high' + _lowerWetness"> <img @class="_class" @src="'img/clothes/lower/' + $worn.lower.variable + '/' + _imgName + '.png'" @style="_style"> </div> <</if>> <div @class="'clothes-div layer-lower' + _lowerWetness"> <<if $worn.lower.mainImage isnot 0 and $worn.lower.high_img isnot 1>> <img @class="_class" @src="'img/clothes/lower/' + $worn.lower.variable + '/' + _imgName + '.png'" @style="_style"> <</if>> <<if $worn.lower.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/lower/' + $worn.lower.variable + '/' + 'acc' + ($worn.lower.accessory_integrity_img ? '_' + _imgName : '') + '.png'" @style="_styleAcc"> <</if>> </div> <<if $worn.lower.back_img is 1>> <div @class="'clothes-div layer-back-lower' + _lowerWetness"> <img @class="$worn.lower.back_img_colour is 'secondary' ? _classAcc : _class" @src="'img/clothes/lower/' + $worn.lower.variable + '/' + 'back.png'" @style="_style"> </div> <</if>> <</if>> <</widget>> <<widget "overlowerimg">> <<if $worn.over_lower.name isnot "naked">> <<baseClothingStrings "over_lower">> <<if $worn.over_lower.integrity lte (clothingData('over_lower',$worn.over_lower,'integrity_max') / 10) * 2>> <<set _imgName to "tattered">> <<elseif $worn.over_lower.integrity lte (clothingData('over_lower',$worn.over_lower,'integrity_max') / 10) * 5>> <<set _imgName to "torn">> <<elseif $worn.over_lower.integrity lte (clothingData('over_lower',$worn.over_lower,'integrity_max') / 10) * 9>> <<set _imgName to "frayed">> <<else>> <<set _imgName to "full">> <</if>> <div class="layer-over_lower"> <<if $worn.over_lower.mainImage isnot 0>> <img @class="_class" @src="'img/clothes/over_lower/' + $worn.over_lower.variable + '/' + _imgName + '.png'" @style="_style"> <</if>> <<if $worn.over_lower.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/over_lower/' + $worn.over_lower.variable + '/' + 'acc.png'" @style="_styleAcc"> <</if>> </div> <<if $worn.over_lower.back_img is 1>> <div class="layer-back-lower"> <img @class="$worn.over_lower.back_img_colour is 'secondary' ? _classAcc : _class" @src="'img/clothes/over_lower/' + $worn.over_lower.variable + '/' + 'back.png'" @style="_style"> </div> <</if>> <</if>> <</widget>> <<widget "genitalsimg">> <<if $worn.genitals.name isnot "naked">> <<set _genitalsColour = ($worn.genitals.colour ? " clothes-"+$worn.genitals.colour.replace(/ /g, '-') : "")>> <div class="layer-genitals"> <<if $worn.genitals.mainImage isnot 0 and !setup.clothes.genitals[clothesIndex('genitals',$worn.genitals)].hideUnderLower.includes($worn.under_lower.name)>> <<if $worn.genitals.name is "chastity cage" and $parasite.penis.name is "urchin">> <<if $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 2>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'tattered_urchin.png'" @style="$worn.genitals.colourCustom"> <<elseif $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 5>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'torn_urchin.png'" @style="$worn.genitals.colourCustom"> <<elseif $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 9>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'frayed_urchin.png'" @style="$worn.genitals.colourCustom"> <<else>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'full_urchin.png'" @style="$worn.genitals.colourCustom"> <</if>> <<elseif $worn.genitals.name is "chastity cage" and $parasite.penis.name is "slime">> <<if $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 2>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'tattered_slime.png'" @style="$worn.genitals.colourCustom"> <<elseif $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 5>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'torn_slime.png'" @style="$worn.genitals.colourCustom"> <<elseif $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 9>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'frayed_slime.png'" @style="$worn.genitals.colourCustom"> <<else>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'full_slime.png'" @style="$worn.genitals.colourCustom"> <</if>> <<else>> <<if $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 2>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'tattered.png'" @style="$worn.genitals.colourCustom"> <<elseif $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 5>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'torn.png'" @style="$worn.genitals.colourCustom"> <<elseif $worn.genitals.integrity lte (clothingData('genitals',$worn.genitals,'integrity_max') / 10) * 9>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'frayed.png'" @style="$worn.genitals.colourCustom"> <<else>> <img @class="'anim-idle-2f' + _genitalsColour" @src="'img/clothes/genitals/' + $worn.genitals.variable + '/' + 'full.png'" @style="$worn.genitals.colourCustom"> <</if>> <</if>> <</if>> </div> <</if>> <</widget>> <<widget "upperimg">> <<if $worn.upper.name isnot "naked">> <<baseClothingStrings "upper">> <<switch $upperwetstage>> <<case 1>><<set _upperWetness to " clothes-damp">> <<case 2>><<set _upperWetness to " clothes-wet">> <<case 3>><<set _upperWetness to " clothes-drenshed">> <<default>><<set _upperWetness to "">> <</switch>> <<set _tucked = $upperTucked and !setup.clothes.upper[clothesIndex('upper', $worn.upper)].notuck and $worn.upper.outfitPrimary is undefined ? " tucked" : "">> <<set $_hoodDown to $worn.upper.hoodposition is "down" ? "_down" : "">> <<set $_altPosition to $worn.upper.altposition is "alt" ? "_alt" : "">> <div @class="'clothes-div layer-upper' + _tucked + _upperWetness"> <<if $worn.upper.mainImage isnot 0>> <<if $worn.upper.integrity lte (clothingData('upper',$worn.upper,'integrity_max') / 10) * 2>> <<set _imgName to "tattered">> <<elseif $worn.upper.integrity lte (clothingData('upper',$worn.upper,'integrity_max') / 10) * 5>> <<set _imgName to "torn">> <<elseif $worn.upper.integrity lte (clothingData('upper',$worn.upper,'integrity_max') / 10) * 9>> <<set _imgName to "frayed">> <<else>> <<set _imgName to "full">> <</if>> <img @class="_class" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + _imgName + $_hoodDown + $_altPosition + '.png'" @style="_style"> <</if>> <<if setup.clothes.upper[clothesIndex('upper', $worn.upper)].breast_img is 1>> <img @class="_class" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + (Math.min(_breastSize, 5)) + $_altPosition + '.png'" @style="_style"> <</if>> <<if $worn.upper.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'acc' + ($worn.upper.accessory_integrity_img ? '_' + _imgName : '') + $_hoodDown + $_altPosition + '.png'" @style="_styleAcc"> <</if>> <<if $worn.upper.breast_acc_img is 1>> <img @class="_classAcc" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + (Math.min(_breastSize, 5)) + '_acc.png'" @style="_styleAcc"> <</if>> </div> <<set _sleeveClass to { "": _class, "primary": _class, "no": "", "secondary": _classAcc }[$worn.upper.sleeve_colour||""]>> <<set _altPosition to setup.clothes.upper[clothesIndex('upper', $worn.upper)].altposition is 'alt' ? '_alt' : '' >> <<set _sleeveState to setup.clothes.upper[clothesIndex('upper', $worn.upper)].altsleeve is 'alt' ? '_rolled.png' : '.png'>> <<if _coverRight isnot undefined and setup.clothes.upper[clothesIndex('upper', $worn.upper)].sleeve_img is 1>> <div @class="'clothes-div layer-rightarmclothes' + _upperWetness"> <<if _coverRight is true>> <img @class="_sleeveClass" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'right_cover' + _altPosition + _sleeveState" @style="_style"> <<else>> <img @class="_sleeveClass" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'right' + _altPosition + _sleeveState" @style="_style"> <</if>> </div> <</if>> <<if _coverLeft isnot undefined and setup.clothes.upper[clothesIndex('upper', $worn.upper)].sleeve_img is 1>> <div @class="'clothes-div layer-leftarmclothes' + _upperWetness"> <<if _coverLeft is true>> <img @class="_sleeveClass" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'left_cover' + _altPosition + _sleeveState" @style="_style"> <<else>> <img @class="_sleeveClass" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'left' + _altPosition + _sleeveState" @style="_style"> <</if>> </div> <</if>> <</if>> <</widget>> <<widget "overupperimg">> <<if $worn.over_upper.name isnot "naked">> <<baseClothingStrings "over_upper">> <<if $worn.over_upper.integrity lte (clothingData('over_upper',$worn.over_upper,'integrity_max') / 10) * 2>> <<set _imgName to "tattered">> <<elseif $worn.over_upper.integrity lte (clothingData('over_upper',$worn.over_upper,'integrity_max') / 10) * 5>> <<set _imgName to "torn">> <<elseif $worn.over_upper.integrity lte (clothingData('over_upper',$worn.over_upper,'integrity_max') / 10) * 9>> <<set _imgName to "frayed">> <<else>> <<set _imgName to "full">> <</if>> <div class="layer-over_upper"> <<if $worn.over_upper.mainImage isnot 0>> <img @class="_class" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + _imgName + '.png'" @style="_style"> <</if>> <<if setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].breast_img is 1>> <img @class="_class" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + (Math.min(_breastSize, 5)) + '.png'" @style="_style"> <</if>> <<if $worn.over_upper.accessory is 1>> <img @class="_classAcc" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + 'acc.png'" @style="_styleAcc"> <</if>> </div> <<set _sleeveClass to { "": _class, "primary": _class, "no": "", "secondary": _classAcc }[$worn.over_upper.sleeve_colour||""]>> <<if _coverRight isnot undefined and setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].sleeve_img is 1>> <div class="layer-rightarmoverclothes"> <<if _coverRight is true>> <img @class="_sleeveClass" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + 'right_cover.png'" @style="_style"> <<else>> <img @class="_sleeveClass" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + 'right.png'" @style="_style"> <</if>> </div> <</if>> <<if _coverLeft isnot undefined and setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].sleeve_img is 1>> <div class="layer-leftarmoverclothes"> <<if _coverLeft is true>> <img @class="_sleeveClass" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + 'left_cover.png'" @style="_style"> <<else>> <img @class="_sleeveClass" @src="'img/clothes/over_upper/' + $worn.over_upper.variable + '/' + 'left.png'" @style="_style"> <</if>> </div> <</if>> <</if>> <</widget>> <<widget "imgOpacity">> <<if _underUpperOpacity is undefined>> <<set _opacity to 1>> <<if !$worn.under_upper.type.includes("swim")>> <<if $underupperwetstage gte 3>> <<set _opacity = Math.clamp(_opacity - 0.5, 0, 1)>> <<elseif $underupperwetstage gte 2>> <<set _opacity = Math.clamp(_opacity - 0.25, 0, 1)>> <</if>> <</if>> <<set _underUpperOpacity to " opacity("+_opacity+")">> <</if>> <<if _underLowerOpacity is undefined>> <<set _opacity to 1>> <<if !$worn.under_lower.type.includes("swim")>> <<if $underlowerwetstage gte 3>> <<set _opacity = Math.clamp(_opacity - 0.5, 0, 1)>> <<elseif $underlowerwetstage gte 2>> <<set _opacity = Math.clamp(_opacity - 0.25, 0, 1)>> <</if>> <</if>> <<set _underLowerOpacity to " opacity("+_opacity+")">> <</if>> <<if _lowerOpacity is undefined>> <<set _opacity to 1>> <<if !$worn.lower.type.includes("swim")>> <<if $lowerwetstage gte 3>> <<set _opacity = Math.clamp(_opacity - 0.5, 0, 1)>> <<elseif $lowerwetstage gte 2>> <<set _opacity = Math.clamp(_opacity - 0.25, 0, 1)>> <</if>> <</if>> <<set _lowerOpacity to " opacity("+_opacity+")">> <</if>> <<if _upperOpacity is undefined>> <<set _opacity to 1>> <<if !$worn.upper.type.includes("swim")>> <<if $upperwetstage gte 3>> <<set _opacity = Math.clamp(_opacity - 0.5, 0, 1)>> <<elseif $upperwetstage gte 2>> <<set _opacity = Math.clamp(_opacity - 0.25, 0, 1)>> <</if>> <</if>> <<set _upperOpacity to " opacity("+_opacity+")">> <</if>> <</widget>> <<widget "player-base-body">> <div id="img"> <<canvas-player-base-body>> </div> <</widget>>
<<widget "clothing_data">> <<set setup.clothes to {}>> <<set setup.moddedClothes to {}>> <<run initOverUpper()>> <<run initOverLower()>> <<run initUpper()>> <<run initLower()>> <<run initUnderUpper()>> <<run initUnderLower()>> <<run initGenitals()>> <<run initOverHead()>> <<run initHead()>> <<run initFace()>> <<run initNeck()>> <<run initHands()>> <<run initHandheld()>> <<run initLegs()>> <<run initFeet()>> <<set _allClothes to []>> <<run allClothesSetup()>> <<set setup.clothes_all_slots to ["over_upper", "over_lower", "upper", "lower", "under_upper", "under_lower","over_head", "head", "face", "neck", "hands", "handheld", "legs", "feet", "genitals"]>> <!-- Throw an error if any clothing item has an index which is not correct for its position in its array. --> <<run Object.keys(setup.clothes).forEach(slot => { if(slot === 'all') return false; setup.clothes[slot].forEach((item, i) => { if (item.index !== i) throw new Error("The index of "+item.name+" should be "+i+", not "+item.index) }) })>> <!-- Find all unique traits (types) clothes can have --> <<set setup.clothingTraits = [...new Set(Object.keys(setup.clothes).flatMap(x => setup.clothes[x]).flatMap(x => x.type))]>> <<init_npc_clothes>> <</widget>> <<widget "clothing_arrays">> <<script>> V.clothes = {}; V.store = {}; V.wardrobe = { space: 20}; V.outfitTmp = {}; V.carried = {}; V.worn = {}; const worn = {}; for (let slot of setup.clothes_all_slots) { V.store[slot] = []; V.wardrobe[slot] = []; V.carried[slot] = clone(setup.clothes[slot][0]); V.worn[slot] = clone(setup.clothes[slot][0]); /* create a proxy that will forward the calls to V.worn[slot], but also pull extra properties from setup.clothes if necessary. writing to C.worn.slot.property will only affect V.worn.slot.property. please, AVOID calling C.worn.slot without properties!! */ worn[slot] = new Proxy ( { /* direct proxy to V.worn is impossible due to the latter getting re-created every passage, so we use empty object instead */ }, { get(nil, prop) { return prop in V.worn[slot] ? V.worn[slot][prop] : setup.clothes[slot][clothesIndex(slot, V.worn[slot])][prop]; }, set(nil, prop, val) { return V.worn[slot][prop] = val }, } ); }; /* freeze worn to prevent proxies from being overwritten */ Object.freeze(worn); C.worn = worn; V.outfit = [{ index: 0, name: "Pyjamas", over_upper: "naked", over_lower: "naked", upper: "pyjama shirt", lower: "pyjama bottoms", under_upper: "naked", under_lower: "naked", over_head: "naked", head: "naked", face: "naked", neck: "naked", hands: "naked", handheld: "naked", legs: "naked", feet: "naked", type: ["sleep"], colors: false }]; <</script>> <<wardrobesUpdate>> <</widget>> <<widget "clothinginit">> <<clothing_arrays>> <<set $upperoff to 0>> <<set $loweroff to 0>> <<set $underloweroff to 0>> <<set $underupperoff to 0>> <<set $upperwet to 0>> <<set $lowerwet to 0>> <<set $underlowerwet to 0>> <<set $underupperwet to 0>> <<set $upperwetstage to 0>> <<set $lowerwetstage to 0>> <<set $underupperwetstage to 0>> <<set $underlowerwetstage to 0>> <<set $waterwash to 0>> <<set $wear_over_upper to "none">> <<set $wear_over_lower to "none">> <<set $wear_upper to "none">> <<set $wear_lower to "none">> <<set $wear_under_upper to "none">> <<set $wear_under_lower to "none">> <<set $wear_over_head to "none">> <<set $wear_head to "none">> <<set $wear_face to "none">> <<set $wear_neck to "none">> <<set $wear_hands to "none">> <<set $wear_handheld to "none">> <<set $wear_legs to "none">> <<set $wear_feet to "none">> <<set $wear_genitals to "none">> <<set $wear_outfit to "none">> <</widget>> <<widget "givestartclothing">> <<set $worn.over_upper to clone(setup.clothes.over_upper[0])>> <<set $worn.over_lower to clone(setup.clothes.over_lower[0])>> <<set $worn.upper to clone(setup.clothes.upper[0])>> <<set $worn.lower to clone(setup.clothes.lower[0])>> <<set $worn.under_upper to clone(setup.clothes.under_upper[0])>> <<set $worn.under_lower to clone(setup.clothes.under_lower[0])>> <<set $worn.over_head to clone(setup.clothes.over_head[0])>> <<set $worn.head to clone(setup.clothes.head[0])>> <<set $worn.face to clone(setup.clothes.face[0])>> <<set $worn.neck to clone(setup.clothes.neck[0])>> <<set $worn.hands to clone(setup.clothes.hands[0])>> <<set $worn.handheld to clone(setup.clothes.handheld[0])>> <<set $worn.legs to clone(setup.clothes.legs[0])>> <<set $worn.feet to clone(setup.clothes.feet[0])>> <<if ($player.gender is "f" and $background.crossdresser is false) or ($player.gender is "m" and $background.crossdresser is true) or ($player.gender is "h" and ( (($player.gender_body is "m" or ($player.gender_body is "a" and $player.breastsize lte 3)) and $background.crossdresser is true) or (($player.gender_body is "f" or ($player.gender_body is "a" and $player.breastsize gt 3)) and $background.crossdresser is false) ) )>> <<set $outfit.push( {index: $outfit.length, name: "Everyday", over_upper: "naked", over_lower: "naked", upper: "sundress", lower: "sundress skirt", under_upper: "naked", under_lower: "plain panties", over_head: "naked", head: "naked", face: "naked", neck: "naked", handheld: "naked", hands: "naked", legs: "girl's gym socks", feet: "school shoes", type: ["normal"], colors: false }, {index: $outfit.length, name: "School", over_upper: "naked", over_lower: "naked", upper: "school shirt", lower: "school skirt", under_upper: "naked", under_lower: "plain panties", over_head: "naked", head: "hairpin", face: "naked", neck: "naked", handheld: "backpack", hands: "naked", legs: "girl's gym socks", feet: "school shoes", type: ["school"], colors: false }, {index: $outfit.length, name: "Swimwear", over_upper: "naked", over_lower: "naked", upper: "naked", lower: "naked", under_upper: "school swimsuit", under_lower: "school swimsuit bottom", over_head: "naked", head: "naked", face: "naked", neck: "naked", handheld: "naked", hands: "naked", legs: "naked", feet: "naked", type: ["swim"], colors: false } )>> <<set $worn.upper to clone(setup.clothes.upper[1])>> <<set $worn.upper.colour to "white">> <<set $worn.lower to clone(setup.clothes.lower[1])>> <<set $worn.lower.colour to "white">> <<set $worn.under_lower to clone(setup.clothes.under_lower[1])>> <<set $worn.under_lower.colour to "pale white">> <<set $worn.legs to clone(setup.clothes.legs[3])>> <<set $worn.head = clone(setup.clothes.head[1])>> <<set $worn.feet = clone(setup.clothes.feet[1])>> <<if $player.breastsize lte 3>> <<set $wardrobe.under_upper.push(clone(setup.clothes.under_upper[12]))>> <<set $wardrobe.under_upper.last().colour to "pale white">> <<else>> <<set $worn.under_upper = clone(setup.clothes.under_upper[12])>> <<set $worn.under_upper.colour to "pale white">> <<set $outfit[1].under_upper = "plain bra">> <<set $outfit[2].under_upper = "plain bra">> <</if>> <<set $wardrobe.upper.push(clone(setup.clothes.upper[5]))>> <<set $wardrobe.upper.last().colour to "white">> <<set $wardrobe.upper.last().accessory_colour to "light blue">> <<set $wardrobe.lower.push(clone(setup.clothes.lower[7]))>> <<set $wardrobe.lower.last().colour to "black">> <<set $wardrobe.upper.push(clone(setup.clothes.upper[2]))>> <<set $wardrobe.upper.last().colour to "blue">> <<set $wardrobe.lower.push(clone(setup.clothes.lower[2]))>> <<set $wardrobe.lower.last().colour to "blue">> <<set $wardrobe.under_upper.push(clone(setup.clothes.under_upper[2]))>> <<set $wardrobe.under_upper.last().colour to "blue">> <<set $wardrobe.under_lower.push(clone(setup.clothes.under_lower[6]))>> <<set $wardrobe.under_lower.last().colour to "blue">> <<set $wardrobe.handheld.push(clone(setup.clothes.handheld[8]))>> <<set $wardrobe.handheld.last().colour to "purple">> <<else>> <<set $outfit.push( {index: $outfit.length, name: "Everyday", over_upper: "naked", over_lower: "naked", upper: "t-shirt", lower: "shorts", under_upper: "naked", under_lower: "briefs", over_head: "naked", head: "naked", face: "naked", neck: "naked", handheld: "naked", hands: "naked", legs: "boy's gym socks", feet: "school shoes", type: ["normal"], colors: false }, {index: $outfit.length, name: "School", over_upper: "naked", over_lower: "naked", upper: "school shirt", lower: "school shorts", under_upper: "naked", under_lower: "briefs", over_head: "naked", head: "naked", face: "naked", neck: "naked", handheld: "backpack", hands: "naked", legs: "boy's gym socks", feet: "school shoes", type: ["school"], colors: false }, {index: $outfit.length, name: "Swimwear", over_upper: "naked", over_lower: "naked", upper: "naked", lower: "naked", under_upper: "naked", under_lower: "school swim shorts", over_head: "naked", head: "naked", face: "naked", neck: "naked", handheld: "naked", hands: "naked", legs: "naked", feet: "naked", type: ["swim"], colors: false } )>> <<set $worn.upper to clone(setup.clothes.upper[4])>> <<set $worn.upper.colour to "tangerine">> <<set $worn.lower to clone(setup.clothes.lower[5])>> <<set $worn.lower.colour to "blue">> <<set $worn.under_lower to clone(setup.clothes.under_lower[4])>> <<set $worn.under_lower.colour to "black">> <<set $worn.legs to clone(setup.clothes.legs[2])>> <<set $worn.feet = clone(setup.clothes.feet[1])>> <<set $wardrobe.upper.push(clone(setup.clothes.upper[5]))>> <<set $wardrobe.upper.last().colour to "white">> <<set $wardrobe.upper.last().accessory_colour to "light blue">> <<set $wardrobe.lower.push(clone(setup.clothes.lower[6]))>> <<set $wardrobe.lower.last().colour to "black">> <<set $wardrobe.upper.push(clone(setup.clothes.upper[2]))>> <<set $wardrobe.upper.last().colour to "blue">> <<set $wardrobe.lower.push(clone(setup.clothes.lower[2]))>> <<set $wardrobe.lower.last().colour to "blue">> <<set $wardrobe.under_lower.push(clone(setup.clothes.under_lower[7]))>> <<set $wardrobe.under_lower.last().colour to "blue">> <<set $wardrobe.under_lower.last().accessory_colour to "white">> <<set $wardrobe.head.push(clone(setup.clothes.head[1]))>> <<set $wardrobe.handheld.push(clone(setup.clothes.handheld[8]))>> <<set $wardrobe.handheld.last().colour to "blue">> <</if>> <!-- strip the unneeded vars from starting clothes --> <<run clothesDataTrimmerLoop()>> <</widget>> <<widget "init_npc_clothes">> <<set _npcClothesItems to { "upper": { "shirt": {name:"shirt", integrity_max:100, word:"a", action:"lift"}, "naked": {name:"naked", integrity_max:100, word:"n", action:"none"}, "school shirt": {name:"school shirt", integrity_max:100, word:"a", action:"unbutton"}, "school blouse": {name:"school blouse", integrity_max:100, word:"a", action:"unbutton"}, "dress shirt": {name:"dress shirt", integrity_max:100, word:"a", action:"unbutton"}, "school blazer": {name:"school blazer", integrity_max:100, word:"a", action:"pull"}, "teacher's uniform": {name:"teacher's uniform", integrity_max:100, word:"a", action:"unbutton"}, "swim shirt": {name:"swim shirt", integrity_max:100, word:"a", action:"lift"}, "school swimsuit top": {name:"school swimsuit top", integrity_max:100, word:"a", action:"pull"}, "bikini top": {name:"bikini top", integrity_max:100, word:"a", action:"pull"}, "microkini top": {name:"microkini top", integrity_max:100, word:"a", action:"pull"}, "diving suit": {name:"diving suit", integrity_max:100, word:"a", action:"unzip"}, "sailor shirt": {name:"sailor shirt", integrity_max:100, word:"a", action:"unbutton"}, "hi-vis jacket": {name:"hi-vis jacket", integrity_max:100, word:"a", action:"unzip"}, "denim shirt": {name:"denim shirt", integrity_max:100, word:"a", action:"unbutton"}, "hoodie": {name:"hoodie", integrity_max:100, word:"a", action:"lift"}, "vest": {name:"vest", integrity_max:100, word:"a", action:"lift"}, "police shirt": {name:"police shirt", integrity_max:100, word:"a", action:"unbutton"}, "uniform shirt": {name:"uniform shirt", integrity_max:100, word:"a", action:"unbutton"}, "monk robe top": {name:"monk robe top", integrity_max:100, word:"a", action:"open"}, "nun robe top": {name:"nun robe top", integrity_max:100, word:"a", action:"open"}, "robe top": {name:"robe top", integrity_max:100, word:"a", action:"open"}, "black robe top": {name:"black robe top", integrity_max:100, word:"a", action:"open"}, "jumpsuit shirt": {name:"jumpsuit shirt", integrity_max:100, word:"a", action:"unzip"}, "tuxedo shirt": {name:"tuxedo shirt", integrity_max:100, word:"a", action:"unbutton"}, "evening gown top": {name:"evening gown top", integrity_max:100, word:"a", action:"pull"}, "ballgown top": {name:"ballgown top", integrity_max:100, word:"a", action:"pull"}, "gothic jacket and vest": {name:"gothic jacket and vest", integrity_max:100, word:"a", action:"unbutton"}, "gothic gown top": {name:"gothic gown top", integrity_max:100, word:"a", action:"pull"}, "business suit top": {name:"business suit top", integrity_max:100, word:"a", action:"unbutton"}, "t-shirt": {name:"t-shirt", integrity_max:100, word:"a", action:"lift"}, "sundress top": {name:"sundress top", integrity_max:100, word:"a", action:"pull"}, "tracksuit top": {name:"tracksuit top", integrity_max:100, word:"a", action:"unzip"}, "peacoat": {name:"peacoat", integrity_max:100, word:"a", action:"unbutton"}, "turtleneck": {name:"turtleneck", integrity_max:100, word:"a", action:"lift"}, "collared shirt": {name:"collared shirt", integrity_max:100, word:"a", action:"unbutton"}, "blazer": {name:"blazer", integrity_max:100, word:"a", action:"lift"}, "sports jersey": {name:"sports jersey", integrity_max:100, word:"a", action:"lift"}, "sweater vest": {name:"sweater vest", integrity_max:100, word:"a", action:"lift"}, "v neck": {name:"v neck", integrity_max:100, word:"a", action:"lift"}, "tank top": {name:"tank top", integrity_max:100, word:"a", action:"pull"}, "blouse": {name:"blouse", integrity_max:100, word:"a", action:"lift"}, "crop top": {name:"crop top", integrity_max:100, word:"a", action:"pull"}, "tank top": {name:"tank top", integrity_max:100, word:"a", action:"pull"}, "bra": {name:"bra", integrity_max:100, word:"a", action:"undo"}, "puffer jacket": {name:"puffer jacket", integrity_max:100, word:"a", action:"unzip"}, "trenchcoat": {name:"trenchcoat", integrity_max:100, word:"a", action:"open"}, "coat": {name:"coat", integrity_max:100, word:"a", action:"open"}, "hoodie": {name:"hoodie", integrity_max:100, word:"a", action:"lift"}, "sweater": {name:"sweater", integrity_max:100, word:"a", action:"lift"}, "rain coat": {name:"rain coat", integrity_max:100, word:"a", action:"unzip"}, "flannel": {name:"flannel", integrity_max:100, word:"a", action:"unbutton"}, "woolen jumper": {name:"woolen jumper", integrity_max:100, word:"a", action:"lift"}, "fleece jumper": {name:"fleece jumper", integrity_max:100, word:"a", action:"lift"}, "jacket": {name:"jacket", integrity_max:100, word:"a", action:"unzip"}, "camo jacket": {name:"camo jacket", integrity_max:100, word:"a", action:"unzip"}, "trench coat": {name:"trench coat", integrity_max:100, word:"a", action:"open"}, "leather vest": {name:"leather vest", integrity_max:100, word:"a", action:"open"}, "leather harness": {name:"leather harness", integrity_max:100, word:"a", action:"open"}, "bathrobe": {name:"bathrobe", integrity_max:100, word:"a", action:"open"}, "lab coat": {name:"lab coat", integrity_max:100, word:"a", action:"unbutton"}, "security vest": {name:"security vest", integrity_max:100, word:"a", action:"unbutton"}, "doctor's coat": {name:"doctor's coat", integrity_max:100, word:"a", action:"unbutton"}, "nurse's coat": {name:"nurse's coat", integrity_max:100, word:"a", action:"unbutton"}, "patient gown": {name:"patient gown", integrity_max:100, word:"a", action:"pull"}, "jumpsuit top": {name:"jumpsuit top", integrity_max:100, word:"a", action:"unzip"}, "coverall top": {name:"coverall top", integrity_max:100, word:"a", action:"unzip"}, "dance shirt": {name:"dance shirt", integrity_max:100, word:"a", action:"pull"}, "shirtless suit": {name:"shirtless suit", integrity_max:100, word:"a", action:"open"}, "low-neck dress": {name:"low-neck dress", integrity_max:100, word:"a", action:"pull"}, "riding top": {name:"riding top", integrity_max:100, word:"a", action:"unbutton"}, "shadbelly coat": {name:"shadbelly coat", integrity_max:100, word:"a", action:"unbutton"}, "ramshackle hunting coat": {name:"ramshackle hunting coat", integrity_max:100, word:"a", action:"unbutton"}, "ruined suit": {name:"ruined suit", integrity_max:100, word:"a", action:"open"}, "grey sweater": {name:"grey sweater", integrity_max:100, word:"a", action:"lift"}, "grey cardigan": {name:"grey cardigan", integrity_max:100, word:"a", action:"open"}, "leather jacket": {name:"leather jacket", integrity_max:100, word:"a", action:"open"}, "jacaranda vest": {name:"jacaranda vest", integrity_max:100, word:"a", action:"pull"}, "blossoming growths": {name:"blossoming growths", integrity_max:100, word:"n", action:"pull"}, "leaf shirt": {name:"leaf shirt", integrity_max:100, word:"a", action:"pull"}, "leaf corset": {name:"leaf corset", integrity_max:100, word:"a", action:"pull"}, "pine top": {name:"pine top", integrity_max:100, word:"a", action:"pull"}, "plant top": {name:"plant top", integrity_max:100, word:"a", action:"pull"}, "sundress": {name:"sundress", integrity_max:100, word:"a", action:"lift"}, "tuxedo": {name:"tuxedo", integrity_max:100, word:"a", action:"unbutton"}, "gothic gown": {name:"gothic gown", integrity_max:100, word:"a", action:"pull"}, "kimono": {name:"kimono", integrity_max:100, word:"a", action:"pull"}, "christmas top": {name:"christmas top", integrity_max:100, word:"a", action:"pull"}, "ribbons": {name:"ribbons", integrity_max:100, word:"n", action:"unwrap"}, "pyjama shirt": {name:"pyjama shirt", integrity_max:100, word:"a", action:"lift"}, "ghost sheet": {name:"ghost sheet", integrity_max:100, word:"a", action:"lift"}, "vampire jacket": {name:"vampire jacket", integrity_max:100, word:"a", action:"open"}, "witch dress": {name:"witch dress", integrity_max:100, word:"a", action:"pull"}, "flowing robe": {name:"flowing robe", integrity_max:100, word:"a", action:"lift"}, "sleeveless hoodie": {name:"sleeveless hoodie", integrity_max:100, word:"a", action:"pull"}, }, "lower": { "naked": {name:"naked", integrity_max:100, word:"n", action:"none"}, "trousers": {name:"trousers", integrity_max:100, word:"n", action:"pull"}, "skirt": {name:"skirt", integrity_max:100, word:"a", action:"lift"}, "school shorts": {name:"school shorts", integrity_max:100, word:"n", action:"pull"}, "school skirt": {name:"school skirt", integrity_max:100, word:"a", action:"lift"}, "short school skirt": {name:"short school skirt", integrity_max:100, word:"a", action:"lift"}, "school trousers": {name:"school trousers", integrity_max:100, word:"n", action:"pull"}, "long school skirt": {name:"long school skirt", integrity_max:100, word:"a", action:"lift"}, "teacher's slacks": {name:"teacher's slacks", integrity_max:100, word:"n", action:"unzip"}, "school swim shorts": {name:"school swim shorts", integrity_max:100, word:"n", action:"pull"}, "school swimsuit bottoms": {name:"school swimsuit bottoms", integrity_max:100, word:"n", action:"aside"}, "swim shorts": {name:"swim shorts", integrity_max:100, word:"n", action:"pull"}, "board shorts": {name:"board shorts", integrity_max:100, word:"n", action:"pull"}, "bikini bottoms": {name:"bikini bottoms", integrity_max:100, word:"n", action:"pull"}, "microkini bottoms": {name:"microkini bottoms", integrity_max:100, word:"n", action:"pull"}, "diving suit bottoms": {name:"diving suit bottoms", integrity_max:100, word:"n", action:"unzip"}, "sailor trousers": {name:"sailor trousers", integrity_max:100, word:"n", action:"unzip"}, "cargo trousers": {name:"cargo trousers", integrity_max:100, word:"n", action:"pull"}, "police trousers": {name:"police trousers", integrity_max:100, word:"n", action:"unzip"}, "police skirt": {name:"police skirt", integrity_max:100, word:"a", action:"lift"}, "uniform trousers": {name:"uniform trousers", integrity_max:100, word:"n", action:"unzip"}, "monk robes": {name:"monk robes", integrity_max:100, word:"n", action:"aside"}, "nun robe skirt": {name:"nun robe skirt", integrity_max:100, word:"a", action:"lift"}, "robes": {name:"robes", integrity_max:100, word:"n", action:"aside"}, "black robes": {name:"black robes", integrity_max:100, word:"n", action:"aside"}, "jumpsuit bottoms": {name:"jumpsuit bottoms", integrity_max:100, word:"n", action:"unzip"}, "tuxedo trousers": {name:"tuxedo trousers", integrity_max:100, word:"n", action:"unzip"}, "evening gown": {name:"evening gown", integrity_max:100, word:"a", action:"lift"}, "ballgown skirt": {name:"ballgown skirt", integrity_max:100, word:"a", action:"lift"}, "breeches": {name:"breeches", integrity_max:100, word:"a", action:"pull"}, "gothic trousers": {name:"gothic trousers", integrity_max:100, word:"n", action:"unzip"}, "gothic gown": {name:"gothic gown", integrity_max:100, word:"a", action:"lift"}, "business trousers": {name:"business trousers", integrity_max:100, word:"n", action:"unzip"}, "sundress skirt": {name:"sundress skirt", integrity_max:100, word:"a", action:"lift"}, "tracksuit bottoms": {name:"tracksuit bottoms", integrity_max:100, word:"n", action:"pull"}, "slacks": {name:"slacks", integrity_max:100, word:"n", action:"unzip"}, "jeans": {name:"jeans", integrity_max:100, word:"n", action:"unbutton"}, "khakis": {name:"khakis", integrity_max:100, word:"n", action:"unzip"}, "jeans": {name:"jeans", integrity_max:100, word:"n", action:"unzip"}, "shorts": {name:"shorts", integrity_max:100, word:"n", action:"pull"}, "miniskirt": {name:"miniskirt", integrity_max:100, word:"a", action:"lift"}, "boyshorts": {name:"boyshorts", integrity_max:100, word:"n", action:"pull"}, "panties": {name:"panties", integrity_max:100, word:"n", action:"pull"}, "boxers": {name:"boxers", integrity_max:100, word:"n", action:"unbutton"}, "briefs": {name:"briefs", integrity_max:100, word:"n", action:"pull"}, "jorts": {name:"jorts", integrity_max:100, word:"n", action:"pull"}, "sweatpants": {name:"sweatpants", integrity_max:100, word:"n", action:"pull"}, "rain bottoms": {name:"rain bottoms", integrity_max:100, word:"n", action:"pull"}, "camo bottoms": {name:"camo bottoms", integrity_max:100, word:"n", action:"unzip"}, "assless chaps": {name:"assless chaps", integrity_max:100, word:"n", action:"pull"}, "hot pants": {name:"hot pants", integrity_max:100, word:"n", action:"pull"}, "leather trousers": {name:"leather trousers", integrity_max:100, word:"n", action:"pull"}, "bathrobe": {name:"bathrobe", integrity_max:100, word:"a", action:"lift"}, "lab trousers": {name:"lab trousers", integrity_max:100, word:"n", action:"unzip"}, "security trousers": {name:"security trousers", integrity_max:100, word:"n", action:"unzip"}, "white trousers": {name:"white trousers", integrity_max:100, word:"n", action:"pull"}, "white skirt": {name:"white skirt", integrity_max:100, word:"a", action:"lift"}, "gown skirt": {name:"gown skirt", integrity_max:100, word:"a", action:"lift"}, "jumpsuit trousers": {name:"jumpsuit trousers", integrity_max:100, word:"n", action:"pull"}, "coverall bottoms": {name:"coverall bottoms", integrity_max:100, word:"n", action:"unzip"}, "dance shorts": {name:"dance shorts", integrity_max:100, word:"n", action:"pull"}, "formal trousers": {name:"formal trousers", integrity_max:100, word:"n", action:"pull"}, "cropped dress skirt": {name:"cropped dress skirt", integrity_max:100, word:"a", action:"lift"}, "riding trousers": {name:"riding trousers", integrity_max:100, word:"n", action:"pull"}, "chapette breeches": {name:"chapette breeches", integrity_max:100, word:"n", action:"pull"}, "torn hunting trousers": {name:"torn hunting trousers", integrity_max:100, word:"n", action:"pull"}, "ruined trousers": {name:"ruined trousers", integrity_max:100, word:"n", action:"pull"}, "dark trousers": {name:"dark trousers", integrity_max:100, word:"n", action:"pull"}, "torn jeans": {name:"torn jeans", integrity_max:100, word:"n", action:"unbutton"}, "bloomers": {name:"bloomers", integrity_max:100, word:"n", action:"lift"}, "bell flower dress": {name:"bell flower dress", integrity_max:100, word:"a", action:"lift"}, "lotus skirt": {name:"lotus skirt", integrity_max:100, word:"a", action:"lift"}, "leaf skirt": {name:"leaf skirt", integrity_max:100, word:"a", action:"lift"}, "evergreen dress": {name:"evergreen dress", integrity_max:100, word:"a", action:"lift"}, "plant skirt": {name:"plant skirt", integrity_max:100, word:"a", action:"lift"}, "kimono bottoms": {name:"kimono bottoms", integrity_max:100, word:"n", action:"lift"}, "christmas bottoms": {name:"christmas bottoms", integrity_max:100, word:"n", action:"pull"}, "ribbons": {name:"ribbons", integrity_max:100, word:"n", action:"unwrap"}, "pyjama bottoms": {name:"pyjama bottoms", integrity_max:100, word:"n", action:"pull"}, "ghost sheet": {name:"ghost sheet", integrity_max:100, word:"a", action:"lift"}, "vampire trousers": {name:"vampire trousers", integrity_max:100, word:"n", action:"pull"}, "witch dress skirt": {name:"witch dress skirt", integrity_max:100, word:"a", action:"lift"}, "flowing robe": {name:"flowing robe", integrity_max:100, word:"a", action:"lift"}, "fight shorts": {name:"fight shorts", integrity_max:100, word:"n", action:"pull"}, } }>> <<set setup.npcClothesSets to [ {name: "naked", type: "naked", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("naked", "naked"), desc: "naked"}, {name: "maleDefault", type: "default", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("shirt", "trousers"), desc: "shirt and trousers"}, {name: "femaleDefault", type: "default", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("shirt", "skirt"), desc: "shirt and skirt"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleSchool", type: "school", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("school shirt", "school shorts"), desc: "school uniform"}, {name: "femaleSchool", type: "school", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("school shirt", "school skirt"), desc: "school uniform"}, {name: "femaleSchoolShort", type: "school", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("school shirt", "short school skirt"), desc: "school uniform"}, {name: "maleSchoolLong", type: "school", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("school blouse", "school trousers"), desc: "school uniform"}, {name: "femaleSchoolLong", type: "school", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("school blouse", "long school skirt"), desc: "school uniform"}, {name: "maleSchoolDress", type: "school", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("dress shirt", "school trousers"), desc: "school uniform"}, {name: "femaleSchoolDress", type: "school", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("dress shirt", "school skirt"), desc: "school uniform"}, {name: "maleSchoolBlazer", type: "school", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("school blazer", "school trousers"), desc: "school uniform"}, {name: "femaleSchoolBlazer", type: "school", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("school blazer", "long school skirt"), desc: "school uniform"}, {name: "teacher", type: "teacher", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("teacher's uniform", "teacher's slacks"), desc: "teacher's uniform"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleSchoolSwim", type: "schoolSwim", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("naked", "school swim shorts"), desc: "school swimsuit"}, {name: "maleSchoolSwimShirt", type: "schoolSwim", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("swim shirt", "school swim shorts"), desc: "school swimsuit"}, {name: "femaleSchoolSwim", type: "schoolSwim", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("school swimsuit top", "school swimsuit bottoms"), desc: "school swimsuit"}, {name: "maleSwim1", type: "beach", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("naked", "swim shorts"), desc: "swimsuit"}, {name: "maleSwim2", type: "beach", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("naked", "board shorts"), desc: "swimsuit"}, {name: "femaleSwim1", type: "beach", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("bikini top", "bikini bottoms"), desc: "bikini"}, {name: "femaleSwim2", type: "beach", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("microkini top", "microkini bottoms"), desc: "microkini"}, {name: "neutralSwim", type: "beach", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("swim shirt", "board shorts"), desc: "swimsuit"}, {name: "divingSuit", type: "beachDive", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("diving suit", "diving suit bottoms"), desc: "diving suit"}, {name: "sailor", type: "sailor", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sailor shirt", "sailor trousers"), desc: "sailor outfit"}, {name: "docker1", type: "docker", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("hi-vis jacket", "cargo trousers"), desc: "hi-vis jacket and cargo trousers"}, {name: "docker2", type: "docker", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("denim shirt", "jeans"), desc: "denim shirt and jeans"}, {name: "docker3", type: "docker", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("hoodie", "cargo trousers"), desc: "hoodie and cargo trousers"}, {name: "docker4", type: "docker", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("vest", "jeans"), desc: "vest and jeans"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "malePolice", type: "police", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("police shirt", "police trousers"), desc: "police uniform"}, {name: "femalePolice", type: "police", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("police shirt", "police skirt"), desc: "police uniform"}, {name: "neutralPolice", type: "police", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("uniform shirt", "uniform trousers"), desc: "police uniform"}, {name: "maleRobe", type: "temple", gender: "m", outfit: 1, clothes: npcAssignClothesToSet("monk robe top", "monk robes"), desc: "robe"}, {name: "femaleRobe", type: "temple", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("nun robe top", "nun robe skirt"), desc: "robe"}, {name: "neutralRobe", type: "temple", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("robe top", "robes"), desc: "robe"}, {name: "neutralRobeBlack", type: "templeBlack", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("black robe top", "black robes"), desc: "black robe"}, {name: "prisonJumpsuit", type: "prison", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("jumpsuit shirt", "jumpsuit bottoms"), desc: "prison jumpsuit"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleFormal1", type: "formal", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("tuxedo shirt", "tuxedo trousers"), desc: "tuxedo"}, {name: "femaleFormal1", type: "formal", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("evening gown top", "evening gown"), desc: "formal gown"}, {name: "femaleFormal2", type: "formal", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("ballgown top", "ballgown skirt"), desc: "ballgown"}, {name: "neutralFormal", type: "formal", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("dress shirt", "breeches"), desc: "dress shirt and breeches"}, {name: "maleFormalRare", type: "formalRare", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("gothic jacket and vest", "gothic trousers"), desc: "gothic suit"}, {name: "femaleFormalRare", type: "formalRare", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("gothic gown top", "gothic gown"), desc: "gothic gown"}, {name: "business", type: "business", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("business suit top", "business trousers"), desc: "business suit"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleTown1", type: "town", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("t-shirt", "shorts"), desc: "t-shirt and shorts"}, {name: "femaleTown1", type: "town", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("sundress top", "sundress skirt"), desc: "sundress"}, {name: "maleTown2", type: "town", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("shirt", "trousers"), desc: "shirt and trousers"}, {name: "femaleTown2", type: "town", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("shirt", "skirt"), desc: "shirt and skirt"}, {name: "townTrack", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("tracksuit top", "tracksuit bottoms"), desc: "tracksuit"}, {name: "townCoat", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("peacoat", "slacks"), desc: "peacoat and slacks"}, {name: "townTurtleneck", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("turtleneck", "jeans"), desc: "turtleneck and jeans"}, {name: "townCollar", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("collared shirt", "khakis"), desc: "collared shirt and khakis"}, {name: "townBlazer", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("blazer", "trousers"), desc: "blazer and trousers"}, {name: "townJersey", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sports jersey", "trousers"), desc: "sports jersey and trousers"}, {name: "townSweaterVest", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sweater vest", "khakis"), desc: "sweater vest and khakis"}, {name: "townVNeck", type: "town", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("v neck", "jeans"), desc: "v neck shirt and jeans"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleWarm1", type: "warm", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("t-shirt", "shorts"), desc: "t-shirt and shorts"}, {name: "femaleWarm1", type: "warm", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("sundress top", "sundress skirt"), desc: "sundress"}, {name: "maleWarm2", type: "warm", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("tank top", "shorts"), desc: "tank top and shorts"}, {name: "femaleWarm2", type: "warm", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("blouse", "skirt"), desc: "blouse and skirt"}, {name: "maleWarmShirtless", type: "warm", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("naked", "shorts"), desc: "shorts"}, {name: "femaleWarmCrop", type: "warm", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("crop top", "miniskirt"), desc: "crop top and miniskirt"}, {name: "femaleWarmTank", type: "warm", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("tank top", "boyshorts"), desc: "tank top and boyshorts"}, {name: "neutralWarmBlazer", type: "warm", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("blazer", "shorts"), desc: "blazer and shorts"}, {name: "neutralWarmJersey", type: "warm", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sports jersey", "jorts"), desc: "sports jersey and jorts"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "coldPuffer", type: "cold", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("puffer jacket", "slacks"), desc: "puffer jacket"}, {name: "coldTrench", type: "cold", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("trenchcoat", "jeans"), desc: "trenchcoat"}, {name: "coldCoat", type: "cold", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("coat", "jeans"), desc: "coat"}, {name: "coldHoodie", type: "cold", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("hoodie", "sweatpants"), desc: "hoodie"}, {name: "coldSweater", type: "cold", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sweater", "sweatpants"), desc: "sweater and sweatpants"}, {name: "rainCoat", type: "rain", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("rain coat", "rain bottoms"), desc: "rain coat"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "wildsFlannel", type: "wilds", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("flannel", "jeans"), desc: "flannel and jeans"}, {name: "wildsWJumper", type: "wilds", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("woolen jumper", "khakis"), desc: "woolen jumper"}, {name: "wildsFJumper", type: "wilds", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("fleece jumper", "khakis"), desc: "fleece jumper"}, {name: "wildsJacket", type: "wilds", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("jacket", "khakis"), desc: "jacket and khakis"}, {name: "forestCamo", type: "forest", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("camo jacket", "camo bottoms"), desc: "camouflaged hunting outfit"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "brothelTrench", type: "brothel", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("trench coat", "assless chaps"), desc: "trench coat"}, {name: "brothelVest", type: "brothel", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("leather vest", "hot pants"), desc: "leather vest"}, {name: "brothelHarness", type: "brothel", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("leather harness", "leather trousers"), desc: "leather harness"}, {name: "bathrobe", type: "spa", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("bathrobe", "bathrobe"), desc: "bathrobe"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "compoundLab", type: "compoundLab", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("lab coat", "lab trousers"), desc: "lab coat"}, {name: "security", type: "security", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("security vest", "security trousers"), desc: "security uniform"}, {name: "doctor", type: "hospital", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("doctor's coat", "white trousers"), desc: "doctor uniform"}, {name: "nurse", type: "hospital", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("nurse's coat", "white skirt"), desc: "nurse uniform"}, {name: "patient", type: "patient", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("patient gown", "gown skirt"), desc: "patient gown"}, {name: "jumpsuit", type: "worker", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("jumpsuit top", "jumpsuit trousers"), desc: "jumpsuit"}, {name: "coveralls", type: "worker", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("coverall top", "coverall bottoms"), desc: "coveralls"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleUndies", type: "undies", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("naked", "briefs"), desc: "briefs"}, {name: "femaleUndies", type: "undies", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("bra", "panties"), desc: "bra and panties"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "dance", type: "dance_studio", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("dance shirt", "dance shorts"), desc: "dance uniform"}, {name: "maleBriar", type: "Briar", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("shirtless suit", "formal trousers"), desc: "shirtless suit"}, {name: "femaleBriar", type: "Briar", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("low-neck dress", "cropped dress skirt"), desc: "plunging neckline dress"}, {name: "riding", type: "riding", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("riding top", "riding trousers"), desc: "riding outfit"}, {name: "ridingFormal", type: "Remy", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("shadbelly coat", "chapette breeches"), desc: "formal riding outfit"}, {name: "Eden", type: "Eden", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("ramshackle hunting coat", "torn hunting trousers"), desc: "hunting outfit"}, {name: "Morgan", type: "Morgan", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("ruined suit", "ruined trousers"), desc: "ruined outfit"}, {name: "maleLandry", type: "Landry", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("grey sweater", "dark trousers"), desc: "grey sweater"}, {name: "femaleLandry", type: "Landry", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("grey cardigan", "dark trousers"), desc: "grey cardigan"}, {name: "Whitney", type: "Whitney", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("leather jacket", "torn jeans"), desc: "leather jacket"}, {name: "AlexJorts", type: "Alex", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("flannel", "jorts"), desc: "flannel and jorts"}, {name: "AlexSkirt", type: "Alex", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("flannel", "skirt"), desc: "flannel and skirt"}, {name: "maleAlexSleep", type: "Alex", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("t-shirt", "boxers"), desc: "t-shirt and boxers"}, {name: "femaleAlexSleep", type: "Alex", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("t-shirt", "boyshorts"), desc: "t-shirt and boyshorts"}, {name: "riley", type: "Riley", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sleeveless hoodie", "fight shorts"), desc: "sleeveless hoodie"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "malePlantSpring", type: "plantSpring", gender: "m", outfit: 1, clothes: npcAssignClothesToSet("jacaranda vest", "bloomers"), desc: "mass of leafy coverings"}, {name: "femalePlantSpring", type: "plantSpring", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("blossoming growths", "bell flower dress"), desc: "mass of leafy coverings"}, {name: "plantSummer", type: "plantSummer", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("leaf shirt", "lotus skirt"), desc: "mass of leafy coverings"}, {name: "plantAutumn", type: "plantAutumn", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("leaf corset", "leaf skirt"), desc: "mass of leafy coverings"}, {name: "plantWinter", type: "plantWinter", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("pine top", "evergreen dress"), desc: "mass of leafy coverings"}, {name: "plantGeneric", type: "plant", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("plant top", "plant skirt"), desc: "plant top and skirt"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "robinGiftShirt", type: "robinGift", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("shirt", "shorts"), desc: "shirt and shorts"}, {name: "robinGiftSundress", type: "robinGift", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("sundress", "sundress skirt"), desc: "sundress"}, {name: "robinGiftTux", type: "robinGift", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("tuxedo", "tuxedo trousers"), desc: "tuxedo"}, {name: "robinGiftGown", type: "robinGift", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("gothic gown", "gothic gown"), desc: "gothic gown"}, {name: "robinGiftKimono", type: "robinGift", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("kimono", "kimono bottoms"), desc: "kimono"}, {name: "robinGiftChristmas", type: "robinGift", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("christmas top", "christmas bottoms"), desc: "christmas outfit"}, {name: "robinLewdRibbons", type: "robinRibbons", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("ribbons", "ribbons"), desc: "mass of ribbons"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "pyjamas", type: "sleep", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("pyjama shirt", "pyjama bottoms"), desc: "pyjama shirt and bottoms"}, {name: "ghost", type: "halloween", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("ghost sheet", "ghost sheet"), desc: "ghost costume"}, {name: "vampire", type: "halloween", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("vampire jacket", "vampire trousers"), desc: "vampire costume"}, {name: "witch", type: "halloween", gender: "f", outfit: 1, clothes: npcAssignClothesToSet("witch dress", "witch dress skirt"), desc: "witch costume"}, {name: "moonRobe", type: "Wraith", gender: "n", outfit: 1, clothes: npcAssignClothesToSet("flowing robe", "flowing robe"), desc: "flowing robe"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "sweater", type: "sweater", gender: "n", outfit: 0, clothes: npcAssignClothesToSet("sweater", "jeans"), desc: "sweater and jeans"}, /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ {name: "maleDefault", type: "default", gender: "m", outfit: 0, clothes: npcAssignClothesToSet("shirt", "trousers"), desc: "shirt and trousers"}, {name: "femaleDefault", type: "default", gender: "f", outfit: 0, clothes: npcAssignClothesToSet("shirt", "skirt"), desc: "shirt and skirt"} ]>> <</widget>>
<<widget "charLightCombat">> <<if $options.characterLightEnabled and $options.images is 1 and $options.combatImages is 1>> <<set _position = _args[0] || "">> <<set _props = _args[1] || []>> <<if _position == "doggy">> <<if _props.includes("haybale") or _props.includes("milk")>> <<set _heightOffset = "225px">> <<elseif _props.includes("bench")>> <<set _heightOffset = "240px">> <<elseif _props.includes("table")>> <<set _heightOffset = "277px">> <</if>> <<elseif _position == "missionary">> <<if _props.includes("haybale") or _props.includes("milk")>> <<set _heightOffset = "225px">> <<elseif _props.includes("bench")>> <<set _heightOffset = "228px">> <<elseif _props.includes("table")>> <<set _heightOffset = "265px">> <</if>> <</if>> <div @class="'char-light-combat ' + _position" @style="'--light-intensity: ' + $options.lightCombat + (_heightOffset ? '; --height-offset: ' + _heightOffset : '')"></div> <</if>> <</widget>>
/* Witten for a bit of fun over a couple of hours, feel free to mod it in or re-work it. Follow the comments to run in the game. Lollipop Scythe */ /*Run at the start of the game and in version update*/ <<widget "portalPantiesSetup">> <<if $portalPanties is undefined>> <<set $portalPanties to { toPass: 0, totalPassed: 0, cooldown: 0, state: { mouth: null, anus: null, vagina: null, }, ownPenisOrgasms: { mouth: 0, anus: 0, vagina: 0, }, portalPenisOrgasms: { mouth: 0, anus: 0, vagina: 0, }, message: { started: [], continued: [], disappeared: [], finished: [], } }>> <</if>> <</widget>> /* Place '<<portalPantiesPass $pass>>' within <<widget "pass">> */ <<widget "portalPantiesPass">> <<if $event or playerChastity("hidden")>>/*Prevents it from running during events or if the player has a chastity belt*/ <<elseif $worn.under_lower.type.includes("Portal")>> <<set $portalPanties.totalPassed += _args[0]>> <<if $portalPanties.cooldown gte 0 and _args[0] gt 0>> <<set $portalPanties.cooldown to Math.clamp($portalPanties.cooldown - _args[0], 0, 1440)>> <</if>> <<if ["mouth","anus","vagina"].find((location) => $portalPanties.state[location])>> <<set $portalPanties.toPass to Math.clamp($portalPanties.toPass + _args[0], 0, 1440)>> <</if>> <<set $_penisLocation to ["mouth","anus","vagina"].find((location) => $portalPanties.state[location] and $portalPanties.state[location].owner is "pc")>> <<if $portalPanties.cooldown is 0>> /* Attempt to fill a hole */ <<set $_free to []>> <<if !$portalPanties.state.mouth>><<run $_free.push("mouth")>><</if>> <<if !$portalPanties.state.anus>><<run $_free.push("anus")>><</if>> <<if !$portalPanties.state.vagina>><<run $_free.push("vagina")>><</if>> <<set $_playersPPFree to $player.penisExist and $player.penissize gte 0 and !playerChastity("cage") and !$_penisLocation>> <<set $_toFill to $_free[random(0, $_free.length - 1)]>> <<if $_toFill>> <<portalPantiesFillHole $_toFill $_playersPPFree>> <</if>> /* Sets the cooldown, 1440 is 1 day */ <<if between($portalPanties.totalPassed, 0, 1440 * 2)>> <<set $portalPanties.cooldown to 720>> <<elseif between($portalPanties.totalPassed, 1440 * 2, 1440 * 5)>> <<set $portalPanties.cooldown to 360>> <<elseif between($portalPanties.totalPassed, 1440 * 5, 1440 * 10)>> <<set $portalPanties.cooldown to 180>> <<elseif between($portalPanties.totalPassed, 1440 * 10, 1440 * 20)>> <<set $portalPanties.cooldown to 90>> <<else>> <<set $portalPanties.cooldown to 30>> <</if>> <</if>> /*Runs the 'fucking' effect */ <<if $player.vaginaExist>> <<portalPantiesFuck "vagina" `$_penisLocation === "vagina" ? 2 : 1`>> <</if>> <<portalPantiesFuck "anus" `$_penisLocation === "anus" ? 2 : 1`>> <<portalPantiesFuck "mouth" `$_penisLocation === "mouth" ? 2 : 1`>> <<set $portalPanties.toPass to 0>> <<else>> /*Stop the effect if it should no longer apply */ <<set $portalPanties.cooldown to 0>> <<set $portalPanties.toPass to 0>> <<portalPantiesClear "vagina">> <<portalPantiesClear "anus">> <<portalPantiesClear "mouth">> <</if>> <</widget>> <<widget "portalPantiesFillHole">> <<if !$portalPanties.state[_args[0]]>> <<set $portalPanties.state[_args[0]] to { owner: _args[1] ? "pc" : "portal", size: _args[1] ? $player.penissize : random(1,4), timer: _args[1] ? null : random(5,15), type: _args[1] ? "human" : "human", new: true, tempRemoval: false, }>> <</if>> <</widget>> <<widget "portalPantiesFuck">> <<if $portalPanties.state[_args[0]] and !$portalPanties.state[_args[0]].new and !$portalPanties.state[_args[0]].tempRemoval>> <<switch _args[0]>> <<case "vagina">><<arousal `$portalPanties.toPass * _args[1] * 100` "vagina">> <<case "anus">><<arousal `$portalPanties.toPass * _args[1] * 100` "anus">> <<case "mouth">><<arousal `$portalPanties.toPass * _args[1] * 100` "oral">> <</switch>> <<if $portalPanties.state[_args[0]].timer>> <<set $portalPanties.state[_args[0]].timer -= $portalPanties.toPass>> <</if>> <</if>> <</widget>> <<widget "portalPantiesClear">> <<set $portalPanties.state[_args[0]] to null>> <</widget>> /* Place '<<portalPantiesDisplay>>' within '<<widget "effects">>' */ <<widget "portalPantiesDisplay">><<silently>> <<if $worn.under_lower.type.includes("Portal")>> <<if $player.vaginaExist>> <<portalPantiesDisplayItem "vagina">> <</if>> <<portalPantiesDisplayItem "anus">> <<portalPantiesDisplayItem "mouth">> <</if>> <</silently>><<portalPantiesDisplayMessage>> <</widget>> <<widget "portalPantiesDisplayItem">> <<if $portalPanties.state[_args[0]]>> <<set $_disabled to !!$event or !!$NPCList.name>> <<if $_disabled and !$portalPanties.state[_args[0]].tempRemoval and !$portalPanties.state[_args[0]].new>> <<set $portalPanties.message.disappeared.push(_args[0])>> <<set $portalPanties.state[_args[0]].tempRemoval to true>> <<elseif $_disabled>> <<elseif !$_disabled and $portalPanties.state[_args[0]].tempRemoval and !$portalPanties.state[_args[0]].new>> <<set $portalPanties.state[_args[0]].tempRemoval to false>> <<elseif $portalPanties.state[_args[0]].new>> <<set $portalPanties.message.started.push(_args[0])>> <<set $portalPanties.state[_args[0]].new to false>> <<else>> <<set $portalPanties.message.continued.push(_args[0])>> <<if $portalPanties.state[_args[0]].owner is "pc">> <<else>> <<if $portalPanties.state[_args[0]].timer lte 0>> <<set $portalPanties.message.finished.push(_args[0])>> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "portalPantiesDisplayMessage">> <<penetrationPainCalculate>> <<set _awareOfPenis to $awareness gte 300>> <<set $_started to $portalPanties.message.started>> <<set $_continued to $portalPanties.message.continued>> <<set $_finished to $portalPanties.message.finished>> <<set $_disappeared to $portalPanties.message.disappeared>> <<set $_startedPlayerPenis to $_started.find((location) => $portalPanties.state[location] and $portalPanties.state[location].owner is "pc")>> <<set $_continuedPlayerPenis to $_continued.find((location) => $portalPanties.state[location] and $portalPanties.state[location].owner is "pc")>> <<set $_penisLocation to ["mouth","anus","vagina"].find((location) => $portalPanties.state[location] and $portalPanties.state[location].owner is "pc")>> <<if $_started.length>> You feel <<if _awareOfPenis>> <<print ($_started.length gt 1) ? "foreign penises" : "a foreign penis">> <<else>> <<print ($_started.length gt 1) ? "foreign objects" : "a foreign object">> <</if>> penetrate your <<print formatList($_started)>><<if $_startedPlayerPenis>>, while your penis is enveloped by <<if _awareOfPenis>>a <<print $_penisLocation>><<else>>something<</if>><</if>>. <</if>> <<if $_continued.length>> <<if !$_started.length>> <<if _awareOfPenis>> The foreign penis<<print ($_continued.length gt 1) ? "es" : "">> <<else>> The foreign object<<print ($_continued.length gt 1) ? "s" : "">> <</if>> <<else>> <<print ($_continued.length gt 1) ? "Those" : "The one">> <</if>> in your <<print formatList($_continued)>> <<print ($_continued.length gt 1) ? "are" : "is">> constantly thrusting into you<<if $_continuedPlayerPenis>>, while your penis is forced <<if _awareOfPenis>>to thrust into a <<print $_penisLocation>><<else>>in and out of something<</if>><</if>>.<<garousal>> <br> <</if>> <<if $_finished.length>> The one in your <<print formatList($_finished)>> releases something then disappears. <<for $_item range $_finished>> <<portalPantiesPortalCum $_item>> <</for>> <br> <</if>> <<if $_disappeared.length>> You feel the foreign <<if _awareOfPenis>> The foreign penis<<print ($_disappeared.length gt 1) ? "es" : "">> <<else>> The foreign object<<print ($_disappeared.length gt 1) ? "s" : "">> <</if>> in your <<print formatList($_disappeared)>> disappear suddenly, leaving you feeling empty. <br> <</if>> <<set _firstItem to true>> <<for $_item range $portalPanties.message.started>> <<portalPantiesDisplayVirginity $_item>> <</for>> <<if $_penisLocation>> <<portalPantiesDisplayVirginity "penis">> <</if>> <<set $portalPanties.message.started to []>> <<set $portalPanties.message.continued to []>> <<set $portalPanties.message.finished to []>> <<set $portalPanties.message.disappeared to []>> <</widget>> /*Every widget below here might need to be checked for issues, didn't spent too long on it */ <<widget "portalPantiesDisplayVirginity">><<silently>> <<switch _args[0]>> <<case "vagina">> <<if $player.virginity.vaginal is true>> <<takeVirginity "Portal Panties" "vaginal">> <<run console.log($vaginalPain, $portalPanties.state[_args[0]].size, $vaginalPain * (1.5 / (5 - ($portalPanties.state[_args[0]].size))))>> <<pain `$vaginalPain * $portalPanties.state[_args[0]].size`>> <<if $sexStats.vagina.pregnancy.totalBirthEvents gt 0>> <<set $_text_output to "<span class='red'>Despite your lack of a hymen, you feel <<if _awareOfPenis>>a penis<<else>>something<</if>> inside you change as your virginity and purity are taken.</span><<fallenTransform>><<ggpain>>">> <<else>> <<if $portalPanties.state[_args[0]].size is 4>> <<set $_text_output to "<span class='red'>Your hymen obliterated, you whimper as your <<pussy>> struggles to accommodate the <<if _awareOfPenis>>penis<<else>>object<</if>>.</span><<fallenTransform>><<ggpain>>">> <<else>> <<set $_text_output to "<span class='red'>Your hymen is torn as your vaginal virginity is taken by the <<if _awareOfPenis>>penis<<else>>object<</if>>.</span><<fallenTransform>><<ggpain>>">> <</if>> <</if>> <</if>> <<case "anus">> <<if $player.virginity.anal is true>> <<takeVirginity "Portal Panties" "anal">> <<pain `$analPain * (1.5 / (5 - ($portalPanties.state[_args[0]].size)))`>> <<if $portalPanties.state[_args[0]].size is 4>> <<set $_text_output to "<span class='red'>You whimper as your virgin anus struggles to accommodate the <<if _awareOfPenis>>penis<<else>>object<</if>>, violating you in a way you hadn't conceived of.</span><<ggpain>>">> <<else>> <<set $_text_output to "<span class='red'>Your anus virginity is taken, the <<if _awareOfPenis>>penis<<else>>object<</if>> violating you in a way you hadn't conceived of.</span><<ggpain>>">> <</if>> <</if>> <<case "mouth">> <<if $player.virginity.oral is true>> <<takeVirginity "Portal Panties" "oral">> <<set $_text_output to "<span class='red'>The <<if _awareOfPenis>>penis<<else>>object<</if>> in your mouth tastes strange.</span><<ggpain>>">> <</if>> <<case "penis">> <<if $player.virginity.penile is true>> <<set $_text_output to "<span class='red'>Your penis virginity is taken.</span><<fallenTransform>>">> <</if>> <</switch>> <</silently>><<if _firstItem>><br><<set _firstItem to false>><</if>><<print $_text_output>> <</widget>> <<widget "portalPantiesPortalCum">> <<switch _args[0]>> <<case "mouth">> <<oralejacstat>><<ejacstat>><<cumswallow $portalPanties.state[_args[0]].type undefined "forced">> <<set $portalPanties.portalPenisOrgasms.mouth++>> <<portalPantiesClear _args[0]>> <<case "anus">> <<recordSperm `{target: "pc", spermOwner: $portalPanties.state[_args[0]].owner, spermType: $portalPanties.state[_args[0]].type, genital: "anus"}`>> <<portalPantiesClear "anus">> <<analejacstat>><<ejacstat>><<set $hunger -= 200>><<set $thirst -= 200>><<set $hygiene += 500>><<bodyliquid "anus" "semen">> <<set $portalPanties.portalPenisOrgasms.anus++>> <<portalPantiesClear _args[0]>> <<case "vagina">> <<recordSperm `{target: "pc", spermOwner: $portalPanties.state[_args[0]].owner, spermType: $portalPanties.state[_args[0]].type}`>> <<portalPantiesClear _args[0]>> <<vaginalejacstat>><<ejacstat>><<set $hygiene += 500>><<bodyliquid "vagina" "semen">> <<set $portalPanties.portalPenisOrgasms.vagina++>> <<portalPantiesClear _args[0]>> <</switch>> <</widget>> /* Place within '<<widget "orgasm">>' '<<elseif ["mouth","anus","vagina"].find((location) => $portalPanties.state[location] and $portalPanties.state[location].owner is "pc")>> <<portalPantiesPlayerCum>>' */ <<widget "portalPantiesPlayerCum">> <<if $portalPanties.state.mouth and $portalPanties.state.mouth.owner is "pc">> <span class="pink">You are overcome by sensation. A surge of cum erupts from your penis and goes straight into your mouth.</span> <<oralejacstat>><<ejacstat>><<cumswallow "human" undefined "selfForced">> <<portalPantiesClear "mouth">> <<set $portalPanties.ownPenisOrgasms.mouth++>> <<elseif $portalPanties.state.anus and $portalPanties.state.anus.owner is "pc">> <span class="pink">You are overcome by sensation. A surge of cum erupts from your penis and goes straight into your anus.</span> <<recordSperm `{target: "pc", spermOwner: "pc", spermType: "human", genital: "anus"}`>> <<portalPantiesClear "anus">> <<analejacstat>><<ejacstat>><<set $hunger -= 200>><<set $thirst -= 200>><<set $hygiene += 500>><<bodyliquid "anus" "semen">> <<set $portalPanties.ownPenisOrgasms.anus++>> <<elseif $portalPanties.state.vagina and $portalPanties.state.vagina.owner is "pc">> <span class="pink">You are overcome by sensation. A surge of cum erupts from your penis and goes straight into your <<pussy>>.</span> <<recordSperm `{target: "pc", spermOwner: "pc", spermType: "human"}`>> <<portalPantiesClear "vagina">> <<vaginalejacstat>><<ejacstat>><<set $hygiene += 500>><<bodyliquid "vagina" "semen">> <<set $portalPanties.ownPenisOrgasms.vagina++>> <</if>> <</widget>> /* Place within '<<widget "cumswallow">>' '<<elseif _args[2] is "forced">> <<if $ejactrait gte 1>> You swallow it, its <<print either("strong", "bitter", "sweet", "creamy", "sharp", "salty")>> taste pleasing. <<else>> You're forced to swallow it. <</if>> <<set $hunger -= 200>> <<set $thirst -= 200>> <<bodyliquid "mouth" "semen" 1>> <<elseif _args[2] is "selfForced">> <<if $ejactrait gte 1>> You swallow the cum, enjoying its personal taste. <<else>> You're forced to swallow the cum. <</if>> <<set $hunger -= 200>> <<set $thirst -= 200>> <<bodyliquid "mouth" "semen" 1>>' */
<div id="clothingShop-div" class="main-shop-div"> <<schoolShop-main>> </div>
<<widget "schoolShop-main">> <<set $outside to 0>><<set $location to "school">><<effects>> <<set $shopName = "school">> <<if $tryOn.autoReset isnot false>><<tryOnReset>><</if>> <<if $school_shop_intro isnot 1>> <<set $school_shop_intro to 1>> Sydney nods, leading you to the other end of the counter. Shirts, trousers, and skirts hang from circular stands, while swimsuits stay compactly folded on shelves. <br><br> "You can find just about anything that matches the dress code here," <<he>> says, gesturing to the wall behind <<him>>. "There's also a small changing room, right this way. N-no one will peek, don't worry." <<His>> face turns red. <br><br> <<link [[Next|School Library Shop]]>><<endevent>><</link>> <br> <<else>> Around the corner from the rental counter is a small area reserved for school-sanctioned clothing. Shirts, trousers, and skirts hang from circular stands, while swimsuits stay compactly folded on shelves. <br><br> <<if $schoolShopAction is undefined>> <<set $schoolShopAction to []>> <</if>> <<run statusCheck("Sydney")>> <<if $schoolShopAction.includes("wear") or $schoolShopAction.includes("try") or $schoolShopAction.includes("under")>> <<if random(1,10) is 1>> You hear Sydney speaking outside. "Um, the changing room is currently occupied! Sorry." <<elseif !$daily.sydney.peek and random(1,10) is 2 and (_sydneyStatus.includes("corrupt") or _sydneyStatus.includes("Lust"))>> <<set $daily.sydney.peek to true>><<set $sydneySeen.pushUnique("changing room")>> You hear the curtain shift behind you. You quickly turn around and hear a gasp. <span class="lewd">Sydney's face disappears behind the curtain.</span> <<stress 3>><<gstress>><<npcincr Sydney lust 1>><<glust>><<arousal 50>><<garousal>> <<else>> Sydney patiently waits for you outside the changing room. <</if>> <<else>> Sydney patiently waits for you. <</if>> <br><br> <div id="tryonstats-div"><<tryOnStats>></div> <<unset $shopListStartCount>> <<unset $clothes_choice>> <<set $shopPage = 0>> <span>Warmth:</span> <<warmthscale>> <div id="warmth-description"> <<warmth_description>> </div> <br><br> <<clothingcategoryicon "all">> <<link "View All">><<replace "#clothingShop-div">><<AllShop>><</replace>><</link>> <br><br> <<if $debug is 1>> <<clothingcategoryicon "overoutfit">> <<link "View Over Outfits">><<replace "#clothingShop-div">><<OverOutfitShop>><</replace>><</link>> <br><br> <</if>> /* *<<clothingcategoryicon "outfit">> *<<link "View Outfits">><<replace "#clothingShop-div">><<OutfitShop>><</replace>><</link>> *<br> */ <<clothingcategoryicon "upper">> <<link "View Tops">><<replace "#clothingShop-div">><<TopShop>><</replace>><</link>> <br> <<clothingcategoryicon "lower">> <<link "View Bottoms">><<replace "#clothingShop-div">><<BottomShop>><</replace>><</link>> <br><br> <<clothingcategoryicon "underoutfit">> <<link "View Under Outfits">><<replace "#clothingShop-div">><<UnderOutfitShop>><</replace>><</link>> <br> <<clothingcategoryicon "underupper">> <<link "View Under Tops">><<replace "#clothingShop-div">><<UnderTopShop>><</replace>><</link>> <br> <<clothingcategoryicon "underlower">> <<link "View Under Bottoms">><<replace "#clothingShop-div">><<UnderBottomShop>><</replace>><</link>> <br><br> <<clothingcategoryicon "head">> <<link "View Head Accessories">><<replace "#clothingShop-div">><<HeadShop>><</replace>><</link>> <br> <<clothingcategoryicon "face">> <<link "View Face Accessories">><<replace "#clothingShop-div">><<FaceShop>><</replace>><</link>> <br> /* *<<clothingcategoryicon "neck">> *<<link "View Neck Accessories">><<replace "#clothingShop-div">><<NeckShop>><</replace>><</link>> *<br>*/ <<clothingcategoryicon "handheld">> <<link "View Handheld Items">><<replace "#clothingShop-div">><<HandheldShop>><</replace>><</link>> <br> <<clothingcategoryicon "hand">> <<link "View Hand Accessories">><<replace "#clothingShop-div">><<HandsShop>><</replace>><</link>> <br> <<clothingcategoryicon "legs">> <<link "View Legwear">><<replace "#clothingShop-div">><<LegsShop>><</replace>><</link>> <br> <<clothingcategoryicon "feet">> <<link "View Shoes">><<replace "#clothingShop-div">><<FeetShop>><</replace>><</link>> <br><br> <<run linkifyDivs('.button-back-to-shop')>> <<if $tryOn.value gt 0 and $tryOn.value lte $money>> <<sendItemsToDropdown>> <<link "Buy clothes and send to wardrobe">> <<buyTryOnClothes "wardrobe">> <<updatesidebarmoney>> <<updatesidebarimg>> <<updatesidebardescription>> <<updateallure>> <<updatewarmthscale>> <<updatewarmthdescription>> <<updateclothingshop>> <</link>> <br> <<elseif $tryOn.value is 0>> <<getouticon>><<link [[Leave|Library Rental Counter]]>><<shopClothingFilterReset>><<ShowUnderEquip "normal">><<endnpc>><<unset $clothes_choice>><<set $tryOn.autoReset to true>><<set $eventskip to 1>><<unset $tempDisable>><<shopCommandoCheck>><<endevent>><</link>> <br><br> <</if>> <</if>> <</widget>>
<div id="clothingShop-div" class="main-shop-div"> <<forestShop-main>> </div>
<<widget "forestShop-intro">> <<npc Gwylan>><<person1>> You enter the strange building. The interior is dark and crowded by tall shelves, holding all manner of items. <br><br> The quiet is broken by a scraping, then a thud. A mousy <<personsimple>> holding a stepladder appears at the end of the closest aisle. <<if $gwylan_rescue is 1>> It's Gwylan. <br><br> "You came!" <<else>> <br><br> "A customer!" <</if>> <<he>> says, dropping the ladder and walking over. <<He>> wipes <<his>> hands on <<his>> apron. "Welcome to my shop." <<if $gwylan_rescue is 1 and $gwylan_aborted gte 1>> <br><br> <<gwylanRescueApologyShop "Intro">> <<set $gwylan_aborted to 0>> <<elseif $gwylan_rescue isnot 1>> <br><br> <<He>> looks about your age, with mousy hair and a hint of freckles. "I'm older than I look," <<he>> says, as if reading your mind. "I'm Gwylan." <<He>> reaches forward, lifts your hand, and shakes it in both <<his>> own. "Pleased to meet you. I sell-" <<He>> pauses. "My grand<<father>> sells-" Another pause. "I sell knick-knacks here. Things you won't find in normal shops. Even I don't know what I have in stock!" <<He>> sounds proud. <br><br> "I hope you find something you like," <<he>> says, picking the ladder back up. "But don't worry if you don't. My grand<<father>> would say the objects here hide from people they don't want to be bought by." <<He>> laughs. "I could believe it." <</if>> <br><br> <<link [[Next|Forest Shop]]>><<endevent>><</link>> <br> <</widget>> <<widget "forestShop-text">> You are in the forest shop. The interior is dark and crowded by tall shelves, holding all manner of items. Most are useless knick-knacks, but some interest you. <br><br> <<if $gwylan_aborted gte 1>> <<gwylanRescueApologyShop>> <<set $gwylan_aborted to 0>> <<else>> You hear Gwylan shuffling somewhere in the gloom. <</if>> <<if $robin_in_forest_shop>> Robin is busy admiring the costumes. <<if !$halloween_robin_costume or $halloween_robin_costume is "ghost">> <br><br> <<link [[Talk to Robin|Robin Forest Costume Intro]]>><<forestShop-leave>><<clothingReset>><</link>> <</if>> <</if>> <</widget>> <<widget "forestShop-leave">> <<shopClothingFilterReset>><<unset $clothes_choice>><<ShowUnderEquip "normal">><<ShowUnderEquip "over">> <<set $tryOn.autoReset to true>><<set $eventskip to 1>><<unset $tempDisable>><<shopCommandoCheck>> <</widget>> <<widget "forestShop-main">> <<set $outside to 0>><<set $location to "forest_shop">><<effects>> <<set $shopName = "forest">> <<if $tryOn.autoReset isnot false>><<tryOnReset>><</if>> <<specialClothesUpdate>> <<if $forest_shop_intro isnot 1>> <<set $forest_shop_intro to 1>> <<forestShop-intro>> <<else>> <<forestShop-text>> <br><br> <div id="tryonstats-div"><<tryOnStats>></div> <<unset $shopListStartCount>> <<unset $clothes_choice>> <<set $shopPage = 0>> <span>Warmth:</span> <<warmthscale>> <div id="warmth-description"> <<warmth_description>> </div> <br><br> <<if $christmas_gift_robin is undefined and $christmas is 1 and C.npc.Robin.init is 1>> <<checkforloveinterests>> <<if isLoveInterest("Robin")>><<gifticon "love">><<else>><<gifticon "christmas">><</if>><<link [[Find a gift for Robin (0:10)|Forest Christmas Robin]]>><<pass 10>><</link>> <br> <</if>> <<if isPubfameTaskAccepted("gwylan")>> <<if $pubfame.gwylan.snowglobe isnot 1>> <<ind>><<link [[Look for the snow globe (0:20)|Forest Snowglobe]]>><<pass 20>><</link>> <<elseif $money gte 2000>> <<ind>><<link [[Purchase the snow globe (£20)|Forest Snowglobe Buy]]>><<money -2000>><</link>> <</if>> <br> <</if>> <<clothingcategoryicon "all">> <<link "View All">><<replace "#clothingShop-div">><<AllShop>><</replace>><</link>> <br><br> <<clothingcategoryicon "outfit">> <<link "Look behind the dark screen">><<replace "#clothingShop-div">><<OutfitShop>><</replace>><</link>> <br> <<clothingcategoryicon "upper">> <<link "Look in the antique wardrobe">><<replace "#clothingShop-div">><<TopShop>><</replace>><</link>> <br> <<clothingcategoryicon "lower">> <<link "Look on the strange ironing board">><<replace "#clothingShop-div">><<BottomShop>><</replace>><</link>> <br> <<clothingcategoryicon "underoutfit">> <<link "Look in the moldering hutch">><<replace "#clothingShop-div">><<UnderOutfitShop>><</replace>><</link>> <br> <<clothingcategoryicon "underupper">> <<link "Look on the rusted hangers">><<replace "#clothingShop-div">><<UnderTopShop>><</replace>><</link>> <br> <<clothingcategoryicon "underlower">> <<link "Look in the dusky drawer">><<replace "#clothingShop-div">><<UnderBottomShop>><</replace>><</link>> <br> <<clothingcategoryicon "head">> <<link "Look on the spindly hat stand">><<replace "#clothingShop-div">><<HeadShop>><</replace>><</link>> <br> <<clothingcategoryicon "face">> <<link "Look on the gnarled wall">><<replace "#clothingShop-div">><<FaceShop>><</replace>><</link>> <br> <<clothingcategoryicon "neck">> <<link "Look in the glowing box">><<replace "#clothingShop-div">><<NeckShop>><</replace>><</link>> <br> <<clothingcategoryicon "handheld">> <<link "Look in the rusty umbrella stand">><<replace "#clothingShop-div">><<HandheldShop>><</replace>><</link>> <br> <<clothingcategoryicon "hand">> <<link "Look in the tilted vanity">><<replace "#clothingShop-div">><<HandsShop>><</replace>><</link>> <br> <<clothingcategoryicon "legs">> <<link "Look in the worn stocking">><<replace "#clothingShop-div">><<LegsShop>><</replace>><</link>> <br> <<clothingcategoryicon "feet">> <<link "Look beneath the decaying rack">><<replace "#clothingShop-div">><<FeetShop>><</replace>><</link>> <br><br> <<run linkifyDivs('.button-back-to-shop')>> <<if $tryOn.value gt 0 and $tryOn.value lte $money>> <<sendItemsToDropdown>> <<link "Buy clothes">><<buyTryOnClothes "wear">><<updateclothingshop>><</link>> <br> <<link "Buy clothes and send to wardrobe">> <<buyTryOnClothes "wardrobe">> <<updatesidebarmoney>> <<updatesidebarimg>> <<updatesidebardescription>> <<updateallure>> <<updatewarmthscale>> <<updatewarmthdescription>> <<updateclothingshop>> <</link>> <br> <<elseif $tryOn.value is 0>> <<if $robin_in_forest_shop>> <<getouticon>><<link [[Leave with Robin (0:10)|Robin Forest Shop Home]]>><<endnpc "Gwylan">><<forestShop-leave>><<pass 10>><</link>> <<else>> <<getouticon>><<link [[Leave|Forest]]>><<endnpc "Gwylan">><<forestShop-leave>><</link>> <</if>> <</if>> <</if>> <</widget>>
<<effects>> You search through an assortment of strange clothes, before finding a Christmas-themed outfit in Robin's size. There's a price tag: "£80". <br><br> <<if $money gte 8000>> <<gifticon "christmas hat">><<link [[Buy it|Forest Christmas Robin Buy]]>><<set $christmas_gift_robin to "christmas_unwrapped">><</link>> <br> <</if>> <<getouticon>><<link [[Leave|Forest Shop]]>><</link>> <br>
<<effects>> You hand Gwylan the cash. <<if $christmas_wrap is undefined>>Now you just need wrapping paper. <span class="gold">You can buy some at the shopping centre.</span><<else>>You can wrap it in your room.<</if>> <br><br> <<link [[Next|Forest Shop]]>><</link>> <br>
<<effects>><<npc Gwylan>> You prowl around the shop, looking under cloaks, on top of shelves and behind dressing racks. There's a vague sense of organisation, but things are scattered around anyway, so it could be anywhere. You find a few snow globes, but none with anything written on the bottom. <br><br> "Are you looking for something in particular?" Gwylan says from beside you, startling you. <<He>> hadn't made a sound in <<his>> approach. "I know that look in your eye. You have something in mind." <br> <<if $speech_attitude is "meek">> "I'm trying to find a snow globe," you say. <<elseif $speech_attitude is "bratty">> "Yeah, there's a snow globe I'm looking for," you say. <<else>> "I'm looking for a specific snow globe," you say. <</if>> <br> <<He>> grins. "There's plenty of snow globes around, if that's the case." <br> You shake your head. "I need a specific one. It has something written on the bottom." <br><br> Gwylan thinks for a second. "I think I know which one you're talking about. Hold on." <<switch random(1,5)>> <<case 1>> <<He>> flips up a trapdoor in the floor a few feet away and pulls a snow globe out of a hidden compartment. You stare in bemusement. <<case 2>> <<He>> beelines for the shoe section, rummages through the sandals and pulls a snow globe out from the pile. You stare in bemusement. <<case 3>> <<He>> pushes a witch dress out of the way and enters what appears to be a hidden maintenance room. <<He>> emerges holding a snow globe. You stare in bemusement. <<case 4>> <<He>> quickly exits the shop. You see <<him>> reaching into a nearby bush before the door fully closes. <<He>> quickly enters again, holding a snow globe. You stare, bewildered. <<case 5>> <<He>> walks over to a shelf full of snow globes and plucks one out of the bunch. You resist the urge to groan. How did you miss that shelf? <</switch>> <br><br> <<He>> walks back to you and shows you the bottom. There's a string of random letters and numbers you can't understand. "This the one?" You nod. "Good! That'll be £20." <br><br> <<if $money gte 2000>> <<link [[Purchase the snow globe (£20)|Forest Snowglobe Buy]]>><<money -2000>><</link>> <<else>> You can't afford it. <</if>> <br> <<link [[Back|Forest Shop]]>><<set $pubfame.gwylan.snowglobe to 1>><<endevent>><</link>>
<<effects>><<npc Gwylan>> You hand over the money to Gwylan, and <<he>> hands you the snow globe. "Don't know how you knew there'd be something on the bottom," <<he>> says. "I bet it was looking for you, just as much as you were looking for it!" <br><br> <<pubfameComplete "gwylan">> <<link [[Next|Forest Shop]]>><<endevent>><</link>>
<<widget "specialClothesEffectsSetup">> <<if $specialClothesEffects is undefined>> <<set $specialClothesEffects to { bimbo:0, bimboTotal:0, bimboMessage:0 }>> <</if>> <</widget>> <<widget "bimboCheck">> <<if $worn[_args[0]].type.includes("bimbo")>> <<set $specialClothesEffects.bimbo++>> <</if>> <</widget>> <<widget "bimboUpdate">> <<if $specialClothesEffects.bimbo gt 0>> <<set $breastgrowthtimer -= $specialClothesEffects.bimbo * 5>> <<if $player.penisExist>> <<set $penisgrowthtimer += $specialClothesEffects.bimbo * 5>> <</if>> <<set $bottomgrowthtimer -= $specialClothesEffects.bimbo * 5>> <<if $specialClothesEffects.bimboTotal lt 10000>> <<set $specialClothesEffects.bimboTotal += $specialClothesEffects.bimbo>> <</if>> <<set $specialClothesEffects.bimbo to 0>> <<if $specialClothesEffects.bimboTotal gte 400 and $specialClothesEffects.bimboMessage is 0>> <<set $specialClothesEffects.bimboMessage to 1>><<set _skipEvent to true>> <<if $player.gender_body is "m">> <<set $player.gender_body to "a">> <</if>> <span class="lewd"> You feel different, but you're not sure how or why. <<if $worn.upper.type.includes("bimbo") or $worn.lower.type.includes("bimbo") or $worn.feet.type.includes("bimbo")>> Your clothing seems to cling to you. <</if>> </span> <br> <<elseif $specialClothesEffects.bimboTotal lt 400 and $specialClothesEffects.bimboMessage is 1>> <<set $specialClothesEffects.bimboMessage to 0>> <</if>> <<if $specialClothesEffects.bimboTotal gte 800 and $specialClothesEffects.bimboMessage is 1 and _skipEvent isnot true>> <<set $specialClothesEffects.bimboMessage to 2>><<set _skipEvent to true>> <<if $player.gender_body isnot "f">> <<set $player.gender_body to "f">> <</if>> <span class="lewd"> You feel different yet again, this time you're more sure about it, something is making you look more feminine. Your thoughts turn to the outfit you<<if $worn.upper.type.includes("bimbo") or $worn.lower.type.includes("bimbo") or $worn.feet.type.includes("bimbo")>>'re wearing<<else>> had on earlier<</if>>. </span> <br> <<elseif $specialClothesEffects.bimboTotal lt 800 and $specialClothesEffects.bimboMessage is 2>> <<set $specialClothesEffects.bimboMessage to 1>> <</if>> <<if $specialClothesEffects.bimboTotal gte 1200 and $specialClothesEffects.bimboMessage is 2 and _skipEvent isnot true>> <<set $specialClothesEffects.bimboMessage to 3>> <<if !$backgroundTraits.includes("lustful")>> <<run $backgroundTraits.pushUnique("lustful")>> <</if>> <<arousal 10000>> <span class="lewd">You feel an odd sense of yearning grow within you, and you are filled with a deep desire. An unbearable lust soon takes hold.</span> <br> <<elseif $specialClothesEffects.bimboTotal lt 1200 and $specialClothesEffects.bimboMessage is 3>> <<set $specialClothesEffects.bimboMessage to 2>> <</if>> <</if>> <</widget>> <<widget "heelsUpdate">> <<if $worn.feet.type.includes("heels")>> <<if currentSkillValue("feetskill") lt $worn.feet.reveal>> <<set $tiredness += (($worn.feet.reveal - currentSkillValue("feetskill")) / 150)>> <</if>> <</if>> <</widget>>
<<widget "storeactions">> <<set _temp_strip to _args[0]>> <<exposure>> <<outfitChecks>> <<otherOutfitChecks>> <<if $action_unclad_over_outfit is 1>> <<unset $action_unclad_over_outfit>> <<if $worn.upper.name isnot "naked" and $worn.lower.name isnot "naked">> You remove your $worn.over_upper.name. <<elseif _temp_strip is "wolfcave">> You remove your $worn.over_upper.name. They may be animals, but stripping in front of them makes a chill run through your spine. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.over_upper.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.over_upper.name. Despite being alone, doing this in a public space makes a chill run through your spine. <br> <</if>> <<overupperundress _temp_strip>> <</if>> <<if $action_unclad_over_upper is 1>> <<unset $action_unclad_over_upper>> <<if $worn.upper.name isnot "naked">> You remove your $worn.over_upper.name. <<elseif _temp_strip is "wolfcave">> You remove your $worn.over_upper.name. They may be animals, but stripping in front of them makes your <<nipples>> erect and your newly-exposed skin tingle. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.over_upper.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.over_upper.name. Despite being alone, doing this in a public space makes your <<nipples>> erect and your newly-exposed skin tingle. <br> <</if>> <<overupperundress _temp_strip>> <</if>> <<if $action_unclad_over_lower is 1>> <<unset $action_unclad_over_lower>> <<if $worn.lower.name isnot "naked">> You remove your $worn.over_lower.name. <<elseif _temp_strip is "wolfcave">> You remove your $worn.over_lower.name. They may be animals, but stripping in front of them makes you shiver delightfully. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.over_lower.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.over_lower.name. Despite being alone, doing this in a public space makes you shiver delightfully. <br> <</if>> <<overlowerundress _temp_strip>> <</if>> <<if $action_unclad_outfit is 1>> <<unset $action_unclad_outfit>> <<if _temp_strip is "wolfcave">> You remove your $worn.upper.name. They may be animals, but stripping in front of them makes a chill run through your spine. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.upper.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.upper.name. Despite being alone, doing this in a public space makes a chill run through your spine. <br> <</if>> <<upperundress _temp_strip>> <</if>> <<if $action_unclad_upper is 1>> <<unset $action_unclad_upper>> <<if _temp_strip is "wolfcave">> You remove your $worn.upper.name. They may be animals, but stripping in front of them makes your <<nipples>> erect and your newly-exposed skin tingle. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.upper.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.upper.name. Despite being alone, doing this in a public space makes your <<nipples>> erect and your newly-exposed skin tingle. <br> <</if>> <<upperundress _temp_strip>> <</if>> <<if $action_unclad_lower is 1>> <<unset $action_unclad_lower>> <<if _temp_strip is "wolfcave">> You remove your $worn.lower.name. They may be animals, but stripping in front of them makes you shiver delightfully. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.lower.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.lower.name. Despite being alone, doing this in a public space makes you shiver delightfully. <br> <</if>> <<lowerundress _temp_strip>> <</if>> <<if $action_unclad_under_outfit is 1>> <<unset $action_unclad_under_outfit>> <<if _temp_strip is "wolfcave">> You remove your $worn.under_upper.name. They may be animals, but stripping in front of them makes a chill run through your spine. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.under_upper.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.under_upper.name. Despite being alone, doing this in a public space makes a chill run through your spine. <br> <</if>> <<underupperundress _temp_strip>><<underlowerundress _temp_strip>> <</if>> <<if $action_unclad_under_upper is 1>> <<unset $action_unclad_under_upper>> <<if _temp_strip is "wolfcave">> You remove your $worn.under_upper.name. They may be animals, but stripping in front of them makes your skin and <<genitals 1>> tingle. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.under_upper.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.under_upper.name. Despite being alone, doing this in a public space makes your skin and <<genitals 1>> tingle. <br> <</if>> <<underupperundress _temp_strip>> <</if>> <<if $action_unclad_under_lower is 1>> <<unset $action_unclad_under_lower>> <<if _temp_strip is "wolfcave">> You remove your $worn.under_lower.name. They may be animals, but stripping in front of them makes your skin and <<genitals 1>> tingle. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.under_lower.name.<<if $bird.activity is "bathe">> The <<beasttype>> doesn't seem to mind your exposure.<</if>> <br> <<else>> You check to make sure no one is around, then slowly remove your $worn.under_lower.name. Despite being alone, doing this in a public space makes your skin and <<genitals 1>> tingle. <br> <</if>> <<underlowerundress _temp_strip>> <</if>> <<if $action_unclad_legs is 1>> <<unset $action_unclad_legs>> <<if _temp_strip is "wolfcave">> You remove your $worn.legs.name. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.legs.name<<if $worn.feet.type.includes("naked")>> and dip your feet into the water<</if>>.<<if $bird.activity is "bathe">> The <<beasttype>> looks at your legs, then at <<bhis>> own quizzically.<</if>> <<else>> You remove your $worn.legs.name. <br> <</if>> <<legsundress _temp_strip>> <</if>> <<if $action_unclad_feet is 1>> <<unset $action_unclad_feet>> <<if _temp_strip is "wolfcave">> You remove your $worn.feet.name. You're glad you aren't the only one barefoot here. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.feet.name<<if $worn.legs.type.includes("naked")>> and dip your feet into the water<</if>>.<<if $bird.activity is "bathe" and $monster is 1>> The <<beasttype>> almost looks envious of your ability to hide your "talons".<</if>> <<else>> You remove your $worn.feet.name. <br> <</if>> <<feetundress _temp_strip>> <</if>> <<if $action_unclad_neck is 1>> <<unset $action_unclad_neck>> <<if _temp_strip is "wolfcave">> You remove your $worn.neck.name. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.neck.name. <<else>> You remove your $worn.neck.name. <br> <</if>> <<neckundress _temp_strip>> <</if>> <<if $action_unclad_over_head is 1>> <<unset $action_unclad_over_head>> <<if _temp_strip is "wolfcave">> You remove your $worn.over_head.name. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.over_head.name. <<else>> You remove your $worn.over_head.name. <br> <</if>> <<overheadundress _temp_strip>> <</if>> <<if $action_unclad_head is 1>> <<unset $action_unclad_head>> <<if _temp_strip is "wolfcave">> You remove your $worn.head.name. <br> <<elseif _temp_strip is "birdtower">> You remove your $worn.head.name. <<else>> You remove your $worn.head.name. <br> <</if>> <<headundress _temp_strip>> <</if>> <<if $action_unclad_face is 1>> <<unset $action_unclad_face>> You remove your $worn.face.name. <br> <<faceundress _temp_strip>> <</if>> <<if $action_unclad_handheld is 1>> <<unset $action_unclad_handheld>> <<if _temp_strip isnot "lockers" and _temp_strip isnot "lockers2">> You put down your $worn.handheld.name. <br> <</if>> <<handheldundress _temp_strip>> <</if>> <<if $action_unclad_hands is 1>> <<unset $action_unclad_hands>> <<if _temp_strip is "wolfcave">> You remove your $worn.hands.name. You try to think up a pun about being "bear handed", but then remember you're surrounded by wolves, not bears. <br> <<else>> You remove your $worn.hands.name. <br> <</if>> <<handsundress _temp_strip>> <</if>> <<for _active_clothes range Object.keys($store)>> <<for _i to 0; _i lt $store[_active_clothes].length; _i++>> <<if $store[_active_clothes][_i].location is _temp_strip>> <<set _temp_clothes_present to 1>> <</if>> <</for>> <</for>> <<if _temp_clothes_present is 1 and _temp_strip isnot "lakeshore" and _temp_strip isnot "lockers" and _temp_strip isnot "lockers2">> <br> <<dressasyouwereicon>><<link [[Get dressed|$passage]]>><<storeon _temp_strip "noreplace">><<set $eventskip to 1>><</link>> <br> <</if>> /*Just incase some items are removed*/ <<outfitChecks>> <<otherOutfitChecks>> <<set _stripOptions to {}>> <!-- set up the checks --> <<set _over_upper_protected to $worn.over_upper.exposed lt 2 or $player.gender_appearance_without_overwear isnot "f"; _over_lower_protected to $worn.over_lower.exposed lt 2 and !setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt; _upper_protected to $worn.upper.exposed lt 2 or $player.gender_appearance_without_overwear isnot "f"; _lower_protected to $worn.lower.exposed lt 2 and !setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt; _under_upper_protected to !$worn.under_upper.exposed or $player.gender_appearance_without_overwear isnot "f"; _under_lower_protected to !$worn.under_lower.exposed; >> <<if _temp_strip isnot "lockers" and _temp_strip isnot "lockers2">> <<if !$worn.over_upper.cursed and !$worn.over_lower.cursed and _overOutfit>> <!-- over outfit can be stripped --> <<if hasSexStat("exhibitionism", 2) or ((_lower_protected or _under_lower_protected) and (_upper_protected or _under_upper_protected))>> <!-- pc will still be protected after stripping (or won't care) --> <<set _stripOptions[$worn.over_upper.name] to "stripOverOutfit">> <</if>> <</if>> <<if !$worn.over_upper.cursed and $worn.over_upper.name isnot "naked" and !_overOutfit>> <!-- over_upper can be stripped --> <<if hasSexStat("exhibitionism", 2) or _upper_protected or _under_upper_protected>> <<set _stripOptions[$worn.upper.name] to "stripOverUpper">> <</if>> <</if>> <<if !$worn.over_lower.cursed and $worn.over_lower.name isnot "naked" and !_overOutfit>> <!-- over_lower can be stripped --> <<if hasSexStat("exhibitionism", 3) or _lower_protected or _under_lower_protected>> <<set _stripOptions[$worn.over_lower.name] to "stripOverLower">> <</if>> <</if>> <<if !$worn.upper.cursed and !$worn.lower.cursed and _middleOutfit>> <<if hasSexStat("exhibitionism", 2) or ((_over_lower_protected or _under_lower_protected) and (_over_upper_protected or _under_upper_protected))>> <<set _stripOptions[$worn.upper.name] to "stripOutfit">> <</if>> <</if>> <<if $worn.upper.cursed isnot 1 and $worn.upper.name isnot "naked" and !_middleOutfit>> <<if hasSexStat("exhibitionism", 2) or _over_upper_protected or _under_upper_protected>> <<set _stripOptions[$worn.upper.name] to "stripUpper">> <</if>> <</if>> <<if !$worn.lower.cursed and $worn.lower.name isnot "naked" and !_middleOutfit>> <<if hasSexStat("exhibitionism", 3) or _over_lower_protected or _under_lower_protected>> <<set _stripOptions[$worn.lower.name] to "stripLower">> <</if>> <</if>> <<if !$worn.under_upper.cursed and !$worn.under_lower.cursed and _underOutfit>> <<if hasSexStat("exhibitionism", 2) or ((_over_lower_protected or _lower_protected) and (_over_upper_protected or _upper_protected))>> <<set _stripOptions[$worn.under_upper.name] to "stripUnderOutfit">> <</if>> <</if>> <<if !$worn.under_upper.cursed and $worn.under_upper.name isnot "naked" and !_underOutfit>> <<if hasSexStat("exhibitionism", 2) or _over_upper_protected or _upper_protected>> <<set _stripOptions[$worn.under_upper.name] to "stripUnderUpper">> <</if>> <</if>> <<if !$worn.under_lower.cursed and $worn.under_lower.name isnot "naked" and !_underOutfit>> <<if hasSexStat("exhibitionism", 3) or _over_lower_protected or _lower_protected>> <<set _stripOptions[$worn.under_lower.name] to "stripUnderLower">> <</if>> <</if>> <<if !$worn.legs.cursed and !_otherOutfits.legs and $worn.legs.name isnot "naked">> <<set _stripOptions[$worn.legs.name] to "stripLegs">> <</if>> <<if !$worn.feet.cursed and !_otherOutfits.feet and $worn.feet.name isnot "naked">> <<set _stripOptions[$worn.feet.name] to "stripFeet">> <</if>> <<if !$worn.neck.cursed and !_otherOutfits.neck and $worn.neck.name isnot "naked">> <<set _stripOptions[$worn.neck.name] to "stripNeck">> <</if>> <<if !$worn.over_head.cursed and !_otherOutfits.over_head and $worn.over_head.name isnot "naked">> <<set _stripOptions[$worn.over_head.name] to "stripOverHead">> <</if>> <<if !$worn.head.cursed and !_otherOutfits.head and $worn.head.name isnot "naked">> <<set _stripOptions[$worn.head.name] to "stripHead">> <</if>> <<if !$worn.face.cursed and !_otherOutfits.face and $worn.face.name isnot "naked">> <<set _stripOptions[$worn.face.name] to "stripFace">> <</if>> <<if !$worn.hands.cursed and !_otherOutfits.hands and $worn.hands.name isnot "naked">> <<set _stripOptions[$worn.hands.name] to "stripHands">> <</if>> <</if>> <<if !$worn.handheld.cursed and !_otherOutfits.handheld and $worn.handheld.name isnot "naked">> <<set _stripOptions[$worn.handheld.name] to "stripHandheld">> <</if>> <<if Object.keys(_stripOptions).length gt 0>> <<if _temp_strip isnot "lockers" and _temp_strip isnot "lockers2">> Remove<<if _temp_strip isnot "birdtower">> and hide<</if>> your... <<listbox "$storeActions">> <<optionsfrom _stripOptions>> <</listbox>> <<link [[Confirm|$passage]]>> <<set $eventskip to 1>> <<switch $storeActions>> <<case "stripOverOutfit">><<set $action_unclad_over_outfit to 1>> <<case "stripOverUpper">><<set $action_unclad_over_upper to 1>> <<case "stripOverLower">><<set $action_unclad_over_lower to 1>> <<case "stripOutfit">><<set $action_unclad_outfit to 1>> <<case "stripUpper">><<set $action_unclad_upper to 1>> <<case "stripLower">><<set $action_unclad_lower to 1>> <<case "stripUnderOutfit">><<set $action_unclad_under_outfit to 1>> <<case "stripUnderUpper">><<set $action_unclad_under_upper to 1>> <<case "stripUnderLower">><<set $action_unclad_under_lower to 1>> <<case "stripLegs">><<set $action_unclad_legs to 1>> <<case "stripFeet">><<set $action_unclad_feet to 1>> <<case "stripNeck">><<set $action_unclad_neck to 1>> <<case "stripOverHead">><<set $action_unclad_over_head to 1>> <<case "stripHead">><<set $action_unclad_head to 1>> <<case "stripFace">><<set $action_unclad_face to 1>> <<case "stripHands">><<set $action_unclad_hands to 1>> <<case "stripHandheld">><<set $action_unclad_handheld to 1>> <<default>> <</switch>> <</link>> <br><br> <<elseif (_temp_strip is "lockers" and clothingInStorage("lockers").length is 0 and clothingInStorage("lockers2").length is 0)>> <br> <<lockericon>> <<link [[`Put your ${$worn.handheld.name} in your locker`|$passage]]>> <<set $eventskip to 1>> <<set $action_unclad_handheld to 1>> <</link>> <br> <</if>> <</if>> <<exposure>> <</widget>>
<<widget "wardrobewear">> <!-- Note: Don't use $_ in this widget, because this widget gets <<replace>>'d into the passage body --> <<if $wardrobes[$wardrobe_location] is undefined>> <span class="red">A wardrobe error occurred, please report. The default wardrobe will be shown in place of the intended wardrobe.</span> <br> <!--$wardrobe_location should always point to a specific wardrobe inside of $wardrobes--> wardrobe_location: <<print $wardrobe_location>> <br> passage: <<print $passage>> <br><br> <<wardrobeSelection true>> <</if>> <<set _selectedWardrobe to selectWardrobe()>> <<wardrobeSanityCheck>> <<if $clothingShop.stolenClothes gt 0>> <<set $clothingShop.stolenClothes to 0>> <span class="gold">You place the clothes you recently stole from the shop in your wardrobe.</span> <br> <</if>> <<if $adultShop isnot undefined and $adultShop.stolenClothes gt 0>> <<set $adultShop.stolenClothes to 0>> <span class="gold">You place the clothes you recently stole from the adult shop in your wardrobe.</span> <br> <</if>> <<if _wearAction is "strip">> You remove your clothing. <br><br> <<undress $wardrobe_location>> <</if>> <<wearoutfit>> <<if $randomWear>> <<randomWear>> <</if>> <<if $repairAll isnot undefined and $repairAll is true>> <<unset $repairAll>> <<set _repairCount to 0>> <<for _key range Object.keys($wardrobe)>> <<if !Array.isArray($wardrobe[_key]) or $wardrobe[_key].length is 0>> <<continue>> <</if>> <<for _i to 0; _i lt $wardrobe[_key].length; _i++>> <<if $wardrobe[_key][_i].integrity lt clothingData(_key, $wardrobe[_key][_i],'integrity_max')>> <<set _repairCount += Math.ceil((clothingData(_key, $wardrobe[_key][_i],'integrity_max') - $wardrobe[_key][_i].integrity) / 25)>> <<set $wardrobe[_key][_i].integrity = clothingData(_key, $wardrobe[_key][_i],'integrity_max')>> <</if>> <</for>> <</for>> <<set _timeNeeded to (10 - (1 * Math.round($housekeeping / 250))) * _repairCount>> <<set _gain to Math.max((6 - (2 * Math.round($housekeeping / 200))) * _repairCount, 2 * _repairCount)>> <<housekeeping _gain 1000>> <<updatesidebarimg>> <<set $DoLPSpools -= _repairCount>> <<pass _timeNeeded>> <</if>> <<set _equip to ["over_upper", "over_lower", "upper", "lower", "under_upper", "under_lower", "over_head", "head", "face", "neck", "hands", "handheld", "legs", "feet", "genitals"]>> <<set _slimePrevent to ["upper", "lower", "under_upper", "under_lower"]>> <<set _towelCheck to ["upper", "lower"]>> <<set _equipSkip to {"over_upper":false, "over_lower":false, "upper":false, "lower":false, "under_upper":false, "under_lower":false, "over_head":false, "head":false, "face":false, "neck":false, "hands":false, "handheld":false, "legs":false, "feet":false, "genitals":false}>> <<set _eIndextemNames to []>> <<for _slot range _equip>> <<unset _outfitPieceIds>> <<unset _item>> <<if _equipSkip[_slot] is true>> <<continue>> <</if>> <<if !Object.keys($worn).includes(_slot)>> <<continue>> <<else>> <<set _wearId to V["wear_"+_slot]>> <</if>> <<if _wearId is "none">> <<continue>> <</if>> <<if $wardrobeOption is "wear" or ["strip","towel","large_towel"].includes(_wearId)>> /*Checks for cursed equip*/ <<unset _cursedPrevent>> <<set _wornOutfitPrimary to $worn[_slot].outfitPrimary>> <<if $worn[_slot].cursed is 1>> You try to remove the <<print $worn[_slot].name>>, but fail. <<cursedtext $worn[_slot].name>> <br> <<set _cursedPrevent to true>> <</if>> <<if _wornOutfitPrimary isnot undefined>> <<for $_outfitPieceSlot, $_outfitPieceName range _wornOutfitPrimary>> <<if $worn[$_outfitPieceSlot].cursed is 1 and _cursedPrevent isnot true>> <<capture $_outfitPieceSlot>> <<cursedtext $worn[$_outfitPieceSlot].name>> <</capture>> <<set _cursedPrevent to true>> <</if>> <</for>> <</if>> <<if _cursedPrevent is true>> <<continue>> <</if>> /*Strips equip and puts it in the wardrobe*/ <<if _wearId is "strip" and $worn[_slot].name isnot "naked">> You remove the <<print $worn[_slot].name>>. <<generalUndress $wardrobe_location _slot>> <br> <<if _wornOutfitPrimary isnot undefined>> <<for $_outfitPieceSlot, $_outfitPieceName range _wornOutfitPrimary>> <<if $_outfitPieceName isnot "broken" and $_outfitPieceName isnot "split" and $worn[$_outfitPieceSlot].name isnot "naked">> You remove the <<print $worn[$_outfitPieceSlot].name>>. <<generalUndress $wardrobe_location $_outfitPieceSlot>> <</if>> <</for>> <</if>> <<continue>> <</if>> <<unset _wornOutfitPrimary>> /*Strips equip, puts it in the wardrobe and equips a towl*/ <<if _wearId is "towel" and _towelCheck.includes(_slot)>> <<generalUndress $wardrobe_location _slot>> <<set $worn[_slot] to clone(setup.clothes[_slot][3])>><<set $worn[_slot].colour to clone($worn[_slot].colour_options.random())>> <<if _slot is "upper">> You tie a towel around your chest. <<else>> You tie a towel around your waist. <</if>> <br><br> <<continue>> <</if>> <<if _wearId is "large_towel" and _slot is "upper">> <<generalUndress $wardrobe_location "upper">><<generalUndress $wardrobe_location "lower">> <<set $worn.upper to clone(setup.clothes.upper[14])>><<set $worn.upper.colour to clone($worn.upper.colour_options.random())>> <<set $worn.lower to clone(setup.clothes.lower[15])>><<set $worn.lower.colour to clone($worn.upper.colour)>> You tie a large towel around your chest. <br><br> <<continue>> <</if>> <</if>> /*Find the item to equip*/ <<if _wearId gte 0>> <<set _item to _selectedWardrobe[_slot][_wearId]>> <<else>> <<continue>> <</if>> /*Prevent equip when preggy*/ <<if playerBellySize() gte 12 and _item.type.includes("constricting") and $wardrobeOption is "wear">> <<if _item.type.includes("chest_bind")>> <span class="red">Your pregnant body is too sensitive to wear your _item.name.</span> <<else>> <span class="red">Your <<bellyDescription "pc">> is too large to wear your _item.name.</span> <</if>> <br> <<continue>> <</if>> /*Prevent equip when the ear slime doesn't allow it*/ <<if _slimePrevent.includes(_slot) and $wardrobeOption is "wear" and $earSlime.corruption gte 10>> <<if $earSlime.forcedCommando isnot undefined and (_slot is "under_lower" or (_item.outfitPrimary and _item.outfitPrimary.under_lower and !["broken","split"].includes(_item.outfitPrimary.under_lower)))>> <<if _item.type.includes("naked") or (_earSlimeEnableSwimwear and _item.type.includes("swim")) or (_earSlimeEnableDancewear and _item.type.includes("dance"))>> <<elseif $earSlime.forcedCommando gt 0>> <span class="red">You are unable to equip your _item.name, as the slime in your ear is forcing you to go commando.</span> <br> <<continue>> <<else>> <<run delete $earSlime.forcedCommando>> <</if>> <<elseif _item.reveal lt earSlimeCorruptionClothes() and (["prison", "asylum"].includes($location) or !_allowSchoolClothes) and !_item.type.includesAny("event")>> <span class="red">You were unable to equip your _item.name as the slime in your ear did not permit it.</span> <br> <<continue>> <<elseif $earSlime.forcedDressing and _item.gender isnot $earSlime.forcedDressing.type and _item.gender isnot "n" and !_item.type.includesAny("event")>> <<if $earSlime.forcedDressing.days gt 0>> <span class="red">You are unable to equip your _item.name, as the slime in your ear is only permitting more <<print $earSlime.forcedDressing.type is "f" ? "feminine" : "masculine">> clothing.</span> <br> <<continue>> <<else>> <<run delete $earSlime.forcedDressing>> <</if>> <</if>> <</if>> /*Finds any outfit pieces and records the Ids*/ <<set _outfitPieceIds to {}>> <<if _item.outfitPrimary isnot undefined>> <<for $_outfitPieceSlot, $_outfitPieceName range _item.outfitPrimary>> <<if $_outfitPieceName is "broken" or $_outfitPieceName is "split">> <<continue>> <</if>> <<for $_outfitPieceId, $_wardrobeItem range _selectedWardrobe[$_outfitPieceSlot]>> <<if $_wardrobeItem.name isnot $_outfitPieceName>> <<continue>> <</if>> <<if _item.colour isnot $_wardrobeItem.colour or ($_wardrobeItem.accessory isnot 0 and _item.accessory_colour isnot $_wardrobeItem.accessory_colour)>> <<continue>> <</if>> <<if $_wardrobeItem.outfitSecondary[1] isnot _item.name>> <<continue>> <</if>> <<set _matched to 0>> <<if $_wardrobeItem.colour isnot "custom" or (_item.colourCustom isnot undefined and _item.colourCustom is $_wardrobeItem.colourCustom)>> <<set _matched++>> <</if>> <<if $_wardrobeItem.accessory is 0 or $_wardrobeItem.accessory_colour isnot "custom" or (_item.accessory_colourCustom isnot undefined and _item.accessory_colourCustom is $_wardrobeItem.accessory_colourCustom)>> <<set _matched++>> <</if>> <<if _matched is 2>> <<set _outfitPieceIds[$_outfitPieceSlot] to $_outfitPieceId>> <<set _equipSkip[$_outfitPieceSlot] to true>> <<break>> <</if>> <</for>> <</for>> <</if>> <<if $wardrobeOption is "delete">> /*Delete the relating items*/ <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> <<set _selectedWardrobe[$_outfitSlot].deleteAt($_outfitId)>> <</for>> You discard the <<print _item.name>>. <<set _selectedWardrobe[_slot].deleteAt(_wearId)>> <br> <<elseif $wardrobeOption is "repair">> <<set _item.integrity to clothingData(_slot,_item,'integrity_max')>> <<set $_timeSpent to 5>> /*Repair the relating items*/ <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> <<set _selectedWardrobe[$_outfitSlot][$_outfitId].integrity to clothingData($_outfitSlot,_selectedWardrobe[$_outfitSlot][$_outfitId],'integrity_max')>> <<set $_timeSpent += 5>> <</for>> <<pass $_timeSpent>> You repair the <<print _item.name>>. <br> <<elseif $wardrobeOption is "separateOutfits" and Object.values(_outfitPieceIds).length gt 0>> <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> <<set _selectedWardrobe[$_outfitSlot][$_outfitId].outfitSecondary[1] to "split">> <<set _selectedWardrobe[$_outfitSlot][$_outfitId].one_piece to "split">> <<set _item.outfitPrimary[$_outfitSlot] to "split">> <</for>> <<set _item.one_piece to "split">> You cut up the <<print _item.name>>. <<pass 10>> <br> <<elseif $wardrobeOption is "transfer" and _wardrobeTransfer isnot $wardrobe_location and _wardrobeTransfer isnot undefined>> <<unset _slotsFull>> /*Set the target wardrobe*/ <<set _wardrobeTransferObject to selectWardrobe(_wardrobeTransfer)>> /*Make sure there is enough space*/ <<if _wardrobeTransferObject[_slot].length gt _wardrobeTransferObject.space>> <<set _slotsFull to true>> <</if>> <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> <<if _wardrobeTransferObject[$_outfitSlot].length gt _wardrobeTransferObject.space>> <<set _slotsFull to true>> <</if>> <</for>> <<if !_slotsFull>> You transferred the <<print _item.name>> to the <<print $wardrobes[_wardrobeTransfer].name>> storage. /*Transfer everything*/ <<run transferClothing(_slot,_wearId,_wardrobeTransfer)>> <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> <<run transferClothing($_outfitSlot,$_outfitId,_wardrobeTransfer)>> <</for>> <<else>> You were unable to transfer the <<print _item.name>> to the <<print $wardrobes[_wardrobeTransfer].name>> wardrobe due to lack of space there. <</if>> <<elseif $wardrobeOption is "wear">> /*Equip the relating items*/ <<generalUndress $wardrobe_location _slot>> <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> <<generalUndress $wardrobe_location $_outfitSlot>> <<set $worn[$_outfitSlot] to clone(_selectedWardrobe[$_outfitSlot][$_outfitId])>> <<set $worn[$_outfitSlot].lastTaken to $wardrobe_location>> <<set _selectedWardrobe[$_outfitSlot].deleteAt($_outfitId)>> <<run resetClothingState($_outfitSlot)>> <</for>> <<set $worn[_slot] to clone(_item)>> <<set $worn[_slot].lastTaken to clone($wardrobe_location)>> <<run resetClothingState(_slot)>> <<set _eIndextemNames.push(_item.name)>> <<set _selectedWardrobe[_slot].deleteAt(_wearId)>> <</if>> <</for>> <<if $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to "notWorn">> <</if>> <<if $wardrobeOption is "wear" and _eIndextemNames.length gte 1>> You put on the <<print formatList(_eIndextemNames)>>. <</if>> <<if _wearAction is "dry">> <<dry>> You squeeze the water from your clothes. <<effectswater>> <br><br> <</if>> <<unset _wearAction>> <<set $wear_over_upper to "none">> <<set $wear_over_lower to "none">> <<set $wear_upper to "none">> <<set $wear_lower to "none">> <<set $wear_under_upper to "none">> <<set $wear_under_lower to "none">> <<set $wear_over_head to "none">> <<set $wear_head to "none">> <<set $wear_face to "none">> <<set $wear_neck to "none">> <<set $wear_hands to "none">> <<set $wear_handheld to "none">> <<set $wear_legs to "none">> <<set $wear_feet to "none">> <<set $wear_genitals to "none">> <<set $wear_outfit to "none">> <<exposure>> <</widget>> <<widget "wardrobe">> <<set _inWardrobe to true>> <div id="action-popup">Don't look here.</div> <<unset $tempDisable>> <hr> <span>Warmth:</span> <<warmthscale>> <div id="warmth-description"> <<warmth_description>> </div> <br> <div id="clotheson"><<clotheson>></div> /*Fixes perma pulled aside clothes introduced by 0.2.3.0 bug.*/ <<if $upperwet gte 1 or $lowerwet gte 1 or $underlowerwet gte 1 or $underupperwet gte 1>> <div class="wardrobe-dry"> <<link "Dry your clothes">> <<set _wearAction to "dry">> <<updatewardrobe>> <<if $upperwet lt 1 and $lowerwet lt 1 and $underlowerwet lt 1 and $underupperwet lt 1>> <<remove ".wardrobe-dry">> <</if>> <</link>> <br> </div> <</if>> <div class="wardrobe-action"> <<link "Strip all">> <<set _wearAction to "strip">> <<updatewardrobe>> <</link>> </div> | <<set _repairCount to 0>> <<for _key range Object.keys($wardrobe)>> <<if !Array.isArray($wardrobe[_key]) or $wardrobe[_key].length is 0>> <<continue>> <</if>> <<for _i to 0; _i lt $wardrobe[_key].length; _i++>> <<if $wardrobe[_key][_i].integrity lt clothingData(_key, $wardrobe[_key][_i],'integrity_max')>> <<set _repairCount += Math.ceil((clothingData(_key, $wardrobe[_key][_i], 'integrity_max') - $wardrobe[_key][_i].integrity) / 25)>> <</if>> <</for>> <</for>> <<set _timeNeeded to (10 - (1 * Math.round($housekeeping / 250))) * _repairCount>> <<set _timeString to getTimeString(_timeNeeded)>> <<if $DoLPSpools isnot undefined and _repairCount gt 0>> <div class="wardrobe-action"> <<if $DoLPSpools gte _repairCount>> <<link [["Repair all (_timeString)"|$passage]]>> <<set $repairAll to true>> <<updatewardrobe>> <</link>><<ghousekeeping 1000>> <<else>> <span class="red">You only have $DoLPSpools spools, you need _repairCount to repair all.</span> <</if>> </div> | <</if>> <div class="wardrobe-action"> <<link "Wear random clothes">> <<set $randomWear to true>> <<updatewardrobe>> <</link>> </div> | <div class="wardrobe-action"> <<link "Configure random">><<toggleclass "#randomClothingConfigure" "hidden">><</link>> </div> | <<if $options.images and ($uncomfortable.underwear or $uncomfortable.nude)>> <div class="wardrobe-action"> <span id="wardrobe-cover" @class="$dontHide ? '' : 'hidden'"> <<link "Cover yourself">> <<dontHideRevert>> <<toggleclass "#wardrobe-cover" "hidden">> <<toggleclass "#wardrobe-dontCover" "hidden">> <<updatesidebarimg>> <</link>> </span> <span id="wardrobe-dontCover" @class="$dontHide ? 'hidden' : ''"> <<link "Don't cover yourself">> <<dontHideForNow>> <<toggleclass "#wardrobe-cover" "hidden">> <<toggleclass "#wardrobe-dontCover" "hidden">> <<updatesidebarimg>> <</link>> </span> </div> | <</if>> <div id="randomClothingConfigure" class="hidden"> <<if $randomEquipConfigure is undefined>> <<set $randomEquipConfigure to {face: true, feet: true, head: true, hands: true, legs: true, lower: true, neck: true, under_lower: true, under_upper: true, upper: true}>> <</if>> <<for _slot range Object.keys($randomEquipConfigure)>> <<capture _slot>> <label><<checkbox "$randomEquipConfigure[_slot]" false true autocheck>> <<print _slot.replace("_"," ")>></label><br> <</capture>> <</for>> </div> <br><br> <<if $location is "home" or $location is "town">> <<if $tailorMonthlyService is "repair">> __Wardrobe Repair Crate__ <br> There is a small crate ready for sending clothes to be repaired. <br> <<link [[Add damaged items and send|Wardrobe Repair Crate]]>> <<set $wardrobeReturnLink to $passage>> <<set $crateContents to "damaged">> <</link>> <br> <<link [[Add outfits and send|Wardrobe Repair Crate]]>> <<set $wardrobeReturnLink to $passage>> <<set $crateContents to "outfits">> <</link>> <br> <<link [[Add all items and send|Wardrobe Repair Crate]]>> <<set $wardrobeReturnLink to $passage>> <<set $crateContents to "all">> <</link>> <br><br> <<link [[Cancel the request|$passage]]>><<set $tailorMonthlyService to 1>><</link>> <br><br> <<elseif $tailorMonthlyService is "discard">> __Wardrobe Sale Crate__ There is a small crate ready for sending clothes to be sold. <br> <<link [[Add outfits and send|Wardrobe Sale Crate]]>> <<set $wardrobeReturnLink to $passage>> <<set $crateContents to "outfits">> <</link>> <br> <<link [[Add all items and send|Wardrobe Sale Crate]]>> <<set $wardrobeReturnLink to $passage>> <<set $crateContents to "all">> <</link>> <br><br> <<link [[Cancel the request|$passage]]>><<set $tailorMonthlyService to 1>><</link>> <br><br> <</if>> <<if $wardrobeRepair is undefined>> <<elseif $wardrobeRepair.timeLeft is 0>> The clothes sent to the tailor have been repaired and added back into your wardrobe. <<wardrobeGetRepairedClothes>> <br><br> <</if>> <</if>> __Clothing sets__ <br> <div id="listoutfits"><<listoutfits>></div> <hr> __Clothing__ <br> <<dynamic "wardrobeLinks" "wardrobeLinks">> <<dynamic "wardrobeContents" "wardrobeList">> <br> <<set $upperoff to 0>> <<set $loweroff to 0>> <<set $underloweroff to 0>> <<set $underupperoff to 0>> <<exposure>> <!-- Code responsible for brief highlighting of links in wardrobe when you click them --> <<run $(document).on('mousedown', '.wardrobe-action a', (e) => { let target = $(e.currentTarget).parent(); target.addClass('notransition action-flash'); setTimeout(() => { target.removeClass('notransition action-flash') }, 100); })>> <</widget>> <<widget "wardrobeContents">> <<if $lastWardrobeSlot is "NewOutfit">> <<wardrobeNewOutfit>> <<else>> <<wardrobeList $lastWardrobeSlot>> <</if>> <</widget>> <<widget "wardrobeLinks">> <<set _wardrobeLinks=[ { id: 'over_head', label: 'Over Head', disabled: !$debug }, { id: 'over_upper', label: 'Over Upper', disabled: !$debug }, { id: 'over_lower', label: 'Over Lower', disabled: !$debug }, { id: 'head', label: 'Head' }, { id: 'face', label: 'Face' }, { id: 'neck', label: 'Neck' }, { id: 'upper', label: 'Upper' }, { id: 'lower', label: 'Lower' }, { id: 'under_upper', label: 'Under Upper' }, { id: 'under_lower', label: 'Under Lower' }, { id: 'hands', label: 'Hands' }, { id: 'handheld', label: 'Handheld' }, { id: 'legs', label: 'Legs' }, { id: 'feet', label: 'Feet' }, ]>> <<for _i = 0; _i < _wardrobeLinks.length; _i++>> <<set _wardrobeLink=_wardrobeLinks[_i]>> <<if !_wardrobeLink.disabled>> <a @class="($lastWardrobeSlot is _wardrobeLink.id ? 'selected' : '')" @id="Dynamic.eventBinder(_wardrobeLink.id)" onclick="(id) => $lastWardrobeSlot = id" >_wardrobeLink.label</a><<if _i < _wardrobeLinks.length - 1>> | <</if>> <</if>> <</for>> <</widget>> <<widget "wardrobeClothingOptions">> <br> <<if $wardrobeOption is undefined or $wardrobeOption is 0>><<set $wardrobeOption to "wear">><</if>> <<if $wardrobeRepeat isnot true or ($wardrobeOption is "repair" and $location isnot "home")>><<set $wardrobeOption to "wear">><</if>> <label><<radiobutton "$wardrobeOption" "wear" autocheck>> Wear</label> | <label><<radiobutton "$wardrobeOption" "delete" autocheck>> Discard</label> | <<if $sewingKit is 1 and $location is "home">> <label><<radiobutton "$wardrobeOption" "repair" autocheck>> Repair (0:05 per piece)</label> | <</if>> <label><<radiobutton "$wardrobeOption" "separateOutfits" autocheck>> Separate Outfits (0:10)</label> | <<if $multipleWardrobes is "all" and !$wardrobes[$wardrobe_location].isolated>> <label><<radiobutton "$wardrobeOption" "transfer" autocheck>> Transfer:</label> <<set _options to {}>> <<for _label, _value range $wardrobes>> <<if _value.unlocked and _label isnot $wardrobe_location and !$wardrobes[_label].isolated>> <<set _options[_value.name] to _label>> <</if>> <</for>> <<listbox "_wardrobeTransfer" autoselect>> <<optionsfrom _options>> <</listbox>> | <</if>> <label><<checkbox "$wardrobeRepeat" false true autocheck>> Repeat Actions</label> <<if $wardrobeOption is "delete" and $wardrobeRepeat is true>> <h2 class="red">Discard On Repeat</h2> <<else>> <br><br> <</if>> <</widget>> <<widget "wardrobeNewOutfit">> <br> Add new set: <br> Name: <input id="outfitName" type="text" value="Custom" maxlength="30" onfocus="V.tempDisable = true;"> <br> Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label>Sleep<<radiobutton "$outfit_type" "sleep">></label> | <label>Swimming<<radiobutton "$outfit_type" "swim">></label> <br> <label> Save Clothes Colours in Set <<checkbox "_saveColor" false true autocheck>> </label> <br> <<if $multipleWardrobes>> <label> Make clothes set unique to this wardrobe <<checkbox "_saveLocation" false true autocheck>> </label> <br> <</if>> <<if $savedHairStyles>> <div> <<set _savedHairStylesKeys to Object.keys($savedHairStyles)>> Hair Style: <<listbox "_hairStyle" autoselect>> <<option "Not set" undefined>> <<optionsfrom _savedHairStylesKeys>> <</listbox>> <mouse class="tooltip linkBlue">(?)<span>'Not set' will not change the current hairstyle.</span></mouse> </div> <<else>> <div> Hair Style: No sets saved (Check mirror) </div> <</if>> <br> <div class="wardrobe-action"> <<link "Add current clothes as new set">> <<set $outfit_name to document.getElementById("outfitName").value.replace(/[^a-zA-Z\u4e00-\u9fa5 0-9.!()]+/g,"")>> <<set _newOutfit to { index: $outfit.length, name: $outfit_name, over_upper: clone($worn.over_upper.name), over_lower: clone($worn.over_lower.name), upper: clone($worn.upper.name), lower: clone($worn.lower.name), under_upper: clone($worn.under_upper.name), under_lower: clone($worn.under_lower.name), over_head: clone($worn.over_head.name), head: clone($worn.head.name), face: clone($worn.face.name), neck: clone($worn.neck.name), hands: clone($worn.hands.name), handheld: clone($worn.handheld.name), legs: clone($worn.legs.name), feet: clone($worn.feet.name), genitals: clone($worn.genitals.name), type: ["normal"], colors: false }>> <<if $outfit_name is "" or $outfit_name is "Custom">><<set $outfit_name to "Custom " + $outfit.length>><</if>> <<set _newOutfit.name to $outfit_name>> <<if $outfit_type>> <<set _newOutfit.type[0] to $outfit_type>> <</if>> <<if _saveColor>> <<set _equip to ["over_upper", "over_lower", "upper", "lower", "under_upper", "under_lower", "over_head", "head", "face", "neck", "hands", "handheld", "legs", "feet"]>> <<set _colors to {}>> <<for _slot range _equip>> <<set _colors[_slot] to [$worn[_slot].colour, $worn[_slot].accessory_colour]>> <<if $worn[_slot].colour is "custom" or $worn[_slot].accessory_colour is "custom">> <<run _colors[_slot+"custom"] to [$worn[_slot].colourCustom, $worn[_slot].accessory_colourCustom]>> <</if>> <</for>> <<set _newOutfit.colors to _colors>> <<else>> <<set _newOutfit.colors to false>> <</if>> <<if _saveLocation>> <<set _newOutfit.location to $wardrobe_location>> <</if>> <<if _hairStyle>> <<set _newOutfit.hairStyle to _hairStyle>> <</if>> <<set $outfit.push(_newOutfit)>> <<updatewardrobe "outfits">> <</link>> </div> <</widget>> <<widget "wardrobeintegrity">><<silently>> <<set _eIndextem to _args[0]>> <<set _eIndexntegrityMax to clothingData(_args[1],_eIndextem,'integrity_max')>> <<set _eIndexntegrity to clothingData(_args[1],_eIndextem,'integrity')>> <<if _eIndextem.integrity gt (_eIndexntegrityMax * 9 / 10)>> <<set $_output to "(_eIndexntegrity/_eIndexntegrityMax)">> <<elseif _eIndextem.integrity gt (_eIndexntegrityMax * 5 / 10)>> <<set $_output to "<span>(frayed) (_eIndexntegrity/_eIndexntegrityMax)</span>">> <<elseif _eIndextem.integrity gt (_eIndexntegrityMax * 2 / 10)>> <<set $_output to "<span>(torn) (_eIndexntegrity/_eIndexntegrityMax)</span>">> <<else>> <<set $_output to "<span>(tattered) (_eIndexntegrity/_eIndexntegrityMax)</span>">> <</if>> <</silently>><<print $_output>><</widget>> <<widget "toggleHoodLink">> <div class="toggleHoodLink"> <<link `($worn.upper.hoodposition is "down" ? "Pull hood up" : "Pull hood down")`>> <<toggleHood _args[0]>> <<updatesidebarimg>> <<if _args[0] isnot "shop">> <<updatewardrobe>> <</if>> <<run $(".toggleHoodLink .link-internal").html($worn.upper.hoodposition is "down" ? "Pull hood up" : "Pull hood down")>> <<run Links.generateLinkNumbers($(".passage"))>> <</link>> </div> <</widget>> <<widget "toggleHood">> /* If hood is up, put it down and free up the head slot*/ <<if $worn.upper.hoodposition is "up" and $worn.head.hood is 1 and $worn.upper.outfitPrimary.head is $worn.head.name>> <<run delete $worn.upper.outfitPrimary.head>> <<set $worn.upper.hoodposition to "down">> <<if _args[0] is "shop" and $tryOn.ownedStored.head.name isnot $worn.head.name and !($tryOn.ownedStored.head.outfitSecondary and $tryOn.ownedStored.head.outfitSecondary[1] isnot "broken" and $tryOn.ownedStored.head.outfitSecondary[1] isnot "split")>> <<set $worn.head to clone($tryOn.ownedStored.head)>> <<else>> <<set $worn.head to clone(setup.clothes.head[0])>> <</if>> <<if _args[0] is "shop" and $tryOn.tryingOn.upper is null>> <<updateOwned "upper">> <<updateOwned "head">> <</if>> /* If hood is down, put it back up and remove anything on the head if necessary */ <<elseif $worn.upper.hoodposition is "down">> <<if !$worn.head.cursed>> /* No cursed head items yet, but if one is made, should probably have some popup saying this was prevented */ <<if $worn.head.outfitSecondary and $worn.head.outfitSecondary[1] isnot "broken" and $worn.head.outfitSecondary[1] isnot "split">> <<if $worn.head.hood is 1 and $worn.head.outfitSecondary[1] is $worn.upper.name and $worn.head.colour is $worn.upper.colour and $worn.head.accessory_colour is $worn.upper.accessory_colour and $worn.head.colourCustom is $worn.upper.colourCustom and $worn.head.accessory_colourCustom is $worn.upper.accessory_colourCustom>> <<set $worn.upper.outfitPrimary.head to clone(setup.clothes.upper[$worn.upper.index].outfitPrimary.head)>> <<set $worn.upper.hoodposition to "up">> <</if>> <<else>> <<if _args[0] is "shop">> /*If in a shop, make sure the head item is accounted for first*/ <<if $tryOn.tryingOn.head isnot null>> <<shopbuyv2 "head" "return" null>>/*return if trying on*/ <</if>> <<if $tryOn.tryingOn.upper is null and $worn.head.name isnot "naked">> <<generalUndress $wardrobe_location "head">>/*send back to wardrobe if already owned*/ <</if>> <<elseif $worn.head.name isnot "naked">> <<generalUndress $wardrobe_location "head">> <</if>> <<set $worn.upper.outfitPrimary.head to clone(setup.clothes.upper[$worn.upper.index].outfitPri