|  |  | @@ -63,6 +63,12 @@ var macro = | 
		
	
		
			
			|  |  |  | return volume * this.ballDensity; | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "baseCumRatio": 0.25, | 
		
	
		
			
			|  |  |  | "cumScale": 1, | 
		
	
		
			
			|  |  |  | get cumVolume() { | 
		
	
		
			
			|  |  |  | return this.ballVolume * this.baseCumRatio * this.cumScale; | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "baseVaginaLength": 0.1, | 
		
	
		
			
			|  |  |  | "baseVaginaWidth": 0.05, | 
		
	
		
			
			|  |  |  | "vaginaScale": 1, | 
		
	
	
		
			
				|  |  | @@ -71,6 +77,12 @@ var macro = | 
		
	
		
			
			|  |  |  | get vaginaWidth() { return this.scaling(this.baseVaginaWidth * this.vaginaScale, this.scale, 1); }, | 
		
	
		
			
			|  |  |  | get vaginaArea() { return this.vaginaLength * this.vaginaWidth }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "femcumRatio": 0.1, | 
		
	
		
			
			|  |  |  | "femcumScale": 1, | 
		
	
		
			
			|  |  |  | get femcumVolume() { | 
		
	
		
			
			|  |  |  | return this.vaginaArea * this.vaginaLength * this.femcumRatio * this.femcumScale; | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "baseBreastDiameter": 0.1, | 
		
	
		
			
			|  |  |  | "breastScale": 1, | 
		
	
		
			
			|  |  |  | "breastDensity": 1000, | 
		
	
	
		
			
				|  |  | @@ -194,6 +206,55 @@ var macro = | 
		
	
		
			
			|  |  |  | "maleParts": true, | 
		
	
		
			
			|  |  |  | "femaleParts": true, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "orgasm": false, | 
		
	
		
			
			|  |  |  | "arousal": 0, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "arouse": function(amount) { | 
		
	
		
			
			|  |  |  | this.arousal += amount; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (this.arousal >= 100) { | 
		
	
		
			
			|  |  |  | this.arousal = 100; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (!this.orgasm) { | 
		
	
		
			
			|  |  |  | this.orgasm = true; | 
		
	
		
			
			|  |  |  | if (this.maleParts) { | 
		
	
		
			
			|  |  |  | this.maleOrgasm(this); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (this.femaleParts) { | 
		
	
		
			
			|  |  |  | this.femaleOrgasm(this); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "quench": function(amount) { | 
		
	
		
			
			|  |  |  | this.arousal -= amount; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (this.arousal <= 0) { | 
		
	
		
			
			|  |  |  | this.arousal = 0; | 
		
	
		
			
			|  |  |  | if (this.orgasm) { | 
		
	
		
			
			|  |  |  | this.orgasm = false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "maleOrgasm": function(self) { | 
		
	
		
			
			|  |  |  | if (self.orgasm) { | 
		
	
		
			
			|  |  |  | self.quench(10); | 
		
	
		
			
			|  |  |  | male_orgasm(); | 
		
	
		
			
			|  |  |  | setTimeout(function() { self.maleOrgasm(self) }, 2000); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | "femaleOrgasm": function(self) { | 
		
	
		
			
			|  |  |  | if (this.orgasm) { | 
		
	
		
			
			|  |  |  | this.quench(10); | 
		
	
		
			
			|  |  |  | female_orgasm(); | 
		
	
		
			
			|  |  |  | setTimeout(function() { self.femaleOrgasm(self) }, 2000); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | get description() { | 
		
	
		
			
			|  |  |  | result = []; | 
		
	
		
			
			|  |  |  | line = "You are a " + length(macro.height, unit, true) + " tall " + macro.species + ". You weigh " + mass(macro.mass, unit) + "."; | 
		
	
	
		
			
				|  |  | @@ -410,7 +471,6 @@ function feed() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var people = get_living_prey(prey.sum()); | 
		
	
		
			
			|  |  |  | var sound = "Ulp"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (people < 3) { | 
		
	
		
			
			|  |  |  | sound = "Ulp."; | 
		
	
		
			
			|  |  |  | } else if (people < 10) { | 
		
	
	
		
			
				|  |  | @@ -431,6 +491,8 @@ function feed() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.stomach.feed(prey); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(5); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("stomach",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -463,6 +525,8 @@ function stomp() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.scaleWithMass(preyMass); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(5); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("stomped",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -523,6 +587,8 @@ function anal_vore() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.bowels.feed(prey); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(10); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("bowels",prey); | 
		
	
		
			
			|  |  |  | updateVictims("stomped",crushed); | 
		
	
		
			
			|  |  |  | update([sound,line1,line1summary,newline,sound2,line2,line2summary,newline]); | 
		
	
	
		
			
				|  |  | @@ -556,6 +622,8 @@ function breast_crush() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.scaleWithMass(preyMass); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(10); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("breasts",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -591,6 +659,8 @@ function unbirth() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.womb.feed(prey); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(20); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("womb",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -624,6 +694,8 @@ function cockslap() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.scaleWithMass(preyMass); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(15); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("cock",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -658,6 +730,8 @@ function cock_vore() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.balls.feed(prey); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(20); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("balls",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -690,10 +764,86 @@ function ball_smother() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.scaleWithMass(preyMass); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.arouse(10); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("balls",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function male_orgasm() | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | var vol = macro.cumVolume; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // let's make it 10cm thick | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var area = vol * 10; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var prey = getPrey(biome, area); | 
		
	
		
			
			|  |  |  | var line = prey.male_orgasm(verbose).replace("$VOLUME",volume(vol,unit,false)) | 
		
	
		
			
			|  |  |  | var linesummary = summarize(prey.sum(), true); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var people = get_living_prey(prey.sum()); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var sound = "Spurt!"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (people < 3) { | 
		
	
		
			
			|  |  |  | sound = "Spurt!"; | 
		
	
		
			
			|  |  |  | } else if (people < 10) { | 
		
	
		
			
			|  |  |  | sound = "Sploosh!"; | 
		
	
		
			
			|  |  |  | } else if (people < 50) { | 
		
	
		
			
			|  |  |  | sound = "Sploooooosh!"; | 
		
	
		
			
			|  |  |  | } else if (people < 500) { | 
		
	
		
			
			|  |  |  | sound = "SPLOOSH!"; | 
		
	
		
			
			|  |  |  | } else if (people < 5000) { | 
		
	
		
			
			|  |  |  | sound = "SPLOOOOOOOOOOSH!!"; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | sound = "Oh the humanity!"; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | var preyMass = prey.sum_property("mass"); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.scaleWithMass(preyMass); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("splooged",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function female_orgasm() | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | var vol = macro.femcumVolume; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // let's make it 10cm thick | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var area = vol * 10; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var prey = getPrey(biome, area); | 
		
	
		
			
			|  |  |  | var line = prey.female_orgasm(verbose).replace("$VOLUME",volume(vol,unit,false)); | 
		
	
		
			
			|  |  |  | var linesummary = summarize(prey.sum(), true); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var people = get_living_prey(prey.sum()); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var sound = "Spurt!"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (people < 3) { | 
		
	
		
			
			|  |  |  | sound = "Spurt!"; | 
		
	
		
			
			|  |  |  | } else if (people < 10) { | 
		
	
		
			
			|  |  |  | sound = "Sploosh!"; | 
		
	
		
			
			|  |  |  | } else if (people < 50) { | 
		
	
		
			
			|  |  |  | sound = "Sploooooosh!"; | 
		
	
		
			
			|  |  |  | } else if (people < 500) { | 
		
	
		
			
			|  |  |  | sound = "SPLOOSH!"; | 
		
	
		
			
			|  |  |  | } else if (people < 5000) { | 
		
	
		
			
			|  |  |  | sound = "SPLOOOOOOOOOOSH!!"; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | sound = "Oh the humanity!"; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | var preyMass = prey.sum_property("mass"); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.scaleWithMass(preyMass); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateVictims("splooged",prey); | 
		
	
		
			
			|  |  |  | update([sound,line,linesummary,newline]); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function update(lines = []) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | var log = document.getElementById("log"); | 
		
	
	
		
			
				|  |  | @@ -708,6 +858,7 @@ function update(lines = []) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | document.getElementById("height").innerHTML = "Height: " + length(macro.height, unit); | 
		
	
		
			
			|  |  |  | document.getElementById("mass").innerHTML = "Mass: " + mass(macro.mass, unit); | 
		
	
		
			
			|  |  |  | document.getElementById("arousal").innerHTML = "Arousal: " + macro.arousal + "%"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (var type in victims) { | 
		
	
		
			
			|  |  |  | if (victims.hasOwnProperty(type)) { | 
		
	
	
		
			
				|  |  | @@ -797,6 +948,10 @@ function startGame() { | 
		
	
		
			
			|  |  |  | document.getElementById("stats-breasts").style.display = 'none'; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (!macro.maleParts && !macro.femaleParts) { | 
		
	
		
			
			|  |  |  | document.getElementById("stats-splooged").style.display = 'none'; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var species = document.getElementById("option-species").value; | 
		
	
		
			
			|  |  |  | var re = /^[a-zA-Z\- ]+$/; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -818,6 +973,7 @@ window.addEventListener('load', function(event) { | 
		
	
		
			
			|  |  |  | victims["cock"] = initVictims(); | 
		
	
		
			
			|  |  |  | victims["balls"] = initVictims(); | 
		
	
		
			
			|  |  |  | victims["smothered"] = initVictims(); | 
		
	
		
			
			|  |  |  | victims["splooged"] = initVictims(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | macro.init(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | 
 |