fix: correct quest combat power requirements for SM, VD, and AV (#90)
CI / Lint, Build & Test (push) Successful in 1m10s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m11s

## Summary

Fixes #85. Quest combat power requirements for Shadow Marshes, Volcanic Depths, and Astral Void were all drastically too low, breaking the zone progression curve.

### Root Cause

All three zones appear to have had their `combatPowerRequired` values entered at the wrong magnitude. Shadow Marshes was using K values where M was intended; Volcanic Depths and Astral Void were similarly off, resulting in later zones being trivially easier than earlier ones.

### Changes

| Zone | Before | After |
|---|---|---|
| Shadow Marshes | 5K / 20K / 80K / 300K | 5M / 20M / 80M / 300M |
| Volcanic Depths | 2M / 8M / 30M / 120M | 1.2B / 4.8B / 18B / 72B |
| Astral Void | 50M / 200M / 800M / 3B | 300B / 1.2T / 4.8T / 18T |

### Progression

All values now maintain a consistent ~×4 multiplier within each zone and ~×4 jump between zones, matching the established pattern from Verdant Vale through Frozen Peaks.

 This PR was created with help from Hikari~ 🌸

Reviewed-on: #90
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #90.
This commit is contained in:
2026-03-20 09:19:16 -07:00
committed by Naomi Carrigan
parent 621f594018
commit 2236d1dc9f
+13 -12
View File
@@ -141,7 +141,7 @@ export const defaultQuests: Array<Quest> = [
}, },
// ── Shadow Marshes ──────────────────────────────────────────────────────── // ── Shadow Marshes ────────────────────────────────────────────────────────
{ {
combatPowerRequired: 5000, combatPowerRequired: 5_000_000,
description: description:
"A cursed lake shrouded in permanent twilight. Strange energies pulse beneath its surface.", "A cursed lake shrouded in permanent twilight. Strange energies pulse beneath its surface.",
durationSeconds: 45 * 60, durationSeconds: 45 * 60,
@@ -156,7 +156,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "shadow_marshes", zoneId: "shadow_marshes",
}, },
{ {
combatPowerRequired: 20_000, combatPowerRequired: 20_000_000,
description: description:
"Deep in the marshes, a coven of swamp witches performs rites that twist the very land. Their power must be broken.", "Deep in the marshes, a coven of swamp witches performs rites that twist the very land. Their power must be broken.",
durationSeconds: 90 * 60, durationSeconds: 90 * 60,
@@ -171,7 +171,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "shadow_marshes", zoneId: "shadow_marshes",
}, },
{ {
combatPowerRequired: 80_000, combatPowerRequired: 80_000_000,
description: description:
"An ancient temple half-submerged in black water, its altars still humming with the power of a god long since departed.", "An ancient temple half-submerged in black water, its altars still humming with the power of a god long since departed.",
durationSeconds: 2 * 60 * 60, durationSeconds: 2 * 60 * 60,
@@ -180,6 +180,7 @@ export const defaultQuests: Array<Quest> = [
prerequisiteIds: [ "witch_coven" ], prerequisiteIds: [ "witch_coven" ],
rewards: [ rewards: [
{ amount: 2_000_000, type: "gold" }, { amount: 2_000_000, type: "gold" },
{ amount: 1500, type: "essence" },
{ amount: 75, type: "crystals" }, { amount: 75, type: "crystals" },
{ targetId: "knight_1", type: "upgrade" }, { targetId: "knight_1", type: "upgrade" },
], ],
@@ -187,7 +188,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "shadow_marshes", zoneId: "shadow_marshes",
}, },
{ {
combatPowerRequired: 300_000, combatPowerRequired: 300_000_000,
description: description:
"A city that died overnight, its streets still thick with something no healer can identify. Treasures lie unclaimed among the bones.", "A city that died overnight, its streets still thick with something no healer can identify. Treasures lie unclaimed among the bones.",
durationSeconds: 3 * 60 * 60, durationSeconds: 3 * 60 * 60,
@@ -253,7 +254,7 @@ export const defaultQuests: Array<Quest> = [
}, },
// ── Volcanic Depths ─────────────────────────────────────────────────────── // ── Volcanic Depths ───────────────────────────────────────────────────────
{ {
combatPowerRequired: 2_000_000, combatPowerRequired: 1_200_000_000,
description: description:
"A river of molten rock that flows without end through the volcanic tunnels. Something valuable gleams in the depths.", "A river of molten rock that flows without end through the volcanic tunnels. Something valuable gleams in the depths.",
durationSeconds: 3 * 60 * 60, durationSeconds: 3 * 60 * 60,
@@ -268,7 +269,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "volcanic_depths", zoneId: "volcanic_depths",
}, },
{ {
combatPowerRequired: 8_000_000, combatPowerRequired: 4_800_000_000,
description: description:
"A vast shrine where fire elementals perform rituals that shake the mountains. Whatever they worship, it has answered.", "A vast shrine where fire elementals perform rituals that shake the mountains. Whatever they worship, it has answered.",
durationSeconds: 5 * 60 * 60, durationSeconds: 5 * 60 * 60,
@@ -284,7 +285,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "volcanic_depths", zoneId: "volcanic_depths",
}, },
{ {
combatPowerRequired: 30_000_000, combatPowerRequired: 18_000_000_000,
description: description:
"Kilometres of tunnels filled with rivers of fire and creatures born from the earth's core. The heat alone should kill you. Somehow, it won't.", "Kilometres of tunnels filled with rivers of fire and creatures born from the earth's core. The heat alone should kill you. Somehow, it won't.",
durationSeconds: 7 * 60 * 60, durationSeconds: 7 * 60 * 60,
@@ -300,7 +301,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "volcanic_depths", zoneId: "volcanic_depths",
}, },
{ {
combatPowerRequired: 120_000_000, combatPowerRequired: 72_000_000_000,
description: description:
"The oldest forge in existence, where the fire elementals crafted weapons for gods. Its secrets could revolutionise your guild's arsenal.", "The oldest forge in existence, where the fire elementals crafted weapons for gods. Its secrets could revolutionise your guild's arsenal.",
durationSeconds: 10 * 60 * 60, durationSeconds: 10 * 60 * 60,
@@ -317,7 +318,7 @@ export const defaultQuests: Array<Quest> = [
}, },
// ── Astral Void ─────────────────────────────────────────────────────────── // ── Astral Void ───────────────────────────────────────────────────────────
{ {
combatPowerRequired: 50_000_000, combatPowerRequired: 300_000_000_000,
description: description:
"A tear in reality itself. What lies beyond defies description — but the power within is unlike anything of this world.", "A tear in reality itself. What lies beyond defies description — but the power within is unlike anything of this world.",
durationSeconds: 4 * 60 * 60, durationSeconds: 4 * 60 * 60,
@@ -332,7 +333,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "astral_void", zoneId: "astral_void",
}, },
{ {
combatPowerRequired: 200_000_000, combatPowerRequired: 1_200_000_000_000,
description: description:
"A field of dead stars, each one larger than a planet, each one cold and silent where once they burned with the light of creation.", "A field of dead stars, each one larger than a planet, each one cold and silent where once they burned with the light of creation.",
durationSeconds: 8 * 60 * 60, durationSeconds: 8 * 60 * 60,
@@ -348,7 +349,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "astral_void", zoneId: "astral_void",
}, },
{ {
combatPowerRequired: 800_000_000, combatPowerRequired: 4_800_000_000_000,
description: description:
"The space between realities, where the rules that govern your world do not apply. Time is meaningless here. Power is everything.", "The space between realities, where the rules that govern your world do not apply. Time is meaningless here. Power is everything.",
durationSeconds: 12 * 60 * 60, durationSeconds: 12 * 60 * 60,
@@ -364,7 +365,7 @@ export const defaultQuests: Array<Quest> = [
zoneId: "astral_void", zoneId: "astral_void",
}, },
{ {
combatPowerRequired: 3_000_000_000, combatPowerRequired: 18_000_000_000_000,
description: description:
"There is nothing beyond this point. Only the greatest guild in the history of all existence could reach here — and you have.", "There is nothing beyond this point. Only the greatest guild in the history of all existence could reach here — and you have.",
durationSeconds: 24 * 60 * 60, durationSeconds: 24 * 60 * 60,