generated from incremental-social/The-Modding-Tree
Integrals!
Big number hardcap and achievements
This commit is contained in:
parent
707d9f3e73
commit
dc4539ec52
14 changed files with 341 additions and 36 deletions
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
9
.idea/just_another_tree.iml
generated
Normal file
9
.idea/just_another_tree.iml
generated
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
6
.idea/misc.xml
generated
Normal file
6
.idea/misc.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/just_another_tree.iml" filepath="$PROJECT_DIR$/.idea/just_another_tree.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
178
js/data/achievements.js
Normal file
178
js/data/achievements.js
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
addLayer("ach", {
|
||||||
|
name: "achievements", // This is optional, only used in a few places, If absent it just uses the layer id.
|
||||||
|
symbol: "☆", // This appears on the layer's node. Default is the id with the first letter capitalized
|
||||||
|
position: 0, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
||||||
|
startData() { return {
|
||||||
|
unlocked: true,
|
||||||
|
has45: false,
|
||||||
|
has55: false
|
||||||
|
}},
|
||||||
|
color: "#9d750d",
|
||||||
|
effect() {
|
||||||
|
return Decimal.div(player[this.layer].achievements.length, 20).add(1)
|
||||||
|
},
|
||||||
|
achievements: {
|
||||||
|
11: {
|
||||||
|
name: "All that progress is gone!",
|
||||||
|
done() { return player.p.points.gte(1) },
|
||||||
|
tooltip: "Reset for 1 PP."
|
||||||
|
},
|
||||||
|
12: {
|
||||||
|
name: "So that's what the mechanic is...",
|
||||||
|
done() { return getAlphaLevel().gte(2) },
|
||||||
|
tooltip: "Reach Alpha level 2."
|
||||||
|
},
|
||||||
|
13: {
|
||||||
|
name: "This is quite fun!",
|
||||||
|
done() { return getBetaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Beta level 1."
|
||||||
|
},
|
||||||
|
14: {
|
||||||
|
name: "Oh so many bars.",
|
||||||
|
done() { return getGammaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Gamma level 1."
|
||||||
|
},
|
||||||
|
15: {
|
||||||
|
name: "GREEN!!!",
|
||||||
|
done() { return options.theme === "verdant" },
|
||||||
|
tooltip: "Switch to the Verdant theme."
|
||||||
|
},
|
||||||
|
21: {
|
||||||
|
name: "Nomial gains.",
|
||||||
|
done() { return getPointGen().gte(1) },
|
||||||
|
tooltip: "Get 1 point per second."
|
||||||
|
},
|
||||||
|
22: {
|
||||||
|
name: "That's an exponent!",
|
||||||
|
done() { return getEpsilonLevel().gte(1) },
|
||||||
|
tooltip: "Reach Epsilon level 1."
|
||||||
|
},
|
||||||
|
23: {
|
||||||
|
name: "What's a \"Rank\"?",
|
||||||
|
done() { return getAlphaRank().gte(1) },
|
||||||
|
tooltip: "Reach Alpha rank 1."
|
||||||
|
},
|
||||||
|
24: {
|
||||||
|
name: "No more bars?",
|
||||||
|
done() { return getZetaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Zeta level 1."
|
||||||
|
},
|
||||||
|
25: {
|
||||||
|
name: "Lots of points",
|
||||||
|
done() { return player.points.gte(200) },
|
||||||
|
tooltip: "Reach 200 points."
|
||||||
|
},
|
||||||
|
31: {
|
||||||
|
name: "Even more progress.",
|
||||||
|
done() { return getBuyableAmount('p', 11).gte(1) },
|
||||||
|
tooltip: "Get 1x <b>More progress</b> buyable."
|
||||||
|
},
|
||||||
|
32: {
|
||||||
|
name: "So this just boosts Gamma further?",
|
||||||
|
done() { return getBuyableAmount('p', 12).gte(1) },
|
||||||
|
tooltip: "Get 1x <b>Rebased</b> buyable."
|
||||||
|
},
|
||||||
|
33: {
|
||||||
|
name: "Softcap?? >:(",
|
||||||
|
done() { return getPointGen().gte(getKappaEffect().mul(1000)) },
|
||||||
|
tooltip: "Reach the first softcap."
|
||||||
|
},
|
||||||
|
33: {
|
||||||
|
name: "Decrementy",
|
||||||
|
done() { return getBuyableAmount('p', 13).gte(1) },
|
||||||
|
tooltip: "Get 1x <b>Shorter bars</b> buyable."
|
||||||
|
},
|
||||||
|
34: {
|
||||||
|
name: "Super!",
|
||||||
|
done() { return player.sp.points.gte(1) },
|
||||||
|
tooltip: "Reset for 1 SPP."
|
||||||
|
},
|
||||||
|
35: {
|
||||||
|
name: "Where were you??",
|
||||||
|
done() { return getPointGen().gt(0) && player.points.div(100).gte(getPointGen()) },
|
||||||
|
tooltip: "Have your points reach 100x your points per second."
|
||||||
|
},
|
||||||
|
41: {
|
||||||
|
name: "Progressed further.",
|
||||||
|
done() { return getThetaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Theta level 1."
|
||||||
|
},
|
||||||
|
42: {
|
||||||
|
name: "Literally just another exponent.",
|
||||||
|
done() { return getIotaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Iota level 1."
|
||||||
|
},
|
||||||
|
43: {
|
||||||
|
name: "YES! GOODBYE SOFTCAP!",
|
||||||
|
done() { return getKappaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Kappa level 1."
|
||||||
|
},
|
||||||
|
44: {
|
||||||
|
name: "Very big multiplier",
|
||||||
|
done() { return getLambdaLevel().gte(1) },
|
||||||
|
tooltip: "Reach Lambda level 1."
|
||||||
|
},
|
||||||
|
45: {
|
||||||
|
name: "Don't even need PP anymore",
|
||||||
|
done() { return player[this.layer].has45 },
|
||||||
|
tooltip: "Reset for SPP with 0 PP."
|
||||||
|
},
|
||||||
|
51: {
|
||||||
|
name: "An exponent to progress points?",
|
||||||
|
done() { return getBuyableAmount('sp', 11).gte(1) },
|
||||||
|
tooltip: "Get 1x <b>Much more progress</b> buyable."
|
||||||
|
},
|
||||||
|
52: {
|
||||||
|
name: "And another exponent to points ¬_¬",
|
||||||
|
done() { return getBuyableAmount('sp', 12).gte(1) },
|
||||||
|
tooltip: "Get 1x <b>Super point booster</b> buyable."
|
||||||
|
},
|
||||||
|
53: {
|
||||||
|
name: "A new prestige layer!",
|
||||||
|
done() { return player.p.points.gte(5000) },
|
||||||
|
tooltip: "Reach 5000 PP."
|
||||||
|
},
|
||||||
|
54: {
|
||||||
|
name: "Ok so that speeds things up",
|
||||||
|
done() { return hasMilestone('f', 2) },
|
||||||
|
tooltip: "Earn Filestone 3."
|
||||||
|
},
|
||||||
|
55: {
|
||||||
|
name: "Well that was useful",
|
||||||
|
done() { return player[this.layer].has55 },
|
||||||
|
tooltip: "Respec directory upgrades when you have none."
|
||||||
|
},
|
||||||
|
61: {
|
||||||
|
name: "Ooh upgrades",
|
||||||
|
done() { return player.f.upgrades.map(x => x - 20).filter(x => x >= 0 && x < 9).length == 3 },
|
||||||
|
tooltip: "Get all row 2 directory upgrades."
|
||||||
|
},
|
||||||
|
62: {
|
||||||
|
name: "Lots of boosts!!",
|
||||||
|
done() { return player.f.upgrades.map(x => x - 30).filter(x => x >= 0 && x < 9).length == 3 },
|
||||||
|
tooltip: "Get all row 3 directory upgrades."
|
||||||
|
},
|
||||||
|
63: {
|
||||||
|
name: "Wait that's all of them?",
|
||||||
|
done() { return player.f.upgrades.map(x => x - 40).filter(x => x >= 0 && x < 9).length == 4 },
|
||||||
|
tooltip: "Get all row 4 directory upgrades."
|
||||||
|
},
|
||||||
|
64: {
|
||||||
|
name: "Well that exploded",
|
||||||
|
done() { return player.i.points.gt(0) },
|
||||||
|
tooltip: "Reset for 1 integral.<br>Current endgame."
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tabFormat: [
|
||||||
|
"blank",
|
||||||
|
["raw-html", function () { return "Achievements: " + player[this.layer].achievements.length + "/" + (Object.keys(tmp[this.layer].achievements).length - 2) }],
|
||||||
|
["raw-html", function () { return "Effect: x" + tmp[this.layer].effect + " to point gen." }],
|
||||||
|
"blank",
|
||||||
|
"achievements"
|
||||||
|
],
|
||||||
|
tooltip() {
|
||||||
|
return player[this.layer].achievements.length + " achievement" + (player[this.layer].achievements.length == 1 ? "" : "s")
|
||||||
|
},
|
||||||
|
row: "side", // Row the layer is in on the tree (0 is the first row)
|
||||||
|
layerShown(){return true}
|
||||||
|
})
|
|
@ -1,7 +1,7 @@
|
||||||
addLayer("f", {
|
addLayer("f", {
|
||||||
name: "files", // This is optional, only used in a few places, If absent it just uses the layer id.
|
name: "files", // This is optional, only used in a few places, If absent it just uses the layer id.
|
||||||
symbol: "🗎", // This appears on the layer's node. Default is the id with the first letter capitalized
|
symbol: "🗎", // This appears on the layer's node. Default is the id with the first letter capitalized
|
||||||
position: 0, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
position: 1, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
||||||
startData() { return {
|
startData() { return {
|
||||||
unlocked: false,
|
unlocked: false,
|
||||||
points: new Decimal(0),
|
points: new Decimal(0),
|
||||||
|
@ -18,9 +18,9 @@ addLayer("f", {
|
||||||
baseResource: "progress points", // Name of resource prestige is based on
|
baseResource: "progress points", // Name of resource prestige is based on
|
||||||
baseAmount() {return player.p.points}, // Get the current amount of baseResource
|
baseAmount() {return player.p.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
|
type: "static", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
||||||
exponent: 1.1, // Prestige currency exponent
|
exponent: 1.3, // Prestige currency exponent
|
||||||
base() {
|
base() {
|
||||||
let base = 1.2
|
let base = 2
|
||||||
if (hasUpgrade(this.layer, 41)) base **= 0.95
|
if (hasUpgrade(this.layer, 41)) base **= 0.95
|
||||||
return base
|
return base
|
||||||
},
|
},
|
||||||
|
@ -114,7 +114,7 @@ addLayer("f", {
|
||||||
branches: [11]
|
branches: [11]
|
||||||
},
|
},
|
||||||
23: {
|
23: {
|
||||||
description: "Gain 5% of your PP gain every second.",
|
description: "Gain 10% of your PP gain every second.",
|
||||||
cost: 4,
|
cost: 4,
|
||||||
unlocked() { return hasUpgrade(this.layer, 11) },
|
unlocked() { return hasUpgrade(this.layer, 11) },
|
||||||
branches: [11]
|
branches: [11]
|
||||||
|
@ -158,7 +158,7 @@ addLayer("f", {
|
||||||
branches: [32, 33]
|
branches: [32, 33]
|
||||||
},
|
},
|
||||||
44: {
|
44: {
|
||||||
description: "Gain another 5% of your PP gain every second.",
|
description: "Gain another 15% of your PP gain every second.",
|
||||||
cost: 8,
|
cost: 8,
|
||||||
unlocked() { return hasUpgrade(this.layer, 23) && hasUpgrade(this.layer, 33) },
|
unlocked() { return hasUpgrade(this.layer, 23) && hasUpgrade(this.layer, 33) },
|
||||||
branches: [[23, 2], 33]
|
branches: [[23, 2], 33]
|
||||||
|
@ -169,6 +169,9 @@ addLayer("f", {
|
||||||
display() { return "Reset directory" },
|
display() { return "Reset directory" },
|
||||||
onClick() {
|
onClick() {
|
||||||
if (confirm("Are you sure you want to respec?")) {
|
if (confirm("Are you sure you want to respec?")) {
|
||||||
|
if (player[this.layer].upgrades == 0) {
|
||||||
|
player.ach.has55 = true
|
||||||
|
}
|
||||||
for (let i of player[this.layer].upgrades) {
|
for (let i of player[this.layer].upgrades) {
|
||||||
player[this.layer].points = player[this.layer].points.add(tmp[this.layer].upgrades[i].cost)
|
player[this.layer].points = player[this.layer].points.add(tmp[this.layer].upgrades[i].cost)
|
||||||
}
|
}
|
28
js/data/integrals.js
Normal file
28
js/data/integrals.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
addLayer("i", {
|
||||||
|
name: "integrals", // This is optional, only used in a few places, If absent it just uses the layer id.
|
||||||
|
symbol: "∫", // This appears on the layer's node. Default is the id with the first letter capitalized
|
||||||
|
position: 0, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
||||||
|
startData() { return {
|
||||||
|
unlocked: false,
|
||||||
|
points: new Decimal(0)
|
||||||
|
}},
|
||||||
|
color: "#a62222",
|
||||||
|
requires: Decimal.pow(2, 128), // Can be a function that takes requirement increases into account
|
||||||
|
resource: "integrals", // Name of prestige currency
|
||||||
|
baseResource: "points", // Name of resource prestige is based on
|
||||||
|
baseAmount() {return player.points}, // Get the current amount of baseResource
|
||||||
|
type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
||||||
|
exponent: 1, // Prestige currency exponent
|
||||||
|
gainMult() { // Calculate the multiplier for main currency from bonuses
|
||||||
|
return new Decimal(1)
|
||||||
|
},
|
||||||
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
||||||
|
return new Decimal(1)
|
||||||
|
},
|
||||||
|
row: 2, // Row the layer is in on the tree (0 is the first row)
|
||||||
|
hotkeys: [
|
||||||
|
{key: "i", description: "I: reset for integrals", onPress(){if (canReset(this.layer)) doReset(this.layer)}},
|
||||||
|
],
|
||||||
|
layerShown(){ return player.points.gte("1e25") || player[this.layer].unlocked },
|
||||||
|
branches: ['sp', 'f']
|
||||||
|
})
|
|
@ -36,8 +36,7 @@ function getGammaCost(points = player.p.points) {
|
||||||
return cumulativeExponential(1.5, getGammaLevel(points).floor()).mul(15).pow(buyableEffect('p', 13))
|
return cumulativeExponential(1.5, getGammaLevel(points).floor()).mul(15).pow(buyableEffect('p', 13))
|
||||||
}
|
}
|
||||||
function getGammaEffect(points = player.p.points) {
|
function getGammaEffect(points = player.p.points) {
|
||||||
return Decimal.add(points, 1).add(hasUpgrade('f', 31) ? getTotalLevel() : 0).log(Decimal.pow(50, buyableEffect('p', 12)))
|
return Decimal.add(points, 1).add(hasUpgrade('f', 31) ? getTotalLevel() : 0).log(Decimal.pow(50, buyableEffect('p', 12))).add(1).pow(getGammaLevel(points).mul(getGammaRankEffect(points).add(1/10)))
|
||||||
.add(1).pow(getGammaLevel(points).mul(getGammaRankEffect(points).add(1/10)))
|
|
||||||
}
|
}
|
||||||
function getDeltaLevel(points = player.p.points) {
|
function getDeltaLevel(points = player.p.points) {
|
||||||
if (Decimal.eq(points, 0)) return new Decimal(0)
|
if (Decimal.eq(points, 0)) return new Decimal(0)
|
||||||
|
@ -74,8 +73,7 @@ function getZetaEffect(points = player.p.points) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTotalLevel(points = player.p.points) {
|
function getTotalLevel(points = player.p.points) {
|
||||||
return getAlphaLevel(points).add(getBetaLevel(points)).add(getGammaLevel(points)).add(getDeltaLevel(points))
|
return getAlphaLevel(points).add(getBetaLevel(points)).add(getGammaLevel(points)).add(getDeltaLevel(points)).add(getEpsilonLevel(points)).add(getZetaLevel(points))
|
||||||
.add(getEpsilonLevel(points)).add(getZetaLevel(points))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getEtaLevel(points = player.sp.points) {
|
function getEtaLevel(points = player.sp.points) {
|
||||||
|
@ -90,35 +88,45 @@ function getEtaEffect(points = player.sp.points) {
|
||||||
}
|
}
|
||||||
function getThetaLevel(points = player.sp.points) {
|
function getThetaLevel(points = player.sp.points) {
|
||||||
if (Decimal.eq(points, 0)) return new Decimal(0)
|
if (Decimal.eq(points, 0)) return new Decimal(0)
|
||||||
return inverseCumulativeExponential(1.5, Decimal.div(points, 3)).floor()
|
return inverseCumulativeExponential(1.3, Decimal.div(points, 3)).floor()
|
||||||
}
|
}
|
||||||
function getThetaCost(points = player.sp.points) {
|
function getThetaCost(points = player.sp.points) {
|
||||||
return cumulativeExponential(1.5, getThetaLevel(points)).mul(3)
|
return cumulativeExponential(1.3, getThetaLevel(points)).mul(3)
|
||||||
}
|
}
|
||||||
function getThetaEffect(points = player.sp.points) {
|
function getThetaEffect(points = player.sp.points) {
|
||||||
return getThetaLevel(points).pow(1/4).add(1)
|
return getThetaLevel(points).pow(1/4).add(1)
|
||||||
}
|
}
|
||||||
function getIotaLevel(points = player.sp.points) {
|
function getIotaLevel(points = player.sp.points) {
|
||||||
if (Decimal.eq(points, 0)) return new Decimal(0)
|
if (Decimal.eq(points, 0)) return new Decimal(0)
|
||||||
return inverseCumulativeExponential(1.7, Decimal.div(points, 5)).floor()
|
return inverseCumulativeExponential(1.5, Decimal.div(points, 5)).floor()
|
||||||
}
|
}
|
||||||
function getIotaCost(points = player.sp.points) {
|
function getIotaCost(points = player.sp.points) {
|
||||||
return cumulativeExponential(1.7, getIotaLevel(points)).mul(5)
|
return cumulativeExponential(1.5, getIotaLevel(points)).mul(5)
|
||||||
}
|
}
|
||||||
function getIotaEffect(points = player.sp.points) {
|
function getIotaEffect(points = player.sp.points) {
|
||||||
return getIotaLevel(points).pow(1/3).add(1)
|
return getIotaLevel(points).pow(1/3).add(1)
|
||||||
}
|
}
|
||||||
function getKappaLevel(points = player.sp.points) {
|
function getKappaLevel(points = player.sp.points) {
|
||||||
if (Decimal.eq(points, 0)) return new Decimal(0)
|
if (Decimal.eq(points, 0)) return new Decimal(0)
|
||||||
return inverseCumulativeExponential(2, Decimal.div(points, 8)).floor()
|
return inverseCumulativeExponential(1.7, Decimal.div(points, 8)).floor()
|
||||||
}
|
}
|
||||||
function getKappaCost(points = player.sp.points) {
|
function getKappaCost(points = player.sp.points) {
|
||||||
return cumulativeExponential(2, getKappaLevel(points)).mul(8)
|
return cumulativeExponential(1.7, getKappaLevel(points)).mul(8)
|
||||||
}
|
}
|
||||||
function getKappaEffect(points = player.sp.points) {
|
function getKappaEffect(points = player.sp.points) {
|
||||||
return getKappaLevel(points).pow(2/3).add(1)
|
return getKappaLevel(points).sqrt().add(1)
|
||||||
|
}
|
||||||
|
function getLambdaLevel(points = player.sp.points) {
|
||||||
|
if (Decimal.eq(points, 0)) return new Decimal(0)
|
||||||
|
return inverseCumulativeExponential(2, Decimal.div(points, 13)).floor()
|
||||||
|
}
|
||||||
|
function getLambdaCost(points = player.sp.points) {
|
||||||
|
return cumulativeExponential(2, getLambdaLevel(points)).mul(13)
|
||||||
|
}
|
||||||
|
function getLambdaEffect(points = player.sp.points) {
|
||||||
|
return getLambdaLevel(points).add(1).pow(3/2)
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTotalSuperLevel(points = player.sp.points) {
|
function getTotalSuperLevel(points = player.sp.points) {
|
||||||
return getEtaLevel(points).add(getThetaLevel(points)).add(getIotaLevel(points)).add(getKappaLevel(points))
|
return getEtaLevel(points).add(getThetaLevel(points)).add(getIotaLevel(points)).add(getKappaLevel(points)).add(getLambdaLevel(points))
|
||||||
}
|
}
|
|
@ -26,7 +26,7 @@ addLayer("p", {
|
||||||
return mult
|
return mult
|
||||||
},
|
},
|
||||||
gainExp() { // Calculate the exponent on main currency from bonuses
|
gainExp() { // Calculate the exponent on main currency from bonuses
|
||||||
return new Decimal(1)
|
return buyableEffect('sp', 11)
|
||||||
},
|
},
|
||||||
row: 0, // Row the layer is in on the tree (0 is the first row)
|
row: 0, // Row the layer is in on the tree (0 is the first row)
|
||||||
hotkeys: [
|
hotkeys: [
|
||||||
|
@ -34,8 +34,8 @@ addLayer("p", {
|
||||||
],
|
],
|
||||||
passiveGeneration() {
|
passiveGeneration() {
|
||||||
let gain = 0
|
let gain = 0
|
||||||
if (hasUpgrade('f', 44)) gain += 0.05
|
if (hasUpgrade('f', 23)) gain += 0.1
|
||||||
if (hasUpgrade('f', 23)) gain += 0.05
|
if (hasUpgrade('f', 44)) gain += 0.15
|
||||||
return gain
|
return gain
|
||||||
},
|
},
|
||||||
automate() {
|
automate() {
|
||||||
|
@ -194,7 +194,7 @@ addLayer("p", {
|
||||||
cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.2).mul(5).add(50) },
|
cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.2).mul(5).add(50) },
|
||||||
display() {
|
display() {
|
||||||
return "Increase progress point gain.<br><br>Amount: " + getBuyableAmount(this.layer, this.id)
|
return "Increase progress point gain.<br><br>Amount: " + getBuyableAmount(this.layer, this.id)
|
||||||
+ ".<br>Effect: " + this.effect(getBuyableAmount(this.layer, this.id)) + "x.<br>Cost: "
|
+ ".<br>Effect: x" + this.effect(getBuyableAmount(this.layer, this.id)) + ".<br>Cost: "
|
||||||
+ this.cost(getBuyableAmount(this.layer, this.id)) + " total levels."
|
+ this.cost(getBuyableAmount(this.layer, this.id)) + " total levels."
|
||||||
},
|
},
|
||||||
canAfford() { return Decimal.gte(getTotalLevel(), this.cost()) },
|
canAfford() { return Decimal.gte(getTotalLevel(), this.cost()) },
|
||||||
|
@ -260,8 +260,8 @@ addLayer("p", {
|
||||||
"main-display",
|
"main-display",
|
||||||
["row", ["prestige-button", ["clickable", 11]]],
|
["row", ["prestige-button", ["clickable", 11]]],
|
||||||
"resource-display",
|
"resource-display",
|
||||||
["raw-html", () => "You have " + getTotalLevel() + " levels."],
|
["raw-html", () => "You have " + getTotalLevel() + " level" + (getTotalLevel().eq(1) ? "" : "s") + "."],
|
||||||
["raw-html", () => "You have " + getTotalRank() + " ranks."],
|
["raw-html", () => "You have " + getTotalRank() + " rank" + (getTotalRank().eq(1) ? "" : "s") + "."],
|
||||||
"blank",
|
"blank",
|
||||||
"blank",
|
"blank",
|
||||||
["bar", "alphaRank"],
|
["bar", "alphaRank"],
|
||||||
|
@ -278,8 +278,8 @@ addLayer("p", {
|
||||||
"main-display",
|
"main-display",
|
||||||
["row", ["prestige-button", ["clickable", 11]]],
|
["row", ["prestige-button", ["clickable", 11]]],
|
||||||
"resource-display",
|
"resource-display",
|
||||||
["raw-html", () => "You have " + getTotalLevel() + " levels."],
|
["raw-html", () => "You have " + getTotalLevel() + " level" + (getTotalLevel().eq(1) ? "" : "s") + "."],
|
||||||
["raw-html", () => "You have " + getTotalRank() + " ranks."],
|
["raw-html", () => "You have " + getTotalRank() + " rank" + (getTotalRank().eq(1) ? "" : "s") + "."],
|
||||||
"blank",
|
"blank",
|
||||||
"blank",
|
"blank",
|
||||||
"buyables"
|
"buyables"
|
|
@ -1,7 +1,7 @@
|
||||||
addLayer("sp", {
|
addLayer("sp", {
|
||||||
name: "super progress", // This is optional, only used in a few places, If absent it just uses the layer id.
|
name: "super progress", // This is optional, only used in a few places, If absent it just uses the layer id.
|
||||||
symbol: "‰", // This appears on the layer's node. Default is the id with the first letter capitalized
|
symbol: "‰", // This appears on the layer's node. Default is the id with the first letter capitalized
|
||||||
position: 1, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
position: 0, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
||||||
startData() { return {
|
startData() { return {
|
||||||
unlocked: false,
|
unlocked: false,
|
||||||
points: new Decimal(0)
|
points: new Decimal(0)
|
||||||
|
@ -23,6 +23,9 @@ addLayer("sp", {
|
||||||
hotkeys: [
|
hotkeys: [
|
||||||
{key: "s", description: "S: Reset for super progress points", onPress(){if (canReset(this.layer)) doReset(this.layer)}},
|
{key: "s", description: "S: Reset for super progress points", onPress(){if (canReset(this.layer)) doReset(this.layer)}},
|
||||||
],
|
],
|
||||||
|
onPrestige(gain) {
|
||||||
|
if (player.p.points.eq(0)) { player.ach.has45 = true }
|
||||||
|
},
|
||||||
bars: {
|
bars: {
|
||||||
eta: {
|
eta: {
|
||||||
direction: RIGHT,
|
direction: RIGHT,
|
||||||
|
@ -66,11 +69,49 @@ addLayer("sp", {
|
||||||
progress() { return player[this.layer].points.div(getKappaCost()) },
|
progress() { return player[this.layer].points.div(getKappaCost()) },
|
||||||
display() {
|
display() {
|
||||||
return "Kappa - Level " + getKappaLevel() + " (" + player[this.layer].points + "/" + getKappaCost()
|
return "Kappa - Level " + getKappaLevel() + " (" + player[this.layer].points + "/" + getKappaCost()
|
||||||
+ ")<br>Effect: x" + getKappaEffect() + " to point gen."
|
+ ")<br>Effect: x" + getKappaEffect() + " to softcap."
|
||||||
},
|
},
|
||||||
fillStyle: {backgroundColor: "#107f76"},
|
fillStyle: {backgroundColor: "#107f76"},
|
||||||
unlocked() { return getIotaLevel().gt(0) }
|
unlocked() { return getIotaLevel().gt(0) }
|
||||||
},
|
},
|
||||||
|
lambda: {
|
||||||
|
direction: RIGHT,
|
||||||
|
width: 300,
|
||||||
|
height: 50,
|
||||||
|
progress() { return player[this.layer].points.div(getLambdaCost()) },
|
||||||
|
display() {
|
||||||
|
return "Lambda - Level " + getLambdaLevel() + " (" + player[this.layer].points + "/" + getLambdaCost()
|
||||||
|
+ ")<br>Effect: x" + getLambdaEffect() + " to point gen."
|
||||||
|
},
|
||||||
|
fillStyle: {backgroundColor: "#107f76"},
|
||||||
|
unlocked() { return getKappaLevel().gt(0) }
|
||||||
|
},
|
||||||
|
},
|
||||||
|
buyables: {
|
||||||
|
11: {
|
||||||
|
title: "Much more progress",
|
||||||
|
effect() { return Decimal.div(getBuyableAmount(this.layer, this.id), 20).add(1) },
|
||||||
|
cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.2).mul(3).add(20) },
|
||||||
|
display() {
|
||||||
|
return "Increase PP gain.<br><br>Amount: " + getBuyableAmount(this.layer, this.id)
|
||||||
|
+ ".<br>Effect: ^" + this.effect(getBuyableAmount(this.layer, this.id)) + ".<br>Cost: "
|
||||||
|
+ this.cost(getBuyableAmount(this.layer, this.id)) + " total super levels."
|
||||||
|
},
|
||||||
|
canAfford() { return Decimal.gte(getTotalSuperLevel(), this.cost()) },
|
||||||
|
buy() { addBuyables(this.layer, this.id, 1) }
|
||||||
|
},
|
||||||
|
12: {
|
||||||
|
title: "Super point booster",
|
||||||
|
effect() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.3).add(1) },
|
||||||
|
cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.2).mul(5).add(25) },
|
||||||
|
display() {
|
||||||
|
return "Increase point gen.<br><br>Amount: " + getBuyableAmount(this.layer, this.id)
|
||||||
|
+ ".<br>Effect: ^" + this.effect(getBuyableAmount(this.layer, this.id)) + ".<br>Cost: "
|
||||||
|
+ this.cost(getBuyableAmount(this.layer, this.id)) + " total super levels."
|
||||||
|
},
|
||||||
|
canAfford() { return Decimal.gte(getTotalSuperLevel(), this.cost()) },
|
||||||
|
buy() { addBuyables(this.layer, this.id, 1) }
|
||||||
|
},
|
||||||
},
|
},
|
||||||
clickables: {
|
clickables: {
|
||||||
11: {
|
11: {
|
||||||
|
@ -86,16 +127,28 @@ addLayer("sp", {
|
||||||
"main-display",
|
"main-display",
|
||||||
["row", ["prestige-button", ["clickable", 11]]],
|
["row", ["prestige-button", ["clickable", 11]]],
|
||||||
"resource-display",
|
"resource-display",
|
||||||
["raw-html", () =>
|
["raw-html", () => "You have " + getTotalSuperLevel() + " super level" + (getTotalSuperLevel().eq(1) ? "" : "s") + "."],
|
||||||
"You have " + getTotalSuperLevel() + " super level" + (getTotalSuperLevel().eq(1) ? "" : "s") + "."
|
|
||||||
],
|
|
||||||
"blank",
|
"blank",
|
||||||
"blank",
|
"blank",
|
||||||
["bar", "eta"],
|
["bar", "eta"],
|
||||||
["bar", "theta"],
|
["bar", "theta"],
|
||||||
["bar", "iota"],
|
["bar", "iota"],
|
||||||
|
["bar", "kappa"],
|
||||||
|
["bar", "lambda"],
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"super buyables": {
|
||||||
|
content: [
|
||||||
|
"main-display",
|
||||||
|
["row", ["prestige-button", ["clickable", 11]]],
|
||||||
|
"resource-display",
|
||||||
|
["raw-html", () => "You have " + getTotalSuperLevel() + " super level" + (getTotalSuperLevel().eq(1) ? "" : "s") + "."],
|
||||||
|
"blank",
|
||||||
|
"blank",
|
||||||
|
"buyables",
|
||||||
|
],
|
||||||
|
unlocked() { return getTotalSuperLevel().gte(18) }
|
||||||
|
},
|
||||||
},
|
},
|
||||||
layerShown(){ return player.points.gte(10000) || player[this.layer].unlocked },
|
layerShown(){ return player.points.gte(10000) || player[this.layer].unlocked },
|
||||||
branches: ['p'],
|
branches: ['p'],
|
15
js/mod.js
15
js/mod.js
|
@ -3,7 +3,7 @@ let modInfo = {
|
||||||
id: "nif/pbic",
|
id: "nif/pbic",
|
||||||
author: "Nif",
|
author: "Nif",
|
||||||
pointsName: "points",
|
pointsName: "points",
|
||||||
modFiles: ["ranks.js", "levels.js", "progress.js", "super progress.js", "files.js", "tree.js"],
|
modFiles: ["data/ranks.js", "data/levels.js", "data/progress.js", "data/super progress.js", "data/files.js", "data/integrals.js", "data/achievements.js", "data/tree.js"],
|
||||||
|
|
||||||
discordName: "",
|
discordName: "",
|
||||||
discordLink: "",
|
discordLink: "",
|
||||||
|
@ -21,7 +21,7 @@ let changelog = `<h1>Changelog:</h1><br><br>
|
||||||
<h3>v1.0</h3><br>
|
<h3>v1.0</h3><br>
|
||||||
- I've given up trying to log all of the changes I'm making.`
|
- I've given up trying to log all of the changes I'm making.`
|
||||||
|
|
||||||
let winText = `Download 100% complete.<br><br>You won! Congratulations!<br>Beyond this point may be unbalanced / incomplete, proceed with caution!`
|
let winText = `Download 100% complete.<br><br>You won! Congratulations!<br>More content coming soon...`
|
||||||
|
|
||||||
// If you add new functions anywhere inside of a layer, and those functions have an effect when called, add them here.
|
// If you add new functions anywhere inside of a layer, and those functions have an effect when called, add them here.
|
||||||
// (The ones here are examples, all official functions are already taken care of)
|
// (The ones here are examples, all official functions are already taken care of)
|
||||||
|
@ -47,18 +47,21 @@ function getPointGen() {
|
||||||
gain = gain.mul(getGammaEffect())
|
gain = gain.mul(getGammaEffect())
|
||||||
gain = gain.mul(getDeltaEffect())
|
gain = gain.mul(getDeltaEffect())
|
||||||
gain = gain.mul(getZetaEffect())
|
gain = gain.mul(getZetaEffect())
|
||||||
gain = gain.mul(getKappaEffect())
|
gain = gain.mul(getLambdaEffect())
|
||||||
|
gain = gain.mul(tmp.ach.effect)
|
||||||
if (hasMilestone('f', 0)) gain = gain.mul(getTotalLevel().add(1).log(5).add(1))
|
if (hasMilestone('f', 0)) gain = gain.mul(getTotalLevel().add(1).log(5).add(1))
|
||||||
if (hasMilestone('f', 1)) gain = gain.mul(3)
|
if (hasMilestone('f', 1)) gain = gain.mul(3)
|
||||||
// exponentiative
|
// exponentiative
|
||||||
if (gain.gte(1)) {
|
if (gain.gte(1)) {
|
||||||
gain = gain.pow(getEpsilonEffect())
|
gain = gain.pow(getEpsilonEffect())
|
||||||
gain = gain.pow(getIotaEffect())
|
gain = gain.pow(getIotaEffect())
|
||||||
|
gain = gain.pow(buyableEffect('sp', 12))
|
||||||
if (hasMilestone('f', 3)) gain = gain.pow(2)
|
if (hasMilestone('f', 3)) gain = gain.pow(2)
|
||||||
if (hasUpgrade('f', 11)) gain = gain.pow(upgradeEffect('f', 11))
|
if (hasUpgrade('f', 11)) gain = gain.pow(upgradeEffect('f', 11))
|
||||||
}
|
}
|
||||||
// softcaps
|
// softcaps
|
||||||
gain = softcap(gain, 1000, d => d.add(1).log(1.01))
|
gain = softcap(gain, getKappaEffect().mul(1000), d => d.add(1).log(Math.E).add(1).pow(2).sub(1).div(2))
|
||||||
|
gain = softcap(gain, Decimal.pow(2, 128), _ => new Decimal(0), player.points)
|
||||||
return gain
|
return gain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,12 +72,12 @@ function addedPlayerData() { return {
|
||||||
// Display extra things at the top of the page
|
// Display extra things at the top of the page
|
||||||
var displayThings = [
|
var displayThings = [
|
||||||
"All exponentiative upgrades only take affect above 1.",
|
"All exponentiative upgrades only take affect above 1.",
|
||||||
() => getPointGen().gte(1000) ? "Your points per second are being logarithmically softcapped over 1000/s" : ""
|
() => getPointGen().gte(getKappaEffect().mul(1000)) ? "Your points per second are being logarithmically softcapped over " + getKappaEffect().mul(1000) + "/s" : ""
|
||||||
]
|
]
|
||||||
|
|
||||||
// Determines when the game "ends"
|
// Determines when the game "ends"
|
||||||
function isEndgame() {
|
function isEndgame() {
|
||||||
return player.f.total.gte(40)
|
return player.i.points.gt(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue