diff --git a/changelog.html b/changelog.html index 862fcbde..2baaea7c 100644 --- a/changelog.html +++ b/changelog.html @@ -157,4 +157,29 @@
  • Implemented Quantum Foam
  • Squished a few bugs
  • + v1.9: Skyrmions Update
    + + v1.91: Mode Extension Update
    + + v2.0: Multiverse Update
    + diff --git a/images/threeArrows.jpg b/images/threeArrows.jpg deleted file mode 100644 index b3ea80d7..00000000 Binary files a/images/threeArrows.jpg and /dev/null differ diff --git a/images/threeArrows.svg b/images/threeArrows.svg new file mode 100644 index 00000000..0b9124e4 --- /dev/null +++ b/images/threeArrows.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/threeArrows2.jpg b/images/threeArrows2.jpg deleted file mode 100644 index 1991a1eb..00000000 Binary files a/images/threeArrows2.jpg and /dev/null differ diff --git a/js/classes/Achievement.js b/js/classes/Achievement.js index 10ca446f..62b3df6d 100644 --- a/js/classes/Achievement.js +++ b/js/classes/Achievement.js @@ -21,8 +21,11 @@ class Achievement { txt += "boolean" + l[i+2] } } - - if (txt.indexOf("showNum") != -1) { + + if (txt.indexOf("showNup") != -1) { + let txt2 = txt.split("showNup")[1]; + return txt.split("showNup")[0] + showNum(txt2.slice(1, txt2.indexOf("]"))) + txt2.split("]")[1]; + } else if (txt.indexOf("showNum") != -1) { let txt2 = txt.split("showNum")[1]; return txt.split("showNum")[0] + showNum(txt2.slice(1, txt2.indexOf(")"))) + txt2.split(")")[1]; } else if (txt.indexOf("formatDistance") != -1) { @@ -67,4 +70,9 @@ class Achievement { notifier.success("Achievement gotten: " + ACH_DATA.names[this.name]); } } + + static hasRow(x) { + for (let i=1;i<=ACH_DATA.cols;i++) if (!player.achievements.includes(x*10+i)) return false; + return true; + } } diff --git a/js/classes/Feature.js b/js/classes/Feature.js index 7daff8e7..5a0a8e12 100644 --- a/js/classes/Feature.js +++ b/js/classes/Feature.js @@ -6,6 +6,8 @@ class Feature { this.display = data.display; this.r = data.reached || (function() { return false }); this.spec = data.spec ? data.spec : Array.isArray(data.res); + this.superSpec = data.superSpec || false + this.resName = data.resName || "???" this.disp = data.displayName ? data.displayName : data.name; this.progress = data.progress ? data.progress @@ -18,15 +20,23 @@ class Feature { amt(x = 1) { if (this.res_amt > 1) { - return this.spec[x - 1] ? player[this.res[x - 1][0]][this.res[x - 1][1]] : player[this.res[x - 1]]; - } else return this.spec ? player[this.res[0]][this.res[1]] : player[this.res]; + if (this.superSpec?this.superSpec[x - 1]:false) return this.res[x - 1]() + else return this.spec[x - 1] ? player[this.res[x - 1][0]][this.res[x - 1][1]] : player[this.res[x - 1]]; + } else { + if (this.superSpec) return this.res() + else return this.spec ? player[this.res[0]][this.res[1]] : player[this.res]; + } } dispAmt(x = 1) { if (this.specRes[x-1]) return this.specRes[x-1] - if (this.res_amt > 1) - return this.spec[x - 1] ? capitalFirst(this.res[x - 1][1]) : capitalFirst(this.res[x - 1]); - return this.spec ? capitalFirst(this.res[1]) : capitalFirst(this.res); + if (this.res_amt > 1) { + if (this.superSpec?this.superSpec[x - 1]:false) return capitalFirst(this.resName[x - 1]) + else return this.spec[x - 1] ? capitalFirst(this.res[x - 1][1]) : capitalFirst(this.res[x - 1]); + } else { + if (this.superSpec) return capitalFirst(this.resName) + else return this.spec ? capitalFirst(this.res[1]) : capitalFirst(this.res); + } } get reached() { @@ -52,7 +62,7 @@ class Feature { " to unlock " + this.disp + " (" + showNum(new ExpantaNum(this.progress() || 0).times(100)) + "%)"; return desc; } else return ""; - } else + } else { return this.reached ? "" : "Reach " + @@ -64,5 +74,6 @@ class Feature { " (" + showNum(new ExpantaNum(this.progress() || 0).times(100)) + "%)"; + } } } diff --git a/js/classes/Layer.js b/js/classes/Layer.js index deaa342d..1b4d2b7a 100644 --- a/js/classes/Layer.js +++ b/js/classes/Layer.js @@ -1,15 +1,16 @@ class Layer { - constructor(name, avail, type, spec, tName) { + constructor(name, avail, type, spec, tName, useCustomGain) { this.name = name; this.tName = tName || name; this.avail = avail; this.type = type; this.spec = !!spec; + this.customGain = useCustomGain||type=="multi-res"; this.addS = this.name == "rank" || this.name == "tier"; } get gain() { - if (this.type == "multi-res") return tmp[this.tName].gain(); + if (this.customGain) return tmp[this.tName].gain(); if (this.type == "forced" || this.type == "semi-forced") return new ExpantaNum(1); let req = LAYER_REQS[this.name]; let nr = req[1]; @@ -24,6 +25,7 @@ class Layer { if (player.inf.pantheon.purge.active || HCCBA("purge")) gain = gain.plus(1).pow(gain.plus(1).times(10).slog(10).pow(-1)).min(gain) if (modeActive("extreme") && !modeActive("hikers_dream")) gain = gain.sub(2).max(0) } + if (modeActive("hikers_dream") && player.elementary.theory.depth.gte(10) && player.elementary.theory.active && gain.gt(1)) gain = gain.pow(3).root(player.elementary.theory.depth) return gain.floor(); } @@ -37,15 +39,16 @@ class Layer { reset(force=false, auto=false) { if (!force) { if (tmp[this.tName]) if (tmp[this.tName].updateOnReset !== undefined && !auto) tmp[this.tName].updateOnReset(); - if (!this.avail || this.gain.lt(1)) return; + if (!(this.avail || (!(this.name === "infinity") && player.inf.endorsements.lte(10) && infActive)) || this.gain.lt(1)) return; if (!this.spec) player[this.name] = player[this.name].plus(this.gain); else { let gc = tmp[this.tName].doGain(auto); if (gc == "NO") return; } } + if (LAYER_RESETS_NOTHING[this.name]()) return; let prev = transformToEN(player, DEFAULT_START); - for (let i = 0; i < LAYER_RESETS[this.name].length; i++) + for (let i = 0; i < LAYER_RESETS[this.name].length; i++) player[LAYER_RESETS[this.name][i]] = DEFAULT_START[LAYER_RESETS[this.name][i]] instanceof Object && !(DEFAULT_START[LAYER_RESETS[this.name][i]] instanceof ExpantaNum) @@ -53,9 +56,10 @@ class Layer { : DEFAULT_START[LAYER_RESETS[this.name][i]]; player = transformToEN(player, DEFAULT_START); modeLoad(LAYER_RESETS_EXTRA[this.name]); - if (tmp[this.tName]) if (tmp[this.tName].onReset !== undefined) tmp[this.tName].onReset(prev) + if (tmp[this.tName]) if (tmp[this.tName].onReset !== undefined) tmp[this.tName].onReset(prev, auto) if (this.name!="rf"&&modeActive("hikers_dream")) calcInclines(); - needUpdate = true + updateBeforeTick(); + updateAfterTick(); } bulk(mag = new ExpantaNum(1)) { diff --git a/js/constants/achievements.js b/js/constants/achievements.js index ed71e4ae..3fb584da 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -1,5 +1,5 @@ const ACH_DATA = { - rows: 16, + rows: 19, cols: 8, names: { 11: "Quick Sprint", @@ -115,10 +115,10 @@ const ACH_DATA = { 133: "It's Elementary, my dear Watson.", 134: "Why use the features I give you?", 135: "Never Seen Again", - 136: "Fastest in the Metaverse", + 136: "Fastest in the Multiverse", 137: "Back to the Past", 138: "The Fleet Flees", - + 141: "The Impossible Happened", 142: "Endless Endeavours", 143: "Under the C", @@ -127,7 +127,7 @@ const ACH_DATA = { 146: "True Infinity+", 147: "The Biggest Setback", 148: "The Impossible Task", - + 151: "An infinity smaller than your fingertip", 152: "Useless Theories", 153: "There is a tree", @@ -136,7 +136,7 @@ const ACH_DATA = { 156: "IMPOSSIBLE", 157: "The Principle of the Basics", 158: "The Repetition Continues", - + 161: "We're kids again", 162: "Actually Useless Theories", 163: "String Clickers", @@ -145,6 +145,33 @@ const ACH_DATA = { 166: "True Inflation", 167: "How is the Multiverse containing your power?", 168: "There is only one Fome", + + 171: "TRANSFOOOOORM!", + 172: "This must have taken years", + 173: "Extensionless Fome", + 174: "The Multiverse is Doomed", + 175: "Removing the Pillars", + 176: "Entering Reality", + 177: "Softcaps mean NOTHING", + 178: "Multiverse Conquered", + + 181: "Two In One Deal", + 182: "Multiverse of Madness", + 183: "Fermionic Embassy", + 184: "The Entropy Sublimit", + 185: "Eternal Torture", + 186: "King of the Damned", + 187: "Conquering the Megaverse", + 188: "Not So Proto Now?", + + 191: "Vantablack Explosion", + 192: "The Leetest Titan", + 193: "Conqueror of the Lands", + 194: "Nice Beloved Quality", + 195: "Millionaire Multipreneur", + 196: "Hadron Manipulation", + 197: "Billionaire X", + 198: "Overlord of Everything", }, descs: { 11: "Go at least formatDistance(100).", @@ -251,7 +278,7 @@ const ACH_DATA = { 123: "Reach showNum(2.5e5) Ascension Power.", 124: "Reach boolean(extreme,nine,thirty) Purge Power.", 125: "Reach formatDistance(1e4) while in a Purge run & in Reality's Stadium challenge at Difficulty Level 6.", - 126: "Have a magnitude of showNum(1e200) for Rankbot.", + 126: "Have a magnitude of boolean(hard,showNup[1e75],showNup[1e200]) for Rankbot.", 127: "Reach showNum(1e100000) Time Cubes without any Pathogen Upgrades or Dark Cores.", 128: "Reach formatDistance(5.55e5555)/s^2 of Acceleration while in a Purge run.", @@ -263,7 +290,7 @@ const ACH_DATA = { 136: "Reach showNum(1e3750000) uni/s of Velocity.", 137: "Do an Elementary reset without any Derivative Boosts (but you can have Derivative Shifts).", 138: "Reach formatDistance(4.4e7826) while having ten Endorsements or less.", - + 141: "Get a Theory Point.", 142: "Reach formatDistance(4.4e136) while in a Purge run, while in Reality's Stadium challenge at Difficulty Level 6, and without Pathogen Upgrades & Dark Cores in the current Infinity.", 143: "Complete The Theoriverse at Depth 4.", @@ -272,7 +299,7 @@ const ACH_DATA = { 146: "Reach showNum(1.8e308) Knowledge.", 147: "Reach Rank showNum(200) with ten Endorsements or less.", 148: "Reach Rank showNum(995).", - + 151: "Unlock Hadronic Challenge.", 152: "Get a Hadronic Score of at least showNum(2.3).", 153: "Reach formatDistance(4.4e8250026) without any Theory Tree Upgrades.", @@ -281,15 +308,42 @@ const ACH_DATA = { 156: "Complete The Theoriverse at Depth 8.", 157: "Reach formatDistance(4.4e76) of Primary String.", 158: "Get a Hadronic Score of at least showNum(3.75).", - + 161: "Unlock Quantum Foam.", 162: "Reach formatDistance(4.4e251) of Primary String.", 163: "Reach formatDistance(4.4e126) of Entangled String.", 164: "Unlock Entropy.", 165: "Get a Hadronic Score of at least showNum(8).", - 166: "Reach showNum(1e160) Inflatons.", + 166: "Reach boolean(extreme,showNup[1e150],showNup[1e160]) Inflatons.", 167: "Reach showNum(1e108000000) uni.", 168: "Reach showNum(1e25) Quantum Foam without any Subplanck Foam.", + + 171: "Get a Skyrmion.", + 172: "Elementary showNum(1e12) times.", + 173: "Reach boolean(extreme,showNup[1e78],showNup[1e140]) Quantum Foam without any Entropy.", + 174: "Reach formatDistance(4.4e500000026).", + 175: "Reach formatDistance(4.4e222222248) without any Entropy, Subplanck Foam, or Photon/Gluon Upgrades.", + 176: "Complete The Theoriverse at Depth 19.", + 177: "Have Pathogen Upgrade Power of at least showNum(1625)%.", + 178: "Reach formatDistance(4.4e1000000026).", + + 181: "Reach formatDistance(1.936e2000000053).", + 182: "Reach formatDistance(1.7868e3500000093) without any Theoriverse completions.", + 183: "Complete Multiverse 1.", + 184: "Reach showNum(1e5) Entropy.", + 185: "Reach formatDistance(3.911111e88888915) while in Multiverse 2 and Eternity's Stadium challenge at Difficulty Level 6.", + 186: "Reach formatDistance(2.21e100000002664).", + 187: "Complete Multiverse 5.", + 188: "Reach showNum(1e430) Protoversal Foam.", + + 191: "Purchase showNum(10) Dark Expanders.", + 192: "Get showNum(1337) Ranks in Multiverse 1 without unlocking Theories, Hadronic Challenge, Foam, or Skyrmions.", + 193: "Reach formatDistance(4.4e800000026) in Multiverse 3 without unlocking Ascension.", + 194: "Reach Tier showNum(69).", + 195: "Gain showNum(1e6) Multiversal Energy in one reset.", + 196: "Reach formatDistance(4.4e10000026) in Multiverse 5 while in a Hadronic Challenge with a Projected Score of at least boolean(extreme,12,15).", + 197: "Gain showNum(1e9) Multiversal Energy in one reset.", + 198: "Reach formatDistance(2.8e1000000026643).", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -330,7 +384,7 @@ const ACH_DATA = { 65: "Cadaver gain is increased by showNum(40)%boolean(extreme+hikers_dream, increase the Confidence softcap by one third per Pathogen upgrade)boolean(hard, and Pathogen Upgrades softcap five later)", 66: "boolean(extreme+hikers_dream,Buff Thrusters III and Coal boosts Optimization.)", 67: "Time goes by showNum(11.11)% fasterboolean(extreme+hikers_dream, increase the Optimization softcap by 5 times and increase the Confidence softcap by 1).", - 68: "Pathogen gain is showNum(2.5)x fasterboolean(extreme+hikers_dream, Confidence boosts Pathogen gain)boolean(extreme, and Cadaver gain is quintupled).", + 68: "Pathogen gain is showNum(2.5)x fasterboolean(hard+hikers_dream, Confidence boosts Pathogen gain)boolean(extreme, and Cadaver gain is quintupled).", 72: "You gain Time Cubes without Reversing Time, however only at half the rateboolean(extreme, and Time Cube gain is faster based on your Coal & Dark Cores).", 74: "The 'Time Doesnt Exist' reward is showNum(75)% stronger.", @@ -343,11 +397,12 @@ const ACH_DATA = { 84: "Dark Flow affects Pathogen gain, slows down after showNum(50)x.", 85: "boolean(hard+hikers_dream,You can rejuvinate whenever)boolean(extreme+hikers_dream, and square Endurance)boolean(hard+hikers_dream,.)", 86: "boolean(extreme+hikers_dream,Pathogens multiply time cube gain and square Confidence softcap start.)", - 87: "boolean(extreme+hikers_dream,Remove the base motivation softcap and time cubes boost pathogens.)", + 87: "boolean(extreme+hikers_dream,Remove the base motivation softcap)boolean(hard+hikers_dream, and time cubes boost pathogens.)", 88: "Buying Pathogen Upgrades does not spend your Pathogensboolean(extreme, and you unlock Furnace Challenges).", 92: "When buying Dark Cores, your Cadavers do not decrease.", 93: "boolean(extreme+hikers_dream,Square Confidence softcap start.)", + 94: "boolean(hard-extreme,Generate Ascension Power even if perks are inactive.)", 95: "Gain showNum(100)% of Rocket gain every second.", 96: "Gain showNum(100)% of Cadaver gain every second.", 97: "Transfer showNum(100)% of Cadavers to Life Essence every secondboolean(extreme+hikers_dream, and Optimization increases Confidence softcap start).", @@ -362,25 +417,48 @@ const ACH_DATA = { 116: "You gain twice as many Heavenly Chips & Demonic Soulsboolean(extreme, and Time Speed is enabled in Purge runs and Enhanced Coal gain is 40% faster for each Purge Power you have).", 117: "boolean(extreme+hikers_dream,Remove the Confidence softcap.)", - 123: "The Universe Doesn't Exist achievement uses a slightly better formulaboolean(extreme+hikers_dream, and Confidence is ten times stronger).", + 123: "The Universe Doesn't Exist achievement uses a slightly better formulaboolean(hard+hikers_dream, and Confidence is ten times stronger).", 124: "All Perks last twice as long.", 125: "Pathogen Upgrades are showNum(5)% stronger.", - 131: "Rockets, Cadavers, & Pathogens are gained twice as fast, and Dark Flow is showNum(50)% faster.", + 131: "Rockets, Cadavers, & Pathogens are gained twice as fast, and Dark Flow is showNum(50)% fasterboolean(extreme, and coal & enhanced coal gain is always 100x faster).", 132: "The Gauge Force Effect is doubled.", 133: "Unlock Auto-Elementaries.", - 135: "The Purge Power effect is halved.", - + 135: "The Purge Power effect is halved, and boost to perk strength from Demonic Souls is based on best Demonic Souls.", + + 141: "boolean(hikers_dream,Keep generators and buy them automatically.)", 142: "Endorsements that are bought automatically do not reset anything.", + 143: "boolean(extreme+hikers_dream,You can buy max Theory Tree Upgrades with shift+click which is slightly more efficient than normally upgrading. )boolean(hikers_dream,Gain ten million times the passive energy.)", 144: "All Strings are gained showNum(25)% faster.", + 145: "boolean(hikers_dream,inf10;10 is stronged based on your ranks.)", 147: "You gain Cadavers while in Purge runs, but at a very reduced rate, and Pathogen Upgrades are not stuck at 0% power in Purge runs.", - + 152: "All Theory Tree Upgrades are cheaper based on your Best Hadronic Score.", - 154: "Purge Power gain is doubled.", + 153: "boolean(extreme+hikers_dream,The Theory Tree Upgrade that makes Scaled Endorsements start later also makes Superscaled Endorsements start later at a reduced rate [x/10])", + 154: "Purge Power gain is doubledboolean(hikers_dream, and unlock a 27th & 28th energy upgrade).", 157: "All Strings are gained twice as fast.", - - 162: "Unspent Theory Points boost all Foam types, and you can buy max Theory Tree Upgrades (with shift+click, is slightly more efficient than normally upgrading).", + + 162: "Unspent Theory Points boost all Foam typesboolean(extreme+hikers_dream,., and you can buy max Theory Tree Upgrades with shift+click which is slightly more efficient than normally upgrading.)", 163: "Gain 10% of your Entangled String gain every second.", 166: "Unlock Auto-Photon Upgrades & Auto-Gluon Upgrades.", + 168: "Unlock Auto-Theory Tree Upgrades.", + + 171: "Expanding your Foam does not spend it, and Quantum Foam is gained 10x faster, Subplanck Foam is gained 20x faster, Subspatial Foam is gained 30x faster, etc.boolean(hikers_dream, and unlock a 29th & 30th energy upgrade)", + 172: "The Elementary Particle gain softcap is showNum(20)% weaker for every three OoMs of Elementaries done.", + 174: "The Perk Accelerator is showNum(5)% stronger.", + 178: 'The Infinity popup is permanently disabled if you have Auto-Endorsements unlocked, unlock the "Max Pion & Spinor Fields" buttonboolean(extreme, and the Plasma exponent is doubled when below 250).', + + 183: "All Entropy Upgrades are always unlocked.", + 185: "Hyper Pathogen Upgrade scaling is showNum(10)% weakerboolean(extreme, and gain twenty percent more Multiversal Energy).", + 186: "Unlock Auto-Multiverse Runs.", + 188: "Gain showNum(10)% more Entropy.", + + 191: "boolean(extreme,White Flame is gained 5x faster.)", + 193: "Gain showNum(5)% more Multiversal Energyboolean(hikers_dream-extreme, and 10% more Entropy).", + 194: "Tier scaling is 0.69% weaker.", + 195: "Gain showNum(11)% more Entropy.", + 196: "boolean(extreme+hikers_dream,Useless Theories is boosted by Multiverse Quilt 3's 2nd effect)", + 197: "Entropy Upgrades are showNum(5)% cheaperboolean(hikers_dream-extreme, and Thrusters V is 12.5% stronger).", + 198: "Unlock new Hadronic Challenge Selectors, you can extend the Hadronic Challenge goal to your best-ever Distance, and you can extend the HC Theoriverse selector to your best-ever Theoriverse completed (capped at depth 100).", } -}; \ No newline at end of file +}; diff --git a/js/constants/automation.js b/js/constants/automation.js index 2c52070a..a446d0de 100644 --- a/js/constants/automation.js +++ b/js/constants/automation.js @@ -70,30 +70,89 @@ const AUTOMATORS = { enlightenments: function() { return tmp.elm.bos.hasHiggs("0;2;0") }, - derivative_boosts: function() { - return tmp.elm.bos.hasHiggs("0;0;3") - }, spectral_gems: function() { return tmp.elm.bos.hasHiggs("1;2;0") }, + derivative_boosts: function() { + return tmp.elm.bos.hasHiggs("0;0;3") + }, elementaries: function() { return tmp.ach[133].has&&player.elementary.times.gt(0) }, - foam_unlocks: function() { - return player.elementary.entropy.upgrades.includes(1) - }, photon_upgrades: function() { return tmp.ach[166].has }, gluon_upgrades: function() { return tmp.ach[166].has }, + tree_upgrades: function() { + return tmp.ach[168].has + }, + theoriverse: function() { + return hasMltMilestone(4) + }, + theoretical_boosters: function() { + return player.elementary.entropy.upgrades.includes(17) + }, + foam_unlocks: function() { + return player.elementary.entropy.upgrades.includes(1) + }, + entropy: function() { + return player.elementary.entropy.upgrades.includes(10) + }, + entropy_upgrades: function() { + return player.elementary.entropy.upgrades.includes(11) + }, + pion_field: function() { + return hasMltMilestone(8) + }, + spinor_field: function() { + return hasMltMilestone(9) + }, + multiverse_runs: function() { + return tmp.ach[186].has + }, + magma: function() { + return hasMltMilestone(1) && modeActive("extreme"); + }, + plasma: function() { + return hasMltMilestone(8) && modeActive("extreme"); + }, }; +const AUTOMATOR_BORDER = { + furnace: "#c4711d", + pathogens: "#b6c495", + cores: "rgb(184, 0, 82)", + robots: "grey", + infinity_upgrades: "#fac882", + endorsements: "#fac882", + perks: "#ffff5c", + enlightenments: "#ecf07f", + spectral_gems: "#ffcc5e", + derivative_boosts: "#209908", + elementaries: "#83f7ee", + photon_upgrades: "#a39c5d", + gluon_upgrades: "#83f7ee", + tree_upgrades: "#fcb377", + theoriverse: "#e66700", + theoretical_boosters: "#fcb377", + foam_unlocks: "white", + entropy: "#dbaca9", + entropy_upgrades: "#dbaca9", + pion_field: "#a875d1", + spinor_field: "#a875d1", + multiverse_runs: "#837eed", + magma: "#4d3636", + plasma: "#49364d", +} + const AUTOMATOR_X = { elementaries: 2, + multiverse_runs: 2, } const AUTOMATOR_MODES = { elementaries: ["AMOUNT", "TIME"], + multiverse_runs: ["AMOUNT", "TIME"], } \ No newline at end of file diff --git a/js/constants/default.js b/js/constants/default.js index 8d5be11d..bf10af62 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -1,6 +1,6 @@ const DEFAULT_START = { tab: "main", - version: 1.8, + version: 2.0, optionsTab: "saving", achievements: [], savePos: 1, @@ -13,14 +13,20 @@ const DEFAULT_START = { autoSave: true, newst: true, elc: true, + mltnc: false, + mltforcetab: true, + hideMltBtn: false, saveImp: "new save", hot: true, featPerc: "logarithm", + tabsHidden: [], dcPulse: true, fonts: "courier", hideAch: false, visUpd: "every tick", + tht: true, hcc: true, + modeComboTableActive: false, }, modes: [], time: new Date().getTime(), @@ -30,6 +36,7 @@ const DEFAULT_START = { bestA: new ExpantaNum(0), bestEnd: new ExpantaNum(0), bestEP: new ExpantaNum(0), + bestDemonicSouls: new ExpantaNum(0), velocity: new ExpantaNum(0), rank: new ExpantaNum(1), tier: new ExpantaNum(0), @@ -102,6 +109,7 @@ const DEFAULT_START = { demons: new ExpantaNum(0), heavenlyChips: new ExpantaNum(0), demonicSouls: new ExpantaNum(0), + hauntingEnergy: new ExpantaNum(0), purge: { unl: false, active: false, @@ -166,6 +174,7 @@ const DEFAULT_START = { active: false, points: new ExpantaNum(0), depth: new ExpantaNum(0), + bestDepth: new ExpantaNum(0), supersymmetry: { unl: false, squarks: new ExpantaNum(0), @@ -180,7 +189,7 @@ const DEFAULT_START = { }, strings: { unl: false, - amounts: [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)], + amounts: [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)], entangled: new ExpantaNum(0), }, preons: { @@ -220,5 +229,29 @@ const DEFAULT_START = { best: new ExpantaNum(0), upgrades: [], }, - } + sky: { + unl: false, + amount: new ExpantaNum(0), + pions: { + amount: new ExpantaNum(0), + field: {}, + }, + spinors: { + amount: new ExpantaNum(0), + field: {}, + }, + }, + }, + mlt: { + times: new ExpantaNum(0), + energy: new ExpantaNum(0), + bestEnergy: new ExpantaNum(0), + totalEnergy: new ExpantaNum(0), + highestCompleted: 0, + highestUnlocked: 0, + active: 0, + quiltUpgs: [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)], + mlt1selected: [], + mlt3selected: [], + }, }; diff --git a/js/constants/elm.js b/js/constants/elm.js index d572d220..312b5a1b 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -3,19 +3,31 @@ const ELM_TABS = { return true; }, bosons: function () { - return true; + return player.elementary.times.gte(2)||hasMltMilestone(3); }, theory: function () { - return player.elementary.theory.unl; + return player.elementary.theory.unl||(mltActive(1)&&player.mlt.mlt1selected.length<2); }, hc: function () { - return player.elementary.hc.unl; + return player.elementary.hc.unl||(mltActive(1)&&player.mlt.mlt1selected.length<2); }, foam: function() { - return player.elementary.foam.unl; + return player.elementary.foam.unl||(mltActive(1)&&player.mlt.mlt1selected.length<2); + }, + sky: function() { + return player.elementary.sky.unl||(mltActive(1)&&player.mlt.mlt1selected.length<2); }, }; +const FULL_ELM_NAMES = { + fermions: "Fermions", + bosons: "Bosons", + theory: "Theory", + hc: "Hadronic Challenge", + foam: "Quantum Foam", + sky: "Skyrmions", +} + const QUARK_NAMES = ["up", "down", "charm", "strange", "top", "bottom"]; const QUARK_DESCS = { up: "Rocket gain is stronger.", @@ -46,6 +58,54 @@ const PH_CST_SCLD = { const GLUON_COLOURS = ["r", "g", "b", "ar", "ag", "ab"]; +const HIGGS_UPGS_EXTR_DESCS = { + "0;0;0": { + desc: { + extreme: "Always keep TR Upgrades, the Pathogen Upgrade automator, the Dark Core automator, & Furnace Challenge completions. You also start with Automation unlocked.", + hikers: "Always keep TR Upgrades, the Pathogen Upgrade automator, the Dark Core automator, and all energy upgrades. You also start with Automation unlocked.", + }, + active: () => modeActive("extreme") ? "extreme" : (modeActive("hikers_dream") ? "hikers" : false), + }, + "1;0;0": { + desc: { + hikers: "Unlock Auto-Robots, and your best motivation is not reset upon elementary.", + }, + active: () => modeActive("hikers_dream") ? "hikers" : false, + }, + "0;0;1": { + desc: { + hikers: "You start with 10 Endorsements on reset and raise Consistency to the 1.8th power.", + }, + active: () => modeActive("hikers_dream") ? "hikers" : false, + }, + "2;0;0": { + desc: { + hikers: "Unlock Auto-Endorsements and boost Meta Omnipotence based on the square root of Higgs Upgrades.", + }, + active: () => modeActive("hikers_dream") ? "hikers" : false, + }, + "1;2;0": { + desc: { + hikers: "Unlock Auto-Spectral Gem Distribution, you keep Purge Power on reset, and super energy multiplies photons gain.", + }, + active: () => modeActive("hikers_dream") ? "hikers" : false, + }, + "1;3;0": { + desc: { + hikers: "Angels & Demons boost the Gauge Force effect and the second super energy effect.", + }, + active: () => modeActive("hikers_dream") ? "hikers" : false, + }, + "0;3;1": { + desc: { + hikers: "Purge Power boosts Quark & Lepton gain and passive energy gain is squared.", + }, + active: () => modeActive("hikers_dream") ? "hikers" : false, + }, +} + +const DE_HIGGS_UPGS = ["5;0;0", "0;0;5", "5;0;5", "4;1;0", "0;1;4", "1;1;1", "3;2;2"] + const HIGGS_UPGS = { "0;0;0": { cost: new ExpantaNum(4e4), @@ -162,6 +222,46 @@ const HIGGS_UPGS = { desc: "The softcap to Pathogen Upgrade 1's effect is nerfed, and Pathogen Upgrade 1's formula is better.", unl: function() { return hasDE(3) }, }, + "6;0;0": { + cost: new ExpantaNum(5e9), + desc: "Unlock a new Furnace Challenge.", + unl: function() { return modeActive("extreme")&&player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0") }, + }, + "0;0;6": { + cost: new ExpantaNum(5e9), + desc: "Both Molten Brick effects use better formulas.", + unl: function() { return modeActive("extreme")&&player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0") }, + }, + "6;1;0": { + cost: new ExpantaNum(1e12), + desc: "The final Enhanced Furnace Upgrade is stronger based on its level.", + unl: function() { return modeActive("extreme")&&player.elementary.bosons.scalar.higgs.upgrades.includes("6;0;0") }, + }, + "0;1;6": { + cost: new ExpantaNum(1e12), + desc: "Your Molten Bricks are doubled.", + unl: function() { return modeActive("extreme")&&player.elementary.bosons.scalar.higgs.upgrades.includes("0;0;6") }, + }, + "1;1;1": { + cost: new ExpantaNum(1.5e24), + desc: "The Magma Search requirement scales half as fast, and Magma's effect uses a better formula.", + unl: function() { return hasDE(3) && modeActive("extreme") }, + }, + "2;2;1": { + cost: new ExpantaNum(1e11), + desc: "Raise Optimization effect to the power of the number of Higgs Boson upgrades and energy multiples Knowledge gain.", + unl: function() { return modeActive("hikers_dream") && player.elementary.bosons.scalar.higgs.upgrades.includes("1;2;0") }, + }, + "2;2;2": { + cost: new ExpantaNum(5e10), + desc: "Raise Storage to the tenth power and it also boosts Motivation.", + unl: function() { return modeActive("hikers_dream") && player.elementary.bosons.scalar.higgs.upgrades.includes("0;2;1") }, + }, + "3;2;2": { + cost: new ExpantaNum(5e22), + desc: "Square each Omnipotence and Storage", + unl: function() { return modeActive("hikers_dream") && hasDE(3) }, + }, } const THEORY_REQ = [new ExpantaNum("1e4000000").times(DISTANCES.uni), new ExpantaNum(1000)] @@ -186,7 +286,7 @@ const TH_TABS = { return player.elementary.theory.preons.unl }, inflatons: function() { - return player.elementary.hc.unl&&player.elementary.theory.accelerons.unl + return (modeActive("extreme")?player.elementary.foam.unl:player.elementary.hc.unl)&&player.elementary.theory.accelerons.unl }, }; @@ -292,6 +392,7 @@ const TREE_UPGS = { target: function(points) { return points.div(20).sub(1).times(2).plus(1).floor() }, cap: new ExpantaNum(5), desc: "The above upgrade gets extra levels added to its effect based on your Preons.", + altDesc: "The previous upgrade gets extra levels added to its effect based on your Preons.", effect: function(bought) { return player.elementary.theory.preons.amount.plus(1).times(10).slog(10).times(bought) }, effD: function(e) { return showNum(e)+" extra levels" }, }, @@ -420,6 +521,7 @@ const TREE_UPGS = { cost: function(bought) { return new ExpantaNum(250) }, cap: new ExpantaNum(1), desc: "The topmost Theory Tree Upgrade's effect uses a better formula.", + altDesc: "The first Supersymmetry Theory Tree Upgrade's effect uses a better formula.", effect: function(bought) { return new ExpantaNum(1).times(bought) }, effD: function(e) { return e.eq(1)?"Active":"Nothing" }, }, @@ -483,14 +585,115 @@ const TREE_UPGS = { effect: function(bought) { return new ExpantaNum(1).times(bought) }, effD: function(e) { return e.eq(1)?"Active":"Nothing" }, }, + 34: { + unl: function() { return (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl)&&modeActive("extreme") }, + cost: function(bought) { return ExpantaNum.mul(100, ExpantaNum.pow(bought, 2)).plus(50) }, + target: function(points) { return points.sub(50).div(100).sqrt().plus(1).floor() }, + cap: new ExpantaNum(4), + desc: "The Magma cost of Reforming Magma uses a slower formula.", + effect: function(bought) { return ExpantaNum.pow(0.9, ExpantaNum.div(bought, 2)) }, + effD: function(e) { return "^"+showNum(e) }, + }, + 35: { + unl: function() { return (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl)&&modeActive("extreme") }, + cost: function(bought) { return new ExpantaNum(150) }, + cap: new ExpantaNum(1), + desc: "Reformed Magma's effect uses a better formula.", + effect: function(bought) { return new ExpantaNum(1).times(bought) }, + effD: function(e) { return e.eq(1)?"Active":"Nothing" }, + }, + 36: { + unl: function() { return (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl)&&modeActive("extreme") }, + cost: function(bought) { return ExpantaNum.mul(100, ExpantaNum.pow(bought, 2)).plus(50) }, + target: function(points) { return points.sub(50).div(100).sqrt().plus(1).floor() }, + cap: new ExpantaNum(4), + desc: "The Knowledge cost of Reforming Magma uses a slower formula.", + effect: function(bought) { return ExpantaNum.pow(0.75, ExpantaNum.div(bought, 2)) }, + effD: function(e) { return "^"+showNum(e) }, + }, + 37: { + unl: function() { return player.elementary.foam.unl&&modeActive("extreme") }, + cost: function(bought) { return new ExpantaNum(2.3e6) }, + cap: new ExpantaNum(1), + desc: "The Extreme mode reduction to post-Elementary resource generation is nerfed.", + effect: function(bought) { return new ExpantaNum(1).times(bought) }, + effD: function(e) { return e.eq(1)?"^0.9 -> ^0.95":"^0.9 -> ^0.9" }, + }, + 38: { + unl: function() { return player.elementary.entropy.unl&&modeActive("extreme") }, + cost: function(bought) { return new ExpantaNum(4e10) }, + cap: new ExpantaNum(1), + desc: "Base Entropy gain is squared, and the first 5 Foam Boosts are unaffected by the Extreme mode nerf, but only after 45 boosts.", + effect: function(bought) { return new ExpantaNum(1).times(bought) }, + effD: function(e) { return e.eq(1)?"Active":"Nothing" }, + }, + 39: { + unl: function() { return player.elementary.entropy.unl&&modeActive("extreme") }, + cost: function(bought) { return new ExpantaNum(4e10) }, + cap: new ExpantaNum(1), + desc: "Entropy gain is increased by 50%.", + effect: function(bought) { return new ExpantaNum(1).times(bought) }, + effD: function(e) { return e.eq(1)?"Active":"Nothing" }, + }, + 40: { + unl: function() { return hasDE(6) }, + cost: function(bought) { return ExpantaNum.pow(1.1, ExpantaNum.pow(bought, 1.025)).times(1e15) }, + target: function(points) { return points.div(1e15).max(1).logBase(1.1).root(1.025).plus(1).floor() }, + cap: new ExpantaNum(200), + desc: "The Theoretical Booster cost increases 1% slower.", + effect: function(bought) { return ExpantaNum.pow(0.99, bought) }, + effD: function(e) { return showNum(e.pow(-1).sub(1).times(100))+"% slower" }, + }, + 41: { + unl: function() { return hasDE(6) }, + cost: function(bought) { return new ExpantaNum(1.2e20) }, + cap: new ExpantaNum(1), + desc: "Elementaries boost Gauge Speed.", + effect: function(bought) { + let e = player.elementary.times; + return e.times(bought).plus(1).pow(1.4) + }, + effD: function(e) { return showNum(e)+"x" }, + }, + 42: { + unl: function() { return hasDE(6) }, + cost: function(bought) { return new ExpantaNum(1.1e20) }, + cap: new ExpantaNum(1), + desc: "OoMs of Distance boost Base Knowledge gain & all Foam layers.", + effect: function(bought) { + let log = player.distance.plus(1).log10() + if (log.gte(1e11)) log = log.log10().times(1e12/12) + if (log.gte(1e9)) log = ExpantaNum.pow(1e9, log.logBase(1e9).root(10)) + return log.times(bought).plus(1).pow(1.6) + }, + effD: function(e) { return showNum(e)+"x" }, + }, } const TREE_AMT = Object.keys(TREE_UPGS).length +const G_TREE_SECTS = { + 1: function() { return true }, + 2: function() { return true }, + 3: function() { return true }, + 4: function() { return player.elementary.theory.strings.unl }, + 5: function() { return player.elementary.theory.preons.unl }, + 6: function() { return player.elementary.theory.preons.unl }, + 7: function() { return player.elementary.theory.accelerons.unl }, + 8: function() { return player.elementary.theory.accelerons.unl }, + 9: function() { return hasDE(5) }, + 10: function() { return hasDE(5) }, + 11: function() { return hasDE(5) }, + 12: function() { return player.elementary.hc.unl }, + 13: function() { return player.elementary.hc.unl }, + 14: function() { return (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl)&&modeActive("extreme") }, + 15: function() { return player.elementary.entropy.unl&&modeActive("extreme") }, +} const UNL_STR = function() { - if (hasDE(2)) return 7 + if (mltRewardActive(4)) return 10; + else if (hasDE(2)) return 7 else return 5 } -const TOTAL_STR = 7 +const TOTAL_STR = 10 const STR_REQS = { 1: new ExpantaNum(0), 2: new ExpantaNum(0.5), @@ -499,6 +702,9 @@ const STR_REQS = { 5: new ExpantaNum(1e7), 6: new ExpantaNum(1e14), 7: new ExpantaNum(DISTANCES.pc), + 8: new ExpantaNum(DISTANCES.uni).times("1e800"), + 9: new ExpantaNum(DISTANCES.uni).times("1e2650"), + 10: new ExpantaNum(DISTANCES.uni).times("1e3000"), } const STR_NAMES = { 1: "Primary", @@ -507,16 +713,33 @@ const STR_NAMES = { 4: "Quaternary", 5: "Quinary", 6: "Senary", - 7: "Septenary" + 7: "Septenary", + 8: "Octonary", + 9: "Nonary", + 10: "Dekanary", } const MAX_DARK_EXPANDERS = 5 +const MAX_DARK_EXPANDERS_MLT_3 = 10 const DARK_EXPANDER_COSTS = { 1: new ExpantaNum(40), 2: new ExpantaNum(250), 3: new ExpantaNum(600), 4: new ExpantaNum(2e3), 5: new ExpantaNum(4e3), + 6: new ExpantaNum("1.1111111111111111111111e1111"), + 7: new ExpantaNum("1e39000"), + 8: new ExpantaNum("1e46500"), + 9: new ExpantaNum("1e81725"), + 10: new ExpantaNum("1e108000"), +} +const EXTREME_DE_COSTS = { + 9: new ExpantaNum("1e68500"), + 10: new ExpantaNum("1e80500"), +} +const HD_DE_COSTS = { + 7: new ExpantaNum("1e38750"), + 8: new ExpantaNum("1e44350"), } const DARK_EXPANDER_DESCS = { 1: "Unlock a third Gluon Upgrade.", @@ -524,30 +747,68 @@ const DARK_EXPANDER_DESCS = { 3: "Unlock new Higgs Upgrades.", 4: "Unlock Graviton Boosts.", 5: "Unlock new Theory Tree Upgrades, and the Theoretical Boost formula is much slower.", + 6: "Unlock new Theory Tree Upgrades, and the Graviton Boost requirement increases half as fast when below 60.", + 7: "Accelerons now reduce the Hadron effect interval.", + 8: "The Primary String effect is squared.", + 9: "The Purge Power effect is divided by 1.01 for every Theoretical Booster, and Octonary, Nonary, & Dekanary String effects are squared.", + 10: "Unlock 2 new rows of Entropy Upgrades.", } +const ach198check = function() { return tmp.ach?tmp.ach[198].has:false }; const HC_REQ = [new ExpantaNum("e2e7").times(DISTANCES.uni), new ExpantaNum(64)] const HC_DATA = { - goal: ["text", [Number.MAX_VALUE, "e1e7"], "main"], - noTRU: ["checkbox", undefined, "pre"], - noCad: ["checkbox", undefined, "col"], - noPU: ["checkbox", undefined, "col"], - noDC: ["checkbox", undefined, "col"], - noIU: ["checkbox", undefined, "inf"], - spaceon: ["range", [0, 6], "inf"], - solaris: ["range", [0, 6], "inf"], - infinity: ["range", [0, 6], "inf"], - eternity: ["range", [0, 6], "inf"], - reality: ["range", [0, 6], "inf"], - drigganiz: ["range", [0, 6], "inf"], - noGems: ["checkbox", undefined, "inf"], - purge: ["checkbox", undefined, "inf"], - noDS: ["checkbox", undefined, "inf"], - noDB: ["checkbox", undefined, "inf"], - tv: ["range", [-1, 10], "elm"], + goal: ["text", [function() { return getHCSelector("goalMlt")?new ExpantaNum(1):Number.MAX_VALUE }, function() { return (tmp.ach?tmp.ach[198].has:false)?(getHCSelector("goalMlt")?player.bestDistance.max(1).log(DISTANCES.mlt).div(ExpantaNum.log(DISTANCES.mlt)).max(1):player.bestDistance.min("e1e9")):"e1e7" }], "main", true], // Index 0: Type, Index 1: Min/Max, Index 2: Tab, Index 3: Unlocked + goalMlt: ["checkbox", undefined, "main", ach198check], + rockets: ["checkbox", undefined, "pre", ach198check], + rf: ["checkbox", undefined, "pre", ach198check], + noTRU: ["checkbox", undefined, "pre", true], + noCad: ["checkbox", undefined, "col", true], + noPU: ["checkbox", undefined, "col", true], + noDC: ["checkbox", undefined, "col", true], + noIU: ["checkbox", undefined, "inf", true], + spaceon: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl }], + solaris: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl }], + infinity: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl }], + eternity: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl }], + reality: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl }], + drigganiz: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl }], + flamis: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl&&modeActive("extreme") }], + cranius: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl&&modeActive("extreme") }], + spectra: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl&&modeActive("extreme") }], + aqualon: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl&&modeActive("extreme") }], + nullum: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl&&modeActive("extreme") }], + quantron: ["range", [0, 6], "inf", function() { return player.elementary.theory.inflatons.unl&&modeActive("extreme") }], + noGems: ["checkbox", undefined, "inf", true], + purge: ["checkbox", undefined, "inf", true], + noDS: ["checkbox", undefined, "inf", true], + noDB: ["checkbox", undefined, "inf", true], + elm: ["checkbox", undefined, "elm", ach198check], + fermbos: ["checkbox", undefined, "elm", ach198check], + tv: ["range", [-1, function() { return (tmp.ach?tmp.ach[198].has:false)?player.elementary.theory.bestDepth.min(100).toNumber():10}], "elm", true], + sprsym: ["checkbox", undefined, "elm", ach198check], + tree: ["checkbox", undefined, "elm", ach198check], + string: ["range", [0, function() { return UNL_STR() }], "elm", ach198check], + preontb: ["checkbox", undefined, "elm", ach198check], + aclron: ["checkbox", undefined, "elm", ach198check], + de: ["range", [0, function() { return mltCompleted(3)?MAX_DARK_EXPANDERS_MLT_3:MAX_DARK_EXPANDERS}], "elm", ach198check], + infl: ["checkbox", undefined, "elm", ach198check], + rfrm: ["range", [0, 5], "elm", ach198check], + etrpy: ["checkbox", undefined, "elm", ach198check], + sky: ["checkbox", undefined, "elm", ach198check], + q1: ["checkbox", undefined, "mlt", ach198check], + q2: ["checkbox", undefined, "mlt", ach198check], + q3: ["checkbox", undefined, "mlt", ach198check], + mlt1: ["checkbox", undefined, "mlt", ach198check], + mlt2: ["checkbox", undefined, "mlt", ach198check], + mlt3: ["checkbox", undefined, "mlt", ach198check], + mlt4: ["checkbox", undefined, "mlt", ach198check], + mlt5: ["checkbox", undefined, "mlt", ach198check], } const HC_TITLE = { goal: "Challenge goal (in uni)", + goalMlt: "Challenge goal in mlt", + rockets: "You cannot gain Rockets", + rf: "You cannot gain Rocket Fuel", noTRU: "Time Reversal Upgrades do nothing", noCad: "You do not gain Cadavers", noPU: "Pathogen Upgrades do nothing", @@ -559,13 +820,42 @@ const HC_TITLE = { eternity: "Trapped in Eternity's Challenge (disabled: 0)", reality: "Trapped in Reality's Challenge (disabled: 0)", drigganiz: "Trapped in Drigganiz's Challenge (disabled: 0)", + flamis: "Trapped in Flamis's Challenge (disabled: 0)", + cranius: "Trapped in Cranius's Challenge (disabled: 0)", + spectra: "Trapped in Spectra's Challenge (disabled: 0)", + aqualon: "Trapped in Aqualon's Challenge (disabled: 0)", + nullum: "Trapped in Nullum's Challenge (disabled: 0)", + quantron: "Trapped in Quantron's Challenge (disabled: 0)", noGems: "You cannot gain Spectral Gems", purge: "Trapped in Purge", noDS: "Derivative Shifts do nothing", noDB: "Derivative Boosts do nothing", + elm: "You cannot gain Elementaries or Elementary Particles (both are reset on start)", + fermbos: "You cannot gain Fermions or Bosons (both are reset on start)", tv: "Trapped in Theoriverse Depth (disabled: -1)", + sprsym: "Supersymmetric Particles & Wave do nothing", + tree: "You cannot purchase Theory Tree Upgrades (they are respecced on start)", + string: "The last X strings do nothing (disabled: 0)", + preontb: "You cannot gain Preons or Theoretical Boosters (both are reset on start)", + aclron: "You cannot gain Accelerons (they are reset on start)", + de: "The last X Dark Expanders do nothing (disabled: 0)", + infl: "You cannot gain Inflatons (they are reset on start)", + rfrm: "You can only reform up to the (5-x)th foam (disabled: 0, they are reset on start)", + etrpy: "You cannot gain Entropy (they are reset on start, along with their upgrades)", + sky: "You cannot gain Skyrmions, Pions, or Spinors (all are reset on start)", + q1: "Multiversal Quilt 1 is disabled", + q2: "Multiversal Quilt 2 is disabled", + q3: "Multiversal Quilt 3 is disabled", + mlt1: "Trapped in Multiverse 1 (HC is always unlocked)", + mlt2: "Trapped in Multiverse 2", + mlt3: "Trapped in Multiverse 3", + mlt4: "Trapped in Multiverse 4 (stacks with Theoriverse selector)", + mlt5: "Trapped in Multiverse 5", } const HC_CHALLS = ["spaceon","solaris","infinity","eternity","reality","drigganiz"] +const HC_EXTREME_CHALLS = ["flamis","cranius","spectra","aqualon","nullum","quantron"] +const DYNAMIC_RANGE_HC_SELECTORS = Object.keys(HC_DATA).filter(a => ((HC_DATA[a][1]!==undefined)?(isFunc(HC_DATA[a][1][0])||isFunc(HC_DATA[a][1][1])):false)); +const DYNAMIC_UNLOCK_HC_SELECTORS = Object.keys(HC_DATA).filter(a => HC_DATA[a][3] !== true); const FOAM_REQ = new ExpantaNum("1e42000000") const FOAM_TABS = { @@ -668,22 +958,237 @@ const QF_NEXTLAYER_COST = { 5: new ExpantaNum(1e6), } const QFB17_TARGETS = [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] -const ENTROPY_UPGS = 8 +const ENTROPY_UPGS = 35 const ENTROPY_UPG_COSTS = { 1: new ExpantaNum(4), 2: new ExpantaNum(10), 3: new ExpantaNum(25), 4: new ExpantaNum(100), + 21: new ExpantaNum(104), + 5: new ExpantaNum(135), 6: new ExpantaNum(150), 7: new ExpantaNum(215), 8: new ExpantaNum(235), + 22: new ExpantaNum(525), + + 9: new ExpantaNum(550), + 10: new ExpantaNum(700), + 11: new ExpantaNum(1500), + 12: new ExpantaNum(1750), + 23: new ExpantaNum(6000), + + 13: new ExpantaNum(1800), + 14: new ExpantaNum(2350), + 15: new ExpantaNum(2425), + 16: new ExpantaNum(2475), + 24: new ExpantaNum(9000), + + 17: new ExpantaNum(11111), + 18: new ExpantaNum(12e3), + 19: new ExpantaNum(17500), + 20: new ExpantaNum(18250), + 25: new ExpantaNum(30000), + + 26: new ExpantaNum(250000), + 27: new ExpantaNum(282500), + 28: new ExpantaNum(420000), + 29: new ExpantaNum(482500), + 34: new ExpantaNum(5e8), + + 30: new ExpantaNum(580000), + 31: new ExpantaNum(1.03e6), + 32: new ExpantaNum(1.125e6), + 33: new ExpantaNum(1.133e6), + 35: new ExpantaNum(7.75e8), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, 3: function() { return ExpantaNum.pow(1.0015, player.rf) }, 4: function() { return (tmp.elm?tmp.elm.entropy.omega:false)?(tmp.elm.entropy.omega.times(2)):new ExpantaNum(0) }, 5: function() { return ExpantaNum.pow(1.03, player.elementary.theory.preons.boosters) }, - 7: function() { return player.elementary.hc.hadrons.plus(1).times(10).slog(10).times(25) }, + 7: function() { return player.elementary.hc.hadrons.plus(1).times(10).slog(10).times(modeActive("extreme")?75:25) }, 8: function() { return player.elementary.theory.accelerons.amount.plus(1).times(player.elementary.theory.inflatons.amount.plus(1)).log10().plus(1).log10().plus(1).sqrt() }, -} \ No newline at end of file + 9: function() { return player.elementary.sky.amount.plus(1).logBase(2).times(3).plus(1) }, + 14: function() { return player.elementary.entropy.best.plus(1).log10().sqrt().div(6).plus(1) }, + 19: function() { return player.elementary.hc.hadrons.plus(1).log10().plus(1).log10().plus(1).pow(10) }, + 21: function() { return modeActive("extreme")?player.magma.amount.cbrt().times(75):new ExpantaNum(0) }, + 24: function() { return player.elementary.entropy.best.plus(1).root(14) }, + 26: function() { return ExpantaNum.pow(10, player.elementary.entropy.amount.plus(1).log10().root(4)) }, + 27: function() { return player.elementary.entropy.best.plus(1).log10().plus(1) }, + 28: function() { return player.elementary.hc.claimed.plus(1) }, + 29: function() { return (tmp.elm?tmp.elm.entropy.omega:false)?(tmp.elm.entropy.omega.plus(1)):new ExpantaNum(1) }, + 30: function() { return player.elementary.foam.amounts[0].plus(1).log10().pow(.8) }, + 31: function() { return ExpantaNum.pow(player.elementary.entropy.upgrades.length+1, Math.sqrt(player.elementary.entropy.upgrades.length*2)) }, +} +const ENTROPY_UPG_AUTO_ORDER = [1,2,3,4,21, + 5,6,7,8,22, + 9,10,11,12, + 13,14,15,16, + 23,24, + 17,18,19,20,25, + 26,27,28,29, + 30,31,32,33, + 34,35]; + +const SKY_REQ = [ + "4.4e108000026", + "1e575", + "1e550" +] +const SKY_TABS = { + skyrmions() { return true }, + pions() { return true }, + spinors() { return true }, +} +const KEEP_ENTUPGS_SKY = [1, 10, 11, 12, 13, 16, 17, 20] +const SKY_FIELD_UPGS_REQS = [1, 5, 20, 100, 750, 2500, 4000] +const SKY_FIELDS = { + upgs: 13, + placements: [[8],[10,2,3,11],[6,1,7],[12,4,5,13],[9]], + 1: { + req: 1, + pionDesc: "All Rank/Tier scalings start later based on your Pions.", + spinorDesc: "Add to all Foam Boosts based on your Spinors.", + baseCost: new ExpantaNum(100), + costMult: new ExpantaNum(5), + pionEff(bought) { return player.elementary.sky.pions.amount.plus(1).log10().div(5).pow(0.8).times(25).times(ExpantaNum.sqrt(bought)) }, + spinorEff(bought) { return player.elementary.sky.spinors.amount.plus(1).log10().plus(1).log10().times(ExpantaNum.pow(bought, 1/4)) }, + desc(eff) { return "+"+showNum(eff) }, + }, + 2: { + req: 5, + pionDesc: "Pathogen Upgrades are stronger (unaffected by softcap).", + spinorDesc: "Graviton Boosts are stronger.", + baseCost: new ExpantaNum(1e4), + costMult: new ExpantaNum(20), + pionEff(bought) { return ExpantaNum.mul(ExpantaNum.sqrt(bought), 0.15).plus(1).pow(0.8) }, + spinorEff(bought) { return ExpantaNum.mul(ExpantaNum.sqrt(bought), 0.4).plus(1).pow(0.9) }, + desc(eff) { return showNum(eff.sub(1).times(100))+"% stronger" }, + }, + 3: { + req: 5, + pionDesc: "Skyrmions boost Purge Power gain.", + spinorDesc: "Skyrmions boost Entropy gain.", + baseCost: new ExpantaNum(1e4), + costMult: new ExpantaNum(100), + pionEff(bought) { return player.elementary.sky.amount.plus(1).log10().plus(1).log10().times(ExpantaNum.sqrt(bought)).sqrt().plus(1) }, + spinorEff(bought) { return player.elementary.sky.amount.plus(1).log10().times(ExpantaNum.sqrt(bought)).plus(1).sqrt() }, + desc(eff) { return showNum(eff)+"x" }, + }, + 4: { + req: 20, + pionDesc: "The Cadaver effect is stronger.", + spinorDesc: "The Skyrmion effect is stronger.", + baseCost: new ExpantaNum(1e5), + costMult: new ExpantaNum(10), + pionEff(bought) { return ExpantaNum.mul(ExpantaNum.sqrt(bought), .2).plus(1) }, + spinorEff(bought) { return ExpantaNum.mul(ExpantaNum.pow(bought, .4), .25).plus(1) }, + desc(eff) { return showNum(eff.sub(1).times(100))+"% stronger" }, + }, + 5: { + req: 20, + pionDesc: "Skyrmions boost Dark Flow.", + spinorDesc: "Skyrmions boost Supersymmetric Particle gain.", + baseCost: new ExpantaNum(1e5), + costMult: new ExpantaNum(10), + pionEff(bought) { + let base = player.elementary.sky.amount.plus(1).pow(bought); + if (base.gte(1e60)) base = ExpantaNum.pow(10, base.log10().times(60).sqrt()) + return base.pow(400) + }, + spinorEff(bought) { + let base = player.elementary.sky.amount.plus(1).pow(bought) + if (base.gte(1e60)) base = ExpantaNum.pow(10, base.log10().times(60).sqrt()) + return base.pow(10) + }, + desc(eff) { return showNum(eff)+"x" }, + }, + 6: { + req: 100, + pionDesc: "Ranks boost Pion & Spinor gain.", + spinorDesc: "Elementary Particles boost Pion & Spinor gain.", + baseCost: new ExpantaNum(1e6), + costMult: new ExpantaNum(1e3), + pionEff(bought) { return player.rank.max(1).pow(bought) }, + spinorEff(bought) { return player.elementary.particles.plus(1).log10().times(50).plus(1).pow(bought) }, + desc(eff) { return showNum(eff)+"x" }, + }, + 7: { + req: 100, + pionDesc: "Derivative Boosts are stronger based on their amount.", + spinorDesc: "Ω Particles are stronger based on their amount.", + baseCost: new ExpantaNum(1e6), + costMult: new ExpantaNum(15), + pionEff(bought) { return player.inf.derivatives.unlocks.div(10).times(bought).plus(1).sqrt() }, + spinorEff(bought) { return tmp.elm.entropy.omega.div(10).times(bought).plus(1).sqrt() }, + desc(eff) { return showNum(eff.sub(1).times(100))+"% stronger" }, + }, + 8: { + req: 750, + pionDesc: "All Spinor Upgrades are cheaper.", + spinorDesc: "All Pion Upgrades are cheaper.", + baseCost: new ExpantaNum(1e20), + costMult: new ExpantaNum(1e5), + pionEff(bought) { return ExpantaNum.pow(100, bought) }, + spinorEff(bought) { return ExpantaNum.pow(100, bought) }, + desc(eff) { return showNum(eff)+"x cheaper" }, + }, + 9: { + req: 750, + pionDesc: 'The "Time Doesnt Exist" effect is raised to an exponent.', + spinorDesc: "The Entropy effect is raised to an exponent.", + baseCost: new ExpantaNum(1e24), + costMult: new ExpantaNum(1e6), + pionEff(bought) { return ExpantaNum.add(bought, 1).log10().times(10).plus(1) }, + spinorEff(bought) { return ExpantaNum.add(bought, 1).log10().times(2).plus(1) }, + desc(eff) { return "^"+showNum(eff) }, + }, + 10: { + req: 2500, + pionDesc: "Tiers use a weaker cost formula, but only if they're not scaled in any way.", + spinorDesc: "Entropy uses a weaker requirement formula.", + baseCost: new ExpantaNum(1e38), + costMult: new ExpantaNum(1e5), + pionEff(bought) { return ExpantaNum.sub(.8, ExpantaNum.div(.8, ExpantaNum.add(ExpantaNum.mul(bought, 2), 1).log10().div(2).plus(1))) }, + spinorEff(bought) { return ExpantaNum.sub(.75, ExpantaNum.div(.75, ExpantaNum.add(ExpantaNum.mul(bought, 2), 1).log10().plus(1))) }, + desc(eff) { return showNum(eff.times(100))+"% weaker" }, + }, + 11: { + req: 2500, + pionDesc: "Pathogen Upgrade 1's effect is multiplied.", + spinorDesc: "Gauge Speed is raised to an exponent.", + baseCost: new ExpantaNum(1e38), + costMult: new ExpantaNum(1e5), + pionEff(bought) { return ExpantaNum.add(ExpantaNum.mul(bought, 2), 1).log10().times(5).plus(1) }, + spinorEff(bought) { return ExpantaNum.add(ExpantaNum.mul(bought, 2), 1).log10().times(2).plus(1) }, + desc(eff) { return showNum(eff) }, + }, + 12: { + req: 4000, + pionDesc: "The Cadaver effect is raised to an exponent.", + spinorDesc: "The Skyrmion effect is multiplied.", + baseCost: new ExpantaNum(1e43), + costMult: new ExpantaNum(1e12), + pionEff(bought) { + if (bought.gte(3)) bought = bought.logBase(3).plus(2); + return ExpantaNum.add(ExpantaNum.cbrt(bought), 1).pow(11) + }, + spinorEff(bought) { + if (bought.gte(2)) bought = bought.logBase(2).plus(1).root(5) + return ExpantaNum.add(bought, 1).pow(1.65) + }, + desc(eff) { return showNum(eff) }, + }, + 13: { + req: 4000, + pionDesc: "The Perk Accelerator is stronger based on your Inflatons.", + spinorDesc: "The second Inflaton effect is stronger based on your Ascension Power.", + baseCost: new ExpantaNum(1e43), + costMult: new ExpantaNum(1e12), + pionEff(bought) { return player.elementary.theory.inflatons.amount.plus(1).log10().div(1e3).sqrt().times(bought).plus(1).root(5) }, + spinorEff(bought) { return player.inf.ascension.power.plus(1).log10().div(1e3).sqrt().times(bought).plus(1).sqrt() }, + desc(eff) { return showNum(eff.sub(1).times(100))+"% stronger" }, + }, +} +const GREEK_LETTERS = [null, "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega"]; \ No newline at end of file diff --git a/js/constants/format.js b/js/constants/format.js index 272c54ed..01d25968 100644 --- a/js/constants/format.js +++ b/js/constants/format.js @@ -10,9 +10,14 @@ const DISTANCES = { kpc: 3.086e19, Mpc: 3.086e22, Gpc: 3.086e25, - uni: 4.4e26 + uni: 4.4e26, + mlt: "4.4e1000000026", }; +const DISTANCE_TYPES = { + mlt: "log", +} + const TIMES = { ms: 1 / 1000, s: 1, diff --git a/js/constants/inf.js b/js/constants/inf.js index 037ade20..a727afb0 100644 --- a/js/constants/inf.js +++ b/js/constants/inf.js @@ -226,8 +226,7 @@ const INF_UPGS = { "7;4": "inf2;3 & inf3;2 are stronger based on your Pathogens.", "7;5": "The fifth Pathogen Upgrade boosts itself.", "7;6": "Dark Flow is increased by 20% for every Dark Core.", - "7;7": - "Unlock Accelerational Energy, which is created based on your Ranks & Tiers, and boosts your Velocital Energy, which in turn boosts your Time Speed.", + "7;7": "Unlock Accelerational Energy, which is created based on your Ranks & Tiers, and boosts your Velocital Energy, which in turn boosts your Time Speed.", "7;8": "Spectral Gems, Angels, & Demons boost Dark Flow.", "7;9": "Hyper Rank scaling is 2% weaker.", "7;10": "The W Boson boost to Z Boson gain uses a better formula.", @@ -665,7 +664,8 @@ const INF_UPGS = { if (ret.gte(0.9)) ret = new ExpantaNum(0.9) return ret; } else if (type=="snp") { - return player.distance.plus(1).log10().plus(1).pow(10) + if (hasMltMilestone(16)) return ExpantaNum.pow(10, player.distance.log10().root(1.15)).max(player.distance.plus(1).log10().plus(1).pow(10)) + else return player.distance.plus(1).log10().plus(1).pow(10) } }, "10;2": function() { @@ -698,6 +698,14 @@ const INF_UPGS = { if (tmp.elm) if (tmp.elm.bos.hasHiggs("5;0;5")) { base1 = base1.plus(ranks.plus(1).log10().div(10)) base2 = base2.plus(tiers.plus(1).log10().div(4)) + if (modeActive("hikers_dream")) { + base2 = base2.log10().plus(1) + tiers = tiers.times(tiers) + } + } + if (modeActive("hikers_dream") && tmp.ach) if (tmp.ach[145].has) { + base1 = base1.log10().plus(1) + ranks = ranks.times(ranks.div(200).plus(1)) } let ret = ExpantaNum.pow(base1, ranks).times(ExpantaNum.pow(base2, tiers)) return ret @@ -709,16 +717,16 @@ const INF_TABS = { return true; }, ascension: function () { - return player.inf.endorsements.gte(10); + return player.inf.endorsements.gte(10) && !(mltActive(3) && player.mlt.mlt3selected.length>=1 && !player.mlt.mlt3selected.includes("ascension")); }, stadium: function () { - return player.inf.endorsements.gte(15); + return player.inf.endorsements.gte(15) && !(mltActive(3) && player.mlt.mlt3selected.length>=1 && !player.mlt.mlt3selected.includes("stadium")); }, pantheon: function () { - return player.inf.endorsements.gte(21); + return player.inf.endorsements.gte(21) && !(mltActive(3) && player.mlt.mlt3selected.length>=1 && !player.mlt.mlt3selected.includes("pantheon")); }, derivatives: function () { - return player.inf.derivatives.unl; + return player.inf.derivatives.unl && !(mltActive(3) && player.mlt.mlt3selected.length>=1 && !player.mlt.mlt3selected.includes("derivatives")); } }; @@ -786,6 +794,7 @@ const STADIUM_REWARDS = { drigganiz: "Pathogen Upgrades are 0.75% stronger for every achievement you have.", effects: { spaceon: function () { + if (mltRewardActive(1)) return MLT_1_STADIUM_REWARDS.effects.spaceon(); let mult = tmp.inf.pantheon.chipBoost; let ret = player.rockets.plus(1).log10().plus(1).log().pow(2.25).plus(1); if (ret.gte(30)) ret = ret.logBase(30).times(30).min(ret); @@ -794,6 +803,7 @@ const STADIUM_REWARDS = { return ret; }, solaris: function () { + if (mltRewardActive(1)) return MLT_1_STADIUM_REWARDS.effects.solaris(); let mult = tmp.inf.pantheon.chipBoost; let ret = player.collapse.cadavers.plus(1).slog(10).pow(3.25); if (ret.gte(15)) ret = ret.logBase(15).times(15).min(ret); @@ -801,6 +811,7 @@ const STADIUM_REWARDS = { return ret; }, eternity: function () { + if (mltRewardActive(1)) return MLT_1_STADIUM_REWARDS.effects.eternity(); let mult = tmp.inf.pantheon.chipBoost; let base = player.inf.endorsements.plus(1).times(player.inf.ascension.power.plus(1).slog(10).plus(1)); let exp = player.inf.endorsements.div(15).plus(1).logBase(2).plus(1).pow(7); @@ -812,6 +823,7 @@ const STADIUM_REWARDS = { return ret.max(1); }, drigganiz: function () { + if (mltRewardActive(1)) return MLT_1_STADIUM_REWARDS.effects.drigganiz(); let ret = ExpantaNum.mul(0.0075, player.achievements.length); return ret; } @@ -1019,6 +1031,8 @@ const EXTREME_STADIUM_DATA = { const DERV = ["distance", "velocity", "acceleration", "jerk", "snap"]; const DERV_INCR = ["acceleration", "jerk", "snap"]; +const DERV_MLT_2 = ["distance", "velocity", "acceleration", "jerk", "snap", "crackle", "pop", "lock", "drop", "shot", "put"]; +const DERV_INCR_MLT_2 = ["acceleration", "jerk", "snap", "crackle", "pop", "lock", "drop", "shot", "put"]; // More Extreme Stuff @@ -1048,4 +1062,23 @@ const EXTREME_INF_UPG_COST_MODS = { "9;8": new ExpantaNum(1e4), "1;9": new ExpantaNum(3e3), "2;9": new ExpantaNum(3e3), + "1;10": new ExpantaNum(1e-15), + "2;10": new ExpantaNum(2e-14), + "3;10": new ExpantaNum(3e-13), + "4;10": new ExpantaNum(4e-12), + "5;10": new ExpantaNum(5e-11), + "6;10": new ExpantaNum(6e-10), + "7;10": new ExpantaNum(7e-9), + "8;10": new ExpantaNum(8e-8), + "9;10": new ExpantaNum(9e-7), + "10;1": new ExpantaNum(1e-15), + "10;2": new ExpantaNum(2e-14), + "10;3": new ExpantaNum(3e-13), + "10;4": new ExpantaNum(4e-12), + "10;5": new ExpantaNum(5e-11), + "10;6": new ExpantaNum(6e-10), + "10;7": new ExpantaNum(7e-9), + "10;8": new ExpantaNum(8e-8), + "10;9": new ExpantaNum(9e-7), + "10;10": new ExpantaNum(1e-5), } \ No newline at end of file diff --git a/js/constants/layers.js b/js/constants/layers.js index 0aff196f..12104dee 100644 --- a/js/constants/layers.js +++ b/js/constants/layers.js @@ -19,7 +19,22 @@ const LAYER_RESETS = { "pathogens", "dc", "inf" - ] + ], + multiverse: [ + "distance", + "velocity", + "rank", + "tier", + "rockets", + "rf", + "tr", + "automation", + "collapse", + "pathogens", + "dc", + "inf", + "elementary" + ], }; const LAYER_RESETS_EXTRA = { @@ -30,7 +45,8 @@ const LAYER_RESETS_EXTRA = { rf: [], collapse: ["energy", "canRefill", "rankCheap", "furnace"], inf: ["energy", "canRefill", "rankCheap", "furnace", "activeFC"], - elementary: ["energy", "canRefill", "rankCheap", "furnace", "activeFC", "furnChalls", "extremeStad"] + elementary: ["energy", "spentMotive", "energyUpgs", "canRefill", "geners", "genLvl", "spentMotiveGens", "bestMotive", "rankCheap", "furnace", "activeFC", "furnChalls", "extremeStad"], + multiverse: ["energy", "spentMotive", "energyUpgs", "canRefill", "geners", "genLvl", "spentMotiveGens", "bestMotive", "rankCheap", "furnace", "activeFC", "furnChalls", "extremeStad", "magma", "plasma"], }; const LAYER_REQS = { @@ -44,7 +60,8 @@ const LAYER_REQS = { ["rockets", new ExpantaNum("1e300000")], ["cadavers", new ExpantaNum("1e30000")], ["endorsements", 36] - ] + ], + multiverse: ["distance", DISTANCES.mlt], }; const LAYER_FP = { @@ -54,7 +71,8 @@ const LAYER_FP = { rf: 1, collapse: 0.1, inf: 1, - elementary: 1 + elementary: 1, + multiverse: 1, }; const LAYER_SC = { @@ -64,5 +82,18 @@ const LAYER_SC = { rf: new ExpantaNum(1 / 0), collapse: new ExpantaNum(100), inf: new ExpantaNum(1 / 0), - elementary: new ExpantaNum(1 / 0) + elementary: new ExpantaNum(1 / 0), + multiverse: new ExpantaNum(1 / 0), }; + +const LAYER_RESETS_NOTHING = { + rank() { return tmp.collapse ? hasCollapseMilestone(12) : false }, + rankCheap() { return tmp.ach[112].has }, + tier() { return player.tr.upgrades.includes(14) && !HCCBA("noTRU") }, + rockets() { return false }, + rf() { return modeActive("extreme") ? (player.tr.upgrades.includes(17) && !HCCBA("noTRU")) : player.inf.unl }, + collapse() { return false }, + inf() { return false }, + elementary() { return false }, + multiverse() { return false }, +} \ No newline at end of file diff --git a/js/constants/mlt.js b/js/constants/mlt.js new file mode 100644 index 00000000..24fc4418 --- /dev/null +++ b/js/constants/mlt.js @@ -0,0 +1,222 @@ +const MLT_TABS = { + mltMap: function() { + return true; + }, + mltMilestones: function() { + return true; + }, + quilts: function() { + return true; + }, +}; + +const MULIVERSE_ENERGY_BASE = 2; + +const MULTIVERSES = 5; + +const MLT_DATA = { + 0: { + desc: "The normal multiverse you've been accustomed to.", + req: new ExpantaNum(0), + }, + 1: { + desc: "You can only unlock 2 of the following: Theory, Hadronic Challenge, Quantum Foam, and Skyrmions (unlock them by opening their tabs). Normal Stadium Challenge completions are also reset.", + reward: "Normal Stadium Challenge rewards are much stronger, but their challenge goals are much higher. Distance boosts Skyrmion gain.", + effect: function() { return player.distance.plus(1).log10().plus(1).logBase(3).plus(1) }, + effectDesc: function(e) { return showNum(e)+"x" }, + req: new ExpantaNum(5), + }, + 2: { + desc: "Maximum Velocity is forced to be active, Pion & Spinor Fields are 40% weaker, and Time Speed & Maximum Velocity are brought to the 1.3th root.", + reward: "Every third Derivative Boost gives you an extra Derivative Shift (maxes at 6 shifts).", + req: new ExpantaNum(20), + }, + 3: { + desc: "You can only unlock 1 of the following: Ascension, Stadium, Pantheon, and Derivatives (unlock them by opening their tabs). Quark & Lepton exponents are set to 0, and Entropy is disabled.", + reward: "There are 5 new Dark Expanders", + req: new ExpantaNum(100), + }, + 4: { + desc: "You are always trapped in the Theoriverse at Depth 4.5 (unaffected by any depth reductions), which also affects Pion & Spinor gain.", + extremeDesc: "You are always trapped in the Theoriverse at Depth 4.25 (unaffected by any depth reductions), which also affects Pion & Spinor gain.", + reward: "Unlock 3 new Strings.", + req: new ExpantaNum(400), + }, + 5: { + desc: "Time Speed is brought to the 3.6th root.", + extremeDesc: "Time Speed is brought to the 2.7th root.", + reward: "The Purge Power effect goes below zero, and unlock Phantoms (a new Pantheon section). Heavenly Chip & Demonic Soul effects are much stronger.", + req: new ExpantaNum(2e3), + }, +} + +const MLT_MILESTONE_NUM = 24; + +const MLT_MILESTONES = [ + { + req: new ExpantaNum(1), + desc: "Keep Higgs Upgrades on reset (except the ones that are unlocked through a Dark Expander)", + extremeDesc: "Keep Higgs Upgrades on reset (except the ones that are unlocked through a Dark Expander), and unlock Auto-Magma.", + }, { + req: new ExpantaNum(2), + desc: "Keep Entropy Upgrades on reset (but only the ones that are kept on Skyrmion resets), and start with 1 Elementary", + }, { + req: new ExpantaNum(3), + desc: "Start with Bosons unlocked, and keep Theory Unlocks, Dark Expanders, and all Higgs Upgrades on reset", + hdDesc: "Start with Bosons unlocked, and keep Theory Unlocks, Dark Expanders, all Higgs Upgrades, and Energy Upgrades on reset", + }, { + req: new ExpantaNum(4), + desc: "Unlock Auto-Theoriverse, but you cannot enter the Theoriverse manually. Foam autobuyers are always unlocked, Reforming Foam resets nothing, and can be done in bulk.", + }, { + req: new ExpantaNum(5), + desc: "Keep your best Hadronic Score on reset", + }, { + req: new ExpantaNum(6), + desc: "Multiversal Quilt II's second effect also affects Pion & Spinor gain.", + }, { + req: new ExpantaNum(7), + desc: "Gain 100% of Elementaries gained on reset every second", + }, { + req: new ExpantaNum(8), + desc: "Unlock Auto-Pion Field", + extremeDesc: "Unlock Auto-Pion Field & Auto-Plasma Boosts", + }, { + req: new ExpantaNum(9), + desc: "Unlock Auto-Spinor Field", + }, { + req: new ExpantaNum(10), + desc: "Gain 100% of Skyrmions gained on reset every second", + extremeDesc: "Gain 100% of Skyrmions gained on reset every second, and the Coal effect is squared.", + }, { + req: new ExpantaNum(12), + desc: "Unspent Multiversal Energy reduces base Skyrmion requirements.", + effect: function() { + let e = player.mlt.energy + if (e.gte(100)) e = ExpantaNum.pow(10, e.log10().times(2).sqrt()) + return e.plus(1).logBase(1.6).plus(1).sqrt().min(1e3); + }, + effectDesc: function() { return "Distance: "+formatDistance(SKY_REQ[0])+" -> "+formatDistance(getSkyReqData(0, "mlt"))+"
    Quark Req: "+showNum(SKY_REQ[1])+" -> "+showNum(getSkyReqData(1, "mlt"))+"
    Lepton Req: "+showNum(SKY_REQ[2])+" -> "+showNum(getSkyReqData(2, "mlt")) }, + }, { + req: new ExpantaNum(16), + desc: "Total Multiversal Energy reduces the Ω Particle requirement increase.", + effect: function() { return player.mlt.totalEnergy.plus(1).log10().plus(1).log10().plus(1) }, + effectDesc: function() { return "Currently: "+showNum(2)+" -> "+showNum(ExpantaNum.root(2, tmp.mlt.mil12reward||1)) }, + }, { + req: new ExpantaNum(25), + desc: "The Theory Tree Upgrades that boost String effects have their limit increased by 5, and the Graviton effect is raised to the power of 15.", + extremeDesc: "The Theory Tree Upgrades that boost String effects have their limit increased by 5, the Graviton effect is raised to the power of 15, and increase the base Plasma exponent by your Derivative Boosts.", + }, { + req: new ExpantaNum(40), + desc: "All Quark/Lepton effects are always active, and always gain Purge Power automatically.", + extremeDesc: "All Quark/Lepton effects are always active, always gain Purge Power automatically, and gain 10x more White Flame.", + }, { + req: new ExpantaNum(100), + desc: "Atomic Rank scaling is weaker based on your Tiers.", + effect: function() { return ExpantaNum.div(1, player.tier.plus(1).logBase(6).plus(1)) }, + effectDesc: function() { return "Currently: -"+showNum(ExpantaNum.sub(1, tmp.mlt.mil15reward).times(100)||0)+"%" }, + }, { + req: new ExpantaNum(180), + desc: "inf10;1 always affects the last Derivative, and its effect uses a better formula.", + }, { + req: new ExpantaNum(300), + desc: "Multiversal Quilt Upgrade effects are increased based on your Distance.", + extremeDesc: "Multiversal Quilt Upgrade effects are increased based on your Distance, and gain 100x more White Flame.", + effect: function() { return player.distance.max(1).logBase(DISTANCES.mlt).plus(1).logBase(2).times(0.01) }, + effectDesc: function() { return "Currently: +"+showNum(tmp.mlt.mil17reward.times(100)||0)+"%" }, + }, { + req: new ExpantaNum(1.25e3), + desc: "Foam effect exponents are increased by 0.05.", + extremeDesc: "Foam effect exponents are increased by 0.05, and gain 20x more White Flame for each Multiverse Milestone from this point onward.", + }, { + req: new ExpantaNum(1.75e3), + desc: "The First String's effect also multiplies Acceleron gain.", + extremeDesc: "All String effects & Supersymmetric Particle effects multiply Acceleron gain.", + }, { + req: new ExpantaNum(5e3), + desc: "Entangled Strings & Quantum Foam boost Pion & Spinor gain, respectively.", + effect: function() { + return { + pion: ExpantaNum.pow(10, player.elementary.theory.strings.entangled.plus(1).log10().root(4)), + spinor: ExpantaNum.pow(10, player.elementary.foam.amounts[0].plus(1).log10().root(4)), + } + }, + effectDesc: function() { return "Pions: "+showNum(tmp.mlt.mil20reward.pion)+"x
    Spinors: "+showNum(tmp.mlt.mil20reward.spinor)+"x" }, + }, { + req: new ExpantaNum(1e4), + desc: "Auto-Foam Unlocks occur every tick instead of every second, and Re-forming Protoversal Foam cost scaling is 20% weaker.", + }, { + req: new ExpantaNum(2e5), + desc: "Foam Size Upgrades cost less based on your total Foam Size Upgrades bought.", + effect: function() { + let total = player.elementary.foam.upgrades.reduce((a,c) => ExpantaNum.add(a, c)); + return ExpantaNum.pow(10, total.plus(1).log10().pow(4)); + }, + effectDesc: function() { return "Currently: /"+showNum(tmp.mlt.mil22reward) }, + }, { + req: new ExpantaNum(1e6), + desc: "Hyper Rank scaling starts 250 later if you are in Multiverse Prime.", + }, { + req: new ExpantaNum(2.5e7), + desc: "Entropy Upgrades cost less based on your Total Multiversal Energy.", + effect: function() { return player.mlt.totalEnergy.plus(1).log10().plus(1).root(5) }, + effectDesc: function() { return "Currently: /"+showNum(tmp.mlt.mil24reward) }, + }, +] + +const MLT_1_STADIUM_REWARDS = { + spaceon: "inf1;1 is stronger based on your Rockets & Rocket Fuel.", + solaris: "Superscaled Rank & Pathogen Upgrade scalings start later based on your Cadavers.", + infinity: "The Rocket Fuel effect is 10x as powerful, and uses a better formula.", + eternity: "Endorsements & Ascension Power make Ranks boost Time Speed.", + reality: "Rockets, Time Cubes, & Dark Cores are 8x as powerful.", + drigganiz: "Pathogen Upgrades are stronger based on your achievements gotten.", + effects: { + spaceon: function () { + let mult = tmp.inf.pantheon.chipBoost; + let ret = player.rockets.plus(1).log10().plus(1).log().pow(2.25).plus(1); + if (ret.gte(30)) ret = ret.logBase(30).times(30).min(ret); + ret = ret.times(mult); + if (player.modes.includes("extreme")) ret = ret.plus(1).log10().plus(1).log10().div(10).plus(1) + return ret.times(player.rf.times(10).plus(1)); + }, + solaris: function () { + let mult = tmp.inf.pantheon.chipBoost; + let ret = player.collapse.cadavers.plus(1).log10().plus(1).log10().pow(3.25); + if (ret.gte(15)) ret = ret.logBase(15).times(15).min(ret); + ret = ret.times(mult); + return ret; + }, + eternity: function () { + let mult = tmp.inf.pantheon.chipBoost; + let base = player.inf.endorsements.plus(1).times(player.inf.ascension.power.plus(1).log10().plus(1).sqrt()); + let exp = player.inf.endorsements.div(10).plus(1).logBase(1.75).plus(1).pow(9); + let totalExp = base.pow(exp); + if (totalExp.gte("1e50000")) + totalExp = totalExp.log10().times(ExpantaNum.div("1e50000", ExpantaNum.log10("1e50000"))); + let ret = player.rank.pow(totalExp.logBase(2)); + ret = ret.pow(mult); + return ret.times(ExpantaNum.pow(10, 1e6)).max(1); + }, + drigganiz: function () { + let ret = ExpantaNum.mul(0.015+0.0001*player.achievements.length, player.achievements.length); + return ret; + } + }, + disp: { + spaceon: function () { + return "^" + showNum(STADIUM_REWARDS.effects.spaceon()); + }, + solaris: function () { + return "+" + showNum(STADIUM_REWARDS.effects.solaris()); + }, + eternity: function () { + return "x" + showNum(STADIUM_REWARDS.effects.eternity()); + }, + drigganiz: function () { + return "+" + showNum(STADIUM_REWARDS.effects.drigganiz().times(100)) + "%"; + } + } +} + +const MLT_1_ETERNITY_GOAL_EXP = new ExpantaNum(8e3) +const MLT_1_STADIUM_GOAL_EXP = new ExpantaNum(1.5e5) \ No newline at end of file diff --git a/js/constants/modes.js b/js/constants/modes.js index 0ed348e9..480e06f9 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -1,136 +1,421 @@ -const COMBOS = { - hard_aau: { - balancing: "same as hard mode, but faster", +const MODEBALANCES = { + hard: { // 1 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + aau: { // 2 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + aau_hard: { // 3 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + na: { // 4 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + na_hard: { // 5 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na: { // 6 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_hard: { // 7 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd: { // 8 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_hard: { // 9 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_aau: { // 10 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_aau_hard: { // 11 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_na: { // 12 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_na_hard: { // 13 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na: { // 14 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_hard: { // 15 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + easy: { // 16 + balancing: "balanced up to endgame", balanceCheck: false }, - hard_na: { - balancing: "almost balanced (late game is quite slow)", + easy_hard: { // 17 + balancing: "balanced up to endgame", balanceCheck: false }, - aau_na: { - balancing: "slightly faster than normal", + aau_easy: { // 18 + balancing: "balanced up to endgame", balanceCheck: false }, - absurd: { - balancing: "completely impossible", - balanceCheck: true + aau_easy_hard: { // 19 + balancing: "balanced up to endgame", + balanceCheck: false }, - easy: { - balancing: "balanced up to Elementary", + na_easy: { // 20 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + na_easy_hard: { // 21 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_easy: { // 22 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_easy_hard: { // 23 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_easy: { // 24 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_easy_hard: { // 25 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_aau_easy: { // 26 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_aau_easy_hard: { // 27 + balancing: "balanced up to endgame", balanceCheck: false }, - easy_hard: { - balancing: "balanced up to Elementary", + absurd_na_easy: { // 28 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_na_easy_hard: { // 29 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_easy: { // 30 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_easy_hard: { // 31 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + extreme: { // 32 + balancing: "balanced up to endgame", balanceCheck: false }, - extreme: { - balancing: "balanced up to Elementary", + aau_extreme: { // 33 + balancing: "balanced up to endgame", balanceCheck: false }, - hikers_dream: { - balancing: "balanced up to Elementary", + na_extreme: { // 34 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_extreme: { // 35 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_extreme: { // 36 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_aau_extreme: { // 37 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_na_extreme: { // 38 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_extreme: { // 39 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + easy_extreme: { // 40 + balancing: "balanced up to endgame", + balanceCheck: false + }, + aau_easy_extreme: { // 41 + balancing: "balanced up to endgame", + balanceCheck: false + }, + na_easy_extreme: { // 42 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_easy_extreme: { // 43 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_easy_extreme: { // 44 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_aau_easy_extreme: { // 45 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_na_easy_extreme: { // 46 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_easy_extreme: { // 47 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + hikers_dream: { // 48 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + hard_hikers_dream: { // 49 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_hikers_dream: { // 50 + balancing: "balanced up to endgame", balanceCheck: false, }, + aau_hard_hikers_dream: { // 51 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + na_hikers_dream: { // 52 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + na_hard_hikers_dream: { // 53 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_hikers_dream: { // 54 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_hard_hikers_dream: { // 55 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_hikers_dream: { // 56 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_hard_hikers_dream: { // 57 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_hikers_dream: { // 58 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_aau_hard_hikers_dream: { // 59 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_na_hikers_dream: { // 60 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_na_hard_hikers_dream: { // 61 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_hikers_dream: { // 62 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_hard_hikers_dream: { // 63 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + easy_hikers_dream: { // 64 + balancing: "balanced up to endgame", + balanceCheck: false + }, + easy_hard_hikers_dream: { // 65 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_easy_hikers_dream: { // 66 + balancing: "balanced up to endgame", + balanceCheck: false + }, + na_easy_hikers_dream: { // 67 + balancing: "balanced up to endgame", + balanceCheck: false + }, + na_easy_hard_hikers_dream: { // 68 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_easy_hard_hikers_dream: { // 69 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + aau_na_easy_hikers_dream: { // 70 + balancing: "balanced up to endgame", + balanceCheck: false + }, + aau_na_easy_hard_hikers_dream: { // 71 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + absurd_easy_hikers_dream: { // 72 + balancing: "balanced up toendgame", + balanceCheck: false, + }, + absurd_easy_hard_hikers_dream: { // 73 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_easy_hikers_dream: { // 74 + balancing: "balanced up to endgame", + balanceCheck: false, + }, + absurd_aau_easy_hard_hikers_dream: { // 75 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + absurd_na_easy_hikers_dream: { // 76 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_na_easy_hard_hikers_dream: { // 77 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_easy_hikers_dream: { // 78 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + absurd_aau_na_easy_hard_hikers_dream: { // 79 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + extreme_hikers_dream: { // 80 + balancing: "balanced up to endgame", + balanceCheck: false + }, + aau_extreme_hikers_dream: { // 81 + balancing: "balanced up to endgame", + balanceCheck: false + }, + na_extreme_hikers_dream: { // 82 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + aau_na_extreme_hikers_dream: { // 83 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + absurd_extreme_hikers_dream: { // 84 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_aau_extreme_hikers_dream: { // 85 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_na_extreme_hikers_dream: { // 86 + balancing: "balanced up to first multiverse", + balanceCheck: true, + }, + absurd_aau_na_extreme_hikers_dream: { // 87 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + easy_extreme_hikers_dream: { // 88 + balancing: "balanced up to endgame", + balanceCheck: false + }, + aau_easy_extreme_hikers_dream: { // 89 + balancing: "balanced up to endgame", + balanceCheck: false + }, + na_easy_extreme_hikers_dream: { // 90 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + aau_na_easy_extreme_hikers_dream: { // 91 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + absurd_easy_extreme_hikers_dream: { // 92 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_aau_easy_extreme_hikers_dream: { // 93 + balancing: "balanced up to endgame", + balanceCheck: false + }, + absurd_na_easy_extreme_hikers_dream: { // 94 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + absurd_aau_na_easy_extreme_hikers_dream: { // 95 + balancing: "balanced up to first multiverse", + balanceCheck: true + }, + "": { // 96 + balancing: "balanced up to endgame", + balanceCheck: false, + } }; const MODES = { hard: { - desc: - "The game is harder & slower, with slight compensation to help you slowly grind to the end (ends at Elementary).", - balancing: "balanced up to Elementary", - balanceCheck: false, - combos: { - aau: JSON.parse(JSON.stringify(COMBOS.hard_aau)), - na: JSON.parse(JSON.stringify(COMBOS.hard_na)), - absurd: JSON.parse(JSON.stringify(COMBOS.absurd)), - easy: JSON.parse(JSON.stringify(COMBOS.easy_hard)), - extreme: JSON.parse(JSON.stringify(COMBOS.extreme)), - hikers_dream: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - }, + desc: "The game is harder & slower, with slight compensation to help you slowly grind to the end.", dis: ["extreme"] }, aau: { desc: "Start with all achievements unlocked.", - balancing: "same as normal, but faster.", - balanceCheck: false, - combos: { - hard: JSON.parse(JSON.stringify(COMBOS.hard_aau)), - na: JSON.parse(JSON.stringify(COMBOS.aau_na)), - absurd: JSON.parse(JSON.stringify(COMBOS.absurd)), - easy: JSON.parse(JSON.stringify(COMBOS.easy)), - extreme: JSON.parse(JSON.stringify(COMBOS.extreme)), - hikers_dream: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - } }, na: { desc: "All unnecessary achievements are gone.", - balancing: "almost balanced (late game is slow)", - balanceCheck: false, - combos: { - hard: JSON.parse(JSON.stringify(COMBOS.hard_na)), - aau: JSON.parse(JSON.stringify(COMBOS.aau_na)), - absurd: JSON.parse(JSON.stringify(COMBOS.absurd)), - easy: JSON.parse(JSON.stringify(COMBOS.easy)), - extreme: JSON.parse(JSON.stringify(COMBOS.extreme)), - hikers_dream: JSON.parse(JSON.stringify(COMBOS.extreme)), - } }, absurd: { desc: "Ehehe... You'll see...", - balancing: "completely impossible", - balanceCheck: true, - combos: { - hard: JSON.parse(JSON.stringify(COMBOS.absurd)), - aau: JSON.parse(JSON.stringify(COMBOS.absurd)), - na: JSON.parse(JSON.stringify(COMBOS.absurd)), - easy: JSON.parse(JSON.stringify(COMBOS.absurd)), - extreme: JSON.parse(JSON.stringify(COMBOS.absurd)), - hikers_dream: JSON.parse(JSON.stringify(COMBOS.absurd)), - } }, easy: { - desc: "This mode is easier & faster to help you reach the end faster (ends at Elementary).", - balancing: "balanced up to Elementary", - balanceCheck: false, - combos: { - hard: JSON.parse(JSON.stringify(COMBOS.easy_hard)), - aau: JSON.parse(JSON.stringify(COMBOS.easy)), - na: JSON.parse(JSON.stringify(COMBOS.easy)), - absurd: JSON.parse(JSON.stringify(COMBOS.absurd)), - extreme: JSON.parse(JSON.stringify(COMBOS.extreme)), - hikers_dream: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - } + desc: "This mode is easier & faster to help you reach the end faster.", }, extreme: { - desc: - "This mode is an extension of Hard Mode that makes it even more difficult, however adds The Furnace (a new feature) to compensate for this (ends at Elementary).", - balancing: "balanced up to Elementary", - balanceCheck: false, - combos: { - hard: JSON.parse(JSON.stringify(COMBOS.extreme)), - aau: JSON.parse(JSON.stringify(COMBOS.extreme)), - na: JSON.parse(JSON.stringify(COMBOS.extreme)), - absurd: JSON.parse(JSON.stringify(COMBOS.absurd)), - easy: JSON.parse(JSON.stringify(COMBOS.extreme)), - hikers_dream: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - }, + desc: "This mode is an extension of Hard Mode that makes it even more difficult, however adds The Furnace (a new feature) to compensate for this.", ext: ["hard"] }, hikers_dream: { - desc: "You have to climb up a hill that gets steeper and steeper as you go (making progress slow down drastically), however there are new buffs to compensate for this steep hill (ends at Elementary).", - balancing: "balanced up to Elementary", - balanceCheck: false, - combos: { - hard: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - aau: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - na: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - absurd: JSON.parse(JSON.stringify(COMBOS.absurd)), - easy: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - extreme: JSON.parse(JSON.stringify(COMBOS.hikers_dream)), - }, + desc: "You have to climb up a hill that gets steeper and steeper as you go (making progress slow down drastically), however there are new buffs to compensate for this steep hill.", }, }; +const MODE_TABLE_DATA = { + top: [[[""],"Normal"], [["hikers_dream"],"Hiker's Dream"], [["extreme","hard"],"Extreme"], [["hikers_dream","extreme","hard"],"Extreme Dream"], [["hard"],"Hard"], [["hard","hikers_dream"],"Hard Dream"], [["absurd"],"Absurd"], [["absurd","hikers_dream"],"Absurd Dream"], [["absurd","extreme","hard"],"Absurd Extreme"], [["absurd","hikers_dream","extreme","hard"],"Absurd Extreme Dream"], [["absurd","hard"],"Absurd Hard"], [["absurd","hard","hikers_dream"],"Absurd Hard Dream"]], + left: [[[""],"Normal"], [["easy"],"Easy"], [["aau"],"AAU"], [["easy","aau"],"Easy AAU"], [["na"], "NA"], [["easy","na"],"Easy NA"], [["aau","na"],"AAU NA"], [["easy","na","aau"],"Easy AAU NA"]], +} + const MODE_VARS = { extreme: { rankCheap: new ExpantaNum(0), @@ -144,6 +429,16 @@ const MODE_VARS = { activeFC: 0, furnChalls: [], extremeStad: [], + magma: { + done: false, + amount: new ExpantaNum(0), + ref: new ExpantaNum(0), + }, + plasma: { + amount: new ExpantaNum(0), + whiteFlame: new ExpantaNum(0), + boosts: new ExpantaNum(0), + }, }, hikers_dream: { energy: new ExpantaNum(100), @@ -161,31 +456,48 @@ const MODE_EX = { extreme: function (source) { source.rankCheap = new ExpantaNum(source.rankCheap); source.furnace.coal = new ExpantaNum(source.furnace.coal); + let fu = source.furnace.upgrades; source.furnace.upgrades = [ - new ExpantaNum(source.furnace.upgrades[0]), - new ExpantaNum(source.furnace.upgrades[1]), - new ExpantaNum(source.furnace.upgrades[2]), - new ExpantaNum(source.furnace.upgrades[3]||0), - new ExpantaNum(source.furnace.upgrades[4]||0), + new ExpantaNum(fu[0]), + new ExpantaNum(fu[1]), + new ExpantaNum(fu[2]), + new ExpantaNum(fu[3]||0), + new ExpantaNum(fu[4]||0), ]; source.furnace.enhancedCoal = new ExpantaNum(source.furnace.enhancedCoal||0); + let eu = (source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0]) source.furnace.enhancedUpgrades = [ - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[0]), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[1]), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[2]), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[3]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[4]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[5]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[6]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[7]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[8]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[9]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[10]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[11]||0), - new ExpantaNum((source.furnace.enhancedUpgrades||[0,0,0,0,0,0,0,0,0,0,0,0,0])[12]||0), + new ExpantaNum(eu[0]), + new ExpantaNum(eu[1]), + new ExpantaNum(eu[2]), + new ExpantaNum(eu[3]||0), + new ExpantaNum(eu[4]||0), + new ExpantaNum(eu[5]||0), + new ExpantaNum(eu[6]||0), + new ExpantaNum(eu[7]||0), + new ExpantaNum(eu[8]||0), + new ExpantaNum(eu[9]||0), + new ExpantaNum(eu[10]||0), + new ExpantaNum(eu[11]||0), + new ExpantaNum(eu[12]||0), ]; source.furnace.blueFlame = new ExpantaNum(source.furnace.blueFlame); if (!source.extremeStad) source.extremeStad = [] + + let mag = source.magma||{} + source.magma = { + done: mag.done||false, + amount: new ExpantaNum(mag.amount||0), + ref: new ExpantaNum(mag.ref||0), + } + + let pl = source.plasma||{} + source.plasma = { + amount: new ExpantaNum(pl.amount||0), + whiteFlame: new ExpantaNum(pl.whiteFlame||0), + boosts: new ExpantaNum(pl.boosts||0), + } + return source; }, hikers_dream: function(source) { diff --git a/js/constants/news.js b/js/constants/news.js index b244c31c..bc62efa2 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -1,3 +1,20 @@ +var eheheTimes = 0; +var eheheResetAmt = 0; +var eheheResetReq = 1000; +var ehehe = function() { + eheheTimes+=eheheResetAmt+1; + if (eheheTimes>=eheheResetReq) return 'EHEHE '+eheheTimes+': Copy paste the following to prestige: console.log(ehehePrestige())' + else return 'EHEHE '+eheheTimes+': Copy paste the following into the console and press enter: console.log(ehehe())' +} +var ehehePrestige = function() { + if (eheheTimeshere..."], + m93: ["Hello puny mortals. I have come back in time to tell you that this game will be dead in two days... or maybe I've come back too far?"], + m94: ['"If I edit a message to ping, will it actually ping the user?" - New Discord User'], + m95: ['"Sea urchins, malt? Whats next, cream pie?" - A food nerd'], + m96: ["Jacorb finds it mind-boggling that DI was first released publicly on May 1st 2020. You'd better remember that, you might see it in a Kahoot!"], + m97: ["Ticker: Ticker: Ticker: Ticker: Ticker: Ticker: Ticker: T- go to #spam please :)"], + m98: ["Paradoxes 101: This statement is false."], + m99: ["Paradoxes 201: The following statement is false. The previous statement is true."], + m100: ["Paradoxes 301: The following statement is false. The following statement is false. The first statement is false."], + m101: ["Jacorb's mental instability is increasing quite quickly. If he reaches 100% mental instability, the multiverse implodes."], + m102: ["Has this game been abandoned by its developer? "+((Math.random()>0.5)?"Obviously yes.":"Definitely not.")], + m103: ['"When is the egg update coming?" - The Almighty Orb about his own game'], + m104: ["We're lucky that our universes were never infected, I'm sure there's some parallel multiverse out there where that's an issue..."], + m105: ["Some people say that each multiverse does not have its own High Gods. Those people tend not to survive very long around here."], + m106: ["Some people say that there is only one set of High Gods. Those people tend not to survive very long around here."], // Distance-based Conditions d1: [ @@ -122,11 +168,21 @@ const NEWS_DATA = { } ], d8: [ - "The new feature in v1.8 will be Quantum Foam", + "Welcome to the Fome Club...", function() { return player.distance.gte(ExpantaNum.mul(DISTANCES.uni, "1e42000000")); } ], + d9: [ + "Heya. You've been busy, huh? So, i've got a question for ya. Do you think even the worst person can change? That everybody can be a good person, if they just try? Heh heh heh he... All right. Well here's a better question. Do you wanna have a bad time? 'Cause if you take another step forward... You are REALLY not going to like what happens next. Welp. Sorry, old lady. This is why i never make promises.", + function() { + return player.distance.gte(ExpantaNum.mul(DISTANCES.uni, "1e108000000")); + } + ], + d10: [ + "The multiverse isn't enough for you, is it?", + function() { return player.distance.gte(DISTANCES.mlt) }, + ], // Mode-based Conditions mod1: [ @@ -209,6 +265,18 @@ const NEWS_DATA = { return Math.random() < 1e-15; } ], + c6: [ + "Your luck skills have broke the multiverse, and everything within it", + function() { + return Math.random() < 1e-30; + } + ], + c7: [ + "If you went through 1 news ticker every planck time, and waited until the end of the universe's life, you still should not see this", + function() { + return Math.random() < 1e-80; + } + ], // Achievement-based Conditions a1: [ @@ -407,7 +475,70 @@ const NEWS_DATA = { "Time to refoam your protofoam.", function() { return player.elementary.foam.maxDepth.gte(5) }, ], -}; - -const NEWS_ADJ = 110; -const NEWS_TIME = 8; + s25: [ + "Entropy is the arrow of time, leading you to the future (hopefully it doesn't take you too far into the future)", + function() { return player.elementary.entropy.unl }, + ], + s26: [ + "I guess it's time to sacrifice your Fermions into Skyrmions!", + function() { return player.elementary.sky.unl }, + ], + s27: [ + "This isn't an Aarex game, there is no Elementary News Ticker...", + function() { return player.elementary.particles.gt(0) }, + ], + s28: [ + "Believe it or not, the news ticker is this game's only source of RNG.", + function() { return player.distance.gte(1e86)&&player.distance.lte("1e10000") }, + ], + s29: [ + "This message started at the exact moment you reached the end of the multiverse!", + function() { return !player.ended&&player.distance.gte(DISTANCES.mlt) }, + ], + s30: [ + "Wow you completed TV20, a completely meaningless quest that got you no reward. How do you feel now?", + function() { return player.elementary.theory.depth.gt(20) }, + ], + s31: [ + "Gonna transfoam myself to Skyrmions!", + function() { return player.elementary.sky.unl }, + ], + s32: [ + "Florida Man tried to reach the end of multiverse, but dissolved into 3 quantum fields.", + function() { return player.elementary.foam.unl }, + ], + s33: [ + '"Elementary is cool, it has hadronic challenged me to make up theories and has brought to photonic light a new meme: fome, I must go now, my skyrmions need me." - A really punny guy', + function() { return player.elementary.sky.unl }, + ], + s34: [ + "No wait please, don't obliterate the multiverse, I need it to survive!", + function() { return player.distance.gte(DISTANCES.mlt)&&player.mlt.times.eq(0) }, + ], + s35: [ + "If the world is your oyster, then the multiverse is your ocean. That's right, you own the ocean now.", + function() { return player.mlt.times.gt(0) }, + ], + s36: [ + '"But where are the pentogens?" - Incremental Mass fan after unlocking multiverses', + function () { + return player.mlt.times.gt(0) + } + ], + s37: [ + "lOoK iT'S cRaCKlE!?!?!?!!", + function() { return player.inf.derivatives.amts.crackle!==undefined }, + ], + s38: [ + '"(Derivative after the latest you have unlocked) when?" - A derivative enthusiast', + function() { return player.mlt.highestCompleted>=2 }, + ], + s39: [ + "Even the High Gods aren't perfect. Although they're supposed to look over the multiverse, there are some threats that are just... too much.", + function() { return player.elementary.times.gte(555) && player.elementary.times.lt(777777) }, + ], + s40: [ + "There are more multiverses out there, somewhere... I wonder what sort of chaos is going on over there.", + function() { return player.mlt.highestCompleted>=5 }, + ], +}; \ No newline at end of file diff --git a/js/constants/options_notations.js b/js/constants/options_notations.js index feb770d7..a6f8773b 100644 --- a/js/constants/options_notations.js +++ b/js/constants/options_notations.js @@ -14,8 +14,9 @@ const OPT_NAMES = { fonts: ["verdana", "courier", "arial", "times", "Comic Sans MS"], visUpd: ["every tick", "every 2 ticks", "every 5 ticks", "every 20 ticks"], }; + const AUTOSAVE_TIME = 12; -const MAX_SAVES = 5; +const MAX_SAVES = 96; const VIS_UPDS = { "every tick": 1, "every 2 ticks": 2, diff --git a/js/constants/scaling.js b/js/constants/scaling.js index 0aafc247..1eca6557 100644 --- a/js/constants/scaling.js +++ b/js/constants/scaling.js @@ -21,6 +21,7 @@ const SCALING_STARTS = { tier: new ExpantaNum(12), rf: new ExpantaNum(75), fn: new ExpantaNum(15), + efn: new ExpantaNum(60), pathogenUpg: new ExpantaNum(40), darkCore: new ExpantaNum(20), endorsements: new ExpantaNum(50), @@ -37,7 +38,12 @@ const SCALING_STARTS = { pathogenUpg: new ExpantaNum(65), darkCore: new ExpantaNum(40) }, - atomic: { rank: new ExpantaNum(800), tier: new ExpantaNum(40), rf: new ExpantaNum(300) } + atomic: { + rank: new ExpantaNum(800), + tier: new ExpantaNum(40), + rf: new ExpantaNum(300), + fn: new ExpantaNum(35000), + } }; const SCALING_RES = { rank: function (n = 0) { diff --git a/js/constants/tabs.js b/js/constants/tabs.js index c6c00963..b50740cc 100644 --- a/js/constants/tabs.js +++ b/js/constants/tabs.js @@ -36,9 +36,34 @@ const TABBTN_SHOWN = { return player.dc.unl; }, inf: function () { - return player.inf.unl; + return player.inf.unl || (player.mlt.times.gt(0)&&tmp.inf.can); }, elementary: function () { - return (tmp.elm ? tmp.elm.can : false) || player.elementary.times.gt(0); - } + return (tmp.elm ? tmp.elm.can : false) || player.elementary.times.gt(0) || player.elementary.theory.active || player.elementary.hc.active; + }, }; + +const FULL_TAB_NAMES = { + main: "Main", + options: "Options", + statistics: "Statistics", + achievements: "Achievements", + energy: "Energy", + rockets: "Rockets", + furnace: "Furnace", + auto: "Automation", + tr: "Time Reversal", + collapse: "Universal Collapse", + pathogens: "Pathogens", + dc: "Dark Circle", + inf: "Infinity", + elementary: "Elementary", +} + +const HIDE_WHITELIST = ["main","options"] + +const STAT_TABBTN_SHOWN = { + mainStats() { return true }, + scalings() { return statScalingsShown }, + rankTiers() { return player.rank.gt(1)||player.tier.gt(0) }, +} \ No newline at end of file diff --git a/js/functions/achievements.js b/js/functions/achievements.js index 29c9abbe..d885b9e8 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -1,4 +1,4 @@ -function updateAchievements() { +function checkR1Ach(){ if (player.distance.gte(100)) tmp.ach[11].grant(); if (player.rank.gt(1)) tmp.ach[12].grant(); if (player.tier.gte(1)) tmp.ach[13].grant(); @@ -7,7 +7,9 @@ function updateAchievements() { if (player.automation.unl) tmp.ach[16].grant(); if (player.tr.unl) tmp.ach[17].grant(); if (player.collapse.cadavers.gt(0)) tmp.ach[18].grant(); +} +function checkR2Ach(){ if (player.distance.gte(modeActive("extreme") ? 3e4 : 5e5)) tmp.ach[21].grant(); if (player.rank.gte(modeActive("extreme") ? 6 : 8)) tmp.ach[22].grant(); if (player.tier.gte(3)) tmp.ach[23].grant(); @@ -16,7 +18,9 @@ function updateAchievements() { if (Object.keys(player.automation.robots).includes("rankbot")) tmp.ach[26].grant(); if (player.tr.cubes.gte(1000)) tmp.ach[27].grant(); if (player.collapse.cadavers.gte(66)) tmp.ach[28].grant(); +} +function checkR3Ach(){ if (player.distance.gte(1e12)) tmp.ach[31].grant(); if (player.rank.gte(12)) tmp.ach[32].grant(); if (player.tier.gte(4)) tmp.ach[33].grant(); @@ -25,7 +29,9 @@ function updateAchievements() { if (Object.keys(player.automation.robots).includes("tierbot")) tmp.ach[36].grant(); if (player.tr.upgrades.length >= 5) tmp.ach[37].grant(); if (hasCollapseMilestone(12)) tmp.ach[38].grant(); +} +function checkR4Ach(){ if (player.distance.gte(10 * DISTANCES.pc)) tmp.ach[41].grant(); if (player.rank.gte(20)) tmp.ach[42].grant(); if (player.tier.gte(5)) tmp.ach[43].grant(); @@ -34,7 +40,9 @@ function updateAchievements() { if (player.automation.scraps.gte(5000)) tmp.ach[46].grant(); if (player.tr.upgrades.length >= 10) tmp.ach[47].grant(); if (player.automation.intelligence.gte(1e10)) tmp.ach[48].grant(); +} +function checkR5Ach(){ if (player.distance.gte(DISTANCES.uni)) tmp.ach[51].grant(); if (player.rockets.gte(1e8)) tmp.ach[52].grant(); if (player.rf.gte(10)) tmp.ach[53].grant(); @@ -43,7 +51,9 @@ function updateAchievements() { if (Object.keys(player.automation.robots).includes("fuelbot")) tmp.ach[56].grant(); if (player.tr.cubes.gte(9e15)) tmp.ach[57].grant(); if (player.distance.gte(2.22e22 * DISTANCES.uni)) tmp.ach[58].grant(); +} +function checkR6Ach(){ if (player.pathogens.unl) tmp.ach[61].grant(); if (player.collapse.lifeEssence.gte(1e6)) tmp.ach[62].grant(); if (player.tr.cubes.gte(1e28)) tmp.ach[63].grant(); @@ -52,13 +62,11 @@ function updateAchievements() { if (tmp.auto.fuelbot.interval.lte(120)) tmp.ach[66].grant(); if (player.distance.gte(1e80 * DISTANCES.uni)) tmp.ach[67].grant(); let bool = true; - let antiBool = true; - for (let i = 1; i <= PTH_AMT; i++) - if (player.pathogens.upgrades[i].eq(0)) { - if (i <= 10) bool = false; - } else antiBool = false; + for (let i = 1; i <= PTH_AMT; i++) if (player.pathogens.upgrades[i].eq(0)) if (i <= 10) bool = false; if (bool) tmp.ach[68].grant(); +} +function checkR7Ach(){ if (player.dc.unl) tmp.ach[71].grant(); if (player.dc.matter.gte(50)) tmp.ach[72].grant(); if (player.distance.gte(ExpantaNum.mul(1e140, DISTANCES.uni))) tmp.ach[73].grant(); @@ -67,7 +75,9 @@ function updateAchievements() { if (player.rockets.gte(1e100)) tmp.ach[76].grant(); if (player.automation.scraps.gte(1e80)) tmp.ach[77].grant(); if (player.rf.gte(75)) tmp.ach[78].grant(); +} +function checkR8Ach(){ if (player.inf.unl) tmp.ach[81].grant(); if (player.inf.knowledge.gte(9000.1)) tmp.ach[82].grant(); if (player.inf.endorsements.gte(3)) tmp.ach[83].grant(); @@ -76,16 +86,20 @@ function updateAchievements() { if (player.distance.gte("4.4e1026")) tmp.ach[86].grant(); if (player.inf.knowledge.gte(25e9)) tmp.ach[87].grant(); if (player.inf.endorsements.gte(10)) tmp.ach[88].grant(); +} +function checkR9Ach(){ if (tmp.dc.flow.gte(8e3)) tmp.ach[91].grant(); if (player.collapse.cadavers.gte(1e80)) tmp.ach[92].grant(); if (player.inf.ascension.power.gte(666)) tmp.ach[93].grant(); if (player.inf.endorsements.gte(14)) tmp.ach[94].grant(); if (player.inf.ascension.enlightenments.every(x => new ExpantaNum(x).gte(1))) tmp.ach[95].grant(); if (tmp.auto.rankbot.magnitude.gt(1e33)) tmp.ach[96].grant(); - if (player.distance.gte("4.4e416") && antiBool) tmp.ach[97].grant(); + if (player.distance.gte("4.4e416") && tmp.nopathogenupgs) tmp.ach[97].grant(); if (player.distance.gte("4.4e786") && player.dc.cores.eq(0)) tmp.ach[98].grant(); +} +function checkR10Ach(){ if (player.inf.stadium.completions.length > 0) tmp.ach[101].grant(); if (player.inf.ascension.enlightenments.every(x => new ExpantaNum(x).gte(2))) tmp.ach[102].grant(); if (player.dc.matter.gte(1e18)) tmp.ach[103].grant(); @@ -94,7 +108,9 @@ function updateAchievements() { if (player.inf.endorsements.gte(20)) tmp.ach[106].grant(); if (player.inf.stadium.completions.length >= 6) tmp.ach[107].grant(); if (!nerfActive("maxVelActive")) tmp.ach[108].grant(); +} +function checkR11Ach(){ if (tmp.auto.fuelbot.interval.lt(1)) tmp.ach[111].grant(); if (tmp.acc.gte("2.2e10022")) tmp.ach[112].grant(); if (tmp.pathogens.upgPow.gte(2.5)) tmp.ach[113].grant(); @@ -103,35 +119,42 @@ function updateAchievements() { if (player.inf.endorsements.gte(25)) tmp.ach[116].grant(); if (player.collapse.cadavers.gte("1e3000")) tmp.ach[117].grant(); if (player.distance.gte("1e33600") && tmp.inf.stadium.active("eternity")) tmp.ach[118].grant(); +} +function checkR12Ach(){ if (player.distance.gte(2.5e4) && tmp.inf.stadium.active("reality", 6)) tmp.ach[121].grant(); if (player.inf.derivatives.unlocks.gte(2)) tmp.ach[122].grant(); if (player.inf.ascension.power.gte(2.5e5)) tmp.ach[123].grant(); if (player.inf.pantheon.purge.power.gte(modeActive("extreme")?9:30)) tmp.ach[124].grant(); - if (player.distance.gte(1e4) && tmp.inf.stadium.active("reality", 6) && player.inf.pantheon.purge.active) - tmp.ach[125].grant(); - if (tmp.auto.rankbot.magnitude.gte(1e200)) tmp.ach[126].grant(); - if (player.tr.cubes.gte("1e100000") && antiBool && player.dc.cores.eq(0)) tmp.ach[127].grant(); + if (player.distance.gte(1e4) && tmp.inf.stadium.active("reality", 6) && player.inf.pantheon.purge.active) tmp.ach[125].grant(); + if (tmp.auto.rankbot.magnitude.gte(modeActive("hard")?1e75:1e200)) tmp.ach[126].grant(); + if (player.tr.cubes.gte("1e100000") && tmp.nopathogenupgs && player.dc.cores.eq(0)) tmp.ach[127].grant(); if (tmp.acc.gte("5.55e5555") && player.inf.pantheon.purge.active) tmp.ach[128].grant(); +} +function checkR13Ach(){ if (player.elementary.times.gt(0)) tmp.ach[131].grant(); if (player.distance.gte(1e15)&&player.inf.pantheon.purge.active&&!player.inf.upgrades.includes('8;8')&&tmp.inf.stadium.active("reality", 6)) tmp.ach[132].grant() if (player.elementary.fermions.amount.gte(1e3) && player.elementary.bosons.amount.gte(1e3)) tmp.ach[133].grant() - if (antiBool && player.dc.cores.eq(0) && player.distance.gte("4.4e1100026")) tmp.ach[134].grant() + if (tmp.nopathogenupgs && player.dc.cores.eq(0) && player.distance.gte("4.4e1100026")) tmp.ach[134].grant() if (player.inf.pantheon.heavenlyChips.gte(2.5e7)) tmp.ach[135].grant() if (player.velocity.gte("4.4e3750026")) tmp.ach[136].grant() // ach137 is in the Elementary reset function if (player.distance.gte("4.4e7826")&&player.inf.endorsements.lte(10)) tmp.ach[138].grant() - +} + +function checkR14Ach(){ if (player.elementary.theory.points.gte(1)) tmp.ach[141].grant() - if (player.inf.pantheon.purge.active && tmp.inf.stadium.active("reality", 6) && antiBool && player.dc.cores.eq(0) && player.distance.gte(4.4e136)) tmp.ach[142].grant() + if (player.inf.pantheon.purge.active && tmp.inf.stadium.active("reality", 6) && tmp.nopathogenupgs && player.dc.cores.eq(0) && player.distance.gte(4.4e136)) tmp.ach[142].grant() if (player.elementary.theory.depth.gte(5)) tmp.ach[143].grant() if (player.inf.ascension.power.gte(1e33)) tmp.ach[144].grant() if (player.distance.gte("4.4e8000026")) tmp.ach[145].grant() if (player.inf.knowledge.gte("1.8e308")) tmp.ach[146].grant() if (player.inf.endorsements.lte(10) && player.rank.gte(200)) tmp.ach[147].grant() if (player.rank.gte(995)) tmp.ach[148].grant() - +} + +function checkR15Ach(){ if (player.elementary.hc.unl) tmp.ach[151].grant() if (player.elementary.hc.best.gte(2.3)) tmp.ach[152].grant() if (Object.keys(player.elementary.theory.tree.upgrades).length==0 && player.distance.gte("4.4e8250026")) tmp.ach[153].grant(); @@ -140,17 +163,57 @@ function updateAchievements() { if (player.elementary.theory.depth.gte(9)) tmp.ach[156].grant(); if (player.elementary.theory.strings.amounts[0].gte(4.4e76)) tmp.ach[157].grant(); if (player.elementary.hc.best.gte(3.75)) tmp.ach[158].grant(); - - if (player.elementary.foam.unl) tmp.ach[161].grant() +} + +function checkR16Ach(){ + if (player.elementary.foam.unl) tmp.ach[161].grant(); if (player.elementary.theory.strings.amounts[0].gte(4.4e251)) tmp.ach[162].grant(); if (player.elementary.theory.strings.entangled.gte(4.4e126)) tmp.ach[163].grant(); if (player.elementary.entropy.unl) tmp.ach[164].grant(); if (player.elementary.hc.best.gte(8)) tmp.ach[165].grant(); - if (player.elementary.theory.inflatons.amount.gte(1e160)) tmp.ach[166].grant(); + if (player.elementary.theory.inflatons.amount.gte(modeActive("extreme")?1e150:1e160)) tmp.ach[166].grant(); if (player.distance.gte(ExpantaNum.mul("1e108000000", 4.4e26))) tmp.ach[167].grant(); if (player.elementary.foam.amounts[0].gte(1e25) && player.elementary.foam.maxDepth.lte(1)) tmp.ach[168].grant(); } +function checkR17Ach(){ + if (player.elementary.sky.amount.gt(0)) tmp.ach[171].grant(); + if (player.elementary.times.gte(1e12)) tmp.ach[172].grant(); + if (player.elementary.foam.amounts[0].gte(modeActive("extreme")?1e78:1e140) && player.elementary.entropy.best.eq(0)) tmp.ach[173].grant(); + if (player.distance.gte("4.4e500000026")) tmp.ach[174].grant(); + if (player.distance.gte("4.4e222222248") && player.elementary.entropy.best.eq(0) && player.elementary.foam.maxDepth.lte(1) && player.elementary.bosons.gauge.photons.upgrades.reduce((a,c) => ExpantaNum.add(a, c)).eq(0) && Object.values(player.elementary.bosons.gauge.gluons).every(obj => obj.upgrades.reduce((a,c) => ExpantaNum.add(a, c)).eq(0))) tmp.ach[175].grant(); + if (player.elementary.theory.depth.gte(20)) tmp.ach[176].grant(); + if (tmp.pathogens) if (tmp.pathogens.upgPow.gte(16.25)) tmp.ach[177].grant(); + if (player.distance.gte(DISTANCES.mlt)) tmp.ach[178].grant(); +} + +function checkR18Ach() { + if (player.distance.gte(ExpantaNum.pow(DISTANCES.mlt, 2))) tmp.ach[181].grant(); + if (player.distance.gte(ExpantaNum.pow(DISTANCES.mlt, 3.5)) && player.elementary.theory.depth.eq(0)) tmp.ach[182].grant(); + if (player.mlt.highestCompleted>=1) tmp.ach[183].grant(); + if (player.elementary.entropy.amount.gte(1e5)) tmp.ach[184].grant(); + if (mltActive(2) && tmp.inf.stadium.active("eternity", 6) && player.distance.gte("3.911111e88888915")) tmp.ach[185].grant(); + if (player.distance.gte(ExpantaNum.pow(DISTANCES.mlt, 100))) tmp.ach[186].grant(); + if (player.mlt.highestCompleted>=5) tmp.ach[187].grant(); + if (player.elementary.foam.amounts[4].gte("1e430")) tmp.ach[188].grant(); +} + +function checkR19Ach() { + if (player.elementary.theory.accelerons.expanders.gte(10)) tmp.ach[191].grant(); + if (player.rank.gte(1337) && mltActive(1) && player.mlt.mlt1selected.length==0) tmp.ach[192].grant(); + if (mltActive(3) && !player.mlt.mlt3selected.includes("ascension") && player.distance.gte("4.4e800000026")) tmp.ach[193].grant(); + if (player.tier.gte(69)) tmp.ach[194].grant(); + // ach195 is in the Multiverse reset function + if (player.distance.gte("4.4e10000026") && mltActive(5) && getProjectedHadronicScore().gte(modeActive("extreme")?12:15) && player.elementary.hc.active) tmp.ach[196].grant(); + // ach197 is in the Multiverse reset function + if (player.distance.gte("2.8e1000000026643")) tmp.ach[198].grant(); +} + +function updateAchievements() { + tmp.nopathogenupgs = getTotalPathogenUpgrades().eq(0) + for (let r=1;r<=ACH_DATA.rows;r++) if (!Achievement.hasRow(r)) window["checkR"+r+"Ach"](); +} + function rowComplete(r) { return [r*10+1,r*10+2,r*10+3,r*10+4,r*10+5,r*10+6,r*10+7,r*10+8].every(i => player.achievements.includes(i)) } \ No newline at end of file diff --git a/js/functions/formatting.js b/js/functions/formatting.js index 784d80ef..01280184 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -1,21 +1,21 @@ function disp(val, places, locs, base) { // Taken from OmegaNum.js (but altered slightly) if (val.sign==-1) return "-"+disp(val.abs(), places, locs, base); - if (isNaN(val.array[0])) return "NaN"; - if (!isFinite(val.array[0])) return "Infinity"; - var s=""; - if (val.array.length>=2){ - for (var i=val.array.length-1;i>=2;--i){ - var q=i>=5?"{"+decimalPlaces(i, places, base)+"}":"^".repeat(i); - if (val.array[i]>1) s+="10"+decimalPlaces(q, places, base)+"^"+decimalPlaces(val.array[i], places, base)+" "; - else if (val.array[i]==1) s+="10"+decimalPlaces(q, places, base); - } - } - if (!val.array[1]) s+=decimalPlaces(val.toNumber(), places, base); - else if (val.array[1]<3) s+="e".repeat(val.array[1]-1)+decimalPlaces(Math.pow(10,val.array[0]-Math.floor(val.array[0])), places, base)+"e"+decimalPlaces(Math.floor(val.array[0]), places, base); - else if (val.array[1]<8) s+="e".repeat(val.array[1])+decimalPlaces(val.array[0], places, base); - else s+="10^^"+decimalPlaces(val.array[1], places, base)+" "+decimalPlaces(val.array[0], places, base); - return s; + if (isNaN(val.array[0])) return "NaN"; + if (!isFinite(val.array[0])) return "Infinity"; + var s=""; + if (val.array.length>=2){ + for (var i=val.array.length-1;i>=2;--i){ + var q=i>=5?"{"+decimalPlaces(i, places, true, base)+"}":"^".repeat(i); + if (val.array[i]>1) s+="10"+decimalPlaces(q, places, true, base)+"^"+decimalPlaces(val.array[i], places, true, base)+" "; + else if (val.array[i]==1) s+="10"+decimalPlaces(q, places, true, base); + } + } + if (!val.array[1]) s+=decimalPlaces(val.toNumber(), places, val.eq(val.round()), base); + else if (val.array[1]<3) s+="e".repeat(val.array[1]-1)+decimalPlaces(Math.pow(10,val.array[0]-Math.floor(val.array[0])), places, false, base)+"e"+decimalPlaces(Math.floor(val.array[0]), places, true, base); + else if (val.array[1]<8) s+="e".repeat(val.array[1])+decimalPlaces(val.array[0], places, false, base); + else s+="10^^"+decimalPlaces(val.array[1], places, true, base)+" "+decimalPlaces(val.array[0], places, false, base); + return s; } function showNum(val) { @@ -27,14 +27,17 @@ function showNum(val) { return notations[player.options.not](new ExpantaNum(val), player.options.sf - 1, 2); } -function addZeroes(orig, num, digits) { +function addZeroes(orig, num, digits, roundWhole=false) { if (typeof(num)=="string") num = parseFloat(num) - let result = orig==Math.round(orig)?Math.round(num).toString():num.toLocaleString("en", {useGrouping: false, minimumFractionDigits: Math.max(digits, 1)}) - if (result[result.length-1]=="0"&&num<1) result = result.substring(0, result.length - 1); + let result = (orig==Math.round(orig))?Math.round(num).toString():num.toLocaleString("en", {useGrouping: false, minimumFractionDigits: Math.max(digits, 1)}) + if (roundWhole && result.includes(".") && result[result.length-1]=="0") { + while (result[result.length-1]=="0") result = result.substring(0, result.length-1); + } + if (result[result.length-1]==".") result = result.substring(0, result.length-1); return result } -function decimalPlaces(value, places, base = 10) { +function decimalPlaces(value, places, roundWhole=false, base = 10) { // Taken from ExpantaNum.js (but altered slightly) var len = places + 1; var numDigits = Math.ceil(Math.log10(Math.max(Math.abs(value), 1))); @@ -44,13 +47,13 @@ function decimalPlaces(value, places, base = 10) { if (value<=1e-100) return "0" let e = Math.floor(-1*Math.log10(value)) let m = value*Math.pow(10, e+1) - return decimalPlaces(m, places, base)+"e-"+decimalPlaces(e, places, base) + return decimalPlaces(m, places, false, base)+"e-"+decimalPlaces(e, places, true, base) } else if (value= 0; i--) { let name = Object.keys(DISTANCES)[i]; - let val = DISTANCES[name]; + let val = new ExpantaNum(DISTANCES[name]); if (x.lt(val) && i > 0) continue; + if (name=="mlt"&&fc) { + if (x.eq(val)) return showNum(x.div(DISTANCES.uni)) + " uni"; + return "??? uni" + } + if (DISTANCE_TYPES[name]=="log") return showNum(x.log10().div(val.log10())) + " " + name; return showNum(x.div(val)) + " " + name; } } @@ -99,3 +107,20 @@ function formatTime(x) { return showNum(x.div(val)) + " " + name; } } + +function formatGain(amt, gain, name, isDist, gainNotIncluded) { + let trueGain = ExpantaNum.mul(name?adjustGen(gain, name):gain, gainNotIncluded||1) + let func = isDist?formatDistance:showNum + if (trueGain.gte(1e100) && trueGain.gt(amt)) return "(+"+showNum(trueGain.max(1).log10().sub(amt.max(1).log10().max(1)).times(50/VIS_UPDS[player.options.visUpd]))+" OoMs/sec)" + else return "(+"+func(trueGain)+"/sec)" +} + +function isFunc(f) { + let n = {}; + return n.toString.call(f) === '[object Function]'; +} + +function checkFunc(f) { + if (isFunc(f)) return f(); + else return f; +} \ No newline at end of file diff --git a/js/functions/important.js b/js/functions/important.js index 4967bc36..68d6ce90 100644 --- a/js/functions/important.js +++ b/js/functions/important.js @@ -41,14 +41,22 @@ function loadGame() { localStorage.setItem("dist-inc-saves" + betaID, btoa(JSON.stringify(all))); player.savePos = c; modeLoad([]); + loadOptions(); setupHTML(); if (modeActive("hikers_dream")) { updateTempHikersDream(); calcInclines(); } + completedModeCombos = getCompletedModeCombos(); + completedModeCombos = completedModeCombos.map(x => calcModeAndBalanceName(x).balanceName); + completedModeCombos = completedModeCombos.filter((x,i) => i==completedModeCombos.indexOf(x)); interval = setInterval(function () { simulateTime(); }, 50); + intervalPerSec = setInterval(function () { + autoPerSec(); + updateHTMLPerSec(); + }, 1000); } function onVersionChange() { @@ -63,6 +71,10 @@ function simulateTime() { } function modeLoad(resetted) { + if (!resetted.includes("extremeStad") && modeActive("extreme")) if (player.activeFC==6) resetted = resetted.filter(x => x!="activeFC") + if (player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0")) resetted = resetted.filter(x => x != "bestMotive") + if (hasMltMilestone(3) && modeActive("hikers_dream")) resetted = resetted.filter(x => x != "energyUpgs"); + if (tmp.ach) if (tmp.ach[141].has) resetted = resetted.filter(x => x != "geners" && x != "genLvl") if (player.modes.some(x => Object.keys(MODE_VARS).includes(x))) { player.modes .filter(x => Object.keys(MODE_VARS).includes(x)) diff --git a/js/functions/misc.js b/js/functions/misc.js index b546dba5..fbe66f5a 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -42,6 +42,7 @@ function ENString(obj) { ret.inf.pantheon.demons = new ExpantaNum(ret.inf.pantheon.demons).toString(); ret.inf.pantheon.heavenlyChips = new ExpantaNum(ret.inf.pantheon.heavenlyChips).toString(); ret.inf.pantheon.demonicSouls = new ExpantaNum(ret.inf.pantheon.demonicSouls).toString(); + ret.inf.pantheon.hauntingEnergy = new ExpantaNum(ret.inf.pantheon.hauntingEnergy||0).toString(); ret.inf.pantheon.purge.power = new ExpantaNum(ret.inf.pantheon.purge.power).toString(); if (Object.keys(ret.inf.derivatives.amts).length > 0) for (const key in ret.inf.derivatives.amts) @@ -64,7 +65,7 @@ function ENString(obj) { ret.elementary.bosons.gauge.photons.amount = new ExpantaNum(ret.elementary.bosons.gauge.photons.amount).toString(); for (let i = 0; i < 4; i++) ret.elementary.bosons.gauge.photons.upgrades[i] = new ExpantaNum( - ret.elementary.bosons.gauge.photons.upgrades[i] + ret.elementary.bosons.gauge.photons.upgrades[i]||0 ).toString(); ret.elementary.bosons.gauge.w = new ExpantaNum(ret.elementary.bosons.gauge.w).toString(); ret.elementary.bosons.gauge.z = new ExpantaNum(ret.elementary.bosons.gauge.z).toString(); @@ -121,13 +122,14 @@ function ENString(obj) { ret.elementary.bosons.scalar.higgs.amount = new ExpantaNum(ret.elementary.bosons.scalar.higgs.amount).toString(); ret.elementary.theory.points = new ExpantaNum(ret.elementary.theory.points).toString(); ret.elementary.theory.depth = new ExpantaNum(ret.elementary.theory.depth).toString(); + ret.elementary.theory.bestDepth = new ExpantaNum(ret.elementary.theory.bestDepth).toString(); ret.elementary.theory.supersymmetry.squarks = new ExpantaNum(ret.elementary.theory.supersymmetry.squarks).toString(); ret.elementary.theory.supersymmetry.sleptons = new ExpantaNum(ret.elementary.theory.supersymmetry.sleptons).toString(); ret.elementary.theory.supersymmetry.neutralinos = new ExpantaNum(ret.elementary.theory.supersymmetry.neutralinos).toString(); ret.elementary.theory.supersymmetry.charginos = new ExpantaNum(ret.elementary.theory.supersymmetry.charginos).toString(); ret.elementary.theory.tree.spent = new ExpantaNum(ret.elementary.theory.tree.spent).toString(); if (Object.keys(ret.elementary.theory.tree.upgrades).length>0) for (let i=0;i=1 || ret.mlt.active==1) ret.mlt.highestUnlocked = 1; + } + if (ret.mlt.mlt1selected === undefined) ret.mlt.mlt1selected = []; + if (ret.mlt.mlt3selected === undefined) ret.mlt.mlt3selected = []; ret.distance = new ExpantaNum(ret.distance); ret.velocity = new ExpantaNum(ret.velocity); ret.rank = new ExpantaNum(ret.rank); @@ -205,6 +226,7 @@ function transformToEN(obj, sc = DEFAULT_START) { ret.inf.pantheon.demons = new ExpantaNum(ret.inf.pantheon.demons); ret.inf.pantheon.heavenlyChips = new ExpantaNum(ret.inf.pantheon.heavenlyChips); ret.inf.pantheon.demonicSouls = new ExpantaNum(ret.inf.pantheon.demonicSouls); + ret.inf.pantheon.hauntingEnergy = new ExpantaNum(ret.inf.pantheon.hauntingEnergy||0); ret.inf.pantheon.purge.power = new ExpantaNum(ret.inf.pantheon.purge.power); if (Object.keys(ret.inf.derivatives.amts).length > 0) for (const key in ret.inf.derivatives.amts) @@ -216,6 +238,7 @@ function transformToEN(obj, sc = DEFAULT_START) { ret.bestA = new ExpantaNum(ret.bestA) ret.bestEnd = new ExpantaNum(ret.bestEnd) ret.bestEP = new ExpantaNum(ret.bestEP) + ret.bestDemonicSouls = new ExpantaNum(ret.bestDemonicSouls); ret.elementary.times = new ExpantaNum(ret.elementary.times); ret.elementary.particles = new ExpantaNum(ret.elementary.particles); ret.elementary.fermions.amount = new ExpantaNum(ret.elementary.fermions.amount); @@ -227,7 +250,7 @@ function transformToEN(obj, sc = DEFAULT_START) { ret.elementary.bosons.gauge.photons.amount = new ExpantaNum(ret.elementary.bosons.gauge.photons.amount); for (let i = 0; i < 4; i++) ret.elementary.bosons.gauge.photons.upgrades[i] = new ExpantaNum( - ret.elementary.bosons.gauge.photons.upgrades[i] + ret.elementary.bosons.gauge.photons.upgrades[i]||0 ); ret.elementary.bosons.gauge.w = new ExpantaNum(ret.elementary.bosons.gauge.w); ret.elementary.bosons.gauge.z = new ExpantaNum(ret.elementary.bosons.gauge.z); @@ -284,13 +307,14 @@ function transformToEN(obj, sc = DEFAULT_START) { ret.elementary.bosons.scalar.higgs.amount = new ExpantaNum(ret.elementary.bosons.scalar.higgs.amount); ret.elementary.theory.points = new ExpantaNum(ret.elementary.theory.points); ret.elementary.theory.depth = new ExpantaNum(ret.elementary.theory.depth); + ret.elementary.theory.bestDepth = new ExpantaNum(ret.elementary.theory.bestDepth).max(ret.elementary.theory.depth); ret.elementary.theory.supersymmetry.squarks = new ExpantaNum(ret.elementary.theory.supersymmetry.squarks); ret.elementary.theory.supersymmetry.sleptons = new ExpantaNum(ret.elementary.theory.supersymmetry.sleptons); ret.elementary.theory.supersymmetry.neutralinos = new ExpantaNum(ret.elementary.theory.supersymmetry.neutralinos); ret.elementary.theory.supersymmetry.charginos = new ExpantaNum(ret.elementary.theory.supersymmetry.charginos); ret.elementary.theory.tree.spent = new ExpantaNum(ret.elementary.theory.tree.spent); if (Object.keys(ret.elementary.theory.tree.upgrades).length>0) for (let i=0;i x / 10 <= 13); - if (modeActive("na")) a = a.filter(x => Object.keys(ACH_DATA.rewards).includes(x.toString())); + if ((modeActive("na")&&NAactive==undefined)||NAactive) a = a.filter(x => Object.keys(ACH_DATA.rewards).includes(x.toString())); return a; } @@ -387,15 +420,16 @@ async function showHiddenDiv(data) { document.body.appendChild(resetContainer); await sleep(3); - document.getElementById("resetContainerBody").style.display = ""; + if (document.getElementById("resetContainerBody")) document.getElementById("resetContainerBody").style.display = ""; } -async function closeHiddenDiv() { +async function closeHiddenDiv(fast=false) { let element = document.getElementById("resetContainer"); if (!element) return; document.getElementById("resetContainerBody").style.display = "none"; document.getElementById("reset").className = "hiddenDivShrink"; - await sleep(1.4); + if (!fast) await sleep(1.4); + if (!element.parentNode) return; element.parentNode.removeChild(element); showContainer = true; updateTemp(); diff --git a/js/functions/tabs.js b/js/functions/tabs.js index 9fd9b136..a1896730 100644 --- a/js/functions/tabs.js +++ b/js/functions/tabs.js @@ -6,21 +6,23 @@ function isTabShown(name) { function getTabBtnsShown() { let btns = []; - for (j = 0; j < Object.keys(TABBTN_SHOWN).length; j++) - if (Object.values(TABBTN_SHOWN)[i]()) btns.push(Object.keys(TABBTN_SHOWN)[i]); + for (j = 0; j < Object.keys(TABBTN_SHOWN).length; j++) + if (Object.values(TABBTN_SHOWN)[j]()) btns.push(Object.keys(TABBTN_SHOWN)[j]); return btns; } function updateTabs() { + if (player.options.tabsHidden===undefined) player.options.tabsHidden = []; var tabs = document.getElementsByClassName("tab"); for (i = 0; i < tabs.length; i++) { var el = new Element(tabs[i].id); el.setDisplay(isTabShown(tabs[i].id)); var elT = new Element(tabs[i].id + "tabbtn"); elT.changeStyle("visibility", getTabBtnsShown().includes(tabs[i].id)?"visible":"hidden"); + elT.setDisplay(!player.options.tabsHidden.includes(tabs[i].id)) } - new Element("furnacetabbtn").setDisplay(player.modes.includes("extreme")) - new Element("energytabbtn").setDisplay(player.modes.includes("hikers_dream")) + if (!player.options.tabsHidden.includes("furnace")) new Element("furnacetabbtn").setDisplay(player.modes.includes("extreme")) + if (!player.options.tabsHidden.includes("energy")) new Element("energytabbtn").setDisplay(player.modes.includes("hikers_dream")) } function showTab(name) { @@ -44,3 +46,30 @@ function updateOptionsTabs() { function showOptionsTab(name) { player.optionsTab = name; } + +// Stats Tabs + +function isStatTabShown(name) { + return statTab == name; +} + +function getStatTabBtnsShown() { + let btns = []; + for (j = 0; j < Object.keys(STAT_TABBTN_SHOWN).length; j++) + if (Object.values(STAT_TABBTN_SHOWN)[i]()) btns.push(Object.keys(STAT_TABBTN_SHOWN)[i]); + return btns; +} + +function updateStatTabs() { + var tabs = document.getElementsByClassName("stattab"); + for (i = 0; i < tabs.length; i++) { + var el = new Element(tabs[i].id); + el.setDisplay(isStatTabShown(tabs[i].id)); + var elT = new Element(tabs[i].id + "btn"); + elT.changeStyle("visibility", getStatTabBtnsShown().includes(tabs[i].id)?"visible":"hidden"); + } +} + +function showStatTab(name) { + statTab = name; +} \ No newline at end of file diff --git a/js/game.js b/js/game.js index 3bbcc1f1..5bda9551 100644 --- a/js/game.js +++ b/js/game.js @@ -3,6 +3,7 @@ var player = transformToEN(DEFAULT_START, DEFAULT_START); var loaded = false; var interval; +var intervalPerSec; var autoTimes = {}; for (let i = 0; i < Object.keys(ROBOT_REQS).length; i++) autoTimes[Object.keys(ROBOT_REQS)[i]] = new ExpantaNum(0); var tmp = {}; @@ -20,17 +21,25 @@ var elmTab = "fermions"; var bosTab = "gauge"; var hcTab = "mainHC"; var foamTab = "qf1"; +var skyTab = "skyrmions"; +var mltTab = "mltMap"; +var statTab = "mainStats"; +var statScalingsShown = false; +var pionSel = 0; +var spinorSel = 0; +var mltSelected = "NONE"; +var ttaid = 1; var gluonTab = "r"; var thTab = "tv"; var enTab = "mainEN"; var autoRobotTarget = 0 -var betaID = ""; // beta1.8 -var checkForBetas = {"beta1.8": 1.8} +var betaID = ""; //beta2.0 +var completedModeCombos = []; var needUpdate = true var updating = false var visUpdTicks = 1/0 var robotActives = {} -var correctLink = "jacorb90.github.io" +var correctLink = "jacorb90.me" var outerShiftDown = false // Game Loops @@ -67,12 +76,16 @@ function tickWithoutTS(diff) { if (modeActive("extreme")?tmp.fn.enh.unl:false) { player.furnace.enhancedCoal = player.furnace.enhancedCoal.plus(adjustGen(tmp.fn.enh.gain, "fn").times(diff)); } - if (player.elementary.times.gt(0)) elTick(diff); + if (player.elementary.times.gt(0) || player.mlt.times.gt(0)) elTick(diff); if (modeActive("hikers_dream")) { player.energy = player.energy.sub(tmp.hd.energyLoss.times(diff)).max(0); if (player.inf.endorsements.gte(10)) player.energy = player.energy.plus(tmp.hd.energyGen.times(diff)).min(getEnergyLim()) player.bestMotive = player.bestMotive.max(tmp.hd.motive) } + if (modeActive("extreme")&&player.elementary.sky.unl) { + if (tmp.fn.pl.exp.gte(1)) player.plasma.amount = player.plasma.amount.root(tmp.fn.pl.exp).plus(diff).pow(tmp.fn.pl.exp); + player.plasma.whiteFlame = player.plasma.whiteFlame.plus(adjustGen(tmp.fn.pl.wfGain, "plasma").times(diff)); + } } function tickWithTR(diff) { @@ -81,6 +94,11 @@ function tickWithTR(diff) { .min(nerfActive("maxVelActive") ? tmp.maxVel : 1 / 0) .max(0); player.distance = player.distance.plus(adjustGen(player.velocity, "dist").times(modeActive("hikers_dream")?tmp.hd.enEff:1).times(diff)).max(0); + let fc = multiverseCapped() + if (fc) { + player.velocity = player.velocity.min(DISTANCES.mlt) + player.distance = player.distance.min(DISTANCES.mlt) + } player.inf.bestDist = player.inf.bestDist.max(player.distance) player.bestDistance = player.bestDistance.max(player.distance) player.bestV = player.bestV.max(player.velocity) @@ -106,7 +124,7 @@ function gameLoop(diff) { visUpdTicks++ if (needUpdate) updating = true updateBeforeTick(); - if (showContainer && !needUpdate) { + if (showContainer && !needUpdate && !infActive && !multiversePaused()) { tickWithoutTS(diff); tickWithTS(diff.times(nerfActive("noTS") ? 1 : tmp.timeSpeed)); } diff --git a/js/main/auto.js b/js/main/auto.js index b2e13a83..e03c2484 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -13,8 +13,8 @@ function updateTempAuto() { tmp.auto.intMod = new ExpantaNum(1); tmp.auto.magMod = new ExpantaNum(1); if (modeActive("hard")) { - tmp.auto.intMod = tmp.auto.intMod.times(2 / 3); - tmp.auto.magMod = tmp.auto.magMod.times(2 / 3); + tmp.auto.intMod = tmp.auto.intMod.times(5 / 6); + tmp.auto.magMod = tmp.auto.magMod.times(5 / 6); } if (modeActive("easy")) { tmp.auto.intMod = tmp.auto.intMod.times(2); @@ -74,8 +74,7 @@ function updateAutoTxt(name) { } } -function autoTick(diff) { - // Normal Automation +function normalAutoTick(diff){ if (player.automation.unl) { player.automation.scraps = player.automation.scraps .plus(adjustGen(getScrapGain(), "scraps").times(diff)) @@ -94,23 +93,49 @@ function autoTick(diff) { } } } +} - // Automators +function furnaceAutoTick(){ if (player.automators["furnace"] && modeActive("extreme")) { let cap = (FCComp(5)?5:(player.tr.upgrades.includes(31)?4:3)) for (let i = 1; i <= cap; i++) tmp.fn.upgs[i].max(); if (player.furnace.coal.gte(tmp.fn.bfReq)) player.furnace.blueFlame = player.furnace.blueFlame.max(tmp.fn.bfBulk.floor()); for (let i=1;i<=13;i++) tmp.fn.enh.upgs[i].max(); } +} + +function magmaAutoTick() { + if (player.automators["magma"] && modeActive("extreme")) { + magmaSearch(true); + reformMagma(true); + } +} + +function plasmaAutoTick() { + if (player.automators["plasma"] && modeActive("extreme")) { + buyPlasmaBoost(true); + } +} + +function pathogenAutoTick(){ if (player.automators["pathogens"]) tmp.pathogens.maxAll(); +} + +function darkCoreAutoTick(){ if (player.automators["cores"] && player.collapse.cadavers.gt(tmp.dc.coreCost)) tmp.dc.maxCores(); +} + +function robotAutoTick(){ if (player.automators["robots"]) { - if (Object.keys(ROBOT_REQS)[autoRobotTarget]=="rankCheapbot") autoRobotTarget++ + if (!modeActive("extreme")) if (Object.keys(ROBOT_REQS)[autoRobotTarget]=="rankCheapbot") autoRobotTarget++ let robot = tmp.auto[Object.keys(ROBOT_REQS)[autoRobotTarget]] if (!robot.unl && player.automation.scraps.gte(ROBOT_REQS[robot.name])) robot.btn() if (robot.unl) tmp.auto[Object.keys(ROBOT_REQS)[autoRobotTarget]].maxAll(true) autoRobotTarget = (autoRobotTarget+1)%Object.keys(ROBOT_REQS).length } +} + +function infUpgAutoTick(){ if (player.automators["infinity_upgrades"]) { let applRows = [...Array(INF_UPGS.rows).keys()].map(x => x+1).filter(r => (r>3?INF_UPGS.rowReqs[r]():true)) let applCols = [...Array(INF_UPGS.cols).keys()].map(x => x+1).filter(c => (c>3?INF_UPGS.colReqs[c]():true)) @@ -120,17 +145,35 @@ function autoTick(diff) { }()) }()) } +} + +function endorseAutoTick(){ if (player.automators["endorsements"] && player.distance.gte(tmp.inf.req)) { if (tmp.elm.bos.hasHiggs("0;0;3") || tmp.ach[142].has) tmp.inf.maxEndorse(tmp.ach[142].has) else { if (tmp.ach[142].has) { - if (player.distance.gte(tmp.inf.req)) player.inf.endorsements = player.inf.endorsements.plus(1) + if (player.distance.gte(tmp.inf.req)) { + player.inf.endorsements = player.inf.endorsements.plus(1); + player.inf.unl = true; + } } else tmp.inf.manualReset(true) } } +} + +function perksAutoTick(){ if (player.automators["perks"]) for (let i=1;i<=4;i++) if (player.inf.ascension.time[i-1].eq(0)) tmp.inf.asc.activatePerk(i) +} + +function enlightenmentAutoTick(){ if (player.automators["enlightenments"]) for (let i=1;i<=4;i++) tmp.inf.asc.maxEnl(i) +} + +function derivAutoTick(){ if (player.automators["derivative_boosts"]) tmp.inf.derv.maxBoosts() +} + +function elemenAutoTick(){ if (player.automators["elementaries"]) { let mode = player.autoModes["elementaries"] let val = new ExpantaNum(player.autoTxt["elementaries"]||0) @@ -140,29 +183,161 @@ function autoTick(diff) { if (player.elementary.time.gte(val)) elmReset(false, true) } } - if (player.automators["foam_unlocks"]) { - if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) - else refoam(); +} + +function spectralGemAutoTick(){ + if (player.automators["spectral_gems"]) { + if (!player.inf.pantheon.gems.eq(0)) { + let types = ["angels", "demons"] + let taken = [player.inf.pantheon.angels, player.inf.pantheon.demons] + if (taken[0].gt(taken[1])) tmp.inf.pantheon.transfer("demons", taken[0].sub(taken[1]).min(player.inf.pantheon.gems)) + else if (taken[1].gt(taken[0])) tmp.inf.pantheon.transfer("angels", taken[1].sub(taken[0]).min(player.inf.pantheon.gems)) + if (player.inf.pantheon.gems.gt(0)) { + taken = [player.inf.pantheon.angels, player.inf.pantheon.demons] + tmp.inf.pantheon.transfer("demons", player.inf.pantheon.gems.div(2).floor()) + tmp.inf.pantheon.transfer("angels", player.inf.pantheon.gems) + } + } } - if (player.automators["photon_upgrades"]) for (let i=1;i<=4;i++) tmp.elm.bos.buyLU(i, true) +} + +function photonsAutoTick(){ + if (player.automators["photon_upgrades"]) for (let i=1;i<=4;i++) { + tmp.elm.bos.buyLU(i, true) + tmp.elm.bos.buyLU(i) + } +} + +function gluonAutoTick(){ if (player.automators["gluon_upgrades"]) for (let i = 0; i < GLUON_COLOURS.length; i++) { let col = GLUON_COLOURS[i]; - for (let x=1;x<=(hasDE(1)?3:2);x++) tmp.elm.bos.buy(col, x, true) - } - if (player.automators["spectral_gems"]) { // NEEDS to be last due to RETURNS - if (player.inf.pantheon.gems.eq(0)) return - let types = ["angels", "demons"] - let taken = [player.inf.pantheon.angels, player.inf.pantheon.demons] - if (taken[0].gt(taken[1])) tmp.inf.pantheon.transfer("demons", taken[0].sub(taken[1]).min(player.inf.pantheon.gems)) - else if (taken[1].gt(taken[0])) tmp.inf.pantheon.transfer("angels", taken[1].sub(taken[0]).min(player.inf.pantheon.gems)) - if (player.inf.pantheon.gems.gt(0)) { - taken = [player.inf.pantheon.angels, player.inf.pantheon.demons] - tmp.inf.pantheon.transfer("demons", player.inf.pantheon.gems.div(2).floor()) - tmp.inf.pantheon.transfer("angels", player.inf.pantheon.gems) + for (let x=1;x<=2;x++) tmp.elm.bos.buy(col, x, true) + if (hasDE(1)) buyGluon3(col, true) + } +} + +function theoriverseAutoPerSec() { + if (player.automators["theoriverse"] && player.elementary.theory.unl && hasMltMilestone(4)) { + if (HCTVal("tv").gt(-1)) return; + let a = player.distance.div("1e1000000") + if (modeActive("easy")) a = a.root(5/6); + if (modeActive("hikers_dream")) { + a = a.root(4/3); + a = a.root(9/8); + a = a.root((modeActive("extreme+hikers_dream")?2.675:4) / 3) + } + if (modeActive("extreme")) a = a.root(1.25); + let target = a.logBase(1/0.8).root(4/3).plus(tmp.elm.theory.subbed) + if (target.gte(20)) target = target.log(20).plus(19) + target = target.floor(); + let toAdd = target.sub(player.elementary.theory.depth.max(0)) + let oldPoints = tmp.elm.theory.gainMult.times(ExpantaNum.sub(1, ExpantaNum.pow(2, player.elementary.theory.depth))).times(-1); + let newPoints = tmp.elm.theory.gainMult.times(ExpantaNum.sub(1, ExpantaNum.pow(2, target.max(player.elementary.theory.depth)))).times(-1); + if (toAdd.gt(0)) { + player.elementary.theory.points = player.elementary.theory.points.plus(newPoints.sub(oldPoints).max(0).round()) + player.elementary.theory.depth = player.elementary.theory.depth.max(target); + player.elementary.theory.bestDepth = player.elementary.theory.bestDepth.max(target); + } + } +} + +function theoryTreeAutoTick(){ + if (player.automators["tree_upgrades"]) { + if (player.elementary.theory.tree.unl) { + tmp.elm.theory.tree.buy(ttaid, true) + tmp.elm.theory.tree.buy(ttaid) + ttaid = (ttaid%(Object.keys(TREE_UPGS).length))+1 } } } +function theoryBoosterAutoTick() { + if (player.automators["theoretical_boosters"] && player.elementary.entropy.upgrades.includes(17) && player.elementary.theory.unl) theoryBoost(true) +} + +function foamUnlocksAutoTick() { + if (player.automators["foam_unlocks"] && player.elementary.foam.unl) { + if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) + else refoam(); + } +} + +function entropyAutoTick(){ + if (player.automators["entropy"] && player.elementary.entropy.unl && !mltActive(3)) { + player.elementary.entropy.amount = player.elementary.entropy.amount.plus(tmp.elm.entropy.gain) + player.elementary.entropy.best = player.elementary.entropy.best.max(player.elementary.entropy.amount) + } +} + +function entropyUpgAutoTick(){ + if (player.automators["entropy_upgrades"] && player.elementary.entropy.unl && !mltActive(3)) { + let toBuy = Array.from({length: ENTROPY_UPGS}, (v, i) => i+1).filter(x => !player.elementary.entropy.upgrades.includes(x)&&entropyUpgShown(x)); + if (toBuy.length==0) return; + let nextUpg = toBuy.reduce((a,c) => ENTROPY_UPG_AUTO_ORDER[Math.min(ENTROPY_UPG_AUTO_ORDER.indexOf(a),ENTROPY_UPG_AUTO_ORDER.indexOf(c))]); + buyEntropyUpg(nextUpg) + } +} + +function energyAutoTick(){ + if (!modeActive("hikers_dream")) return + if (tmp.ach) if (tmp.ach[141].has) { + buyGen() + newGen() + } +} + +function pionSpinorAutoTick() { + if (player.automators["pion_field"] && hasMltMilestone(8) && player.elementary.sky.unl) maxField("pions") + if (player.automators["spinor_field"] && hasMltMilestone(9) && player.elementary.sky.unl) maxField("spinors") +} + +function multivAutoTick() { + if (player.automators["multiverse_runs"]) { + let mode = player.autoModes["multiverse_runs"] + let val = new ExpantaNum(player.autoTxt["multiverse_runs"]||0) + if (mode=="AMOUNT") { + if (tmp.mlt.layer.gain.gte(val)) mltReset(false, true) + } else if (mode=="TIME") { + if (player.elementary.time.gte(val)) mltReset(false, true) + } + } +} + +function autoTick(diff) { + normalAutoTick(diff) + furnaceAutoTick() + pathogenAutoTick() + darkCoreAutoTick() + robotAutoTick() + infUpgAutoTick() + endorseAutoTick() + perksAutoTick() + enlightenmentAutoTick() + derivAutoTick() + elemenAutoTick() + spectralGemAutoTick() + photonsAutoTick() + gluonAutoTick() + theoryTreeAutoTick() + theoryBoosterAutoTick() + if (hasMltMilestone(21)) foamUnlocksAutoTick(); + entropyAutoTick() + entropyUpgAutoTick() + energyAutoTick() + pionSpinorAutoTick() + multivAutoTick() + magmaAutoTick() + plasmaAutoTick() +} + +function autoPerSec() { + theoriverseAutoPerSec() + if (!hasMltMilestone(21) && player.automators["foam_unlocks"] && player.elementary.foam.unl) { + if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) + else refoam(); + } +} + function toggleRobot(name) { player.automation.robots[name][2] = !player.automation.robots[name][2] } \ No newline at end of file diff --git a/js/main/collapse.js b/js/main/collapse.js index 3b37d70e..5aa7356e 100644 --- a/js/main/collapse.js +++ b/js/main/collapse.js @@ -24,9 +24,12 @@ function getCadaverEff() { .log10() .pow(scp.pow(-1)) .times(scs.div(scs.log10().pow(scp.pow(-1)))); - eff =eff.pow( + eff = eff.pow( tmp.elm && player.elementary.times.gt(0) ? tmp.elm.ferm.leptonR("muon").max(1) : 1 ); + if (player.elementary.sky.unl && tmp.elm) eff = eff.pow(tmp.elm.sky.pionEff[4]) + if (player.elementary.sky.unl && tmp.elm) eff = eff.pow(tmp.elm.sky.pionEff[12]) + if (player.elementary.entropy.upgrades.includes(35) && modeActive("extreme")) eff = eff.pow(100); return eff; } @@ -42,6 +45,19 @@ function hasCollapseMilestone(n) { return player.collapse.lifeEssence.gte(ESSENCE_MILESTONES[n].req); } +function calcCollpaseSCS(){ + tmp.collapse.sc = new ExpantaNum(LAYER_SC["collapse"]); + if (tmp.pathogens && player.pathogens.unl) tmp.collapse.sc = tmp.collapse.sc.times(tmp.pathogens[9].eff()); + if (tmp.inf) tmp.collapse.sc = tmp.collapse.sc.times(tmp.inf.asc.perkEff(4)); +} + +function calcCollapseSacEff(){ + tmp.collapse.sacEff = new ExpantaNum(1); + if (modeActive("hard")) tmp.collapse.sacEff = tmp.collapse.sacEff.div(1.4); + if (modeActive("easy")) tmp.collapse.sacEff = tmp.collapse.sacEff.times(1.6); + if (tmp.pathogens && player.pathogens.unl) tmp.collapse.sacEff = tmp.collapse.sacEff.times(tmp.pathogens[6].eff()); +} + function updateTempCollapse() { if (!tmp.collapse) { tmp.collapse = {}; @@ -52,9 +68,7 @@ function updateTempCollapse() { tmp.inf.derv.resetDervs(); }; } - tmp.collapse.sc = new ExpantaNum(LAYER_SC["collapse"]); - if (tmp.pathogens && player.pathogens.unl) tmp.collapse.sc = tmp.collapse.sc.times(tmp.pathogens[9].eff()); - if (tmp.inf) tmp.collapse.sc = tmp.collapse.sc.times(tmp.inf.asc.perkEff(4)); + calcCollpaseSCS() tmp.collapse.lrm = new ExpantaNum(1); if (modeActive("hard")) tmp.collapse.lrm = tmp.collapse.lrm.div(50); tmp.collapse.can = player.distance.gte(ExpantaNum.mul(LAYER_REQS["collapse"][1], tmp.collapse.lrm)); @@ -63,10 +77,7 @@ function updateTempCollapse() { tmp.collapse.doGain = function () { player.collapse.cadavers = player.collapse.cadavers.plus(tmp.collapse.layer.gain); }; - tmp.collapse.sacEff = new ExpantaNum(1); - if (modeActive("hard")) tmp.collapse.sacEff = tmp.collapse.sacEff.div(1.4); - if (modeActive("easy")) tmp.collapse.sacEff = tmp.collapse.sacEff.times(1.6); - if (tmp.pathogens && player.pathogens.unl) tmp.collapse.sacEff = tmp.collapse.sacEff.times(tmp.pathogens[6].eff()); + calcCollapseSacEff() } function collapseMile1Eff() { @@ -110,7 +121,7 @@ function getCadaverGainMult() { mult = mult.div(2); tmp.clghm = true; } - if (modeActive("extreme") && FCComp(5)) mult = mult.times(ExpantaNum.pow(2, player.furnace.upgrades[4])) + if (modeActive("extreme") && FCComp(5)) mult = mult.times(ExpantaNum.pow(2, player.furnace.upgrades[4].times(tmp.fn ? tmp.fn.upgPow : 1))) if (tmp.ach[68].has && modeActive("extreme")) mult = mult.times(5); if (tmp.collapse) if (modeActive("easy")) mult = mult.times(3); if (tmp.elm) if (player.elementary.times.gt(0)) mult = mult.times(tmp.elm.ferm.quarkR("down").max(1)); diff --git a/js/main/dc.js b/js/main/dc.js index 10fc7a5e..aefa767c 100644 --- a/js/main/dc.js +++ b/js/main/dc.js @@ -1,148 +1,59 @@ function updateTempDarkCoreCost(){ - tmp.dc.coreCost = ExpantaNum.pow(10, ExpantaNum.pow(10, player.dc.cores.div(50).plus(1))).times( - modeActive("extreme") ? 0.25 : 10 - ); - tmp.dc.bulk = player.collapse.cadavers - .div(modeActive("extreme") ? 0.25 : 10) - .max(1) - .log10() - .max(1) - .log10() - .sub(1) - .times(50) - .plus(1); + let nAmt = player.dc.cores.max(tmp.dc.bulk) + let start = getScalingStart("scaled", "darkCore"); - let power = getScalingPower("scaled", "darkCore"); + let power = scalingActive("darkCore", nAmt, "scaled") ? getScalingPower("scaled", "darkCore") : 0 let exp = ExpantaNum.pow(2, power); - if (scalingActive("darkCore", player.dc.cores.max(tmp.dc.bulk), "scaled")) { - tmp.dc.coreCost = ExpantaNum.pow( - 10, - ExpantaNum.pow( - 10, - player.dc.cores - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(50) - .plus(1) - ) - ).times(modeActive("extreme") ? 0.25 : 10); - tmp.dc.bulk = player.collapse.cadavers - .div(modeActive("extreme") ? 0.25 : 10) - .max(1) - .log10() - .max(1) - .log10() - .sub(1) - .times(50) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .add(1); - } let start2 = getScalingStart("superscaled", "darkCore"); - let power2 = getScalingPower("superscaled", "darkCore"); + let power2 = scalingActive("darkCore", nAmt, "superscaled") ? getScalingPower("superscaled", "darkCore") : 0 let exp2 = ExpantaNum.pow(3, power2); - if (scalingActive("darkCore", player.dc.cores.max(tmp.dc.bulk), "superscaled")) { - tmp.dc.coreCost = ExpantaNum.pow( - 10, - ExpantaNum.pow( - 10, - player.dc.cores - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(50) - .plus(1) - ) - ).times(modeActive("extreme") ? 0.25 : 10); - tmp.dc.bulk = player.collapse.cadavers - .div(modeActive("extreme") ? 0.25 : 10) - .max(1) - .log10() - .max(1) - .log10() - .sub(1) - .times(50) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .times(start2.pow(exp2.sub(1))) - .pow(exp2.pow(-1)) - .add(1); - } let start3 = getScalingStart("hyper", "darkCore"); let power3 = getScalingPower("hyper", "darkCore"); let base3 = ExpantaNum.pow(1.03, power3); - if (scalingActive("darkCore", player.dc.cores.max(tmp.dc.bulk), "hyper")) { - tmp.dc.coreCost = ExpantaNum.pow( - 10, - ExpantaNum.pow( - 10, - ExpantaNum.pow(base3, player.dc.cores.sub(start3)) - .times(start3) - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(50) - .plus(1) - ) - ).times(modeActive("extreme") ? 0.25 : 10); - tmp.dc.bulk = player.collapse.cadavers - .div(modeActive("extreme") ? 0.25 : 10) - .max(1) - .log10() - .max(1) - .log10() - .sub(1) - .times(50) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .times(start2.pow(exp2.sub(1))) - .pow(exp2.pow(-1)) - .div(start3) - .max(1) - .logBase(base3) - .add(start3) - .add(1); + + let bcMult = modeActive("extreme") ? 0.25 : 10 + + let starting + if (scalingActive("darkCore", nAmt, "hyper")) { + if (!(scalingActive("darkCore", player.dc.cores, "hyper")) && (!modeActive("extreme")&&!modeActive("hikers_dream"))) starting = player.dc.cores; + else starting = ExpantaNum.pow(base3, player.dc.cores.sub(start3)).times(start3) + } else { + starting = player.dc.cores } -} -function updateTempDC() { - tmp.dc = {}; - tmp.dc.lrm = new ExpantaNum(1); - if (modeActive("extreme")) tmp.dc.lrm = tmp.dc.lrm.times(1e-28); - tmp.dc.dmGain = ExpantaNum.pow(2, player.dc.cores).sub(1).times(player.dc.fluid.plus(1).log10().plus(1)).max(0); - tmp.dc.deGain = player.dc.matter.plus(1).log10(); - tmp.dc.dfGain = player.dc.energy.plus(1).log10(); - if (tmp.inf) - if (tmp.inf.upgs.has("8;1")) { - let fp = new ExpantaNum(1); - if (tmp.inf.upgs.has("8;8")) fp = fp.times(INF_UPGS.effects["8;8"]()); - tmp.dc.dmGain = ExpantaNum.pow(2, player.dc.cores) - .sub(1) - .times( - player.dc.fluid - .plus(1) - .log10() - .plus(1) - .times(player.dc.fluid.plus(1).pow(ExpantaNum.mul(1 / 5, fp))) - ) - .max(0); - tmp.dc.deGain = player.dc.matter - .plus(1) - .log10() - .times(player.dc.matter.plus(1).pow(ExpantaNum.mul(1 / 5, fp))); - tmp.dc.dfGain = player.dc.energy + tmp.dc.coreCost = ExpantaNum.pow( + 10, + ExpantaNum.pow( + 10, + starting + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .div(50) .plus(1) - .log10() - .times(player.dc.energy.plus(1).pow(ExpantaNum.mul(1 / 5, fp))); - } - tmp.dc.allComp = player.dc.matter - .plus(1) + ) + ).times(bcMult); + let starting2 = player.collapse.cadavers + .div(bcMult) + .max(1) .log10() - .plus(player.dc.energy.plus(1).log10()) - .plus(player.dc.fluid.plus(1).log10()) - .plus(player.dc.cores); + .max(1) + .log10() + .sub(1) + .times(50) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .times(start2.pow(exp2.sub(1))) + .pow(exp2.pow(-1)) + + if (scalingActive("darkCore", nAmt, "hyper")) { + if (!(scalingActive("darkCore", player.dc.cores, "hyper")) && (!modeActive("extreme")&&!modeActive("hikers_dream"))) tmp.dc.bulk = starting2.add(1); + else tmp.dc.bulk = starting2.div(start3).max(1).logBase(base3).add(start3).add(1); + } else tmp.dc.bulk = starting2.add(1); +} + +function calcDarkFlow(){ tmp.dc.flow = new ExpantaNum(1); if (tmp.ach[75].has) tmp.dc.flow = tmp.dc.flow.times(1.1); if (tmp.ach[83].has) tmp.dc.flow = tmp.dc.flow.times(1.2); @@ -161,46 +72,102 @@ function updateTempDC() { if (tmp.inf.upgs.has("10;5")) tmp.dc.flow = tmp.dc.flow.times(INF_UPGS.effects["10;5"]()); if (tmp.inf.upgs.has("10;10")) tmp.dc.flow = tmp.dc.flow.times(INF_UPGS.effects["10;10"]()); } - if (tmp.elm) if (player.elementary.times.gt(0)) tmp.dc.flow = tmp.dc.flow.times(tmp.elm.bos.z2.max(1)); + if (tmp.elm) { + if (player.elementary.times.gt(0)) tmp.dc.flow = tmp.dc.flow.times(tmp.elm.bos.z2.max(1)); + if (player.elementary.sky.unl) tmp.dc.flow = tmp.dc.flow.times(tmp.elm.sky.pionEff[5]); + } if (extremeStadiumActive("quantron", 5)) tmp.dc.flow = tmp.dc.flow.pow(0.95); if (nerfActive("noDarkFlow")) tmp.dc.flow = new ExpantaNum(0); +} + +function calcDarkCircleBonus(){ tmp.dc.power = new ExpantaNum(1); if (player.tr.upgrades.includes(15) && !HCCBA("noTRU")) tmp.dc.power = tmp.dc.power.times(tr15Eff()); + if (tmp.inf) if (tmp.inf.stadium.completed("reality") && mltRewardActive(1)) tmp.dc.power = tmp.dc.power.times(8); tmp.dc.dmEff = player.dc.matter.times(tmp.dc.flow).plus(1).pow(ExpantaNum.mul(0.1, tmp.dc.power)); - if (tmp.inf) - if (tmp.inf.upgs.has("6;8")) - tmp.dc.dmEff = tmp.dc.dmEff.max( - player.dc.matter - .times(tmp.dc.flow) - .plus(1) - .pow( - ExpantaNum.mul( - ExpantaNum.pow(2, player.dc.matter.plus(10).slog(10).sub(1)).div(10), - tmp.dc.power - ) - ) - .pow(5) - ); tmp.dc.deEff = player.dc.energy.times(tmp.dc.flow).plus(1).pow(ExpantaNum.mul(0.125, tmp.dc.power)); - if (tmp.inf) - if (tmp.inf.upgs.has("6;8")) - tmp.dc.deEff = tmp.dc.deEff.max( - player.dc.energy - .times(tmp.dc.flow) - .plus(1) - .pow( - ExpantaNum.mul( - ExpantaNum.pow(2, player.dc.energy.plus(10).slog(10).sub(1)).div(8), - tmp.dc.power - ) + if (tmp.inf && tmp.inf.upgs.has("6;8")) { + tmp.dc.dmEff = tmp.dc.dmEff.max( + player.dc.matter + .times(tmp.dc.flow) + .plus(1) + .pow( + ExpantaNum.mul( + ExpantaNum.pow(2, player.dc.matter.plus(10).slog(10).sub(1)).div(10), + tmp.dc.power ) - .pow(10) - ); - tmp.dc.dfEff = extremeStadiumActive("spectra", 4)?new ExpantaNum(0):(player.dc.fluid.times(tmp.dc.flow).plus(1).log10().plus(1).log10().times(tmp.dc.power)); + ) + .pow(5) + ); + tmp.dc.deEff = tmp.dc.deEff.max( + player.dc.energy + .times(tmp.dc.flow) + .plus(1) + .pow( + ExpantaNum.mul( + ExpantaNum.pow(2, player.dc.energy.plus(10).slog(10).sub(1)).div(8), + tmp.dc.power + ) + ) + .pow(10) + ); + } + tmp.dc.dfEff = extremeStadiumActive("spectra", 4) ? new ExpantaNum(0) : (player.dc.fluid.times(tmp.dc.flow).plus(1).log10().plus(1).log10().times(tmp.dc.power)); +} + +function calcDarkCircleGain(){ + tmp.dc.dmGain = ExpantaNum.pow(2, player.dc.cores).sub(1).times(player.dc.fluid.plus(1).log10().plus(1)).max(0); + tmp.dc.deGain = player.dc.matter.plus(1).log10(); + tmp.dc.dfGain = player.dc.energy.plus(1).log10(); + if (tmp.inf && tmp.inf.upgs.has("8;1")) { + let fp = new ExpantaNum(1); + if (tmp.inf.upgs.has("8;8")) fp = fp.times(INF_UPGS.effects["8;8"]()); + tmp.dc.dmGain = ExpantaNum.pow(2, player.dc.cores) + .sub(1) + .times( + player.dc.fluid + .plus(1) + .log10() + .plus(1) + .times(player.dc.fluid.plus(1).pow(ExpantaNum.mul(1 / 5, fp))) + ) + .max(0); + tmp.dc.deGain = player.dc.matter + .plus(1) + .log10() + .times(player.dc.matter.plus(1).pow(ExpantaNum.mul(1 / 5, fp))); + tmp.dc.dfGain = player.dc.energy + .plus(1) + .log10() + .times(player.dc.energy.plus(1).pow(ExpantaNum.mul(1 / 5, fp))); + } +} + +function calcDarkCircleAllComp(){ + tmp.dc.allComp = player.dc.matter.plus(1).log10() + .plus(player.dc.energy.plus(1).log10()) + .plus(player.dc.fluid.plus(1).log10()) + .plus(player.dc.cores); +} + +function calcDarkCircleCoreEff(){ tmp.dc.coreEff = player.dc.cores.gte(modeActive("extreme")?21:12) ? player.dc.cores.pow(7).div(ExpantaNum.pow(modeActive("extreme")?21:12, 6).times(8)).plus(1).log10().plus(1).logBase(modeActive("extreme")?1e3:10) : new ExpantaNum(0); +} + +function updateTempDC() { // 339 Normal Mode + if (!tmp.dc) tmp.dc = {}; + + tmp.dc.lrm = new ExpantaNum(modeActive("extreme") ? 1e-28 : 1); + + calcDarkCircleGain() + calcDarkCircleAllComp() + calcDarkFlow() + calcDarkCircleBonus() + calcDarkCircleCoreEff() + updateTempDarkCoreCost() if (!tmp.dc.buyCore) tmp.dc.buyCore = function (manual=false) { if (manual) updateTempDarkCoreCost() @@ -220,4 +187,4 @@ function updateTempDC() { player.dc.energy = player.dc.energy.plus(adjustGen(tmp.dc.deGain, "dc").times(diff).times(tmp.dc.flow)); player.dc.fluid = player.dc.fluid.plus(adjustGen(tmp.dc.dfGain, "dc").times(diff).times(tmp.dc.flow)); }; -} +} \ No newline at end of file diff --git a/js/main/early_game.js b/js/main/early_game.js index f4a9e9be..b4795585 100644 --- a/js/main/early_game.js +++ b/js/main/early_game.js @@ -1,5 +1,4 @@ -function updateTempEarlyGame() { - // Acceleration +function calcAcceleration(){ tmp.acc = new ExpantaNum(0.1); if (modeActive("hard")) tmp.acc = tmp.acc.div(3); if (modeActive("easy")) tmp.acc = tmp.acc.times(2); @@ -42,8 +41,9 @@ function updateTempEarlyGame() { if (modeActive("extreme") && tmp.acc.gte("1e10000")) tmp.acc = tmp.acc.sqrt().times(ExpantaNum.sqrt("1e10000")) if (extremeStadiumActive("nullum")) tmp.acc = ExpantaNum.pow(10, tmp.acc.log10().times(0.4-0.05*(extremeStadDiffLevel("nullum")-1))) if (modeActive("hikers_dream") && tmp.hd) tmp.acc = tmp.acc.pow(tmp.hd.inclineRed) +} - // Max Velocity +function calcMaxVelocity(){ tmp.maxVel = new ExpantaNum(1); if (player.rank.gt(1)) tmp.maxVel = tmp.maxVel.plus(1); if (modeActive("hard")) tmp.maxVel = tmp.maxVel.div(2); @@ -69,8 +69,10 @@ function updateTempEarlyGame() { if (nerfActive("nerfMaxVel")) tmp.maxVel = tmp.maxVel.pow(0.1); if (extremeStadiumActive("nullum", 2)) tmp.maxVel = ExpantaNum.pow(10, tmp.maxVel.log10().times(0.9-0.02*(extremeStadDiffLevel("nullum")-2))) if (modeActive("hikers_dream") && tmp.hd) tmp.maxVel = tmp.maxVel.pow(tmp.hd.inclineRed) + if (mltActive(2)) tmp.maxVel = tmp.maxVel.root(1.3); +} - // Accelerational Energy +function calcAccelerationEnergy(){ tmp.accEn = new ExpantaNum(0); if (tmp.inf) if (tmp.inf.upgs.has("7;7")) tmp.accEn = tmp.accEn.plus(1).times(INF_UPGS.effects["7;7"]()["ae"]); if (tmp.inf) if (tmp.inf.upgs.has("8;2")) tmp.accEn = tmp.accEn.times(INF_UPGS.effects["8;2"]()["energy"]); @@ -78,3 +80,9 @@ function updateTempEarlyGame() { if (tmp.inf) if (tmp.inf.upgs.has("10;2")) tmp.accEn = tmp.accEn.times(INF_UPGS.effects["10;2"]()); if (tmp.inf && tmp.rockets) if (tmp.inf.upgs.has("5;8")) tmp.accEn = tmp.accEn.times(tmp.rockets.accEnPow); } + +function updateTempEarlyGame() { + calcAcceleration() + calcMaxVelocity() + calcAccelerationEnergy() +} diff --git a/js/main/effects.js b/js/main/effects.js index 647c3821..a8ab5936 100644 --- a/js/main/effects.js +++ b/js/main/effects.js @@ -17,6 +17,7 @@ function ach63Eff() { let pow = ach63Pow() let eff = tmp.timeSpeed ? tmp.timeSpeed.pow(0.025).pow(pow) : new ExpantaNum(1) if (eff.gte(sc)) eff = eff.log10().times(sc.div(sc.log10())) + if (player.elementary.sky.unl && tmp.elm) eff = eff.pow(tmp.elm.sky.pionEff[9]) return eff } @@ -36,6 +37,10 @@ function ach112Eff() { function ach152Eff() { let eff = new ExpantaNum(1) - if (tmp.ach) if (tmp.ach[152].has) eff = eff.times(player.elementary.hc.best.plus(1).pow(0.15)) + if (tmp.ach) if (tmp.ach[152].has) eff = eff.times(player.elementary.hc.best.plus(1).pow(0.15)); + if (player.elementary.entropy.upgrades.includes(26) && tmp.elm.entropy) eff = eff.pow(tmp.elm.entropy.upgEff[26]); + if (modeActive("extreme+hikers_dream")) { + if (tmp.ach[196].has && tmp.mlt) eff = eff.times(tmp.mlt.quilts[3].eff2) + } return eff; -} \ No newline at end of file +} diff --git a/js/main/elementary/bosons.js b/js/main/elementary/bosons.js new file mode 100644 index 00000000..4bdb4350 --- /dev/null +++ b/js/main/elementary/bosons.js @@ -0,0 +1,342 @@ +function updateGluonTabs() { + if (!tmp.elm.bos.updateGluonTabs) tmp.elm.bos.updateGluonTabs = function () { + let tabs = Element.allFromClass("gluontab"); + for (let i = 0; i < tabs.length; i++) tabs[i].setDisplay(gluonTab == tabs[i].id); + }; + if (!tmp.elm.bos.showGluonTab) tmp.elm.bos.showGluonTab = function (name) { + if (gluonTab == name) return; + gluonTab = name; + tmp.elm.bos.updateGluonTabs(); + }; + tmp.elm.bos.updateGluonTabs(); +} + +function updatePhotonsGain(gaugeSpeed){ + tmp.elm.bos.photonGain = gaugeSpeed; + if (modeActive("extreme")) tmp.elm.bos.photonGain = tmp.elm.bos.photonGain.times(Math.pow(player.elementary.bosons.scalar.higgs.upgrades.length+1, 1/3)) + if (modeActive("hikers_dream") && player.elementary.bosons.scalar.higgs.upgrades.includes("1;2;0")) tmp.elm.bos.photonGain = tmp.elm.bos.photonGain.times(tmp.hd.superEn.plus(1)) + if (tmp.lu3) tmp.elm.bos.photonGain = tmp.elm.bos.photonGain.times(tmp.lu3.max(1)) + if (player.elementary.theory.supersymmetry.unl) tmp.elm.bos.photonGain = tmp.elm.bos.photonGain.times(tmp.chEff||1) +} + +function updatePhotonCosts() { + tmp.elm.bos.photonCost = { + 1: ExpantaNum.pow(5, player.elementary.bosons.gauge.photons.upgrades[0].pow(2)).times(25), + 2: ExpantaNum.pow(4, player.elementary.bosons.gauge.photons.upgrades[1].pow(2)).times(40), + 3: ExpantaNum.pow(10, player.elementary.bosons.gauge.photons.upgrades[2]).times(1e4), + 4: ExpantaNum.pow(2, new ExpantaNum(player.elementary.bosons.gauge.photons.upgrades[3]||0).pow(1.1).times(ExpantaNum.pow(1.01, player.elementary.bosons.gauge.photons.upgrades[3]||0))).times(6e4), + }; + for (let i=1;i<=4;i++) { + if (scalingActive("photons", player.elementary.bosons.gauge.photons.upgrades[i-1]||0, "scaled")) { + let power = getScalingPower("scaled", "photons") + let exp = ExpantaNum.pow(2, power) + tmp.elm.bos.photonCost[i] = PH_CST_SCLD[i](exp, getScalingStart("scaled", "photons")) + } + } +} + +function loadPhotonEffects() { + if (!tmp.elm.bos.photonEff) tmp.elm.bos.photonEff = function (x) { + let bought = player.elementary.bosons.gauge.photons.upgrades[x - 1]||new ExpantaNum(0); + if (player.elementary.times.lt(1)) bought = new ExpantaNum(0); + if (x == 1) return ExpantaNum.pow(3, bought); + if (x == 2) return ExpantaNum.pow(1.5, bought); + if (x == 3||x == 4) return ExpantaNum.pow(2, bought); + }; +} + +function updateTempPhotons(gaugeSpeed) { + updatePhotonsGain(gaugeSpeed) + + updatePhotonCosts() + loadPhotonEffects() + if (!tmp.elm.bos.buyLU) tmp.elm.bos.buyLU = function (x, max=false) { + updatePhotonCosts(); + if (new ExpantaNum(player.elementary.bosons.gauge.photons.amount).lt(tmp.elm.bos.photonCost[x])) return; + let target; + if (max) { + let amt = player.elementary.bosons.gauge.photons.amount + switch(x) { + case 1: + target = amt.div(25).max(1).logBase(5).sqrt().plus(1).floor(); + if (scalingActive("photons", target, "scaled")) { + let power = getScalingPower("scaled", "photons") + let exp = ExpantaNum.pow(2, power) + let s = getScalingStart("scaled", "photons") + target = amt.div(25).max(1).logBase(5).sqrt().times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() + } + break; + case 2: + target = amt.div(40).max(1).logBase(4).sqrt().plus(1).floor(); + if (scalingActive("photons", target, "scaled")) { + let power = getScalingPower("scaled", "photons") + let exp = ExpantaNum.pow(2, power) + let s = getScalingStart("scaled", "photons") + target = amt.div(40).max(1).logBase(4).sqrt().times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() + } + break; + case 3: + target = amt.div(1e4).max(1).log10().plus(1).floor(); + if (scalingActive("photons", target, "scaled")) { + let power = getScalingPower("scaled", "photons") + let exp = ExpantaNum.pow(2, power) + let s = getScalingStart("scaled", "photons") + target = amt.div(1e4).max(1).log10().times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() + } + break; + case 4: + target = ExpantaNum.mul(110.549, ExpantaNum.lambertw(ExpantaNum.mul(0.00904576, ExpantaNum.mul(1.4427, amt.times(0.000533333333333).max(1).logBase(Math.E).sub(5)).pow(1.1)))).plus(1).floor().max(0) + if (scalingActive("photons", target, "scaled")) { + let power = getScalingPower("scaled", "photons") + let exp = ExpantaNum.pow(2, power) + let s = getScalingStart("scaled", "photons") + target = ExpantaNum.mul(110.549, ExpantaNum.lambertw(ExpantaNum.mul(0.00904576, ExpantaNum.mul(1.4427, amt.times(0.000533333333333).max(1).logBase(Math.E).sub(5)).pow(1.1)))).times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor().max(0) + } + break; + } + } + if (!max) player.elementary.bosons.gauge.photons.amount = new ExpantaNum( + player.elementary.bosons.gauge.photons.amount + ).sub(tmp.elm.bos.photonCost[x]).max(0); + if (max) player.elementary.bosons.gauge.photons.upgrades[x - 1] = new ExpantaNum(player.elementary.bosons.gauge.photons.upgrades[x - 1]||0).max(target); + else player.elementary.bosons.gauge.photons.upgrades[x - 1] = new ExpantaNum(player.elementary.bosons.gauge.photons.upgrades[x - 1]||0).plus(1); + }; +} + +function updateTempWZB(gaugeSpeed) { + tmp.elm.bos.wg = gaugeSpeed.times(0.4).times(tmp.z1 || 1); + if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.bos.wg = tmp.elm.bos.wg.times(tmp.elm.qf.boost19) + tmp.elm.bos.w1 = player.elementary.bosons.gauge.w.plus(1).log10().div(10).plus(1); + if (player.inf.upgrades.includes("7;10")) tmp.elm.bos.w1 = player.elementary.bosons.gauge.w.plus(1).pow(0.25).max(tmp.elm.bos.w1) + tmp.elm.bos.w2 = player.elementary.bosons.gauge.w.plus(1).log10().sqrt().plus(1); + tmp.elm.bos.zg = gaugeSpeed.times(0.1).times(tmp.elm.bos.w1); + if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.bos.zg = tmp.elm.bos.zg.times(tmp.elm.qf.boost19) + tmp.elm.bos.z1 = player.elementary.bosons.gauge.z.plus(1).pow(0.04); + if (tmp.elm.bos.z1.gte(1.4)) tmp.elm.bos.z1 = tmp.elm.bos.z1.logBase(1.4).times(1.4).min(tmp.elm.bos.z1) + tmp.elm.bos.z2 = player.elementary.bosons.gauge.z.plus(1).pow(2); +} + +function updateTempGluons(gaugeSpeed) { + if (!tmp.elm.bos.updateTabs) tmp.elm.bos.updateTabs = function () { + let tabs = Element.allFromClass("bostab"); + for (let i = 0; i < tabs.length; i++) tabs[i].setDisplay(bosTab == tabs[i].id); + }; + if (!tmp.elm.bos.showTab) tmp.elm.bos.showTab = function (name) { + if (bosTab == name) return; + bosTab = name; + tmp.elm.bos.updateTabs(); + }; + tmp.elm.bos.updateTabs(); + if (!tmp.elm.bos.gluonEff) tmp.elm.bos.gluonEff = function (col, x) { + let bought = player.elementary.bosons.gauge.gluons[col].upgrades[x - 1]||new ExpantaNum(0); + if (x == 1) return ExpantaNum.pow(2, bought); + else if (x==2) return ExpantaNum.pow(1.1, bought); + else return bought.times(10) + }; + tmp.elm.bos.rg = gaugeSpeed.div(2.5).times(tmp.elm.bos.gluonEff("ar", 1)).times(tmp.elm.bos.photonEff(3).max(1)); + tmp.elm.bos.gg = gaugeSpeed.div(2.6).times(tmp.elm.bos.gluonEff("ag", 1)).times(tmp.elm.bos.photonEff(3).max(1)); + tmp.elm.bos.bg = gaugeSpeed.div(2.4).times(tmp.elm.bos.gluonEff("ab", 1)).times(tmp.elm.bos.photonEff(3).max(1)); + tmp.elm.bos.arg = gaugeSpeed.div(10).times(tmp.elm.bos.gluonEff("r", 1)).times(tmp.elm.bos.photonEff(3).max(1)); + tmp.elm.bos.agg = gaugeSpeed.div(9.8).times(tmp.elm.bos.gluonEff("g", 1)).times(tmp.elm.bos.photonEff(3).max(1)); + tmp.elm.bos.abg = gaugeSpeed.div(10.2).times(tmp.elm.bos.gluonEff("b", 1)).times(tmp.elm.bos.photonEff(3).max(1)); + if (player.elementary.foam.unl && tmp.elm.qf) { + tmp.elm.bos.rg = tmp.elm.bos.rg.times(tmp.elm.qf.boost19) + tmp.elm.bos.gg = tmp.elm.bos.gg.times(tmp.elm.qf.boost19) + tmp.elm.bos.bg = tmp.elm.bos.bg.times(tmp.elm.qf.boost19) + tmp.elm.bos.arg = tmp.elm.bos.arg.times(tmp.elm.qf.boost19) + tmp.elm.bos.agg = tmp.elm.bos.agg.times(tmp.elm.qf.boost19) + tmp.elm.bos.abg = tmp.elm.bos.abg.times(tmp.elm.qf.boost19) + } + if (!tmp.elm.bos.gluonCost) tmp.elm.bos.gluonCost = function (col, x) { + let bought = player.elementary.bosons.gauge.gluons[col].upgrades[x - 1]||new ExpantaNum(0); + if (x == 1) return ExpantaNum.pow(2, bought.pow(2.5).times(2)).times(100); + else if (x==2) return ExpantaNum.pow(3, ExpantaNum.pow(3, bought)).times(1e3 / 3); + else return ExpantaNum.pow(10, bought.pow(2)).times(1e7) + }; + if (!tmp.elm.bos.gluonTarg) tmp.elm.bos.gluonTarg = function (col, x) { + let amt = player.elementary.bosons.gauge.gluons[col].amount||new ExpantaNum(0); + if (x == 1) return amt.div(100).max(1).logBase(2).div(2).pow(1/2.5).plus(1).floor(); + else if (x==2) return amt.div(1e3 / 3).max(1).logBase(3).max(1).logBase(3).plus(1).floor(); + else return amt.div(1e7).max(1).log10().sqrt().plus(1).floor(); + }; + tmp.elm.bos.buy = function (col, x, max=false) { + let amt = player.elementary.bosons.gauge.gluons[col].amount; + if (amt.lt(tmp.elm.bos.gluonCost(col, x))) return; + let target; + if (max) target = tmp.elm.bos.gluonTarg(col, x); + player.elementary.bosons.gauge.gluons[col].amount = amt.sub(tmp.elm.bos.gluonCost(col, x)); + if (max) player.elementary.bosons.gauge.gluons[col].upgrades[x - 1] = player.elementary.bosons.gauge.gluons[col].upgrades[x - 1].max(target) + else player.elementary.bosons.gauge.gluons[col].upgrades[x - 1] = player.elementary.bosons.gauge.gluons[ + col + ].upgrades[x - 1].plus(1); + }; + tmp.elm.bos.gluon2total = new ExpantaNum(1); + for (let i = 0; i < GLUON_COLOURS.length; i++) { + tmp.elm.bos.gluon2total = tmp.elm.bos.gluon2total.times(tmp.elm.bos.gluonEff(GLUON_COLOURS[i], 2)); + if (tmp.hh410) tmp.elm.bos[GLUON_COLOURS[i]+"g"] = tmp.elm.bos[GLUON_COLOURS[i]+"g"].times(666) + } +} + +function updateTempGravitons(gaugeSpeed) { + tmp.elm.bos.gravGain = gaugeSpeed.div(1.75); + if (player.inf.upgrades.includes("10;9")) tmp.elm.bos.gravGain = tmp.elm.bos.gravGain.times(100) + if (player.elementary.theory.supersymmetry.unl) tmp.elm.bos.gravGain = tmp.elm.bos.gravGain.times(tmp.neuEff||1) + tmp.elm.bos.gravEff = player.elementary.bosons.gauge.gravitons + .times(player.elementary.times.plus(1)) + .plus(1) + .log10() + .div(10) + .plus(1) + .pow(2.25); + if (hasMltMilestone(13)) tmp.elm.bos.gravEff = tmp.elm.bos.gravEff.pow(15) +} + +function updateTempGauge() { + tmp.elm.bos.gaugeGain = player.elementary.bosons.amount.times(player.inf.ascension.power.plus(1).log10().plus(1)); + tmp.elm.bos.forceGain = player.elementary.bosons.gauge.amount.pow(0.75); + if (tmp.gravEff) tmp.elm.bos.forceGain = tmp.elm.bos.forceGain.times(tmp.gravEff); + if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.bos.forceGain = tmp.elm.bos.forceGain.times(tmp.elm.qf.boost18); + tmp.elm.bos.forceEffExpMult = new ExpantaNum(1) + if (player.mlt.times.gt(0) && tmp.mlt) tmp.elm.bos.forceEffExpMult = tmp.elm.bos.forceEffExpMult.times(tmp.mlt.quilts[3].eff); + tmp.elm.bos.forceEff = player.elementary.bosons.gauge.force.div(10).plus(1).logBase(2).pow(tmp.elm.bos.forceEffExpMult.times(.2)); + if (player.inf.upgrades.includes("8;10")) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(player.elementary.bosons.gauge.force.plus(1).pow(tmp.elm.bos.forceEffExpMult.times(0.08))) + if (tmp.ach[132].has) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(2) + if (player.mlt.times.gt(0) && tmp.mlt) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(tmp.mlt.quilts[3].eff2); + tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(tmp.higgs130?tmp.higgs130.max(1):1) + if (player.elementary.entropy.upgrades.includes(15)) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.pow(5) + if (player.elementary.sky.unl && tmp.elm.sky) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.pow(tmp.elm.sky.spinorEff[11]) + if (modeActive("easy")) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(2); + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[41]||0, 1) && hasDE(6)) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(TREE_UPGS[41].effect(player.elementary.theory.tree.upgrades[41]||0)) + let gaugeSpeed = new ExpantaNum(tmp.elm.bos.forceEff); + + updateTempPhotons(gaugeSpeed); + updateTempWZB(gaugeSpeed); + updateTempGluons(gaugeSpeed); + updateTempGravitons(gaugeSpeed); +} + +function updateHiggsUpgradeEffects() { + if (!tmp.elm.bos["higgs_1;1;0"]) tmp.elm.bos["higgs_1;1;0"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("1;1;0")) return new ExpantaNum(1) + let f1 = player.elementary.fermions.quarks.amount.plus(1).log10().pow(0.2).plus(1) + let f2 = player.elementary.fermions.leptons.amount.plus(1).log10().pow(0.3).plus(1) + let f3 = player.elementary.bosons.gauge.photons.amount.plus(1).log10().pow(0.15).plus(1) + let f4 = player.elementary.bosons.gauge.gravitons.plus(1).log10().pow(0.25).plus(1) + let f5 = player.elementary.bosons.scalar.higgs.amount.plus(1).log10().pow(0.1).plus(1) + return f1.times(f2).times(f3).times(f4).times(f5).pow(0.2) + } + if (!tmp.elm.bos["higgs_0;1;1"]) tmp.elm.bos["higgs_0;1;1"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("0;1;1")) return new ExpantaNum(1) + let e = player.inf.endorsements.sub(36).max(0) + if (e.gte(3)) e = e.sqrt().times(Math.sqrt(3)) + return ExpantaNum.pow(7, e).max(1) + } + if (!tmp.elm.bos["higgs_3;0;0"]) tmp.elm.bos["higgs_3;0;0"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("3;0;0")) return new ExpantaNum(1) + return ExpantaNum.pow(1.1, player.elementary.bosons.scalar.higgs.upgrades.length) + } + if (!tmp.elm.bos["higgs_0;2;1"]) tmp.elm.bos["higgs_0;2;1"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("0;2;1")) return new ExpantaNum(1) + return player.elementary.bosons.scalar.higgs.amount.plus(1).times(10).slog(10).pow(0.1).sub(1).times(100) + } + if (!tmp.elm.bos["higgs_0;0;4"]) tmp.elm.bos["higgs_0;0;4"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("0;0;4")) return new ExpantaNum(1) + let ret = tmp.elm.pa.active?tmp.elm.pa.speedBoost.plus(1):new ExpantaNum(1) + if (ret.gte(1e3)) ret = ret.pow(0.95).times(Math.pow(1e3, 0.05)) + return ret + } + if (!tmp.elm.bos["higgs_1;3;0"]) tmp.elm.bos["higgs_1;3;0"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("1;3;0")) return new ExpantaNum(1) + let amt = player.inf.pantheon.angels.plus(player.inf.pantheon.demons) + let ret = ExpantaNum.pow(10, amt.sqrt()).pow(0.2) + return ret + } + if (!tmp.elm.bos["higgs_0;3;1"]) tmp.elm.bos["higgs_0;3;1"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("0;3;1")) return new ExpantaNum(1) + let ret = player.inf.pantheon.purge.power.plus(1).pow(0.9) + return ret + } + if (!tmp.elm.bos["higgs_0;0;5"]) tmp.elm.bos["higgs_0;0;5"] = function(disp=false) { + if (!disp) if (!tmp.elm.bos.hasHiggs("0;0;5")) return new ExpantaNum(0) + let ret = player.elementary.bosons.scalar.higgs.amount.plus(1).times(10).slog(10).pow(2.5).sub(1).times(18) + return ret + } +} + +function updateTempScalar() { + tmp.elm.bos.scalarGain = player.elementary.bosons.amount.sqrt().times(0.6); + tmp.elm.bos.higgsGain = player.elementary.bosons.scalar.amount.div(10).pow(0.95).times(ExpantaNum.pow(2, Math.sqrt(player.elementary.bosons.scalar.higgs.upgrades.length))) + tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(tmp.higgs011?new ExpantaNum(tmp.higgs011).max(1):1).times(tmp.higgs300?new ExpantaNum(tmp.higgs300).max(1):1) + if (player.mlt.times.gt(0) && tmp.mlt) tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(tmp.mlt.quilts[3].eff2); + if (tmp.inf510) tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(INF_UPGS.effects["5;10"]().hb); + if (player.elementary.theory.tree.unl) tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(TREE_UPGS[2].effect(player.elementary.theory.tree.upgrades[2]||0)) + if (modeActive("easy")) tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(10) + if (!tmp.elm.bos.buyHiggs) tmp.elm.bos.buyHiggs = function(id) { + let data = HIGGS_UPGS[id] + if (player.elementary.bosons.scalar.higgs.amount.lt(data.cost) || player.elementary.bosons.scalar.higgs.upgrades.includes(id)) return + player.elementary.bosons.scalar.higgs.amount = player.elementary.bosons.scalar.higgs.amount.sub(data.cost) + player.elementary.bosons.scalar.higgs.upgrades.push(id) + if (id=="0;0;2") for (let i=1;i<=4;i++) tmp.inf.asc.activatePerk(i) + } + if (!tmp.elm.bos.hasHiggs) tmp.elm.bos.hasHiggs = function(id) { return player.elementary.bosons.scalar.higgs.upgrades.includes(id) } + updateHiggsUpgradeEffects(); +} + +function updateTempBosons() { + if (!tmp.elm.bos) tmp.elm.bos = {}; + if (!tmp.elm.bos.transfer1) tmp.elm.bos.transfer1 = function () { + if (player.elementary.particles.lt(1)) return; + player.elementary.particles = player.elementary.particles.sub(1); + player.elementary.bosons.amount = player.elementary.bosons.amount.plus(HCCBA("fermbos")?0:1); + }; + if (!tmp.elm.bos.transfer) tmp.elm.bos.transfer = function (ratio) { + if (player.elementary.particles.times(ratio).floor().lt(1)) return; + let toSub = player.elementary.particles.times(ratio).floor(); + player.elementary.particles = player.elementary.particles.sub(toSub); + player.elementary.bosons.amount = player.elementary.bosons.amount.plus(HCCBA("fermbos")?0:toSub); + }; + + updateGluonTabs(); + updateTempGauge(); + updateTempScalar(); +} + +function adjGravBoosts(b, rev=false) { + if (rev) { + if (hasDE(6) && b.lt(60)) { + b = b.div(2); + b = ExpantaNum.pow(10, ExpantaNum.div(3, ExpantaNum.sub(30, b)).sub(1)).plus(26) + } + } else { + if (hasDE(6) && b.lt(60)) { + if (b.gte(27)) b = ExpantaNum.sub(30, ExpantaNum.div(3, b.sub(26).log10().plus(1))) + b = b.times(2) + } + } + return b; +} + +function getGravBoosts() { + if (!hasDE(4)) return new ExpantaNum(0) + let g = player.elementary.bosons.gauge.gravitons + let b = g.plus(1).log10().sqrt() + return adjGravBoosts(b).floor() +} + +function getNextGravBoost(boosts) { + if (!hasDE(4)) return new ExpantaNum(1/0) + return ExpantaNum.pow(10, adjGravBoosts(new ExpantaNum(boosts), true).plus(1).pow(2)).sub(1); +} + +function getGravBoostBase() { + let base = new ExpantaNum(2) + if (hasDE(5)&&(player.elementary.theory.tree.upgrades[21]||new ExpantaNum(0)).gte(1)) base = base.pow(2) + if (player.elementary.sky.unl && tmp.elm.sky) base = base.pow(tmp.elm.sky.spinorEff[2]) + return base +} + +function getGravBoostMult() { + if (!hasDE(4)) return new ExpantaNum(1) + let b = getGravBoosts() + return ExpantaNum.pow(getGravBoostBase(), b) +} \ No newline at end of file diff --git a/js/main/elementary/elm.js b/js/main/elementary/elm.js new file mode 100644 index 00000000..93ac8ac5 --- /dev/null +++ b/js/main/elementary/elm.js @@ -0,0 +1,292 @@ +function setElementaryResetFunction(){ + if (!tmp.elm.onReset) tmp.elm.onReset = function (prev) { + player.elementary.time = new ExpantaNum(0); + + // Reset Quarks, Leptons, & Gauge Boson sub-resources + player.elementary.fermions.quarks.amount = new ExpantaNum(0); + player.elementary.fermions.leptons.amount = new ExpantaNum(0); + player.elementary.bosons.gauge = { + amount: new ExpantaNum(0), + force: new ExpantaNum(0), + photons: { + amount: new ExpantaNum(0), + upgrades: player.elementary.bosons.gauge.photons.upgrades + }, + w: new ExpantaNum(0), + z: new ExpantaNum(0), + gluons: { + r: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.r.upgrades }, + g: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.g.upgrades }, + b: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.b.upgrades }, + ar: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.ar.upgrades }, + ag: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.ag.upgrades }, + ab: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.ab.upgrades } + }, + gravitons: new ExpantaNum(0) + }; + player.elementary.bosons.scalar.amount = new ExpantaNum(0); + player.elementary.bosons.scalar.higgs.amount = new ExpantaNum(0); + + // Keep stuff on Elementary reset + if (tmp.elm.bos.hasHiggs("0;0;0")) { + player.tr.upgrades = prev.tr.upgrades + player.automation.unl = true + if (modeActive("extreme")) player.furnChalls = prev.furnChalls + if (modeActive("hikers_dream")) { + player.energyUpgs = prev.energyUpgs + player.spentMotive = new ExpantaNum(prev.spentMotive) + } + } + if (tmp.elm.bos.hasHiggs("0;0;1")) { + player.inf.endorsements = new ExpantaNum(10) + player.inf.unl = true + } + if (tmp.elm.bos.hasHiggs("3;0;0")) { + player.inf.stadium.completions = prev.inf.stadium.completions + if (modeActive("extreme")) player.extremeStad = prev.extremeStad + } + if (tmp.elm.bos.hasHiggs("1;2;0")) player.inf.pantheon.purge.power = prev.inf.pantheon.purge.power + if (player.elementary.times.gte(3)) { + player.pathogens.unl = true + player.dc.unl = true + } + for (let i=0;i" + showNum(stacks) + "" : ""); + }; + tmp.elm.ferm.quarkEff = function (name) { + let qks = player.elementary.fermions.quarks.amount.max(0); + let stacks = getQuarkStacks(tmp.elm.ferm.quarkRewards) + if (stacks.gte(8) && player.elementary.sky.amount.eq(0)) stacks = stacks.sqrt().times(Math.sqrt(8)); + if (name == "up") return qks.plus(1).pow(ExpantaNum.mul(5, stacks)); + else if (name == "down") return qks.plus(1).pow(ExpantaNum.mul(Math.sqrt(2), stacks.sqrt())); + else if (name == "charm") return qks.plus(1).pow(ExpantaNum.mul(0.1, stacks.cbrt())); + else if (name == "strange") + return player.elementary.fermions.amount + .plus(1) + .times(qks.plus(1).sqrt().log10().plus(1)) + .pow(ExpantaNum.mul(0.2, stacks.sqrt())) + .times(qks.eq(0) ? 0 : 1) + .plus(1); + else if (name == "top") + return ExpantaNum.pow(ExpantaNum.mul(2, qks.plus(1).log10().div(100).plus(1)), stacks.pow(0.8)) + .times(qks.eq(0) ? 0 : 1) + .plus(1); + else if (name == "bottom") + return ExpantaNum.pow(ExpantaNum.mul(0.4, qks.plus(1).log10()).plus(1), stacks.plus(1)); + }; + if (!tmp.elm.ferm.quarkR) tmp.elm.ferm.quarkR = function (name) { + if ((name == QUARK_NAMES[player.elementary.fermions.quarks.type - 1]) || ExpantaNum.gte(player.elementary.theory.tree.upgrades[32]||0, 1) || hasMltMilestone(14)) return tmp.elm.ferm.quarkEff(name); + else return new ExpantaNum(1); + }; + if (!tmp.elm.ferm.quarkDesc) tmp.elm.ferm.quarkDesc = function (name) { + let desc = QUARK_DESCS[name] + " "; + desc += "Currently: " + showNum(tmp.elm.ferm.quarkEff(name)) + "x"; + return desc; + }; + if (!tmp.elm.ferm.changeQuark) tmp.elm.ferm.changeQuark = function () { + player.elementary.fermions.quarks.type = (player.elementary.fermions.quarks.type % 6) + 1; + }; +} + +function updateTempLeptons() { + tmp.elm.ferm.leptonGain = player.elementary.fermions.amount + .times(tmp.inf.pantheon.totalGems.plus(1)) + .div(2.5) + .times(tmp.elm.ferm.quarkR("top").max(1)) + .max(0); + if (tmp.glu2) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.glu2.max(1)); + if (tmp.higgs031) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.higgs031.max(1)); + if (player.elementary.theory.supersymmetry.unl) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.slEff||1) + if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.elm.qf.boost2) + if (modeActive("easy")) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(4) + tmp.elm.ferm.leptonRewards = new ExpantaNum(player.elementary.fermions.leptons.amount).max(1).logBase(100).floor(); + if (tmp.elm.ferm.leptonRewards.gte(7)) tmp.elm.ferm.leptonRewards = tmp.elm.ferm.leptonRewards.sqrt().times(Math.sqrt(7)) + if (!tmp.elm.ferm.leptonName) tmp.elm.ferm.leptonName = function (noExp = false) { + let name = LEPTON_NAMES[player.elementary.fermions.leptons.type - 1]; + let stacks = getLeptonStacks(tmp.elm.ferm.leptonRewards) + return capitalFirst(name) + (noExp ? "" : stacks.gt(1) ? "" + showNum(stacks) + "" : ""); + }; + tmp.elm.ferm.leptonEff = function (name) { + let lpts = player.elementary.fermions.leptons.amount; + let stacks = getLeptonStacks(tmp.elm.ferm.leptonRewards) + if (stacks.gte(8) && player.elementary.sky.amount.eq(0)) stacks = stacks.sqrt().times(Math.sqrt(8)); + if (name == "electron") + return lpts.max(0) + .plus(1) + .times(10) + .slog(10) + .max(1) + .pow(ExpantaNum.mul(0.1, stacks.plus(1).log10().plus(1))) + .sub(1) + .div(10) + .max(0) + .plus(1); + else if (name == "muon") return lpts.times(ExpantaNum.pow(2.5, stacks)).plus(1).times(10).slog(10).sqrt().max(1); + else if (name == "tau") + return ExpantaNum.pow( + player.inf.knowledge.max(0).plus(1).log10().plus(1).log10().plus(1), + lpts.max(0).times(ExpantaNum.pow(2.5, stacks)).plus(1).times(10).slog(10).div(5).max(0.2) + ).min(lpts.plus(1)); + else if (name == "netrion") + return lpts.max(0).times(ExpantaNum.pow(2, stacks)).plus(1).times(10).slog(10).max(1).sub(1).div(100).max(0).plus(1); + else if (name == "vibrino") + return lpts.max(0).times(ExpantaNum.pow(1.4, stacks)).plus(1).times(16).slog(16).max(1).sub(1).div(250).max(0).plus(1); + else if (name == "psi") return lpts.max(0).plus(1).log10().plus(1).pow(stacks.plus(0.5)).max(1); + }; + if (!tmp.elm.ferm.leptonR) tmp.elm.ferm.leptonR = function (name) { + if ((name == LEPTON_NAMES[player.elementary.fermions.leptons.type - 1])||ExpantaNum.gte(player.elementary.theory.tree.upgrades[32]||0, 1) || hasMltMilestone(14)) return tmp.elm.ferm.leptonEff(name); + else return new ExpantaNum(1); + }; + if (!tmp.elm.ferm.leptonDesc) tmp.elm.ferm.leptonDesc = function (name) { + let desc = LEPTON_DESCS[name] + " Currently: "; + let eff = tmp.elm.ferm.leptonEff(name); + if (name == "electron" || name == "netrion" || name == "vibrino") desc += "+" + showNum(eff.sub(1).times(100)) + "%"; + else if (name == "muon") desc += "^" + showNum(eff); + else desc += showNum(eff) + "x"; + return desc; + }; + if (!tmp.elm.ferm.changeLepton) tmp.elm.ferm.changeLepton = function () { + player.elementary.fermions.leptons.type = (player.elementary.fermions.leptons.type % 6) + 1; + }; +} + +function updateTempFermions() { + if (!tmp.elm.ferm) tmp.elm.ferm = {}; + if (!tmp.elm.ferm.transfer1) tmp.elm.ferm.transfer1 = function () { + if (player.elementary.particles.lt(1)) return; + player.elementary.particles = player.elementary.particles.sub(1); + player.elementary.fermions.amount = player.elementary.fermions.amount.plus(HCCBA("fermbos")?0:1); + }; + if (!tmp.elm.ferm.transfer) tmp.elm.ferm.transfer = function (ratio) { + if (player.elementary.particles.times(ratio).floor().lt(1)) return; + let toSub = player.elementary.particles.times(ratio).floor(); + player.elementary.particles = player.elementary.particles.sub(toSub); + player.elementary.fermions.amount = player.elementary.fermions.amount.plus(HCCBA("fermbos")?0:toSub); + }; + + updateTempQuarks(); + updateTempLeptons(); +} \ No newline at end of file diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js new file mode 100644 index 00000000..9cbfe358 --- /dev/null +++ b/js/main/elementary/foam.js @@ -0,0 +1,397 @@ +function updateQuantumFoamTabs() { + if (!tmp.elm.qf.updateTabs) tmp.elm.qf.updateTabs = function () { + let tabs = Element.allFromClass("foamTab"); + for (let i = 0; i < tabs.length; i++) { + tabs[i].setDisplay(foamTab == tabs[i].id); + new Element(tabs[i].id + "tabbtn").setDisplay(FOAM_TABS[tabs[i].id]()); + } + }; + if (!tmp.elm.qf.showTab) tmp.elm.qf.showTab = function (name) { + if (foamTab == name) return; + foamTab = name; + tmp.elm.qf.updateTabs(); + }; + tmp.elm.qf.updateTabs(); +} + +function updateQuantumFoamBoosts() { + tmp.elm.qf.boostData = getQFBoostData() + tmp.elm.qf.boost25 = tmp.elm.qf.boostData[25].times(tmp.elm.qf.boostData[25].plus(1).cbrt()).div(2) + if (tmp.elm.qf.boost25.gte(3.5)) tmp.elm.qf.boost25 = tmp.elm.qf.boost25.sqrt().times(Math.sqrt(3.5)) + tmp.elm.qf.boost24 = player.elementary.foam.amounts[0].plus(1).log10().plus(1).pow(tmp.elm.qf.boostData[24].plus(tmp.elm.qf.boost25).times(60)) + tmp.elm.qf.boost23 = ExpantaNum.pow(10, tmp.elm.qf.boostData[23].plus(tmp.elm.qf.boost25).pow(0.75)) + tmp.elm.qf.boost22 = ExpantaNum.pow(8, tmp.elm.qf.boostData[22].plus(tmp.elm.qf.boost25)) + tmp.elm.qf.boost21 = player.elementary.foam.amounts[3].plus(1).pow(0.75).log10().plus(1).pow(tmp.elm.qf.boostData[21].plus(tmp.elm.qf.boost25).pow(0.8)) + tmp.elm.qf.boost20 = tmp.elm.qf.boostData[20].plus(tmp.elm.qf.boost25).plus(1).sqrt() + tmp.elm.qf.boost19 = ExpantaNum.pow(1e15, tmp.elm.qf.boostData[19].plus(tmp.elm.qf.boost25).times(player.elementary.foam.amounts[0].plus(1).log10().plus(1).log10().plus(1))) + tmp.elm.qf.boost18 = player.elementary.foam.amounts[0].plus(1).log10().plus(1).pow(tmp.elm.qf.boostData[18].plus(tmp.elm.qf.boost25)) + tmp.elm.qf.boost17 = tmp.elm.qf.boostData[17].plus(tmp.elm.qf.boost25).pow(0.8).times(10).floor() + tmp.elm.qf.boost16 = player.elementary.foam.amounts[2].plus(1).pow(0.75).log10().plus(1).pow(tmp.elm.qf.boostData[16].plus(tmp.elm.qf.boost25).pow(0.8)) + tmp.elm.qf.boost15 = ExpantaNum.pow(1e6, tmp.elm.qf.boostData[15].plus(tmp.elm.qf.boost25).pow(0.8)) + tmp.elm.qf.boost14 = ExpantaNum.pow(1e15, tmp.elm.qf.boostData[14].plus(tmp.elm.qf.boost25).pow(0.95)) + tmp.elm.qf.boost13 = tmp.elm.qf.boostData[13].plus(tmp.elm.qf.boost25).sqrt().div(3).times(player.elementary.foam.amounts[0].plus(1).log10().plus(1).log10().plus(1)) + tmp.elm.qf.boost12 = ExpantaNum.pow(100, tmp.elm.qf.boostData[12].plus(tmp.elm.qf.boost25).plus(tmp.elm.qf.boost13)) + tmp.elm.qf.boost11 = player.elementary.foam.amounts[1].plus(1).pow(0.75).log10().plus(1).pow(tmp.elm.qf.boostData[11].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).pow(0.8)) + tmp.elm.qf.boost10 = tmp.elm.qf.boostData[10].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).times(2).sqrt() + tmp.elm.qf.boost9 = ExpantaNum.pow(1e6, tmp.elm.qf.boostData[9].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) + tmp.elm.qf.boost8 = tmp.elm.qf.boostData[8].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).plus(1).pow(3) + tmp.elm.qf.boost7 = ExpantaNum.pow(1e8, tmp.elm.qf.boostData[7].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).sqrt()) + tmp.elm.qf.boost6 = player.elementary.foam.amounts[0].plus(1).sqrt().log10().plus(1).pow(tmp.elm.qf.boostData[6].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).pow(0.9)) + tmp.elm.qf.boost5 = tmp.elm.qf.boostData[5].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).sqrt().div(3).times(player.inf.knowledge.plus(1).log10().plus(1).log10().plus(1)) + tmp.elm.qf.boost4 = ExpantaNum.pow(10, tmp.elm.qf.boostData[4].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) + tmp.elm.qf.boost3 = ExpantaNum.pow(100, tmp.elm.qf.boostData[3].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) + tmp.elm.qf.boost2 = ExpantaNum.pow(1e3, tmp.elm.qf.boostData[2].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) + if (player.elementary.entropy.upgrades.includes(22)) { + tmp.elm.qf.boost2 = tmp.elm.qf.boost2.pow(1.085); + tmp.elm.qf.boost4 = tmp.elm.qf.boost4.pow(1.085); + } + tmp.elm.qf.boost1 = ExpantaNum.pow(3, tmp.elm.qf.boostData[1].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) +} + +function updateQuantumFoamEffects() { + if (!tmp.elm.qf.eff) tmp.elm.qf.eff = {} + for (let i=2;i<=5;i++) tmp.elm.qf.eff[i] = getQuantumFoamEff(i) +} + +function updateQuantumFoamGain() { + if (!tmp.elm.qf.gain) tmp.elm.qf.gain = {} + for (let i=1;i<=5;i++) tmp.elm.qf.gain[i] = getQuantumFoamGain(i) + tmp.elm.qf.gain[1] = tmp.elm.qf.gain[1].times(tmp.elm.qf.boost1||1).times(tmp.elm.qf.eff[2]||1).times(tmp.elm.qf.eff[3]||1).times(tmp.elm.qf.eff[4]||1).times(tmp.elm.qf.eff[5]||1) + tmp.elm.qf.gain[2] = tmp.elm.qf.gain[2].times(tmp.elm.qf.boost6||1).times(tmp.elm.qf.eff[3]||1).times(tmp.elm.qf.eff[4]||1).times(tmp.elm.qf.eff[5]||1) + tmp.elm.qf.gain[3] = tmp.elm.qf.gain[3].times(tmp.elm.qf.boost11||1).times(tmp.elm.qf.eff[4]||1).times(tmp.elm.qf.eff[5]||1) + tmp.elm.qf.gain[4] = tmp.elm.qf.gain[4].times(tmp.elm.qf.boost16||1).times(tmp.elm.qf.eff[5]||1) + tmp.elm.qf.gain[5] = tmp.elm.qf.gain[5].times(ExpantaNum.pow(10, player.elementary.foam.maxDepth.sub(5).max(0))||1) +} + +function updateTempEntropy() { + if (!tmp.elm.entropy) tmp.elm.entropy = {} + if (!tmp.elm.entropy.upgEff) tmp.elm.entropy.upgEff = {} + for (let i in ENTROPY_UPG_EFFS) tmp.elm.entropy.upgEff[i] = ENTROPY_UPG_EFFS[i](); + tmp.elm.entropy.eff = getEntropyEff() + tmp.elm.entropy.gainMult = getEntropyGainMult() + tmp.elm.entropy.gain = getEntropyGain() + tmp.elm.entropy.omegaDiv = getOmegaParticleReqDiv() + tmp.elm.entropy.omegaBase = getOmegaParticleReqBase() + tmp.elm.entropy.omega = getOmegaParticles() + tmp.elm.entropy.omegaEff = getOmegaEff() +} + +function updateTempQuantumFoam() { + if (!tmp.elm.qf) tmp.elm.qf = {} + + updateQuantumFoamTabs(); + updateQuantumFoamBoosts(); + updateQuantumFoamEffects(); + updateQuantumFoamGain(); + updateTempEntropy(); +} + +function gainFoam(x, gain, diff=1, adj=false) { + player.elementary.foam.amounts[x] = ExpantaNum.add(player.elementary.foam.amounts[x], ExpantaNum.mul(adj?adjustGen(gain, "foam"):gain, diff)).max(0) + if (isNaN(player.elementary.foam.amounts[x].array[0])) player.elementary.foam.amounts[x] = new ExpantaNum(0); +} + +function qfTick(diff) { + for (let i=0;i<5;i++) { + if (player.elementary.foam.maxDepth.gt(i)) gainFoam(i, tmp.elm.qf.gain[i+1], diff, true) + for (let b=0;b<3;b++) if (player.elementary.foam.autoUnl[i*3+b]&&(player.elementary.entropy.bestDepth.gte(i+3)||hasMltMilestone(4))) qfMax(i+1, b+1) + } + player.elementary.entropy.bestDepth = player.elementary.entropy.bestDepth.max(player.elementary.foam.maxDepth); +} + +function getQuantumFoamGain(x) { + let gain = new ExpantaNum(1) + if (tmp.ach[162].has) gain = gain.times(getAch162Eff()||1) + if (tmp.ach[171].has) gain = gain.times(x*10) + if (tmp.elm) { + if (tmp.elm.qf) { + gain = gain.times(tmp.elm.qf.boost21||1) + gain = gain.times(tmp.elm.qf.boost23||1) + } + if (tmp.elm.entropy && player.elementary.entropy.unl && !mltActive(3)) { + gain = gain.times(tmp.elm.entropy.eff||1) + if (player.elementary.entropy.upgrades.includes(2)) gain = gain.times(tmp.elm.entropy.upgEff[2]||1) + } + } + if (player.elementary.entropy.upgrades.includes(11)) gain = gain.times(10) + if (player.mlt.times.gt(0) && tmp.mlt) gain = gain.times(tmp.mlt.quilts[1].eff2); + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[42]||0, 1) && hasDE(6)) gain = gain.times(TREE_UPGS[42].effect(player.elementary.theory.tree.upgrades[42]||0)) + if (modeActive("easy")) gain = gain.times(Math.pow(5/x, 2)*2.5) + return gain +} + +function getQFBoostCostDiv() { + let div = new ExpantaNum(1); + if (hasMltMilestone(22)) div = div.times(tmp.mlt.mil22reward) + return div; +} + +function getQFBoostCost(x, b) { + let start = FOAM_BOOST_COSTS[x][b].start + let base = FOAM_BOOST_COSTS[x][b].base + let exp = FOAM_BOOST_COSTS[x][b].exp + if (modeActive("extreme")) base = ExpantaNum.sqrt(base) + let id = (x-1)*3+(b-1) + let amt = player.elementary.foam.upgrades[id] + let cost = start.times(base.pow(amt.pow(exp))).div(getQFBoostCostDiv()) + return cost; +} + +function getQFBoostTarg(x, b) { + let start = FOAM_BOOST_COSTS[x][b].start + let base = FOAM_BOOST_COSTS[x][b].base + let exp = FOAM_BOOST_COSTS[x][b].exp + if (modeActive("extreme")) base = ExpantaNum.sqrt(base) + let id = (x-1)*3+(b-1) + let res = player.elementary.foam.amounts[x-1].times(getQFBoostCostDiv()) + let targ = res.div(start).max(1).logBase(base).pow(exp.pow(-1)) + return targ.plus(1).floor(); +} + +function qfBoost(x, b) { + let cost = getQFBoostCost(x, b) + if (player.elementary.foam.amounts[x-1].lt(cost)) return; + if (!tmp.ach[171].has) gainFoam(x-1, ExpantaNum.mul(cost, -1)) + let id = (x-1)*3+(b-1) + player.elementary.foam.upgrades[id] = player.elementary.foam.upgrades[id].plus(1) +} + +function qfMax(x, b) { + let cost = getQFBoostCost(x, b) + let target = getQFBoostTarg(x, b) + if (player.elementary.foam.amounts[x-1].lt(cost)) return; + let id = (x-1)*3+(b-1) + if (target.lte(player.elementary.foam.upgrades[id])) return; + if (!tmp.ach[171].has) gainFoam(x-1, ExpantaNum.mul(cost, -1)) + player.elementary.foam.upgrades[id] = player.elementary.foam.upgrades[id].max(target) +} + +function addToAllFoamBoosts() { + let toAdd = new ExpantaNum(0) + if (player.elementary.entropy.unl && tmp.elm.entropy && !mltActive(3)) toAdd = toAdd.plus(tmp.elm.entropy.omegaEff) + if (player.elementary.sky.unl && tmp.elm.sky) toAdd = toAdd.plus(tmp.elm.sky.spinorEff[1]) + return toAdd +} + +function getQFBoostData() { + let data = {} + let toAdd = addToAllFoamBoosts() + let extreme = modeActive("extreme") + for (let b=0;b<5;b++) { + let amt = player.elementary.foam.upgrades[b*3].plus(player.elementary.foam.upgrades[b*3+1]).plus(player.elementary.foam.upgrades[b*3+2]) + if (!player.elementary.foam.unl) amt = new ExpantaNum(0) + for (let i=(b*5+1);i<=(b*5+5);i++) { + data[i] = amt.sub((i-1)-b*5).div(5).ceil().max(0).plus(toAdd) + if (extreme) if (data[i].gte(45) && !(b==0?ExpantaNum.gte(player.elementary.theory.tree.upgrades[38]||0, 1):false)) data[i] = data[i].times(45).sqrt() + } + } + return data +} + +function qfUnl(x) { + if (!player.elementary.foam.maxDepth.eq(x)) return; + if (player.elementary.foam.maxDepth.gte(5)) return; + if (HCCBA("rfrm")) if (HCTVal("rfrm").gt(5-x)) return; + let cost = QF_NEXTLAYER_COST[x] + if (player.elementary.foam.amounts[x-1].lt(cost)) return + player.elementary.foam.maxDepth = player.elementary.foam.maxDepth.plus(1).min(5) + if (!hasMltMilestone(4)) { + let resetted = 0 + while (resetted=26) cost = cost.div(1.1); + return cost; +} + +function buyEntropyUpg(x) { + if (!player.elementary.entropy.unl || mltActive(3)) return; + if (player.elementary.entropy.upgrades.includes(x)) return; + let cost = getEntropyUpgCost(x) + if (player.elementary.entropy.amount.lt(cost)) return; + player.elementary.entropy.amount = player.elementary.entropy.amount.sub(cost) + player.elementary.entropy.upgrades.push(x) +} + +function entropyUpgShown(x) { + if (x<=8) return true; + else if (x<=20) return tmp.ach[183].has||player.elementary.sky.amount.gt(0); + else if (x>=26 && x<=33) return hasDE(10); + else if (x>=34 && x<=35) return hasDE(10) && modeActive("extreme"); + else if (x<=22) return modeActive("extreme"); + else if (x<=25) return modeActive("extreme")&&(tmp.ach[183].has||player.elementary.sky.amount.gt(0)); + else return false; +} \ No newline at end of file diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js new file mode 100644 index 00000000..1ec24cc3 --- /dev/null +++ b/js/main/elementary/hadronic_challenges.js @@ -0,0 +1,269 @@ +function updateTempHC() { + if (!tmp.elm.hc) tmp.elm.hc = {} + tmp.elm.hc.currScore = getProjectedHadronicScore() + tmp.elm.hc.mltMode = HCMltMode(); + tmp.elm.hc.hadronBulk = new ExpantaNum(1) + if (player.elementary.theory.inflatons.unl) tmp.elm.hc.hadronBulk = tmp.elm.hc.hadronBulk.plus(getInflatonEff2()) + tmp.elm.hc.hadronGain = player.elementary.hc.unl ? player.elementary.hc.best.pow(1.5).div(10) : new ExpantaNum(0) + tmp.elm.hc.hadronGain = tmp.elm.hc.hadronGain.times(TREE_UPGS[31].effect(player.elementary.theory.tree.upgrades[31]||0)) + if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.hc.hadronGain = tmp.elm.hc.hadronGain.times(tmp.elm.qf.boost7) + if (modeActive("hikers_dream") && player.energyUpgs.includes(27)) tmp.elm.hc.hadronGain = tmp.elm.hc.hadronGain.times(tmp.hd.enerUpgs[27]) + + tmp.elm.hc.hadInterval = ExpantaNum.add(1, ExpantaNum.div(9, player.elementary.hc.best.plus(1).log(Math.E).plus(1)).div(200)) + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[33]||0, 1)) tmp.elm.hc.hadInterval = tmp.elm.hc.hadInterval.sub(1).div(2).plus(1) + if (player.elementary.entropy.upgrades.includes(19) && tmp.elm.entropy) tmp.elm.hc.hadInterval = tmp.elm.hc.hadInterval.root(tmp.elm.entropy.upgEff[19]) + if (hasDE(7)) tmp.elm.hc.hadInterval = tmp.elm.hc.hadInterval.root(getAccelEff()) + + tmp.elm.hc.hadronEff = player.elementary.hc.hadrons.max(1).logBase(tmp.elm.hc.hadInterval).floor().times(tmp.elm.hc.hadronBulk) + tmp.elm.hc.next = ExpantaNum.pow(tmp.elm.hc.hadInterval, new ExpantaNum(player.elementary.hc.claimed||0).div(tmp.elm.hc.hadronBulk).plus(1)) + let rg = new ExpantaNum(getHCSelector("goal")).times(DISTANCES.uni); + if (getHCSelector("goalMlt")) rg = ExpantaNum.pow(DISTANCES.mlt, getHCSelector("goal")); + tmp.elm.hc.complPerc = player.distance.log10().div(rg.log10()).min(1); + tmp.elm.hc.infState = getInflatonState() + tmp.elm.hc.infGain = getInflatonGain() + claimHadronEff() + updateHCTabs() +} + +function clearHCData() { + if (!confirm("Are you sure you want to reset your Hadronic Challenge inputs?")) return; + updateHCSelectorInputs(true); +} + +// Hadronic Challenge +function getProjectedHadronicScore() { + let score = new ExpantaNum(0) + + // Pre-Collapse Modifiers + if (getHCSelector("rockets")) score = score.times(1.025).plus(0.025) + if (getHCSelector("rf")) score = score.times(1.005).plus(0.005) + if (getHCSelector("noTRU")) score = score.times(1.08).plus(0.08) + + // Collapse Modifiers + if (getHCSelector("noCad")) score = score.times(1.05).plus(0.05) + if (getHCSelector("noPU")) score = score.times(1.1).plus(0.1) + if (getHCSelector("noDC")) score = score.times(1.04).plus(0.04) + + // Infinity Modifiers + if (getHCSelector("noIU")) score = score.times(1.1).plus(0.1) + let challMod = modeActive("extreme")?72:36 + score = score.plus(new ExpantaNum(getHCSelector("spaceon")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("solaris")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("infinity")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("eternity")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("reality")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("drigganiz")).div(challMod)) + if (modeActive("extreme")) { + score = score.plus(new ExpantaNum(getHCSelector("flamis")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("cranius")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("spectra")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("aqualon")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("nullum")).div(challMod)) + score = score.plus(new ExpantaNum(getHCSelector("quantron")).div(challMod)) + } + if (getHCSelector("noGems")) score = score.times(1.01).plus(0.01) + if (getHCSelector("purge")) score = score.times(3).plus(2) + if (getHCSelector("noDS")) score = score.times(1.03).plus(0.03) + if (getHCSelector("noDB")) score = score.times(1.03).plus(0.03) + + // Elementary Modifiers + if (getHCSelector("elm")) score = score.times(1.125).plus(0.125); + if (getHCSelector("fermbos")) score = score.times(1.075).plus(0.075); + score = score.times(new ExpantaNum(getHCSelector("tv")).plus(2).pow(0.25)).plus(new ExpantaNum(getHCSelector("tv")).plus(1).div(20)) + if (getHCSelector("sprsym")) score = score.times(1.125).plus(0.05); + if (getHCSelector("tree")) score = score.times(1.04).plus(0.04); + score = score.times(ExpantaNum.sub(12, ExpantaNum.mul(11**0.998, ExpantaNum.sub(11, getHCSelector("string")).pow(0.002)))); + if (getHCSelector("preontb")) score = score.times(1.02).plus(0.02); + if (getHCSelector("aclron")) score = score.times(1.02).plus(0.02); + score = score.times(ExpantaNum.sub(12, ExpantaNum.mul(11**0.996, ExpantaNum.sub(11, getHCSelector("de")).pow(0.004)))); + if (getHCSelector("infl")) score = score.times(1.02).plus(0.02); + score = score.times(ExpantaNum.sub(12, ExpantaNum.mul(11**0.999, ExpantaNum.sub(11, getHCSelector("rfrm")).pow(0.001)))); + if (getHCSelector("etrpy")) score = score.times(1.04).plus(0.04); + if (getHCSelector("sky")) score = score.times(1.05).plus(0.05); + + // Multiversal Modifiers + if (getHCSelector("q1")) score = score.times(1.2).plus(0.6) + if (getHCSelector("q2")) score = score.times(1.15).plus(0.575) + if (getHCSelector("q3")) score = score.times(1.175).plus(0.5875) + for (let i=1;i<=5;i++) if (getHCSelector("mlt"+i)) score = score.times(1.1).plus(0.3); + + // Goal Modifier + let goal = new ExpantaNum(getHCSelector("goal")) + if (getHCSelector("goalMlt")) goal = ExpantaNum.pow(DISTANCES.mlt, goal); + if (goal.gte("e1e7")) goal = ExpantaNum.pow("e1e7", goal.log("e1e7").sqrt()); + score = score.times(goal.log10().div(Math.log10(Number.MAX_VALUE)).log10().plus(1)) + + if (modeActive("easy")) score = score.pow(1.025) + return score +} + +function isHCTabShown(name) { + return hcTab == name; +} + +function updateHCTabs() { + var tabs = document.getElementsByClassName("hcTab"); + for (i = 0; i < tabs.length; i++) { + var el = new Element(tabs[i].id); + el.setDisplay(isHCTabShown(tabs[i].id)); + } + new Element("furnacetabbtn").setDisplay(player.modes.includes("extreme")) +} + +function showHCTab(name) { + hcTab = name; +} + +function getHCSelector(name) { + let base; + let data = HC_DATA[name] + if (data[0]=="checkbox") return !(!player.elementary.hc.selectors[name]) + else { + let minimum = checkFunc(data[1][0]); + let maximum = checkFunc(data[1][1]); + if (data[0]=="text"||data[0]=="number"||data[0]=="range") base = minimum + return new ExpantaNum(player.elementary.hc.selectors[name]||base).max(minimum).min(maximum).toString() + } +} + +function updateHCSelector(name) { + let data = HC_DATA[name] + let change = false; + let type = data[0] + let el = new Element("hcSelector"+name) + if (type=="checkbox") { + if (el.el.checked != player.elementary.hc.selectors[name]) change = true; + player.elementary.hc.selectors[name] = el.el.checked + } else if (type=="text"||type=="number"||type=="range") { + let val = el.el.value||0 + try { + let num = new ExpantaNum(val) + if (type=="number"||type=="range") num = num.round() + let minimum = checkFunc(data[1][0]) + let maximum = checkFunc(data[1][1]) + if (num.lt(minimum) || num.isNaN()) num = new ExpantaNum(minimum) + if (num.gt(maximum)) num = new ExpantaNum(maximum) + if (num.eq(el.el.value)) change = true; + player.elementary.hc.selectors[name] = num + el.el.value = disp(num, 8, 3, 10) + } catch(e) { + notifier.warn("Improper Hadronic Challenge input") + console.log(e) + return; + } + } + if (change && name=="goalMlt" && (tmp.ach?tmp.ach[198].has:false)) { // Adjustment for conversion between mlt & uni + let el2 = new Element("hcSelectorgoal"); + if (player.elementary.hc.selectors["goalMlt"]) { + player.elementary.hc.selectors.goal = new ExpantaNum(1); + el2.el.value = disp(new ExpantaNum(1), 8, 3, 10); + } else { + player.elementary.hc.selectors.goal = new ExpantaNum("e1e9"); + el2.el.value = disp(new ExpantaNum("e1e9"), 8, 3, 10); + } + } +} + +function canCompleteHC() { + let realGoal = ExpantaNum.mul(getHCSelector("goal"), DISTANCES.uni); + if (getHCSelector("goalMlt")) realGoal = ExpantaNum.pow(DISTANCES.mlt, getHCSelector("goal")) + return (!(!player.elementary.hc.active)) && player.distance.gte(realGoal); +} + +function updateHCSelectorInputs(reset=false) { + let len = Object.keys(HC_DATA).length + for (let i=0;i HC_DATA[a][2]=="mlt").some(a => getHCSelector(a)) } + +function startHC() { + if (!player.elementary.hc.unl) return + let mltMode = tmp.elm.hc.mltMode; + if (player.elementary.hc.active) { + if (canCompleteHC()) player.elementary.hc.best = player.elementary.hc.best.max(getProjectedHadronicScore()) + else if (player.options.hcc) if (!confirm("Are you sure you want to exit the challenge early?")) return + } else if (getProjectedHadronicScore().lte(0)) { + alert("You cannot start a Hadronic Challenge with a Projected Hadronic Score of 0!") + return + } else if (player.elementary.theory.active) { + alert("You cannot start a Hadronic Challenge while in a Theoriverse run!") + return + } + player.elementary.hc.active = !player.elementary.hc.active + if (mltMode) mltReset(true, true, true); + else elmReset(true); + if (getHCSelector("elm")) { + player.elementary.particles = new ExpantaNum(0); + player.elementary.times = new ExpantaNum(0); + } + if (getHCSelector("fermbos")) { + player.elementary.fermions.amount = new ExpantaNum(0); + player.elementary.bosons.amount = new ExpantaNum(0); + } + if (getHCSelector("tree") && !mltMode) resetTheoryTree(true, true); + if (getHCSelector("preontb") && !mltMode) { + player.elementary.theory.preons.amount = new ExpantaNum(0); + player.elementary.theory.preons.boosters = new ExpantaNum(0); + } + if (getHCSelector("aclron") && !mltMode) player.elementary.theory.accelerons.amount = new ExpantaNum(0); + if (getHCSelector("infl") && !mltMode) player.elementary.theory.inflatons.amount = new ExpantaNum(0); + if ((getHCSelector("rfrm")!="0") && !mltMode) player.elementary.foam.maxDepth = new ExpantaNum(1); + if (getHCSelector("etrpy") && !mltMode) { + player.elementary.entropy.amount = new ExpantaNum(0); + player.elementary.entropy.best = new ExpantaNum(0); + player.elementary.entropy.upgrades = []; + } + if (getHCSelector("sky") && !mltMode) { + player.elementary.sky.amount = new ExpantaNum(0); + player.elementary.sky.pions.amount = new ExpantaNum(0); + player.elementary.sky.spinors.amount = new ExpantaNum(0); + } + updateHCSelectorInputs() +} + +function HCCBA(name) { + if (name=="noTRU" && extremeStadiumActive("cranius", 3)) return true + return player.elementary.hc.active && getHCSelector(name) +} + +function HCTVal(name) { + return !player.elementary.hc.active?new ExpantaNum(HC_DATA[name][1][0]):new ExpantaNum(getHCSelector(name)) +} + +function claimHadronEff() { + let diff = tmp.elm.hc.hadronEff.sub(player.elementary.hc.claimed||0).floor() + if (diff.gte(1)) { + player.elementary.theory.points = player.elementary.theory.points.plus(diff) + player.elementary.hc.claimed = player.elementary.hc.claimed.plus(diff) + } +} + +function exportHC() { + let data = btoa(JSON.stringify(player.elementary.hc.selectors)) + notifier.info("Hadronic Challenge data exported!") + copyToClipboard(data) +} + +function importHC() { + if (player.elementary.hc.active) { + notifier.warn("You cannot import a Hadronic Challenge while in one!") + return; + } + let toImport = prompt("Paste Hadronic Challenge data here.") + try { + let data = JSON.parse(atob(toImport)) + for (let d in data) if (checkFunc(HC_DATA[d][3])) player.elementary.hc.selectors[d] = data[d]; + updateHCSelectorInputs() + } catch(e) { + notifier.warn("Invalid Hadronic Challenge data!") + } +} \ No newline at end of file diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js new file mode 100644 index 00000000..1b7165c9 --- /dev/null +++ b/js/main/elementary/skyrmion.js @@ -0,0 +1,297 @@ +function updateSkyrmionTabs() { + if (!tmp.elm.sky.updateTabs) tmp.elm.sky.updateTabs = function () { + let tabs = Element.allFromClass("skyTab"); + for (let i = 0; i < tabs.length; i++) { + tabs[i].setDisplay(skyTab == tabs[i].id); + new Element(tabs[i].id + "tabbtn").setDisplay(SKY_TABS[tabs[i].id]()); + } + }; + if (!tmp.elm.sky.showTab) tmp.elm.sky.showTab = function (name) { + if (skyTab == name) return; + skyTab = name; + tmp.elm.sky.updateTabs(); + }; + tmp.elm.sky.updateTabs(); +} + +function updateSkyrmionMain() { + tmp.elm.sky.gain = getSkyGain(); + tmp.elm.sky.eff = getSkyEff(); + tmp.elm.sky.upgPow = getSkyUpgPow(); +} + +function updatePions() { + tmp.elm.sky.pionGain = getPionGain(); + if (!tmp.elm.sky.pionEff) tmp.elm.sky.pionEff = {} + for (let i=1;i<=SKY_FIELDS.upgs;i++) tmp.elm.sky.pionEff[i] = SKY_FIELDS[i].pionEff(ExpantaNum.mul(player.elementary.sky.pions.field[i]||0, tmp.elm.sky.upgPow)) +} + +function updateSpinors() { + tmp.elm.sky.spinorGain = getSpinorGain(); + if (!tmp.elm.sky.spinorEff) tmp.elm.sky.spinorEff = {} + for (let i=1;i<=SKY_FIELDS.upgs;i++) tmp.elm.sky.spinorEff[i] = SKY_FIELDS[i].spinorEff(ExpantaNum.mul(player.elementary.sky.spinors.field[i]||0, tmp.elm.sky.upgPow)) +} + +function updateTempSkyrmions() { + if (!tmp.elm.sky) tmp.elm.sky = {} + + updateSkyrmionTabs(); + updateSkyrmionMain(); + updatePions(); + updateSpinors(); +} + +// Skyrmions +function getSkyReqData(n, direct=false) { + let req = SKY_REQ[n] + if ((hasMltMilestone(11)||direct=="mlt") && tmp.mlt) req = ExpantaNum.root(req, tmp.mlt.mil11reward) + return req; +} + +function canSkyReset() { + if (!player.elementary.sky.unl) return false; + if (player.distance.lt(getSkyReqData(0))) return false; + if (player.elementary.fermions.quarks.amount.lt(getSkyReqData(1))) return false; + if (player.elementary.fermions.leptons.amount.lt(getSkyReqData(2))) return false; + return true; +} + +function getSkyGain() { + if (!canSkyReset()) return new ExpantaNum(0); + let gain = player.elementary.fermions.quarks.amount.max(1).logBase(getSkyReqData(1)).times(player.elementary.fermions.leptons.amount.max(1).logBase(getSkyReqData(2))).pow(2); + if (player.elementary.entropy.upgrades.includes(14)) gain = gain.times(tmp.elm.entropy.upgEff[14]) + if (player.elementary.entropy.upgrades.includes(29)) gain = gain.times(tmp.elm.entropy.upgEff[29]) + if (player.elementary.entropy.upgrades.includes(30)) gain = gain.times(tmp.elm.entropy.upgEff[30]) + if (mltRewardActive(1) && tmp.mlt) gain = gain.times(tmp.mlt.mlt1reward) + if (tmp.fn) if (tmp.fn.pl) if (tmp.fn.pl.unl) gain = gain.times(tmp.fn.pl.boosts[8]) + return gain.floor(); +} + +function skyrmionReset(force=false) { + if (!force) { + if (!canSkyReset()) return; + if (!HCCBA("sky")) player.elementary.sky.amount = player.elementary.sky.amount.plus(getSkyGain().max(0)); + }; + + player.inf.pantheon.purge.power = new ExpantaNum(0); + player.elementary.particles = new ExpantaNum(0); + player.elementary.fermions.amount = new ExpantaNum(0); + player.elementary.bosons.amount = new ExpantaNum(0); + player.elementary.bosons.gauge.photons.upgrades = [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)]; + for (let i=0;i KEEP_ENTUPGS_SKY.includes(x)) + + if (modeActive("extreme")) { + player.plasma.amount = new ExpantaNum(0); + player.plasma.whiteFlame = new ExpantaNum(0); + } + + forceEntropyReset(true); + tmp.elm.layer.reset(true); + + updateTempInf(); + updateTempElementary(); +} + +function getSkyPow() { + let pow = new ExpantaNum(1) + if (player.elementary.sky.unl && tmp.elm.sky.spinorEff) pow = pow.times(tmp.elm.sky.spinorEff[4]) + if (player.elementary.sky.unl && tmp.elm.sky.spinorEff) pow = pow.times(tmp.elm.sky.spinorEff[12]) + return pow; +} + +function getSkyEff() { + if (!player.elementary.sky.unl) return new ExpantaNum(0); + let eff = player.elementary.sky.amount.plus(1).logBase(2).sqrt().times(2.5).times(getSkyPow()).plus(1) + return eff; +} + +function getSkyUpgPow() { + if (!player.elementary.sky.unl) return new ExpantaNum(0); + let pow = new ExpantaNum(1) + if (mltActive(2)) pow = pow.times(0.6); + if (modeActive("extreme")) pow = pow.div(2); + if (tmp.fn) if (tmp.fn.pl.unl) pow = pow.times(tmp.fn.pl.boosts[3]) + return pow; +} + +function getQuarkStacks(x) { + if (mltActive(3)) return new ExpantaNum(0); + let stacks = new ExpantaNum(x) + .sub(hasMltMilestone(14)?0:player.elementary.fermions.quarks.type) + .div(QUARK_NAMES.length) + .plus(1) + .ceil() + .max(0); + if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.times(tmp.elm.sky.eff); + if (player.mlt.times.gt(0) && tmp.mlt) stacks = stacks.times(tmp.mlt.quilts[3].eff); + return stacks; +} + +function getLeptonStacks(x) { + if (mltActive(3)) return new ExpantaNum(0); + let stacks = new ExpantaNum(x) + .sub(hasMltMilestone(14)?0:player.elementary.fermions.leptons.type) + .div(LEPTON_NAMES.length) + .plus(1) + .ceil() + .max(0); + if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.times(tmp.elm.sky.eff); + if (player.mlt.times.gt(0) && tmp.mlt) stacks = stacks.times(tmp.mlt.quilts[3].eff); + return stacks; +} + +function getSkyToPionSpinorGainMult() { + let m = player.elementary.sky.amount.pow(2).times(5); + if (player.elementary.entropy.upgrades.includes(33)) m = m.pow(1.5); + return m; +} + +function getPionGain() { + let gain = getSkyToPionSpinorGainMult(); + if (player.elementary.sky.unl && tmp.elm.sky.pionEff) gain = gain.times(tmp.elm.sky.pionEff[6]) + if (player.elementary.sky.unl && tmp.elm.sky.spinorEff) gain = gain.times(tmp.elm.sky.spinorEff[6]) + if (modeActive("extreme") && tmp.fn) if (tmp.fn.pl.unl) gain = gain.times(tmp.fn.pl.boosts[5]) + if (modeActive("easy")) gain = gain.times(4) + if (hasMltMilestone(6) && tmp.mlt) gain = gain.times(tmp.mlt.quilts[2].eff2) + if (hasMltMilestone(20) && tmp.mlt) gain = gain.times(tmp.mlt.mil20reward.pion) + if (player.elementary.entropy.upgrades.includes(28)) gain = gain.times(tmp.elm.entropy.upgEff[28]) + if (player.elementary.entropy.upgrades.includes(31)) gain = gain.times(tmp.elm.entropy.upgEff[31]) + return gain; +} + +function getSpinorGain() { + let gain = getSkyToPionSpinorGainMult(); + if (player.elementary.sky.unl && tmp.elm.sky.pionEff) gain = gain.times(tmp.elm.sky.pionEff[6]) + if (player.elementary.sky.unl && tmp.elm.sky.spinorEff) gain = gain.times(tmp.elm.sky.spinorEff[6]) + if (modeActive("extreme") && tmp.fn) if (tmp.fn.pl.unl) gain = gain.times(tmp.fn.pl.boosts[5]) + if (modeActive("easy")) gain = gain.times(4) + if (hasMltMilestone(6) && tmp.mlt) gain = gain.times(tmp.mlt.quilts[2].eff2) + if (hasMltMilestone(20) && tmp.mlt) gain = gain.times(tmp.mlt.mil20reward.spinor) + if (player.elementary.entropy.upgrades.includes(28)) gain = gain.times(tmp.elm.entropy.upgEff[28]) + if (player.elementary.entropy.upgrades.includes(31)) gain = gain.times(tmp.elm.entropy.upgEff[31]) + return gain; +} + +function setupSkyField(type) { + let field = new Element(type+"Field") + let data = SKY_FIELDS; + let html = "" + for (let i=0;i&"+GREEK_LETTERS[id]+";" + } + html += "" + } + field.setHTML(html) +} + +function getFieldUpgCostIncExp() { + let exp = 1 + if (player.elementary.entropy.upgrades.includes(16)) exp /= 4; + if (player.elementary.entropy.upgrades.includes(20)) exp = 0; + return exp; +} + +function getFieldUpgCost(type, id) { + let data = SKY_FIELDS[id]; + let otherType = ["pions","spinors"].filter(x => x!=type)[0] + let bought = ExpantaNum.pow(ExpantaNum.add(player.elementary.sky[type].field[id]||0, ExpantaNum.mul(player.elementary.sky[otherType].field[id]||0, getFieldUpgCostIncExp())), 2) + let cost = ExpantaNum.pow(data.costMult, bought).times(data.baseCost); + if (type=="pions") if (player.elementary.sky.unl && tmp.elm.sky.spinorEff) cost = cost.div(tmp.elm.sky.spinorEff[8]) + if (type=="spinors") if (player.elementary.sky.unl && tmp.elm.sky.pionEff) cost = cost.div(tmp.elm.sky.pionEff[8]) + return cost; +} + +function getFieldUpgTarg(type, id) { + if (!player.elementary.entropy.upgrades.includes(20)) return new ExpantaNum(0) + let data = SKY_FIELDS[id]; + let targ = player.elementary.sky[type].amount; + if (type=="pions") if (player.elementary.sky.unl && tmp.elm.sky.spinorEff) targ = targ.times(tmp.elm.sky.spinorEff[8]) + if (type=="spinors") if (player.elementary.sky.unl && tmp.elm.sky.pionEff) targ = targ.times(tmp.elm.sky.pionEff[8]) + targ = targ.div(data.baseCost).max(1).logBase(data.costMult).sqrt(); + return targ.plus(1).floor(); +} + +function buySkyUpg(type, id) { + if (!player.elementary.sky.unl) return; + if (player.elementary.sky.amount.lt(SKY_FIELDS[id].req)) return; + let cost = getFieldUpgCost(type+"s", id) + if (player.elementary.sky[type+"s"].amount.lt(cost)) return; + player.elementary.sky[type+"s"].amount = player.elementary.sky[type+"s"].amount.sub(cost) + player.elementary.sky[type+"s"].field[id] = ExpantaNum.add(player.elementary.sky[type+"s"].field[id]||0, 1) +} + +function respecBothFields() { + if ((Object.keys(player.elementary.sky.pions.field).length+Object.keys(player.elementary.sky.spinors.field).length)==0) return; + if (!confirm("Are you sure you want to reset both fields? This will also force a Skyrmion reset!")) return; + player.elementary.sky.pions.field = {} + player.elementary.sky.spinors.field = {} + skyrmionReset(true) +} + +function respecField(type) { + if (Object.keys(player.elementary.sky[type].field).length==0) return; + if (!confirm("Are you sure you want to reset this field? This will also force a Skyrmion reset!")) return; + player.elementary.sky[type].field = {} + skyrmionReset(true) +} + +function maxField(type, lims={}, ignoreUpgReq=false) { + let limDefault = ((Object.keys(lims).length==0)?(1/0):0) + if (!(player.elementary.entropy.upgrades.includes(20)||ignoreUpgReq) && (Object.keys(lims).length==0)) return; + for (let i=1;i<=SKY_FIELDS.upgs;i++) { + if (player.elementary.sky.amount.lt(SKY_FIELDS[i].req)) continue; + let cost = getFieldUpgCost(type, i) + if (player.elementary.sky[type].amount.lt(cost)) continue; + let targ = getFieldUpgTarg(type, i).min(lims[i]||limDefault) + let bulk = targ.sub(player.elementary.sky[type].field[i]||0) + if (bulk.lt(1)) continue; + player.elementary.sky[type].field[i] = ExpantaNum.add(ExpantaNum.max(player.elementary.sky[type].field[i]||0, 0), bulk).max(0) + } +} + +function maxBothFields() { + if (!tmp.ach[178].has) return; + maxField("pions", {}, true) + maxField("spinors", {}, true) +} + +function exportField(type) { + let data = JSON.stringify(player.elementary.sky[type].field); + notifier.info("Field exported!") + copyToClipboard(data) +} + +function importField(type) { + let input = prompt("Paste your exported field data here.") + try { + let data = JSON.parse(input) + if (Object.keys(data).length==0) return; + for (let i=0;i=0;i--) { + let type = ["squark", "slepton", "neutralino", "chargino"][i] + let next = ["squark", "slepton", "neutralino", "chargino"][i+1] + if ((player.elementary.theory.tree.upgrades[i+22]||new ExpantaNum(0)).gte(1)) tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(tmp.elm.theory.ss[next+"Eff"]) + } + tmp.elm.theory.ss.wavelength = player.elementary.theory.supersymmetry.squarks.times(player.elementary.theory.supersymmetry.sleptons).times(player.elementary.theory.supersymmetry.neutralinos).times(player.elementary.theory.supersymmetry.charginos).pow(1/5) + tmp.elm.theory.ss.waveEff = tmp.elm.theory.ss.wavelength.plus(1).pow(2.25) + if (tmp.elm.theory.ss.waveEff.gte(1e13)) tmp.elm.theory.ss.waveEff = tmp.elm.theory.ss.waveEff.pow(1/4).times(Math.pow(1e13, 3/4)) + if (HCCBA("sprsym")) tmp.elm.theory.ss.waveEff = new ExpantaNum(1); +} + +function updateTempTheoryTree() { + if (!tmp.elm.theory.tree) tmp.elm.theory.tree = {} + if (!tmp.elm.theory.tree.unl) tmp.elm.theory.tree.unl = function() { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.supersymmetry.unl) return + if (player.elementary.theory.tree.unl) return + if (player.elementary.theory.points.lt(1)) return + player.elementary.theory.points = player.elementary.theory.points.sub(1).max(0) + player.elementary.theory.tree.unl = true + } + tmp.elm.theory.tree.bought = function(i) { return new ExpantaNum(player.elementary.theory.tree.upgrades[i]||0) } + if (!tmp.elm.theory.tree.buy) tmp.elm.theory.tree.buy = function(x, max=false) { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.tree.unl) return + if (HCCBA("tree")) return; + let bought = tmp.elm.theory.tree.bought(x) + let cap = getTreeUpgCap(x) + if (bought.gte(cap)) return + let cost = TREE_UPGS[x].cost(bought.div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).round() + if (player.elementary.theory.points.lt(cost)) return + if (tmp.ach[modeActive("extreme+hikers_dream")?143:162].has && (outerShiftDown||max) && TREE_UPGS[x].target!==undefined) { + let pts = player.elementary.theory.points + if (pts.eq(0)&&cost.eq(0)) pts = new ExpantaNum(.99) + let target = TREE_UPGS[x].target(pts.times(tmp.elm.theory.tree.costReduc)).times(tmp.elm.theory.tree.costScaling).max(0).min(cap); + if (target.lte(bought)||target.lt(1)) return; + let newCost = TREE_UPGS[x].cost(target.sub(1).div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).round(); + if (!player.elementary.entropy.upgrades.includes(13)) { + player.elementary.theory.points = player.elementary.theory.points.sub(newCost).max(0); + player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(newCost); + } + player.elementary.theory.tree.upgrades[x] = bought.max(target) + updateTheoryTreeHTMLPerSec(); + } else { + if (!player.elementary.entropy.upgrades.includes(13)) { + player.elementary.theory.points = player.elementary.theory.points.sub(cost).max(0) + player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(cost) + } + player.elementary.theory.tree.upgrades[x] = bought.plus(1) + updateTheoryTreeHTMLPerSec(); + } + } + tmp.elm.theory.tree.costScaling = 1; + if (player.elementary.entropy.upgrades.includes(26)) tmp.elm.theory.tree.costScaling = 2; +tmp.elm.theory.tree.costReduc = ach152Eff() + if (player.elementary.theory.inflatons.unl) tmp.elm.theory.tree.costReduc = tmp.elm.theory.tree.costReduc.times(getInflatonEff1()) + if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.theory.tree.costReduc = tmp.elm.theory.tree.costReduc.times(tmp.elm.qf.boost8) +} + +function updateTempTheories() { + if (!tmp.elm.theory) tmp.elm.theory = {} + + tmp.elm.theory.speed = new ExpantaNum(1) + if (player.mlt.times.gt(0) && tmp.mlt) tmp.elm.theory.speed = tmp.elm.theory.speed.times(tmp.mlt.quilts[1].eff2); + updateTheoryTabs() + updateTempTheoriverse(); + updateTempSupersymmetry(); + updateTempTheoryTree(); +} + +function resetTheoryTree(force=false, noReset=false) { + if (!force) { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.tree.unl) return + if (!confirm("Are you sure you want to reset your tree to get Theory Points back?")) return + } + player.elementary.theory.points = player.elementary.theory.points.plus(player.elementary.theory.tree.spent) + player.elementary.theory.tree.spent = new ExpantaNum(0) + player.elementary.theory.tree.upgrades = {} + if (!noReset) elmReset(true) +} + +// Strings + +function unlockStrings() { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.tree.unl) return + if (player.elementary.theory.strings.unl) return + if (player.elementary.theory.points.lt(7)) return + if (player.mlt.times.eq(0)) if (!confirm("Are you sure you want to unlock Strings? You will not be able to get your Theory Points back!")) return + player.elementary.theory.points = player.elementary.theory.points.sub(7).max(0) + player.elementary.theory.strings.unl = true +} + +function getStringEff(n) { + if (!player.elementary.theory.unl || !player.elementary.theory.strings.unl) return new ExpantaNum(1) + if (HCCBA("string")) if (HCTVal("string").gt(UNL_STR()-n)) return new ExpantaNum(1); + let ret = player.elementary.theory.strings.amounts[n-1].plus(1).pow(3/n) + if (ret.gte(1e6)) ret = ret.pow(1/3).times(ExpantaNum.pow(1e6, 2/3)) + if (n==1 && ret.gte(1e9)) ret = ret.pow(0.1).times(Math.pow(1e9, 0.9)) + if (n==1 && player.elementary.entropy.upgrades.includes(18)) ret = ret.pow(5); + let finalExp = new ExpantaNum(1) + let ettu = player.elementary.theory.tree.upgrades + if (hasDE(8) && n==1) finalExp = finalExp.plus(1); + if (hasDE(5) && n==2) finalExp = finalExp.plus(TREE_UPGS[14].effect(ettu[14]||0)) + if (hasDE(5) && n==3) finalExp = finalExp.plus(TREE_UPGS[15].effect(ettu[15]||0)) + if (hasDE(5) && n==4) finalExp = finalExp.plus(TREE_UPGS[16].effect(ettu[16]||0)) + if (hasDE(5) && n==5) finalExp = finalExp.plus(TREE_UPGS[17].effect(ettu[17]||0)) + if (hasDE(5) && n==6) finalExp = finalExp.plus(TREE_UPGS[18].effect(ettu[18]||0)) + if (hasDE(5) && n==7) finalExp = finalExp.plus(TREE_UPGS[19].effect(ettu[19]||0)) + if (hasDE(9) && n>7) finalExp = finalExp.plus(1); + return ret.pow(finalExp) +} + +function getStringGain(n) { + if (!player.elementary.theory.strings.unl) return new ExpantaNum(0) + if (n>1) if (!(player.elementary.theory.strings.amounts[n-2].gte(STR_REQS[n])&&(UNL_STR()>=n))) return new ExpantaNum(0) + let gain = new ExpantaNum(0.02).times(1/Math.sqrt(n)) + if (n function() { base = base.times(ExpantaNum.add(x, 1)) }()) + let gain = base.pow(1/7).sqrt() + if (gain.gte(1e7)) gain = gain.cbrt().times(Math.pow(1e7, 2/3)) + if (gain.gte(1e9)) { + let exp = gain.plus(1).log10().sqrt().div(Math.sqrt(8)/4) + if (exp.gte(1e300)) exp = new ExpantaNum(1e300) + gain = gain.pow(exp.pow(-1)).times(ExpantaNum.pow(1e9, ExpantaNum.sub(1, exp.pow(-1)))) + } + gain = gain.times(TREE_UPGS[6].effect(player.elementary.theory.tree.upgrades[6]||0)) + gain = gain.times(TREE_UPGS[30].effect(player.elementary.theory.tree.upgrades[30]||0)) + if (player.elementary.foam.unl && tmp.elm.qf) gain = gain.times(tmp.elm.qf.boost3) + return gain +} + +function getEntangleEff() { + let eff = player.elementary.theory.strings.entangled.plus(1).pow(1.5) + return eff +} + +function entangleStrings() { + let lastStr = player.elementary.theory.strings.amounts.findIndex(x => new ExpantaNum(x).eq(0))+1 + if (lastStr<3&&lastStr!=0) return + player.elementary.theory.strings.entangled = player.elementary.theory.strings.entangled.plus(getEntangleGain()) + player.elementary.theory.strings.amounts = [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)] +} + +// Preons + +function unlockPreons() { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.strings.unl) return + if (player.elementary.theory.preons.unl) return + if (player.elementary.theory.points.lt(10)) return + if (player.mlt.times.eq(0)) if (!confirm("Are you sure you want to unlock Preons? You will not be able to get your Theory Points back!")) return + player.elementary.theory.points = player.elementary.theory.points.sub(10).max(0) + player.elementary.theory.preons.unl = true +} + +function getPreonGain() { + if (!player.elementary.theory.preons.unl) return new ExpantaNum(0) + let gain = player.elementary.theory.strings.amounts[0].plus(1).log10().div(10) + gain = gain.times(TREE_UPGS[9].effect(player.elementary.theory.tree.upgrades[9]||0)) + if (tmp.elm) gain = gain.times(tmp.elm.theory.speed) + return gain +} + +function getTBCost() { + let b = new ExpantaNum(player.elementary.theory.preons.boosters) + if (b.gte(4)) b = b.pow(2).div(4) + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[40]||0, 1) && hasDE(6)) b = b.times(TREE_UPGS[40].effect(player.elementary.theory.tree.upgrades[40]||0)) + let base = new ExpantaNum(2) + if (hasDE(5)) base = base.pow(0.1) + let cost = new ExpantaNum(20).times(ExpantaNum.pow(base, b)) + cost = cost.div(TREE_UPGS[10].effect(player.elementary.theory.tree.upgrades[10]||0)) + return cost +} + +function getTBTarg() { + let base = new ExpantaNum(2) + if (hasDE(5)) base = base.pow(0.1) + let targ = player.elementary.theory.preons.amount.times(TREE_UPGS[10].effect(player.elementary.theory.tree.upgrades[10]||0)).div(20).max(1).logBase(base) + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[40]||0, 1) && hasDE(6)) targ = targ.div(TREE_UPGS[40].effect(player.elementary.theory.tree.upgrades[40]||0)) + if (targ.gte(4)) targ = targ.times(4).sqrt() + return targ.plus(1).floor(); +} + +function getTBGain(bulk=1) { + if (player.elementary.entropy.upgrades.includes(17)) { + if (bulk==1) return player.elementary.theory.preons.boosters.plus(1).pow(5) + else { + let s = player.elementary.theory.preons.boosters.plus(1) + let t = ExpantaNum.add(bulk, s) + return ExpantaNum.div(s.pow(6).times(-2).plus(s.pow(5).times(6)).sub(s.pow(4).times(5)).plus(s.pow(2)).plus(t.pow(2).times(t.plus(1).pow(2)).times(t.pow(2).times(2).plus(t.times(2)).sub(1))), 12).round(); + } + } else { + if (bulk==1) return player.elementary.theory.preons.boosters.plus(1) + else { + let a = player.elementary.theory.preons.boosters.plus(1) + let n = ExpantaNum.add(bulk, a) + let d = 1 + return n.div(2).times(a.times(2).plus(n.sub(1).times(d))).round(); + } + } +} + +function theoryBoost(max=false) { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.preons.unl) return + if (HCCBA("preontb")) return; + if (player.elementary.theory.preons.amount.lt(getTBCost())) return + let targ; + if (max) { + targ = getTBTarg(); + if (targ.sub(player.elementary.theory.preons.boosters).lt(1)) return; + } + player.elementary.theory.preons.amount = player.elementary.theory.preons.amount.sub(getTBCost()) + if (max) { + let bulk = targ.sub(player.elementary.theory.preons.boosters).max(1); + player.elementary.theory.points = player.elementary.theory.points.plus(getTBGain(bulk)); + player.elementary.theory.preons.boosters = player.elementary.theory.preons.boosters.plus(bulk); + } else { + player.elementary.theory.points = player.elementary.theory.points.plus(getTBGain()) + player.elementary.theory.preons.boosters = player.elementary.theory.preons.boosters.plus(1) + } +} + +// Accelerons + +function unlockAccelerons() { + if (!player.elementary.theory.unl) return + if (!player.elementary.theory.preons.unl) return + if (player.elementary.theory.accelerons.unl) return + if (player.elementary.theory.points.lt(84)) return + if (player.mlt.times.eq(0)) if (!confirm("Are you sure you want to unlock Accelerons? You won't be able to get your Theory Points back!")) return + player.elementary.theory.points = player.elementary.theory.points.sub(84).max(0) + player.elementary.theory.accelerons.unl = true +} + +function getAccelGain() { + if (!player.elementary.theory.accelerons.unl) return new ExpantaNum(0) + let gain = tmp.acc.plus(1).log10().div(1e6).sqrt() + gain = gain.times(TREE_UPGS[12].effect(player.elementary.theory.tree.upgrades[12]||0)) + if (gain.gte(1e6)) gain = gain.cbrt().times(Math.pow(1e6, 2/3)) + if (tmp.elm) gain = gain.times(tmp.elm.theory.speed) + if (hasMltMilestone(19)) { + if (modeActive("extreme")) { + gain = gain.times(Array.from(Array(UNL_STR()).keys()).map(x => getStringEff(x+1)).reduce((a,c) => ExpantaNum.mul(a,c))); + for (let i=1;i<=4;i++) { + let type = ["squark", "slepton", "neutralino", "chargino"][i-1] + gain = gain.times(tmp.elm.theory.ss[type+"Eff"]||1); + } + } + else gain = gain.times(getStringEff(1)); + } + return gain +} + +function getAccelEff() { + if (!player.elementary.theory.accelerons.unl) return new ExpantaNum(1) + let eff = player.elementary.theory.accelerons.amount.plus(1).pow(0.04) + if (eff.gte(2)) eff = eff.logBase(2).plus(1) + return eff +} + +function getMaxDEs() { + if (mltRewardActive(3)) return MAX_DARK_EXPANDERS_MLT_3 + return MAX_DARK_EXPANDERS +} + +function darkExpand() { + if (!player.elementary.theory.accelerons.unl) return + if (player.elementary.theory.accelerons.expanders.gte(getMaxDEs())) return + let cost = (modeActive("extreme")&&EXTREME_DE_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()])?EXTREME_DE_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()]:((modeActive("hikers_dream")&&HD_DE_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()])?HD_DE_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()]:DARK_EXPANDER_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()]); + if (player.elementary.theory.accelerons.amount.lt(cost)) return + player.elementary.theory.accelerons.amount = player.elementary.theory.accelerons.amount.sub(cost) + player.elementary.theory.accelerons.expanders = player.elementary.theory.accelerons.expanders.plus(1) +} + +function buyGluon3(col, max=false) { + if (!hasDE(1)) return + if (player.elementary.bosons.gauge.gluons[col].amount.lt(tmp.elm.bos.gluonCost(col, 3))) return + let bulk = new ExpantaNum(1) + if (max) bulk = tmp.elm.bos.gluonTarg(col, 3).sub(player.elementary.bosons.gauge.gluons[col].upgrades[2]).max(1) + player.elementary.bosons.gauge.gluons[col].amount = player.elementary.bosons.gauge.gluons[col].amount.sub(tmp.elm.bos.gluonCost(col, 3)) + player.elementary.bosons.gauge.gluons[col].upgrades[2] = (player.elementary.bosons.gauge.gluons[col].upgrades[2]||new ExpantaNum(0)).plus(bulk) + player.elementary.theory.points = player.elementary.theory.points.plus(ExpantaNum.mul(10, bulk)) +} + +function hasDE(n) { + if (HCCBA("de")) { + let lim = mltCompleted(3)?MAX_DARK_EXPANDERS_MLT_3:MAX_DARK_EXPANDERS; + if (HCTVal("de").gt(lim-n)) return false; + } + return player.elementary.theory.accelerons.expanders.gte(n)&&player.elementary.theory.accelerons.unl +} + +// Tree Export/Import functions +function exportTree() { + let upgs = player.elementary.theory.tree.upgrades + let parsedUpgs = {} + for (let i=0;i TREE_UPGS[key].cost(new ExpantaNum(i).div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).round()) + let totalCost = costs.reduce((x,y) => ExpantaNum.add(x, y)) + if (tmp.ach[modeActive("extreme+hikers_dream")?143:162].has) totalCost = TREE_UPGS[key].cost(upgs[key].div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).min(totalCost).round() + if (player.elementary.theory.points.gte(totalCost)) { + if (!player.elementary.entropy.upgrades.includes(13)) { + player.elementary.theory.points = player.elementary.theory.points.sub(totalCost).max(0) + player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(totalCost) + } + player.elementary.theory.tree.upgrades[key] = ExpantaNum.min(upgs[key], cap) + } else notifier.warn("You could not afford some of your requested Tree upgrades!") + } + } + } catch(e) { + notifier.error("Invalid tree") + } +} + +// Inflatons +function unlockInflatons() { + if (!player.elementary.theory.unl) return + if (modeActive("extreme+hikers_dream")) { + if (!(player.elementary.foam.unl&&player.elementary.theory.accelerons.unl)) return; + } else if (!(player.elementary.hc.unl&&player.elementary.theory.accelerons.unl)) return; + if (player.elementary.theory.inflatons.unl) return + if (player.elementary.theory.points.lt(1600)) return + if (player.mlt.times.eq(0)) if (!confirm("Are you sure you want to unlock Inflatons? You won't be able to get your Theory Points back!")) return + player.elementary.theory.points = player.elementary.theory.points.sub(1600).max(0) + player.elementary.theory.inflatons.unl = true +} + +function getInflatonState() { + let x = player.elementary.theory.inflatons.amount.plus(1).log10() + if (x.gte(5.5)) x = x.sqrt().times(Math.sqrt(5.5)).plus(5.5).div(2) + if (x.gte(1e6)) return 1 + return -1*Math.cos(x.toNumber()) +} + +function getInflatonGain() { + let gain = player.elementary.theory.inflatons.amount.plus(1).pow(0.6) + gain = gain.times(player.elementary.theory.inflatons.amount.plus(1).pow((tmp.elm.hc.infState+1)/6)) + if (gain.gte(5e4)) gain = gain.times(5e4).sqrt() + if (player.elementary.foam.unl && tmp.elm.qf) gain = gain.times(tmp.elm.qf.boost4) + return gain +} + +function getInflatonEff1() { + let eff = player.elementary.theory.inflatons.amount.plus(1).log10().sqrt().plus(1) + if (player.elementary.entropy.upgrades.includes(20)) eff = eff.times(player.elementary.theory.inflatons.amount.plus(1).pow(0.01)) + return eff +} + +function getInflatonEff2() { + let amt = player.elementary.theory.inflatons.amount + let eff = new ExpantaNum(0) + if (amt.gte(1e3)) eff = eff.plus(1) + if (amt.gte(1e4)) eff = eff.plus(1) + if (amt.gte(1e5)) eff = eff.plus(1) + if (amt.gte(1e6)) eff = eff.plus(1) + if (player.elementary.entropy.upgrades.includes(13)) eff = eff.plus(amt.div(1e6).max(1).log10()) + eff = eff.plus(amt.plus(1).log10().plus(1).log10()) + if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.times(tmp.elm.sky.spinorEff[13]) + return eff.floor() +} + +/* +function getInfatonEff2NextAt(){ + let cur = getInflatonEff2() + if (cur.lt(4)) return new ExpantaNum(1e3).times(ExpantaNum.pow(10, cur)) + //idk lol this function sucks maybe just use an alg +} +*/ + +function getTreeUpgCap(x) { + x = parseInt(x+"") + let cap = new ExpantaNum(TREE_UPGS[x].cap) + if (player.elementary.foam.unl && tmp.elm.qf && QFB17_TARGETS.includes(x)) cap = cap.plus(tmp.elm.qf.boost17) + if (hasMltMilestone(13) && x>=14 && x<=19) cap = cap.plus(5); + return cap; +} diff --git a/js/main/elements.js b/js/main/elements.js index 5d369f8d..105f3505 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1,15 +1,85 @@ +function calcModeAndBalanceName(modes) { + modeName = "" + balanceName = "" + // Naming order: Absurd AAU/NA Easy (or Easy-) Hard/Extreme Dream + if(modes.includes("absurd")) { + modeName += "Absurd "; + balanceName += "absurd_"; + } + if (modes.includes("aau")) { + if(modes.includes("na")) modeName += "AAU/"; + else modeName += "AAU "; + balanceName += "aau_"; + } + if (modes.includes("na")) { + modeName += "NA "; + balanceName += "na_"; + } + if (modes.includes("easy")) { + if (modes.includes("hard")) modeName += "Easy-"; + else modeName += "Easy "; + balanceName += "easy_"; + } + if (modes.includes("hard")) { + if (modes.includes("extreme")) { + modeName += "Extreme "; + balanceName += "extreme_"; + } else { + modeName += "Hard "; + balanceName += "hard_"; + } + } + if (modes.includes("hikers_dream")) { + if(!modes.includes("easy") && !modes.includes("hard")) modeName += "Hikers "; + modeName += "Dream"; + balanceName += "hikers_dream_"; + } + if(balanceName != "") balanceName = balanceName.substring(0,balanceName.length -1); + if(modeName == "") modeName = "Normal"; + return {modeName: modeName, balanceName: balanceName} +} + +function updateModesHTML() { + tmp.el.mcta.setDisplay(player.options.modeComboTableActive); + tmp.el.mctna.setDisplay(!player.options.modeComboTableActive); + + let data = calcModeAndBalanceName(modesSelected); + + tmp.el.selectedMode.setTxt("Selected Mode: "+(data.modeName)); + tmp.el.selectedModeBalancing.setTxt("Balancing: "+ (MODEBALANCES[data.balanceName]?MODEBALANCES[data.balanceName].balancing:"Unknown! Proceed at your own risk.")); +} + function updateOptionsHTML(){ if (player.tab == "options") { - for (let i = 0; i < Object.keys(MODES).length; i++) { - tmp.el[Object.keys(MODES)[i] + "Mode"].setClasses({ - btn: true, - tb: true, - opt: !modesSelected.includes(Object.keys(MODES)[i]), - ob: true, - optSelected: modesSelected.includes(Object.keys(MODES)[i]) - }); - tmp.el[Object.keys(MODES)[i] + "Mode"].setTooltip(MODES[Object.keys(MODES)[i]].desc) + if (player.options.modeComboTableActive) { + let data = MODE_TABLE_DATA; + tmp.el.modeComboCompletions.setTxt("Completions: "+completedModeCombos.length+"/"+Object.keys(MODEBALANCES).length) + for (let r=0;r2)" : ""); // Hiker's Dream - tmp.el.incline.setHTML(modeActive("hikers_dream")?"Current Incline: "+showNum(tmp.hd.incline)+"°, raising Acceleration & Maximum Velocity ^"+showNum(tmp.hd.inclineRed)+", and making Energy loss "+showNum(tmp.hd.inclineRed.pow(getEnergyLossExp()))+"x faster.
    ":"") + let t = "" + if (modeActive("hikers_dream")){ + let start = tmp.hd.incline.gt(89.999) ? "The secant of your incline is: " + showNum(tmp.hd.secant) : "Current Incline: "+showNum(tmp.hd.incline)+"°" + t = start + ((tmp.hd.inclineRed.gt(0)&&tmp.hd.inclineRed.lt(0.001))?(", bringing Acceleration & Maximum Velocity to the "+showNum(tmp.hd.inclineRed.pow(-1))+"th root"):(", raising Acceleration & Maximum Velocity ^"+showNum(tmp.hd.inclineRed)))+", and making Energy loss "+showNum(tmp.hd.inclineRed.pow(getEnergyLossExp()))+"x faster.
    " + } + tmp.el.incline.setHTML(t) tmp.el.quickReset.setDisplay(modeActive("hikers_dream")) - } } @@ -88,12 +167,8 @@ function updateRocketsHTML(){ tmp.el.rocketGain.setTxt(showNum(tmp.rockets.layer.gain)); tmp.el.rocketsAmt.setTxt( showNum(player.rockets) + - " rockets" + - (tmp.ach[95].has && !nerfActive("noRockets") - ? " (+" + showNum(tmp.rockets.layer.gain) + "/sec)" - : hasCollapseMilestone(9) && !nerfActive("noRockets") - ? " (+" + showNum(tmp.rockets.layer.gain.div(100)) + "/sec)" - : "") + " rockets " + + (((tmp.ach[95].has||hasCollapseMilestone(9))&&!nerfActive("noRockets")) ? formatGain(player.rockets, tmp.rockets.layer.gain.div(tmp.ach[95].has?1:100)) : "") ); tmp.el.rocketsEff.setTxt(showNum(getRocketEffect())); @@ -136,21 +211,11 @@ function updateAchievementsHTML(){ function updateRobotsHTML(){ tmp.el.scraps.setTxt( showNum(player.automation.scraps) + - " scraps" + - (" (+" + - showNum( - adjustGen(getScrapGain(), "scraps").times(nerfActive("noTS") ? 1 : tmp.timeSpeed) - ) + - "/sec)") + " scraps " + formatGain(player.automation.scraps, getScrapGain().times(nerfActive("noTS") ? 1 : tmp.timeSpeed), "scraps") ); tmp.el.intAmt.setTxt( showNum(player.automation.intelligence) + - " intelligence" + - (" (+" + - showNum( - adjustGen(getIntelligenceGain(), "intel").times(nerfActive("noTS") ? 1 : tmp.timeSpeed) - ) + - "/sec)") + " intelligence " + formatGain(player.automation.intelligence, getIntelligenceGain().times(nerfActive("noTS") ? 1 : tmp.timeSpeed), "intel") ); for (let i = 0; i < Object.keys(ROBOT_REQS).length; i++) { tmp.el[Object.keys(ROBOT_REQS)[i]].setTxt(tmp.auto[Object.keys(ROBOT_REQS)[i]].btnTxt); @@ -207,16 +272,14 @@ function updateRobotsHTML(){ } function updateAutomationHTML(){ - if (player.tab == "auto") { - updateRobotsHTML() - - // Automators - for (let i = 0; i < Object.keys(AUTOMATORS).length; i++) { - tmp.el["automatorDiv-" + Object.keys(AUTOMATORS)[i]].setDisplay(Object.values(AUTOMATORS)[i]()); - player.automators[Object.keys(AUTOMATORS)[i]] = - tmp.el["automator-" + Object.keys(AUTOMATORS)[i]].isChecked() && Object.values(AUTOMATORS)[i](); - let name = Object.keys(AUTOMATORS)[i] - } + if (player.tab == "auto") updateRobotsHTML() + + // Automators + for (let i = 0; i < Object.keys(AUTOMATORS).length; i++) { + tmp.el["automatorDiv-" + Object.keys(AUTOMATORS)[i]].setDisplay(Object.values(AUTOMATORS)[i]()); + player.automators[Object.keys(AUTOMATORS)[i]] = + tmp.el["automator-" + Object.keys(AUTOMATORS)[i]].isChecked() && Object.values(AUTOMATORS)[i](); + let name = Object.keys(AUTOMATORS)[i] } } @@ -225,10 +288,7 @@ function updateTimeReversalHTML(){ tmp.el.rt.setTxt(tmp.tr.txt); tmp.el.tc.setTxt( showNum(player.tr.cubes) + - " Time Cubes" + - (" (+" + - showNum(adjustGen(getTimeCubeGain(), "tc").times(nerfActive("noTS") ? 1 : tmp.timeSpeed)) + - "/sec)") + " Time Cubes " + formatGain(player.tr.cubes, getTimeCubeGain().times(nerfActive("noTS") ? 1 : tmp.timeSpeed), "tc") ); tmp.el.frf.setTxt(showNum(tmp.tr.eff)); for (let i = 1; i <= TR_UPG_AMT; i++) { @@ -262,12 +322,8 @@ function updateCollpaseHTML(){ tmp.el.cadavers.setHTML( "" + showNum(player.collapse.cadavers) + - " cadavers" + - (tmp.ach[96].has && !nerfActive("noCadavers") - ? " (+" + showNum(tmp.collapse.layer.gain) + "/sec)" - : tmp.inf.upgs.has("2;4") && !nerfActive("noCadavers") - ? " (+" + showNum(tmp.collapse.layer.gain.div(100)) + "/sec)" - : "") + + " cadavers " + + (((tmp.ach[96].has||tmp.inf.upgs.has("2;4"))&&!nerfActive("noCadavers"))?(formatGain(player.collapse.cadavers, tmp.collapse.layer.gain.div(tmp.ach[96].has?1:100))):"")+ "" ); tmp.el.cadaverEff.setTxt(showNum(getCadaverEff())); @@ -279,12 +335,8 @@ function updateCollpaseHTML(){ tmp.el.lifeEssence.setHTML( "" + showNum(player.collapse.lifeEssence) + - " life essence" + - (tmp.ach[97].has && !nerfActive("noLifeEssence") - ? " (+" + showNum(player.collapse.cadavers.times(tmp.collapse.sacEff).max(1)) + "/sec)" - : tmp.inf.upgs.has("5;3") && !nerfActive("noLifeEssence") - ? " (+" + showNum(player.collapse.cadavers.times(tmp.collapse.sacEff).max(1).div(10)) + "/sec)" - : "") + " life essence " + + (((tmp.ach[97].has||tmp.inf.upgs.has("5;3"))&&!nerfActive("noLifeEssence"))?formatGain(player.collapse.lifeEssence, player.collapse.cadavers.times(tmp.collapse.sacEff).max(1).div(tmp.ach[97].has?1:100)):"")+"" ); for (let i = 1; i <= EM_AMT; i++) { let ms = ESSENCE_MILESTONES[i]; @@ -328,8 +380,8 @@ function upadtePathogenHTML(){ tmp.el.pathogensAmt.setHTML( "" + showNum(player.pathogens.amount) + - " Pathogens" + - (" (+" + showNum(adjustGen(tmp.pathogens.gain, "pathogens")) + "/sec)") + + " Pathogens " + + formatGain(player.pathogens.amount, tmp.pathogens.gain, "pathogens") + "" ); upadtePathogenUpgradesHTML() @@ -361,17 +413,17 @@ function updateDarkCircleRssHTML(){ tmp.el.darkMatter.setHTML( "Dark Matter
    Amount: " + showNum(player.dc.matter) + - "
    Gain: +" + - showNum(adjustGen(tmp.dc.dmGain, "dc").times(tmp.dc.flow)) + - "/s
    Effect: You gain " + + "
    Gain: " + + formatGain(player.dc.matter, tmp.dc.dmGain, "dc", false, tmp.dc.flow) + + "
    Effect: You gain " + showNum(tmp.dc.dmEff) + "x as many Rockets." ); tmp.el.darkEnergy.setHTML( "Dark Energy
    Amount: " + showNum(player.dc.energy) + - "
    Gain: +" + - showNum(adjustGen(tmp.dc.deGain, "dc").times(tmp.dc.flow)) + + "
    Gain: " + + formatGain(player.dc.energy, tmp.dc.deGain, "dc", false, tmp.dc.flow) + "/s
    Effect: You gain " + showNum(tmp.dc.deEff) + "x as many Time Cubes." @@ -379,8 +431,8 @@ function updateDarkCircleRssHTML(){ tmp.el.darkFluid.setHTML( "Dark Fluid
    Amount: " + showNum(player.dc.fluid) + - "
    Gain: +" + - showNum(adjustGen(tmp.dc.dfGain, "dc").times(tmp.dc.flow)) + + "
    Gain: " + + formatGain(player.dc.fluid, tmp.dc.dfGain, "dc", false, tmp.dc.flow) + "/s
    Effect: Scaled Rocket Fuel scaling starts " + showNum(tmp.dc.dfEff) + " Rocket Fuel later." @@ -442,7 +494,7 @@ function updateInfinitySubtabHTML(){ tmp.el.knowledgeBase.setTxt(showNum(tmp.inf.knowledgeBase)); tmp.el.nextEndorsement.setTxt(formatDistance(tmp.inf.req)); tmp.el.knowledge.setTxt(showNum(player.inf.knowledge)); - tmp.el.knowledgeGain.setTxt(showNum(adjustGen(tmp.inf.knowledgeGain, "knowledge"))); + tmp.el.knowledgeGain.setTxt(formatGain(player.inf.knowledge, tmp.inf.knowledgeGain, "knowledge")); for (let r = 1; r <= INF_UPGS.rows; r++) { for (let c = 1; c <= INF_UPGS.cols; c++) { let state = ""; @@ -501,9 +553,7 @@ function updateAscensionHTML(){ tmp.el.ascPower.setHTML( "Ascension Power: " + showNum(player.inf.ascension.power) + - " (+" + - showNum(adjustGen(tmp.inf.asc.powerGain, "ascension")) + - "/sec)" + " "+formatGain(player.inf.ascension.power, tmp.inf.asc.powerGain, "ascension") ); tmp.el.perkAccel.setHTML(tmp.elm.pa.active?("Your "+(tmp.elm.pa.state==""?"":(capitalFirst(tmp.elm.pa.state)+" "))+"Perk Accelerator is making Perks be used up "+showNum(tmp.elm.pa.speedBoost)+"x as fast, but in return, your Perks are "+showNum(tmp.elm.pa.boost)+"x as strong."):"") } @@ -527,14 +577,15 @@ function updateNormalStadiumHTML(){ locked: player.inf.stadium.current != "" && !(trapped || active), inf: !(trapped || active || player.inf.stadium.current != "") }); - let showCurrent = STADIUM_REWARDS.effects[name] !== undefined; + let data = mltRewardActive(1)?MLT_1_STADIUM_REWARDS:STADIUM_REWARDS + let showCurrent = data.effects[name] !== undefined; tmp.el[name + "Btm"].setHTML( "Goal: " + formatDistance(tmp.inf.stadium.goal(name)) + "
    Reward: " + - STADIUM_REWARDS[name] + + data[name] + "
    " + - (showCurrent ? "Currently: " + STADIUM_REWARDS.disp[name]() : "") + (showCurrent ? "Currently: " + data.disp[name]() : "") ); } tmp.el.exitStad.setDisplay(player.inf.stadium.current != ""); @@ -615,27 +666,31 @@ function updateAngelsChipsHTML(){ locked: player.inf.pantheon.gems.lt(1) }); tmp.el.chips.setTxt(showNum(player.inf.pantheon.heavenlyChips)); - tmp.el.chipGain.setTxt( - "(+" + showNum(adjustGen(tmp.inf.pantheon.chipGain, "heavenlyChips")) + "/sec)" - ); + tmp.el.chipGain.setTxt(formatGain(player.inf.pantheon.heavenlyChips, tmp.inf.pantheon.chipGain, "heavenlyChips")); tmp.el.chipBoost.setTxt(showNum(tmp.inf.pantheon.chipBoost.sub(1).times(100))); - tmp.el.soulNerf.setTxt(showNum(player.inf.pantheon.demonicSouls.pow(tmp.inf.pantheon.ppe).plus(1))) + let mltr5 = mltRewardActive(5) + tmp.el.soulNerf.setHTML(mltr5?("multiply by "+showNum(player.inf.pantheon.demonicSouls.pow(tmp.inf.pantheon.ppe.times(-1)).plus(1))+""):("divide by "+showNum(player.inf.pantheon.demonicSouls.pow(tmp.inf.pantheon.ppe).plus(1))+"")) tmp.el.souls.setTxt(showNum(player.inf.pantheon.demonicSouls)); - tmp.el.soulGain.setTxt( - "(+" + showNum(adjustGen(tmp.inf.pantheon.soulGain, "demonicSouls")) + "/sec)" - ); + tmp.el.soulGain.setTxt(formatGain(player.inf.pantheon.demonicSouls, tmp.inf.pantheon.soulGain, "demonicSouls")); tmp.el.soulBoost.setTxt(showNum(tmp.inf.pantheon.soulBoost.sub(1).times(100))); - tmp.el.chipNerf.setTxt(showNum(player.inf.pantheon.heavenlyChips.pow(tmp.inf.pantheon.ppe).plus(1))) + tmp.el.chipNerf.setHTML(mltr5?("multiply by "+showNum(player.inf.pantheon.heavenlyChips.pow(tmp.inf.pantheon.ppe.times(-1)).plus(1))+""):("divide by "+showNum(player.inf.pantheon.heavenlyChips.pow(tmp.inf.pantheon.ppe).plus(1))+"")) + tmp.el.phantomDiv.setDisplay(mltr5); + if (mltr5) { + tmp.el.phantoms.setTxt(showNum(tmp.inf.pantheon.phantoms)); + tmp.el.hauntingEnergy.setTxt(showNum(player.inf.pantheon.hauntingEnergy||0)); + tmp.el.hauntingEnergyGain.setTxt(formatGain(player.inf.pantheon.hauntingEnergy, tmp.inf.pantheon.hauntingEnergyGain, "hauntingEnergy")) + tmp.el.hauntingEnergyBoost.setTxt(showNum(tmp.inf.pantheon.hauntingEnergyBoost.sub(1).times(100))); + tmp.el.hauntingEnergyBoost2.setTxt(showNum(tmp.inf.pantheon.hauntingEnergyBoost2)) + } } function updateDerivativeHTML(){ - for (let i = 0; i < DERV.length; i++) { - let name = DERV[i]; + let de = getDervNames(); + for (let i = 0; i < de.length; i++) { + let name = de[i]; tmp.el["dervDiv" + name].setDisplay(tmp.inf.derv.unlocked(name)); tmp.el["derv" + name].setTxt(formatDistance(tmp.inf.derv.amt(name))); - tmp.el["dervgain" + name].setTxt( - "(+" + formatDistance(adjustGen(tmp.inf.derv.gain(name), "derv")) + "/sec)" - ); + tmp.el["dervgain" + name].setTxt(formatGain(tmp.inf.derv.amt(name), tmp.inf.derv.gain(name), "derv", true)); } let dervName = player.inf.derivatives.unlocks.gte(tmp.inf.derv.maxShifts) ? "Boosts" : "Shifts"; tmp.el.dervUnlock.setHTML( @@ -693,10 +748,7 @@ function updateNormalFurnace(){ if (fnTab=="nfn") { tmp.el.coal.setTxt( showNum(player.furnace.coal) + - " Coal" + - (" (+" + - showNum(adjustGen(tmp.fn.gain, "fn").times((nerfActive("noTS")||inFC(5)) ? 1 : tmp.timeSpeed)) + - "/sec)") + " Coal " + formatGain(player.furnace.coal, tmp.fn.gain, "fn") ); tmp.el.coalEff.setTxt(showNum(tmp.fn.eff)); for (let i = 1; i <= 5; i++) { @@ -721,8 +773,9 @@ function updateNormalFurnace(){ tmp.el.blueFlameName.setTxt(getScalingName("bf")) tmp.el.bfEff.setTxt(showNum(ExpantaNum.sub(1, tmp.fn.bfEff).times(100))); tmp.el.furnChalls.setDisplay(player.inf.endorsements.gte(10)) - for (let i=1;i<=5;i++) { - if (i>1) tmp.el["fnc"+i].setDisplay(player.furnChalls.includes(i-1)) + for (let i=1;i<=6;i++) { + if (i==6) tmp.el["fnc"+i].setDisplay(player.elementary.bosons.scalar.higgs.upgrades.includes("6;0;0")&&player.furnChalls.includes(i-1)) + else if (i>1) tmp.el["fnc"+i].setDisplay(player.furnChalls.includes(i-1)) tmp.el["fnc"+i+"goal"].setTxt(showNum(FC_GOAL[i])) tmp.el["fns"+i].setTxt((player.activeFC==i)?(FCEnd()?"Complete":"Exit"):(player.furnChalls.includes(i)?"Finished":"Start")) } @@ -735,11 +788,7 @@ function updateNormalFurnace(){ function updateEnhanceFurnace(){ if (fnTab=="efn") { tmp.el.eCoal.setTxt( - showNum(player.furnace.enhancedCoal) + - " Enhanced Coal" + - (" (+" + - showNum(adjustGen(tmp.fn.enh.gain, "fn")) + - "/sec)") + showNum(player.furnace.enhancedCoal) + " Enhanced Coal " + formatGain(player.furnace.enhancedCoal, tmp.fn.enh.gain, "fn") ); tmp.el.eCoalEff.setTxt(showNum(tmp.fn.enh.eff)); tmp.el.eCoalEff2.setTxt(showNum(tmp.fn.enh.eff2)) @@ -764,6 +813,59 @@ function updateEnhanceFurnace(){ } } +function updateMagma() { + if (fnTab == "magma") { + let req = getMagmaReq(); + tmp.el.magmaSearch.setClasses({ + btn: true, + locked: player.furnace.enhancedCoal.lt(req), + magma: player.furnace.enhancedCoal.gte(req), + }) + tmp.el.magmaReq.setTxt(showNum(req)) + tmp.el.magmaAmt.setTxt(showNum(player.magma.amount)) + tmp.el.magmaEff.setTxt(showNum(tmp.fn.magma.eff.sub(1).times(100))) + let req2 = getMagmaReformReq(); + let req2b = getMagmaReformReq2(); + tmp.el.reformMagma.setClasses({ + btn: true, + locked: player.magma.amount.lt(req2)||player.inf.knowledge.lt(req2b), + magma: player.magma.amount.gte(req2)&&player.inf.knowledge.gte(req2b), + }) + tmp.el.magmaReformReq.setTxt(showNum(req2)); + tmp.el.magmaReformReq2.setTxt(showNum(req2b)); + tmp.el.rMagmaAmt.setTxt(showNum(player.magma.ref)); + tmp.el.rMagmaEff.setHTML(""+showNum(tmp.fn.magma.eff2)+"x"+(player.elementary.theory.tree.unl?(" (boosted by unspent Theory Points"+(player.elementary.theory.depth.gte(6)?(" and Primary String length)"):")")):"")); + } +} + +function updatePlasma() { + if (fnTab == "plasma") { + tmp.el.plasmaExp.setTxt(showNum(tmp.fn.pl.exp)) + tmp.el.plasmaAmt.setTxt(showNum(player.plasma.amount)) + tmp.el.whiteFlameGen.setTxt(formatGain(player.plasma.whiteFlame, tmp.fn.pl.wfGain, "plasma")) + tmp.el.whiteFlameAmt.setTxt(showNum(player.plasma.whiteFlame)) + + let boostReq = getPlasmaBoostReq(); + tmp.el.plasmaBoostBtn.setDisplay(canBuyPlasmaBoost()) + if (canBuyPlasmaBoost()) { + tmp.el.plasmaBoostBtn.setHTML("Unlock a new "+getPlasmaBoostType(player.plasma.boosts.plus(1), true)+" Boost

    Cost: "+showNum(boostReq)+" White Flame.") + tmp.el.plasmaBoostBtn.setClasses({ + btn: true, + plasma: player.plasma.whiteFlame.gte(boostReq), + locked: !player.plasma.whiteFlame.gte(boostReq), + }) + } + let data = PLASMA_BOOSTS; + for (let i=1;i<=data.upgs();i++) { + tmp.el["plB"+i].setDisplay(player.plasma.boosts.gte(i)); + if (player.plasma.boosts.gte(i)) { + let cd = data[i]; + tmp.el["plB"+i+"Curr"].setTxt(cd.effD(tmp.fn.pl.boosts[i])); + } + } + } +} + function updateOverallExtremeModeHTML(){ tmp.el.rankCheapDiv.setDisplay(modeActive('extreme')); if (modeActive("extreme")) { @@ -772,18 +874,25 @@ function updateOverallExtremeModeHTML(){ if (player.tab=="furnace") { updateNormalFurnace() updateEnhanceFurnace() + updateMagma() + updatePlasma() } } } function updateStatisticsHTML(){ if (player.tab == "statistics") { - tmp.el.best.setTxt(formatDistance(player.bestDistance)) - tmp.el.bestV.setTxt(formatDistance(player.bestV)+"/s") - tmp.el.bestA.setHTML(formatDistance(player.bestA)+"/s2") - tmp.el.maxEnd.setTxt(player.bestEnd.eq(0)?"":("Best-Ever Endorsements: "+showNum(player.bestEnd))) - tmp.el.maxEP.setTxt(player.bestEP.eq(0)?"":("Best-Ever Elementary Point gain in one reset: "+showNum(player.bestEP))) - let v = false + updateStatTabs(); + if (statTab == "mainStats") { + tmp.el.best.setTxt(formatDistance(player.bestDistance)) + tmp.el.bestV.setTxt(formatDistance(player.bestV)+"/s") + tmp.el.bestA.setHTML(formatDistance(player.bestA)+"/s2") + tmp.el.maxEnd.setTxt(player.bestEnd.eq(0)?"":("Best-Ever Endorsements: "+showNum(player.bestEnd))) + tmp.el.maxEP.setTxt(player.bestEP.eq(0)?"":("Best-Ever Elementary Point gain in one reset: "+showNum(player.bestEP))) + } + + // Always called because it determines whether the tab button is shown + statScalingsShown = false; for (let i=0;iCost: "+showNum(data.cost)+" Higgs Bosons.") + let extra = HIGGS_UPGS_EXTR_DESCS[name] + let text = data.desc + if (extra != undefined) { + let ac = extra.active() + if (ac) text = extra.desc[ac] + } + tmp.el["higgs"+name].setHTML(text+"
    Cost: "+showNum(data.cost)+" Higgs Bosons.") } tmp.el["higgs1;1;0"].setTooltip("Currently: "+showNum(tmp.elm.bos["higgs_1;1;0"](true))+"x") tmp.el["higgs0;1;1"].setTooltip("Currently: "+showNum(tmp.elm.bos["higgs_0;1;1"](true))+"x") @@ -985,7 +1116,7 @@ function updateSuperSymetryHTML(){ for (let i=0;i<4;i++) { let type = ["squark","slepton","neutralino","chargino"][i] tmp.el[type+"s"].setTxt(showNum(player.elementary.theory.supersymmetry[type+"s"])) - tmp.el[type+"Gain"].setTxt(showNum(adjustGen(tmp.elm.theory.ss[type+"Gain"], "ss"))) + tmp.el[type+"Gain"].setTxt(formatGain(player.elementary.theory.supersymmetry[type+"s"], tmp.elm.theory.ss[type+"Gain"], "ss")) tmp.el[type+"Eff"].setTxt(showNum(tmp.elm.theory.ss[type+"Eff"])) } tmp.el.wavelength.setTxt(formatDistance(tmp.elm.theory.ss.wavelength)) @@ -997,19 +1128,38 @@ function updateTheoryTreeHTML(){ if (thTab=="tree") { tmp.el.treeUnl.setDisplay(!player.elementary.theory.tree.unl) tmp.el.treeDiv.setDisplay(player.elementary.theory.tree.unl) + tmp.el.mainTree.setDisplay(!player.options.tht) + tmp.el.groupTree.setDisplay(player.options.tht) for (let i=1;i<=TREE_AMT;i++) { let bought = tmp.elm.theory.tree.bought(i) - tmp.el["tree"+i].changeStyle("visibility", (TREE_UPGS[i].unl?TREE_UPGS[i].unl():true)?"visible":"hidden") + let pref = player.options.tht?"gTree":"tree" + tmp.el[pref+i].changeStyle("visibility", (TREE_UPGS[i].unl?TREE_UPGS[i].unl():true)?"visible":"hidden") let cap = getTreeUpgCap(i) - tmp.el["tree"+i].setTxt(showNum(bought)+"/"+showNum(cap)) - tmp.el["tree"+i].setTooltip(TREE_UPGS[i].desc+"\n"+(bought.gte(cap)?"":("Cost: "+showNum(TREE_UPGS[i].cost(bought).div(tmp.elm.theory.tree.costReduc).round())+" Theory Points"))+"\nCurrently: "+TREE_UPGS[i].effD(TREE_UPGS[i].effect(ExpantaNum.add(bought, i==7?TREE_UPGS[11].effect(player.elementary.theory.tree.upgrades[11]||0):0)))) - tmp.el["tree"+i].setClasses({tree: true, capped: bought.gte(cap), unl: (!(bought.gte(cap))&&player.elementary.theory.points.gte(TREE_UPGS[i].cost(bought).div(tmp.elm.theory.tree.costReduc).round())), locked: (!(bought.gte(cap))&&!player.elementary.theory.points.gte(TREE_UPGS[i].cost(bought).div(tmp.elm.theory.tree.costReduc).round()))}) + tmp.el[pref+i].setTxt(showNum(bought)+"/"+showNum(cap)) + tmp.el[pref+i].setClasses({tree: true, capped: bought.gte(cap), unl: (!(bought.gte(cap))&&player.elementary.theory.points.gte(TREE_UPGS[i].cost(bought.div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).round())), locked: (!(bought.gte(cap))&&!player.elementary.theory.points.gte(TREE_UPGS[i].cost(bought.div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).round()))}) + } + if (player.options.tht) { + for (let i=1;i<=Object.keys(G_TREE_SECTS).length;i++) { + let unl = G_TREE_SECTS[i]() + tmp.el["gTreeSect"+i].setDisplay(unl) + } } tmp.el.treeRespec.setTxt("Reset your Theory Tree (and Elementary reset) for "+showNum(player.elementary.theory.tree.spent)+" Theory Points back.") tmp.el.ach152Eff.setHTML(tmp.ach[152].has?('"Useless Theories" effect: Upgrades are '+showNum(ach152Eff())+'x cheaper.

    '):"") } } +function updateTheoryTreeHTMLPerSec() { + if (thTab=="tree") { + for (let i=1;i<=TREE_AMT;i++) { + let bought = tmp.elm.theory.tree.bought(i) + let cap = getTreeUpgCap(i) + let pref = player.options.tht?"gTree":"tree" + tmp.el[pref+i].setTooltip(((TREE_UPGS[i].altDesc&&player.options.tht)?TREE_UPGS[i].altDesc:TREE_UPGS[i].desc)+"\n"+(bought.gte(cap)?"":("Cost: "+showNum(TREE_UPGS[i].cost(bought.div(tmp.elm.theory.tree.costScaling)).div(tmp.elm.theory.tree.costReduc).round())+" Theory Points"))+"\nCurrently: "+TREE_UPGS[i].effD(TREE_UPGS[i].effect(ExpantaNum.add(bought, i==7?TREE_UPGS[11].effect(player.elementary.theory.tree.upgrades[11]||0):0)))) + } + } +} + function updateStringsHTML(){ if (thTab=="strings") { tmp.el.stringsUnl.setDisplay(!player.elementary.theory.strings.unl) @@ -1018,7 +1168,7 @@ function updateStringsHTML(){ if (i>1) tmp.el["str"+i].setDisplay(player.elementary.theory.strings.amounts[i-2].gte(STR_REQS[i])&&(UNL_STR()>=i)) tmp.el["str"+i+"amt"].setTxt(formatDistance(player.elementary.theory.strings.amounts[i-1])) tmp.el["str"+i+"eff"].setTxt(showNum(getStringEff(i))) - tmp.el["str"+i+"gain"].setTxt(formatDistance(adjustGen(getStringGain(i), "str"))) + tmp.el["str"+i+"gain"].setTxt(formatGain(player.elementary.theory.strings.amounts[i-1], getStringGain(i), "str", true)) } let lastStr = player.elementary.theory.strings.amounts.findIndex(x => new ExpantaNum(x).eq(0))+1 tmp.el.nextStr.setTxt((lastStr<=1||lastStr>UNL_STR())?"":("Next String unlocks when your "+STR_NAMES[lastStr-1]+" String reaches a length of "+formatDistance(STR_REQS[lastStr]))) @@ -1035,10 +1185,12 @@ function updatePreonsHTML(){ tmp.el.preonsUnl.setDisplay(!player.elementary.theory.preons.unl) tmp.el.preonsDiv.setDisplay(player.elementary.theory.preons.unl) tmp.el.preonAmt.setTxt(showNum(player.elementary.theory.preons.amount)) - tmp.el.preonGain.setTxt(showNum(adjustGen(getPreonGain(), "preons"))) + tmp.el.preonGain.setTxt(formatGain(player.elementary.theory.preons.amount, getPreonGain(), "preons")) tmp.el.theoryBoost.setClasses({btn: true, locked: player.elementary.theory.preons.amount.lt(getTBCost()), th: player.elementary.theory.preons.amount.gte(getTBCost())}) tmp.el.theoryBoost.setHTML("Gain 1 Theoretical Booster (+"+showNum(getTBGain())+" Theory Points)
    Cost: "+showNum(getTBCost())+" Preons") tmp.el.theoryBoosters.setTxt(showNum(player.elementary.theory.preons.boosters)) + let t = player.elementary.theory.preons.boosters + tmp.el.theoryBoostersEff.setTxt(showNum(player.elementary.entropy.upgrades.includes(17)?(ExpantaNum.div(t.pow(2).times(t.plus(1).pow(2)).times(t.pow(2).times(2).plus(t.times(2)).sub(1)), 12).round()):(t.div(2).times(t.plus(1))))) } } @@ -1051,10 +1203,11 @@ function updateAcceleronsHTML(){ tmp.el.accelGain.setTxt(showNum(adjustGen(gain, "accelerons"))) tmp.el.accelerSC.setHTML(gain.gte(1e6)?"(softcapped)":"") let accEff = getAccelEff() - tmp.el.accelEff.setHTML(""+showNum(accEff)+"x later"+(accEff.gte(2)?" (softcapped)":"")) + tmp.el.accelEff.setHTML((hasDE(7)?" & are reducing the Hadron effect interval by ":" by ")+""+showNum(accEff)+"x"+(accEff.gte(2)?" (softcapped)":"")) let next = player.elementary.theory.accelerons.expanders.toNumber()+1 - tmp.el.darkExp.setClasses({btn: true, locked: (player.elementary.theory.accelerons.amount.lt(DARK_EXPANDER_COSTS[next])||next-1>=MAX_DARK_EXPANDERS), th: (!(player.elementary.theory.accelerons.amount.lt(DARK_EXPANDER_COSTS[next])||next-1>=MAX_DARK_EXPANDERS))}) - tmp.el.darkExp.setHTML((next-1>=MAX_DARK_EXPANDERS)?"MAXED":(DARK_EXPANDER_DESCS[next]+"
    Cost: "+showNum(DARK_EXPANDER_COSTS[next])+" Accelerons")) + let cost = (modeActive("extreme")&&EXTREME_DE_COSTS[next])?EXTREME_DE_COSTS[next]:((modeActive("hikers_dream")&&HD_DE_COSTS[next])?HD_DE_COSTS[next]:DARK_EXPANDER_COSTS[next]); + tmp.el.darkExp.setClasses({btn: true, locked: (player.elementary.theory.accelerons.amount.lt(cost)||next-1>=getMaxDEs()), th: (!(player.elementary.theory.accelerons.amount.lt(cost)||next-1>=getMaxDEs()))}) + tmp.el.darkExp.setHTML((next-1>=getMaxDEs())?"MAXED":(DARK_EXPANDER_DESCS[next]+"
    Cost: "+showNum(cost)+" Accelerons")) tmp.el.darkExpAmt.setTxt(showNum(player.elementary.theory.accelerons.expanders)) let past = "" if (next>1) Array.from(Array(next-1), (_, i) => i + 1).forEach(n => past += "DE"+n+": "+DARK_EXPANDER_DESCS[n]+"
    ") @@ -1073,8 +1226,8 @@ function updateInfatonsHTML(){ tmp.el.inflaton1.setTxt(showNum(getInflatonEff1())) let eff2 = getInflatonEff2() tmp.el.inflaton2.setTxt(showNum(eff2)) - tmp.el.inflatonSC.setTxt(tmp.elm.hc.infGain.gte(5e4)?"(softcapped)":"") - tmp.el.inflaton2sc.setTxt(eff2.gte(5)?"(extremely softcapped)":"") + tmp.el.inflatonSC.setTxt(tmp.elm.hc.infGain.gte(5e4)?" (softcapped)":"") + tmp.el.inflaton2sc.setTxt((eff2.gte(5)&&!player.elementary.entropy.upgrades.includes(13))?"(extremely softcapped)":"") } } @@ -1104,8 +1257,8 @@ function updateTheoryverseMainHTML(){ if (elmTab=="theory") { tmp.el.thp.setTxt(showNum(player.elementary.theory.points)) if (thTab=="tv") { - tmp.el.theoriverse.setTxt(HCTVal("tv").gt(-1)?"Trapped in the Theoriverse!":player.elementary.theory.active?("Exit The Theoriverse early for no reward."):("Enter The Theoriverse at Depth "+showNum(player.elementary.theory.depth))) - tmp.el.theoriverse.setTooltip("Entering The Theoriverse does an Elementary reset, and puts you in The Theoriverse, which will make all pre-Elementary resource generation (x^"+showNum(tmp.elm.theory.nerf)+")") + tmp.el.theoriverse.setHTML(HCTVal("tv").gt(-1)?"Trapped in the Theoriverse!":hasMltMilestone(4)?("Theoriverse Depth: "+showNum(player.elementary.theory.depth)+("
    Total TP: "+showNum(tmp.elm.theory.gainMult.times(ExpantaNum.sub(1, ExpantaNum.pow(2, player.elementary.theory.depth))).times(-1)))):(player.elementary.theory.active?("Exit The Theoriverse early for no reward."):("Enter The Theoriverse at Depth "+showNum(player.elementary.theory.depth)))) + tmp.el.theoriverse.setTooltip(hasMltMilestone(4)?("Nerf: x^"+showNum(tmp.elm.theory.nerf)):("Entering The Theoriverse does an Elementary reset, and puts you in The Theoriverse, which will make all pre-Elementary resource generation (x^"+showNum(tmp.elm.theory.nerf)+")")) } updateSuperSymetryHTML() updateTheoryTreeHTML() @@ -1120,21 +1273,42 @@ function updateHadronicChallenges(){ if (elmTab=="hc") { tmp.el.projHadScore.setTxt(showNum(tmp.elm.hc.currScore)) tmp.el.startHC.setTxt((!(!player.elementary.hc.active))?(canCompleteHC()?"Complete Hadronic Challenge!":"Exit Hadronic Challenge early for no reward"):"Start Hadronic Challenge") + tmp.el.startHC.setClasses({btn: true, hc: !tmp.elm.hc.mltMode, mlthc: tmp.elm.hc.mltMode}) tmp.el.bestHadScore.setTxt(showNum(player.elementary.hc.best)) tmp.el.hadrons.setTxt(showNum(player.elementary.hc.hadrons)) - tmp.el.hadronGain.setTxt(showNum(adjustGen(tmp.elm.hc.hadronGain, "hc"))) + tmp.el.hadronGain.setTxt(formatGain(player.elementary.hc.hadrons, tmp.elm.hc.hadronGain, "hc")) tmp.el.hadronEff.setTxt(showNum(player.elementary.hc.claimed)) tmp.el.hadronNext.setTxt(showNum(tmp.elm.hc.next)) tmp.el.hadEffBulk.setTxt(showNum(tmp.elm.hc.hadronBulk)) + tmp.el.hadInterval.setTxt(tmp.elm.hc.hadInterval.lt(1+0.1**(player.options.sf-1))?("Hadronic Intervals per OoM: "+showNum(tmp.elm.hc.hadInterval.log10().pow(-1))):("Hadronic Interval: "+showNum(tmp.elm.hc.hadInterval))) + for (let s=0;s"+showNum(player.spentMotive.plus(player.spentMotiveGens).sub(tmp.hd.totalMotive).plus((player.energyUpgs.includes(24)) ? (tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : new ExpantaNum(0)) : new ExpantaNum(0)).max(0))+" left]"):"") - for (let i=1;i<=26;i++) { + for (let i=1;i<=36;i++) { let cost = getEnergyUpgCost(i) tmp.el["energyUpg"+i].setClasses({ btn: true, @@ -1206,6 +1380,7 @@ function updateOverallElementaryHTML(){ updateTheoryverseMainHTML() updateHadronicChallenges() updateQFHTML() + updateSkyHTML() } } @@ -1219,13 +1394,13 @@ function updateMiscHTML(){ root.style.setProperty("--tb", player.options.theme == "dark" ? "#00968f" : "#03fcf0"); root.style.setProperty("--ach", player.options.theme == "dark" ? "#287d1b" : "#4ceb34"); root.style.setProperty("--rbt", player.options.theme == "dark" ? "#666666" : "#c9c9c9"); - root.style.setProperty("--threeArrows", player.options.theme == "dark" ? 'url("images/threeArrows2.jpg")' : 'url("images/threeArrows.jpg")'); root.style.setProperty("--font", '"'+capitalFirst(player.options.fonts)+'"') + root.style.setProperty("--foamcol", player.options.theme == "dark" ? "#d3e8cc" : "#687364") - tmp.el.mainContainer.setDisplay(showContainer); + tmp.el.mainContainer.setDisplay(showContainer&&player.tab!="mlt"); tmp.el.loading.setDisplay(false) - tmp.el.footer.setDisplay(player.tab == "options" && player.optionsTab !== "saving"); - tmp.el.newsticker.setDisplay(player.options.newst); + tmp.el.footer.setDisplay(player.tab == "options"); + tmp.el.newsticker.changeStyle('visibility', player.options.newst?'visible':'hidden'); tmp.el.hotkeys.setAttr("widetooltip", "R -> Rank Reset\n"+ (modeActive("extreme")?"Shift + C -> Rank Cheapener Reset\n":"")+ @@ -1244,7 +1419,9 @@ function updateMiscHTML(){ (INF_TABS.derivatives()?"Shift + D -> Derivative Shift/Boost\n":"")+ (TABBTN_SHOWN.elementary()?"Shift + E -> Elementary Reset\n":"")+ (ELM_TABS.theory()?"Shift + T -> Toggle Theoriverse\n":"")+ - (TH_TABS.strings()?"S -> Entangled String reset":"") + (TH_TABS.strings()?"S -> Entangled String reset\n":"")+ + (ELM_TABS.sky()?"Shift + S -> Skyrmion reset\n":"")+ + (player.achievements.includes(178)?"M -> Multiverse reset":"") ); } @@ -1268,7 +1445,7 @@ function updateQFHTML() { } for (let x=1;x<=5;x++) if (foamTab=="qf1") { tmp.el["qf"+x+"Amt"].setTxt(showNum(player.elementary.foam.amounts[x-1])) - tmp.el["qf"+x+"Gain"].setTxt(showNum(tmp.elm.qf.gain[x])) + tmp.el["qf"+x+"Gain"].setTxt(formatGain(player.elementary.foam.amounts[x-1], tmp.elm.qf.gain[x], "foam")) if (x>1) tmp.el["qf"+x+"Eff"].setTxt(showNum(tmp.elm.qf.eff[x])) for (let i=1;i<=3;i++) { let cost = getQFBoostCost(x, i) @@ -1279,7 +1456,7 @@ function updateQFHTML() { }) tmp.el["qf"+x+"Cost"+i].setTxt(showNum(cost)) tmp.el["qf"+x+"Bought"+i].setTxt(formatDistance(player.elementary.foam.upgrades[(x-1)*3+(i-1)])) - tmp.el["qf"+x+"Auto"+i].setDisplay(player.elementary.entropy.bestDepth.gte(x+2)) + tmp.el["qf"+x+"Auto"+i].setDisplay(player.elementary.entropy.bestDepth.gte(x+2)||hasMltMilestone(4)) tmp.el["qf"+x+"Auto"+i].setTxt("Auto: "+(player.elementary.foam.autoUnl[(x-1)*3+(i-1)]?"ON":"OFF")) } tmp.el["qf"+x+"NextUnl"].setDisplay(x==5||player.elementary.foam.maxDepth.eq(x)) @@ -1312,7 +1489,8 @@ function updateQFHTML() { tmp.el.nextOmega.setTxt(showNum(getNextOmega())) tmp.el.omegaEff.setTxt(showNum(tmp.elm.entropy.omegaEff)) for (let i=1;i<=ENTROPY_UPGS;i++) { - let cost = ENTROPY_UPG_COSTS[i] + let cost = getEntropyUpgCost(i) + tmp.el["entropy"+i].setDisplay(entropyUpgShown(i)) tmp.el["entropy"+i].setClasses({ btn: true, foamBought: player.elementary.entropy.upgrades.includes(i), @@ -1326,6 +1504,117 @@ function updateQFHTML() { } } +function updateSkyHTML() { + if (elmTab == "sky") { + let nextFieldReq = SKY_FIELD_UPGS_REQS.reduce(function(a,c) { + if (player.elementary.sky.amount.lt(a)) return new ExpantaNum(a); + return ExpantaNum.max(a,c) + }) + if (skyTab == "skyrmions") { + let canReset = canSkyReset() + tmp.el.skyrmionReset.setClasses({ + btn: true, + locked: !canReset, + sky: canReset, + }) + tmp.el.skyrmionGain.setTxt(showNum(canReset?tmp.elm.sky.gain:0)) + tmp.el.skyrmionAmt.setTxt(showNum(player.elementary.sky.amount)) + tmp.el.skyrmionEff.setTxt(showNum(tmp.elm.sky.eff)) + tmp.el.skyrmionEff2.setTxt(showNum(getSkyToPionSpinorGainMult())); + tmp.el.maxBothFields.setDisplay(tmp.ach[178].has) + } else if (skyTab == "pions") { + tmp.el.nextPionUpgs.setTxt(player.elementary.sky.amount.gte(SKY_FIELD_UPGS_REQS[SKY_FIELD_UPGS_REQS.length-1])?"":("More upgrades at "+showNum(nextFieldReq)+" Skyrmions")) + tmp.el.pionAmt.setTxt(showNum(player.elementary.sky.pions.amount)) + tmp.el.pionGain.setTxt(formatGain(player.elementary.sky.pions.amount, tmp.elm.sky.pionGain, "sky")) + for (let id=1;id<=SKY_FIELDS.upgs;id++) { + tmp.el["pionUpg"+id].setClasses({ + hexBtn: true, + locked: player.elementary.sky.pions.amount.lt(getFieldUpgCost("pions", id)), + }) + tmp.el["pionUpg"+id].changeStyle("visibility", player.elementary.sky.amount.gte(SKY_FIELDS[id].req)?"visible":"hidden") + } + tmp.el.pionData.setHTML(pionSel==0?"":("Pion Upgrade &"+GREEK_LETTERS[pionSel]+"; ("+showNum(player.elementary.sky.pions.field[pionSel]||0)+")
    "+SKY_FIELDS[pionSel].pionDesc+"
    Currently: "+SKY_FIELDS[pionSel].desc(tmp.elm.sky.pionEff[pionSel])+"
    Cost: "+showNum(getFieldUpgCost("pions", pionSel))+" Pions")) + tmp.el.maxPion.setDisplay(player.elementary.entropy.upgrades.includes(20)) + } else if (skyTab == "spinors") { + tmp.el.nextSpinorUpgs.setTxt(player.elementary.sky.amount.gte(SKY_FIELD_UPGS_REQS[SKY_FIELD_UPGS_REQS.length-1])?"":("More upgrades at "+showNum(nextFieldReq)+" Skyrmions")) + tmp.el.spinorAmt.setTxt(showNum(player.elementary.sky.spinors.amount)) + tmp.el.spinorGain.setTxt(formatGain(player.elementary.sky.spinors.amount, tmp.elm.sky.spinorGain, "sky")) + for (let id=1;id<=SKY_FIELDS.upgs;id++) { + tmp.el["spinorUpg"+id].setClasses({ + hexBtn: true, + locked: player.elementary.sky.spinors.amount.lt(getFieldUpgCost("spinors", id)), + }) + tmp.el["spinorUpg"+id].changeStyle("visibility", player.elementary.sky.amount.gte(SKY_FIELDS[id].req)?"visible":"hidden") + } + tmp.el.spinorData.setHTML(spinorSel==0?"":("Spinor Upgrade &"+GREEK_LETTERS[spinorSel]+"; ("+showNum(player.elementary.sky.spinors.field[spinorSel]||0)+")
    "+SKY_FIELDS[spinorSel].spinorDesc+"
    Currently: "+SKY_FIELDS[spinorSel].desc(tmp.elm.sky.spinorEff[spinorSel])+"
    Cost: "+showNum(getFieldUpgCost("spinors", spinorSel))+" Spinors")) + tmp.el.maxSpinor.setDisplay(player.elementary.entropy.upgrades.includes(20)) + } + } +} + +function updateOverallMultiverseHTML() { + tmp.el.multiversestabbtn.setDisplay(player.mlt.times.gt(0)) + tmp.el.mltContainer.setDisplay(player.tab=="mlt") + tmp.el.mltContainer.setClasses({first: player.mlt.times.lte(1)&&player.distance.eq(0)}) + tmp.el.mltReset.setDisplay(tmp.mlt.can&&(!player.options.hideMltBtn||player.mlt.times.eq(0))); + tmp.el.mltReset.setClasses({ btn: true, locked: !tmp.mlt.can, mlt: tmp.mlt.can }); + if (tmp.mlt.can&&(!player.options.hideMltBtn||player.mlt.times.eq(0))) { + tmp.el.mltReset.setHTML( + (player.mlt.times.eq(0)?("You have travelled across the entire multiverse, you must move on."):("Obliterate the multiverse to create " + + showNum(tmp.mlt.layer.gain) + + " Multiversal Energy.")) + ); + } + if (player.tab == "mlt") { + tmp.el.mltEnergy.setTxt(showNum(player.mlt.energy)); + tmp.el.totalME.setTxt(showNum(player.mlt.totalEnergy)); + tmp.el.mltTimes.setTxt(showNum(player.mlt.times)); + tmp.el.mltReset2.setDisplay(tmp.mlt.can&&player.options.hideMltBtn); + tmp.el.mltReset2.setClasses({ btn: true, locked: !tmp.mlt.can, mlt: tmp.mlt.can }); + if (tmp.mlt.can&&player.options.hideMltBtn) { + tmp.el.mltReset2.setHTML( + (player.mlt.times.eq(0)?("You have travelled across the entire multiverse, you must move on."):("Obliterate the multiverse to create " + + showNum(tmp.mlt.layer.gain) + + " Multiversal Energy.")) + ); + } + + if (mltTab == "mltMap") { + for (let m=1;m<=MULTIVERSES;m++) { + tmp.el["mltmap"+m].setClasses({innerMltOrbit: true, mltComp: player.mlt.highestCompleted>=m}) + tmp.el["mltmap"+m].setDisplay(player.mlt.highestCompleted>=m-1) + } + tmp.el.mltData.changeStyle("visibility", mltSelected!="NONE"?"visible":"hidden"); + if (mltSelected!="NONE") { + tmp.el.mltDataTxt.setHTML(getMltDisplay(mltSelected)); + tmp.el.mltStart.setDisplay(mltUnlocked(mltSelected)); + tmp.el.mltStart.setTxt((player.mlt.active==mltSelected)?"Resume this Multiverse":"Enter the Multiverse") + tmp.el.mltUnl.setDisplay(player.mlt.highestUnlocked0) + if (player.mlt.highestUnlocked0) { + tmp.el.mltUnl.setClasses({btn: true, locked: player.mlt.energy.lt(MLT_DATA[mltSelected].req), mlt: player.mlt.energy.gte(MLT_DATA[mltSelected].req)}) + } + } + } else if (mltTab == "mltMilestones") { + for (let r=1;r<=MLT_MILESTONE_NUM;r++) { + let has = hasMltMilestone(r); + for (let i=1;i<=2;i++) tmp.el["mltMil"+r+String(i)].changeStyle("background", has?"rgba(79, 240, 109, 0.4)":"none") + tmp.el["mltMil"+r+"desc"].setHTML(((modeActive("hikers_dream")&&MLT_MILESTONES[r-1].hdDesc)?MLT_MILESTONES[r-1].hdDesc:((modeActive("extreme")&&MLT_MILESTONES[r-1].extremeDesc)?MLT_MILESTONES[r-1].extremeDesc:MLT_MILESTONES[r-1].desc))); + if (tmp.el["mltMil"+r+"effDesc"]) tmp.el["mltMil"+r+"effDesc"].setHTML(MLT_MILESTONES[r-1].effectDesc()) + } + } else if (mltTab == "quilts") { + for (let i=1;i<=3;i++) { + tmp.el["quilt"+i+"Strength"].setTxt(showNum(tmp.mlt.quilts[i].strength.times(100))) + tmp.el["quilt"+i+"Eff"].setTxt(showNum(i==1?tmp.mlt.quilts[i].eff:tmp.mlt.quilts[i].eff.sub(1).times(100))) + tmp.el["quilt"+i+"Eff2"].setTxt(showNum(tmp.mlt.quilts[i].eff2)) + tmp.el["quiltUpg"+i].setClasses({btn: true, locked: player.mlt.energy.lt(tmp.mlt.quilts[i].upgCost), mlt: player.mlt.energy.gte(tmp.mlt.quilts[i].upgCost)}) + tmp.el["quiltUpg"+i].setHTML("Energize this Quilt by "+showNum(tmp.mlt.quilts[i].upgPow.times(10))+"%
    Currently: +"+showNum(tmp.mlt.quilts[i].upgEff.times(100))+"%
    Cost: "+showNum(tmp.mlt.quilts[i].upgCost)+" ME") + } + tmp.el.quilt2Eff2Desc.setTxt(hasMltMilestone(6)?", Pion gain, & Spinor gain":"") + tmp.el.quilt3sc.setTxt(tmp.mlt.quilts[3].eff.gte(tmp.mlt.quilts[3].scStart)?" (softcapped)":"") + } + } +} + function updateHTML() { updateOptionsHTML() updateMainHTML() @@ -1342,8 +1631,13 @@ function updateHTML() { updateStatisticsHTML() updateOverallElementaryHTML() updateOverallEnergyHTML() + updateOverallMultiverseHTML() updateMiscHTML() // Features tmp.el.nextFeature.setTxt(tmp.nf === "none" ? "All Features Unlocked!" : tmp.features[tmp.nf].desc); } + +function updateHTMLPerSec() { + if (player.tab=="elementary"&&elmTab=="theory") updateTheoryTreeHTMLPerSec() +} \ No newline at end of file diff --git a/js/main/elm.js b/js/main/elm.js deleted file mode 100644 index 742635e4..00000000 --- a/js/main/elm.js +++ /dev/null @@ -1,1524 +0,0 @@ -function setElementaryResetFunction(){ - if (!tmp.elm.onReset) tmp.elm.onReset = function (prev) { - player.elementary.time = new ExpantaNum(0); - - // Reset Quarks, Leptons, & Gauge Boson sub-resources - player.elementary.fermions.quarks.amount = new ExpantaNum(0); - player.elementary.fermions.leptons.amount = new ExpantaNum(0); - player.elementary.bosons.gauge = { - amount: new ExpantaNum(0), - force: new ExpantaNum(0), - photons: { - amount: new ExpantaNum(0), - upgrades: player.elementary.bosons.gauge.photons.upgrades - }, - w: new ExpantaNum(0), - z: new ExpantaNum(0), - gluons: { - r: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.r.upgrades }, - g: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.g.upgrades }, - b: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.b.upgrades }, - ar: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.ar.upgrades }, - ag: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.ag.upgrades }, - ab: { amount: new ExpantaNum(0), upgrades: player.elementary.bosons.gauge.gluons.ab.upgrades } - }, - gravitons: new ExpantaNum(0) - }; - player.elementary.bosons.scalar.amount = new ExpantaNum(0); - player.elementary.bosons.scalar.higgs.amount = new ExpantaNum(0); - - // Keep stuff on Elementary reset - if (tmp.elm.bos.hasHiggs("0;0;0")) { - player.tr.upgrades = prev.tr.upgrades - player.automation.unl = true - } - if (tmp.elm.bos.hasHiggs("0;0;1")) { - player.inf.endorsements = new ExpantaNum(10) - player.inf.unl = true - } - if (tmp.elm.bos.hasHiggs("3;0;0")) player.inf.stadium.completions = prev.inf.stadium.completions - if (tmp.elm.bos.hasHiggs("1;2;0")) player.inf.pantheon.purge.power = prev.inf.pantheon.purge.power - if (player.elementary.times.gte(3)) { - player.pathogens.unl = true - player.dc.unl = true - } - for (let i=0;i x != "easy" && x != "hard" && x != "extreme" && x != "hikers_dream") - }; -} - -function updateElementaryLayer() { - tmp.elm.can = - player.rockets.gte(LAYER_REQS.elementary[0][1]) && - player.collapse.cadavers.gte(LAYER_REQS.elementary[1][1]) && - player.inf.endorsements.gte(LAYER_REQS.elementary[2][1]); - tmp.elm.softcap = new ExpantaNum(4000) - if (!tmp.elm.gain) tmp.elm.gain = (function () { - if (!tmp.elm.can) return new ExpantaNum(0); - let f1 = player.rockets.max(1).log10().div(LAYER_REQS.elementary[0][1].log10()).sqrt(); - let f2 = player.collapse.cadavers.max(1).log10().div(LAYER_REQS.elementary[1][1].log10()); - let f3 = ExpantaNum.pow(2, player.inf.endorsements.div(LAYER_REQS.elementary[2][1]).sub(1)); - let gain = f1.times(f2).times(f3); - gain = gain.times(tmp.higgs110?tmp.higgs110:1) - gain = gain.times(tmp.higgs300?tmp.higgs300:1) - gain = gain.times(tmp.lu4?tmp.lu4:1) - let exp = new ExpantaNum(1/4) - if (hasDE(5) && (player.elementary.theory.tree.upgrades[20]||new ExpantaNum(0)).gte(1)) exp = exp.times(2) - if (gain.gte(tmp.elm.softcap)) gain = gain.pow(exp).times(ExpantaNum.pow(tmp.elm.softcap, ExpantaNum.sub(1, exp))) - if (player.elementary.foam.unl && tmp.elm.qf) gain = gain.times(tmp.elm.qf.boost12) // not affected by softcap hehe - return gain.floor(); - }); - tmp.elm.layer = new Layer("elementary", tmp.elm.can, "multi-res", true, "elm"); - if (!tmp.elm.doGain) tmp.elm.doGain = function (auto=false) { - // Gains - if (player.options.elc && !auto) { - if (!confirm("Are you sure you want to do this? "+((modeActive("easy")||modeActive("hard")||modeActive("hikers_dream"))?"You will convert out of this mode because it has ended!":"It will take some time for you to get back here!"))) return "NO"; - if (modeActive("easy")||modeActive("hard")||modeActive("hikers_dream")) if (!confirm("THIS WILL SET YOU IN NORMAL MODE AND YOU WILL LOSE YOUR SAVE IN THESE MODES, ARE YOU ABSOLUTELY SURE YOU WANT TO DO THIS????")) return "NO"; - if (modeActive("easy")||modeActive("hard")||modeActive("hikers_dream")) if (!confirm("THIS IS YOUR LAST CHANCE!! YOU WILL LOSE ALL YOUR EASY, HARD, EXTREME, OR HIKER'S DREAM MODE PROGRESS IF YOU CONTINUE!")) return "NO"; - } - if (player.elementary.theory.active) { - player.elementary.theory.points = player.elementary.theory.points.plus(tmp.thGain?tmp.thGain:new ExpantaNum(0)) - player.elementary.theory.depth = player.elementary.theory.depth.plus(1) - player.elementary.theory.active = false - } else { - player.bestEP = player.bestEP.max(tmp.elm.layer.gain) - player.elementary.particles = player.elementary.particles.plus(tmp.elm.layer.gain); - } - player.elementary.times = player.elementary.times.plus(getElementariesGained()); - - // Achievement Rewards - if (player.inf.derivatives.unlocks.lte(tmp.inf.derv.maxShifts)) tmp.ach[137].grant() - }; - setElementaryResetFunction() -} - -function setTempElementaryStuff() { - tmp.psiEff = tmp.elm.ferm.leptonR("psi"); - tmp.z1 = tmp.elm.bos.z1; - tmp.glu2 = tmp.elm.bos.gluon2total; - tmp.gravEff = tmp.elm.bos.gravEff; - tmp.higgs110 = tmp.elm.bos["higgs_1;1;0"]() - tmp.higgs011 = tmp.elm.bos["higgs_0;1;1"]() - tmp.higgs300 = tmp.elm.bos["higgs_3;0;0"]() - tmp.higgs130 = tmp.elm.bos["higgs_1;3;0"]() - tmp.higgs031 = tmp.elm.bos["higgs_0;3;1"]() - tmp.inf510 = tmp.inf.upgs.has("5;10") - tmp.lu3 = tmp.elm.bos.photonEff(3) - tmp.lu4 = tmp.elm.bos.photonEff(4) - tmp.thGain = tmp.elm.theory.gain - tmp.sqEff = tmp.elm.theory.ss.squarkEff - tmp.slEff = tmp.elm.theory.ss.sleptonEff - tmp.neuEff = tmp.elm.theory.ss.neutralinoEff - tmp.chEff = tmp.elm.theory.ss.charginoEff - tmp.hh410 = tmp.elm.bos.hasHiggs("4;1;0") -} - -function updateElementaryTabs() { - if (!tmp.elm.updateTabs) tmp.elm.updateTabs = function () { - let tabs = Element.allFromClass("elmtab"); - for (let i = 0; i < tabs.length; i++) { - tabs[i].setDisplay(elmTab == tabs[i].id); - new Element(tabs[i].id + "tabbtn").setDisplay(ELM_TABS[tabs[i].id]()); - } - }; - if (!tmp.elm.showTab) tmp.elm.showTab = function (name) { - if (elmTab == name) return; - elmTab = name; - tmp.elm.updateTabs(); - }; - tmp.elm.updateTabs(); -} - -function updateTempQuarks() { - tmp.elm.ferm.quarkGain = player.elementary.fermions.amount - .times(player.inf.endorsements.plus(1).sqrt()) - .times((tmp.psiEff ? tmp.psiEff : new ExpantaNum(0)).max(1)); - if (tmp.glu2) tmp.elm.ferm.quarkGain = tmp.elm.ferm.quarkGain.times(tmp.glu2.max(1)); - if (tmp.higgs031) tmp.elm.ferm.quarkGain = tmp.elm.ferm.quarkGain.times(tmp.higgs031) - if (player.elementary.theory.supersymmetry.unl) tmp.elm.ferm.quarkGain = tmp.elm.ferm.quarkGain.times(tmp.sqEff||1) - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.ferm.quarkGain = tmp.elm.ferm.quarkGain.times(tmp.elm.qf.boost2) - tmp.elm.ferm.quarkRewards = new ExpantaNum(player.elementary.fermions.quarks.amount).max(1).logBase(50).floor(); - if (tmp.elm.ferm.quarkRewards.gte(10)) tmp.elm.ferm.quarkRewards = tmp.elm.ferm.quarkRewards.sqrt().times(Math.sqrt(10)) - if (!tmp.elm.ferm.quarkName) tmp.elm.ferm.quarkName = function (noExp = false) { - let name = QUARK_NAMES[player.elementary.fermions.quarks.type - 1]; - let stacks = tmp.elm.ferm.quarkRewards - .sub(player.elementary.fermions.quarks.type) - .div(QUARK_NAMES.length) - .plus(1) - .ceil() - .max(0); - return capitalFirst(name) + (noExp ? "" : stacks.gt(1) ? "" + showNum(stacks) + "" : ""); - }; - tmp.elm.ferm.quarkEff = function (name) { - let qks = player.elementary.fermions.quarks.amount.max(0); - let stacks = tmp.elm.ferm.quarkRewards - .sub(QUARK_NAMES.indexOf(name) + 1) - .div(QUARK_NAMES.length) - .plus(1) - .ceil() - .max(0); - if (stacks.gte(8)) stacks = stacks.sqrt().times(Math.sqrt(8)); - if (name == "up") return qks.plus(1).pow(ExpantaNum.mul(5, stacks)); - else if (name == "down") return qks.plus(1).pow(ExpantaNum.mul(Math.sqrt(2), stacks.sqrt())); - else if (name == "charm") return qks.plus(1).pow(ExpantaNum.mul(0.1, stacks.cbrt())); - else if (name == "strange") - return player.elementary.fermions.amount - .plus(1) - .times(qks.plus(1).sqrt().log10().plus(1)) - .pow(ExpantaNum.mul(0.2, stacks.sqrt())) - .times(qks.eq(0) ? 0 : 1) - .plus(1); - else if (name == "top") - return ExpantaNum.pow(ExpantaNum.mul(2, qks.plus(1).log10().div(100).plus(1)), stacks.pow(0.8)) - .times(qks.eq(0) ? 0 : 1) - .plus(1); - else if (name == "bottom") - return ExpantaNum.pow(ExpantaNum.mul(0.4, qks.plus(1).log10()).plus(1), stacks.plus(1)); - }; - if (!tmp.elm.ferm.quarkR) tmp.elm.ferm.quarkR = function (name) { - if ((name == QUARK_NAMES[player.elementary.fermions.quarks.type - 1]) || ExpantaNum.gte(player.elementary.theory.tree.upgrades[32]||0, 1)) return tmp.elm.ferm.quarkEff(name); - else return new ExpantaNum(1); - }; - if (!tmp.elm.ferm.quarkDesc) tmp.elm.ferm.quarkDesc = function (name) { - let desc = QUARK_DESCS[name] + " "; - desc += "Currently: " + showNum(tmp.elm.ferm.quarkEff(name)) + "x"; - return desc; - }; - if (!tmp.elm.ferm.changeQuark) tmp.elm.ferm.changeQuark = function () { - player.elementary.fermions.quarks.type = (player.elementary.fermions.quarks.type % 6) + 1; - }; -} - -function updateTempLeptons() { - tmp.elm.ferm.leptonGain = player.elementary.fermions.amount - .times(tmp.inf.pantheon.totalGems.plus(1)) - .div(2.5) - .times(tmp.elm.ferm.quarkR("top").max(1)) - .max(0); - if (tmp.glu2) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.glu2.max(1)); - if (tmp.higgs031) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.higgs031.max(1)); - if (player.elementary.theory.supersymmetry.unl) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.slEff||1) - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.ferm.leptonGain = tmp.elm.ferm.leptonGain.times(tmp.elm.qf.boost2) - tmp.elm.ferm.leptonRewards = new ExpantaNum(player.elementary.fermions.leptons.amount).max(1).logBase(100).floor(); - if (tmp.elm.ferm.leptonRewards.gte(7)) tmp.elm.ferm.leptonRewards = tmp.elm.ferm.leptonRewards.sqrt().times(Math.sqrt(7)) - if (!tmp.elm.ferm.leptonName) tmp.elm.ferm.leptonName = function (noExp = false) { - let name = LEPTON_NAMES[player.elementary.fermions.leptons.type - 1]; - let stacks = tmp.elm.ferm.leptonRewards - .sub(player.elementary.fermions.leptons.type) - .div(LEPTON_NAMES.length) - .plus(1) - .ceil() - .max(0); - return capitalFirst(name) + (noExp ? "" : stacks.gt(1) ? "" + showNum(stacks) + "" : ""); - }; - tmp.elm.ferm.leptonEff = function (name) { - let lpts = player.elementary.fermions.leptons.amount; - let stacks = tmp.elm.ferm.leptonRewards - .sub(LEPTON_NAMES.indexOf(name) + 1) - .div(LEPTON_NAMES.length) - .plus(1) - .ceil() - .max(0); - if (stacks.gte(8)) stacks = stacks.sqrt().times(Math.sqrt(8)); - if (name == "electron") - return lpts.max(0) - .plus(1) - .times(10) - .slog(10) - .max(1) - .pow(ExpantaNum.mul(0.1, stacks.plus(1).log10().plus(1))) - .sub(1) - .div(10) - .max(0) - .plus(1); - else if (name == "muon") return lpts.times(ExpantaNum.pow(2.5, stacks)).plus(1).times(10).slog(10).sqrt().max(1); - else if (name == "tau") - return ExpantaNum.pow( - player.inf.knowledge.max(0).plus(1).log10().plus(1).log10().plus(1), - lpts.max(0).times(ExpantaNum.pow(2.5, stacks)).plus(1).times(10).slog(10).div(5).max(0.2) - ).min(lpts.plus(1)); - else if (name == "netrion") - return lpts.max(0).times(ExpantaNum.pow(2, stacks)).plus(1).times(10).slog(10).max(1).sub(1).div(100).max(0).plus(1); - else if (name == "vibrino") - return lpts.max(0).times(ExpantaNum.pow(1.4, stacks)).plus(1).times(16).slog(16).max(1).sub(1).div(250).max(0).plus(1); - else if (name == "psi") return lpts.max(0).plus(1).log10().plus(1).pow(stacks.plus(0.5)).max(1); - }; - if (!tmp.elm.ferm.leptonR) tmp.elm.ferm.leptonR = function (name) { - if ((name == LEPTON_NAMES[player.elementary.fermions.leptons.type - 1])||ExpantaNum.gte(player.elementary.theory.tree.upgrades[32]||0, 1)) return tmp.elm.ferm.leptonEff(name); - else return new ExpantaNum(1); - }; - if (!tmp.elm.ferm.leptonDesc) tmp.elm.ferm.leptonDesc = function (name) { - let desc = LEPTON_DESCS[name] + " Currently: "; - let eff = tmp.elm.ferm.leptonEff(name); - if (name == "electron" || name == "netrion" || name == "vibrino") desc += "+" + showNum(eff.sub(1).times(100)) + "%"; - else if (name == "muon") desc += "^" + showNum(eff); - else desc += showNum(eff) + "x"; - return desc; - }; - if (!tmp.elm.ferm.changeLepton) tmp.elm.ferm.changeLepton = function () { - player.elementary.fermions.leptons.type = (player.elementary.fermions.leptons.type % 6) + 1; - }; -} - -function updateTempFermions() { - if (!tmp.elm.ferm) tmp.elm.ferm = {}; - if (!tmp.elm.ferm.transfer1) tmp.elm.ferm.transfer1 = function () { - if (player.elementary.particles.lt(1)) return; - player.elementary.particles = player.elementary.particles.sub(1); - player.elementary.fermions.amount = player.elementary.fermions.amount.plus(1); - }; - if (!tmp.elm.ferm.transfer) tmp.elm.ferm.transfer = function (ratio) { - if (player.elementary.particles.times(ratio).floor().lt(1)) return; - let toSub = player.elementary.particles.times(ratio).floor(); - player.elementary.particles = player.elementary.particles.sub(toSub); - player.elementary.fermions.amount = player.elementary.fermions.amount.plus(toSub); - }; - - updateTempQuarks(); - updateTempLeptons(); -} - -function updateGluonTabs() { - if (!tmp.elm.bos.updateGluonTabs) tmp.elm.bos.updateGluonTabs = function () { - let tabs = Element.allFromClass("gluontab"); - for (let i = 0; i < tabs.length; i++) tabs[i].setDisplay(gluonTab == tabs[i].id); - }; - if (!tmp.elm.bos.showGluonTab) tmp.elm.bos.showGluonTab = function (name) { - if (gluonTab == name) return; - gluonTab = name; - tmp.elm.bos.updateGluonTabs(); - }; - tmp.elm.bos.updateGluonTabs(); -} - -function updateTempPhotons(gaugeSpeed) { - tmp.elm.bos.photonGain = gaugeSpeed; - if (tmp.lu3) tmp.elm.bos.photonGain = tmp.elm.bos.photonGain.times(tmp.lu3.max(1)) - if (player.elementary.theory.supersymmetry.unl) tmp.elm.bos.photonGain = tmp.elm.bos.photonGain.times(tmp.chEff||1) - tmp.elm.bos.photonCost = { - 1: ExpantaNum.pow(5, player.elementary.bosons.gauge.photons.upgrades[0].pow(2)).times(25), - 2: ExpantaNum.pow(4, player.elementary.bosons.gauge.photons.upgrades[1].pow(2)).times(40), - 3: ExpantaNum.pow(10, player.elementary.bosons.gauge.photons.upgrades[2]).times(1e4), - 4: ExpantaNum.pow(2, player.elementary.bosons.gauge.photons.upgrades[3].pow(1.1).times(ExpantaNum.pow(1.01, player.elementary.bosons.gauge.photons.upgrades[3]))).times(6e4), - }; - for (let i=1;i<=4;i++) { - if (scalingActive("photons", player.elementary.bosons.gauge.photons.upgrades[i-1], "scaled")) { - let power = getScalingPower("scaled", "photons") - let exp = ExpantaNum.pow(2, power) - tmp.elm.bos.photonCost[i] = PH_CST_SCLD[i](exp, getScalingStart("scaled", "photons")) - } - } - if (!tmp.elm.bos.photonEff) tmp.elm.bos.photonEff = function (x) { - let bought = player.elementary.bosons.gauge.photons.upgrades[x - 1]; - if (player.elementary.times.lt(1)) bought = new ExpantaNum(0); - if (x == 1) return ExpantaNum.pow(3, bought); - if (x == 2) return ExpantaNum.pow(1.5, bought); - if (x == 3||x == 4) return ExpantaNum.pow(2, bought); - }; - if (!tmp.elm.bos.buyLU) tmp.elm.bos.buyLU = function (x, max=false) { - if (new ExpantaNum(player.elementary.bosons.gauge.photons.amount).lt(tmp.elm.bos.photonCost[x])) return; - let target; - if (max) { - let amt = player.elementary.bosons.gauge.photons.amount - switch(x) { - case 1: - target = amt.div(25).max(1).logBase(5).sqrt().plus(1).floor(); - if (scalingActive("photons", target, "scaled")) { - let power = getScalingPower("scaled", "photons") - let exp = ExpantaNum.pow(2, power) - let s = getScalingStart("scaled", "photons") - target = amt.div(25).max(1).logBase(5).sqrt().times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() - } - break; - case 2: - target = amt.div(40).max(1).logBase(4).sqrt().plus(1).floor(); - if (scalingActive("photons", target, "scaled")) { - let power = getScalingPower("scaled", "photons") - let exp = ExpantaNum.pow(2, power) - let s = getScalingStart("scaled", "photons") - target = amt.div(40).max(1).logBase(4).sqrt().times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() - } - break; - case 3: - target = amt.div(1e4).max(1).log10().plus(1).floor(); - if (scalingActive("photons", target, "scaled")) { - let power = getScalingPower("scaled", "photons") - let exp = ExpantaNum.pow(2, power) - let s = getScalingStart("scaled", "photons") - target = amt.div(1e4).max(1).log10().times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() - } - break; - case 4: - target = ExpantaNum.mul(110.549, ExpantaNum.lambertw(ExpantaNum.mul(0.00904576, ExpantaNum.mul(1.4427, amt.times(0.000533333333333).max(1).logBase(Math.E).sub(5)).pow(1.1)))).plus(1).floor() - if (scalingActive("photons", target, "scaled")) { - let power = getScalingPower("scaled", "photons") - let exp = ExpantaNum.pow(2, power) - let s = getScalingStart("scaled", "photons") - target = ExpantaNum.mul(110.549, ExpantaNum.lambertw(ExpantaNum.mul(0.00904576, ExpantaNum.mul(1.4427, amt.times(0.000533333333333).max(1).logBase(Math.E).sub(5)).pow(1.1)))).times(s.pow(exp.sub(1))).pow(exp.pow(-1)).plus(1).floor() - } - break; - } - } - player.elementary.bosons.gauge.photons.amount = new ExpantaNum( - player.elementary.bosons.gauge.photons.amount - ).sub(tmp.elm.bos.photonCost[x]); - if (max) player.elementary.bosons.gauge.photons.upgrades[x - 1] = new ExpantaNum(player.elementary.bosons.gauge.photons.upgrades[x - 1]).max(target) - else player.elementary.bosons.gauge.photons.upgrades[x - 1] = new ExpantaNum(player.elementary.bosons.gauge.photons.upgrades[x - 1]).plus(1); - }; -} - -function updateTempWZB(gaugeSpeed) { - tmp.elm.bos.wg = gaugeSpeed.times(0.4).times(tmp.z1 || 1); - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.bos.wg = tmp.elm.bos.wg.times(tmp.elm.qf.boost19) - tmp.elm.bos.w1 = player.elementary.bosons.gauge.w.plus(1).log10().div(10).plus(1); - if (player.inf.upgrades.includes("7;10")) tmp.elm.bos.w1 = player.elementary.bosons.gauge.w.plus(1).pow(0.25).max(tmp.elm.bos.w1) - tmp.elm.bos.w2 = player.elementary.bosons.gauge.w.plus(1).log10().sqrt().plus(1); - tmp.elm.bos.zg = gaugeSpeed.times(0.1).times(tmp.elm.bos.w1); - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.bos.zg = tmp.elm.bos.zg.times(tmp.elm.qf.boost19) - tmp.elm.bos.z1 = player.elementary.bosons.gauge.z.plus(1).pow(0.04); - if (tmp.elm.bos.z1.gte(1.4)) tmp.elm.bos.z1 = tmp.elm.bos.z1.logBase(1.4).times(1.4).min(tmp.elm.bos.z1) - tmp.elm.bos.z2 = player.elementary.bosons.gauge.z.plus(1).pow(2); -} - -function updateTempGluons(gaugeSpeed) { - if (!tmp.elm.bos.updateTabs) tmp.elm.bos.updateTabs = function () { - let tabs = Element.allFromClass("bostab"); - for (let i = 0; i < tabs.length; i++) tabs[i].setDisplay(bosTab == tabs[i].id); - }; - if (!tmp.elm.bos.showTab) tmp.elm.bos.showTab = function (name) { - if (bosTab == name) return; - bosTab = name; - tmp.elm.bos.updateTabs(); - }; - tmp.elm.bos.updateTabs(); - if (!tmp.elm.bos.gluonEff) tmp.elm.bos.gluonEff = function (col, x) { - let bought = player.elementary.bosons.gauge.gluons[col].upgrades[x - 1]||new ExpantaNum(0); - if (x == 1) return ExpantaNum.pow(2, bought); - else if (x==2) return ExpantaNum.pow(1.1, bought); - else return bought.times(10) - }; - tmp.elm.bos.rg = gaugeSpeed.div(2.5).times(tmp.elm.bos.gluonEff("ar", 1)).times(tmp.elm.bos.photonEff(3).max(1)); - tmp.elm.bos.gg = gaugeSpeed.div(2.6).times(tmp.elm.bos.gluonEff("ag", 1)).times(tmp.elm.bos.photonEff(3).max(1)); - tmp.elm.bos.bg = gaugeSpeed.div(2.4).times(tmp.elm.bos.gluonEff("ab", 1)).times(tmp.elm.bos.photonEff(3).max(1)); - tmp.elm.bos.arg = gaugeSpeed.div(10).times(tmp.elm.bos.gluonEff("r", 1)).times(tmp.elm.bos.photonEff(3).max(1)); - tmp.elm.bos.agg = gaugeSpeed.div(9.8).times(tmp.elm.bos.gluonEff("g", 1)).times(tmp.elm.bos.photonEff(3).max(1)); - tmp.elm.bos.abg = gaugeSpeed.div(10.2).times(tmp.elm.bos.gluonEff("b", 1)).times(tmp.elm.bos.photonEff(3).max(1)); - if (player.elementary.foam.unl && tmp.elm.qf) { - tmp.elm.bos.rg = tmp.elm.bos.rg.times(tmp.elm.qf.boost19) - tmp.elm.bos.gg = tmp.elm.bos.gg.times(tmp.elm.qf.boost19) - tmp.elm.bos.bg = tmp.elm.bos.bg.times(tmp.elm.qf.boost19) - tmp.elm.bos.arg = tmp.elm.bos.arg.times(tmp.elm.qf.boost19) - tmp.elm.bos.agg = tmp.elm.bos.agg.times(tmp.elm.qf.boost19) - tmp.elm.bos.abg = tmp.elm.bos.abg.times(tmp.elm.qf.boost19) - } - if (!tmp.elm.bos.gluonCost) tmp.elm.bos.gluonCost = function (col, x) { - let bought = player.elementary.bosons.gauge.gluons[col].upgrades[x - 1]||new ExpantaNum(0); - if (x == 1) return ExpantaNum.pow(2, bought.pow(2.5).times(2)).times(100); - else if (x==2) return ExpantaNum.pow(3, ExpantaNum.pow(3, bought)).times(1e3 / 3); - else return ExpantaNum.pow(10, bought.pow(2)).times(1e7) - }; - if (!tmp.elm.bos.gluonTarg) tmp.elm.bos.gluonTarg = function (col, x) { - let amt = player.elementary.bosons.gauge.gluons[col].amount||new ExpantaNum(0); - if (x == 1) return amt.div(100).max(1).logBase(2).div(2).pow(1/2.5).plus(1).floor(); - else if (x==2) return amt.div(1e3 / 3).max(1).logBase(3).max(1).logBase(3).plus(1).floor(); - else return amt.div(1e7).max(1).log10().sqrt().plus(1).floor(); - }; - tmp.elm.bos.buy = function (col, x, max=false) { - let amt = player.elementary.bosons.gauge.gluons[col].amount; - if (amt.lt(tmp.elm.bos.gluonCost(col, x))) return; - let target; - if (max) target = tmp.elm.bos.gluonTarg(col, x); - player.elementary.bosons.gauge.gluons[col].amount = amt.sub(tmp.elm.bos.gluonCost(col, x)); - if (max) player.elementary.bosons.gauge.gluons[col].upgrades[x - 1] = player.elementary.bosons.gauge.gluons[col].upgrades[x - 1].max(target) - else player.elementary.bosons.gauge.gluons[col].upgrades[x - 1] = player.elementary.bosons.gauge.gluons[ - col - ].upgrades[x - 1].plus(1); - }; - tmp.elm.bos.gluon2total = new ExpantaNum(1); - for (let i = 0; i < GLUON_COLOURS.length; i++) { - tmp.elm.bos.gluon2total = tmp.elm.bos.gluon2total.times(tmp.elm.bos.gluonEff(GLUON_COLOURS[i], 2)); - if (tmp.hh410) tmp.elm.bos[GLUON_COLOURS[i]+"g"] = tmp.elm.bos[GLUON_COLOURS[i]+"g"].times(666) - } -} - -function updateTempGravitons(gaugeSpeed) { - tmp.elm.bos.gravGain = gaugeSpeed.div(1.75); - if (player.inf.upgrades.includes("10;9")) tmp.elm.bos.gravGain = tmp.elm.bos.gravGain.times(100) - if (player.elementary.theory.supersymmetry.unl) tmp.elm.bos.gravGain = tmp.elm.bos.gravGain.times(tmp.neuEff||1) - tmp.elm.bos.gravEff = player.elementary.bosons.gauge.gravitons - .times(player.elementary.times.plus(1)) - .plus(1) - .log10() - .div(10) - .plus(1) - .pow(2.25); -} - -function updateTempGauge() { - tmp.elm.bos.gaugeGain = player.elementary.bosons.amount.times(player.inf.ascension.power.plus(1).log10().plus(1)); - tmp.elm.bos.forceGain = player.elementary.bosons.gauge.amount.pow(0.75); - if (tmp.gravEff) tmp.elm.bos.forceGain = tmp.elm.bos.forceGain.times(tmp.gravEff); - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.bos.forceGain = tmp.elm.bos.forceGain.times(tmp.elm.qf.boost18); - tmp.elm.bos.forceEff = player.elementary.bosons.gauge.force.div(10).plus(1).logBase(2).pow(0.2); - if (player.inf.upgrades.includes("8;10")) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(player.elementary.bosons.gauge.force.plus(1).pow(0.08)) - if (tmp.ach[132].has) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(2) - tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.times(tmp.higgs130?tmp.higgs130.max(1):1) - let gaugeSpeed = new ExpantaNum(tmp.elm.bos.forceEff); - - updateTempPhotons(gaugeSpeed); - updateTempWZB(gaugeSpeed); - updateTempGluons(gaugeSpeed); - updateTempGravitons(gaugeSpeed); -} - -function updateHiggsUpgradeEffects() { - if (!tmp.elm.bos["higgs_1;1;0"]) tmp.elm.bos["higgs_1;1;0"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("1;1;0")) return new ExpantaNum(1) - let f1 = player.elementary.fermions.quarks.amount.plus(1).log10().pow(0.2).plus(1) - let f2 = player.elementary.fermions.leptons.amount.plus(1).log10().pow(0.3).plus(1) - let f3 = player.elementary.bosons.gauge.photons.amount.plus(1).log10().pow(0.15).plus(1) - let f4 = player.elementary.bosons.gauge.gravitons.plus(1).log10().pow(0.25).plus(1) - let f5 = player.elementary.bosons.scalar.higgs.amount.plus(1).log10().pow(0.1).plus(1) - return f1.times(f2).times(f3).times(f4).times(f5).pow(0.2) - } - if (!tmp.elm.bos["higgs_0;1;1"]) tmp.elm.bos["higgs_0;1;1"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("0;1;1")) return new ExpantaNum(1) - let e = player.inf.endorsements.sub(36).max(0) - if (e.gte(3)) e = e.sqrt().times(Math.sqrt(3)) - return ExpantaNum.pow(7, e).max(1) - } - if (!tmp.elm.bos["higgs_3;0;0"]) tmp.elm.bos["higgs_3;0;0"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("3;0;0")) return new ExpantaNum(1) - return ExpantaNum.pow(1.1, player.elementary.bosons.scalar.higgs.upgrades.length) - } - if (!tmp.elm.bos["higgs_0;2;1"]) tmp.elm.bos["higgs_0;2;1"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("0;2;1")) return new ExpantaNum(1) - return player.elementary.bosons.scalar.higgs.amount.plus(1).times(10).slog(10).pow(0.1).sub(1).times(100) - } - if (!tmp.elm.bos["higgs_0;0;4"]) tmp.elm.bos["higgs_0;0;4"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("0;0;4")) return new ExpantaNum(1) - let ret = tmp.elm.pa.active?tmp.elm.pa.speedBoost.plus(1):new ExpantaNum(1) - if (ret.gte(1e3)) ret = ret.pow(0.95).times(Math.pow(1e3, 0.05)) - return ret - } - if (!tmp.elm.bos["higgs_1;3;0"]) tmp.elm.bos["higgs_1;3;0"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("1;3;0")) return new ExpantaNum(1) - let amt = player.inf.pantheon.angels.plus(player.inf.pantheon.demons) - let ret = ExpantaNum.pow(10, amt.sqrt()).pow(0.2) - return ret - } - if (!tmp.elm.bos["higgs_0;3;1"]) tmp.elm.bos["higgs_0;3;1"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("0;3;1")) return new ExpantaNum(1) - let ret = player.inf.pantheon.purge.power.plus(1).pow(0.9) - return ret - } - if (!tmp.elm.bos["higgs_0;0;5"]) tmp.elm.bos["higgs_0;0;5"] = function(disp=false) { - if (!disp) if (!tmp.elm.bos.hasHiggs("0;0;5")) return new ExpantaNum(0) - let ret = player.elementary.bosons.scalar.higgs.amount.plus(1).times(10).slog(10).pow(2.5).sub(1).times(18) - return ret - } -} - -function updateTempScalar() { - tmp.elm.bos.scalarGain = player.elementary.bosons.amount.sqrt().times(0.6); - tmp.elm.bos.higgsGain = player.elementary.bosons.scalar.amount.div(10).pow(0.95).times(ExpantaNum.pow(2, Math.sqrt(player.elementary.bosons.scalar.higgs.upgrades.length))) - tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(tmp.higgs011?new ExpantaNum(tmp.higgs011).max(1):1).times(tmp.higgs300?new ExpantaNum(tmp.higgs300).max(1):1) - if (tmp.inf510) tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(INF_UPGS.effects["5;10"]().hb); - if (player.elementary.theory.tree.unl) tmp.elm.bos.higgsGain = tmp.elm.bos.higgsGain.times(TREE_UPGS[2].effect(player.elementary.theory.tree.upgrades[2]||0)) - if (!tmp.elm.bos.buyHiggs) tmp.elm.bos.buyHiggs = function(id) { - let data = HIGGS_UPGS[id] - if (player.elementary.bosons.scalar.higgs.amount.lt(data.cost) || player.elementary.bosons.scalar.higgs.upgrades.includes(id)) return - player.elementary.bosons.scalar.higgs.amount = player.elementary.bosons.scalar.higgs.amount.sub(data.cost) - player.elementary.bosons.scalar.higgs.upgrades.push(id) - if (id=="0;0;2") for (let i=1;i<=4;i++) tmp.inf.asc.activatePerk(i) - } - if (!tmp.elm.bos.hasHiggs) tmp.elm.bos.hasHiggs = function(id) { return player.elementary.bosons.scalar.higgs.upgrades.includes(id) } - updateHiggsUpgradeEffects(); -} - -function updateTempBosons() { - if (!tmp.elm.bos) tmp.elm.bos = {}; - if (!tmp.elm.bos.transfer1) tmp.elm.bos.transfer1 = function () { - if (player.elementary.particles.lt(1)) return; - player.elementary.particles = player.elementary.particles.sub(1); - player.elementary.bosons.amount = player.elementary.bosons.amount.plus(1); - }; - if (!tmp.elm.bos.transfer) tmp.elm.bos.transfer = function (ratio) { - if (player.elementary.particles.times(ratio).floor().lt(1)) return; - let toSub = player.elementary.particles.times(ratio).floor(); - player.elementary.particles = player.elementary.particles.sub(toSub); - player.elementary.bosons.amount = player.elementary.bosons.amount.plus(toSub); - }; - - updateGluonTabs(); - updateTempGauge(); - updateTempScalar(); -} - -function updateTempPerkAccelerator() { - tmp.elm.pa = {} - tmp.elm.pa.active = tmp.elm.bos.hasHiggs("0;0;2") - tmp.elm.pa.stateStarts = { - weakened: new ExpantaNum(12.5e3), - broken: new ExpantaNum(1e6), - } - if (player.elementary.theory.accelerons.unl) tmp.elm.pa.stateStarts.weakened = tmp.elm.pa.stateStarts.weakened.times(getAccelEff()) - if (player.elementary.foam.unl && tmp.elm.qf) { - tmp.elm.pa.stateStarts.weakened = tmp.elm.pa.stateStarts.weakened.times(tmp.elm.qf.boost22) - tmp.elm.pa.stateStarts.broken = tmp.elm.pa.stateStarts.broken.times(tmp.elm.qf.boost22) - } - tmp.elm.pa.state = "" - tmp.elm.pa.speedBoost = tmp.inf.asc.perkTimeO.div(10) - if (tmp.elm.pa.speedBoost.gte(tmp.elm.pa.stateStarts.weakened)) tmp.elm.pa.state = "weakened" - if (tmp.elm.pa.speedBoost.gte(tmp.elm.pa.stateStarts.broken)) tmp.elm.pa.state = "broken" - if (tmp.elm.pa.state=="weakened") tmp.elm.pa.speedBoost = tmp.elm.pa.speedBoost.sqrt().times(ExpantaNum.sqrt(tmp.elm.pa.stateStarts.weakened)) - if (tmp.elm.pa.state=="broken") tmp.elm.pa.speedBoost = tmp.elm.pa.speedBoost.cbrt().times(ExpantaNum.pow(tmp.elm.pa.stateStarts.broken, 2/3)) - tmp.elm.pa.boost = tmp.inf.asc.perkTimeO.div(10).pow(0.07) - if (tmp.inf.upgs.has("10;8")) tmp.elm.pa.boost = tmp.elm.pa.boost.max(tmp.inf.asc.perkTimeO.div(10).pow(0.2)) - if (tmp.elm.pa.boost.gte(6.75)) tmp.elm.pa.boost = tmp.elm.pa.boost.logBase(6.75).plus(5.75) -} - -function updateTheoryTabs() { - if (!tmp.elm.theory.updateTabs) tmp.elm.theory.updateTabs = function () { - let tabs = Element.allFromClass("theorytab"); - for (let i = 0; i < tabs.length; i++) { - tabs[i].setDisplay(thTab == tabs[i].id); - new Element(tabs[i].id + "tabbtn").setDisplay(TH_TABS[tabs[i].id]()); - } - }; - if (!tmp.elm.theory.showTab) tmp.elm.theory.showTab = function (name) { - if (thTab == name) return; - thTab = name; - tmp.elm.theory.updateTabs(); - }; - tmp.elm.theory.updateTabs(); -} - -function updateTempTheoriverse() { - tmp.elm.theory.subbed = new ExpantaNum(0) - if (player.elementary.theory.tree.unl) tmp.elm.theory.subbed = tmp.elm.theory.subbed.plus(TREE_UPGS[4].effect(player.elementary.theory.tree.upgrades[4]||0)) - tmp.elm.theory.nerf = (player.elementary.theory.depth.minus(tmp.elm.theory.subbed).max(0).eq(0)?new ExpantaNum(0.88):ExpantaNum.pow(0.8, player.elementary.theory.depth.minus(tmp.elm.theory.subbed).max(1).cbrt())) - if (player.elementary.theory.depth.minus(tmp.elm.theory.subbed).gte(4)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(player.elementary.theory.depth.minus(tmp.elm.theory.subbed).max(0).sub(3)) - if (HCTVal("tv").gt(-1)) { - let d = HCTVal("tv") - tmp.elm.theory.nerf = (d.minus(tmp.elm.theory.subbed).max(0).eq(0)?new ExpantaNum(0.88):ExpantaNum.pow(0.8, d.minus(tmp.elm.theory.subbed).max(1).cbrt())) - if (d.minus(tmp.elm.theory.subbed).gte(4)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(d.minus(tmp.elm.theory.subbed).max(0).sub(3)) - } - if (!tmp.elm.theory.start) tmp.elm.theory.start = function() { - if (!player.elementary.theory.unl) return - if (HCTVal("tv").gt(-1)) return - tmp.elm.layer.reset(true) - player.elementary.theory.active = !player.elementary.theory.active - } - tmp.elm.theory.gain = ExpantaNum.pow(2, player.elementary.theory.depth) -} - -function updateTempSupersymmetry() { - if (!tmp.elm.theory.ss) tmp.elm.theory.ss = {} - if (!tmp.elm.theory.ss.unl) tmp.elm.theory.ss.unl = function() { - if (!player.elementary.theory.unl) return - if (player.elementary.theory.supersymmetry.unl) return - if (player.elementary.theory.points.lt(1)) return - player.elementary.theory.points = player.elementary.theory.points.sub(1) - player.elementary.theory.supersymmetry.unl = true - } - for (let i=0;i<4;i++) { - let type = ["squark", "slepton", "neutralino", "chargino"][i] - tmp.elm.theory.ss[type+"Gain"] = new ExpantaNum((4-i)/4) - if (player.elementary.theory.tree.unl) { - tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(TREE_UPGS[1].effect(player.elementary.theory.tree.upgrades[1]||0)) - tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(TREE_UPGS[5].effect(player.elementary.theory.tree.upgrades[5]||0)) - tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(getStringEff(1)) - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(tmp.elm.qf.boost9) - } - tmp.elm.theory.ss[type+"Eff"] = player.elementary.theory.supersymmetry[type+"s"].plus(1) - if (tmp.elm.theory.ss[type+"Eff"].gte(1e9)) tmp.elm.theory.ss[type+"Eff"] = tmp.elm.theory.ss[type+"Eff"].cbrt().times(1e6) - } - if (hasDE(5)) for (let i=2;i>=0;i--) { - let type = ["squark", "slepton", "neutralino", "chargino"][i] - let next = ["squark", "slepton", "neutralino", "chargino"][i+1] - if ((player.elementary.theory.tree.upgrades[i+22]||new ExpantaNum(0)).gte(1)) tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(tmp.elm.theory.ss[next+"Eff"]) - } - tmp.elm.theory.ss.wavelength = player.elementary.theory.supersymmetry.squarks.times(player.elementary.theory.supersymmetry.sleptons).times(player.elementary.theory.supersymmetry.neutralinos).times(player.elementary.theory.supersymmetry.charginos).pow(1/5) - tmp.elm.theory.ss.waveEff = tmp.elm.theory.ss.wavelength.plus(1).pow(2.25) - if (tmp.elm.theory.ss.waveEff.gte(1e13)) tmp.elm.theory.ss.waveEff = tmp.elm.theory.ss.waveEff.pow(1/4).times(Math.pow(1e13, 3/4)) -} - -function updateTempTheoryTree() { - if (!tmp.elm.theory.tree) tmp.elm.theory.tree = {} - if (!tmp.elm.theory.tree.unl) tmp.elm.theory.tree.unl = function() { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.supersymmetry.unl) return - if (player.elementary.theory.tree.unl) return - if (player.elementary.theory.points.lt(1)) return - player.elementary.theory.points = player.elementary.theory.points.sub(1) - player.elementary.theory.tree.unl = true - } - tmp.elm.theory.tree.bought = function(i) { return new ExpantaNum(player.elementary.theory.tree.upgrades[i]||0) } - if (!tmp.elm.theory.tree.buy) tmp.elm.theory.tree.buy = function(x, max=false) { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.tree.unl) return - let bought = tmp.elm.theory.tree.bought(x) - let cap = getTreeUpgCap(x) - if (bought.gte(cap)) return - let cost = TREE_UPGS[x].cost(bought).div(tmp.elm.theory.tree.costReduc).round() - if (player.elementary.theory.points.lt(cost)) return - if (tmp.ach[162].has && (outerShiftDown||max) && TREE_UPGS[x].target!==undefined) { - let target = TREE_UPGS[x].target(player.elementary.theory.points.times(tmp.elm.theory.tree.costReduc)).max(0).min(cap); - if (target.lte(bought)||target.lt(1)) return; - let newCost = TREE_UPGS[x].cost(target.sub(1)).div(tmp.elm.theory.tree.costReduc).round(); - player.elementary.theory.points = player.elementary.theory.points.sub(newCost); - player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(newCost); - player.elementary.theory.tree.upgrades[x] = bought.max(target) - } else { - player.elementary.theory.points = player.elementary.theory.points.sub(cost) - player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(cost) - player.elementary.theory.tree.upgrades[x] = bought.plus(1) - } - } - tmp.elm.theory.tree.costReduc = ach152Eff() - if (player.elementary.theory.inflatons.unl) tmp.elm.theory.tree.costReduc = tmp.elm.theory.tree.costReduc.times(getInflatonEff1()) - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.theory.tree.costReduc = tmp.elm.theory.tree.costReduc.times(tmp.elm.qf.boost8) -} - -function updateTempTheories() { - if (!tmp.elm.theory) tmp.elm.theory = {} - - updateTheoryTabs() - updateTempTheoriverse(); - updateTempSupersymmetry(); - updateTempTheoryTree(); -} - -function updateTempHC() { - if (!tmp.elm.hc) tmp.elm.hc = {} - tmp.elm.hc.currScore = getProjectedHadronicScore() - tmp.elm.hc.hadronBulk = new ExpantaNum(1) - if (player.elementary.theory.inflatons.unl) tmp.elm.hc.hadronBulk = tmp.elm.hc.hadronBulk.plus(getInflatonEff2()) - tmp.elm.hc.hadronGain = player.elementary.hc.unl ? player.elementary.hc.best.pow(1.5).div(10) : new ExpantaNum(0) - tmp.elm.hc.hadronGain = tmp.elm.hc.hadronGain.times(TREE_UPGS[31].effect(player.elementary.theory.tree.upgrades[31]||0)) - if (player.elementary.foam.unl && tmp.elm.qf) tmp.elm.hc.hadronGain = tmp.elm.hc.hadronGain.times(tmp.elm.qf.boost7) - tmp.elm.hc.hadInterval = ExpantaNum.add(1, ExpantaNum.div(9, player.elementary.hc.best.plus(1).log(Math.E).plus(1)).div(200)) - if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[33]||0, 1)) tmp.elm.hc.hadInterval = tmp.elm.hc.hadInterval.sub(1).div(2).plus(1) - tmp.elm.hc.hadronEff = player.elementary.hc.hadrons.max(1).logBase(tmp.elm.hc.hadInterval).floor().times(tmp.elm.hc.hadronBulk) - tmp.elm.hc.next = ExpantaNum.pow(tmp.elm.hc.hadInterval, new ExpantaNum(player.elementary.hc.claimed||0).div(tmp.elm.hc.hadronBulk).plus(1)) - tmp.elm.hc.complPerc = player.distance.log10().div(new ExpantaNum(getHCSelector("goal")).times(4.4e26).log10()).min(1) - tmp.elm.hc.infState = getInflatonState() - tmp.elm.hc.infGain = getInflatonGain() - claimHadronEff() - updateHCTabs() -} - -function updateQuantumFoamTabs() { - if (!tmp.elm.qf.updateTabs) tmp.elm.qf.updateTabs = function () { - let tabs = Element.allFromClass("foamTab"); - for (let i = 0; i < tabs.length; i++) { - tabs[i].setDisplay(foamTab == tabs[i].id); - new Element(tabs[i].id + "tabbtn").setDisplay(FOAM_TABS[tabs[i].id]()); - } - }; - if (!tmp.elm.qf.showTab) tmp.elm.qf.showTab = function (name) { - if (foamTab == name) return; - foamTab = name; - tmp.elm.qf.updateTabs(); - }; - tmp.elm.qf.updateTabs(); -} - -function updateQuantumFoamBoosts() { - tmp.elm.qf.boostData = getQFBoostData() - tmp.elm.qf.boost25 = tmp.elm.qf.boostData[25].times(tmp.elm.qf.boostData[25].plus(1).cbrt()).div(2) - if (tmp.elm.qf.boost25.gte(3.5)) tmp.elm.qf.boost25 = tmp.elm.qf.boost25.sqrt().times(Math.sqrt(3.5)) - tmp.elm.qf.boost24 = player.elementary.foam.amounts[0].plus(1).log10().plus(1).pow(tmp.elm.qf.boostData[24].plus(tmp.elm.qf.boost25).times(60)) - tmp.elm.qf.boost23 = ExpantaNum.pow(10, tmp.elm.qf.boostData[23].plus(tmp.elm.qf.boost25).pow(0.75)) - tmp.elm.qf.boost22 = ExpantaNum.pow(8, tmp.elm.qf.boostData[22].plus(tmp.elm.qf.boost25)) - tmp.elm.qf.boost21 = player.elementary.foam.amounts[3].plus(1).pow(0.75).log10().plus(1).pow(tmp.elm.qf.boostData[21].plus(tmp.elm.qf.boost25).pow(0.8)) - tmp.elm.qf.boost20 = tmp.elm.qf.boostData[20].plus(tmp.elm.qf.boost25).plus(1).sqrt() - tmp.elm.qf.boost19 = ExpantaNum.pow(1e15, tmp.elm.qf.boostData[19].plus(tmp.elm.qf.boost25).times(player.elementary.foam.amounts[0].plus(1).log10().plus(1).log10().plus(1))) - tmp.elm.qf.boost18 = player.elementary.foam.amounts[0].plus(1).log10().plus(1).pow(tmp.elm.qf.boostData[18].plus(tmp.elm.qf.boost25)) - tmp.elm.qf.boost17 = tmp.elm.qf.boostData[17].plus(tmp.elm.qf.boost25).pow(0.8).times(10).floor() - tmp.elm.qf.boost16 = player.elementary.foam.amounts[2].plus(1).pow(0.75).log10().plus(1).pow(tmp.elm.qf.boostData[16].plus(tmp.elm.qf.boost25).pow(0.8)) - tmp.elm.qf.boost15 = ExpantaNum.pow(1e6, tmp.elm.qf.boostData[15].plus(tmp.elm.qf.boost25).pow(0.8)) - tmp.elm.qf.boost14 = ExpantaNum.pow(1e15, tmp.elm.qf.boostData[14].plus(tmp.elm.qf.boost25).pow(0.95)) - tmp.elm.qf.boost13 = tmp.elm.qf.boostData[13].plus(tmp.elm.qf.boost25).sqrt().div(3).times(player.elementary.foam.amounts[0].plus(1).log10().plus(1).log10().plus(1)) - tmp.elm.qf.boost12 = ExpantaNum.pow(100, tmp.elm.qf.boostData[12].plus(tmp.elm.qf.boost25).plus(tmp.elm.qf.boost13)) - tmp.elm.qf.boost11 = player.elementary.foam.amounts[1].plus(1).pow(0.75).log10().plus(1).pow(tmp.elm.qf.boostData[11].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).pow(0.8)) - tmp.elm.qf.boost10 = tmp.elm.qf.boostData[10].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).times(2).sqrt() - tmp.elm.qf.boost9 = ExpantaNum.pow(1e6, tmp.elm.qf.boostData[9].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) - tmp.elm.qf.boost8 = tmp.elm.qf.boostData[8].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).plus(1).pow(3) - tmp.elm.qf.boost7 = ExpantaNum.pow(1e8, tmp.elm.qf.boostData[7].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).sqrt()) - tmp.elm.qf.boost6 = player.elementary.foam.amounts[0].plus(1).sqrt().log10().plus(1).pow(tmp.elm.qf.boostData[6].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).pow(0.9)) - tmp.elm.qf.boost5 = tmp.elm.qf.boostData[5].plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25).sqrt().div(3).times(player.inf.knowledge.plus(1).log10().plus(1).log10().plus(1)) - tmp.elm.qf.boost4 = ExpantaNum.pow(10, tmp.elm.qf.boostData[4].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) - tmp.elm.qf.boost3 = ExpantaNum.pow(100, tmp.elm.qf.boostData[3].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) - tmp.elm.qf.boost2 = ExpantaNum.pow(1e3, tmp.elm.qf.boostData[2].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) - tmp.elm.qf.boost1 = ExpantaNum.pow(3, tmp.elm.qf.boostData[1].plus(tmp.elm.qf.boost5).plus(tmp.elm.qf.boost13).plus(tmp.elm.qf.boost25)) -} - -function updateQuantumFoamEffects() { - if (!tmp.elm.qf.eff) tmp.elm.qf.eff = {} - for (let i=2;i<=5;i++) tmp.elm.qf.eff[i] = getQuantumFoamEff(i) -} - -function updateQuantumFoamGain() { - if (!tmp.elm.qf.gain) tmp.elm.qf.gain = {} - for (let i=1;i<=5;i++) tmp.elm.qf.gain[i] = getQuantumFoamGain(i) - tmp.elm.qf.gain[1] = tmp.elm.qf.gain[1].times(tmp.elm.qf.boost1).times(tmp.elm.qf.eff[2]).times(tmp.elm.qf.eff[3]).times(tmp.elm.qf.eff[4]).times(tmp.elm.qf.eff[5]) - tmp.elm.qf.gain[2] = tmp.elm.qf.gain[2].times(tmp.elm.qf.boost6).times(tmp.elm.qf.eff[3]).times(tmp.elm.qf.eff[4]).times(tmp.elm.qf.eff[5]) - tmp.elm.qf.gain[3] = tmp.elm.qf.gain[3].times(tmp.elm.qf.boost11).times(tmp.elm.qf.eff[4]).times(tmp.elm.qf.eff[5]) - tmp.elm.qf.gain[4] = tmp.elm.qf.gain[4].times(tmp.elm.qf.boost16).times(tmp.elm.qf.eff[5]) - tmp.elm.qf.gain[5] = tmp.elm.qf.gain[5].times(ExpantaNum.pow(10, player.elementary.foam.maxDepth.sub(5).max(0))) -} - -function updateTempEntropy() { - if (!tmp.elm.entropy) tmp.elm.entropy = {} - if (!tmp.elm.entropy.upgEff) tmp.elm.entropy.upgEff = {} - for (let i in ENTROPY_UPG_EFFS) tmp.elm.entropy.upgEff[i] = ENTROPY_UPG_EFFS[i](); - tmp.elm.entropy.eff = getEntropyEff() - tmp.elm.entropy.gainMult = getEntropyGainMult() - tmp.elm.entropy.gain = getEntropyGain() - tmp.elm.entropy.omegaDiv = getOmegaParticleReqDiv() - tmp.elm.entropy.omega = getOmegaParticles() - tmp.elm.entropy.omegaEff = getOmegaEff() -} - -function updateTempQuantumFoam() { - if (!tmp.elm.qf) tmp.elm.qf = {} - - updateQuantumFoamTabs(); - updateQuantumFoamBoosts(); - updateQuantumFoamEffects(); - updateQuantumFoamGain(); - updateTempEntropy(); -} - -function updateTempElementary() { - if (tmp.elm) setTempElementaryStuff(); - else tmp.elm = {}; - updateElementaryLayer(); - updateElementaryTabs(); - updateTempFermions(); - updateTempBosons(); - updateTempPerkAccelerator(); - updateTempTheories(); - updateTempHC(); - updateTempQuantumFoam(); -} - -function elTick(diff) { - player.elementary.time = player.elementary.time.plus(diff) - player.elementary.fermions.quarks.amount = new ExpantaNum(player.elementary.fermions.quarks.amount).plus( - adjustGen(tmp.elm.ferm.quarkGain, "quarks").times(diff) - ); - player.elementary.fermions.leptons.amount = new ExpantaNum(player.elementary.fermions.leptons.amount).plus( - adjustGen(tmp.elm.ferm.leptonGain, "leptons").times(diff) - ); - player.elementary.bosons.gauge.amount = new ExpantaNum(player.elementary.bosons.gauge.amount).plus( - adjustGen(tmp.elm.bos.gaugeGain, "gauge").times(diff) - ); - player.elementary.bosons.gauge.force = new ExpantaNum(player.elementary.bosons.gauge.force).plus( - adjustGen(tmp.elm.bos.forceGain, "gauge").times(diff) - ); - player.elementary.bosons.gauge.photons.amount = new ExpantaNum( - player.elementary.bosons.gauge.photons.amount - ).plus(adjustGen(tmp.elm.bos.photonGain, "gauge").times(diff)); - player.elementary.bosons.gauge.w = new ExpantaNum(player.elementary.bosons.gauge.w).plus( - adjustGen(tmp.elm.bos.wg, "gauge").times(diff) - ); - player.elementary.bosons.gauge.z = new ExpantaNum(player.elementary.bosons.gauge.z).plus( - adjustGen(tmp.elm.bos.zg, "gauge").times(diff) - ); - for (let i = 0; i < GLUON_COLOURS.length; i++) - player.elementary.bosons.gauge.gluons[GLUON_COLOURS[i]].amount = new ExpantaNum( - player.elementary.bosons.gauge.gluons[GLUON_COLOURS[i]].amount - ).plus(adjustGen(tmp.elm.bos[GLUON_COLOURS[i] + "g"], "gauge").times(diff)); - player.elementary.bosons.gauge.gravitons = new ExpantaNum(player.elementary.bosons.gauge.gravitons).plus( - adjustGen(tmp.elm.bos.gravGain, "gauge").times(diff) - ); - player.elementary.bosons.scalar.amount = new ExpantaNum(player.elementary.bosons.scalar.amount).plus( - adjustGen(tmp.elm.bos.scalarGain, "scalar").times(diff) - ); - player.elementary.bosons.scalar.higgs.amount = new ExpantaNum(player.elementary.bosons.scalar.higgs.amount).plus( - adjustGen(tmp.elm.bos.higgsGain, "scalar").times(diff) - ); - if (player.elementary.theory.supersymmetry.unl) { - for (let i=0;i<4;i++) { - let type = ["squark", "slepton", "neutralino", "chargino"][i] - player.elementary.theory.supersymmetry[type+"s"] = player.elementary.theory.supersymmetry[type+"s"].plus(adjustGen(tmp.elm.theory.ss[type+"Gain"], "ss").times(diff)) - } - } - if (player.elementary.theory.strings.unl) { - for (let i=1;i<=TOTAL_STR;i++) { - player.elementary.theory.strings.amounts[i-1] = player.elementary.theory.strings.amounts[i-1].plus(adjustGen(getStringGain(i), "str").times(diff)) - } - } - if (tmp.ach[163].has) player.elementary.theory.strings.entangled = player.elementary.theory.strings.entangled.plus(getEntangleGain().div(10).times(diff)) - if (player.elementary.theory.preons.unl) player.elementary.theory.preons.amount = player.elementary.theory.preons.amount.plus(adjustGen(getPreonGain(), "preons").times(diff)) - if (player.elementary.theory.accelerons.unl) player.elementary.theory.accelerons.amount = player.elementary.theory.accelerons.amount.plus(adjustGen(getAccelGain(), "accelerons").times(diff)) - if (player.elementary.theory.inflatons.unl) player.elementary.theory.inflatons.amount = player.elementary.theory.inflatons.amount.plus(adjustGen(tmp.elm.hc.infGain, "inflatons").times(diff)) - if (player.elementary.hc.unl) player.elementary.hc.hadrons = player.elementary.hc.hadrons.plus(adjustGen(tmp.elm.hc.hadronGain, "hc").times(diff)) - if (player.elementary.foam.unl) qfTick(diff) -} - -function elmReset(force=false, auto=false) { - let c = player.rockets.gte(LAYER_REQS.elementary[0][1]) && - player.collapse.cadavers.gte(LAYER_REQS.elementary[1][1]) && - player.inf.endorsements.gte(LAYER_REQS.elementary[2][1]); - let L = new Layer("elementary", c, "multi-res", true, "elm"); - L.reset(force, auto) -} - -function resetTheoryTree(force=false) { - if (!force) { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.tree.unl) return - if (player.elementary.theory.tree.spent.eq(0)) return - if (!confirm("Are you sure you want to reset your tree to get Theory Points back?")) return - } - player.elementary.theory.points = player.elementary.theory.points.plus(player.elementary.theory.tree.spent) - player.elementary.theory.tree.spent = new ExpantaNum(0) - player.elementary.theory.tree.upgrades = {} - elmReset(true) -} - -// Strings - -function unlockStrings() { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.tree.unl) return - if (player.elementary.theory.strings.unl) return - if (player.elementary.theory.points.lt(7)) return - if (!confirm("Are you sure you want to unlock Strings? You will not be able to get your Theory Points back!")) return - player.elementary.theory.points = player.elementary.theory.points.sub(7) - player.elementary.theory.strings.unl = true -} - -function getStringEff(n) { - if (!player.elementary.theory.unl || !player.elementary.theory.strings.unl) return new ExpantaNum(1) - let ret = player.elementary.theory.strings.amounts[n-1].plus(1).pow(3/n) - if (ret.gte(1e6)) ret = ret.pow(1/3).times(ExpantaNum.pow(1e6, 2/3)) - if (n==1 && ret.gte(1e9)) ret = ret.pow(0.1).times(Math.pow(1e9, 0.9)) - let finalExp = new ExpantaNum(1) - if (hasDE(5) && n==2) finalExp = finalExp.plus(TREE_UPGS[14].effect(player.elementary.theory.tree.upgrades[14]||0)) - if (hasDE(5) && n==3) finalExp = finalExp.plus(TREE_UPGS[15].effect(player.elementary.theory.tree.upgrades[15]||0)) - if (hasDE(5) && n==4) finalExp = finalExp.plus(TREE_UPGS[16].effect(player.elementary.theory.tree.upgrades[16]||0)) - if (hasDE(5) && n==5) finalExp = finalExp.plus(TREE_UPGS[17].effect(player.elementary.theory.tree.upgrades[17]||0)) - if (hasDE(5) && n==6) finalExp = finalExp.plus(TREE_UPGS[18].effect(player.elementary.theory.tree.upgrades[18]||0)) - if (hasDE(5) && n==7) finalExp = finalExp.plus(TREE_UPGS[19].effect(player.elementary.theory.tree.upgrades[19]||0)) - return ret.pow(finalExp) -} - -function getStringGain(n) { - if (!player.elementary.theory.strings.unl) return new ExpantaNum(0) - if (n>1) if (!(player.elementary.theory.strings.amounts[n-2].gte(STR_REQS[n])&&(UNL_STR()>=n))) return new ExpantaNum(0) - let gain = new ExpantaNum(0.02).times(1/Math.sqrt(n)) - if (n function() { base = base.times(ExpantaNum.add(x, 1)) }()) - let gain = base.pow(1/7).sqrt() - if (gain.gte(1e7)) gain = gain.cbrt().times(Math.pow(1e7, 2/3)) - if (gain.gte(1e9)) { - let exp = gain.plus(1).log10().sqrt().div(Math.sqrt(8)/4) - if (exp.gte(1e300)) exp = new ExpantaNum(1e300) - gain = gain.pow(exp.pow(-1)).times(ExpantaNum.pow(1e9, ExpantaNum.sub(1, exp.pow(-1)))) - } - gain = gain.times(TREE_UPGS[6].effect(player.elementary.theory.tree.upgrades[6]||0)) - gain = gain.times(TREE_UPGS[30].effect(player.elementary.theory.tree.upgrades[30]||0)) - if (player.elementary.foam.unl && tmp.elm.qf) gain = gain.times(tmp.elm.qf.boost3) - return gain -} - -function getEntangleEff() { - let eff = player.elementary.theory.strings.entangled.plus(1).pow(1.5) - return eff -} - -function entangleStrings() { - let lastStr = player.elementary.theory.strings.amounts.findIndex(x => new ExpantaNum(x).eq(0))+1 - if (lastStr<3&&lastStr!=0) return - player.elementary.theory.strings.entangled = player.elementary.theory.strings.entangled.plus(getEntangleGain()) - player.elementary.theory.strings.amounts = [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)] -} - -// Preons - -function unlockPreons() { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.strings.unl) return - if (player.elementary.theory.preons.unl) return - if (player.elementary.theory.points.lt(10)) return - if (!confirm("Are you sure you want to unlock Preons? You will not be able to get your Theory Points back!")) return - player.elementary.theory.points = player.elementary.theory.points.sub(10) - player.elementary.theory.preons.unl = true -} - -function getPreonGain() { - if (!player.elementary.theory.preons.unl) return new ExpantaNum(0) - let gain = player.elementary.theory.strings.amounts[0].plus(1).log10().div(10) - gain = gain.times(TREE_UPGS[9].effect(player.elementary.theory.tree.upgrades[9]||0)) - return gain -} - -function getTBCost() { - let b = new ExpantaNum(player.elementary.theory.preons.boosters) - if (b.gte(4)) b = b.pow(2).div(4) - let base = new ExpantaNum(2) - if (hasDE(5)) base = base.pow(0.1) - let cost = new ExpantaNum(20).times(ExpantaNum.pow(base, b)) - cost = cost.div(TREE_UPGS[10].effect(player.elementary.theory.tree.upgrades[10]||0)) - return cost -} - -function getTBGain() { - let ret = player.elementary.theory.preons.boosters.plus(1) - return ret -} - -function theoryBoost() { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.preons.unl) return - if (player.elementary.theory.preons.amount.lt(getTBCost())) return - player.elementary.theory.preons.amount = player.elementary.theory.preons.amount.sub(getTBCost()) - player.elementary.theory.points = player.elementary.theory.points.plus(getTBGain()) - player.elementary.theory.preons.boosters = player.elementary.theory.preons.boosters.plus(1) -} - -// Accelerons - -function unlockAccelerons() { - if (!player.elementary.theory.unl) return - if (!player.elementary.theory.preons.unl) return - if (player.elementary.theory.accelerons.unl) return - if (player.elementary.theory.points.lt(84)) return - if (!confirm("Are you sure you want to unlock Accelerons? You won't be able to get your Theory Points back!")) return - player.elementary.theory.points = player.elementary.theory.points.sub(84) - player.elementary.theory.accelerons.unl = true -} - -function getAccelGain() { - if (!player.elementary.theory.accelerons.unl) return new ExpantaNum(0) - let gain = tmp.acc.plus(1).log10().div(1e6).sqrt() - gain = gain.times(TREE_UPGS[12].effect(player.elementary.theory.tree.upgrades[12]||0)) - if (gain.gte(1e6)) gain = gain.cbrt().times(Math.pow(1e6, 2/3)) - return gain -} - -function getAccelEff() { - if (!player.elementary.theory.accelerons.unl) return new ExpantaNum(1) - let eff = player.elementary.theory.accelerons.amount.plus(1).pow(0.04) - if (eff.gte(2)) eff = eff.logBase(2).plus(1) - return eff -} - -function darkExpand() { - if (!player.elementary.theory.accelerons.unl) return - if (player.elementary.theory.accelerons.expanders.gte(MAX_DARK_EXPANDERS)) return - if (player.elementary.theory.accelerons.amount.lt(DARK_EXPANDER_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()])) return - player.elementary.theory.accelerons.amount = player.elementary.theory.accelerons.amount.sub(DARK_EXPANDER_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()]) - player.elementary.theory.accelerons.expanders = player.elementary.theory.accelerons.expanders.plus(1) -} - -function hasDE(n) { return player.elementary.theory.accelerons.expanders.gte(n)&&player.elementary.theory.accelerons.unl } - -function buyGluon3(col) { - if (!hasDE(1)) return - if (player.elementary.bosons.gauge.gluons[col].amount.lt(tmp.elm.bos.gluonCost(col, 3))) return - player.elementary.bosons.gauge.gluons[col].amount = player.elementary.bosons.gauge.gluons[col].amount.sub(tmp.elm.bos.gluonCost(col, 3)) - player.elementary.bosons.gauge.gluons[col].upgrades[2] = (player.elementary.bosons.gauge.gluons[col].upgrades[2]||new ExpantaNum(0)).plus(1) - player.elementary.theory.points = player.elementary.theory.points.plus(10) -} - -function getGravBoosts() { - if (!hasDE(4)) return new ExpantaNum(0) - let g = player.elementary.bosons.gauge.gravitons - return g.plus(1).log10().sqrt().floor() -} - -function getGravBoostBase() { - let base = new ExpantaNum(2) - if (hasDE(5)&&(player.elementary.theory.tree.upgrades[21]||new ExpantaNum(0)).gte(1)) base = base.pow(2) - return base -} - -function getGravBoostMult() { - if (!hasDE(4)) return new ExpantaNum(1) - let b = getGravBoosts() - return ExpantaNum.pow(getGravBoostBase(), b) -} - -function getElementariesGained() { - let e = new ExpantaNum(1) - if (hasDE(4)) e = e.times(getGravBoostMult()) - return e.max(1).floor() -} - -// Tree Export/Import functions - -function exportTree() { - let upgs = player.elementary.theory.tree.upgrades - let parsedUpgs = {} - for (let i=0;i TREE_UPGS[key].cost(new ExpantaNum(i)).div(tmp.elm.theory.tree.costReduc).round()) - let totalCost = costs.reduce((x,y) => ExpantaNum.add(x, y)) - if (tmp.ach[162].has) totalCost = TREE_UPGS[key].cost(upgs[key]).div(tmp.elm.theory.tree.costReduc).min(totalCost).round() - if (player.elementary.theory.points.gte(totalCost)) { - player.elementary.theory.points = player.elementary.theory.points.sub(totalCost) - player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(totalCost) - player.elementary.theory.tree.upgrades[key] = ExpantaNum.min(upgs[key], cap) - } else notifier.warn("You could not afford some of your requested Tree upgrades!") - } - } - } catch(e) { - notifier.error("Invalid tree") - } -} - -// Hadronic Challenge - -function getProjectedHadronicScore() { - let score = new ExpantaNum(0) - - // Pre-Collapse Modifiers - if (getHCSelector("noTRU")) score = score.times(1.08).plus(0.08) - - // Collapse Modifiers - if (getHCSelector("noCad")) score = score.times(1.05).plus(0.05) - if (getHCSelector("noPU")) score = score.times(1.1).plus(0.1) - if (getHCSelector("noDC")) score = score.times(1.04).plus(0.04) - - // Infinity Modifiers - if (getHCSelector("noIU")) score = score.times(1.1).plus(0.1) - score = score.plus(new ExpantaNum(getHCSelector("spaceon")).div(36)) - score = score.plus(new ExpantaNum(getHCSelector("solaris")).div(36)) - score = score.plus(new ExpantaNum(getHCSelector("infinity")).div(36)) - score = score.plus(new ExpantaNum(getHCSelector("eternity")).div(36)) - score = score.plus(new ExpantaNum(getHCSelector("reality")).div(36)) - score = score.plus(new ExpantaNum(getHCSelector("drigganiz")).div(36)) - if (getHCSelector("noGems")) score = score.times(1.01).plus(0.01) - if (getHCSelector("purge")) score = score.times(3).plus(2) - if (getHCSelector("noDS")) score = score.times(1.03).plus(0.03) - if (getHCSelector("noDB")) score = score.times(1.03).plus(0.03) - - // Elementary Modifiers - score = score.times(new ExpantaNum(getHCSelector("tv")).plus(2).pow(0.25)).plus(new ExpantaNum(getHCSelector("tv")).plus(1).div(20)) - - // Goal Modifier - score = score.times(new ExpantaNum(getHCSelector("goal")).log10().div(Math.log10(Number.MAX_VALUE)).log10().plus(1)) - - return score -} - -function isHCTabShown(name) { - return hcTab == name; -} - -function updateHCTabs() { - var tabs = document.getElementsByClassName("hcTab"); - for (i = 0; i < tabs.length; i++) { - var el = new Element(tabs[i].id); - el.setDisplay(isHCTabShown(tabs[i].id)); - } - new Element("furnacetabbtn").setDisplay(player.modes.includes("extreme")) -} - -function showHCTab(name) { - hcTab = name; -} - -function getHCSelector(name) { - let base; - let data = HC_DATA[name] - if (data[0]=="checkbox") return !(!player.elementary.hc.selectors[name]) - else if (data[0]=="text"||data[0]=="number"||data[0]=="range") base = data[1][0] - return new ExpantaNum(player.elementary.hc.selectors[name]||base).max(data[1][0]).min(data[1][1]).toString() -} - -function updateHCSelector(name) { - let data = HC_DATA[name] - let type = data[0] - let el = new Element("hcSelector"+name) - if (type=="checkbox") player.elementary.hc.selectors[name] = el.el.checked - else if (type=="text"||type=="number"||type=="range") { - let val = el.el.value||0 - try { - let num = new ExpantaNum(val) - if (type=="number"||type=="range") num = num.round() - if (num.lt(data[1][0]) || num.isNaN()) num = new ExpantaNum(data[1][0]) - if (num.gt(data[1][1])) num = new ExpantaNum(data[1][1]) - player.elementary.hc.selectors[name] = num - el.el.value = disp(num, 8, 3, 10) - } catch(e) { - notifier.warn("Improper Hadronic Challenge input") - console.log(e) - } - } -} - -function canCompleteHC() { - return (!(!player.elementary.hc.active)) && player.distance.gte(ExpantaNum.mul(getHCSelector("goal"), DISTANCES.uni)) -} - -function updateHCSelectorInputs() { - let len = Object.keys(HC_DATA).length - for (let i=0;i6)?2:1) - if (n<13) tmp.fn.enh.upgs[n].extra = tmp.fn.enh.upgs[n].extra.plus(player.furnace.enhancedUpgrades[12]) + tmp.fn.enh.upgs[n].extra = (n<=9?((player.furnace.enhancedUpgrades[n+2]||new ExpantaNum(0)).plus(tmp.fn.enh.upgs[n+3]?(tmp.fn.enh.upgs[n+3].extra?tmp.fn.enh.upgs[n+3].extra:0):0).times(tmp.fn.enh.upgPow)):new ExpantaNum(0)).times((n>6)?2:1) + if (n<13) tmp.fn.enh.upgs[n].extra = tmp.fn.enh.upgs[n].extra.plus(player.furnace.enhancedUpgrades[12].times(tmp.fn.enh.upgPow)) if (scalingActive("efn", player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk), "scaled")) { let start = getScalingStart("scaled", "efn") let power = getScalingPower("scaled", "efn") @@ -236,6 +319,31 @@ function updateTempFurnace() { .plus(1) .floor(); } + if (scalingActive("efn", player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk), "superscaled")) { + let start2 = getScalingStart("superscaled", "efn") + let power2 = getScalingPower("superscaled", "efn") + let exp2 = ExpantaNum.pow(3, power2); + let start = getScalingStart("scaled", "efn") + let power = getScalingPower("scaled", "efn") + let exp = ExpantaNum.pow(2, power); + tmp.fn.enh.upgs[n].cost = ExpantaNum.pow( + tmp.fn.enh.upgs[n].base.div(10).pow(tmp.fn.enh.upgs[n].costAdj||1), + player.furnace.enhancedUpgrades[n - 1] + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + ).times(tmp.fn.enh.upgs[n].base); + tmp.fn.enh.upgs[n].bulk = player.furnace.enhancedCoal + .div(tmp.fn.enh.upgs[n].base) + .logBase(tmp.fn.enh.upgs[n].base.div(10).pow(tmp.fn.enh.upgs[n].costAdj||1)) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .times(start2.pow(exp2.sub(1))) + .pow(exp2.pow(-1)) + .plus(1) + .floor(); + } if (!tmp.fn.enh.upgs[n].buy) tmp.fn.enh.upgs[n].buy = function () { if (player.furnace.enhancedCoal.lt(tmp.fn.enh.upgs[n].cost)) return; player.furnace.enhancedCoal = player.furnace.enhancedCoal.sub(tmp.fn.enh.upgs[n].cost); @@ -248,17 +356,56 @@ function updateTempFurnace() { player.furnace.enhancedUpgrades[n - 1] = player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk.floor()); }; } +} + +function updateEnhFurnUpgEffs() { let endMod = player.inf.endorsements.sub(25).max(0) if (endMod.gte(3)) endMod = endMod.div(3).plus(2) if (endMod.gte(4)) endMod = endMod.sqrt().times(2) tmp.fn.enh.upg1eff = ExpantaNum.pow(ExpantaNum.add(3, ExpantaNum.mul(0.1, endMod)), player.furnace.coal.plus(1).log10().plus(1).log10().plus(1).log10().plus(1)).times(ExpantaNum.pow(1.2, endMod)) tmp.fn.enh.upg2eff = new ExpantaNum(0.9) tmp.fn.enh.upg3eff = new ExpantaNum(2.5) + if (tmp.fn.pl) if (tmp.fn.pl.unl) { + tmp.fn.enh.upg1eff = tmp.fn.enh.upg1eff.times(tmp.fn.pl.boosts[7]) + tmp.fn.enh.upg3eff = tmp.fn.enh.upg3eff.times(tmp.fn.pl.boosts[7]) + } tmp.fn.enh.upg13eff = ExpantaNum.add(60, endMod.div(3).floor().times(10).min(10)) - tmp.fn.enh.moltBr = player.furnace.enhancedCoal.plus(1).div(1e150).pow(1/150) - if (player.furnace.enhancedUpgrades[12].gte(6)) tmp.fn.enh.moltBr = tmp.fn.enh.moltBr.times(player.furnace.enhancedUpgrades[12].sub(4).pow(0.6)) - tmp.fn.enh.moltBrEff = ExpantaNum.pow(tmp.fn.enh.moltBr.gte(1)?tmp.fn.enh.moltBr.plus(1):1, 27) - tmp.fn.enh.moltBrEff2 = ExpantaNum.pow(tmp.fn.enh.moltBr.gte(1)?tmp.fn.enh.moltBr.plus(1):1, 7) + if (player.elementary.bosons.scalar.higgs.upgrades.includes("6;1;0")) tmp.fn.enh.upg13eff = tmp.fn.enh.upg13eff.plus(player.furnace.enhancedUpgrades[12].pow(1.32)) + if (tmp.fn.pl) if (tmp.fn.pl.unl) tmp.fn.enh.upg13eff = tmp.fn.enh.upg13eff.times(tmp.fn.pl.boosts[8]) +} + +function updateMoltenBricks() { + tmp.fn.enh.moltBrStart = player.elementary.theory.tree.unl?1e100:1e150 + tmp.fn.enh.moltBr = player.furnace.enhancedCoal.plus(1).div(tmp.fn.enh.moltBrStart).pow(1/150) + if (player.furnace.enhancedUpgrades[12].gte(6)) tmp.fn.enh.moltBr = tmp.fn.enh.moltBr.times(player.furnace.enhancedUpgrades[12].times(tmp.fn.enh.upgPow).sub(4).pow(0.6).max(1)) + if (player.elementary.times.gt(0) && tmp.fn.magma) tmp.fn.enh.moltBr = tmp.fn.enh.moltBr.times(tmp.fn.magma.eff2) + if (player.elementary.bosons.scalar.higgs.upgrades.includes("0;1;6")) tmp.fn.enh.moltBr = tmp.fn.enh.moltBr.times(2) + tmp.fn.enh.moltBrEffExp = player.elementary.bosons.scalar.higgs.upgrades.includes("0;0;6")?1.25:1 + tmp.fn.enh.moltBrEff = ExpantaNum.pow(tmp.fn.enh.moltBr.gte(1)?tmp.fn.enh.moltBr.plus(1):1, 27).pow(tmp.fn.enh.moltBrEffExp) + tmp.fn.enh.moltBrEff2 = ExpantaNum.pow(tmp.fn.enh.moltBr.gte(1)?tmp.fn.enh.moltBr.plus(1):1, 7).pow(ExpantaNum.pow(tmp.fn.enh.moltBrEffExp, 4)) +} + +function updateTempFurnace() { + if (!tmp.fn) tmp.fn = {}; + updateBlueFlameEff(); + updateFurnUpgEffs(); + updateCoalGain(); + updateCoalEff(); + updateFurnaceUpgradeCosts(); + updateBlueFlameCost(); + updateBlueFlameReset(); + updateFNTabs(); + if (!tmp.fn.enh) tmp.fn.enh = {} + tmp.fn.enh.unl = tmp.ach[111].has + updateEnhFurnUpgPow(); + updateEnhCoalGain(); + updateEnhCoalEffs(); + updateEnhFurnUpgCosts(); + updateEnhFurnUpgEffs(); + updateMoltenBricks(); + + updateTempMagma(); + updateTempPlasma(); } function startFurnChall(x) { @@ -266,10 +413,14 @@ function startFurnChall(x) { if (player.activeFC==x) { if (FCEnd() && !player.furnChalls.includes(x)) player.furnChalls.push(x) player.activeFC = 0 - tmp.collapse.layer.reset(true) + if (x==6) tmp.elm.layer.reset(true) + else tmp.collapse.layer.reset(true) } else { player.activeFC = x - tmp.collapse.layer.reset(true) + if (x==6) { + tmp.elm.layer.reset(true) + player.activeFC = x + } else tmp.collapse.layer.reset(true) } } @@ -281,7 +432,7 @@ function inAnyFC() { return player.activeFC!=0&&modeActive("extreme") } function inFC(x) { let active = modeActive("extreme")?(player.activeFC==x):false - if (extremeStadiumActive("cranius")) active = true + if (extremeStadiumActive("cranius")&&x<=5) active = true return active } @@ -297,6 +448,7 @@ const FC_GOAL = { 3: new ExpantaNum(10), 4: new ExpantaNum(6), 5: new ExpantaNum(12), + 6: new ExpantaNum(9), } // Furnace Tabs @@ -304,6 +456,8 @@ const FC_GOAL = { const FN_TABBTN_SHOWN = { nfn: function() { return true }, efn: function() { return tmp.ach[111].has }, + magma: function() { return tmp.ach[131].has }, + plasma: function() { return tmp.ach[171].has }, } function isFNTabShown(name) { diff --git a/js/main/extreme/magma.js b/js/main/extreme/magma.js new file mode 100644 index 00000000..bde517e1 --- /dev/null +++ b/js/main/extreme/magma.js @@ -0,0 +1,92 @@ +function updateTempMagma() { + if (!tmp.fn.magma) tmp.fn.magma = {} + + tmp.fn.magma.eff = getMagmaEff() + tmp.fn.magma.eff2 = getMagmaReformEff() +} + +function getMagmaEff() { + if (!modeActive("extreme")) return new ExpantaNum(1); + let amt = player.magma.amount; + if (player.elementary.bosons.scalar.higgs.upgrades.includes("1;1;1")) amt = amt.pow(1.6); + let eff = amt.sqrt().div(75).plus(1) + return eff; +} + +function getMagmaReformEff() { + if (!modeActive("extreme")) return new ExpantaNum(1); + let eff = player.magma.ref.pow(2).div(2) + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[35]||0, 1)) eff = eff.times(ExpantaNum.pow(1.4, player.magma.ref)) + if (player.elementary.theory.tree.unl) { + eff = eff.times(player.elementary.theory.points.plus(1).log10().plus(1).log10().plus(1)) + if (player.elementary.theory.depth.gte(6)) eff = eff.pow(player.elementary.theory.strings.amounts[0].plus(1).log10().plus(1).log10().times(1.2).plus(1)) + } + return eff.plus(1); +} + +function getMagmaReqScaling() { + let s = 1 + if (player.elementary.bosons.scalar.higgs.upgrades.includes("1;1;1")) s /= 2 + if (tmp.fn.pl) s *= 1-tmp.fn.pl.boosts[10].toNumber(); + return s; +} + +function getMagmaReq() { + if (!modeActive("extreme")) return new ExpantaNum(1/0); + let req = ExpantaNum.pow(10, ExpantaNum.pow(1.25, player.magma.amount.times(getMagmaReqScaling())).times(200)) + return req; +} + +function getMagmaBulk() { + if (!modeActive("extreme")) return new ExpantaNum(0); + let req = player.furnace.enhancedCoal.max(1).log10().div(200).max(1).logBase(1.25).div(getMagmaReqScaling()) + return req.plus(1).floor(); +} + +function magmaSearch(max=false) { + if (!modeActive("extreme")) return; + if (player.furnace.enhancedCoal.lt(getMagmaReq())) return; + if (max) player.magma.amount = player.magma.amount.max(getMagmaBulk()); + else player.magma.amount = player.magma.amount.plus(1); +} + +function getMagmaReformReq() { + if (!modeActive("extreme")) return new ExpantaNum(1/0); + let r = player.magma.ref; + if (r.gte(28)) r = ExpantaNum.pow(1.1, r.sub(27)).times(28) + if (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl) r = r.pow(TREE_UPGS[34].effect(player.elementary.theory.tree.upgrades[34]||0)) + let req = r.times(2).plus(1) + return req.round(); +} + +function getMagmaReformReq2() { + if (!modeActive("extreme")) return new ExpantaNum(1/0); + let r = player.magma.ref; + if (r.gte(26)) r = ExpantaNum.pow(1.5, r.sub(25)).times(26) + if (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl) r = r.pow(TREE_UPGS[36].effect(player.elementary.theory.tree.upgrades[36]||0)) + let req = ExpantaNum.pow(1e20, r.pow(2)).times(1e60) + return req; +} + +function getMagmaReformBulk() { + if (!modeActive("extreme")) return new ExpantaNum(0); + let ret1 = player.magma.amount.div(2); + if (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl) ret1 = ret1.root(TREE_UPGS[34].effect(player.elementary.theory.tree.upgrades[34]||0)); + if (ret1.gte(28)) ret1 = ret1.div(28).logBase(1.1).plus(27); + let ret2 = player.inf.knowledge.div(1e60).max(1).logBase(1e20).sqrt(); + if (modeActive("extreme+hikers_dream")?hasDE(5):player.elementary.hc.unl) ret2 = ret2.root(TREE_UPGS[36].effect(player.elementary.theory.tree.upgrades[36]||0)); + if (ret2.gte(26)) ret2 = ret2.div(26).logBase(1.5).plus(25); + + return ret1.min(ret2).plus(1).floor(); +} + +function reformMagma(max=false) { + if (!modeActive("extreme")) return; + let req = getMagmaReformReq(); + if (player.magma.amount.lt(req)||player.inf.knowledge.lt(getMagmaReformReq2())) return; + if (max) player.magma.ref = player.magma.ref.max(getMagmaReformBulk()); + else { + player.magma.amount = player.magma.amount.sub(req); + player.magma.ref = player.magma.ref.plus(1); + } +} \ No newline at end of file diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js new file mode 100644 index 00000000..e9f59b6f --- /dev/null +++ b/js/main/extreme/plasma.js @@ -0,0 +1,197 @@ +function updateTempPlasma() { + if (!tmp.fn.pl) tmp.fn.pl = {} + tmp.fn.pl.unl = (modeActive("extreme") && tmp.ach[171].has) + tmp.fn.pl.exp = getPlasmaExp() + tmp.fn.pl.wfGain = getWhiteFlameGain() + if (!tmp.fn.pl.boosts) tmp.fn.pl.boosts = {}; + for (let i=1;i<=PLASMA_BOOSTS.upgs();i++) tmp.fn.pl.boosts[i] = player.plasma.boosts.gte(i)?PLASMA_BOOSTS[i].eff(player.plasma[PLASMA_BOOSTS[i].type=="plasmic"?"amount":"whiteFlame"].pow((i<9&&tmp.fn.pl.boosts[9])?tmp.fn.pl.boosts[9]:1)):PLASMA_BOOSTS[i].baseEff; +} + +function getPlasmaExp() { + if (tmp.fn?(!tmp.fn.pl.unl):true) return new ExpantaNum(0); + let exp = player.elementary.sky.amount.plus(1).log10().plus(1); + if (hasMltMilestone(13)) exp = exp.plus(player.inf.derivatives.unlocks); + if (tmp.fn.pl.boosts) exp = exp.times(tmp.fn.pl.boosts[2]) + if (player.elementary.entropy.upgrades.includes(24)) exp = exp.times(tmp.elm.entropy.upgEff[24]); + if (tmp.fn.pl.boosts) exp = exp.times(tmp.fn.pl.boosts[12]); + + let ach178amt = player.elementary.entropy.upgrades.includes(35)?2.5e4:250 + if (modeActive("extreme") && tmp.ach[178].has && exp.lt(ach178amt)) { + if (exp.lt(ach178amt/3)) exp = exp.times(2); + else exp = ExpantaNum.sub(ach178amt, ExpantaNum.div(ach178amt/3, ExpantaNum.div(ach178amt, ExpantaNum.sub(ach178amt, exp).times(1.5).max(0.001)))) + } + return exp; +} + +function getWhiteFlameGain() { + if (tmp.fn?(!tmp.fn.pl.unl):true) return new ExpantaNum(0); + let pl = player.plasma.amount.plus(1); + if (pl.gte(1e125)) pl = pl.log10().div(125).times(1e100).pow(1.25) + let gain = pl.pow(player.furnace.blueFlame.plus(1).sqrt().div(25)).sub(1); + if (hasMltMilestone(14)) gain = gain.times(10); + if (hasMltMilestone(17)) gain = gain.times(100); + if (hasMltMilestone(18)) gain = gain.times(ExpantaNum.pow(20, Math.max(mltMilestonesGotten()-17, 0))); + if (tmp.ach[191].has) gain = gain.times(5); + return gain; +} + +function getPlasmaBoostType(n, cap=false) { + n = new ExpantaNum(n).toNumber(); + let type = PLASMA_BOOSTS[n]?PLASMA_BOOSTS[n].type:"???"; + return cap?capitalFirst(type):type; +} + +function getPlasmaBoostReq() { + let bought = player.plasma.boosts; + let req = ExpantaNum.pow(50, bought.pow(1.25)).times(250) + return req; +} + +function getPlasmaBoostBulk() { + let amt = player.plasma.whiteFlame; + let target = amt.div(250).max(1).logBase(50).root(1.25) + return target.plus(1).floor(); +} + +function canBuyPlasmaBoost() { + return !(!PLASMA_BOOSTS[player.plasma.boosts.toNumber()+1]) +} + +function buyPlasmaBoost(max=false) { + if (tmp.fn?(!tmp.fn.pl.unl):true) return; + if (!canBuyPlasmaBoost()) return; + let cost = getPlasmaBoostReq(); + if (player.plasma.whiteFlame.lt(cost)) return; + if (max) player.plasma.boosts = player.plasma.boosts.max(getPlasmaBoostBulk()); + else { + player.plasma.whiteFlame = player.plasma.whiteFlame.sub(cost); + player.plasma.boosts = player.plasma.boosts.plus(1); + } +} + +const PLASMA_BOOSTS = { + upgs() { return 12 }, + rows: 4, + cols: 3, + 1: { + type: "plasmic", + desc: "The Extreme mode nerf to Foam gain starts later.", + baseEff: new ExpantaNum(1), + eff: function(amt) { + let eff = amt.plus(1).log10().times(tmp.fn.pl.exp).plus(1).pow(3); + if (tmp.fn.pl.boosts[11]) eff = eff.pow(tmp.fn.pl.boosts[11]); + return eff; + }, + effD: function(e) { return showNum(e)+"x later" }, + }, + 2: { + type: "gleaming", + desc: "Boost the Plasma Exponent.", + baseEff: new ExpantaNum(1), + eff: function(amt) { + let eff = amt.plus(1).log10().sqrt().div(2).plus(1); + if (tmp.fn.pl.boosts[11]) eff = eff.times(tmp.fn.pl.boosts[11]); + return eff; + }, + effD: function(e) { return showNum(e)+"x" }, + }, + 3: { + type: "plasmic", + desc: "All Pion/Spinor Upgrades are stronger.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return ExpantaNum.sub(1.5, ExpantaNum.div(1, amt.plus(1).log10().plus(1).log10().plus(1).pow(2))) }, + effD: function(e) { return showNum(e.sub(1).times(100))+"% stronger" }, + }, + 4: { + type: "gleaming", + desc: "Make all Rank Cheapener cost scalings start later.", + baseEff: new ExpantaNum(0), + eff: function(amt) { + let eff = amt.plus(1).log10().plus(1).log10().times(250); + if (tmp.fn.pl.boosts[11]) eff = eff.times(tmp.fn.pl.boosts[11]); + return eff; + }, + effD: function(e) { return showNum(e)+" later" }, + }, + 5: { + type: "plasmic", + desc: "Boost Pion/Spinor gain.", + baseEff: new ExpantaNum(1), + eff: function(amt) { + let mult = amt.plus(1).root(10); + if (mult.gte(1e250)) mult = ExpantaNum.pow(1e250, mult.logBase(1e250).sqrt()); + return mult; + }, + effD: function(e) { return showNum(e)+"x" }, + }, + 6: { + type: "gleaming", + desc: "Multiply the Derivative Boost Base.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return amt.plus(1).pow(1e4) }, + effD: function(e) { return showNum(e)+"x" }, + }, + 7: { + type: "plasmic", + desc: "EFU1 & EFU3 use stronger multipliers.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return amt.plus(1).root(200) }, + effD: function(e) { return showNum(e)+"x" }, + }, + 8: { + type: "gleaming", + desc: "EFU13's first effect & Skyrmion gain are buffed.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return amt.plus(1).log10().plus(1).log10().plus(1).sqrt() }, + effD: function(e) { return showNum(e)+"x" }, + }, + 9: { + type: "plasmic", + desc: "All previous Plasmic & Gleaming Boosts use their respective resource more effectively.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return amt.plus(1).times(10).slog(10).div(1.75).plus(1) }, + effD: function(e) { return "+"+showNum(e.sub(1).times(100))+"%" }, + }, + 10: { + type: "gleaming", + desc: "The Magma cost increases slower.", + baseEff: new ExpantaNum(0), + eff: function(amt) { return ExpantaNum.sub(0.95, ExpantaNum.div(0.95, amt.plus(1).log10().plus(1).log10().div(2).plus(1))) }, + effD: function(e) { return showNum(e.times(100))+"% slower" }, + }, + 11: { + type: "plasmic", + desc: "The first Plasmic Boost and the first two Gleaming Boosts are stronger based on your Best Entropy.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return amt.plus(1).log10().times(player.elementary.entropy.best.plus(1)).plus(1).log10().div(10).plus(1) }, + effD: function(e) { return showNum(e.sub(1).times(100))+"% stronger" }, + }, + 12: { + type: "gleaming", + desc: "Multiversal Energy boosts the Plasma exponent.", + baseEff: new ExpantaNum(1), + eff: function(amt) { return player.mlt.energy.times(amt.plus(1).log10()).plus(1).log10().cbrt().plus(1) }, + effD: function(e) { return showNum(e)+"x" }, + }, +} + +function setupPlasmaBoosts() { + let boosts = new Element("plasmaBoosts"); + let html = ""; + let data = PLASMA_BOOSTS; + let current = 1; + for (let r=1;r<=data.rows;r++) { + html += "
    " + for (let c=1;c<=data.cols;c++) { + let cd = data[current]; + if (!cd) continue; + html += "
    " + html += cd.desc+"

    " + html += "Currently: " + html += "
    " + current++; + } + html += "
    " + } + boosts.setHTML(html); +} \ No newline at end of file diff --git a/js/main/extreme/rankCheap.js b/js/main/extreme/rankCheap.js index eca2f342..e31e1464 100644 --- a/js/main/extreme/rankCheap.js +++ b/js/main/extreme/rankCheap.js @@ -132,7 +132,7 @@ function updateTempRankCheap() { tmp.rankCheap.free = new ExpantaNum(0); if (tmp.ach[21].has) tmp.rankCheap.free = tmp.rankCheap.free.plus(player.tier); if (tmp.ach[34].has) tmp.rankCheap.free = tmp.rankCheap.free.plus(1); - if (player.rf.gt(0)) tmp.rankCheap.free = tmp.rankCheap.free.plus(player.furnace.upgrades[1]); + if (player.rf.gt(0)) tmp.rankCheap.free = tmp.rankCheap.free.plus(player.furnace.upgrades[1].times(tmp.fn ? tmp.fn.upgPow : 1)); if (extremeStadiumActive("cranius", 2)) tmp.rankCheap.free = tmp.rankCheap.free.div(10).floor(); updateTempRankCheapCost() tmp.rankCheap.can = player.distance.gte(tmp.rankCheap.req); @@ -142,7 +142,7 @@ function updateTempRankCheap() { if (player.tr.upgrades.includes(22) && !HCCBA("noTRU") && modeActive("extreme")) tmp.rankCheap.pow = tmp.rankCheap.pow.times(player.collapse.cadavers.plus(1).times(10).slog(10).sqrt()); tmp.rankCheap.manPow = new ExpantaNum(1); - if (tmp.fn) if (tmp.fn.enh.unl) tmp.rankCheap.manPow = tmp.rankCheap.manPow.plus(ExpantaNum.mul(tmp.fn.enh.upg2eff, player.furnace.enhancedUpgrades[1].plus(tmp.fn.enh.upgs[2].extra))) + if (tmp.fn) if (tmp.fn.enh.unl) tmp.rankCheap.manPow = tmp.rankCheap.manPow.plus(ExpantaNum.mul(tmp.fn.enh.upg2eff, player.furnace.enhancedUpgrades[1].plus(tmp.fn.enh.upgs[2].extra).times(tmp.fn.enh.upgPow))) tmp.rankCheap.eff = getRankCheapEff(); tmp.rankCheap.eff2 = getRankCheapEff2(); if (!tmp.rankCheap.onReset) tmp.rankCheap.onReset = function(prev) { @@ -152,4 +152,4 @@ function updateTempRankCheap() { } }; if (!tmp.rankCheap.updateOnReset) tmp.rankCheap.updateOnReset = function() { updateTempRankCheapCost(); } -} +} \ No newline at end of file diff --git a/js/main/extreme/stadium.js b/js/main/extreme/stadium.js index f134e42e..f3bfe663 100644 --- a/js/main/extreme/stadium.js +++ b/js/main/extreme/stadium.js @@ -19,7 +19,8 @@ function extremeStadDiffLevel(name) { } function extremeStadiumActive(name, rank=1) { - if (!modeActive("extreme")) return false + if (!modeActive("extreme")) return false; + if (rank <= HCTVal(name)) return true; let active = player.inf.stadium.current == name; let l = player.extremeStad.length + 1; if (player.extremeStad.includes(name)) diff --git a/js/main/hd.js b/js/main/hd.js index 164c17da..01a34db4 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -25,6 +25,16 @@ const ENERGY_UPG_COSTS = { 24: new ExpantaNum(4e16), 25: new ExpantaNum(1e25), 26: new ExpantaNum(2.975e33), + 27: new ExpantaNum(1e120), + 28: new ExpantaNum(1.5e124), + 29: new ExpantaNum(5e215), + 30: new ExpantaNum(1e226), + 31: new ExpantaNum('2e336'), + 32: new ExpantaNum('2e447'), + 33: new ExpantaNum('1e451'), + 34: new ExpantaNum('3e472'), + 35: new ExpantaNum('4e543'), + 36: new ExpantaNum('1e587'), } function getEnergyUpgCost(n){ @@ -48,7 +58,7 @@ function getBaseMotiveScalingStart(){ } function getBaseMotive(){ - let z = player.rank.plus(1).times(player.tier.plus(1).pow(2)).times(tmp.hd.incline.plus((player.energyUpgs.includes(13)&&tmp.hd.enerUpgs) ? tmp.hd.enerUpgs[13] : 0).div(90).plus(1)) + let z = player.rank.plus(1).times(player.tier.plus(1).pow(2)).times(tmp.hd.incline.plus((player.energyUpgs.includes(13)&&tmp.hd.enerUpgs) ? tmp.hd.enerUpgs[13] : 0).div(90).plus(1)).times((player.energyUpgs.includes(28)&&tmp.hd.enerUpgs)?tmp.hd.enerUpgs[28]:1) let y = getBaseMotiveScalingStart() if (tmp.ach) if (z.gt(y) && modeActive("extreme") && !tmp.ach[87].has) return z.div(y).pow(.5).times(y) return z @@ -111,8 +121,14 @@ function getConfidenceOneEffect(){ return co1 } +function getThrusterBoost() { + let tb = new ExpantaNum(1); + if (player.energyUpgs.includes(36) && tmp.hd.enerUpgs) tb = tb.times(tmp.hd.enerUpgs[36].div(100).plus(1)) + return tb; +} + function updateEnergyLoss(){ - tmp.hd.energyLoss = tmp.hd.inclineRed.pow(getEnergyLossExp()) + tmp.hd.energyLoss = tmp.hd.inclineRed.eq(0)?new ExpantaNum(1/0):tmp.hd.inclineRed.pow(getEnergyLossExp()) if (player.energyUpgs.includes(2) && tmp.hd.enerUpgs) tmp.hd.energyLoss = tmp.hd.energyLoss.div(tmp.hd.enerUpgs[2]) if (modeActive("extreme")){ if (tmp.ach) if (tmp.ach[61].has) tmp.hd.energyLoss = tmp.hd.energyLoss.div(Math.max(player.tr.upgrades.length, 1)) @@ -120,72 +136,165 @@ function updateEnergyLoss(){ } } -function updateTempHikersDream() { - if (!tmp.hd) tmp.hd = {} - - tmp.hd.superEn = player.genLvl.pow(2).times(player.geners).floor() - tmp.hd.superEnEff = tmp.hd.superEn.plus(1).pow(player.geners).log10().plus(1).log10().plus(1).pow(2).times(player.geners) - tmp.hd.superEnEff2 = tmp.hd.superEn.times(player.geners.sub(1)).plus(1).times(10).slog(10).max(1).log10().times(1.6).plus(player.inf.endorsements.gt(25)?0.011:0).plus(1).times((tmp.hd.enerUpgs&&player.energyUpgs.includes(26)) ? tmp.hd.enerUpgs[26].div(100).plus(1) : 1) +function calcEnergyUpgrades(){ + tmp.hd.tb = getThrusterBoost(); - if (tmp.hd.futureIncl?tmp.hd.futureIncl.length>0:false) { - tmp.hd.incline = tmp.hd.futureIncl[0] - tmp.hd.futureIncl.shift(); - } else tmp.hd.incline = baseIncline(player.distance) - tmp.hd.inclinePow = new ExpantaNum(1) - if (player.energyUpgs.includes(4) && tmp.hd.enerUpgs) tmp.hd.inclinePow = tmp.hd.inclinePow.times(tmp.hd.enerUpgs[4]) - let incl = tmp.hd.incline - if (incl.gte(89.95)) incl = ExpantaNum.sub(90, ExpantaNum.div(90, ExpantaNum.div(90, ExpantaNum.sub(90, incl)).pow(2).div(1800))) - tmp.hd.inclineRed = ExpantaNum.sub(90, incl).div(90).root(tmp.hd.inclinePow) - updateEnergyLoss() - - tmp.hd.totalMotive = getBaseMotive() - if (player.energyUpgs.includes(3) && tmp.hd.enerUpgs) tmp.hd.totalMotive = tmp.hd.totalMotive.times(tmp.hd.enerUpgs[3]) - if (player.inf.endorsements.gte(10)) tmp.hd.totalMotive = tmp.hd.totalMotive.times(tmp.hd.superEnEff) - tmp.hd.motive = tmp.hd.totalMotive.sub(player.spentMotive).sub(player.spentMotiveGens).max(0); - if (player.energyUpgs.includes(24)) tmp.hd.motive = tmp.hd.motive.max(tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : 0) - tmp.hd.enEff = player.energy.div(100) - if (player.energyUpgs.includes(1) && tmp.hd.enerUpgs) tmp.hd.enEff = tmp.hd.enEff.times(tmp.hd.enerUpgs[1]) - - tmp.hd.simEn = player.energy.min(getEnergyLim()).max(tmp.hd.superEn) - if (tmp.hd.simEn.gt(100)) tmp.hd.simEn = tmp.hd.simEn.log10().times(50) if (!tmp.hd.enerUpgs) tmp.hd.enerUpgs = {} + tmp.hd.enerUpgs[1] = getOptimizationOneEffect() if (tmp.hd.enerUpgs[1].gte("1e2500")) tmp.hd.enerUpgs[1] = tmp.hd.enerUpgs[1].logBase("1e2500").pow(825).times("1e2500").min(tmp.hd.enerUpgs[1]) + let exp1 = 1 + (player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;1") ? player.elementary.bosons.scalar.higgs.upgrades.length : 0) + if (player.energyUpgs.includes(27) && tmp.hd.enerUpgs[27] != undefined) exp1 *= tmp.hd.enerUpgs[27].toNumber() + tmp.hd.enerUpgs[1] = tmp.hd.enerUpgs[1].pow(exp1) + tmp.hd.enerUpgs[2] = tmp.hd.motive.max(player.energyUpgs.includes(6)?1:0).plus(1).log10().times(2).plus(1).pow((player.energyUpgs.includes(6)&&tmp.hd.enerUpgs[6]) ? tmp.hd.enerUpgs[6].div(100).plus(1) : 1).pow(tmp.hd.superEnEff2) if (tmp.ach) if (tmp.ach[85].has && modeActive("extreme+hikers_dream")) tmp.hd.enerUpgs[2] = tmp.hd.enerUpgs[2].pow(2) + tmp.hd.enerUpgs[3] = getConfidenceOneEffect() if (tmp.hd.enerUpgs[3].gte(1e24)) tmp.hd.enerUpgs[3] = tmp.hd.enerUpgs[3].log10().pow(1.5).times(1e24/24).min(tmp.hd.enerUpgs[3]) if (tmp.ach) if (tmp.ach[123].has) tmp.hd.enerUpgs[3] = tmp.hd.enerUpgs[3].times(10) - tmp.hd.enerUpgs[4] = player.rockets.plus(1).times(10).slog(10).times((player.energyUpgs.includes(8)&&tmp.hd.enerUpgs[8]) ? (tmp.hd.enerUpgs[8].div(100).plus(1)) : 1).times(tmp.hd.superEnEff2) + + tmp.hd.enerUpgs[4] = player.rockets.plus(1).times(10).slog(10).times((player.energyUpgs.includes(8)&&tmp.hd.enerUpgs[8]) ? (tmp.hd.enerUpgs[8].div(100).plus(1)) : 1).times(tmp.hd.superEnEff2).pow(tmp.hd.tb) if (tmp.hd.enerUpgs[4].gte(32.5)) tmp.hd.enerUpgs[4] = tmp.hd.enerUpgs[4].logBase(2).pow(2.157034).min(tmp.hd.enerUpgs[4]) + tmp.hd.enerUpgs[5] = tmp.hd.simEn.plus(1).times(10).slog(10).sub(1).times(100).times((player.energyUpgs.includes(9)&&tmp.hd.enerUpgs[9])?tmp.hd.enerUpgs[9].div(100).plus(1):1).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[6] = tmp.hd.simEn.plus(1).times(10).slog(10).sub(1).times(100).times((player.energyUpgs.includes(10)&&tmp.hd.enerUpgs[10])?tmp.hd.enerUpgs[10].div(100).plus(1):1).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[7] = tmp.hd.totalMotive.plus(1).times(10).slog(10).sub(1).times(100).times((player.energyUpgs.includes(11)&&tmp.hd.enerUpgs[11])?tmp.hd.enerUpgs[11].div(100).plus(1):1).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[8] = tmp.hd.incline.plus((player.energyUpgs.includes(13)&&tmp.hd.enerUpgs[13]) ? tmp.hd.enerUpgs[13] : 0).div(90).times(100).times((player.energyUpgs.includes(12)&&tmp.hd.enerUpgs[12])?tmp.hd.enerUpgs[12].div(100).plus(1):1).times(tmp.hd.superEnEff2) + + tmp.hd.enerUpgs[8] = tmp.hd.incline.plus((player.energyUpgs.includes(13)&&tmp.hd.enerUpgs[13]) ? tmp.hd.enerUpgs[13] : 0).div(90).times(100).times((player.energyUpgs.includes(12)&&tmp.hd.enerUpgs[12])?tmp.hd.enerUpgs[12].div(100).plus(1):1).times(tmp.hd.superEnEff2).pow(tmp.hd.tb) + tmp.hd.enerUpgs[9] = player.tr.cubes.plus(1).log10().plus(1).log10().times(100).times((player.energyUpgs.includes(16)&&tmp.hd.enerUpgs[16])?tmp.hd.enerUpgs[16].div(100).plus(1):1).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[10] = player.tr.cubes.plus(1).log10().plus(1).log10().pow(0.1).times(10).times((player.energyUpgs.includes(17)&&tmp.hd.enerUpgs[17])?tmp.hd.enerUpgs[17].div(100).plus(1):1).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[11] = player.tr.cubes.plus(1).log10().plus(1).log10().sqrt().times(50).times((player.energyUpgs.includes(18)&&tmp.hd.enerUpgs[18])?tmp.hd.enerUpgs[18].div(100).plus(1):1).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[12] = player.tr.cubes.plus(1).log10().plus(1).log10().pow(0.2).times(20).times((player.energyUpgs.includes(19)&&tmp.hd.enerUpgs[19])?tmp.hd.enerUpgs[19].div(100).plus(1):1).times(tmp.hd.superEnEff2) + + tmp.hd.enerUpgs[12] = player.tr.cubes.plus(1).log10().plus(1).log10().pow(0.2).times(20).times((player.energyUpgs.includes(19)&&tmp.hd.enerUpgs[19])?tmp.hd.enerUpgs[19].div(100).plus(1):1).times(tmp.hd.superEnEff2).pow(tmp.hd.tb) if (tmp.ach) if (tmp.hd.enerUpgs[12] && modeActive("extreme+hikers_dream") && tmp.ach[66].has) tmp.hd.enerUpgs[12] = tmp.hd.enerUpgs[12].plus(ExpantaNum.min(40, ExpantaNum.sqrt(tmp.hd.enerUpgs[12]).times(4))) + tmp.hd.enerUpgs[13] = new ExpantaNum(6).times((player.energyUpgs.includes(14)&&tmp.hd.enerUpgs[14]) ? tmp.hd.enerUpgs[14].div(100).plus(1) : 1).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[14] = ExpantaNum.sub(3, ExpantaNum.div(2, player.pathogens.amount.plus(1).log10().plus(1).log10().plus(1))).times((player.energyUpgs.includes(15)&&tmp.hd.enerUpgs[15]) ? tmp.hd.enerUpgs[15].div(100).plus(1) : 1).sub(1).times(100).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[15] = ExpantaNum.sub(1.5, ExpantaNum.div(0.5, player.pathogens.amount.plus(1).log10().plus(1).log10().plus(1).log10().plus(1))).sub(1).times(100).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[16] = player.collapse.cadavers.plus(1).log10().plus(1).log10().times((player.energyUpgs.includes(20)&&tmp.hd.enerUpgs[20]) ? tmp.hd.enerUpgs[20].div(100).plus(1) : 1).times(100).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[17] = player.collapse.lifeEssence.plus(1).log10().plus(1).log10().pow(0.1).times((player.energyUpgs.includes(20)&&tmp.hd.enerUpgs[20]) ? tmp.hd.enerUpgs[20].div(100).plus(1) : 1).times(10).times(tmp.hd.superEnEff2) + tmp.hd.enerUpgs[18] = player.pathogens.amount.plus(1).log10().plus(1).log10().sqrt().times((player.energyUpgs.includes(20)&&tmp.hd.enerUpgs[20]) ? tmp.hd.enerUpgs[20].div(100).plus(1) : 1).times(50).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[19] = player.pathogens.amount.plus(1).log10().plus(1).log10().pow(0.2).times((player.energyUpgs.includes(20)&&tmp.hd.enerUpgs[20]) ? tmp.hd.enerUpgs[20].div(100).plus(1) : 1).times(100).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[20] = tmp.hd.motive.max(player.inf.endorsements.gte(10)?tmp.hd.totalMotive:0).plus(2).log10().times(tmp.hd.simEn.div(4.5).plus(10)).times((player.energyUpgs.includes(21)&&tmp.hd.enerUpgs[21]) ? tmp.hd.enerUpgs[21].div(100).plus(1) : 1).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[21] = tmp.hd.superEn.plus(1).log10().plus(1).log10().plus(1).sqrt().sub(1).times(100).times((player.energyUpgs.includes(22)&&tmp.hd.enerUpgs[22]) ? tmp.hd.enerUpgs[22].div(100).plus(1) : 1).times((player.energyUpgs.includes(23)&&tmp.hd.enerUpgs[23]) ? tmp.hd.enerUpgs[23].div(100).plus(1) : 1).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[22] = tmp.hd.superEn.plus(1).log10().plus(1).log10().plus(1).sub(1).times(135).times((player.energyUpgs.includes(23)&&tmp.hd.enerUpgs[23]) ? tmp.hd.enerUpgs[23].div(100).plus(1) : 1).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[23] = tmp.hd.superEn.plus(1).log10().plus(1).log10().plus(1).sqrt().sub(1).times(105).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[24] = player.bestMotive.sqrt().times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[25] = player.bestMotive.plus(1).log10().plus(1).log10().plus(1).log10().plus(1).times(tmp.hd.superEnEff2) - tmp.hd.enerUpgs[26] = player.bestMotive.plus(1).times(10).slog(10).max(1).sub(1).times(12) + + tmp.hd.enerUpgs[19] = player.pathogens.amount.plus(1).log10().plus(1).log10().pow(0.2).times((player.energyUpgs.includes(20)&&tmp.hd.enerUpgs[20]) ? tmp.hd.enerUpgs[20].div(100).plus(1) : 1).times(100).times(tmp.hd.superEnEff2).pow(tmp.hd.tb) + + let exp322 = player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;1") ? 2 : 1 + let omniPow = 1 + if (player.energyUpgs.includes(30)&&tmp.hd.enerUpgs[30]) omniPow = tmp.hd.enerUpgs[30].div(100).plus(1) + if (player.energyUpgs.includes(31)&&tmp.hd.enerUpgs[31]) omniPow = ExpantaNum.mul(omniPow, tmp.hd.enerUpgs[31].div(100).plus(1)); + + tmp.hd.enerUpgs[20] = tmp.hd.motive.max(player.inf.endorsements.gte(10)?tmp.hd.totalMotive:0).plus(2).log10().times(tmp.hd.simEn.div(4.5).plus(10)).times((player.energyUpgs.includes(21)&&tmp.hd.enerUpgs[21]) ? tmp.hd.enerUpgs[21].div(100).plus(1) : 1).times(tmp.hd.superEnEff2).times(omniPow).times(.01).plus(1).pow(exp322).minus(1).times(100) + + tmp.hd.enerUpgs[21] = tmp.hd.superEn.plus(1).log10().plus(1).log10().plus(1).sqrt().sub(1).times(100).times((player.energyUpgs.includes(22)&&tmp.hd.enerUpgs[22]) ? tmp.hd.enerUpgs[22].div(100).plus(1) : 1).times((player.energyUpgs.includes(23)&&tmp.hd.enerUpgs[23]) ? tmp.hd.enerUpgs[23].div(100).plus(1) : 1).times(tmp.hd.superEnEff2).times(omniPow).times(.01).plus(1).pow(exp322).minus(1).times(100) + + tmp.hd.enerUpgs[22] = tmp.hd.superEn.plus(1).log10().plus(1).log10().plus(1).sub(1).times(135).times((player.energyUpgs.includes(23)&&tmp.hd.enerUpgs[23]) ? tmp.hd.enerUpgs[23].div(100).plus(1) : 1).times(tmp.hd.superEnEff2).times(omniPow).times(.01).plus(1).pow(exp322).minus(1).times(100) + + tmp.hd.enerUpgs[23] = tmp.hd.superEn.plus(1).log10().plus(1).log10().plus(1).sqrt().sub(1).times(105).times(tmp.hd.superEnEff2).times(omniPow).times(.01).plus(1).pow(exp322).minus(1).times(100) + + tmp.hd.enerUpgs[24] = player.bestMotive.sqrt().times(tmp.hd.superEnEff2).pow(player.elementary.bosons.scalar.higgs.upgrades.includes("0;0;1") ? 1.8 : 1) + + let exp25 = player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;2") ? 10 : 1 + tmp.hd.enerUpgs[25] = player.bestMotive.plus(1).log10().plus(1).log10().plus(1).log10().plus(1).times(tmp.hd.superEnEff2).pow(exp25).pow(exp322) + + let mult26 = Math.sqrt(1 + player.elementary.bosons.scalar.higgs.upgrades.length) + let eff26 = 12 * (player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;1") ? mult26 : 1) + tmp.hd.enerUpgs[26] = player.bestMotive.plus(1).times(10).slog(10).max(1).sub(1).times(eff26).times(.01).plus(1).pow(exp322).minus(1).times(100) + + tmp.hd.enerUpgs[27] = player.elementary.hc.best.plus(1) + + tmp.hd.enerUpgs[28] = player.elementary.hc.hadrons.plus(1) + + tmp.hd.enerUpgs[29] = player.energy.plus(1).log10().div(40).plus(1); + + tmp.hd.enerUpgs[30] = player.elementary.entropy.best.plus(1).log10().times(555); + if (player.energyUpgs.includes(31)&&tmp.hd.enerUpgs[31]) tmp.hd.enerUpgs[30] = ExpantaNum.mul(tmp.hd.enerUpgs[30], tmp.hd.enerUpgs[31].div(100).plus(1)); + + tmp.hd.enerUpgs[31] = player.mlt.totalEnergy.plus(1).log10().plus(1).log10().times(1.5e3); + + tmp.hd.enerUpgs[32] = (1-Math.pow(0.75, player.mlt.highestCompleted*(player.mlt.active>0?1.5:1)))*100; + + tmp.hd.enerUpgs[33] = ExpantaNum.sub(1, ExpantaNum.div(1, player.energy.plus(1).log10().plus(1).log10().plus(1).log10().times(2).plus(1))).times(100); + + tmp.hd.enerUpgs[34] = player.rank.plus(1).root(10); + + tmp.hd.enerUpgs[35] = player.energy.plus(1).log10().plus(1).log10().div(2.5).plus(1); + + tmp.hd.enerUpgs[36] = player.distance.plus(1).log10().plus(1).log10().plus(1).log10().cbrt().times(40) + if (tmp.ach && tmp.ach[197].has && !modeActive("extreme")) tmp.hd.enerUpgs[36] = tmp.hd.enerUpgs[36].times(1.125); +} + +function updateMotive(){ + tmp.hd.totalMotive = getBaseMotive() + if (player.energyUpgs.includes(3) && tmp.hd.enerUpgs) tmp.hd.totalMotive = tmp.hd.totalMotive.times(tmp.hd.enerUpgs[3]) + if (player.inf.endorsements.gte(10)) tmp.hd.totalMotive = tmp.hd.totalMotive.times(tmp.hd.superEnEff) + if (player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;2") && tmp.hd.enerUpgs != undefined) tmp.hd.totalMotive = tmp.hd.totalMotive.times(tmp.hd.enerUpgs[25] || 1) + tmp.hd.motive = tmp.hd.totalMotive.sub(player.spentMotive).sub(player.spentMotiveGens).max(0); + if (player.energyUpgs.includes(24)) tmp.hd.motive = tmp.hd.motive.max(tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : 0) + +} + +function updateTempHikersDream() { + if (!tmp.hd) tmp.hd = {} + + tmp.hd.superEn = player.genLvl.pow(2).times(player.geners).floor() + tmp.hd.superEnEff = tmp.hd.superEn.plus(1).pow(player.geners).log10().plus(1).log10().plus(1).pow(2).times(player.geners) + if (player.energyUpgs.includes(29)&&tmp.hd.enerUpgs) { + tmp.hd.superEn = tmp.hd.superEn.pow(tmp.hd.enerUpgs[29]).floor(); + tmp.hd.superEnEff = tmp.hd.superEnEff.pow(tmp.hd.enerUpgs[29]); + } + tmp.hd.superEnEff2 = tmp.hd.superEn.times(player.geners.sub(1)).plus(1).times(10).slog(10).max(1).log10().times(1.6).plus(player.inf.endorsements.gt(25)?0.011:0).plus(1).times((tmp.hd.enerUpgs&&player.energyUpgs.includes(26)) ? tmp.hd.enerUpgs[26].div(100).plus(1) : 1) + if (player.elementary.bosons.scalar.higgs.upgrades.includes("1;3;0") && tmp.elm != undefined) tmp.hd.superEnEff2 = tmp.hd.superEnEff2.times(tmp.elm.bos["higgs_1;3;0"]()) + + if (tmp.hd.futureSec?tmp.hd.futureSec.length>0:false) { + tmp.hd.secant = tmp.hd.futureSec[0] + tmp.hd.futureSec.shift(); + } else tmp.hd.secant = baseSecant(player.distance) + if (tmp.hd.futureIncl?tmp.hd.futureIncl.length>0:false) { + tmp.hd.incline = tmp.hd.futureIncl[0] + tmp.hd.futureIncl.shift(); + } else tmp.hd.incline = baseIncline(player.distance) + tmp.hd.inclinePow = new ExpantaNum(1) + if (player.energyUpgs.includes(4) && tmp.hd.enerUpgs) tmp.hd.inclinePow = tmp.hd.inclinePow.times(tmp.hd.enerUpgs[4]) + let incl = tmp.hd.incline + if (incl.gte(89.95)) incl = ExpantaNum.sub(90, ExpantaNum.div(90, ExpantaNum.div(90, ExpantaNum.sub(90, incl)).pow(2).div(1800))) + if (incl.gte(89.999)) { + let sec = tmp.hd.secant; + if (sec.gte(1e6)) sec = ExpantaNum.pow(1.002, sec.sub(1e6)).times(sec); + if (sec.gte(20)) sec = sec.pow(2).div(20) + tmp.hd.inclineRed = sec.times(90).root(tmp.hd.inclinePow.times(-1)) + } else tmp.hd.inclineRed = ExpantaNum.sub(90, incl).div(90).root(tmp.hd.inclinePow) + updateEnergyLoss() + + updateMotive() + + tmp.hd.enEff = player.energy.div(100) + if (player.energyUpgs.includes(1) && tmp.hd.enerUpgs) tmp.hd.enEff = tmp.hd.enEff.times(tmp.hd.enerUpgs[1]) + if (((player.elementary.theory.active&&player.elementary.theory.depth.gte(20))||HCTVal("tv").gte(20)) && tmp.elm) tmp.hd.enEff = tmp.hd.enEff.pow(tmp.elm.theory.nerf) + if (player.energyUpgs.includes(33)) tmp.hd.enEff = tmp.hd.enEff.pow(20); + + tmp.hd.simEn = player.energy.min(getEnergyLim()).max(tmp.hd.superEn) + if (tmp.hd.simEn.gt(100)) tmp.hd.simEn = tmp.hd.simEn.log10().times(50) + + calcEnergyUpgrades() tmp.hd.energyGen = ExpantaNum.pow(2, player.genLvl.times(player.energy.plus(1).logBase(1.004).sqrt()).sqrt()).sub(1).times(player.geners) + if (player.genLvl.gte(1)) tmp.hd.energyGen = tmp.hd.energyGen.max(1) + if (player.elementary.bosons.scalar.higgs.upgrades.includes("0;3;1")) tmp.hd.energyGen = tmp.hd.energyGen.pow(2) + if (tmp.ach) if (tmp.ach[143].has) tmp.hd.energyGen = tmp.hd.energyGen.times(1e7) } function quickReset() { + player.canRefill = true tmp.ranks.layer.reset(true) } @@ -214,6 +323,8 @@ function buyEnergyUpg(x) { } function isEnergyUpgShown(x) { + if (player.elementary.bosons.scalar.higgs.upgrades.includes("0;0;0") && x <= 26) return true + //change to the max upgrades if you ever add upgrades if (x<=3) return true; else if (x<=8) return player.rf.gte(1) || player.automation.unl || player.collapse.unl||player.inf.unl else if (x<=13) return player.tr.unl || player.collapse.unl || player.inf.unl @@ -221,6 +332,10 @@ function isEnergyUpgShown(x) { else if (x<=23) return player.inf.endorsements.gte(10) else if (x<=25) return player.inf.endorsements.gte(15) else if (x<=26) return player.inf.endorsements.gte(28) + else if (x<=28) return player.achievements.includes(154) + else if (x<=30) return player.achievements.includes(171) + else if (x<=35) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); + else if (x<=36) return (player.achievements.includes(181) || player.mlt.totalEnergy.gt(0)) && !modeActive("extreme"); return false; } @@ -228,10 +343,21 @@ function isEnergyUpgShown(x) { function baseIncline(d) { if (d.gte(4.4e26)) d = d.pow(2).div(4.4e26) if (d.gte("4.4e2026")) d = d.pow(5).div(ExpantaNum.pow("4.4e2026", 4)) + if (player.energyUpgs.includes(32)&&tmp.hd.enerUpgs&&tmp.hd.enerUpgs[32]) d = d.pow(1-tmp.hd.enerUpgs[32]/100); + if (player.energyUpgs.includes(34)&&tmp.hd.enerUpgs&&tmp.hd.enerUpgs[34]) d = d.root(tmp.hd.enerUpgs[34]) let incl = d.gte(1e3) ? ExpantaNum.sub(90, ExpantaNum.div(90, d.div(1e3).log10().div(10).plus(1))) : new ExpantaNum(0) return incl.max(0) } +function baseSecant(d) { + if (d.gte(4.4e26)) d = d.pow(2).div(4.4e26) + if (d.gte("4.4e2026")) d = d.pow(5).div(ExpantaNum.pow("4.4e2026", 4)) + if (player.energyUpgs.includes(32)&&tmp.hd.enerUpgs&&tmp.hd.enerUpgs[32]) d = d.pow(1-tmp.hd.enerUpgs[32]/100); + if (player.energyUpgs.includes(34)&&tmp.hd.enerUpgs&&tmp.hd.enerUpgs[34]) d = d.root(tmp.hd.enerUpgs[34]) + let incl = d.gte(1e3) ? d.div(1e3).log10().div(10).plus(1).div(90) : new ExpantaNum(0) + return incl.max(0) +} + function calcInclines() { if (!tmp.hd) tmp.hd = {} let d = player.distance @@ -239,19 +365,25 @@ function calcInclines() { let v = new ExpantaNum(baseV) let maxError = 1.001 let incl = baseIncline(d) + let sec = baseSecant(d) let newIncl = new ExpantaNum(90) + let newSecant = new ExpantaNum(1/0) let reduc; let a = tmp.acc||new ExpantaNum(1/0) let iter = 0 tmp.hd.futureIncl = [] - while (newIncl.div(incl).gt(maxError)&&iter<25) { + tmp.hd.futureSec = [] + while (newIncl.div(incl).gt(maxError)&&newSecant.div(sec).gt(maxError)&&iter<25) { incl = baseIncline(d) + sec = baseSecant(d) reduc = ExpantaNum.sub(90, incl).div(90) v = v.plus(a.pow(reduc).div(50)) d = player.distance.plus(adjustGen(v, "dist").times(tmp.hd.enEff?tmp.hd.enEff:player.energy).times(nerfActive("noTS") ? 1 : tmp.timeSpeed).div(50)) newIncl = baseIncline(d) + newSecant = baseSecant(d) iter++ tmp.hd.futureIncl.push(newIncl) + tmp.hd.futureSec.push(newSecant) } } @@ -259,7 +391,7 @@ function calcInclines() { const EN_TABBTN_SHOWN = { mainEN: function() { return true }, - generator: function() { return player.inf.endorsements.gte(10) }, + generator: function() { return player.inf.endorsements.gte(10) || player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0") }, } function isENTabShown(name) { @@ -304,6 +436,8 @@ function getEnergyLim() { function getGenCost() { let g = player.genLvl.div(player.geners.pow(0.2)) if (g.gte(5)) g = ExpantaNum.pow(1.2, g.sub(5)).times(g) + if (modeActive("extreme+hikers_dream") && g.gte(11)) g = g.sub(11).div(2).plus(11); + if (player.energyUpgs.includes(33)&&tmp.hd.enerUpgs[33]) g = g.times(ExpantaNum.sub(1, tmp.hd.enerUpgs[33].div(100))); let cost = ExpantaNum.pow(8, ExpantaNum.pow(2, g.pow(0.75)).sub(1)).times(2.5e9) return cost } @@ -328,8 +462,11 @@ function respecGens() { function getNewGenCost() { let g = player.geners.sub(1) - if (g.gte(5)) g = ExpantaNum.pow(1.2, g.sub(5)).times(g) - let cost = ExpantaNum.pow(2, g.plus(1).pow(3)).times(5e29) + let scaleStart = modeActive("extreme+hikers_dream")?6:5 + let scalePower = modeActive("extreme+hikers_dream")?0.5:1 + if (g.gte(scaleStart)) g = ExpantaNum.pow((1+scalePower/5), g.sub(scaleStart)).times(g) + if (player.energyUpgs.includes(33)&&tmp.hd.enerUpgs[33]) g = g.times(ExpantaNum.sub(1, tmp.hd.enerUpgs[33].div(100))); + let cost = ExpantaNum.pow(2, g.plus(1).pow(modeActive("extreme+hikers_dream")?2.75:3)).times(5e29) return cost } diff --git a/js/main/inf.js b/js/main/inf.js index ea60e315..80812f26 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -59,7 +59,7 @@ function updateTempInfUpgs() { showNum(INF_UPGS.effects[id]()["knowledge"]) + "x" ); - else if (id=="10;1") return "Superscaled Pathogen Upgrades: "+showNum(INF_UPGS.effects[id]("pth").times(100))+" % weaker, Snap: +"+formatDistance(INF_UPGS.effects[id]("snp"))+"/sec" + else if (id=="10;1") return "Superscaled Pathogen Upgrades: "+showNum(INF_UPGS.effects[id]("pth").times(100))+" % weaker, "+(hasMltMilestone(16)?"Final Derivative":"Snap")+": +"+formatDistance(INF_UPGS.effects[id]("snp"))+"/sec" else if (id == "2;7" || id == "8;6" || id == "9;6" || id=="1;10") return showNum(INF_UPGS.effects[id]().times(100)) + "% weaker"; else if (id == "3;2") @@ -124,7 +124,7 @@ function updateTempInfUpgs() { if (!tmp.inf.upgs.desc) tmp.inf.upgs.desc = function (sel) { if (sel === undefined) return ""; return ( - INF_UPGS.descs[sel] + + ((sel=="10;1"&&hasMltMilestone(16))?"Superscaled Pathogen Upgrade scaling is weaker based on your Ascension Power, and Distance produces your last Derivative at a reduced rate (unaffected by Time Speed)":INF_UPGS.descs[sel]) + "
    " + (!tmp.inf.upgs.has(sel) ? "Cost: " + @@ -160,15 +160,11 @@ function updateTempInfUpgs() { }; } -function updateTempInfLayer() { - tmp.inf.fp = new ExpantaNum(1); - tmp.inf.bc = INF_UNL; - tmp.inf.emPow = new ExpantaNum(1); - tmp.inf.knowledgeBase = ExpantaNum.pow(ExpantaNum.pow(2, tmp.inf.emPow), player.inf.endorsements).times( - player.inf.endorsements - ); +function calcKnowledgeGain(){ + tmp.inf.knowledgeBase = ExpantaNum.pow(ExpantaNum.pow(2, tmp.inf.emPow), player.inf.endorsements).times(player.inf.endorsements); if (tmp.inf.upgs.has("2;8")) tmp.inf.knowledgeBase = tmp.inf.knowledgeBase.times(INF_UPGS.effects["2;8"]()); if (tmp.inf.upgs.has("2;10")) tmp.inf.knowledgeBase = tmp.inf.knowledgeBase.times(3) + if (ExpantaNum.gte(player.elementary.theory.tree.upgrades[42]||0, 1) && hasDE(6)) tmp.inf.knowledgeBase = tmp.inf.knowledgeBase.times(TREE_UPGS[42].effect(player.elementary.theory.tree.upgrades[42]||0)) tmp.inf.knowledgeExp = new ExpantaNum(1); if (tmp.inf.upgs.has("1;7")) tmp.inf.knowledgeExp = tmp.inf.knowledgeExp.times(1.25); if (tmp.inf.upgs.has("2;10")) tmp.inf.knowledgeExp = tmp.inf.knowledgeExp.times(1.15); @@ -185,12 +181,10 @@ function updateTempInfLayer() { if (tmp.ach[108].has) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(1.5); if (FCComp(3)) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(3.2); if (extremeStadiumComplete("cranius")) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(EXTREME_STADIUM_DATA.cranius.effect()) - if (tmp.elm) - if (player.elementary.times.gt(0)) - tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.elm.ferm.quarkR("charm").max(1)); - if (tmp.elm) - if (player.elementary.times.gt(0)) - tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.elm.ferm.leptonR("tau").max(1)); + if (tmp.elm && player.elementary.times.gt(0)) { + tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.elm.ferm.quarkR("charm").max(1)); + tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.elm.ferm.leptonR("tau").max(1)); + } if (tmp.elm) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.elm.bos.photonEff(2).max(1)); if (tmp.elm) if (tmp.elm.bos.hasHiggs("0;0;3")) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(3) if (tmp.elm) if (tmp.elm.bos.hasHiggs("0;0;4")) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.elm.bos["higgs_0;0;4"]()) @@ -199,10 +193,20 @@ function updateTempInfLayer() { if (player.elementary.theory.tree.unl && player.elementary.theory.active) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(TREE_UPGS[7].effect(ExpantaNum.add(player.elementary.theory.tree.upgrades[7]||0, TREE_UPGS[11].effect(player.elementary.theory.tree.upgrades[11]||0))).plus(1).pow(10)) if (modeActive('easy')) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(5) if (modeActive("hard") && tmp.fn) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(tmp.fn.enh.moltBrEff2) + if (modeActive("hikers_dream") && player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;1")) tmp.inf.knowledgeGain = tmp.inf.knowledgeGain.times(player.energy) +} + +function updateTempInfLayer() { + tmp.inf.fp = new ExpantaNum(1); + tmp.inf.bc = INF_UNL; + tmp.inf.emPow = new ExpantaNum(1); + if (player.mlt.times.gt(0) && tmp.mlt) tmp.inf.emPow = tmp.inf.emPow.times(tmp.mlt.quilts[2].eff) + calcKnowledgeGain() + + tmp.inf.req = ExpantaNum.pow(tmp.inf.bc, ExpantaNum.pow(ExpantaNum.pow(1.1, tmp.inf.fp), player.inf.endorsements)); if (player.distance.lt(tmp.inf.bc)) tmp.inf.bulk = new ExpantaNum(0); - else - tmp.inf.bulk = player.distance + else tmp.inf.bulk = player.distance .plus(1) .logBase(tmp.inf.bc) .logBase(ExpantaNum.pow(1.1, tmp.inf.fp)) @@ -265,7 +269,7 @@ function updateTempInfLayer() { infActive = true; let amActive = player.inf.endorsements.eq(9); let message = - "The High God Infinity has seen your power, and would like to endorse you" + + "The High God Infinity has seen your power, and would like to endorse you (press E to skip)" + ".
    "; if (amActive) message = @@ -279,8 +283,10 @@ function updateTempInfLayer() { player.inf.unl = true; }; if (!tmp.inf.doGain) tmp.inf.doGain = function () { + let fcb = tmp.inf.layer.fcBulk + if (player.inf.endorsements.lt(10) && !(tmp.ach[178].has&&tmp.elm.bos.hasHiggs("2;0;0"))) fcb = fcb.max(player.inf.endorsements.plus(1)); let mag = new ExpantaNum(1); - let m = player.inf.endorsements.plus(mag).min(tmp.inf.layer.fcBulk).floor(); + let m = player.inf.endorsements.plus(mag).min(fcb).floor(); player.inf.endorsements = player.inf.endorsements.max(m); }; if (!tmp.inf.onReset) tmp.inf.onReset = function (prev) { @@ -312,6 +318,12 @@ function updateTempInfLayer() { }; if (!tmp.inf.showTab) tmp.inf.showTab = function (name) { if (infTab == name) return; + if (mltActive(3) && player.mlt.mlt3selected.length<1) { + if (name=="ascension"||name=="stadium"||name=="pantheon"||name=="derivatives") { + player.mlt.mlt3selected.push(name) + notifier.info("Unlocked "+capitalFirst(name)+"!") + } + } infTab = name; }; tmp.inf.updateTabs(); @@ -331,9 +343,15 @@ function updateTempInfLayer() { if (player.distance.lt(tmp.inf.req) && tmp.inf.bulk.floor().gt(player.inf.endorsements)) return player.inf.endorsements = player.inf.endorsements.max(tmp.inf.bulk.floor().max(player.inf.endorsements.plus(1))) if (!keep) tmp.inf.layer.reset(true) + player.inf.unl = true; }; } +function skipInfAnim() { + tmp.inf.layer.reset(false, false); + if (!showContainer) closeHiddenDiv(true) +} + function updateTempAscension() { if (!tmp.inf.asc) tmp.inf.asc = {}; tmp.inf.asc.perkTime = new ExpantaNum(BASE_PERK_TIME); @@ -360,7 +378,7 @@ function updateTempAscension() { tmp.inf.asc.perkStrength = ExpantaNum.add(1, tmp.inf.asc.powerEff); if (extremeStadiumComplete("nullum")) tmp.inf.asc.perkStrength = tmp.inf.asc.perkStrength.plus(0.25) if (tmp.inf.upgs.has("7;1")) tmp.inf.asc.perkStrength = tmp.inf.asc.perkStrength.times(INF_UPGS.effects["7;1"]()); - tmp.inf.asc.perkStrength = tmp.inf.asc.perkStrength.times(tmp.soulBoost ? tmp.soulBoost : 1); + tmp.inf.asc.perkStrength = tmp.inf.asc.perkStrength.times(tmp.inf.pantheon && tmp.inf.pantheon.soulBoost ? tmp.inf.pantheon.soulBoost : 1); if (tmp.elm) if (player.elementary.times.gt(0)) tmp.inf.asc.perkStrength = tmp.inf.asc.perkStrength.times(tmp.elm.ferm.leptonR("electron").plus(1)); @@ -402,7 +420,7 @@ function updateTempAscension() { if (modeActive('easy')) tmp.inf.asc.powerGain = tmp.inf.asc.powerGain.times(3) if (player.elementary.foam.unl && tmp.elm) tmp.inf.asc.powerGain = tmp.inf.asc.powerGain.times(tmp.elm.qf.boost14) if (!tmp.inf.asc.activatePerk) tmp.inf.asc.activatePerk = function (n) { - if (player.inf.endorsements.lt(10)) return; + if (player.inf.endorsements.lt(10) || (mltActive(3) && !player.mlt.mlt3selected.includes("ascension"))) return; if (tmp.inf.asc.perkActive(n)) { player.inf.ascension.time[n - 1] = new ExpantaNum(0); return; @@ -412,7 +430,7 @@ function updateTempAscension() { }; if (!tmp.inf.asc.perkEff) tmp.inf.asc.perkEff = function (n) { let base = new ExpantaNum([null, 1, 0, 1, 1][n]); - if (!tmp.inf.asc.perkActive(n) || player.inf.endorsements.lt(10) || nerfActive("noPerks")) return base; + if (!tmp.inf.asc.perkActive(n) || player.inf.endorsements.lt(10) || nerfActive("noPerks") || (mltActive(3) && !player.mlt.mlt3selected.includes("ascension"))) return base; let pow = new ExpantaNum(tmp.inf.asc.perkPower[n]); if (pow.gte(90)) pow = pow.div(10).plus(81) if (pow.gte(150)) pow = pow.sqrt().times(Math.sqrt(150)) @@ -566,10 +584,11 @@ function updateTempStadium() { if (player.inf.stadium.completions.includes(name)) l = Math.min(player.inf.stadium.completions.indexOf(name) + 1, l); let goal = goal_data[l - 1] ? goal_data[l - 1] : new ExpantaNum(1 / 0); + if (mltRewardActive(1)) goal = ExpantaNum.pow(goal, name=="eternity"?MLT_1_ETERNITY_GOAL_EXP:MLT_1_STADIUM_GOAL_EXP) return goal; }; tmp.inf.stadium.canComplete = - player.inf.endorsements.gte(15) && + (player.inf.endorsements.gte(15) && !(mltActive(3) && !player.mlt.mlt3selected.includes("stadium"))) && player.inf.stadium.current != "" && player.distance.gte(Object.keys(EXTREME_STADIUM_DATA).includes(player.inf.stadium.current)?extremeStadiumGoal(player.inf.stadium.current):tmp.inf.stadium.goal(player.inf.stadium.current)); if (!tmp.inf.stadium.start) tmp.inf.stadium.start = function (name) { @@ -592,7 +611,7 @@ function updateTempStadium() { }; if (!tmp.inf.stadium.completed) tmp.inf.stadium.completed = function (name) { if (extremeStadiumActive("spectra", 3)) return false - return player.inf.endorsements.gte(15) && player.inf.stadium.completions.includes(name); + return (player.inf.endorsements.gte(15) && !(mltActive(3) && !player.mlt.mlt3selected.includes("ascension"))) && player.inf.stadium.completions.includes(name); }; if (!tmp.inf.stadium.progress) tmp.inf.stadium.progress = function() { let current = player.inf.stadium.current @@ -607,8 +626,10 @@ function updateTempPantheon() { tmp.inf.pantheon.totalGems = player.inf.pantheon.gems.plus(player.inf.pantheon.angels).plus(player.inf.pantheon.demons); tmp.inf.pantheon.bc = new ExpantaNum(21); if (tmp.inf.upgs.has("5;9")) tmp.inf.pantheon.bc = new ExpantaNum(16); - tmp.inf.pantheon.next = tmp.inf.pantheon.totalGems.plus(1).pow(2).plus(tmp.inf.pantheon.bc).sub(1); - tmp.inf.pantheon.bulk = player.inf.endorsements.sub(tmp.inf.pantheon.bc).add(1).sqrt().floor(); + tmp.inf.pantheon.gemExp = new ExpantaNum(2) + if (mltRewardActive(5) && tmp.inf.pantheon.hauntingEnergyBoost) tmp.inf.pantheon.gemExp = tmp.inf.pantheon.gemExp.sub(ExpantaNum.sub(2, ExpantaNum.div(2, tmp.inf.pantheon.hauntingEnergyBoost))) + tmp.inf.pantheon.next = tmp.inf.pantheon.totalGems.plus(1).pow(tmp.inf.pantheon.gemExp).plus(tmp.inf.pantheon.bc).sub(1); + tmp.inf.pantheon.bulk = player.inf.endorsements.sub(tmp.inf.pantheon.bc).add(1).root(tmp.inf.pantheon.gemExp).floor(); if (scalingActive("spectralGems", tmp.inf.pantheon.totalGems.max(tmp.inf.pantheon.bulk), "scaled")) { let start = getScalingStart("scaled", "spectralGems"); let power = getScalingPower("scaled", "spectralGems"); @@ -617,13 +638,13 @@ function updateTempPantheon() { .pow(exp) .div(start.pow(exp.sub(1))) .plus(1) - .pow(2) + .pow(tmp.inf.pantheon.gemExp) .plus(tmp.inf.pantheon.bc) .sub(1); tmp.inf.pantheon.bulk = player.inf.endorsements .sub(tmp.inf.pantheon.bc) .add(1) - .sqrt() + .root(tmp.inf.pantheon.gemExp) .times(start.pow(exp.sub(1))) .pow(exp.pow(-1)) .plus(1) @@ -642,13 +663,13 @@ function updateTempPantheon() { .pow(exp) .div(start.pow(exp.sub(1))) .plus(1) - .pow(2) + .pow(tmp.inf.pantheon.gemExp) .plus(tmp.inf.pantheon.bc) .sub(1); tmp.inf.pantheon.bulk = player.inf.endorsements .sub(tmp.inf.pantheon.bc) .add(1) - .sqrt() + .root(tmp.inf.pantheon.gemExp) .times(start.pow(exp.sub(1))) .pow(exp.pow(-1)) .times(start2.pow(exp2.sub(1))) @@ -681,8 +702,10 @@ function updateTempPantheon() { player.inf.pantheon.demonicSouls = new ExpantaNum(0); tmp.inf.layer.reset(true); }; - tmp.inf.pantheon.chipGain = ExpantaNum.pow(2, player.inf.pantheon.angels).sub(1); - tmp.inf.pantheon.soulGain = ExpantaNum.pow(2, player.inf.pantheon.demons).sub(1); + tmp.inf.pantheon.angelDemonPhantomBase = new ExpantaNum(2); + if (mltRewardActive(5) && tmp.inf.pantheon.hauntingEnergyBoost2) tmp.inf.pantheon.angelDemonPhantomBase = tmp.inf.pantheon.angelDemonPhantomBase.times(tmp.inf.pantheon.hauntingEnergyBoost2) + tmp.inf.pantheon.chipGain = ExpantaNum.pow(tmp.inf.pantheon.angelDemonPhantomBase, player.inf.pantheon.angels).sub(1); + tmp.inf.pantheon.soulGain = ExpantaNum.pow(tmp.inf.pantheon.angelDemonPhantomBase, player.inf.pantheon.demons).sub(1); if (modeActive("easy")) { tmp.inf.pantheon.chipGain = tmp.inf.pantheon.chipGain.times(4) tmp.inf.pantheon.soulGain = tmp.inf.pantheon.soulGain.times(4) @@ -707,21 +730,45 @@ function updateTempPantheon() { tmp.inf.pantheon.soulGain = tmp.inf.pantheon.soulGain.times(mul) } let h = player.inf.pantheon.heavenlyChips; + let adjustedD = tmp.ach[135].has ? player.bestDemonicSouls : player.inf.pantheon.demonicSouls; let d = player.inf.pantheon.demonicSouls; let p = player.inf.pantheon.purge.unl ? player.inf.pantheon.purge.power : new ExpantaNum(0); - tmp.inf.pantheon.ppe = p.div(10).plus(1).log10().plus(1).pow(-1); - if (tmp.inf.upgs.has("10;4")) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.div(2) - if (tmp.ach[135].has) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.div(2) - tmp.inf.pantheon.chipBoost = h.div(d.pow(tmp.inf.pantheon.ppe).plus(1)).plus(1).log10().plus(1).log10().plus(1); - if (tmp.inf.pantheon.chipBoost.gte(2)) tmp.inf.pantheon.chipBoost = tmp.inf.pantheon.chipBoost.slog(2).times(2); - if (tmp.inf.pantheon.chipBoost.gte(2.5)) tmp.inf.pantheon.chipBoost = tmp.inf.pantheon.chipBoost.logBase(2.5).plus(1.5); - tmp.inf.pantheon.soulBoost = d.div(h.pow(tmp.inf.pantheon.ppe).plus(1)).plus(1).log10().plus(1).log10().plus(1); - if (tmp.inf.pantheon.soulBoost.gte(2)) tmp.inf.pantheon.soulBoost = tmp.inf.pantheon.soulBoost.slog(2).times(2); - if (tmp.inf.pantheon.soulBoost.gte(2.5)) tmp.inf.pantheon.soulBoost = tmp.inf.pantheon.soulBoost.logBase(2.5).plus(1.5); + if (mltRewardActive(5)) { + tmp.inf.pantheon.ppe = p.div(10).plus(1).log10().times(-0.01) + if (tmp.inf.upgs.has("10;4")) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.times(2) + if (tmp.ach[135].has) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.times(2) + if (hasDE(9)) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.times(ExpantaNum.pow(1.01, player.elementary.theory.preons.boosters)) + tmp.inf.pantheon.chipBoost = h.times(d.pow(tmp.inf.pantheon.ppe.times(-1)).plus(1)).plus(1).log10().plus(1).log10().plus(1); + tmp.inf.pantheon.soulBoost = adjustedD.times(h.pow(tmp.inf.pantheon.ppe.times(-1)).plus(1)).plus(1).log10().plus(1).log10().plus(1); + } else { + tmp.inf.pantheon.ppe = p.div(10).plus(1).log10().plus(1).pow(-1); + if (tmp.inf.upgs.has("10;4")) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.div(2) + if (tmp.ach[135].has) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.div(2) + if (hasDE(9)) tmp.inf.pantheon.ppe = tmp.inf.pantheon.ppe.div(ExpantaNum.pow(1.01, player.elementary.theory.preons.boosters)) + tmp.inf.pantheon.chipBoost = h.div(d.pow(tmp.inf.pantheon.ppe).plus(1)).plus(1).log10().plus(1).log10().plus(1); + tmp.inf.pantheon.soulBoost = adjustedD.div(h.pow(tmp.inf.pantheon.ppe).plus(1)).plus(1).log10().plus(1).log10().plus(1); + } + if (!mltRewardActive(5)) { + if (tmp.inf.pantheon.chipBoost.gte(2)) tmp.inf.pantheon.chipBoost = tmp.inf.pantheon.chipBoost.slog(2).times(2); + if (tmp.inf.pantheon.chipBoost.gte(2.5)) tmp.inf.pantheon.chipBoost = tmp.inf.pantheon.chipBoost.logBase(2.5).plus(1.5); + } else tmp.inf.pantheon.chipBoost = tmp.inf.pantheon.chipBoost.pow(1.25); + if (!mltRewardActive(5)) { + if (tmp.inf.pantheon.soulBoost.gte(2)) tmp.inf.pantheon.soulBoost = tmp.inf.pantheon.soulBoost.slog(2).times(2); + if (tmp.inf.pantheon.soulBoost.gte(2.5)) tmp.inf.pantheon.soulBoost = tmp.inf.pantheon.soulBoost.logBase(2.5).plus(1.5); + } else tmp.inf.pantheon.soulBoost = tmp.inf.pantheon.soulBoost.pow(1.25); + if (mltRewardActive(5) && !mltActive(5)) { + tmp.inf.pantheon.chipBoost = tmp.inf.pantheon.chipBoost.pow(2); + tmp.inf.pantheon.soulBoost = tmp.inf.pantheon.soulBoost.pow(2); + } if (player.inf.pantheon.purge.active||HCCBA("purge")) { tmp.inf.pantheon.chipBoost = new ExpantaNum(1); tmp.inf.pantheon.soulBoost = new ExpantaNum(1); } + + tmp.inf.pantheon.phantoms = tmp.inf.pantheon.totalGems.div(3).floor(); + tmp.inf.pantheon.hauntingEnergyGain = ExpantaNum.pow(tmp.inf.pantheon.angelDemonPhantomBase, tmp.inf.pantheon.phantoms).sub(1); + tmp.inf.pantheon.hauntingEnergyBoost = player.inf.pantheon.hauntingEnergy.plus(1).log10().plus(1).log10().div(3).plus(1) + tmp.inf.pantheon.hauntingEnergyBoost2 = ExpantaNum.pow(10, player.inf.pantheon.hauntingEnergy.log10().sqrt()).pow(10).max(1); } function updateTempPurge() { @@ -730,6 +777,7 @@ function updateTempPurge() { tmp.inf.pantheon.purgeMult = tmp.inf.pantheon.purgeMult.times(INF_UPGS.effects["8;2"]()["power"]); if (modeActive("easy")) tmp.inf.pantheon.purgeMult = tmp.inf.pantheon.purgeMult.times(4) if (tmp.ach[154].has) tmp.inf.pantheon.purgeMult = tmp.inf.pantheon.purgeMult.times(2) + if (player.elementary.sky.unl && tmp.elm) tmp.inf.pantheon.purgeMult = tmp.inf.pantheon.purgeMult.times(tmp.elm.sky.pionEff[3]) tmp.inf.pantheon.purgeStart = ExpantaNum.mul(Number.MAX_VALUE, DISTANCES.uni); tmp.inf.pantheon.purgeBase = new ExpantaNum(1e5); if (modeActive("easy")) tmp.inf.pantheon.purgeBase = new ExpantaNum(1e3) @@ -775,31 +823,42 @@ function updateTempPurge() { }; } +function getDervNames() { + if (mltRewardActive(2)) return DERV_MLT_2 + return DERV; +} + +function getDervIncrs() { + if (mltRewardActive(2)) return DERV_INCR_MLT_2 + return DERV_INCR; +} + function updateTempDerivatives() { if (!tmp.inf.derv) tmp.inf.derv = {}; tmp.inf.derv.maxShifts = new ExpantaNum(2); if (!tmp.inf.derv.unlocked) tmp.inf.derv.unlocked = function (name) { if (name == "distance" || name == "velocity" || name == "acceleration") return true; - if (name == "jerk" && player.inf.derivatives.unlocks.gte(HCCBA("noDS")?1/0:1)) return true; - if (name == "snap" && player.inf.derivatives.unlocks.gte(HCCBA("noDS")?1/0:2)) return true; + else if (name == "jerk" && player.inf.derivatives.unlocks.gte(HCCBA("noDS")?1/0:1)) return true; + else if (name == "snap" && player.inf.derivatives.unlocks.gte(HCCBA("noDS")?1/0:2)) return true; + else if ((mltRewardActive(2)&&name!="jerk"&&name!="snap") && player.inf.derivatives.unlocks.gte(HCCBA("noDS")?1/0:(getDervIncrs().indexOf(name)*3-4))) return true; return false; }; if (!tmp.inf.derv.amt) tmp.inf.derv.amt = function (name) { - if (!player.inf.derivatives.unl) return new ExpantaNum(0); + if (!player.inf.derivatives.unl || (mltActive(3) && !player.mlt.mlt3selected.includes("derivatives"))) return new ExpantaNum(0); if (!tmp.inf.derv.unlocked(name)) return new ExpantaNum(0); if (name == "distance" || name == "velocity") return player[name]; if (name == "acceleration") return tmp.acc; return player.inf.derivatives.amts[name] ? player.inf.derivatives.amts[name] : new ExpantaNum(0); }; if (!tmp.inf.derv.gain) tmp.inf.derv.gain = function (name) { - if (!player.inf.derivatives.unl) return new ExpantaNum(0); + if (!player.inf.derivatives.unl || (mltActive(3) && !player.mlt.mlt3selected.includes("derivatives"))) return new ExpantaNum(0); if (!tmp.inf.derv.unlocked(name)) return new ExpantaNum(0); if (name == "distance") return adjustGen(player.velocity, "dist").times(nerfActive("noTS") ? 1 : tmp.timeSpeed); if (name == "velocity") return adjustGen(tmp.acc, "vel").times(nerfActive("noTS") ? 1 : tmp.timeSpeed); - let next = DERV_INCR[DERV_INCR.indexOf(name) + 1]; - if (name=="snap" && tmp.inf.upgs.has("10;1")) return adjustGen(INF_UPGS.effects["10;1"]("snp").times(tmp.inf.derv.mult(name)), "derv") + let next = getDervIncrs()[getDervIncrs().indexOf(name) + 1]; + if (!mltRewardActive(2)) if (name=="snap" && tmp.inf.upgs.has("10;1")) return adjustGen(INF_UPGS.effects["10;1"]("snp").times(tmp.inf.derv.mult(name)), "derv") if (next === undefined) return new ExpantaNum(0); let gain = adjustGen(tmp.inf.derv.mult(name).times(tmp.inf.derv.amt(next)), "derv"); if (name == "acceleration") @@ -813,7 +872,8 @@ function updateTempDerivatives() { ).max(1) ) ); - return gain.times((nerfActive("noTS")||name=="snap") ? 1 : tmp.timeSpeed); + if (((!hasMltMilestone(16)?(name == "snap"):(name==getDervIncrs()[player.inf.derivatives.unlocks.plus(4).div(3).floor().min(8).toNumber()]))) && tmp.inf.upgs.has("10;1")) return INF_UPGS.effects["10;1"]("snp").times(gain).times(nerfActive("noTS") ? 1 : tmp.timeSpeed) + return gain.times((nerfActive("noTS")||(name=="snap"&&!mltRewardActive(2))) ? 1 : tmp.timeSpeed); }; tmp.inf.derv.costBase = new ExpantaNum(modeActive("extreme")?4e34:2.5e29) tmp.inf.derv.costLB = new ExpantaNum(modeActive("extreme")?2.5:2) @@ -887,28 +947,31 @@ function updateTempDerivatives() { tmp.inf.derv.boostMult = new ExpantaNum(Number.MAX_VALUE); if (modeActive('easy')) tmp.inf.derv.boostMult = tmp.inf.derv.boostMult.pow(1.25) if (tmp.inf.upgs.has("9;7")) tmp.inf.derv.boostMult = tmp.inf.derv.boostMult.times(INF_UPGS.effects["9;7"]()); + if (modeActive("extreme") && tmp.fn) if (tmp.fn.pl.unl) tmp.inf.derv.boostMult = tmp.inf.derv.boostMult.times(tmp.fn.pl.boosts[6]) tmp.inf.derv.boostMult = tmp.inf.derv.boostMult.pow(tmp.inf.derv.boostPow); if (HCCBA("noDB")) tmp.inf.derv.boostMult = new ExpantaNum(1) if (!tmp.inf.derv.mult) tmp.inf.derv.mult = function (name) { let mult = new ExpantaNum(1); let boosts = player.inf.derivatives.unlocks.sub(tmp.inf.derv.maxShifts).max(0); + if (player.elementary.sky.unl && tmp.elm) boosts = boosts.times(tmp.elm.sky.pionEff[7]) mult = mult.times(ExpantaNum.pow(tmp.inf.derv.boostMult, boosts)); if (tmp.inf.upgs.has("6;9")) mult = mult.pow(4); // NICE return mult; }; if (!tmp.inf.derv.tick) tmp.inf.derv.tick = function (diff) { - if (!player.inf.derivatives.unl) return; - for (let i = 0; i < DERV_INCR.length; i++) { - let name = DERV_INCR[i]; - let next = DERV_INCR[i + 1]; + if (!player.inf.derivatives.unl || (mltActive(3) && !player.mlt.mlt3selected.includes("derivatives"))) return; + let incr = getDervIncrs(); + for (let i = 0; i < incr.length; i++) { + let name = incr[i]; + let next = incr[i + 1]; if (!tmp.inf.derv.unlocked(name)) continue; - if (name=="snap" && tmp.inf.upgs.has("10;1") && new ExpantaNum(player.inf.derivatives.amts["snap"]||0).gt(0)) { + if ((!hasMltMilestone(16)?(name == "snap"):(name==getDervIncrs()[player.inf.derivatives.unlocks.plus(4).div(3).floor().min(8).toNumber()])) && tmp.inf.upgs.has("10;1") && new ExpantaNum(player.inf.derivatives.amts[(!hasMltMilestone(16)?"snap":(getDervIncrs()[player.inf.derivatives.unlocks.plus(4).div(3).floor().min(8).toNumber()]))]||0).gt(0)) { player.inf.derivatives.amts[name] = new ExpantaNum(player.inf.derivatives.amts[name]||0).plus(adjustGen(INF_UPGS.effects["10;1"]("snp"), "derv").times(tmp.inf.derv.mult(name))).max(1) - return + if (!mltRewardActive(2)) return } - if (i == DERV_INCR.length - 1 ? true : !tmp.inf.derv.unlocked(next)) + if ((i == incr.length - 1 ? true : !tmp.inf.derv.unlocked(next)) && !(hasMltMilestone(16)&&ExpantaNum.gt(player.inf.derivatives.amts[name]||0, 0))) { player.inf.derivatives.amts[name] = new ExpantaNum(1); - else + } else player.inf.derivatives.amts[name] = (player.inf.derivatives.amts[name] ? player.inf.derivatives.amts[name] : new ExpantaNum(0) @@ -929,7 +992,6 @@ function updateTempInf() { tmp.inf.layer.reset(true); }; tmp.canCompleteStadium = tmp.inf.stadium.canComplete; - if (!tmp.soulBoost) tmp.soulBoost = tmp.inf.pantheon.soulBoost; if (!tmp.doDervReset) tmp.doDervReset = tmp.inf.derv.resetDervs; } @@ -948,17 +1010,17 @@ function infTick(diff) { adjustGen(tmp.inf.knowledgeGain, "knowledge").times(diff) ); - if (player.inf.endorsements.gte(10)) { + if (player.inf.endorsements.gte(10) && !(mltActive(3) && !player.mlt.mlt3selected.includes("ascension"))) { for (let i = 1; i <= 4; i++) if (tmp.inf.asc.perkActive(i)) player.inf.ascension.time[i - 1] = player.inf.ascension.time[i - 1].sub(diff).max(0); - if (tmp.inf.asc.anyPerkActive()) + if (tmp.inf.asc.anyPerkActive() || (modeActive("hard-extreme") && tmp.ach[94].has)) player.inf.ascension.power = player.inf.ascension.power.plus( adjustGen(tmp.inf.asc.powerGain, "ascension").times(diff) ); } - if (player.inf.endorsements.gte(21)) { + if (player.inf.endorsements.gte(21) && !(mltActive(3) && !player.mlt.mlt3selected.includes("pantheon"))) { tmp.inf.pantheon.collect(); player.inf.pantheon.heavenlyChips = player.inf.pantheon.heavenlyChips.plus( diff.times(adjustGen(tmp.inf.pantheon.chipGain, "heavenlyChips")) @@ -966,11 +1028,15 @@ function infTick(diff) { player.inf.pantheon.demonicSouls = player.inf.pantheon.demonicSouls.plus( diff.times(adjustGen(tmp.inf.pantheon.soulGain, "demonicSouls")) ); + player.bestDemonicSouls = player.bestDemonicSouls.max(player.inf.pantheon.demonicSouls); + + if (mltRewardActive(5)) player.inf.pantheon.hauntingEnergy = player.inf.pantheon.hauntingEnergy.plus(diff.times(adjustGen(tmp.inf.pantheon.hauntingEnergyGain, "hauntingEnergy"))) if (tmp.inf.pantheon.totalGems.gte(2)) player.inf.pantheon.purge.unl = true; } - if (player.elementary.hc.unl) { + if (player.elementary.hc.unl || hasMltMilestone(14)) { let autoPurgeMul = TREE_UPGS[28].effect(player.elementary.theory.tree.upgrades[28]||0) + if (hasMltMilestone(14)) autoPurgeMul = new ExpantaNum(1); if (autoPurgeMul.gt(0)) { player.inf.pantheon.purge.power = player.inf.pantheon.purge.power.max(tmp.inf.pantheon.purgeGain.plus(player.inf.pantheon.purge.power).times(autoPurgeMul).floor()); } diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js new file mode 100644 index 00000000..63ca6d01 --- /dev/null +++ b/js/main/multiverse/mlt.js @@ -0,0 +1,221 @@ +function updateTempMultiverse() { + if (!tmp.mlt) tmp.mlt = {}; + + updateMiscMltStuff(); + updateMultiverseLayer(); + updateMultiverseTabs(); + updateQuilts(); +} + +function updateMiscMltStuff() { + tmp.mlt.mil11reward = MLT_MILESTONES[10].effect(); // Milestone 11 + tmp.mlt.mil12reward = MLT_MILESTONES[11].effect(); // Milestone 12 + tmp.mlt.mil15reward = MLT_MILESTONES[14].effect(); // Milestone 15 + tmp.mlt.mil17reward = MLT_MILESTONES[16].effect(); // Milestone 17 + tmp.mlt.mil20reward = MLT_MILESTONES[19].effect(); // Milestone 20 + tmp.mlt.mil22reward = MLT_MILESTONES[21].effect(); // Milestone 22 + tmp.mlt.mil24reward = MLT_MILESTONES[23].effect(); // Milestone 24 + tmp.mlt.mlt1reward = MLT_DATA[1].effect(); // Multiverse 1 +} + +function setMultiverseResetFunction() { + if (!tmp.mlt.onReset) tmp.mlt.onReset = function (prev, auto) { + // Main Stuff + if (!auto && player.options.mltforcetab) { + player.mlt.active = "NONE"; + player.tab = "mlt" + } else player.tab = prev.tab; + + // Keep stuff on Multiverse reset + if (hasMltMilestone(1)) { + if (!hasMltMilestone(3)) player.elementary.bosons.scalar.higgs.upgrades = prev.elementary.bosons.scalar.higgs.upgrades.filter(x => !DE_HIGGS_UPGS.includes(x)) + player.tr.upgrades = prev.tr.upgrades; + player.inf.stadium.completions = prev.inf.stadium.completions; + if (modeActive("extreme")) { + player.extremeStad = prev.extremeStad; + player.furnChalls = prev.furnChalls; + } + } + if (hasMltMilestone(2)) { + player.elementary.times = new ExpantaNum(1); + player.elementary.entropy.upgrades = prev.elementary.entropy.upgrades.filter(x => KEEP_ENTUPGS_SKY.includes(x)); + } + if (hasMltMilestone(3)) { + player.elementary.bosons.scalar.higgs.upgrades = prev.elementary.bosons.scalar.higgs.upgrades + player.elementary.theory.unl = prev.elementary.theory.unl; + player.elementary.theory.supersymmetry.unl = true; + player.elementary.theory.tree.unl = true; + player.elementary.theory.strings.unl = true; + player.elementary.theory.preons.unl = true; + player.elementary.theory.accelerons.unl = true; + player.elementary.theory.accelerons.expanders = prev.elementary.theory.accelerons.expanders.max(5).min(getMaxDEs()); + player.elementary.theory.inflatons.unl = true; + } + if (hasMltMilestone(5)) { + player.elementary.hc.best = prev.elementary.hc.best; + player.elementary.hc.selectors = prev.elementary.hc.selectors; + } else updateHCSelectorInputs(true); + + player.elementary.fermions.quarks.type = prev.elementary.fermions.quarks.type; + player.elementary.fermions.leptons.type = prev.elementary.fermions.leptons.type; + player.elementary.foam.autoUnl = prev.elementary.foam.autoUnl + for (let i=0;i=m||player.mlt.highestCompleted>=m } + +function mltCompleted(m) { return player.mlt.highestUnlocked>=m&&player.mlt.highestCompleted>=m } + +function mltRewardActive(m) { return mltActive(m) || mltCompleted(m) } + +function getMltDisplay(m) { + if (m=="NONE") return ""; + let data = MLT_DATA[m]; + let display = "Multiverse "+(m==0?"Prime":m)+"

    " + if (mltUnlocked(m)) { + if (player.mlt.highestCompleted>=m) display += "Completed

    " + display += (m==0?"":"Effect: ")+((modeActive("extreme") && data.extremeDesc)?data.extremeDesc:data.desc)+"
    " + if (data.reward) display += "
    Reward: "+data.reward+"
    " + if (data.effectDesc) display += "Currently: "+data.effectDesc(tmp.mlt["mlt"+m+"reward"]?tmp.mlt["mlt"+m+"reward"]:data.effect())+"
    " + if (data.notBalanced) display += "

    NOT BALANCED" + } else display += "Cost: "+showNum(data.req)+" Multiversal Energy"; + return display; +} + +function unlMlt(m) { + if (player.mlt.highestUnlocked>=m) return; + if (player.mlt.energy.lt(MLT_DATA[m].req)) return; + player.mlt.energy = player.mlt.energy.sub(MLT_DATA[m].req) + player.mlt.highestUnlocked = Math.max(player.mlt.highestUnlocked, m) +} + +function setupMlt1(keepHC=false) { + if (!mltCompleted(1)) player.inf.stadium.completions = [] + player.elementary.theory.unl = false; + player.elementary.theory.supersymmetry.unl = false; + player.elementary.theory.tree.unl = false; + player.elementary.theory.strings.unl = false; + player.elementary.theory.preons.unl = false; + player.elementary.theory.accelerons.unl = false; + player.elementary.theory.inflatons.unl = false; + if (!keepHC) player.elementary.hc.unl = false; + player.elementary.foam.unl = false; + player.elementary.entropy.unl = false; + player.elementary.sky.unl = false; +} + +function startMultiverse(m) { + if (!mltUnlocked(m)) return; + if (player.mlt.active==m) { + player.tab = "main" + return; + } + if (!player.options.mltnc) if (!confirm("Are you sure you want to enter this Multiverse?")) return; + if (player.mlt.active!=m) mltReset(true); + if (m==1) setupMlt1() + player.mlt.active = m; + player.tab = "main" + mltTab = "mltMap" +} + +function hasMltMilestone(n) { return player.mlt.totalEnergy.gte(MLT_MILESTONES[n-1].req) }; + +function mltMilestonesGotten() { return Object.values(MLT_MILESTONES).filter(x => player.mlt.totalEnergy.gte(x.req)).length }; + +function setupMltMilestoneTable() { + let milestones = new Element("mltMilestoneTable"); + let data = ""; + for (let r=1;r<=MLT_MILESTONE_NUM;r++) { + let id = r-1; + data += "" + data += "" + } + data += "
    Req: "+showNum(MLT_MILESTONES[id].req)+" Total Multiversal Energy" + if (MLT_MILESTONES[id].effectDesc) data += "

    " + data += "
    " + milestones.setHTML(data); +} \ No newline at end of file diff --git a/js/main/multiverse/quilts.js b/js/main/multiverse/quilts.js new file mode 100644 index 00000000..029bd7bd --- /dev/null +++ b/js/main/multiverse/quilts.js @@ -0,0 +1,79 @@ +function updateQuilts() { + if (!tmp.mlt.quilts) tmp.mlt.quilts = {} + let upgPower = getQuiltUpgPower() + for (let i=1;i<=3;i++) { + if (!tmp.mlt.quilts[i]) tmp.mlt.quilts[i] = {} + tmp.mlt.quilts[i].upgCost = getQuiltUpgCost(i); + tmp.mlt.quilts[i].upgPow = upgPower; + if (i==3) tmp.mlt.quilts[i].scStart = new ExpantaNum(3.75) + tmp.mlt.quilts[i].upgEff = player.mlt.quiltUpgs[i-1].times(HCCBA("q"+i)?0:1).times(tmp.mlt.quilts[i].upgPow).div(10) + tmp.mlt.quilts[i].strength = getQuiltStrength(i).plus(tmp.mlt.quilts[i].upgEff); + tmp.mlt.quilts[i].eff = getQuiltEff(i); + } + tmp.mlt.quilts[1].eff2 = getQuilt1Eff2() + tmp.mlt.quilts[2].eff2 = getQuilt2Eff2() + tmp.mlt.quilts[3].eff2 = getQuilt3Eff2() +} + +function getQuiltUpgPower() { + let power = new ExpantaNum(modeActive("easy")?1.1:1).div(modeActive("hard")?1.1:1); + if (hasMltMilestone(17)) power = power.plus(tmp.mlt.mil17reward.times(10)) + return power; +} + +function getQuiltStrength(x) { + if (player.mlt.times.eq(0) || HCCBA("q"+x)) return new ExpantaNum(0); + let base = new ExpantaNum(0); + if (x==1) base = player.distance.max(1).logBase(DISTANCES.mlt); + else if (x==2) base = player.inf.knowledge.max(1).logBase("1e8500"); + else if (x==3) base = player.elementary.particles.max(1).logBase(1e150); + + if (modeActive("easy")) base = base.pow(1.01).times(1.2); + if (modeActive("hard")) base = base.div(1.2); + + if (base.gte(4)) base = base.root(1.5).times(1.6); + + return base.plus(1).div(2); +} + +function getQuiltEff(x) { + let power = tmp.mlt.quilts[x].strength; + if (x==1) { + let exp = ExpantaNum.root(15, power.plus(1).pow(4).sub(4.0625)) + return ExpantaNum.pow(ExpantaNum.pow(10, 1e7), power.lt(1)?power.pow(exp):power) + } else if (x==2) return power.plus(1).pow(1.1) + else if (x==3) { + let eff = power.plus(1).pow(0.9) + if (eff.gte(tmp.mlt.quilts[3].scStart)) eff = eff.times(tmp.mlt.quilts[3].scStart.pow(2)).cbrt(); + return eff; + } +} + +function getQuilt1Eff2() { + let power = tmp.mlt.quilts[1].strength; + if (power.gte(8)) power = ExpantaNum.pow(2, power.logBase(2).times(2).sqrt()) + if (power.gte(2)) power = power.times(4).cbrt(); + return ExpantaNum.pow(1e4, power.pow(2)); +} + +function getQuilt2Eff2() { + let power = tmp.mlt.quilts[2].strength; + return power.plus(1).pow(2); +} + +function getQuilt3Eff2() { + let power = tmp.mlt.quilts[3].strength; + return ExpantaNum.pow(1e5, power); +} + +function getQuiltUpgCost(x) { + let bought = player.mlt.quiltUpgs[x-1] + return ExpantaNum.pow(2, bought) +} + +function buyQuiltUpg(x) { + let cost = getQuiltUpgCost(x) + if (player.mlt.energy.lt(cost)) return; + player.mlt.energy = player.mlt.energy.sub(cost); + player.mlt.quiltUpgs[x-1] = player.mlt.quiltUpgs[x-1].plus(1); +} \ No newline at end of file diff --git a/js/main/nerfs.js b/js/main/nerfs.js index 1133d7e0..6e90abe0 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -1,7 +1,7 @@ function nerfActive(name) { if (name == "maxVelActive") { let active = true; - if (tmp.inf) if (tmp.inf.upgs.has("6;7")) active = false; + if (tmp.inf) if (tmp.inf.upgs.has("6;7") && !mltActive(2)) active = false; return active; } if (name == "nerfAccel") { @@ -44,6 +44,8 @@ function nerfActive(name) { active = active || (tmp.inf ? tmp.inf.stadium.active("spaceon") || tmp.inf.stadium.active("drigganiz", 5) : true); + + if (HCCBA("rockets")) active = true; return active; } if (name == "scaledRF") { @@ -54,6 +56,7 @@ function nerfActive(name) { if (name == "noRF") { let active = false; active = active || (tmp.inf ? tmp.inf.stadium.active("infinity", 3) : true); + if (HCCBA("rf")) active = true; return active; } if (name == "noTimeCubes") { @@ -161,20 +164,42 @@ function adjustGen(val, type) { type == "ascension" || type == "heavenlyChips" || type == "demonicSouls" || + type == "hauntingEnergy" || type == "derv" || preinf; - let post_elem = type == "quarks" || type == "leptons" || type == "gauge" || type == "scalar" || type=="ss" || type=="str" || type=="preons" || type=="accelerons" || type=="inflatons" || type=="hc"; + let post_elm = type == "quarks" || type == "leptons" || type == "gauge" || type == "scalar" || type=="ss" || type=="str" || type=="preons" || type=="accelerons" || type=="inflatons" || type=="hc" || type=="foam" || type=="sky" || type=="plasma"; let exp = new ExpantaNum(1); if (player.elementary.theory.supersymmetry.unl && pre_elem && tmp.elm) val = new ExpantaNum(val).times(new ExpantaNum(tmp.elm.theory.ss.waveEff||1).max(1)) if (nerfActive("preInf.1") && preinf) exp = exp.div(10); if ((player.inf.pantheon.purge.active||HCCBA("purge")) && type == "vel") exp = exp.div(modeActive('extreme')?0.925:3); - if ((player.elementary.theory.active||HCTVal("tv").gt(-1)) && pre_elem) exp = exp.times(tmp.elm.theory.nerf) + if (mltActive(4) && (pre_elem||type=="sky")) { + let depth = modeActive("extreme")?4.25:4.5 + exp = tmp.elm?(exp.times(ExpantaNum.pow(0.8, ExpantaNum.cbrt(depth).times(Math.max(depth-3, 1))))):new ExpantaNum(0) + } + if ((player.elementary.theory.active||HCTVal("tv").gt(-1))) { + if (pre_elem) { + if (!tmp.elm) exp = new ExpantaNum(0); + else exp = exp.times(tmp.elm.theory.nerf) + } + } if (modeActive("extreme") && preinf) { let e = new ExpantaNum(FCComp(4)?0.825:0.75); + if (player.elementary.entropy.upgrades.includes(23)) e = new ExpantaNum(0.875); if (extremeStadiumActive("spectra")) e = e.pow(2) exp = exp.times(e); } + if (modeActive("extreme") && post_elm && type!="scalar") exp = exp.times(ExpantaNum.gte(player.elementary.theory.tree.upgrades[37]||0, 1)?.95:.9) let newVal = val.pow(exp); - if (modeActive("hard") && pre_elem) newVal = newVal.div(3.2) + if (modeActive("hard") && (type=="inflatons"||type=="foam"||type=="sky")) newVal = newVal.div(5) + else if (modeActive("hard") && !modeActive("extreme")) newVal = newVal.div(3.2) + if (type=="foam"&&modeActive("extreme")) { + let start = getExtremeFoamSCStart(); + if (newVal.gte(start)) newVal = newVal.times(start.pow(3)).pow(.25) + } + if (preinf && modeActive("extreme") && newVal.gte("1e100000000")) newVal = newVal.times("1e400000000").pow(.2); + if (modeActive("extreme") && newVal.gte(ExpantaNum.pow(DISTANCES.mlt, 500))) { + let mlt500 = ExpantaNum.pow(DISTANCES.mlt, 500); + newVal = ExpantaNum.pow(mlt500, newVal.logBase(mlt500).sqrt()) + } if (modeActive("hard") && (type=="pathogens"||(extremeStadiumComplete("aqualon") && preinf))) newVal = newVal.times(3) if (extremeStadiumActive("aqualon") && preinf) newVal = newVal.div(9e15) return newVal; diff --git a/js/main/options.js b/js/main/options.js index 0c3f7469..929854d3 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -1,3 +1,15 @@ +function saveOptions() { + localStorage.setItem("dist-inc-options" + betaID, btoa(JSON.stringify(player.options))); +} + +function loadOptions() { + let optData = localStorage.getItem("dist-inc-options" + betaID) + if (!optData) return; + let name = player.options.name; + player.options = JSON.parse(atob(optData)); + player.options.name = name; +} + function getAllSaves() { let local = localStorage.getItem("dist-inc-saves" + betaID) let all = JSON.parse(atob(local ? local : btoa(JSON.stringify([])))); @@ -71,24 +83,6 @@ function importSave() { } } -function checkForBeta() { - for (let i=0;i -1) s.savePos = all.indexOf(null) + 1; - else s.savePos = all.length + 1; - if (s.savePos > MAX_SAVES) s.savePos = MAX_SAVES; - } - setSave(s); - } - } -} - function exportSave() { let toExport = btoa(JSON.stringify(ENString(player))); notifier.info("Save exported"); @@ -98,7 +92,7 @@ function exportSave() { function startModes(modes) { let s = transformToEN(DEFAULT_START); s.modes = modes; - if (s.modes.includes("aau")) s.achievements = getAllAchievements(); + if (s.modes.includes("aau")) s.achievements = getAllAchievements(s.modes.includes("na")); let all = getAllSaves(); if (all.indexOf(null) > -1 && all[all.indexOf(null)] === null) s.savePos = all.indexOf(null) + 1; else s.savePos = all.length + 1; @@ -110,23 +104,24 @@ function startModes(modes) { reload(); } -function setDropdown(dropdown, els, load=false) { +function setDropdown(dropdown, els, load=false, type=0) { let html = ""; for (let i = 0; i < Object.keys(els).length; i++) { let el = els[Object.keys(els)[i]]; + if (el.display!==undefined) if (!el.display) continue; html += "
    "; if (load) { html += "" + el.name + "
    "; html += el.info + "
    "; for (let x = 1; x <= el.buttons; x++) html += - " "; - } else html += ""; - if (load) html += "

    "; + } else html += ""; + if (load || el.bottomLineBreak) html += "

    "; } dropdown.setHTML(html + "
    "); } @@ -140,8 +135,10 @@ function changeOpt(name, type) { ); else dropdown.changeStyle("display", "none"); let els = {}; - if (type == 0) player.options[name] = !player.options[name] - else if (type == 1) { + if (type == 0) { + player.options[name] = !player.options[name] + saveOptions() + } else if (type == 1) { let max = OPT_CHNG_MAX[name]; let min = OPT_CHNG_MIN[name]; for (x = min; x <= max; x++) @@ -152,7 +149,7 @@ function changeOpt(name, type) { name + ""] = " + x + - "; this.parentElement.style.display="none"" + "; this.parentElement.style.display="none"; saveOptions();" }; } else if (type == 2) { let types = OPT_NAMES[name]; @@ -164,7 +161,7 @@ function changeOpt(name, type) { name + ""] = "" + types[x] + - ""; this.parentElement.style.display="none"" + ""; this.parentElement.style.display="none"; saveOptions();" }; } else if (type == 3) { let old = deepCopy(player.options[name]) @@ -173,7 +170,27 @@ function changeOpt(name, type) { let d2 = new Element("dropDown2") d2.changeStyle("display", "none"); save(); + saveOptions(); return; + } else if (type == 4) { + let data = TABBTN_SHOWN; + let types = Object.keys(data); + els.exit = { + txt: "EXIT", + classOnLoad: "btn tb opt redTint", + bottomLineBreak: true, + onclick: "this.parentElement.style.display="none";", + } + for (x = 0; x < types.length; x++) { + if (HIDE_WHITELIST.includes(types[x])) continue; + els[types[x]] = { + txt: FULL_TAB_NAMES[types[x]], + display: data[types[x]](), + classOnLoad: "btn tb opt"+(player.options[name].includes(types[x])?" optActive":""), + onclick: + "toggleTabDisplay(""+types[x]+"", this); saveOptions();" + }; + } } if (type>0) { setDropdown(dropdown, els); @@ -181,13 +198,29 @@ function changeOpt(name, type) { } } +function toggleTabDisplay(x, el) { + let extensions = el.className.split(" ").filter(x => x != "btn" && x != "tb" && x != "opt" && x != "optActive").join(" ") + if (extensions.length>0) extensions = " "+extensions + if (!player.options.tabsHidden.includes(x)) { + player.options.tabsHidden.push(x) + el.className = "btn tb opt optActive"+extensions + } else { + player.options.tabsHidden.splice(player.options.tabsHidden.indexOf(x), 1); + el.className = "btn tb opt"+extensions + } +} + function getInfo(sav) { let mds = ""; if (sav.modes.length > 1) mds = sav.modes.reduce((x, y) => capitalFirst(x) + ", " + capitalFirst(y)); else if (sav.modes.length > 0) mds = capitalFirst(sav.modes[0].replace("_"," ")); else mds = "None"; let info = "Modes: " + mds + "
    "; - if (sav.elementary?(sav.elementary.foam?sav.elementary.foam.unl:false):false) { + if (sav.mlt?(sav.mlt.times?ExpantaNum.gt(sav.mlt.times, 0):false):false) { + info += "Total ME: "+showNum(new ExpantaNum(sav.mlt.totalEnergy))+", Unique Multiverses Completed: "+(sav.mlt.highestCompleted+1)+", Total Quilt Upgrades: "+showNum(new ExpantaNum(sav.mlt.quiltUpgs.reduce((a,c) => ExpantaNum.add(a,c))))+", " + } else if (sav.elementary?(sav.elementary.sky?sav.elementary.sky.unl:false):false) { + info += "Skyrmions: "+showNum(new ExpantaNum(sav.elementary.sky.amount))+", Pions: "+showNum(new ExpantaNum(sav.elementary.sky.pions.amount))+", Spinors: "+showNum(new ExpantaNum(sav.elementary.sky.spinors.amount))+", " + } else if (sav.elementary?(sav.elementary.foam?sav.elementary.foam.unl:false):false) { info += "Quantum Foam: "+showNum(new ExpantaNum(sav.elementary.foam.amounts[0]))+", " if (sav.elementary.entropy?sav.elementary.entropy.unl:false) { info += "Entropy: "+showNum(new ExpantaNum(sav.elementary.entropy.amount))+", " @@ -259,7 +292,7 @@ function getInfo(sav) { info += "Rank Cheapener " + showNum(new ExpantaNum(sav.rankCheap || 0)) + ", "; info += "Rank " + showNum(new ExpantaNum(sav.rank)) + ", "; } - info += "Distance: " + formatDistance(new ExpantaNum(sav.distance)); + info += "Distance: " + formatDistance(new ExpantaNum(sav.distance), sav.mlt?(sav.mlt.times?ExpantaNum.lt(sav.mlt.times, 1):true):true); return info; } @@ -334,30 +367,24 @@ function selectMode(name) { function confirmModes() { if (modesSelected.length == 0) startModes([]); else if (modesSelected.length == 1) { - let modeData = MODES[modesSelected[0]]; - if (modeData.balanceCheck) - if (!confirm("This mode is " + modeData.balancing + ". Are you sure you want to enter this run?")) - return; + let modeData = MODEBALANCES[modesSelected[0]]; + if (modeData) { + if (modeData.balanceCheck) + if (!confirm("This mode is " + modeData.balancing + ". Are you sure you want to enter this run?")) + return; + } else if (!confirm("You have selected an unbalanced mode. Are you sure you want to enter this run?")) return; startModes(modesSelected); - } else if (modesSelected.length == 2) { - let base = MODES[modesSelected[0]]; - for (let i = 1; i < modesSelected.length; i++) { - let mode = base.combos[modesSelected[i]]; - if (mode.balanceCheck) - if ( - !confirm( - "This mode combination is " + - mode.balancing + - ". Are you sure you want to enter this mode combination?" - ) - ) + } else if (modesSelected.length == 2) startModes(modesSelected); + else { + let modeData = MODEBALANCES[calcModeAndBalanceName(modesSelected).balanceName] + if (modeData) { + if (modeData.balanceCheck) { + if (!confirm("This mode combination is " + modeData.balancing + ". Are you sure you want to enter this run?")) return; - startModes(modesSelected); - } - } else { - if ( + } + } else if ( !confirm( - "You have selected more than two modes. This may cause an unbalanced or even broken game mode. Are you sure you want to do this?" + "You have selected an unbalanced mode combination. Are you sure you want to enter this run?" ) ) return; @@ -367,9 +394,68 @@ function confirmModes() { function modeActive(name) { if (name[0] == "!") return !modeActive(name.slice(1)) - let l = name.split("+") - for (let i = 0; i < l.length; i++) { - if (!player.modes.includes(l[i])) return false + if (name.includes("-")) { + let m = name.split("-") + for (let i = 0; i < m.length; i++) { + let active = modeActive(m[i]) + if (i==0) { + if (!active) return false; + } else if (active) return false; + } + return true; + } else if (name.includes("+")) { + let l = name.split("+") + for (let i = 0; i < l.length; i++) { + if (!modeActive(l[i])) return false + } + return true; + } else return player.modes.includes(name); +} + +function setupModeComboTable() { + let data = MODE_TABLE_DATA; + let el = new Element("modeComboTable"); + let html = "
    " + for (let i=-1;i"; + } + html += "
    " + for (let r=0;rActivate" + html += "" + c = rc; + } + html += "" + } + + el.addHTML(html); +} + +function getCompletedModeCombos() { + let data = MODEBALANCES; + let toRet = []; + let all = getAllSaves(); + for (let x=0;x=136) toRet.push(m); + else if (ExpantaNum.gte(p.bestDistance, ExpantaNum.pow(DISTANCES.mlt, 1e3)) && p.achievements.length>=neededAchs) toRet.push(m); } - return true + return toRet; } \ No newline at end of file diff --git a/js/main/pathogens.js b/js/main/pathogens.js index 48bd1186..5cca3091 100644 --- a/js/main/pathogens.js +++ b/js/main/pathogens.js @@ -9,13 +9,13 @@ function updatePathogensGain(){ if (tmp.ach) if (tmp.ach[63].has) tmp.pathogens.gain = tmp.pathogens.gain.times(ach63Eff()); if (tmp.ach) if (tmp.ach[68].has) { tmp.pathogens.gain = tmp.pathogens.gain.times(2.5); - if (modeActive("extreme+hikers_dream")) tmp.pathogens.gain = tmp.pathogens.gain.times(tmp.hd.enerUpgs[3]) + if (modeActive("hard+hikers_dream")) tmp.pathogens.gain = tmp.pathogens.gain.times(tmp.hd.enerUpgs[3]) } let a84 = tmp.dc ? tmp.dc.flow.max(1) : new ExpantaNum(1); if (a84.gte(50)) a84 = a84.log10().times(ExpantaNum.div(50, Math.log10(50))); if (tmp.ach[84].has) tmp.pathogens.gain = tmp.pathogens.gain.times(a84); if (tmp.ach[131].has) tmp.pathogens.gain = tmp.pathogens.gain.times(2); - if (tmp.ach[87].has && modeActive("extreme+hikers_dream")) { + if (tmp.ach[87].has && modeActive("hard+hikers_dream")) { let x = player.tr.cubes.div("1e750").pow(.2).plus(1) if (x.gt(100)) x = x.log10().times(50) tmp.pathogens.gain = tmp.pathogens.gain.times(x) @@ -77,6 +77,7 @@ function updateTempPathogens() { if (extremeStadiumActive("quantron")) tmp.pathogens.upgPow = tmp.pathogens.upgPow.times(0.9); if (nerfActive("noPathogenUpgs")) tmp.pathogens.upgPow = new ExpantaNum(0); if (tmp.pathogens.upgPow.gte(10)) tmp.pathogens.upgPow = tmp.pathogens.upgPow.sqrt().times(Math.sqrt(10)) + if (player.elementary.sky.unl && tmp.elm) tmp.pathogens.upgPow = tmp.pathogens.upgPow.times(tmp.elm.sky.pionEff[2]) if (!tmp.pathogens.extra) tmp.pathogens.extra = function (n) { let extra = new ExpantaNum(0); if (tmp.inf) if (tmp.inf.asc) extra = extra.plus(tmp.inf.asc.perkEff(2)); @@ -117,6 +118,7 @@ function updateTempPathogens() { if (ret.gte(2e3) && !(tmp.elm?tmp.elm.bos.hasHiggs("0;1;4"):false)) ret = ret.sqrt().times(Math.sqrt(2e3)); if (ret.gte(1e4)) ret = ret.log10().times(1e4 / 4); if (tmp.elm) if (tmp.elm.bos.hasHiggs("0;1;4")) ret = ret.times(4) + if (player.elementary.sky.unl && tmp.elm) ret = ret.times(tmp.elm.sky.pionEff[11]) return ret; break; } case 2: { @@ -147,9 +149,11 @@ function updateTempPathogens() { break; case 6: if (sPos) { - return ExpantaNum.pow(1.4, bought.sqrt()).times( + let eff = ExpantaNum.pow(1.4, bought.sqrt()).times( ExpantaNum.pow(2, bought.pow(ExpantaNum.mul(2.5, fp))).pow(0.2) ); + if (eff.gte(ExpantaNum.pow(10, 3e9))) eff = ExpantaNum.pow(10, eff.log10().times(Math.pow(3e9, 2)).cbrt()) + return eff; } else return ExpantaNum.pow(1.4, bought.sqrt()) break; case 7: @@ -332,7 +336,7 @@ function getPathogenUpgSoftcapStart(x) { let sc = new ExpantaNum(PTH_UPG_SCS[x]) if (tmp.inf) if (tmp.inf.upgs.has("3;6")) sc = sc.plus(1); if (modeActive("hard")) { - sc = modeActive("easy") ? sc : new ExpantaNum(1); + sc = modeActive("easy") ? sc : new ExpantaNum(modeActive("extreme")?1:2); if (tmp.ach[65].has) sc = sc.plus(5); } if (modeActive("easy")) sc = sc.times(1.1).round(); diff --git a/js/main/ranks.js b/js/main/ranks.js index 8417c33e..2a23fb4d 100644 --- a/js/main/ranks.js +++ b/js/main/ranks.js @@ -186,7 +186,7 @@ function updateTempRanks() { function getRankFP() { let fp = new ExpantaNum(1); if (player.tier.gt(0)) fp = fp.times(1.25) - if (player.tier.gt(2)) fp = fp.times(tier3Eff()) + if (player.tier.gt(2)) fp = fp.times(tier2Eff()) if (tmp.ach) if (tmp.ach[43].has) fp = fp.times(1.025) if (player.tr.upgrades.includes(3) && !HCCBA("noTRU")) fp = fp.times(1.1) if (tmp.rankCheap && modeActive("extreme")) fp = fp.times(getRankCheapEff()) diff --git a/js/main/rf.js b/js/main/rf.js index ccc68d2a..fbf15ed8 100644 --- a/js/main/rf.js +++ b/js/main/rf.js @@ -11,16 +11,18 @@ function getFreeFuel() { function getFuelEff() { let rf = player.rf; if (modeActive("extreme") && rf.gte(10)) rf = rf.log10().times(10); - let eff = rf + let trf = rf .plus(getFreeFuel()) .times(getFuelPow()) - .plus(1) + + let eff = trf.plus(1) .logBase(2) .plus(1) .pow(0.05); + if (tmp.inf ? (tmp.inf.stadium.completed("infinity") && mltRewardActive(1)) : false) eff = eff.max(trf.plus(1).pow(0.1)) if (modeActive("hard")) eff = eff.sub(0.02); if (modeActive('easy')) eff = eff.plus(0.012); - if (tmp.inf) if (tmp.inf.stadium.completed("infinity")) eff = eff.sub(1).times(2).add(1); + if (tmp.inf) if (tmp.inf.stadium.completed("infinity")) eff = eff.sub(1).times(mltRewardActive(1)?10:2).add(1); if (nerfActive("noRF")) eff = new ExpantaNum(1); return eff } diff --git a/js/main/rockets.js b/js/main/rockets.js index 5932939d..b73fd510 100644 --- a/js/main/rockets.js +++ b/js/main/rockets.js @@ -27,6 +27,7 @@ function getRocketEffect() { if (tmp.inf) if (tmp.inf.upgs.has("9;2")) eff = eff.plus(INF_UPGS.effects["9;2"]()); if (tmp.inf) if (tmp.inf.upgs.has("6;10")) eff = eff.times(16) if (player.elementary.foam.unl && tmp.elm) eff = eff.times(tmp.elm.qf.boost20) + if (tmp.inf) if (tmp.inf.stadium.completed("reality") && mltRewardActive(1)) eff = eff.times(8); return eff; } @@ -38,7 +39,7 @@ function getRocketGainMult() { if (tmp.ach[44].has) mult = mult.times(1.15); if (tmp.ach[76].has) mult = mult.times(1.02); if (tmp.ach[131].has) mult = mult.times(2); - if (modeActive("extreme") && player.rf.gt(0)) mult = mult.times(ExpantaNum.pow(2, player.furnace.upgrades[2])); + if (modeActive("extreme") && player.rf.gt(0)) mult = mult.times(ExpantaNum.pow(2, player.furnace.upgrades[2].times(tmp.fn ? tmp.fn.upgPow : 1))); if (player.rank.gt(100)) mult = mult.times(2); if (player.tr.upgrades.includes(10) && !HCCBA("noTRU")) mult = mult.times(tr10Eff().max(1)); if (player.tr.upgrades.includes(28) && !HCCBA("noTRU") && modeActive("extreme")) mult = mult.times(player.furnace.coal.plus(1).pow(0.15)); @@ -77,9 +78,12 @@ function updateTempRockets() { tmp.rockets.canRocket = player.distance.gte(ExpantaNum.mul(LAYER_REQS["rockets"][1], tmp.rockets.lrm)); if (nerfActive("noRockets")) tmp.rockets.canRocket = false; tmp.rockets.layer = new Layer("rockets", tmp.rockets.canRocket, "normal"); - tmp.rockets.accPow = tmp.acc.plus(1).log10().pow(getRocketEffect()).plus(player.rockets).max(1); - tmp.rockets.mvPow = tmp.maxVel.plus(1).log10().pow(getRocketEffect()).plus(player.rockets).max(1); - tmp.rockets.accEnPow = tmp.accEn.plus(1).log10().pow(getRocketEffect()).plus(1); + let mlt5 = mltActive(5); + let r = player.rockets; + if (mlt5) r = r.min(0); + tmp.rockets.accPow = tmp.acc.plus(1).log10().pow(getRocketEffect()).plus(r).max(1); + tmp.rockets.mvPow = tmp.maxVel.plus(1).log10().pow(getRocketEffect()).plus(r).max(1); + tmp.rockets.accEnPow = tmp.accEn.plus(1).log10().pow(getRocketEffect()).max(1); tmp.rockets.tsPow = tmp.inf?(tmp.inf.upgs.has("10;3")?(tmp.timeSpeed.plus(1).log10().pow(getRocketEffect()).plus(1)):new ExpantaNum(1)):new ExpantaNum(1) if (modeActive("extreme") && tmp.fn) tmp.rockets.clPow = tmp.fn.gain.plus(1).log10().pow(getRocketEffect()).plus(1); if (!tmp.rockets.onReset) tmp.rockets.onReset = function (prev) { diff --git a/js/main/scaling.js b/js/main/scaling.js index 147e2546..93fb02ac 100644 --- a/js/main/scaling.js +++ b/js/main/scaling.js @@ -25,9 +25,14 @@ function getScalingStart(type, name) { } else if (type=="superscaled") { if (tmp.inf) if (tmp.inf.upgs.has("6;2")) start = start.plus(5) if (tmp.inf) if (tmp.inf.stadium.completed("solaris")) start = start.plus(STADIUM_REWARDS.effects.solaris()) + } else if (type=="hyper") { + if (hasMltMilestone(23) && player.mlt.active==0) start = start.plus(250); } else if (type=="atomic") { if (player.elementary.bosons.scalar.higgs.upgrades.includes("0;0;5") && tmp.elm) start = start.plus(tmp.elm.bos["higgs_0;0;5"]()) } + if (player.elementary.sky.unl && tmp.elm) start = start.plus(tmp.elm.sky.pionEff[1]) + } else if (name=="rankCheap") { + if (tmp.fn) if (tmp.fn.pl) if (tmp.fn.pl.unl) start = start.plus(tmp.fn.pl.boosts[4]) } else if (name=="tier") { if (type=="scaled") { if (player.tr.upgrades.includes(12) && !HCCBA("noTRU")) start = start.plus(2) @@ -37,6 +42,7 @@ function getScalingStart(type, name) { } else if (type=="superscaled") { if (tmp.inf) if (tmp.inf.upgs.has("5;7")) start = start.plus(INF_UPGS.effects["5;7"]()); } + if (player.elementary.sky.unl && tmp.elm) start = start.plus(tmp.elm.sky.pionEff[1]) } else if (name=="rf") { if (type=="scaled") { if (player.dc.unl && tmp.dc) start = start.plus(tmp.dc.dfEff) @@ -52,6 +58,8 @@ function getScalingStart(type, name) { } else if (name=="pathogenUpg") { if (type=="scaled") { if (tmp.inf) if (tmp.inf.upgs.has("4;5")) start = start.plus(2) + } else if (type=="superscaled") { + if (tmp.inf && mltRewardActive(1)) if (tmp.inf.stadium.completed("solaris")) start = start.plus(STADIUM_REWARDS.effects.solaris()) } else if (type=="hyper") { if (player.elementary.entropy.upgrades.includes(4) && tmp.elm) start = start.plus(tmp.elm.entropy.upgEff[4]) } @@ -68,13 +76,20 @@ function getScalingStart(type, name) { if (tmp.inf) if (tmp.inf.upgs.has("9;3")) start = start.plus(1) if (player.elementary.theory.tree.unl) start = start.plus(TREE_UPGS[7].effect(ExpantaNum.add(player.elementary.theory.tree.upgrades[7]||0, TREE_UPGS[11].effect(player.elementary.theory.tree.upgrades[11]||0)))) } else if (type=="superscaled") { - if (modeActive("extreme+hikers_dream")) start = start.min(35) + if (modeActive("extreme+hikers_dream")) { + start = start.min(35) + if (tmp.ach[153].has) start = start.plus(TREE_UPGS[7].effect(ExpantaNum.add(player.elementary.theory.tree.upgrades[7]||0, TREE_UPGS[11].effect(player.elementary.theory.tree.upgrades[11]||0))).div(10)) + } if (player.elementary.foam.unl && tmp.elm ? tmp.elm.qf : false) start = start.plus(tmp.elm.qf.boost10) } } else if (name=="enlightenments") { if (type=="scaled") { if (modeActive("extreme")) start = start.sub(4) } + } else if (name=="dervBoost") { + if (type=="superscaled") { + if (player.elementary.entropy.upgrades.includes(32)) start = start.plus(2); + } } if (type!=="atomic") if (Object.values(SCALING_STARTS)[Object.keys(SCALING_STARTS).indexOf(type)+1][name]!==undefined) start = start.min(getScalingStart(Object.keys(SCALING_STARTS)[Object.keys(SCALING_STARTS).indexOf(type)+1], name)) return start @@ -96,6 +111,8 @@ function getScalingPower(type, name) { } else if (type=="hyper") { if (tmp.inf) if (tmp.inf.upgs.has("8;6")) power = power.times(ExpantaNum.sub(1, INF_UPGS.effects["8;6"]())) if (tmp.inf) if (tmp.inf.upgs.has("7;9")) power = power.times(0.98) + } else if (type=="atomic") { + if (hasMltMilestone(15) && tmp.mlt) power = power.times(tmp.mlt.mil15reward) } } else if (name=="rankCheap" && modeActive("extreme")) { if (type=="scaled") { @@ -137,16 +154,25 @@ function getScalingPower(type, name) { if (tmp.inf) if (tmp.inf.upgs.has("8;7")) power = power.times(0.16) } else if (type=="superscaled") { if (tmp.inf) if (tmp.inf.upgs.has("10;1")) power = power.times(ExpantaNum.sub(1, INF_UPGS.effects["10;1"]("pth"))) + } else if (type=="hyper") { + if (tmp.ach[185].has) power = power.sub(.1); } } else if (name=="darkCore") { if (type=="scaled") { if (tmp.inf) if (tmp.inf.upgs.has("8;6")) power = power.times(ExpantaNum.sub(1, INF_UPGS.effects["8;6"]())) + } else if (type=="hyper") { + if (!modeActive("extreme")&&!modeActive("hikers_dream")) power = power.div(25.5) } } else if (name=="endorsements") { if (type=="scaled") { if (tmp.pathogens) power = power.times(ExpantaNum.sub(1, tmp.pathogens[15].eff())) } } - if (type=="hyper") power = power.max(0.5) + if (type=="hyper"&&name!="darkCore") power = power.max(0.5) return power +} + +function getScalingPowerDisplay(type,name) { + if (!modeActive("extreme")&&!modeActive("hikers_dream")&&name=="darkCore"&&type=="hyper") return getScalingPower(type,name).times(25.5); + return getScalingPower(type,name) } \ No newline at end of file diff --git a/js/main/special.js b/js/main/special.js index 0095e66f..d39c5029 100644 --- a/js/main/special.js +++ b/js/main/special.js @@ -215,6 +215,52 @@ function loadTempFeatures() { else return player.distance.div(ExpantaNum.mul(DISTANCES.uni, FOAM_REQ)) } }), + skyrmions: new Feature({ + name: "skyrmions", + res_amt: 3, + req: [ + new ExpantaNum(getSkyReqData(0)), + new ExpantaNum(getSkyReqData(1)), + new ExpantaNum(getSkyReqData(2)) + ], + res: ["distance", function() { return player.elementary.fermions.quarks.amount }, function() { return player.elementary.fermions.leptons.amount }], + resName: ["distance", "quarks", "leptons"], + display: [formatDistance, showNum, showNum], + reached: function() { return false }, + progress: function () { + if (player.options.featPerc=="logarithm") { + return player.distance + .max(1) + .log10() + .div(new ExpantaNum(getSkyReqData(0)).log10()) + .min(1) + .times(player.elementary.fermions.quarks.amount.max(1).log10().div(new ExpantaNum(getSkyReqData(1)).log10()).min(1)) + .times(player.elementary.fermions.leptons.amount.max(1).log10().div(new ExpantaNum(getSkyReqData(2)).log10()).min(1)); + } else { + return player.distance + .div(getSkyReqData(0)) + .min(1) + .times(player.elementary.fermions.quarks.amount.div(getSkyReqData(1)).min(1)) + .times(player.elementary.fermions.leptons.amount.div(getSkyReqData(2)).min(1)); + } + }, + spec: [false, true, true], + superSpec: [false, true, true], + }), + multiverse: new Feature({ + name: "multiverse", + req: function() { return new ExpantaNum(DISTANCES.mlt) }, + res: "distance", + display: formatDistance, + reached: function() { return false }, + progress: function() { + if (player.options.featPerc=="logarithm") { + return player.distance.max(1).log10().div(ExpantaNum.log10(DISTANCES.mlt)).min(1); + } else { + return player.distance.div(DISTANCES.mlt).min(1); + } + }, + }), }; } @@ -226,6 +272,7 @@ function updateTempSpecial() { for (let i = 0; i < Object.keys(tmp.features).length; i++) { let feature = Object.values(tmp.features)[i]; if (!(feature.name=="theory"&&player.elementary.theory.unl)) if (!feature.reached) { + if (mltActive(1) && (feature.name=="theory"||feature.name=="hadronic challenge"||feature.name=="quantum foam"||feature.name=="skyrmions")) continue; tmp.nf = feature.name; break; } @@ -244,6 +291,15 @@ function updateTempSpecial() { if (tmp.selAch === undefined || player.tab !== "achievements") tmp.selAch = 0; tmp.ga = player.achievements.length; tmp.ta = getAllAchievements().length; + + // Misc + if (tmp.nf=="skyrmions") { + tmp.features.skyrmions.req = [ + new ExpantaNum(getSkyReqData(0)), + new ExpantaNum(getSkyReqData(1)), + new ExpantaNum(getSkyReqData(2)) + ] + } } function updateLayerMults() { diff --git a/js/main/tiers.js b/js/main/tiers.js index 7b158325..7b662c18 100644 --- a/js/main/tiers.js +++ b/js/main/tiers.js @@ -162,8 +162,10 @@ function updateTempTiers() { function getTierFP() { let fp = new ExpantaNum(1) + if (player.elementary.sky.unl && tmp.elm && !scalingActive("tier", player.tier, "scaled")) fp = fp.sub(tmp.elm.sky.pionEff[10]).pow(-1) if (player.tr.upgrades.includes(20) && !HCCBA("noTRU") && modeActive("extreme")) fp = fp.times(player.rankCheap.plus(1).log10().plus(1).log10().plus(1)); if (extremeStadiumActive("cranius", 5)) fp = fp.div(player.rankCheap.plus(1)) + if (tmp.ach) if (tmp.ach[194].has) fp = fp.times(1.0069); return fp } @@ -175,7 +177,7 @@ function getTierBaseCost() { return bc } -function tier3Eff() { +function tier2Eff() { let tier = player.tier; if (tier.gte(10)) tier = tier.log10().times(10); return ExpantaNum.pow(1.1, tier); diff --git a/js/main/timeSpeed.js b/js/main/timeSpeed.js index da7cf43d..96505612 100644 --- a/js/main/timeSpeed.js +++ b/js/main/timeSpeed.js @@ -47,9 +47,17 @@ function updateTempTimeSpeed() { if (player.tr.upgrades.includes(30) && !HCCBA("noTRU") && modeActive("extreme")) tmp.timeSpeed = tmp.timeSpeed.pow(player.pathogens.amount.plus(1).log10().plus(1).times(10).slog(10).pow(1.2)); if (tmp.rockets) tmp.timeSpeed = tmp.timeSpeed.times(tmp.rockets.tsPow) + if (player.mlt.times.gt(0) && tmp.mlt) tmp.timeSpeed = tmp.timeSpeed.times(tmp.mlt.quilts[1].eff); if (modeActive("extreme") && tmp.timeSpeed.gte(Number.MAX_VALUE)) { if (player.tr.upgrades.includes(31) && !HCCBA("noTRU")) tmp.timeSpeed = tmp.timeSpeed.pow(0.725).times(Math.pow(Number.MAX_VALUE, 0.275)) else tmp.timeSpeed = tmp.timeSpeed.sqrt().times(Math.sqrt(Number.MAX_VALUE)) } if (modeActive("extreme")) if (tmp.fn) tmp.timeSpeed = tmp.timeSpeed.times(tmp.fn.enh.eff2) + if (((player.elementary.theory.active&&player.elementary.theory.depth.gte(player.modes==[]?25:20))||HCTVal("tv").gte(player.modes==[]?25:20)) && tmp.elm) tmp.timeSpeed = tmp.timeSpeed.pow(tmp.elm.theory.nerf) + if (mltActive(2)) tmp.timeSpeed = tmp.timeSpeed.root(1.3); + if (mltActive(5)) tmp.timeSpeed = tmp.timeSpeed.root(modeActive("extreme")?Math.PI:3.6); + if (modeActive("extreme") && tmp.timeSpeed.gte(ExpantaNum.pow(DISTANCES.mlt, 300))) { + let mlt300 = ExpantaNum.pow(DISTANCES.mlt, 300); + tmp.timeSpeed = ExpantaNum.pow(mlt300, tmp.timeSpeed.logBase(mlt300).root(5)) + } } diff --git a/js/main/tr.js b/js/main/tr.js index 0853f758..f3aa1fa4 100644 --- a/js/main/tr.js +++ b/js/main/tr.js @@ -5,7 +5,7 @@ function updateTempTR() { cubes = player.tr.cubes; if (cubes.gte(tmp.tr.esc)) cubes = cubes.cbrt().times(Math.pow(tmp.tr.esc, 2 / 3)); tmp.tr.eff = cubes.plus(1).log10().plus(1).logBase(2); - if (tmp.inf) if (tmp.inf.stadium.completed("reality")) tmp.tr.eff = tmp.tr.eff.times(3); + if (tmp.inf) if (tmp.inf.stadium.completed("reality")) tmp.tr.eff = tmp.tr.eff.times(mltRewardActive(1)?8:3); } function getTimeCubeGain() { diff --git a/js/notations.js b/js/notations.js index 09bb2d72..d2ccf59d 100644 --- a/js/notations.js +++ b/js/notations.js @@ -6,34 +6,34 @@ notations.scientific = function (val, places, locs) { notations.engineering = function(val, places=(player.options.sf - 1), locs) { if (val.lt(0.001)) return notations.scientific(val, places, locs) - else if (val.lt(1e3)) return decimalPlaces(val, places) + else if (val.lt(1e3)) return decimalPlaces(val, places, val.eq(val.round())) else if (val.lt("1e10000")) { let back = val.logBase(1e3).floor().times(3) let front = val.div(ExpantaNum.pow(10, back)) - return decimalPlaces(front, places)+"e"+decimalPlaces(back, places) + return decimalPlaces(front, places, val.eq(val.round()))+"e"+decimalPlaces(back, places, true) } else if (val.lt("ee1000")) { let back = val.log10().logBase(1e3).floor().times(3) let front = val.log10().div(ExpantaNum.pow(10, back)) - return "e"+decimalPlaces(front, places)+"e"+decimalPlaces(back, places) + return "e"+decimalPlaces(front, places)+"e"+decimalPlaces(back, places, true) } else if (val.lt("eee1000")) { let back = val.log10().log10().logBase(1e3).floor().times(3) let front = val.log10().log10().div(ExpantaNum.pow(10, back)) - return "ee"+decimalPlaces(front, places)+"e"+decimalPlaces(back, places) + return "ee"+decimalPlaces(front, places)+"e"+decimalPlaces(back, places, false) } else return disp(val, places, locs, 10) } notations.standard = function (val, places, locs) { if (val.lt(0.001)) return notations.scientific(val, places, locs); - else if (val.lt(1e3)) return decimalPlaces(val, places); + else if (val.lt(1e3)) return decimalPlaces(val, places, val.eq(val.round())); else if (val.lt(1e33)) { return ( - decimalPlaces(val.div(ExpantaNum.pow(10, val.log10().div(3).floor().times(3))), places) + + decimalPlaces(val.div(ExpantaNum.pow(10, val.log10().div(3).floor().times(3))), places, val.eq(val.round())) + " " + STANDARD_DATA.STARTS[val.log10().sub(3).div(3).floor().toNumber()] ); } else if (val.lt(1e303)) { return ( - decimalPlaces(val.div(ExpantaNum.pow(10, val.log10().div(3).floor().times(3))), places) + + decimalPlaces(val.div(ExpantaNum.pow(10, val.log10().div(3).floor().times(3))), places, val.eq(val.round())) + " " + STANDARD_DATA.ONES[val.log10().sub(3).div(3).mod(10).floor().toNumber()] + STANDARD_DATA.TENS[val.log10().sub(3).div(30).floor().toNumber()] @@ -51,11 +51,10 @@ notations.standard = function (val, places, locs) { let size = Math.min(locs, highest); let mag = decimalPlaces(val.div(ExpantaNum.pow(10, val.log10().div(3).floor().times(3))), places); if (mag === undefined) mag = "1"; - let txt = mag; + let txt = mag+" "; for (let x = highest; x > Math.max(highest - size, 0); x--) { let m = ExpantaNum.pow(1000, x); txt += - " " + STANDARD_DATA.MILESTONE_PREF[val.log10().sub(3).div(m.times(3)).mod(10).floor().toNumber()] + STANDARD_DATA.TENS[val.log10().sub(3).div(m.times(30)).mod(10).floor().toNumber()] + STANDARD_DATA.HUNDREDS[val.log10().sub(3).div(m.times(300)).mod(10).floor().toNumber()]; diff --git a/js/update.js b/js/update.js index dc02f0e4..0a45872d 100644 --- a/js/update.js +++ b/js/update.js @@ -1,3 +1,5 @@ +var newsTimeouts = [] + function updateTemp() { updateTempEarlyGame(); updateTempRanks(); @@ -13,6 +15,7 @@ function updateTemp() { updateTempDC(); updateTempInf(); updateTempElementary(); + updateTempMultiverse(); updateTempSC(); updateTempMisc(); updateTempTimeSpeed(); @@ -41,6 +44,30 @@ function setupHTML() { table += ""; } achTable.setHTML(table); + + // Setup Mode Combo Table + setupModeComboTable(); + + // Rank/Tier Stats + let rankTierTable = new Element("rankTierStats") + table = "
    " + for (let i=0;i" + table += "Rank "+showNum(parseInt(ranks)+1)+": "+(RANK_DESCS[ranks][0].toUpperCase() + RANK_DESCS[ranks].slice(1)) + if (window["rank"+ranks+"Eff"]) table += "
    Currently: x" + table += "
    " + } + table += "
    " + for (let i=0;i" + table += "Tier "+showNum(parseInt(tiers)+1)+": "+(TIER_DESCS[tiers][0].toUpperCase() + TIER_DESCS[tiers].slice(1)) + if (window["tier"+tiers+"Eff"]) table += "
    Currently: x" + table += "
    " + } + table += "" + rankTierTable.setHTML(table) // Time Reversal Upgrade Table let trTable = new Element("trTable"); @@ -123,7 +150,7 @@ function setupHTML() { autos += "
    " + + "' class='automator' style='border-color: "+AUTOMATOR_BORDER[Object.keys(AUTOMATORS)[i]]+";'>" + "" + @@ -139,7 +166,7 @@ function setupHTML() { autos += "

    " } } - autos += "

    "; + autos += ""; } au.setHTML(autos); for (let i = 0; i < Object.keys(player.automators).length; i++) { @@ -163,8 +190,9 @@ function setupHTML() { // Derivatives let dv = new Element("derivs"); data = "
    "; - for (let i = 0; i < DERV.length; i++) { - let name = DERV[i]; + let de = DERV_MLT_2; + for (let i = 0; i < de.length; i++) { + let name = de[i]; let suffix = i == 0 ? "" : "/s" + (i == 1 ? "" : "" + i + ""); data += "
    " + - "

    "; + "

    "; } dv.setHTML(data); @@ -228,6 +256,7 @@ function setupHTML() { } // Hadronic Challenge + new Element("mltHC").setHTML("WARNING: STARTING A HADRONIC CHALLENGE WITH ANY OF THESE SELECTORS WILL FORCE A MULTIVERSE RESET!
    "); let len = Object.keys(HC_DATA).length for (let i=0;i"+HC_TITLE[name]+": "+(HC_CHALLS.includes(name)?("(hover for info)"):"")+"
    " + let html = "
    "+HC_TITLE[name]+": "+(HC_CHALLS.includes(name)?("(hover for info)"):"") + if (HC_EXTREME_CHALLS.includes(name)) html += "(hover for info)" + html += "
    " if (data[0]=="range") html += "
    " html += "
    " el.addHTML(html) } updateHCSelectorInputs() + // Pion/Spinor Fields + setupSkyField("pion") + setupSkyField("spinor") + + // Plasma Boosts + setupPlasmaBoosts() + + // Multiverse Stuff + setupMltMilestoneTable() + // Version let v = new Element("version") v.setTxt(player.version) @@ -277,14 +318,14 @@ function updateAfterTick() { saveTimer = 0; } if (modeActive("absurd") && !reloaded) { - window.resizeTo(Math.random() * 400, Math.random() * 400); - window.moveTo(Math.random() * 1000, Math.random() * 200); - const bufhiesibvfib = document.body.querySelectorAll("*"); + const bufhiesibvfib = document.body.querySelectorAll(".tab, #mainContainer"); for (const i in bufhiesibvfib) if (bufhiesibvfib[i].style !== undefined) { let t = `rotate(${Math.random() * 360}deg) `; - t += "skew(" + Math.random() * 360 + "deg) "; - t += "scale(" + (Math.random() * 3) ** 2 / 8 + ") "; + t += "skew(" + Math.random() * 75 + "deg) "; + let scale = (Math.random() * 3) ** 2 / 9; + if (scale<0.1) scale = 0.1; + t += "scale(" + scale + ") "; bufhiesibvfib[i].style.transform = t; } } @@ -299,12 +340,15 @@ function updateUnlocks() { if (player.distance.gte(ExpantaNum.mul(COLLAPSE_UNL, tmp.collapse.lrm))) player.collapse.unl = true; if (player.collapse.cadavers.gte(ExpantaNum.mul(PATHOGENS_UNL, tmp.pathogens.lrm))) player.pathogens.unl = true; if (player.distance.gte(ExpantaNum.mul(DC_UNL, tmp.dc.lrm))) player.dc.unl = true; - if (tmp.inf.can && !infActive && player.inf.endorsements.lt(10)) tmp.inf.forceReset(); + if (tmp.inf.can && !infActive && player.inf.endorsements.lt(10) && !(tmp.ach[178].has&&tmp.elm.bos.hasHiggs("2;0;0"))) tmp.inf.forceReset(); if (player.distance.gte(ExpantaNum.mul(DISTANCES.uni, "1e90000"))) player.inf.derivatives.unl = true; - if ((player.distance.gte(THEORY_REQ[0]) && player.bestEP.gte(THEORY_REQ[1])) || player.elementary.theory.unl) player.elementary.theory.unl = true; - if (player.distance.gte(HC_REQ[0]) && player.inf.endorsements.gte(HC_REQ[1])) player.elementary.hc.unl = true - if (player.distance.gte(FOAM_REQ)) player.elementary.foam.unl = true - if (player.elementary.foam.maxDepth.gte(5)) player.elementary.entropy.unl = true; + if (!mltActive(1)) { + if ((player.distance.gte(THEORY_REQ[0]) && player.bestEP.gte(THEORY_REQ[1])) || player.elementary.theory.unl) player.elementary.theory.unl = true; + if (player.distance.gte(HC_REQ[0]) && player.inf.endorsements.gte(HC_REQ[1])) player.elementary.hc.unl = true + if (player.distance.gte(FOAM_REQ)) player.elementary.foam.unl = true + if (player.elementary.foam.maxDepth.gte(5)) player.elementary.entropy.unl = true; + if (player.distance.gte(getSkyReqData(0)) && player.elementary.fermions.quarks.amount.gte(getSkyReqData(1)) && player.elementary.fermions.leptons.amount.gte(getSkyReqData(2))) player.elementary.sky.unl = true; + } } document.onkeyup = function(e) { @@ -316,6 +360,7 @@ document.onkeydown = function(e) { if (!player.options.hot || player.modes.includes("absurd")) return let shiftDown = e.shiftKey let key = e.which + if (player.tab=="mlt" && key!==77) return; switch(key) { case 49: if (INF_TABS.ascension()) tmp.inf.asc.activatePerk(1) @@ -339,7 +384,10 @@ document.onkeydown = function(e) { break; case 69: // Nice. if (shiftDown && TABBTN_SHOWN.elementary()) tmp.elm.layer.reset() - else if (TABBTN_SHOWN.inf() && player.inf.endorsements.gte(10)) tmp.inf.layer.reset() + else { + if (infActive) skipInfAnim(); + else if (TABBTN_SHOWN.inf() && player.inf.endorsements.gte(10)) tmp.inf.layer.reset(); + } break; case 70: if (shiftDown && TABBTN_SHOWN.furnace() && tmp.fn) tmp.fn.bfReset() @@ -347,6 +395,10 @@ document.onkeydown = function(e) { break; case 74: if (modeActive("hikers_dream")) refillEnergy() + break; + case 77: + if (tmp.mlt.can) mltReset() + break; case 80: if (shiftDown && INF_TABS.derivatives()) tmp.inf.pantheon.startPurge() else if (TABBTN_SHOWN.pathogens()) tmp.pathogens.maxAll() @@ -356,7 +408,8 @@ document.onkeydown = function(e) { else tmp.ranks.layer.reset() break; case 83: - if (TH_TABS.strings()) entangleStrings(); + if (shiftDown && ELM_TABS.sky()) skyrmionReset(); + else if (TH_TABS.strings()) entangleStrings(); break; case 84: if (shiftDown && ELM_TABS.theory()) tmp.elm.theory.start() @@ -375,6 +428,7 @@ function getNews() { else return data[1](); })() ); + let txt = ""; if (possible.length == 0) txt = "Sorry, we are out of news for the day... try again later?"; else if (possible.length == 1) txt = possible[0][0]; @@ -382,17 +436,34 @@ function getNews() { let n = Math.floor(Math.random() * possible.length); txt = possible[n][0]; } + return txt; } -document.getElementById("news").addEventListener("animationend", function(){ - if (!player.options.newst) return - document.getElementById("news").innerHTML = ""; - document.getElementById("news").classList.remove("slidenews"); - document.documentElement.style.setProperty("--news-right-start", 0 - NEWS_ADJ + "%"); - setTimeout(function(){ - document.getElementById("news").innerHTML = getNews(); - document.getElementById("news").classList.add("slidenews"); - }, 1000) -}) -document.getElementById("news").innerHTML = getNews(); \ No newline at end of file +function doNews() { + for (let i=0;iMpc (megaparsec): 3.086e22 m
  • Gpc (gigaparsec): 3.086e25 m
  • uni (universe): 4.4e26 m
  • +
  • mlt (multiverse): e1e9 uni
  • diff --git a/main.html b/main.html index 215e8899..28803c2e 100644 --- a/main.html +++ b/main.html @@ -9,10 +9,87 @@ Loading...
    Help
    + + @@ -285,22 +365,53 @@ href="key.html" target="_blank" >Distances        Hotkeys -     Discord + >    Hotkeys +     Discord    Donate @@ -516,7 +649,7 @@ id="efnu1" class="btn locked" onclick="tmp.fn.enh.upgs[1].buy()" - style="min-height: 100px; max-height: 100px; font-size: 10px" + style="min-height: 100px; max-height: 100px; font-size: 9px" > Multiply Enhanced Coal gain by (before Extreme Mode reduction, boosted by Coal and Endorsements)
    Cost: Enhanced Coal
    Level: @@ -543,7 +676,7 @@ onclick="tmp.fn.enh.upgs[3].buy()" style="min-height: 100px; max-height: 100px;" > - Increase the power of Furnace Upgrade 4 by x
    Cost: Enhanced Coal
    x
    Cost: Enhanced Coal
    Level: @@ -691,6 +824,25 @@

    Your Enhanced Coal has granted you Molten Bricks, which boost Pathogen gain & Enhanced Coal gain by x, and boost Knowledge gain by x

    + +
    @@ -1124,8 +1277,15 @@ You have Demons.

    You have Demonic Souls , translated to a - % increase to Perk Strength, but they also make Heavenly Chips in their effect divide by - . + % increase to Perk Strength, but they also make Heavenly Chips in their effect + . +


    +
    +
    +
    You have Phantoms (1 every 3 Spectral Gems).

    + You have Haunting Energy + , translated to a + % increase in Spectral Gem frequency, and a x multiplier to Heavenly Chip, Demonic Soul, & Haunting Energy gain bases.


    @@ -1182,6 +1342,11 @@ Quantum Foam + + +
    @@ -1255,16 +1420,16 @@ Your Bosons & Ascension Power are generating you Gauge Bosons/sec.
    You have Gauge Bosons.
    - You have Gauge Force (+/sec), which is making the below resources generate at + You have Gauge Force , which is making the below resources generate at x speed.


    - You have Photons (+ Photons /sec)

    + >

    @@ -1304,17 +1469,17 @@

    - You have W Bosons (+ W Bosons /sec), translated to a x multiplier to Z Boson gain and a + >, translated to a x multiplier to Z Boson gain and a x multiplier to Ascension Power gain.

    - You have Z Bosons (+ Z Bosons /sec), translated to a x multiplier to W Boson gain and a + >, translated to a x multiplier to W Boson gain and a x multiplier to Dark Flow.

    @@ -1355,67 +1520,71 @@

    - You have Red Gluons (+ Red Gluons /sec).

    + >.


    - You have Gravitons (+/sec), + You have Gravitons , translated to a x multiplier to Gauge Force gain (boosted by Elementaries).

    - Your Gravitons have gathered you Graviton Boosts, which are making you gain x as many Elementaries on reset. + Your Gravitons have gathered you Graviton Boosts (next at ), which are making you gain x as many Elementaries on reset. (Mult per Graviton Boost: )



    @@ -1553,69 +1736,242 @@

     

    - - -
    - - - -
    - - - - -
    - - - - - -
    - - - - - - -
    - - - - - - - -
    - - - - - - - - -
    - - - - - - - - - -
    - - - - - - - - - - -
    +
    + + +
    + + + +
    + + + + +
    + + + + + +
    + + + + + + +
    + + + + + + + +
    + + + + + + + + +
    + + + + + + + + + +
    + + + + + + + + + + +
    + + + + +
    + + + + +
    +
    +
    +
    +
    +

    Cadavers


    + + + + +
    +
    +
    +

    Pathogen Upgrades


    + + + + + +
    +
    +
    +
    +

    Knowledge & Higgs


    + + + + + + +
    +
    +
    +

    Theoriverse & Endorsements


    + + + + + + +
    +
    +
    +

    Pantheon


    + + + + + +
    +
    +
    +
    +
    +

    EP Gain & Elementaries


    + + + + + + +
    +
    +
    +

    Supersymmetry


    + + + + + + + + + + + +
    +
    +
    +

    Strings


    + + + + + + + + + + + +
    +
    +
    +

    Entangled Strings


    + + + + + +
    +
    +
    +
    +

    Preons


    + + + + + + +
    +
    +
    +

    Accelerons


    + + + + +
    +
    +
    +
    +

    Hadrons


    + + + + + +
    +
    +
    +

    Magma


    + + + + + + +
    +
    +
    +

    Quantum Foam


    + + + + + +
    +
    +
    +

    Misc.


    + + + + + + +
    +
    +
    +
    +





    @@ -1624,13 +1980,16 @@


    - You have a Primary String with a length of (+/sec), translated to a x multiplier to Supersymmetric Particle gain.

    - - - - - - + You have a Primary String with a length of , translated to a x multiplier to Supersymmetric Particle gain.

    + + + + + + + + +



    You have of Entangled Strings, translated to a x multiplier to the generation speed of all Strings.

    @@ -1638,9 +1997,9 @@
    - Your Primary Strings have generated you Preons (+/sec).


    + Your Primary Strings have generated you Preons .




    - You have Theoretical Boosters. + You have Theoretical Boosters, which are providing a total of TP.

    @@ -1648,7 +2007,7 @@
    Your Acceleration is generating you Accelerons each second .

    - You have Accelerons, which are making your Perk Accelerator get Weakened


    + You have Accelerons, which are making your Perk Accelerator get Weakened later




    You have Dark Expanders.




    @@ -1658,7 +2017,7 @@
    - You are gaining Inflatons each second .
    + You are gaining Inflatons each second (based on Inflaton amount).
    You have Inflatons ()

    Your Inflatons are making all Theory Tree Upgrades x cheaper.
    Your Inflatons are making each Hadron effect interval give more TP.


    @@ -1668,9 +2027,10 @@ +
    @@ -1918,6 +2373,13 @@ + + + + + + + @@ -1936,6 +2398,7 @@ + @@ -1944,13 +2407,6 @@ - - - - - - - @@ -1961,6 +2417,15 @@ + + + + + + + + + @@ -1978,7 +2443,6 @@ - @@ -1988,6 +2452,8 @@ + + diff --git a/style.css b/style.css index fd3388cd..58d8cba7 100644 --- a/style.css +++ b/style.css @@ -4,9 +4,8 @@ --tb: #03fcf0; --ach: #4ceb34; --rbt: #c9c9c9; - --threeArrows: url("images/threeArrows.jpg"); --font: Courier; - --news-right-start: -10%; + --foamcol: #d3e8cc; } * { @@ -14,14 +13,14 @@ margin: 0; padding: 0; font-family: var(--font); + font-variant-numeric: tabular-nums; } *:focus { outline: none; } -*:not(span), -*:not(div) { +*:not(span) *:not(div) *:not(label) { color: var(--plaintxt); } @@ -37,9 +36,16 @@ html, body { color: #757575 !important; } +html { + min-height: 100%; + height: 100%; +} + body { background-color: var(--bg); transition-duration: 1s; + min-height: 100%; + height: 100%; } .btn { @@ -70,6 +76,25 @@ body { box-shadow: none; } +.btn.tb.sel, .btn.tb.sel:hover { + box-shadow: 3px 4px 0px 0px #59228f; + background: linear-gradient(to bottom, #6a1bbf 5%, #a32feb 100%); + background-color: #6a1bbf; + color: #ffffff; + text-shadow: 0px 1px 0px #3c0675; + border: none; + cursor: default; +} + +.btn.tb.bought, .btn.tb.bought:hover { + box-shadow: 3px 4px 0px 0px #218a7d; + background: linear-gradient(to bottom, #1bbfb4 5%, #34ebe5 100%); + background-color: #1bbfb4; + color: #ffffff; + text-shadow: 0px 1px 0px #057d29; + cursor: default; +} + .btn.bought { box-shadow: 3px 4px 0px 0px #218a7d; background: linear-gradient(to bottom, #1bbfb4 5%, #34ebe5 100%); @@ -163,6 +188,15 @@ body { text-align: center; } +.sideBand { + position: absolute; + left: 0; + width: 300px; + min-height: 500px; + padding: 20px; + text-align: center; +} + .lb { background-color: var(--tb); } @@ -187,6 +221,14 @@ body { background-color: #a30b78; } +.redTint { + filter: sepia(90%) hue-rotate(-45deg) brightness(120%); +} + +.pnkSeeThru { + background-color: rgba(163, 11, 120, 0.5); +} + .ylw { background-color: #9ea60a; } @@ -215,6 +257,10 @@ body { color: white !important; } +.optActive { + filter: brightness(50%); +} + table { margin: auto; } @@ -404,6 +450,10 @@ table { text-shadow: 0px 1px 0px #a0a67c; } +.dark:not(.btn) { + filter: brightness(50%); +} + .btn.gross { box-shadow: 3px 4px 0px 0px #868f64; background: linear-gradient(to bottom, #b6c495 5%, #dee8a9 100%); @@ -449,21 +499,33 @@ table { } .dropdown { - position: relative; + position: absolute; + align-items: center; + justify-content: center; + vertical-align: center; + width: 100%; + height: 100%; + left: 0; + top: 0; + pointer-events: none; display: inline-block; } .dropdown-content { display: none; position: absolute; + top: 0px; + left: 0px; background-color: #f1f1f1; min-height: 50px; - max-height: 150px; + max-height: 400px; min-width: 200px; max-width: 200px; background-color: grey; + pointer-events: auto; z-index: 1; overflow-y: auto; + border: 1px solid black; } .dropdown-content button { @@ -473,11 +535,14 @@ table { .dropdown-content2 { display: none; position: absolute; + align-items: center; + top: 425px; background-color: #f1f1f1; - min-height: 400px; + min-height: 100px; max-height: 400px; width: 100%; background-color: grey; + pointer-events: auto; z-index: 1; overflow-y: auto; } @@ -486,6 +551,10 @@ table { display: block; } +.tt { + width: 80%; +} + .btn.dark { box-shadow: 3px 4px 0px 0px #1d0833; background: repeating-linear-gradient(45deg, rgb(184, 0, 82) 0%, rgb(47, 0, 67) 15%, rgb(184, 0, 82) 30%); @@ -559,6 +628,7 @@ table { ); background-position: 0% 0%; background-size: 100% 100%; + border: none; border-radius: 100px; width: 100px; height: 100px; @@ -765,7 +835,7 @@ table { } #automator { - background-color: #a8a8a8; + background-color: #cccccc; } .btn.perk { @@ -1109,10 +1179,11 @@ table { } #dc { - background-image: var(--threeArrows); + background-image: url("images/threeArrows.svg"); background-repeat: no-repeat; background-size: 550px 550px; - background-position: calc(50% - 25px) 20px; + background-position: calc(50% - 6px) 30px; + height: 572px; } #newsticker { @@ -1121,33 +1192,21 @@ table { background-color: white; border: 2px solid black; border-radius: 10px; + margin: auto; + overflow: hidden; + text-align: left; } #news { overflow: hidden; display: inline-block; white-space: nowrap; - right: 100%; color: black !important; min-height: 18px; max-height: 18px; position: relative; } -.slidenews { - display: inline-block; - animation: 20s linear slidenews; -} - -@keyframes slidenews { - from { - right: var(--news-right-start); - } - to { - right: 110%; - } -} - .btn.elm { box-shadow: 3px 4px 0px 0px #308a88; background: none; @@ -1395,7 +1454,6 @@ table { } #achDesc { - position: sticky; top: 0px; max-height: 12px !important; } @@ -1508,13 +1566,9 @@ table { } .ob { - min-height: 35px; - min-width: 100px; -} - -.ob_t { - min-height: 50px; + min-height: 75px; min-width: 100px; + margin: 5px; } .btn.hc { @@ -1607,7 +1661,7 @@ table { } .foamtxt { - color: #d3e8cc; + color: var(--foamcol); font-size: 20px; } @@ -1621,6 +1675,512 @@ table { animation: entropy 8s ease infinite; } +.btn.sky { + box-shadow: 3px 4px 0px 0px #6f5485; + background: none; + background-color: #a875d1; + border-radius: 18px; + border: 1px solid black; + display: inline-block; + cursor: pointer; + color: #33174a; + font-size: 12px; + font-weight: bold; + padding: 7px 25px; + text-decoration: none; + text-shadow: 0px 1px 0px #8e57ba; + transition-duration: 0.5s; +} + +.btn.sky:hover { + background: none; + background-color: #e7cce8; + box-shadow: 3px 4px 0px 0px #e7cce8; + text-shadow: none; + color: black; +} + +.btn.sky:hover > span { + color: #000000; + transition-duration: 0.5s; +} + +.btn.sky:active { + position: relative; + top: 3px; + left: 2px; + box-shadow: none; +} + +.skytxt { + color: #a875d1; + text-shadow: 1px 0px 0px #8e57ba; + font-weight: bold; + font-size: 18px; +} + +.hexContainer { + width: 30px; + min-width: 30px; + max-width: 30px; +} + +.hexBtn { + position: relative; + width: 30px; + min-width: 30px; + max-width: 30px; + height: 17.321px; + background-color: #a875d1; + margin: 8.660px 0; + border: 0px; + cursor: pointer; +} + +.hexBtn:before, +.hexBtn:after { + content: ""; + position: absolute; + width: 0; + border-left: 15px solid transparent; + border-right: 15px solid transparent; +} + +.hexBtn:before { + bottom: 100%; + left: 0; + border-bottom: 8.660px solid #a875d1; +} + +.hexBtn:after { + top: 100%; + left: 0; + width: 0; + border-top: 8.660px solid #a875d1; +} + +.hexBtn.locked { + cursor: not-allowed; + background-color: #c62d1f; +} + +.hexBtn.locked:before { + border-bottom: 8.660px solid #c62d1f; +} + +.hexBtn.locked:after { + border-top: 8.660px solid #c62d1f; +} + +.flexContainer { + display: flex !important; + flex-flow: column wrap; + justify-content: center; + align-items: center; + max-width: 100%; + margin: 0 auto; +} + +.flexRow { + display: flex !important; + flex-flow: row wrap; + justify-content: center; + align-items: center; + max-width: 100%; + margin: 0 auto; +} + +.flexRowThird { + display: flex !important; + flex-flow: row wrap; + justify-content: center; + align-items: center; + max-width: 100%; + margin-bottom: 30px; +} + +.flexRowThird div { + margin-left: 50px; + margin-right: 50px; + border: 1px solid white; + padding: 15px 15px 15px 15px; +} + +.automator { + width: 180px; + height: 90px; + border: 2px solid black; + border-radius: 2px; + background-color: #a8a8a8; + color: black; + margin: 0 auto; + padding: 25px 25px 25px 25px; + margin-top: 12.5px; + margin-bottom: 12.5px; +} + +.rtReward { + min-width: 300px; + max-width: 300px; + min-height: 50px; + border: 1px solid var(--plaintxt); +} + +.rtRewardMini { + min-width: 100px; + max-width: 100px; + min-height: 50px; + border: 1px solid var(--plaintxt); +} + +.flexTopRow { + display: flex !important; + flex-flow: row wrap; + justify-content: flex-start; + align-items: flex-start; + max-width: 100%; + margin: 0 auto; +} + +.btn.magma { + box-shadow: 3px 4px 0px 0px black; + background: none; + background-color: #4d3636; + border-radius: 18px; + border: 1px solid black; + display: inline-block; + cursor: pointer; + color: black; + font-size: 12px; + max-width: 200px; + padding: 7px 25px; + text-decoration: none; + text-shadow: 0px 1px 0px #784205; + transition-duration: 0.5s; +} + +.btn.magma:hover { + background: none; + background-color: #fa4632; +} + +.btn.magma:active { + position: relative; + top: 3px; + left: 2px; + box-shadow: none; +} + +.magmaTxt { + background: linear-gradient(to bottom, #fa4632 5%, #4d3636 100%); + background-size: 200% auto; + background-clip: text; + text-fill-color: transparent; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-size: 25px; + animation: magmatxt 5s linear infinite; +} + +.btn.plasma { + box-shadow: 3px 4px 0px 0px black; + background: linear-gradient(-45deg, #49364d, #78437a, #913690, #ba188c); + background-color: #49364d; + background-size: 400% 400%; + border-radius: 18px; + border: 1px solid black; + display: inline-block; + cursor: pointer; + color: black; + font-size: 12px; + max-width: 200px; + padding: 7px 25px; + text-decoration: none; + text-shadow: 0px 1px 0px #7a046b; + transition-duration: 0.5s; + animation: plasma 6s ease infinite; +} + +.btn.plasma:hover { + background: linear-gradient(-45deg, #9b72a3, #c46dc7, #d44ed2, #ff03b7); + background-color: #9b72a3; +} + +.btn.plasma:active { + position: relative; + top: 3px; + left: 2px; + box-shadow: none; +} + +.plasmaTxt { + font-size: 30px; + background: linear-gradient(-45deg, #9b72a3, #c46dc7, #d44ed2, #ff03b7); + background-size: 400% 400%; + background-clip: text; + text-fill-color: transparent; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + animation: plasma 6s ease infinite; +} + +.whiteFlame { + font-size: 30px; + color: var(--plaintxt); + font-weight: bold; +} + +.plB { + width: 180px; + height: 150px; + line-height: 150px; + border: 2px solid var(--plaintxt); + border-radius: 2px; + color: var(--plaintxt); + font-size: 15px; + padding-left: 25px; + margin-left: 12.5px; + padding-right: 25px; + margin-right: 12.5px; + padding-top: 10px; + margin-top: 12.5px; + padding-bottom: 10px; + margin-bottom: 12.5px; +} + +.plB.plasmic { + background: linear-gradient(-45deg, #9b72a3, #c46dc7, #d44ed2, #ff03b7); + animation: plasma 6s ease infinite; +} + +.plB.gleaming { + background: linear-gradient(45deg, #404040, #8c8c8c, #9c9c9c, #a1a1a1); + animation: plasma 6s ease infinite; +} + +.plBCont { + display: inline-block; + vertical-align: middle; + line-height: normal; +} + +.btn.mlt { + box-shadow: 3px 4px 0px 0px #382f8a; + background: linear-gradient(45deg, #837eed, #976ef0, #ab5aed, #cb4eed); + background-size: 200% 200%; + background-color: #837eed; + border-radius: 18px; + border: 1px solid #9c97c7; + display: inline-block; + cursor: pointer; + color: #57546b; + font-size: 12px; + font-weight: bold; + height: 100px; + max-width: 200px; + padding: 7px 25px; + text-decoration: none; + text-shadow: 0px -0.5px 0px #000000; + margin-top: 10px; + transition-duration: 1s; + animation: mltShow 1s, mltBg 10s infinite; +} + +.btn.mlt:hover { + filter: brightness(120%); + transform: scale(1.1); +} + +.btn.mlt:active { + position: relative; + top: 3px; + left: 2px; + box-shadow: none; +} + +.btn.mlt.tb { + font-size: 10px !important; + max-width: 100px !important; + max-height: 50px !important; + padding: 4px 12px !important; + margin-left: 5px; + margin-right: 5px; + animation: mltBg 10s infinite; +} + +.btn.mlt.tb:hover { + background: linear-gradient(45deg, #837eed, #976ef0, #ab5aed, #cb4eed); + filter: brightness(120%); + transform: scale(1.1); +} + +.btn.mlt.tb.s { + font-size: 10px !important; + max-width: 100px !important; + max-height: 25px !important; + padding: 4px 12px !important; + margin-left: 5px; + margin-right: 5px; + margin-top: 0px !important; + animation: mltBg 10s infinite; +} + +#mltContainer { + position: fixed; + width: 100vw; + min-height: 100vh; + height: 100vh; + overflow-y: auto; + overflow-x: hidden; + background: linear-gradient(45deg, #837eed, #976ef0, #ab5aed, #cb4eed); + background-size: 100% 100%; + background-color: #837eed; + filter: opacity(75%); + text-align: center; + background-attachment: fixed; + background-repeat: no-repeat; + background-attachment: fixed; + background-position: center; +} + +#mltContainer:not(.first) { + animation: mltTabShow 1s ease, mltBg 10s infinite; +} + +#mltContainer.first { + animation: mltTabShow 5s ease, mltBg 10s infinite; +} + +.mlttxt { + font-size: 16px; + text-shadow: 0px -0.5px 0px black; + filter: brightness(75%); + animation: mlttxt 16s ease infinite; +} + +.mltMinorTitle { + font-size: 25px; + font-weight: bold; + text-shadow: 0px -0.5px 0px black; + filter: brightness(75%); + animation: mlttxt 16s ease infinite; +} + +.mltTitle { + font-size: 40px; + font-weight: bold; + text-shadow: 0px -0.5px 0px black; + filter: brightness(75%); + animation: mlttxt 16s ease infinite; +} + +#mltMapContainer { + position: relative; + top: 25px; + left: 25vw; + width: 50vw; +} + +#innerMltOrbit { + position: absolute; + top: 75px; + left: 15vw; + width: 20vw; + height: 20vw; + border-radius: 100%; + border: 2px #4A437F dashed; + animation: spin-right 40s linear infinite; +} + +.mltPrime { + position: absolute; + line-height: 32px; + font-size: 20px; + font-weight: bold; + height: 100px; + width: 100px; + border-radius: 100%; + background-color: #7a968c; + transition-duration: 0.6s; + border: none; + z-index: 2; +} + +.mltPrime:hover { + filter: brightness(120%); + transform: scale(1.1); + cursor: pointer; +} + +.innerMltOrbit { + position: absolute; + line-height: 15px; + height: 50px; + width: 50px; + border-radius: 100%; + background-color: #9F98E6; + border: none; + transition-duration: 0.6s; +} + +.innerMltOrbit:hover { + filter: brightness(120%); + transform: scale(1.1); + cursor: pointer; +} + +.mltComp { + background-color: #7a968c; +} + +.uprightOrbitTxt { + font-weight: bold; + animation: undoOrbit 40s linear infinite; +} + +#mltMilestoneTable { + margin-left: auto; + margin-right: auto; + width: 70%; +} + +.mltTD { + width: 50%; + border: 2px solid black; + padding: 5px; +} + +.btn.mlthc { + box-shadow: 3px 4px 0px 0px #6a31a3; + background: none; + background-color: #c97df5; + border-radius: 18px; + border: 1px solid #1b002b; + display: inline-block; + cursor: pointer; + color: #564b5e; + font-size: 12px; + font-weight: bold; + padding: 7px 25px; + text-decoration: none; + text-shadow: none; + transition-duration: 1s; + animation: hadron 10s ease infinite; +} + +.btn.mlthc:hover { + background: none; + background-color: #9d47ff; + color: #5c5266; +} + +.btn.mlthc:active { + position: relative; + top: 3px; + left: 2px; + box-shadow: none; +} + @keyframes grosstxt { 0% { color: #176648; @@ -1801,6 +2361,98 @@ table { } } +@keyframes magmatxt { + 0% { + background-position: 0% 0%; + } + 50% { + background-position: 100% 100%; + } + 100% { + background-position: 0% 0%; + } +} + +@keyframes plasma { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +@keyframes mltShow { + from { + opacity: 0; + height: 0px; + font-size: 0px; + margin-top: 0px; + + } + to { + opacity: 1; + height: 100px; + font-size: 12px; + margin-top: 10px; + } +} + +@keyframes mltTabShow { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes mltBg { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +@keyframes mlttxt { + 0% { + color: #3c40c9; + } + 50% { + color: #6f4de3; + transform: translate(-5px, 5px); + } + 100% { + color: #3c40c9; + } +} + +@keyframes spin-right { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes undoOrbit { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(-360deg); + } +} + [tooltip] { position: relative; z-index: 2;