diff --git a/mountain.js b/mountain.js index 7c435eb..3110cbe 100644 --- a/mountain.js +++ b/mountain.js @@ -37,10 +37,15 @@ function MountainWyrm() { this.attacks.push(wyrmPounce(this)); this.attacks.push(wyrmGrind(this)); + this.attacks.push(wyrmOralVore(this)); this.attacks.push(wyrmCockVore(this)); + this.attacks.push(wyrmOralSwallow(this)); + + this.attacks.push(wyrmStomachDigest(this)); + this.attacks.push(wyrmCockSwallow(this)); - //this.attacks.push(wyrmCockCrush(this)); + this.attacks.push(wyrmCockCrush(this)); this.attacks.push(wyrmBallsDigest(this)); @@ -49,8 +54,10 @@ function MountainWyrm() { this.playerAttacks.push(punchAttack); this.playerAttacks.push(flankAttack); - this.playerAttacks.push(cockStruggle); - this.playerAttacks.push(ballStruggle); + this.playerAttacks.push(wyrmOralStruggle); + this.playerAttacks.push(wyrmStomachStruggle); + this.playerAttacks.push(wyrmCockStruggle); + this.playerAttacks.push(wyrmBallStruggle); this.playerAttacks.push(pass); this.playerAttacks.push(flee); @@ -62,6 +69,10 @@ function MountainWyrm() { this.finishCombat = function() { if (this.flags.state == "combat") return [this.description("The") + " knocks you to the ground. You bash your head on a rock and black out."]; + else if (this.flags.state == "cock") + return ["You expire in the dragon's shaft, crushed to death by the wyrm's lust."]; + else if (this.flags.state == "stomach") + return ["You give one last heave...and digest."]; else if (this.flags.state == "balls") return ["You fall limp in " + this.description("the") + "'s balls."]; }; @@ -172,6 +183,58 @@ function wyrmGrind(attacker) { }; } +function wyrmOralVore(attacker) { + return { + attackPlayer: function(defender){ + if (statHealthCheck(attacker, defender, "str")) { + attacker.flags.state = "oral"; + attacker.flags.oralDepth = 1; + defender.changeStamina(-25); + return ["Gasping for breath, you can only watch as the wyrm's jaws splay wide - strands of drool lashing out like bolts of lightning - and force over your head."]; + } else { + return ["The wyrm's jaws splay wide, lunging in and trying to wrap around your head, but you manage to punch the beast in the snout and force him to back off."]; + } + }, + requirements: [ + function(attacker, defender) { + return attacker.flags.state == "grapple"; + }, + function(attacker, defender) { + return defender.prefs.vore.oral > 0; + }, + function(attacker, defender) { + return defender.prefs.prey; + } + ], + priority: 1, + weight: function(attacker, defender) {return (1 - 0.5 * defender.staminaPercentage()) * defender.prefs.vore.oral; } + }; +} + +function wyrmOralSwallow(attacker) { + return { + attackPlayer: function(defender) { + attacker.flags.oralDepth += 1; + if (attacker.flags.oralDepth == 4) { + attacker.flags.state = "stomach"; + return ["The beast gulps one last time, pulling your whole body into his roiling guts."]; + } else if (attacker.flags.oralDepth == 3) { + return ["Hot, slimy flesh smothers your legs as they're dragged down. Trapped and teased, smothered and squeezed - you're one swallow away from being sealed away for good."]; + } else if (attacker.flags.oralDepth == 2) { + return ["A powerful swallow claims your belly and hips. Your head pops into the wyrm's burning-hot belly, shoved into the slimy, fleshy prison with ease."]; + } + }, + requirements: [ + function(attacker, defender) { + return attacker.flags.state == "oral"; + } + ], + priority: 1, + weight: function(attacker, defender) { return 1; } + }; +} + + function wyrmCockVore(attacker) { return { attackPlayer: function(defender){ @@ -196,7 +259,7 @@ function wyrmCockVore(attacker) { } ], priority: 1, - weight: function(attacker, defender) {return 2 - defender.staminaPercentage(); } + weight: function(attacker, defender) { return (2 - defender.staminaPercentage()) * defender.prefs.vore.cock; } }; } @@ -225,6 +288,41 @@ function wyrmCockSwallow(attacker) { }; } +function wyrmCockCrush(attacker) { + return { + attackPlayer: function(defender) { + let damage = attack(attacker, defender, attacker.str * attacker.flags.cockDepth); + + return ["The wyrm's cock throbs and clenches, crushing the life from your body!"]; + }, + requirements: [ + function(attacker, defender) { + return attacker.flags.state == "cock"; + } + ], + priority: 1, + weight: function(attacker, defender) { return 0.13; }, + gameover: function() { return "Crushed to death in the cock of " + attacker.description("a"); } + }; +} + +function wyrmStomachDigest(attacker) { + return { + attackPlayer: function(defender) { + attack(attacker, defender, 25); + return ["The wyrm's swollen gut gurgles, swiftly melting you down."]; + }, + requirements: [ + function(attacker, defender) { + return attacker.flags.state == "stomach"; + } + ], + priority: 1, + weight: function(attacker, defender) { return 1; }, + gameover: function() { return "Digested in the stomach of " + attacker.description("a"); } + }; +} + function wyrmBallsDigest(attacker) { return { attackPlayer: function(defender) { @@ -242,8 +340,61 @@ function wyrmBallsDigest(attacker) { }; } +function wyrmOralStruggle(attacker) { + return { + name: "Struggle", + desc: "Try to escape the wyrm's throat!", + attack: function(defender) { + let success = statHealthCheck(attacker, defender, "str"); + if (success) { + attacker.changeStamina(-15); + defender.flags.oralDepth -= 1; + if (defender.flags.oralDepth == 2) { + return ["You grunt and shove, forcing your legs out of the beast's jaws."]; + } else if (defender.flags.oralDepth == 1) { + return ["Your struggles bear fruit, pushing your hips and belly out into the cool mountain air."]; + } else if (defender.flags.oralDepth == 0) { + defender.flags.state = "combat"; + attacker.flags.grappled = false; + return ["You manage to escape! Your eyes struggle to focus as your head slides from the wyrm's gullet, leaving you vulnerable for a moment - but the beast is no metter off than you, hacking and coughing as you rise to your feet."]; + } + } else { + attacker.changeStamina(-25); + return ["You struggle, but it's of no use..."]; + } + }, + requirements: [ + function(attacker, defender) { return defender.flags.state == "oral"; } + ], + priority: 1, + }; +} + +function wyrmStomachStruggle(attacker) { + return { + name: "Struggle", + desc: "Try to free yourself from the wyrm's guts!", + attack: function(defender) { + let success = statHealthCheck(attacker, defender, "str"); + if (success) { + attacker.changeStamina(-5); + defender.flags.state = "oral"; + defender.flags.oralDepth = 2; + return ["You struggle and squirm, forcing yourself back into the wyrm's hot throat. He's not letting you go just yet..."]; + } else { + attacker.changeStamina(-10); + return ["You struggle, but it's of no use."]; + } + }, + requirements: [ + function(attacker, defender) { return defender.flags.state == "stomach"; } + ], + priority: 1, + }; +} + -function cockStruggle(attacker) { +function wyrmCockStruggle(attacker) { return { name: "Struggle", desc: "Try to pull yourself from the wyrm's cock!", @@ -275,7 +426,7 @@ function cockStruggle(attacker) { }; } -function ballStruggle(attacker) { +function wyrmBallStruggle(attacker) { return { name: "Struggle", desc: "Try to free yourself from the wyrm's balls!",