diff --git a/customs.js b/customs.js index f540837..983e02d 100644 --- a/customs.js +++ b/customs.js @@ -469,7 +469,7 @@ function tranceDigestCrush(predator, damage=75) { } ], priority: 1, - weight: function() { return defender.prefs.vore.hard / 0.5; } + weight: function(attacker, defender) { return defender.prefs.vore.hard / 0.5; } }; } @@ -1689,11 +1689,11 @@ function PoojawaEncounter() { startCombat(new Poojawa()); }, conditions: [ - function(prefs) { - return prefs.prey; + function(player) { + return player.prefs.prey; }, - function(prefs) { - return prefs.vore.oral > 0 || prefs.vore.tail > 0 || prefs.vore.unbirth > 0; + function(player) { + return player.prefs.vore.oral > 0 || player.prefs.vore.tail > 0 || player.prefs.vore.unbirth > 0; } ] }); diff --git a/feast.js b/feast.js index 9a7a2f4..f5d5c1d 100644 --- a/feast.js +++ b/feast.js @@ -523,8 +523,18 @@ function respawn(respawnRoom) { player.clear(); player.stomach.contents = []; player.bowels.contents = []; + player.bowels.waste = 0; player.bowels.digested = []; - player.bowels.fullness = 0; + player.womb.contents = []; + player.womb.waste = 0; + player.womb.digested = []; + player.balls.contents = []; + player.balls.waste = 0; + player.balls.digested = []; + player.breasts.contents = []; + player.breasts.waste = 0; + player.breasts.digested = []; + advanceTime(Math.floor(86400 / 2 * (Math.random() * 0.5 - 0.25 + 1))); changeMode("explore"); player.health = 100; diff --git a/forest.js b/forest.js index 503c6f5..4061704 100644 --- a/forest.js +++ b/forest.js @@ -49,6 +49,8 @@ function Wolf() { this.attacks.push(wolfTackleBite(this)); this.attacks.push(wolfTackleSwallow(this)); + this.attacks.push(grappledStruggle(this)); + this.backupAttack = pass(this); this.struggles = []; @@ -97,6 +99,9 @@ function AlphaWolf() { this.attacks.push(wolfSwallow(this)); + this.attacks.push(grappledStruggle(this)); + this.attacks.push(grappledReverse(this)); + this.backupAttack = pass(this); this.struggles = []; @@ -236,9 +241,14 @@ function wolfTackleSwallow(attacker) { function wolfSwallow(attacker) { return { attackPlayer: function(defender){ - attacker.flags.stage = "oral"; - changeMode("eaten"); - return [attacker.description("The") + " charges, closing the gap in the blink of an eye and jamming your upper body into its massive, drool-slathered maw. Glrp, glllpkh, gulp - and you're in its throat, thrashing and struggling as you plunge into the greedy beast's sloppy stomach."]; + let success = statCheck(attacker, defender, "dex") || defender.stamina == 0; + if (success) { + attacker.flags.stage = "oral"; + changeMode("eaten"); + return [attacker.description("The") + " charges, closing the gap in the blink of an eye and jamming your upper body into its massive, drool-slathered maw. Glrp, glllpkh, gulp - and you're in its throat, thrashing and struggling as you plunge into the greedy beast's sloppy stomach."]; + } else { + return [attacker.description("The") + " lunges at you, racing up with jaws splayed wide open. You leap to the side, barely avoiding the greedy beast's maw as it barrels past, growling and snapping in frustration."]; + } }, conditions: [ function(attacker, defender) {