mirror of
https://github.com/Acamaeda/The-Modding-Tree.git
synced 2024-11-22 00:21:32 +00:00
365 lines
No EOL
30 KiB
HTML
365 lines
No EOL
30 KiB
HTML
<!DOCTYPE html>
|
|
<head>
|
|
<title>The Prestige Tree</title>
|
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
|
|
<script type="text/javascript" src="js/break_eternity.js"></script>
|
|
<script type="text/javascript" src="js/temp.js"></script>
|
|
<script type="text/javascript" src="js/saves.js"></script>
|
|
<script type="text/javascript" src="js/game.js"></script>
|
|
<script type="text/javascript" src="js/v.js"></script>
|
|
<script type="text/javascript" src="js/canvas.js"></script>
|
|
</head>
|
|
<body onload="load()">
|
|
<div id="app">
|
|
<div id="info" v-if="player.tab=='tree'" onclick="showTab('info')"><br>i</div>
|
|
<div class="vl"></div>
|
|
<div v-if="player.tab=='changelog'" class="col right">
|
|
<button class="back" onclick="showTab('tree')">←</button><br><br>
|
|
<h3>Beta v1.1 Alpha 16</h3>
|
|
<ul>
|
|
<li>Added a new Hindrance (h9)</li>
|
|
<li>Added a new Hyper-Booster milestone</li>
|
|
<li>Made the Space Building automation prioritize the rightmost buildings first</li>
|
|
<li>Balanced up to 1e690,000 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 15</h3>
|
|
<ul>
|
|
<li>Balanced up to 1e635,000 Points (don't worry, the crazy inflation stops here)</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 14</h3>
|
|
<ul>
|
|
<li>Implemented the fourth row 4 layer unlock</li>
|
|
<li>Balanced up to 1e240,000-1e250,000 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 13</h3>
|
|
<ul>
|
|
<li>Implemented Subspace & Hyper-Booster resets</li>
|
|
<li>Balanced up to 1e100,000 Points in either path</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 12</h3>
|
|
<ul>
|
|
<li>Balanced up to 1e20 Hindrance Spirit, 2e21 Quirks, and 1e72,000 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 11</h3>
|
|
<ul>
|
|
<li>Added a new Quirk Milestone</li>
|
|
<li>Balanced up to 1e15 Hindrance Spirit, 1e16 Quirks, and 1e42,500 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 10</h3>
|
|
<ul>
|
|
<li>Balanced up to 2e13 Hindrance Spirit & Quirks, and 1e31,000 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 9</h3>
|
|
<ul>
|
|
<li>Added a new option</li>
|
|
<li>Balanced up to 2e10 Hindrance Spirit & Quirks, and 1e27,500 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 8</h3>
|
|
<ul>
|
|
<li>Several bugfixes</li>
|
|
<li>Balanced up to 1e9 Hindrance Spirit & Quirks, and 1e25,750 Points</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 7</h3>
|
|
<ul>
|
|
<li>Reversed the order of the changelog</li>
|
|
<li>Added the fourth Hindrance</li>
|
|
<li>Balanced up to 50,000 Hindrance Spirit & Quirks</li>
|
|
</ul><br>
|
|
<h3>Beta v1.1 Alpha 6</h3>
|
|
<ul>
|
|
<li>Various bugfixes</li>
|
|
<li>Added the third Hindrance</li>
|
|
<li>Balanced up to 2,500 Hindrance Spirit & Quirks</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.1 Alpha 5</h3>
|
|
<ul>
|
|
<li>Add the second Hindrance</li>
|
|
<li>Balanced up to 200 Hindrance Spirit & Quirks</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.1 Alpha 4</h3>
|
|
<ul>
|
|
<li>Add the first Hindrance</li>
|
|
<li>Implemented some new milestones</li>
|
|
<li>Balanced up to 60 Hindrance Spirit & Quirks</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.1 Alpha 3</h3>
|
|
<ul>
|
|
<li>Fixed corruption bug</li>
|
|
<li>Implemented some new milestones</li>
|
|
<li>Balanced up to 15 Hindrance Spirit & 15 Quirks</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.1 Alpha 2</h3>
|
|
<ul>
|
|
<li>Implemented some new milestones</li>
|
|
<li>Balanced up to 5 Hindrance Spirit & 5 Quirks</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.1 Alpha 1</h3>
|
|
<ul>
|
|
<li>Add the framework for the first two row 4 layers</li>
|
|
<li>Balanced up to the second row 4 reset</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.01</h3>
|
|
<ul>
|
|
<li>Display Generator Power in the Space tab</li>
|
|
<li>Add a credits page in the info tab</li>
|
|
<li>Implemented a few minor QoL/visual fixes</li>
|
|
</ul><br><br>
|
|
<h3>Beta v1.0</h3>
|
|
<ul>
|
|
<li>Made sure any built-in saves had Auto-Save turned on</li>
|
|
<li>Fixed a visual bug for mobile users</li>
|
|
<li>Added a "time played" display in the info tab</li>
|
|
<li>Implemented a NaN check system</li>
|
|
</ul><br><br>
|
|
<h3>Alpha Build 10</h3>
|
|
<ul>
|
|
<li>Rebalanced the Super-Booster era (now up to 1e9,250 points)</li>
|
|
<li>Implemented a game version variable</li>
|
|
</ul><br><br>
|
|
<h3>Alpha Build 9</h3>
|
|
<ul>
|
|
<li>Fixed a visual bug with the Prestige Tree branches</li>
|
|
<li>Added a hotkey for Super-Boosters</li>
|
|
<li>Added a new Super-Booster milestone</li>
|
|
<li>Fixed a bug with hotkeys</li>
|
|
<li>Balanced up to 1e46,500 points</li>
|
|
</ul><br><br>
|
|
<h3>Alpha Build 8</h3>
|
|
<ul>
|
|
<li>Implemented Super-Boosters</li>
|
|
<li>Balanced up to 1e25,600 points</li>
|
|
</ul><br><br>
|
|
<h3>Alpha Build 7</h3>
|
|
<ul>
|
|
<li>Made the new upgrades from Alpha Build 6 shown at proper times</li>
|
|
<li>Balanced up to 1e4,175 points</li>
|
|
<li>Setup a temp variable system (to prevent lag later on)</li>
|
|
</ul><br><br>
|
|
<h3>Alpha Build 6</h3>
|
|
<ul>
|
|
<li>Made font work for Mac users</li>
|
|
<li>Added 1 new Space & Time milestone each</li>
|
|
<li>Balanced up to 1e3,375 points</li>
|
|
</ul><br><br>
|
|
<h3>Alpha Build 5</h3>
|
|
<ul>
|
|
<li>Balanced up to 1e920 with all prestige tree paths (before unlocking third row 3 layer)</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>
|
|
<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>
|
|
</div>
|
|
<div v-if="player.tab=='credits'" class="col right">
|
|
<button class="back" onclick="showTab('tree')">←</button><br><br><br><br><br>
|
|
This game uses <a href="https://github.com/Patashu/break_eternity.js/tree/master" target="_blank">break_eternity.js</a> by Patashu.<br>
|
|
Made by Jacorb<br>
|
|
Idea by papyrus (on discord)<br>
|
|
Note: If anyone wishes to make a mod of this game, that is perfectly fine with me, just make sure to name it something different (ex: Prestige Tree NG+) and to let me know on <a href="https://discord.gg/wwQfgPa" target="_blank">my discord</a>.
|
|
</div>
|
|
<div v-if="player.tab=='info'" class="col right">
|
|
<button class="back" onclick="showTab('tree')">←</button><br><br><br><br><br>
|
|
Time Played: {{ formatTime(player.timePlayed) }}<br><br><br>
|
|
<div id="cl" onclick="showTab('credits')">Credits</div><br>
|
|
<div id="cl" onclick="showTab('changelog')">Changelog</div><br><br><br>
|
|
<h3>Hotkeys</h3><br><br>
|
|
P: Prestige reset<br>
|
|
<span v-if="player.b.unl">B: Booster reset</span><br>
|
|
<span v-if="player.g.unl">G: Generator reset</span><br>
|
|
<span v-if="player.t.unl">T: Time reset</span><br>
|
|
<span v-if="player.e.unl">E: Enhance reset</span><br>
|
|
<span v-if="player.s.unl">S: Space reset</span><br>
|
|
<span v-if="player.sb.unl">Shift+B: Super-Booster reset</span><br>
|
|
<span v-if="player.h.unl">H: Hindrance reset</span><br>
|
|
<span v-if="player.q.unl">Q: Quirk reset</span><br>
|
|
<span v-if="player.hb.unl">Ctrl+B: Hyper-Booster reset</span><br>
|
|
<span v-if="player.ss.unl">Shift+S: Subspace reset</span><br>
|
|
</div>
|
|
<div v-if="player.tab=='options'" class="col right">
|
|
<button class="back" onclick="showTab('tree')">←</button><br><br><br><br><br>
|
|
<table>
|
|
<tr>
|
|
<td><button class="opt" onclick="save()">Save</button></td>
|
|
<td><button class="opt" onclick="hardReset()">HARD RESET</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td><button class="opt" onclick="exportSave()">Export</button></td>
|
|
<td><button class="opt" onclick="importSave()">Import</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td><button class="opt" onclick="toggleOpt('autosave')">Autosave: {{ player.autosave?"ON":"OFF" }}</button></td>
|
|
<td><button class="opt" onclick="adjustMSDisp()">Show Milestones: {{ player.msDisplay.toUpperCase() }}</button></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div id="treeTab" onscroll="resizeCanvas()" class="col left">
|
|
<img id="optionWheel" v-if="player.tab!='options'" src="options_wheel.png" onclick="showTab('options')"></img>
|
|
<br>You have <h2>{{format(player.points)}}</h2> Points
|
|
<br><br><br><br><br>
|
|
<table>
|
|
<tr>
|
|
<td id="p"><button onclick="showTab('p')" v-bind:tooltip="(player.points.gte(tmp.layerReqs.p)||player.p.unl) ? (formatWhole(player.p.points)+' prestige points') : ('Reach '+format(tmp.layerReqs.p)+' points to unlock')" v-bind:class="{ treeNode: true, p: true, locked: (player.points.lt(tmp.layerReqs.p)&&!player.p.unl), can: (player.points.gte(tmp.layerReqs.p)||player.p.unl) }">P</button></td>
|
|
</tr>
|
|
</table><table>
|
|
<tr>
|
|
<td><button class="treeNode hidden"></button></td>
|
|
</tr>
|
|
</table><table>
|
|
<tr>
|
|
<td v-if="player.b.unl||player.g.unl" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(1)"></img></td>
|
|
<td id="b" v-if="layerUnl('b')"><button onclick="showTab('b')" v-bind:tooltip="((player.points.gte(tmp.layerReqs.b)||player.b.unl)&&layerUnl('b')) ? (formatWhole(player.b.points)+' boosters') : ('Reach '+format(tmp.layerReqs.b)+' points to unlock')" v-bind:class="{ treeNode: true, b: true, locked: (player.points.lt(tmp.layerReqs.b)&&!player.b.unl), can: (player.points.gte(tmp.layerReqs.b)||player.b.unl) }">B</button></td>
|
|
<td id="g" v-if="layerUnl('g')"><button onclick="showTab('g')" v-bind:tooltip="((player.points.gte(tmp.layerReqs.g)||player.g.unl)&&layerUnl('g')) ? (formatWhole(player.g.points)+' generators') : ('Reach '+format(tmp.layerReqs.g)+' points to unlock')" v-bind:class="{ treeNode: true, g: true, locked: (player.points.lt(tmp.layerReqs.g)&&!player.g.unl), can: (player.points.gte(tmp.layerReqs.g)||player.g.unl) }">G</button></td>
|
|
</tr>
|
|
</table><table>
|
|
<tr>
|
|
<td><button class="treeNode hidden"></button></td>
|
|
</tr>
|
|
</table><table>
|
|
<tr>
|
|
<td v-if="player.e.unl||player.t.unl||player.s.unl||player.sb.unl" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(2)"></img></td>
|
|
<td id="sb" v-if="layerUnl('sb')"><button onclick="showTab('sb')" v-bind:tooltip="((player.b.points.gte(tmp.layerReqs.sb)||player.sb.unl)&&layerUnl('sb')) ? (formatWhole(player.sb.points)+' super-boosters') : ('Reach '+formatWhole(tmp.layerReqs.sb)+' boosters to unlock')" v-bind:class="{ treeNode: true, sb: true, locked: (player.b.points.lt(tmp.layerReqs.sb)&&!player.sb.unl), can: (player.b.points.gte(tmp.layerReqs.sb)||player.sb.unl) }">SB</button></td>
|
|
<td id="t" v-if="layerUnl('t')"><button onclick="showTab('t')" v-bind:tooltip="((player.points.gte(tmp.layerReqs.t)||player.t.unl)&&layerUnl('t')) ? (formatWhole(player.t.points)+' time capsules') : ('Reach '+format(tmp.layerReqs.t)+' points to unlock')" v-bind:class="{ treeNode: true, t: true, locked: (player.points.lt(tmp.layerReqs.t)&&!player.t.unl), can: (player.points.gte(tmp.layerReqs.t)||player.t.unl) }">T</button></td>
|
|
<td id="e" v-if="layerUnl('e')"><button onclick="showTab('e')" v-bind:tooltip="((player.points.gte(tmp.layerReqs.e)||player.e.unl)&&layerUnl('e')) ? (formatWhole(player.e.points)+' enhance points') : ('Reach '+format(tmp.layerReqs.e)+' points to unlock')" v-bind:class="{ treeNode: true, e: true, locked: (player.points.lt(tmp.layerReqs.e)&&!player.e.unl), can: (player.points.gte(tmp.layerReqs.e)||player.e.unl) }">E</button></td>
|
|
<td id="s" v-if="layerUnl('s')"><button onclick="showTab('s')" v-bind:tooltip="((player.points.gte(tmp.layerReqs.s)||player.s.unl)&&layerUnl('s')) ? (formatWhole(player.s.points)+' space energy') : ('Reach '+format(tmp.layerReqs.s)+' points to unlock')" v-bind:class="{ treeNode: true, s: true, locked: (player.points.lt(tmp.layerReqs.s)&&!player.s.unl), can: (player.points.gte(tmp.layerReqs.s)||player.s.unl) }">S</button></td>
|
|
</tr>
|
|
</table><table>
|
|
<tr>
|
|
<td><button class="treeNode hidden"></button></td>
|
|
</tr>
|
|
</table><table>
|
|
<tr>
|
|
<td v-if="player.h.unl||player.q.unl" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(3)"></img></td>
|
|
<td id="hb" v-if="layerUnl('hb')"><button onclick="showTab('hb')" v-bind:tooltip="((player.sb.points.gte(tmp.layerReqs.hb)||player.hb.unl)&&layerUnl('hb')) ? (formatWhole(player.hb.points)+' hyper-boosters') : ('Reach '+formatWhole(tmp.layerReqs.hb)+' super-boosters to unlock')" v-bind:class="{ treeNode: true, hb: true, locked: (player.sb.points.lt(tmp.layerReqs.hb)&&!player.hb.unl), can: (player.sb.points.gte(tmp.layerReqs.hb)||player.hb.unl) }">HB</button></td>
|
|
<td id="h" v-if="layerUnl('h')"><button onclick="showTab('h')" v-bind:tooltip="((player.t.energy.gte(tmp.layerReqs.h)||player.h.unl)&&layerUnl('h')) ? (formatWhole(player.h.points)+' hindrance spirit') : ('Reach '+format(tmp.layerReqs.h)+' time energy to unlock')" v-bind:class="{ treeNode: true, h: true, locked: (player.t.energy.lt(tmp.layerReqs.h)&&!player.h.unl), can: (player.t.energy.gte(tmp.layerReqs.h)||player.h.unl) }">H</button></td>
|
|
<td id="q" v-if="layerUnl('q')"><button onclick="showTab('q')" v-bind:tooltip="((player.g.power.gte(tmp.layerReqs.q)||player.q.unl)&&layerUnl('q')) ? (formatWhole(player.q.points)+' quirks') : ('Reach '+format(tmp.layerReqs.q)+' generator power to unlock')" v-bind:class="{ treeNode: true, q: true, locked: (player.g.power.lt(tmp.layerReqs.q)&&!player.q.unl), can: (player.g.power.gte(tmp.layerReqs.q)||player.q.unl) }">Q</button></td>
|
|
<td id="ss" v-if="layerUnl('ss')"><button onclick="showTab('ss')" v-bind:tooltip="((player.s.points.gte(tmp.layerReqs.ss)||player.ss.unl)&&layerUnl('ss')) ? (formatWhole(player.ss.points)+' subspace energy') : ('Reach '+format(tmp.layerReqs.ss)+' space energy to unlock')" v-bind:class="{ treeNode: true, ss: true, locked: (player.s.points.lt(tmp.layerReqs.ss)&&!player.ss.unl), can: (player.s.points.gte(tmp.layerReqs.ss)||player.ss.unl) }">SS</button></td>
|
|
</tr>
|
|
</table>
|
|
<canvas id="treeCanvas" class="canvas"></canvas>
|
|
</div>
|
|
<div v-for="layer in LAYERS">
|
|
<div v-if="player.tab==layer" class="col right">
|
|
<button class="back" onclick="showTab('tree')">←</button><br><br><br>
|
|
You have <h2 v-bind:class="{ [layer+'_txt']: true }">{{formatWhole(player[layer].points)}}</h2> {{LAYER_RES[layer]}}<span v-if="Object.keys(LAYER_EFFS).includes(layer)">, {{getLayerEffDesc(layer)}}</span>
|
|
<br><br>
|
|
<div v-if="layer=='b'">
|
|
<table><tr><td v-if="milestoneShown(player.b.best.gte(8))" v-bind:class="{ milestone: player.b.best.lt(8)&&player.h.best.lt(1)&&player.q.best.lt(1), milestoneDone: player.b.best.gte(8)||player.h.best.gte(1)||player.q.best.gte(1) }">8 Boosters<br>Keep Prestige Upgrades on reset</td></tr>
|
|
<tr><td v-if="milestoneShown(player.b.best.gte(15))" v-bind:class="{ milestone: player.b.best.lt(15), milestoneDone: player.b.best.gte(15) }">15 Boosters<br>You can buy max Boosters</td></tr></table>
|
|
</div>
|
|
<div v-if="layer=='g'">
|
|
You have {{format(player.g.power)}} Generator Power, which multiplies Point gain by {{format(tmp.genPowEff)}}<br><br>
|
|
<table><tr><td v-if="milestoneShown(player.g.best.gte(8)||player.h.best.gte(1)||player.q.best.gte(1))" v-bind:class="{ milestone: player.g.best.lt(8)&&player.h.best.lt(1)&&player.q.best.lt(1), milestoneDone: player.g.best.gte(8)||player.h.best.gte(1)||player.q.best.gte(1) }">8 Generators<br>Keep Prestige Upgrades on reset</td></tr>
|
|
<tr><td v-if="milestoneShown(player.g.best.gte(10))" v-bind:class="{ milestone: player.g.best.lt(10), milestoneDone: player.g.best.gte(10) }">10 Generators<br>Gain 100% of Prestige Point gain every second</td></tr>
|
|
<tr><td v-if="milestoneShown(player.g.best.gte(15))" v-bind:class="{ milestone: player.g.best.lt(15), milestoneDone: player.g.best.gte(15) }">15 Generators<br>You can buy max Generators</td></tr></table>
|
|
</div>
|
|
<div v-if="layer=='e'">
|
|
<table><tr><td v-if="milestoneShown(player.e.best.gte(2))" v-bind:class="{ milestone: player.e.best.lt(2), milestoneDone: player.e.best.gte(2) }">2 enhance points<br>Keep Booster/Generator milestones on reset</td></tr>
|
|
<tr><td v-if="milestoneShown(player.e.best.gte(10)||player.h.best.gte(1)||player.q.best.gte(1))" v-bind:class="{ milestone: player.e.best.lt(10)&&player.h.best.lt(1)&&player.q.best.lt(1), milestoneDone: player.e.best.gte(10)||player.h.best.gte(1)||player.q.best.gte(1) }">10 enhance points<br>Keep Prestige Upgrades on reset</td></tr></table><br><br>
|
|
<button v-bind:class="{ upgBig: true, can: player.e.points.gte(getEnhancerCost()), locked: player.e.points.lt(getEnhancerCost()), e: true }" onclick="buyEnhancer()">Buy an Enhancer<br>Cost: {{formatWhole(getEnhancerCost())}} Enhance Points<br>Amount: {{formatWhole(player.e.enhancers)}}<br>Multiplies Prestige Point gain by {{format(tmp.enhEff)}}<br>Adds to base of Booster/Generator effects by {{format(tmp.enhEff2)}}</button>
|
|
</div>
|
|
<div v-if="layer=='t'">
|
|
You have {{format(player.t.energy)}} Time Energy, which multiplies Point gain & Prestige Point gain by {{format(tmp.timeEff)}}<br><br>
|
|
<table><tr><td v-if="milestoneShown(player.t.best.gte(2))" 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-if="milestoneShown(player.t.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1))" v-bind:class="{ milestone: player.t.best.lt(3)&&player.h.best.lt(1)&&player.q.best.lt(1), milestoneDone: player.t.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1) }">3 time capsules<br>Keep Prestige Upgrades on reset</td></tr>
|
|
<tr><td v-if="milestoneShown(player.t.best.gte(4))" 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-if="milestoneShown(player.t.best.gte(5), true)" v-bind:class="{ milestone: player.t.best.lt(5), milestoneDone: player.t.best.gte(5) }">5 time capsules<br>Automatically purchase Boosters <button v-if="player.t.best.gte(5)" class="smallUpg can b" onclick="toggleAuto('b')">{{player.b.auto?"ON":"OFF"}}</button></td></tr>
|
|
<tr><td v-if="milestoneShown(player.t.best.gte(12))" v-bind:class="{ milestone: player.t.best.lt(12), milestoneDone: player.t.best.gte(12) }">12 time capsules<br>Boosters reset nothing</td></tr>
|
|
</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>
|
|
</div>
|
|
<div v-if="layer=='s'">
|
|
You have {{formatWhole(getSpace())}} Space remaining for Space Buildings.<br><br>
|
|
<table><tr><td v-if="milestoneShown(player.s.best.gte(2))" 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-if="milestoneShown(player.s.best.gte(3)||player.h.best.gte(1)||player.h.best.gte(1))" v-bind:class="{ milestone: player.s.best.lt(3)&&player.h.best.lt(1)&&player.q.best.lt(1), milestoneDone: player.s.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1) }">3 space energy<br>Keep Prestige Upgrades on reset</td></tr>
|
|
<tr><td v-if="milestoneShown(player.s.best.gte(4))" 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-if="milestoneShown(player.s.best.gte(5), true)" v-bind:class="{ milestone: player.s.best.lt(5), milestoneDone: player.s.best.gte(5) }">5 space energy<br>Automatically purchase Generators <button v-if="player.s.best.gte(5)" class="smallUpg can g" onclick="toggleAuto('g')">{{player.g.auto?"ON":"OFF"}}</button></td></tr>
|
|
<tr><td v-if="milestoneShown(player.s.best.gte(12))" v-bind:class="{ milestone: player.s.best.lt(12), milestoneDone: player.s.best.gte(12) }">12 space energy<br>Generators reset nothing</td></tr>
|
|
</table><br><br>
|
|
You have {{ format(player.g.power) }} Generator Power<br><br>
|
|
<button onclick="respecSpaceBuildings()" v-bind:class="{ longUpg: true, can: player.s.unl, locked: !player.s.unl }">Respec Space Buildings</button><br>
|
|
<div class="upgRow">
|
|
<div v-for="id in 5">
|
|
<button v-if="tmp.sbUnl>=id" v-bind:class="{ upg: true, can: (player.g.power.gte(getSpaceBuildingCost(id))&&player.s.unl&&getSpace().gte(1)), locked: (!(player.g.power.gte(getSpaceBuildingCost(id))&&player.s.unl&&getSpace().gte(1))), s: true }" v-on:click="buyBuilding(id)">Building {{id}}<br>Level: {{formatWhole(player.s.buildings[id])}}<br>Cost: {{format(getSpaceBuildingCost(id))}} Generator Power<br>Effect: {{getSpaceBuildingEffDesc(id)}}</button><br><br>
|
|
<button v-if="tmp.sbUnl>=id&&player.q.best.gte(2500)" v-bind:class="{ longUpg: true, can: player.s.buildings[id].gte(1), locked: player.s.buildings[id].lt(1) }" v-on:click="destroyBuilding(id)">Destroy One</button><br>
|
|
<button v-if="tmp.sbUnl>=id&&player.q.best.gte(2500)" v-bind:class="{ longUpg: true, can: player.s.buildings[id].gte(1), locked: player.s.buildings[id].lt(1) }" v-on:click="destroyBuilding(id, true)">Destroy All</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="layer=='sb'">
|
|
<table><tr><td v-if="milestoneShown(player.sb.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1))" v-bind:class="{ milestone: player.sb.best.lt(3)&&player.h.best.lt(1)&&player.q.best.lt(1), milestoneDone: player.sb.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1) }">3 Super-Boosters<br>Keep Prestige Upgrades on reset</td></tr>
|
|
<tr><td v-if="milestoneShown(player.sb.best.gte(4))" v-bind:class="{ milestone: player.sb.best.lt(4), milestoneDone: player.sb.best.gte(4) }">4 Super-Boosters<br>Keep Booster/Generator milestones on reset</td></tr></table>
|
|
</div>
|
|
<div v-if="layer=='h'">
|
|
<table><tr><td v-if="milestoneShown(player.h.best.gte(1))" v-bind:class="{ milestone: player.h.best.lt(1), milestoneDone: player.h.best.gte(1) }">1 Hindrance Spirit<br>Keep Prestige Upgrades on all previous resets, and gain 100x more Enhance Points</td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(2))" v-bind:class="{ milestone: player.h.best.lt(2), milestoneDone: player.h.best.gte(2) }">2 Hindrance Spirit<br>Keep all third row milestones on all fourth row resets, and start with your best-ever Space</td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(4))" v-bind:class="{ milestone: player.h.best.lt(4), milestoneDone: player.h.best.gte(4) }">4 Hindrance Spirit<br>Keep Time, Enhance, and Space Upgrades on all fourth row resets</td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(5), true)" v-bind:class="{ milestone: player.h.best.lt(5), milestoneDone: player.h.best.gte(5) }">5 Hindrance Spirit<br>Automatically purchase Extra Time Capsules <button v-if="player.h.best.gte(5)" class="smallUpg can t" onclick="toggleAuto('t', 'Cap')">{{player.t.autoCap?"ON":"OFF"}}</button></td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(10))" v-bind:class="{ milestone: player.h.best.lt(10), milestoneDone: player.h.best.gte(10) }">10 Hindrance Spirit<br>Keep Prestige & Super-Booster Upgrades on all fourth row resets</td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(15), true)" v-bind:class="{ milestone: player.h.best.lt(15), milestoneDone: player.h.best.gte(15) }">15 Hindrance Spirit<br>Automatically purchase Super-Boosters <button v-if="player.h.best.gte(15)" class="smallUpg can sb" onclick="toggleAuto('sb')">{{player.sb.auto?"ON":"OFF"}}</button></td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(25))" v-bind:class="{ milestone: player.h.best.lt(25), milestoneDone: player.h.best.gte(25) }">25 Hindrance Spirit<br>Time resets reset nothing</td></tr>
|
|
<tr><td v-if="milestoneShown(player.h.best.gte(2500))" v-bind:class="{ milestone: player.h.best.lt(2500), milestoneDone: player.h.best.gte(2500) }">2,500 Hindrance Spirit<br>Super-Boosters reset nothing</td></tr>
|
|
</table>
|
|
</div>
|
|
<div v-if="layer=='q'">
|
|
You have {{format(player.q.energy)}} Quirk Energy (generated by Quirk Layers), which multiplies Point & Generator Power gain by {{format(tmp.quirkEff)}}<br><br>
|
|
<table><tr><td v-if="milestoneShown(player.q.best.gte(1))" v-bind:class="{ milestone: player.q.best.lt(1), milestoneDone: player.q.best.gte(1) }">1 Quirk<br>Keep Prestige Upgrades on all previous resets, and gain 100x more Enhance Points</td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(2))" v-bind:class="{ milestone: player.q.best.lt(2), milestoneDone: player.q.best.gte(2) }">2 Quirks<br>You can buy max Time Capsules & Space Energy</td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(4))" v-bind:class="{ milestone: player.q.best.lt(4), milestoneDone: player.q.best.gte(4) }">4 Quirks<br>Keep Space Buildings on all fourth row resets</td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(5), true)" v-bind:class="{ milestone: player.q.best.lt(5), milestoneDone: player.q.best.gte(5) }">5 Quirks<br>Automatically purchase Enhancers <button v-if="player.q.best.gte(5)" class="smallUpg can e" onclick="toggleAuto('e')">{{player.e.auto?"ON":"OFF"}}</button></td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(10), true)" v-bind:class="{ milestone: player.q.best.lt(10), milestoneDone: player.q.best.gte(10) }">10 Quirks<br>Automatically purchase Time Capsules & Space Energy<br><button v-if="player.q.best.gte(10)" class="smallUpg can t" onclick="toggleAuto('t')">{{player.t.auto?"ON":"OFF"}}</button> <button v-if="player.q.best.gte(10)" class="smallUpg can s" onclick="toggleAuto('s')">{{player.s.auto?"ON":"OFF"}}</button></td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(15))" v-bind:class="{ milestone: player.q.best.lt(15), milestoneDone: player.q.best.gte(15) }">15 Quirks<br>Gain 100% of Enhance Point gain every second</td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(25))" v-bind:class="{ milestone: player.q.best.lt(25), milestoneDone: player.q.best.gte(25) }">25 Quirks<br>Space resets reset nothing</td></tr>
|
|
<tr><td v-if="milestoneShown(player.q.best.gte(2500))" v-bind:class="{ milestone: player.q.best.lt(2500), milestoneDone: player.q.best.gte(2500) }">2,500 Quirks<br>You can destroy individual Space Buildings</td></tr>
|
|
</table><br><br>
|
|
<button v-bind:class="{ upgBig: true, can: player.q.points.gte(getQuirkLayerCost()), locked: player.q.points.lt(getQuirkLayerCost()), q: true }" onclick="buyQuirkLayer()">Increment your Quirk Layer<br>Cost: {{formatWhole(getQuirkLayerCost())}} Quirks<br>Layers: {{formatWhole(player.q.layers)}}</button>
|
|
</div>
|
|
<div v-if="layer=='hb'">
|
|
<table>
|
|
<tr><td v-if="milestoneShown(player.hb.best.gte(1))" v-bind:class="{ milestone: player.hb.best.lt(1), milestoneDone: player.hb.best.gte(1) }">1 Hyper-Booster<br>You can buy max Super-Boosters</td></tr>
|
|
</table>
|
|
</div>
|
|
<div v-if="layer=='ss'">
|
|
You have {{format(player.ss.subspace)}} Subspace, which provides you with {{formatWhole(tmp.ssEff1)}} extra Space, makes all Space Buildings {{format(tmp.ssEff2)}}x cheaper, and makes all Space Buildings {{format(tmp.ssEff3.sub(1).times(100))}}% stronger<br><br>
|
|
<table>
|
|
<tr><td v-if="milestoneShown(player.ss.best.gte(1), true)" v-bind:class="{ milestone: player.ss.best.lt(1), milestoneDone: player.ss.best.gte(1) }">1 Subspace Energy<br>Automatically purchase Space Buildings <button v-if="player.ss.best.gte(1)" class="smallUpg can s" onclick="toggleAuto('s', 'Build')">{{player.s.autoBuild?"ON":"OFF"}}</button></td></tr>
|
|
</table>
|
|
</div>
|
|
<br><br><br>
|
|
<button v-if="LAYER_TYPE[layer]=='normal'" v-bind:class="{ [layer]: true, reset: true, locked: tmp.layerAmt[layer].lt(tmp.layerReqs[layer]), can: tmp.layerAmt[layer].gte(tmp.layerReqs[layer]) }" v-on:click="doReset(layer)">+{{formatWhole(tmp.resetGain[layer])}} {{LAYER_RES[layer]}}<br>Next at {{ (LAYER_RES_CEIL.includes(layer) ? formatWhole(tmp.nextAt[layer]) : format(tmp.nextAt[layer])) }} {{ LAYER_AMT_NAMES[layer] }}</button>
|
|
<button v-if="LAYER_TYPE[layer]=='static'" v-bind:class="{ [layer]: true, reset: true, locked: tmp.layerAmt[layer].lt(tmp.nextAt[layer]), can: tmp.layerAmt[layer].gte(tmp.nextAt[layer]) }" v-on:click="doReset(layer)">+{{formatWhole(tmp.resetGain[layer])}} {{LAYER_RES[layer]}}<br>Req: {{(LAYER_RES_CEIL.includes(layer) ? formatWhole(tmp.nextAt[layer]) : format(tmp.nextAt[layer]))}} {{ LAYER_AMT_NAMES[layer] }}</button>
|
|
<br><br><br>
|
|
<div class="upgTable">
|
|
<div v-for="row in LAYER_UPGS[layer].rows" class="upgRow">
|
|
<div v-for="col in LAYER_UPGS[layer].cols"><button v-if="LAYER_UPGS[layer][row*10+col].unl()" v-on:click="buyUpg(layer, row*10+col)" v-bind:class="{ [layer]: true, upg: true, bought: player[layer].upgrades.includes(row*10+col), locked: (player[layer].points.lt(LAYER_UPGS[layer][row*10+col].cost)&&!player[layer].upgrades.includes(row*10+col)), can: (player[layer].points.gte(LAYER_UPGS[layer][row*10+col].cost)&&!player[layer].upgrades.includes(row*10+col)) }">{{ LAYER_UPGS[layer][row*10+col].desc }}<br>Cost: {{ formatWhole(LAYER_UPGS[layer][row*10+col].cost) }} {{LAYER_RES[layer]}}<span v-if="LAYER_UPGS[layer][row*10+col].currently"><br>Currently: {{LAYER_UPGS[layer][row*10+col].effDisp(LAYER_UPGS[layer][row*10+col].currently())}}</span></button></div>
|
|
</div>
|
|
</div>
|
|
<br><br>
|
|
<div v-if="layer=='h'" class="upgTable">
|
|
<div v-for="row in H_CHALLS.rows" class="upgRow">
|
|
<div v-for="col in H_CHALLS.cols">
|
|
<div v-if="H_CHALLS[row*10+col].unl()" v-bind:class="{hChall: true, done: player.h.challs.includes(row*10+col), canComplete: (player.points.gte(H_CHALLS[row*10+col].goal)&&tmp.hcActive[row*10+col]&&!player.h.challs.includes(row*10+col))}">
|
|
<br><h3>{{H_CHALLS[row*10+col].name}}</h3><br><br>
|
|
<button class="longUpg can h" v-on:click="startHindrance(row*10+col)">{{player.h.active==(row*10+col)?(player.points.gte(H_CHALLS[row*10+col].goal)?"Finish":"Exit Early"):(player.h.challs.includes(row*10+col)?"Completed":"Start")}}</button><br><br>
|
|
{{H_CHALLS[row*10+col].desc}}<br>
|
|
Goal: {{format(H_CHALLS[row*10+col].goal)}} Points<br>
|
|
Reward: {{H_CHALLS[row*10+col].reward}}<br>
|
|
<span v-if="H_CHALLS[row*10+col].effDisp!==undefined">Currently: {{H_CHALLS[row*10+col].effDisp(H_CHALLS[row*10+col].currently())}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br><br>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body> |