| @@ -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?\""], | |||
| ["<i>\"No.\"</i>"], | |||
| ["\"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 <i>burn</i>.\""], | |||
| ["\"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) => { | |||