From c5d1f53eef3b62ef270843db0a95d91f798f35ad Mon Sep 17 00:00:00 2001 From: Hikari Date: Mon, 13 Apr 2026 12:50:25 -0700 Subject: [PATCH] =?UTF-8?q?feat:=20goddess=20expansion=20chunk=202=20?= =?UTF-8?q?=E2=80=94=20full=20content=20data=20at=20base=20game=20scale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 18 zones, 72 bosses, 90 quests across the goddess realm - 32 disciple tiers, 53 equipment pieces, 9 equipment sets - 57 goddess upgrades, 25 consecration upgrades, 15 enlightenment upgrades - 54 sacred materials, 36 crafting recipes, 72 exploration areas - 40 goddess achievements - Added GoddessEquipmentSet type + computeGoddessSetBonuses to @elysium/types - All data files excluded from coverage pending Chunk 4 route imports --- apps/api/src/data/goddessAchievements.ts | 378 ++++ apps/api/src/data/goddessBosses.ts | 1398 ++++++++++++++ .../src/data/goddessConsecrationUpgrades.ts | 216 +++ apps/api/src/data/goddessCrafting.ts | 546 ++++++ apps/api/src/data/goddessDisciples.ts | 396 ++++ .../src/data/goddessEnlightenmentUpgrades.ts | 136 ++ apps/api/src/data/goddessEquipment.ts | 563 ++++++ apps/api/src/data/goddessEquipmentSets.ts | 119 ++ apps/api/src/data/goddessExplorations.ts | 1717 +++++++++++++++++ apps/api/src/data/goddessMaterials.ts | 408 ++++ apps/api/src/data/goddessQuests.ts | 953 +++++++++ apps/api/src/data/goddessUpgrades.ts | 729 +++++++ apps/api/src/data/goddessZones.ts | 191 ++ apps/api/vitest.config.ts | 14 + goddess-todo.md | 29 +- packages/types/src/index.ts | 5 + .../src/interfaces/goddessEquipmentSet.ts | 69 + 17 files changed, 7855 insertions(+), 12 deletions(-) create mode 100644 apps/api/src/data/goddessAchievements.ts create mode 100644 apps/api/src/data/goddessBosses.ts create mode 100644 apps/api/src/data/goddessConsecrationUpgrades.ts create mode 100644 apps/api/src/data/goddessCrafting.ts create mode 100644 apps/api/src/data/goddessDisciples.ts create mode 100644 apps/api/src/data/goddessEnlightenmentUpgrades.ts create mode 100644 apps/api/src/data/goddessEquipment.ts create mode 100644 apps/api/src/data/goddessEquipmentSets.ts create mode 100644 apps/api/src/data/goddessExplorations.ts create mode 100644 apps/api/src/data/goddessMaterials.ts create mode 100644 apps/api/src/data/goddessQuests.ts create mode 100644 apps/api/src/data/goddessUpgrades.ts create mode 100644 apps/api/src/data/goddessZones.ts create mode 100644 packages/types/src/interfaces/goddessEquipmentSet.ts diff --git a/apps/api/src/data/goddessAchievements.ts b/apps/api/src/data/goddessAchievements.ts new file mode 100644 index 0000000..c4f1e97 --- /dev/null +++ b/apps/api/src/data/goddessAchievements.ts @@ -0,0 +1,378 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable stylistic/max-len -- Data content */ +/* eslint-disable max-lines -- Data file */ +import type { GoddessAchievement } from "@elysium/types"; + +export const defaultGoddessAchievements: Array = [ + // TotalPrayersEarned milestones + { + condition: { amount: 1000, type: "totalPrayersEarned" }, + description: "Offer your first thousand prayers and feel the divine stir for the first time.", + icon: "๐Ÿ•ฏ๏ธ", + id: "prayers_thousand", + name: "Whisper of the Faithful", + reward: { divinity: 5 }, + unlockedAt: null, + }, + { + condition: { amount: 10_000, type: "totalPrayersEarned" }, + description: "Ten thousand prayers rise like incense smoke toward the heavens.", + icon: "๐Ÿ™", + id: "prayers_ten_thousand", + name: "Voice of Devotion", + reward: { divinity: 25 }, + unlockedAt: null, + }, + { + condition: { amount: 100_000, type: "totalPrayersEarned" }, + description: "A hundred thousand supplications echoing across the sacred halls.", + icon: "โ›ช", + id: "prayers_hundred_thousand", + name: "Chorus of the Devoted", + reward: { divinity: 100 }, + unlockedAt: null, + }, + { + condition: { amount: 1_000_000, type: "totalPrayersEarned" }, + description: "One million prayers โ€” the Goddess turns her gaze upon you at last.", + icon: "โœจ", + id: "prayers_million", + name: "Radiant Supplicant", + reward: { divinity: 300 }, + unlockedAt: null, + }, + { + condition: { amount: 10_000_000, type: "totalPrayersEarned" }, + description: "Ten million prayers offered; the sacred flame burns without end.", + icon: "๐Ÿ”ฅ", + id: "prayers_ten_million", + name: "Eternal Flame of Worship", + reward: { divinity: 750 }, + unlockedAt: null, + }, + { + condition: { amount: 100_000_000, type: "totalPrayersEarned" }, + description: "A hundred million prayers โ€” your faith moves the pillars of the cosmos.", + icon: "๐Ÿ’ซ", + id: "prayers_hundred_million", + name: "Pillar of the Cosmos", + reward: { divinity: 1500 }, + unlockedAt: null, + }, + { + condition: { amount: 1_000_000_000, type: "totalPrayersEarned" }, + description: "A billion prayers ascend, weaving a tapestry of light across the void.", + icon: "๐ŸŒŒ", + id: "prayers_billion", + name: "Weaver of Sacred Light", + reward: { divinity: 2500 }, + unlockedAt: null, + }, + { + condition: { amount: 10_000_000_000, type: "totalPrayersEarned" }, + description: "Ten billion prayers; the stars themselves bow in reverence.", + icon: "โญ", + id: "prayers_ten_billion", + name: "Constellation of Faith", + reward: { divinity: 3500 }, + unlockedAt: null, + }, + { + condition: { amount: 100_000_000_000, type: "totalPrayersEarned" }, + description: "A hundred billion prayers โ€” the divine throne trembles with your devotion.", + icon: "๐ŸŒ ", + id: "prayers_hundred_billion", + name: "Trembler of the Divine Throne", + reward: { divinity: 4250 }, + unlockedAt: null, + }, + { + condition: { amount: 1_000_000_000_000, type: "totalPrayersEarned" }, + description: "A trillion prayers offered โ€” you have become the Goddess's own heartbeat.", + icon: "๐Ÿ‘๏ธ", + id: "prayers_trillion", + name: "Heartbeat of the Goddess", + reward: { divinity: 5000 }, + unlockedAt: null, + }, + // GoddessBossesDefeated milestones + { + condition: { amount: 1, type: "goddessBossesDefeated" }, + description: "Strike down your first divine adversary and claim your place among the faithful.", + icon: "โš”๏ธ", + id: "goddess_boss_first", + name: "Champion's First Blood", + reward: { divinity: 10 }, + unlockedAt: null, + }, + { + condition: { amount: 5, type: "goddessBossesDefeated" }, + description: "Five sacred titans fall before your righteous fury.", + icon: "๐Ÿ—ก๏ธ", + id: "goddess_boss_five", + name: "Slayer of Sacred Titans", + reward: { divinity: 75 }, + unlockedAt: null, + }, + { + condition: { amount: 15, type: "goddessBossesDefeated" }, + description: "Fifteen divine guardians vanquished โ€” the celestial war begins in earnest.", + icon: "๐Ÿ›ก๏ธ", + id: "goddess_boss_fifteen", + name: "Celestial Warlord", + reward: { divinity: 300 }, + unlockedAt: null, + }, + { + condition: { amount: 30, type: "goddessBossesDefeated" }, + description: "Thirty heavenly champions broken at your feet.", + icon: "๐Ÿ’ฅ", + id: "goddess_boss_thirty", + name: "Breaker of the Heavenly Host", + reward: { divinity: 800 }, + unlockedAt: null, + }, + { + condition: { amount: 45, type: "goddessBossesDefeated" }, + description: "Forty-five divine guardians have crumbled; the heavens ring with your name.", + icon: "๐ŸŒŸ", + id: "goddess_boss_forty_five", + name: "Name Written in Heaven", + reward: { divinity: 2000 }, + unlockedAt: null, + }, + { + condition: { amount: 55, type: "goddessBossesDefeated" }, + description: "Fifty-five sacred sentinels silenced; even the Goddess watches with awe.", + icon: "๐Ÿ‘‘", + id: "goddess_boss_fifty_five", + name: "Awe of the Goddess", + reward: { divinity: 4000 }, + unlockedAt: null, + }, + { + condition: { amount: 65, type: "goddessBossesDefeated" }, + description: "Sixty-five divine colossi toppled; the celestial order bends to your will.", + icon: "๐ŸŒ™", + id: "goddess_boss_sixty_five", + name: "Bender of the Celestial Order", + reward: { divinity: 7000 }, + unlockedAt: null, + }, + { + condition: { amount: 72, type: "goddessBossesDefeated" }, + description: "All seventy-two divine guardians have fallen. The heavens stand open before you.", + icon: "๐Ÿ†", + id: "goddess_boss_all", + name: "Conqueror of the Heavens", + reward: { divinity: 10_000 }, + unlockedAt: null, + }, + // GoddessQuestsCompleted milestones + { + condition: { amount: 1, type: "goddessQuestsCompleted" }, + description: "Complete your first sacred trial and prove yourself worthy of divine attention.", + icon: "๐Ÿ“œ", + id: "goddess_quest_first", + name: "First Sacred Trial", + reward: { divinity: 5 }, + unlockedAt: null, + }, + { + condition: { amount: 5, type: "goddessQuestsCompleted" }, + description: "Five holy tasks fulfilled โ€” the Goddess acknowledges your diligence.", + icon: "๐ŸŒฟ", + id: "goddess_quest_five", + name: "Acknowledged by the Divine", + reward: { divinity: 40 }, + unlockedAt: null, + }, + { + condition: { amount: 15, type: "goddessQuestsCompleted" }, + description: "Fifteen sacred errands completed in the name of the eternal light.", + icon: "โ˜€๏ธ", + id: "goddess_quest_fifteen", + name: "Errand of Eternal Light", + reward: { divinity: 175 }, + unlockedAt: null, + }, + { + condition: { amount: 30, type: "goddessQuestsCompleted" }, + description: "Thirty divine mandates carried out; your legend grows in the celestial annals.", + icon: "๐Ÿ“–", + id: "goddess_quest_thirty", + name: "Inscribed in the Celestial Annals", + reward: { divinity: 500 }, + unlockedAt: null, + }, + { + condition: { amount: 50, type: "goddessQuestsCompleted" }, + description: "Fifty holy quests fulfilled โ€” the sacred codex opens its deepest chapters to you.", + icon: "๐Ÿ”ฎ", + id: "goddess_quest_fifty", + name: "Reader of the Sacred Codex", + reward: { divinity: 1200 }, + unlockedAt: null, + }, + { + condition: { amount: 65, type: "goddessQuestsCompleted" }, + description: "Sixty-five divine missions accomplished; the heavenly choir sings your praises.", + icon: "๐ŸŽถ", + id: "goddess_quest_sixty_five", + name: "Sung by the Heavenly Choir", + reward: { divinity: 2500 }, + unlockedAt: null, + }, + { + condition: { amount: 80, type: "goddessQuestsCompleted" }, + description: "Eighty sacred tasks complete โ€” you walk the path of the exalted chosen.", + icon: "๐Ÿ•Š๏ธ", + id: "goddess_quest_eighty", + name: "Path of the Exalted Chosen", + reward: { divinity: 3750 }, + unlockedAt: null, + }, + { + condition: { amount: 90, type: "goddessQuestsCompleted" }, + description: "Ninety divine quests fulfilled โ€” every last sacred duty discharged with glory.", + icon: "๐ŸŒˆ", + id: "goddess_quest_all", + name: "Glory of Full Devotion", + reward: { divinity: 5000 }, + unlockedAt: null, + }, + // DiscipleTotal milestones + { + condition: { amount: 10, type: "discipleTotal" }, + description: "Gather ten disciples beneath the Goddess's light and begin your congregation.", + icon: "๐Ÿ‘ฅ", + id: "disciples_ten", + name: "Seeds of a Congregation", + reward: { divinity: 10 }, + unlockedAt: null, + }, + { + condition: { amount: 25, type: "discipleTotal" }, + description: "Twenty-five faithful souls gathered โ€” the divine community takes shape.", + icon: "๐Ÿ›๏ธ", + id: "disciples_twenty_five", + name: "The Divine Community", + reward: { divinity: 50 }, + unlockedAt: null, + }, + { + condition: { amount: 50, type: "discipleTotal" }, + description: "Fifty disciples united in worship โ€” a true flock of the faithful.", + icon: "๐Ÿ•Œ", + id: "disciples_fifty", + name: "Flock of the Faithful", + reward: { divinity: 150 }, + unlockedAt: null, + }, + { + condition: { amount: 100, type: "discipleTotal" }, + description: "One hundred devoted souls kneel at the Goddess's altar by your invitation.", + icon: "๐Ÿ’Ž", + id: "disciples_hundred", + name: "Hundred Kneeling Souls", + reward: { divinity: 450 }, + unlockedAt: null, + }, + { + condition: { amount: 250, type: "discipleTotal" }, + description: "Two hundred and fifty disciples โ€” a living temple of mortal devotion.", + icon: "๐Ÿ—ผ", + id: "disciples_two_fifty", + name: "Living Temple of Devotion", + reward: { divinity: 1200 }, + unlockedAt: null, + }, + { + condition: { amount: 500, type: "discipleTotal" }, + description: "Five hundred disciples gathered; the mortal world trembles with collective faith.", + icon: "๐ŸŒ", + id: "disciples_five_hundred", + name: "Trembling World of Faith", + reward: { divinity: 3000 }, + unlockedAt: null, + }, + { + condition: { amount: 1000, type: "discipleTotal" }, + description: "A thousand disciples stand as testament to your divine calling.", + icon: "โšก", + id: "disciples_thousand", + name: "Testament of the Divine Calling", + reward: { divinity: 6000 }, + unlockedAt: null, + }, + { + condition: { amount: 2500, type: "discipleTotal" }, + description: "Two thousand five hundred disciples โ€” an empire of faith sculpted by your hands.", + icon: "๐Ÿฐ", + id: "disciples_two_five_hundred", + name: "Empire of Faith", + reward: { divinity: 10_000 }, + unlockedAt: null, + }, + // ConsecrationCount milestones + { + condition: { amount: 1, type: "consecrationCount" }, + description: "Undergo the sacred rite of Consecration for the first time and be reborn in divine fire.", + icon: "๐Ÿ”ฑ", + id: "consecration_first", + name: "First Rite of Rebirth", + reward: { stardust: 1 }, + unlockedAt: null, + }, + { + condition: { amount: 3, type: "consecrationCount" }, + description: "Three consecrations endured โ€” the cycle of death and rebirth refines your soul.", + icon: "โ™พ๏ธ", + id: "consecration_three", + name: "Cycle of the Refined Soul", + reward: { stardust: 2 }, + unlockedAt: null, + }, + { + condition: { amount: 6, type: "consecrationCount" }, + description: "Six times reborn through sacred flame โ€” the Goddess has remade you utterly.", + icon: "๐ŸŒบ", + id: "consecration_six", + name: "Utterly Remade", + reward: { stardust: 3 }, + unlockedAt: null, + }, + { + condition: { amount: 10, type: "consecrationCount" }, + description: "Ten consecrations completed โ€” you have transcended the mortal concept of self.", + icon: "๐ŸŒธ", + id: "consecration_ten", + name: "Transcendence of Self", + reward: { stardust: 5 }, + unlockedAt: null, + }, + // GoddessEquipmentOwned milestones + { + condition: { amount: 10, type: "goddessEquipmentOwned" }, + description: "Gather ten pieces of divine armament and begin to walk as an instrument of the Goddess.", + icon: "๐Ÿ›ก๏ธ", + id: "goddess_equipment_ten", + name: "Instrument of the Goddess", + reward: { divinity: 500 }, + unlockedAt: null, + }, + { + condition: { amount: 53, type: "goddessEquipmentOwned" }, + description: "Every piece of sacred armament claimed โ€” the full divine arsenal is yours to wield.", + icon: "โšœ๏ธ", + id: "goddess_equipment_all", + name: "Bearer of the Full Divine Arsenal", + reward: { stardust: 3 }, + unlockedAt: null, + }, +]; diff --git a/apps/api/src/data/goddessBosses.ts b/apps/api/src/data/goddessBosses.ts new file mode 100644 index 0000000..df7e44f --- /dev/null +++ b/apps/api/src/data/goddessBosses.ts @@ -0,0 +1,1398 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessBoss } from "@elysium/types"; + +export const defaultGoddessBosses: Array = [ + // โ”€โ”€ Celestial Garden โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 1, + bountyDivinityClaimed: false, + consecrationRequirement: 0, + currentHp: 50, + damagePerSecond: 2, + description: + "A mischievous fragment of divine energy that drifted too far from the garden's heart. Small but surprisingly dangerous.", + divinityReward: 0, + equipmentRewards: [], + id: "celestial_sprite", + maxHp: 50, + name: "Celestial Sprite", + prayersReward: 10, + stardustReward: 0, + status: "available", + upgradeRewards: [ "prayer_offering_1" ], + zoneId: "goddess_celestial_garden", + }, + { + bountyDivinity: 2, + bountyDivinityClaimed: false, + consecrationRequirement: 0, + currentHp: 200, + damagePerSecond: 5, + description: + "A radiant construct assigned to patrol the garden's outermost paths. Its light blinds as surely as it guides.", + divinityReward: 0, + equipmentRewards: [ "prayer_robes" ], + id: "luminous_sentinel", + maxHp: 200, + name: "Luminous Sentinel", + prayersReward: 50, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "sacred_combat_1" ], + zoneId: "goddess_celestial_garden", + }, + { + bountyDivinity: 5, + bountyDivinityClaimed: false, + consecrationRequirement: 0, + currentHp: 1000, + damagePerSecond: 15, + description: + "A celestial judge tasked with measuring the worthiness of all who seek to pass. It has judged countless souls and found them wanting.", + divinityReward: 1, + equipmentRewards: [ "blessing_seal" ], + id: "divine_arbiter", + maxHp: 1000, + name: "Divine Arbiter", + prayersReward: 250, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "divine_inspiration_1" ], + zoneId: "goddess_celestial_garden", + }, + { + bountyDivinity: 10, + bountyDivinityClaimed: false, + consecrationRequirement: 0, + currentHp: 5000, + damagePerSecond: 40, + description: + "The guardian of the garden's inner gate. Ancient, immovable, and absolutely certain of its divine right to refuse you passage.", + divinityReward: 2, + equipmentRewards: [ "sacred_staff" ], + id: "heavenly_warden", + maxHp: 5000, + name: "Heavenly Warden", + prayersReward: 1000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "prayer_offering_2" ], + zoneId: "goddess_celestial_garden", + }, + // โ”€โ”€ Crystal Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 15, + bountyDivinityClaimed: false, + consecrationRequirement: 1, + currentHp: 25_000, + damagePerSecond: 100, + description: + "A divine scholar who has fused with the sanctum's crystalline walls through decades of meditation. They no longer distinguish between knowledge and weapon.", + divinityReward: 3, + equipmentRewards: [], + id: "crystal_acolyte", + maxHp: 25_000, + name: "Crystal Acolyte", + prayersReward: 5000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "novice_blessing" ], + zoneId: "goddess_crystal_sanctum", + }, + { + bountyDivinity: 25, + bountyDivinityClaimed: false, + consecrationRequirement: 1, + currentHp: 100_000, + damagePerSecond: 300, + description: + "An ancient protector bound to the sanctum by an oath older than memory. It does not remember who it is protecting this place for.", + divinityReward: 5, + equipmentRewards: [ "sanctum_regalia" ], + id: "sacred_guardian", + maxHp: 100_000, + name: "Sacred Guardian", + prayersReward: 20_000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "divine_inspiration_2", "sacred_combat_2" ], + zoneId: "goddess_crystal_sanctum", + }, + { + bountyDivinity: 50, + bountyDivinityClaimed: false, + consecrationRequirement: 1, + currentHp: 500_000, + damagePerSecond: 800, + description: + "A living divination engine built by forgotten architects to guard the sanctum's deepest prophecies. It sees every possible outcome โ€” except its own defeat.", + divinityReward: 8, + equipmentRewards: [ "oracle_lens", "oracle_sigil" ], + id: "oracle_construct", + maxHp: 500_000, + name: "Oracle Construct", + prayersReward: 100_000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "initiate_blessing" ], + zoneId: "goddess_crystal_sanctum", + }, + { + bountyDivinity: 100, + bountyDivinityClaimed: false, + consecrationRequirement: 1, + currentHp: 2_500_000, + damagePerSecond: 2000, + description: + "The high keeper of the Crystal Sanctum โ€” the last line of divine authority between the uninitiated and the sanctum's most sacred knowledge.", + divinityReward: 12, + equipmentRewards: [], + id: "sanctum_keeper", + maxHp: 2_500_000, + name: "Sanctum Keeper", + prayersReward: 500_000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "prayer_offering_3" ], + zoneId: "goddess_crystal_sanctum", + }, + // โ”€โ”€ Astral Cathedral โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 200, + bountyDivinityClaimed: false, + consecrationRequirement: 3, + currentHp: 15_000_000, + damagePerSecond: 5000, + description: + "A newly ascended seraph still learning the full measure of their power. What they lack in control they compensate for with overwhelming divine energy.", + divinityReward: 15, + equipmentRewards: [], + id: "seraph_apprentice", + maxHp: 15_000_000, + name: "Seraph Apprentice", + prayersReward: 2_500_000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "acolyte_blessing" ], + zoneId: "goddess_astral_cathedral", + }, + { + bountyDivinity: 400, + bountyDivinityClaimed: false, + consecrationRequirement: 3, + currentHp: 75_000_000, + damagePerSecond: 12_000, + description: + "A dozen voices singing in absolute unison โ€” each one a fully realised seraph whose harmonics alone can shatter lesser beings.", + divinityReward: 20, + equipmentRewards: [ "astral_mantle" ], + id: "radiant_choir", + maxHp: 75_000_000, + name: "Radiant Choir", + prayersReward: 10_000_000, + stardustReward: 0, + status: "locked", + upgradeRewards: [ "divine_inspiration_3", "sacred_combat_3" ], + zoneId: "goddess_astral_cathedral", + }, + { + bountyDivinity: 800, + bountyDivinityClaimed: false, + consecrationRequirement: 3, + currentHp: 400_000_000, + damagePerSecond: 30_000, + description: + "One of the seven great seraphs, each commanding a choir of hundreds. This one chose the cathedral as its domain and has not left in ten thousand years.", + divinityReward: 30, + equipmentRewards: [ "seraph_blade", "seraph_mark" ], + id: "arch_seraph", + maxHp: 400_000_000, + name: "Arch-Seraph", + prayersReward: 50_000_000, + stardustReward: 1, + status: "locked", + upgradeRewards: [ "devotee_blessing" ], + zoneId: "goddess_astral_cathedral", + }, + { + bountyDivinity: 1500, + bountyDivinityClaimed: false, + consecrationRequirement: 3, + currentHp: 2_000_000_000, + damagePerSecond: 80_000, + description: + "The absolute authority of the Astral Cathedral. Its word is the cathedral's law. It has not smiled in recorded history.", + divinityReward: 45, + equipmentRewards: [], + id: "cathedral_warden", + maxHp: 2_000_000_000, + name: "Cathedral Warden", + prayersReward: 250_000_000, + stardustReward: 2, + status: "locked", + upgradeRewards: [ "prayer_offering_4" ], + zoneId: "goddess_astral_cathedral", + }, + // โ”€โ”€ Empyrean Citadel โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 3000, + bountyDivinityClaimed: false, + consecrationRequirement: 6, + currentHp: 12_000_000_000, + damagePerSecond: 200_000, + description: + "A divine warrior clad in armour forged from compressed starlight. Its charge has levelled lesser fortresses than the one it guards.", + divinityReward: 60, + equipmentRewards: [], + id: "empyrean_knight", + maxHp: 12_000_000_000, + name: "Empyrean Knight", + prayersReward: 1_000_000_000, + stardustReward: 3, + status: "locked", + upgradeRewards: [ "adept_blessing" ], + zoneId: "goddess_empyrean_citadel", + }, + { + bountyDivinity: 6000, + bountyDivinityClaimed: false, + consecrationRequirement: 6, + currentHp: 60_000_000_000, + damagePerSecond: 500_000, + description: + "The general of the celestial host, whose tactical mind encompasses a thousand battles across a thousand planes. They have never lost.", + divinityReward: 80, + equipmentRewards: [ "empyrean_armour" ], + id: "celestial_commander", + maxHp: 60_000_000_000, + name: "Celestial Commander", + prayersReward: 5_000_000_000, + stardustReward: 5, + status: "locked", + upgradeRewards: [ "divine_inspiration_4", "consecration_power_1" ], + zoneId: "goddess_empyrean_citadel", + }, + { + bountyDivinity: 12_000, + bountyDivinityClaimed: false, + consecrationRequirement: 6, + currentHp: 350_000_000_000, + damagePerSecond: 1_200_000, + description: + "A champion elevated beyond the seraph tier through acts of impossible valour. There are only three in existence. This one volunteered to guard the citadel.", + divinityReward: 100, + equipmentRewards: [ "divine_sceptre", "divine_emblem" ], + id: "divine_warrior", + maxHp: 350_000_000_000, + name: "Divine Warrior", + prayersReward: 25_000_000_000, + stardustReward: 8, + status: "locked", + upgradeRewards: [ "priest_blessing" ], + zoneId: "goddess_empyrean_citadel", + }, + { + bountyDivinity: 25_000, + bountyDivinityClaimed: false, + consecrationRequirement: 6, + currentHp: 2_000_000_000_000, + damagePerSecond: 3_000_000, + description: + "The living will of the Empyrean Citadel made manifest. It is not a being โ€” it is the fortress itself, deciding to fight.", + divinityReward: 150, + equipmentRewards: [], + id: "citadel_guardian", + maxHp: 2_000_000_000_000, + name: "Citadel Guardian", + prayersReward: 150_000_000_000, + stardustReward: 12, + status: "locked", + upgradeRewards: [ "consecration_power_2" ], + zoneId: "goddess_empyrean_citadel", + }, + // โ”€โ”€ Primordial Springs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 50_000, + bountyDivinityClaimed: false, + consecrationRequirement: 10, + currentHp: 12_000_000_000_000, + damagePerSecond: 8_000_000, + description: + "A being born from the raw overflow of creation energy where the springs run deepest. It does not think โ€” it simply is, and its being is catastrophically powerful.", + divinityReward: 200, + equipmentRewards: [], + id: "creation_elemental", + maxHp: 12_000_000_000_000, + name: "Creation Elemental", + prayersReward: 800_000_000_000, + stardustReward: 20, + status: "locked", + upgradeRewards: [ "high_priest_blessing" ], + zoneId: "goddess_primordial_springs", + }, + { + bountyDivinity: 100_000, + bountyDivinityClaimed: false, + consecrationRequirement: 10, + currentHp: 75_000_000_000_000, + damagePerSecond: 20_000_000, + description: + "The original warden of the springs, appointed before the universe had a name. It has forgotten its purpose but not its duty.", + divinityReward: 300, + equipmentRewards: [ "eternal_vestments" ], + id: "source_guardian", + maxHp: 75_000_000_000_000, + name: "Source Guardian", + prayersReward: 5_000_000_000_000, + stardustReward: 35, + status: "locked", + upgradeRewards: [ "divine_inspiration_5", "divine_spark_1" ], + zoneId: "goddess_primordial_springs", + }, + { + bountyDivinity: 200_000, + bountyDivinityClaimed: false, + consecrationRequirement: 10, + currentHp: 500_000_000_000_000, + damagePerSecond: 60_000_000, + description: + "An intelligence that predates consciousness itself โ€” it existed before things had the concept of existing. Fighting it is philosophically confusing.", + divinityReward: 450, + equipmentRewards: [ "firmament_rod", "eternity_sigil" ], + id: "primordial_spirit", + maxHp: 500_000_000_000_000, + name: "Primordial Spirit", + prayersReward: 30_000_000_000_000, + stardustReward: 50, + status: "locked", + upgradeRewards: [ "divine_scholar_blessing" ], + zoneId: "goddess_primordial_springs", + }, + { + bountyDivinity: 400_000, + bountyDivinityClaimed: false, + consecrationRequirement: 10, + currentHp: 3_000_000_000_000_000, + damagePerSecond: 180_000_000, + description: + "The keeper of the deepest spring โ€” the point from which all creation flows. It has never allowed anything to pass deeper. Until now, nothing has made it want to try.", + divinityReward: 700, + equipmentRewards: [], + id: "wellspring_warden", + maxHp: 3_000_000_000_000_000, + name: "Wellspring Warden", + prayersReward: 200_000_000_000_000, + stardustReward: 80, + status: "locked", + upgradeRewards: [ "divine_spark_2" ], + zoneId: "goddess_primordial_springs", + }, + // โ”€โ”€ Eternal Firmament โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 800_000, + bountyDivinityClaimed: false, + consecrationRequirement: 15, + currentHp: 20_000_000_000_000_000, + damagePerSecond: 500_000_000, + description: + "The outermost guardian of the eternal firmament โ€” the first of a line of defences so layered that most never learn there are more beyond.", + divinityReward: 1000, + equipmentRewards: [], + id: "firmament_sentinel", + maxHp: 20_000_000_000_000_000, + name: "Firmament Sentinel", + prayersReward: 1e15, + stardustReward: 120, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_eternal_firmament", + }, + { + bountyDivinity: 1_500_000, + bountyDivinityClaimed: false, + consecrationRequirement: 15, + currentHp: 150_000_000_000_000_000, + damagePerSecond: 1_500_000_000, + description: + "The voice and will of the goddess โ€” a being whose every word reshapes probability. It speaks and the universe listens. It is very tired of what it has heard from your disciples.", + divinityReward: 1500, + equipmentRewards: [], + id: "divine_herald", + maxHp: 150_000_000_000_000_000, + name: "Divine Herald", + prayersReward: 8e15, + stardustReward: 200, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_eternal_firmament", + }, + { + bountyDivinity: 3_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 15, + currentHp: 1_000_000_000_000_000_000, + damagePerSecond: 5_000_000_000, + description: + "The keeper of the gate of apotheosis โ€” the boundary between mortal aspiration and divine truth. It has watched countless mortals approach and break. You are the first to still be standing.", + divinityReward: 2500, + equipmentRewards: [], + id: "apotheosis_guardian", + maxHp: 1_000_000_000_000_000_000, + name: "Apotheosis Guardian", + prayersReward: 5e16, + stardustReward: 350, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_eternal_firmament", + }, + { + bountyDivinity: 10_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 15, + currentHp: 8_000_000_000_000_000_000, + damagePerSecond: 20_000_000_000, + description: + "A fragment of the goddess herself โ€” not her full power, but enough. She is watching through this avatar with something approaching interest. You will probably lose. She hopes you don't.", + divinityReward: 5000, + equipmentRewards: [], + id: "the_goddess_avatar", + maxHp: 8_000_000_000_000_000_000, + name: "The Goddess Avatar", + prayersReward: 4e17, + stardustReward: 1000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_eternal_firmament", + }, + // โ”€โ”€ Sacred Grove โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 7_500_000, + bountyDivinityClaimed: false, + consecrationRequirement: 21, + currentHp: 5e21, + damagePerSecond: 5e12, + description: + "An ancient spirit woven from the grove's oldest roots โ€” older than the trees themselves and far less patient. It tends the grove with a devotion that has long since crossed into something dangerous.", + divinityReward: 3750, + equipmentRewards: [], + id: "root_ancient", + maxHp: 5e21, + name: "Root Ancient", + prayersReward: 2.5e20, + stardustReward: 500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_sacred_grove", + }, + { + bountyDivinity: 15_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 21, + currentHp: 1e22, + damagePerSecond: 1e13, + description: + "A divine bloom of impossible scale โ€” a single flower whose petals are each the size of a cathedral and whose pollen carries divine decrees. It does not like being disturbed.", + divinityReward: 7500, + equipmentRewards: [], + id: "sacred_bloom", + maxHp: 1e22, + name: "Sacred Bloom", + prayersReward: 5e20, + stardustReward: 1000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_sacred_grove", + }, + { + bountyDivinity: 22_500_000, + bountyDivinityClaimed: false, + consecrationRequirement: 21, + currentHp: 1.5e22, + damagePerSecond: 1.5e13, + description: + "The grove's appointed warden โ€” a being made entirely of living wood and concentrated divine will. Its branches are weapons. Its roots are traps. Its patience is infinite.", + divinityReward: 11_250, + equipmentRewards: [], + id: "grove_warden", + maxHp: 1.5e22, + name: "Grove Warden", + prayersReward: 7.5e20, + stardustReward: 1500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_sacred_grove", + }, + { + bountyDivinity: 30_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 21, + currentHp: 2e22, + damagePerSecond: 2e13, + description: + "The undisputed ruler of the Sacred Grove โ€” ancient beyond reckoning, powerful beyond challenge, and deeply unimpressed with disciples who think the grove is a nice place for a walk.", + divinityReward: 15_000, + equipmentRewards: [], + id: "grove_sovereign", + maxHp: 2e22, + name: "Grove Sovereign", + prayersReward: 1e21, + stardustReward: 2000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_sacred_grove", + }, + // โ”€โ”€ Luminous Expanse โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 25_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 28, + currentHp: 2.5e25, + damagePerSecond: 2.5e16, + description: + "A being composed entirely of refracted divine light โ€” every wavelength a different aspect of the goddess's nature. It is not aggressive. It simply burns everything it touches.", + divinityReward: 12_500, + equipmentRewards: [], + id: "light_fragment", + maxHp: 2.5e25, + name: "Light Fragment", + prayersReward: 1.25e24, + stardustReward: 1250, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_luminous_expanse", + }, + { + bountyDivinity: 50_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 28, + currentHp: 5e25, + damagePerSecond: 5e16, + description: + "One of the ancient sunwardens โ€” beings tasked with preventing the expanse's radiance from spilling into zones that cannot survive it. Their containment efforts are ongoing. Their success rate is approximate.", + divinityReward: 25_000, + equipmentRewards: [], + id: "sunwarden", + maxHp: 5e25, + name: "Sunwarden", + prayersReward: 2.5e24, + stardustReward: 2500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_luminous_expanse", + }, + { + bountyDivinity: 75_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 28, + currentHp: 7.5e25, + damagePerSecond: 7.5e16, + description: + "A radiant colossus formed from the expanse's concentrated core โ€” pure, weaponised luminescence given a body and a purpose. The purpose is to ensure you do not pass.", + divinityReward: 37_500, + equipmentRewards: [], + id: "radiant_colossus", + maxHp: 7.5e25, + name: "Radiant Colossus", + prayersReward: 3.75e24, + stardustReward: 3750, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_luminous_expanse", + }, + { + bountyDivinity: 100_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 28, + currentHp: 1e26, + damagePerSecond: 1e17, + description: + "The absolute embodiment of divine radiance โ€” the light at the centre of the Luminous Expanse made sovereign, conscious, and entirely unwilling to let anything cast a shadow.", + divinityReward: 50_000, + equipmentRewards: [], + id: "light_titan", + maxHp: 1e26, + name: "Light Titan", + prayersReward: 5e24, + stardustReward: 5000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_luminous_expanse", + }, + // โ”€โ”€ Heavenly Forge โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 75_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 36, + currentHp: 1.25e29, + damagePerSecond: 1.25e20, + description: + "An apprentice of the forge who has been heating the same divine alloy since before time was formally measured. They have opinions about your form, your footwork, and your fundamental unworthiness.", + divinityReward: 37_500, + equipmentRewards: [], + id: "forge_apprentice", + maxHp: 1.25e29, + name: "Forge Apprentice", + prayersReward: 5e27, + stardustReward: 2500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_heavenly_forge", + }, + { + bountyDivinity: 150_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 36, + currentHp: 2.5e29, + damagePerSecond: 2.5e20, + description: + "An entity whose entire being is an ongoing act of construction โ€” it is building something, it has always been building something, and it will not stop to explain what. The byproduct of its work is catastrophic force.", + divinityReward: 75_000, + equipmentRewards: [], + id: "eternal_smith", + maxHp: 2.5e29, + name: "Eternal Smith", + prayersReward: 1e28, + stardustReward: 5000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_heavenly_forge", + }, + { + bountyDivinity: 225_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 36, + currentHp: 3.75e29, + damagePerSecond: 3.75e20, + description: + "The forge overseer โ€” a being who has reviewed every divine creation ever made here and found most of them acceptable. It does not review yours without first reviewing you.", + divinityReward: 112_500, + equipmentRewards: [], + id: "forge_overseer", + maxHp: 3.75e29, + name: "Forge Overseer", + prayersReward: 1.5e28, + stardustReward: 7500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_heavenly_forge", + }, + { + bountyDivinity: 300_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 36, + currentHp: 5e29, + damagePerSecond: 5e20, + description: + "The master of the Heavenly Forge โ€” the being who shaped the first law from raw divine potential and has not stopped working since. It will test whether you are worth the materials you would require.", + divinityReward: 150_000, + equipmentRewards: [], + id: "forge_master", + maxHp: 5e29, + name: "Forge Master", + prayersReward: 2e28, + stardustReward: 10_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_heavenly_forge", + }, + // โ”€โ”€ Oracle Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 125_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 45, + currentHp: 7.5e32, + damagePerSecond: 7.5e23, + description: + "An oracle still learning to contain the visions it receives โ€” they leak out at inopportune moments in the form of devastating prophetic force. It knows this meeting was inevitable.", + divinityReward: 125_000, + equipmentRewards: [], + id: "oracle_seer", + maxHp: 7.5e32, + name: "Oracle Seer", + prayersReward: 2.5e31, + stardustReward: 5000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_oracle_sanctum", + }, + { + bountyDivinity: 250_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 45, + currentHp: 1.5e33, + damagePerSecond: 1.5e24, + description: + "A diviner whose sight extends across all possible timelines simultaneously. It has observed every way this fight can end. Its expression suggests it does not like most of them.", + divinityReward: 250_000, + equipmentRewards: [], + id: "fate_diviner", + maxHp: 1.5e33, + name: "Fate Diviner", + prayersReward: 5e31, + stardustReward: 10_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_oracle_sanctum", + }, + { + bountyDivinity: 375_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 45, + currentHp: 2.25e33, + damagePerSecond: 2.25e24, + description: + "The sanctum's guardian โ€” a being whose entire purpose is to prevent the untested from receiving prophecy they are not ready to bear. It has broken stronger disciples than you. It remembers all of them.", + divinityReward: 375_000, + equipmentRewards: [], + id: "prophecy_keeper", + maxHp: 2.25e33, + name: "Prophecy Keeper", + prayersReward: 7.5e31, + stardustReward: 15_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_oracle_sanctum", + }, + { + bountyDivinity: 500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 45, + currentHp: 3e33, + damagePerSecond: 3e24, + description: + "The Grand Oracle โ€” the vessel through which the goddess has spoken every prophecy since the first. It does not fight you because it wishes to. It fights you because it has seen this moment and knows that if it does not, something worse comes next.", + divinityReward: 500_000, + equipmentRewards: [], + id: "grand_oracle", + maxHp: 3e33, + name: "Grand Oracle", + prayersReward: 1e32, + stardustReward: 20_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_oracle_sanctum", + }, + // โ”€โ”€ Seraph's Nest โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 375_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 55, + currentHp: 5e36, + damagePerSecond: 5e27, + description: + "A fledgling seraph who has never encountered something that could survive its presence. It is not malicious โ€” it simply has not calibrated its power to a scale where you are relevant.", + divinityReward: 375_000, + equipmentRewards: [], + id: "seraph_fledgling", + maxHp: 5e36, + name: "Seraph Fledgling", + prayersReward: 2e35, + stardustReward: 10_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_seraphs_nest", + }, + { + bountyDivinity: 750_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 55, + currentHp: 1e37, + damagePerSecond: 1e28, + description: + "An elder seraph who has chosen the nest as its permanent domain. It does not remember why it stopped ascending. It does remember every disciple who has tried to make it move.", + divinityReward: 750_000, + equipmentRewards: [], + id: "nest_elder", + maxHp: 1e37, + name: "Nest Elder", + prayersReward: 4e35, + stardustReward: 20_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_seraphs_nest", + }, + { + bountyDivinity: 1_125_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 55, + currentHp: 1.5e37, + damagePerSecond: 1.5e28, + description: + "The nest guardian โ€” a seraph who took the duty of protection as a permanent vow. It has not left the nest in an age. Its power has grown in proportion to its confinement.", + divinityReward: 1_125_000, + equipmentRewards: [], + id: "nest_guardian", + maxHp: 1.5e37, + name: "Nest Guardian", + prayersReward: 6e35, + stardustReward: 30_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_seraphs_nest", + }, + { + bountyDivinity: 1_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 55, + currentHp: 2e37, + damagePerSecond: 2e28, + description: + "The supreme seraph โ€” eldest, most powerful, and least interested in what you have to say. It has been at the apex of seraphic existence since before lesser beings began counting. It will not be moved by achievement. Only by proof.", + divinityReward: 1_500_000, + equipmentRewards: [], + id: "supreme_seraph", + maxHp: 2e37, + name: "Supreme Seraph", + prayersReward: 8e35, + stardustReward: 40_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_seraphs_nest", + }, + // โ”€โ”€ Divine Archive โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 1_250_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 66, + currentHp: 2.5e40, + damagePerSecond: 2.5e31, + description: + "A living index โ€” a being that exists only to categorise, organise, and retrieve. It has never found a record it could not locate. It has never found an intruder it could not remove.", + divinityReward: 1_250_000, + equipmentRewards: [], + id: "archive_index", + maxHp: 2.5e40, + name: "Archive Index", + prayersReward: 1.25e39, + stardustReward: 20_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_archive", + }, + { + bountyDivinity: 2_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 66, + currentHp: 5e40, + damagePerSecond: 5e31, + description: + "The archive's lore warden โ€” the being responsible for ensuring that no knowledge is removed, altered, or contested without proper authorisation. You do not have proper authorisation.", + divinityReward: 2_500_000, + equipmentRewards: [], + id: "lore_warden", + maxHp: 5e40, + name: "Lore Warden", + prayersReward: 2.5e39, + stardustReward: 40_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_archive", + }, + { + bountyDivinity: 3_750_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 66, + currentHp: 7.5e40, + damagePerSecond: 7.5e31, + description: + "The custodian of the archive's restricted section โ€” the texts so dangerous that even their existence cannot be confirmed until the reader has been thoroughly evaluated. The evaluation is physical.", + divinityReward: 3_750_000, + equipmentRewards: [], + id: "archive_custodian", + maxHp: 7.5e40, + name: "Archive Custodian", + prayersReward: 3.75e39, + stardustReward: 60_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_archive", + }, + { + bountyDivinity: 5_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 66, + currentHp: 1e41, + damagePerSecond: 1e32, + description: + "The final guardian of the Divine Archive โ€” a being that carries the sum total of all divine knowledge as a weapon. It does not merely know how to defeat you. It knows every way you have ever been defeated and all the ways you have yet to consider.", + divinityReward: 5_000_000, + equipmentRewards: [], + id: "archive_guardian", + maxHp: 1e41, + name: "Archive Guardian", + prayersReward: 5e39, + stardustReward: 80_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_archive", + }, + // โ”€โ”€ Consecrated Depths โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 3_750_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 78, + currentHp: 2e44, + damagePerSecond: 2e35, + description: + "A being that has descended to a depth where the concept of light is a distant rumour. It is not malevolent โ€” it has simply been in the dark long enough that the distinction no longer registers.", + divinityReward: 3_750_000, + equipmentRewards: [], + id: "depth_dweller", + maxHp: 2e44, + name: "Depth Dweller", + prayersReward: 1e43, + stardustReward: 37_500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_consecrated_depths", + }, + { + bountyDivinity: 7_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 78, + currentHp: 4e44, + damagePerSecond: 4e35, + description: + "The consecrated abyss walker โ€” a being whose body is the darkness itself, shaped into something with intent. It moves without sound and arrives without warning. Its consecration burns cold.", + divinityReward: 7_500_000, + equipmentRewards: [], + id: "abyss_walker", + maxHp: 4e44, + name: "Abyss Walker", + prayersReward: 2e43, + stardustReward: 75_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_consecrated_depths", + }, + { + bountyDivinity: 11_250_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 78, + currentHp: 6e44, + damagePerSecond: 6e35, + description: + "The depths' great warden โ€” an entity tasked with ensuring that what the goddess placed in the abyss remains there. It is deeply unhappy that you have come so far. It will express that unhappiness directly.", + divinityReward: 11_250_000, + equipmentRewards: [], + id: "depths_warden", + maxHp: 6e44, + name: "Depths Warden", + prayersReward: 3e43, + stardustReward: 112_500, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_consecrated_depths", + }, + { + bountyDivinity: 15_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 78, + currentHp: 8e44, + damagePerSecond: 8e35, + description: + "The sovereign of the Consecrated Depths โ€” the being who chose to descend before descent was a concept and has been ruling the dark ever since. It does not ask why you are here. It already knows, and it disagrees.", + divinityReward: 15_000_000, + equipmentRewards: [], + id: "depths_sovereign", + maxHp: 8e44, + name: "Depths Sovereign", + prayersReward: 4e43, + stardustReward: 150_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_consecrated_depths", + }, + // โ”€โ”€ Astral Confluence โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 12_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 91, + currentHp: 1.75e48, + damagePerSecond: 1.75e39, + description: + "A confluence node made manifest โ€” the point where three divine currents intersect and produce something none of them intended. It is aware of this, and it is not pleased.", + divinityReward: 12_500_000, + equipmentRewards: [], + id: "confluence_node", + maxHp: 1.75e48, + name: "Confluence Node", + prayersReward: 7.5e46, + stardustReward: 75_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_astral_confluence", + }, + { + bountyDivinity: 25_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 91, + currentHp: 3.5e48, + damagePerSecond: 3.5e39, + description: + "A being born directly from the convergence of divine streams โ€” not created, but precipitated. It exists because the laws of the confluence demanded something exist at this point. It would rather not.", + divinityReward: 25_000_000, + equipmentRewards: [], + id: "stream_convergent", + maxHp: 3.5e48, + name: "Stream Convergent", + prayersReward: 1.5e47, + stardustReward: 150_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_astral_confluence", + }, + { + bountyDivinity: 37_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 91, + currentHp: 5.25e48, + damagePerSecond: 5.25e39, + description: + "The confluence weaver โ€” a being that maintains the stability of the astral currents by constantly threading them together. Remove it and the confluence unravels. It is very aware of how important it is.", + divinityReward: 37_500_000, + equipmentRewards: [], + id: "confluence_weaver", + maxHp: 5.25e48, + name: "Confluence Weaver", + prayersReward: 2.25e47, + stardustReward: 225_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_astral_confluence", + }, + { + bountyDivinity: 50_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 91, + currentHp: 7e48, + damagePerSecond: 7e39, + description: + "The arbiter of the Astral Confluence โ€” the being who determines which divine currents may merge and which must be kept separate. It has made this determination for every act of creation since the beginning. It is not certain you should be allowed to exist.", + divinityReward: 50_000_000, + equipmentRewards: [], + id: "confluence_arbiter", + maxHp: 7e48, + name: "Confluence Arbiter", + prayersReward: 3e47, + stardustReward: 300_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_astral_confluence", + }, + // โ”€โ”€ Celestial Throne โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 37_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 105, + currentHp: 1.5e52, + damagePerSecond: 1.5e43, + description: + "A throne sentinel whose entire existence is devoted to ensuring the seat of divine power is never approached without permission. It does not ask for credentials. It asks for worthiness. The process is one-sided.", + divinityReward: 37_500_000, + equipmentRewards: [], + id: "throne_sentinel", + maxHp: 1.5e52, + name: "Throne Sentinel", + prayersReward: 7.5e50, + stardustReward: 150_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_celestial_throne", + }, + { + bountyDivinity: 75_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 105, + currentHp: 3e52, + damagePerSecond: 3e43, + description: + "A divine herald elevated to throne rank โ€” the voice that announces those who have been judged worthy of approaching the seat of all creation. It has not made an announcement in ten thousand years. It does not intend to start with you.", + divinityReward: 75_000_000, + equipmentRewards: [], + id: "throne_herald", + maxHp: 3e52, + name: "Throne Herald", + prayersReward: 1.5e51, + stardustReward: 300_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_celestial_throne", + }, + { + bountyDivinity: 112_500_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 105, + currentHp: 4.5e52, + damagePerSecond: 4.5e43, + description: + "The throne's sworn champion โ€” the being tasked with defeating anyone who reaches the throne room unbidden. It has never lost. It treats every fight as though it might be the one that changes that, because some part of it knows the day will come.", + divinityReward: 112_500_000, + equipmentRewards: [], + id: "throne_champion", + maxHp: 4.5e52, + name: "Throne Champion", + prayersReward: 2.25e51, + stardustReward: 450_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_celestial_throne", + }, + { + bountyDivinity: 150_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 105, + currentHp: 6e52, + damagePerSecond: 6e43, + description: + "The guardian of the Celestial Throne โ€” a being whose power is second only to the goddess herself and whose authority is absolute. It does not guard out of obligation. It guards because it chose to, and it has never once regretted that choice. Until perhaps now.", + divinityReward: 150_000_000, + equipmentRewards: [], + id: "throne_guardian", + maxHp: 6e52, + name: "Throne Guardian", + prayersReward: 3e51, + stardustReward: 600_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_celestial_throne", + }, + // โ”€โ”€ Infinite Choir โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 125_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 120, + currentHp: 1.25e56, + damagePerSecond: 1.25e47, + description: + "A lone voice from the choir whose harmony has grown so powerful it exists as a physical force. It is still singing. It will be singing when you arrive and when you leave, whether or not you survive the visit.", + divinityReward: 125_000_000, + equipmentRewards: [], + id: "choir_voice", + maxHp: 1.25e56, + name: "Choir Voice", + prayersReward: 5e54, + stardustReward: 300_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_infinite_choir", + }, + { + bountyDivinity: 250_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 120, + currentHp: 2.5e56, + damagePerSecond: 2.5e47, + description: + "The choir section leader โ€” a being responsible for coordinating thousands of divine voices into a single harmonic weapon. Its section has been perfectly in tune for several eternities. It intends to keep it that way.", + divinityReward: 250_000_000, + equipmentRewards: [], + id: "choir_section_leader", + maxHp: 2.5e56, + name: "Choir Section Leader", + prayersReward: 1e55, + stardustReward: 600_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_infinite_choir", + }, + { + bountyDivinity: 375_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 120, + currentHp: 3.75e56, + damagePerSecond: 3.75e47, + description: + "The choir's grand harmonist โ€” the being who holds the master melody from which all other voices derive their meaning. Without it, the choir is just noise. With it, the choir is a force that reshapes reality. It is not fond of soloists.", + divinityReward: 375_000_000, + equipmentRewards: [], + id: "grand_harmonist", + maxHp: 3.75e56, + name: "Grand Harmonist", + prayersReward: 1.5e55, + stardustReward: 900_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_infinite_choir", + }, + { + bountyDivinity: 500_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 120, + currentHp: 5e56, + damagePerSecond: 5e47, + description: + "The conductor of the Infinite Choir โ€” the being who raised its hand at the beginning of creation's first song and has not lowered it since. Every note of every hymn ever sung flows through it. Its power is the power of all divine music, focused into a single point.", + divinityReward: 500_000_000, + equipmentRewards: [], + id: "choir_conductor", + maxHp: 5e56, + name: "Choir Conductor", + prayersReward: 2e55, + stardustReward: 1_200_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_infinite_choir", + }, + // โ”€โ”€ The Veil โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 375_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 136, + currentHp: 1.25e60, + damagePerSecond: 1.25e51, + description: + "A veil tender whose entire existence is maintaining the boundary between what can be known and what cannot. It does not hate intruders. It simply cannot afford to let them pass.", + divinityReward: 375_000_000, + equipmentRewards: [], + id: "veil_tender", + maxHp: 1.25e60, + name: "Veil Tender", + prayersReward: 5e58, + stardustReward: 625_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_veil", + }, + { + bountyDivinity: 750_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 136, + currentHp: 2.5e60, + damagePerSecond: 2.5e51, + description: + "The veil's threshold guardian โ€” a being that exists precisely at the boundary between the known and the unknowable, and has spent its existence ensuring no one crosses in either direction without cause. It will weigh your cause.", + divinityReward: 750_000_000, + equipmentRewards: [], + id: "threshold_guardian", + maxHp: 2.5e60, + name: "Threshold Guardian", + prayersReward: 1e59, + stardustReward: 1_250_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_veil", + }, + { + bountyDivinity: 1_125_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 136, + currentHp: 3.75e60, + damagePerSecond: 3.75e51, + description: + "The veil's enforcer โ€” a being whose sole purpose is to turn back those who have reached this far but are not yet ready for what lies beyond. It has performed this function exactly once before. That encounter was described, somewhere in the Divine Archive, as 'decisive'.", + divinityReward: 1_125_000_000, + equipmentRewards: [], + id: "veil_enforcer", + maxHp: 3.75e60, + name: "Veil Enforcer", + prayersReward: 1.5e59, + stardustReward: 1_875_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_veil", + }, + { + bountyDivinity: 1_500_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 136, + currentHp: 5e60, + damagePerSecond: 5e51, + description: + "The guardian of the Veil โ€” the oldest thing that still answers when addressed. It has watched everything the goddess has made from this boundary, and it has watched it all end. It will let you pass if you can prove that this time is different. It is not optimistic.", + divinityReward: 1_500_000_000, + equipmentRewards: [], + id: "veil_guardian", + maxHp: 5e60, + name: "Veil Guardian", + prayersReward: 2e59, + stardustReward: 2_500_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_veil", + }, + // โ”€โ”€ Divine Heart โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bountyDivinity: 1_250_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 153, + currentHp: 1.25e64, + damagePerSecond: 1.25e55, + description: + "A fragment of the divine heart's own love โ€” made autonomous, made powerful, made protective. It does not want to hurt you. It wants you to understand what you are approaching, so that you will not approach it. You approach it anyway.", + divinityReward: 1_250_000_000, + equipmentRewards: [], + id: "heart_fragment", + maxHp: 1.25e64, + name: "Heart Fragment", + prayersReward: 5e62, + stardustReward: 1_250_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_heart", + }, + { + bountyDivinity: 2_500_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 153, + currentHp: 2.5e64, + damagePerSecond: 2.5e55, + description: + "The heart's eternal pulse โ€” the rhythm of the goddess's love made physical, made massive, made dangerous to those who encounter it at close range without preparation. It has been beating since the first act of creation. It will not stop for you.", + divinityReward: 2_500_000_000, + equipmentRewards: [], + id: "eternal_pulse", + maxHp: 2.5e64, + name: "Eternal Pulse", + prayersReward: 1e63, + stardustReward: 2_500_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_heart", + }, + { + bountyDivinity: 3_750_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 153, + currentHp: 3.75e64, + damagePerSecond: 3.75e55, + description: + "The heart's chosen guardian โ€” the being the goddess trusted with the protection of her most essential self. It is the only being in existence that has ever made her feel safe. It does not intend to fail her now.", + divinityReward: 3_750_000_000, + equipmentRewards: [], + id: "heart_guardian", + maxHp: 3.75e64, + name: "Heart Guardian", + prayersReward: 1.5e63, + stardustReward: 3_750_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_heart", + }, + { + bountyDivinity: 5_000_000_000_000, + bountyDivinityClaimed: false, + consecrationRequirement: 153, + currentHp: 5e64, + damagePerSecond: 5e55, + description: + "The sovereign of the Divine Heart โ€” the goddess's love and will and power made absolute, given form, and set as the final test for everything that has walked this path. It is not cruel. It is final. You have come to the end of everything, and the end is watching you with something that may, impossibly, be hope.", + divinityReward: 5_000_000_000, + equipmentRewards: [], + id: "divine_heart_sovereign", + maxHp: 5e64, + name: "Divine Heart Sovereign", + prayersReward: 2e63, + stardustReward: 5_000_000, + status: "locked", + upgradeRewards: [], + zoneId: "goddess_divine_heart", + }, +]; diff --git a/apps/api/src/data/goddessConsecrationUpgrades.ts b/apps/api/src/data/goddessConsecrationUpgrades.ts new file mode 100644 index 0000000..14eaa66 --- /dev/null +++ b/apps/api/src/data/goddessConsecrationUpgrades.ts @@ -0,0 +1,216 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { ConsecrationUpgrade } from "@elysium/types"; + +export const defaultConsecrationUpgrades: Array = [ + // โ”€โ”€ Prayer income โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "prayers", + description: "The first drop of divinity awakens your disciples' devotion. All prayers/s ร—1.25.", + divinityCost: 5, + id: "divine_prayers_1", + multiplier: 1.25, + name: "Divinity Blessing I", + }, + { + category: "prayers", + description: "Deeper divine resonance amplifies every prayer across the order. All prayers/s ร—1.5.", + divinityCost: 15, + id: "divine_prayers_2", + multiplier: 1.5, + name: "Divinity Blessing II", + }, + { + category: "prayers", + description: "The full weight of accumulated consecration doubles prayer output entirely. All prayers/s ร—2.", + divinityCost: 40, + id: "divine_prayers_3", + multiplier: 2, + name: "Divinity Blessing III", + }, + { + category: "prayers", + description: "The goddess's own blessing multiplies prayers fivefold through all of creation. All prayers/s ร—5.", + divinityCost: 120, + id: "divine_prayers_4", + multiplier: 5, + name: "Divinity Blessing IV", + }, + { + category: "prayers", + description: "An unbroken chain of consecrations has tuned your disciples to a perfect divine frequency. All prayers/s ร—10.", + divinityCost: 350, + id: "divine_prayers_5", + multiplier: 10, + name: "Divinity Blessing V", + }, + { + category: "prayers", + description: "The consecration memory floods every prayer with exponential fervour. All prayers/s ร—25.", + divinityCost: 900, + id: "divine_prayers_6", + multiplier: 25, + name: "Divinity Blessing VI", + }, + { + category: "prayers", + description: "The ultimate consecration attunement โ€” prayer income multiplied one hundredfold. All prayers/s ร—100.", + divinityCost: 2500, + id: "divine_prayers_7", + multiplier: 100, + name: "Divinity Blessing VII", + }, + // โ”€โ”€ Disciple output โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "disciples", + description: "Consecrated disciples return with deepened devotion. Disciple output ร—1.25.", + divinityCost: 8, + id: "disciple_mastery_1", + multiplier: 1.25, + name: "Disciple Mastery I", + }, + { + category: "disciples", + description: "The order's collective devotion grows with each consecration. Disciple output ร—1.5.", + divinityCost: 25, + id: "disciple_mastery_2", + multiplier: 1.5, + name: "Disciple Mastery II", + }, + { + category: "disciples", + description: "Consecration has forged the disciples into instruments of pure divine will. Disciple output ร—2.", + divinityCost: 80, + id: "disciple_mastery_3", + multiplier: 2, + name: "Disciple Mastery III", + }, + { + category: "disciples", + description: "Every rebirth reshapes the disciples anew, each cycle stronger than the last. Disciple output ร—5.", + divinityCost: 250, + id: "disciple_mastery_4", + multiplier: 5, + name: "Disciple Mastery IV", + }, + { + category: "disciples", + description: "The disciples have transcended mortal devotion โ€” they are consecration made flesh. Disciple output ร—10.", + divinityCost: 750, + id: "disciple_mastery_5", + multiplier: 10, + name: "Disciple Mastery V", + }, + // โ”€โ”€ Combat power โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "combat", + description: "Sacred battle experience accumulates across consecrations. Combat power ร—1.25.", + divinityCost: 10, + id: "sacred_combat_c1", + multiplier: 1.25, + name: "Sacred Warfare I", + }, + { + category: "combat", + description: "Veterans of consecration know how to fight smarter in the divine realm. Combat power ร—1.5.", + divinityCost: 35, + id: "sacred_combat_c2", + multiplier: 1.5, + name: "Sacred Warfare II", + }, + { + category: "combat", + description: "Consecrated warriors carry the strength of every past life into battle. Combat power ร—2.", + divinityCost: 100, + id: "sacred_combat_c3", + multiplier: 2, + name: "Sacred Warfare III", + }, + { + category: "combat", + description: "Battle-hardened by countless consecrations, every disciple strikes with threefold fury. Combat power ร—3.", + divinityCost: 300, + id: "sacred_combat_c4", + multiplier: 3, + name: "Sacred Warfare IV", + }, + { + category: "combat", + description: "The consecration cycle has transformed the order into an unstoppable divine army. Combat power ร—5.", + divinityCost: 800, + id: "sacred_combat_c5", + multiplier: 5, + name: "Sacred Warfare V", + }, + // โ”€โ”€ Divinity meta โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "divinity", + description: "Your consecration attunement deepens with each rebirth. Earn 25% more divinity from future consecrations.", + divinityCost: 50, + id: "divine_legacy", + multiplier: 1.25, + name: "Divine Legacy", + }, + { + category: "divinity", + description: "The echoes of past consecrations amplify the divinity extracted from future ones. Divinity from consecration ร—1.5.", + divinityCost: 175, + id: "consecration_echo", + multiplier: 1.5, + name: "Consecration Echo", + }, + { + category: "divinity", + description: "Insight beyond the cycle doubles the divinity gained each time you consecrate. Divinity from consecration ร—2.", + divinityCost: 500, + id: "eternal_insight", + multiplier: 2, + name: "Eternal Insight", + }, + { + category: "divinity", + description: "The loop of consecration feeds back upon itself, tripling the divinity in each harvest. Divinity from consecration ร—3.", + divinityCost: 1500, + id: "divine_recursion", + multiplier: 3, + name: "Divine Recursion", + }, + { + category: "divinity", + description: "Perfect consecration yields โ€” the goddess rewards mastery with fivefold divinity. Divinity from consecration ร—5.", + divinityCost: 4000, + id: "perfect_consecration", + multiplier: 5, + name: "Perfect Consecration", + }, + // โ”€โ”€ Utility โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "utility", + description: "Unlock the Auto-Consecration toggle. When enabled, you will automatically consecrate the moment you reach the consecration threshold.", + divinityCost: 20, + id: "auto_consecrate", + multiplier: 1, + name: "Autonomous Consecration", + }, + { + category: "utility", + description: "The threshold required to consecrate is reduced by 10%, letting you cycle faster.", + divinityCost: 60, + id: "consecration_efficiency_1", + multiplier: 0.9, + name: "Consecration Efficiency I", + }, + { + category: "utility", + description: "Deeper understanding of the ritual reduces the consecration threshold by a further 10%.", + divinityCost: 200, + id: "consecration_efficiency_2", + multiplier: 0.9, + name: "Consecration Efficiency II", + }, +]; diff --git a/apps/api/src/data/goddessCrafting.ts b/apps/api/src/data/goddessCrafting.ts new file mode 100644 index 0000000..d4cd947 --- /dev/null +++ b/apps/api/src/data/goddessCrafting.ts @@ -0,0 +1,546 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { CraftingRecipe } from "@elysium/types"; + +export const defaultGoddessCraftingRecipes: Array = [ + // โ”€โ”€ Celestial Garden โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.1, + }, + description: "An amplifier woven from divine petals and crystallised prayer. It does not make prayers louder โ€” it makes them more true.", + id: "prayer_amplifier", + name: "Prayer Amplifier", + requiredMaterials: [ + { materialId: "divine_petal", quantity: 3 }, + { materialId: "prayer_crystal", quantity: 2 }, + ], + zoneId: "goddess_celestial_garden", + }, + { + bonus: { + type: "combat_power", + value: 1.1, + }, + description: "Celestial dust ground into prayer crystals creates a focus that sharpens disciples' divine combat instincts.", + id: "celestial_focus", + name: "Celestial Focus", + requiredMaterials: [ + { materialId: "celestial_dust", quantity: 2 }, + { materialId: "prayer_crystal", quantity: 2 }, + ], + zoneId: "goddess_celestial_garden", + }, + // โ”€โ”€ Crystal Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.15, + }, + description: "Holy ink dissolved in sanctum water, then set with shard dust. Disciples who drink it can recite any prayer they have heard exactly once.", + id: "oracle_potion", + name: "Oracle Potion", + requiredMaterials: [ + { materialId: "holy_ink", quantity: 2 }, + { materialId: "sanctum_shard", quantity: 3 }, + ], + zoneId: "goddess_crystal_sanctum", + }, + { + bonus: { + type: "essence_income", + value: 1.2, + }, + description: "A lens ground from an oracle fragment and set in holy ink. Through it, the divine flow of the universe becomes briefly legible.", + id: "lens_of_truth", + name: "Lens of Truth", + requiredMaterials: [ + { materialId: "oracle_lens_fragment", quantity: 1 }, + { materialId: "holy_ink", quantity: 2 }, + ], + zoneId: "goddess_crystal_sanctum", + }, + // โ”€โ”€ Astral Cathedral โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "combat_power", + value: 1.2, + }, + description: "A balm prepared from seraph feathers and choir essence. Applied before battle, it gives disciples the brief sensation of having wings.", + id: "seraph_balm", + name: "Seraph Balm", + requiredMaterials: [ + { materialId: "seraph_feather", quantity: 3 }, + { materialId: "choir_essence", quantity: 2 }, + ], + zoneId: "goddess_astral_cathedral", + }, + { + bonus: { + type: "gold_income", + value: 1.2, + }, + description: "Astral glass dissolved in choir essence creates a vial of concentrated resonance. One drop per disciple per morning.", + id: "astral_resonance_vial", + name: "Astral Resonance Vial", + requiredMaterials: [ + { materialId: "astral_glass", quantity: 2 }, + { materialId: "choir_essence", quantity: 2 }, + ], + zoneId: "goddess_astral_cathedral", + }, + // โ”€โ”€ Empyrean Citadel โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.25, + }, + description: "Empyrean ore refined with divine alloy dust and pressed into a blessing-coin. The citadel uses these to sanctify each new weapon forged.", + id: "empyrean_blessing", + name: "Empyrean Blessing", + requiredMaterials: [ + { materialId: "empyrean_ore", quantity: 3 }, + { materialId: "divine_alloy", quantity: 2 }, + ], + zoneId: "goddess_empyrean_citadel", + }, + { + bonus: { + type: "combat_power", + value: 1.25, + }, + description: "A tincture prepared from a champion's medal and divine alloy filings. Dosed by champions before major engagements.", + id: "champions_tincture", + name: "Champion's Tincture", + requiredMaterials: [ + { materialId: "celestial_medal", quantity: 1 }, + { materialId: "divine_alloy", quantity: 2 }, + ], + zoneId: "goddess_empyrean_citadel", + }, + // โ”€โ”€ Primordial Springs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.3, + }, + description: "Creation water distilled with primordial essence โ€” the closest thing to bottled genesis. Handle as if the universe is watching.", + id: "springs_elixir", + name: "Springs Elixir", + requiredMaterials: [ + { materialId: "creation_water", quantity: 3 }, + { materialId: "primordial_essence", quantity: 2 }, + ], + zoneId: "goddess_primordial_springs", + }, + { + bonus: { + type: "essence_income", + value: 1.35, + }, + description: "A genesis crystal dissolved in creation water โ€” a brew of pure origination. Disciples who drink it briefly remember what it felt like to not yet exist.", + id: "genesis_brew", + name: "Genesis Brew", + requiredMaterials: [ + { materialId: "genesis_crystal", quantity: 1 }, + { materialId: "creation_water", quantity: 2 }, + ], + zoneId: "goddess_primordial_springs", + }, + // โ”€โ”€ Eternal Firmament โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "combat_power", + value: 1.35, + }, + description: "A ward inscribed on firmament stone using divine light shards as the writing medium. Disciples who carry it are protected by permanence itself.", + id: "firmament_ward", + name: "Firmament Ward", + requiredMaterials: [ + { materialId: "firmament_stone", quantity: 2 }, + { materialId: "divine_light_shard", quantity: 2 }, + ], + zoneId: "goddess_eternal_firmament", + }, + { + bonus: { + type: "essence_income", + value: 1.4, + }, + description: "An eternity fragment set in divine light โ€” a lantern that never dims because it is powered by time itself. It illuminates things that do not normally have light.", + id: "eternity_lantern", + name: "Eternity Lantern", + requiredMaterials: [ + { materialId: "eternity_fragment", quantity: 1 }, + { materialId: "divine_light_shard", quantity: 3 }, + ], + zoneId: "goddess_eternal_firmament", + }, + // โ”€โ”€ Sacred Grove โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.4, + }, + description: "Grove resin mixed with luminous leaf extract and set around sacred heartwood creates a talisman that grows warmer in the presence of sincere prayer.", + id: "grove_talisman", + name: "Grove Talisman", + requiredMaterials: [ + { materialId: "grove_resin", quantity: 3 }, + { materialId: "luminous_leaf", quantity: 2 }, + { materialId: "sacred_heartwood", quantity: 1 }, + ], + zoneId: "goddess_sacred_grove", + }, + { + bonus: { + type: "combat_power", + value: 1.4, + }, + description: "Sacred heartwood carved into a pendant and sealed with grove resin. Disciples who wear it feel the grove's centuries of reverence as personal strength.", + id: "heartwood_pendant", + name: "Heartwood Pendant", + requiredMaterials: [ + { materialId: "sacred_heartwood", quantity: 2 }, + { materialId: "grove_resin", quantity: 2 }, + ], + zoneId: "goddess_sacred_grove", + }, + // โ”€โ”€ Luminous Expanse โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "essence_income", + value: 1.45, + }, + description: "Captured radiance compressed around a light core โ€” a beacon that broadcasts the goddess's presence to disciples too far away to feel it unaided.", + id: "radiance_beacon", + name: "Radiance Beacon", + requiredMaterials: [ + { materialId: "captured_radiance", quantity: 3 }, + { materialId: "light_core", quantity: 1 }, + ], + zoneId: "goddess_luminous_expanse", + }, + { + bonus: { + type: "gold_income", + value: 1.45, + }, + description: "A pool of radiance encased in glass and suspended on radiance pool solution โ€” a focusing lens that amplifies divine light into something measurable.", + id: "luminous_prism", + name: "Luminous Prism", + requiredMaterials: [ + { materialId: "radiance_pool", quantity: 2 }, + { materialId: "captured_radiance", quantity: 2 }, + { materialId: "light_core", quantity: 1 }, + ], + zoneId: "goddess_luminous_expanse", + }, + // โ”€โ”€ Heavenly Forge โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "combat_power", + value: 1.5, + }, + description: "Forge scale layered over divine slag and inlaid with a forge gem โ€” a gauntlet that channels the forge's sacred heat into every blow struck.", + id: "forge_gauntlet", + name: "Forge Gauntlet", + requiredMaterials: [ + { materialId: "forge_scale", quantity: 3 }, + { materialId: "divine_slag", quantity: 2 }, + { materialId: "forge_gem", quantity: 1 }, + ], + zoneId: "goddess_heavenly_forge", + }, + { + bonus: { + type: "essence_income", + value: 1.5, + }, + description: "A forge gem set in refined divine slag โ€” a crucible that converts ambient prayer energy directly into essence. Runs continuously once lit.", + id: "divine_crucible", + name: "Divine Crucible", + requiredMaterials: [ + { materialId: "forge_gem", quantity: 2 }, + { materialId: "divine_slag", quantity: 3 }, + ], + zoneId: "goddess_heavenly_forge", + }, + // โ”€โ”€ Oracle Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.55, + }, + description: "Vision residue suspended in prophecy crystal solution โ€” an elixir that grants disciples fleeting precognitive awareness of lucrative opportunities.", + id: "oracle_elixir", + name: "Oracle Elixir", + requiredMaterials: [ + { materialId: "vision_residue", quantity: 3 }, + { materialId: "prophecy_crystal", quantity: 2 }, + ], + zoneId: "goddess_oracle_sanctum", + }, + { + bonus: { + type: "combat_power", + value: 1.55, + }, + description: "A fate shard mounted on a prophecy crystal matrix โ€” when a disciple holds it before battle, they briefly see the outcome and can choose their approach accordingly.", + id: "fate_compass", + name: "Fate Compass", + requiredMaterials: [ + { materialId: "fate_shard", quantity: 1 }, + { materialId: "prophecy_crystal", quantity: 3 }, + { materialId: "vision_residue", quantity: 2 }, + ], + zoneId: "goddess_oracle_sanctum", + }, + // โ”€โ”€ Seraph's Nest โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "essence_income", + value: 1.6, + }, + description: "Seraph down woven into a mantle and sealed with seraph primary barbs โ€” wearing it is indistinguishable from being held by something enormous and gentle.", + id: "seraph_mantle", + name: "Seraph Mantle", + requiredMaterials: [ + { materialId: "seraph_down", quantity: 4 }, + { materialId: "seraph_primary", quantity: 2 }, + ], + zoneId: "goddess_seraphs_nest", + }, + { + bonus: { + type: "combat_power", + value: 1.6, + }, + description: "An ascended quill carved into a focus rod โ€” it channels divine will with zero resistance, as though the goddess herself were guiding every motion.", + id: "ascended_focus", + name: "Ascended Focus", + requiredMaterials: [ + { materialId: "ascended_quill", quantity: 1 }, + { materialId: "seraph_primary", quantity: 2 }, + { materialId: "seraph_down", quantity: 2 }, + ], + zoneId: "goddess_seraphs_nest", + }, + // โ”€โ”€ Divine Archive โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.65, + }, + description: "Celestial vellum stamped with archive seals and pressed into a portable codex โ€” disciples who carry it can access divine knowledge in the field.", + id: "field_codex", + name: "Field Codex", + requiredMaterials: [ + { materialId: "celestial_vellum", quantity: 4 }, + { materialId: "archive_seal", quantity: 2 }, + ], + zoneId: "goddess_divine_archive", + }, + { + bonus: { + type: "essence_income", + value: 1.65, + }, + description: "A living codex page bound with archive seals โ€” it updates itself with new divine knowledge continuously, and disciples gain essence simply by proximity.", + id: "living_tome", + name: "Living Tome", + requiredMaterials: [ + { materialId: "living_codex_page", quantity: 2 }, + { materialId: "archive_seal", quantity: 2 }, + { materialId: "celestial_vellum", quantity: 2 }, + ], + zoneId: "goddess_divine_archive", + }, + // โ”€โ”€ Consecrated Depths โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "combat_power", + value: 1.7, + }, + description: "Consecrated stone carved into armour plates and blessed with depth blessing โ€” the armour remembers every prayer spoken over it and adds their weight to the wearer.", + id: "depth_armour", + name: "Depth Armour", + requiredMaterials: [ + { materialId: "consecrated_stone", quantity: 3 }, + { materialId: "depth_blessing", quantity: 2 }, + { materialId: "abyssal_gem", quantity: 1 }, + ], + zoneId: "goddess_consecrated_depths", + }, + { + bonus: { + type: "essence_income", + value: 1.7, + }, + description: "An abyssal gem set in depth blessing solution โ€” a vessel that draws essence from the deepest consecrated places and stores it for release when needed.", + id: "abyssal_vessel", + name: "Abyssal Vessel", + requiredMaterials: [ + { materialId: "abyssal_gem", quantity: 2 }, + { materialId: "depth_blessing", quantity: 3 }, + ], + zoneId: "goddess_consecrated_depths", + }, + // โ”€โ”€ Astral Confluence โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.75, + }, + description: "Confluence shards woven into a prism using astral harmonics โ€” it refracts divine energy across multiple streams simultaneously, multiplying its effective output.", + id: "confluence_prism", + name: "Confluence Prism", + requiredMaterials: [ + { materialId: "confluence_shard", quantity: 3 }, + { materialId: "astral_harmonic", quantity: 2 }, + ], + zoneId: "goddess_astral_confluence", + }, + { + bonus: { + type: "combat_power", + value: 1.75, + }, + description: "A convergence node bound in astral harmonic resonance โ€” a weapon core that channels the power of seven converging astral streams into a single devastating point.", + id: "convergence_core", + name: "Convergence Core", + requiredMaterials: [ + { materialId: "convergence_node", quantity: 1 }, + { materialId: "astral_harmonic", quantity: 3 }, + { materialId: "confluence_shard", quantity: 2 }, + ], + zoneId: "goddess_astral_confluence", + }, + // โ”€โ”€ Celestial Throne โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 1.8, + }, + description: "Throne gold leaf pressed over a sovereignty gem โ€” a signet whose mark carries the full weight of divine authority and cannot be questioned.", + id: "sovereignty_signet", + name: "Sovereignty Signet", + requiredMaterials: [ + { materialId: "throne_gold_leaf", quantity: 3 }, + { materialId: "sovereignty_gem", quantity: 1 }, + ], + zoneId: "goddess_celestial_throne", + }, + { + bonus: { + type: "combat_power", + value: 1.8, + }, + description: "A crown fragment set in sovereignty gem and trimmed with throne gold โ€” the fragment remembers every ruling ever passed from the throne and channels that authority.", + id: "crown_relic", + name: "Crown Relic", + requiredMaterials: [ + { materialId: "crown_fragment", quantity: 1 }, + { materialId: "sovereignty_gem", quantity: 2 }, + { materialId: "throne_gold_leaf", quantity: 2 }, + ], + zoneId: "goddess_celestial_throne", + }, + // โ”€โ”€ Infinite Choir โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "essence_income", + value: 1.85, + }, + description: "Choir notes compressed with divine resonance into a single instrument โ€” playing it fills nearby disciples with the choir's infinite devotion and multiplies their essence output.", + id: "resonance_instrument", + name: "Resonance Instrument", + requiredMaterials: [ + { materialId: "choir_note", quantity: 4 }, + { materialId: "divine_resonance", quantity: 2 }, + ], + zoneId: "goddess_infinite_choir", + }, + { + bonus: { + type: "combat_power", + value: 1.85, + }, + description: "The sacred chord crystallised and mounted on a divine resonance matrix โ€” its vibration disrupts the coherence of any force that opposes the goddess's will.", + id: "sacred_chord_matrix", + name: "Sacred Chord Matrix", + requiredMaterials: [ + { materialId: "sacred_chord", quantity: 1 }, + { materialId: "divine_resonance", quantity: 2 }, + { materialId: "choir_note", quantity: 2 }, + ], + zoneId: "goddess_infinite_choir", + }, + // โ”€โ”€ The Veil โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "essence_income", + value: 1.9, + }, + description: "Veil thread woven with liminal essence โ€” a cloak that allows the wearer to exist partially outside reality, drawing essence from both sides of the divide.", + id: "liminal_cloak", + name: "Liminal Cloak", + requiredMaterials: [ + { materialId: "veil_thread", quantity: 3 }, + { materialId: "liminal_essence", quantity: 2 }, + ], + zoneId: "goddess_veil", + }, + { + bonus: { + type: "combat_power", + value: 1.9, + }, + description: "A beyond fragment encased in liminal essence and bound with veil thread โ€” a weapon that strikes from a direction reality does not expect and cannot easily defend against.", + id: "veil_piercer", + name: "Veil Piercer", + requiredMaterials: [ + { materialId: "beyond_fragment", quantity: 1 }, + { materialId: "liminal_essence", quantity: 3 }, + { materialId: "veil_thread", quantity: 2 }, + ], + zoneId: "goddess_veil", + }, + // โ”€โ”€ Divine Heart โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { + type: "gold_income", + value: 2, + }, + description: "Heart pulses suspended in divine love crystal matrix โ€” an amplifier that broadcasts the goddess's love as a measurable economic force. Disciples work harder when they feel it.", + id: "heart_amplifier", + name: "Heart Amplifier", + requiredMaterials: [ + { materialId: "heart_pulse", quantity: 4 }, + { materialId: "divine_love_crystal", quantity: 2 }, + ], + zoneId: "goddess_divine_heart", + }, + { + bonus: { + type: "combat_power", + value: 2, + }, + description: "Heart ichor distilled with divine love crystal into an essence that transforms willingness into unstoppable force. The goddess's love, weaponised. She approves.", + id: "divine_heart_essence", + name: "Divine Heart Essence", + requiredMaterials: [ + { materialId: "heart_ichor", quantity: 1 }, + { materialId: "divine_love_crystal", quantity: 2 }, + { materialId: "heart_pulse", quantity: 2 }, + ], + zoneId: "goddess_divine_heart", + }, +]; diff --git a/apps/api/src/data/goddessDisciples.ts b/apps/api/src/data/goddessDisciples.ts new file mode 100644 index 0000000..8346ad8 --- /dev/null +++ b/apps/api/src/data/goddessDisciples.ts @@ -0,0 +1,396 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +/* eslint-disable max-lines -- Data file */ +import type { GoddessDisciple } from "@elysium/types"; + +export const defaultGoddessDisciples: Array = [ + { + baseCost: 1, + class: "oracle", + combatPower: 1, + count: 0, + divinityPerSecond: 0, + id: "novice", + level: 1, + name: "Novice", + prayersPerSecond: 0.1, + unlocked: true, + }, + { + baseCost: 8, + class: "seraph", + combatPower: 3, + count: 0, + divinityPerSecond: 0, + id: "initiate", + level: 2, + name: "Initiate", + prayersPerSecond: 0.5, + unlocked: false, + }, + { + baseCost: 80, + class: "invoker", + combatPower: 8, + count: 0, + divinityPerSecond: 0.01, + id: "acolyte", + level: 3, + name: "Acolyte", + prayersPerSecond: 1.5, + unlocked: false, + }, + { + baseCost: 500, + class: "templar", + combatPower: 20, + count: 0, + divinityPerSecond: 0.02, + id: "devotee", + level: 4, + name: "Devotee", + prayersPerSecond: 4, + unlocked: false, + }, + { + baseCost: 3500, + class: "herald", + combatPower: 50, + count: 0, + divinityPerSecond: 0.05, + id: "adept", + level: 5, + name: "Adept", + prayersPerSecond: 10, + unlocked: false, + }, + { + baseCost: 25_000, + class: "oracle", + combatPower: 120, + count: 0, + divinityPerSecond: 0.1, + id: "priest", + level: 6, + name: "Priest", + prayersPerSecond: 25, + unlocked: false, + }, + { + baseCost: 175_000, + class: "seraph", + combatPower: 300, + count: 0, + divinityPerSecond: 0.2, + id: "high_priest", + level: 7, + name: "High Priest", + prayersPerSecond: 75, + unlocked: false, + }, + { + baseCost: 1_200_000, + class: "invoker", + combatPower: 800, + count: 0, + divinityPerSecond: 0.5, + id: "divine_scholar", + level: 8, + name: "Divine Scholar", + prayersPerSecond: 200, + unlocked: false, + }, + { + baseCost: 8_500_000, + class: "templar", + combatPower: 2000, + count: 0, + divinityPerSecond: 1, + id: "holy_champion", + level: 9, + name: "Holy Champion", + prayersPerSecond: 600, + unlocked: false, + }, + { + baseCost: 60_000_000, + class: "warden", + combatPower: 6000, + count: 0, + divinityPerSecond: 3, + id: "celestial_adept", + level: 10, + name: "Celestial Adept", + prayersPerSecond: 2000, + unlocked: false, + }, + { + baseCost: 285_000_000, + class: "oracle", + combatPower: 13_000, + count: 0, + divinityPerSecond: 6, + id: "seraphic_master", + level: 11, + name: "Seraphic Master", + prayersPerSecond: 4500, + unlocked: false, + }, + { + baseCost: 1_350_000_000, + class: "invoker", + combatPower: 28_000, + count: 0, + divinityPerSecond: 11, + id: "divine_invoker", + level: 12, + name: "Divine Invoker", + prayersPerSecond: 9500, + unlocked: false, + }, + { + baseCost: 6_400_000_000, + class: "templar", + combatPower: 60_000, + count: 0, + divinityPerSecond: 20, + id: "astral_templar", + level: 13, + name: "Astral Templar", + prayersPerSecond: 20_000, + unlocked: false, + }, + { + baseCost: 30_000_000_000, + class: "herald", + combatPower: 130_000, + count: 0, + divinityPerSecond: 35, + id: "empyrean_herald", + level: 14, + name: "Empyrean Herald", + prayersPerSecond: 40_000, + unlocked: false, + }, + { + baseCost: 180_000_000_000, + class: "seraph", + combatPower: 400_000, + count: 0, + divinityPerSecond: 100, + id: "primordial_herald", + level: 15, + name: "Primordial Herald", + prayersPerSecond: 120_000, + unlocked: false, + }, + { + baseCost: 1_000_000_000_000, + class: "warden", + combatPower: 1_200_000, + count: 0, + divinityPerSecond: 300, + id: "eternal_divine", + level: 16, + name: "Eternal Divine", + prayersPerSecond: 400_000, + unlocked: false, + }, + { + baseCost: 6_000_000_000_000, + class: "oracle", + combatPower: 3_600_000, + count: 0, + divinityPerSecond: 900, + id: "cosmic_oracle", + level: 17, + name: "Cosmic Oracle", + prayersPerSecond: 1_200_000, + unlocked: false, + }, + { + baseCost: 35_000_000_000_000, + class: "seraph", + combatPower: 10_800_000, + count: 0, + divinityPerSecond: 2700, + id: "radiant_seraph", + level: 18, + name: "Radiant Seraph", + prayersPerSecond: 3_600_000, + unlocked: false, + }, + { + baseCost: 210_000_000_000_000, + class: "invoker", + combatPower: 32_000_000, + count: 0, + divinityPerSecond: 8000, + id: "grand_invoker", + level: 19, + name: "Grand Invoker", + prayersPerSecond: 10_500_000, + unlocked: false, + }, + { + baseCost: 1_300_000_000_000_000, + class: "templar", + combatPower: 96_000_000, + count: 0, + divinityPerSecond: 24_000, + id: "sacred_templar", + level: 20, + name: "Sacred Templar", + prayersPerSecond: 32_000_000, + unlocked: false, + }, + { + baseCost: 8_000_000_000_000_000, + class: "herald", + combatPower: 290_000_000, + count: 0, + divinityPerSecond: 72_000, + id: "celestial_herald", + level: 21, + name: "Celestial Herald", + prayersPerSecond: 96_000_000, + unlocked: false, + }, + { + baseCost: 50_000_000_000_000_000, + class: "warden", + combatPower: 870_000_000, + count: 0, + divinityPerSecond: 216_000, + id: "divine_warden", + level: 22, + name: "Divine Warden", + prayersPerSecond: 288_000_000, + unlocked: false, + }, + { + baseCost: 300_000_000_000_000_000, + class: "oracle", + combatPower: 2_600_000_000, + count: 0, + divinityPerSecond: 650_000, + id: "supreme_oracle", + level: 23, + name: "Supreme Oracle", + prayersPerSecond: 864_000_000, + unlocked: false, + }, + { + baseCost: 1_800_000_000_000_000_000, + class: "seraph", + combatPower: 7_800_000_000, + count: 0, + divinityPerSecond: 1_950_000, + id: "arch_seraph", + level: 24, + name: "Arch-Seraph", + prayersPerSecond: 2_600_000_000, + unlocked: false, + }, + { + baseCost: 11_000_000_000_000_000_000, + class: "invoker", + combatPower: 23_000_000_000, + count: 0, + divinityPerSecond: 5_850_000, + id: "primordial_invoker", + level: 25, + name: "Primordial Invoker", + prayersPerSecond: 7_800_000_000, + unlocked: false, + }, + { + baseCost: 70_000_000_000_000_000_000, + class: "templar", + combatPower: 70_000_000_000, + count: 0, + divinityPerSecond: 17_500_000, + id: "eternal_templar", + level: 26, + name: "Eternal Templar", + prayersPerSecond: 23_000_000_000, + unlocked: false, + }, + { + baseCost: 450_000_000_000_000_000_000, + class: "herald", + combatPower: 210_000_000_000, + count: 0, + divinityPerSecond: 52_000_000, + id: "firmament_herald", + level: 27, + name: "Firmament Herald", + prayersPerSecond: 70_000_000_000, + unlocked: false, + }, + { + baseCost: 2_700_000_000_000_000_000_000, + class: "warden", + combatPower: 630_000_000_000, + count: 0, + divinityPerSecond: 156_000_000, + id: "goddess_warden", + level: 28, + name: "Goddess Warden", + prayersPerSecond: 210_000_000_000, + unlocked: false, + }, + { + baseCost: 16_000_000_000_000_000_000_000, + class: "oracle", + combatPower: 1_900_000_000_000, + count: 0, + divinityPerSecond: 468_000_000, + id: "transcendent_oracle", + level: 29, + name: "Transcendent Oracle", + prayersPerSecond: 630_000_000_000, + unlocked: false, + }, + { + baseCost: 100_000_000_000_000_000_000_000, + class: "seraph", + combatPower: 5_700_000_000_000, + count: 0, + divinityPerSecond: 1_400_000_000, + id: "exalted_seraph", + level: 30, + name: "Exalted Seraph", + prayersPerSecond: 1_900_000_000_000, + unlocked: false, + }, + { + baseCost: 650_000_000_000_000_000_000_000, + class: "invoker", + combatPower: 17_000_000_000_000, + count: 0, + divinityPerSecond: 4_200_000_000, + id: "infinite_invoker", + level: 31, + name: "Infinite Invoker", + prayersPerSecond: 5_700_000_000_000, + unlocked: false, + }, + { + baseCost: 4_000_000_000_000_000_000_000_000, + class: "templar", + combatPower: 51_000_000_000_000, + count: 0, + divinityPerSecond: 12_600_000_000, + id: "divine_heart_disciple", + level: 32, + name: "Divine Heart", + prayersPerSecond: 17_000_000_000_000, + unlocked: false, + }, +]; diff --git a/apps/api/src/data/goddessEnlightenmentUpgrades.ts b/apps/api/src/data/goddessEnlightenmentUpgrades.ts new file mode 100644 index 0000000..2539f04 --- /dev/null +++ b/apps/api/src/data/goddessEnlightenmentUpgrades.ts @@ -0,0 +1,136 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { EnlightenmentUpgrade } from "@elysium/types"; + +export const defaultEnlightenmentUpgrades: Array = [ + // โ”€โ”€ Prayer income โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "prayers", + cost: 2, + description: "The memory of past consecrations echoes through your order, amplifying prayer income by 25%.", + id: "stardust_prayers_1", + multiplier: 1.25, + name: "Celestial Echo I", + }, + { + category: "prayers", + cost: 4, + description: "Transcendent experience resonates through every disciple in the order, boosting prayers by 50%.", + id: "stardust_prayers_2", + multiplier: 1.5, + name: "Celestial Echo II", + }, + { + category: "prayers", + cost: 8, + description: "The harmony of enlightened cycles surges through your order, doubling all prayer income.", + id: "stardust_prayers_3", + multiplier: 2, + name: "Celestial Echo III", + }, + { + category: "prayers", + cost: 16, + description: "Divine overflow from enlightenment floods the order, tripling all prayer income.", + id: "stardust_prayers_4", + multiplier: 3, + name: "Celestial Echo IV", + }, + { + category: "prayers", + cost: 32, + description: "The infinite chorus of every consecration you have completed multiplies prayer income fivefold.", + id: "stardust_prayers_5", + multiplier: 5, + name: "Celestial Echo V", + }, + // โ”€โ”€ Combat โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "combat", + cost: 2, + description: "Memories of every divine battle harden your disciples, increasing combat power by 25%.", + id: "stardust_combat_1", + multiplier: 1.25, + name: "Battle Memory I", + }, + { + category: "combat", + cost: 6, + description: "Veterans of enlightenment know how to fight with transcendent precision, boosting combat power by 50%.", + id: "stardust_combat_2", + multiplier: 1.5, + name: "Battle Memory II", + }, + { + category: "combat", + cost: 12, + description: "Your disciples carry the strength of every enlightened cycle, doubling all combat power.", + id: "stardust_combat_3", + multiplier: 2, + name: "Battle Memory III", + }, + // โ”€โ”€ Consecration threshold โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "consecration_threshold", + cost: 3, + description: "Enlightened experience shortens the road to consecration โ€” threshold reduced by 10%.", + id: "stardust_consecration_threshold_1", + multiplier: 0.9, + name: "Accelerated Devotion I", + }, + { + category: "consecration_threshold", + cost: 9, + description: "Mastery of the enlightenment cycle trims the consecration requirement by a further 15%.", + id: "stardust_consecration_threshold_2", + multiplier: 0.85, + name: "Accelerated Devotion II", + }, + { + category: "consecration_threshold", + cost: 25, + description: "The path to consecration is now second nature โ€” threshold reduced by 20% once more.", + id: "stardust_consecration_threshold_3", + multiplier: 0.8, + name: "Accelerated Devotion III", + }, + // โ”€โ”€ Consecration divinity โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "consecration_divinity", + cost: 5, + description: "Each cycle of enlightenment deepens the consecration harvest, increasing divinity yield by 25%.", + id: "stardust_consecration_divinity_1", + multiplier: 1.25, + name: "Luminous Harvest I", + }, + { + category: "consecration_divinity", + cost: 20, + description: "The light of enlightenment pours into every consecration, boosting divinity yield by 50%.", + id: "stardust_consecration_divinity_2", + multiplier: 1.5, + name: "Luminous Harvest II", + }, + { + category: "consecration_divinity", + cost: 60, + description: "Perfection of the cycle doubles the divinity drawn from every act of consecration.", + id: "stardust_consecration_divinity_3", + multiplier: 2, + name: "Luminous Harvest III", + }, + // โ”€โ”€ Stardust meta โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + category: "stardust_meta", + cost: 15, + description: "Your enlightenment resonates deeper, amplifying future stardust yields by 25%.", + id: "stardust_meta_1", + multiplier: 1.25, + name: "Resonant Enlightenment", + }, +]; diff --git a/apps/api/src/data/goddessEquipment.ts b/apps/api/src/data/goddessEquipment.ts new file mode 100644 index 0000000..b14e59a --- /dev/null +++ b/apps/api/src/data/goddessEquipment.ts @@ -0,0 +1,563 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessEquipment } from "@elysium/types"; + +export const defaultGoddessEquipment: Array = [ + // โ”€โ”€ Relics โ€” Common โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { prayersMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 300, stardust: 0 }, + description: "A weathered tome filled with the first prayers ever offered. The ink has faded, but the faith remains.", + equipped: false, + id: "divine_tome", + name: "Divine Tome", + owned: false, + rarity: "common", + type: "relic", + }, + { + bonus: { prayersMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 350, stardust: 0 }, + description: "A scroll of thin parchment bearing a single whispered blessing. Small, but sincere.", + equipped: false, + id: "prayer_scroll", + name: "Prayer Scroll", + owned: false, + rarity: "common", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 400, stardust: 0 }, + description: "A slender wand carved from a branch blessed by a passing spirit. Humble in form, genuine in purpose.", + equipped: false, + id: "blessing_wand", + name: "Blessing Wand", + owned: false, + rarity: "common", + type: "relic", + }, + // โ”€โ”€ Relics โ€” Rare โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.2, prayersMultiplier: 1.1 }, + description: "A staff carved from petrified sanctuary wood. Its grain holds echoes of a thousand blessings.", + equipped: false, + id: "sacred_staff", + name: "Sacred Staff", + owned: false, + rarity: "rare", + type: "relic", + }, + { + bonus: { prayersMultiplier: 1.3 }, + description: "A crystalline lens ground from frozen oracle tears. Those who look through it see truths they cannot unhear.", + equipped: false, + id: "oracle_lens", + name: "Oracle Lens", + owned: false, + rarity: "rare", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.1, prayersMultiplier: 1.2 }, + description: "A quill shed from the wing of a celestial herald. Whatever it writes becomes spoken prophecy.", + equipped: false, + id: "celestial_quill", + name: "Celestial Quill", + owned: false, + rarity: "rare", + type: "relic", + }, + { + bonus: { prayersMultiplier: 1.25 }, + description: "A smooth orb of blessed amber that hums with the residual faith of an entire sanctum's congregation.", + equipped: false, + id: "sanctum_focus", + name: "Sanctum Focus", + owned: false, + rarity: "rare", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.2, prayersMultiplier: 1.1 }, + description: "A sceptre of star-cast silver that channels divine will through the constellations it was forged beneath.", + equipped: false, + id: "astral_sceptre", + name: "Astral Sceptre", + owned: false, + rarity: "rare", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.35 }, + description: "A rod drawn from the highest reaches of the empyrean vault. Light bends around it as though in reverence.", + equipped: false, + id: "empyrean_rod", + name: "Empyrean Rod", + owned: false, + rarity: "rare", + type: "relic", + }, + // โ”€โ”€ Relics โ€” Epic โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.5, prayersMultiplier: 1.25 }, + description: "A blade borne by the highest order of seraphim. Its edge is said to cut through even divine illusion.", + equipped: false, + id: "seraph_blade", + name: "Seraph Blade", + owned: false, + rarity: "epic", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.4, prayersMultiplier: 1.4 }, + description: "A sceptre inscribed with the Goddess's own name in a script no mortal tongue can speak aloud.", + equipped: false, + id: "divine_sceptre", + name: "Divine Sceptre", + owned: false, + rarity: "epic", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.6 }, + description: "A lance of heavenly ore that strikes with the force of a falling star. No shield has ever stopped it twice.", + equipped: false, + id: "heavenly_lance", + name: "Heavenly Lance", + owned: false, + rarity: "epic", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.5 }, + description: "A hammer that once shaped the divine armaments of the celestial forge. Its weight carries the memory of creation.", + equipped: false, + id: "forge_hammer", + name: "Forge Hammer", + owned: false, + rarity: "epic", + type: "relic", + }, + { + bonus: { prayersMultiplier: 1.5 }, + description: "A staff of oracle-bone and wrapped starlight. Prayers spoken through it travel to the Goddess without delay.", + equipped: false, + id: "oracle_staff", + name: "Oracle Staff", + owned: false, + rarity: "epic", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.45, prayersMultiplier: 1.3 }, + description: "A twin blade to the Seraph Blade, wielded in the off-hand of a champion who ascended beyond mortality.", + equipped: false, + id: "seraph_sword", + name: "Seraph Sword", + owned: false, + rarity: "epic", + type: "relic", + }, + // โ”€โ”€ Relics โ€” Legendary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.75, prayersMultiplier: 1.75 }, + description: "A rod drawn from the highest layer of the firmament, where creation and void press against each other eternally.", + equipped: false, + id: "firmament_rod", + name: "Firmament Rod", + owned: false, + rarity: "legendary", + type: "relic", + }, + { + bonus: { combatMultiplier: 2 }, + description: "The personal weapon of the Goddess herself, wielded once at the dawn of the world and never since. Its tip still smells of stardust.", + equipped: false, + id: "goddess_spear", + name: "Goddess's Spear", + owned: false, + rarity: "legendary", + type: "relic", + }, + { + bonus: { combatMultiplier: 1.8, prayersMultiplier: 2 }, + description: "A relic formed from a single heartbeat of the Goddess, crystallised at the moment she first felt devotion returned.", + equipped: false, + id: "divine_heart_relic", + name: "Divine Heart Relic", + owned: false, + rarity: "legendary", + type: "relic", + }, + // โ”€โ”€ Vestments โ€” Common โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 300, stardust: 0 }, + description: "Simple robes given to those who have just found their faith. The stitching is uneven, but the intention is pure.", + equipped: false, + id: "novice_vestments", + name: "Novice Vestments", + owned: false, + rarity: "common", + type: "vestment", + }, + { + bonus: { prayersMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 350, stardust: 0 }, + description: "The standard garb of an initiate entering the divine order. Clean, modest, and faintly perfumed with incense.", + equipped: false, + id: "initiate_robes", + name: "Initiate Robes", + owned: false, + rarity: "common", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 450, stardust: 0 }, + description: "Practical garments worn by acolytes who serve the temples. The fabric repels both dust and doubt.", + equipped: false, + id: "acolyte_garb", + name: "Acolyte Garb", + owned: false, + rarity: "common", + type: "vestment", + }, + // โ”€โ”€ Vestments โ€” Rare โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.1, prayersMultiplier: 1.2 }, + description: "Robes woven through hours of silent prayer. Each thread carries a whispered blessing from the hands that made it.", + equipped: false, + id: "prayer_robes", + name: "Prayer Robes", + owned: false, + rarity: "rare", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.2, prayersMultiplier: 1.15 }, + description: "The ceremonial dress of a sanctum's most decorated servant. Heavy with ornament and heavier with meaning.", + equipped: false, + id: "sanctum_regalia", + name: "Sanctum Regalia", + owned: false, + rarity: "rare", + type: "vestment", + }, + { + bonus: { prayersMultiplier: 1.3 }, + description: "A flowing garment sewn from fibres of celestial cloud. It never wrinkles and always catches the light perfectly.", + equipped: false, + id: "celestial_wrap", + name: "Celestial Wrap", + owned: false, + rarity: "rare", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.25, prayersMultiplier: 1.1 }, + description: "A cloak dyed in the hue of the void between stars. It absorbs damage and whispers warnings to its wearer.", + equipped: false, + id: "astral_cloak", + name: "Astral Cloak", + owned: false, + rarity: "rare", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.35 }, + description: "A cowl spun from the highest threads of empyrean silk. It protects the mind as much as it protects the head.", + equipped: false, + id: "empyrean_cowl", + name: "Empyrean Cowl", + owned: false, + rarity: "rare", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.2, prayersMultiplier: 1.2 }, + description: "A mantle woven from sacred grove leaves that never wither. The forest's blessing persists in every fibre.", + equipped: false, + id: "grove_mantle", + name: "Grove Mantle", + owned: false, + rarity: "rare", + type: "vestment", + }, + // โ”€โ”€ Vestments โ€” Epic โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.5, prayersMultiplier: 1.3 }, + description: "A mantle torn from an astral projection and reforged into armour. It exists in two planes simultaneously.", + equipped: false, + id: "astral_mantle", + name: "Astral Mantle", + owned: false, + rarity: "epic", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.6 }, + description: "Plate armour hammered from condensed empyrean light. It weighs nothing and deflects everything.", + equipped: false, + id: "empyrean_armour", + name: "Empyrean Armour", + owned: false, + rarity: "epic", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.45, prayersMultiplier: 1.4 }, + description: "Armour that radiates a soft divine glow. Enemies flinch from its light before the blow even lands.", + equipped: false, + id: "luminous_plate", + name: "Luminous Plate", + owned: false, + rarity: "epic", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.55 }, + description: "Vestments quenched in the divine forge, each layer fused by celestial fire until no ordinary blade can part them.", + equipped: false, + id: "forge_vestments", + name: "Forge Vestments", + owned: false, + rarity: "epic", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.35, prayersMultiplier: 1.5 }, + description: "Robes worn by the oracle who first heard the Goddess speak. The fabric remembers every prophecy ever uttered within it.", + equipped: false, + id: "oracle_robes", + name: "Oracle Robes", + owned: false, + rarity: "epic", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.4, prayersMultiplier: 1.45 }, + description: "Armour that marks its wearer as an instrument of divine will. Enemies see the Goddess reflected in its surface.", + equipped: false, + id: "divine_regalia", + name: "Divine Regalia", + owned: false, + rarity: "epic", + type: "vestment", + }, + // โ”€โ”€ Vestments โ€” Legendary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { combatMultiplier: 1.75, prayersMultiplier: 1.75 }, + description: "Vestments that persist beyond the death of the wearer. The cloth refuses to decay. So, eventually, does the soul.", + equipped: false, + id: "eternal_vestments", + name: "Eternal Vestments", + owned: false, + rarity: "legendary", + type: "vestment", + }, + { + bonus: { combatMultiplier: 2 }, + description: "Armour drawn from the firmament itself, where the boundary between existence and the void is at its thinnest.", + equipped: false, + id: "firmament_armour", + name: "Firmament Armour", + owned: false, + rarity: "legendary", + type: "vestment", + }, + { + bonus: { combatMultiplier: 1.8, prayersMultiplier: 2 }, + description: "The Goddess's own ceremonial robes, left behind as a covenant. They still carry the warmth of divinity.", + equipped: false, + id: "goddess_raiment", + name: "Goddess's Raiment", + owned: false, + rarity: "legendary", + type: "vestment", + }, + // โ”€โ”€ Sigils โ€” Common โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { divinityMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 300, stardust: 0 }, + description: "A small clay token stamped with a sunburst. Farmers press it into new soil to invite the Goddess's blessing.", + equipped: false, + id: "faith_token", + name: "Faith Token", + owned: false, + rarity: "common", + type: "sigil", + }, + { + bonus: { prayersMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 350, stardust: 0 }, + description: "A single bead worn smooth by generations of faithful fingers. Every prayer whispered over it still clings to the surface.", + equipped: false, + id: "prayer_bead", + name: "Prayer Bead", + owned: false, + rarity: "common", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.1 }, + cost: { divinity: 0, prayers: 400, stardust: 0 }, + description: "A charm carved from sanctified bone. It draws small kindnesses towards its wearer, like gravity for good fortune.", + equipped: false, + id: "blessing_charm", + name: "Blessing Charm", + owned: false, + rarity: "common", + type: "sigil", + }, + // โ”€โ”€ Sigils โ€” Rare โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { divinityMultiplier: 1.2, prayersMultiplier: 1.1 }, + description: "A seal pressed in divine wax that has never cooled. The blessing it carries is renewed with every sunrise.", + equipped: false, + id: "blessing_seal", + name: "Blessing Seal", + owned: false, + rarity: "rare", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.3 }, + description: "A sigil shaped into an open eye. Those who bear it find their prayers answered with unusual precision.", + equipped: false, + id: "oracle_sigil", + name: "Oracle Sigil", + owned: false, + rarity: "rare", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.1, prayersMultiplier: 1.2 }, + description: "A token bearing the mark of the highest seraphim. It grants the holder passage through divine barriers.", + equipped: false, + id: "seraph_token", + name: "Seraph Token", + owned: false, + rarity: "rare", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.25 }, + description: "A pendant woven from living vines that never wither. It carries the grove's unbroken memory of the divine.", + equipped: false, + id: "grove_pendant", + name: "Grove Pendant", + owned: false, + rarity: "rare", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.2, prayersMultiplier: 1.2 }, + description: "A mark drawn in light rather than ink. It pulses faintly with the rhythm of divine order.", + equipped: false, + id: "luminous_mark", + name: "Luminous Mark", + owned: false, + rarity: "rare", + type: "sigil", + }, + // โ”€โ”€ Sigils โ€” Epic โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { divinityMultiplier: 1.5, prayersMultiplier: 1.3 }, + description: "A mark burned into existence by a seraph's own finger. It does not fade because it is not merely physical.", + equipped: false, + id: "seraph_mark", + name: "Seraph Mark", + owned: false, + rarity: "epic", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.5, prayersMultiplier: 1.4 }, + description: "An emblem bearing the full weight of divine authority. Those who carry it act as the Goddess's declared instrument.", + equipped: false, + id: "divine_emblem", + name: "Divine Emblem", + owned: false, + rarity: "epic", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.6 }, + description: "A seal drawn from the highest empyrean archive. It radiates a hum that only the faithful can hear.", + equipped: false, + id: "empyrean_seal", + name: "Empyrean Seal", + owned: false, + rarity: "epic", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.4, prayersMultiplier: 1.4 }, + description: "A brand seared in the divine forge. It marks the bearer as something that has passed through fire and remained.", + equipped: false, + id: "forge_brand", + name: "Forge Brand", + owned: false, + rarity: "epic", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.45, prayersMultiplier: 1.35 }, + description: "A sigil drawn from the archive of every prayer ever recorded. It remembers everything that has ever been asked.", + equipped: false, + id: "archive_sigil", + name: "Archive Sigil", + owned: false, + rarity: "epic", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 1.55, prayersMultiplier: 1.25 }, + description: "A celestial mark that resonates with the movement of heavenly bodies. It grows stronger under open sky.", + equipped: false, + id: "celestial_mark", + name: "Celestial Mark", + owned: false, + rarity: "epic", + type: "sigil", + }, + // โ”€โ”€ Sigils โ€” Legendary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + bonus: { divinityMultiplier: 2, prayersMultiplier: 1.75 }, + description: "A sigil that has existed since before the first prayer was spoken. It does not grant eternity โ€” it is eternity.", + equipped: false, + id: "eternity_sigil", + name: "Eternity Sigil", + owned: false, + rarity: "legendary", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 2.5 }, + description: "A seal drawn from the innermost layer of the firmament, where time folds back on itself and prayers echo forever.", + equipped: false, + id: "firmament_seal", + name: "Firmament Seal", + owned: false, + rarity: "legendary", + type: "sigil", + }, + { + bonus: { divinityMultiplier: 2, prayersMultiplier: 2 }, + description: "A sigil shaped like a heartbeat, crystallised at the precise moment the Goddess chose to love the world back.", + equipped: false, + id: "divine_heart_sigil", + name: "Divine Heart Sigil", + owned: false, + rarity: "legendary", + type: "sigil", + }, +]; diff --git a/apps/api/src/data/goddessEquipmentSets.ts b/apps/api/src/data/goddessEquipmentSets.ts new file mode 100644 index 0000000..93c7183 --- /dev/null +++ b/apps/api/src/data/goddessEquipmentSets.ts @@ -0,0 +1,119 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessEquipmentSet } from "@elysium/types"; + +export const defaultGoddessEquipmentSets: Array = [ + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { prayersMultiplier: 1.15 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { divinityMultiplier: 1.1 }, + }, + description: "The simplest sacred things gathered in one place โ€” a tome, a robe, a token. Together they are more than their stitching.", + id: "gardens_blessing", + name: "Garden's Blessing", + pieces: [ "divine_tome", "novice_vestments", "faith_token", "prayer_scroll", "initiate_robes" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { prayersMultiplier: 1.25 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { combatMultiplier: 1.2 }, + }, + description: "The instruments of the Crystal Sanctum's greatest scholars. Knowledge and combat are not opposites โ€” they are complements.", + id: "sanctum_scholar", + name: "Sanctum Scholar", + pieces: [ "oracle_lens", "sanctum_regalia", "oracle_sigil", "celestial_quill", "sanctum_focus" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { combatMultiplier: 1.3 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { prayersMultiplier: 1.2 }, + }, + description: "The arms and marks of the seraphic order. Those who carry this set fight not for glory but because the Goddess asked them to.", + id: "seraphic_arsenal", + name: "Seraphic Arsenal", + pieces: [ "seraph_blade", "prayer_robes", "seraph_mark", "seraph_token", "seraph_sword" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { combatMultiplier: 1.35 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { divinityMultiplier: 1.25 }, + }, + description: "The armaments of those who hold the citadel against the void. Their faith is a wall and their weapons are its gate.", + id: "citadel_defender", + name: "Citadel Defender", + pieces: [ "sacred_staff", "empyrean_cowl", "empyrean_seal", "astral_sceptre", "empyrean_rod" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { prayersMultiplier: 1.3 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { divinityMultiplier: 1.3 }, + }, + description: "Relics of the astral void and the blessed seals born from it. To invoke the divine, one must first become a vessel worthy of it.", + id: "divine_invoker", + name: "Divine Invoker", + pieces: [ "astral_mantle", "blessing_seal", "astral_cloak", "empyrean_armour", "luminous_mark" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { combatMultiplier: 1.4 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { prayersMultiplier: 1.35 }, + }, + description: "The master-crafter's complete regalia โ€” hammer, vestments, and brand. Every piece was forged in the same divine fire that shaped the celestial host.", + id: "forge_masters_regalia", + name: "Forge-Master's Regalia", + pieces: [ "forge_hammer", "forge_vestments", "forge_brand", "oracle_staff", "oracle_robes" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { combatMultiplier: 1.5 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { prayersMultiplier: 1.5 }, + }, + description: "Armaments drawn from the firmament's edge, where the sky becomes something else entirely. Those chosen to wear them rarely choose to return.", + id: "firmaments_chosen", + name: "Firmament's Chosen", + pieces: [ "firmament_rod", "firmament_armour", "firmament_seal", "empyrean_armour", "luminous_plate" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { divinityMultiplier: 1.4 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { prayersMultiplier: 1.4 }, + }, + description: "The oracle's complete truth โ€” sceptre, raiment, emblem, and the archives of every word ever spoken in the Goddess's name.", + id: "oracles_truth", + name: "Oracle's Truth", + pieces: [ "divine_sceptre", "divine_regalia", "divine_emblem", "archive_sigil", "celestial_mark" ], + }, + { + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: { prayersMultiplier: 2 }, + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: { divinityMultiplier: 2 }, + }, + description: "The Goddess's own heart, spear, raiment, and sigil, gathered together at last. To wear this set is to carry what she left behind โ€” and to feel the weight of being chosen.", + id: "heart_of_the_goddess", + name: "Heart of the Goddess", + pieces: [ "divine_heart_relic", "goddess_raiment", "divine_heart_sigil", "goddess_spear", "eternal_vestments" ], + }, +]; diff --git a/apps/api/src/data/goddessExplorations.ts b/apps/api/src/data/goddessExplorations.ts new file mode 100644 index 0000000..8ff3185 --- /dev/null +++ b/apps/api/src/data/goddessExplorations.ts @@ -0,0 +1,1717 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessExplorationArea } from "@elysium/types"; + +export const defaultGoddessExplorationAreas: Array = [ + // โ”€โ”€ Celestial Garden โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "A sun-dappled clearing where divine flowers grow in patterns that mirror the constellation of the goddess's birth.", + durationSeconds: 30, + events: [ + { + effect: { amount: 50, type: "prayers_gain" }, + id: "garden_glade_harvest", + text: "Your disciples discover a cluster of prayer crystals half-buried in the soft earth.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "garden_glade_guardian", + text: "A territorial celestial sprite drives several disciples from the glade before they can retreat.", + }, + ], + id: "garden_glade", + name: "The Garden Glade", + possibleMaterials: [ + { materialId: "divine_petal", maxQuantity: 3, minQuantity: 1, weight: 5 }, + { materialId: "prayer_crystal", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_celestial_garden", + }, + { + description: "A vast meadow at the garden's edge where the divine light is diffused into something even novice disciples can bathe in safely.", + durationSeconds: 60, + events: [ + { + effect: { amount: 200, type: "prayers_gain" }, + id: "celestial_meadow_prayer", + text: "Your disciples pause their exploration to offer a spontaneous group prayer. The goddess, apparently, was listening.", + }, + { + effect: { materialId: "celestial_dust", quantity: 2, type: "sacred_material_gain" }, + id: "celestial_meadow_dust", + text: "A shower of celestial dust drifts down from above โ€” several disciples hold out their hands.", + }, + ], + id: "celestial_meadow", + name: "The Celestial Meadow", + possibleMaterials: [ + { materialId: "divine_petal", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "celestial_dust", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_celestial_garden", + }, + { + description: "A garden path lined with divine blooms whose petals chime softly in a wind that comes from no discernible direction.", + durationSeconds: 90, + events: [ + { + effect: { amount: 500, type: "prayers_gain" }, + id: "chiming_path_resonance", + text: "The chiming of the divine blooms aligns briefly into a hymn. Your disciples join in from memory.", + }, + { + effect: { materialId: "divine_petal", quantity: 3, type: "sacred_material_gain" }, + id: "chiming_path_petals", + text: "A gust of the sourceless wind scatters a cascade of petals across the path. Your disciples gather them eagerly.", + }, + ], + id: "chiming_path", + name: "The Chiming Path", + possibleMaterials: [ + { materialId: "divine_petal", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "prayer_crystal", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_celestial_garden", + }, + { + description: "The garden's sacred heart, where the oldest divine tree grows โ€” its roots reaching down into the foundation of the goddess's realm.", + durationSeconds: 120, + events: [ + { + effect: { amount: 1500, type: "prayers_gain" }, + id: "sacred_tree_blessing", + text: "Your disciples press their hands to the ancient bark. Something vast and patient notices them.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "sacred_tree_test", + text: "The tree's guardians test your disciples' worthiness. Several do not pass and are gently escorted out.", + }, + ], + id: "sacred_tree", + name: "The Sacred Tree", + possibleMaterials: [ + { materialId: "celestial_dust", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "divine_petal", maxQuantity: 3, minQuantity: 2, weight: 3 }, + { materialId: "prayer_crystal", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_celestial_garden", + }, + // โ”€โ”€ Crystal Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Corridors of living crystal where divine knowledge has been stored in crystalline form โ€” some of it loud enough to hear if you stand still.", + durationSeconds: 180, + events: [ + { + effect: { amount: 1500, type: "prayers_gain" }, + id: "crystal_halls_resonance", + text: "A resonance cascade runs through the halls, and your disciples absorb it before it can dissipate.", + }, + { + effect: { fraction: 0.03, type: "disciple_loss" }, + id: "crystal_halls_shatter", + text: "Several disciples trigger a harmonic shatter event and are knocked back by the blast.", + }, + ], + id: "crystal_halls", + name: "The Crystal Halls", + possibleMaterials: [ + { materialId: "sanctum_shard", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "holy_ink", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_crystal_sanctum", + }, + { + description: "The sanctum's innermost chamber, where the oracle constructs reside in silent contemplation. Visitors are permitted but not encouraged.", + durationSeconds: 300, + events: [ + { + effect: { materialId: "oracle_lens_fragment", quantity: 1, type: "sacred_material_gain" }, + id: "oracle_chamber_fragment", + text: "An oracle construct drops a fragment of its primary lens without noticing. Your disciples collect it carefully.", + }, + { + effect: { amount: 5000, type: "prayers_gain" }, + id: "oracle_chamber_vision", + text: "One of your disciples receives a brief vision from the oracle. They return shaken but inspired.", + }, + ], + id: "oracle_chamber", + name: "The Oracle's Chamber", + possibleMaterials: [ + { materialId: "holy_ink", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "oracle_lens_fragment", maxQuantity: 1, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_crystal_sanctum", + }, + { + description: "A reading room where crystallised scripture lines the walls from floor to ceiling. The texts update themselves as new prayers are offered.", + durationSeconds: 240, + events: [ + { + effect: { amount: 8000, type: "prayers_gain" }, + id: "scripture_room_reading", + text: "Your disciples spend time reading. The scripture seems to read them back.", + }, + { + effect: { materialId: "sanctum_shard", quantity: 3, type: "sacred_material_gain" }, + id: "scripture_room_shed", + text: "A scripture panel sheds crystalline shards as its text is updated. Your disciples collect the discards.", + }, + ], + id: "scripture_room", + name: "The Scripture Room", + possibleMaterials: [ + { materialId: "sanctum_shard", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "holy_ink", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_crystal_sanctum", + }, + { + description: "The sanctum's bell tower, whose crystal bells ring only when a mortal somewhere achieves genuine enlightenment.", + durationSeconds: 420, + events: [ + { + effect: { amount: 25_000, type: "prayers_gain" }, + id: "bell_tower_chime", + text: "The bells chime โ€” somewhere, someone has understood. Your disciples feel the ripple of it.", + }, + { + effect: { materialId: "oracle_lens_fragment", quantity: 1, type: "sacred_material_gain" }, + id: "bell_tower_fragment", + text: "The bell tower's oldest crystal bell releases a shard at the peak of its resonance. Your disciples catch it mid-air.", + }, + ], + id: "bell_tower", + name: "The Bell Tower", + possibleMaterials: [ + { materialId: "holy_ink", maxQuantity: 4, minQuantity: 1, weight: 4 }, + { materialId: "oracle_lens_fragment", maxQuantity: 2, minQuantity: 1, weight: 2 }, + { materialId: "sanctum_shard", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_crystal_sanctum", + }, + // โ”€โ”€ Astral Cathedral โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The high rafters of the cathedral where seraphs rest between duties. The light here has weight and warmth.", + durationSeconds: 360, + events: [ + { + effect: { materialId: "seraph_feather", quantity: 1, type: "sacred_material_gain" }, + id: "seraph_roost_feather", + text: "A seraph sheds a feather during a stretching exercise, utterly unbothered by your disciples below.", + }, + { + effect: { amount: 25_000, type: "prayers_gain" }, + id: "seraph_roost_blessing", + text: "A passing seraph blesses your disciples without breaking stride. The energy of it lingers for hours.", + }, + ], + id: "seraph_roost", + name: "The Seraph Roost", + possibleMaterials: [ + { materialId: "seraph_feather", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "choir_essence", maxQuantity: 3, minQuantity: 1, weight: 4 }, + ], + zoneId: "goddess_astral_cathedral", + }, + { + description: "The cathedral's central nave, where the choir sings continuously and the resonance physically alters the space around it.", + durationSeconds: 540, + events: [ + { + effect: { amount: 100_000, type: "prayers_gain" }, + id: "astral_nave_chorus", + text: "Your disciples join the choir's refrain for one verse. The goddess takes note.", + }, + { + effect: { materialId: "astral_glass", quantity: 1, type: "sacred_material_gain" }, + id: "astral_nave_crystal", + text: "Where the choir's harmonics focus, astral glass forms spontaneously. A small piece breaks off cleanly.", + }, + ], + id: "astral_nave", + name: "The Astral Nave", + possibleMaterials: [ + { materialId: "choir_essence", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "astral_glass", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_astral_cathedral", + }, + { + description: "The cathedral's crypt, where past seraphs have left offerings โ€” and where the offerings have taken on a life of their own.", + durationSeconds: 480, + events: [ + { + effect: { amount: 75_000, type: "prayers_gain" }, + id: "crypt_offering_resonance", + text: "The ancient offerings resonate in your disciples' presence and release accumulated prayer energy.", + }, + { + effect: { fraction: 0.03, type: "disciple_loss" }, + id: "crypt_offering_guardian", + text: "A guardian of the crypt's oldest offerings challenges your disciples. Not all are quick enough to withdraw politely.", + }, + ], + id: "cathedral_crypt", + name: "The Cathedral Crypt", + possibleMaterials: [ + { materialId: "choir_essence", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "seraph_feather", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_astral_cathedral", + }, + { + description: "The soaring spire above the cathedral โ€” the highest point of any constructed divine structure, touching the boundary between the astral and the divine.", + durationSeconds: 720, + events: [ + { + effect: { amount: 300_000, type: "prayers_gain" }, + id: "cathedral_spire_elevation", + text: "At this height, your disciples' prayers travel farther than they ever have. The goddess hears every word.", + }, + { + effect: { materialId: "astral_glass", quantity: 2, type: "sacred_material_gain" }, + id: "cathedral_spire_formation", + text: "The spire's tip is in constant contact with astral currents. Your disciples scrape loose astral glass from its surface.", + }, + ], + id: "cathedral_spire", + name: "The Cathedral Spire", + possibleMaterials: [ + { materialId: "astral_glass", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "choir_essence", maxQuantity: 3, minQuantity: 2, weight: 3 }, + { materialId: "seraph_feather", maxQuantity: 1, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_astral_cathedral", + }, + // โ”€โ”€ Empyrean Citadel โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The citadel's weapon-forging district, where divine alloy is hammered into arms for the celestial host. The sound never stops.", + durationSeconds: 600, + events: [ + { + effect: { materialId: "empyrean_ore", quantity: 3, type: "sacred_material_gain" }, + id: "forge_district_ore", + text: "Your disciples find a cache of empyrean ore that fell behind a furnace and was forgotten.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "forge_district_heat", + text: "Several disciples venture too close to the divine furnaces and are forced to retreat.", + }, + ], + id: "forge_district", + name: "The Forge District", + possibleMaterials: [ + { materialId: "empyrean_ore", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "divine_alloy", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_empyrean_citadel", + }, + { + description: "The great hall where the champions of the citadel are recognised and their deeds recorded on walls that will outlast the universe.", + durationSeconds: 900, + events: [ + { + effect: { materialId: "celestial_medal", quantity: 1, type: "sacred_material_gain" }, + id: "champions_hall_medal", + text: "Your disciples find an unclaimed medal behind the Hall's oldest display case. The name on the back is illegible.", + }, + { + effect: { amount: 2_000_000_000, type: "prayers_gain" }, + id: "champions_hall_inspiration", + text: "Studying the deeds of the champions inspires your disciples to exceptional devotion.", + }, + ], + id: "champions_hall", + name: "The Champions Hall", + possibleMaterials: [ + { materialId: "divine_alloy", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "celestial_medal", maxQuantity: 1, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_empyrean_citadel", + }, + { + description: "The outer ramparts of the citadel, where sentinels have stood watch for millennia. The view from here encompasses all of creation.", + durationSeconds: 720, + events: [ + { + effect: { amount: 1_000_000_000, type: "prayers_gain" }, + id: "ramparts_vista", + text: "Your disciples spend time contemplating creation from the ramparts. The perspective is transformative.", + }, + { + effect: { materialId: "empyrean_ore", quantity: 2, type: "sacred_material_gain" }, + id: "ramparts_masonry", + text: "The citadel's masonry sheds empyrean ore fragments during the daily resonance cycle. Your disciples collect them.", + }, + ], + id: "outer_ramparts", + name: "The Outer Ramparts", + possibleMaterials: [ + { materialId: "empyrean_ore", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "divine_alloy", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_empyrean_citadel", + }, + { + description: "The citadel's war council chamber, where every major celestial engagement has been planned. The maps on the walls show conflicts that have not yet happened.", + durationSeconds: 1200, + events: [ + { + effect: { amount: 5_000_000_000, type: "prayers_gain" }, + id: "war_council_strategy", + text: "Your disciples study the future battle maps. Several return with a certainty they cannot explain.", + }, + { + effect: { materialId: "celestial_medal", quantity: 1, type: "sacred_material_gain" }, + id: "war_council_commendation", + text: "The war council votes to award your disciples a commendation medal for their courage in exploration.", + }, + ], + id: "war_council", + name: "The War Council", + possibleMaterials: [ + { materialId: "celestial_medal", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "divine_alloy", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "empyrean_ore", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_empyrean_citadel", + }, + // โ”€โ”€ Primordial Springs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The main basin of the primordial springs โ€” shallow enough to approach, deep enough to understand that you are standing in the source of everything.", + durationSeconds: 900, + events: [ + { + effect: { materialId: "creation_water", quantity: 3, type: "sacred_material_gain" }, + id: "springs_basin_water", + text: "Your disciples carefully collect water from the shallows. Each vial is slightly different.", + }, + { + effect: { amount: 500_000_000_000, type: "prayers_gain" }, + id: "springs_basin_overflow", + text: "A minor overflow event floods the basin's edges with creation energy. Your disciples absorb it instinctively.", + }, + ], + id: "springs_basin", + name: "The Springs Basin", + possibleMaterials: [ + { materialId: "creation_water", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "primordial_essence", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_primordial_springs", + }, + { + description: "The deepest accessible point of the springs โ€” where the creation energy runs so thick it has begun to crystallise.", + durationSeconds: 1800, + events: [ + { + effect: { materialId: "genesis_crystal", quantity: 1, type: "sacred_material_gain" }, + id: "genesis_pools_crystal", + text: "A genesis crystal forms spontaneously at your disciples' feet. They stand very still until it finishes.", + }, + { + effect: { fraction: 0.06, type: "disciple_loss" }, + id: "genesis_pools_overwhelm", + text: "The raw creation energy proves too intense for some disciples, who are displaced from the pools.", + }, + ], + id: "genesis_pools", + name: "The Genesis Pools", + possibleMaterials: [ + { materialId: "primordial_essence", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "genesis_crystal", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_primordial_springs", + }, + { + description: "A cascade where creation water falls from an impossible height before it reaches the basin โ€” catching the spray is considered a blessing.", + durationSeconds: 1200, + events: [ + { + effect: { amount: 1_000_000_000_000, type: "prayers_gain" }, + id: "creation_cascade_spray", + text: "Your disciples stand in the cascade's spray. They come back renewed in ways none of them can articulate.", + }, + { + effect: { materialId: "creation_water", quantity: 2, type: "sacred_material_gain" }, + id: "creation_cascade_collection", + text: "Your disciples position collection vessels at the cascade's base. The water fills them quickly.", + }, + ], + id: "creation_cascade", + name: "The Creation Cascade", + possibleMaterials: [ + { materialId: "creation_water", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "primordial_essence", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_primordial_springs", + }, + { + description: "An island in the springs' centre where nothing has been created yet โ€” pure potential, unformed, waiting. Disciples report feeling deeply uncomfortable and deeply at peace simultaneously.", + durationSeconds: 2400, + events: [ + { + effect: { materialId: "genesis_crystal", quantity: 2, type: "sacred_material_gain" }, + id: "unformed_isle_crystallisation", + text: "The unformed potential on the island begins to crystallise around your disciples. They bring a piece back.", + }, + { + effect: { fraction: 0.07, type: "disciple_loss" }, + id: "unformed_isle_dissolution", + text: "Several disciples are temporarily dissolved by the unformed potential and must be reconstituted at the basin's edge.", + }, + ], + id: "unformed_isle", + name: "The Unformed Isle", + possibleMaterials: [ + { materialId: "genesis_crystal", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "primordial_essence", maxQuantity: 3, minQuantity: 2, weight: 3 }, + { materialId: "creation_water", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_primordial_springs", + }, + // โ”€โ”€ Eternal Firmament โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "An observatory built into the firmament's outer edge โ€” the highest point from which the universe can be observed without leaving it.", + durationSeconds: 1800, + events: [ + { + effect: { materialId: "firmament_stone", quantity: 2, type: "sacred_material_gain" }, + id: "eternal_observatory_stone", + text: "Small fragments of firmament stone break loose as your disciples adjust the observatory's instruments.", + }, + { + effect: { amount: 1e16, type: "prayers_gain" }, + id: "eternal_observatory_sight", + text: "From this height, your disciples witness every prayer ever offered simultaneously. It is overwhelming and beautiful.", + }, + ], + id: "eternal_observatory", + name: "The Eternal Observatory", + possibleMaterials: [ + { materialId: "firmament_stone", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "divine_light_shard", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_eternal_firmament", + }, + { + description: "The firmament's great archive โ€” where every divine event, every prayer, every moment of faith is recorded in materials that cannot be destroyed.", + durationSeconds: 3600, + events: [ + { + effect: { materialId: "eternity_fragment", quantity: 1, type: "sacred_material_gain" }, + id: "divine_archive_fragment", + text: "A shelf in the archive collapses slightly, releasing an eternity fragment that was wedged behind it. Your disciples catch it.", + }, + { + effect: { materialId: "divine_light_shard", quantity: 2, type: "sacred_material_gain" }, + id: "divine_archive_light", + text: "Several divine light shards break free from an ancient display case when the archive resonates with a new prayer.", + }, + ], + id: "divine_archive", + name: "The Divine Archive", + possibleMaterials: [ + { materialId: "divine_light_shard", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "eternity_fragment", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_eternal_firmament", + }, + { + description: "The firmament's boundary wall โ€” where the divine realm ends and the void begins. Looking over the edge is permitted, but not recommended.", + durationSeconds: 2700, + events: [ + { + effect: { amount: 1e18, type: "prayers_gain" }, + id: "boundary_wall_edge", + text: "Your disciples peer over the boundary. On the other side of the void, something very far away notices them back.", + }, + { + effect: { materialId: "firmament_stone", quantity: 3, type: "sacred_material_gain" }, + id: "boundary_wall_erosion", + text: "The perpetual wind from the void erodes firmament stone chips from the wall's outer face. Your disciples collect them.", + }, + ], + id: "boundary_wall", + name: "The Boundary Wall", + possibleMaterials: [ + { materialId: "firmament_stone", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "divine_light_shard", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_eternal_firmament", + }, + { + description: "A lighthouse built at the firmament's highest point to guide returning divine beings home. Its light has not gone out in recorded history.", + durationSeconds: 4800, + events: [ + { + effect: { materialId: "eternity_fragment", quantity: 2, type: "sacred_material_gain" }, + id: "eternal_lighthouse_fragments", + text: "The lighthouse's beam cracks loose eternity fragments from the firmament wall with each rotation. Your disciples collect the debris.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "eternal_lighthouse_disorientation", + text: "The lighthouse's light disorients several disciples who look directly at it. They lose their way temporarily.", + }, + ], + id: "eternal_lighthouse", + name: "The Eternal Lighthouse", + possibleMaterials: [ + { materialId: "eternity_fragment", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "divine_light_shard", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "firmament_stone", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_eternal_firmament", + }, + // โ”€โ”€ Sacred Grove โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The grove's outermost ring, where ancient trees have grown together into a living canopy that screens out all light save the divine.", + durationSeconds: 3600, + events: [ + { + effect: { amount: 1e20, type: "prayers_gain" }, + id: "canopy_ring_prayers", + text: "The living canopy focuses your disciples' prayers into a single column of devotion that reaches the goddess directly.", + }, + { + effect: { materialId: "grove_resin", quantity: 3, type: "sacred_material_gain" }, + id: "canopy_ring_resin", + text: "The oldest trees in the ring release resin in response to your disciples' presence. It pools at the roots.", + }, + ], + id: "canopy_ring", + name: "The Canopy Ring", + possibleMaterials: [ + { materialId: "grove_resin", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "luminous_leaf", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_sacred_grove", + }, + { + description: "A clearing deep in the grove where divine light falls in columns and the ground glows softly with accumulated radiance.", + durationSeconds: 5400, + events: [ + { + effect: { materialId: "luminous_leaf", quantity: 2, type: "sacred_material_gain" }, + id: "radiant_clearing_leaves", + text: "Leaves drift down from the canopy, each one glowing. Your disciples catch them before they touch the ground.", + }, + { + effect: { amount: 1e22, type: "prayers_gain" }, + id: "radiant_clearing_meditation", + text: "Your disciples meditate in the light columns. The prayers that emerge are the deepest they have ever offered.", + }, + ], + id: "radiant_clearing", + name: "The Radiant Clearing", + possibleMaterials: [ + { materialId: "luminous_leaf", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "grove_resin", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_sacred_grove", + }, + { + description: "The base of the grove's elder tree โ€” a tree so old its roots have grown into the foundations of divinity itself.", + durationSeconds: 7200, + events: [ + { + effect: { materialId: "sacred_heartwood", quantity: 1, type: "sacred_material_gain" }, + id: "elder_roots_heartwood", + text: "A fragment of heartwood breaks from an exposed root naturally. Your disciples treat it with the reverence it deserves.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "elder_roots_rejection", + text: "The elder tree's roots test the worthiness of your disciples. Several are gently but firmly expelled from the area.", + }, + ], + id: "elder_roots", + name: "The Elder Roots", + possibleMaterials: [ + { materialId: "sacred_heartwood", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "grove_resin", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "luminous_leaf", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_sacred_grove", + }, + { + description: "The grove's summit โ€” where the eldest trees have grown so tall their crowns pierce the veil and exist in two realms simultaneously.", + durationSeconds: 10_800, + events: [ + { + effect: { materialId: "sacred_heartwood", quantity: 2, type: "sacred_material_gain" }, + id: "grove_summit_canopy", + text: "The crowns of the summit trees shed heartwood fragments where they pass through the veil. Your disciples collect the sacred debris.", + }, + { + effect: { amount: 1e25, type: "prayers_gain" }, + id: "grove_summit_transcendence", + text: "At the summit, your disciples briefly exist in both realms. Their prayers travel farther than any that have come before.", + }, + ], + id: "grove_summit", + name: "The Grove Summit", + possibleMaterials: [ + { materialId: "sacred_heartwood", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "luminous_leaf", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "grove_resin", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_sacred_grove", + }, + // โ”€โ”€ Luminous Expanse โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The shore of the luminous expanse โ€” where solid ground meets the sea of light and the boundary shimmers with captured radiance.", + durationSeconds: 5400, + events: [ + { + effect: { materialId: "captured_radiance", quantity: 3, type: "sacred_material_gain" }, + id: "luminous_shore_collection", + text: "Waves of light lap at the shore, depositing captured radiance like sea foam. Your disciples scoop it into vessels.", + }, + { + effect: { amount: 1e24, type: "prayers_gain" }, + id: "luminous_shore_reflection", + text: "The reflected light shows your disciples' prayers magnified back at them. The clarity is profound.", + }, + ], + id: "luminous_shore", + name: "The Luminous Shore", + possibleMaterials: [ + { materialId: "captured_radiance", maxQuantity: 5, minQuantity: 3, weight: 5 }, + { materialId: "radiance_pool", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_luminous_expanse", + }, + { + description: "A deep pool in the expanse where radiance has collected over eons into a liquid form. Wading in it is an act of faith.", + durationSeconds: 7200, + events: [ + { + effect: { materialId: "radiance_pool", quantity: 2, type: "sacred_material_gain" }, + id: "deep_pool_radiance", + text: "Your disciples wade into the pool and emerge with radiance clinging to them in liquid form. It does not evaporate.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "deep_pool_immersion", + text: "Several disciples wade too deep and are temporarily absorbed by the radiance. They return... unchanged but thoughtful.", + }, + ], + id: "deep_pool", + name: "The Deep Pool", + possibleMaterials: [ + { materialId: "radiance_pool", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "captured_radiance", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_luminous_expanse", + }, + { + description: "The absolute centre of the luminous expanse โ€” where all the light originates. The core pulses rhythmically, like breathing.", + durationSeconds: 10_800, + events: [ + { + effect: { materialId: "light_core", quantity: 1, type: "sacred_material_gain" }, + id: "radiance_core_fragment", + text: "The breathing pulse of the core releases a fragment at its apex. Your disciples collect it before it can re-integrate.", + }, + { + effect: { amount: 1e27, type: "prayers_gain" }, + id: "radiance_core_pulse", + text: "Your disciples synchronise their prayers with the core's breathing. For one magnificent moment, they breathe with divinity.", + }, + ], + id: "radiance_core", + name: "The Radiance Core", + possibleMaterials: [ + { materialId: "light_core", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "radiance_pool", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "captured_radiance", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_luminous_expanse", + }, + { + description: "Columns of pure light rising from the expanse's floor to its ceiling โ€” each one a prayer that became so strong it solidified.", + durationSeconds: 14_400, + events: [ + { + effect: { materialId: "light_core", quantity: 2, type: "sacred_material_gain" }, + id: "prayer_columns_cores", + text: "Two prayer columns complete their ascension and release their light cores as they dissolve into the expanse.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "prayer_columns_overwhelm", + text: "Several disciples stand too close when a new column forms. The instantaneous solidification is disorienting.", + }, + ], + id: "prayer_columns", + name: "The Prayer Columns", + possibleMaterials: [ + { materialId: "light_core", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "radiance_pool", maxQuantity: 3, minQuantity: 2, weight: 3 }, + { materialId: "captured_radiance", maxQuantity: 5, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_luminous_expanse", + }, + // โ”€โ”€ Heavenly Forge โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The antechamber of the heavenly forge โ€” where materials are prepared and disciples learn what they are about to witness.", + durationSeconds: 7200, + events: [ + { + effect: { materialId: "forge_scale", quantity: 3, type: "sacred_material_gain" }, + id: "forge_antechamber_scales", + text: "The celestial creatures awaiting processing shed scales in the warm antechamber. Your disciples collect them politely.", + }, + { + effect: { amount: 1e28, type: "prayers_gain" }, + id: "forge_antechamber_preparation", + text: "Preparing to witness the forge requires prayer. Your disciples offer theirs together.", + }, + ], + id: "forge_antechamber", + name: "The Forge Antechamber", + possibleMaterials: [ + { materialId: "forge_scale", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "divine_slag", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_heavenly_forge", + }, + { + description: "The forge's central burning chamber โ€” divine fire so hot it refines the soul of whatever is placed within it.", + durationSeconds: 10_800, + events: [ + { + effect: { materialId: "divine_slag", quantity: 2, type: "sacred_material_gain" }, + id: "burning_chamber_slag", + text: "The refinement process ejects divine slag from the burning chamber's vents. Your disciples gather it from the collection trays.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "burning_chamber_heat", + text: "Several disciples underestimate the radiated heat and must be carried out by the others.", + }, + ], + id: "burning_chamber", + name: "The Burning Chamber", + possibleMaterials: [ + { materialId: "divine_slag", maxQuantity: 4, minQuantity: 2, weight: 5 }, + { materialId: "forge_scale", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_heavenly_forge", + }, + { + description: "The cooling vault where newly forged divine items rest โ€” the temperature here is merely scorching, and the rejected gems settle here.", + durationSeconds: 14_400, + events: [ + { + effect: { materialId: "forge_gem", quantity: 1, type: "sacred_material_gain" }, + id: "cooling_vault_gem", + text: "A forge gem rolls from a cooling rack to the floor. Your disciples collect it before it can roll somewhere unreachable.", + }, + { + effect: { amount: 1e30, type: "prayers_gain" }, + id: "cooling_vault_presence", + text: "The presence of so many completed divine items inspires your disciples to fervent prayer.", + }, + ], + id: "cooling_vault", + name: "The Cooling Vault", + possibleMaterials: [ + { materialId: "forge_gem", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "divine_slag", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "forge_scale", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_heavenly_forge", + }, + { + description: "The forge master's sanctum โ€” a private workshop where the most powerful divine weapons have been conceived. The blueprints on the walls are weapons that have never needed to be made.", + durationSeconds: 18_000, + events: [ + { + effect: { materialId: "forge_gem", quantity: 2, type: "sacred_material_gain" }, + id: "forge_master_sanctum_gems", + text: "The forge master has left several rejected prototype gems in a drawer marked 'insufficient.' Your disciples beg to differ.", + }, + { + effect: { fraction: 0.06, type: "disciple_loss" }, + id: "forge_master_sanctum_test", + text: "The forge master tests your disciples' metallurgical knowledge. Several fail and are asked to study more before returning.", + }, + ], + id: "forge_master_sanctum", + name: "The Forge Master's Sanctum", + possibleMaterials: [ + { materialId: "forge_gem", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "divine_slag", maxQuantity: 3, minQuantity: 2, weight: 3 }, + { materialId: "forge_scale", maxQuantity: 4, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_heavenly_forge", + }, + // โ”€โ”€ Oracle Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The oracle sanctum's entrance hall โ€” lined with prophecies that have already come true, displayed as a reminder of what is possible.", + durationSeconds: 10_800, + events: [ + { + effect: { materialId: "vision_residue", quantity: 3, type: "sacred_material_gain" }, + id: "prophecy_hall_residue", + text: "The fulfilled prophecy displays shed vision residue where they vibrate in sympathetic resonance. Your disciples collect it.", + }, + { + effect: { amount: 1e31, type: "prayers_gain" }, + id: "prophecy_hall_reflection", + text: "Reading confirmed prophecies fills your disciples with awe at the scale of divine foresight.", + }, + ], + id: "prophecy_hall", + name: "The Prophecy Hall", + possibleMaterials: [ + { materialId: "vision_residue", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "prophecy_crystal", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_oracle_sanctum", + }, + { + description: "The sanctum's vision pool โ€” where oracles submerge themselves to receive prophecy. The water carries the echo of every vision ever seen here.", + durationSeconds: 14_400, + events: [ + { + effect: { materialId: "prophecy_crystal", quantity: 2, type: "sacred_material_gain" }, + id: "vision_pool_crystals", + text: "Prophecy crystals drift to the pool's surface following a vision session. Your disciples collect them respectfully.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "vision_pool_intrusion", + text: "Several disciples peer into the vision pool without preparation. The echoes they see are not meant for uninitiated eyes.", + }, + ], + id: "vision_pool", + name: "The Vision Pool", + possibleMaterials: [ + { materialId: "prophecy_crystal", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "vision_residue", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_oracle_sanctum", + }, + { + description: "The sanctum's sealed vault where unfulfilled prophecies are kept โ€” each one waiting for its moment. The vault hums with potential.", + durationSeconds: 18_000, + events: [ + { + effect: { materialId: "fate_shard", quantity: 1, type: "sacred_material_gain" }, + id: "prophecy_vault_shard", + text: "An unfulfilled prophecy begins its activation sequence early โ€” a fate shard breaks off in the preparation. Your disciples secure it.", + }, + { + effect: { amount: 1e33, type: "prayers_gain" }, + id: "prophecy_vault_revelation", + text: "The vault shares one sealed prophecy with your disciples. They return unable to speak of it, but visibly transformed.", + }, + ], + id: "prophecy_vault", + name: "The Prophecy Vault", + possibleMaterials: [ + { materialId: "fate_shard", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "prophecy_crystal", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "vision_residue", maxQuantity: 3, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_oracle_sanctum", + }, + { + description: "The highest oracle tower โ€” where the most powerful seers work, receiving prophecy directly from the goddess without the pool as an intermediary.", + durationSeconds: 25_200, + events: [ + { + effect: { materialId: "fate_shard", quantity: 2, type: "sacred_material_gain" }, + id: "oracle_tower_shards", + text: "The tower's oracles shed fate shards during their most intense visions. Several fall to the floor unnoticed.", + }, + { + effect: { fraction: 0.06, type: "disciple_loss" }, + id: "oracle_tower_broadcast", + text: "An oracle broadcasts an involuntary vision. Several disciples receive it unprepared and need time to recover.", + }, + ], + id: "oracle_tower", + name: "The Oracle Tower", + possibleMaterials: [ + { materialId: "fate_shard", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "prophecy_crystal", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "vision_residue", maxQuantity: 3, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_oracle_sanctum", + }, + // โ”€โ”€ Seraph's Nest โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The outer reaches of the seraph's nest โ€” where young seraphs practice flight and lose feathers at a prodigious rate.", + durationSeconds: 14_400, + events: [ + { + effect: { materialId: "seraph_down", quantity: 4, type: "sacred_material_gain" }, + id: "nesting_grounds_down", + text: "Young seraphs practicing their first flights leave clouds of down in their wake. Your disciples wade through it happily.", + }, + { + effect: { amount: 1e33, type: "prayers_gain" }, + id: "nesting_grounds_blessing", + text: "A senior seraph observing the young ones notices your disciples and offers a blessing for their patience.", + }, + ], + id: "nesting_grounds", + name: "The Nesting Grounds", + possibleMaterials: [ + { materialId: "seraph_down", maxQuantity: 6, minQuantity: 3, weight: 5 }, + { materialId: "seraph_primary", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_seraphs_nest", + }, + { + description: "The nest's flight path โ€” a long corridor of open sky where seraphs travel at full speed. Standing on the observation platform is exhilarating.", + durationSeconds: 18_000, + events: [ + { + effect: { materialId: "seraph_primary", quantity: 2, type: "sacred_material_gain" }, + id: "flight_path_feathers", + text: "Seraphs travelling at full speed occasionally shed primary feathers mid-flight. Your disciples track where they land.", + }, + { + effect: { fraction: 0.03, type: "disciple_loss" }, + id: "flight_path_turbulence", + text: "Several disciples are caught by the turbulence of a seraph banking hard. They are blown some considerable distance.", + }, + ], + id: "flight_path", + name: "The Flight Path", + possibleMaterials: [ + { materialId: "seraph_primary", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "seraph_down", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_seraphs_nest", + }, + { + description: "The inner nest where the eldest seraphs rest โ€” so old they have transcended their original purpose and exist now as pure radiant being.", + durationSeconds: 25_200, + events: [ + { + effect: { materialId: "ascended_quill", quantity: 1, type: "sacred_material_gain" }, + id: "elder_nest_quill", + text: "An elder seraph completes another ascension and leaves its hollow quill behind, no longer needing it.", + }, + { + effect: { amount: 1e36, type: "prayers_gain" }, + id: "elder_nest_proximity", + text: "Simply being in the presence of the elder seraphs elevates your disciples' prayers beyond what they believed possible.", + }, + ], + id: "elder_nest", + name: "The Elder Nest", + possibleMaterials: [ + { materialId: "ascended_quill", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "seraph_primary", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "seraph_down", maxQuantity: 4, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_seraphs_nest", + }, + { + description: "The topmost pinnacle of the seraph's nest โ€” where newly ascended seraphs make their first flight into the infinite divine sky.", + durationSeconds: 32_400, + events: [ + { + effect: { materialId: "ascended_quill", quantity: 2, type: "sacred_material_gain" }, + id: "ascension_pinnacle_quills", + text: "Newly ascended seraphs shed their mortal quills at the pinnacle as they complete the transition. Two fall at your disciples' feet.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "ascension_pinnacle_rapture", + text: "Witnessing an ascension is more than several disciples can handle. They are found sitting in a daze at the base of the pinnacle.", + }, + ], + id: "ascension_pinnacle", + name: "The Ascension Pinnacle", + possibleMaterials: [ + { materialId: "ascended_quill", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "seraph_primary", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "seraph_down", maxQuantity: 3, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_seraphs_nest", + }, + // โ”€โ”€ Divine Archive โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The archive's reading room โ€” open to approved disciples, lined with texts that contain everything except what you happen to be looking for.", + durationSeconds: 18_000, + events: [ + { + effect: { materialId: "celestial_vellum", quantity: 4, type: "sacred_material_gain" }, + id: "reading_room_vellum", + text: "Retired texts are disbound and their vellum made available. Your disciples request several sheets.", + }, + { + effect: { amount: 1e36, type: "prayers_gain" }, + id: "reading_room_knowledge", + text: "Your disciples read deeply. When they emerge, they pray more precisely than ever before.", + }, + ], + id: "reading_room", + name: "The Reading Room", + possibleMaterials: [ + { materialId: "celestial_vellum", maxQuantity: 6, minQuantity: 3, weight: 5 }, + { materialId: "archive_seal", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_divine_archive", + }, + { + description: "The archive's filing chambers โ€” where seals are applied to documents and every record is formally entered into the divine record.", + durationSeconds: 21_600, + events: [ + { + effect: { materialId: "archive_seal", quantity: 2, type: "sacred_material_gain" }, + id: "filing_chambers_seal", + text: "A batch of archive seals is found to be slightly defective and is replaced. Your disciples are given the defects, which still work perfectly.", + }, + { + effect: { fraction: 0.03, type: "disciple_loss" }, + id: "filing_chambers_misfiling", + text: "Several disciples accidentally misfile themselves into a restricted section and must wait to be retrieved.", + }, + ], + id: "filing_chambers", + name: "The Filing Chambers", + possibleMaterials: [ + { materialId: "archive_seal", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "celestial_vellum", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_divine_archive", + }, + { + description: "The restricted stacks โ€” where texts too dangerous, too sacred, or too contradictory to be read by casual visitors are stored.", + durationSeconds: 28_800, + events: [ + { + effect: { materialId: "living_codex_page", quantity: 1, type: "sacred_material_gain" }, + id: "restricted_stacks_page", + text: "One of the restricted texts objects to its classification and attempts to leave on its own. Your disciples intercept a page.", + }, + { + effect: { amount: 1e39, type: "prayers_gain" }, + id: "restricted_stacks_revelation", + text: "A restricted text allows your disciples to read one sentence. That sentence is enough.", + }, + ], + id: "restricted_stacks", + name: "The Restricted Stacks", + possibleMaterials: [ + { materialId: "living_codex_page", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "archive_seal", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "celestial_vellum", maxQuantity: 3, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_divine_archive", + }, + { + description: "The archive's inner sanctum โ€” where the most fundamental records of existence are kept. The room is aware of visitors and takes notes.", + durationSeconds: 36_000, + events: [ + { + effect: { materialId: "living_codex_page", quantity: 2, type: "sacred_material_gain" }, + id: "archive_inner_sanctum_pages", + text: "The inner sanctum drafts a summary of your disciples' visit for its own records. They are given a copy.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "archive_inner_sanctum_scrutiny", + text: "The archive scrutinises several disciples too closely. They are found wanting in some undefined way and asked to leave.", + }, + ], + id: "archive_inner_sanctum", + name: "The Archive Inner Sanctum", + possibleMaterials: [ + { materialId: "living_codex_page", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "archive_seal", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "celestial_vellum", maxQuantity: 3, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_divine_archive", + }, + // โ”€โ”€ Consecrated Depths โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The upper consecrated chambers โ€” where generations of devotion have saturated the stone so thoroughly it generates warmth without fire.", + durationSeconds: 21_600, + events: [ + { + effect: { materialId: "consecrated_stone", quantity: 3, type: "sacred_material_gain" }, + id: "upper_chambers_stone", + text: "The warming stone flakes at its surface as it continues to bless its surroundings. Your disciples collect the flakes.", + }, + { + effect: { amount: 1e39, type: "prayers_gain" }, + id: "upper_chambers_warmth", + text: "Your disciples pray in the warm chambers. The accumulated devotion of all who came before joins in.", + }, + ], + id: "upper_chambers", + name: "The Upper Chambers", + possibleMaterials: [ + { materialId: "consecrated_stone", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "depth_blessing", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_consecrated_depths", + }, + { + description: "The sacred springs of the consecrated depths โ€” underground water that has absorbed so much blessing it produces light in complete darkness.", + durationSeconds: 28_800, + events: [ + { + effect: { materialId: "depth_blessing", quantity: 3, type: "sacred_material_gain" }, + id: "sacred_springs_depth_blessing", + text: "Your disciples collect spring water. Each vessel glows softly as it fills.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "sacred_springs_overflow", + text: "The springs surge unexpectedly. Several disciples are caught in the overflow and swept to the upper passages.", + }, + ], + id: "sacred_springs", + name: "The Sacred Springs", + possibleMaterials: [ + { materialId: "depth_blessing", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "consecrated_stone", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_consecrated_depths", + }, + { + description: "The abyssal chamber โ€” the deepest point of the consecrated depths, where gem formations grow in complete darkness fed by divine groundwater.", + durationSeconds: 36_000, + events: [ + { + effect: { materialId: "abyssal_gem", quantity: 1, type: "sacred_material_gain" }, + id: "abyssal_chamber_gem", + text: "Your disciples locate a recently formed abyssal gem in an untouched geode. They extract it with appropriate reverence.", + }, + { + effect: { amount: 1e42, type: "prayers_gain" }, + id: "abyssal_chamber_resonance", + text: "The abyssal chamber resonates with your disciples' prayers in a frequency that has not been heard here before.", + }, + ], + id: "abyssal_chamber", + name: "The Abyssal Chamber", + possibleMaterials: [ + { materialId: "abyssal_gem", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "depth_blessing", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "consecrated_stone", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_consecrated_depths", + }, + { + description: "The heart of the consecrated depths โ€” where the first consecration rite was performed, and where all subsequent rites draw their power from.", + durationSeconds: 46_800, + events: [ + { + effect: { materialId: "abyssal_gem", quantity: 2, type: "sacred_material_gain" }, + id: "consecration_heart_gems", + text: "The original consecration site continues to generate abyssal gems from pure divine blessing. Your disciples find two.", + }, + { + effect: { fraction: 0.06, type: "disciple_loss" }, + id: "consecration_heart_trial", + text: "The heart tests every visitor's devotion directly. Several disciples are judged and found to need more growth.", + }, + ], + id: "consecration_heart", + name: "The Consecration Heart", + possibleMaterials: [ + { materialId: "abyssal_gem", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "consecrated_stone", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "depth_blessing", maxQuantity: 3, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_consecrated_depths", + }, + // โ”€โ”€ Astral Confluence โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The confluence's outer streams โ€” where astral currents from different zones first meet and begin their complex negotiation of coexistence.", + durationSeconds: 28_800, + events: [ + { + effect: { materialId: "confluence_shard", quantity: 3, type: "sacred_material_gain" }, + id: "outer_streams_shards", + text: "Where two streams meet, they generate harmonic shards at the intersection point. Your disciples collect the debris.", + }, + { + effect: { amount: 1e42, type: "prayers_gain" }, + id: "outer_streams_harmonics", + text: "Your disciples pray at the stream junction. The converging astral energy amplifies their devotion dramatically.", + }, + ], + id: "outer_streams", + name: "The Outer Streams", + possibleMaterials: [ + { materialId: "confluence_shard", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "astral_harmonic", maxQuantity: 2, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_astral_confluence", + }, + { + description: "The harmonic bridge โ€” a structure built where two major astral streams run parallel, bridging them for easier transit.", + durationSeconds: 36_000, + events: [ + { + effect: { materialId: "astral_harmonic", quantity: 2, type: "sacred_material_gain" }, + id: "harmonic_bridge_resonance", + text: "The bridge vibrates in the streams' shared harmonic. Your disciples capture two harmonics in resonant vessels.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "harmonic_bridge_crossing", + text: "Several disciples attempt to cross the bridge during a harmonic surge. They end up somewhere else entirely.", + }, + ], + id: "harmonic_bridge", + name: "The Harmonic Bridge", + possibleMaterials: [ + { materialId: "astral_harmonic", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "confluence_shard", maxQuantity: 3, minQuantity: 1, weight: 4 }, + ], + zoneId: "goddess_astral_confluence", + }, + { + description: "The confluence point โ€” where seven astral streams meet simultaneously and the combined energy forms something that has no name in any divine language.", + durationSeconds: 50_400, + events: [ + { + effect: { materialId: "convergence_node", quantity: 1, type: "sacred_material_gain" }, + id: "confluence_point_node", + text: "The seven streams briefly achieve perfect alignment. A convergence node forms and stabilises before your disciples catch it.", + }, + { + effect: { amount: 1e45, type: "prayers_gain" }, + id: "confluence_point_alignment", + text: "Your disciples pray at the exact moment of confluence. Seven streams carry their prayer in seven directions at once.", + }, + ], + id: "confluence_point", + name: "The Confluence Point", + possibleMaterials: [ + { materialId: "convergence_node", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "astral_harmonic", maxQuantity: 3, minQuantity: 2, weight: 4 }, + { materialId: "confluence_shard", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_astral_confluence", + }, + { + description: "The still eye at the confluence's centre โ€” where paradoxically the seven streams produce complete stillness. Nothing moves here. Everything is possible.", + durationSeconds: 64_800, + events: [ + { + effect: { materialId: "convergence_node", quantity: 2, type: "sacred_material_gain" }, + id: "still_eye_nodes", + text: "In the stillness, convergence nodes form slowly and completely. Your disciples collect two before the streams shift.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "still_eye_unmooring", + text: "Several disciples remain in the still eye too long and become temporarily untethered from their sense of direction.", + }, + ], + id: "still_eye", + name: "The Still Eye", + possibleMaterials: [ + { materialId: "convergence_node", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "astral_harmonic", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "confluence_shard", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_astral_confluence", + }, + // โ”€โ”€ Celestial Throne โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The throne room's antechamber โ€” where petitioners wait to be heard and the air is thick with suppressed hope.", + durationSeconds: 36_000, + events: [ + { + effect: { materialId: "throne_gold_leaf", quantity: 3, type: "sacred_material_gain" }, + id: "throne_antechamber_leaves", + text: "Gold leaf settles from the throne room's updrafts like snow. Your disciples collect what drifts to the antechamber floor.", + }, + { + effect: { amount: 1e45, type: "prayers_gain" }, + id: "throne_antechamber_petition", + text: "Your disciples join the queue of petitioners. When their turn comes, the throne room door opens. That is enough.", + }, + ], + id: "throne_antechamber", + name: "The Throne Antechamber", + possibleMaterials: [ + { materialId: "throne_gold_leaf", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "sovereignty_gem", maxQuantity: 1, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_celestial_throne", + }, + { + description: "The throne room's gallery โ€” where divine decisions are witnessed and the significance of each ruling is carved into the gallery walls in gold.", + durationSeconds: 50_400, + events: [ + { + effect: { materialId: "sovereignty_gem", quantity: 1, type: "sacred_material_gain" }, + id: "throne_gallery_gem", + text: "A sovereignty gem falls from the gallery's most recent carving during the inscription process. Your disciples catch it.", + }, + { + effect: { amount: 1e48, type: "prayers_gain" }, + id: "throne_gallery_witnessing", + text: "Your disciples witness a divine ruling from the gallery. They understand something about justice they did not before.", + }, + ], + id: "throne_gallery", + name: "The Throne Gallery", + possibleMaterials: [ + { materialId: "sovereignty_gem", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "throne_gold_leaf", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_celestial_throne", + }, + { + description: "The throne room itself โ€” the seat of divine authority, where the goddess makes her will known. Visitors are rare and never forget it.", + durationSeconds: 72_000, + events: [ + { + effect: { materialId: "crown_fragment", quantity: 1, type: "sacred_material_gain" }, + id: "throne_room_fragment", + text: "As the goddess renders a particularly weighty decision, a fragment of the crown breaks free. It lands at your disciples' feet.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "throne_room_presence", + text: "The direct presence of the goddess is more than several disciples can bear. They are gently removed by attendants.", + }, + ], + id: "throne_room", + name: "The Throne Room", + possibleMaterials: [ + { materialId: "crown_fragment", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "sovereignty_gem", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "throne_gold_leaf", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_celestial_throne", + }, + { + description: "The private garden behind the celestial throne โ€” where the goddess retreats between audiences, and where all decisions that will be made have already been decided.", + durationSeconds: 90_000, + events: [ + { + effect: { materialId: "crown_fragment", quantity: 2, type: "sacred_material_gain" }, + id: "private_garden_fragments", + text: "The goddess has set her crown aside in the garden and two fragments rest in the grass. Your disciples collect them before returning.", + }, + { + effect: { amount: 1e51, type: "prayers_gain" }, + id: "private_garden_presence", + text: "Your disciples walk in the goddess's private garden. She does not stop them. The prayers that follow are beyond counting.", + }, + ], + id: "private_garden", + name: "The Private Garden", + possibleMaterials: [ + { materialId: "crown_fragment", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "sovereignty_gem", maxQuantity: 3, minQuantity: 1, weight: 3 }, + { materialId: "throne_gold_leaf", maxQuantity: 3, minQuantity: 2, weight: 2 }, + ], + zoneId: "goddess_celestial_throne", + }, + // โ”€โ”€ Infinite Choir โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The outer choir stalls โ€” where the newest members of the infinite choir learn the oldest songs. Every mistake is a new prayer.", + durationSeconds: 50_400, + events: [ + { + effect: { materialId: "choir_note", quantity: 3, type: "sacred_material_gain" }, + id: "outer_stalls_notes", + text: "Practice notes crystallise and fall when a novice chorister hits an unexpected harmony. Your disciples collect the shards.", + }, + { + effect: { amount: 1e51, type: "prayers_gain" }, + id: "outer_stalls_participation", + text: "Your disciples are invited to join a practice session. They add their voices to the infinite song.", + }, + ], + id: "outer_stalls", + name: "The Outer Stalls", + possibleMaterials: [ + { materialId: "choir_note", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "divine_resonance", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_infinite_choir", + }, + { + description: "The resonance chamber โ€” where the choir's harmonics are amplified and directed. The walls physically vibrate with accumulated song.", + durationSeconds: 64_800, + events: [ + { + effect: { materialId: "divine_resonance", quantity: 2, type: "sacred_material_gain" }, + id: "resonance_chamber_capture", + text: "A peak resonance event crystallises two divine resonances against the chamber wall. Your disciples pry them loose carefully.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "resonance_chamber_overwelm", + text: "The resonance at peak intensity is physically overwhelming. Several disciples are knocked off their feet.", + }, + ], + id: "resonance_chamber", + name: "The Resonance Chamber", + possibleMaterials: [ + { materialId: "divine_resonance", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "choir_note", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_infinite_choir", + }, + { + description: "The sacred chord vault โ€” where the fundamental harmonics of existence are preserved in crystalline form and protected from degradation.", + durationSeconds: 79_200, + events: [ + { + effect: { materialId: "sacred_chord", quantity: 1, type: "sacred_material_gain" }, + id: "chord_vault_crystallisation", + text: "A new sacred chord crystallises in the vault โ€” the fundamental frequency of a newly completed star. Your disciples collect it.", + }, + { + effect: { amount: 1e54, type: "prayers_gain" }, + id: "chord_vault_listening", + text: "Your disciples listen to the vault's oldest chord. They understand something about the nature of existence that cannot be put into words.", + }, + ], + id: "chord_vault", + name: "The Chord Vault", + possibleMaterials: [ + { materialId: "sacred_chord", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "divine_resonance", maxQuantity: 3, minQuantity: 2, weight: 4 }, + { materialId: "choir_note", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_infinite_choir", + }, + { + description: "The conductor's podium at the infinite choir's centre โ€” from here, every voice in the infinite song can be heard and directed. The conductor has never stopped.", + durationSeconds: 97_200, + events: [ + { + effect: { materialId: "sacred_chord", quantity: 2, type: "sacred_material_gain" }, + id: "conductors_podium_chords", + text: "The conductor signals two new sacred chords into being. They crystallise at the podium's edge and your disciples are permitted to take them.", + }, + { + effect: { fraction: 0.06, type: "disciple_loss" }, + id: "conductors_podium_crescendo", + text: "The conductor calls for a crescendo. Several disciples, caught in the swell, lose themselves briefly in the infinite music.", + }, + ], + id: "conductors_podium", + name: "The Conductor's Podium", + possibleMaterials: [ + { materialId: "sacred_chord", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "divine_resonance", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "choir_note", maxQuantity: 3, minQuantity: 2, weight: 2 }, + ], + zoneId: "goddess_infinite_choir", + }, + // โ”€โ”€ The Veil โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The veil's outer face โ€” where the divine realm ends in a shimmering boundary that is beautiful from this side and, reportedly, equally beautiful from the other.", + durationSeconds: 64_800, + events: [ + { + effect: { materialId: "veil_thread", quantity: 3, type: "sacred_material_gain" }, + id: "veil_outer_face_threads", + text: "The veil sheds threads where it has worn thin. Your disciples collect them before they dissolve.", + }, + { + effect: { amount: 1e54, type: "prayers_gain" }, + id: "veil_outer_face_contemplation", + text: "Your disciples contemplate the boundary between all that is known and all that is not. Their prayers carry that weight.", + }, + ], + id: "veil_outer_face", + name: "The Veil's Outer Face", + possibleMaterials: [ + { materialId: "veil_thread", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "liminal_essence", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_veil", + }, + { + description: "The liminal space within the veil itself โ€” where nothing is fully either side, and everything exists in a state of permanent becoming.", + durationSeconds: 86_400, + events: [ + { + effect: { materialId: "liminal_essence", quantity: 2, type: "sacred_material_gain" }, + id: "liminal_space_essence", + text: "The liminal substance within the veil crystallises momentarily where your disciples' faith intersects with uncertainty.", + }, + { + effect: { fraction: 0.05, type: "disciple_loss" }, + id: "liminal_space_dissolution", + text: "Several disciples begin to undergo their own liminal state within the veil. They are recalled before the process completes.", + }, + ], + id: "liminal_space", + name: "The Liminal Space", + possibleMaterials: [ + { materialId: "liminal_essence", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "veil_thread", maxQuantity: 3, minQuantity: 1, weight: 4 }, + ], + zoneId: "goddess_veil", + }, + { + description: "The veil's inner face โ€” where it can be seen from the divine side, and where the fragments of what lies beyond press closest.", + durationSeconds: 108_000, + events: [ + { + effect: { materialId: "beyond_fragment", quantity: 1, type: "sacred_material_gain" }, + id: "veil_inner_face_fragment", + text: "A fragment of what lies beyond presses through the veil at a thin point. Your disciples carefully contain it.", + }, + { + effect: { amount: 1e57, type: "prayers_gain" }, + id: "veil_inner_face_perspective", + text: "Seeing the divine realm from the inner face of the veil gives your disciples an entirely new perspective on what they are devoted to.", + }, + ], + id: "veil_inner_face", + name: "The Veil's Inner Face", + possibleMaterials: [ + { materialId: "beyond_fragment", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "liminal_essence", maxQuantity: 3, minQuantity: 2, weight: 4 }, + { materialId: "veil_thread", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_veil", + }, + { + description: "The tear in the veil โ€” a wound in the boundary that has been carefully managed for longer than recorded history. Looking through it is the closest to truth any mortal has come.", + durationSeconds: 129_600, + events: [ + { + effect: { materialId: "beyond_fragment", quantity: 2, type: "sacred_material_gain" }, + id: "veil_tear_fragments", + text: "The tear's edges are rich with beyond fragments. Your disciples collect two before the veil's attendants notice.", + }, + { + effect: { fraction: 0.07, type: "disciple_loss" }, + id: "veil_tear_truth", + text: "Several disciples look through the tear. They see something true. It takes time before they can return to ordinary devotion.", + }, + ], + id: "veil_tear", + name: "The Veil Tear", + possibleMaterials: [ + { materialId: "beyond_fragment", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "liminal_essence", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "veil_thread", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_veil", + }, + // โ”€โ”€ Divine Heart โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The outer chamber of the divine heart โ€” where the pulse is felt as a physical pressure and the air tastes of warmth and purpose.", + durationSeconds: 86_400, + events: [ + { + effect: { materialId: "heart_pulse", quantity: 3, type: "sacred_material_gain" }, + id: "heart_outer_chamber_pulses", + text: "Three pulses crystallise as they reach the outer chamber's walls. Your disciples collect them reverently.", + }, + { + effect: { amount: 1e57, type: "prayers_gain" }, + id: "heart_outer_chamber_prayer", + text: "Praying in time with the divine heart's pulse synchronises your disciples' devotion with the goddess's own rhythm.", + }, + ], + id: "heart_outer_chamber", + name: "The Heart's Outer Chamber", + possibleMaterials: [ + { materialId: "heart_pulse", maxQuantity: 5, minQuantity: 2, weight: 5 }, + { materialId: "divine_love_crystal", maxQuantity: 2, minQuantity: 1, weight: 2 }, + ], + zoneId: "goddess_divine_heart", + }, + { + description: "The love crystal garden โ€” where the divine heart's love has crystallised over aeons into formations of impossible beauty.", + durationSeconds: 108_000, + events: [ + { + effect: { materialId: "divine_love_crystal", quantity: 2, type: "sacred_material_gain" }, + id: "love_garden_crystals", + text: "New love crystals have formed overnight. Your disciples are permitted to take two.", + }, + { + effect: { fraction: 0.04, type: "disciple_loss" }, + id: "love_garden_overwhelm", + text: "The concentrated love in the garden is more than several disciples can accept without being emotionally unmade.", + }, + ], + id: "love_garden", + name: "The Love Crystal Garden", + possibleMaterials: [ + { materialId: "divine_love_crystal", maxQuantity: 4, minQuantity: 2, weight: 4 }, + { materialId: "heart_pulse", maxQuantity: 4, minQuantity: 2, weight: 4 }, + ], + zoneId: "goddess_divine_heart", + }, + { + description: "The inner sanctum of the divine heart โ€” where the beating is so powerful it can be felt in the bones, and the warmth is the warmth of being loved without condition.", + durationSeconds: 151_200, + events: [ + { + effect: { materialId: "heart_ichor", quantity: 1, type: "sacred_material_gain" }, + id: "heart_inner_sanctum_ichor", + text: "A single droplet of heart ichor escapes the innermost chamber. Your disciples catch it in a vessel prepared for exactly this purpose.", + }, + { + effect: { amount: 1e60, type: "prayers_gain" }, + id: "heart_inner_sanctum_union", + text: "Your disciples experience a moment of complete union with the divine heart. Every prayer they have ever offered is answered simultaneously.", + }, + ], + id: "heart_inner_sanctum", + name: "The Heart's Inner Sanctum", + possibleMaterials: [ + { materialId: "heart_ichor", maxQuantity: 2, minQuantity: 1, weight: 3 }, + { materialId: "divine_love_crystal", maxQuantity: 3, minQuantity: 2, weight: 4 }, + { materialId: "heart_pulse", maxQuantity: 3, minQuantity: 1, weight: 3 }, + ], + zoneId: "goddess_divine_heart", + }, + { + description: "The divine heart itself โ€” the source of all divinity, the origin of the goddess, the first thing that ever was and the last thing that will ever be.", + durationSeconds: 172_800, + events: [ + { + effect: { materialId: "heart_ichor", quantity: 2, type: "sacred_material_gain" }, + id: "divine_heart_ichor", + text: "Two drops of heart ichor fall during a particularly profound pulse. Your disciples collect them with hands that do not stop shaking for hours.", + }, + { + effect: { fraction: 0.08, type: "disciple_loss" }, + id: "divine_heart_transcendence", + text: "Several disciples, in the presence of the divine heart, undergo spontaneous transcendence. They must be retrieved from a higher plane.", + }, + ], + id: "divine_heart_itself", + name: "The Divine Heart", + possibleMaterials: [ + { materialId: "heart_ichor", maxQuantity: 3, minQuantity: 1, weight: 4 }, + { materialId: "divine_love_crystal", maxQuantity: 4, minQuantity: 2, weight: 3 }, + { materialId: "heart_pulse", maxQuantity: 3, minQuantity: 2, weight: 3 }, + ], + zoneId: "goddess_divine_heart", + }, +]; diff --git a/apps/api/src/data/goddessMaterials.ts b/apps/api/src/data/goddessMaterials.ts new file mode 100644 index 0000000..096f6b1 --- /dev/null +++ b/apps/api/src/data/goddessMaterials.ts @@ -0,0 +1,408 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { Material } from "@elysium/types"; + +export const defaultGoddessMaterials: Array = [ + // โ”€โ”€ Celestial Garden โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Petals from flowers that have never known anything but divine light. They crumble if touched by anything unworthy.", + id: "divine_petal", + name: "Divine Petal", + rarity: "common", + zoneId: "goddess_celestial_garden", + }, + { + description: "Prayer energy that has crystallised over centuries of devotion. Each one holds a fragment of someone's deepest hope.", + id: "prayer_crystal", + name: "Prayer Crystal", + rarity: "common", + zoneId: "goddess_celestial_garden", + }, + { + description: "Dust that falls from the celestial dome above โ€” each mote a fragment of a star that finished its purpose and dissolved.", + id: "celestial_dust", + name: "Celestial Dust", + rarity: "uncommon", + zoneId: "goddess_celestial_garden", + }, + // โ”€โ”€ Crystal Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Shards broken from the sanctum walls during divine resonance events. They hum faintly with stored knowledge.", + id: "sanctum_shard", + name: "Sanctum Shard", + rarity: "common", + zoneId: "goddess_crystal_sanctum", + }, + { + description: "Ink distilled from divine light and used to inscribe the sanctum's most sacred texts. It cannot write falsehoods.", + id: "holy_ink", + name: "Holy Ink", + rarity: "uncommon", + zoneId: "goddess_crystal_sanctum", + }, + { + description: "A fragment of an oracle's primary lens, shattered during a vision of catastrophic clarity. The vision was worth it.", + id: "oracle_lens_fragment", + name: "Oracle Lens Fragment", + rarity: "rare", + zoneId: "goddess_crystal_sanctum", + }, + // โ”€โ”€ Astral Cathedral โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "A feather shed by a seraph during their first ascension. They shed exactly one. This is the rarest thing most people will ever hold.", + id: "seraph_feather", + name: "Seraph Feather", + rarity: "uncommon", + zoneId: "goddess_astral_cathedral", + }, + { + description: "The concentrated resonance of the celestial choir โ€” bottled by scholars who noticed that it had physical properties.", + id: "choir_essence", + name: "Choir Essence", + rarity: "uncommon", + zoneId: "goddess_astral_cathedral", + }, + { + description: "Material formed where the cathedral's astral structure meets the void. Transparent, harder than diamond, warmer than sunlight.", + id: "astral_glass", + name: "Astral Glass", + rarity: "rare", + zoneId: "goddess_astral_cathedral", + }, + // โ”€โ”€ Empyrean Citadel โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Ore mined from the citadel's deepest foundations โ€” dense with divine potential but raw and unrefined.", + id: "empyrean_ore", + name: "Empyrean Ore", + rarity: "uncommon", + zoneId: "goddess_empyrean_citadel", + }, + { + description: "Empyrean ore refined in the citadel's divine furnaces. The process requires both technical mastery and genuine faith.", + id: "divine_alloy", + name: "Divine Alloy", + rarity: "rare", + zoneId: "goddess_empyrean_citadel", + }, + { + description: "A medal awarded only to champions of the citadel's trials. Fewer than a hundred exist. Each one has a name engraved on the back.", + id: "celestial_medal", + name: "Celestial Medal", + rarity: "rare", + zoneId: "goddess_empyrean_citadel", + }, + // โ”€โ”€ Primordial Springs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Water drawn directly from the springs of creation. It tastes of nothing. It heals everything. Handle carefully.", + id: "creation_water", + name: "Creation Water", + rarity: "uncommon", + zoneId: "goddess_primordial_springs", + }, + { + description: "The raw essence of creation โ€” the stuff from which everything is made before it decides what to become.", + id: "primordial_essence", + name: "Primordial Essence", + rarity: "rare", + zoneId: "goddess_primordial_springs", + }, + { + description: "A crystal formed spontaneously when creation energy reaches critical density. Each one is unique and has never existed before.", + id: "genesis_crystal", + name: "Genesis Crystal", + rarity: "rare", + zoneId: "goddess_primordial_springs", + }, + // โ”€โ”€ Eternal Firmament โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Stone from the eternal firmament itself โ€” impossibly dense, impossibly enduring. It does not weather. It does not age.", + id: "firmament_stone", + name: "Firmament Stone", + rarity: "rare", + zoneId: "goddess_eternal_firmament", + }, + { + description: "A shard of divine light that has solidified โ€” the kind of light that exists before it is observed, before it is named.", + id: "divine_light_shard", + name: "Divine Light Shard", + rarity: "rare", + zoneId: "goddess_eternal_firmament", + }, + { + description: "A fragment broken from eternity itself during a moment of divine turbulence. It is still vibrating. It will never stop.", + id: "eternity_fragment", + name: "Eternity Fragment", + rarity: "rare", + zoneId: "goddess_eternal_firmament", + }, + // โ”€โ”€ Sacred Grove โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Resin weeping from the sacred grove's eldest trees โ€” each drop takes decades to form and carries the memory of every prayer offered beneath its branches.", + id: "grove_resin", + name: "Grove Resin", + rarity: "common", + zoneId: "goddess_sacred_grove", + }, + { + description: "A leaf that has absorbed so much divine light it has become semi-translucent, like stained glass grown naturally from a living tree.", + id: "luminous_leaf", + name: "Luminous Leaf", + rarity: "uncommon", + zoneId: "goddess_sacred_grove", + }, + { + description: "Bark shed from the grove's most ancient tree โ€” said to be the first thing the goddess ever touched. No axe can cut it. No fire can burn it.", + id: "sacred_heartwood", + name: "Sacred Heartwood", + rarity: "rare", + zoneId: "goddess_sacred_grove", + }, + // โ”€โ”€ Luminous Expanse โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The ambient radiance of the luminous expanse, captured in small crystalline vessels before it dissipates. Warm to the touch always.", + id: "captured_radiance", + name: "Captured Radiance", + rarity: "common", + zoneId: "goddess_luminous_expanse", + }, + { + description: "Where radiance pools deep enough, it begins to behave like water. This is a vial of that impossible substance.", + id: "radiance_pool", + name: "Radiance Pool", + rarity: "uncommon", + zoneId: "goddess_luminous_expanse", + }, + { + description: "A perfect sphere of compressed luminous energy โ€” formed only at the expanse's absolute centre, where the light meets itself coming back.", + id: "light_core", + name: "Light Core", + rarity: "rare", + zoneId: "goddess_luminous_expanse", + }, + // โ”€โ”€ Heavenly Forge โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Scale from a celestial creature shed near the forge โ€” tempered by proximity to divine fire into something harder than most metals.", + id: "forge_scale", + name: "Forge Scale", + rarity: "uncommon", + zoneId: "goddess_heavenly_forge", + }, + { + description: "The slag produced when divine alloy is refined to its purest form. Useless for most things. Priceless for the right ones.", + id: "divine_slag", + name: "Divine Slag", + rarity: "uncommon", + zoneId: "goddess_heavenly_forge", + }, + { + description: "A gem formed in the forge's hottest chamber โ€” absorbs heat and releases it as blessing energy over years. Handle with tongs.", + id: "forge_gem", + name: "Forge Gem", + rarity: "rare", + zoneId: "goddess_heavenly_forge", + }, + // โ”€โ”€ Oracle Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The residue left behind when an oracle's vision ends โ€” collected from the floor of the viewing chamber before it evaporates.", + id: "vision_residue", + name: "Vision Residue", + rarity: "common", + zoneId: "goddess_oracle_sanctum", + }, + { + description: "Crystals that form in the minds of oracles during particularly intense visions and are expelled as small shards afterward.", + id: "prophecy_crystal", + name: "Prophecy Crystal", + rarity: "uncommon", + zoneId: "goddess_oracle_sanctum", + }, + { + description: "A shard of pure foresight โ€” carved from the moment between a prophecy being spoken and it being understood. Extremely dangerous to hold for long.", + id: "fate_shard", + name: "Fate Shard", + rarity: "rare", + zoneId: "goddess_oracle_sanctum", + }, + // โ”€โ”€ Seraph's Nest โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Down from the innermost layer of a seraph's plumage โ€” softer than anything natural, warm as sunlight, impossible to soil.", + id: "seraph_down", + name: "Seraph Down", + rarity: "common", + zoneId: "goddess_seraphs_nest", + }, + { + description: "A primary feather from a seraph's wing โ€” longer than a person is tall, capable of carrying aloft far more than its size suggests.", + id: "seraph_primary", + name: "Seraph Primary", + rarity: "uncommon", + zoneId: "goddess_seraphs_nest", + }, + { + description: "The hollow quill of a fully ascended seraph โ€” said to channel divine will as faithfully as any sacred instrument ever made.", + id: "ascended_quill", + name: "Ascended Quill", + rarity: "rare", + zoneId: "goddess_seraphs_nest", + }, + // โ”€โ”€ Divine Archive โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Vellum produced from materials that do not exist in the mortal world โ€” can hold text that cannot be written on ordinary parchment.", + id: "celestial_vellum", + name: "Celestial Vellum", + rarity: "common", + zoneId: "goddess_divine_archive", + }, + { + description: "A stamp used to seal the archive's most important documents โ€” its mark cannot be forged and cannot be removed.", + id: "archive_seal", + name: "Archive Seal", + rarity: "uncommon", + zoneId: "goddess_divine_archive", + }, + { + description: "A codex page that has absorbed so much divine knowledge it has become semi-sentient. It resists being filed incorrectly.", + id: "living_codex_page", + name: "Living Codex Page", + rarity: "rare", + zoneId: "goddess_divine_archive", + }, + // โ”€โ”€ Consecrated Depths โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Stone from the deepest consecrated chambers โ€” blessed so thoroughly by generations of ritual that it radiates faint warmth in complete darkness.", + id: "consecrated_stone", + name: "Consecrated Stone", + rarity: "uncommon", + zoneId: "goddess_consecrated_depths", + }, + { + description: "Water from the depths' sacred underground springs โ€” it has been blessed so many times that blessing it again produces light.", + id: "depth_blessing", + name: "Depth Blessing", + rarity: "uncommon", + zoneId: "goddess_consecrated_depths", + }, + { + description: "A gem found only at the absolute lowest point of the consecrated depths โ€” formed from minerals and divine energy in equal parts.", + id: "abyssal_gem", + name: "Abyssal Gem", + rarity: "rare", + zoneId: "goddess_consecrated_depths", + }, + // โ”€โ”€ Astral Confluence โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "A shard of ley-material harvested where two astral streams cross โ€” vibrates at two frequencies simultaneously and cannot decide which to settle on.", + id: "confluence_shard", + name: "Confluence Shard", + rarity: "uncommon", + zoneId: "goddess_astral_confluence", + }, + { + description: "The harmonic tone produced when multiple astral streams converge โ€” bottled by scholars with sensitive enough ears to find it before it propagated away.", + id: "astral_harmonic", + name: "Astral Harmonic", + rarity: "uncommon", + zoneId: "goddess_astral_confluence", + }, + { + description: "A knot of astral energy so dense it has become material โ€” formed only at confluence points of seven or more streams. Profoundly stable.", + id: "convergence_node", + name: "Convergence Node", + rarity: "rare", + zoneId: "goddess_astral_confluence", + }, + // โ”€โ”€ Celestial Throne โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Gold leaf beaten so thin it is translucent โ€” used to gild the throne's ceremonial surfaces and shed during every royal audience.", + id: "throne_gold_leaf", + name: "Throne Gold Leaf", + rarity: "uncommon", + zoneId: "goddess_celestial_throne", + }, + { + description: "A gem that fell from the throne's armrest during a momentous divine decision. It carries the weight of that decision.", + id: "sovereignty_gem", + name: "Sovereignty Gem", + rarity: "rare", + zoneId: "goddess_celestial_throne", + }, + { + description: "A fragment of the divine crown โ€” shed when the goddess channels her most absolute authority. Still crackles with that authority.", + id: "crown_fragment", + name: "Crown Fragment", + rarity: "rare", + zoneId: "goddess_celestial_throne", + }, + // โ”€โ”€ Infinite Choir โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "A note from the infinite choir crystallised mid-air โ€” visible proof that sound, given enough devotion, can become matter.", + id: "choir_note", + name: "Choir Note", + rarity: "uncommon", + zoneId: "goddess_infinite_choir", + }, + { + description: "The resonant frequency of the infinite choir, captured in a tuning fork made of condensed praise. Struck, it harmonises everything nearby.", + id: "divine_resonance", + name: "Divine Resonance", + rarity: "rare", + zoneId: "goddess_infinite_choir", + }, + { + description: "The chord that underlies all sacred music โ€” crystallised in a moment of perfect harmony that has not occurred before or since.", + id: "sacred_chord", + name: "Sacred Chord", + rarity: "rare", + zoneId: "goddess_infinite_choir", + }, + // โ”€โ”€ The Veil โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "A thread of the veil itself โ€” taken from where it has worn thinnest. Still partially transparent. Still partially something else.", + id: "veil_thread", + name: "Veil Thread", + rarity: "uncommon", + zoneId: "goddess_veil", + }, + { + description: "The liminal substance that exists only at the veil's boundary โ€” neither fully divine nor fully void, but something genuinely new.", + id: "liminal_essence", + name: "Liminal Essence", + rarity: "rare", + zoneId: "goddess_veil", + }, + { + description: "A fragment of what lies beyond the veil โ€” contained only by the veil-thread it's wrapped in. Looking at it directly is inadvisable.", + id: "beyond_fragment", + name: "Beyond Fragment", + rarity: "rare", + zoneId: "goddess_veil", + }, + // โ”€โ”€ Divine Heart โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "A pulse of the divine heart made tangible โ€” each one a single beat, still warm, still rhythmic, still alive with purpose.", + id: "heart_pulse", + name: "Heart Pulse", + rarity: "uncommon", + zoneId: "goddess_divine_heart", + }, + { + description: "The pure love of the divine heart, distilled into crystalline form โ€” the most powerful healing agent in existence and the most dangerous to waste.", + id: "divine_love_crystal", + name: "Divine Love Crystal", + rarity: "rare", + zoneId: "goddess_divine_heart", + }, + { + description: "A droplet of ichor from the divine heart itself โ€” the essence of divinity in its most concentrated form. Handle with absolute reverence.", + id: "heart_ichor", + name: "Heart Ichor", + rarity: "rare", + zoneId: "goddess_divine_heart", + }, +]; diff --git a/apps/api/src/data/goddessQuests.ts b/apps/api/src/data/goddessQuests.ts new file mode 100644 index 0000000..2545439 --- /dev/null +++ b/apps/api/src/data/goddessQuests.ts @@ -0,0 +1,953 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessQuest } from "@elysium/types"; + +export const defaultGoddessQuests: Array = [ + // โ”€โ”€ Zone 1: Celestial Garden โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "Your disciples take their first hesitant steps into the Celestial Garden, brushing petals of woven starlight as the divine presence stirs around them. They light a single votive flame and whisper the oldest name of the Goddess into the perfumed air.", + durationSeconds: 30, + id: "celestial_awakening", + name: "Celestial Awakening", + prerequisiteIds: [], + rewards: [ { amount: 100, type: "prayers" } ], + status: "available", + zoneId: "goddess_celestial_garden", + }, + { + description: "The Garden's luminous blossoms respond to devout hands. Your disciples weave garlands of heavenbloom and lay them upon the Goddess's altar, earning the first flicker of her attention as petals dissolve into radiant motes.", + durationSeconds: 75, + id: "garden_offering", + name: "Garden Offering", + prerequisiteIds: [ "celestial_awakening" ], + rewards: [ { amount: 225, type: "prayers" } ], + status: "locked", + zoneId: "goddess_celestial_garden", + }, + { + description: "Hidden among the boughs of the silver-barked trees are whisper-fruits โ€” blossoms that sing prayers back to those who listen. Your disciples harvest them at dusk and press the hymns into sacred wax tablets for the Goddess's archive.", + durationSeconds: 150, + id: "sacred_harvest", + name: "Sacred Harvest", + prerequisiteIds: [ "garden_offering" ], + rewards: [ { amount: 350, type: "prayers" } ], + status: "locked", + zoneId: "goddess_celestial_garden", + }, + { + description: "A grove of moonpetal trees at the Garden's heart has begun to wither, their divine sap draining into cracked earth. Your disciples perform the Rite of Renewal, singing in turn so the melody never breaks, coaxing roots back toward the light.", + durationSeconds: 225, + id: "rite_of_renewal", + name: "Rite of Renewal", + prerequisiteIds: [ "sacred_harvest" ], + rewards: [ { amount: 425, type: "prayers" } ], + status: "locked", + zoneId: "goddess_celestial_garden", + }, + { + description: "At the centre of the Celestial Garden stands the First Petal โ€” a bloom that has never wilted since before memory. Your disciples kneel in a circle around it and offer the sum of everything they have learned. The Goddess hears. The petal trembles. The way forward opens.", + durationSeconds: 300, + id: "first_prayer", + name: "First Prayer", + prerequisiteIds: [ "rite_of_renewal" ], + rewards: [ { amount: 500, type: "prayers" } ], + status: "locked", + zoneId: "goddess_celestial_garden", + }, + + // โ”€โ”€ Zone 2: Crystal Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Crystal Sanctum hums with a resonance older than the stars. Your disciples enter and feel their thoughts sharpen like facets cut from living gemstone. They intone the Canticle of Clarity, letting the crystals remember the sound of their voices.", + durationSeconds: 120, + id: "canticle_of_clarity", + name: "Canticle of Clarity", + prerequisiteIds: [], + rewards: [ { amount: 400, type: "prayers" } ], + status: "locked", + zoneId: "goddess_crystal_sanctum", + }, + { + description: "Resonance shards litter the Sanctum's floor โ€” fragments of prayers that crystallised and fell like snow. Your disciples gather them carefully and re-meld them into a votive lens, focusing ancient supplication into a beam of pure devotion.", + durationSeconds: 240, + id: "resonance_mending", + name: "Resonance Mending", + prerequisiteIds: [ "canticle_of_clarity" ], + rewards: [ { amount: 900, type: "prayers" } ], + status: "locked", + zoneId: "goddess_crystal_sanctum", + }, + { + description: "Deep within the Sanctum a crystalline mirror reflects not faces but intentions. Your disciples stand before it one by one and let the mirror read the sincerity of their faith. Those found worthy leave a handprint of light on its surface.", + durationSeconds: 360, + id: "mirror_of_intent", + name: "Mirror of Intent", + prerequisiteIds: [ "resonance_mending" ], + rewards: [ { amount: 1300, type: "prayers" } ], + status: "locked", + zoneId: "goddess_crystal_sanctum", + }, + { + description: "The Sanctum's great central spire is cracked, bleeding harmonics into the ether. Your disciples brace the spire with voice and will, pouring their prayers into the fracture until crystalline new growth seals the wound and the Sanctum sings whole once more.", + durationSeconds: 480, + id: "spire_restoration", + name: "Spire Restoration", + prerequisiteIds: [ "mirror_of_intent" ], + rewards: [ { amount: 1700, type: "prayers" } ], + status: "locked", + zoneId: "goddess_crystal_sanctum", + }, + { + description: "The final chamber of the Crystal Sanctum holds a meditation dais where time moves differently. Your disciples sit in perfect silence for what feels like an eternity and yet an instant, surrendering all thought to the Goddess until their minds become as still and clear as the deepest crystal.", + durationSeconds: 600, + id: "divine_meditation", + name: "Divine Meditation", + prerequisiteIds: [ "spire_restoration" ], + rewards: [ { amount: 2000, type: "prayers" }, { amount: 2, type: "divinity" } ], + status: "locked", + zoneId: "goddess_crystal_sanctum", + }, + + // โ”€โ”€ Zone 3: Astral Cathedral โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Astral Cathedral drifts between stars like a reverent dream. Your disciples board the spectral nave and light the Astral Braziers, whose flames burn in colours that have no earthly name, marking the Cathedral as open for worship once more.", + durationSeconds: 300, + id: "astral_braziers", + name: "Astral Braziers", + prerequisiteIds: [], + rewards: [ { amount: 1500, type: "prayers" } ], + status: "locked", + zoneId: "goddess_astral_cathedral", + }, + { + description: "The Cathedral's stained-glass cosmograms are windows into moments the Goddess shaped. Your disciples trace each image and transcribe its cosmic truth onto vellum made from solidified starlight, compiling the first chapter of the Astral Codex.", + durationSeconds: 600, + id: "cosmogram_transcription", + name: "Cosmogram Transcription", + prerequisiteIds: [ "astral_braziers" ], + rewards: [ { amount: 3000, type: "prayers" }, { amount: 2, type: "divinity" } ], + status: "locked", + zoneId: "goddess_astral_cathedral", + }, + { + description: "A constellation of broken chandeliers dangles in the Cathedral's void-ceiling. Each crystal holds a frozen hymn. Your disciples ascend on pillars of light and restore the chandeliers, releasing the trapped hymns in a cascade of song that shakes the stars.", + durationSeconds: 900, + id: "hymn_restoration", + name: "Hymn Restoration", + prerequisiteIds: [ "cosmogram_transcription" ], + rewards: [ { amount: 5000, type: "prayers" }, { amount: 5, type: "divinity" } ], + status: "locked", + zoneId: "goddess_astral_cathedral", + }, + { + description: "At the Cathedral's altar an astral orrery has gone silent โ€” the celestial spheres no longer dance. Your disciples wind the mechanism with prayers and correct the orbital paths by memory and faith alone, setting the heavens back in motion.", + durationSeconds: 1200, + id: "orrery_alignment", + name: "Orrery Alignment", + prerequisiteIds: [ "hymn_restoration" ], + rewards: [ { amount: 7000, type: "prayers" }, { amount: 8, type: "divinity" } ], + status: "locked", + zoneId: "goddess_astral_cathedral", + }, + { + description: "The Revelation Chamber at the Cathedral's peak opens only when mortal faith is pure enough to bear what lies within. Your disciples enter and witness โ€” each in their own way โ€” a truth the Goddess wishes them to carry. They emerge changed, marked with starlight behind their eyes.", + durationSeconds: 1800, + id: "astral_revelation", + name: "Astral Revelation", + prerequisiteIds: [ "orrery_alignment" ], + rewards: [ { amount: 8000, type: "prayers" }, { amount: 10, type: "divinity" } ], + status: "locked", + zoneId: "goddess_astral_cathedral", + }, + + // โ”€โ”€ Zone 4: Empyrean Citadel โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Empyrean Citadel looms above the clouds like judgment carved from gold. Your disciples breach its outer gates with an offering of bound lightning and sacred oil, earning the grudging acknowledgement of the sentinel-spirits within.", + durationSeconds: 600, + id: "citadel_breach", + name: "Citadel Breach", + prerequisiteIds: [], + rewards: [ { amount: 6000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_empyrean_citadel", + }, + { + description: "The Citadel's ramparts are patrolled by storm-born wardens who test every soul that walks beneath their gaze. Your disciples answer the wardens' riddles with scripture, earning passage to the inner courtyards where divine war-relics line the walls.", + durationSeconds: 1200, + id: "warden_trial", + name: "Warden Trial", + prerequisiteIds: [ "citadel_breach" ], + rewards: [ { amount: 12_000, type: "prayers" }, { amount: 8, type: "divinity" } ], + status: "locked", + zoneId: "goddess_empyrean_citadel", + }, + { + description: "In the Citadel's armoury sleep weapons that have never been drawn โ€” consecrated against a war that has not yet come. Your disciples polish them in prayer, reading the prophecies inscribed on each blade, careful not to wake the fury sleeping within the steel.", + durationSeconds: 2400, + id: "sacred_armoury", + name: "Sacred Armoury", + prerequisiteIds: [ "warden_trial" ], + rewards: [ { amount: 20_000, type: "prayers" }, { amount: 20, type: "divinity" } ], + status: "locked", + zoneId: "goddess_empyrean_citadel", + }, + { + description: "A great strategic table in the Citadel's war room projects the Goddess's eternal campaign against entropy and void. Your disciples study the battle-plans, copying formations into sacred diagrams, learning the shape of divine warfare so they may serve as worthy instruments.", + durationSeconds: 3000, + id: "divine_war_plans", + name: "Divine War Plans", + prerequisiteIds: [ "sacred_armoury" ], + rewards: [ { amount: 26_000, type: "prayers" }, { amount: 33, type: "divinity" } ], + status: "locked", + zoneId: "goddess_empyrean_citadel", + }, + { + description: "The Empyrean Throne sits at the Citadel's summit, empty but vibrating with latent authority. Your disciples ascend to it and each places a palm against its armrest, pledging their ascent โ€” not to rule, but to serve. The throne acknowledges them. The Citadel opens its deepest vaults.", + durationSeconds: 3600, + id: "empyrean_ascent", + name: "Empyrean Ascent", + prerequisiteIds: [ "divine_war_plans" ], + rewards: [ { amount: 30_000, type: "prayers" }, { amount: 40, type: "divinity" } ], + status: "locked", + zoneId: "goddess_empyrean_citadel", + }, + + // โ”€โ”€ Zone 5: Primordial Springs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Primordial Springs bubble with waters older than the first dawn. Your disciples lower sacred vessels into the steaming pools and fill them carefully, breathing prayers into each vessel so the water remembers why it was made holy.", + durationSeconds: 1200, + id: "sacred_vessel_filling", + name: "Sacred Vessel Filling", + prerequisiteIds: [], + rewards: [ { amount: 25_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_primordial_springs", + }, + { + description: "Along the Springs' banks grow healing sedges whose roots drink from the divine water. Your disciples harvest them at the hour when the moons align and prepare healing salves imbued with primordial blessing โ€” offerings that carry the Goddess's mercy to those who suffer.", + durationSeconds: 2400, + id: "primordial_harvest", + name: "Primordial Harvest", + prerequisiteIds: [ "sacred_vessel_filling" ], + rewards: [ { amount: 50_000, type: "prayers" }, { amount: 30, type: "divinity" } ], + status: "locked", + zoneId: "goddess_primordial_springs", + }, + { + description: "A fracture in the Springs' bedrock bleeds divine water into the dark earth, wasting its sanctity. Your disciples seal the fracture with consecrated clay and stone, singing over it until the ground hardens into something inviolate, the water once more rising only where it is welcome.", + durationSeconds: 3600, + id: "springs_mending", + name: "Springs Mending", + prerequisiteIds: [ "primordial_harvest" ], + rewards: [ { amount: 75_000, type: "prayers" }, { amount: 80, type: "divinity" } ], + status: "locked", + zoneId: "goddess_primordial_springs", + }, + { + description: "The oldest pool in the Springs holds a reflection not of sky, but of the Goddess's memory. Your disciples immerse themselves and experience fragments of creation โ€” vast, terrifying, beautiful. They surface sobbing with joy, minds expanded beyond what they once thought possible.", + durationSeconds: 4800, + id: "memory_immersion", + name: "Memory Immersion", + prerequisiteIds: [ "springs_mending" ], + rewards: [ { amount: 100_000, type: "prayers" }, { amount: 120, type: "divinity" } ], + status: "locked", + zoneId: "goddess_primordial_springs", + }, + { + description: "The heart of the Primordial Springs conceals a blessing-font that has not flowed in aeons, its channel blocked by the calcified prayers of forgotten cults. Your disciples clear the channel with patient devotion and receive the Springs' first blessing in living memory โ€” a torrent of sacred water, warm and golden.", + durationSeconds: 7200, + id: "springs_blessing", + name: "Springs Blessing", + prerequisiteIds: [ "memory_immersion" ], + rewards: [ { amount: 120_000, type: "prayers" }, { amount: 150, type: "divinity" } ], + status: "locked", + zoneId: "goddess_primordial_springs", + }, + + // โ”€โ”€ Zone 6: Eternal Firmament โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Eternal Firmament stretches in all directions like an ocean made of sky. Your disciples learn to walk upon it โ€” each step a prayer, each breath a hymn โ€” adjusting their faith until the Firmament recognises their weight as belonging.", + durationSeconds: 1800, + id: "firmament_walking", + name: "Firmament Walking", + prerequisiteIds: [], + rewards: [ { amount: 100_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_eternal_firmament", + }, + { + description: "The stars of the Firmament are prayers that have burned long enough to become permanent. Your disciples study the constellations and map the devotions that shaped each one, compiling a chart of eternal worship that guides travellers of faith across the infinite sky.", + durationSeconds: 3600, + id: "stellar_cartography", + name: "Stellar Cartography", + prerequisiteIds: [ "firmament_walking" ], + rewards: [ { amount: 200_000, type: "prayers" }, { amount: 100, type: "divinity" } ], + status: "locked", + zoneId: "goddess_eternal_firmament", + }, + { + description: "A storm of doubt rages at the Firmament's centre โ€” a blasphemous tempest seeded by those who turned away from the Goddess long ago. Your disciples enter the storm and unmake it, meeting every howling doubt with a truth louder than despair, until the sky is clear.", + durationSeconds: 7200, + id: "storm_of_doubt", + name: "Storm of Doubt", + prerequisiteIds: [ "stellar_cartography" ], + rewards: [ { amount: 300_000, type: "prayers" }, { amount: 250, type: "divinity" } ], + status: "locked", + zoneId: "goddess_eternal_firmament", + }, + { + description: "Along the Firmament's edge are lighthouses of prayer โ€” ancient beacons meant to guide lost souls. Many have gone dark. Your disciples reignite them one by one, climbing their spiral stairs and pouring their faith into cold lamps until warmth blazes across the eternal sky.", + durationSeconds: 10_800, + id: "lighthouse_rekindling", + name: "Lighthouse Rekindling", + prerequisiteIds: [ "storm_of_doubt" ], + rewards: [ { amount: 425_000, type: "prayers" }, { amount: 400, type: "divinity" } ], + status: "locked", + zoneId: "goddess_eternal_firmament", + }, + { + description: "The Eternal Firmament has a pinnacle โ€” a point beyond which no mortal has ascended without divine sanction. Your disciples climb there together, their collective faith forming a ladder of light, and at the summit they breathe the Goddess's own air and become, briefly, something more than they were.", + durationSeconds: 14_400, + id: "eternal_ascension", + name: "Eternal Ascension", + prerequisiteIds: [ "lighthouse_rekindling" ], + rewards: [ { amount: 500_000, type: "prayers" }, { amount: 500, type: "divinity" } ], + status: "locked", + zoneId: "goddess_eternal_firmament", + }, + + // โ”€โ”€ Zone 7: Sacred Grove โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Sacred Grove breathes with a life that predates all other living things. Your disciples enter with bare feet and open hands, learning to hear the prayers the trees have absorbed over endless centuries, their roots drinking from the same source as faith itself.", + durationSeconds: 3600, + id: "grove_listening", + name: "Grove Listening", + prerequisiteIds: [], + rewards: [ { amount: 400_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_sacred_grove", + }, + { + description: "The eldest tree in the Grove โ€” the First Witness โ€” carries carvings made by the Goddess herself in the age of making. Your disciples decipher the carvings and learn a lost form of prayer that bypasses language entirely, speaking directly in the tongue of growth and season.", + durationSeconds: 7200, + id: "first_witness", + name: "First Witness", + prerequisiteIds: [ "grove_listening" ], + rewards: [ { amount: 800_000, type: "prayers" }, { amount: 400, type: "divinity" } ], + status: "locked", + zoneId: "goddess_sacred_grove", + }, + { + description: "A blight has crept into the Grove's southern reaches โ€” not malice but neglect, where no devotees have walked in generations. Your disciples push back the grey with prayer-walks, coaxing sacred sap back to the withered boughs until green returns to wood that had forgotten colour.", + durationSeconds: 14_400, + id: "grove_restoration", + name: "Grove Restoration", + prerequisiteIds: [ "first_witness" ], + rewards: [ { amount: 1_200_000, type: "prayers" }, { amount: 1000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_sacred_grove", + }, + { + description: "The Grove's sacred animals โ€” creatures that have never known fear โ€” approach your disciples with offerings in their mouths: seeds, feathers, drops of luminous water. Your disciples accept each gift with reverence, completing a covenant older than any scripture.", + durationSeconds: 21_600, + id: "animal_covenant", + name: "Animal Covenant", + prerequisiteIds: [ "grove_restoration" ], + rewards: [ { amount: 1_700_000, type: "prayers" }, { amount: 1600, type: "divinity" } ], + status: "locked", + zoneId: "goddess_sacred_grove", + }, + { + description: "At the Grove's heart the trees grow in a perfect circle around a clearing of silence so absolute it has its own presence. Your disciples enter the clearing and remain motionless until they feel the Grove breathe with them โ€” one inhale, one exhale, perfectly unified. The Grove accepts them as part of itself.", + durationSeconds: 28_800, + id: "grove_harmony", + name: "Grove Harmony", + prerequisiteIds: [ "animal_covenant" ], + rewards: [ { amount: 2_000_000, type: "prayers" }, { amount: 2000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_sacred_grove", + }, + + // โ”€โ”€ Zone 8: Luminous Expanse โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Luminous Expanse is a plain of solidified light where shadow cannot survive. Your disciples adjust their eyes and their souls to its brilliance, learning to navigate by the gradients of divine radiance rather than landmarks โ€” a new way of seeing that changes them permanently.", + durationSeconds: 7200, + id: "luminous_adjustment", + name: "Luminous Adjustment", + prerequisiteIds: [], + rewards: [ { amount: 1_500_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_luminous_expanse", + }, + { + description: "Prismatic shards of concentrated divinity drift through the Expanse like luminous snowfall. Your disciples catch them in prayer-vessels and carefully direct their energy into sacred lanterns that will hold the divine light stable, creating anchors in the blazing landscape.", + durationSeconds: 14_400, + id: "light_anchoring", + name: "Light Anchoring", + prerequisiteIds: [ "luminous_adjustment" ], + rewards: [ { amount: 3_000_000, type: "prayers" }, { amount: 1500, type: "divinity" } ], + status: "locked", + zoneId: "goddess_luminous_expanse", + }, + { + description: "Where the Expanse borders older darkness at its northern edge, the light wavers and threatens to retreat. Your disciples stand at the border and push back, pouring devotion into the wavering boundary until the light holds firm and even expands, reclaiming territory from the void.", + durationSeconds: 28_800, + id: "light_boundary", + name: "Light Boundary", + prerequisiteIds: [ "light_anchoring" ], + rewards: [ { amount: 5_000_000, type: "prayers" }, { amount: 3500, type: "divinity" } ], + status: "locked", + zoneId: "goddess_luminous_expanse", + }, + { + description: "The Expanse hides within its radiance the Spectra โ€” beings of pure light who guard the Goddess's most dazzling secrets. Your disciples prove their devotion through a trial of silent endurance, sitting within the Spectra's blazing presence without flinching until the beings lower their brilliance and speak.", + durationSeconds: 43_200, + id: "spectra_trial", + name: "Spectra Trial", + prerequisiteIds: [ "light_boundary" ], + rewards: [ { amount: 6_500_000, type: "prayers" }, { amount: 6000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_luminous_expanse", + }, + { + description: "The pinnacle of the Luminous Expanse is the Light-Throne โ€” not a seat of rule but a point of maximal proximity to the Goddess's radiant nature. Your disciples ascend and allow the light to pass through them completely, every secret and sorrow illuminated. They transcend what opacity remained in their souls.", + durationSeconds: 57_600, + id: "light_transcendence", + name: "Light Transcendence", + prerequisiteIds: [ "spectra_trial" ], + rewards: [ { amount: 8_000_000, type: "prayers" }, { amount: 8000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_luminous_expanse", + }, + + // โ”€โ”€ Zone 9: Heavenly Forge โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Heavenly Forge roars with divine fire that consumes nothing but impurity. Your disciples tend the forge's first furnace, learning to breathe in the sacred smoke without coughing, adjusting their lungs to air that burns with purpose rather than heat.", + durationSeconds: 14_400, + id: "forge_initiation", + name: "Forge Initiation", + prerequisiteIds: [], + rewards: [ { amount: 6_000_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_heavenly_forge", + }, + { + description: "The Forge's celestial anvils are inscribed with the names of everything ever made in their service. Your disciples learn to read the inscriptions, understanding the genealogy of divine craft โ€” how each holy weapon and sacred relic was born from the marriage of prayer and fire.", + durationSeconds: 28_800, + id: "anvil_reading", + name: "Anvil Reading", + prerequisiteIds: [ "forge_initiation" ], + rewards: [ { amount: 12_000_000, type: "prayers" }, { amount: 6000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_heavenly_forge", + }, + { + description: "An ancient commission sits unfinished in the Forge โ€” a reliquary meant for a saint who died before it could be delivered. Your disciples complete the reliquary to its original specification, working from divine schematics, honouring both the unnamed saint and the Goddess who commissioned the work.", + durationSeconds: 57_600, + id: "unfinished_reliquary", + name: "Unfinished Reliquary", + prerequisiteIds: [ "anvil_reading" ], + rewards: [ { amount: 20_000_000, type: "prayers" }, { amount: 15_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_heavenly_forge", + }, + { + description: "The Forge's master flame โ€” a tongue of divine fire that has burned without pause since the first making โ€” has begun to gutter. Your disciples feed it with their most powerful prayers, speaking them directly into the flame until it roars back to full strength, taller and hotter than before.", + durationSeconds: 72_000, + id: "master_flame", + name: "Master Flame", + prerequisiteIds: [ "unfinished_reliquary" ], + rewards: [ { amount: 26_000_000, type: "prayers" }, { amount: 24_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_heavenly_forge", + }, + { + description: "Every master smith of the Heavenly Forge must one day undergo the Final Tempering โ€” plunging their faith into ice-cold divine water after the Forge's hottest blaze, enduring the shock of total spiritual contrast. Your disciples emerge from the tempering with faith hardened to an edge nothing can blunt.", + durationSeconds: 86_400, + id: "forge_mastery", + name: "Forge Mastery", + prerequisiteIds: [ "master_flame" ], + rewards: [ { amount: 30_000_000, type: "prayers" }, { amount: 30_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_heavenly_forge", + }, + + // โ”€โ”€ Zone 10: Oracle Sanctum โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Oracle Sanctum is a place of layered prophecy where every surface reflects a different possible future. Your disciples learn to walk through it without becoming lost in what might be, anchoring their attention firmly to what is โ€” the first discipline of those who would deal with oracles.", + durationSeconds: 28_800, + id: "oracle_discipline", + name: "Oracle Discipline", + prerequisiteIds: [], + rewards: [ { amount: 25_000_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_oracle_sanctum", + }, + { + description: "The Sanctum houses the Oracle Pools โ€” basins filled with liquid foresight. Your disciples drink from each in turn, experiencing visions of diverging futures. They must record what they see faithfully and without interpretation, trusting the Goddess to have shown them exactly what she intended.", + durationSeconds: 57_600, + id: "oracle_pools", + name: "Oracle Pools", + prerequisiteIds: [ "oracle_discipline" ], + rewards: [ { amount: 50_000_000, type: "prayers" }, { amount: 25_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_oracle_sanctum", + }, + { + description: "Woven through the Sanctum are threads of Fate โ€” visible to those trained enough to see them. Your disciples trace three threads each, following them from past to present to several possible futures, learning to read the Goddess's intent in the way Fate bends and branches.", + durationSeconds: 86_400, + id: "fate_threading", + name: "Fate Threading", + prerequisiteIds: [ "oracle_pools" ], + rewards: [ { amount: 80_000_000, type: "prayers" }, { amount: 60_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_oracle_sanctum", + }, + { + description: "A false prophecy has taken root in the Sanctum โ€” a lie shaped so cleverly it has convinced several of its resident seers. Your disciples identify it by the single thread it cannot follow into the future and unmake it carefully, restoring the clarity of the Sanctum's vision without destabilising the truths around it.", + durationSeconds: 129_600, + id: "false_prophecy", + name: "False Prophecy", + prerequisiteIds: [ "fate_threading" ], + rewards: [ { amount: 105_000_000, type: "prayers" }, { amount: 95_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_oracle_sanctum", + }, + { + description: "The Oracle Sanctum's innermost chamber holds the Truth Engine โ€” a device of divine construction that takes questions and returns only what is absolutely, cosmically certain. Your disciples present their most earnest question and receive an answer so unambiguous it restructures their understanding of reality. They carry the truth outward as a gift to the Goddess's wider work.", + durationSeconds: 172_800, + id: "oracle_truth", + name: "Oracle Truth", + prerequisiteIds: [ "false_prophecy" ], + rewards: [ { amount: 120_000_000, type: "prayers" }, { amount: 120_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_oracle_sanctum", + }, + + // โ”€โ”€ Zone 11: Seraph's Nest โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Seraph's Nest clings to the underside of a celestial cliff, woven from solidified song and dawn-light. Your disciples earn the right to enter by composing an original hymn on the spot โ€” the Seraphs will accept nothing recited from memory, only the raw prayer of the present moment.", + durationSeconds: 43_200, + id: "seraph_entry", + name: "Seraph Entry", + prerequisiteIds: [], + rewards: [ { amount: 100_000_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_seraphs_nest", + }, + { + description: "The Seraphs keep a thousand nests, each containing one egg of potential โ€” prayers so concentrated they have begun to crystallise into new life. Your disciples tend the eggs, maintaining the exact temperature of devotion required, singing lullabies of faith through the long divine night.", + durationSeconds: 86_400, + id: "egg_tending", + name: "Egg Tending", + prerequisiteIds: [ "seraph_entry" ], + rewards: [ { amount: 200_000_000, type: "prayers" }, { amount: 100_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_seraphs_nest", + }, + { + description: "The eldest Seraph โ€” a being of six wings and a voice like a choir โ€” requires that your disciples pass the Trial of Wings before it will share its knowledge. The trial demands that disciples face a memory of their own greatest failure and find, within it, the seed of something sacred.", + durationSeconds: 129_600, + id: "trial_of_wings", + name: "Trial of Wings", + prerequisiteIds: [ "egg_tending" ], + rewards: [ { amount: 300_000_000, type: "prayers" }, { amount: 250_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_seraphs_nest", + }, + { + description: "The Nest's great Chorus Hall resonates with Seraphic song that the Goddess composed when she first taught angels to feel joy. Your disciples add their voices to the Chorus โ€” not to improve it, but to be worthy of harmonising with something so perfect. To join without diminishing is itself a form of transcendence.", + durationSeconds: 194_400, + id: "seraph_chorus", + name: "Seraph Chorus", + prerequisiteIds: [ "trial_of_wings" ], + rewards: [ { amount: 420_000_000, type: "prayers" }, { amount: 400_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_seraphs_nest", + }, + { + description: "At the Nest's sacred apex, the First Feather โ€” shed by the Goddess's own divine form in the age of creation โ€” rests in a cradle of light. Your disciples are allowed to approach it. Each places a single fingertip against its edge and, in that contact, ascends briefly to a state of understanding that cannot be communicated, only carried.", + durationSeconds: 259_200, + id: "seraph_ascension", + name: "Seraph Ascension", + prerequisiteIds: [ "seraph_chorus" ], + rewards: [ { amount: 500_000_000, type: "prayers" }, { amount: 500_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_seraphs_nest", + }, + + // โ”€โ”€ Zone 12: Divine Archive โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Divine Archive holds every prayer ever offered and every silence that preceded one. Your disciples receive their credentials โ€” a small flame that lives in the palm โ€” and begin the impossible task of learning to navigate its endless corridors without being consumed by the weight of accumulated devotion.", + durationSeconds: 57_600, + id: "archive_credentials", + name: "Archive Credentials", + prerequisiteIds: [], + rewards: [ { amount: 400_000_000, type: "prayers" } ], + status: "locked", + zoneId: "goddess_divine_archive", + }, + { + description: "The Archive's Restoration Wing holds prayers damaged by time, grief, or the faithlessness of those who offered them. Your disciples take up the work of mending โ€” carefully repairing broken devotions so they can be properly filed, returning dignity to those who prayed even in their darkest hours.", + durationSeconds: 115_200, + id: "archive_restoration", + name: "Archive Restoration", + prerequisiteIds: [ "archive_credentials" ], + rewards: [ { amount: 800_000_000, type: "prayers" }, { amount: 400_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_divine_archive", + }, + { + description: "Lost within the Archive's deepest stacks is the Index of Names โ€” the record of every mortal who ever prayed and the Goddess's personal acknowledgement of each one. Your disciples search for it through millions of shelves, guided only by the warmth of faith, and when they find it, they read their own names already written there.", + durationSeconds: 230_400, + id: "index_of_names", + name: "Index of Names", + prerequisiteIds: [ "archive_restoration" ], + rewards: [ { amount: 1_200_000_000, type: "prayers" }, { amount: 1_000_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_divine_archive", + }, + { + description: "The Archive has a Forbidden Section โ€” not forbidden by the Goddess but by the knowledge itself, which is too profound for unprepared minds. Your disciples have been prepared. They enter and read the records of prayers answered in ways the supplicants never understood, learning to see the hidden geometry of divine response.", + durationSeconds: 288_000, + id: "forbidden_section", + name: "Forbidden Section", + prerequisiteIds: [ "index_of_names" ], + rewards: [ { amount: 1_700_000_000, type: "prayers" }, { amount: 1_600_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_divine_archive", + }, + { + description: "The Archive's final hall contains the Last Entry โ€” a prayer written by the Goddess herself, addressed to no one in particular and everyone who would one day find it. Your disciples read it together in silence. None will speak of its contents, but all of them weep, and none of them can say they are not grateful.", + durationSeconds: 345_600, + id: "archive_completion", + name: "Archive Completion", + prerequisiteIds: [ "forbidden_section" ], + rewards: [ { amount: 2_000_000_000, type: "prayers" }, { amount: 2_000_000, type: "divinity" } ], + status: "locked", + zoneId: "goddess_divine_archive", + }, + + // โ”€โ”€ Zone 13: Consecrated Depths โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Consecrated Depths lie beneath even the roots of heaven โ€” a place where divine light has never reached but divine presence fills every shadow. Your disciples descend into the lightless sacred, learning to pray with their whole body rather than voice, for sound dissolves in the Depths' holy dark.", + durationSeconds: 86_400, + id: "depths_descent", + name: "Depths Descent", + prerequisiteIds: [], + rewards: [ { amount: 1_500_000_000, type: "prayers" }, { amount: 1, type: "stardust" } ], + status: "locked", + zoneId: "goddess_consecrated_depths", + }, + { + description: "The Depths hold shrines of shadow-stone that absorb rather than reflect light. Your disciples tend them with oil made from crystallised prayers and watch as the shrines drink the offering, releasing in return a low hum that resonates in the chest โ€” the voice of the Goddess's unknowable, patient depth.", + durationSeconds: 172_800, + id: "shadow_shrines", + name: "Shadow Shrines", + prerequisiteIds: [ "depths_descent" ], + rewards: [ { amount: 3_000_000_000, type: "prayers" }, { amount: 1_500_000, type: "divinity" }, { amount: 1, type: "stardust" } ], + status: "locked", + zoneId: "goddess_consecrated_depths", + }, + { + description: "Deep in the Consecrated Depths a vast creature sleeps โ€” one of the Goddess's oldest prayers given flesh, too sacred to wake but too potent to leave unattended. Your disciples become its temporary custodians, maintaining the seal of sacred sleep, ensuring its dreams do not become nightmares that bleed into the world above.", + durationSeconds: 259_200, + id: "sacred_sleeper", + name: "Sacred Sleeper", + prerequisiteIds: [ "shadow_shrines" ], + rewards: [ { amount: 5_000_000_000, type: "prayers" }, { amount: 4_000_000, type: "divinity" }, { amount: 2, type: "stardust" } ], + status: "locked", + zoneId: "goddess_consecrated_depths", + }, + { + description: "At the Depths' nadir is a wellspring of black-light divinity โ€” the essence of the Goddess's unknowable aspects, the parts of her nature that have no names. Your disciples draw carefully from the wellspring and bring its ineffable essence to the surface, where it enriches all other sacred sites they have tended.", + durationSeconds: 345_600, + id: "black_light_wellspring", + name: "Black-Light Wellspring", + prerequisiteIds: [ "sacred_sleeper" ], + rewards: [ { amount: 7_000_000_000, type: "prayers" }, { amount: 7_000_000, type: "divinity" }, { amount: 2, type: "stardust" } ], + status: "locked", + zoneId: "goddess_consecrated_depths", + }, + { + description: "The Depths' revelation does not come as light but as understanding โ€” a slow, total unfolding of the sacred dark, which contains not the absence of the Goddess but her most interior presence. Your disciples surrender to it completely and are remade in her image of what darkness is for: the ground from which all light emerges.", + durationSeconds: 432_000, + id: "depths_revelation", + name: "Depths Revelation", + prerequisiteIds: [ "black_light_wellspring" ], + rewards: [ { amount: 8_000_000_000, type: "prayers" }, { amount: 8_000_000, type: "divinity" }, { amount: 3, type: "stardust" } ], + status: "locked", + zoneId: "goddess_consecrated_depths", + }, + + // โ”€โ”€ Zone 14: Astral Confluence โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Astral Confluence is the point where all divine energies intersect โ€” a place of such concentrated sacred power that unshielded minds shatter. Your disciples arrive armoured in years of devotion and take their first readings of the competing streams, learning to stand at the intersection without being torn apart.", + durationSeconds: 172_800, + id: "confluence_arrival", + name: "Confluence Arrival", + prerequisiteIds: [], + rewards: [ { amount: 6_000_000_000, type: "prayers" }, { amount: 2, type: "stardust" } ], + status: "locked", + zoneId: "goddess_astral_confluence", + }, + { + description: "Within the Confluence, streams of divinity from different sources run alongside each other without mixing โ€” light-prayer, dark-prayer, fire-prayer, void-prayer, and a dozen others. Your disciples build bridges between the streams using sacred geometry, allowing them to flow as one compound river rather than separate, competing currents.", + durationSeconds: 345_600, + id: "stream_bridging", + name: "Stream Bridging", + prerequisiteIds: [ "confluence_arrival" ], + rewards: [ { amount: 12_000_000_000, type: "prayers" }, { amount: 6_000_000, type: "divinity" }, { amount: 3, type: "stardust" } ], + status: "locked", + zoneId: "goddess_astral_confluence", + }, + { + description: "The Confluence holds a Resonance Chamber where the combined divine energies achieve a pitch that can rewrite fundamental truths about the universe. Your disciples use it carefully โ€” adjusting one small truth about the nature of prayer itself, making devotion slightly more possible for all beings everywhere.", + durationSeconds: 432_000, + id: "resonance_chamber", + name: "Resonance Chamber", + prerequisiteIds: [ "stream_bridging" ], + rewards: [ { amount: 20_000_000_000, type: "prayers" }, { amount: 15_000_000, type: "divinity" }, { amount: 4, type: "stardust" } ], + status: "locked", + zoneId: "goddess_astral_confluence", + }, + { + description: "The Confluence's most dangerous feature is the Eddy โ€” a back-current of misdirected divinity that has been accumulating since before the current age. Your disciples unmake the Eddy through a twelve-stage ritual that requires each disciple to sacrifice a memory of profound joy, which the Eddy consumes in exchange for its dissolution.", + durationSeconds: 518_400, + id: "confluence_eddy", + name: "Confluence Eddy", + prerequisiteIds: [ "resonance_chamber" ], + rewards: [ { amount: 26_000_000_000, type: "prayers" }, { amount: 24_000_000, type: "divinity" }, { amount: 4, type: "stardust" } ], + status: "locked", + zoneId: "goddess_astral_confluence", + }, + { + description: "Alignment at the Confluence means being in perfect harmonic relation with every divine stream simultaneously โ€” a feat so demanding it has been achieved only once before, by the Goddess herself. Your disciples achieve it together, their collective faith acting as a single instrument tuned to all frequencies at once. The universe hums in recognition.", + durationSeconds: 604_800, + id: "confluence_alignment", + name: "Confluence Alignment", + prerequisiteIds: [ "confluence_eddy" ], + rewards: [ { amount: 30_000_000_000, type: "prayers" }, { amount: 30_000_000, type: "divinity" }, { amount: 5, type: "stardust" } ], + status: "locked", + zoneId: "goddess_astral_confluence", + }, + + // โ”€โ”€ Zone 15: Celestial Throne โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Celestial Throne's antechamber stretches for an eternity in both directions โ€” a corridor of mirrors showing the Goddess from every angle at every moment she has ever existed. Your disciples walk it without stopping, eyes forward, learning the discipline of approaching divinity without losing themselves in reflection.", + durationSeconds: 259_200, + id: "throne_approach", + name: "Throne Approach", + prerequisiteIds: [], + rewards: [ { amount: 25_000_000_000, type: "prayers" }, { amount: 5, type: "stardust" } ], + status: "locked", + zoneId: "goddess_celestial_throne", + }, + { + description: "The Throne's outer sanctum is guarded by the Tribunal โ€” seven divine entities who assess the worthiness of any who would approach the Throne's inner chambers. Each member of the Tribunal poses a single question that cannot be prepared for. Your disciples answer honestly, and in their honesty, pass.", + durationSeconds: 432_000, + id: "throne_tribunal", + name: "Throne Tribunal", + prerequisiteIds: [ "throne_approach" ], + rewards: [ { amount: 50_000_000_000, type: "prayers" }, { amount: 25_000_000, type: "divinity" }, { amount: 6, type: "stardust" } ], + status: "locked", + zoneId: "goddess_celestial_throne", + }, + { + description: "The Throne's inner court is a space of perfect sovereignty where the Goddess's will becomes physical law. Your disciples learn to move within it โ€” each action requiring absolute intentionality, nothing done by habit or reflex, every breath a conscious act of devotion performed in the presence of ultimate authority.", + durationSeconds: 604_800, + id: "inner_court", + name: "Inner Court", + prerequisiteIds: [ "throne_tribunal" ], + rewards: [ { amount: 80_000_000_000, type: "prayers" }, { amount: 60_000_000, type: "divinity" }, { amount: 8, type: "stardust" } ], + status: "locked", + zoneId: "goddess_celestial_throne", + }, + { + description: "Surrounding the Throne itself are the Votive Pillars โ€” columns where the greatest prayers in history were once spoken and immediately crystallised. Your disciples read every pillar in sequence, and in reading them, add their own voices to the register of the worthy, speaking prayers that crystallise before the words have fully formed.", + durationSeconds: 734_400, + id: "votive_pillars", + name: "Votive Pillars", + prerequisiteIds: [ "inner_court" ], + rewards: [ { amount: 105_000_000_000, type: "prayers" }, { amount: 100_000_000, type: "divinity" }, { amount: 10, type: "stardust" } ], + status: "locked", + zoneId: "goddess_celestial_throne", + }, + { + description: "The Goddess acknowledges those who have walked the full path to her Throne. She does not speak โ€” she is too vast for words โ€” but the Throne's crystalline surface shifts to show your disciples' reflections looking back at them in divine perfection: not who they are, but who they are recognised as. It is enough. It is everything.", + durationSeconds: 864_000, + id: "throne_recognition", + name: "Throne Recognition", + prerequisiteIds: [ "votive_pillars" ], + rewards: [ { amount: 120_000_000_000, type: "prayers" }, { amount: 120_000_000, type: "divinity" }, { amount: 12, type: "stardust" } ], + status: "locked", + zoneId: "goddess_celestial_throne", + }, + + // โ”€โ”€ Zone 16: Infinite Choir โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Infinite Choir sings without end โ€” every voice that has ever offered devotion continuing here past death, past memory, past time. Your disciples enter and hear themselves already singing in it, their future voices reaching back to greet them. They add their present voices to the weave and feel complete for the first time.", + durationSeconds: 345_600, + id: "choir_entry", + name: "Choir Entry", + prerequisiteIds: [], + rewards: [ { amount: 100_000_000_000, type: "prayers" }, { amount: 8, type: "stardust" } ], + status: "locked", + zoneId: "goddess_infinite_choir", + }, + { + description: "The Choir's central harmonic โ€” the note on which all other voices converge โ€” has been drifting out of tune for centuries as the mortal worlds below have grown quieter in their devotion. Your disciples find the harmonic's root and pull it gently back into true, feeling every voice in the Choir shift and settle with a resonance that shakes the floor of heaven.", + durationSeconds: 604_800, + id: "harmonic_tuning", + name: "Harmonic Tuning", + prerequisiteIds: [ "choir_entry" ], + rewards: [ { amount: 200_000_000_000, type: "prayers" }, { amount: 100_000_000, type: "divinity" }, { amount: 12, type: "stardust" } ], + status: "locked", + zoneId: "goddess_infinite_choir", + }, + { + description: "Within the Choir dwells the Voice of First Praise โ€” the very first sound made in the Goddess's honour, still singing after all this time. Your disciples find it amid the vast chorus and listen without interrupting, learning the original cadence of worship, older than language, older than thought.", + durationSeconds: 777_600, + id: "voice_of_first_praise", + name: "Voice of First Praise", + prerequisiteIds: [ "harmonic_tuning" ], + rewards: [ { amount: 300_000_000_000, type: "prayers" }, { amount: 250_000_000, type: "divinity" }, { amount: 16, type: "stardust" } ], + status: "locked", + zoneId: "goddess_infinite_choir", + }, + { + description: "The Choir's outer reaches fade into silence โ€” not the silence of absence, but of potential, where new voices have not yet begun. Your disciples move through these quiet margins and seed them with new prayers, extending the Choir outward so that future devotees will have a place prepared for them when their own voices find the song.", + durationSeconds: 907_200, + id: "choir_extension", + name: "Choir Extension", + prerequisiteIds: [ "voice_of_first_praise" ], + rewards: [ { amount: 425_000_000_000, type: "prayers" }, { amount: 400_000_000, type: "divinity" }, { amount: 20, type: "stardust" } ], + status: "locked", + zoneId: "goddess_infinite_choir", + }, + { + description: "Perfection in the Infinite Choir does not mean singing better than all others โ€” it means knowing exactly how your voice completes the whole. Your disciples achieve this knowing: each finds the one pitch that only they can hold, and holds it without pride, without strain, without end. The Choir becomes truly infinite in the moment they join it fully.", + durationSeconds: 1_036_800, + id: "choir_perfection", + name: "Choir Perfection", + prerequisiteIds: [ "choir_extension" ], + rewards: [ { amount: 500_000_000_000, type: "prayers" }, { amount: 500_000_000, type: "divinity" }, { amount: 25, type: "stardust" } ], + status: "locked", + zoneId: "goddess_infinite_choir", + }, + + // โ”€โ”€ Zone 17: The Veil โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Veil is the membrane between existence and whatever the Goddess herself dwells within. Your disciples approach it for the first time and feel their perception of reality thin until they can see, flickering at the edge of vision, the shape of something so vast it has no edges. They retreat. They return. They learn to stand near what cannot be comprehended.", + durationSeconds: 432_000, + id: "veil_approach", + name: "Veil Approach", + prerequisiteIds: [], + rewards: [ { amount: 400_000_000_000, type: "prayers" }, { amount: 15, type: "stardust" } ], + status: "locked", + zoneId: "goddess_veil", + }, + { + description: "The Veil is not impenetrable โ€” it breathes, and in its exhalations, fragments of the beyond drift through. Your disciples collect these fragments: impossible colours, sounds that are also textures, emotions that have no earthly equivalents. They preserve each one in sacred containers, building a collection of the divine uncontainable.", + durationSeconds: 777_600, + id: "veil_fragments", + name: "Veil Fragments", + prerequisiteIds: [ "veil_approach" ], + rewards: [ { amount: 800_000_000_000, type: "prayers" }, { amount: 400_000_000, type: "divinity" }, { amount: 22, type: "stardust" } ], + status: "locked", + zoneId: "goddess_veil", + }, + { + combatPowerRequired: 1_000_000, + description: "The Veil is attended by Threshold Guardians โ€” not hostile, but absolute in their function. Nothing unworthy passes. Your disciples undergo the Guardians' assessment, which involves no questions and no tasks but simply standing still while the Guardians look through them. Those found wanting are sent back without shame. Your disciples are not sent back.", + durationSeconds: 950_400, + id: "threshold_assessment", + name: "Threshold Assessment", + prerequisiteIds: [ "veil_fragments" ], + rewards: [ { amount: 1_200_000_000_000, type: "prayers" }, { amount: 1_000_000_000, type: "divinity" }, { amount: 30, type: "stardust" } ], + status: "locked", + zoneId: "goddess_veil", + }, + { + combatPowerRequired: 2_000_000, + description: "The final ritual before crossing the Veil requires that your disciples release everything they have accumulated โ€” not lose it, but hold it loosely enough that they could release it. Every prayer earned, every piece of knowledge gained, every devotion offered: they hold it all at the tips of their fingers and wait to see whether the Goddess calls them through empty-handed. The Goddess is pleased by the willingness alone.", + durationSeconds: 1_123_200, + id: "veil_release", + name: "Veil Release", + prerequisiteIds: [ "threshold_assessment" ], + rewards: [ { amount: 1_700_000_000_000, type: "prayers" }, { amount: 1_600_000_000, type: "divinity" }, { amount: 38, type: "stardust" } ], + status: "locked", + zoneId: "goddess_veil", + }, + { + combatPowerRequired: 3_000_000, + description: "Your disciples step through the Veil. Language ends here. What they experience cannot be written and does not need to be. They return โ€” for they must return, there is still work to do โ€” carrying with them the absolute certainty that the Goddess is real, that she is present, and that everything they have ever done in her name was seen and held and loved.", + durationSeconds: 1_296_000, + id: "veil_crossing", + name: "Veil Crossing", + prerequisiteIds: [ "veil_release" ], + rewards: [ { amount: 2_000_000_000_000, type: "prayers" }, { amount: 2_000_000_000, type: "divinity" }, { amount: 50, type: "stardust" } ], + status: "locked", + zoneId: "goddess_veil", + }, + + // โ”€โ”€ Zone 18: Divine Heart โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + description: "The Divine Heart is not a place but a state of being โ€” the innermost reality where the Goddess's own nature is laid bare. Your disciples arrive and find that they are already known here, have always been known here, that every prayer they ever offered was heard in this very chamber before it left their lips. They kneel in understanding rather than supplication.", + durationSeconds: 604_800, + id: "heart_arrival", + name: "Heart Arrival", + prerequisiteIds: [], + rewards: [ { amount: 1_500_000_000_000, type: "prayers" }, { amount: 25, type: "stardust" } ], + status: "locked", + zoneId: "goddess_divine_heart", + }, + { + description: "The Heart pulses with a rhythm that predates creation and will outlast its end. Your disciples synchronise their own heartbeats to it โ€” not through technique but through surrender โ€” and in those moments of synchrony, understand what the universe is for. The knowledge is too large to keep but leaves an impression that reshapes everything they do thereafter.", + durationSeconds: 950_400, + id: "heart_synchrony", + name: "Heart Synchrony", + prerequisiteIds: [ "heart_arrival" ], + rewards: [ { amount: 3_000_000_000_000, type: "prayers" }, { amount: 1_500_000_000, type: "divinity" }, { amount: 35, type: "stardust" } ], + status: "locked", + zoneId: "goddess_divine_heart", + }, + { + combatPowerRequired: 5_000_000, + description: "The Heart contains the Wound โ€” a sorrow the Goddess has carried since she first loved something that could be lost. Your disciples sit with her Wound, not trying to heal it, not offering solutions, simply bearing witness to divine grief with their full presence. In being witnessed, the Wound does not close but becomes bearable. The Goddess is grateful in ways words cannot approach.", + durationSeconds: 1_209_600, + id: "heart_witness", + name: "Heart Witness", + prerequisiteIds: [ "heart_synchrony" ], + rewards: [ { amount: 5_000_000_000_000, type: "prayers" }, { amount: 4_000_000_000, type: "divinity" }, { amount: 50, type: "stardust" } ], + status: "locked", + zoneId: "goddess_divine_heart", + }, + { + combatPowerRequired: 8_000_000, + description: "The Heart's deepest chamber holds the Origin Flame โ€” the first act of divine will, still burning, the moment from which all subsequent existence cascades. Your disciples sit before it and add their own lights to it: not to contribute to creation, which is already complete, but to affirm that they are glad to exist within it and would choose to again.", + durationSeconds: 1_468_800, + id: "origin_flame", + name: "Origin Flame", + prerequisiteIds: [ "heart_witness" ], + rewards: [ { amount: 7_000_000_000_000, type: "prayers" }, { amount: 7_000_000_000, type: "divinity" }, { amount: 65, type: "stardust" } ], + status: "locked", + zoneId: "goddess_divine_heart", + }, + { + combatPowerRequired: 10_000_000, + description: "Union is not merger. Your disciples do not cease to be themselves โ€” they become fully themselves for the first time, held in the Goddess's complete understanding and love. This is the end of the long pilgrimage: not dissolution but recognition. They are seen. They are known. They are cherished. And they carry that forward into all the infinite work that remains.", + durationSeconds: 1_728_000, + id: "divine_heart_union", + name: "Divine Heart Union", + prerequisiteIds: [ "origin_flame" ], + rewards: [ { amount: 8_000_000_000_000, type: "prayers" }, { amount: 8_000_000_000, type: "divinity" }, { amount: 80, type: "stardust" } ], + status: "locked", + zoneId: "goddess_divine_heart", + }, +]; diff --git a/apps/api/src/data/goddessUpgrades.ts b/apps/api/src/data/goddessUpgrades.ts new file mode 100644 index 0000000..f3a8883 --- /dev/null +++ b/apps/api/src/data/goddessUpgrades.ts @@ -0,0 +1,729 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable max-lines -- Data file */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessUpgrade } from "@elysium/types"; + +export const defaultGoddessUpgrades: Array = [ + // โ”€โ”€ Prayer Income โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + costDivinity: 0, + costPrayers: 50, + costStardust: 0, + description: "A morning offering to the goddess awakens dormant prayer energy. All prayers/s ร—1.25.", + id: "prayer_offering_1", + multiplier: 1.25, + name: "Morning Offering I", + purchased: false, + target: "prayers", + unlocked: true, + }, + { + costDivinity: 0, + costPrayers: 200, + costStardust: 0, + description: "Sustained devotion amplifies the flow of prayers from all disciples. All prayers/s ร—1.5.", + id: "prayer_offering_2", + multiplier: 1.5, + name: "Morning Offering II", + purchased: false, + target: "prayers", + unlocked: true, + }, + { + costDivinity: 1, + costPrayers: 1000, + costStardust: 0, + description: "The prayers now carry a resonance that doubles their effect across the whole order. All prayers/s ร—2.", + id: "prayer_offering_3", + multiplier: 2, + name: "Morning Offering III", + purchased: false, + target: "prayers", + unlocked: true, + }, + { + costDivinity: 2, + costPrayers: 5000, + costStardust: 0, + description: "The prayers reach into the divine substrate itself and triple its yield. All prayers/s ร—3.", + id: "prayer_offering_4", + multiplier: 3, + name: "Morning Offering IV", + purchased: false, + target: "prayers", + unlocked: true, + }, + { + costDivinity: 20, + costPrayers: 50_000, + costStardust: 0, + description: "A divine spark ignites every prayer, amplifying them fivefold at the source. All prayers/s ร—5.", + id: "divine_spark_1", + multiplier: 5, + name: "Divine Spark I", + purchased: false, + target: "prayers", + unlocked: true, + }, + { + costDivinity: 100, + costPrayers: 500_000, + costStardust: 1, + description: "The spark becomes a flame that burns across all prayer โ€” eternal and self-sustaining. All prayers/s ร—25.", + id: "divine_spark_2", + multiplier: 25, + name: "Divine Spark II", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 250, + costPrayers: 2_500_000, + costStardust: 2, + description: "The goddess herself hums through every prayer channel, multiplying output fivefold again. All prayers/s ร—50.", + id: "divine_spark_3", + multiplier: 50, + name: "Divine Spark III", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 600, + costPrayers: 12_000_000, + costStardust: 4, + description: "An unbroken stream of holy resonance carries prayers beyond mortal comprehension. All prayers/s ร—100.", + id: "resonant_hymn_1", + multiplier: 100, + name: "Resonant Hymn I", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 1500, + costPrayers: 60_000_000, + costStardust: 8, + description: "A hymn that has never stopped since creation pours through every soul in the order. All prayers/s ร—200.", + id: "resonant_hymn_2", + multiplier: 200, + name: "Resonant Hymn II", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 4000, + costPrayers: 300_000_000, + costStardust: 15, + description: "The divine frequency locks into the cosmic constant, rewriting the rules of prayer. All prayers/s ร—500.", + id: "resonant_hymn_3", + multiplier: 500, + name: "Resonant Hymn III", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 10_000, + costPrayers: 1_500_000_000, + costStardust: 30, + description: "The hymn ascends beyond sound into pure divine intention. All prayers/s ร—1000.", + id: "eternal_chorus_1", + multiplier: 1000, + name: "Eternal Chorus I", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 25_000, + costPrayers: 8_000_000_000, + costStardust: 60, + description: "The chorus of the faithful echoes through dimensions unseen. All prayers/s ร—2500.", + id: "eternal_chorus_2", + multiplier: 2500, + name: "Eternal Chorus II", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 60_000, + costPrayers: 40_000_000_000, + costStardust: 120, + description: "The goddess weeps tears of divine light โ€” each one a thousandfold prayer. All prayers/s ร—5000.", + id: "divine_tears", + multiplier: 5000, + name: "Divine Tears", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 150_000, + costPrayers: 200_000_000_000, + costStardust: 250, + description: "The prayers of the entire goddess expansion merge into a single radiant beam. All prayers/s ร—10000.", + id: "radiant_convergence", + multiplier: 10_000, + name: "Radiant Convergence", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 400_000, + costPrayers: 1_000_000_000_000, + costStardust: 500, + description: "The infinite expanse of prayer reaches completion โ€” a perfect loop of divine worship. All prayers/s ร—25000.", + id: "prayer_apotheosis", + multiplier: 25_000, + name: "Prayer Apotheosis", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 1_000_000, + costPrayers: 5_000_000_000_000, + costStardust: 1000, + description: "The last prayer merges with the first in an eternal cycle with no beginning or end. All prayers/s ร—50000.", + id: "omega_devotion", + multiplier: 50_000, + name: "Omega Devotion", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 2_500_000, + costPrayers: 25_000_000_000_000, + costStardust: 2000, + description: "Every soul in the cosmos utters your name. All prayers/s ร—100000.", + id: "cosmic_worship", + multiplier: 100_000, + name: "Cosmic Worship", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 6_000_000, + costPrayers: 120_000_000_000_000, + costStardust: 4000, + description: "Beyond even the gods, the universe itself becomes your congregation. All prayers/s ร—250000.", + id: "universal_faith", + multiplier: 250_000, + name: "Universal Faith", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 15_000_000, + costPrayers: 600_000_000_000_000, + costStardust: 8000, + description: "The goddess is all. The prayers are all. There is nothing that does not pray. All prayers/s ร—500000.", + id: "all_is_prayer", + multiplier: 500_000, + name: "All Is Prayer", + purchased: false, + target: "prayers", + unlocked: false, + }, + { + costDivinity: 40_000_000, + costPrayers: 3_000_000_000_000_000, + costStardust: 15_000, + description: "The final prayer โ€” the one that was always being prayed, before the first word was ever spoken. All prayers/s ร—1000000.", + id: "the_last_prayer", + multiplier: 1_000_000, + name: "The Last Prayer", + purchased: false, + target: "prayers", + unlocked: false, + }, + // โ”€โ”€ Disciple-specific โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + costDivinity: 0, + costPrayers: 50, + costStardust: 0, + description: "Novices meditate on the basic prayers and double their output.", + discipleId: "novice", + id: "novice_blessing", + multiplier: 2, + name: "Novice Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 0, + costPrayers: 200, + costStardust: 0, + description: "Initiates channel deeper devotion and double their prayer generation.", + discipleId: "initiate", + id: "initiate_blessing", + multiplier: 2, + name: "Initiate Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 1, + costPrayers: 1000, + costStardust: 0, + description: "Acolytes unlock deeper devotion rites that double their prayer output.", + discipleId: "acolyte", + id: "acolyte_blessing", + multiplier: 2, + name: "Acolyte Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 2, + costPrayers: 5000, + costStardust: 0, + description: "Devotees achieve deeper attunement with the divine and double their output.", + discipleId: "devotee", + id: "devotee_blessing", + multiplier: 2, + name: "Devotee Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 5, + costPrayers: 25_000, + costStardust: 0, + description: "Adepts reach mastery of the first prayer form, doubling their generation.", + discipleId: "adept", + id: "adept_blessing", + multiplier: 2, + name: "Adept Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 12, + costPrayers: 150_000, + costStardust: 0, + description: "Priests achieve full communion with the divine and double their prayer output.", + discipleId: "priest", + id: "priest_blessing", + multiplier: 2, + name: "Priest Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 30, + costPrayers: 1_000_000, + costStardust: 0, + description: "High priests channel the goddess's voice directly and double their prayer generation.", + discipleId: "high_priest", + id: "high_priest_blessing", + multiplier: 2, + name: "High Priest Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 80, + costPrayers: 7_000_000, + costStardust: 0, + description: "Divine scholars unlock the deepest understanding of prayer mechanics and double their output.", + discipleId: "divine_scholar", + id: "divine_scholar_blessing", + multiplier: 2, + name: "Divine Scholar Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 200, + costPrayers: 50_000_000, + costStardust: 0, + description: "Holy champions have mastered the art of sacred battle and doubled their fervour.", + discipleId: "holy_champion", + id: "holy_champion_blessing", + multiplier: 2, + name: "Holy Champion Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 500, + costPrayers: 350_000_000, + costStardust: 1, + description: "Celestial adepts have ascended beyond mortal devotion, drawing twice the divine resonance.", + discipleId: "celestial_adept", + id: "celestial_adept_blessing", + multiplier: 2, + name: "Celestial Adept Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 1200, + costPrayers: 1_750_000_000, + costStardust: 2, + description: "Seraphic masters commune directly with the source, generating prayers at twice the rate.", + discipleId: "seraphic_master", + id: "seraphic_master_blessing", + multiplier: 2, + name: "Seraphic Master Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 3000, + costPrayers: 8_000_000_000, + costStardust: 4, + description: "Divine invokers have woven themselves into the prayer lattice, doubling every invocation.", + discipleId: "divine_invoker", + id: "divine_invoker_blessing", + multiplier: 2, + name: "Divine Invoker Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 8000, + costPrayers: 40_000_000_000, + costStardust: 8, + description: "Astral templars carry the goddess's word across realms, amplifying their prayer twofold.", + discipleId: "astral_templar", + id: "astral_templar_blessing", + multiplier: 2, + name: "Astral Templar Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 20_000, + costPrayers: 200_000_000_000, + costStardust: 15, + description: "Empyrean heralds broadcast divine truth across the heavens, generating prayers at twice the scale.", + discipleId: "empyrean_herald", + id: "empyrean_herald_blessing", + multiplier: 2, + name: "Empyrean Herald Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + { + costDivinity: 50_000, + costPrayers: 1_000_000_000_000, + costStardust: 30, + description: "Primordial heralds echo from before the dawn of time, their prayers resounding doubly through eternity.", + discipleId: "primordial_herald", + id: "primordial_herald_blessing", + multiplier: 2, + name: "Primordial Herald Blessing", + purchased: false, + target: "disciple", + unlocked: false, + }, + // โ”€โ”€ Global Income โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + costDivinity: 0, + costPrayers: 100, + costStardust: 0, + description: "Divine inspiration flows through the entire order. All production ร—1.25.", + id: "divine_inspiration_1", + multiplier: 1.25, + name: "Divine Inspiration I", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 1, + costPrayers: 500, + costStardust: 0, + description: "Deeper inspiration resonates with every disciple's faith. All production ร—1.5.", + id: "divine_inspiration_2", + multiplier: 1.5, + name: "Divine Inspiration II", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 3, + costPrayers: 2500, + costStardust: 0, + description: "The inspiration reaches its fullest expression โ€” doubling everything the order produces. All production ร—2.", + id: "divine_inspiration_3", + multiplier: 2, + name: "Divine Inspiration III", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 10, + costPrayers: 15_000, + costStardust: 0, + description: "Inspiration floods the entire divine order with fivefold power. All production ร—5.", + id: "divine_inspiration_4", + multiplier: 5, + name: "Divine Inspiration IV", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 30, + costPrayers: 100_000, + costStardust: 0, + description: "The goddess's own inspiration touches every soul in the order. All production ร—10.", + id: "divine_inspiration_5", + multiplier: 10, + name: "Divine Inspiration V", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 80, + costPrayers: 750_000, + costStardust: 1, + description: "The goddess's will reshapes the order itself, elevating every act of worship. All production ร—25.", + id: "celestial_mandate_1", + multiplier: 25, + name: "Celestial Mandate I", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 250, + costPrayers: 5_000_000, + costStardust: 3, + description: "A celestial decree multiplies the fruits of every prayer, deed, and devotion. All production ร—50.", + id: "celestial_mandate_2", + multiplier: 50, + name: "Celestial Mandate II", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 800, + costPrayers: 30_000_000, + costStardust: 8, + description: "The fabric of the divine order itself vibrates at the goddess's frequency. All production ร—100.", + id: "divine_frequency", + multiplier: 100, + name: "Divine Frequency", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 2500, + costPrayers: 200_000_000, + costStardust: 20, + description: "All boundaries between sacred and mundane dissolve โ€” everything becomes an act of worship. All production ร—250.", + id: "sacred_dissolution", + multiplier: 250, + name: "Sacred Dissolution", + purchased: false, + target: "global", + unlocked: false, + }, + { + costDivinity: 8000, + costPrayers: 1_200_000_000, + costStardust: 50, + description: "The goddess breathes life into every output of the divine order without exception. All production ร—500.", + id: "breath_of_the_goddess", + multiplier: 500, + name: "Breath of the Goddess", + purchased: false, + target: "global", + unlocked: false, + }, + // โ”€โ”€ Consecration โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + costDivinity: 2, + costPrayers: 500, + costStardust: 0, + description: "Enhanced consecration rites boost divine income after each rebirth. Consecration production multiplier ร—1.25.", + id: "consecration_power_1", + multiplier: 1.25, + name: "Consecration Power I", + purchased: false, + target: "consecration", + unlocked: false, + }, + { + costDivinity: 10, + costPrayers: 5000, + costStardust: 0, + description: "Deeper consecration rites push the rebirth multiplier further. Consecration production multiplier ร—1.5.", + id: "consecration_power_2", + multiplier: 1.5, + name: "Consecration Power II", + purchased: false, + target: "consecration", + unlocked: false, + }, + { + costDivinity: 35, + costPrayers: 30_000, + costStardust: 0, + description: "The consecration ritual reaches its apex, doubling what each sacred rebirth returns. Consecration production multiplier ร—2.", + id: "consecration_power_3", + multiplier: 2, + name: "Consecration Power III", + purchased: false, + target: "consecration", + unlocked: false, + }, + { + costDivinity: 120, + costPrayers: 200_000, + costStardust: 1, + description: "Consecration transcends ritual and becomes a fundamental law of the divine order. Consecration production multiplier ร—3.", + id: "consecration_law_1", + multiplier: 3, + name: "Consecration Law I", + purchased: false, + target: "consecration", + unlocked: false, + }, + { + costDivinity: 400, + costPrayers: 1_500_000, + costStardust: 3, + description: "Each rebirth now unleashes a torrent of divine energy fivefold beyond its former scope. Consecration production multiplier ร—5.", + id: "consecration_law_2", + multiplier: 5, + name: "Consecration Law II", + purchased: false, + target: "consecration", + unlocked: false, + }, + { + costDivinity: 1500, + costPrayers: 10_000_000, + costStardust: 8, + description: "The ultimate consecration insight โ€” every cycle of rebirth rings with tenfold divine reward. Consecration production multiplier ร—10.", + id: "consecration_apotheosis", + multiplier: 10, + name: "Consecration Apotheosis", + purchased: false, + target: "consecration", + unlocked: false, + }, + // โ”€โ”€ Combat โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + costDivinity: 0, + costPrayers: 75, + costStardust: 0, + description: "Sacred combat training strengthens every disciple's fighting spirit. Combat power ร—1.25.", + id: "sacred_combat_1", + multiplier: 1.25, + name: "Sacred Combat I", + purchased: false, + target: "boss", + unlocked: false, + }, + { + costDivinity: 1, + costPrayers: 300, + costStardust: 0, + description: "Advanced combat rites push disciples' power further. Combat power ร—1.5.", + id: "sacred_combat_2", + multiplier: 1.5, + name: "Sacred Combat II", + purchased: false, + target: "boss", + unlocked: false, + }, + { + costDivinity: 3, + costPrayers: 1500, + costStardust: 0, + description: "The highest combat discipline doubles every disciple's power in divine battles. Combat power ร—2.", + id: "sacred_combat_3", + multiplier: 2, + name: "Sacred Combat III", + purchased: false, + target: "boss", + unlocked: false, + }, + { + costDivinity: 10, + costPrayers: 10_000, + costStardust: 0, + description: "Divine wrath is channelled through the fists of every warrior in the order. Combat power ร—3.", + id: "divine_wrath_1", + multiplier: 3, + name: "Divine Wrath I", + purchased: false, + target: "boss", + unlocked: false, + }, + { + costDivinity: 40, + costPrayers: 80_000, + costStardust: 1, + description: "Wrath given form โ€” the goddess's judgement multiplies the strike of every disciple fivefold. Combat power ร—5.", + id: "divine_wrath_2", + multiplier: 5, + name: "Divine Wrath II", + purchased: false, + target: "boss", + unlocked: false, + }, + { + costDivinity: 150, + costPrayers: 600_000, + costStardust: 3, + description: "The full fury of the goddess incarnate flows through every blade, fist, and prayer-strike. Combat power ร—10.", + id: "wrath_incarnate", + multiplier: 10, + name: "Wrath Incarnate", + purchased: false, + target: "boss", + unlocked: false, + }, + // โ”€โ”€ Utility โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + { + costDivinity: 3, + costPrayers: 1000, + costStardust: 0, + description: "Unlock the Auto-Disciple toggle. When enabled, the tick engine will automatically recruit the highest-tier disciple you can afford.", + id: "auto_disciple", + multiplier: 1, + name: "Autonomous Devotion", + purchased: false, + target: "global", + unlocked: false, + }, +]; diff --git a/apps/api/src/data/goddessZones.ts b/apps/api/src/data/goddessZones.ts new file mode 100644 index 0000000..7c10eff --- /dev/null +++ b/apps/api/src/data/goddessZones.ts @@ -0,0 +1,191 @@ +/** + * @file Game data definitions. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* eslint-disable stylistic/max-len -- Data content */ +import type { GoddessZone } from "@elysium/types"; + +export const defaultGoddessZones: Array = [ + { + description: + "A realm of endless bloom where divine flowers grow in patterns that mirror the stars above. This is where newly awakened disciples take their first steps into the goddess's domain โ€” and where the hardest part of the journey quietly begins.", + emoji: "๐ŸŒธ", + id: "goddess_celestial_garden", + name: "The Celestial Garden", + status: "locked", + unlockBossId: null, + unlockQuestId: null, + }, + { + description: + "A vast temple of living crystal whose facets hold every divine truth ever recorded. The scholars here do not distinguish between knowing something and becoming it.", + emoji: "๐Ÿ’Ž", + id: "goddess_crystal_sanctum", + name: "The Crystal Sanctum", + status: "locked", + unlockBossId: "heavenly_warden", + unlockQuestId: "first_prayer", + }, + { + description: + "A cathedral suspended in the astral plane, its spires reaching into realms that have no name. The choir that fills it has been singing the same hymn since before mortals learned to speak.", + emoji: "โœจ", + id: "goddess_astral_cathedral", + name: "The Astral Cathedral", + status: "locked", + unlockBossId: "sanctum_keeper", + unlockQuestId: "divine_meditation", + }, + { + description: + "The fortress of the celestial host โ€” a bastion of divine authority so immense that mortal minds instinctively refuse to estimate its size. The warriors here have never known defeat.", + emoji: "๐Ÿฐ", + id: "goddess_empyrean_citadel", + name: "The Empyrean Citadel", + status: "locked", + unlockBossId: "cathedral_warden", + unlockQuestId: "astral_revelation", + }, + { + description: + "The wellspring of all creation โ€” the point from which every soul, every star, and every prayer ultimately originates. Standing here is not comfortable. It is, however, true.", + emoji: "๐ŸŒŠ", + id: "goddess_primordial_springs", + name: "The Primordial Springs", + status: "locked", + unlockBossId: "citadel_guardian", + unlockQuestId: "empyrean_ascent", + }, + { + description: + "The highest reach of the divine realm โ€” where the goddess herself resides, and where all divine law originates. Everything below this point is a reflection of what exists here. Nothing here reflects anything else.", + emoji: "๐Ÿ‘‘", + id: "goddess_eternal_firmament", + name: "The Eternal Firmament", + status: "locked", + unlockBossId: "wellspring_warden", + unlockQuestId: "springs_blessing", + }, + { + description: + "An ancient grove where divine trees have grown for longer than the firmament has existed. Their roots drink directly from the primordial springs, and their canopy touches realms that have no name. Pilgrims do not enter this grove. They are invited.", + emoji: "๐ŸŒฟ", + id: "goddess_sacred_grove", + name: "The Sacred Grove", + status: "locked", + unlockBossId: "the_goddess_avatar", + unlockQuestId: "eternal_ascension", + }, + { + description: + "A realm of pure, unfiltered divine radiance โ€” light made absolute, stripped of shadow, warmth, or mercy. Those who walk here must learn to see without their eyes, because the light does not illuminate. It simply is.", + emoji: "โ˜€๏ธ", + id: "goddess_luminous_expanse", + name: "The Luminous Expanse", + status: "locked", + unlockBossId: "grove_sovereign", + unlockQuestId: "grove_harmony", + }, + { + description: + "The forge where the goddess shaped the first stars and the last laws of existence. The heat here is not heat โ€” it is conviction made manifest. Every tool ever used to build a world was made here, and every one of them remembers.", + emoji: "๐Ÿ”ฅ", + id: "goddess_heavenly_forge", + name: "The Heavenly Forge", + status: "locked", + unlockBossId: "light_titan", + unlockQuestId: "light_transcendence", + }, + { + description: + "The sanctum of the divine oracle โ€” the seat of all prophecy, all foresight, and all terrible knowledge that cannot be unlearned. The oracle does not grant visions here. The visions grant themselves, and they do not ask permission.", + emoji: "๐Ÿ”ฎ", + id: "goddess_oracle_sanctum", + name: "The Oracle Sanctum", + status: "locked", + unlockBossId: "forge_master", + unlockQuestId: "forge_mastery", + }, + { + description: + "The nesting ground of the seraphim โ€” creatures that were never mortal, never made, and have no concept of a time before themselves. The nest is not a physical place. It is a state of being that those who reach it will never fully leave.", + emoji: "๐Ÿชถ", + id: "goddess_seraphs_nest", + name: "The Seraph's Nest", + status: "locked", + unlockBossId: "grand_oracle", + unlockQuestId: "oracle_truth", + }, + { + description: + "The repository of all divine knowledge โ€” every truth the goddess has ever uttered, every law she has written, every act of creation she has witnessed. The archive is infinite, and it is still growing. The librarians here have forgotten how long they have served.", + emoji: "๐Ÿ“œ", + id: "goddess_divine_archive", + name: "The Divine Archive", + status: "locked", + unlockBossId: "supreme_seraph", + unlockQuestId: "seraph_ascension", + }, + { + description: + "The depths that exist beneath the divine realm โ€” the sacred abyss from which the goddess drew the first darkness that gives light its meaning. Nothing down here is evil. It is simply the part of creation that was never meant to be seen.", + emoji: "๐Ÿ•ณ๏ธ", + id: "goddess_consecrated_depths", + name: "The Consecrated Depths", + status: "locked", + unlockBossId: "archive_guardian", + unlockQuestId: "archive_completion", + }, + { + description: + "The point where all divine currents converge โ€” the confluence of every law, every prayer, every act of faith ever offered. Standing here is not a spiritual experience. It is a mathematical one. You are the solution to an equation the goddess has been solving since the beginning.", + emoji: "๐ŸŒŒ", + id: "goddess_astral_confluence", + name: "The Astral Confluence", + status: "locked", + unlockBossId: "depths_sovereign", + unlockQuestId: "depths_revelation", + }, + { + description: + "The throne from which the goddess first looked down upon creation and chose to love it. It has not been sat in since. To approach it is to feel the weight of that choice pressing against you โ€” the full, impossible gravity of a god who decided the universe was worth keeping.", + emoji: "โšก", + id: "goddess_celestial_throne", + name: "The Celestial Throne", + status: "locked", + unlockBossId: "confluence_arbiter", + unlockQuestId: "confluence_alignment", + }, + { + description: + "The choir of infinite voices โ€” every soul that has ever achieved divinity, still singing the hymn that carried them there. The music here does not end. It has never ended. It is, in the strictest sense, the sound of eternity doing what eternity does.", + emoji: "๐ŸŽต", + id: "goddess_infinite_choir", + name: "The Infinite Choir", + status: "locked", + unlockBossId: "throne_guardian", + unlockQuestId: "throne_recognition", + }, + { + description: + "The veil that separates the divine realm from whatever lies beyond it โ€” the last border between what can be known and what the goddess herself has chosen not to look at directly. Crossing it is not forbidden. It is simply unprecedented.", + emoji: "๐ŸŒซ๏ธ", + id: "goddess_veil", + name: "The Veil", + status: "locked", + unlockBossId: "choir_conductor", + unlockQuestId: "choir_perfection", + }, + { + description: + "The heart of the divine โ€” the absolute centre of the goddess's being, the point from which all her love and all her law and all her creation ultimately originates. You have walked the entire length of her domain to stand here. She has been waiting. She is not surprised.", + emoji: "๐Ÿ’–", + id: "goddess_divine_heart", + name: "The Divine Heart", + status: "locked", + unlockBossId: "veil_guardian", + unlockQuestId: "veil_crossing", + }, +]; diff --git a/apps/api/vitest.config.ts b/apps/api/vitest.config.ts index 00cf5c6..3785835 100644 --- a/apps/api/vitest.config.ts +++ b/apps/api/vitest.config.ts @@ -10,6 +10,20 @@ export default defineConfig({ "src/db/client.ts", "src/index.ts", "src/data/materials.ts", + // Goddess expansion data files โ€” excluded until goddess routes import them in a later chunk + "src/data/goddessAchievements.ts", + "src/data/goddessBosses.ts", + "src/data/goddessConsecrationUpgrades.ts", + "src/data/goddessCrafting.ts", + "src/data/goddessDisciples.ts", + "src/data/goddessEnlightenmentUpgrades.ts", + "src/data/goddessEquipment.ts", + "src/data/goddessExplorations.ts", + "src/data/goddessMaterials.ts", + "src/data/goddessQuests.ts", + "src/data/goddessUpgrades.ts", + "src/data/goddessEquipmentSets.ts", + "src/data/goddessZones.ts", ], thresholds: { statements: 100, diff --git a/goddess-todo.md b/goddess-todo.md index cff4ef1..c214fa9 100644 --- a/goddess-todo.md +++ b/goddess-todo.md @@ -15,18 +15,23 @@ Branch: `feat/goddess` - [x] Export all new types from `packages/types` - Lint โœ… ยท Build โœ… ยท Tests โœ… (100% coverage) -## Chunk 2 โ€” Data -- [ ] `goddess-zones.ts` โ€” goddess zone definitions -- [ ] `goddess-bosses.ts` โ€” goddess boss definitions -- [ ] `goddess-quests.ts` โ€” goddess quest definitions -- [ ] `goddess-disciples.ts` โ€” disciple (adventurer) tier definitions -- [ ] `goddess-equipment.ts` โ€” goddess equipment definitions -- [ ] `goddess-upgrades.ts` โ€” goddess upgrade definitions -- [ ] `goddess-prestige-upgrades.ts` โ€” consecration upgrade definitions -- [ ] `goddess-transcendence-upgrades.ts` โ€” enlightenment upgrade definitions -- [ ] `goddess-crafting.ts` โ€” goddess materials + recipes -- [ ] `goddess-explorations.ts` โ€” goddess exploration areas -- [ ] `goddess-achievements.ts` โ€” goddess achievement definitions +## Chunk 2 โ€” Data โœ… COMPLETE +- [x] `goddessZones.ts` โ€” 18 goddess zones +- [x] `goddessBosses.ts` โ€” 72 bosses (4 per zone) +- [x] `goddessQuests.ts` โ€” 90 quests (5 per zone) +- [x] `goddessDisciples.ts` โ€” 32 disciple tiers (oracle/seraph/invoker/templar/herald/warden classes) +- [x] `goddessEquipment.ts` โ€” 53 equipment pieces (18 relics, 18 vestments, 17 sigils) +- [x] `goddessEquipmentSets.ts` โ€” 9 equipment sets (with GoddessEquipmentSet type) +- [x] `goddessUpgrades.ts` โ€” 57 upgrades (prayers/global/combat/consecration/disciple/boss) +- [x] `goddessConsecrationUpgrades.ts` โ€” 25 consecration upgrades +- [x] `goddessEnlightenmentUpgrades.ts` โ€” 15 enlightenment upgrades +- [x] `goddessMaterials.ts` โ€” 54 sacred materials (3 per zone) +- [x] `goddessCrafting.ts` โ€” 36 crafting recipes (2 per zone) +- [x] `goddessExplorations.ts` โ€” 72 exploration areas (4 per zone) +- [x] `goddessAchievements.ts` โ€” 40 achievements +- [x] `GoddessEquipmentSet` + `computeGoddessSetBonuses` added to `packages/types` +- NOTE: All data files excluded from coverage until Chunk 4 routes import them +- Lint โœ… ยท Build โœ… ยท Tests โœ… (100% coverage) ## Chunk 3 โ€” Sync / Sanitize - [ ] Update `validateAndSanitize` to inject goddess state defaults for existing saves diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 8271a72..a2f2f51 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -142,6 +142,11 @@ export type { GoddessQuestRewardType, GoddessQuestStatus, } from "./interfaces/goddessQuest.js"; +export type { + GoddessEquipmentSet, + GoddessEquipmentSetBonus, +} from "./interfaces/goddessEquipmentSet.js"; +export { computeGoddessSetBonuses } from "./interfaces/goddessEquipmentSet.js"; export type { GoddessState } from "./interfaces/goddessState.js"; export type { GoddessUpgrade, diff --git a/packages/types/src/interfaces/goddessEquipmentSet.ts b/packages/types/src/interfaces/goddessEquipmentSet.ts new file mode 100644 index 0000000..2965c30 --- /dev/null +++ b/packages/types/src/interfaces/goddessEquipmentSet.ts @@ -0,0 +1,69 @@ +/** + * @file Goddess Equipment Set types for the Elysium game. + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +interface GoddessEquipmentSetBonus { + combatMultiplier?: number; + divinityMultiplier?: number; + prayersMultiplier?: number; +} + +interface GoddessEquipmentSet { + id: string; + name: string; + description: string; + + /** + * Goddess equipment IDs that make up this set. + */ + pieces: Array; + bonuses: { + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 2: GoddessEquipmentSetBonus; + // eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys + 3: GoddessEquipmentSetBonus; + }; +} + +/** + * Given a list of equipped goddess item IDs and a set catalogue, returns the + * combined multiplicative bonuses granted by all active set bonuses. + * @param equippedItemIds - The IDs of goddess items currently equipped. + * @param sets - The full catalogue of goddess equipment sets to evaluate against. + * @returns The combined prayers, combat, and divinity multipliers from active set bonuses. + */ +const computeGoddessSetBonuses = ( + equippedItemIds: Array, + sets: Array, +): { + combatMultiplier: number; + divinityMultiplier: number; + prayersMultiplier: number; +} => { + let prayersMultiplier = 1; + let combatMultiplier = 1; + let divinityMultiplier = 1; + + for (const set of sets) { + const count = set.pieces.filter((id) => { + return equippedItemIds.includes(id); + }).length; + for (const threshold of [ 2, 3 ] as const) { + if (count >= threshold) { + const bonus = set.bonuses[threshold]; + prayersMultiplier = prayersMultiplier * (bonus.prayersMultiplier ?? 1); + combatMultiplier = combatMultiplier * (bonus.combatMultiplier ?? 1); + divinityMultiplier + = divinityMultiplier * (bonus.divinityMultiplier ?? 1); + } + } + } + + return { combatMultiplier, divinityMultiplier, prayersMultiplier }; +}; + +export type { GoddessEquipmentSet, GoddessEquipmentSetBonus }; +export { computeGoddessSetBonuses };