Files
elysium/apps/api/src/data/zones.ts
T
hikari e780dc5f6c feat: sequential zone unlocking with dual boss+quest gate conditions
Zones now unlock in strict linear order. Each zone requires both the
final boss AND the final quest of the previous zone to be completed:

Verdant Vale → Shattered Ruins (forest_giant + ancient_ruins)
Shattered Ruins → Frozen Peaks (elder_dragon + dragon_lair)
Frozen Peaks → Shadow Marshes (void_titan + storm_citadel)
Shadow Marshes → Volcanic Depths (mud_kraken + plague_ruins)
Volcanic Depths → Astral Void (phoenix_lord + the_forge)

- Zone type gains `unlockQuestId` field alongside `unlockBossId`
- boss.ts checks both conditions before unlocking zone on boss defeat
- tick.ts checks both conditions and unlocks zones + first boss on
  quest completion if the boss condition is already met
- GameContext optimistic update also respects dual-condition logic
- BossPanel zone-gate hints now show both "⚔️ Defeat: X & 📜 Complete: Y"
- game.ts backfill syncs unlockQuestId and re-verifies zone status
  using both conditions, reverting incorrectly-unlocked saves
2026-03-06 16:04:52 -08:00

65 lines
2.3 KiB
TypeScript

import type { Zone } from "@elysium/types";
export const DEFAULT_ZONES: Zone[] = [
{
id: "verdant_vale",
name: "The Verdant Vale",
description:
"Rolling green hills and ancient forests stretch to the horizon. This is where your guild takes its first steps — trade roads in need of clearing, goblin camps to rout, and an undead queen stirring in the north.",
emoji: "🌿",
status: "unlocked",
unlockBossId: null,
unlockQuestId: null,
},
{
id: "shattered_ruins",
name: "The Shattered Ruins",
description:
"The remnants of a civilisation long lost to war and dragonfire. Crumbling towers and cursed lakes hide treasures — and an elder dragon who claims these lands as his own.",
emoji: "🏛️",
status: "locked",
unlockBossId: "forest_giant",
unlockQuestId: "ancient_ruins",
},
{
id: "frozen_peaks",
name: "The Frozen Peaks",
description:
"At the edge of the world, where the sun barely rises and the cold is a living thing, a tear in reality has drawn something ancient and terrible. Only the mightiest guilds dare tread here.",
emoji: "❄️",
status: "locked",
unlockBossId: "elder_dragon",
unlockQuestId: "dragon_lair",
},
{
id: "shadow_marshes",
name: "The Shadow Marshes",
description:
"A vast, fog-choked wetland where the sun never fully rises. Dark magic seeps from the earth itself, and things far older than the kingdom lurk beneath the murky waters.",
emoji: "🌑",
status: "locked",
unlockBossId: "void_titan",
unlockQuestId: "storm_citadel",
},
{
id: "volcanic_depths",
name: "The Volcanic Depths",
description:
"A chain of active volcanoes whose caverns plunge deep into the earth's molten heart. Legendary forges burn here, tended by fire elementals who serve no master — yet.",
emoji: "🌋",
status: "locked",
unlockBossId: "mud_kraken",
unlockQuestId: "plague_ruins",
},
{
id: "astral_void",
name: "The Astral Void",
description:
"Beyond the veil of the mortal world lies a realm of pure possibility and absolute terror. Stars are born and die here in moments, and the beings that call this place home have never known mortality.",
emoji: "🌌",
status: "locked",
unlockBossId: "phoenix_lord",
unlockQuestId: "the_forge",
},
];