2020-08-19 02:50:24 +00:00
<!DOCTYPE html>
< head >
< title > The Prestige Tree< / title >
< link rel = "stylesheet" type = "text/css" href = "style.css" / >
< script src = "https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > < / script >
< script type = "text/javascript" src = "js/break_eternity.min.js" > < / script >
2020-08-21 19:02:34 +00:00
< script type = "text/javascript" src = "js/temp.js" > < / script >
2020-08-19 02:50:24 +00:00
< script type = "text/javascript" src = "js/game.js" > < / script >
< script type = "text/javascript" src = "js/v.js" > < / script >
< script type = "text/javascript" src = "js/canvas.js" > < / script >
< / head >
< body onload = "load()" >
< div id = "app" >
2020-08-19 22:12:31 +00:00
< div id = "info" v-if = "player.tab=='tree'" onclick = "showTab('info')" > < br > i< / div >
2020-08-19 19:53:14 +00:00
< div class = "vl" > < / div >
2020-08-20 04:55:26 +00:00
< div v-if = "player.tab=='changelog'" class = "col right" >
< button class = "back" onclick = "showTab('tree')" > ←< / button > < br > < br >
< h3 > Pre-Alpha Build 4< / h3 >
< ul >
< li > Implemented/balanced all row 1 & 2 prestige layers< / li >
< li > Added the options/info menus< / li >
< li > Balanced the row 3 prestige layers up to 1e560 points< / li >
< / ul > < br > < br >
< h3 > Alpha Build 4< / h3 >
< ul >
< li > Implemented Auto-Boosters & Auto-Generators< / li >
< li > Fixed a balancing issue with a certain prestige tree path (1e660 -> 1e600)< / li >
< li > Added changelog< / li >
< li > Balanced up to 1e700 with all prestige tree paths< / li >
< / ul > < br > < br >
2020-08-20 20:37:22 +00:00
< 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 >
2020-08-21 03:33:13 +00:00
< 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 >
2020-08-21 19:02:34 +00:00
< 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 >
2020-08-22 01:16:23 +00:00
< h3 > Alpha Build 8< / h3 >
< ul >
2020-08-22 03:59:24 +00:00
< li > Implemented Super-Boosters< / li >
2020-08-22 01:16:23 +00:00
< li > Balanced up to 1e25,600 points< / li >
< / ul > < br > < br >
2020-08-22 03:59:24 +00:00
< 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 >
2020-08-20 04:55:26 +00:00
< / div >
2020-08-19 22:12:31 +00:00
< div v-if = "player.tab=='info'" class = "col right" >
< button class = "back" onclick = "showTab('tree')" > ←< / button > < br > < br > < br > < br > < br >
2020-08-20 04:55:26 +00:00
< div id = "cl" onclick = "showTab('changelog')" > Changelog< / div > < br > < br > < br >
2020-08-19 22:12:31 +00:00
< h3 > Hotkeys< / h3 > < br > < br >
P: Prestige reset< br >
< span v-if = "player.b.unl" > B: Booster reset< / span > < br >
< span v-if = "player.g.unl" > G: Generator reset< / span > < br >
< span v-if = "player.t.unl" > T: Time reset< / span > < br >
< span v-if = "player.e.unl" > E: Enhance reset< / span > < br >
< span v-if = "player.s.unl" > S: Space reset< / span > < br >
2020-08-22 03:59:24 +00:00
< span v-if = "player.sb.unl" > Shift+B: Super-Booster reset< / span > < br >
2020-08-19 22:12:31 +00:00
< / div >
2020-08-19 19:53:14 +00:00
< div v-if = "player.tab=='options'" class = "col right" >
2020-08-19 02:50:24 +00:00
< button class = "back" onclick = "showTab('tree')" > ←< / button > < br > < br > < br > < br > < br >
< table >
< tr >
< td > < button class = "opt" onclick = "save()" > Save< / button > < / td >
< td > < button class = "opt" onclick = "hardReset()" > HARD RESET< / button > < / td >
< / tr >
< tr >
< td > < button class = "opt" onclick = "exportSave()" > Export< / button > < / td >
< td > < button class = "opt" onclick = "importSave()" > Import< / button > < / td >
< / tr >
< tr >
< td > < button class = "opt" onclick = "toggleOpt('autosave')" > Autosave: {{ player.autosave?"ON":"OFF" }}< / button > < / td >
< / tr >
< / table >
< / div >
2020-08-19 19:53:14 +00:00
< div class = "col left" >
2020-08-19 22:20:42 +00:00
< img id = "optionWheel" v-if = "player.tab!='options'" src = "options_wheel.png" onclick = "showTab('options')" > < / img >
< br > You have < h2 > {{format(player.points)}}< / h2 > Points
2020-08-19 02:50:24 +00:00
< br > < br > < br > < br > < br >
< table >
< tr >
2020-08-21 19:02:34 +00:00
< td id = "p" > < button onclick = "showTab('p')" v-bind:tooltip = "(player.points.gte(tmp.layerReqs.p)||player.p.unl) ? (formatWhole(player.p.points)+' prestige points') : ('Reach '+format(tmp.layerReqs.p)+' points to unlock')" v-bind:class = "{ treeNode: true, p: true, locked: (player.points.lt(tmp.layerReqs.p)&&!player.p.unl), can: (player.points.gte(tmp.layerReqs.p)||player.p.unl) }" > P< / button > < / td >
2020-08-19 02:50:24 +00:00
< / tr >
< / table > < table >
< tr >
< td > < button class = "treeNode hidden" > < / button > < / td >
< / tr >
< / table > < table >
< tr >
< td v-if = "player.b.unl||player.g.unl" class = "left" > < br > < br > < img class = "remove" src = "remove.png" onclick = "resetRow(1)" > < / img > < / td >
2020-08-21 19:02:34 +00:00
< td id = "b" v-if = "layerUnl('b')" > < button onclick = "showTab('b')" v-bind:tooltip = "((player.points.gte(tmp.layerReqs.b)||player.b.unl)&&layerUnl('b')) ? (formatWhole(player.b.points)+' boosters') : ('Reach '+format(tmp.layerReqs.b)+' points to unlock')" v-bind:class = "{ treeNode: true, b: true, locked: (player.points.lt(tmp.layerReqs.b)&&!player.b.unl), can: (player.points.gte(tmp.layerReqs.b)||player.b.unl) }" > B< / button > < / td >
< td id = "g" v-if = "layerUnl('g')" > < button onclick = "showTab('g')" v-bind:tooltip = "((player.points.gte(tmp.layerReqs.g)||player.g.unl)&&layerUnl('g')) ? (formatWhole(player.g.points)+' generators') : ('Reach '+format(tmp.layerReqs.g)+' points to unlock')" v-bind:class = "{ treeNode: true, g: true, locked: (player.points.lt(tmp.layerReqs.g)&&!player.g.unl), can: (player.points.gte(tmp.layerReqs.g)||player.g.unl) }" > G< / button > < / td >
2020-08-19 02:50:24 +00:00
< / tr >
< / table > < table >
< tr >
< td > < button class = "treeNode hidden" > < / button > < / td >
< / tr >
< / table > < table >
< tr >
2020-08-22 01:16:23 +00:00
< td v-if = "player.e.unl||player.t.unl||player.s.unl||player.sb.unl" class = "left" > < br > < br > < img class = "remove" src = "remove.png" onclick = "resetRow(2)" > < / img > < / td >
< td id = "sb" v-if = "layerUnl('sb')" > < button onclick = "showTab('sb')" v-bind:tooltip = "((player.b.points.gte(tmp.layerReqs.sb)||player.sb.unl)&&layerUnl('sb')) ? (formatWhole(player.sb.points)+' super-boosters') : ('Reach '+formatWhole(tmp.layerReqs.sb)+' boosters to unlock')" v-bind:class = "{ treeNode: true, sb: true, locked: (player.b.points.lt(tmp.layerReqs.sb)&&!player.sb.unl), can: (player.b.points.gte(tmp.layerReqs.sb)||player.sb.unl) }" > SB< / button > < / td >
2020-08-21 19:02:34 +00:00
< td id = "t" v-if = "layerUnl('t')" > < button onclick = "showTab('t')" v-bind:tooltip = "((player.points.gte(tmp.layerReqs.t)||player.t.unl)&&layerUnl('t')) ? (formatWhole(player.t.points)+' time capsules') : ('Reach '+format(tmp.layerReqs.t)+' points to unlock')" v-bind:class = "{ treeNode: true, t: true, locked: (player.points.lt(tmp.layerReqs.t)&&!player.t.unl), can: (player.points.gte(tmp.layerReqs.t)||player.t.unl) }" > T< / button > < / td >
< td id = "e" v-if = "layerUnl('e')" > < button onclick = "showTab('e')" v-bind:tooltip = "((player.points.gte(tmp.layerReqs.e)||player.e.unl)&&layerUnl('e')) ? (formatWhole(player.e.points)+' enhance points') : ('Reach '+format(tmp.layerReqs.e)+' points to unlock')" v-bind:class = "{ treeNode: true, e: true, locked: (player.points.lt(tmp.layerReqs.e)&&!player.e.unl), can: (player.points.gte(tmp.layerReqs.e)||player.e.unl) }" > E< / button > < / td >
< td id = "s" v-if = "layerUnl('s')" > < button onclick = "showTab('s')" v-bind:tooltip = "((player.points.gte(tmp.layerReqs.s)||player.s.unl)&&layerUnl('s')) ? (formatWhole(player.s.points)+' space energy') : ('Reach '+format(tmp.layerReqs.s)+' points to unlock')" v-bind:class = "{ treeNode: true, s: true, locked: (player.points.lt(tmp.layerReqs.s)&&!player.s.unl), can: (player.points.gte(tmp.layerReqs.s)||player.s.unl) }" > S< / button > < / td >
2020-08-19 02:50:24 +00:00
< / tr >
< / table >
< canvas id = "treeCanvas" class = "canvas" > < / canvas >
< / div >
< div v-for = "layer in LAYERS" >
2020-08-19 19:53:14 +00:00
< div v-if = "player.tab==layer" class = "col right" >
2020-08-19 02:50:24 +00:00
< button class = "back" onclick = "showTab('tree')" > ←< / button > < br > < br > < br >
You have < h2 v-bind:class = "{ [layer+'_txt']: true }" > {{formatWhole(player[layer].points)}}< / h2 > {{LAYER_RES[layer]}}< span v-if = "Object.keys(LAYER_EFFS).includes(layer)" > , {{getLayerEffDesc(layer)}}< / span >
< br > < br >
< div v-if = "layer=='b'" >
< table > < tr > < td v-bind:class = "{ milestone: player.b.best.lt(8), milestoneDone: player.b.best.gte(8) }" > 8 Boosters< br > Keep Prestige Upgrades on reset< / td > < / tr > < tr > < td v-bind:class = "{ milestone: player.b.best.lt(15), milestoneDone: player.b.best.gte(15) }" > 15 Boosters< br > You can buy max Boosters< / td > < / tr > < / table >
< / div >
< div v-if = "layer=='g'" >
2020-08-21 19:02:34 +00:00
You have {{format(player.g.power)}} Generator Power, which multiplies Point gain by {{format(tmp.genPowEff)}}< br > < br >
2020-08-19 02:50:24 +00:00
< table > < tr > < td v-bind:class = "{ milestone: player.g.best.lt(8), milestoneDone: player.g.best.gte(8) }" > 8 Generators< br > Keep Prestige Upgrades on reset< / td > < / tr > < tr > < td v-bind:class = "{ milestone: player.g.best.lt(10), milestoneDone: player.g.best.gte(10) }" > 10 Generators< br > Gain 100% of Prestige Point gain every second< / td > < / tr > < tr > < td v-bind:class = "{ milestone: player.g.best.lt(15), milestoneDone: player.g.best.gte(15) }" > 15 Generators< br > You can buy max Generators< / td > < / tr > < / table >
< / div >
< div v-if = "layer=='e'" >
2020-08-19 19:53:14 +00:00
< table > < tr > < td v-bind:class = "{ milestone: player.e.best.lt(2), milestoneDone: player.e.best.gte(2) }" > 2 enhance points< br > Keep Booster/Generator milestones on reset< / td > < / tr >
< tr > < td v-bind:class = "{ milestone: player.e.best.lt(10), milestoneDone: player.e.best.gte(10) }" > 10 enhance points< br > Keep Prestige Upgrades on reset< / td > < / tr > < / table > < br > < br >
2020-08-21 19:02:34 +00:00
< button v-bind:class = "{ upgBig: true, can: player.e.points.gte(getEnhancerCost()), locked: player.e.points.lt(getEnhancerCost()), e: true }" onclick = "buyEnhancer()" > Buy an Enhancer< br > Cost: {{formatWhole(getEnhancerCost())}} Enhance Points< br > Amount: {{formatWhole(player.e.enhancers)}}< br > Multiplies Prestige Point gain by {{format(tmp.enhEff)}}< br > Adds to base of Booster/Generator effects by {{format(tmp.enhEff2)}}< / button >
2020-08-19 02:50:24 +00:00
< / div >
< div v-if = "layer=='t'" >
2020-08-21 19:02:34 +00:00
You have {{format(player.t.energy)}} Time Energy, which multiplies Point gain & Prestige Point gain by {{format(tmp.timeEff)}}< br > < br >
2020-08-19 19:53:14 +00:00
< table > < tr > < td v-bind:class = "{ milestone: player.t.best.lt(2), milestoneDone: player.t.best.gte(2) }" > 2 time capsules< br > Keep Booster/Generator milestones on reset< / td > < / tr >
< tr > < td v-bind:class = "{ milestone: player.t.best.lt(3), milestoneDone: player.t.best.gte(3) }" > 3 time capsules< br > Keep Prestige Upgrades on reset< / td > < / tr >
2020-08-19 22:12:31 +00:00
< tr > < td v-bind:class = "{ milestone: player.t.best.lt(4), milestoneDone: player.t.best.gte(4) }" > 4 time capsules< br > Keep Booster Upgrades on all row 3 resets< / td > < / tr >
2020-08-20 04:55:26 +00:00
< tr > < td v-bind:class = "{ milestone: player.t.best.lt(5), milestoneDone: player.t.best.gte(5) }" > 5 time capsules< br > Automatically purchase Boosters < button v-if = "player.t.best.gte(5)" class = "smallUpg can b" onclick = "toggleAuto('b')" > {{player.b.auto?"ON":"OFF"}}< / button > < / td > < / tr >
2020-08-21 03:33:13 +00:00
< tr > < td v-bind:class = "{ milestone: player.t.best.lt(12), milestoneDone: player.t.best.gte(12) }" > 12 time capsules< br > Boosters reset nothing< / td > < / tr >
2020-08-19 19:53:14 +00:00
< / table > < br > < br >
2020-08-19 02:50:24 +00:00
< button v-bind:class = "{ upgBig: true, can: (player.b.points.gte(getExtCapsuleCost())&&player.t.unl), locked: (player.b.points.lt(getExtCapsuleCost())||!player.t.unl), t: true }" onclick = "buyExtCapsule()" > Buy an extra Time Capsule< br > Cost: {{formatWhole(getExtCapsuleCost())}} Boosters< br > Amount: {{formatWhole(player.t.extCapsules)}}< / button >
< / div >
< div v-if = "layer=='s'" >
You have {{formatWhole(getSpace())}} Space.< br > < br >
2020-08-19 19:53:14 +00:00
< table > < tr > < td v-bind:class = "{ milestone: player.s.best.lt(2), milestoneDone: player.s.best.gte(2) }" > 2 space energy< br > Keep Booster/Generator milestones on reset< / td > < / tr >
2020-08-19 22:12:31 +00:00
< tr > < td v-bind:class = "{ milestone: player.s.best.lt(3), milestoneDone: player.s.best.gte(3) }" > 3 space energy< br > Keep Prestige Upgrades on reset< / td > < / tr >
< tr > < td v-bind:class = "{ milestone: player.s.best.lt(4), milestoneDone: player.s.best.gte(4) }" > 4 space energy< br > Keep Generator Upgrades on all row 3 resets< / td > < / tr >
2020-08-20 04:55:26 +00:00
< tr > < td v-bind:class = "{ milestone: player.s.best.lt(5), milestoneDone: player.s.best.gte(5) }" > 5 space energy< br > Automatically purchase Generators < button v-if = "player.s.best.gte(5)" class = "smallUpg can g" onclick = "toggleAuto('g')" > {{player.g.auto?"ON":"OFF"}}< / button > < / td > < / tr >
2020-08-21 03:33:13 +00:00
< tr > < td v-bind:class = "{ milestone: player.s.best.lt(12), milestoneDone: player.s.best.gte(12) }" > 12 space energy< br > Generators reset nothing< / td > < / tr >
2020-08-19 22:12:31 +00:00
< / table > < br > < br >
2020-08-19 02:50:24 +00:00
< button onclick = "respecSpaceBuildings()" v-bind:class = "{ longUpg: true, can: player.s.unl, locked: !player.s.unl }" > Respec Space Buildings< / button > < br >
< table > < tr >
2020-08-20 20:37:22 +00:00
< td v-for = "id in 5" >
2020-08-21 19:02:34 +00:00
< button v-if = "tmp.sbUnl>=id" v-bind:class = "{ upg: true, can: (player.g.power.gte(getSpaceBuildingCost(id))&&player.s.unl&&getSpace().gte(1)), locked: (!(player.g.power.gte(getSpaceBuildingCost(id))&&player.s.unl&&getSpace().gte(1))), s: true }" v-on:click = "buyBuilding(id)" > Building {{id}}< br > Level: {{formatWhole(player.s.buildings[id])}}< br > Cost: {{format(getSpaceBuildingCost(id))}} Generator Power< br > Effect: {{getSpaceBuildingEffDesc(id)}}< / button >
2020-08-19 02:50:24 +00:00
< / td >
< / tr > < / table >
< / div >
2020-08-22 01:16:23 +00:00
< div v-if = "layer=='sb'" >
< table > < tr > < td v-bind:class = "{ milestone: player.sb.best.lt(3), milestoneDone: player.sb.best.gte(3) }" > 3 Super-Boosters< br > Keep Prestige Upgrades on reset< / td > < / tr > < / table >
2020-08-22 03:59:24 +00:00
< table > < tr > < td v-bind:class = "{ milestone: player.sb.best.lt(7), milestoneDone: player.sb.best.gte(7) }" > 7 Super-Boosters< br > Keep Booster/Generator milestones on reset< / td > < / tr > < / table >
2020-08-22 01:16:23 +00:00
< / div >
2020-08-19 02:50:24 +00:00
< br > < br > < br >
2020-08-22 01:16:23 +00:00
< button v-if = "LAYER_TYPE[layer]=='normal'" v-bind:class = "{ [layer]: true, reset: true, locked: tmp.layerAmt[layer].lt(tmp.layerReqs[layer]), can: tmp.layerAmt[layer].gte(tmp.layerReqs[layer]) }" v-on:click = "doReset(layer)" > +{{formatWhole(tmp.resetGain[layer])}} {{LAYER_RES[layer]}}< br > Next at {{ format(tmp.nextAt[layer]) }} {{ LAYER_AMT_NAMES[layer] }}< / button >
< button v-if = "LAYER_TYPE[layer]=='static'" v-bind:class = "{ [layer]: true, reset: true, locked: tmp.layerAmt[layer].lt(tmp.nextAt[layer]), can: tmp.layerAmt[layer].gte(tmp.nextAt[layer]) }" v-on:click = "doReset(layer)" > +{{formatWhole(tmp.resetGain[layer])}} {{LAYER_RES[layer]}}< br > Req: {{format(tmp.nextAt[layer])}} {{ LAYER_AMT_NAMES[layer] }}< / button >
2020-08-19 02:50:24 +00:00
< br > < br > < br >
< table >
< tr v-for = "row in LAYER_UPGS[layer].rows" >
< td v-for = "col in LAYER_UPGS[layer].cols" > < button v-if = "LAYER_UPGS[layer][row*10+col].unl()" v-on:click = "buyUpg(layer, row*10+col)" v-bind:class = "{ [layer]: true, upg: true, bought: player[layer].upgrades.includes(row*10+col), locked: (player[layer].points.lt(LAYER_UPGS[layer][row*10+col].cost)&&!player[layer].upgrades.includes(row*10+col)), can: (player[layer].points.gte(LAYER_UPGS[layer][row*10+col].cost)&&!player[layer].upgrades.includes(row*10+col)) }" > {{ LAYER_UPGS[layer][row*10+col].desc }}< br > Cost: {{ formatWhole(LAYER_UPGS[layer][row*10+col].cost) }} {{LAYER_RES[layer]}}< span v-if = "LAYER_UPGS[layer][row*10+col].currently" > < br > Currently: {{LAYER_UPGS[layer][row*10+col].effDisp(LAYER_UPGS[layer][row*10+col].currently())}}< / span > < / button > < / td >
< / tr >
< / table >
2020-08-19 19:53:14 +00:00
< br > < br > < br > < br >
2020-08-19 02:50:24 +00:00
< / div >
< / div >
< / div >
< / body >