| @@ -417,8 +417,8 @@ let macro = | |||
| let sound = getSound("digest",container.sum_property("mass")); | |||
| let line = organ.describeDigestion(container); | |||
| organ.fill(this,container); | |||
| let vol = organ.fill(this,container); | |||
| let line = organ.describeDigestion(container, vol); | |||
| let lethal = macro.brutality != 0 && (!macro.soulVoreEnabled || organ.name === "souls"); | |||
| let summary = summarize(container.sum(),lethal); | |||
| @@ -564,11 +564,13 @@ let macro = | |||
| "feedFunc": function(prey,self,owner) { | |||
| this.contents[0] = this.contents[0].merge(prey); | |||
| }, | |||
| "describeDigestion" : function(container) { | |||
| return describe("womb",container,this.owner,verbose); | |||
| "describeDigestion": function(container, vol) { | |||
| return describe("womb",container,this.owner,verbose).replace("$VOLUME",volume(vol,unit,false)); | |||
| }, | |||
| "fill": function(owner,container) { | |||
| owner.femcumStorage.amount += container.sum_property("mass") * owner.femcumDigestFactor / 1e3; | |||
| let amount = container.sum_property("mass") * owner.femcumDigestFactor / 1e3; | |||
| owner.femcumStorage.amount += amount; | |||
| return amount; | |||
| }, | |||
| get description() { | |||
| let prey = new Container(); | |||
| @@ -614,11 +616,13 @@ let macro = | |||
| "feedFunc": function(prey,self,owner) { | |||
| this.contents[0] = this.contents[0].merge(prey); | |||
| }, | |||
| "describeDigestion": function(container) { | |||
| return describe("balls",container,this.owner,verbose); | |||
| "describeDigestion": function(container, vol) { | |||
| return describe("balls",container,this.owner,verbose).replace("$VOLUME",volume(vol,unit,false)); | |||
| }, | |||
| "fill": function(owner,container) { | |||
| owner.cumStorage.amount += container.sum_property("mass") * owner.cumDigestFactor / 1e3; | |||
| let amount = container.sum_property("mass") * owner.cumDigestFactor / 1e3; | |||
| owner.cumStorage.amount += amount; | |||
| return amount; | |||
| }, | |||
| get description() { | |||
| let prey = new Container(); | |||
| @@ -664,12 +668,14 @@ let macro = | |||
| "feedFunc": function(prey,self,owner) { | |||
| this.contents[0] = this.contents[0].merge(prey); | |||
| }, | |||
| "describeDigestion": function(container) { | |||
| return describe("breasts",container,this.owner,verbose); | |||
| "describeDigestion": function(container, vol) { | |||
| return describe("breasts",container,this.owner,verbose).replace("$VOLUME",volume(vol,unit,false)); | |||
| }, | |||
| "fill": function(owner,container) { | |||
| if (macro.lactationEnabled) { | |||
| owner.milkStorage.amount += container.sum_property("mass") * owner.milkDigestFactor / 1e3; | |||
| let amount = container.sum_property("mass") * owner.milkDigestFactor / 1e3; | |||
| owner.milkStorage.amount += amount; | |||
| return amount; | |||
| } | |||
| }, | |||
| get description() { | |||
| @@ -716,13 +722,13 @@ let macro = | |||
| "feedFunc": function(prey,self,owner) { | |||
| this.contents[0] = this.contents[0].merge(prey); | |||
| }, | |||
| "describeDigestion": function(container) { | |||
| return describe("bladder",container,this.owner,verbose); | |||
| "describeDigestion": function(container, vol) { | |||
| return describe("bladder",container,this.owner,verbose).replace("$VOLUME",volume(vol,unit,false)); | |||
| }, | |||
| "fill": function(owner,container) { | |||
| if (macro.lactationEnabled) { | |||
| owner.pissStorage.amount += container.sum_property("mass") * owner.pissDigestFactor / 1e3; | |||
| } | |||
| let amount = container.sum_property("mass") * owner.pissDigestFactor / 1e3; | |||
| owner.pissStorage.amount += amount; | |||
| return amount; | |||
| }, | |||
| get description() { | |||
| let prey = new Container(); | |||
| @@ -758,7 +764,8 @@ let macro = | |||
| this.feedFunc(prey,this,this.owner); | |||
| }, | |||
| "feedFunc": function(prey,self,owner) { | |||
| this.contents[0] = this.contents[0].merge(prey); | |||
| if (get_living_prey(prey.sum()) > 0) | |||
| this.contents[0] = this.contents[0].merge(prey); | |||
| }, | |||
| "describeDigestion": function(container) { | |||
| return describe("soul-digest",container,this.owner,verbose); | |||
| @@ -772,13 +779,15 @@ let macro = | |||
| prey = prey.merge(x); | |||
| }); | |||
| if (prey.count == 0) { | |||
| let souls = get_living_prey(prey.sum()); | |||
| if (souls == 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); | |||
| return "Your depths bubble and boil with energy, slowly digesting " + (souls > 1 ? souls + " souls." : "a lonely soul"); | |||
| } else { | |||
| return "You feel " + (prey.count > 1 ? prey.count + " souls " : "a soul ") + "trapped in your depths."; | |||
| return "You feel " + (souls > 1 ? souls + " souls " : "a soul ") + "trapped in your depths."; | |||
| } | |||
| } | |||
| }, | |||
| @@ -2421,7 +2430,7 @@ function male_orgasm(vol,times) | |||
| let area = Math.pow(vol, 2/3); | |||
| let prey = getPrey(biome, area); | |||
| let line = describe("male-orgasm", prey, macro, verbose).replace("$TIMES",times).replace("$VOLUME",volume(vol*times,unit,false)); | |||
| let line = describe("male-orgasm", prey, macro, verbose).replace("$TIMES",times).replace("$VOLUME",volume(vol*times,unit,true)); | |||
| let linesummary = summarize(prey.sum(), true); | |||
| let people = get_living_prey(prey.sum()); | |||
| @@ -2958,6 +2967,21 @@ function gooButtons(molten) { | |||
| setButton("solidify", molten); | |||
| setButton("goo_stomach_pull", molten); | |||
| setButton("goo_stomach_push", molten); | |||
| if (macro.analVore) { | |||
| setButton("goo_bowels_pull", molten); | |||
| setButton("goo_bowels_push", molten); | |||
| } | |||
| if (macro.femaleParts) { | |||
| setButton("goo_womb_pull", molten); | |||
| setButton("goo_womb_push", molten); | |||
| } | |||
| if (macro.maleParts) { | |||
| setButton("goo_balls_pull", molten); | |||
| setButton("goo_balls_push", molten); | |||
| } | |||
| } | |||
| function melt() | |||
| @@ -3030,9 +3054,9 @@ function move_prey(from, to) { | |||
| return prey; | |||
| } | |||
| function goo_stomach_pull() { | |||
| let prey = move_prey(macro.stomach, macro.goo); | |||
| let line = describe("goo-stomach-pull", prey, macro, verbose); | |||
| function goo_move_prey(from, to, name) { | |||
| let prey = move_prey(from, to); | |||
| let line = describe(name, prey, macro, verbose); | |||
| let linesummary = summarize(prey.sum(), false); | |||
| let preyMass = prey.sum_property("mass"); | |||
| let sound = getSound("goo", preyMass); | |||
| @@ -3040,14 +3064,36 @@ function goo_stomach_pull() { | |||
| update([sound, line, linesummary, newline]); | |||
| } | |||
| function goo_stomach_pull() { | |||
| return goo_move_prey(macro.stomach, macro.goo, "goo-stomach-pull"); | |||
| } | |||
| function goo_stomach_push() { | |||
| let prey = move_prey(macro.goo, macro.stomach); | |||
| let line = describe("goo-stomach-push", prey, macro, verbose); | |||
| let linesummary = summarize(prey.sum(), false); | |||
| let preyMass = prey.sum_property("mass"); | |||
| let sound = getSound("goo", preyMass); | |||
| return goo_move_prey(macro.goo, macro.stomach, "goo-stomach-push"); | |||
| } | |||
| update([sound, line, linesummary, newline]); | |||
| function goo_bowels_pull() { | |||
| return goo_move_prey(macro.bowels, macro.goo, "goo-bowels-pull"); | |||
| } | |||
| function goo_bowels_push() { | |||
| return goo_move_prey(macro.goo, macro.bowels, "goo-bowels-push"); | |||
| } | |||
| function goo_womb_pull() { | |||
| return goo_move_prey(macro.womb, macro.goo, "goo-womb-pull"); | |||
| } | |||
| function goo_womb_push() { | |||
| return goo_move_prey(macro.goo, macro.womb, "goo-womb-push"); | |||
| } | |||
| function goo_balls_pull() { | |||
| return goo_move_prey(macro.balls, macro.goo, "goo-balls-pull"); | |||
| } | |||
| function goo_balls_push() { | |||
| return goo_move_prey(macro.goo, macro.balls, "goo-balls-push"); | |||
| } | |||
| function transformNumbers(line) | |||
| @@ -23,7 +23,8 @@ var actions = ["eat","chew","vomit","stomp","stomp-wedge","flex-toes","kick","an | |||
| "female-orgasm","grind","pouch-stuff","pouch-rub","pouch-eat","pouch-absorb","soul-vore","soul-absorb-paw", | |||
| "paw-stench","ass-stench","belch","fart","stomach","womb","balls","bowels","bowels-to-stomach","breasts","bladder","soul-digest", | |||
| "wear-shoe","remove-shoe","wear-sock","remove-sock","stuff-shoe","dump-shoe","stuff-sock","dump-sock","piss","bladder-vore","scat", | |||
| "sheath-toy","slit-toy","breast-toy","melt","solidify","stomp-goo","goo-digest","ass-goo","goo-stomach-pull","goo-stomach-push"]; | |||
| "sheath-toy","slit-toy","breast-toy","melt","solidify","stomp-goo","goo-digest","ass-goo","goo-stomach-pull","goo-stomach-push", | |||
| "goo-bowels-pull","goo-bowels-push","goo-womb-pull","goo-womb-push","goo-balls-pull","goo-balls-push"]; | |||
| for (let i=0; i<actions.length; i++) { | |||
| rules[actions[i]] = []; | |||
| @@ -372,7 +373,7 @@ function defaultSheathClench(container, macro, verbose) { | |||
| if (container.count == 0) | |||
| return "You squeeze your sheath."; | |||
| else if (isGory(macro)) | |||
| return "You squeeze you packed sheath, reducing " + container.describe(false) + " to a gory paste that slickens your throbbing shaft."; | |||
| return "You squeeze your packed sheath, reducing " + container.describe(false) + " to a gory paste that slickens your throbbing shaft."; | |||
| else if (isFatal(macro)) | |||
| return "Your fingers run over your packed sheath, squeezing on the " + macro.describeDick + " shaft within and smashing " + container.describe(false); | |||
| else | |||
| @@ -433,7 +434,7 @@ function defaultMaleSpurt(container, macro, verbose) { | |||
| function defaultMaleOrgasm(container, macro, verbose) { | |||
| if (container.count == 0) | |||
| return "Your " + macro.describeDick + " cock spurts $TIMES times, gushing $VOLUME of seed."; | |||
| return "Your " + macro.describeDick + " cock spurts $TIMES times, gushing out a $VOLUME glob of cum."; | |||
| else if (isFatal(macro)) | |||
| return "You're cumming! Your " + macro.describeDick + " cock erupts with $TIMES ropes of seed, obliterating " + container.describe(verbose) + " in a $VOLUME-torrent of cum."; | |||
| else | |||
| @@ -595,21 +596,21 @@ function defaultBowelsToStomach(container, macro, verbose) { | |||
| function defaultWomb(container, macro, verbose) { | |||
| if (isFatal(macro)) | |||
| return "Your womb squeezes and dissolves " + container.describe(false) + ", turning them into slick femcum."; | |||
| return "Your womb squeezes and dissolves " + container.describe(false) + ", turning them into $VOLUME of slick femcum."; | |||
| else | |||
| return "Your womb squeezes as it absorbs " + container.describe(false); | |||
| } | |||
| function defaultBalls(container, macro, verbose) { | |||
| if (isFatal(macro)) | |||
| return "Your balls slosh as they digest " + container.describe(false) + " into cum"; | |||
| return "Your balls slosh as they digest " + container.describe(false) + " into $VOLUME of cum"; | |||
| else | |||
| return "Your balls slosh as they absorb " + container.describe(false); | |||
| } | |||
| function defaultBreasts(container, macro, verbose) { | |||
| if (isFatal(macro)) | |||
| return "Your breasts grrgle as they digest " + container.describe(false) + " into milk"; | |||
| if (isFatal(macro) && macro.lactationEnabled) | |||
| return "Your breasts grrgle as they digest " + container.describe(false) + " into $VOLUME of milk"; | |||
| else | |||
| return "Your breasts slosh as they absorb " + container.describe(false); | |||
| } | |||
| @@ -617,13 +618,13 @@ function defaultBreasts(container, macro, verbose) { | |||
| function defaultBladder(container, macro, verbose) { | |||
| if (isSadistic(macro)) { | |||
| let fatalities = get_living_prey(container.sum()); | |||
| let line = "Your bladder swells as " + container.describe(false) + " are dissolved in your acrid piss."; | |||
| let line = "Your bladder swells as " + container.describe(false) + " are dissolved in your acrid piss, digesting them down to $VOLUME of fresh urine"; | |||
| if (fatalities > 0) { | |||
| line += " " + (fatalities > 1 ? fatalities + " lives are" : "a life is") + " snuffed out by the horrific yellow tide, corroded and annihilated amongst the unbearable stench of urine."; | |||
| } | |||
| return line; | |||
| } else if (isFatal(macro)) | |||
| return "Your bladder swells as it dissolves " + container.describe(false) + " into acrid piss"; | |||
| return "Your bladder swells as it dissolves " + container.describe(false) + " into $VOLUME of acrid piss"; | |||
| else | |||
| return "Your bladder squeezes as it absorbs " + container.describe(false); | |||
| } | |||
| @@ -738,7 +739,7 @@ function defaultBladderVore(container, macro, verbose) { | |||
| } | |||
| else { | |||
| if (macro.maleParts) { | |||
| return "You snatch up " + container.describe(verbose) + " and stuff them into your " + macro.describeDick + ", grinding them to its base and forcing them into your musky bladder."; | |||
| return "You snatch up " + container.describe(verbose) + " and stuff them into your " + macro.describeDick + " cock, grinding them to its base and forcing them into your musky bladder."; | |||
| } else if (macro.femaleParts) { | |||
| return "You snatch " + container.describe(verbose) + " in your iron grip, grinding them against your " + macro.describeVagina + " slit before stuffing them into your urethra, sealing them away in your musky bladder."; | |||
| } else { | |||
| @@ -805,7 +806,31 @@ function defaultGooStomachPull(container, macro, verbose) { | |||
| } | |||
| function defaultGooStomachPush(container, macro, verobse) { | |||
| return "Your churning goo herds " + container.describe(false) + " into your churning stomach."; | |||
| return "Your churning goo herds " + container.describe(false) + " into your gurgling stomach."; | |||
| } | |||
| function defaultGooBowelsPull(container, macro, verbose) { | |||
| return "Your molten depths squeeze in around the " + container.describe(false) + " imprisoned in your bowels, drawing them into the viscous goo."; | |||
| } | |||
| function defaultGooBowelsPush(container, macro, verobse) { | |||
| return "Your churning goo herds " + container.describe(false) + " into your clenching bowels."; | |||
| } | |||
| function defaultGooWombPull(container, macro, verbose) { | |||
| return "Your molten depths squeeze in around the " + container.describe(false) + " imprisoned in your womb, drawing them into the viscous goo."; | |||
| } | |||
| function defaultGooWombPush(container, macro, verobse) { | |||
| return "Your churning goo herds " + container.describe(false) + " into your slick womb."; | |||
| } | |||
| function defaultGooBallsPull(container, macro, verbose) { | |||
| return "Your molten depths squeeze in around the " + container.describe(false) + " imprisoned in your balls, drawing them into the viscous goo."; | |||
| } | |||
| function defaultGooBallsPush(container, macro, verobse) { | |||
| return "Your churning goo herds " + container.describe(false) + " into your musky balls."; | |||
| } | |||
| // EATING | |||
| @@ -301,6 +301,12 @@ | |||
| <button class="action-button" id="button-action-melt">Melt</button> | |||
| <button class="action-button" id="button-action-goo_stomach_push">Push to Stomach</button> | |||
| <button class="action-button" id="button-action-goo_stomach_pull">Pull from Stomach</button> | |||
| <button class="action-button" id="button-action-goo_bowels_push">Push to Bowels</button> | |||
| <button class="action-button" id="button-action-goo_bowels_pull">Pull from Bowels</button> | |||
| <button class="action-button" id="button-action-goo_womb_push">Push to Womb</button> | |||
| <button class="action-button" id="button-action-goo_womb_pull">Pull from Womb</button> | |||
| <button class="action-button" id="button-action-goo_balls_push">Push to Balls</button> | |||
| <button class="action-button" id="button-action-goo_balls_pull">Pull from Balls</button> | |||
| </div> | |||
| <div class="action-tab" id="actions-misc"> | |||