diff --git a/game.js b/game.js index d8cfe9e..1a6d9b1 100644 --- a/game.js +++ b/game.js @@ -397,7 +397,7 @@ let macro = }, "digest": function(owner,organ) { - setTimeout(function() { owner.digest(owner,organ); }, 5000); + setTimeout(function() { owner.digest(owner,organ); }, 100); let count = Math.min(organ.contents.length, organ.maxDigest); @@ -464,7 +464,7 @@ let macro = if (owner.gasEnabled) owner.gasStorage.amount += container.sum_property("mass") * this.owner.gasDigestFactor / 1e4; if (owner.scatEnabled) { - owner.scatStorage.amount += container.sum_property("mass") * this.owner.gasDigestFactor / 1e3; + owner.scatStorage.amount += container.sum_property("mass") * this.owner.scatDigestFactor / 1e3; owner.scatStorage.victims = owner.scatStorage.victims.merge(container); } }, @@ -512,7 +512,7 @@ let macro = if (owner.gasEnabled) owner.gasStorage.amount += container.sum_property("mass") * this.owner.gasDigestFactor / 1e3; if (owner.scatEnabled) { - owner.scatStorage.amount += container.sum_property("mass") * this.owner.gasDigestFactor / 1e3; + owner.scatStorage.amount += container.sum_property("mass") * this.owner.scatDigestFactor / 1e3; owner.scatStorage.victims = owner.scatStorage.victims.merge(container); } }, @@ -658,6 +658,8 @@ let macro = "stages" : 2 }, + "pissDigestFactor": 1, + "bladder": { "name" : "bladder", "setup": function(owner) { @@ -677,7 +679,7 @@ let macro = }, "fill": function(owner,container) { if (macro.lactationEnabled) { - owner.pissStorage.amount += container.sum_property("mass") / 1e3; + owner.pissStorage.amount += container.sum_property("mass") * owner.pissDigestFactor / 1e3; } }, get description() { @@ -817,6 +819,20 @@ let macro = } }, + "paws": { + "name": "paws", + "container": new Container(), + get description() { + if (this.container.count == 0) + return "You don't have anyone stuck between your " + this.owner.toeDesc(true); + else + return "You have " + this.container.describe(false) + " wedged between your " + this.owner.toeDesc(true); + }, + "add": function(victims) { + this.container = this.container.merge(victims); + } + }, + "init": function() { this.stomach.setup(this); this.bowels.setup(this); @@ -832,6 +848,8 @@ let macro = this.pissStorage.owner = this; this.scatStorage.owner = this; + this.paws.owner = this; + if (this.analVoreToStomach) { this.bowels.moves = this.stomach; } @@ -901,7 +919,7 @@ let macro = } else if (self.fartEnabled) { fart(amount); } - self.gasStorage.amount = self.gasStorage.limit*3/4; + } setTimeout(function () { self.fillGas(self); }, 100); update(); @@ -929,6 +947,8 @@ let macro = update(); }, + "scatDigestFactor": 1, + // no actual filling, but it handles updates "fillScat": function(self) { if (self.scatStorage.amount > self.scatStorage.limit * 2) @@ -1145,6 +1165,24 @@ let macro = } }, + get totalMass() { + let base = this.baseMass; + + if (this.hasTail) { + base += this.tailMass * this.tailCount; + } + + if (this.maleParts) { + base += this.dickMass; + base += this.ballMass * 2; + } + + if (this.hasBreasts) { + base += this.breastMass * 2; + } + + return base; + }, get description() { let result = []; @@ -1212,6 +1250,11 @@ let macro = result.push(line); } + line = "Your two " + macro.footDesc(true) + " shake the earth."; + result.push(line); + + + return result; }, @@ -1609,11 +1652,55 @@ function stomp() macro.arouse(5); + stomp_wedge(); + if (macro.stenchEnabled) { paw_stench(); } } +function stomp_wedge() { + let area = 0; + + if (!macro.footWear || (!macro.footSockWorn && !macro.footShoeWorn)) + area = macro.pawArea/10; + else if (macro.footShoeWorn) + area = macro.pawArea/25; + else + area = 0; + + let prey = getPrey(biome, area, false); + + if (prey.count == 0) + return; + + let line = describe("stomp-wedge", prey, macro, verbose); + let linesummary = summarize(prey.sum(), false); + + let people = get_living_prey(prey.sum()); + + let sound = "Thump"; + + if (people < 3) { + sound = "Thump!"; + } else if (people < 10) { + sound = "Squish!"; + } else if (people < 50) { + sound = "Crunch!"; + } else if (people < 500) { + sound = "CRUNCH!"; + } else if (people < 5000) { + sound = "CRRUUUNCH!!"; + } else { + sound = "Oh the humanity!"; + } + let preyMass = prey.sum_property("mass"); + + add_victim_people("stomped",prey); + + update([sound,line,linesummary,newline]); +} + function paw_stench() { let area = macro.pawStenchArea; @@ -2731,9 +2818,11 @@ function soul_absorb_paw() function belch(vol) { if (vol == undefined) { - vol = macro.gasStorage.amount; + vol = Math.min(macro.gasStorage.amount,macro.gasStorage.limit/3); } + macro.gasStorage.amount -= vol; + let area = Math.pow(vol, 2/3); let prey = getPrey(biome, area); @@ -2770,8 +2859,11 @@ function belch(vol) function fart(vol) { if (vol == undefined) { - vol = macro.gasStorage.amount; + vol = Math.min(macro.gasStorage.amount,macro.gasStorage.limit/2); } + + macro.gasStorage.amount -= vol; + let area = Math.pow(vol, 2/3); let prey = getPrey(biome, area); @@ -3063,7 +3155,7 @@ function update(lines = []) log.scrollTop = log.scrollHeight; document.getElementById("height").innerHTML = "Height: " + transformNumbers(length(macro.height, unit)); - document.getElementById("mass").innerHTML = "Mass: " + transformNumbers(mass(macro.mass, unit)); + document.getElementById("mass").innerHTML = "Mass: " + transformNumbers(mass(macro.totalMass, unit)); document.getElementById("arousal").innerHTML = "Arousal: " + round(macro.arousal,0) + "%"; document.getElementById("edge").innerHTML = "Edge: " + round(macro.edge * 100,0) + "%"; document.getElementById("cum").innerHTML = "Cum: " + transformNumbers(volume(macro.cumStorage.amount,unit,false)); diff --git a/recursive-desc.js b/recursive-desc.js index 04f2cdc..c831252 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -16,7 +16,7 @@ function getDefault(name) { return window[funcName]; } -var actions = ["eat","chew","stomp","kick","anal-vore","ass-crush","tail-slap","tail-vore", +var actions = ["eat","chew","stomp","stomp-wedge","kick","anal-vore","ass-crush","tail-slap","tail-vore", "cleavage-stuff","cleavage-crush","cleavage-drop","cleavage-absorb","breast-crush", "breast-vore","breast-milk","unbirth","sheath-stuff","sheath-squeeze","sheath-crush", "sheath-absorb","cock-vore","cockslap","ball-smother","male-spurt","male-orgasm","female-spurt", @@ -142,6 +142,18 @@ function defaultStomp(container, macro, verbose) { return "You step on " + container.describe(verbose) + "."; } +function defaultStompWedge(container, macro, verbose) { + if (container.count == 1) { + let line = container.describe(verbose); + line = line.charAt(0).toUpperCase() + line.slice(1); + return line + " is wedged between your " + macro.toeDesc(true); + } else { + let line = container.describe(verbose); + line = line.charAt(0).toUpperCase() + line.slice(1); + return line + " are wedged between your " + macro.toeDesc(true); + } +} + function defaultKick(container, macro, verbose) { if (container.count == 0) return "You swing your mighty " + macro.footDesc() + "..and hit nothing."; diff --git a/recursive-macro.js b/recursive-macro.js index 844c09a..c4510fd 100644 --- a/recursive-macro.js +++ b/recursive-macro.js @@ -354,7 +354,6 @@ function distribution(min, max, samples) { } } - return result; } @@ -511,7 +510,6 @@ function Person(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describeOne = function (verbose=true) { var body = random_desc(["skinny","fat","tall","short","stocky","spindly"], (verbose ? 0.6 : 0)); var sex = random_desc(["male", "female"], (verbose ? 1 : 0)); @@ -547,7 +545,6 @@ function Human(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describeOne = function (verbose=true) { var body = random_desc(["skinny","fat","tall","short","stocky","spindly"], (verbose ? 0.6 : 0)); var sex = random_desc(["man", "woman"], 1); @@ -581,7 +578,6 @@ function Cow(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describeOne = function (verbose=true) { var body = random_desc(["skinny","fat","tall","short","stocky","spindly"], (verbose ? 0.6 : 0)); var sex = random_desc(["male", "female"], (verbose ? 1 : 0)); @@ -614,9 +610,6 @@ function EmptyCar(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - this.describeOne = function(verbose=true) { var color = random_desc(["black","black","gray","gray","blue","red","tan","white","white"]); var adjective = random_desc(["rusty","brand-new"],0.3); @@ -649,8 +642,6 @@ function Car(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describeOne = function(verbose=true) { var color = random_desc(["black","black","gray","gray","blue","red","tan","white","white"], (verbose ? 1 : 0)); var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); @@ -683,8 +674,6 @@ function Bus(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describeOne = function(verbose=true) { var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); var color = random_desc(["black","tan","gray"], (verbose ? 1 : 0)); @@ -717,8 +706,6 @@ function Tram(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describeOne = function(verbose=true) { var adjective = random_desc(["rusty","weathered"], (verbose ? 0.3 : 0)); var color = random_desc(["blue","brown","gray"], (verbose ? 1 : 0)); @@ -742,7 +729,6 @@ function Tram(count = 1) { } }; - this.anal_vore = function() { return "You slide " + this.describe() + " up your tight ass"; }; @@ -792,8 +778,6 @@ function TrainCar(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describeOne = function(verbose=true) { var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); var color = random_desc(["black","tan","gray"], (verbose ? 1 : 0)); @@ -816,9 +800,6 @@ function House(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - this.describeOne = function(verbose=true) { var size = random_desc(["little","two-story","large"], (verbose ? 0.5 : 0)); var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); @@ -849,10 +830,6 @@ function Barn(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - this.describeOne = function(verbose=true) { var size = random_desc(["little","big","large"], (verbose ? 0.5 : 0)); var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); @@ -883,10 +860,6 @@ function SmallSkyscraper(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - this.describeOne = function(verbose=true) { var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); var name = random_desc(["skyscraper","office tower","office building"], 1); @@ -917,10 +890,6 @@ function LargeSkyscraper(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - this.describeOne = function(verbose=true) { var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); var name = random_desc(["skyscraper","office tower","office building"], 1); @@ -950,13 +919,6 @@ function ParkingGarage(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - - - - this.describeOne = function(verbose=true) { return "a parking garage"; }; @@ -976,18 +938,6 @@ function Town(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - - - - - - - - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a town" : this.count + " towns") + " with " + describe_all(this.contents, verbose) + " in " + (this.count == 1 ? "it" : "them"); @@ -1003,26 +953,6 @@ function City(count = 1) { copy_defaults(this,new DefaultEntity()); this.count = count; this.contents = initContents(this.name,this.count); - - - - - - - - - - - - - - - - - - - - this.describe = function(verbose = true) { if (verbose) { @@ -1040,18 +970,6 @@ function Continent(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - - - - - - - - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a continent" : this.count + " continents") + " with " + describe_all(this.contents, verbose) + " on " + (this.count == 1 ? "it" : "them"); @@ -1068,8 +986,6 @@ function Planet(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a planet" : this.count + " planets") + " with " + describe_all(this.contents, verbose) + " on " + (this.count == 1 ? "it" : "them"); @@ -1098,10 +1014,6 @@ function SolarSystem(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a solar system" : this.count + " solar systems") + " made up of " + describe_all(this.contents, verbose); @@ -1118,10 +1030,6 @@ function Galaxy(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a galaxy" : this.count + " galaxies") + " made up of " + describe_all(this.contents, verbose); @@ -1150,8 +1058,6 @@ function Tank(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a tank" : this.count + " tanks") + " with " + describe_all(this.contents, verbose) + " trapped inside."; @@ -1168,8 +1074,6 @@ function Artillery(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "an artillery unit" : this.count + " artillery units") + " with " + describe_all(this.contents, verbose) + " trapped inside."; @@ -1186,8 +1090,6 @@ function Helicopter(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - - this.describe = function(verbose = true) { if (verbose) { return (this.count == 1 ? "a helicopter" : this.count + " helicopters") + " with " + describe_all(this.contents, verbose) + " riding inside."; diff --git a/stroll.html b/stroll.html index c34c5ac..9142e2b 100644 --- a/stroll.html +++ b/stroll.html @@ -681,6 +681,10 @@ +
  • + + +
  • @@ -694,6 +698,10 @@
  • note - setting tailhole diameter requires anal vore to be enabled
  • +
  • + + +