addLayer("ach", { name: "achievements", // This is optional, only used in a few places, If absent it just uses the layer id. symbol: "☆", // This appears on the layer's node. Default is the id with the first letter capitalized position: 0, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order startData() { return { unlocked: true, has45: false, has55: false, has75: false }}, color: "#9d750d", effect() { return Decimal.div(player[this.layer].achievements.length, 20).add(1) }, achievements: { 11: { name: "All that progress is gone!", done() { return player.p.points.gte(1) }, tooltip: "Reset for 1 PP." }, 12: { name: "So that's what the mechanic is...", done() { return getAlphaLevel().gte(2) }, tooltip: "Reach Alpha level 2." }, 13: { name: "This is quite fun!", done() { return getBetaLevel().gte(1) }, tooltip: "Reach Beta level 1." }, 14: { name: "Oh so many bars.", done() { return getGammaLevel().gte(1) }, tooltip: "Reach Gamma level 1." }, 15: { name: "GREEN!!!", done() { return options.theme === "verdant" }, tooltip: "Switch to the Verdant theme." }, 21: { name: "Nomial gains.", done() { return getPointGen().gte(1) }, tooltip: "Get 1 point per second." }, 22: { name: "That's an exponent!", done() { return getEpsilonLevel().gte(1) }, tooltip: "Reach Epsilon level 1." }, 23: { name: "What's a \"Rank\"?", done() { return getAlphaRank().gte(1) }, tooltip: "Reach Alpha rank 1." }, 24: { name: "No more bars?", done() { return getZetaLevel().gte(1) }, tooltip: "Reach Zeta level 1." }, 25: { name: "Lots of points", done() { return player.points.gte(200) }, tooltip: "Reach 200 points." }, 31: { name: "Even more progress.", done() { return getBuyableAmount('p', 11).gte(1) }, tooltip: "Get 1x More progress buyable." }, 32: { name: "So this just boosts Gamma further?", done() { return getBuyableAmount('p', 12).gte(1) }, tooltip: "Get 1x Rebased buyable." }, 33: { name: "Softcap?? >:(", done() { return getPointGen().gte(getKappaEffect().mul(1000)) }, tooltip: "Reach the first softcap." }, 33: { name: "Decrementy", done() { return getBuyableAmount('p', 13).gte(1) }, tooltip: "Get 1x Shorter bars buyable." }, 34: { name: "Super!", done() { return player.points.gte(5000) }, tooltip: "Reach 5000 points." }, 35: { name: "Where were you??", done() { return getPointGen().gt(0) && player.points.div(100).gte(getPointGen()) }, tooltip: "Have your points reach 100x your points per second." }, 41: { name: "Progressed further.", done() { return getThetaLevel().gte(1) }, tooltip: "Reach Theta level 1." }, 42: { name: "Literally just another exponent.", done() { return getIotaLevel().gte(1) }, tooltip: "Reach Iota level 1." }, 43: { name: "YES! GOODBYE SOFTCAP!", done() { return getKappaLevel().gte(1) }, tooltip: "Reach Kappa level 1." }, 44: { name: "Very big multiplier", done() { return getLambdaLevel().gte(1) }, tooltip: "Reach Lambda level 1." }, 45: { name: "Don't even need PP anymore", done() { return player[this.layer].has45 }, tooltip: "Reset for SPP with 0 PP." }, 51: { name: "An exponent to progress points?", done() { return getBuyableAmount('sp', 11).gte(1) }, tooltip: "Get 1x Much more progress buyable." }, 52: { name: "And another exponent to points ¬_¬", done() { return getBuyableAmount('sp', 12).gte(1) }, tooltip: "Get 1x Super point booster buyable." }, 53: { name: "A new prestige layer!", done() { return player.sp.points.gte(250) }, tooltip: "Reach 250 SPP." }, 54: { name: "Retention!", done() { return hasMilestone('f', 3) }, tooltip: "Earn Filestone 4." }, 55: { name: "Well that was useful", done() { return player[this.layer].has55 }, tooltip: "Respec directory upgrades when you have none." }, 61: { name: "Ooh upgrades", done() { return player.f.upgrades.map(x => x - 20).filter(x => x >= 0 && x < 9).length == 3 }, tooltip: "Get all row 2 directory upgrades." }, 62: { name: "Lots of boosts!!", done() { return player.f.upgrades.map(x => x - 30).filter(x => x >= 0 && x < 9).length == 3 }, tooltip: "Get all row 3 directory upgrades." }, 63: { name: "Now it gets expensive.", done() { return player.f.upgrades.map(x => x - 40).filter(x => x >= 0 && x < 9).length == 4 }, tooltip: "Get all row 4 directory upgrades." }, 64: { name: "Extreme.", done() { return player.f.upgrades.map(x => x - 50).filter(x => x >= 0 && x < 9).length == 4 }, tooltip: "Get all row 5 directory upgrades." }, 65: { name: "100 times over.", done() { return player.f.total.gte(100) }, tooltip: "Get 100 Files." }, 71: { name: "Alright I'm out of ideas.", done() { return player.f.upgrades.map(x => x - 60).filter(x => x >= 0 && x < 9).length == 2 }, tooltip: "Get all row 6 directory upgrades." }, 72: { name: "I guess one last buyable?", done() { return getBuyableAmount('f', 11).gte(10) }, tooltip: "Get 10 The finale of the intro buyables." }, 73: { name: "FOR THE LOVE OF GOD JUST GET BIGGER", done() { return hasMilestone('f', 13) }, tooltip: "Reach Filestone 14" }, 74: { name: "And then comes the prestige layer", done() { return player.points.log(2).gte(127.9) }, tooltip: "Reach " + format(Decimal.pow(2, 127.9)) + " points" }, 81: { name: "Is this even balanced?", done() { return hasMilestone('i', 1) }, tooltip: "Reach Integral milestone 2" }, 75: { name: "Another one of these?", done() { return player[this.layer].has75 }, tooltip: "Respec number buyables when you have none." }, 82: { name: "A... number?", done() { return hasMilestone('i', 2) }, tooltip: "Reach Integral milestone 3" }, }, tabFormat: [ "blank", ["raw-html", function () { return "Achievements: " + format(player[this.layer].achievements.length) + "/" + format(Object.keys(tmp[this.layer].achievements).length - 2) }], ["raw-html", function () { return "Effect: x" + format(tmp[this.layer].effect) + " to point gen." }], "blank", "achievements" ], tooltip() { return format(player[this.layer].achievements.length) + " achievement" + (player[this.layer].achievements.length == 1 ? "" : "s") }, row: "side", // Row the layer is in on the tree (0 is the first row) layerShown(){return true} })