| @@ -1276,7 +1276,7 @@ let macro = | |||
| if (this.orgasm) | |||
| amount /= 5; | |||
| this.arousal += amount * this.arousalFactor; | |||
| if (this.arousal >= 200) { | |||
| @@ -1558,6 +1558,11 @@ let macro = | |||
| return length(this.vaginaLength, unit, true) + " long " + state; | |||
| }, | |||
| "droolEnabled": false, | |||
| "magicEnabled": false, | |||
| "shrunkPrey": null, | |||
| "growthPoints": 0, | |||
| // 0 = entirely non-fatal | |||
| @@ -1690,6 +1695,9 @@ function summarize(sum, fatal = true) | |||
| function getOnePrey(biome, area, sameSize = true) | |||
| { | |||
| if (macro.shrunkPrey != null) { | |||
| return getPrey(biome, area, sameSize); | |||
| } | |||
| let weights = getWeights(biome, area); | |||
| let potential = []; | |||
| @@ -1786,6 +1794,11 @@ function getWeights(region, area) { | |||
| function getPrey(region, area, sameSize = false) | |||
| { | |||
| if (macro.shrunkPrey != null) { | |||
| let prey = macro.shrunkPrey; | |||
| macro.shrunkPrey = null; | |||
| return prey; | |||
| } | |||
| let weights = getWeights(region, area); | |||
| var prey = fill_area(area,weights); | |||
| @@ -3699,6 +3712,25 @@ function breath_cone() { | |||
| update(["You prepare to exhale a broad cone of breath!",newline]); | |||
| } | |||
| function magic_shrink() | |||
| { | |||
| let prey = new Container(); | |||
| prey = getPrey(biome, macro.height * macro.height * 100, true); | |||
| macro.shrunkPrey = prey; | |||
| macro.shrunkPrey.mass /= 1000000; | |||
| let line = describe("magic-shrink", prey, macro, false); | |||
| let linesummary = summarize(prey.sum(), false); | |||
| let preyMass = prey.sum_property("mass"); | |||
| let sound = getSound("magic", preyMass); | |||
| update([sound, line, linesummary, newline]); | |||
| return; | |||
| } | |||
| function cooldown_start(name) { | |||
| let button = document.querySelector("#" + "button-action-" + name); | |||
| let parent = button.parentElement; | |||
| @@ -4183,6 +4215,11 @@ function startGame(e) { | |||
| enable_victim("drool","Drenched in drool"); | |||
| } | |||
| if (macro.magicEnabled) { | |||
| enable_panel("magic"); | |||
| enable_button("magic_shrink"); | |||
| } | |||
| if (macro.arousalEnabled) { | |||
| document.querySelector("#arousalMeter").style.display = 'inline-block'; | |||
| document.querySelector("#orgasmMeter").style.display = 'inline-block'; | |||
| @@ -31,7 +31,7 @@ var actions = ["eat","chew","vomit","stomp","stomp-wedge","flex-toes","kick","an | |||
| "sheath-toy","slit-toy","breast-toy","melt","solidify","flood","stomp-goo","goo-digest","ass-goo","goo-stomach-pull","goo-stomach-push", | |||
| "goo-bowels-pull","goo-bowels-push","goo-womb-pull","goo-womb-push","goo-balls-pull","goo-balls-push","goo-breasts-pull","goo-breasts-push", | |||
| "goo-tail-pull","goo-tail-push","goo-paws-pull","goo-paws-push","paw-vore","paw-vore-toes","paws","crop-swallow","crop-transfer", | |||
| "breath-fire","breath-ice","breath-electric","breath-smoke","breath-radiation","breath-foul","drool"]; | |||
| "breath-fire","breath-ice","breath-electric","breath-smoke","breath-radiation","breath-foul","drool","magic-shrink","magic-hypnotize"]; | |||
| for (let i=0; i<actions.length; i++) { | |||
| rules[actions[i]] = []; | |||
| @@ -1113,6 +1113,10 @@ function defaultDrool(container, macro, verbose) { | |||
| return "$VOLUME of your drool rains down from your " + macro.jawDesc(true) + ", washing over " + container.describe(verbose) + "."; | |||
| } | |||
| function defaultMagicShrink(container, macro, verbose) { | |||
| return "You envelop " + container.describe(verbose) + " in swirling tendrils of magic, shrinking " + (container.count == 1 ? "it" : "them") + " down!"; | |||
| } | |||
| // EATING | |||
| @@ -20,7 +20,9 @@ let sounds = { | |||
| "breath": | |||
| [["Woosh."],["Fwoosh."],["FWOOSH."],["FWOOSH!"],["FWOOOOOOSH!"]], | |||
| "chew": | |||
| [["Snap.", "Crack."],["Crunch."],["Crack!"],["CRUNCH!"],["CRRRUNCH!"]] | |||
| [["Snap.", "Crack."],["Crunch."],["Crack!"],["CRUNCH!"],["CRRRUNCH!"]], | |||
| "magic": | |||
| [["Zap."],["Zap!"],["Fwoosh!"]] | |||
| }; | |||
| function pickByMass(name, mass) { | |||
| @@ -210,6 +210,7 @@ | |||
| <button class="action-part-button" id="action-part-shoes">Shoes</button> | |||
| <button class="action-part-button" id="action-part-waste">Waste</button> | |||
| <button class="action-part-button" id="action-part-goo">Goo</button> | |||
| <button class="action-part-button" id="action-part-magic">Magic</button> | |||
| <button class="action-part-button" id="action-part-misc">Misc</button> | |||
| <button class="action-part-button" id="action-part-breath">Breath</button> | |||
| <button class="action-part-button" id="action-part-options">Options</button> | |||
| @@ -339,6 +340,11 @@ | |||
| <button class="action-button" id="button-action-breath_foul">Foul</button> | |||
| </div> | |||
| <div class="action-tab" id="actions-magic"> | |||
| <button class="action-button" id="button-action-magic_shrink">Shrink</button> | |||
| <button class="action-button" id="button-action-magic_hypnotize">Hypnotize</button> | |||
| </div> | |||
| <div class="action-tab" id="actions-options"> | |||
| <button class="stat-button" id="button-arousal">Arousal On</button> | |||
| <button class="stat-button" id="button-stroll">Status: Standing</button> | |||
| @@ -1132,6 +1138,14 @@ | |||
| </li> | |||
| </div> | |||
| </div> | |||
| <div class="custom-category"> | |||
| <input autocomplete="off" class="custom-header-checkbox" type="checkbox" id="magicEnabled" name="magicEnabled" /> | |||
| <label class="custom-header" for="magicEnabled">Magic</label> | |||
| <div class="reveal-if-active"> | |||
| </div> | |||
| </div> | |||
| </ul> | |||
| </form> | |||
| </div> | |||