From f9965555f114d9267503585dc0a9bb3eb0988a52 Mon Sep 17 00:00:00 2001 From: pg132 Date: Thu, 10 Sep 2020 13:23:34 -0700 Subject: [PATCH 001/116] v1.72 Beta 11 --- js/main/scaling.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/main/scaling.js b/js/main/scaling.js index d425720f..d6dae8a1 100644 --- a/js/main/scaling.js +++ b/js/main/scaling.js @@ -65,6 +65,8 @@ function getScalingStart(type, name) { if (tmp.ach) if (tmp.ach[108].has && modeActive("extreme")) start = start.plus(1) 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) } } else if (name=="enlightenments") { if (type=="scaled") { From 574ce0056cfbf19483b1a37d4fd825a876f51d31 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 8 Oct 2020 22:34:26 -0400 Subject: [PATCH 002/116] v1.9 Beta 1 - Set up the beta :P --- changelog.html | 6 + js/classes/Feature.js | 20 +++- js/constants/achievements.js | 9 +- js/constants/automation.js | 9 ++ js/constants/default.js | 14 ++- js/constants/elm.js | 18 ++- js/constants/news.js | 27 ++++- js/functions/achievements.js | 4 +- js/functions/important.js | 3 + js/functions/misc.js | 11 ++ js/game.js | 9 +- js/main/auto.js | 46 +++++--- js/main/elements.js | 20 +++- js/main/elm.js | 215 ++++++++++++++++++++++++++--------- js/main/special.js | 32 ++++++ js/update.js | 1 + main.html | 46 ++++++++ style.css | 39 +++++++ 18 files changed, 450 insertions(+), 79 deletions(-) diff --git a/changelog.html b/changelog.html index 862fcbde..0686d0a7 100644 --- a/changelog.html +++ b/changelog.html @@ -157,4 +157,10 @@
  • Implemented Quantum Foam
  • Squished a few bugs
  • + v1.9: Skyrmions Update
    + diff --git a/js/classes/Feature.js b/js/classes/Feature.js index 7daff8e7..ac1a78f4 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() { diff --git a/js/constants/achievements.js b/js/constants/achievements.js index ed71e4ae..5dd8e73a 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -1,5 +1,5 @@ const ACH_DATA = { - rows: 16, + rows: 17, cols: 8, names: { 11: "Quick Sprint", @@ -145,6 +145,8 @@ const ACH_DATA = { 166: "True Inflation", 167: "How is the Multiverse containing your power?", 168: "There is only one Fome", + + 171: "TRANSFOOOOORM!", }, descs: { 11: "Go at least formatDistance(100).", @@ -290,6 +292,8 @@ const ACH_DATA = { 166: "Reach showNum(1e160) Inflatons.", 167: "Reach showNum(1e108000000) uni.", 168: "Reach showNum(1e25) Quantum Foam without any Subplanck Foam.", + + 171: "Get a Skyrmion.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -382,5 +386,8 @@ const ACH_DATA = { 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).", 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.", } }; \ No newline at end of file diff --git a/js/constants/automation.js b/js/constants/automation.js index 2c52070a..8002e754 100644 --- a/js/constants/automation.js +++ b/js/constants/automation.js @@ -88,6 +88,15 @@ const AUTOMATORS = { gluon_upgrades: function() { return tmp.ach[166].has }, + tree_upgrades: function() { + return tmp.ach[168].has + }, + entropy: function() { + return player.elementary.entropy.upgrades.includes(10) + }, + entropy_upgrades: function() { + return player.elementary.entropy.upgrades.includes(11) + }, }; const AUTOMATOR_X = { diff --git a/js/constants/default.js b/js/constants/default.js index 8d5be11d..4d794ea7 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -1,6 +1,6 @@ const DEFAULT_START = { tab: "main", - version: 1.8, + version: 1.9, optionsTab: "saving", achievements: [], savePos: 1, @@ -220,5 +220,17 @@ 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: {}, + }, + }, } }; diff --git a/js/constants/elm.js b/js/constants/elm.js index d572d220..9603431f 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -14,6 +14,9 @@ const ELM_TABS = { foam: function() { return player.elementary.foam.unl; }, + sky: function() { + return player.elementary.sky.unl; + }, }; const QUARK_NAMES = ["up", "down", "charm", "strange", "top", "bottom"]; @@ -668,7 +671,7 @@ 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 = 20 const ENTROPY_UPG_COSTS = { 1: new ExpantaNum(4), 2: new ExpantaNum(10), @@ -686,4 +689,15 @@ const ENTROPY_UPG_EFFS = { 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) }, 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) }, +} + +const SKY_REQ = [ + "4.4e108000026", + "1e575", + "1e550" +] +const SKY_TABS = { + skyrmions() { return true }, +} +const KEEP_ENTUPGS_SKY = [1, 10, 11, 12] \ No newline at end of file diff --git a/js/constants/news.js b/js/constants/news.js index b244c31c..f74ebbb2 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -77,6 +77,7 @@ const NEWS_DATA = { m75: ["Does fome even exist?"], m76: ["There are at least 2 rick rolls in the news... can you collect them all???"], m77: [""It's Siivagunner, not Silvagunner" - somebody that once told me that they were gonna give me up"], + m78: ["Breaking News: Florida man starts speaking French after another news ticker tells him that he's officially Canadian"], // Distance-based Conditions d1: [ @@ -122,7 +123,7 @@ 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")); } @@ -209,6 +210,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,6 +420,18 @@ const NEWS_DATA = { "Time to refoam your protofoam.", function() { return player.elementary.foam.maxDepth.gte(5) }, ], + 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) }, + ], }; const NEWS_ADJ = 110; diff --git a/js/functions/achievements.js b/js/functions/achievements.js index 29c9abbe..e94f093e 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -141,7 +141,7 @@ function updateAchievements() { 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() + 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(); @@ -149,6 +149,8 @@ function updateAchievements() { if (player.elementary.theory.inflatons.amount.gte(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(); + + if (player.elementary.sky.amount.gt(0)) tmp.ach[171].grant(); } function rowComplete(r) { diff --git a/js/functions/important.js b/js/functions/important.js index 4967bc36..6b3d9f8a 100644 --- a/js/functions/important.js +++ b/js/functions/important.js @@ -49,6 +49,9 @@ function loadGame() { interval = setInterval(function () { simulateTime(); }, 50); + intervalPerSec = setInterval(function () { + autoPerSec(); + }, 1000); } function onVersionChange() { diff --git a/js/functions/misc.js b/js/functions/misc.js index b546dba5..d72f3f36 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -145,6 +145,11 @@ function ENString(obj) { ret.elementary.entropy.bestDepth = new ExpantaNum(ret.elementary.entropy.bestDepth||1).toString(); ret.elementary.entropy.amount = new ExpantaNum(ret.elementary.entropy.amount||0).toString(); ret.elementary.entropy.best = new ExpantaNum(ret.elementary.entropy.best||0).toString(); + ret.elementary.sky.amount = new ExpantaNum(ret.elementary.sky.amount||0).toString(); + ret.elementary.sky.pions.amount = new ExpantaNum(ret.elementary.sky.pions.amount||0).toString(); + ret.elementary.sky.spinors.amount = new ExpantaNum(ret.elementary.sky.spinors.amount||0).toString(); + for (let i=0;i i+1).filter(x => !player.elementary.entropy.upgrades.includes(x)); + let nextUpg = toBuy.reduce((a,c) => Math.min(a,c)); + buyEntropyUpg(nextUpg) + } +} + +function autoPerSec() { + if (player.automators["foam_unlocks"]) { + if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) + else refoam(); + } } function toggleRobot(name) { diff --git a/js/main/elements.js b/js/main/elements.js index 5d369f8d..448ac6b8 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1206,6 +1206,7 @@ function updateOverallElementaryHTML(){ updateTheoryverseMainHTML() updateHadronicChallenges() updateQFHTML() + updateSkyHTML() } } @@ -1312,7 +1313,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 = ENTROPY_UPG_COSTS[i]||new ExpantaNum(1/0) + tmp.el["entropy"+i].setDisplay(entropyUpgShown(i)) tmp.el["entropy"+i].setClasses({ btn: true, foamBought: player.elementary.entropy.upgrades.includes(i), @@ -1326,6 +1328,22 @@ function updateQFHTML() { } } +function updateSkyHTML() { + if (elmTab == "sky") { + 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)) + } + } +} + function updateHTML() { updateOptionsHTML() updateMainHTML() diff --git a/js/main/elm.js b/js/main/elm.js index 742635e4..9c968266 100644 --- a/js/main/elm.js +++ b/js/main/elm.js @@ -146,22 +146,12 @@ function updateTempQuarks() { 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); + let stacks = getQuarkStacks(tmp.elm.ferm.quarkRewards) 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); + let stacks = getQuarkStacks(tmp.elm.ferm.quarkRewards) 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())); @@ -208,22 +198,12 @@ function updateTempLeptons() { 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); + 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 = tmp.elm.ferm.leptonRewards - .sub(LEPTON_NAMES.indexOf(name) + 1) - .div(LEPTON_NAMES.length) - .plus(1) - .ceil() - .max(0); + let stacks = getLeptonStacks(tmp.elm.ferm.leptonRewards) if (stacks.gte(8)) stacks = stacks.sqrt().times(Math.sqrt(8)); if (name == "electron") return lpts.max(0) @@ -624,7 +604,7 @@ function updateTempSupersymmetry() { 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.points = player.elementary.theory.points.sub(1).max(0) player.elementary.theory.supersymmetry.unl = true } for (let i=0;i<4;i++) { @@ -656,7 +636,7 @@ function updateTempTheoryTree() { 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.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) } @@ -669,14 +649,16 @@ function updateTempTheoryTree() { 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); + 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)).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.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) } else { - player.elementary.theory.points = player.elementary.theory.points.sub(cost) + 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) } @@ -768,11 +750,11 @@ function updateQuantumFoamEffects() { 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))) + 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() { @@ -797,6 +779,34 @@ function updateTempQuantumFoam() { updateTempEntropy(); } +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(); +} + +function updateTempSkyrmions() { + if (!tmp.elm.sky) tmp.elm.sky = {} + + updateSkyrmionTabs(); + updateSkyrmionMain(); +} + function updateTempElementary() { if (tmp.elm) setTempElementaryStuff(); else tmp.elm = {}; @@ -808,6 +818,7 @@ function updateTempElementary() { updateTempTheories(); updateTempHC(); updateTempQuantumFoam(); + updateTempSkyrmions(); } function elTick(diff) { @@ -863,6 +874,12 @@ function elTick(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) + if (player.elementary.entropy.upgrades.includes(12)) { + player.elementary.particles = player.elementary.particles.plus(tmp.elm.layer.gain.times(diff).div(100)) + player.bestEP = player.bestEP.max(tmp.elm.layer.gain.div(100)) + player.elementary.fermions.amount = player.elementary.fermions.amount.plus(player.elementary.particles.times(diff).div(100)) + player.elementary.bosons.amount = player.elementary.bosons.amount.plus(player.elementary.particles.times(diff).div(100)) + } } function elmReset(force=false, auto=false) { @@ -894,7 +911,7 @@ function unlockStrings() { 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.points = player.elementary.theory.points.sub(7).max(0) player.elementary.theory.strings.unl = true } @@ -961,7 +978,7 @@ function unlockPreons() { 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.points = player.elementary.theory.points.sub(10).max(0) player.elementary.theory.preons.unl = true } @@ -1004,7 +1021,7 @@ function unlockAccelerons() { 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.points = player.elementary.theory.points.sub(84).max(0) player.elementary.theory.accelerons.unl = true } @@ -1094,7 +1111,7 @@ function importTree() { 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.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!") @@ -1266,7 +1283,7 @@ function unlockInflatons() { if (player.elementary.theory.inflatons.unl) return if (player.elementary.theory.points.lt(1600)) return 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) + player.elementary.theory.points = player.elementary.theory.points.sub(1600).max(0) player.elementary.theory.inflatons.unl = true } @@ -1303,9 +1320,14 @@ function getInflatonEff2() { // Quantum Foam +function gainFoam(x, gain) { + player.elementary.foam.amounts[x] = ExpantaNum.add(player.elementary.foam.amounts[x], gain).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)) player.elementary.foam.amounts[i] = player.elementary.foam.amounts[i].plus(tmp.elm.qf.gain[i+1].times(diff)) + if (player.elementary.foam.maxDepth.gt(i)) gainFoam(i, tmp.elm.qf.gain[i+1].times(diff)) for (let b=0;b<3;b++) if (player.elementary.foam.autoUnl[i*3+b]&&player.elementary.entropy.bestDepth.gte(i+3)) qfMax(i+1, b+1) } player.elementary.entropy.bestDepth = player.elementary.entropy.bestDepth.max(player.elementary.foam.maxDepth); @@ -1313,17 +1335,19 @@ function qfTick(diff) { function getQuantumFoamGain(x) { let gain = new ExpantaNum(1) - if (tmp.ach[162].has) gain = gain.times(getAch162Eff()) + 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) - gain = gain.times(tmp.elm.qf.boost23) + gain = gain.times(tmp.elm.qf.boost21||1) + gain = gain.times(tmp.elm.qf.boost23||1) } if (tmp.elm.entropy && player.elementary.entropy.unl) { - gain = gain.times(tmp.elm.entropy.eff) - if (player.elementary.entropy.upgrades.includes(2)) gain = gain.times(tmp.elm.entropy.upgEff[2]) + 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) return gain } @@ -1350,7 +1374,7 @@ function getQFBoostTarg(x, b) { function qfBoost(x, b) { let cost = getQFBoostCost(x, b) if (player.elementary.foam.amounts[x-1].lt(cost)) return; - player.elementary.foam.amounts[x-1] = player.elementary.foam.amounts[x-1].sub(cost) + 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) } @@ -1361,7 +1385,7 @@ function qfMax(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; - player.elementary.foam.amounts[x-1] = player.elementary.foam.amounts[x-1].sub(cost) + if (!tmp.ach[171].has) gainFoam(x-1, ExpantaNum.mul(cost, -1)) player.elementary.foam.upgrades[id] = player.elementary.foam.upgrades[id].max(target) } @@ -1380,9 +1404,10 @@ function getQFBoostData() { function qfUnl(x) { if (!player.elementary.foam.maxDepth.eq(x)) return; + if (player.elementary.foam.maxDepth.gte(5)) 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) + player.elementary.foam.maxDepth = player.elementary.foam.maxDepth.plus(1).min(5) let resetted = 0 while (resetted KEEP_ENTUPGS_SKY.includes(x)) + + forceEntropyReset(true); + tmp.elm.layer.reset(true); + + updateTempInf(); + updateTempElementary(); +} + +function getSkyEff() { + if (!player.elementary.sky.unl) return new ExpantaNum(0); + let eff = player.elementary.sky.amount.plus(1).logBase(2).sqrt().div(2) + return eff; +} + +function getQuarkStacks(x) { + let stacks = new ExpantaNum(x) + .sub(player.elementary.fermions.quarks.type) + .div(QUARK_NAMES.length) + .plus(1) + .ceil() + .max(0); + if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.plus(tmp.elm.sky.eff); + return stacks; +} + +function getLeptonStacks(x) { + let stacks = new ExpantaNum(x) + .sub(player.elementary.fermions.leptons.type) + .div(LEPTON_NAMES.length) + .plus(1) + .ceil() + .max(0); + if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.plus(tmp.elm.sky.eff); + return stacks; } \ No newline at end of file diff --git a/js/main/special.js b/js/main/special.js index 0095e66f..fbcbee6a 100644 --- a/js/main/special.js +++ b/js/main/special.js @@ -215,6 +215,38 @@ function loadTempFeatures() { else return player.distance.div(ExpantaNum.mul(DISTANCES.uni, FOAM_REQ)) } }), + skyrmions: new Feature({ + name: "skyrmions", + res_amt: 3, + req: [ + new ExpantaNum(SKY_REQ[0]), + new ExpantaNum(SKY_REQ[1]), + new ExpantaNum(SKY_REQ[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(SKY_REQ[0]).log10()) + .min(1) + .times(player.elementary.fermions.quarks.amount.max(1).log10().div(new ExpantaNum(SKY_REQ[1]).log10()).min(1)) + .times(player.elementary.fermions.leptons.amount.max(1).log10().div(new ExpantaNum(SKY_REQ[2]).log10()).min(1)); + } else { + return player.distance + .div(SKY_REQ[0]) + .min(1) + .times(player.elementary.fermions.quarks.amount.div(SKY_REQ[1]).min(1)) + .times(player.elementary.fermions.leptons.amount.div(SKY_REQ[2]).min(1)); + } + }, + spec: [false, true, true], + superSpec: [false, true, true], + }), }; } diff --git a/js/update.js b/js/update.js index dc02f0e4..e163f06f 100644 --- a/js/update.js +++ b/js/update.js @@ -305,6 +305,7 @@ function updateUnlocks() { 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(SKY_REQ[0]) && player.elementary.fermions.quarks.amount.gte(SKY_REQ[1]) && player.elementary.fermions.leptons.amount.gte(SKY_REQ[2])) player.elementary.sky.unl = true; } document.onkeyup = function(e) { diff --git a/main.html b/main.html index 215e8899..13f1e52c 100644 --- a/main.html +++ b/main.html @@ -1182,6 +1182,11 @@ Quantum Foam + + + @@ -1903,7 +1908,48 @@ + + + + + + + + + + + + + + + + + + + +




    + + + diff --git a/style.css b/style.css index fd3388cd..ae7637ec 100644 --- a/style.css +++ b/style.css @@ -1621,6 +1621,45 @@ 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: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; +} + @keyframes grosstxt { 0% { color: #176648; From 89d6789f06789b0905a1f47b16c151ea285f8546 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Fri, 9 Oct 2020 21:24:53 -0400 Subject: [PATCH 003/116] v1.9 Beta 2 --- js/constants/elm.js | 45 ++++++++++++++++- js/constants/news.js | 9 +++- js/game.js | 2 + js/main/elements.js | 28 ++++++++++ js/main/elm.js | 118 ++++++++++++++++++++++++++++++++++++++----- js/main/inf.js | 1 + js/main/pathogens.js | 1 + js/main/scaling.js | 2 + js/update.js | 4 ++ main.html | 39 +++++++++++--- style.css | 54 +++++++++++++++++++- 11 files changed, 279 insertions(+), 24 deletions(-) diff --git a/js/constants/elm.js b/js/constants/elm.js index 9603431f..31c340b3 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -681,6 +681,10 @@ const ENTROPY_UPG_COSTS = { 6: new ExpantaNum(150), 7: new ExpantaNum(215), 8: new ExpantaNum(235), + 9: new ExpantaNum(550), + 10: new ExpantaNum(700), + 11: new ExpantaNum(1500), + 12: new ExpantaNum(1850), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, @@ -690,6 +694,7 @@ const ENTROPY_UPG_EFFS = { 7: function() { return player.elementary.hc.hadrons.plus(1).times(10).slog(10).times(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() }, 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) }, } const SKY_REQ = [ @@ -699,5 +704,43 @@ const SKY_REQ = [ ] const SKY_TABS = { skyrmions() { return true }, + pions() { return true }, + spinors() { return true }, } -const KEEP_ENTUPGS_SKY = [1, 10, 11, 12] \ No newline at end of file +const KEEP_ENTUPGS_SKY = [1, 10, 11, 12] +const SKY_FIELD_UPGS_REQS = [1,5] +const SKY_FIELDS = { + upgs: 3, + placements: [[2,3],[1]], + 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" }, + }, +} +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/news.js b/js/constants/news.js index f74ebbb2..329fad44 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -78,6 +78,8 @@ const NEWS_DATA = { m76: ["There are at least 2 rick rolls in the news... can you collect them all???"], m77: [""It's Siivagunner, not Silvagunner" - somebody that once told me that they were gonna give me up"], m78: ["Breaking News: Florida man starts speaking French after another news ticker tells him that he's officially Canadian"], + m79: ["I'm gonna add some new news ticker messages, so I need ideas"], + m80: ["Jacorbian balancing is liked now, but in 10 years, incremental games will be completable in under 3 minutes."], // Distance-based Conditions d1: [ @@ -128,6 +130,12 @@ const NEWS_DATA = { 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")); + } + ], // Mode-based Conditions mod1: [ @@ -435,4 +443,3 @@ const NEWS_DATA = { }; const NEWS_ADJ = 110; -const NEWS_TIME = 8; diff --git a/js/game.js b/js/game.js index 79c1a2f6..36c3c1a9 100644 --- a/js/game.js +++ b/js/game.js @@ -22,6 +22,8 @@ var bosTab = "gauge"; var hcTab = "mainHC"; var foamTab = "qf1"; var skyTab = "skyrmions"; +var pionSel = 0; +var spinorSel = 0; var ttaid = 1; var gluonTab = "r"; var thTab = "tv"; diff --git a/js/main/elements.js b/js/main/elements.js index 448ac6b8..6cd59e4e 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1330,6 +1330,10 @@ 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({ @@ -1340,6 +1344,30 @@ function updateSkyHTML() { 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)) + } 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(showNum(tmp.elm.sky.pionGain)) + 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")) + } 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(showNum(tmp.elm.sky.spinorGain)) + 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")) } } } diff --git a/js/main/elm.js b/js/main/elm.js index 9c968266..bf92d91c 100644 --- a/js/main/elm.js +++ b/js/main/elm.js @@ -152,7 +152,7 @@ function updateTempQuarks() { 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)) stacks = stacks.sqrt().times(Math.sqrt(8)); + 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())); @@ -204,7 +204,7 @@ function updateTempLeptons() { tmp.elm.ferm.leptonEff = function (name) { let lpts = player.elementary.fermions.leptons.amount; let stacks = getLeptonStacks(tmp.elm.ferm.leptonRewards) - if (stacks.gte(8)) stacks = stacks.sqrt().times(Math.sqrt(8)); + 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) @@ -654,12 +654,16 @@ function updateTempTheoryTree() { let target = TREE_UPGS[x].target(pts.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).max(0); - player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(newCost); + 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) } else { - player.elementary.theory.points = player.elementary.theory.points.sub(cost).max(0) - player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(cost) + 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) } } @@ -800,11 +804,25 @@ function updateSkyrmionMain() { tmp.elm.sky.eff = getSkyEff(); } +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(player.elementary.sky.pions.field[i]||0) +} + +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(player.elementary.sky.spinors.field[i]||0) +} + function updateTempSkyrmions() { if (!tmp.elm.sky) tmp.elm.sky = {} updateSkyrmionTabs(); updateSkyrmionMain(); + updatePions(); + updateSpinors(); } function updateTempElementary() { @@ -880,6 +898,10 @@ function elTick(diff) { player.elementary.fermions.amount = player.elementary.fermions.amount.plus(player.elementary.particles.times(diff).div(100)) player.elementary.bosons.amount = player.elementary.bosons.amount.plus(player.elementary.particles.times(diff).div(100)) } + if (player.elementary.sky.unl) { + player.elementary.sky.pions.amount = player.elementary.sky.pions.amount.plus(tmp.elm.sky.pionGain.times(diff)); + player.elementary.sky.spinors.amount = player.elementary.sky.spinors.amount.plus(tmp.elm.sky.spinorGain.times(diff)); + } } function elmReset(force=false, auto=false) { @@ -1067,6 +1089,7 @@ function getGravBoosts() { 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 } @@ -1111,8 +1134,10 @@ function importTree() { 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).max(0) - player.elementary.theory.tree.spent = player.elementary.theory.tree.spent.plus(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!") } @@ -1389,14 +1414,21 @@ function qfMax(x, b) { 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) 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() 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) - if (player.elementary.entropy.unl && tmp.elm.entropy) data[i] = data[i].plus(tmp.elm.entropy.omegaEff) + data[i] = amt.sub((i-1)-b*5).div(5).ceil().max(0).plus(toAdd) } } return data @@ -1476,6 +1508,7 @@ function getEntropyGainMult() { if (player.elementary.entropy.upgrades.includes(3)) mult = mult.times(tmp.elm.entropy.upgEff[3]) if (player.elementary.entropy.upgrades.includes(8)) mult = mult.times(tmp.elm.entropy.upgEff[8]) if (player.elementary.entropy.upgrades.includes(10)) mult = mult.times(1.5) + if (player.elementary.sky.unl && tmp.elm.sky) mult = mult.times(tmp.elm.sky.spinorEff[3]) return mult; } @@ -1568,7 +1601,8 @@ function canSkyReset() { function getSkyGain() { if (!canSkyReset()) return false; - let gain = player.elementary.fermions.quarks.amount.max(1).logBase(SKY_REQ[1]).times(player.elementary.fermions.leptons.amount.max(1).logBase(SKY_REQ[2])); + let gain = player.elementary.fermions.quarks.amount.max(1).logBase(SKY_REQ[1]).times(player.elementary.fermions.leptons.amount.max(1).logBase(SKY_REQ[2])).pow(2); + if (player.elementary.entropy.upgrades.includes(14)) gain = gain.times(tmp.elm.entropy.upgEff[14]) return gain.floor(); } @@ -1610,7 +1644,7 @@ function skyrmionReset(force=false) { function getSkyEff() { if (!player.elementary.sky.unl) return new ExpantaNum(0); - let eff = player.elementary.sky.amount.plus(1).logBase(2).sqrt().div(2) + let eff = player.elementary.sky.amount.plus(1).logBase(2).sqrt().times(2.5).plus(1) return eff; } @@ -1621,7 +1655,7 @@ function getQuarkStacks(x) { .plus(1) .ceil() .max(0); - if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.plus(tmp.elm.sky.eff); + if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.times(tmp.elm.sky.eff); return stacks; } @@ -1632,6 +1666,62 @@ function getLeptonStacks(x) { .plus(1) .ceil() .max(0); - if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.plus(tmp.elm.sky.eff); + if (player.elementary.sky.unl && tmp.elm.sky) stacks = stacks.times(tmp.elm.sky.eff); return stacks; +} + +function getPionGain() { + let gain = player.elementary.sky.amount.pow(2).times(5) + return gain; +} + +function getSpinorGain() { + let gain = player.elementary.sky.amount.pow(2).times(5) + 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 getFieldUpgCost(type, id) { + let data = SKY_FIELDS[id]; + let bought = ExpantaNum.pow(ExpantaNum.add(player.elementary.sky.pions.field[id]||0, player.elementary.sky.spinors.field[id]||0), 2) + let cost = ExpantaNum.pow(data.costMult, bought).times(data.baseCost); + return cost; +} + +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, 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) } \ No newline at end of file diff --git a/js/main/inf.js b/js/main/inf.js index ea60e315..8556d41c 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -730,6 +730,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) diff --git a/js/main/pathogens.js b/js/main/pathogens.js index 48bd1186..b18e580f 100644 --- a/js/main/pathogens.js +++ b/js/main/pathogens.js @@ -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)); diff --git a/js/main/scaling.js b/js/main/scaling.js index 147e2546..52640a9c 100644 --- a/js/main/scaling.js +++ b/js/main/scaling.js @@ -28,6 +28,7 @@ function getScalingStart(type, name) { } 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=="tier") { if (type=="scaled") { if (player.tr.upgrades.includes(12) && !HCCBA("noTRU")) start = start.plus(2) @@ -37,6 +38,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) diff --git a/js/update.js b/js/update.js index e163f06f..25b927e8 100644 --- a/js/update.js +++ b/js/update.js @@ -243,6 +243,10 @@ function setupHTML() { } updateHCSelectorInputs() + // Pion/Spinor Fields + setupSkyField("pion") + setupSkyField("spinor") + // Version let v = new Element("version") v.setTxt(player.version) diff --git a/main.html b/main.html index 13f1e52c..801ffc4e 100644 --- a/main.html +++ b/main.html @@ -1909,14 +1909,14 @@ - + - - + + @@ -1942,16 +1942,41 @@ Skyrmions + + + + + +

    -
    +
    Unstabilizing the topology of your multiverse will force an Entropy & Elementary reset, and will also reset your Purge Power, Elementary Particles, Fermions, Bosons, Photon & Gluon Upgrades, Supersymmetric Particles, Theory Tree Upgrades, Strings (and Entangled Strings), Preon amount, Acceleron amount, Inflatons, Hadrons, Entropy, & Entropy Upgrades (except the first one).

    -

    - You have Skyrmions, which add to Quark/Lepton exponents. -




    +

    + You have Skyrmions, which multiply the Quark/Lepton exponents by

    + +
    + + +




    diff --git a/style.css b/style.css index ae7637ec..9a1e6aab 100644 --- a/style.css +++ b/style.css @@ -1660,6 +1660,58 @@ table { 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; + 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%; + border-bottom: 8.660px solid #a875d1; + transform: translate(-10px); +} + +.hexBtn:after { + top: 100%; + width: 0; + border-top: 8.660px solid #a875d1; + transform: translate(-20px); +} + +.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; +} + @keyframes grosstxt { 0% { color: #176648; @@ -1966,4 +2018,4 @@ table { filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; white-space: pre-wrap; -} +} \ No newline at end of file From 0941997a6fd0c7e978031c9e1a72a7cbc66955bd Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Fri, 9 Oct 2020 21:38:56 -0400 Subject: [PATCH 004/116] v1.9 Beta 2 Patch 1 --- js/main/elm.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/main/elm.js b/js/main/elm.js index bf92d91c..9ad23b60 100644 --- a/js/main/elm.js +++ b/js/main/elm.js @@ -1531,14 +1531,14 @@ function getEntropyNext() { function entropyReset() { if (!player.elementary.entropy.unl) return; - let gain = tmp.elm.entropy.gain; + let gain = getEntropyGain(); if (gain.lt(1)) return; - 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) - player.elementary.foam.amounts = [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)] player.elementary.foam.maxDepth = new ExpantaNum(1) player.elementary.foam.upgrades = [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), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)] + + player.elementary.entropy.amount = player.elementary.entropy.amount.plus(gain) + player.elementary.entropy.best = player.elementary.entropy.best.max(player.elementary.entropy.amount) } function forceEntropyReset(trueForce=false) { @@ -1609,7 +1609,7 @@ function getSkyGain() { function skyrmionReset(force=false) { if (!force) { if (!canSkyReset()) return; - player.elementary.sky.amount = player.elementary.sky.amount.plus(tmp.elm.sky.gain); + player.elementary.sky.amount = player.elementary.sky.amount.plus(getSkyGain()); }; player.inf.pantheon.purge.power = new ExpantaNum(0); From e99c4b69cc9fcdf762fc207c45044356436fa4a1 Mon Sep 17 00:00:00 2001 From: pg132 Date: Fri, 9 Oct 2020 20:08:47 -0700 Subject: [PATCH 005/116] v1.9 Clean Up 1 --- js/classes/Feature.js | 3 +- js/constants/inf.js | 3 +- js/constants/modes.js | 40 +- js/functions/achievements.js | 87 +- js/functions/formatting.js | 30 +- js/functions/misc.js | 2 +- js/main/auto.js | 71 +- js/main/collapse.js | 24 +- js/main/dc.js | 283 ++-- js/main/early_game.js | 15 +- js/main/elementary/bosons.js | 295 ++++ js/main/elementary/elm.js | 252 +++ js/main/elementary/fermions.js | 128 ++ js/main/elementary/foam.js | 319 ++++ js/main/elementary/hadronic_challenges.js | 170 ++ js/main/elementary/skyrmion.js | 177 +++ js/main/elementary/theory.js | 377 +++++ js/main/elements.js | 1 - js/main/elm.js | 1727 --------------------- js/main/extreme/fn.js | 306 ++-- js/main/extreme/rankCheap.js | 158 +- js/main/hd.js | 62 +- js/main/inf.js | 31 +- main.html | 8 +- 24 files changed, 2317 insertions(+), 2252 deletions(-) create mode 100644 js/main/elementary/bosons.js create mode 100644 js/main/elementary/elm.js create mode 100644 js/main/elementary/fermions.js create mode 100644 js/main/elementary/foam.js create mode 100644 js/main/elementary/hadronic_challenges.js create mode 100644 js/main/elementary/skyrmion.js create mode 100644 js/main/elementary/theory.js delete mode 100644 js/main/elm.js diff --git a/js/classes/Feature.js b/js/classes/Feature.js index ac1a78f4..5a0a8e12 100644 --- a/js/classes/Feature.js +++ b/js/classes/Feature.js @@ -62,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 " + @@ -74,5 +74,6 @@ class Feature { " (" + showNum(new ExpantaNum(this.progress() || 0).times(100)) + "%)"; + } } } diff --git a/js/constants/inf.js b/js/constants/inf.js index 037ade20..61d6a2e0 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.", diff --git a/js/constants/modes.js b/js/constants/modes.js index 0ed348e9..d55b16f7 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -161,28 +161,30 @@ const MODE_EX = { extreme: function (source) { source.rankCheap = new ExpantaNum(source.rankCheap); source.furnace.coal = new ExpantaNum(source.furnace.coal); - 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), + let fu = source.furnace.upgrades + fu = [ + 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 = [] diff --git a/js/functions/achievements.js b/js/functions/achievements.js index e94f093e..5d04ac64 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 (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.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,7 +163,9 @@ 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(); - +} + +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(); @@ -149,8 +174,38 @@ function updateAchievements() { if (player.elementary.theory.inflatons.amount.gte(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(); + // A172 DNE + // A173 DNE + // A174 DNE + // A175 DNE + // A176 DNE + // A177 DNE + // A178 DNE +} + +function updateAchievements() { + tmp.nopathogenupgs = getTotalPathogenUpgrades().eq(0) + checkR1Ach() + checkR2Ach() + checkR3Ach() + checkR4Ach() + checkR5Ach() + checkR6Ach() + checkR7Ach() + checkR8Ach() + checkR9Ach() + checkR10Ach() + checkR11Ach() + checkR12Ach() + checkR13Ach() + checkR14Ach() + checkR15Ach() + checkR16Ach() + checkR17Ach() } function rowComplete(r) { diff --git a/js/functions/formatting.js b/js/functions/formatting.js index 784d80ef..975edc6a 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, 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; } function showNum(val) { diff --git a/js/functions/misc.js b/js/functions/misc.js index d72f3f36..4c2a8fce 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -341,7 +341,7 @@ function copyToClipboard(str) { el.value = str; document.body.appendChild(el); el.select(); - el.setSelectionRange(0, 99999); + el.setSelectionRange(0, 99999); document.execCommand("copy"); document.body.removeChild(el); } diff --git a/js/main/auto.js b/js/main/auto.js index ced3fe5b..054f8414 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -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,16 +93,26 @@ 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 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++ let robot = tmp.auto[Object.keys(ROBOT_REQS)[autoRobotTarget]] @@ -111,6 +120,9 @@ function autoTick(diff) { 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,6 +132,9 @@ 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 { @@ -128,9 +143,21 @@ function autoTick(diff) { } 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,6 +167,9 @@ function autoTick(diff) { if (player.elementary.time.gte(val)) elmReset(false, true) } } +} + +function spectralGemAutoTick(){ if (player.automators["spectral_gems"]) { if (!player.inf.pantheon.gems.eq(0)) { let types = ["angels", "demons"] @@ -153,11 +183,20 @@ function autoTick(diff) { } } } +} + +function photonsAutoTick(){ if (player.automators["photon_upgrades"]) for (let i=1;i<=4;i++) tmp.elm.bos.buyLU(i, true) +} + +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) } +} + +function theoryTreeAutoTick(){ if (player.automators["tree_upgrades"]) { if (player.elementary.theory.tree.unl) { tmp.elm.theory.tree.buy(ttaid, true) @@ -165,10 +204,16 @@ function autoTick(diff) { ttaid = (ttaid%(Object.keys(TREE_UPGS).length))+1 } } +} + +function entropyAutoTick(){ if (player.automators["entropy"] && player.elementary.entropy.unl) { 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) { let toBuy = Array.from({length: ENTROPY_UPGS}, (v, i) => i+1).filter(x => !player.elementary.entropy.upgrades.includes(x)); let nextUpg = toBuy.reduce((a,c) => Math.min(a,c)); @@ -176,6 +221,26 @@ function autoTick(diff) { } } +function autoTick(diff) { + normalAutoTick(diff) + furnaceAutoTick() + pathogenAutoTick() + darkCoreAutoTick() + robotAutoTick() + infUpgAutoTick() + endorseAutoTick() + perksAutoTick() + enlightenmentAutoTick() + derivAutoTick() + elemenAutoTick() + spectralGemAutoTick() + photonsAutoTick() + gluonAutoTick() + theoryTreeAutoTick() + entropyAutoTick() + entropyUpgAutoTick() +} + function autoPerSec() { if (player.automators["foam_unlocks"]) { if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) diff --git a/js/main/collapse.js b/js/main/collapse.js index 3b37d70e..14ef9414 100644 --- a/js/main/collapse.js +++ b/js/main/collapse.js @@ -24,7 +24,7 @@ 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 ); return eff; @@ -42,6 +42,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 +65,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 +74,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() { diff --git a/js/main/dc.js b/js/main/dc.js index 10fc7a5e..52a7d331 100644 --- a/js/main/dc.js +++ b/js/main/dc.js @@ -1,148 +1,57 @@ 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")) { + 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")) { + 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); @@ -164,43 +73,95 @@ function updateTempDC() { if (tmp.elm) if (player.elementary.times.gt(0)) tmp.dc.flow = tmp.dc.flow.times(tmp.elm.bos.z2.max(1)); 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()); 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() { + 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() diff --git a/js/main/early_game.js b/js/main/early_game.js index f4a9e9be..0bdd667f 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,9 @@ 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) +} - // 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 +79,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/elementary/bosons.js b/js/main/elementary/bosons.js new file mode 100644 index 00000000..3817cdf7 --- /dev/null +++ b/js/main/elementary/bosons.js @@ -0,0 +1,295 @@ +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 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) + 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..e74cc25f --- /dev/null +++ b/js/main/elementary/elm.js @@ -0,0 +1,252 @@ +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 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 updateTempElementary() { + if (tmp.elm) setTempElementaryStuff(); + else tmp.elm = {}; + updateElementaryLayer(); + updateElementaryTabs(); + updateTempFermions(); + updateTempBosons(); + updateTempPerkAccelerator(); + updateTempTheories(); + updateTempHC(); + updateTempQuantumFoam(); + updateTempSkyrmions(); +} + +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) + if (player.elementary.entropy.upgrades.includes(12)) { + player.elementary.particles = player.elementary.particles.plus(tmp.elm.layer.gain.times(diff).div(100)) + player.bestEP = player.bestEP.max(tmp.elm.layer.gain.div(100)) + player.elementary.fermions.amount = player.elementary.fermions.amount.plus(player.elementary.particles.times(diff).div(100)) + player.elementary.bosons.amount = player.elementary.bosons.amount.plus(player.elementary.particles.times(diff).div(100)) + } + if (player.elementary.sky.unl) { + player.elementary.sky.pions.amount = player.elementary.sky.pions.amount.plus(tmp.elm.sky.pionGain.times(diff)); + player.elementary.sky.spinors.amount = player.elementary.sky.spinors.amount.plus(tmp.elm.sky.spinorGain.times(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 getElementariesGained() { + let e = new ExpantaNum(1) + if (hasDE(4)) e = e.times(getGravBoostMult()) + return e.max(1).floor() +} + diff --git a/js/main/elementary/fermions.js b/js/main/elementary/fermions.js new file mode 100644 index 00000000..b5ae0c1d --- /dev/null +++ b/js/main/elementary/fermions.js @@ -0,0 +1,128 @@ +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 = getQuarkStacks(tmp.elm.ferm.quarkRewards) + 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 = 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)) 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 = 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)) 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(); +} \ 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..07f3deee --- /dev/null +++ b/js/main/elementary/foam.js @@ -0,0 +1,319 @@ +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||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.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) { + player.elementary.foam.amounts[x] = ExpantaNum.add(player.elementary.foam.amounts[x], gain).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].times(diff)) + for (let b=0;b<3;b++) if (player.elementary.foam.autoUnl[i*3+b]&&player.elementary.entropy.bestDepth.gte(i+3)) 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) { + 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) + return gain +} + +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 + let id = (x-1)*3+(b-1) + let amt = player.elementary.foam.upgrades[id] + let cost = start.times(base.pow(amt.pow(exp))) + 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 + let id = (x-1)*3+(b-1) + let res = player.elementary.foam.amounts[x-1] + 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) 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() + 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) + } + } + return data +} + +function qfUnl(x) { + if (!player.elementary.foam.maxDepth.eq(x)) return; + if (player.elementary.foam.maxDepth.gte(5)) 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) + let resetted = 0 + while (resetted KEEP_ENTUPGS_SKY.includes(x)) + + forceEntropyReset(true); + tmp.elm.layer.reset(true); + + updateTempInf(); + updateTempElementary(); +} + +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).plus(1) + return eff; +} + +function getQuarkStacks(x) { + let stacks = new ExpantaNum(x) + .sub(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); + return stacks; +} + +function getLeptonStacks(x) { + let stacks = new ExpantaNum(x) + .sub(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); + return stacks; +} + +function getPionGain() { + let gain = player.elementary.sky.amount.pow(2).times(5) + return gain; +} + +function getSpinorGain() { + let gain = player.elementary.sky.amount.pow(2).times(5) + 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 getFieldUpgCost(type, id) { + let data = SKY_FIELDS[id]; + let bought = ExpantaNum.pow(ExpantaNum.add(player.elementary.sky.pions.field[id]||0, player.elementary.sky.spinors.field[id]||0), 2) + let cost = ExpantaNum.pow(data.costMult, bought).times(data.baseCost); + return cost; +} + +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, 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) +} \ No newline at end of file diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js new file mode 100644 index 00000000..96d23be3 --- /dev/null +++ b/js/main/elementary/theory.js @@ -0,0 +1,377 @@ +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).max(0) + 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).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 + 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 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)).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(); + 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) + } 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) + } + } + 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 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).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) + 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) + let ettu = player.elementary.theory.tree.upgrades + 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)) + 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).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)) + 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).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)) + 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 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 hasDE(n) { + 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.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)) { + 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 (!(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 (!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) + 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) + eff = eff.plus(amt.plus(1).log10().plus(1).log10()) + return eff.floor() +} + +function getTreeUpgCap(x) { + let cap = new ExpantaNum(TREE_UPGS[x].cap) + if (player.elementary.foam.unl && tmp.elm.qf && QFB17_TARGETS.includes(parseInt(x+""))) cap = cap.plus(tmp.elm.qf.boost17) + return cap; +} diff --git a/js/main/elements.js b/js/main/elements.js index 6cd59e4e..93550c3b 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -77,7 +77,6 @@ function updateMainHTML(){ // 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.
    ":"") tmp.el.quickReset.setDisplay(modeActive("hikers_dream")) - } } diff --git a/js/main/elm.js b/js/main/elm.js deleted file mode 100644 index 9ad23b60..00000000 --- a/js/main/elm.js +++ /dev/null @@ -1,1727 +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 = getQuarkStacks(tmp.elm.ferm.quarkRewards) - 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 = 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)) 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 = 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)) 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).max(0) - 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).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 - 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 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)).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(); - 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) - } 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) - } - } - 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||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.omega = getOmegaParticles() - tmp.elm.entropy.omegaEff = getOmegaEff() -} - -function updateTempQuantumFoam() { - if (!tmp.elm.qf) tmp.elm.qf = {} - - updateQuantumFoamTabs(); - updateQuantumFoamBoosts(); - updateQuantumFoamEffects(); - updateQuantumFoamGain(); - updateTempEntropy(); -} - -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(); -} - -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(player.elementary.sky.pions.field[i]||0) -} - -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(player.elementary.sky.spinors.field[i]||0) -} - -function updateTempSkyrmions() { - if (!tmp.elm.sky) tmp.elm.sky = {} - - updateSkyrmionTabs(); - updateSkyrmionMain(); - updatePions(); - updateSpinors(); -} - -function updateTempElementary() { - if (tmp.elm) setTempElementaryStuff(); - else tmp.elm = {}; - updateElementaryLayer(); - updateElementaryTabs(); - updateTempFermions(); - updateTempBosons(); - updateTempPerkAccelerator(); - updateTempTheories(); - updateTempHC(); - updateTempQuantumFoam(); - updateTempSkyrmions(); -} - -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) - if (player.elementary.entropy.upgrades.includes(12)) { - player.elementary.particles = player.elementary.particles.plus(tmp.elm.layer.gain.times(diff).div(100)) - player.bestEP = player.bestEP.max(tmp.elm.layer.gain.div(100)) - player.elementary.fermions.amount = player.elementary.fermions.amount.plus(player.elementary.particles.times(diff).div(100)) - player.elementary.bosons.amount = player.elementary.bosons.amount.plus(player.elementary.particles.times(diff).div(100)) - } - if (player.elementary.sky.unl) { - player.elementary.sky.pions.amount = player.elementary.sky.pions.amount.plus(tmp.elm.sky.pionGain.times(diff)); - player.elementary.sky.spinors.amount = player.elementary.sky.spinors.amount.plus(tmp.elm.sky.spinorGain.times(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).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) - 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).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)) - 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).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)) - 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) - 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) -} - -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)) { - 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") - } -} - -// 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;i KEEP_ENTUPGS_SKY.includes(x)) - - forceEntropyReset(true); - tmp.elm.layer.reset(true); - - updateTempInf(); - updateTempElementary(); -} - -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).plus(1) - return eff; -} - -function getQuarkStacks(x) { - let stacks = new ExpantaNum(x) - .sub(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); - return stacks; -} - -function getLeptonStacks(x) { - let stacks = new ExpantaNum(x) - .sub(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); - return stacks; -} - -function getPionGain() { - let gain = player.elementary.sky.amount.pow(2).times(5) - return gain; -} - -function getSpinorGain() { - let gain = player.elementary.sky.amount.pow(2).times(5) - 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 getFieldUpgCost(type, id) { - let data = SKY_FIELDS[id]; - let bought = ExpantaNum.pow(ExpantaNum.add(player.elementary.sky.pions.field[id]||0, player.elementary.sky.spinors.field[id]||0), 2) - let cost = ExpantaNum.pow(data.costMult, bought).times(data.baseCost); - return cost; -} - -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, 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) -} \ No newline at end of file diff --git a/js/main/extreme/fn.js b/js/main/extreme/fn.js index 73d2422f..e1372758 100644 --- a/js/main/extreme/fn.js +++ b/js/main/extreme/fn.js @@ -18,107 +18,63 @@ function updateCoalGain(){ if (extremeStadiumActive("flamis", 5)) tmp.fn.gain = tmp.fn.gain.pow(0.2) } -function updateFurnaceUpgradeCosts(){ - for (let n = 1; n <= 5; n++) { - tmp.fn.upgs[n].cost = ExpantaNum.pow( - tmp.fn.upgs[n].base.div(10), - player.furnace.upgrades[n - 1].pow(tmp.fn.bfEff.times(2)) - ).times(tmp.fn.upgs[n].base); - tmp.fn.upgs[n].bulk = player.furnace.coal - .div(tmp.fn.upgs[n].base) - .logBase(tmp.fn.upgs[n].base.div(10)) +function updateFuranceUpgradeActualCost(n){ + let data = tmp.fn.upgs[n] + let nAmt = player.furnace.upgrades[n - 1].max(data.bulk) + + let start3 = getScalingStart("hyper", "fn"); + let power3 = getScalingPower("hyper", "fn"); + let base3 = ExpantaNum.pow(1.1, power3); + let start2 = getScalingStart("superscaled", "fn"); + let power2 = scalingActive("fn", nAmt, "superscaled") ? getScalingPower("superscaled", "fn") : 0; + let exp2 = ExpantaNum.pow(3, power2); + let start = getScalingStart("scaled", "fn"); + let power = scalingActive("fn", nAmt, "scaled") ? getScalingPower("scaled", "fn") : 0; + let exp = ExpantaNum.pow(2, power); + + let initBaseCost = scalingActive("fn", nAmt, "hyper") ? + ExpantaNum.pow(base3, player.furnace.upgrades[n - 1].sub(start3)).times(start3) : + player.furnace.upgrades[n - 1] + + data.cost = ExpantaNum.pow( + data.base.div(10), + initBaseCost.pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .pow(tmp.fn.bfEff.times(2)) + ).times(data.base); + + let starting = player.furnace.coal + .div(data.base) + .logBase(data.base.div(10)) .pow(tmp.fn.bfEff.times(2).pow(-1)) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .times(start2.pow(exp.sub(1))) + .pow(exp2.pow(-1)) + .div(scalingActive("fn", nAmt, "hyper") ? start3 : 1) + .max(1) + if (scalingActive("fn", nAmt, "hyper")){ + data.bulk = starting + .logBase(base3) + .plus(start3) .plus(1) .floor(); - if (scalingActive("fn", player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk), "scaled")) { - let start = getScalingStart("scaled", "fn") - let power = getScalingPower("scaled", "fn") - let exp = ExpantaNum.pow(2, power); - tmp.fn.upgs[n].cost = ExpantaNum.pow( - tmp.fn.upgs[n].base.div(10), - player.furnace.upgrades[n - 1] - .pow(exp) - .div(start.pow(exp.sub(1))) - .pow(tmp.fn.bfEff.times(2)) - ).times(tmp.fn.upgs[n].base); - tmp.fn.upgs[n].bulk = player.furnace.coal - .div(tmp.fn.upgs[n].base) - .logBase(tmp.fn.upgs[n].base.div(10)) - .pow(tmp.fn.bfEff.times(2).pow(-1)) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .plus(1) - .floor(); - } - if (scalingActive("fn", player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk), "superscaled")) { - let start2 = getScalingStart("superscaled", "fn"); - let power2 = getScalingPower("superscaled", "fn"); - let exp2 = ExpantaNum.pow(3, power2); - let start = getScalingStart("scaled", "fn"); - let power = getScalingPower("scaled", "fn"); - let exp = ExpantaNum.pow(2, power); - tmp.fn.upgs[n].cost = ExpantaNum.pow( - tmp.fn.upgs[n].base.div(10), - player.furnace.upgrades[n - 1] - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .pow(tmp.fn.bfEff.times(2)) - ).times(tmp.fn.upgs[n].base); - tmp.fn.upgs[n].bulk = player.furnace.coal - .div(tmp.fn.upgs[n].base) - .logBase(tmp.fn.upgs[n].base.div(10)) - .pow(tmp.fn.bfEff.times(2).pow(-1)) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .times(start2.pow(exp.sub(1))) - .pow(exp2.pow(-1)) - .plus(1) - .floor(); - } - if (scalingActive("fn", player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk), "hyper")) { - let start3 = getScalingStart("hyper", "fn"); - let power3 = getScalingPower("hyper", "fn"); - let base3 = ExpantaNum.pow(1.1, power3); - let start2 = getScalingStart("superscaled", "fn"); - let power2 = getScalingPower("superscaled", "fn"); - let exp2 = ExpantaNum.pow(3, power2); - let start = getScalingStart("scaled", "fn"); - let power = getScalingPower("scaled", "fn"); - let exp = ExpantaNum.pow(2, power); - tmp.fn.upgs[n].cost = ExpantaNum.pow( - tmp.fn.upgs[n].base.div(10), - ExpantaNum.pow(base3, player.furnace.upgrades[n - 1].sub(start3)) - .times(start3) - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .pow(tmp.fn.bfEff.times(2)) - ).times(tmp.fn.upgs[n].base); - tmp.fn.upgs[n].bulk = player.furnace.coal - .div(tmp.fn.upgs[n].base) - .logBase(tmp.fn.upgs[n].base.div(10)) - .pow(tmp.fn.bfEff.times(2).pow(-1)) - .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) - .plus(start3) - .plus(1) - .floor(); - } - if (!tmp.fn.upgs[n].buy) tmp.fn.upgs[n].buy = function () { + } else data.bulk = starting.plus(1).floor() +} + +function updateFurnaceUpgradeCosts(){ + for (let n = 1; n <= 5; n++) { + let data = tmp.fn.upgs[n] + updateFuranceUpgradeActualCost(n) + if (!data.buy) data.buy = function () { if (player.furnace.coal.lt(tmp.fn.upgs[n].cost)) return; player.furnace.coal = player.furnace.coal.sub(tmp.fn.upgs[n].cost); player.furnace.upgrades[n - 1] = player.furnace.upgrades[n - 1].plus(1); updateFurnaceUpgradeCosts(); }; - if (!tmp.fn.upgs[n].max) tmp.fn.upgs[n].max = function () { + if (!data.max) data.max = function () { if (player.furnace.coal.lt(tmp.fn.upgs[n].cost)) return; if (tmp.fn.upgs[n].bulk.floor().lte(player.furnace.upgrades[n - 1])) player.furnace.upgrades[n - 1] = player.furnace.upgrades[n - 1].plus(1); player.furnace.upgrades[n - 1] = player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk.floor()); @@ -126,8 +82,11 @@ function updateFurnaceUpgradeCosts(){ } } -function updateTempFurnace() { - if (!tmp.fn) tmp.fn = {}; +function calcBlueFlameEfficiency(){ + if (inFC(1)) { + tmp.fn.bfEff = new ExpantaNum(1) + return + } let adj = new ExpantaNum(1); if (player.tr.upgrades.includes(17) && !HCCBA("noTRU") && modeActive("extreme")) adj = adj.times(player.tr.cubes.plus(1).times(10).slog(10)); @@ -137,7 +96,13 @@ function updateTempFurnace() { if (extremeStadiumActive("quantron", 2)) adj = adj.times(0.95) tmp.fn.bfEff = ExpantaNum.div(1, player.furnace.blueFlame.plus(tmp.fn.enh?tmp.fn.enh.eff:0).times(adj).div(4).plus(1)); if (tmp.fn.bfEff.lt(0.0098)) tmp.fn.bfEff = tmp.fn.bfEff.sqrt().times(Math.sqrt(0.0098)); - if (inFC(1)) tmp.fn.bfEff = new ExpantaNum(1) +} + +function calcFN4Base(){ + if (extremeStadiumActive("flamis", 4) || extremeStadiumActive("nullum", 5) || extremeStadiumActive("quantron", 3)) { + tmp.fn4base = new ExpantaNum(0); + return + } tmp.fn4base = new ExpantaNum(0.15) if (FCComp(5)) tmp.fn4base = tmp.fn4base.plus(ExpantaNum.mul(0.0001, player.furnace.upgrades[0])) if (tmp.fn.enh) if (tmp.fn.enh.unl) tmp.fn4base = tmp.fn4base.plus(ExpantaNum.mul(tmp.fn.enh.upg3eff?tmp.fn.enh.upg3eff:0, player.furnace.enhancedUpgrades[2].plus(tmp.fn.enh.upgs[3].extra))) @@ -145,24 +110,23 @@ function updateTempFurnace() { if (player.tr.upgrades.includes(35)&&!HCCBA("noTRU")) tmp.fn4base = tmp.fn4base.plus(1).sqrt().sub(1) else tmp.fn4base = new ExpantaNum(0) } - if (extremeStadiumActive("flamis", 4) || extremeStadiumActive("nullum", 5) || extremeStadiumActive("quantron", 3)) tmp.fn4base = new ExpantaNum(0); +} + +function calcFN1Base(){ tmp.fn1base = inFC(4)?1:(new ExpantaNum(FCComp(2)?28:3).plus(ExpantaNum.mul(tmp.fn4base, player.furnace.upgrades[3]))) if (extremeStadiumActive("quantron", 4)) tmp.fn1base = tmp.fn1base.sqrt(); - updateCoalGain() +} + +function calcFurnaceUpgradeEffeciency(){ tmp.fn.eff = player.furnace.coal.plus(1).log10().pow(0.6).div(5); if (tmp.fn.eff.gte(1)) tmp.fn.eff = tmp.fn.eff.log10().plus(1); if (tmp.ach[35].has) tmp.fn.eff = tmp.fn.eff.times(2); if (player.tr.upgrades.includes(25) && !HCCBA("noTRU")) tmp.fn.eff = tmp.fn.eff.times(2); if (player.tr.upgrades.includes(31) && !HCCBA("noTRU")) tmp.fn.eff = tmp.fn.eff.times(1.8); if (extremeStadiumActive("spectra", 2)) tmp.fn.eff = new ExpantaNum(0) - tmp.fn.upgs = { - 1: { base: new ExpantaNum(20) }, - 2: { base: new ExpantaNum(100) }, - 3: { base: new ExpantaNum(1.5e3) }, - 4: { base: new ExpantaNum(1e100) }, - 5: { base: new ExpantaNum("1e1000") }, - }; - updateFurnaceUpgradeCosts() +} + +function updateBlueFlameCost(){ tmp.fn.bfBase = inFC(4)?3.618:2 tmp.fn.bfLB = inFC(4)?160:10 tmp.fn.bfReq = ExpantaNum.pow(tmp.fn.bfLB, ExpantaNum.pow(tmp.fn.bfBase, player.furnace.blueFlame).sub(1)).times(1e6); @@ -181,15 +145,31 @@ function updateTempFurnace() { player.furnace.blueFlame = player.furnace.blueFlame.plus(1); updateFurnaceUpgradeCosts(); }; - updateFNTabs(); - if (!tmp.fn.enh) tmp.fn.enh = {} - tmp.fn.enh.unl = tmp.ach[111].has +} + +function setFurnaceBaseCosts(){ + tmp.fn.upgs = { + 1: { base: new ExpantaNum(20) }, + 2: { base: new ExpantaNum(100) }, + 3: { base: new ExpantaNum(1.5e3) }, + 4: { base: new ExpantaNum(1e100) }, + 5: { base: new ExpantaNum("1e1000") }, + }; +} + +function calcECoalGain(){ tmp.fn.enh.gain = ExpantaNum.pow(1.1, tmp.fn.enh.unl?player.furnace.blueFlame:0).sub(1).times(ExpantaNum.pow(tmp.fn.enh.upg1eff?tmp.fn.enh.upg1eff:1, player.furnace.enhancedUpgrades[0].plus(tmp.fn.enh.upgs?tmp.fn.enh.upgs[1].extra:0))) if (tmp.ach[116].has) tmp.fn.enh.gain = tmp.fn.enh.gain.times(ExpantaNum.pow(1.4, player.inf.pantheon.purge.power)) if ((tmp.fn.enh.moltBr||new ExpantaNum(0)).gte(1)) tmp.fn.enh.gain = tmp.fn.enh.gain.times(tmp.fn.enh.moltBrEff||1) +} + +function calcEFEffeciency(){ tmp.fn.enh.eff = tmp.fn.enh.unl?(player.furnace.enhancedCoal.plus(1).log10().plus(1).log10().plus(1).log10().times(5)):new ExpantaNum(0) tmp.fn.enh.eff2exp = ExpantaNum.mul(player.furnace.enhancedUpgrades[12], tmp.fn.enh.upg13eff?tmp.fn.enh.upg13eff:0).plus(100) tmp.fn.enh.eff2 = tmp.fn.enh.unl?player.furnace.enhancedCoal.plus(1).pow(tmp.fn.enh.eff2exp):new ExpantaNum(1) +} + +function setEFurnaceBaseCosts(){ if (!tmp.fn.enh.upgs) tmp.fn.enh.upgs = { 1: { base: new ExpantaNum(100) }, 2: { base: new ExpantaNum(250) }, @@ -206,36 +186,52 @@ function updateTempFurnace() { 13: { base: new ExpantaNum(1e40) }, }; tmp.fn.enh.upgs[13].costAdj = new ExpantaNum(0.75) +} + +function updateEFuranceUpgradeActualCost(n){ + let nAmt = player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk) + + let start = getScalingStart("scaled", "efn") + let power = scalingActive("efn", nAmt, "scaled") ? getScalingPower("scaled", "efn") : 0 + 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(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)) + .plus(1) + .floor(); +} + +function updatePost25EndorseEx(){ + 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) + tmp.fn.enh.upg13eff = ExpantaNum.add(60, endMod.div(3).floor().times(10).min(10)) +} + +function updateMoltenBricks(){ + 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) +} + +function updateEFurnanceUpgradeCosts(){ for (let n = 1; n <= 13; n++) { - 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] - ).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)) - .plus(1) - .floor(); + updateEFuranceUpgradeActualCost(n) 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)):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]) - 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") - 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(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)) - .plus(1) - .floor(); - } + if (n < 13) tmp.fn.enh.upgs[n].extra = tmp.fn.enh.upgs[n].extra.plus(player.furnace.enhancedUpgrades[12]) 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 +244,31 @@ function updateTempFurnace() { player.furnace.enhancedUpgrades[n - 1] = player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk.floor()); }; } - 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) - 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) +} + +function updateTempFurnace() { + if (!tmp.fn) tmp.fn = {}; + + calcBlueFlameEfficiency() + calcFN4Base() + calcFN1Base() + updateCoalGain() + calcFurnaceUpgradeEffeciency() + setFurnaceBaseCosts() + updateFurnaceUpgradeCosts() + updateBlueFlameCost() + + + updateFNTabs(); + if (!tmp.fn.enh) tmp.fn.enh = {} + + tmp.fn.enh.unl = tmp.ach[111].has + calcECoalGain() + calcEFEffeciency() + setEFurnaceBaseCosts() + updateEFurnanceUpgradeCosts() + updatePost25EndorseEx() + updateMoltenBricks() } function startFurnChall(x) { diff --git a/js/main/extreme/rankCheap.js b/js/main/extreme/rankCheap.js index eca2f342..e297efec 100644 --- a/js/main/extreme/rankCheap.js +++ b/js/main/extreme/rankCheap.js @@ -20,129 +20,83 @@ function updateTempRankCheapCost(){ tmp.rankCheap.fp = new ExpantaNum(1); if (extremeStadiumComplete("spectra")) tmp.rankCheap.fp = tmp.rankCheap.fp.times(EXTREME_STADIUM_DATA.spectra.effect()) tmp.rankCheap.bc = new ExpantaNum(30); - tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( - ExpantaNum.pow(2, player.rankCheap.div(tmp.rankCheap.fp).max(1).sub(1).pow(2)) - ); - tmp.rankCheap.bulk = player.distance - .div(tmp.rankCheap.bc) - .logBase(2) - .sqrt() - .plus(1) - .times(tmp.rankCheap.fp) - .plus(1) - .round(); + + let nAmt = player.rankCheap.max(tmp.rankCheap.bulk) + let start = getScalingStart("scaled", "rankCheap"); - let power = getScalingPower("scaled", "rankCheap"); + let power = scalingActive("rankCheap", nAmt, "scaled") ? getScalingPower("scaled", "rankCheap") : 0 let exp = ExpantaNum.pow(2, power); - if (scalingActive("rankCheap", player.rankCheap.max(tmp.rankCheap.bulk), "scaled")) { - tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( - ExpantaNum.pow( - 2, - player.rankCheap - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(tmp.rankCheap.fp) - .sub(1) - .pow(2) - ) - ); - tmp.rankCheap.bulk = player.distance - .div(tmp.rankCheap.bc) - .max(1) - .logBase(2) - .sqrt() - .plus(1) - .times(tmp.rankCheap.fp) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .plus(1) - .floor(); - } let start2 = getScalingStart("superscaled", "rankCheap"); - let power2 = getScalingPower("superscaled", "rankCheap"); + let power2 = scalingActive("rankCheap", nAmt, "superscaled") ? getScalingPower("superscaled", "rankCheap") : 0 let exp2 = ExpantaNum.pow(3, power2); - if (scalingActive("rankCheap", player.rankCheap.max(tmp.rankCheap.bulk), "superscaled")) { - tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( - ExpantaNum.pow( - 2, - player.rankCheap - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(tmp.rankCheap.fp) - .sub(1) - .pow(2) - ) - ); - tmp.rankCheap.bulk = player.distance - .div(tmp.rankCheap.bc) - .max(1) - .logBase(2) - .sqrt() - .plus(1) - .times(tmp.rankCheap.fp) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .times(start2.pow(exp2.sub(1))) - .pow(exp2.pow(-1)) - .add(1) - .floor(); - } let start3 = getScalingStart("hyper", "rankCheap"); let power3 = getScalingPower("hyper", "rankCheap"); let base3 = ExpantaNum.pow(1.01, power3); - if (scalingActive("rankCheap", player.rankCheap.max(tmp.rankCheap.bulk), "hyper")) { - tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( - ExpantaNum.pow( - 2, - ExpantaNum.pow(base3, player.rankCheap.sub(start3)) - .times(start3) - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(tmp.rankCheap.fp) - .sub(1) - .pow(2) - ) - ); - tmp.rankCheap.bulk = player.distance - .div(tmp.rankCheap.bc) - .max(1) - .logBase(2) - .sqrt() - .plus(1) - .times(tmp.rankCheap.fp) - .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) - .floor(); + + + let starting + if (scalingActive("rankCheap", nAmt, "hyper")) { + starting = ExpantaNum.pow(base3, player.rankCheap.sub(start3)).times(start3) + } else starting = player.rankCheap + + tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( + ExpantaNum.pow( + 2, + starting + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .div(tmp.rankCheap.fp) + .sub(1) + .pow(2) + ) + ); + if (player.distance.lt(tmp.rankCheap.bc)) tmp.rankCheap.bulk = new ExpantaNum(0) + else { + let starting2 = player.distance + .div(tmp.rankCheap.bc) + .max(1) + .logBase(2) + .sqrt() + .plus(1) + .times(tmp.rankCheap.fp) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .times(start2.pow(exp2.sub(1))) + .pow(exp2.pow(-1)) + if (scalingActive("rankCheap", nAmt, "hyper")) { + starting2 = starting2.div(start3).max(1).logBase(base3).add(start3) + } + tmp.rankCheap.bulk = starting2.plus(1).floor(); } } -function updateTempRankCheap() { - if (!tmp.rankCheap) tmp.rankCheap = {}; +function updateFreeRankCheapeners(){ 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 (extremeStadiumActive("cranius", 2)) tmp.rankCheap.free = tmp.rankCheap.free.div(10).floor(); - updateTempRankCheapCost() - tmp.rankCheap.can = player.distance.gte(tmp.rankCheap.req); - tmp.rankCheap.layer = new Layer("rankCheap", tmp.rankCheap.can, "semi-forced"); +} + +function updateRankCheapenerEffeciency(){ tmp.rankCheap.pow = new ExpantaNum(1); if (tmp.ach[12].has) tmp.rankCheap.pow = tmp.rankCheap.pow.plus(ExpantaNum.mul(0.5, player.achievements.length)); 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))) +} + +function updateTempRankCheap() { + if (!tmp.rankCheap) tmp.rankCheap = {}; + updateFreeRankCheapeners() + updateTempRankCheapCost() + tmp.rankCheap.can = player.distance.gte(tmp.rankCheap.req); + tmp.rankCheap.layer = new Layer("rankCheap", tmp.rankCheap.can, "semi-forced"); + updateRankCheapenerEffeciency() + tmp.rankCheap.eff = getRankCheapEff(); tmp.rankCheap.eff2 = getRankCheapEff2(); if (!tmp.rankCheap.onReset) tmp.rankCheap.onReset = function(prev) { diff --git a/js/main/hd.js b/js/main/hd.js index 164c17da..562fbd59 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -120,34 +120,7 @@ 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) - - 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) +function calcEnergyUpgrades(){ 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]) @@ -181,6 +154,39 @@ function updateTempHikersDream() { 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) +} + +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) + + 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) + + calcEnergyUpgrades() tmp.hd.energyGen = ExpantaNum.pow(2, player.genLvl.times(player.energy.plus(1).logBase(1.004).sqrt()).sqrt()).sub(1).times(player.geners) } diff --git a/js/main/inf.js b/js/main/inf.js index 8556d41c..d57caf60 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -160,13 +160,8 @@ 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) tmp.inf.knowledgeExp = new ExpantaNum(1); @@ -185,12 +180,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 +192,18 @@ 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) +} + +function updateTempInfLayer() { + tmp.inf.fp = new ExpantaNum(1); + tmp.inf.bc = INF_UNL; + tmp.inf.emPow = new ExpantaNum(1); + 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)) diff --git a/main.html b/main.html index 801ffc4e..fc77569e 100644 --- a/main.html +++ b/main.html @@ -2032,6 +2032,13 @@ + + + + + + + @@ -2049,7 +2056,6 @@ - From 76325464b37eb285d9c3ea2da9abc2918fb9fdb0 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Sat, 10 Oct 2020 19:09:42 -0400 Subject: [PATCH 006/116] v1.9 Beta 3 --- js/constants/achievements.js | 5 ++++ js/constants/elm.js | 54 ++++++++++++++++++++++++++++++---- js/constants/news.js | 7 +++++ js/functions/achievements.js | 4 +-- js/functions/formatting.js | 2 +- js/main/auto.js | 5 +++- js/main/collapse.js | 1 + js/main/dc.js | 5 +++- js/main/elementary/bosons.js | 1 + js/main/elementary/elm.js | 1 + js/main/elementary/foam.js | 1 + js/main/elementary/skyrmion.js | 23 +++++++++++++-- js/main/elementary/theory.js | 2 ++ js/main/elements.js | 2 +- js/main/inf.js | 1 + main.html | 10 +++---- 16 files changed, 105 insertions(+), 19 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 5dd8e73a..4df113b1 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -147,6 +147,8 @@ const ACH_DATA = { 168: "There is only one Fome", 171: "TRANSFOOOOORM!", + 172: "This must have taken years", + 173: "Extensionless Fome", }, descs: { 11: "Go at least formatDistance(100).", @@ -294,6 +296,8 @@ const ACH_DATA = { 168: "Reach showNum(1e25) Quantum Foam without any Subplanck Foam.", 171: "Get a Skyrmion.", + 172: "Elementary showNum(1e12) times.", + 173: "Reach showNum(1e140) Quantum Foam without any Entropy.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -389,5 +393,6 @@ const ACH_DATA = { 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.", + 172: "The Elementary Particle gain softcap is showNum(20)% weaker for every three OoMs of Elementaries done.", } }; \ No newline at end of file diff --git a/js/constants/elm.js b/js/constants/elm.js index 31c340b3..d9be2e00 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -684,7 +684,11 @@ const ENTROPY_UPG_COSTS = { 9: new ExpantaNum(550), 10: new ExpantaNum(700), 11: new ExpantaNum(1500), - 12: new ExpantaNum(1850), + 12: new ExpantaNum(1750), + 13: new ExpantaNum(1800), + 14: new ExpantaNum(2350), + 15: new ExpantaNum(2425), + 16: new ExpantaNum(2475), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, @@ -707,11 +711,11 @@ const SKY_TABS = { pions() { return true }, spinors() { return true }, } -const KEEP_ENTUPGS_SKY = [1, 10, 11, 12] -const SKY_FIELD_UPGS_REQS = [1,5] +const KEEP_ENTUPGS_SKY = [1, 10, 11, 12, 13, 16] +const SKY_FIELD_UPGS_REQS = [1, 5, 20, 100] const SKY_FIELDS = { - upgs: 3, - placements: [[2,3],[1]], + upgs: 7, + placements: [[2,3],[6,1,7],[4,5]], 1: { req: 1, pionDesc: "All Rank/Tier scalings start later based on your Pions.", @@ -742,5 +746,45 @@ const SKY_FIELDS = { 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) { return player.elementary.sky.amount.plus(1).pow(bought).pow(400) }, + spinorEff(bought) { return player.elementary.sky.amount.plus(1).pow(bought).pow(10) }, + desc(eff) { return showNum(eff)+"x" }, + }, + 6: { + req: 100, + pionDesc: "Rockets 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" }, + }, } 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/news.js b/js/constants/news.js index 329fad44..e778880a 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -80,6 +80,9 @@ const NEWS_DATA = { m78: ["Breaking News: Florida man starts speaking French after another news ticker tells him that he's officially Canadian"], m79: ["I'm gonna add some new news ticker messages, so I need ideas"], m80: ["Jacorbian balancing is liked now, but in 10 years, incremental games will be completable in under 3 minutes."], + m81: ["Maybe this is a meta joke. Maybe this is a bored game dev running out of news ticker ideas. Who knows!"], + m82: ["This game is brought to you by Jacorb, the incremental game dev who has no idea what he's doing"], + m83: ["In an alternate universe, all the (softcapped) are replaced with (obscured), the scalings have no names, and Distance Incremental has weeklong timewalls."], // Distance-based Conditions d1: [ @@ -440,6 +443,10 @@ const NEWS_DATA = { "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") }, + ], }; const NEWS_ADJ = 110; diff --git a/js/functions/achievements.js b/js/functions/achievements.js index 5d04ac64..b7c6853a 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -178,8 +178,8 @@ function checkR16Ach(){ function checkR17Ach(){ if (player.elementary.sky.amount.gt(0)) tmp.ach[171].grant(); - // A172 DNE - // A173 DNE + if (player.elementary.times.gte(1e12)) tmp.ach[172].grant(); + if (player.elementary.foam.amounts[0].gte(1e140) && player.elementary.entropy.best.eq(0)) tmp.ach[173].grant(); // A174 DNE // A175 DNE // A176 DNE diff --git a/js/functions/formatting.js b/js/functions/formatting.js index 975edc6a..3363e113 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -30,7 +30,7 @@ function showNum(val) { function addZeroes(orig, num, digits) { 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); + if (orig*Math.pow(10, digits-1)==Math.round(orig*Math.pow(10, digits-1)) && result[result.length-1]=="0" && result.includes(".")) result = result.substring(0, result.length-1) return result } diff --git a/js/main/auto.js b/js/main/auto.js index 054f8414..5e69466d 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -186,7 +186,10 @@ function spectralGemAutoTick(){ } function photonsAutoTick(){ - if (player.automators["photon_upgrades"]) for (let i=1;i<=4;i++) tmp.elm.bos.buyLU(i, true) + 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(){ diff --git a/js/main/collapse.js b/js/main/collapse.js index 14ef9414..437815d5 100644 --- a/js/main/collapse.js +++ b/js/main/collapse.js @@ -27,6 +27,7 @@ function getCadaverEff() { 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]) return eff; } diff --git a/js/main/dc.js b/js/main/dc.js index 52a7d331..1edd7ca1 100644 --- a/js/main/dc.js +++ b/js/main/dc.js @@ -70,7 +70,10 @@ function calcDarkFlow(){ 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); } diff --git a/js/main/elementary/bosons.js b/js/main/elementary/bosons.js index 3817cdf7..511b3cea 100644 --- a/js/main/elementary/bosons.js +++ b/js/main/elementary/bosons.js @@ -183,6 +183,7 @@ function updateTempGauge() { 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) + if (player.elementary.entropy.upgrades.includes(15)) tmp.elm.bos.forceEff = tmp.elm.bos.forceEff.pow(5) let gaugeSpeed = new ExpantaNum(tmp.elm.bos.forceEff); updateTempPhotons(gaugeSpeed); diff --git a/js/main/elementary/elm.js b/js/main/elementary/elm.js index e74cc25f..630cc513 100644 --- a/js/main/elementary/elm.js +++ b/js/main/elementary/elm.js @@ -69,6 +69,7 @@ function updateElementaryLayer() { 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 (tmp.ach[172].has) exp = exp.plus(ExpantaNum.sub(.5, ExpantaNum.div(.5, player.elementary.times.plus(1).logBase(1e3).times(.2).plus(1)))) 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(); diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 07f3deee..edae8f4c 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -300,6 +300,7 @@ function getOmegaEff() { if (!player.elementary.entropy.unl) return new ExpantaNum(0) let eff = tmp.elm.entropy.omega.div(10) if (player.elementary.entropy.upgrades.includes(7)) eff = eff.times(tmp.elm.entropy.upgEff[7].div(100).plus(1)) + if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.times(tmp.elm.sky.spinorEff[7]) return eff } diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index cc837932..302d3ba6 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -92,9 +92,15 @@ function skyrmionReset(force=false) { 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]) + 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).plus(1) + let eff = player.elementary.sky.amount.plus(1).logBase(2).sqrt().times(2.5).times(getSkyPow()).plus(1) return eff; } @@ -122,11 +128,15 @@ function getLeptonStacks(x) { function getPionGain() { let gain = player.elementary.sky.amount.pow(2).times(5) + 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]) return gain; } function getSpinorGain() { let gain = player.elementary.sky.amount.pow(2).times(5) + 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]) return gain; } @@ -145,9 +155,16 @@ function setupSkyField(type) { field.setHTML(html) } +function getFieldUpgCostIncExp() { + let exp = 1 + if (player.elementary.entropy.upgrades.includes(16)) exp /= 4; + return exp; +} + function getFieldUpgCost(type, id) { let data = SKY_FIELDS[id]; - let bought = ExpantaNum.pow(ExpantaNum.add(player.elementary.sky.pions.field[id]||0, player.elementary.sky.spinors.field[id]||0), 2) + 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); return cost; } @@ -155,7 +172,7 @@ function getFieldUpgCost(type, id) { 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, id) + 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) diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 96d23be3..2170c63a 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -50,6 +50,7 @@ function updateTempSupersymmetry() { 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) + if (player.elementary.sky.unl && tmp.elm.sky) tmp.elm.theory.ss[type+"Gain"] = tmp.elm.theory.ss[type+"Gain"].times(tmp.elm.sky.spinorEff[5]) } 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) @@ -366,6 +367,7 @@ function getInflatonEff2() { 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()) return eff.floor() } diff --git a/js/main/elements.js b/js/main/elements.js index 93550c3b..4f844318 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1073,7 +1073,7 @@ function updateInfatonsHTML(){ 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.inflaton2sc.setTxt((eff2.gte(5)&&!player.elementary.entropy.upgrades.includes(13))?"(extremely softcapped)":"") } } diff --git a/js/main/inf.js b/js/main/inf.js index d57caf60..764e24a6 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -894,6 +894,7 @@ function updateTempDerivatives() { 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; diff --git a/main.html b/main.html index fc77569e..944492f4 100644 --- a/main.html +++ b/main.html @@ -1915,10 +1915,10 @@ - - - - + + + + @@ -1957,7 +1957,7 @@

    - Unstabilizing the topology of your multiverse will force an Entropy & Elementary reset, and will also reset your Purge Power, Elementary Particles, Fermions, Bosons, Photon & Gluon Upgrades, Supersymmetric Particles, Theory Tree Upgrades, Strings (and Entangled Strings), Preon amount, Acceleron amount, Inflatons, Hadrons, Entropy, & Entropy Upgrades (except the first one).

    + Destabilizing the topology of your multiverse will force an Entropy & Elementary reset, and will also reset your Purge Power, Elementary Particles, Fermions, Bosons, Photon & Gluon Upgrades, Supersymmetric Particles, Theory Tree Upgrades, Strings (and Entangled Strings), Preon amount, Acceleron amount, Inflatons, Hadrons, Entropy, & Entropy Upgrades (except the first one).



    You have Skyrmions, which multiply the Quark/Lepton exponents by

    From 2a3d2602949f11989a3f011ec23f6e6beae6510f Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 11 Oct 2020 17:16:05 -0400 Subject: [PATCH 007/116] v1.9 Beta 4 --- changelog.html | 1 + js/classes/Achievement.js | 5 + js/constants/achievements.js | 5 + js/constants/automation.js | 36 ++++- js/constants/elm.js | 35 ++++- js/functions/achievements.js | 22 +-- js/main/auto.js | 6 + js/main/effects.js | 1 + js/main/elementary/elm.js | 5 + js/main/elementary/foam.js | 6 +- js/main/elementary/hadronic_challenges.js | 1 + js/main/elementary/skyrmion.js | 29 +++- js/main/elementary/theory.js | 47 ++++++- js/main/elements.js | 8 +- js/main/extreme/fn.js | 4 +- js/main/options.js | 6 +- js/update.js | 7 +- main.html | 161 +++++++++------------- style.css | 72 ++++++++-- 19 files changed, 298 insertions(+), 159 deletions(-) diff --git a/changelog.html b/changelog.html index 0686d0a7..70f139c8 100644 --- a/changelog.html +++ b/changelog.html @@ -161,6 +161,7 @@ >
    • Implemented Skyrmions
    • +
    • Made automators/options look better
    • Squished some more bugs
    diff --git a/js/classes/Achievement.js b/js/classes/Achievement.js index 10ca446f..7883aa22 100644 --- a/js/classes/Achievement.js +++ b/js/classes/Achievement.js @@ -67,4 +67,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/constants/achievements.js b/js/constants/achievements.js index 4df113b1..fc29feb1 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -149,6 +149,8 @@ const ACH_DATA = { 171: "TRANSFOOOOORM!", 172: "This must have taken years", 173: "Extensionless Fome", + 174: "The Multiverse is Doomed", + 175: "Removing the Pillars", }, descs: { 11: "Go at least formatDistance(100).", @@ -298,6 +300,8 @@ const ACH_DATA = { 171: "Get a Skyrmion.", 172: "Elementary showNum(1e12) times.", 173: "Reach showNum(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.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -394,5 +398,6 @@ const ACH_DATA = { 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.", 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.", } }; \ No newline at end of file diff --git a/js/constants/automation.js b/js/constants/automation.js index 8002e754..eaef3ad9 100644 --- a/js/constants/automation.js +++ b/js/constants/automation.js @@ -70,18 +70,15 @@ 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 }, @@ -91,6 +88,12 @@ const AUTOMATORS = { tree_upgrades: function() { return tmp.ach[168].has }, + 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) }, @@ -99,6 +102,27 @@ const AUTOMATORS = { }, }; +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", + theoretical_boosters: "#fcb377", + foam_unlocks: "white", + entropy: "#dbaca9", + entropy_upgrades: "#dbaca9", +} + const AUTOMATOR_X = { elementaries: 2, } diff --git a/js/constants/elm.js b/js/constants/elm.js index d9be2e00..5e852216 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -689,6 +689,10 @@ const ENTROPY_UPG_COSTS = { 14: new ExpantaNum(2350), 15: new ExpantaNum(2425), 16: new ExpantaNum(2475), + 17: new ExpantaNum(11111), + 18: new ExpantaNum(12e3), + 19: new ExpantaNum(17500), + 20: new ExpantaNum(18250), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, @@ -699,6 +703,7 @@ const ENTROPY_UPG_EFFS = { 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() }, 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) }, } const SKY_REQ = [ @@ -711,11 +716,11 @@ const SKY_TABS = { pions() { return true }, spinors() { return true }, } -const KEEP_ENTUPGS_SKY = [1, 10, 11, 12, 13, 16] -const SKY_FIELD_UPGS_REQS = [1, 5, 20, 100] +const KEEP_ENTUPGS_SKY = [1, 10, 11, 12, 13, 16, 17, 20] +const SKY_FIELD_UPGS_REQS = [1, 5, 20, 100, 750] const SKY_FIELDS = { - upgs: 7, - placements: [[2,3],[6,1,7],[4,5]], + upgs: 9, + placements: [[8],[2,3],[6,1,7],[4,5],[9]], 1: { req: 1, pionDesc: "All Rank/Tier scalings start later based on your Pions.", @@ -768,7 +773,7 @@ const SKY_FIELDS = { }, 6: { req: 100, - pionDesc: "Rockets boost Pion & Spinor gain.", + pionDesc: "Ranks boost Pion & Spinor gain.", spinorDesc: "Elementary Particles boost Pion & Spinor gain.", baseCost: new ExpantaNum(1e6), costMult: new ExpantaNum(1e3), @@ -786,5 +791,25 @@ const SKY_FIELDS = { 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) }, + }, } 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/functions/achievements.js b/js/functions/achievements.js index b7c6853a..081abeee 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -180,8 +180,8 @@ 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(1e140) && player.elementary.entropy.best.eq(0)) tmp.ach[173].grant(); - // A174 DNE - // A175 DNE + 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(); // A176 DNE // A177 DNE // A178 DNE @@ -189,23 +189,7 @@ function checkR17Ach(){ function updateAchievements() { tmp.nopathogenupgs = getTotalPathogenUpgrades().eq(0) - checkR1Ach() - checkR2Ach() - checkR3Ach() - checkR4Ach() - checkR5Ach() - checkR6Ach() - checkR7Ach() - checkR8Ach() - checkR9Ach() - checkR10Ach() - checkR11Ach() - checkR12Ach() - checkR13Ach() - checkR14Ach() - checkR15Ach() - checkR16Ach() - checkR17Ach() + for (let r=1;r<=ACH_DATA.rows;r++) if (!Achievement.hasRow(r)) window["checkR"+r+"Ach"](); } function rowComplete(r) { diff --git a/js/main/auto.js b/js/main/auto.js index 5e69466d..ecbe4cda 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -209,6 +209,10 @@ function theoryTreeAutoTick(){ } } +function theoryBoosterAutoTick() { + if (player.automators["theoretical_boosters"] && player.elementary.entropy.upgrades.includes(17)) theoryBoost(true) +} + function entropyAutoTick(){ if (player.automators["entropy"] && player.elementary.entropy.unl) { player.elementary.entropy.amount = player.elementary.entropy.amount.plus(tmp.elm.entropy.gain) @@ -219,6 +223,7 @@ function entropyAutoTick(){ function entropyUpgAutoTick(){ if (player.automators["entropy_upgrades"] && player.elementary.entropy.unl) { let toBuy = Array.from({length: ENTROPY_UPGS}, (v, i) => i+1).filter(x => !player.elementary.entropy.upgrades.includes(x)); + if (toBuy.length==0) return; let nextUpg = toBuy.reduce((a,c) => Math.min(a,c)); buyEntropyUpg(nextUpg) } @@ -240,6 +245,7 @@ function autoTick(diff) { photonsAutoTick() gluonAutoTick() theoryTreeAutoTick() + theoryBoosterAutoTick() entropyAutoTick() entropyUpgAutoTick() } diff --git a/js/main/effects.js b/js/main/effects.js index 647c3821..44a3464f 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 } diff --git a/js/main/elementary/elm.js b/js/main/elementary/elm.js index 630cc513..6cb1d4c0 100644 --- a/js/main/elementary/elm.js +++ b/js/main/elementary/elm.js @@ -147,6 +147,10 @@ function updateTempPerkAccelerator() { 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) } + if (player.elementary.entropy.upgrades.includes(19)) { + tmp.elm.pa.stateStarts.weakened = new ExpantaNum(1/0) + tmp.elm.pa.stateStarts.broken = new ExpantaNum(1/0) + } 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" @@ -156,6 +160,7 @@ function updateTempPerkAccelerator() { 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) + if (tmp.ach[174].has) tmp.elm.pa.boost = tmp.elm.pa.boost.pow(1.05) } function updateTempElementary() { diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index edae8f4c..8710b35c 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -229,7 +229,9 @@ function getEntropyEff() { if (!player.elementary.entropy.unl) return new ExpantaNum(1); let entropy = player.elementary.entropy.best; if (entropy.gte(3)) entropy = entropy.sqrt().times(Math.sqrt(3)) - return entropy.plus(1).pow(2.5); + let eff = entropy.plus(1).pow(2.5); + if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.pow(tmp.elm.sky.spinorEff[9]) + return eff; } function getEntropyGainMult() { @@ -247,12 +249,14 @@ function getEntropyGain() { let gain = foam.div(1e50).pow(0.05) if (gain.gte(5)) gain = gain.times(25).cbrt() if (gain.gte(100)) gain = gain.times(1e6).pow(0.25) + if (gain.gte(1200)) gain = gain.logBase(1.001).div(5.91135) return gain.times(tmp.elm.entropy.gainMult).floor().sub(player.elementary.entropy.amount).max(0) } function getEntropyNext() { if (!player.elementary.entropy.unl) return new ExpantaNum(1/0) let gain = tmp.elm.entropy.gain.plus(player.elementary.entropy.amount).div(tmp.elm.entropy.gainMult).plus(1); + if (gain.gte(1200)) gain = ExpantaNum.pow(1.001, gain.times(5.91135)) if (gain.gte(100)) gain = gain.pow(4).div(1e6) if (gain.gte(5)) gain = gain.pow(3).div(25) return gain.pow(20).times(1e50); diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js index 35a793e8..43b29c58 100644 --- a/js/main/elementary/hadronic_challenges.js +++ b/js/main/elementary/hadronic_challenges.js @@ -8,6 +8,7 @@ function updateTempHC() { 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) + if (player.elementary.entropy.upgrades.includes(19) && tmp.elm.entropy) tmp.elm.hc.hadInterval = tmp.elm.hc.hadInterval.root(tmp.elm.entropy.upgEff[19]) 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) diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index 302d3ba6..3a2aaff8 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -59,7 +59,7 @@ function getSkyGain() { function skyrmionReset(force=false) { if (!force) { if (!canSkyReset()) return; - player.elementary.sky.amount = player.elementary.sky.amount.plus(getSkyGain()); + player.elementary.sky.amount = player.elementary.sky.amount.plus(getSkyGain().max(0)); }; player.inf.pantheon.purge.power = new ExpantaNum(0); @@ -78,6 +78,7 @@ function skyrmionReset(force=false) { 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)]; player.elementary.theory.strings.entangled = new ExpantaNum(0); player.elementary.theory.preons.amount = new ExpantaNum(0); + if (player.elementary.entropy.upgrades.includes(17)) player.elementary.theory.preons.boosters = new ExpantaNum(0) player.elementary.theory.accelerons.amount = new ExpantaNum(0); player.elementary.theory.inflatons.amount = new ExpantaNum(0); player.elementary.hc.hadrons = new ExpantaNum(0); @@ -158,6 +159,7 @@ function setupSkyField(type) { 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; } @@ -166,9 +168,21 @@ function getFieldUpgCost(type, 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; @@ -191,4 +205,17 @@ function respecField(type) { 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) { + if (!player.elementary.entropy.upgrades.includes(20)) 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) + let bulk = targ.sub(player.elementary.sky[type].field[i]||0) + if (bulk.lt(1)) return; + player.elementary.sky[type].field[i] = ExpantaNum.add(player.elementary.sky[type].field[i], bulk).max(0) + } } \ No newline at end of file diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 2170c63a..13a48744 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -147,6 +147,7 @@ function getStringEff(n) { 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(5) && n==2) finalExp = finalExp.plus(TREE_UPGS[14].effect(ettu[14]||0)) @@ -227,18 +228,51 @@ function getTBCost() { return cost } -function getTBGain() { - let ret = player.elementary.theory.preons.boosters.plus(1) - return ret +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 (targ.gte(4)) targ = targ.times(4).sqrt() + return targ.plus(1).floor(); } -function theoryBoost() { +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 (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()) - player.elementary.theory.points = player.elementary.theory.points.plus(getTBGain()) - player.elementary.theory.preons.boosters = player.elementary.theory.preons.boosters.plus(1) + 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 @@ -357,6 +391,7 @@ function getInflatonGain() { 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 } diff --git a/js/main/elements.js b/js/main/elements.js index 4f844318..cd30e843 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1221,10 +1221,11 @@ function updateMiscHTML(){ 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.loading.setDisplay(false) - tmp.el.footer.setDisplay(player.tab == "options" && player.optionsTab !== "saving"); + tmp.el.footer.setDisplay(player.tab == "options"); tmp.el.newsticker.setDisplay(player.options.newst); tmp.el.hotkeys.setAttr("widetooltip", "R -> Rank Reset\n"+ @@ -1244,7 +1245,8 @@ 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":"") ); } @@ -1355,6 +1357,7 @@ function updateSkyHTML() { 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)) @@ -1367,6 +1370,7 @@ function updateSkyHTML() { 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)) } } } diff --git a/js/main/extreme/fn.js b/js/main/extreme/fn.js index e1372758..bbaea0f1 100644 --- a/js/main/extreme/fn.js +++ b/js/main/extreme/fn.js @@ -20,7 +20,7 @@ function updateCoalGain(){ function updateFuranceUpgradeActualCost(n){ let data = tmp.fn.upgs[n] - let nAmt = player.furnace.upgrades[n - 1].max(data.bulk) + let nAmt = new ExpantaNum(player.furnace.upgrades[n - 1]).max(data.bulk) let start3 = getScalingStart("hyper", "fn"); let power3 = getScalingPower("hyper", "fn"); @@ -34,7 +34,7 @@ function updateFuranceUpgradeActualCost(n){ let initBaseCost = scalingActive("fn", nAmt, "hyper") ? ExpantaNum.pow(base3, player.furnace.upgrades[n - 1].sub(start3)).times(start3) : - player.furnace.upgrades[n - 1] + new ExpantaNum(player.furnace.upgrades[n - 1]) data.cost = ExpantaNum.pow( data.base.div(10), diff --git a/js/main/options.js b/js/main/options.js index 0c3f7469..08f437ec 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -120,12 +120,12 @@ function setDropdown(dropdown, els, load=false) { html += el.info + "
    "; for (let x = 1; x <= el.buttons; x++) html += - " "; - } else html += ""; + } else html += ""; if (load) html += "

    "; } dropdown.setHTML(html + "
    "); diff --git a/js/update.js b/js/update.js index 25b927e8..8802a2d3 100644 --- a/js/update.js +++ b/js/update.js @@ -123,7 +123,7 @@ function setupHTML() { autos += "
    " + + "' class='automator' style='border-color: "+AUTOMATOR_BORDER[Object.keys(AUTOMATORS)[i]]+";'>" + "" + @@ -139,7 +139,7 @@ function setupHTML() { autos += "

    " } } - autos += "

    "; + autos += "
    "; } au.setHTML(autos); for (let i = 0; i < Object.keys(player.automators).length; i++) { @@ -361,7 +361,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() diff --git a/main.html b/main.html index 944492f4..e9aa461e 100644 --- a/main.html +++ b/main.html @@ -179,96 +179,61 @@ @@ -285,7 +250,7 @@ href="key.html" target="_blank" >Distances        Hotkeys + >        Hotkeys     Discord @@ -743,7 +708,7 @@
    -
    +





    diff --git a/style.css b/style.css index 9a1e6aab..465609ce 100644 --- a/style.css +++ b/style.css @@ -7,6 +7,7 @@ --threeArrows: url("images/threeArrows.jpg"); --font: Courier; --news-right-start: -10%; + --foamcol: #d3e8cc; } * { @@ -20,8 +21,7 @@ outline: none; } -*:not(span), -*:not(div) { +*:not(span) *:not(div) *:not(label) { color: var(--plaintxt); } @@ -449,21 +449,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 +485,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 +501,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%); @@ -765,7 +784,7 @@ table { } #automator { - background-color: #a8a8a8; + background-color: #cccccc; } .btn.perk { @@ -1508,13 +1527,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 +1622,7 @@ table { } .foamtxt { - color: #d3e8cc; + color: var(--foamcol); font-size: 20px; } @@ -1712,6 +1727,37 @@ table { 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; +} + +.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; +} + @keyframes grosstxt { 0% { color: #176648; From 8052c33e633b7c949ad603459a9b47e9a39579b7 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 11 Oct 2020 23:17:18 -0400 Subject: [PATCH 008/116] v1.9 Beta 5 --- changelog.html | 1 + js/constants/tabs.js | 6 ++++ js/functions/formatting.js | 30 ++++++++++--------- js/functions/misc.js | 4 +-- js/functions/tabs.js | 27 +++++++++++++++++ js/game.js | 2 ++ js/main/elementary/bosons.js | 10 +++---- js/main/elements.js | 33 +++++++++++++++----- js/main/options.js | 4 ++- js/notations.js | 14 ++++----- js/update.js | 19 ++++++++++++ main.html | 58 ++++++++++++++++++++++++++++-------- style.css | 20 +++++++++++-- 13 files changed, 176 insertions(+), 52 deletions(-) diff --git a/changelog.html b/changelog.html index 70f139c8..1183ac7e 100644 --- a/changelog.html +++ b/changelog.html @@ -162,6 +162,7 @@
    • Implemented Skyrmions
    • Made automators/options look better
    • +
    • Added some more statistics stuff
    • Squished some more bugs
    diff --git a/js/constants/tabs.js b/js/constants/tabs.js index c6c00963..fde48391 100644 --- a/js/constants/tabs.js +++ b/js/constants/tabs.js @@ -42,3 +42,9 @@ const TABBTN_SHOWN = { return (tmp.elm ? tmp.elm.can : false) || player.elementary.times.gt(0); } }; + +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/formatting.js b/js/functions/formatting.js index 3363e113..6ab3e153 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -6,15 +6,15 @@ function disp(val, places, locs, base) { 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); + 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, 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); + 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; } @@ -27,14 +27,16 @@ 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 (orig*Math.pow(10, digits-1)==Math.round(orig*Math.pow(10, digits-1)) && result[result.length-1]=="0" && result.includes(".")) 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); + } 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 +46,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 (value2") - 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;i 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.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))+", " diff --git a/js/notations.js b/js/notations.js index 09bb2d72..f4317ca0 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()] diff --git a/js/update.js b/js/update.js index 8802a2d3..da9ec416 100644 --- a/js/update.js +++ b/js/update.js @@ -41,6 +41,25 @@ function setupHTML() { table += ""; } achTable.setHTML(table); + + // Rank/Tier Stats + let rankTable = new Element("rankStats") + table = "
    " + for (let i=0;i" + table += "Rank "+showNum(parseInt(ranks)+1)+": "+RANK_DESCS[ranks] + table += "
    " + } + table += "
    " + for (let i=0;i" + table += "Tier "+showNum(parseInt(tiers)+1)+": "+TIER_DESCS[tiers] + table += "
    " + } + table += "" + rankTable.setHTML(table) // Time Reversal Upgrade Table let trTable = new Element("trTable"); diff --git a/main.html b/main.html index e9aa461e..81b353ab 100644 --- a/main.html +++ b/main.html @@ -250,22 +250,54 @@ href="key.html" target="_blank" >Distances        Hotkeys -     Discord + >    Hotkeys +     Discord    Donate
    " for (let i=0;i" - table += "Tier "+showNum(parseInt(tiers)+1)+": "+TIER_DESCS[tiers] + 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 += "" diff --git a/main.html b/main.html index 81b353ab..d906782f 100644 --- a/main.html +++ b/main.html @@ -74,6 +74,7 @@ Elementary +
    @@ -1964,6 +1965,7 @@


      

    +   






    + @@ -2029,6 +2040,7 @@ + From 7b4a8fe4a990e12e989ebadb14e3c099d2d7afca Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 12 Oct 2020 15:25:36 -0400 Subject: [PATCH 010/116] v1.9 Beta 6 Patch 1 --- js/main/inf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/main/inf.js b/js/main/inf.js index 4fef3394..49105338 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -281,7 +281,7 @@ function updateTempInfLayer() { }; if (!tmp.inf.doGain) tmp.inf.doGain = function () { let fcb = tmp.inf.layer.fcBulk - if (player.inf.endorsements.lt(10)) fcb = fcb.max(1); + if (player.inf.endorsements.lt(10)) fcb = fcb.max(player.inf.endorsements.plus(1)); let mag = new ExpantaNum(1); let m = player.inf.endorsements.plus(mag).min(fcb).floor(); player.inf.endorsements = player.inf.endorsements.max(m); From 2984669423ca0563ec9a5cda17d26c8feb4383ac Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 12 Oct 2020 15:43:17 -0400 Subject: [PATCH 011/116] v1.9 Beta 6 Patch 2 --- js/classes/Layer.js | 2 +- js/constants/news.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/js/classes/Layer.js b/js/classes/Layer.js index dd1b38a4..deaa342d 100644 --- a/js/classes/Layer.js +++ b/js/classes/Layer.js @@ -37,7 +37,7 @@ 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.name === "infinity" && player.inf.endorsements.lte(10) && infActive)) || this.gain.lt(1)) return; + if (!this.avail || 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); diff --git a/js/constants/news.js b/js/constants/news.js index 04c6a334..27e25170 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -84,6 +84,8 @@ const NEWS_DATA = { m82: ["This game is brought to you by Jacorb, the incremental game dev who has no idea what he's doing"], m83: ["In an alternate universe, all the (softcapped) are replaced with (obscured), the scalings have no names, and Distance Incremental has weeklong timewalls."], m84: ["I wonder if you can escape the multiverse..."], + m85: ['"Darn it, I have to restart my lore because we are not even at the thing after multiverse!" -CRG'], + m86: ['"Canada does not exist..." -Him'], // Distance-based Conditions d1: [ @@ -456,6 +458,10 @@ const NEWS_DATA = { "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) }, + ], }; const NEWS_ADJ = 110; From eafe5a86d94720d027d871217a0075ffe129f084 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 12 Oct 2020 21:01:02 -0400 Subject: [PATCH 012/116] v1.9 Release Prep --- js/classes/Layer.js | 5 +++-- js/constants/modes.js | 4 ++-- js/constants/news.js | 2 ++ js/game.js | 2 +- js/main/elementary/theory.js | 1 - key.html | 1 + 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/js/classes/Layer.js b/js/classes/Layer.js index deaa342d..e09b3b4d 100644 --- a/js/classes/Layer.js +++ b/js/classes/Layer.js @@ -37,7 +37,7 @@ 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); @@ -55,7 +55,8 @@ class Layer { modeLoad(LAYER_RESETS_EXTRA[this.name]); if (tmp[this.tName]) if (tmp[this.tName].onReset !== undefined) tmp[this.tName].onReset(prev) if (this.name!="rf"&&modeActive("hikers_dream")) calcInclines(); - needUpdate = true + updateBeforeTick(); + updateAfterTick(); } bulk(mag = new ExpantaNum(1)) { diff --git a/js/constants/modes.js b/js/constants/modes.js index d55b16f7..f30892ed 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -161,8 +161,8 @@ 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 - fu = [ + let fu = source.furnace.upgrades; + source.furnace.upgrades = [ new ExpantaNum(fu[0]), new ExpantaNum(fu[1]), new ExpantaNum(fu[2]), diff --git a/js/constants/news.js b/js/constants/news.js index 27e25170..6dac3ba5 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -86,6 +86,8 @@ const NEWS_DATA = { m84: ["I wonder if you can escape the multiverse..."], m85: ['"Darn it, I have to restart my lore because we are not even at the thing after multiverse!" -CRG'], m86: ['"Canada does not exist..." -Him'], + m87: ["Jacorb only created Hiker's Dream because he doesn't exercise."], + m88: ["You may have noticed that there's a donate button. If you didn't, well you have noticed now!"], // Distance-based Conditions d1: [ diff --git a/js/game.js b/js/game.js index c07b8708..1206a06a 100644 --- a/js/game.js +++ b/js/game.js @@ -31,7 +31,7 @@ var gluonTab = "r"; var thTab = "tv"; var enTab = "mainEN"; var autoRobotTarget = 0 -var betaID = "beta1.9"; +var betaID = ""; // beta1.9 var checkForBetas = {"beta1.9": 1.9, "beta1.8": 1.8} var needUpdate = true var updating = false diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 0eec58d1..f5ef98ac 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -121,7 +121,6 @@ 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) diff --git a/key.html b/key.html index ebf021bb..fcf0afce 100644 --- a/key.html +++ b/key.html @@ -18,5 +18,6 @@
  • Mpc (megaparsec): 3.086e22 m
  • Gpc (gigaparsec): 3.086e25 m
  • uni (universe): 4.4e26 m
  • +
  • mlt (multiverse): e1e9 uni
  • From 523a1f2d68a82a7662ec4012e2c2693b86be90ae Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 12 Oct 2020 21:21:25 -0400 Subject: [PATCH 013/116] v1.9 Patch 1 - Got rid of the check for beta button for reasons --- js/game.js | 1 - js/main/options.js | 18 ------------------ main.html | 4 ---- 3 files changed, 23 deletions(-) diff --git a/js/game.js b/js/game.js index 1206a06a..e13ebb6c 100644 --- a/js/game.js +++ b/js/game.js @@ -32,7 +32,6 @@ var thTab = "tv"; var enTab = "mainEN"; var autoRobotTarget = 0 var betaID = ""; // beta1.9 -var checkForBetas = {"beta1.9": 1.9, "beta1.8": 1.8} var needUpdate = true var updating = false var visUpdTicks = 1/0 diff --git a/js/main/options.js b/js/main/options.js index 64121b5a..250d57a5 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -71,24 +71,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"); diff --git a/main.html b/main.html index d906782f..0ee85377 100644 --- a/main.html +++ b/main.html @@ -229,10 +229,6 @@ -
    -

    From aebeb963a952d6e8eb2e5e3833b4b7966887fdba Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 13 Oct 2020 09:24:15 -0400 Subject: [PATCH 014/116] v1.9 Patch 2 --- js/main/extreme/fn.js | 306 +++++++++++++++++------------------ js/main/extreme/rankCheap.js | 160 +++++++++++------- js/main/ranks.js | 2 +- js/main/tiers.js | 2 +- 4 files changed, 253 insertions(+), 217 deletions(-) diff --git a/js/main/extreme/fn.js b/js/main/extreme/fn.js index bbaea0f1..73d2422f 100644 --- a/js/main/extreme/fn.js +++ b/js/main/extreme/fn.js @@ -18,63 +18,107 @@ function updateCoalGain(){ if (extremeStadiumActive("flamis", 5)) tmp.fn.gain = tmp.fn.gain.pow(0.2) } -function updateFuranceUpgradeActualCost(n){ - let data = tmp.fn.upgs[n] - let nAmt = new ExpantaNum(player.furnace.upgrades[n - 1]).max(data.bulk) - - let start3 = getScalingStart("hyper", "fn"); - let power3 = getScalingPower("hyper", "fn"); - let base3 = ExpantaNum.pow(1.1, power3); - let start2 = getScalingStart("superscaled", "fn"); - let power2 = scalingActive("fn", nAmt, "superscaled") ? getScalingPower("superscaled", "fn") : 0; - let exp2 = ExpantaNum.pow(3, power2); - let start = getScalingStart("scaled", "fn"); - let power = scalingActive("fn", nAmt, "scaled") ? getScalingPower("scaled", "fn") : 0; - let exp = ExpantaNum.pow(2, power); - - let initBaseCost = scalingActive("fn", nAmt, "hyper") ? - ExpantaNum.pow(base3, player.furnace.upgrades[n - 1].sub(start3)).times(start3) : - new ExpantaNum(player.furnace.upgrades[n - 1]) - - data.cost = ExpantaNum.pow( - data.base.div(10), - initBaseCost.pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .pow(tmp.fn.bfEff.times(2)) - ).times(data.base); - - let starting = player.furnace.coal - .div(data.base) - .logBase(data.base.div(10)) +function updateFurnaceUpgradeCosts(){ + for (let n = 1; n <= 5; n++) { + tmp.fn.upgs[n].cost = ExpantaNum.pow( + tmp.fn.upgs[n].base.div(10), + player.furnace.upgrades[n - 1].pow(tmp.fn.bfEff.times(2)) + ).times(tmp.fn.upgs[n].base); + tmp.fn.upgs[n].bulk = player.furnace.coal + .div(tmp.fn.upgs[n].base) + .logBase(tmp.fn.upgs[n].base.div(10)) .pow(tmp.fn.bfEff.times(2).pow(-1)) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .times(start2.pow(exp.sub(1))) - .pow(exp2.pow(-1)) - .div(scalingActive("fn", nAmt, "hyper") ? start3 : 1) - .max(1) - if (scalingActive("fn", nAmt, "hyper")){ - data.bulk = starting - .logBase(base3) - .plus(start3) .plus(1) .floor(); - } else data.bulk = starting.plus(1).floor() -} - -function updateFurnaceUpgradeCosts(){ - for (let n = 1; n <= 5; n++) { - let data = tmp.fn.upgs[n] - updateFuranceUpgradeActualCost(n) - if (!data.buy) data.buy = function () { + if (scalingActive("fn", player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk), "scaled")) { + let start = getScalingStart("scaled", "fn") + let power = getScalingPower("scaled", "fn") + let exp = ExpantaNum.pow(2, power); + tmp.fn.upgs[n].cost = ExpantaNum.pow( + tmp.fn.upgs[n].base.div(10), + player.furnace.upgrades[n - 1] + .pow(exp) + .div(start.pow(exp.sub(1))) + .pow(tmp.fn.bfEff.times(2)) + ).times(tmp.fn.upgs[n].base); + tmp.fn.upgs[n].bulk = player.furnace.coal + .div(tmp.fn.upgs[n].base) + .logBase(tmp.fn.upgs[n].base.div(10)) + .pow(tmp.fn.bfEff.times(2).pow(-1)) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .plus(1) + .floor(); + } + if (scalingActive("fn", player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk), "superscaled")) { + let start2 = getScalingStart("superscaled", "fn"); + let power2 = getScalingPower("superscaled", "fn"); + let exp2 = ExpantaNum.pow(3, power2); + let start = getScalingStart("scaled", "fn"); + let power = getScalingPower("scaled", "fn"); + let exp = ExpantaNum.pow(2, power); + tmp.fn.upgs[n].cost = ExpantaNum.pow( + tmp.fn.upgs[n].base.div(10), + player.furnace.upgrades[n - 1] + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .pow(tmp.fn.bfEff.times(2)) + ).times(tmp.fn.upgs[n].base); + tmp.fn.upgs[n].bulk = player.furnace.coal + .div(tmp.fn.upgs[n].base) + .logBase(tmp.fn.upgs[n].base.div(10)) + .pow(tmp.fn.bfEff.times(2).pow(-1)) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .times(start2.pow(exp.sub(1))) + .pow(exp2.pow(-1)) + .plus(1) + .floor(); + } + if (scalingActive("fn", player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk), "hyper")) { + let start3 = getScalingStart("hyper", "fn"); + let power3 = getScalingPower("hyper", "fn"); + let base3 = ExpantaNum.pow(1.1, power3); + let start2 = getScalingStart("superscaled", "fn"); + let power2 = getScalingPower("superscaled", "fn"); + let exp2 = ExpantaNum.pow(3, power2); + let start = getScalingStart("scaled", "fn"); + let power = getScalingPower("scaled", "fn"); + let exp = ExpantaNum.pow(2, power); + tmp.fn.upgs[n].cost = ExpantaNum.pow( + tmp.fn.upgs[n].base.div(10), + ExpantaNum.pow(base3, player.furnace.upgrades[n - 1].sub(start3)) + .times(start3) + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .pow(tmp.fn.bfEff.times(2)) + ).times(tmp.fn.upgs[n].base); + tmp.fn.upgs[n].bulk = player.furnace.coal + .div(tmp.fn.upgs[n].base) + .logBase(tmp.fn.upgs[n].base.div(10)) + .pow(tmp.fn.bfEff.times(2).pow(-1)) + .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) + .plus(start3) + .plus(1) + .floor(); + } + if (!tmp.fn.upgs[n].buy) tmp.fn.upgs[n].buy = function () { if (player.furnace.coal.lt(tmp.fn.upgs[n].cost)) return; player.furnace.coal = player.furnace.coal.sub(tmp.fn.upgs[n].cost); player.furnace.upgrades[n - 1] = player.furnace.upgrades[n - 1].plus(1); updateFurnaceUpgradeCosts(); }; - if (!data.max) data.max = function () { + if (!tmp.fn.upgs[n].max) tmp.fn.upgs[n].max = function () { if (player.furnace.coal.lt(tmp.fn.upgs[n].cost)) return; if (tmp.fn.upgs[n].bulk.floor().lte(player.furnace.upgrades[n - 1])) player.furnace.upgrades[n - 1] = player.furnace.upgrades[n - 1].plus(1); player.furnace.upgrades[n - 1] = player.furnace.upgrades[n - 1].max(tmp.fn.upgs[n].bulk.floor()); @@ -82,11 +126,8 @@ function updateFurnaceUpgradeCosts(){ } } -function calcBlueFlameEfficiency(){ - if (inFC(1)) { - tmp.fn.bfEff = new ExpantaNum(1) - return - } +function updateTempFurnace() { + if (!tmp.fn) tmp.fn = {}; let adj = new ExpantaNum(1); if (player.tr.upgrades.includes(17) && !HCCBA("noTRU") && modeActive("extreme")) adj = adj.times(player.tr.cubes.plus(1).times(10).slog(10)); @@ -96,13 +137,7 @@ function calcBlueFlameEfficiency(){ if (extremeStadiumActive("quantron", 2)) adj = adj.times(0.95) tmp.fn.bfEff = ExpantaNum.div(1, player.furnace.blueFlame.plus(tmp.fn.enh?tmp.fn.enh.eff:0).times(adj).div(4).plus(1)); if (tmp.fn.bfEff.lt(0.0098)) tmp.fn.bfEff = tmp.fn.bfEff.sqrt().times(Math.sqrt(0.0098)); -} - -function calcFN4Base(){ - if (extremeStadiumActive("flamis", 4) || extremeStadiumActive("nullum", 5) || extremeStadiumActive("quantron", 3)) { - tmp.fn4base = new ExpantaNum(0); - return - } + if (inFC(1)) tmp.fn.bfEff = new ExpantaNum(1) tmp.fn4base = new ExpantaNum(0.15) if (FCComp(5)) tmp.fn4base = tmp.fn4base.plus(ExpantaNum.mul(0.0001, player.furnace.upgrades[0])) if (tmp.fn.enh) if (tmp.fn.enh.unl) tmp.fn4base = tmp.fn4base.plus(ExpantaNum.mul(tmp.fn.enh.upg3eff?tmp.fn.enh.upg3eff:0, player.furnace.enhancedUpgrades[2].plus(tmp.fn.enh.upgs[3].extra))) @@ -110,23 +145,24 @@ function calcFN4Base(){ if (player.tr.upgrades.includes(35)&&!HCCBA("noTRU")) tmp.fn4base = tmp.fn4base.plus(1).sqrt().sub(1) else tmp.fn4base = new ExpantaNum(0) } -} - -function calcFN1Base(){ + if (extremeStadiumActive("flamis", 4) || extremeStadiumActive("nullum", 5) || extremeStadiumActive("quantron", 3)) tmp.fn4base = new ExpantaNum(0); tmp.fn1base = inFC(4)?1:(new ExpantaNum(FCComp(2)?28:3).plus(ExpantaNum.mul(tmp.fn4base, player.furnace.upgrades[3]))) if (extremeStadiumActive("quantron", 4)) tmp.fn1base = tmp.fn1base.sqrt(); -} - -function calcFurnaceUpgradeEffeciency(){ + updateCoalGain() tmp.fn.eff = player.furnace.coal.plus(1).log10().pow(0.6).div(5); if (tmp.fn.eff.gte(1)) tmp.fn.eff = tmp.fn.eff.log10().plus(1); if (tmp.ach[35].has) tmp.fn.eff = tmp.fn.eff.times(2); if (player.tr.upgrades.includes(25) && !HCCBA("noTRU")) tmp.fn.eff = tmp.fn.eff.times(2); if (player.tr.upgrades.includes(31) && !HCCBA("noTRU")) tmp.fn.eff = tmp.fn.eff.times(1.8); if (extremeStadiumActive("spectra", 2)) tmp.fn.eff = new ExpantaNum(0) -} - -function updateBlueFlameCost(){ + tmp.fn.upgs = { + 1: { base: new ExpantaNum(20) }, + 2: { base: new ExpantaNum(100) }, + 3: { base: new ExpantaNum(1.5e3) }, + 4: { base: new ExpantaNum(1e100) }, + 5: { base: new ExpantaNum("1e1000") }, + }; + updateFurnaceUpgradeCosts() tmp.fn.bfBase = inFC(4)?3.618:2 tmp.fn.bfLB = inFC(4)?160:10 tmp.fn.bfReq = ExpantaNum.pow(tmp.fn.bfLB, ExpantaNum.pow(tmp.fn.bfBase, player.furnace.blueFlame).sub(1)).times(1e6); @@ -145,31 +181,15 @@ function updateBlueFlameCost(){ player.furnace.blueFlame = player.furnace.blueFlame.plus(1); updateFurnaceUpgradeCosts(); }; -} - -function setFurnaceBaseCosts(){ - tmp.fn.upgs = { - 1: { base: new ExpantaNum(20) }, - 2: { base: new ExpantaNum(100) }, - 3: { base: new ExpantaNum(1.5e3) }, - 4: { base: new ExpantaNum(1e100) }, - 5: { base: new ExpantaNum("1e1000") }, - }; -} - -function calcECoalGain(){ + updateFNTabs(); + if (!tmp.fn.enh) tmp.fn.enh = {} + tmp.fn.enh.unl = tmp.ach[111].has tmp.fn.enh.gain = ExpantaNum.pow(1.1, tmp.fn.enh.unl?player.furnace.blueFlame:0).sub(1).times(ExpantaNum.pow(tmp.fn.enh.upg1eff?tmp.fn.enh.upg1eff:1, player.furnace.enhancedUpgrades[0].plus(tmp.fn.enh.upgs?tmp.fn.enh.upgs[1].extra:0))) if (tmp.ach[116].has) tmp.fn.enh.gain = tmp.fn.enh.gain.times(ExpantaNum.pow(1.4, player.inf.pantheon.purge.power)) if ((tmp.fn.enh.moltBr||new ExpantaNum(0)).gte(1)) tmp.fn.enh.gain = tmp.fn.enh.gain.times(tmp.fn.enh.moltBrEff||1) -} - -function calcEFEffeciency(){ tmp.fn.enh.eff = tmp.fn.enh.unl?(player.furnace.enhancedCoal.plus(1).log10().plus(1).log10().plus(1).log10().times(5)):new ExpantaNum(0) tmp.fn.enh.eff2exp = ExpantaNum.mul(player.furnace.enhancedUpgrades[12], tmp.fn.enh.upg13eff?tmp.fn.enh.upg13eff:0).plus(100) tmp.fn.enh.eff2 = tmp.fn.enh.unl?player.furnace.enhancedCoal.plus(1).pow(tmp.fn.enh.eff2exp):new ExpantaNum(1) -} - -function setEFurnaceBaseCosts(){ if (!tmp.fn.enh.upgs) tmp.fn.enh.upgs = { 1: { base: new ExpantaNum(100) }, 2: { base: new ExpantaNum(250) }, @@ -186,52 +206,36 @@ function setEFurnaceBaseCosts(){ 13: { base: new ExpantaNum(1e40) }, }; tmp.fn.enh.upgs[13].costAdj = new ExpantaNum(0.75) -} - -function updateEFuranceUpgradeActualCost(n){ - let nAmt = player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk) - - let start = getScalingStart("scaled", "efn") - let power = scalingActive("efn", nAmt, "scaled") ? getScalingPower("scaled", "efn") : 0 - 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(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)) - .plus(1) - .floor(); -} - -function updatePost25EndorseEx(){ - 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) - tmp.fn.enh.upg13eff = ExpantaNum.add(60, endMod.div(3).floor().times(10).min(10)) -} - -function updateMoltenBricks(){ - 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) -} - -function updateEFurnanceUpgradeCosts(){ for (let n = 1; n <= 13; n++) { - updateEFuranceUpgradeActualCost(n) + 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] + ).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)) + .plus(1) + .floor(); 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)):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]) + if (n<13) tmp.fn.enh.upgs[n].extra = tmp.fn.enh.upgs[n].extra.plus(player.furnace.enhancedUpgrades[12]) + 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") + 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(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)) + .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); @@ -244,31 +248,17 @@ function updateEFurnanceUpgradeCosts(){ player.furnace.enhancedUpgrades[n - 1] = player.furnace.enhancedUpgrades[n - 1].max(tmp.fn.enh.upgs[n].bulk.floor()); }; } -} - -function updateTempFurnace() { - if (!tmp.fn) tmp.fn = {}; - - calcBlueFlameEfficiency() - calcFN4Base() - calcFN1Base() - updateCoalGain() - calcFurnaceUpgradeEffeciency() - setFurnaceBaseCosts() - updateFurnaceUpgradeCosts() - updateBlueFlameCost() - - - updateFNTabs(); - if (!tmp.fn.enh) tmp.fn.enh = {} - - tmp.fn.enh.unl = tmp.ach[111].has - calcECoalGain() - calcEFEffeciency() - setEFurnaceBaseCosts() - updateEFurnanceUpgradeCosts() - updatePost25EndorseEx() - updateMoltenBricks() + 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) + 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) } function startFurnChall(x) { diff --git a/js/main/extreme/rankCheap.js b/js/main/extreme/rankCheap.js index e297efec..0bc6a188 100644 --- a/js/main/extreme/rankCheap.js +++ b/js/main/extreme/rankCheap.js @@ -20,83 +20,129 @@ function updateTempRankCheapCost(){ tmp.rankCheap.fp = new ExpantaNum(1); if (extremeStadiumComplete("spectra")) tmp.rankCheap.fp = tmp.rankCheap.fp.times(EXTREME_STADIUM_DATA.spectra.effect()) tmp.rankCheap.bc = new ExpantaNum(30); - - let nAmt = player.rankCheap.max(tmp.rankCheap.bulk) - + tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( + ExpantaNum.pow(2, player.rankCheap.div(tmp.rankCheap.fp).max(1).sub(1).pow(2)) + ); + tmp.rankCheap.bulk = player.distance + .div(tmp.rankCheap.bc) + .logBase(2) + .sqrt() + .plus(1) + .times(tmp.rankCheap.fp) + .plus(1) + .round(); let start = getScalingStart("scaled", "rankCheap"); - let power = scalingActive("rankCheap", nAmt, "scaled") ? getScalingPower("scaled", "rankCheap") : 0 + let power = getScalingPower("scaled", "rankCheap"); let exp = ExpantaNum.pow(2, power); + if (scalingActive("rankCheap", player.rankCheap.max(tmp.rankCheap.bulk), "scaled")) { + tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( + ExpantaNum.pow( + 2, + player.rankCheap + .pow(exp) + .div(start.pow(exp.sub(1))) + .div(tmp.rankCheap.fp) + .sub(1) + .pow(2) + ) + ); + tmp.rankCheap.bulk = player.distance + .div(tmp.rankCheap.bc) + .max(1) + .logBase(2) + .sqrt() + .plus(1) + .times(tmp.rankCheap.fp) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .plus(1) + .floor(); + } let start2 = getScalingStart("superscaled", "rankCheap"); - let power2 = scalingActive("rankCheap", nAmt, "superscaled") ? getScalingPower("superscaled", "rankCheap") : 0 + let power2 = getScalingPower("superscaled", "rankCheap"); let exp2 = ExpantaNum.pow(3, power2); + if (scalingActive("rankCheap", player.rankCheap.max(tmp.rankCheap.bulk), "superscaled")) { + tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( + ExpantaNum.pow( + 2, + player.rankCheap + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .div(tmp.rankCheap.fp) + .sub(1) + .pow(2) + ) + ); + tmp.rankCheap.bulk = player.distance + .div(tmp.rankCheap.bc) + .max(1) + .logBase(2) + .sqrt() + .plus(1) + .times(tmp.rankCheap.fp) + .times(start.pow(exp.sub(1))) + .pow(exp.pow(-1)) + .times(start2.pow(exp2.sub(1))) + .pow(exp2.pow(-1)) + .add(1) + .floor(); + } let start3 = getScalingStart("hyper", "rankCheap"); let power3 = getScalingPower("hyper", "rankCheap"); let base3 = ExpantaNum.pow(1.01, power3); - - - let starting - if (scalingActive("rankCheap", nAmt, "hyper")) { - starting = ExpantaNum.pow(base3, player.rankCheap.sub(start3)).times(start3) - } else starting = player.rankCheap - - tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( - ExpantaNum.pow( - 2, - starting - .pow(exp2) - .div(start2.pow(exp2.sub(1))) - .pow(exp) - .div(start.pow(exp.sub(1))) - .div(tmp.rankCheap.fp) - .sub(1) - .pow(2) - ) - ); - if (player.distance.lt(tmp.rankCheap.bc)) tmp.rankCheap.bulk = new ExpantaNum(0) - else { - let starting2 = player.distance - .div(tmp.rankCheap.bc) - .max(1) - .logBase(2) - .sqrt() - .plus(1) - .times(tmp.rankCheap.fp) - .times(start.pow(exp.sub(1))) - .pow(exp.pow(-1)) - .times(start2.pow(exp2.sub(1))) - .pow(exp2.pow(-1)) - if (scalingActive("rankCheap", nAmt, "hyper")) { - starting2 = starting2.div(start3).max(1).logBase(base3).add(start3) - } - tmp.rankCheap.bulk = starting2.plus(1).floor(); + if (scalingActive("rankCheap", player.rankCheap.max(tmp.rankCheap.bulk), "hyper")) { + tmp.rankCheap.req = new ExpantaNum(tmp.rankCheap.bc).times( + ExpantaNum.pow( + 2, + ExpantaNum.pow(base3, player.rankCheap.sub(start3)) + .times(start3) + .pow(exp2) + .div(start2.pow(exp2.sub(1))) + .pow(exp) + .div(start.pow(exp.sub(1))) + .div(tmp.rankCheap.fp) + .sub(1) + .pow(2) + ) + ); + tmp.rankCheap.bulk = player.distance + .div(tmp.rankCheap.bc) + .max(1) + .logBase(2) + .sqrt() + .plus(1) + .times(tmp.rankCheap.fp) + .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) + .floor(); } } -function updateFreeRankCheapeners(){ +function updateTempRankCheap() { + if (!tmp.rankCheap) tmp.rankCheap = {}; 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 (extremeStadiumActive("cranius", 2)) tmp.rankCheap.free = tmp.rankCheap.free.div(10).floor(); -} - -function updateRankCheapenerEffeciency(){ + updateTempRankCheapCost() + tmp.rankCheap.can = player.distance.gte(tmp.rankCheap.req); + tmp.rankCheap.layer = new Layer("rankCheap", tmp.rankCheap.can, "semi-forced"); tmp.rankCheap.pow = new ExpantaNum(1); if (tmp.ach[12].has) tmp.rankCheap.pow = tmp.rankCheap.pow.plus(ExpantaNum.mul(0.5, player.achievements.length)); 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))) -} - -function updateTempRankCheap() { - if (!tmp.rankCheap) tmp.rankCheap = {}; - updateFreeRankCheapeners() - updateTempRankCheapCost() - tmp.rankCheap.can = player.distance.gte(tmp.rankCheap.req); - tmp.rankCheap.layer = new Layer("rankCheap", tmp.rankCheap.can, "semi-forced"); - updateRankCheapenerEffeciency() - tmp.rankCheap.eff = getRankCheapEff(); tmp.rankCheap.eff2 = getRankCheapEff2(); if (!tmp.rankCheap.onReset) tmp.rankCheap.onReset = function(prev) { @@ -106,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/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/tiers.js b/js/main/tiers.js index 85154bc5..40a99ca3 100644 --- a/js/main/tiers.js +++ b/js/main/tiers.js @@ -176,7 +176,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); From 3cc20d58c91534d84b48eb7f331049cb7115256b Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 13 Oct 2020 17:42:59 -0400 Subject: [PATCH 015/116] v1.91 Beta 1 --- js/constants/news.js | 1 + js/functions/formatting.js | 7 ++ js/game.js | 2 +- js/main/elementary/bosons.js | 7 +- js/main/elements.js | 133 ++++++++++++----------------------- js/update.js | 1 + main.html | 82 ++++++++++----------- 7 files changed, 102 insertions(+), 131 deletions(-) diff --git a/js/constants/news.js b/js/constants/news.js index 6dac3ba5..5a5a986b 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -88,6 +88,7 @@ const NEWS_DATA = { m86: ['"Canada does not exist..." -Him'], m87: ["Jacorb only created Hiker's Dream because he doesn't exercise."], m88: ["You may have noticed that there's a donate button. If you didn't, well you have noticed now!"], + m89: ["For all the tickers saying you are Canadian: Canadian or not, you are enjoying this game."], // Distance-based Conditions d1: [ diff --git a/js/functions/formatting.js b/js/functions/formatting.js index 93e3bc12..47c02920 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -107,3 +107,10 @@ function formatTime(x) { return showNum(x.div(val)) + " " + name; } } + +function formatGain(amt, gain, name, isDist) { + let trueGain = name?adjustGen(gain, name):gain + 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)" +} \ No newline at end of file diff --git a/js/game.js b/js/game.js index e13ebb6c..12744ae9 100644 --- a/js/game.js +++ b/js/game.js @@ -31,7 +31,7 @@ var gluonTab = "r"; var thTab = "tv"; var enTab = "mainEN"; var autoRobotTarget = 0 -var betaID = ""; // beta1.9 +var betaID = "beta1.91"; var needUpdate = true var updating = false var visUpdTicks = 1/0 diff --git a/js/main/elementary/bosons.js b/js/main/elementary/bosons.js index 45901def..38183e01 100644 --- a/js/main/elementary/bosons.js +++ b/js/main/elementary/bosons.js @@ -79,7 +79,7 @@ function updateTempPhotons(gaugeSpeed) { break; } } - player.elementary.bosons.gauge.photons.amount = new ExpantaNum( + if (!max) 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]||0).max(target) @@ -283,6 +283,11 @@ function getGravBoosts() { return g.plus(1).log10().sqrt().floor() } +function getNextGravBoost(boosts) { + if (!hasDE(4)) return new ExpantaNum(1/0) + return ExpantaNum.pow(10, boosts.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) diff --git a/js/main/elements.js b/js/main/elements.js index ceb98137..ac23bd98 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -33,17 +33,11 @@ function updateOptionsHTML(){ function updatePreRanksHTML(){ tmp.el.distance.setTxt( formatDistance(player.distance) + - " (+" + - formatDistance( - adjustGen(player.velocity, "dist").times(nerfActive("noTS") ? 1 : tmp.timeSpeed).times(modeActive("hikers_dream")?tmp.hd.enEff:1) - ) + - "/sec)" + " " + formatGain(player.distance, player.velocity.times(nerfActive("noTS") ? 1 : tmp.timeSpeed).times(modeActive("hikers_dream")?tmp.hd.enEff:1), "dist", true) ); tmp.el.velocity.setTxt( formatDistance(player.velocity.times(modeActive("hikers_dream")?tmp.hd.enEff:1)) + - "/s (+" + - formatDistance(adjustGen(tmp.acc, "vel").times(nerfActive("noTS") ? 1 : tmp.timeSpeed)) + - "/sec)" + "/s " + formatGain(player.velocity.times(modeActive("hikers_dream")?tmp.hd.enEff:1), tmp.acc.times(nerfActive("noTS") ? 1 : tmp.timeSpeed), "vel", true) ); tmp.el.maxVel.setTxt(formatDistance(tmp.maxVel)); tmp.el.acceleration.setTxt(formatDistance(tmp.acc)); @@ -87,12 +81,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())); @@ -135,21 +125,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); @@ -224,10 +204,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++) { @@ -261,12 +238,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())); @@ -278,12 +251,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]; @@ -327,8 +296,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() @@ -360,17 +329,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.times(tmp.dc.flow), "dc") + + "
    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.times(tmp.dc.flow), "dc") + "/s
    Effect: You gain " + showNum(tmp.dc.deEff) + "x as many Time Cubes." @@ -378,8 +347,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.times(tmp.dc.flow), "dc") + "/s
    Effect: Scaled Rocket Fuel scaling starts " + showNum(tmp.dc.dfEff) + " Rocket Fuel later." @@ -441,7 +410,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 = ""; @@ -500,9 +469,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."):"") } @@ -614,15 +581,11 @@ 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))) 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))) } @@ -632,9 +595,7 @@ function updateDerivativeHTML(){ let name = DERV[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( @@ -692,10 +653,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++) { @@ -734,11 +692,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)) @@ -900,13 +854,13 @@ function updateGaugeBosonsAmountHTML(){ tmp.el.gaugeAmt.setTxt(showNum(player.elementary.bosons.gauge.amount)); tmp.el.gaugeGain.setTxt(showNum(adjustGen(tmp.elm.bos.gaugeGain, "gauge"))); tmp.el.gaugeForce.setTxt(showNum(player.elementary.bosons.gauge.force)); - tmp.el.gaugeForceGain.setTxt(showNum(tmp.elm.bos.forceGain)); + tmp.el.gaugeForceGain.setTxt(formatGain(player.elementary.bosons.gauge.force, tmp.elm.bos.forceGain)); tmp.el.gaugeForceEff.setTxt(showNum(tmp.elm.bos.forceEff)); } function updatePhotonsHTML(){ tmp.el.photons.setTxt(showNum(player.elementary.bosons.gauge.photons.amount)); - tmp.el.photonGain.setTxt(showNum(adjustGen(tmp.elm.bos.photonGain, "gauge"))); + tmp.el.photonGain.setTxt(formatGain(player.elementary.bosons.gauge.photons.amount, tmp.elm.bos.photonGain, "gauge")); for (let i = 1; i <= PHOTON_UPGS; i++) { tmp.el["photon" + i].setClasses({ btn: true, @@ -921,11 +875,11 @@ function updatePhotonsHTML(){ function upadteWZBosonsHTML(){ tmp.el.w.setTxt(showNum(player.elementary.bosons.gauge.w)); - tmp.el.wg.setTxt(showNum(adjustGen(tmp.elm.bos.wg, "gauge"))); + tmp.el.wg.setTxt(formatGain(player.elementary.bosons.gauge.w, tmp.elm.bos.wg, "gauge")); tmp.el.w1.setTxt(showNum(tmp.elm.bos.w1)); tmp.el.w2.setTxt(showNum(tmp.elm.bos.w2)); tmp.el.z.setTxt(showNum(player.elementary.bosons.gauge.z)); - tmp.el.zg.setTxt(showNum(adjustGen(tmp.elm.bos.zg, "gauge"))); + tmp.el.zg.setTxt(formatGain(player.elementary.bosons.gauge.z, tmp.elm.bos.zg, "gauge")); tmp.el.z1.setTxt(showNum(tmp.elm.bos.z1)); tmp.el.z2.setTxt(showNum(tmp.elm.bos.z2)); } @@ -935,7 +889,7 @@ function updateGluonsHTML(){ let col = GLUON_COLOURS[i]; let amt = player.elementary.bosons.gauge.gluons[col].amount; tmp.el[col + "g"].setTxt(showNum(amt)); - tmp.el[col + "gg"].setTxt(showNum(adjustGen(tmp.elm.bos[col + "g"], "gauge"))); + tmp.el[col + "gg"].setTxt(formatGain(amt, tmp.elm.bos[col+"g"], "gauge")); tmp.el["glu"+col+"3"].setDisplay(hasDE(1)) for (let x = 1; x <= 3; x++) { tmp.el[col + "Upg" + x].setClasses({ @@ -954,10 +908,13 @@ function updateGluonsHTML(){ function updateGravitonsHTML(){ tmp.el.grav.setTxt(showNum(player.elementary.bosons.gauge.gravitons)); - tmp.el.gravGain.setTxt(showNum(adjustGen(tmp.elm.bos.gravGain, "gauge"))); + tmp.el.gravGain.setTxt(formatGain(player.elementary.bosons.gauge.gravitons, tmp.elm.bos.gravGain, "gauge")); tmp.el.gravMult.setTxt(showNum(tmp.elm.bos.gravEff)); tmp.el.gravBoostDiv.setDisplay(hasDE(4)) - tmp.el.gravBoosts.setTxt(showNum(getGravBoosts())); + let boosts = getGravBoosts(); + tmp.el.gravBoosts.setTxt(showNum(boosts)); + tmp.el.gravBoostNext.setTxt(showNum(getNextGravBoost(boosts))); + tmp.el.gravBoostEach.setTxt(showNum(getGravBoostBase())); tmp.el.gravBoostMult.setTxt(showNum(getGravBoostMult())); } @@ -966,7 +923,7 @@ function updateScalarBosonsHTML(){ tmp.el.scalarAmt.setTxt(showNum(player.elementary.bosons.scalar.amount)); tmp.el.scalarGain.setTxt(showNum(adjustGen(tmp.elm.bos.scalarGain, "scalar"))); tmp.el.higgs.setTxt(showNum(player.elementary.bosons.scalar.higgs.amount)) - tmp.el.higgsGain.setTxt(showNum(adjustGen(tmp.elm.bos.higgsGain, "scalar"))) + tmp.el.higgsGain.setTxt(formatGain(player.elementary.bosons.scalar.higgs.amount, tmp.elm.bos.higgsGain, "scalar")) for (let i=0;i1) 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]))) @@ -1062,7 +1019,7 @@ 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)) @@ -1149,7 +1106,7 @@ function updateHadronicChallenges(){ tmp.el.startHC.setTxt((!(!player.elementary.hc.active))?(canCompleteHC()?"Complete Hadronic Challenge!":"Exit Hadronic Challenge early for no reward"):"Start Hadronic Challenge") 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)) @@ -1298,7 +1255,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])) 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) @@ -1376,7 +1333,7 @@ function updateSkyHTML() { } 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(showNum(tmp.elm.sky.pionGain)) + tmp.el.pionGain.setTxt(formatGain(player.elementary.sky.pions.amount, tmp.elm.sky.pionGain)) for (let id=1;id<=SKY_FIELDS.upgs;id++) { tmp.el["pionUpg"+id].setClasses({ hexBtn: true, @@ -1389,7 +1346,7 @@ function updateSkyHTML() { } 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(showNum(tmp.elm.sky.spinorGain)) + tmp.el.spinorGain.setTxt(formatGain(player.elementary.sky.spinors.amount, tmp.elm.sky.spinorGain)) for (let id=1;id<=SKY_FIELDS.upgs;id++) { tmp.el["spinorUpg"+id].setClasses({ hexBtn: true, diff --git a/js/update.js b/js/update.js index 8d33390e..030c957c 100644 --- a/js/update.js +++ b/js/update.js @@ -373,6 +373,7 @@ document.onkeydown = function(e) { break; case 74: if (modeActive("hikers_dream")) refillEnergy() + break; case 80: if (shiftDown && INF_TABS.derivatives()) tmp.inf.pantheon.startPurge() else if (TABBTN_SHOWN.pathogens()) tmp.pathogens.maxAll() diff --git a/main.html b/main.html index 0ee85377..75198a00 100644 --- a/main.html +++ b/main.html @@ -871,7 +871,7 @@ Reach to be endorsed again.

    You have knowledge - (+/sec).

    + .





    @@ -1254,16 +1254,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)

    + >

    @@ -1303,17 +1303,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.

    @@ -1354,64 +1354,64 @@

    - 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: )
    + @@ -691,9 +692,15 @@ Your Enhanced Coal has granted you Molten Bricks, which boost Pathogen gain & Enhanced Coal gain by x, and boost Knowledge gain by x

    @@ -767,6 +767,7 @@ You have , translated to free rocket fuel

    +
    @@ -1685,7 +1690,7 @@
    - You are gaining Inflatons each second .
    + You are gaining Inflatons each second.
    You have Inflatons ()

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


    From d12afa90d0c8c8c1a51d4a4a70549a99ef79abfc Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:38:45 -0400 Subject: [PATCH 024/116] v1.91 Beta 8 --- js/classes/Layer.js | 1 + js/constants/elm.js | 8 ++++++++ js/constants/layers.js | 11 +++++++++++ js/main/elementary/foam.js | 11 ++++++++--- js/main/elementary/theory.js | 2 ++ js/main/nerfs.js | 3 ++- main.html | 3 +++ 7 files changed, 35 insertions(+), 4 deletions(-) diff --git a/js/classes/Layer.js b/js/classes/Layer.js index 9db1725b..d175943b 100644 --- a/js/classes/Layer.js +++ b/js/classes/Layer.js @@ -44,6 +44,7 @@ class Layer { 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++) player[LAYER_RESETS[this.name][i]] = diff --git a/js/constants/elm.js b/js/constants/elm.js index a170ecf1..d6cc0bdb 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -539,6 +539,14 @@ const TREE_UPGS = { 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" }, + }, } const TREE_AMT = Object.keys(TREE_UPGS).length diff --git a/js/constants/layers.js b/js/constants/layers.js index 50e57b13..3552f582 100644 --- a/js/constants/layers.js +++ b/js/constants/layers.js @@ -66,3 +66,14 @@ const LAYER_SC = { inf: new ExpantaNum(1 / 0), elementary: 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}, +} \ No newline at end of file diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index dcfb5470..ee7def57 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -81,14 +81,14 @@ function updateTempQuantumFoam() { updateTempEntropy(); } -function gainFoam(x, gain) { - player.elementary.foam.amounts[x] = ExpantaNum.add(player.elementary.foam.amounts[x], adjustGen(gain, "foam")).max(0) +function gainFoam(x, gain, adj=false) { + player.elementary.foam.amounts[x] = ExpantaNum.add(player.elementary.foam.amounts[x], adj?adjustGen(gain, "foam"):gain).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].times(diff)) + if (player.elementary.foam.maxDepth.gt(i)) gainFoam(i, tmp.elm.qf.gain[i+1].times(diff), true) for (let b=0;b<3;b++) if (player.elementary.foam.autoUnl[i*3+b]&&player.elementary.entropy.bestDepth.gte(i+3)) qfMax(i+1, b+1) } player.elementary.entropy.bestDepth = player.elementary.entropy.bestDepth.max(player.elementary.foam.maxDepth); @@ -116,6 +116,7 @@ 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))) @@ -126,6 +127,7 @@ 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] let targ = res.div(start).max(1).logBase(base).pow(exp.pow(-1)) @@ -160,11 +162,13 @@ function addToAllFoamBoosts() { 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)) data[i] = data[i].times(45).sqrt() } } return data @@ -230,6 +234,7 @@ function getEntropyEff() { let entropy = player.elementary.entropy.best; if (entropy.gte(3)) entropy = entropy.sqrt().times(Math.sqrt(3)) let eff = entropy.plus(1).pow(2.5); + if (modeActive("extreme")) eff = eff.sqrt(); if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.pow(tmp.elm.sky.spinorEff[9]) return eff; } diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index fe742d22..2565aadf 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -99,12 +99,14 @@ function updateTempTheoryTree() { 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.costReduc = ach152Eff() diff --git a/js/main/nerfs.js b/js/main/nerfs.js index 06410982..44b4b9af 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -173,10 +173,11 @@ function adjustGen(val, type) { if (extremeStadiumActive("spectra")) e = e.pow(2) exp = exp.times(e); } - if (modeActive("extreme") && post_elem && type!="scalar") exp = exp.times(.9) + if (modeActive("extreme") && post_elem && 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") && (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")&&newVal.gte(1e50)) newVal = newVal.times(1e150).pow(.25) 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/main.html b/main.html index 9460be17..eaa87b78 100644 --- a/main.html +++ b/main.html @@ -1648,6 +1648,9 @@ + + +





    From 18da09157ab630af03b5085ec4e945162aa7fb4e Mon Sep 17 00:00:00 2001 From: pg132 Date: Mon, 19 Oct 2020 14:53:15 -0700 Subject: [PATCH 025/116] v1.91 Beta 9 - Hikers Dream until TV at depth 0 complete --- js/constants/elm.js | 54 ++++++++++++++++++++++++++++++- js/functions/important.js | 1 + js/main/elementary/bosons.js | 8 ++++- js/main/elements.js | 8 ++++- js/main/hd.js | 63 ++++++++++++++++++++++++++++++------ js/main/inf.js | 1 + main.html | 4 +++ 7 files changed, 126 insertions(+), 13 deletions(-) diff --git a/js/constants/elm.js b/js/constants/elm.js index d6cc0bdb..a5863dbc 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -50,7 +50,49 @@ const PH_CST_SCLD = { const GLUON_COLOURS = ["r", "g", "b", "ar", "ag", "ab"]; const HIGGS_UPGS_EXTR_DESCS = { - "0;0;0": "Always keep TR Upgrades, the Pathogen Upgrade automator, the Dark Core automator, & Furnace Challenge completions. You also start with Automation unlocked.", + "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 HIGGS_UPGS = { @@ -194,6 +236,16 @@ const HIGGS_UPGS = { 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") }, + }, } const THEORY_REQ = [new ExpantaNum("1e4000000").times(DISTANCES.uni), new ExpantaNum(1000)] diff --git a/js/functions/important.js b/js/functions/important.js index fd20e826..8427bf84 100644 --- a/js/functions/important.js +++ b/js/functions/important.js @@ -68,6 +68,7 @@ function simulateTime() { function modeLoad(resetted) { if (!resetted.includes("extremeStad") && modeActive("extreme")) if (player.activeFC==6) resetted = resetted.filter(x => x!="activeFC") + if (resetted.includes("bestMotive") && player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0")) resetted = resetted.filter(x => x != "bestMotive") 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/main/elementary/bosons.js b/js/main/elementary/bosons.js index 04b1b049..a7902d9f 100644 --- a/js/main/elementary/bosons.js +++ b/js/main/elementary/bosons.js @@ -11,11 +11,17 @@ function updateGluonTabs() { tmp.elm.bos.updateGluonTabs(); } -function updateTempPhotons(gaugeSpeed) { +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 updateTempPhotons(gaugeSpeed) { + updatePhotonsGain(gaugeSpeed) + 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), diff --git a/js/main/elements.js b/js/main/elements.js index f8ab5bff..218ce6bb 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -956,7 +956,13 @@ function updateScalarBosonsHTML(){ let data = Object.values(HIGGS_UPGS)[i] tmp.el["higgs"+name].setDisplay(data.unl()) tmp.el["higgs"+name].setClasses({btn: true, higgsL: player.elementary.bosons.scalar.higgs.amount.lt(data.cost)&&!player.elementary.bosons.scalar.higgs.upgrades.includes(name), higgs: player.elementary.bosons.scalar.higgs.amount.gte(data.cost)&&!player.elementary.bosons.scalar.higgs.upgrades.includes(name), higgsB: player.elementary.bosons.scalar.higgs.upgrades.includes(name)}) - tmp.el["higgs"+name].setHTML((HIGGS_UPGS_EXTR_DESCS[name]?HIGGS_UPGS_EXTR_DESCS[name]:data.desc)+"
    Cost: "+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") diff --git a/js/main/hd.js b/js/main/hd.js index 562fbd59..f7aa66d3 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -122,38 +122,79 @@ function updateEnergyLoss(){ function calcEnergyUpgrades(){ 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) + 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) 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[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) 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[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) + + 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) +} + +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() { @@ -162,6 +203,7 @@ function updateTempHikersDream() { 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) + 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.futureIncl?tmp.hd.futureIncl.length>0:false) { tmp.hd.incline = tmp.hd.futureIncl[0] @@ -174,12 +216,8 @@ function updateTempHikersDream() { 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) - + 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]) @@ -189,9 +227,12 @@ function updateTempHikersDream() { 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) } function quickReset() { + player.canRefill = true tmp.ranks.layer.reset(true) } @@ -220,6 +261,8 @@ function buyEnergyUpg(x) { } function isEnergyUpgShown(x) { + if (player.elementary.bosons.scalar.higgs.upgrades.includes("0;0;0")) return x <= 26 + //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 @@ -265,7 +308,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) { diff --git a/js/main/inf.js b/js/main/inf.js index 3c3cd205..0aac7927 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -192,6 +192,7 @@ function calcKnowledgeGain(){ 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() { diff --git a/main.html b/main.html index eaa87b78..ce8d6d23 100644 --- a/main.html +++ b/main.html @@ -1432,7 +1432,11 @@ You have Higgs Bosons .

    + + + +
    From 6a6e94ec973e1c39adab569acde9b43f6d9a2d48 Mon Sep 17 00:00:00 2001 From: pg132 Date: Mon, 19 Oct 2020 21:30:29 -0700 Subject: [PATCH 026/116] v1.91 Beta 10 - One new Higgs upgrade - Three new ach rewards - Balance until HC unl (I presume progress to/close to inflations is possible) - New display of the incline (when its really close to 90 degrees) --- js/constants/achievements.js | 3 +++ js/constants/elm.js | 5 +++++ js/constants/inf.js | 8 ++++++++ js/functions/important.js | 3 ++- js/main/auto.js | 9 +++++++++ js/main/elementary/theory.js | 7 ++++++- js/main/elements.js | 8 +++++++- js/main/hd.js | 15 +++++++++------ main.html | 6 +++++- 9 files changed, 54 insertions(+), 10 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index d2f8c317..50880531 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -389,8 +389,11 @@ const ACH_DATA = { 133: "Unlock Auto-Elementaries.", 135: "The Purge Power effect is halved.", + 141: "boolean(hikers_dream,Keep generators and buy them automatically.)", 142: "Endorsements that are bought automatically do not reset anything.", + 143: "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.", diff --git a/js/constants/elm.js b/js/constants/elm.js index a5863dbc..1f1ee6a1 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -246,6 +246,11 @@ const HIGGS_UPGS = { 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)] diff --git a/js/constants/inf.js b/js/constants/inf.js index 97251f47..478dd9ab 100644 --- a/js/constants/inf.js +++ b/js/constants/inf.js @@ -697,6 +697,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 diff --git a/js/functions/important.js b/js/functions/important.js index 8427bf84..d9b22f20 100644 --- a/js/functions/important.js +++ b/js/functions/important.js @@ -68,7 +68,8 @@ function simulateTime() { function modeLoad(resetted) { if (!resetted.includes("extremeStad") && modeActive("extreme")) if (player.activeFC==6) resetted = resetted.filter(x => x!="activeFC") - if (resetted.includes("bestMotive") && player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0")) resetted = resetted.filter(x => x != "bestMotive") + if (player.elementary.bosons.scalar.higgs.upgrades.includes("1;0;0")) resetted = resetted.filter(x => x != "bestMotive") + 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/main/auto.js b/js/main/auto.js index 5786d5d1..495faaec 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -230,6 +230,14 @@ function entropyUpgAutoTick(){ } } +function energyAutoTick(){ + if (!modeActive("hikers_dream")) return + if (tmp.ach) if (tmp.ach[141].has) { + buyGen() + newGen() + } +} + function autoTick(diff) { normalAutoTick(diff) furnaceAutoTick() @@ -249,6 +257,7 @@ function autoTick(diff) { theoryBoosterAutoTick() entropyAutoTick() entropyUpgAutoTick() + energyAutoTick() } function autoPerSec() { diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 2565aadf..246ce60c 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -24,10 +24,15 @@ function updateTempTheoriverse() { 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 (modeActive("extreme")) { + if (modeActive("extreme")) { if (player.elementary.theory.depth.lt(4)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(0.75) if (player.elementary.theory.depth.gte(5)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(1.25) } + if (modeActive("hikers_dream")) { + tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(4 / 3) + if (player.elementary.theory.depth.gte(4)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(9 / 8) + if (player.elementary.theory.depth.gte(7)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(4 / 3) + } if (!tmp.elm.theory.start) tmp.elm.theory.start = function() { if (!player.elementary.theory.unl) return if (HCTVal("tv").gt(-1)) return diff --git a/js/main/elements.js b/js/main/elements.js index 218ce6bb..afa8ea80 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -69,7 +69,13 @@ function updateMainHTML(){ tmp.el.accEn.setHTML(tmp.accEn.gt(0) ? " (Accelerational Energy: " + formatDistance(tmp.accEn) + "/s2)" : ""); // 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.incline.sub(90).times(-1).pow(-1)) : "Current Incline: "+showNum(tmp.hd.incline)+"°" + //this is the x+o(x^3) formula so its correct if we are large enough (even 89 deg should do) + t = start + ", 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")) } } diff --git a/js/main/hd.js b/js/main/hd.js index f7aa66d3..3176e20b 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -169,22 +169,24 @@ function calcEnergyUpgrades(){ 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) + let exp322 = player.elementary.bosons.scalar.higgs.upgrades.includes("2;2;1") ? 2 : 1 - 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[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(.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) + 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(.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) + 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(.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(.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) + 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) + 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) } function updateMotive(){ @@ -229,6 +231,7 @@ function updateTempHikersDream() { 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() { diff --git a/main.html b/main.html index ce8d6d23..6fedfa5c 100644 --- a/main.html +++ b/main.html @@ -1512,7 +1512,11 @@
    -




    + + + + +




    @@ -1935,12 +1937,14 @@ + + From 241b237f07df15fde29a11677d516cad27e1892f Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 22 Oct 2020 09:34:58 -0400 Subject: [PATCH 028/116] v1.91 Beta 12 --- js/constants/achievements.js | 4 +- js/constants/elm.js | 12 +++-- js/constants/modes.js | 13 +++++ js/functions/achievements.js | 2 +- js/functions/formatting.js | 4 +- js/game.js | 4 ++ js/main/auto.js | 2 +- js/main/elementary/foam.js | 10 +++- js/main/elementary/skyrmion.js | 18 ++++++- js/main/elements.js | 39 ++++++++++++-- js/main/extreme/fn.js | 4 +- js/main/extreme/plasma.js | 92 ++++++++++++++++++++++++++++++++++ js/main/nerfs.js | 8 ++- js/update.js | 3 ++ main.html | 15 ++++++ style.css | 84 +++++++++++++++++++++++++++++++ 16 files changed, 294 insertions(+), 20 deletions(-) create mode 100644 js/main/extreme/plasma.js diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 50880531..84038ab0 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -115,7 +115,7 @@ 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", @@ -296,7 +296,7 @@ const ACH_DATA = { 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 showNum(boolean(extreme,1e150,1e160)) Inflatons.", 167: "Reach showNum(1e108000000) uni.", 168: "Reach showNum(1e25) Quantum Foam without any Subplanck Foam.", diff --git a/js/constants/elm.js b/js/constants/elm.js index 42237afb..b25153ff 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -608,7 +608,7 @@ const TREE_UPGS = { }, 38: { unl: function() { return player.elementary.entropy.unl&&modeActive("extreme") }, - cost: function(bought) { return new ExpantaNum(6e10) }, + 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) }, @@ -616,7 +616,7 @@ const TREE_UPGS = { }, 39: { unl: function() { return player.elementary.entropy.unl&&modeActive("extreme") }, - cost: function(bought) { return new ExpantaNum(6e10) }, + 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) }, @@ -820,7 +820,7 @@ const QF_NEXTLAYER_COST = { 5: new ExpantaNum(1e6), } const QFB17_TARGETS = [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] -const ENTROPY_UPGS = 22 +const ENTROPY_UPGS = 23 const ENTROPY_UPG_COSTS = { 1: new ExpantaNum(4), 2: new ExpantaNum(10), @@ -838,6 +838,7 @@ const ENTROPY_UPG_COSTS = { 10: new ExpantaNum(700), 11: new ExpantaNum(1500), 12: new ExpantaNum(1750), + 23: new ExpantaNum(6000), 13: new ExpantaNum(1800), 14: new ExpantaNum(2350), @@ -861,6 +862,11 @@ const ENTROPY_UPG_EFFS = { 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) }, } +const ENTROPY_UPG_AUTO_ORDER = [1,2,3,4,21, + 5,6,7,8,22, + 9,10,11,12,23, + 13,14,15,16, + 17,18,19,20]; const SKY_REQ = [ "4.4e108000026", diff --git a/js/constants/modes.js b/js/constants/modes.js index c3c988c6..58d42c4f 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -149,6 +149,11 @@ const MODE_VARS = { 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), @@ -200,6 +205,14 @@ const MODE_EX = { 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/functions/achievements.js b/js/functions/achievements.js index f284b671..995893f9 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -171,7 +171,7 @@ function checkR16Ach(){ 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(); } diff --git a/js/functions/formatting.js b/js/functions/formatting.js index 81f6e071..ae545bf4 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -109,8 +109,8 @@ function formatTime(x) { } } -function formatGain(amt, gain, name, isDist) { - let trueGain = name?adjustGen(gain, name):gain +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)" diff --git a/js/game.js b/js/game.js index 12744ae9..7b24b53a 100644 --- a/js/game.js +++ b/js/game.js @@ -79,6 +79,10 @@ function tickWithoutTS(diff) { 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) { diff --git a/js/main/auto.js b/js/main/auto.js index 4a44fa57..84c4fb05 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -225,7 +225,7 @@ function entropyUpgAutoTick(){ if (player.automators["entropy_upgrades"] && player.elementary.entropy.unl) { 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) => Math.min(a,c)); + 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) } } diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 1fc447ed..4293d2c6 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -233,6 +233,12 @@ function refoam() { } } +function getExtremeFoamSCStart() { + let start = new ExpantaNum(1e50); + if (tmp.fn?tmp.fn.pl.unl:false) start = start.times(tmp.fn.pl.boosts[1]); + return start; +} + // Entropy function getEntropyEff() { if (!player.elementary.entropy.unl) return new ExpantaNum(1); @@ -260,6 +266,7 @@ function getEntropyGain() { let gain = foam.div(1e50).pow(0.05) if (player.elementary.sky.unl && tmp.elm.sky) gain = gain.pow(tmp.elm.sky.spinorEff[10].plus(1)) if (gain.gte(5)) gain = gain.times(25).cbrt() + if (modeActive("extreme") && gain.gte(25)) gain = gain.times(125).cbrt(); if (gain.gte(100)) gain = gain.times(1e6).pow(0.25) if (gain.gte(1200)) gain = gain.logBase(1.001).div(5.91135) if (modeActive("extreme") && ExpantaNum.gte(player.elementary.theory.tree.upgrades[38]||0, 1)) gain = gain.pow(2); @@ -272,6 +279,7 @@ function getEntropyNext() { if (modeActive("extreme") && ExpantaNum.gte(player.elementary.theory.tree.upgrades[38]||0, 1)) gain = gain.sqrt(); if (gain.gte(1200)) gain = ExpantaNum.pow(1.001, gain.times(5.91135)) if (gain.gte(100)) gain = gain.pow(4).div(1e6) + if (modeActive("extreme") && gain.gte(25)) gain = gain.pow(3).div(125); if (gain.gte(5)) gain = gain.pow(3).div(25) if (player.elementary.sky.unl && tmp.elm.sky) gain = gain.root(tmp.elm.sky.spinorEff[10].plus(1)) return gain.pow(20).times(1e50); @@ -335,6 +343,6 @@ function buyEntropyUpg(x) { function entropyUpgShown(x) { if (x<=8) return true; else if (x<=20) return player.elementary.sky.amount.gt(0); - else if (x<=22) return modeActive("extreme"); + else if (x<=23) return modeActive("extreme"); else return false; } \ No newline at end of file diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index 73110795..4f252241 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -17,18 +17,19 @@ function updateSkyrmionTabs() { 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(player.elementary.sky.pions.field[i]||0) + 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(player.elementary.sky.spinors.field[i]||0) + 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() { @@ -86,6 +87,11 @@ function skyrmionReset(force=false) { player.elementary.entropy.best = new ExpantaNum(0); player.elementary.entropy.upgrades = player.elementary.entropy.upgrades.filter(x => 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); @@ -106,6 +112,14 @@ function getSkyEff() { return eff; } +function getSkyUpgPow() { + if (!player.elementary.sky.unl) return new ExpantaNum(0); + let pow = new ExpantaNum(1) + 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) { let stacks = new ExpantaNum(x) .sub(player.elementary.fermions.quarks.type) diff --git a/js/main/elements.js b/js/main/elements.js index afa8ea80..835c03cd 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -336,7 +336,7 @@ function updateDarkCircleRssHTML(){ "Dark Matter
    Amount: " + showNum(player.dc.matter) + "
    Gain: " + - formatGain(player.dc.matter, tmp.dc.dmGain.times(tmp.dc.flow), "dc") + + formatGain(player.dc.matter, tmp.dc.dmGain, "dc", false, tmp.dc.flow) + "
    Effect: You gain " + showNum(tmp.dc.dmEff) + "x as many Rockets." @@ -345,7 +345,7 @@ function updateDarkCircleRssHTML(){ "Dark Energy
    Amount: " + showNum(player.dc.energy) + "
    Gain: " + - formatGain(player.dc.energy, tmp.dc.deGain.times(tmp.dc.flow), "dc") + + 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." @@ -354,7 +354,7 @@ function updateDarkCircleRssHTML(){ "Dark Fluid
    Amount: " + showNum(player.dc.fluid) + "
    Gain: " + - formatGain(player.dc.fluid, tmp.dc.dfGain.times(tmp.dc.flow), "dc") + + 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." @@ -749,6 +749,34 @@ function updateMagma() { } } +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")) { @@ -758,6 +786,7 @@ function updateOverallExtremeModeHTML(){ updateNormalFurnace() updateEnhanceFurnace() updateMagma() + updatePlasma() } } } @@ -887,7 +916,7 @@ function updateGaugeBosonsAmountHTML(){ tmp.el.gaugeAmt.setTxt(showNum(player.elementary.bosons.gauge.amount)); tmp.el.gaugeGain.setTxt(showNum(adjustGen(tmp.elm.bos.gaugeGain, "gauge"))); tmp.el.gaugeForce.setTxt(showNum(player.elementary.bosons.gauge.force)); - tmp.el.gaugeForceGain.setTxt(formatGain(player.elementary.bosons.gauge.force, tmp.elm.bos.forceGain)); + tmp.el.gaugeForceGain.setTxt(formatGain(player.elementary.bosons.gauge.force, tmp.elm.bos.forceGain, "gauge")); tmp.el.gaugeForceEff.setTxt(showNum(tmp.elm.bos.forceEff)); } @@ -1163,7 +1192,7 @@ function updateHadronicChallenges(){ tmp.el["hcCurrent"+HC_EXTREME_CHALLS[i]].setTxt("Currently: "+showNum(getHCSelector(HC_EXTREME_CHALLS[i]))) } tmp.el["hcCurrenttv"].setTxt("Currently: "+showNum(getHCSelector("tv"))) - tmp.el.hcPerc.setTxt(player.elementary.hc.active?(showNum(tmp.elm.hc.complPerc.times(100))+"% complete"):"") + tmp.el.hcPerc.setTxt(player.elementary.hc.active?(showNum(tmp.elm.hc.complPerc.times(100).max(0))+"% complete"):"") } } diff --git a/js/main/extreme/fn.js b/js/main/extreme/fn.js index 6422c60d..66a3273b 100644 --- a/js/main/extreme/fn.js +++ b/js/main/extreme/fn.js @@ -395,6 +395,7 @@ function updateTempFurnace() { updateMoltenBricks(); updateTempMagma(); + updateTempPlasma(); } function startFurnChall(x) { @@ -445,7 +446,8 @@ const FC_GOAL = { const FN_TABBTN_SHOWN = { nfn: function() { return true }, efn: function() { return tmp.ach[111].has }, - magma: function() { return player.elementary.times.gt(0) }, + magma: function() { return tmp.ach[131].has }, + plasma: function() { return tmp.ach[171].has }, } function isFNTabShown(name) { diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js new file mode 100644 index 00000000..1b1a6628 --- /dev/null +++ b/js/main/extreme/plasma.js @@ -0,0 +1,92 @@ +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():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 (tmp.fn.pl.boosts) exp = exp.times(tmp.fn.pl.boosts[2]) + return exp; +} + +function getWhiteFlameGain() { + if (tmp.fn?(!tmp.fn.pl.unl):true) return new ExpantaNum(0); + return player.plasma.amount.plus(1).pow(player.furnace.blueFlame.plus(1).sqrt().div(25)).sub(1) +} + +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 canBuyPlasmaBoost() { + return !(!PLASMA_BOOSTS[player.plasma.boosts.toNumber()+1]) +} + +function buyPlasmaBoost() { + if (tmp.fn?(!tmp.fn.pl.unl):true) return; + if (!canBuyPlasmaBoost()) return; + let cost = getPlasmaBoostReq(); + if (player.plasma.whiteFlame.lt(cost)) return; + player.plasma.whiteFlame = player.plasma.whiteFlame.sub(cost); + player.plasma.boosts = player.plasma.boosts.plus(1); +} + +const PLASMA_BOOSTS = { + upgs: 3, + rows: 1, + cols: 3, + 1: { + type: "plasmic", + desc: "The Extreme mode nerf to Foam gain starts later.", + baseEff: new ExpantaNum(1), + eff: function() { return player.plasma.amount.plus(1).log10().times(tmp.fn.pl.exp).plus(1).pow(3) }, + effD: function(e) { return showNum(e)+"x later" }, + }, + 2: { + type: "gleaming", + desc: "Boost the Plasma Exponent.", + baseEff: new ExpantaNum(1), + eff: function() { return player.plasma.whiteFlame.plus(1).log10().sqrt().div(2).plus(1) }, + effD: function(e) { return showNum(e)+"x" }, + }, + 3: { + type: "plasmic", + desc: "All Pion/Spinor Upgrades are stronger.", + baseEff: new ExpantaNum(1), + eff: function() { return ExpantaNum.sub(1.5, ExpantaNum.div(1, player.plasma.amount.plus(1).log10().plus(1).log10().plus(1).pow(2))) }, + effD: function(e) { return showNum(e.sub(1).times(100))+"% stronger" }, + }, +} + +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]; + html += "
    " + html += cd.desc+"

    " + html += "Currently:
    " + html += "
    " + current++; + } + html += "
    " + } + boosts.setHTML(html); +} \ No newline at end of file diff --git a/js/main/nerfs.js b/js/main/nerfs.js index 719b547d..79197c3f 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -162,7 +162,7 @@ function adjustGen(val, type) { type == "heavenlyChips" || type == "demonicSouls" || 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" || type=="foam" || type=="sky"; + let post_elem = 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); @@ -170,6 +170,7 @@ function adjustGen(val, type) { if ((player.elementary.theory.active||HCTVal("tv").gt(-1)) && pre_elem) 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); } @@ -177,7 +178,10 @@ function adjustGen(val, type) { let newVal = val.pow(exp); 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")&&newVal.gte(1e50)) newVal = newVal.times(1e150).pow(.25) + 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("hard") && (type=="pathogens"||(extremeStadiumComplete("aqualon") && preinf))) newVal = newVal.times(3) if (extremeStadiumActive("aqualon") && preinf) newVal = newVal.div(9e15) diff --git a/js/update.js b/js/update.js index d8d56a11..f3f49bf6 100644 --- a/js/update.js +++ b/js/update.js @@ -270,6 +270,9 @@ function setupHTML() { setupSkyField("pion") setupSkyField("spinor") + // Plasma Boosts + setupPlasmaBoosts() + // Version let v = new Element("version") v.setTxt(player.version) diff --git a/main.html b/main.html index a8f300da..c0159b19 100644 --- a/main.html +++ b/main.html @@ -415,6 +415,11 @@ Magma Search + + +

    @@ -702,6 +707,14 @@ You have Reformed Magma, which is multiplying your Molten Bricks by

    Note: This does not reset on Elementary. +
    From 700f0102d930e36fc46e70292b79faa95279da60 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 26 Oct 2020 14:20:25 -0400 Subject: [PATCH 034/116] v1.91 Beta 18 --- js/constants/news.js | 9 +++++++++ js/main/elementary/bosons.js | 2 ++ js/main/elementary/fermions.js | 2 ++ js/main/elementary/foam.js | 3 +++ js/main/elementary/hadronic_challenges.js | 1 + js/main/elementary/skyrmion.js | 2 ++ js/main/elementary/theory.js | 1 + 7 files changed, 20 insertions(+) diff --git a/js/constants/news.js b/js/constants/news.js index 6f21c14a..70b5eb3e 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -1,3 +1,10 @@ +var eheheTimes = 0; +var ehehe = function() { + eheheTimes++; + if (eheheTimes>=1000000) return 'EHEHE '+eheheTimes+': OKAY STOP. I GIVE UP. YOURE CRAZY AND WHY WOULD YOU DO THIS?!?!?!??!?!!?!' + else if (eheheTimes>=1000) return 'EHEHE '+eheheTimes+': SERIOUSLY STOP IT YOURE INSANE!' + else return 'EHEHE '+eheheTimes+': Copy paste the following into the console and press enter: console.log(ehehe())' +} const NEWS_DATA = { // No Conditions m1: ["Welcome to the truest of travels."], @@ -90,6 +97,8 @@ const NEWS_DATA = { m88: ["You may have noticed that there's a donate button. If you didn't, well you have noticed now!"], m89: ["For all the tickers saying you are Canadian: Canadian or not, you are enjoying this game."], m90: ["In 2073, we will be at v193.6, with over 200 prestige layers, and the game will cost over $20.00"], + m91: ["Well yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually -INFINITE LOOP-"], + m92: ["Check the console after pressing here..."], // Distance-based Conditions d1: [ diff --git a/js/main/elementary/bosons.js b/js/main/elementary/bosons.js index a7902d9f..d34c2c11 100644 --- a/js/main/elementary/bosons.js +++ b/js/main/elementary/bosons.js @@ -192,6 +192,7 @@ function updateTempGauge() { 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); let gaugeSpeed = new ExpantaNum(tmp.elm.bos.forceEff); updateTempPhotons(gaugeSpeed); @@ -254,6 +255,7 @@ function updateTempScalar() { 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 (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 diff --git a/js/main/elementary/fermions.js b/js/main/elementary/fermions.js index b5ae0c1d..99254b8e 100644 --- a/js/main/elementary/fermions.js +++ b/js/main/elementary/fermions.js @@ -6,6 +6,7 @@ function updateTempQuarks() { 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) + if (modeActive("easy")) tmp.elm.ferm.quarkGain = tmp.elm.ferm.quarkGain.times(4) 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) { @@ -58,6 +59,7 @@ function updateTempLeptons() { 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) { diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 729abaa1..4d5bfcc7 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -113,6 +113,7 @@ function getQuantumFoamGain(x) { } } if (player.elementary.entropy.upgrades.includes(11)) gain = gain.times(10) + if (modeActive("easy")) gain = gain.times(Math.pow(5/x, 2)*2.5) return gain } @@ -247,6 +248,7 @@ function getEntropyEff() { let eff = entropy.plus(1).pow(2.5); if (player.elementary.entropy.upgrades.includes(21) && tmp.elm.entropy.upgEff) eff = eff.pow(tmp.elm.entropy.upgEff[21].div(100).plus(1)) if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.pow(tmp.elm.sky.spinorEff[9]) + if (modeActive("easy")) eff = eff.pow(1.25) return eff; } @@ -328,6 +330,7 @@ function getOmegaEff() { let eff = tmp.elm.entropy.omega.div(10) if (player.elementary.entropy.upgrades.includes(7)) eff = eff.times(tmp.elm.entropy.upgEff[7].div(100).plus(1)) if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.times(tmp.elm.sky.spinorEff[7]) + if (modeActive("easy")) eff = eff.times(1.25) return eff } diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js index 3a879ea5..11a2a8b6 100644 --- a/js/main/elementary/hadronic_challenges.js +++ b/js/main/elementary/hadronic_challenges.js @@ -61,6 +61,7 @@ function getProjectedHadronicScore() { // Goal Modifier score = score.times(new ExpantaNum(getHCSelector("goal")).log10().div(Math.log10(Number.MAX_VALUE)).log10().plus(1)) + if (modeActive("easy")) score = score.pow(1.025) return score } diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index 2dc12e3a..deaca400 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -148,6 +148,7 @@ function getPionGain() { 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) return gain; } @@ -156,6 +157,7 @@ function getSpinorGain() { 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) return gain; } diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 20730f1a..966f4586 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -33,6 +33,7 @@ function updateTempTheoriverse() { if (player.elementary.theory.depth.gte(4)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(9 / 8) if (player.elementary.theory.depth.gte(7)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(4 / 3) } + if (modeActive("easy")) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(5/6); if (!tmp.elm.theory.start) tmp.elm.theory.start = function() { if (!player.elementary.theory.unl) return if (HCTVal("tv").gt(-1)) return From 7b16c0ac3db7adab2da1d872be20e8ca36cb1866 Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 27 Oct 2020 18:30:52 -0400 Subject: [PATCH 035/116] v1.91 Beta 19 --- js/constants/default.js | 1 + js/constants/elm.js | 17 ++ js/constants/news.js | 4 +- js/functions/important.js | 1 + js/main/elements.js | 20 ++- js/main/options.js | 15 +- js/update.js | 41 +++-- main.html | 336 ++++++++++++++++++++++++++++---------- style.css | 32 ++-- 9 files changed, 348 insertions(+), 119 deletions(-) diff --git a/js/constants/default.js b/js/constants/default.js index 4d794ea7..ebba3679 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -20,6 +20,7 @@ const DEFAULT_START = { fonts: "courier", hideAch: false, visUpd: "every tick", + tht: true, hcc: true, }, modes: [], diff --git a/js/constants/elm.js b/js/constants/elm.js index 1dd826f0..9da0d64b 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -624,6 +624,23 @@ const TREE_UPGS = { }, } 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 player.elementary.hc.unl&&modeActive("extreme") }, + 15: function() { return player.elementary.entropy.unl&&modeActive("extreme") }, +} const UNL_STR = function() { if (hasDE(2)) return 7 diff --git a/js/constants/news.js b/js/constants/news.js index 70b5eb3e..8ed9d701 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -487,6 +487,4 @@ const NEWS_DATA = { '"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 }, ], -}; - -const NEWS_ADJ = 110; +}; \ No newline at end of file diff --git a/js/functions/important.js b/js/functions/important.js index d9b22f20..4650197d 100644 --- a/js/functions/important.js +++ b/js/functions/important.js @@ -41,6 +41,7 @@ function loadGame() { localStorage.setItem("dist-inc-saves" + betaID, btoa(JSON.stringify(all))); player.savePos = c; modeLoad([]); + loadOptions(); setupHTML(); if (modeActive("hikers_dream")) { updateTempHikersDream(); diff --git a/js/main/elements.js b/js/main/elements.js index 99441447..5cfb1368 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -10,6 +10,7 @@ function updateOptionsHTML(){ }); tmp.el[Object.keys(MODES)[i] + "Mode"].setTooltip(MODES[Object.keys(MODES)[i]].desc) } + tmp.el.ingamebtn.setDisplay(player.dc.unl||player.elementary.unl) tmp.el.sf.setTxt("Significant Figures: " + player.options.sf.toString()); tmp.el.not.setTxt("Notation: " + capitalFirst(player.options.not)); tmp.el.theme.setTxt("Theme: " + capitalFirst(player.options.theme)); @@ -27,6 +28,8 @@ function updateOptionsHTML(){ tmp.el.visUpd.setTxt("Visual Updates: "+capitalFirst(player.options.visUpd)) tmp.el.hcc.setTxt("Exit Hadronic Chall Confirmation: "+(player.options.hcc ? "ON" : "OFF")) tmp.el.hcc.changeStyle("visibility", (player.elementary.hc.unl)?"visible":"hidden") + tmp.el.tht.setTxt("Theory Tree Display: "+(player.options.tht?"GROUPS":"TREE")) + tmp.el.tht.changeStyle("visibility", (player.elementary.theory.tree.unl)?"visible":"hidden") } } @@ -1039,12 +1042,21 @@ 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].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.costReduc).round())), locked: (!(bought.gte(cap))&&!player.elementary.theory.points.gte(TREE_UPGS[i].cost(bought).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.

    '):"") @@ -1284,7 +1296,7 @@ function updateMiscHTML(){ tmp.el.mainContainer.setDisplay(showContainer); tmp.el.loading.setDisplay(false) tmp.el.footer.setDisplay(player.tab == "options"); - tmp.el.newsticker.setDisplay(player.options.newst); + 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":"")+ diff --git a/js/main/options.js b/js/main/options.js index 250d57a5..6e87961e 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -1,3 +1,13 @@ +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; + player.options = JSON.parse(atob(optData)); +} + function getAllSaves() { let local = localStorage.getItem("dist-inc-saves" + betaID) let all = JSON.parse(atob(local ? local : btoa(JSON.stringify([])))); @@ -134,7 +144,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]; @@ -146,7 +156,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]) @@ -155,6 +165,7 @@ function changeOpt(name, type) { let d2 = new Element("dropDown2") d2.changeStyle("display", "none"); save(); + saveOptions(); return; } if (type>0) { diff --git a/js/update.js b/js/update.js index f3f49bf6..aa583a8c 100644 --- a/js/update.js +++ b/js/update.js @@ -1,3 +1,5 @@ +var newsTimeouts = [] + function updateTemp() { updateTempEarlyGame(); updateTempRanks(); @@ -411,6 +413,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]; @@ -421,14 +424,30 @@ function getNews() { 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;i
    @@ -2214,14 +2298,6 @@

    Misc.


    - @@ -2249,6 +2325,7 @@

    Misc.


    + @@ -2274,7 +2351,8 @@

    Misc.


    - + + diff --git a/style.css b/style.css index 1f74c551..068f9f72 100644 --- a/style.css +++ b/style.css @@ -36,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 { @@ -162,6 +169,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); } @@ -186,6 +202,10 @@ body { background-color: #a30b78; } +.pnkSeeThru { + background-color: rgba(163, 11, 120, 0.5); +} + .ylw { background-color: #9ea60a; } @@ -1901,6 +1921,187 @@ table { 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; + 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: #9F98E6; + 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; +} + +.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; +} + @keyframes grosstxt { 0% { color: #176648; @@ -2105,6 +2306,74 @@ table { } } +@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; From 41e8779188b80598758275749cc839eb10aa8961 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 16 Feb 2021 18:36:23 -0500 Subject: [PATCH 055/116] v2.0 Beta 2 --- js/constants/automation.js | 12 ++++++++++++ js/constants/default.js | 1 + js/constants/elm.js | 2 +- js/constants/mlt.js | 23 +++++++++++++---------- js/constants/news.js | 1 + js/functions/formatting.js | 3 +-- js/main/auto.js | 33 ++++++++++++++++++++++++++++++++- js/main/elementary/elm.js | 2 ++ js/main/elementary/foam.js | 31 +++++++++++++++++++------------ js/main/elementary/skyrmion.js | 2 ++ js/main/elementary/theory.js | 1 + js/main/elements.js | 22 +++++++++++++++++----- js/main/multiverse/mlt.js | 30 ++++++++++++++++++++++++++---- js/main/multiverse/quilts.js | 12 ++++++++---- js/main/options.js | 6 ++++-- main.html | 10 +++++++--- style.css | 7 ++++++- 17 files changed, 153 insertions(+), 45 deletions(-) diff --git a/js/constants/automation.js b/js/constants/automation.js index eaef3ad9..7bd833d0 100644 --- a/js/constants/automation.js +++ b/js/constants/automation.js @@ -88,6 +88,9 @@ const AUTOMATORS = { tree_upgrades: function() { return tmp.ach[168].has }, + theoriverse: function() { + return hasMltMilestone(4) + }, theoretical_boosters: function() { return player.elementary.entropy.upgrades.includes(17) }, @@ -100,6 +103,12 @@ const AUTOMATORS = { entropy_upgrades: function() { return player.elementary.entropy.upgrades.includes(11) }, + pion_field: function() { + return hasMltMilestone(8) + }, + spinor_field: function() { + return hasMltMilestone(9) + }, }; const AUTOMATOR_BORDER = { @@ -117,10 +126,13 @@ const AUTOMATOR_BORDER = { 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", } const AUTOMATOR_X = { diff --git a/js/constants/default.js b/js/constants/default.js index f8779a95..21f094d0 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -14,6 +14,7 @@ const DEFAULT_START = { newst: true, elc: true, mltnc: false, + hideMltBtn: false, saveImp: "new save", hot: true, featPerc: "logarithm", diff --git a/js/constants/elm.js b/js/constants/elm.js index e43ef2bf..bdada80b 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -3,7 +3,7 @@ const ELM_TABS = { return true; }, bosons: function () { - return player.elementary.times.gte(2); + return player.elementary.times.gte(2)||hasMltMilestone(3); }, theory: function () { return player.elementary.theory.unl; diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 798a5fdb..b05615d2 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -46,7 +46,7 @@ const MLT_DATA = { }, } -const MLT_MILESTONE_NUM = 2; +const MLT_MILESTONE_NUM = 10; const MLT_MILESTONES = [ { @@ -54,28 +54,31 @@ const MLT_MILESTONES = [ desc: "Keep Higgs Upgrades on reset (except the ones that are unlocked through a Dark Expander)", }, { req: new ExpantaNum(2), - desc: "Keep Entropy Upgrades on reset (but only the ones that are kept on Skyrmion resets)", - }, /*{ + 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: "Keep Theory Unlocks, Dark Expanders, and all Higgs Upgrades on reset", + desc: "Start with Bosons unlocked, and keep Theory Unlocks, Dark Expanders, and all Higgs Upgrades on reset", }, { req: new ExpantaNum(4), - desc: "Unlock Auto-Theoriverse, but you cannot enter the Theoriverse manually", + 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", + desc: "Gain 100% of Elementaries gained on reset every second", }, { req: new ExpantaNum(8), - desc: "Unlock Auto-Pion Upgrades", + desc: "Unlock Auto-Pion Field", }, { req: new ExpantaNum(9), - desc: "Unlock Auto-Spinor Upgrades", + desc: "Unlock Auto-Spinor Field", }, { req: new ExpantaNum(10), - desc: "Unlock Auto-Skyrmions", + desc: "Gain 100% of Skyrmions gained on reset every second", } - */ + ] \ No newline at end of file diff --git a/js/constants/news.js b/js/constants/news.js index 14eca310..57f41a9f 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -101,6 +101,7 @@ const NEWS_DATA = { m92: ["Check the console after pressing here..."], 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'], // Distance-based Conditions d1: [ diff --git a/js/functions/formatting.js b/js/functions/formatting.js index d40bd577..289ce376 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -75,9 +75,8 @@ function decimalPlaces(value, places, roundWhole=false, base = 10) { } } -function formatDistance(x) { +function formatDistance(x, fc=multiverseCapped()) { x = new ExpantaNum(x); - let fc = multiverseCapped(); for (i = Object.keys(DISTANCES).length - 1; i >= 0; i--) { let name = Object.keys(DISTANCES)[i]; let val = new ExpantaNum(DISTANCES[name]); diff --git a/js/main/auto.js b/js/main/auto.js index 2e68162e..5a48fa1f 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -200,6 +200,30 @@ function gluonAutoTick(){ } } +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); + } + } +} + function theoryTreeAutoTick(){ if (player.automators["tree_upgrades"]) { if (player.elementary.theory.tree.unl) { @@ -238,6 +262,11 @@ function energyAutoTick(){ } } +function pionSpinorAutoTick() { + if (player.automators["pion_field"] && hasMltMilestone(8)) maxField("pions") + if (player.automators["spinor_field"] && hasMltMilestone(9)) maxField("spinors") +} + function autoTick(diff) { normalAutoTick(diff) furnaceAutoTick() @@ -257,10 +286,12 @@ function autoTick(diff) { theoryBoosterAutoTick() entropyAutoTick() entropyUpgAutoTick() - energyAutoTick() + energyAutoTick() + pionSpinorAutoTick() } function autoPerSec() { + theoriverseAutoPerSec() if (player.automators["foam_unlocks"]) { if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) else refoam(); diff --git a/js/main/elementary/elm.js b/js/main/elementary/elm.js index 725442ac..5a59934f 100644 --- a/js/main/elementary/elm.js +++ b/js/main/elementary/elm.js @@ -251,7 +251,9 @@ function elTick(diff) { if (player.elementary.sky.unl) { player.elementary.sky.pions.amount = player.elementary.sky.pions.amount.plus(adjustGen(tmp.elm.sky.pionGain.times(diff), "sky")); player.elementary.sky.spinors.amount = player.elementary.sky.spinors.amount.plus(adjustGen(tmp.elm.sky.spinorGain.times(diff), "sky")); + if (hasMltMilestone(10)) player.elementary.sky.amount = player.elementary.sky.amount.plus(getSkyGain().times(diff)) } + if (hasMltMilestone(7)) player.elementary.times = player.elementary.times.plus(getElementariesGained().times(diff)) } function elmReset(force=false, auto=false) { diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index f396d2bd..7c956023 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -93,7 +93,7 @@ function gainFoam(x, gain, diff=1, adj=false) { 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)) qfMax(i+1, b+1) + 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); } @@ -186,11 +186,13 @@ function qfUnl(x) { 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) - let resetted = 0 - while (resettedTotal 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() @@ -1404,7 +1406,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)) @@ -1502,9 +1504,9 @@ 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); + tmp.el.mltReset.setDisplay(tmp.mlt.can&&!player.options.hideMltBtn); tmp.el.mltReset.setClasses({ btn: true, locked: !tmp.mlt.can, mlt: tmp.mlt.can }); - if (tmp.mlt.can) { + if (tmp.mlt.can&&!player.options.hideMltBtn) { 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) + @@ -1515,6 +1517,15 @@ function updateOverallMultiverseHTML() { 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++) { @@ -1539,6 +1550,7 @@ function updateOverallMultiverseHTML() { 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 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":"") } } } diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 0d3ecf2b..8ef5fb9b 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -14,13 +14,33 @@ function setMultiverseResetFunction() { // Keep stuff on Multiverse reset if (hasMltMilestone(1)) { - player.elementary.bosons.scalar.higgs.upgrades = prev.elementary.bosons.scalar.higgs.upgrades.filter(x => !DE_HIGGS_UPGS.includes(x)) + 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; - if (prev.mlt.active != 1) player.inf.stadium.completions = prev.inf.stadium.completions; + player.inf.stadium.completions = prev.inf.stadium.completions; } - if (hasMltMilestone(2)) player.elementary.entropy.upgrades = prev.elementary.entropy.upgrades.filter(x => KEEP_ENTUPGS_SKY.includes(x)) + 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 = prev.elementary.theory.supersymmetry.unl; + player.elementary.theory.tree.unl = prev.elementary.theory.tree.unl; + player.elementary.theory.strings.unl = prev.elementary.theory.strings.unl; + player.elementary.theory.preons.unl = prev.elementary.theory.preons.unl; + player.elementary.theory.accelerons.unl = prev.elementary.theory.accelerons.unl; + player.elementary.theory.accelerons.expanders = prev.elementary.theory.accelerons.expanders; + player.elementary.theory.inflatons.unl = prev.elementary.theory.inflatons.unl; + } + 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 0) mds = capitalFirst(sav.modes[0].replace("_"," ")); else mds = "None"; let info = "Modes: " + mds + "
    "; - if (sav.elementary?(sav.elementary.sky?sav.elementary.sky.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]))+", " @@ -256,7 +258,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; } diff --git a/main.html b/main.html index 101303ff..f1e6f271 100644 --- a/main.html +++ b/main.html @@ -14,6 +14,7 @@ You have Multiversal Energy ( total)
    You have moved on from a Multiverse times.

    + @@ -54,7 +55,7 @@
    -

    +






    @@ -70,7 +71,7 @@
    Multiversal Quilt II
    Quilt Strength: % (based on Knowledge)

    Makes Endorsements % more efficient

    -
    Also multiplies Theory Point gain from Theoriverse completions by


    +
    Also multiplies Theory Point gain from Theoriverse completions by


    @@ -283,6 +284,9 @@ +
    @@ -396,7 +400,7 @@
    diff --git a/style.css b/style.css index 068f9f72..7d7f4abd 100644 --- a/style.css +++ b/style.css @@ -1422,7 +1422,6 @@ table { } #achDesc { - position: sticky; top: 0px; max-height: 12px !important; } @@ -1669,6 +1668,11 @@ table { color: black; } +.btn.sky:hover > span { + color: #000000; + transition-duration: 0.5s; +} + .btn.sky:active { position: relative; top: 3px; @@ -1978,6 +1982,7 @@ table { padding: 4px 12px !important; margin-left: 5px; margin-right: 5px; + margin-top: 0px !important; animation: mltBg 10s infinite; } From 90e81b967a7408af0ea49349a78d197e87f23647 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Wed, 17 Feb 2021 21:30:42 -0500 Subject: [PATCH 056/116] v2.0 Beta 3 --- js/constants/achievements.js | 6 ++- js/constants/default.js | 2 + js/constants/elm.js | 34 ++++++++++++---- js/constants/inf.js | 4 ++ js/constants/mlt.js | 66 +++++++++++++++++++++++++++++-- js/constants/options_notations.js | 1 + js/constants/tabs.js | 19 +++++++++ js/functions/achievements.js | 2 +- js/functions/misc.js | 1 + js/functions/tabs.js | 9 +++-- js/main/auto.js | 8 ++-- js/main/elementary/elm.js | 17 +++++++- js/main/elementary/skyrmion.js | 8 +++- js/main/elements.js | 12 +++--- js/main/inf.js | 1 + js/main/multiverse/mlt.js | 44 ++++++++++++++++----- js/main/multiverse/quilts.js | 4 +- js/main/options.js | 40 +++++++++++++++++-- js/main/rf.js | 2 +- js/main/scaling.js | 2 + js/main/special.js | 1 + js/main/tr.js | 2 +- js/update.js | 14 ++++--- main.html | 4 ++ style.css | 8 ++++ 25 files changed, 260 insertions(+), 51 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index df6b9ea6..58465a21 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -154,6 +154,8 @@ const ACH_DATA = { 176: "Entering Reality", 177: "Softcaps mean NOTHING", 178: "Multiverse Conquered", + + 181: "Two In One Deal", }, descs: { 11: "Go at least formatDistance(100).", @@ -308,6 +310,8 @@ const ACH_DATA = { 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).", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -410,6 +414,6 @@ const ACH_DATA = { 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.", + 178: 'The Infinity popup is permanently disabled, and unlock the "Max Pion & Spinor Fields" button.', } }; \ No newline at end of file diff --git a/js/constants/default.js b/js/constants/default.js index 21f094d0..c402eda9 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -18,6 +18,7 @@ const DEFAULT_START = { saveImp: "new save", hot: true, featPerc: "logarithm", + tabsHidden: [], dcPulse: true, fonts: "courier", hideAch: false, @@ -244,5 +245,6 @@ const DEFAULT_START = { highestCompleted: 0, active: 0, quiltUpgs: [new ExpantaNum(0), new ExpantaNum(0), new ExpantaNum(0)], + mlt1selected: [], }, }; diff --git a/js/constants/elm.js b/js/constants/elm.js index bdada80b..f496b226 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -6,19 +6,28 @@ const ELM_TABS = { 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; + 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.", @@ -954,8 +963,16 @@ const SKY_FIELDS = { spinorDesc: "Skyrmions boost Supersymmetric Particle gain.", baseCost: new ExpantaNum(1e5), costMult: new ExpantaNum(10), - pionEff(bought) { return player.elementary.sky.amount.plus(1).pow(bought).pow(400) }, - spinorEff(bought) { return player.elementary.sky.amount.plus(1).pow(bought).pow(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: { @@ -1025,7 +1042,10 @@ const SKY_FIELDS = { baseCost: new ExpantaNum(1e43), costMult: new ExpantaNum(1e12), pionEff(bought) { return ExpantaNum.add(ExpantaNum.cbrt(bought), 1).pow(11) }, - spinorEff(bought) { return ExpantaNum.add(bought, 1).pow(1.65) }, + 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: { diff --git a/js/constants/inf.js b/js/constants/inf.js index 478dd9ab..60da421a 100644 --- a/js/constants/inf.js +++ b/js/constants/inf.js @@ -793,6 +793,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); @@ -801,6 +802,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); @@ -808,6 +810,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); @@ -819,6 +822,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; } diff --git a/js/constants/mlt.js b/js/constants/mlt.js index b05615d2..0bdc9359 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -20,9 +20,10 @@ const MLT_DATA = { req: new ExpantaNum(0), }, 1: { - desc: "???", - reward: "???", - req: new ExpantaNum(1/0), + notBalanced: true, + desc: "You can only unlock 2 of the following: Theory, Hadronic Challenge, Quantum Foam, and Skyrmions (unlock them by opening their tabs). Stadium Challenge completions are also reset.", + reward: "Stadium Challenge rewards are much stronger, but their challenge goals are much higher.", + req: new ExpantaNum(3), }, 2: { desc: "???", @@ -81,4 +82,61 @@ const MLT_MILESTONES = [ desc: "Gain 100% of Skyrmions gained on reset every second", } -] \ No newline at end of file +] + +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.", + eternity: "Endorsements & Ascension Power make Ranks boost Time Speed.", + reality: "Time Cubes are 8x as powerful.", + drigganiz: "Pathogen Upgrades are 1.5% stronger for every achievement you have.", + 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).slog(10).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).log10().plus(1)); + let exp = player.inf.endorsements.div(10).plus(1).logBase(1.75).plus(1).pow(9); + let totalExp = base.pow(exp); + if (totalExp.gte(Number.MAX_VALUE)) + totalExp = totalExp.log10().times(Number.MAX_VALUE / Math.log10(Number.MAX_VALUE)); + let ret = player.rank.pow(totalExp.log10()); + ret = ret.pow(mult); + return ret.max(1); + }, + drigganiz: function () { + let ret = ExpantaNum.mul(0.015, 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_STADIUM_GOAL_EXP = new ExpantaNum(2e5) \ No newline at end of file diff --git a/js/constants/options_notations.js b/js/constants/options_notations.js index 0c9464b1..b7a26788 100644 --- a/js/constants/options_notations.js +++ b/js/constants/options_notations.js @@ -14,6 +14,7 @@ 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 = 25; const VIS_UPDS = { diff --git a/js/constants/tabs.js b/js/constants/tabs.js index 96eca32b..0a64e698 100644 --- a/js/constants/tabs.js +++ b/js/constants/tabs.js @@ -43,6 +43,25 @@ const TABBTN_SHOWN = { }, }; +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 }, diff --git a/js/functions/achievements.js b/js/functions/achievements.js index ba84a6b0..1dec1f38 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -188,7 +188,7 @@ function checkR17Ach(){ } function checkR18Ach() { - // Nothing yet + if (player.distance.gte(ExpantaNum.pow(DISTANCES.mlt, 2))) tmp.ach[181].grant(); } function updateAchievements() { diff --git a/js/functions/misc.js b/js/functions/misc.js index 56452e46..b13c69b1 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -182,6 +182,7 @@ function transformToEN(obj, sc = DEFAULT_START) { if (ret.elementary.theory.inflatons === undefined) ret.elementary.theory.inflatons = deepCopy(sc.elementary.theory.inflatons) if (ret.autoModes === undefined) ret.autoModes = {}; if (ret.autoTxt === undefined) ret.autoTxt = {}; + if (ret.mlt.mlt1selected === undefined) ret.mlt.mlt1selected = []; ret.distance = new ExpantaNum(ret.distance); ret.velocity = new ExpantaNum(ret.velocity); ret.rank = new ExpantaNum(ret.rank); diff --git a/js/functions/tabs.js b/js/functions/tabs.js index 31027b4c..401e55ab 100644 --- a/js/functions/tabs.js +++ b/js/functions/tabs.js @@ -6,8 +6,8 @@ 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; } @@ -18,9 +18,10 @@ function updateTabs() { 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) { diff --git a/js/main/auto.js b/js/main/auto.js index 5a48fa1f..43346607 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -235,7 +235,7 @@ function theoryTreeAutoTick(){ } function theoryBoosterAutoTick() { - if (player.automators["theoretical_boosters"] && player.elementary.entropy.upgrades.includes(17)) theoryBoost(true) + if (player.automators["theoretical_boosters"] && player.elementary.entropy.upgrades.includes(17) && player.elementary.theory.unl) theoryBoost(true) } function entropyAutoTick(){ @@ -263,8 +263,8 @@ function energyAutoTick(){ } function pionSpinorAutoTick() { - if (player.automators["pion_field"] && hasMltMilestone(8)) maxField("pions") - if (player.automators["spinor_field"] && hasMltMilestone(9)) maxField("spinors") + 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 autoTick(diff) { @@ -292,7 +292,7 @@ function autoTick(diff) { function autoPerSec() { theoriverseAutoPerSec() - if (player.automators["foam_unlocks"]) { + if (player.automators["foam_unlocks"] && player.elementary.foam.unl) { if (player.elementary.foam.maxDepth.lt(5)) qfUnl(player.elementary.foam.maxDepth.toNumber()) else refoam(); } diff --git a/js/main/elementary/elm.js b/js/main/elementary/elm.js index 5a59934f..4b1bfe7f 100644 --- a/js/main/elementary/elm.js +++ b/js/main/elementary/elm.js @@ -140,6 +140,22 @@ function updateElementaryTabs() { }; if (!tmp.elm.showTab) tmp.elm.showTab = function (name) { if (elmTab == name) return; + if (mltActive(1) && player.mlt.mlt1selected.length<2) { + if (name=="theory"||name=="hc"||name=="foam"||name=="sky") { + player.mlt.mlt1selected.push(name) + player.elementary[name].unl = true; + if (name=="theory" && hasMltMilestone(3)) { + 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.inflatons.unl = true; + } + if (name=="foam") player.elementary.entropy.unl = true; + notifier.info("Unlocked "+FULL_ELM_NAMES[name]+"!") + } + } elmTab = name; tmp.elm.updateTabs(); }; @@ -269,4 +285,3 @@ function getElementariesGained() { if (hasDE(4)) e = e.times(getGravBoostMult()) return e.max(1).floor() } - diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index 1b7bf0e8..b827da6c 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -51,7 +51,7 @@ function canSkyReset() { } function getSkyGain() { - if (!canSkyReset()) return false; + if (!canSkyReset()) return new ExpantaNum(0); let gain = player.elementary.fermions.quarks.amount.max(1).logBase(SKY_REQ[1]).times(player.elementary.fermions.leptons.amount.max(1).logBase(SKY_REQ[2])).pow(2); if (player.elementary.entropy.upgrades.includes(14)) gain = gain.times(tmp.elm.entropy.upgEff[14]) if (tmp.fn) if (tmp.fn.pl) if (tmp.fn.pl.unl) gain = gain.times(tmp.fn.pl.boosts[8]) @@ -245,6 +245,12 @@ function maxField(type, lims={}, ignoreUpgReq=false) { } } +function maxBothFields() { + if (!tmp.ach[178].has) return; + maxField("pion") + maxField("spinor") +} + function exportField(type) { let data = JSON.stringify(player.elementary.sky[type].field); notifier.info("Field exported!") diff --git a/js/main/elements.js b/js/main/elements.js index 7d4a42a4..10832079 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -555,14 +555,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 != ""); @@ -1470,6 +1471,7 @@ function updateSkyHTML() { 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.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)) @@ -1504,9 +1506,9 @@ 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); + 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) { + 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) + diff --git a/js/main/inf.js b/js/main/inf.js index 77872982..0b670660 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -576,6 +576,7 @@ 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, MLT_1_STADIUM_GOAL_EXP) return goal; }; tmp.inf.stadium.canComplete = diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 8ef5fb9b..47ecc07b 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -25,13 +25,13 @@ function setMultiverseResetFunction() { 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 = prev.elementary.theory.supersymmetry.unl; - player.elementary.theory.tree.unl = prev.elementary.theory.tree.unl; - player.elementary.theory.strings.unl = prev.elementary.theory.strings.unl; - player.elementary.theory.preons.unl = prev.elementary.theory.preons.unl; - player.elementary.theory.accelerons.unl = prev.elementary.theory.accelerons.unl; - player.elementary.theory.accelerons.expanders = prev.elementary.theory.accelerons.expanders; - player.elementary.theory.inflatons.unl = prev.elementary.theory.inflatons.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 = new ExpantaNum(5); + player.elementary.theory.inflatons.unl = true; } if (hasMltMilestone(5)) { player.elementary.hc.best = prev.elementary.hc.best; @@ -95,6 +95,10 @@ function multiversePaused() { return player.mlt.active == "NONE" } +function mltActive(n) { + return player.mlt.active == n +} + function mltReset(force=false, auto=false) { let c = player.distance.gte(DISTANCES.mlt); let L = new Layer("multiverse", c, "multi-res", true, "mlt", true); @@ -106,7 +110,11 @@ function setupMlt(m) { mltSelected = m; } -function mltUnlocked(m) { return player.mlt.bestEnergy.gte(MLT_DATA[m].req) } +function mltUnlocked(m) { return player.mlt.energy.gte(MLT_DATA[m].req)||player.mlt.highestCompleted>=m } + +function mltCompleted(m) { return player.mlt.highestCompleted>=m } + +function mltRewardActive(m) { return mltActive(m) || mltCompleted(m) } function getMltDisplay(m) { if (m=="NONE") return ""; @@ -114,18 +122,34 @@ function getMltDisplay(m) { let display = "Multiverse "+(m==0?"Prime":m)+"

    " if (mltUnlocked(m)) { display += (m==0?"":"Effect: ")+data.desc+"
    " - if (data.reward) display += "
    Reward: "+reward+"
    " + if (data.reward) display += "
    Reward: "+data.reward+"
    " } else display += "Req: "+showNum(data.req)+" Multiversal Energy"; + if (data.notBalanced) display += "

    NOT BALANCED" return display; } function startMultiverse(m) { if (!mltUnlocked(m)) return; - if (player.mlt.active==mltSelected) { + 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) { + 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; + player.elementary.hc.unl = false; + player.elementary.foam.unl = false; + player.elementary.entropy.unl = false; + player.elementary.sky.unl = false; + } player.mlt.active = m; player.tab = "main" mltTab = "mltMap" diff --git a/js/main/multiverse/quilts.js b/js/main/multiverse/quilts.js index 02ef4edf..44615ea0 100644 --- a/js/main/multiverse/quilts.js +++ b/js/main/multiverse/quilts.js @@ -27,7 +27,7 @@ function getQuiltStrength(x) { function getQuiltEff(x) { let power = tmp.mlt.quilts[x].strength; if (x==1) { - let exp = ExpantaNum.root(15, power.plus(1).pow(7).sub(16)) + 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) return power.plus(1).pow(0.9) @@ -35,6 +35,8 @@ function getQuiltEff(x) { 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)); } diff --git a/js/main/options.js b/js/main/options.js index d74eb50b..1dcf2c65 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -104,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 + "
    "); } @@ -169,6 +170,25 @@ function changeOpt(name, type) { 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); @@ -176,6 +196,18 @@ 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)); diff --git a/js/main/rf.js b/js/main/rf.js index ccc68d2a..9236216a 100644 --- a/js/main/rf.js +++ b/js/main/rf.js @@ -20,7 +20,7 @@ function getFuelEff() { .pow(0.05); 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/scaling.js b/js/main/scaling.js index 241ad8f4..f21d84c8 100644 --- a/js/main/scaling.js +++ b/js/main/scaling.js @@ -56,6 +56,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]) } diff --git a/js/main/special.js b/js/main/special.js index c044f849..79943fb2 100644 --- a/js/main/special.js +++ b/js/main/special.js @@ -272,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; } 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/update.js b/js/update.js index 9a3c5ae0..48a3eee1 100644 --- a/js/update.js +++ b/js/update.js @@ -276,7 +276,7 @@ function setupHTML() { // Plasma Boosts setupPlasmaBoosts() - // Multiverse Milestones + // Multiverse Stuff setupMltMilestoneTable() // Version @@ -337,11 +337,13 @@ function updateUnlocks() { 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.ach[178].has) 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 (player.distance.gte(SKY_REQ[0]) && player.elementary.fermions.quarks.amount.gte(SKY_REQ[1]) && player.elementary.fermions.leptons.amount.gte(SKY_REQ[2])) player.elementary.sky.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(SKY_REQ[0]) && player.elementary.fermions.quarks.amount.gte(SKY_REQ[1]) && player.elementary.fermions.leptons.amount.gte(SKY_REQ[2])) player.elementary.sky.unl = true; + } } document.onkeyup = function(e) { diff --git a/main.html b/main.html index f1e6f271..a49da5e5 100644 --- a/main.html +++ b/main.html @@ -331,6 +331,9 @@ +
    @@ -2280,6 +2283,7 @@

    Misc.


    Destabilizing the topology of your multiverse will force an Entropy & Elementary reset, and will also reset your Purge Power, Elementary Particles, Fermions, Bosons, Photon & Gluon Upgrades, Supersymmetric Particles, Theory Tree Upgrades, Strings (and Entangled Strings), Preon amount, Acceleron amount, Inflatons, Hadrons, Entropy, & Entropy Upgrades (except the first one).



    You have Skyrmions, which multiply the Quark/Lepton exponents by

    + From d8c95cc8b0e7e1c3651d1dbb5e745667244a11f1 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 21 Feb 2021 14:20:00 -0500 Subject: [PATCH 064/116] v2.0 Beta 7 --- js/constants/default.js | 2 +- js/constants/elm.js | 21 ++++++++++++++------- js/constants/mlt.js | 14 ++++++++++---- js/functions/misc.js | 4 ++-- js/main/elementary/foam.js | 4 +++- js/main/elementary/hadronic_challenges.js | 1 + js/main/elementary/theory.js | 2 ++ js/main/elements.js | 3 ++- js/main/inf.js | 4 ++-- js/main/nerfs.js | 1 + main.html | 8 ++++++-- 11 files changed, 44 insertions(+), 20 deletions(-) diff --git a/js/constants/default.js b/js/constants/default.js index 9bd577be..f982d848 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -184,7 +184,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: { diff --git a/js/constants/elm.js b/js/constants/elm.js index be51d9bc..58d66acf 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -689,10 +689,11 @@ const G_TREE_SECTS = { } 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), @@ -701,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", @@ -709,7 +713,10 @@ const STR_NAMES = { 4: "Quaternary", 5: "Quinary", 6: "Senary", - 7: "Septenary" + 7: "Septenary", + 8: "Octonary", + 9: "Nonary", + 10: "Dekanary", } const MAX_DARK_EXPANDERS = 5 @@ -721,8 +728,8 @@ const DARK_EXPANDER_COSTS = { 4: new ExpantaNum(2e3), 5: new ExpantaNum(4e3), 6: new ExpantaNum("1.1111111111111111111111e1111"), - 7: new ExpantaNum(1/0), - 8: new ExpantaNum(1/0), + 7: new ExpantaNum("1e39000"), + 8: new ExpantaNum("1e46500"), 9: new ExpantaNum(1/0), 10: new ExpantaNum(1/0), } @@ -733,8 +740,8 @@ const DARK_EXPANDER_DESCS = { 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: "???", - 8: "???", + 7: "Accelerons now reduce the Hadron effect interval.", + 8: "The Primary String effect is squared.", 9: "???", 10: "???", } diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 396ffade..cb10ccbd 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -37,9 +37,9 @@ const MLT_DATA = { req: new ExpantaNum(100), }, 4: { - desc: "???", - reward: "???", - req: new ExpantaNum(1/0), + desc: "You are always trapped in the Theoriverse at Depth 4.5 (unaffected by any depth reductions), which also affects Pion & Spinor gain.", + reward: "Unlock 3 new Strings.", + req: new ExpantaNum(400), }, 5: { desc: "???", @@ -48,7 +48,7 @@ const MLT_DATA = { }, } -const MLT_MILESTONE_NUM = 17; +const MLT_MILESTONE_NUM = 19; const MLT_MILESTONES = [ { @@ -114,6 +114,12 @@ const MLT_MILESTONES = [ desc: "Multiversal Quilt Upgrade effects are increased based on your Distance.", 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.", + }, { + req: new ExpantaNum(1.75e3), + desc: "The First String's effect also multiplies Acceleron gain.", }, ] diff --git a/js/functions/misc.js b/js/functions/misc.js index 126e1244..e2a297c2 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -127,7 +127,7 @@ function ENString(obj) { 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;i0) for (let i=0;i(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>=getMaxDEs()), th: (!(player.elementary.theory.accelerons.amount.lt(DARK_EXPANDER_COSTS[next])||next-1>=getMaxDEs()))}) tmp.el.darkExp.setHTML((next-1>=getMaxDEs())?"MAXED":(DARK_EXPANDER_DESCS[next]+"
    Cost: "+showNum(DARK_EXPANDER_COSTS[next])+" Accelerons")) @@ -1246,6 +1246,7 @@ function updateHadronicChallenges(){ 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))?("1 + 1/"+showNum(tmp.elm.hc.hadInterval.sub(1).pow(-1))):showNum(tmp.elm.hc.hadInterval)) for (let i=0;i<6;i++) { let x = "" for (let j=0;j<6;j++) x += "Difficulty Level "+(j+1)+": "+STADIUM_DESCS[HC_CHALLS[i]][j]+".\n\n" diff --git a/js/main/inf.js b/js/main/inf.js index 8b21615e..569cd784 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: " + diff --git a/js/main/nerfs.js b/js/main/nerfs.js index a9f5b054..301fea39 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -167,6 +167,7 @@ function adjustGen(val, type) { 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 (mltActive(4) && (pre_elem||type=="sky")) exp = tmp.elm?(exp.times(ExpantaNum.pow(0.8, ExpantaNum.cbrt(4.5).times(4.5-3)))):new ExpantaNum(0) if ((player.elementary.theory.active||HCTVal("tv").gt(-1))) { if (pre_elem) { if (!tmp.elm) exp = new ExpantaNum(0); diff --git a/main.html b/main.html index 12fcb1c6..918f0fd6 100644 --- a/main.html +++ b/main.html @@ -1958,6 +1958,9 @@

    Misc.


    + + +



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

    @@ -1975,7 +1978,7 @@

    Misc.


    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.




    @@ -1995,7 +1998,8 @@

    Misc.


    @@ -1970,7 +1970,7 @@

    Misc.


    Your Primary Strings have generated you Preons .




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

    @@ -1999,7 +1999,7 @@

    Misc.



    Projected Hadronic Score:

    Best Hadronic Score:

    You have Hadrons , which are providing you with free TP (next TP at Hadrons)
    - Hadron Effect Interval:

    +




      



    diff --git a/style.css b/style.css index 28b6bdcc..587cdb2b 100644 --- a/style.css +++ b/style.css @@ -431,6 +431,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%); From 9c884988dcc4331c14a10f80ba8ec0ecd4c83e5b Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:23:19 -0500 Subject: [PATCH 066/116] v2.0 Beta 9 --- js/constants/achievements.js | 2 ++ js/constants/default.js | 1 + js/constants/elm.js | 5 ++- js/constants/mlt.js | 6 ++-- js/functions/achievements.js | 1 + js/functions/misc.js | 2 ++ js/main/elements.js | 13 ++++++-- js/main/inf.js | 63 +++++++++++++++++++++++++----------- js/main/nerfs.js | 5 +-- js/main/rockets.js | 9 ++++-- js/main/timeSpeed.js | 1 + main.html | 15 ++++++--- 12 files changed, 90 insertions(+), 33 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index e20b659a..47ef677f 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -161,6 +161,7 @@ const ACH_DATA = { 184: "The Entropy Sublimit", 185: "Eternal Torture", 186: "King of the Damned", + 187: "Conquering the Megaverse", }, descs: { 11: "Go at least formatDistance(100).", @@ -322,6 +323,7 @@ const ACH_DATA = { 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.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", diff --git a/js/constants/default.js b/js/constants/default.js index f982d848..6b4c9fe4 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -106,6 +106,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, diff --git a/js/constants/elm.js b/js/constants/elm.js index ca313a88..440bf258 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -1092,7 +1092,10 @@ const SKY_FIELDS = { spinorDesc: "The Skyrmion effect is multiplied.", baseCost: new ExpantaNum(1e43), costMult: new ExpantaNum(1e12), - pionEff(bought) { return ExpantaNum.add(ExpantaNum.cbrt(bought), 1).pow(11) }, + 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) diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 96c6139f..8ca9a3f2 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -42,9 +42,9 @@ const MLT_DATA = { req: new ExpantaNum(400), }, 5: { - desc: "???", - reward: "???", - req: new ExpantaNum(1/0), + desc: "Time Speed is brought to the 3.6th 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), }, } diff --git a/js/functions/achievements.js b/js/functions/achievements.js index c0ed3d39..c71c0b28 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -194,6 +194,7 @@ function checkR18Ach() { 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(); } function updateAchievements() { diff --git a/js/functions/misc.js b/js/functions/misc.js index e2a297c2..7745682c 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) @@ -224,6 +225,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) diff --git a/js/main/elements.js b/js/main/elements.js index d2e0718d..6ecbd37e 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -646,11 +646,20 @@ function updateAngelsChipsHTML(){ tmp.el.chips.setTxt(showNum(player.inf.pantheon.heavenlyChips)); 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(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(){ diff --git a/js/main/inf.js b/js/main/inf.js index fe0ab68c..eeb70461 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -625,8 +625,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"); @@ -635,13 +637,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) @@ -660,13 +662,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))) @@ -699,8 +701,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) @@ -727,20 +731,42 @@ function updateTempPantheon() { let h = player.inf.pantheon.heavenlyChips; 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) - 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); - 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 = d.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 = d.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() { @@ -1001,6 +1027,7 @@ function infTick(diff) { player.inf.pantheon.demonicSouls = player.inf.pantheon.demonicSouls.plus( diff.times(adjustGen(tmp.inf.pantheon.soulGain, "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; } diff --git a/js/main/nerfs.js b/js/main/nerfs.js index 301fea39..8bb9a5c9 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -161,8 +161,9 @@ 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" || type=="foam" || type=="sky" || type=="plasma"; + 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); @@ -180,7 +181,7 @@ function adjustGen(val, type) { if (extremeStadiumActive("spectra")) e = e.pow(2) exp = exp.times(e); } - if (modeActive("extreme") && post_elem && type!="scalar") exp = exp.times(ExpantaNum.gte(player.elementary.theory.tree.upgrades[37]||0, 1)?.95:.9) + 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") && (type=="inflatons"||type=="foam"||type=="sky")) newVal = newVal.div(5) else if (modeActive("hard") && !modeActive("extreme")) newVal = newVal.div(3.2) diff --git a/js/main/rockets.js b/js/main/rockets.js index f7991005..b73fd510 100644 --- a/js/main/rockets.js +++ b/js/main/rockets.js @@ -78,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/timeSpeed.js b/js/main/timeSpeed.js index 0670bf1a..d7ebf727 100644 --- a/js/main/timeSpeed.js +++ b/js/main/timeSpeed.js @@ -55,4 +55,5 @@ function updateTempTimeSpeed() { 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(3.6); } diff --git a/main.html b/main.html index c20ebdd6..53cd0eb4 100644 --- a/main.html +++ b/main.html @@ -1244,8 +1244,8 @@ You have Angels.

    You have Heavenly Chips , translated to a - % boost to the rewards of Spaceon, Solaris, & Eternity, but they also make Demonic Souls in their effect divide by - . + % boost to the rewards of Spaceon, Solaris, & Eternity, but they also make Demonic Souls in their effect + .


    @@ -1255,8 +1255,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.


    From a8e00472797837aa37cdbb6f13242c23c8a213db Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:17:05 -0500 Subject: [PATCH 067/116] v2.0 Beta 10 --- js/constants/achievements.js | 15 ++++++++++++++- js/constants/elm.js | 22 ++++++++++++++++++---- js/constants/mlt.js | 10 +++++++++- js/functions/achievements.js | 7 +++++++ js/main/effects.js | 3 ++- js/main/elementary/foam.js | 13 +++++++++++-- js/main/elementary/theory.js | 12 +++++++----- js/main/elements.js | 4 ++-- js/main/multiverse/mlt.js | 4 +++- main.html | 12 ++++++++++++ 10 files changed, 85 insertions(+), 17 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 47ef677f..4366d979 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -1,5 +1,5 @@ const ACH_DATA = { - rows: 18, + rows: 19, cols: 8, names: { 11: "Quick Sprint", @@ -162,6 +162,11 @@ const ACH_DATA = { 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", }, descs: { 11: "Go at least formatDistance(100).", @@ -324,6 +329,11 @@ const ACH_DATA = { 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: "Complete Multiverse 3 without unlocking Ascension.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -431,5 +441,8 @@ const ACH_DATA = { 183: "All Entropy Upgrades are always unlocked.", 185: "Hyper Pathogen Upgrade scaling is showNum(10)% weaker.", 186: "Unlock Auto-Multiverse Runs.", + 188: "Gain showNum(10)% more Entropy.", + + 193: "Gain showNum(5)% more Multiversal Energy.", } }; \ No newline at end of file diff --git a/js/constants/elm.js b/js/constants/elm.js index 440bf258..5439a7b0 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -731,7 +731,7 @@ const DARK_EXPANDER_COSTS = { 7: new ExpantaNum("1e39000"), 8: new ExpantaNum("1e46500"), 9: new ExpantaNum("1e81725"), - 10: new ExpantaNum(1/0), + 10: new ExpantaNum("1e108000"), } const DARK_EXPANDER_DESCS = { 1: "Unlock a third Gluon Upgrade.", @@ -743,7 +743,7 @@ const DARK_EXPANDER_DESCS = { 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: "???", + 10: "Unlock 2 new rows of Entropy Upgrades.", } const HC_REQ = [new ExpantaNum("e2e7").times(DISTANCES.uni), new ExpantaNum(64)] @@ -901,7 +901,7 @@ const QF_NEXTLAYER_COST = { 5: new ExpantaNum(1e6), } const QFB17_TARGETS = [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] -const ENTROPY_UPGS = 25 +const ENTROPY_UPGS = 33 const ENTROPY_UPG_COSTS = { 1: new ExpantaNum(4), 2: new ExpantaNum(10), @@ -932,6 +932,16 @@ const ENTROPY_UPG_COSTS = { 19: new ExpantaNum(17500), 20: new ExpantaNum(18250), 25: new ExpantaNum(30000), + + 26: new ExpantaNum(250000), + 27: new ExpantaNum(282500), + 28: new ExpantaNum(1/0), + 29: new ExpantaNum(1/0), + + 30: new ExpantaNum(1/0), + 31: new ExpantaNum(1/0), + 32: new ExpantaNum(1/0), + 33: new ExpantaNum(1/0), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, @@ -945,13 +955,17 @@ const ENTROPY_UPG_EFFS = { 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) }, } 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]; + 17,18,19,20,25, + 26,27,28,29, + 30,31,32,33]; const SKY_REQ = [ "4.4e108000026", diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 8ca9a3f2..69c46c71 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -48,7 +48,7 @@ const MLT_DATA = { }, } -const MLT_MILESTONE_NUM = 21; +const MLT_MILESTONE_NUM = 22; const MLT_MILESTONES = [ { @@ -133,6 +133,14 @@ const MLT_MILESTONES = [ }, { 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) }, }, ] diff --git a/js/functions/achievements.js b/js/functions/achievements.js index c71c0b28..c442941f 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -195,6 +195,13 @@ function checkR18Ach() { 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(); + // ach193 is in the Multiverse reset function } function updateAchievements() { diff --git a/js/main/effects.js b/js/main/effects.js index 44a3464f..af0928db 100644 --- a/js/main/effects.js +++ b/js/main/effects.js @@ -37,6 +37,7 @@ 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]); return eff; } \ No newline at end of file diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 419b99f4..9237cf34 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -120,6 +120,12 @@ function getQuantumFoamGain(x) { 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 @@ -127,7 +133,7 @@ function getQFBoostCost(x, b) { 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))) + let cost = start.times(base.pow(amt.pow(exp))).div(getQFBoostCostDiv()) return cost; } @@ -137,7 +143,7 @@ function getQFBoostTarg(x, b) { 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] + 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(); } @@ -259,6 +265,7 @@ function getEntropyEff() { if (entropy.gte(3)) entropy = entropy.sqrt().times(Math.sqrt(3)) let eff = entropy.plus(1).pow(2.5); if (player.elementary.entropy.upgrades.includes(21) && tmp.elm.entropy.upgEff) eff = eff.pow(tmp.elm.entropy.upgEff[21].div(100).plus(1)) + if (player.elementary.entropy.upgrades.includes(27) && tmp.elm.entropy.upgEff) eff = eff.pow(tmp.elm.entropy.upgEff[27]) if (player.elementary.sky.unl && tmp.elm.sky) eff = eff.pow(tmp.elm.sky.spinorEff[9]) if (modeActive("easy")) eff = eff.pow(1.25) return eff; @@ -271,6 +278,7 @@ function getEntropyGainMult() { if (player.elementary.entropy.upgrades.includes(8)) mult = mult.times(tmp.elm.entropy.upgEff[8]) if (player.elementary.entropy.upgrades.includes(10)) mult = mult.times(1.5) if (player.elementary.sky.unl && tmp.elm.sky) mult = mult.times(tmp.elm.sky.spinorEff[3]) + if (tmp.ach[188].has) mult = mult.times(1.1); return mult; } @@ -364,6 +372,7 @@ function buyEntropyUpg(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<=22) return modeActive("extreme"); else if (x<=25) return modeActive("extreme")&&(tmp.ach[183].has||player.elementary.sky.amount.gt(0)); else return false; diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 370c13c5..d35a2f73 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -95,14 +95,14 @@ function updateTempTheoryTree() { 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() + 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)).max(0).min(cap); + 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.costReduc).round(); + 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); @@ -118,6 +118,8 @@ function updateTempTheoryTree() { 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) @@ -377,9 +379,9 @@ function importTree() { if (upgs[key].lte(plyr[key])) continue else { let cap = getTreeUpgCap(key) - let costs = Array.from({length: Math.min(upgs[key].toNumber(), cap.toNumber())}, (v,i) => TREE_UPGS[key].cost(new ExpantaNum(i)).div(tmp.elm.theory.tree.costReduc).round()) + let costs = Array.from({length: Math.min(upgs[key].toNumber(), cap.toNumber())}, (v,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.costReduc).min(totalCost).round() + 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) diff --git a/js/main/elements.js b/js/main/elements.js index 6ecbd37e..6627d629 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1115,7 +1115,7 @@ function updateTheoryTreeHTML(){ tmp.el[pref+i].changeStyle("visibility", (TREE_UPGS[i].unl?TREE_UPGS[i].unl():true)?"visible":"hidden") let cap = getTreeUpgCap(i) 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.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].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++) { @@ -1134,7 +1134,7 @@ function updateTheoryTreeHTMLPerSec() { 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.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[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)))) } } } diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 24094b87..9fc777d6 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -13,6 +13,7 @@ function updateMiscMltStuff() { 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.mlt1reward = MLT_DATA[1].effect(); // Multiverse 1 } @@ -72,12 +73,13 @@ function updateMultiverseLayer() { if (player.distance.lt(DISTANCES.mlt)) return new ExpantaNum(0); let exp = player.distance.logBase(DISTANCES.mlt).sub(1); if (exp.gte(1)) exp = exp.sqrt(); - let gain = ExpantaNum.pow(2, exp).times(ExpantaNum.pow(MULIVERSE_ENERGY_BASE, player.mlt.active)) + let gain = ExpantaNum.pow(2, exp).times(ExpantaNum.pow(MULIVERSE_ENERGY_BASE, player.mlt.active)).times(tmp.ach[193].has?1.05:1) return gain.floor(); } tmp.mlt.layer = new Layer("multiverse", tmp.mlt.can, "normal", true, "mlt", true) if (!tmp.mlt.doGain) tmp.mlt.doGain = function(auto=false) { if (!auto && !player.options.mltnc) if (!confirm("Are you sure you want to do this? It will take some time for you to get back here!")) return "NO"; + if (player.mlt.active == 3 && !player.mlt.mlt3selected.includes("ascension")) tmp.ach[193].grant(); player.mlt.energy = player.mlt.energy.plus(tmp.mlt.layer.gain); player.mlt.totalEnergy = player.mlt.totalEnergy.plus(tmp.mlt.layer.gain); player.mlt.highestCompleted = Math.max(player.mlt.highestCompleted, player.mlt.active); diff --git a/main.html b/main.html index 53cd0eb4..d37dc74a 100644 --- a/main.html +++ b/main.html @@ -2264,6 +2264,18 @@

    Misc.


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




    From a67b2626c105199908a7ad4726064de6c0e1d31e Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 25 Feb 2021 15:02:39 -0500 Subject: [PATCH 068/116] v2.0 Beta 11 --- js/constants/achievements.js | 6 ++++++ js/constants/elm.js | 6 ++++-- js/constants/mlt.js | 5 ++++- js/constants/news.js | 1 + js/functions/achievements.js | 2 ++ js/main/elementary/foam.js | 1 + js/main/elementary/skyrmion.js | 3 +++ js/main/multiverse/mlt.js | 1 + js/main/scaling.js | 2 ++ js/main/tiers.js | 1 + main.html | 4 ++-- 11 files changed, 27 insertions(+), 5 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 4366d979..ae1f745d 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -167,6 +167,8 @@ const ACH_DATA = { 191: "Vantablack Explosion", 192: "The Leetest Titan", 193: "Conqueror of the Lands", + 194: "Nice Beloved Quality", + 195: "Millionaire Multipreneur", }, descs: { 11: "Go at least formatDistance(100).", @@ -334,6 +336,8 @@ const ACH_DATA = { 191: "Purchase showNum(10) Dark Expanders.", 192: "Get showNum(1337) Ranks in Multiverse 1 without unlocking Theories, Hadronic Challenge, Foam, or Skyrmions.", 193: "Complete Multiverse 3 without unlocking Ascension.", + 194: "Reach Tier showNum(69).", + 195: "Gain showNum(1e6) Multiverse Energy in one reset.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -444,5 +448,7 @@ const ACH_DATA = { 188: "Gain showNum(10)% more Entropy.", 193: "Gain showNum(5)% more Multiversal Energy.", + 194: "Tier scaling is 0.69% weaker.", + 195: "Gain showNum(11)% more Entropy.", } }; \ No newline at end of file diff --git a/js/constants/elm.js b/js/constants/elm.js index 5439a7b0..eb79c5c5 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -935,8 +935,8 @@ const ENTROPY_UPG_COSTS = { 26: new ExpantaNum(250000), 27: new ExpantaNum(282500), - 28: new ExpantaNum(1/0), - 29: new ExpantaNum(1/0), + 28: new ExpantaNum(420000), + 29: new ExpantaNum(482500), 30: new ExpantaNum(1/0), 31: new ExpantaNum(1/0), @@ -957,6 +957,8 @@ const ENTROPY_UPG_EFFS = { 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) }, } const ENTROPY_UPG_AUTO_ORDER = [1,2,3,4,21, 5,6,7,8,22, diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 69c46c71..ed0107e9 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -48,7 +48,7 @@ const MLT_DATA = { }, } -const MLT_MILESTONE_NUM = 22; +const MLT_MILESTONE_NUM = 23; const MLT_MILESTONES = [ { @@ -141,6 +141,9 @@ const MLT_MILESTONES = [ 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.", }, ] diff --git a/js/constants/news.js b/js/constants/news.js index d16d1ae9..9aa08143 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -107,6 +107,7 @@ const NEWS_DATA = { 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."], // Distance-based Conditions d1: [ diff --git a/js/functions/achievements.js b/js/functions/achievements.js index c442941f..b7767282 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -202,6 +202,8 @@ 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(); // ach193 is in the Multiverse reset function + if (player.tier.gte(69)) tmp.ach[194].grant(); + // ach195 is in the Multiverse reset function } function updateAchievements() { diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 9237cf34..1fad06cd 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -279,6 +279,7 @@ function getEntropyGainMult() { if (player.elementary.entropy.upgrades.includes(10)) mult = mult.times(1.5) if (player.elementary.sky.unl && tmp.elm.sky) mult = mult.times(tmp.elm.sky.spinorEff[3]) if (tmp.ach[188].has) mult = mult.times(1.1); + if (tmp.ach[195].has) mult = mult.times(1.11); return mult; } diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index 6e5e95bc..c49c4244 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -60,6 +60,7 @@ 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 (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(); @@ -163,6 +164,7 @@ function getPionGain() { 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]) return gain; } @@ -174,6 +176,7 @@ function getSpinorGain() { 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]) return gain; } diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 9fc777d6..e35a5e9b 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -80,6 +80,7 @@ function updateMultiverseLayer() { if (!tmp.mlt.doGain) tmp.mlt.doGain = function(auto=false) { if (!auto && !player.options.mltnc) if (!confirm("Are you sure you want to do this? It will take some time for you to get back here!")) return "NO"; if (player.mlt.active == 3 && !player.mlt.mlt3selected.includes("ascension")) tmp.ach[193].grant(); + if (tmp.mlt.layer.gain.gte(1e6)) tmp.ach[195].grant(); player.mlt.energy = player.mlt.energy.plus(tmp.mlt.layer.gain); player.mlt.totalEnergy = player.mlt.totalEnergy.plus(tmp.mlt.layer.gain); player.mlt.highestCompleted = Math.max(player.mlt.highestCompleted, player.mlt.active); diff --git a/js/main/scaling.js b/js/main/scaling.js index 645a3dcd..4996a408 100644 --- a/js/main/scaling.js +++ b/js/main/scaling.js @@ -25,6 +25,8 @@ 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"]()) } diff --git a/js/main/tiers.js b/js/main/tiers.js index 40a99ca3..7b662c18 100644 --- a/js/main/tiers.js +++ b/js/main/tiers.js @@ -165,6 +165,7 @@ function getTierFP() { 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 } diff --git a/main.html b/main.html index d37dc74a..d1b0e87c 100644 --- a/main.html +++ b/main.html @@ -2267,8 +2267,8 @@

    Misc.


    - - + + From a90737d229bf741ca9474c23ce050ad034ea9077 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sat, 27 Feb 2021 13:26:49 -0500 Subject: [PATCH 069/116] v2.0 Beta 12 --- js/constants/achievements.js | 7 ++++++- js/constants/elm.js | 10 ++++++---- js/constants/mlt.js | 7 ++++++- js/functions/achievements.js | 2 ++ js/main/elementary/foam.js | 9 ++++++++- js/main/elementary/skyrmion.js | 13 +++++++++++-- js/main/elements.js | 6 +++--- js/main/multiverse/mlt.js | 6 ++++-- js/main/scaling.js | 4 ++++ js/update.js | 4 ++-- main.html | 14 +++++++------- 11 files changed, 59 insertions(+), 23 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index ae1f745d..7b8512d9 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -169,6 +169,8 @@ const ACH_DATA = { 193: "Conqueror of the Lands", 194: "Nice Beloved Quality", 195: "Millionaire Multipreneur", + 196: "Hadron Manipulation", + 197: "Billionaire X", }, descs: { 11: "Go at least formatDistance(100).", @@ -337,7 +339,9 @@ const ACH_DATA = { 192: "Get showNum(1337) Ranks in Multiverse 1 without unlocking Theories, Hadronic Challenge, Foam, or Skyrmions.", 193: "Complete Multiverse 3 without unlocking Ascension.", 194: "Reach Tier showNum(69).", - 195: "Gain showNum(1e6) Multiverse Energy in one reset.", + 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 15.", + 197: "Gain showNum(1e9) Multiversal Energy in one reset.", }, rewards: { 12: "Acceleration is showNum(10)% higherboolean(extreme, and Rank Cheapeners are +0.5x stronger for each achievement gotten).", @@ -450,5 +454,6 @@ const ACH_DATA = { 193: "Gain showNum(5)% more Multiversal Energy.", 194: "Tier scaling is 0.69% weaker.", 195: "Gain showNum(11)% more Entropy.", + 197: "Entropy Upgrades are showNum(5)% cheaper.", } }; \ No newline at end of file diff --git a/js/constants/elm.js b/js/constants/elm.js index eb79c5c5..02bfae0e 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -938,10 +938,10 @@ const ENTROPY_UPG_COSTS = { 28: new ExpantaNum(420000), 29: new ExpantaNum(482500), - 30: new ExpantaNum(1/0), - 31: new ExpantaNum(1/0), - 32: new ExpantaNum(1/0), - 33: new ExpantaNum(1/0), + 30: new ExpantaNum(580000), + 31: new ExpantaNum(1.03e6), + 32: new ExpantaNum(1.125e6), + 33: new ExpantaNum(1.133e6), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, @@ -959,6 +959,8 @@ const ENTROPY_UPG_EFFS = { 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, diff --git a/js/constants/mlt.js b/js/constants/mlt.js index ed0107e9..2339abd3 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -48,7 +48,7 @@ const MLT_DATA = { }, } -const MLT_MILESTONE_NUM = 23; +const MLT_MILESTONE_NUM = 24; const MLT_MILESTONES = [ { @@ -144,6 +144,11 @@ const MLT_MILESTONES = [ }, { 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) }, }, ] diff --git a/js/functions/achievements.js b/js/functions/achievements.js index b7767282..5f826c2e 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -204,6 +204,8 @@ function checkR19Ach() { // ach193 is in the Multiverse reset function 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(15) && player.elementary.hc.active) tmp.ach[196].grant(); + // ach197 is in the Multiverse reset function } function updateAchievements() { diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 1fad06cd..58597d1b 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -361,10 +361,17 @@ function getOmegaEff() { return eff } +function getEntropyUpgCost(x) { + let cost = ENTROPY_UPG_COSTS[x]||new Decimal(1/0); + if (hasMltMilestone(24) && tmp.mlt) cost = cost.div(tmp.mlt.mil24reward); + if (tmp.ach[197].has) cost = cost.div(1.05); + return cost; +} + function buyEntropyUpg(x) { if (!player.elementary.entropy.unl || mltActive(3)) return; if (player.elementary.entropy.upgrades.includes(x)) return; - let cost = ENTROPY_UPG_COSTS[x]||new ExpantaNum(1/0) + 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) diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index c49c4244..8ad42a5b 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -61,6 +61,7 @@ function getSkyGain() { 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(); @@ -156,8 +157,14 @@ function getLeptonStacks(x) { 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 = player.elementary.sky.amount.pow(2).times(5) + 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]) @@ -165,11 +172,12 @@ function getPionGain() { 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 = player.elementary.sky.amount.pow(2).times(5) + 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]) @@ -177,6 +185,7 @@ function getSpinorGain() { 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; } diff --git a/js/main/elements.js b/js/main/elements.js index 6627d629..3958ae41 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -891,8 +891,7 @@ function updateStatisticsHTML(){ } if (statTab == "rankTiers") { - tmp.el.rankStats.setDisplay(player.rank.gt(1)) - tmp.el.tierStats.setDisplay(player.tier.gt(0)) + tmp.el.rankTierStats.setDisplay(player.rank.gt(1)||player.tier.gt(0)) for (let i=0;i @@ -2271,10 +2270,10 @@

    Misc.


    - - - - + + + +




    @@ -2309,7 +2308,8 @@

    Misc.


    Destabilizing the topology of your multiverse will force an Entropy & Elementary reset, and will also reset your Purge Power, Elementary Particles, Fermions, Bosons, Photon & Gluon Upgrades, Supersymmetric Particles, Theory Tree Upgrades, Strings (and Entangled Strings), Preon amount, Acceleron amount, Inflatons, Hadrons, Entropy, & Entropy Upgrades (except the first one).



    - You have Skyrmions, which multiply the Quark/Lepton exponents by

    + You have Skyrmions, which multiply the Quark/Lepton exponents by
    + Base Pion/Spinor Gain: /s.

    From aab32708b143f2fb7f55ad9fa0b35d9c89417a42 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 28 Feb 2021 13:47:18 -0500 Subject: [PATCH 070/116] v2.0 Beta 13 --- js/constants/achievements.js | 4 +++- js/constants/news.js | 16 +++++++++++++--- js/functions/achievements.js | 3 ++- js/main/multiverse/mlt.js | 1 - 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 7b8512d9..ce50e078 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -171,6 +171,7 @@ const ACH_DATA = { 195: "Millionaire Multipreneur", 196: "Hadron Manipulation", 197: "Billionaire X", + 198: "Overlord of Everything", }, descs: { 11: "Go at least formatDistance(100).", @@ -337,11 +338,12 @@ const ACH_DATA = { 191: "Purchase showNum(10) Dark Expanders.", 192: "Get showNum(1337) Ranks in Multiverse 1 without unlocking Theories, Hadronic Challenge, Foam, or Skyrmions.", - 193: "Complete Multiverse 3 without unlocking Ascension.", + 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 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).", diff --git a/js/constants/news.js b/js/constants/news.js index 9aa08143..bdf459db 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -1,10 +1,20 @@ var eheheTimes = 0; +var eheheResetAmt = 0; +var eheheResetReq = 1000; var ehehe = function() { - eheheTimes++; - if (eheheTimes>=1000000) return 'EHEHE '+eheheTimes+': OKAY STOP. I GIVE UP. YOURE CRAZY AND WHY WOULD YOU DO THIS?!?!?!??!?!!?!' - else if (eheheTimes>=1000) return 'EHEHE '+eheheTimes+': SERIOUSLY STOP IT YOURE INSANE!' + 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 (eheheTimes Date: Mon, 1 Mar 2021 19:18:24 -0500 Subject: [PATCH 071/116] v1.2 Beta 13 Patch 1 --- js/constants/news.js | 2 +- js/main/elements.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/js/constants/news.js b/js/constants/news.js index bdf459db..4575a90c 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -108,7 +108,7 @@ const NEWS_DATA = { m89: ["For all the tickers saying you are Canadian: Canadian or not, you are enjoying this game."], m90: ["In 2073, we will be at v193.6, with over 200 prestige layers, and the game will cost over $20.00"], m91: ["Well yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually yes, but actually -INFINITE LOOP-"], - m92: ["Check the console after pressing here..."], + m92: ["Check the console after pressing here..."], 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'], diff --git a/js/main/elements.js b/js/main/elements.js index 3958ae41..236923d5 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1168,7 +1168,7 @@ function updatePreonsHTML(){ 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(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())) + 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))))) } } From dc10c295fa402a5e669218a1e4443b1dfc8a72c0 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 2 Mar 2021 18:19:55 -0500 Subject: [PATCH 072/116] v2.0 Beta 14 --- js/constants/modes.js | 14 +++++++------- js/main/elementary/foam.js | 1 + js/main/multiverse/mlt.js | 2 +- js/main/multiverse/quilts.js | 4 +++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/js/constants/modes.js b/js/constants/modes.js index 7ae246dc..b4989db0 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -4,7 +4,7 @@ const MODEBALANCES = { balanceCheck: false, }, aau: { // 2 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, aau_hard: { // 3 @@ -25,7 +25,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd: { // 8 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_hard: { // 9 @@ -33,7 +33,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_aau: { // 10 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_aau_hard: { // 11 @@ -54,7 +54,7 @@ const MODEBALANCES = { balanceCheck: false, }, easy: { // 16 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, easy_hard: { // 17 @@ -62,7 +62,7 @@ const MODEBALANCES = { balanceCheck: false }, aau_easy: { // 18 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_easy_hard: { // 19 @@ -86,7 +86,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_easy: { // 24 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_easy_hard: { // 25 @@ -94,7 +94,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_aau_easy: { // 26 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_aau_easy_hard: { // 27 diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 58597d1b..91991942 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -365,6 +365,7 @@ function getEntropyUpgCost(x) { let cost = ENTROPY_UPG_COSTS[x]||new Decimal(1/0); if (hasMltMilestone(24) && tmp.mlt) cost = cost.div(tmp.mlt.mil24reward); if (tmp.ach[197].has) cost = cost.div(1.05); + if (modeActive("easy") && x>=26) cost = cost.div(1.1); return cost; } diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index dc0a55fa..544ccbed 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -74,7 +74,7 @@ function updateMultiverseLayer() { if (player.distance.lt(DISTANCES.mlt)) return new ExpantaNum(0); let exp = player.distance.logBase(DISTANCES.mlt).sub(1); if (exp.gte(1)) exp = exp.sqrt(); - let gain = ExpantaNum.pow(2, exp).times(ExpantaNum.pow(MULIVERSE_ENERGY_BASE, player.mlt.active)).times(tmp.ach[193].has?1.05:1) + let gain = ExpantaNum.pow(2, exp).times(ExpantaNum.pow(MULIVERSE_ENERGY_BASE, player.mlt.active)).times(tmp.ach[193].has?1.05:1).times(modeActive("easy")?1.5:1) return gain.floor(); } tmp.mlt.layer = new Layer("multiverse", tmp.mlt.can, "normal", true, "mlt", true) diff --git a/js/main/multiverse/quilts.js b/js/main/multiverse/quilts.js index 44be0a6f..cfadccd3 100644 --- a/js/main/multiverse/quilts.js +++ b/js/main/multiverse/quilts.js @@ -16,7 +16,7 @@ function updateQuilts() { } function getQuiltUpgPower() { - let power = new ExpantaNum(1); + let power = new ExpantaNum(modeActive("easy")?1.1:1); if (hasMltMilestone(17)) power = power.plus(tmp.mlt.mil17reward.times(10)) return power; } @@ -28,6 +28,8 @@ function getQuiltStrength(x) { 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 (base.gte(4)) base = base.root(1.5).times(1.6); return base.plus(1).div(2); From 808c2facb7bc7976b33446fde201bdff9808e8b7 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Wed, 3 Mar 2021 19:51:37 -0500 Subject: [PATCH 073/116] v2.0 Beta 15 --- js/main/multiverse/mlt.js | 1 + js/main/multiverse/quilts.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 544ccbed..1808236a 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -75,6 +75,7 @@ function updateMultiverseLayer() { let exp = player.distance.logBase(DISTANCES.mlt).sub(1); if (exp.gte(1)) exp = exp.sqrt(); let gain = ExpantaNum.pow(2, exp).times(ExpantaNum.pow(MULIVERSE_ENERGY_BASE, player.mlt.active)).times(tmp.ach[193].has?1.05:1).times(modeActive("easy")?1.5:1) + if (modeActive("hard") && gain.gte(1.5)) gain = gain.div(1.5); return gain.floor(); } tmp.mlt.layer = new Layer("multiverse", tmp.mlt.can, "normal", true, "mlt", true) diff --git a/js/main/multiverse/quilts.js b/js/main/multiverse/quilts.js index cfadccd3..7cbd436d 100644 --- a/js/main/multiverse/quilts.js +++ b/js/main/multiverse/quilts.js @@ -16,7 +16,7 @@ function updateQuilts() { } function getQuiltUpgPower() { - let power = new ExpantaNum(modeActive("easy")?1.1:1); + 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; } @@ -29,6 +29,7 @@ function getQuiltStrength(x) { 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); From f18a212663ad263ff0d8e2ee3114eadd6b442ef7 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 4 Mar 2021 18:24:53 -0500 Subject: [PATCH 074/116] v2.0 Beta 16 --- js/constants/automation.js | 8 ++++++++ js/constants/mlt.js | 2 ++ js/main/auto.js | 15 +++++++++++++++ js/main/extreme/magma.js | 32 +++++++++++++++++++++++++++----- js/main/extreme/plasma.js | 15 ++++++++++++--- js/main/multiverse/mlt.js | 3 ++- 6 files changed, 66 insertions(+), 9 deletions(-) diff --git a/js/constants/automation.js b/js/constants/automation.js index 2c628e6c..a446d0de 100644 --- a/js/constants/automation.js +++ b/js/constants/automation.js @@ -112,6 +112,12 @@ const AUTOMATORS = { 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 = { @@ -137,6 +143,8 @@ const AUTOMATOR_BORDER = { pion_field: "#a875d1", spinor_field: "#a875d1", multiverse_runs: "#837eed", + magma: "#4d3636", + plasma: "#49364d", } const AUTOMATOR_X = { diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 2339abd3..9bd1d9da 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -54,6 +54,7 @@ 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", @@ -75,6 +76,7 @@ const MLT_MILESTONES = [ }, { 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", diff --git a/js/main/auto.js b/js/main/auto.js index add4b954..f0cad0a1 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -104,6 +104,19 @@ function furnaceAutoTick(){ } } +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(); } @@ -309,6 +322,8 @@ function autoTick(diff) { energyAutoTick() pionSpinorAutoTick() multivAutoTick() + magmaAutoTick() + plasmaAutoTick() } function autoPerSec() { diff --git a/js/main/extreme/magma.js b/js/main/extreme/magma.js index d4b1aeab..ff8e71b4 100644 --- a/js/main/extreme/magma.js +++ b/js/main/extreme/magma.js @@ -36,10 +36,17 @@ function getMagmaReq() { return req; } -function magmaSearch() { +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; - player.magma.amount = player.magma.amount.plus(1); + if (max) player.magma.amount = player.magma.amount.max(getMagmaBulk()); + else player.magma.amount = player.magma.amount.plus(1); } function getMagmaReformReq() { @@ -60,10 +67,25 @@ function getMagmaReformReq2() { return req; } -function reformMagma() { +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; - player.magma.amount = player.magma.amount.sub(req); - player.magma.ref = player.magma.ref.plus(1); + 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 index 15502d6a..a4582eae 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -35,17 +35,26 @@ function getPlasmaBoostReq() { 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() { +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; - player.plasma.whiteFlame = player.plasma.whiteFlame.sub(cost); - player.plasma.boosts = player.plasma.boosts.plus(1); + 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 = { diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 1808236a..6c92b13c 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -31,6 +31,7 @@ function setMultiverseResetFunction() { 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.furnChalls = prev.furnChalls; } if (hasMltMilestone(2)) { player.elementary.times = new ExpantaNum(1); @@ -193,7 +194,7 @@ function setupMltMilestoneTable() { for (let r=1;r<=MLT_MILESTONE_NUM;r++) { let id = r-1; data += "Req: "+showNum(MLT_MILESTONES[id].req)+" Total Multiversal Energy" - data += ""+MLT_MILESTONES[id].desc + data += ""+((modeActive("extreme")&&MLT_MILESTONES[id].extremeDesc)?MLT_MILESTONES[id].extremeDesc:MLT_MILESTONES[id].desc) if (MLT_MILESTONES[id].effectDesc) data += "

    " data += "" } From 0a091ae872de905bd7f46cae8d357ee01d395554 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sat, 6 Mar 2021 15:28:01 -0500 Subject: [PATCH 075/116] v2.0 Beta 17 --- js/constants/mlt.js | 6 ++++-- js/main/extreme/fn.js | 1 + js/main/extreme/plasma.js | 1 + js/main/multiverse/mlt.js | 5 ++++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 9bd1d9da..f76ea907 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -20,8 +20,8 @@ const MLT_DATA = { 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). Stadium Challenge completions are also reset.", - reward: "Stadium Challenge rewards are much stronger, but their challenge goals are much higher. Distance boosts Skyrmion gain.", + 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), @@ -83,6 +83,7 @@ const MLT_MILESTONES = [ }, { 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.", @@ -100,6 +101,7 @@ const MLT_MILESTONES = [ }, { 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.", diff --git a/js/main/extreme/fn.js b/js/main/extreme/fn.js index c9124277..a3d82dac 100644 --- a/js/main/extreme/fn.js +++ b/js/main/extreme/fn.js @@ -218,6 +218,7 @@ function updateCoalEff() { if (tmp.ach[35].has) tmp.fn.eff = tmp.fn.eff.times(2); if (player.tr.upgrades.includes(25) && !HCCBA("noTRU")) tmp.fn.eff = tmp.fn.eff.times(2); if (player.tr.upgrades.includes(31) && !HCCBA("noTRU")) tmp.fn.eff = tmp.fn.eff.times(1.8); + if (hasMltMilestone(10)) tmp.fn.eff = tmp.fn.eff.pow(2); if (extremeStadiumActive("spectra", 2)) tmp.fn.eff = new ExpantaNum(0) } diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js index a4582eae..2a5c00be 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -10,6 +10,7 @@ function updateTempPlasma() { 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]) return exp; diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 6c92b13c..e0953489 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -31,7 +31,10 @@ function setMultiverseResetFunction() { 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.furnChalls = prev.furnChalls; + if (modeActive("extreme")) { + player.extremeStad = prev.extremeStad; + player.furnChalls = prev.furnChalls; + } } if (hasMltMilestone(2)) { player.elementary.times = new ExpantaNum(1); From 1520ca0f7abf2b4b54e1d053c9ef78d37dc0e248 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 7 Mar 2021 14:41:31 -0500 Subject: [PATCH 076/116] v2.0 Beta 18 --- js/constants/mlt.js | 1 + js/main/extreme/magma.js | 1 + js/main/extreme/plasma.js | 18 +++++++++++++++--- main.html | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/js/constants/mlt.js b/js/constants/mlt.js index f76ea907..7414189b 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -105,6 +105,7 @@ const MLT_MILESTONES = [ }, { 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.", diff --git a/js/main/extreme/magma.js b/js/main/extreme/magma.js index ff8e71b4..bde517e1 100644 --- a/js/main/extreme/magma.js +++ b/js/main/extreme/magma.js @@ -27,6 +27,7 @@ function getMagmaReformEff() { 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; } diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js index 2a5c00be..26011dc6 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -21,6 +21,7 @@ function getWhiteFlameGain() { 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); return gain; } @@ -59,8 +60,8 @@ function buyPlasmaBoost(max=false) { } const PLASMA_BOOSTS = { - upgs: 9, - rows: 3, + upgs: 10, + rows: 4, cols: 3, 1: { type: "plasmic", @@ -94,7 +95,11 @@ const PLASMA_BOOSTS = { type: "plasmic", desc: "Boost Pion/Spinor gain.", baseEff: new ExpantaNum(1), - eff: function(amt) { return amt.plus(1).root(10) }, + 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: { @@ -125,6 +130,13 @@ const PLASMA_BOOSTS = { 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(1, ExpantaNum.div(1, amt.plus(1).log10().plus(1).log10().plus(1))) }, + effD: function(e) { return showNum(e.sub(1).times(100))+"% slower" }, + }, } function setupPlasmaBoosts() { diff --git a/main.html b/main.html index 06b8493f..bf3405be 100644 --- a/main.html +++ b/main.html @@ -492,7 +492,7 @@ You have , which are making your acceleration & maximum velocity boost themselves (log(x+1))



    You have , which boosts the effect of rockets by From 4ee54149a9a190223fb8bee553b9d9854b85961c Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 8 Mar 2021 12:35:28 -0500 Subject: [PATCH 077/116] v2.0 Beta 19 --- js/constants/achievements.js | 2 +- js/constants/mlt.js | 6 ++++-- js/main/elementary/theory.js | 11 ++++++++++- js/main/extreme/plasma.js | 33 +++++++++++++++++++++++++++------ js/main/multiverse/mlt.js | 5 ++++- js/main/nerfs.js | 5 ++++- 6 files changed, 50 insertions(+), 12 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index ce50e078..47b0abaa 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -449,7 +449,7 @@ const ACH_DATA = { 178: 'The Infinity popup is permanently disabled if you have Auto-Endorsements unlocked, and unlock the "Max Pion & Spinor Fields" button.', 183: "All Entropy Upgrades are always unlocked.", - 185: "Hyper Pathogen Upgrade scaling is showNum(10)% weaker.", + 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.", diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 7414189b..6c6d05ee 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -38,6 +38,7 @@ const MLT_DATA = { }, 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.4 (unaffected by any depth reductions), which also affects Pion & Spinor gain.", reward: "Unlock 3 new Strings.", req: new ExpantaNum(400), }, @@ -116,15 +117,16 @@ const MLT_MILESTONES = [ 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.", + desc: "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.", + desc: "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.", diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index d35a2f73..bbe99208 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -317,7 +317,16 @@ function getAccelGain() { 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)) gain = gain.times(getStringEff(1)); + 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 } diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js index 26011dc6..9134f010 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -22,6 +22,8 @@ function getWhiteFlameGain() { 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))); return gain; } @@ -60,21 +62,29 @@ function buyPlasmaBoost(max=false) { } const PLASMA_BOOSTS = { - upgs: 10, + upgs: 11, rows: 4, cols: 3, 1: { type: "plasmic", desc: "The Extreme mode nerf to Foam gain starts later.", baseEff: new ExpantaNum(1), - eff: function(amt) { return amt.plus(1).log10().times(tmp.fn.pl.exp).plus(1).pow(3) }, + 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) { return amt.plus(1).log10().sqrt().div(2).plus(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: { @@ -88,7 +98,11 @@ const PLASMA_BOOSTS = { type: "gleaming", desc: "Make all Rank Cheapener cost scalings start later.", baseEff: new ExpantaNum(0), - eff: function(amt) { return amt.plus(1).log10().plus(1).log10().times(250) }, + 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: { @@ -134,8 +148,15 @@ const PLASMA_BOOSTS = { type: "gleaming", desc: "The Magma cost increases slower.", baseEff: new ExpantaNum(0), - eff: function(amt) { return ExpantaNum.sub(1, ExpantaNum.div(1, amt.plus(1).log10().plus(1).log10().plus(1))) }, - effD: function(e) { return showNum(e.sub(1).times(100))+"% slower" }, + 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" }, }, } diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index e0953489..c67d740f 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -80,6 +80,7 @@ function updateMultiverseLayer() { if (exp.gte(1)) exp = exp.sqrt(); let gain = ExpantaNum.pow(2, exp).times(ExpantaNum.pow(MULIVERSE_ENERGY_BASE, player.mlt.active)).times(tmp.ach[193].has?1.05:1).times(modeActive("easy")?1.5:1) if (modeActive("hard") && gain.gte(1.5)) gain = gain.div(1.5); + if (tmp.ach[185].has && modeActive("extreme")) gain = gain.times(1.2); return gain.floor(); } tmp.mlt.layer = new Layer("multiverse", tmp.mlt.can, "normal", true, "mlt", true) @@ -147,7 +148,7 @@ function getMltDisplay(m) { let display = "Multiverse "+(m==0?"Prime":m)+"

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

    " - display += (m==0?"":"Effect: ")+data.desc+"
    " + 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" @@ -191,6 +192,8 @@ function startMultiverse(m) { 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 = ""; diff --git a/js/main/nerfs.js b/js/main/nerfs.js index 8bb9a5c9..c1c12d94 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -168,7 +168,10 @@ function adjustGen(val, type) { 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 (mltActive(4) && (pre_elem||type=="sky")) exp = tmp.elm?(exp.times(ExpantaNum.pow(0.8, ExpantaNum.cbrt(4.5).times(4.5-3)))):new ExpantaNum(0) + if (mltActive(4) && (pre_elem||type=="sky")) { + let depth = modeActive("extreme")?4.4: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); From 935432381475bd5b31cf069acffb203898406df5 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Wed, 10 Mar 2021 17:42:30 -0500 Subject: [PATCH 078/116] v2.0 Beta 20 --- js/constants/elm.js | 4 ++++ js/constants/mlt.js | 1 + js/main/elementary/theory.js | 5 +++-- js/main/elements.js | 6 ++++-- js/main/multiverse/mlt.js | 2 +- js/main/timeSpeed.js | 2 +- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/js/constants/elm.js b/js/constants/elm.js index 02bfae0e..3a33d3ef 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -733,6 +733,10 @@ const DARK_EXPANDER_COSTS = { 9: new ExpantaNum("1e81725"), 10: new ExpantaNum("1e108000"), } +const EXTREME_DE_COSTS = { + 9: new ExpantaNum("1e68500"), + //10: new ExpantaNum("1e80250"), Need to make Entropy Upgrades more expensive first :) +} const DARK_EXPANDER_DESCS = { 1: "Unlock a third Gluon Upgrade.", 2: "Unlock two more Strings.", diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 6c6d05ee..154d0014 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -44,6 +44,7 @@ const MLT_DATA = { }, 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), }, diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index bbe99208..5506f258 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -345,8 +345,9 @@ function getMaxDEs() { function darkExpand() { if (!player.elementary.theory.accelerons.unl) return if (player.elementary.theory.accelerons.expanders.gte(getMaxDEs())) 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()]) + 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()]: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) } diff --git a/js/main/elements.js b/js/main/elements.js index 236923d5..425bd850 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1183,8 +1183,9 @@ function updateAcceleronsHTML(){ let accEff = getAccelEff() 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>=getMaxDEs()), th: (!(player.elementary.theory.accelerons.amount.lt(DARK_EXPANDER_COSTS[next])||next-1>=getMaxDEs()))}) - tmp.el.darkExp.setHTML((next-1>=getMaxDEs())?"MAXED":(DARK_EXPANDER_DESCS[next]+"
    Cost: "+showNum(DARK_EXPANDER_COSTS[next])+" Accelerons")) + let cost = (modeActive("extreme")&&EXTREME_DE_COSTS[next])?EXTREME_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]+"
    ") @@ -1561,6 +1562,7 @@ function updateOverallMultiverseHTML() { 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"].setTxt(((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") { diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index c67d740f..406fd447 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -200,7 +200,7 @@ function setupMltMilestoneTable() { for (let r=1;r<=MLT_MILESTONE_NUM;r++) { let id = r-1; data += "" - data += "" } diff --git a/js/main/timeSpeed.js b/js/main/timeSpeed.js index d7ebf727..0d6899a0 100644 --- a/js/main/timeSpeed.js +++ b/js/main/timeSpeed.js @@ -55,5 +55,5 @@ function updateTempTimeSpeed() { 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(3.6); + if (mltActive(5)) tmp.timeSpeed = tmp.timeSpeed.root(modeActive("extreme")?Math.PI:3.6); } From 23833c52a7c66b8acd2cde3e251173b69ff126aa Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 11 Mar 2021 20:29:27 -0500 Subject: [PATCH 079/116] v2.0 Beta 21 --- js/constants/achievements.js | 2 +- js/constants/elm.js | 9 ++++++--- js/constants/mlt.js | 2 +- js/main/elementary/foam.js | 2 ++ js/main/extreme/plasma.js | 17 +++++++++++++++-- js/main/nerfs.js | 6 +++++- js/main/timeSpeed.js | 4 ++++ main.html | 2 ++ 8 files changed, 36 insertions(+), 8 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 47b0abaa..6cebbed7 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -446,7 +446,7 @@ const ACH_DATA = { 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, and unlock the "Max Pion & Spinor Fields" button.', + 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).", diff --git a/js/constants/elm.js b/js/constants/elm.js index 3a33d3ef..9b635193 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -735,7 +735,7 @@ const DARK_EXPANDER_COSTS = { } const EXTREME_DE_COSTS = { 9: new ExpantaNum("1e68500"), - //10: new ExpantaNum("1e80250"), Need to make Entropy Upgrades more expensive first :) + 10: new ExpantaNum("1e80500"), } const DARK_EXPANDER_DESCS = { 1: "Unlock a third Gluon Upgrade.", @@ -905,7 +905,7 @@ const QF_NEXTLAYER_COST = { 5: new ExpantaNum(1e6), } const QFB17_TARGETS = [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] -const ENTROPY_UPGS = 33 +const ENTROPY_UPGS = 35 const ENTROPY_UPG_COSTS = { 1: new ExpantaNum(4), 2: new ExpantaNum(10), @@ -941,11 +941,13 @@ const ENTROPY_UPG_COSTS = { 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(1/0), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, @@ -973,7 +975,8 @@ const ENTROPY_UPG_AUTO_ORDER = [1,2,3,4,21, 23,24, 17,18,19,20,25, 26,27,28,29, - 30,31,32,33]; + 30,31,32,33, + 34,35]; const SKY_REQ = [ "4.4e108000026", diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 154d0014..72522b62 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -38,7 +38,7 @@ const MLT_DATA = { }, 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.4 (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), }, diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 91991942..0d16c58c 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -280,6 +280,7 @@ function getEntropyGainMult() { if (player.elementary.sky.unl && tmp.elm.sky) mult = mult.times(tmp.elm.sky.spinorEff[3]) if (tmp.ach[188].has) mult = mult.times(1.1); if (tmp.ach[195].has) mult = mult.times(1.11); + if (player.elementary.entropy.upgrades.includes(34) && modeActive("extreme")) mult = mult.times(1.5); return mult; } @@ -382,6 +383,7 @@ 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; diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js index 9134f010..51f86022 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -12,7 +12,13 @@ function getPlasmaExp() { 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 (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]); + + if (modeActive("extreme") && tmp.ach[178].has && exp.lt(250)) { + if (exp.lt(250/3)) exp = exp.times(2); + else exp = ExpantaNum.sub(250, ExpantaNum.div(250/3, ExpantaNum.div(250, ExpantaNum.sub(250, exp).times(1.5).max(0.001)))) + } return exp; } @@ -62,7 +68,7 @@ function buyPlasmaBoost(max=false) { } const PLASMA_BOOSTS = { - upgs: 11, + upgs: 12, rows: 4, cols: 3, 1: { @@ -158,6 +164,13 @@ const PLASMA_BOOSTS = { 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() { diff --git a/js/main/nerfs.js b/js/main/nerfs.js index c1c12d94..8515deaa 100644 --- a/js/main/nerfs.js +++ b/js/main/nerfs.js @@ -169,7 +169,7 @@ function adjustGen(val, type) { 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 (mltActive(4) && (pre_elem||type=="sky")) { - let depth = modeActive("extreme")?4.4:4.5 + 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))) { @@ -193,6 +193,10 @@ function adjustGen(val, type) { 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/timeSpeed.js b/js/main/timeSpeed.js index 0d6899a0..96505612 100644 --- a/js/main/timeSpeed.js +++ b/js/main/timeSpeed.js @@ -56,4 +56,8 @@ function updateTempTimeSpeed() { 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/main.html b/main.html index bf3405be..12a623ad 100644 --- a/main.html +++ b/main.html @@ -2268,12 +2268,14 @@

    Misc.


    + +
    Req: "+showNum(MLT_MILESTONES[id].req)+" Total Multiversal Energy"+((modeActive("extreme")&&MLT_MILESTONES[id].extremeDesc)?MLT_MILESTONES[id].extremeDesc:MLT_MILESTONES[id].desc) + data += "" if (MLT_MILESTONES[id].effectDesc) data += "

    " data += "





    From 5d7c9fe4130ff85a2f323a93696a077b0931c7ed Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sat, 13 Mar 2021 20:51:12 -0500 Subject: [PATCH 080/116] v2.0 Beta 22 --- js/constants/achievements.js | 1 + js/constants/elm.js | 2 +- js/main/collapse.js | 1 + js/main/extreme/plasma.js | 8 +++++--- main.html | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 6cebbed7..227965e1 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -453,6 +453,7 @@ const ACH_DATA = { 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 Energy.", 194: "Tier scaling is 0.69% weaker.", 195: "Gain showNum(11)% more Entropy.", diff --git a/js/constants/elm.js b/js/constants/elm.js index 9b635193..609c2389 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -947,7 +947,7 @@ const ENTROPY_UPG_COSTS = { 31: new ExpantaNum(1.03e6), 32: new ExpantaNum(1.125e6), 33: new ExpantaNum(1.133e6), - 35: new ExpantaNum(1/0), + 35: new ExpantaNum(7.75e8), } const ENTROPY_UPG_EFFS = { 2: function() { return ExpantaNum.pow(1.5, player.elementary.theory.depth) }, diff --git a/js/main/collapse.js b/js/main/collapse.js index 660ac534..5aa7356e 100644 --- a/js/main/collapse.js +++ b/js/main/collapse.js @@ -29,6 +29,7 @@ function getCadaverEff() { ); 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; } diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js index 51f86022..6184f0fc 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -15,9 +15,10 @@ function getPlasmaExp() { 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]); - if (modeActive("extreme") && tmp.ach[178].has && exp.lt(250)) { - if (exp.lt(250/3)) exp = exp.times(2); - else exp = ExpantaNum.sub(250, ExpantaNum.div(250/3, ExpantaNum.div(250, ExpantaNum.sub(250, exp).times(1.5).max(0.001)))) + 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; } @@ -30,6 +31,7 @@ function getWhiteFlameGain() { 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; } diff --git a/main.html b/main.html index 12a623ad..e52f736e 100644 --- a/main.html +++ b/main.html @@ -2275,7 +2275,7 @@

    Misc.


    - +




    From 30e1b0b203a6376cfae7a717fca0fea212189a77 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 14 Mar 2021 21:01:21 -0400 Subject: [PATCH 081/116] v2.0 Beta 23 --- js/constants/achievements.js | 2 +- js/functions/achievements.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 227965e1..dd5276bc 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -341,7 +341,7 @@ const ACH_DATA = { 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 15.", + 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).", }, diff --git a/js/functions/achievements.js b/js/functions/achievements.js index 28c78a38..d885b9e8 100644 --- a/js/functions/achievements.js +++ b/js/functions/achievements.js @@ -204,7 +204,7 @@ function checkR19Ach() { 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(15) && player.elementary.hc.active) tmp.ach[196].grant(); + 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(); } From ec70ef2e3bc993ab0a2fb4627a11358391ab90fe Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 16 Mar 2021 22:54:49 -0400 Subject: [PATCH 082/116] v2.0 Beta 24 --- js/constants/mlt.js | 1 + js/constants/modes.js | 16 ++++++++-------- js/functions/important.js | 1 + js/main/elements.js | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/js/constants/mlt.js b/js/constants/mlt.js index 72522b62..bb6dd69f 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -63,6 +63,7 @@ const MLT_MILESTONES = [ }, { 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.", diff --git a/js/constants/modes.js b/js/constants/modes.js index b4989db0..c9ea21d8 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -118,11 +118,11 @@ const MODEBALANCES = { balanceCheck: false, }, extreme: { // 32 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_extreme: { // 33 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, na_extreme: { // 34 @@ -134,11 +134,11 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_extreme: { // 36 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_aau_extreme: { // 37 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_na_extreme: { // 38 @@ -150,11 +150,11 @@ const MODEBALANCES = { balanceCheck: false, }, easy_extreme: { // 40 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_easy_extreme: { // 41 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, na_easy_extreme: { // 42 @@ -166,11 +166,11 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_easy_extreme: { // 44 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_aau_easy_extreme: { // 45 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_na_easy_extreme: { // 46 diff --git a/js/functions/important.js b/js/functions/important.js index 4650197d..5f71da54 100644 --- a/js/functions/important.js +++ b/js/functions/important.js @@ -70,6 +70,7 @@ 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 diff --git a/js/main/elements.js b/js/main/elements.js index 425bd850..f7586046 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1562,7 +1562,7 @@ function updateOverallMultiverseHTML() { 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"].setTxt(((modeActive("extreme")&&MLT_MILESTONES[r-1].extremeDesc)?MLT_MILESTONES[r-1].extremeDesc:MLT_MILESTONES[r-1].desc)); + tmp.el["mltMil"+r+"desc"].setTxt(((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") { From dd8675d4d9068b5df5e6674c6b14659182b9191d Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 18 Mar 2021 21:53:34 -0400 Subject: [PATCH 083/116] v2.0 Beta 25 --- js/constants/mlt.js | 6 ++++-- js/main/elements.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/js/constants/mlt.js b/js/constants/mlt.js index bb6dd69f..24fc4418 100644 --- a/js/constants/mlt.js +++ b/js/constants/mlt.js @@ -119,12 +119,14 @@ const MLT_MILESTONES = [ 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, and gain 100x more White Flame.", + 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, and gain 20x more White Flame for each Multiverse Milestone from this point onward.", + 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.", diff --git a/js/main/elements.js b/js/main/elements.js index f7586046..cc75ea9e 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1562,7 +1562,7 @@ function updateOverallMultiverseHTML() { 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"].setTxt(((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))); + 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") { From 622e08ccedd3300ee9e52673f83340428e85f52c Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Fri, 19 Mar 2021 22:19:36 -0400 Subject: [PATCH 084/116] v2.0 Beta 26 --- js/main/elements.js | 2 +- js/main/hd.js | 6 ++++++ main.html | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/js/main/elements.js b/js/main/elements.js index cc75ea9e..00813309 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1289,7 +1289,7 @@ function updateMainEnergyTabHTML(){ }) tmp.el.motive.setTxt(showNum(tmp.hd.motive)) tmp.el.nextMotive.setHTML(tmp.hd.motive.lte(((player.energyUpgs.includes(24)) ? (tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : new ExpantaNum(0)) : new ExpantaNum(0)).max(0))?("["+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<=30;i++) { + for (let i=1;i<=31;i++) { let cost = getEnergyUpgCost(i) tmp.el["energyUpg"+i].setClasses({ btn: true, diff --git a/js/main/hd.js b/js/main/hd.js index c263c5b6..9ec429bf 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -29,6 +29,7 @@ const ENERGY_UPG_COSTS = { 28: new ExpantaNum(1.5e124), 29: new ExpantaNum(5e215), 30: new ExpantaNum(1e226), + 31: new ExpantaNum('2e336'), } function getEnergyUpgCost(n){ @@ -177,6 +178,7 @@ function calcEnergyUpgrades(){ 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) @@ -202,6 +204,9 @@ function calcEnergyUpgrades(){ 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); } function updateMotive(){ @@ -304,6 +309,7 @@ function isEnergyUpgShown(x) { 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<=31) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); return false; } diff --git a/main.html b/main.html index e52f736e..1f6eb1e9 100644 --- a/main.html +++ b/main.html @@ -475,6 +475,9 @@ + + +




    The currently at Level , and so it is generating Energy/sec, with a limit of Energy

    From 929503394fb114d045929760e56d825878b42325 Mon Sep 17 00:00:00 2001 From: Sundex1 Date: Sat, 20 Mar 2021 13:13:45 -0400 Subject: [PATCH 085/116] v2.0 Beta 27 Pitch --- js/constants/achievements.js | 41 ++++++++++++++++++------------------ js/main/effects.js | 5 ++++- js/main/elementary/theory.js | 10 ++++----- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index dd5276bc..89e15973 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -118,7 +118,7 @@ const ACH_DATA = { 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,7 +145,7 @@ 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", @@ -154,7 +154,7 @@ const ACH_DATA = { 176: "Entering Reality", 177: "Softcaps mean NOTHING", 178: "Multiverse Conquered", - + 181: "Two In One Deal", 182: "Multiverse of Madness", 183: "Fermionic Embassy", @@ -163,7 +163,7 @@ const ACH_DATA = { 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", @@ -290,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.", @@ -299,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.", @@ -308,7 +308,7 @@ 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.", @@ -317,16 +317,16 @@ const ACH_DATA = { 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.", + 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.", @@ -335,7 +335,7 @@ const ACH_DATA = { 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.", @@ -425,38 +425,39 @@ const ACH_DATA = { 132: "The Gauge Force Effect is doubled.", 133: "Unlock Auto-Elementaries.", 135: "The Purge Power effect is halved.", - + 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.", 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 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 Energy.", 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)% cheaper.", } -}; \ No newline at end of file +}; diff --git a/js/main/effects.js b/js/main/effects.js index af0928db..e4b5561a 100644 --- a/js/main/effects.js +++ b/js/main/effects.js @@ -38,6 +38,9 @@ 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 (modeActive("extreme+hikers_dream")) { + if (tmp.ach[196].has && tmp.mlt) eff = eff.times(tmp.mlt.quilts[3].eff2) + } if (player.elementary.entropy.upgrades.includes(26) && tmp.elm.entropy) eff = eff.pow(tmp.elm.entropy.upgEff[26]); return eff; -} \ No newline at end of file +} diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index 5506f258..c105fe80 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -24,7 +24,7 @@ function updateTempTheoriverse() { 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 (modeActive("extreme")) { + if (modeActive("extreme")) { if (player.elementary.theory.depth.lt(4)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(0.75) if (player.elementary.theory.depth.gte(5)) tmp.elm.theory.nerf = tmp.elm.theory.nerf.pow(1.25) } @@ -120,14 +120,14 @@ function updateTempTheoryTree() { } 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() +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() @@ -361,8 +361,8 @@ function buyGluon3(col, max=false) { player.elementary.theory.points = player.elementary.theory.points.plus(ExpantaNum.mul(10, bulk)) } -function hasDE(n) { - return player.elementary.theory.accelerons.expanders.gte(n)&&player.elementary.theory.accelerons.unl +function hasDE(n) { + return player.elementary.theory.accelerons.expanders.gte(n)&&player.elementary.theory.accelerons.unl } // Tree Export/Import functions From 452bbe6b6c5c324a72a5c28119f1690fccb3c047 Mon Sep 17 00:00:00 2001 From: Sundex1 Date: Sat, 20 Mar 2021 15:24:05 -0400 Subject: [PATCH 086/116] Update effects.js --- js/main/effects.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/main/effects.js b/js/main/effects.js index e4b5561a..a8ab5936 100644 --- a/js/main/effects.js +++ b/js/main/effects.js @@ -38,9 +38,9 @@ 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 (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) } - if (player.elementary.entropy.upgrades.includes(26) && tmp.elm.entropy) eff = eff.pow(tmp.elm.entropy.upgEff[26]); return eff; } From 55b20764c23b118b5e8b4651c4d8379450ae1e7d Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 21 Mar 2021 15:37:13 -0400 Subject: [PATCH 087/116] v2.0 Beta 28 --- js/main/elements.js | 2 +- js/main/hd.js | 13 ++++++++++++- main.html | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/js/main/elements.js b/js/main/elements.js index 00813309..67a62b6f 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1289,7 +1289,7 @@ function updateMainEnergyTabHTML(){ }) tmp.el.motive.setTxt(showNum(tmp.hd.motive)) tmp.el.nextMotive.setHTML(tmp.hd.motive.lte(((player.energyUpgs.includes(24)) ? (tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : new ExpantaNum(0)) : new ExpantaNum(0)).max(0))?("["+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<=31;i++) { + for (let i=1;i<=33;i++) { let cost = getEnergyUpgCost(i) tmp.el["energyUpg"+i].setClasses({ btn: true, diff --git a/js/main/hd.js b/js/main/hd.js index 9ec429bf..080e1018 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -30,6 +30,8 @@ const ENERGY_UPG_COSTS = { 29: new ExpantaNum(5e215), 30: new ExpantaNum(1e226), 31: new ExpantaNum('2e336'), + 32: new ExpantaNum('2e447'), + 33: new ExpantaNum('1e451'), } function getEnergyUpgCost(n){ @@ -207,6 +209,10 @@ function calcEnergyUpgrades(){ 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); } function updateMotive(){ @@ -256,6 +262,7 @@ function updateTempHikersDream() { 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) @@ -309,7 +316,7 @@ function isEnergyUpgShown(x) { 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<=31) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); + else if (x<=33) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); return false; } @@ -317,6 +324,7 @@ 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); 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) } @@ -324,6 +332,7 @@ function baseIncline(d) { 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); let incl = d.gte(1e3) ? d.div(1e3).log10().div(10).plus(1).div(90) : new ExpantaNum(0) return incl.max(0) } @@ -407,6 +416,7 @@ 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 } @@ -434,6 +444,7 @@ function getNewGenCost() { 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/main.html b/main.html index 1f6eb1e9..664aefaa 100644 --- a/main.html +++ b/main.html @@ -477,6 +477,8 @@ + +


    From 4643dfc772065863697ac51bd28c93a15118eae4 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 22 Mar 2021 17:01:43 -0400 Subject: [PATCH 088/116] v2.0 Beta 29 --- js/constants/elm.js | 3 +++ js/constants/news.js | 1 + js/main/elementary/theory.js | 2 +- js/main/elements.js | 4 ++-- js/main/hd.js | 7 ++++++- main.html | 1 + 6 files changed, 14 insertions(+), 4 deletions(-) diff --git a/js/constants/elm.js b/js/constants/elm.js index 609c2389..30f7959c 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -737,6 +737,9 @@ const EXTREME_DE_COSTS = { 9: new ExpantaNum("1e68500"), 10: new ExpantaNum("1e80500"), } +const HD_DE_COSTS = { + 7: new ExpantaNum("1e38750"), +} const DARK_EXPANDER_DESCS = { 1: "Unlock a third Gluon Upgrade.", 2: "Unlock two more Strings.", diff --git a/js/constants/news.js b/js/constants/news.js index 4575a90c..ef6873b1 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -118,6 +118,7 @@ const NEWS_DATA = { 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.")], // Distance-based Conditions d1: [ diff --git a/js/main/elementary/theory.js b/js/main/elementary/theory.js index c105fe80..481b87f1 100644 --- a/js/main/elementary/theory.js +++ b/js/main/elementary/theory.js @@ -345,7 +345,7 @@ function getMaxDEs() { 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()]:DARK_EXPANDER_COSTS[player.elementary.theory.accelerons.expanders.plus(1).toNumber()]; + 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) diff --git a/js/main/elements.js b/js/main/elements.js index 67a62b6f..8b03f329 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1183,7 +1183,7 @@ function updateAcceleronsHTML(){ let accEff = getAccelEff() 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 - let cost = (modeActive("extreme")&&EXTREME_DE_COSTS[next])?EXTREME_DE_COSTS[next]:DARK_EXPANDER_COSTS[next]; + 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)) @@ -1289,7 +1289,7 @@ function updateMainEnergyTabHTML(){ }) tmp.el.motive.setTxt(showNum(tmp.hd.motive)) tmp.el.nextMotive.setHTML(tmp.hd.motive.lte(((player.energyUpgs.includes(24)) ? (tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : new ExpantaNum(0)) : new ExpantaNum(0)).max(0))?("["+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<=33;i++) { + for (let i=1;i<=34;i++) { let cost = getEnergyUpgCost(i) tmp.el["energyUpg"+i].setClasses({ btn: true, diff --git a/js/main/hd.js b/js/main/hd.js index 080e1018..32f1b1e5 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -32,6 +32,7 @@ const ENERGY_UPG_COSTS = { 31: new ExpantaNum('2e336'), 32: new ExpantaNum('2e447'), 33: new ExpantaNum('1e451'), + 34: new ExpantaNum('3e472'), } function getEnergyUpgCost(n){ @@ -213,6 +214,8 @@ function calcEnergyUpgrades(){ 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); } function updateMotive(){ @@ -316,7 +319,7 @@ function isEnergyUpgShown(x) { 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<=33) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); + else if (x<=34) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); return false; } @@ -325,6 +328,7 @@ 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) } @@ -333,6 +337,7 @@ 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) } diff --git a/main.html b/main.html index 664aefaa..03d83ebe 100644 --- a/main.html +++ b/main.html @@ -479,6 +479,7 @@ +


    From 555ab861aa1fa646c61c30caaac45956c0ba0fe6 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 23 Mar 2021 21:41:16 -0400 Subject: [PATCH 089/116] v2.0 Beta 30 --- js/constants/elm.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/constants/elm.js b/js/constants/elm.js index 30f7959c..1d87419f 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -739,6 +739,7 @@ const EXTREME_DE_COSTS = { } const HD_DE_COSTS = { 7: new ExpantaNum("1e38750"), + 8: new ExpantaNum("1e44350"), } const DARK_EXPANDER_DESCS = { 1: "Unlock a third Gluon Upgrade.", From ebf6baaa54e33f8529dbc482c8e005ae260e2db6 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Wed, 24 Mar 2021 21:13:34 -0400 Subject: [PATCH 090/116] v2.0 Beta 31 --- js/main/elementary/foam.js | 1 + js/main/elements.js | 2 +- js/main/hd.js | 5 ++++- main.html | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 0d16c58c..4ebd8990 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -281,6 +281,7 @@ function getEntropyGainMult() { if (tmp.ach[188].has) mult = mult.times(1.1); if (tmp.ach[195].has) mult = mult.times(1.11); if (player.elementary.entropy.upgrades.includes(34) && modeActive("extreme")) mult = mult.times(1.5); + if (modeActive("hikers_dream")) if (player.energyUpgs.includes(35) && tmp.hd) mult = mult.times(tmp.hd.enerUpgs[35]); return mult; } diff --git a/js/main/elements.js b/js/main/elements.js index 8b03f329..6e77441d 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1289,7 +1289,7 @@ function updateMainEnergyTabHTML(){ }) tmp.el.motive.setTxt(showNum(tmp.hd.motive)) tmp.el.nextMotive.setHTML(tmp.hd.motive.lte(((player.energyUpgs.includes(24)) ? (tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : new ExpantaNum(0)) : new ExpantaNum(0)).max(0))?("["+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<=34;i++) { + for (let i=1;i<=35;i++) { let cost = getEnergyUpgCost(i) tmp.el["energyUpg"+i].setClasses({ btn: true, diff --git a/js/main/hd.js b/js/main/hd.js index 32f1b1e5..13f5e1ce 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -33,6 +33,7 @@ const ENERGY_UPG_COSTS = { 32: new ExpantaNum('2e447'), 33: new ExpantaNum('1e451'), 34: new ExpantaNum('3e472'), + 35: new ExpantaNum('4e543'), } function getEnergyUpgCost(n){ @@ -216,6 +217,8 @@ function calcEnergyUpgrades(){ 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(3).plus(1); } function updateMotive(){ @@ -319,7 +322,7 @@ function isEnergyUpgShown(x) { 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<=34) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); + else if (x<=35) return player.achievements.includes(181) || player.mlt.totalEnergy.gt(0); return false; } diff --git a/main.html b/main.html index 03d83ebe..dfd1ff0a 100644 --- a/main.html +++ b/main.html @@ -480,6 +480,7 @@ +


    From c86ab5cc2414ee296b2e9928fefe6f4ae0727051 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Fri, 26 Mar 2021 19:10:24 -0400 Subject: [PATCH 091/116] v2.0 Beta 32 --- js/constants/achievements.js | 2 +- js/main/elementary/foam.js | 5 ++++- js/main/hd.js | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 89e15973..8d97c351 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -454,7 +454,7 @@ const ACH_DATA = { 188: "Gain showNum(10)% more Entropy.", 191: "boolean(extreme,White Flame is gained 5x faster.)", - 193: "Gain showNum(5)% more Multiversal Energy.", + 193: "Gain showNum(5)% more Multiversal Energyboolean(hikers_dream, and showNup[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)", diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index 4ebd8990..f8250bce 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -281,7 +281,10 @@ function getEntropyGainMult() { if (tmp.ach[188].has) mult = mult.times(1.1); if (tmp.ach[195].has) mult = mult.times(1.11); if (player.elementary.entropy.upgrades.includes(34) && modeActive("extreme")) mult = mult.times(1.5); - if (modeActive("hikers_dream")) if (player.energyUpgs.includes(35) && tmp.hd) mult = mult.times(tmp.hd.enerUpgs[35]); + if (modeActive("hikers_dream")) { + if (player.energyUpgs.includes(35) && tmp.hd) mult = mult.times(tmp.hd.enerUpgs[35]); + if (tmp.ach[193].has) mult = mult.times(1.1); + } return mult; } diff --git a/js/main/hd.js b/js/main/hd.js index 13f5e1ce..59b285a7 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -218,7 +218,7 @@ function calcEnergyUpgrades(){ tmp.hd.enerUpgs[34] = player.rank.plus(1).root(10); - tmp.hd.enerUpgs[35] = player.energy.plus(1).log10().plus(1).log10().div(3).plus(1); + tmp.hd.enerUpgs[35] = player.energy.plus(1).log10().plus(1).log10().div(2.5).plus(1); } function updateMotive(){ From c40840aacc7bc1eb8f52c7de155c2445d6789d8e Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sat, 27 Mar 2021 15:51:23 -0400 Subject: [PATCH 092/116] v2.0 Beta 33 --- js/constants/achievements.js | 2 +- js/main/elementary/foam.js | 2 +- js/main/elements.js | 2 +- js/main/hd.js | 20 ++++++++++++++++---- main.html | 4 ++++ 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 8d97c351..1c0c90fb 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -454,7 +454,7 @@ const ACH_DATA = { 188: "Gain showNum(10)% more Entropy.", 191: "boolean(extreme,White Flame is gained 5x faster.)", - 193: "Gain showNum(5)% more Multiversal Energyboolean(hikers_dream, and showNup[10]% more Entropy).", + 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)", diff --git a/js/main/elementary/foam.js b/js/main/elementary/foam.js index f8250bce..87ea397c 100644 --- a/js/main/elementary/foam.js +++ b/js/main/elementary/foam.js @@ -283,7 +283,7 @@ function getEntropyGainMult() { if (player.elementary.entropy.upgrades.includes(34) && modeActive("extreme")) mult = mult.times(1.5); if (modeActive("hikers_dream")) { if (player.energyUpgs.includes(35) && tmp.hd) mult = mult.times(tmp.hd.enerUpgs[35]); - if (tmp.ach[193].has) mult = mult.times(1.1); + if (tmp.ach[193].has && !modeActive("extreme")) mult = mult.times(1.1); } return mult; } diff --git a/js/main/elements.js b/js/main/elements.js index 6e77441d..2d649e60 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1289,7 +1289,7 @@ function updateMainEnergyTabHTML(){ }) tmp.el.motive.setTxt(showNum(tmp.hd.motive)) tmp.el.nextMotive.setHTML(tmp.hd.motive.lte(((player.energyUpgs.includes(24)) ? (tmp.hd.enerUpgs ? tmp.hd.enerUpgs[24] : new ExpantaNum(0)) : new ExpantaNum(0)).max(0))?("["+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<=35;i++) { + for (let i=1;i<=36;i++) { let cost = getEnergyUpgCost(i) tmp.el["energyUpg"+i].setClasses({ btn: true, diff --git a/js/main/hd.js b/js/main/hd.js index 59b285a7..f534b4a2 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -34,6 +34,7 @@ const ENERGY_UPG_COSTS = { 33: new ExpantaNum('1e451'), 34: new ExpantaNum('3e472'), 35: new ExpantaNum('4e543'), + 36: new ExpantaNum('1e587'), } function getEnergyUpgCost(n){ @@ -120,6 +121,12 @@ 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.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]) @@ -130,6 +137,8 @@ function updateEnergyLoss(){ } function calcEnergyUpgrades(){ + tmp.hd.tb = getThrusterBoost(); + if (!tmp.hd.enerUpgs) tmp.hd.enerUpgs = {} tmp.hd.enerUpgs[1] = getOptimizationOneEffect() @@ -145,7 +154,7 @@ function calcEnergyUpgrades(){ 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) @@ -154,7 +163,7 @@ function calcEnergyUpgrades(){ 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) @@ -162,7 +171,7 @@ function calcEnergyUpgrades(){ 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) @@ -177,7 +186,7 @@ function calcEnergyUpgrades(){ 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[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 @@ -219,6 +228,8 @@ function calcEnergyUpgrades(){ 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) } function updateMotive(){ @@ -323,6 +334,7 @@ function isEnergyUpgShown(x) { 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; } diff --git a/main.html b/main.html index dfd1ff0a..79faba59 100644 --- a/main.html +++ b/main.html @@ -482,6 +482,10 @@ + + + +




    The currently at Level , and so it is generating Energy/sec, with a limit of Energy

    From a46a26b0c0566342e1dcabef6e04865cec8a964d Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 28 Mar 2021 14:43:08 -0400 Subject: [PATCH 093/116] v2.0 Beta 34 --- js/constants/achievements.js | 2 +- js/main/elements.js | 2 +- js/main/extreme/plasma.js | 4 ++-- js/main/hd.js | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 1c0c90fb..3b1df6a3 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -458,6 +458,6 @@ const ACH_DATA = { 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)% cheaper.", + 197: "Entropy Upgrades are showNum(5)% cheaperboolean(hikers_dream-extreme, and Thrusters V is 12.5% stronger).", } }; diff --git a/js/main/elements.js b/js/main/elements.js index 2d649e60..0f65b800 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -834,7 +834,7 @@ function updatePlasma() { }) } let data = PLASMA_BOOSTS; - for (let i=1;i<=data.upgs;i++) { + 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]; diff --git a/js/main/extreme/plasma.js b/js/main/extreme/plasma.js index 6184f0fc..e9f59b6f 100644 --- a/js/main/extreme/plasma.js +++ b/js/main/extreme/plasma.js @@ -4,7 +4,7 @@ function updateTempPlasma() { 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; + 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() { @@ -70,7 +70,7 @@ function buyPlasmaBoost(max=false) { } const PLASMA_BOOSTS = { - upgs: 12, + upgs() { return 12 }, rows: 4, cols: 3, 1: { diff --git a/js/main/hd.js b/js/main/hd.js index f534b4a2..01a34db4 100644 --- a/js/main/hd.js +++ b/js/main/hd.js @@ -230,6 +230,7 @@ function calcEnergyUpgrades(){ 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(){ From 4041aadbe39dad749b84953d4473398bce77f4cb Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 29 Mar 2021 20:11:19 -0400 Subject: [PATCH 094/116] v2.0 Beta 35 --- js/constants/achievements.js | 1 + js/constants/elm.js | 57 +++++++++++++--------- js/constants/modes.js | 50 +++++++++---------- js/functions/formatting.js | 10 ++++ js/main/auto.js | 5 +- js/main/elementary/hadronic_challenges.js | 58 +++++++++++++++++++---- js/main/elements.js | 17 +++++-- js/main/inf.js | 1 + js/main/multiverse/mlt.js | 7 ++- js/main/multiverse/quilts.js | 4 +- js/update.js | 3 +- main.html | 20 +++++--- style.css | 30 ++++++++++++ 13 files changed, 190 insertions(+), 73 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 3b1df6a3..701e0e5e 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -459,5 +459,6 @@ const ACH_DATA = { 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, and you can extend the Hadronic Challenge goal to your best-ever Distance.", } }; diff --git a/js/constants/elm.js b/js/constants/elm.js index 1d87419f..4bc46b53 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -754,34 +754,40 @@ const DARK_EXPANDER_DESCS = { 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"], - flamis: ["range", [0, 6], "inf"], - cranius: ["range", [0, 6], "inf"], - spectra: ["range", [0, 6], "inf"], - aqualon: ["range", [0, 6], "inf"], - nullum: ["range", [0, 6], "inf"], - quantron: ["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], + 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], + tv: ["range", [-1, 10], "elm", true], + q1: ["checkbox", undefined, "mlt", ach198check], + q2: ["checkbox", undefined, "mlt", ach198check], + q3: ["checkbox", undefined, "mlt", ach198check], } const HC_TITLE = { goal: "Challenge goal (in uni)", + goalMlt: "Challenge goal in mlt", noTRU: "Time Reversal Upgrades do nothing", noCad: "You do not gain Cadavers", noPU: "Pathogen Upgrades do nothing", @@ -804,9 +810,14 @@ const HC_TITLE = { noDS: "Derivative Shifts do nothing", noDB: "Derivative Boosts do nothing", tv: "Trapped in Theoriverse Depth (disabled: -1)", + q1: "Multiversal Quilt 1 is disabled", + q2: "Multiversal Quilt 2 is disabled", + q3: "Multiversal Quilt 3 is disabled", } 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 = { diff --git a/js/constants/modes.js b/js/constants/modes.js index c9ea21d8..641c0623 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -1,6 +1,6 @@ const MODEBALANCES = { hard: { // 1 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, aau: { // 2 @@ -8,7 +8,7 @@ const MODEBALANCES = { balanceCheck: false, }, aau_hard: { // 3 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, na: { // 4 @@ -29,7 +29,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_hard: { // 9 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_aau: { // 10 @@ -37,7 +37,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_aau_hard: { // 11 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_na: { // 12 @@ -58,7 +58,7 @@ const MODEBALANCES = { balanceCheck: false }, easy_hard: { // 17 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_easy: { // 18 @@ -66,7 +66,7 @@ const MODEBALANCES = { balanceCheck: false }, aau_easy_hard: { // 19 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, na_easy: { // 20 @@ -90,7 +90,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_easy_hard: { // 25 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_aau_easy: { // 26 @@ -98,7 +98,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_aau_easy_hard: { // 27 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_na_easy: { // 28 @@ -182,7 +182,7 @@ const MODEBALANCES = { balanceCheck: false, }, hikers_dream: { // 48 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, hard_hikers_dream: { // 49 @@ -190,7 +190,7 @@ const MODEBALANCES = { balanceCheck: false, }, aau_hikers_dream: { // 50 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, aau_hard_hikers_dream: { // 51 @@ -211,7 +211,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_hikers_dream: { // 56 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_hard_hikers_dream: { // 57 @@ -219,7 +219,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_aau_hikers_dream: { // 58 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_aau_hard_hikers_dream: { // 59 @@ -240,7 +240,7 @@ const MODEBALANCES = { balanceCheck: false, }, easy_hikers_dream: { // 64 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, easy_hard_hikers_dream: { // 65 @@ -248,7 +248,7 @@ const MODEBALANCES = { balanceCheck: false, }, aau_easy_hikers_dream: { // 66 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_easy_hard_hikers_dream: { // 67 @@ -256,7 +256,7 @@ const MODEBALANCES = { balanceCheck: false }, aau_easy_hikers_dream: { // 68 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_easy_hard_hikers_dream: { // 69 @@ -272,7 +272,7 @@ const MODEBALANCES = { balanceCheck: false }, absurd_easy_hikers_dream: { // 72 - balancing: "balanced up to first multiverse", + balancing: "balanced up toendgame", balanceCheck: false, }, absurd_easy_hard_hikers_dream: { // 73 @@ -280,7 +280,7 @@ const MODEBALANCES = { balanceCheck: false, }, absurd_aau_easy_hikers_dream: { // 74 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false, }, absurd_aau_easy_hard_hikers_dream: { // 75 @@ -304,11 +304,11 @@ const MODEBALANCES = { balanceCheck: false }, extreme_hikers_dream: { // 80 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_extreme_hikers_dream: { // 81 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, // 82 - NA Extreme Dream (unknown) @@ -317,11 +317,11 @@ const MODEBALANCES = { balanceCheck: false }, absurd_extreme_hikers_dream: { // 84 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_aau_extreme_hikers_dream: { // 85 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, // 86 - Absurd NA Extreme Dream (unknown) @@ -330,11 +330,11 @@ const MODEBALANCES = { balanceCheck: false }, easy_extreme_hikers_dream: { // 88 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, aau_easy_extreme_hikers_dream: { // 89 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, na_easy_extreme_hikers_dream: { // 90 @@ -346,11 +346,11 @@ const MODEBALANCES = { balanceCheck: false }, absurd_easy_extreme_hikers_dream: { // 92 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_aau_easy_extreme_hikers_dream: { // 93 - balancing: "balanced up to first multiverse", + balancing: "balanced up to endgame", balanceCheck: false }, absurd_na_easy_extreme_hikers_dream: { // 94 diff --git a/js/functions/formatting.js b/js/functions/formatting.js index 289ce376..01280184 100644 --- a/js/functions/formatting.js +++ b/js/functions/formatting.js @@ -113,4 +113,14 @@ function formatGain(amt, gain, name, isDist, gainNotIncluded) { 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/main/auto.js b/js/main/auto.js index f0cad0a1..fb979c24 100644 --- a/js/main/auto.js +++ b/js/main/auto.js @@ -152,7 +152,10 @@ function endorseAutoTick(){ 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) } } diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js index ee7120e4..b3a78f1b 100644 --- a/js/main/elementary/hadronic_challenges.js +++ b/js/main/elementary/hadronic_challenges.js @@ -1,6 +1,7 @@ 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) @@ -15,7 +16,9 @@ function updateTempHC() { 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) + 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() @@ -64,8 +67,16 @@ function getProjectedHadronicScore() { // Elementary Modifiers score = score.times(new ExpantaNum(getHCSelector("tv")).plus(2).pow(0.25)).plus(new ExpantaNum(getHCSelector("tv")).plus(1).div(20)) + // 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) + // Goal Modifier - score = score.times(new ExpantaNum(getHCSelector("goal")).log10().div(Math.log10(Number.MAX_VALUE)).log10().plus(1)) + 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 @@ -92,33 +103,56 @@ 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() + 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") player.elementary.hc.selectors[name] = el.el.checked - else if (type=="text"||type=="number"||type=="range") { + 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() - 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]) + 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() { - return (!(!player.elementary.hc.active)) && player.distance.gte(ExpantaNum.mul(getHCSelector("goal"), DISTANCES.uni)) + 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) { @@ -134,8 +168,11 @@ function updateHCSelectorInputs(reset=false) { } } +function HCMltMode() { return Object.keys(HC_DATA).filter(a => 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 @@ -147,7 +184,8 @@ function startHC() { return } player.elementary.hc.active = !player.elementary.hc.active - elmReset(true) + if (mltMode) mltReset(true, true, true); + else elmReset(true); updateHCSelectorInputs() } diff --git a/js/main/elements.js b/js/main/elements.js index 0f65b800..b391a57c 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1251,28 +1251,39 @@ 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(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))) + 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;sWARNING: 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 += "
    " diff --git a/main.html b/main.html index 79faba59..5e90792c 100644 --- a/main.html +++ b/main.html @@ -2051,6 +2051,11 @@

    Misc.


    Elementary Selectors + + +


    @@ -2059,6 +2064,7 @@

    Misc.


    +


    " + 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>=152) toRet.push(m); + } + return toRet; } \ No newline at end of file diff --git a/js/update.js b/js/update.js index 26bc941d..464ffde0 100644 --- a/js/update.js +++ b/js/update.js @@ -45,6 +45,9 @@ function setupHTML() { } achTable.setHTML(table); + // Setup Mode Combo Table + setupModeComboTable(); + // Rank/Tier Stats let rankTierTable = new Element("rankTierStats") table = "
    " diff --git a/main.html b/main.html index 22556c4f..b87563e6 100644 --- a/main.html +++ b/main.html @@ -231,33 +231,39 @@

    diff --git a/style.css b/style.css index e21d5f70..59e05e53 100644 --- a/style.css +++ b/style.css @@ -76,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%); @@ -1806,6 +1825,13 @@ table { 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; From 0e8cdeae9948af6d19b88db2d0e33e6d76d2aabe Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 6 Apr 2021 10:09:07 -0400 Subject: [PATCH 099/116] v2.0 Beta 39 Patch 1 --- js/constants/modes.js | 32 ++++++++++++++++---------------- js/constants/news.js | 3 ++- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/js/constants/modes.js b/js/constants/modes.js index a89d7023..480e06f9 100644 --- a/js/constants/modes.js +++ b/js/constants/modes.js @@ -267,46 +267,46 @@ const MODEBALANCES = { balancing: "balanced up to endgame", balanceCheck: false }, - aau_easy_hard_hikers_dream: { // 68 + na_easy_hard_hikers_dream: { // 68 balancing: "balanced up to first multiverse", - balanceCheck: true - }, - aau_na_easy_hikers_dream: { // 69 - balancing: "balanced up to endgame", - balanceCheck: false + balanceCheck: true, }, - aau_na_easy_hard_hikers_dream: { // 70 + aau_easy_hard_hikers_dream: { // 69 balancing: "balanced up to first multiverse", balanceCheck: true }, - aau_na_easy_hikers_dream: { // 71 - 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: { // 72 + aau_na_easy_hard_hikers_dream: { // 71 balancing: "balanced up to first multiverse", balanceCheck: true }, - absurd_easy_hikers_dream: { // 73 + absurd_easy_hikers_dream: { // 72 balancing: "balanced up toendgame", balanceCheck: false, }, - absurd_easy_hard_hikers_dream: { // 74 + absurd_easy_hard_hikers_dream: { // 73 balancing: "balanced up to first multiverse", balanceCheck: true, }, - absurd_aau_easy_hikers_dream: { // 75 + absurd_aau_easy_hikers_dream: { // 74 balancing: "balanced up to endgame", balanceCheck: false, }, - absurd_aau_easy_hard_hikers_dream: { // 76 + absurd_aau_easy_hard_hikers_dream: { // 75 balancing: "balanced up to first multiverse", balanceCheck: true }, - absurd_na_easy_hikers_dream: { // 77 + 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 diff --git a/js/constants/news.js b/js/constants/news.js index 42f0400f..bc62efa2 100644 --- a/js/constants/news.js +++ b/js/constants/news.js @@ -121,7 +121,8 @@ const NEWS_DATA = { 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 has its own High Gods. Those people tend not to survive very long around here."], + 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: [ From b4fab459ead7b3294f407ff08ac44665c7735c4a Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 6 Apr 2021 22:14:11 -0400 Subject: [PATCH 100/116] v2.0 Release Setup --- js/game.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/game.js b/js/game.js index f45182a6..023e6d63 100644 --- a/js/game.js +++ b/js/game.js @@ -33,7 +33,7 @@ var gluonTab = "r"; var thTab = "tv"; var enTab = "mainEN"; var autoRobotTarget = 0 -var betaID = "beta2.0"; +var betaID = ""; //beta2.0 var completedModeCombos = []; var needUpdate = true var updating = false From 60924ef911ee3864fcd8a6e4505399c6d7f2e383 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 6 Apr 2021 22:15:41 -0400 Subject: [PATCH 101/116] v2.0 Changelog Update --- changelog.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/changelog.html b/changelog.html index d91d4511..2baaea7c 100644 --- a/changelog.html +++ b/changelog.html @@ -173,4 +173,13 @@
  • Fixed a few bugs
  • Options are now cross-save compatible
  • + v2.0: Multiverse Update
    +
      +
    • Implemented Multiverses
    • +
    • Added a few QoL options
    • +
    • Fixed a few bugs
    • +
    • Increased save limit to 96
    • +
    • Added post-game stuff
    • +
    From 12e9c177755872a59920d725b75cea10b7ad102d Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Thu, 8 Apr 2021 11:03:52 -0400 Subject: [PATCH 102/116] v2.0 Patch 1 --- js/main/elements.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/js/main/elements.js b/js/main/elements.js index d593f018..00ca42c3 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -270,16 +270,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] } } From 151b3dcbe92dfa54a484e882add5d2ae4f8b6a93 Mon Sep 17 00:00:00 2001 From: mcpower Date: Sun, 11 Apr 2021 19:15:52 +1000 Subject: [PATCH 103/116] Fix numbers not being fixed width in some fonts From MDN [1]: `tabular-nums` activating the set of figures where numbers are all of the same size, allowing them to be easily aligned like in tables. Out of the fonts currently selectable in settings, this only visibly affects Comic Sans MS as it is the only font with proportional numbers. [1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-numeric --- style.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/style.css b/style.css index 59e05e53..c434e791 100644 --- a/style.css +++ b/style.css @@ -14,6 +14,7 @@ margin: 0; padding: 0; font-family: var(--font); + font-variant-numeric: tabular-nums; } *:focus { @@ -2578,4 +2579,4 @@ table { filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; white-space: pre-wrap; -} \ No newline at end of file +} From 6673d581e39b4fb8096b904cb2686bbe2e3c1ab8 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 11 Apr 2021 21:41:10 -0400 Subject: [PATCH 104/116] v2.0 Patch 3 --- js/constants/default.js | 1 + js/main/elementary/hadronic_challenges.js | 2 +- js/main/elements.js | 2 ++ js/main/inf.js | 2 +- js/main/multiverse/mlt.js | 4 ++-- main.html | 3 +++ 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/js/constants/default.js b/js/constants/default.js index 38227a1d..77cff4a6 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -14,6 +14,7 @@ const DEFAULT_START = { newst: true, elc: true, mltnc: false, + mltforcetab: true, hideMltBtn: false, saveImp: "new save", hot: true, diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js index 95221417..5a1f6589 100644 --- a/js/main/elementary/hadronic_challenges.js +++ b/js/main/elementary/hadronic_challenges.js @@ -261,7 +261,7 @@ function importHC() { let toImport = prompt("Paste Hadronic Challenge data here.") try { let data = JSON.parse(atob(toImport)) - player.elementary.hc.selectors = data + 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!") diff --git a/js/main/elements.js b/js/main/elements.js index 00ca42c3..ccbf987f 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -89,6 +89,8 @@ function updateOptionsHTML(){ tmp.el.elc.setTxt("Elementary Confirmation: "+ (player.options.elc ? "ON" : "OFF")); tmp.el.mltnc.changeStyle("visibility", (player.mlt.times.gt(0)?"visible":"hidden")) tmp.el.mltnc.setTxt("Multiverse Confirmation: "+ (player.options.mltnc ? "OFF" : "ON")); + tmp.el.mltforcetab.changeStyle("visibility", (player.mlt.times.gt(0)?"visible":"hidden")) + tmp.el.mltforcetab.setTxt("Multiverse Tab Shown on Reset: "+ ((player.options.mltforcetab||(player.options.mltforcetab===undefined)) ? "ON" : "OFF")); tmp.el.hideMltBtn.changeStyle("visibility", (player.mlt.times.gt(0)?"visible":"hidden")); tmp.el.hideMltBtn.setTxt("Multiverse Reset Button: "+(player.options.hideMltBtn ? "MULTIVERSE TAB" : "TOP OF SCREEN")) tmp.el.saveImp.setTxt("Imports: "+ capitalFirst(player.options.saveImp)); diff --git a/js/main/inf.js b/js/main/inf.js index 67cadc6d..ddc4311b 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -269,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 = diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index c248f8e1..70103a87 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -21,7 +21,7 @@ function updateMiscMltStuff() { function setMultiverseResetFunction() { if (!tmp.mlt.onReset) tmp.mlt.onReset = function (prev, auto) { // Main Stuff - if (!auto) { + if (!auto && player.options.mltforcetab) { player.mlt.active = "NONE"; player.tab = "mlt" } else player.tab = prev.tab; @@ -63,7 +63,7 @@ function setMultiverseResetFunction() { player.elementary.theory.bestDepth = prev.elementary.theory.bestDepth; // Bugfixes - if (!auto) { + if (!auto && player.options.mltforcetab) { infTab = "infinity" elmTab = "fermions" player.mlt.mlt1selected = []; diff --git a/main.html b/main.html index b87563e6..d346b95a 100644 --- a/main.html +++ b/main.html @@ -291,6 +291,9 @@ + From f9e2ebd0de24ae0e7f6d3e665ba0a8409ed4d4a2 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 13 Apr 2021 12:45:33 -0400 Subject: [PATCH 105/116] v2.0 Patch 4 --- js/main/elementary/hadronic_challenges.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js index 5a1f6589..ffc972ca 100644 --- a/js/main/elementary/hadronic_challenges.js +++ b/js/main/elementary/hadronic_challenges.js @@ -216,7 +216,7 @@ function startHC() { } 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") && !mltMode) player.elementary.foam.maxDepth = new ExpantaNum(1); + 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); From 609a73f77ff91b896472c67a025bfbec56aca731 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 13 Apr 2021 12:46:03 -0400 Subject: [PATCH 106/116] v2.0 Patch 4 --- js/main/elementary/hadronic_challenges.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/main/elementary/hadronic_challenges.js b/js/main/elementary/hadronic_challenges.js index ffc972ca..1ec24cc3 100644 --- a/js/main/elementary/hadronic_challenges.js +++ b/js/main/elementary/hadronic_challenges.js @@ -216,7 +216,7 @@ function startHC() { } 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("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); From 89937f2695d9dfb109c2225631cda28dd921910a Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Tue, 13 Apr 2021 17:26:29 -0400 Subject: [PATCH 107/116] v2.0 Patch 5 --- js/constants/elm.js | 2 +- js/main/multiverse/mlt.js | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/js/constants/elm.js b/js/constants/elm.js index 8cd727cc..312b5a1b 100644 --- a/js/constants/elm.js +++ b/js/constants/elm.js @@ -839,7 +839,7 @@ const HC_TITLE = { 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 Inflations (they are reset on start)", + 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)", diff --git a/js/main/multiverse/mlt.js b/js/main/multiverse/mlt.js index 70103a87..63ca6d01 100644 --- a/js/main/multiverse/mlt.js +++ b/js/main/multiverse/mlt.js @@ -63,9 +63,11 @@ function setMultiverseResetFunction() { player.elementary.theory.bestDepth = prev.elementary.theory.bestDepth; // Bugfixes - if (!auto && player.options.mltforcetab) { - infTab = "infinity" - elmTab = "fermions" + if (!auto) { + if (player.options.mltforcetab) { + infTab = "infinity" + elmTab = "fermions" + } player.mlt.mlt1selected = []; player.mlt.mlt3selected = []; } From 49436aa5fc65c1053b1f7e2604fc2ecbaaaefef5 Mon Sep 17 00:00:00 2001 From: Jacorb <39597610+Jacorb90@users.noreply.github.com> Date: Sun, 13 Jun 2021 13:52:56 -0400 Subject: [PATCH 108/116] v2.0 Patch 6 --- js/constants/tabs.js | 2 +- js/game.js | 2 +- js/main/elementary/skyrmion.js | 4 ++-- main.html | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/js/constants/tabs.js b/js/constants/tabs.js index eb485e59..b50740cc 100644 --- a/js/constants/tabs.js +++ b/js/constants/tabs.js @@ -39,7 +39,7 @@ const TABBTN_SHOWN = { 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) || player.elementary.hc.active; + return (tmp.elm ? tmp.elm.can : false) || player.elementary.times.gt(0) || player.elementary.theory.active || player.elementary.hc.active; }, }; diff --git a/js/game.js b/js/game.js index 023e6d63..5bda9551 100644 --- a/js/game.js +++ b/js/game.js @@ -39,7 +39,7 @@ 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 diff --git a/js/main/elementary/skyrmion.js b/js/main/elementary/skyrmion.js index e7e4a2c5..1b7165c9 100644 --- a/js/main/elementary/skyrmion.js +++ b/js/main/elementary/skyrmion.js @@ -271,8 +271,8 @@ function maxField(type, lims={}, ignoreUpgReq=false) { function maxBothFields() { if (!tmp.ach[178].has) return; - maxField("pions") - maxField("spinors") + maxField("pions", {}, true) + maxField("spinors", {}, true) } function exportField(type) { diff --git a/main.html b/main.html index d346b95a..28803c2e 100644 --- a/main.html +++ b/main.html @@ -2109,7 +2109,7 @@

    Misc.


    "Actually Useless Theories": Multiply the generation of all Foam types by .

    Quantum Boost []: Multiply Quantum Foam gain by .
    - Fermion Boost []: Multiply Fermion gain by .
    + Fermion Boost []: Multiply Quark & Lepton gain by .
    Entangle Boost []: Multiply Entangled String gain by .
    Inflaton Boost []: Multiply Inflaton gain by .
    Meta-Boost []: Add levels to all above boosts (based on your Knowledge).

    From 6963bcdcb8dfd5c5bd4e7d1771a13b62953e51da Mon Sep 17 00:00:00 2001 From: xuavis Date: Wed, 2 Mar 2022 14:21:42 +0100 Subject: [PATCH 109/116] Fix soulboost not updating --- js/main/inf.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/js/main/inf.js b/js/main/inf.js index ddc4311b..eed5e24e 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -378,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)); @@ -991,7 +991,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; } From 68ba1a95133f59b294b8b0d554884bc85a40ee40 Mon Sep 17 00:00:00 2001 From: xuavis Date: Sun, 13 Mar 2022 15:36:14 +0100 Subject: [PATCH 110/116] Add "boost to perk strength from Demonic Souls is based on best Demonic Souls" to achievement 135 --- js/constants/achievements.js | 2 +- js/constants/default.js | 1 + js/functions/misc.js | 1 + js/main/inf.js | 4 +++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/js/constants/achievements.js b/js/constants/achievements.js index 38d2937b..3fb584da 100644 --- a/js/constants/achievements.js +++ b/js/constants/achievements.js @@ -424,7 +424,7 @@ const ACH_DATA = { 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.", diff --git a/js/constants/default.js b/js/constants/default.js index 77cff4a6..56f97c52 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -36,6 +36,7 @@ const DEFAULT_START = { bestA: new ExpantaNum(0), bestEnd: new ExpantaNum(0), bestEP: new ExpantaNum(0), + bestDemonicSouls: new ExpantaNum(1), velocity: new ExpantaNum(0), rank: new ExpantaNum(1), tier: new ExpantaNum(0), diff --git a/js/functions/misc.js b/js/functions/misc.js index 7e490896..e0068f58 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -238,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); diff --git a/js/main/inf.js b/js/main/inf.js index eed5e24e..b17d41d6 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -730,7 +730,7 @@ function updateTempPantheon() { tmp.inf.pantheon.soulGain = tmp.inf.pantheon.soulGain.times(mul) } let h = player.inf.pantheon.heavenlyChips; - let d = player.inf.pantheon.demonicSouls; + let d = tmp.ach[135].has ? player.bestDemonicSouls : player.inf.pantheon.demonicSouls; let p = player.inf.pantheon.purge.unl ? player.inf.pantheon.purge.power : new ExpantaNum(0); if (mltRewardActive(5)) { tmp.inf.pantheon.ppe = p.div(10).plus(1).log10().times(-0.01) @@ -1027,6 +1027,8 @@ 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; } From 98471400f35417728562ca8c23f44a4dcd18eb92 Mon Sep 17 00:00:00 2001 From: xuavis Date: Sun, 13 Mar 2022 15:55:54 +0100 Subject: [PATCH 111/116] Don't make best demonic souls affect heavenly chips boost --- js/main/inf.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/js/main/inf.js b/js/main/inf.js index b17d41d6..80812f26 100644 --- a/js/main/inf.js +++ b/js/main/inf.js @@ -730,7 +730,8 @@ function updateTempPantheon() { tmp.inf.pantheon.soulGain = tmp.inf.pantheon.soulGain.times(mul) } let h = player.inf.pantheon.heavenlyChips; - let d = tmp.ach[135].has ? player.bestDemonicSouls : player.inf.pantheon.demonicSouls; + 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); if (mltRewardActive(5)) { tmp.inf.pantheon.ppe = p.div(10).plus(1).log10().times(-0.01) @@ -738,14 +739,14 @@ function updateTempPantheon() { 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 = d.times(h.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 = d.div(h.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); From 19bc4d244e0fb341d721649559946fa70f9fc911 Mon Sep 17 00:00:00 2001 From: xuavis Date: Sun, 13 Mar 2022 16:00:15 +0100 Subject: [PATCH 112/116] Default best demonic souls should be 0 --- js/constants/default.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/constants/default.js b/js/constants/default.js index 56f97c52..bf10af62 100644 --- a/js/constants/default.js +++ b/js/constants/default.js @@ -36,7 +36,7 @@ const DEFAULT_START = { bestA: new ExpantaNum(0), bestEnd: new ExpantaNum(0), bestEP: new ExpantaNum(0), - bestDemonicSouls: new ExpantaNum(1), + bestDemonicSouls: new ExpantaNum(0), velocity: new ExpantaNum(0), rank: new ExpantaNum(1), tier: new ExpantaNum(0), From fc90fd0eee9232f9de3b814bcd8f085e98e6ebf2 Mon Sep 17 00:00:00 2001 From: Wrab Date: Fri, 28 Apr 2023 13:22:16 +0300 Subject: [PATCH 113/116] NA shows as completed in mode combination table --- js/main/options.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/main/options.js b/js/main/options.js index bccb6773..a7877a14 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -452,9 +452,10 @@ function getCompletedModeCombos() { if (p==null) continue; let m = p.modes; let id = calcModeAndBalanceName(m).balanceName; - + let neededAchs = 152 + if(p.modes.includes("na"))neededAchs=96 if (MODEBALANCES[id].balancing=="balanced up to first multiverse" && ExpantaNum.gte(p.bestDistance, DISTANCES.mlt) && p.achievements.length>=136) toRet.push(m); - else if (ExpantaNum.gte(p.bestDistance, ExpantaNum.pow(DISTANCES.mlt, 1e3)) && p.achievements.length>=152) toRet.push(m); + else if (ExpantaNum.gte(p.bestDistance, ExpantaNum.pow(DISTANCES.mlt, 1e3)) && p.achievements.length>=neededAchs) toRet.push(m); } return toRet; } \ No newline at end of file From f1a19f4737ef7753a829319e1dc637e21fa014b2 Mon Sep 17 00:00:00 2001 From: Wrab Date: Fri, 28 Apr 2023 13:24:49 +0300 Subject: [PATCH 114/116] AAU functions properly with NA --- js/functions/misc.js | 4 ++-- js/main/options.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/functions/misc.js b/js/functions/misc.js index e0068f58..fbe66f5a 100644 --- a/js/functions/misc.js +++ b/js/functions/misc.js @@ -381,10 +381,10 @@ function getCurrentTime() { return Date.now(); } -function getAllAchievements() { +function getAllAchievements(NAactive=undefined) { let a = []; for (let r = 1; r <= ACH_DATA.rows; r++) for (let c = 1; c <= ACH_DATA.cols; c++) a.push(r * 10 + c); - 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; } diff --git a/js/main/options.js b/js/main/options.js index a7877a14..929854d3 100644 --- a/js/main/options.js +++ b/js/main/options.js @@ -92,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; From b7673fb5dd99d618d9abb7790481c0dbfb01d2cd Mon Sep 17 00:00:00 2001 From: Wrab Date: Sun, 21 May 2023 09:31:30 +0300 Subject: [PATCH 115/116] dark circles background --- images/threeArrows.jpg | Bin 53783 -> 0 bytes images/threeArrows.svg | 5 +++++ images/threeArrows2.jpg | Bin 44194 -> 0 bytes js/main/elements.js | 1 - style.css | 6 +++--- 5 files changed, 8 insertions(+), 4 deletions(-) delete mode 100644 images/threeArrows.jpg create mode 100644 images/threeArrows.svg delete mode 100644 images/threeArrows2.jpg diff --git a/images/threeArrows.jpg b/images/threeArrows.jpg deleted file mode 100644 index b3ea80d764ab01bda83671e9ef56142c55a13fef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53783 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 He@^`iB#l%r 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 1991a1eb962e5de81d16971d57a01eaace1e7123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44194 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 Date: Sun, 21 May 2023 09:46:35 +0300 Subject: [PATCH 116/116] muliverse hotkey --- js/main/elements.js | 3 ++- js/update.js | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/js/main/elements.js b/js/main/elements.js index f96eab80..105f3505 100644 --- a/js/main/elements.js +++ b/js/main/elements.js @@ -1420,7 +1420,8 @@ function updateMiscHTML(){ (TABBTN_SHOWN.elementary()?"Shift + E -> Elementary Reset\n":"")+ (ELM_TABS.theory()?"Shift + T -> Toggle Theoriverse\n":"")+ (TH_TABS.strings()?"S -> Entangled String reset\n":"")+ - (ELM_TABS.sky()?"Shift + S -> Skyrmion reset":"") + (ELM_TABS.sky()?"Shift + S -> Skyrmion reset\n":"")+ + (player.achievements.includes(178)?"M -> Multiverse reset":"") ); } diff --git a/js/update.js b/js/update.js index 464ffde0..0a45872d 100644 --- a/js/update.js +++ b/js/update.js @@ -358,9 +358,9 @@ document.onkeyup = function(e) { document.onkeydown = function(e) { outerShiftDown = !(!e.shiftKey); if (!player.options.hot || player.modes.includes("absurd")) return - if (player.tab=="mlt") 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) @@ -396,6 +396,9 @@ document.onkeydown = function(e) { 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()