JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
Welcome to Degrees of Lewdity <<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 <<- 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>
<<if $intro is undefined>> <<gameStartOnly>> <</if>> <<if $options.images is 1>> <<banner>> <</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> <<set $settingsExitPassage to "Start2">> <<initsettings>> <div id="settingsStart"> <<settingsStart>> </div>
<<variablesStart2>> Welcome to the alpha of Degrees of Lewdity! <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>Version <<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 website</p> [[vrelnir.com|"https://www.vrelnir.com"]] </div> <div class="m-2"> <p class="gold m-0">Changelog and information</p> [[vrelnir.blogspot.com|"https://vrelnir.blogspot.com"]] </div> <div class="m-2"> <p class="gold m-0">Support development</p> [[subscribestar.adult/vrelnir|"https://subscribestar.adult/vrelnir"]] </div> <<if StartConfig.sourceLinkEnabled>> <div class="m-2"> <p class="gold m-0">Source code</p> [[gitgud.io/Vrelnir|"https://gitgud.io/Vrelnir/degrees-of-lewdity"]] </div> <</if>> <<if StartConfig.socialMediaEnabled>> <div class="m-2"> <p class="gold m-0">Official Discord</p> [[discord.gg/VznUtEh|"https://discord.gg/VznUtEh"]] </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"]>> %/ <<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"]>> <<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"]>> <!-- 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"]>> <<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"]>> <<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>> <</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>> <<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> <</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"].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>> <<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>>
<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>> <<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 $birdbuild to 0>> <<set $harpy to 0>> <<set $foxbuild to 0>> <<set $fox to 0>> <<set $stray_happiness to 50>> <<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 $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>> <</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()>> <<if $background is "nerd">> <<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>> <<elseif $background is "athlete">> <<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>> <<elseif $background is "delinquent">> <<set $delinquency += 401>><<set $cool += 200>> <<elseif $background is "promiscuous">> <<set $promiscuity += 35>> <<elseif $background is "exhibitionist">> <<set $exhibitionism += 35>> <<elseif $background is "deviant">> <<set $deviancy += 35>> <<elseif $background is "beautiful">> <<set $beauty += ($beautymax / 2)>> <<elseif $background is "crossdresser">> <<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">> <<set $background to "waif">> <</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>> <<elseif $background is "plantlover">> <<set $nectar_addiction to 200>> <<set $nectar_timer to 21>> <</if>> <<set $backgroundTraits to [$background]>> <<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()>> <</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"]>> <<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/doggyactivepush.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", "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" } ], /* alternatively, the minimum amount of money you need to have for PC to be confident enough to risk betting it */ "confidenceMoney": [250000, 500000, 1000000], /* 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 ], "baseMaxBets": [2500, 5000, 10000 ], "anteSizes": [25000, 50000, 100000], }>> <<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 $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"]>> <<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>> <<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 is "crossdresser">> <<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>> <<set $physicalTransform to 1>> <<else>> <<set $physicalTransform to 0>> <</if>> <<if $demon gte 1 or $angel gte 1 or $fallenangel gte 2>> <<set $specialTransform to 1>> <<else>> <<set $specialTransform to 0>> <</if>> <<unset $transformed>> <<if $backgroundTraits is undefined>> <<set $backgroundTraits to [$background]>> <</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>> <<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>> <<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 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 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 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 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 "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>> <!-- 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>> <<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>> <<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">> <!-- 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 is "crossdresser">> <<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>> <<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 {}>> <</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 isnot "crossdresser") or ($player.gender is "m" and $background is "crossdresser") or ($player.gender is "h" and ( (($player.gender_body is "m" or ($player.gender_body is "a" and $player.breastsize lte 3)) and $background is "crossdresser") or (($player.gender_body is "f" or ($player.gender_body is "a" and $player.breastsize gt 3)) and $background isnot "crossdresser") ) )>> <<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>>
<!-- 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>> <<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 ${$worn.handheld?.pattern_caption ? ($worn.handheld.pattern.match(/^[aeiou]/i) ? "an " : "a ") + $worn.handheld.pattern : "<<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 "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">> <<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">> <<bedicon _farmbed>> <<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 isnot "crossdresser") or ($player.gender is "m" and $background is "crossdresser") or ($player.gender is "h" and ( (($player.gender_body is "m" or ($player.gender_body is "a" and $player.breastsize lte 3)) and $background is "crossdresser") or (($player.gender_body is "f" or ($player.gender_body is "a" and $player.breastsize gt 3)) and $background isnot "crossdresser") ) )>> <<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"} }, "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"} } }>> <<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: "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>> <<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> | <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')>> <<if _eIndextem.integrity gt (_eIndexntegrityMax * 9 / 10)>> <<set $_output to "">> <<elseif _eIndextem.integrity gt (_eIndexntegrityMax * 5 / 10)>> <<set $_output to "<span>(frayed)</span>">> <<elseif _eIndextem.integrity gt (_eIndexntegrityMax * 2 / 10)>> <<set $_output to "<span>(torn)</span>">> <<else>> <<set $_output to "<span>(tattered)</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].outfitPrimary.head)>> <<set $worn.upper.hoodposition to "up">> /* re-create the hood using colors from the hoodie */ <<set $_hoodIndex to setup.clothes.head.findIndex(x => x.name === $worn.upper.outfitPrimary.head)>> <<set $worn.head to clone(setup.clothes.head[$_hoodIndex])>> <<set $worn.head.colour to $worn.upper.colour>> <<if $worn.head.colour is "custom">> <<set $worn.head.colourCustom to $worn.upper.colourCustom>> <</if>> <<set $worn.head.accessory_colour to $worn.upper.accessory_colour>> <<if $worn.head.accessory_colour is "custom">> <<set $worn.head.accessory_colourCustom to $worn.upper.accessory_colourCustom>> <</if>> <<if _args[0] is "shop" and $tryOn.tryingOn.upper is null>> <<updateOwned "upper">> <</if>> <</if>> <</if>> <<elseif $worn.upper.hoodposition is undefined and setup.clothes.upper[$worn.upper.index].hoodposition isnot undefined>> <<set $worn.upper.hoodposition to "up">> <</if>> <</widget>> <<widget "toggleUpperTuck">> <<set _linkOption1 to _args[0] || `Untuck from ${$worn.lower.name}`>> <<set _linkOption2 to _args[1] || `Tuck into ${$worn.lower.name}`>> <div class="toggleUpperTuck"> <<link `($upperTucked ? _linkOption1 : _linkOption2)`>> <<set $upperTucked to +!$upperTucked>> <<updatesidebarimg>> <<run $(".toggleUpperTuck .link-internal").html($upperTucked ? _linkOption1 : _linkOption2)>> <<run Links.generateLinkNumbers($(".passage"))>> <</link>> </div> <</widget>> <<widget "toggleLowerTuck">> <<set _linkOption1 to _args[0] || `Untuck from ${$worn.feet.name}`>> <<set _linkOption2 to _args[1] || `Tuck into ${$worn.feet.name}`>> <div class="toggleLowerTuck"> <<link `($lowerTucked ? _linkOption1 : _linkOption2)`>> <<set $lowerTucked to +!$lowerTucked>> <<updatesidebarimg>> <<run $(".toggleLowerTuck .link-internal").html($lowerTucked ? _linkOption1 : _linkOption2)>> <<run Links.generateLinkNumbers($(".passage"))>> <</link>> </div> <</widget>> <<widget "toggleLeash">> <<if ["collar", "free use collar", "leather collar", "spiked collar"].includes($worn.neck.name)>> <<link "Attach Leash">> <<attach_leash true true>> <<updatesidebarimg>> <<replace "#wardrobeLeash">><<toggleLeash>><</replace>> <</link>> <<elseif ["collar with leash", "free use collar with leash", "leather collar with leash", "spiked collar with leash"].includes($worn.neck.name)>> <<link "Detach Leash">> <<detach_leash true true>> <<updatesidebarimg>> <<replace "#wardrobeLeash">><<toggleLeash>><</replace>> <</link>> <</if>> <</widget>> <<widget "toggleAltLink">><<silently>> <<switch _args[0]>> <<case "upper">> <<switch $worn.upper.variable>> <<case "schoolcardigan">><<set _altLink to ["Tie cardigan around waist", "Wear cardigan normally"]>> <<case "brownleather" "blackleather" "leathercropjacket" "winterjacket">><<set _altLink to ["Zip jacket", "Unzip jacket"]>> <<case "waistcoat" "waistcoatlapel" "blazershirt">><<set _altLink to ["Tuck in", "Untuck"]>> <<case "dress" "buttondown" "oversizedbuttondown">><<set _altLink to ["Unbutton shirt", "Button up shirt"]>> <<case "catsuit">><<set _altLink to ["Unzip", "Zip"]>> <<case "kimono" "kimonomini">><<set _altLink to ["Loosen", "Tighten"]>> <<default>><<exit>> <</switch>> <<case "neck">> <<switch $worn.neck.variable>> <<case "suspenders">><<set _altLink to ["Lower suspenders", "Wear suspenders normally"]>> <<default>><<exit>> <</switch>> <<case "face">> <<if $worn.face.type.includes("cool") or $worn.face.type.includes("glasses")>> <<switch $worn.face.variable>> <<case "monocle">><<set _altLink to ["Cover left eye", "Cover right eye"]>> <<default>><<set _altLink to ["Push on head", "Wear normally"]>> <</switch>> <<else>> <<switch $worn.face.variable>> <<case "medical eyepatch" "eyepatch">><<set _altLink to ["Cover left eye", "Cover right eye"]>> <<case "swimgoggles">><<set _altLink to ["Push on head", "Wear normally"]>> <<default>><<exit>> <</switch>> <</if>> <<default>><<exit>> <</switch>> <</silently>> <span @class="_args[0]"> <<capture _args[0] _altLink>> <<link `($worn[_args[0]].altposition is "none" ? _altLink[0] : _altLink[1])`>> <<toggleAltPosition _args[0]>> <<updatesidebarimg>> <<if _args[1] is "wardrobe">> <<updatewardrobe>> <</if>> <<run $(".toggleAltLink ." + _args[0] + " .link-internal").html($worn[_args[0]].altposition is "none" ? _altLink[0] : _altLink[1])>> <<run Links.generateLinkNumbers($(".passage"))>> <</link>> <</capture>> </span> <</widget>> <<widget "toggleAltPosition">> /*Changes sprite to an alternate image*/ <<switch _args[0]>> <<case "upper">> <<if $worn.upper.variable is "schoolcardigan">> <<run [$worn.upper.colour, $worn.upper.accessory_colour] to [$worn.upper.accessory_colour, $worn.upper.colour]>> <<if $worn.upper.colour is "custom" or $worn.upper.accessory_colour is "custom">> <<run [$worn.upper.colourCustom, $worn.upper.accessory_colourCustom] to [$worn.upper.accessory_colourCustom, $worn.upper.colourCustom]>> <</if>> <<if $worn.upper.altposition is "none">> <<set $worn.upper.name to "school blouse">><<set $worn.upper.name_cap to "School blouse">> <<set $worn.upper.altposition to "alt">> <<elseif $worn.upper.altposition is "alt">> <<set $worn.upper.name to "school cardigan">><<set $worn.upper.name_cap to "School cardigan">> <<set $worn.upper.altposition to "none">> <<elseif $worn.upper.altposition is undefined and setup.clothes.upper[$worn.upper.index].altposition isnot undefined>> <<set $worn.upper.name to "school cardigan">><<set $worn.upper.name_cap to "School cardigan">> <<set $worn.upper.altposition to "none">> <</if>> <<else>> <<if $worn.upper.altposition is undefined and setup.clothes.upper[$worn.upper.index].altposition isnot undefined>> <<set $worn.upper.altposition to "none">> <<else>> <<set $worn.upper.altposition to ($worn.upper.altposition is "none" ? "alt" : "none")>> <</if>> <</if>> <<case "neck" "face">> <<if $worn[_args[0]].altposition is undefined and setup.clothes[_args[0]][$worn[_args[0]].index].altposition isnot undefined>> <<set $worn[_args[0]].altposition to "none">> <<else>> <<set $worn[_args[0]].altposition to ($worn[_args[0]].altposition is "none" ? "alt" : "none")>> <</if>> <<default>> <</switch>> <</widget>> <<widget "toggleAltSleeve">> <<set _inDefaultState to _args[0] || "Roll up sleeves">> <<set _inAltState to _args[1] || "Unroll sleeves">> <div class="toggleAltSleeve"> <<link `($worn.upper.altsleeve is "none" ? _inDefaultState : _inAltState)`>> <<set $worn.upper.altsleeve to ($worn.upper.altsleeve is "none" ? "alt" : "none")>> <<updatesidebarimg>> <<run $(".toggleAltSleeve .link-internal").html($worn.upper.altsleeve is "none" ? _inDefaultState : _inAltState)>> <<run Links.generateLinkNumbers($(".passage"))>> <</link>> </div> <</widget>> <<widget "toggleFaceLayer">> /*changes z-index */ <<set _linkOption1 to "Move hair in front">> <<set _linkOption2 to "Tuck hair behind">> <div class="toggleFaceLayer"> <<link `($facelayer is "front" ? _linkOption2 : _linkOption1)`>> <<set $facelayer to ($facelayer is "front" ? "back" : "front")>> <<updatesidebarimg>> <<if _args[0] is "wardrobe">> <<updatewardrobe>> <</if>> <<run $(".toggleFaceLayer .link-internal").html($facelayer is "front" ? _linkOption2 : _linkOption1)>> <<run Links.generateLinkNumbers($(".passage"))>> <</link>> </div> <br> <</widget>> <<widget "wardrobeList">> <<wardrobeClothingOptions>> <<set _wardrobe_list to _args[0]>> <<if !Object.keys($worn).includes(_wardrobe_list)>> An error occurred to 'widget "wardrobeList"', please report if you did not edit the save data manually in any way. <<else>> <<set _wear to "wear_"+_wardrobe_list>> <<set _outfitTypes to setup.clothingLayer.torso_inner>> <<set _loweroutfitCheck to setup.clothingLayer.lower>> __<<print _wardrobe_list[0].toUpperCase() + _wardrobe_list.substring(1)>>__ <i>_selectedWardrobe[_wardrobe_list].length / _selectedWardrobe.space</i> <<if _wardrobe_list is "upper">>(Outfits will also take a lower slot)<</if>> <<if _wardrobe_list is "under_upper">>(Outfits will also take an under lower slot)<</if>> <br> Order by: /*Undefined error for unknown reason*/ /*<a @onclick="`wikifier('wardrobeListReorder', '`+ $lastWardrobeSlot + `', 'name');`">Name</a> |*/ <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'name');">Name</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'color');">Colour</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'lewd');">Lewd</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'integrity');">Integrity</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'warmth');">Warmth</a></div> | <<if _outfitTypes.includes(_wardrobe_list)>> <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'outfit');">Outfit Status</a></div> | <</if>> <br> Inverse Order by: <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'name', true);">Name</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'color', true);">Colour</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'lewd', true);">Lewd</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'integrity', true);">Integrity</a></div> | <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'warmth', true);">Warmth</a></div> | <<if _outfitTypes.includes(_wardrobe_list)>> <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'outfit', true);">Outfit Status</a></div> | <</if>> <br><br> Currently equipped: <<if $worn[_wardrobe_list].name is "naked">> nothing <br> <<else>> <<set _wornItem to $worn[_wardrobe_list]>> <<set _wornItemData to setup.clothes[_wardrobe_list][clothesIndex(_wardrobe_list,_wornItem)]>> <<clothingicon _wornItem _wardrobe_list>> <<print _wornItemData.name_cap>> <<if _wornItem.colour isnot 0>> <span @class="_wornItem.colour.replace(' ','-')">(_wornItem.colour)</span> <</if>> <<if _wornItem.outfitPrimary isnot undefined>> <<set _keys to Object.keys(_wornItem.outfitPrimary)>> <<set _broken to 0>> <<for _j to 0; _j lt _keys.length; _j++>> <<if _wornItem.outfitPrimary[_keys[_j]] is "broken">> <<set _broken++>> <</if>> <</for>> <<if _broken is 0>> <span class="gold">(Outfit)</span> <<elseif _broken lt _keys.length>> <span class="red">(Partly Broken)</span> <<else>> <span class="red">(Broken)</span> <</if>> <<if _wornItem.one_piece is "split">> <span class="separated-indicator">(Separated)</span> <</if>> <</if>> <<if _wornItem.outfitSecondary isnot undefined>> <<if _wornItem.outfitSecondary[1] is "broken">> <span class="red">(Broken)</span> <<else>> <span class="gold">(Outfit)</span> <<if _wornItem.one_piece is "split">> <span class="separated-indicator">(Separated)</span> <</if>> <</if>> <</if>> <<wardrobeintegrity _wornItem _wardrobe_list>> <a onclick="document.getElementById('wardrobeItemDetails').classList.toggle('hidden')">Extra Info</a> <br> <div id="wardrobeItemDetails" class="hidden"> <<if _wornItem.plural is 1>> <<integrity `clothingData(_wardrobe_list,_wornItem,'integrity_max')` "cap">> <<else>> A <<integrity `clothingData(_wardrobe_list,_wornItem,'integrity_max')`>> <</if>> and <<reveal _wornItem.reveal>> <<print _wornItem.name>>. <<if _wornItem.gender is "m">> <span class="lblue">For boys ♂.</span> <<elseif _wornItem.gender is "f">> <span class="pink">For girls ♀.</span> <</if>> <<print _wornItemData.description>> <br> <<print setup.WeatherDescriptions.clothingWarmth(getTrueWarmth(_wornItem))>> <br><br> <<set _temp_choice to $worn[_wardrobe_list]>> <<shoptraits>> </div> <<if isConnectedToHood(_wardrobe_list)>> <!-- If selected item is a hood or selected item has a secondary hood piece --> <div class="no-numberify"><<toggleHoodLink>></div> <</if>> <<if _wardrobe_list is "upper" and $worn.lower.name isnot "naked" and !_wornItemData.notuck and V.worn.upper.outfitPrimary is undefined>> <div class="no-numberify"><<toggleUpperTuck>></div> <<elseif _wardrobe_list is "lower" and $worn.feet.name isnot "naked" and !_wornItemData.notuck and !setup.clothes.feet[clothesIndex("feet",$worn.feet)].notuck>> <div class="no-numberify"><<toggleLowerTuck>></div> <</if>> <<if _wardrobe_list is "upper" and $worn.upper.name isnot "naked" and _wornItemData.altsleeve>> <div class="no-numberify toggleAltSleeve"><<toggleAltSleeve>></div> <</if>> <div class="no-numberify toggleAltLink"><<toggleAltLink _wardrobe_list "wardrobe">></div> <<if _wardrobe_list is "neck">> <div id="wardrobeLeash" class="no-numberify"><<toggleLeash>></div> <</if>> <<if _wardrobe_list is "face">> <div class="no-numberify toggleAltLink"><<toggleFaceLayer "wardrobe">></div> <</if>> <</if>> <br> <<if $worn[_wardrobe_list].name isnot "naked">> <div class="wardrobeItem wardrobe-action no-numberify"><<wearlink_norefresh "Strip" 'strip'>></div> <</if>> <<if _wardrobe_list is "upper">> <div class="wardrobeItem wardrobe-action no-numberify"><<wearlink_norefresh "Large towel" 'large_towel'>></div> <</if>> <<if _wardrobe_list is "upper" or _wardrobe_list is "lower">> <div class="wardrobeItem wardrobe-action no-numberify"><<wearlink_norefresh "Towel" 'towel'>></div> <</if>> <<for _i to 0; _i lt _selectedWardrobe[_wardrobe_list].length; _i++>> <<set _item to _selectedWardrobe[_wardrobe_list][_i]>> <<set _itemData to setup.clothes[_wardrobe_list][clothesIndex(_wardrobe_list,_item)]>> <<if _item.outfitSecondary isnot undefined>> <<if _item.outfitSecondary[1] isnot "broken" and _item.outfitSecondary[1] isnot "split">> <<continue>> <</if>> <</if>> <div class="wardrobeItem wardrobe-action no-numberify"> <<clothingicon _item _wardrobe_list>> <<wearlink_norefresh _itemData.name_cap _i>> <<if _item.gender is "m">> <span class="blue">♂</span> <<elseif _item.gender is "f">> <span class="pink">♀</span> <<else>> <</if>> <<if _item.colour isnot 0>> <span @class="_selectedWardrobe[_wardrobe_list][_i].colour.replace(' ','-')">(_item.colour)</span> <</if>> <<if _item.outfitPrimary isnot undefined>> <<set _keys to Object.keys(_item.outfitPrimary)>> <<set _broken to 0>> <<for _j to 0; _j lt _keys.length; _j++>> <<if _item.outfitPrimary[_keys[_j]] is "broken">> <<set _broken++>> <</if>> <</for>> <<if _broken is 0>> <span class="gold">(Outfit)</span> <<elseif _broken lt _keys.length>> <span class="red">(Partly Broken)</span> <<else>> <span class="red">(Broken)</span> <</if>> <<if _item.one_piece is "split">> <span class="separated-indicator">(Separated)</span> <</if>> <</if>> <<if _item.outfitSecondary isnot undefined>> <<if _item.one_piece is "split">> <span class="separated-indicator">(Separated)</span> <<else>> <span class="red">(Broken)</span> <</if>> <</if>> <<wardrobeintegrity _item _wardrobe_list>> <<reveal _item.reveal>> | <span class="cold-resist-icon noDivider"><<print getTrueWarmth(_item)>></span> </div> <</for>> <div style="clear:both;"></div> <</if>> <</widget>> <<widget "wearlink_norefresh">> <<capture _args[1] _args[2]>> <<link _args[0]>> <<if _args[2]>> <<set V[_args[2]] = _args[1]>> <<else>> <<set V[_wear] = _args[1]>> <</if>> <<updatewardrobe undefined _args[2]>> <</link>> <</capture>> <</widget>> <<widget "updatewardrobe">> <<if window.scrollY > 130>> <<run $('#action-popup, #wardrobewear').html(new Wikifier(null, "<<wardrobewear>>").output)>> <<run $('#action-popup').css('transform', 'translateY(0)'); setTimeout(() => { $('#action-popup').css('transform', 'translateY(-100%)') }, 3200);>> <<else>> <<run $('#wardrobewear').html(new Wikifier(null, "<<wardrobewear>>").output)>> <</if>> <<run $('#wardrobewear').addClass('notransition flash'); setTimeout(() => { $('#wardrobewear').removeClass('notransition flash') }, 100);>> <<updatesidebarimg>> <<updatesidebardescription>> <<updateallure>> <<updatewarmthscale>> <<updatewarmthdescription>> <<if _args[0] == "outfits">> <<replace "#listoutfits">><<listoutfits>><</replace>> <</if>> <<replace '#clotheson'>><<clotheson>><</replace>> <<if $('#wardrobeList')[0]>><<replace '#wardrobeList'>><<wardrobeContents>><</replace>><</if>> <<if $('#oldWardrobeListDisplay')[0]>> <<if _args[1]>> <<set $_slot to _args[1].slice(5)>> <<switch $_slot>> <<case "upper">> <<replace '#clothingBox-upper'>> <<oldWardrobeList "upper" "outfits">> <<oldWardrobeList "upper" "non-outfits">> <</replace>> <<replace '#clothingBox-lower'>> <<oldWardrobeList "lower">> <</replace>> <<case "under_upper">> <<replace '#clothingBox-under_upper'>> <<oldWardrobeList "under_upper" "outfits">> <<oldWardrobeList "under_upper" "non-outfits">> <</replace>> <<replace '#clothingBox-under_lower'>> <<oldWardrobeList "under_lower">> <</replace>> <<default>> <<replace `'#clothingBox-' + $_slot`>><<oldWardrobeList $_slot>><</replace>> <</switch>> <<replace '#wardrobeMinorOptions'>><<oldWardrobeMinorOptions>><</replace>> <<else>> <<replace '#oldWardrobeListDisplay'>><<oldWardrobeListDisplay>><</replace>> <</if>> <</if>> <<exposure>> <<run $('#wardrobeExits').html(new Wikifier(null, "<<wardrobeExits>>").output)>> <<numberify ".passage">> <<run updateMoment()>> <</widget>> <<widget "oldWardrobeMinorOptions">> <div id="wardrobeMinorOptions"> <<if $worn.lower.name isnot "naked" and $worn.upper.outfitPrimary is undefined and !setup.clothes.upper[clothesIndex('upper', $worn.upper)].notuck>> <<set $_linkOption1 to `Untuck your ${$worn.upper.name}`>> <<set $_linkOption2 to `Tuck your ${$worn.upper.name} into your ${$worn.lower.name}`>> <<toggleUpperTuck $_linkOption1 $_linkOption2>> <</if>> <<if $worn.head.hood>> <!-- If selected item is a hood or selected item has a secondary hood piece --> <<toggleHoodLink>> <</if>> <<if ["collar", "free use collar", "leather collar", "spiked collar", "collar with leash", "free use collar with leash", "leather collar with leash", "spiked collar with leash"].includes($worn.neck.name)>> <div id="wardrobeLeash" class="no-numberify"><<toggleLeash>></div> <</if>> </div> <</widget>> <<widget "oldWardrobeListDisplay">> <<wardrobeClothingOptions>> <<oldWardrobeMinorOptions>> <br> <<if $debug is 1>> <<oldWardrobeList "over_upper">> <<oldWardrobeList "over_lower">> <</if>> <div id="clothingBox-upper"> <<oldWardrobeList "upper" "outfits">> <<oldWardrobeList "upper" "non-outfits">> </div> <div id="clothingBox-lower"> <<oldWardrobeList "lower">> </div> <div id="clothingBox-under_upper"> <<oldWardrobeList "under_upper" "outfits">> <<oldWardrobeList "under_upper" "non-outfits">> </div> <div id="clothingBox-under_lower"> <<oldWardrobeList "under_lower">> </div> <<if $debug is 1>> <<oldWardrobeList "over_head">> <</if>> <div id="clothingBox-head"><<oldWardrobeList "head">></div> <div id="clothingBox-face"><<oldWardrobeList "face">></div> <div id="clothingBox-neck"><<oldWardrobeList "neck">></div> <div id="clothingBox-hands"><<oldWardrobeList "hands">></div> <div id="clothingBox-handheld"><<oldWardrobeList "handheld">></div> <div id="clothingBox-legs"><<oldWardrobeList "legs">></div> <div id="clothingBox-feet"><<oldWardrobeList "feet">></div> <div style="clear:both;"></div> <<wardrobeNewOutfit>> <</widget>> <<widget "oldWardrobeList">> <<set _wardrobe_list to _args[0]>> <<set _showType to _args[1]>> <<if !Object.keys($worn).includes(_wardrobe_list)>> An error occurred to 'widget "oldWardrobeList"', please report if you did not edit the save data manually in any way. <<else>> <<set _wear to "wear_"+_wardrobe_list>> <div class="clothingBox"> __<<print _wardrobe_list[0].toUpperCase() + _wardrobe_list.substring(1) + (_showType is "outfits" ? " Outfits" : "")>>__ <i>_selectedWardrobe[_wardrobe_list].length / _selectedWardrobe.space</i> <br><br> <div> <ul> <<if $worn[_wardrobe_list].name isnot "naked">> <li class="no-numberify"><<wearlink_norefresh "Strip" 'strip' _wear>></li> <</if>> <<if _wardrobe_list is "upper" and _showType is "outfits">> <li class="no-numberify"><<wearlink_norefresh "Large towel" 'large_towel' _wear>></li> <</if>> <<if (_wardrobe_list is "upper" or _wardrobe_list is "lower") and _showType isnot "outfits">> <li class="no-numberify"><<wearlink_norefresh "Towel" 'towel' _wear>></li> <</if>> <<for _i to 0; _i lt _selectedWardrobe[_wardrobe_list].length; _i++>> <<set _item to _selectedWardrobe[_wardrobe_list][_i]>> <<if _item.outfitSecondary isnot undefined>> <<if _item.outfitSecondary[1] isnot "broken" and _item.outfitSecondary[1] isnot "split">> <<continue>> <</if>> <</if>> <<if (_item.outfitPrimary isnot undefined and _showType is "non-outfits") or (_item.outfitPrimary is undefined and _showType is "outfits")>> <<continue>> <</if>> <li class="no-numberify">/*<<clothingicon _item>>*/<<wearlink_norefresh setup.clothes[_wardrobe_list][clothesIndex(_wardrobe_list,_item)].name_cap _i _wear>> <<if _selectedWardrobe[_wardrobe_list][_i].colour isnot 0>> <span @class="_selectedWardrobe[_wardrobe_list][_i].colour.replace(' ','-')">(_item.colour)</span> <</if>> <<wardrobeintegrity _item _wardrobe_list>> </li> <</for>> </ul> </div></div> <</if>> <</widget>> <<widget "wardrobeListReorder">> <<if _args[0] and _args[1]>> <<set _slot to _args[0]>> <<set _orderType to _args[1]>> <<set _descending to _args[2]>> <<set _wardrobeItems to clone(_selectedWardrobe[_slot])>> <<set _newWardrobeItems to []>> <<switch _orderType>> <<case "name">> <<set _itemNames to []>> <<for _i to 0; _i lt _wardrobeItems.length; _i++>> <<run _itemNames.pushUnique(_wardrobeItems[_i].name)>> <</for>> <<if _descending>> <<set _sortedItemNames to _itemNames.sort(function(a, b){return b.localeCompare(a)})>> <<else>> <<set _sortedItemNames to _itemNames.sort()>> <</if>> <<for _i to 0; _i lt _sortedItemNames.length; _i++>> <<for _j to 0; _j lt _wardrobeItems.length; _j++>> <<if _wardrobeItems[_j].name is _sortedItemNames[_i]>> <<run _newWardrobeItems.push(clone(_wardrobeItems[_j]))>> <</if>> <</for>> <</for>> <<case "color">> <<set _itemColors to []>> <<for _i to 0; _i lt _wardrobeItems.length; _i++>> <<run _itemColors.pushUnique(_wardrobeItems[_i].colour)>> <</for>> <<if _descending>> <<set _sortedItemColors to _itemColors.sort(function(a, b){ if(a === 0){ return 0; } if(b === 0){ return 0; } return b.localeCompare(a); })>> <<else>> <<set _sortedItemColors to _itemColors.sort()>> <</if>> <<for _i to 0; _i lt _sortedItemColors.length; _i++>> <<for _j to 0; _j lt _wardrobeItems.length; _j++>> <<if _wardrobeItems[_j].colour is _sortedItemColors[_i]>> <<run _newWardrobeItems.push(clone(_wardrobeItems[_j]))>> <</if>> <</for>> <</for>> <<case "integrity">> <<set _itemIntegrity to []>> <<for _i to 0; _i lt _wardrobeItems.length; _i++>> <<run _itemIntegrity.pushUnique((_wardrobeItems[_i].integrity / clothingData(_slot,_wardrobeItems[_i],'integrity_max')))>> <</for>> <<if _descending>> <<set _sortedItemIntegrity to _itemIntegrity.sort()>> <<else>> <<set _sortedItemIntegrity to _itemIntegrity.sort(function(a, b){return b-a})>> <</if>> <<for _i to 0; _i lt _sortedItemIntegrity.length; _i++>> <<for _j to 0; _j lt _wardrobeItems.length; _j++>> <<if (_wardrobeItems[_j].integrity / clothingData(_slot,_wardrobeItems[_j],'integrity_max')) is _sortedItemIntegrity[_i]>> <<run _newWardrobeItems.push(clone(_wardrobeItems[_j]))>> <</if>> <</for>> <</for>> <<case "warmth">> <<set _itemWarmth to []>> <<for _i to 0; _i lt _wardrobeItems.length; _i++>> <<run _itemWarmth.pushUnique(_wardrobeItems[_i].warmth)>> <</for>> <<if _descending>> <<set _sortedItemWarmth to _itemWarmth.sort()>> <<else>> <<set _sortedItemWarmth to _itemWarmth.sort(function(a, b){return b-a})>> <</if>> <<for _i to 0; _i lt _sortedItemWarmth.length; _i++>> <<for _j to 0; _j lt _wardrobeItems.length; _j++>> <<if _wardrobeItems[_j].warmth is _sortedItemWarmth[_i]>> <<run _newWardrobeItems.push(clone(_wardrobeItems[_j]))>> <</if>> <</for>> <</for>> <<case "outfit">> <<if _descending>> <<set _status to ["broken","split",0,1]>> /* NO SPLIT ADDED */ <<else>> <<set _status to [1,0,"split","broken"]>> /* NO SPLIT ADDED */ <</if>> <<for _i to 0; _i lt _status.length; _i++>> <<for _j to 0; _j lt _wardrobeItems.length; _j++>> <<if _wardrobeItems[_j].one_piece is _status[_i]>> <<run _newWardrobeItems.push(clone(_wardrobeItems[_j]))>> <</if>> <</for>> <</for>> <<case "lewd">> <<set _itemReveal to []>> <<for _i to 0; _i lt _wardrobeItems.length; _i++>> <<run _itemReveal.pushUnique(_wardrobeItems[_i].reveal)>> <</for>> <<if _descending>> <<set _sortedItemReveal to _itemReveal.sort((a, b) => a - b)>> <<else>> <<set _sortedItemReveal to _itemReveal.sort((a, b) => b - a)>> <</if>> <<for _i to 0; _i lt _sortedItemReveal.length; _i++>> <<for _j to 0; _j lt _wardrobeItems.length; _j++>> <<if _wardrobeItems[_j].reveal is _sortedItemReveal[_i]>> <<run _newWardrobeItems.push(clone(_wardrobeItems[_j]))>> <</if>> <</for>> <</for>> <</switch>> <<if _newWardrobeItems isnot []>> <<set _selectedWardrobe[_slot] to clone(_newWardrobeItems)>> <</if>> <<run Dynamic.render()>> <</if>> <</widget>> <<widget "wardrobeSanityCheck">> /*Fixes invisible outfit bottoms caused by bugs in previous versions*/ <<if $runWardrobeSanityChecker is true>> <<set $lastWardrobeSanityCheck to $saveVersions.last()>> /*Update _equip as required*/ <<set _equip to ["lower", "under_lower", "head"]>> <<for _slot range _equip>> <<set _eIndextemIndex to {}>> <<for _eIndex to 0; _eIndex lt _selectedWardrobe[_slot].length; _eIndex++>> <<if _selectedWardrobe[_slot][_eIndex].outfitSecondary is undefined>> <<continue>> <</if>> <<if _selectedWardrobe[_slot][_eIndex].outfitSecondary[1] is "broken" or _selectedWardrobe[_slot][_eIndex].outfitSecondary[1] is "split">> <<continue>> <</if>> /*Prep*/ <<set $_markBroken to true>> <<set $_found to false>> <<set _eIndextem to _selectedWardrobe[_slot][_eIndex]>> <<set $_outfitSecondary to _selectedWardrobe[_slot][_eIndex].outfitSecondary>> <<if _eIndextemIndex[$_outfitSecondary[0]] is undefined>> <<set _eIndextemIndex[$_outfitSecondary[0]] to []>> <</if>> /*Look for a primary piece that matches*/ <<for _iIndex to 0; _iIndex lt _selectedWardrobe[$_outfitSecondary[0]].length; _iIndex++>> <<if _selectedWardrobe[$_outfitSecondary[0]][_iIndex].name isnot $_outfitSecondary[1]>> <<continue>> <</if>> <<if _eIndextemIndex[$_outfitSecondary[0]].includes(_iIndex)>> <<continue>> <</if>> <<if _selectedWardrobe[$_outfitSecondary[0]][_iIndex].colour is _eIndextem.colour and (_eIndextem.accessory is 0 or _selectedWardrobe[$_outfitSecondary[0]][_iIndex].accessory is 0 or _selectedWardrobe[$_outfitSecondary[0]][_iIndex].accessory_colour is _eIndextem.accessory_colour)>> <<if _eIndextem.colour isnot "custom" and (_eIndextem.accessory is 0 or _selectedWardrobe[$_outfitSecondary[0]][_iIndex].accessory is 0 or _eIndextem.accessory_colour isnot "custom")>> <<set $_markBroken to false>> <<run _eIndextemIndex[$_outfitSecondary[0]].push(clone(_iIndex))>> <<break>> <<elseif _eIndextem.colourCustom is _selectedWardrobe[$_outfitSecondary[0]][_iIndex].colourCustom and (_eIndextem.accessory is 0 or _selectedWardrobe[$_outfitSecondary[0]][_iIndex].accessory is 0 or _eIndextem.accessory_colourCustom is _selectedWardrobe[$_outfitSecondary[0]][_iIndex].accessory_colourCustom)>> <<set $_markBroken to false>> <<run _eIndextemIndex[$_outfitSecondary[0]].push(clone(_iIndex))>> <<break>> <</if>> <</if>> <</for>> <<if $_markBroken is true>> /*Mark as broken*/ <<set _selectedWardrobe[_slot][_eIndex].outfitSecondary[1] to "broken">> <<set _selectedWardrobe[_slot][_eIndex].one_piece to "broken">> <<set _selectedWardrobe[_slot][_eIndex].set to clone(_slot)>> <<set _selectedWardrobe[_slot][_eIndex].sanityCheck to true>> <</if>> <</for>> <</for>> <<set $runWardrobeSanityChecker to false>> <</if>> <<if $worn.handheld.type.includes("prop")>> <<error { message: `Found a prop that should have been destroyed, please report it: '${$worn.handheld.name}'. It has been removed from your character for you.` }>> <<handheldruined true>> <<handheldon>> <</if>> <</widget>> <<widget "wardrobeGetRepairedClothes">> <<set _equip to setup.clothingLayer.all>> <<set _takenAway to 0>> <<for _eIndex to 0; _eIndex lt _equip.length; _eIndex++>> <<if $wardrobeRepair[_equip[_eIndex]] is undefined>> <<continue>> <</if>> <<for _iIndex to 0; _iIndex lt $wardrobeRepair[_equip[_eIndex]].length; _iIndex++>> <<if _selectedWardrobe[_equip[_eIndex]].length gte _selectedWardrobe.space>> <<set _takenAway++>> <<continue>> <</if>> <<if $wardrobeRepair[_equip[_eIndex]][_iIndex][5]>> <<generalSend "wardrobe" _equip[_eIndex] `$wardrobeRepair[_equip[_eIndex]][_iIndex][0]` `$wardrobeRepair[_equip[_eIndex]][_iIndex][1]` `$wardrobeRepair[_equip[_eIndex]][_iIndex][3]`>> <<set _selectedWardrobe[_equip[_eIndex]].last().one_piece to "split">> <<if _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary>> <<for $_label, $_value range _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary>> <<set _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary[$_label] to "split">> <</for>> <<elseif _selectedWardrobe[_equip[_eIndex]].last().outfitSecondary>> <<set _selectedWardrobe[_equip[_eIndex]].last().outfitSecondary[1] to "split">> <</if>> <<else>> <<sendToWardrobeFromDefault "wardrobe" _equip[_eIndex] `$wardrobeRepair[_equip[_eIndex]][_iIndex][0]` `$wardrobeRepair[_equip[_eIndex]][_iIndex][1]` `$wardrobeRepair[_equip[_eIndex]][_iIndex][3]`>> <</if>> <<if $wardrobeRepair[_equip[_eIndex]][_iIndex][2] isnot undefined and $wardrobeRepair[_equip[_eIndex]][_iIndex][2] isnot null>> /*colourCustom*/ <<set _selectedWardrobe[_equip[_eIndex]].last().colourCustom to $wardrobeRepair[_equip[_eIndex]][_iIndex][2]>> <<if _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary isnot undefined and _selectedWardrobe[_equip[_eIndex]].last().one_piece isnot "split">> <<for $_label, $_value range _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary>> <<if _selectedWardrobe[$_label].last().name is $_value>> <<set _selectedWardrobe[$_label].last().colourCustom to $wardrobeRepair[_equip[_eIndex]][_iIndex][2]>> <</if>> <</for>> <</if>> <</if>> <<if $wardrobeRepair[_equip[_eIndex]][_iIndex][4] isnot undefined and $wardrobeRepair[_equip[_eIndex]][_iIndex][4] isnot null>> /*accessory_colourCustom*/ <<set _selectedWardrobe[_equip[_eIndex]].last().accessory_colourCustom to $wardrobeRepair[_equip[_eIndex]][_iIndex][4]>> <<if _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary isnot undefined and _selectedWardrobe[_equip[_eIndex]].last().one_piece isnot "split">> <<for $_label, $_value range _selectedWardrobe[_equip[_eIndex]].last().outfitPrimary>> <<if _selectedWardrobe[$_label].last().name is $_value>> <<set _selectedWardrobe[$_label].last().colourCustom to $wardrobeRepair[_equip[_eIndex]][_iIndex][2]>> <</if>> <</for>> <</if>> <</if>> <</for>> <</for>> <<if _takenAway gt 0>> <br> The driver thanks you for the donation of _takenAway items due to you not having enough space. <</if>> <<unset $wardrobeRepair>> <</widget>> <<widget "randomWear">> <<set $wardrobeOption to "wear">> <<set $_equip to []>> <<set _equipped to []>> <<for $_slot, $_value range $randomEquipConfigure>> <<if $_value>> <<generalUndress $wardrobe_location $_slot>> <<run $_equip.push($_slot)>> <</if>> <</for>> <<for $_slot range $_equip>> <<if !_equipped.includes($_slot) and $worn[$_slot].name is "naked">> <<set _eIndexds to _selectedWardrobe[$_slot].map((item, index) => { if (!item.outfitSecondary or item.outfitSecondary[1] is "broken" or item.outfitSecondary[1] is "split") return index; }).filter(Boolean)>> <<if _eIndexds.length gt 0>> <<set _eIndexd to _eIndexds.random()>> <<set $_selectedItem to _selectedWardrobe[$_slot][_eIndexd]>> <<run _equipped.pushUnique($_slot)>> <<if $_selectedItem.outfitPrimary isnot undefined>> <<run Object.entries($_selectedItem.outfitPrimary).forEach((slot,value) => { if (value !== "broken" && value !== "split") _equipped.pushUnique(slot) })>> <</if>> <<set V["wear_" + $_slot] to _eIndexd>> <<unset _eIndexd>> <</if>> <</if>> <</for>> <<unset $randomWear>> <</widget>> <<widget "warmth_description">> <<print setup.WeatherDescriptions.shop()>> <br> Your clothing warmth is currently <span class="orange"><<print Weather.BodyTemperature.getWarmth()>></span>. <br> <<set $_minWarmth to getTargetWarmth(36.4)>> <<set $_maxWarmth to getTargetWarmth(37.6)>> To be comfortable you'll need <<if $_minWarmth and $_maxWarmth>> a clothing warmth between <span class="orange"><<print getTargetWarmth(36.5)>></span> and <span class="orange"><<print getTargetWarmth(37.5)>></span>. <<elseif $_minWarmth>> at least a clothing warmth of <span class="orange"><<print getTargetWarmth(36.5)>></span>. <<elseif $_maxWarmth>> at most a clothing warmth of <span class="orange"><<print getTargetWarmth(37.5)>></span>. <<else>> to stay indoors. <</if>> <hr /> <</widget>> <<widget "wardrobeSelection">> <<if !$multipleWardrobes or !$wardrobes[$wardrobe_location]>> <<set $wardrobe_location to "wardrobe">> <<elseif $forceWardrobeLocation>> <<set $wardrobe_location to $forceWardrobeLocation>> <<elseif $multipleWardrobes is "isolated" and !$wardrobes[$wardrobe_location].isolated>> <<set $wardrobe_location to "wardrobe">> <</if>> <<if $debug and $multipleWardrobes and !_args[0]>> <div class="no-numberify">Debug: <<for _label, _value range $wardrobes>> <<if _value.unlocked is undefined>> <<elseif $wardrobe_location is _label>> <span class="gold"><<print _value.name>></span> | <<else>> <<capture _label>><<link [[_value.name|$passage]]>><<set $forceWardrobeLocation to _label>><</link>> |<</capture>> <</if>> <</for>> </div> <br> <</if>> <</widget>> <<widget "cleanupOnWardrobeExit">> <<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><<set $dontHide to false>> <</widget>> <<widget "wardrobeExits">> <!-- Note: Don't use $_ in this widget, because this widget gets <<replace>>'d into the passage body --> <!-- this widget doesn't make sense because these links ALWAYS depend on the passage this widget is called from, so there's no reason to make it a widget --> <<switch $passage>> <<case "Wardrobe">> <<link [[Close wardrobe|Bedroom]]>><<cleanupOnWardrobeExit>><</link>> <<case "Changing Room">> <<if $exposed lte 1>> <<getouticon>><<link [[Leave|Beach]]>><<cleanupOnWardrobeExit>><</link>> <<elseif hasSexStat("exhibitionism", 5)>> <<sneakicon>><<link [[Sneak outside|Beach Changing Room Sneak]]>><<cleanupOnWardrobeExit>><</link>><<exhibitionist5>> <<else>> You can't go out like this! <</if>> <<case "Sydney Beach Changing Room">> <<set _earSlimeEnableSwimwear to true>> <<if $exposed lte 1>> <<getouticon>><<link [[Leave|Sydney Beach Swimsuit]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! <</if>> <<case "Sydney Beach Changing Room Leave">> <<set _earSlimeEnableSwimwear to true>> <<if $earSlime.forcedCommando isnot undefined and !$worn.under_lower.type.includes("naked")>> <span class="red">The slime in your ear refuses to allow you to leave with <<underwearTypeText>> on.</span> <<elseif $exposed lte 1>> <<getouticon>><<link [[Leave|Sydney Beach Leave]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! <</if>> <<case "Eden Wardrobe">> <<if isLoveInterest("Eden") or hasSexStat("exhibitionism", 5) or $exposed lte 0 or (hasSexStat("exhibitionism", 4) and $exposed lte 1)>> <<link [[Done|Eden Cabin]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't remain undressed like this! <</if>> <<case "Eden Night Wardrobe">> <<if isLoveInterest("Eden") or hasSexStat("exhibitionism", 5) or $exposed lte 0 or (hasSexStat("exhibitionism", 4) and $exposed lte 1)>> <<link [[Done|Eden Cabin Bed]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't remain undressed like this! <</if>> <<case "Asylum Wardrobe">> <<if hasSexStat("exhibitionism", 5) or $exposed lte 0 or (hasSexStat("exhibitionism", 4) and $exposed lte 1)>> <<link [[Done|Asylum Cell]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't remain undressed like this! <</if>> <<case "Farm Wardrobe">> <<if hasSexStat("exhibitionism", 5) or $exposed lte 0 or (hasSexStat("exhibitionism", 4) and $exposed lte 1)>> <<link [[Done|Farm Bedroom]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't remain undressed like this! <</if>> <<case "Strip Club Wardrobe">> <<if hasSexStat("exhibitionism", 4) or $exposed lte 0 or (hasSexStat("exhibitionism", 2) and $exposed lte 1)>> <<link [[Step away|Strip Club Dressing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! <</if>> <<case "Brothel Wardrobe">> <<if hasSexStat("exhibitionism", 4) or $exposed lte 0 or (hasSexStat("exhibitionism", 2) and $exposed lte 1)>> <<link [[Step away|Brothel Dressing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! <</if>> <<case "School Pool Wardrobe">> <<if $changingRoomGender is "boys">> <<getouticon>><<link [[Leave|School Boy Changing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> <<getouticon>><<link [[Leave|School Girl Changing Room]]>><<cleanupOnWardrobeExit>><</link>> <</if>> <<case "Farm Assault Wardrobe">> <<if hasSexStat("exhibitionism", 5) or $exposed lte 0 or (hasSexStat("exhibitionism", 4) and $exposed lte 1)>> <<link [[Done|Farm Assault Intro]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't remain undressed like this! <</if>> <<case "Prison Wardrobe">> <<link [[Close|Prison Cell]]>><<cleanupOnWardrobeExit>><</link>> <<case "Temple Wardrobe">> <<link [[Close|Temple Bunk]]>><<cleanupOnWardrobeExit>><</link>> <<case "Pirate Wardrobe">> <<link [[Close|Pirate Bed]]>><<cleanupOnWardrobeExit>><</link>> <<case "Office Agency Changing Room">> <<if $exposed lte 1>> <<getouticon>><<link [[Leave|Office Agency]]>><<cleanupOnWardrobeExit>><</link>> <<elseif hasSexStat("exhibitionism", 4)>> <<sneakicon>><<link [[Sneak outside|Office Agency Streak]]>><<cleanupOnWardrobeExit>><</link>><<exhibitionist4>> <<else>> You can't go out like this! <</if>> <<case "Bird Tower Wardrobe">> <<link [[Close|Bird Tower]]>><<cleanupOnWardrobeExit>><</link>> <</switch>> <br><br> <</widget>> <<widget "underwearTypeText">><<silently>> <<if $worn.under_lower.name is "naked">> <<elseif $worn.under_lower.type.includes("swim")>> <<set $_text_output to "swimwear">> <<elseif $worn.under_lower.type.includes("dance")>> <<set $_text_output to "dancewear">> <<else>> <<set $_text_output to "underwear">> <</if>> <</silently>><<if $_text_output>><<print $_text_output>><</if>> <</widget>>
<<effects>> <<set $wardrobe_location to "wardrobe">> <<wardrobeSelection>> You look in your wardrobe. <br><br> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>><<location "changingroom">> <<set $wardrobe_location to "changingRoom">> <<set _earSlimeEnableSwimwear to true>> <<wardrobeSelection>> You are in a small wooden changing room. <br><br> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> You look through the cupboard containing your clothes. There's an old dressing screen for privacy. <br><br> <<set $wardrobe_location to "edensCabin">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> You look through the cupboard containing your clothes. <br><br> <<set $wardrobe_location to "asylum">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> You look through the rustic wardrobe. <br><br> <<set $wardrobe_location to "alexFarm">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> <<set $wardrobe_location to "stripClub">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> <<set $wardrobe_location to "brothel">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> <<wardrobeSelection>> <<set _earSlimeEnableSwimwear to true>> You stand in front of your open locker. <br><br> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> You look through the cupboard containing your clothes. <br><br> <<set $wardrobe_location to "temple">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> You look through the cupboard containing your clothes. <br><br> <<set $wardrobe_location to "pirate">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>><<location "officeBuilding">> <<set $wardrobe_location to "officeBuilding">> <<wardrobeSelection>> You are in the small storage room sanctioned for temps to use for changing. <br><br> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
<<effects>> You look through the wardrobe you built. <br><br> <<set $wardrobe_location to "birdTower">> <<wardrobeSelection>> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> <<wardrobe>>
Are you prepared to add all your <<if $crateContents is "all">> clothes <<else>> outfits <</if>> to the crate and send them to be sold? Might be best to go shopping shortly after. <br><br> <<set _value to 0>> <<for _label, _items range $wardrobe>> <<for _i to 0; _i lt _items.length; _i++>> <<if setup.clothes[_label][clothesIndex(_label,_items[_i])].shop.length is 0>> <<continue>> <</if>> <<if _items[_i].outfitSecondary isnot undefined>> <<continue>> <</if>> <<if _items[_i].outfitPrimary is undefined and $crateContents is "outfits">> <<continue>> <</if>> <<set _value += Math.floor(getClothingCost(_items[_i], _label) * (_items[_i].integrity / clothingData(_label,_items[_i],'integrity_max')) / 3)>> <</for>> <</for>> It will earn you <<printmoney `_value + 5000`>>. <br><br> <<link [[Yes|Wardrobe Sale Crate Result]]>><</link>> <br> <<link [[No|$wardrobeReturnLink]]>> <<unset $wardrobeReturnLink>> <<unset $crateContents>> <</link>>
<<set $tailorMonthlyService to 7>> <<set _value to 0>> <<set _equip to setup.clothingLayer.all>> <<for _eIndex to 0; _eIndex lt _equip.length; _eIndex++>> <<set _toDelete to []>> <<for _iIndex to 0; _iIndex lt $wardrobe[_equip[_eIndex]].length; _iIndex++>> <<if setup.clothes[_equip[_eIndex]][clothesIndex(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex])].shop.length is 0>> <<continue>> <</if>> <<if $wardrobe[_equip[_eIndex]][_iIndex].outfitPrimary is undefined and $crateContents is "outfits">> <<continue>> <</if>> <<set _value += Math.floor(tailorClothingCost($wardrobe[_equip[_eIndex]][_iIndex],_equip[_eIndex]) * ($wardrobe[_equip[_eIndex]][_iIndex].integrity / clothingData(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex],'integrity_max')) / 3)>> <<run _toDelete.push(clone(_iIndex))>> <</for>> <<for _iIndex to $wardrobe[_equip[_eIndex]].length; _iIndex gte 0; _iIndex-->> <<if _toDelete.includes(_iIndex)>> <<run $wardrobe[_equip[_eIndex]].deleteAt(_iIndex)>> <</if>> <</for>> <</for>> The driver takes the crate away, leaving <<printmoney `_value + 5000`>> in its place. <<money `Math.floor(_value + 5000)` "tailor">> <br><br> <<link [[Continue|$wardrobeReturnLink]]>> <<unset $wardrobeReturnLink>> <<unset $crateContents>> <</link>>
Are you prepared to add all your <<if $crateContents is "all">> clothes <<elseif $crateContents is "damaged">> damaged clothes <<else>> outfits <</if>> to the crate and send them to be repaired? Might be best to go shopping shortly after. <br><br> <<set _value to 0>> /* recalculated with adding lower or upper halves when missing */ <<for _label, _items range $wardrobe>> <<for _i to 0; _i lt _items.length; _i++>> <<if isNaN(clothingData(_label,_items[_i],'integrity_max'))>><<continue>><</if>> <<if (_items[_i].outfitPrimary is undefined and _items[_i].outfitSecondary is undefined and $crateContents is "outfits") or (_items[_i].integrity gt clothingData(_label,_items[_i],'integrity_max'))>> <<continue>> <</if>> <<set _value += Math.floor(tailorClothingCost(_items[_i],_label) * (1 - (_items[_i].integrity / clothingData(_label,_items[_i],'integrity_max'))) * 1.25)>> <</for>> <</for>> It will cost you <<if _value gt 5000>> <<printmoney `_value - 5000`>>. <<else>> nothing. <</if>> <br><br> <<if $money gte _value>> <<link [[Yes|Wardrobe Repair Crate Result]]>><</link>> <<else>> Not enough money. <</if>> <br> <<link [[No|$wardrobeReturnLink]]>> <<unset $wardrobeReturnLink>> <<unset $crateContents>> <</link>>
<<set $tailorMonthlyService to 7>> <<set $wardrobeRepair to {timeLeft: 1}>> <<set _equip to setup.clothingLayer.all>> <<set _value to 0>> <<for _eIndex to 0; _eIndex lt _equip.length; _eIndex++>> <<set _toDelete to []>> <<for _iIndex to 0; _iIndex lt $wardrobe[_equip[_eIndex]].length; _iIndex++>> <<if isNaN(clothingData(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex],'integrity_max'))>><<continue>><</if>> <<if $wardrobe[_equip[_eIndex]][_iIndex].integrity is clothingData(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex],'integrity_max') and $wardrobe[_equip[_eIndex]][_iIndex].one_piece isnot "broken" and $crateContents is "damaged">> <<continue>> <</if>> <<if ($wardrobe[_equip[_eIndex]][_iIndex].outfitPrimary is undefined and $wardrobe[_equip[_eIndex]][_iIndex].outfitSecondary is undefined and $crateContents is "outfits") or ($wardrobe[_equip[_eIndex]][_iIndex].integrity gt clothingData(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex],'integrity_max'))>> <<continue>> <</if>> <<set _value += Math.floor(tailorClothingCost($wardrobe[_equip[_eIndex]][_iIndex],_equip[_eIndex]) * (1 - ($wardrobe[_equip[_eIndex]][_iIndex].integrity / clothingData(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex],'integrity_max'))) * 1.25)>> <<if $wardrobeRepair[_equip[_eIndex]] is undefined>> <<set $wardrobeRepair[_equip[_eIndex]] to []>> <</if>> <<if $wardrobe[_equip[_eIndex]][_iIndex].outfitSecondary and $wardrobe[_equip[_eIndex]][_iIndex].one_piece is "broken">> /* If a secondary part of an outfit is broken adds the primary part so the complete outfit will be repaired */ <<set _upperSlot to $wardrobe[_equip[_eIndex]][_iIndex].outfitSecondary[0]>> <<set _upperItem to setup.clothes[_upperSlot].findIndex(x => x.name === setup.clothes[_equip[_eIndex]][clothesIndex(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex])].outfitSecondary[1])>> <<if $wardrobeRepair[_upperSlot] is undefined>> <<set $wardrobeRepair[_upperSlot] to []>> <</if>> <<set _itemStats to [ clone(_upperItem), clone($wardrobe[_equip[_eIndex]][_iIndex].colour), clone($wardrobe[_equip[_eIndex]][_iIndex].colourCustom), clone($wardrobe[_equip[_eIndex]][_iIndex].accessory_colour), clone($wardrobe[_equip[_eIndex]][_iIndex].accessory_colourCustom), false ]>> <<run $wardrobeRepair[_upperSlot].push(clone(_itemStats))>> <<run _toDelete.push(clone(_iIndex))>> <<else>> <<set _splitted to ($wardrobe[_equip[_eIndex]][_iIndex].one_piece === "split" ? true : false)>> <<set _itemStats to [ clone(clothesIndex(_equip[_eIndex],$wardrobe[_equip[_eIndex]][_iIndex])), clone($wardrobe[_equip[_eIndex]][_iIndex].colour), clone($wardrobe[_equip[_eIndex]][_iIndex].colourCustom), clone($wardrobe[_equip[_eIndex]][_iIndex].accessory_colour), clone($wardrobe[_equip[_eIndex]][_iIndex].accessory_colourCustom), clone(_splitted) ]>> <<run $wardrobeRepair[_equip[_eIndex]].push(clone(_itemStats))>> <<run _toDelete.push(clone(_iIndex))>> <</if>> <</for>> <<for _iIndex to $wardrobe[_equip[_eIndex]].length; _iIndex gte 0; _iIndex-->> <<if _toDelete.includes(_iIndex)>> <<run $wardrobe[_equip[_eIndex]].deleteAt(_iIndex)>> <</if>> <</for>> <</for>> <<if _value gt 5000>> <<money `-_value - 5000` "tailor">> The driver takes <<printmoney `_value - 5000`>> and the crate away. <<else>> The driver takes the crate away. <</if>> <br><br> <<link [[Continue|$wardrobeReturnLink]]>> <<unset $wardrobeReturnLink>> <<unset $crateContents>> <</link>>
/*The "generalWear" widget works in the same way as the "...wear" widgets, however, the argument are as follows; slot, item index, colour, accessory_colour*/ <<widget "generalWear">> <<if $worn[_args[0]].cursed is 1>> <<elseif _args[0] and _args[1]>> <<set $_slot to _args[0]>> <<unset _strip_restrict>><<unset _cursedPrevent>> /*Check the current worn outfit related items for being locked on the character*/ <<set _outfitPrimaryWear to setup.clothes[$_slot][_args[1]].outfitPrimary>> <<if _outfitPrimaryWear isnot undefined>> <<for _outfitSlot, _value range _outfitPrimaryWear>> <<if $worn[_outfitSlot].cursed is 1>> <<set _cursedPrevent to true>> <</if>> <</for>> <</if>> <<if _cursedPrevent isnot true>> /*Primary Piece*/ <<if $worn[$_slot].name isnot "naked">> <<generalUndress `clothesReturnLocation($worn[$_slot])` $_slot>> <</if>> <<equipClothesItemFromDefault $_slot _args[1] _args[2] _args[3] _args[4]>> /*Outfit pieces*/ <<if _outfitPrimaryWear isnot undefined>> <<set _colour to $worn[$_slot].colour>> <<set _accessory_colour to $worn[$_slot].accessory_colour>> <<set _pattern to $worn[$_slot].pattern>> <<for _outfitSlot, _outfitName range _outfitPrimaryWear>> <<if $worn[_outfitSlot].name isnot "naked">> <<generalUndress `clothesReturnLocation($worn[_outfitSlot])` _outfitSlot>> <</if>> <<set _pieceId to setup.clothes[_outfitSlot].findIndex(item => item.name is _outfitName)>> <<if _pieceId isnot -1>> <!-- findIndex() returns -1 if no index is found --> <<equipClothesItemFromDefault _outfitSlot _pieceId _colour _accessory_colour _pattern>> <<else>> <!-- Error --> <</if>> <</for>> <</if>> <</if>> <<unset _outfitPrimaryWear>> <</if>> <</widget>> <!-- args: slot, item index, colour, accessory_colour, pattern --> <<widget "equipClothesItemFromDefault">> <<set $_slot to _args[0]>> <<set $_item to clone(setup.clothes[$_slot][_args[1]])>> <<set $_item.lastTaken to clone($wardrobes.shopReturn)>> <<if $_item.colour_options.length gt 0>> <<if _args[2]>> <<set $_item.colour to _args[2]>> <<if $_item.colour is "custom">> <<set $_item.colourCustom to customColour($customColors.color.primary, $customColors.saturation.primary, $customColors.brightness.primary, $customColors.contrast.primary, $customColors.sepia.primary)>> <</if>> <<else>> <<set _colorOption to clone($_item.colour_options)>> <<run _colorOption.delete("custom")>> <<set $_item.colour to _colorOption.random()>> <</if>> <</if>> <<if $_item.accessory_colour_options.length gt 0 and $_item.accessory is 1>> <<if _args[3]>> <<set $_item.accessory_colour to _args[3]>> <<if $_item.accessory_colour is "custom">> <<set $_item.accessory_colourCustom to customColour($customColors.color.secondary, $customColors.saturation.secondary, $customColors.brightness.secondary, $customColors.contrast.secondary, $customColors.sepia.secondary)>> <</if>> <<else>> <<set _accessoryColorOption to clone($_item.accessory_colour_options)>> <<run _accessoryColorOption.delete("custom")>> <<set $_item.accessory_colour to _accessoryColorOption.random()>> <</if>> <</if>> <<if $_item.pattern_options?.length gt 0>> <<if _args[4]>> <<set $_item.pattern to _args[4]>> <<else>> <<set _patternOption to clone($_item.pattern_options)>> <<set $_item.pattern to _patternOption.random()>> <</if>> <</if>> <<set $worn[$_slot] to $_item>> <<run clothesDataTrimmer($worn[$_slot])>> <</widget>> /*The "...wear" widgets give the player character new clothing. They take the index of the item you want to provide as the first argument, and the colour of the item as an optional second argument. The third argument defines the secondary colour, optionally. Only the upper half is required in the case of outfits. Currently worn clothes are sent to wardrobe.*/ <<widget "overupperwear">> <<generalWear "over_upper" _args[0] _args[1] _args[2]>> <</widget>> <<widget "overlowerwear">> <<generalWear "over_lower" _args[0] _args[1] _args[2]>> <</widget>> <<widget "upperwear">> <<generalWear "upper" _args[0] _args[1] _args[2]>> <</widget>> <<widget "lowerwear">> <<generalWear "lower" _args[0] _args[1] _args[2]>> <</widget>> <<widget "underupperwear">> <<generalWear "under_upper" _args[0] _args[1] _args[2]>> <</widget>> <<widget "underlowerwear">> <<generalWear "under_lower" _args[0] _args[1] _args[2]>> <</widget>> <<widget "genitalswear">> <<generalWear "genitals" _args[0] _args[1] _args[2]>> <</widget>> <<widget "overheadwear">> <<generalWear "over_head" _args[0] _args[1] _args[2]>> <</widget>> <<widget "headwear">> <<generalWear "head" _args[0] _args[1] _args[2]>> <</widget>> <<widget "facewear">> <<generalWear "face" _args[0] _args[1] _args[2]>> <</widget>> <<widget "neckwear">> <<generalWear "neck" _args[0] _args[1] _args[2]>> <</widget>> <<widget "leash">>/*Always replaces neckwear, even if cursed. */ <<if $worn.neck.cursed is 1>> <<set $worn.neck.type.push("broken")>> <<neckruined>> <</if>> <<generalWear "neck" _args[0] _args[1] _args[2]>> <</widget>> <<widget "handswear">> <<generalWear "hands" _args[0] _args[1] _args[2]>> <</widget>> <<widget "handheldwear">> <<generalWear "handheld" _args[0] _args[1] _args[2] _args[3]>> <</widget>> <<widget "legswear">> <<generalWear "legs" _args[0] _args[1] _args[2]>> <</widget>> <<widget "feetwear">> <<generalWear "feet" _args[0] _args[1] _args[2]>> <</widget>> /*The "generalSend" widget works in the same way as the "...send" widgets, however, the argument are as follows; Location, slot, item index, colour, accessory_colour*/ <<widget "generalSend">> <<set $_selectedWardrobe to (_args[0] is "wardrobe" or !(_args[0] in $wardrobes) ? $wardrobe : $wardrobes[_args[0]])>> <<set $_outfitPrimary to setup.clothes[_args[1]][_args[2]].outfitPrimary>> <<if _args[0]>> <<sendToWardrobeFromDefault _args[0] _args[1] _args[2] _args[3] _args[4]>> <<if $_outfitPrimary isnot undefined>> <<set $_outfitPiece to $_selectedWardrobe[_args[1]].last()>> <<set _colour to $_outfitPiece.colour>> <<set _colourCustom to $_outfitPiece.colourCustom>> <<set _accessory_colour to $_outfitPiece.accessory_colour>> <<set _accessory_colourCustom to $_outfitPiece.accessory_colourCustom>> <<for $_label, $_value range $_outfitPrimary>> <<set _pieceId to setup.clothes[$_label].findIndex(item => item.name is $_value)>> <<if _pieceId isnot -1>> <!-- findIndex() returns -1 if no index is found --> <<if (!_hoodDown or $_label isnot "head") and _pieceId.one_piece isnot "split">> /*If hood is down, don't make a hood. If an upper part of an outfit is separated don't add a lower part*/ <<sendToWardrobeFromDefault _args[0] $_label _pieceId _colour _accessory_colour>> <</if>> <<else>> <!-- Error --> <</if>> <</for>> <</if>> <</if>> <</widget>> <<widget "carriedSend">> <<if _args[0] is "wardrobe" or Object.keys($wardrobes).includes(_args[0])>> <<set $_undressSlot to _args[1]>> <<set $_outfitPrimaryUndress to $carried[$_undressSlot].outfitPrimary>> <<set _slots to []>> <<set $_selectedWardrobe to selectWardrobe()>> <<if $_outfitPrimaryUndress isnot undefined>> <<for _labelUndress, _valueUndress range $_outfitPrimaryUndress>> <<if _valueUndress isnot "broken" and _valueUndress isnot "split">> <<if !setup.wardrobeSkip.includes($carried[_labelUndress].name) and $carried[_labelUndress].name is _valueUndress>> <<set $_selectedWardrobe[_labelUndress].push(clone($carried[_labelUndress]))>> <<run _slots.push(_labelUndress)>> <</if>> <<set $carried[_labelUndress] to clone(setup.clothes[_labelUndress][0])>> <</if>> <</for>> <</if>> <<if !setup.wardrobeSkip.includes($carried[$_undressSlot].name)>> <<set $_selectedWardrobe[$_undressSlot].push(clone($carried[$_undressSlot]))>> <</if>> <<set $carried[$_undressSlot] to clone(setup.clothes[$_undressSlot][0])>> <<run _slots.push($_undressSlot)>> <</if>> <</widget>> <<widget "sendToWardrobeFromDefault">> <<set $_location to _args[0]>> <<set $_slot to _args[1]>> <<set $_selectedWardrobe to ($_location is "wardrobe" or !($_location in $wardrobes) ? $wardrobe : $wardrobes[$_location])>> <<set $_selectedWardrobe[$_slot].push(clone(setup.clothes[$_slot][_args[2]]))>> <<set $_item to $_selectedWardrobe[$_slot].last()>> <<if $_item.colour_options.length gt 0>> <<if _args[3]>> <<set $_item.colour to _args[3]>> <<if $_item.colour is "custom">> <<if _colourCustom isnot undefined>> <<set $_item.colourCustom to _colourCustom>> <<unset _colourCustom>> <<else>> <<set $_item.colourCustom to customColour($customColors.color.primary, $customColors.saturation.primary, $customColors.brightness.primary, $customColors.contrast.primary, $customColors.sepia.primary)>> <</if>> <</if>> <<else>> <<set $_item.colour to clone($_item.colour_options.random())>> <</if>> <</if>> <<if $_item.accessory_colour_options.length gt 0 and $_item.accessory is 1>> <<if _args[4]>> <<set $_item.accessory_colour to _args[4]>> <<if $_item.accessory_colour is "custom">> <<if _accessory_colourCustom isnot undefined>> <<set $_item.accessory_colourCustom to _accessory_colourCustom>> <<unset _accessory_colourCustom>> <<else>> <<set $_item.accessory_colourCustom to customColour($customColors.color.secondary, $customColors.saturation.secondary, $customColors.brightness.secondary, $customColors.contrast.secondary, $customColors.sepia.secondary)>> <</if>> <</if>> <<else>> <<set $_item.accessory_colour to clone($_item.accessory_colour_options.random())>> <</if>> <</if>> <<if _hoodDown and $_item.hoodposition isnot undefined>> <<set $_item.hoodposition to "down">> <<run delete $_item.outfitPrimary.head>> <</if>> <<run clothesDataTrimmer($_item)>> <</widget>> /*The "...send" widgets give the player character new clothing. They take the index of the item you want to provide as an argument, the location you want to send it to as a second argument, (such as "wardrobe",) and the colour of the item as an optional third argument. Fourth argument defines the secondary colour, if present. Only the upper half is required in the case of outfits. They differ from the "...wear" widgets in that they send clothes to your wardrobe, rather than put them on your character.*/ <<widget "overuppersend">> <<generalSend _args[1] "over_upper" _args[0] _args[2] _args[3]>> <</widget>> <<widget "overlowersend">> <<generalSend _args[1] "over_lower" _args[0] _args[2] _args[3]>> <</widget>> <<widget "uppersend">> <<generalSend _args[1] "upper" _args[0] _args[2] _args[3]>> <</widget>> <<widget "lowersend">> <<generalSend _args[1] "lower" _args[0] _args[2] _args[3]>> <</widget>> <<widget "underuppersend">> <<generalSend _args[1] "under_upper" _args[0] _args[2] _args[3]>> <</widget>> <<widget "underlowersend">> <<generalSend _args[1] "under_lower" _args[0] _args[2] _args[3]>> <</widget>> <<widget "genitalssend">> <<generalSend _args[1] "genitals" _args[0] _args[2] _args[3]>> <</widget>> <<widget "overheadsend">> <<generalSend _args[1] "over_head" _args[0] _args[2] _args[3]>> <</widget>> <<widget "headsend">> <<generalSend _args[1] "head" _args[0] _args[2] _args[3]>> <</widget>> <<widget "facesend">> <<generalSend _args[1] "face" _args[0] _args[2] _args[3]>> <</widget>> <<widget "necksend">> <<generalSend _args[1] "neck" _args[0] _args[2] _args[3]>> <</widget>> <<widget "handssend">> <<generalSend _args[1] "hands" _args[0] _args[2] _args[3]>> <</widget>> <<widget "handheldsend">> <<generalSend _args[1] "handheld" _args[0] _args[2] _args[3]>> <</widget>> <<widget "legssend">> <<generalSend _args[1] "legs" _args[0] _args[2] _args[3]>> <</widget>> <<widget "feetsend">> <<generalSend _args[1] "feet" _args[0] _args[2] _args[3]>> <</widget>> /*The "...strip" widgets remove the player character's clothing. The clothing remains with the player character, ready to be put back on.*/ <<widget "strip">> <<overupperstrip>> <<overlowerstrip>> <<upperstrip>> <<lowerstrip>> <<underupperstrip>> <<if playerHasStrapon() and _args[0] isnot undefined>> <!-- keep wearing the strap-on --> <<else>> <<underlowerstrip>> <</if>> <<headstrip>> <<facestrip>> <<neckstrip>> <<handsstrip>> <<handheldstrip>> <<legsstrip>> <<feetstrip>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "clothesstrip">> <<overupperstrip>> <<overlowerstrip>> <<upperstrip>> <<lowerstrip>> <<underupperstrip>> <<underlowerstrip>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "shavestrip">> <<overupperstrip>> <<overlowerstrip>> <<upperstrip>> <<lowerstrip>> <<underlowerstrip>> <<legsstrip>> <<feetstrip>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "generalStrip">> <<if _args[0]>> <<unset _stripSlot>> /*Checks if the current slot is part of an outfit and switches to the main piece if that is the case*/ <<if $worn[_args[0]].outfitSecondary isnot undefined>> <<if $worn[$worn[_args[0]].outfitSecondary[0]].name is $worn[_args[0]].outfitSecondary[1]>> <<set _stripSlot to $worn[_args[0]].outfitSecondary[0]>> <</if>> <</if>> <<if _stripSlot is undefined>> <<set _stripSlot to _args[0]>> <</if>> <<if $worn[_stripSlot].cursed is 1>> <<elseif $worn[_stripSlot].name isnot "naked">> <<unset _cursedPrevent>> /*Check the current worn outfit related items for being locked on the character*/ <<set _outfitPrimaryStrip to $worn[_stripSlot].outfitPrimary>> <<if _outfitPrimaryStrip isnot undefined>> <<for _labelStrip, _valueStrip range _outfitPrimaryStrip>> <<if $worn[_labelStrip].cursed is 1 and $worn[_labelStrip].name is _valueStrip>> <<set _cursedPrevent to true>> <</if>> <</for>> <</if>> <<if _cursedPrevent isnot true>> <<set V[_stripSlot.replace(/_/g,"")+'last'] to $worn[_stripSlot].name>> <<set $carried[_stripSlot] to clone($worn[_stripSlot])>> <<set $worn[_stripSlot] to clone(setup.clothes[_stripSlot][0])>> <<if _outfitPrimaryStrip isnot undefined>> <<for _labelStrip, _valueStrip range _outfitPrimaryStrip>> <<if $worn[_labelStrip].name is _valueStrip>> <<set V[_labelStrip.replace(/_/g,"")+'last'] to $worn[_labelStrip].name>> <<set $carried[_labelStrip] to clone($worn[_labelStrip])>> <<set $worn[_labelStrip] to clone(setup.clothes[_labelStrip][0])>> <</if>> <</for>> <</if>> <</if>> <<unset _outfitPrimaryStrip>> <</if>> <</if>> <</widget>> <<widget "overupperstrip">> <<generalStrip "over_upper">> <</widget>> <<widget "overlowerstrip">> <<generalStrip "over_lower">> <</widget>> <<widget "upperstrip">> <<generalStrip "upper">> <</widget>> <<widget "lowerstrip">> <<generalStrip "lower">> <</widget>> <<widget "underupperstrip">> <<generalStrip "under_upper">> <</widget>> <<widget "underlowerstrip">> <<generalStrip "under_lower">> <</widget>> <<widget "overheadstrip">> <<generalStrip "over_head">> <</widget>> <<widget "headstrip">> <<generalStrip "head">> <</widget>> <<widget "facestrip">> <<generalStrip "face">> <</widget>> <<widget "neckstrip">> <<generalStrip "neck">> <</widget>> <<widget "handsstrip">> <<generalStrip "hands">> <</widget>> <<widget "handheldstrip">> <<generalStrip "handheld">> <</widget>> <<widget "legsstrip">> <<generalStrip "legs">> <</widget>> <<widget "feetstrip">> <<generalStrip "feet">> <</widget>> /* temporarily equips a handheld "prop" for visual effect in scenes. props can be cleared earlier in a scene via <<handheldon>> or <<clotheson>>, and are cleared in <<endevent>> */ <<widget "wearProp">> <<if _args[0].includes('|')>> <<set _prop to _args[0].split('|')>> <<set _var to _prop[0]>> <<set _colour to _prop[1] || 0>> <<set _pattern to _prop[2] || 0>> <<else>> <<set _var to _args[0]>> <<set _colour to _args[1] || 0>> <<set _pattern to _args[2] || 0>> <</if>> <<set _propIndex to (setup.clothes.handheld.findIndex(item => item.variable is _var) || 0)>> <<if $worn.handheld.type.includes("prop")>> <<handheldon>> <</if>> <<set $propEquipped to 1>> <<handheldstrip>> <<if _propIndex gt 1>> <<handheldwear _propIndex _colour 0 _pattern>> <<else>> <<run Errors.report("Invalid prop variable: " + _args[0])>> <</if>> <</widget>> /*Returns all carried clothes back to the wardrobe*/ <<widget "returnCarried">> <<if _args[0] is "wardrobe" or $wardrobes[_args[0]] is undefined>> <<set $_selectedWardrobe to $wardrobe>> <<else>> <<set $_selectedWardrobe to $wardrobes[_args[0]]>> <</if>> <<run Object.keys($carried).forEach(slot => { if (!setup.wardrobeSkip.includes($carried[slot].name)) { let location = clothesReturnLocation($carried[slot]); if(location === "wardrobe" || !$wardrobes[location].unlocked){ $wardrobe[slot].push(clone($carried[slot])); } else { $wardrobes[location][slot].push(clone($carried[slot])); } } $carried[slot] = clone(setup.clothes[slot][0]); })>> <</widget>> /*The "dontHideForNow" widget makes the player character not cover themselves even when self-conscious*/ /*Use "dontHideRevert" widget to go back to normal behaviour*/ <<widget "dontHideForNow">> <<set $dontHideNormal to $dontHide>> <<set $dontHide to true>> <</widget>> <<widget "dontHideRevert">> <<set $dontHide to $dontHideNormal>> <</widget>> /*The "...ruined" widgets destroy the player character's current clothing, whether worn or carried.*/ <<widget "ruined">> <<overupperruined>> <<overlowerruined>> <<upperruined>> <<lowerruined>> <<underupperruined>> <<underlowerruined>> <<headruined>> <<faceruined>> <<neckruined>> <<handsruined>> <<legsruined>> <<feetruined>> <<handheldruined>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "clothesruined">> <<overupperruined>> <<overlowerruined>> <<upperruined>> <<lowerruined>> <<underupperruined>> <<underlowerruined>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "overruined">> <<overupperruined>> <<overlowerruined>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "middleruined">> <<upperruined>> <<lowerruined>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> <<widget "underruined">> <<underupperruined>> <<underlowerruined>> <<setKnowsAboutPregnancyCurrentLoaded>> <</widget>> /*_args[0] = slot name*/ /*_args[1] = true for ruin all pieces of an outfit*/ /*_args[2] = "worn" or "carried" to destroy just that category"*/ <<widget "generalRuined">> <<set _destroyWorn to !_args[2] || _args[2] is "worn">> <<set _destroyCarry to !_args[2] || _args[2] is "carried">> <<if _args[0]>> <<set $eventskipoverrule to 1>> <<if $worn[_args[0]].cursed is 1 and !$worn[_args[0]].type.includes("broken") and !$worn[_args[0]].type.includes("split") or ($worn[_args[0]].name is "naked" and $carried[_args[0]].name is "naked")>> <<else>> <<if _destroyWorn>> <<switch _args[0]>> <<case "upper">> <<set $upperwet to 0>><<set $upperwetstage to 0>> <<if $worn.upper.type.includes("binding") and _unbind_check isnot 1>> <<unbind>> <</if>> <<case "lower">><<set $lowerwet to 0>><<set $lowerwetstage to 0>> <<case "under_upper">><<set $underupperwet to 0>><<set $underupperwetstage to 0>> <<case "under_lower">><<set $underlowerwet to 0>><<set $underlowerwetstage to 0>> <<if $worn.under_lower.type.includes("strap-on")>> <<set $penisstate to "none">><<set $penisuse to "none">> <<if $penistarget isnot undefined and typeof $penistarget is "number">> <<set $NPCList[$penistarget].penis to 0>> <</if>> <</if>> <</switch>> /* In case you lose the gold chastity belt before donating it */ <<if $worn[_args[0]].name is "gold chastity belt" and $gold_chastity_held isnot true and ($museumAntiques.antiques.antiquegoldchastitybelt is "found" or $museumAntiques.antiques.antiquegoldchastitybelt is "talk")>> <<museumAntiqueStatus "antiquegoldchastitybelt" "notFound">> <</if>> <</if>> /*Re-buy*/ <<if _args[0] isnot "genitals" and $clothingrebuy is 1 and !_noRebuy>> <<if _destroyCarry && $carried[_args[0]].name isnot "naked" and $carried[_args[0]].cursed isnot 1>> <<generalRuinedRebuy _args[0] $carried>> <</if>> <<if _destroyWorn && $worn[_args[0]].name isnot "naked" and $worn[_args[0]].cursed isnot 1>> <<generalRuinedRebuy _args[0] $worn>> <</if>> <</if>> <<unset _noRebuy>> /*Other Pieces*/ <<if _destroyCarry>> <<set _outfitPrimaryRuined to $carried[_args[0]].outfitPrimary>> <<if _outfitPrimaryRuined isnot undefined>> <<for _labelRuined, _valueRuined range _outfitPrimaryRuined>> <<if $carried[_labelRuined].outfitSecondary isnot undefined>> <<if $carried[_labelRuined].outfitSecondary[1] is $carried[_args[0]].name>> <<set $carried[_labelRuined].outfitSecondary[1] to "broken">> <<set $carried[_labelRuined].one_piece to "broken">> <<set $carried[_labelRuined].set to _labelRuined>> <<if _args[1]>> <<generalRuined _labelRuined>> <<elseif _labelRuined is "head" and $carried.head.hood>> <<headruined>> <<elseif _labelRuined is "over_head" and $carried.over_head.hood>> <<overheadruined>> <</if>> <</if>> <</if>> <</for>> <</if>> <<unset _outfitPrimaryRuined>> <</if>> <<if _destroyWorn>> <<set _outfitPrimaryRuined to $worn[_args[0]].outfitPrimary>> <<if _outfitPrimaryRuined isnot undefined>> <<for _labelRuined, _valueRuined range _outfitPrimaryRuined>> <<if $worn[_labelRuined].outfitSecondary isnot undefined>> <<if $worn[_labelRuined].outfitSecondary[1] is $worn[_args[0]].name>> <<set $worn[_labelRuined].outfitSecondary[1] to "broken">> <<set $worn[_labelRuined].one_piece to "broken">> <<set $worn[_labelRuined].set to _labelRuined>> <<if _args[1]>> <<generalRuined _labelRuined>> <<elseif _labelRuined is "head" and $worn.head.hood>> <<headruined>> <<elseif _labelRuined is "over_head" and $worn.over_head.hood>> <<overheadruined>> <</if>> <</if>> <</if>> <</for>> <</if>> <<unset _outfitPrimaryRuined>> <</if>> /*Main Outfit Piece*/ <<if _destroyCarry>> <<set _outfitSecondaryRuined to $carried[_args[0]].outfitSecondary>> <<if _outfitSecondaryRuined isnot undefined>> <<if $carried[_outfitSecondaryRuined[0]].name is _outfitSecondaryRuined[1] and $carried[_outfitSecondaryRuined[0]].outfitPrimary isnot undefined>> <<if $carried[_outfitSecondaryRuined[0]].outfitPrimary[_args[0]] is $carried[_args[0]].name>> <<if _args[1]>> <<generalRuined _outfitSecondaryRuined[0] _args[1]>> <<else>> <<set $carried[_outfitSecondaryRuined[0]].outfitPrimary[_args[0]] to "broken">> <<set $carried[_outfitSecondaryRuined[0]].one_piece to "broken">> <</if>> <</if>> <</if>> <</if>> <<unset _outfitSecondaryRuined>> <</if>> <<if _destroyWorn>> <<set _outfitSecondaryRuined to $worn[_args[0]].outfitSecondary>> <<if _outfitSecondaryRuined isnot undefined>> <<if $worn[_outfitSecondaryRuined[0]].name is _outfitSecondaryRuined[1] and $worn[_outfitSecondaryRuined[0]].outfitPrimary isnot undefined>> <<if $worn[_outfitSecondaryRuined[0]].outfitPrimary[_args[0]] is $worn[_args[0]].name>> <<if _args[1]>> <<generalRuined _outfitSecondaryRuined[0] _args[1]>> <<else>> <<set $worn[_outfitSecondaryRuined[0]].outfitPrimary[_args[0]] to "broken">> <<set $worn[_outfitSecondaryRuined[0]].one_piece to "broken">> <</if>> <</if>> <</if>> <</if>> <<unset _outfitSecondaryRuined>> <</if>> <<if _destroyWorn>> <<set $worn[_args[0]] to clone(setup.clothes[_args[0]][0])>> <</if>> <<if _destroyCarry>> <<set $carried[_args[0]] to clone(setup.clothes[_args[0]][0])>> <</if>> <</if>> <</if>> <</widget>> /*_args[0] - slot, _args[1] - $worn or $carried*/ <<widget "generalRuinedRebuy">> <<if _args[0] and _args[1]>> <<set $_slot to _args[0]>> <<set $_item to _args[1][$_slot]>> <<set $_setupItem to setup.clothes[$_slot][clothesIndex($_slot,$_item)]>> <<set $_return to clothesReturnLocation($_item,"rebuy")>> <<if $_setupItem.shop.length isnot 0 and $_item.one_piece isnot "broken" and $_setupItem.cursed isnot 1>> /* NO SPLIT ADDED */ /*If item is half of an outfit, rebuy the primary half instead by redefining the variables defined above*/ <<if $_item.outfitSecondary isnot undefined and $_item.outfitSecondary[1] isnot "broken" and $_item.outfitSecondary[1] isnot "split">> <<set $_slot to $_item.outfitSecondary[0]>> <<set $_item to _args[1][$_slot]>> <<set $_setupItem to setup.clothes[$_slot][clothesIndex($_slot,$_item)]>> <</if>> <<set $_cost to Math.trunc(tailorClothingCost($_item, $_slot) * 1.5)>> <<set _hoodDown to $_item.hoodposition is "down">> <<if $_item.colourCustom isnot undefined>><<set _colourCustom to $_item.colourCustom>><</if>> <<if $_item.accessory_colourCustom isnot undefined>><<set _accessory_colourCustom to $_item.accessory_colourCustom>><</if>> <<if $_item.outfitSecondary isnot undefined and $_item.outfitSecondary[1] is "broken">> /* NO SPLIT ADDED */ <<elseif $money gte $_cost>> <<generalSend $_return $_slot $_setupItem.index $_item.colour $_item.accessory_colour>> <<if $_item.one_piece is "split">> <<set $_selectedWardrobe to selectWardrobe($_return, "return")>> <<set $_selectedWardrobe[$_slot].last().one_piece to "split">> <<if $_item.outfitPrimary>> <<for $_rangeSlot, $_value range $_selectedWardrobe[$_slot].last().outfitPrimary>> <<set $_selectedWardrobe[$_slot].last().outfitPrimary[$_rangeSlot] to "split">> <</for>> <<elseif $_item.outfitSecondary>> <<set $_selectedWardrobe[$_slot].last().outfitSecondary[1] to "split">> <</if>> <</if>> <<money `-$_cost` "clothes">> <<run $rebuy_success.push([clone($_item.name), $_return])>> <<set $effectsmessage to 1>> <<else>> <<run $rebuy_failure.push(clone($_item.name))>> <<set $effectsmessage to 1>> <</if>> <<unset _hoodDown>> <</if>> <</if>> <</widget>> <<widget "overupperruined">> <<set _noRebuy to _args[0]>> <<generalRuined "over_upper">> <</widget>> <<widget "overlowerruined">> <<set _noRebuy to _args[0]>> <<generalRuined "over_lower">> <</widget>> <<widget "upperruined">> <<set _noRebuy to _args[0]>> <<if $worn.upper.name is "naked" and $worn.under_upper.type.includes("covered")>> <<generalRuined "under_upper">> <<else>> <<generalRuined "upper">> <</if>> <</widget>> <<widget "lowerruined">> <<set _noRebuy to _args[0]>> <<if $worn.lower.name is "naked" and $worn.under_lower.type.includes("covered")>> <<generalRuined "under_lower">> <<else>> <<generalRuined "lower">> <</if>> <</widget>> <<widget "underupperruined">> <<set _noRebuy to _args[0]>> <<if $worn.under_lower.type.includes("naked")>> <<set $_exposedType to $worn.under_lower.exposedType>> <</if>> <<generalRuined "under_upper">> <<if $_exposedType and $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to $_exposedType>> <</if>> <</widget>> <<widget "underlowerruined">> <<set _noRebuy to _args[0]>> <<if $worn.under_lower.type.includes("naked")>> <<set $_exposedType to $worn.under_lower.exposedType>> <</if>> <<generalRuined "under_lower">> <<if _args[1] and $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to _args[1]>> <<elseif $_exposedType and $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to $_exposedType>> <<elseif !$_exposedType>> <<set $worn.under_lower.exposedType to "ruined">> <</if>> <</widget>> <<widget "genitalsruined">> <<set _noRebuy to _args[0]>> <<generalRuined "genitals">> <</widget>> <<widget "overheadruined">> <<set _noRebuy to _args[0]>> <<generalRuined "over_head">> <</widget>> <<widget "headruined">> <<set _noRebuy to _args[0]>> <<generalRuined "head">> <</widget>> <<widget "faceruined">> <<set _noRebuy to _args[0]>> <<generalRuined "face">> <</widget>> <<widget "neckruined">> <<set _noRebuy to _args[0]>> <<generalRuined "neck">> <</widget>> <<widget "handsruined">> <<set _noRebuy to _args[0]>> <<generalRuined "hands">> <</widget>> <<widget "handheldruined">> <<set _noRebuy to _args[0]>> <<if _args[1] is true>> /* only destroy prop */ <<if $propEquipped is 1>> <<generalRuined "handheld" true "worn">> <<set $propEquipped to 0>> <</if>> <<else>> <<generalRuined "handheld">> <</if>> <</widget>> <<widget "legsruined">> <<set _noRebuy to _args[0]>> <<generalRuined "legs">> <</widget>> <<widget "feetruined">> <<set _noRebuy to _args[0]>> <<generalRuined "feet">> <</widget>> /*The "...on" widgets put on clothing removed with the "...strip" widgets.*/ <<widget "outfiton">> <<for $_slot range setup.clothingLayer.torso_inner>> <<generalOn $_slot>> <</for>> <</widget>> <<widget "clotheson">> <<for $_slot range setup.clothingLayer.all>> <<generalOn $_slot>> <</for>> <<buttplugon>> <<outfitChecks>> <<if !(_fullyNaked)>> You fix your clothing<<if $rightarm isnot "bound" and $worn.handheld.name isnot "naked">> and <<= $worn.handheld.name.includes("balloon") ? "retrieve" : "pick up">> your $worn.handheld.name<</if>>.<br><br> <<elseif $rightarm isnot "bound" and $worn.handheld.name isnot "naked">> You <<= $worn.handheld.name.includes("balloon") ? "retrieve" : "pick up">> your $worn.handheld.name.<br><br> <</if>> <<exposure>> <<if _args[0] is "towel">> <<towelup>> <<elseif _args[0] is "plant">> <<plantup>> <</if>> <<if $exposed gte 1>> You are conscious of your <<nudity>>. <br><br> <</if>> <</widget>> <<widget "generalOn">> <<if _args[0]>> /*Checks if the current slot is part of an outfit and switches to the main piece if that is the case*/ <<if $carried[_args[0]].outfitSecondary isnot undefined and $carried[$carried[_args[0]].outfitSecondary[0]].name is $carried[_args[0]].outfitSecondary[1]>> <<set $_slot to $carried[_args[0]].outfitSecondary[0]>> <<else>> <<set $_slot to _args[0]>> <</if>> <<set _slots to []>> <<if $propEquipped is 1>> <<set _noRebuy to true>> <<generalRuined "handheld" true "worn">> <<set $propEquipped to 0>> <</if>> <<if $carried[$_slot].name isnot "naked">> <<if $worn[$_slot].cursed is 1>> <<carriedSend "wardrobe" $_slot>> <<else>> <<set _slots.pushUnique($_slot)>> <<set $worn[$_slot] to clone($carried[$_slot])>> <<set $carried[$_slot] to clone(setup.clothes[$_slot][0])>> <!-- set this slot to "naked" --> <<set _outfitPrimaryOn to $worn[$_slot].outfitPrimary or []>> <<for $_outfitPieceSlot, $_outfitPieceName range _outfitPrimaryOn>> <<if $carried[$_outfitPieceSlot].name is $_outfitPieceName>> <<set $worn[$_outfitPieceSlot] to clone($carried[$_outfitPieceSlot])>> <<set $carried[$_outfitPieceSlot] to clone(setup.clothes[$_outfitPieceSlot][0])>> <!-- set this slot to "naked" --> <<set _slots.pushUnique($_outfitPieceSlot)>> <</if>> <</for>> <<unset _outfitPrimaryOn>> <</if>> <</if>> <<run _slots.pushUnique($_slot)>> <!-- Ensure that this slot's state is properly reset --> /*Resets status of existing clothing*/ <<run _slots.forEach(slot => resetClothingState(slot))>> <<if _slots.includes("under_lower") and $worn.under_lower.type.includes("strap-on")>> <<run patchStraponsWearStatus()>> <</if>> <</if>> <</widget>> <<widget "overupperon">> <<generalOn "over_upper">> <</widget>> <<widget "overloweron">> <<generalOn "over_lower">> <</widget>> <<widget "upperon">> <<generalOn "upper">> <</widget>> <<widget "loweron">> <<generalOn "lower">> <</widget>> <<widget "underupperon">> <<generalOn "under_upper">> <</widget>> <<widget "underloweron">> <<generalOn "under_lower">> <</widget>> <<widget "overheadon">> <<generalOn "over_head">> <</widget>> <<widget "headon">> <<generalOn "head">> <</widget>> <<widget "faceon">> <<generalOn "face">> <</widget>> <<widget "neckon">> <<generalOn "neck">> <</widget>> <<widget "handson">> <<generalOn "hands">> <</widget>> <!-- [0] - if truthy, only run if player has a prop --> <<widget "handheldon">> <<if _args[0]>> <<if $propEquipped is 1 and $worn.handheld.type.includes("prop")>> <<generalOn "handheld">> <<set $propEquipped to 0>> <</if>> <<else>> <<generalOn "handheld">> <</if>> <</widget>> <<widget "legson">> <<generalOn "legs">> <</widget>> <<widget "feeton">> <<generalOn "feet">> <</widget>> <<widget "buttplugon">> <<if $worn.butt_plug isnot undefined and $worn.butt_plug.state is "removed">> <<set $worn.butt_plug.state to "worn">> <</if>> <</widget>> <<widget "clothesontowel">> <<clotheson "towel">> <</widget>> <<widget "clothesonplant">> <<clotheson "plant">> <</widget>> /*The "...steal" widgets destroy clothing carried by the PC, and output text describing the event. If argument is "strip", then they'll also take clothes worn by the PC.*/ <<widget "steal">> <<set _temp_steal to _args[0]>> <<for $_slot range setup.clothingLayer.body>> <<generalSteal $_slot _temp_steal>> <</for>> <</widget>> <<widget "stealclothes">> <<set _temp_steal to _args[0]>> <<for $_slot range setup.clothingLayer.torso_inner>> <<generalSteal $_slot _temp_steal>> <</for>> <</widget>> <<widget "generalSteal">> <<if _args[0]>> <<set $_wornTarget to $worn[_args[0]]>> <<set $_carriedTarget to $carried[_args[0]]>> <<if $_wornTarget.name isnot "naked" and $_wornTarget.cursed isnot 1 and _args[1] is "strip">> <<if $stealtextskip isnot 1>> <<if $enemyno gte 2>>They tear<<else>><<He>> tears<</if>> your <<print $_wornTarget.name>> off your body. <br> <</if>> <<generalRuined _args[0]>> <<elseif $_carriedTarget.name isnot "naked">> <<if $stealtextskip isnot 1>> <<if $enemyno gte 2>>They keep<<else>><<He>> keeps<</if>> your <<print $_carriedTarget.name>> as a souvenir. <br> <</if>> <<if $_carriedTarget.outfitSecondary isnot undefined>> <<if $carried[$_carriedTarget.outfitSecondary[0]].name is $_carriedTarget.outfitSecondary[1]>> <<generalSteal $_carriedTarget.outfitSecondary[0]>> <</if>> <</if>> <<set _outfitPrimarySteal to $_carriedTarget.outfitPrimary>> <<if _outfitPrimarySteal isnot undefined>> <<for _labelSteal, _valueSteal range _outfitPrimarySteal>> <<if $carried[_labelSteal].name is _valueSteal>> <<generalRuined _labelSteal>> <</if>> <</for>> <</if>> <<unset _outfitPrimarySteal>> <<generalRuined _args[0]>> <</if>> <</if>> <</widget>> <<widget "overuppersteal">> <<generalSteal "over_upper" _args[0]>> <</widget>> <<widget "overlowersteal">> <<generalSteal "over_lower" _args[0]>> <</widget>> <<widget "uppersteal">> <<generalSteal "upper" _args[0]>> <</widget>> <<widget "lowersteal">> <<generalSteal "lower" _args[0]>> <</widget>> <<widget "underuppersteal">> <<if $worn.under_lower.type.includes("naked")>> <<set $_exposedType to $worn.under_lower.exposedType>> <</if>> <<generalSteal "under_upper" _args[0]>> <<if $_exposedType and $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to $_exposedType>> <</if>> <</widget>> <<widget "underlowersteal">> <<if $worn.under_lower.type.includes("naked")>> <<set $_exposedType to $worn.under_lower.exposedType>> <</if>> <<generalSteal "under_lower" _args[0]>> <<if _args[1] and $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to _args[1]>> <<elseif $_exposedType and $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to $_exposedType>> <<else>> <<set $worn.under_lower.exposedType to "stolen">> <</if>> <</widget>> <<widget "overheadsteal">> <<generalSteal "over_head" _args[0]>> <</widget>> <<widget "headsteal">> <<generalSteal "head" _args[0]>> <</widget>> <<widget "facesteal">> <<generalSteal "face" _args[0]>> <</widget>> <<widget "necksteal">> <<generalSteal "neck" _args[0]>> <</widget>> <<widget "handssteal">> <<generalSteal "hands" _args[0]>> <</widget>> <<widget "handheldsteal">> <<generalSteal "handheld" _args[0]>> <</widget>> <<widget "legssteal">> <<generalSteal "legs" _args[0]>> <</widget>> <<widget "feetsteal">> <<generalSteal "feet" _args[0]>> <</widget>> /*The "...undress" widgets remove the player character's clothing. Where they end up depends on the argument supplied. "wardrobe" sends it to the bedroom wardrobe. Other arguments store the clothing elsewhere in the world. The "...storeon" widgets can retrieve those clothes.*/ <<widget "undress">> <<set $_location to _args[0]>> <<for $_slot range setup.clothingLayer.all>> <<generalUndress $_location $_slot>> <</for>> <</widget>> <<widget "undressKeepFace">> <<set $_location to _args[0]>> <<for $_slot range setup.clothingLayer.all.except("face")>> <<generalUndress $_location $_slot>> <</for>> <</widget>> <<widget "undressSleep">> <<set $_location to _args[0]>> <<saveTempHairStyle>> <<for $_slot range setup.clothes_all_slots>> <<if $worn[$_slot].type.includes("eerie")>> <<set _makeTempClothing to 1>> <<storeItem $_location $_slot>> <<continue>> <</if>> <<generalUndress $_location $_slot>> <</for>> <<if $worn.under_lower.type.includes("naked")>> <<set $worn.under_lower.exposedType to "notWorn">> <</if>> <</widget>> <<widget "undressOverClothes">> <<set $_location to _args[0]>> <<for $_slot range setup.clothingLayer.over>> <<generalUndress $_location $_slot>> <</for>> <</widget>> <<widget "undressclothes">> <<set $_location to _args[0]>> <<for $_slot range setup.clothingLayer.torso>> <<generalUndress $_location $_slot>> <</for>> <</widget>> <<widget "undressmid">> <<set $_location to _args[0]>> <<generalUndress $_location "upper">> <<generalUndress $_location "lower">> <</widget>> /*The "generalWear" widget works in the same way as the "...wear" widgets, however, the argument are as follows; Location, slot*/ <<widget "generalUndress">> <<if _args[0] and _args[1]>> <<if _args[1] == "under_lower" and $worn.under_lower.type.includes("strap-on")>> <<run window.wardrobeStripStraponException($worn.under_lower.name)>> <<else>> <<if _storeItemSkip is undefined>> <<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, "butt_plug":true}>> <</if>> <<unset _undressSlot>> /*Checks if the current slot is part of an outfit and switches to the main piece if that is the case*/ <<if $worn[_args[1]].outfitSecondary isnot undefined>> <<if $worn[$worn[_args[1]].outfitSecondary[0]].name is $worn[_args[1]].outfitSecondary[1]>> <<set _undressSlot to $worn[_args[1]].outfitSecondary[0]>> <</if>> <</if>> <<if _undressSlot is undefined>> <<set _undressSlot to _args[1]>> <</if>> <<unset $_cursedPrevent>> <<set _outfitPrimaryUndress to $worn[_undressSlot].outfitPrimary>> <<if _outfitPrimaryUndress isnot undefined>> <<for _labelUndress, _valueUndress range _outfitPrimaryUndress>> <<if $worn[_labelUndress].cursed is 1 and $worn[_labelUndress].name is _valueUndress>> <<set $_cursedPrevent to true>> <</if>> <</for>> <</if>> <<if $_cursedPrevent isnot true and _strip_restrict isnot 1 and $worn[_undressSlot].cursed isnot 1>> <<set _slots to []>> <<if _args[0] is "wardrobe" or Object.keys($wardrobes).includes(_args[0])>> <<set $_selectedWardrobe to selectWardrobe()>> <<if _outfitPrimaryUndress isnot undefined>> <<for _labelUndress, _valueUndress range _outfitPrimaryUndress>> <<if _valueUndress isnot "broken" and _valueUndress isnot "split">> <<if !setup.wardrobeSkip.includes($worn[_labelUndress].name) and $worn[_labelUndress].name is _valueUndress>> <<set $_selectedWardrobe[_labelUndress].push(clone($worn[_labelUndress]))>> <<run _slots.push(_labelUndress)>> <</if>> <<set $worn[_labelUndress] to clone(setup.clothes[_labelUndress][0])>> <</if>> <</for>> <</if>> <<if !setup.wardrobeSkip.includes($worn[_undressSlot].name)>> <<set $_selectedWardrobe[_undressSlot].push(clone($worn[_undressSlot]))>> <</if>> <<set $worn[_undressSlot] to clone(setup.clothes[_undressSlot][0])>> <<run _slots.push(_undressSlot)>> <<elseif _args[0] and !_storeItemSkip[_undressSlot]>> <<if $worn[_undressSlot].name isnot "naked">> <<if _outfitPrimaryUndress isnot undefined>> <<for _labelUndress, _valueUndress range _outfitPrimaryUndress>> <<if $worn[_labelUndress].outfitSecondary isnot undefined>> <<if $worn[_labelUndress].outfitSecondary[1] is $worn[_undressSlot].name>> <<storeItem _args[0] _labelUndress>> <<run _slots.push(_labelUndress)>> <<set _storeItemSkip[_labelUndress] to true>> <</if>> <</if>> <</for>> <</if>> <<storeItem _args[0] _undressSlot>> <<run _slots.push(_undressSlot)>> <<elseif $outfit[$wear_outfit] and $outfit[$wear_outfit][_undressSlot] isnot "naked">> <<set _makeTempClothing to 1>> <<storeItem _args[0] _undressSlot>> <</if>> <</if>> <<if _slots.includes("upper")>> <<set $upperwet to 0>><<set $upperwetstage to 0>> <</if>> <<if _slots.includes("lower")>> <<set $lowerwet to 0>><<set $lowerwetstage to 0>> <</if>> <<if _slots.includes("under_upper")>> <<set $underupperwet to 0>><<set $underupperwetstage to 0>> <</if>> <<if _slots.includes("under_lower")>> <<set $underlowerwet to 0>><<set $underlowerwetstage to 0>> <</if>> <</if>> <<unset _outfitPrimaryUndress>> <</if>> <</if>> <<unset _strip_restrict>> <</widget>> <<widget "storeItem">> <<set $_slot to _args[1]>> <<set $_item to $store[$_slot].find(item => item.location is _args[0])>> <<if $_item>> <<if $_item.outfitPrimary isnot undefined>> <<for _labelStore, _unused range $_item.outfitPrimary>> <<set $_itemPair to $store[_labelStore].find(item => item.location is _args[0])>> <<if $_itemPair and $_itemPair.outfitSecondary isnot undefined and $_itemPair.outfitSecondary[1] is $_item.name>> <<if !setup.wardrobeSkip.includes($_itemPair.name)>> <<set $wardrobe[_labelStore].push(clone($_itemPair))>> <</if>> <<set $store[_labelStore].delete($_itemPair)>> <</if>> <</for>> <</if>> <<if !setup.wardrobeSkip.includes($_item.name) and $_item.temp is undefined>> <<set $wardrobe[$_slot].push(clone($_item))>> <</if>> <<set $store[$_slot].delete($_item)>> <</if>> <<if _makeTempClothing is 1>> <<set _temp_clothing to clone($worn[$_slot].name is "naked" ? {name: "naked"} : clone($worn[$_slot]))>> <<set _temp_clothing.temp to 1>> <<set _temp_clothing.location to _args[0]>> <<set $store[$_slot].push(clone(_temp_clothing))>> <<unset _makeTempClothing>> <<else>> <<set $store[$_slot].push(clone($worn[$_slot]))>> <<set $store[$_slot].last().location to _args[0]>> <<set $worn[$_slot] to clone(setup.clothes[$_slot][0])>> <</if>> <</widget>> <<widget "overupperundress">> <<generalUndress _args[0] "over_upper">> <</widget>> <<widget "overlowerundress">> <<generalUndress _args[0] "over_lower">> <</widget>> <<widget "upperundress">> <<generalUndress _args[0] "upper">> <</widget>> <<widget "lowerundress">> <<generalUndress _args[0] "lower">> <</widget>> <<widget "underupperundress">> <<generalUndress _args[0] "under_upper">> <</widget>> <<widget "underlowerundress">> <<generalUndress _args[0] "under_lower">> <</widget>> <<widget "genitalsundress">> <<generalUndress _args[0] "genitals">> <</widget>> <<widget "overheadundress">> <<generalUndress _args[0] "over_head">> <</widget>> <<widget "headundress">> <<generalUndress _args[0] "head">> <</widget>> <<widget "faceundress">> <<generalUndress _args[0] "face">> <</widget>> <<widget "neckundress">> <<generalUndress _args[0] "neck">> <</widget>> <<widget "handsundress">> <<generalUndress _args[0] "hands">> <</widget>> <<widget "handheldundress">> <<generalUndress _args[0] "handheld">> <</widget>> <<widget "legsundress">> <<generalUndress _args[0] "legs">> <</widget>> <<widget "feetundress">> <<generalUndress _args[0] "feet">> <</widget>> /* Returns stored items that are a part of an outfit (wear_outfit) to the wardrobe so that they can be used by another outfit. */ /* args[0] specifies the location identifier */ <<widget "storereturn">> <<if !isNaN($wear_outfit) and _args[0] isnot undefined>> <<for $_slot range setup.clothingLayer.all>> <<set $_name to $outfit[$wear_outfit][$_slot]>> <<set $_item to $store[$_slot].find(item => item.location is _args[0])>> <<generalStoreon _args[0] $_slot "check">> <<if _store_check and $_item isnot undefined and $_name isnot "naked" and $_name isnot undefined>> <<if $store[$_slot].length gt 0 and $_name is $_item.name>> <<if !setup.wardrobeSkip.includes($_item.name)>> <<set $wardrobe[$_slot].push(clone($_item))>> <</if>> <<set $store[$_slot].deleteAt($store[$_slot].indexOf($_item))>> <</if>> <</if>> <</for>> <</if>> <</widget>> /* Unequips items, then saves a copy of stored items to a temporary variable */ /* args[0] specifies the location identifier */ <<widget "storesave">> <<if _args[0] isnot undefined>> <<undress _args[0]>> <<set $outfitTmp[_args[0]] to {}>> <<for $_slot range setup.clothingLayer.all>> <<if $store[$_slot].length gt 0>> <<set $_copy to $store[$_slot].find(item => item.location is _args[0])>> <<if $_copy isnot undefined and $_copy.name isnot "naked" and $_copy.name isnot undefined>> <<set $outfitTmp[_args[0]][$_slot] to clone($_copy)>> <</if>> <</if>> <</for>> <</if>> <</widget>> /* Loads a list of stored items previously saved by 'storesave', and tries to equip it on the player */ /* If the items have been removed from storage, it checks if the player is currently wearing them, and will not unequip them if so */ /* args[0] specifies the location identifier */ <<widget "storeload">> <<if $propEquipped is 1>><<handheldon>><</if>> <<if _args[0] isnot undefined and $outfitTmp[_args[0]] isnot undefined and Object.keys($outfitTmp[_args[0]]).length gt 0>> <<if _args[1] isnot undefined>> <<set $_item to $outfitTmp[_args[0]][_args[1]]>> <<storeloaditem $_item _args[1]>> <<run delete V.outfitTmp[_args[0][_args[1]]]>> <<if Object.keys(V.outfitTmp[_args[0]]).length is 0>> <<run delete V.outfitTmp[_args[0]]>> <</if>> <<else>> /* Check if any worn items are cursed */ <<set _cursedSlots to Object.keys($worn).filter(slot => $worn[slot].cursed)>> /* Check if any of the outfit items cant be worn, run multiple times to check for nested outfits, or when the curses status is found later */ <<set _runtime to 2>> <<for _i to 0; _i lte _runtime; _i++>> <<run Object.entries($outfitTmp[_args[0]]).forEach(([slot, item]) => { let cursedLength = T.cursedSlots.length; let cursed = T.cursedSlots.includes(slot); if (item.outfitSecondary && !["broken", "split"].includes(item.outfitSecondary[1])) { if (T.cursedSlots.includes(item.outfitSecondary[0])) { T.cursedSlots.pushUnique(slot); cursed = true; } if (cursed) T.cursedSlots.pushUnique(item.outfitSecondary[0]); } if (item.outfitPrimary) { Object.entries(item.outfitPrimary).forEach(([slot2, itemName]) => { if (!["broken", "split"].includes(itemName)) { if (T.cursedSlots.includes(slot2)) { T.cursedSlots.pushUnique(slot); cursed = true; } if (cursed) T.cursedSlots.pushUnique(slot2); } }); } /* Found a new item effected by a cursed slot, run again */ if (cursedLength < T.cursedSlots.length) T.runtime++; })>> <</for>> <<for $_slot range setup.clothingLayer.all>> <<set $_item to $outfitTmp[_args[0]][$_slot]>> <<if $_item is undefined or $worn[$_slot].name isnot $_item.name>> <<generalStrip $_slot>> <<returnCarried>> <</if>> <<if $_item isnot undefined>> <<set $_storedIndex to $store[$_slot].findIndex(item => item.name is $_item.name and item.location is _args[0])>> <<if $_storedIndex isnot -1>> <<if ($worn[$_slot].name is "naked" and !_cursedSlots.includes($_slot)) or (!_cursedSlots.includes($_slot) and _args[0] is "lockers")>> <<set $worn[$_slot] to clone($store[$_slot][$_storedIndex])>> <<set $worn[$_slot].location to 0>> <<set $store[$_slot].deleteAt($_storedIndex)>> <<else>> /* Send the item to the wardrobe, as the item was not unequipped by generalStrip */ <<if ["asylum", "prison"].includes($location)>> <<set $_selectedWardrobe to $wardrobes[$location]>> <<elseif $multipleWardrobes is "all" and $worn[$_slot].lastTaken isnot undefined>> <<set $_selectedWardrobe to $wardrobes[$worn[$_slot].lastTaken]>> <</if>> <<if $_selectedWardrobe isnot "wardrobe" and $wardrobes[$_selectedWardrobe]>> <<set $_selectedWardrobe to $wardrobes[$_selectedWardrobe]>> <<else>> <<set $_wardrobe to $wardrobe>> <</if>> <<run $_wardrobe[$_slot].push(clone($store[$_slot][$_storedIndex]))>> <<run $store[$_slot].deleteAt($_storedIndex)>> <</if>> <</if>> <</if>> <</for>> <<run delete V.outfitTmp[_args[0]]>> <</if>> <<elseif _args[0] isnot undefined and clothingInStorage(_args[0]).length gt 0>> <<storeon _args[0] "noreplace">> <</if>> <</widget>> <<widget "storeloaditem">> <<set $_item to _args[0]>> <<set $_slot to _args[1]>> <<if $_item isnot undefined>> <<set $_stored to $store[$_slot].find(item => item.name is $_item.name)>> <<if $_stored>> <<set $worn[$_slot] to clone($_item)>> <<set $worn[$_slot].location to 0>> <<set $store[$_slot].deleteAt($store[$_slot].indexOf($_stored))>> <</if>> <</if>> <</widget>> /* The "storeon..." widgets retrieve the clothing stored with the "...undress" widgets, that weren't put in a wardrobe. */ /* Requires the same argument that was used to store the clothing in order to correctly identify. Optionally accepts a second argument. */ /* Inputting "delete" will destroy the stored item, rather than wear it. */ /* Inputting "check" will set _store_check to 1, for when you want to check whether or not an item exists in a given location. */ /* Inputting "return" will return the item to the wardrobe */ <<widget "storeon">> <<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 _store_temp to _args[0]>> <<set _store_option to _args[1] or 0>> <<for $_slot range setup.clothingLayer.all>> <<generalStoreon _store_temp $_slot _store_option>> <</for>> <</widget>> <<widget "generalStoreon">> <<if _args[0] and _args[1]>> <<set $_location to _args[0]>> <<set $_slot to _args[1]>> <<if $store[$_slot] is undefined>>/* Slot not found */<<exit>><</if>> <<set $_item to $store[$_slot].find(item => item.location is $_location)>> <<if $_item isnot undefined>> <<set $_index to $store[$_slot].indexOf($_item)>> <<if $worn[$_slot].cursed is 1>> <<elseif _equipSkip isnot undefined and _equipSkip[$_slot] is true>> <<if $_item.temp is undefined>> <<set $_selectedWardrobe to $wardrobe>> <<if $multipleWardrobes>> <<if ["asylum", "prison"].includes($location)>> <<set $_selectedWardrobe to $wardrobes[$location]>> <<elseif $multipleWardrobes is "all" and $worn[$_slot].lastTaken isnot undefined>> <<set $_selectedWardrobe to $wardrobes[$worn[$_slot].lastTaken]>> <</if>> <</if>> <<set $_selectedWardrobe[$_slot].push(clone($_item))>> <</if>> <<set $store[$_slot].deleteAt($_index)>> <<else>> <<if _args[2] is "wardrobe" or $wardrobes[_args[2]] isnot undefined>> <<if !setup.wardrobeSkip.includes($_item.name) and $_item.temp is undefined>> <<set $_location to clothesReturnLocation($_item)>> <<set $_selectedWardrobe to ($_location is "wardrobe" ? $wardrobe : $wardrobes[$_location])>> <<set $_selectedWardrobe[$_slot].push(clone($_item))>> <</if>> <<set $store[$_slot].deleteAt($_index)>> <<elseif _args[2] is "delete">> <<set $store[$_slot].deleteAt($_index)>> <<elseif _args[2] is "return">> <<if !setup.wardrobeSkip.includes($_item.name) and $_item.temp is undefined>> <<set $wardrobe[$_slot].push(clone($_item))>> <</if>> <<set $store[$_slot].deleteAt($_index)>> <<run delete V.outfitTmp[_args[0]]>> <<elseif _args[2] is "check">> <<set _store_check to 1>> <<else>> <<set $_location to clothesReturnLocation($worn[$_slot])>> <<generalUndress $_location $_slot>> <<if $_item.name isnot "naked">> <<if $_item.temp is undefined>> <<set $worn[$_slot] to clone($_item)>> <<set $worn[$_slot].location to 0>> <<else>> <<searchWardrobeForItem $_slot $_index>> <<generalWearFromWardrobe $_slot _wardrobeId>> <</if>> <</if>> <<set $store[$_slot].deleteAt($_index)>> <</if>> <</if>> /* todo: find a way to save naked into outfits */ <</if>> <</if>> <</widget>> <<widget "storeonoverupper">> <<generalStoreon _args[0] "over_upper" _args[1]>> <</widget>> <<widget "storeonoverlower">> <<generalStoreon _args[0] "over_lower" _args[1]>> <</widget>> <<widget "storeonupper">> <<generalStoreon _args[0] "upper" _args[1]>> <</widget>> <<widget "storeonlower">> <<generalStoreon _args[0] "lower" _args[1]>> <</widget>> <<widget "storeonunderupper">> <<generalStoreon _args[0] "under_upper" _args[1]>> <</widget>> <<widget "storeonunderlower">> <<generalStoreon _args[0] "under_lower" _args[1]>> <</widget>> <<widget "storeonoverhead">> <<generalStoreon _args[0] "over_head" _args[1]>> <</widget>> <<widget "storeonhead">> <<generalStoreon _args[0] "head" _args[1]>> <</widget>> <<widget "storeonface">> <<generalStoreon _args[0] "face" _args[1]>> <</widget>> <<widget "storeonneck">> <<generalStoreon _args[0] "neck" _args[1]>> <</widget>> <<widget "storeonhands">> <<generalStoreon _args[0] "hands" _args[1]>> <</widget>> <<widget "storeonhandheld">> <<generalStoreon _args[0] "handheld" _args[1]>> <</widget>> <<widget "storeonlegs">> <<generalStoreon _args[0] "legs" _args[1]>> <</widget>> <<widget "storeonfeet">> <<generalStoreon _args[0] "feet" _args[1]>> <</widget>> <<widget "dry">> <<set $upperwet to 0>><<set $lowerwet to 0>><<set $underlowerwet to 0>><<set $underupperwet to 0>> <</widget>> <<widget "dry_full">> <<dry>> <<set $upperwetstage to 0>><<set $lowerwetstage to 0>><<set $underupperwetstage to 0>><<set $underlowerwetstage to 0>> <</widget>> /*The "searchWardrobeForItem" widget searches the wardrobe for an item that matches a given item stored somewhere else, the argument are as follows; slot, item index.*/ <<widget "searchWardrobeForItem">> <<set _slot to _args[0]>> <<set _wearId to _args[1]>> <<unset _wardrobeId>><<unset _item>><<unset _brokenId>><<unset _secondChoice>> <<set $_selectedWardrobe to selectWardrobe()>> <<if _wearId gte 0>> <<set _item to $store[_slot][_wearId]>> <</if>> <<for _j to 0; _j lt $_selectedWardrobe[_slot].length; _j++>> <<set $_selectedItem to $_selectedWardrobe[_slot][_j]>> <<if _item.name is $_selectedItem.name and _item.colour is $_selectedItem.colour and _item.accessory_colour is $_selectedItem.accessory_colour>> <<set _matched to (_item.colour isnot "custom") + (_item.accessory is 0 or _item.accessory_colour isnot "custom")>> <<if _item.colourCustom isnot undefined and _item.colourCustom is $_selectedItem.colourCustom>> <<set _matched++>> <</if>> <<if _item.accessory_colourCustom isnot undefined and _item.accessory_colourCustom is $_selectedItem.accessory_colourCustom>> <<set _matched++>> <</if>> <<if _matched is 2>> <<if $_selectedItem.outfitPrimary isnot undefined>> <<set _matched to 0>> <<for _labelWW, _valueWW range $_selectedItem.outfitPrimary>> <<if _item.outfitPrimary[_labelWW] is _valueWW>> <<set _matched++>> <</if>> <</for>> <<if _matched is Object.keys($_selectedItem.outfitPrimary).length>> <<set _wardrobeId to _j>> <<break>> <<else>> <<set _secondChoice to _j>> <</if>> <<else>> <<set _wardrobeId to _j>> <<break>> <</if>> <</if>> <</if>> <</for>> <<if _wardrobeId is undefined and _secondChoice isnot undefined>> <<set _wardrobeId to clone(_secondChoice)>> <</if>> <</widget>> /*The "generalWearFromWardrobe" widget allows the player to equip a specific item from the wardrobe, the argument are as follows; slot, item index.*/ <<widget "generalWearFromWardrobe">> <<set _slot to _args[0]>> <<set _wearId to _args[1]>> <<set _slimePrevent to setup.clothingLayer.torso_inner>> <<set $_selectedWardrobe to selectWardrobe()>> <<unset _cursedPrevent>><<unset _outfitPieceIds>><<unset _item>> <<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 _labelWW, _valueWW range _wornOutfitPrimary>> <<if $worn[_labelWW].cursed is 1 and _cursedPrevent isnot true>> <<capture _labelWW>> <<cursedtext $worn[_labelWW].name>> <</capture>> <<set _cursedPrevent to true>> <</if>> <</for>> <</if>> <<if _cursedPrevent isnot true>> <<if _wearId gte 0>> <<set _item to $_selectedWardrobe[_slot][_wearId]>> <</if>> /*Prevent equip when preggy*/ <<if _wearId gte 0 and playerBellySize() gte 12 and _item.type.includes("constricting")>> <<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 _wearId gte 0 and _slimePrevent.includes(_slot) and $earSlime.corruption gte 10>> <<if _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>> <</if>> <</if>> /*Finds any outfit pieces and records the Ids*/ <<if _item isnot undefined>> <<set _outfitPrimary to _item.outfitPrimary>> <<if _outfitPrimary isnot undefined>> <<set _outfitPieceIds to {}>> <<for _labelWW, _valueWW range _outfitPrimary>> <<if _valueWW isnot "broken" and _valueWW isnot "split">> <<for _j to 0; _j lt $_selectedWardrobe[_labelWW].length; _j++>> <<if $_selectedWardrobe[_labelWW][_j].name is _valueWW and _item.colour is $_selectedWardrobe[_labelWW][_j].colour and _item.accessory_colour is $_selectedWardrobe[_labelWW][_j].accessory_colour>> <<if $_selectedWardrobe[_labelWW][_j].outfitSecondary[1] isnot _item.name>> <<continue>> <</if>> <<set _matched to 0>> <<if $_selectedWardrobe[_labelWW][_j].colour isnot "custom">> <<set _matched++>> <<elseif _item.colourCustom isnot undefined and $_selectedWardrobe[_labelWW][_j].colourCustom isnot undefined>> <<if _item.colourCustom is $_selectedWardrobe[_labelWW][_j].colourCustom>> <<set _matched++>> <</if>> <</if>> <<if $_selectedWardrobe[_labelWW][_j].accessory is 0 or $_selectedWardrobe[_labelWW][_j].accessory_colour isnot "custom">> <<set _matched++>> <<elseif _item.accessory_colourCustom isnot undefined and $_selectedWardrobe[_labelWW][_j].accessory_colourCustom isnot undefined>> <<if _item.accessory_colourCustom is $_selectedWardrobe[_labelWW][_j].accessory_colourCustom>> <<set _matched++>> <</if>> <</if>> <<if _matched is 2>> <<set _outfitPieceIds[clone(_labelWW)] to clone(_j)>> <<if _equipSkip isnot undefined>> <<set _equipSkip[_labelWW] to true>> <</if>> <<break>> <</if>> <</if>> <</for>> <</if>> <</for>> <<if Object.keys(_outfitPieceIds).length is 0>> <<unset _outfitPieceIds>> <</if>> <</if>> <</if>> <<unset _outfitPrimary>> <<if _wearId gte 0>> /*Equip the relating items*/ <<generalUndress $wardrobe_location _slot>> <<if _outfitPieceIds isnot undefined>> <<for _labelWW, _valueWW range _outfitPieceIds>> <<generalUndress $wardrobe_location `clone(_labelWW)`>> <<set $worn[clone(_labelWW)] to clone($_selectedWardrobe[clone(_labelWW)][clone(_valueWW)])>> <<set $worn[clone(_labelWW)].lastTaken to "wardrobe">> <<set $_selectedWardrobe[_labelWW].deleteAt(_valueWW)>> <</for>> <</if>> <<set $worn[_slot] to clone($_selectedWardrobe[_slot][_wearId])>> <<set $worn[_slot].lastTaken to "wardrobe">> <<set $_selectedWardrobe[_slot].deleteAt(_wearId)>> <</if>> <</if>> <</widget>> <<widget "outfitChecksExposed">> <<set _underNakedExposed to ($worn.under_lower.exposed isnot 0 and $worn.under_upper.exposed isnot 0)>> <<set _middleNakedExposed to ($worn.lower.exposed isnot 0 and $worn.upper.exposed isnot 0)>> <<set _overNakedExposed to ($worn.over_lower.exposed isnot 0 and $worn.over_upper.exposed isnot 0)>> <<set _toplessExposed to ($worn.over_upper.exposed isnot 0 and $worn.upper.exposed isnot 0 and $worn.under_upper.exposed isnot 0)>> <<set _bottomlessExposed to ($worn.over_lower.exposed isnot 0 and $worn.lower.exposed isnot 0 and $worn.under_lower.exposed isnot 0)>> <<set _fullyNakedExposed to (_toplessExposed and _bottomlessExposed)>> <</widget>> <<widget "otherOutfitChecks">> <<set _otherOutfits to { over_head:false, head:false, neck:false, face:false, hands:false, handheld:false, legs:false, feet:false, genitals:false, }>> <<for $_label, $_value range _otherOutfits>> <<if $worn[$_label].outfitSecondary is undefined>> <<elseif $worn[$_label].outfitSecondary[1] is "broken" or $worn[$_label].outfitSecondary[1] is "split">> <<else>> <<set _otherOutfits[$_label] to true>> <</if>> <</for>> <</widget>> <<widget "noClothingCheck">> <<set _nude to Object.keys($worn).every(slot => ["butt_plug", "genitals"].includes(slot) or $worn[slot].name is "naked")>> <</widget>> <<widget "updateWornClothingLocation">> <<if $wardrobes[_args[0]]>> <<for $_label, $_value range $worn>> <<if typeof $_value is "object">> <<set $_value.lastTaken to _args[0]>> <<else>> <!-- Expanded error handling here to help with understanding an intermittent issue. If a bug is squashed relating to an undefined $worn entry, this error handler may become redundant. --> <<error { message : `Expected an object in $worn[${$_label}].`, source : `Location: ${Utils.GetStack()}.\nLabel: ${$_label}. Value: ${$_value}. Wardrobe: ${_args[0]}.` }>> <</if>> <</for>> <</if>> <</widget>> <<widget "damageClothing">> <<if _args[0] is "face" and _args[1]>> <<set $worn.face.integrity -= _args[1]>> <<if $worn.face.integrity lt 0>> <<set $_mask to $worn.face.name>> <<faceruined>><<set $worn.face.type.push("broken")>> <span class="red">Your $_mask is torn to shreds!</span> <</if>> <</if>> <</widget>> <<widget "damageFaceCover">> <<if _args[1] and _args[1] is "struggle" and $worn.face.cursed isnot 1>> <<set $worn.face.integrity -= _args[0]>> <<elseif _args[0] and $worn.face.cursed isnot 1>> <<set $worn.face.integrity -= _args[0]>> <<if $worn.face.integrity lte 0>> <span class="red">Your $worn.face.name is torn to shreds!</span> <<faceruined>><<set $worn.face.type.push("broken")>> <</if>> <</if>> <</widget>> <<widget "getDressedList">> <<set _slots to []>> <<for _slot range setup.clothes_all_slots>> <<if $carried[_slot].name isnot "naked">> <<if $carried[_slot].outfitSecondary>> <<if $carried[_slot].outfitSecondary[0].name is $carried[_slot].outfitSecondary[1]>> <<set _slots.pushUnique(_slot)>> <</if>> <<else>> <<set _slots.pushUnique(_slot)>> <</if>> <</if>> <</for>> <<for _item range _slots>> <<capture _item, _slots>> <<link [[`Put on your ${$carried[_item].name}`|$passage]]>> <<if $worn.upper.outfitSecondary and $worn.upper.outfitSecondary[0] is $worn.upper.outfitSecondary[1] and _item is "upper" or _item is "lower">> <<upperruined>> <</if>> <<run _slots.delete(_item)>> <<generalOn _item $carried[_item].index>> <</link>> <</capture>> <br> <</for>> <br> <<if _slots.length gt 1>> <<link [[Get fully dressed|$passage]]>><<clotheson>><</link>> <br> <</if>> <</widget>> <<widget "peppersprays">> <<if $options.pepperSprayDisplay isnot "none">> <div tooltip="<span class='def'>Pepper sprays: $spray / $spraymax</span>" id="pepper-sprays" class="pepper-sprays"> <!-- Compact style (dots) --> <<if $spraymax gt 1 and ($options.pepperSprayDisplay is "compact" or $spraymax gt 7)>> <div class="pepper-sprays-dots"> <<for _i to 1; _i lte $spraymax; _i++>> <<if $spray gte _i>> <div class="pepper-spray-dot-full"></div> <<else>> <div class="pepper-spray-dot-empty"></div> <</if>> <</for>> </div> <!-- "Sprays" style (up to 7 sprays, or 5 if renderer is "both") --> <<else>> <<for _i to 1; _i lte $spraymax; _i++>> <<if $spray gte _i>> <img draggable="false" src="img/ui/pepperspray.png"> <<else>> <img draggable="false" src="img/ui/emptyspray.png"> <</if>> <</for>> <</if>> </div> <</if>> <</widget>> <<widget "condomsSidebar">> <<if $condomLvl gte 1 and $options.condomsDisplay isnot "none" and $condoms isnot null and $condoms isnot undefined>> <div tooltip="<span class='meek'>Total condoms: $condoms</span>" id="condoms-sidebar" class="condoms-sidebar"> <img draggable="false" src="img/ui/condom.png"> </div> <div id="condoms-sidebar-text" class="condoms-sidebar-text"> $condoms x </div> <</if>> <</widget>>
<<widget "actionsanustopenis">> <<if $combattype is "train">> <<set _end to $enemyno-1>> <<else>> <<set _end to 0>> <</if>> <<for _j = $enemyno-1; _j gte _end; _j-->> <<if $NPCList[_j].penis is 0>> <<if $consensual is 1 and $promiscuity lte 74 and $enemytype is "man" or $consensual is 1 and $deviancy lte 74 and $enemytype isnot "man">> <!-- Do Nothing --> <<elseif $NPCList[_j].stance isnot "topface">> <<if $anusactiondefault is "anustopenis">> | <label><span class="sub">Straddle <<his>> penis</span> <<radiobutton "$anusaction" "anustopenis" checked>><<analdifficulty>> <<combatpromiscuous5>></label> <<else>> | <label><span class="sub">Straddle <<his>> penis</span> <<radiobutton "$anusaction" "anustopenis">><<analdifficulty>> <<combatpromiscuous5>></label> <</if>> <<break>> <</if>> <</if>> <</for>> <</widget>> <<widget "actionsanustopenisnew">> <<if $NPCList[$anustarget].penis is 0>> <<if $consensual is 1 and ($promiscuity lte 74 and $enemytype is "man" or $deviancy lte 74 and $enemytype isnot "man") and !$promiscuityIgnore>> <!-- Do Nothing --> <<elseif $NPCList[$anustarget].stance isnot "topface" and ($enemytype isnot "man" or ($NPCList[$anustarget].location.genitals is 0 and $NPCList[$anustarget].location.head isnot "genitals"))>> <<set _penis to (npcHasStrapon($anustarget) ? "strap-on" : "penis")>> <<if $NPCList[$anustarget].chastity.penis.includes("chastity")>> <<set _anusaction["Straddle " + $NPCList[$anustarget].pronouns.his + " " + $NPCList[$anustarget].chastity.penis] to "anustopenis">> <<else>> <<set _anusaction["Straddle " + $NPCList[$anustarget].pronouns.his + " " + _penis] to "anustopenis">> <</if>> <</if>> <</if>> <</widget>> <<widget "actionsanuspenisfuck">> <<if $combattype is "train">> <<set _end to $enemyno-1>> <<else>> <<set _end to 0>> <</if>> <<if playerChastity("anus")>> <!-- Do Nothing --> <<elseif $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>> <<for _j = $enemyno-1; _j gte _end; _j-->> <<if $NPCList[_j].penis is "anusentrance" or $NPCList[_j].penis is "anusimminent">> <<if $consensual is 1 and $promiscuity lte 74 and $enemytype is "man" or $consensual is 1 and $deviancy lte 74 and $enemytype isnot "man">> <!-- Do Nothing --> <<else>> <<if $anusactiondefault is "anuspenisfuck">> | <label><span class="sub">Envelop <<his>> penis</span> <<radiobutton "$anusaction" "anuspenisfuck" checked>> <<combatpromiscuous5>><<analvirginitywarning>><<NPCvirginitywarning $NPCList[_j].fullDescription "penile">></label> <<else>> | <label><span class="sub">Envelop <<his>> penis</span> <<radiobutton "$anusaction" "anuspenisfuck">> <<combatpromiscuous5>><<analvirginitywarning>><<NPCvirginitywarning $NPCList[_j].fullDescription "penile">></label> <</if>> <<break>> <</if>> <</if>> <</for>> <</if>> <</widget>> <<widget "actionsanuspenisfucknew">> <<if playerChastity("anus")>> <!-- Do Nothing --> <<elseif $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>> <<if $NPCList[$anustarget].penis is "anusentrance" or $NPCList[$anustarget].penis is "anusimminent">> <<if $consensual is 1 and (($promiscuity lte 74 and $enemytype is "man" or $deviancy lte 74 and $enemytype isnot "man") and !$promiscuityIgnore) or $NPCList[$anustarget].chastity.penis.includes("chastity")>> <!-- Do Nothing --> <<else>> <<set _penis to (npcHasStrapon($anustarget) ? "strap-on" : "penis")>> <<set _anusaction["Envelop " + $NPCList[$anustarget].pronouns.his + " " + _penis] to "anuspenisfuck">> <</if>> <</if>> <</if>> <</widget>> <<widget "actionsanuspenisdoublefuck">> <<if playerChastity("anus")>> <!-- Do Nothing --> <<elseif $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>> <<if $consensual is 1 and (($promiscuity lte 74 and $enemytype is "man" or $deviancy lte 74 and $enemytype isnot "man") and !$promiscuityIgnore) or $awareness lt 300>> <!-- Do Nothing --> <<else>> <<if $NPCList[$anustarget].penis is "anusdouble" or $NPCList[$anustarget].penis is "anusimminentdouble" or $NPCList[$anustarget].chastity.penis.includes("chastity")>> <<set _anusaction["Envelop " + $NPCList[$anusdoubletarget].pronouns.his + " " + $NPCList[$anusdoubletarget].penisdesc] to "anuspenisdoublefuck">> <<elseif $NPCList[$anusdoubletarget].penis is "anusdouble" or $NPCList[$anusdoubletarget].penis is "anusimminentdouble" or $NPCList[$anusdoubletarget].chastity.penis.includes("chastity")>> <<set _anusaction["Envelop " + $NPCList[$anustarget].pronouns.his + " " + $NPCList[$anustarget].penisdesc] to "anuspenisdoublefuck">> <<elseif !($NPCList[$anustarget].chastity.penis.includes("chastity") and $NPCList[$anusdoubletarget].chastity.penis.includes("chastity"))>> <<set _anusaction["Envelop both their penises"] to "anuspenisdoublefuck">> <</if>> <</if>> <</if>> <</widget>> <<widget "actionsanusMouthEntrance">> <<if $NPCList[$anustarget].mouth is "anusentrance">> <<if $consensual is 1 and $promiscuity lt 0 and !$promiscuityIgnore>> <<else>> <<set _anusaction["Press your butt against " + $NPCList[$anustarget].pronouns.his + " mouth"] to "bottombay">> <</if>> <<set _anusaction["Rub against " + $NPCList[$anustarget].pronouns.his + " face"] to "othermouthtease">> <</if>> <</widget>> <<widget "actionsanusMouthImminent">> <<if $NPCList[$anustarget].mouth is "anusimminent">> <<set _anusaction["Rub against " + $NPCList[$anustarget].pronouns.his + " lips"] to "othermouthrub">> <<set _anusaction["Pull away"] to "othermouthescape">> <</if>> <</widget>> <<widget "actionsanusMouthPenetration">> <<if $consensual is 0 or ($promiscuity lte 54 and $enemytype is "man" and !$promiscuityIgnore) or ($deviancy lte 54 and $enemytype isnot "man" and !$promiscuityIgnore)>> <<set _anusaction["Cooperate"] to "othermouthcooperate">> <<else>> <<set _anusaction["Hump"] to "othermouthcooperate">> <</if>> <</widget>> <<widget "actionsanusHandEntrance">> <<if $NPCList[$anustarget].lefthand is "anusentrance" or $NPCList[$anustarget].righthand is "anusentrance">> <<if $consensual is 1 and $promiscuity lt 0 and !$promiscuityIgnore>> <<else>> <<set _anusaction["Clench your buttcheeks against " + $NPCList[$anustarget].pronouns.his + " hand"] to "bottomhandbay">> <</if>> <<set _anusaction["Rub your butthole against " + $NPCList[$anustarget].pronouns.his + " fingers"] to "handtease">> <</if>> <</widget>> <<widget "actionsanusHandPenetration">> <<if $consensual is 0 or ($promiscuity lte 54 and $enemytype is "man" and !$promiscuityIgnore) or ($deviancy lte 54 and $enemytype isnot "man" and !$promiscuityIgnore)>> <<set _anusaction["Cooperate"] to "handcooperate">> <<else>> <<set _anusaction["Take it"] to "handtake">> <<set _anusaction["Hump"] to "handcooperate">> <</if>> <</widget>> <<widget "actionsanusPenisEntrance">> <<actionsanuspenisfucknew>> <<if $consensual is 1 and ($promiscuity lte 54 and $enemytype is "man" or $deviancy lte 54 and $enemytype isnot "man") and !$promiscuityIgnore>> <<else>> <<set _anusaction["Keep it away with your cheeks"] to "penischeeks">> <</if>> <<if $vaginause is 0 and !playerChastity("vagina")>> <<set _anusaction["Offer your pussy instead"] to "penispussy">> <</if>> <<if $vaginaldoubledisable is "f" and $awareness gt 300 and $vaginause is "penis" and $NPCList[$vaginatarget].penissize gte 2 and $NPCList[$anustarget].penissize gte 2 and !playerChastity("vagina") and !["legLock","legLocked"].includes($feetuse)>> <<set _anusaction["Offer double vaginal instead"] to "penispussydouble">> <</if>> <<set _anusaction["Tease the tip"] to "penistease">> <<if $analdoubledisable is "f" and _secondtarget is true and ($vaginause is 0 or ($vaginause isnot 0 and $vaginause isnot "penisdouble")) and $awareness gte 300 and !["legLock","legLocked"].includes($feetuse)>> <<if $npc.includes($NPCList[$anusdoubletarget].fullDescription)>> <<set _anusaction["Straddle " + $NPCList[$anusdoubletarget].fullDescription + "'s " + $NPCList[$anusdoubletarget].penisdesc] to "anustopenisdouble">> <<else>> <<set _anusaction["Straddle the " + $NPCList[$anusdoubletarget].fullDescription + "'s " + $NPCList[$anusdoubletarget].penisdesc] to "anustopenisdouble">> <</if>> <</if>> <</widget>> <<widget "actionsanusPenisImminent">> <<actionsanuspenisfucknew>> <<set _anusaction["Rub"] to "rub">> <<if ($consensual is 0 or (hasSexStat("promiscuity", 4) and $enemytype is "man") or (hasSexStat("deviancy", 4) and $enemytype isnot "man")) and currentSkillValue("analskill") gte 800>> <<set _anusaction["Edge " + $NPCList[$anustarget].pronouns.him] to "penisEdging">> <</if>> <<set _anusaction["Pull away"] to "escape">> <</widget>> <<widget "actionsanusPenisPenetration">> <<set _anusaction["Take it"] to "take">> <<if $consensual is 0 or ($promiscuity lte 54 and $enemytype is "man" and !$promiscuityIgnore) or ($deviancy lte 54 and $enemytype isnot "man" and !$promiscuityIgnore)>> <<set _anusaction["Cooperate"] to "cooperate">> <<else>> <<set _anusaction["Fuck"] to "cooperate">> <</if>> <<if ($consensual is 0 or (hasSexStat("promiscuity", 4) and $enemytype is "man") or (hasSexStat("deviancy", 4) and $enemytype isnot "man")) and currentSkillValue("analskill") gte 800>> <<set _anusaction["Edge " + $NPCList[$anustarget].pronouns.him] to "penisEdging">> <</if>> <<if !playerIsPregnant() and canBeMPregnant() and $sexStats.vagina.menstruation.currentState isnot "recovering" and !$player.vaginaExist and playerPregnancyPossibleWith($NPCList[$anustarget]) and $enemyarousal gte $enemyarousalmax and $demon gte 6 and $demonbuild gte 90>> <<if playerAwareTheyCanBePregnant()>> <<set _anusaction["Force Impregnation"] to "forceImpregnation">> <<else>> <<set _anusaction["?????"] to "forceImpregnation">> <</if>> <</if>> <<if _secondtarget is true and ($vaginause is 0 or ($vaginause isnot 0 and $vaginause isnot "penisdouble")) and $awareness gte 300 and !["legLock","legLocked"].includes($feetuse)>> <<if $npc.includes($NPCList[$anusdoubletarget].fullDescription)>> <<set _anusaction["Straddle " + $NPCList[$anusdoubletarget].fullDescription + "'s " + $NPCList[$anusdoubletarget].penisdesc] to "anustopenisdouble">> <<else>> <<set _anusaction["Straddle the " + $NPCList[$anusdoubletarget].fullDescription + "'s " + $NPCList[$anusdoubletarget].penisdesc] to "anustopenisdouble">> <</if>> <</if>> <</widget>> <<widget "actionsanusPenisDoubleEntrance">> <<actionsanuspenisdoublefuck>> <<set _anusaction["Tease"] to "penisdoubletease">> <<if $vaginause is 0 and !playerChastity("vagina")>> <<set _anusaction["Offer your pussy instead"] to "penispussydap">> <</if>> <</widget>> <<widget "actionsanusPenisDoubleImminent">> <<actionsanuspenisdoublefuck>> <<set _anusaction["Rub"] to "rub">> <<if ($consensual is 0 or (hasSexStat("promiscuity", 5) and $enemytype is "man") or (hasSexStat("deviancy", 5) and $enemytype isnot "man")) and currentSkillValue("analskill") gte 800>> <<set _anusaction["Edge " + $NPCList[$anustarget].pronouns.him] to "penisDoubleEdging">> <</if>> <<set _anusaction["Pull away"] to "doubleescape">> <</widget>> <<widget "actionsanusPenisDoublePenetration">> <<set _anusaction["Take it"] to "doubletake">> <<if $consensual is 0 or ($promiscuity lte 74 and $enemytype is "man" and !$promiscuityIgnore) or ($deviancy lte 74 and $enemytype isnot "man" and !$promiscuityIgnore)>> <<set _anusaction["Cooperate"] to "doublecooperate">> <<else>> <<set _anusaction["Fuck"] to "doublecooperate">> <<if $NPCList[$anustarget].penis isnot "anusdouble" or $NPCList[$anusdoubletarget].penis isnot "anusdouble">> <<set _anusaction["Envelop the second penis"] to "anuspenisdoublefuck">> <</if>> <</if>> <<if ($consensual is 0 or (hasSexStat("promiscuity", 5) and $enemytype is "man") or (hasSexStat("deviancy", 4) and $enemytype isnot "man")) and currentSkillValue("analskill") gte 800>> <<set _anusaction["Edge " + $NPCList[$anustarget].pronouns.him] to "penisDoubleEdging">> <</if>> <</widget>> <<widget "actionsanusFaceAgainstAnus">> <<set _anusaction["Rub"] to "otherMouthAnusRub">> <<set _anusaction["Stop"] to "otherMouthAnusStop">> <</widget>> <<widget "actionsanusHandAgainstAnus">> <<set _anusaction["Rub"] to "handAnusRub">> <<set _anusaction["Stop"] to "handAnusStop">> <</widget>> <<widget "actionsanusPenisAgainstAnus">> <<set _anusaction["Rub"] to "otherAnusRub">> <<set _anusaction["Stop"] to "otherAnusStop">> <</widget>>
<<widget "effectsanustopenis">> <<if $anusaction is "anustopenis">> <<personselect $anustarget>> <<set $anusaction to 0>><<submission 10>><<analskilluse>><<combatpromiscuity5>> <<if $anususe is 0>> <<if combatSkillCheck("anal", $anustarget)>> <<if $NPCList[$anustarget].penis is 0>> <<submission 2>><<set $anususe to "penis">><<set $NPCList[$anustarget].penis to "anusentrance">><<set $anusstate to "entrance">><<set $anusactiondefault to "penistease">> <<if $leftarm is "anus">> <<set $leftarm to 0>> <</if>> <<if $rightarm is "anus">> <<set $rightarm to 0>> <</if>> <span class="lblue">You straddle <<combatperson>> and press <<his>> <<npcPenis $anustarget>> with your <<bottom>>.</span> <<if $NPCList[$anustarget].type is "plant" and $NPCList[$anustarget].penissize gte 4 and canImpregnateParasite("anus")>> <span class="red">Something about it scares you.</span> <</if>> <<if $NPCList[$anustarget].condom and $NPCList[$anustarget].condom.willUse is true and $NPCList[$anustarget].condom.worn is false and !$NPCList[$anustarget].penisdesc.includes("strap-on")>> <<if $NPCList[$anustarget].chastity.penis.includes("chastity")>> <<He>> tries to put a condom on, but can't seem to get it over <<his>> $NPCList[$anustarget].chastity.penis. <span class="red"><<He>> quickly gives up.</span> <<set $NPCList[$anustarget].condom.willUse to false>> <<else>> <span class="green"><<He>> slips <<condomDesc $anustarget>> on <<his>> penis.</span> <<equipNPCCondom $anustarget>> <</if>> <</if>> <<if $enemytype is "beast">><<set $NPCList[$anustarget].stance to "top">><</if>> <<set $NPCList[$anustarget].location.genitals to "genitals">> <<else>> <span class="blue">You try to straddle <<combatperson>> with your <<bottom>>, but the phallus is already occupied.</span><<set $anusactiondefault to "anustopenis">> <</if>> <<else>> <span class="blue">You try to straddle <<combatperson>> with your <<bottom>> but <<ohe>> pushes you off.</span><<set $anusactiondefault to "anustopenis">> <</if>> <</if>> <</if>> <</widget>> <<widget "effectsanuspenisfuck">> <<if $anusaction is "anuspenisfuck" and ["anusentrance","anusimminent"].includes($NPCList[$anustarget].penis)>> <<set $anusaction to 0>><<submission 20>><<analskilluse>><<combatpromiscuity5>> <<if $anusWetness + (currentSkillValue("analskill") / 10) gte ($NPCList[$anustarget].penissize * 15) + random(1, 40) or random(1, 2) is 2>> <<set $anusactiondefault to "cooperate">> <<if $player.virginity.anal isnot true>> <<set $NPCList[$anustarget].penis to "anus">> <<anus_lube_text>> <span class="pink">you <<analtext>> push against <<personselect $anustarget>><<combatpersons>> $NPCList[$anustarget].penisdesc, taking it deep into your <<bottom>>.</span> <<switch $NPCList[$anustarget].penissize>> <<case 5>> <span class="lewd">You'd moan, but the sheer size drives all breath from your body.</span> <<case 4>> <span class="lewd">You shiver as your ass stretches to accommodate <<his>> cock.</span> <<case 1>> <span class="lewd">It's so small you can barely feel it.</span> <<default>> <span class="lewd">You shiver as the phallus invades your body.</span> <</switch>> <<sex 30 "anus" $anustarget>><<takeNPCVirginity $anustarget "penile">><<analstat>><<raped>><<anusraped>><<set $anusstate to "penetrated">> <<elseif $player.virginity.anal is true>> <<set $NPCList[$anustarget].penis to "anus">> <<anus_lube_text>> <span class="pink">you <<analtext>> push against <<personselect $anustarget>><<combatpersons>> $NPCList[$anustarget].penisdesc, taking it deep into</span> <span class="red">your virgin <<bottom>>.</span> <<switch $NPCList[$anustarget].penissize>> <<case 5>><span class="red">You'd scream, but the sheer size of the invading phallus drives out all thought and breath.</span> <<case 4>><span class="red">You scream as your ass struggles to accommodate <<his>> cock.</span> <<case 1>><span class="red">It may be the first time your <<bottom>> has been violated so, but <<his>> cock is so small you can barely feel it.</span> <<default>><span class="red">You gasp as your <<bottom>> is violated for the first time.</span> <</switch>> <<sex 100 "anus" $anustarget>><<takeVirginity $NPCList[$anustarget].fullDescription "anal">><<takeNPCVirginity $anustarget "penile">><<bruise anus>><<analstat>><<violence 30>><<raped>><<anusraped>><<set $anusstate to "penetrated">><<set $speechanusvirgin to 1>> <</if>> <<else>> You <<analtext>> press your <<bottom>> against <<personselect $anustarget>><<combatpersons>> $NPCList[$anustarget].penisdesc, <span class="blue">but fail to envelop.</span> <<His>> penis angles away and rubs between your cheeks. <<sex 20 "anus" $anustarget>><<analstat>><<set $anusactiondefault to "anuspenisfuck">> <</if>> <</if>> <</widget>> <<widget "effectsanustopenisdouble">> <<if $anusaction is "anustopenisdouble">><<set $anusaction to 0>><<submission 10>><<analskilluse>><<combatpromiscuity5>> <<if combatSkillCheck("anal", $anusdoubletarget)>> <<submission 2>><<set $anususe to "penisdouble">><<set $NPCList[$anusdoubletarget].penis to "anusentrancedouble">><<set $anusstate to "doubleentrance">> <<if $NPCList[$anustarget].penis is "anusimminent">> <<set $NPCList[$anustarget].penis to "anusimminentdouble">> <<set $anusstate to "doubleimminent">> <<elseif $NPCList[$anustarget].penis is "anusentrance">> <<set $NPCList[$anustarget].penis to "anusentrancedouble">> <<set $anusstate to "doubleentrance">> <<else>> <<set $NPCList[$anustarget].penis to "anusdouble">> <<set $anusstate to "doublepenetrated">> <</if>> <<if $leftarm is "anus">> <<set $leftarm to 0>> <</if>> <<if $rightarm is "anus">> <<set $rightarm to 0>> <</if>> <span class="lblue">You straddle <<personselect $anusdoubletarget>><<combatperson>> and press <<his>> <<npcPenis $anusdoubletarget>> with your <<bottom>>, joining <<personselect $anustarget>><<combatpersons>> <<npcPenisSimple $anustarget>>.</span> <<if $NPCList[$anusdoubletarget].condom and $NPCList[$anusdoubletarget].condom.willUse is true and $NPCList[$anusdoubletarget].condom.worn is false and !$NPCList[$anusdoubletarget].penisdesc.includes("strap-on")>> <<if $NPCList[$anusdoubletarget].chastity.penis.includes("chastity")>> <<He>> tries to put a condom on, but can't seem to get it over <<his>> $NPCList[$anusdoubletarget].chastity.penis. <span class="red"><<He>> quickly gives up.</span> <<set $NPCList[$anusdoubletarget].condom.willUse to false>> <<else>> <span class="green"><<He>> puts <<condomDesc $anusdoubletarget>> on <<his>> penis.</span> <<equipNPCCondom $anusdoubletarget>> <</if>> <</if>> <<if $enemytype is "beast">><<set $NPCList[$anusdoubletarget].stance to "top">><</if>> <<set $NPCList[$anusdoubletarget].location.genitals to "genitals">><<set $anusactiondefault to "penisdoubletease">> <<else>> <span class="blue">You try to straddle <<personselect $anusdoubletarget>><<combatperson>> but <<ohe>> pushes you off.</span><<set $anusactiondefault to "anustopenisdouble">> <</if>> <</if>> <</widget>> <<widget "effectsanuspenisdoublefuck">> <<if $anusaction is "anuspenisdoublefuck">> <<set $anusaction to 0>><<submission 20>><<analskilluse>><<combatpromiscuity5>> <<set _doublepenissize to $NPCList[$anustarget].penissize>> <<set _npcA to $anustarget>> <<set _npcB to $anusdoubletarget>> <<set _npcdicksizeA to $NPCList[_npcA].penissize>> <<set _npcdicksizeB to $NPCList[_npcB].penissize>> <<if _npcdicksizeA gte _npcdicksizeB>> <<set _doublepenissize to (_npcdicksizeA+1)>> <<else>> <<set _doublepenissize to (_npcdicksizeB+1)>> <</if>> <<if _doublepenissize gt 5>> /* Ensure combined they're not larger than the largest possible phallus */ <<set _doublepenissize to 5>> <</if>> <<if $anusWetness + (currentSkillValue("analskill") / 10) gte (_doublepenissize * 15) + random(1, 40) or random(1, 3) is 2>> <<set $anusactiondefault to "doublecooperate">> <<if $player.virginity.anal isnot true>> <<set $NPCList[$anustarget].penis to "anusdouble">> <<set $NPCList[$anusdoubletarget].penis to "anusdouble">> <<anus_lube_text>> <span class="pink">you <<analtext>> push against the $NPCList[$anustarget].fullDescription's $NPCList[$anustarget].penisdesc and the $NPCList[$anusdoubletarget].fullDescription's $NPCList[$anusdoubletarget].penisdesc, taking them deep into your <<bottom>>.</span> <<switch _doublepenissize>> <<case 5>> <span class="lewd">You'd moan, but the sheer size of both cocks drives all breath from your body.</span> <<case 4>> <span class="lewd">You shiver as your ass stretches to accommodate both cocks.</span> <<default>> <span class="lewd">You shiver as the phalluses invade your body.</span> <</switch>> <<sex 15 "anus" $anustarget>><<sex 15 "anus" $anusdoubletarget>><<takeNPCVirginity $anustarget "penile">><<takeNPCVirginity $anusdoubletarget "penile">><<analstat>><<analdoublestat>><<raped>><<anusraped>><<set $anusstate to "doublepenetrated">> <<elseif $player.virginity.anal is true>> <<set $NPCList[$anustarget].penis to "anusdouble">> <<set $NPCList[$anusdoubletarget].penis to "anusdouble">> <<anus_lube_text>> <span class="pink">you <<analtext>> push against the $NPCList[_npcA].fullDescription's $NPCList[_npcA].penisdesc and the $NPCList[_npcB].fullDescription's $NPCList[_npcB].penisdesc, taking them deep into</span> <span class="red">your virgin <<bottom>>.</span> <<switch _doublepenissize>> <<case 5>><span class="red">You'd scream, but the sheer size of the invading phalluses drive out all thought and breath.</span> <<case 4>><span class="red">You scream as your ass struggles to accommodate both cocks.</span> <<default>><span class="red">You gasp as your <<bottom>> is violated for the first time.</span> <</switch>> <<set _mydesc to ($NPCList[$anustarget].fullDescription + " and " + $NPCList[$anusdoubletarget].fullDescription)>> <<sex 50 "anus" $anustarget>><<sex 50 "anus" $anusdoubletarget>><<takeVirginity `[$anustarget, $anusdoubletarget]` "anal">><<takeNPCVirginity $anustarget "penile">><<takeNPCVirginity $anusdoubletarget "penile">><<bruise anus>><<analstat>><<analdoublestat>><<violence 30>><<raped>><<anusraped>><<set $anusstate to "doublepenetrated">><<set $speechanusvirgin to 1>> <</if>> <span class="pink">Your nipples harden while your body shivers from taking two cocks.</span> <<else>> You <<analtext>> press your <<bottom>> against their cocks, <span class="blue">but fail to envelop.</span> Their penises angle away and rubs between your cheeks. <<sex 10 "anus" $anustarget>><<sex 10 "anus" $anusdoubletarget>><<analstat>><<analdoublestat>><<set $anusactiondefault to "anuspenisdoublefuck">> <</if>> <</if>> <</widget>>
<<widget "feetgrab">> <<if $combattype is "train">> <<set _end to $enemyno-1>> <<else>> <<set _end to 0>> <</if>> <<set _xx to $enemyno-1>> <<if _xx is -1>> <<set _stanceCheck to 0>> <<else>> <<set _stanceCheck to $NPCList[_xx].stance>> <</if>> <<if $consensual is 1 and $promiscuity lte 34 and $enemytype is "man" or $consensual is 1 and $deviancy lte 34 and $enemytype isnot "man">> <!-- Do Nothing --> <<elseif _stanceCheck isnot "topface">> <<for _j = $enemyno-1; _j gte _end; _j-->> <<if $NPCList[_j].penis is 0>> <<if $feetactiondefault is "grab">> | <label><span class="sub">Grab <<his>> penis</span> <<radiobutton "$feetaction" "grab" checked>><<feetdifficulty>> <<combatpromiscuous3>></label> <<else>> | <label><span class="sub">Grab <<his>> penis</span> <<radiobutton "$feetaction" "grab">><<feetdifficulty>> <<combatpromiscuous3>></label> <</if>> <<break>> <</if>> <</for>> <<for _j = $enemyno-1; _j gte _end; _j-->> <<if $NPCList[_j].vagina is 0>> <<if $feetactiondefault is "vaginagrab">> | <label><span class="sub">Press your feet against <<his>> pussy</span> <<radiobutton "$feetaction" "vaginagrab" checked>><<feetdifficulty>> <<combatpromiscuous3>></label> <<else>> | <label><span class="sub">Press your feet against <<his>> pussy</span> <<radiobutton "$feetaction" "vaginagrab">><<feetdifficulty>> <<combatpromiscuous3>></label> <</if>> <<break>> <</if>> <</for>> <</if>> <</widget>> <<widget "feetgrabnew">> <<if $feettarget isnot "self">> <<set _stanceCheck to $NPCList[$feettarget].stance>> <<set $_penis to (npcHasStrapon($feettarget) ? "strap-on" : "penis")>> <<if $consensual is 1 and ($promiscuity lte 34 and $enemytype is "man" or $deviancy lte 34 and $enemytype isnot "man") and !$promiscuityIgnore>> <!-- Do Nothing --> <<elseif _stanceCheck isnot "topface">> <<if $NPCList[$feettarget].penis is 0>> <<if $NPCList[$feettarget].chastity.penis.includes("chastity")>> <<set _feetaction["Press your foot on " + $NPCList[$feettarget].pronouns.his + " " + $NPCList[$feettarget].chastity.penis] to "grab">> <<elseif !($leftleg isnot 0 or $rightleg isnot 0)>> <<set _feetaction["Grab "+ $NPCList[$feettarget].pronouns.his + " " + $_penis] to "grab">> <</if>> <</if>> <<if $NPCList[$feettarget].vagina is 0>> <<if $NPCList[$feettarget].chastity.vagina.includes("chastity")>> <<set _feetaction["Press your feet against " + $NPCList[$feettarget].pronouns.his + " " + $NPCList[$feettarget].chastity.vagina] to "vaginagrab">> <<else>> <<set _feetaction["Press your feet against " + $NPCList[$feettarget].pronouns.his + " pussy"] to "vaginagrab">> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "feetKick">> <<if $feettarget isnot "self">> <<if $consensual isnot 1 and ($fightTargets is undefined or $fightTargets.includes($feettarget))>> <<set _feetaction["Kick"] to "kick">> <</if>> <</if>> <</widget>> <<widget "feetGrabRub">> <<set _feetaction["Rub"] to "grabrub">> <<set _feetaction["Stop"] to "stop">> <</widget>> <<widget "feetOthervagina">> <<set _feetaction["Rub"] to "vaginagrabrub">> <<set _feetaction["Stop"] to "stop">> <</widget>> <<widget "feetRunClothed">> /* Commented for lack of effect <<if $NPCList[$feettarget].vagina is "clothed" or $NPCList[$feettarget].penis is "clothed">> <<set _feetaction["Rub " + $NPCList[$feettarget].pronouns.his + " crotch"] to "rub">> <</if>>*/ <</widget>> <<widget "feetshoes">> <<if $feettarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if !$worn.feet.type.includes("shackle") and !$worn.feet.type.includes("naked")>> <<set _feetaction["Kick off your shoes"] to "feetshoes">> <</if>> <</if>> <</widget>> <<widget "feetsocks">> <<if $feettarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if $worn.feet.type.includes("shackle") or $worn.feet.type.includes("naked")>> <<if $worn.legs.state is "ankles">> <<set _feetaction["Kick off your legwear"] to "feetsocks">> <<elseif $worn.legs.state is "thighs">> <<set _feetaction["Peel down your legwear"] to "feetsocks">> <</if>> <</if>> <</if>> <</widget>> <<widget "legLock">> <<if $feettarget isnot "self">> <<if ($vaginastate is "penetrated" or $anusstate is "penetrated") and ($NPCList[$feettarget].penis is "vagina" or $NPCList[$feettarget].penis is "anus") and $leglocktarget is undefined>> <<if ($consensual is 0 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 94) or ($consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 34 and !$promiscuityIgnore)>> <!-- Do Nothing --> <<else>> <<if $position is "missionary">> <<set _feetaction["Leg lock " + $NPCList[$feettarget].pronouns.him] to "legLock">> <<else>> <<set _feetaction["Push back against " + $NPCList[$feettarget].pronouns.him] to "legLock">> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "legLocked">> <<if $position is "missionary">> <<set _feetaction["Maintain the leg lock"] to "legLocked">> <<set _feetaction["Release"] to "legRelease">> <<else>> <<set _feetaction["Keep pushing back"] to "legLocked">> <<set _feetaction["Stop"] to "legRelease">> <</if>> <</widget>>
<<widget "leftdefault">> <<if $lefttarget isnot "self" and $punishmentposition isnot "gloryhole">> <<set _leftaction["Stroke"] to "leftchest">> <<if $consensual isnot 1 and ($fightTargets is undefined or $fightTargets.includes($lefttarget))>> <<set _leftaction["Punch"] to "lefthit">> <</if>> <</if>> <<if $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<set _leftaction["Hold behind back"] to "behind">> <<leftcoverface>> <</if>> <</widget>> <<widget "leftcoverface">> <<set _leftaction["Cover your face"] to "leftcoverface">> <</widget>> <<widget "leftcamerapose">> <<if $audiencecamera1 isnot 0>> <<set _leftaction["Pose for camera"] to "leftcamerapose">> <</if>> <</widget>> <<widget "lefthandpull">> <<if $lefttarget isnot "self">> <<if ($NPCList[$lefttarget].lefthand and $NPCList[$lefttarget].lefthand.startsWith("penis")) or ($NPCList[$lefttarget].righthand and $NPCList[$lefttarget].righthand.startsWith("penis"))>> <<set _leftaction["Take " + $NPCList[$lefttarget].pronouns.his + " hand off your penis"] to "handpullpenis">> <</if>> <<if ($NPCList[$lefttarget].lefthand and $NPCList[$lefttarget].lefthand.startsWith("vagina")) or ($NPCList[$lefttarget].righthand and $NPCList[$lefttarget].righthand.startsWith("vagina"))>> <<set _leftaction["Take " + $NPCList[$lefttarget].pronouns.his + " hand off your pussy"] to "handpullvagina">> <</if>> <<if ($NPCList[$lefttarget].lefthand and $NPCList[$lefttarget].lefthand.startsWith("anus")) or ($NPCList[$lefttarget].righthand and $NPCList[$lefttarget].righthand.startsWith("anus"))>> <<set _leftaction["Take " + $NPCList[$lefttarget].pronouns.his + " hand off your ass"] to "handpullanus">> <</if>> <</if>> <</widget>> <<widget "leftgrabnew">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if $_target.penis is 0>> <<set $_penis to (npcHasStrapon($lefttarget) ? "strap-on" : "penis")>> <<if $consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 34 and !$promiscuityIgnore>> <!-- Do Nothing --> <<else>> <<if $_target.chastity.penis.includes("chastity")>> <<set _leftaction["Tease " + $_target.pronouns.his + " " + $_penis + " through " + $_target.pronouns.his + " " + $_target.chastity.penis] to "leftgrab">> <<else>> <<set _leftaction["Grab " + $_target.pronouns.his + " " + $_penis] to "leftgrab">> <</if>> <</if>> <<if $_target.chastity.penis.includes("chastity")>> <<set _leftaction["Stroke " + $_target.pronouns.his + " " + $_penis + " through " + $_target.pronouns.his + " " + $_target.chastity.penis] to "leftstroke">> <<else>> <<set _leftaction["Stroke "+ $_target.pronouns.his + " " + $_penis] to "leftstroke">> <</if>> <</if>> <</if>> <</widget>> <<widget "leftplaynew">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if $consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 34 and !$promiscuityIgnore>> <!-- Do Nothing --> <<else>> <<if $_target.vagina is 0>> <<if $_target.chastity.vagina.includes("chastity")>> <<set _leftaction["Play with " + $_target.pronouns.his + " pussy through " + $_target.pronouns.his + " " + $_target.chastity.vagina] to "leftplay">> <<else>> <<set _leftaction["Play with " + $_target.pronouns.his + " pussy"] to "leftplay">> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "leftclothesnew">> <<if $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if $worn.over_upper.state is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base and $worn.over_upper.state_top is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base and !$worn.over_upper.type.includes("naked")>> <<set _leftaction["Displace your "+$worn.over_upper.name] to "over_upper">> <</if>> <<if $worn.upper.state is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base and $worn.upper.state_top is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base and !$worn.upper.type.includes("naked")>> <<set _leftaction["Displace your "+$worn.upper.name] to "upper">> <</if>> <<if $worn.under_upper.state is setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_base and $worn.under_upper.state_top is setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_top_base and !$worn.under_upper.type.includes("naked")>> <<set _leftaction["Displace your "+$worn.under_upper.name] to "under_upper">> <</if>> <<if $worn.over_lower.state is setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base and setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt isnot 1 and !$worn.over_lower.type.includes("naked")>> <<set _leftaction["Displace your "+$worn.over_lower.name] to "over_lower">> <<elseif setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt is 1 and $worn.over_lower.skirt_down is 1>> <<set _leftaction["Displace your "+$worn.over_lower.name] to "over_lower">> <</if>> <<if $worn.lower.state is setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base and setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt isnot 1 and !$worn.lower.type.includes("naked")>> <<set _leftaction["Displace your "+$worn.lower.name] to "lower">> <<elseif setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 and $worn.lower.skirt_down is 1>> <<set _leftaction["Displace your "+$worn.lower.name] to "lower">> <</if>> <<if $worn.under_lower.state is setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].state_base and !$worn.under_lower.type.includes("naked") and !($penisstate isnot 0 and playerHasStrapon())>> <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<set _leftaction["Displace your "+$worn.under_lower.name] to "under_lower">> <</if>> <</if>> <<if $worn.under_lower.state is setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].state_base and !$worn.under_lower.type.includes("naked") and !playerHasStrapon()>> <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<set _leftaction["Pull your "+$worn.under_lower.name+" to the side"] to "under_lower_to_the_side">> <</if>> <</if>> <<if $worn.face.state is setup.clothes.face[clothesIndex('face', $worn.face)].state_base and !$worn.face.type.includes("naked") and $worn.face.type.includes("mask")>> <<set _leftaction["Displace your "+$worn.face.name] to "mask">> <</if>> <</if>> <</widget>> <<widget "leftspraynew">> <<if $lefttarget isnot "self">> <<if $consensual isnot 1 and $spray gte 1 and $NPCList.some(npc => npc.health >= 0 && (!$fightTargets || $fightTargets.includes(npc.index)))>> <<set _leftaction["Pepper spray"] to "spray">> <</if>> <</if>> <</widget>> <<widget "leftstealnew">> <<if $lefttarget isnot "self" and !($stealtarget.includes($lefttarget))>> <<if (currentSkillValue('skulduggery') gte 200 or $easySteal is 1) and $enemytype is "man" and $abomination isnot 1 and !($npcrow.includes($lefttarget)) and $water isnot 1 and $punishmentposition isnot "gloryhole">> <<set $skulduggerydifficulty to (1000 - ($enemyarousal / $enemyarousalmax * 400) - $skulduggery - $enemytrust + $enemyanger) * $stealdifficulty>> <<if $easySteal is 1>><<set $skulduggerydifficulty to 0>><</if>> /*Missing <<skulduggerydifficulty>><<combatcrime>>*/ <<if !isNaN($lefttarget) and $NPCList[$lefttarget] and $NPCList[$lefttarget].clothes and $NPCList[$lefttarget].clothes.set is "naked">> <<elseif $stealstateleft is undefined>> <<set _leftaction["Steal"] to "steal">> <<elseif $stealstateleft is 2>> <<set _leftaction["Take " + $NPCList[$lefttarget].pronouns.his + " belongings"] to "steal">> <<else>> <<set _leftaction["Commit to stealing"] to "steal">> <</if>> <</if>> <</if>> <</widget>> <<widget "leftpenwhacknew">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if $_target.lefthand and ($_target.lefthand is "pen" or $_target.lefthand.startsWith("pen_")) or $_target.righthand and ($_target.righthand is "pen" or $_target.righthand.startsWith("pen_"))>> <<set _leftaction["Whack the writing tool away"] to "penwhack">> <</if>> <</if>> <</widget>> <<widget "leftshacklewhack">> <<if $lefttarget isnot "self">> <<if $NPCList[$lefttarget].lefthand is "shackle_entrance" or $NPCList[$lefttarget].lefthand is "shackle_imminent" or $NPCList[$lefttarget].righthand is "shackle_entrance" or $NPCList[$lefttarget].righthand is "shackle_imminent">> <<set _leftaction["Whack away the shackles"] to "shacklewhack">> <</if>> <</if>> <</widget>> <<widget "lefthypnosiswhack">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if $_target.lefthand and ($_target.lefthand is "hypnosis" or $_target.lefthand.startsWith("hypnosis_")) or $_target.righthand and ($_target.righthand is "hypnosis" or $_target.righthand.startsWith("hypnosis_"))>> <<set _leftaction["Whack the hypnotic instrument away"] to "hypnosiswhack">> <</if>> <</if>> <</widget>> <<widget "leftdildowhack">> <<if $lefttarget isnot "self">> <<if $NPCList[$lefttarget].lefthand is "dildo" or $NPCList[$lefttarget].righthand is "dildo">> <<if getSexToysofType("all").includes($NPCList[$lefttarget].lefttool)>> <<set _leftaction["Whack the "+ $NPCList[$lefttarget].lefttool +" away"] to "dildowhack">> <<elseif getSexToysofType("all").includes($NPCList[$lefttarget].righttool)>> <<set _leftaction["Whack the "+ $NPCList[$lefttarget].righttool +" away"] to "dildowhack">> <</if>> <</if>> <</if>> <</widget>> <<widget "leftFixAndCoverActions">> <<if ($worn.lower.vagina_exposed is 1 and $worn.under_lower.vagina_exposed is 1) or $leftactiondefault is "leftcovervaginalewd">> <<if $NPCList[0].state is "stalk" and $NPCList[0].legs isnot "run">> <<if $vaginause is "cover">> <<if $leftactiondefault is "leftcovervaginalewd" or $rightactiondefault is "rightcovervaginalewd">> <<set _leftaction["Keep playing with your pussy"] to "leftcovervaginalewd">> <<else>> <<set _leftaction["Keep covering your pussy"] to "leftcovervaginameek">> <</if>> <<elseif $vaginause is 0>> <<set _leftaction["Cover your pussy"] to "leftcovervaginameek">> <</if>> <<elseif $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1 or $NPCList[0].state is "stalk">> <<if $vaginause is "cover">> <<if $leftactiondefault is "leftcovervaginalewd" or $rightactiondefault is "rightcovervaginalewd">> <<set _leftaction["Keep playing with your pussy"] to "leftcovervaginalewd">> <<else>> <<set _leftaction["Keep covering your pussy"] to "leftcovervagina">> <</if>> <<elseif $vaginause is 0>> <<set _leftaction["Cover your pussy"] to "leftcovervagina">> <</if>> <</if>> <</if>> <<if ($worn.lower.vagina_exposed is 1 and $worn.under_lower.vagina_exposed is 1) or $leftactiondefault is "leftcoverpenislewd">> <<set _penis to playerHasStrapon() ? "strap-on" : (playerChastity("penis") ? $worn.genitals.name : "penis")>> <<set _straponDisplaced to (!playerHasStrapon() && $worn.under_lower.type.includes("strap-on"))>> <<if $NPCList[0].state is "stalk" and $NPCList[0].legs isnot "run">> <<if $penisuse is "cover">> <<if $leftactiondefault is "leftcoverpenislewd" or $rightactiondefault is "rightcoverpenislewd">> <<set _leftaction["Keep playing with your " + _penis] to "leftcoverpenislewd">> <<else>> <<set _leftaction["Keep covering your " + _penis] to "leftcoverpenismeek">> <</if>> <<elseif $penisuse is 0>> <<if !_straponDisplaced>> <<set _leftaction["Cover your " + _penis] to "leftcoverpenismeek">> <</if>> <</if>> <<elseif $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1 or $NPCList[0].state is "stalk">> <<if $penisuse is "cover">> <<if $leftactiondefault is "leftcoverpenislewd" or $rightactiondefault is "rightcoverpenislewd">> <<set _leftaction["Keep playing with your " + _penis] to "leftcoverpenislewd">> <<else>> <<set _leftaction["Keep covering your " + _penis] to "leftcoverpenis">> <</if>> <<elseif $penisuse is 0>> <<if !_straponDisplaced>> <<set _leftaction["Cover your " + _penis] to "leftcoverpenis">> <</if>> <</if>> <</if>> <</if>> <<if ($worn.lower.anus_exposed is 1 and $worn.under_lower.anus_exposed is 1) or $leftactiondefault is "leftcoveranuslewd">> <<if $NPCList[0].state is "stalk" and $NPCList[0].legs isnot "run">> <<if $anususe is "cover">> <<if $leftactiondefault is "leftcoveranuslewd" or $rightactiondefault is "rightcoveranuslewd">> <<set _leftaction["Keep playing with your ass"] to "leftcoveranuslewd">> <<else>> <<set _leftaction["Keep covering your ass"] to "leftcoveranusmeek">> <</if>> <<else>> <<set _leftaction["Cover your ass"] to "leftcoveranusmeek">> <</if>> <<elseif $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1 or $NPCList[0].state is "stalk">> <<if $anususe is "cover">> <<if $leftactiondefault is "leftcoveranuslewd" or $rightactiondefault is "rightcoveranuslewd">> <<set _leftaction["Keep playing with your ass"] to "leftcoveranuslewd">> <<else>> <<set _leftaction["Keep covering your ass"] to "leftcoveranus">> <</if>> <<else>> <<set _leftaction["Cover your ass"] to "leftcoveranus">> <</if>> <</if>> <</if>> <<if $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if $worn.under_lower.name isnot "naked">> <<if $worn.under_lower.state is "thighs" or $worn.under_lower.state is "knees" or $worn.under_lower.state is "ankles">> <<set _leftaction["Pull up your " + $worn.under_lower.name] to "leftunderpull">> <</if>> <</if>> <<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> <<if $worn.lower.skirt_down is 0>> <<if $worn.lower.state is "waist">> <<set _leftaction["Cover your crotch with your " + $worn.lower.name] to "leftskirtpull">> <</if>> <</if>> <</if>> <<if $worn.lower.name isnot "naked">> <<if $worn.upper.set is $worn.lower.set>> <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base and $worn.upper.state is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base and $worn.upper.state_top is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base>> <<set _leftaction["Fix your " + $worn.lower.name] to "leftlowerpull">> <</if>> <<elseif $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base>> <<set _leftaction["Fix your " + $worn.lower.name] to "leftlowerpull">> <</if>> <</if>> <<if $worn.over_lower.name isnot "naked">> <<if $worn.over_upper.set is $worn.over_lower.set>> <<if $worn.over_lower.state isnot setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base and $worn.over_upper.state is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base and $worn.over_upper.state_top is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base>> <<set _leftaction["Fix your " + $worn.over_lower.name] to "leftoverlowerpull">> <</if>> <<elseif $worn.over_lower.state isnot setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base>> <<set _leftaction["Fix your " + $worn.over_lower.name] to "leftoverlowerpull">> <</if>> <</if>> <<if $worn.upper.name isnot "naked">> <<if $worn.upper.state isnot setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base or $worn.upper.state_top isnot setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base>> <<set _leftaction["Fix your " + $worn.upper.name] to "leftupperpull">> <</if>> <</if>> <<if $worn.over_upper.name isnot "naked">> <<if $worn.over_upper.state isnot setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base or $worn.over_upper.state_top isnot setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base>> <<set _leftaction["Fix your " + $worn.over_upper.name] to "leftoverupperpull">> <</if>> <</if>> <</if>> <</widget>> <<widget "leftchoke">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if $_target.lefthand is "throat" or $_target.righthand is "throat">> <<if $consensual == 1>> <<set _leftaction["Press " + $_target.pronouns.his + " hand to your neck"] to "keepchoke">> <<set _leftaction["Take " + $_target.pronouns.his + " hand off your neck"] to "stopchoke">> <<else>> <<set _leftaction["Pull " + $_target.pronouns.his + " hand off your neck"] to "stopchokenoncon">> <</if>> <</if>> <</if>> <</widget>> <<widget "leftCondom">> <<if $lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if !["othermouthentrance","othermouthimminent","othermouth","penetrated","otheranus"].includes($penisstate) and $player.penisExist and $worn.lower.exposed gte 2 and $worn.under_lower.exposed gte 1 and !playerChastity("penis")>> <<if !$player.condom and $condoms gt 0 and $parasite.penis.name is undefined>> <<set _leftaction["Put on a condom (" + $condoms + " left)"] to "peniscondom">> <</if>> <<if $player.condom>> <<set _leftaction["Remove your condom"] to "penisremovecondom">> <</if>> <</if>> <</if>> <</widget>> <<widget "leftNPCCondom">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if wearingCondom($lefttarget)>> <<if ($consensual is 0 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 94) and playerPregnancyPossibleWith($_target)>> <!-- Do Nothing --> <<else>> <<set _leftaction["Remove " + $_target.pronouns.his + " condom"] to "npcremovecondom">> <</if>> <<elseif $prayerRoom or $NPCList[$lefttarget].fullDescription is "Ivory Wraith">> <!-- Do Nothing --> <<elseif !$_target.condom and $condoms gte 1 and ($_target.condomCanGive or $condomlvl is 1)>> <<set _leftaction["Give " + $_target.pronouns.him + " a condom (" + $condoms + " left)"] to "npcgivecondom">> <</if>> <</if>> <</widget>> <<widget "leftUndressOther">> <<if $lefttarget isnot "self">> <<set $_target to $NPCList[$lefttarget]>> <<if $_target.penis is "clothed" or $_target.vagina is "clothed" or $_target.chest is "clothed">> <<if ($consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 14 and !$promiscuityIgnore) or $punishmentposition is "gloryhole">> <!-- Do Nothing --> <<else>> <<set _leftaction["Undress:"] to "leftUndressOther">> <<set _undressLeftTargets to {"Nothing":"rest"}>> <<set $_doText to ($consensual isnot 1 ? "try to " : "")>> <<if $_target.penis is "clothed" or $_target.vagina is "clothed">> <<silently>><<npcUndressText $NPCList[$lefttarget] "lower">><</silently>> <<set _undressLeftTargets[($_doText + _actionText + " " + $_target.pronouns.his + " " + $_target.clothes.lower.name).toUpperFirst()] to "lower">> <</if>> <<if $_target.chest is "clothed">> <<silently>><<npcUndressText $NPCList[$lefttarget] "upper">><</silently>> <<set _undressLeftTargets[($_doText + _actionText + " " + $_target.pronouns.his + " " + $_target.clothes.upper.name).toUpperFirst()] to "upper">> <</if>> <</if>> <</if>> <</if>> <</widget>>
<<widget "rightdefault">> <<if $righttarget isnot "self" and $punishmentposition isnot "gloryhole">> <<set _rightaction["Stroke"] to "rightchest">> <<if $consensual isnot 1 and ($fightTargets is undefined or $fightTargets.includes($righttarget))>> <<set _rightaction["Punch"] to "righthit">> <</if>> <</if>> <<if $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<set _rightaction["Hold behind back"] to "behind">> <<rightcoverface>> <</if>> <</widget>> <<widget "rightcoverface">> <<set _rightaction["Cover your face"] to "rightcoverface">> <</widget>> <<widget "rightcamerapose">> <<if $audiencecamera1 isnot 0>> <<set _rightaction["Pose for camera"] to "rightcamerapose">> <</if>> <</widget>> <<widget "righthandpull">> <<if $righttarget isnot "self">> <<if ($NPCList[$righttarget].lefthand and $NPCList[$righttarget].lefthand.startsWith("penis")) or ($NPCList[$righttarget].righthand and $NPCList[$righttarget].righthand.startsWith("penis"))>> <<set _rightaction["Take " + $NPCList[$righttarget].pronouns.his + " hand off your penis"] to "handpullpenis">> <</if>> <<if ($NPCList[$righttarget].lefthand and $NPCList[$righttarget].lefthand.startsWith("vagina")) or ($NPCList[$righttarget].righthand and $NPCList[$righttarget].righthand.startsWith("vagina"))>> <<set _rightaction["Take " + $NPCList[$righttarget].pronouns.his + " hand off your pussy"] to "handpullvagina">> <</if>> <<if ($NPCList[$righttarget].lefthand and $NPCList[$righttarget].lefthand.startsWith("anus")) or ($NPCList[$righttarget].righthand and $NPCList[$righttarget].righthand.startsWith("anus"))>> <<set _rightaction["Take " + $NPCList[$righttarget].pronouns.his + " hand off your ass"] to "handpullanus">> <</if>> <</if>> <</widget>> <<widget "rightgrabnew">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if $_target.penis is 0>> <<set $_penis to (npcHasStrapon($righttarget) ? "strap-on" : "penis")>> <<if $consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 34 and !$promiscuityIgnore>> <!-- Do Nothing --> <<else>> <<if $_target.chastity.penis.includes("chastity")>> <<set _rightaction["Tease " + $_target.pronouns.his + " " + $_penis + " through " + $_target.pronouns.his + " " + $_target.chastity.penis] to "rightgrab">> <<else>> <<set _rightaction["Grab " + $_target.pronouns.his + " " + $_penis] to "rightgrab">> <</if>> <</if>> <<if $_target.chastity.penis.includes("chastity")>> <<set _rightaction["Stroke " + $_target.pronouns.his + " " + $_penis + " through " + $_target.pronouns.his + " " + $_target.chastity.penis] to "rightstroke">> <<else>> <<set _rightaction["Stroke " + $_target.pronouns.his + " " + $_penis] to "rightstroke">> <</if>> <</if>> <</if>> <</widget>> <<widget "rightplaynew">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if $consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 34 and !$promiscuityIgnore>> <!-- Do Nothing --> <<else>> <<if $_target.vagina is 0>> <<if $_target.chastity.vagina.includes("chastity")>> <<set _rightaction["Play with " + $_target.pronouns.his + " pussy through " + $_target.pronouns.his + " " + $_target.chastity.vagina] to "rightplay">> <<else>> <<set _rightaction["Play with " + $_target.pronouns.his + " pussy"] to "rightplay">> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "rightclothesnew">> <<if $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if $worn.over_upper.state is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base and $worn.over_upper.state_top is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base and !$worn.over_upper.type.includes("naked")>> <<set _rightaction["Displace your "+$worn.over_upper.name] to "over_upper">> <</if>> <<if $worn.upper.state is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base and $worn.upper.state_top is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base and !$worn.upper.type.includes("naked")>> <<set _rightaction["Displace your "+$worn.upper.name] to "upper">> <</if>> <<if $worn.under_upper.state is setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_base and $worn.under_upper.state_top is setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_top_base and !$worn.under_upper.type.includes("naked")>> <<set _rightaction["Displace your "+$worn.under_upper.name] to "under_upper">> <</if>> <<if $worn.over_lower.state is setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base and setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt isnot 1 and !$worn.over_lower.type.includes("naked")>> <<set _rightaction["Displace your "+$worn.over_lower.name] to "over_lower">> <<elseif setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt is 1 and $worn.over_lower.skirt_down is 1>> <<set _rightaction["Displace your "+$worn.over_lower.name] to "over_lower">> <</if>> <<if $worn.lower.state is setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base and setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt isnot 1 and !$worn.lower.type.includes("naked")>> <<set _rightaction["Displace your "+$worn.lower.name] to "lower">> <<elseif setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 and $worn.lower.skirt_down is 1>> <<set _rightaction["Displace your "+$worn.lower.name] to "lower">> <</if>> <<if $worn.under_lower.state is setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].state_base and !$worn.under_lower.type.includes("naked") and !($penisstate isnot 0 and playerHasStrapon())>> <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<set _rightaction["Displace your "+$worn.under_lower.name] to "under_lower">> <</if>> <</if>> <<if $worn.under_lower.state is setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].state_base and !$worn.under_lower.type.includes("naked") and !playerHasStrapon()>> <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<set _rightaction["Pull your "+$worn.under_lower.name+" to the side"] to "under_lower_to_the_side">> <</if>> <</if>> <<if $worn.face.state is setup.clothes.face[clothesIndex('face', $worn.face)].state_base and !$worn.face.type.includes("naked") and $worn.face.type.includes("mask")>> <<set _rightaction["Displace your "+$worn.face.name] to "mask">> <</if>> <</if>> <</widget>> <<widget "rightspraynew">> <<if $righttarget isnot "self">> <<if $consensual isnot 1 and $spray gte 1 and $NPCList.some(npc => npc.health >= 0 && (!$fightTargets || $fightTargets.includes(npc.index)))>> <<set _rightaction["Pepper spray"] to "spray">> <</if>> <</if>> <</widget>> <<widget "rightstealnew">> <<if $righttarget isnot "self" and !($stealtarget.includes($righttarget))>> <<if (currentSkillValue('skulduggery') gte 200 or $easySteal is 1) and $enemytype is "man" and $abomination isnot 1 and !($npcrow.includes($righttarget)) and $water isnot 1 and $punishmentposition isnot "gloryhole">> <<set $skulduggerydifficulty to (1000 - ($enemyarousal / $enemyarousalmax * 400) - $skulduggery - $enemytrust + $enemyanger) * $stealdifficulty>> <<if $easySteal is 1>><<set $skulduggerydifficulty to 0>><</if>> /*Missing <<skulduggerydifficulty>><<combatcrime>>*/ <<if !isNaN($righttarget) and $NPCList[$righttarget] and $NPCList[$righttarget].clothes and $NPCList[$righttarget].clothes.set is "naked">> <<elseif $stealstateright is undefined>> <<set _rightaction["Steal"] to "steal">> <<elseif $stealstateright is 2>> <<set _rightaction["Take " + $NPCList[$righttarget].pronouns.his + " belongings"] to "steal">> <<else>> <<set _rightaction["Commit to stealing"] to "steal">> <</if>> <</if>> <</if>> <</widget>> <<widget "rightpenwhacknew">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if $_target.lefthand and ($_target.lefthand is "pen" or $_target.lefthand.startsWith("pen_")) or $_target.righthand and ($_target.righthand is "pen" or $_target.righthand.startsWith("pen_"))>> <<set _rightaction["Whack the writing tool away"] to "penwhack">> <</if>> <</if>> <</widget>> <<widget "rightshacklewhack">> <<if $righttarget isnot "self">> <<if $NPCList[$righttarget].lefthand is "shackle_entrance" or $NPCList[$righttarget].lefthand is "shackle_imminent" or $NPCList[$righttarget].righthand is "shackle_entrance" or $NPCList[$righttarget].righthand is "shackle_imminent">> <<set _rightaction["Whack away the shackles"] to "shacklewhack">> <</if>> <</if>> <</widget>> <<widget "righthypnosiswhack">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if $_target.righthand and ($_target.righthand is "hypnosis" or $_target.righthand.startsWith("hypnosis_")) or $_target.righthand and ($_target.righthand is "hypnosis" or $_target.righthand.startsWith("hypnosis_"))>> <<set _rightaction["Whack the hypnotic instrument away"] to "hypnosiswhack">> <</if>> <</if>> <</widget>> <<widget "rightdildowhack">> <<if $righttarget isnot "self">> <<if $NPCList[$righttarget].lefthand is "dildo" or $NPCList[$righttarget].righthand is "dildo">> <<if getSexToysofType("all").includes($NPCList[$righttarget].lefttool)>> <<set _rightaction["Whack the "+ $NPCList[$righttarget].lefttool +" away"] to "dildowhack">> <<elseif getSexToysofType("all").includes($NPCList[$righttarget].righttool)>> <<set _rightaction["Whack the "+ $NPCList[$righttarget].righttool +" away"] to "dildowhack">> <</if>> <</if>> <</if>> <</widget>> <<widget "rightFixAndCoverActions">> <<if ($worn.lower.vagina_exposed is 1 and $worn.under_lower.vagina_exposed is 1) or $rightactiondefault is "rightcovervaginalewd">> <<if $NPCList[0].state is "stalk" and $NPCList[0].legs isnot "run">> <<if $vaginause is "cover">> <<if $leftactiondefault is "leftcovervaginalewd" or $rightactiondefault is "rightcovervaginalewd">> <<set _rightaction["Keep playing with your pussy"] to "rightcovervaginalewd">> <<else>> <<set _rightaction["Keep covering your pussy"] to "rightcovervaginameek">> <</if>> <<elseif $vaginause is 0>> <<set _rightaction["Cover your pussy"] to "rightcovervaginameek">> <</if>> <<elseif $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1 or $NPCList[0].state is "stalk">> <<if $vaginause is "cover">> <<if $leftactiondefault is "leftcovervaginalewd" or $rightactiondefault is "rightcovervaginalewd">> <<set _rightaction["Keep playing with your pussy"] to "rightcovervaginalewd">> <<else>> <<set _rightaction["Keep covering your pussy"] to "rightcovervagina">> <</if>> <<elseif $vaginause is 0>> <<set _rightaction["Cover your pussy"] to "rightcovervagina">> <</if>> <</if>> <</if>> <<if ($worn.lower.vagina_exposed is 1 and $worn.under_lower.vagina_exposed is 1) or $rightactiondefault is "rightcoverpenislewd">> <<set _penis to playerHasStrapon() ? "strap-on" : (playerChastity("penis") ? $worn.genitals.name : "penis")>> <<set _straponDisplaced to (!playerHasStrapon() && $worn.under_lower.type.includes("strap-on"))>> <<if $NPCList[0].state is "stalk" and $NPCList[0].legs isnot "run">> <<if $penisuse is "cover">> <<if $leftactiondefault is "leftcoverpenislewd" or $rightactiondefault is "rightcoverpenislewd">> <<set _rightaction["Keep playing with your " + _penis] to "rightcoverpenislewd">> <<else>> <<set _rightaction["Keep covering your " + _penis] to "rightcoverpenismeek">> <</if>> <<elseif $penisuse is 0>> <<if !_straponDisplaced>> <<set _rightaction["Cover your " + _penis] to "rightcoverpenismeek">> <</if>> <</if>> <<elseif $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1 or $NPCList[0].state is "stalk">> <<if $penisuse is "cover">> <<if $leftactiondefault is "leftcoverpenislewd" or $rightactiondefault is "rightcoverpenislewd">> <<set _rightaction["Keep playing with your " + _penis] to "rightcoverpenislewd">> <<else>> <<set _rightaction["Keep covering your " + _penis] to "rightcoverpenis">> <</if>> <<elseif $penisuse is 0>> <<if !_straponDisplaced>> <<set _rightaction["Cover your " + _penis] to "rightcoverpenis">> <</if>> <</if>> <</if>> <</if>> <<if ($worn.lower.anus_exposed is 1 and $worn.under_lower.anus_exposed is 1) or $rightactiondefault is "rightcoveranuslewd">> <<if $NPCList[0].state is "stalk" and $NPCList[0].legs isnot "run">> <<if $anususe is "cover">> <<if $leftactiondefault is "leftcoveranuslewd" or $rightactiondefault is "rightcoveranuslewd">> <<set _rightaction["Keep playing with your ass"] to "rightcoveranuslewd">> <<else>> <<set _rightaction["Keep covering your ass"] to "rightcoveranusmeek">> <</if>> <<else>> <<set _rightaction["Cover your ass"] to "rightcoveranusmeek">> <</if>> <<elseif $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1 or $NPCList[0].state is "stalk">> <<if $anususe is "cover">> <<if $leftactiondefault is "leftcoveranuslewd" or $rightactiondefault is "rightcoveranuslewd">> <<set _rightaction["Keep playing with your ass"] to "rightcoveranuslewd">> <<else>> <<set _rightaction["Keep covering your ass"] to "rightcoveranus">> <</if>> <<else>> <<set _rightaction["Cover your ass"] to "rightcoveranus">> <</if>> <</if>> <</if>> <<if $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if $worn.under_lower.name isnot "naked">> <<if $worn.under_lower.state is "thighs" or $worn.under_lower.state is "knees" or $worn.under_lower.state is "ankles">> <<set _rightaction["Pull up your " + $worn.under_lower.name] to "rightunderpull">> <</if>> <</if>> <<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> <<if $worn.lower.skirt_down is 0>> <<if $worn.lower.state is "waist">> <<set _rightaction["Cover your crotch with your " + $worn.lower.name] to "rightskirtpull">> <</if>> <</if>> <</if>> <<if $worn.lower.name isnot "naked">> <<if $worn.upper.set is $worn.lower.set>> <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base and $worn.upper.state is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base and $worn.upper.state_top is setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base>> <<set _rightaction["Fix your " + $worn.lower.name] to "rightlowerpull">> <</if>> <<elseif $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base>> <<set _rightaction["Fix your " + $worn.lower.name] to "rightlowerpull">> <</if>> <</if>> <<if $worn.over_lower.name isnot "naked">> <<if $worn.over_upper.set is $worn.over_lower.set>> <<if $worn.over_lower.state isnot setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base and $worn.over_upper.state is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base and $worn.over_upper.state_top is setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base>> <<set _rightaction["Fix your " + $worn.over_lower.name] to "rightoverlowerpull">> <</if>> <<elseif $worn.over_lower.state isnot setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base>> <<set _rightaction["Fix your " + $worn.over_lower.name] to "rightoverlowerpull">> <</if>> <</if>> <<if $worn.upper.name isnot "naked">> <<if $worn.upper.state isnot setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base or $worn.upper.state_top isnot setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base>> <<set _rightaction["Fix your " + $worn.upper.name] to "rightupperpull">> <</if>> <</if>> <<if $worn.over_upper.name isnot "naked">> <<if $worn.over_upper.state isnot setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base or $worn.over_upper.state_top isnot setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base>> <<set _rightaction["Fix your " + $worn.over_upper.name] to "rightoverupperpull">> <</if>> <</if>> <</if>> <</widget>> <<widget "rightchoke">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if $_target.lefthand is "throat" or $_target.righthand is "throat">> <<if $consensual == 1>> <<set _rightaction["Press " + $_target.pronouns.his + " hand to your neck"] to "keepchoke">> <<set _rightaction["Take " + $_target.pronouns.his + " hand off your neck"] to "stopchoke">> <<else>> <<set _rightaction["Pull " + $_target.pronouns.his + " hand off your neck"] to "stopchokenoncon">> <</if>> <</if>> <</if>> <</widget>> <<widget "rightCondom">> <<if $righttarget is "self" or $options.targetYourself is false or _targetnumber is 1>> <<if !["othermouthentrance","othermouthimminent","othermouth","penetrated","otheranus"].includes($penisstate) and $player.penisExist and $worn.lower.exposed gte 2 and $worn.under_lower.exposed gte 1 and !playerChastity("penis")>> <<if !$player.condom and $condoms gt 0 and $parasite.penis.name is undefined>> <<set _rightaction["Put on a condom (" + $condoms + " left)"] to "peniscondom">> <</if>> <<if $player.condom>> <<set _rightaction["Remove your condom"] to "penisremovecondom">> <</if>> <</if>> <</if>> <</widget>> <<widget "rightNPCCondom">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if wearingCondom($righttarget)>> <<if ($consensual is 0 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 94) and playerPregnancyPossibleWith($_target)>> <!-- Do Nothing --> <<else>> <<set _rightaction["Remove " + $_target.pronouns.his + " condom"] to "npcremovecondom">> <</if>> <<elseif $prayerRoom or $NPCList[$righttarget].fullDescription is "Ivory Wraith">> <!-- Do Nothing --> <<elseif !$_target.condom and $condoms gte 1 and ($_target.condomCanGive or $condomlvl lte 1)>> <<set _rightaction["Give " + $_target.pronouns.him + " a condom (" + $condoms + " left)"] to "npcgivecondom">> <</if>> <</if>> <</widget>> <<widget "rightUndressOther">> <<if $righttarget isnot "self">> <<set $_target to $NPCList[$righttarget]>> <<if $_target.penis is "clothed" or $_target.vagina is "clothed" or $_target.chest is "clothed">> <<if ($consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lte 14 and !$promiscuityIgnore) or $punishmentposition is "gloryhole">> <!-- Do Nothing --> <<else>> <<set _rightaction["Undress:"] to "rightUndressOther">> <<set _undressRightTargets to {"Nothing":"rest"}>> <<set $_doText to ($consensual isnot 1 ? "try to " : "")>> <<if $_target.penis is "clothed" or $_target.vagina is "clothed">> <<silently>><<npcUndressText $NPCList[$righttarget] "lower">><</silently>> <<set _undressRightTargets[($_doText + _actionText + " " + $_target.pronouns.his + " " + $_target.clothes.lower.name).toUpperFirst()] to "lower">> <</if>> <<if $_target.chest is "clothed">> <<silently>><<npcUndressText $NPCList[$righttarget] "upper">><</silently>> <<set _undressRightTargets[($_doText + _actionText + " " + $_target.pronouns.his + " " + $_target.clothes.upper.name).toUpperFirst()] to "upper">> <</if>> <</if>> <</if>> <</if>> <</widget>>
/* this is for widgets done in a generic way to cover either hand in either old or new style */ <<widget "handsstrugglefreebodypart">> <<if $consensual isnot 1>> <<set _hand to _args[0]>> <<set _style to _args[1]>> <<if _hand is "right">> <<set _default to $rightactiondefault>> <<set _actionVariable to "$rightaction">> <<set _actions to _rightaction>> <<else>> <<set _default to $leftactiondefault>> <<set _actionVariable to "$leftaction">> <<set _actions to _leftaction>> <</if>> <<if (_hand is "left" and $lefttarget isnot "self") or (_hand is "right" and $righttarget isnot "self")>> <<if ["breasts", "nipple", "otheranus"].includes($mouthstate) or ["lefthand", "righthand", "facesit"].includes($mouthuse)>> <<if _style is "old">> | <label><span class="brat">Free your face</span><<radiobutton _actionVariable "freeface" `_default is "freeface" ? 'checked' : ''`>></label> <<else>> <<set _actions["Free your face"] to "freeface">> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "combathandhold">> <<set $_heldhand to _args[0]>> <<if $enemytype isnot "beast" and $consensual is 1>> <<if $_heldhand is "righthand" and $righttarget isnot "self">> <<if $NPCList[$righttarget].lefthand is 0 or $NPCList[$righttarget].lefthand is "idle">> <<set _rightaction["Hold " + $NPCList[$righttarget].pronouns.his + " hand"] to "righthandholdnew">> <</if>> <<elseif $_heldhand is "lefthand" and $lefttarget isnot "self">> <<if $NPCList[$lefttarget].righthand is 0 or $NPCList[$lefttarget].righthand is "idle">> <<set _leftaction["Hold " + $NPCList[$lefttarget].pronouns.his + " hand"] to "lefthandholdnew">> <</if>> <</if>> <</if>> <</widget>> <<widget "combathandguide">> <<if $consensual is 1 and ($enemytype is "man" ? $promiscuity : $deviancy) lt 15 and !$promiscuityIgnore>> <!-- Do Nothing --> <<else>> <<set _handGuideOptions to {}>> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<set $_anus_exposed to $worn.over_lower.anus_exposed gte 1 and ($worn.lower.anus_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.anus_exposed gte 1 and $worn.genitals.anus_exposed gte 1>> <<if $_genitals_exposed>> <<if $penisuse is 0>> <<set _handGuideOptions["your penis"] to "penis">> <</if>> <<if $vaginause is 0>> <<set _handGuideOptions["your pussy"] to "pussy">> <</if>> <</if>> <<if $anususe is 0 and $_anus_exposed>> <<set _handGuideOptions["your ass"] to "ass">> <</if>> <<if Object.keys(_handGuideOptions).length gt 0>> <<if _args[0] is "left">> <<set _leftaction["Guide " + $NPCList[$lefttarget].pronouns.him + " to"] to "handguide">> <<else>> <<set _rightaction["Guide " + $NPCList[$righttarget].pronouns.him + " to"] to "handguide">> <</if>> <</if>> <</if>> <</widget>> <<widget "removeButtplug">> <<if _args[0] and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1) and playerHasButtPlug() and !playerChastity("anus")>> <<if _args[0] is "left">> <<if ($worn.over_lower.exposed gte 1 and $worn.lower.exposed gte 1) or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked") and !["othermouthImminent","othermouth","imminent","doubleimminent","penetrated","doublepenetrated"].includes($anusstate)>> <<set _leftaction["Remove your "+$worn.butt_plug.name] to "removebuttplug">> <</if>> <</if>> <<if _args[0] is "right">> <<if ($worn.over_lower.exposed gte 1 and $worn.lower.exposed gte 1) or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked") and !["othermouthImminent","othermouth","imminent","doubleimminent","penetrated","doublepenetrated"].includes($anusstate)>> <<set _rightaction["Remove your "+$worn.butt_plug.name] to "removebuttplug">> <</if>> <</if>> <</if>> <</widget>> <<widget "combatMasturbate">> <<if _args[0] isnot undefined>> <<if ($worn.over_lower.exposed gte 1 and $worn.lower.exposed gte 1) or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<if _args[0] is "left">> <<if hasSexStat("promiscuity", 2) and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $player.penisExist and $penisuse is 0 and !playerChastity("penis")>> <<set _leftaction["Stroke your penis"] to "leftmasturbatepenis">> <</if>> <<if $player.vaginaExist and $vaginause is 0 and !playerChastity("vagina")>> <<set _leftaction["Play with your pussy"] to "leftmasturbatepussy">> <</if>> <<if hasSexStat("promiscuity", 3) and $awareness gte 200 and $anususe is 0 and !playerChastity("anus")>> <<set _leftaction["Play with your anus"] to "leftmasturbateanus">> <</if>> <</if>> <</if>> <<if _args[0] is "right">> <<if hasSexStat("promiscuity", 2) and ($righttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $player.penisExist and $penisuse is 0 and !playerChastity("penis")>> <<set _rightaction["Stroke your penis"] to "rightmasturbatepenis">> <</if>> <<if $player.vaginaExist and $vaginause is 0 and !playerChastity("vagina")>> <<set _rightaction["Play with your pussy"] to "rightmasturbatepussy">> <</if>> <<if hasSexStat("promiscuity", 3) and $awareness gte 200 and $anususe is 0 and !playerChastity("anus")>> <<set _rightaction["Play with your anus"] to "rightmasturbateanus">> <</if>> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "applyLube">> <<if _args[0] is "left" and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<set _items to window.listUniqueCarriedSextoys()>> <<for _i = 0; _i < _items.length; _i++>> <<if _items[_i].type.includes("lube")>> <<set _hasLube to true>> <<break>> <</if>> <</for>> <<if _hasLube is true>> <<if $worn.over_lower.vagina_exposed isnot 0 and $worn.lower.vagina_exposed isnot 0 and $worn.under_lower.vagina_exposed isnot 0 and $worn.genitals.vagina_exposed isnot 0>> <<if !["othermouthentrance","othermouthimminent","othermouth","penetrated","otheranus"].includes($penisstate) and $player.penisExist>> <<set $_penis to (!playerHasStrapon() ? "penis" : "strap-on")>> <<set _leftaction["Lubricate your " + $_penis] to "lubepenis">> <</if>> <<if !["othermouthimminent","othermouth","imminent","penetrated","doubleimminent","doublepenetrated"].includes($vaginastate) and $player.vaginaExist>> <<set _leftaction["Lubricate your pussy"] to "lubepussy">> <</if>> <</if>> <<if $worn.over_lower.anus_exposed isnot 0 and $worn.lower.anus_exposed isnot 0 and $worn.under_lower.anus_exposed isnot 0 and $worn.genitals.anus_exposed isnot 0>> <<if !["othermouthimminent","othermouth","imminent","penetrated","doubleimminent","doublepenetrated"].includes($anusstate)>> <<set _leftaction["Lubricate your anus"] to "lubeanus">> <</if>> <</if>> <</if>> <</if>> <<if _args[0] is "right" and ($righttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<set _items to window.listUniqueCarriedSextoys()>> <<for _i; _i < _items.length; _i++>> <<if _items[_i].type.includes("lube")>> <<set _hasLube to true>> <<break>> <</if>> <</for>> <<if _hasLube is true>> <<if $worn.over_lower.vagina_exposed isnot 0 and $worn.lower.vagina_exposed isnot 0 and $worn.under_lower.vagina_exposed isnot 0 and $worn.genitals.vagina_exposed isnot 0>> <<if !["othermouthentrance","othermouthimminent","othermouth","penetrated","otheranus"].includes($penisstate) and $player.penisExist>> <<set _rightaction["Lubricate your penis"] to "lubepenis">> <</if>> <<if !["othermouthimminent","othermouth","imminent","penetrated","doubleimminent","doublepenetrated"].includes($vaginastate) and $player.vaginaExist>> <<set _rightaction["Lubricate your pussy"] to "lubepussy">> <</if>> <</if>> <<if $worn.over_lower.anus_exposed isnot 0 and $worn.lower.anus_exposed isnot 0 and $worn.under_lower.anus_exposed isnot 0 and $worn.genitals.anus_exposed isnot 0>> <<if !["othermouthimminent","othermouth","imminent","penetrated","doubleimminent","doublepenetrated"].includes($anusstate)>> <<set _rightaction["Lubricate your anus"] to "lubeanus">> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "heldSexToy">> <<if _args[0] isnot undefined>> <<if _args[0] is "left">> /* rest */ <<set _leftaction["Rest"] to "heldSexToy">> /* Drop sex toy */ <<set _leftaction["Drop your "+$currentSexToyLeft.name] to "dildoDrop">> /* NPC fuck */ <<if $lefttarget isnot undefined and $lefttarget isnot "self">> <<if $NPCList[$lefttarget].vagina isnot "none" and $NPCList[$lefttarget].vagina is 0 and $currentSexToyLeft.type.includes("dildo")>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to "+$NPCList[$lefttarget].pronouns.his+" pussy"] to "dildoOtherPussyTease">> <</if>> <<if $NPCList[$lefttarget].penis isnot "none" and $NPCList[$lefttarget].penis is 0 and !npcHasStrapon($lefttarget) and $currentSexToyLeft.type.includes("stroker")>> <<set _leftaction["Move your " + $currentSexToyLeft.name + " to " + $NPCList[$lefttarget].pronouns.his + " penis"] to "strokerOtherPenisTease">> <</if>> <<if $analdisable is "f" and $NPCList[$lefttarget].vagina isnot "none" and $NPCList[$lefttarget].vagina is 0 and $currentSexToyLeft.type.includes("dildo")>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to "+$NPCList[$lefttarget].pronouns.his+" anus"] to "dildoOtherAnusTease">> <</if>> <<if $analdisable is "f" and $NPCList[$lefttarget].penis isnot "none" and $NPCList[$lefttarget].penis is 0 and $currentSexToyLeft.type.includes("dildo")>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to "+$NPCList[$lefttarget].pronouns.his+" anus"] to "dildoOtherAnusTease">> <</if>> <</if>> /* Masturbate */ <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<if hasSexStat("promiscuity", 3) and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $player.vaginaExist and $currentSexToyLeft.type.includes("dildo")>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to your pussy"] to "dildoSelfPussyEntrance">> <</if>> <<if $analdisable is "f" and $currentSexToyLeft.type.includes("dildo")>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to your anus"] to "dildoSelfAnusEntrance">> <</if>> <<if $player.penisExist and $currentSexToyLeft.type.includes("stroker")>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to your penis"] to "strokerSelfPenisEntrance">> <</if>> <</if>> <</if>> <</if>> <<if _args[0] is "right">> /* rest */ <<set _rightaction["Rest"] to "heldSexToy">> /* Drop sex toy */ <<set _rightaction["Drop your "+$currentSexToyRight.name] to "dildoDrop">> /* NPC fuck */ <<if $righttarget isnot undefined and $righttarget isnot "self">> <<if $NPCList[$righttarget].vagina isnot "none" and $NPCList[$righttarget].vagina is 0 and $currentSexToyRight.type.includes("dildo")>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to "+$NPCList[$righttarget].pronouns.his+" pussy"] to "dildoOtherPussyTease">> <</if>> <<if $NPCList[$righttarget].penis isnot "none" and $NPCList[$righttarget].penis is 0 and !npcHasStrapon($righttarget) and $currentSexToyRight.type.includes("stroker")>> <<set _rightaction["Move your " + $currentSexToyRight.name + " to " + $NPCList[$righttarget].pronouns.his + " penis"] to "strokerOtherPenisTease">> <</if>> <<if $analdisable is "f" and $NPCList[$righttarget].vagina isnot "none" and $NPCList[$righttarget].vagina is 0 and $currentSexToyRight.type.includes("dildo")>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to "+$NPCList[$righttarget].pronouns.his+" anus"] to "dildoOtherAnusTease">> <</if>> <<if $analdisable is "f" and $NPCList[$righttarget].penis isnot "none" and $NPCList[$righttarget].penis is 0 and $currentSexToyRight.type.includes("dildo")>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to "+$NPCList[$righttarget].pronouns.his+" anus"] to "dildoOtherAnusTease">> <</if>> <</if>> /* Masturbate */ <<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>> <<if hasSexStat("promiscuity", 3) and ($righttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $player.vaginaExist and $currentSexToyRight.type.includes("dildo")>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to your pussy"] to "dildoSelfPussyEntrance">> <</if>> <<if $analdisable is "f" and $currentSexToyRight.type.includes("dildo")>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to your anus"] to "dildoSelfAnusEntrance">> <</if>> <<if $player.penisExist and $currentSexToyRight.type.includes("stroker")>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to your penis"] to "strokerSelfPenisEntrance">> <</if>> <</if>> <</if>> <</if>> <</if>> <</widget>> <<widget "dildoSelfPussyEntrance">> <<if _args[0] isnot undefined>> <<if _args[0] is "left">> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<if hasSexStat("promiscuity", 3) and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $_genitals_exposed and $vaginause is 0>> <<set _leftaction["Push your " + $currentSexToyLeft.name + " in"] to "dildoSelfPussy">> <</if>> <<if $_genitals_exposed and $anususe is 0>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to your anus"] to "dildoSelfAnusEntrance">> <</if>> <</if>> <<set _leftaction["Tease your pussy"] to "dildoSelfPussyEntrance">> <<set _leftaction["Drop your " + $currentSexToyLeft.name] to "dildoDrop">> <</if>> <<if _args[0] is "right">> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<if hasSexStat("promiscuity", 3) and ($righttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $_genitals_exposed and $vaginause is 0>> <<set _rightaction["Push your " + $currentSexToyRight.name + " in"] to "dildoSelfPussy">> <</if>> <<if $_genitals_exposed and $anususe is 0>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to your anus"] to "dildoSelfAnusEntrance">> <</if>> <</if>> <<set _rightaction["Tease your pussy"] to "dildoSelfPussyEntrance">> <<set _rightaction["Drop your " + $currentSexToyRight.name] to "dildoDrop">> <</if>> <</if>> <</widget>> <<widget "dildoSelfAnusEntrance">> <<if _args[0] isnot undefined>> <<if _args[0] is "left">> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<set $_anus_exposed to $worn.over_lower.anus_exposed gte 1 and ($worn.lower.anus_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.anus_exposed gte 1 and $worn.genitals.anus_exposed gte 1>> <<if hasSexStat("promiscuity", 3) and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $_anus_exposed and $anususe is 0>> <<set _leftaction["Push your " + $currentSexToyLeft.name + " in"] to "dildoSelfAnus">> <</if>> <<if $_genitals_exposed and $vaginause is 0>> <<set _leftaction["Move your "+$currentSexToyLeft.name+" to your pussy"] to "dildoSelfPussyEntrance">> <</if>> <</if>> <<set _leftaction["Tease your anus"] to "dildoSelfAnusEntrance">> <<set _leftaction["Drop your " + $currentSexToyLeft.name] to "dildoDrop">> <</if>> <<if _args[0] is "right">> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<set $_anus_exposed to $worn.over_lower.anus_exposed gte 1 and ($worn.lower.anus_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.anus_exposed gte 1 and $worn.genitals.anus_exposed gte 1>> <<if hasSexStat("promiscuity", 3) and ($righttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $_anus_exposed and $anususe is 0>> <<set _rightaction["Push your " + $currentSexToyRight.name + " in"] to "dildoSelfAnus">> <</if>> <<if $_genitals_exposed and $vaginause is 0>> <<set _rightaction["Move your "+$currentSexToyRight.name+" to your pussy"] to "dildoSelfPussyEntrance">> <</if>> <</if>> <<set _rightaction["Tease your anus"] to "dildoSelfAnusEntrance">> <<set _rightaction["Drop your " + $currentSexToyRight.name] to "dildoDrop">> <</if>> <</if>> <</widget>> <<widget "strokerSelfPenisEntrance">> <<if _args[0] isnot undefined>> <<if _args[0] is "left">> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<if hasSexStat("promiscuity", 3) and ($lefttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $_genitals_exposed and $penisuse is 0>> <<set _leftaction["Penetrate your " + $currentSexToyLeft.name] to "strokerSelfPenis">> <</if>> <</if>> <<set _leftaction["Tease your penis"] to "strokerSelfPenisEntrance">> <<set _leftaction["Drop your " + $currentSexToyLeft.name] to "dildoDrop">> <</if>> <<if _args[0] is "right">> <<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and ($worn.lower.vagina_exposed gte 1 or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt gte 1) and $worn.under_lower.vagina_exposed gte 1 and $worn.genitals.vagina_exposed gte 1>> <<if hasSexStat("promiscuity", 3) and ($righttarget is "self" or $options.targetYourself is false or _targetnumber is 1)>> <<if $_genitals_exposed and $penisuse is 0>> <<set _rightaction["Penetrate your " + $currentSexToyRight.name] to "strokerSelfPenis">> <</if>> <</if>> <<set _rightaction["Tease your penis"] to "strokerSelfPenisEntrance">> <<set _rightaction["Drop your " + $currentSexToyRight.name] to "dildoDrop">> <</if>> <</if>> <</widget>>
<<widget "effectshandsclothes">> /* Unified each clothing action for both hands. To add conditionals for both hands, use: if $leftaction is $rightaction as a block inside */ <<if $leftaction is "over_upper" or $rightaction is "over_upper">> <<if $leftaction is "over_upper">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "over_upper">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<if $worn.over_upper.name is "naked">> You clutch the tattered remains of your clothing. <<elseif $worn.over_upper.open is 1>> <<set $worn.over_upper.exposed to 2>><<set $worn.over_upper.state_top to "midriff">> <<if $worn.upper.exposed lt 2>> You pull down your $worn.over_upper.name. <<elseif $player.breastsize gte 3>> You pull down your $worn.over_upper.name <span class="lewd">and your <<breasts>> flop out.</span> <<else>> You pull down your $worn.over_upper.name, <span class="lewd">exposing your <<breasts>>.</span> <</if>> <<overupperstrip>> <<else>> <<set $worn.over_upper.exposed to 2>><<set $worn.over_upper.state to "chest">> <<if $worn.upper.exposed lt 2>> You pull up your $worn.over_upper.name. <<elseif $player.breastsize gte 3>> You pull up your $worn.over_upper.name <span class="lewd">and your <<breasts>> flop out.</span> <<else>> You pull up your $worn.over_upper.name, <span class="lewd">exposing your <<breasts>>.</span> <</if>> <<overupperstrip>> <</if>> <</if>> <<if $leftaction is "upper" or $rightaction is "upper">> <<if $leftaction is "upper">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "upper">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<if $worn.upper.name is "naked">> You clutch the tattered remains of your clothing. <<elseif $worn.upper.open is 1>> <<set $worn.upper.exposed to 2>><<set $worn.upper.state_top to "midriff">> <<if $player.breastsize gte 3>> You pull down your $worn.upper.name <span class="lewd">and your <<breasts>> flop out.</span> <<else>> You pull down your $worn.upper.name, <span class="lewd">exposing your <<breasts>>.</span> <</if>> <<upperstrip>> <<else>> <<set $worn.upper.exposed to 2>><<set $worn.upper.state to "chest">> <<if $player.breastsize gte 3>> You pull up your $worn.upper.name <span class="lewd">and your <<breasts>> flop out.</span> <<else>> You pull up your $worn.upper.name, <span class="lewd">exposing your <<breasts>>.</span> <</if>> <<upperstrip>> <</if>> <</if>> <<if $leftaction is "under_upper" or $rightaction is "under_upper">> <<if $leftaction is "under_upper">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "under_upper">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<if $worn.under_upper.name is "naked">> You clutch the tattered remains of your clothing. <<elseif $worn.under_upper.open is 1>> <<set $worn.under_upper.exposed to 2>><<set $worn.under_upper.state_top to "midriff">> <<if $player.breastsize gte 3>> You pull down your $worn.under_upper.name <span class="lewd">and your <<breasts>> flop out.</span> <<else>> You pull down your $worn.under_upper.name, <span class="lewd">exposing your <<breasts>>.</span> <</if>> <<underupperstrip>> <<else>> <<set $worn.under_upper.exposed to 2>><<set $worn.under_upper.state to "chest">> <<if $player.breastsize gte 3>> You pull up your $worn.under_upper.name <span class="lewd">and your <<breasts>> flop out.</span> <<else>> You pull up your $worn.under_upper.name, <span class="lewd">exposing your <<breasts>>.</span> <</if>> <<underupperstrip>> <</if>> <</if>> /* Todo: over_lower here, but I don't know what the conditions should be. Please remove this comment when it's been fixed. */ <<if $leftaction is "lower" or $rightaction is "lower">> <<if $leftaction is "lower">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "lower">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<set $worn.lower.vagina_exposed to 1>><<set $worn.lower.anus_exposed to 1>><<set $worn.lower.exposed to 2>> <<if $worn.lower.name is "naked">> You clutch the tattered remains of your clothing. <<elseif setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> <<set $worn.lower.skirt_down to 0>> You lift up your $worn.lower.name, <span class="lewd">exposing your <<undies>>.</span> <<lowerstrip>> <<else>> <<set $worn.lower.state to "thighs">> You pull down your $worn.lower.name, <span class="lewd">exposing your <<undies>>.</span> <<lowerstrip>> <</if>> <</if>> <<if $leftaction is "under_lower" or $rightaction is "under_lower">> <<if $leftaction is "under_lower">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "under_lower">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<set $worn.under_lower.anus_exposed to 1>><<set $worn.under_lower.vagina_exposed to 1>><<set $worn.under_lower.exposed to 2>> <<set $worn.under_lower.state to "thighs">> /* Strapon code is here, if needed to move to the genital-clothing section */ /*<<if playerHasStrapon()>> <<if $playerPenisSizeBackup isnot undefined>> <<set $player.penissize to $playerPenisSizeBackup>> <</if>> <</if>>*/ <<if $worn.under_lower.name is "naked">> You clutch the tattered remains of your clothing. <<elseif $worn.lower.exposed gte 2>> You pull down your $worn.under_lower.name, <span class="lewd">exposing your <<genitals>>.</span> <<underlowerstrip>> <<else>> You pull down your $worn.under_lower.name under your $worn.lower.name. <<underlowerstrip>> <</if>> <</if>> <<if $leftaction is "under_lower_to_the_side" or $rightaction is "under_lower_to_the_side">> <<if $leftaction is "under_lower_to_the_side">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "under_lower_to_the_side">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<set $worn.under_lower.anus_exposed to 1>><<set $worn.under_lower.vagina_exposed to 1>><<set $worn.under_lower.exposed to 2>> <<set $worn.under_lower.state to "totheside">> <<if $worn.under_lower.name is "naked">> You clutch the tattered remains of your clothing. <<elseif $worn.lower.exposed gte 2>> You pull your $worn.under_lower.name to the side, <span class="lewd">exposing your <<genitals>>.</span> <<else>> You pull your $worn.under_lower.name to the side under your $worn.lower.name. <</if>> <</if>> <<if $leftaction is "mask" or $rightaction is "mask">> <<if $leftaction is "mask">><<set $leftaction to 0>><<set $leftactiondefault to "rest">><</if>> <<if $rightaction is "mask">><<set $rightaction to 0>><<set $rightactiondefault to "rest">><</if>> <<if $worn.face.name is "naked">> You clutch the tattered remains of your mask. <<else>> You pull down your $worn.face.name, <span class="lewd">revealing your face.</span> <</if>> <<facestrip>> <</if>> <</widget>> <<widget "effectsspray">> <<if $leftaction is "spray" and $rightaction is "spray">> <<set $leftactiondefault to "lefthit">><<set $rightactiondefault to "righthit">><<set $leftaction to 0>><<set $rightaction to 0>> <<if $spray gte 2>> <<set _baseDamage to 400>> <<set $spraystat += 2>><<spray -2>><<set $speechspray to 1>> <<if $enemytype is "beast">> You hold the spray in both hands, and unload a full blast in the <<beasttypes>> face. It whimpers. <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> You hold the spray in both hands, and unload a full blast in the figure's face. <span class="red">It doesn't even blink.</span> <<elseif $enemyno gte 2>> You hold the spray in both hands, and unload a full blast at the <<group>>. They clutch their faces. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <<else>> You hold the spray in both hands, and unload a full blast at the assailant. <<He>> clutches <<his>> face. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <</if>> <<effectssprayFree>> <<elseif $spray gte 1>> <<set _baseDamage to 200>> <<set $spraystat += 1>><<spray -1>><<set $speechspray to 1>> <<if $enemytype is "beast">> You spray the <<beasttype>> in the face. It whimpers. <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> You spray the figure in the face. <span class="red">It doesn't even blink.</span> <<elseif $enemyno gte 2>> You spray the <<group>>. They clutch their faces. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <<else>> You spray the assailant. <<He>> clutches <<his>> face. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <</if>> <<effectssprayFree>> <<else>> <<if $enemytype is "beast">> You try to spray the <<beasttype>> in the face. Nothing comes out. <<elseif $enemyno gte 2>> You try to spray the <<group>>. Nothing comes out. <<else>> You try to spray the assailant. Nothing comes out. <</if>> <</if>> <<elseif $leftaction is "spray">> <<set $leftactiondefault to "lefthit">><<set $leftaction to 0>> <<if $spray gte 1>> <<set _baseDamage to 200>> <<set $spraystat += 1>><<spray -1>><<set $speechspray to 1>> <<if $enemytype is "beast">> You spray the <<beasttype>> in the face. It whimpers. <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> You spray the figure in the face. <span class="red">It doesn't even blink.</span> <<elseif $enemyno gte 2>> You spray the <<group>>. They clutch their faces. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <<else>> You spray the assailant. <<He>> clutches <<his>> face. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <</if>> <<effectssprayFree>> <<else>> <<if $enemytype is "beast">> You try to spray the <<beasttype>> in the face. Nothing comes out. <<elseif $enemyno gte 2>> You try to spray the <<group>>. Nothing comes out. <<else>> You try to spray the assailant. Nothing comes out. <</if>> <</if>> <<elseif $rightaction is "spray">> <<set $rightactiondefault to "righthit">><<set $rightaction to 0>> <<if $spray gte 1>> <<set _baseDamage to 200>> <<set $spraystat += 1>><<spray -1>><<set $speechspray to 1>> <<if $enemytype is "beast">> You spray the <<beasttype>> in the face. It whimpers. <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> You spray the figure in the face. <span class="red">It doesn't even blink.</span> <<elseif $enemyno gte 2>> You spray the <<group>>. They clutch their faces. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <<else>> You spray the assailant. <<He>> clutches <<his>> face. <<if !$npc.includes("Eden") and !$npc.includes("Morgan") and !$npc.includes("Kylar") and !$abomination and !["island"].includes($location)>> <<ggcrime "assault">><<crimeUp 500 "assault">> <</if>> <</if>> <<effectssprayFree>> <<else>> <<if $enemytype is "beast">> You try to spray the <<beasttype>> in the face. Nothing comes out. <<elseif $enemyno gte 2>> You try to spray the <<group>>. Nothing comes out. <<else>> You try to spray the assailant. Nothing comes out. <</if>> <</if>> <</if>> <<if _baseDamage>> <<set _totalDamage to 0>> <<set _npctodefeat to []>> <<for _npctodamage to 0; _npctodamage lt $enemynomax; _npctodamage++>> <<if $NPCList[_npctodamage].active is "active" and $NPCList[_npctodamage].stance isnot "defeated" and (!$fightTargets or $fightTargets.includes(_npctodamage))>> <<set _enemydivide to $fightTargets ? $enemyno-$fightTargets.length : $enemyno>> /* Divide damage by all current active enemies. */ <<set _thedamage to _baseDamage/_enemydivide>> <<if $NPCList[_npctodamage].fullDescription is "Ivory Wraith">> <<set _thedamage to (_thedamage / 4)>> <</if>> <<set $NPCList[_npctodamage].health -= _thedamage>> <<set _totalDamage += _thedamage>> <<if $enemyno gte 2 and $NPCList[_npctodamage].health lte 0>> <<set _npctodefeat.push(_npctodamage)>> <</if>> <</if>> <</for>> <<for $_defeatcontroller to 0; $_defeatcontroller lt _npctodefeat.length; $_defeatcontroller++>> <<if $enemyno gte 2>> <<defeatnpc _npctodefeat[$_defeatcontroller]>> <</if>> <</for>> <<set $enemyhealth -= _totalDamage>> <</if>> <</widget>> <<widget "effectssprayFree">><<silently>> <<if $prof_spray_message>> <<set $_text_output to "Your spray was accurate. You didn't need to use a full cartridge, saving ammo.">> <<unset $prof_spray_message>> <</if>> <</silently>><<if $_text_output>><span class="green"><<print $_text_output>></span><</if>> <</widget>> <<widget "effectssteal">> <<if $leftaction is "steal" and $rightaction is "steal" and $lefttarget is $righttarget>> <<set $leftaction to 0>><<set $rightaction to 0>> <<set $leftactiondefault to "steal">><<set $rightactiondefault to "steal">> <<if $easySteal isnot 1>><<set $skulduggerydifficulty += 400>><</if>><<skulduggerycheck>> <<unset $stealstateleft>><<unset $stealstateright>> <<personselect $lefttarget>> <<if $skulduggerysuccess is 1>> <<set $stealtarget += $lefttarget>><<set $stealdifficulty += 0.2>> You rummage through the <<persons>> <<wallet $lefttarget>>. <<encountersteal>> <<set $leftactiondefault to "rest">><<set $rightactiondefault to "rest">> <<else>> <<brat 30 $lefttarget>><<set $speechsteal to 1>> You rummage inside the <<persons>> <<wallet $lefttarget>>. <<He>> notices and shifts <<his>> valuables away from your hands. <</if>> <</if>> <<if $leftaction is "steal">> <<set $leftactiondefault to "steal">><<set $leftaction to 0>><<skulduggerycheck>> <<personselect $lefttarget>> <<if $skulduggerysuccess is 1>> <<if $stealstateleft is undefined>> <<set $stealstateleft to 0>> You run your hand over the <<persons>> skin, until it rests on <<his>> <<wallet $lefttarget>>. <<elseif $stealstateleft is 0>> <<set $stealstateleft to 1>> You open the <<persons>> <<wallet $lefttarget>>. <<elseif $stealstateleft is 1>> <<set $stealstateleft to 2>> You rummage through the <<persons>> <<wallet $lefttarget>>. <<else>> <<unset $stealstateleft>><<set $stealtarget += $lefttarget>><<set $stealdifficulty += 0.2>> You sneak your hand into the <<persons>> <<wallet $lefttarget>>. <<encountersteal>><<set $leftactiondefault to "rest">> <</if>> <<else>> <<brat 30 $lefttarget>><<set $speechsteal to 1>> <<if $stealstateleft is undefined>> You run your hand over the <<persons>> skin, until it rests on <<his>> <<wallet $lefttarget>>. <<He>> isn't fooled. <<He>> shifts <<his>> valuables away from you. <<elseif $stealstateleft is 0>> You try to open the <<persons>> <<wallet $lefttarget>>. <<He>> notices and shifts <<his>> valuables away. <<elseif $stealstateleft is 1>> You rummage through the <<persons>> <<wallet $lefttarget>>. <<He>> notices and shifts <<his>> valuables away. <<else>> You sneak your hand into the <<persons>> <<wallet $lefttarget>>. <<He>> notices and shifts <<his>> valuables away. <</if>> <<unset $stealstateleft>> <</if>> <</if>> <<if $rightaction is "steal">> <<set $rightaction to 0>><<set $rightactiondefault to "steal">><<skulduggerycheck>> <<personselect $righttarget>> <<if $skulduggerysuccess is 1>> <<if $stealstateright is undefined>> <<set $stealstateright to 0>> You run your hand over the <<persons>> skin, until it rests on <<his>> <<wallet $righttarget>>. <<elseif $stealstateright is 0>> <<set $stealstateright to 1>> You open the <<persons>> <<wallet $righttarget>>. <<elseif $stealstateright is 1>> <<set $stealstateright to 2>> You rummage through the <<persons>> <<wallet $righttarget>>. <<else>> <<unset $stealstateright>><<set $stealtarget += $righttarget>><<set $stealdifficulty += 0.2>> You sneak your hand into the <<persons>> <<wallet $righttarget>>. <<encountersteal>><<set $rightactiondefault to "rest">> <</if>> <<else>> <<brat 30 $righttarget>><<set $speechsteal to 1>> <<if $stealstateright is undefined>> You run your hand over the <<persons>> skin, until it rests on <<his>> <<wallet $righttarget>>. <<He>> isn't fooled. <<He>> shifts <<his>> valuables away from you. <<elseif $stealstateright is 0>> You try to open the <<persons>> <