addLayer("f", { name: "files", // 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: 2, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order startData() { return { unlocked: false, points: new Decimal(0), total: new Decimal(0) }}, color: "#7f1bae", requires() { let req = new Decimal(5000) if (hasUpgrade(this.layer, 32)) { req = req.mul(0.75) } if (hasMilestone(this.layer, 7)) { req = req.mul(0.8) } return req }, // Can be a function that takes requirement increases into account resource: "files", // Name of prestige currency baseResource: "super progress points", // Name of resource prestige is based on baseAmount() {return player.sp.points}, // Get the current amount of baseResource type: "static", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have exponent: 1.5, // Prestige currency exponent base() { let base = 1.5 if (hasUpgrade(this.layer, 41)) base **= 0.95 return base }, gainMult() { // Calculate the multiplier for main currency from bonuses return new Decimal(1) }, gainExp() { // Calculate the exponent on main currency from bonuses return new Decimal(1) }, canBuyMax() { return hasMilestone(this.layer, 6) }, row: 2, // Row the layer is in on the tree (0 is the first row) displayRow: 0, hotkeys: [ {key: "f", description: "F: Reset for files", onPress(){if (canReset(this.layer)) doReset(this.layer)}}, ], milestones: { 0: { requirementDescription: "1 total File.", effectDescription() { return "Total levels boost point gen.
Effect: x" + format(getTotalLevel().add(1).log(5).add(1)) + "." }, done() { return player.f.total.gte(1) } }, 1: { requirementDescription: "2 total Files.", effectDescription: "Triple PP and SPP gen.", done() { return player.f.total.gte(2) } }, 2: { requirementDescription: "3 total Files.", effectDescription: "Multiply PP requirement by 0.5x.", done() { return player.f.total.gte(3) } }, 3: { requirementDescription: "4 total Files.", effectDescription: "Square point gen.", done() { return player.f.total.gte(4) } }, 4: { requirementDescription: "5 total Files.", effectDescription: "Unlock the Directory.", done() { return player.f.total.gte(5) } }, 5: { requirementDescription: "7 total Files.", effectDescription() { return "Total Files boost point gen.
Effect: x" + format(player[this.layer].total.div(2).add(1)) + "." }, done() { return player.f.total.gte(7) } }, 6: { requirementDescription: "10 total Files.", effectDescription: "You can buy max files.", done() { return player.f.total.gte(10) } }, 7: { requirementDescription: "15 total Files.", effectDescription: "Multiply file cost by x0.8.", done() { return player.f.total.gte(15) } }, 8: { requirementDescription: "20 total Files.", effectDescription: "Autobuy all PP buyables.", done() { return player.f.total.gte(20) } }, 9: { requirementDescription: "30 total Files.", effectDescription: "You can now get fractional levels.", done() { return player.f.total.gte(30) } }, }, upgrades: { 11: { description: "Total rank boosts point gen.", effect() { return getTotalRank().add(2) }, effectDisplay() { return "^" + format(this.effect()) + "." }, cost: 1, canAfford() { return hasMilestone(this.layer, 4) }, }, 21: { description: "Start with 2 free Rebased levels.", cost: 3, canAfford() { return hasUpgrade(this.layer, 11) }, branches: [11] }, 22: { description: "Start with 2 free Shorter bars levels.", cost: 3, canAfford() { return hasUpgrade(this.layer, 11) }, branches: [11] }, 23: { description: "Gain 10% of your PP gain every second.", cost: 4, canAfford() { return hasUpgrade(this.layer, 11) }, branches: [11] }, 31: { description: "Make Gamma effect use total level as well.", cost: 5, canAfford() { return hasUpgrade(this.layer, 21) }, branches: [21] }, 32: { description: "Multiply base File cost by 0.75.", cost: 6, canAfford() { return hasUpgrade(this.layer, 21) && hasUpgrade(this.layer, 22) }, branches: [21, 22] }, 33: { description: "Multiply base PP cost by 0.75.", cost: 5, canAfford() { return hasUpgrade(this.layer, 22) }, branches: [22] }, 41: { description: "Raise Beta, Delta, Zeta effects ^1.1.", cost: 8, canAfford() { return hasUpgrade(this.layer, 31) }, branches: [31] }, 42: { description: "Raise File cost base ^0.95.", cost: 8, canAfford() { return hasUpgrade(this.layer, 32) }, branches: [32] }, 43: { description: "Files divide PP cost.", cost: 9, canAfford() { return hasUpgrade(this.layer, 32) && hasUpgrade(this.layer, 33) }, effect() { return player[this.layer].points.add(3).log(2).add(1) }, effectDisplay() { return "/" + format(this.effect()) + "." }, branches: [32, 33] }, 44: { description: "Gain another 15% of your PP gain every second.", cost: 8, canAfford() { return hasUpgrade(this.layer, 23) && hasUpgrade(this.layer, 33) }, branches: [[23, 2], 33] } }, clickables: { 21: { display() { return "Reset directory" }, onClick() { if (confirm("Are you sure you want to respec? This will cause a File reset.")) { if (player[this.layer].upgrades == 0) { player.ach.has55 = true } for (let i of player[this.layer].upgrades) { player[this.layer].points = player[this.layer].points.add(tmp[this.layer].upgrades[i].cost) } player[this.layer].upgrades = [] doReset('f', true) } }, canClick() { return true }, style: { width: "60px", minHeight: "60px" } } }, layerShown(){ return player.p.points.gte(4000) || player[this.layer].unlocked }, branches: ['p'], tabFormat: { filestones: { content: [ "main-display", "prestige-button", "resource-display", "blank", "blank", ["row", [ ["milestones", [0, 2, 4, 6, 8]], ["milestones", [1, 3, 5, 7, 9]] ]] ] }, directory: { content: [ "main-display", ["row", ["prestige-button", ["clickable", 11]]], "resource-display", "blank", "blank", ["clickable", 21], "blank", ["upgrade-tree", [ [11], [21, 22, 23], [31, 32, 33], [41, 42, 43, 44] ]] ], unlocked() { return hasMilestone('f', 4) } }, } })