diff --git a/stories/geta-unaware.js b/stories/geta-unaware.js index 909d2d9..69c074b 100644 --- a/stories/geta-unaware.js +++ b/stories/geta-unaware.js @@ -42,7 +42,10 @@ get disgusting() { return pickRandom(["disgusting", "abhorrent", "rank", "horrific", "nauseating", "sickening", "wretched"]) }, get foul() { return pickRandom(["foul", "rank", "gross"]) }, get fatal() { return pickRandom(["fatal", "deadly"]) }, - get painful() { return pickRandom(["painful", "agonizing", "unbearable"]) } + get painful() { return pickRandom(["painful", "agonizing", "unbearable"]) }, + get wet() { return pickRandom(["wet", "damp", "soaking-wet", "drenched", "soaked"]) }, + get hot() { return pickRandom(["hot", "sweltering"]) }, + get choking() { return pickRandom(["choking", "suffocating", "unbreathable", "thick", "asphyxiating"]) } } function statLerp(stat, change, duration) { @@ -998,6 +1001,7 @@ func: () => { const choice = Math.random(); + const bonus = state.player.flags.throatSurrender ? 3 : 1 if (choice < 0.7) { print(["Geta's throat pumps you deeper"]); @@ -1006,12 +1010,12 @@ "sfx/gulp-2.ogg", "sfx/gulp-3.ogg" ])); - statLerp("throatPos", 0.1, 1250); + statLerp("throatPos", bonus*0.1, 1250); return Math.random() * 2000 + 2000; } else if (choice < 0.85) { if (getStat("throatPos") < 0.4) { print(["A finger presses in on you from the outside. Your captor is enjoying himself...but at least it slows your descent a little."]); - statLerp("throatPos", 0.05, 2000); + statLerp("throatPos", bonus*0.05, 2000); return Math.random() * 4000 + 2000; } else { return Math.random() * 200 + 200; @@ -1020,7 +1024,7 @@ } else { print(["A crushing swallow grips your body and crams you down deep."]); playSfx("sfx/big-gulp.ogg"); - statLerp("throatPos", 0.3, 1500); + statLerp("throatPos", bonus*0.3, 1500); return Math.random() * 2000 + 2000; } @@ -1264,12 +1268,49 @@ ["A powerful churn grabs hold of you, stifling any attempts at struggling"], ["Your little thumps and kicks do little to faze your captor"] ]); + + if (Math.random() < 0.05) { + print(["Geta slaps his stomach, slamming your head and throwing you back."]); + state.player.flags.stunned = true; + stopTimer("stomach-stun"); + startTimer({ + id: "stomach-stun", + func: () => { + state.player.flags.stunned = false; + return false; + }, + delay: 3000, + loop: false, + classes: [ + "digestion" + ] + }); + + } else { + + state.player.flags.stunned = true; + stopTimer("stomach-stun"); + startTimer({ + id: "stomach-stun", + func: () => { + state.player.flags.stunned = false; + return false; + }, + delay: 2000, + loop: false, + classes: [ + "digestion" + ] + }); + } }, show: [ ], conditions: [ - + (room) => { + return !state.player.flags.stunned; + } ] }, { @@ -1287,15 +1328,33 @@ } else { printRandom([ ["\"Shhhh,\" growls Geta, \"you're going to die in me. Stop whimpering.\""], - ["A long moment passes. \"Poor thing,\" says your captor."] + ["A long moment passes. \"Poor thing,\" says your captor. \"Shouldn't have gotten so nosy, hmm?\""], + ["\"No.\""], + ["\"You're going to die in there — and I'm going to enjoy it.\""] ]) } + state.player.flags.stunned = true; + stopTimer("stomach-stun"); + startTimer({ + id: "stomach-stun", + func: () => { + state.player.flags.stunned = false; + return false; + }, + delay: 1000, + loop: false, + classes: [ + "digestion" + ] + }); }, show: [ ], conditions: [ - + (room) => { + return !state.player.flags.stunned; + } ] }, { @@ -1314,22 +1373,43 @@ ] ]); - if (Math.random() < 0.5) { + if (Math.random() < 0.6) { print(["Geta doesn't notice."]); } else { print(["A booming chuckle rocks your body."]); printRandom([ ["\"I hope you're suffering in there.\""], ["\"Pathetic little snack.\""], - ["\"Ready to die?\""] + ["\"Ready to die?\""], + ["\"Don't suffocate too soon — I want you to burn.\""], + ["\"You get what you deserve.\""], + ["\"So weak.\""], + ["\"Enjoy your death.\""] ]); } + + state.player.flags.stunned = true; + stopTimer("stomach-stun"); + startTimer({ + id: "stomach-stun", + func: () => { + state.player.flags.stunned = false; + return false; + }, + delay: 1500, + loop: false, + classes: [ + "digestion" + ] + }); }, show: [ ], conditions: [ - + (room) => { + return !state.player.flags.stunned; + } ] }, ], @@ -1396,16 +1476,24 @@ func: () => { const result = pickRandom([ () => { - print(["The fox kneads on his flattening belly"]); + print(["A " + word.foul + " belch pours from Geta's maw."]); + statLerp("absorption", 0.05, 1000); + }, + () => { + print(["Powerful muscle grinds down your softening remains."]); statLerp("absorption", 0.1, 1000); }, () => { - print(["A crass belch pours from Geta's maw"]); - statLerp("absorption", 0.05, 1000); + print(["The fox kneads on his flattening belly."]); + statLerp("absorption", 0.1, 1000); }, () => { - print(["Geta's guts writhe and squeeze, soaking up your digested body and crushing your acid-pitted bones"]); + print(["Geta's guts writhe and squeeze, soaking up your digested body and crushing your acid-pitted bones."]); statLerp("absorption", 0.2, 1000); + }, + () => { + print(["A brutal clench shreds your melting flesh, sealing your fox-fuel fate in seconds."]); + statLerp("absorption", 1, 2000); } ])(); @@ -1469,7 +1557,7 @@ stopTimer("clock"); stopClassTimers("absorption"); state.player.stats.absorption.hidden = true; - print(["Your erasure is completed with a dull, slimy gurgle. Geta has destroyed you."]); + print(["Your erasure is completed with a deep, drawn-out gurgle; with flesh stripped from bone and life utterly extinguished, there is room left no doubt: Geta has destroyed you. Perhaps your meager contribution to his body will be remembered...but you won't even take long to burn off."]); }, "exit": (room) => {