1
0
Fork 0
mirror of https://github.com/Acamaeda/The-Modding-Tree.git synced 2025-04-29 21:16:00 +00:00

Mostly centralized layer additions, and removed previously existing content.

This commit is contained in:
Acamaeda 2020-09-24 11:54:41 -04:00
parent f5bc5580c5
commit b55185d96c
11 changed files with 1867 additions and 4651 deletions

View file

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2020 Jacorb Original Prestige Tree Copyright (c) 2020 Jacorb
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

File diff suppressed because it is too large Load diff

188
Old Code/archivedHTML.html Normal file
View file

@ -0,0 +1,188 @@
<div v-if="layer=='g'">
<table>
<tr v-if="milestoneShown(player.g.best.gte(8)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>8 Generators</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.g.best.gte(10))"><td v-bind:class="{ milestone: player.g.best.lt(10), milestoneDone: player.g.best.gte(10) }"><h3>10 Generators</h3><br>Gain 100% of Prestige Point gain every second</td></tr>
<tr v-if="milestoneShown(player.g.best.gte(15))"><td v-bind:class="{ milestone: player.g.best.lt(15), milestoneDone: player.g.best.gte(15) }"><h3>15 Generators</h3><br>You can buy max Generators</td></tr>
</table><br><br>
You have {{format(player.g.power)}} Generator Power, which multiplies Point gain by {{format(tmp.genPowEff)}}
</div>
<div v-if="layer=='e'">
<table>
<tr v-if="milestoneShown(player.e.best.gte(2))"><td v-bind:class="{ milestone: player.e.best.lt(2), milestoneDone: player.e.best.gte(2) }"><h3>2 enhance points</h3><br>Keep Booster/Generator milestones on reset</td></tr>
<tr v-if="milestoneShown(player.e.best.gte(10)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>10 enhance points</h3><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.sub(tmp.subbedEnh))}}<br>Multiplies Prestige Point gain by {{format(tmp.enhEff)}}<br>Adds<span v-if="player.q.upgrades.includes(53)"> and multiplies</span> to base of Booster/Generator effects by {{format(tmp.enhEff2)}}</button>
</div>
<div v-if="layer=='t'">
<table>
<tr v-if="milestoneShown(player.t.best.gte(2))"><td v-bind:class="{ milestone: player.t.best.lt(2), milestoneDone: player.t.best.gte(2) }"><h3>2 time capsules</h3><br>Keep Booster/Generator milestones on reset</td></tr>
<tr v-if="milestoneShown(player.t.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>3 time capsules</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.t.best.gte(4))"><td v-bind:class="{ milestone: player.t.best.lt(4), milestoneDone: player.t.best.gte(4) }"><h3>4 time capsules</h3><br>Keep Booster Upgrades on all row 3 resets</td></tr>
<tr v-if="milestoneShown(player.t.best.gte(5), true)"><td v-bind:class="{ milestone: player.t.best.lt(5), milestoneDone: player.t.best.gte(5) }"><h3>5 time capsules</h3><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>
<tr v-if="milestoneShown(player.t.best.gte(12))"><td v-bind:class="{ milestone: player.t.best.lt(12), milestoneDone: player.t.best.gte(12) }"><h3>12 time capsules</h3><br>Boosters reset nothing</td></tr>
</table><br><br>
You have {{format(player.t.energy)}} Time Energy, which multiplies Point gain & Prestige Point gain by {{format(tmp.timeEff)}}<br>
You have {{ format(player.b.points) }} Boosters<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'">
<table>
<tr v-if="milestoneShown(player.s.best.gte(2))"><td v-bind:class="{ milestone: player.s.best.lt(2), milestoneDone: player.s.best.gte(2) }"><h3>2 space energy</h3><br>Keep Booster/Generator milestones on reset</td></tr>
<tr v-if="milestoneShown(player.s.best.gte(3)||player.h.best.gte(1)||player.h.best.gte(1))"><td 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) }"><h3>3 space energy</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.s.best.gte(4))"><td v-bind:class="{ milestone: player.s.best.lt(4), milestoneDone: player.s.best.gte(4) }"><h3>4 space energy</h3><br>Keep Generator Upgrades on all row 3 resets</td></tr>
<tr v-if="milestoneShown(player.s.best.gte(5), true)"><td v-bind:class="{ milestone: player.s.best.lt(5), milestoneDone: player.s.best.gte(5) }"><h3>5 space energy</h3><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>
<tr v-if="milestoneShown(player.s.best.gte(12))"><td v-bind:class="{ milestone: player.s.best.lt(12), milestoneDone: player.s.best.gte(12) }"><h3>12 space energy</h3><br>Generators reset nothing</td></tr>
</table><br><br>
You have {{formatWhole(getSpace())}} Space remaining for Space Buildings.<br>
You have {{ format(player.g.power) }} Generator Power<br><br>
<button onclick="respecSpaceBuildings()" v-bind:class="{ longUpg: true, s: true, can: player.s.unl, locked: !player.s.unl }">Respec Space Buildings</button><br>
<div class="upgRow">
<div v-for="id in tmp.s.trueSbUnl">
<button 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)"><h3>Building {{id}}</h3><br>{{getSpaceBuildingEffDesc(id)}}<br><br>Level: {{formatWhole(tmp.s.sb[id])}}<br>Cost: {{format(getSpaceBuildingCost(id))}} Generator Power</button><br><br>
<button v-if="player.q.best.gte(2500)" v-bind:class="{ longUpg: true, s: true, can: tmp.s.sb[id].gte(1), locked: tmp.s.sb[id].lt(1) }" v-on:click="destroyBuilding(id)">Destroy One</button><br>
<button v-if="player.q.best.gte(2500)" v-bind:class="{ longUpg: true, s: true, can: tmp.s.sb[id].gte(1), locked: tmp.s.sb[id].lt(1) }" v-on:click="destroyBuilding(id, true)">Destroy All</button>
</div>
</div>
</div>
<div v-if="layer=='sb'">
<table><tr v-if="milestoneShown(player.sb.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>3 Super-Boosters</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.sb.best.gte(4))"><td v-bind:class="{ milestone: player.sb.best.lt(4), milestoneDone: player.sb.best.gte(4) }"><h3>4 Super-Boosters</h3><br>Keep Booster/Generator milestones on reset</td></tr></table>
</div>
<div v-if="layer=='sg'">
<table>
<tr v-if="milestoneShown(player.sg.best.gte(1))"><td v-bind:class="{ milestone: player.sg.best.lt(1), milestoneDone: player.sg.best.gte(1) }"><h3>1 Super-Generator</h3><br>You can buy max Super-Generators, and Super-Generators reset nothing</td></tr>
<tr v-if="milestoneShown(player.sg.best.gte(2), true)"><td v-bind:class="{ milestone: player.sg.best.lt(2), milestoneDone: player.sg.best.gte(2) }"><h3>2 Super-Generators</h3><br>Automatically purchase Super-Generators&nbsp;&nbsp;&nbsp;<button v-if="player.sg.best.gte(2)" class="smallUpg can sg" onclick="toggleAuto('sg')">{{player.sg.auto?"ON":"OFF"}}</button></td></tr>
</table><br><br>
You have {{format(player.sg.power)}} Super-Generator Power, which multiplies the Generator base by {{format(tmp.sGenPowEff)}}
</div>
<div v-if="layer=='h'">
<table><tr v-if="milestoneShown(player.h.best.gte(1))"><td v-bind:class="{ milestone: player.h.best.lt(1), milestoneDone: player.h.best.gte(1) }"><h3>1 Hindrance Spirit</h3><br>Keep Prestige Upgrades on all previous resets, and gain 100x more Enhance Points</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(2))"><td v-bind:class="{ milestone: player.h.best.lt(2), milestoneDone: player.h.best.gte(2) }"><h3>2 Hindrance Spirit</h3><br>Keep all third row milestones on all fourth row resets, and start with your best-ever Space</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(4))"><td v-bind:class="{ milestone: player.h.best.lt(4), milestoneDone: player.h.best.gte(4) }"><h3>4 Hindrance Spirit</h3><br>Keep Time, Enhance, and Space Upgrades on all fourth row resets</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(5), true)"><td v-bind:class="{ milestone: player.h.best.lt(5), milestoneDone: player.h.best.gte(5) }"><h3>5 Hindrance Spirit</h3><br>Automatically purchase Extra Time Capsules&nbsp;&nbsp;&nbsp;<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 v-if="milestoneShown(player.h.best.gte(10))"><td v-bind:class="{ milestone: player.h.best.lt(10), milestoneDone: player.h.best.gte(10) }"><h3>10 Hindrance Spirit</h3><br>Keep Prestige & Super-Booster Upgrades on all fourth row resets</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(15), true)"><td v-bind:class="{ milestone: player.h.best.lt(15), milestoneDone: player.h.best.gte(15) }"><h3>15 Hindrance Spirit</h3><br>Automatically purchase Super-Boosters&nbsp;&nbsp;&nbsp;<button v-if="player.h.best.gte(15)" class="smallUpg can sb" onclick="toggleAuto('sb')">{{player.sb.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.h.best.gte(25))"><td v-bind:class="{ milestone: player.h.best.lt(25), milestoneDone: player.h.best.gte(25) }"><h3>25 Hindrance Spirit</h3><br>Time resets reset nothing</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(2500))"><td v-bind:class="{ milestone: player.h.best.lt(2500), milestoneDone: player.h.best.gte(2500) }"><h3>2,500 Hindrance Spirit</h3><br>Super-Boosters reset nothing</td></tr>
</table>
</div>
<div v-if="layer=='q'">
<table><tr v-if="milestoneShown(player.q.best.gte(1))"><td v-bind:class="{ milestone: player.q.best.lt(1), milestoneDone: player.q.best.gte(1) }"><h3>1 Quirk</h3><br>Keep Prestige Upgrades on all previous resets, and gain 100x more Enhance Points</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(2))"><td v-bind:class="{ milestone: player.q.best.lt(2), milestoneDone: player.q.best.gte(2) }"><h3>2 Quirks</h3><br>You can buy max Time Capsules & Space Energy</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(4))"><td v-bind:class="{ milestone: player.q.best.lt(4), milestoneDone: player.q.best.gte(4) }"><h3>4 Quirks</h3><br>Keep Space Buildings on all fourth row resets</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(5), true)"><td v-bind:class="{ milestone: player.q.best.lt(5), milestoneDone: player.q.best.gte(5) }"><h3>5 Quirks</h3><br>Automatically purchase Enhancers&nbsp;&nbsp;&nbsp;<button v-if="player.q.best.gte(5)" class="smallUpg can e" onclick="toggleAuto('e')">{{player.e.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.q.best.gte(10), true)"><td v-bind:class="{ milestone: player.q.best.lt(10), milestoneDone: player.q.best.gte(10) }"><h3>10 Quirks</h3><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>&nbsp;<button v-if="player.q.best.gte(10)" class="smallUpg can s" onclick="toggleAuto('s')">{{player.s.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.q.best.gte(15))"><td v-bind:class="{ milestone: player.q.best.lt(15), milestoneDone: player.q.best.gte(15) }"><h3>15 Quirks</h3><br>Gain 100% of Enhance Point gain every second</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(25))"><td v-bind:class="{ milestone: player.q.best.lt(25), milestoneDone: player.q.best.gte(25) }"><h3>25 Quirks</h3><br>Space resets reset nothing</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(2500))"><td v-bind:class="{ milestone: player.q.best.lt(2500), milestoneDone: player.q.best.gte(2500) }"><h3>2,500 Quirks</h3><br>You can destroy individual Space Buildings</td></tr>
</table><br><br>
You have {{format(player.q.energy)}} Quirk Energy (generated by Quirk Layers), which multiplies Point & Generator Power gain by {{format(tmp.quirkEff)}}<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 v-if="milestoneShown(player.hb.best.gte(1))"><td v-bind:class="{ milestone: player.hb.best.lt(1), milestoneDone: player.hb.best.gte(1) }"><h3>1 Hyper-Booster</h3><br>You can buy max Super-Boosters</td></tr>
</table>
</div>
<div v-if="layer=='ss'">
<table>
<tr v-if="milestoneShown(player.ss.best.gte(1), true)"><td v-bind:class="{ milestone: player.ss.best.lt(1), milestoneDone: player.ss.best.gte(1) }"><h3>1 Subspace Energy</h3><br>Automatically purchase Space Buildings&nbsp;&nbsp;&nbsp;<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><br><br>
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
</div>
<div v-if="layer=='m'">
<table>
<tr v-if="milestoneShown(player.m.total.gte(1))"><td v-bind:class="{ milestone: player.m.total.lt(1), milestoneDone: player.m.total.gte(1) }"><h3>1 total Magic</h3><br>Keep row 4 milestones on all resets</td></tr>
<tr v-if="milestoneShown(player.m.total.gte(2))"><td v-bind:class="{ milestone: player.m.total.lt(2), milestoneDone: player.m.total.gte(2) }"><h3>2 total Magic</h3><br>Keep Hindrance completions on all resets</td></tr>
<tr v-if="milestoneShown(player.m.total.gte(3))"><td v-bind:class="{ milestone: player.m.total.lt(3), milestoneDone: player.m.total.gte(3) }"><h3>3 total Magic</h3><br>Gain 100% of Hindrance Spirit & Quirk gain every second</td></tr>
<tr v-if="milestoneShown(player.m.total.gte(4), true)"><td v-bind:class="{ milestone: player.m.total.lt(4), milestoneDone: player.m.total.gte(4) }"><h3>4 total Magic</h3><br>Automatically purchase Hyper-Boosters & Subspace&nbsp;&nbsp;&nbsp;<button v-if="player.m.total.gte(4)" class="smallUpg can hb" onclick="toggleAuto('hb')">{{player.hb.auto?"ON":"OFF"}}</button>&nbsp;&nbsp;&nbsp;<button v-if="player.m.total.gte(4)" class="smallUpg can ss" onclick="toggleAuto('ss')">{{player.ss.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.m.total.gte(50), true)"><td v-bind:class="{ milestone: player.m.total.lt(50), milestoneDone: player.m.total.gte(50) }"><h3>50 total Magic</h3><br>Automatically cast Spells&nbsp;&nbsp;&nbsp;<button v-if="player.m.total.gte(50)" class="smallUpg can m" onclick="toggleAuto('m')">{{player.m.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.m.total.gte(2.5e9))"><td v-bind:class="{ milestone: player.m.total.lt(2.5e9), milestoneDone: player.m.total.gte(2.5e9) }"><h3>2.5e9 total Magic</h3><br>Gain 100% of Hex gain every second, and Spells last 4x longer</td></tr>
</table><br><br>
<span v-if="player.sp.total.lt(2)">Note: Activating a Spell costs Magic.<br></span>
<div class="upgRow">
<div v-for="id in tmp.spellsUnl">
<button v-bind:class="{ upg: true, bought: spellActive(id), can: ((player.m.points.gte(player.m.toCast[id]))&&player.m.unl&&!spellActive(id)), locked: (!(player.m.points.gte(player.m.toCast[id])||spellActive(id))), m: true }" v-on:click="activateSpell(id)"><h3>{{SPELL_NAMES[id]}}</h3><br>{{getSpellDesc(id)}}<br><br>Time: {{formatTime(player.m.spellTimes[id])}}</button><br><br>
<div v-if="player.m.upgrades.includes(41)">
<input v-model="player.m.toCast[id]" v-on:focus="focused(true)" v-on:blur="focused(false)" v-on:change="updateToCast(id)"></input><br><br>
</div>
</div>
</div>
You have {{formatWhole(player.m.hexes)}} Hexes, which are multiplying Hindrance Spirit & Quirk gain by {{format(tmp.hexEff)}}
</div>
<div v-if="layer=='ba'">
<table>
<tr v-if="milestoneShown(player.ba.best.gte(1))"><td v-bind:class="{ milestone: player.ba.best.lt(1), milestoneDone: player.ba.best.gte(1) }"><h3>1 Balance Energy</h3><br>Keep row 4 milestones on all resets</td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(2))"><td v-bind:class="{ milestone: player.ba.best.lt(2), milestoneDone: player.ba.best.gte(2) }"><h3>2 Balance Energy</h3><br>Keep Quirk Upgrades on all resets</td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(3), true)"><td v-bind:class="{ milestone: player.ba.best.lt(3), milestoneDone: player.ba.best.gte(3) }"><h3>3 Balance Energy</h3><br>Automatically purchase Quirk Layers&nbsp;&nbsp;&nbsp;<button v-if="player.ba.best.gte(3)" class="smallUpg can q" onclick="toggleAuto('q')">{{player.q.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(5))"><td v-bind:class="{ milestone: player.ba.best.lt(5), milestoneDone: player.ba.best.gte(5) }"><h3>5 Balance Energy</h3><br>Keep Hyper-Booster & Subspace Upgrades on all resets</td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(8))"><td v-bind:class="{ milestone: player.ba.best.lt(8), milestoneDone: player.ba.best.gte(8) }"><h3>8 Balance Energy</h3><br>You can buy max Hyper-Boosters & Subspace Energy, and Hyper-Boosters/Subspace Energy reset nothing</td></tr>
</table><br><br>
You have {{format(player.ba.power)}} Balance Power, which is multiplying Hindrance Spirit & Quirk gain by {{format(tmp.balEff)}}<br>
You have {{format(player.ba.positivity)}} Positivity and {{format(player.ba.negativity)}} Negativity, which are multiplying Balance Power gain by {{format(tmp.balEff2)}}
</div>
<div v-if="layer=='ps'">
<table>
<tr v-if="milestoneShown(player.ps.best.gte(2), true)"><td v-bind:class="{ milestone: player.ps.best.lt(5), milestoneDone: player.ps.best.gte(2) }"><h3>2 Phantom Souls</h3><br>Automatically purchase Phantom Souls&nbsp;&nbsp;&nbsp;<button v-if="player.ps.best.gte(2)" class="smallUpg can ps" onclick="toggleAuto('ps')">{{player.ps.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.ps.best.gte(5))"><td v-bind:class="{ milestone: player.ps.best.lt(5), milestoneDone: player.ps.best.gte(5) }"><h3>5 Phantom Souls</h3><br>You can buy max Phantom Souls, and Phantom Souls reset nothing</td></tr>
</table><br><br>
</div>
<div v-if="layer=='sp'">
<table>
<tr v-if="milestoneShown(player.sp.total.gte(1))"><td v-bind:class="{ milestone: player.sp.total.lt(1), milestoneDone: player.sp.total.gte(1) }"><h3>1 total Super-Prestige Point</h3><br>Upgrades of Rows 1-5 and Hindrances are kept on all resets</td></tr>
<tr v-if="milestoneShown(player.sp.total.gte(2), true)"><td v-bind:class="{ milestone: player.sp.total.lt(2), milestoneDone: player.sp.total.gte(2) }"><h3>2 total Super-Prestige Points</h3><br>Keep Magic Milestones on reset, Spells do not cost Magic, and Magic Upgrade 13's effect can be auto-set to your current Magic&nbsp;&nbsp;&nbsp;<button v-if="player.sp.total.gte(2)" class="smallUpg can m" onclick="toggleAuto('m', 'Ins')">{{player.m.autoIns?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.sp.total.gte(5))"><td v-bind:class="{ milestone: player.sp.total.lt(5), milestoneDone: player.sp.total.gte(5) }"><h3>5 total Super-Prestige Points</h3><br>Keep Balance Milestones on reset</td></tr>
<tr v-if="milestoneShown(player.sp.total.gte(10))"><td v-bind:class="{ milestone: player.sp.total.lt(10), milestoneDone: player.sp.total.gte(10) }"><h3>10 total Super-Prestige Points</h3><br>Gain 100% of Magic & Balance Power gain every second</td></tr>
</table>
</div>
<div v-if="layer=='l'">
<br><br>
You have {{format(player.l.power)}} Life Power (+{{format(LIFE_BOOSTERS.calcNewPower(1).sub(player.l.power))}}/s),<br>
which is translating to:
<div class="upgRow">
<div v-for="i in tmp.l.lbUnl">
<button v-bind:class="{ upgBig: true, l: true }"><h3>Life Booster {{i}}</h3><br>{{LIFE_BOOSTERS[i].effDesc(tmp.l.lbEff[i])}}<br><br>Boosters: {{formatWhole(tmp.l.lb[i])}}<br>Next at: {{formatWhole(LIFE_BOOSTERS.req(i).ceil())}} Phantom Souls</button>
</div>
</div>
You have {{formatWhole(player.ps.points)}} Phantom Souls, {{getLayerEffDesc("ps")}}
</div>
<div v-if="layer=='hs'">
<table>
<tr v-if="milestoneShown(player.hs.best.gte(2e4))"><td v-bind:class="{ milestone: player.hs.best.lt(2e4), milestoneDone: player.hs.best.gte(2e4) }"><h3>20,000 Hyperspace Energy</h3><br>Gain 1% of Super-Prestige Points gain every second</td></tr>
</table>
<br><br>
You have {{formatWhole(player.ba.points)}} Balance Energy
<br>
<button v-on:click="HYPERSPACE.buy()" v-bind:class="{ upgBig: true, hs: true, can: HYPERSPACE.canBuy(), locked: !HYPERSPACE.canBuy() }">Buy a Hyperspace<br>Amount: {{formatWhole(player.hs.space.sub(player.hs.spent))}}<br><br>Cost: {{formatWhole(HYPERSPACE.cost().hs)}} Hyperspace Energy & {{formatWhole(HYPERSPACE.cost().ba)}} Balance Energy</button>
<br><br>
<button v-on:click="HYPERSPACE.respec()" v-bind:class="{ longUpg: true, hs: true, can: player.hs.unl, locked: !player.hs.unl }">Respec Super-Upgrades</button><br>
<div class="upgRow">
<div v-for="i in tmp.s.trueSbUnl">
<button v-on:click="HYPERSPACE.superUpg(i)" v-bind:class="{ upg: true, hs: true, can: HYPERSPACE.canSuperUpg(i), locked: !HYPERSPACE.canSuperUpg(i) }"><h3>Building {{i}}</h3><br>{{getSpaceBuildingEffDesc(i)}}<br><br>Super-Level: {{formatWhole(tmp.hs.su[i])}} / {{formatWhole(player.hs.superUpgradeCap)}}<br>({{format(tmp.hs.suEff[i].sub(1).times(100))}}% stronger)<br>Cost: 1 Hyperspace</button>
</div>
</div>
<br>
Get {{formatWhole(player.g.points)}} / {{formatWhole(HYPERSPACE.nextCapReq())}} Generators to increase the cap of Super-Upgrades
</div>
<div v-if="layer=='i'">
<table>
<tr v-if="milestoneShown(player.i.best.gte(3))"><td v-bind:class="{ milestone: player.i.best.lt(3), milestoneDone: player.i.best.gte(3) }"><h3>3 Imperium Bricks</h3><br>You can max out Imperium Bricks</td></tr>
</table>
<br><br>
You have {{formatWhole(player.i.lifeBricks)}} Life Bricks<br>
Next Life Brick is at {{format(player.l.power)}} / {{format(IMPERIUM.lifeReq())}} Life Power
<br><br>
<button v-on:click="IMPERIUM.build()" v-bind:class="{ upgBig: true, i: true, can: IMPERIUM.canBuild(), locked: !IMPERIUM.canBuild() }">
<h3>Imperium Buildings</h3><br>
<span v-if="tmp.s.sbUnl.lt(SPACE_BUILDINGS.max)">Build Space Building {{formatWhole(tmp.s.sbUnl.add(1))}}</span>
<span v-if="tmp.s.sbUnl.gte(SPACE_BUILDINGS.max)">Enhance<sup v-if="tmp.s.sbUnl.div(SPACE_BUILDINGS.max).gte(2)">{{formatWhole(tmp.s.sbUnl.div(SPACE_BUILDINGS.max).floor())}}</sup> Space Building {{formatWhole(tmp.s.sbUnl.sub(tmp.s.sbUnl.div(SPACE_BUILDINGS.max).floor().times(SPACE_BUILDINGS.max)).add(1))}}</span>
<br>
Built Buildings: {{formatWhole(player.i.extraBuildings)}}
<br><br>
<span v-if="!player.i.building">Cost: {{IMPERIUM.cost().i}} Imperium Bricks & {{IMPERIUM.cost().l}} Life Bricks</span>
<span v-if="player.i.building">Progress: {{format(player.i.progress * 100)}}%<br>Your {{formatWhole(player.sg.points)}} Super-Generators speed up your progress by {{format(IMPERIUM.sgSpeedBoost())}}x<br><br>Click to cancel building</span>
</button>
<br>
Your Work is currently {{format(tmp.i.work)}}, which reduces the gain power of rows 1 - 5 by {{format(tmp.i.workEff)}}x
<span v-for="i in IMPERIUM.maxCollapseRows"><span v-if="IMPERIUM.collapsed(i)"><br>Your Work also collapses row {{i}} layers by {{format(tmp.i.collapse[i].times(100))}}%</span></span>
</div>

View file

@ -1,10 +1,11 @@
<!DOCTYPE html> <!DOCTYPE html>
<head> <head>
<title>The Prestige Tree</title> <title>The Candy Tree</title>
<link rel="stylesheet" type="text/css" href="style.css" /> <link rel="stylesheet" type="text/css" href="style.css" />
<link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script type="text/javascript" src="js/break_eternity.js"></script> <script type="text/javascript" src="js/break_eternity.js"></script>
<script type="text/javascript" src="js/layers.js"></script>
<script type="text/javascript" src="js/temp.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/saves.js"></script>
<script type="text/javascript" src="js/game.js"></script> <script type="text/javascript" src="js/game.js"></script>
@ -16,7 +17,7 @@
<div class="vl" v-if="player.tab!='tree'&&player.tab!='gameEnded'"></div> <div class="vl" v-if="player.tab!='tree'&&player.tab!='gameEnded'"></div>
<div v-if="player.tab=='gameEnded'" class="fullWidth"> <div v-if="player.tab=='gameEnded'" class="fullWidth">
<br> <br>
<h2>Prestige Tree {{VERSION.withoutName}}</h2><br><br> <h2>The Candy Tree {{VERSION.withoutName}}</h2><br><br>
<h3>Congratulations! You have reached the end and beaten this game, but for now...</h3><br> <h3>Congratulations! You have reached the end and beaten this game, but for now...</h3><br>
<h3>Please check the Discord to see there are new content updates!</h3><br><br> <h3>Please check the Discord to see there are new content updates!</h3><br><br>
<div v-if="!player.timePlayedReset">It took you {{formatTime(player.timePlayed)}} to beat the game.</div> <div v-if="!player.timePlayedReset">It took you {{formatTime(player.timePlayed)}} to beat the game.</div>
@ -24,347 +25,50 @@
<br> <br>
<button class="longUpg can" onclick="hardReset(true)">Play Again</button>&nbsp;&nbsp;&nbsp;&nbsp;<button class="longUpg can" onclick="keepGoing()">Keep Going</button> <button class="longUpg can" onclick="hardReset(true)">Play Again</button>&nbsp;&nbsp;&nbsp;&nbsp;<button class="longUpg can" onclick="keepGoing()">Keep Going</button>
<br><br><br> <br><br><br>
<a class="link" href="http://discord.gg/wwQfgPa" target="_blank">Jacorb's Discord</a><br> <a class="link" href="http://discord.gg/wwQfgPa" target="_blank">Main Prestige Tree Discord</a><br>
<a class="link" href="http://aarextiaokhiao.github.io/" target="_blank">Aarex's Home</a>
<br><br> <br><br>
If you would like to speedrun this, press Play Again and record your attempt, then submit on the Discord Server in the channel #speedrun-submissions. If you would like to speedrun this, press Play Again and record your attempt, then submit on the Discord Server in the channel #speedrun-submissions.
<br><br><br> <br><br><br>
<h1>Oh, you are still reading this?</h1> <h1>Oh, you are still reading this?</h1>
<br> <br>
Yeah. You also can test the next update whether you want to.<br>
<a class="link" href="http://raw.githack.com/Jacorb90/Prestige-Tree/v1.2-Beta/index.html">Test server</a>
<br><br>
For this next update, there will be 3 new layers which come after row 6! Stay tuned.
</div> </div>
<div v-if="player.tab=='changelog'" class="col right"> <div v-if="player.tab=='changelog'" class="col right">
<button class="back" onclick="showTab('tree')"></button><br> <button class="back" onclick="showTab('tree')"></button><br>
<h3>v1.1: The Life Update</h3> <h3>v0.0.1: Technically something</h3>
<ul> <ul>
<li>Added 4 new layers</li> <li>There is a game, but not the right game.</li>
<li>Added some QoL displays</li>
<li>Added Aqua theme</li>
<li>Added HQ Tree option</li>
<li>Rebalanced early parts of rows 4 - 6</li>
<li>Balanced up to e28,000,000</li>
<li>Fixed some bugs</li>
</ul><br> </ul><br>
<h3>v1.0 Patch 1</h3>
<ul> <div class="link" onclick="showTab('Old Stuff')">Alpha / Beta</div><br>
<li>Added an option to keep going at endgame</li>
</ul><br>
<div class="link" onclick="showTab('changelog_beta')">Alpha / Beta</div><br>
</div> </div>
<div v-if="player.tab=='changelog_beta'" class="col right"> <div v-if="player.tab=='changelog_beta'" class="col right">
<button class="back" onclick="showTab('changelog')"></button><br> <button class="back" onclick="showTab('changelog')"></button><br>
<h3>v1.0 Full Release</h3> <h3>v0.0 Literally nothing</h3>
<ul> <ul>
<li>Converted Vue to production mode</li> <li>Added nothing</li>
<li>Added an end screen at 1e40,000,000 Points</li>
</ul><br> </ul><br>
<h3>v1.0 Beta 4</h3>
<ul>
<li>Balanced up to 1e40,000,000 Points & 500,000 Super-Prestige Points</li>
</ul><br>
<h3>v1.0 Beta 3</h3>
<ul>
<li>Added a hotkey for the fourth Spell</li>
<li>Balanced up to 1e29,000,000 Points & 10,000 Super-Prestige Points</li>
</ul><br>
<h3>v1.0 Beta 2</h3>
<ul>
<li>Fixed a bug involving the fourth Spell</li>
<li>Added more Super-Prestige Upgrades</li>
<li>Balanced up to 1e26,000,000 Points & 250 Super-Prestige Points</li>
</ul><br>
<h3>v1.0 Beta 1</h3>
<ul>
<li>Implemented the Super-Prestige layer (unfinished)</li>
<li>Balanced up to 1e18,000,000 Points & 10 Super-Prestige Points</li>
</ul><br>
<h3>Beta v1.2</h3>
<ul>
<li>Balanced up to 1e15,000,000 Points</li>
</ul><br>
<h3>Beta v1.2 Alpha 13</h3>
<ul>
<li>Reduced a few upgrade costs</li>
<li>Balanced up to 1e11,000,000 Points, 5e23 Magic, and 3e20 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 12</h3>
<ul>
<li>Balanced up to 1e9,200,000 Points, 5e18 Magic, and 1e16 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 11</h3>
<ul>
<li>Balanced up to 1e7,650,000 Points, 1e16 Magic, and 4e13 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 10</h3>
<ul>
<li>Made a few visual fixes</li>
<li>Adjusted the 1,070 Generator upgrade to cost 1,068 Generators instead</li>
<li>Balanced up to 1e6,800,000 Points, 1e14 Magic, and 1.5e12 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 9</h3>
<ul>
<li>Added hints for h8 & h10</li>
<li>Added a new Magic milestone</li>
<li>Reduced offline time to 10% of its original amount</li>
<li>Balanced up to 1e6,000,000 Points, 3e12 Magic, and 1e11 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 8</h3>
<ul>
<li>Added a new milestone</li>
<li>Added a new Hindrance ;)</li>
<li>Balanced up to 1e5,500,000 Points, 2.5e10 Magic, and 2e9 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 7</h3>
<ul>
<li>Balanced up to 1e3,950,000 Points, 1,500,000 Magic, and 5,000,000 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 6</h3>
<ul>
<li>Fixed a bug with hotkeys</li>
<li>Balanced up to 1e3,000,000 Points, 80,000 Magic, and 160,000 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 5</h3>
<ul>
<li>Balanced up to 1e2,400,000 Points, 1,500 Magic, and 3,000 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 4</h3>
<ul>
<li>Implemented the final Hindrance</li>
<li>Balanced up to 1e2,000,000 Points, 200 Magic, and 200 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 3</h3>
<ul>
<li>Balanced up to 50 Magic and 50 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 2</h3>
<ul>
<li>Added 2 new upgrades and a few new milestones</li>
<li>Balanced up to 25 Magic and 25 Balance Energy</li>
</ul><br>
<h3>Beta v1.2 Alpha 1</h3>
<ul>
<li>Implemented the two Row 5 layers</li>
<li>Added a new option</li>
<li>Rebalanced a few things at the end of row 4</li>
<li>Balanced up to 1 of each Row 5 reset</li>
</ul><br>
<h3>Beta v1.1</h3>
<ul>
<li>Cleaned up a few things</li>
</ul><br>
<h3>Beta v1.1 Alpha 21</h3>
<ul>
<li>Rebalanced from h10 to endgame (now ends at 1e920,000 Points unless you wanna grind)</li>
</ul><br>
<h3>Beta v1.1 Alpha 20</h3>
<ul>
<li>Made h10 hidden until you beat h9</li>
<li>Rebalanced/fixed h10</li>
</ul><br>
<h3>Beta v1.1 Alpha 19</h3>
<ul>
<li>Remade the offline progression system</li>
<li>Balanced up to 1e925,000 Points</li>
</ul><br>
<h3>Beta v1.1 Alpha 18</h3>
<ul>
<li>Added a new Hindrance (h10)</li>
<li>Balanced up to 1e800,000 Points</li>
</ul><br>
<h3>Beta v1.1 Alpha 17</h3>
<ul>
<li>Fixed a bug with unlocking Hyper-Boosters & Subspace</li>
<li>Balanced up to 1e710,000 Points</li>
</ul><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>
<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> <button class="back" onclick="showTab('tree')"></button><br>
<h2>Prestige Tree</h2> <h2>The Candy Tree</h2>
<br> <br>
<h3>{{VERSION.withName}}</h3> <h3>{{VERSION.withName}}</h3>
<br> <br>
Made by Jacorb and Aarex The Candy Tree and code refactor by Acamaeda
<br> <br>
Idea by papyrus (on discord) The Prestige Tree made by Jacorb and Aarex
<br>
Original idea by papyrus (on discord)
<br><br> <br><br>
<div class="link" onclick="showTab('changelog')">Changelog</div><br> <div class="link" onclick="showTab('changelog')">Changelog</div><br>
<a class="link" href="http://raw.githack.com/Jacorb90/Prestige-Tree/v1.2-Beta/index.html">Test server</a><br><br> <a class="link" href="http://discord.gg/wwQfgPa" target="_blank">Main Prestige Tree server</a><br>
<a class="link" href="http://discord.gg/wwQfgPa" target="_blank">Jacorb's Discord</a><br>
<a class="link" href="http://aarextiaokhiao.github.io/" target="_blank">Aarex's Home</a>
<br> <br>
Note by Jacorb: 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>. Note by Jacorb: 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>.
<br><br> <br><br>
Time Played: {{ formatTime(player.timePlayed) }}<br><br> Time Played: {{ formatTime(player.timePlayed) }}<br><br>
<h3>Hotkeys</h3><br> <h3>Hotkeys</h3><br>
<span v-if="player.p.unl"><br>P: Prestige reset</span> <span v-if="player.c.unl"><br>C: Reset candies for lollipops.</span>
<span v-if="player.b.unl"><br>B: Booster reset</span>
<span v-if="player.g.unl"><br>G: Generator reset</span>
<span v-if="player.t.unl"><br>T: Time reset</span>
<span v-if="player.e.unl"><br>E: Enhance reset</span>
<span v-if="player.s.unl"><br>S: Space reset</span>
<span v-if="player.sb.unl"><br>Shift+B: Super-Booster reset</span>
<span v-if="player.sg.unl"><br>Shift+G: Super-Generator reset</span>
<span v-if="player.h.unl"><br>H: Hindrance reset</span>
<span v-if="player.q.unl"><br>Q: Quirk reset</span>
<span v-if="player.hb.unl"><br>Ctrl+B: Hyper-Booster reset</span>
<span v-if="player.ss.unl"><br>Shift+S: Subspace reset</span>
<span v-if="player.m.unl"><br>M: Magic reset</span>
<span v-if="player.ba.unl"><br>A: Balance reset</span>
<span v-if="player.ps.unl"><br>Ctrl+P: Phantom Soul reset</span>
<span v-if="player.sp.unl"><br>Shift+P: Super-Prestige reset</span>
<span v-if="player.l.unl"><br>L: Life Essence reset</span>
<span v-if="player.hs.unl"><br>Ctrl+S: Hyperspace reset</span>
<span v-if="player.i.unl"><br>I: Imperium Brick reset</span>
<span v-if="player.m.unl">
<br>
<span v-for="i in tmp.spellsUnl"><br>{{i}}: Cast spell {{i}}</span>
</span>
</div> </div>
<div v-if="player.tab=='options'" class="col right"> <div v-if="player.tab=='options'" class="col right">
<button class="back" onclick="showTab('tree')"></button><br> <button class="back" onclick="showTab('tree')"></button><br>
@ -397,289 +101,61 @@
<span v-if="player.offTime !== undefined"> <span v-if="player.offTime !== undefined">
<br>Offline Time: {{formatTime(player.offTime.remain)}}<br> <br>Offline Time: {{formatTime(player.offTime.remain)}}<br>
</span> </span>
<span v-if="player.sp.unl && !player.keepGoing"> <span v-if="false && !player.keepGoing">
<br>Reach {{formatWhole(ENDGAME)}} to beat the game!<br> <br>Reach {{formatWhole(ENDGAME)}} to beat the game!<br>
</span> </span>
<br> <br>
<span v-if="player.points.lt('1e1000')">You have </span> <span v-if="player.points.lt('1e1000')">You have </span>
<h2 id="points">{{format(player.points)}}</h2> <h2 id="candies">{{format(player.points)}}</h2>
<span v-if="player.points.lt('1e1e6')"> points</span> <span v-if="player.points.lt('1e1e6')"> candies</span>
<br><br><br><br><br> <br><br><br><br><br>
<table> <table>
<td><layer-node layer='p' abb='P'></layer-node></td> <td><layer-node layer='c' abb='C'></layer-node></td>
</table><table> </table><table>
<td><button class="treeNode hidden"></button></td> <td><button class="treeNode hidden"></button></td>
</table><table> </table><table>
<td v-if="player.tab=='tree'&&(player.b.unl||player.g.unl)" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(1)"></img></td> <td v-if="player.tab=='tree'&&(player.c.unl||player.c.unl)" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(1)"></img></td>
<td><layer-node layer='b' abb='B'></layer-node></td> <td><layer-node layer='f' abb='F'></layer-node></td>
<td><layer-node layer='g' abb='G'></layer-node></td>
</table><table> </table><table>
<td><button class="treeNode hidden"></button></td> <td><button class="treeNode hidden"></button></td>
</table><table>
<td v-if="player.tab=='tree'&&(player.e.unl||player.t.unl||player.s.unl)" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(2)"></img></td>
<td><layer-node layer='sb' abb='SB'></layer-node></td>
<td><layer-node layer='t' abb='T'></layer-node></td>
<td><layer-node layer='e' abb='E'></layer-node></td>
<td><layer-node layer='s' abb='S'></layer-node></td>
<td><layer-node layer='sg' abb='SG'></layer-node></td>
</table><table>
<td><button class="treeNode hidden"></button></td>
</table><table>
<td v-if="player.tab=='tree'&&(player.h.unl||player.q.unl)" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(3)"></img></td>
<td v-if="player.tab=='tree'&&(player.e.unl||player.t.unl||player.s.unl)" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(2)"></img></td>
<td><layer-node layer='hb' abb='HB'></layer-node></td>
<td><layer-node layer='h' abb='H'></layer-node></td>
<td><layer-node layer='q' abb='Q'></layer-node></td>
<td><layer-node layer='ss' abb='SS'></layer-node></td>
<td><layer-node layer='hg' abb='HG'></layer-node></td>
</table><table>
<td><button class="treeNode hidden"></button></td>
</table><table>
<td v-if="player.tab=='tree'&&(player.m.unl||player.ba.unl)" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(4)"></img></td>
<td><layer-node layer='m' abb='M'></layer-node></td>
<td><layer-node layer='ps' abb='PS'></layer-node></td>
<td><layer-node layer='ba' abb='BA'></layer-node></td>
</table><table>
<td><button class="treeNode hidden"></button></td>
</table><table>
<td v-if="player.tab=='tree'&&player.sp.unl" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(5)"></img></td>
<td><layer-node layer='l' abb='L'></layer-node></td>
<td><layer-node layer='sp' abb='SP'></layer-node></td>
<td><layer-node layer='hs' abb='HS'></layer-node></td>
<td><layer-node layer='i' abb='I'></layer-node></td>
</table><table>
<td><button class="treeNode hidden"></button></td>
</table><table>
<td v-if="player.tab=='tree'&&layerShown('tm')" class="left"><br><br><img class="remove" src="remove.png" onclick="resetRow(6)"></img></td>
<td><layer-node layer='mb' abb='MB'></layer-node></td>
<td><layer-node layer='ge' abb='Ge'></layer-node></td>
<td><layer-node layer='ma' abb='Ma'></layer-node></td>
</table> </table>
<canvas id="treeCanvas" class="canvas"></canvas> <canvas id="treeCanvas" class="canvas"></canvas>
</div> </div>
<div v-for="layer in LAYERS"> <div v-for="layer in LAYERS">
<div v-if="player.tab==layer" class="col right"> <div v-if="player.tab==layer" class="col right">
<button class="back" onclick="showTab('tree')"></button><br><br><br> <button class="back" onclick="showTab('tree')"></button><br><br><br>
<span v-if="player[layer].points.lt('1e1000')">You have </span><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> <span v-if="player[layer].points.lt('1e1000')">You have </span><h2 v-bind:style="{'color': layers[layer].color, 'text-shadow': '0px 0px 10px' + layers[layer].color}">{{formatWhole(player[layer].points)}}</h2> {{layers[layer].resource}}<span v-if="layers[layer].effects != undefined">, {{layers[layer].effectDescription()}}</span>
<br><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)"><span v-if="player[layer].points.lt(1e3)">Reset for </span>+<b>{{formatWhole(tmp.resetGain[layer])}}</b> {{LAYER_RES[layer]}}<span v-if="tmp.resetGain[layer].lt(100) && player[layer].points.lt(1e3)"><br><br>Next at {{ (LAYER_RES_CEIL.includes(layer) ? formatWhole(tmp.nextAt[layer]) : format(tmp.nextAt[layer])) }} {{ LAYER_AMT_NAMES[layer] }}</span></button> <button v-if="layers[layer].type=='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-bind:style="{'background-color': layers[layer].color}" v-on:click="doReset(layer)"><span v-if="player[layer].points.lt(1e3)">Reset for </span>+<b>{{formatWhole(tmp.resetGain[layer])}}</b> {{layers[layer].resource}}<span v-if="tmp.resetGain[layer].lt(100) && player[layer].points.lt(1e3)"><br><br>Next at {{ (layers[layer].resCeil ? formatWhole(tmp.nextAt[layer]) : format(tmp.nextAt[layer])) }} {{ layers[layer].baseResource }}</span></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)"><span v-if="player[layer].points.lt(10)">Reset for </span>+<b>{{formatWhole(tmp.resetGain[layer])}}</b> {{LAYER_RES[layer]}}<br><br><span v-if="player[layer].points.lt(10)">Req: {{formatWhole(tmp.layerAmt[layer])}} / </span>{{(LAYER_RES_CEIL.includes(layer) ? formatWhole(tmp.nextAt[layer]) : format(tmp.nextAt[layer]))}} {{ LAYER_AMT_NAMES[layer] }}</button> <button v-if="layers[layer].type=='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-bind:style="{'background-color': layers[layer].color}" v-on:click="doReset(layer)"><span v-if="player[layer].points.lt(10)">Reset for </span>+<b>{{formatWhole(tmp.resetGain[layer])}}</b> {{layers[layer].resource}}<br><br><span v-if="player[layer].points.lt(10)">Req: {{formatWhole(tmp.layerAmt[layer])}} / </span>{{(layers[layer].resCeil ? formatWhole(tmp.nextAt[layer]) : format(tmp.nextAt[layer]))}} {{ layers[layer].baseResource }}</button>
<span v-if="LAYER_TYPE[layer]=='normal' && tmp.resetGain[layer].lt(100) && player[layer].points.lt(1e3)"><br>You have {{formatWhole(tmp.layerAmt[layer])}} {{LAYER_AMT_NAMES[layer]}}</span> <span v-if="layers[layer].type=='normal' && tmp.resetGain[layer].lt(100) && player[layer].points.lt(1e3)"><br>You have {{formatWhole(tmp.layerAmt[layer])}} {{layers[layer].baseResource}}</span>
<br><br> <br><br>
<span v-if="layer!='p'">Your best {{LAYER_RES[layer]}} is {{formatWhole(player[layer].best)}}<br></span> <span v-if="layer!='c'">Your best {{layers[layer].resource}} is {{formatWhole(player[layer].best)}}<br></span>
<span v-if="player[layer].total">You have made a total of {{formatWhole(player[layer].total)}} {{LAYER_RES[layer]}}<br></span> <span v-if="player[layer].total">You have made a total of {{formatWhole(player[layer].total)}} {{layers[layer].resource}}<br></span>
<div v-if="layer=='b'"> <div v-if="layer=='aefaf'">
<table> <table>
<tr v-if="milestoneShown(player.b.best.gte(8))"><td 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) }"><h3>8 Boosters</h3><br>Keep Prestige Upgrades on reset</td></tr> <tr v-if="milestoneShown(player.c.best.gte(8))"><td v-bind:class="{ milestone: player.c.best.lt(8)&&player.c.best.lt(1)&&player.c.best.lt(1), milestoneDone: player.c.best.gte(8)||player.c.best.gte(1)||player.c.best.gte(1) }"><h3>8 Boosters</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.b.best.gte(15))"><td v-bind:class="{ milestone: player.b.best.lt(15), milestoneDone: player.b.best.gte(15) }"><h3>15 Boosters</h3><br>You can buy max Boosters</td></tr> <tr v-if="milestoneShown(player.c.best.gte(15))"><td v-bind:class="{ milestone: player.c.best.lt(15), milestoneDone: player.c.best.gte(15) }"><h3>15 Boosters</h3><br>You can buy max Boosters</td></tr>
</table> </table>
</div> </div>
<div v-if="layer=='g'">
<table>
<tr v-if="milestoneShown(player.g.best.gte(8)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>8 Generators</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.g.best.gte(10))"><td v-bind:class="{ milestone: player.g.best.lt(10), milestoneDone: player.g.best.gte(10) }"><h3>10 Generators</h3><br>Gain 100% of Prestige Point gain every second</td></tr>
<tr v-if="milestoneShown(player.g.best.gte(15))"><td v-bind:class="{ milestone: player.g.best.lt(15), milestoneDone: player.g.best.gte(15) }"><h3>15 Generators</h3><br>You can buy max Generators</td></tr>
</table><br><br>
You have {{format(player.g.power)}} Generator Power, which multiplies Point gain by {{format(tmp.genPowEff)}}
</div>
<div v-if="layer=='e'">
<table>
<tr v-if="milestoneShown(player.e.best.gte(2))"><td v-bind:class="{ milestone: player.e.best.lt(2), milestoneDone: player.e.best.gte(2) }"><h3>2 enhance points</h3><br>Keep Booster/Generator milestones on reset</td></tr>
<tr v-if="milestoneShown(player.e.best.gte(10)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>10 enhance points</h3><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.sub(tmp.subbedEnh))}}<br>Multiplies Prestige Point gain by {{format(tmp.enhEff)}}<br>Adds<span v-if="player.q.upgrades.includes(53)"> and multiplies</span> to base of Booster/Generator effects by {{format(tmp.enhEff2)}}</button>
</div>
<div v-if="layer=='t'">
<table>
<tr v-if="milestoneShown(player.t.best.gte(2))"><td v-bind:class="{ milestone: player.t.best.lt(2), milestoneDone: player.t.best.gte(2) }"><h3>2 time capsules</h3><br>Keep Booster/Generator milestones on reset</td></tr>
<tr v-if="milestoneShown(player.t.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>3 time capsules</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.t.best.gte(4))"><td v-bind:class="{ milestone: player.t.best.lt(4), milestoneDone: player.t.best.gte(4) }"><h3>4 time capsules</h3><br>Keep Booster Upgrades on all row 3 resets</td></tr>
<tr v-if="milestoneShown(player.t.best.gte(5), true)"><td v-bind:class="{ milestone: player.t.best.lt(5), milestoneDone: player.t.best.gte(5) }"><h3>5 time capsules</h3><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>
<tr v-if="milestoneShown(player.t.best.gte(12))"><td v-bind:class="{ milestone: player.t.best.lt(12), milestoneDone: player.t.best.gte(12) }"><h3>12 time capsules</h3><br>Boosters reset nothing</td></tr>
</table><br><br>
You have {{format(player.t.energy)}} Time Energy, which multiplies Point gain & Prestige Point gain by {{format(tmp.timeEff)}}<br>
You have {{ format(player.b.points) }} Boosters<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'">
<table>
<tr v-if="milestoneShown(player.s.best.gte(2))"><td v-bind:class="{ milestone: player.s.best.lt(2), milestoneDone: player.s.best.gte(2) }"><h3>2 space energy</h3><br>Keep Booster/Generator milestones on reset</td></tr>
<tr v-if="milestoneShown(player.s.best.gte(3)||player.h.best.gte(1)||player.h.best.gte(1))"><td 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) }"><h3>3 space energy</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.s.best.gte(4))"><td v-bind:class="{ milestone: player.s.best.lt(4), milestoneDone: player.s.best.gte(4) }"><h3>4 space energy</h3><br>Keep Generator Upgrades on all row 3 resets</td></tr>
<tr v-if="milestoneShown(player.s.best.gte(5), true)"><td v-bind:class="{ milestone: player.s.best.lt(5), milestoneDone: player.s.best.gte(5) }"><h3>5 space energy</h3><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>
<tr v-if="milestoneShown(player.s.best.gte(12))"><td v-bind:class="{ milestone: player.s.best.lt(12), milestoneDone: player.s.best.gte(12) }"><h3>12 space energy</h3><br>Generators reset nothing</td></tr>
</table><br><br>
You have {{formatWhole(getSpace())}} Space remaining for Space Buildings.<br>
You have {{ format(player.g.power) }} Generator Power<br><br>
<button onclick="respecSpaceBuildings()" v-bind:class="{ longUpg: true, s: true, can: player.s.unl, locked: !player.s.unl }">Respec Space Buildings</button><br>
<div class="upgRow">
<div v-for="id in tmp.s.trueSbUnl">
<button 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)"><h3>Building {{id}}</h3><br>{{getSpaceBuildingEffDesc(id)}}<br><br>Level: {{formatWhole(tmp.s.sb[id])}}<br>Cost: {{format(getSpaceBuildingCost(id))}} Generator Power</button><br><br>
<button v-if="player.q.best.gte(2500)" v-bind:class="{ longUpg: true, s: true, can: tmp.s.sb[id].gte(1), locked: tmp.s.sb[id].lt(1) }" v-on:click="destroyBuilding(id)">Destroy One</button><br>
<button v-if="player.q.best.gte(2500)" v-bind:class="{ longUpg: true, s: true, can: tmp.s.sb[id].gte(1), locked: tmp.s.sb[id].lt(1) }" v-on:click="destroyBuilding(id, true)">Destroy All</button>
</div>
</div>
</div>
<div v-if="layer=='sb'">
<table><tr v-if="milestoneShown(player.sb.best.gte(3)||player.h.best.gte(1)||player.q.best.gte(1))"><td 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) }"><h3>3 Super-Boosters</h3><br>Keep Prestige Upgrades on reset</td></tr>
<tr v-if="milestoneShown(player.sb.best.gte(4))"><td v-bind:class="{ milestone: player.sb.best.lt(4), milestoneDone: player.sb.best.gte(4) }"><h3>4 Super-Boosters</h3><br>Keep Booster/Generator milestones on reset</td></tr></table>
</div>
<div v-if="layer=='sg'">
<table>
<tr v-if="milestoneShown(player.sg.best.gte(1))"><td v-bind:class="{ milestone: player.sg.best.lt(1), milestoneDone: player.sg.best.gte(1) }"><h3>1 Super-Generator</h3><br>You can buy max Super-Generators, and Super-Generators reset nothing</td></tr>
<tr v-if="milestoneShown(player.sg.best.gte(2), true)"><td v-bind:class="{ milestone: player.sg.best.lt(2), milestoneDone: player.sg.best.gte(2) }"><h3>2 Super-Generators</h3><br>Automatically purchase Super-Generators&nbsp;&nbsp;&nbsp;<button v-if="player.sg.best.gte(2)" class="smallUpg can sg" onclick="toggleAuto('sg')">{{player.sg.auto?"ON":"OFF"}}</button></td></tr>
</table><br><br>
You have {{format(player.sg.power)}} Super-Generator Power, which multiplies the Generator base by {{format(tmp.sGenPowEff)}}
</div>
<div v-if="layer=='h'">
<table><tr v-if="milestoneShown(player.h.best.gte(1))"><td v-bind:class="{ milestone: player.h.best.lt(1), milestoneDone: player.h.best.gte(1) }"><h3>1 Hindrance Spirit</h3><br>Keep Prestige Upgrades on all previous resets, and gain 100x more Enhance Points</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(2))"><td v-bind:class="{ milestone: player.h.best.lt(2), milestoneDone: player.h.best.gte(2) }"><h3>2 Hindrance Spirit</h3><br>Keep all third row milestones on all fourth row resets, and start with your best-ever Space</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(4))"><td v-bind:class="{ milestone: player.h.best.lt(4), milestoneDone: player.h.best.gte(4) }"><h3>4 Hindrance Spirit</h3><br>Keep Time, Enhance, and Space Upgrades on all fourth row resets</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(5), true)"><td v-bind:class="{ milestone: player.h.best.lt(5), milestoneDone: player.h.best.gte(5) }"><h3>5 Hindrance Spirit</h3><br>Automatically purchase Extra Time Capsules&nbsp;&nbsp;&nbsp;<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 v-if="milestoneShown(player.h.best.gte(10))"><td v-bind:class="{ milestone: player.h.best.lt(10), milestoneDone: player.h.best.gte(10) }"><h3>10 Hindrance Spirit</h3><br>Keep Prestige & Super-Booster Upgrades on all fourth row resets</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(15), true)"><td v-bind:class="{ milestone: player.h.best.lt(15), milestoneDone: player.h.best.gte(15) }"><h3>15 Hindrance Spirit</h3><br>Automatically purchase Super-Boosters&nbsp;&nbsp;&nbsp;<button v-if="player.h.best.gte(15)" class="smallUpg can sb" onclick="toggleAuto('sb')">{{player.sb.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.h.best.gte(25))"><td v-bind:class="{ milestone: player.h.best.lt(25), milestoneDone: player.h.best.gte(25) }"><h3>25 Hindrance Spirit</h3><br>Time resets reset nothing</td></tr>
<tr v-if="milestoneShown(player.h.best.gte(2500))"><td v-bind:class="{ milestone: player.h.best.lt(2500), milestoneDone: player.h.best.gte(2500) }"><h3>2,500 Hindrance Spirit</h3><br>Super-Boosters reset nothing</td></tr>
</table>
</div>
<div v-if="layer=='q'">
<table><tr v-if="milestoneShown(player.q.best.gte(1))"><td v-bind:class="{ milestone: player.q.best.lt(1), milestoneDone: player.q.best.gte(1) }"><h3>1 Quirk</h3><br>Keep Prestige Upgrades on all previous resets, and gain 100x more Enhance Points</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(2))"><td v-bind:class="{ milestone: player.q.best.lt(2), milestoneDone: player.q.best.gte(2) }"><h3>2 Quirks</h3><br>You can buy max Time Capsules & Space Energy</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(4))"><td v-bind:class="{ milestone: player.q.best.lt(4), milestoneDone: player.q.best.gte(4) }"><h3>4 Quirks</h3><br>Keep Space Buildings on all fourth row resets</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(5), true)"><td v-bind:class="{ milestone: player.q.best.lt(5), milestoneDone: player.q.best.gte(5) }"><h3>5 Quirks</h3><br>Automatically purchase Enhancers&nbsp;&nbsp;&nbsp;<button v-if="player.q.best.gte(5)" class="smallUpg can e" onclick="toggleAuto('e')">{{player.e.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.q.best.gte(10), true)"><td v-bind:class="{ milestone: player.q.best.lt(10), milestoneDone: player.q.best.gte(10) }"><h3>10 Quirks</h3><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>&nbsp;<button v-if="player.q.best.gte(10)" class="smallUpg can s" onclick="toggleAuto('s')">{{player.s.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.q.best.gte(15))"><td v-bind:class="{ milestone: player.q.best.lt(15), milestoneDone: player.q.best.gte(15) }"><h3>15 Quirks</h3><br>Gain 100% of Enhance Point gain every second</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(25))"><td v-bind:class="{ milestone: player.q.best.lt(25), milestoneDone: player.q.best.gte(25) }"><h3>25 Quirks</h3><br>Space resets reset nothing</td></tr>
<tr v-if="milestoneShown(player.q.best.gte(2500))"><td v-bind:class="{ milestone: player.q.best.lt(2500), milestoneDone: player.q.best.gte(2500) }"><h3>2,500 Quirks</h3><br>You can destroy individual Space Buildings</td></tr>
</table><br><br>
You have {{format(player.q.energy)}} Quirk Energy (generated by Quirk Layers), which multiplies Point & Generator Power gain by {{format(tmp.quirkEff)}}<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 v-if="milestoneShown(player.hb.best.gte(1))"><td v-bind:class="{ milestone: player.hb.best.lt(1), milestoneDone: player.hb.best.gte(1) }"><h3>1 Hyper-Booster</h3><br>You can buy max Super-Boosters</td></tr>
</table>
</div>
<div v-if="layer=='ss'">
<table>
<tr v-if="milestoneShown(player.ss.best.gte(1), true)"><td v-bind:class="{ milestone: player.ss.best.lt(1), milestoneDone: player.ss.best.gte(1) }"><h3>1 Subspace Energy</h3><br>Automatically purchase Space Buildings&nbsp;&nbsp;&nbsp;<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><br><br>
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
</div>
<div v-if="layer=='m'">
<table>
<tr v-if="milestoneShown(player.m.total.gte(1))"><td v-bind:class="{ milestone: player.m.total.lt(1), milestoneDone: player.m.total.gte(1) }"><h3>1 total Magic</h3><br>Keep row 4 milestones on all resets</td></tr>
<tr v-if="milestoneShown(player.m.total.gte(2))"><td v-bind:class="{ milestone: player.m.total.lt(2), milestoneDone: player.m.total.gte(2) }"><h3>2 total Magic</h3><br>Keep Hindrance completions on all resets</td></tr>
<tr v-if="milestoneShown(player.m.total.gte(3))"><td v-bind:class="{ milestone: player.m.total.lt(3), milestoneDone: player.m.total.gte(3) }"><h3>3 total Magic</h3><br>Gain 100% of Hindrance Spirit & Quirk gain every second</td></tr>
<tr v-if="milestoneShown(player.m.total.gte(4), true)"><td v-bind:class="{ milestone: player.m.total.lt(4), milestoneDone: player.m.total.gte(4) }"><h3>4 total Magic</h3><br>Automatically purchase Hyper-Boosters & Subspace&nbsp;&nbsp;&nbsp;<button v-if="player.m.total.gte(4)" class="smallUpg can hb" onclick="toggleAuto('hb')">{{player.hb.auto?"ON":"OFF"}}</button>&nbsp;&nbsp;&nbsp;<button v-if="player.m.total.gte(4)" class="smallUpg can ss" onclick="toggleAuto('ss')">{{player.ss.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.m.total.gte(50), true)"><td v-bind:class="{ milestone: player.m.total.lt(50), milestoneDone: player.m.total.gte(50) }"><h3>50 total Magic</h3><br>Automatically cast Spells&nbsp;&nbsp;&nbsp;<button v-if="player.m.total.gte(50)" class="smallUpg can m" onclick="toggleAuto('m')">{{player.m.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.m.total.gte(2.5e9))"><td v-bind:class="{ milestone: player.m.total.lt(2.5e9), milestoneDone: player.m.total.gte(2.5e9) }"><h3>2.5e9 total Magic</h3><br>Gain 100% of Hex gain every second, and Spells last 4x longer</td></tr>
</table><br><br>
<span v-if="player.sp.total.lt(2)">Note: Activating a Spell costs Magic.<br></span>
<div class="upgRow">
<div v-for="id in tmp.spellsUnl">
<button v-bind:class="{ upg: true, bought: spellActive(id), can: ((player.m.points.gte(player.m.toCast[id]))&&player.m.unl&&!spellActive(id)), locked: (!(player.m.points.gte(player.m.toCast[id])||spellActive(id))), m: true }" v-on:click="activateSpell(id)"><h3>{{SPELL_NAMES[id]}}</h3><br>{{getSpellDesc(id)}}<br><br>Time: {{formatTime(player.m.spellTimes[id])}}</button><br><br>
<div v-if="player.m.upgrades.includes(41)">
<input v-model="player.m.toCast[id]" v-on:focus="focused(true)" v-on:blur="focused(false)" v-on:change="updateToCast(id)"></input><br><br>
</div>
</div>
</div>
You have {{formatWhole(player.m.hexes)}} Hexes, which are multiplying Hindrance Spirit & Quirk gain by {{format(tmp.hexEff)}}
</div>
<div v-if="layer=='ba'">
<table>
<tr v-if="milestoneShown(player.ba.best.gte(1))"><td v-bind:class="{ milestone: player.ba.best.lt(1), milestoneDone: player.ba.best.gte(1) }"><h3>1 Balance Energy</h3><br>Keep row 4 milestones on all resets</td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(2))"><td v-bind:class="{ milestone: player.ba.best.lt(2), milestoneDone: player.ba.best.gte(2) }"><h3>2 Balance Energy</h3><br>Keep Quirk Upgrades on all resets</td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(3), true)"><td v-bind:class="{ milestone: player.ba.best.lt(3), milestoneDone: player.ba.best.gte(3) }"><h3>3 Balance Energy</h3><br>Automatically purchase Quirk Layers&nbsp;&nbsp;&nbsp;<button v-if="player.ba.best.gte(3)" class="smallUpg can q" onclick="toggleAuto('q')">{{player.q.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(5))"><td v-bind:class="{ milestone: player.ba.best.lt(5), milestoneDone: player.ba.best.gte(5) }"><h3>5 Balance Energy</h3><br>Keep Hyper-Booster & Subspace Upgrades on all resets</td></tr>
<tr v-if="milestoneShown(player.ba.best.gte(8))"><td v-bind:class="{ milestone: player.ba.best.lt(8), milestoneDone: player.ba.best.gte(8) }"><h3>8 Balance Energy</h3><br>You can buy max Hyper-Boosters & Subspace Energy, and Hyper-Boosters/Subspace Energy reset nothing</td></tr>
</table><br><br>
You have {{format(player.ba.power)}} Balance Power, which is multiplying Hindrance Spirit & Quirk gain by {{format(tmp.balEff)}}<br>
You have {{format(player.ba.positivity)}} Positivity and {{format(player.ba.negativity)}} Negativity, which are multiplying Balance Power gain by {{format(tmp.balEff2)}}
</div>
<div v-if="layer=='ps'">
<table>
<tr v-if="milestoneShown(player.ps.best.gte(2), true)"><td v-bind:class="{ milestone: player.ps.best.lt(5), milestoneDone: player.ps.best.gte(2) }"><h3>2 Phantom Souls</h3><br>Automatically purchase Phantom Souls&nbsp;&nbsp;&nbsp;<button v-if="player.ps.best.gte(2)" class="smallUpg can ps" onclick="toggleAuto('ps')">{{player.ps.auto?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.ps.best.gte(5))"><td v-bind:class="{ milestone: player.ps.best.lt(5), milestoneDone: player.ps.best.gte(5) }"><h3>5 Phantom Souls</h3><br>You can buy max Phantom Souls, and Phantom Souls reset nothing</td></tr>
</table><br><br>
</div>
<div v-if="layer=='sp'">
<table>
<tr v-if="milestoneShown(player.sp.total.gte(1))"><td v-bind:class="{ milestone: player.sp.total.lt(1), milestoneDone: player.sp.total.gte(1) }"><h3>1 total Super-Prestige Point</h3><br>Upgrades of Rows 1-5 and Hindrances are kept on all resets</td></tr>
<tr v-if="milestoneShown(player.sp.total.gte(2), true)"><td v-bind:class="{ milestone: player.sp.total.lt(2), milestoneDone: player.sp.total.gte(2) }"><h3>2 total Super-Prestige Points</h3><br>Keep Magic Milestones on reset, Spells do not cost Magic, and Magic Upgrade 13's effect can be auto-set to your current Magic&nbsp;&nbsp;&nbsp;<button v-if="player.sp.total.gte(2)" class="smallUpg can m" onclick="toggleAuto('m', 'Ins')">{{player.m.autoIns?"ON":"OFF"}}</button></td></tr>
<tr v-if="milestoneShown(player.sp.total.gte(5))"><td v-bind:class="{ milestone: player.sp.total.lt(5), milestoneDone: player.sp.total.gte(5) }"><h3>5 total Super-Prestige Points</h3><br>Keep Balance Milestones on reset</td></tr>
<tr v-if="milestoneShown(player.sp.total.gte(10))"><td v-bind:class="{ milestone: player.sp.total.lt(10), milestoneDone: player.sp.total.gte(10) }"><h3>10 total Super-Prestige Points</h3><br>Gain 100% of Magic & Balance Power gain every second</td></tr>
</table>
</div>
<div v-if="layer=='l'">
<br><br>
You have {{format(player.l.power)}} Life Power (+{{format(LIFE_BOOSTERS.calcNewPower(1).sub(player.l.power))}}/s),<br>
which is translating to:
<div class="upgRow">
<div v-for="i in tmp.l.lbUnl">
<button v-bind:class="{ upgBig: true, l: true }"><h3>Life Booster {{i}}</h3><br>{{LIFE_BOOSTERS[i].effDesc(tmp.l.lbEff[i])}}<br><br>Boosters: {{formatWhole(tmp.l.lb[i])}}<br>Next at: {{formatWhole(LIFE_BOOSTERS.req(i).ceil())}} Phantom Souls</button>
</div>
</div>
You have {{formatWhole(player.ps.points)}} Phantom Souls, {{getLayerEffDesc("ps")}}
</div>
<div v-if="layer=='hs'">
<table>
<tr v-if="milestoneShown(player.hs.best.gte(2e4))"><td v-bind:class="{ milestone: player.hs.best.lt(2e4), milestoneDone: player.hs.best.gte(2e4) }"><h3>20,000 Hyperspace Energy</h3><br>Gain 1% of Super-Prestige Points gain every second</td></tr>
</table>
<br><br>
You have {{formatWhole(player.ba.points)}} Balance Energy
<br>
<button v-on:click="HYPERSPACE.buy()" v-bind:class="{ upgBig: true, hs: true, can: HYPERSPACE.canBuy(), locked: !HYPERSPACE.canBuy() }">Buy a Hyperspace<br>Amount: {{formatWhole(player.hs.space.sub(player.hs.spent))}}<br><br>Cost: {{formatWhole(HYPERSPACE.cost().hs)}} Hyperspace Energy & {{formatWhole(HYPERSPACE.cost().ba)}} Balance Energy</button>
<br><br>
<button v-on:click="HYPERSPACE.respec()" v-bind:class="{ longUpg: true, hs: true, can: player.hs.unl, locked: !player.hs.unl }">Respec Super-Upgrades</button><br>
<div class="upgRow">
<div v-for="i in tmp.s.trueSbUnl">
<button v-on:click="HYPERSPACE.superUpg(i)" v-bind:class="{ upg: true, hs: true, can: HYPERSPACE.canSuperUpg(i), locked: !HYPERSPACE.canSuperUpg(i) }"><h3>Building {{i}}</h3><br>{{getSpaceBuildingEffDesc(i)}}<br><br>Super-Level: {{formatWhole(tmp.hs.su[i])}} / {{formatWhole(player.hs.superUpgradeCap)}}<br>({{format(tmp.hs.suEff[i].sub(1).times(100))}}% stronger)<br>Cost: 1 Hyperspace</button>
</div>
</div>
<br>
Get {{formatWhole(player.g.points)}} / {{formatWhole(HYPERSPACE.nextCapReq())}} Generators to increase the cap of Super-Upgrades
</div>
<div v-if="layer=='i'">
<table>
<tr v-if="milestoneShown(player.i.best.gte(3))"><td v-bind:class="{ milestone: player.i.best.lt(3), milestoneDone: player.i.best.gte(3) }"><h3>3 Imperium Bricks</h3><br>You can max out Imperium Bricks</td></tr>
</table>
<br><br>
You have {{formatWhole(player.i.lifeBricks)}} Life Bricks<br>
Next Life Brick is at {{format(player.l.power)}} / {{format(IMPERIUM.lifeReq())}} Life Power
<br><br>
<button v-on:click="IMPERIUM.build()" v-bind:class="{ upgBig: true, i: true, can: IMPERIUM.canBuild(), locked: !IMPERIUM.canBuild() }">
<h3>Imperium Buildings</h3><br>
<span v-if="tmp.s.sbUnl.lt(SPACE_BUILDINGS.max)">Build Space Building {{formatWhole(tmp.s.sbUnl.add(1))}}</span>
<span v-if="tmp.s.sbUnl.gte(SPACE_BUILDINGS.max)">Enhance<sup v-if="tmp.s.sbUnl.div(SPACE_BUILDINGS.max).gte(2)">{{formatWhole(tmp.s.sbUnl.div(SPACE_BUILDINGS.max).floor())}}</sup> Space Building {{formatWhole(tmp.s.sbUnl.sub(tmp.s.sbUnl.div(SPACE_BUILDINGS.max).floor().times(SPACE_BUILDINGS.max)).add(1))}}</span>
<br>
Built Buildings: {{formatWhole(player.i.extraBuildings)}}
<br><br>
<span v-if="!player.i.building">Cost: {{IMPERIUM.cost().i}} Imperium Bricks & {{IMPERIUM.cost().l}} Life Bricks</span>
<span v-if="player.i.building">Progress: {{format(player.i.progress * 100)}}%<br>Your {{formatWhole(player.sg.points)}} Super-Generators speed up your progress by {{format(IMPERIUM.sgSpeedBoost())}}x<br><br>Click to cancel building</span>
</button>
<br>
Your Work is currently {{format(tmp.i.work)}}, which reduces the gain power of rows 1 - 5 by {{format(tmp.i.workEff)}}x
<span v-for="i in IMPERIUM.maxCollapseRows"><span v-if="IMPERIUM.collapsed(i)"><br>Your Work also collapses row {{i}} layers by {{format(tmp.i.collapse[i].times(100))}}%</span></span>
</div>
<br><br> <br><br>
<div v-if="LAYER_UPGS[layer]" class="upgTable"> <div v-if="layers[layer].upgrades != undefined" class="upgTable">
<div v-for="row in LAYER_UPGS[layer].rows" class="upgRow"> <div v-for="row in layers[layer].upgrades.rows" class="upgRow">
<div v-for="col in LAYER_UPGS[layer].cols" class="upgAlign"> <div v-for="col in layers[layer].upgrades.cols" class="upgAlign">
<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 }}<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><br><br>Cost: {{ formatWhole(LAYER_UPGS[layer][row*10+col].cost) }} {{LAYER_RES[layer]}}</button> <button v-if="layers[layer].upgrades[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: (!(canAffordUpg(layer, row*10+col))&&!player[layer].upgrades.includes(row*10+col)), can: (canAffordUpg(layer, row*10+col)&&!player[layer].upgrades.includes(row*10+col))}" v-bind:style="{'background-color': layers[layer].color}">{{ layers[layer].upgrades[row*10+col].desc }}<span v-if="layers[layer].upgrades[row*10+col].effect"><br>Currently: {{layers[layer].upgrades[row*10+col].effDisp(layers[layer].upgrades[row*10+col].effect())}}</span><br><br>Cost: {{ formatWhole(layers[layer].upgrades[row*10+col].cost) }} {{(layers[layer].upgrades[row*10+col].currencyDisplayName ? layers[layer].upgrades[row*10+col].currencyDisplayName : layers[layer].resource)}}</button>
</div> </div>
</div> </div>
</div> </div>
<div v-if="LAYER_CHALLS[layer]" class="upgTable"> <div v-if="layers[layer].challs" class="upgTable">
<div v-for="row in LAYER_CHALLS[layer].rows" class="upgRow"> <div v-for="row in layers[layer].challs.rows" class="upgRow">
<div v-for="col in LAYER_CHALLS[layer].cols"> <div v-for="col in layers[layer].challs.cols">
<div v-if="LAYER_CHALLS[layer][row*10+col].unl()" v-bind:class="{hChall: true, done: player[layer].challs.includes(row*10+col), canComplete: (player.points.gte(LAYER_CHALLS[layer][row*10+col].goal)&&tmp.challActive[layer][row*10+col]&&!player[layer].challs.includes(row*10+col))}"> <div v-if="layers[layer].challs[row*10+col].unl()" v-bind:class="{hChall: true, done: player[layer].challs.includes(row*10+col), canComplete: (player.points.gte(layers[layer].challs[row*10+col].goal)&&tmp.challActive[layer][row*10+col]&&!player[layer].challs.includes(row*10+col))}">
<br><h3>{{LAYER_CHALLS[layer][row*10+col].name}}</h3><br><br> <br><h3>{{layers[layer].challs[row*10+col].name}}</h3><br><br>
<button v-bind:class="{ longUpg: true, can: true, [layer]: true }" v-on:click="startChall(layer, row*10+col)">{{player[layer].active==(row*10+col)?(player.points.gte(LAYER_CHALLS[layer][row*10+col].goal)?"Finish":"Exit Early"):(player[layer].challs.includes(row*10+col)?"Completed":"Start")}}</button><br><br> <button v-bind:class="{ longUpg: true, can: true, [layer]: true }" v-on:click="startChall(layer, row*10+col)">{{player[layer].active==(row*10+col)?(player.points.gte(layers[layer].challs[row*10+col].goal)?"Finish":"Exit Early"):(player[layer].challs.includes(row*10+col)?"Completed":"Start")}}</button><br><br>
{{LAYER_CHALLS[layer][row*10+col].desc}}<br> {{layers[layer].challs[row*10+col].desc}}<br>
Goal: {{format(LAYER_CHALLS[layer][row*10+col].goal)}} Points<br> Goal: {{format(layers[layer].challs[row*10+col].goal)}} Points<br>
Reward: {{LAYER_CHALLS[layer][row*10+col].reward}}<br> Reward: {{layers[layer].challs[row*10+col].reward}}<br>
<span v-if="LAYER_CHALLS[layer][row*10+col].effDisp!==undefined">Currently: {{LAYER_CHALLS[layer][row*10+col].effDisp(LAYER_CHALLS[layer][row*10+col].currently())}}</span> <span v-if="layers[layer].challs[row*10+col].effDisp!==undefined">Currently: {{layers[layer].challs[row*10+col].effDisp(layers[layer].challs[row*10+col].effect())}}</span>
</div> </div>
</div> </div>
</div> </div>
@ -691,8 +167,8 @@
<script> <script>
// Mod Identifier, for ~~btpt~~ any userscripts. Consider adding this to your mod! // Mod Identifier, for ~~btpt~~ any userscripts. Consider adding this to your mod!
const modInfo = { const modInfo = {
name: "Prestige Tree", name: "The Candy Tree",
id: "default" id: "crossover"
} }
</script> </script>
</body> </body>

View file

@ -39,75 +39,24 @@ var colors_theme
function drawTree() { function drawTree() {
if (!retrieveCanvasData()) return; if (!retrieveCanvasData()) return;
ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.clearRect(0, 0, canvas.width, canvas.height);
if (layerShown('b')) drawTreeBranch("p", "b") for (layer in layers){
if (layerShown('g')) drawTreeBranch("p", "g") if (layers[layer].layerShown() && layers[layer].branches){
if (layerShown('e')) { for (branch in layers[layer].branches)
drawTreeBranch("b", "e") {
drawTreeBranch("g", "e") drawTreeBranch(layer, layers[layer].branches[branch])
}
}
} }
if (layerShown('t')) drawTreeBranch("b", "t")
if (layerShown('sb')) drawTreeBranch("b", "sb")
if (layerShown('sg')) drawTreeBranch("g", "sg")
if (layerShown('s')) drawTreeBranch("g", "s")
if (layerShown('h')) drawTreeBranch("t", "h")
if (layerShown('q')) drawTreeBranch("e", "q")
if (layerShown('hb')) {
drawTreeBranch("sb", "hb")
drawTreeBranch("t", "hb")
}
if (layerShown('ss')) {
drawTreeBranch("e", "ss")
drawTreeBranch("s", "ss")
}
if (layerShown('hg')) {
drawTreeBranch("sg", "hg")
}
if (layerShown('m')) {
drawTreeBranch("hb", "m")
drawTreeBranch("h", "m")
drawTreeBranch("q", "m")
}
if (layerShown('ba')) {
drawTreeBranch("h", "ba", 2)
drawTreeBranch("q", "ba")
drawTreeBranch("ss", "ba")
}
if (layerShown('sp')) {
drawTreeBranch("m", "sp")
drawTreeBranch("ba", "sp")
}
if (layerShown('l')) {
drawTreeBranch("hb", "l")
drawTreeBranch("m", "l")
}
if (layerShown('ps')) {
drawTreeBranch("h", "ps", 3)
drawTreeBranch("q", "ps", 3)
}
if (layerShown('hs')) {
drawTreeBranch("ss", "hs")
drawTreeBranch("ba", "hs")
}
if (layerShown('i')) {
drawTreeBranch("ss", "i")
drawTreeBranch("sg", "i")
}
if (layerShown('mb')) {
drawTreeBranch("l", "mb")
drawTreeBranch("ps", "mb", 2)
}
if (layerShown('ge')) {
drawTreeBranch("sp", "ge")
}
if (layerShown('ma')) {
drawTreeBranch("hs", "ma")
drawTreeBranch("i", "ma")
}
needCanvasUpdate = false;
} }
function drawTreeBranch(num1, num2, color_id = 1) { // taken from Antimatter Dimensions & adjusted slightly function drawTreeBranch(num1, data) { // taken from Antimatter Dimensions & adjusted slightly
let start = document.getElementById(num1).getBoundingClientRect(); let num2 = data[0]
let color_id = data[1]
if (document.getElementById(num1) == null || document.getElementById(num2) == null)
return
let start = document.getElementById(num1).getBoundingClientRect();
let end = document.getElementById(num2).getBoundingClientRect(); let end = document.getElementById(num2).getBoundingClientRect();
let x1 = start.left + (start.width / 2) + (document.getElementById("treeTab").scrollLeft || document.body.scrollLeft); let x1 = start.left + (start.width / 2) + (document.getElementById("treeTab").scrollLeft || document.body.scrollLeft);
let y1 = start.top + (start.height / 2) + (document.getElementById("treeTab").scrollTop || document.body.scrollTop); let y1 = start.top + (start.height / 2) + (document.getElementById("treeTab").scrollTop || document.body.scrollTop);

3749
js/game.js

File diff suppressed because it is too large Load diff

123
js/layers.js Normal file
View file

@ -0,0 +1,123 @@
var layers = {
c: {
startData() { return {
unl: true,
points: new Decimal(0),
best: new Decimal(0),
upgrades: [],
}},
color: "#4BEC13",
requires() {return new Decimal(10)}, // Can be a function that takes requirement increases into account
resource: "lollipops", // Name of prestige currency
baseResource: "candies", // Name of resource prestige is based on
baseAmount() {return player.points},
type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
exponent: 0.5, // Prestige currency exponent
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
resCeil: false, // True if the resource needs to be rounded up
canBuyMax() {}, // Only needed for static layers
gainMult() {
mult = new Decimal(1)
if (player.c.upgrades.includes(21)) mult = mult.times(2)
if (player.c.upgrades.includes(23)) mult = mult.times(LAYER_UPGS.c[23].currently())
return mult
},
gainExp() {
return new Decimal(1)
},
row: 0,
effect() {return { // Formulas for any boosts inherent to resources in the layer. Can return a single value instead of an object if there is just one effect
waffleBoost: (true == false ? 0 : Decimal.pow(player.c.points, 0.2)),
icecreamCap: (player.c.points * 10)
}},
effectDescription() {
eff = layer.c.effect();
return "which are boosting waffles by "+format(eff.waffleBoost)+" and increasing the Ice Cream cap by "+format(eff.icecreamCap)
},
upgrades: {
rows: 1,
cols: 3,
11: {
desc: "Gain 1 Candy every second.",
cost: new Decimal(1),
unl() { return player.c.unl },
},
12: {
desc: "Candy generation is faster based on your unspent Lollipops.",
cost: new Decimal(1),
unl() { return player.c.upgrades.includes(11) },
effect() {
let ret = player.c.points.add(1).pow(player.c.upgrades.includes(24)?1.1:(player.c.upgrades.includes(14)?0.75:0.5))
if (ret.gte("1e20000000")) ret = ret.sqrt().times("1e10000000")
return ret;
},
effDisp(x) { return format(x)+"x" },
},
13: {
desc: "Make this layer act like you bought it first.",
cost: new Decimal(69),
currencyDisplayName: "candies", // Use if using a nonstandard currency
currencyInternalName: "points", // Use if using a nonstandard currency
currencyLayer: "", // Leave empty if not in a layer "e.g. points"
unl() { return player.c.upgrades.includes(12) },
onPurchase() {
player.c.order = 0
}
},
},
convertToDecimal() {
// Convert any layer-specific values (besides points, total, and best) to Decimal
},
layerShown() {return true}, // Condition for when layer appears
update(diff) {
if (player.c.upgrades.includes(11)) player.points = player.points.add(tmp.pointGen.times(diff)).max(0)
}, // Do any gameloop things (e.g. resource generation) inherent to this layer
automate() {
}, // Do any automation inherent to this layer if appropriate
updateTemp() {
}, // Do any necessary temp updating
resetsNothing() {return false},
incr_order: [], // Array of layer names to have their order increased when this one is first unlocked
},
f: {
startData() { return {
unl: false,
points: new Decimal(0),
best: new Decimal(0),
}},
color: "#FE0102",
requires() {return new Decimal(200)}, // Can be a function that takes requirement increases into account
resource: "butts", // Name of prestige currency
baseResource: "points", // Name of resource prestige is based on
baseAmount() {return player.points},
type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
exponent: 0.5, // Prestige currency exponent
resCeil: false, // True if the resource needs to be rounded up
gainMult() {
mult = new Decimal(1)
},
gainExp() {
return new Decimal(1)
},
row: 1,
effect() {return},
layerShown() {return true}, // Condition for when layer appears
resetsNothing() {return false},
branches: [["c", 1]] // Each pair corresponds to a line added to the tree when this node is unlocked. The letter is the other end of the line, and the number affects the color, 1 is default
},
}
function layerShown(layer){
return layers[layer].layerShown();
}
const LAYERS = Object.keys(layers);
var ROW_LAYERS = {}
for (layer in layers){
row = layers[layer].row
if(!ROW_LAYERS[row]) ROW_LAYERS[row] = {}
ROW_LAYERS[row][layer]=layer;
}

View file

@ -1,132 +1,37 @@
function updateTemp() { function updateTemp() {
if (!tmp.challActive) {
let LAYERS_WITH_CHALLS = Object.keys(LAYER_CHALLS) if (!tmp.challActive) {tmp.challActive = {}}
tmp.challActive = {} for (layer in layers) {
for (let i = 0; i < LAYERS_WITH_CHALLS.length; i++) { if(layers[layer].challs !== undefined){
tmp.challActive[LAYERS_WITH_CHALLS[i]] = {} tmp.challActive[layer] = {}
updateChallTemp(LAYERS_WITH_CHALLS[i]) updateChallTemp(layer)
} }
} }
if (!tmp.layerEffs) tmp.layerEffs = {} if (!tmp.layerEffs) tmp.layerEffs = {}
for (let name in LAYER_EFFS) tmp.layerEffs[name] = LAYER_EFFS[name]() for (layer in layers) tmp.layerEffs[layer] = layers[layer].effect()
if (!tmp.layerReqs) tmp.layerReqs = {} if (!tmp.layerReqs) tmp.layerReqs = {}
for (let name in LAYER_REQS) tmp.layerReqs[name] = getLayerReq(name) for (layer in layers) tmp.layerReqs[layer] = layers[layer].requires()
if (!tmp.gainMults) tmp.gainMults = {} if (!tmp.gainMults) tmp.gainMults = {}
if (!tmp.gainExp) tmp.gainExp = {} if (!tmp.gainExp) tmp.gainExp = {}
if (!tmp.resetGain) tmp.resetGain = {} if (!tmp.resetGain) tmp.resetGain = {}
if (!tmp.nextAt) tmp.nextAt = {} if (!tmp.nextAt) tmp.nextAt = {}
if (!tmp.layerAmt) tmp.layerAmt = {} if (!tmp.layerAmt) tmp.layerAmt = {}
for (let i in LAYERS) { for (layer in layers) {
tmp.layerAmt[LAYERS[i]] = getLayerAmt(LAYERS[i]) tmp.layerAmt[layer] = layers[layer].baseAmount()
tmp.gainMults[LAYERS[i]] = getLayerGainMult(LAYERS[i]) tmp.gainMults[layer] = layers[layer].gainMult()
tmp.gainExp[LAYERS[i]] = getLayerGainExp(LAYERS[i]) tmp.gainExp[layer] = layers[layer].gainExp()
tmp.resetGain[LAYERS[i]] = getResetGain(LAYERS[i]) tmp.resetGain[layer] = getResetGain(layer)
tmp.nextAt[LAYERS[i]] = getNextAt(LAYERS[i]) tmp.nextAt[layer] = getNextAt(layer)
} }
tmp.pointGen = getPointGen() tmp.pointGen = getPointGen()
tmp.scaling12b = getScaling12Boosters() for (layer in layers){
if (layers[layer].updateTemp) layers[layer].updateTemp()
tmp.atbb = addToBoosterBase()
tmp.atgb = addToGenBase()
tmp.genPowEff = getGenPowerEff()
tmp.enhPow = getEnhancerPow()
tmp.enhEff = getEnhancerEff()
tmp.enhEff2 = getEnhancerEff2()
tmp.subbedEnh = new Decimal(0)
if (tmp.challActive ? tmp.challActive.h[52] : true) {
tmp.subbedEnh = tmp.subbedEnh.add(new Decimal(player.h.time).times(40).add(1).log10().pow(10).max(10)).round()
}
tmp.freeExtCap = getFreeExtCapsules()
tmp.timeEff = getTimeEnergyEff()
tmp.attb = addToTimeBase()
tmp.mttb = multiplyToTimeBase()
if (layerUnl("s")) {
tmp.s = {
sb: {},
sbEff: {}
}
var data = tmp.s
data.sbUnl = getSpaceBuildingsUnl()
data.trueSbUnl = Decimal.min(data.sbUnl, SPACE_BUILDINGS.max).floor().toNumber()
data.sbCostMult = getSpaceBuildingCostMult()
data.sbCostMod = getSpaceBuildingCostMod()
data.sbExtra = getExtraBuildingLevels()
data.sbPow = getSpaceBuildingPow()
data.sbSum = sumValues(player.s.buildings)
for (let i=data.trueSbUnl;i>=1;i--) {
data.sb[i] = fixValue(player.s.buildings[i])
data.sbEff[i] = getSpaceBuildingEff(i)
}
}
tmp.quirkEff = getQuirkEnergyEff()
tmp.qCB = getQuirkLayerCostBase()
tmp.ssEff1 = getSubspaceEff1()
tmp.ssEff2 = getSubspaceEff2()
tmp.ssEff3 = getSubspaceEff3()
tmp.balEff = getBalancePowerEff()
tmp.balEff2 = getBalanceTypesEff()
tmp.baExp = getBalanceEnergyExp()
tmp.hexEff = getHexEff()
tmp.spellsUnl = player.sp.upgrades.includes(13)?4:3
if (!tmp.spellEffs) tmp.spellEffs = {}
for (let i=1;i<=4;i++) tmp.spellEffs[i] = getSpellEff(i)
tmp.sGenPowEff = getSGenPowEff()
if (layerUnl("l")) {
if (!tmp.l) tmp.l = {
lb: {},
lbEff: {}
}
var data = tmp.l
var data2 = LIFE_BOOSTERS
data.lpEff = data2.eff()
data.lbUnl = data2.unl()
for (let i=1;i<=data2.max;i++) {
data.lb[i] = fixValue(player.l.boosters[i])
data.lbEff[i] = data2[i].eff(data.lb[i].times(data.lpEff))
}
}
if (layerUnl("hs")) {
if (!tmp.hs) tmp.hs = {
su: {},
suEff: {}
}
var data = tmp.hs
var data2 = HYPERSPACE
data.eff = data2.eff()
for (let i=1;i<=tmp.s.trueSbUnl;i++) data.su[i] = fixValue(player.hs.superUpgrades[i])
}
if (layerUnl("i")) {
if (!tmp.i) tmp.i = {}
var data = tmp.i
data.work = new Decimal(1)
if (player.i.building) data.work = data.work.add(player.i.extraBuildings.add(1).sqrt().add(1).div(5))
data.workEff = Decimal.pow(2, data.work.sub(1))
data.collapse = {}
for (var i = 1; i <= IMPERIUM.maxCollapseRows; i++) if (data.work.gt(i + 0.5)) data.collapse[i] = data.work.sub(i + 0.5).times(2).min(1)
data.compressed = tmp.s.sbUnl.sub(SPACE_BUILDINGS.max).max(0).floor().toNumber()
} }
} }
@ -134,7 +39,7 @@ function updateChallTemp(layer) {
if (player[layer] === undefined) return if (player[layer] === undefined) return
let data = tmp.challActive[layer] let data = tmp.challActive[layer]
let data2 = LAYER_CHALLS[layer] let data2 = layers[layer].challs
let customActive = data2.active !== undefined let customActive = data2.active !== undefined
for (let row = 1; row <= data2.rows; row++) { for (let row = 1; row <= data2.rows; row++) {
for (let col = 1; col <= data2.cols; col++) { for (let col = 1; col <= data2.cols; col++) {

43
js/v.js
View file

@ -10,15 +10,18 @@ function loadVue() {
showTab(layer) showTab(layer)
}" }"
v-bind:tooltip=" v-bind:tooltip="
layerUnl(layer) ? formatWhole(player[layer].points) + ' ' + LAYER_RES[layer] player[layer].unl ? formatWhole(player[layer].points) + ' ' + layers[layer].resource
: 'Reach ' + formatWhole(tmp.layerReqs[layer]) + ' ' + LAYER_AMT_NAMES[layer] + ' to unlock (You have ' + formatWhole(tmp.layerAmt[layer]) + ' ' + LAYER_AMT_NAMES[layer] + ')' : 'Reach ' + formatWhole(tmp.layerReqs[layer]) + ' ' + layers[layer].baseResource + ' to unlock (You have ' + formatWhole(tmp.layerAmt[layer]) + ' ' + layers[layer].baseResource + ')'
" "
v-bind:class="{ v-bind:class="{
treeNode: true, treeNode: true,
[layer]: true, [layer]: true,
hidden: !layerShown(layer), hidden: !layers[layer].layerShown(),
locked: !layerUnl(layer), locked: !player[layer].unl,
can: layerUnl(layer) can: layerUnl(layer),
}"
v-bind:style="{
'background-color': layers[layer].color,
}"> }">
{{abb}} {{abb}}
</button> </button>
@ -29,6 +32,7 @@ function loadVue() {
data: { data: {
player, player,
tmp, tmp,
layers,
Decimal, Decimal,
format, format,
formatWhole, formatWhole,
@ -36,41 +40,14 @@ function loadVue() {
focused, focused,
getThemeName, getThemeName,
layerUnl, layerUnl,
getLayerEffDesc,
doReset, doReset,
buyUpg, buyUpg,
getEnhancerCost,
getExtCapsuleCost,
getSpace,
getSpaceBuildingsUnl,
getSpaceBuildingCost,
getSpaceBuildingEffDesc,
buyBuilding,
getQuirkLayerCost,
buyQuirkLayer,
startChall, startChall,
milestoneShown, milestoneShown,
destroyBuilding,
getSpellDesc,
activateSpell,
spellActive,
updateToCast,
keepGoing, keepGoing,
VERSION, VERSION,
ENDGAME, ENDGAME,
LAYERS, LAYERS
LAYER_RES,
LAYER_TYPE,
LAYER_UPGS,
LAYER_EFFS,
LAYER_AMT_NAMES,
LAYER_RES_CEIL,
LAYER_CHALLS,
SPACE_BUILDINGS,
SPELL_NAMES,
LIFE_BOOSTERS,
HYPERSPACE,
IMPERIUM
}, },
}) })
} }

131
sampleLayers.js Normal file
View file

@ -0,0 +1,131 @@
var layers = {
c: {
startData() { return {
unl: true,
points: new Decimal(0),
best: new Decimal(0),
upgrades: [],
challs: [],
}},
color: "#4BEC13",
requires() {return new Decimal(10)}, // Can be a function that takes requirement increases into account
resource: "lollipops", // Name of prestige currency
baseResource: "candies", // Name of resource prestige is based on
baseAmount() {return player.points},
type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
exponent: 0.5, // Prestige currency exponent
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
resCeil: false, // True if the resource needs to be rounded up
canBuyMax() {}, // Only needed for static layers
gainMult() {
mult = new Decimal(1)
if (player.c.upgrades.includes(21)) mult = mult.times(2)
if (player.c.upgrades.includes(23)) mult = mult.times(LAYER_UPGS.c[23].currently())
return mult
},
gainExp() {
return new Decimal(1)
},
row: 0,
effect() {return { // Formulas for any boosts inherent to resources in the layer. Can return a single value instead of an object if there is just one effect
waffleBoost: (true == false ? 0 : Decimal.pow(player.c.points, 0.2)),
icecreamCap: (player.c.points * 10)
}},
effectDescription() {
eff = layer.c.effect();
return "which are boosting waffles by "+format(eff.waffleBoost)+" and increasing the Ice Cream cap by "+format(eff.icecreamCap)
},
upgrades: {
rows: 1,
cols: 3,
11: {
desc: "Gain 1 Candy every second.",
cost: new Decimal(1),
unl() { return player.c.unl },
},
12: {
desc: "Candy generation is faster based on your unspent Lollipops.",
cost: new Decimal(1),
unl() { return player.c.upgrades.includes(11) },
effect() {
let ret = player.c.points.add(1).pow(player.c.upgrades.includes(24)?1.1:(player.c.upgrades.includes(14)?0.75:0.5))
if (ret.gte("1e20000000")) ret = ret.sqrt().times("1e10000000")
return ret;
},
effDisp(x) { return format(x)+"x" },
},
13: {
desc: "Make this layer act like you bought it first.",
cost: new Decimal(69),
currencyDisplayName: "candies", // Use if using a nonstandard currency
currencyInternalName: "points", // Use if using a nonstandard currency
currencyLayer: "", // Leave empty if not in a layer "e.g. points"
unl() { return player.c.upgrades.includes(12) },
onPurchase() {
player.c.order = 0
}
},
},
challs: {
rows: 1,
cols: 1,
active(x) {
if (x<71&&x!=42&&x!=52) if (this.active(71)) return true
if (x==11||x==41) if (this.active(51)) return true
if (x==31||x==32) if (this.active(61)) return true
return player.c.active==x;
},
11: {
name: "Skip the Second",
desc: "Boosters and Generator Power do nothing",
unl() { return player.c.best.gt(0) },
goal: new Decimal("1e2400"),
reward: "The generator power effect is raised to the power of 1.25",
},
},
convertToDecimal() {
// Convert any layer-specific values (besides points, total, and best) to Decimal
},
layerShown() {return true}, // Condition for when layer appears
update(diff) {
if (player.c.upgrades.includes(11)) player.points = player.points.add(tmp.pointGen.times(diff)).max(0)
}, // Do any gameloop things (e.g. resource generation) inherent to this layer
automate() {}, // Do any automation inherent to this layer if appropriate
updateTemp() {}, // Do any necessary temp updating
resetsNothing() {return false},
incr_order: [], // Array of layer names to have their order increased when this one is first unlocked
branches: [] // Each pair corresponds to a line added to the tree when this node is unlocked. The letter is the other end of the line, and the number affects the color, 1 is default
},
f: { // This layer contains a more minimal set of things, besides a branch
startData() { return {
unl: false,
points: new Decimal(0),
best: new Decimal(0),
}},
color: "#FE0102",
requires() {return new Decimal(200)},
resource: "stuff",
baseResource: "points",
baseAmount() {return player.points},
type: "normal",
exponent: 0.5,
resCeil: false,
gainMult() {
mult = new Decimal(1)
},
gainExp() {
return new Decimal(1)
},
row: 1,
effect() {return},
layerShown() {return true}, // Condition for when layer appears
resetsNothing() {return false},
branches: [["c", 1]] // Each pair corresponds to a line added to the tree when this node is unlocked. The letter is the other end of the line, and the number affects the color, 1 is default
},
}
function layerShown(layer){
return layers[layer].layerShown();
}
const LAYERS = Object.keys(layers);

230
style.css
View file

@ -167,236 +167,6 @@ h1, h2, h3, b, input {
text-shadow: 0px 0px 10px var(--points); text-shadow: 0px 0px 10px var(--points);
} }
.p {
background-color: #00bfbf;
color: rgba(0, 0, 0, 0.5);
}
.p_txt {
color: #00bfbf;
text-shadow: 0px 0px 10px #00bfbf;
}
.b {
background-color: #415a9e;
color: rgba(0, 0, 0, 0.5);
}
.b_txt {
color: #415a9e;
text-shadow: 0px 0px 10px #415a9e;
}
.g {
background-color: #409c6e;
color: rgba(0, 0, 0, 0.5);
}
.g_txt {
color: #409c6e;
text-shadow: 0px 0px 10px #409c6e;
}
.e {
background-color: #9643a3;
color: rgba(0, 0, 0, 0.5);
}
.e_txt {
color: #9643a3;
text-shadow: 0px 0px 10px #9643a3;
}
.t {
background-color: #3f993d;
color: rgba(0, 0, 0, 0.5);
}
.t_txt {
color: #3f993d;
text-shadow: 0px 0px 10px #3f993d;
}
.s {
background-color: #dfdfdf;
color: rgba(0, 0, 0, 0.5);
}
.s_txt {
color: #dfdfdf;
text-shadow: 0px 0px 10px #dfdfdf;
}
.sb {
background-color: #494b99;
color: rgba(0, 0, 0, 0.5);
}
.sb_txt {
color: #494b99;
text-shadow: 0px 0px 10px #494b99;
}
.h {
background-color: #a14040;
color: rgba(0, 0, 0, 0.5);
}
.h_txt {
color: #a14040;
text-shadow: 0px 0px 10px #a14040;
}
.q {
background-color: #ff2bf2;
color: rgba(0, 0, 0, 0.5);
}
.q_txt {
color: #ff2bf2;
text-shadow: 0px 0px 10px #ff2bf2;
}
.hb {
background-color: #513d94;
color: rgba(0, 0, 0, 0.5);
}
.hb_txt {
color: #513d94;
text-shadow: 0px 0px 10px #513d94;
}
.ss {
background-color: #eff7ff;
color: rgba(0, 0, 0, 0.5);
}
.ss_txt {
color: #eff7ff;
text-shadow: 0px 0px 10px #eff7ff;
}
.hg {
background-color: #3d9989;
color: rgba(0, 0, 0, 0.5);
}
.hg_txt {
color: #3d9989;
text-shadow: 0px 0px 10px #3d9989;
}
.m {
background-color: #eb34c0;
color: rgba(0, 0, 0, 0.5);
}
.m_txt {
color: #eb34c0;
text-shadow: 0px 0px 10px #eb34c0;
}
.ba {
background-color: #ebc88f;
color: rgba(0, 0, 0, 0.5);
}
.ba_txt {
color: #ebc88f;
text-shadow: 0px 0px 10px #ebc88f;
}
.sg {
background-color: #3d997a;
color: rgba(0, 0, 0, 0.5);
}
.sg_txt {
color: #3d997a;
text-shadow: 0px 0px 10px #3d997a;
}
.sp {
background-color: #00a7bf;
color: rgba(0, 0, 0, 0.5);
}
.sp_txt {
color: #00a7bf;
text-shadow: 0px 0px 10px #00a7bf;
}
.l {
background-color: #7fbf7f;
color: rgba(0, 0, 0, 0.5);
}
.l_txt {
color: #7fbf7f;
text-shadow: 0px 0px 10px #7fbf7f;
}
.ps {
background-color: #b38fbf;
color: rgba(0, 0, 0, 0.5);
}
.ps_txt {
color: #b38fbf;
text-shadow: 0px 0px 10px #b38fbf;
}
.hs {
background-color: #dfdfff;
color: rgba(0, 0, 0, 0.5);
}
.hs_txt {
color: #dfdfff;
text-shadow: 0px 0px 10px #dfdfff;
}
.i {
background-color: #e5dab7;
color: rgba(0, 0, 0, 0.5);
}
.i_txt {
color: #e5dab7;
text-shadow: 0px 0px 10px #e5dab7;
}
.mb {
background-color: #ff9f7f;
color: rgba(0, 0, 0, 0.5);
}
.mb_txt {
color: #ff9f7f;
text-shadow: 0px 0px 10px #ff9f7f;
}
.ge {
background-color: #bfbfbf;
color: rgba(0, 0, 0, 0.5);
}
.ge_txt {
color: #bfbfbf;
text-shadow: 0px 0px 10px #bfbfbf;
}
.ma {
background-color: #9f9f9f;
color: rgba(0, 0, 0, 0.5);
}
.ma_txt {
color: #9f9f9f;
text-shadow: 0px 0px 10px #9f9f9f;
}
#optionWheel { #optionWheel {
position: absolute; position: absolute;
top: 0px; top: 0px;