From d7eec1ac1031a9c18f8c3fdc84a37bcb7d51ecca Mon Sep 17 00:00:00 2001 From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com> Date: Mon, 21 Sep 2020 10:56:05 -0400 Subject: [PATCH] v1.2 Beta 4 --- index.html | 31 +++++-- js/game.js | 245 +++++++++++++++++++++++++++++++++++++++++++---------- remove.png | Bin 6017 -> 0 bytes style.css | 11 +++ 4 files changed, 234 insertions(+), 53 deletions(-) delete mode 100644 remove.png diff --git a/index.html b/index.html index a029a9e..e8a8565 100644 --- a/index.html +++ b/index.html @@ -430,13 +430,11 @@
-


Reset Row 2
- @@ -445,8 +443,6 @@


Reset Row 3
- - @@ -455,14 +451,12 @@


Reset Row 4


-


Reset Row 5
- @@ -470,10 +464,9 @@


Reset Row 6
- - + - +


Reset Row 7
@@ -645,6 +638,7 @@
+

20,000 Hyperspace Energy


Gain 1% of Super-Prestige Points gain every second

1e150 Hyperspace Energy


Space Buildings do not consume Space


You have {{formatWhole(player.ba.points)}} Balance Energy @@ -691,18 +685,37 @@

5 Total Mastery Bricks


Keep Imperium Buildings on Row 7 resets, and gain 100% of Hyperspace Energy gain every second.

8 Total Mastery Bricks


Keep Hyperspace and Super-Upgrades on Row 7 resets.

10 Total Mastery Bricks


Automate Imperium Bricks, Imperium resets nothing, and gain 100% of Super-Prestige Point gain on reset.    +

32 Total Mastery Bricks


You can buy max Mastery Bricks

Note: Buying a Mastery Building can make others more expensive


+


Mechanical Challenges


Note: Complete unique combinations of challenges to boost the challenge rewards!
+
+ + + +

5 Machine Power


Imperium Buildings get built instantly.

1e15 Machine Power


Automate Hyperspace & Imperium Buildings.      

+

Purchase Mastery Building 3 to unleash the Machines
+
+
+
+

Machine {{x}}




+ {{MACHINES[x].reward}}
+ Currently: {{MACHINES[x].effDisp(MACHINES[x].currently())}} +
+
+
+

+


