@@ -205,17 +205,12 @@ let macro =  
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  "digest": function(owner,organ) {  
		
	
		
			
			    let count = Math.min(organ.contents.length, organ.maxDigest );  
		
	
		
			
			    setTimeout(function() { owner.digest(owner,organ); }, 5000 );  
		
	
		
			
			 
		
	
		
			
			    let container = new Container( );  
		
	
		
			
			    let count = Math.min(organ.contents.length, organ.maxDigest );  
		
	
		
			
			 
		
	
		
			
			    while (count > 0) {  
		
	
		
			
			      let victim = organ.contents.shift();  
		
	
		
			
			      if (victim.name != "Container")  
		
	
		
			
			        victim = new Container([victim]);  
		
	
		
			
			      container = container.merge(victim);  
		
	
		
			
			      --count;  
		
	
		
			
			    }  
		
	
		
			
			    let container = organ.contents.pop();  
		
	
		
			
			    organ.contents.unshift(new Container());  
		
	
		
			
			 
		
	
		
			
			    if (container.count == 0)  
		
	
		
			
			      return;  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -234,10 +229,6 @@ let macro =  
		
	
		
			
			    let lethal = macro.brutality != 0 && (!macro.soulVoreEnabled || organ.name === "souls");  
		
	
		
			
			    let summary = summarize(container.sum(),lethal);  
		
	
		
			
			 
		
	
		
			
			    if (organ.contents.length > 0) {  
		
	
		
			
			      setTimeout(function() { owner.digest(owner,organ); }, 15000);  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    if (macro.soulVoreEnabled && organ.name != "souls") {  
		
	
		
			
			      owner.souls.feed(container);  
		
	
		
			
			      let soulCount = container.sum()["Person"];  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -255,13 +246,17 @@ let macro =  
		
	
		
			
			 
		
	
		
			
			  "stomach": {  
		
	
		
			
			    "name": "stomach",  
		
	
		
			
			    "setup": function(owner) {  
		
	
		
			
			      this.owner = owner;  
		
	
		
			
			      for (let i = 0; i < this.stages; i++)  
		
	
		
			
			        this.contents.push(new Container());  
		
	
		
			
			      owner.digest(owner,this);  
		
	
		
			
			    },  
		
	
		
			
			    "feed": function(prey) {  
		
	
		
			
			      this.feedFunc(prey,this,this.owner);  
		
	
		
			
			    },  
		
	
		
			
			    "feedFunc": function(prey,self,owner) {  
		
	
		
			
			      if (self.contents.length == 0)  
		
	
		
			
			        setTimeout(function() { owner.digest(owner,self); }, 15000);  
		
	
		
			
			      this.contents.push(prey);  
		
	
		
			
			      this.contents[0] = this.contents[0].merge(prey);  
		
	
		
			
			    },  
		
	
		
			
			    "describeDigestion": function(container) {  
		
	
		
			
			      return describe("stomach",container,this.owner,verbose);  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -269,19 +264,39 @@ let macro =  
		
	
		
			
			    "fill": function(owner,container) {  
		
	
		
			
			      //no-op  
		
	
		
			
			    },  
		
	
		
			
			    get description() {  
		
	
		
			
			      let prey = new Container();  
		
	
		
			
			      this.contents.forEach(function(x) {  
		
	
		
			
			        prey = prey.merge(x);  
		
	
		
			
			      });  
		
	
		
			
			 
		
	
		
			
			      if (prey.count == 0) {  
		
	
		
			
			        return "Your belly is flat, growling and gurgling for want of prey.";  
		
	
		
			
			      } else {  
		
	
		
			
			        if (macro.brutality > 0)  {  
		
	
		
			
			          return "Your belly churns and bubbles as it works to melt " + prey.describe(false) + " down to chyme.";  
		
	
		
			
			        } else {  
		
	
		
			
			          return "Your belly sloshes with the weight of " + prey.describe(false) + " trapped within.";  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    "contents": [],  
		
	
		
			
			    "maxDigest": 5  
		
	
		
			
			    "stages": 3   
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  "bowels": {  
		
	
		
			
			    "name" : "bowels",  
		
	
		
			
			    "setup": function(owner) {  
		
	
		
			
			      this.owner = owner;  
		
	
		
			
			      for (let i = 0; i < this.stages; i++)  
		
	
		
			
			        this.contents.push(new Container());  
		
	
		
			
			      owner.digest(owner,this);  
		
	
		
			
			    },  
		
	
		
			
			    "feed": function(prey) {  
		
	
		
			
			      this.feedFunc(prey,this,this.owner);  
		
	
		
			
			    },  
		
	
		
			
			    "feedFunc": function(prey,self,owner) {  
		
	
		
			
			      if (self.contents.length == 0)  
		
	
		
			
			        setTimeout(function() { owner.digest(owner,self); }, 15000);  
		
	
		
			
			      this.contents.push(prey);  
		
	
		
			
			      this.contents[0] = this.contents[0].merge(prey);  
		
	
		
			
			    },  
		
	
		
			
			    "describeDigestion" : function(container) {  
		
	
		
			
			      return describe("bowels",container,this.owner,verbose);  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -289,19 +304,39 @@ let macro =  
		
	
		
			
			    "fill": function(owner,container) {  
		
	
		
			
			      //no-op  
		
	
		
			
			    },  
		
	
		
			
			    get description() {  
		
	
		
			
			      let prey = new Container();  
		
	
		
			
			      this.contents.forEach(function(x) {  
		
	
		
			
			        prey = prey.merge(x);  
		
	
		
			
			      });  
		
	
		
			
			 
		
	
		
			
			      if (prey.count == 0) {  
		
	
		
			
			        return "Your bowels are empty.";  
		
	
		
			
			      } else {  
		
	
		
			
			        if (macro.brutality > 0)  {  
		
	
		
			
			          return "Your bowels groan ominously as they clench around " + prey.describe(false) + ", slowly absorbing them into your musky depths.";  
		
	
		
			
			        } else {  
		
	
		
			
			          return "Your bowels bulge with " + prey.describe(false) + ".";  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    "contents" : [],  
		
	
		
			
			    "maxDigest" : 3  
		
	
		
			
			    "stages " : 3  
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  "womb": {  
		
	
		
			
			    "name" : "womb",  
		
	
		
			
			    "setup": function(owner) {  
		
	
		
			
			      this.owner = owner;  
		
	
		
			
			      for (let i = 0; i < this.stages; i++)  
		
	
		
			
			        this.contents.push(new Container());  
		
	
		
			
			      owner.digest(owner,this);  
		
	
		
			
			    },  
		
	
		
			
			    "feed": function(prey) {  
		
	
		
			
			      this.feedFunc(prey,this,this.owner);  
		
	
		
			
			    },  
		
	
		
			
			    "feedFunc": function(prey,self,owner) {  
		
	
		
			
			      if (self.contents.length == 0)  
		
	
		
			
			        setTimeout(function() { owner.digest(owner,self); }, 15000);  
		
	
		
			
			      this.contents.push(prey);  
		
	
		
			
			      this.contents[0] = this.contents[0].merge(prey);  
		
	
		
			
			    },  
		
	
		
			
			    "describeDigestion" : function(container) {  
		
	
		
			
			      return describe("womb",container,this.owner,verbose);  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -309,19 +344,39 @@ let macro =  
		
	
		
			
			    "fill": function(owner,container) {  
		
	
		
			
			      owner.femcumStorage.amount += container.sum_property("mass") / 1e3;  
		
	
		
			
			    },  
		
	
		
			
			    get description() {  
		
	
		
			
			      let prey = new Container();  
		
	
		
			
			      this.contents.forEach(function(x) {  
		
	
		
			
			        prey = prey.merge(x);  
		
	
		
			
			      });  
		
	
		
			
			 
		
	
		
			
			      if (prey.count == 0) {  
		
	
		
			
			        return "Your lower belly is flat.";  
		
	
		
			
			      } else {  
		
	
		
			
			        if (macro.brutality > 0)  {  
		
	
		
			
			          return "Your womb tingles as its rhythmically grinds down on " + prey.describe(false) + ", turning them soft and wet as they start to dissolve into femcum.";  
		
	
		
			
			        } else {  
		
	
		
			
			          return "Your womb clenches around " + prey.describe(false) + ".";  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    "contents" : [],  
		
	
		
			
			    "maxDigest" : 1  
		
	
		
			
			    "stages" : 2   
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  "balls": {  
		
	
		
			
			    "name" : "balls",  
		
	
		
			
			    "setup": function(owner) {  
		
	
		
			
			      this.owner = owner;  
		
	
		
			
			      for (let i = 0; i < this.stages; i++)  
		
	
		
			
			        this.contents.push(new Container());  
		
	
		
			
			      owner.digest(owner,this);  
		
	
		
			
			    },  
		
	
		
			
			    "feed": function(prey) {  
		
	
		
			
			      this.feedFunc(prey,this,this.owner);  
		
	
		
			
			    },  
		
	
		
			
			    "feedFunc": function(prey,self,owner) {  
		
	
		
			
			      if (self.contents.length == 0)  
		
	
		
			
			        setTimeout(function() { owner.digest(owner,self); }, 15000);  
		
	
		
			
			      this.contents.push(prey);  
		
	
		
			
			      this.contents[0] = this.contents[0].merge(prey);  
		
	
		
			
			    },  
		
	
		
			
			    "describeDigestion": function(container) {  
		
	
		
			
			      return describe("balls",container,this.owner,verbose);  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -329,19 +384,39 @@ let macro =  
		
	
		
			
			    "fill": function(owner,container) {  
		
	
		
			
			      owner.cumStorage.amount += container.sum_property("mass") / 1e3;  
		
	
		
			
			    },  
		
	
		
			
			    get description() {  
		
	
		
			
			      let prey = new Container();  
		
	
		
			
			      this.contents.forEach(function(x) {  
		
	
		
			
			        prey = prey.merge(x);  
		
	
		
			
			      });  
		
	
		
			
			 
		
	
		
			
			      if (prey.count == 0) {  
		
	
		
			
			        return "Your balls are smooth.";  
		
	
		
			
			      } else {  
		
	
		
			
			        if (macro.brutality > 0)  {  
		
	
		
			
			          return "Your balls slosh and bulge as they work to convert " + prey.describe(false) + " into hot cum.";  
		
	
		
			
			        } else {  
		
	
		
			
			          return "Your balls slosh about, loaded down with " + prey.describe(false) + ".";  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    "contents" : [],  
		
	
		
			
			    "maxDigest" : 1  
		
	
		
			
			    "stages" : 2   
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  "breasts": {  
		
	
		
			
			    "name" : "breasts",  
		
	
		
			
			    "setup": function(owner) {  
		
	
		
			
			      this.owner = owner;  
		
	
		
			
			      for (let i = 0; i < this.stages; i++)  
		
	
		
			
			        this.contents.push(new Container());  
		
	
		
			
			      owner.digest(owner,this);  
		
	
		
			
			    },  
		
	
		
			
			    "feed": function(prey) {  
		
	
		
			
			      this.feedFunc(prey,this,this.owner);  
		
	
		
			
			    },  
		
	
		
			
			    "feedFunc": function(prey,self,owner) {  
		
	
		
			
			      if (self.contents.length == 0)  
		
	
		
			
			        setTimeout(function() { owner.digest(owner,self); }, 15000);  
		
	
		
			
			      this.contents.push(prey);  
		
	
		
			
			      this.contents[0] = this.contents[0].merge(prey);  
		
	
		
			
			    },  
		
	
		
			
			    "describeDigestion": function(container) {  
		
	
		
			
			      return describe("breasts",container,this.owner,verbose);  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -351,21 +426,41 @@ let macro =  
		
	
		
			
			        owner.milkStorage.amount += container.sum_property("mass") / 1e3;  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    get description() {  
		
	
		
			
			      let prey = new Container();  
		
	
		
			
			      this.contents.forEach(function(x) {  
		
	
		
			
			        prey = prey.merge(x);  
		
	
		
			
			      });  
		
	
		
			
			 
		
	
		
			
			      if (prey.count == 0) {  
		
	
		
			
			        return "Your breasts are smooth.";  
		
	
		
			
			      } else {  
		
	
		
			
			        if (macro.brutality > 0)  {  
		
	
		
			
			          return "Your breasts slosh from side to side, " + prey.describe(false) + " slowly digesting into creamy milk.";  
		
	
		
			
			        } else {  
		
	
		
			
			          return "Your breasts bulge with " + prey.describe(false) + ".";  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    "contents" : [],  
		
	
		
			
			    "maxDigest" : 1  
		
	
		
			
			    "stages" : 2   
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  soulVoreEnabled: true,  
		
	
		
			
			 
		
	
		
			
			  "souls": {  
		
	
		
			
			    "name" : "souls",  
		
	
		
			
			    "setup": function(owner) {  
		
	
		
			
			      this.owner = owner;  
		
	
		
			
			      for (let i = 0; i < this.stages; i++)  
		
	
		
			
			        this.contents.push(new Container());  
		
	
		
			
			      owner.digest(owner,this);  
		
	
		
			
			    },  
		
	
		
			
			    "feed": function(prey) {  
		
	
		
			
			      this.feedFunc(prey,this,this.owner);  
		
	
		
			
			    },  
		
	
		
			
			    "feedFunc": function(prey,self,owner) {  
		
	
		
			
			      if (self.contents.length == 0)  
		
	
		
			
			        setTimeout(function() { owner.digest(owner,self); }, 15000);  
		
	
		
			
			      this.contents.push(prey);  
		
	
		
			
			      this.contents[0] = this.contents[0].merge(prey);  
		
	
		
			
			    },  
		
	
		
			
			    "describeDigestion": function(container) {  
		
	
		
			
			      return describe("soul-digest",container,this.owner,verbose);  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -373,8 +468,24 @@ let macro =  
		
	
		
			
			    "fill": function(owner,container) {  
		
	
		
			
			      //no-op  
		
	
		
			
			    },  
		
	
		
			
			    get description() {  
		
	
		
			
			      let prey = new Container();  
		
	
		
			
			      this.contents.forEach(function(x) {  
		
	
		
			
			        prey = prey.merge(x);  
		
	
		
			
			      });  
		
	
		
			
			 
		
	
		
			
			      if (prey.count == 0) {  
		
	
		
			
			        return "Your depths hold no souls.";  
		
	
		
			
			      } else {  
		
	
		
			
			        if (macro.brutality > 0)  {  
		
	
		
			
			          return "Your depths bubble and boil with energy, slowly digesting the " + (prey.count > 1 ? "souls of " : "soul of ") + prey.describe(false);  
		
	
		
			
			        } else {  
		
	
		
			
			          return "You feel " + (prey.count > 1 ? prey.count + " souls " : "a soul ") + "trapped in your depths.";  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    },  
		
	
		
			
			    "contents" : [],  
		
	
		
			
			    "maxDigest" : 5  
		
	
		
			
			    "stages" : 2   
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  // holding spots  
		
	
	
		
			
				
				
					 
			
			@@ -415,7 +526,7 @@ let macro =  
		
	
		
			
			    "container": new Container(),  
		
	
		
			
			    get description() {  
		
	
		
			
			      if (this.container.count == 0)  
		
	
		
			
			        return "Your breasts don't have anyone stuck i n them";  
		
	
		
			
			        return "Your breasts don't have anyone stuck betwee n them";  
		
	
		
			
			      else  
		
	
		
			
			        return "Your cleavage contains " + this.container.describe(false);  
		
	
		
			
			    },  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -425,12 +536,12 @@ let macro =  
		
	
		
			
			  },  
		
	
		
			
			 
		
	
		
			
			  "init": function() {  
		
	
		
			
			    this.stomach.owner = this ;  
		
	
		
			
			    this.bowels.owner = this ;  
		
	
		
			
			    this.womb.owner = this ;  
		
	
		
			
			    this.balls.owner = this ;  
		
	
		
			
			    this.breasts.owner = this ;  
		
	
		
			
			    this.souls.owner = this ;  
		
	
		
			
			    this.stomach.setup(this) ;  
		
	
		
			
			    this.bowels.setup(this) ;  
		
	
		
			
			    this.womb.setup(this) ;  
		
	
		
			
			    this.balls.setup(this) ;  
		
	
		
			
			    this.breasts.setup(this) ;  
		
	
		
			
			    this.souls.setup(this) ;  
		
	
		
			
			    this.cumStorage.owner = this;  
		
	
		
			
			    this.femcumStorage.owner = this;  
		
	
		
			
			    this.milkStorage.owner = this;  
		
	
	
		
			
				
				
					 
			
			@@ -645,6 +756,9 @@ let macro =  
		
	
		
			
			 
		
	
		
			
			    result.push(line);  
		
	
		
			
			 
		
	
		
			
			    result.push(macro.stomach.description);  
		
	
		
			
			    result.push(macro.bowels.description);  
		
	
		
			
			 
		
	
		
			
			    if (this.hasTail) {  
		
	
		
			
			      line = "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails sway as you walk. " : " tail sways as you walk. ");  
		
	
		
			
			      if (this.tailMaw) {  
		
	
	
		
			
				
				
					 
			
			@@ -674,11 +788,13 @@ let macro =  
		
	
		
			
			      }  
		
	
		
			
			      line = "Your " + this.describeDick + " cock hangs from your hips, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath.";  
		
	
		
			
			      result.push(line);  
		
	
		
			
			      result.push(macro.balls.description);  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    if (this.femaleParts) {  
		
	
		
			
			      line = "Your glistening " + this.describeVagina + " slit peeks out from between your legs.";  
		
	
		
			
			      result.push(line);  
		
	
		
			
			      result.push(macro.womb.description);  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    if (this.hasBreasts) {  
		
	
	
		
			
				
				
				
				
					 
			
			@@ -687,8 +803,12 @@ let macro =  
		
	
		
			
			      if (this.cleavage.container.count > 0)  
		
	
		
			
			        line += " Between them are " + this.cleavage.container.describe(false) + ".";  
		
	
		
			
			      result.push(line);  
		
	
		
			
			      result.push(macro.breasts.description);  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    if (this.soulVoreEnabled) {  
		
	
		
			
			      result.push(macro.souls.description);  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    if (this.hasPouch) {  
		
	
		
			
			      line = this.pouch.description;