1872 lines
No EOL
96 KiB
JavaScript
1872 lines
No EOL
96 KiB
JavaScript
addLayer("p", {
|
|
|
|
effect() {return {}},
|
|
startData() { return {
|
|
unl: true,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
}},
|
|
color:() => "#00bfbf",
|
|
background:() => undefined,
|
|
requires:() => new Decimal(10), // Can be a function that takes requirement increases into account
|
|
resource: "prestige points", // 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.5, // Prestige currency exponent
|
|
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
if (player[this.layer].upgrades.includes(21)) mult = mult.times(2)
|
|
if (player[this.layer].upgrades.includes(23)) mult = mult.times(this.upgrades[23].effect())
|
|
if (player.b.upgrades.includes(11)) mult = mult.times(layers.b.upgrades[11].effect())
|
|
if (player.g.upgrades.includes(11)) mult = mult.times(layers.g.upgrades[11].effect())
|
|
if (player.e.upgrades.includes(11)) mult = mult.times(layers.e.upgrades[11].effect())
|
|
if (player.e.unl) mult = mult.times(layers.e.buyables[11].effect.second)
|
|
if (player.d.unl) mult = mult.times(layers.d.buyables[11].effect(player.d.buyables[11]).first)
|
|
if (!player.s.active) if (player.pr.buyables[13].gt(0)) mult = mult.times(layers.pr.buyables[13].effect().first)
|
|
if (player.s.challs.includes(21)) mult = mult.times(layers.s.challs[21].effect())
|
|
return mult.max(1)
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
let exp = new Decimal(1)
|
|
if (player.d.unl && player.d.banking == 1) exp = exp.div(2)
|
|
if (player.s.active == 11) exp = exp.div(10)
|
|
return exp
|
|
},
|
|
row: 0, // Row the layer is in on the tree (0 is the first row)
|
|
upgrades: {
|
|
rows: 2,
|
|
cols: 3,
|
|
11: {
|
|
desc:() => "Gain 1 Point every second.",
|
|
cost:() => new Decimal(1),
|
|
unl() { return player[this.layer].unl }, // The upgrade is only visible when this is true
|
|
},
|
|
12: {
|
|
desc:() => "Point generation is faster based on your unspent prestige points.",
|
|
cost:() => new Decimal(1),
|
|
unl() { return player[this.layer].upgrades.includes(11) },
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
if (player.d.banking == 1) return new Decimal(1)
|
|
let ret = player[this.layer].points.add(2).pow(0.5)
|
|
if (player.s.unl) ret = ret.pow(layers.s.effect())
|
|
if (ret.gte("1e20000000")) ret = ret.sqrt().times("1e10000000")
|
|
return ret;
|
|
},
|
|
effectDisplay() { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
13: {
|
|
desc:() => "Points boost point gain.",
|
|
cost:() => new Decimal(5),
|
|
unl() { return player[this.layer].upgrades.includes(12) },
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.points.add(1).log10().add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay() { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
21: {
|
|
desc:() => "Double prestige point gain.",
|
|
cost:() => new Decimal(10),
|
|
unl() { return player[this.layer].upgrades.includes(13) },
|
|
},
|
|
22: {
|
|
desc:() => "Point generation is faster based on your prestige upgrades.",
|
|
cost:() => new Decimal(25),
|
|
unl() { return player[this.layer].upgrades.includes(21) },
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = Decimal.pow(1.4, player[this.layer].upgrades.length)
|
|
return ret
|
|
},
|
|
effectDisplay() { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
23: {
|
|
desc:() => "Prestige Point gain is boosted by normal Points.",
|
|
cost:() => new Decimal(250),
|
|
unl() { return player[this.layer].upgrades.includes(22) },
|
|
effect() {
|
|
let ret = player.points.add(1).log10().cbrt().add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay() { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
},
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
if(resettingLayer == "b") {
|
|
if (player.b.milestones.includes("0")) {
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].upgrades = upgrades
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "g") {
|
|
if (player.g.milestones.includes("0")) {
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].upgrades = upgrades
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "e") {
|
|
if (player.e.milestones.includes("0")) {
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].upgrades = upgrades
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "r") {
|
|
if (player.r.milestones.includes("0")) {
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].upgrades = upgrades
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "d") {
|
|
if (player.d.milestones.includes("0")) {
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].upgrades = upgrades
|
|
return;
|
|
}
|
|
}
|
|
if(layers[resettingLayer].row > this.row) fullLayerReset(this.layer) // This is actually the default behavior
|
|
},
|
|
layerShown() {return true}, // Condition for when layer appears on the tree
|
|
update(diff) {
|
|
if (player[this.layer].upgrades.includes(11)) player.points = player.points.add(tmp.pointGen.times(diff)).max(0)
|
|
}, // Do any gameloop things (e.g. resource generation) inherent to this layer
|
|
hotkeys: [
|
|
{key: "p", desc: "P: Reset points for prestige points.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your points into "}],
|
|
["blank", "5px"], // Height
|
|
["display-text",
|
|
function() {return 'You have ' + format(player.points) + ' points.'},
|
|
{"font-size": "14px"}],
|
|
"upgrades"],
|
|
})
|
|
|
|
|
|
addLayer("b", {
|
|
startData() { return {
|
|
unl: false,
|
|
auto: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
milestones: []
|
|
}},
|
|
color:() => "#415a9e",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(5000)
|
|
if (player.g.unl && !player.b.unl) req = req.mul(500)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "boosters", // Name of prestige currency
|
|
baseResource: "points", // Name of resource prestige is based on
|
|
baseAmount() {return player.points}, // Get the current amount of baseResource
|
|
type: "custom", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
|
exponent: 1, // Prestige currency exponent
|
|
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {
|
|
return player[this.layer].milestones.includes("1")
|
|
}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
if (player[this.layer].upgrades.includes(21)) mult = mult.div(layers[this.layer].upgrades[21].effect())
|
|
if (!player.s.active) if (player.pr.buyables[11].gt(0)) mult = mult.div(layers.pr.buyables[11].effect().first)
|
|
if (player.s.challs.includes(12)) mult = mult.div(layers.s.challs[12].effect())
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
exp = new Decimal(1)
|
|
if (player.d.unl && player.d.banking == 3) exp = exp.div(2)
|
|
return exp
|
|
},
|
|
row: 1, // Row the layer is in on the tree (0 is the first row)
|
|
effect() {
|
|
let base = new Decimal(2)
|
|
if (player[this.layer].upgrades.includes(12)) base = base.add(layers[this.layer].upgrades[12].effect())
|
|
if (player[this.layer].upgrades.includes(13)) base = base.add(layers[this.layer].upgrades[13].effect())
|
|
if (player.e.unl && tmp.buyables) base = base.add(tmp.e.buyables[11].effect.first)
|
|
if (!player.s.active) if (player.pr.buyables[12].gt(0)) base = base.add(layers.pr.buyables[12].effect().first)
|
|
if (player.g.upgrades.includes(23)) base = base.mul(2)
|
|
if (player.s.active == 11) base = base.pow(0.1)
|
|
if (player.d.unl && player.d.banking == 3) base = new Decimal(2)
|
|
let exp = new Decimal(1)
|
|
if (player.d.banking == 1) exp = exp.div(2)
|
|
let free = new Decimal(0)
|
|
if (!player.s.active) if (player.pr.buyables[14].gt(0)) free = free.add(layers.pr.buyables[14].effect().first)
|
|
return Decimal.pow(base, player[this.layer].points.add(free)).pow(exp)
|
|
},
|
|
effectDescription:() => "multiplying point gain by "+format(layers[this.layer].effect())+"x",
|
|
milestones: {
|
|
0: {
|
|
requirementDesc:() => "4 boosters",
|
|
effectDesc:() => "You don't lose prestige upgrades on booster resets",
|
|
done() {
|
|
return player[this.layer].best.gte(4) || player.e.milestones.includes("0") || player.r.milestones.includes("0") || player.d.milestones.includes("0");
|
|
}
|
|
},
|
|
1: {
|
|
requirementDesc:() => "8 boosters",
|
|
effectDesc:() => "You can max-buy boosters.",
|
|
done() {
|
|
return player[this.layer].best.gte(8);
|
|
}
|
|
}
|
|
},
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
let unlocked = true
|
|
let autoed = player[this.layer].auto
|
|
if(resettingLayer == "r") {
|
|
if (player.r.milestones.includes("2")) {
|
|
let milestones = player[this.layer].milestones
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].upgrades = upgrades
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
if (player.r.milestones.includes("1")) {
|
|
let milestones = player[this.layer].milestones
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "d") {
|
|
if (player.d.milestones.includes("2")) {
|
|
let milestones = player[this.layer].milestones
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].upgrades = upgrades
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
if (player.d.milestones.includes("1")) {
|
|
let milestones = player[this.layer].milestones
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "e") {
|
|
if (player.e.milestones.includes("2")) {
|
|
let milestones = player[this.layer].milestones
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].upgrades = upgrades
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
if (player.e.milestones.includes("1")) {
|
|
let milestones = player[this.layer].milestones
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
}
|
|
if(layers[resettingLayer].row > this.row) {
|
|
fullLayerReset(this.layer) // This is actually the default behavior
|
|
player[this.layer].unl = unlocked
|
|
}
|
|
},
|
|
layerShown() {return player.p.unl}, // Condition for when layer appears on the tree
|
|
resetsNothing() {return player.e.milestones.includes("3") || player.r.milestones.includes("3") || player.d.milestones.includes("3")},
|
|
upgrades: {
|
|
rows: 2,
|
|
cols: 3,
|
|
11: {
|
|
desc:() => "Boosters multiply prestige points.",
|
|
cost:() => new Decimal(3),
|
|
unl() { return player[this.layer].unl }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].points.add(2).log10().add(1).pow(2)
|
|
return ret;
|
|
},
|
|
effectDisplay() { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
12: {
|
|
desc:() => "Generators add to the base of Boosters.",
|
|
cost:() => new Decimal(8),
|
|
unl() { return player[this.layer].upgrades.includes(11) && player.g.unl }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.g.points.add(1).log10().div(3)
|
|
return ret;
|
|
},
|
|
effectDisplay() { return "+"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
13: {
|
|
desc:() => "Prestige Points add to the base of Boosters.",
|
|
cost:() => new Decimal(16),
|
|
unl() { return player[this.layer].upgrades.includes(12) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.p.points.add(1).log10().root(7).div(3)
|
|
return ret;
|
|
},
|
|
effectDisplay() { return "+"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
21: {
|
|
desc:() => "Points divide the Booster cost.",
|
|
cost:() => new Decimal(20),
|
|
unl() { return player[this.layer].upgrades.includes(13) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = (player.points.add(1)).root(15)
|
|
return ret;
|
|
},
|
|
effectDisplay() { return "/"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
22: {
|
|
desc:() => "Square the Generator Power effect.",
|
|
cost:() => new Decimal(21),
|
|
unl() { return player[this.layer].upgrades.includes(21) }, // The upgrade is only visible when this is true
|
|
},
|
|
23: {
|
|
desc:() => "Boosters multiply Generator Power gain.",
|
|
cost:() => new Decimal(24),
|
|
unl() { return player[this.layer].upgrades.includes(22) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.b.points.add(1).log10().add(1).pow(5)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
},
|
|
hotkeys: [
|
|
{key: "b", desc: "B: Reset points for boosters.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
incr_order: [], // Array of layer names to have their order increased when this one is first unlocked
|
|
prestigeButtonText() { //Is secretly HTML
|
|
return `<span v-if="player[layer].points.lt(10)">Convert your points into </span>+<b>${formatWhole(tmp[layer].resetGain)}</b> ${layers[layer].resource}<br><br><span v-if="player[layer].points.lt(10)">${(tmp[layer].baseAmount.gte(tmp[layer].nextAt)&&layers[layer].canBuyMax && layers[layer].canBuyMax())?"Next":"Req"}: ${formatWhole(tmp[layer].baseAmount)} / </span>${(layers[layer].resCeil ? formatWhole(tmp[layer].nextAtDisp) : format(tmp[layer].nextAtDisp))} ${ layers[layer].baseResource }`
|
|
},
|
|
getResetGain() {
|
|
if ((!layers[layer].canBuyMax()) || tmp[layer].baseAmount.lt(tmp[layer].requires)) return new Decimal(1)
|
|
let gain = tmp[layer].baseAmount.div(tmp[layer].requires).div(tmp[layer].gainMult).max(1).log(layers[layer].base).times(tmp[layer].gainExp).pow(Decimal.pow(layers[layer].exponent, -1))
|
|
if (gain.gte(12)) {
|
|
gain = gain.times(12).sqrt()
|
|
}
|
|
if (gain.gte(1225)) gain = gain.times(Decimal.pow(1225, 9)).pow(0.1)
|
|
return gain.floor().sub(player[layer].points).add(1).max(1);
|
|
},
|
|
getNextAt() {
|
|
let amt = player[layer].points
|
|
if (amt.gte(1225)) amt = amt.pow(10).div(Decimal.pow(1225, 9))
|
|
if (amt.gte(12)) {
|
|
amt = amt.pow(2).div(12)
|
|
}
|
|
let extraCost = Decimal.pow(layers[layer].base, amt.pow(layers[layer].exponent).div(tmp[layer].gainExp)).times(tmp[layer].gainMult)
|
|
let cost = extraCost.times(tmp[layer].requires).max(tmp[layer].requires)
|
|
if (layers[layer].resCeil) cost = cost.ceil()
|
|
return cost;
|
|
},
|
|
canReset() {
|
|
return tmp[this.layer].baseAmount.gte(tmp[this.layer].nextAt)
|
|
},
|
|
automate() {
|
|
if (player.e.milestones.includes("4") || player.r.milestones.includes("4") || player.d.milestones.includes("4") && player[this.layer].auto) doReset(this.layer, false)
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your points into "}, {}],
|
|
["blank", "5px"], // Height
|
|
["display-text",
|
|
function() {return 'You have ' + format(player.points) + ' points.'},
|
|
{"font-size": "14px"}],
|
|
"upgrades", "blank", "milestones"],
|
|
branches: [["p", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
})
|
|
|
|
|
|
addLayer("g", {
|
|
startData() { return {
|
|
unl: false,
|
|
auto: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
power: new Decimal(0),
|
|
milestones: []
|
|
}},
|
|
color:() => "#409c6e",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(5000)
|
|
if (player.b.unl && !player.g.unl) req = req.mul(500)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "generators", // Name of prestige currency
|
|
baseResource: "points", // Name of resource prestige is based on
|
|
baseAmount() {return player.points}, // Get the current amount of baseResource
|
|
type: "custom", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
|
exponent: 1, // Prestige currency exponent
|
|
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {
|
|
return player[this.layer].milestones.includes("1")
|
|
}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
if (player[this.layer].upgrades.includes(21)) mult = mult.div(layers[this.layer].upgrades[21].effect())
|
|
if (!player.s.active) if (player.pr.buyables[11].gt(0)) mult = mult.div(layers.pr.buyables[11].effect().first)
|
|
if (player.s.challs.includes(12)) mult = mult.div(layers.s.challs[12].effect())
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
exp = new Decimal(1)
|
|
if (player.d.unl && player.d.banking == 3) exp = exp.div(2)
|
|
return exp
|
|
},
|
|
row: 1, // Row the layer is in on the tree (0 is the first row)
|
|
effect() {
|
|
let base = new Decimal(2)
|
|
if (player[this.layer].upgrades.includes(12)) base = base.add(layers[this.layer].upgrades[12].effect())
|
|
if (player[this.layer].upgrades.includes(13)) base = base.add(layers[this.layer].upgrades[13].effect())
|
|
if (player.r.upgrades.includes(14)) base = base.add(layers.r.upgrades[14].effect())
|
|
if (player.e.unl && tmp.buyables) base = base.add(tmp.e.buyables[11].effect.first)
|
|
if (!player.s.active) if (player.pr.buyables[12].gt(0)) base = base.add(layers.pr.buyables[12].effect().first)
|
|
if (player.s.active == 11) base = base.pow(0.1)
|
|
if (player.d.unl && player.d.banking == 3) base = new Decimal(2)
|
|
|
|
let genMult = new Decimal(1)
|
|
if (player[this.layer].upgrades.includes(14)) genMult = genMult.add(layers[this.layer].upgrades[14].effect())
|
|
if (player[this.layer].upgrades.includes(22)) genMult = genMult.add(layers[this.layer].upgrades[22].effect())
|
|
if (player.b.upgrades.includes(23)) genMult = genMult.add(layers.b.upgrades[23].effect(player.e.buyables[11]))
|
|
if (player.r.unl) genMult = genMult.times(layers.r.effect().powerBoost)
|
|
if (player.d.unl) genMult = genMult.times(layers.d.buyables[13].effect(player.d.buyables[13]).first)
|
|
|
|
let powerPow = new Decimal(1)
|
|
if (player.b.upgrades.includes(21)) powerPow = powerPow.add(1)
|
|
if (player.d.banking == 1) powerPow = powerPow.div(2)
|
|
|
|
let freeGens = new Decimal(0)
|
|
if (player.r.unl && tmp.buyables) freeGens = freeGens.add(tmp.r.buyables[13].effect.first)
|
|
if (!player.s.active) if (player.pr.buyables[14].gt(0)) freeGens = freeGens.add(layers.pr.buyables[14].effect().first)
|
|
return {
|
|
genProd: Decimal.pow(base, player[this.layer].points.add(freeGens)).sub(1).mul(genMult),
|
|
powerBoost: player.g.power.add(1).pow(1/3).pow(powerPow)
|
|
}
|
|
},
|
|
effectDescription() {return "producing "+format(layers[this.layer].effect().genProd)+" generator power each second"},
|
|
milestones: {
|
|
0: {
|
|
requirementDesc:() => "4 generators",
|
|
effectDesc:() => "You don't lose prestige upgrades on generator resets",
|
|
done() {
|
|
return player[this.layer].best.gte(4) || player.e.milestones.includes("0") || player.r.milestones.includes("0") || player.d.milestones.includes("0");
|
|
}
|
|
},
|
|
1: {
|
|
requirementDesc:() => "8 generators",
|
|
effectDesc:() => "You can buy max generators.",
|
|
done() {
|
|
return player[this.layer].best.gte(8);
|
|
}
|
|
},
|
|
2: {
|
|
requirementDesc:() => "14 generators",
|
|
effectDesc:() => "You get 100% of Prestige Points gained on Prestige each second.",
|
|
done() {
|
|
return player[this.layer].best.gte(14);
|
|
}
|
|
}
|
|
},
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
if(layers[resettingLayer].row > this.row-1) player.g.power = new Decimal(0)
|
|
let unlocked = true
|
|
let autoed = player[this.layer].auto
|
|
if(resettingLayer == "d") {
|
|
if (player.d.milestones.includes("2")) {
|
|
let milestones = player[this.layer].milestones
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].upgrades = upgrades
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
if (player.d.milestones.includes("1")) {
|
|
let milestones = player[this.layer].milestones
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "r") {
|
|
if (player.r.milestones.includes("2")) {
|
|
let milestones = player[this.layer].milestones
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].upgrades = upgrades
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
if (player.r.milestones.includes("1")) {
|
|
let milestones = player[this.layer].milestones
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
}
|
|
if(resettingLayer == "e") {
|
|
if (player.e.milestones.includes("2")) {
|
|
let milestones = player[this.layer].milestones
|
|
let upgrades = player[this.layer].upgrades
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].upgrades = upgrades
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
if (player.e.milestones.includes("1")) {
|
|
let milestones = player[this.layer].milestones
|
|
fullLayerReset(this.layer)
|
|
player[this.layer].milestones = milestones
|
|
player[this.layer].unl = unlocked
|
|
player[this.layer].auto = autoed
|
|
return;
|
|
}
|
|
}
|
|
if(layers[resettingLayer].row > this.row) {
|
|
fullLayerReset(this.layer) // This is actually the default behavior
|
|
player[this.layer].unl = unlocked
|
|
}
|
|
},
|
|
convertToDecimal() {
|
|
player.g.power = new Decimal(player.g.power)
|
|
// Convert any layer-specific Decimal values (besides points, total, and best) from String to Decimal (used when loading save)
|
|
},
|
|
layerShown() {return player.p.unl}, // Condition for when layer appears on the tree
|
|
automate() {
|
|
if (player.e.milestones.includes("4") || player.r.milestones.includes("4") || player.d.milestones.includes("4") && player[this.layer].auto) doReset(this.layer, false)
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
updateTemp() {
|
|
}, // Do any necessary temp updating, not that important usually
|
|
update(diff) {
|
|
if (player.g.unl) player.g.power = player.g.power.add(layers[this.layer].effect().genProd.mul(diff))
|
|
if (player[this.layer].milestones.includes("2")) generatePoints("p", diff)
|
|
},
|
|
resetsNothing() {return player.e.milestones.includes("3") || player.r.milestones.includes("3") || player.d.milestones.includes("3")},
|
|
onPrestige(gain) {
|
|
return
|
|
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
|
upgrades: {
|
|
rows: 2,
|
|
cols: 4,
|
|
11: {
|
|
desc:() => "Generators multiply prestige points.",
|
|
cost:() => new Decimal(3),
|
|
unl() { return player[this.layer].unl }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].points.add(2).log10().add(1).pow(2)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
12: {
|
|
desc:() => " Boosters add to the base of Generators.",
|
|
cost:() => new Decimal(8),
|
|
unl() { return player[this.layer].upgrades.includes(11) && player.b.unl }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.b.points.add(1).log10().div(3)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return "+"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
13: {
|
|
desc:() => "Prestige Points add to the base of Generators.",
|
|
cost:() => new Decimal(16),
|
|
unl() { return player[this.layer].upgrades.includes(12) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.p.points.add(1).log10().root(7).div(3)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return "+"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
14: {
|
|
desc:() => "Generator Power boosts itself.",
|
|
cost:() => new Decimal(19),
|
|
unl() { return player[this.layer].upgrades.includes(13) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].power.add(1).log10().add(1).pow(1.15)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
21: {
|
|
desc:() => "Prestige Points divide the Generator cost.",
|
|
cost:() => new Decimal(24),
|
|
unl() { return player[this.layer].upgrades.includes(14) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = (player.p.points.add(1)).root(13)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return "/"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
22: {
|
|
desc:() => "Points multiply Generator Power gain.",
|
|
cost:() => new Decimal(25),
|
|
unl() { return player[this.layer].upgrades.includes(21) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.points.add(1).log10().add(1).pow(2)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
23: {
|
|
desc:() => "Double the Booster base.",
|
|
cost:() => new Decimal(26),
|
|
unl() { return player[this.layer].upgrades.includes(22) }, // The upgrade is only visible when this is true
|
|
},
|
|
24: {
|
|
desc:() => "???",
|
|
cost:() => new Decimal(1/0),
|
|
unl() { return false }, // The upgrade is only visible when this is true
|
|
},
|
|
},
|
|
hotkeys: [
|
|
{key: "g", desc: "G: Reset points for generators.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
incr_order: [], // Array of layer names to have their order increased when this one is first unlocked
|
|
prestigeButtonText() { //Is secretly HTML
|
|
return `<span v-if="player[layer].points.lt(10)">Convert your points into </span>+<b>${formatWhole(tmp[layer].resetGain)}</b> ${layers[layer].resource}<br><br><span v-if="player[layer].points.lt(10)">${(tmp[layer].baseAmount.gte(tmp[layer].nextAt)&&layers[layer].canBuyMax && layers[layer].canBuyMax())?"Next":"Req"}: ${formatWhole(tmp[layer].baseAmount)} / </span>${(layers[layer].resCeil ? formatWhole(tmp[layer].nextAtDisp) : format(tmp[layer].nextAtDisp))} ${ layers[layer].baseResource }`
|
|
},
|
|
getResetGain() {
|
|
if ((!layers[layer].canBuyMax()) || tmp[layer].baseAmount.lt(tmp[layer].requires)) return new Decimal(1)
|
|
let gain = tmp[layer].baseAmount.div(tmp[layer].requires).div(tmp[layer].gainMult).max(1).log(layers[layer].base).times(tmp[layer].gainExp).pow(Decimal.pow(layers[layer].exponent, -1))
|
|
if (gain.gte(12)) {
|
|
gain = gain.times(12).sqrt()
|
|
}
|
|
if (gain.gte(1225)) gain = gain.times(Decimal.pow(1225, 9)).pow(0.1)
|
|
return gain.floor().sub(player[layer].points).add(1).max(1);
|
|
},
|
|
getNextAt() {
|
|
let amt = player[layer].points
|
|
if (amt.gte(1225)) amt = amt.pow(10).div(Decimal.pow(1225, 9))
|
|
if (amt.gte(12)) {
|
|
amt = amt.pow(2).div(12)
|
|
}
|
|
let extraCost = Decimal.pow(layers[layer].base, amt.pow(layers[layer].exponent).div(tmp[layer].gainExp)).times(tmp[layer].gainMult)
|
|
let cost = extraCost.times(tmp[layer].requires).max(tmp[layer].requires)
|
|
if (layers[layer].resCeil) cost = cost.ceil()
|
|
return cost;
|
|
},
|
|
canReset() {
|
|
return tmp[this.layer].baseAmount.gte(tmp[this.layer].nextAt)
|
|
},
|
|
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your points into "}, {}],
|
|
["display-text",
|
|
function() {return 'You have ' + format(player.points) + ' points.'},
|
|
{"font-size": "14px"}],
|
|
["blank", "5px"], // Height
|
|
["display-text",
|
|
function() {return 'You have ' + format(player.g.power) + ' generator power, translating to a '+format(layers.g.effect().powerBoost)+'x multiplier to points.'},
|
|
{"font-size": "14px"}],
|
|
"upgrades", "blank", "milestones"],
|
|
branches: [["p", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
})
|
|
|
|
addLayer("e", {
|
|
startData() { return {
|
|
unl: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
milestones: [],
|
|
order: 0
|
|
}},
|
|
color:() => "#9643a3",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(1e60)
|
|
if (!player[this.layer].upgrades.includes(14)) if (player[this.layer].order > 0) req = req.pow(player[this.layer].order+1)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "enhance points", // 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.04, // Prestige currency exponent
|
|
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
if (player[this.layer].upgrades.includes(12)) mult = mult.mul(layers[this.layer].upgrades[12].effect())
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
return new Decimal(1)
|
|
},
|
|
row: 2, // Row the layer is in on the tree (0 is the first row)
|
|
milestones: {
|
|
0: {
|
|
requirementDesc:() => "1 enhance point",
|
|
effectDesc:() => "You don't lose prestige upgrades on previous resets and this resets",
|
|
done() {
|
|
return player[this.layer].best.gte(1);
|
|
}
|
|
},
|
|
1: {
|
|
requirementDesc:() => "3 enhance points",
|
|
effectDesc:() => "You keep all booster and generator milestones on reset.",
|
|
done() {
|
|
return player[this.layer].best.gte(3);
|
|
}
|
|
},
|
|
2: {
|
|
requirementDesc:() => "10 enhance points",
|
|
effectDesc:() => "You keep booster and generator upgrades on reset.",
|
|
done() {
|
|
return player[this.layer].best.gte(10);
|
|
}
|
|
},
|
|
3: {
|
|
requirementDesc:() => "15 enhance points",
|
|
effectDesc:() => "Boosters and generators do not reset everything.",
|
|
done() {
|
|
return player[this.layer].best.gte(15);
|
|
}
|
|
},
|
|
4: {
|
|
requirementDesc:() => "50 enhance points",
|
|
effectDesc:() => "Automate boosters and generators.",
|
|
done() {
|
|
return player[this.layer].best.gte(50);
|
|
},
|
|
toggles: [
|
|
["b", "auto"],
|
|
["g", "auto"]
|
|
]
|
|
}
|
|
},
|
|
buyables: {
|
|
rows: 1,
|
|
cols: 1,
|
|
11: {
|
|
title:() => "Enhancers", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
if (x.gte(25)) x = x.pow(2).div(25)
|
|
if (player[this.layer].upgrades.includes(13)) x = x.div(layers[this.layer].upgrades[13].effect())
|
|
let cost = Decimal.pow(2, x.pow(1.5))
|
|
return cost.floor()
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
|
|
let eff = {}
|
|
eff.first = Decimal.pow(1.5, x.sqrt())
|
|
|
|
eff.second = x.add(1).pow(3)
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Cost: " + format(data.cost) + " enhance points\n\
|
|
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
|
Adds + " + format(data.effect.first) + " to the booster and generator base and multiply points and prestige points by " + format(data.effect.second)
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return player[this.layer].points.gte(tmp[this.layer].buyables[this.id].cost)},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].points = player[this.layer].points.sub(cost)
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
player[this.layer].spentOnBuyables = player[this.layer].spentOnBuyables.add(cost) // This is a built-in system that you can use for respeccing but it only works with a single Decimal value
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
},
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
},
|
|
layerShown() {return player.b.unl && player.g.unl}, // Condition for when layer appears on the tree
|
|
automate() {
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
updateTemp() {
|
|
}, // Do any necessary temp updating, not that important usually
|
|
resetsNothing() {return false},
|
|
onPrestige(gain) {
|
|
return
|
|
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
|
upgrades: {
|
|
rows: 1,
|
|
cols: 4,
|
|
11: {
|
|
desc:() => "Enhance points boost point and prestige point gain.",
|
|
cost:() => new Decimal(100),
|
|
unl() { return player[this.layer].unl }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].points.add(2).root(1.5)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
12: {
|
|
desc:() => "Generator Power boosts enhance point gain.",
|
|
cost:() => new Decimal(500),
|
|
unl() { return player[this.layer].upgrades.includes(11) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.g.power.add(1).log10().add(1).root(8)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
13: {
|
|
desc:() => "Boosters reduce the enhancer cost formula power.",
|
|
cost:() => new Decimal(1000),
|
|
unl() { return player[this.layer].upgrades.includes(12) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.b.points.add(1).log10().add(1).root(3)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return "/"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
14: {
|
|
desc:() => "This layer behaves like it was bought first..",
|
|
cost:() => new Decimal(1000),
|
|
unl() { return player[this.layer].order > 0 && player[this.layer].upgrades.includes(13) }, // The upgrade is only visible when this is true
|
|
},
|
|
},
|
|
hotkeys: [
|
|
{key: "e", desc: "E: Reset points for enhance points.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
tooltipLocked() { // Optional, tooltip displays when the layer is locked
|
|
return ("(Passive layer) This layer requires " + this.requires() + " points. You only have " + formatWhole(player.points))
|
|
},
|
|
incr_order: ["r", "d"],
|
|
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your points into "}, {}],
|
|
["display-text",
|
|
function() {return 'You have ' + format(player.points) + ' points.'},
|
|
{"font-size": "14px"}],
|
|
["blank", "5px"], // Height
|
|
"buyables", "blank", "blank",
|
|
"upgrades", "blank", "milestones"],
|
|
branches: [["b", 1], ["g", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
})
|
|
|
|
addLayer("r", {
|
|
startData() { return {
|
|
unl: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
milestones: [],
|
|
power: new Decimal(1),
|
|
order: 0
|
|
}},
|
|
color:() => "#94bc42",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(1e20)
|
|
if (!player[this.layer].upgrades.includes(15)) if (player[this.layer].order > 0) req = req.pow(player[this.layer].order+1)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "replicators", // Name of prestige currency
|
|
baseResource: "generator power", // Name of resource prestige is based on
|
|
baseAmount() {return player.g.power}, // Get the current amount of baseResource
|
|
type: "custom", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
|
exponent: 1, // Prestige currency exponent
|
|
base: 25, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {return player[this.layer].milestones.includes("4")}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
return new Decimal(1)
|
|
},
|
|
row: 2, // Row the layer is in on the tree (0 is the first row)
|
|
effect() {
|
|
let base = new Decimal(1)
|
|
if (player.r.unl && tmp.buyables) base = base.mul(tmp.r.buyables[11].effect.first)
|
|
if (player[this.layer].upgrades.includes(12)) base = base.mul(layers[this.layer].upgrades[12].effect())
|
|
if (player[this.layer].upgrades.includes(13)) base = base.mul(layers[this.layer].upgrades[13].effect())
|
|
|
|
let genMult = new Decimal(1)
|
|
if (player.r.unl && tmp.buyables) genMult = genMult.mul(tmp.r.buyables[12].effect.first)
|
|
|
|
return {
|
|
genProd: player[this.layer].points.add(1).log10().add(1).pow(base).sub(1),
|
|
powerBoost: player.r.power.add(1).log2().add(1).pow(genMult)
|
|
}
|
|
},
|
|
effectDescription() {return "making replicanti multiply by "+format(layers[this.layer].effect().genProd.add(1))+" each second"},
|
|
milestones: {
|
|
0: {
|
|
requirementDesc:() => "1 replicator",
|
|
effectDesc:() => "You don't lose prestige upgrades on previous resets and this resets",
|
|
done() {
|
|
return player[this.layer].best.gte(1);
|
|
}
|
|
},
|
|
1: {
|
|
requirementDesc:() => "2 replicators",
|
|
effectDesc:() => "You keep all booster and generator milestones on reset.",
|
|
done() {
|
|
return player[this.layer].best.gte(2);
|
|
}
|
|
},
|
|
2: {
|
|
requirementDesc:() => "4 replicators",
|
|
effectDesc:() => "You keep booster and generator upgrades on reset.",
|
|
done() {
|
|
return player[this.layer].best.gte(4);
|
|
}
|
|
},
|
|
3: {
|
|
requirementDesc:() => "5 replicators",
|
|
effectDesc:() => "Boosters and generators do not reset everything.",
|
|
done() {
|
|
return player[this.layer].best.gte(5);
|
|
}
|
|
},
|
|
4: {
|
|
requirementDesc:() => "8 replicators",
|
|
effectDesc:() => "Automate boosters and generators, and you can buy max replicators.",
|
|
done() {
|
|
return player[this.layer].best.gte(8);
|
|
},
|
|
toggles: [
|
|
["b", "auto"],
|
|
["g", "auto"]
|
|
]
|
|
}
|
|
},
|
|
buyables: {
|
|
rows: 1,
|
|
cols: 3,
|
|
11: {
|
|
title:() => "Replication Up", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
if (x.gte(25)) x = x.pow(2).div(25)
|
|
if (player[this.layer].buyables[this.id].gte(150)) x = x.pow(1.5).div(12.2474487139)
|
|
let cost = Decimal.pow(500, x.add(1).pow(1.5))
|
|
return cost.floor()
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = Decimal.pow(1.4, x.sqrt())
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Cost: " + format(data.cost) + " replicanti\n\
|
|
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
|
Multiplies replicator power by " + format(data.effect.first) + "x"
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return player[this.layer].power.gte(tmp[this.layer].buyables[this.id].cost)},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].power = player[this.layer].power.sub(cost)
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
player[this.layer].spentOnBuyables = player[this.layer].spentOnBuyables.add(cost) // This is a built-in system that you can use for respeccing but it only works with a single Decimal value
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
12: {
|
|
title:() => "Effect Up", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
if (x.gte(25)) x = x.pow(2).div(25)
|
|
if (player[this.layer].buyables[this.id].gte(150)) x = x.pow(1.5).div(12.2474487139)
|
|
let cost = Decimal.pow(1000, x.add(1).pow(1.5))
|
|
return cost.floor()
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x.add(1).log10().add(1).pow(0.25)
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Cost: " + format(data.cost) + " replicanti\n\
|
|
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
|
Multiplies replicanti power by " + format(data.effect.first) + "x"
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return player[this.layer].power.gte(tmp[this.layer].buyables[this.id].cost)},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].power = player[this.layer].power.sub(cost)
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
player[this.layer].spentOnBuyables = player[this.layer].spentOnBuyables.add(cost) // This is a built-in system that you can use for respeccing but it only works with a single Decimal value
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
13: {
|
|
title:() => "Generator", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
if (x.gte(5)) x = x.pow(3).div(25)
|
|
if (player[this.layer].buyables[this.id].gte(25)) x = x.pow(4).div(244140625)
|
|
if (player[this.layer].buyables[this.id].gte(50)) x = x.pow(5).div(3.90625e13)
|
|
let cost = Decimal.pow("1.80e308", x.add(1).pow(0.125))
|
|
return cost.floor()
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Cost: " + format(data.cost) + " replicanti\n\
|
|
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
|
Get " + format(data.effect.first) + " free generators, and increase the replicanti limit by "+format(tmp[this.layer].buyables[this.id].cost.div("1.80e308"))+"x"
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return player[this.layer].power.gte(tmp[this.layer].buyables[this.id].cost)},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].power = player[this.layer].power.sub(cost)
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
player[this.layer].spentOnBuyables = player[this.layer].spentOnBuyables.add(cost) // This is a built-in system that you can use for respeccing but it only works with a single Decimal value
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
},
|
|
upgrades: {
|
|
rows: 1,
|
|
cols: 5,
|
|
11: {
|
|
desc:() => "Replicanti boosts point gain.",
|
|
cost:() => new Decimal(3),
|
|
unl() { return player[this.layer].unl }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].power.add(1).log2().add(1).log2().add(1).pow(3)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
12: {
|
|
desc:() => "Generator Power boosts replicanti gain.",
|
|
cost:() => new Decimal(7),
|
|
unl() { return player[this.layer].upgrades.includes(11) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player.g.power.add(1).log2().add(1).log2().add(1).log2().add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
13: {
|
|
desc:() => "Replicanti boosts itself.",
|
|
cost:() => new Decimal(14),
|
|
unl() { return player[this.layer].upgrades.includes(12) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].power.add(1).log2().add(1).log2().add(1).log2().add(1).log2().add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return format(tmp[this.layer].upgrades[this.id].effect)+"x" }, // Add formatting to the effect
|
|
},
|
|
14: {
|
|
desc:() => "Replicators boost the generator base.",
|
|
cost:() => new Decimal(17),
|
|
unl() { return player[this.layer].upgrades.includes(13) }, // The upgrade is only visible when this is true
|
|
effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
|
let ret = player[this.layer].points.add(1).log2().add(1).log2().add(1).cbrt()
|
|
return ret;
|
|
},
|
|
effectDisplay(fx) { return "+"+format(tmp[this.layer].upgrades[this.id].effect) }, // Add formatting to the effect
|
|
},
|
|
15: {
|
|
desc:() => "This layer behaves like it was bought first.",
|
|
cost:() => new Decimal(20),
|
|
unl() { return player[this.layer].order > 0 && player[this.layer].upgrades.includes(14) }, // The upgrade is only visible when this is true
|
|
},
|
|
},
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
if(layers[resettingLayer].row > this.row-1) player.r.power = new Decimal(1)
|
|
},
|
|
convertToDecimal() {
|
|
player.r.power = new Decimal(player.r.power).max(1)
|
|
},
|
|
layerShown() {return player.g.unl}, // Condition for when layer appears on the tree
|
|
automate() {
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
updateTemp() {
|
|
}, // Do any necessary temp updating, not that important usually
|
|
resetsNothing() {return false},
|
|
onPrestige(gain) {
|
|
return
|
|
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
|
update(diff) {
|
|
player.r.power = player.r.power.mul(layers[this.layer].effect().genProd.mul(diff).add(1)).max(1).min(tmp["r"].buyables[13].cost)
|
|
},
|
|
hotkeys: [
|
|
{key: "r", desc: "R: Reset generator power for replicators.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
prestigeButtonText() { //Is secretly HTML
|
|
return `<span v-if="player[layer].points.lt(10)">Convert your generator power into </span>+<b>${formatWhole(tmp[layer].resetGain)}</b> ${layers[layer].resource}<br><br><span v-if="player[layer].points.lt(10)">${(tmp[layer].baseAmount.gte(tmp[layer].nextAt)&&layers[layer].canBuyMax && layers[layer].canBuyMax())?"Next":"Req"}: ${formatWhole(tmp[layer].baseAmount)} / </span>${(layers[layer].resCeil ? formatWhole(tmp[layer].nextAtDisp) : format(tmp[layer].nextAtDisp))} ${ layers[layer].baseResource }`
|
|
},
|
|
getResetGain() {
|
|
if ((!layers[layer].canBuyMax()) || tmp[layer].baseAmount.lt(tmp[layer].requires)) return new Decimal(1)
|
|
let gain = tmp[layer].baseAmount.div(tmp[layer].requires).div(tmp[layer].gainMult).max(1).log(layers[layer].base).times(tmp[layer].gainExp).pow(Decimal.pow(layers[layer].exponent, -1))
|
|
if (gain.gte(12)) {
|
|
gain = gain.times(12).sqrt()
|
|
}
|
|
if (gain.gte(1225)) gain = gain.times(Decimal.pow(1225, 9)).pow(0.1)
|
|
return gain.floor().sub(player[layer].points).add(1).max(1);
|
|
},
|
|
getNextAt() {
|
|
let amt = player[layer].points
|
|
if (amt.gte(1225)) amt = amt.pow(10).div(Decimal.pow(1225, 9))
|
|
if (amt.gte(12)) {
|
|
amt = amt.pow(2).div(12)
|
|
}
|
|
let extraCost = Decimal.pow(layers[layer].base, amt.pow(layers[layer].exponent).div(tmp[layer].gainExp)).times(tmp[layer].gainMult)
|
|
let cost = extraCost.times(tmp[layer].requires).max(tmp[layer].requires)
|
|
if (layers[layer].resCeil) cost = cost.ceil()
|
|
return cost;
|
|
},
|
|
canReset() {
|
|
return tmp[this.layer].baseAmount.gte(tmp[this.layer].nextAt)
|
|
},
|
|
tooltipLocked() { // Optional, tooltip displays when the layer is locked
|
|
return ("(Active layer) This layer requires " + this.requires() + " generator power. You only have " + formatWhole(player.g.power))
|
|
},
|
|
incr_order: ["e", "d"],
|
|
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your generator power into "}, {}],
|
|
["display-text",
|
|
function() {return 'You have ' + format(player.r.power) + ' replicanti (Limit at '+format(tmp["r"].buyables[13].cost)+'), multiplying generator power gain by '+format(tmp.r.effect.powerBoost)+'.'},
|
|
{"font-size": "14px"}],
|
|
"upgrades", "buyables", ["blank", "25px"], "milestones"],
|
|
branches: [["g", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
})
|
|
|
|
addLayer("d", {
|
|
startData() { return {
|
|
unl: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
milestones: [],
|
|
power: new Decimal(1),
|
|
order: 0,
|
|
banking: 0
|
|
}},
|
|
color:() => "#328ba8",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(1e32)
|
|
if (!player[this.layer].upgrades.includes(11)) if (player[this.layer].order > 0) req = req.pow(player[this.layer].order+1)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "tachyon particles", // Name of prestige currency
|
|
baseResource: "prestige points", // Name of resource prestige is based on
|
|
baseAmount() {return player.p.points}, // Get the current amount of baseResource
|
|
type: "custom", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
|
exponent: 0.750, // Prestige currency exponent
|
|
base: 500, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {return true}, // Only needed for static layers with buy max
|
|
effect() {
|
|
let base = new Decimal(1.1)
|
|
return Decimal.pow(base, player[this.layer].points.pow(0.9))
|
|
},
|
|
effectDescription:() => "multiplying dilated currency gain by "+format(layers[this.layer].effect())+"x",
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
return new Decimal(1)
|
|
},
|
|
row: 2, // Row the layer is in on the tree (0 is the first row)
|
|
milestones: {
|
|
0: {
|
|
requirementDesc:() => "1 tachyon particle",
|
|
effectDesc:() => "You don't lose prestige upgrades on previous resets and this resets",
|
|
done() {
|
|
return player[this.layer].best.gte(1);
|
|
}
|
|
},
|
|
1: {
|
|
requirementDesc:() => "2 tachyon particles",
|
|
effectDesc:() => "You keep all booster and generator milestones on reset.",
|
|
done() {
|
|
return player[this.layer].best.gte(2);
|
|
}
|
|
},
|
|
2: {
|
|
requirementDesc:() => "4 tachyon particles",
|
|
effectDesc:() => "You keep booster and generator upgrades on reset.",
|
|
done() {
|
|
return player[this.layer].best.gte(4);
|
|
}
|
|
},
|
|
3: {
|
|
requirementDesc:() => "5 tachyon particles",
|
|
effectDesc:() => "Boosters and generators do not reset everything.",
|
|
done() {
|
|
return player[this.layer].best.gte(5);
|
|
}
|
|
},
|
|
4: {
|
|
requirementDesc:() => "8 tachyon particles",
|
|
effectDesc:() => "Automate boosters and generators.",
|
|
done() {
|
|
return player[this.layer].best.gte(8);
|
|
},
|
|
toggles: [
|
|
["b", "auto"],
|
|
["g", "auto"]
|
|
]
|
|
}
|
|
},
|
|
dilationMult() {
|
|
let mult = layers[this.layer].effect()
|
|
if (player.d.unl) mult = mult.times(layers.d.buyables[21].effect(player.d.buyables[21]).first)
|
|
return mult
|
|
},
|
|
buyables: {
|
|
rows: 2,
|
|
cols: 3,
|
|
11: {
|
|
title:() => "Dilated Prestige Points", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
return new Decimal(0)
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x.add(1).root(2)
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return data.canAfford
|
|
? "You have " + format(player[this.layer].buyables[this.id], 0) + " dilated prestige points, which are boosting prestige point multiplier by " + format(data.effect.first) + "x.\n\n\
|
|
Dilation is currently " + (player[this.layer].banking == 1 ? "enabled.\n\
|
|
Click here to disable dilation and gain " + format(player.p.points.mul(layers[this.layer].dilationMult()).sub(player.d.buyables[11]).max(0), 0) + " dilated prestige points." : "disabled.\n\
|
|
Click here to enable dilation, which will force a dilation reset and square root all of your point generation speed, prestige point gain, generator effects, booster effects, and disable the second Prestige Upgrade.")
|
|
: "You need to obtain at least 2 tachyon particles before you can use this function."
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return true},
|
|
buy() {
|
|
if (player.d.banking == 1) player.d.buyables[11] = player.d.buyables[11].max(player.p.points.mul(layers[this.layer].dilationMult()))
|
|
player.d.banking = player.d.banking == 1 ? 0 : 1
|
|
doReset(this.layer, true)
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
12: {
|
|
title:() => "Dilated Points", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
return new Decimal(0)
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x.add(1)
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return data.canAfford
|
|
? "You have " + format(player[this.layer].buyables[this.id], 0) + " dilated points, which are boosting point multiplier by " + format(data.effect.first) + "x.\n\n\
|
|
Dilation is currently " + (player[this.layer].banking == 2 ? "enabled.\n\
|
|
Click here to disable dilation and gain " + format(player.points.mul(layers[this.layer].dilationMult()).sub(player.d.buyables[12]).max(0), 0) + " dilated prestige points." : "disabled.\n\
|
|
Click here to enable dilation, which will force a dilation reset and apply logarithm to your point generation.")
|
|
: "You need to obtain at least 3 tachyon particles before you can use this function."
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return player[this.layer].points.gte(3)},
|
|
buy() {
|
|
if (player.d.banking == 2) player.d.buyables[12] = player.d.buyables[12].max(player.points.mul(layers[this.layer].dilationMult()))
|
|
player.d.banking = player.d.banking == 2 ? 0 : 2
|
|
doReset(this.layer, true)
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
13: {
|
|
title:() => "Dilated Generator Power", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
return new Decimal(0)
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x.add(1).root(5)
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return data.canAfford
|
|
? "You have " + format(player[this.layer].buyables[this.id], 0) + " dilated generator power, which are boosting generator power gain by " + format(data.effect.first) + "x.\n\n\
|
|
Dilation is currently " + (player[this.layer].banking == 3 ? "enabled.\n\
|
|
Click here to disable dilation and gain " + format(player.g.power.mul(layers[this.layer].dilationMult()).sub(player.d.buyables[13]).max(0), 0) + " dilated generator power." : "disabled.\n\
|
|
Click here to enable dilation, which will force a dilation reset, lock the generator and booster bases at 2, and double booster and generator cost multiplier.")
|
|
: "You need to obtain at least 7 tachyon particles before you can use this function."
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return player[this.layer].points.gte(7)},
|
|
buy() {
|
|
if (player.d.banking == 3) player.d.buyables[13] = player.d.buyables[13].max(player.g.power.mul(layers[this.layer].dilationMult()))
|
|
player.d.banking = player.d.banking == 3 ? 0 : 3
|
|
doReset(this.layer, true)
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
21: {
|
|
title:() => "Dilation Boost", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
let cost = Decimal.pow("5000", x.add(1))
|
|
return {
|
|
1: cost.floor(),
|
|
2: cost.sqrt().div(50).floor(),
|
|
3: cost.pow(2).floor()
|
|
}
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = Decimal.pow(4, x)
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Cost: " + format(data.cost[1]) + " dilated prestige points, " + format(data.cost[2]) + " dilated points, " + format(data.cost[3]) + " dilated generator power\n\
|
|
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
|
Multiply all dilation currency gain by " + format(data.effect.first) + "x"
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return (player[this.layer].buyables[11].gte(tmp[this.layer].buyables[this.id].cost[1]) && player[this.layer].buyables[12].gte(tmp[this.layer].buyables[this.id].cost[2]) && player[this.layer].buyables[13].gte(tmp[this.layer].buyables[this.id].cost[3]))
|
|
},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].buyables[11] = player[this.layer].buyables[11].sub(cost[1])
|
|
player[this.layer].buyables[12] = player[this.layer].buyables[12].sub(cost[2])
|
|
player[this.layer].buyables[13] = player[this.layer].buyables[13].sub(cost[3])
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
22: {
|
|
title:() => "shh", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
|
|
let cost = Decimal.pow("5000", x.add(1))
|
|
return cost.floor()
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Why are you here"
|
|
},
|
|
unl() { return false },
|
|
canAfford() {
|
|
return player[this.layer].buyables[11].gte(tmp[this.layer].buyables[this.id].cost)},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].buyables[11] = player[this.layer].buyables[11].sub(cost)
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
23: {
|
|
title:() => "shh", // Optional, displayed at the top in a larger font
|
|
cost() { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let x = player[this.layer].buyables[this.id]
|
|
|
|
let cost = Decimal.pow("5000", x.add(1))
|
|
return cost.floor()
|
|
},
|
|
effect() { // Effects of owning x of the items, x is a decimal
|
|
let x = player[this.layer].buyables[this.id]
|
|
let eff = {}
|
|
eff.first = x
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
return "Why are you here"
|
|
},
|
|
unl() { return false },
|
|
canAfford() {
|
|
return player[this.layer].buyables[11].gte(tmp[this.layer].buyables[this.id].cost)},
|
|
buy() {
|
|
cost = tmp[this.layer].buyables[this.id].cost
|
|
player[this.layer].buyables[11] = player[this.layer].buyables[11].sub(cost)
|
|
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
|
},
|
|
buyMax() {}, // You'll have to handle this yourself if you want
|
|
},
|
|
},
|
|
upgrades: {
|
|
rows: 1,
|
|
cols: 1,
|
|
11: {
|
|
desc:() => "This layer no longer uses order.",
|
|
cost:() => new Decimal(15),
|
|
unl() { return player[this.layer].order > 0 }, // The upgrade is only visible when this is true
|
|
},
|
|
},
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
if(layers[resettingLayer].row > this.row-1) player.r.power = new Decimal(1)
|
|
},
|
|
layerShown() {return player.b.unl}, // Condition for when layer appears on the tree
|
|
automate() {
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
updateTemp() {
|
|
}, // Do any necessary temp updating, not that important usually
|
|
resetsNothing() {return false},
|
|
onPrestige(gain) {
|
|
return
|
|
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
|
update(diff) {
|
|
},
|
|
hotkeys: [
|
|
{key: "d", desc: "D: Reset prestige points for tachyon particles.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
prestigeButtonText() { //Is secretly HTML
|
|
return `<span v-if="player[layer].points.lt(10)">Convert your prestige points into </span>+<b>${formatWhole(tmp[layer].resetGain)}</b> ${layers[layer].resource}<br><br><span v-if="player[layer].points.lt(10)">${(tmp[layer].baseAmount.gte(tmp[layer].nextAt)&&layers[layer].canBuyMax && layers[layer].canBuyMax())?"Next":"Req"}: ${formatWhole(tmp[layer].baseAmount)} / </span>${(layers[layer].resCeil ? formatWhole(tmp[layer].nextAtDisp) : format(tmp[layer].nextAtDisp))} ${ layers[layer].baseResource }`
|
|
},
|
|
getResetGain() {
|
|
if ((!layers[layer].canBuyMax()) || tmp[layer].baseAmount.lt(tmp[layer].requires)) return new Decimal(1)
|
|
let gain = tmp[layer].baseAmount.div(tmp[layer].requires).div(tmp[layer].gainMult).max(1).log(layers[layer].base).times(tmp[layer].gainExp).pow(Decimal.pow(layers[layer].exponent, -1))
|
|
if (gain.gte(12)) {
|
|
gain = gain.times(12).sqrt()
|
|
}
|
|
if (gain.gte(1225)) gain = gain.times(Decimal.pow(1225, 9)).pow(0.1)
|
|
return gain.floor().sub(player[layer].points).add(1).max(1);
|
|
},
|
|
getNextAt() {
|
|
let amt = player[layer].points
|
|
if (amt.gte(1225)) amt = amt.pow(10).div(Decimal.pow(1225, 9))
|
|
if (amt.gte(12)) {
|
|
amt = amt.pow(2).div(12)
|
|
}
|
|
let extraCost = Decimal.pow(layers[layer].base, amt.pow(layers[layer].exponent).div(tmp[layer].gainExp)).times(tmp[layer].gainMult)
|
|
let cost = extraCost.times(tmp[layer].requires).max(tmp[layer].requires)
|
|
if (layers[layer].resCeil) cost = cost.ceil()
|
|
return cost;
|
|
},
|
|
canReset() {
|
|
return tmp[this.layer].baseAmount.gte(tmp[this.layer].nextAt)
|
|
},
|
|
tooltipLocked() { // Optional, tooltip displays when the layer is locked
|
|
return ("(Idle layer) This layer requires " + this.requires() + " prestige points. You only have " + formatWhole(player.p.points))
|
|
},
|
|
incr_order: ["r", "e"],
|
|
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your prestige points into "}, {}],
|
|
"upgrades", "buyables", ["blank", "25px"], "milestones"],
|
|
branches: [["b", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
})
|
|
|
|
addLayer("pr", {
|
|
startData() { return {
|
|
unl: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
milestones: [],
|
|
power: new Decimal(1),
|
|
order: 0
|
|
}},
|
|
color:() => "#e8d684",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(68)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "ascension power", // Name of prestige currency
|
|
baseResource: "boosters", // Name of resource prestige is based on
|
|
baseAmount() {return player.b.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: 0.850, // Prestige currency exponent
|
|
base: 1.03, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: true, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {return true}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
return new Decimal(1)
|
|
},
|
|
row: 2, // Row the layer is in on the tree (0 is the first row)
|
|
effect() {
|
|
let base = new Decimal(1.03)
|
|
return Decimal.pow(base, player[this.layer].points.sub(8).max(0).sqrt())
|
|
},
|
|
effectDescription:() => "increasing the perk power by "+format(layers[this.layer].effect().sub(1).mul(100))+"%",
|
|
maxActivePerks() {
|
|
let number = 1;
|
|
if (player.s.challs.includes(11)) number += 1
|
|
return number
|
|
},
|
|
activePerks() {
|
|
let number = 0;
|
|
for (var i in player[this.layer].buyables) {
|
|
if (player[this.layer].buyables[i].gt(0)) number += 1
|
|
}
|
|
return number
|
|
},
|
|
perkPower() {
|
|
let power = layers[this.layer].effect()
|
|
return power
|
|
},
|
|
buyables: {
|
|
rows: 1,
|
|
cols: 4,
|
|
11: {
|
|
title:() => "Cost Perk", // Optional, displayed at the top in a larger font
|
|
cost(x) { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let multiplier = new Decimal(30)
|
|
return multiplier
|
|
},
|
|
effect(x) { // Effects of owning x of the items, x is a decimal
|
|
let eff = {}
|
|
eff.first = new Decimal(1e7)
|
|
eff.first = eff.first.pow(layers[this.layer].perkPower())
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
let activeThing = (player[this.layer].buyables[this.id].gt(1) ? "Active for "+format(player[this.layer].buyables[this.id], 0)+" seconds" : "Not Active")
|
|
+ "\n\
|
|
Divide booster and generator costs by /" + format(data.effect.first)
|
|
return activeThing
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return (layers[this.layer].activePerks() < layers[this.layer].maxActivePerks()) },
|
|
buy() {
|
|
if (player[this.layer].buyables[this.id].gt(0)) return;
|
|
player[this.layer].buyables[this.id] = layers[this.layer].buyables[this.id].cost()
|
|
},
|
|
},
|
|
12: {
|
|
title:() => "Base Perk", // Optional, displayed at the top in a larger font
|
|
cost(x) { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let multiplier = new Decimal(30)
|
|
return multiplier
|
|
},
|
|
effect(x) { // Effects of owning x of the items, x is a decimal
|
|
let eff = {}
|
|
eff.first = new Decimal(2)
|
|
eff.first = eff.first.pow(layers[this.layer].perkPower())
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
let activeThing = (player[this.layer].buyables[this.id].gt(1) ? "Active for "+format(player[this.layer].buyables[this.id], 0)+" seconds" : "Not Active")
|
|
+ "\n\
|
|
Add +" + format(data.effect.first) + " to the generator and booster bases"
|
|
return activeThing
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return (layers[this.layer].activePerks() < layers[this.layer].maxActivePerks()) },
|
|
buy() {
|
|
if (player[this.layer].buyables[this.id].gt(0)) return;
|
|
player[this.layer].buyables[this.id] = layers[this.layer].buyables[this.id].cost()
|
|
},
|
|
},
|
|
13: {
|
|
title:() => "Multiplier Perk", // Optional, displayed at the top in a larger font
|
|
cost(x) { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let multiplier = new Decimal(30)
|
|
return multiplier
|
|
},
|
|
effect(x) { // Effects of owning x of the items, x is a decimal
|
|
let eff = {}
|
|
eff.first = new Decimal(1e15)
|
|
eff.first = eff.first.pow(layers[this.layer].perkPower())
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
let activeThing = (player[this.layer].buyables[this.id].gt(1) ? "Active for "+format(player[this.layer].buyables[this.id], 0)+" seconds" : "Not Active")
|
|
+ "\n\
|
|
Multiply prestige point and prestige point gain by x" + format(data.effect.first, 1)
|
|
return activeThing
|
|
},
|
|
unl() { return player[this.layer].unl },
|
|
canAfford() {
|
|
return (layers[this.layer].activePerks() < layers[this.layer].maxActivePerks()) },
|
|
buy() {
|
|
if (player[this.layer].buyables[this.id].gt(0)) return;
|
|
player[this.layer].buyables[this.id] = layers[this.layer].buyables[this.id].cost()
|
|
},
|
|
},
|
|
14: {
|
|
title:() => "Bonus Perk", // Optional, displayed at the top in a larger font
|
|
cost(x) { // cost for buying xth buyable, can be an object if there are multiple currencies
|
|
let multiplier = new Decimal(30)
|
|
return multiplier
|
|
},
|
|
effect(x) { // Effects of owning x of the items, x is a decimal
|
|
let eff = {}
|
|
eff.first = new Decimal(5)
|
|
eff.first = eff.first.pow(layers[this.layer].perkPower())
|
|
return eff;
|
|
},
|
|
display() { // Everything else displayed in the buyable button after the title
|
|
let data = tmp[this.layer].buyables[this.id]
|
|
let activeThing = (player[this.layer].buyables[this.id].gt(1) ? "Active for "+format(player[this.layer].buyables[this.id], 0)+" seconds" : "Not Active")
|
|
+ "\n\
|
|
Add +" + format(data.effect.first, 1) + " free boosters and generators"
|
|
return activeThing
|
|
},
|
|
unl() { return player.s.challs.includes(12) },
|
|
canAfford() {
|
|
return (layers[this.layer].activePerks() < layers[this.layer].maxActivePerks()) },
|
|
buy() {
|
|
if (player[this.layer].buyables[this.id].gt(0)) return;
|
|
player[this.layer].buyables[this.id] = layers[this.layer].buyables[this.id].cost()
|
|
},
|
|
},
|
|
},
|
|
layerShown() {return player.d.unl && player.e.unl && player.r.unl}, // Condition for when layer appears on the tree
|
|
automate() {
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
updateTemp() {
|
|
}, // Do any necessary temp updating, not that important usually
|
|
resetsNothing() {return true},
|
|
onPrestige(gain) {
|
|
return
|
|
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
|
update(diff) {
|
|
for (var i in player[this.layer].buyables) {
|
|
player[this.layer].buyables[i] = player[this.layer].buyables[i].sub(diff).max(0)
|
|
}
|
|
},
|
|
hotkeys: [
|
|
{key: "P", desc: "Shift+P: Reset boosters for ascension power.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
incr_order: ["s"],
|
|
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your points into "}, {}],
|
|
["display-text",
|
|
function() {return '(Perk Power: '+format((layers.pr.perkPower()?layers.pr.perkPower():new Decimal(1)).mul(100))+'%)'},
|
|
{"font-size": "16px", "color": "orange"}],
|
|
"buyables", ["blank", "25px"], "milestones"],
|
|
branches: [["b", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
})
|
|
|
|
addLayer("s", {
|
|
startData() { return {
|
|
unl: false,
|
|
points: new Decimal(0),
|
|
best: new Decimal(0),
|
|
total: new Decimal(0),
|
|
milestones: [],
|
|
order: 0
|
|
}},
|
|
color:() => "#fab4d9",
|
|
background:() => 'https://cdn.glitch.com/7460ed4d-c31b-459d-8407-710f48e787a3%2Fefdb5b70-5e55-4f23-9524-953a8eea4545.image.png?v=1601771864943',
|
|
requires() {
|
|
let req = new Decimal(67)
|
|
return req
|
|
}, // Can be a function that takes requirement increases into account
|
|
resource: "stadium power", // Name of prestige currency
|
|
baseResource: "generators", // Name of resource prestige is based on
|
|
baseAmount() {return player.g.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: 0.850, // Prestige currency exponent
|
|
base: 1.03, // Only needed for static layers, base of the formula (b^(x^exp))
|
|
resCeil: true, // True if the cost needs to be rounded up (use when baseResource is static?)
|
|
canBuyMax() {return true}, // Only needed for static layers with buy max
|
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
|
mult = new Decimal(1)
|
|
return mult
|
|
},
|
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
|
return new Decimal(1)
|
|
},
|
|
effect() {
|
|
let base = new Decimal(1.02)
|
|
return Decimal.pow(base, player[this.layer].points.sub(8).max(0).add(1.25).log10())
|
|
},
|
|
effectDescription:() => "increasing the second prestige upgrade power by "+format(layers[this.layer].effect().sub(1).mul(100))+"%",
|
|
row: 2, // Row the layer is in on the tree (0 is the first row)
|
|
doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
|
if(layers[resettingLayer].row > this.row-1) player.r.power = new Decimal(1)
|
|
},
|
|
layerShown() {return player.d.unl && player.e.unl && player.r.unl}, // Condition for when layer appears on the tree
|
|
automate() {
|
|
}, // Do any automation inherent to this layer if appropriate
|
|
updateTemp() {
|
|
}, // Do any necessary temp updating, not that important usually
|
|
challengeUnlocks: ["1.80e308", "1e340", "1e370", "1e800"],
|
|
getChallengeUnlock() {
|
|
let number = 0
|
|
for (var i in layers[this.layer].challs) {
|
|
if (layers[this.layer].challs[i].unl) if (layers[this.layer].challs[i].unl()) number += 1
|
|
}
|
|
return number
|
|
},
|
|
challs: {
|
|
rows: 2,
|
|
cols: 2,
|
|
11: {
|
|
name:() => "Spaceon",
|
|
desc:() => "Prestige point gain is raised to the 10th root.",
|
|
unl() { return player.points.gt(layers[this.layer].challengeUnlocks[0]) || player[this.layer].challs.includes(11) || player[this.layer].active == 11 },
|
|
goal:() => new Decimal("10000"),
|
|
currencyDisplayName: "prestige points", // Use if using a nonstandard currency
|
|
currencyInternalName: "points", // Use if using a nonstandard currency
|
|
currencyLayer: "p", // Leave empty if not in a layer
|
|
reward:() => "You can have two perks active at once.",
|
|
},
|
|
12: {
|
|
name:() => "Infinity",
|
|
desc:() => "Booster and generators are 90% weaker.",
|
|
unl() { return player.points.gt(layers[this.layer].challengeUnlocks[1]) || player[this.layer].challs.includes(12) || player[this.layer].active == 12 },
|
|
goal:() => new Decimal("1e137"),
|
|
currencyDisplayName: "prestige points", // Use if using a nonstandard currency
|
|
currencyInternalName: "points", // Use if using a nonstandard currency
|
|
currencyLayer: "p", // Leave empty if not in a layer
|
|
reward:() => "Unlock a new perk, and generator and booster cost is divided by stadium and ascension power.",
|
|
effect() {
|
|
let ret = player[this.layer].points.add(player.pr.points).mul(100).pow(3).add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay(x) { return "/"+format(x) },
|
|
},
|
|
21: {
|
|
name:() => "Eternity",
|
|
desc:() => "Time speed is reduced based on your points. (Hold P for more prestige gain)",
|
|
unl() { return player.points.gt(layers[this.layer].challengeUnlocks[2]) || player[this.layer].challs.includes(21) || player[this.layer].active == 21 },
|
|
goal:() => new Decimal("1e147"),
|
|
currencyDisplayName: "prestige points", // Use if using a nonstandard currency
|
|
currencyInternalName: "points", // Use if using a nonstandard currency
|
|
currencyLayer: "p", // Leave empty if not in a layer
|
|
reward:() => "Generators and boosters multiply prestige point gain.",
|
|
effect() {
|
|
let ret = player.g.points.add(player.b.points).mul(1e5).pow(2).add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay(x) { return format(x)+"x" },
|
|
},
|
|
22: {
|
|
name:() => "???",
|
|
desc:() => "Time speed is reduced based on your points.",
|
|
unl() { return player.points.gt(layers[this.layer].challengeUnlocks[3]) || player[this.layer].challs.includes(22) || player[this.layer].active == 22 },
|
|
goal:() => new Decimal("1e50"),
|
|
currencyDisplayName: "prestige points", // Use if using a nonstandard currency
|
|
currencyInternalName: "points", // Use if using a nonstandard currency
|
|
currencyLayer: "p", // Leave empty if not in a layer
|
|
reward:() => "Generators and boosters multiply prestige point gain.",
|
|
effect() {
|
|
let ret = player.g.points.add(player.b.points).mul(1e5).pow(2).add(1)
|
|
return ret;
|
|
},
|
|
effectDisplay(x) { return format(x)+"x" },
|
|
},
|
|
},
|
|
resetsNothing() {return true},
|
|
onPrestige(gain) {
|
|
return
|
|
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
|
update(diff) {
|
|
},
|
|
onReset() {
|
|
if (player[this.layer].active) doReset("d", true)
|
|
},
|
|
hotkeys: [
|
|
{key: "s", desc: "S: Reset generators for stadium power.", onPress(){if (player[this.layer].unl) doReset(this.layer)}},
|
|
],
|
|
|
|
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
|
tabFormat: ["main-display",
|
|
["prestige-button", function() {return "Convert your points into "}, {}],
|
|
["display-text",
|
|
function() {return 'Next stadium challenge at '+format(layers["s"].challengeUnlocks[layers["s"].getChallengeUnlock()])+" points."},
|
|
{"font-size": "14px"}], "blank", "blank",
|
|
["display-text",
|
|
function() {return '(Note: Perks do not work in stadium challenges)'},
|
|
{"font-size": "10px"}],
|
|
"challs"],
|
|
branches: [["g", 1]]
|
|
/*style() {return {
|
|
'background-color': '#3325CC'
|
|
}},*/
|
|
}) |