diff --git a/js/game.js b/js/game.js index e43a140..1d70ee2 100644 --- a/js/game.js +++ b/js/game.js @@ -187,6 +187,7 @@ function getStartPlayer() { }, hs: { unl: false, + auto: false, order: 0, points: new Decimal(0), best: new Decimal(0), @@ -198,6 +199,7 @@ function getStartPlayer() { i: { unl: false, auto: false, + autoBuild: false, points: new Decimal(0), best: new Decimal(0), total: new Decimal(0), @@ -227,13 +229,6 @@ function getStartPlayer() { points: new Decimal(0), best: new Decimal(0), built: new Decimal(0), - active: { - 1: false, - 2: false, - 3: false, - 4: false, - 5: false - }, enhancements: new Decimal(0), }, } @@ -263,7 +258,7 @@ const LAYER_REQS = { i: new Decimal("1e285"), mb: new Decimal(29), ge: new Decimal(1e50), - ma: new Decimal(1/0), + ma: new Decimal(1e160), } const LAYER_RES = { @@ -2191,6 +2186,9 @@ function canBuyMax(layer) { case "i": return player.i.best.gte(3) break; + case "mb": + return player.mb.best.gte(32) + break; } return false; } @@ -2317,6 +2315,10 @@ function getLayerGainMult(layer) { case "hs": if (player.sp.upgrades.includes(43)) mult = mult.times(LAYER_UPGS.sp[43].currently()) if (player.l.unl && tmp.l !== undefined && tmp.l.lbUnl >= 5) mult = mult.times(tmp.l.lbEff[5]) + if (player.ma.unl && MACHINES[6].unl()) mult = mult.times(MACHINES[6].currently()); + break; + case "mb": + if (player.ma.unl && MACHINES[4].unl()) mult = mult.div(MACHINES[4].currently()); break; } return mult @@ -2669,6 +2671,7 @@ function rowReset(row, layer) { } player.hs = { unl: player.hs.unl, + auto: player.hs.auto, order: 0, points: new Decimal(0), best: (keepRow6Milestones||keepRow6) ? player.hs.best : new Decimal(0), @@ -2680,6 +2683,7 @@ function rowReset(row, layer) { player.i = { unl: player.i.unl, auto: player.i.auto, + autoBuild: player.i.autoBuild, points: new Decimal(0), best: (keepRow6Milestones||keepRow6) ? player.i.best : new Decimal(0), lifeBricks: new Decimal(0), @@ -2883,21 +2887,6 @@ function getGenPowerEff() { return eff } -function resetRow(row) { - if (prompt('Are you sure you want to reset this row? It is highly recommended that you wait until the end of your current run before doing this! Type "I WANT TO RESET THIS" to confirm')!="I WANT TO RESET THIS") return - let pre_layers = ROW_LAYERS[row-1] - let layers = ROW_LAYERS[row] - let post_layers = ROW_LAYERS[row+1] - rowReset(row+1, post_layers[0]) - doReset(pre_layers[0], true) - for (let layer in layers) { - player[layers[layer]].unl = false - if (player[layers[layer]].order) player[layers[layer]].order = 0 - } - updateTemp(); - resizeCanvas(); -} - 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); @@ -2912,6 +2901,7 @@ function getEnhancerPow() { function getEnhancerEff() { if (!player.e.unl) return new Decimal(1) + if (tmp.challActive ? tmp.challActive.ge[31] : true) 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)) @@ -2921,6 +2911,7 @@ function getEnhancerEff() { function getEnhancerEff2() { if (!player.e.unl) return new Decimal(0) + if (tmp.challActive ? tmp.challActive.ge[31] : true) return new Decimal(1) let e = player.e.enhancers.sub(tmp.subbedEnh).times(tmp.enhPow) let eff; if (e.gte(0)) eff = e.pow(0.8) @@ -2959,6 +2950,7 @@ function getFreeExtCapsules() { function getCapPow() { if (tmp.challActive ? tmp.challActive.h[41] : true) return new Decimal(0) + if (tmp.challActive ? tmp.challActive.ge[31] : 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]) @@ -3043,7 +3035,7 @@ function getSpace() { 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) + return baseSpace.sub((player.hs.best.gte(1e150)) ? 0 : player.s.spent).max(0) } let SPACE_BUILDINGS = { @@ -3185,6 +3177,7 @@ 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) + if (tmp.challActive ? tmp.challActive.ge[31] : 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()) @@ -3202,6 +3195,7 @@ function getExtraBuildingLevels() { 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()) + if (player.ma.unl && MACHINES[1].unl()) lvl = lvl.add(MACHINES[1].currently()) return lvl } @@ -3322,7 +3316,7 @@ function getQuirkLayerCostBase() { function getQuirkLayerCost(layers) { if (layers === undefined) layers = player.q.layers - if (layers.gte(20)) layers = Decimal.pow(1.05, layers.sub(20)).times(20) + if (layers.gte(20)) layers = Decimal.pow(player.h.challs.includes(72)?1.025:1.05, layers.sub(20)).times(20) if (player.ba.upgrades.includes(55)) layers = layers.sub(LAYER_UPGS.ba[55].currently()) let cost = Decimal.pow(tmp.qCB, Decimal.pow(tmp.qCB, layers).sub(1)) return cost.max(1); @@ -3331,7 +3325,7 @@ function getQuirkLayerCost(layers) { function getQuirkLayerTarg() { let targ = player.q.points.log(tmp.qCB).add(1).log(tmp.qCB) if (player.ba.upgrades.includes(55)) targ = targ.add(LAYER_UPGS.ba[55].currently()) - if (targ.gte(20)) targ = targ.div(20).log(1.05).add(20) + if (targ.gte(20)) targ = targ.div(20).log(player.h.challs.includes(72)?1.025:1.05).add(20) return targ.add(1).floor() } @@ -3343,6 +3337,7 @@ function getQuirkLayerMult() { if (player.q.upgrades.includes(52)) mult = mult.times(LAYER_UPGS.q[52].currently()) if (player.h.challs.includes(52)) mult = mult.times(LAYER_CHALLS.h[52].currently()) if (player.ba.upgrades.includes(13)) mult = mult.times(LAYER_UPGS.ba[13].currently()) + if (player.ge.unl) mult = mult.times(LAYER_CHALLS.ge[31].currently()); return mult } @@ -3405,6 +3400,8 @@ const LAYER_CHALLS = { resDisp: "Points", choose: 1, active(x) { + if (x==12) if (LAYER_CHALLS.ge.active(31)) return true; + if (x<72) if (this.active(72)) return true; if (x<71&&x!=42&&x!=52) if (this.active(71)) return true if (x==11||x==41) if (this.active(51)) return true if (x==31||x==32) if (this.active(61)) return true @@ -3523,15 +3520,15 @@ const LAYER_CHALLS = { effDisp(x) { return format(x)+"x" }, }, 72: { - name: "You shouldn't be seeing this", - desc: "Never gonna give you up, never gonna let you down, never gonna run around and dessert you", - unl() { return false }, - goal: new Decimal(1/0), - reward: "???", + name: "The Truly Final Stockade", + desc: "All previous Hindrances are applied at once.", + unl() { return player.ma.enhancements.gte(1) }, + goal: new Decimal("1e350000"), + reward: "The post-20 Quirk Layer cost scaling is 50% weaker.", }, }, ge: { - rows: 2, + rows: 3, cols: 2, res() { return player.p.points }, resDisp: "Prestige Points", @@ -3542,7 +3539,7 @@ const LAYER_CHALLS = { unl() { return true }, goal: new Decimal("1e10000"), reward: "Gears boost the efficiency of all Super & Hyper layers.", - currently() { return player.ge.points.plus(1).log2().plus(1).log10().plus(1).log10().div(2).times(tmp.challActive?tmp.challActive.ge.combos[11]:0).plus(1) }, + currently() { return player.ge.points.plus(1).log2().plus(1).log10().plus(1).log10().div(2).times(Decimal.cbrt(tmp.challActive?tmp.challActive.ge.combos[11]:0)).plus(1) }, effDisp(x) { return format(x.sub(1).times(100))+"% more efficient" }, }, 12: { @@ -3569,9 +3566,25 @@ const LAYER_CHALLS = { unl() { return true }, goal: new Decimal("1e3875"), reward: "Gears boost Super-Prestige Point gain.", - currently() { return player.ge.points.plus(1).pow(tmp.challActive?tmp.challActive.ge.combos[21]:0).pow(1.25) }, + currently() { return player.ge.points.plus(1).pow(tmp.challActive?Math.pow(tmp.challActive.ge.combos[22], 0.8):0).pow(1.25) }, effDisp(x) { return format(x)+"x" }, }, + 31: { + name: "Crank of the Dead", + desc: "All row 3 layers other than Super-Boosters and Super-Generators do nothing (including upgrades).", + unl() { return player.ma.enhancements.gte(3) }, + goal: new Decimal("1e8325"), + reward: "Gears & Best Machine Power multiply all Quirk Layers.", + currently() { return player.ge.points.plus(1).times(player.ma.best.plus(1)).log10().plus(1).pow(tmp.challActive?tmp.challActive.ge.combos[31]:0).pow(150) }, + effDisp(x) { return format(x)+"x" }, + }, + 32: { + name: "???", + desc: "You aren't supposed to see this...", + unl() { return false }, + goal: new Decimal("10^^69"), + reward: "???", + }, }, } @@ -3588,8 +3601,10 @@ function startChall(layer, x) { if (!player[layer].choices) { player[layer].choices = [x] return; - } else if (player[layer].choices.includes(x)&&player[layer].choices.length= 10) r = r.times(tmp.s.sbEff[10]) + if (player.ma.unl && MACHINES[5].unl()) r = r.times(MACHINES[5].currently()) return r }, nextCapReq(x) { if (x === undefined) x = player.hs.superUpgradeCap - return Decimal.times(x, 200).add(1300) + let req = Decimal.times(x, 200).add(1300) + if (player.ma.unl && MACHINES[2].unl()) req = req.sub(MACHINES[2].currently()).max(0) + return req; }, nextCapTarget() { - let x = player.g.points.sub(1300).div(200) + let x = new Decimal(0) + if (player.ma.unl && MACHINES[2].unl()) x = x.plus(MACHINES[2].currently()) + x = x.plus(player.g.points).sub(1300).div(200) return x.floor().add(1) }, effs: { @@ -4211,8 +4239,15 @@ let HYPERSPACE = { } } +function maxHyperspace() { + if (!HYPERSPACE.canBuy()) return; + let target = HYPERSPACE.target(); + if (target.lte(player.hs.space)) return; + player.hs.space = player.hs.space.max(target) +} + let VERSION = { - beta: 3, + beta: 4, num: 1.2, name: "The Mechanical Update" } @@ -4222,10 +4257,14 @@ VERSION.withName = VERSION.withoutName + (VERSION.name ? ": " + VERSION.name : " let IMPERIUM = { lifeReq() { - return Decimal.pow(10, player.i.lifeBricks.times(2).sqr().add(15)) + let bricks = player.i.lifeBricks + if (bricks.gte(50)) bricks = Decimal.pow(1.02, bricks.sub(50)).times(50) + return Decimal.pow(10, bricks.times(2).sqr().add(15)) }, lifeTarget() { - return player.l.power.max(1).log10().sub(15).sqrt().div(2).add(1).floor() + let target = player.l.power.max(1).log10().sub(15).sqrt().div(2).add(1).floor() + if (target.gte(50)) target = target.div(50).log(1.02).plus(50) + return target; }, canBuild() { let cost = this.cost() @@ -4248,11 +4287,24 @@ let IMPERIUM = { cost(x) { if (x === undefined) x = player.i.extraBuildings let sub = player.sp.upgrades.includes(45) ? 3 : 0 + if (x.gte(20)) x = Decimal.pow(1.05, x.sub(19)).times(20) return { i: x.times(1.75).add(0.5).sub(sub).ceil().max(0), l: x.times(1.5).add(1).sub(sub).ceil().max(0) } }, + target() { + let sub = player.sp.upgrades.includes(45) ? 3 : 0 + let i = player.i.points.plus(sub).sub(0.5).div(1.75) + if (i.gte(20)) i = i.div(20).log(1.05).plus(19) + let targetI = i.plus(1).floor() + + let l = player.i.lifeBricks.plus(sub).sub(1).div(1.5) + if (l.gte(20)) l = l.div(20).log(1.05).plus(19) + let targetL = l.plus(1).floor() + + return targetI.min(targetL) + }, speed() { let x = Decimal.pow(3.75, player.i.extraBuildings.add(5)).recip() x = x.times(IMPERIUM.sgSpeedBoost()) @@ -4273,21 +4325,34 @@ let IMPERIUM = { minSB: 5, } +function maxImperiumBuildings() { + if (!IMPERIUM.canBuild()) return + let target = IMPERIUM.target() + if (target.lte(player.i.extraBuildings)) return; + player.i.extraBuildings = player.i.extraBuildings.max(target); +} + const MASTERY = { spellCost() { let bought = player.mb.extraSpells; - let cost = bought.pow(2).plus(1).plus(player.mb.extraBoosters); + let cost = bought.pow(2).plus(1).plus(player.mb.extraBoosters).plus(player.ma.built); return cost.floor(); }, boosterCost() { let bought = player.mb.extraBoosters; - let cost = bought.pow(3).plus(1).times(2).plus(player.mb.extraSpells); + let cost = bought.pow(3).plus(1).times(2).plus(player.mb.extraSpells).plus(player.ma.built); + return cost.floor(); + }, + machineCost() { + let bought = player.ma.built; + let cost = bought.plus(1).pow(1.5).times(2).plus(player.mb.extraSpells).plus(player.mb.extraBoosters); return cost.floor(); }, respec() { if (!player.mb.unl || !confirm("Are you sure? This will perform a Row 7 reset and will reset your Mastery Buildings!")) return player.mb.extraSpells = new Decimal(0) player.mb.extraBoosters = new Decimal(0) + player.ma.built = new Decimal(0) player.mb.points = player.mb.points.plus(player.mb.spent) player.mb.best = player.mb.best.max(player.mb.points) player.mb.spent = new Decimal(0) @@ -4313,6 +4378,96 @@ function unlockNewLB() { player.mb.extraBoosters = player.mb.extraBoosters.plus(1); } +function unlockNewMachine() { + if (!player.mb.unl) return; + if (!player.ma.unl) return; + let cost = MASTERY.machineCost() + if (player.mb.points.lt(cost)) return; + player.mb.points = player.mb.points.sub(cost); + player.mb.spent = player.mb.spent.plus(cost); + player.ma.built = player.ma.built.plus(1); +} + +const MACHINES = { + maxBuild: 5, + max: 6, + 1: { + unl() { return player.ma.built.gte(1) }, + reward: "Unused Space adds extra levels to all Space Buildings.", + currently() { return getSpace().sqrt().times(player.ma.enhancements.sqrt().plus(1).pow(2)).times(player.ma.built.sub(MACHINES.maxBuild).max(0).plus(1)) }, + effDisp(x) { return "+"+format(x) }, + }, + 2: { + unl() { return player.ma.built.gte(2) }, + reward: "The requirement to increase the cap of Super-Upgrades is lower based on your Total Hyperspace.", + currently() { return player.hs.space.plus(1).times(player.ma.enhancements.sqrt().plus(1)).times(player.ma.built.sub(MACHINES.maxBuild).max(0).plus(1)).log10().times(105).floor() }, + effDisp(x) { return "-"+formatWhole(x) }, + }, + 3: { + unl() { return player.ma.built.gte(3) }, + reward: "All Life Boosters are stronger based on your Best Machine Power.", + currently() { + let ret = player.ma.best.plus(1).log10().times(player.ma.enhancements.sqrt().plus(1)).times(player.ma.built.sub(MACHINES.maxBuild).max(0).plus(1)).plus(1) + if (ret.gte(26)) ret = ret.log10().times(26/Math.log10(26)).min(ret) + return ret; + }, + effDisp(x) { return format(x.sub(1).times(100))+"% stronger" }, + }, + 4: { + unl() { return player.ma.built.gte(4) }, + reward: "Gears make Mastery Bricks cheaper.", + currently() { return player.ge.points.plus(1).log10().plus(1).log10().times(player.ma.enhancements.sqrt().plus(1).times(10)).times(player.ma.built.sub(MACHINES.maxBuild).max(0).plus(1)).plus(1).log10().plus(1) }, + effDisp(x) { return "/"+format(x) }, + }, + 5: { + unl() { return player.ma.built.gte(5) }, + reward: "All Super-Upgrades are stronger based on your Imperium Bricks & Life Bricks.", + currently() { return player.i.points.plus(player.i.lifeBricks).plus(1).log10().times(player.ma.enhancements.sqrt().plus(1)).times(player.ma.built.sub(MACHINES.maxBuild).max(0).plus(1)).plus(1).log10().plus(1) }, + effDisp(x) { return format(x.sub(1).times(100))+"% stronger" }, + }, + 6: { + unl() { return player.ma.enhancements.gte(2) }, + reward: "Best Machine Power boosts Hyperspace Energy gain.", + currently() { return player.ma.best.plus(1).log10().plus(1).pow(player.ma.enhancements.sqrt().plus(1)).pow(player.ma.built.sub(MACHINES.maxBuild).max(0).plus(1)).pow(15) }, + effDisp(x) { return format(x)+"x" }, + }, + + lvlCost(res) { + let e = player.ma.enhancements + if (e.gte(4)) e = Decimal.pow(1.3, e.sub(4)).times(4) + if (res=="ma") return Decimal.pow(10, e.pow(2).plus(1)) + else return e.plus(1).pow(2).plus(14) + }, + lvlUpDesc() { + let desc = "Power up all Machines" + let x = player.ma.enhancements; + if (x.lte(2)) { + desc += " and " + let y = x.toNumber()+1; + switch(y) { + case 1: + desc += "unlock a new Hindrance"; + break; + case 2: + desc += "unlock a new Machine"; + break; + case 3: + desc += "unlock a new Mechanical Challenge"; + break; + } + } + return desc; + }, + canLvlUp() { return player.ma.points.gte(this.lvlCost("ma")) && player.i.points.gte(this.lvlCost("i")) }, +} + +function lvlUpMachines() { + if (!MACHINES.canLvlUp()) return; + player.ma.points = player.ma.points.sub(MACHINES.lvlCost("ma")) + player.i.points = player.i.points.sub(MACHINES.lvlCost("i")) + player.ma.enhancements = player.ma.enhancements.plus(1); +} + const ENDGAME = new Decimal(1/0); // Previously e280,000,000 function keepGoing() { @@ -4413,7 +4568,7 @@ function gameLoop(diff) { if (player.i.unl) { player.i.lifeBricks = player.i.lifeBricks.max(IMPERIUM.lifeTarget()) if (player.i.building) player.i.progress += IMPERIUM.speed().times(diff).toNumber() - if (player.i.progress >= 1) { + if ((player.i.progress >= 1)||(player.ma.best.gte(5)&&player.i.building)) { player.i.progress = 0 player.i.extraBuildings = player.i.extraBuildings.add(1) delete player.i.building @@ -4442,6 +4597,8 @@ function gameLoop(diff) { if (player.m.auto&&player.m.total.gte(50)) for (let i=1;i<=tmp.spellsUnl;i++) activateSpell(i) if (player.ps.auto&&player.ps.best.gte(2)) doReset("ps") if (player.i.auto&&player.mb.total.gte(10)) doReset("i") + if (player.hs.auto&&player.ma.best.gte(1e15)) maxHyperspace() + if (player.i.autoBuild&&player.ma.best.gte(1e15)) maxImperiumBuildings() if (player.hasNaN&&!NaNalert) { clearInterval(interval); diff --git a/remove.png b/remove.png deleted file mode 100644 index 6c51c6848fabcd63cefac8dbfc9448a22859253d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6017 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 z