function getScaling12Boosters() { let x = new Decimal(1) if (player.ps.upgrades.includes(22)) x = x.times(LAYER_UPGS.ps[22].currently()) return x } function addToBoosterBase() { let toAdd = new Decimal(0) if (player.b.upgrades.includes(12)) toAdd = toAdd.add(LAYER_UPGS.b[12].currently()) if (player.b.upgrades.includes(13)) toAdd = toAdd.add(LAYER_UPGS.b[13].currently()) if (player.t.upgrades.includes(11)&&!(tmp.challActive?tmp.challActive.h[12]:true)) toAdd = toAdd.add(LAYER_UPGS.t[11].currently()) if (player.t.upgrades.includes(31)&&!(tmp.challActive?tmp.challActive.h[12]:true)) toAdd = toAdd.add(25) if (player.t.upgrades.includes(33)&&!(tmp.challActive?tmp.challActive.h[12]:true)) toAdd = toAdd.add(40) if (player.e.unl) toAdd = toAdd.add(tmp.enhEff2) if (player.e.upgrades.includes(11)&&!(tmp.challActive?tmp.challActive.h[12]:true)) toAdd = toAdd.add(LAYER_UPGS.e[11].currently().b) if (player.s.unl && tmp.s !== undefined) toAdd = toAdd.add(tmp.s.sbEff[2]) if (player.sb.upgrades.includes(21)) toAdd = toAdd.add(LAYER_UPGS.sb[21].currently()) if (player.b.upgrades.includes(31)) toAdd = toAdd.times(LAYER_UPGS.b[31].currently()) if (player.q.upgrades.includes(53)) toAdd = toAdd.times(tmp.enhEff2) if (player.sb.unl) toAdd = toAdd.times(tmp.layerEffs.sb) return toAdd } function getFreeBoosters() { let free = new Decimal(0) if (player.t.upgrades.includes(24)&&!(tmp.challActive?tmp.challActive.h[12]:true)) free = free.add(18) if (player.b.upgrades.includes(32)) free = free.add(LAYER_UPGS.b[32].currently()) if (player.b.upgrades.includes(33)) free = free.add(100) return free } function getBoosterPower() { let power = new Decimal(1) if (spellActive(1)) power = power.times(tmp.spellEffs[1]) if (player.sp.upgrades.includes(34)) power = power.times(1.25) return power } function addToGenBase() { let toAdd = new Decimal(0) if (player.g.upgrades.includes(12)) toAdd = toAdd.add(LAYER_UPGS.g[12].currently()) if (player.g.upgrades.includes(13)) toAdd = toAdd.add(LAYER_UPGS.g[13].currently()) if (player.g.upgrades.includes(33)) toAdd = toAdd.add(LAYER_UPGS.g[33].currently()) if (player.e.unl) toAdd = toAdd.add(tmp.enhEff2) if (player.e.upgrades.includes(11)&&!(tmp.challActive?tmp.challActive.h[12]:true)) toAdd = toAdd.add(LAYER_UPGS.e[11].currently().g) if (player.s.unl && tmp.s !== undefined) toAdd = toAdd.add(tmp.s.sbEff[2]) if (player.h.challs.includes(51)) toAdd = toAdd.times(LAYER_CHALLS.h[51].currently()) if (player.q.upgrades.includes(53)) toAdd = toAdd.times(tmp.enhEff2) return toAdd } function getGenPow() { let pow = new Decimal(1) if (player.g.upgrades.includes(34)) pow = pow.times(LAYER_UPGS.g[34].currently()) if (player.sp.upgrades.includes(34)) pow = pow.times(1.25) return pow } function getGenPowerGainMult() { let mult = new Decimal(1) if (player.g.upgrades.includes(21)) mult = mult.times(LAYER_UPGS.g[21].currently()) if (player.g.upgrades.includes(25)) mult = mult.times(LAYER_UPGS.g[25].currently()) if (player.e.upgrades.includes(35)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.e[35].currently()) if (player.s.upgrades.includes(12)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.s[12].currently()) if (player.s.upgrades.includes(13)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.s[13].currently()) if (player.q.unl && tmp.quirkEff) mult = mult.times(tmp.quirkEff) if (player.g.upgrades.includes(35)) mult = mult.times(LAYER_UPGS.g[35].currently()) return mult } function getGenPowerEffExp() { let exp = new Decimal(1/3) if (player.s.upgrades.includes(34)&&!(tmp.challActive?tmp.challActive.h[12]:true)) exp = exp.add(LAYER_UPGS.s[34].currently()) if (player.b.upgrades.includes(21)) exp = exp.times(2) if (player.b.upgrades.includes(22)) exp = exp.times(1.2) if (player.e.upgrades.includes(21)&&!(tmp.challActive?tmp.challActive.h[12]:true)) exp = exp.times(1.15) if (player.h.challs.includes(11)) exp = exp.times(1.25) if (player.h.challs.includes(42)) exp = exp.times(3) return exp; } function getGenPowerEff() { if (tmp.challActive ? tmp.challActive.h[11] : true) return new Decimal(1) let eff = player.g.power.add(1).pow(getGenPowerEffExp()); return eff } function getEnhancerPow() { if (tmp.challActive ? tmp.challActive.h[22] : true) return new Decimal(0); if (tmp.challActive ? tmp.challActive.h[41] : true) return new Decimal(0); let pow = new Decimal(1) if (player.e.upgrades.includes(25)&&!(tmp.challActive?tmp.challActive.h[12]:true)) pow = pow.times(LAYER_UPGS.e[25].currently()) if (player.e.upgrades.includes(31)&&!(tmp.challActive?tmp.challActive.h[12]:true)) pow = pow.times(LAYER_UPGS.e[31].currently()) if (player.h.challs.includes(31)) pow = pow.times(2) if (player.q.upgrades.includes(42)) pow = pow.times(1.4) if (player.ba.upgrades.includes(32)) pow = pow.times(LAYER_UPGS.ba[32].currently()) return pow } function getEnhancerEff() { if (!player.e.unl) return new Decimal(1) let e = player.e.enhancers.sub(tmp.subbedEnh).times(tmp.enhPow) let eff; if (e.gte(0)) eff = Decimal.pow(25, e.pow(1.1)) else eff = Decimal.pow(1/25, e.times(-1).pow(1.1)) return eff } function getEnhancerEff2() { if (!player.e.unl) return new Decimal(0) let e = player.e.enhancers.sub(tmp.subbedEnh).times(tmp.enhPow) let eff; if (e.gte(0)) eff = e.pow(0.8) else eff = e.times(-1).pow(0.8).times(-1) return eff; } function getEnhancerCost() { let e = player.e.enhancers if (e.gte(25)) e = e.pow(2).div(25) let cost = Decimal.pow(2, e.pow(1.5)) return cost.floor() } function buyEnhancer() { let cost = getEnhancerCost() if (player.e.points.lt(cost)) return player.e.points = player.e.points.sub(cost) player.e.enhancers = player.e.enhancers.add(1) } function maxEnhancers() { let target = player.e.points.max(1).log(2).root(1.5) if (target.gte(25)) target = target.times(25).sqrt() target = target.add(1).floor() if (target.lte(player.e.enhancers)) return player.e.enhancers = player.e.enhancers.max(target) } function getFreeExtCapsules() { let amt = new Decimal(0) if (player.t.upgrades.includes(12)&&!(tmp.challActive?tmp.challActive.h[12]:true)) amt = amt.add(1) if (player.h.unl) amt = amt.add(tmp.layerEffs.h) return amt } function getCapPow() { if (tmp.challActive ? tmp.challActive.h[41] : true) return new Decimal(0) let pow = new Decimal(1) if (player.q.upgrades.includes(33)) pow = pow.times(LAYER_UPGS.q[33].currently()) if (spellActive(2)) pow = pow.times(tmp.spellEffs[2]) return pow } function getFreeExtPow() { if (tmp.challActive ? tmp.challActive.h[22] : true) return new Decimal(0) let pow = new Decimal(1) return pow } function getTimeEnergyEff() { if (!player.t.unl) return new Decimal(1) let exp = 1.2 if (player.t.upgrades.includes(21)&&!(tmp.challActive?tmp.challActive.h[12]:true)) exp = 1.75 let eff = player.t.energy.add(1).pow(exp) return eff; } function getTimeEnergyGainMult() { if (!player.t.unl) return new Decimal(1) let mult = new Decimal(1); if (player.t.upgrades.includes(21)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[21].currently()) if (player.t.upgrades.includes(22)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[22].currently()) if (player.t.upgrades.includes(23)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[23].currently()) if (player.t.upgrades.includes(34)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[34].currently()) return mult; } function getTimeEnergyLimitMult() { if (!player.t.unl) return new Decimal(1) let mult = new Decimal(1); if (player.t.upgrades.includes(12)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[12].currently()) if (player.t.upgrades.includes(21)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[21].currently()) if (player.t.upgrades.includes(22)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[22].currently()) if (player.t.upgrades.includes(23)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[23].currently()) if (player.t.upgrades.includes(34)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mult = mult.times(LAYER_UPGS.t[34].currently()) if (player.q.upgrades.includes(23)) mult = mult.times(1e10) if (player.q.upgrades.includes(24)) mult = mult.times(LAYER_UPGS.q[24].currently()) if (player.m.upgrades.includes(23)) mult = mult.times("1e500") return mult; } function getExtCapsuleCost() { let amt = player.t.extCapsules if (amt.gte(25) && !player.ba.upgrades.includes(43)) amt = amt.pow(2).div(25) let cost = amt.times(0.4).pow(1.2).add(1).times(10) return cost.floor() } function buyExtCapsule() { if (!player.t.unl) return let cost = getExtCapsuleCost() if (player.b.points.lt(cost)) return player.b.points = player.b.points.sub(cost) player.t.extCapsules = player.t.extCapsules.add(1) } function maxExtTimeCapsules() { let target = player.b.points.add(1).div(10).sub(1).root(1.2).div(0.4) if (target.gte(25)&&!player.ba.upgrades.includes(43)) target = target.times(25).sqrt() target = target.add(1).floor().max(0) player.t.extCapsules = player.t.extCapsules.max(target) } function addToTimeBase() { let toAdd = new Decimal(0) if (player.m.upgrades.includes(44)) toAdd = toAdd.add(LAYER_UPGS.m[44].currently()) return toAdd } function multiplyToTimeBase() { let x = new Decimal(1) if (player.l.unl && tmp.l !== undefined) x = x.times(tmp.l.lbEff[3]) return x } function getSpace() { let baseSpace = player.s.best.pow(1.1).times(3).floor() if (player.s.upgrades.includes(13)&&!(tmp.challActive?tmp.challActive.h[12]:true)) baseSpace = baseSpace.add(2); if (player.s.upgrades.includes(24)&&!(tmp.challActive?tmp.challActive.h[12]:true)) baseSpace = baseSpace.add(3); if (player.ss.unl) baseSpace = baseSpace.add(tmp.ssEff1) if (player.ss.upgrades.includes(11)) baseSpace = baseSpace.add(LAYER_UPGS.ss[11].currently()) return baseSpace.sub(player.s.spent).max(0) } let SPACE_BUILDINGS = { max: 10, 1: { cost: new Decimal(1e3), eff(x) { let ret = Decimal.pow(Decimal.add(1, x.pow((player.s.upgrades.includes(31)&&!(tmp.challActive?tmp.challActive.h[12]:true))?2.75:1)), player.s.points.sqrt()).times(Decimal.mul(4, x.pow((player.s.upgrades.includes(31)&&!(tmp.challActive?tmp.challActive.h[12]:true))?2.75:1))).max(1) if (player.ba.upgrades.includes(42)) ret = ret.pow(LAYER_UPGS.ba[42].currently()) return ret }, effDesc(x) { return "Space Energy boosts Point gain & Prestige Point gain ("+format(x)+"x)" } }, 2: { cost: new Decimal(1e10), eff(x) { if (player.s.upgrades.includes(43)) { x = Decimal.pow(1.0001, x).times(x.sqrt()) if (x.gte("e600")) x = Decimal.pow(10, x.log10().times(600).sqrt()) return x } else return x.sqrt() }, effDesc(x) { return "Adds to base of Booster/Generator effects by "+format(x) } }, 3: { cost: new Decimal(1e25), eff(x) { x = Decimal.pow(1e18, x.pow(0.9)) if (x.gte("e3e9")) x = Decimal.pow(10, x.log10().times(9e18).cbrt()) return x }, effDesc(x) { return "Makes Boosters/Generators cheaper by "+format(x)+"x" } }, 4: { cost: new Decimal(1e48), eff(x) { let ret = x.add(1).pow(1.25) if (ret.gte(1e6)) ret = ret.log10().times(1e6/6) return ret; }, effDesc(x) { return "Booster Upgrade 6's effect is raised to the power of "+format(x) } }, 5: { cost: new Decimal(1e100), eff(x) { return x.sqrt().times(2) }, effDesc(x) { return "Add "+format(x)+" free levels to all previous Space Buildings" } }, 6: { cost: new Decimal("e6000000"), eff(x) { return x.div(1e3).add(1).sqrt() }, effDesc(x) { return "You produce Life Power " + format(x) + "x faster" } }, 7: { cost: new Decimal("e6500000"), eff(x) { return Decimal.pow(1.05, x) }, effDesc(x) { return "Reduce the requirement of Phantom Souls by " + format(x) + "x" } }, 8: { cost: new Decimal("e7000000"), eff(x) { return x.sqrt().div(100) }, effDesc(x) { return "Gain " + format(x) + " free extra Quirk layers" } }, 9: { cost: new Decimal("e8000000"), eff(x) { return x.max(1).log10().div(3).max(1).cbrt() }, effDesc(x) { return "Reduce the cost scaling of Hyperspace by " + format(Decimal.sub(1, x.recip()).times(100)) + "%" } }, 10: { cost: new Decimal("e9500000"), eff(x) { return x.max(1).log10().div(5).max(1) }, effDesc(x) { return "Super-Upgrades are " + format(x.sub(1).times(100)) + "% stronger" } }, } function getSpaceBuildingCostMod() { let mod = new Decimal(1) if (player.s.upgrades.includes(24)&&!(tmp.challActive?tmp.challActive.h[12]:true)) mod = mod.times(0.5) if (player.s.upgrades.includes(42)) mod = mod.times(0.6) if (spellActive(4)) mod = mod.times(Decimal.sub(1, tmp.spellEffs[4].sub(1))) if (player.ba.upgrades.includes(15)) mod = mod.div(LAYER_UPGS.ba[15].currently()) return mod; } function getSpaceBuildingCostMult() { let mult = new Decimal(1) if (player.ss.unl) mult = mult.div(tmp.ssEff2) if (player.s.upgrades.includes(41)) mult = mult.div(LAYER_UPGS.s[41].currently()) return mult } function getSpaceBuildingCost(x) { let inputVal = SPACE_BUILDINGS[x].cost let bought = tmp.s.sb[x] if (bought.gte(100)) bought = bought.pow(2).div(100) let cost = Decimal.pow(inputVal, bought.times(tmp.s.sbCostMod).pow(1.35)).times(inputVal).times((bought.gt(0)||x>1)?1:0).times(tmp.s.sbCostMult) return cost } function getSpaceBuildingTarg(x) { let inputVal = SPACE_BUILDINGS[x].cost let target = player.g.power.div(tmp.s.sbCostMult).div(inputVal).max(1).log(inputVal).pow(1/1.35).div(tmp.s.sbCostMod) if (target.gte(100)) target = target.times(100).sqrt() return target.add(1).floor() } function getSpaceBuildingPow() { if (!player.s.unl) return new Decimal(0) if (tmp.challActive ? tmp.challActive.h[22] : true) return new Decimal(0) if (tmp.challActive ? tmp.challActive.h[41] : true) return new Decimal(0) let pow = new Decimal(1) if (player.s.upgrades.includes(21)&&!(tmp.challActive?tmp.challActive.h[12]:true)) pow = pow.times(LAYER_UPGS.s[21].currently()) if (player.s.upgrades.includes(22)&&!(tmp.challActive?tmp.challActive.h[12]:true)) pow = pow.times(LAYER_UPGS.s[22].currently()) if (player.s.upgrades.includes(23)&&!(tmp.challActive?tmp.challActive.h[12]:true)) pow = pow.times(LAYER_UPGS.s[23].currently()) if (player.s.upgrades.includes(44)&&!(tmp.challActive?tmp.challActive.h[12]:true)) pow = pow.times(1.25) if (player.q.upgrades.includes(41)) pow = pow.times(1.4) if (player.ss.unl) pow = pow.times(tmp.ssEff3) if (player.ba.upgrades.includes(44)) pow = pow.times(1.5) return pow } function getExtraBuildingLevels() { let lvl = new Decimal(0) if (player.s.upgrades.includes(11)&&!(tmp.challActive?tmp.challActive.h[12]:true)) lvl = lvl.add(1); if (player.s.upgrades.includes(14)&&!(tmp.challActive?tmp.challActive.h[12]:true)) lvl = lvl.add(1); if (player.q.upgrades.includes(31)) lvl = lvl.add(1); if (player.m.upgrades.includes(32)) lvl = lvl.add(LAYER_UPGS.m[32].currently()) return lvl } function getSpaceBuildingEff(x) { let bought if (!player.s.unl) bought = new Decimal(0) else { bought = tmp.s.sb[x].add(tmp.s.sbExtra) if (x < 5 && tmp.s.trueSbUnl >= 5) bought = bought.add(tmp.s.sbEff[5]) var compressLvl = new Decimal(1) if (tmp.i !== undefined && layerUnl("i") && tmp.i.compressed >= x) compressLvl = tmp.s.sbUnl.sub(x - SPACE_BUILDINGS.max - 1).div(SPACE_BUILDINGS.max).ceil().cbrt() bought = bought.times(tmp.s.sbPow).times(compressLvl) if (tmp.hs !== undefined && layerUnl("hs")) { tmp.hs.suEff[x] = HYPERSPACE.effs[x](bought, fixValue(tmp.hs.su[x]).times(tmp.hs.eff).times(compressLvl)) bought = bought.times(tmp.hs.suEff[x]) } } return SPACE_BUILDINGS[x].eff(bought) } function getSpaceBuildingEffDesc(x) { let eff = tmp.s.sbEff[x] return SPACE_BUILDINGS[x].effDesc(eff) } function buyBuilding(x) { if (!player.s.unl) return if (tmp.s.trueSbUnl= 8) layers = layers.add(tmp.s.sbEff[8]) return layers; } function getQuirkEnergyGainExp() { let mult = new Decimal(1) if (spellActive(3)) mult = mult.times(tmp.spellEffs[3]) return player.q.layers.add(getExtraQuirkLayers()).sub(1).times(mult) } function getQuirkEnergyEff() { let eff = player.q.energy.add(1).pow(2) if (player.q.upgrades.includes(12)) { let mod = player.q.energy.add(1).log10().add(1).log10().add(1) if (mod.gte(2)) { eff = eff.times(mod.div(2).pow(10)) mod = new Decimal(2) } eff = eff.pow(mod) } if (player.q.upgrades.includes(32)) eff = eff.pow(2) if (player.h.challs.includes(61)) eff = eff.pow(1.2) if (player.ba.upgrades.includes(13)) eff = eff.pow(3) return eff; } function buyQuirkLayer() { if (!player.q.unl) return let cost = getQuirkLayerCost() if (player.q.points.lt(cost)) return player.q.points = player.q.points.sub(cost) player.q.layers = player.q.layers.add(1) } function maxQuirkLayers() { if (!player.q.unl) return let cost = getQuirkLayerCost() if (player.q.points.lt(cost)) return let target = getQuirkLayerTarg() if (target.lte(player.q.layers)) return player.q.points = player.q.points.sub(cost) player.q.layers = player.q.layers.max(target) } function getSubspaceEff1() { if (!player.ss.unl) return new Decimal(0) let eff = player.ss.subspace.times(player.ss.points).add(1).log10().times(100) if (player.sp.upgrades.includes(35)) eff = eff.times(LAYER_UPGS.sp[35].currently()) return eff.floor(); } function getSubspaceEff2() { if (!player.ss.unl) return new Decimal(1) let eff = player.ss.subspace.add(1).pow(750) if (player.sp.upgrades.includes(35)) eff = eff.pow(LAYER_UPGS.sp[35].currently()) return eff; } function getSubspaceEff3() { if (!player.ss.unl) return new Decimal(1) let eff = player.ss.subspace.add(1).log10().add(1).log10().div(2.5).add(1) if (player.ss.upgrades.includes(13)) eff = eff.times(1.5) if (player.sp.upgrades.includes(35)) eff = eff.times(LAYER_UPGS.sp[35].currently()) if (eff.gte(2)) eff = eff.log2().add(1) return eff; } function getSubspaceGainMult() { let mult = new Decimal(1) if (player.ss.upgrades.includes(12)) mult = mult.times(LAYER_UPGS.ss[12].currently()) if (player.ss.upgrades.includes(22)) mult = mult.times(LAYER_UPGS.ss[22].currently()) if (player.ss.upgrades.includes(24)) mult = mult.times(LAYER_UPGS.ss[24].currently()) if (player.ss.upgrades.includes(25)) mult = mult.times(LAYER_UPGS.ss[25].currently()) if (player.ba.upgrades.includes(12)) mult = mult.times(LAYER_UPGS.ba[12].currently()) return mult } function addToHBBase() { let toAdd = new Decimal(0) if (player.m.upgrades.includes(13)) toAdd = toAdd.add(LAYER_UPGS.m[13].currently()) if (player.m.upgrades.includes(33)) toAdd = toAdd.add(LAYER_UPGS.m[33].currently()) return toAdd } function getHyperBoosterExp() { let exp = new Decimal(1) if (player.hb.order>0) exp = new Decimal(0.5) return exp } function getExtraHyperBoosters() { let x = new Decimal(0) if (player.l.unl && tmp.l !== undefined) x = x.add(tmp.l.lbEff[1]) return x } function getHyperBoosterPow() { let pow = new Decimal(1) if (player.hb.upgrades.includes(12)) pow = pow.times(LAYER_UPGS.hb[12].currently()) return pow; } function getBalancePowerEff() { let eff = player.ba.power.times(2).add(1).pow(2/3) if (player.ba.upgrades.includes(14)) eff = eff.pow(3.85) if (player.ba.upgrades.includes(33)) eff = eff.pow(2) return eff; } function getBalanceTypesEff() { let mod = player.ba.positivity.add(1).log10().add(1).div(player.ba.negativity.add(1).log10().add(1)).log10().abs().add(1).pow(-1) let pos = player.ba.positivity.add(1).log10().add(1) let neg = player.ba.negativity.add(1).log10().add(1) if (player.ba.upgrades.includes(34)) mod = mod.times(1.5) if (player.ba.upgrades.includes(53)) mod = mod.times(LAYER_UPGS.ba[53].currently()) let eff = pos.times(neg).pow(mod) return eff; } function getBalanceEnergyExp() { let exp = new Decimal(1) if (player.ba.unl) exp = exp.times(1.5) return exp; } function getPosGainMult() { let mult = new Decimal(1) if (player.ba.upgrades.includes(22)) mult = mult.times(LAYER_UPGS.ba[22].currently()) return mult; } function getNegGainMult() { let mult = new Decimal(1) if (player.ba.upgrades.includes(22)) mult = mult.times(LAYER_UPGS.ba[22].currently()) return mult; } function getBalPowGainMult() { let mult = new Decimal(1) if (player.sp.upgrades.includes(14)) mult = mult.times(LAYER_UPGS.sp[14].currently()) return mult; } const MAX_SPELLS = 4 const SPELL_NAMES = { 1: "Booster Launch", 2: "Time Warp", 3: "Quirk Amplification", 4: "Spacial Compression", } const SPELL_DESCS = { 1: "Boosters are X% stronger", 2: "Time Capsules are X% stronger", 3: "Quirk Layers are X% more efficient", 4: "Space Buildings cost scale X% slower", } const SPELL_BASE = { 1: 1.25, 2: 1.1, 3: 1.04, 4: 1.01, } function getSpellPower(x) { let power = new Decimal(1); if (player.m.upgrades.includes(11)) power = power.times(LAYER_UPGS.m[11].currently()) if (player.m.upgrades.includes(21) && (x==2||x==3)) power = power.times(LAYER_UPGS.m[21].currently()) if (player.m.upgrades.includes(22) && (x==2)) power = power.times(10) if (player.m.upgrades.includes(41)) { let casted = player.m.casted[x] power = power.times(casted.max(1).log10().add(1).log10().div(5).add(1)) } if (player.sp.upgrades.includes(23)) power = power.times(LAYER_UPGS.sp[23].currently()) if (player.ps.upgrades.includes(13)) power = power.times(LAYER_UPGS.ps[13].currently()) if (power.gte(50)) power = power.log10().times(50/Math.log10(50)).min(power) return power.max(1); } function getSpellEff(x) { let base = SPELL_BASE[x] let power = getSpellPower(x) let eff = Decimal.pow(base, power) if (x==4) eff = Decimal.sub(2, Decimal.div(base, power.log2().add(1))) return eff } function getSpellDesc(x) { let desc = SPELL_DESCS[x] let eff = tmp.spellEffs[x] return desc.replace("X", format(eff.sub(1).times(100))) } function getSpellTime() { let time = 60 if (player.m.total.gte(2.5e9)) time *= 4 if (player.m.upgrades.includes(43)) time *= LAYER_UPGS.m[43].currently().toNumber() return time } function spellActive(x) { if (!player.m.unl) return false if (!tmp.spellEffs) return false if (tmp.spellsUnl0 } function activateSpell(x, force=false) { if (tmp.spellsUnl= 6) x = x.times(tmp.s.sbEff[6]) return x } function getLifePowerExp() { let x = tmp.layerEffs.ps.exp return x } function getLifePowerSoftcapStart() { let x = tmp.layerEffs.l return x } function getLifePowerSoftcapExp() { let x = 1/3 return x } let LIFE_BOOSTERS = { max: 5, unl() { if (player.ps.upgrades.includes(21)) return 5 return 4 }, calcNewPower(diff) { if (!player.l.unl) return new Decimal(0) let exp = getLifePowerExp() let cap = getLifePowerSoftcapStart() let capExp = getLifePowerSoftcapExp() let power = player.l.power if (power.gt(1)) power = power.root(exp) if (power.gt(cap)) power = power.div(cap).pow(1/capExp).times(cap) power = power.add(getLifePowerMult().times(diff)) if (power.gt(cap)) power = power.div(cap).pow(capExp).times(cap) if (power.gt(1)) power = power.pow(exp) return power }, eff() { return player.l.power.add(1).log10() }, req(x) { return tmp.l.lb[x].times(this[x].reqMult).add(this[x].req) }, reqTarget(x) { return player.ps.points.sub(this[x].req).div(this[x].reqMult).add(1).floor() }, 1: { req: new Decimal(1), reqMult: new Decimal(1), eff(str) { return str.pow(0.15).div(3) }, effDesc(x) { return "Add " + format(x) + " Hyper-Boosters to its effect" } }, 2: { req: new Decimal(1.5), reqMult: new Decimal(1.5), eff(str) { let x = Decimal.pow(1e20, str.pow(0.75)) if (x.gte("1e400")) x = Decimal.pow(10, x.log10().times(400).sqrt()) return x }, effDesc(x) { return "Gain " + format(x) + "x more Hexes" } }, 3: { req: new Decimal(3.5), reqMult: new Decimal(2.5), eff(str) { return str.div(1.5).max(1).log10().add(1) }, effDesc(x) { return "Multiply the base of Time Capsule effect by " + format(x) + "x" } }, 4: { req: new Decimal(10), reqMult: new Decimal(3), eff(str) { return str.div(40).add(1) }, effDesc(x) { return "Reduce the requirement of Super-Boosters, Super-Generators, and Hyper-Boosters by " + format(x) + "x" } }, 5: { req: new Decimal(5), reqMult: new Decimal(6), eff(str) { return Decimal.pow(3, str.sqrt()) }, effDesc(x) { return "Gain " + format(x) + "x more Hyperspace Energy" } }, } let HYPERSPACE = { cost(x) { if (x === undefined) x = player.hs.space if (tmp.s !== undefined && tmp.s.trueSbUnl >= 9) x = x.div(tmp.s.sbEff[9]) let reduction = this.costReduction() return { hs: Decimal.pow(2, x.sqr()).div(reduction).floor(), ba: Decimal.pow(10, x.max(x.div(2).sqr()).times(20).add(150)).div(reduction).floor() } }, costReduction() { let r = new Decimal(1) if (player.ba.upgrades.includes(45)) r = LAYER_UPGS.ba[45].currently() return r }, canBuy() { let cost = this.cost() return player.hs.points.gte(cost.hs) && player.ba.points.gte(cost.ba) }, buy() { let cost = this.cost() if (!this.canBuy()) return player.ba.points = player.ba.points.sub(cost.ba) player.hs.points = player.hs.points.sub(cost.hs) player.hs.space = player.hs.space.add(1) }, canSuperUpg(x) { return player.hs.space.gt(player.hs.spent) && tmp.hs.su[x].lt(player.hs.superUpgradeCap) }, superUpg(x) { if (!this.canSuperUpg(x)) return player.hs.spent = player.hs.spent.add(1) tmp.hs.su[x] = tmp.hs.su[x].add(1) player.hs.superUpgrades[x] = tmp.hs.su[x] }, respec(x) { if (!player.hs.unl || !confirm("Are you sure?")) return player.hs.spent = new Decimal(0) player.hs.superUpgrades = {} doReset("hs", true) }, eff() { let r = new Decimal(1) if (player.ba.upgrades.includes(35)) r = r.times(1.25) if (tmp.s !== undefined && tmp.s.trueSbUnl >= 10) r = r.times(tmp.s.sbEff[10]) return r }, nextCapReq(x) { if (x === undefined) x = player.hs.superUpgradeCap return Decimal.times(x, 200).add(1300) }, nextCapTarget() { let x = player.g.points.sub(1300).div(200) return x.floor().add(1) }, effs: { 1(sb, su) { return sb.add(1).pow(su.sqrt().times(2.5)) }, 2(sb, su) { return sb.pow(0.25).times(su.sqrt()).div(120).add(1) }, 3(sb, su) { return sb.cbrt().times(su.sqrt()).times(0.75).add(1) }, 4(sb, su) { return Decimal.pow(2.5, sb.cbrt().times(su.sqrt())) }, 5(sb, su) { return sb.add(10).log10().times(su.sqrt()).div(1.75).max(1) }, 6(sb, su) { return Decimal.pow(sb.div(1e3).add(1), su) }, 7(sb, su) { return sb.add(1).log10().times(su.cbrt()).div(25).add(1) }, 8(sb, su) { return sb.times(su.sqr()).div(100).max(1).log10().add(1) }, 9(sb, su) { return sb.times(su).max(1).log10().add(1) }, 10(sb, su) { return sb.add(1).pow(su.cbrt().div(5)) } } } let IMPERIUM = { lifeReq() { return Decimal.pow(10, player.i.lifeBricks.times(2).sqr().add(15)) }, lifeTarget() { return player.l.power.log10().sub(15).sqrt().div(2).add(1).floor() }, canBuild() { let cost = this.cost() return player.i.building || (player.i.points.gte(cost.i) && player.i.lifeBricks.gte(cost.l)) }, build() { if (!this.canBuild()) return if (player.i.building) { if (!confirm("Are you sure?")) return delete player.i.building } else { let cost = this.cost() player.i.points = player.i.points.sub(cost.i) player.i.lifeBricks = player.i.lifeBricks.sub(cost.l) player.i.building = 1 doReset("i", true) } player.i.progress = 0 }, cost(x) { if (x === undefined) x = player.i.extraBuildings let sub = player.sp.upgrades.includes(45) ? 3 : 0 return { i: x.times(1.75).add(0.5).sub(sub).ceil(), l: x.times(1.5).add(1).sub(sub).ceil() } }, speed() { let x = Decimal.pow(3.75, player.i.extraBuildings.add(5)).recip() x = x.times(IMPERIUM.sgSpeedBoost()) if (player.sp.upgrades.includes(45)) x = x.times(5) return x }, sgSpeedBoost() { return player.sg.points.add(1).pow(2) }, collapsed(row) { return tmp.i !== undefined && tmp.i.collapse !== undefined && tmp.i.collapse[row] }, maxCollapseRows: 1 } /*case 1: var keepUpgrades = 0 if (player.h.best.gte(1) || player.q.best.gte(1)) keepUpgrades = 1 else if (LAYER_ROW[layer] == 2 && player[layer].best.gte(layer == "e" ? 10 : 3)) keepUpgrades = 1 else if (LAYER_ROW[layer] == 1 && player[layer].best.gte(8)) keepUpgrades = 1 player.points = new Decimal(10) player.p.points = new Decimal(0) if (!keepUpgrades) player.p.upgrades = [] player.g.power = new Decimal(0) break; case 2: var keepMilestones = 0 if (player.h.best.gte(2) || player.q.best.gte(2)) keepMilestones = 1 else if (LAYER_ROW[layer] == 2 && player[layer].best.gte(layer == "sb" ? 4 : 2)) keepMilestones = 1 var keepUpgrades = 0 if (player.sp.total.gte(1)) keepUpgrades = 1 player.b.points = new Decimal(0) if (!keepMilestones) player.b.best = new Decimal(0) if (!keepUpgrades && !player.t.best.gte(4)) player.b.upgrades = [] player.g.points = new Decimal(0) player.g.power = new Decimal(0) if (!keepMilestones) player.g.best = new Decimal(0) if (!keepUpgrades && !player.s.best.gte(4)) player.g.upgrades = [] player.t.energy = new Decimal(0) break case 3: player.t.points = new Decimal(0); player.t.order = 0 if (player.h.best.lt(2)&&player.m.total.lt(1)) player.t.best = new Decimal(0); if (player.h.best.lt(4)&&!player.sp.total.gte(1)) player.t.upgrades = []; player.t.extCapsules = new Decimal(0); player.e.order = 0 player.e.points = new Decimal(0); if (player.h.best.lt(2)&&player.m.total.lt(1)) player.e.best = new Decimal(0); player.e.enhancers = new Decimal(0); if (player.h.best.lt(4)&&!player.sp.total.gte(1)) player.e.upgrades = []; player.s = { unl: player.s.unl, order: 0, points: new Decimal(0), best: (player.h.best.gte(2)||player.m.total.gte(1)) ? player.s.best : new Decimal(0), spent: (player.q.best.gte(4)&&(layer=="h"||layer=="q"||layer=="ss"||layer=="hb")) ? player.s.spent : new Decimal(0), buildings: (player.q.best.gte(4)&&(layer=="h"||layer=="q"||layer=="ss"||layer=="hb")) ? player.s.buildings : ({}), upgrades: (player.h.best.gte(4)||player.sp.total.gte(1)) ? player.s.upgrades : [], auto: player.s.auto, autoBuild: player.s.autoBuild, } player.sb = { unl: player.sb.unl, auto: player.sb.auto, order: 0, points: new Decimal(0), best: (player.h.best.gte(2)||player.m.total.gte(1)) ? player.sb.best : new Decimal(0), upgrades: (player.h.best.gte(10)||player.sp.total.gte(1)) ? player.sb.upgrades : [], } player.sg = { unl: player.sg.unl, auto: player.sg.auto, points: new Decimal(0), best: player.sg.best, power: new Decimal(0), upgrades: player.sg.upgrades, } player.h.time = 0 player.q.time = new Decimal(0); player.q.energy = new Decimal(0); break; case 4: player.h = { unl: player.h.unl, time: 0, points: new Decimal(0), best: (player.ba.best.gte(1)||player.m.total.gte(1))?player.h.best:new Decimal(0), challs: (player.m.total.gte(2)||player.sp.total.gte(1))?player.h.challs:[], } player.q = { unl: player.q.unl, auto: player.q.auto, points: new Decimal(0), best: (player.ba.best.gte(1)||player.m.total.gte(1))?player.q.best:new Decimal(0), layers: new Decimal(0), energy: new Decimal(0), time: new Decimal(0), upgrades: (player.ba.best.gte(2)||player.sp.total.gte(1))?player.q.upgrades:[], } player.hb = { unl: player.hb.unl, auto: player.hb.auto, order: player.hb.order, points: new Decimal(0), best: (player.ba.best.gte(1)||player.m.total.gte(1))?player.hb.best:new Decimal(0), upgrades: (player.ba.best.gte(5)||player.sp.total.gte(1))?player.hb.upgrades:[], } player.ss = { unl: player.ss.unl, auto: player.ss.auto, order: player.ss.order, points: new Decimal(0), best: (player.ba.best.gte(1)||player.m.total.gte(1))?player.ss.best:new Decimal(0), subspace: new Decimal(0), upgrades: (player.ba.best.gte(5)||player.sp.total.gte(1))?player.ss.upgrades:[], } break; case 5: player.m = { unl: player.m.unl, auto: player.m.auto, autoIns: player.m.autoIns, points: new Decimal(0), best: new Decimal(0), total: player.sp.total.gte(2) ? player.m.total : new Decimal(0), spellTimes: { 1: 0, 2: 0, 3: 0, 4: 0, }, hexes: new Decimal(0), toCast: player.m.toCast, casted: { 1: new Decimal(1), 2: new Decimal(1), 3: new Decimal(1), 4: new Decimal(1), }, upgrades: player.sp.total.gte(1) ? player.m.upgrades : [], } player.ba = { unl: player.ba.unl, points: new Decimal(0), best: player.sp.total.gte(5) ? player.ba.best : new Decimal(0), power: new Decimal(0), positivity: new Decimal(0), negativity: new Decimal(0), upgrades: player.sp.total.gte(1) ? player.ba.upgrades : [], } player.ps = { unl: player.ps.unl, auto: player.ps.auto, points: new Decimal(0), best: player.ps.best, upgrades: player.ps.upgrades, } player.l.power = new Decimal(0) break; case 6: var start = getStartPlayer() player.sp = start.sp player.l = start.l player.hs = start.hs player.i = start.i break;*/