addLayer("a", { name: "api", symbol: "A", color: apiColor, branches: [ 'r' ], row: 3, position: 1, resource: "endpoints", baseResource: "refactors", infoboxes: { lore: { title: "api", body: `All this refactoring has given you a new sense of perspective on how all these different game engines tend to work, and you have an idea for a new Application Programming Interface (API) that could simplify everything enormously, making almost everything easier to implement. The more refactoring experience you have, the more API end points you can use to implement your design.

` + `Designing your API means spending your endpoints on adding or improving the various bonuses available to you.` } }, resetDescription: "Design ", startData() { return { unlocked: false, points: new Decimal(0), unused: new Decimal(0) }}, layerShown() { return player[this.layer].unlocked || player.r.total.gte(8) }, type: "static", requires: new Decimal(10), base: new Decimal(1.2), baseAmount() { return player.r.points }, exponent: 1, gainMult() { mult = new Decimal(1) return mult }, gainExp() { return new Decimal(1) }, roundUpCost: true, onPrestige(gain) { player[this.layer].unused = player[this.layer].unused.add(gain) }, tooltip() { return `${formatWhole(player.a.unused)} endpoints` }, hotkeys: [ { key: "a", description: "Press A to design API endpoints", onPress() { if (canReset(this.layer)) doReset(this.layer) } } ], tabFormat: [ ["infobox", "lore"], ["display-text", () => inChallenge("d", 12) ? `

Disabled during ${layers.d.challenges[player.d.activeChallenge].name} degree plan

` : ""], ["display-text", () => `You have

${formatWhole(player.a.unused)}

endpoints`], ["display-text", () => `You have earned a total of ${player.a.points} endpoints.`], "blank", "prestige-button", "blank", "buyables", "blank", "milestones" ], buyables: { rows: 2, cols: 3, respec() { player.a.unused = player.a.points setBuyableAmount(this.layer, 11, 0) setBuyableAmount(this.layer, 12, 0) setBuyableAmount(this.layer, 13, 0) setBuyableAmount(this.layer, 21, 0) setBuyableAmount(this.layer, 22, 0) setBuyableAmount(this.layer, 23, 0) doReset("a", true) }, respecText: "Re-design API", 11: { title: "/refactoring/bonus", display() { const cost = this.cost() return `Each endpoint squares refactoring bonuses.
Currently: ^${format(this.effect())}
Requires ${formatWhole(cost.endpoints)} endpoints and ${format(cost.updates)} updates.` }, cost(x) { const amt = x || getBuyableAmount(this.layer, this.id) return { endpoints: new Decimal(1).add(amt), updates: new Decimal(7500).mul(new Decimal(1).add(amt)) } }, canAfford() { const cost = this.cost() return player[this.layer].unused.gte(cost.endpoints) && player.u.points.gte(cost.updates) }, buy() { const cost = this.cost() player[this.layer].unused = player[this.layer].unused.sub(cost.endpoints) player.u.points = player.u.points.sub(cost.updates) setBuyableAmount(this.layer, this.id, new Decimal(1).add(getBuyableAmount(this.layer, this.id))) }, effect() { return inChallenge("d", 12) ? new Decimal(1) : new Decimal(2).pow(Decimal.mul(getBuyableAmount(this.layer, this.id), buyableEffect("a", 23))) } }, 12: { title: "/motivation/boost", display() { const cost = this.cost() return `These endpoints delay the productivity slowdown by 10 raised to the power of (5 raised to the power of endpoints).
Currently: /${format(this.effect())}
Requires ${formatWhole(cost.endpoints)} endpoints and ${format(cost.updates)} updates.` }, cost(x) { const amt = x || getBuyableAmount(this.layer, this.id) return { endpoints: new Decimal(1).add(amt), updates: new Decimal(10000).mul(new Decimal(2).pow(amt)) } }, canAfford() { const cost = this.cost() return player[this.layer].unused.gte(cost.endpoints) && player.u.points.gte(cost.updates) }, buy() { const cost = this.cost() player[this.layer].unused = player[this.layer].unused.sub(cost.endpoints) player.u.points = player.u.points.sub(cost.updates) setBuyableAmount(this.layer, this.id, new Decimal(1).add(getBuyableAmount(this.layer, this.id))) }, effect() { return inChallenge("d", 12) ? new Decimal(1) : new Decimal(10).pow(new Decimal(5).pow(Decimal.mul(getBuyableAmount(this.layer, this.id), buyableEffect("a", 23))).sub(1)) } }, 13: { title: "/updates", display() { const cost = this.cost() return `Each endpoint quadruples update gain.
Currently: x${format(this.effect())}
Requires ${formatWhole(cost.endpoints)} endpoints and ${format(cost.updates)} updates.` }, cost(x) { const amt = x || getBuyableAmount(this.layer, this.id) return { endpoints: new Decimal(1).add(amt), updates: new Decimal(2).pow(amt).mul(50000) } }, canAfford() { const cost = this.cost() return player[this.layer].unused.gte(cost.endpoints) && player.u.points.gte(cost.updates) }, buy() { const cost = this.cost() player[this.layer].unused = player[this.layer].unused.sub(cost.endpoints) player.u.points = player.u.points.sub(cost.updates) setBuyableAmount(this.layer, this.id, new Decimal(1).add(getBuyableAmount(this.layer, this.id))) }, effect() { return inChallenge("d", 12) ? new Decimal(1) : new Decimal(4).pow(Decimal.mul(getBuyableAmount(this.layer, this.id), buyableEffect("a", 23))) }, unlocked() { return challengeCompletions("d", 11) > 0 } }, 21: { title: "/experience", display() { const cost = this.cost() return `Each endpoint multiplies experience gain by 50x.
Currently: x${format(this.effect())}
Requires ${formatWhole(cost.endpoints)} endpoints and ${format(cost.updates)} updates.` }, cost(x) { const amt = x || getBuyableAmount(this.layer, this.id) return { endpoints: new Decimal(1).add(amt), updates: new Decimal(1000).mul(new Decimal(5).pow(new Decimal(1).add(amt))) } }, canAfford() { const cost = this.cost() return player[this.layer].unused.gte(cost.endpoints) && player.u.points.gte(cost.updates) }, buy() { const cost = this.cost() player[this.layer].unused = player[this.layer].unused.sub(cost.endpoints) player.u.points = player.u.points.sub(cost.updates) setBuyableAmount(this.layer, this.id, new Decimal(1).add(getBuyableAmount(this.layer, this.id))) }, effect() { return inChallenge("d", 12) ? new Decimal(1) : new Decimal(50).pow(Decimal.mul(getBuyableAmount(this.layer, this.id), buyableEffect("a", 23))) } }, 22: { title: "/refactoring/prod", display() { const cost = this.cost() return `Each endpoint raises the extra slowdown effects of refactoring to the ^.2 power.
Currently: ^${format(this.effect())}
Requires ${formatWhole(cost.endpoints)} endpoints and ${format(cost.updates)} updates.` }, cost(x) { const amt = x || getBuyableAmount(this.layer, this.id) return { endpoints: new Decimal(1).add(amt), updates: new Decimal(500).mul(new Decimal(5).pow(new Decimal(2).add(amt))) } }, canAfford() { const cost = this.cost() return player[this.layer].unused.gte(cost.endpoints) && player.u.points.gte(cost.updates) }, buy() { const cost = this.cost() player[this.layer].unused = player[this.layer].unused.sub(cost.endpoints) player.u.points = player.u.points.sub(cost.updates) setBuyableAmount(this.layer, this.id, new Decimal(1).add(getBuyableAmount(this.layer, this.id))) }, effect() { return inChallenge("d", 12) ? new Decimal(1) : new Decimal(.2).pow(Decimal.mul(getBuyableAmount(this.layer, this.id), buyableEffect("a", 23))) } }, 23: { title: "/api/v2", display() { const cost = this.cost() return `Each endpoint multiplies all other endpoint effects by 50%.
Currently: x${format(this.effect())}
Requires ${formatWhole(cost.endpoints)} endpoints and ${format(cost.updates)} updates.` }, cost(x) { const amt = x || getBuyableAmount(this.layer, this.id) return { endpoints: new Decimal(1).add(amt), updates: new Decimal(2).pow(amt).mul(75000) } }, canAfford() { const cost = this.cost() return player[this.layer].unused.gte(cost.endpoints) && player.u.points.gte(cost.updates) }, buy() { const cost = this.cost() player[this.layer].unused = player[this.layer].unused.sub(cost.endpoints) player.u.points = player.u.points.sub(cost.updates) setBuyableAmount(this.layer, this.id, new Decimal(1).add(getBuyableAmount(this.layer, this.id))) }, effect() { return inChallenge("d", 12) ? new Decimal(1) : new Decimal(1.5).pow(getBuyableAmount(this.layer, this.id)) }, unlocked() { return challengeCompletions("d", 11) > 0 } } }, milestones: { 0: { requirementDescription: "1 total API endpoints", effectDescription: "Retain the first, second, fourth, and eighth refactors milestones", done() { return player[this.layer].points.gte(1) } }, 1: { requirementDescription: "2 total API endpoints", effectDescription: "Buying refactors will buy as many as you can afford", done() { return player[this.layer].points.gte(2) } }, 2: { requirementDescription: "3 total API endpoints", effectDescription: "Retain all refactors milestones", done() { return player[this.layer].points.gte(3) } }, 3: { requirementDescription: "4 total API endpoints", effectDescription: "Unlock a new Degree program", done() { return player[this.layer].points.gte(4) } }, 4: { requirementDescription: "5 total API endpoints", effectDescription: "Row 4 resets don't reset refactorings", done() { return player[this.layer].points.gte(5) } } } })