diff --git a/game/00-framework-tools/03-Patcher/DoLWidget.js b/game/00-framework-tools/03-Patcher/DoLWidget.js index d011b7cff2aa3b121aba3cdb20ca1122f6e48308..0bcb30874936f1129ddd7f050574125ec2b060b6 100644 --- a/game/00-framework-tools/03-Patcher/DoLWidget.js +++ b/game/00-framework-tools/03-Patcher/DoLWidget.js @@ -89,7 +89,7 @@ Macro.add('widget', { delete State.variables[key] }) } else if (magicals.length > 0) { - console.warn(`Found variables: ${JSON.stringify(magicals)} declared in main`) + console.warn(`Found variables: ${JSON.stringify(magicals)} declared in :: ${State.passage}`) } // End custom code diff --git a/game/03-JavaScript/ingame.js b/game/03-JavaScript/ingame.js index d94f7111466b68dac1b5a82c6120ced83e12ec65..00bcd1aef634f363164129cae717dfecb8770017 100644 --- a/game/03-JavaScript/ingame.js +++ b/game/03-JavaScript/ingame.js @@ -886,6 +886,11 @@ window.DefaultActions = { } } +function selectWardrobe(targetLocation = V.wardrobe_location) { + return ((!targetLocation || targetLocation === "wardrobe" || !V.wardrobes[targetLocation]) ? V.wardrobe : V.wardrobes[targetLocation]); +} +window.selectWardrobe = selectWardrobe; + window.transferClothing = function(slot, index, newWardrobe){ let oldWardrobeObject; if(V.wardrobe_location === "wardrobe"){ @@ -970,7 +975,7 @@ window.clothesDataTrimmer = function(item){ }); } -window.clothesReturnLocation = function(item, type){ +function clothesReturnLocation(item, type){ if(!V.multipleWardrobes) return "wardrobe"; let isolated = ["asylum","prison"]; let lastTaken = item.lastTaken; @@ -981,40 +986,53 @@ window.clothesReturnLocation = function(item, type){ } switch(type){ case "rebuy": - switch(V.location){ - case "asylum": - if(item.type.includes("asylum")){ - return "asylum"; - } - if(!isolated.includes(lastTaken)){ - return lastTaken; - } - case "prison": - if(item.type.includes("prison")){ - return "prison"; - } - if(!isolated.includes(lastTaken)){ - return lastTaken; - } - default: - if(!isolated.includes(lastTaken)){ - return lastTaken; - } - } + if (isolated.includes(V.location) && item.type.includes(V.location)) return V.location; + break; default: - switch(V.location){ - case "asylum": - return "asylum"; - case "prison": - return "prison"; - default: - if(!isolated.includes(lastTaken)){ - return lastTaken; - } - } + if (isolated.includes(V.location)) return V.location; } + if (!isolated.includes(lastTaken)) return lastTaken; return "wardrobe"; } +window.clothesReturnLocation = clothesReturnLocation; + +function resetClothingState(slot) { + if (!slot || slot === "genitals") return; + const setupItem = setup.clothes[slot][clothesIndex(slot,V.worn[slot])]; + // Overwrite the following properties of $worn[slot], IF the corresponding properties are defined in the setupItem. + // Note that no single item actually has ALL of these properties; It only changes the properties that DO exist on the item. + V.worn[slot] = { + ...V.worn[slot], + ...Object.fromEntries(Object.entries({ + state: setupItem.state_base, + state_top: setupItem.state_top_base, + exposed: setupItem.exposed_base, + skirt_down: setupItem.skirt_down, + vagina_exposed: setupItem.vagina_exposed_base, + anus_exposed: setupItem.anus_exposed_base, + }).filter(([_,p]) => p != undefined)) + }; +} +window.resetClothingState = resetClothingState; + +function isConnectedToHood(slot) { + // Note: this function currently only works on hoods in the "head" slot, NOT the "over_head" slot. + + // Return false if slot is undefined or not a valid clothing category + if (!slot || !V.worn[slot]) return false; + // Return true if this item IS a hood + if (V.worn[slot].hood) return true; + + // Use the primary clothing slot for the next check if this item is connected to an outfit (and is not the primary item) + if (V.worn[slot].outfitSecondary && V.worn[slot].outfitSecondary[1] !== "broken"){ + slot = V.worn[slot].outfitSecondary[0]; + } + if (V.worn[slot].outfitPrimary && V.worn[slot].outfitPrimary.head && V.worn[slot].outfitPrimary.head !== "broken" && V.worn.head.hood){ + return true; + } + return false; +} +window.isConnectedToHood = isConnectedToHood; //the 'modder' variable is specifically for modders name, should be kept as a short string window.clothesIndex = function(slot, itemToIndex) { diff --git a/game/base-clothing/clothing-sets.twee b/game/base-clothing/clothing-sets.twee index e46323bb2ca9377229e182038a5de760da5b8e26..5180baead7d28465e54dcc3e02d23acfe5d17d7f 100644 --- a/game/base-clothing/clothing-sets.twee +++ b/game/base-clothing/clothing-sets.twee @@ -1,113 +1,119 @@ :: Widgets Outfits [widget] <<widget "listoutfits">> -<label><<radiobutton "$delete_outfit" "none" checked>> Wear</label> | <label><<radiobutton "$delete_outfit" 1>> Delete</label> | <label><<radiobutton "$delete_outfit" 2>> Overwrite</label> | <label class="no-numberify"><<link "Edit">><<overlayReplace "outfitEditor">><</link>></label> -<br> - -<<for _i to 0; _i lt $outfit.length; _i++>> - <<if $outfit[_i].location and $outfit[_i].location isnot $wardrobe_location>> - <<continue>> - <</if>> - <div class = "wardrobe-action"> - <<capture _i>> - <<link `$outfit[_i].name + ($outfit[_i].colors is false? "" : " [C]") + ($outfit[_i].location is undefined ? "" : " [L]")`>> - <<set $wear_outfit = _i>> - <<updatewardrobe "outfits">> - <</link>> | + <label><<radiobutton "$delete_outfit" "none" checked>> Wear</label> | + <label><<radiobutton "$delete_outfit" 1>> Delete</label> | + <label><<radiobutton "$delete_outfit" 2>> Overwrite</label> | + <label class="no-numberify"><<link "Edit">><<overlayReplace "outfitEditor">><</link>></label> + <br> + + <!-- List the currently saved outfits --> + <<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>> + <div class = "wardrobe-action"> + <<link _outfitname>><<set $wear_outfit to _index>><<updatewardrobe "outfits">><</link>> | + </div> <</capture>> - </div> -<</for>> + <</for>> <</widget>> <<widget "listoutfitsPassage">> -<<set $wardrobe_location to _args[0]>> -<<wardrobeSelection true>> -<<for _i to 0; _i lt $outfit.length; _i++>> - <<if $outfit[_i].location and $outfit[_i].location isnot $wardrobe_location>> - <<continue>> - <</if>> - <<if !$outfit[_i].type.includes("swim") and !$outfit[_i].type.includes("sleep")>> - <<print '<<link [["Wear "+$outfit[_i].name+($outfit[_i].colors is false? "" : " [C]")|$passage]]>><<set $eventskip to 1>><<set $wear_outfit to ' + _i + '>><</link>>'>> - <br> - <</if>> -<</for>> + <<set $wardrobe_location to _args[0]>> + <<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>> + <<set _outfitname to $_outfit.name + ($_outfit.colors is false ? "" : " [C]")>> + <<link [["Wear "+_outfitname|$passage]]>><<set $eventskip to 1>><<set $wear_outfit to _index>><</link>> + <br> + <</capture>> + <</for>> <</widget>> <<widget "listsleepoutfits">> -<<switch _args[0]>> - <<case "Farm Bed">> - <<set _passage to _args[0]>> - <<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">> - <<default>> - <<set _passage to "Bed">> - <<set $wardrobe_location to "wardrobe">> - <<set $storeLocation to "bed">> -<</switch>> -<<wardrobeSelection true>> -<<if $alwaysSleepNaked isnot true>> - <<for _i to 0; _i lt $outfit.length; _i++>> - <<if $outfit[_i].type.includes("sleep")>> - <<if _passage is "Bed">> - <<furnitureicon _bed.iconFile>> - <<else>> - <<bedicon>> + <<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">> + <<default>> + <<set _passage to "Bed">> + <<set $wardrobe_location to "wardrobe">> + <<set $storeLocation to "bed">> + <</switch>> + <<wardrobeSelection true>> + <<if $alwaysSleepNaked isnot true>> + <<for _index, $_outfit range $outfit>> + <<if $_outfit.type.includes("sleep")>> + <<if _passage is "Bed">> + <<furnitureicon _bed.iconFile>> + <<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>> - <<capture _i>> - <<set _outfitname to $outfit[_i].name + ($outfit[_i].colors is false? "" : " [C]")>> - <<link [["Wear "+_outfitname+" and climb in bed"|_passage]]>><<set $wear_outfit to _i>><<saveTempHairStyle>><</link>> - <</capture>> + <</for>> + <<else>> + <<if $possessed>> + <span class="red">The slime in your head is silent.</span> + <br> + <<else>> + <span class="red">The slime is not allowing you to sleep with anything on.</span> <br> <</if>> - <</for>> -<<else>> - <<if $possessed>> - <span class="red">The slime in your head is silent.</span> - <br> - <<else>> - <span class="red">The slime is not allowing you to sleep with anything on.</span> - <br> <</if>> -<</if>> <</widget>> <<widget "listswimoutfits">> -<<set $wardrobe_location to _args[0]>> -<<wardrobeSelection true>> -<<for _i to 0; _i lt $outfit.length; _i++>> - <<if $outfit[_i].location and $outfit[_i].location isnot $wardrobe_location>> - <<continue>> - <</if>> - <<if $outfit[_i].type.includes("swim")>> - <<print '<<link [["Wear "+$outfit[_i].name+($outfit[_i].colors is false? "" : " [C]")|$passage]]>><<set $eventskip to 1>><<set $wear_outfit to ' + _i + '>><<set $storeLocation to "'+_args[0]+'">><</link>>'>> - <br> - <</if>> -<</for>> + <<set $wardrobe_location to _args[0]>> + <<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>> + <<set _outfitname to $_outfit.name + ($_outfit.colors is false ? "" : " [C]")>> + <<link [["Wear "+_outfitname|$passage]]>><<set $eventskip to 1>><<set $wear_outfit to _index>><<set $storeLocation to _args[0]>><</link>> + <br> + <</capture>> + <</for>> <</widget>> <<widget "radiooutfits">> -<<for _i to 0; _i lt $outfit.length; _i++>> - <<if $outfit[_i].location and $outfit[_i].location isnot $wardrobe_location>> - <<continue>> - <</if>> - <label><<print 'Wear $outfit[_i].name <<radiobutton "$wear_outfit" "' + _i + '">>'>></label> | -<</for>> -<label>Dress like you were <<radiobutton "$wear_outfit" "clotheson" checked>></label> + <<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>> + <<if $delete_outfit is 1 and $wear_outfit isnot "none">> + <<set $outfit.deleteAt($wear_outfit)>> + <<set $wear_outfit to "none">> + <</if>> <</widget>> <<widget "saveTempHairStyle">> @@ -115,374 +121,348 @@ <</widget>> <<widget "loadTempHairStyle">> -<<if $tempSavedHairStyles>> - <<set $hairtype to $tempSavedHairStyles['hairtype']>> - <<set $fringetype to $tempSavedHairStyles['fringetype']>> - <<set $hairposition to $tempSavedHairStyles['hairposition']>> - <<unset $tempSavedHairStyles>> -<</if>> + <<if $tempSavedHairStyles>> + <<set $hairtype to $tempSavedHairStyles['hairtype']>> + <<set $fringetype to $tempSavedHairStyles['fringetype']>> + <<set $hairposition to $tempSavedHairStyles['hairposition']>> + <<unset $tempSavedHairStyles>> + <</if>> <</widget>> <<widget "wearoutfit">> -<<if $wardrobe_location is "wardrobe" or $wardrobes[$wardrobe_location] is undefined>> - <<set _selectedWardrobe to $wardrobe>> -<<else>> - <<set _selectedWardrobe to $wardrobes[$wardrobe_location]>> -<</if>> -<<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 ["over_upper","over_lower","upper", "lower", "under_upper", "under_lower","over_head","head", "face", "neck", "hands", "legs", "feet"]>> - <<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, "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, "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, "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 _i to 0; _i lt _equip.length; _i++>> - /*Skip slots that have been equipped with*/ - <<if _equipSkip[_equip[_i]] is true>> - <<continue>> - <</if>> - /*Skip slots that have not been defined*/ - <<if $outfit[$wear_outfit][_equip[_i]] is undefined>> - <<continue>> - <</if>> - - /*Check for items that are cursed*/ - <<unset _preventItemEquip>> - <<if $worn[_equip[_i]].cursed is 1>> - <<set _preventItemEquip to true>> - <</if>> - <<set _outfitPrimaryOutfit to $worn[_equip[_i]].outfitPrimary>> - <<if _outfitPrimaryOutfit isnot undefined>> - <<for _labelOutfit, _valueOutfit range _outfitPrimaryOutfit>> - <<if $worn[_labelOutfit].cursed is 1>> - <<set _preventItemEquip to true>> - <</if>> - <</for>> - <</if>> + <<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 ["over_upper","over_lower","upper", "lower", "under_upper", "under_lower","over_head","head", "face", "neck", "hands", "legs", "feet"]>> + <<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, "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, "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, "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 $_storeLocation to ($storeLocation ? $storeLocation : $wardrobe_location)>> + <<set $_incomingItemName to $outfit[$wear_outfit][$_slot]>> + /*Skip slots that have not been defined*/ + <<if $_incomingItemName is undefined>> + <<continue>> + <</if>> - <<if _preventItemEquip is true>> - <<if $outfit[$wear_outfit][_equip[_i]] is "naked">> - <<set _notEquipped[_equip[_i]] to {"name": setup.clothes[_equip[_i]][clothesIndex(_equip[_i],$worn[_equip[_i]])].name_cap, "reason": "cursed unequip"}>> - <<else>> - <<set _notEquipped[_equip[_i]] to {"name": $outfit[$wear_outfit][_equip[_i]], "reason": "cursed slot"}>> + /*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.values($worn[$_slot].outfitPrimary).some(item => item.cursed is 1)>> <</if>> - <<else>> - <<if $outfit[$wear_outfit][_equip[_i]] is "naked">> - <<generalUndress $_storeLocation _equip[_i]>> - <<elseif _towels.includes($outfit[$wear_outfit][_equip[_i]])>> - <<generalUndress $_storeLocation _equip[_i]>> - <<if $worn[_equip[_i]].name is "naked">> - <<switch $outfit[$wear_outfit][_equip[_i]]>> - <<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>> + + <<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>> - <<set _foundEquip to null>><<set _lastResort to null>><<unset _outFitPieces>> - <<for _j to 0; _j lt _selectedWardrobe[_equip[_i]].length; _j++>> - <<if $outfit[$wear_outfit][_equip[_i]] is _selectedWardrobe[_equip[_i]][_j].name>> + <<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>> + <<for $_equipIndex, $_wardrobeItem range _selectedWardrobe[$_slot]>> + <<if $_incomingItemName isnot $_wardrobeItem.name>> + <<continue>> + <</if>> /*Check for saved colors in clothing set*/ - <<if $outfit[$wear_outfit].colors isnot false and $outfit[$wear_outfit].colors isnot undefined>> - <<if $outfit[$wear_outfit].colors[_equip[_i]][0] isnot _selectedWardrobe[_equip[_i]][_j].colour or $outfit[$wear_outfit].colors[_equip[_i]][1] isnot _selectedWardrobe[_equip[_i]][_j].accessory_colour>> + <<set $_outfitColors to $outfit[$wear_outfit].colors>> + <<if $_outfitColors>> + <<if $_outfitColors[$_slot][0] isnot $_wardrobeItem.colour or $_outfitColors[$_slot][1] isnot $_wardrobeItem.accessory_colour>> <<continue>> <</if>> - <<if _selectedWardrobe[_equip[_i]][_j].colour is "custom">> - <<if _selectedWardrobe[_equip[_i]][_j].colourCustom isnot undefined or $outfit[$wear_outfit].colors[_equip[_i]+"custom"][0] isnot undefined>> - <<if _selectedWardrobe[_equip[_i]][_j].colourCustom isnot $outfit[$wear_outfit].colors[_equip[_i]+"custom"][0]>> - <<continue>> - <</if>> - <</if>> + <<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 _selectedWardrobe[_equip[_i]][_j].accessory_colour is "custom">> - <<if _selectedWardrobe[_equip[_i]][_j].colourCustom isnot undefined or $outfit[$wear_outfit].colors[_equip[_i]+"custom"][1] isnot undefined>> - <<if _selectedWardrobe[_equip[_i]][_j].accessory_colourCustom isnot $outfit[$wear_outfit].colors[_equip[_i]+"custom"][1]>> - <<continue>> - <</if>> - <</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 slime corruption*/ - <<if _corruptionEquipSkip.includes(_equip[_i])>> - <<if $corruption_slime gte 80 and currentSkillValue('willpower') lt 800 and _selectedWardrobe[_equip[_i]][_j].reveal lt 500 and !_selectedWardrobe[_equip[_i]][_j].type.includesAny("school", "event")>> - <<set _notEquipped[_equip[_i]] to {"name": $outfit[$wear_outfit][_equip[_i]], "reason": "corruption_slime_deny"}>> + <<if _corruptionEquipSkip.includes($_slot)>> + <<if $corruption_slime gte 80 and currentSkillValue('willpower') lt 800 and $_wardrobeItem.reveal lt 500 and !$_wardrobeItem.type.includesAny("school", "event")>> + <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "corruption_slime_deny"}>> <<break>> <</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*/ - <<unset _outfitPrimaryWearOutfit>> <<set _damage to 0>> - <<set _outfitPrimaryWearOutfit to _selectedWardrobe[_equip[_i]][_j].outfitPrimary>> - <<if _outfitPrimaryWearOutfit isnot undefined>> + <<if $_wardrobeItem.outfitPrimary isnot undefined>> + <<set _outfitPrimaryWearOutfit to $_wardrobeItem.outfitPrimary>> /*Check for damaged parts*/ - <<for _labelWO, _valueWO range _outfitPrimaryWearOutfit>> - <<if _valueWO is "broken">> - <<set _damage += _equipDamageValue[_labelWO]>> + <<for $_outfitSlot, $_outfitPieceName range _outfitPrimaryWearOutfit>> + <<if $_outfitPieceName is "broken">> + <<set _damage += _equipDamageValue[$_outfitSlot]>> <</if>> <</for>> - <<if _lastResort is null and _damage gt 0>> - <<set _lastResort to {}>> - <<set _lastResort to { - damage: clone(_damage), - id: clone(_j) - }>> - <<elseif _damage gt 0>> - <<if _damage lt _lastResort.damage>> + <<if _damage gt 0>> + <<if _lastResort is null or _damage lt _lastResort.damage>> <<set _lastResort to { damage: clone(_damage), - id: clone(_j) + id: clone($_equipIndex) }>> <</if>> - <</if>> - <<if _damage gt 0>> <<continue>> <</if>> <</if>> <<if _damage is 0>> <<set _foundEquip to {}>> - <<set _foundEquip[_equip[_i]] to clone(_j)>> + <<set _foundEquip[$_slot] to clone($_equipIndex)>> <</if>> - <<break>> - <</if>> - <</for>> + <</for>> - /*If the main outfit has not been found, use the last resort*/ - <<if _foundEquip is null and _lastResort isnot null>> - <<if !($worn[_equip[_i]].name is $outfit[$wear_outfit][_equip[_i]] and $worn[_equip[_i]].one_piece is 1)>> - <<set _foundEquip to {}>> - <<set _foundEquip[_equip[_i]] to _lastResort.id>> + /*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>> - <</if>> - /*Ensure at this point, the main piece of clothing has been found*/ - <<if _foundEquip isnot null>> - /*Undress equip*/ - <<generalUndress $_storeLocation _equip[_i]>> - - /*Find all the outfit pieces now the main least damaged piece has been found if the clothing is part of an outfit*/ - <<unset _outfitPrimaryWearOutfit>> - <<set _outfitPrimaryWearOutfit to _selectedWardrobe[_equip[_i]][_foundEquip[_equip[_i]]].outfitPrimary>> - <<if _outfitPrimaryWearOutfit isnot undefined>> - <<for _labelWO, _valueWO range _outfitPrimaryWearOutfit>> - <<if _valueWO isnot "broken">> - <<if !_storeItemSkip[_labelWO]>> - <<generalUndress $_storeLocation _labelWO>> + /*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 $_outfitPieceName is "broken">> + <<continue>> + <</if>> + <<if !_storeItemSkip[$_outfitSlot]>> + <<generalUndress $_storeLocation $_outfitSlot>> <</if>> - <<for _k to 0; _k lt _selectedWardrobe[_labelWO].length; _k++>> - <<if _valueWO is _selectedWardrobe[_labelWO][_k].name>> - /*Skip broken pieces*/ - <<if _selectedWardrobe[_labelWO][_k].outfitSecondary[1] is "broken">> - <<continue>> - <</if>> - /*Skip items that don't have matching colours*/ - <<if _selectedWardrobe[_equip[_i]][_j].colour isnot _selectedWardrobe[_labelWO][_k].colour or _selectedWardrobe[_equip[_i]][_j].accessory_colour isnot _selectedWardrobe[_labelWO][_k].accessory_colour>> - <<continue>> - <</if>> - <<if _selectedWardrobe[_equip[_i]][_j].colour is "custom">> - <<if _selectedWardrobe[_equip[_i]][_j].colourCustom isnot undefined and _selectedWardrobe[_labelWO][_k].colourCustom isnot undefined>> - <<if _selectedWardrobe[_equip[_i]][_j].colourCustom isnot _selectedWardrobe[_labelWO][_k].colourCustom>> - <<continue>> - <</if>> - <<else>> - <<continue>> - <</if>> - <</if>> - <<if _selectedWardrobe[_equip[_i]][_j].accessory_colour is "custom">> - <<if _selectedWardrobe[_equip[_i]][_j].colourCustom isnot undefined and _selectedWardrobe[_labelWO][_k].accessory_colourCustom isnot undefined>> - <<if _selectedWardrobe[_equip[_i]][_j].accessory_colourCustom isnot _selectedWardrobe[_labelWO][_k].accessory_colourCustom>> - <<continue>> - <</if>> - <<else>> - <<continue>> - <</if>> - <</if>> - <<if _outFitPieces is undefined>> - <<set _outFitPieces to {}>> - <</if>> - <<set _foundEquip[clone(_labelWO)] to clone(_k)>> - <<set _equipSkip[_labelWO] to true>> - <<break>> + <<set $_itemFound to false>> + <<for _index, $_possiblePiece range _selectedWardrobe[$_outfitSlot]>> + <<if $_outfitPieceName isnot $_possiblePiece.name>> + <<continue>> + <</if>> + /*Skip broken pieces*/ + <<if $_possiblePiece.outfitSecondary[1] is "broken">> + <<continue>> + <</if>> + /*Skip items that don't have matching colours*/ + <<if $_foundPrimary.colour isnot $_possiblePiece.colour or $_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 _k is _selectedWardrobe[_labelWO].length - 1>> - /*None were found, error in code/save?*/ - <<set _notEquipped[_equip[_i]] to {"name": $outfit[$wear_outfit][_equip[_i]], "reason": "not found piece"}>> + <<if $_primaryAccColourIsCustom 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>> - <</for>> - <</if>> - /*Equip all the clothing items*/ - - <<for _labelWO, _valueWO range _foundEquip>> - <<set $worn[_labelWO] to clone(_selectedWardrobe[_labelWO][_valueWO])>> - <<set $worn[_labelWO].lastTaken to clone($wardrobe_location)>> - <<set _selectedWardrobe[_labelWO].deleteAt(_valueWO)>> - <<resetClothingState _labelWO>> - <</for>> - <<else>> - <<if $worn[_equip[_i]].name is $outfit[$wear_outfit][_equip[_i]]>> - <<set _notEquipped[_equip[_i]] to {"name": $outfit[$wear_outfit][_equip[_i]], "reason": "not found replacement"}>> - <<if $wardrobe_location isnot "wardrobe">> - <<set _makeTempClothing to 1>> - <<storeItem $wardrobe_location _equip[_i]>> + <<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*/ + + <<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>> <<else>> - <<set _notEquipped[_equip[_i]] to {"name": $outfit[$wear_outfit][_equip[_i]], "reason": "not found"}>> - <<if $wardrobe_location isnot "wardrobe" and $worn[_equip[_i]].name isnot "naked">> - <<set _makeTempClothing to 1>> - <<storeItem $wardrobe_location _equip[_i]>> + <<if $worn[$_slot].name is $_incomingItemName>> + <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "not found replacement"}>> + <<if $wardrobe_location isnot "wardrobe">> + <<set _makeTempClothing to 1>> + <<storeItem $wardrobe_location $_slot>> + <</if>> + <<else>> + <<set _notEquipped[$_slot] to {"name": $_incomingItemName, "reason": "not found"}>> + <<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>> - <</for>> - <<if $outfit[$wear_outfit].hairStyle>> - /*Update Hairstyle*/ - <<set $hairtype to $savedHairStyles[$outfit[$wear_outfit].hairStyle].hairtype>> - <<set $fringetype to $savedHairStyles[$outfit[$wear_outfit].hairStyle].fringetype>> - <<set $hairposition to $savedHairStyles[$outfit[$wear_outfit].hairStyle].hairposition>> <</if>> -<</if>> -<<if $wear_outfit isnot "none" and _notEquipped>> - <<set _keys to Object.keys(_notEquipped)>> - <<if _keys.length gt 0>> - <<set _resultStrings to {}>> - <<if $wardrobes[$wardrobe_location] is undefined>> - <<set _locationName to "wardrobe">> - <<else>> - <<set _locationName to $wardrobe_location>> - <</if>> - <<set _wardrobeName to $wardrobes[_locationName].name + (!$wardrobes[_locationName].name.includes("locker") ? " wardrobe" : "")>> - <<for _i to 0; _i lt _keys.length; _i++>> - <<switch _notEquipped[_keys[_i]].reason>> - <<case "not found">> - <<if _resultStrings.notFound is undefined>> - <<set _resultStrings.notFound to { - "start": "You were unable to find any ", - "end": " in your " + _wardrobeName + ".", - "count": 0, - "color": "purple" - }>> - <</if>> - <<set _resultStrings.notFound[_resultStrings.notFound.count] to _notEquipped[_keys[_i]].name>> - <<set _resultStrings.notFound.count++>> - <<case "not found replacement">> - <<if _resultStrings.notFoundReplacement is undefined>> - <<set _resultStrings.notFoundReplacement to { - "start": "You were unable to find any ", - "end": " in your " + _wardrobeName + " to replace what you're already wearing.", - "count": 0, - "color": "lewd" - }>> - <</if>> - <<set _resultStrings.notFoundReplacement[_resultStrings.notFoundReplacement.count] to _notEquipped[_keys[_i]].name>> - <<set _resultStrings.notFoundReplacement.count++>> - <<case "corruption_slime_deny">> - <<if _resultStrings.corruption_slime_deny is undefined>> - <<set _resultStrings.corruption_slime_deny to { - "start": "You were unable to equip your ", - "end": " as the slime in your ear did not permit it.", - "count": 0, - "color": "red" - }>> - <</if>> - <<set _resultStrings.corruption_slime_deny[_resultStrings.corruption_slime_deny.count] to _notEquipped[_keys[_i]].name>> - <<set _resultStrings.corruption_slime_deny.count++>> - <<case "cursed slot">> - <<if _resultStrings.cursed is undefined>> - <<set _resultStrings.cursed to { - "start": "You were unable to equip your ", - "end": " due to not being able to remove what you're already wearing.", - "count": 0, - "color": "red" - }>> - <</if>> - <<set _resultStrings.cursed[_resultStrings.cursed.count] to _notEquipped[_keys[_i]].name>> - <<set _resultStrings.cursed.count++>> - <<case "cursed unequip">> - <<if _resultStrings.cursedUnequip is undefined>> - <<set _resultStrings.cursedUnequip to { - "start": "You were unable to unequip your ", - "end": " due to not being able to remove it on your own.", - "count": 0, - "color": "red" - }>> - <</if>> - <<set _resultStrings.cursedUnequip[_resultStrings.cursedUnequip.count] to _notEquipped[_keys[_i]].name>> - <<set _resultStrings.cursedUnequip.count++>> - <<case "not found piece">> - <<if _resultStrings.notFoundPiece is undefined>> - <<set _resultStrings.notFoundPiece to { - "start": "You were unable to fully equip your ", - "end": " due to an unexpected issue (Error in save most likely). Discarding and replacing related items should deal with the issue.", - "count": 0, - "color": "red" - }>> - <</if>> - <<set _resultStrings.notFoundPiece[_resultStrings.notFoundPiece.count] to _notEquipped[_keys[_i]].name>> - <<set _resultStrings.notFoundPiece.count++>> - <</switch>> - <</for>> - <<set _keys to Object.keys(_resultStrings)>> - <<for _i to 0; _i lt _keys.length; _i++>> - <<set _string to _resultStrings[_keys[_i]].start>> - <<for _j to 0; _j lt _resultStrings[_keys[_i]].count; _j++>> - <<if _j is 0>> - <<set _string += _resultStrings[_keys[_i]][_j]>> - <<elseif _j lt _resultStrings[_keys[_i]].count - 1 and _resultStrings[_keys[_i]].count gt 2>> - <<set _string += ", " + _resultStrings[_keys[_i]][_j]>> - <<elseif _resultStrings[_keys[_i]].count gte 2>> - <<set _string += " and " + _resultStrings[_keys[_i]][_j]>> + <<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.values(_notEquipped).forEach(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 "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 "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 (_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>> + <<switch $_clothingStrings.names.length>> + <<case 1>> <<set _string += $_clothingStrings.names[0]>> + <<case 2>> <<set _string += $_clothingStrings.names[0] + $_clothingStrings.joiner + $_clothingStrings.names[1]>> + <<default>> <<set _string += $_clothingStrings.names.slice(0,-1).join(", ") + $_clothingStrings.joiner + $_clothingStrings.names.slice(-1)>> + <</switch>> + <<set _string += $_clothingStrings.end>> + <span @class="$_clothingStrings.color">_string</span> + <br> <</if>> <</for>> - <<set _string += _resultStrings[_keys[_i]].end>> - <span @class="_resultStrings[_keys[_i]].color">_string</span> - <br> - <</for>> + <</if>> <</if>> -<</if>> -<<set $wear_outfit to "none">> -<<unset $storeLocation>> + <<set $wear_outfit to "none">> + <<unset $storeLocation>> <</widget>> <<widget "overwriteoutfit">> -<<if $delete_outfit is 2 and $wear_outfit isnot "none">> - <<set _equip to ["over_head","over_upper","over_lower","upper", "lower", "under_upper", "under_lower","head", "face", "neck", "hands", "legs", "feet"]>> - <<set _outfit to $outfit[$wear_outfit]>> - <<for _i to 0; _i lt _equip.length;_i++>> - <<set _outfit[_equip[_i]] to $worn[_equip[_i]].name>> - <<if _outfit.colors isnot false and _outfit.colors isnot undefined>> - <<set _outfit.colors[_equip[_i]] to [clone($worn[_equip[_i]].colour),clone($worn[_equip[_i]].accessory_colour)]>> - <<if $worn[_equip[_i]].colour is "custom" or $worn[_equip[_i]].accessory_colour is "custom">> - <<run _outfit.colors[_equip[_i]+"custom"] to [clone($worn[_equip[_i]].colourCustom),clone($worn[_equip[_i]].accessory_colourCustom)]>> + <<if $delete_outfit is 2 and $wear_outfit isnot "none">> + <<set _equip to ["over_head","over_upper","over_lower","upper", "lower", "under_upper", "under_lower","head", "face", "neck", "hands", "legs", "feet"]>> + <<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>> - <</if>> - <</for>> - <<set $wear_outfit to "none">> -<</if>> + <</for>> + <<set $wear_outfit to "none">> + <</if>> <</widget>> <<widget "outfitEditor">> @@ -612,12 +592,12 @@ Colour Saved in Outfit: <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]>> + <<set _index to _outfitEditorFilter.outfitIndex[$_i]>> + <<if !$outfit[_index]>> <<break>> <</if>> - <div @id="'outfitItem-' + $_index" class="outfitEditorItem"> - <<outfitEditorItem $_index>> + <div @id="'outfitItem-' + _index" class="outfitEditorItem"> + <<outfitEditorItem _index>> </div> <</for>> </div> diff --git a/game/base-clothing/clothing-upper.twee b/game/base-clothing/clothing-upper.twee index ec43bb8590db02eb65f36b1d15ce63d77ae4fa34..6e46b001c3eda097428042d1be2035c0aa0128c3 100644 --- a/game/base-clothing/clothing-upper.twee +++ b/game/base-clothing/clothing-upper.twee @@ -44,7 +44,7 @@ plural - widget will output "are" if 1, and "is" if 0. eg - Your hat <<upperplur iconFile: 0, accIcon: 0, mainImage:0, - notuck: 0 + notuck: 1 }, {index: 1, diff --git a/game/base-clothing/storeActions.twee b/game/base-clothing/storeActions.twee index 5e1e89f8fb773772646a0f1797e27835acc4cf01..b79e7172a3bec51ef142d745a94937a3b277d8fb 100644 --- a/game/base-clothing/storeActions.twee +++ b/game/base-clothing/storeActions.twee @@ -4,7 +4,8 @@ <<exposure>> <<outfitChecks>> <<otherOutfitChecks>> -<<if $action_unclad_over_outfit is 1>><<set $action_unclad_over_outfit to 0>> +<<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">> @@ -20,7 +21,8 @@ <<overupperundress _temp_strip>> <</if>> -<<if $action_unclad_over_upper is 1>><<set $action_unclad_over_upper to 0>> +<<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">> @@ -36,7 +38,8 @@ <<overupperundress _temp_strip>> <</if>> -<<if $action_unclad_over_lower is 1>><<set $action_unclad_over_lower to 0>> +<<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">> @@ -52,7 +55,8 @@ <<overlowerundress _temp_strip>> <</if>> -<<if $action_unclad_outfit is 1>><<set $action_unclad_outfit to 0>> +<<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> @@ -66,7 +70,8 @@ <<upperundress _temp_strip>> <</if>> -<<if $action_unclad_upper is 1>><<set $action_unclad_upper to 0>> +<<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> @@ -80,7 +85,8 @@ <<upperundress _temp_strip>> <</if>> -<<if $action_unclad_lower is 1>><<set $action_unclad_lower to 0>> +<<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> @@ -94,7 +100,8 @@ <<lowerundress _temp_strip>> <</if>> -<<if $action_unclad_under_outfit is 1>><<set $action_unclad_under_outfit to 0>> +<<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> @@ -108,7 +115,8 @@ <<underupperundress _temp_strip>><<underlowerundress _temp_strip>> <</if>> -<<if $action_unclad_under_upper is 1>><<set $action_unclad_under_upper to 0>> +<<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> @@ -122,7 +130,8 @@ <<underupperundress _temp_strip>> <</if>> -<<if $action_unclad_under_lower is 1>><<set $action_unclad_under_lower to 0>> +<<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> @@ -136,7 +145,8 @@ <<underlowerundress _temp_strip>> <</if>> -<<if $action_unclad_legs is 1>><<set $action_unclad_legs to 0>> +<<if $action_unclad_legs is 1>> + <<unset $action_unclad_legs>> <<if _temp_strip is "wolfcave">> You remove your $worn.legs.name. <br> @@ -150,7 +160,8 @@ <<legsundress _temp_strip>> <</if>> -<<if $action_unclad_feet is 1>><<set $action_unclad_feet to 0>> +<<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> @@ -164,7 +175,8 @@ <<feetundress _temp_strip>> <</if>> -<<if $action_unclad_neck is 1>><<set $action_unclad_neck to 0>> +<<if $action_unclad_neck is 1>> + <<unset $action_unclad_neck>> <<if _temp_strip is "wolfcave">> You remove your $worn.neck.name. <br> @@ -178,7 +190,8 @@ <<neckundress _temp_strip>> <</if>> -<<if $action_unclad_over_head is 1>><<set $action_unclad_over_head to 0>> +<<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> @@ -192,7 +205,8 @@ <<overheadundress _temp_strip>> <</if>> -<<if $action_unclad_head is 1>><<set $action_unclad_head to 0>> +<<if $action_unclad_head is 1>> + <<unset $action_unclad_head>> <<if _temp_strip is "wolfcave">> You remove your $worn.head.name. <br> @@ -206,7 +220,8 @@ <<headundress _temp_strip>> <</if>> -<<if $action_unclad_face is 1>><<set $action_unclad_face to 0>> +<<if $action_unclad_face is 1>> + <<unset $action_unclad_face>> <<if _temp_strip is "wolfcave">> You remove your $worn.face.name. <br> @@ -220,7 +235,8 @@ <<faceundress _temp_strip>> <</if>> -<<if $action_unclad_hands is 1>><<set $action_unclad_hands to 0>> +<<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> diff --git a/game/base-clothing/wardrobes.twee b/game/base-clothing/wardrobes.twee index e5debd440a8613a8cb9fec0882e82e92a95f86f3..c2b96cb5983cfce4c6f7d5ba83e7cecfedc0da56 100644 --- a/game/base-clothing/wardrobes.twee +++ b/game/base-clothing/wardrobes.twee @@ -1,6 +1,7 @@ :: Widgets Wardrobe [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 occured, please report. The default wardrobe will be shown in place of the intended wardrobe.</span> <br> @@ -11,12 +12,7 @@ <br><br> <<wardrobeSelection true>> <</if>> -<<if $wardrobe_location is "wardrobe">> - <<set _selectedWardrobe to $wardrobe>> -<<else>> - <<set _selectedWardrobe to $wardrobes[$wardrobe_location]>> -<</if>> - +<<set _selectedWardrobe to selectWardrobe()>> <<if $runWardrobeSanityChecker is true>> <<wardrobeSanityCheck>> <<set $runWardrobeSanityChecker to false>> @@ -31,7 +27,7 @@ <span class="gold">You place the clothes you recently stole from the adult shop in your wardrobe.</span> <br> <</if>> -<<if $wear is "strip">> +<<if _wearAction is "strip">> You remove your clothing. <br><br> <<undress $wardrobe_location>> @@ -44,61 +40,36 @@ <<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, "legs":false, "feet":false, "genitals":false}>> -<<for _ie to 0; _ie lt _equip.length;_ie++>> +<<set $_itemNames to []>> +<<for _slot range _equip>> <<unset _outfitPieceIds>> - <<if _equipSkip[_equip[_ie]] is true>> + <<unset _item>> + <<if _equipSkip[_slot] is true>> <<continue>> <</if>> - <<unset _wearId>><<unset _item>> - <<switch _equip[_ie]>> - <<case "over_upper">> - <<set _wearId to $wear_over_upper>> - <<case "over_lower">> - <<set _wearId to $wear_over_lower>> - <<case "upper">> - <<set _wearId to $wear_upper>> - <<case "lower">> - <<set _wearId to $wear_lower>> - <<case "under_upper">> - <<set _wearId to $wear_under_upper>> - <<case "under_lower">> - <<set _wearId to $wear_under_lower>> - <<case "over_head">> - <<set _wearId to $wear_over_head>> - <<case "head">> - <<set _wearId to $wear_head>> - <<case "face">> - <<set _wearId to $wear_face>> - <<case "neck">> - <<set _wearId to $wear_neck>> - <<case "hands">> - <<set _wearId to $wear_hands>> - <<case "legs">> - <<set _wearId to $wear_legs>> - <<case "feet">> - <<set _wearId to $wear_feet>> - <<case "genitals">> - <<set _wearId to $wear_genitals>> - <</switch>> - <<if _wearId is undefined>> + <<if !Object.keys($worn).includes(_wardrobe_list)>> <<continue>> + <<else>> + <<set _wearId to V["wear_"+_slot]>> <</if>> <<if _wearId is "none">> <<continue>> <</if>> - <<if $wardrobeOption is "wear" or _wearId is "strip" or _wearId is "towel" or _wearId is "large_towel">> + <<if $wardrobeOption is "wear" or ["strip","towel","large_towel"].includes(_wearId)>> /*Checks for cursed equip*/ <<unset _cursedPrevent>> - <<set _wornOutfitPrimary to $worn[_equip[_ie]].outfitPrimary>> - <<if $worn[_equip[_ie]].cursed is 1>> - You try to remove the <<print $worn[_equip[_ie]].name>>, but fail. <<print "<<cursedtext "+$worn[_equip[_ie]].name+">>">> + <<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>> - <<print "<<cursedtext "+$worn[_labelWW].name+">>">> + <<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>> @@ -107,15 +78,15 @@ <<continue>> <</if>> /*Strips equip and puts it in the wardrobe*/ - <<if _wearId is "strip" and $worn[_equip[_ie]].name isnot "naked">> - You remove the <<print $worn[_equip[_ie]].name>>. - <<generalUndress $wardrobe_location _equip[_ie]>> + <<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 _labelWW, _valueWW range _wornOutfitPrimary>> - <<if _valueWW isnot "broken" and $worn[_labelWW].name isnot "naked">> - You remove the <<print $worn[_labelWW].name>>. - <<generalUndress $wardrobe_location _labelWW>> + <<for $_outfitPieceSlot, $_outfitPieceName range _wornOutfitPrimary>> + <<if $_outfitPieceName isnot "broken" and $worn[$_outfitPieceSlot].name isnot "naked">> + You remove the <<print $worn[$_outfitPieceSlot].name>>. + <<generalUndress $wardrobe_location $_outfitPieceSlot>> <</if>> <</for>> <</if>> @@ -123,10 +94,10 @@ <</if>> <<unset _wornOutfitPrimary>> /*Strips equip, puts it in the wardrobe and equips a towl*/ - <<if _wearId is "towel" and _towelCheck.includes(_equip[_ie])>> - <<generalUndress $wardrobe_location _equip[_ie]>> - <<set $worn[_equip[_ie]] to clone(setup.clothes[_equip[_ie]][3])>><<set $worn[_equip[_ie]].colour to clone($worn[_equip[_ie]].colour_options.random())>> - <<if _equip[_ie] is "upper">> + <<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. @@ -134,7 +105,7 @@ <br><br> <<continue>> <</if>> - <<if _wearId is "large_towel" and _equip[_ie] is "upper">> + <<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)>> @@ -145,10 +116,12 @@ <</if>> /*Find the item to equip*/ <<if _wearId gte 0>> - <<set _item to _selectedWardrobe[_equip[_ie]][_wearId]>> + <<set _item to _selectedWardrobe[_slot][_wearId]>> + <<else>> + <<continue>> <</if>> /*Prevent equip when the ear slime doesn't allow it*/ - <<if _wearId gte 0 and _slimePrevent.includes(_equip[_ie]) and $corruption_slime gte 80 and $wardrobeOption is "wear">> + <<if _slimePrevent.includes(_slot) and $corruption_slime gte 80 and $wardrobeOption is "wear">> <<if currentSkillValue('willpower') lt 800 and _item.reveal lt 500 and !_item.type.includesAny("school", "event")>> <span class="red">You were unable to equip your _item.name as the slime in your ear did not permit it.</span> <br> @@ -156,145 +129,123 @@ <</if>> <</if>> /*Finds any outfit pieces and records the Ids*/ - <<set _outfitPrimary to _item.outfitPrimary>> - <<if _outfitPrimary isnot undefined>> - <<set _outfitPieceIds to {}>> - <<for _labelWW, _valueWW range _outfitPrimary>> - <<if _valueWW isnot "broken">> - <<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_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)>> - <<set _equipSkip[_labelWW] to true>> - <<break>> - <</if>> - <</if>> - <</for>> + <<set _outfitPieceIds to {}>> + <<if _item.outfitPrimary isnot undefined>> + <<for $_outfitPieceSlot, $_outfitPieceName range _item.outfitPrimary>> + <<if $_outfitPieceName is "broken">> + <<continue>> <</if>> + <<for $_outfitPieceId, $_wardrobeItem range _selectedWardrobe[$_outfitPieceSlot]>> + <<if $_wardrobeItem.name isnot $_outfitPieceName>> + <<continue>> + <</if>> + <<if _item.colour isnot $_wardrobeItem.colour or _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_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 Object.keys(_outfitPieceIds).length is 0>> - <<unset _outfitPieceIds>> - <</if>> <</if>> - <<unset _outfitPrimary>> - <<if $wardrobeOption is "delete" and _wearId gte 0>> + <<if $wardrobeOption is "delete">> /*Delete the relating items*/ - <<if _outfitPieceIds isnot undefined>> - <<for _labelWW, _valueWW range _outfitPieceIds>> - <<set _selectedWardrobe[_labelWW].deleteAt(_valueWW)>> - <</for>> - <</if>> - You discard the <<print _selectedWardrobe[_equip[_ie]][_wearId].name>>. - <<set _selectedWardrobe[_equip[_ie]].deleteAt(_wearId)>> + <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> + <<set _selectedWardrobe[$_outfitSlot].deleteAt($_outfitId)>> + <</for>> + You discard the <<print _item.name>>. + <<set _selectedWardrobe[_slot].deleteAt(_wearId)>> <br> - <<continue>> - <</if>> - <<if $wardrobeOption is "repair" and _wearId gte 0>> + <<elseif $wardrobeOption is "repair">> + <<set _item.integrity to clothingData(_slot,_item,'integrity_max')>> + <<set $_timeSpent to 5>> /*Repair the relating items*/ - <<if _outfitPieceIds isnot undefined>> - <<for _labelWW, _valueWW range _outfitPieceIds>> - <<set _selectedWardrobe[_labelWW][_valueWW].integrity = clothingData(_labelWW,_selectedWardrobe[_labelWW][_valueWW],'integrity_max')>> - <<pass 15>> - <</for>> - <</if>> - <<set _selectedWardrobe[_equip[_ie]][_wearId].integrity = clothingData(_equip[_ie],_selectedWardrobe[_equip[_ie]][_wearId],'integrity_max')>> - <<pass 1>> - You repair the <<print _selectedWardrobe[_equip[_ie]][_wearId].name>>. + <<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> - <<continue>> - <</if>> - <<if $wardrobeOption is "seperateOutfits" and _wearId gte 0>> - <<if _outfitPieceIds isnot undefined>> - <<for _labelWW, _valueWW range _outfitPieceIds>> - <<set _selectedWardrobe[_labelWW][_valueWW].outfitSecondary[1] to "broken">> - <<set _selectedWardrobe[_labelWW][_valueWW].one_piece to "broken">> - <</for>> - <<set _selectedWardrobe[_equip[_ie]][_wearId].outfitPrimary[_labelWW] to "broken">> - <<set _selectedWardrobe[_equip[_ie]][_wearId].one_piece to "broken">> - You cut up the <<print _selectedWardrobe[_equip[_ie]][_wearId].name>>. - <<pass 10>> - <br> - <</if>> - <<continue>> - <</if>> - <<if $wardrobeOption is "transfer" and _wearId gte 0 and _wardrobeTransfer isnot $wardrobe_location and _wardrobeTransfer isnot undefined>> + <<elseif $wardrobeOption is "separateOutfits" and Object.values(_outfitPieceIds).length gt 0>> + <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> + <<set _selectedWardrobe[$_outfitSlot][$_outfitId].outfitSecondary[1] to "broken">> + <<set _selectedWardrobe[$_outfitSlot][$_outfitId].one_piece to "broken">> + <<set _item.outfitPrimary[$_outfitSlot] to "broken">> + <</for>> + <<set _item.one_piece to "broken">> + 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*/ - <<if _wardrobeTransfer is "wardrobe" or $wardrobes[_wardrobeTransfer] is undefined>> - <<set _wardrobeTransferObject to $wardrobe>> - <<else>> - <<set _wardrobeTransferObject to $wardrobes[_wardrobeTransfer]>> - <</if>> + <<set _wardrobeTransferObject to selectWardrobe(_wardrobeTransfer)>> /*Make sure there is enough space*/ - <<if _wardrobeTransferObject[_equip[_ie]].length gt _wardrobeTransferObject.space>> + <<if _wardrobeTransferObject[_slot].length gt _wardrobeTransferObject.space>> <<set _slotsFull to true>> <</if>> - <<if _outfitPieceIds isnot undefined>> - <<for _labelWW, _valueWW range _outfitPieceIds>> - <<if _wardrobeTransferObject[_labelWW].length gt _wardrobeTransferObject.space>> - <<set _slotsFull to true>> - <</if>> - <</for>> - <</if>> - + <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> + <<if _wardrobeTransferObject[$_outfitSlot].length gt _wardrobeTransferObject.space>> + <<set _slotsFull to true>> + <</if>> + <</for>> + <<if !_slotsFull>> - You transfered the <<print _selectedWardrobe[_equip[_ie]][_wearId].name>> to the <<print $wardrobes[_wardrobeTransfer].name>> storage. + You transfered the <<print _item.name>> to the <<print $wardrobes[_wardrobeTransfer].name>> storage. /*Transfer everything*/ - <<run transferClothing(_equip[_ie],_wearId,_wardrobeTransfer)>> - <<if _outfitPieceIds isnot undefined>> - <<for _labelWW, _valueWW range _outfitPieceIds>> - <<run transferClothing(_labelWW,_valueWW,_wardrobeTransfer)>> - <</for>> - <</if>> + <<run transferClothing(_slot,_wearId,_wardrobeTransfer)>> + <<for $_outfitSlot, $_outfitId range _outfitPieceIds>> + <<run transferClothing($_outfitSlot,$_outfitId,_wardrobeTransfer)>> + <</for>> <<else>> - You were unable to transfer the <<print _selectedWardrobe[_equip[_ie]][_wearId].name>> to the <<print $wardrobes[_wardrobeTransfer].name>> wardrobe due to lack of space there. + You were unable to transfer the <<print _item.name>> to the <<print $wardrobes[_wardrobeTransfer].name>> wardrobe due to lack of space there. <</if>> - <</if>> - <<if $wardrobeOption is "wear" and _wearId gte 0>> + <<elseif $wardrobeOption is "wear">> /*Equip the relating items*/ - <<generalUndress $wardrobe_location _equip[_ie]>> - <<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 clone($wardrobe_location)>> - <<set _selectedWardrobe[_labelWW].deleteAt(_valueWW)>> - <<resetClothingState _labelWW>> - <</for>> - <</if>> - <<set $worn[_equip[_ie]] to clone(_selectedWardrobe[_equip[_ie]][_wearId])>> - <<set $worn[_equip[_ie]].lastTaken to clone($wardrobe_location)>> - <<resetClothingState _equip[_ie]>> - You put on the <<print _selectedWardrobe[_equip[_ie]][_wearId].name>>. - <<set _selectedWardrobe[_equip[_ie]].deleteAt(_wearId)>> - <br><br> + <<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 $_itemNames.push(_item.name)>> + <<set _selectedWardrobe[_slot].deleteAt(_wearId)>> <</if>> <</for>> -<<if $wear is "dry">><<set $wear 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>> +<<if $wardrobeOption is "wear">> + <<if $_itemNames.length gt 2>> + You put on the <<print $_itemNames.slice(0, -1).join(", ")>> and <<print $_itemNames.slice(-1)>>. + <br><br> + <<elseif $_itemNames.length is 1>> + You put on the <<print $_itemNames[0]>>. + <br><br> + <</if>> +<</if>> +<<if _wearAction is "dry">> + <<dry>> You squeeze the water from your clothes. <<effectswater>> <br><br> <</if>> -<<set $wear to 0>> +<<unset _wearAction>> <<set $wear_over_upper to "none">> <<set $wear_over_lower to "none">> <<set $wear_upper to "none">> @@ -328,7 +279,7 @@ <<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 $wear to "dry">> + <<set _wearAction to "dry">> <<updatewardrobe>> <<if $upperwet lt 1 and $lowerwet lt 1 and $underlowerwet lt 1 and $underupperwet lt 1>> <<remove ".wardrobe-dry">> @@ -339,7 +290,7 @@ <</if>> <div class="wardrobe-action"> <<link "Strip all">> - <<set $wear to "strip">> + <<set _wearAction to "strip">> <<updatewardrobe>> <</link>> </div> | @@ -350,15 +301,16 @@ <</link>> </div> | <div class="wardrobe-action"> - <<link "Configure">><<toggleclass "#randomClothingConfigure" "hidden">><</link>> + <<link "Configure random">><<toggleclass "#randomClothingConfigure" "hidden">><</link>> </div> | <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>> - <<set _equip to ["upper", "lower", "under_upper", "under_lower","head", "face", "neck", "hands", "legs", "feet"]>> - <<for _slot range _equip>> - <label><<print '<<checkbox "$randomEquipConfigure.'+_slot+'" false true '+($randomEquipConfigure[_slot] is true ? "checked" : "")+'>>'>> <<print _slot.replace("_"," ")>></label><br> + <<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> @@ -481,9 +433,9 @@ __Clothing__ <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</label> | + <label><<radiobutton "$wardrobeOption" "repair" autocheck>> Repair (0:05 per piece)</label> | <</if>> -<label><<radiobutton "$wardrobeOption" "seperateOutfits" autocheck>> Separate Outfits</label> | +<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 {}>> @@ -492,7 +444,7 @@ __Clothing__ <<set _options[_value.name] to _label>> <</if>> <</for>> - <<listbox '_wardrobeTransfer' autoselect>> + <<listbox "_wardrobeTransfer" autoselect>> <<optionsfrom _options>> <</listbox>> | @@ -531,7 +483,7 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label> <div> <<set _savedHairStylesKeys to Object.keys($savedHairStyles)>> Hair Style: - <<listbox '_hairStyle' autoselect>> + <<listbox "_hairStyle" autoselect>> <<option "Not set" undefined>> <<optionsfrom _savedHairStylesKeys>> <</listbox>> @@ -545,269 +497,259 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label> <br> <div class="wardrobe-action"> <<link "Add current clothes as new set">> - <<script>> - V.outfit_name = document.getElementById("outfitName").value.replace(/[^a-zA-Z 0-9.!()]+/g,""); - <</script>> - <<set $outfit.push({ - 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), - 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">><<print '<<set $outfit_name to "Custom ' + $outfit.length + '">>'>><</if>> - <<set $outfit.last().name to $outfit_name>> + <<set $outfit_name to document.getElementById("outfitName").value.replace(/[^a-zA-Z 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), + 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 $outfit.last().type[0] to $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", "legs", "feet"]>> <<set _colors to {}>> - <<for _ie to 0; _ie lt _equip.length; _ie++>> - <<set _colors[_equip[_ie]] to [clone($worn[_equip[_ie]].colour),clone($worn[_equip[_ie]].accessory_colour)]>> - <<if $worn[_equip[_ie]].colour is "custom" or $worn[_equip[_ie]].accessory_colour is "custom">> - <<run _colors[_equip[_ie]+"custom"] to [clone($worn[_equip[_ie]].colourCustom),clone($worn[_equip[_ie]].accessory_colourCustom)]>> + <<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 $outfit.last().colors to clone(_colors)>> + <<set _newOutfit.colors to _colors>> <<else>> - <<set $outfit.last().colors to false>> + <<set _newOutfit.colors to false>> <</if>> <<if _saveLocation>> - <<set $outfit.last().location to $wardrobe_location>> + <<set _newOutfit.location to $wardrobe_location>> <</if>> <<if _hairStyle>> - <<set $outfit.last().hairStyle to _hairStyle>> + <<set _newOutfit.hairStyle to _hairStyle>> <</if>> + <<set $outfit.push(_newOutfit)>> <<updatewardrobe "outfits">> <</link>> </div> <</widget>> -<<widget "wardrobeintegrity">> -<<set _war_int to _args[0]>> -<<if _selectedWardrobe[_war_int][_i].integrity gt ((clothingData(_war_int,_selectedWardrobe[_war_int][_i],'integrity_max') / 10) * 9)>> -<<elseif _selectedWardrobe[_war_int][_i].integrity gt ((clothingData(_war_int,_selectedWardrobe[_war_int][_i],'integrity_max') / 10) * 5)>> -(frayed) -<<elseif _selectedWardrobe[_war_int][_i].integrity gt ((clothingData(_war_int,_selectedWardrobe[_war_int][_i],'integrity_max') / 10) * 2)>> -(torn) -<<else>> -(tattered) -<</if>> +<<widget "wardrobeintegrity">><<silently>> + <<set $_item to _args[0]>> + <<set $_integrityMax to clothingData(_args[1],$_item,'integrity_max')>> + <<if $_item.integrity gt ($_integrityMax * 9 / 10)>> + <<set $_output to "">> + <<elseif $_item.integrity gt ($_integrityMax * 5 / 10)>> + <<set $_output to "(frayed)">> + <<elseif $_item.integrity gt ($_integrityMax * 2 / 10)>> + <<set $_output to "(torn)">> + <<else>> + <<set $_output to "(tattered)">> + <</if>> +<</silently>><<print $_output>><</widget>> + +<<widget "toggleHood">> + <div class="toggleHoodLink"> + <<link `($hoodDown ? "Pull hood up" : "Pull hood down")`>> + <<set $hoodDown to +!$hoodDown>> + <<updatesidebarimg>> + <<run $(".toggleHoodLink .link-internal").html($hoodDown ? "Pull hood up" : "Pull hood down")>> + <<run Links.generateLinkNumbers($(".passage"))>> + <</link>> + </div> +<</widget>> + +<<widget "toggleUpperTuck">> + <<set _linkOption1 to _args[0] || "Untuck">> + <<set _linkOption2 to _args[1] || "Tuck in">> + <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 "wardrobeList">> -<<wardrobeClothingOptions>> -<<set _wardrobe_list to _args[0]>> -<<set _errorPrevent to false>> -<<switch _wardrobe_list>> - <<case "over_head">><<set _wear to "wear_over_head">> - <<case "head">><<set _wear to "wear_head">> - <<case "face">><<set _wear to "wear_face">> - <<case "neck">><<set _wear to "wear_neck">> - <<case "over_upper">><<set _wear to "wear_over_upper">> - <<case "over_lower">><<set _wear to "wear_over_lower">> - <<case "upper">><<set _wear to "wear_upper">> - <<case "lower">><<set _wear to "wear_lower">> - <<case "under_upper">><<set _wear to "wear_under_upper">> - <<case "under_lower">><<set _wear to "wear_under_lower">> - <<case "hands">><<set _wear to "wear_hands">> - <<case "legs">><<set _wear to "wear_legs">> - <<case "feet">><<set _wear to "wear_feet">> - <<case "genitals">><<set _wear to "wear_genitals">> - <<default>><<set _errorPrevent to true>> -<</switch>> -<<set _outfitTypes to ["upper","lower","under_upper","under_lower"]>> -<<set _loweroutfitCheck to ["lower","under_lower"]>> -<<if _errorPrevent isnot true>> - __<<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> | - <<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> | - <<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 isnot "naked">> - <<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">(_wornItem.colour)</span> + <<wardrobeClothingOptions>> + <<set _wardrobe_list to _args[0]>> + <<if !Object.keys($worn).includes(_wardrobe_list)>> + An error occured 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 ["upper","lower","under_upper","under_lower"]>> + <<set _loweroutfitCheck to ["lower","under_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> | + <<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> | + <<if _outfitTypes.includes(_wardrobe_list)>> + <div class="wardrobe-action"><a onclick="wikifier('wardrobeListReorder', V.lastWardrobeSlot, 'outfit', true);">Outfit Status</a></div> | <</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++>> + <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">(_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>> - <</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>> - <<if _wornItem.outfitSecondary isnot undefined>> - <<if _wornItem.outfitSecondary[1] is "broken">> - <span class="red">(Broken)</span> - <<else>> - <span class="gold">(Outfit)</span> + <<if _wornItem.outfitSecondary isnot undefined>> + <<if _wornItem.outfitSecondary[1] is "broken">> + <span class="red">(Broken)</span> + <<else>> + <span class="gold">(Outfit)</span> + <</if>> <</if>> - <</if>> - <<if _wornItem.integrity gt ((clothingData(_wardrobe_list,_wornItem,'integrity_max') / 10) * 9)>> - <<elseif _wornItem.integrity gt ((clothingData(_wardrobe_list,_wornItem,'integrity_max') / 10) * 5)>> - (frayed) - <<elseif _wornItem.integrity gt ((clothingData(_wardrobe_list,_wornItem,'integrity_max') / 10) * 2)>> - (torn) - <<else>> - (tattered) - <</if>> - <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>> + <<wardrobeintegrity _wornItem _wardrobe_list>> + <a onclick="document.getElementById('wardrobeItemDetails').classList.toggle('hidden')">Extra Info</a> <br> - <<warmth _wornItem.warmth>> - <br><br> - <<set _temp_choice to $worn[_wardrobe_list]>> - <<shoptraits>> - </div> - - <<if _wardrobe_list is "upper" and $worn.lower.name isnot "naked" and _wornItem.outfitPrimary is undefined and !_wornItemData.notuck>> - <<if $upperTucked>> - <<link "Untuck">> - <<set $upperTucked = 0>> - <<updatewardrobe>> - <</link>> - <<else>> - <<link "Tuck in">> - <<set $upperTucked = 1>> - <<updatewardrobe>> - <</link>> + <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> + <<warmth _wornItem.warmth>> + <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"><<toggleHood>></div> + <br> <</if>> - <br> - <</if>> - <<if (_wornItem.hood and _wornItem.outfitSecondary) or (_wornItem.outfitPrimary and Object.keys(_wornItem.outfitPrimary).some(x => $worn[x].hood))>> - <!-- If selected item is a hood or selected item has a secondary hood piece --> - <<if $hoodDown>> - <<link "Pull hood up">> - <<set $hoodDown = 0>> - <<updatewardrobe>> - <</link>> - <<else>> - <<link "Pull hood down">> - <<set $hoodDown = 1>> - <<updatewardrobe>> - <</link>> + <<if _wardrobe_list is "upper" and $worn.lower.name isnot "naked" and _wornItem.outfitPrimary is undefined and !_wornItemData.notuck>> + <div class="no-numberify"><<toggleUpperTuck>></div> + <br> <</if>> - <br> <</if>> - <<else>> - nothing <br> - <</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">> - <<continue>> - <</if>> + <<if $worn[_wardrobe_list].name isnot "naked">> + <div class="wardrobeItem wardrobe-action no-numberify"><<wearlink_norefresh "Strip" 'strip'>></div> <</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 _wardrobe_list is "upper">> + <div class="wardrobeItem wardrobe-action no-numberify"><<wearlink_norefresh "Large towel" 'large_towel'>></div> <</if>> - <<if _item.colour isnot 0>> - <span @class="_selectedWardrobe[_wardrobe_list][_i].colour">(_item.colour)</span> + <<if _wardrobe_list is "upper" or _wardrobe_list is "lower" >> + <div class="wardrobeItem wardrobe-action no-numberify"><<wearlink_norefresh "Towel" 'towel'>></div> <</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++>> + + <<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">> + <<continue>> <</if>> - <</for>> - <<if _broken is 0>> - <span class="gold">(Outfit)</span> - <<elseif _broken lt _keys.length>> - <span class="red">(Partly Broken)</span> + <</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">(_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>> + <<if _item.outfitSecondary isnot undefined>> <span class="red">(Broken)</span> <</if>> - <</if>> - <<if _item.outfitSecondary isnot undefined>> - <span class="red">(Broken)</span> - <</if>> - <<wardrobeintegrity _wardrobe_list>> | - <<reveal _item.reveal>> - </div> - <</for>> - <div style="clear:both;"></div> -<<else>> - An error occured to 'widget "wardrobeList"', please report if you did not edit the save data manually in any way. -<</if>> + <<wardrobeintegrity _item _wardrobe_list>> | + <<reveal _item.reveal>> + </div> + <</for>> + <div style="clear:both;"></div> + <</if>> -<<temperature>> + <<temperature>> <</widget>> <<widget "wearlink_norefresh">> @@ -864,6 +806,7 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label> <<default>> <<replace `'#clothingBox-' + $_slot`>><<oldWardrobeList $_slot>><</replace>> <</switch>> + <<replace '#wardrobeMinorOptions'>><<oldWardrobeMinorOptions>><</replace>> <<else>> <<replace '#oldWardrobeListDisplay'>><<oldWardrobeListDisplay>><</replace>> <</if>> @@ -874,25 +817,23 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label> <<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 --> + <<toggleHood>> + <</if>> + </div> +<</widget>> + <<widget "oldWardrobeListDisplay">> <<wardrobeClothingOptions>> -<<if $worn.lower.name isnot "naked" and $worn.upper.outfitPrimary is undefined and !setup.clothes.upper[clothesIndex('upper', $worn.upper)].notuck>> - <<if $upperTucked>> - <<link [["Untuck " + $worn.upper.name|$passage]]>><<set $upperTucked = 0>><</link>> - <<else>> - <<link [["Tuck " + $worn.upper.name + " in " + $worn.lower.name|$passage]]>><<set $upperTucked = 1>><</link>> - <</if>> - <br> -<</if>> -<<if ($worn.head.hood and $worn.head.outfitSecondary) or ($worn.upper.outfitPrimary and Object.keys($worn.upper.outfitPrimary).some(x => $worn[x].hood))>> -<!-- If head item is a hood or upper clothing has a secondary hood piece --> - <<if $hoodDown>> - <<link [["Pull the hood on your " + $worn.upper.name + " up"|$passage]]>><<set $hoodDown = 0>><</link>> - <<else>> - <<link [["Pull the hood on your " + $worn.upper.name + " down"|$passage]]>><<set $hoodDown = 1>><</link>> - <</if>> - <br> -<</if>> +<<oldWardrobeMinorOptions>> <br> <<if $debug is 1>> @@ -927,58 +868,47 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label> <</widget>> <<widget "oldWardrobeList">> -<<set _wardrobe_list to _args[0]>> -<<set _showType to _args[1]>> -<<switch _wardrobe_list>> - <<case "over_head">><<set _wear to "wear_over_head">> - <<case "head">><<set _wear to "wear_head">> - <<case "face">><<set _wear to "wear_face">> - <<case "neck">><<set _wear to "wear_neck">> - <<case "over_upper">><<set _wear to "wear_over_upper">> - <<case "over_lower">><<set _wear to "wear_over_lower">> - <<case "upper">><<set _wear to "wear_upper">> - <<case "lower">><<set _wear to "wear_lower">> - <<case "under_upper">><<set _wear to "wear_under_upper">> - <<case "under_lower">><<set _wear to "wear_under_lower">> - <<case "hands">><<set _wear to "wear_hands">> - <<case "legs">><<set _wear to "wear_legs">> - <<case "feet">><<set _wear to "wear_feet">> - <<case "feet">><<set _wear to "wear_genitals">> -<</switch>> + <<set _wardrobe_list to _args[0]>> + <<set _showType to _args[1]>> + <<if !Object.keys($worn).includes(_wardrobe_list)>> + An error occured 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">> - <<continue>> + <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">> + <<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">(_item.colour)</span> + <</if>> + <<wardrobeintegrity _item _wardrobe_list>> + </li> + <</for>> + </ul> + </div></div> <</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">(_item.colour)</span> - <</if>> - <<wardrobeintegrity _wardrobe_list>> - </li> -<</for>> -</ul> -</div></div> <</widget>> @@ -1193,42 +1123,35 @@ __<<print _wardrobe_list[0].toUpperCase() + _wardrobe_list.substring(1) + (_show <</widget>> <<widget "randomWear">> -<<set $wardrobeOption to "wear">> -<<set $_equip to []>> -<<set _equipped to []>> -<<for $_label, $_value range $randomEquipConfigure>> - <<if $_value>> - <<generalUndress $wardrobe_location $_label>> - <<run $_equip.push($_label)>> - <</if>> -<</for>> -<<for _i to 0; _i lt $_equip.length;_i++>> - <<if !_equipped.includes($_equip[_i]) and $worn[$_equip[_i]].name is "naked" and _selectedWardrobe[$_equip[_i]].length gt 0>> - <<set _ids to []>> - - <<for _j to 0; _j lt _selectedWardrobe[$_equip[_i]].length; _j++>> - <<if _selectedWardrobe[$_equip[_i]][_j].outfitSecondary is undefined>> - <<elseif _selectedWardrobe[$_equip[_i]][_j].outfitSecondary[1] isnot "broken">> - <<continue>> - <</if>> - <<run _ids.push(_j)>> - <</for>> - <<set _id to _ids.pluck()>> - <<if _id>> - <<run _equipped.pushUnique($_equip[_i])>> - <<if _selectedWardrobe[$_equip[_i]][_id].outfitPrimary isnot undefined>> - <<for $_label, $_value range _selectedWardrobe[$_equip[_i]][_id].outfitPrimary>> - <<if $_value isnot "broken">> - <<run _equipped.pushUnique($_label)>> + <<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 $_ids to _selectedWardrobe[$_slot].map((item, index) => { + if (!item.outfitSecondary or item.outfitSecondary[1] is "broken") return index; + }).filter(Boolean)>> + <<if $_ids.length gt 0>> + <<set $_id to $_ids.random()>> + <<set $_selectedItem to _selectedWardrobe[$_slot][$_id]>> + <<run _equipped.pushUnique($_slot)>> + <<if $_selectedItem.outfitPrimary isnot undefined>> + <<run Object.entries($_selectedItem.outfitPrimary).forEach((slot,value) => { + if (value !== "broken") _equipped.pushUnique(slot) + })>> <</if>> - <</for>> + <<set V["wear_" + $_slot] to $_id>> + <<unset $_id>> <</if>> - <<print `<<set $wear_` + $_equip[_i] + ` to ` + clone(_id) + `>>`>> <</if>> - <<unset _id>> - <</if>> -<</for>> -<<unset $randomWear>> + <</for>> + <<unset $randomWear>> <</widget>> <<widget "warmth_description">> @@ -1265,9 +1188,7 @@ Comfortable warmth range: <<print ($chill + 1)>> - <<print Math.trunc(($chill * <<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>> + <<capture _label>><<link [[_value.name|$passage]]>><<set $forceWardrobeLocation to _label>><</link>> |<</capture>> <</if>> <</for>> </div> @@ -1275,198 +1196,92 @@ Comfortable warmth range: <<print ($chill + 1)>> - <<print Math.trunc(($chill * <</if>> <</widget>> +<<widget "cleanupOnWardrobeExit">> + <<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>> +<</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]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> + <<link [[Close wardrobe|Bedroom]]>><<cleanupOnWardrobeExit>><</link>> <<case "Changing Room">> <<if $exposed lte 1>> - <<link [[Leave|Beach]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<link [[Leave|Beach]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! - <br><br> <</if>> <<case "Sydney Beach Changing Room">> <<if $exposed lte 1>> - <<link [[Leave|Sydney Beach Swimsuit]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<link [[Leave|Sydney Beach Swimsuit]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! - <br><br> <</if>> <<case "Sydney Beach Changing Room Leave">> <<if $exposed lte 1>> - <<link [[Leave|Sydney Beach Leave]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<link [[Leave|Sydney Beach Leave]]>><<cleanupOnWardrobeExit>><</link>> <<else>> You can't go out like this! - <br><br> <</if>> <<case "Eden Wardrobe">> - <<if $exhibitionism gte 75 or isLoveInterest("Eden")>> - <<link [[Done|Eden Cabin]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <<elseif $exhibitionism gte 55>> - <<if $exposed lte 1>> - <<link [[Done|Eden Cabin]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> + <<if isLoveInterest("Eden") or $exhibitionism gte 75 or $exposed lte 0 or ($exhibitionism gte 55 and $exposed lte 1)>> + <<link [[Done|Eden Cabin]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 0>> - <<link [[Done|Eden Cabin]]>><<pass 1>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> You can't remain undressed like this! - <br><br> - <</if>> <</if>> <<case "Eden Night Wardrobe">> - <<if $exhibitionism gte 75 or isLoveInterest("Eden")>> - <<link [[Done|Eden Cabin Bed]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <<elseif $exhibitionism gte 55>> - <<if $exposed lte 1>> - <<link [[Done|Eden Cabin Bed]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> + <<if isLoveInterest("Eden") or $exhibitionism gte 75 or $exposed lte 0 or ($exhibitionism gte 55 and $exposed lte 1)>> + <<link [[Done|Eden Cabin Bed]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 0>> - <<link [[Done|Eden Cabin Bed]]>><<pass 1>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> You can't remain undressed like this! - <br><br> - <</if>> <</if>> <<case "Asylum Wardrobe">> - <<if $exhibitionism lte 54>> - <<if $exposed lte 0>> - <<link [[Done|Asylum Cell]]>><<pass 1>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> - <<elseif $exhibitionism gte 75>> - <<link [[Done|Asylum Cell]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<if $exhibitionism gte 75 or $exposed lte 0 or ($exhibitionism gte 55 and $exposed lte 1)>> + <<link [[Done|Asylum Cell]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 1>> - <<link [[Done|Asylum Cell]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> + You can't remain undressed like this! <</if>> <<case "Farm Wardrobe">> - <<if $exhibitionism lte 54>> - <<if $exposed lte 0>> - <<link [[Done|Farm Bedroom]]>><<pass 1>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> - <<elseif $exhibitionism gte 75>> - <<link [[Done|Farm Bedroom]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<if $exhibitionism gte 75 or $exposed lte 0 or ($exhibitionism gte 55 and $exposed lte 1)>> + <<link [[Done|Farm Bedroom]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 1>> - <<link [[Done|Farm Bedroom]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> + You can't remain undressed like this! <</if>> <<case "Strip Club Wardrobe">> - <<if $exhibitionism lte 14>> - <<if $exposed lte 0>> - <<link [[Step away|Strip Club Dressing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't go out like this! - <br><br> - <</if>> - <<elseif $exhibitionism gte 55>> - <<link [[Step away|Strip Club Dressing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<if $exhibitionism gte 55 or $exposed lte 0 or ($exhibitionism gte 15 and $exposed lte 1)>> + <<link [[Step away|Strip Club Dressing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 1>> - <<link [[Step away|Strip Club Dressing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't go out like this! - <br><br> - <</if>> + You can't go out like this! <</if>> <<case "Brothel Wardrobe">> - <<if $exhibitionism lte 14>> - <<if $exposed lte 0>> - <<link [[Step away|Brothel Dressing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't go out like this! - <br><br> - <</if>> - <<elseif $exhibitionism gte 55>> - <<link [[Step away|Brothel Dressing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<if $exhibitionism gte 55 or $exposed lte 0 or ($exhibitionism gte 15 and $exposed lte 1)>> + <<link [[Step away|Brothel Dressing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 1>> - <<link [[Step away|Brothel Dressing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't go out like this! - <br><br> - <</if>> + You can't go out like this! <</if>> <<case "School Boy Wardrobe">> - <<if $exposed gte 2 and $exhibitionism lt 75>> - You can't go out like this! - <br><br> + <<if $exhibitionism gte 75 or $exposed lte 0>> + <<link [[Leave|School Boy Changing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<link [[Leave|School Boy Changing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + You can't go out like this! <</if>> <<case "School Girl Wardrobe">> - <<if $exposed gte 2 and $exhibitionism lt 75>> - You can't go out like this! - <br><br> + <<if $exhibitionism gte 75 or $exposed lte 0>> + <<link [[Leave|School Girl Changing Room]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<link [[Leave|School Girl Changing Room]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + You can't go out like this! <</if>> <<case "Farm Assault Wardrobe">> - <<if $exhibitionism lte 54>> - <<if $exposed lte 0>> - <<link [[Done|Farm Assault Intro]]>><<pass 1>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> - <<elseif $exhibitionism gte 75>> - <<link [[Done|Farm Assault Intro]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> + <<if $exhibitionism gte 75 or $exposed lte 0 or ($exhibitionism gte 55 and $exposed lte 1)>> + <<link [[Done|Farm Assault Intro]]>><<cleanupOnWardrobeExit>><</link>> <<else>> - <<if $exposed lte 1>> - <<link [[Done|Farm Assault Intro]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> - <br><br> - <<else>> - You can't remain undressed like this! - <br><br> - <</if>> + You can't remain undressed like this! <</if>> <<case "Prison Wardrobe">> - <<link [[Close|Prison Cell]]>><<unset $saveColor>><<unset $wardrobeRepeat>><<unset $tempDisable>><<set $delete_outfit to "none">><<unset $forceWardrobeLocation>><</link>> + <<link [[Close|Prison Cell]]>><<cleanupOnWardrobeExit>><</link>> <</switch>> + <br><br> <</widget>> :: Wardrobe [exitCheckBypass] @@ -1477,7 +1292,7 @@ You look in your wardrobe. <br><br> <div id="wardrobewear"><<wardrobewear>></div> <div id="wardrobeExits"><<wardrobeExits>></div> -<br><br> + <<wardrobe>> :: Changing Room [exitCheckBypass] diff --git a/game/base-clothing/widgets.twee b/game/base-clothing/widgets.twee index 16ed355f8b916044e76d88d9f3d4297694981f03..a129aea55af94063c996db95d4cad3f5f3bdc126 100644 --- a/game/base-clothing/widgets.twee +++ b/game/base-clothing/widgets.twee @@ -3,306 +3,308 @@ /*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]>> - <<unset _strip_restrict>><<unset _cursedPrevent>> - - /*Check the current worn outfit related items for being locked on the character*/ - <<set _outfitPrimaryWear to setup.clothes[_args[0]][_args[1]].outfitPrimary>> - <<if _outfitPrimaryWear isnot undefined>> - <<for _labelWear, _value range _outfitPrimaryWear>> - <<if $worn[_labelWear].cursed is 1>> - <<set _cursedPrevent to true>> - <</if>> - <</for>> - <</if>> + <<if $worn[_args[0]].cursed is 1>> + <<elseif _args[0] and _args[1]>> + <<set $_slot to _args[0]>> + <<unset _strip_restrict>><<unset _cursedPrevent>> - <<if _cursedPrevent isnot true>> - /*Primary Piece*/ - <<if $worn[_args[0]].name isnot "naked">> - <<generalUndress `clothesReturnLocation($worn[_args[0]])` _args[0]>> - <<unset $_lastTaken>> - <</if>> - <<equipClothesItemFromDefault _args[0] _args[1] _args[2] _args[3]>> - /*Outfit pieces*/ + /*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>> - <<set _colour to $worn[_args[0]].colour>> - <<set _accessory_colour to $worn[_args[0]].accessory_colour>> - <<for _labelWear, _valueWear range _outfitPrimaryWear>> - <<if $worn[_labelWear].name isnot "naked">> - <<generalUndress `clothesReturnLocation($worn[_labelWear])` _labelWear>> + <<for _outfitSlot, _value range _outfitPrimaryWear>> + <<if $worn[_outfitSlot].cursed is 1>> + <<set _cursedPrevent to true>> <</if>> - <<unset _pieceId>> - <<for _iWear to 0; _iWear lt setup.clothes[_labelWear].length; _iWear++>> - <<if setup.clothes[_labelWear][_iWear].name is _valueWear>> - <<set _pieceId to _iWear>> - <<break>> + <</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]>> + /*Outfit pieces*/ + <<if _outfitPrimaryWear isnot undefined>> + <<set _colour to $worn[$_slot].colour>> + <<set _accessory_colour to $worn[$_slot].accessory_colour>> + <<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>> + <<else>> + <!-- Error --> <</if>> <</for>> - <<equipClothesItemFromDefault _labelWear _pieceId _colour _accessory_colour>> - <</for>> + <</if>> <</if>> + <<unset _outfitPrimaryWear>> <</if>> - <<unset _outfitPrimaryWear>> -<</if>> <</widget>> +<!-- args: slot, item index, colour, accessory_colour --> <<widget "equipClothesItemFromDefault">> -<<set $worn[_args[0]] to clone(setup.clothes[_args[0]][_args[1]])>> -<<set $worn[_args[0]].lastTaken to clone($wardrobes.shopReturn)>> -<<if _args[2] and $worn[_args[0]].colour_options.length gt 0>> - <<set $worn[_args[0]].colour to _args[2]>> - <<if $worn[_args[0]].colour is "custom">> - <<set $worn[_args[0]].colourCustom to customColour($customColors.color.primary, $customColors.saturation.primary, $customColors.brightness.primary, $customColors.contrast.primary, $customColors.sepia.primary)>> + <<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>> -<<elseif $worn[_args[0]].colour_options.length gt 0>> - <<set _colorOption to clone($worn[_args[0]].colour_options)>> - <<run _colorOption.delete("custom")>> - <<set $worn[_args[0]].colour to clone(_colorOption.random())>> -<</if>> -<<if _args[3] and $worn[_args[0]].accessory_colour_options.length gt 0 and $worn[_args[0]].accessory is 1>> - <<set $worn[_args[0]].accessory_colour to _args[3]>> - <<if $worn[_args[0]].accessory_colour is "custom">> - <<set $worn[_args[0]].accessory_colourCustom to customColour($customColors.color.secondary, $customColors.saturation.secondary, $customColors.brightness.secondary, $customColors.contrast.secondary, $customColors.sepia.secondary)>> + <<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>> -<<elseif setup.clothes[_args[0]][_args[1]].accessory_colour_options.length gt 0 and $worn[_args[0]].accessory is 1>> - <<set _accessoryColorOption to clone($worn[_args[0]].accessory_colour_options)>> - <<run _accessoryColorOption.delete("custom")>> - <<set $worn[_args[0]].accessory_colour to clone(_accessoryColorOption.random())>> -<</if>> -<<run clothesDataTrimmer($worn[_args[0]])>> + <<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]>> + <<generalWear "over_upper" _args[0] _args[1] _args[2]>> <</widget>> <<widget "overlowerwear">> -<<generalWear "over_lower" _args[0] _args[1] _args[2]>> + <<generalWear "over_lower" _args[0] _args[1] _args[2]>> <</widget>> <<widget "upperwear">> -<<generalWear "upper" _args[0] _args[1] _args[2]>> + <<generalWear "upper" _args[0] _args[1] _args[2]>> <</widget>> <<widget "lowerwear">> -<<generalWear "lower" _args[0] _args[1] _args[2]>> + <<generalWear "lower" _args[0] _args[1] _args[2]>> <</widget>> <<widget "underupperwear">> -<<generalWear "under_upper" _args[0] _args[1] _args[2]>> + <<generalWear "under_upper" _args[0] _args[1] _args[2]>> <</widget>> <<widget "underlowerwear">> -<<generalWear "under_lower" _args[0] _args[1] _args[2]>> + <<generalWear "under_lower" _args[0] _args[1] _args[2]>> <</widget>> <<widget "genitalswear">> -<<generalWear "genitals" _args[0] _args[1] _args[2]>> + <<generalWear "genitals" _args[0] _args[1] _args[2]>> <</widget>> <<widget "overheadwear">> -<<generalWear "over_head" _args[0] _args[1] _args[2]>> + <<generalWear "over_head" _args[0] _args[1] _args[2]>> <</widget>> <<widget "headwear">> -<<generalWear "head" _args[0] _args[1] _args[2]>> + <<generalWear "head" _args[0] _args[1] _args[2]>> <</widget>> <<widget "facewear">> -<<generalWear "face" _args[0] _args[1] _args[2]>> + <<generalWear "face" _args[0] _args[1] _args[2]>> <</widget>> <<widget "neckwear">> -<<generalWear "neck" _args[0] _args[1] _args[2]>> + <<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]>> + <<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]>> + <<generalWear "hands" _args[0] _args[1] _args[2]>> <</widget>> <<widget "legswear">> -<<generalWear "legs" _args[0] _args[1] _args[2]>> + <<generalWear "legs" _args[0] _args[1] _args[2]>> <</widget>> <<widget "feetwear">> -<<generalWear "feet" _args[0] _args[1] _args[2]>> + <<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">> -<<if _args[0] is "wardrobe" or $wardrobes[_args[0]] is undefined>> - <<set $_selectedWardrobe to $wardrobe>> -<<else>> - <<set $_selectedWardrobe to $wardrobes[_args[0]]>> -<</if>> -<<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 _colour to $_selectedWardrobe[_args[1]].last().colour>> - <<if $_selectedWardrobe[_args[1]].last().colourCustom isnot undefined>><<set _colourCustom to $_selectedWardrobe[_args[1]].last().colourCustom>><</if>> - <<set _accessory_colour to $_selectedWardrobe[_args[1]].last().accessory_colour>> - <<if $_selectedWardrobe[_args[1]].last().accessory_colourCustom isnot undefined>><<set _accessory_colourCustom to $_selectedWardrobe[_args[1]].last().accessory_colourCustom>><</if>> - <<for $_label, $_value range $_outfitPrimary>> - <<unset _pieceId>> - <<for _iSend to 0; _iSend lt setup.clothes[$_label].length; _iSend++>> - <<if setup.clothes[$_label][_iSend].name is $_value>> - <<set _pieceId to _iSend>> - <<break>> + <<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 --> + <<sendToWardrobeFromDefault _args[0] $_label _pieceId _colour _accessory_colour>> + <<else>> + <!-- Error --> <</if>> <</for>> - - <<sendToWardrobeFromDefault _args[0] $_label _pieceId _colour _accessory_colour>> - <</for>> + <</if>> <</if>> -<</if>> <</widget>> <<widget "sendToWardrobeFromDefault">> -<<if _args[0] is "wardrobe" or $wardrobes[_args[0]] is undefined>> - <<set $_selectedWardrobe to $wardrobe>> -<<else>> - <<set $_selectedWardrobe to $wardrobes[_args[0]]>> -<</if>> -<<set $_selectedWardrobe[_args[1]].push(clone(setup.clothes[_args[1]][_args[2]]))>> -<<if _args[3] and $_selectedWardrobe[_args[1]].last().colour_options.length isnot 0>> - <<set $_selectedWardrobe[_args[1]].last().colour to _args[3]>> - <<if $_selectedWardrobe[_args[1]].last().colour is "custom">> - <<if _colourCustom isnot undefined>> - <<set $_selectedWardrobe[_args[1]].last().colourCustom to _colourCustom>> - <<unset _colourCustom>> + <<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 $_selectedWardrobe[_args[1]].last().colourCustom to customColour($customColors.color.primary, $customColors.saturation.primary, $customColors.brightness.primary, $customColors.contrast.primary, $customColors.sepia.primary)>> + <<set $_item.colour to clone($_item.colour_options.random())>> <</if>> <</if>> -<<elseif $_selectedWardrobe[_args[1]].last().colour_options.length gt 0>> - <<set $_selectedWardrobe[_args[1]].last().colour to clone($_selectedWardrobe[_args[1]].last().colour_options.random())>> -<</if>> -<<if _args[4] and $_selectedWardrobe[_args[1]].last().accessory is 1 and $_selectedWardrobe[_args[1]].last().accessory_colour_options.length isnot 0>> - <<set $_selectedWardrobe[_args[1]].last().accessory_colour to _args[4]>> - <<if $_selectedWardrobe[_args[1]].last().accessory_colour is "custom">> - <<if _accessory_colourCustom isnot undefined>> - <<set $_selectedWardrobe[_args[1]].last().accessory_colourCustom to _accessory_colourCustom>> - <<unset _accessory_colourCustom>> + <<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 $_selectedWardrobe[_args[1]].last().accessory_colourCustom to customColour($customColors.color.secondary, $customColors.saturation.secondary, $customColors.brightness.secondary, $customColors.contrast.secondary, $customColors.sepia.secondary)>> + <<set $_item.accessory_colour to clone($_item.accessory_colour_options.random())>> <</if>> <</if>> -<<elseif $_selectedWardrobe[_args[1]].last().accessory_colour_options.length gt 0 and $_selectedWardrobe[_args[1]].last().accessory is 1>> - <<set $_selectedWardrobe[_args[1]].last().accessory_colour to clone($_selectedWardrobe[_args[1]].last().accessory_colour_options.random())>> -<</if>> -<<run clothesDataTrimmer($_selectedWardrobe[_args[1]].last())>> + <<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]>> + <<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]>> + <<generalSend _args[1] "over_lower" _args[0] _args[2] _args[3]>> <</widget>> <<widget "uppersend">> -<<generalSend _args[1] "upper" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "upper" _args[0] _args[2] _args[3]>> <</widget>> <<widget "lowersend">> -<<generalSend _args[1] "lower" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "lower" _args[0] _args[2] _args[3]>> <</widget>> <<widget "underuppersend">> -<<generalSend _args[1] "under_upper" _args[0] _args[2] _args[3]>> + <<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]>> + <<generalSend _args[1] "under_lower" _args[0] _args[2] _args[3]>> <</widget>> <<widget "genitalssend">> -<<generalSend _args[1] "genitals" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "genitals" _args[0] _args[2] _args[3]>> <</widget>> <<widget "overheadsend">> -<<generalSend _args[1] "over_head" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "over_head" _args[0] _args[2] _args[3]>> <</widget>> <<widget "headsend">> -<<generalSend _args[1] "head" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "head" _args[0] _args[2] _args[3]>> <</widget>> <<widget "facesend">> -<<generalSend _args[1] "face" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "face" _args[0] _args[2] _args[3]>> <</widget>> <<widget "necksend">> -<<generalSend _args[1] "neck" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "neck" _args[0] _args[2] _args[3]>> <</widget>> <<widget "handssend">> -<<generalSend _args[1] "hands" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "hands" _args[0] _args[2] _args[3]>> <</widget>> <<widget "legssend">> -<<generalSend _args[1] "legs" _args[0] _args[2] _args[3]>> + <<generalSend _args[1] "legs" _args[0] _args[2] _args[3]>> <</widget>> <<widget "feetsend">> -<<generalSend _args[1] "feet" _args[0] _args[2] _args[3]>> + <<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>> -<<legsstrip>> -<<feetstrip>> + <<overupperstrip>> + <<overlowerstrip>> + <<upperstrip>> + <<lowerstrip>> + <<underupperstrip>> + <<if playerHasStrapon() and _args[0] isnot undefined>> + <!-- keep wearing the strap-on --> + <<else>> + <<underlowerstrip>> + <</if>> + <<headstrip>> + <<facestrip>> + <<neckstrip>> + <<handsstrip>> + <<legsstrip>> + <<feetstrip>> <</widget>> <<widget "clothesstrip">> -<<overupperstrip>> -<<overlowerstrip>> -<<upperstrip>> -<<lowerstrip>> -<<underupperstrip>> -<<underlowerstrip>> + <<overupperstrip>> + <<overlowerstrip>> + <<upperstrip>> + <<lowerstrip>> + <<underupperstrip>> + <<underlowerstrip>> <</widget>> <<widget "shavestrip">> -<<overupperstrip>> -<<overlowerstrip>> -<<upperstrip>> -<<lowerstrip>> -<<underlowerstrip>> -<<legsstrip>> -<<feetstrip>> + <<overupperstrip>> + <<overlowerstrip>> + <<upperstrip>> + <<lowerstrip>> + <<underlowerstrip>> + <<legsstrip>> + <<feetstrip>> <</widget>> <<widget "generalStrip">> @@ -332,14 +334,14 @@ <</if>> <<if _cursedPrevent isnot true>> - <<print '<<set $'+ _stripSlot.replace(/_/g,"") +'last to "'+ $worn[_stripSlot].name +'">>'>> + <<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>> - <<print '<<set $'+ _labelStrip.replace(/_/g,"") +'last to "'+ $worn[_labelStrip].name +'">>'>> + <<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>> @@ -428,43 +430,43 @@ /*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>> + <<set $dontHideNormal to $dontHide>> + <<set $dontHide to true>> <</widget>> <<widget "dontHideRevert">> -<<set $dontHide to $dontHideNormal>> + <<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>> + <<overupperruined>> + <<overlowerruined>> + <<upperruined>> + <<lowerruined>> + <<underupperruined>> + <<underlowerruined>> + <<headruined>> + <<faceruined>> + <<neckruined>> + <<handsruined>> + <<legsruined>> + <<feetruined>> <</widget>> <<widget "clothesruined">> -<<overupperruined>> -<<overlowerruined>> -<<upperruined>> -<<lowerruined>> -<<underupperruined>> -<<underlowerruined>> + <<overupperruined>> + <<overlowerruined>> + <<upperruined>> + <<lowerruined>> + <<underupperruined>> + <<underlowerruined>> <</widget>> <<widget "underruined">> -<<underupperruined>> -<<underlowerruined>> + <<underupperruined>> + <<underlowerruined>> <</widget>> /*_args[0] = slot name*/ @@ -612,256 +614,179 @@ <</widget>> <<widget "overupperruined">> -<<generalRuined "over_upper">> + <<generalRuined "over_upper">> <</widget>> <<widget "overlowerruined">> -<<generalRuined "over_lower">> + <<generalRuined "over_lower">> <</widget>> <<widget "upperruined">> -<<generalRuined "upper">> + <<generalRuined "upper">> <</widget>> <<widget "lowerruined">> -<<generalRuined "lower">> + <<generalRuined "lower">> <</widget>> <<widget "underupperruined">> -<<generalRuined "under_upper">> + <<generalRuined "under_upper">> <</widget>> <<widget "underlowerruined">> -<<generalRuined "under_lower">> + <<generalRuined "under_lower">> <</widget>> <<widget "genitalsruined">> -<<generalRuined "genitals">> + <<generalRuined "genitals">> <</widget>> <<widget "overheadruined">> -<<generalRuined "over_head">> + <<generalRuined "over_head">> <</widget>> <<widget "headruined">> -<<generalRuined "head">> + <<generalRuined "head">> <</widget>> <<widget "faceruined">> -<<generalRuined "face">> + <<generalRuined "face">> <</widget>> <<widget "neckruined">> -<<generalRuined "neck">> + <<generalRuined "neck">> <</widget>> <<widget "handsruined">> -<<generalRuined "hands">> + <<generalRuined "hands">> <</widget>> <<widget "legsruined">> -<<generalRuined "legs">> + <<generalRuined "legs">> <</widget>> <<widget "feetruined">> -<<generalRuined "feet">> + <<generalRuined "feet">> <</widget>> /*The "...on" widgets put on clothing removed with the "...strip" widgets.*/ <<widget "outfiton">> -<<overupperon>> -<<overloweron>> -<<upperon>> -<<loweron>> + <<for $_slot range ["over_upper","over_lower","upper","lower"]>> + <<generalOn $_slot>> + <</for>> <</widget>> <<widget "clotheson">> -<<overupperon>> -<<overloweron>> -<<upperon>> -<<loweron>> -<<underupperon>> -<<underloweron>> -<<overheadon>> -<<headon>> -<<faceon>> -<<neckon>> -<<handson>> -<<legson>> -<<feeton>> -<<buttplugon>> -<<if $worn.upper.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name is "naked" and $worn.under_upper.name is "naked">> -<<else>> - You fix your clothing. - <br><br> -<</if>> + <<for $_slot range ["over_upper","over_lower","upper","lower","under_upper","under_lower","over_head","head","face","neck","hands","legs","feet"]>> + <<generalOn $_slot>> + <</for>> + <<buttplugon>> + <<if !($worn.upper.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name is "naked" and $worn.under_upper.name is "naked")>> + You fix your clothing. + <br><br> + <</if>> -<<exposure>> -<<if $exposed gte 1>> - You are conscious of your <<nudity>>. - <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]>> - <<unset _onSlot>> - /*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>> - <<if $carried[$carried[_args[0]].outfitSecondary[0]].name is $carried[_args[0]].outfitSecondary[1]>> - <<set _onSlot to $carried[_args[0]].outfitSecondary[0]>> + <<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>> + <<if $carried[$carried[_args[0]].outfitSecondary[0]].name is $carried[_args[0]].outfitSecondary[1]>> + <<set $_slot to $carried[_args[0]].outfitSecondary[0]>> + <</if>> + <<else>> + <<set $_slot to _args[0]>> <</if>> - <</if>> - <<if _onSlot is undefined>> - <<set _onSlot to _args[0]>> - <</if>> - <<set _slots to []>> - <<if $carried[_onSlot].name isnot "naked">> - <<set _slots.push(_onSlot)>> - <<set $worn[_onSlot] to clone($carried[_onSlot])>> - <<set $carried[_onSlot] to clone(setup.clothes[_onSlot][0])>> - - <<set _outfitPrimaryOn to $worn[_onSlot].outfitPrimary>> - - <<if _outfitPrimaryOn isnot undefined>> - <<for _labelOn, _valueOn range _outfitPrimaryOn>> - <<if $carried[_labelOn].name is _valueOn>> - <<set $worn[_labelOn] to clone($carried[_labelOn])>> - <<set $carried[_labelOn] to clone(setup.clothes[_labelOn][0])>> - <<set _slots.push(_labelOn)>> + <<set _slots to []>> + <<if $carried[$_slot].name isnot "naked">> + <<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>> - <<unset _outfitPrimaryOn>> - <</if>> - /*Resets status of existing clothing*/ - <<if _slots.includes("upper") or _onSlot is "upper">> - <<set $worn.upper.exposed to setup.clothes.upper[clothesIndex('upper', $worn.upper)].exposed_base>> - <<set $worn.upper.state to setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base>> - <<set $worn.upper.state_top to setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base>> - <</if>> - <<if _slots.includes("lower") or _onSlot is "lower">> - <<set $worn.lower.exposed to setup.clothes.lower[clothesIndex('lower', $worn.lower)].exposed_base>> - <<set $worn.lower.vagina_exposed to setup.clothes.lower[clothesIndex('lower', $worn.lower)].vagina_exposed_base>> - <<set $worn.lower.anus_exposed to setup.clothes.lower[clothesIndex('lower', $worn.lower)].anus_exposed_base>> - <<set $worn.lower.state to setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base>> - <<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> - <<set $worn.lower.skirt_down to 1>> + <<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>> - <<if _slots.includes("under_upper") or _onSlot is "under_upper">> - <<set $worn.under_upper.exposed to setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].exposed_base>> - <<set $worn.under_upper.state to setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_base>> - <<set $worn.under_upper.state_top to setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_top_base>> - <</if>> - <<if _slots.includes("under_lower") or _onSlot is "under_lower">> - <<set $worn.under_lower.state to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].state_base>> - <<set $worn.under_lower.exposed to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].exposed_base>> - <<set $worn.under_lower.vagina_exposed to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].vagina_exposed_base>> - <<set $worn.under_lower.anus_exposed to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].anus_exposed_base>> - <</if>> - <<if _slots.includes("legs") or _onSlot is "legs">> - <<set $worn.legs.state to setup.clothes.legs[clothesIndex('legs', $worn.legs)].state_base>> - <</if>> -<</if>> <</widget>> <<widget "overupperon">> -<<generalOn "over_upper">> -<<if $worn.over_upper.name isnot "naked">> - <<set $worn.over_upper.exposed to setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].exposed_base>> - <<set $worn.over_upper.state to setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_base>> - <<set $worn.over_upper.state_top to setup.clothes.over_upper[clothesIndex('over_upper', $worn.over_upper)].state_top_base>> -<</if>> + <<generalOn "over_upper">> <</widget>> <<widget "overloweron">> -<<generalOn "over_lower">> -<<if $worn.over_lower.name isnot "naked">> - <<set $worn.over_lower.exposed to setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].exposed_base>> - <<set $worn.over_lower.vagina_exposed to setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].vagina_exposed_base>> - <<set $worn.over_lower.anus_exposed to setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].anus_exposed_base>> - <<set $worn.over_lower.state to setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].state_base>> - <<if setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt is 1>> - <<set $worn.over_lower.skirt_down to 1>> - <</if>> -<</if>> + <<generalOn "over_lower">> <</widget>> <<widget "upperon">> -<<generalOn "upper">> -<<if $worn.upper.name isnot "naked">> - <<set $worn.upper.exposed to setup.clothes.upper[clothesIndex('upper', $worn.upper)].exposed_base>> - <<set $worn.upper.state to setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_base>> - <<set $worn.upper.state_top to setup.clothes.upper[clothesIndex('upper', $worn.upper)].state_top_base>> -<</if>> + <<generalOn "upper">> <</widget>> <<widget "loweron">> -<<generalOn "lower">> -<<if $worn.lower.name isnot "naked">> - <<set $worn.lower.exposed to setup.clothes.lower[clothesIndex('lower', $worn.lower)].exposed_base>> - <<set $worn.lower.vagina_exposed to setup.clothes.lower[clothesIndex('lower', $worn.lower)].vagina_exposed_base>> - <<set $worn.lower.anus_exposed to setup.clothes.lower[clothesIndex('lower', $worn.lower)].anus_exposed_base>> - <<set $worn.lower.state to setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base>> - <<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>> - <<set $worn.lower.skirt_down to 1>> - <</if>> -<</if>> + <<generalOn "lower">> <</widget>> <<widget "underupperon">> -<<generalOn "under_upper">> -<<if $worn.under_upper.name isnot "naked">> - <<set $worn.under_upper.exposed to setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].exposed_base>> - <<set $worn.under_upper.state to setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_base>> - <<set $worn.under_upper.state_top to setup.clothes.under_upper[clothesIndex('under_upper', $worn.under_upper)].state_top_base>> -<</if>> + <<generalOn "under_upper">> <</widget>> <<widget "underloweron">> -<<generalOn "under_lower">> -<<if $worn.under_lower.name isnot "naked">> - <<set $worn.under_lower.state to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].state_base>> - <<set $worn.under_lower.exposed to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].exposed_base>> - <<set $worn.under_lower.vagina_exposed to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].vagina_exposed_base>> - <<set $worn.under_lower.anus_exposed to setup.clothes.under_lower[clothesIndex('under_lower', $worn.under_lower)].anus_exposed_base>> - /* TODO: strap-ons set to worn */ - <<if $worn.under_lower.type.includes("strap-on")>> - <<run patchStraponsWearStatus()>> - <</if>> -<</if>> + <<generalOn "under_lower">> <</widget>> <<widget "overheadon">> -<<generalOn "over_head">> + <<generalOn "over_head">> <</widget>> <<widget "headon">> -<<generalOn "head">> + <<generalOn "head">> <</widget>> <<widget "faceon">> -<<generalOn "face">> + <<generalOn "face">> <</widget>> <<widget "neckon">> -<<generalOn "neck">> + <<generalOn "neck">> <</widget>> <<widget "handson">> -<<generalOn "hands">> + <<generalOn "hands">> <</widget>> <<widget "legson">> -<<generalOn "legs">> + <<generalOn "legs">> <</widget>> <<widget "feeton">> -<<generalOn "feet">> + <<generalOn "feet">> <</widget>> <<widget "buttplugon">> @@ -871,244 +796,170 @@ <</widget>> <<widget "clothesontowel">> -<<upperon>> -<<loweron>> -<<underupperon>> -<<underloweron>> -<<headon>> -<<faceon>> -<<neckon>> -<<handson>> -<<legson>> -<<feeton>> -<<buttplugon>> -<<if $worn.upper.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name is "naked">> -<<else>> - You fix your clothing. - <br><br> -<</if>> - -<<exposure>> -<<towelup>> -<<if $exposed gte 1>> - You are conscious of your <<nudity>>. - <br><br> -<</if>> - + <<clotheson "towel">> <</widget>> <<widget "clothesonplant">> -<<upperon>> -<<loweron>> -<<underupperon>> -<<underloweron>> -<<headon>> -<<faceon>> -<<neckon>> -<<handson>> -<<legson>> -<<feeton>> -<<buttplugon>> -<<if $worn.upper.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name is "naked">> -<<else>> - You fix your clothing. - <br><br> -<</if>> - -<<exposure>> -<<plantup>> -<<if $exposed gte 1>> - You are conscious of your <<nudity>>. - <br><br> -<</if>> - + <<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]>> -<<uppersteal _temp_steal>> -<<lowersteal _temp_steal>> -<<underuppersteal _temp_steal>> -<<underlowersteal _temp_steal>> -<<headsteal _temp_steal>> -<<facesteal _temp_steal>> -<<necksteal _temp_steal>> -<<handssteal _temp_steal>> -<<legssteal _temp_steal>> -<<feetsteal _temp_steal>> + <<set _temp_steal to _args[0]>> + <<for $_slot range ["upper","lower","under_upper","under_lower","head","face","neck","hands","legs","feet"]>> + <<generalSteal $_slot _temp_steal>> + <</for>> <</widget>> <<widget "stealclothes">> -<<set _temp_steal to _args[0]>> -<<uppersteal _temp_steal>> -<<lowersteal _temp_steal>> -<<underuppersteal _temp_steal>> -<<underlowersteal _temp_steal>> + <<set _temp_steal to _args[0]>> + <<for $_slot range ["upper","lower","under_upper","under_lower"]>> + <<generalSteal $_slot _temp_steal>> + <</for>> <</widget>> <<widget "generalSteal">> -<<if _args[0]>> - <<if $worn[_args[0]].name isnot "naked" and $worn[_args[0]].cursed isnot 1 and _args[1] is "strip">> - <<if $stealtextskip isnot 1>> - <<He>> tears your <<print $worn[_args[0]].name>> off your body. - <br> - <</if>> - <<generalRuined _args[0]>> - <<elseif $carried[_args[0]].name isnot "naked">> - <<if $stealtextskip isnot 1>> - <<He>> keeps your <<print $carried[_args[0]].name>> as a souvenir. - <br> - <</if>> - <<if $carried[_args[0]].outfitSecondary isnot undefined>> - <<if $carried[$carried[_args[0]].outfitSecondary[0]].name is $carried[_args[0]].outfitSecondary[1]>> - <<print '<<generalSteal "'+$carried[_args[0]].outfitSecondary[0]+'">>'>> + <<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>> - <</if>> - <<set _outfitPrimarySteal to $carried[_args[0]].outfitPrimary>> - <<if _outfitPrimarySteal isnot undefined>> - <<for _labelSteal, _valueSteal range _outfitPrimarySteal>> - <<if $carried[_labelSteal].name is _valueSteal>> - <<generalRuined _labelSteal>> + <<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>> - <</for>> + <</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>> - <<unset _outfitPrimarySteal>> - <<generalRuined _args[0]>> <</if>> -<</if>> <</widget>> <<widget "overuppersteal">> -<<generalSteal "over_upper" _args[0]>> + <<generalSteal "over_upper" _args[0]>> <</widget>> <<widget "overlowersteal">> -<<generalSteal "over_lower" _args[0]>> + <<generalSteal "over_lower" _args[0]>> <</widget>> <<widget "uppersteal">> -<<generalSteal "upper" _args[0]>> + <<generalSteal "upper" _args[0]>> <</widget>> <<widget "lowersteal">> -<<generalSteal "lower" _args[0]>> + <<generalSteal "lower" _args[0]>> <</widget>> <<widget "underuppersteal">> -<<generalSteal "under_upper" _args[0]>> + <<generalSteal "under_upper" _args[0]>> <</widget>> <<widget "underlowersteal">> -<<generalSteal "under_lower" _args[0]>> + <<generalSteal "under_lower" _args[0]>> <</widget>> <<widget "overheadsteal">> -<<generalSteal "over_head" _args[0]>> + <<generalSteal "over_head" _args[0]>> <</widget>> <<widget "headsteal">> -<<generalSteal "head" _args[0]>> + <<generalSteal "head" _args[0]>> <</widget>> <<widget "facesteal">> -<<generalSteal "face" _args[0]>> + <<generalSteal "face" _args[0]>> <</widget>> <<widget "necksteal">> -<<generalSteal "neck" _args[0]>> + <<generalSteal "neck" _args[0]>> <</widget>> <<widget "handssteal">> -<<generalSteal "hands" _args[0]>> + <<generalSteal "hands" _args[0]>> <</widget>> <<widget "legssteal">> -<<generalSteal "legs" _args[0]>> + <<generalSteal "legs" _args[0]>> <</widget>> <<widget "feetsteal">> -<<generalSteal "feet" _args[0]>> + <<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 _undress_temp to _args[0]>> -<<generalUndress _undress_temp "over_upper">> -<<generalUndress _undress_temp "over_lower">> -<<generalUndress _undress_temp "over_head">> -<<generalUndress _undress_temp "upper">> -<<generalUndress _undress_temp "lower">> -<<generalUndress _undress_temp "under_upper">> -<<generalUndress _undress_temp "under_lower">> -<<generalUndress _undress_temp "head">> -<<generalUndress _undress_temp "face">> -<<generalUndress _undress_temp "neck">> -<<generalUndress _undress_temp "hands">> -<<generalUndress _undress_temp "legs">> -<<generalUndress _undress_temp "feet">> + <<set $_location to _args[0]>> + <<for $_slot range ["over_upper","over_lower","over_head","upper","lower","under_upper","under_lower","head","face","neck","hands","legs","feet"]>> + <<generalUndress $_location $_slot>> + <</for>> <</widget>> <<widget "undressKeepFace">> -<<set _undress_temp to _args[0]>> -<<generalUndress _undress_temp "over_upper">> -<<generalUndress _undress_temp "over_lower">> -<<generalUndress _undress_temp "over_head">> -<<generalUndress _undress_temp "upper">> -<<generalUndress _undress_temp "lower">> -<<generalUndress _undress_temp "under_upper">> -<<generalUndress _undress_temp "under_lower">> -<<generalUndress _undress_temp "head">> -<<generalUndress _undress_temp "neck">> -<<generalUndress _undress_temp "hands">> -<<generalUndress _undress_temp "legs">> -<<generalUndress _undress_temp "feet">> + <<set $_location to _args[0]>> + <<for $_slot range ["over_upper","over_lower","over_head","upper","lower","under_upper","under_lower","head","neck","hands","legs","feet"]>> + <<generalUndress $_location $_slot>> + <</for>> <</widget>> <<widget "undressSleep">> -<<set _undress_temp to _args[0]>> -<<saveTempHairStyle>> -<<for $_label, $_value range $worn>> - <<if $_value.type.includes("eerie")>> - <<set _makeTempClothing to 1>> - <<storeItem _undress_temp $_label>> - <<continue>> - <</if>> - <<generalUndress _undress_temp $_label>> -<</for>> + <<set $_location to _args[0]>> + <<saveTempHairStyle>> + <<for $_label, $_value range $worn>> + <<if $_value.type.includes("eerie")>> + <<set _makeTempClothing to 1>> + <<storeItem $_location $_label>> + <<continue>> + <</if>> + <<generalUndress $_location $_label>> + <</for>> <</widget>> <<widget "undressOverClothes">> -<<set _undress_temp to _args[0]>> -<<generalUndress _undress_temp "over_upper">> -<<generalUndress _undress_temp "over_lower">> -<<generalUndress _undress_temp "over_head">> + <<set $_location to _args[0]>> + <<for $_slot range ["over_upper","over_lower","over_head"]>> + <<generalUndress $_location $_slot>> + <</for>> <</widget>> <<widget "undressclothes">> -<<set _undress_temp to _args[0]>> -<<generalUndress _undress_temp "over_upper">> -<<generalUndress _undress_temp "over_lower">> -<<generalUndress _undress_temp "upper">> -<<generalUndress _undress_temp "lower">> -<<generalUndress _undress_temp "under_upper">> -<<generalUndress _undress_temp "under_lower">> + <<set $_location to _args[0]>> + <<for $_slot range ["over_upper","over_lower","upper","lower","under_upper","under_lower"]>> + <<generalUndress $_location $_slot>> + <</for>> <</widget>> <<widget "undressmid">> -<<set _undress_temp to _args[0]>> -<<generalUndress _undress_temp "upper">> -<<generalUndress _undress_temp "lower">> + <<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[_args[1]].type.includes("strap-on")>> - <<run window.wardrobeStripStraponException($worn[_args[1]].name)>> + <<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, "legs":false, "feet":false, "butt_plug":true}>> @@ -1135,11 +986,7 @@ <<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])>> - <<if _args[0] is "wardrobe" or $wardrobes[_args[0]] is undefined>> - <<set $_selectedWardrobe to $wardrobe>> - <<else>> - <<set $_selectedWardrobe to $wardrobes[$wardrobe_location]>> - <</if>> + <<set $_selectedWardrobe to selectWardrobe()>> <<set _skip to ["naked","towel top","large towel","towel skirt","large towel bottom","plant skirt","plant top"]>> <<if _outfitPrimaryUndress isnot undefined>> <<for _labelUndress, _valueUndress range _outfitPrimaryUndress>> @@ -1198,260 +1045,218 @@ <</widget>> <<widget "storeItem">> -<<set _storeSkip to ["naked","towel top","large towel","towel skirt","large towel bottom","plant skirt","plant top"]>> -<<for _u to 0; _u lt $store[_args[1]].length; _u++>> - <<set $_item to $store[_args[1]][_u]>> - <<if _args[0] is $_item.location>> - <<set _outfitPrimaryPrevious to $_item.outfitPrimary>> - <<if _outfitPrimaryPrevious isnot undefined>> - <<for _labelStore, _value range _outfitPrimaryPrevious>> - <<for _iStore to 0; _iStore lt $store[_labelStore].length; _iStore++>> - <<set $_itemPair to $store[_labelStore][_iStore]>> - <<if _args[0] is $_itemPair.location>> - <<if $_itemPair.outfitSecondary isnot undefined>> - <<if $_itemPair.outfitSecondary[1] is $_item.name>> - <<if !_storeSkip.includes($_itemPair.name)>> - <<set $wardrobe[_labelStore].push(clone($_itemPair))>> - <</if>> - <<set $store[_labelStore].deleteAt(_iStore)>> - <</if>> - <</if>> - <<break>> + <<set $_slot to _args[1]>> + <<set _storeSkip to ["naked","towel top","large towel","towel skirt","large towel bottom","plant skirt","plant top"]>> + + <<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 !_storeSkip.includes($_itemPair.name)>> + <<set $wardrobe[_labelStore].push(clone($_itemPair))>> <</if>> - <</for>> + <<set $store[_labelStore].delete($_itemPair)>> + <</if>> <</for>> <</if>> - <<unset _outfitPrimaryPrevious>> <<if !_storeSkip.includes($_item.name) and $_item.temp is undefined>> - <<set $wardrobe[_args[1]].push(clone($_item))>> + <<set $wardrobe[$_slot].push(clone($_item))>> <</if>> - <<set $store[_args[1]].deleteAt(_u)>> - <<break>> + <<set $store[$_slot].delete($_item)>> <</if>> -<</for>> -<<if _makeTempClothing is 1>> - <<if $worn[_args[1]].name is "naked">> - <<set _temp_clothing to {name: "naked"}>> + <<if _makeTempClothing is 1>> + <<set _temp_clothing to ($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 _temp_clothing to clone($worn[_args[1]])>> + <<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>> - <<set _temp_clothing.temp to 1>> - <<set _temp_clothing.location to _args[0]>> - <<set $store[_args[1]].push(clone(_temp_clothing))>> - <<unset _makeTempClothing>> -<<else>> - <<set $store[_args[1]].push(clone($worn[_args[1]]))>> - <<set $store[_args[1]].last().location to _args[0]>> - <<set $worn[_args[1]] to clone(setup.clothes[_args[1]][0])>> -<</if>> <</widget>> <<widget "overupperundress">> -<<generalUndress _args[0] "over_upper">> + <<generalUndress _args[0] "over_upper">> <</widget>> <<widget "overlowerundress">> -<<generalUndress _args[0] "over_lower">> + <<generalUndress _args[0] "over_lower">> <</widget>> <<widget "upperundress">> -<<generalUndress _args[0] "upper">> + <<generalUndress _args[0] "upper">> <</widget>> <<widget "lowerundress">> -<<generalUndress _args[0] "lower">> + <<generalUndress _args[0] "lower">> <</widget>> <<widget "underupperundress">> -<<generalUndress _args[0] "under_upper">> + <<generalUndress _args[0] "under_upper">> <</widget>> <<widget "underlowerundress">> -<<generalUndress _args[0] "under_lower">> + <<generalUndress _args[0] "under_lower">> <</widget>> <<widget "genitalsundress">> -<<generalUndress _args[0] "genitals">> + <<generalUndress _args[0] "genitals">> <</widget>> <<widget "overheadundress">> -<<generalUndress _args[0] "over_head">> + <<generalUndress _args[0] "over_head">> <</widget>> <<widget "headundress">> -<<generalUndress _args[0] "head">> + <<generalUndress _args[0] "head">> <</widget>> <<widget "faceundress">> -<<generalUndress _args[0] "face">> + <<generalUndress _args[0] "face">> <</widget>> <<widget "neckundress">> -<<generalUndress _args[0] "neck">> + <<generalUndress _args[0] "neck">> <</widget>> <<widget "handsundress">> -<<generalUndress _args[0] "hands">> + <<generalUndress _args[0] "hands">> <</widget>> <<widget "legsundress">> -<<generalUndress _args[0] "legs">> + <<generalUndress _args[0] "legs">> <</widget>> <<widget "feetundress">> -<<generalUndress _args[0] "feet">> + <<generalUndress _args[0] "feet">> <</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.*/ <<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, "legs":false, "feet":false}>> -<<set _store_temp to _args[0]>> -<<if _args[1]>> -<<set _store_option to _args[1]>> -<<else>> -<<set _store_option to 0>> -<</if>> -<<storeonoverupper _store_temp _store_option>> -<<storeonoverlower _store_temp _store_option>> -<<storeonoverhead _store_temp _store_option>> -<<storeonupper _store_temp _store_option>> -<<storeonlower _store_temp _store_option>> -<<storeonunderupper _store_temp _store_option>> -<<storeonunderlower _store_temp _store_option>> -<<storeonhead _store_temp _store_option>> -<<storeonface _store_temp _store_option>> -<<storeonneck _store_temp _store_option>> -<<storeonhands _store_temp _store_option>> -<<storeonlegs _store_temp _store_option>> -<<storeonfeet _store_temp _store_option>> + <<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, "legs":false, "feet":false}>> + <<set _store_temp to _args[0]>> + <<set _store_option to _args[1] or 0>> + <<for $_slot range ["over_upper","over_lower","upper","lower","under_upper","under_lower","over_head","head","face","neck","hands","legs","feet"]>> + <<generalStoreon _store_temp $_slot _store_option>> + <</for>> <</widget>> <<widget "generalStoreon">> <<if _args[0] and _args[1]>> - <<if $worn[_args[1]].cursed is 1>> - <<elseif _equipSkip[_args[1]] is true>> - <<for _u to 0; _u lt $store[_args[1]].length; _u++>> - <<if _args[0] is $store[_args[1]][_u].location>> - <<if $store[_args[1]][_u].temp is undefined>> - <<if !$multipleWardrobes>> - <<set _lastTaken to "wardrobe">> - <<elseif $location is "asylum">> - <<set _lastTaken to "asylum">> - <<elseif $location is "prison">> - <<set _lastTaken to "prison">> - <<elseif $multipleWardrobes isnot "all" or $worn[_args[1]].lastTaken is undefined>> - <<set _lastTaken to "wardrobe">> - <<else>> - <<set _lastTaken to $worn[_args[1]].lastTaken>> - <</if>> - <<if _lastTaken is "wardrobe">> - <<set $_selectedWardrobe to $wardrobe>> - <<else>> - <<set $_selectedWardrobe to $wardrobes[_lastTaken]>> + <<set $_location to _args[0]>> + <<set $_slot to _args[1]>> + <<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[$_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>> - <<set $_selectedWardrobe[_args[1]].push(clone($store[_args[1]][_u]))>> <</if>> - <<set $store[_args[1]].deleteAt(_u)>> + <<set $_selectedWardrobe[$_slot].push(clone($_item))>> <</if>> - <</for>> - <<else>> - <<for _u to 0; _u lt $store[_args[1]].length; _u++>> - <<if _args[0] is $store[_args[1]][_u].location>> - <<if _args[2] is "wardrobe" or $wardrobes[_args[2]] isnot undefined>> - <<if $store[_args[1]][_u].temp is undefined>> - <<set $_location to clothesReturnLocation($worn[_args[1]])>> - <<if $_location is "wardrobe">> - <<set $_selectedWardrobe to $wardrobe>> - <<else>> - <<set $_selectedWardrobe to $wardrobes[$_location]>> - <</if>> - <<set $_selectedWardrobe[_args[1]].push(clone($store[_args[1]][_u]))>> - <</if>> - <<set $store[_args[1]].deleteAt(_u)>> - <<elseif _args[2] is "delete">> - <<set $store[_args[1]].deleteAt(_u)>> - <<elseif _args[2] is "check">> - <<set _store_check to 1>> - <<else>> - <<set $_location to clothesReturnLocation($worn[_args[1]])>> - <<generalUndress $_location _args[1]>> - <<if $store[_args[1]][_u].name is "naked">> - <<elseif $store[_args[1]][_u].temp is undefined>> - <<set $worn[_args[1]] to clone($store[_args[1]][_u])>> - <<set $worn[_args[1]].location to 0>> + <<set $store[$_slot].deleteAt($_index)>> + <<else>> + <<if _args[2] is "wardrobe" or $wardrobes[_args[2]] isnot undefined>> + <<if $_item.temp is undefined>> + <<set $_location to clothesReturnLocation($worn[$_slot])>> + <<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 "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 _args[1] _u>> - <<generalWearFromWardrobe _args[1] _wardrobeId>> + <<searchWardrobeForItem $_slot $_index>> + <<generalWearFromWardrobe $_slot _wardrobeId>> <</if>> - <<set $store[_args[1]].deleteAt(_u)>> <</if>> - <<break>> + <<set $store[$_slot].deleteAt($_index)>> <</if>> - <</for>> + <</if>> <</if>> <</if>> <</widget>> <<widget "storeonoverupper">> -<<generalStoreon _args[0] "over_upper" _args[1]>> + <<generalStoreon _args[0] "over_upper" _args[1]>> <</widget>> <<widget "storeonoverlower">> -<<generalStoreon _args[0] "over_lower" _args[1]>> + <<generalStoreon _args[0] "over_lower" _args[1]>> <</widget>> <<widget "storeonupper">> -<<generalStoreon _args[0] "upper" _args[1]>> + <<generalStoreon _args[0] "upper" _args[1]>> <</widget>> <<widget "storeonlower">> -<<generalStoreon _args[0] "lower" _args[1]>> + <<generalStoreon _args[0] "lower" _args[1]>> <</widget>> <<widget "storeonunderupper">> -<<generalStoreon _args[0] "under_upper" _args[1]>> + <<generalStoreon _args[0] "under_upper" _args[1]>> <</widget>> <<widget "storeonunderlower">> -<<generalStoreon _args[0] "under_lower" _args[1]>> + <<generalStoreon _args[0] "under_lower" _args[1]>> <</widget>> <<widget "storeonoverhead">> -<<generalStoreon _args[0] "over_head" _args[1]>> + <<generalStoreon _args[0] "over_head" _args[1]>> <</widget>> <<widget "storeonhead">> -<<generalStoreon _args[0] "head" _args[1]>> + <<generalStoreon _args[0] "head" _args[1]>> <</widget>> <<widget "storeonface">> -<<generalStoreon _args[0] "face" _args[1]>> + <<generalStoreon _args[0] "face" _args[1]>> <</widget>> <<widget "storeonneck">> -<<generalStoreon _args[0] "neck" _args[1]>> + <<generalStoreon _args[0] "neck" _args[1]>> <</widget>> <<widget "storeonhands">> -<<generalStoreon _args[0] "hands" _args[1]>> + <<generalStoreon _args[0] "hands" _args[1]>> <</widget>> <<widget "storeonlegs">> -<<generalStoreon _args[0] "legs" _args[1]>> + <<generalStoreon _args[0] "legs" _args[1]>> <</widget>> <<widget "storeonfeet">> -<<generalStoreon _args[0] "feet" _args[1]>> + <<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>> + <<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>> + <<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.*/ @@ -1460,49 +1265,39 @@ <<set _slot to _args[0]>> <<set _wearId to _args[1]>> <<unset _wardrobeId>><<unset _item>><<unset _brokenId>><<unset _secondChoice>> -<<if $wardrobe_location is "wardrobe" or $wardrobes[$wardrobe_location] is undefined>> - <<set $_selectedWardrobe to $wardrobe>> -<<else>> - <<set $_selectedWardrobe to $wardrobes[$wardrobe_location]>> -<</if>> +<<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++>> - <<if $_selectedWardrobe[_slot][_j].name is _item.name and _item.colour is $_selectedWardrobe[_slot][_j].colour and _item.accessory_colour is $_selectedWardrobe[_slot][_j].accessory_colour>> - <<set _matched to 0>> - <<if $_selectedWardrobe[_slot][_j].colour isnot "custom">> + <<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_colour isnot "custom")>> + + <<if _item.colourCustom isnot undefined and _item.colourCustom is $_selectedItem.colourCustom>> <<set _matched++>> - <<elseif _item.colourCustom isnot undefined and $_selectedWardrobe[_slot][_j].colourCustom isnot undefined>> - <<if _item.colourCustom is $_selectedWardrobe[_slot][_j].colourCustom>> - <<set _matched++>> - <</if>> <</if>> - <<if $_selectedWardrobe[_slot][_j].accessory_colour isnot "custom">> + <<if _item.accessory_colourCustom isnot undefined and _item.accessory_colourCustom is $_selectedItem.accessory_colourCustom>> <<set _matched++>> - <<elseif _item.accessory_colourCustom isnot undefined and $_selectedWardrobe[_slot][_j].accessory_colourCustom isnot undefined>> - <<if _item.accessory_colourCustom is $_selectedWardrobe[_slot][_j].accessory_colourCustom>> - <<set _matched++>> - <</if>> <</if>> <<if _matched is 2>> - <<if $_selectedWardrobe[_slot][_j].outfitPrimary isnot undefined>> + <<if $_selectedItem.outfitPrimary isnot undefined>> <<set _matched to 0>> - <<for _labelWW, _valueWW range $_selectedWardrobe[_slot][_j].outfitPrimary>> - <<if _valueWW is _item.outfitPrimary[_labelWW]>> + <<for _labelWW, _valueWW range $_selectedItem.outfitPrimary>> + <<if _item.outfitPrimary[_labelWW] is _valueWW>> <<set _matched++>> <</if>> <</for>> - <<if _matched is Object.keys($_selectedWardrobe[_slot][_j].outfitPrimary).length>> - <<set _wardrobeId to clone(_j)>> + <<if _matched is Object.keys($_selectedItem.outfitPrimary).length>> + <<set _wardrobeId to _j>> <<break>> <<else>> - <<set _secondChoice to clone(_j)>> + <<set _secondChoice to _j>> <</if>> <<else>> - <<set _wardrobeId to clone(_j)>> + <<set _wardrobeId to _j>> <<break>> <</if>> <</if>> @@ -1519,24 +1314,22 @@ <<set _slot to _args[0]>> <<set _wearId to _args[1]>> <<set _slimePrevent to ["upper", "lower", "under_upper", "under_lower"]>> -<<if $wardrobe_location is "wardrobe" or $wardrobes[$wardrobe_location] is undefined>> - <<set $_selectedWardrobe to $wardrobe>> -<<else>> - <<set $_selectedWardrobe to $wardrobes[$wardrobe_location]>> -<</if>> +<<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. <<print "<<cursedtext "+$worn[_slot].name+">>">> + 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>> - <<print "<<cursedtext "+$worn[_labelWW].name+">>">> + <<if $worn[_labelWW].cursed is 1 and _cursedPrevent isnot true>> + <<capture _labelWW>> + <<cursedtext $worn[_labelWW].name>> + <</capture>> <<set _cursedPrevent to true>> <</if>> <</for>> @@ -1617,41 +1410,27 @@ <</widget>> <<widget "outfitChecks">> -<<if $worn.under_lower.outfitSecondary is undefined>> <<set _underOutfit to false>> -<<elseif $worn.under_lower.outfitSecondary[1] is "broken">> - <<set _underOutfit to false>> -<<elseif $worn.under_lower.outfitSecondary[1] is $worn.under_upper.name>> - <<set _underOutfit to true>> -<<else>> - <<set _underOutfit to false>> -<</if>> -<<if $worn.lower.outfitSecondary is undefined>> - <<set _middleOutfit to false>> -<<elseif $worn.lower.outfitSecondary[1] is "broken">> - <<set _middleOutfit to false>> -<<elseif $worn.lower.outfitSecondary[1] is $worn.upper.name>> - <<set _middleOutfit to true>> -<<else>> + <<if $worn.under_lower.outfitSecondary and $worn.under_lower.outfitSecondary[1] is $worn.under_upper.name>> + <<set _underOutfit to true>> + <</if>> + <<set _middleOutfit to false>> -<</if>> -<<if $worn.over_lower.outfitSecondary is undefined>> - <<set _overOutfit to false>> -<<elseif $worn.over_lower.outfitSecondary[1] is "broken">> - <<set _overOutfit to false>> -<<elseif $worn.over_lower.outfitSecondary[1] is $worn.over_upper.name>> - <<set _overOutfit to true>> -<<else>> - <<set _overOutfit to false>> -<</if>> + <<if $worn.lower.outfitSecondary and $worn.lower.outfitSecondary[1] is $worn.upper.name>> + <<set _middleOutfit to true>> + <</if>> -<<set _underNaked to ($worn.under_lower.name is "naked" and $worn.under_upper.name is "naked")>> -<<set _middleNaked to ($worn.lower.name is "naked" and $worn.upper.name is "naked")>> -<<set _overNaked to ($worn.over_lower.name is "naked" and $worn.over_upper.name is "naked")>> -<<set _topless to ($worn.over_upper.name is "naked" and $worn.upper.name is "naked" and $worn.under_upper.name is "naked")>> -<<set _bottomless to ($worn.over_lower.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name is "naked")>> -<<set _fullyNaked to (_topless and _bottomless)>> + <<set _overOutfit to false>> + <<if $worn.over_lower.outfitSecondary and $worn.over_lower.outfitSecondary[1] is $worn.over_upper.name>> + <<set _overOutfit to true>> + <</if>> + <<set _underNaked to ($worn.under_lower.name is "naked" and $worn.under_upper.name is "naked")>> + <<set _middleNaked to ($worn.lower.name is "naked" and $worn.upper.name is "naked")>> + <<set _overNaked to ($worn.over_lower.name is "naked" and $worn.over_upper.name is "naked")>> + <<set _topless to ($worn.over_upper.name is "naked" and $worn.upper.name is "naked" and $worn.under_upper.name is "naked")>> + <<set _bottomless to ($worn.over_lower.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name is "naked")>> + <<set _fullyNaked to (_topless and _bottomless)>> <</widget>> <<widget "outfitChecksExposed">> @@ -1684,11 +1463,7 @@ <</widget>> <<widget "noClothingCheck">> -<<if $worn.over_head.name is "naked" and $worn.over_upper.name is "naked" and $worn.over_lower.name is "naked" and $worn.upper.name is "naked" and $worn.lower.name is "naked" and $worn.under_upper.name is "naked" and $worn.under_lower.name is "naked" and $worn.head.name is "naked" and $worn.neck.name is "naked" and $worn.face.name is "naked" and $worn.hands.name is "naked" and $worn.legs.name is "naked" and $worn.feet.name is "naked">> - <<set _nude to true>> -<<else>> - <<set _nude to false>> -<</if>> + <<set _nude to Object.values($worn).every(slot => ["butt_plug", "genitals"].includes(slot) or $worn[slot].name is "naked")>> <</widget>> <<widget "updateWornClothingLocation">> @@ -1707,29 +1482,6 @@ <</if>> <</widget>> -<<widget "resetClothingState">> -<<if _args[0] and _args[0] isnot "genitals">> - <<if setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].state_base>> - <<set $worn[_args[0]].state to setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].state_base>> - <</if>> - <<if setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].state_top_base>> - <<set $worn[_args[0]].state_top to setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].state_top_base>> - <</if>> - <<if setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].exposed_base>> - <<set $worn[_args[0]].exposed to setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].exposed_base>> - <</if>> - <<if setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].skirt>> - <<set $worn[_args[0]].skirt_down to 1>> - <</if>> - <<if setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].vagina_exposed_base>> - <<set $worn[_args[0]].vagina_exposed to setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].vagina_exposed_base>> - <</if>> - <<if setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].anus_exposed_base>> - <<set $worn[_args[0]].anus_exposed to setup.clothes[_args[0]][clothesIndex(_args[0],$worn[_args[0]])].anus_exposed_base>> - <</if>> -<</if>> -<</widget>> - <<widget "damageClothing">> <<if _args[0] is "face" and _args[1]>> <<set $worn.face.integrity -= _args[1]>> diff --git a/game/base-combat/end.twee b/game/base-combat/end.twee index c0247c073fc80b1d43799f0e7364896e66539159..8dd49778e6254dea8b021cded1bf913fc25d4a1b 100644 --- a/game/base-combat/end.twee +++ b/game/base-combat/end.twee @@ -589,13 +589,13 @@ <<set $beastname to "none">> -<<set $action_unclad_over_outfit to 0>> -<<set $action_unclad_over_upper to 0>> -<<set $action_unclad_over_lower to 0>> -<<set $action_unclad_outfit to 0>> -<<set $action_unclad_upper to 0>> -<<set $action_unclad_lower to 0>> -<<set $action_unclad_under_lower to 0>> +<<unset $action_unclad_over_outfit>> +<<unset $action_unclad_over_upper>> +<<unset $action_unclad_over_lower>> +<<unset $action_unclad_outfit>> +<<unset $action_unclad_upper>> +<<unset $action_unclad_lower>> +<<unset $action_unclad_under_lower>> <<set $clothingselector to 0>> <<unset $stealtextskip>> <<set $trueconsensual to 0>> diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee index 06760c420a4aba40dfa80bf2b5d5ed1858bf2dcb..090462cb35fbdb236c29d3966e70c174e2d84754 100644 --- a/game/base-system/widgets.twee +++ b/game/base-system/widgets.twee @@ -2831,23 +2831,21 @@ or _args[0] is "force">> <</widget>> <<widget "storecleanup">> - -<<set $action_unclad_over_outfit to 0>> -<<set $action_unclad_over_upper to 0>> -<<set $action_unclad_over_lower to 0>> -<<set $action_unclad_outfit to 0>> -<<set $action_unclad_upper to 0>> -<<set $action_unclad_lower to 0>> -<<set $action_unclad_under_outfit to 0>> -<<set $action_unclad_under_lower to 0>> -<<set $action_unclad_under_upper to 0>> -<<set $action_unclad_legs to 0>> -<<set $action_unclad_feet to 0>> -<<set $action_unclad_neck to 0>> -<<set $action_unclad_head to 0>> -<<set $action_unclad_face to 0>> -<<set $action_unclad_hands to 0>> - + <<unset $action_unclad_over_outfit>> + <<unset $action_unclad_over_upper>> + <<unset $action_unclad_over_lower>> + <<unset $action_unclad_outfit>> + <<unset $action_unclad_upper>> + <<unset $action_unclad_lower>> + <<unset $action_unclad_under_outfit>> + <<unset $action_unclad_under_lower>> + <<unset $action_unclad_under_upper>> + <<unset $action_unclad_legs>> + <<unset $action_unclad_feet>> + <<unset $action_unclad_neck>> + <<unset $action_unclad_head>> + <<unset $action_unclad_face>> + <<unset $action_unclad_hands>> <</widget>> <<widget "arousalpass">> diff --git a/game/overworld-town/loc-shop/clothing-v2.twee b/game/overworld-town/loc-shop/clothing-v2.twee index 3a8c0e05ca7c953fe605b1bbfcfbea41d5c9f7a6..365e9e155dc46653c1717cbbe11bfdcf6a1d13a1 100644 --- a/game/overworld-town/loc-shop/clothing-v2.twee +++ b/game/overworld-town/loc-shop/clothing-v2.twee @@ -666,6 +666,15 @@ <</link>> </div> <</if>> + <<if $worn.head.hood and isConnectedToHood($clothingShopSlot)>> + <!-- If selected item is a hood or selected item has a secondary hood piece --> + <div class="try-button div-link"><<toggleHood>></div> + <br> + <</if>> + <<if ["upper","lower"].includes($clothingShopSlot) and $worn.lower.name isnot "naked" and $worn.upper.outfitPrimary is undefined and !setup.clothes.upper[clothesIndex("upper",$worn.upper)].notuck>> + <div class="try-button div-link"><<toggleUpperTuck>></div> + <br> + <</if>> </div> <</if>> <<else>>