addLayer("i", { name: "integrals", // 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: false, points: new Decimal(0), total: new Decimal(0), incDelta: 1, number: [1] }}, color: "#a62222", requires: Decimal.pow(2, 127.9), // Can be a function that takes requirement increases into account resource: "integrals", // Name of prestige currency baseResource: "points", // Name of resource prestige is based on baseAmount() {return player.points}, // Get the current amount of baseResource type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have exponent: 0.1, // Prestige currency exponent 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) }, row: 3, // Row the layer is in on the tree (0 is the first row) displayRow: 1, hotkeys: [ {key: "i", description: "I: reset for integrals", onPress(){if (canReset(this.layer)) doReset(this.layer)}}, ], milestones: { 0: { requirementDescription: "1 total Integral.", effectDescription: "Gain double Files and halve total File effect on File cost.", done() { return player[this.layer].total.gte(1) } }, 1: { requirementDescription: "2 total Integrals.", effectDescription: "Start every reset with 1000 PP, 250 SPP, and 5 Files", done() { return player[this.layer].total.gte(2) } }, 2: { requirementDescription: "3 total Integrals.", effectDescription: "Unlock the Number.", done() { return player[this.layer].total.gte(3) } }, }, buyables: { 11: { title: "Longer number", effect() { return getBuyableAmount(this.layer, this.id).add(1).toNumber() }, cost() { return getBuyableAmount(this.layer, this.id).add(1).mul(2) }, display() { return "Increase the length of your number.

Amount: " + format(getBuyableAmount(this.layer, this.id)) + ".
Effect: " + format(this.effect(getBuyableAmount(this.layer, this.id))) + " digits.
Cost: " + format(this.cost(getBuyableAmount(this.layer, this.id))) + " Integrals." }, canAfford() { return Decimal.gte(player[this.layer].points, this.cost()) }, buy() { player[this.layer].points = player[this.layer].points.sub(this.cost()) addBuyables(this.layer, this.id, 1) player[this.layer].number.push(0) } }, 12: { title: "Faster incrementing", effect() { return getBuyableAmount(this.layer, this.id).add(1).pow(1.3).toNumber() }, cost() { return getBuyableAmount(this.layer, this.id).add(1).mul(3) }, display() { return "Increase the speed of incrementing.

Amount: " + format(getBuyableAmount(this.layer, this.id)) + ".
Effect: " + format(this.effect(getBuyableAmount(this.layer, this.id))) + "/s.
Cost: " + format(this.cost(getBuyableAmount(this.layer, this.id))) + " Integrals." }, canAfford() { return Decimal.gte(player[this.layer].points, this.cost()) }, buy() { player[this.layer].points = player[this.layer].points.sub(this.cost()) addBuyables(this.layer, this.id, 1) } }, 13: { title: "Higher base", effect() { return getBuyableAmount(this.layer, this.id).add(2).toNumber() }, cost() { return getBuyableAmount(this.layer, this.id).add(1).mul(10) }, display() { return "Increase the base of your number.

Amount: " + format(getBuyableAmount(this.layer, this.id)) + "/" + format(this.purchaseLimit) + ".
Effect: " + format(this.effect(getBuyableAmount(this.layer, this.id))) + ".
Cost: " + format(this.cost(getBuyableAmount(this.layer, this.id))) + " Integrals." }, canAfford() { return Decimal.gte(player[this.layer].points, this.cost()) }, buy() { player[this.layer].points = player[this.layer].points.sub(this.cost()) addBuyables(this.layer, this.id, 1) }, purchaseLimit: 34 }, }, numberEffect() { return Math.sqrt(player[this.layer].number.reduceRight((x, y) => x * buyableEffect('i', 13) + y) + 1) }, update(diff) { if (isNaN(diff)) return player[this.layer].incDelta += diff player[this.layer].number[0] += Math.floor(player[this.layer].incDelta * buyableEffect('i', 12)) player[this.layer].incDelta %= 1/buyableEffect('i', 12) for (let i = 0; i < player[this.layer].number.length - 1; i ++) { player[this.layer].number[i+1] += Math.floor(player[this.layer].number[i] / buyableEffect('i', 13)) player[this.layer].number[i] %= buyableEffect('i', 13) } if (player[this.layer].number[player[this.layer].number.length - 1] >= buyableEffect('i', 13)) { player[this.layer].number = new Array(buyableEffect('i', 11)).fill(buyableEffect('i', 13) - 1) } }, clickables: { 21: { display() { return "Reset number buyables" }, onClick() { if (confirm("Are you sure you want to respec? This will reset your number.")) { if ([11, 12, 13].map(n => getBuyableAmount(this.layer, n)).reduce((a, b) => a.add(b)).eq(0)) { player.ach.has75 = true } player[this.layer].points = player[this.layer].total player[this.layer].buyables[11] = new Decimal(0) player[this.layer].buyables[12] = new Decimal(0) player[this.layer].buyables[13] = new Decimal(0) } }, canClick() { return true }, style: { width: "60px", minHeight: "60px" } } }, tabFormat: { main: { content: [ "main-display", "prestige-button", "resource-display", "blank", "blank", "milestones", ["raw-html", "More content coming your way!"] ] }, number: { content: [ "main-display", "prestige-button", "resource-display", "blank", "blank", ["raw-html", function() { return `Your number is

` + player[this.layer].number.map(x => "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[x]).reverse().join('') + `


in base

` + format(buyableEffect(this.layer, 13)) + `

,
giving you x

` + format(tmp[this.layer].numberEffect) + `

to point, PP, and SPP gen.` }], "blank", ["buyables", [1]] ], unlocked() { return hasMilestone('i', 2) } } }, layerShown(){ return player.points.gte("1e25") || player[this.layer].unlocked }, branches: ['p', 'sp', 'f'] })