diff --git a/game/03-JavaScript/base-clothing.js b/game/03-JavaScript/base-clothing.js index 5ed6680f05d23473ec54276bed4b5838abdaa7c4..908a05ec3f22be934eddcdab9f47cd030927f55c 100644 --- a/game/03-JavaScript/base-clothing.js +++ b/game/03-JavaScript/base-clothing.js @@ -175,15 +175,15 @@ window.getClothingCost = getClothingCost; function tailorClothingCost(item, slot) { let cost = 0; if (setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary) { - let upperSlot = setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[0]; - let upperItem = setup.clothes[upperSlot].findIndex(x => x.name === setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[1]); - if (upperItem >= 0) cost = setup.clothes[upperSlot][upperItem].cost * V.clothesPrice * .2; + const upperSlot = setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[0]; + const upperItem = setup.clothes[upperSlot].findIndex(x => x.name === setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[1]); + if (upperItem >= 0) cost = setup.clothes[upperSlot][upperItem].cost * V.clothesPrice * 0.2; } else if (setup.clothes[slot][clothesIndex(slot, item)].outfitPrimary) { - cost = setup.clothes[slot][clothesIndex(slot, item)].cost * V.clothesPrice * .8; + cost = setup.clothes[slot][clothesIndex(slot, item)].cost * V.clothesPrice * 0.8; } else { cost = setup.clothes[slot][clothesIndex(slot, item)].cost * V.clothesPrice; } - + if ( setup.clothes.under_lower.findIndex(x => x.name === item.name && x.modder === item.modder) >= 0 || setup.clothes.under_upper.findIndex(x => x.name === item.name && x.modder === item.modder) >= 0 @@ -340,7 +340,7 @@ function getVisibleClothesList() { if (V.worn.over_lower.exposed >= 2 || V.overlowerwetstage >= 3) visibleClothes.push(V.worn.lower); if (V.worn.upper.exposed >= 2 || V.upperwetstage >= 3) visibleClothes.push(V.worn.under_upper); if (V.worn.lower.exposed >= 2 || V.lowerwetstage >= 3) visibleClothes.push(V.worn.under_lower); - if (V.worn.under_lower.exposed >= 2 || V.underlowerwetstage >= 3) visibleClothes.push(V.worn.genitals); + if (V.worn.under_lower.exposed >= 1 || V.underlowerwetstage >= 3) visibleClothes.push(V.worn.genitals); return visibleClothes; } window.getVisibleClothesList = getVisibleClothesList; diff --git a/game/base-system/named-npcs.twee b/game/base-system/named-npcs.twee index 37456c710d5101bef51161218043d1d1ba8c60f7..5b4895098b5da813ca1fccb7cec816ec070fb936 100644 --- a/game/base-system/named-npcs.twee +++ b/game/base-system/named-npcs.twee @@ -432,6 +432,9 @@ Zohar <<else>> //Mason is the swimming teacher at the local school. She's the youngest teacher, only a few years older than some of the students. Her toned body is naturally shown off during class, but if she notices the way she's leered at, she gives no indication.// <</if>> + <<set $NPCName[_i].chastityKeyCarried to 0>> /* Mason is carrying the key to unlock Winter's Chastity belt. 1 is carried, 2 player knows it is carried */ + <<set $NPCName[_i].chastityRemoved to 0>> /* Number of chastity devices Mason has removed */ + <<set $NPCName[_i].chastityRemovalDeclined to 0>> /* Whether you've declined Mason's offer to remove it (prompts more passive checking). Resets when a device is removed */ <<case Winter>> <<if $NPCName[_i].pronoun is "m">> //Winter teaches history at the local school. He's an older gentleman, well-groomed and sophisticated.// diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee index e33debc024f1f157bd79e07bed2a6b03885a1d0c..ab4f4e31cabba7f89d8b7a7f02086a1abc8a48a2 100644 --- a/game/base-system/widgets.twee +++ b/game/base-system/widgets.twee @@ -3871,6 +3871,7 @@ <<set $NPCName[_i].dom = Math.clamp($NPCName[_i].dom, -50, 50)>> <<set _i to $NPCNameList.indexOf("Mason")>> <<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, -50, 50)>> + <<set $NPCName[_i].lust = Math.clamp($NPCName[_i].lust, -50, 50)>> <<set $NPCName[_i].dom = Math.clamp($NPCName[_i].dom, -50, 50)>> <<set _i to $NPCNameList.indexOf("Sam")>> <<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, -50, 50)>> diff --git a/game/overworld-forest/loc-lake/main.twee b/game/overworld-forest/loc-lake/main.twee index af4309c4126d3e7f891f0e4aa77fefba5b6efc14..e3965124a5d6f43e8ae821506c25927bb96c04bc 100644 --- a/game/overworld-forest/loc-lake/main.twee +++ b/game/overworld-forest/loc-lake/main.twee @@ -467,7 +467,7 @@ You are at the bus stop beside the lake. The road from town terminates here, end <</if>> <<eventlakesafe>> <<lakereturnjourney>> - <<link [[Soth to shore (0:10)|Lake Shore]]>><<pass 10>><</link>> + <<link [[South to shore (0:10)|Lake Shore]]>><<pass 10>><</link>> <br><br> <<foresticon>><<link [[Forest (0:10)|Forest]]>><<pass 10>><</link>> diff --git a/game/overworld-forest/loc-lake/mason.twee b/game/overworld-forest/loc-lake/mason.twee index 6b9f527054346a1e47779ebb53edcbe93693f9d1..9e51c89bce1886e79371fdcea815a501b81d2ee5 100644 --- a/game/overworld-forest/loc-lake/mason.twee +++ b/game/overworld-forest/loc-lake/mason.twee @@ -31,7 +31,7 @@ You swim into the middle of the lake. There Mason swims in a wide circle. <<He>> <<link [[Pretend you haven't noticed|Lake Mason Pretend]]>><<npcincr Mason love 1>><</link>><<glove>> <br> - <<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>> + <<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<ldom>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>> <br> <<link [[Act nonchalant|Lake Mason Nonchalant]]>><</link>> <br> @@ -58,7 +58,7 @@ You swim into the middle of the lake. There Mason swims in a wide circle. <<He>> <<link [[Pretend you haven't noticed|Lake Mason Pretend]]>><<npcincr Mason love 1>><</link>><<glove>> <br> - <<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>> + <<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<ldom>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>> <br> <<link [[Act nonchalant|Lake Mason Nonchalant]]>><</link>> <br> @@ -173,7 +173,7 @@ You swim towards Mason. <<He>> doesn't try to outswim you, and starts treading w <br> <</if>> <<if $promiscuity gte 15>> - <<link [[Ask to see|Lake Mason Flirt]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<npcincr Mason dom -1>><</link>><<promiscuous2>><<llove>><<glust>> + <<link [[Ask to see|Lake Mason Flirt]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<ldom>><<npcincr Mason dom -1>><</link>><<promiscuous2>><<llove>><<glust>> <br> <</if>> @@ -354,6 +354,12 @@ You follow one of the streams feeding the lake, to the pond Mason likes to relax <<effects>> <<flaunting>> you sit beside the pond. Mason opens <<his>> eyes when <<he>> hears you, but shuts them again when <<he>> sees your <<lewdness>>. +<<if !C.npc.Mason.chastityKeyCarried and playerChastity() and $worn.genitals.origin is "Winter" and (C.npc.Mason.love gte 5 or C.npc.Mason.lust gte 10) + and getVisibleClothesList().find(o => o === V.worn.genitals)>> + After a moment, <<he>> opens <<his>> eyes again and stares at your $worn.genitals.name. + <<He>> stares hard enough that it briefly becomes uncomfortable before <<he>> catches <<himself>> and averts <<his>> gaze with a blush. + <<set C.npc.Mason.chastityKeyCarried to 1>><<set $daily.masonChastityRemovalDeclined to 1>> +<</if>> <<if $exposed gte 2>> <<if $daily.ex.mason isnot 1>> <<exhibitionism5>> @@ -390,6 +396,12 @@ You follow one of the streams feeding the lake, to the pond Mason likes to relax <<effects>><<water>> <<flaunting>> you slip into the pond. Mason opens <<his>> eyes when <<he>> hears the splash, but shuts them again when <<he>> sees your <<lewdness>>. +<<if !C.npc.Mason.chastityKeyCarried and playerChastity() and $worn.genitals.origin is "Winter" and (C.npc.Mason.love gte 5 or C.npc.Mason.lust gte 10) + and getVisibleClothesList().find(o => o === V.worn.genitals)>> + After a moment, <<he>> opens <<his>> eyes again and stares at your $worn.genitals.name. + <<He>> stares hard enough that it briefly becomes uncomfortable before <<he>> catches <<himself>> and averts <<his>> gaze with a blush. + <<set C.npc.Mason.chastityKeyCarried to 1>><<set $daily.masonChastityRemovalDeclined to 1>> +<</if>> <<if $exposed gte 2>> <<if $daily.ex.mason isnot 1>> <<exhibitionism5>> @@ -526,7 +538,9 @@ Mason seems unsure, but nods. "If you're sure. Be careful." <<He>> dries <<himse <br> <<link [[Say you'll be okay|Mason Walk Refuse]]>><</link>> <br> - + <<elseif playerChastity() and $worn.genitals.origin is "Winter" and C.npc.Mason.chastityKeyCarried and !$daily.masonChastityRemovalDeclined + and getVisibleClothesList().find(o => o === V.worn.genitals) and (C.npc.Mason.love gte 10 or C.npc.Mason.lust gte 15)>> + <<include "Mason Chastity Prompt">> <<else>> <<link [[Chat (0:30)|Mason Pond Chat]]>><<npcincr Mason love 1>><<pass 30>><<stress -6>><</link>><<glove>><<lstress>> <br> @@ -639,3 +653,235 @@ Mason shakes <<his>> head. "I can't be negligent," <<he>> says. "I don't care if <<link [[Next|Lake Depths Ice]]>><<endevent>><<set $eventskip to 1>><</link>> <br> + + +:: Mason Chastity Prompt +<!-- no effects, this is an alternative passage ending --> + +<<if $location is "pool">> + As you get closer, <<he>> points to your $worn.genitals.name and blushes, +<<else>> + Pointing to your $worn.genitals.name and blushing, <<he>> says, +<</if>> +<<if !C.npc.Mason.chastityRemovalDeclined>> + <<switch C.npc.Mason.chastityRemoved>> + <<case 0 undefined null>> + "Y-you know, I might have something for that." + <<He>> follows up with a hasty, "Only if you want, of course." + <<case 1>> + "What have you been doing to draw the ire of Old Winter to end up in one of these again? Still, I should be able to remove it." + <<He>> follows up with a hasty statement, "Only if you want, of course." + <<default>> + "I don't understand. What have you been doing to keep getting caught in those things? Old Winter only ever ended up doing that to me when I..." + <br><br> + + Mason's face gets even redder, which you did not think possible, as <<he>> changes the subject. "N-nevermind! The point is, I should be able to remove it again if you like." + <</switch>> +<<else>> + <<print [ + '"Y-you know, I might have something for that. Just let me know,"', + '"M-my offer still stands. If you need out of that, I could help,"', + '"Talk to me if you ever change your mind about that thing,"', + ].random()>> says Mason while pointing at your $worn.genitals.name. +<</if>> +<br><br> + + +<<link [[No thanks|Mason Chastity Decline]]>><<set C.npc.Mason.chastityRemovalDeclined to 1>><<set $daily.masonChastityRemovalDeclined to 1>><<set $weekly.masonChastityRemovalDeclined to 1>><</link>> +<br> +<<if C.npc.Mason.chastityKeyCarried is 1 or $exhibitionism lt 75>> + <<link [[Ask|Mason Chastity Ask]]>><</link>> +<<elseif $exhibitionism gte 75>> + <<link [[Accept|Mason Chastity Accept]]>> + <<arousal 600>><<exhibitionism5>><<set C.npc.Mason.chastityRemovalDeclined to 0>><<run delete $daily.masonChastityRemovalDeclined>><<run delete $weekly.masonChastityRemovalDeclined>> + <</link>><<garousal>><<exhibitionist5>> +<<else>> + <span class="purple">You aren't lewd enough to let Mason strip you.</span> +<</if>> +<br> + + +:: Mason Chastity Decline +<<effects>> +"No thanks," you say while shifting to cover the $worn.genitals.name a little. +<br><br> + +"I understand," says Mason blushing. "I just thought I'd offer." <<He>> cannot help but glance at your $worn.genitals.name once more before turning away. <<npcincr Mason lust 1>><<glust>> +<br><br> +<<if $location is "pool">> /* Exit to Pool */ + <<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>> +<<else>> /* Exit to Mason Pond */ + <<mason_actions>> +<</if>> +<br> + + +:: Mason Chastity Ask +<<effects>><<set C.npc.Mason.chastityKeyCarried to 2>> +"Like what?" you ask. +<br><br> + +Mason pulls out a small key. "You've had a run in with Old Winter. I think this might fit. W-would you mind if I tried?" +<br><br> + +<<link [[No thanks|Mason Chastity Decline]]>><<set C.npc.Mason.chastityRemovalDeclined to 1>><<set $daily.masonChastityRemovalDeclined to 1>><<set $weekly.masonChastityRemovalDeclined to 1>><</link>> +<br> +<<if $exhibitionism gte 75>> + <<link [[Accept|Mason Chastity Accept]]>> + <<arousal 600>><<exhibitionism5>><<set C.npc.Mason.chastityRemovalDeclined to 0>><<run delete $daily.masonChastityRemovalDeclined>><<run delete $weekly.masonChastityRemovalDeclined>> + <</link>><<garousal>><<exhibitionist5>> +<<else>> + <br><span class="purple">You aren't lewd enough to let Mason strip you.</span> +<</if>> +<br> + + +:: Mason Chastity Accept +<<effects>> +<<if C.npc.Mason.chastityRemoved is undefined>><<set C.npc.Mason.chastityRemoved to 0>><</if>> + +/* Player */ +<<switch C.npc.Mason.chastityRemoved>> + <<case 0>> + <<if $speech_attitude is "meek">> + "O-only if you think it will fit," you say, blushing and averting your eyes. + <<elseif $speech_attitude is "bratty">> + "I bet it would fit," you say, smiling and tilting your head suggestively. + <<else>> + "Do you think it will fit?" you ask as you look at the key and back to Mason. + <</if>> + <<case 1>> + <<if $speech_attitude is "meek">> + "Y-you sure you don't just want another peek?" you ask, blushing and averting your eyes. + <<elseif $speech_attitude is "bratty">> + "I bet you just want another peek," you say, smiling and tilting your head suggestively. + <<else>> + "I don't mind letting you see, have another look," you say as you look at the key and back to Mason. + <</if>> + <<default>> + <<if $speech_attitude is "meek">> + "I-I'm ok with letting you peek again. M-maybe you can even touch if you want," you say, blushing and averting your eyes. + <<elseif $speech_attitude is "bratty">> + "Are you sure you are not just trying to get another peek? Maybe I'll even let you touch if you like," you say, smiling and tilting your head suggestively. + <<else>> + "Sure, I can let you have another peek and maybe let you touch if you like," you say with a smile. + <</if>> +<</switch>> +<br><br> + +/* Action */ +<<He>> tries to ignore your comment but unconsciously licks <<his>> lips. <<He>> +<<if $location is "pool">> + pulls you off to the side of the pool where there is at least a slight amount of privacy and +<</if>> +brings the key to your $worn.genitals.name with trembling fingers. +<<if $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>> + <<switch random(0,1)>> + <<case 0>> + You thrust your hips forward, letting Mason have full access to your $worn.genitals.name. + <<default>> + You spread your legs, giving Mason full access to your $worn.genitals.name. + <</switch>> +<<else>> + <<set _worn to [$worn.over_lower, $worn.lower, $worn.under_lower].filter(w => w.name !== "naked").map(w => w.name).formatList({useOxfordComma: true})>> + You pull off your <<print $underlowerwetstage gte 3 or $overlowerwetstage gte 3 or $lowerwetstage gte 3 ? "soaked " : "">>_worn to give Mason full access to your $worn.genitals.name. +<</if>> +The key fits perfectly, and with a loud click, the $worn.genitals.name comes off, exposing your <<genitals 1>>. +<<set $worn.genitals.type.push("broken")>><<genitalsruined>> +<br><br> + +/* Reaction */ +<<switch C.npc.Mason.chastityRemoved>> + <<case 0>> + Mason marvels at your <<genitals 2>> for longer than <<he>> means to and, upon realising it, closes <<his>> eyes and quickly turns away. + "Well, it does fit, so you're welcome. It's not the first time I've had a run in with one of these." + <<npcincr Mason lust 5>><<gglust>><<npcincr Mason love 1>><<glove>> + <<case 1>> + Mason stares at your <<genitals 2>> for longer than intended, and <<his>> hand raises, as if to touch you. When <<he>> realises, <<he>> pulls back <<his>> hand and turns away, closing <<his>> eyes. + "You're welcome, though you should try to be more careful. Winter has... unique interests." + <<npcincr Mason lust 5>><<gglust>><<npcincr Mason love 1>><<glove>> + <<default>> + Mason marvels at your <<genitals 2>> for longer than <<he>> means to. As if it had a mind of its own, <<his>> hand raises. +<</switch>> +<<set C.npc.Mason.chastityRemoved += 1>> +<br><br> + +/* Options */ +<<if C.npc.Mason.chastityRemoved gte 3>> + <<if $promiscuity lt 35>> + <span class="blue">You aren't promiscuous enough to take things any further.</span> + <<else>> + <<link [[Grab Mason's Hand|Mason Chastity Grab]]>><</link>><<handholdingvirginitywarning>><<NPCvirginitywarning "Mason" "handholding">> + <</if>> + <br> + <<if $location is "pool">> /* Exit to Pool */ + <<link [[Do Nothing|Mason Chastity Escape]]>><<endevent>><</link>> + <<else>> /* Exit to Mason Pond */ + <<mason_actions>> + <</if>> +<<else>> + <<if $location is "pool">> + <<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>> + <<else>> + <<mason_actions>> + <</if>> +<</if>> + +<br> + + +:: Mason Chastity Escape +<<effects>> +Upon realising what <<he>> is about to do, Mason pulls <<his>> hand back and closes <<his>> eyes while quickly turning away. +"You're welcome, though you should try to be more careful. Winter has... unique interests." +<<npcincr Mason lust 5>><<gglust>><<npcincr Mason love 1>><<glove>> +<br><br> + +<<if $location is "pool">> + <<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>> +<<else>> + <<mason_actions>> +<</if>> + +:: Mason Chastity Grab +<<effects>> + +Before Mason loses <<his>> nerve, you catch <<his>> hand and pull it toward your <<genitals>>. <<takeHandholdingVirginity "Mason">> +<br><br> + +<<if C.npc.Mason.love gte 20 or C.npc.Mason.lust gte 25>> + <<set _part to $player.penisExist and $player.vaginaExist ? ["penis","pussy"].random() : $player.penisExist ? "penis" : "pussy">> + <<He>> panics and attempts to pull <<his>> hand back, but your grip is too firm. + When <<his>> fingers touch your <<genitals 2>>, <<his>> struggling stops, but <<his>> hand is shaking. + You gently guide <<his>> trembling fingers to your _part. Mason's eyes go wide as <<he>> + <<if _part is "pussy">>probes your pussy. + <<else>>grasps your penis.<</if>> + With timid fingers, <<he>> slowly begins to + <<if _part is "pussy">>rub your pussy. + <<else>>stroke your penis.<</if>> + <<npcincr Mason lust 5>><<gglust>><<npcincr Mason love -2>><<llove>><<npcincr Mason dom -1>><<arousal 1800 _part>><<ggarousal>> + <br><br> + + <<if $arousal gte $arousalmax>> + <<orgasm>> + You shudder as a wave of pleasure washes over you and you cum on Mason's hand. + <<He>> does not immediately remove <<his>> hand, though, and instead gives you a few more moments of pleasure before withdrawing. + <br><br> + + Mason inspects <<his>> hand and catches your eye. <<He>> quickly turns away, "We shouldn't have done that." + <<else>> + Mason continues to + <<if _part is "pussy">>rub your pussy + <<else>>stroke your penis<</if>> + for a few moments before finally pulling <<his>> hand away. <<He>> catches your eye and quickly turns away, "We shouldn't have done that." + <</if>> +<<else>> + <<He>> panics and pulls <<his>> hand from your grip. Mason scowls at you and opens <<his>> mouth to protest, but thinks better of it and turns away with a blush.<<npcincr Mason lust 1>><<glust>><<npcincr Mason love -1>><<llove>><<gdom>><<npcincr Mason dom 1>> +<</if>> +<br><br> + +<<if $location is "pool">> + <<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>> +<<else>> + <<mason_actions>> +<</if>> diff --git a/game/overworld-town/loc-school/changing-rooms.twee b/game/overworld-town/loc-school/changing-rooms.twee index 2c27682b1540d15becacf9704f89c636e428d4fe..aaca3f2e91c3489936ffa31835942cb2ff471f1a 100755 --- a/game/overworld-town/loc-school/changing-rooms.twee +++ b/game/overworld-town/loc-school/changing-rooms.twee @@ -678,7 +678,7 @@ Mason struggles to remain silent as you pump <<his>> cock with your hand. <br><br> At that, Mason's body shudders, and <<his>> <<print $NPCList[0].penisdesc>> twitches in your palm. You aim <<his>> penis away from you and begin to stroke it much more quickly. -<span class="lewd">Thick ropes of cum</span> erupt from the tip, splattering against the locker wall.<<lllust>><<npcincr Mason lust -10>> +<span class="lewd">Thick ropes of cum</span> erupt from the tip, splattering against the locker wall.<<lllust>><<npcincr Mason lust -10>><<ldom>><<npcincr Mason dom -2>> <br><br> <<link [[Next|School Pool Locker Hand End]]>><</link>> @@ -785,7 +785,7 @@ Mason struggles to remain silent as you slide your fingers into <<his>> slit. <</if>> <br><br> -At that, Mason's body shudders, <span class="lewd">and lewd fluid runs over your finger.</span> A soft moan escapes <<his>> lips. You're reminded that <<hes>> not much older than you.<<lllust>><<npcincr Mason lust -10>> +At that, Mason's body shudders, <span class="lewd">and lewd fluid runs over your finger.</span> A soft moan escapes <<his>> lips. You're reminded that <<hes>> not much older than you.<<lllust>><<npcincr Mason lust -10>><<ldom>><<npcincr Mason dom -2>> <br><br> <<link [[Next|School Pool Locker Hand End]]>><</link>> diff --git a/game/overworld-town/loc-school/classes/swimming.twee b/game/overworld-town/loc-school/classes/swimming.twee index d62944ae6278d2f05d8065e232afa1b46d06fbff..32352359745ed0b67506e92ac17ae5c7fb9e310b 100644 --- a/game/overworld-town/loc-school/classes/swimming.twee +++ b/game/overworld-town/loc-school/classes/swimming.twee @@ -1,6 +1,9 @@ :: School Pool <<set $outside to 0>><<set $location to "pool">><<schooleffects>><<effects>> +<<set _masonCanUnlock to playerChastity() and $worn.genitals.origin is "Winter" and C.npc.Mason.chastityKeyCarried and !$weekly.masonChastityRemovalDeclined and !$daily.masonChastityRemovalDeclined + and getVisibleClothesList().find(o => o === V.worn.genitals) and (C.npc.Mason.love gte 10 or C.npc.Mason.lust gte 15)>> + <<if $poolroomstate is "own">> <<if Time.minute gte 45>> <<if $daily.school.attended.swimming>> @@ -25,25 +28,26 @@ <<npc Mason>><<person1>> <<if $daily.school.attended.swimming>> You rejoin the swimming lesson. - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "It wouldn't be safe to let you swim like that." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + <br><br> + + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> <</if>> - <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> <br> <<elseif Time.minute lte 5>> You enter the swimming pool room. Mason stands by the pool, covering <<his>> body as <<he>> tries to encourage students to stretch while the rest of the class pours in. - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - <<He>> notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "T-that's a little too much." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> - <</if>> - <br><br> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <</if>> <br> <<else>> @@ -58,14 +62,15 @@ <<gdelinquency>><<detention 1>> <</if>> <br><br> - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Wait! It wouldn't be safe to let you swim like that." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + You climb into the water as Mason continues the lesson. + <br><br> + + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> <</if>> - You climb into the water as Mason continues the lesson. - <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> <br> <</if>> <<elseif $exposed gte 2 and $swimall isnot 1>> @@ -78,18 +83,21 @@ <<npc Mason>><<person1>> <<if $daily.school.attended.swimming>> You rejoin the swimming lesson. - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Well... obviously it wouldn't be safe to let you swim like that." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> - <</if>> + <<schoolpoolmasoncheck>> <br> + <<else>> + You enter the swimming pool room. + Mason stands by the pool, encouraging students to stretch while waiting for the rest of the class. <</if>> - You enter the swimming pool room. - Mason stands by the pool, encouraging students to stretch while waiting for the rest of the class. + <<if $exposed gte 2>> - <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <br> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + <br><br> + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <</if>> <<else>> <br><br> <<He>> glares at you. "So, thanks to a certain someone, I'm not allowed to let you in the pool unless you're all nude." @@ -102,27 +110,27 @@ <<npc Mason>><<person1>> <<if $daily.school.attended.swimming>> You rejoin the swimming lesson. - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Well... obviously it wouldn't be safe to let you swim like that." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + <br><br> + + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> <</if>> - <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> <br> <<elseif Time.minute lte 5>> You enter the swimming pool room. Mason stands by the pool, encouraging students to stretch while waiting for the rest of the class. - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - <<He>> instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "I can't let you swim like that." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> - <</if>> - <br><br> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <</if>> <br> - <<else>> You enter the swimming pool room. @@ -135,17 +143,16 @@ <<gdelinquency>><<detention 1>> <</if>> <br><br> - <<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> - Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Wait! It wouldn't be safe to let you swim like that." - <br> - <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> - <</if>> - You climb into the water as Mason continues the lesson. - <br><br> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + You climb into the water as Mason continues the lesson. + <br><br> - <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> + <</if>> <br> - <</if>> <<else>> You enter the swimming pool room. @@ -155,38 +162,42 @@ <<else>> "You can't swim dressed like that! <</if>> - Go get changed." - <br><br> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <<else>> + Go get changed." + <br><br> - <<if $exhibitionism gte 75 and $swimall isnot 1>> - <<link [[Ask to swim naked|School Pool Ask Naked]]>><<fameexhibitionism 15>><<endevent>><<set $swimnudecounter += 1>><</link>><<exhibitionist5>> - <br> - <</if>> - <<if $player.gender is "f" or ($player.gender is "h" and $player.gender_appearance is "f")>> - <<if !$daily.swimCrossdressPermission>> - <<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><</link>> + <<if $exhibitionism gte 75 and $swimall isnot 1>> + <<link [[Ask to swim naked|School Pool Ask Naked]]>><<fameexhibitionism 15>><<endevent>><<set $swimnudecounter += 1>><</link>><<exhibitionist5>> <br> <</if>> - <<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>> - <br> - <<else>> - <<if !$daily.swimCrossdressPermission>> - <<if ($worn.upper.type.includes("naked") and $worn.under_upper.type.includes("naked")) and - ($worn.lower.type.includes("swim") or ($worn.lower.type.includes("naked") and $worn.under_lower.type.includes("swim")))>> - <<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><<set $phase to 1>><</link>> - <<else>> - <<link [[Say you only have a girl's swimming costume|School Pool Wrong]]>><</link>> + <<if $player.gender is "f" or ($player.gender is "h" and $player.gender_appearance is "f")>> + <<if !$daily.swimCrossdressPermission>> + <<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><</link>> + <br> + <</if>> + <<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>> + <br> + <<else>> + <<if !$daily.swimCrossdressPermission>> + <<if ($worn.upper.type.includes("naked") and $worn.under_upper.type.includes("naked")) and + ($worn.lower.type.includes("swim") or ($worn.lower.type.includes("naked") and $worn.under_lower.type.includes("swim")))>> + <<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><<set $phase to 1>><</link>> + <<else>> + <<link [[Say you only have a girl's swimming costume|School Pool Wrong]]>><</link>> + <</if>> + <br> <</if>> + <<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>> <br> <</if>> - <<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>> <br> + <<maleicon>><<link [[Boys' changing room|School Boy Changing Room]]>><<endevent>><</link>> + <br> + <<femaleicon>><<link [[Girls' changing room|School Girl Changing Room]]>><<endevent>><</link>> + <br><br> <</if>> - <br> - <<maleicon>><<link [[Boys' changing room|School Boy Changing Room]]>><<endevent>><</link>> - <br> - <<femaleicon>><<link [[Girls' changing room|School Girl Changing Room]]>><<endevent>><</link>> - <br><br> <</if>> <<elseif $poolroomstate is "other">> @@ -238,6 +249,9 @@ :: School Pool Ask Naked <<set $outside to 0>><<set $location to "pool">><<schoolpoolundress>><<schooleffects>><<effects>><<exposure>> +<<set _masonCanUnlock to playerChastity() and $worn.genitals.origin is "Winter" and C.npc.Mason.chastityKeyCarried and !$weekly.masonChastityRemovalDeclined and !$daily.masonChastityRemovalDeclined + and getVisibleClothesList().find(o => o === V.worn.genitals) and (C.npc.Mason.love gte 10 or C.npc.Mason.lust gte 15)>> + <<if $swimnudecounter lte 1>> <<npc Mason>> @@ -249,10 +263,10 @@ "Can I swim naked?" you ask. <</if>> <br><br> - + + <<schoolpoolmasoncheck>> <<person1>><<His>> blush deepens as the class breaks into excitement. "F-fine," <<he>> says. <<He>> turns and does <<his>> best to quiet the other students. - <br><br> <<elseif $swimnudecounter lte 2>> <<npc Mason>><<generatey2>> @@ -270,7 +284,6 @@ <br><br> <<person2>>"It's unfair if only <<pshe>> gets to swim naked," <<he>> says. Mason is too stunned to respond, and lets you both enter the pool. - <br><br> <<elseif $swimnudecounter lte 3>> <<npc Mason>><<generatey2>><<generatey3>><<generatey4>> @@ -289,7 +302,6 @@ <<else>> "I'm not the only one who hates these swimsuits" you say. <</if>> - <br><br> <<elseif $swimnudecounter lte 4>> <<npc Mason>><<generatey2>><<generatey3>><<generatey4>> @@ -299,35 +311,34 @@ A <<person2>><<person>> waves at you, <<his>> legs kicking in the water at the edge, while <<person1>> Mason tries <<his>> best to distract the clothed students from the gaggle of nude swimmers. - <br><br> <<if $cool gte 80>> + <br><br> Several of them are doing stretches at the edge of the pool, and a <<person3>><<person>> spots you, and points you out to a <<person4>><<person>>, who both wave at you. - <br><br> <</if>> -<<elseif $rng gte 51>> - <<npc Mason>><<generatey2>><<generatey3>> - - <<person1>>Almost the entire class is now swimming naked. A few holdouts, including a <<person2>><<person>> and a <<person3>><<person>>, - struggle to avoid looking as Mason tries to teach. - <br><br> <<else>> <<npc Mason>><<generatey2>><<generatey3>> <<person1>>Almost the entire class is now swimming naked. A few holdouts, including a <<person2>><<person>> and a <<person3>><<person>>, struggle to avoid looking as Mason tries to teach. - <br><br> <</if>> +<br><br> -<<person1>><<He>> does little to temper their excitement. -<<if $exposed gte 2>> - <<flaunting>> you feel their eyes on you as you slip into the water. +<<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> <<else>> - <<flaunting>> you feel their eyes on you as you <<nervously>> strip down to your <<lewdness>>, before slipping into the water. <<covered>> -<</if>><<exhibitionism5>> + <<person1>><<He>> does little to temper their excitement. + <<if $exposed gte 2>> + <<flaunting>> you feel their eyes on you as you slip into the water. + <<else>> + <<flaunting>> you feel their eyes on you as you <<nervously>> strip down to your <<lewdness>>, before slipping into the water. <<covered>> + <</if>><<exhibitionism5>> + <br><br> + + <<link [[Next|Swimming Lesson]]>><<endevent>><</link>> +<</if>> -<<link [[Next|Swimming Lesson]]>><<endevent>><</link>> :: Pool Leighton Nude Punishment <<set $outside to 0>><<set $location to "pool">><<schooleffects>><<effects>><<set $swimall to 1>><<underlowerstrip>><<underupperstrip>> diff --git a/game/overworld-town/loc-school/widgets.twee b/game/overworld-town/loc-school/widgets.twee index feeb308f261b9a8398aa15553dd38fd21fd415ff..c27f8cf035c9efc28e120e6ec5663dbe403cd0cc 100644 --- a/game/overworld-town/loc-school/widgets.twee +++ b/game/overworld-town/loc-school/widgets.twee @@ -2576,6 +2576,10 @@ <<widget "schoolpoolexposed">> <<if $schoolstate is "fifth" and $swimnudecounter gte 1>> You step into the pool room. <<covered>> + <<schoolpoolmasoncheck>> + <<if _masonCanUnlock>> + <<include "Mason Chastity Prompt">> + <</if>> <br><br> <<else>> <<npc Mason>><<generatey2>><<generatey3>>You take a deep breath, and walk into the pool room with your <<lewdness>> on display. @@ -2605,10 +2609,34 @@ Mason refuses to look at you. <<Hes>> blushing. "Get back in the changing room. P-please." <br><br> <</if>> - <<maleicon>><<link [[Boy's changing room|School Boy Changing Room]]>><<endevent>><</link>> - <br> - <<femaleicon>><<link [[Girl's changing room|School Girl Changing Room]]>><<endevent>><</link>> - <br> + <<if !_masonCanUnlock or $schoolstate isnot "fifth">> + <<maleicon>><<link [[Boy's changing room|School Boy Changing Room]]>><<endevent>><</link>> + <br> + <<femaleicon>><<link [[Girl's changing room|School Girl Changing Room]]>><<endevent>><</link>> + <br> + <</if>> +<</widget>> + +<<widget "schoolpoolmasoncheck">> + <<set _anyBound to $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> + <<if _anyBound>> + Mason instantly notices your bound <<boundBodyParts>>. + <<print [ + `"It wouldn't be safe to let you swim like that."`, + `"T-that's a little too much."`, + `"Well... obviously it wouldn't be safe to let you swim like that."`, + `"I can't let you swim like that."` + ].random()>> + <br><br> + <<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>> + <</if>> + <<if !C.npc.Mason.chastityKeyCarried and playerChastity() and $worn.genitals.origin is "Winter" and (C.npc.Mason.love gte 5 or C.npc.Mason.lust gte 10) + and getVisibleClothesList().find(o => o === V.worn.genitals)>> + <<if _anyBound>><<He>> + <<else>>Mason<</if>> cannot help but notice and stare at the $worn.genitals.name. + <<He>> stares hard enough that it briefly becomes uncomfortable before <<he>> catches <<himself>> and turns away with a blush. + <<set C.npc.Mason.chastityKeyCarried to 1>><<set $daily.masonChastityRemovalDeclined to 1>> + <</if>> <</widget>> :: Lesson Effects Widget [widget] diff --git a/t3lt.twee-config.yml b/t3lt.twee-config.yml index 43c5d3a4fcfd7d79795fe94887ef4f40127ee5a2..d2c7c2d9990ecaa27e848ee5f0d8a8dbde1872ec 100644 --- a/t3lt.twee-config.yml +++ b/t3lt.twee-config.yml @@ -6364,6 +6364,17 @@ sugarcube-2: name: schoolChangingRoomLinks schoolPoolSwap: name: schoolPoolSwap + schoolpoolmasoncheck: + name: schoolpoolmasoncheck + description: |- + Check for bindings and have Mason remove them immediately. + Also has Mason make a mental note to bring chastity key from now on. + Outputs text. + + Usage: + ``` + <<schoolpoolmasoncheck>> + ``` schoolShop-main: name: schoolShop-main schoolVendingMachine: