From 7111e3fd66464a83c836bcf2d6bcdcfe4bcad911 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Thu, 22 Feb 2018 18:25:52 -0500 Subject: [PATCH] Added tails and tailmaws --- game.js | 130 ++++++++++++++++++++++++++++++++++++++++++++-- recursive-desc.js | 21 ++++++++ stroll.html | 32 +++++++++++- 3 files changed, 177 insertions(+), 6 deletions(-) diff --git a/game.js b/game.js index 8f9fcc2..10d5f8b 100644 --- a/game.js +++ b/game.js @@ -36,6 +36,32 @@ var macro = "assScale": 1, + "tailType": "slinky", + "tailCount": 1, + "baseTailLength": 1, + "baseTailDiameter": 0.1, + "tailDensity": 250, + "tailScale": 1, + "tailMaw": false, + + get tailLength() { + return this.scaling(this.baseTailLength * this.tailScale, this.scale, 1); + }, + get tailDiameter() { + return this.scaling(this.baseTailDiameter * this.tailScale, this.scale, 1); + }, + get tailGirth() { + return Math.pow(this.tailDiameter/2,2) * Math.PI; + }, + get tailArea() { + return this.tailLength * this.tailDiameter; + }, + get tailVolume() { + return this.tailGirth * this.tailLength; + }, + get tailMass() { + return this.tailVolume * this.tailDensity; + }, "dickType": "canine", "baseDickLength": 0.3, "baseDickDiameter": 0.08, @@ -434,6 +460,11 @@ var macro = return result; }, + get describeTail() { + return (this.tailCount > 1 ? this.tailCount + " " : "") + length(this.tailLength, unit, true) + "-long " + this.tailType; + }, + + get describeDick() { state = ""; if (!this.arousalEnabled) { @@ -453,7 +484,7 @@ var macro = state = "erect, throbbing, pre-soaked"; } } - return length(macro.dickLength, unit, true) + " long " + state + " " + macro.dickType; + return length(this.dickLength, unit, true) + " long " + state + " " + this.dickType; }, get describeVagina() { @@ -476,7 +507,7 @@ var macro = } } - return length(macro.vaginaLength, unit, true) + " long " + state + return length(this.vaginaLength, unit, true) + " long " + state }, "growthPoints": 0, @@ -1230,6 +1261,77 @@ function female_orgasm(vol) update([sound,line,linesummary,newline]); } +function tail_slap() +{ + var area = macro.tailArea * macro.tailCount; + var prey = getPrey(biome, area); + var line = describe("tail-slap", 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 = "Crunch!"; + } else if (people < 500) { + sound = "CRUNCH!"; + } else if (people < 5000) { + sound = "CRRUUUNCH!!"; + } else { + sound = "Oh the humanity!"; + } + var preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + macro.arouse(5); + + updateVictims("tailslapped",prey); + update([sound,line,linesummary,newline]); +} + +function tail_vore() +{ + var area = macro.tailGirth * macro.tailCount; + var prey = getPrey(biome, area); + var line = describe("tail-vore", prey, macro, verbose) + var linesummary = summarize(prey.sum(), true); + + var people = get_living_prey(prey.sum()); + + var sound = ""; + if (people == 0) { + sound = ""; + } else if (people < 3) { + sound = "Ulp."; + } else if (people < 10) { + sound = "Gulp."; + } else if (people < 50) { + sound = "Glrrp."; + } else if (people < 500) { + sound = "Glrrrpkh!"; + } else if (people < 5000) { + sound = "GLRRKPKH!"; + } else { + sound = "Oh the humanity!"; + } + var preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + macro.arouse(5); + + macro.stomach.feed(prey); + + updateVictims("tailmaw'd",prey); + update([sound,line,linesummary,newline]); +} + function transformNumbers(line) { return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers); }); @@ -1540,12 +1642,28 @@ function startGame(e) { } } + if (!macro.hasTail) { + macro.tailCount = 0; + } + document.getElementById("log-area").style.display = 'inline'; document.getElementById("option-panel").style.display = 'none'; document.getElementById("action-panel").style.display = 'flex'; victimTypes = ["stomped","digested","stomach","bowels","ground"]; + if (macro.tailCount > 0) { + victimTypes = victimTypes.concat(["tailslapped"]); + if (macro.tailMaw) { + victimTypes = victimTypes.concat(["tailmaw'd"]); + } else { + document.getElementById("button-tail_vore").style.display = 'none'; + } + } else { + document.getElementById("button-tail_slap").style.display = 'none'; + document.getElementById("button-tail_vore").style.display = 'none'; + } + if (macro.maleParts) { victimTypes = victimTypes.concat(["cock","balls"]); } else { @@ -1630,9 +1748,11 @@ function startGame(e) { window.addEventListener('load', function(event) { victims["stomped"] = initVictims(); + victims["tailslapped"] = initVictims(); + victims["tailmaw'd"] = initVictims(); + victims["bowels"] = initVictims(); victims["digested"] = initVictims(); victims["stomach"] = initVictims(); - victims["bowels"] = initVictims(); victims["breasts"] = initVictims(); victims["womb"] = initVictims(); victims["cock"] = initVictims(); @@ -1644,13 +1764,15 @@ window.addEventListener('load', function(event) { document.getElementById("button-look").addEventListener("click",look); document.getElementById("button-feed").addEventListener("click",feed); document.getElementById("button-stomp").addEventListener("click",stomp); + document.getElementById("button-anal_vore").addEventListener("click",anal_vore); + document.getElementById("button-tail_slap").addEventListener("click",tail_slap); + document.getElementById("button-tail_vore").addEventListener("click",tail_vore); document.getElementById("button-breast_crush").addEventListener("click",breast_crush); document.getElementById("button-unbirth").addEventListener("click",unbirth); 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); document.getElementById("button-grind").addEventListener("click",grind); - document.getElementById("button-anal_vore").addEventListener("click",anal_vore); document.getElementById("button-stroll").addEventListener("click",toggle_auto); document.getElementById("button-location").addEventListener("click",change_location); document.getElementById("button-numbers").addEventListener("click",toggle_numbers); diff --git a/recursive-desc.js b/recursive-desc.js index f5789ed..7022596 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -4,6 +4,8 @@ rules["eat"] = []; rules["stomp"] = []; rules["kick"] = []; rules["anal-vore"] = []; +rules["tail-slap"] = []; +rules["tail-vore"] = []; rules["ass-crush"] = []; rules["breast-crush"] = []; rules["unbirth"] = []; @@ -113,6 +115,8 @@ function describeDefault(action, container, macro, verbose=true) { case "kick": return defaultKick(container, macro, verbose); case "anal-vore": return defaultAnalVore(container, macro, verbose); 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 "breast-crush": return defaultBreastCrush(container, macro, verbose); case "unbirth": return defaultUnbirth(container, macro, verbose); case "cock-vore": return defaultCockVore(container, macro, verbose); @@ -158,6 +162,23 @@ function defaultAssCrush(container, macro, verbose) { return "You sit on " + container.describe(verbose); } +function defaultTailSlap(container, macro, verbose) { + if (isFatal(macro)) + return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails swing" : " tail swings") + " into " + container.describe(verbose) + ", smashing everything in " + + (macro.tailCount > 1 ? "their" : "its") + " path."; + else + return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails slap" : " tail slaps") + " against " + container.describe(verbose) + ", bowling them over."; +} + +function defaultTailVore(container, macro, verbose) { + if (isFatal(macro)) + return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails lunge, maws agape, " : " tail lunges, maw agape, ") + "at " + container.describe(verbose) + + ". " + (macro.tailCount > 1 ? "They" : "It") + " scarf down everything in a second, gulping forcefully to drag your prey into your sloppy guts."; + else + return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails lunge, maws agape, " : " tail lunges, maw agape, ") + "at " + container.describe(verbose) + + ". " + (macro.tailCount > 1 ? "They" : "It") + " scarf down everything in a second, gulping forcefully and pulling everything into your belly."; +} + function defaultBreastCrush(container, macro, verbose) { if (isFatal(macro)) return "Your heavy breasts obliterate " + container.describe(verbose) + ". "; diff --git a/stroll.html b/stroll.html index ef3ad17..69c542d 100644 --- a/stroll.html +++ b/stroll.html @@ -72,6 +72,8 @@ + + @@ -89,7 +91,7 @@
-

Welcome to Stroll 0.4.1

+

Welcome to Stroll 0.4.2

This game features 18+ content

Changelog
@@ -169,12 +171,38 @@

+
+ Tail(s):
+
+
+
  • + +
    +
  • +
  • + +
    +
  • +
  • + +
    +
  • +
  • + +
    +
  • +
  • + +
    +
  • +
    +
    Male genitals:

  • - +