diff --git a/game.js b/game.js index b4e7530..96e282c 100644 --- a/game.js +++ b/game.js @@ -554,7 +554,7 @@ var macro = result.push(line); if (this.hasTail) { - line = "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails sway as you walk," : "sways as you walk."); + line = "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails sway as you walk. " : " tail sways as you walk. "); if (this.tailMaw) { line += (macro.tailCount > 1 ? "Their maws are drooling" : "Its maw is drooling"); } @@ -577,19 +577,33 @@ var macro = } } if (this.maleParts) { + if (this.hasSheath && this.arousal < 75) { + line = "Your " + this.describeDick + " cock is hidden away in your bulging sheath, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath."; + } 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); } - if (this.femaleParts) { + if (this.femaleParts) { line = "Your glistening " + this.describeVagina + " slit peeks out from between your legs." result.push(line); } + if (this.hasBreasts) { - line = "You have two " + length(macro.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece."; + line = "You have two " + length(this.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece."; + + if (this.cleavage.container.count > 0) + line += " Between them are " + this.cleavage.container.describe(false) + "."; result.push(line); } + if (this.hasPouch) { + if (this.pouch.container.count == 0) + result.push("Your belly pouch is flat and empty."); + else + result.push("Your belly pouch is bulging, holding " + this.pouch.container.describe(false) + "."); + } + return result; }, @@ -1174,6 +1188,7 @@ function cleavage_stuff() function cleavage_crush() { var prey = macro.cleavage.container; + macro.cleavage.container = new Container(); var line = describe("cleavage-crush", prey, macro, verbose); var linesummary = summarize(prey.sum(), true); @@ -1238,6 +1253,41 @@ function cleavage_drop() update([sound,line,linesummary,newline]); } +function cleavage_absorb() +{ + var prey = macro.cleavage.container; + macro.cleavage.container = new Container(); + var line = describe("cleavage-absorb", prey, macro, verbose); + var linesummary = summarize(prey.sum(), true); + + var people = get_living_prey(prey.sum()); + + var sound = "Thump"; + + if (people < 3) { + sound = "Shlp."; + } else if (people < 10) { + sound = "Slurp."; + } else if (people < 50) { + sound = "Shlrrrrp!"; + } else if (people < 500) { + sound = "SHLRP!"; + } else if (people < 5000) { + sound = "SHLLLLURP!!"; + } else { + sound = "Oh the humanity!"; + } + + var preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + macro.arouse((preyMass > 0 ? 15 : 5)); + + updateVictims("cleavageabsorbed",prey); + update([sound,line,linesummary,newline]); +} + function breast_crush() { var area = macro.breastArea; @@ -1489,6 +1539,37 @@ function sheath_crush() update([sound,line,linesummary,newline]); } +function sheath_absorb() +{ + var prey = macro.sheath.container; + macro.sheath.container = new Container(); + var line = describe("sheath-absorb", prey, macro, verbose) + var linesummary = summarize(prey.sum(), true); + + var people = get_living_prey(prey.sum()); + + var sound = ""; + + if (people < 3) { + sound = "Shlp."; + } else if (people < 10) { + sound = "Squelch."; + } else if (people < 50) { + sound = "Shlurrp."; + } else if (people < 500) { + sound = "SHLRP!"; + } else if (people < 5000) { + sound = "SQLCH!!"; + } else { + sound = "Oh the humanity!"; + } + + macro.arouse(45); + + update([sound,line,linesummary,newline]); +} + + function cockslap() { var area = macro.dickArea; @@ -2210,7 +2291,13 @@ function startGame(e) { } if (macro.maleParts) { - victimTypes = victimTypes.concat(["cock","balls","sheath"]); + victimTypes = victimTypes.concat(["cock","balls"]); + if (macro.hasSheath) { + victimTypes.push("sheath"); + } else { + document.getElementById("button-sheath_stuff").style.display = 'none'; + document.getElementById("button-sheath_squeeze").style.display = 'none'; + } } else { document.getElementById("action-part-dick").style.display = 'none'; document.getElementById("button-cockslap").style.display = 'none'; @@ -2220,6 +2307,9 @@ function startGame(e) { document.getElementById("cumPercent").style.display = 'none'; document.querySelector("#part-balls+label").style.display = 'none'; document.querySelector("#part-dick+label").style.display = 'none'; + document.getElementById("button-sheath_stuff").style.display = 'none'; + document.getElementById("button-sheath_squeeze").style.display = 'none'; + document.getElementById("button-sheath_absorb").style.display = 'none'; } if (macro.femaleParts) { @@ -2233,7 +2323,7 @@ function startGame(e) { } if (macro.hasBreasts) { - victimTypes = victimTypes.concat(["breasts","cleavage","cleavagecrushed","cleavagedropped"]); + victimTypes = victimTypes.concat(["breasts","cleavage","cleavagecrushed","cleavagedropped","cleavageabsorbed"]); if (macro.lactationEnabled) { victimTypes = victimTypes.concat(["flooded"]); } else { @@ -2248,6 +2338,10 @@ function startGame(e) { } } else { document.getElementById("action-part-breasts").style.display = 'none'; + document.getElementById("button-cleavage_stuff").style.display = 'none'; + document.getElementById("button-cleavage_crush").style.display = 'none'; + document.getElementById("button-cleavage_drop").style.display = 'none'; + document.getElementById("button-cleavage_absorb").style.display = 'none'; document.getElementById("button-breast_vore").style.display = 'none'; document.getElementById("button-breast_milk").style.display = 'none'; document.getElementById("milk").style.display = 'none'; @@ -2355,12 +2449,14 @@ window.addEventListener('load', function(event) { victims["cleavage"] = initVictims(); victims["cleavagecrushed"] = initVictims(); victims["cleavagedropped"] = initVictims(); + victims["cleavageabsorbed"] = initVictims(); victims["breasts"] = initVictims(); victims["breastvored"] = initVictims(); victims["flooded"] = initVictims(); victims["womb"] = initVictims(); victims["sheath"] = initVictims(); victims["sheathcrushed"] = initVictims(); + victims["sheathabsorbed"] = initVictims(); victims["cock"] = initVictims(); victims["balls"] = initVictims(); victims["smothered"] = initVictims(); @@ -2382,12 +2478,14 @@ window.addEventListener('load', function(event) { document.getElementById("button-cleavage_stuff").addEventListener("click",cleavage_stuff); document.getElementById("button-cleavage_crush").addEventListener("click",cleavage_crush); document.getElementById("button-cleavage_drop").addEventListener("click",cleavage_drop); + document.getElementById("button-cleavage_absorb").addEventListener("click",cleavage_absorb); document.getElementById("button-breast_crush").addEventListener("click",breast_crush); document.getElementById("button-breast_vore").addEventListener("click",breast_vore); document.getElementById("button-breast_milk").addEventListener("click",milk_breasts); document.getElementById("button-unbirth").addEventListener("click",unbirth); document.getElementById("button-sheath_stuff").addEventListener("click",sheath_stuff); document.getElementById("button-sheath_squeeze").addEventListener("click",sheath_squeeze); + document.getElementById("button-sheath_absorb").addEventListener("click",sheath_absorb); document.getElementById("button-cockslap").addEventListener("click",cockslap); document.getElementById("button-cock_vore").addEventListener("click",cock_vore); document.getElementById("button-ball_smother").addEventListener("click",ball_smother); diff --git a/recursive-desc.js b/recursive-desc.js index 366533b..fe03da5 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -11,6 +11,7 @@ rules["ass-crush"] = []; rules["cleavage-stuff"] = []; rules["cleavage-crush"] = []; rules["cleavage-drop"] = []; +rules["cleavage-absorb"] = []; rules["breast-crush"] = []; rules["breast-vore"] = []; rules["breast-milk"] = []; @@ -18,6 +19,7 @@ rules["unbirth"] = []; rules["sheath-stuff"] = []; rules["sheath-squeeze"] = []; rules["sheath-crush"] = []; +rules["sheath-absorb"] = []; rules["cock-vore"] = []; rules["cockslap"] = []; rules["ball-smother"] = []; @@ -133,6 +135,7 @@ function describeDefault(action, container, macro, verbose=true) { case "cleavage-stuff": return defaultCleavageStuff(container, macro, verbose); case "cleavage-crush": return defaultCleavageCrush(container, macro, verbose); case "cleavage-drop": return defaultCleavageDrop(container, macro, verbose); + case "cleavage-absorb": return defaultCleavageAbsorb(container, macro, verbose); case "breast-crush": return defaultBreastCrush(container, macro, verbose); case "breast-vore": return defaultBreastVore(container, macro, verbose); case "breast-milk": return defaultBreastMilk(container, macro, verbose); @@ -140,6 +143,7 @@ function describeDefault(action, container, macro, verbose=true) { case "sheath-stuff": return defaultSheathStuff(container, macro, verbose); case "sheath-squeeze": return defaultSheathSqueeze(container, macro, verbose); case "sheath-crush": return defaultSheathCrush(container, macro, verbose); + case "sheath-absorb": return defaultSheathAbsorb(container, macro, verbose); case "cock-vore": return defaultCockVore(container, macro, verbose); case "cockslap": return defaultCockslap(container, macro, verbose); case "ball-smother": return defaultBallSmother(container, macro, verbose); @@ -214,19 +218,30 @@ function defaultCleavageStuff(container, macro, verbose) { } function defaultCleavageCrush(container, macro, verbose) { - if (isGory(macro)) - return "You grasp your breasts and forcefully shove them together, crushing the life from " + container.describe(verbose) + "."; + if (container.count == 0) + return "You grasp your breasts and forcefully squeeze them together."; + else if (isGory(macro)) + return "You grasp your breasts and forcefully shove them together, crushing the life from " + container.describe(false) + "."; else if (isFatal(macro)) - return "You grasp your breasts and forcefully shove them together, crushing " + container.describe(verbose) + "."; + return "You grasp your breasts and forcefully shove them together, crushing " + container.describe(false) + "."; else - return "You grasp your breasts and squish them together, smooshing " + container.describe(verbose) + "."; + return "You grasp your breasts and squish them together, smooshing " + container.describe(false) + "."; +} + +function defaultCleavageAbsorb(container, macro, verbose) { + if (container.count == 0) + return defaultCleavageCrush(container, macro, verbose); + else + return "Your squeeze your breasts together, swiftly absorbing " + container.describe(false) + " into your chest."; } function defaultCleavageDrop(container, macro, verbose) { + if (container.count == 0) + return "You pull your breasts apart and give them a shake."; if (isFatal(macro)) - return "You pull your breasts apart far enough for the " + container.describe(verbose) + " trapped within to fall out, tumbling to the ground and smashing to bits."; + return "You pull your breasts apart far enough for the " + container.describe(false) + " trapped within to fall out, tumbling to the ground and smashing to bits."; else - return "You pull your breasts apart far enough for the " + container.describe(verbose) + " trapped within to fall out."; + return "You pull your breasts apart far enough for the " + container.describe(false) + " trapped within to fall out."; } function defaultBreastCrush(container, macro, verbose) { @@ -257,16 +272,30 @@ function defaultSheathStuff(container, macro, verbose) { } function defaultSheathSqueeze(container, macro, verbose) { - if (macro.orgasm) { - return "You stroke your spurting cock, then reach down to give your sheath a firm squeeze. Anything within has been ground away to nothingness by the force of your orgasm."; - } else if (macro.arousal < 25) { - return "You grip your soft sheath and give it a squeeze, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock."; - } else if (macro.arousal < 75) { - return "You grip your swelling sheath and squeeze, feeling " + container.describe(false) + " within grind against your " + macro.describeDick + " cock."; - } else if (macro.arousal < 150) { - return "You run your fingers down your " + macro.describeDick + " shaft and grip your sheath, squeezing it to feel " + container.describe(false) + " being smothered against the musky walls by your throbbing cock."; + if (container.count > 0) { + if (macro.orgasm) { + return "You stroke your spurting cock, then reach down to give your sheath a firm squeeze. Anything within has been ground away to nothingness by the force of your orgasm."; + } else if (macro.arousal < 25) { + return "You grip your soft sheath and give it a squeeze, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock."; + } else if (macro.arousal < 75) { + return "You grip your swelling sheath and squeeze, feeling " + container.describe(false) + " within grind against your " + macro.describeDick + " cock."; + } else if (macro.arousal < 150) { + return "You run your fingers down your " + macro.describeDick + " shaft and grip your sheath, squeezing it to feel " + container.describe(false) + " being smothered against the musky walls by your throbbing cock."; + } else { + return "Trembling with your impending orgasm, your fingers play over your sheath, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock."; + } } else { - return "Trembling with your impending orgasm, your fingers play over your sheath, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock."; + if (macro.orgasm) { + return "You stroke your spurting cock, then reach down to give your sheath a firm squeeze. Anything within has been ground away to nothingness by the force of your orgasm."; + } else if (macro.arousal < 25) { + return "You grip your soft sheath and give it a squeeze."; + } else if (macro.arousal < 75) { + return "You grip your swelling sheath and squeeze."; + } else if (macro.arousal < 150) { + return "You run your fingers down your " + macro.describeDick + " shaft and grip your sheath, squeezing it gently."; + } else { + return "Trembling with your impending orgasm, your fingers play over your sheath."; + } } } @@ -279,6 +308,13 @@ function defaultSheathCrush(container, macro, verbose) { return "Your orgasm causes your " + macro.describeDick + " cock to swell, squeezing " + container.describe(false) + " out from your sheath."; } +function defaultSheathAbsorb(container, macro, verbose) { + if (container.count > 0) + return "You grip your sheath and give it a firm squeeze, abruptly absorbing " + container.describe(false) + " into your musky body."; + else + return defaultSheathSqueeze(container, macro, verbose); +} + function defaultCockVore(container, macro, verbose) { return "You stuff " + container.describe(verbose) + " into your throbbing shaft, forcing them down to your heavy balls."; } diff --git a/stroll.html b/stroll.html index cc8d144..f4377f5 100644 --- a/stroll.html +++ b/stroll.html @@ -104,6 +104,7 @@ + @@ -114,6 +115,7 @@