| @@ -2955,8 +2955,8 @@ function setButton(button, state) { | |||||
| function gooButtons(molten) { | function gooButtons(molten) { | ||||
| setButton("melt", !molten); | setButton("melt", !molten); | ||||
| setButton("solidify", molten); | setButton("solidify", molten); | ||||
| setButton("push-stomach", molten); | |||||
| setButton("pull-stomach", molten); | |||||
| setButton("goo_stomach_pull", molten); | |||||
| setButton("goo_stomach_push", molten); | |||||
| } | } | ||||
| function melt() | 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) | function transformNumbers(line) | ||||
| { | { | ||||
| @@ -3356,6 +3405,11 @@ function startGame(e) { | |||||
| enable_button("feed"); | enable_button("feed"); | ||||
| enable_button("stomp"); | enable_button("stomp"); | ||||
| if (macro.vomitEnabled) { | |||||
| enable_button("vomit"); | |||||
| enable_victim("vomit"); | |||||
| } | |||||
| if (macro.footType != "hoof") | if (macro.footType != "hoof") | ||||
| enable_button("flex_toes"); | enable_button("flex_toes"); | ||||
| @@ -16,14 +16,14 @@ function getDefault(name) { | |||||
| return window[funcName]; | 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", | "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", | ||||
| "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","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++) { | for (let i=0; i<actions.length; i++) { | ||||
| rules[actions[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) { | function defaultStomp(container, macro, verbose) { | ||||
| if (container.count == 0) | if (container.count == 0) | ||||
| return "Your " + macro.footDesc() + " thumps the ground."; | return "Your " + macro.footDesc() + " thumps the ground."; | ||||
| @@ -784,6 +798,14 @@ function defaultGooDigest(container, macro, verbose) { | |||||
| return "Your goopy depths dissolve " + container.describe(false) + "."; | 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 | // EATING | ||||
| rules["eat"].push({ | rules["eat"].push({ | ||||
| @@ -12,7 +12,9 @@ let sounds = { | |||||
| "digest": | "digest": | ||||
| ["Grrgle.","Grrrrgle","Grrrrlglorp.","GrrrrGLRRRLPH!","GRRRRRLGPRLHK!"], | ["Grrgle.","Grrrrgle","Grrrrlglorp.","GrrrrGLRRRLPH!","GRRRRRLGPRLHK!"], | ||||
| "goo": | "goo": | ||||
| ["Splat.", "Squish.", "Squish!", "SQLCH!", "SQLLLLRCH!", "SQQQQUEEEEELLCH!"] | |||||
| ["Splat.", "Squish.", "Squish!", "SQLCH!", "SQLLLLRCH!", "SQQQQUEEEEELLCH!"], | |||||
| "vomit": | |||||
| ["Hurk.", "Hurrk.", "Bleugh.", "Bleugh!", "Bleeeugh!", "BLEEEUGHK!"] | |||||
| }; | }; | ||||
| function pickByMass(list, mass) { | function pickByMass(list, mass) { | ||||
| @@ -230,6 +230,7 @@ | |||||
| <div class="action-tab" id="actions-body"> | <div class="action-tab" id="actions-body"> | ||||
| <button class="action-button" id="button-action-feed">Eat</button> | <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-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-stomp">Stomp</button> | ||||
| <button class="action-button" id="button-action-flex_toes">Flex Toes</button> | <button class="action-button" id="button-action-flex_toes">Flex Toes</button> | ||||
| <button class="action-button" id="button-action-sit">Sit</button> | <button class="action-button" id="button-action-sit">Sit</button> | ||||
| @@ -298,8 +299,8 @@ | |||||
| <div class="action-tab" id="actions-goo"> | <div class="action-tab" id="actions-goo"> | ||||
| <button class="action-button" id="button-action-solidify">Solidify</button> | <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-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> | ||||
| <div class="action-tab" id="actions-misc"> | <div class="action-tab" id="actions-misc"> | ||||
| @@ -478,6 +479,10 @@ | |||||
| <input autocomplete="off" type="checkbox" checked="true" name="sameSizeStomp" id="sameSizeStomp"/> | <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> | <label class="has-tooltip" for="sameSizeStomp" title="Can you stomp and sit on people your own size?">Same-size stomper</label> | ||||
| </li> | </li> | ||||
| <li> | |||||
| <input autocomplete="off" type="checkbox" name="vomitEnabled" id="vomitEnabled"/> | |||||
| <label for="vomitEnabled">Vomiting</label> | |||||
| </li> | |||||
| <li> | <li> | ||||
| <label for="footType">Foot type</label> | <label for="footType">Foot type</label> | ||||
| <select name="footType"> | <select name="footType"> | ||||