| @@ -785,6 +785,49 @@ let macro = | |||||
| "stages" : 2 | "stages" : 2 | ||||
| }, | }, | ||||
| "gooEnabled": true, | |||||
| "gooMolten": false, | |||||
| "goo": { | |||||
| "name" : "goo", | |||||
| "setup": function(owner) { | |||||
| this.owner = owner; | |||||
| for (let i = 0; i < this.stages; i++) | |||||
| this.contents.push(new Container()); | |||||
| owner.digest(owner,this); | |||||
| }, | |||||
| "feed": function(prey) { | |||||
| this.feedFunc(prey,this,this.owner); | |||||
| }, | |||||
| "feedFunc": function(prey,self,owner) { | |||||
| this.contents[0] = this.contents[0].merge(prey); | |||||
| }, | |||||
| "describeDigestion": function(container) { | |||||
| return describe("goo",container,this.owner,verbose); | |||||
| }, | |||||
| "fill": function(owner,container) { | |||||
| }, | |||||
| get description() { | |||||
| let prey = new Container(); | |||||
| this.contents.forEach(function(x) { | |||||
| prey = prey.merge(x); | |||||
| }); | |||||
| if (prey.count == 0) { | |||||
| return "You contain no prey."; | |||||
| } else { | |||||
| if (macro.gooDigestion > 0) { | |||||
| return "Your gooey body contains " + prey.describe(false) + ", gradually absorbing them into your bulk."; | |||||
| } else { | |||||
| return "Your gooey body contains " + prey.describe(false) + "."; | |||||
| } | |||||
| } | |||||
| }, | |||||
| "contents" : [], | |||||
| "stages" : 4 | |||||
| }, | |||||
| // holding spots | // holding spots | ||||
| hasPouch: true, | hasPouch: true, | ||||
| @@ -1487,11 +1530,11 @@ function summarize(sum, fatal = true) | |||||
| let word; | let word; | ||||
| let count = get_living_prey(sum); | let count = get_living_prey(sum); | ||||
| if (fatal && macro.brutality > 0) | if (fatal && macro.brutality > 0) | ||||
| word = count > 1 ? "kills" : "kill"; | |||||
| word = count == 1 ? "kills" : "kill"; | |||||
| else if (!fatal && macro.brutality > 0) | else if (!fatal && macro.brutality > 0) | ||||
| word = "prey"; | word = "prey"; | ||||
| else | else | ||||
| word = count > 1 ? "victims" : "victim"; | |||||
| word = count == 1 ? "victims" : "victim"; | |||||
| return "<b>(" + count + " " + word + ")</b>"; | return "<b>(" + count + " " + word + ")</b>"; | ||||
| } | } | ||||
| @@ -2820,6 +2863,42 @@ function scat(vol) { | |||||
| macro.arouse(50); | macro.arouse(50); | ||||
| } | } | ||||
| function melt() | |||||
| { | |||||
| macro.gooMolten = true; | |||||
| let line = describe("melt", new Container(), macro, verbose); | |||||
| update([line, newline]); | |||||
| } | |||||
| function solidify() | |||||
| { | |||||
| let prey = new Container(); | |||||
| macro.goo.contents.forEach(function(x) { | |||||
| prey = prey.merge(x); | |||||
| }); | |||||
| let line = describe("solidify", prey, macro, verbose); | |||||
| let linesummary = summarize(prey.sum(), true); | |||||
| let people = get_living_prey(prey.sum()); | |||||
| let preyMass = prey.sum_property("mass"); | |||||
| let sound = getSound("insert",preyMass); | |||||
| macro.gooMolten = false; | |||||
| if (macro.gooDigest) { | |||||
| update([sound, line, linesummary, newline]); | |||||
| } else { | |||||
| update([sound, line, newline]); | |||||
| } | |||||
| } | |||||
| function transformNumbers(line) | function transformNumbers(line) | ||||
| { | { | ||||
| return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers); }); | return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers); }); | ||||
| @@ -23,7 +23,7 @@ var actions = ["eat","chew","stomp","stomp-wedge","flex-toes","kick","anal-vore" | |||||
| "female-orgasm","grind","pouch-stuff","pouch-rub","pouch-eat","pouch-absorb","soul-vore","soul-absorb-paw", | "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", | "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", | "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",""]; | |||||
| "sheath-toy","slit-toy","breast-toy","melt","solidify"]; | |||||
| for (let i=0; i<actions.length; i++) { | for (let i=0; i<actions.length; i++) { | ||||
| rules[actions[i]] = []; | rules[actions[i]] = []; | ||||
| @@ -750,6 +750,21 @@ function defaultScat(container, macro, verbose) { | |||||
| } | } | ||||
| } | } | ||||
| function defaultMelt(container, macro, verbose) { | |||||
| return "Your body turns gooey."; | |||||
| } | |||||
| function defaultSolidify(container, macro, verbose) { | |||||
| if (container.count == 0) { | |||||
| return "Your body turns solid."; | |||||
| } else if (macro.gooDigest > 0) { | |||||
| return "Your body turns solid, pushing out " + container.describe(verbose); | |||||
| } else { | |||||
| return "Your body turns solid, swiftly absorbing" + container.describe(verbose); | |||||
| } | |||||
| } | |||||
| // EATING | // EATING | ||||
| rules["eat"].push({ | rules["eat"].push({ | ||||
| @@ -270,9 +270,11 @@ | |||||
| <p>Stroll is a text-based macro game. Stomp things, eat things, abuse things - then grow larger and do it all over again. </p> | <p>Stroll is a text-based macro game. Stomp things, eat things, abuse things - then grow larger and do it all over again. </p> | ||||
| <p>Build your Character (leave blank for reasonable normal-scale defaults)</p> | |||||
| <p>Build your Character</p> | |||||
| <p>Leave a box empty for a sane default value</p> | |||||
| <p>Lengths in meters, areas in square meters, masses in kilograms</p> | <p>Lengths in meters, areas in square meters, masses in kilograms</p> | ||||
| <p>Click on highlight/darkened titles to enable and disabled features.</p> | |||||
| <p>(but you can preview the customary value)</p> | |||||
| <p>Click on highlight/darkened titles to enable and disable features.</p> | |||||
| <div id="custom-species"> | <div id="custom-species"> | ||||
| @@ -875,7 +877,13 @@ | |||||
| <div class="custom-category"> | <div class="custom-category"> | ||||
| <input autocomplete="off" class="custom-header-checkbox" type="checkbox" id="gooEnabled" name="gooEnabled" /> | <input autocomplete="off" class="custom-header-checkbox" type="checkbox" id="gooEnabled" name="gooEnabled" /> | ||||
| <label class="custom-header" for="gooEnabled">Goo (not in yet)</label> | |||||
| <label class="custom-header" for="gooEnabled">Goo</label> | |||||
| <div class="reveal-if-active"> | |||||
| <li> | |||||
| <input autocomplete="off" checked="true" type="checkbox" id="gooDigests" name="gooDigests" /> | |||||
| <label class="has-tooltip" for="scatScaleWithSize" title="If checked, produces more scat from the same prey as you get larger">Digestion</label> | |||||
| </li> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </ul> | </ul> | ||||
| </form> | </form> | ||||