1
0
Fork 0
mirror of https://github.com/Acamaeda/The-Modding-Tree.git synced 2024-11-27 18:41:57 +00:00

Alpha Build 4

This commit is contained in:
Jacorb90 2020-08-20 00:55:26 -04:00
parent 96bfd75af4
commit 2fb95d1aed
3 changed files with 107 additions and 18 deletions

View file

@ -12,8 +12,25 @@
<div id="app"> <div id="app">
<div id="info" v-if="player.tab=='tree'" onclick="showTab('info')"><br>i</div> <div id="info" v-if="player.tab=='tree'" onclick="showTab('info')"><br>i</div>
<div class="vl"></div> <div class="vl"></div>
<div v-if="player.tab=='changelog'" class="col right">
<button class="back" onclick="showTab('tree')"></button><br><br>
<h3>Pre-Alpha Build 4</h3>
<ul>
<li>Implemented/balanced all row 1 & 2 prestige layers</li>
<li>Added the options/info menus</li>
<li>Balanced the row 3 prestige layers up to 1e560 points</li>
</ul><br><br>
<h3>Alpha Build 4</h3>
<ul>
<li>Implemented Auto-Boosters & Auto-Generators</li>
<li>Fixed a balancing issue with a certain prestige tree path (1e660 -> 1e600)</li>
<li>Added changelog</li>
<li>Balanced up to 1e700 with all prestige tree paths</li>
</ul><br><br>
</div>
<div v-if="player.tab=='info'" class="col right"> <div v-if="player.tab=='info'" class="col right">
<button class="back" onclick="showTab('tree')"></button><br><br><br><br><br> <button class="back" onclick="showTab('tree')"></button><br><br><br><br><br>
<div id="cl" onclick="showTab('changelog')">Changelog</div><br><br><br>
<h3>Hotkeys</h3><br><br> <h3>Hotkeys</h3><br><br>
P: Prestige reset<br> P: Prestige reset<br>
<span v-if="player.b.unl">B: Booster reset</span><br> <span v-if="player.b.unl">B: Booster reset</span><br>
@ -92,6 +109,7 @@
<table><tr><td v-bind:class="{ milestone: player.t.best.lt(2), milestoneDone: player.t.best.gte(2) }">2 time capsules<br>Keep Booster/Generator milestones on reset</td></tr> <table><tr><td v-bind:class="{ milestone: player.t.best.lt(2), milestoneDone: player.t.best.gte(2) }">2 time capsules<br>Keep Booster/Generator milestones on reset</td></tr>
<tr><td v-bind:class="{ milestone: player.t.best.lt(3), milestoneDone: player.t.best.gte(3) }">3 time capsules<br>Keep Prestige Upgrades on reset</td></tr> <tr><td v-bind:class="{ milestone: player.t.best.lt(3), milestoneDone: player.t.best.gte(3) }">3 time capsules<br>Keep Prestige Upgrades on reset</td></tr>
<tr><td v-bind:class="{ milestone: player.t.best.lt(4), milestoneDone: player.t.best.gte(4) }">4 time capsules<br>Keep Booster Upgrades on all row 3 resets</td></tr> <tr><td v-bind:class="{ milestone: player.t.best.lt(4), milestoneDone: player.t.best.gte(4) }">4 time capsules<br>Keep Booster Upgrades on all row 3 resets</td></tr>
<tr><td v-bind:class="{ milestone: player.t.best.lt(5), milestoneDone: player.t.best.gte(5) }">5 time capsules<br>Automatically purchase Boosters&nbsp;&nbsp;&nbsp;<button v-if="player.t.best.gte(5)" class="smallUpg can b" onclick="toggleAuto('b')">{{player.b.auto?"ON":"OFF"}}</button></td></tr>
</table><br><br> </table><br><br>
<button v-bind:class="{ upgBig: true, can: (player.b.points.gte(getExtCapsuleCost())&&player.t.unl), locked: (player.b.points.lt(getExtCapsuleCost())||!player.t.unl), t: true }" onclick="buyExtCapsule()">Buy an extra Time Capsule<br>Cost: {{formatWhole(getExtCapsuleCost())}} Boosters<br>Amount: {{formatWhole(player.t.extCapsules)}}</button> <button v-bind:class="{ upgBig: true, can: (player.b.points.gte(getExtCapsuleCost())&&player.t.unl), locked: (player.b.points.lt(getExtCapsuleCost())||!player.t.unl), t: true }" onclick="buyExtCapsule()">Buy an extra Time Capsule<br>Cost: {{formatWhole(getExtCapsuleCost())}} Boosters<br>Amount: {{formatWhole(player.t.extCapsules)}}</button>
</div> </div>
@ -100,6 +118,7 @@
<table><tr><td v-bind:class="{ milestone: player.s.best.lt(2), milestoneDone: player.s.best.gte(2) }">2 space energy<br>Keep Booster/Generator milestones on reset</td></tr> <table><tr><td v-bind:class="{ milestone: player.s.best.lt(2), milestoneDone: player.s.best.gte(2) }">2 space energy<br>Keep Booster/Generator milestones on reset</td></tr>
<tr><td v-bind:class="{ milestone: player.s.best.lt(3), milestoneDone: player.s.best.gte(3) }">3 space energy<br>Keep Prestige Upgrades on reset</td></tr> <tr><td v-bind:class="{ milestone: player.s.best.lt(3), milestoneDone: player.s.best.gte(3) }">3 space energy<br>Keep Prestige Upgrades on reset</td></tr>
<tr><td v-bind:class="{ milestone: player.s.best.lt(4), milestoneDone: player.s.best.gte(4) }">4 space energy<br>Keep Generator Upgrades on all row 3 resets</td></tr> <tr><td v-bind:class="{ milestone: player.s.best.lt(4), milestoneDone: player.s.best.gte(4) }">4 space energy<br>Keep Generator Upgrades on all row 3 resets</td></tr>
<tr><td v-bind:class="{ milestone: player.s.best.lt(5), milestoneDone: player.s.best.gte(5) }">5 space energy<br>Automatically purchase Generators&nbsp;&nbsp;&nbsp;<button v-if="player.s.best.gte(5)" class="smallUpg can g" onclick="toggleAuto('g')">{{player.g.auto?"ON":"OFF"}}</button></td></tr>
</table><br><br> </table><br><br>
<button onclick="respecSpaceBuildings()" v-bind:class="{ longUpg: true, can: player.s.unl, locked: !player.s.unl }">Respec Space Buildings</button><br> <button onclick="respecSpaceBuildings()" v-bind:class="{ longUpg: true, can: player.s.unl, locked: !player.s.unl }">Respec Space Buildings</button><br>
<table><tr> <table><tr>

