diff --git a/index.html b/index.html
index ea7db50..671f4b2 100644
--- a/index.html
+++ b/index.html
@@ -23,6 +23,23 @@
+
Beta v1.2 Alpha 9
+
+ - Added hints for h8 & h10
+ - Added a new Magic milestone
+ - Reduced offline time to 10% of its original amount
+ - Balanced up to 1e6,000,000 Points, 3e12 Magic, and 1e11 Balance Energy
+
+
Beta v1.2 Alpha 8
+
+ - Added a new milestone
+ - Added a new Hindrance ;)
+ - Balanced up to 1e5,500,000 Points, 2.5e10 Magic, and 2e9 Balance Energy
+
+
Beta v1.2 Alpha 7
+
+ - Balanced up to 1e3,950,000 Points, 1,500,000 Magic, and 5,000,000 Balance Energy
+
Beta v1.2 Alpha 6
- Fixed a bug with hotkeys
@@ -255,7 +272,12 @@
Q: Quirk reset
Ctrl+B: Hyper-Booster reset
Shift+S: Subspace reset
- M: Magic reset
+
+ M: Magic reset
+ 1: Cast spell 1
+ 2: Cast spell 2
+ 3: Cast spell 3
+
A: Balance reset
@@ -427,15 +449,17 @@
-
+
You have {{formatWhole(player.m.hexes)}} Hexes, which are multiplying Hindrance Spirit & Quirk gain by {{format(tmp.hexEff)}}
1 Magic Keep row 4 milestones on all resets |
2 Magic Keep Hindrance completions on all resets |
- 3 Magic Gain 1% of Hindrance Energy & Quirk gain every second |
+ 3 Magic Gain 100% of Hindrance Spirit & Quirk gain every second |
4 Magic Automatically purchase Hyper-Boosters & Subspace |
+ 1,000 Magic Automatically cast Spells |
+ 2.5e9 Magic Gain 100% of Hex gain every second, and Spells last 10x longer |
diff --git a/js/canvas.js b/js/canvas.js
index 89a54db..1b3fb6a 100644
--- a/js/canvas.js
+++ b/js/canvas.js
@@ -48,6 +48,7 @@ function drawTree() {
if (layerUnl('m')) {
drawTreeBranch("hb", "m")
drawTreeBranch("h", "m")
+ drawTreeBranch("q", "m")
}
if (layerUnl('ba')) {
drawTreeBranch("q", "ba")
diff --git a/js/game.js b/js/game.js
index d5cefb6..4a76553 100644
--- a/js/game.js
+++ b/js/game.js
@@ -131,6 +131,7 @@ function getStartPlayer() {
},
m: {
unl: false,
+ auto: false,
points: new Decimal(0),
best: new Decimal(0),
spellTimes: {
@@ -282,7 +283,7 @@ const LAYER_EFFS = {
limit: Decimal.pow(2, player.t.points.plus(player.t.extCapsules.plus(tmp.freeExtCap).times(getFreeExtPow())).times(getCapPow())).sub(1).times(100).times(getTimeEnergyLimitMult()),
}},
sb: function() { return Decimal.pow(Decimal.add(1.5, addToSBBase()), player.sb.points.times(getSuperBoosterPow())) },
- sg: function() { return Decimal.pow(Decimal.add(2, addToSGBase()), player.sg.points).times(getSuperGenPowerGainMult()).max(0) },
+ sg: function() { return Decimal.pow(Decimal.add(2, addToSGBase()), player.sg.points).sub(1).times(getSuperGenPowerGainMult()).max(0) },
h: function() {
let ret = player.h.points.plus(1).times(player.points.times(player.h.points).plus(1).log10().plus(1).log10().plus(1)).log10().times(5).root(player.q.upgrades.includes(12)?1.25:2);
if (player.h.challs.includes(61)) ret = ret.times(1.2);
@@ -292,7 +293,7 @@ const LAYER_EFFS = {
hb: function() { return Decimal.pow(Decimal.add(1.6, addToHBBase()), player.hb.points.pow(getHyperBoosterExp()).times(getHyperBoosterPow())) },
ss: function() { return player.ss.points.pow(2.5).times(getSubspaceGainMult()) },
ba: function() { return {
- power: player.ba.points.pow(0.2).pow(tmp.baExp ? tmp.baExp : 1),
+ power: player.ba.points.pow(0.2).pow(tmp.baExp ? tmp.baExp : 1).pow(player.ba.upgrades.includes(41)?2:1),
pos: player.ba.points.pow(0.7).pow(tmp.baExp ? tmp.baExp : 1),
neg: player.ba.points.pow(0.65).times(0.4).pow(tmp.baExp ? tmp.baExp : 1),
}},
@@ -1038,13 +1039,15 @@ const LAYER_UPGS = {
effDisp: function(x) { return format(x)+"x" },
},
25: {
- desc: "Placeholder",
- cost: new Decimal(1/0),
+ desc: "Subspace is generated faster based on your Quirk Layers.",
+ cost: new Decimal(8),
unl: function() { return player.ba.upgrades.includes(24) },
+ currently: function() { return Decimal.pow(10, player.q.layers.sqrt()) },
+ effDisp: function(x) { return format(x)+"x" },
},
},
m: {
- rows: 2,
+ rows: 3,
cols: 4,
11: {
desc: "Hexes boost all Spells.",
@@ -1090,13 +1093,39 @@ const LAYER_UPGS = {
unl: function() { return player.m.upgrades.includes(21) },
},
24: {
- desc: "???",
- cost: new Decimal(1/0),
- unl: function() { return false },
+ desc: "Add free Quirk Layers based on your Boosters.",
+ cost: new Decimal(80000),
+ unl: function() { return player.m.upgrades.includes(22) },
+ currently: function() { return player.b.points.plus(1).log10().times(0.9) },
+ effDisp: function(x) { return "+"+format(x) },
+ },
+ 31: {
+ desc: "Unlock a new Hindrance.",
+ cost: new Decimal(2.5e6),
+ unl: function() { return player.m.upgrades.includes(23)&&player.sg.unl },
+ },
+ 32: {
+ desc: "Hyper-Boosters add free Space Buildings.",
+ cost: new Decimal(5e9),
+ unl: function() { return player.m.upgrades.includes(24) },
+ currently: function() { return player.hb.points.plus(1).pow(3) },
+ effDisp: function(x) { return "+"+formatWhole(x) },
+ },
+ 33: {
+ desc: "Hindrance Spirit adds to the Hyper-Booster base.",
+ cost: new Decimal(2e10),
+ unl: function() { return player.m.upgrades.includes(31) },
+ currently: function() { return player.h.points.plus(1).log10().plus(1).log10().plus(1).log10().div(2) },
+ effDisp: function(x) { return "+"+format(x) },
+ },
+ 34: {
+ desc: "Add 1 free Quirk Layer.",
+ cost: new Decimal(4e10),
+ unl: function() { return player.m.upgrades.includes(32) },
},
},
ba: {
- rows: 2,
+ rows: 4,
cols: 4,
11: {
desc: "All Balance Energy effects use better formulas.",
@@ -1148,6 +1177,50 @@ const LAYER_UPGS = {
cost: new Decimal(2e4),
unl: function() { return player.ba.upgrades.includes(22) },
},
+ 31: {
+ desc: "The Quirk Layer cost is adjusted based on your Balance Upgrades bought.",
+ cost: new Decimal(4e5),
+ unl: function() { return player.ba.upgrades.includes(23) },
+ currently: function() { return Decimal.div(0.8, Math.pow(player.ba.upgrades.length+1, 0.1)).plus(1.2) },
+ effDisp: function(x) { return "2 -> "+format(x) },
+ },
+ 32: {
+ desc: "Enhancers are stronger based on your Positivity.",
+ cost: new Decimal(5e5),
+ unl: function() { return player.ba.upgrades.includes(24) },
+ currently: function() { return player.ba.positivity.plus(1).log10().plus(1).log10().plus(1).pow(2) },
+ effDisp: function(x) { return format(x.sub(1).times(100))+"% stronger" },
+ },
+ 33: {
+ desc: "The Balance Power effect is squared.",
+ cost: new Decimal(1e6),
+ unl: function() { return player.ba.upgrades.includes(31) },
+ },
+ 34: {
+ desc: "The Positivity & Negativity effect uses a better formula.",
+ cost: new Decimal(2e6),
+ unl: function() { return player.ba.upgrades.includes(32) },
+ },
+ 41: {
+ desc: "The first Balance Energy effect is squared.",
+ cost: new Decimal(2e10),
+ unl: function() { return player.ba.upgrades.includes(33)&&player.ba.upgrades.includes(34) },
+ },
+ 42: {
+ desc: "???",
+ cost: new Decimal(1/0),
+ unl: function() { return false },
+ },
+ 43: {
+ desc: "???",
+ cost: new Decimal(1/0),
+ unl: function() { return false },
+ },
+ 44: {
+ desc: "???",
+ cost: new Decimal(1/0),
+ unl: function() { return false },
+ },
},
}
@@ -1264,7 +1337,7 @@ function load() {
if (get===null||get===undefined) player = getStartPlayer()
else player = JSON.parse(atob(get))
player.tab = "tree"
- offTime.remain = (Date.now()-player.time)/1000
+ offTime.remain = (Date.now()-player.time)/10000
if (!player.offlineProd) offTime.remain = 0
player.time = Date.now()
checkForVars();
@@ -1361,6 +1434,7 @@ function checkForVars() {
if (player.ss === undefined) player.ss = start.ss
if (player.ss.auto === undefined) player.ss.auto = false
if (player.m === undefined) player.m = start.m
+ if (player.m.auto === undefined) player.m.auto = false
if (player.ba === undefined) player.ba = start.ba
if (player.offlineProd === undefined) player.offlineProd = true
}
@@ -1558,6 +1632,7 @@ function getLayerGainMult(layer) {
if (player.ss.upgrades.includes(14)) mult = mult.div(1.0825)
break;
case "h":
+ if (player.h.challs.includes(71)) mult = mult.times(H_CHALLS[71].currently())
if (player.q.upgrades.includes(22)) mult = mult.times(LAYER_UPGS.q[22].currently().h)
if (player.q.upgrades.includes(34)) mult = mult.times(LAYER_UPGS.q[34].currently())
if (player.q.upgrades.includes(44)) mult = mult.times(LAYER_UPGS.q[44].currently())
@@ -1976,6 +2051,7 @@ function getEnhancerPow() {
if (player.e.upgrades.includes(31)&&!(tmp.hcActive?tmp.hcActive[12]:true)) pow = pow.times(LAYER_UPGS.e[31].currently())
if (player.h.challs.includes(31)) pow = pow.times(2)
if (player.q.upgrades.includes(42)) pow = pow.times(1.4)
+ if (player.ba.upgrades.includes(32)) pow = pow.times(LAYER_UPGS.ba[32].currently())
return pow
}
@@ -2149,6 +2225,7 @@ function getExtraBuildingLevels(x) {
if (player.s.upgrades.includes(14)&&!(tmp.hcActive?tmp.hcActive[12]:true)) lvl = lvl.plus(1);
if (player.q.upgrades.includes(31)) lvl = lvl.plus(1);
if (x<5) lvl = lvl.plus(tmp.spaceBuildEff[5])
+ if (player.m.upgrades.includes(32)) lvl = lvl.plus(LAYER_UPGS.m[32].currently())
return lvl
}
@@ -2268,13 +2345,19 @@ function addToSBBase() {
return toAdd
}
+function getQuirkLayerCostBase() {
+ let base = new Decimal(2)
+ if (player.ba.upgrades.includes(31)) base = LAYER_UPGS.ba[31].currently()
+ return base
+}
+
function getQuirkLayerCost() {
- let cost = Decimal.pow(2, Decimal.pow(2, player.q.layers)).sub(1)
+ let cost = Decimal.pow(tmp.qCB, Decimal.pow(tmp.qCB, player.q.layers)).sub(1)
return cost.max(1);
}
function getQuirkLayerTarg() {
- let targ = player.q.points.plus(1).log2().plus(1).log2().plus(1).floor()
+ let targ = player.q.points.plus(1).log(tmp.qCB).plus(1).log(tmp.qCB).plus(1).floor()
return targ
}
@@ -2288,10 +2371,17 @@ function getQuirkLayerMult() {
return mult
}
+function getExtraQuirkLayers() {
+ let layers = new Decimal(0);
+ if (player.m.upgrades.includes(24)) layers = layers.plus(LAYER_UPGS.m[24].currently())
+ if (player.m.upgrades.includes(34)) layers = layers.plus(1)
+ return layers;
+}
+
function getQuirkEnergyGainExp() {
let mult = new Decimal(1)
if (spellActive(3)) mult = mult.times(tmp.spellEffs[3])
- return player.q.layers.sub(1).times(mult)
+ return player.q.layers.plus(getExtraQuirkLayers()).sub(1).times(mult)
}
function getQuirkEnergyEff() {
@@ -2329,7 +2419,7 @@ function maxQuirkLayers() {
}
const H_CHALLS = {
- rows: 6,
+ rows: 7,
cols: 2,
11: {
name: "Skip the Second",
@@ -2386,7 +2476,7 @@ const H_CHALLS = {
},
42: {
name: "Slowed to a Halt",
- desc: "Time slows down over time, halting to a stop after 10 seconds.",
+ desc: "Time slows down over time, halting to a stop after 10 seconds. Hint: This also impacts auto Enhance Point generation, so make sure to manually press E!",
unl: function() { return player.h.challs.includes(31)&&player.h.challs.includes(32) },
goal: new Decimal("1e16500"),
reward: "Cube the Generator Power effect.",
@@ -2402,7 +2492,7 @@ const H_CHALLS = {
},
52: {
name: "Anti-Enhancers",
- desc: "You lose Enhancers over time, which can make your Enhancer amount get below 0.",
+ desc: "You lose Enhancers over time, which can make your Enhancer amount get below 0. Hint: Maybe it's best to not have any Time Capsules or Space Energy?",
unl: function() { return player.h.challs.includes(41)&&player.h.challs.includes(42)&&player.h.challs.includes(51) },
goal: new Decimal("1e440000"),
reward: "Quirk Layers are faster based on your Hindrance Spirit & Quirks.",
@@ -2429,9 +2519,26 @@ const H_CHALLS = {
goal: new Decimal("1e134000"),
reward: "Unlock Super-Generators.",
},
+ 71: {
+ name: "The Final Stockade",
+ desc: 'All previous Hindrances (except "Slowed to a Halt" and "Anti-Enhancers") are applied at once.',
+ unl: function() { return player.m.upgrades.includes(31) },
+ goal: new Decimal("1e1150"),
+ reward: "Gain more Hindrance Spirit based on your Quirk Energy.",
+ currently: function() { return player.q.energy.plus(1).sqrt() },
+ effDisp: function(x) { return format(x)+"x" },
+ },
+ 72: {
+ name: "You shouldn't be seeing this",
+ desc: "Never gonna give you up, never gonna let you down, never gonna run around and dessert you",
+ unl: function() { return false },
+ goal: new Decimal(1/0),
+ reward: "???",
+ },
}
function HCActive(x) {
+ if (x<71&&x!=42&&x!=52) if (HCActive(71)) return true
if (x==11||x==41) if (HCActive(51)) return true
if (x==31||x==32) if (HCActive(61)) return true
return player.h.active==x;
@@ -2499,6 +2606,7 @@ function getSubspaceGainMult() {
if (player.ss.upgrades.includes(12)) mult = mult.times(LAYER_UPGS.ss[12].currently())
if (player.ss.upgrades.includes(22)) mult = mult.times(LAYER_UPGS.ss[22].currently())
if (player.ss.upgrades.includes(24)) mult = mult.times(LAYER_UPGS.ss[24].currently())
+ if (player.ss.upgrades.includes(25)) mult = mult.times(LAYER_UPGS.ss[25].currently())
if (player.ba.upgrades.includes(12)) mult = mult.times(LAYER_UPGS.ba[12].currently())
return mult
}
@@ -2506,6 +2614,7 @@ function getSubspaceGainMult() {
function addToHBBase() {
let toAdd = new Decimal(0)
if (player.m.upgrades.includes(13)) toAdd = toAdd.plus(LAYER_UPGS.m[13].currently())
+ if (player.m.upgrades.includes(33)) toAdd = toAdd.plus(LAYER_UPGS.m[33].currently())
return toAdd
}
@@ -2524,6 +2633,7 @@ function getHyperBoosterPow() {
function getBalancePowerEff() {
let eff = player.ba.power.plus(1).sqrt()
if (player.ba.upgrades.includes(14)) eff = eff.pow(5)
+ if (player.ba.upgrades.includes(33)) eff = eff.pow(2)
return eff;
}
@@ -2531,6 +2641,7 @@ function getBalanceTypesEff() {
let mod = player.ba.positivity.plus(1).log10().plus(1).div(player.ba.negativity.plus(1).log10().plus(1)).log10().abs().plus(1).pow(-1)
let pos = player.ba.positivity.plus(1).log10().plus(1)
let neg = player.ba.negativity.plus(1).log10().plus(1)
+ if (player.ba.upgrades.includes(34)) mod = mod.times(1.5)
let eff = pos.times(neg).pow(mod)
return eff;
}
@@ -2554,9 +2665,9 @@ function getNegGainMult() {
}
const SPELL_NAMES = {
- 1: "Spell 1",
- 2: "Spell 2",
- 3: "Spell 3",
+ 1: "Booster Launch",
+ 2: "Time Warp",
+ 3: "Quirk Amplification",
}
const SPELL_DESCS = {
@@ -2594,6 +2705,7 @@ function getSpellDesc(x) {
function getSpellTime() {
let time = 20
+ if (player.m.best.gte(2.5e9)) time *= 10
return time
}
@@ -2677,6 +2789,7 @@ function gameLoop(diff) {
player.h.points = player.h.points.plus(tmp.resetGain.h.times(diff)).max(0)
player.q.points = player.q.points.plus(tmp.resetGain.q.times(diff)).max(0)
}
+ if (player.m.best.gte(2.5e9)) player.m.hexes = player.m.hexes.plus(getHexGain().times(diff)).max(0)
if (player.b.auto&&player.t.best.gte(5)) doReset("b")
if (player.g.auto&&player.s.best.gte(5)) doReset("g")
@@ -2690,6 +2803,7 @@ function gameLoop(diff) {
if (player.q.auto&&player.ba.best.gte(3)) maxQuirkLayers()
if (player.hb.auto&&player.m.best.gte(4)) doReset("hb")
if (player.ss.auto&&player.m.best.gte(4)) doReset("ss")
+ if (player.m.auto&&player.m.best.gte(1000)) for (let i=1;i<=3;i++) activateSpell(i)
if (player.hasNaN&&!NaNalert) {
alert("We have detected a corruption in your save. Please visit https://discord.gg/wwQfgPa for help.")
@@ -2749,6 +2863,15 @@ document.onkeydown = function(e) {
case "S":
if (player.ss.unl) doReset("ss")
break;
+ case "1":
+ if (player.ba.unl) activateSpell(1)
+ break;
+ case "2":
+ if (player.ba.unl) activateSpell(2)
+ break;
+ case "3":
+ if (player.ba.unl) activateSpell(3)
+ break;
}
} else if (player[key].unl) doReset(key)
}
\ No newline at end of file
diff --git a/js/temp.js b/js/temp.js
index f6a2071..19247b3 100644
--- a/js/temp.js
+++ b/js/temp.js
@@ -47,6 +47,7 @@ function updateTemp() {
tmp.sbUnl = getSpaceBuildingsUnl()
tmp.quirkEff = getQuirkEnergyEff()
+ tmp.qCB = getQuirkLayerCostBase()
tmp.ssEff1 = getSubspaceEff1()
tmp.ssEff2 = getSubspaceEff2()
diff --git a/style.css b/style.css
index c944986..5cd7a3d 100644
--- a/style.css
+++ b/style.css
@@ -334,8 +334,11 @@ a {
color: #41f5f5;
text-decoration-line: none;
cursor: pointer;
+ width: 100%;
+ min-width: 100%;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #02f2f2;
+ text-decoration: none;
}
.link:hover {