generated from nhcarrigan/template
feat: initial prototype — core game systems (#30)
## Summary This PR represents the full v1 prototype, implementing the core game systems for Elysium. - Full idle/clicker RPG loop: resource collection, crafting, boss fights, exploration, and quests - Adventurer hiring with batch size selector and progressive tier cost scaling - Prestige, transcendence, and apotheosis systems with auto-prestige support - Character sheet, titles, leaderboards, companion system, and daily login bonuses - Auto-quest and auto-boss toggles - Discord webhook notifications on prestige/transcendence/apotheosis - Discord role awarded on apotheosis - Responsive design and overarching story/lore system - In-game sound effects and browser notifications for key events - Support link button in the resource bar - Full test coverage (100% on `apps/api` and `packages/types`) - CI pipeline: lint → build → test ## Closes Closes #1 Closes #2 Closes #3 Closes #4 Closes #5 Closes #6 Closes #7 Closes #8 Closes #9 Closes #10 Closes #11 Closes #12 Closes #13 Closes #14 Closes #16 Closes #19 Closes #20 Closes #21 Closes #22 Closes #23 Closes #24 Closes #25 Closes #26 Closes #27 Closes #29 ✨ This issue was created with help from Hikari~ 🌸 Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com> Reviewed-on: #30 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #30.
This commit is contained in:
@@ -0,0 +1,366 @@
|
||||
/**
|
||||
* @file Game data definitions.
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
/* eslint-disable max-lines -- Data file */
|
||||
import type { Achievement } from "@elysium/types";
|
||||
|
||||
export const defaultAchievements: Array<Achievement> = [
|
||||
// Click milestones
|
||||
{
|
||||
condition: { amount: 1, type: "totalClicks" },
|
||||
description: "Click the Guild Hall for the first time.",
|
||||
icon: "👆",
|
||||
id: "first_click",
|
||||
name: "First Strike",
|
||||
reward: { crystals: 5 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 100, type: "totalClicks" },
|
||||
description: "Click the Guild Hall 100 times.",
|
||||
icon: "🖱️",
|
||||
id: "click_enthusiast",
|
||||
name: "Click Enthusiast",
|
||||
reward: { crystals: 25 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 1000, type: "totalClicks" },
|
||||
description: "Click the Guild Hall 1,000 times.",
|
||||
icon: "⚡",
|
||||
id: "click_master",
|
||||
name: "Click Master",
|
||||
reward: { crystals: 100 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 10_000, type: "totalClicks" },
|
||||
description: "Click the Guild Hall 10,000 times.",
|
||||
icon: "🌩️",
|
||||
id: "click_legend",
|
||||
name: "Click Legend",
|
||||
reward: { crystals: 300 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Gold milestones
|
||||
{
|
||||
condition: { amount: 100, type: "totalGoldEarned" },
|
||||
description: "Earn your first 100 gold.",
|
||||
icon: "🪙",
|
||||
id: "first_gold",
|
||||
name: "First Gold",
|
||||
reward: { crystals: 5 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 10_000, type: "totalGoldEarned" },
|
||||
description: "Earn 10,000 gold in total.",
|
||||
icon: "💰",
|
||||
id: "wealthy",
|
||||
name: "Wealthy",
|
||||
reward: { crystals: 25 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 1_000_000, type: "totalGoldEarned" },
|
||||
description: "Earn 1,000,000 gold in total.",
|
||||
icon: "👑",
|
||||
id: "rich",
|
||||
name: "Rich",
|
||||
reward: { crystals: 100 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 1_000_000_000, type: "totalGoldEarned" },
|
||||
description: "Earn 1,000,000,000 gold in total.",
|
||||
icon: "🏦",
|
||||
id: "billionaire",
|
||||
name: "Billionaire",
|
||||
reward: { crystals: 500 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 1_000_000_000_000, type: "totalGoldEarned" },
|
||||
description: "Earn 1,000,000,000,000 gold in total.",
|
||||
icon: "💎",
|
||||
id: "trillionaire",
|
||||
name: "Trillionaire",
|
||||
reward: { crystals: 2000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Quest milestones
|
||||
{
|
||||
condition: { amount: 1, type: "questsCompleted" },
|
||||
description: "Complete your first quest.",
|
||||
icon: "📜",
|
||||
id: "first_quest",
|
||||
name: "Adventurous Spirit",
|
||||
reward: { crystals: 10 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 5, type: "questsCompleted" },
|
||||
description: "Complete 5 quests.",
|
||||
icon: "📚",
|
||||
id: "quest_veteran",
|
||||
name: "Quest Veteran",
|
||||
reward: { crystals: 50 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 15, type: "questsCompleted" },
|
||||
description: "Complete 15 quests.",
|
||||
icon: "🗺️",
|
||||
id: "quest_master",
|
||||
name: "Quest Master",
|
||||
reward: { crystals: 200 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Boss milestones
|
||||
{
|
||||
condition: { amount: 1, type: "bossesDefeated" },
|
||||
description: "Defeat your first boss.",
|
||||
icon: "⚔️",
|
||||
id: "boss_slayer",
|
||||
name: "Boss Slayer",
|
||||
reward: { crystals: 25 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 5, type: "bossesDefeated" },
|
||||
description: "Defeat 5 bosses.",
|
||||
icon: "🗡️",
|
||||
id: "boss_veteran",
|
||||
name: "Boss Veteran",
|
||||
reward: { crystals: 150 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 10, type: "bossesDefeated" },
|
||||
description: "Defeat 10 bosses.",
|
||||
icon: "🏆",
|
||||
id: "legendary_hunter",
|
||||
name: "Legendary Hunter",
|
||||
reward: { crystals: 500 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 18, type: "bossesDefeated" },
|
||||
description: "Defeat all 18 bosses, including the Devourer of Worlds.",
|
||||
icon: "🌟",
|
||||
id: "devourer_slayer",
|
||||
name: "World Saver",
|
||||
reward: { crystals: 2000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Adventurer milestones
|
||||
{
|
||||
condition: { amount: 50, type: "adventurerTotal" },
|
||||
description: "Recruit a total of 50 adventurers.",
|
||||
icon: "🏰",
|
||||
id: "guild_master",
|
||||
name: "Guild Master",
|
||||
reward: { crystals: 50 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 500, type: "adventurerTotal" },
|
||||
description: "Recruit a total of 500 adventurers.",
|
||||
icon: "🛡️",
|
||||
id: "army_commander",
|
||||
name: "Army Commander",
|
||||
reward: { crystals: 200 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 5000, type: "adventurerTotal" },
|
||||
description: "Recruit a total of 5,000 adventurers.",
|
||||
icon: "⚜️",
|
||||
id: "army_legend",
|
||||
name: "Legendary Commander",
|
||||
reward: { crystals: 750 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Prestige milestones
|
||||
{
|
||||
condition: { amount: 1, type: "prestigeCount" },
|
||||
description: "Prestige for the first time.",
|
||||
icon: "⭐",
|
||||
id: "first_prestige",
|
||||
name: "Born Again",
|
||||
reward: { crystals: 100 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Collection milestones
|
||||
{
|
||||
condition: { amount: 4, type: "equipmentOwned" },
|
||||
description: "Acquire your first piece of boss-dropped equipment.",
|
||||
icon: "🎒",
|
||||
id: "collector",
|
||||
name: "Collector",
|
||||
reward: { crystals: 10 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 12, type: "equipmentOwned" },
|
||||
description: "Own 12 pieces of equipment.",
|
||||
icon: "🗃️",
|
||||
id: "arsenal",
|
||||
name: "Arsenal",
|
||||
reward: { crystals: 200 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 25, type: "equipmentOwned" },
|
||||
description: "Own 25 pieces of equipment.",
|
||||
icon: "⚔️",
|
||||
id: "well_armed",
|
||||
name: "Well Armed",
|
||||
reward: { crystals: 1000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 40, type: "equipmentOwned" },
|
||||
description: "Own 40 pieces of equipment.",
|
||||
icon: "🛡️",
|
||||
id: "fully_equipped",
|
||||
name: "Fully Equipped",
|
||||
reward: { crystals: 10_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Higher click milestones
|
||||
{
|
||||
condition: { amount: 100_000, type: "totalClicks" },
|
||||
description: "Click the Guild Hall 100,000 times.",
|
||||
icon: "💥",
|
||||
id: "click_obsessed",
|
||||
name: "Click Obsessed",
|
||||
reward: { crystals: 1000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 1_000_000, type: "totalClicks" },
|
||||
description: "Click the Guild Hall 1,000,000 times.",
|
||||
icon: "☄️",
|
||||
id: "click_deity",
|
||||
name: "Click Deity",
|
||||
reward: { crystals: 5000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Endgame gold milestones
|
||||
{
|
||||
condition: { amount: 1e15, type: "totalGoldEarned" },
|
||||
description: "Earn 1 quadrillion gold in total.",
|
||||
icon: "✨",
|
||||
id: "quadrillionaire",
|
||||
name: "Quadrillionaire",
|
||||
reward: { crystals: 10_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 1e18, type: "totalGoldEarned" },
|
||||
description: "Earn 1 quintillion gold in total.",
|
||||
icon: "🌀",
|
||||
id: "void_hoarder",
|
||||
name: "Void Hoarder",
|
||||
reward: { crystals: 50_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Higher quest milestones
|
||||
{
|
||||
condition: { amount: 30, type: "questsCompleted" },
|
||||
description: "Complete 30 quests.",
|
||||
icon: "🏅",
|
||||
id: "quest_champion",
|
||||
name: "Quest Champion",
|
||||
reward: { crystals: 1000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 50, type: "questsCompleted" },
|
||||
description: "Complete 50 quests.",
|
||||
icon: "🎖️",
|
||||
id: "quest_grandmaster",
|
||||
name: "Quest Grandmaster",
|
||||
reward: { crystals: 5000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 72, type: "questsCompleted" },
|
||||
description: "Complete all 72 quests across the known multiverse.",
|
||||
icon: "🌌",
|
||||
id: "quest_eternal",
|
||||
name: "Quest Eternal",
|
||||
reward: { crystals: 25_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Higher boss milestones
|
||||
{
|
||||
condition: { amount: 20, type: "bossesDefeated" },
|
||||
description: "Defeat 20 bosses.",
|
||||
icon: "🦁",
|
||||
id: "boss_champion",
|
||||
name: "Champion of the Realm",
|
||||
reward: { crystals: 1000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 30, type: "bossesDefeated" },
|
||||
description: "Defeat 30 bosses.",
|
||||
icon: "🔱",
|
||||
id: "boss_grandmaster",
|
||||
name: "Grandmaster Hunter",
|
||||
reward: { crystals: 5000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 60, type: "bossesDefeated" },
|
||||
description: "Defeat all 60 bosses across every plane of existence.",
|
||||
icon: "💀",
|
||||
id: "boss_eternal",
|
||||
name: "Eternal Vanquisher",
|
||||
reward: { crystals: 50_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Higher adventurer milestones
|
||||
{
|
||||
condition: { amount: 50_000, type: "adventurerTotal" },
|
||||
description: "Recruit a total of 50,000 adventurers.",
|
||||
icon: "⚡",
|
||||
id: "army_titan",
|
||||
name: "Titan Commander",
|
||||
reward: { crystals: 5000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
// Higher prestige milestones
|
||||
{
|
||||
condition: { amount: 5, type: "prestigeCount" },
|
||||
description: "Prestige 5 times.",
|
||||
icon: "🌟",
|
||||
id: "prestige_veteran",
|
||||
name: "Veteran of Ages",
|
||||
reward: { crystals: 1000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 10, type: "prestigeCount" },
|
||||
description: "Prestige 10 times.",
|
||||
icon: "💫",
|
||||
id: "prestige_master",
|
||||
name: "Master of Cycles",
|
||||
reward: { crystals: 5000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 25, type: "prestigeCount" },
|
||||
description: "Prestige 25 times.",
|
||||
icon: "🌠",
|
||||
id: "prestige_legend",
|
||||
name: "Legend of Eternity",
|
||||
reward: { crystals: 25_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user