| @@ -21,10 +21,12 @@ let strolling = false; | |||||
| let unit = "metric"; | let unit = "metric"; | ||||
| let numbers = "full"; | |||||
| let numbers = "words"; | |||||
| let verbose = true; | let verbose = true; | ||||
| let autoVerbose = true; | |||||
| let biome = "city"; | let biome = "city"; | ||||
| let newline = " "; | let newline = " "; | ||||
| @@ -1052,7 +1054,7 @@ let macro = | |||||
| if (self.cumStorage.amount > self.cumStorage.limit) | if (self.cumStorage.amount > self.cumStorage.limit) | ||||
| self.arouse(1 * (self.cumStorage.amount / self.cumStorage.limit - 1)); | self.arouse(1 * (self.cumStorage.amount / self.cumStorage.limit - 1)); | ||||
| setTimeout(function () { self.fillCum(self); }, 100); | setTimeout(function () { self.fillCum(self); }, 100); | ||||
| update(); | |||||
| `update`(); | |||||
| }, | }, | ||||
| "fillFemcum": function(self) { | "fillFemcum": function(self) { | ||||
| @@ -2796,14 +2798,35 @@ function tail_vore(count) | |||||
| { | { | ||||
| let lines = []; | let lines = []; | ||||
| let totalPrey = new Container(); | let totalPrey = new Container(); | ||||
| for (let i=0; i<count; i++) { | |||||
| if (count <= 3) { | |||||
| for (let i=0; i<count; i++) { | |||||
| let area = macro.tailStretchGirth; | |||||
| let prey = getPrey(biome, area, macro.sameSizeVore); | |||||
| totalPrey = totalPrey.merge(prey); | |||||
| let line = describe("tail-vore", prey, macro, verbose); | |||||
| lines.push(line); | |||||
| } | |||||
| } else { | |||||
| let area = macro.tailStretchGirth; | let area = macro.tailStretchGirth; | ||||
| let prey = getPrey(biome, area, macro.sameSizeVore); | |||||
| totalPrey = totalPrey.merge(prey); | |||||
| let line = describe("tail-vore", prey, macro, verbose); | |||||
| let i = 0; | |||||
| for (i = 0; i < 10 && i < count; i++) { | |||||
| let prey = getPrey(biome, area, macro.sameSizeVore); | |||||
| for (var key in prey.contents) { | |||||
| if (prey.contents.hasOwnProperty(key)) { | |||||
| prey.contents[key].multiply(Math.ceil((count - i) / 10)); | |||||
| } | |||||
| } | |||||
| totalPrey = totalPrey.merge(prey); | |||||
| } | |||||
| console.log(i + ", " + area + ", " + area * i); | |||||
| let line = describe("tails-vore", totalPrey, macro, verbose).replace("$COUNT", number(count, numbers)); | |||||
| lines.push(line); | lines.push(line); | ||||
| } | } | ||||
| let linesummary = summarize(totalPrey.sum(), false); | let linesummary = summarize(totalPrey.sum(), false); | ||||
| lines.push(linesummary); | lines.push(linesummary); | ||||
| @@ -3655,15 +3678,28 @@ function update(lines = []) | |||||
| { | { | ||||
| let log = document.getElementById("log"); | let log = document.getElementById("log"); | ||||
| let oldHeight = log.scrollHeight; | |||||
| lines.forEach(function (x) { | lines.forEach(function (x) { | ||||
| let line = document.createElement('div'); | let line = document.createElement('div'); | ||||
| line.innerHTML = transformNumbers(x); | line.innerHTML = transformNumbers(x); | ||||
| log.appendChild(line); | log.appendChild(line); | ||||
| }); | }); | ||||
| if (lines.length > 0) | |||||
| if (lines.length > 0) { | |||||
| log.scrollTop = log.scrollHeight; | log.scrollTop = log.scrollHeight; | ||||
| let deltaHeight = log.scrollHeight - oldHeight; | |||||
| if (deltaHeight / window.innerHeight >= 0.2 && verbose && autoVerbose) { | |||||
| update(["Switching to simple text!", newline]); | |||||
| autoVerbose = false; | |||||
| toggle_verbose(); | |||||
| } | |||||
| } | |||||
| document.getElementById("height").innerHTML = "Height: " + transformNumbers(length(macro.height, unit)); | document.getElementById("height").innerHTML = "Height: " + transformNumbers(length(macro.height, unit)); | ||||
| document.getElementById("mass").innerHTML = "Mass: " + transformNumbers(mass(macro.totalMass, unit)); | document.getElementById("mass").innerHTML = "Mass: " + transformNumbers(mass(macro.totalMass, unit)); | ||||
| @@ -20,7 +20,7 @@ function getDefault(name) { | |||||
| return window[funcName]; | return window[funcName]; | ||||
| } | } | ||||
| var actions = ["eat","chew","vomit","stomp","stomp-wedge","flex-toes","kick","anal-vore","ass-crush","tail-slap","tail-vore", | |||||
| var actions = ["eat","chew","vomit","stomp","stomp-wedge","flex-toes","kick","anal-vore","ass-crush","tail-slap","tail-vore","tails-vore", | |||||
| "cleavage-stuff","cleavage-crush","cleavage-drop","cleavage-absorb","breast-crush", | "cleavage-stuff","cleavage-crush","cleavage-drop","cleavage-absorb","breast-crush", | ||||
| "breast-vore","breast-milk","unbirth","sheath-stuff","sheath-clench","sheath-crush", | "breast-vore","breast-milk","unbirth","sheath-stuff","sheath-clench","sheath-crush", | ||||
| "sheath-absorb","cock-vore","cockslap","ball-smother","male-spurt","male-orgasm","female-spurt", | "sheath-absorb","cock-vore","cockslap","ball-smother","male-spurt","male-orgasm","female-spurt", | ||||
| @@ -255,6 +255,17 @@ function defaultTailVore(container, macro, verbose) { | |||||
| ". It scarfs down everything in a second, gulping forcefully and pulling your prey inside."; | ". It scarfs down everything in a second, gulping forcefully and pulling your prey inside."; | ||||
| } | } | ||||
| function defaultTailsVore(container, macro, verbose) { | |||||
| if (container.count == 0) | |||||
| return "Your drooling tails swing to and fro"; | |||||
| else if (isFatal(macro)) | |||||
| return "Your $COUNT tails lunge, maws agape, at " + container.describe(verbose) + | |||||
| ". They scarf down everything in seconds, gulping forcefully to drag your prey into your sloppy confines."; | |||||
| else | |||||
| return "Your $COUNT tails lunge, maws agape, at " + container.describe(verbose) + | |||||
| ". They scarf down your prey, gulping forcefully and pulling them deep inside."; | |||||
| } | |||||
| function defaultCleavageStuff(container, macro, verbose) { | function defaultCleavageStuff(container, macro, verbose) { | ||||
| if (container.count == 0) | if (container.count == 0) | ||||
| return "You can't fit anything into your cleavage right now."; | return "You can't fit anything into your cleavage right now."; | ||||
| @@ -384,6 +384,18 @@ function distribution(min, max, samples) { | |||||
| return result; | return result; | ||||
| } | } | ||||
| function defaultMultiply(thing) { | |||||
| return function(amount) { | |||||
| thing.count *= amount; | |||||
| for (var key in thing.contents) { | |||||
| if (thing.contents.hasOwnProperty(key)) { | |||||
| thing.contents[key].multiply(amount); | |||||
| } | |||||
| } | |||||
| }; | |||||
| } | |||||
| function defaultArea(thing) { | function defaultArea(thing) { | ||||
| return areas[thing.name]; | return areas[thing.name]; | ||||
| } | } | ||||
| @@ -429,6 +441,7 @@ function listSum(sum) { | |||||
| return merge_things(result); | return merge_things(result); | ||||
| } | } | ||||
| function defaultSum(thing) { | function defaultSum(thing) { | ||||
| return function() { | return function() { | ||||
| var counts = {}; | var counts = {}; | ||||
| @@ -486,6 +499,7 @@ function DefaultEntity() { | |||||
| this.mass = defaultMass; | this.mass = defaultMass; | ||||
| this.sum_property = defaultSumProperty; | this.sum_property = defaultSumProperty; | ||||
| this.merge = defaultMerge; | this.merge = defaultMerge; | ||||
| this.multiply = defaultMultiply; | |||||
| return this; | return this; | ||||
| } | } | ||||
| @@ -324,7 +324,7 @@ | |||||
| <div class="action-tab" id="actions-options"> | <div class="action-tab" id="actions-options"> | ||||
| <button class="stat-button" id="button-arousal">Arousal On</button> | <button class="stat-button" id="button-arousal">Arousal On</button> | ||||
| <button class="stat-button" id="button-stroll">Status: Standing</button> | <button class="stat-button" id="button-stroll">Status: Standing</button> | ||||
| <button class="stat-button" id="button-numbers">Numbers: Full</button> | |||||
| <button class="stat-button" id="button-numbers">Numbers: Words</button> | |||||
| <button class="stat-button" id="button-units">Units: Metric</button> | <button class="stat-button" id="button-units">Units: Metric</button> | ||||
| <button class="stat-button" id="button-verbose">Verbose Text</button> | <button class="stat-button" id="button-verbose">Verbose Text</button> | ||||
| <button class="stat-button" id="button-dark-mode-game">Toggle Dark Mode</button> | <button class="stat-button" id="button-dark-mode-game">Toggle Dark Mode</button> | ||||