2020-08-19 02:50:24 +00:00
var player ;
2020-08-21 19:02:34 +00:00
var tmp = { } ;
2020-08-19 02:50:24 +00:00
var needCanvasUpdate = true ;
2020-08-24 02:01:14 +00:00
var NaNalert = false ;
2020-08-19 02:50:24 +00:00
function getStartPlayer ( ) {
return {
tab : "tree" ,
time : Date . now ( ) ,
autosave : true ,
2020-08-24 02:01:14 +00:00
versionType : "beta" ,
2020-08-26 01:45:22 +00:00
version : 1.1 ,
2020-08-23 19:36:03 +00:00
timePlayed : 0 ,
2020-08-24 02:01:14 +00:00
hasNaN : false ,
2020-08-19 02:50:24 +00:00
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 : [ ] ,
2020-08-20 04:55:26 +00:00
auto : false ,
2020-08-19 02:50:24 +00:00
} ,
g : {
unl : false ,
points : new Decimal ( 0 ) ,
power : new Decimal ( 0 ) ,
best : new Decimal ( 0 ) ,
upgrades : [ ] ,
2020-08-20 04:55:26 +00:00
auto : false ,
2020-08-19 02:50:24 +00:00
} ,
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 ) ,
2020-08-19 19:53:14 +00:00
3 : new Decimal ( 0 ) ,
2020-08-20 20:37:22 +00:00
4 : new Decimal ( 0 ) ,
5 : new Decimal ( 0 )
2020-08-19 02:50:24 +00:00
} ,
upgrades : [ ] ,
} ,
2020-08-22 01:16:23 +00:00
sb : {
unl : false ,
order : 0 ,
points : new Decimal ( 0 ) ,
best : new Decimal ( 0 ) ,
upgrades : [ ] ,
} ,
2020-08-26 01:45:22 +00:00
h : {
unl : false ,
points : new Decimal ( 0 ) ,
best : new Decimal ( 0 ) ,
challs : [ ] ,
upgrades : [ ] ,
} ,
q : {
unl : false ,
points : new Decimal ( 0 ) ,
best : new Decimal ( 0 ) ,
layers : new Decimal ( 0 ) ,
energy : new Decimal ( 0 ) ,
time : new Decimal ( 0 ) ,
upgrades : [ ] ,
} ,
2020-08-19 02:50:24 +00:00
}
}
2020-08-26 01:45:22 +00:00
const LAYERS = [ "p" , "b" , "g" , "e" , "t" , "s" , "sb" , "h" , "q" ]
2020-08-19 02:50:24 +00:00
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 ) ,
2020-08-22 01:16:23 +00:00
sb : new Decimal ( 180 ) ,
2020-08-26 01:45:22 +00:00
h : new Decimal ( 1e220 ) ,
q : new Decimal ( "1e512" ) ,
2020-08-19 02:50:24 +00:00
}
const LAYER _RES = {
p : "prestige points" ,
b : "boosters" ,
g : "generators" ,
e : "enhance points" ,
t : "time capsules" ,
s : "space energy" ,
2020-08-22 01:16:23 +00:00
sb : "super-boosters" ,
2020-08-26 01:45:22 +00:00
h : "hindrace spirit" ,
q : "quirks" ,
2020-08-19 02:50:24 +00:00
}
2020-08-25 22:42:43 +00:00
const LAYER _RES _CEIL = [ "sb" ]
2020-08-19 02:50:24 +00:00
const LAYER _TYPE = {
p : "normal" ,
b : "static" ,
g : "static" ,
e : "normal" ,
t : "static" ,
s : "static" ,
2020-08-22 01:16:23 +00:00
sb : "static" ,
2020-08-26 01:45:22 +00:00
h : "normal" ,
q : "normal" ,
2020-08-19 02:50:24 +00:00
}
const LAYER _EXP = {
p : new Decimal ( 0.5 ) ,
b : new Decimal ( 1.25 ) ,
g : new Decimal ( 1.25 ) ,
e : new Decimal ( 0.02 ) ,
2020-08-19 19:53:14 +00:00
t : new Decimal ( 1.85 ) ,
s : new Decimal ( 1.85 ) ,
2020-08-22 01:16:23 +00:00
sb : new Decimal ( 1.25 ) ,
2020-08-26 01:45:22 +00:00
h : new Decimal ( 0.015 ) ,
q : new Decimal ( 0.0075 ) ,
2020-08-19 02:50:24 +00:00
}
const LAYER _BASE = {
b : new Decimal ( 5 ) ,
g : new Decimal ( 5 ) ,
t : new Decimal ( 1e15 ) ,
s : new Decimal ( 1e15 ) ,
2020-08-22 01:16:23 +00:00
sb : new Decimal ( 1.05 ) ,
2020-08-19 02:50:24 +00:00
}
const LAYER _ROW = {
p : 0 ,
b : 1 ,
g : 1 ,
e : 2 ,
t : 2 ,
s : 2 ,
2020-08-22 01:16:23 +00:00
sb : 2 ,
2020-08-26 01:45:22 +00:00
h : 3 ,
q : 3 ,
future _layer : 4 ,
2020-08-19 02:50:24 +00:00
}
const ROW _LAYERS = [
[ "p" ] ,
[ "b" , "g" ] ,
2020-08-22 01:16:23 +00:00
[ "e" , "t" , "s" , "sb" ] ,
2020-08-26 01:45:22 +00:00
[ "h" , "q" ] ,
2020-08-19 02:50:24 +00:00
[ "future_layer" ] ,
]
const LAYER _EFFS = {
2020-08-21 19:02:34 +00:00
b : function ( ) { return Decimal . pow ( Decimal . add ( 2 , tmp . atbb ) , player . b . points . plus ( getFreeBoosters ( ) ) ) } ,
g : function ( ) { return Decimal . pow ( Decimal . add ( 2 , tmp . atgb ) , player . g . points ) . sub ( 1 ) . times ( getGenPowerGainMult ( ) ) } ,
2020-08-19 02:50:24 +00:00
t : function ( ) { return {
2020-08-21 19:02:34 +00:00
gain : Decimal . pow ( 3 , player . t . points . plus ( player . t . extCapsules . plus ( tmp . freeExtCap ) ) ) . sub ( 1 ) . times ( getTimeEnergyGainMult ( ) ) ,
limit : Decimal . pow ( 2 , player . t . points . plus ( player . t . extCapsules . plus ( tmp . freeExtCap ) ) ) . sub ( 1 ) . times ( 100 ) . times ( getTimeEnergyLimitMult ( ) ) ,
2020-08-19 02:50:24 +00:00
} } ,
2020-08-23 19:36:03 +00:00
sb : function ( ) { return Decimal . pow ( 1.5 , player . sb . points . times ( getSuperBoosterPow ( ) ) ) } ,
2020-08-26 01:45:22 +00:00
h : function ( ) { return player . h . points . plus ( 1 ) . times ( player . points . times ( player . h . points ) . plus ( 1 ) . log10 ( ) . plus ( 1 ) . log10 ( ) . plus ( 1 ) ) . log10 ( ) . times ( 5 ) . sqrt ( ) } ,
2020-08-19 02:50:24 +00:00
}
const LAYER _UPGS = {
p : {
2020-08-23 19:36:03 +00:00
rows : 3 ,
2020-08-19 02:50:24 +00:00
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 ( ) )
2020-08-23 19:36:03 +00:00
if ( player . p . upgrades . includes ( 33 ) ) ret = ret . pow ( 1.25 )
2020-08-19 02:50:24 +00:00
return ret ;
} ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
2020-08-23 19:36:03 +00:00
31 : {
desc : "Prestige Point gain is boosted by your Prestige Point amount." ,
cost : new Decimal ( "1e4450" ) ,
unl : function ( ) { return player . e . upgrades . includes ( 33 ) } ,
currently : function ( ) { return player . p . points . plus ( 1 ) . log10 ( ) . plus ( 1 ) . pow ( player . p . points . plus ( 1 ) . log10 ( ) . div ( 200 ) . plus ( 1 ) ) . pow ( player . p . upgrades . includes ( 32 ) ? LAYER _UPGS . p [ 32 ] . currently ( ) : 1 ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
32 : {
desc : "The upgrade to the left is stronger based on your Points." ,
cost : new Decimal ( "1e5140" ) ,
unl : function ( ) { return player . e . upgrades . includes ( 33 ) } ,
currently : function ( ) { return player . points . plus ( 1 ) . log10 ( ) . plus ( 1 ) . root ( 16 ) } ,
effDisp : function ( x ) { return format ( x . sub ( 1 ) . times ( 100 ) ) + "% stronger" } ,
} ,
33 : {
desc : "The above upgrade is 25% stronger." ,
cost : new Decimal ( "1e5500" ) ,
unl : function ( ) { return player . e . upgrades . includes ( 33 ) } ,
} ,
2020-08-19 02:50:24 +00:00
} ,
b : {
rows : 2 ,
cols : 3 ,
11 : {
desc : "Boosters boost Prestige Point gain." ,
cost : new Decimal ( 3 ) ,
unl : function ( ) { return player . b . unl } ,
2020-08-19 19:53:14 +00:00
currently : function ( ) { return player . b . points . sqrt ( ) . plus ( 1 ) . max ( 1.5 ) } ,
2020-08-19 02:50:24 +00:00
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 } ,
2020-08-19 22:12:31 +00:00
currently : function ( ) { return player . g . points . plus ( 1 ) . log10 ( ) . sqrt ( ) . div ( 3 ) . times ( player . t . upgrades . includes ( 14 ) ? 8.5 : 1 ) } ,
2020-08-19 02:50:24 +00:00
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 ) } ,
2020-08-21 19:02:34 +00:00
currently : function ( ) { return player . points . plus ( 1 ) . log10 ( ) . plus ( 1 ) . pow ( 3.2 ) . pow ( tmp . spaceBuildEff ? tmp . spaceBuildEff [ 4 ] : 1 ) } ,
2020-08-19 02:50:24 +00:00
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 } ,
2020-08-19 19:53:14 +00:00
currently : function ( ) { return player . g . points . sqrt ( ) . plus ( 1 ) . max ( 1.5 ) } ,
2020-08-19 02:50:24 +00:00
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
12 : {
desc : "Boosters boost Generator Power gain." ,
cost : new Decimal ( 7 ) ,
unl : function ( ) { return player . b . unl } ,
2020-08-19 22:12:31 +00:00
currently : function ( ) { return player . b . points . plus ( 1 ) . log10 ( ) . sqrt ( ) . div ( 3 ) . times ( player . t . upgrades . includes ( 14 ) ? 3.75 : 1 ) } ,
2020-08-19 02:50:24 +00:00
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 ) } ,
2020-08-23 19:36:03 +00:00
currently : function ( ) { return player . g . points . sqrt ( ) . plus ( 1 ) . times ( ( player . e . upgrades . includes ( 32 ) ) ? LAYER _UPGS . e [ 32 ] . currently ( ) : 1 ) } ,
2020-08-19 02:50:24 +00:00
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 ) } ,
2020-08-19 19:53:14 +00:00
currently : function ( ) { return player . p . points . plus ( 1 ) . log10 ( ) . sqrt ( ) . plus ( 1 ) . pow ( player . t . upgrades . includes ( 14 ) ? 2.75 : 1 ) } ,
2020-08-19 02:50:24 +00:00
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
} ,
e : {
2020-08-23 19:36:03 +00:00
rows : 3 ,
2020-08-20 04:55:26 +00:00
cols : 5 ,
2020-08-19 19:53:14 +00:00
11 : {
desc : "Boosters & Generators boost each other." ,
cost : new Decimal ( 40 ) ,
unl : function ( ) { return player . e . unl } ,
2020-08-20 04:55:26 +00:00
currently : function ( ) {
let exp = 1
if ( player . e . upgrades . includes ( 14 ) ) exp = 1.5
return { g : player . b . points . plus ( 1 ) . log10 ( ) . pow ( exp ) , b : player . g . points . plus ( 1 ) . log10 ( ) . pow ( exp ) }
} ,
2020-08-19 19:53:14 +00:00
effDisp : function ( x ) { return "+" + format ( x . g ) + " to Generator base, +" + format ( x . b ) + " to Booster base" } ,
} ,
12 : {
desc : "Unspent Enhance Points boost Prestige Point gain." ,
cost : new Decimal ( 150 ) ,
unl : function ( ) { return player . e . unl && player . e . best . gte ( 40 ) } ,
2020-08-20 04:55:26 +00:00
currently : function ( ) { return player . e . points . plus ( 1 ) . pow ( player . e . upgrades . includes ( 15 ) ? 3.25 : 1.5 ) } ,
2020-08-19 19:53:14 +00:00
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
13 : {
desc : "You gain 1e10x as many Prestige Points." ,
cost : new Decimal ( 1000 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 11 ) || player . e . upgrades . includes ( 12 ) } ,
} ,
2020-08-20 04:55:26 +00:00
14 : {
desc : "Enhance Upgrade 1 uses a better formula." ,
cost : new Decimal ( 5e7 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 13 ) && ( player . t . unl || player . s . unl ) } ,
} ,
15 : {
desc : "Enhance Upgrade 2 uses a better formula." ,
cost : new Decimal ( 2e10 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 14 ) && ( player . t . unl || player . s . unl ) && player . e . best . gte ( 1e9 ) } ,
} ,
2020-08-20 20:37:22 +00:00
21 : {
desc : "The Generator Power effect is raised to the power of 1.15." ,
cost : new Decimal ( 1e15 ) ,
unl : function ( ) { return player . t . unl && ( player . t . order == 1 || player . s . unl ) && player . e . upgrades . includes ( 14 ) } ,
} ,
22 : {
2020-08-21 03:33:13 +00:00
desc : "This layer behaves as if you chose it first (base req is now 1e120 points)" ,
cost : new Decimal ( 1e22 ) ,
unl : function ( ) { return ( player . t . unl && player . s . unl && player . e . order == 2 ) || player . e . upgrades . includes ( 22 ) || player . e . upgrades . includes ( 23 ) } ,
2020-08-20 20:37:22 +00:00
} ,
23 : {
2020-08-21 03:33:13 +00:00
desc : "This layer behaves as if you chose it first (base req is now 1e120 points)" ,
cost : new Decimal ( 1e40 ) ,
2020-08-21 19:02:34 +00:00
unl : function ( ) { return ( player . t . unl && player . s . unl ) || player . e . upgrades . includes ( 22 ) || player . e . upgrades . includes ( 23 ) } ,
2020-08-20 20:37:22 +00:00
} ,
24 : {
2020-08-21 19:02:34 +00:00
desc : "Prestige Points boost Enhance Point gain." ,
cost : new Decimal ( 1e65 ) ,
unl : function ( ) { return player . t . unl && player . s . unl && player . e . best . gte ( 1e50 ) } ,
currently : function ( ) { return player . p . points . plus ( 1 ) . pow ( 0.002 ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
2020-08-20 20:37:22 +00:00
} ,
25 : {
2020-08-21 19:02:34 +00:00
desc : "Enhancers are stronger based on your Space Energy & Time Capsules." ,
cost : new Decimal ( 7.777 e77 ) ,
unl : function ( ) { return player . t . unl && player . s . unl && player . e . best . gte ( 1e60 ) } ,
currently : function ( ) {
let ret = player . s . points . plus ( player . t . points ) . div ( 32 ) . plus ( 1 ) ;
2020-08-23 19:36:03 +00:00
if ( ret . gte ( 2 ) ) ret = ret . log ( 2 ) . plus ( 1 ) . times ( 2 ) . sqrt ( ) ;
2020-08-21 19:02:34 +00:00
return ret ;
} ,
effDisp : function ( x ) { return format ( x . sub ( 1 ) . times ( 100 ) ) + "% stronger" } ,
2020-08-20 20:37:22 +00:00
} ,
2020-08-23 19:36:03 +00:00
31 : {
desc : "Enhancers are stronger based on your Super-Boosters." ,
cost : new Decimal ( 1e90 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 25 ) && player . sb . unl } ,
currently : function ( ) { return player . sb . points . pow ( 0.75 ) . div ( 4 ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x . sub ( 1 ) . times ( 100 ) ) + "% stronger" } ,
} ,
32 : {
desc : "Generator Upgrade 5 is stronger based on your Enhance Points." ,
cost : new Decimal ( 7.5 e108 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 25 ) && player . sb . unl } ,
currently : function ( ) {
let ret = Decimal . pow ( 10 , player . e . points . plus ( 1 ) . log10 ( ) . pow ( 0.085 ) ) . div ( 10 ) . max ( 1 ) ;
return ret ;
} ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
33 : {
desc : "Unlock 3 new Prestige Upgrades." ,
cost : new Decimal ( 2.5 e139 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 31 ) || player . e . upgrades . includes ( 32 ) } ,
} ,
34 : {
desc : "You gain 1e40x as many Prestige Points." ,
cost : new Decimal ( 1e152 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 31 ) && player . e . upgrades . includes ( 32 ) } ,
} ,
35 : {
desc : "Points boost Generator Power gain." ,
cost : new Decimal ( 2e189 ) ,
unl : function ( ) { return player . e . upgrades . includes ( 33 ) || player . e . upgrades . includes ( 34 ) } ,
currently : function ( ) { return player . points . plus ( 1 ) . pow ( 0.004 ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
2020-08-19 02:50:24 +00:00
} ,
t : {
2020-08-20 20:37:22 +00:00
rows : 3 ,
2020-08-19 19:53:14 +00:00
cols : 4 ,
11 : {
desc : "Non-extra Time Capsules boost the Booster effect." ,
cost : new Decimal ( 2 ) ,
unl : function ( ) { return player . t . unl } ,
currently : function ( ) { return player . t . points . pow ( 0.9 ) . plus ( 0.5 ) . plus ( player . t . upgrades . includes ( 13 ) ? LAYER _UPGS . t [ 13 ] . currently ( ) : 0 ) } ,
effDisp : function ( x ) { return "+" + format ( x ) + " to base" } ,
} ,
12 : {
desc : "The Time Energy cap starts later based on your Boosters, and you get a free Extra Time Capsule." ,
cost : new Decimal ( 3 ) ,
unl : function ( ) { return player . t . best . gte ( 2 ) && player . t . unl } ,
currently : function ( ) { return player . b . points . pow ( 0.95 ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
13 : {
desc : "Extra Time Capsules are added to the first Time Upgrade's effect formula, but at a reduced amount." ,
cost : new Decimal ( 3 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 11 ) } ,
2020-08-21 19:02:34 +00:00
currently : function ( ) { return player . t . extCapsules . plus ( tmp . freeExtCap ) . pow ( 0.95 ) } ,
2020-08-19 19:53:14 +00:00
effDisp : function ( x ) { return "+" + format ( x ) } ,
} ,
14 : {
2020-08-19 22:12:31 +00:00
desc : "Generator Upgrades 2 & 10 are 275% stronger, and Booster Upgrade 2 is 750% stronger." ,
2020-08-19 19:53:14 +00:00
cost : new Decimal ( 4 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 12 ) || player . t . upgrades . includes ( 13 ) } ,
} ,
2020-08-19 22:12:31 +00:00
21 : {
2020-08-20 01:27:52 +00:00
desc : "Time Energy boosts its own production & limit, and the Time Energy effect uses a better formula." ,
2020-08-19 22:12:31 +00:00
cost : new Decimal ( 4 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 14 ) } ,
currently : function ( ) { return player . t . energy . plus ( 1 ) . log10 ( ) . pow ( 1.1 ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
22 : {
2020-08-20 01:27:52 +00:00
desc : "Time Energy production & limit are boosted by your Enhance Points." ,
cost : new Decimal ( 5 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 14 ) && player . e . unl } ,
2020-08-20 04:55:26 +00:00
currently : function ( ) { return player . e . points . plus ( 1 ) . pow ( 0.8 / ( 1 + player . t . order ) ) } ,
2020-08-20 01:27:52 +00:00
effDisp : function ( x ) { return format ( x ) + "x" } ,
2020-08-19 22:12:31 +00:00
} ,
23 : {
2020-08-20 01:27:52 +00:00
desc : "Time Energy production & limit are boosted by your Space Energy." ,
cost : new Decimal ( 5 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 14 ) && player . s . unl } ,
currently : function ( ) { return Decimal . pow ( 3 , player . s . points . pow ( 0.9 ) ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
2020-08-19 22:12:31 +00:00
} ,
24 : {
2020-08-20 04:55:26 +00:00
desc : "Get 18 free boosters added to their effect." ,
cost : new Decimal ( 7 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 21 ) && player . t . best . gte ( 5 ) } ,
2020-08-19 22:12:31 +00:00
} ,
2020-08-20 20:37:22 +00:00
31 : {
desc : "Add 25 to the booster effect base." ,
cost : new Decimal ( 8 ) ,
unl : function ( ) { return ( player . t . upgrades . includes ( 22 ) && ( player . e . order == 1 || player . s . unl ) ) || ( player . t . upgrades . includes ( 23 ) && ( player . s . order == 1 || player . e . unl ) ) } ,
} ,
32 : {
2020-08-21 03:33:13 +00:00
desc : "This layer behaves as if you chose it first (base req is now 1e120 points)" ,
cost : new Decimal ( 12 ) ,
unl : function ( ) { return ( player . s . unl && player . e . unl ) || player . t . upgrades . includes ( 32 ) } ,
2020-08-20 20:37:22 +00:00
} ,
33 : {
2020-08-21 19:02:34 +00:00
desc : "Add 40 to the booster effect base." ,
cost : new Decimal ( 16 ) ,
unl : function ( ) { return player . s . unl && player . e . unl && player . t . upgrades . includes ( 32 ) } ,
2020-08-20 20:37:22 +00:00
} ,
34 : {
2020-08-22 03:59:24 +00:00
desc : "Time Energy caps later and generates faster based on your non-free Time Capsules." ,
2020-08-23 19:36:03 +00:00
cost : new Decimal ( 18 ) ,
unl : function ( ) { return player . t . upgrades . includes ( 33 ) && player . sb . unl } ,
currently : function ( ) { return Decimal . pow ( 10 , player . t . points . pow ( 1.2 ) ) } ,
2020-08-22 03:59:24 +00:00
effDisp : function ( x ) { return format ( x ) + "x" } ,
2020-08-20 20:37:22 +00:00
} ,
2020-08-19 02:50:24 +00:00
} ,
s : {
2020-08-20 20:37:22 +00:00
rows : 3 ,
2020-08-19 19:53:14 +00:00
cols : 4 ,
11 : {
desc : "Add a free level to all Space Buildings." ,
cost : new Decimal ( 2 ) ,
unl : function ( ) { return player . s . unl } ,
} ,
12 : {
desc : "Generator Power boosts its own generation." ,
cost : new Decimal ( 3 ) ,
unl : function ( ) { return player . s . best . gte ( 2 ) && player . s . unl } ,
currently : function ( ) { return player . g . power . plus ( 1 ) . log10 ( ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
13 : {
desc : "Space Building Levels boost Generator Power gain, and get 2 extra Space." ,
cost : new Decimal ( 3 ) ,
unl : function ( ) { return player . s . upgrades . includes ( 11 ) } ,
currently : function ( ) { return Decimal . pow ( 20 , Object . values ( player . s . buildings ) . reduce ( ( a , b ) => Decimal . add ( a , b ) ) ) } ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
14 : {
desc : "Unlock a 4th Space Building, and add a free level to all Space Buildings." ,
cost : new Decimal ( 4 ) ,
unl : function ( ) { return player . s . upgrades . includes ( 12 ) && player . s . upgrades . includes ( 13 ) } ,
} ,
2020-08-19 22:12:31 +00:00
21 : {
desc : "All Space Buildings are stronger based on your Generators." ,
cost : new Decimal ( 4 ) ,
unl : function ( ) { return player . s . upgrades . includes ( 14 ) } ,
currently : function ( ) { return player . g . points . plus ( 1 ) . log10 ( ) . div ( 1.5 ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x . sub ( 1 ) . times ( 100 ) ) + "% stronger" } ,
} ,
22 : {
2020-08-20 04:55:26 +00:00
desc : "Space Buildings are stronger based on your Time Energy." ,
cost : new Decimal ( 6 ) ,
unl : function ( ) { return player . s . upgrades . includes ( 14 ) && player . t . unl } ,
currently : function ( ) { return player . t . energy . plus ( 1 ) . log10 ( ) . plus ( 1 ) . log10 ( ) . div ( 5 ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x . sub ( 1 ) . times ( 100 ) ) + "% stronger" } ,
2020-08-19 22:12:31 +00:00
} ,
23 : {
2020-08-20 04:55:26 +00:00
desc : "Space Buildings are stronger based on your Enhancers." ,
cost : new Decimal ( 5 ) ,
unl : function ( ) { return player . s . upgrades . includes ( 14 ) && player . e . unl } ,
currently : function ( ) { return player . e . enhancers . sqrt ( ) . div ( ( player . s . order == 0 ) ? 5 : 7 ) . plus ( 1 ) } ,
effDisp : function ( x ) { return format ( x . sub ( 1 ) . times ( 100 ) ) + "% stronger" } ,
2020-08-19 22:12:31 +00:00
} ,
24 : {
2020-08-20 04:55:26 +00:00
desc : "Space Building costs scale half as fast, and you have 3 more Space." ,
cost : new Decimal ( 7 ) ,
unl : function ( ) { return player . s . upgrades . includes ( 21 ) && ( player . t . unl || player . e . unl ) } ,
2020-08-19 22:12:31 +00:00
} ,
2020-08-20 20:37:22 +00:00
31 : {
desc : "Space Building 1 uses a better formula." ,
cost : new Decimal ( 7 ) ,
unl : function ( ) { return ( player . s . upgrades . includes ( 22 ) && ( player . t . order == 0 || player . e . unl ) ) || ( player . s . upgrades . includes ( 23 ) && ( player . e . order == 0 || player . t . unl ) ) } ,
} ,
32 : {
desc : "Unlock a 5th Space Building." ,
cost : new Decimal ( 8 ) ,
unl : function ( ) { return ( player . s . upgrades . includes ( 22 ) && ( player . t . order == 1 || player . e . unl ) ) || ( player . s . upgrades . includes ( 23 ) && ( player . e . order == 1 || player . t . unl ) ) } ,
} ,
33 : {
2020-08-21 03:33:13 +00:00
desc : "This layer behaves as if you chose it first (base req is now 1e120 points)" ,
cost : new Decimal ( 12 ) ,
unl : function ( ) { return ( player . t . unl && player . e . unl ) || player . s . upgrades . includes ( 33 ) } ,
2020-08-20 20:37:22 +00:00
} ,
34 : {
2020-08-21 03:33:13 +00:00
desc : "Space Buildings boost the Generator Power effect (before all other boosts)." ,
cost : new Decimal ( 15 ) ,
unl : function ( ) { return player . t . unl && player . e . unl && player . t . order == 0 && player . e . order == 0 && player . s . order == 0 } ,
currently : function ( ) { return Decimal . pow ( Object . values ( player . s . buildings ) . reduce ( ( a , b ) => Decimal . add ( a , b ) ) , 0.2 ) . div ( 17.5 ) } ,
effDisp : function ( x ) { return "Add " + format ( x ) + " to exponent" } ,
2020-08-20 20:37:22 +00:00
} ,
2020-08-19 02:50:24 +00:00
} ,
2020-08-22 01:16:23 +00:00
sb : {
rows : 1 ,
2020-08-22 03:59:24 +00:00
cols : 2 ,
2020-08-22 01:16:23 +00:00
11 : {
desc : "Super-Boosters are stronger based on your Prestige Points." ,
cost : new Decimal ( 2 ) ,
unl : function ( ) { return player . sb . unl } ,
2020-08-22 03:59:24 +00:00
currently : function ( ) {
let ret = Decimal . pow ( 10 , player . p . points . plus ( 1 ) . log10 ( ) . div ( 1e5 ) . sqrt ( ) ) ;
if ( ret . gte ( 2.5 ) ) ret = ret . log ( 2.5 ) . plus ( 1.5 ) . min ( ret ) ;
2020-08-23 19:36:03 +00:00
return ret . max ( 1 ) ;
2020-08-22 03:59:24 +00:00
} ,
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
12 : {
desc : "Super-Boosters are stronger based on your Generators." ,
2020-08-23 19:36:03 +00:00
cost : new Decimal ( 4 ) ,
2020-08-22 03:59:24 +00:00
unl : function ( ) { return player . sb . upgrades . includes ( 11 ) } ,
2020-08-23 19:36:03 +00:00
currently : function ( ) { return player . g . points . div ( 10 ) . pow ( 0.04 ) . max ( 1 ) } ,
2020-08-22 01:16:23 +00:00
effDisp : function ( x ) { return format ( x ) + "x" } ,
} ,
} ,
2020-08-26 01:45:22 +00:00
h : {
rows : 0 ,
cols : 0 ,
} ,
q : {
rows : 0 ,
cols : 0 ,
} ,
2020-08-19 02:50:24 +00:00
}
const TAB _REQS = {
tree : function ( ) { return true } ,
options : function ( ) { return true } ,
2020-08-19 22:12:31 +00:00
info : function ( ) { return true } ,
2020-08-20 04:55:26 +00:00
changelog : function ( ) { return true } ,
2020-08-25 22:42:43 +00:00
credits : function ( ) { return true } ,
2020-08-21 19:02:34 +00:00
p : function ( ) { return ( player . p . unl || player . points . gte ( tmp . layerReqs . p ) ) && layerUnl ( 'p' ) } ,
b : function ( ) { return ( player . b . unl || player . points . gte ( tmp . layerReqs . b ) ) && layerUnl ( 'b' ) } ,
g : function ( ) { return ( player . g . unl || player . points . gte ( tmp . layerReqs . g ) ) && layerUnl ( 'g' ) } ,
e : function ( ) { return ( player . e . unl || player . points . gte ( tmp . layerReqs . e ) ) && layerUnl ( 'e' ) } ,
t : function ( ) { return ( player . t . unl || player . points . gte ( tmp . layerReqs . t ) ) && layerUnl ( 't' ) } ,
s : function ( ) { return ( player . s . unl || player . points . gte ( tmp . layerReqs . s ) ) && layerUnl ( 's' ) } ,
2020-08-22 01:16:23 +00:00
sb : function ( ) { return ( player . sb . unl || player . b . points . gte ( tmp . layerReqs . sb ) ) && layerUnl ( 'sb' ) } ,
2020-08-26 01:45:22 +00:00
h : function ( ) { return ( player . h . unl || player . t . energy . gte ( tmp . layerReqs . h ) ) && layerUnl ( 'h' ) } ,
q : function ( ) { return ( player . q . unl || player . g . power . gte ( tmp . layerReqs . q ) ) && layerUnl ( 'q' ) } ,
2020-08-22 01:16:23 +00:00
}
const LAYER _AMT _NAMES = {
p : "points" ,
b : "points" ,
g : "points" ,
t : "points" ,
e : "points" ,
s : "points" ,
2020-08-26 01:45:22 +00:00
sb : "boosters" ,
h : "time energy" ,
q : "generator power" ,
2020-08-22 01:16:23 +00:00
}
function getLayerAmt ( layer ) {
let amt = player . points
switch ( layer ) {
case "sb" :
return player . b . points ;
break ;
2020-08-26 01:45:22 +00:00
case "h" :
return player . t . energy ;
break ;
case "q" :
return player . g . power ;
break ;
2020-08-22 01:16:23 +00:00
}
return amt
2020-08-19 02:50:24 +00:00
}
function getLayerEffDesc ( layer ) {
if ( ! Object . keys ( LAYER _EFFS ) . includes ( layer ) ) return "???"
2020-08-21 19:02:34 +00:00
let eff = tmp . layerEffs [ layer ]
2020-08-19 02:50:24 +00:00
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 ;
2020-08-22 01:16:23 +00:00
case "sb" :
2020-08-23 19:36:03 +00:00
return "which are multiplying the Booster effect base by " + format ( eff )
2020-08-22 01:16:23 +00:00
break ;
2020-08-26 01:45:22 +00:00
case "h" :
return "which are providing " + format ( eff ) + " free extra Time Capsules (boosted by your points)"
break ;
2020-08-19 02:50:24 +00:00
}
}
function save ( ) {
localStorage . setItem ( "prestige-tree" , btoa ( JSON . stringify ( player ) ) )
}
function load ( ) {
let get = localStorage . getItem ( "prestige-tree" ) ;
2020-08-19 19:53:14 +00:00
if ( get === null || get === undefined ) player = getStartPlayer ( )
2020-08-19 02:50:24 +00:00
else player = JSON . parse ( atob ( get ) )
player . tab = "tree"
checkForVars ( ) ;
convertToDecimal ( ) ;
2020-08-23 19:36:03 +00:00
versionCheck ( ) ;
2020-08-21 19:02:34 +00:00
updateTemp ( ) ;
2020-08-19 02:50:24 +00:00
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 ) ;
}
2020-08-23 19:36:03 +00:00
function importSave ( imported = undefined ) {
if ( imported === undefined ) imported = prompt ( "Paste your save here" )
2020-08-19 02:50:24 +00:00
try {
player = JSON . parse ( atob ( imported ) )
save ( )
window . location . reload ( )
} catch ( e ) {
return ;
}
}
2020-08-23 19:36:03 +00:00
function versionCheck ( ) {
let setVersion = true
if ( player . versionType === undefined || player . version === undefined ) {
player . versionType = "alpha"
player . version = 0
}
if ( player . versionType == "alpha" ) {
if ( player . version < 10 && player . sb . unl ) {
2020-08-24 02:01:14 +00:00
if ( confirm ( "Since the last time you played, several changes to Super-Booster effects have been made. Would you like to roll back your save to that point in the progression, in order for you to experience the new features properly?" ) ) importSave ( SAVES . PRE _SUPER _BOOSTERS )
2020-08-23 19:36:03 +00:00
setVersion = false ;
}
}
if ( setVersion ) {
player . versionType = getStartPlayer ( ) . versionType
player . version = getStartPlayer ( ) . version
}
}
2020-08-19 02:50:24 +00:00
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
2020-08-20 04:55:26 +00:00
if ( player . b . auto === undefined ) player . b . auto = false
2020-08-19 02:50:24 +00:00
if ( player . g . best === undefined ) player . g . best = player . g . points
2020-08-20 04:55:26 +00:00
if ( player . g . auto === undefined ) player . g . auto = false
2020-08-19 02:50:24 +00:00
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
2020-08-19 19:53:14 +00:00
if ( player . s . buildings [ 4 ] === undefined ) player . s . buildings [ 4 ] = new Decimal ( 0 ) ;
2020-08-20 20:37:22 +00:00
if ( player . s . buildings [ 5 ] === undefined ) player . s . buildings [ 5 ] = new Decimal ( 0 ) ;
2020-08-22 01:16:23 +00:00
if ( player . sb === undefined ) player . sb = getStartPlayer ( ) . sb
2020-08-23 19:36:03 +00:00
if ( player . timePlayed === undefined ) player . timePlayed = 0
2020-08-24 02:01:14 +00:00
if ( player . hasNaN === undefined ) player . hasNaN = false
2020-08-26 01:45:22 +00:00
if ( player . h === undefined ) player . h = getStartPlayer ( ) . h
if ( player . q === undefined ) player . q = getStartPlayer ( ) . q
2020-08-19 02:50:24 +00:00
}
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 )
2020-08-20 20:37:22 +00:00
for ( let i = 1 ; i <= 5 ; i ++ ) player . s . buildings [ i ] = new Decimal ( player . s . buildings [ i ] )
2020-08-22 01:16:23 +00:00
player . sb . points = new Decimal ( player . sb . points )
player . sb . best = new Decimal ( player . sb . best )
2020-08-26 01:45:22 +00:00
player . h . points = new Decimal ( player . h . points )
player . h . best = new Decimal ( player . h . best )
player . q . points = new Decimal ( player . q . points )
player . q . best = new Decimal ( player . q . best )
player . q . layers = new Decimal ( player . q . layers )
player . q . energy = new Decimal ( player . q . energy )
player . q . time = new Decimal ( player . q . time )
2020-08-19 02:50:24 +00:00
}
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 )
2020-08-24 02:01:14 +00:00
if ( isNaN ( decimal . sign ) || isNaN ( decimal . layer ) || isNaN ( decimal . mag ) ) {
player . hasNaN = true ;
return "NaN"
}
2020-08-23 19:36:03 +00:00
if ( decimal . eq ( 1 / 0 ) ) return "Infinity"
2020-08-21 03:33:13 +00:00
if ( decimal . gte ( "eee1000" ) ) return exponentialFormat ( decimal , precision )
else if ( decimal . gte ( "ee1000" ) ) return "ee" + format ( decimal . log10 ( ) . log10 ( ) )
2020-08-21 19:02:34 +00:00
else if ( decimal . gte ( "1e1000" ) ) return decimal . div ( Decimal . pow ( 10 , decimal . log10 ( ) . floor ( ) ) ) . toStringWithDecimalPlaces ( 3 ) + "e" + format ( decimal . log10 ( ) . floor ( ) )
2020-08-21 03:33:13 +00:00
else if ( decimal . gte ( 1e9 ) ) return exponentialFormat ( decimal , precision )
2020-08-19 19:53:14 +00:00
else if ( decimal . gte ( 1e3 ) ) return commaFormat ( decimal , 0 )
2020-08-19 02:50:24 +00:00
else return commaFormat ( decimal , precision )
}
function formatWhole ( decimal ) {
return format ( decimal , 0 )
}
2020-08-24 02:01:14 +00:00
function formatTime ( s ) {
if ( s < 60 ) return format ( s ) + "s"
else if ( s < 3600 ) return formatWhole ( Math . floor ( s / 60 ) ) + "m " + format ( s % 60 ) + "s"
else return formatWhole ( Math . floor ( s / 3600 ) ) + "h " + formatWhole ( Math . floor ( s / 60 ) % 60 ) + "m " + format ( s % 60 ) + "s"
}
2020-08-19 02:50:24 +00:00
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" :
2020-08-20 01:27:52 +00:00
req = req . times ( Decimal . pow ( "1e200" , Decimal . pow ( player . e . order , 2 ) ) )
2020-08-19 02:50:24 +00:00
break ;
case "t" :
2020-08-20 01:27:52 +00:00
req = req . times ( Decimal . pow ( "1e200" , Decimal . pow ( player . t . order , 2 ) ) )
2020-08-19 02:50:24 +00:00
break ;
case "s" :
2020-08-20 01:27:52 +00:00
req = req . times ( Decimal . pow ( "1e200" , Decimal . pow ( player . s . order , 2 ) ) )
2020-08-19 02:50:24 +00:00
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 ( ) )
2020-08-23 19:36:03 +00:00
if ( player . p . upgrades . includes ( 31 ) ) mult = mult . times ( LAYER _UPGS . p [ 31 ] . currently ( ) )
2020-08-19 02:50:24 +00:00
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 ( ) )
2020-08-21 19:02:34 +00:00
if ( player . e . unl ) mult = mult . times ( tmp . enhEff )
2020-08-19 19:53:14 +00:00
if ( player . e . upgrades . includes ( 12 ) ) mult = mult . times ( LAYER _UPGS . e [ 12 ] . currently ( ) )
if ( player . e . upgrades . includes ( 13 ) ) mult = mult . times ( 1e10 )
2020-08-23 19:36:03 +00:00
if ( player . e . upgrades . includes ( 34 ) ) mult = mult . times ( 1e40 )
2020-08-21 19:02:34 +00:00
if ( player . t . unl ) mult = mult . times ( tmp . timeEff )
if ( player . s . unl && tmp . spaceBuildEff ) mult = mult . times ( tmp . spaceBuildEff [ 1 ] )
2020-08-19 02:50:24 +00:00
break ;
case "b" :
if ( player . b . upgrades . includes ( 23 ) ) mult = mult . div ( LAYER _UPGS . b [ 23 ] . currently ( ) )
2020-08-21 19:02:34 +00:00
if ( player . s . unl && tmp . spaceBuildEff ) mult = mult . div ( tmp . spaceBuildEff [ 3 ] )
2020-08-19 02:50:24 +00:00
break ;
case "g" :
if ( player . g . upgrades . includes ( 22 ) ) mult = mult . div ( LAYER _UPGS . g [ 22 ] . currently ( ) )
2020-08-21 19:02:34 +00:00
if ( player . s . unl && tmp . spaceBuildEff ) mult = mult . div ( tmp . spaceBuildEff [ 3 ] )
break ;
case "e" :
if ( player . e . upgrades . includes ( 24 ) ) mult = mult . times ( LAYER _UPGS . e [ 24 ] . currently ( ) )
2020-08-26 01:45:22 +00:00
if ( player . h . best . gte ( 1 ) ) mult = mult . times ( 100 )
if ( player . q . best . gte ( 1 ) ) mult = mult . times ( 100 )
2020-08-19 02:50:24 +00:00
break ;
}
return mult
}
function getResetGain ( layer ) {
if ( LAYER _TYPE [ layer ] == "static" ) {
2020-08-22 01:16:23 +00:00
if ( ( ! canBuyMax ( layer ) ) || tmp . layerAmt [ layer ] . lt ( tmp . layerReqs [ layer ] ) ) return new Decimal ( 1 )
let gain = tmp . layerAmt [ layer ] . div ( tmp . layerReqs [ layer ] ) . div ( tmp . gainMults [ layer ] ) . max ( 1 ) . log ( LAYER _BASE [ layer ] ) . pow ( Decimal . pow ( LAYER _EXP [ layer ] , - 1 ) )
2020-08-19 02:50:24 +00:00
if ( gain . gte ( 12 ) ) gain = gain . times ( 12 ) . sqrt ( )
return gain . floor ( ) . sub ( player [ layer ] . points ) . plus ( 1 ) . max ( 1 ) ;
}
2020-08-22 01:16:23 +00:00
if ( tmp . layerAmt [ layer ] . lt ( tmp . layerReqs [ layer ] ) ) return new Decimal ( 0 )
let gain = tmp . layerAmt [ layer ] . div ( tmp . layerReqs [ layer ] ) . pow ( LAYER _EXP [ layer ] ) . times ( tmp . gainMults [ layer ] )
2020-08-19 02:50:24 +00:00
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 )
2020-08-21 19:02:34 +00:00
let extraCost = Decimal . pow ( LAYER _BASE [ layer ] , amt . pow ( LAYER _EXP [ layer ] ) ) . times ( tmp . gainMults [ layer ] )
2020-08-25 22:42:43 +00:00
let cost = extraCost . times ( tmp . layerReqs [ layer ] ) . max ( tmp . layerReqs [ layer ] )
if ( LAYER _RES _CEIL . includes ( layer ) ) cost = cost . ceil ( )
return cost ;
} else {
let next = tmp . resetGain [ layer ] . plus ( 1 ) . div ( tmp . gainMults [ layer ] ) . root ( LAYER _EXP [ layer ] ) . times ( tmp . layerReqs [ layer ] ) . max ( tmp . layerReqs [ layer ] )
if ( LAYER _RES _CEIL . includes ( layer ) ) next = next . ceil ( )
return next ;
}
2020-08-19 02:50:24 +00:00
}
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 ;
2020-08-22 01:16:23 +00:00
case "sb" :
return player . e . unl && player . t . unl && player . s . unl ;
break ;
2020-08-26 01:45:22 +00:00
case "h" :
return player . t . unl && player . sb . unl
break ;
case "q" :
return player . e . unl && player . sb . unl
break ;
2020-08-19 02:50:24 +00:00
}
}
function rowReset ( row , layer ) {
let prev = JSON . parse ( JSON . stringify ( player ) ) // Deep Copy
2020-08-26 01:45:22 +00:00
let start = getStartPlayer ( )
2020-08-19 02:50:24 +00:00
switch ( row ) {
case 0 :
player . points = new Decimal ( 0 ) ;
break ;
case 1 :
player . points = new Decimal ( 10 ) ;
player . p . points = new Decimal ( 0 ) ;
2020-08-26 01:45:22 +00:00
if ( ( player . h . best . lt ( 1 ) && player . q . best . lt ( 1 ) ) || LAYER _ROW [ layer ] >= 3 ) {
if ( layer == "b" || layer == "g" ) {
if ( player [ layer ] . best . lt ( 8 ) ) player . p . upgrades = [ ] ;
} else if ( layer == "t" || layer == "s" || layer == "sb" ) {
if ( player [ layer ] . best . lt ( 3 ) ) player . p . upgrades = [ ] ;
} else if ( layer == "e" ) {
if ( player [ layer ] . best . lt ( 10 ) ) player . p . upgrades = [ ] ;
} else player . p . upgrades = [ ] ;
}
2020-08-19 02:50:24 +00:00
player . g . power = new Decimal ( 0 ) ;
break ;
case 2 :
player . b . points = new Decimal ( 0 ) ;
player . b . best = new Decimal ( 0 ) ;
2020-08-19 22:12:31 +00:00
if ( ! player . t . best . gte ( 4 ) ) player . b . upgrades = [ ] ;
2020-08-19 02:50:24 +00:00
player . g . points = new Decimal ( 0 ) ;
player . g . power = new Decimal ( 0 ) ;
player . g . best = new Decimal ( 0 ) ;
2020-08-19 22:12:31 +00:00
if ( ! player . s . best . gte ( 4 ) ) player . g . upgrades = [ ] ;
2020-08-19 02:50:24 +00:00
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 )
}
2020-08-23 19:36:03 +00:00
} else if ( player . sb . best . gte ( 4 ) && layer == "sb" ) {
2020-08-22 03:59:24 +00:00
player . b . best = new Decimal ( prev . b . best )
player . g . best = new Decimal ( prev . g . best )
2020-08-19 02:50:24 +00:00
}
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 ) ,
2020-08-19 19:53:14 +00:00
3 : new Decimal ( 0 ) ,
2020-08-20 20:37:22 +00:00
4 : new Decimal ( 0 ) ,
5 : new Decimal ( 0 )
2020-08-19 02:50:24 +00:00
} ,
upgrades : [ ] ,
}
2020-08-22 01:16:23 +00:00
player . sb = {
unl : player . sb . unl ,
order : 0 ,
points : new Decimal ( 0 ) ,
best : new Decimal ( 0 ) ,
upgrades : [ ] ,
}
2020-08-26 01:45:22 +00:00
player . q . time = new Decimal ( 0 ) ;
player . q . energy = new Decimal ( 0 ) ;
break ;
case 4 :
player . h = start . h
player . q = start . q
2020-08-19 02:50:24 +00:00
break ;
}
}
function doReset ( layer , force = false ) {
if ( ! force ) {
2020-08-22 01:16:23 +00:00
if ( tmp . layerAmt [ layer ] . lt ( tmp . layerReqs [ layer ] ) ) return ;
2020-08-21 19:02:34 +00:00
let gain = tmp . resetGain [ layer ]
2020-08-19 02:50:24 +00:00
if ( LAYER _TYPE [ layer ] == "static" ) {
2020-08-22 01:16:23 +00:00
if ( tmp . layerAmt [ layer ] . lt ( tmp . nextAt [ layer ] ) ) return ;
2020-08-19 02:50:24 +00:00
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 ] ]
2020-08-26 01:45:22 +00:00
for ( let i in layers ) if ( ! player [ layers [ i ] ] . unl && player [ layers [ i ] ] !== undefined ) player [ layers [ i ] ] . order ++
2020-08-19 02:50:24 +00:00
}
2020-08-22 03:59:24 +00:00
tmp . layerAmt [ layer ] = new Decimal ( 0 ) // quick fix
2020-08-19 02:50:24 +00:00
}
2020-08-21 03:33:13 +00:00
if ( ( layer == "b" && player . t . best . gte ( 12 ) ) || ( layer == "g" && player . s . best . gte ( 12 ) ) ) return ;
2020-08-19 02:50:24 +00:00
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 ) ;
2020-08-21 03:33:13 +00:00
if ( layer == "t" && id == 32 ) player . t . order = 0 ;
if ( layer == "e" && ( id == 22 || id == 23 ) ) {
player . e . order = 0 ;
if ( ! player . e . upgrades . includes ( 22 ) ) player . e . upgrades . push ( 22 )
if ( ! player . e . upgrades . includes ( 23 ) ) player . e . upgrades . push ( 23 )
}
if ( layer == "s" && id == 33 ) player . s . order = 0 ;
2020-08-19 02:50:24 +00:00
}
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 ( ) )
2020-08-21 19:02:34 +00:00
if ( player . b . unl ) gain = gain . times ( tmp . layerEffs . b )
if ( player . g . unl ) gain = gain . times ( tmp . genPowEff )
if ( player . t . unl ) gain = gain . times ( tmp . timeEff )
if ( player . s . unl && tmp . spaceBuildEff ) gain = gain . times ( tmp . spaceBuildEff [ 1 ] )
2020-08-26 01:45:22 +00:00
if ( player . q . unl && tmp . quirkEff ) gain = gain . times ( tmp . quirkEff )
2020-08-19 02:50:24 +00:00
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 ( ) )
2020-08-19 19:53:14 +00:00
if ( player . t . upgrades . includes ( 11 ) ) toAdd = toAdd . plus ( LAYER _UPGS . t [ 11 ] . currently ( ) )
2020-08-20 20:37:22 +00:00
if ( player . t . upgrades . includes ( 31 ) ) toAdd = toAdd . plus ( 25 )
2020-08-21 19:02:34 +00:00
if ( player . t . upgrades . includes ( 33 ) ) toAdd = toAdd . plus ( 40 )
if ( player . e . unl ) toAdd = toAdd . plus ( tmp . enhEff2 )
2020-08-19 19:53:14 +00:00
if ( player . e . upgrades . includes ( 11 ) ) toAdd = toAdd . plus ( LAYER _UPGS . e [ 11 ] . currently ( ) . b )
2020-08-21 19:02:34 +00:00
if ( player . s . unl && tmp . spaceBuildEff ) toAdd = toAdd . plus ( tmp . spaceBuildEff [ 2 ] )
2020-08-23 19:36:03 +00:00
if ( player . sb . unl ) toAdd = toAdd . times ( tmp . layerEffs . sb )
2020-08-19 02:50:24 +00:00
return toAdd
}
2020-08-20 04:55:26 +00:00
function getFreeBoosters ( ) {
let free = new Decimal ( 0 )
if ( player . t . upgrades . includes ( 24 ) ) free = free . plus ( 18 )
return free
}
2020-08-19 02:50:24 +00:00
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 ( ) )
2020-08-21 19:02:34 +00:00
if ( player . e . unl ) toAdd = toAdd . plus ( tmp . enhEff2 )
2020-08-19 19:53:14 +00:00
if ( player . e . upgrades . includes ( 11 ) ) toAdd = toAdd . plus ( LAYER _UPGS . e [ 11 ] . currently ( ) . g )
2020-08-21 19:02:34 +00:00
if ( player . s . unl && tmp . spaceBuildEff ) toAdd = toAdd . plus ( tmp . spaceBuildEff [ 2 ] )
2020-08-19 02:50:24 +00:00
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 ( ) )
2020-08-23 19:36:03 +00:00
if ( player . e . upgrades . includes ( 35 ) ) mult = mult . times ( LAYER _UPGS . e [ 35 ] . currently ( ) )
2020-08-19 19:53:14 +00:00
if ( player . s . upgrades . includes ( 12 ) ) mult = mult . times ( LAYER _UPGS . s [ 12 ] . currently ( ) )
if ( player . s . upgrades . includes ( 13 ) ) mult = mult . times ( LAYER _UPGS . s [ 13 ] . currently ( ) )
2020-08-26 01:45:22 +00:00
if ( player . q . unl && tmp . quirkEff ) mult = mult . times ( tmp . quirkEff )
2020-08-19 02:50:24 +00:00
return mult
}
2020-08-21 03:33:13 +00:00
function getGenPowerEffExp ( ) {
let exp = new Decimal ( 1 / 3 )
if ( player . s . upgrades . includes ( 34 ) ) exp = exp . plus ( LAYER _UPGS . s [ 34 ] . currently ( ) )
if ( player . b . upgrades . includes ( 21 ) ) exp = exp . times ( 2 )
if ( player . b . upgrades . includes ( 22 ) ) exp = exp . times ( 1.2 )
if ( player . e . upgrades . includes ( 21 ) ) exp = exp . times ( 1.15 )
return exp ;
}
2020-08-19 02:50:24 +00:00
function getGenPowerEff ( ) {
2020-08-21 03:33:13 +00:00
let eff = player . g . power . plus ( 1 ) . pow ( getGenPowerEffExp ( ) ) ;
2020-08-19 02:50:24 +00:00
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
2020-08-21 03:33:13 +00:00
if ( player [ layers [ layer ] ] . order ) player [ layers [ layer ] ] . order = 0
2020-08-19 02:50:24 +00:00
}
2020-08-21 19:02:34 +00:00
updateTemp ( ) ;
2020-08-19 02:50:24 +00:00
resizeCanvas ( ) ;
}
function getEnhancerCost ( ) {
2020-08-21 03:33:13 +00:00
let e = player . e . enhancers
if ( e . gte ( 25 ) ) e = e . pow ( 2 ) . div ( 25 )
let cost = Decimal . pow ( 2 , e . pow ( 1.5 ) )
2020-08-19 20:07:06 +00:00
return cost . floor ( )
2020-08-19 02:50:24 +00:00
}
2020-08-21 19:02:34 +00:00
function getEnhancerPow ( ) {
let pow = new Decimal ( 1 )
if ( player . e . upgrades . includes ( 25 ) ) pow = pow . times ( LAYER _UPGS . e [ 25 ] . currently ( ) )
2020-08-23 19:36:03 +00:00
if ( player . e . upgrades . includes ( 31 ) ) pow = pow . times ( LAYER _UPGS . e [ 31 ] . currently ( ) )
2020-08-21 19:02:34 +00:00
return pow
}
2020-08-19 02:50:24 +00:00
function getEnhancerEff ( ) {
if ( ! player . e . unl ) return new Decimal ( 1 )
2020-08-21 19:02:34 +00:00
let eff = Decimal . pow ( 25 , player . e . enhancers . times ( tmp . enhPow ) . pow ( 1.1 ) )
2020-08-19 02:50:24 +00:00
return eff
}
function getEnhancerEff2 ( ) {
if ( ! player . e . unl ) return new Decimal ( 0 )
2020-08-21 19:02:34 +00:00
let eff = player . e . enhancers . times ( tmp . enhPow ) . pow ( 0.8 )
2020-08-19 02:50:24 +00:00
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 )
}
2020-08-19 19:53:14 +00:00
function getFreeExtCapsules ( ) {
let amt = new Decimal ( 0 )
if ( player . t . upgrades . includes ( 12 ) ) amt = amt . plus ( 1 )
2020-08-26 01:45:22 +00:00
if ( player . h . unl ) amt = amt . plus ( tmp . layerEffs . h )
2020-08-19 19:53:14 +00:00
return amt
}
2020-08-19 02:50:24 +00:00
function getTimeEnergyEff ( ) {
if ( ! player . t . unl ) return new Decimal ( 1 )
2020-08-19 22:12:31 +00:00
let exp = 1.2
if ( player . t . upgrades . includes ( 21 ) ) exp = 1.75
let eff = player . t . energy . plus ( 1 ) . pow ( exp )
2020-08-19 02:50:24 +00:00
return eff ;
}
2020-08-19 22:12:31 +00:00
function getTimeEnergyGainMult ( ) {
if ( ! player . t . unl ) return new Decimal ( 1 )
let mult = new Decimal ( 1 ) ;
if ( player . t . upgrades . includes ( 21 ) ) mult = mult . times ( LAYER _UPGS . t [ 21 ] . currently ( ) )
2020-08-20 01:27:52 +00:00
if ( player . t . upgrades . includes ( 22 ) ) mult = mult . times ( LAYER _UPGS . t [ 22 ] . currently ( ) )
if ( player . t . upgrades . includes ( 23 ) ) mult = mult . times ( LAYER _UPGS . t [ 23 ] . currently ( ) )
2020-08-22 03:59:24 +00:00
if ( player . t . upgrades . includes ( 34 ) ) mult = mult . times ( LAYER _UPGS . t [ 34 ] . currently ( ) )
2020-08-19 22:12:31 +00:00
return mult ;
}
2020-08-19 19:53:14 +00:00
function getTimeEnergyLimitMult ( ) {
if ( ! player . t . unl ) return new Decimal ( 1 )
let mult = new Decimal ( 1 ) ;
if ( player . t . upgrades . includes ( 12 ) ) mult = mult . times ( LAYER _UPGS . t [ 12 ] . currently ( ) )
2020-08-19 22:12:31 +00:00
if ( player . t . upgrades . includes ( 21 ) ) mult = mult . times ( LAYER _UPGS . t [ 21 ] . currently ( ) )
2020-08-20 01:27:52 +00:00
if ( player . t . upgrades . includes ( 22 ) ) mult = mult . times ( LAYER _UPGS . t [ 22 ] . currently ( ) )
if ( player . t . upgrades . includes ( 23 ) ) mult = mult . times ( LAYER _UPGS . t [ 23 ] . currently ( ) )
2020-08-22 03:59:24 +00:00
if ( player . t . upgrades . includes ( 34 ) ) mult = mult . times ( LAYER _UPGS . t [ 34 ] . currently ( ) )
2020-08-19 19:53:14 +00:00
return mult ;
}
2020-08-19 02:50:24 +00:00
function getExtCapsuleCost ( ) {
2020-08-21 03:33:13 +00:00
let amt = player . t . extCapsules
if ( amt . gte ( 25 ) ) amt = amt . pow ( 2 ) . div ( 25 )
let cost = amt . times ( 0.4 ) . pow ( 1.2 ) . plus ( 1 ) . times ( 10 )
2020-08-19 02:50:24 +00:00
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 ( )
2020-08-19 19:53:14 +00:00
if ( player . s . upgrades . includes ( 13 ) ) baseSpace = baseSpace . plus ( 2 ) ;
2020-08-20 04:55:26 +00:00
if ( player . s . upgrades . includes ( 24 ) ) baseSpace = baseSpace . plus ( 3 ) ;
2020-08-19 02:50:24 +00:00
return baseSpace . sub ( player . s . spent )
}
2020-08-20 04:55:26 +00:00
function getSpaceBuildingCostMod ( ) {
let mod = new Decimal ( 1 )
if ( player . s . upgrades . includes ( 24 ) ) mod = new Decimal ( 0.5 )
return mod ;
}
2020-08-19 02:50:24 +00:00
function getSpaceBuildingCost ( x ) {
2020-08-20 20:37:22 +00:00
let inputVal = new Decimal ( [ 1e3 , 1e10 , 1e25 , 1e48 , 1e100 ] [ x - 1 ] )
2020-08-19 02:50:24 +00:00
let bought = player . s . buildings [ x ]
2020-08-20 04:55:26 +00:00
let cost = Decimal . pow ( inputVal , bought . times ( getSpaceBuildingCostMod ( ) ) . pow ( 1.35 ) ) . times ( inputVal ) . times ( ( bought . gt ( 0 ) || x > 1 ) ? 1 : 0 )
2020-08-19 02:50:24 +00:00
return cost
}
2020-08-19 22:12:31 +00:00
function getSpaceBuildingPow ( ) {
if ( ! player . s . unl ) return new Decimal ( 0 )
let pow = new Decimal ( 1 )
if ( player . s . upgrades . includes ( 21 ) ) pow = pow . times ( LAYER _UPGS . s [ 21 ] . currently ( ) )
2020-08-20 04:55:26 +00:00
if ( player . s . upgrades . includes ( 22 ) ) pow = pow . times ( LAYER _UPGS . s [ 22 ] . currently ( ) )
if ( player . s . upgrades . includes ( 23 ) ) pow = pow . times ( LAYER _UPGS . s [ 23 ] . currently ( ) )
2020-08-19 22:12:31 +00:00
return pow
}
2020-08-19 19:53:14 +00:00
function getExtraBuildingLevels ( x ) {
let lvl = new Decimal ( 0 )
if ( player . s . upgrades . includes ( 11 ) ) lvl = lvl . plus ( 1 ) ;
if ( player . s . upgrades . includes ( 14 ) ) lvl = lvl . plus ( 1 ) ;
2020-08-21 19:02:34 +00:00
if ( x < 5 ) lvl = lvl . plus ( tmp . spaceBuildEff [ 5 ] )
2020-08-19 19:53:14 +00:00
return lvl
}
2020-08-19 02:50:24 +00:00
function getSpaceBuildingEff ( x ) {
2020-08-19 19:53:14 +00:00
let bought = player . s . buildings [ x ] . plus ( getExtraBuildingLevels ( x ) ) ;
2020-08-19 02:50:24 +00:00
if ( ! player . s . unl ) bought = new Decimal ( 0 ) ;
2020-08-21 19:02:34 +00:00
if ( tmp . sbUnl < x ) bought = new Decimal ( 0 ) ;
2020-08-19 22:12:31 +00:00
let power = getSpaceBuildingPow ( )
bought = bought . times ( power )
2020-08-19 02:50:24 +00:00
switch ( x ) {
case 1 :
2020-08-20 20:37:22 +00:00
return Decimal . pow ( Decimal . add ( 1 , bought . pow ( player . s . upgrades . includes ( 31 ) ? 2.75 : 1 ) ) , player . s . points . sqrt ( ) ) . times ( Decimal . mul ( 4 , bought . pow ( player . s . upgrades . includes ( 31 ) ? 2.75 : 1 ) ) ) . max ( 1 )
2020-08-19 02:50:24 +00:00
break ;
case 2 :
return bought . sqrt ( )
break ;
case 3 :
2020-08-19 19:53:14 +00:00
return Decimal . pow ( 1e18 , bought . pow ( 0.9 ) )
break ;
case 4 :
return bought . plus ( 1 ) . pow ( 1.25 )
2020-08-19 02:50:24 +00:00
break ;
2020-08-20 20:37:22 +00:00
case 5 :
return bought . sqrt ( ) . times ( 2 )
break ;
2020-08-19 02:50:24 +00:00
}
}
function getSpaceBuildingEffDesc ( x ) {
2020-08-21 19:02:34 +00:00
let eff = tmp . spaceBuildEff [ x ]
2020-08-19 02:50:24 +00:00
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 ;
2020-08-19 19:53:14 +00:00
case 4 :
return "Booster Upgrade 6's effect is raised to the power of " + format ( eff )
2020-08-20 20:37:22 +00:00
break ;
case 5 :
return "Add " + format ( eff ) + " free levels to all previous Space Buildings."
break ;
2020-08-19 02:50:24 +00:00
}
}
function buyBuilding ( x ) {
if ( ! player . s . unl ) return
2020-08-21 19:02:34 +00:00
if ( tmp . sbUnl < x ) return
2020-08-19 02:50:24 +00:00
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
2020-08-20 20:37:22 +00:00
for ( let i = 1 ; i <= 5 ; i ++ ) player . s . buildings [ i ] = new Decimal ( 0 )
2020-08-19 02:50:24 +00:00
player . s . spent = new Decimal ( 0 )
2020-08-19 19:53:14 +00:00
doReset ( "s" , true )
}
function getSpaceBuildingsUnl ( ) {
let x = 3
if ( player . s . upgrades . includes ( 14 ) ) x ++ ;
2020-08-20 20:37:22 +00:00
if ( player . s . upgrades . includes ( 32 ) ) x ++ ;
2020-08-19 19:53:14 +00:00
return x ;
2020-08-19 02:50:24 +00:00
}
2020-08-20 04:55:26 +00:00
function toggleAuto ( layer ) {
if ( player [ layer ] . auto === undefined ) return ;
player [ layer ] . auto = ! player [ layer ] . auto
}
2020-08-22 01:16:23 +00:00
function getSuperBoosterPow ( ) {
let pow = new Decimal ( 1 )
if ( player . sb . upgrades . includes ( 11 ) ) pow = pow . times ( LAYER _UPGS . sb [ 11 ] . currently ( ) )
2020-08-22 03:59:24 +00:00
if ( player . sb . upgrades . includes ( 12 ) ) pow = pow . times ( LAYER _UPGS . sb [ 12 ] . currently ( ) )
2020-08-22 01:16:23 +00:00
return pow ;
}
2020-08-26 01:45:22 +00:00
function getQuirkLayerCost ( ) {
let cost = Decimal . pow ( 2 , Decimal . pow ( 2 , player . q . layers ) ) . sub ( 1 )
return cost . max ( 1 ) ;
}
function getQuirkEnergyGainExp ( ) {
return player . q . layers . sub ( 1 )
}
function getQuirkEnergyEff ( ) {
let eff = player . q . energy . plus ( 1 ) . pow ( 2 )
return eff ;
}
function buyQuirkLayer ( ) {
if ( ! player . q . unl ) return
let cost = getQuirkLayerCost ( )
if ( player . q . points . lt ( cost ) ) return
player . q . points = player . q . points . sub ( cost )
player . q . layers = player . q . layers . plus ( 1 )
}
2020-08-19 02:50:24 +00:00
function gameLoop ( diff ) {
2020-08-24 02:01:14 +00:00
if ( isNaN ( diff ) ) diff = 0 ;
2020-08-23 19:36:03 +00:00
player . timePlayed += diff
2020-08-21 19:02:34 +00:00
if ( player . p . upgrades . includes ( 11 ) ) player . points = player . points . plus ( tmp . pointGen . times ( diff ) )
if ( player . g . unl ) player . g . power = player . g . power . plus ( tmp . layerEffs . g . times ( diff ) )
if ( player . g . best . gte ( 10 ) ) player . p . points = player . p . points . plus ( tmp . resetGain . p . times ( diff ) )
2020-08-19 02:50:24 +00:00
if ( player . t . unl ) {
2020-08-21 19:02:34 +00:00
let data = tmp . layerEffs . t
2020-08-19 02:50:24 +00:00
player . t . energy = player . t . energy . plus ( data . gain . times ( diff ) ) . min ( data . limit )
}
2020-08-20 04:55:26 +00:00
if ( player . b . auto && player . t . best . gte ( 5 ) ) doReset ( "b" )
if ( player . g . auto && player . s . best . gte ( 5 ) ) doReset ( "g" )
2020-08-24 02:01:14 +00:00
2020-08-26 01:45:22 +00:00
if ( player . q . unl ) {
player . q . time = player . q . time . plus ( diff )
let exp = getQuirkEnergyGainExp ( )
if ( exp . gte ( 0 ) ) player . q . energy = player . q . energy . plus ( player . q . time . pow ( exp ) . times ( diff ) )
}
2020-08-24 02:01:14 +00:00
if ( player . hasNaN && ! NaNalert ) {
alert ( "We have detected a corruption in your save. Please visit https://discord.gg/wwQfgPa for help." )
2020-08-25 22:42:43 +00:00
clearInterval ( interval ) ;
2020-08-26 01:45:22 +00:00
player . autosave = false ;
2020-08-24 02:01:14 +00:00
NaNalert = true ;
}
2020-08-19 02:50:24 +00:00
}
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 ( ) {
2020-08-19 22:20:42 +00:00
if ( player === undefined ) return ;
2020-08-19 02:50:24 +00:00
if ( player . autosave ) save ( ) ;
} , 5000 )
var interval = setInterval ( function ( ) {
2020-08-19 22:20:42 +00:00
if ( player === undefined ) return ;
2020-08-19 02:50:24 +00:00
let diff = ( Date . now ( ) - player . time ) / 1000
player . time = Date . now ( )
2020-08-22 03:59:24 +00:00
if ( needCanvasUpdate ) resizeCanvas ( ) ;
2020-08-21 19:02:34 +00:00
updateTemp ( ) ;
2020-08-19 02:50:24 +00:00
gameLoop ( diff )
2020-08-19 22:12:31 +00:00
} , 50 )
document . onkeydown = function ( e ) {
2020-08-19 22:20:42 +00:00
if ( player === undefined ) return ;
2020-08-19 22:12:31 +00:00
let shiftDown = e . shiftKey
let key = e . key
2020-08-22 03:59:24 +00:00
if ( ! LAYERS . includes ( key ) ) {
switch ( key ) {
case "B" :
if ( player . sb . unl ) doReset ( "sb" )
break ;
}
} else if ( player [ key ] . unl ) doReset ( key )
2020-08-19 22:12:31 +00:00
}