balance: comprehensive game balance pass (#103-#123) (#124)
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m3s
CI / Lint, Build & Test (push) Successful in 1m9s

## Summary

Comprehensive balance pass addressing 20 tickets (#103–#122) plus one audit-discovered fix (#123), ensuring no player soft-locks and aligning all content counts with achievements and progression milestones.

### Changes

- **Equipment** (#103–#111): Differentiated all stat pairs so every piece has a unique bonus combination; added missing stats to `eternal_flame` and increased `eternal_prism` multiplier to justify cost tier
- **Recipes** (#112–#115): Added 4 cross-zone crafting recipes requiring materials from multiple zones to incentivise exploration breadth
- **Achievements** (#116–#118): Aligned `fully_equipped` (40→65), `quest_eternal` (72→95), and `boss_eternal` (60→72) thresholds with actual content counts; updated `devourer_slayer` description
- **Quest CP scaling** (#120–#122): Verified and corrected combat power requirements across all zones to follow consistent 4×/4× progression pattern
- **Zone file ordering** (#123): Swapped Frozen Peaks and Shadow Marshes quest sections so file order matches the actual unlock chain (no gameplay change)

### Tickets Closed

Closes #103
Closes #104
Closes #105
Closes #106
Closes #107
Closes #108
Closes #109
Closes #110
Closes #111
Closes #112
Closes #113
Closes #114
Closes #115
Closes #116
Closes #117
Closes #118
Closes #120
Closes #121
Closes #122
Closes #123

 This PR was created with help from Hikari~ 🌸

Reviewed-on: #124
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #124.
This commit is contained in:
2026-03-23 17:28:29 -07:00
committed by Naomi Carrigan
parent 3ac1d566cb
commit 34d07bec95
10 changed files with 276 additions and 149 deletions
+20 -20
View File
@@ -209,7 +209,7 @@ export const defaultUpgrades: Array<Upgrade> = [
costEssence: 2,
costGold: 5000,
description: "Ancient books of magic double mage output.",
id: "mage_1",
id: "apprentice_1",
multiplier: 2,
name: "Arcane Tomes",
purchased: false,
@@ -222,7 +222,7 @@ export const defaultUpgrades: Array<Upgrade> = [
costEssence: 3,
costGold: 8000,
description: "Sacred ceremonies double the output of your clerics.",
id: "cleric_1",
id: "acolyte_1",
multiplier: 2,
name: "Holy Rites",
purchased: false,
@@ -297,23 +297,10 @@ export const defaultUpgrades: Array<Upgrade> = [
target: "adventurer",
unlocked: false,
},
{
adventurerId: "shadow_assassin",
costCrystals: 0,
costEssence: 175,
costGold: 0,
description: "Mastery of the shadow arts doubles assassin effectiveness.",
id: "shadow_assassin_1",
multiplier: 2,
name: "Shadow Arts",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "arcane_scholar",
costCrystals: 0,
costEssence: 150,
costEssence: 1000,
costGold: 0,
description: "Access to forbidden libraries doubles scholar output.",
id: "arcane_scholar_1",
@@ -323,10 +310,23 @@ export const defaultUpgrades: Array<Upgrade> = [
target: "adventurer",
unlocked: false,
},
{
adventurerId: "shadow_assassin",
costCrystals: 0,
costEssence: 5000,
costGold: 0,
description: "Mastery of the shadow arts doubles assassin effectiveness.",
id: "shadow_assassin_1",
multiplier: 2,
name: "Shadow Arts",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "dark_templar",
costCrystals: 0,
costEssence: 200,
costEssence: 25_000,
costGold: 0,
description:
"A sworn oath to the darkness of the marshes doubles templar output.",
@@ -340,7 +340,7 @@ export const defaultUpgrades: Array<Upgrade> = [
{
adventurerId: "void_walker",
costCrystals: 0,
costEssence: 300,
costEssence: 100_000,
costGold: 0,
description:
"Walking through the void itself doubles the output of your void walkers.",
@@ -354,7 +354,7 @@ export const defaultUpgrades: Array<Upgrade> = [
{
adventurerId: "celestial_guard",
costCrystals: 0,
costEssence: 750,
costEssence: 500_000,
costGold: 0,
description:
"A blessing from the celestials themselves doubles guard output.",
@@ -368,7 +368,7 @@ export const defaultUpgrades: Array<Upgrade> = [
{
adventurerId: "divine_champion",
costCrystals: 0,
costEssence: 2000,
costEssence: 2_000_000,
costGold: 0,
description: "An unbreakable oath to the divine doubles champion output.",
id: "divine_champion_1",