diff --git a/js/levels.js b/js/levels.js index 5b69ccf..756d6b0 100644 --- a/js/levels.js +++ b/js/levels.js @@ -1,55 +1,74 @@ +function cumulativeExponential(base, levels) { + return Decimal.add(levels, 1).pow_base(base).sub(1).div(Decimal.sub(base, 1)) +} +function inverseCumulativeExponential(base, levels) { + return Decimal.sub(base, 1).mul(levels).add(1).log(base) +} + function getAlphaLevel(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return Decimal.add(points, 10).div(11).log(1.1).add(1).floor().max(0) + return inverseCumulativeExponential(1.1, Decimal.pow(points, buyableEffect('p', 13).pow(-1))).floor() } function getAlphaCost(points = player.p.points) { - return getAlphaLevel(points).pow_base(1.1).mul(11).sub(10) + return cumulativeExponential(1.1, getAlphaLevel(points)).pow(buyableEffect('p', 13)) } function getAlphaEffect(points = player.p.points) { - return getAlphaLevel(points).mul(getAlphaRankEffect(points).add(0.05)) + return getAlphaLevel(points).mul(getAlphaRankEffect(points).add(1/20)) } function getBetaLevel(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return Decimal.add(points, 20).div(25).log(1.25).add(1).floor().max(0) + return inverseCumulativeExponential(1.25, Decimal.div(Decimal.pow(points, buyableEffect('p', 13).pow(-1)), 5)).floor() } function getBetaCost(points = player.p.points) { - return getBetaLevel(points).pow_base(1.25).mul(25).sub(20) + return cumulativeExponential(1.25, getBetaLevel(points)).mul(5).pow(buyableEffect('p', 13)) } function getBetaEffect(points = player.p.points) { - return getBetaLevel(points).mul(getBetaRankEffect(points).add(0.05)).add(1) + return getBetaLevel(points).mul(getBetaRankEffect(points).add(1/20)).add(1) } function getGammaLevel(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return Decimal.add(points, 30).div(45).log(1.5).add(1).floor().max(0) + return inverseCumulativeExponential(1.5, Decimal.div(Decimal.pow(points, buyableEffect('p', 13).pow(-1)), 15)).floor() } function getGammaCost(points = player.p.points) { - return getGammaLevel(points).pow_base(1.5).mul(45).sub(30) + return cumulativeExponential(1.5, getGammaLevel(points)).mul(15).pow(buyableEffect('p', 13)) } function getGammaEffect(points = player.p.points) { - return Decimal.add(player.p.points, 100).log(100) - .pow(getGammaLevel(points).mul(getGammaRankEffect(points).add(0.05)).add(1)) + return Decimal.add(player.p.points, 1).log(Decimal.pow(50, buyableEffect('p', 12))).add(1).pow( + getGammaLevel(points).mul(getGammaRankEffect(points).add(1/10)) + ) } function getDeltaLevel(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return Decimal.add(points, 30).div(60).log(2).add(1).floor().max(0) + return inverseCumulativeExponential(2, Decimal.div(Decimal.pow(points, buyableEffect('p', 13).pow(-1)), 30)).floor() } function getDeltaCost(points = player.p.points) { - return getDeltaLevel(points).pow_base(2).mul(60).sub(30) + return cumulativeExponential(2, getDeltaLevel(points)).mul(30).pow(buyableEffect('p', 13)) } function getDeltaEffect(points = player.p.points) { - return getDeltaLevel(points).mul(getDeltaRankEffect(points).add(0.2)).add(1) + return getDeltaLevel(points).mul(getDeltaRankEffect(points).add(1/5)).add(1) } function getEpsilonLevel(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return Decimal.mul(points, 3).add(100).div(250).log(2.5).add(1).floor().max(0) + return inverseCumulativeExponential(2.5, Decimal.div(Decimal.pow(points, buyableEffect('p', 13).pow(-1)), 50)).floor() } function getEpsilonCost(points = player.p.points) { - return getEpsilonLevel(points).pow_base(2.5).mul(250).sub(100).div(3) + return cumulativeExponential(2.5, getEpsilonLevel(points)).mul(50).pow(buyableEffect('p', 13)) } function getEpsilonEffect(points = player.p.points) { - return getEpsilonLevel(points).mul(getEpsilonRankEffect(points).add(0.1)).add(1) + return getEpsilonLevel(points).mul(getEpsilonRankEffect(points).add(1/10)).add(1) +} +function getZetaLevel(points = player.p.points) { + if (Decimal.eq(points, 0)) return new Decimal(0) + return inverseCumulativeExponential(3, Decimal.div(Decimal.pow(points, buyableEffect('p', 13).pow(-1)), 80)).floor() +} +function getZetaCost(points = player.p.points) { + return cumulativeExponential(3, getZetaLevel(points)).mul(80).pow(buyableEffect('p', 13)) +} +function getZetaEffect(points = player.p.points) { + return getZetaLevel(points).mul(getZetaRankEffect().add(1/3)).add(1) } function getTotalLevel() { return getAlphaLevel().add(getBetaLevel()).add(getGammaLevel()).add(getDeltaLevel()).add(getEpsilonLevel()) + .add(getZetaLevel()) } \ No newline at end of file diff --git a/js/mod.js b/js/mod.js index 584ac8c..56a9a47 100644 --- a/js/mod.js +++ b/js/mod.js @@ -13,18 +13,19 @@ let modInfo = { // Set your version in num and name let VERSION = { - num: "0/a1", - name: "You guys wanted it.", + num: "1", + name: "The first release.", } let changelog = `

Changelog:



-

v0/a1


+

v1


- Added progress points.
- - Added bars Alpha to Epsilon.
+ - Added bars Alpha to Zeta.
- Added Ranks.
+ - Added Buyables.
- Endgame: 500 Progress Points.
` -let winText = `Download 100% complete.

You won! Congratulations!
Beyond this point may be unbalanced, proceed with caution!` +let winText = `Download 100% complete.

You won! Congratulations!
Beyond this point may be unbalanced / incomplete, proceed with caution!` // 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) @@ -47,7 +48,9 @@ function getPointGen() { .mul(getBetaEffect()) .mul(getGammaEffect()) .mul(getDeltaEffect()) + .mul(getZetaEffect()) .pow(getEpsilonEffect()) + gain = softcap(gain, 1000, d => d.add(1).log(1.2).add(1)) return gain } @@ -61,7 +64,7 @@ var displayThings = [ // Determines when the game "ends" function isEndgame() { - return player.p.points.gte(500) + return getTotalRank().gte(25) } diff --git a/js/progress.js b/js/progress.js index 0131942..01a9cf7 100644 --- a/js/progress.js +++ b/js/progress.js @@ -42,7 +42,7 @@ addLayer("p", { progress() { return getAlphaLevel().div(getAlphaRankCost()) }, display() { return "Alpha - Rank " + getAlphaRank() + " (" + getAlphaLevel() + "/" + getAlphaRankCost() - + ")
Effect: +" + getAlphaRankEffect() + " to Alpha effect." + + ")
Effect: +" + getAlphaRankEffect() + " to Alpha effect base." }, fillStyle: {backgroundColor: "#0c6949"}, }, @@ -65,7 +65,7 @@ addLayer("p", { progress() { return getBetaLevel().div(getBetaRankCost()) }, display() { return "Beta - Rank " + getBetaRank() + " (" + getBetaLevel() + "/" + getBetaRankCost() - + ")
Effect: +" + getBetaRankEffect() + " to Beta effect." + + ")
Effect: +" + getBetaRankEffect() + " to Beta effect base." }, fillStyle: {backgroundColor: "#0c6949"}, unlocked() { return getAlphaLevel().gte(1) } @@ -113,7 +113,7 @@ addLayer("p", { progress() { return getDeltaLevel().div(getDeltaRankCost()) }, display() { return "Delta - Rank " + getDeltaRank() + " (" + getDeltaLevel() + "/" + getDeltaRankCost() - + ")
Effect: +" + getDeltaRankEffect() + " to Delta effect." + + ")
Effect: +" + getDeltaRankEffect() + " to Delta effect base." }, fillStyle: {backgroundColor: "#0c6949"}, unlocked() { return getGammaLevel().gte(1) } @@ -137,17 +137,41 @@ addLayer("p", { progress() { return getEpsilonLevel().div(getEpsilonRankCost()) }, display() { return "Epsilon - Rank " + getEpsilonRank() + " (" + getEpsilonLevel() + "/" + getEpsilonRankCost() - + ")
Effect: +" + getEpsilonRankEffect() + " to Epsilon effect." + + ")
Effect: +" + getEpsilonRankEffect() + " to Epsilon effect base." }, fillStyle: {backgroundColor: "#0c6949"}, unlocked() { return getDeltaLevel().gte(1) } }, + zeta: { + direction: RIGHT, + width: 300, + height: 50, + progress() { return player[this.layer].points.div(getZetaCost()) }, + display() { + return "Zeta - Level " + getZetaLevel() + " (" + player[this.layer].points + "/" + getZetaCost() + + ")
Effect: x" + getZetaEffect() + " to point gen." + }, + fillStyle: {backgroundColor: "#0c6949"}, + unlocked() { return getEpsilonLevel().gte(1) } + }, + zetaRank: { + direction: RIGHT, + width: 300, + height: 50, + progress() { return getZetaLevel().div(getZetaRankCost()) }, + display() { + return "Zeta - Rank " + getZetaRank() + " (" + getZetaLevel() + "/" + getZetaRankCost() + + ")
Effect: +" + getZetaRankEffect() + " to Zeta effect base." + }, + fillStyle: {backgroundColor: "#0c6949"}, + unlocked() { return getEpsilonLevel().gte(1) } + }, }, buyables: { 11: { title: "More progress", - effect() { return Decimal.pow(1.25, getBuyableAmount(this.layer, this.id)) }, - cost() { return Decimal.mul(getBuyableAmount(this.layer, this.id), 5).add(50) }, + effect() { return Decimal.pow(1.1, getBuyableAmount(this.layer, this.id)) }, + cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.2).mul(5).add(50) }, display() { return "Increase progress point gain.

Amount: " + getBuyableAmount(this.layer, this.id) + ".
Effect: " + this.effect(getBuyableAmount(this.layer, this.id)) + "x.
Cost: " @@ -155,6 +179,30 @@ addLayer("p", { }, canAfford() { return Decimal.gte(getTotalLevel(), this.cost()) }, buy() { addBuyables(this.layer, this.id, 1) } + }, + 12: { + title: "Rebased", + effect() { return Decimal.pow(0.95, getBuyableAmount(this.layer, this.id)) }, + cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.4).mul(10).add(80) }, + display() { + return "Decrease Gamma effect base.

Amount: " + getBuyableAmount(this.layer, this.id) + + ".
Effect: ^" + this.effect(getBuyableAmount(this.layer, this.id)) + ".
Cost: " + + this.cost(getBuyableAmount(this.layer, this.id)) + " total levels." + }, + canAfford() { return Decimal.gte(getTotalLevel(), this.cost()) }, + buy() { addBuyables(this.layer, this.id, 1) } + }, + 13: { + title: "Shorter bars", + effect() { return Decimal.pow(0.98, getBuyableAmount(this.layer, this.id)) }, + cost() { return Decimal.pow(getBuyableAmount(this.layer, this.id), 1.6).mul(15).add(130) }, + display() { + return "Decrease all level costs.

Amount: " + getBuyableAmount(this.layer, this.id) + + ".
Effect: ^" + this.effect(getBuyableAmount(this.layer, this.id)) + ".
Cost: " + + this.cost(getBuyableAmount(this.layer, this.id)) + " total levels." + }, + canAfford() { return Decimal.gte(getTotalLevel(), this.cost()) }, + buy() { addBuyables(this.layer, this.id, 1) } } }, tabFormat: { @@ -171,7 +219,8 @@ addLayer("p", { ["bar", "beta"], ["bar", "gamma"], ["bar", "delta"], - ["bar", "epsilon"] + ["bar", "epsilon"], + ["bar", "zeta"] ] }, ranks: { @@ -187,7 +236,8 @@ addLayer("p", { ["bar", "betaRank"], ["bar", "gammaRank"], ["bar", "deltaRank"], - ["bar", "epsilonRank"] + ["bar", "epsilonRank"], + ["bar", "zetaRank"] ], unlocked() { return getAlphaLevel().gte(18) } }, diff --git a/js/ranks.js b/js/ranks.js index ff022a9..85b9089 100644 --- a/js/ranks.js +++ b/js/ranks.js @@ -10,45 +10,54 @@ function getAlphaRankEffect(points = player.p.points) { } function getBetaRank(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return getBetaLevel(points).div(17.5).floor() + return getBetaLevel(points).div(15).floor() } function getBetaRankCost(points = player.p.points) { - return getBetaRank(points).add(1).mul(17.5) + return getBetaRank(points).add(1).mul(15) } function getBetaRankEffect(points = player.p.points) { return getBetaRank(points).div(100).mul(3) } function getGammaRank(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return getGammaLevel(points).div(15).floor() + return getGammaLevel(points).div(12).floor() } function getGammaRankCost(points = player.p.points) { - return getGammaRank(points).add(1).mul(15) + return getGammaRank(points).add(1).mul(12) } function getGammaRankEffect(points = player.p.points) { - return getGammaRank(points).div(50) + return getGammaRank(points).div(15) } function getDeltaRank(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return getDeltaLevel(points).div(12.5).floor() + return getDeltaLevel(points).div(10).floor() } function getDeltaRankCost(points = player.p.points) { - return getDeltaRank(points).add(1).mul(12.5) + return getDeltaRank(points).add(1).mul(10) } function getDeltaRankEffect(points = player.p.points) { return getDeltaRank(points).div(20) } function getEpsilonRank(points = player.p.points) { if (Decimal.eq(points, 0)) return new Decimal(0) - return getEpsilonLevel(points).div(10).floor() + return getEpsilonLevel(points).div(8).floor() } function getEpsilonRankCost(points = player.p.points) { - return getEpsilonRank(points).add(1).mul(10) + return getEpsilonRank(points).add(1).mul(8) } function getEpsilonRankEffect(points = player.p.points) { - return getEpsilonRank(points).div(100).mul(12) + return getEpsilonRank(points).div(10) +} +function getZetaRank(points = player.p.points) { + if (Decimal.eq(points, 0)) return new Decimal(0) + return getZetaLevel(points).div(8).floor() +} +function getZetaRankCost(points = player.p.points) { + return getZetaRank(points).add(1).mul(7) +} +function getZetaRankEffect(points = player.p.points) { + return getZetaRank(points).div(5) } - function getTotalRank() { - return getAlphaRank().add(getBetaRank()).add(getGammaRank()).add(getDeltaRank()).add(getEpsilonRank()) + return getAlphaRank().add(getBetaRank()).add(getGammaRank()).add(getDeltaRank()).add(getEpsilonRank()).add(getZetaRank()) } \ No newline at end of file diff --git a/js/utils.js b/js/utils.js index f56ca9c..5f64e60 100644 --- a/js/utils.js +++ b/js/utils.js @@ -409,4 +409,10 @@ function gridRun(layer, func, data, id) { } else return layers[layer].grid[func]; +} + +// Small functions +function softcap(number, after, method) { + if (Decimal.lt(number, after)) { return new Decimal(number) } + else { return method(Decimal.sub(number, after)).add(after) } } \ No newline at end of file