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() {