From aa50982cff5cc55f7bd1744c450b9db81eba49df Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Sun, 24 Jul 2022 16:04:37 -0400 Subject: [PATCH] Add magic/breath growth. Add even larger things to eat --- features.js | 16 +++++++-- game.js | 66 +++++++++++++++++++++++++++++------ recursive-macro.js | 86 +++++++++++++++++++++++++++++++++++++++++++++- stroll.html | 2 ++ 4 files changed, 156 insertions(+), 14 deletions(-) diff --git a/features.js b/features.js index c99706d..90057af 100644 --- a/features.js +++ b/features.js @@ -2073,6 +2073,7 @@ options = [ "group": "magic", "optional": true, "panels": ["breath"], + "parts": ["breath"], "buttons": ["breath_line", "breath_cone"], "entries": [ @@ -2144,15 +2145,26 @@ options = [ "group": "magic", "optional": true, "panels": ["magic"], + "parts": ["magic",], "entries": [ { "name": "Shrinking magic", "id": "magicShrink", - "type": "checkbox", + "type": "subcategory", "buttons": ["magic_shrink"], "default": true, - "tooltip": "Allows you to shrink a wide area(relative to your size) into a smaller area, allowing you to devour prey much bigger than you are." + "tooltip": "Allows you to shrink a wide area(relative to your size) into a smaller area, allowing you to devour prey much bigger than you are.", + "entries": + [ + { + "name": "Auto-shrink", + "id": "magicShrinkAuto", + "type": "checkbox", + "default": false, + "tooltip": "Automatically shrink your victims before performing an action." + } + ] }, { "name": "Fast digestion", diff --git a/game.js b/game.js index 605f703..8251033 100644 --- a/game.js +++ b/game.js @@ -97,6 +97,8 @@ let macro = //macro controls every customizable part of the players body "wingScale": 1, "muskScale": 1, "stenchScale": 1, + "breathScale": 1, + "magicScale": 1, "tailDensity": 1000, "dickDensity": 1000, @@ -1054,7 +1056,7 @@ let macro = //macro controls every customizable part of the players body "stages": 3 }, - get breathArea() { return this.scaling(this.baseBreathArea, this.scale, 2); }, + get breathArea() { return this.scaling(this.baseBreathArea, macro.breathScale * this.scale, 2); }, "pawsVore": { "name": "paws", @@ -2132,7 +2134,10 @@ function getWeights(region, area) { "Galaxy": 0.1, "Cluster": 0.5, "Universe": 1, - "Multiverse": 1 + "Multiverse": 1, + "Timeline": 1, + "Pantheon": 1, + "Reality": 1, }; } else if (area > things["Town"].area) { @@ -4306,7 +4311,7 @@ function breath_cone() { function magic_shrink() { let prey = new Container(); - prey = getPrey(biome, macro.height * macro.height * 100, true); + prey = getPrey(biome, macro.magicScale * macro.height * macro.height * 100, true); macro.shrunkPrey = prey; macro.shrunkPrey.mod_property("mass", x => x/1e2) @@ -4328,7 +4333,7 @@ function magic_fast_digestion() { clearTimeout(macro.fastDigestTimer); } - macro.fastDigestFactor = 3; + macro.fastDigestFactor = Math.log10(macro.magicScale) * 3; macro.fastDigestTimer = setTimeout(function () { macro.fastDigestFactor = 1; macro.fastDigestTimer = null; update(["The digestion magic wears off...", newline]); }, 30000); update([line, newline]); } @@ -4356,7 +4361,7 @@ function magic_arousal() { update([line, newline]); - macro_arousal_execute(100, 100); + macro_arousal_execute(macro.magicScale * 100, macro.magicScale * 100); } function macro_arousal_execute(remaining, max) { @@ -4371,7 +4376,7 @@ function magic_fill_sexual() { update([line, newline]); - macro_fill_sexual_execute(100, 100); + macro_fill_sexual_execute(macro.magicScale * 100, macro.magicScale * 100); } function macro_fill_sexual_execute(remaining, max) { @@ -4651,6 +4656,8 @@ function grow_pick(times) { case "wings": grow_wings(times); break; case "musk": grow_musk(times); break; case "stench": grow_stench(times); break; + case "breath": grow_breath(times); break; + case "magic": grow_magic(times); break; } } } @@ -4844,7 +4851,7 @@ function grow_wings(factor, simpleCalc = true) { let lengthDelta = macro.wingLength - oldLength; - update([pickString("Power surges through you", "Energy flows into you", "Your back muscles fight for space", "Your muscles tense", "A crackeling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your " + macro.wingDesc + " wings grow, gaining " + length(2 * lengthDelta, unit, false) + " of wingspan.", newline]); + update([pickString("Power surges through you", "Energy flows into you", "Your back muscles fight for space", "Your muscles tense", "A crackling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your " + macro.wingDesc + " wings grow, gaining " + length(2 * lengthDelta, unit, false) + " of wingspan.", newline]); } function grow_musk(factor, simpleCalc = true) { @@ -4859,7 +4866,7 @@ function grow_musk(factor, simpleCalc = true) { let scaleDelta = macro.muskScale - oldScale; - update([pickString("Power surges through you", "Energy flows into you", "A crackeling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your musk thickens, growing more potent.", newline]); + update([pickString("Power surges through you", "Energy flows into you", "A crackling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your musk thickens, growing more potent.", newline]); } function grow_stench(factor, simpleCalc = true) { @@ -4874,7 +4881,37 @@ function grow_stench(factor, simpleCalc = true) { let scaleDelta = macro.stenchScale - oldScale; - update([pickString("Power surges through you", "Energy flows into you", "A crackeling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your stench thickens, growing more potent.", newline]); + update([pickString("Power surges through you", "Energy flows into you", "A crackling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your stench thickens, growing more potent.", newline]); +} + +function grow_breath(factor, simpleCalc = true) { + + let oldScale = macro.breathScale; + + if (simpleCalc == true) { + macro.breathScale *= factor; + } else { + macro.breathScale = (macro.breathScale + (factor / Math.pow(macro.mass, 1 / 3))) + } + + let scaleDelta = macro.breathScale - oldScale; + + update([pickString("Power surges through you", "Energy flows into you", "A crackling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your breath weapon grows more potent.", newline]); +} + +function grow_magic(factor, simpleCalc = true) { + + let oldScale = macro.magicScale; + + if (simpleCalc == true) { + macro.magicScale *= factor; + } else { + macro.magicScale = (macro.magicScale + (factor / Math.pow(macro.mass, 1 / 3))) + } + + let scaleDelta = macro.magicScale - oldScale; + + update([pickString("Power surges through you", "Energy flows into you", "A crackling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your magical powers grow.", newline]); } function resetSettings() { @@ -5478,6 +5515,13 @@ function showStats() { update(lines); } +function performAction(name) { + if (name != "magic_shrink" && macro.magicShrinkAuto) { + magic_shrink(); + } + window[name](); +} + function registerActions() { let buttons = document.querySelectorAll("[id^='button-action']"); @@ -5485,9 +5529,9 @@ function registerActions() { let name = button.id; name = name.replace(/button-action-/, ""); if (macro.difficulty > 0) { - button.addEventListener("click", function () { cooldown_start(name); window[name](); }); + button.addEventListener("click", function () { cooldown_start(name); performAction(name) }); } else { - button.addEventListener("click", function () { window[name](); }); + button.addEventListener("click", function () { performAction(name) }); } }); diff --git a/recursive-macro.js b/recursive-macro.js index 66cfc4b..e684997 100644 --- a/recursive-macro.js +++ b/recursive-macro.js @@ -175,7 +175,7 @@ var things = clusters: 5, cluster_chances: .5, contents: [["Person", 0, 8], ["Empty Car", 0, 2]], - descriptor: ["house", "houses"] + descriptor: ["a house", "houses"] }, "Business": { "Business": Business, @@ -368,6 +368,42 @@ var things = contents: [["Universe", 100, 1000]], descriptor: ["a multiverse", "multiverses"] }, + "Timeline": { + "Timeline": Timeline, + mass: 1, + area: 5e75, + clusters: 1, + cluster_chances: 1, + contents: [["Multiverse", 1e50, 1e53]], + descriptor: ["an entire timeline", "entire timelines"] + }, + "Pantheon": { + "Pantheon": Pantheon, + mass: 1, + area: 1e100, + clusters: 1, + cluster_chances: 1, + contents: [["Timeline", 1e30, 1e35], ["Deity", 10, 30]], + descriptor: ["a pantheon", "pantheons"] + }, + "Deity": { + "Deity": Deity, + mass: 1e100, + area: 1e100, + clusters: 1, + cluster_chances: 1, + contents: [], + descriptor: ["a deity", "deities"] + }, + "Reality": { + "Reality": Reality, + mass: 1, + area: 1e120, + clusters: 1, + cluster_changes: 1, + contents: [["Pantheon", 1e30, 1e35]], + descriptor: ["a reality", "realities"] + }, //Military "Soldier": { "Soldier": Soldier, @@ -1630,6 +1666,54 @@ function Multiverse(count = 1) { } } +function Timeline(count = 1) { + this.name = "Timeline"; + + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); + + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "celestial"); + } +} + +function Pantheon(count = 1) { + this.name = "Pantheon"; + + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); + + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "celestial"); + } +} + +function Deity(count = 1) { + this.name = "Deity"; + + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); + + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "celestial"); + } +} + +function Reality(count = 1) { + this.name = "Reality"; + + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); + + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "celestial"); + } +} + function Soldier(count = 1) { this.name = "Soldier"; diff --git a/stroll.html b/stroll.html index 2b9050f..e4dc65c 100644 --- a/stroll.html +++ b/stroll.html @@ -184,6 +184,8 @@ + +