From 37e07e9b45c55f0bff8a76bbaae8062e68be7a7c Mon Sep 17 00:00:00 2001
From: Jacorb90 <39597610+Jacorb90@users.noreply.github.com>
Date: Tue, 18 Aug 2020 22:50:24 -0400
Subject: [PATCH] Pre-Alpha Build for you greedy gamers
---
README.md | 2 +-
index.html | 104 +++++
js/break_eternity.min.js | 1 +
js/canvas.js | 53 +++
js/game.js | 819 +++++++++++++++++++++++++++++++++++++++
js/v.js | 34 ++
options_wheel.JPG | Bin 0 -> 2651 bytes
remove.png | Bin 0 -> 5047 bytes
style.css | 286 ++++++++++++++
9 files changed, 1298 insertions(+), 1 deletion(-)
create mode 100644 index.html
create mode 100644 js/break_eternity.min.js
create mode 100644 js/canvas.js
create mode 100644 js/game.js
create mode 100644 js/v.js
create mode 100644 options_wheel.JPG
create mode 100644 remove.png
create mode 100644 style.css
diff --git a/README.md b/README.md
index 917ce9c..c6e1b8e 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
# Prestige-Tree
-A tree of prestige upgrades (unfinished)
+A tree of prestige upgrades (alpha)
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b202647
--- /dev/null
+++ b/index.html
@@ -0,0 +1,104 @@
+
+
+ The Prestige Tree
+
+
+
+
+
+
+
+
+
+
+
You have
{{format(player.points)}}
Points
+
+
+
+
+ |
+ |
+
+
+ |
+ |
+
+
+ |
+
+
+
+
+
+
+
+
|
+ |
+ |
+
+
+
+
|
+ |
+ |
+ |
+
+
+
+
+
+
+
+ You have
{{formatWhole(player[layer].points)}}
{{LAYER_RES[layer]}}
, {{getLayerEffDesc(layer)}}
+
+
+
8 Boosters Keep Prestige Upgrades on reset |
15 Boosters You can buy max Boosters |
+
+
+ You have {{format(player.g.power)}} Generator Power, which multiplies Point gain by {{format(getGenPowerEff())}}
+
8 Generators Keep Prestige Upgrades on reset |
10 Generators Gain 100% of Prestige Point gain every second |
15 Generators You can buy max Generators |
+
+
+
2 enhance points Keep Booster/Generator milestones on reset |
+
+
+
+ You have {{format(player.t.energy)}} Time Energy, which multiplies Point gain & Prestige Point gain by {{format(getTimeEnergyEff())}}
+
2 time capsules Keep Booster/Generator milestones on reset |
+
+
+
+ You have {{formatWhole(getSpace())}} Space.
+
2 space energy Keep Booster/Generator milestones on reset |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/js/break_eternity.min.js b/js/break_eternity.min.js
new file mode 100644
index 0000000..748a0bf
--- /dev/null
+++ b/js/break_eternity.min.js
@@ -0,0 +1 @@
+"use strict";function _instanceof(t,r){return null!=r&&"undefined"!=typeof Symbol&&r[Symbol.hasInstance]?!!r[Symbol.hasInstance](t):t instanceof r}function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(t,r){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(t=t||self).Decimal=r()}(void 0,function(){var t=Math.log10(9e15),r=function(){for(var t=[],r=-323;r<=308;r++)t.push(Number("1e"+r));return function(r){return t[r+323]}}(),i=function(t){return h.fromValue_noAlloc(t)},e=function(t,r,i){return h.fromComponents(t,r,i)},n=function(t,r,i){return h.fromComponents_noNormalize(t,r,i)},a=function(t,r){var i=r+1,e=Math.ceil(Math.log10(Math.abs(t))),n=Math.round(t*Math.pow(10,i-e))*Math.pow(10,e-i);return parseFloat(n.toFixed(Math.max(i-e,0)))},s=function(t){return Math.sign(t)*Math.log10(Math.abs(t))},o=function(t){var r,i,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e-10;if(!Number.isFinite(t))return t;if(0===t)return t;if(1===t)return.5671432904097838;r=t<10?0:Math.log(t)-Math.log(Math.log(t));for(var n=0;n<100;++n){if(i=(t*Math.exp(-r)+r*r)/(r+1),Math.abs(i-r)1&&void 0!==arguments[1]?arguments[1]:2,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:n(1,0,1);return i(t).tetrate(r,e)},h.iteratedexp=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:n(1,0,1);return i(t).iteratedexp(r,e)},h.iteratedlog=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return i(t).iteratedlog(r,e)},h.layeradd10=function(t,r){return i(t).layeradd10(r)},h.layeradd=function(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;return i(t).layeradd(r,e)},h.slog=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return i(t).slog(r)},h.lambertw=function(t){return i(t).lambertw()},h.ssqrt=function(t){return i(t).ssqrt()},h.pentate=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:n(1,0,1);return i(t).pentate(r,e)},h.affordGeometricSeries=function(t,r,e,n){return this.affordGeometricSeries_core(i(t),i(r),i(e),n)},h.sumGeometricSeries=function(t,r,e,n){return this.sumGeometricSeries_core(t,i(r),i(e),n)},h.affordArithmeticSeries=function(t,r,e,n){return this.affordArithmeticSeries_core(i(t),i(r),i(e),i(n))},h.sumArithmeticSeries=function(t,r,e,n){return this.sumArithmeticSeries_core(i(t),i(r),i(e),i(n))},h.efficiencyOfPurchase=function(t,r,e){return this.efficiencyOfPurchase_core(i(t),i(r),i(e))},h.randomDecimalForTesting=function(t){if(20*Math.random()<1)return n(0,0,0);var r=Math.random()>.5?1:-1;if(20*Math.random()<1)return n(r,0,1);var i=Math.floor(Math.random()*(t+1)),a=0===i?616*Math.random()-308:16*Math.random();Math.random()>.9&&(a=Math.trunc(a));var s=Math.pow(10,a);return Math.random()>.9&&(s=Math.trunc(s)),e(r,i,s)},h.affordGeometricSeries_core=function(t,r,i,e){var n=r.mul(i.pow(e));return h.floor(t.div(n).mul(i.sub(1)).add(1).log10().div(i.log10()))},h.sumGeometricSeries_core=function(t,r,i,e){return r.mul(i.pow(e)).mul(h.sub(1,i.pow(t))).div(h.sub(1,i))},h.affordArithmeticSeries_core=function(t,r,i,e){var n=r.add(e.mul(i)).sub(i.div(2)),a=n.pow(2);return n.neg().add(a.add(i.mul(t).mul(2)).sqrt()).div(i).floor()},h.sumArithmeticSeries_core=function(t,r,i,e){var n=r.add(e.mul(i));return t.div(2).mul(n.mul(2).plus(t.sub(1).mul(i)))},h.efficiencyOfPurchase_core=function(t,r,i){return t.div(r).add(t.div(i))},h.prototype.normalize=function(){if(0===this.sign||0===this.mag&&0===this.layer)return this.sign=0,this.mag=0,this.layer=0,this;if(0===this.layer&&this.mag<0&&(this.mag=-this.mag,this.sign=-this.sign),0===this.layer&&this.mag<1/9e15)return this.layer+=1,this.mag=Math.log10(this.mag),this;var r=Math.abs(this.mag),i=Math.sign(this.mag);if(r>=9e15)return this.layer+=1,this.mag=i*Math.log10(r),this;for(;r0;)this.layer-=1,0===this.layer?this.mag=Math.pow(10,this.mag):(this.mag=i*Math.pow(10,r),r=Math.abs(this.mag),i=Math.sign(this.mag));return 0===this.layer&&(this.mag<0?(this.mag=-this.mag,this.sign=-this.sign):0===this.mag&&(this.sign=0)),this},h.prototype.fromComponents=function(t,r,i){return this.sign=t,this.layer=r,this.mag=i,this.normalize(),this},h.prototype.fromComponents_noNormalize=function(t,r,i){return this.sign=t,this.layer=r,this.mag=i,this},h.prototype.fromMantissaExponent=function(t,r){return this.layer=1,this.sign=Math.sign(t),t=Math.abs(t),this.mag=r+Math.log10(t),this.normalize(),this},h.prototype.fromMantissaExponent_noNormalize=function(t,r){return this.fromMantissaExponent(t,r),this},h.prototype.fromDecimal=function(t){return this.sign=t.sign,this.layer=t.layer,this.mag=t.mag,this},h.prototype.fromNumber=function(t){return this.mag=Math.abs(t),this.sign=Math.sign(t),this.layer=0,this.normalize(),this};h.prototype.fromString=function(t){var r=(t=t.replace(",","")).split("^^^");if(2===r.length){var n=parseFloat(r[0]),a=parseFloat(r[1]),o=1;if(2===(l=r[1].split(";")).length){o=parseFloat(l[1]);isFinite(o)||(o=1)}if(isFinite(n)&&isFinite(a)){var u=h.pentate(n,a,o);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,this}}var g=t.split("^^");if(2===g.length){var l;n=parseFloat(g[0]),a=parseFloat(g[1]);if(2===(l=g[1].split(";")).length){o=parseFloat(l[1]);isFinite(o)||(o=1)}if(isFinite(n)&&isFinite(a)){u=h.tetrate(n,a,o);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,this}}var m,f=t.split("^");if(2===f.length){n=parseFloat(f[0]);var c=parseFloat(f[1]);if(isFinite(n)&&isFinite(c)){u=h.pow(n,c);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,this}}if(2===(m=(t=t.trim().toLowerCase()).split("pt")).length){n=10,a=parseFloat(m[0]),m[1]=m[1].replace("(",""),m[1]=m[1].replace(")","");o=parseFloat(m[1]);if(isFinite(o)||(o=1),isFinite(n)&&isFinite(a)){u=h.tetrate(n,a,o);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,this}}if(2===(m=t.split("p")).length){n=10,a=parseFloat(m[0]),m[1]=m[1].replace("(",""),m[1]=m[1].replace(")","");o=parseFloat(m[1]);if(isFinite(o)||(o=1),isFinite(n)&&isFinite(a)){u=h.tetrate(n,a,o);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,this}}var p=t.split("e"),y=p.length-1;if(0===y){var d=parseFloat(t);if(isFinite(d))return this.fromNumber(d)}else if(1===y){d=parseFloat(t);if(isFinite(d)&&0!==d)return this.fromNumber(d)}var M=t.split("e^");if(2===M.length){this.sign=1,"-"==M[0].charAt(0)&&(this.sign=-1);for(var b="",N=0;N=43&&v<=57||101===v))return this.layer=parseFloat(b),this.mag=parseFloat(M[1].substr(N+1)),this.normalize(),this;b+=M[1].charAt(N)}}if(y<1)return this.sign=0,this.layer=0,this.mag=0,this;var _=parseFloat(p[0]);if(0===_)return this.sign=0,this.layer=0,this.mag=0,this;c=parseFloat(p[p.length-1]);if(y>=2){var F=parseFloat(p[p.length-2]);isFinite(F)&&(c*=Math.sign(F),c+=s(F))}if(isFinite(_))if(1===y)this.sign=Math.sign(_),this.layer=1,this.mag=c+Math.log10(Math.abs(_));else{if(this.sign=Math.sign(_),this.layer=y,2===y){u=h.mul(e(1,2,c),i(_));return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,this}this.mag=c}else this.sign="-"===p[0]?-1:1,this.layer=y,this.mag=c;return this.normalize(),this},h.prototype.fromValue=function(t){return _instanceof(t,h)?this.fromDecimal(t):"number"==typeof t?this.fromNumber(t):"string"==typeof t?this.fromString(t):(this.sign=0,this.layer=0,this.mag=0,this)},h.prototype.toNumber=function(){return Number.isFinite(this.layer)?0===this.layer?this.sign*this.mag:1===this.layer?this.sign*Math.pow(10,this.mag):this.mag>0?this.sign>0?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:0:Number.NaN},h.prototype.mantissaWithDecimalPlaces=function(t){return isNaN(this.m)?Number.NaN:0===this.m?0:a(this.m,t)},h.prototype.magnitudeWithDecimalPlaces=function(t){return isNaN(this.mag)?Number.NaN:0===this.mag?0:a(this.mag,t)},h.prototype.toString=function(){return 0===this.layer?this.mag<1e21&&this.mag>1e-7||0===this.mag?(this.sign*this.mag).toString():this.m+"e"+this.e:1===this.layer?this.m+"e"+this.e:this.layer<=5?(-1===this.sign?"-":"")+"e".repeat(this.layer)+this.mag:(-1===this.sign?"-":"")+"(e^"+this.layer+")"+this.mag},h.prototype.toExponential=function(t){return 0===this.layer?(this.sign*this.mag).toExponential(t):this.toStringWithDecimalPlaces(t)},h.prototype.toFixed=function(t){return 0===this.layer?(this.sign*this.mag).toFixed(t):this.toStringWithDecimalPlaces(t)},h.prototype.toPrecision=function(t){return this.e<=-7?this.toExponential(t-1):t>this.e?this.toFixed(t-this.exponent-1):this.toExponential(t-1)},h.prototype.valueOf=function(){return this.toString()},h.prototype.toJSON=function(){return this.toString()},h.prototype.toStringWithDecimalPlaces=function(t){return 0===this.layer?this.mag<1e21&&this.mag>1e-7||0===this.mag?(this.sign*this.mag).toFixed(t):a(this.m,t)+"e"+a(this.e,t):1===this.layer?a(this.m,t)+"e"+a(this.e,t):this.layer<=5?(-1===this.sign?"-":"")+"e".repeat(this.layer)+a(this.mag,t):(-1===this.sign?"-":"")+"(e^"+this.layer+")"+a(this.mag,t)},h.prototype.abs=function(){return n(0===this.sign?0:1,this.layer,this.mag)},h.prototype.neg=function(){return n(-this.sign,this.layer,this.mag)},h.prototype.negate=function(){return this.neg()},h.prototype.negated=function(){return this.neg()},h.prototype.sign=function(){return this.sign},h.prototype.sgn=function(){return this.sign},h.prototype.round=function(){return this.mag<0?h.dZero:0===this.layer?e(this.sign,0,Math.round(this.mag)):this},h.prototype.floor=function(){return this.mag<0?h.dZero:0===this.layer?e(this.sign,0,Math.floor(this.mag)):this},h.prototype.ceil=function(){return this.mag<0?h.dZero:0===this.layer?e(this.sign,0,Math.ceil(this.mag)):this},h.prototype.trunc=function(){return this.mag<0?h.dZero:0===this.layer?e(this.sign,0,Math.trunc(this.mag)):this},h.prototype.add=function(t){var r,a,s=i(t);if(!Number.isFinite(this.layer))return this;if(!Number.isFinite(s.layer))return s;if(0===this.sign)return s;if(0===s.sign)return this;if(this.sign===-s.sign&&this.layer===s.layer&&this.mag===s.mag)return n(0,0,0);if(this.layer>=2||s.layer>=2)return this.maxabs(s);if(h.cmpabs(this,s)>0?(r=this,a=s):(r=s,a=this),0===r.layer&&0===a.layer)return i(r.sign*r.mag+a.sign*a.mag);var o=r.layer*Math.sign(r.mag),u=a.layer*Math.sign(a.mag);if(o-u>=2)return r;if(0===o&&-1===u){if(Math.abs(a.mag-Math.log10(r.mag))>17)return r;var g=Math.pow(10,Math.log10(r.mag)-a.mag),l=a.sign+r.sign*g;return e(Math.sign(l),1,a.mag+Math.log10(Math.abs(l)))}if(1===o&&0===u){if(Math.abs(r.mag-Math.log10(a.mag))>17)return r;g=Math.pow(10,r.mag-Math.log10(a.mag)),l=a.sign+r.sign*g;return e(Math.sign(l),1,Math.log10(a.mag)+Math.log10(Math.abs(l)))}if(Math.abs(r.mag-a.mag)>17)return r;g=Math.pow(10,r.mag-a.mag),l=a.sign+r.sign*g;return e(Math.sign(l),1,a.mag+Math.log10(Math.abs(l)))},h.prototype.plus=function(t){return this.add(t)},h.prototype.sub=function(t){return this.add(i(t).neg())},h.prototype.subtract=function(t){return this.sub(t)},h.prototype.minus=function(t){return this.sub(t)},h.prototype.mul=function(t){var r,a,s=i(t);if(!Number.isFinite(this.layer))return this;if(!Number.isFinite(s.layer))return s;if(0===this.sign||0===s.sign)return n(0,0,0);if(this.layer===s.layer&&this.mag===-s.mag)return n(this.sign*s.sign,0,1);if(this.layer>s.layer||this.layer==s.layer&&Math.abs(this.mag)>Math.abs(s.mag)?(r=this,a=s):(r=s,a=this),0===r.layer&&0===a.layer)return i(r.sign*a.sign*r.mag*a.mag);if(r.layer>=3||r.layer-a.layer>=2)return e(r.sign*a.sign,r.layer,r.mag);if(1===r.layer&&0===a.layer)return e(r.sign*a.sign,1,r.mag+Math.log10(a.mag));if(1===r.layer&&1===a.layer)return e(r.sign*a.sign,1,r.mag+a.mag);if(2===r.layer&&1===a.layer){var o=e(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(e(Math.sign(a.mag),a.layer-1,Math.abs(a.mag)));return e(r.sign*a.sign,o.layer+1,o.sign*o.mag)}if(2===r.layer&&2===a.layer){o=e(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(e(Math.sign(a.mag),a.layer-1,Math.abs(a.mag)));return e(r.sign*a.sign,o.layer+1,o.sign*o.mag)}throw Error("Bad arguments to mul: "+this+", "+t)},h.prototype.multiply=function(t){return this.mul(t)},h.prototype.times=function(t){return this.mul(t)},h.prototype.div=function(t){var r=i(t);return this.mul(r.recip())},h.prototype.divide=function(t){return this.div(t)},h.prototype.divideBy=function(t){return this.div(t)},h.prototype.dividedBy=function(t){return this.div(t)},h.prototype.recip=function(){return 0===this.mag?h.dNaN:0===this.layer?e(this.sign,0,1/this.mag):e(this.sign,this.layer,-this.mag)},h.prototype.reciprocal=function(){return this.recip()},h.prototype.reciprocate=function(){return this.recip()},h.prototype.cmp=function(t){var r=i(t);return this.sign>r.sign?1:this.sign0?this.layer:-this.layer,n=r.mag>0?r.layer:-r.layer;return e>n?1:er.mag?1:this.mag0?r:this},h.prototype.clamp=function(t,r){return this.max(t).min(r)},h.prototype.clampMin=function(t){return this.max(t)},h.prototype.clampMax=function(t){return this.min(t)},h.prototype.cmp_tolerance=function(t,r){var e=i(t);return this.eq_tolerance(e,r)?0:this.cmp(e)},h.prototype.compare_tolerance=function(t,r){return this.cmp_tolerance(t,r)},h.prototype.eq_tolerance=function(t,r){var e=i(t);if(null==r&&(r=1e-7),this.sign!==e.sign)return!1;if(Math.abs(this.layer-e.layer)>1)return!1;var n=this.mag,a=e.mag;return this.layer>e.layer&&(a=s(a)),this.layer0?e(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):e(1,0,Math.log10(this.mag))},h.prototype.log10=function(){return this.sign<=0?h.dNaN:this.layer>0?e(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):e(this.sign,0,Math.log10(this.mag))},h.prototype.log=function(t){return t=i(t),this.sign<=0?h.dNaN:t.sign<=0?h.dNaN:1===t.sign&&0===t.layer&&1===t.mag?h.dNaN:0===this.layer&&0===t.layer?e(this.sign,0,Math.log(this.mag)/Math.log(t.mag)):h.div(this.log10(),t.log10())},h.prototype.log2=function(){return this.sign<=0?h.dNaN:0===this.layer?e(this.sign,0,Math.log2(this.mag)):1===this.layer?e(Math.sign(this.mag),0,3.321928094887362*Math.abs(this.mag)):2===this.layer?e(Math.sign(this.mag),1,Math.abs(this.mag)+.5213902276543247):e(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))},h.prototype.ln=function(){return this.sign<=0?h.dNaN:0===this.layer?e(this.sign,0,Math.log(this.mag)):1===this.layer?e(Math.sign(this.mag),0,2.302585092994046*Math.abs(this.mag)):2===this.layer?e(Math.sign(this.mag),1,Math.abs(this.mag)+.36221568869946325):e(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))},h.prototype.logarithm=function(t){return this.log(t)},h.prototype.pow=function(t){var r=this,e=i(t);if(0===r.sign)return r;if(1===r.sign&&0===r.layer&&1===r.mag)return r;if(0===e.sign)return n(1,0,1);if(1===e.sign&&0===e.layer&&1===e.mag)return r;var a=r.absLog10().mul(e).pow10();return-1===this.sign&&e.toNumber()%2==1?a.neg():a},h.prototype.pow10=function(){if(!Number.isFinite(this.layer)||!Number.isFinite(this.mag))return h.dNaN;var t=this;if(0===t.layer){var r=Math.pow(10,t.sign*t.mag);if(Number.isFinite(r)&&Math.abs(r)>.1)return e(1,0,r);if(0===t.sign)return h.dOne;t=n(t.sign,t.layer+1,Math.log10(t.mag))}return t.sign>0&&t.mag>0?e(t.sign,t.layer+1,t.mag):t.sign<0&&t.mag>0?e(-t.sign,t.layer+1,-t.mag):h.dOne},h.prototype.pow_base=function(t){return i(t).pow(this)},h.prototype.root=function(t){var r=i(t);return this.pow(r.recip())},h.prototype.factorial=function(){return this.mag<0?this.toNumber().add(1).gamma():0===this.layer?this.add(1).gamma():1===this.layer?h.exp(h.mul(this,h.ln(this).sub(1))):h.exp(this)},h.prototype.gamma=function(){if(this.mag<0)return this.recip();if(0===this.layer){if(this.lt(n(1,0,24)))return i(function(t){if(!isFinite(t))return t;if(t<-50)return t===Math.trunc(t)?Number.NEGATIVE_INFINITY:0;for(var r=1;t<10;)r*=t,++t;var i=.9189385332046727;i+=(.5+(t-=1))*Math.log(t),i-=t;var e=t*t,n=t;return i+=1/(12*n),i+=1/(360*(n*=e)),i+=1/(1260*(n*=e)),i+=1/(1680*(n*=e)),i+=1/(1188*(n*=e)),i+=691/(360360*(n*=e)),i+=7/(1092*(n*=e)),i+=3617/(122400*(n*=e)),Math.exp(i)/r}(this.sign*this.mag));var t=this.mag-1,r=.9189385332046727;r+=(t+.5)*Math.log(t);var e=t*t,a=t,s=12*a,o=1/s,u=(r-=t)+o;if(u===r)return h.exp(r);if((u=(r=u)-(o=1/(s=360*(a*=e))))===r)return h.exp(r);r=u;var g=1/(s=1260*(a*=e));return r+=g,r-=g=1/(s=1680*(a*=e)),h.exp(r)}return 1===this.layer?h.exp(h.mul(this,h.ln(this).sub(1))):h.exp(this)},h.prototype.lngamma=function(){return this.gamma().ln()},h.prototype.exp=function(){return this.mag<0?h.dOne:0===this.layer&&this.mag<=709.7?i(Math.exp(this.sign*this.mag)):0===this.layer?e(1,1,this.sign*Math.log10(Math.E)*this.mag):1===this.layer?e(1,2,this.sign*(Math.log10(.4342944819032518)+this.mag)):e(1,this.layer+1,this.sign*this.mag)},h.prototype.sqr=function(){return this.pow(2)},h.prototype.sqrt=function(){if(0===this.layer)return i(Math.sqrt(this.sign*this.mag));if(1===this.layer)return e(1,2,Math.log10(this.mag)-.3010299956639812);var t=h.div(n(this.sign,this.layer-1,this.mag),n(1,0,2));return t.layer+=1,t.normalize(),t},h.prototype.cube=function(){return this.pow(3)},h.prototype.cbrt=function(){return this.pow(1/3)},h.prototype.tetrate=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n(1,0,1);if(t===Number.POSITIVE_INFINITY){var e=h.ln(this).neg();return e.lambertw().div(e)}if(t<0)return h.iteratedlog(r,this,-t);r=i(r);var a=t-(t=Math.trunc(t));0!==a&&(r.eq(h.dOne)?(++t,r=new h(a)):r=this.eq(10)?r.layeradd10(a):r.layeradd(a,this));for(var s=0;s3)return n(r.sign,r.layer+(t-s-1),r.mag);if(s>100)return r}return r},h.prototype.iteratedexp=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n(1,0,1);return this.tetrate(t,r)},h.prototype.iteratedlog=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(r<0)return h.tetrate(t,-r,this);t=i(t);var e=i(this),n=r-(r=Math.trunc(r));if(e.layer-t.layer>3){var a=Math.min(r,e.layer-t.layer-3);r-=a,e.layer-=a}for(var s=0;s100)return e}return n>0&&n<1&&(e=t.eq(10)?e.layeradd10(-n):e.layeradd(-n,t)),e},h.prototype.slog=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;if(this.mag<0)return h.dNegOne;t=i(t);var r=0,e=i(this);if(e.layer-t.layer>3){var n=e.layer-t.layer-3;r+=n,e.layer-=n}for(var a=0;a<100;++a)if(e.lt(h.dZero))e=h.pow(t,e),r-=1;else{if(e.lte(h.dOne))return i(r+e.toNumber()-1);r+=1,e=h.log(e,t)}return i(r)},h.prototype.layeradd10=function(t){t=h.fromValue_noAlloc(t).toNumber();var r,e=i(this);t>=1&&(t-=r=Math.trunc(t),e.layer+=r);if(t<=-1&&(t-=r=Math.trunc(t),e.layer+=r,e.layer<0))for(var n=0;n<100;++n){if(e.layer++,e.mag=Math.log10(e.mag),!isFinite(e.mag))return e;if(e.layer>=0)break}if(t>0){for(var a=0;Number.isFinite(e.mag)&&e.mag<10;)e.mag=Math.pow(10,e.mag),++a;for(e.mag>1e10&&(e.mag=Math.log10(e.mag),e.layer++),(s=Math.log10(Math.log(1e10)/Math.log(e.mag),10))0;)e.mag=Math.log10(e.mag),--a}else if(t<0){for(a=0;Number.isFinite(e.mag)&&e.mag<10;)e.mag=Math.pow(10,e.mag),++a;var s;for(e.mag>1e10&&(e.mag=Math.log10(e.mag),e.layer++),(s=Math.log10(1/Math.log10(e.mag)))>t&&(e.mag=1e10,e.layer--,t-=s),e.mag=Math.pow(e.mag,Math.pow(10,t));a>0;)e.mag=Math.log10(e.mag),--a}for(;e.layer<0;)e.layer++,e.mag=Math.log10(e.mag);return e.normalize(),e},h.prototype.layeradd=function(t,r){var i=this.slog(r).toNumber()+t;return i>=0?h.tetrate(r,i):Number.isFinite(i)?i>=-1?h.log(h.tetrate(r,i+1),r):void h.log(h.log(h.tetrate(r,i+2),r),r):h.dNaN},h.prototype.lambertw=function(){if(this.lt(-.3678794411710499))throw Error("lambertw is unimplemented for results less than -1, sorry!");return this.mag<0?i(o(this.toNumber())):0===this.layer?i(o(this.sign*this.mag)):1===this.layer?u(this):2===this.layer?u(this):this.layer>=3?n(this.sign,this.layer-1,this.mag):void 0};var u=function(t){var r,i,e,n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e-10;if(!Number.isFinite(t.mag))return t;if(0===t)return t;if(1===t)return.5671432904097838;h.abs(t);r=h.ln(t);for(var s=0;s<100;++s){if(i=h.exp(-r),e=r.sub(t.mul(i)),n=r.sub(e.div(r.add(1).sub(r.add(2).mul(e).div(h.mul(2,r).add(2))))),h.abs(n.sub(r)).lt(h.abs(n).mul(a)))return n;r=n}throw Error("Iteration failed to converge: "+t)};return h.prototype.ssqrt=function(){if(1==this.sign&&this.layer>=3)return n(this.sign,this.layer-1,this.mag);var t=this.ln();return t.div(t.lambertw())},h.prototype.pentate=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n(1,0,1);r=i(r);var e=t-(t=Math.trunc(t));0!==e&&(r.eq(h.dOne)?(++t,r=new h(e)):r=this.eq(10)?r.layeradd10(e):r.layeradd(e,this));for(var a=0;a10)return r}return r},h.prototype.sin=function(){return this.mag<0?this:0===this.layer?i(Math.sin(this.sign*this.mag)):n(0,0,0)},h.prototype.cos=function(){return this.mag<0?h.dOne:0===this.layer?i(Math.cos(this.sign*this.mag)):n(0,0,0)},h.prototype.tan=function(){return this.mag<0?this:0===this.layer?i(Math.tan(this.sign*this.mag)):n(0,0,0)},h.prototype.asin=function(){return this.mag<0?this:0===this.layer?i(Math.asin(this.sign*this.mag)):n(Number.NaN,Number.NaN,Number.NaN)},h.prototype.acos=function(){return this.mag<0?i(Math.acos(this.toNumber())):0===this.layer?i(Math.acos(this.sign*this.mag)):n(Number.NaN,Number.NaN,Number.NaN)},h.prototype.atan=function(){return this.mag<0?this:0===this.layer?i(Math.atan(this.sign*this.mag)):i(Math.atan(Infinity*this.sign))},h.prototype.sinh=function(){return this.exp().sub(this.negate().exp()).div(2)},h.prototype.cosh=function(){return this.exp().add(this.negate().exp()).div(2)},h.prototype.tanh=function(){return this.sinh().div(this.cosh())},h.prototype.asinh=function(){return h.ln(this.add(this.sqr().add(1).sqrt()))},h.prototype.acosh=function(){return h.ln(this.add(this.sqr().sub(1).sqrt()))},h.prototype.atanh=function(){return this.abs().gte(1)?n(Number.NaN,Number.NaN,Number.NaN):h.ln(this.add(1).div(i(1).sub(this))).div(2)},h.prototype.ascensionPenalty=function(t){return 0===t?this:this.root(h.pow(10,t))},h.prototype.egg=function(){return this.add(9)},h.prototype.lessThanOrEqualTo=function(t){return this.cmp(t)<1},h.prototype.lessThan=function(t){return this.cmp(t)<0},h.prototype.greaterThanOrEqualTo=function(t){return this.cmp(t)>-1},h.prototype.greaterThan=function(t){return this.cmp(t)>0},h}();return h.dZero=n(0,0,0),h.dOne=n(1,0,1),h.dNegOne=n(-1,0,1),h.dTwo=n(1,0,2),h.dTen=n(1,0,10),h.dNaN=n(Number.NaN,Number.NaN,Number.NaN),h.dInf=n(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),h.dNegInf=n(-1,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),h.dNumberMax=e(1,0,Number.MAX_VALUE),h.dNumberMin=e(1,0,Number.MIN_VALUE),h});
diff --git a/js/canvas.js b/js/canvas.js
new file mode 100644
index 0000000..9adcf0a
--- /dev/null
+++ b/js/canvas.js
@@ -0,0 +1,53 @@
+var canvas;
+var ctx
+
+window.addEventListener("resize", (_=>resizeCanvas()));
+
+function retrieveCanvasData() {
+ let treeCanv = document.getElementById("treeCanvas")
+ if (treeCanv===undefined||treeCanv===null) return false;
+ canvas = treeCanv;
+ ctx = canvas.getContext("2d");
+ return true;
+}
+
+function resizeCanvas() {
+ if (player.tab!='tree') return
+ if (!retrieveCanvasData()) return
+ canvas.width = 0;
+ canvas.height = 0;
+ canvas.width = document.body.scrollWidth;
+ canvas.height = document.body.scrollHeight;
+ drawTree();
+}
+
+function drawTree() {
+ if (player.tab!='tree') return
+ if (!retrieveCanvasData()) return;
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ if (layerUnl('b')) drawTreeBranch("p", "b")
+ if (layerUnl('g')) drawTreeBranch("p", "g")
+ if (layerUnl('e')) {
+ drawTreeBranch("b", "e")
+ drawTreeBranch("g", "e")
+ }
+ if (layerUnl('t')) drawTreeBranch("b", "t")
+ if (layerUnl('s')) drawTreeBranch("g", "s")
+
+ needCanvasUpdate = false;
+}
+
+function drawTreeBranch(num1, num2) { // taken from Antimatter Dimensions & adjusted slightly
+ let start = document.getElementById(num1).getBoundingClientRect();
+ let end = document.getElementById(num2).getBoundingClientRect();
+ let x1 = start.left + (start.width / 2) + (document.documentElement.scrollLeft || document.body.scrollLeft);
+ let y1 = start.top + (start.height / 2) + (document.documentElement.scrollTop || document.body.scrollTop);
+ let x2 = end.left + (end.width / 2) + (document.documentElement.scrollLeft || document.body.scrollLeft);
+ let y2 = end.top + (end.height / 2) + (document.documentElement.scrollTop || document.body.scrollTop);
+ ctx.lineWidth = 15;
+ ctx.beginPath();
+ ctx.strokeStyle = "white"
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+}
\ No newline at end of file
diff --git a/js/game.js b/js/game.js
new file mode 100644
index 0000000..616f50c
--- /dev/null
+++ b/js/game.js
@@ -0,0 +1,819 @@
+var player;
+var needCanvasUpdate = true;
+
+function getStartPlayer() {
+ return {
+ tab: "tree",
+ time: Date.now(),
+ autosave: true,
+ points: new Decimal(10),
+ p: {
+ unl: false,
+ points: new Decimal(0),
+ best: new Decimal(0),
+ upgrades: [],
+ },
+ b: {
+ unl: false,
+ points: new Decimal(0),
+ best: new Decimal(0),
+ upgrades: [],
+ },
+ g: {
+ unl: false,
+ points: new Decimal(0),
+ power: new Decimal(0),
+ best: new Decimal(0),
+ upgrades: [],
+ },
+ e: {
+ unl: false,
+ order: 0,
+ points: new Decimal(0),
+ best: new Decimal(0),
+ enhancers: new Decimal(0),
+ upgrades: [],
+ },
+ t: {
+ unl: false,
+ order: 0,
+ points: new Decimal(0),
+ best: new Decimal(0),
+ energy: new Decimal(0),
+ extCapsules: new Decimal(0),
+ upgrades: [],
+ },
+ s: {
+ unl: false,
+ order: 0,
+ points: new Decimal(0),
+ best: new Decimal(0),
+ spent: new Decimal(0),
+ buildings: {
+ 1: new Decimal(0),
+ 2: new Decimal(0),
+ 3: new Decimal(0)
+ },
+ upgrades: [],
+ },
+ }
+}
+
+const LAYERS = ["p", "b", "g", "e", "t", "s"]
+
+const LAYER_REQS = {
+ p: new Decimal(10),
+ b: new Decimal(200),
+ g: new Decimal(200),
+ e: new Decimal(1e120),
+ t: new Decimal(1e120),
+ s: new Decimal(1e120),
+}
+
+const LAYER_RES = {
+ p: "prestige points",
+ b: "boosters",
+ g: "generators",
+ e: "enhance points",
+ t: "time capsules",
+ s: "space energy",
+}
+
+const LAYER_TYPE = {
+ p: "normal",
+ b: "static",
+ g: "static",
+ e: "normal",
+ t: "static",
+ s: "static",
+}
+
+const LAYER_EXP = {
+ p: new Decimal(0.5),
+ b: new Decimal(1.25),
+ g: new Decimal(1.25),
+ e: new Decimal(0.02),
+ t: new Decimal(2),
+ s: new Decimal(2),
+}
+
+const LAYER_BASE = {
+ b: new Decimal(5),
+ g: new Decimal(5),
+ t: new Decimal(1e15),
+ s: new Decimal(1e15),
+}
+
+const LAYER_ROW = {
+ p: 0,
+ b: 1,
+ g: 1,
+ e: 2,
+ t: 2,
+ s: 2,
+ future_layer: 3,
+}
+
+const ROW_LAYERS = [
+ ["p"],
+ ["b","g"],
+ ["e","t","s"],
+ ["future_layer"],
+]
+
+const LAYER_EFFS = {
+ b: function() { return Decimal.pow(Decimal.add(2, addToBoosterBase()), player.b.points) },
+ g: function() { return Decimal.pow(Decimal.add(2, addToGenBase()), player.g.points).sub(1).times(getGenPowerGainMult()) },
+ t: function() { return {
+ gain: Decimal.pow(3, player.t.points.plus(player.t.extCapsules)).sub(1),
+ limit: Decimal.pow(2, player.t.points.plus(player.t.extCapsules)).sub(1).times(100),
+ }},
+}
+
+const LAYER_UPGS = {
+ p: {
+ rows: 2,
+ cols: 3,
+ 11: {
+ desc: "Gain 1 Point every second.",
+ cost: new Decimal(1),
+ unl: function() { return player.p.unl },
+ },
+ 12: {
+ desc: "Point generation is faster based on your unspent Prestige Points.",
+ cost: new Decimal(1),
+ unl: function() { return player.p.upgrades.includes(11) },
+ currently: function() { return player.p.points.plus(1).pow(player.g.upgrades.includes(24)?1.1:(player.g.upgrades.includes(14)?0.75:0.5)) },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 13: {
+ desc: "Point generation is faster based on your Point amount.",
+ cost: new Decimal(5),
+ unl: function() { return player.p.upgrades.includes(12) },
+ currently: function() {
+ let ret = player.points.plus(1).log10().pow(0.75).plus(1)
+ if (player.g.upgrades.includes(15)) ret = ret.pow(LAYER_UPGS.g[15].currently())
+ return ret;
+ },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 21: {
+ desc: "Prestige Point gain is doubled.",
+ cost: new Decimal(20),
+ unl: function() { return (player.b.unl||player.g.unl)&&player.p.upgrades.includes(11) },
+ },
+ 22: {
+ desc: "Point generation is faster based on your Prestige Upgrades bought.",
+ cost: new Decimal(75),
+ unl: function() { return (player.b.unl||player.g.unl)&&player.p.upgrades.includes(12) },
+ currently: function() { return Decimal.pow(1.4, player.p.upgrades.length) },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 23: {
+ desc: "Prestige Point gain is boosted by your Point amount.",
+ cost: new Decimal(5e3),
+ unl: function() { return (player.b.unl||player.g.unl)&&player.p.upgrades.includes(13) },
+ currently: function() {
+ let ret = player.points.plus(1).log10().cbrt().plus(1)
+ if (player.g.upgrades.includes(23)) ret = ret.pow(LAYER_UPGS.g[23].currently())
+ return ret;
+ },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ },
+ b: {
+ rows: 2,
+ cols: 3,
+ 11: {
+ desc: "Boosters boost Prestige Point gain.",
+ cost: new Decimal(3),
+ unl: function() { return player.b.unl },
+ currently: function() { return player.b.points.sqrt().plus(1) },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 12: {
+ desc: "Generators add to the Booster effect.",
+ cost: new Decimal(7),
+ unl: function() { return player.g.unl },
+ currently: function() { return player.g.points.plus(1).log10().sqrt().div(3) },
+ effDisp: function(x) { return "+"+format(x)+" to base" },
+ },
+ 13: {
+ desc: "Prestige Points add to the Booster effect.",
+ cost: new Decimal(8),
+ unl: function() { return player.b.best.gte(8) },
+ currently: function() { return player.p.points.plus(1).log10().plus(1).log10().div(3) },
+ effDisp: function(x) { return "+"+format(x)+" to base" },
+ },
+ 21: {
+ desc: "Square the Generator Power effect.",
+ cost: new Decimal(10),
+ unl: function() { return player.b.upgrades.includes(11) && player.b.upgrades.includes(12) },
+ },
+ 22: {
+ desc: "The Generator Power effect is raised to the power of 1.2.",
+ cost: new Decimal(15),
+ unl: function() { return player.b.upgrades.includes(12) && player.b.upgrades.includes(13) },
+ },
+ 23: {
+ desc: "Boosters are cheaper based on your points.",
+ cost: new Decimal(18),
+ unl: function() { return player.b.upgrades.includes(21) || player.b.upgrades.includes(22) },
+ currently: function() { return player.points.plus(1).log10().plus(1).pow(3.2) },
+ effDisp: function(x) { return "/"+format(x) },
+ },
+ },
+ g: {
+ rows: 2,
+ cols: 5,
+ 11: {
+ desc: "Generators boost Prestige Point gain.",
+ cost: new Decimal(3),
+ unl: function() { return player.g.unl },
+ currently: function() { return player.g.points.sqrt().plus(1) },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 12: {
+ desc: "Boosters boost Generator Power gain.",
+ cost: new Decimal(7),
+ unl: function() { return player.b.unl },
+ currently: function() { return player.b.points.plus(1).log10().sqrt().div(3) },
+ effDisp: function(x) { return "+"+format(x)+" to base" },
+ },
+ 13: {
+ desc: "Prestige Points boost Generator Power gain.",
+ cost: new Decimal(8),
+ unl: function() { return player.g.best.gte(8) },
+ currently: function() { return player.p.points.plus(1).log10().plus(1).log10().div(3) },
+ effDisp: function(x) { return "+"+format(x)+" to base" },
+ },
+ 14: {
+ desc: "Prestige Upgrade 2 uses a better formula.",
+ cost: new Decimal(13),
+ unl: function() { return player.g.best.gte(10) },
+ },
+ 15: {
+ desc: "Prestige Upgrade 3 is stronger based on your Generators.",
+ cost: new Decimal(15),
+ unl: function() { return player.g.upgrades.includes(13) },
+ currently: function() { return player.g.points.sqrt().plus(1) },
+ effDisp: function(x) { return "^"+format(x) },
+ },
+ 21: {
+ desc: "Generator Power generates faster based on its amount.",
+ cost: new Decimal(18),
+ unl: function() { return player.g.upgrades.includes(15) },
+ currently: function() { return player.g.power.plus(1).log10().plus(1) },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 22: {
+ desc: "Generators are cheaper based on your Prestige Points.",
+ cost: new Decimal(19),
+ unl: function() { return player.g.upgrades.includes(15) },
+ currently: function() { return player.p.points.plus(1).pow(0.25) },
+ effDisp: function(x) { return "/"+format(x) },
+ },
+ 23: {
+ desc: "Prestige Upgrade 6 is stronger based on your Boosters.",
+ cost: new Decimal(20),
+ unl: function() { return player.b.unl && player.g.upgrades.includes(15) },
+ currently: function() { return player.b.points.pow(0.75).plus(1) },
+ effDisp: function(x) { return "^"+format(x) },
+ },
+ 24: {
+ desc: "Prestige Upgrade 2 uses an even better formula.",
+ cost: new Decimal(22),
+ unl: function() { return player.g.upgrades.includes(14) && (player.g.upgrades.includes(21)||player.g.upgrades.includes(22)) },
+ },
+ 25: {
+ desc: "Prestige Points boost Generator Power gain.",
+ cost: new Decimal(28),
+ unl: function() { return player.g.upgrades.includes(23) && player.g.upgrades.includes(24) },
+ currently: function() { return player.p.points.plus(1).log10().sqrt().plus(1) },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ },
+ e: {
+ rows: 0,
+ cols: 0,
+ },
+ t: {
+ rows: 0,
+ cols: 0,
+ },
+ s: {
+ rows: 0,
+ cols: 0,
+ },
+}
+
+const TAB_REQS = {
+ tree: function() { return true },
+ options: function() { return true },
+ p: function() { return (player.p.unl||player.points.gte(getLayerReq('p')))&&layerUnl('p') },
+ b: function() { return (player.b.unl||player.points.gte(getLayerReq('b')))&&layerUnl('b') },
+ g: function() { return (player.g.unl||player.points.gte(getLayerReq('g')))&&layerUnl('g') },
+ e: function() { return (player.e.unl||player.points.gte(getLayerReq('e')))&&layerUnl('e') },
+ t: function() { return (player.t.unl||player.points.gte(getLayerReq('t')))&&layerUnl('t') },
+ s: function() { return (player.s.unl||player.points.gte(getLayerReq('s')))&&layerUnl('s') },
+}
+
+function getLayerEffDesc(layer) {
+ if (!Object.keys(LAYER_EFFS).includes(layer)) return "???"
+ let eff = LAYER_EFFS[layer]()
+ switch(layer) {
+ case "b":
+ return "translated to a "+format(eff)+"x multiplier to point gain"
+ break;
+ case "g":
+ return "which are generating "+format(eff)+" Generator Power/sec"
+ break;
+ case "t":
+ return "which are generating "+format(eff.gain)+" Time Energy/sec, but with a limit of "+format(eff.limit)+" Time Energy"
+ break;
+ }
+}
+
+function save() {
+ localStorage.setItem("prestige-tree", btoa(JSON.stringify(player)))
+}
+
+function load() {
+ let get = localStorage.getItem("prestige-tree");
+ if (get==null) player = getStartPlayer()
+ else player = JSON.parse(atob(get))
+ player.tab = "tree"
+ checkForVars();
+ convertToDecimal();
+ loadVue();
+}
+
+function exportSave() {
+ let str = btoa(JSON.stringify(player))
+
+ const el = document.createElement("textarea");
+ el.value = str;
+ document.body.appendChild(el);
+ el.select();
+ el.setSelectionRange(0, 99999);
+ document.execCommand("copy");
+ document.body.removeChild(el);
+}
+
+function importSave() {
+ let imported = prompt("Paste your save here")
+ try {
+ player = JSON.parse(atob(imported))
+ save()
+ window.location.reload()
+ } catch(e) {
+ return;
+ }
+}
+
+function checkForVars() {
+ if (player.autosave===undefined) player.autosave = true;
+ if (player.b===undefined) player.b = getStartPlayer().b
+ if (player.g===undefined) player.g = getStartPlayer().g
+ if (player.p.best===undefined) player.p.best = player.p.points
+ if (player.b.best===undefined) player.b.best = player.b.points
+ if (player.g.best===undefined) player.g.best = player.g.points
+ if (player.e === undefined) player.e = getStartPlayer().e
+ if (player.e.order === undefined) player.e.order = 0
+ if (player.t === undefined) player.t = getStartPlayer().t
+ if (player.s === undefined) player.s = getStartPlayer().s
+}
+
+function convertToDecimal() {
+ player.points = new Decimal(player.points)
+ player.p.points = new Decimal(player.p.points)
+ player.p.best = new Decimal(player.p.best)
+ player.b.points = new Decimal(player.b.points)
+ player.b.best = new Decimal(player.b.best)
+ player.g.points = new Decimal(player.g.points)
+ player.g.best = new Decimal(player.g.best)
+ player.g.power = new Decimal(player.g.power)
+ player.e.points = new Decimal(player.e.points)
+ player.e.best = new Decimal(player.e.best)
+ player.e.enhancers = new Decimal(player.e.enhancers)
+ player.t.points = new Decimal(player.t.points)
+ player.t.best = new Decimal(player.t.best)
+ player.t.energy = new Decimal(player.t.energy)
+ player.t.extCapsules = new Decimal(player.t.extCapsules)
+ player.s.points = new Decimal(player.s.points)
+ player.s.best = new Decimal(player.s.best)
+ player.s.spent = new Decimal(player.s.spent)
+ for (let i=1;i<=3;i++) player.s.buildings[i] = new Decimal(player.s.buildings[i])
+}
+
+function toggleOpt(name) {
+ player[name] = !player[name]
+}
+
+function exponentialFormat(num, precision) {
+ let e = num.log10().floor()
+ let m = num.div(Decimal.pow(10, e))
+ return m.toStringWithDecimalPlaces(3)+"e"+e.toStringWithDecimalPlaces(0)
+}
+
+function commaFormat(num, precision) {
+ if (num === null || num === undefined) return "NaN"
+ return num.toStringWithDecimalPlaces(precision).replace(/\B(?=(\d{3})+(?!\d))/g, ",")
+}
+
+function format(decimal, precision=3) {
+ decimal = new Decimal(decimal)
+ if (decimal.gte(1e9)) return exponentialFormat(decimal, precision)
+ else return commaFormat(decimal, precision)
+}
+
+function formatWhole(decimal) {
+ return format(decimal, 0)
+}
+
+function showTab(name) {
+ if (!TAB_REQS[name]()) return
+ player.tab = name
+ if (name=="tree") needCanvasUpdate = true;
+}
+
+function canBuyMax(layer) {
+ switch(layer) {
+ case "b":
+ return player.b.best.gte(15)
+ break;
+ case "g":
+ return player.g.best.gte(15)
+ break;
+ }
+ return false;
+}
+
+function getLayerReq(layer) {
+ let req = LAYER_REQS[layer]
+ switch(layer) {
+ case "b":
+ if (player.g.unl && !player.b.unl) req = req.times(5000)
+ break;
+ case "g":
+ if (player.b.unl && !player.g.unl) req = req.times(5000)
+ break;
+ case "e":
+ req = req.times(Decimal.pow("10^^1000", player.e.order))
+ break;
+ case "t":
+ req = req.times(Decimal.pow("10^^1000", player.t.order))
+ break;
+ case "s":
+ req = req.times(Decimal.pow("10^^1000", player.s.order))
+ break;
+ }
+ return req
+}
+
+function getLayerGainMult(layer) {
+ let mult = new Decimal(1)
+ switch(layer) {
+ case "p":
+ if (player.p.upgrades.includes(21)) mult = mult.times(2)
+ if (player.p.upgrades.includes(23)) mult = mult.times(LAYER_UPGS.p[23].currently())
+ if (player.b.upgrades.includes(11)) mult = mult.times(LAYER_UPGS.b[11].currently())
+ if (player.g.upgrades.includes(11)) mult = mult.times(LAYER_UPGS.g[11].currently())
+ if (player.e.unl) mult = mult.times(getEnhancerEff())
+ if (player.t.unl) mult = mult.times(getTimeEnergyEff())
+ if (player.s.unl) mult = mult.times(getSpaceBuildingEff(1))
+ break;
+ case "b":
+ if (player.b.upgrades.includes(23)) mult = mult.div(LAYER_UPGS.b[23].currently())
+ if (player.s.unl) mult = mult.div(getSpaceBuildingEff(3))
+ break;
+ case "g":
+ if (player.g.upgrades.includes(22)) mult = mult.div(LAYER_UPGS.g[22].currently())
+ if (player.s.unl) mult = mult.div(getSpaceBuildingEff(3))
+ break;
+ }
+ return mult
+}
+
+function getResetGain(layer) {
+ if (LAYER_TYPE[layer]=="static") {
+ if ((!canBuyMax(layer)) || player.points.lt(getLayerReq(layer))) return new Decimal(1)
+ let gain = player.points.div(getLayerReq(layer)).div(getLayerGainMult(layer)).max(1).log(LAYER_BASE[layer]).pow(Decimal.pow(LAYER_EXP[layer], -1))
+ if (gain.gte(12)) gain = gain.times(12).sqrt()
+ return gain.floor().sub(player[layer].points).plus(1).max(1);
+ }
+ if (player.points.lt(getLayerReq(layer))) return new Decimal(0)
+ let gain = player.points.div(getLayerReq(layer)).pow(LAYER_EXP[layer]).times(getLayerGainMult(layer))
+ return gain.floor().max(0);
+}
+
+function getNextAt(layer) {
+ if (LAYER_TYPE[layer]=="static") {
+ let amt = player[layer].points
+ if (amt.gte(12)) amt = amt.pow(2).div(12)
+ let extraCost = Decimal.pow(LAYER_BASE[layer], amt.pow(LAYER_EXP[layer])).times(getLayerGainMult(layer))
+ return extraCost.times(getLayerReq(layer)).max(getLayerReq(layer))
+ } else return getResetGain(layer).plus(1).div(getLayerGainMult(layer)).root(LAYER_EXP[layer]).times(getLayerReq(layer)).max(getLayerReq(layer))
+}
+
+function layerUnl(layer) {
+ switch(layer) {
+ case "p":
+ return true;
+ break;
+ case "b":
+ return player.p.unl;
+ break;
+ case "g":
+ return player.p.unl;
+ break;
+ case "e":
+ return player.b.unl&&player.g.unl;
+ break;
+ case "t":
+ return player.b.unl;
+ break;
+ case "s":
+ return player.g.unl;
+ break;
+ }
+}
+
+function rowReset(row, layer) {
+ let prev = JSON.parse(JSON.stringify(player)) // Deep Copy
+ switch(row) {
+ case 0:
+ player.points = new Decimal(0);
+ break;
+ case 1:
+ player.points = new Decimal(10);
+ player.p.points = new Decimal(0);
+ if (layer=="b"||layer=="g") {
+ if (player[layer].best.lt(8)) player.p.upgrades = [];
+ } else player.p.upgrades = [];
+ player.g.power = new Decimal(0);
+ break;
+ case 2:
+ player.b.points = new Decimal(0);
+ player.b.best = new Decimal(0);
+ player.b.upgrades = [];
+ player.g.points = new Decimal(0);
+ player.g.power = new Decimal(0);
+ player.g.best = new Decimal(0);
+ player.g.upgrades = [];
+ player.t.energy = new Decimal(0);
+ if (layer=="t"||layer=="e"||layer=="s") {
+ if (player[layer].best.gte(2)) {
+ player.b.best = new Decimal(prev.b.best)
+ player.g.best = new Decimal(prev.g.best)
+ }
+ }
+ break;
+ case 3:
+ player.t.points = new Decimal(0);
+ player.t.order = 0
+ player.t.best = new Decimal(0);
+ player.t.upgrades = [];
+ player.t.extCapsules = new Decimal(0);
+ player.e.order = 0
+ player.e.points = new Decimal(0);
+ player.e.best = new Decimal(0);
+ player.e.enhancers = new Decimal(0);
+ player.e.upgrades = [];
+ player.s = {
+ unl: player.s.unl,
+ order: 0,
+ points: new Decimal(0),
+ best: new Decimal(0),
+ spent: new Decimal(0),
+ buildings: {
+ 1: new Decimal(0),
+ 2: new Decimal(0),
+ 3: new Decimal(0)
+ },
+ upgrades: [],
+ }
+ break;
+ }
+}
+
+function doReset(layer, force=false) {
+ if (!force) {
+ if (player.points.lt(getLayerReq(layer))) return;
+ let gain = getResetGain(layer)
+ if (LAYER_TYPE[layer]=="static") {
+ if (player.points.lt(getNextAt(layer))) return;
+ player[layer].points = player[layer].points.plus(canBuyMax(layer)?gain:1)
+ } else player[layer].points = player[layer].points.plus(gain)
+ player[layer].best = player[layer].best.max(player[layer].points)
+
+ if (!player[layer].unl) {
+ player[layer].unl = true;
+ needCanvasUpdate = true;
+
+ let layers = ROW_LAYERS[LAYER_ROW[layer]]
+ for (let i in layers) if (!player[layers[i]].unl) player[layers[i]].order++
+ }
+ }
+ let row = LAYER_ROW[layer]
+ if (row==0) rowReset(0, layer)
+ else for (let x=row;x>=1;x--) rowReset(x, layer)
+}
+
+function buyUpg(layer, id) {
+ if (!player[layer].unl) return
+ if (!LAYER_UPGS[layer][id].unl()) return
+ if (player[layer].upgrades.includes(id)) return
+ if (player[layer].points.lt(LAYER_UPGS[layer][id].cost)) return
+ player[layer].points = player[layer].points.sub(LAYER_UPGS[layer][id].cost)
+ player[layer].upgrades.push(id);
+}
+
+function getPointGen() {
+ let gain = new Decimal(1)
+ if (player.p.upgrades.includes(12)) gain = gain.times(LAYER_UPGS.p[12].currently())
+ if (player.p.upgrades.includes(13)) gain = gain.times(LAYER_UPGS.p[13].currently())
+ if (player.p.upgrades.includes(22)) gain = gain.times(LAYER_UPGS.p[22].currently())
+ if (player.b.unl) gain = gain.times(LAYER_EFFS.b())
+ if (player.g.unl) gain = gain.times(getGenPowerEff())
+ if (player.t.unl) gain = gain.times(getTimeEnergyEff())
+ if (player.s.unl) gain = gain.times(getSpaceBuildingEff(1))
+ return gain
+}
+
+function addToBoosterBase() {
+ let toAdd = new Decimal(0)
+ if (player.b.upgrades.includes(12)) toAdd = toAdd.plus(LAYER_UPGS.b[12].currently())
+ if (player.b.upgrades.includes(13)) toAdd = toAdd.plus(LAYER_UPGS.b[13].currently())
+ if (player.e.unl) toAdd = toAdd.plus(getEnhancerEff2())
+ if (player.s.unl) toAdd = toAdd.plus(getSpaceBuildingEff(2))
+ return toAdd
+}
+
+function addToGenBase() {
+ let toAdd = new Decimal(0)
+ if (player.g.upgrades.includes(12)) toAdd = toAdd.plus(LAYER_UPGS.g[12].currently())
+ if (player.g.upgrades.includes(13)) toAdd = toAdd.plus(LAYER_UPGS.g[13].currently())
+ if (player.e.unl) toAdd = toAdd.plus(getEnhancerEff2())
+ if (player.s.unl) toAdd = toAdd.plus(getSpaceBuildingEff(2))
+ return toAdd
+}
+
+function getGenPowerGainMult() {
+ let mult = new Decimal(1)
+ if (player.g.upgrades.includes(21)) mult = mult.times(LAYER_UPGS.g[21].currently())
+ if (player.g.upgrades.includes(25)) mult = mult.times(LAYER_UPGS.g[25].currently())
+ return mult
+}
+
+function getGenPowerEff() {
+ let eff = player.g.power.plus(1).cbrt();
+ if (player.b.upgrades.includes(21)) eff = eff.pow(2);
+ if (player.b.upgrades.includes(22)) eff = eff.pow(1.2);
+ return eff
+}
+
+function resetRow(row) {
+ if (prompt('Are you sure you want to reset this row? It is highly recommended that you wait until the end of your current run before doing this! Type "I WANT TO RESET THIS" to confirm')!="I WANT TO RESET THIS") return
+ let pre_layers = ROW_LAYERS[row-1]
+ let layers = ROW_LAYERS[row]
+ let post_layers = ROW_LAYERS[row+1]
+ rowReset(row+1, post_layers[0])
+ doReset(pre_layers[0], true)
+ for (let layer in layers) {
+ player[layers[layer]].unl = false
+ }
+ resizeCanvas();
+}
+
+function getEnhancerCost() {
+ let cost = Decimal.pow(2, player.e.enhancers.pow(1.5))
+ return cost
+}
+
+function getEnhancerEff() {
+ if (!player.e.unl) return new Decimal(1)
+ let eff = Decimal.pow(25, player.e.enhancers.pow(1.1))
+ return eff
+}
+
+function getEnhancerEff2() {
+ if (!player.e.unl) return new Decimal(0)
+ let eff = player.e.enhancers.pow(0.8)
+ return eff;
+}
+
+function buyEnhancer() {
+ let cost = getEnhancerCost()
+ if (player.e.points.lt(cost)) return
+ player.e.points = player.e.points.sub(cost)
+ player.e.enhancers = player.e.enhancers.plus(1)
+}
+
+function getTimeEnergyEff() {
+ if (!player.t.unl) return new Decimal(1)
+ let eff = player.t.energy.plus(1).pow(1.2)
+ return eff;
+}
+
+function getExtCapsuleCost() {
+ let cost = player.t.extCapsules.times(0.4).pow(1.2).plus(1).times(10)
+ return cost.floor()
+}
+
+function buyExtCapsule() {
+ if (!player.t.unl) return
+ let cost = getExtCapsuleCost()
+ if (player.b.points.lt(cost)) return
+ player.b.points = player.b.points.sub(cost)
+ player.t.extCapsules = player.t.extCapsules.plus(1)
+}
+
+function getSpace() {
+ let baseSpace = player.s.best.pow(1.1).times(3).floor()
+ return baseSpace.sub(player.s.spent)
+}
+
+function getSpaceBuildingCost(x) {
+ let inputVal = new Decimal([1e3,1e10,1e25][x-1])
+ let bought = player.s.buildings[x]
+ let cost = Decimal.pow(inputVal, bought.pow(1.35)).times(inputVal).times((bought.gt(0)||x>1)?1:0)
+ return cost
+}
+
+function getSpaceBuildingEff(x) {
+ let bought = player.s.buildings[x];
+ if (!player.s.unl) bought = new Decimal(0);
+ switch(x) {
+ case 1:
+ return Decimal.pow(Decimal.add(1, bought), player.s.points.sqrt()).times(Decimal.mul(4, bought)).max(1)
+ break;
+ case 2:
+ return bought.sqrt()
+ break;
+ case 3:
+ return Decimal.pow(10, bought.pow(2.5))
+ break;
+ }
+}
+
+function getSpaceBuildingEffDesc(x) {
+ let eff = getSpaceBuildingEff(x)
+ switch(x) {
+ case 1:
+ return "Space Energy boosts Point gain & Prestige Point gain ("+format(eff)+"x)"
+ break;
+ case 2:
+ return "Adds to base of Booster/Generator effects by "+format(eff)
+ break;
+ case 3:
+ return "Makes Boosters/Generators cheaper by "+format(eff)+"x"
+ break;
+ }
+}
+
+function buyBuilding(x) {
+ if (!player.s.unl) return
+ if (getSpace().lt(1)) return
+ let cost = getSpaceBuildingCost(x)
+ if (player.g.power.lt(cost)) return
+ player.g.power = player.g.power.sub(cost)
+ player.s.spent = player.s.spent.plus(1)
+ player.s.buildings[x] = player.s.buildings[x].plus(1)
+}
+
+function respecSpaceBuildings() {
+ if (!player.s.unl) return;
+ if (!confirm("Are you sure you want to reset your Space Buildings? This will force you to do a Space reset as well!")) return
+ for (let i=1;i<=3;i++) player.s.buildings[i] = new Decimal(0)
+ player.s.spent = new Decimal(0)
+ doReset("space", true)
+}
+
+function gameLoop(diff) {
+ if (player.p.upgrades.includes(11)) player.points = player.points.plus(getPointGen().times(diff))
+ if (player.g.unl) player.g.power = player.g.power.plus(LAYER_EFFS.g().times(diff))
+ if (player.g.best.gte(10)) player.p.points = player.p.points.plus(getResetGain("p").times(diff))
+ if (player.t.unl) {
+ let data = LAYER_EFFS.t()
+ player.t.energy = player.t.energy.plus(data.gain.times(diff)).min(data.limit)
+ }
+}
+
+function hardReset() {
+ if (!confirm("Are you sure you want to do this? You will lose all your progress!")) return
+ player = getStartPlayer()
+ save();
+ window.location.reload();
+}
+
+var saveInterval = setInterval(function() {
+ if (player.autosave) save();
+}, 5000)
+
+var interval = setInterval(function() {
+ let diff = (Date.now()-player.time)/1000
+ player.time = Date.now()
+ if (needCanvasUpdate && player.tab=="tree") resizeCanvas();
+ gameLoop(diff)
+}, 50)
\ No newline at end of file
diff --git a/js/v.js b/js/v.js
new file mode 100644
index 0000000..9f6ef68
--- /dev/null
+++ b/js/v.js
@@ -0,0 +1,34 @@
+var app;
+
+function loadVue() {
+ app = new Vue({
+ el: "#app",
+ data: {
+ player,
+ format,
+ formatWhole,
+ getResetGain,
+ getLayerReq,
+ getNextAt,
+ layerUnl,
+ getLayerEffDesc,
+ doReset,
+ buyUpg,
+ getGenPowerEff,
+ getEnhancerCost,
+ getEnhancerEff,
+ getEnhancerEff2,
+ getTimeEnergyEff,
+ getExtCapsuleCost,
+ getSpace,
+ getSpaceBuildingCost,
+ getSpaceBuildingEffDesc,
+ buyBuilding,
+ LAYERS,
+ LAYER_RES,
+ LAYER_TYPE,
+ LAYER_UPGS,
+ LAYER_EFFS,
+ },
+ })
+}
\ No newline at end of file
diff --git a/options_wheel.JPG b/options_wheel.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..63d1fe7f153fe39be9aa1ea0dcb0b67d8729df44
GIT binary patch
literal 2651
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
N002ovPDHLkV1oWv;#&X!
literal 0
HcmV?d00001
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..c7b130a
--- /dev/null
+++ b/style.css
@@ -0,0 +1,286 @@
+* {
+ transition-duration: 0.5s;
+ text-align: center;
+ font-family: "Lucida Console";
+ table-align: center;
+ margin: auto;
+}
+
+*:focus {
+ outline: none;
+}
+
+body {
+ background-color: black;
+ color: white;
+ text-shadow: 0px 0px 7px white;
+ overflow-x: hidden;
+}
+
+h1, h2 {
+ display: inline;
+}
+
+.treeNode {
+ height: 100px;
+ width: 100px;
+ border-radius: 50%;
+ border-color: black;
+ font-size: 40px;
+}
+
+.locked {
+ background-color: #9c6e6e !important;
+ cursor: not-allowed;
+}
+
+.can {
+ cursor: pointer;
+}
+
+.can:hover {
+ transform: scale(1.1, 1.1);
+ text-shadow: 0px 0px 7px white;
+}
+
+.bought {
+ background-color: #68a66b !important;
+ cursor: default;
+}
+
+.back {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ background-color: black;
+ border-color: black;
+ color: white;
+ font-size: 40px;
+ cursor: pointer;
+}
+
+.back:hover {
+ transform: scale(1.1, 1.1);
+ text-shadow: 0px 0px 7px white;
+}
+
+.reset {
+ height: 100px;
+ width: 150px;
+ border-radius: 50%;
+ border-color: black;
+}
+
+.upg {
+ height: 120px;
+ width: 120px;
+ border-radius: 25%;
+ border-color: black;
+ font-size: 10px;
+}
+
+.upgBig {
+ height: 200px;
+ width: 200px;
+ border-radius: 25%;
+ border-color: black;
+}
+
+.longUpg {
+ height: 50px;
+ width: 120px;
+ border-radius: 50%;
+ border-color: black;
+ font-size: 10px;
+}
+
+.p {
+ background-color: #439ea3;
+ color: black;
+}
+
+.p_txt {
+ color: #439ea3;
+ text-shadow: 0px 0px 10px #439ea3;
+}
+
+.b {
+ background-color: #415a9e;
+ color: black;
+}
+
+.b_txt {
+ color: #415a9e;
+ text-shadow: 0px 0px 10px #415a9e;
+}
+
+.g {
+ background-color: #409c6e;
+ color: black;
+}
+
+.g_txt {
+ color: #409c6e;
+ text-shadow: 0px 0px 10px #409c6e;
+}
+
+.e {
+ background-color: #9643a3;
+ color: black;
+}
+
+.e_txt {
+ color: #9643a3;
+ text-shadow: 0px 0px 10px #9643a3;
+}
+
+.t {
+ background-color: #3f993d;
+ color: black;
+}
+
+.t_txt {
+ color: #3f993d;
+ text-shadow: 0px 0px 10px #3f993d;
+}
+
+.s {
+ background-color: white;
+ color: black;
+}
+
+.s_txt {
+ color: white;
+ text-shadow: 0px 0px 10px white;
+}
+
+#optionWheel {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ height: 40px;
+ width: 40px;
+ cursor: pointer;
+}
+
+#optionWheel:hover {
+ transform: rotate(360deg);
+}
+
+.opt {
+ height: 100px;
+ width: 100px;
+ border-radius: 25%;
+ border-color: black;
+ background-color: #a1a1a1;
+ color: black;
+ cursor: pointer;
+}
+
+.opt:hover {
+ background-color: #439ea3;
+}
+
+.hidden {
+ visibility: hidden;
+ height: 50px !important;
+}
+
+.canvas {
+ top: 0;
+ left: 0;
+ position: absolute;
+ z-index: -999;
+}
+
+.milestone {
+ width: 100%;
+ height: 75px;
+ background-color: #9e6d64;
+}
+
+.milestoneDone {
+ width: 100%;
+ height: 75px;
+ background-color: #68a66b;
+ color: black;
+}
+
+.left {
+ position: absolute;
+ left: 0;
+}
+
+.remove {
+ height: 24px;
+ width: 24px;
+ cursor: pointer;
+}
+
+.remove:hover {
+ transform: scale(1.1, 1.1);
+}
+
+[tooltip] {
+ position: relative;
+ z-index: 2;
+ white-space: pre-wrap;
+}
+
+[tooltip]:before,
+[tooltip]:after {
+ visibility: hidden;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0);
+ opacity: 0;
+ pointer-events: none;
+ white-space: pre-wrap;
+}
+
+[tooltip]:before {
+ position: absolute;
+ bottom: 100%;
+ left: 50%;
+ margin-bottom: 5px;
+ margin-left: -80px;
+ padding: 7px;
+ width: 160px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ background-color: #000;
+ background-color: hsla(0, 0%, 5%, 0.9);
+ color: #fff;
+ content: attr(tooltip);
+ text-align: center;
+ font-size: 14px;
+ line-height: 1.2;
+ transition-duration: 0.5s;
+ white-space: pre-wrap;
+}
+
+[tooltip]:after {
+ position: absolute;
+ bottom: 100%;
+ left: 50%;
+ margin-left: -5px;
+ width: 0;
+ border-top: 5px solid #000;
+ border-top: 5px solid hsla(0, 0%, 5%, 0.9);
+ border-right: 5px solid transparent;
+ border-left: 5px solid transparent;
+ content: " ";
+ font-size: 0;
+ line-height: 0;
+ transition-duration: 0.5s;
+ white-space: pre-wrap;
+}
+
+[tooltip]:hover:before,
+[tooltip]:hover:after {
+ visibility: visible;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100);
+ opacity: 1;
+ white-space: pre-wrap;
+}
\ No newline at end of file