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) {