diff --git a/combat.js b/combat.js index 7d761c6..b1d9378 100644 --- a/combat.js +++ b/combat.js @@ -206,7 +206,7 @@ function grappleAnalVore(attacker) { if (success) { attacker.changeStamina(-10); defender.changeStamina(-25); - attacker.butt.feed(defender); + attacker.bowels.feed(defender); defender.flags.grappled = false; attacker.cash += defender.cash; changeMode("explore"); diff --git a/feast.js b/feast.js index c7182f2..dd504e7 100644 --- a/feast.js +++ b/feast.js @@ -257,9 +257,9 @@ function updateDisplay() { document.getElementById("stat-str").innerHTML = "Str: " + player.str; document.getElementById("stat-dex").innerHTML = "Dex: " + player.dex; document.getElementById("stat-con").innerHTML = "Con: " + player.con; - document.getElementById("stat-fullness").innerHTML = "Fullness: " + round(player.fullness(),0); + document.getElementById("stat-fullness").innerHTML = "Stomach: " + round(player.stomach.fullness(),0) + "/" + player.stomach.capacity; if (player.prefs.scat) { - document.getElementById("stat-bowels").innerHTML = "Bowels: " + round(player.bowels.fullness,0); + document.getElementById("stat-bowels").innerHTML = "Bowels: " + round(player.bowels.fullness(),0) + "/" + player.bowels.capacity; } else { document.getElementById("stat-bowels").innerHTML = ""; } @@ -279,7 +279,7 @@ function advanceTime(amount) { player.restoreHealth(amount); player.restoreStamina(amount); update(player.stomach.digest(amount)); - update(player.butt.digest(amount)); + update(player.bowels.digest(amount)); update(player.balls.digest(amount)); update(player.womb.digest(amount)); update(player.breasts.digest(amount)); @@ -522,7 +522,7 @@ function respawn(respawnRoom) { moveTo(respawnRoom,"You drift through space and time..."); player.clear(); player.stomach.contents = []; - player.butt.contents = []; + player.bowels.contents = []; player.bowels.digested = []; player.bowels.fullness = 0; advanceTime(Math.floor(86400 / 2 * (Math.random() * 0.5 - 0.25 + 1))); @@ -726,10 +726,10 @@ function status() { lines.push(newline); } - if (player.butt.contents.length > 0) { + if (player.bowels.contents.length > 0) { lines.push("Your bowels churn with prey."); - player.butt.contents.map(function(prey) { + player.bowels.contents.map(function(prey) { let state = ""; let healthRatio = prey.health / prey.maxHealth; @@ -773,7 +773,7 @@ function status() { }); lines.push(newline); } else { - if (player.balls.fullness > 0) { + if (player.balls.waste > 0) { lines.push("Your balls are heavy with cum."); lines.push(newline); } @@ -803,7 +803,7 @@ function status() { }); lines.push(newline); } else { - if (player.womb.fullness > 0) { + if (player.womb.waste > 0) { lines.push("Your slit drips, holding back a tide of femcum."); lines.push(newline); } @@ -833,7 +833,7 @@ function status() { }); lines.push(newline); } else { - if (player.breasts.fullness > 0) { + if (player.breasts.waste > 0) { lines.push("Your breasts slosh with milk."); lines.push(newline); } diff --git a/forest.js b/forest.js index 1013f4a..503c6f5 100644 --- a/forest.js +++ b/forest.js @@ -7,7 +7,7 @@ function ForestExplore() { let outcome = Math.random(); advanceTime(60*30 * (Math.random() * 0.2 + 0.9)); - if (outcome < 0.25) { + if (outcome < 0.35) { currentRoom.flags.exit = true; update(["You find a way back!"]); } else if (outcome < 0.5) { @@ -59,6 +59,7 @@ function Wolf() { this.digests = []; this.digests.push(wolfDigest(this)); + this.digests.push(wolfBelch(this)); this.flags.stage = "combat"; @@ -106,6 +107,7 @@ function AlphaWolf() { this.digests = []; this.digests.push(wolfDigest(this)); + this.digests.push(wolfBelch(this)); this.flags.stage = "combat"; @@ -272,3 +274,21 @@ function wolfDigest(attacker) { gameover: function() { return "Digested by " + attacker.description("a"); } }; } + +function wolfBelch(attacker) { + return { + digest: function(defender){ + defender.stamina -= 50; + let damage = attack(attacker, defender, attacker.str * 2); + return [attacker.description("The") + " lets out a crass BELCH, draining air from its snarling gut and squeezing you even tighter than before."]; + }, + requirements: [ + function(attacker, defender) { + return attacker.flags.stage == "oral"; + } + ], + priority: 1, + weight: function(attacker, defender) { return 1; }, + gameover: function() { return "Reduced to a belch by " + attacker.description("a"); } + }; +} diff --git a/objects.js b/objects.js index ac2da0b..e4d28cf 100644 --- a/objects.js +++ b/objects.js @@ -30,11 +30,11 @@ function Toilet() { lines.push("You sit down on the toilet."); - if (player.bowels.fullness == 0) { + if (player.bowels.waste == 0) { lines.push("But nothing happens."); } else { lines.push("You grunt and clench, squeezing out the remains of your former prey."); - player.bowels.fullness = 0; + player.bowels.waste = 0; } if (player.bowels.digested.length > 0) { diff --git a/vore.js b/vore.js index 984c8d3..5c34a33 100644 --- a/vore.js +++ b/vore.js @@ -136,10 +136,6 @@ function Creature(name = "Creature", str = 10, dex = 10, con = 10) { function Player(name = "Player") { Creature.call(this, name, 15, 15, 15); - this.fullness = function() { - return this.stomach.fullness() + this.butt.fullness(); - }; - this.attacks.push(punchAttack(this)); this.attacks.push(flankAttack(this)); @@ -166,9 +162,9 @@ function Player(name = "Player") { this.cash = 100; - this.bowels = new Bowels(); - this.stomach = new Stomach(this, this.bowels); - this.butt = new Butt(this, this.bowels, this.stomach); + this.stomach = new Stomach(this); + this.bowels = new Bowels(this, this.stomach); + this.stomach.bowels = this.bowels; this.balls = new Balls(this); this.womb = new Womb(this); this.breasts = new Breasts(this); @@ -292,11 +288,17 @@ function Micro() { function Container(owner) { this.owner = owner; this.contents = []; + + this.waste = 0; + this.digested = []; + // health/sec this.damageRate = 15 * 100 / 86400; // health percent/sec this.damageRatePercent = 1 / 86400; + this.capacity = 100; + // kg/sec this.digestRate = 80 / 8640; @@ -346,15 +348,22 @@ function Container(owner) { }; this.fullness = function() { - return this.contents.reduce((total, prey) => total + prey.mass, 0); + return this.contents.reduce((total, prey) => total + prey.mass, 0) + this.waste; + }; + + this.add = function(amount) { + this.waste += amount; + }; + + this.finish = function(prey) { + if (prey.prefs.scat) + this.digested.push(prey); }; } -function Stomach(owner, bowels) { +function Stomach(owner) { Container.call(this, owner); - this.bowels = bowels; - this.describeDamage = function(prey) { return "Your guts gurgle and churn, slowly wearing down " + prey.description("the") + " trapped within."; }; @@ -376,29 +385,28 @@ function Stomach(owner, bowels) { }; } -function Butt(owner, bowels, stomach) { +function Bowels(owner, stomach) { Container.call(this, owner); - this.bowels = bowels; this.stomach = stomach; this.parentDigest = this.digest; this.digest = function(time) { this.contents.forEach(function(x) { - x.timeInButt += time; + x.timeInBowels += time; }); let lines = this.parentDigest(time); - let pushed = this.contents.filter(prey => prey.timeInButt >= 60 * 30); + let pushed = this.contents.filter(prey => prey.timeInBowels >= 60 * 30); pushed.forEach(function(x) { this.stomach.feed(x); lines.push("Your winding guts squeeze " + x.description("the") + " into your stomach."); }, this); - this.contents = this.contents.filter(prey => prey.timeInButt < 60 * 30); + this.contents = this.contents.filter(prey => prey.timeInBowels < 60 * 30); return lines; }; @@ -418,39 +426,21 @@ function Butt(owner, bowels, stomach) { this.parentFeed = this.feed; this.feed = function(prey) { - prey.timeInButt = 0; + prey.timeInBowels = 0; this.parentFeed(prey); }; this.fill = function(amount) { - this.bowels.add(amount); - }; - - this.finish = function(prey) { - this.bowels.finish(prey); - }; -} - -function WasteContainer(name) { - this.name = name; - - this.fullness = 0; - - this.digested = []; - - this.add = function(amount) { - this.fullness += amount; + this.add(amount); }; this.finish = function(prey) { - if (prey.prefs.scat) - this.digested.push(prey); + this.digested.push(prey); }; } function Balls(owner) { Container.call(this, owner); - WasteContainer.call(this, "Balls"); this.describeDamage = function(prey) { return "Your balls slosh as they wear down the " + prey.description("the") + " trapped within."; @@ -469,14 +459,12 @@ function Balls(owner) { }; this.finish = function(prey) { - if (prey.prefs.scat) - this.digested.push(prey); + this.digested.push(prey); }; } function Womb(owner) { Container.call(this, owner); - WasteContainer.call(this, "Womb"); this.describeDamage = function(prey) { return "You shiver as " + prey.description("the") + " squrims within your womb."; @@ -495,14 +483,12 @@ function Womb(owner) { }; this.finish = function(prey) { - if (prey.prefs.scat) - this.digested.push(prey); + this.digested.push(prey); }; } function Breasts(owner) { Container.call(this, owner); - WasteContainer.call(this, "Breasts"); this.describeDamage = function(prey) { return "Your breasts slosh from side to side, steadily softening " + prey.description("the") + " trapped within."; @@ -521,15 +507,10 @@ function Breasts(owner) { }; this.finish = function(prey) { - if (prey.prefs.scat) - this.digested.push(prey); + this.digested.push(prey); }; } -function Bowels() { - WasteContainer.call(this, "Bowels"); -} - // PLAYER PREY function plead(predator) {