diff --git a/js/data/buttons.js b/js/data/buttons.js index 34e18d2..b585f4f 100644 --- a/js/data/buttons.js +++ b/js/data/buttons.js @@ -24,7 +24,7 @@ let tierColors = [ "#aaa", "#c4c", "#f94", - "#777", + "#777", "#a7c", ] @@ -209,7 +209,9 @@ function getButtonGain(row, tier) { return D.pow(base, D.pow(1.05, tier).sub(1).mul(20)).mul(mult); } function getRowMulti(row, index) { - index ??= game.ladder.findIndex(x => D.eq(x.tier, row)); + index ??= game.ladder.findIndex(x => D.eq(x.tier, row)); + if(index < 0)return D.add(getRowAmount(D.add(row, 1)), 1) + if(index == 0)return D.add(getRowAmount(D.add(row, 1)), 1).mul(temp.milestoneMultis[index] ?? 1).mul(temp.sigilEffects[index] ?? 1).mul(getCollapseMult()); return D.add(getRowAmount(D.add(row, 1)), 1).mul(temp.milestoneMultis[index] ?? 1).mul(temp.sigilEffects[index] ?? 1); } function getButtonCost(row, tier) { @@ -264,7 +266,28 @@ function makeRow(row) { presses: D(0), }; game.ladder.push(highest); - } + } + if(D.lte(highest.tier, row) && game.ladder.length == 10 && game.unlocks.col1){ + //if(game.collapsed.gte(5) && !game.unlocks.col2)return; + game.collapsed = game.collapsed.add(1); + for(let i = 2;i < 10; i++){ + game.ladder[i-1]=game.ladder[i]; + } + highest = { + tier: D.add(highest.tier, 1), + amount: D(0), + level: D(0), + presses: D(0), + }; + game.ladder[9]=highest; + updateRuneStats(); + updateMilestoneStats(); + updateAllChargerUpgEffects(); + updateAutomationStats(); + updateTokenStats(); + updateSigilEffects(); + allDirty = true; + } } function updateVisibleUnlocks() { @@ -291,8 +314,8 @@ function checkEndgame() { desc.innerHTML = ` You've purchased all the available unlocks currently in the game!
However, it is not the end of the journey...
- Collapse is not implemented yet, make sure to stay tuned for future game updates!
-
+ Collapse is just implemented by loader3229, make sure to stay tuned for future game updates!
+ To collapse the first reset layer, you need to reset Hyperity once after unlocking collapse.
Time played: ${format.time(game.stats.timePlayed)}
` showOverlay("popup", "Congratulations!", desc, ["Ok"]); @@ -332,4 +355,39 @@ function doResetAuto(times) { } break; } -} +} + +function getHighestButtonForCollapse(row, amount){ + let base = D.eq(row, 0) ? 5 : D.eq(row, 1) ? 1e5 : D.pow(2, row).mul(250); + return D.div(D(amount).max(0), base).add(1).logBase(D.add(row, 1).mul(10)).div(10).add(1).logBase(1.1); +} + +/* function getMultiReqForCollapse(row, amount, orig){ + if(game.unlocks.col2)return orig; + amount = amount.div(getRowMulti(row)).div(temp.sigilEffects[0]); + let tier = getButtonTierForCollapse(row, amount); + if(D(row).gte(2))return getMultiReqForCollapse(D(row).sub(1), getButtonCostForCollapse(row, tier), orig); + return getButtonCostForCollapse(row, tier).max(orig); +} */ + +function getButtonTierForCollapse(row, amount) { + let base = D.eq(row, 0) ? 8 : 4; + let mult = D.eq(row, 0) ? 1 : D.add(row, 1); + return amount.div(mult).logBase(base).div(20).max(-1).add(1).logBase(1.05); +} + +function getButtonCostForCollapse(row, tier) { + let base = D.eq(row, 0) ? 5 : D.eq(row, 1) ? 1e5 : D.pow(2, row).mul(250); + return D.add(row, 1).mul(10).pow(D.pow(1.1, tier).sub(1).mul(10)).mul(base); +} + +function getCollapseMult() { + let m = game.ladder[0].amount, mult = D(1); + if(game.collapsed.gte(1)){ + for(let i = 1;i <= game.collapsed.toNumber();i++){ + m = getButtonGain(i, getHighestButtonForCollapse(i, m)).mul(getRowMulti(i)).mul(temp.sigilEffects[0]); + mult = mult.mul(m); + } + } + return mult; +} \ No newline at end of file diff --git a/js/data/milestones.js b/js/data/milestones.js index 7220116..ab4d0f9 100644 --- a/js/data/milestones.js +++ b/js/data/milestones.js @@ -23,10 +23,19 @@ let milestones = { goalAmount: (x) => D.add(x, 1).mul(D.add(x, 15)), goalText: ["Complete", "milestones for"], goalPrecision: 0, - rewardAmount: (x, row) => D.mul(0.5, x).add(2), + rewardAmount: (x, row) => D.mul(D.pow(2,(D(game.milestones.collapse||0)).sub(1)), x).add(2), rewardText: ["×{0}", "all above milestones' effect"], rewardPrecision: 1, }, + collapse: { + goalTarget: (row) => game.collapsed, + goalAmount: (x) => D.add(x, 1), + goalText: ["Collapse", "layers for"], + goalPrecision: 0, + rewardAmount: (x, row) => D.pow(2, x), + rewardText: ["×{0}", "above milestones' effect(Resets previous milestone)"], + rewardPrecision: 0, + }, }, rows: { presses: { @@ -55,7 +64,8 @@ function clickGlobalMilestone(id) { let level = game.milestones[id] ?? 0; if (D.gte(data.goalTarget(), data.goalAmount(level))) { game.milestones[id] = D.add(level, 1); - updateMilestoneStats(); + if(id=="collapse")delete game.milestones.meta; + updateMilestoneStats(); } } diff --git a/js/data/sigils.js b/js/data/sigils.js index 861b1bd..ed6b42f 100644 --- a/js/data/sigils.js +++ b/js/data/sigils.js @@ -10,7 +10,7 @@ function forgeSigil(cooldown = 200, amount = 1) { if (D.gte(game.scraps, cost) && time - sigilTime >= cooldown) { let bulk = D.div(game.scraps, cost).floor().min(amount); game.scraps = D.sub(game.scraps, D.mul(cost, bulk)); - let rarity = Math.min(Math.floor(Math.log(1 / (1 - Math.random()))), 10); + let rarity = Math.min(Math.floor(Math.log(1 / (1 - Math.random()))), 9); while (game.sigils.length <= rarity) game.sigils.push(D(0)); game.sigils[rarity] = D.add(game.sigils[rarity], bulk); game.stats.sigilForged++; diff --git a/js/save.js b/js/save.js index 33af4ca..b7d1fca 100644 --- a/js/save.js +++ b/js/save.js @@ -27,6 +27,8 @@ function getStartGame() { sigils: [], + collapsed: D(0), + options: { tickRate: 10, diff --git a/js/tabs/buttons.js b/js/tabs/buttons.js index e4e0469..2543139 100644 --- a/js/tabs/buttons.js +++ b/js/tabs/buttons.js @@ -68,8 +68,8 @@ tabs.buttons = { for (let a = 0; a < game.ladder.length; a++) { let data = game.ladder[a]; let row = this.data.rows[a]; - let name = D.lt(data.tier, tierNames.length) ? tierNames[D(data.tier).toNumber()] : "p"; - row.style.setProperty("--background", D.lt(data.tier, tierColors.length) ? tierColors[D(data.tier).toNumber()] : "#f45"); + let name = D.lt(data.tier, tierNames.length) ? tierNames[D(data.tier).toNumber()] : "Reset "+D(data.tier).toNumber(); + row.style.setProperty("--background", tierColors[D(data.tier).toNumber()%tierColors.length]); row.amount.textContent = format(data.amount); row.name.textContent = name; @@ -96,7 +96,7 @@ tabs.buttons = { button.cost = cost; } - if (game.unlocks.btn5) data.level = getHighestButton(a, a == 0 ? game.money : game.ladder[a - 1].amount).max(data.level); + if (game.unlocks.btn5) data.level = getHighestButton(data.tier, a == 0 ? game.money : game.ladder[a - 1].amount).max(data.level); let offset = D.sub(data.level, 6).max(0); let multi = getRowMulti(data.tier); let needsUpdate = allDirty || D.neq(multi, row.multi) || D.neq(row.items[0]?.tier ?? -1, offset); @@ -107,7 +107,7 @@ tabs.buttons = { let button = row.items[b]; button.tier = D.add(offset, b); let cost = getButtonCost(data.tier, button.tier); - if (needsUpdate) { + if (needsUpdate) { button.gain.textContent = "+" + format(getButtonGain(data.tier, button.tier).mul(row.multi)) + " " + name; button.cost.textContent = (a == 0 ? "−" : "≥") + format(cost) + " " + prevName; if (game.unlocks.btn6) button.setAttribute("mark", "#" + format(button.tier.add(1))); diff --git a/js/tabs/milestones.js b/js/tabs/milestones.js index ec8c000..e777e32 100644 --- a/js/tabs/milestones.js +++ b/js/tabs/milestones.js @@ -93,8 +93,8 @@ tabs.milestones = { for (let a = 0; a < game.ladder.length; a++) { let data = game.ladder[a]; let row = this.data.rows[a]; - let name = D.lt(data.tier, tierNames.length) ? tierNames[D(data.tier).toNumber()] : "p"; - row.style.setProperty("--background", D.lt(data.tier, tierColors.length) ? tierColors[D(data.tier).toNumber()] : "#f45"); + let name = D.lt(data.tier, tierNames.length) ? tierNames[D(data.tier).toNumber()] : "Reset "+D(data.tier).toNumber(); + row.style.setProperty("--background", tierColors[D(data.tier).toNumber()%tierColors.length]); row.amount.textContent = format(data.amount); row.name.textContent = name; diff --git a/js/tabs/sigils.js b/js/tabs/sigils.js index 4388a3f..c4010d0 100644 --- a/js/tabs/sigils.js +++ b/js/tabs/sigils.js @@ -95,8 +95,9 @@ tabs.sigils = { for (let b = 0; b < game.sigils.length; b++) { let ctn = this.data.details.items[b]; let tier = game.ladder[b].tier; - let name = D.lt(tier, tierNames.length) ? tierNames[D(tier).toNumber()] : "p"; + let name = D.lt(tier, tierNames.length) ? tierNames[D(tier).toNumber()] : "Reset "+D(tier).toNumber(); ctn.textContent = "×" + format(temp.sigilEffects[b], 2) + " all " + name + " gains"; + if(b == 0 && game.unlocks.col1)ctn.textContent = "×" + format(temp.sigilEffects[b], 2) + " all " + name + "/Collapsed Layer gains"; } }, onEnd() {