diff --git a/DolSettingsExport.json b/DolSettingsExport.json index f8bf29266b417e1a6eb3a19053bc742c7427cb96..439af31aab27cc89c520944647b92facfca45028 100644 --- a/DolSettingsExport.json +++ b/DolSettingsExport.json @@ -159,6 +159,7 @@ DolSettingsExport = { "Great Hawk":{"pronoun":"none","gender":"none", "penissize":0, "breastsize":0}, "Wren":{"pronoun":"none","gender":"none", "penissize":0, "breastsize":0}, "Sydney":{"pronoun":"none","gender":"none", "penissize":0, "breastsize":0}, + "Ivory Wraith":{"pronoun":"none","gender":"none", "penissize":0, "breastsize":0}, } } diff --git a/game/04-Variables/npcNamed.twee b/game/04-Variables/npcNamed.twee index e6bb753d550282f765b3e333662a1e19951ca228..bec32ad3160dc2ba3e40f3a9f60581771e242ee5 100644 --- a/game/04-Variables/npcNamed.twee +++ b/game/04-Variables/npcNamed.twee @@ -17,14 +17,14 @@ <!-- Draft default pronoun list. Random selection is part of initNPCgender widget --> /% <<set _pro to ["m","f","f","m","m","m","m","m","f","f","m","m","f","m","f","m","m","m","f","m","m","m","m","m","f","m"]>> %/ -<<set _tit to ["businessperson", "caretaker", "brothel owner", "dance coach", "club owner","English teacher","hunter", "shopkeeper", "doctor", "pious", "loner", "criminal", "headteacher", "swimming teacher", "sewer dweller", "maths teacher", "orphan", "cafe owner", "science teacher", "bully", "history teacher", "alpha", "photographer", "mayor", "farmer", "farmhand", "terror", "smuggler", "faithful"]>> +<<set _tit to ["businessperson", "caretaker", "brothel owner", "dance coach", "club owner","English teacher","hunter", "shopkeeper", "doctor", "pious", "loner", "criminal", "headteacher", "swimming teacher", "sewer dweller", "maths teacher", "orphan", "cafe owner", "science teacher", "bully", "history teacher", "alpha", "photographer", "mayor", "farmer", "farmhand", "terror", "smuggler", "faithful", "reflection"]>> -<<set _ins to ["weak", "weak", "looks", "ethics", "ethics", "ethics", "looks", "weak", "skill", "ethics", "weak", "skill", "skill", "ethics", "weak", "ethics", "ethics", "ethics", "ethics", "looks", "skill", "weak", "skill", "looks", "looks", "weak", "looks", "ethics", "skill"]>> +<<set _ins to ["weak", "weak", "looks", "ethics", "ethics", "ethics", "looks", "weak", "skill", "ethics", "weak", "skill", "skill", "ethics", "weak", "ethics", "ethics", "ethics", "ethics", "looks", "skill", "weak", "skill", "looks", "looks", "weak", "looks", "ethics", "skill", "looks"]>> <!-- Type needs to conform to beast type: wolf, dog, etc. --> -<<set _tpe to ["human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "wolf", "human", "human", "human", "human", "hawk", "human", "human"]>> +<<set _tpe to ["human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "human", "wolf", "human", "human", "human", "human", "hawk", "human", "human", "human"]>> -<<set _swi to ["a","a","a","a","a","a","a","t","a","a","t","a","a","a","a","a","t","a","a","t","a","a","a","a","a","t","a","a","t"]>> +<<set _swi to ["a","a","a","a","a","a","a","t","a","a","t","a","a","a","a","a","t","a","a","t","a","a","a","a","a","t","a","a","t","a"]>> <<for _i to 0; _i lt $NPCName.length; _i++>> @@ -130,7 +130,8 @@ "alex": {nam : "Alex", title: "farmhand", insecurity: "weak", teen: 1}, "greathawk": {nam : "Great Hawk", title: "terror", insecurity: "looks", adult: 1, type: "hawk", claws: "talons"}, "wren": {nam : "Wren", title: "smuggler", insecurity: "ethics", adult: 1}, - "sydney": {nam : "Sydney", title: "faithful", insecurity: "skill", teen: 1} + "sydney": {nam : "Sydney", title: "faithful", insecurity: "skill", teen: 1}, + "ivorywraith": {nam : "Ivory Wraith", title: "reflection", insecurity: "looks", adult: 1} }>> <<for _npc range Object.keys(_newNNPCs)>> <<if !$NPCNameList.includes(_newNNPCs[_npc].nam)>> @@ -251,6 +252,13 @@ <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> <<set $NPCName[_i].hairColour to "strawberryblond">> <</if>> + <<case "Ivory Wraith">> + <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> + <<set $NPCName[_i].eyeColour to "dark blue">> + <</if>> + <<if $NPCName[_i].hairColour is 0 or $NPCName[_i].hairColour is undefined or _args[0] is "default">> + <<set $NPCName[_i].hairColour to "white">> + <</if>> <<default>> <<if $NPCName[_i].eyeColour is 0 or $NPCName[_i].eyeColour is undefined>> <<set $NPCName[_i].eyeColour to ["purple","dark blue","light blue","amber","hazel","green","red","pink","grey", "light grey", "lime green"].pluck()>> @@ -302,7 +310,7 @@ <<set $NPCName[_args[0]].virginity.vaginal to false>> <<set $NPCName[_args[0]].virginity.kiss to false>> <<set $NPCName[_args[0]].virginity.handholding to false>> - <<case "Alex" "Darryl" "Sirris" "Briar" "Wren">> + <<case "Alex" "Darryl" "Sirris" "Briar" "Wren" "Ivory Wraith">> /* Missing all virginities. */ <<set $NPCName[_args[0]].virginity to clone(setup.NPCVirginityTypes)>> <<default>> diff --git a/game/04-Variables/variables-start.twee b/game/04-Variables/variables-start.twee index 0de02549c2fe9608b1c0c0da294699c8d3fdeb6d..a6a2ee961162357697b8d43479d6a09eb53e8198 100644 --- a/game/04-Variables/variables-start.twee +++ b/game/04-Variables/variables-start.twee @@ -929,4 +929,5 @@ <<initEstatePersistent>> <<set $modeloptionsOverride to {}>> +<<set $wraith to {"state": "", "init": 0}>> <</widget>> diff --git a/game/04-Variables/variables-start2.twee b/game/04-Variables/variables-start2.twee index 4d71dd9b70fe87a2bebabd56c55eede2bc4580b9..3d7d39b17f4b781cf45c1a9d8389dad3c14abccc 100644 --- a/game/04-Variables/variables-start2.twee +++ b/game/04-Variables/variables-start2.twee @@ -166,7 +166,7 @@ <<set $background to "waif">> <</if>> <<elseif $background is "greenthumb">> - /* Leaving this here in case we ever turn Green Thumb back into a background. Can't be set to the background variable in cyrrent state. */ + /* Leaving this here in case we ever turn Green Thumb back into a background. Can't be set to the background variable in current state. */ <<set $tending += 200>> <<elseif $background is "plantlover">> <<set $nectar_addiction to 200>> diff --git a/game/04-Variables/variables-static.twee b/game/04-Variables/variables-static.twee index b341e1092dd74bb31b7bbd44b735f9c74451defd..2ca31e538e62bf46385a6a6730e94556da70a27d 100644 --- a/game/04-Variables/variables-static.twee +++ b/game/04-Variables/variables-static.twee @@ -21,7 +21,7 @@ and are required for processing for loops, default objects, etc.*/ <<init_tips>> <<set setup.baseNNPC = {penis : 0, vagina: 0, gender: "none", description: 0, title: 0, insecurity: 0, pronoun: "none", penissize: 0, penisdesc: "none", bottomsize: 0, ballssize: 0, breastsize: 0, breastdesc: 0, breastsdesc: 0, skincolour: 0, teen: 0, adult: 0, init: 0, intro: 0, type: "human", trust: 0, love: 0, dom: 0, lust: 0, rage: 0, state: "", trauma: 0, eyeColour: 0, hairColour: 0, chastity: {penis: "", vagina: "", anus: ""}}>> -<<set setup.NPCNameList = ["Avery","Bailey","Briar","Charlie","Darryl","Doren","Eden","Gwylan","Harper","Jordan","Kylar","Landry","Leighton","Mason","Morgan","River","Robin","Sam","Sirris","Whitney","Winter","Black Wolf","Niki","Quinn","Remy","Alex","Great Hawk","Wren","Sydney"]>> +<<set setup.NPCNameList = ["Avery","Bailey","Briar","Charlie","Darryl","Doren","Eden","Gwylan","Harper","Jordan","Kylar","Landry","Leighton","Mason","Morgan","River","Robin","Sam","Sirris","Whitney","Winter","Black Wolf","Niki","Quinn","Remy","Alex","Great Hawk","Wren","Sydney","Ivory Wraith"]>> /* this initialises the C.npc object */ <<run initCNPC()>> diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index d862b3afdc54d94a618561200f34ff886f15708a..273bfd4732f1a9b2fd53d4147c6b40cb9cb3b904 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -2479,7 +2479,6 @@ <<set $kylar.play to $kylar_play>> <<unset $kylar_play>> <</if>> - <<if typeof($semen_produced_stat) is "string">> <<set $semen_produced_stat to parseFloat($semen_produced_stat)>> <</if>> @@ -3805,5 +3804,36 @@ <<set $animalsemenswallowedstat to 0>> <</if>> + <!-- v0.3.12.4 Wraith update --> + <<if !$wraith>> + <<set $wraith to {"state": "", "init": 0}>> + <<elseif $wraith.init is undefined>> + <<set $wraith.init to 1>> + <<set $wraith.days to 0>> + <</if>> + <<if $per_npc.wraith>> + <<if $wraithAnger>> + <<set $wraithAngerCooldown to $wraithAnger>> + <<unset $wraithAnger>> + <</if>> + <<initnpc "Ivory Wraith">> + <<run ["pronouns", "pronoun", "gender", "pregnancyAvoidance", "vagina", "penis", "clothes", "chest", "skincolour", "breastsize", "breastsdesc", "breastdesc", "penisdesc", "penissize", "trust", "type"].forEach(s => C.npc["Ivory Wraith"][s] = clone($per_npc.wraith[s]))>> + <<set C.npc["Ivory Wraith"].lust to 0>> + <<if $wraith.state is "haunt">> + <<set C.npc["Ivory Wraith"].lust to 20>> + <<if ($wraithPrison and $wraithPrison.vision) or Object.keys(V.feats.currentSave).includes("Schism")>> + <<set $wraithPrison.vision to true>> + <<set C.npc["Ivory Wraith"].lust -= 5>> + <</if>> + <</if>> + <<if $wraithAngerCooldown>> + <<set C.npc["Ivory Wraith"].lust += 3>> + <</if>> + <<set C.npc["Ivory Wraith"].lust = Math.clamp(C.npc["Ivory Wraith"].lust, 0, 20)>> + <<clearNPC "wraith">> + <<if $wraith.state and !$wraith.days>> + <<set $wraith.days to ($days - 60)>> + <</if>> + <</if>> <</widget>> diff --git a/game/base-clothing/canvasmodel-img.twee b/game/base-clothing/canvasmodel-img.twee index 90c7ee257ec05b927d78c0205ab3aa1d02f4cd6f..880c8c4f6c12b13939b34f3c8a338c4cd957ec5c 100644 --- a/game/base-clothing/canvasmodel-img.twee +++ b/game/base-clothing/canvasmodel-img.twee @@ -75,8 +75,8 @@ if ($options.tanningEnabled is true){ <</if>> <<if $possessed>> - <<set _modeloptions.left_eye = ($wraith and $wraith.state is "haunt" and !$schism ? "red possessed" : "blue possessed")>> - <<set _modeloptions.right_eye = ($wraith and $wraith.state is "haunt" and !$schism ? "red possessed" : "blue possessed")>> + <<set _modeloptions.left_eye = ($wraith.state is "haunt" and !$schism ? "red possessed" : "blue possessed")>> + <<set _modeloptions.right_eye = ($wraith.state is "haunt" and !$schism ? "red possessed" : "blue possessed")>> <<else>> <<set _modeloptions.left_eye = $makeup.eyelenses.left != 0 ? $makeup.eyelenses.left : $leftEyeColour>> <<set _modeloptions.right_eye = $makeup.eyelenses.right != 0 ? $makeup.eyelenses.right : $rightEyeColour>> diff --git a/game/base-clothing/clothing-neck.twee b/game/base-clothing/clothing-neck.twee index 698602e02f293d67b51f28c4e6420ae1b05ccf73..5cedbaa4bfdb8c7887856ca65bd934b814503e5c 100644 --- a/game/base-clothing/clothing-neck.twee +++ b/game/base-clothing/clothing-neck.twee @@ -707,7 +707,7 @@ accessory_colour_options: [], cursed: 0, location: 0, - iconFile: "", + iconFile: "ivory_necklace.png", accIcon: 0 }, diff --git a/game/base-combat/actionsGeneration.twee b/game/base-combat/actionsGeneration.twee index 11ac67221f12e8906db11d897bf858f1b2ff56a6..b0a547790a6e1dd433bf860213d8caeaaf7f4669 100644 --- a/game/base-combat/actionsGeneration.twee +++ b/game/base-combat/actionsGeneration.twee @@ -2267,8 +2267,8 @@ <</if>> <<break>> <<elseif $NPCList[_namecontroller].active is "active" and $NPCList[_namecontroller].stance isnot "defeated">> - <<if $NPCList[_namecontroller].description is "pale figure">> - <<set _smoltext to $NPCList[_namecontroller].description>> + <<if $NPCList[_namecontroller].fullDescription is "Ivory Wraith">> + <<set _smoltext to "pale figure">> <<set $_wraithbreak to true>> <<else>> <<set _smoltext to $NPCList[_namecontroller].fullDescription>> diff --git a/game/base-combat/effects-disabled.twee b/game/base-combat/effects-disabled.twee index 53939c172ebc12aa908d702f4d5a34cf77960961..3600fb1fa83a601a1b6eb354409007f5c6c50dd2 100644 --- a/game/base-combat/effects-disabled.twee +++ b/game/base-combat/effects-disabled.twee @@ -620,9 +620,12 @@ <</if>> <<if $leftaction is "leftacceptW" or $leftaction is "leftresistW" and !_resistSuccess>> + <<set $_wraithDamage to 1>> + <<if $leftaction is "leftacceptW">><<set $_wraithDamage ++>><</if>> + <<set $_wraithDamage += Math.floor(C.npc["Ivory Wraith"].lust / 10)>> <<set $leftactiondefault to $leftaction>><<set $leftaction to 0>><<set _target to random(1,$enemyno)-1>> You <<print either("punch","slap","scratch","claw","chop","strike")>> with your left hand. - <<defiance 1 _target>> + <<defiance $_wraithDamage _target>> <</if>> <<if $leftaction is "leftresistW" and _resistSuccess>> @@ -657,9 +660,12 @@ <</if>> <<if $rightaction is "rightacceptW" or $rightaction is "rightresistW" and !_resistSuccess>> + <<set $_wraithDamage to 1>> + <<if $rightaction is "rightacceptW">><<set $_wraithDamage ++>><</if>> + <<set $_wraithDamage += Math.floor(C.npc["Ivory Wraith"].lust / 10)>> <<set $rightactiondefault to $rightaction>><<set $rightaction to 0>><<set _target to random(1,$enemyno)-1>> You <<print either("punch","slap","scratch","claw","chop","strike")>> with your right hand. - <<defiance 1 _target>> + <<defiance $_wraithDamage _target>> <</if>> <<if $rightaction is "rightresistW" and _resistSuccess>> @@ -668,9 +674,12 @@ <</if>> <<if $feetaction is "feetacceptW" or $feetaction is "feetresistW" and !_resistSuccess>> + <<set $_wraithDamage to 1>> + <<if $feetaction is "feetacceptW">><<set $_wraithDamage ++>><</if>> + <<set $_wraithDamage += Math.floor(C.npc["Ivory Wraith"].lust / 10)>> <<set $feetactiondefault to $feetaction>><<set $feetaction to 0>><<set _target to random(1,$enemyno)-1>> You <<print either("awkwardly","viciously","rapidly","jerkily","cruelly","<<feettext>>")>> lash out with your feet. - <<defiance 1 _target>> + <<defiance $_wraithDamage _target>> <</if>> <<if $feetaction is "feetresistW" and _resistSuccess>> @@ -679,9 +688,11 @@ <</if>> <<if $mouthaction is "mouthacceptW" or $mouthaction is "mouthresistW" and !_mouthSuccess>> + <<set $_wraithDamage to 1>> + <<if $mouthaction is "mouthacceptW">><<set $_wraithDamage ++>><</if>> <<set $mouthactiondefault to $mouthaction>><<set $mouthaction to 0>> <<speechWraith>> - <<defiance 1>> + <<defiance $_wraithDamage>> <</if>> <<if $mouthaction is "mouthresistW" and _mouthSuccess>> diff --git a/game/base-combat/effects.twee b/game/base-combat/effects.twee index c562d152cf5bbe699d4c494a63f93567d91cb652..7b50e0c35b1728e1ddec6e349fa8f87bc3ed356f 100644 --- a/game/base-combat/effects.twee +++ b/game/base-combat/effects.twee @@ -2782,7 +2782,7 @@ <<else>> <<if $feetuse isnot "run">> You break into a run. - <<if $NPCList[0].bold * 2 gte random(1, 1000)>> + <<if $NPCList[0].fullDescription is "Ivory Wraith" or $NPCList[0].bold * 2 gte random(1, 1000)>> The footsteps behind you speed up. <span class="red">You are being chased.</span> <<stalk_run>> <<if $worn.feet.type.includes("heels")>> @@ -2828,7 +2828,6 @@ <<else>> <span class="red">The footsteps get closer.</span> <</if>> - <br> <</if>> <<if $NPCList[0].distance gte 5>> <span class="green">You leave them far behind,</span> and escape to safety. @@ -2892,7 +2891,8 @@ You dive down a small alley, and take cover behind a dumpster. <</switch>> <<set $stalk_end to "hide">> - <<elseif !_hide_success and ($NPCList[0].legs is "run" or $NPCList[0].bold gte random(1, 1000))>> + <<elseif !_hide_success and ($NPCList[0].fullDescription isnot "Ivory Wraith" and ($NPCList[_n].legs is "run" or $NPCList[0].bold gte random(1, 1000)) + or $NPCList[0].fullDescription is "Ivory Wraith" and C.npc["Ivory Wraith"].lust gte random(5,15))>> <<switch $location>> <<case alley>> You dive down a thin alley, and take cover behind a dumpster. You peek around the corner. You don't see anyone. @@ -2911,17 +2911,14 @@ <<if $npcrow.includes(0)>> <<stalk_nnpc_text_attack $NPCList[0].fullDescription>> <<if !$stalk_assess>> - <span class="pink">It's <<print $npc[$npcrow.indexOf(0)]>>.</span> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <span class="red">A<<if $wraith.seen gte 3>> familiar<</if>> pale figure stares down at you, eyes flashing <<wraithEyes>>.</span> + <<else>> + <span class="pink">It's <<print $npc[$npcrow.indexOf(0)]>>.</span> + <</if>> <</if>> <br><br> <<events_stalk_nnpc $NPCList[0].fullDescription>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<stalk_nnpc_text_attack "Wraith">> - <<if !$stalk_assess>> - <span class="red">A<<if $wraith.seen gte 3>> familiar<</if>> pale figure stares down at you, eyes flashing <<wraithEyes>>.</span> - <</if>> - <br><br> - <<events_stalk_nnpc "Wraith">> <<else>> <br><br> <<events_stalk>> @@ -2929,14 +2926,37 @@ <<else>> <<switch $location>> <<case alley>> - You dive down a thin alley, and take cover behind a dumpster. <span class="green"><<if $enemyno gt 1>>They pass<<else>>The <<person>> passes<</if>> without looking your way.</span> + You dive down a thin alley, and take cover behind a dumpster. + <<if $NPCList[0].fullDescription isnot "Ivory Wraith">> + <span class="green"><<if $enemyno gt 1>>They pass<<else>>The <<person>> passes<</if>> without looking your way.</span> + <</if>> <<case forest lake>> - You run into a dense copse, and take cover behind a thick trunk. You peek around the edge. <span class="green"><<if $enemyno gt 1>>They pass<<else>>The <<person>> passes<</if>> by without looking your way.</span> + You run into a dense copse, and take cover behind a thick trunk. You peek around the edge. + <<if $NPCList[0].fullDescription isnot "Ivory Wraith">> + <span class="green"><<if $enemyno gt 1>>They pass<<else>>The <<person>> passes<</if>> by without looking your way.</span> + <</if>> <<case moor>> - You crest a small ridge, and dive into a ditch. The <<if $enemyno gt 1>><<person1>><</if>><<person>> pauses at the top, <span class="green">then moves on without looking your way.</span> + You crest a small ridge, and dive into a ditch. + <<if $NPCList[0].fullDescription isnot "Ivory Wraith">> + The <<if $enemyno gt 1>><<person1>><</if>><<person>> pauses at the top, <span class="green">then moves on without looking your way.</span> + <</if>> <<default>> - You dive down a thin alley, and take cover behind a dumpster. You peek around the side. <span class="green"><<if $enemyno gt 1>>They pass<<else>>The <<person>> passes<</if>> without looking your way.</span> + You dive down a thin alley, and take cover behind a dumpster. You peek around the side. + <<if $NPCList[0].fullDescription isnot "Ivory Wraith">> + <span class="green"><<if $enemyno gt 1>>They pass<<else>>The <<person>> passes<</if>> without looking your way.</span> + <</if>> <</switch>> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <<set $stalk_assess to true>> + The pale figure cackles and <span class="teal">dissipates into a thick, cool mist</span>. Its voice echoes around you. + <<switch random(1, 3)>> + <<case 3>><<set _wraith_output to "You can only hide from yourself for so long.">> + <<case 2>><<set _wraith_output to "As the sun rests below the horizon.">> + <<case 1>><<set _wraith_output to "Before they lose their shine.">> + <</switch>> + "<span class="wraith"><<print _wraith_output>></span>" + <<trauma 2>><<stress 4>><<gtrauma>><<gstress>> + <</if>> <<set $stalk_end to "hide">> <</if>> <</if>> @@ -2946,29 +2966,31 @@ You swivel around, and come face to face with <<person1>> <<if $npcrow.includes(0)>> - <<if $stalk_assess>> - <<if $enemyno gte 3>> - <<print $NPCList[0].fullDescription>> and <<his>> companions. - <<elseif $enemyno is 2>> - <<print $NPCList[0].fullDescription>> and <<his>> companion. + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <<if $stalk_assess>> + the pale figure. <<else>> - <<print $NPCList[0].fullDescription>>. + a<<if $wraith.seen gte 3>> familiar<</if>> pale figure. <</if>> <<else>> - <<if $enemyno gte 3>> - a <<personsimple>> and <<his>> companions. - <<elseif $enemyno is 2>> - a <<personsimple>> and <<his>> companion. + <<if $stalk_assess>> + <<if $enemyno gte 3>> + <<print $NPCList[0].fullDescription>> and <<his>> companions. + <<elseif $enemyno is 2>> + <<print $NPCList[0].fullDescription>> and <<his>> companion. + <<else>> + <<print $NPCList[0].fullDescription>>. + <</if>> <<else>> - a <<personsimple>>. + <<if $enemyno gte 3>> + a <<personsimple>> and <<his>> companions. + <<elseif $enemyno is 2>> + a <<personsimple>> and <<his>> companion. + <<else>> + a <<personsimple>>. + <</if>> + <span class="pink">It's <<print $NPCList[0].fullDescription>>.</span> <</if>> - <span class="pink">It's <<print $NPCList[0].fullDescription>>.</span> - <</if>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<if $stalk_assess>> - the pale figure. - <<else>> - a<<if $wraith.seen gte 3>> familiar<</if>> pale figure. <</if>> <<elseif $enemyno gte 3>> the <<person>> and <<his>> companions. @@ -2985,10 +3007,16 @@ <</if>> <br><br> <<if $combatgoal is "confront">> - <span class="purple"><<He>> comes to a stop in front of you.</span> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <<set $stalk_assess to true>> + You blink. When you open your eyes, <span class="red">the pale figure is inches from your face.</span> + <<else>> + <span class="purple"><<He>> comes to a stop in front of you.</span> + <</if>> <br><br> <<set $stalk_end to "confront">> - <<elseif $NPCList[0].bold * 2 gte random(1, 1000)>> + <<elseif $NPCList[0].fullDescription isnot "Ivory Wraith" and $NPCList[0].bold * 2 gte random(1, 1000) + or $NPCList[0].fullDescription is "Ivory Wraith" and C.npc["Ivory Wraith"].lust gte random(1,10)>> <<if $NPCList[0].fullDescription is "Ivory Wraith">> You blink. When you open your eyes, <span class="red">the pale figure is inches from your face.</span> <<else>> @@ -3000,8 +3028,6 @@ <<if $npcrow.includes(0)>> <<stalk_nnpc_text_attack $NPCList[0].fullDescription>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<stalk_nnpc_text_attack "Wraith">> <<else>> <<if $NPCList[0].traits.includes("relaxed")>> "Best play along," <<he>> says. "It'll be easier for you." @@ -3018,8 +3044,6 @@ <<else>> <<if $npcrow.includes(0)>> <<stalk_nnpc_text_threat $NPCList[0].fullDescription>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<stalk_nnpc_text_threat "Wraith">> <<else>> <span class="green"><<He>> throws up <<his>> hands.</span> <<if $NPCList[0].traits.includes("relaxed")>> @@ -3418,6 +3442,16 @@ <<elseif $robinRentEvent is 1 and $combatPhase is "Robin">> You tell <<him>> you're sorry for not paying <<him>>. <<set $speechapologiseno to 1>> + <<elseif $npc.includes("Ivory Wraith") and $wraith.state is "haunt" and $wraithPrison and $wraithPrison.vision and !$wraithApologiseCooldown>> + You tell <<him>> you're sorry for taking everything from <<him>>. + <<set $mouthactiondefault to "plead">> + <<if $apologised is 0>> + <<set $apologised to 1>><<set $speechapologise to 1>><<set $wraithApologise to true>><<set $wraithApologiseCooldown to true>> + <<set $enemyanger -= 100 * (1 + $englishtrait)>> + <<else>> + <<He>> angrily claws at <<his>> neck. + <<set $speechapologiseno to 1>> + <</if>> <<else>> You tell <<him>> you're sorry for being bad. <<set $mouthactiondefault to "plead">> @@ -4327,36 +4361,44 @@ You glance over your shoulder. <<if $stalk_assess>> <<if $npcrow.includes(0)>> - <<print $NPCList[0].fullDescription>> is still following you. - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<if $wraith.state is "haunt" or $wraith.offspring is "dead">> - The pale figure continues to stalk you. + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <<if $wraith.state is "haunt" or $wraith.offspring is "dead">> + The pale figure continues to stalk you. + <<else>> + The pale figure continues to drift along. + <</if>> <<else>> - The pale figure continues to drift along. + <<print $NPCList[0].fullDescription>> is still following you. <</if>> <<else>> The <<person1>><<person>> is still following you. <</if>> <<else>> <<if $npcrow.includes(0)>> - You see a <<person1>><<personsimple>> following you. <span class="pink">It's <<print $NPCList[0].fullDescription>>.</span> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<if $wraith.state is "haunt" or $wraith.offspring is "dead">> - A<<if $wraith.seen gte 3>> familiar<</if>> pale figure lurks behind you, <span class="red">its eerie <<wraithEyes>> gaze locked on you.</span> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <<if $wraith.state is "haunt" or $wraith.offspring is "dead">> + A<<if $wraith.seen gte 3>> familiar<</if>> pale figure lurks behind you, <span class="red">its eerie <<wraithEyes>> gaze locked on you.</span> + <<else>> + A<<if $wraith.seen gte 3>> familiar<</if>> pale figure drifts behind you, seeming unaware of your presence. + <</if>> + Its feet don't touch the ground, but you still hear footsteps. <<else>> - A<<if $wraith.seen gte 3>> familiar<</if>> pale figure drifts behind you, seeming unaware of your presence. + You see a <<person1>><<personsimple>> following you. <span class="pink">It's <<print $NPCList[0].fullDescription>>.</span> <</if>> <<else>> You see a <<person1>><<person>> following you. <</if>> <</if>> <<if $npcrow.includes(0)>> - <<nnpc_He $NPCList[0].fullDescription>> moves with - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - It moves with + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + It + <<else>> + <<nnpc_He $NPCList[0].fullDescription>> + <</if>> <<else>> - <<He>> moves with + <<He>> <</if>> + moves with <<if $NPCList[0].skills.athletics gte 800>> <span class="pink">an energetic stride</span> <<elseif $NPCList[0].skills.athletics gte 600>> diff --git a/game/base-combat/man-combat.twee b/game/base-combat/man-combat.twee index f7d1cce04c3db146594a678796dfdab486f9cc6a..e790602b1f2cb91da7e93dfa7b383733d87e2c9c 100644 --- a/game/base-combat/man-combat.twee +++ b/game/base-combat/man-combat.twee @@ -2419,11 +2419,11 @@ Hands are 'inverted': NPC holds PC's left hand with their right one, and vice ve <<switch _n>> <<case 0>> <<manspeech _n>> - <<if $enemyno gte 2>> + <<if $NPCList[0].intro isnot -1>> <<set $NPCList[0].intro to 1>> <</if>> <<case 1 2 3 4 5>> - <<manspeech _n>><<if !_introSkip>><<set $NPCList[_n].intro to 1>><</if>> + <<manspeech _n>><<if $NPCList[_n].intro isnot -1>><<set $NPCList[_n].intro to 1>><</if>> <</switch>> <<if $NPCList[_n].state is "stalk">> diff --git a/game/base-combat/stalk/stalk.twee b/game/base-combat/stalk/stalk.twee index 33414ede3748a15f4f9a089aec0a1146a6d98b2f..0fb4afd15e4bd05cc404a1c54e9d3248699062d5 100644 --- a/game/base-combat/stalk/stalk.twee +++ b/game/base-combat/stalk/stalk.twee @@ -30,22 +30,20 @@ <<if $NPCList[_n].distance lte _n>> <<if !$stalk_end>> - <<if $NPCList[_n].legs is "run" or $NPCList[0].bold gte random(1, 1000)>> + <<if $NPCList[0].fullDescription isnot "Ivory Wraith" and ($NPCList[_n].legs is "run" or $NPCList[0].bold gte random(1, 1000)) + or $NPCList[0].fullDescription is "Ivory Wraith" and C.npc["Ivory Wraith"].lust gte random(5,15)>> <span class="red">You are accosted.</span> <<if $npcrow.includes(0)>> <<stalk_nnpc_text_attack $NPCList[0].fullDescription>> <<if !$stalk_assess>> - <span class="pink">It's <<print $npc[$npcrow.indexOf(0)]>>.</span> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <span class="red">A<<if $wraith.seen gte 3>> familiar<</if>> pale figure stares down at you, eyes flashing <<wraithEyes>>.</span> + <<else>> + <span class="pink">It's <<print $npc[$npcrow.indexOf(0)]>>.</span> + <</if>> <</if>> <br><br> <<events_stalk_nnpc $NPCList[0].fullDescription>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<stalk_nnpc_text_attack "Wraith">> - <<if !$stalk_assess>> - <span class="red">A<<if $wraith.seen gte 3>> familiar<</if>> pale figure stares down at you, eyes flashing <<wraithEyes>>.</span> - <</if>> - <br><br> - <<events_stalk_nnpc "Wraith">> <<else>> <br><br> <<events_stalk>> @@ -53,8 +51,6 @@ <<else>> <<if $npcrow.includes(0)>> <<stalk_nnpc_text_passed $NPCList[0].fullDescription>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<stalk_nnpc_text_passed "Wraith" "passed">> <<else>> A <<person1>><<person>> <<switch $enemyno>> @@ -595,8 +591,6 @@ <<if $combatgoal is "confront">> <<if $npcrow.includes(0)>> <<stalk_nnpc_text_confront $NPCList[0].fullDescription>> - <<elseif $NPCList[0].fullDescription is "Ivory Wraith">> - <<stalk_nnpc_text_confront "Wraith">> <<else>> <span class="purple">You're grabbed by the arm and pulled back to face your assailant.</span> <</if>> @@ -878,7 +872,8 @@ <<case 2>>"Thought you were safe? Guess again." <<case 1>>"My favourite <<bitch>>, all by <<pherself>>." <<He>> grins. "Lucky me." <</switch>> - <<case "Wraith">> + <<case "Ivory Wraith">> + <<set $stalk_assess to true>> <<if $wraith.state is "haunt">> <<switch random(1, 5)>> <<case 5>><<set _wraith_output to "Give it back.">> @@ -887,13 +882,13 @@ <<case 2>><<set _wraith_output to "Where can you go but down?">> <<case 1>><<set _wraith_output to "Run from your sins, into empty arms.">> <</switch>> - <<elseif $wraith.offspring is "dead">> + <<elseif ["dead","sold"].includes($wraith.offspring)>> <<switch random(1, 5)>> <<case 5>><<set _wraith_output to "Coward.">> <<case 4>><<set _wraith_output to "All your fault.">> <<case 3>><<set _wraith_output to "<<pcPetname \"Wraith\">>.">> <<case 2>><<set _wraith_output to "Afraid. Alone. You'll share that pain.">> - <<case 1>><<set _wraith_output to "You've dug their grave. Now lie with them.">> + <<case 1>><<set _wraith_output to ($wraith.offspring is "dead" ? "You've dug their grave. Now lie with them." : "They're still calling your name. Will you hear them?")>> <</switch>> <<else>> <<switch random(1, 5)>> @@ -904,7 +899,8 @@ <<case 1>><<set _wraith_output to "Fly while you can, before your wings are clipped.">> <</switch>> <</if>> - <span class="wraith">"<<print _wraith_output>>"</span> + "<span class="wraith"><<print _wraith_output>></span>" + <<rainWraith true>> <<default>> "Best play along," <<he>> says. "It'll be easier for you." <</switch>> @@ -985,7 +981,7 @@ <<case 2>><span class="green"><<He>> throws <<his>> hands up,</span> smiling innocently. "Just admiring the view from back here."<br><br> <<He>> smacks your <<bottom>> as <<he>> walks on.<<stress 2>><<arousal 150>><<gstress>><<garousal>> <<case 1>>Just as <<he>> draws near, <<he>> jumps at you with a loud "Boo!" You flinch on instinct.<br><br> "Wuss," <<he>> laughs <span class="green">as <<he>> leaves you behind.</span><<stress 4>><<gstress>> <</switch>> - <<case "Wraith">> + <<case "Ivory Wraith">> It cackles, <span class="teal">before dissipating into a thick, cool mist.</span> Its voice echoes around you. <<switch random(1, 3)>> <<case 3>><<set _wraith_output to "Bask while you can. The night comes quickly.">> @@ -1064,13 +1060,13 @@ <<case 2>><<stalk_nnpc_name>> smacks your <<bottom>> as <<he>> passes.<<if $stalk_assess>><<He>> flashes a smug smirk over <<his>> shoulder.<<else>><<Hes>> gone before you can get a good look at <<him>>.<</if>><<stress 2>><<arousal 150>><<gstress>><<garousal>> <<case 1>><<stalk_nnpc_name>> picks at <<his>> nails as <<he>> passes. <span class="teal"><<Hes>> too engrossed to notice you.</span> <</switch>> - <<case "Wraith">> + <<case "Ivory Wraith">> <<switch random(1, 3)>> <<case 3>>A cold chill blows over you, <span class="teal">but it vanishes just as quickly.</span> <<case 2>>A cold, clammy hand grabs your shoulder. You turn, <span class="teal">but no one's there.</span> <<case 1>>You feel a presence. Someone breathes in your ear. "<span class="wraith">Not yet.</span>" A warm breeze washes over you, <span class="teal">taking the unwelcome presence with it.</span> <</switch>> - You think you're alone.<<trauma 2>><<stress 4>><<gtrauma>><<gstress>> + A faint mist is left in the air. You think you're alone.<<trauma 2>><<stress 4>><<gtrauma>><<gstress>> <<default>> A <<personsimple>> passes by. <span class="teal"><<He>> doesn't glance at you.</span> <</switch>> @@ -1086,7 +1082,7 @@ <<else>> the culprit. <</if>> - <<case "Wraith">> + <<case "Ivory Wraith">> The air chills around you. Animated by instinct, you turn around to find a pair of <<wraithEyes>> eyes staring back. <<default>> You're grabbed by the arm and pulled back to face your assailant. @@ -1094,10 +1090,18 @@ <</widget>> <<widget "stalk_nnpc_name">> - <<if $stalk_assess>> - <<print $NPCList[0].fullDescription>> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <<if $stalk_assess>> + The pale figure + <<else>> + Somebody + <</if>> <<else>> - A <<personsimple>> + <<if $stalk_assess>> + <<print $NPCList[0].fullDescription>> + <<else>> + A <<personsimple>> + <</if>> <</if>> <</widget>> @@ -1108,23 +1112,31 @@ <<for _i to 0; _i lt 8; _i++>> <img @class="'stalk_' + _i" src="img/misc/stalk/base.png"> <</for>> + <<if $NPCList[0].fullDescription is "Ivory Wraith" and $stalk_assess>> + <<set $_stalker to "_wraith">> + <<else>> + <<set $_stalker to "">> + <</if>> <<if $NPCList[0].distance is 0 and $NPCList[0].state isnot "pursuit" or $stalk_end is "hide">> - <<if $stalk_end>> + <<if $stalk_end is "confront">> + <img class="stalk_3" @src="'img/misc/stalk/npc' + $_stalker + '.png'"> + <img class="stalk_4" src="img/misc/stalk/pc.png"> + <<elseif $stalk_end>> <img class="stalk_4" src="img/misc/stalk/pc.png"> - <img class="stalk_5" src="img/misc/stalk/safe_npc.png"> + <img class="stalk_5" @src="'img/misc/stalk/safe_npc' + $_stalker + '.png'"> <<else>> - <img class="stalk_4" src="img/misc/stalk/caught.png"> + <img class="stalk_4" @src="img/misc/stalk/caught.png"> <</if>> <<else>> <<if $NPCList[0].distance lt 4>> <<if $NPCList[0].state is "pursuit">> <<set _stalk_position to 4 + $NPCList[0].distance>> - <img @class="'stalk_' + _stalk_position" src="img/misc/stalk/npc.png"> + <img @class="'stalk_' + _stalk_position" @src="'img/misc/stalk/npc' + $_stalker + '.png'"> <img @class="'stalk_' + _stalk_position" src="img/misc/stalk/clothes.png"> <<elseif $stalk_end is "escaped">> <<else>> <<set _stalk_position to 4 - $NPCList[0].distance>> - <img @class="'stalk_' + _stalk_position" src="img/misc/stalk/npc.png"> + <img @class="'stalk_' + _stalk_position" @src="'img/misc/stalk/npc' + $_stalker + '.png'"> <</if>> <</if>> <img class="stalk_4" src="img/misc/stalk/pc.png"> diff --git a/game/base-combat/widgets.twee b/game/base-combat/widgets.twee index cd27d169bc35c0a150c8bcffe125986c47d26829..b66780b135b351ffeb2eb75e8aeff4252eabf6b5 100644 --- a/game/base-combat/widgets.twee +++ b/game/base-combat/widgets.twee @@ -6,7 +6,7 @@ <!-- Do nothing --> <<else>> <<if $player.virginity[_args[1]] is true>> - <<if $wraith and $wraith.mimic is _args[0]>> + <<if $wraith.mimic is _args[0]>> <<switch _args[0]>> <<case "Robin">><<displayFeatFake "Robin the Lover">> <<case "Kylar">><<displayFeatFake "Kylar the Obsessed">> @@ -92,7 +92,7 @@ <<switch $_kissType>> <<case "loveInterest">> <span class="lewd">You're happy your first kiss went to a love interest.</span><<arousal 3000>><<stress -12>><<trauma -12>><<ggarousal>><<llstress>> - <<if (!$wraith or $wraith.mimic isnot _args[0])>><<earnFeat "First Kiss">><</if>> + <<if ($wraith.mimic isnot _args[0])>><<earnFeat "First Kiss">><</if>> <<case "romantic">> <span class="lewd">You're happy your first kiss was taken in such a romantic way.</span><<arousal 1500>><<stress -6>><<trauma -6>><<garousal>><<lstress>> <<case "rape">> @@ -148,7 +148,7 @@ <<set $_straponvirginityIgnore to ($_vType is "penile" and npcHasStrapon($_npcId))>> <</if>> - <<if $_npc and $_vType and $_npc.virginity and $_npc.virginity[$_vType] and (!$wraith or $wraith.mimic isnot $_npc.nam) and !$_straponvirginityIgnore>> + <<if $_npc and $_vType and $_npc.virginity and $_npc.virginity[$_vType] and ($wraith.mimic isnot $_npc.nam) and !$_straponvirginityIgnore>> <<if ($_vType is "vaginal" or $_vType is "penile") and $_npc.virginity.temple is true and $templePromised isnot $_npc.fullDescription>> <<set $_npc.virginity.temple to false>> <</if>> diff --git a/game/base-debug/test encounters.twee b/game/base-debug/test encounters.twee index 93eaf96bfe62f0d7b5182d6bb7c713f00bd25399..12a0417222639c92bbf80cc21485767e98cad263 100644 --- a/game/base-debug/test encounters.twee +++ b/game/base-debug/test encounters.twee @@ -706,7 +706,7 @@ How do you respond? <br> <<link [[Surprise Me.|Wraith Test]]>><<set $wraith.select to "random">><</link>> <br> -<<link [[I'm going to jump out my window now, bye.|Domus Street]]>><<endWraith>><<set $eventskip to 1>><</link>> +<<link [[I'm going to jump out my window now, bye.|Domus Street]]>><<endWraith>><<clearWraith>><<set $eventskip to 1>><</link>> <br> :: Wraith Test @@ -1549,14 +1549,22 @@ Once the tube touches the floor, the lights switch off. <</if>> <<else>> <<if $stalkTestNPC>> - <<npc $stalkTestNPC>> + <<if $stalkTestNPC is "Ivory Wraith">> + <<generateWraith 1>> + <<else>> + <<npc $stalkTestNPC>> + <</if>> <<set $NPCList[0].skills to {athletics: random(1, 1000), security: random(1, 1000)}>> <<unset $stalkTestNPC>> <</if>> <<if $enemyno gte 1>> <<person1>> - <span class="red">You are being hunted by <<print $npc[$npcrow.indexOf(0)]>>.</span> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <span class="red">You are being hunted by <span class="wraith">the Ivory Wraith.</span></span> + <<else>> + <span class="red">You are being hunted by <<print $npc[$npcrow.indexOf(0)]>>.</span> + <</if>> <br><br> <<His>> athletics skill is <span class="gold"><<print $NPCList[0].skills.athletics>></span>. @@ -1580,63 +1588,72 @@ Once the tube touches the floor, the lights switch off. others. <br><br> <</if>> + <<if $NPCList[0].fullDescription is "Ivory Wraith">> + <span class="blue">You can't add any NPCs to accompany the Wraith.</span> + <br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <<else>> + <<switch $enemyno>> + <<case 6>> + <span class="blue">You can't add any more NPCs.</span> + <br><br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <<case 5>> + <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate6>><</link>> + <br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <<case 4>> + <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate5>><</link>> + <br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <<case 3>> + <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate4>><</link>> + <br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <<case 2>> + <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate3>><</link>> + <br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <<case 1>> + <<link [[Add an unnamed NPC|Named NPC Stalk Select]]>><<generate2>><</link>> + <br> + <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> + <br> + <</switch>> + <</if>> + <<if $enemyno is 0>> + Choose a named NPC. + <br><br> - <<switch $enemyno>> - <<case 6>> - <span class="blue">You can't add any more NPCs.</span> - <br><br> - <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> - <br> - <<case 5>> - <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate6>><</link>> - <br> - <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> - <br> - <<case 4>> - <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate5>><</link>> - <br> - <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> - <br> - <<case 3>> - <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate4>><</link>> - <br> - <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> - <br> - <<case 2>> - <<link [[Add another unnamed NPC|Named NPC Stalk Select]]>><<generate3>><</link>> - <br> - <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> - <br> - <<case 1>> - <<link [[Add an unnamed NPC|Named NPC Stalk Select]]>><<generate2>><</link>> - <br> - <<link [[Start test|Named NPC Stalk Select]]>><<set $phase to 1>><</link>> - <br> - <<default>> - Choose a named NPC. - <br><br> - - <<link [[Avery|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Avery">><</link>> - <br> - <<link [[Bailey|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Bailey">><</link>> - <br> - <<link [[Briar|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Briar">><</link>> - <br> - <<link [[Eden|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Eden">><</link>> - <br> - <<link [[Harper|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Harper">><</link>> - <br> - <<link [[Kylar|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Kylar">><</link>> - <br> - <<link [[Leighton|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Leighton">><</link>> - <br> - <<link [[Morgan|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Morgan">><</link>> - <br> - <<link [[Whitney|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Whitney">><</link>> - <br> - <<link [[Someone else|Named NPC Stalk Select]]>><<set $stalkTestNPC to either("Alex","Charlie","Darryl","Doren","Gwylan","Jordan","Landry","Mason","Niki","Quinn","Remy","River","Robin","Sam","Sirris","Sydney","Wren")>><</link>> - <br> - <</switch>> + <<link [[Avery|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Avery">><</link>> + <br> + <<link [[Bailey|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Bailey">><</link>> + <br> + <<link [[Briar|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Briar">><</link>> + <br> + <<link [[Eden|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Eden">><</link>> + <br> + <<link [[Harper|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Harper">><</link>> + <br> + <<link [[Kylar|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Kylar">><</link>> + <br> + <<link [[Leighton|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Leighton">><</link>> + <br> + <<link [[Morgan|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Morgan">><</link>> + <br> + <<link [[Whitney|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Whitney">><</link>> + <br> + <<link [[Wraith|Named NPC Stalk Select]]>><<set $stalkTestNPC to "Ivory Wraith">><</link>> + <br> + <<link [[Someone else|Named NPC Stalk Select]]>><<set $stalkTestNPC to either("Alex","Charlie","Darryl","Doren","Gwylan","Jordan","Landry","Mason","Niki","Quinn","Remy","River","Robin","Sam","Sirris","Sydney","Wren")>><</link>> + <br> + <</if>> <br> <<link [[Restart|Named NPC Stalk Select]]>><<endevent>><<set $phase to 0>><</link>> <br> diff --git a/game/base-system/mirror.twee b/game/base-system/mirror.twee index 856f78fa1cc75f3b6179cb8348b6aca9bf62d805..d75f2caa38688d47992bfd8b58ab9c13616c3479 100644 --- a/game/base-system/mirror.twee +++ b/game/base-system/mirror.twee @@ -140,7 +140,7 @@ You look into the $_mirror. A cheerful <<girl>> <</if>> stares back. -<<if $wraith and $wraith.state is "haunt" and $hallucinations gte 1 and random(1, 100) is 1>> +<<if $wraith.state is "haunt" and $hallucinations gte 1 and random(1, 100) is 1>> <span class="fading">A pale figure stands behind.</span> <</if>> <br> diff --git a/game/base-system/named-npcs.twee b/game/base-system/named-npcs.twee index e364f2f45c00c7a1dde29dcb952e2a3e8175980e..074e18da9177f033cb374730a2fcd768de17e6e7 100644 --- a/game/base-system/named-npcs.twee +++ b/game/base-system/named-npcs.twee @@ -240,6 +240,9 @@ Zohar <</if>> <</if>> <</if>> +<<if $NPCName[_i].nam is "Ivory Wraith">> + <<set $NPCName[_i].pronoun to "i">> +<</if>> <!-- Set Genital Existence --> <<if $NPCName[_i].type isnot "human">> @@ -463,6 +466,16 @@ alternative way to write that: <<set $sydneyDaily to {}>> <<set $sydneyDaily.sex to 0>> <<set $sydney.sexTotal to 0>> + <<case "Ivory Wraith">> + <<checkWraith>> + <<set $genderknown.pushUnique("Ivory Wraith")>> + <<set C.npc["Ivory Wraith"].lust to 0>> + <<if $museumAntiques.antiques.antiqueivorynecklace isnot "notFound">> + <<set C.npc["Ivory Wraith"].lust to 20>> + <<if $wraithPrison and $wraithPrison.vision>> + <<set C.npc["Ivory Wraith"].lust -= 5>> + <</if>> + <</if>> <<default>> <</switch>> <</if>> @@ -519,6 +532,7 @@ alternative way to write that: <<case Mason>><<set $NPCName[_i].outfits.pushUnique("teacher", "maleSchoolSwim", "neutralSwim", "townTrack")>> <<case Leighton>><<set $NPCName[_i].outfits.pushUnique("teacher", "maleFormal1", "femaleFormal1")>> <<case "Black Wolf" "Great Hawk">><<set $NPCName[_i].outfits to ["naked"]>> + <<case "Ivory Wraith">><<set $NPCName[_i].outfits to ["naked", "moonRobe"]>> <<default>> <!-- Maybe should be left as a default case for futureproofing? Assigns area-appropriate clothes without saving them to the NPC. @@ -607,6 +621,8 @@ alternative way to write that: <<npcClothesType $NPCName[_i] "beach">> <<case "Black Wolf" "Great Hawk">> <<npcClothesType $NPCName[_i] "naked">> + <<case "Ivory Wraith">> + <<npcClothesType $NPCName[_i] "Wraith">> <<default>> <<generateNPCClothes $NPCName[_i]>> <</switch>> @@ -818,6 +834,12 @@ alternative way to write that: <<set $NPCList[_npcno].health to 200>> <<set $NPCList[_npcno].healthmax to 200>> <<set $NPCList[_npcno].traits.push("hypnotist")>> +<<case "Ivory Wraith">> + <<statsWraith>> + <<set $NPCList[_npcno].health to _wraithHP>> + <<set $NPCList[_npcno].healthmax to _wraithHP>> + <<set $NPCList[_npcno].traits to ["brooding", "watchful", "willful", "beautiful"]>> + <<set $NPCList[_npcno].skincolour to "white">> <<default>> <<set $NPCList[_npcno].health to 200>> <<set $NPCList[_npcno].healthmax to 200>> @@ -984,8 +1006,12 @@ alternative way to write that: <<widget "npcrelationship">> <!-- Robin, Avery, Kylar are unique and are treated differently --> - <<set _npc to _args[0]>> - <<set _i to $NPCNameList.indexOf(_npc)>> + <<set _i to V.NPCName.findIndex(i => i.nam === _args[0])>> + <<if _i !== -1>> + <<set _npc to _args[0]>> + <<else>> + <<error { message: "<<npcrelationship>> was provided incorrect arguments" }>> + <</if>> <<if $NPCName[_i].init is 1>> <<relationshiptext>> <br> @@ -1109,7 +1135,7 @@ alternative way to write that: <</widget>> <<widget "relationshiptext">> -<!-- Special cases for Robin, Avery, Kylar --> +<!-- Special cases for Robin, Avery, Kylar, Whitney, Sydney, Alex, Wraith --> <<switch _npc>> <<case Robin>> Robin @@ -1371,7 +1397,49 @@ alternative way to write that: <<else>> has no strong opinion of you. <</if>> - + <<case "Ivory Wraith">> + <<if $wraith>> + <<if $wraith.hunt and !$wraith.type>> + The Wraith + <<if $wraith.state is "haunt">> + <span class="red">is fiercely hunting you.</span> + <<else>> + <span class="blue">is stalking you.</span> + <</if>> + <<elseif _rngWraithLineChance is 1>> + <<if !_rngWraithLine>> + <<set _rngWraithLine to true>> + <<silently>><<speechWraith "lines">><</silently>> + <</if>> + _line1 + <<elseif $bus isnot "lake_ruin_prison" and !$wraith.type and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> + The Wraith + <<if $wraith.state is "haunt">> + <span class="red">is looking for you.</span> + <<else>> + <span class="blue">prowls.</span> + <</if>> + <<else>> + The Wraith + <<if $wraith.state is "haunt">> + <<if $NPCName[_i].lust gte 18>> + <span class="red">is manic.</span> + <<elseif $NPCName[_i].lust gte 14>> + <span class="pink">is enraged.</span> + <<else>> + <span class="purple">holds a grudge.</span> + <</if>> + <<else>> + <<if $NPCName[_i].lust gte 15>> + <span class="purple">is obsessed with you.</span> + <<elseif $NPCName[_i].lust gte 6>> + <span class="purple">is intrigued by you.</span> + <<else>> + <span class="blue">is entertained by you.</span> + <</if>> + <</if>> + <</if>> + <</if>> <!-- Default cases for all other NNPCs --> <<default>> _npc diff --git a/game/base-system/nicknames.twee b/game/base-system/nicknames.twee index d9d893719ecebdbc6780df613c7d8dfc1f7c1cbb..0c56a99778fca1611741b4344c061a8480874487 100644 --- a/game/base-system/nicknames.twee +++ b/game/base-system/nicknames.twee @@ -454,7 +454,7 @@ <<set $_npc to $npc[0]>> <</if>> <<set $_mod to _args[1]>> - <<if $wraith and $wraith.mimic is $_npc>> + <<if $wraith.mimic is $_npc>> <<set $_wraith to true>> <</if>> <<set _names to []>> @@ -593,11 +593,11 @@ )>> <</if>> /* offspring */ - <<if $wraith.offspring is "dead">> + <<if ["dead","sold"].includes($wraith.offspring)>> <<set _names.push( "oathbreaker", "mutineer", - "snake" + "serpent" )>> <</if>> /* tfs */ diff --git a/game/base-system/overlays/social.twee b/game/base-system/overlays/social.twee index 9d2ae256a9dc51bcdd53a09f0dc7e57de79b11b0..74c69d2e4a21aca75fbebcf544250cb41a6e5df3 100644 --- a/game/base-system/overlays/social.twee +++ b/game/base-system/overlays/social.twee @@ -34,8 +34,8 @@ "Sydney" : { important : true, love : { maxValue: 150 }, - purity : { requirements : State.variables.NPCName[28].purity > 0, maxValue : 100, minValue : 0 }, - corruption : { requirements : State.variables.NPCName[28].corruption > 0, maxValue : 50, minValue : 0 } + purity : { requirements : V.NPCName[28].purity > 0, maxValue : 100, minValue : 0 }, + corruption : { requirements : V.NPCName[28].corruption > 0, maxValue : 50, minValue : 0 } }, "Mason" : { love : { maxValue : 50 } @@ -54,27 +54,25 @@ }, "Sam" : { love : { maxValue : 50 } + }, + "Ivory Wraith" : { + lust : { name: "Obsession", activeIcon : (V.wraith && V.wraith.state == "haunt" ? "img/ui/obsessionblood.png" : "img/ui/obsession.png"), inactiveIcon : "img/ui/obsessionempty.png", maxValue : 20 } } }; - /*This list is backwards due to the method used to sort via index, with unimportant NPCs being assigned -1*/ - T.importantNpcOrder = [ "Alex", "Great Hawk", "Avery", "Sydney", "Kylar", "Eden", "Whitney", "Robin"]; - - /*Clones the NPC list, and orderes it by important first, then by alphabetical order*/ - T.orderedNPCs = V.NPCName.slice().sort(function(a, b) { - let diff = T.importantNpcOrder.indexOf(a.nam) - T.importantNpcOrder.indexOf(b.nam); - - if(diff == 0) { - diff = a.nam < b.nam ? 1 : -1; - } - - return diff; - }); - T.orderedNPCs.reverse(); + /* This list dictates the order that the important NPCs will show up in on the social menu screen */ + T.importantNpcOrder = ["Robin", "Whitney", "Eden", "Kylar", "Sydney", "Avery", "Great Hawk", "Alex"]; + T.specialNPCs = ["Ivory Wraith"]; + /* this list is sorted */ + T.importantNPCs = T.importantNpcOrder.map(name => V.NPCName[V.NPCNameList.indexOf(name)]); + + /* this list is unsorted */ + T.otherNPCs = V.NPCName.filter(npc => !T.importantNpcOrder.includes(npc.nam) && !T.specialNPCs.includes(npc.nam)); - T.importantNPCs = T.orderedNPCs.slice(0, T.importantNpcOrder.length); - T.otherNPCs = T.orderedNPCs.slice(T.importantNpcOrder.length); + /* sorting takes the lower value and puts it first, so if a < b, a goes first. */ + /* yes, this works on words, somehow. it's math shit, but it works. read a book if necessary. */ + T.otherNPCs.sort((a,b) => a.nam - b.nam); <</script>> <</silently>> @@ -101,6 +99,12 @@ <<set _initNPC += _npcData.init>> <</for>> </div> + <div id="secondary-npcs" class="relation-box-list"> + <<for _ik= 0; _ik lt _specialNPCs.length; _ik++>> + <<relation-box $NPCName[$NPCNameList.indexOf(_specialNPCs[_ik])] _npcConfig[_specialNPCs[_ik]]>> + <<set _initNPC += _npcData.init>> + <</for>> + </div> <<if _initNPC is 0>> //No secondary relationships// <br> diff --git a/game/base-system/overlays/statistics.twee b/game/base-system/overlays/statistics.twee index aa02f5315a8f123f6391039bbbde768af64c4482..723d8d7aa15b67af13c52b67183410d68294112f 100644 --- a/game/base-system/overlays/statistics.twee +++ b/game/base-system/overlays/statistics.twee @@ -404,7 +404,7 @@ Days in prison: $stat_police.prison <br> Hypnotised: $hypnotised - <<if $wraith and $wraith.possessCount>> + <<if $wraith.possessCount>> <br> Possessed: $wraith.possessCount <</if>> diff --git a/game/base-system/pregnancy/containers.twee b/game/base-system/pregnancy/containers.twee index c5c874bb7d3ae6d868b83b518a08fdc71cdf442e..2d85f04dc994560488fe545b8a9eb4544ab83955 100644 --- a/game/base-system/pregnancy/containers.twee +++ b/game/base-system/pregnancy/containers.twee @@ -53,11 +53,15 @@ <!-- Parasites die if they don't get fed enough. The max time you can leave them is determined by tank size/parasite barn quality --> <<set _container.deadCreatures to _container.count>> <<for _i to 0; _i lt _container.count; _i++>> - <<if _container.creatures[_i].creature.includes("Pale") and $wraith and $wraith.state isnot "">> + <<if _container.creatures[_i].creature.includes("Pale") and $wraith.state>> <!-- If a pale parasite dies, the Ivory Wraith becomes angry, and encounters become more dangerous --> <<set $wraith.offspring to "dead">> - <<set $wraithAnger to 30>> + <<set $wraithAngerCooldown to 30>> <<set $wraithShow to true>> + <<if !$wraithAngerCount>> + <<set $wraithAngerCount to 0>> + <</if>> + <<set $wraithAngerCount ++>> <</if>> <</for>> <<set _container.count to 0>> @@ -195,14 +199,16 @@ <<hallucinogen _boosts.hallucinogen>><<ghallucinogens>> <</if>> - <<if $wraith and $wraith.state isnot "" and (_paleChance gte random(1, 10) or _paleChance gte 1 and !$wraith.offspringWarning) and !$possessed>> + <<if $wraith.state and (_paleChance gte random(1, 10) or _paleChance gte 1 and !$wraith.offspringWarning) and !$possessed>> <!-- When you have pale parasites, the Ivory Wraith has a chance of appearing and warning you to keep them alive --> <!-- It's guaranteed to appear if you're viewing pale parasites for the first time --> <br><br> You catch a glimpse of a pale figure standing right next to you. You jump back in shock. It slowly turns to you. <br><br> "<span class="wraith">Beautiful. Keep <<if _container.count isnot 1>>them<<else>>it<</if>> safe.</span>" It disappears with a bright flash. <<stress 6>><<gstress>> - <<set $wraith.offspring to "alive">> + <<if !["dead","sold"].includes($wraith.offspring)>> + <<set $wraith.offspring to "alive">> + <</if>> <<if !$wraith.offspringWarning>> <br> You try to imagine what would happen if you let the pale creature die. <span class="purple">A spike of dread shoots through you.</span> @@ -366,13 +372,18 @@ <<set _traumaMulti to 1>> <</if>> <<trauma `30 * _traumaMulti * _container.deadCreatures`>> - <<if $wraith and $wraith.state isnot "" and $wraithShow>> + <<if $wraith.state and $wraithShow>> + <<if !$wraithAngerCount>> + <<set $wraithAngerCount to 1>> + <</if>> + <<set _wraithRage to ($wraithAngerCount * 2)>> <<unset $wraithShow>> + <<unset $wraithAngerCount>> You feel something gingerly grab your neck from behind. <br><br> "<span class="wraith">Unforgivable. You'll join <<if _container.count isnot 1>>them<<else>>it<</if>> soon.</span>" <<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>> <br><br> - You turn around, but nothing's there. + You turn around, but nothing's there. <<gobsession _wraithRage>> <br><br> <</if>> diff --git a/game/base-system/pregnancy/events.twee b/game/base-system/pregnancy/events.twee index 08c0f62e6bca3349f079cc03529d1e332f375e65..7f38ca29a3c7d9b477f6d042165d6635ae61a984 100644 --- a/game/base-system/pregnancy/events.twee +++ b/game/base-system/pregnancy/events.twee @@ -65,6 +65,24 @@ You pull out the small container <<he>> gave you. <<He>> looks inside. Seeming s <br><br> "The community thanks you," <<he>> says. <br><br> +<<set _paleAmount to 0>> +<<for _i to 0; _i lt $container.portable.creatures.length; _i++>> + <<if $container.portable.creatures[_i].creature.includes("Pale")>> + <<set _wraithMessage to true>> + <<set _paleAmount++>> + <</if>> +<</for>> +<<if $wraith.state and _wraithMessage is true>> + <<set $wraith.offspring to "sold">> + <<set $wraithCompoundChance to ($wraithCompoundChance ? $wraithCompoundChance += 10 : 10)>> + <<if $wraithAngerCooldown>> + <<set $wraithAngerCooldown += (15 * _wraithAmount)>> + <<else>> + <<set $wraithAngerCooldown to (15 * _wraithAmount)>> + <</if>> + You feel a sudden sense of dread and regret as you watch your pale child<<if _paleAmount gt 1>>ren<</if>> slip out of your reach. <<gobsession _wraithAmount>> + <be><br> +<</if>> <<set $container.portable.value to 0>> <<set $container.portable.creatures to []>> <<link [[Next|Pregnancy Discussion]]>><</link>> diff --git a/game/base-system/settings.twee b/game/base-system/settings.twee index e91efd78d8e31f11cfd24cbe5c32179627fe8bee..c4cbb3e198341995cca03f0e0465d067f80b9362 100644 --- a/game/base-system/settings.twee +++ b/game/base-system/settings.twee @@ -1346,6 +1346,9 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <<for $_i to 0; $_i lt $NPCNameList.length; $_i++>> <<set _npcList[clone($NPCNameList[$_i])] to clone($_i)>> <</for>> + <<if $passage is "Start" or !$wraithIntro>> + <<run delete _npcList["Ivory Wraith"]>> + <</if>> <</if>> <div id="npcSettingsMenu"> @@ -1361,7 +1364,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh T.keys = {}; T.keyNames = []; - const allowed_npcs = ["steed", "guard", "inmate", "panty_thief", "school_nurse", "tower_creature", "wraith", "pinch", "black_dog", "hacker"]; + const allowed_npcs = ["steed", "guard", "inmate", "panty_thief", "school_nurse", "tower_creature", "pinch", "black_dog", "hacker"]; Object.keys(V.per_npc).forEach(k => { for (const j of allowed_npcs){ if (k.includes(j)){ @@ -1445,17 +1448,29 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <<else>> <<set _npcId-->> <</if>> + <<if _npcList[$NPCName[_npcId].nam] is undefined>> + <<set _npcId-->> + <</if>> <<replace #npcSettingsMenu>><<npcSettingsMenu>><</replace>> <</link>> | <<link "Next">> - <<set _npcId++>> + <<if _npcId is $NPCNameList.length - 1>> + <<set _npcId to 0>> + <<else>> + <<set _npcId++>> + <</if>> + <<if _npcList[$NPCName[_npcId].nam] is undefined>> + <<set _npcId++>> + <</if>> <<replace #npcSettingsMenu>><<npcSettingsMenu>><</replace>> <</link>> <br><br> <span class="gold">$NPCName[_npcId].nam the $NPCName[_npcId].title</span> <br> + <span data-target="npcname-npcidpronoun" data-disabledif="V.NPCName[T.npcId].pronoun==='i'"> <label><<radiobutton "$NPCName[_npcId].pronoun" "f" autocheck>> Female</label> | <label><<radiobutton "$NPCName[_npcId].pronoun" "m" autocheck>> Male</label> + </span> <br> <<if !$NPCName[_npcId].pregnancy or !$NPCName[_npcId].pregnancy.enabled or !$NPCName[_npcId].pregnancy.fetus.length>> <label><<radiobutton "$NPCName[_npcId].gender" "f" autocheck>> Vagina</label> | @@ -1577,8 +1592,6 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <<else>> <<if $per_npc[_pNPCId].name_known>> <span class="gold">$per_npc[_pNPCId].name the <<print _pNPCId.replace(/_/g, ' ')>></span> - <<elseif $per_npc[_pNPCId].name is "Ivory Wraith">> - <span class="wraith">The Ivory Wraith</span> <<elseif _pNPCId is "tower_creature">> <span class="gold">The Night Monster</span> <<elseif _pNPCId is "hacker">> diff --git a/game/base-system/sleep.twee b/game/base-system/sleep.twee index d7976f97471b5184d50248cf51e001904fed47b7..221bfc04848c3e278103a7944a79d733055bcb8b 100644 --- a/game/base-system/sleep.twee +++ b/game/base-system/sleep.twee @@ -45,7 +45,9 @@ <<switch $location>> <<case "home">> <<set _robin to statusCheck("Robin")>> - <<if (($robinromance is 1 and _robin.lust gte 20) or (_robin.trauma gte 50 and $rng gte 51)) and !$robinbed and $robinwakeday isnot 1 and $kylarbed isnot 1 and $robinmissing is 0>> + <<if $sleepWraith>> + <!-- Do nothing. Wraith mimicking Robin guarantees an uninterrupted sleep --> + <<elseif (($robinromance is 1 and _robin.lust gte 20) or (_robin.trauma gte 50 and $rng gte 51)) and !$robinbed and $robinwakeday isnot 1 and $kylarbed isnot 1 and $robinmissing is 0>> <!-- Robin climbs into bed with you --> <<if $hour gte 18 or $hour lte 6>> <<set _sleepinterrupt to 1>> diff --git a/game/base-system/text.twee b/game/base-system/text.twee index aa1786754383592d9bb9eb872b327fabf9d550d0..bb9cb74ed44339005bd9e0d3f52850224aa3a308 100644 --- a/game/base-system/text.twee +++ b/game/base-system/text.twee @@ -81,7 +81,7 @@ <</widget>> <<widget "charles">><<silently>> - <<if $wraith and $wraith.mimic is "Morgan" and $wraith.state is "haunt" and random(1,3) is 1>> + <<if $wraith.mimic is "Morgan" and $wraith.state is "haunt" and random(1,3) is 1>> <<set _text_output to "graverobber">> <<else>> <<set _text_output to ($player.gender_appearance is "m" ? "Charles" : "Charlene")>> @@ -573,6 +573,8 @@ <<if $npcrow.includes($index)>> <<if $npc.includes("Black Wolf") or $npc.includes("Great Hawk")>> <<set _text_output to "The " + $npc[$npcrow.indexOf($index)]>> + <<elseif $npc.includes("Ivory Wraith")>> + <<set _text_output to "The pale figure">> <<else>> <<set _text_output to $npc[$npcrow.indexOf($index)]>> <</if>> @@ -1182,7 +1184,7 @@ <<if ($NPCList[$index].type and $NPCList[$index].type isnot "human") and _args[0] isnot "normal">> <<set _text_output += $NPCList[$index].type>> <</if>> - <<if $npc_named is 1 or $description is "pale figure">> + <<if $npc_named is 1>> <<set _text_output to $description>> <<elseif $role and $role isnot "normal">> <<set _text_output += $role>> @@ -1199,7 +1201,7 @@ <</silently>><<print _text_output>><</widget>> <<widget "combatperson">><<silently>> -<<if $npc_named is 1>> +<<if $npc_named is 1 and $description isnot "pale figure">> <<set _text_output to $NPCList[$index].fullDescription>> <<elseif $NPCList[$index].name_known is 1>> <<set _text_output to $NPCList[$index].name>> @@ -1267,6 +1269,9 @@ <<set $description to $NPCName[$npcnum[$npcrow.indexOf(_n)]].title>> <<set $role to "normal">> <<set $npc_named to 1>> + <<if $NPCName[$npcnum[$npcrow.indexOf(_n)]].nam is "Ivory Wraith">> + <<set $description to "pale figure">> + <</if>> <<else>> <<set $description to $NPCList[_n].description>> <<set $role to $NPCList[_n].role>> diff --git a/game/base-system/time.twee b/game/base-system/time.twee index 8a13216bdf241a19ed3914d758d25418b65ccb9c..c9fdb46f2feacff0cc272d75e1d0c60885ddb2cb 100644 --- a/game/base-system/time.twee +++ b/game/base-system/time.twee @@ -1251,15 +1251,34 @@ <</if>> <</if>> - <<if $wraith>> - <<if $wraithAnger>> - <<if $wraithAnger gt 0>> - <<set $wraithAnger -->> + <<if $wraith.state>> + <<if $wraithAngerCooldown>> + <<if $wraithAngerCooldown gt 0>> + <<set $wraithAngerCooldown -->> <<else>> <<set $wraith.offspring to "">> - <<unset $wraithAnger>> + <<unset $wraithAngerCooldown>> <</if>> <</if>> + <<set $wraith.days ++>> + <<if $wraith.days gte 31 and $wraithIntro and !$wraithCompoundCooldown and !$wraithCompoundEvent>> + <<if !$wraithCompoundChance>> + <<set $wraithCompoundChance to 0>> + <<if $wraith.offspring is "sold">> + <<set $wraithCompoundChance += 10>> + <</if>> + <</if>> + <<set $wraithCompoundChance ++>> + <<if $wraithCompoundChance gte random(5, (60 - C.npc["Ivory Wraith"].lust))>> + <<set $wraithCompoundEvent to true>> + <<unset $wraithCompoundChance>> + <br><span class="red">A fell mist hangs over Elk Street.</span><br> + <</if>> + <<elseif $wraithCompoundCooldown gt 0>> + <<set $wraithCompoundCooldown -->> + <<elseif $wraithCompoundCooldown lte 0>> + <<unset $wraithCompoundCooldown>> + <</if>> <</if>> <<if $skulduggery gte 1000 and $skulduggeryday lt 1000>> diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee index 1ae9d993997fb29049827123e9cf1eff5cc93459..f98ae8dd9498f245a17a1e6b02ff8f2f39c88be1 100644 --- a/game/base-system/widgets.twee +++ b/game/base-system/widgets.twee @@ -497,7 +497,8 @@ <<set _drunkMod to 10>> <</if>> <<if $possessed is true and _violence gte 0>> - <<control `_violence / 10`>> + <<set $_controlMod to (10 * $enemyno)>> + <<control `_violence / $_controlMod`>> <<set $wraith.will -= _violence>> <<set _possessMod to 3>> <<else>> @@ -3746,13 +3747,13 @@ __Map__<br> }, "purity" : { name: "Purity", - value: State.temporary.npcData.purity, - activeIcon: (State.temporary.npcData.virginity.vaginal == false || State.temporary.npcData.virginity.penile == false ? "img/ui/sym_fallen_purity.png" : "img/ui/sym_purity.png"), + value: T.npcData.purity, + activeIcon: (T.npcData.virginity.vaginal == false || T.npcData.virginity.penile == false ? "img/ui/sym_fallen_purity.png" : "img/ui/sym_purity.png"), color: 'white' }, "corruption" : { name: "Corruption", - value: State.temporary.npcData.corruption, + value: T.npcData.corruption, iconOrientation : 'horizontal-inverted', activeIcon: "img/ui/sym_demon_purity.png", color: 'purple' @@ -3779,7 +3780,58 @@ __Map__<br> <</script>> <</silently>> <<if _npcData and _npcData.init is 1>> - <<if _npcOverrides and _npcOverrides.important>> + <<if (_npcData.nam is ("Ivory Wraith") or ($wraith.mimic is _npcData.nam and $wraith.revealed))>> + <<rngWraithSocial>> + <<if _npcData.nam is ("Ivory Wraith") and ($wraith.mimic is "" and (_wraithEventSocial or $wraith.type)) and $wraithIntro>> + <div class="relation-box"> + <div class="relation-top-line"> + <span class="relation-name"> + _npcData.nam + <small class="relation-title black"><i>The _wraithTitle</i></small> + </span> + <div class="quick-stats"> + <<for _j = 0; _j lt _otherNpcStats.length; _j++>> + <<if _npcData[_otherNpcStats[_j]] gt 0 and _checkRequirements(_otherNpcStats[_j])>> + <<relation-box-stat _getStatConfig(_otherNpcStats[_j])>> + <</if>> + <</for>> + </div> + </div> + <div class="relation-description"> + <<if $options.images is 1 and (_rngWraithFace is 1 or $possessed)>> + <img id="wraith" @src="'img/misc/icon/wraith' + V.wraith.state + '.png'"> + <<else>> + <<npcrelationship _npcData.nam>> + <</if>> + </div> + </div> + <<elseif $wraithIntro and $wraith.mimic is _npcData.nam and $wraith.revealed and _npcOverrides and _npcOverrides.important>> + <div class="relation-box"> + <div class="relation-top-line"> + <span class="relation-name"> + _npcData.nam? + <small class="relation-title black"><i>The _wraithTitle</i></small> + </span> + <<if _loveInterest>> + <img class="love-interest-icon" src="img/ui/love_interest.png" alt="Love Interest" title="Love Interest"/> + <</if>> + </div> + <div class="relation-description"> + <<set _rngWraithLineChance to 1>> + <<npcrelationship "Ivory Wraith">> + </div> + <div @class="'relation-stat-list' + ($options.images ? '' : ' no-images')"> + <<for _j = 0; _j lt _importantNpcStats.length; _j++>> + <<if _npcData[_importantNpcStats[_j]] gt 0 and _checkRequirements(_importantNpcStats[_j])>> + <<relation-box-stat _getStatConfig(_importantNpcStats[_j]) true>> + <</if>> + <</for>> + </div> + </div> + <<else>> + /* Do not display anything */ + <</if>> + <<elseif _npcOverrides and _npcOverrides.important>> <div class="relation-box"> <div class="relation-top-line"> <span class="relation-name"> @@ -3955,6 +4007,15 @@ __Map__<br> <<set _i to $NPCNameList.indexOf("Remy")>> <<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, -100, 100)>> <<set $NPCName[_i].dom = Math.clamp($NPCName[_i].dom, -50, 50)>> + + <<set _i to $NPCNameList.indexOf("Ivory Wraith")>> + <<if $wraith.state is "haunt">> + <<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, 0, 10)>> + <<set $NPCName[_i].lust = Math.clamp($NPCName[_i].lust, 10, 20)>> + <<else>> + <<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, 0, 20)>> + <<set $NPCName[_i].lust = Math.clamp($NPCName[_i].lust, 0, 20)>> + <</if>> <</widget>> <<widget "fringecheck">> diff --git a/game/overworld-forest/loc-asylum/events.twee b/game/overworld-forest/loc-asylum/events.twee index ab4da3f730d5648a8f8b9b9758390feacc492479..b304dd9657f641847ddff76114e30ae933e84c6b 100644 --- a/game/overworld-forest/loc-asylum/events.twee +++ b/game/overworld-forest/loc-asylum/events.twee @@ -752,7 +752,7 @@ They tease your <<genitals>> without mercy. <<pass 5>> This continues for a few minutes. Puffs of pink mist continue to emerge, along with more tendrils. Your breathing becomes deeper and your pulse quickens. <br><br> -<<if $wraith and $wraith.state is "haunt" and _wraithEvent>> +<<if $wraith.state is "haunt" and _wraithEvent>> <<arousal 5000>> <<endevent>> <<generateWraith 1 true>><<rainWraith>> @@ -762,7 +762,7 @@ This continues for a few minutes. Puffs of pink mist continue to emerge, along w <<if $wraith.seen gte 1>> The <<person>> smiles. "<span class="wraith">We meet again, <<pcpetname "Wraith">>.</span>" <<else>> - <span class="wraith">Thief. Give it back.</span>" + "<span class="wraith">Thief. Give it back.</span>" <</if>> <br><br> <<initWraith "abomination">> @@ -900,7 +900,7 @@ You pet the <<beasttype>> on the way out. Harper affixes a mask around <<his>> head. The others follow <<his>> example while <<he>> opens a safe. <<He>> pulls out a canister, then holds it at arms reach in front of you, and opens it. Purple fumes rise from within. It smells sweet. <br><br> <<pass 5>> -<<if $wraith and $wraith.state isnot "" and $rng gte 50>> +<<if $wraith.state and $rng gte 50>> You sit for a few minutes. The light above you flickers briefly, but no one else seems to notice. <<if $weather isnot "rain" and $weather isnot "snow">> You think you hear raindrops hitting the window, but when you look, the windows are all dry. diff --git a/game/overworld-forest/loc-asylum/main.twee b/game/overworld-forest/loc-asylum/main.twee index 343dddebe6b7db9f45752afd4f7c1c17f02c2b3e..e2769917e6ec5f037fec951e8a65f177d9043335 100644 --- a/game/overworld-forest/loc-asylum/main.twee +++ b/game/overworld-forest/loc-asylum/main.twee @@ -265,7 +265,7 @@ You snuggle under the covers. You slept soundly, but now feel a little rough. <<stress 5>><<gstress>> <br><br> <<elseif $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte ($arousalmax / 10) * 9>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-forest/loc-cabin/main.twee b/game/overworld-forest/loc-cabin/main.twee index b6c3942f23d6647f0e47113bff8c60372e6f2e2c..513f7f724db8b6fe06a964334cebc26ef74f11bb 100644 --- a/game/overworld-forest/loc-cabin/main.twee +++ b/game/overworld-forest/loc-cabin/main.twee @@ -762,7 +762,7 @@ Your clothes are kept in the corner. <<else>> You snuggle under the covers. <</if>> -<<if $wraith and $wraith.state isnot "" and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> +<<if $$wraith.state and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> You feel anxious, and your eyes dart over to the mirror. <</if>> <br><br> @@ -818,7 +818,7 @@ Your clothes are kept in the corner. You slept soundly, but now feel a little rough. <<stress 5>><<gstress>> <br><br> <<elseif $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte ($arousalmax / 10) * 9>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-forest/loc-forest/events.twee b/game/overworld-forest/loc-forest/events.twee index 5e0f8d05e8af52eae0bc53b428be210a9f1b1187..82d913b312d64acdd29539a3469091cd4880171d 100644 --- a/game/overworld-forest/loc-forest/events.twee +++ b/game/overworld-forest/loc-forest/events.twee @@ -785,7 +785,7 @@ Six pairs of eyes stare at you through the dim light. The pack advances on you. Despite this, you <span class="green">successfully</span> swim across. <br><br> <<rng>> - <<if $wraith and $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and $danger gte (7900 - ($allure * $forestmod))>> + <<if $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and $danger gte (7900 - ($allure * $forestmod))>> As you climb up the bank you feel your foot catch on something. <<if $slimedisable is "f">> You look down to see a pale white slime stuck to you, and many more emerging from the river. <<rainWraith true>> @@ -818,7 +818,7 @@ Six pairs of eyes stare at you through the dim light. The pack advances on you. The water is too violent, and you <span class="red">fail</span> to swim across the river, instead being swept downstream and deeper into the forest. <br><br> <<rng>> - <<if $wraith and $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> + <<if $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> As you climb up the bank you feel your foot catch on something. <<if $slimedisable is "f">> You look down to see a pale white slime stuck to you, and many more emerging from the river. <<rainWraith true>> diff --git a/game/overworld-forest/loc-forest/main.twee b/game/overworld-forest/loc-forest/main.twee index eb9acec8607d86f266724c060a842f71b9b16257..ede041dad4b0ea6854abfdc449f580004379fd8f 100644 --- a/game/overworld-forest/loc-forest/main.twee +++ b/game/overworld-forest/loc-forest/main.twee @@ -14,7 +14,7 @@ `<span class="red">You are being hunted. You see wolf prints on the ground.</span>`, `<span class="red">You are being hunted. You hear a growl in the distance</span>.` )>> - <<elseif $wraith and $wraith.hunt>> + <<elseif $wraith.hunt>> <<if $moonstate is "morning" and $hour gte 6>> With the rising of the sun, you feel a sense of relief. The dread passes. <span class="blue"><i>You're safe until the next blood moon.</i></span> <<clearWraith>> diff --git a/game/overworld-forest/loc-forest/widgets.twee b/game/overworld-forest/loc-forest/widgets.twee index c626e12b1b8ad126e3ea00c067313873cfdc41ed..44880b82b327d4cc2ff4337bec33ca760ec639a1 100644 --- a/game/overworld-forest/loc-forest/widgets.twee +++ b/game/overworld-forest/loc-forest/widgets.twee @@ -239,7 +239,7 @@ Go towards town <<widget "eventforest">> -<<if $foresthunt lte 0 and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and ($wraith.hunt or $wraith.timer gte random(0, 40))>> +<<if $foresthunt lte 0 and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and ($wraith.hunt or $wraith.timer gte random(0, 40))>> <<wHunt "forest">> <<else>> <<cleareventpool>> @@ -300,7 +300,7 @@ Go towards town <<widget "eventforestdeep">> -<<if $foresthunt lte 0 and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and ($wraith.hunt or $wraith.timer gte random(0, 20))>> +<<if $foresthunt lte 0 and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and ($wraith.hunt or $wraith.timer gte random(0, 20))>> <<wHunt "forest">> <<else>> <<cleareventpool>> @@ -777,7 +777,7 @@ You spot a decaying metal shard amongst the fallen bark at your feet. It's an ar <<widget "foresthunt">> <<set $foresthunt to 0>> -<<if $wraith and $wraith.hunt>> +<<if $wraith.hunt>> <<set $wraith.hunt to 0>> <<if $location is "forest">> <<set $wraith.exit to "forest">> @@ -828,7 +828,7 @@ You spot a decaying metal shard amongst the fallen bark at your feet. It's an ar <</if>> <<else>> <<rngWraith 2 "night">> - <<if $wraith and _wraithEvent and ($wraith.state is "haunt" or $wraith.offspring is "dead") and $syndromeeden is 1>> + <<if _wraithEvent and ($wraith.state is "haunt" or $wraith.offspring is "dead") and $syndromeeden is 1>> <<set $wraith.mimic to "Eden">><<npc Eden>><<person1>>Something whizzes past and hits a tree in front of you. You shield your face with your arms and stagger backwards. Something presses against your back, and you hear a <<personsimple>>'s voice. "I've got you now. Don't resist." <br><br> diff --git a/game/overworld-forest/loc-lake/events.twee b/game/overworld-forest/loc-lake/events.twee index 0cc84ccf98c4e175577ee75a5b12745b361a512f..2d25e7c4c0b23bae628b1f1e5679ebeebd4a2d8c 100644 --- a/game/overworld-forest/loc-lake/events.twee +++ b/game/overworld-forest/loc-lake/events.twee @@ -973,7 +973,7 @@ You awaken naked on a stone slab with your arms tied down. All around you loom < <<if isLoveInterest("Eden") and !$edenCagedEscape and (random(1, 2) is 2 or $eden_rescue isnot 1)>> <<enable_rescue>> <<set $phase2 to 1>> - <<elseif $wraith and $wraith.state isnot "" and $hallucinations gte 2>> + <<elseif $wraith.state and $hallucinations gte 2>> <<enable_rescue>> <<set $phase2 to 2>> <</if>> @@ -1017,18 +1017,7 @@ You awaken naked on a stone slab with your arms tied down. All around you loom < <br><br> A blaring shriek fills your ears as the figure opens its mouth. With the way you're bound, you have no way to block it out. <<stress 24>><<trauma 24>><<gggstress>><<gggtrauma>> <br><br> - The <<monk>> is lifted high into the air and slammed into the ground. You think <<hes>> screaming, but it's too loud to hear. Dirt and rocks are kicked up by the impact. Two more <<monks>> are grabbed by translucent limbs. The remaining <<monks>> flee, and you take the opportunity to follow. - You struggle against the bonds holding you in place. You feel them become looser, and they soon snap. Not a moment too soon. - <br><br> - You run away as fast as you can, until the screams grow distant. After a few minutes, you hear it speak again. - <br><br> - "<span class="wraith">Finally... some quiet...</span>" - <br><br> - You quicken your pace. - <<clotheson>> - <<endcombat>> - <<pass 20>> - <<link [[Next|Forest]]>><<endRainWraith>><<set $eventskip to 1>><</link>> + <<link [[Next|Lake Ritual Molestation Finish 2]]>><</link>> <<else>> You hear a gun fire close by, and a bullet lands at the group's feet. They back off and whisper amongst themselves for a moment, then disappear into the forest. <br><br> @@ -1067,6 +1056,32 @@ You awaken naked on a stone slab with your arms tied down. All around you loom < <br> <<set $stress -= 1000>> +:: Lake Ritual Molestation Finish 2 +<<effects>> +The <<monk>> is lifted high into the air and slammed into the ground. You think <<hes>> screaming, but it's too loud to hear. Dirt and rocks are kicked up by the impact. Two more <<monks>> are grabbed by translucent limbs. The remaining <<monks>> flee, and you take the opportunity to follow. +You struggle against the bonds holding you in place. You feel them become looser, and they soon snap. Not a moment too soon. +<br><br> + +<<if C.npc["Ivory Wraith"].lust gte 10>> + You run away as fast as you can, but it doesn't feel like you're getting anywhere. You see the trees as you run past them, but the pale figure doesn't get any further away. It slowly approaches you, always in the corner of your eye no matter where you look. Its mouth is closed, but the screaming still persists. + <br><br> + + You stumble briefly, and the figure dissipates with a quiet laugh, somehow audible over the shrieking. "<span class="wraith">Forget that you have nowhere to go. Run from your sins.</span>" + <<stress 12>><<ggstress>> +<<else>> + You run away as fast as you can, until the screams grow distant. After a few minutes, you hear it speak again. + <br><br> + + "<span class="wraith">Finally... some quiet...</span>" +<</if>> +<br><br> + +You quicken your pace. +<<clotheson>> +<<endcombat>> +<<pass 20>> +<<link [[Next|Forest]]>><<endRainWraith>><<set $eventskip to 1>><</link>> + :: Lake Boar Stand <<set $outside to 1>><<effects>><<lakeeffects>> diff --git a/game/overworld-forest/loc-lake/ivory/main.twee b/game/overworld-forest/loc-lake/ivory/main.twee index d3b917a16217b084ad935e24f21a9a2681661479..0359b874055651154d15c171eb6db1c1b00b37e6 100644 --- a/game/overworld-forest/loc-lake/ivory/main.twee +++ b/game/overworld-forest/loc-lake/ivory/main.twee @@ -111,7 +111,11 @@ Someone rushes up to you. It's Harper, also wearing a gas mask. "Thank goodness. <<tearful>> they look you over and help you to your feet. <<clotheson>> -"You've done well today," The doctor says. "I hope you weren't too distressed. Be well." +"You've done well today," the doctor says. "I hope you weren't too distressed. Be well." +<<if C.npc["Ivory Wraith"].lust gte 16>> + <<He>> looks pale. You hope it's just the lighting. + <<stress 6>><<gstress>> +<</if>> <br><br> You leave the room, still shaking. <br><br> @@ -358,6 +362,8 @@ This isn't Kylar. <<trauma 12>><<ggtrauma>><<set $wraith.revealed to true>> <br><br> <<if $wraith.offspring is "dead">> "<span class="wraith">This one couldn't save them,</span>" <<he>> hisses. "<span class="wraith">You let them die.</span>" The translucent limbs converge on you. +<<elseif $wraith.offspring is "sold">> + "<span class="wraith">This one couldn't save them,</span>" <<he>> hisses. "<span class="wraith">You threw them away.</span>" The translucent limbs converge on you. <<else>> "<span class="wraith">You stole it from me,</span>" <<he>> hisses. "<span class="wraith">Give it back.</span>" The translucent limbs converge on you. <</if>> @@ -369,6 +375,72 @@ This isn't Kylar. <<trauma 12>><<ggtrauma>><<set $wraith.revealed to true>> <</if>> <br> +:: Wraith Mimic Robin Dominant +<<effects>> + +You cuddle Robin, but <<his>> hands continue to wander and grope. <<He>> pulls you closer. +<br><br> + +<<link [[Insist on just cuddling|Wraith Mimic Robin Bed]]>><<trauma -6>><<stress -12>><</link>><<llove>><<ldom>><<ltrauma>><<lstress>> +<br> +<<link [[Give in|Wraith Mimic Fight]]>><<set $sexstart to 1>><</link>><<gdom>> +<br> + +:: Wraith Mimic Robin Bed +<<effects>><<set $sleepWraith to true>> +<<wearoutfit>> +You snuggle under the covers with Robin. +<br><br> + +<<if $sleeptrouble is 1 and $controlled is 0>> + <<link [[Sleep for 10 hours|Sleep]]>><<set $sleephour to 10>><<incrementautosave>><</link>> (<<timeAfterXHours 10>>)<<ltiredness>> + <br> + <<link [[Sleep for 9 hours|Sleep]]>><<set $sleephour to 9>><<incrementautosave>><</link>> (<<timeAfterXHours 9>>)<<ltiredness>> + <br> +<</if>> + +<<link [[Sleep for 8 hours|Sleep]]>><<set $sleephour to 8>><<incrementautosave>><</link>> (<<timeAfterXHours 8>>)<<ltiredness>> +<br> +<<link [[Sleep for 7 hours|Sleep]]>><<set $sleephour to 7>><<incrementautosave>><</link>> (<<timeAfterXHours 7>>)<<ltiredness>> +<br> +<<link [[Sleep for 6 hours|Sleep]]>><<set $sleephour to 6>><<incrementautosave>><</link>> (<<timeAfterXHours 6>>)<<ltiredness>> +<br> +<<link [[Sleep for 5 hours|Sleep]]>><<set $sleephour to 5>><<incrementautosave>><</link>> (<<timeAfterXHours 5>>)<<ltiredness>> +<br> +<<link [[Sleep for 4 hours|Sleep]]>><<set $sleephour to 4>><<incrementautosave>><</link>> (<<timeAfterXHours 4>>)<<ltiredness>> +<br> +<<link [[Sleep for 3 hours|Sleep]]>><<set $sleephour to 3>><<incrementautosave>><</link>> (<<timeAfterXHours 3>>)<<ltiredness>> +<br> +<<link [[Sleep for 2 hours|Sleep]]>><<set $sleephour to 2>><<incrementautosave>><</link>> (<<timeAfterXHours 2>>)<<ltiredness>> +<br> +<<link [[Sleep for 1 hour|Sleep]]>><<set $sleephour to 1>><<incrementautosave>><</link>>  (<<timeAfterXHours 1>>)<<ltiredness>> +<br> +<<link [[Just sleep|Sleep]]>><<set $sleephour to -1>><<incrementautosave>><</link>> (??:??)<<ltiredness>> +<br><br> + +<<link [[Climb out of bed|Wraith Mimic Robin Refuse]]>><<storeon "bed">><<set $wardrobe_location to "wardrobe">><<loadTempHairStyle>><<unset $sleepWraith>><</link>> + +:: Wraith Mimic Robin Refuse +<<effects>><<unset $robinbed>> + +You try to climb out of bed, but a hand grabs you. Robin pulls you back to the bed with one hand and pins you down with the other. <<He>> strokes your cheek with a third hand. +<br><br> + +Except that's not a hand. Many long, translucent limbs are pinning you to the bed. +<br><br> + +You see <<his>> skin ripple, like wax melting down a candle. <<His>> arms take on an unnatural, ivory pallor. <<endevent>><<generateWraith 1 true>><<initWraith "abomination">> +<br><br> + +This isn't Robin. <<trauma 12>><<ggtrauma>><<set $wraith.revealed to true>> +<br><br> + +"<span class="wraith">You built your cage, now lie in it,</span>" <<he>> hisses. "<span class="wraith">Lie until you forget the truth.</span>" The translucent limbs converge on you. +<br><br> + +<<link [[Next|Wraith Mimic Fight]]>><</link>> +<br> + :: Wraith Mimic Fight <<effects>> <<if $sexstart is 1>> @@ -379,7 +451,12 @@ This isn't Kylar. <<trauma 12>><<ggtrauma>><<set $wraith.revealed to true>> <<maninit>> <<set $wraith.type to "man">><<set $wraith.gen to "man">> - <<He>> pulls you into the alley, then around another corner, away from prying eyes. There's a mattress already here. Kylar collapses on it, pulling you down atop <<him>>. + <<switch $wraith.mimic>> + <<case "Kylar">> + <<He>> pulls you into the alley, then around another corner, away from prying eyes. There's a mattress already here. Kylar collapses on it, pulling you down atop <<him>>. + <<case "Robin">> + <<npckiss>><<unset $robinbed>> + <</switch>> <<set $speechdisable to 1>> <<elseif $struggle_start is 1>> <<set $combat to 1>> @@ -473,11 +550,15 @@ This isn't $wraith.mimic. <<trauma 24>><<gggtrauma>><<set $wraith.revealed to tr <<if $wraith.state is "haunt">> <<if $wraith.mimic is "Eden">> "<span class="wraith">Vulture.</span>" + <<elseif $wraith.mimic is "Robin">> + "<span class="wraith">We all have something to protect.</span>" <<else>> "<span class="wraith">Give it back.</span>" <</if>> <<elseif $wraith.offspring is "dead" and $tentacledisable is "f">> "<span class="wraith">You let them die. We will make more.</span>" +<<elseif $wraith.offspring is "sold" and $tentacledisable is "f">> + "<span class="wraith">You threw them away. We will make more.</span>" <<else>> "<span class="wraith">Carnal lust. Passion. Beautiful. <<pcPetname "Wraith">>.</span>" <</if>> @@ -921,7 +1002,7 @@ Your eyes snap open. The figure is gone, but you hear laughter echo in your head :: Wraith Caught Finish <<effects>> <<if !$wraithCount>> - <<if $wraith.state isnot "haunt" and $wraith.offspring isnot "dead">> + <<if C.npc["Ivory Wraith"].lust lte 10>> <<set $wraithCount to 1>><<set $wraithMax to 1>> <<else>> <<set $wraithCount to 0>> @@ -1075,7 +1156,7 @@ The shape behind it flickers. The claws vanish, replaced by supple skin. You loo :: Christmas Mirror Reach <<effects>> -<<generateWraith 1 true>><<rainWraith>><<set $pronoun to $per_npc.wraith.gender>> +<<generateWraith 1 true>><<rainWraith>><<set $pronoun to C.npc["Ivory Wraith"].gender>> You reach forward, taking the hand in yours. <<takeHandholdingVirginity "Ivory Wraith" "consensual">> <br><br> The skin ripples, changing between a ghastly pale and a normal tone. @@ -1121,7 +1202,7 @@ All around you, faces you recognise smile and make merriments. They're all surrounded by a pale glow. The longer you look, the more translucent they become. <br><br> -<span class="wraith">But for now, we are whole again. Enjoy it. Like sand slipping through our fingers."</span> +"<span class="wraith">But for now, we are whole again. Enjoy it. Like sand slipping through our fingers.</span>" <br><br> You find yourself returning the embrace. You don't want to let go. The inner warmth begins to fade, and the faces around you become unrecognisable. They begin to distort into unnatural shapes. You're instantly filled with panic. The pale figure slips backwards, out of your reach. <br><br> @@ -1162,7 +1243,7 @@ You open your mouth. <br><br> The words fail to form. But still, a response comes. <br><br> -"<span class="wraith">I can't answer,</span>" <<he>> murmurs. <<He>> remains silent for a long time. "<span class="wraith">I would be wrong.</span>" +"<span class="wraith">I can't answer,</span>" <<he>> murmurs. <<He>> remains silent for a long time. "<span class="wraith">I would be wrong.</span>" <<lobsession 2>> <br><br> <<link [[Fall|Christmas Mirror Fall]]>><<set $phase to 1>><</link>> <br> @@ -1187,4 +1268,156 @@ You cry out, and shoot up. You're in your bed, sweating, and breathing heavily. You rub the tiredness out of your eyes. You catch a glimpse of yourself in the mirror. You look pale. <<trauma 4>><<gtrauma>> <br><br> <<link [[Next|Bedroom]]>><<endevent>><<endWraith>><</link>> +<br> + +:: Wraith Stalk +<<if $molestationstart is 1>> + <<set $molestationstart to 0>> + <<violence 1>> + <<neutral 1>> + + <<maninit>> + <<stalk_init>> + <<set $combatgoal to "confront">> +<</if>> + +<<effects>> + +<<effectsman>><<man>> + +<<stateman>> +<br><br> +<<actionsman>> + +<<if $stalk_end>> + <span id="next"><<link [[Next|Wraith Stalk Finish]]>><<if $feetaction is "confront">><<set $phase to 1>><<else>><<set $phase to 0>><</if>><</link>></span><<nexttext>> +<<else>> + <span id="next"><<link [[Next|Wraith Stalk]]>><</link>></span><<nexttext>> +<</if>> + +:: Wraith Stalk Finish +<<effects>> + +<<if $stalk_end is "escaped">> + You slow to a walk. You hear faint laughter around you, but nobody is nearby. <<tearful>> you continue your journey. + <br><br> + + <<clotheson>> + <<endcombat>> + + <<destinationeventend>> + +<<elseif $stalk_end is "passed">> + The mist slowly fades from view. <<tearful>> you continue your journey. + <br><br> + <<clotheson>> + <<endcombat>> + + <<destinationeventend>> + +<<elseif $stalk_end is "hide">> + The mist slowly fades from view. <<covered>> <<tearful>> you emerge from your hiding place. You continue your journey. + <br><br> + + <<set $stealtextskip to 1>> + <<stealclothes>> + <<clotheson>> + <<endcombat>> + + <<destinationeventend>> + <br> +<<elseif $stalk_end is "confront">> + <<initWraith>><<set $wraith.exit to "town">> + + The pale figure laughs, leaning forward at an unnatural angle. <<rainWraith true>> + <<switch $wraith.gen>> + <<case "man">> + <<He>> raises <<his>> hand to the air, and an unseen force pushes you to the ground. + <<case "tentacles" "abomination" "slimetentacles">> + You feel something slithering up your legs. You look down to see a mass of pale tendrils surrounding you! + <<case "slime">> + <<He>> raises <<his>> hands to the air, and a shimmering purple mass appears above you. A group of pale, undulating slimes jump out! + <<case "arms">> + A manic grin crosses <<his>> face, and several additional pairs of arms spring from <<his>> back, each one gesturing in strange patterns. + <</switch>> + <br><br> + + <<if $moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6>> + <<link [[Next|Wraith Caught]]>><</link>> + <<else>> + <<link [[Next|Wraith Stalk Attack]]>><</link>> + <</if>> + <br> +<</if>> + +:: Wraith Stalk Attack +<<effects>> +<<if $struggle_start is 1>> + <<set $combat to 1>> + <<controlloss>> + <<violence 1>> + <<molested>> + <<unset $struggle_start>> +<<elseif $molestationstart is 1>> + <<set $molestationstart to 0>> + <<controlloss>> + <<violence 1>> + <<neutral 1>> + <<molested>> + <<set $enemytype to $wraith.type>> +<</if>> +<<set $rescue to 0>> + +<<effectsWraith>> + +<<switch $wraith.type>> + <<case "man">> + <<if _combatend>> + <span id="next"><<link [[Next|Wraith Stalk Attack Finish]]>><</link>></span><<nexttext>> + <<else>> + <span id="next"><<link [[Next|Wraith Stalk Attack]]>><</link>></span><<nexttext>> + <</if>> + <<case "tentacles">> + <<if $tentacles.active lte ($tentacles.max / 2)>> + <span id="next"><<link [[Next|Wraith Stalk Attack Finish]]>><</link>></span><<nexttext>> + <<else>> + <span id="next"><<link [[Next|Wraith Stalk Attack]]>><</link>></span><<nexttext>> + <</if>> + <<case "slime">> + <<if $struggle.done gte $struggle.number>> + <span id="next"><<link [[Next|Wraith Stalk Attack Finish]]>><</link>></span><<nexttext>> + <<else>> + <span id="next"><<link [[Next|Wraith Stalk Attack]]>><</link>></span><<nexttext>> + <</if>> +<</switch>> +<br> + +:: Wraith Stalk Attack Finish +<<set $outside to 0>><<effects>> + +<<if $enemyhealth lte 0 and $wraith.type is "man">> + The <<person>> looks down at you in shock as <<he>> staggers backwards. + <<if $wraith.gen is "abomination">> + The tentacles drop lifelessly to the ground, and sublimate into a pink mist. + <<elseif $wraith.gen is "arms">> + <<His>> extra arms fold back in. + <</if>> + <<His>> head snaps back, and <<he>> dissipates into nothingness with a brief shriek that echoes in your mind. Your ears ring, and you think you hear laughter. "<span class="wraith">You'll see me soon. I'll see you sooner.</span>" + <br><br> + <<tearful>> you run, not daring to look back. + <<set $wraith.defeated++>> +<<else>> + <<ejacW>> + <<kissWraith>> + <br><br> + <<He>> breaks off and gives you a regal bow as <<he>> vanishes in a torrent of water, and <<his>> laughs echo between your ears. "<span class="wraith">We'll meet again. We'll meet again. We'll meet.</span>" + <br><br> + <<tearful>> you look around, trying to make sure <<hes>> really gone. +<</if>> +<<endRainWraith true>> + +<<clotheson>> +<<endcombat>> + +<<link [[Next|Forest]]>><<set $forest to 0>><<endWraith>><<set $eventskip to 1>><</link>> <br> \ No newline at end of file diff --git a/game/overworld-forest/loc-lake/ivory/schism.twee b/game/overworld-forest/loc-lake/ivory/schism.twee index 257669adcb0487670b9c80b93eedcf86d9274fe5..78af33640c369b2880f0d169295ece3f7025fda6 100644 --- a/game/overworld-forest/loc-lake/ivory/schism.twee +++ b/game/overworld-forest/loc-lake/ivory/schism.twee @@ -659,7 +659,9 @@ You feel sick, dizzy and confused. That might have been the most intense nightma <br><br> Your vision is blurry. You wipe the tears from your eyes, but you don't remember when you started crying, or why. <span class="blue"><i>You're safe until the next blood moon.</i></span> <<set $wraithPrison.state to "gone">> -<<set $wraithPrison.vision to true>> +<<if !$wraithPrison.vision>> + <<set $wraithPrison.vision to true>><<lobsession 5>> +<</if>> <<endWraith>> <<clearWraith>> <br><br> @@ -756,8 +758,8 @@ The feeling of dread rapidly fades. <span class="blue"><i>You're safe until the <<set $real_minute to $minute>> <<set $real_time to $time>> /*morph player into Clánha*/ -<<set $player.gender to $per_npc.wraith.gender>> -<<set $player.sex to $per_npc.wraith.gender>> +<<set $player.gender to C.npc["Ivory Wraith"].gender>> +<<set $player.sex to C.npc["Ivory Wraith"].gender>> <<if $player.sex is "f">> <<set $vaginastate to 0>> <<set $vaginause to 0>> @@ -794,7 +796,7 @@ The feeling of dread rapidly fades. <span class="blue"><i>You're safe until the <<set $fringelength to 200>> <<set $fringelengthstage to "shoulder">> <<set $fringetype to "loose">> -<<set $player.breastsize to $per_npc.wraith.breastsize>> +<<set $player.breastsize to C.npc["Ivory Wraith"].breastsize>> <<bodywriting_init>> <<set $pain to 10>> @@ -849,7 +851,6 @@ The feeling of dread rapidly fades. <span class="blue"><i>You're safe until the <<widget "schismEnd">> <<unset $possessed>> -<<unset $schism>> /*restore clothes integrity and undress*/ <<silently>><<clotheson>><</silently>> <<set $worn.genitals.type.push("broken")>> @@ -965,4 +966,6 @@ The feeling of dread rapidly fades. <span class="blue"><i>You're safe until the <</switch>> <</if>> <<unfreezePlayerStats>> +<<unset $schism>> +<<set $wraith.init to 1>> <</widget>> diff --git a/game/overworld-forest/loc-lake/ivory/underwater-prison.twee b/game/overworld-forest/loc-lake/ivory/underwater-prison.twee index 82deb713a638017e8ea8fd62db67dbbcd45e59cd..2b243148b580bf895033556a40ed2102eca25272 100644 --- a/game/overworld-forest/loc-lake/ivory/underwater-prison.twee +++ b/game/overworld-forest/loc-lake/ivory/underwater-prison.twee @@ -33,7 +33,7 @@ You collapse on the cold stone floor, with your senses slowly returning to you. <<set $wraithIntro to true>> Before you floats a beautiful pale figure. <<if $wraith.state is "haunt">> - It regards you with angry red eyes, clutching at its own neck. + It regards you with angry red eyes, clutching at its own scarred neck. <br><br> "<span class="wraith">Sealed away forever. As a thief should.</span>" <br><br> @@ -48,9 +48,15 @@ You collapse on the cold stone floor, with your senses slowly returning to you. <<else>> The pale figure floats before you. <<if $wraith.state is "haunt">> - It scratches its neck, before pushing you over effortlessly. It floats down, and comes to rest as it straddles you. It grabs you by the neck. <span class="red">You can't breathe!</span> - <br><br> - "<span class="wraith">If you wish to steal from the dead, you will join them.</span>" + <<if $wraithPrison and $wraithPrison.vision>> + It places a clawed hand on your chest. You can feel a bitter chill in your whole body. You feel the room spin, and your back touch the floor. + <be><br> + "<span class="wraith">Do you understand yet, thief? Don't make me repeat myself.</span>" + <<else>> + It scratches its scarred neck, before pushing you over effortlessly. It floats down, and comes to rest as it straddles you. It grabs you by the neck. <span class="red">You can't breathe!</span> + <br><br> + "<span class="wraith">If you wish to steal from the dead, you will join them.</span>" + <</if>> <<else>> It thumbs its necklace, before gently pushing you on your back. It floats down, and comes to rest as it straddles you. <br><br> @@ -58,6 +64,11 @@ You collapse on the cold stone floor, with your senses slowly returning to you. <</if>> <</if>> Its gaze bores into you, keeping your body weak and unresponsive. +<<if C.npc["Ivory Wraith"].lust gte 12>> + A sadistic smile creeps across its face. +<<else>> + It seems to hesitate for a moment, as if in thought. +<</if>> <<if !$wraithPrison>> <br><br> <<link [[Beg|Lake Prison Intro 3]]>><<set $phase to 1>><<sub 1>><</link>> @@ -79,7 +90,16 @@ Its gaze bores into you, keeping your body weak and unresponsive. <</if>> <</if>> <br> -<<set $wraithPrison to {timer: 0, timePassed: 0, search: 0, state: "present", possession: false, masturbation: false}>> +<<if !$wraithPrison>> + <<set $wraithPrison to {timer: 0, timePassed: 0, search: 0, state: "present", possession: false, masturbation: false}>> +<<else>> + <<set $wraithPrison.timer to 0>> + <<set $wraithPrison.timePassed to 0>> + <<set $wraithPrison.search to 0>> + <<set $wraithPrison.state to "present">> + <<set $wraithPrison.possession to false>> + <<set $wraithPrison.masturbation to false>> +<</if>> :: Lake Prison Intro 3 <<set $outside to 0>><<set $location to "lake_ruin">><<set $bus to "lake_ruin_prison">><<set $wraith.exit to "lake_ruin">><<effects>> @@ -124,7 +144,7 @@ Its gaze bores into you, keeping your body weak and unresponsive. <<set $outside to 0>><<set $location to "lake_ruin">><<set $bus to "lake_ruin_prison">><<set $wraith.exit to "lake_ruin">><<effects>> With the last of your willpower, you keep moving your head, preventing the slime from entering. <br><br> -It looks down at you and whispers. "<span class="wraith">You will submit.</span>" +It looks down at you and whispers. "<span class="wraith">You will bend. Or you will break.</span>" <<initWraith "abomination">> <<startWraith>> <br><br> @@ -143,7 +163,7 @@ It brings the slime down to your <<parasite right_ear slime>> <</if>> <br><br> -You shake in the figure's grasp. You feel unnaturally aroused, especially with it straddling you like this. It's a small feeling at first. Then it grows, until <span class="lewd">an overwhelming desire for lewdity overtakes you.</span> +You shake in the figure's grasp. You feel unnaturally aroused, especially with it straddling you like this. It's a small feeling at first. Then it grows, until <span class="lewd">an overwhelming desire for lewdity overtakes you.</span> It looks pleased. <<lobsession>> <br><br> <<if !$corruption_slime>> <i>A corruption bar has appeared in the Characteristics tab.</i> @@ -222,7 +242,7 @@ Its grip on you loosens<<if $wraith.state is "haunt">>, and you gasp for breath< <<if !$wraithMax>> <<set $wraithCount to 0>> <<set $wraithMax to 2>> - <<if $wraith.offspring is "dead">> + <<if C.npc["Ivory Wraith"].lust gt 10>> <<set $wraithMax++>> <</if>> <<if $tentacledisable is "t">> @@ -284,7 +304,11 @@ Its grip on you loosens<<if $wraith.state is "haunt">>, and you gasp for breath< It suddenly lifts you, and begins to carry you. You're helpless to resist. You're placed in a decrepit cage, right next to the centre of the lichen colony. There's no door. <<if $wraith.state is "haunt">> - "<span class="wraith">I will break open your mind, and then I will show you. And then you will. Give. It. Back.</span>" + <<if !$wraithPrison.vision>> + "<span class="wraith">I will break open your mind, and then I will show you. And then you will. Give. It. Back.</span>" + <<else>> + "<span class="wraith">The descent begins again. Isn't it beautiful?</span>" + <</if>> <<if $worn.neck.cursed is 1>> It rests a hand against your $worn.neck.name. There's a flash of light, a deep groaning sound, and the metal is no more. <<set $worn.neck.type.push("broken")>> @@ -322,23 +346,34 @@ You are in a submerged prison. Pink mist swirls in the air. <<ghallucinogens>> You see the figure near the staircase leading down. It's flickering. <br><br> <<if $wraith.state is "haunt">> - It stares at you with pure anger and hatred. It screams, and begins floating in circles, clawing at its own bare neck and wailing. - <br><br> - It flickers out, only to flicker back right in front of you. It grabs you by the neck, its hand long and clawed. It swiftly drags you to the stairs, and plunges your head under the water. <<stress 24>><<pain 10>><<gpain>><<gstress>> - <br><br> - <<if !$wraithPrison.vision>> - You struggle against it. It screams. "<span class="wraith">I will show you exactly what you've done. I will find you again, thief. You have not suffered enough. You were not ready.</span>" - <<else>> - You struggle against it. It laughs. "<span class="wraith">Again, and again. See you soon.</span>" - <</if>> - <br><br> - It flickers backwards. You bring your head back up above the water, and cough. <<tearful>> you stand. The rune at the bottom of the stairs glows again. - <br><br> + <<if !$wraithPrison.vision>> + It stares at you with pure anger and hatred. It screams, and begins floating in circles, clawing at its own bare neck and wailing. + <br><br> + It flickers out, only to flicker back right in front of you. It grabs you by the neck, its hand long and clawed. It swiftly drags you to the stairs, and plunges your head under the water. <<stress 24>><<pain 10>><<gpain>><<gstress>> + <br><br> + You struggle against it. It screams. "<span class="wraith">I will show you exactly what you've done. I will find you again, thief. You have not suffered enough. You were not ready.</span>" <<gobsession>> + <br><br> + It flickers backwards. You bring your head back up above the water, and cough. <<tearful>> you stand. The rune at the bottom of the stairs glows again. + <<elseif C.npc["Ivory Wraith"].lust gte 12>> + It stares at you with pure anger. It growls, and begins floating in circles, holding its own neck. + <br><br> + It flickers out, only to flicker back right in front of you. It grabs you by the neck, its hand long and clawed. You're pressed back against the wall. <<stress 12>><<pain 5>><<gpain>><<gstress>> + <br><br> + You struggle against it. It whispers. "<span class="wraith">You've seen it. Do you seek penance? More. More pain, first.</span>" + <br><br> + It flickers backwards. You slide down the wall. <<tearful>> you stand. The rune at the bottom of the stairs glows again. <<lobsession>> + <<else>> + It stares at you with apprehension, before appearing directly in front of you. It brings a clawed hand up, as if to strike you, and you instinctively cover your face. + <br><br> + You instead feel a gentle caress against your cheek. You slowly open your eyes. <span class="green">The clawed hand is gone, replaced by pale, supple skin. You see a faint familiarity in its face.</span> + <br><br> + "<span class="wraith">We're still falling, nowhere near the bottom. But maybe we don't need to reach the bottom.</span>" <<lobsession>> + <</if>> <<else>> "<span class="wraith">My time comes to an end. You will return, next moon.</span>" - <</if>> - <<if $parasite.left_ear.name is "slime" or $parasite.right_ear.name is "slime">> - It giggles, and you feel the slime in your head wriggle. "<span class="wraith">This is the only place you can free yourself from the parasite, after all.</span>" + <<if $parasite.left_ear.name is "slime" or $parasite.right_ear.name is "slime">> + It giggles, and you feel the slime in your head wriggle. "<span class="wraith">This is the only place you can free yourself from the parasite, after all.</span>" + <</if>> <</if>> <br><br> A torrent of water shoots up from the stairs, and when it passes, the figure is gone. <span class="blue"><i>You're safe until the next blood moon.</i></span> @@ -349,7 +384,7 @@ You are in a submerged prison. Pink mist swirls in the air. <<ghallucinogens>> <<clearWraith>> <</if>> <<if _wraithEvent is true>> - <<if $wraith.state is "haunt" and $trauma gte ($traumamax / 10) * 5 and $wraithPrison.timePassed gte 180>> + <<if $wraith.state is "haunt" and $trauma gte ($traumamax / 10) * 4 and $wraithPrison.timePassed gte 140>> The pale figure emerges from the ground. You feel your energy being sapped away already. You're pushed into one of the cells and onto a bed of lichen by an unseen force. <br><br> It looks you over with a cold gaze, and grabs your cheeks with a clawed hand. @@ -359,7 +394,13 @@ You are in a submerged prison. Pink mist swirls in the air. <<ghallucinogens>> "<span class="wraith">Down we go, once again. <<pcPetname "Wraith">>.</span>" <</if>> <br><br> - It grabs a handful of lichen from the centre of the large colony, and tilts your head back. It begins to drop the crushed lichen into your mouth. You try to spit it out, but your body isn't obeying you. Once your mouth is full of the flowering lichen, it kisses you. + It grabs a handful of lichen from the centre of the large colony, and tilts your head back. It begins to drop the crushed lichen into your mouth. + <<if $wraithPrison.vision>> + You know better than to try to resist. + <<else>> + You try to spit it out, but your body isn't obeying you. + <</if>> + Once your mouth is full of the flowering lichen, it kisses you. You tense up, but soon enough, you feel an odd sense of relief. <<takeKissVirginity "Ivory Wraith" "rape">> <<stress -200>><<lllstress>><<trauma 36>><<gggtrauma>><<purity -50>><<lllpurity>><<physique_loss 16>><<llphysique>><<pain -15>><<llpain>> <br><br> @@ -403,7 +444,7 @@ You are in a submerged prison. Pink mist swirls in the air. <<ghallucinogens>> <br> <<link [[Spit it out|Lake Ruin Lichen Eat]]>><<set $phaseWraith to 3>><</link>> <br> - <<elseif $rng gte 70 and $wraithPrison.possession is false and $wraith.state is "haunt">> + <<elseif $rng gte 70 and $wraithPrison.possession is false>> <<if !$wraith.will>> <<set $wraith.will to random(1300, 1700)>> <</if>> @@ -551,7 +592,7 @@ You don't know how much time passes. Your body feels refreshed, but your mind fe <<if !$wraithMax>> <<set $wraithCount to 0>> <<set $wraithMax to 1>> - <<if $wraith.offspring is "dead">> + <<if C.npc["Ivory Wraith"].lust gt 10>> <<set $wraithMax++>> <</if>> <<if $tentacledisable is "t">> @@ -607,9 +648,16 @@ You don't know how much time passes. Your body feels refreshed, but your mind fe You push back as much as you can, clashing against its will. <br><br> <<if $willpowerSuccess>> - It's pushed back, <span class="green">rejected by your body.</span> It growls, and grabs you by the neck. - <br><br> - "<span class="wraith">Very well. We do it the hard way, then.</span>" + It's pushed back, <span class="green">rejected by your body.</span> + <<if $wraith.state is "haunt">> + It growls, and grabs you by the neck. + <br><br> + "<span class="wraith">Very well. We do it the hard way, then.</span>" + <<else>> + It laughs, and places its hands on your shoulders. + <br><br> + "<span class="wraith">And yet, it was not a request.</span>" + <</if>> <br><br> <<initWraith>> <<startWraith>> @@ -637,7 +685,7 @@ It stands up in your body, steadying itself against the bars of the cage. It cle "You're mine," it says with your voice. <br><br> -<<if $tentacledisable is "f">> +<<if $tentacledisable is "f" and $rng gte 25>> It sits down against the wall, and spreads your legs. Many pale tentacles enter your vision. <<if $worn.lower.name isnot "naked">> Your $worn.lower.name <<lowerplural>> torn to shreds in an instant.<<lowerruined>> @@ -671,23 +719,40 @@ It stands up in your body, steadying itself against the bars of the cage. It cle <</if>> <br><br> -Relief never comes, and you sit, trapped in your own body, for what feels like an eternity. It laughs in your voice, clearly enjoying the suffering it's inflicting on you. The minuscule light of the room begins to fade, and you black out. -<br><br> +<<if $wraith.state is "haunt">> + Relief never comes, and you sit, trapped in your own body, for what feels like an eternity. It laughs in your voice, clearly enjoying the suffering it's inflicting on you. The minuscule light of the room begins to fade, and you black out. + <br><br> -<<link [[Next|Lake Ruin Prison Possession 2]]>><</link>> -<br> + <<link [[Next|Lake Ruin Prison Possession 2]]>><</link>> + <br> +<<else>> + Its upper half exits your body, and its hands caress your face. You're flooded with warmth as it leaves you. You're not sure if you can resist what's coming. You're not sure if you want to. + <br><br> + + <<initWraith "man">> + <<link [[Next|Lake Ruin Prison Rape]]>><<wraithExorcise true false>><</link>> + <br> +<</if>> :: Lake Ruin Prison Possession 2 <<effects>> An instant later, it forces you awake. It has a hold of your very consciousness, and won't allow you any amount of relief. It begins to laugh hysterically in your voice. It shakily stands, and clenches your hands again. <br><br> -<span class="red">It punches you in the gut with a force much greater than what your body is normally capable of.</span> At the exact same moment, you regain feeling in your entire body. You crumble, and it leaves you. You gasp for air, nearly retching. <<gggpain>><<pain 18>> -<br><br> -Its foot comes crashing down on your back. A jolt of pain shoots through your whole body, and you go fully prone. The minuscule sensation of your <<genitals 2>> hitting the stone is enough to finally push you over the edge into an incredibly painful orgasm. <<orgasm>> -It keeps laughing as it digs its foot into your back, causing you to cry out in agony. It seems the slime covering you amplifies pain as well. -<br><br> -You barely manage to look up. It kneels down in front of you, smiling innocently. It almost looks human for a moment, but you know better than to think there's anything human about this. Its smile is quickly replaced with a sneer as it lifts your battered body, and begins to choke you. -<br><br> +<<if C.npc["Ivory Wraith"].lust gte 14>> + <span class="red">It punches you in the gut with a force much greater than what your body is normally capable of.</span> At the exact same moment, you regain feeling in your entire body. You crumble, and it leaves you. You gasp for air, nearly retching. <<gggpain>><<pain 18>> + <br><br> + Its foot comes crashing down on your back. A jolt of pain shoots through your whole body, and you go fully prone. The minuscule sensation of your <<genitals 2>> hitting the stone is enough to finally push you over the edge into an incredibly painful orgasm. <<orgasm>> + It keeps laughing as it digs its foot into your back, causing you to cry out in agony. It seems the slime covering you amplifies pain as well. + <br><br> + You barely manage to look up. It kneels down in front of you, smiling innocently. It almost looks human for a moment, but you know better than to think there's anything human about this. Its smile is quickly replaced with a sneer as it lifts your battered body, and begins to choke you. + <br><br> +<<else>> + However, just before continuing to assault you with your own body, <span class="green">it hesitates.</span> Your hands unclench. You both let out a long breath. + <br><br> + Your body sits against the wall. Your legs tuck in to your chest. You both sit there, unmoving. "Why?" + <br><br> + You're not sure which one of you asked. You don't know the answer, either. You feel your hand shakily move to your neck, as the pale figure begins to exit your body. +<</if>> <<initWraith "man">><<set $NPCList[0].lefthand to "throat">><<set $NPCList[0].righthand to "throat">><<set $neckuse to "hand">> <<link [[Next|Lake Ruin Prison Rape]]>><<wraithExorcise true false>><</link>> <br> @@ -725,7 +790,13 @@ You barely manage to look up. It kneels down in front of you, smiling innocently <<else>> You back away, and keep your eyes closed. <br><br> - <span class="red">You're kicked right in the stomach.</span> You immediately spit the lichen out, and begin coughing. <<pain 10>><<trauma 12>><<gtrauma>><<ggpain>> + <<if C.npc["Ivory Wraith"].lust gte 12>> + <span class="red">You're kicked right in the stomach.</span> You immediately spit the lichen out, and begin coughing. <<pain 10>><<trauma 12>><<gtrauma>><<ggpain>> + <<else>> + You immediately feel yourself get pushed back against the wall. You open your eyes and spit out the lichen. It's looking at you with a mixture of anger and remorse. + <br><br> + "<span class="wraith">You prefer to suffer? Very well.</span>" + <</if>> <br><br> You feel it grab you by the throat. <br><br> @@ -747,7 +818,7 @@ You barely manage to look up. It kneels down in front of you, smiling innocently You push back as much as you can, clashing against its will. <br><br> <<if $willpowerSuccess>> - It's pushed back, <span class="green">rejected by your body.</span> It tuts, and grabs you by the neck. + It's pushed back, <span class="green">rejected by your body.</span> It tuts, and grabs you by the arm. <br><br> "<span class="wraith">You'll learn to take the honey.</span>" <br><br> @@ -971,7 +1042,7 @@ When it finally ends, you collapse to the ground like a puppet with cut strings, <<endcombat>><<generateWraith 1>> <<wraithExorcise true true>> -<<if $wraith.state is "haunt" or $wraith.offspring is "dead">> +<<if C.npc["Ivory Wraith"].lust gte 14>> The pale figure looks down at you and grins. "<span class="wraith">You've consumed yourself. Now I consume the rest.</span>" <br><br> <<initWraith>> diff --git a/game/overworld-forest/loc-lake/ivory/widgets.twee b/game/overworld-forest/loc-lake/ivory/widgets.twee index fd98f535d5dfed7e9d5fa50f00a8c0d6a35e7b94..039be65f610863c748e623a44f3ee05c24c75ea5 100644 --- a/game/overworld-forest/loc-lake/ivory/widgets.twee +++ b/game/overworld-forest/loc-lake/ivory/widgets.twee @@ -6,28 +6,20 @@ <<set _w to _args[0]>> <</if>> <<set _n to (_w -1)>> -<<if !$per_npc.wraith>> +<<if $NPCName[$NPCNameList.indexOf("Ivory Wraith")].init isnot 1>> <<set _strapIgnore to true>> <<generateNPC _w a n n 20>> - <<set $NPCList[_n].healthmax to 900>> - <<set $NPCList[_n].health to $NPCList[_n].healthmax>> - <<set $NPCList[_n].description to "pale figure">> - <<set $NPCList[_n].fullDescription to "Ivory Wraith">> <<set $NPCList[_n].skincolour to "white">> - <<set $NPCList[_n].insecurity to "looks">> - <<set $NPCList[_n].lactation to 0>> - <<set $NPCList[_n].name to "Ivory Wraith">> - <<set $NPCList[_n].pronoun to "i">> - <<set $NPCName[_n].virginity to clone(setup.NPCVirginityTypes)>> - <<npcClothesType $NPCList[_n] "Wraith">> - <<generatePronouns $NPCList[_n]>> - <<set $NPCList[_n].traits to ["brooding", "watchful", "willful", "beautiful"]>> - <<saveNPC _n "wraith">> - <<checkWraith>> + <<saveNPC _n "temp_wraith">> + <<clearsinglenpc _n>> + <<initnpc "Ivory Wraith">> + <<run ["gender", "pregnancyAvoidance", "vagina", "penis", "chest", "skincolour", "breastsize", "breastsdesc", "breastdesc", "penisdesc", "penissize", "trust", "type"].forEach(s => C.npc["Ivory Wraith"][s] = clone($per_npc.temp_wraith[s]))>> + <<npc "Ivory Wraith">> + <<clearNPC "temp_wraith">> <<else>> - <<loadNPC _n "wraith">> - <<checkWraith>> + <<npc "Ivory Wraith">> <</if>> +<<checkWraith>> <<if _args[1]>> <<set $wraith.seen++>> <</if>> @@ -39,6 +31,7 @@ <<if _args[0]>> <<set $wraith.gen to _args.random()>> <<set $pronoun to "i">> + <<statsWraith>> <<switch $wraith.gen>> <<case "man">> <<set $molestationstart to 1>> @@ -47,11 +40,11 @@ <<set $noBodyWriting to true>> <<set $stealtarget to "012345">> <<maninit>> - <<set $enemyarousalmax to 900>> - <<if $wraith.state is "haunt">> - <<set $enemyanger to 100>> - <<set $enemytrust -= 40>> - <</if>> + <<set $enemyhealthmax to _wraithHP>> + <<set $enemyhealth to _wraithHP>> + <<set $enemyarousalmax to 700>> + <<set $enemyanger += ($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust * 5)>> + <<set $enemytrust -= ($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust * 2)>> <<npcexpose>> <<case "slimetentacles">> <<if $debug is 1>> @@ -59,15 +52,8 @@ <<if $slimedisable is "f" and $tentacledisable is "f">> <<set $molestationstart to 1>> <<set $wraith.type to "tentacles">> - <<if $wraith.state is "haunt">> - <<set _randomslimes to 8>> - <<set _randomtentacles to 12>> - <<else>> - <<set _randomslimes to random(4, 6)>> - <<set _randomtentacles to 4 + random(4, 8)>> - <</if>> - <<swarminit "slimes" "slime mass" "moving towards you" "encircle you" "fend off" _randomslimes 0>> - <<tentaclestart _randomtentacles 18 "tentacle" "pale">> + <<swarminit "slimes" "slime mass" "moving towards you" "encircle you" "fend off" _wraithSlimes 0>> + <<tentaclestart _wraithTentacles 18 "tentacle" "pale">> <<else>> <<initWraith "tentacles">> <</if>> @@ -92,12 +78,7 @@ <<if $tentacledisable is "f">> <<set $molestationstart to 1>> <<set $wraith.type to "tentacles">> - <<if $wraith.state is "haunt">> - <<set _randomtentacles to 10>> - <<else>> - <<set _randomtentacles to 4 + random(4, 6)>> - <</if>> - <<tentaclestart _randomtentacles 18 "tentacle" "pale">> + <<tentaclestart _wraithTentacles 18 "tentacle" "pale">> <<else>> <<initWraith "arms">> <</if>> @@ -110,15 +91,12 @@ <<set $noBodyWriting to true>> <<maninit>> <<npcexpose>> - <<set $enemyarousalmax to 1400>> - <<if $wraith.state is "haunt">> - <<set $enemyanger to 100>> - <<set $enemytrust -= 40>> - <<set _randomtentacles to 6>> - <<else>> - <<set _randomtentacles to 2 + random(2, 4)>> - <</if>> - <<tentaclestart _randomtentacles 15 "tentacle" "pale">> + <<set $enemyhealthmax to _wraithHP>> + <<set $enemyhealth to _wraithHP>> + <<set $enemyarousalmax to 1300>> + <<set $enemyanger += ($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust * 5)>> + <<set $enemytrust -= ($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust * 2)>> + <<tentaclestart _wraithTentaclesAbomination 15 "tentacle" "pale">> /* This felt a bit too powerful, partially disabled for now. */ <<for _i to 0; _i lt $tentacles.active; _i++>> /*<<set $enemyhealthmax += $tentacles[_i].tentaclehealth>>*/ @@ -136,22 +114,21 @@ <<set $noBodyWriting to true>> <<set $stealtarget to "012345">> <<maninit>> - <<for _i to 1; _i lt 4; _i++>> - <<loadNPC _i "wraith">> - <<set $NPCList[_i].lefthand to 0>> - <<set $NPCList[_i].righthand to 0>> - <<set $NPCList[_i].pronoun to "i">> - <<set $NPCList[_i].mouth to "none">> - <<set $NPCList[_i].penis to "none">> - <<set $NPCList[_i].vagina to "none">> - <<set $NPCList[_i].active to "active">> + <<for _iw to 1; _iw lt 4; _iw++>> + <<npc "Ivory Wraith" -1>> + <<set $NPCList[_iw].lefthand to 0>> + <<set $NPCList[_iw].righthand to 0>> + <<set $NPCList[_iw].mouth to "none">> + <<set $NPCList[_iw].penis to "none">> + <<set $NPCList[_iw].vagina to "none">> + <<set $NPCList[_iw].active to "active">> <</for>> + <<set $enemyhealth to _wraithHP>> + <<set $enemyhealthmax to _wraithHP>> <<npcexpose>> - <<set $enemyarousalmax to 900>> - <<if $wraith.state is "haunt">> - <<set $enemyanger to 100>> - <<set $enemytrust -= 40>> - <</if>> + <<set $enemyarousalmax to 700>> + <<set $enemyanger += ($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust * 5)>> + <<set $enemytrust -= ($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust * 2)>> <<default>> <<initWraith "man">> <</switch>> @@ -181,6 +158,14 @@ <<set $speechdisable to 1>><<set $enemynomax to 1>> <</widget>> +<<widget "statsWraith">> + <<set _wraithMod to (1 + (Math.floor($NPCName[$NPCNameList.indexOf("Ivory Wraith")].lust / 3)))>> + <<set _wraithHP to 600 + (50 * _wraithMod)>> + <<set _wraithSlimes to (1 + _wraithMod)>> + <<set _wraithTentacles to Math.clamp((4 + _wraithMod), 6, 10)>> + <<set _wraithTentaclesAbomination to Math.clamp(Math.floor(1 + _wraithMod), 4, 7)>> +<</widget>> + <<widget "startWraith">> <<switch $wraith.gen>> <<case "man">> @@ -339,8 +324,8 @@ <</widget>> <<widget "checkWraith">> -<<if !$wraith>> - <<set $wraith to {seen: 0, defeated: 0, evaded: 0, nightmare: 0, timer: 0, hunt: 0, state: "", mimic: "", revealed: false, offspring: "", exit: ""}>> +<<if !$wraith.init>> + <<set $wraith to {init: 1, seen: 0, days: 0, defeated: 0, evaded: 0, nightmare: 0, timer: 0, hunt: 0, state: "", mimic: "", revealed: false, offspring: "", exit: ""}>> <</if>> <<if $days gte 32 and $month isnot "october" and !$wraithSkip>> <<set $wraith.state to "active">> @@ -354,10 +339,7 @@ <<set $wraithCheck to true>> <</if>> <<if $moonstate isnot "morning" and $wraith.state isnot "" and $wraith.timer lte 0>> - <<set $wraith.timer to 0>> - <<if $wraith.state is "haunt">> - <<set $wraith.timer += 10>> - <</if>> + <<set $wraith.timer to C.npc["Ivory Wraith"].lust>> <</if>> <</if>> <</widget>> @@ -403,6 +385,8 @@ <<unset $nextPassageCheck>> <<unset $phaseWraith>> <<unset $wraithPaleVisit>> + <<unset $wraithApologise>> + <<unset $wraithApologiseCooldown>> <</if>> <</widget>> @@ -410,6 +394,14 @@ <<set _text_output to ($wraith.state is "haunt" ? "red" : "blue")>> <</silently>><<print _text_output>><</widget>> +<<widget "wraithShamble">><<silently>> +<<if $compoundWraith>> + <<set _text_output to ($compoundWraith is "willing" ? "walk" : "shamble")>> +<<else>> + <<set _text_output to "shamble">> +<</if>> +<</silently>><<print _text_output>><</widget>> + <<widget "speechWraith">><<silently>> <<if $possessed and _args[0] isnot "lines">> <<set _speakPool to ["speak","grunt","giggle","whisper","sneer","laugh","yell","spit","speak in an eerily calm tone"]>> @@ -520,7 +512,7 @@ <<run _linePool.pushUnique( "The wing-clipped are better smothered.", "How far would you go? How far can you run?", - "You've accepted your cage, songbird. Lie in it." + "You've built your cage, songbird. Lie in it." )>> <<if $NPCName[$NPCNameList.indexOf("Robin")].trauma gte 20>> <<run _linePool.pushUnique("I'm sorry that you put your trust in <<phim>>.")>> @@ -542,7 +534,7 @@ "Were your grip a little stronger.", "Blistering emerald green, blinding the world. Such is your envy." )>> - <<if $wraith.offspring is "dead">> + <<if ["dead","sold"].includes($wraith.offspring)>> <<run _linePool.pushUnique("You failed them. You failed us.")>> <</if>> <<if $syndromekylar is 1>> @@ -576,7 +568,7 @@ "Water down your mind, until you destroy all you love." )>> <<if $farm.aggro gte 60>> - <<run _linePool.pushUnique("The locusts will have a new feast.")>> + <<run _linePool.pushUnique("The locusts will have a new feast.")>> <</if>> <</if>> <<if $npc.includes("Black Wolf")>> @@ -698,20 +690,22 @@ <<elseif $wraith.state isnot "haunt" and $rng lte 8 and _args[0] isnot "lines">> <<set _speechWraith to "<<He>> holds <<his>> necklace close.">> <<else>> - <<set _speaks to [ - "<<He>> snarls", - "<<He>> growls", - "<<He>> cackles", - "<<He>> purrs", - "<<He>> hisses", - "<<He>> emanates", - "<<He>> speaks", - "<<He>> grunts", - "<<He>> giggles", - "<<He>> whispers", - "<<He>> speaks in an eerily calm tone", - "<<His>> voice comes from directly behind you" - ].pluck()>> + <<if _args[0] isnot "lines">> + <<set _speaks to [ + "<<He>> snarls", + "<<He>> growls", + "<<He>> cackles", + "<<He>> purrs", + "<<He>> hisses", + "<<He>> emanates", + "<<He>> speaks", + "<<He>> grunts", + "<<He>> giggles", + "<<He>> whispers", + "<<He>> speaks in an eerily calm tone", + "<<His>> voice comes from directly behind you" + ].pluck()>> + <</if>> <<if $alarm is 1>> <<set $alarm to 0>> <<set _speaks to "repeats your screams for help in a mocking tone, in your own voice">> @@ -735,11 +729,8 @@ "Join me, why don't you? It's not far.", "Like sand slipping through your fingers.", "All that matters is the blissful present.", - "You don't have enough. You never had enough.", - "Let's see how you like being the puppet, hmm?", "One million, two million, three million, four.", "What is within is greater than what is without.", - "Why don't you take off that pesky skin of yours?", "I'm glad to see you again. I missed you, you know.", "Why did they leave? Because they were never there.", "We're all that's left. Can you hear them? No, you can't.", @@ -759,9 +750,6 @@ "Sleep forever.", "Cut you to perfection.", "Never to see the moon again.", - "Safety. Love. What beautiful lies.", - "Carve your name. I'll wash it away.", - "Even if I have to drag you there myself.", "Wrath wrath ?sin ?sin ?sin ?sin ?sin wrath.", "Water down your shame, until the lake runs dry.", "Shoot for the stars, that you may crash and burn.", @@ -776,6 +764,16 @@ "Can I pretend you're back, if only for a while?" )>> <</if>> + <<if C.npc["Ivory Wraith"].lust gte 10>> + <<run _linePool.pushUnique( + "Safety. Love. What beautiful lies.", + "Carve your name. I'll wash it away.", + "Even if I have to drag you there myself.", + "You don't have enough. You never had enough.", + "Let's see how you like being the puppet, hmm?", + "Why don't you take off that pesky skin of yours?" + )>> + <</if>> <<if $templePromised is "Sydney">> <<run _linePool.pushUnique( "And you are wedded to calamity." @@ -875,15 +873,27 @@ <<widget "effectsWraith">> <<switch $wraith.gen>> <<case "man">> - <<effectsman>><<man>> + <<effectsman>> + <<if $wraithApologise>> + <<apologyWraith>> + <<else>> + <<man>> + <</if>> <<rescueWraith>> <<stateman>> <br><br> <<actionsman>> <<case "arms">> - <<set _introSkip to true>> <<set $enemynomax to 4>> - <<effectsman>><<man>> + <<effectsman>> + <<for _iw to 1; _iw lt 4; _iw++>> + <<set $NPCList[_iw].intro to -1>> + <</for>> + <<if $wraithApologise>> + <<apologyWraith>> + <<else>> + <<man>> + <</if>> <<rescueWraith>> <<set $enemyno to 1>> <<stateman>> @@ -891,24 +901,30 @@ <<actionsman>> <<case "tentacles">> <<chastityBreakWraith>> + <<set $NPCList[0].intro to 1>> <<effectstentacles>><<speechWraith>><<tentacles>> <<statetentacles>> - <br><br> <<actionstentacles>> <<case "slimetentacles">> <<chastityBreakWraith>> + <<set $NPCList[0].intro to 1>> <<swarmeffects>><<effectstentacles>><<speechWraith>> <<swarm>><<tentacles>> <<statetentacles>> - <br><br> <<actionsOmni>> <<case "slime">> + <<set $NPCList[0].intro to 1>> <<speechWraith>><<struggle>> <<case "abomination">> <<chastityBreakWraith>> - <<effectsabomination>><<abomination>> + <<effectsabomination>> + <<if $wraithApologise>> + <<apologyWraith>> + <<else>> + <<abomination>> + <</if>> <<rescueWraith>> <<stateabomination>> <br><br> @@ -985,6 +1001,13 @@ <</if>> <</widget>> +<<widget "apologyWraith">> + <<unset $wraithApologise>> + <br> + <<He>> freezes, and dissipates slightly. A face you swear you've seen before appears in the mist. <<He>> looks at you with an unreadable expression and raises <<his>> arm, just a bit. <<He>> quickly shies away, reforming the mist around <<himself>>. <span class="green"><<He>> seems unable to act.</span> + <br><br> +<</widget>> + <<widget "rescueWraith">> <<if $location is "forest">> <<if $alarm is 1 and $forest lte 20 and $gwylan_aborted isnot 3>> @@ -1028,6 +1051,9 @@ <</switch>> <<if $pain gte 100>> <<He>> seems to revel in your suffering. + <<elseif C.npc["Ivory Wraith"].lust gte random(10,30) and $wraith.state is "haunt">> + <<His>> body flickers and <span class="red">something strikes your stomach</span>. You double over and <<he>> <<if ["abomination","arms"].includes($wraith.gen)>>laughs louder<<else>>laughs<</if>>. + <<gstress>><<gtrauma>><<gpain>><<violence 10>> <</if>> <br><br> <</if>> @@ -1037,23 +1063,34 @@ <<if _args[0] is "stress" and $stress gte $stressmax>> <<set $_wraithStress to true>> <</if>> + <<He>> approaches you, <<if $wraith.type is "tentacles" or $wraith.gen is "abomination">> - <<He>> approaches you, pushing some tentacles aside. + pushing some tentacles aside. <<if $tentacleMouth>> <<set $_outof to (["tentacle", "tentacledeep"].includes($mouthstate) ? "out of" : "away from")>> <<He>> <span class="lblue">yanks the $tentacleMouth $_outof your mouth.</span> <</if>> + <<else>> + <<if C.npc["Ivory Wraith"].lust gte 16>> + grabbing your hair in a painful grip with <<if $wraith.gen is "arms">>more than two<<else>>both<</if>> hands. + <<trauma 12>><<stress 6>><<arousal 1000>> + <<elseif C.npc["Ivory Wraith"].lust gte 11>> + holding the back of your neck with one hand. + <<trauma 6>><<arousal 500>> + <<else>> + cupping your cheek with a surprising gentleness. + <</if>> <</if>> <<He>> kisses you, and your ears immediately begin to ring. Your fingers and toes go cold, and your face becomes fiery hot. Until it, too, grows cold. You feel as though some part of you was drained away. <<takeKissVirginity "Ivory Wraith" "rape">> <<arousal 2000>><<gggarousal>> - <<trauma 36>><<gggtrauma>><<purity -50>><<lllpurity>><<physique_loss 16>><<llphysique>><<pain -15>><<llpain>> + <<trauma 30>><<gggtrauma>><<purity -50>><<lllpurity>><<physique_loss 16>><<llphysique>><<pain -15>><<llpain>> <<if $arousal gte $arousalmax>> <br><br> <<orgasm>> Your climax is torturous and painful as you writhe against <<him>>. <<His>> assault only grows more intense. You feel weak. - <<trauma 36>><<gggtrauma>><<purity -25>><<llpurity>><<physique_loss 8>><<lphysique>><<awareness -20>><<lllawareness>> + <<trauma 30>><<gggtrauma>><<purity -25>><<llpurity>><<physique_loss 8>><<lphysique>><<awareness -20>><<lllawareness>><<gobsession>> <<if $_wraithStress>> <<set $stress to $stressmax>> <</if>> @@ -1064,7 +1101,7 @@ <<if !$possessed>> <<switch _args[0]>> <<case "town">> - <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte (random(0, 50))>> + <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte (random(0, 50))>> <br><br> <<set $wraith.hunt to 1>> A wave of dizziness and confusion washes over you. Every time you blink, you see a blurred image. @@ -1076,7 +1113,7 @@ <<else>> <span class="red">Dread lingers in the air.</span> <</if>> - <<elseif $wraith and $wraith.hunt isnot 0>> + <<elseif $wraith.hunt>> <<if $moonstate is "morning" and $hour gte 6>> <br><br> With the rising of the sun, you feel a sense of relief. The dread passes. <span class="blue"><i>You're safe until the next blood moon.</i></span> @@ -1087,13 +1124,13 @@ The feeling of dread remains. Something's wrong. <span class="red">Whatever was hunting you is still coming.</span><<stress 3>><<gstress>> <<elseif $wraith.state is "haunt">> <span class="red">Something terrible is hunting you.</span> - <<set $wraith.hunt++>> + <<set $wraith.hunt += (0.5 + (C.npc["Ivory Wraith"].lust / 40))>> <<if $wraith.hunt gte ($rng / 10)>> <<set $eventforced to true>> <</if>> <<else>> <span class="red">Something unnatural stalks the streets.</span> - <<set $wraith.hunt += 0.5>> + <<set $wraith.hunt += (0.5 + (C.npc["Ivory Wraith"].lust / 40))>> <<if $wraith.hunt gte ($rng / 10)>> <<set $eventforced to true>> <</if>> @@ -1125,7 +1162,7 @@ <br><br> <<link [[Next|Forest]]>><<set $eventskip to 1>><</link>> <<case "drain">> - <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte (random(0, 60))>> + <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte (random(0, 60))>> <<set $wraith.hunt to 1>> <br><br> A wave of dizziness and confusion washes over you. Every time you blink, you see a blurred image. @@ -1137,27 +1174,27 @@ <<else>> <span class="red">Dread lingers in the air.</span> <</if>> - <<elseif $wraith and $wraith.hunt isnot 0>> + <<elseif $wraith.hunt>> <<if $moonstate is "morning" and $hour gte 6>> <br><br> As the first rays of sunlight trickle through open manholes and grates, you feel a sense of relief. The dread passes. <span class="blue"><i>You're safe until the next blood moon.</i></span> <<clearWraith>> <<elseif $wraith.state is "haunt">> <span class="red">Something terrible is hunting you.</span> - <<set $wraith.hunt++>> + <<set $wraith.hunt += (0.5 + (C.npc["Ivory Wraith"].lust / 40))>> <<if $wraith.hunt gte ($rng / 10)>> <<set $eventforced to true>> <</if>> <<else>> <span class="red">Something unnatural stalks the streets above.</span> - <<set $wraith.hunt += 0.5>> + <<set $wraith.hunt += (0.5 + (C.npc["Ivory Wraith"].lust / 40))>> <<if $wraith.hunt gte ($rng / 10)>> <<set $eventforced to true>> <</if>> <</if>> <</if>> <<case "sewers">> - <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte (random(0, 60))>> + <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte (random(0, 60))>> <<set $wraith.hunt to 1>> <br><br> A wave of dizziness and confusion washes over you. Every time you blink, you see a blurred image. @@ -1169,14 +1206,14 @@ <<else>> <span class="red">Dread lingers in the air.</span> <</if>> - <<elseif $wraith and $wraith.hunt isnot 0>> + <<elseif $wraith.hunt>> <<if $moonstate is "morning" and $hour gte 6>> <br><br> You feel a sense of relief, and instinctively know the sun has risen. The dread passes. <span class="blue"><i>You're safe until the next blood moon.</i></span> <<clearWraith>> <<elseif $wraith.state is "haunt">> <span class="red">Something terrible is hunting you.</span> - <<set $wraith.hunt++>> + <<set $wraith.hunt += (0.5 + (C.npc["Ivory Wraith"].lust / 40))>> <<if $wraith.hunt gte ($rng / 10)>> <<set $eventforced to true>> <</if>> @@ -1222,7 +1259,7 @@ <</widget>> <<widget "wPersist">> -<<if $wraith and !$possessed>> +<<if $wraith.state and !$possessed>> <<if $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5)>> <<if _args[0] is "forest">> <<if $foresthunt gte 1>> @@ -1263,11 +1300,9 @@ <</widget>> <<widget "wTimerProgress">> -<<if $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> +<<if $wraith.state and $wraith.hunt is 0 and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> <<set $wraith.timer++>> - <<if $wraith.offspring is "dead">> - <<set $wraith.timer++>> - <</if>> + <<set $wraith.timer += Math.floor(C.npc["Ivory Wraith"].lust / 10)>> <<if $rng gte 60 and ($parasite.left_ear.name is "slime" or $parasite.right_ear.name is "slime")>> You hear the slime in your ear make an unusual sound, <span class="red">as if it's calling out to something.</span> <<set $wraith.timer++>> @@ -1280,6 +1315,13 @@ <<case "home">> <<link [[Next|Bedroom]]>><<endevent>><<set $eventskip to 1>><</link>> <br> + <<case "sleep">> + <<set $wardrobe_location to "wardrobe">> + <<wardrobeSelection true>> + <<radiooutfits>> + <br><br> + <<link [[Next|Bedroom]]>><<endevent>><<set $eventskip to 1>><</link>> + <br> <<case "cabin">> <<link [[Next|Eden Cabin]]>><<endevent>><<set $eventskip to 1>><</link>> <br> @@ -1333,11 +1375,11 @@ <</widget>> <<widget "rngWraith">> -<<if $wraith and $wraith.state isnot "">> - <<if _args[1] is "night" and $daystate isnot "night">> +<<if $wraith.state>> + <<if _args[1] is "night" and $daystate isnot "night" or _args[1] is "noBlood" and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> <<set _wraithEvent to false>> <<else>> - <<set _rngWraith to ($wraith.state is "haunt" or $wraith.offspring is "dead") ? 4 : 2>> + <<set _rngWraith to 2 + (Math.floor(C.npc["Ivory Wraith"].lust / 10))>> <<if $daystate is "night">> <<set _rngWraith += 2>> <</if>> @@ -1349,6 +1391,31 @@ <</if>> <</widget>> +<<widget "rngWraithSocial">> +<<if $wraith.state and !_rngWraithSocialCheck>> + <<set _rngWraithSocialCheck to true>> + <<set _rngWraithFace to ($wraith.type ? random(1,10) : random(1,30))>> + <<set _rngWraithLineChance to random(1,15)>> + <<set _rngWraithSocial to 2 + (Math.floor(C.npc["Ivory Wraith"].lust / 10))>> + <<if $daystate is "night">> + <<set _rngWraithSocial += 2>> + <</if>> + <<if ($hallucinations gte 1 and _rngWraithSocial gte random(1,100)) or ($moonstate is "evening" and $hour gte 21) or ($moonstate is "morning" and $hour lt 6)>> + <<set _wraithEventSocial to true>> + <</if>> + <<if $wraith.mimic isnot "" and $wraith.revealed>> + <<set _wraithTitle to "pretender">> + <<else>> + <<switch $wraith.type>> + <<case "tentacles">><<set _wraithTitle to "writhing">> + <<case "abomination">><<set _wraithTitle to "profane">> + <<case "arms">><<set _wraithTitle to "vain">> + <<default>><<set _wraithTitle to ($wraith.state is "haunt" ? "forlorn" : "reflection")>> + <</switch>> + <</if>> +<</if>> +<</widget>> + <<widget "wraithEventStreet">> <<set $wraith.exit to "town">> <<if $wraith.hunt gte 10>> @@ -1618,7 +1685,7 @@ As you walk, your footfalls become lighter. You're having trouble breathing<<if $exposed lte 0>>, and your clothes feel heavy<</if>>. <br><br> <<if $location is "forest" or $location is "lake">> - You steady yourself against a tree, panting. You look around, and everything's gone quiet. + You steady yourself against a tree, panting. You look around, and notice that everything's gone quiet. <<switch $weather>> <<case "snow">> A cold breeze accompanies the snowfall. You look back, finding your footprints already covered. You've completely lost your sense of direction. @@ -1647,7 +1714,7 @@ As you walk, your footfalls become lighter. You're having trouble breathing<<if You try to turn and run, but your legs won't move, and you can't help but look. A beautiful pale figure floats just above the ground, wearing translucent white robes that flow in the wind. Its eyes flash a bright <<wraithEyes>> as it sees you. <<if $wraith.state is "haunt">> - It raises a hand to its neck, seemingly trying to grab something that isn't there. + It raises a hand to its scarred neck, seemingly trying to grab something that isn't there. <br><br> "<span class="wraith">Thief. Give it back, or <<if $weather is "snow">>this blizzard will freeze you<<else>>this deluge will drown you<</if>>.</span>" <br><br> @@ -1698,7 +1765,7 @@ A beautiful pale figure floats just above the ground, wearing translucent white A beautiful pale figure stands before you. It looks you over, before pulling you closer. It's hard to look away. <br><br> <<if $wraith.state is "haunt">> - It holds a clenched hand to its neck, and bares its teeth at you. + It holds a clenched hand to its scarred neck, and bares its teeth at you. <br><br> "<span class="wraith">Thief. Give it back.</span>" <<else>> @@ -1816,3 +1883,52 @@ A beautiful pale figure floats just above the ground, wearing translucent white <<set $control to $controlSaved>><<unset $controlSaved>> <</if>> <</widget>> + +<<widget "gobsession">> + <<if !$wraith.init>> + <span class="red">ERROR: Wraith is not initialised.</span> + <br><br> + Offending event: $passage | Location: $location ($bus) + <<else>> + <<set $_change to (_args[0] ? _args[0] : 1)>> + <<set C.npc["Ivory Wraith"].lust += $_change>> + <<if $statdisable is "f">> | + <<switch $_change>> + <<case 1 2>> + <span class="red">+ Obsession</span> + <<case 3 4>> + <span class="red">+ + Obsession</span> + <<case 5 6 7 8 9 10>> + <span class="red">+ + + Obsession</span> + <<default>> + <</switch>> + <</if>> + <</if>> + <<relationshipclamp>> +<</widget>> + +<<widget "lobsession">> + <<if !$wraith.init>> + <span class="red">ERROR: Wraith is not initialised.</span> + <br><br> + Offending event: $passage | Location: $location ($bus) + <<else>> + <<set $_change to (_args[0] ? _args[0] : 1)>> + <<set C.npc["Ivory Wraith"].lust -= $_change>> + <<if $wraith.state is "haunt" and C.npc["Ivory Wraith"].lust lt 10>> + <<set $_change -= (10 - C.npc["Ivory Wraith"].lust)>> + <</if>> + <<if $statdisable is "f">> | + <<switch $_change>> + <<case 1 2>> + <span class="blue">- Obsession</span> + <<case 3 4>> + <span class="blue">- - Obsession</span> + <<case 5 6 7 8 9 10>> + <span class="blue">- - - Obsession</span> + <<default>> + <</switch>> + <</if>> + <</if>> + <<relationshipclamp>> +<</widget>> diff --git a/game/overworld-forest/loc-lake/underwater.twee b/game/overworld-forest/loc-lake/underwater.twee index ce4191cf4868c40da7ef2fb5139d28cba350db63..ee1fd51a6dead92c8df33da300ce91cec737b22e 100644 --- a/game/overworld-forest/loc-lake/underwater.twee +++ b/game/overworld-forest/loc-lake/underwater.twee @@ -5,7 +5,7 @@ <<passoutlake>> <<elseif $foresthunt gte 10>> <<foresthunt>> -<<elseif ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte random(0, 10) and !$possessed>> +<<elseif ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte random(0, 10) and !$possessed>> <<wHunt "lake">> <<else>> <<if $season is "winter">> @@ -200,7 +200,7 @@ You are in the submerged ruin beneath the lake. Glowing purple lichen covers anc <<passoutlake>> <<elseif $foresthunt gte 10>> <<foresthunt>> -<<elseif ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte random(0, 10) and !$possessed>> +<<elseif ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte random(0, 10) and !$possessed>> <<wHunt "lake">> <<else>> <<if $sciencelichenknown is 1 and $sciencelichenlake isnot 1 and $scienceproject is "ongoing">> @@ -245,7 +245,7 @@ You are deep in the submerged ruin beneath the lake. Pots of different sizes fil <<passoutlake>> <<elseif $foresthunt gte 10>> <<foresthunt>> -<<elseif ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte random(0, 10) and !$possessed>> +<<elseif ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte random(0, 10) and !$possessed>> <<wHunt "lake">> <<else>> <<if $lakeruinkey is 1>> @@ -273,9 +273,7 @@ You are deep in the submerged ruin beneath the lake. Pots of different sizes fil <<set $lakeruinkey to 2>> You hear the ancient mechanism creak and the door groans open. Beyond is a plinth, stood alone in a rubble-strewn room. Atop it sits an ivory necklace. It's studded with blue jewels. <br><br> -<<link [[Take it|Lake Ruin Ivory]]>><<set $antiquemoney += 2000>><<museumAntiqueStatus "antiqueivorynecklace" "found">><</link>> -<br> -<<link [[Leave|Lake Ruin Deep]]>><</link>> +<<link [[Swim inside|Lake Ruin Plinth]]>><</link>> <br> :: Lake Ruin Sit @@ -364,12 +362,15 @@ The creature recoils from you and disappears into darkness. <<tearful>> you look <<set $outside to 0>><<set $location to "lake_ruin">><<underwater>><<effects>><<lakeeffects>> You are deep in the lake ruin, in a small room with a plinth. +<<if $museumAntiques.antiques.antiqueivorynecklace is "notFound">> + An ivory necklace sits atop it. It's studded with blue jewels. +<</if>> <<set _leave to 1>> <<set _bmoon to (($moonstate is "evening" and $hour gte 21) or ($moonstate is "morning" and $hour lt 6))>> <<set _parasite to ($parasite.left_ear.name is "slime" or $parasite.right_ear.name is "slime")>> <<if _bmoon>> /* Display these on every blood moon entry */ - <<if $wraith and $wraith.hunt>> + <<if $wraith.hunt>> You sense the presence following you come to a stop. <span class="blue">It can't reach you in here.</span> <<set $wraith.hunt to 0>><<set $foresthunt to 0>><<set $wraith.timer += 5>> <</if>> @@ -390,19 +391,13 @@ You are deep in the lake ruin, in a small room with a plinth. <<link [[Sit on the plinth|Lake Ruin Sit]]>><</link>> <br> -<<elseif $museumAntiques.antiques.antiqueivorynecklace is "notFound">> - An ivory necklace sits atop it. It's studded with blue jewels. - <br><br> - - <<link [[Take it|Lake Ruin Ivory]]>><<set $antiquemoney += 2000>><<museumAntiqueStatus "antiqueivorynecklace" "found">><</link>> - <br> <<elseif $tentacledisable is "f" and $hallucinations gte 2 and !_bmoon>> - You look around the barren room. You don't see anything besides the plinth, but you hear a faint slithering sound. <span class="blue">Something's watching you.</span> + You look around the barren room. You don't see anything besides the plinth<<if $museumAntiques.antiques.antiqueivorynecklace is "notFound">> and necklace<</if>>, but you hear a faint slithering sound. <span class="blue">Something's watching you.</span> <br><br> <<link [[Search|Lake Ruin Deep Offer]]>><<loxygen>><</link>> <br> -<<elseif $tentacledisable is "f" and _bmoon and $phase isnot 1>> +<<elseif $tentacledisable is "f" and _bmoon and $phase isnot 1 and $museumAntiques.antiques.antiqueivorynecklace isnot "notFound">> <<set _leave to 0>> <br><br> You feel the water stirring around you, growing more agitated as you look around. From the darkness, thinly illuminated by the red moonlight, tentacles lash out. <span class="red">Two of them wrap around your ankles, beginning to pull you further into the room!</span> @@ -412,7 +407,7 @@ You are deep in the lake ruin, in a small room with a plinth. <br> <<link [[Escape|Lake Ruin Deep Consentacles Leave]]>><<loxygen>><</link>><<swimmingdifficulty 600 1200>> <br> -<<elseif _bmoon and ($phase is 1 or $tentacledisable isnot "f")>> +<<elseif _bmoon>> The water around you is eerily silent, and deathly still, the room barely illuminated in the red glow. <br><br> <<else>> @@ -420,6 +415,10 @@ You are deep in the lake ruin, in a small room with a plinth. <br><br> <</if>> <<if _leave>> + <<if $museumAntiques.antiques.antiqueivorynecklace is "notFound">> + <<link [[Take the necklace|Lake Ruin Ivory]]>><<set $antiquemoney += 2000>><<museumAntiqueStatus "antiqueivorynecklace" "found">><</link>> + <br> + <</if>> <<link [[Leave|Lake Ruin Deep]]>><<set $phase to 0>><</link>> <br> <</if>> @@ -432,7 +431,7 @@ You lift the necklace from the plinth. The craftsmanship is masterful, and you g You suddenly hear pounding on the walls all around you. <<if $wraith and $wraith.seen gte 1>>A familiar<<else>>An unfamiliar<</if>> voice cries out, and it feels like something's grabbing at your arms and legs. You instinctively flail and push yourself backwards through the water. <<trauma 12>><<ggtrauma>> <br><br> It dies down after a few moments, leaving you shaken. - <<if $wraith and $wraith.hunt>> + <<if $wraith.hunt>> The dread slowly passes, and you no longer sense the presence hunting you. <span class="blue"><i>You're safe until the next blood moon.</i></span> <br><br> <</if>> @@ -442,7 +441,7 @@ You lift the necklace from the plinth. The craftsmanship is masterful, and you g <<set $wraithSkip to true>> <</if>> <<tearful>> you exit the room. -<<elseif $wraith and $wraith.state isnot "">> +<<elseif $wraith.state>> You feel a twinge of dread as you look at your reflection in the blue gemstones. You look pale. <<stress 6>><<gstress>> <br><br> You decide not to linger, and leave the room with the necklace in hand. @@ -468,6 +467,9 @@ Whatever it is, it sounds like it's behind you. No matter what direction you fac :: Lake Ruin Deep Offer 2 <<set $outside to 0>><<set $location to "lake_ruin">><<underwater>><<effects>><<lakeeffects>> +<<if $museumAntiques.antiques.antiqueivorynecklace is "notFound">> + You gingerly move the necklace aside. +<</if>> <<if $exposed gte 2>> You spread your arms and legs out, presenting your body to the thing in the room. <<deviancy4>> <<else>> diff --git a/game/overworld-forest/loc-lake/widgets.twee b/game/overworld-forest/loc-lake/widgets.twee index cef2d03033ec350ad4d743515fe41b1ce043f4cc..6d3a1e2ed69b475d23a049893f75fe18e85e6673 100644 --- a/game/overworld-forest/loc-lake/widgets.twee +++ b/game/overworld-forest/loc-lake/widgets.twee @@ -133,7 +133,7 @@ Someone screams. Everyone turns and backs away from the newcomer, a <<beasttype> <<widget "eventlakewater">> -<<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte random(0, 10)>> +<<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte random(0, 10)>> <<wHunt "lake">> <<elseif $bus is "lakeshallows">> <<if $laketeenspresent is 1>> @@ -192,7 +192,7 @@ Someone screams. Everyone turns and backs away from the newcomer, a <<beasttype> <<widget "eventlakeice">> <<rng>> -<<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte random(0, 10)>> +<<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte random(0, 10)>> <<wHunt "lake">> <<elseif $rng gte 81>> <<dancedifficulty 1 1000 true>> @@ -280,7 +280,7 @@ Someone screams. Everyone turns and backs away from the newcomer, a <<beasttype> <</widget>> <<widget "eventlake">> -<<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte random(0, 10)>> +<<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte random(0, 10)>> <<wHunt "lake">> <<elseif $rng gte 81>> <!-- Modified for Monster People --> @@ -299,7 +299,7 @@ Someone screams. Everyone turns and backs away from the newcomer, a <<beasttype> <<destinationlake>> <</if>> <<elseif $rng gte 51>> - <<if $wraith and $wraith.state isnot "" or $hallucinations gte 1>> + <<if $wraith.state or $hallucinations gte 1>> You thought you heard someone call your name, but there's no one there. <<gtrauma>><<trauma 3>> <<else>> diff --git a/game/overworld-forest/loc-wolfpack/main.twee b/game/overworld-forest/loc-wolfpack/main.twee index a6a3467302b7d95a1591c82b1593c4b8e467754c..9bef79022201fabcede6143f10ea14935cbdf24b 100644 --- a/game/overworld-forest/loc-wolfpack/main.twee +++ b/game/overworld-forest/loc-wolfpack/main.twee @@ -447,7 +447,7 @@ You sit on the edge and try to lower yourself down, but the rock gives way and y You slept soundly, but now feel a little rough. <<stress 5>><<gstress>> <br><br> <<elseif $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte ($arousalmax / 10) * 9>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-plains/loc-bird/main.twee b/game/overworld-plains/loc-bird/main.twee index c6a6a5deb9e39c4e1c2c5d6f2e51536c2e12243d..2069a6dc405fa62da373fb082c26cd556bac0fcf 100644 --- a/game/overworld-plains/loc-bird/main.twee +++ b/game/overworld-plains/loc-bird/main.twee @@ -1397,7 +1397,7 @@ You don't move. You lie on the nest. It's hard to get comfortable. <</if>> <<endevent>> -<<if $wraith and $wraith.state isnot "" and $wraithPrison and $bird.mirror is 1 and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> +<<if $wraith.state and $wraithPrison and $bird.mirror is 1 and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> You feel anxious, and your eyes dart over to the mirror. <</if>> <br><br> @@ -1546,7 +1546,7 @@ You sit by the rainwater pool. You slept soundly, but now feel a little rough. <<stress 5>><<gstress>> <br><br> <<elseif $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte ($arousalmax / 10) * 9>> Your sleep is plagued by dirty dreams. @@ -1640,7 +1640,7 @@ You sit by the rainwater pool. <br> <<else>> <<if $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte ($arousalmax / 10) * 9>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-plains/loc-farm/assault.twee b/game/overworld-plains/loc-farm/assault.twee index 5ace816b2d1b00666009b785036a86ab71060606..4dd3508bdc8e36736043b40926b63cb2b328a24c 100644 --- a/game/overworld-plains/loc-farm/assault.twee +++ b/game/overworld-plains/loc-farm/assault.twee @@ -369,7 +369,7 @@ You hear shouting outside. <<set $farm_assault.teams[_assault_keys[_s]].wall_progress to 0>> <<set $farm_assault.teams[_assault_keys[_s]].field_progress to 0>> <<set $farm_assault.teams[_assault_keys[_s]].number to 3>> - <<if $wraith and $wraith.state is "haunt" and $farm_assault.wraith is undefined and $hallucinations gte 2 and random(1,12) is 1>> + <<if $wraith.state is "haunt" and $farm_assault.wraith is undefined and $hallucinations gte 2 and random(1,15-Math.floor(C.npc["Ivory Wraith"].lust/5)) is 1>> <<set $farm_assault.teams[_assault_keys[_s]].type to "wraith">> <<set $farm_assault.teams[_assault_keys[_s]].number to 1>> <<set $farm_assault.teams[_assault_keys[_s]].torched to 0>> @@ -450,7 +450,7 @@ You hear shouting outside. <<if $farm_assault.teams[_assault_keys[_s]].state is "celebrate">> <<set $farm_assault.teams[_assault_keys[_s]].state to "field">> <<set $farm_assault.teams[_assault_keys[_s]].location to $farm_assault.no.pluck()>> - <<if $farm_assault.teams[_assault_keys[_s]].location is undefined or $farm_assault.teams[_assault_keys[_s]].torched is 3>> + <<if $farm_assault.teams[_assault_keys[_s]].location is undefined or $farm_assault.teams[_assault_keys[_s]].torched gte Math.floor(C.npc["Ivory Wraith"].lust/4)>> <<set $farm_assault.teams[_assault_keys[_s]].location to "done">> <</if>> <</if>> @@ -2443,10 +2443,9 @@ You move as fast as you think you can get away with. $farm.tower_guard tries to <<effects>><<set _assault_keys to Object.keys($farm_assault.teams)>> <<if !$wraithIntro>> - <<set $wraithIntro to true>><<set $wraith.seenFarm to true>> + <<set $wraithIntro to true>> You charge at the stranger. They're a beautiful pale figure, with translucent white robes and flowing silver hair. They regard you with angry red eyes, clawing at their own neck. A bizarre, slimy substance leaks wherever they walk. <<elseif !$wraith.seenFarm>> - <<set $wraith.seenFarm to true>> You charge at the stranger. They turn to look at you and chuckle. <span class="red">Their face is a terrible, familiar pale.</span> A bizarre, slimy substance leaks wherever it walks. <<else>> You charge at the pale figure. It turns to look at you and chuckles. A bizarre, slimy substance leaks wherever it walks. @@ -2457,7 +2456,7 @@ You move as fast as you think you can get away with. $farm.tower_guard tries to <br><br> <<generateWraith 1 true>> -<<initWraith "man" "arms" "abomination">><<startWraith>> +<<initWraith "man" "arms" "abomination">><<startWraith>><<set $wraith.seenFarm to true>> An ember crackles at <<his>> finger. <span class="red">The slime begins to spread across the field on its own.</span> <br><br> @@ -2476,76 +2475,25 @@ An ember crackles at <<his>> finger. <span class="red">The slime begins to sprea <<set $enemytype to $wraith.type>> <<set $wraith.exit to "farm_assault">> <<set _assault_keys to Object.keys($farm_assault.teams)>> - <<set $timer to 10 - $farm_assault.teams[_assault_keys[$farm_assault.wraith]].field_progress>> + <<set $timer to 12 - $farm_assault.teams[_assault_keys[$farm_assault.wraith]].field_progress - Math.floor(C.npc["Ivory Wraith"].lust/4)>> <</if>> <<set $enemyanger += 10>> -<<switch $wraith.gen>> - <<case "man">> - <<effectsman>> - <<if $phase is 1>> - <br> - <<if $timer gte 10>> - <span class="lblue">The slime is thinly spread.</span> - <<elseif $timer gte 7>> - <span class="blue">The slime spreads out.</span> - <<elseif $timer gte 4>> - <span class="purple">The slime spreads further.</span> - <<elseif $timer gte 1>> - <span class="pink">The slime almost coats the entire field.</span> - <<else>> - <span class="red">The slime covers every inch.</span> - <</if>> - <br> - <</if>> - <<man>> - <<stateman>> - <<actionsman>> - <<case "arms">> - <<set _introSkip to true>> - <<set $enemynomax to 4>> - <<effectsman>> - <<if $phase is 1>> - <br> - <<if $timer gte 8>> - <span class="lblue">The slime is thinly spread.</span> - <<elseif $timer gte 6>> - <span class="blue">The slime spreads out.</span> - <<elseif $timer gte 4>> - <span class="purple">The slime spreads further.</span> - <<elseif $timer gte 2>> - <span class="pink">The slime almost coats the entire field.</span> - <<else>> - <span class="red">The slime covers every inch.</span> - <</if>> - <br> - <</if>> - <<man>> - <<set $enemyno to 1>> - <<stateman>> - <<actionsman>> - <<case "abomination">> - <<chastityBreakWraith>> - <<effectsabomination>> - <<if $phase is 1>> - <br> - <<if $timer gte 8>> - <span class="lblue">The slime is thinly spread.</span> - <<elseif $timer gte 6>> - <span class="blue">The slime spreads out.</span> - <<elseif $timer gte 4>> - <span class="purple">The slime spreads further.</span> - <<elseif $timer gte 2>> - <span class="pink">The slime almost coats the entire field.</span> - <<else>> - <span class="red">The slime covers every inch.</span> - <</if>> - <br> - <</if>> - <<abomination>> - <<stateabomination>> - <<actionsabomination>> -<</switch>> +<<if $phase is 1>> + <<if $timer gte 8>> + <span class="lblue">The slime is thinly spread.</span> + <<elseif $timer gte 6>> + <span class="blue">The slime spreads out.</span> + <<elseif $timer gte 4>> + <span class="purple">The slime spreads further.</span> + <<elseif $timer gte 2>> + <span class="pink">The slime almost coats the entire field.</span> + <<else>> + <span class="red">The slime covers every inch.</span> + <</if>> +<</if>> + +<<effectsWraith>> <<if _combatend or ($pain gte 100 and $willpowerpain is 0) or ($timer lte 0 and $phase is 1)>> <span id="next"><<link [[Next|Farm Assault Wraith Fight Finish]]>><</link>></span><<nexttext>> @@ -2573,7 +2521,7 @@ An ember crackles at <<his>> finger. <span class="red">The slime begins to sprea The strand flies out of <<his>> hands of its own accord and wraps around you, pinning your arms to your side. <<He>> gently pushes <<his>> foot into your chest, and you fall over. <br><br> - "<span class="wraith">Chorus of fire, melodies scorched away. What a terrible song.</span>" + "<span class="wraith">Cacophony of cinder. Walk the coals that remain, and cover your ears.</span>" <br><br> <<He>> walks away, leaving you in the dirt. You're not sure when you lose sight of <<him>>. <<tearful>> you struggle against the strand of energy. It's gossamer thin, but very strong. @@ -2630,7 +2578,7 @@ An ember crackles at <<his>> finger. <span class="red">The slime begins to sprea The strand flies out of <<his>> hands of its own accord and wraps around you, pinning your arms to your side. <<He>> gently pushes <<his>> foot into your chest, and you fall over. <br><br> - "<span class="wraith">Chorus of fire, melodies scorched away. What a terrible song.</span>" + "<span class="wraith">Cacophony of cinder. Walk the coals that remain, and cover your ears.</span>" <br><br> The pale figure flicks a single spark off its fingertip, onto the slime coating the field. It spreads, and <span class="red">the field bursts into flames.</span> You're not burnt, but the field is torched in front of your eyes. You struggle and scream. diff --git a/game/overworld-plains/loc-farm/cottage.twee b/game/overworld-plains/loc-farm/cottage.twee index 800a09a1bb477fb1edc9b9fb9ff59ea447f1e0db..d269204b7065e7dab03803d6fcf846ef0c591dcc 100644 --- a/game/overworld-plains/loc-farm/cottage.twee +++ b/game/overworld-plains/loc-farm/cottage.twee @@ -253,7 +253,7 @@ You snuggle under the covers. <<if $alex_bed is "player">> Alex snores beside you. <</if>> -<<if $wraith and $wraith.state isnot "" and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> +<<if $wraith.state and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> You feel anxious, and your eyes dart over to the mirror. <</if>> <br><br> @@ -292,7 +292,7 @@ You snuggle under the covers. <br> <<else>> <<if $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte 9000>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-plains/loc-moor/events.twee b/game/overworld-plains/loc-moor/events.twee index e6d907c41acd51afe0abec2e22b0f7b98f621972..58ccd91dbeb457b25df288d559c5909ccce4eae4 100644 --- a/game/overworld-plains/loc-moor/events.twee +++ b/game/overworld-plains/loc-moor/events.twee @@ -368,7 +368,7 @@ The creatures disappear into the mire. :: Moor Quicksand <<effects>><<rngWraith 1>><<if _wraithEvent>><<set $quicksandWraith to true>><</if>> -<<if $quicksandWraith>><<if $wraith.state is "haunt">><<set _drown to "Drown">><<else>><<set _drown to "Calm">><</if>><<ind>><<ind>><<ind>><span class="flicker">_drown</span><br><</if>> +<<if $quicksandWraith>><<if $wraith.state is "haunt">><<set _drown to "Drown">><<else>><<set _drown to "Calm">><</if>><<ind>><<ind>><<ind>><span class="wraith_flicker">_drown</span><br><</if>> You are up to your <<switch $quicksand_depth>> diff --git a/game/overworld-plains/loc-moor/widgets.twee b/game/overworld-plains/loc-moor/widgets.twee index a050e8a8ba27d7aa5e006dd121388d9c817e96c9..9f61fb1895e8d4111966156f3bb332adfb8aa581 100644 --- a/game/overworld-plains/loc-moor/widgets.twee +++ b/game/overworld-plains/loc-moor/widgets.twee @@ -817,14 +817,14 @@ <br><br> <<passout_moor>> <<if $quicksandWraith>> - <<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><span class="flicker">_drown</span> - <br><br><<ind>><<ind>><span class="flicker">_drown</span> - <br><<ind>><<ind>><<ind>><<ind>><<ind>><span class="flicker">_drown</span> + <<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><span class="wraith_flicker"">_drown</span> + <br><br><<ind>><<ind>><span class="wraith_flicker">_drown</span> + <br><<ind>><<ind>><<ind>><<ind>><<ind>><span class="wraith_flicker">_drown</span> <</if>> <</switch>> <<if $quicksandWraith>> - <br><br><<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><span class="flicker">_drown</span> - <br><br><br><<ind>><span class="flicker">_drown</span> + <br><br><<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><span class="wraith_flicker">_drown</span> + <br><br><br><<ind>><span class="wraith_flicker">_drown</span> <</if>> <</widget>> diff --git a/game/overworld-town/loc-bus/main.twee b/game/overworld-town/loc-bus/main.twee index 2dc3becb0e876cdaef06a3740e357b941370debf..d04cd341e938882f3b9cc20c53f1871e77ff274f 100644 --- a/game/overworld-town/loc-bus/main.twee +++ b/game/overworld-town/loc-bus/main.twee @@ -82,7 +82,7 @@ You take a seat and look out the window. <<set $dangerbus to 0>> <<set $danger to random(1, 10000)>> <<if $danger gte (9900 - $allure)>><<set $dangerbus to random(1, 2)>> - <<if $wraith and $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and $dangerbus is 1>> + <<if $wraith.hunt and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and $dangerbus is 1>> You gaze out the window at the scenery, all bathed in red moonlight. You notice an unusually pale person stop and look at you through the window. <br><br> Less than a minute passes, and you see it again on the other side of the road. Then at the next stop. You blink, and it's gone. diff --git a/game/overworld-town/loc-compound/main.twee b/game/overworld-town/loc-compound/main.twee index b928d4ad13b2fab7f9fc7fff8ae188e8d6bd69e4..5734f96714c3ca2cca4bcecc6befa7142c87ecf5 100644 --- a/game/overworld-town/loc-compound/main.twee +++ b/game/overworld-town/loc-compound/main.twee @@ -43,9 +43,9 @@ You are in the compound on Elk Street. Three red brick buildings stand surrounde <br><br> <<if $stress gte $stressmax>> <<passoutcompound>> -<<elseif $hallucinations gte 2 and $wraithTesting is true>> - <!-- TODO WRAITH: fix the if statement to use new conditions, not $wraithTesting --> - <<generateWraith 1 true>><<person1>> +<<elseif $hallucinations gte 2 and $wraithCompoundEvent is true and !(isPubfameTaskAccepted("compound") and $pubfame.compound.cameras.length is 0)>> + <<unset $wraithCompoundEvent>> + <<generateWraith 1 true>><<person1>><<hallucinogen 15>> <<if !$wraith.will>> <<set $wraith.will to random(1300, 1700)>> <</if>> @@ -64,6 +64,11 @@ You are in the compound on Elk Street. Three red brick buildings stand surrounde It's silent for a few seconds. <br><br> + <<if $wraith.offspring is "sold">> + "<span class="wraith">Or did you hear your children calling to you?</span>" + <br><br> + <</if>> + Abruptly, it turns to look at something at the ground, or possibly through it. It looks agitated. You try to take a step back, and it twists its head to stare at you. "<span class="wraith">Enemy of my enemy. A tool.</span>" In an instant, it's standing in front of you. Shapes begin to spin in its eyes, and your body starts to relax in spite of yourself. <br><br> @@ -72,7 +77,7 @@ You are in the compound on Elk Street. Three red brick buildings stand surrounde It doesn't seem to notice you at first. It looks agitated. It stares at the ground, or possibly through it, before catching you in the corner of its eye and turning to you. "<span class="wraith"><<pcPetname "Wraith">>.</span>" <br><br> - It looks you over, before floating toward you. "<span class="wraith">You are not with them. Are you against them?</span>" It reaches you and holds out a hand, palm open. "<span class="wraith">Lend me yourself.</span>" Shapes begin to spin in its eyes, and your body starts to relax in spite of yourself. + It looks you over, before floating toward you. "<span class="wraith">You are not with them. Are you against them?<<if $wraith.offspring is "sold">> Or did you hear our children crying out?<</if>></span>" It reaches you and holds out a hand, palm open. "<span class="wraith">Lend me yourself.</span>" Shapes begin to spin in its eyes, and your body starts to relax in spite of yourself. <br><br> <<link [[Take its hand|Elk Compound Wraith Give]]>><<endevent>><</link>> diff --git a/game/overworld-town/loc-compound/wraith.twee b/game/overworld-town/loc-compound/wraith.twee index 420f41fddfaf6e204db292e4510e0daf5b77ed2e..e86186467f2f1ac1558f928c25073e5d39941851 100644 --- a/game/overworld-town/loc-compound/wraith.twee +++ b/game/overworld-town/loc-compound/wraith.twee @@ -1,7 +1,7 @@ :: Elk Compound Wraith Give <<effects>><<wraithPossess>> -<<if $wraith.state is "haunt" or $wraith.offspring is "dead">> +<<if C.npc["Ivory Wraith"].lust gt 10 and ($wraith.state is "haunt" or $wraith.offspring is "dead")>> <<set $compoundWraith to "accepted">> You can't tell if it's moving or not, but afterimages form around it all the same. You fall to your knees without resistance. <<else>> @@ -79,12 +79,12 @@ You look away, trying to force the swirling shapes out of your mind. The pale fi :: Elk Compound Wraith Fight Finish <<effects>> <<if !$wraithCount>> - <<if $wraith.state isnot "haunt" and $wraith.offspring isnot "dead">> + <<if $wraith.state isnot "haunt" and !["dead","sold"].includes($wraith.offspring)>> <<set $wraithCount to 1>><<set $wraithMax to 1>> <<else>> <<set $wraithCount to 0>> <<set $wraithMax to 3>> - <<if $wraith.offspring is "dead">> + <<if ["dead","sold"].includes($wraith.offspring)>> <<set $wraithMax++>> <</if>> <<if $tentacledisable is "t">> @@ -106,6 +106,8 @@ You look away, trying to force the swirling shapes out of your mind. The pale fi <<set $wraith.defeated++>> <<clotheson>> <<endcombat>><<endWraith>><<clearWraith>> + <<set $wraithCompoundCooldown to 10>> + <<set $wraithCompoundChance to 10>> <<link [[Next|Elk Compound]]>><</link>> <<elseif $enemyarousal gte $enemyarousalmax or $pain gte 100 and $willpowerpain is 0 or ($wraith.type is "tentacles" and $tentacles.active lte ($tentacles.max / 2)) or ($wraith.type is "slime" and $struggle.done gte $struggle.number)>> <<set $wraithCount++>> @@ -125,13 +127,15 @@ You look away, trying to force the swirling shapes out of your mind. The pale fi <br><br> <<link [[Next|Elk Compound Possessed Intro]]>><<endWraith>><<clearWraith>><<clotheson>><<endcombat>><<wraithPossess>><</link>> <br> - <<elseif $wraith.state is "haunt" or $wraith.offspring is "dead">> + <<elseif $wraith.state is "haunt" or ["dead","sold"].includes($wraith.offspring)>> The figure scowls. "<span class="wraith">Have you not taken enough from me? I will find another way.</span>" <<He>> breaks off and vanishes in a torrent of water. <br><br> <<tearful>> you look around, trying to make sure <<hes>> really gone. <<endRainWraith true>> <<clotheson>> <<endcombat>><<endWraith>><<clearWraith>> + <<set $wraithCompoundCooldown to 10>> + <<set $wraithCompoundChance to 10>> <<link [[Next|Elk Compound]]>><</link>> <<else>> The figure frowns. "<span class="wraith">Like squeezing blood from a stone. I will find another way.</span>" <<He>> breaks off and vanishes in a torrent of water. @@ -140,6 +144,8 @@ You look away, trying to force the swirling shapes out of your mind. The pale fi <<endRainWraith true>> <<clotheson>> <<endcombat>><<endWraith>><<clearWraith>> + <<set $wraithCompoundCooldown to 10>> + <<set $wraithCompoundChance to 10>> <<link [[Next|Elk Compound]]>><</link>> <</if>> <<else>> @@ -152,17 +158,20 @@ You look away, trying to force the swirling shapes out of your mind. The pale fi :: Elk Compound Possessed Intro <<effects>> -<<set $wraithWillMessage to true>> -You shamble over to a puddle, and look at your reflection. A pale <<girl>> with <<wraithEyes>> eyes stares back. +<<set $wraithWillMessage to true>><<set $wraithCompoundSeen to true>> +You <<wraithShamble>> over to a puddle, and look at your reflection. A pale <<girl>> with <<wraithEyes>> eyes stares back. <br><br> You move each finger individually, as if to test them. <br><br> -Your head quickly tilts to the side, making sickening cracks. You stare at the central building. -<br><br> -Words come out of your mouth. <<if $compoundWraith is "willing">> + Your head tilts to the side, making a satisfying pop. You stare at the central building. + <br><br> + Words come out of your mouth. "<span class="wraith">Onward we fly.</span>" It nods your head resolutely. <<else>> + Your head quickly tilts to the side, making sickening cracks. You stare at the central building. + <br><br> + Words come out of your mouth. "<span class="wraith">Onward I fly.</span>" It twists your lips into a grin. <</if>> <br><br> @@ -178,7 +187,7 @@ You are in the compound on Elk Street. Three red brick buildings stand surrounde <</if>> <br><br> -You shamble toward the central building, reaching the door. You reach for the door handle and try to pull it open. It's locked. +You <<wraithShamble>> toward the central building, reaching the door. You reach for the door handle and try to pull it open. It's locked. <br><br> <<if $compoundWraith is "willing">> @@ -364,6 +373,8 @@ You step into the room, and the guards turn to look at you. The <<person1>><<per <br><br> <<endcombat>><<clotheson>> + <<set $wraithCompoundCooldown to 10>> + <<set $wraithCompoundChance to 10>> <<link [[Next|Elk Compound]]>><<unset $compoundWraith>><<endRainWraith>><<endWraith>><<clearWraith>><</link>> <</if>> @@ -428,26 +439,40 @@ The <<person>> collapses to the ground, groaning. <<He>> tries to push <<himself The pale figure snaps its fingers, and the metal of each crate warps and deforms. One crate is shorn apart, and a white, almost translucent substance leaks out. It undulates, pulling itself out of the crate and shambling toward the figure. <span class="gold">It's a pale slime.</span> <br><br> - The pale figure reaches down and picks it up, gently stroking it. More and more crates break open, revealing all sorts of creatures, all pale as ivory. There are slimes, long tentacles, creatures covered in tendrils, and more. They all crowd around the pale figure. Its shoulders slump as it finally relaxes. + The pale figure reaches down and picks it up, gently stroking it. More and more crates break open, revealing all sorts of creatures, all pale as ivory. There are slimes, long tentacles, creatures covered in tendrils, and more. + <<if $wraith.offspring is "sold">> + <span class="green">You even see the pale children you sold.</span> + <</if>> + They all crowd around the pale figure. Its shoulders slump as it finally relaxes. <br> One creature, a pale, leathery multi-limbed creature that goes up to your waist, scuttles toward you. You raise your arms to defend yourself on reflex, but it doesn't attack. Instead, it gently nuzzles into your side, before chirping and jumping back. <<stress -6>><<lstress>> <br><br> - Eventually, the pale figure sets the slime down and waves an arm. A swirling purple disc appears on the floor, and the creatures jump into it without a hint of fear. A hand gently lands on your shoulder from behind; you know it belongs to the pale figure, despite it standing in front of you. "<span class="wraith">You whose charity knows no bounds.</span>" + Eventually, the pale figure sets the slime down and waves an arm. A swirling purple disc appears on the floor, and the creatures jump into it without a hint of fear. A hand gently lands on your shoulder from behind; you know it belongs to the pale figure, despite it standing in front of you. + <<if $wraith.state is "haunt">> + "<span class="wraith">You who seeks to repent.</span>" + <<else>> + "<span class="wraith">You whose charity knows no bounds.</span>" + <</if>> <br> <<if $museumAntiques.antiques.antiquehourglass isnot "found" and $museumAntiques.antiques.antiquehourglass isnot "talk" and $museumAntiques.antiques.antiquehourglass isnot "museum">> <<set $antiquemoney += 1400>><<museumAntiqueStatus "antiquehourglass" "found">> It reaches into one specific crate, one which didn't appear to be holding a creature at all, and pulls out an ornate hourglass made of an unidentifiable metal, with various inscriptions along the edges. A collector might be interested in it. "<span class="wraith">The sands have long since run dry, but still they do not deserve this. Hold it close, fore it slips through your fingers.</span>" <<else>> <<set $blackmoney += 1000>> - It pulls several devices off the nearby wall with tendrils, giving them to you. Someone on the black market may be interested. "<span class="wraith">A token of appreciation. That it hurts them merely sweetens the deal.</span>" + It pulls several devices off the nearby wall with tendrils, giving them to you. Someone on the black market may be interested. "<span class="wraith">A token of appreciation. That it hurts them is but another boon.</span>" <</if>> + <<npcincr "Ivory Wraith" love 3>><<gglove>><<lobsession 1>> <<else>> - You snap your fingers, and the metal of each cage warps and deforms. One crate is shown apart, and a white, almost translucent substance leaks out. It undulates, pulling itself out of the crate and shambling into the open. <span class="gold">It's a pale slime.</span> + You snap your fingers, and the metal of each cage warps and deforms. One crate is shorn apart, and a white, almost translucent substance leaks out. It undulates, pulling itself out of the crate and shambling into the open. <span class="gold">It's a pale slime.</span> <br><br> - It seems hesitant, but your eyes flash <<wraithEyes>> and it shambles towards you. You pick it up, gently stroking it. More and more crates break open, revealing all sorts of creatures, all pale as ivory. There are slimes, long tentacles, creatures covered in tendrils, and more. They all crowd around you. Your shoulders slump as your body finally relaxes. + It seems hesitant, but your eyes flash <<wraithEyes>> and it shambles towards you. You pick it up, gently stroking it. More and more crates break open, revealing all sorts of creatures, all pale as ivory. There are slimes, long tentacles, creatures covered in tendrils, and more. + <<if $wraith.offspring is "sold">> + <span class="green">You even see the pale children you sold.</span> + <</if>> + They all crowd around you. Your shoulders slump as your body finally relaxes. <br> One creature, a pale, leathery multi-limbed creature that goes up to your waist, scuttles toward you. A dark pit settles in your stomach, but it doesn't attack. Instead, it gently nuzzles into your side, before chirping and jumping back. <br><br> @@ -468,10 +493,17 @@ The <<person>> collapses to the ground, groaning. <<He>> tries to push <<himself It reaches into one specific crate, one which didn't appear to be holding a creature at all, and pulls out an ornate hourglass made of an unidentifiable metal, with various inscriptions along the edges. A collector might be interested in it. "<span class="wraith">I trust this more in your hands, than I do in theirs. Hold it close, fore it slips through your fingers.</span>" <<else>> <<set $blackmoney += 1000>> - It pulls several devices off the nearby wall with tendrils, giving them to you. Someone on the black market may be interested. "<span class="wraith">A token of appreciation. That it hurts them merely sweetens the deal.</span>" + It pulls several devices off the nearby wall with tendrils, giving them to you. Someone on the black market may be interested. "<span class="wraith">A token of appreciation. That it hurts them is but another boon.</span>" <</if>> + <<npcincr "Ivory Wraith" love 1>><<glove>><<if $wraith.offspring is "sold">><<lobsession 1>><<else>><<lobsession 3>><</if>> <</if>> <</if>> +<<if $wraith.offspring is "sold">> + <<unset $wraithAngerCooldown>> + <<set $wraith.offspring to "">> +<</if>> +<<set $wraithCompoundCooldown to 30>> +<<unset $wraithCompoundChance>> <br><br> <<if $possessed>> diff --git a/game/overworld-town/loc-home/main.twee b/game/overworld-town/loc-home/main.twee index 8af861440f5ff8aa1250231fdb473ea732e1f1c7..b7cb1362cd794948652446932ebcdb8259626e79 100644 --- a/game/overworld-town/loc-home/main.twee +++ b/game/overworld-town/loc-home/main.twee @@ -649,8 +649,32 @@ You are in the bathroom. <<set _robin to statusCheck("Robin")>> <<sleep>><<effects>> -<<sleepeffects>> -<<if $robindebtwake is 1 and $robinbed is undefined>> +<<sleepeffects>><<rngWraith 2 "noBlood">> +<<if $sleepWraith>> + <<set $wraith.mimic to "Robin">><<set $wraith.exit to "sleep">><<unset $sleepWraith>><<unset $robinbed>> + You sleep soundly, and wake up refreshed. + <br><br> + + You look at Robin. <<Hes>> staring at you. You don't know how long <<hes>> been awake. + <br><br> + + You try to climb out of bed, but a hand grabs you. Robin pulls you back to the bed with one hand and pins you down with the other. <<He>> strokes your cheek with a third hand. + <br><br> + + Except that's not a hand. Many long, translucent limbs are pinning you to the bed. + <br><br> + + You see <<his>> skin ripple, like wax melting down a candle. <<His>> arms take on an unnatural, ivory pallor. <<endevent>><<generateWraith 1 true>><<initWraith "abomination">> + <br><br> + + This isn't Robin. Ever since you fell asleep, it hasn't been Robin. <<trauma 18>><<gggtrauma>><<set $wraith.revealed to true>> + <br><br> + + "<span class="wraith">Close your eyes and sleep,</span>" <<he>> hisses. "<span class="wraith">Only then will we truly see.</span>" The translucent limbs converge on you. + <br><br> + + <<link [[Next|Wraith Mimic Fight]]>><</link>> +<<elseif $robindebtwake is 1 and $robinbed is undefined>> <<set $robindebtwake to 0>><<set $robindebtknown to 1>> <<npc Robin>><<person1>>You're awoken by your door opening. You freeze in fear, until you see Robin peek through the gap. "Can I come in?" <<he>> asks. <br><br> @@ -667,6 +691,14 @@ You are in the bathroom. <<endevent>> <<link [[Next|Bed]]>><</link>> <br> +<<elseif _wraithEvent and _robin.lovewake is 1 and C.npc["Ivory Wraith"].lust gte 14>> + <<set $wraith.mimic to "Robin">><<set $wraith.exit to "home">><<set $robinbed to "yours">> + <<npc Robin>><<person1>>You feel a presence. Robin wraps <<his>> arms around you. + <br><br> + + <<link [[Cuddle|Wraith Mimic Robin Dominant]]>><</link>><<ltrauma>><<lstress>><<lrtrauma>> + <br> + <<link [[Kiss|Wraith Mimic Fight]]>><<set $sexstart to 1>><</link>> <<elseif _robin.lovewake is 1>> <<set _robin.lovewake to 0>><<set $robinbed to "yours">> <<npc Robin>><<person1>>You feel a familiar presence. Robin wraps <<his>> arms around you. @@ -749,7 +781,7 @@ You are in the bathroom. <<else>> You dream you are <</if>> - being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. The nightmares are interrupted by a hammering on your door. It's Bailey, waking you for school. + being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. The nightmares are interrupted by a hammering on your door. It's Bailey, waking you for school. <</if>> <br><br> <<set $motherwake to 1>> @@ -760,7 +792,7 @@ You are in the bathroom. <<else>> You dream you are <</if>> - being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. You quickly forget the specifics, but the sense of dread lingers. + being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. You quickly forget the specifics, but the sense of dread lingers. <br><br> <</if>> <<else>> @@ -944,7 +976,7 @@ You are in the bathroom. <<else>> You dream you are <</if>> - being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. The nightmares are interrupted by a hammering on your door. It's Bailey, waking you for school. + being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. The nightmares are interrupted by a hammering on your door. It's Bailey, waking you for school. <</if>> <br><br> <<set $motherwake to 1>> @@ -955,7 +987,7 @@ You are in the bathroom. <<else>> You dream you are <</if>> - being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. You quickly forget the specifics, but the sense of dread lingers. + being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. You quickly forget the specifics, but the sense of dread lingers. <br><br> <</if>> <<else>> @@ -1474,7 +1506,7 @@ You've pushed yourself too much. You snuggle under the covers. <</if>> <</if>> -<<if $wraith and $wraith.state isnot "" and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> +<<if $wraith.state and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> You feel anxious, and your eyes dart over to the mirror. <</if>> <br><br> @@ -1520,7 +1552,7 @@ You've pushed yourself too much. You snuggle under the covers with Robin. You can feel the heat from <<his>> <<print ($robinromance is 1 and $NPCName[$NPCNameList.indexOf("Robin")].trauma lte 20 ? "naked " : "")>>body warming the bed. <<set $robinbed to "theirs">> -<<if $wraith and $wraith.state isnot "" and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> +<<if $wraith.state and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> You feel anxious, and your eyes dart over to the mirror. <</if>> <<endevent>> diff --git a/game/overworld-town/loc-museum/bdsm.twee b/game/overworld-town/loc-museum/bdsm.twee index bc7202a7ea2423007df597cc98d5bb19e486bc0c..26010dca7aae7fbea7bbf440c5ba60b9611fb325 100644 --- a/game/overworld-town/loc-museum/bdsm.twee +++ b/game/overworld-town/loc-museum/bdsm.twee @@ -199,7 +199,7 @@ With a final push of the lever, the chair lowers the rest of the way, submerging <<link [[Press the buzzer|Museum Duck Extreme 4]]>><<set $phase to 1>><</link>> <br> -<<elseif $wraith and $wraith.state is "haunt" and _wraithEvent>> +<<elseif $wraith.state is "haunt" and _wraithEvent>> You hold your breath as best you can, but you soon feel panic build within you. What if something has gone wrong? You press the buzzer. <br><br> @@ -286,7 +286,7 @@ With a final push of the lever, the chair lowers the rest of the way, submerging <<link [[Shake your head|Museum Duck Extreme End]]>><</link>> <br> -<<elseif $wraith and $wraith.state is "haunt" and _wraithEvent>> +<<elseif $wraith.state is "haunt" and _wraithEvent>> You hold your breath as best you can, but you soon feel panic build within you. What if something has gone wrong? You press the buzzer. <br><br> diff --git a/game/overworld-town/loc-pound/abduction.twee b/game/overworld-town/loc-pound/abduction.twee index 26f5b1b7dec45c2519dd2c0b34d0ee48b0a19787..fbf1e4795a14d1aed6a8b144899af05a4fe30e77 100644 --- a/game/overworld-town/loc-pound/abduction.twee +++ b/game/overworld-town/loc-pound/abduction.twee @@ -1270,7 +1270,7 @@ You lie on the hard floor. You slept soundly, but now feel a little rough. <<stress 5>><<gstress>> <br><br> <<elseif $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte ($arousalmax / 10) * 9>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-town/loc-prison/main.twee b/game/overworld-town/loc-prison/main.twee index 7f4bbadafdbe88c46f109442ad71317a99a36711..24c656fe12cade200b48788416b112e73e525929 100644 --- a/game/overworld-town/loc-prison/main.twee +++ b/game/overworld-town/loc-prison/main.twee @@ -329,7 +329,7 @@ You lie on your mattress. It's hard to get comfortable<<if ($worn.neck.name is " <<set _autosavehere to true>> <<sleep>><<effects>> <<if $nightmares gte 1 and $controlled is 0>> - You dream you are being hunted by something <<if $wraith and $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. + You dream you are being hunted by something <<if $wraith.state is "haunt" and $rng lte 25>>pale<<else>>dark<</if>> and terrible. <<else>> <<if $specialClothesEffects.bimboTotal gte random(100,1000) or $arousal gte 9000>> Your sleep is plagued by dirty dreams. diff --git a/game/overworld-town/loc-pub/seduction.twee b/game/overworld-town/loc-pub/seduction.twee index dd8b002ad5e383733e33d3fc08e522f885918024..cd452e2e8a953db2c294b2ed9a89c8bf373fe621 100644 --- a/game/overworld-town/loc-pub/seduction.twee +++ b/game/overworld-town/loc-pub/seduction.twee @@ -836,11 +836,12 @@ You knock <<him>> into the stall door, which <<he>> crashes through. <<tearful>> <<else>> <<rngWraith>> - <<if $wraith and _wraithEvent and $wraith.state is "haunt">> + <<if _wraithEvent and $wraith.state is "haunt">> + <<set _hallucinogenAmount to (C.npc["Ivory Wraith"].lust * 15)>><<set _drugAmount to 140 + (C.npc["Ivory Wraith"].lust * 12)>> You disappear with <<him>> into the forest. Shortly after <<he>> turns to you. "I always loved this forest," <<he>> says. "I have something for you." <<He>> holds out <<his>> hand, showing you a pink pill. "You'll like it. I promise." <br><br> - <<link [[Eat the pill|Pub Wraith Mimic Hallucinogen]]>><<hallucinogen 240>><<drugs 180>><</link>> + <<link [[Eat the pill|Pub Wraith Mimic Hallucinogen]]>><<hallucinogen _hallucinogenAmount>><<drugs _drugAmount>><</link>> <br> <<if $hallucinations gte 1>> <<link [[Refuse|Pub Wraith Mimic Refuse]]>><</link>> @@ -868,11 +869,12 @@ You knock <<him>> into the stall door, which <<he>> crashes through. <<tearful>> <</if>> <<else>> <<rngWraith>> - <<if $wraith and _wraithEvent and $wraith.state is "haunt">> + <<if _wraithEvent and $wraith.state is "haunt">> + <<set _hallucinogenAmount to 200 + (C.npc["Ivory Wraith"].lust * 4)>><<set _drugAmount to 140 + (C.npc["Ivory Wraith"].lust * 4)>> You disappear with <<him>> into the forest. Shortly after <<he>> turns to you. "I always loved this forest," <<he>> says. "I have something for you." <<He>> holds out <<his>> hand, showing you a pink pill. "You'll like it. I promise." <br><br> - <<link [[Eat the pill|Pub Wraith Mimic Hallucinogen]]>><<hallucinogen 240>><<drugs 180>><</link>> + <<link [[Eat the pill|Pub Wraith Mimic Hallucinogen]]>><<hallucinogen _hallucinogenAmount>><<drugs _drugAmount>><</link>> <br> <<if $hallucinations gte 1>> <<link [[Refuse|Pub Wraith Mimic Refuse]]>><</link>> diff --git a/game/overworld-town/loc-spa/widgets.twee b/game/overworld-town/loc-spa/widgets.twee index a2121f9ee85d7011effc5fd60462889cc883a957..ffffbd6316e3e5f7192292302b8e69aafb4727ed 100644 --- a/game/overworld-town/loc-spa/widgets.twee +++ b/game/overworld-town/loc-spa/widgets.twee @@ -352,7 +352,7 @@ You move your hands back up the <<persons>> back. <<He>> occasionally moans, but <<widget "spa_tan_events">> <<rngWraith 1>> -<<if _wraithEvent and $wraith and $wraith.state is "haunt">> +<<if _wraithEvent and $wraith.state is "haunt">> The lights abruptly shut off, plunging you into total darkness. You try to force the bed open, but it remains fixed in place. <br><br> diff --git a/game/overworld-town/loc-street/elk.twee b/game/overworld-town/loc-street/elk.twee index 0fe60703d4118301ad7b610998ed4f831f20683c..daef8b81ca7fac365a396c759ddb0323d7943e20 100644 --- a/game/overworld-town/loc-street/elk.twee +++ b/game/overworld-town/loc-street/elk.twee @@ -67,6 +67,11 @@ You are on Elk Street. There are roads leading to several large industrial compl <span class="blue">The compound is prowled by guards.</span> They'll be less agitated tomorrow. <br> <<elseif $compoundstate is 0>> + <<if $wraithCompoundEvent>> + <<hallucinogen 5>> + <span class="pink">A faint mist hangs over the compound.</span> + <br> + <</if>> <<ind>><<link [[Sneak into the compound (0:02)|Elk Compound]]>><<pass 2>><<crimeup 1>><</link>><<crime>> <br> <<if $farm_stage gte 9 and $phials_held gte 1 and $exposed lte 0>> diff --git a/game/overworld-town/loc-street/widgets.twee b/game/overworld-town/loc-street/widgets.twee index 663c3b6eb74bd0274a77eb2910dec42781ec9982..de20d49b5c84d4c8a542bf04af36f91a687ee1e7 100644 --- a/game/overworld-town/loc-street/widgets.twee +++ b/game/overworld-town/loc-street/widgets.twee @@ -610,10 +610,19 @@ You hear voices up ahead, and take cover down a stairwell leading to a basement. <</widget>> <<widget "street2">> -<<generate1>><<person1>>You hear footsteps behind you. <span class="blue">You feel followed.</span> +You hear footsteps behind you. <span class="blue">You feel followed.</span> <br><br> +<<rngWraith 2 "noBlood">> +<<if _wraithEvent and $wraithIntro and $rng gte 51>> + <<generateWraith 1 true>><<person1>> + <<set $NPCList[0].skills to {athletics: random(300,500) + C.npc["Ivory Wraith"].lust * 25, security: random(300,500) + C.npc["Ivory Wraith"].lust * 25}>> + <<set $combatgoal to "confront">> + <<link [[Next|Wraith Stalk]]>><<set $molestationstart to 1>><</link>> +<<else>> + <<generate1>><<person1>> + <<link [[Next|Street Stalk]]>><<set $molestationstart to 1>><</link>> +<</if>> -<<link [[Next|Street Stalk]]>><<set $molestationstart to 1>><</link>> <br> <</widget>> @@ -1556,7 +1565,7 @@ You stumble in your heels and fall forwards. As your face approaches the ground, <<npc Kylar>><<person1>>Something tugs your arm. It's Kylar. "H-hi," <<he>> gulps. <<He>> tries to pull you toward a dark alley. "We need privacy. I need you to do things to me." <br><br> - <<if $wraith and _wraithEvent and ($wraith.state is "haunt" or $wraith.offspring is "dead")>> + <<if $wraith.state and _wraithEvent and ($wraith.state is "haunt" or ["dead","sold"].includes($wraith.offspring))>> <<set $wraith.mimic to "Kylar">><<set $wraith.exit to "town">> <<link [[Go with Kylar|Wraith Mimic Fight]]>><<set $sexstart to 1>><</link>><<promiscuous1>><<gglove>><<llksuspicion>> <br> @@ -2677,7 +2686,7 @@ You find a quiet place and open the <<wallet>>. <<set $dangerevent to random(1, 100)>> <<rng>> -<<if $wraith and $eventforced and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and !_wraithEventSkipped>> +<<if $wraith.state and $eventforced and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and !_wraithEventSkipped>> <<wraithEventStreet>> <<elseif $kylarwatched is 1>> <<kylarwatched>> @@ -3160,9 +3169,9 @@ You find a quiet place and open the <<wallet>>. <<widget "streeteffects">> <<if !$possessed>> - <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith and $wraith.state isnot "" and $wraith.hunt is 0 and $wraith.timer gte (random(0, 60))>> + <<if ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 5) and $wraith.state and $wraith.hunt is 0 and $wraith.timer gte (random(0, 60))>> <<wHunt "town">> - <<elseif $wraith and $wraith.hunt isnot 0>> + <<elseif $wraith.hunt>> <<wHunt "town">> <<elseif $kylar and $kylar.timer.street gte ($rng + 65) and $NPCName[$NPCNameList.indexOf("Kylar")].state is "active" and $kylarwatched isnot 1 and $exposed lte 0>> <<set $kylar.timer.street to 0>><<set $kylarwatchedtimer to 2>> diff --git a/game/overworld-town/special-kylar/main.twee b/game/overworld-town/special-kylar/main.twee index 59a0142162e27f63ba3a4bcac3b8b547f08bb24e..04c3e83408225db07a77e4dd27b3fc1640162756 100644 --- a/game/overworld-town/special-kylar/main.twee +++ b/game/overworld-town/special-kylar/main.twee @@ -1816,7 +1816,7 @@ You can feel <<his>> breath, now stabilised and calm, against your skin. <<endevent>> You snuggle under the covers with Kylar. -<<if $wraith and $wraith.state isnot "" and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> +<<if $wraith.state and $wraithPrison and ($moonstate is "evening" and $hour gte 11 or $moonstate is "morning" and $hour lt 6)>> You feel anxious, and your eyes dart over to the mirror. <</if>> <br><br> @@ -4326,13 +4326,18 @@ You see a small note near to the <<print _container.name>> with the letter "K" o <<ggtrauma>> <<set _traumaMulti to (_pregnancy.namesChildren is true ? 2 : 1)>> <<trauma `30 * _traumaMulti * _container.deadCreatures`>> - <<if $wraith and $wraith.state isnot "" and $wraithShow>> + <<if $wraith.state and $wraithShow>> + <<if !$wraithAngerCount>> + <<set $wraithAngerCount to 1>> + <</if>> + <<set _wraithRage to ($wraithAngerCount * 2)>> <<unset $wraithShow>> + <<unset $wraithAngerCount>> You feel something gingerly grab your neck from behind. <br><br> "<span class="wraith">Unforgivable. You'll join <<if _container.count isnot 1>>them<<else>>it<</if>> soon.</span>" <<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>> <br><br> - You turn around, but nothing's there. + You turn around, but nothing's there. <<gobsession _wraithRage>> <br><br> <</if>> <</if>> diff --git a/game/overworld-underground/loc-sewers/old-sewers.twee b/game/overworld-underground/loc-sewers/old-sewers.twee index 4f7654da5b005c88cf764f82c16a711814264fda..f65a9fca3116c60291637512374ea22bb208279a 100644 --- a/game/overworld-underground/loc-sewers/old-sewers.twee +++ b/game/overworld-underground/loc-sewers/old-sewers.twee @@ -19,7 +19,7 @@ You are in the old sewers. A canal runs past, disappearing through a metal grate <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -66,7 +66,7 @@ You are in the old sewers. A canal runs past, disappearing into the dark. Piles <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -115,7 +115,7 @@ You are in the old sewers. A canal runs past, disappearing into the dark. Much o <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -157,7 +157,7 @@ You are in the old sewers. Torrents of water crash down from multiple breaches i <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -218,7 +218,7 @@ You are in a cavern near the old sewers, beside a pool of water. The pool stretc <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -269,7 +269,7 @@ You are in the old sewers. The tunnel is full of metal scrap. <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -319,7 +319,7 @@ You are in the old sewers. Decaying logs litter the tunnel. <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -379,7 +379,7 @@ You are in the old sewers. The walls are covered in huge spider webs. <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -434,7 +434,7 @@ You are in the old sewers. The walls and floor here are covered in fungus. Some <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -490,7 +490,7 @@ A breeze emerges from the pit. It makes your <<genitals 1>> tingle. <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -559,7 +559,7 @@ You are in the old sewers. You can't walk too fast, lest you slip on the algae c <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -621,7 +621,7 @@ You are in the old sewers. You're up to your ankles in mud. <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -679,7 +679,7 @@ You are in the old sewers. The tunnels have collapsed here, revealing ancient st <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -731,7 +731,7 @@ You are in the old sewers. Rubble is strewn throughout this tunnel. The stone is <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> @@ -791,7 +791,7 @@ You are in the old sewers. You are surrounded by metal scrap, twisted into a par <<sewerspassout>> <<elseif $sewerschased is 1 and $sewerschasedstep lte 0>> <<morgancaught>> -<<elseif ($sewersevent lte 0 or $wraith and $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> +<<elseif ($sewersevent lte 0 or $wraith.hunt and $eventforced) and $sewerschased isnot 1 and $eventskip is 0>> <<eventssewers>> <<else>> <<set $eventskip to 0>> diff --git a/game/overworld-underground/loc-sewers/widgets.twee b/game/overworld-underground/loc-sewers/widgets.twee index f1a0897cbc422206b8163c689a5b153eec87c439..2e100f9f5cee6a6a19568b96e8eba69d61378473 100644 --- a/game/overworld-underground/loc-sewers/widgets.twee +++ b/game/overworld-underground/loc-sewers/widgets.twee @@ -87,7 +87,7 @@ <<widget "eventsdrain">> <<rng>> - <<if $wraith and $wraith.hunt gte 10 and $wraithIntro is true and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> + <<if $wraith.state and $wraith.hunt gte 10 and $wraithIntro is true and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6)>> The water congeals and warps, forming translucent tendrils that burst from the water. One collides with you, sending you sprawling. <<pain 4>><<gpain>> <br><br> A pale figure rises from the water, creating no disturbance on the surface. It gives you a mad smile. @@ -420,7 +420,7 @@ <<widget "eventssewers">> <<set $sewersevent to random(5,12)>> <<rng>> - <<if $wraith and $eventforced and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and !_wraithEventSkipped>> + <<if $wraith.state and $eventforced and ($moonstate is "evening" and $hour gte 21 or $moonstate is "morning" and $hour lt 6) and !_wraithEventSkipped>> <<wraithEventSewers>> <<elseif $rng gte 91>> You hear chanting echo through the tunnels. It's hard to pinpoint the direction. @@ -451,7 +451,7 @@ You hear a click as your feet sink into the ground. A metal shackle clamps round your ankle. The sound echoes down the tunnel. A chain ties it to the ground. <<gstress>><<stress 6>> <br><br> - <<if $wraith and $wraith.hunt>> + <<if $wraith.hunt>> <<pass 5>><<set $wraith.hunt++>> It takes you a few minutes to get your feet free. You feel whaever's hunting you draw closer. <br><br> @@ -472,7 +472,7 @@ You walk through a rope suspended a foot off the ground. A log hurtles out of the dark and collides with you, knocking you to the ground and leaving you winded. <<gtrauma>><<gstress>><<gpain>><<trauma 6>><<stress 6>><<pain 6>> <br><br> - <<if $wraith and $wraith.hunt>> + <<if $wraith.hunt>> <<set $wraith.hunt++>> <<tearful>> you stand up. Nothing responds to you, but you still feel the presence of whatever's hunting you grow stronger. <<else>> @@ -679,7 +679,7 @@ <br><br> <<destinationsewers>> <<else>> - <<if $wraith and $wraith.hunt>> + <<if $wraith.hunt>> A scream echoes through the tunnels. It doesn't sound like Morgan. <<set $wraith.hunt++>> <<else>> diff --git a/game/overworld-underground/loc-underground/main.twee b/game/overworld-underground/loc-underground/main.twee index d592da3e6efca6dda319e66223e5fbf95421ec5e..98796f9c1fe062a3969242fec067a0d5899e8102 100644 --- a/game/overworld-underground/loc-underground/main.twee +++ b/game/overworld-underground/loc-underground/main.twee @@ -640,7 +640,7 @@ The stone gives way and you fall several feet into cold water. <<rngWraith>> <<if _wraithEvent>> <<set _drown to ($wraith.state is "haunt" ? "Drown" : "Don't")>> - <<ind>><<ind>><<ind>><span class="flicker">_drown</span> + <<ind>><<ind>><<ind>><span class="wraith_flicker">_drown</span> <br><br> <</if>> @@ -687,8 +687,8 @@ The stone gives way and you fall several feet into cold water. <</if>> <</if>> <<if _wraithEvent and !_withRobin>> - <<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><span class="flicker">_drown</span> - <br><br><br><br><br><br><span class="flicker">_drown</span> + <<ind>><<ind>><<ind>><<ind>><<ind>><<ind>><span class="wraith_flicker">_drown</span> + <br><br><br><br><br><br><span class="wraith_flicker">_drown</span> <</if>> :: Underground Lake2 diff --git a/game/special-dance/actions.twee b/game/special-dance/actions.twee index 5f7bf07845ee725a867eda91e2138853f05de8d8..350879d2179288ff935ca289185a21d37d5c925a 100644 --- a/game/special-dance/actions.twee +++ b/game/special-dance/actions.twee @@ -348,7 +348,7 @@ <</if>> <br><br> <<rng>><<rngWraith 2 "night">> - <<if $wraith and ($wraith.state is "haunt" or $wraith.offspring is "dead") and _wraithEvent and $rng lte 10>> + <<if ($wraith.state is "haunt" or $wraith.offspring is "dead") and _wraithEvent and $rng lte 10>> <<danceWraith>> <<set $_blockDancingEvents to true>> <<elseif currentSkillValue('danceskill') lt ( ($dance_stage_cum * 50) + random(1,250) )>> diff --git a/img/misc/icon/clothes/ivory_necklace.png b/img/misc/icon/clothes/ivory_necklace.png new file mode 100644 index 0000000000000000000000000000000000000000..58f3432f5a0734db45e360830de874b4eebe34f6 Binary files /dev/null and b/img/misc/icon/clothes/ivory_necklace.png differ diff --git a/img/misc/icon/wraithactive.png b/img/misc/icon/wraithactive.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4e0e31712a46787b4b9609bd11e9029db6b039 Binary files /dev/null and b/img/misc/icon/wraithactive.png differ diff --git a/img/misc/icon/wraithhaunt.png b/img/misc/icon/wraithhaunt.png new file mode 100644 index 0000000000000000000000000000000000000000..0b66df6ff4c96b10c9fd98a1c16268ff10f0bc37 Binary files /dev/null and b/img/misc/icon/wraithhaunt.png differ diff --git a/img/misc/stalk/npc_wraith.png b/img/misc/stalk/npc_wraith.png new file mode 100644 index 0000000000000000000000000000000000000000..44f0b99d3629da058865edd38efbb267cd46a740 Binary files /dev/null and b/img/misc/stalk/npc_wraith.png differ diff --git a/img/misc/stalk/safe_npc_wraith.png b/img/misc/stalk/safe_npc_wraith.png new file mode 100644 index 0000000000000000000000000000000000000000..ada7efc41b5b899c20ced81dd044cddd841edd2f Binary files /dev/null and b/img/misc/stalk/safe_npc_wraith.png differ diff --git a/img/ui/obsession.png b/img/ui/obsession.png new file mode 100644 index 0000000000000000000000000000000000000000..60a21f7ab638db461ef97e9dedac90d0d26ed437 Binary files /dev/null and b/img/ui/obsession.png differ diff --git a/img/ui/obsessionblood.png b/img/ui/obsessionblood.png new file mode 100644 index 0000000000000000000000000000000000000000..9776bf2614e0a019947a4ca55e5d454233031b00 Binary files /dev/null and b/img/ui/obsessionblood.png differ diff --git a/img/ui/obsessionempty.png b/img/ui/obsessionempty.png new file mode 100644 index 0000000000000000000000000000000000000000..562adb23ddd5632381caffc8a72a9a2c605eff6f Binary files /dev/null and b/img/ui/obsessionempty.png differ diff --git a/modules/css/base.css b/modules/css/base.css index 41be0b7d38e7117fc18a2082886daf4df7af3a27..14785422c680da3367e05fc861d3498d20588110 100644 --- a/modules/css/base.css +++ b/modules/css/base.css @@ -6358,26 +6358,25 @@ canvas { color: transparent; } -.fading { - background: var(--150); - text-shadow: 0 0 32px var(--purple); - background-clip: text; - -webkit-background-clip: text; - color: transparent; - opacity: 1; -} - -.faded { - background: var(--150); - text-shadow: 0 0 32px var(--purple); - background-clip: text; - -webkit-background-clip: text; - color: transparent; - opacity: 0; - transition: opacity 0.5s ease-in; +@keyframes fading { + 0% { opacity: 1 } + 60% { opacity: 1 } + 100% { opacity: 0 } } -@keyframes flicker { +.fading { + background: var(--150); + text-shadow: 0 0 32px var(--purple); + background-clip: text; + -webkit-background-clip: text; + color: transparent; + animation-name: fading; + animation-duration: 2s; + animation-iteration-count: 1; + opacity: 0; +} + +@keyframes wraith_flicker { 0% { opacity: 0; } @@ -6391,13 +6390,13 @@ canvas { } } -.flicker { +.wraith_flicker { background: var(--150); text-shadow: 0 0 32px var(--purple); background-clip: text; -webkit-background-clip: text; color: transparent; - animation: 3s flicker alternate infinite; + animation: 3s wraith_flicker alternate infinite; } .ironmade-ul {