|  |  | @@ -9,6 +9,7 @@ function Creature(name = "Creature") { | 
		
	
		
			
			|  |  |  | this.mass = 80; | 
		
	
		
			
			|  |  |  | this.bowels = new Bowels(); | 
		
	
		
			
			|  |  |  | this.stomach = new Stomach(this.bowels); | 
		
	
		
			
			|  |  |  | this.butt = new Butt(this.bowels,this.stomach); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.str = 10; | 
		
	
		
			
			|  |  |  | this.dex = 10; | 
		
	
	
		
			
				|  |  | @@ -24,6 +25,8 @@ function Player(name = "Player") { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function Anthro() { | 
		
	
		
			
			|  |  |  | Creature.call(this, name); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.mass = 80 * (Math.random()/2 - 0.25 + 1); | 
		
	
		
			
			|  |  |  | this.build = "ordinary"; | 
		
	
		
			
			|  |  |  | if (this.mass < 70) { | 
		
	
	
		
			
				|  |  | @@ -33,26 +36,38 @@ function Anthro() { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.species = pick(["dog","cat","lizard","deer","wolf","fox"]); | 
		
	
		
			
			|  |  |  | this.description = function() { | 
		
	
		
			
			|  |  |  | return this.build + " " + this.species; | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function Micro() { | 
		
	
		
			
			|  |  |  | Creature.call(this, name); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.health = 5; | 
		
	
		
			
			|  |  |  | this.mass = 0.1 * (Math.random()/2 - 0.25 + 1); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.species = pick(["dog","cat","lizard","deer","wolf","fox"]); | 
		
	
		
			
			|  |  |  | this.description = function() { | 
		
	
		
			
			|  |  |  | return this.build + " " + this.species; | 
		
	
		
			
			|  |  |  | return "micro " + this.species; | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // vore stuff here | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function Container(name) { | 
		
	
		
			
			|  |  |  | this.name = name; | 
		
	
		
			
			|  |  |  | this.contents = []; | 
		
	
		
			
			|  |  |  | // health/sec | 
		
	
		
			
			|  |  |  | this.damageRate = 15*100/86400; | 
		
	
		
			
			|  |  |  | class Container { | 
		
	
		
			
			|  |  |  | constructor(name) { | 
		
	
		
			
			|  |  |  | this.name = name; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.contents = []; | 
		
	
		
			
			|  |  |  | // health/sec | 
		
	
		
			
			|  |  |  | this.damageRate = 15*100/86400; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // kg/sec | 
		
	
		
			
			|  |  |  | this.digestRate = 80/8640; | 
		
	
		
			
			|  |  |  | // kg/sec | 
		
	
		
			
			|  |  |  | this.digestRate = 80/8640; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.digest = function(time) { | 
		
	
		
			
			|  |  |  | digest(time) { | 
		
	
		
			
			|  |  |  | let lines = []; | 
		
	
		
			
			|  |  |  | this.contents.forEach(function(prey) { | 
		
	
		
			
			|  |  |  | if (prey.health > 0) { | 
		
	
	
		
			
				|  |  | @@ -85,35 +100,86 @@ function Container(name) { | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return lines; | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.feed = function(prey) { | 
		
	
		
			
			|  |  |  | feed(prey) { | 
		
	
		
			
			|  |  |  | this.contents.push(prey); | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.fullness = function() { | 
		
	
		
			
			|  |  |  | fullness() { | 
		
	
		
			
			|  |  |  | return this.contents.reduce((total, prey) => total + prey.mass, 0); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function Stomach(bowels) { | 
		
	
		
			
			|  |  |  | Container.call(this, "stomach"); | 
		
	
		
			
			|  |  |  | class Stomach extends Container { | 
		
	
		
			
			|  |  |  | constructor(bowels) { | 
		
	
		
			
			|  |  |  | super(); | 
		
	
		
			
			|  |  |  | this.bowels = bowels; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.describeKill = function(prey) { | 
		
	
		
			
			|  |  |  | describeKill(prey) { | 
		
	
		
			
			|  |  |  | return "The " + prey.description() + "'s struggles wane as your stomach overpowers them."; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.describeFinish = function(prey) { | 
		
	
		
			
			|  |  |  | describeFinish(prey) { | 
		
	
		
			
			|  |  |  | return "Your churning guts have reduced a " + prey.description() + " to meaty chyme."; | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.fill = function(amount) { | 
		
	
		
			
			|  |  |  | bowels.add(amount); | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | fill(amount) { | 
		
	
		
			
			|  |  |  | this.bowels.add(amount); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.finish = function(prey) { | 
		
	
		
			
			|  |  |  | bowels.finish(prey); | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | finish(prey) { | 
		
	
		
			
			|  |  |  | this.bowels.finish(prey); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | class Butt extends Container { | 
		
	
		
			
			|  |  |  | constructor(bowels, stomach) { | 
		
	
		
			
			|  |  |  | super(); | 
		
	
		
			
			|  |  |  | this.bowels = bowels; | 
		
	
		
			
			|  |  |  | this.stomach = stomach; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | digest(time) { | 
		
	
		
			
			|  |  |  | this.contents.forEach(function (x) { | 
		
	
		
			
			|  |  |  | x.timeInButt += time; | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let lines = super.digest(time); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let pushed = this.contents.filter(prey => prey.timeInButt >= 60 * 30); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | pushed.forEach(function(x) { | 
		
	
		
			
			|  |  |  | this.stomach.feed(x); | 
		
	
		
			
			|  |  |  | lines.push("Your winding guts squeeze the " + x.description() + " into your stomach."); | 
		
	
		
			
			|  |  |  | },this); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | this.contents = this.contents.filter(prey => prey.timeInButt < 60 * 30); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return lines; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | describeKill(prey) { | 
		
	
		
			
			|  |  |  | return "The " + prey.description() + " abruptly stops struggling, overpowered by your winding intestines."; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | describeFinish(prey) { | 
		
	
		
			
			|  |  |  | return "That delicious " + prey.description() + " didn't even make it to your stomach...now they're gone."; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | feed(prey) { | 
		
	
		
			
			|  |  |  | prey.timeInButt = 0; | 
		
	
		
			
			|  |  |  | super.feed(prey); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fill(amount) { | 
		
	
		
			
			|  |  |  | this.bowels.add(amount); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | finish(prey) { | 
		
	
		
			
			|  |  |  | this.bowels.finish(prey); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function WasteContainer(name) { | 
		
	
	
		
			
				|  |  | 
 |