| @@ -2955,8 +2955,8 @@ function setButton(button, state) { | |||
| function gooButtons(molten) { | |||
| setButton("melt", !molten); | |||
| setButton("solidify", molten); | |||
| setButton("push-stomach", molten); | |||
| setButton("pull-stomach", molten); | |||
| setButton("goo_stomach_pull", molten); | |||
| setButton("goo_stomach_push", molten); | |||
| } | |||
| function melt() | |||
| @@ -2999,6 +2999,55 @@ function solidify() | |||
| } | |||
| } | |||
| function vomit() { | |||
| let prey = new Container(); | |||
| for (let i = 0; i < macro.stomach.contents.length; i++) { | |||
| prey = prey.merge(macro.stomach.contents[i]); | |||
| macro.stomach.contents[i] = new Container(); | |||
| } | |||
| let line = describe("vomit", prey, macro, verbose); | |||
| let linesummary = summarize(prey.sum(), true); | |||
| let preyMass = prey.sum_property("mass"); | |||
| let sound = getSound("vomit", preyMass); | |||
| update([sound, line, linesummary, newline]); | |||
| add_victim_people("vomit", prey); | |||
| } | |||
| function move_prey(from, to) { | |||
| let prey = new Container(); | |||
| for (let i = 0; i < from.contents.length; i++) { | |||
| prey = prey.merge(from.contents[i]); | |||
| from.contents[i] = new Container(); | |||
| } | |||
| to.feed(prey); | |||
| return prey; | |||
| } | |||
| function goo_stomach_pull() { | |||
| let prey = move_prey(macro.stomach, macro.goo); | |||
| let line = describe("goo-stomach-pull", prey, macro, verbose); | |||
| let linesummary = summarize(prey.sum(), false); | |||
| let preyMass = prey.sum_property("mass"); | |||
| let sound = getSound("goo", preyMass); | |||
| update([sound, line, linesummary, newline]); | |||
| } | |||
| function goo_stomach_push() { | |||
| let prey = move_prey(macro.goo, macro.stomach); | |||
| let line = describe("goo-stomach-push", prey, macro, verbose); | |||
| let linesummary = summarize(prey.sum(), false); | |||
| let preyMass = prey.sum_property("mass"); | |||
| let sound = getSound("goo", preyMass); | |||
| update([sound, line, linesummary, newline]); | |||
| } | |||
| function transformNumbers(line) | |||
| { | |||
| @@ -3356,6 +3405,11 @@ function startGame(e) { | |||
| enable_button("feed"); | |||
| enable_button("stomp"); | |||
| if (macro.vomitEnabled) { | |||
| enable_button("vomit"); | |||
| enable_victim("vomit"); | |||
| } | |||
| if (macro.footType != "hoof") | |||
| enable_button("flex_toes"); | |||
| @@ -16,14 +16,14 @@ function getDefault(name) { | |||
| return window[funcName]; | |||
| } | |||
| var actions = ["eat","chew","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", | |||
| "cleavage-stuff","cleavage-crush","cleavage-drop","cleavage-absorb","breast-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", | |||
| "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", | |||
| "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","melt","solidify","stomp-goo","goo-digest","ass-goo"]; | |||
| "sheath-toy","slit-toy","breast-toy","melt","solidify","stomp-goo","goo-digest","ass-goo","goo-stomach-pull","goo-stomach-push"]; | |||
| for (let i=0; i<actions.length; i++) { | |||
| rules[actions[i]] = []; | |||
| @@ -140,6 +140,20 @@ function defaultChew(container, macro, verbose) { | |||
| } | |||
| } | |||
| function defaultVomit(container, macro, verbose) { | |||
| if (container.count == 0) { | |||
| return "You retch, but nothing happens."; | |||
| } else if (isSadistic(macro)) { | |||
| return "You gag and lean over, vomiting up " + container.describe(false) + ". A thick, hissing slurry of molten meat and acid drenches your still-writhing prey, searing flesh and ensuring their wretched, rancid deaths."; | |||
| } else if (isGory(macro)) { | |||
| return "You retch and vomit up " + container.describe(false) + ", spewing them out amidst a thick slurry of chyme and leaving them to melt."; | |||
| } else if (isFatal(macro)) { | |||
| return "You vomit up " + container.describe(false) + ", leaving them to stew in your stomach juices."; | |||
| } else { | |||
| return "You hack up " + container.describe(false) + "."; | |||
| } | |||
| } | |||
| function defaultStomp(container, macro, verbose) { | |||
| if (container.count == 0) | |||
| return "Your " + macro.footDesc() + " thumps the ground."; | |||
| @@ -784,6 +798,14 @@ function defaultGooDigest(container, macro, verbose) { | |||
| return "Your goopy depths dissolve " + container.describe(false) + "."; | |||
| } | |||
| function defaultGooStomachPull(container, macro, verbose) { | |||
| return "Your molten depths squeeze in around the " + container.describe(false) + " imprisoned in your stomach, drawing them into the viscous goo."; | |||
| } | |||
| function defaultGooStomachPush(container, macro, verobse) { | |||
| return "Your churning goo herds " + container.describe(false) + " into your churning stomach."; | |||
| } | |||
| // EATING | |||
| rules["eat"].push({ | |||
| @@ -12,7 +12,9 @@ let sounds = { | |||
| "digest": | |||
| ["Grrgle.","Grrrrgle","Grrrrlglorp.","GrrrrGLRRRLPH!","GRRRRRLGPRLHK!"], | |||
| "goo": | |||
| ["Splat.", "Squish.", "Squish!", "SQLCH!", "SQLLLLRCH!", "SQQQQUEEEEELLCH!"] | |||
| ["Splat.", "Squish.", "Squish!", "SQLCH!", "SQLLLLRCH!", "SQQQQUEEEEELLCH!"], | |||
| "vomit": | |||
| ["Hurk.", "Hurrk.", "Bleugh.", "Bleugh!", "Bleeeugh!", "BLEEEUGHK!"] | |||
| }; | |||
| function pickByMass(list, mass) { | |||
| @@ -230,6 +230,7 @@ | |||
| <div class="action-tab" id="actions-body"> | |||
| <button class="action-button" id="button-action-feed">Eat</button> | |||
| <button class="action-button" id="button-action-chew">Chew</button> | |||
| <button class="action-button" id="button-action-vomit">Vomit</button> | |||
| <button class="action-button" id="button-action-stomp">Stomp</button> | |||
| <button class="action-button" id="button-action-flex_toes">Flex Toes</button> | |||
| <button class="action-button" id="button-action-sit">Sit</button> | |||
| @@ -298,8 +299,8 @@ | |||
| <div class="action-tab" id="actions-goo"> | |||
| <button class="action-button" id="button-action-solidify">Solidify</button> | |||
| <button class="action-button" id="button-action-melt">Melt</button> | |||
| <button class="action-button" id="button-action-push-stomach">Push to Stomach</button> | |||
| <button class="action-button" id="button-action-pull-stomach">Pull from Stomach</button> | |||
| <button class="action-button" id="button-action-goo_stomach_push">Push to Stomach</button> | |||
| <button class="action-button" id="button-action-goo_stomach_pull">Pull from Stomach</button> | |||
| </div> | |||
| <div class="action-tab" id="actions-misc"> | |||
| @@ -478,6 +479,10 @@ | |||
| <input autocomplete="off" type="checkbox" checked="true" name="sameSizeStomp" id="sameSizeStomp"/> | |||
| <label class="has-tooltip" for="sameSizeStomp" title="Can you stomp and sit on people your own size?">Same-size stomper</label> | |||
| </li> | |||
| <li> | |||
| <input autocomplete="off" type="checkbox" name="vomitEnabled" id="vomitEnabled"/> | |||
| <label for="vomitEnabled">Vomiting</label> | |||
| </li> | |||
| <li> | |||
| <label for="footType">Foot type</label> | |||
| <select name="footType"> | |||