| @@ -37,10 +37,15 @@ function MountainWyrm() { | |||||
| this.attacks.push(wyrmPounce(this)); | this.attacks.push(wyrmPounce(this)); | ||||
| this.attacks.push(wyrmGrind(this)); | this.attacks.push(wyrmGrind(this)); | ||||
| this.attacks.push(wyrmOralVore(this)); | |||||
| this.attacks.push(wyrmCockVore(this)); | this.attacks.push(wyrmCockVore(this)); | ||||
| this.attacks.push(wyrmOralSwallow(this)); | |||||
| this.attacks.push(wyrmStomachDigest(this)); | |||||
| this.attacks.push(wyrmCockSwallow(this)); | this.attacks.push(wyrmCockSwallow(this)); | ||||
| //this.attacks.push(wyrmCockCrush(this)); | |||||
| this.attacks.push(wyrmCockCrush(this)); | |||||
| this.attacks.push(wyrmBallsDigest(this)); | this.attacks.push(wyrmBallsDigest(this)); | ||||
| @@ -49,8 +54,10 @@ function MountainWyrm() { | |||||
| this.playerAttacks.push(punchAttack); | this.playerAttacks.push(punchAttack); | ||||
| this.playerAttacks.push(flankAttack); | 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(pass); | ||||
| this.playerAttacks.push(flee); | this.playerAttacks.push(flee); | ||||
| @@ -62,6 +69,10 @@ function MountainWyrm() { | |||||
| this.finishCombat = function() { | this.finishCombat = function() { | ||||
| if (this.flags.state == "combat") | if (this.flags.state == "combat") | ||||
| return [this.description("The") + " knocks you to the ground. You bash your head on a rock and black out."]; | 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") | else if (this.flags.state == "balls") | ||||
| return ["You fall limp in " + this.description("the") + "'s 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) { | function wyrmCockVore(attacker) { | ||||
| return { | return { | ||||
| attackPlayer: function(defender){ | attackPlayer: function(defender){ | ||||
| @@ -196,7 +259,7 @@ function wyrmCockVore(attacker) { | |||||
| } | } | ||||
| ], | ], | ||||
| priority: 1, | 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) { | function wyrmBallsDigest(attacker) { | ||||
| return { | return { | ||||
| attackPlayer: function(defender) { | 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 { | return { | ||||
| name: "Struggle", | name: "Struggle", | ||||
| desc: "Try to pull yourself from the wyrm's cock!", | desc: "Try to pull yourself from the wyrm's cock!", | ||||
| @@ -275,7 +426,7 @@ function cockStruggle(attacker) { | |||||
| }; | }; | ||||
| } | } | ||||
| function ballStruggle(attacker) { | |||||
| function wyrmBallStruggle(attacker) { | |||||
| return { | return { | ||||
| name: "Struggle", | name: "Struggle", | ||||
| desc: "Try to free yourself from the wyrm's balls!", | desc: "Try to free yourself from the wyrm's balls!", | ||||