View file

@ -18,6 +18,7 @@ function getStartPlayer() {
points: new Decimal(0), points: new Decimal(0),
best: new Decimal(0), best: new Decimal(0),
upgrades: [], upgrades: [],
auto: false,
}, },
g: { g: {
unl: false, unl: false,
@ -25,6 +26,7 @@ function getStartPlayer() {
power: new Decimal(0), power: new Decimal(0),
best: new Decimal(0), best: new Decimal(0),
upgrades: [], upgrades: [],
auto: false,
}, },
e: { e: {
unl: false, unl: false,
@ -123,7 +125,7 @@ const ROW_LAYERS = [
] ]
const LAYER_EFFS = { const LAYER_EFFS = {
b: function() { return Decimal.pow(Decimal.add(2, addToBoosterBase()), player.b.points) }, b: function() { return Decimal.pow(Decimal.add(2, addToBoosterBase()), player.b.points.plus(getFreeBoosters())) },
g: function() { return Decimal.pow(Decimal.add(2, addToGenBase()), player.g.points).sub(1).times(getGenPowerGainMult()) }, g: function() { return Decimal.pow(Decimal.add(2, addToGenBase()), player.g.points).sub(1).times(getGenPowerGainMult()) },
t: function() { return { t: function() { return {
gain: Decimal.pow(3, player.t.points.plus(player.t.extCapsules.plus(getFreeExtCapsules()))).sub(1).times(getTimeEnergyGainMult()), gain: Decimal.pow(3, player.t.points.plus(player.t.extCapsules.plus(getFreeExtCapsules()))).sub(1).times(getTimeEnergyGainMult()),
@ -296,19 +298,23 @@ const LAYER_UPGS = {
}, },
e: { e: {
rows: 1, rows: 1,
cols: 3, cols: 5,
11: { 11: {
desc: "Boosters & Generators boost each other.", desc: "Boosters & Generators boost each other.",
cost: new Decimal(40), cost: new Decimal(40),
unl: function() { return player.e.unl }, unl: function() { return player.e.unl },
currently: function() { return {g: player.b.points.plus(1).log10(), b: player.g.points.plus(1).log10()} }, currently: function() {
let exp = 1
if (player.e.upgrades.includes(14)) exp = 1.5
return {g: player.b.points.plus(1).log10().pow(exp), b: player.g.points.plus(1).log10().pow(exp)}
},
effDisp: function(x) { return "+"+format(x.g)+" to Generator base, +"+format(x.b)+" to Booster base" }, effDisp: function(x) { return "+"+format(x.g)+" to Generator base, +"+format(x.b)+" to Booster base" },
}, },
12: { 12: {
desc: "Unspent Enhance Points boost Prestige Point gain.", desc: "Unspent Enhance Points boost Prestige Point gain.",
cost: new Decimal(150), cost: new Decimal(150),
unl: function() { return player.e.unl&&player.e.best.gte(40) }, unl: function() { return player.e.unl&&player.e.best.gte(40) },
currently: function() { return player.e.points.plus(1).pow(1.5) }, currently: function() { return player.e.points.plus(1).pow(player.e.upgrades.includes(15)?3.25:1.5) },
effDisp: function(x) { return format(x)+"x" }, effDisp: function(x) { return format(x)+"x" },
}, },
13: { 13: {
@ -316,6 +322,16 @@ const LAYER_UPGS = {
cost: new Decimal(1000), cost: new Decimal(1000),
unl: function() { return player.e.upgrades.includes(11)||player.e.upgrades.includes(12) }, unl: function() { return player.e.upgrades.includes(11)||player.e.upgrades.includes(12) },
}, },
14: {
desc: "Enhance Upgrade 1 uses a better formula.",
cost: new Decimal(5e7),
unl: function() { return player.e.upgrades.includes(13)&&(player.t.unl||player.s.unl) },
},
15: {
desc: "Enhance Upgrade 2 uses a better formula.",
cost: new Decimal(2e10),
unl: function() { return player.e.upgrades.includes(14)&&(player.t.unl||player.s.unl)&&player.e.best.gte(1e9) },
},
}, },
t: { t: {
rows: 2, rows: 2,
@ -357,7 +373,7 @@ const LAYER_UPGS = {
desc: "Time Energy production & limit are boosted by your Enhance Points.", desc: "Time Energy production & limit are boosted by your Enhance Points.",
cost: new Decimal(5), cost: new Decimal(5),
unl: function() { return player.t.upgrades.includes(14)&&player.e.unl }, unl: function() { return player.t.upgrades.includes(14)&&player.e.unl },
currently: function() { return player.e.points.plus(1).pow(0.8) }, currently: function() { return player.e.points.plus(1).pow(0.8/(1+player.t.order)) },
effDisp: function(x) { return format(x)+"x" }, effDisp: function(x) { return format(x)+"x" },
}, },
23: { 23: {
@ -368,9 +384,9 @@ const LAYER_UPGS = {
effDisp: function(x) { return format(x)+"x" }, effDisp: function(x) { return format(x)+"x" },
}, },
24: { 24: {
desc: "???", desc: "Get 18 free boosters added to their effect.",
cost: new Decimal(1/0), cost: new Decimal(7),
unl: function() { return false }, unl: function() { return player.t.upgrades.includes(21)&&player.t.best.gte(5) },
}, },
}, },
s: { s: {
@ -408,19 +424,23 @@ const LAYER_UPGS = {
effDisp: function(x) { return format(x.sub(1).times(100))+"% stronger" }, effDisp: function(x) { return format(x.sub(1).times(100))+"% stronger" },
}, },
22: { 22: {
desc: "???", desc: "Space Buildings are stronger based on your Time Energy.",
cost: new Decimal(1/0), cost: new Decimal(6),
unl: function() { return false }, unl: function() { return player.s.upgrades.includes(14)&&player.t.unl },
currently: function() { return player.t.energy.plus(1).log10().plus(1).log10().div(5).plus(1) },
effDisp: function(x) { return format(x.sub(1).times(100))+"% stronger" },
}, },
23: { 23: {
desc: "???", desc: "Space Buildings are stronger based on your Enhancers.",
cost: new Decimal(1/0), cost: new Decimal(5),
unl: function() { return false }, unl: function() { return player.s.upgrades.includes(14)&&player.e.unl },
currently: function() { return player.e.enhancers.sqrt().div((player.s.order==0)?5:7).plus(1) },
effDisp: function(x) { return format(x.sub(1).times(100))+"% stronger" },
}, },
24: { 24: {
desc: "???", desc: "Space Building costs scale half as fast, and you have 3 more Space.",
cost: new Decimal(1/0), cost: new Decimal(7),
unl: function() { return false }, unl: function() { return player.s.upgrades.includes(21)&&(player.t.unl||player.e.unl) },
}, },
}, },
} }
@ -429,6 +449,7 @@ const TAB_REQS = {
tree: function() { return true }, tree: function() { return true },
options: function() { return true }, options: function() { return true },
info: function() { return true }, info: function() { return true },
changelog: function() { return true },
p: function() { return (player.p.unl||player.points.gte(getLayerReq('p')))&&layerUnl('p') }, p: function() { return (player.p.unl||player.points.gte(getLayerReq('p')))&&layerUnl('p') },
b: function() { return (player.b.unl||player.points.gte(getLayerReq('b')))&&layerUnl('b') }, b: function() { return (player.b.unl||player.points.gte(getLayerReq('b')))&&layerUnl('b') },
g: function() { return (player.g.unl||player.points.gte(getLayerReq('g')))&&layerUnl('g') }, g: function() { return (player.g.unl||player.points.gte(getLayerReq('g')))&&layerUnl('g') },
@ -496,7 +517,9 @@ function checkForVars() {
if (player.g===undefined) player.g = getStartPlayer().g if (player.g===undefined) player.g = getStartPlayer().g
if (player.p.best===undefined) player.p.best = player.p.points if (player.p.best===undefined) player.p.best = player.p.points
if (player.b.best===undefined) player.b.best = player.b.points if (player.b.best===undefined) player.b.best = player.b.points
if (player.b.auto===undefined) player.b.auto = false
if (player.g.best===undefined) player.g.best = player.g.points if (player.g.best===undefined) player.g.best = player.g.points
if (player.g.auto===undefined) player.g.auto = false
if (player.e === undefined) player.e = getStartPlayer().e if (player.e === undefined) player.e = getStartPlayer().e
if (player.e.order === undefined) player.e.order = 0 if (player.e.order === undefined) player.e.order = 0
if (player.t === undefined) player.t = getStartPlayer().t if (player.t === undefined) player.t = getStartPlayer().t
@ -780,6 +803,12 @@ function addToBoosterBase() {
return toAdd return toAdd
} }
function getFreeBoosters() {
let free = new Decimal(0)
if (player.t.upgrades.includes(24)) free = free.plus(18)
return free
}
function addToGenBase() { function addToGenBase() {
let toAdd = new Decimal(0) let toAdd = new Decimal(0)
if (player.g.upgrades.includes(12)) toAdd = toAdd.plus(LAYER_UPGS.g[12].currently()) if (player.g.upgrades.includes(12)) toAdd = toAdd.plus(LAYER_UPGS.g[12].currently())
@ -892,13 +921,20 @@ function buyExtCapsule() {
function getSpace() { function getSpace() {
let baseSpace = player.s.best.pow(1.1).times(3).floor() let baseSpace = player.s.best.pow(1.1).times(3).floor()
if (player.s.upgrades.includes(13)) baseSpace = baseSpace.plus(2); if (player.s.upgrades.includes(13)) baseSpace = baseSpace.plus(2);
if (player.s.upgrades.includes(24)) baseSpace = baseSpace.plus(3);
return baseSpace.sub(player.s.spent) return baseSpace.sub(player.s.spent)
} }
function getSpaceBuildingCostMod() {
let mod = new Decimal(1)
if (player.s.upgrades.includes(24)) mod = new Decimal(0.5)
return mod;
}
function getSpaceBuildingCost(x) { function getSpaceBuildingCost(x) {
let inputVal = new Decimal([1e3,1e10,1e25,1e48][x-1]) let inputVal = new Decimal([1e3,1e10,1e25,1e48][x-1])
let bought = player.s.buildings[x] let bought = player.s.buildings[x]
let cost = Decimal.pow(inputVal, bought.pow(1.35)).times(inputVal).times((bought.gt(0)||x>1)?1:0) let cost = Decimal.pow(inputVal, bought.times(getSpaceBuildingCostMod()).pow(1.35)).times(inputVal).times((bought.gt(0)||x>1)?1:0)
return cost return cost
} }
@ -906,6 +942,8 @@ function getSpaceBuildingPow() {
if (!player.s.unl) return new Decimal(0) if (!player.s.unl) return new Decimal(0)
let pow = new Decimal(1) let pow = new Decimal(1)
if (player.s.upgrades.includes(21)) pow = pow.times(LAYER_UPGS.s[21].currently()) if (player.s.upgrades.includes(21)) pow = pow.times(LAYER_UPGS.s[21].currently())
if (player.s.upgrades.includes(22)) pow = pow.times(LAYER_UPGS.s[22].currently())
if (player.s.upgrades.includes(23)) pow = pow.times(LAYER_UPGS.s[23].currently())
return pow return pow
} }
@ -980,6 +1018,11 @@ function getSpaceBuildingsUnl() {
return x; return x;
} }
function toggleAuto(layer) {
if (player[layer].auto===undefined) return;
player[layer].auto = !player[layer].auto
}
function gameLoop(diff) { function gameLoop(diff) {
if (player.p.upgrades.includes(11)) player.points = player.points.plus(getPointGen().times(diff)) if (player.p.upgrades.includes(11)) player.points = player.points.plus(getPointGen().times(diff))
if (player.g.unl) player.g.power = player.g.power.plus(LAYER_EFFS.g().times(diff)) if (player.g.unl) player.g.power = player.g.power.plus(LAYER_EFFS.g().times(diff))
@ -988,6 +1031,8 @@ function gameLoop(diff) {
let data = LAYER_EFFS.t() let data = LAYER_EFFS.t()
player.t.energy = player.t.energy.plus(data.gain.times(diff)).min(data.limit) player.t.energy = player.t.energy.plus(data.gain.times(diff)).min(data.limit)
} }
if (player.b.auto&&player.t.best.gte(5)) doReset("b")
if (player.g.auto&&player.s.best.gte(5)) doReset("g")
} }
function hardReset() { function hardReset() {

View file

@ -100,6 +100,13 @@ h1, h2 {
font-size: 10px; font-size: 10px;
} }
.smallUpg {
height: 40px;
width: 40px;
border-radius: 25%;
border-color: black;
}
.p { .p {
background-color: #439ea3; background-color: #439ea3;
color: black; color: black;
@ -192,6 +199,20 @@ h1, h2 {
-3px 0px 12px #02f2f2; -3px 0px 12px #02f2f2;
} }
#cl {
font-size: 20px;
color: white;
cursor: pointer;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #02f2f2;
}
#cl:hover {
transform: scale(1.2, 1.2);
text-shadow: 5px 0px 10px #02f2f2,
-3px 0px 12px #02f2f2;
}
.opt { .opt {
height: 100px; height: 100px;
width: 100px; width: 100px;
@ -278,6 +299,10 @@ h1, h2 {
top: 0; top: 0;
} }
ul {
list-style-type: none;
}
[tooltip] { [tooltip] {
position: relative; position: relative;
z-index: 2; z-index: 2;