generated from nhcarrigan/template
Compare commits
1 Commits
952e9d6299
..
v0.4.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 666a5b2d6d |
@@ -149,7 +149,7 @@ export const defaultAchievements: Array<Achievement> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
condition: { amount: 18, type: "bossesDefeated" },
|
condition: { amount: 18, type: "bossesDefeated" },
|
||||||
description: "Defeat all 18 bosses across the first six zones.",
|
description: "Defeat the 18 bosses of the mortal realms.",
|
||||||
icon: "🌟",
|
icon: "🌟",
|
||||||
id: "devourer_slayer",
|
id: "devourer_slayer",
|
||||||
name: "World Saver",
|
name: "World Saver",
|
||||||
@@ -223,8 +223,8 @@ export const defaultAchievements: Array<Achievement> = [
|
|||||||
unlockedAt: null,
|
unlockedAt: null,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
condition: { amount: 65, type: "equipmentOwned" },
|
condition: { amount: 78, type: "equipmentOwned" },
|
||||||
description: "Own all 65 pieces of equipment.",
|
description: "Own all 78 pieces of equipment.",
|
||||||
icon: "🛡️",
|
icon: "🛡️",
|
||||||
id: "fully_equipped",
|
id: "fully_equipped",
|
||||||
name: "Fully Equipped",
|
name: "Fully Equipped",
|
||||||
@@ -269,6 +269,33 @@ export const defaultAchievements: Array<Achievement> = [
|
|||||||
reward: { crystals: 50_000 },
|
reward: { crystals: 50_000 },
|
||||||
unlockedAt: null,
|
unlockedAt: null,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 1e30, type: "totalGoldEarned" },
|
||||||
|
description: "Earn 1 nonillion gold in total.",
|
||||||
|
icon: "🌌",
|
||||||
|
id: "cosmic_wealthy",
|
||||||
|
name: "Cosmic Wealthy",
|
||||||
|
reward: { crystals: 100_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 1e60, type: "totalGoldEarned" },
|
||||||
|
description: "Earn a vigintillion gold in total.",
|
||||||
|
icon: "♾️",
|
||||||
|
id: "infinite_hoarder",
|
||||||
|
name: "Infinite Hoarder",
|
||||||
|
reward: { crystals: 250_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 1e90, type: "totalGoldEarned" },
|
||||||
|
description: "Earn a trigintillion gold in total.",
|
||||||
|
icon: "🔮",
|
||||||
|
id: "omniversal_tycoon",
|
||||||
|
name: "Omniversal Tycoon",
|
||||||
|
reward: { crystals: 1_000_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
// Higher quest milestones
|
// Higher quest milestones
|
||||||
{
|
{
|
||||||
condition: { amount: 30, type: "questsCompleted" },
|
condition: { amount: 30, type: "questsCompleted" },
|
||||||
@@ -289,8 +316,26 @@ export const defaultAchievements: Array<Achievement> = [
|
|||||||
unlockedAt: null,
|
unlockedAt: null,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
condition: { amount: 95, type: "questsCompleted" },
|
condition: { amount: 75, type: "questsCompleted" },
|
||||||
description: "Complete all 95 quests across the known multiverse.",
|
description: "Complete 75 quests.",
|
||||||
|
icon: "🌠",
|
||||||
|
id: "quest_hero",
|
||||||
|
name: "Quest Hero",
|
||||||
|
reward: { crystals: 10_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 100, type: "questsCompleted" },
|
||||||
|
description: "Complete 100 quests.",
|
||||||
|
icon: "💫",
|
||||||
|
id: "quest_legend",
|
||||||
|
name: "Quest Legend",
|
||||||
|
reward: { crystals: 15_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 112, type: "questsCompleted" },
|
||||||
|
description: "Complete all 112 quests across the known multiverse.",
|
||||||
icon: "🌌",
|
icon: "🌌",
|
||||||
id: "quest_eternal",
|
id: "quest_eternal",
|
||||||
name: "Quest Eternal",
|
name: "Quest Eternal",
|
||||||
@@ -316,6 +361,15 @@ export const defaultAchievements: Array<Achievement> = [
|
|||||||
reward: { crystals: 5000 },
|
reward: { crystals: 5000 },
|
||||||
unlockedAt: null,
|
unlockedAt: null,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 50, type: "bossesDefeated" },
|
||||||
|
description: "Defeat 50 bosses.",
|
||||||
|
icon: "⚡",
|
||||||
|
id: "boss_legend",
|
||||||
|
name: "Legendary Vanquisher",
|
||||||
|
reward: { crystals: 15_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
condition: { amount: 72, type: "bossesDefeated" },
|
condition: { amount: 72, type: "bossesDefeated" },
|
||||||
description: "Defeat all 72 bosses across every plane of existence.",
|
description: "Defeat all 72 bosses across every plane of existence.",
|
||||||
@@ -363,4 +417,40 @@ export const defaultAchievements: Array<Achievement> = [
|
|||||||
reward: { crystals: 25_000 },
|
reward: { crystals: 25_000 },
|
||||||
unlockedAt: null,
|
unlockedAt: null,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 50, type: "prestigeCount" },
|
||||||
|
description: "Prestige 50 times.",
|
||||||
|
icon: "✨",
|
||||||
|
id: "prestige_transcendent",
|
||||||
|
name: "Transcendent",
|
||||||
|
reward: { runestones: 100 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 100, type: "prestigeCount" },
|
||||||
|
description: "Prestige 100 times.",
|
||||||
|
icon: "💎",
|
||||||
|
id: "prestige_eternal",
|
||||||
|
name: "Eternal Looper",
|
||||||
|
reward: { runestones: 500 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 150, type: "prestigeCount" },
|
||||||
|
description: "Prestige 150 times.",
|
||||||
|
icon: "🌟",
|
||||||
|
id: "prestige_immortal",
|
||||||
|
name: "Immortal Cycler",
|
||||||
|
reward: { runestones: 2000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: { amount: 200, type: "prestigeCount" },
|
||||||
|
description: "Prestige 200 times.",
|
||||||
|
icon: "👑",
|
||||||
|
id: "prestige_absolute",
|
||||||
|
name: "Absolute Champion",
|
||||||
|
reward: { runestones: 10_000 },
|
||||||
|
unlockedAt: null,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
+59
-59
@@ -360,7 +360,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 40,
|
bountyRunestones: 40,
|
||||||
crystalReward: 40_000,
|
crystalReward: 0,
|
||||||
currentHp: 2_000_000_000,
|
currentHp: 2_000_000_000,
|
||||||
damagePerSecond: 120_000,
|
damagePerSecond: 120_000,
|
||||||
description:
|
description:
|
||||||
@@ -378,7 +378,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 50,
|
bountyRunestones: 50,
|
||||||
crystalReward: 100_000,
|
crystalReward: 0,
|
||||||
currentHp: 8_000_000_000,
|
currentHp: 8_000_000_000,
|
||||||
damagePerSecond: 350_000,
|
damagePerSecond: 350_000,
|
||||||
description:
|
description:
|
||||||
@@ -396,7 +396,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 60,
|
bountyRunestones: 60,
|
||||||
crystalReward: 300_000,
|
crystalReward: 0,
|
||||||
currentHp: 30_000_000_000,
|
currentHp: 30_000_000_000,
|
||||||
damagePerSecond: 1_000_000,
|
damagePerSecond: 1_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -414,7 +414,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 75,
|
bountyRunestones: 75,
|
||||||
crystalReward: 800_000,
|
crystalReward: 0,
|
||||||
currentHp: 100_000_000_000,
|
currentHp: 100_000_000_000,
|
||||||
damagePerSecond: 3_000_000,
|
damagePerSecond: 3_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -433,7 +433,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Abyssal Trench ────────────────────────────────────────────────────────
|
// ── Abyssal Trench ────────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 40,
|
bountyRunestones: 40,
|
||||||
crystalReward: 1_500_000,
|
crystalReward: 0,
|
||||||
currentHp: 250_000_000_000,
|
currentHp: 250_000_000_000,
|
||||||
damagePerSecond: 5_000_000,
|
damagePerSecond: 5_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -451,7 +451,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 55,
|
bountyRunestones: 55,
|
||||||
crystalReward: 4_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 1_000_000_000_000,
|
currentHp: 1_000_000_000_000,
|
||||||
damagePerSecond: 15_000_000,
|
damagePerSecond: 15_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -469,7 +469,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 70,
|
bountyRunestones: 70,
|
||||||
crystalReward: 12_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 4_000_000_000_000,
|
currentHp: 4_000_000_000_000,
|
||||||
damagePerSecond: 50_000_000,
|
damagePerSecond: 50_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -487,7 +487,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 85,
|
bountyRunestones: 85,
|
||||||
crystalReward: 40_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 15_000_000_000_000,
|
currentHp: 15_000_000_000_000,
|
||||||
damagePerSecond: 150_000_000,
|
damagePerSecond: 150_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -505,7 +505,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 100,
|
bountyRunestones: 100,
|
||||||
crystalReward: 150_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 50_000_000_000_000,
|
currentHp: 50_000_000_000_000,
|
||||||
damagePerSecond: 500_000_000,
|
damagePerSecond: 500_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -524,7 +524,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Infernal Court ────────────────────────────────────────────────────────
|
// ── Infernal Court ────────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 55,
|
bountyRunestones: 55,
|
||||||
crystalReward: 350_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 120_000_000_000_000,
|
currentHp: 120_000_000_000_000,
|
||||||
damagePerSecond: 800_000_000,
|
damagePerSecond: 800_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -542,7 +542,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 70,
|
bountyRunestones: 70,
|
||||||
crystalReward: 1_000_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 500_000_000_000_000,
|
currentHp: 500_000_000_000_000,
|
||||||
damagePerSecond: 2_500_000_000,
|
damagePerSecond: 2_500_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -560,7 +560,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 90,
|
bountyRunestones: 90,
|
||||||
crystalReward: 3_000_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 2_000_000_000_000_000,
|
currentHp: 2_000_000_000_000_000,
|
||||||
damagePerSecond: 8_000_000_000,
|
damagePerSecond: 8_000_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -578,7 +578,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 110,
|
bountyRunestones: 110,
|
||||||
crystalReward: 10_000_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 6_000_000_000_000_000,
|
currentHp: 6_000_000_000_000_000,
|
||||||
damagePerSecond: 25_000_000_000,
|
damagePerSecond: 25_000_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -596,7 +596,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 135,
|
bountyRunestones: 135,
|
||||||
crystalReward: 30_000_000_000,
|
crystalReward: 0,
|
||||||
currentHp: 8_000_000_000_000_000,
|
currentHp: 8_000_000_000_000_000,
|
||||||
damagePerSecond: 80_000_000_000,
|
damagePerSecond: 80_000_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -615,7 +615,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Crystalline Spire ─────────────────────────────────────────────────────
|
// ── Crystalline Spire ─────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 70,
|
bountyRunestones: 70,
|
||||||
crystalReward: 8e10,
|
crystalReward: 0,
|
||||||
currentHp: 2e16,
|
currentHp: 2e16,
|
||||||
damagePerSecond: 120_000_000_000,
|
damagePerSecond: 120_000_000_000,
|
||||||
description:
|
description:
|
||||||
@@ -633,7 +633,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 90,
|
bountyRunestones: 90,
|
||||||
crystalReward: 3e11,
|
crystalReward: 0,
|
||||||
currentHp: 8e16,
|
currentHp: 8e16,
|
||||||
damagePerSecond: 4e11,
|
damagePerSecond: 4e11,
|
||||||
description:
|
description:
|
||||||
@@ -651,7 +651,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 115,
|
bountyRunestones: 115,
|
||||||
crystalReward: 1e12,
|
crystalReward: 0,
|
||||||
currentHp: 3e17,
|
currentHp: 3e17,
|
||||||
damagePerSecond: 1.2e12,
|
damagePerSecond: 1.2e12,
|
||||||
description:
|
description:
|
||||||
@@ -669,7 +669,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 140,
|
bountyRunestones: 140,
|
||||||
crystalReward: 4e12,
|
crystalReward: 0,
|
||||||
currentHp: 1e18,
|
currentHp: 1e18,
|
||||||
damagePerSecond: 4e12,
|
damagePerSecond: 4e12,
|
||||||
description:
|
description:
|
||||||
@@ -687,7 +687,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 175,
|
bountyRunestones: 175,
|
||||||
crystalReward: 1.5e13,
|
crystalReward: 0,
|
||||||
currentHp: 4e18,
|
currentHp: 4e18,
|
||||||
damagePerSecond: 1.5e13,
|
damagePerSecond: 1.5e13,
|
||||||
description:
|
description:
|
||||||
@@ -706,7 +706,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Void Sanctum ──────────────────────────────────────────────────────────
|
// ── Void Sanctum ──────────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 90,
|
bountyRunestones: 90,
|
||||||
crystalReward: 4e13,
|
crystalReward: 0,
|
||||||
currentHp: 1e19,
|
currentHp: 1e19,
|
||||||
damagePerSecond: 4e13,
|
damagePerSecond: 4e13,
|
||||||
description:
|
description:
|
||||||
@@ -724,7 +724,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 115,
|
bountyRunestones: 115,
|
||||||
crystalReward: 1.5e14,
|
crystalReward: 0,
|
||||||
currentHp: 5e19,
|
currentHp: 5e19,
|
||||||
damagePerSecond: 1.5e14,
|
damagePerSecond: 1.5e14,
|
||||||
description:
|
description:
|
||||||
@@ -742,7 +742,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 145,
|
bountyRunestones: 145,
|
||||||
crystalReward: 5e14,
|
crystalReward: 0,
|
||||||
currentHp: 2e20,
|
currentHp: 2e20,
|
||||||
damagePerSecond: 5e14,
|
damagePerSecond: 5e14,
|
||||||
description:
|
description:
|
||||||
@@ -760,7 +760,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 180,
|
bountyRunestones: 180,
|
||||||
crystalReward: 2e15,
|
crystalReward: 0,
|
||||||
currentHp: 8e20,
|
currentHp: 8e20,
|
||||||
damagePerSecond: 2e15,
|
damagePerSecond: 2e15,
|
||||||
description:
|
description:
|
||||||
@@ -778,7 +778,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 225,
|
bountyRunestones: 225,
|
||||||
crystalReward: 8e15,
|
crystalReward: 0,
|
||||||
currentHp: 3e21,
|
currentHp: 3e21,
|
||||||
damagePerSecond: 8e15,
|
damagePerSecond: 8e15,
|
||||||
description:
|
description:
|
||||||
@@ -797,7 +797,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Eternal Throne ────────────────────────────────────────────────────────
|
// ── Eternal Throne ────────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 115,
|
bountyRunestones: 115,
|
||||||
crystalReward: 2e16,
|
crystalReward: 0,
|
||||||
currentHp: 1e22,
|
currentHp: 1e22,
|
||||||
damagePerSecond: 2e16,
|
damagePerSecond: 2e16,
|
||||||
description:
|
description:
|
||||||
@@ -815,7 +815,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 150,
|
bountyRunestones: 150,
|
||||||
crystalReward: 8e16,
|
crystalReward: 0,
|
||||||
currentHp: 5e22,
|
currentHp: 5e22,
|
||||||
damagePerSecond: 8e16,
|
damagePerSecond: 8e16,
|
||||||
description:
|
description:
|
||||||
@@ -833,7 +833,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 190,
|
bountyRunestones: 190,
|
||||||
crystalReward: 3e17,
|
crystalReward: 0,
|
||||||
currentHp: 2e23,
|
currentHp: 2e23,
|
||||||
damagePerSecond: 3e17,
|
damagePerSecond: 3e17,
|
||||||
description:
|
description:
|
||||||
@@ -851,7 +851,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 235,
|
bountyRunestones: 235,
|
||||||
crystalReward: 1.2e18,
|
crystalReward: 0,
|
||||||
currentHp: 8e23,
|
currentHp: 8e23,
|
||||||
damagePerSecond: 1.2e18,
|
damagePerSecond: 1.2e18,
|
||||||
description:
|
description:
|
||||||
@@ -869,7 +869,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 295,
|
bountyRunestones: 295,
|
||||||
crystalReward: 5e18,
|
crystalReward: 0,
|
||||||
currentHp: 3e24,
|
currentHp: 3e24,
|
||||||
damagePerSecond: 5e18,
|
damagePerSecond: 5e18,
|
||||||
description:
|
description:
|
||||||
@@ -888,7 +888,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Primordial Chaos ──────────────────────────────────────────────────────
|
// ── Primordial Chaos ──────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 150,
|
bountyRunestones: 150,
|
||||||
crystalReward: 2e20,
|
crystalReward: 0,
|
||||||
currentHp: 1e26,
|
currentHp: 1e26,
|
||||||
damagePerSecond: 2e20,
|
damagePerSecond: 2e20,
|
||||||
description:
|
description:
|
||||||
@@ -906,7 +906,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 200,
|
bountyRunestones: 200,
|
||||||
crystalReward: 8e21,
|
crystalReward: 0,
|
||||||
currentHp: 5e27,
|
currentHp: 5e27,
|
||||||
damagePerSecond: 8e21,
|
damagePerSecond: 8e21,
|
||||||
description:
|
description:
|
||||||
@@ -924,7 +924,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 265,
|
bountyRunestones: 265,
|
||||||
crystalReward: 4e23,
|
crystalReward: 0,
|
||||||
currentHp: 2e29,
|
currentHp: 2e29,
|
||||||
damagePerSecond: 4e23,
|
damagePerSecond: 4e23,
|
||||||
description:
|
description:
|
||||||
@@ -942,7 +942,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 350,
|
bountyRunestones: 350,
|
||||||
crystalReward: 2e25,
|
crystalReward: 0,
|
||||||
currentHp: 8e30,
|
currentHp: 8e30,
|
||||||
damagePerSecond: 2e25,
|
damagePerSecond: 2e25,
|
||||||
description:
|
description:
|
||||||
@@ -961,7 +961,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Infinite Expanse ──────────────────────────────────────────────────────
|
// ── Infinite Expanse ──────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 200,
|
bountyRunestones: 200,
|
||||||
crystalReward: 8e27,
|
crystalReward: 0,
|
||||||
currentHp: 3e33,
|
currentHp: 3e33,
|
||||||
damagePerSecond: 8e27,
|
damagePerSecond: 8e27,
|
||||||
description:
|
description:
|
||||||
@@ -979,8 +979,8 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 265,
|
bountyRunestones: 265,
|
||||||
crystalReward: 3e31,
|
crystalReward: 0,
|
||||||
currentHp: 1e37,
|
currentHp: 2e35,
|
||||||
damagePerSecond: 3e31,
|
damagePerSecond: 3e31,
|
||||||
description:
|
description:
|
||||||
"A creature as wide as the observable universe — which, in the Expanse, is not a helpful measurement. It is simply everywhere the horizon is, which in this place is everywhere.",
|
"A creature as wide as the observable universe — which, in the Expanse, is not a helpful measurement. It is simply everywhere the horizon is, which in this place is everywhere.",
|
||||||
@@ -988,7 +988,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
essenceReward: 1e34,
|
essenceReward: 1e34,
|
||||||
goldReward: 1e38,
|
goldReward: 1e38,
|
||||||
id: "horizon_beast",
|
id: "horizon_beast",
|
||||||
maxHp: 1e37,
|
maxHp: 2e35,
|
||||||
name: "The Horizon Beast",
|
name: "The Horizon Beast",
|
||||||
prestigeRequirement: 8,
|
prestigeRequirement: 8,
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -997,8 +997,8 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 350,
|
bountyRunestones: 350,
|
||||||
crystalReward: 1e35,
|
crystalReward: 0,
|
||||||
currentHp: 5e40,
|
currentHp: 5e37,
|
||||||
damagePerSecond: 1e35,
|
damagePerSecond: 1e35,
|
||||||
description:
|
description:
|
||||||
"A self-replicating intelligence that has filled the Expanse with copies of itself. Every copy has the same purpose: to be the last thing in the Expanse. Your guild will need to convince all of them otherwise.",
|
"A self-replicating intelligence that has filled the Expanse with copies of itself. Every copy has the same purpose: to be the last thing in the Expanse. Your guild will need to convince all of them otherwise.",
|
||||||
@@ -1006,7 +1006,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
essenceReward: 5e37,
|
essenceReward: 5e37,
|
||||||
goldReward: 5e41,
|
goldReward: 5e41,
|
||||||
id: "infinity_construct",
|
id: "infinity_construct",
|
||||||
maxHp: 5e40,
|
maxHp: 5e37,
|
||||||
name: "The Infinity Construct",
|
name: "The Infinity Construct",
|
||||||
prestigeRequirement: 8,
|
prestigeRequirement: 8,
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1015,8 +1015,8 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 465,
|
bountyRunestones: 465,
|
||||||
crystalReward: 5e38,
|
crystalReward: 0,
|
||||||
currentHp: 2e44,
|
currentHp: 3e39,
|
||||||
damagePerSecond: 5e38,
|
damagePerSecond: 5e38,
|
||||||
description:
|
description:
|
||||||
"The thing that claims the Infinite Expanse as its territory — which, given the name of the place, is an ambitious claim. It enforces this claim with power that has had infinite space to accumulate.",
|
"The thing that claims the Infinite Expanse as its territory — which, given the name of the place, is an ambitious claim. It enforces this claim with power that has had infinite space to accumulate.",
|
||||||
@@ -1024,7 +1024,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
essenceReward: 2e41,
|
essenceReward: 2e41,
|
||||||
goldReward: 2e45,
|
goldReward: 2e45,
|
||||||
id: "expanse_sovereign",
|
id: "expanse_sovereign",
|
||||||
maxHp: 2e44,
|
maxHp: 3e39,
|
||||||
name: "The Expanse Sovereign",
|
name: "The Expanse Sovereign",
|
||||||
prestigeRequirement: 9,
|
prestigeRequirement: 9,
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1034,7 +1034,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Reality Forge ─────────────────────────────────────────────────────────
|
// ── Reality Forge ─────────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 265,
|
bountyRunestones: 265,
|
||||||
crystalReward: 2e42,
|
crystalReward: 0,
|
||||||
currentHp: 8e47,
|
currentHp: 8e47,
|
||||||
damagePerSecond: 2e42,
|
damagePerSecond: 2e42,
|
||||||
description:
|
description:
|
||||||
@@ -1052,7 +1052,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 350,
|
bountyRunestones: 350,
|
||||||
crystalReward: 1e47,
|
crystalReward: 0,
|
||||||
currentHp: 4e52,
|
currentHp: 4e52,
|
||||||
damagePerSecond: 1e47,
|
damagePerSecond: 1e47,
|
||||||
description:
|
description:
|
||||||
@@ -1070,7 +1070,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 465,
|
bountyRunestones: 465,
|
||||||
crystalReward: 6e51,
|
crystalReward: 0,
|
||||||
currentHp: 2e57,
|
currentHp: 2e57,
|
||||||
damagePerSecond: 6e51,
|
damagePerSecond: 6e51,
|
||||||
description:
|
description:
|
||||||
@@ -1088,7 +1088,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 615,
|
bountyRunestones: 615,
|
||||||
crystalReward: 2e56,
|
crystalReward: 0,
|
||||||
currentHp: 8e61,
|
currentHp: 8e61,
|
||||||
damagePerSecond: 2e56,
|
damagePerSecond: 2e56,
|
||||||
description:
|
description:
|
||||||
@@ -1107,7 +1107,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 350,
|
bountyRunestones: 350,
|
||||||
crystalReward: 1e60,
|
crystalReward: 0,
|
||||||
currentHp: 4e65,
|
currentHp: 4e65,
|
||||||
damagePerSecond: 1e60,
|
damagePerSecond: 1e60,
|
||||||
description:
|
description:
|
||||||
@@ -1125,7 +1125,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 465,
|
bountyRunestones: 465,
|
||||||
crystalReward: 6e65,
|
crystalReward: 0,
|
||||||
currentHp: 2e71,
|
currentHp: 2e71,
|
||||||
damagePerSecond: 6e65,
|
damagePerSecond: 6e65,
|
||||||
description:
|
description:
|
||||||
@@ -1143,7 +1143,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 615,
|
bountyRunestones: 615,
|
||||||
crystalReward: 3e71,
|
crystalReward: 0,
|
||||||
currentHp: 1e77,
|
currentHp: 1e77,
|
||||||
damagePerSecond: 3e71,
|
damagePerSecond: 3e71,
|
||||||
description:
|
description:
|
||||||
@@ -1161,7 +1161,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 815,
|
bountyRunestones: 815,
|
||||||
crystalReward: 1e77,
|
crystalReward: 0,
|
||||||
currentHp: 5e82,
|
currentHp: 5e82,
|
||||||
damagePerSecond: 1e77,
|
damagePerSecond: 1e77,
|
||||||
description:
|
description:
|
||||||
@@ -1180,7 +1180,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 465,
|
bountyRunestones: 465,
|
||||||
crystalReward: 5e82,
|
crystalReward: 0,
|
||||||
currentHp: 2e88,
|
currentHp: 2e88,
|
||||||
damagePerSecond: 5e82,
|
damagePerSecond: 5e82,
|
||||||
description:
|
description:
|
||||||
@@ -1198,7 +1198,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 615,
|
bountyRunestones: 615,
|
||||||
crystalReward: 3e89,
|
crystalReward: 0,
|
||||||
currentHp: 1e95,
|
currentHp: 1e95,
|
||||||
damagePerSecond: 3e89,
|
damagePerSecond: 3e89,
|
||||||
description:
|
description:
|
||||||
@@ -1216,7 +1216,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 815,
|
bountyRunestones: 815,
|
||||||
crystalReward: 2e96,
|
crystalReward: 0,
|
||||||
currentHp: 8e101,
|
currentHp: 8e101,
|
||||||
damagePerSecond: 2e96,
|
damagePerSecond: 2e96,
|
||||||
description:
|
description:
|
||||||
@@ -1234,7 +1234,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 1080,
|
bountyRunestones: 1080,
|
||||||
crystalReward: 1e103,
|
crystalReward: 0,
|
||||||
currentHp: 5e108,
|
currentHp: 5e108,
|
||||||
damagePerSecond: 1e103,
|
damagePerSecond: 1e103,
|
||||||
description:
|
description:
|
||||||
@@ -1253,7 +1253,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
// ── The Absolute ──────────────────────────────────────────────────────────
|
// ── The Absolute ──────────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bountyRunestones: 615,
|
bountyRunestones: 615,
|
||||||
crystalReward: 5e110,
|
crystalReward: 0,
|
||||||
currentHp: 2e116,
|
currentHp: 2e116,
|
||||||
damagePerSecond: 5e110,
|
damagePerSecond: 5e110,
|
||||||
description:
|
description:
|
||||||
@@ -1271,7 +1271,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 815,
|
bountyRunestones: 815,
|
||||||
crystalReward: 3e119,
|
crystalReward: 0,
|
||||||
currentHp: 1e125,
|
currentHp: 1e125,
|
||||||
damagePerSecond: 3e119,
|
damagePerSecond: 3e119,
|
||||||
description:
|
description:
|
||||||
@@ -1289,7 +1289,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 1080,
|
bountyRunestones: 1080,
|
||||||
crystalReward: 1e129,
|
crystalReward: 0,
|
||||||
currentHp: 5e134,
|
currentHp: 5e134,
|
||||||
damagePerSecond: 1e129,
|
damagePerSecond: 1e129,
|
||||||
description:
|
description:
|
||||||
@@ -1307,7 +1307,7 @@ export const defaultBosses: Array<Boss> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
bountyRunestones: 1430,
|
bountyRunestones: 1430,
|
||||||
crystalReward: 5e139,
|
crystalReward: 0,
|
||||||
currentHp: 2e145,
|
currentHp: 2e145,
|
||||||
damagePerSecond: 5e139,
|
damagePerSecond: 5e139,
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -695,6 +695,168 @@ export const defaultEquipment: Array<Equipment> = [
|
|||||||
setId: "eternal_throne",
|
setId: "eternal_throne",
|
||||||
type: "trinket",
|
type: "trinket",
|
||||||
},
|
},
|
||||||
|
// ── Primordial Chaos ──────────────────────────────────────────────────────
|
||||||
|
{
|
||||||
|
bonus: { goldMultiplier: 9 },
|
||||||
|
description:
|
||||||
|
"The Primordial Titan's carapace — formed before the concept of armour existed. It simply is what armour aspires to be.",
|
||||||
|
equipped: false,
|
||||||
|
id: "chaos_mantle",
|
||||||
|
name: "The Chaos Mantle",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "primordial_chaos",
|
||||||
|
type: "armour",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { clickMultiplier: 5, combatMultiplier: 2, goldMultiplier: 2.5 },
|
||||||
|
description:
|
||||||
|
"The crystallised core of the Titan itself — the first stable thing to emerge from chaos. It radiates in every direction simultaneously.",
|
||||||
|
equipped: false,
|
||||||
|
id: "titan_core",
|
||||||
|
name: "The Titan Core",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "primordial_chaos",
|
||||||
|
type: "trinket",
|
||||||
|
},
|
||||||
|
// ── Infinite Expanse ──────────────────────────────────────────────────────
|
||||||
|
{
|
||||||
|
bonus: { combatMultiplier: 14 },
|
||||||
|
description:
|
||||||
|
"Forged from the Expanse Sovereign's own reach — a blade that has no beginning and no end, only edge.",
|
||||||
|
equipped: false,
|
||||||
|
id: "expanse_blade",
|
||||||
|
name: "The Expanse Blade",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "infinite_expanse",
|
||||||
|
type: "weapon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { goldMultiplier: 10 },
|
||||||
|
description:
|
||||||
|
"A second iteration of the void's armour — the first was not enough. This one has never been tested to its limit.",
|
||||||
|
equipped: false,
|
||||||
|
id: "void_armour_mk2",
|
||||||
|
name: "Void Armour Mk. II",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "infinite_expanse",
|
||||||
|
type: "armour",
|
||||||
|
},
|
||||||
|
// ── Reality Forge ─────────────────────────────────────────────────────────
|
||||||
|
{
|
||||||
|
bonus: { combatMultiplier: 16 },
|
||||||
|
description:
|
||||||
|
"The Reality Architect's primary instrument — a sword that does not cut through things but rewrites what they are.",
|
||||||
|
equipped: false,
|
||||||
|
id: "cosmos_blade",
|
||||||
|
name: "The Cosmos Blade",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "reality_forge",
|
||||||
|
type: "weapon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { goldMultiplier: 12 },
|
||||||
|
description:
|
||||||
|
"Plated from the substance of reality itself — wearing it makes you feel slightly more real than everything around you.",
|
||||||
|
equipped: false,
|
||||||
|
id: "reality_plate",
|
||||||
|
name: "The Reality Plate",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "reality_forge",
|
||||||
|
type: "armour",
|
||||||
|
},
|
||||||
|
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
||||||
|
{
|
||||||
|
bonus: { combatMultiplier: 18 },
|
||||||
|
description:
|
||||||
|
"Torn from the eye of the Cosmic Annihilator — a weapon that carries the force of an ending universe in every swing.",
|
||||||
|
equipped: false,
|
||||||
|
id: "maelstrom_edge",
|
||||||
|
name: "The Maelstrom Edge",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "cosmic_maelstrom",
|
||||||
|
type: "weapon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { goldMultiplier: 14 },
|
||||||
|
description:
|
||||||
|
"Armour that has weathered the destruction of countless realities. It has learned not to flinch.",
|
||||||
|
equipped: false,
|
||||||
|
id: "cosmic_plate",
|
||||||
|
name: "The Cosmic Plate",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "cosmic_maelstrom",
|
||||||
|
type: "armour",
|
||||||
|
},
|
||||||
|
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
||||||
|
{
|
||||||
|
bonus: { combatMultiplier: 22 },
|
||||||
|
description:
|
||||||
|
"The first weapon — older than the concept of war, older than the concept of a weapon. It remembers what it was made for.",
|
||||||
|
equipped: false,
|
||||||
|
id: "primeval_blade",
|
||||||
|
name: "The Primeval Blade",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "primeval_sanctum",
|
||||||
|
type: "weapon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { goldMultiplier: 17 },
|
||||||
|
description:
|
||||||
|
"The shield-form of the Primeval God — absolute protection from before the concept of harm existed.",
|
||||||
|
equipped: false,
|
||||||
|
id: "ancient_aegis",
|
||||||
|
name: "The Ancient Aegis",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "primeval_sanctum",
|
||||||
|
type: "armour",
|
||||||
|
},
|
||||||
|
// ── The Absolute ──────────────────────────────────────────────────────────
|
||||||
|
{
|
||||||
|
bonus: { combatMultiplier: 28 },
|
||||||
|
description:
|
||||||
|
"There is no name for what this was before it became a sword. There is no name for what it is now. It ends things.",
|
||||||
|
equipped: false,
|
||||||
|
id: "absolute_blade",
|
||||||
|
name: "The Absolute Blade",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "the_absolute",
|
||||||
|
type: "weapon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { goldMultiplier: 20 },
|
||||||
|
description:
|
||||||
|
"Eternity given the shape of armour — it has always existed, it will always exist, and it has always protected its wearer.",
|
||||||
|
equipped: false,
|
||||||
|
id: "eternity_plate",
|
||||||
|
name: "The Eternity Plate",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "the_absolute",
|
||||||
|
type: "armour",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bonus: { clickMultiplier: 6, combatMultiplier: 3, goldMultiplier: 3 },
|
||||||
|
description:
|
||||||
|
"The heart of everything — a thing so fundamental that its removal from the Absolute One ended all things, briefly. Briefly.",
|
||||||
|
equipped: false,
|
||||||
|
id: "omniversal_core",
|
||||||
|
name: "The Omniversal Core",
|
||||||
|
owned: false,
|
||||||
|
rarity: "legendary",
|
||||||
|
setId: "the_absolute",
|
||||||
|
type: "trinket",
|
||||||
|
},
|
||||||
// ── Purchasable endgame sinks ─────────────────────────────────────────────
|
// ── Purchasable endgame sinks ─────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
bonus: { clickMultiplier: 4.25 },
|
bonus: { clickMultiplier: 4.25 },
|
||||||
@@ -757,7 +919,7 @@ export const defaultEquipment: Array<Equipment> = [
|
|||||||
type: "armour",
|
type: "armour",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { clickMultiplier: 5, combatMultiplier: 1.75, goldMultiplier: 2 },
|
bonus: { clickMultiplier: 5, combatMultiplier: 3, goldMultiplier: 2.5 },
|
||||||
cost: { crystals: 100_000_000, essence: 0, gold: 0 },
|
cost: { crystals: 100_000_000, essence: 0, gold: 0 },
|
||||||
description:
|
description:
|
||||||
"An artifact from beyond all known planes — it refracts power through all dimensions simultaneously.",
|
"An artifact from beyond all known planes — it refracts power through all dimensions simultaneously.",
|
||||||
|
|||||||
+293
-53
@@ -265,9 +265,9 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
name: "The Sunken Temple",
|
name: "The Sunken Temple",
|
||||||
prerequisiteIds: [ "witch_coven" ],
|
prerequisiteIds: [ "witch_coven" ],
|
||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2_000_000, type: "gold" },
|
{ amount: 60_000_000, type: "gold" },
|
||||||
{ amount: 1500, type: "essence" },
|
{ amount: 25_000, type: "essence" },
|
||||||
{ amount: 75, type: "crystals" },
|
{ amount: 400, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "shadow_marshes",
|
zoneId: "shadow_marshes",
|
||||||
@@ -643,7 +643,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2_000_000_000_000_000, type: "gold" },
|
{ amount: 2_000_000_000_000_000, type: "gold" },
|
||||||
{ amount: 600_000_000_000, type: "essence" },
|
{ amount: 600_000_000_000, type: "essence" },
|
||||||
{ amount: 1_000_000_000, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "infernal_court",
|
zoneId: "infernal_court",
|
||||||
@@ -659,7 +659,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6_000_000_000_000_000, type: "gold" },
|
{ amount: 6_000_000_000_000_000, type: "gold" },
|
||||||
{ amount: 2_000_000_000_000, type: "essence" },
|
{ amount: 2_000_000_000_000, type: "essence" },
|
||||||
{ amount: 3_000_000_000, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "infernal_court",
|
zoneId: "infernal_court",
|
||||||
@@ -675,7 +675,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e16, type: "gold" },
|
{ amount: 2e16, type: "gold" },
|
||||||
{ amount: 6_000_000_000_000, type: "essence" },
|
{ amount: 6_000_000_000_000, type: "essence" },
|
||||||
{ amount: 8_000_000_000, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "infernal_court",
|
zoneId: "infernal_court",
|
||||||
@@ -691,7 +691,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6e16, type: "gold" },
|
{ amount: 6e16, type: "gold" },
|
||||||
{ amount: 2e13, type: "essence" },
|
{ amount: 2e13, type: "essence" },
|
||||||
{ amount: 2.5e10, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "infernal_warden_1", type: "upgrade" },
|
{ targetId: "infernal_warden_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -708,7 +708,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e17, type: "gold" },
|
{ amount: 2e17, type: "gold" },
|
||||||
{ amount: 6e13, type: "essence" },
|
{ amount: 6e13, type: "essence" },
|
||||||
{ amount: 8e10, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "infernal_court",
|
zoneId: "infernal_court",
|
||||||
@@ -741,7 +741,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e18, type: "gold" },
|
{ amount: 2e18, type: "gold" },
|
||||||
{ amount: 8e14, type: "essence" },
|
{ amount: 8e14, type: "essence" },
|
||||||
{ amount: 3e12, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "crystalline_spire",
|
zoneId: "crystalline_spire",
|
||||||
@@ -757,7 +757,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 8e18, type: "gold" },
|
{ amount: 8e18, type: "gold" },
|
||||||
{ amount: 3e15, type: "essence" },
|
{ amount: 3e15, type: "essence" },
|
||||||
{ amount: 1e13, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "crystalline_spire",
|
zoneId: "crystalline_spire",
|
||||||
@@ -773,7 +773,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e19, type: "gold" },
|
{ amount: 3e19, type: "gold" },
|
||||||
{ amount: 1e16, type: "essence" },
|
{ amount: 1e16, type: "essence" },
|
||||||
{ amount: 4e13, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "crystalline_spire",
|
zoneId: "crystalline_spire",
|
||||||
@@ -789,7 +789,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e20, type: "gold" },
|
{ amount: 1e20, type: "gold" },
|
||||||
{ amount: 4e16, type: "essence" },
|
{ amount: 4e16, type: "essence" },
|
||||||
{ amount: 1.5e14, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "crystal_sage_1", type: "upgrade" },
|
{ targetId: "crystal_sage_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -806,7 +806,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 4e20, type: "gold" },
|
{ amount: 4e20, type: "gold" },
|
||||||
{ amount: 1.5e17, type: "essence" },
|
{ amount: 1.5e17, type: "essence" },
|
||||||
{ amount: 5e14, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "crystalline_spire",
|
zoneId: "crystalline_spire",
|
||||||
@@ -839,7 +839,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 5e21, type: "gold" },
|
{ amount: 5e21, type: "gold" },
|
||||||
{ amount: 2e18, type: "essence" },
|
{ amount: 2e18, type: "essence" },
|
||||||
{ amount: 2e15, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "void_sanctum",
|
zoneId: "void_sanctum",
|
||||||
@@ -855,7 +855,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e22, type: "gold" },
|
{ amount: 2e22, type: "gold" },
|
||||||
{ amount: 8e18, type: "essence" },
|
{ amount: 8e18, type: "essence" },
|
||||||
{ amount: 8e15, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "void_sanctum",
|
zoneId: "void_sanctum",
|
||||||
@@ -871,7 +871,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 8e22, type: "gold" },
|
{ amount: 8e22, type: "gold" },
|
||||||
{ amount: 3e19, type: "essence" },
|
{ amount: 3e19, type: "essence" },
|
||||||
{ amount: 3e16, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "void_sanctum",
|
zoneId: "void_sanctum",
|
||||||
@@ -887,7 +887,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e23, type: "gold" },
|
{ amount: 3e23, type: "gold" },
|
||||||
{ amount: 1e20, type: "essence" },
|
{ amount: 1e20, type: "essence" },
|
||||||
{ amount: 1e17, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "void_sentinel_1", type: "upgrade" },
|
{ targetId: "void_sentinel_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -904,7 +904,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e24, type: "gold" },
|
{ amount: 1e24, type: "gold" },
|
||||||
{ amount: 4e20, type: "essence" },
|
{ amount: 4e20, type: "essence" },
|
||||||
{ amount: 4e17, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "void_sanctum",
|
zoneId: "void_sanctum",
|
||||||
@@ -937,7 +937,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e25, type: "gold" },
|
{ amount: 1e25, type: "gold" },
|
||||||
{ amount: 4e21, type: "essence" },
|
{ amount: 4e21, type: "essence" },
|
||||||
{ amount: 1.5e18, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "eternal_throne",
|
zoneId: "eternal_throne",
|
||||||
@@ -953,7 +953,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 4e25, type: "gold" },
|
{ amount: 4e25, type: "gold" },
|
||||||
{ amount: 1.5e22, type: "essence" },
|
{ amount: 1.5e22, type: "essence" },
|
||||||
{ amount: 5e18, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "eternal_throne",
|
zoneId: "eternal_throne",
|
||||||
@@ -969,7 +969,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1.5e26, type: "gold" },
|
{ amount: 1.5e26, type: "gold" },
|
||||||
{ amount: 6e22, type: "essence" },
|
{ amount: 6e22, type: "essence" },
|
||||||
{ amount: 2e19, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "eternal_champion_1", type: "upgrade" },
|
{ targetId: "eternal_champion_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -986,7 +986,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6e26, type: "gold" },
|
{ amount: 6e26, type: "gold" },
|
||||||
{ amount: 2.5e23, type: "essence" },
|
{ amount: 2.5e23, type: "essence" },
|
||||||
{ amount: 8e19, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "eternal_throne",
|
zoneId: "eternal_throne",
|
||||||
@@ -1002,7 +1002,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e27, type: "gold" },
|
{ amount: 3e27, type: "gold" },
|
||||||
{ amount: 1e24, type: "essence" },
|
{ amount: 1e24, type: "essence" },
|
||||||
{ amount: 4e20, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "eternal_throne",
|
zoneId: "eternal_throne",
|
||||||
@@ -1035,7 +1035,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 4e28, type: "gold" },
|
{ amount: 4e28, type: "gold" },
|
||||||
{ amount: 1.5e25, type: "essence" },
|
{ amount: 1.5e25, type: "essence" },
|
||||||
{ amount: 5e21, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primordial_chaos",
|
zoneId: "primordial_chaos",
|
||||||
@@ -1051,7 +1051,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e29, type: "gold" },
|
{ amount: 2e29, type: "gold" },
|
||||||
{ amount: 8e25, type: "essence" },
|
{ amount: 8e25, type: "essence" },
|
||||||
{ amount: 2e22, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "titan_warrior", type: "adventurer" },
|
{ targetId: "titan_warrior", type: "adventurer" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1068,7 +1068,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e30, type: "gold" },
|
{ amount: 1e30, type: "gold" },
|
||||||
{ amount: 4e26, type: "essence" },
|
{ amount: 4e26, type: "essence" },
|
||||||
{ amount: 8e22, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primordial_chaos",
|
zoneId: "primordial_chaos",
|
||||||
@@ -1084,7 +1084,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6e30, type: "gold" },
|
{ amount: 6e30, type: "gold" },
|
||||||
{ amount: 2e27, type: "essence" },
|
{ amount: 2e27, type: "essence" },
|
||||||
{ amount: 4e23, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "titan_warrior_1", type: "upgrade" },
|
{ targetId: "titan_warrior_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1101,7 +1101,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e31, type: "gold" },
|
{ amount: 3e31, type: "gold" },
|
||||||
{ amount: 1e28, type: "essence" },
|
{ amount: 1e28, type: "essence" },
|
||||||
{ amount: 2e24, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primordial_chaos",
|
zoneId: "primordial_chaos",
|
||||||
@@ -1134,7 +1134,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6e34, type: "gold" },
|
{ amount: 6e34, type: "gold" },
|
||||||
{ amount: 2e31, type: "essence" },
|
{ amount: 2e31, type: "essence" },
|
||||||
{ amount: 5e27, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "infinite_expanse",
|
zoneId: "infinite_expanse",
|
||||||
@@ -1150,7 +1150,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e36, type: "gold" },
|
{ amount: 3e36, type: "gold" },
|
||||||
{ amount: 1e33, type: "essence" },
|
{ amount: 1e33, type: "essence" },
|
||||||
{ amount: 2.5e29, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "cosmos_knight", type: "adventurer" },
|
{ targetId: "cosmos_knight", type: "adventurer" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1167,7 +1167,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1.5e38, type: "gold" },
|
{ amount: 1.5e38, type: "gold" },
|
||||||
{ amount: 5e34, type: "essence" },
|
{ amount: 5e34, type: "essence" },
|
||||||
{ amount: 1e31, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "nexus_sage_1", type: "upgrade" },
|
{ targetId: "nexus_sage_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1184,7 +1184,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 8e39, type: "gold" },
|
{ amount: 8e39, type: "gold" },
|
||||||
{ amount: 2.5e36, type: "essence" },
|
{ amount: 2.5e36, type: "essence" },
|
||||||
{ amount: 5e32, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "cosmos_knight_1", type: "upgrade" },
|
{ targetId: "cosmos_knight_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1201,7 +1201,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 4e41, type: "gold" },
|
{ amount: 4e41, type: "gold" },
|
||||||
{ amount: 1.2e38, type: "essence" },
|
{ amount: 1.2e38, type: "essence" },
|
||||||
{ amount: 2.5e34, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "infinite_expanse",
|
zoneId: "infinite_expanse",
|
||||||
@@ -1234,7 +1234,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e46, type: "gold" },
|
{ amount: 1e46, type: "gold" },
|
||||||
{ amount: 3e42, type: "essence" },
|
{ amount: 3e42, type: "essence" },
|
||||||
{ amount: 2e38, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "reality_forge",
|
zoneId: "reality_forge",
|
||||||
@@ -1250,7 +1250,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 5e47, type: "gold" },
|
{ amount: 5e47, type: "gold" },
|
||||||
{ amount: 1.5e44, type: "essence" },
|
{ amount: 1.5e44, type: "essence" },
|
||||||
{ amount: 1e40, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "primordial_mage", type: "adventurer" },
|
{ targetId: "primordial_mage", type: "adventurer" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1267,7 +1267,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2.5e49, type: "gold" },
|
{ amount: 2.5e49, type: "gold" },
|
||||||
{ amount: 8e45, type: "essence" },
|
{ amount: 8e45, type: "essence" },
|
||||||
{ amount: 5e41, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "primordial_mage_1", type: "upgrade" },
|
{ targetId: "primordial_mage_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1284,7 +1284,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1.2e51, type: "gold" },
|
{ amount: 1.2e51, type: "gold" },
|
||||||
{ amount: 4e47, type: "essence" },
|
{ amount: 4e47, type: "essence" },
|
||||||
{ amount: 2.5e43, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "reality_forge",
|
zoneId: "reality_forge",
|
||||||
@@ -1300,12 +1300,60 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6e52, type: "gold" },
|
{ amount: 6e52, type: "gold" },
|
||||||
{ amount: 2e49, type: "essence" },
|
{ amount: 2e49, type: "essence" },
|
||||||
{ amount: 1.2e45, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "astral_sovereign_1", type: "upgrade" },
|
{ targetId: "astral_sovereign_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "reality_forge",
|
zoneId: "reality_forge",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 1e59,
|
||||||
|
description:
|
||||||
|
"The deep levels of the Forge, where the most experimental realities are stored in a state of near-completion. Your guild discovers that several of these abandoned projects are disturbingly familiar.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "forge_depths",
|
||||||
|
name: "The Forge Depths",
|
||||||
|
prerequisiteIds: [ "forge_chronicle" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 5e62, type: "gold" },
|
||||||
|
{ amount: 1.5e59, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "reality_forge",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 3e64,
|
||||||
|
description:
|
||||||
|
"The underlying structure that defines the laws for every reality the Forge produces — a lattice of constraints so fundamental that violating them would undo everything. Your guild crosses it carefully.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "prime_matrix",
|
||||||
|
name: "The Prime Matrix",
|
||||||
|
prerequisiteIds: [ "forge_depths" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 2e67, type: "gold" },
|
||||||
|
{ amount: 6e63, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "reality_forge",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 8e69,
|
||||||
|
description:
|
||||||
|
"The complete record of every reality the Forge has ever produced, indexed, annotated, and preserved. Your universe has a surprisingly detailed entry with several editorial notes.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "creation_archive",
|
||||||
|
name: "The Creation Archive",
|
||||||
|
prerequisiteIds: [ "prime_matrix" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 1e72, type: "gold" },
|
||||||
|
{ amount: 3e68, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "reality_forge",
|
||||||
|
},
|
||||||
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
combatPowerRequired: 1.8e46,
|
combatPowerRequired: 1.8e46,
|
||||||
@@ -1334,7 +1382,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1.5e58, type: "gold" },
|
{ amount: 1.5e58, type: "gold" },
|
||||||
{ amount: 5e54, type: "essence" },
|
{ amount: 5e54, type: "essence" },
|
||||||
{ amount: 3e50, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "cosmic_maelstrom",
|
zoneId: "cosmic_maelstrom",
|
||||||
@@ -1350,7 +1398,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 8e60, type: "gold" },
|
{ amount: 8e60, type: "gold" },
|
||||||
{ amount: 2.5e57, type: "essence" },
|
{ amount: 2.5e57, type: "essence" },
|
||||||
{ amount: 1.5e53, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "infinity_ranger", type: "adventurer" },
|
{ targetId: "infinity_ranger", type: "adventurer" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1367,7 +1415,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 4e63, type: "gold" },
|
{ amount: 4e63, type: "gold" },
|
||||||
{ amount: 1.2e60, type: "essence" },
|
{ amount: 1.2e60, type: "essence" },
|
||||||
{ amount: 7e55, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "cosmic_maelstrom",
|
zoneId: "cosmic_maelstrom",
|
||||||
@@ -1383,7 +1431,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e66, type: "gold" },
|
{ amount: 2e66, type: "gold" },
|
||||||
{ amount: 6e62, type: "essence" },
|
{ amount: 6e62, type: "essence" },
|
||||||
{ amount: 3.5e58, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "reality_warden_1", type: "upgrade" },
|
{ targetId: "reality_warden_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1400,12 +1448,60 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e69, type: "gold" },
|
{ amount: 1e69, type: "gold" },
|
||||||
{ amount: 3e65, type: "essence" },
|
{ amount: 3e65, type: "essence" },
|
||||||
{ amount: 1.8e61, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "infinity_ranger_1", type: "upgrade" },
|
{ targetId: "infinity_ranger_1", type: "upgrade" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "cosmic_maelstrom",
|
zoneId: "cosmic_maelstrom",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 2e73,
|
||||||
|
description:
|
||||||
|
"The deepest layer of the maelstrom — where the storms have been spiralling for so long they have created something resembling order. Your guild navigates it by learning to read the shape of chaos.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "maelstrom_deep",
|
||||||
|
name: "The Deep Maelstrom",
|
||||||
|
prerequisiteIds: [ "maelstrom_codex" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 5e76, type: "gold" },
|
||||||
|
{ amount: 1.5e73, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "cosmic_maelstrom",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 5e79,
|
||||||
|
description:
|
||||||
|
"The point at which all the storm currents converge — not because they are drawn there, but because there is nowhere else left to go. Your guild stands in the geometric centre of cosmic fury.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "maelstrom_nexus",
|
||||||
|
name: "The Storm Nexus",
|
||||||
|
prerequisiteIds: [ "maelstrom_deep" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 2e83, type: "gold" },
|
||||||
|
{ amount: 6e79, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "cosmic_maelstrom",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 1e86,
|
||||||
|
description:
|
||||||
|
"The record of every storm that has ever been — an archive written in lightning, indexed in thunder, preserved in the kind of silence that only exists at the exact centre of infinite noise.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "storm_chronicle",
|
||||||
|
name: "The Storm Chronicle",
|
||||||
|
prerequisiteIds: [ "maelstrom_nexus" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 1e90, type: "gold" },
|
||||||
|
{ amount: 3e86, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "cosmic_maelstrom",
|
||||||
|
},
|
||||||
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
combatPowerRequired: 7.2e49,
|
combatPowerRequired: 7.2e49,
|
||||||
@@ -1434,7 +1530,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2.5e76, type: "gold" },
|
{ amount: 2.5e76, type: "gold" },
|
||||||
{ amount: 7e72, type: "essence" },
|
{ amount: 7e72, type: "essence" },
|
||||||
{ amount: 4e68, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primeval_sanctum",
|
zoneId: "primeval_sanctum",
|
||||||
@@ -1450,7 +1546,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1.2e80, type: "gold" },
|
{ amount: 1.2e80, type: "gold" },
|
||||||
{ amount: 3.5e76, type: "essence" },
|
{ amount: 3.5e76, type: "essence" },
|
||||||
{ amount: 2e72, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
{ targetId: "transcendent_rogue", type: "adventurer" },
|
{ targetId: "transcendent_rogue", type: "adventurer" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
@@ -1467,7 +1563,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 6e83, type: "gold" },
|
{ amount: 6e83, type: "gold" },
|
||||||
{ amount: 1.8e80, type: "essence" },
|
{ amount: 1.8e80, type: "essence" },
|
||||||
{ amount: 1e76, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primeval_sanctum",
|
zoneId: "primeval_sanctum",
|
||||||
@@ -1483,7 +1579,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e87, type: "gold" },
|
{ amount: 3e87, type: "gold" },
|
||||||
{ amount: 9e83, type: "essence" },
|
{ amount: 9e83, type: "essence" },
|
||||||
{ amount: 5e79, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primeval_sanctum",
|
zoneId: "primeval_sanctum",
|
||||||
@@ -1499,7 +1595,55 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1.5e91, type: "gold" },
|
{ amount: 1.5e91, type: "gold" },
|
||||||
{ amount: 4.5e87, type: "essence" },
|
{ amount: 4.5e87, type: "essence" },
|
||||||
{ amount: 2.5e83, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "primeval_sanctum",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 3e92,
|
||||||
|
description:
|
||||||
|
"The deepest chambers of the sanctum — where the primordia are not preserved but still occurring, still being, still becoming for the first and only time. The floor hums with unfinished creation.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "sanctum_deep",
|
||||||
|
name: "The Deep Sanctum",
|
||||||
|
prerequisiteIds: [ "sanctum_chronicle" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 8e95, type: "gold" },
|
||||||
|
{ amount: 2.5e92, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "primeval_sanctum",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 8e98,
|
||||||
|
description:
|
||||||
|
"The crossroads between everything primeval and everything that came after — a threshold so old that every subsequent age of the universe is, from its perspective, still ongoing.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "sanctum_nexus",
|
||||||
|
name: "The Primeval Nexus",
|
||||||
|
prerequisiteIds: [ "sanctum_deep" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 4e102, type: "gold" },
|
||||||
|
{ amount: 1.2e99, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "primeval_sanctum",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 2e105,
|
||||||
|
description:
|
||||||
|
"The sanctum's final gift to those who reached its depths: a full accounting of what it means to have existed before time had opinions about how things should go. Your guild is the first to read it.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "primeval_archive",
|
||||||
|
name: "The Primeval Archive",
|
||||||
|
prerequisiteIds: [ "sanctum_nexus" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 2e109, type: "gold" },
|
||||||
|
{ amount: 6e105, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "primeval_sanctum",
|
zoneId: "primeval_sanctum",
|
||||||
@@ -1532,7 +1676,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 4e101, type: "gold" },
|
{ amount: 4e101, type: "gold" },
|
||||||
{ amount: 1.2e98, type: "essence" },
|
{ amount: 1.2e98, type: "essence" },
|
||||||
{ amount: 6e93, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
@@ -1548,7 +1692,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 2e108, type: "gold" },
|
{ amount: 2e108, type: "gold" },
|
||||||
{ amount: 6e104, type: "essence" },
|
{ amount: 6e104, type: "essence" },
|
||||||
{ amount: 3e100, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
@@ -1564,7 +1708,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 1e115, type: "gold" },
|
{ amount: 1e115, type: "gold" },
|
||||||
{ amount: 3e111, type: "essence" },
|
{ amount: 3e111, type: "essence" },
|
||||||
{ amount: 1.5e107, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
@@ -1580,7 +1724,7 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 5e121, type: "gold" },
|
{ amount: 5e121, type: "gold" },
|
||||||
{ amount: 1.5e118, type: "essence" },
|
{ amount: 1.5e118, type: "essence" },
|
||||||
{ amount: 7e113, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
@@ -1596,7 +1740,103 @@ export const defaultQuests: Array<Quest> = [
|
|||||||
rewards: [
|
rewards: [
|
||||||
{ amount: 3e130, type: "gold" },
|
{ amount: 3e130, type: "gold" },
|
||||||
{ amount: 9e126, type: "essence" },
|
{ amount: 9e126, type: "essence" },
|
||||||
{ amount: 4e122, type: "crystals" },
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "the_absolute",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 5e111,
|
||||||
|
description:
|
||||||
|
"Beyond the end of everything, there is more. Not in contradiction — but in the way that answers, once found, reveal the next question. Your guild goes further than the concept of further was designed to accommodate.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "absolute_beyond",
|
||||||
|
name: "Beyond the Absolute",
|
||||||
|
prerequisiteIds: [ "absolute_dominion" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 1e118, type: "gold" },
|
||||||
|
{ amount: 3e114, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "the_absolute",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 1e118,
|
||||||
|
description:
|
||||||
|
"The region that exists past the end of existence — a space defined not by what it contains but by being the place where containment no longer applies. Your guild navigates it by not needing it to make sense.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "absolute_depth",
|
||||||
|
name: "The Absolute Depth",
|
||||||
|
prerequisiteIds: [ "absolute_beyond" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 5e124, type: "gold" },
|
||||||
|
{ amount: 1.5e121, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "the_absolute",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 3e124,
|
||||||
|
description:
|
||||||
|
"The final record: not of what happened, but of the fact that it happened at all. A guild from a mortal realm reached the end of all things and chose to keep going. The universe notes this with something that is not quite surprise.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "absolute_chronicle",
|
||||||
|
name: "The Absolute Chronicle",
|
||||||
|
prerequisiteIds: [ "absolute_depth" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 2e131, type: "gold" },
|
||||||
|
{ amount: 6e127, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "the_absolute",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 2e130,
|
||||||
|
description:
|
||||||
|
"A region beyond the final record — where even the concept of record has ended and only raw, unwitnessed existence remains. Your guild walks it anyway, because that is what your guild does.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "post_absolute_wastes",
|
||||||
|
name: "The Post-Absolute Wastes",
|
||||||
|
prerequisiteIds: [ "absolute_chronicle" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 1e137, type: "gold" },
|
||||||
|
{ amount: 3e133, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "the_absolute",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 1e137,
|
||||||
|
description:
|
||||||
|
"The space between the final end and whatever follows it — a silence so complete that your guild's presence is the loudest thing that has ever existed here. They proceed in hushed awe.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "terminal_silence",
|
||||||
|
name: "The Terminal Silence",
|
||||||
|
prerequisiteIds: [ "post_absolute_wastes" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 5e143, type: "gold" },
|
||||||
|
{ amount: 1.5e140, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
|
],
|
||||||
|
status: "locked",
|
||||||
|
zoneId: "the_absolute",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combatPowerRequired: 5e141,
|
||||||
|
description:
|
||||||
|
"The last thing your guild will ever witness before the Absolute One. Not a place. Not a moment. A threshold so final that crossing it means there is only one thing left in existence worth confronting. Your guild crosses it.",
|
||||||
|
durationSeconds: 24 * 60 * 60,
|
||||||
|
id: "final_threshold",
|
||||||
|
name: "The Final Threshold",
|
||||||
|
prerequisiteIds: [ "terminal_silence" ],
|
||||||
|
rewards: [
|
||||||
|
{ amount: 2e150, type: "gold" },
|
||||||
|
{ amount: 6e146, type: "essence" },
|
||||||
|
{ amount: 0, type: "crystals" },
|
||||||
],
|
],
|
||||||
status: "locked",
|
status: "locked",
|
||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
zoneId: "verdant_vale",
|
zoneId: "verdant_vale",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.12 },
|
bonus: { type: "combat_power", value: 1.2 },
|
||||||
description:
|
description:
|
||||||
"A ward fashioned from bark older than the kingdom. Its presence on the battlefield is not merely physical — something ancient watches through it.",
|
"A ward fashioned from bark older than the kingdom. Its presence on the battlefield is not merely physical — something ancient watches through it.",
|
||||||
id: "elder_bark_shield",
|
id: "elder_bark_shield",
|
||||||
@@ -101,7 +101,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
zoneId: "shadow_marshes",
|
zoneId: "shadow_marshes",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.1 },
|
bonus: { type: "combat_power", value: 1.15 },
|
||||||
description:
|
description:
|
||||||
"The cursed bone and shadow essence combined into a focus that doesn't so much help your party fight as make things afraid of them before the battle begins.",
|
"The cursed bone and shadow essence combined into a focus that doesn't so much help your party fight as make things afraid of them before the battle begins.",
|
||||||
id: "cursed_focus",
|
id: "cursed_focus",
|
||||||
@@ -127,7 +127,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
zoneId: "volcanic_depths",
|
zoneId: "volcanic_depths",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.12 },
|
bonus: { type: "combat_power", value: 1.2 },
|
||||||
description:
|
description:
|
||||||
"The legendary ore, smelted in the volcanic forges with magma stone as fuel. What emerges is something the fire elementals recognise — and fear slightly.",
|
"The legendary ore, smelted in the volcanic forges with magma stone as fuel. What emerges is something the fire elementals recognise — and fear slightly.",
|
||||||
id: "elemental_ore_ingot",
|
id: "elemental_ore_ingot",
|
||||||
@@ -193,7 +193,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 8: abyssal_trench
|
// Zone 8: abyssal_trench
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.15 },
|
bonus: { type: "combat_power", value: 1.25 },
|
||||||
description:
|
description:
|
||||||
"Trench coral and pressure gem combined under conditions that should have destroyed both. The result is something that survived conditions nothing should survive, which is ideal for combat.",
|
"Trench coral and pressure gem combined under conditions that should have destroyed both. The result is something that survived conditions nothing should survive, which is ideal for combat.",
|
||||||
id: "pressure_forged_core",
|
id: "pressure_forged_core",
|
||||||
@@ -271,7 +271,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 11: void_sanctum
|
// Zone 11: void_sanctum
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.18 },
|
bonus: { type: "combat_power", value: 1.28 },
|
||||||
description:
|
description:
|
||||||
"Null matter and resonance fragments assembled into something that generates a field where the laws governing how hard things are to kill become negotiable.",
|
"Null matter and resonance fragments assembled into something that generates a field where the laws governing how hard things are to kill become negotiable.",
|
||||||
id: "null_field_generator",
|
id: "null_field_generator",
|
||||||
@@ -309,7 +309,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
zoneId: "eternal_throne",
|
zoneId: "eternal_throne",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.2 },
|
bonus: { type: "combat_power", value: 1.3 },
|
||||||
description:
|
description:
|
||||||
"An eternity splinter set into crown fragments, shaped into a ring. What it binds is unclear. Whatever it is, it makes your party significantly harder to kill.",
|
"An eternity splinter set into crown fragments, shaped into a ring. What it binds is unclear. Whatever it is, it makes your party significantly harder to kill.",
|
||||||
id: "eternity_bound_ring",
|
id: "eternity_bound_ring",
|
||||||
@@ -375,7 +375,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 15: reality_forge
|
// Zone 15: reality_forge
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.22 },
|
bonus: { type: "combat_power", value: 1.35 },
|
||||||
description:
|
description:
|
||||||
"Forge ash smelted with creation tools into an ingot of compressed reality. Your party hits harder when carrying it. Reality does not enjoy being concentrated like this.",
|
"Forge ash smelted with creation tools into an ingot of compressed reality. Your party hits harder when carrying it. Reality does not enjoy being concentrated like this.",
|
||||||
id: "reality_ingot",
|
id: "reality_ingot",
|
||||||
@@ -427,7 +427,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 17: primeval_sanctum
|
// Zone 17: primeval_sanctum
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.25 },
|
bonus: { type: "combat_power", value: 1.4 },
|
||||||
description:
|
description:
|
||||||
"Ancient dust and memory shards arranged into something that remembers how to fight before fighting was invented. Your party benefits from this instinct enormously.",
|
"Ancient dust and memory shards arranged into something that remembers how to fight before fighting was invented. Your party benefits from this instinct enormously.",
|
||||||
id: "ancient_memory_array",
|
id: "ancient_memory_array",
|
||||||
@@ -506,7 +506,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.4 },
|
bonus: { type: "combat_power", value: 1.65 },
|
||||||
description:
|
description:
|
||||||
"An eternity splinter from the eternal throne, set at the boundary between everything and nothing with an omega crystal and bound by boundary shards. Where eternity meets the absolute, something is forged that has never existed and will never exist again. Your party fights as if they know this.",
|
"An eternity splinter from the eternal throne, set at the boundary between everything and nothing with an omega crystal and bound by boundary shards. Where eternity meets the absolute, something is forged that has never existed and will never exist again. Your party fights as if they know this.",
|
||||||
id: "eternal_omega",
|
id: "eternal_omega",
|
||||||
@@ -546,7 +546,7 @@ export const defaultRecipes: Array<CraftingRecipe> = [
|
|||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.3 },
|
bonus: { type: "combat_power", value: 1.55 },
|
||||||
description:
|
description:
|
||||||
"The last omega crystal, set at the convergence of boundary shards in the precise arrangement of an ending. What it does to combat is what endings do to everything: make it final.",
|
"The last omega crystal, set at the convergence of boundary shards in the precise arrangement of an ending. What it does to combat is what endings do to everything: make it final.",
|
||||||
id: "omega_convergence",
|
id: "omega_convergence",
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ export const defaultTranscendenceUpgrades: Array<TranscendenceUpgrade> = [
|
|||||||
// ── Echo meta multipliers ───────────────────────────────────────────────────
|
// ── Echo meta multipliers ───────────────────────────────────────────────────
|
||||||
{
|
{
|
||||||
category: "echo_meta",
|
category: "echo_meta",
|
||||||
cost: 25,
|
cost: 15,
|
||||||
description:
|
description:
|
||||||
"Your transcendence resonates deeper, amplifying future echo yields by 25%.",
|
"Your transcendence resonates deeper, amplifying future echo yields by 25%.",
|
||||||
id: "echo_meta_1",
|
id: "echo_meta_1",
|
||||||
@@ -136,7 +136,7 @@ export const defaultTranscendenceUpgrades: Array<TranscendenceUpgrade> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: "echo_meta",
|
category: "echo_meta",
|
||||||
cost: 75,
|
cost: 45,
|
||||||
description:
|
description:
|
||||||
"Each loop of existence makes the next more powerful — future echo yields +50%.",
|
"Each loop of existence makes the next more powerful — future echo yields +50%.",
|
||||||
id: "echo_meta_2",
|
id: "echo_meta_2",
|
||||||
@@ -145,7 +145,7 @@ export const defaultTranscendenceUpgrades: Array<TranscendenceUpgrade> = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: "echo_meta",
|
category: "echo_meta",
|
||||||
cost: 200,
|
cost: 100,
|
||||||
description:
|
description:
|
||||||
"You have mastered the infinite spiral of transcendence, doubling all future echo yields.",
|
"You have mastered the infinite spiral of transcendence, doubling all future echo yields.",
|
||||||
id: "echo_meta_3",
|
id: "echo_meta_3",
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ export const defaultUpgrades: Array<Upgrade> = [
|
|||||||
description:
|
description:
|
||||||
"Forge partnerships with mage guilds across the realm. All income +50%.",
|
"Forge partnerships with mage guilds across the realm. All income +50%.",
|
||||||
id: "essence_guild",
|
id: "essence_guild",
|
||||||
multiplier: 1.5,
|
multiplier: 2,
|
||||||
name: "Essence Guild",
|
name: "Essence Guild",
|
||||||
purchased: false,
|
purchased: false,
|
||||||
target: "global",
|
target: "global",
|
||||||
@@ -459,7 +459,7 @@ export const defaultUpgrades: Array<Upgrade> = [
|
|||||||
unlocked: false,
|
unlocked: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
costCrystals: 10_000_000,
|
costCrystals: 50_000_000,
|
||||||
costEssence: 0,
|
costEssence: 0,
|
||||||
costGold: 0,
|
costGold: 0,
|
||||||
description: "Transcend mortal limits through void energy. All income x3.",
|
description: "Transcend mortal limits through void energy. All income x3.",
|
||||||
|
|||||||
@@ -881,6 +881,30 @@ describe("debug route", () => {
|
|||||||
expect(body.bossesPatched).toBe(1);
|
expect(body.bossesPatched).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("patches boss when only equipmentRewards differ (covers savedRewards branch)", async () => {
|
||||||
|
const state = makeState({
|
||||||
|
bosses: [{ id: "troll_king", status: "available", currentHp: 1000, maxHp: 1000, upgradeRewards: ["click_2"], bountyRunestonesClaimed: false, damagePerSecond: 5, goldReward: 10_000, essenceReward: 25, crystalReward: 5, equipmentRewards: [], prestigeRequirement: 0, zoneId: "verdant_vale", bountyRunestones: 1, name: "The Troll King", description: "Gruk the Immovable has terrorised the trade roads for decades. Merchants will pay handsomely for his head." }] as GameState["bosses"],
|
||||||
|
});
|
||||||
|
vi.mocked(prisma.gameState.findUnique).mockResolvedValueOnce({ state } as never);
|
||||||
|
vi.mocked(prisma.gameState.update).mockResolvedValueOnce({} as never);
|
||||||
|
const res = await syncNewContent();
|
||||||
|
expect(res.status).toBe(200);
|
||||||
|
const body = await res.json() as { bossesPatched: number };
|
||||||
|
expect(body.bossesPatched).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("patches boss when only bountyRunestones differs with all other fields matching", async () => {
|
||||||
|
const state = makeState({
|
||||||
|
bosses: [{ id: "troll_king", status: "available", currentHp: 1000, maxHp: 1000, upgradeRewards: ["click_2"], bountyRunestonesClaimed: false, damagePerSecond: 5, goldReward: 10_000, essenceReward: 25, crystalReward: 5, equipmentRewards: ["iron_sword", "chainmail", "mages_focus"], prestigeRequirement: 0, zoneId: "verdant_vale", bountyRunestones: 99, name: "The Troll King", description: "Gruk the Immovable has terrorised the trade roads for decades. Merchants will pay handsomely for his head." }] as GameState["bosses"],
|
||||||
|
});
|
||||||
|
vi.mocked(prisma.gameState.findUnique).mockResolvedValueOnce({ state } as never);
|
||||||
|
vi.mocked(prisma.gameState.update).mockResolvedValueOnce({} as never);
|
||||||
|
const res = await syncNewContent();
|
||||||
|
expect(res.status).toBe(200);
|
||||||
|
const body = await res.json() as { bossesPatched: number };
|
||||||
|
expect(body.bossesPatched).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
it("skips boss stat patching for bosses not in defaults", async () => {
|
it("skips boss stat patching for bosses not in defaults", async () => {
|
||||||
const state = makeState({
|
const state = makeState({
|
||||||
bosses: [{ id: "nonexistent_boss_xyz", status: "available", currentHp: 100, maxHp: 1, upgradeRewards: [], bountyRunestonesClaimed: false, damagePerSecond: 1, goldReward: 1, essenceReward: 1, crystalReward: 1, equipmentRewards: [], prestigeRequirement: 0, zoneId: "old_zone", bountyRunestones: 0, name: "Ghost", description: "Old" }] as GameState["bosses"],
|
bosses: [{ id: "nonexistent_boss_xyz", status: "available", currentHp: 100, maxHp: 1, upgradeRewards: [], bountyRunestonesClaimed: false, damagePerSecond: 1, goldReward: 1, essenceReward: 1, crystalReward: 1, equipmentRewards: [], prestigeRequirement: 0, zoneId: "old_zone", bountyRunestones: 0, name: "Ghost", description: "Old" }] as GameState["bosses"],
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
zoneId: "verdant_vale",
|
zoneId: "verdant_vale",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.08 },
|
bonus: { type: "combat_power", value: 1.2 },
|
||||||
description:
|
description:
|
||||||
"A ward fashioned from bark older than the kingdom. Its presence on the battlefield is not merely physical — something ancient watches through it.",
|
"A ward fashioned from bark older than the kingdom. Its presence on the battlefield is not merely physical — something ancient watches through it.",
|
||||||
id: "elder_bark_shield",
|
id: "elder_bark_shield",
|
||||||
@@ -102,7 +102,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
zoneId: "shadow_marshes",
|
zoneId: "shadow_marshes",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.1 },
|
bonus: { type: "combat_power", value: 1.15 },
|
||||||
description:
|
description:
|
||||||
"The cursed bone and shadow essence combined into a focus that doesn't so much help your party fight as make things afraid of them before the battle begins.",
|
"The cursed bone and shadow essence combined into a focus that doesn't so much help your party fight as make things afraid of them before the battle begins.",
|
||||||
id: "cursed_focus",
|
id: "cursed_focus",
|
||||||
@@ -128,7 +128,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
zoneId: "volcanic_depths",
|
zoneId: "volcanic_depths",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.12 },
|
bonus: { type: "combat_power", value: 1.2 },
|
||||||
description:
|
description:
|
||||||
"The legendary ore, smelted in the volcanic forges with magma stone as fuel. What emerges is something the fire elementals recognise — and fear slightly.",
|
"The legendary ore, smelted in the volcanic forges with magma stone as fuel. What emerges is something the fire elementals recognise — and fear slightly.",
|
||||||
id: "elemental_ore_ingot",
|
id: "elemental_ore_ingot",
|
||||||
@@ -194,7 +194,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 8: abyssal_trench
|
// Zone 8: abyssal_trench
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.15 },
|
bonus: { type: "combat_power", value: 1.25 },
|
||||||
description:
|
description:
|
||||||
"Trench coral and pressure gem combined under conditions that should have destroyed both. The result is something that survived conditions nothing should survive, which is ideal for combat.",
|
"Trench coral and pressure gem combined under conditions that should have destroyed both. The result is something that survived conditions nothing should survive, which is ideal for combat.",
|
||||||
id: "pressure_forged_core",
|
id: "pressure_forged_core",
|
||||||
@@ -272,7 +272,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 11: void_sanctum
|
// Zone 11: void_sanctum
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.18 },
|
bonus: { type: "combat_power", value: 1.28 },
|
||||||
description:
|
description:
|
||||||
"Null matter and resonance fragments assembled into something that generates a field where the laws governing how hard things are to kill become negotiable.",
|
"Null matter and resonance fragments assembled into something that generates a field where the laws governing how hard things are to kill become negotiable.",
|
||||||
id: "null_field_generator",
|
id: "null_field_generator",
|
||||||
@@ -310,7 +310,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
zoneId: "eternal_throne",
|
zoneId: "eternal_throne",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.2 },
|
bonus: { type: "combat_power", value: 1.3 },
|
||||||
description:
|
description:
|
||||||
"An eternity splinter set into crown fragments, shaped into a ring. What it binds is unclear. Whatever it is, it makes your party significantly harder to kill.",
|
"An eternity splinter set into crown fragments, shaped into a ring. What it binds is unclear. Whatever it is, it makes your party significantly harder to kill.",
|
||||||
id: "eternity_bound_ring",
|
id: "eternity_bound_ring",
|
||||||
@@ -376,7 +376,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 15: reality_forge
|
// Zone 15: reality_forge
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.22 },
|
bonus: { type: "combat_power", value: 1.35 },
|
||||||
description:
|
description:
|
||||||
"Forge ash smelted with creation tools into an ingot of compressed reality. Your party hits harder when carrying it. Reality does not enjoy being concentrated like this.",
|
"Forge ash smelted with creation tools into an ingot of compressed reality. Your party hits harder when carrying it. Reality does not enjoy being concentrated like this.",
|
||||||
id: "reality_ingot",
|
id: "reality_ingot",
|
||||||
@@ -428,7 +428,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
|
|
||||||
// Zone 17: primeval_sanctum
|
// Zone 17: primeval_sanctum
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.25 },
|
bonus: { type: "combat_power", value: 1.4 },
|
||||||
description:
|
description:
|
||||||
"Ancient dust and memory shards arranged into something that remembers how to fight before fighting was invented. Your party benefits from this instinct enormously.",
|
"Ancient dust and memory shards arranged into something that remembers how to fight before fighting was invented. Your party benefits from this instinct enormously.",
|
||||||
id: "ancient_memory_array",
|
id: "ancient_memory_array",
|
||||||
@@ -466,7 +466,7 @@ export const RECIPES: Array<CraftingRecipe> = [
|
|||||||
zoneId: "the_absolute",
|
zoneId: "the_absolute",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bonus: { type: "combat_power", value: 1.3 },
|
bonus: { type: "combat_power", value: 1.55 },
|
||||||
description:
|
description:
|
||||||
"The last omega crystal, set at the convergence of boundary shards in the precise arrangement of an ending. What it does to combat is what endings do to everything: make it final.",
|
"The last omega crystal, set at the convergence of boundary shards in the precise arrangement of an ending. What it does to combat is what endings do to everything: make it final.",
|
||||||
id: "omega_convergence",
|
id: "omega_convergence",
|
||||||
|
|||||||
+23
-18
@@ -11,7 +11,6 @@
|
|||||||
/* eslint-disable max-lines -- Engine file necessarily exceeds line limit */
|
/* eslint-disable max-lines -- Engine file necessarily exceeds line limit */
|
||||||
/* eslint-disable import/group-exports -- Exports appear alongside their definitions for readability */
|
/* eslint-disable import/group-exports -- Exports appear alongside their definitions for readability */
|
||||||
/* eslint-disable import/exports-last -- Exports appear alongside their definitions for readability */
|
/* eslint-disable import/exports-last -- Exports appear alongside their definitions for readability */
|
||||||
/* eslint-disable unicorn/no-array-reduce -- reduce is the most readable approach for multiplier chains */
|
|
||||||
/* eslint-disable max-nested-callbacks -- Tick engine requires nested array operations for game logic */
|
/* eslint-disable max-nested-callbacks -- Tick engine requires nested array operations for game logic */
|
||||||
import {
|
import {
|
||||||
type Achievement,
|
type Achievement,
|
||||||
@@ -302,7 +301,7 @@ export const computeEffectiveAdventurerStats = (
|
|||||||
|
|
||||||
const runestonesIncome = state.prestige.runestonesIncomeMultiplier ?? 1;
|
const runestonesIncome = state.prestige.runestonesIncomeMultiplier ?? 1;
|
||||||
const runestonesEssence = state.prestige.runestonesEssenceMultiplier ?? 1;
|
const runestonesEssence = state.prestige.runestonesEssenceMultiplier ?? 1;
|
||||||
const prestigeCombatMultiplier = Math.pow(PRESTIGE_COMBAT_BASE, state.prestige.count);
|
const prestigeCombatMultiplier = PRESTIGE_COMBAT_BASE ** state.prestige.count;
|
||||||
const echoIncome = state.transcendence?.echoIncomeMultiplier ?? 1;
|
const echoIncome = state.transcendence?.echoIncomeMultiplier ?? 1;
|
||||||
const echoCombatMultiplier = state.transcendence?.echoCombatMultiplier ?? 1;
|
const echoCombatMultiplier = state.transcendence?.echoCombatMultiplier ?? 1;
|
||||||
const craftedGoldMultiplier
|
const craftedGoldMultiplier
|
||||||
@@ -383,7 +382,7 @@ export const computePartyCombatPower = (state: GameState): number => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const prestigeMultiplier = Math.pow(PRESTIGE_COMBAT_BASE, state.prestige.count);
|
const prestigeMultiplier = PRESTIGE_COMBAT_BASE ** state.prestige.count;
|
||||||
|
|
||||||
const equipmentCombatMultiplier = state.equipment.
|
const equipmentCombatMultiplier = state.equipment.
|
||||||
filter((item) => {
|
filter((item) => {
|
||||||
@@ -476,8 +475,8 @@ export const computeProjectedRunestones = (state: GameState): number => {
|
|||||||
? 1.5
|
? 1.5
|
||||||
: 1;
|
: 1;
|
||||||
const runestoneMult = gain1Mult * gain2Mult;
|
const runestoneMult = gain1Mult * gain2Mult;
|
||||||
/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- optional chained game state field */
|
const echoMult: number
|
||||||
const echoMult: number = state.transcendence?.echoRunestoneMultiplier ?? 1;
|
= state.transcendence?.echoPrestigeRunestoneMultiplier ?? 1;
|
||||||
return Math.floor(base * runestoneMult * echoMult);
|
return Math.floor(base * runestoneMult * echoMult);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -818,24 +817,30 @@ export const applyTick = (
|
|||||||
zones: updatedZones,
|
zones: updatedZones,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check achievements and apply crystal rewards for newly unlocked ones
|
// Check achievements and apply crystal and runestone rewards for newly unlocked ones
|
||||||
const updatedAchievements = checkAchievements(partialState);
|
const updatedAchievements = checkAchievements(partialState);
|
||||||
const crystalsFromAchievements = updatedAchievements.reduce(
|
let crystalsFromAchievements = 0;
|
||||||
(sum, achievement, index) => {
|
let runestonesFromAchievements = 0;
|
||||||
const wasLocked = state.achievements[index]?.unlockedAt === null;
|
for (const [ index, achievement ] of updatedAchievements.entries()) {
|
||||||
const isNowUnlocked = achievement.unlockedAt !== null;
|
const wasLocked = state.achievements[index]?.unlockedAt === null;
|
||||||
if (wasLocked && isNowUnlocked) {
|
const isNowUnlocked = achievement.unlockedAt !== null;
|
||||||
return sum + (achievement.reward?.crystals ?? 0);
|
if (wasLocked && isNowUnlocked) {
|
||||||
}
|
crystalsFromAchievements
|
||||||
return sum;
|
= crystalsFromAchievements + (achievement.reward?.crystals ?? 0);
|
||||||
},
|
runestonesFromAchievements
|
||||||
0,
|
= runestonesFromAchievements + (achievement.reward?.runestones ?? 0);
|
||||||
);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...partialState,
|
...partialState,
|
||||||
achievements: updatedAchievements,
|
achievements: updatedAchievements,
|
||||||
resources: {
|
prestige: {
|
||||||
|
...partialState.prestige,
|
||||||
|
runestones:
|
||||||
|
partialState.prestige.runestones + runestonesFromAchievements,
|
||||||
|
},
|
||||||
|
resources: {
|
||||||
...partialState.resources,
|
...partialState.resources,
|
||||||
crystals: capResource(
|
crystals: capResource(
|
||||||
partialState.resources.crystals + crystalsFromAchievements,
|
partialState.resources.crystals + crystalsFromAchievements,
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ interface AchievementCondition {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface AchievementReward {
|
interface AchievementReward {
|
||||||
crystals?: number;
|
crystals?: number;
|
||||||
|
runestones?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Achievement {
|
interface Achievement {
|
||||||
|
|||||||
Reference in New Issue
Block a user