diff --git a/game.js b/game.js index deb6593..b4e7530 100644 --- a/game.js +++ b/game.js @@ -314,6 +314,36 @@ var macro = } }, + hasSheath: true, + "sheath": { + "name": "sheath", + "container": new Container(), + get description() { + if (this.container.count == 0) + return "Your sheath is empty"; + else + return "Your sheath contains " + this.container.describe(false); + }, + "add": function(victims) { + this.container = this.container.merge(victims); + } + }, + + hasCleavage: true, + "cleavage": { + "name": "cleavage", + "container": new Container(), + get description() { + if (this.container.count == 0) + return "Your breasts don't have anyone stuck in them"; + else + return "Your cleavage contains " + this.container.describe(false); + }, + "add": function(victims) { + this.container = this.container.merge(victims); + } + }, + "init": function() { this.stomach.owner = this; this.bowels.owner = this; @@ -418,6 +448,8 @@ var macro = update(["You shudder as ecstasy races up your spine",newline]); if (this.maleParts) { this.maleOrgasm(this); + if (this.sheath.container.count > 0) + sheath_crush(); } if (this.femaleParts) { this.femaleOrgasm(this); @@ -1107,6 +1139,105 @@ function sit() update([sound,line,linesummary,newline]); } +function cleavage_stuff() +{ + var area = macro.handArea; + var prey = getPrey(biome, area); + var line = describe("cleavage-stuff", prey, macro, verbose); + var linesummary = summarize(prey.sum(), false); + + var people = get_living_prey(prey.sum()); + + var sound = "Thump"; + + if (people < 3) { + sound = "Thump!"; + } else if (people < 10) { + sound = "Squish!"; + } else if (people < 50) { + sound = "Smish!"; + } else if (people < 500) { + sound = "SQUISH!"; + } else if (people < 5000) { + sound = "SMISH!"; + } else { + sound = "Oh the humanity!"; + } + macro.arouse(10); + + macro.cleavage.add(prey); + + updateVictims("cleavage",prey); + update([sound,line,linesummary,newline]); +} + +function cleavage_crush() +{ + var prey = macro.cleavage.container; + var line = describe("cleavage-crush", prey, macro, verbose); + var linesummary = summarize(prey.sum(), true); + + var people = get_living_prey(prey.sum()); + + var sound = "Thump"; + + if (people < 3) { + sound = "Thump!"; + } else if (people < 10) { + sound = "Squish!"; + } else if (people < 50) { + sound = "Smish!"; + } else if (people < 500) { + sound = "SQUISH!"; + } else if (people < 5000) { + sound = "SMISH!"; + } else { + sound = "Oh the humanity!"; + } + var preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + macro.arouse((preyMass > 0 ? 20 : 10)); + + updateVictims("cleavagecrushed",prey); + update([sound,line,linesummary,newline]); +} + +function cleavage_drop() +{ + var prey = macro.cleavage.container; + macro.cleavage.container = new Container(); + var line = describe("cleavage-drop", prey, macro, verbose); + var linesummary = summarize(prey.sum(), true); + + var people = get_living_prey(prey.sum()); + + var sound = "Thump"; + + if (people < 3) { + sound = "Thump."; + } else if (people < 10) { + sound = "Splat."; + } else if (people < 50) { + sound = "Thump!"; + } else if (people < 500) { + sound = "THUMP!"; + } else if (people < 5000) { + sound = "SPLAT!!"; + } else { + sound = "Oh the humanity!"; + } + var preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + macro.arouse((preyMass > 0 ? 15 : 5)); + + updateVictims("cleavagedropped",prey); + update([sound,line,linesummary,newline]); +} + function breast_crush() { var area = macro.breastArea; @@ -1266,6 +1397,98 @@ function unbirth() update([sound,line,linesummary,newline]); } +function sheath_stuff() +{ + var area = Math.min(macro.handArea, macro.dickGirth*3); + var prey = getPrey(biome, area); + var line = describe("sheath-stuff", prey, macro, verbose) + var linesummary = summarize(prey.sum(), false); + + 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.sheath.add(prey); + + macro.arouse(15); + + updateVictims("sheath",prey); + update([sound,line,linesummary,newline]); +} + +function sheath_squeeze() +{ + var prey = macro.sheath.container; + var line = describe("sheath-squeeze", prey, macro, verbose) + var linesummary = summarize(prey.sum(), false); + + 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(15); + + update([sound,line,linesummary,newline]); +} + +function sheath_crush() +{ + var prey = macro.sheath.container; + macro.sheath.container = new Container(); + var line = describe("sheath-crush", 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; @@ -1610,6 +1833,7 @@ function pouch_stuff() function pouch_eat() { var prey = macro.pouch.container; + macro.pouch.container = new Container(); var line = describe("pouch-eat", prey, macro, verbose) var linesummary = summarize(prey.sum(), false); @@ -1986,7 +2210,7 @@ function startGame(e) { } if (macro.maleParts) { - victimTypes = victimTypes.concat(["cock","balls"]); + victimTypes = victimTypes.concat(["cock","balls","sheath"]); } else { document.getElementById("action-part-dick").style.display = 'none'; document.getElementById("button-cockslap").style.display = 'none'; @@ -2009,7 +2233,7 @@ function startGame(e) { } if (macro.hasBreasts) { - victimTypes = victimTypes.concat(["breasts"]); + victimTypes = victimTypes.concat(["breasts","cleavage","cleavagecrushed","cleavagedropped"]); if (macro.lactationEnabled) { victimTypes = victimTypes.concat(["flooded"]); } else { @@ -2128,10 +2352,15 @@ window.addEventListener('load', function(event) { victims["bowels"] = initVictims(); victims["digested"] = initVictims(); victims["stomach"] = initVictims(); + victims["cleavage"] = initVictims(); + victims["cleavagecrushed"] = initVictims(); + victims["cleavagedropped"] = initVictims(); victims["breasts"] = initVictims(); victims["breastvored"] = initVictims(); victims["flooded"] = initVictims(); victims["womb"] = initVictims(); + victims["sheath"] = initVictims(); + victims["sheathcrushed"] = initVictims(); victims["cock"] = initVictims(); victims["balls"] = initVictims(); victims["smothered"] = initVictims(); @@ -2150,10 +2379,15 @@ window.addEventListener('load', function(event) { document.getElementById("button-sit").addEventListener("click",sit); document.getElementById("button-tail_slap").addEventListener("click",tail_slap); document.getElementById("button-tail_vore").addEventListener("click",tail_vore); + 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-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-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 a135d59..366533b 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -8,10 +8,16 @@ rules["anal-vore"] = []; rules["tail-slap"] = []; rules["tail-vore"] = []; rules["ass-crush"] = []; +rules["cleavage-stuff"] = []; +rules["cleavage-crush"] = []; +rules["cleavage-drop"] = []; rules["breast-crush"] = []; rules["breast-vore"] = []; rules["breast-milk"] = []; rules["unbirth"] = []; +rules["sheath-stuff"] = []; +rules["sheath-squeeze"] = []; +rules["sheath-crush"] = []; rules["cock-vore"] = []; rules["cockslap"] = []; rules["ball-smother"] = []; @@ -124,10 +130,16 @@ function describeDefault(action, container, macro, verbose=true) { case "ass-crush": return defaultAssCrush(container, macro, verbose); case "tail-slap": return defaultTailSlap(container, macro, verbose); case "tail-vore": return defaultTailVore(container, macro, verbose); + 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 "breast-crush": return defaultBreastCrush(container, macro, verbose); case "breast-vore": return defaultBreastVore(container, macro, verbose); case "breast-milk": return defaultBreastMilk(container, macro, verbose); case "unbirth": return defaultUnbirth(container, macro, verbose); + 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 "cock-vore": return defaultCockVore(container, macro, verbose); case "cockslap": return defaultCockslap(container, macro, verbose); case "ball-smother": return defaultBallSmother(container, macro, verbose); @@ -197,6 +209,26 @@ function defaultTailVore(container, macro, verbose) { + ". " + (macro.tailCount > 1 ? "They" : "It") + " scarf down everything in a second, gulping forcefully and pulling everything into your belly."; } +function defaultCleavageStuff(container, macro, verbose) { + return "You snatch up " + container.describe(verbose) + " and stuff " + (container.count > 1 ? "them" : "it") + " into your cleavage."; +} + +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) + "."; + else if (isFatal(macro)) + return "You grasp your breasts and forcefully shove them together, crushing " + container.describe(verbose) + "."; + else + return "You grasp your breasts and squish them together, smooshing " + container.describe(verbose) + "."; +} + +function defaultCleavageDrop(container, macro, verbose) { + 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."; + else + return "You pull your breasts apart far enough for the " + container.describe(verbose) + " trapped within to fall out."; +} + function defaultBreastCrush(container, macro, verbose) { if (isFatal(macro)) return "Your heavy breasts obliterate " + container.describe(verbose) + ". "; @@ -220,6 +252,33 @@ function defaultUnbirth(container, macro, verbose) { return "You gasp as you slide " + container.describe(verbose) + " up your slit. "; } +function defaultSheathStuff(container, macro, verbose) { + return "You pluck " + container.describe(verbose) + " from the ground and slip them into your musky sheath."; +} + +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."; + } else { + return "Trembling with your impending orgasm, your fingers play over your sheath, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock."; + } +} + +function defaultSheathCrush(container, macro, verbose) { + if (isGory(macro)) + return "Your powerful orgasm causes your throbbing " + macro.describeDick + " cock to swell and crush the life from everything in your sheath, reducing " + container.describe(false) + " to a gory paste that slickens your spurting shaft."; + else if (isFatal(macro)) + return "Your orgasm causes your " + macro.describeDick + " shaft to throb and swell, smashing " + container.describe(false) + " trapped in your musky sheath."; + else + return "Your orgasm causes your " + macro.describeDick + " cock to swell, squeezing " + container.describe(false) + " out from your sheath."; +} + 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 df3b2ae..cc8d144 100644 --- a/stroll.html +++ b/stroll.html @@ -101,6 +101,9 @@
+ + + @@ -109,6 +112,8 @@
+ +