| @@ -17,6 +17,23 @@ | |||||
| return true; | return true; | ||||
| } | } | ||||
| function randomBodyPart(state) { | |||||
| const choices = Object.entries(state.player.limbs).filter(([name, status]) => { | |||||
| return status; | |||||
| }).map(([name, status]) => name); | |||||
| return choices[Math.floor(Math.random() * choices.length)]; | |||||
| } | |||||
| const limbs = { | |||||
| head: "head", | |||||
| leftArm: "left arm", | |||||
| rightArm: "right arm", | |||||
| leftLeg: "left leg", | |||||
| rightLeg: "right leg" | |||||
| }; | |||||
| stories.push({ | stories.push({ | ||||
| "id": "geta-unaware", | "id": "geta-unaware", | ||||
| "name": "Geta's Breakfast", | "name": "Geta's Breakfast", | ||||
| @@ -53,6 +70,13 @@ | |||||
| state.player.stats.mawPos = { "name": "Struggle", "type": "meter", "value": 0.5, "min": 0, "max": 1, "color": "rgb(0,255,0)", hidden: true } | state.player.stats.mawPos = { "name": "Struggle", "type": "meter", "value": 0.5, "min": 0, "max": 1, "color": "rgb(0,255,0)", hidden: true } | ||||
| state.info.time.value = 60 * 60 * 7 + 60 * 17; | state.info.time.value = 60 * 60 * 7 + 60 * 17; | ||||
| state.player.limbs = {}; | |||||
| state.player.limbs.head = true; | |||||
| state.player.limbs.leftArm = true; | |||||
| state.player.limbs.rightArm = true; | |||||
| state.player.limbs.leftLeg = true; | |||||
| state.player.limbs.rightLef = true; | |||||
| startTimer({ | startTimer({ | ||||
| id: "clock", | id: "clock", | ||||
| func: state => { | func: state => { | ||||
| @@ -468,18 +492,18 @@ | |||||
| state.geta.swallowsLeft = 3 + Math.floor(Math.random() * 3); | state.geta.swallowsLeft = 3 + Math.floor(Math.random() * 3); | ||||
| startTimer({ | startTimer({ | ||||
| id: "maw-random-movement", | |||||
| func: state => { | |||||
| changeStat("mawPos", Math.random()/50 - 0.01, state); | |||||
| return true; | |||||
| }, | |||||
| delay: 100, | |||||
| loop: true, | |||||
| classes: [ | |||||
| "maw-struggle" | |||||
| ] | |||||
| id: "maw-random-movement", | |||||
| func: state => { | |||||
| changeStat("mawPos", Math.random() / 50 - 0.01, state); | |||||
| return true; | |||||
| }, | |||||
| delay: 100, | |||||
| loop: true, | |||||
| classes: [ | |||||
| "maw-struggle" | |||||
| ] | |||||
| }, state); | }, state); | ||||
| startTimer({ | startTimer({ | ||||
| id: "maw-struggle", | id: "maw-struggle", | ||||
| func: state => { | func: state => { | ||||
| @@ -505,7 +529,7 @@ | |||||
| if (Math.random() > state.geta.slurps / 3) { | if (Math.random() > state.geta.slurps / 3) { | ||||
| choice = "slurp"; | choice = "slurp"; | ||||
| } else if (state.geta.chews - Math.floor(Math.random()*3) < state.geta.slurps) { | |||||
| } else if (state.geta.chews - Math.floor(Math.random() * 3) < state.geta.slurps) { | |||||
| choice = "chew"; | choice = "chew"; | ||||
| } else { | } else { | ||||
| choice = "swallow"; | choice = "swallow"; | ||||
| @@ -571,19 +595,19 @@ | |||||
| ] | ] | ||||
| }, | }, | ||||
| { | { | ||||
| name: "Slip Back", | |||||
| desc: "Slide back towards Geta's gullet", | |||||
| execute: (room, state) => { | |||||
| print(["You let yourself slip back"]); | |||||
| changeStat("mawPos", -Math.random() / 5 - 0.2, state); | |||||
| }, | |||||
| show: [ | |||||
| ], | |||||
| conditions: [ | |||||
| ] | |||||
| name: "Slip Back", | |||||
| desc: "Slide back towards Geta's gullet", | |||||
| execute: (room, state) => { | |||||
| print(["You let yourself slip back"]); | |||||
| changeStat("mawPos", -Math.random() / 5 - 0.2, state); | |||||
| }, | |||||
| show: [ | |||||
| ], | |||||
| conditions: [ | |||||
| ] | |||||
| }, | }, | ||||
| ], | ], | ||||
| "exits": { | "exits": { | ||||
| @@ -682,10 +706,57 @@ | |||||
| playLoop("loop/stomach.ogg"); | playLoop("loop/stomach.ogg"); | ||||
| stopClassTimers("maw-struggle", state); | stopClassTimers("maw-struggle", state); | ||||
| state.geta.acidStrength = 1; | |||||
| startTimer({ | |||||
| id: "digest-random", | |||||
| func: state => { | |||||
| const choices = [ | |||||
| () => { | |||||
| const crushed = randomBodyPart(state); | |||||
| const name = limbs[crushed]; | |||||
| if (name == "head") { | |||||
| print(["A powerful fold of muscle grips your head, crushing it like a grape and killing you instantly."]); | |||||
| changeStat("health", -100, state); | |||||
| return false; | |||||
| } else { | |||||
| print(["Geta's stomach grips your " + name + " and crushes it with a horrific CRACK"]); | |||||
| changeStat("health", -40, state); | |||||
| return true; | |||||
| } | |||||
| }, | |||||
| () => { | |||||
| print(["Geta squeezes in on his gut with both hands, sloshing you around in the sickly stew of cereal, milk, and enzymatic slime."]); | |||||
| changeStat("health", -10, state); | |||||
| return true; | |||||
| }, | |||||
| () => { | |||||
| print(["Your organic prison snarls and churns, soaking you in fresh acids and hastening your wretched demise."]); | |||||
| state.geta.acidStretngth += 1; | |||||
| return true; | |||||
| }, | |||||
| () => { | |||||
| print(["\"You were barely worth eating,\" murmurs the fox. \"So small. So weak.\""]); | |||||
| return true; | |||||
| } | |||||
| ]; | |||||
| return choices[Math.floor(Math.random() * choices.length)](); | |||||
| }, | |||||
| delay: 5000, | |||||
| loop: true, | |||||
| classes: [ | |||||
| "digestion" | |||||
| ] | |||||
| }, state); | |||||
| startTimer({ | startTimer({ | ||||
| id: "digest", | id: "digest", | ||||
| func: state => { | func: state => { | ||||
| changeStat("health", -0.3, state); | |||||
| changeStat("health", -0.3 * state.geta.acidStrength, state); | |||||
| if (getStat("health", state) <= 0) { | if (getStat("health", state) <= 0) { | ||||
| print(["You're digested before too long."]); | print(["You're digested before too long."]); | ||||
| @@ -699,7 +770,7 @@ | |||||
| delay: 100, | delay: 100, | ||||
| loop: true, | loop: true, | ||||
| classes: [ | classes: [ | ||||
| "digestion" | |||||
| ] | ] | ||||
| }, state); | }, state); | ||||
| @@ -746,7 +817,7 @@ | |||||
| }, | }, | ||||
| "enter": (room, state) => { | "enter": (room, state) => { | ||||
| stopClassTimers("digestion", state); | |||||
| }, | }, | ||||
| "exit": (room, state) => { | "exit": (room, state) => { | ||||