From 1a688394e4f442dd4010cfc2bedf432e108842c1 Mon Sep 17 00:00:00 2001 From: n8n-gitea Date: Fri, 15 May 2026 18:50:41 +0200 Subject: [PATCH] Remove all skill system files - preparing for fresh design phase --- docs/project-structure.txt | 28 -- .../game/SkillsTab/SkillCategory.tsx | 39 -- src/components/game/SkillsTab/SkillRow.tsx | 183 --------- .../game/SkillsTab/SkillStudyProgress.tsx | 47 --- .../game/SkillsTab/SkillUpgradeDialog.tsx | 130 ------ src/components/game/SkillsTab/skills-utils.ts | 82 ---- .../combat-skills-2.ts | 249 ------------ .../skill-evolution-modules/combat-skills.ts | 188 --------- .../skill-evolution-modules/element-caps.ts | 183 --------- .../elemental-attunement.ts | 127 ------ .../enchanting-skills.ts | 282 ------------- .../skill-evolution-modules/focused-mind.ts | 127 ------ .../guardian-skills.ts | 79 ---- .../skill-evolution-modules/hybrid-skills.ts | 372 ------------------ src/lib/game/skill-evolution-modules/index.ts | 229 ----------- .../insight-harvest.ts | 127 ------ .../invocation-skills.ts | 249 ------------ .../knowledge-retention.ts | 81 ---- .../learning-skills.ts | 11 - .../skill-evolution-modules/magic-skills.ts | 9 - .../mana-utility-skills.ts | 139 ------- .../skill-evolution-modules/mana-well-flow.ts | 250 ------------ .../skill-evolution-modules/quick-learner.ts | 127 ------ src/lib/game/skill-evolution-modules/types.ts | 16 - src/lib/game/skill-evolution-modules/utils.ts | 29 -- src/lib/game/skill-evolution.ts | 24 -- src/lib/game/stores/skillStore.ts | 343 ---------------- 27 files changed, 3750 deletions(-) delete mode 100644 src/components/game/SkillsTab/SkillCategory.tsx delete mode 100644 src/components/game/SkillsTab/SkillRow.tsx delete mode 100644 src/components/game/SkillsTab/SkillStudyProgress.tsx delete mode 100644 src/components/game/SkillsTab/SkillUpgradeDialog.tsx delete mode 100644 src/components/game/SkillsTab/skills-utils.ts delete mode 100644 src/lib/game/skill-evolution-modules/combat-skills-2.ts delete mode 100644 src/lib/game/skill-evolution-modules/combat-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/element-caps.ts delete mode 100644 src/lib/game/skill-evolution-modules/elemental-attunement.ts delete mode 100644 src/lib/game/skill-evolution-modules/enchanting-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/focused-mind.ts delete mode 100644 src/lib/game/skill-evolution-modules/guardian-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/hybrid-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/index.ts delete mode 100644 src/lib/game/skill-evolution-modules/insight-harvest.ts delete mode 100644 src/lib/game/skill-evolution-modules/invocation-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/knowledge-retention.ts delete mode 100644 src/lib/game/skill-evolution-modules/learning-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/magic-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/mana-utility-skills.ts delete mode 100644 src/lib/game/skill-evolution-modules/mana-well-flow.ts delete mode 100644 src/lib/game/skill-evolution-modules/quick-learner.ts delete mode 100644 src/lib/game/skill-evolution-modules/types.ts delete mode 100644 src/lib/game/skill-evolution-modules/utils.ts delete mode 100644 src/lib/game/skill-evolution.ts delete mode 100755 src/lib/game/stores/skillStore.ts diff --git a/docs/project-structure.txt b/docs/project-structure.txt index 003087c..9676a2e 100644 --- a/docs/project-structure.txt +++ b/docs/project-structure.txt @@ -78,12 +78,6 @@ Mana-Loop/ │ │ │ │ ├── icons.ts │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts -│ │ │ ├── SkillsTab/ -│ │ │ │ ├── SkillCategory.tsx -│ │ │ │ ├── SkillRow.tsx -│ │ │ │ ├── SkillStudyProgress.tsx -│ │ │ │ ├── SkillUpgradeDialog.tsx -│ │ │ │ └── skills-utils.ts │ │ │ ├── StatsTab/ │ │ │ │ ├── ActiveUpgradesSection.tsx │ │ │ │ ├── CombatStatsSection.tsx @@ -323,26 +317,6 @@ Mana-Loop/ │ │ ├── hooks/ │ │ │ ├── useGameDerived.ts │ │ │ └── useSkillUpgradeSelection.ts -│ │ ├── skill-evolution-modules/ -│ │ │ ├── combat-skills-2.ts -│ │ │ ├── combat-skills.ts -│ │ │ ├── element-caps.ts -│ │ │ ├── elemental-attunement.ts -│ │ │ ├── enchanting-skills.ts -│ │ │ ├── focused-mind.ts -│ │ │ ├── guardian-skills.ts -│ │ │ ├── hybrid-skills.ts -│ │ │ ├── index.ts -│ │ │ ├── insight-harvest.ts -│ │ │ ├── invocation-skills.ts -│ │ │ ├── knowledge-retention.ts -│ │ │ ├── learning-skills.ts -│ │ │ ├── magic-skills.ts -│ │ │ ├── mana-utility-skills.ts -│ │ │ ├── mana-well-flow.ts -│ │ │ ├── quick-learner.ts -│ │ │ ├── types.ts -│ │ │ └── utils.ts │ │ ├── skills-split-tests/ │ │ │ ├── ascension-specialized-skills.test.ts │ │ │ ├── mana-skills.test.ts @@ -449,7 +423,6 @@ Mana-Loop/ │ │ │ ├── index.ts │ │ │ ├── manaStore.ts │ │ │ ├── prestigeStore.ts -│ │ │ ├── skillStore.ts │ │ │ └── uiStore.ts │ │ ├── stores-split-tests/ │ │ │ ├── combat-store.test.ts @@ -491,7 +464,6 @@ Mana-Loop/ │ │ ├── effects.ts.fix │ │ ├── formatting.ts │ │ ├── navigation-slice.ts -│ │ ├── skill-evolution.ts │ │ ├── skills.test.ts │ │ ├── special-effects.ts │ │ ├── store.test.ts diff --git a/src/components/game/SkillsTab/SkillCategory.tsx b/src/components/game/SkillsTab/SkillCategory.tsx deleted file mode 100644 index a5e108a..0000000 --- a/src/components/game/SkillsTab/SkillCategory.tsx +++ /dev/null @@ -1,39 +0,0 @@ -'use client'; - -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { SKILLS_DEF, SKILL_CATEGORIES } from '@/lib/game/constants'; -import { SkillRow } from './SkillRow'; - -interface SkillCategoryProps { - categoryId: string; - onUpgradeClick: (skillId: string, milestone: 5 | 10) => void; -} - -export function SkillCategory({ categoryId, onUpgradeClick }: SkillCategoryProps) { - const cat = SKILL_CATEGORIES.find(c => c.id === categoryId); - if (!cat) return null; - - const skillsInCat = Object.entries(SKILLS_DEF).filter(([, def]) => def.cat === cat.id); - if (skillsInCat.length === 0) return null; - - return ( - - - - {cat.icon} {cat.name} - - - -
- {skillsInCat.map(([id, def]) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/game/SkillsTab/SkillRow.tsx b/src/components/game/SkillsTab/SkillRow.tsx deleted file mode 100644 index eece39f..0000000 --- a/src/components/game/SkillsTab/SkillRow.tsx +++ /dev/null @@ -1,183 +0,0 @@ -'use client'; - -import { useSkillStore, useManaStore, useCombatStore, fmt, fmtDec } from '@/lib/game/stores'; -import { SKILLS_DEF, SKILL_CATEGORIES } from '@/lib/game/constants'; -import { getNextTierSkill, getTierMultiplier } from '@/lib/game/skill-evolution'; -import { computeEffects } from '@/lib/game/upgrade-effects'; -import { useStudyStats } from '@/lib/game/hooks/useGameDerived'; -import { Badge } from '@/components/ui/badge'; -import { Button } from '@/components/ui/button'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; -import { formatStudyTime, hasMilestoneUpgrade, getSkillDisplayInfo } from './skills-utils'; - -interface SkillRowProps { - skillId: string; - onUpgradeClick: (skillId: string, milestone: 5 | 10) => void; -} - -export function SkillRow({ skillId, onUpgradeClick }: SkillRowProps) { - const skillState = useSkillStore((s) => s); - const rawMana = useManaStore((s) => s.rawMana); - const startStudyingSkill = useSkillStore((s) => s.startStudyingSkill); - const tierUpSkill = useSkillStore((s) => s.tierUpSkill); - - - const { studySpeedMult, studyCostMult } = useStudyStats(); - - const skillInfo = getSkillDisplayInfo(skillState, skillId); - const { - currentTier, - tieredSkillId, - tierMultiplier, - level, - maxed, - isStudying, - savedProgress, - skillDisplayName, - prereqMet, - def - } = skillInfo; - - // Apply skill modifiers - const studyEffects = computeEffects(skillState.skillUpgrades || {}, skillState.skillTiers || {}); - const effectiveSpeedMult = studySpeedMult * studyEffects.studySpeedMultiplier; - - const tierStudyTime = def.studyTime * currentTier; - const effectiveStudyTime = tierStudyTime / effectiveSpeedMult; - - const baseCost = def.base * (level + 1) * currentTier; - const cost = Math.floor(baseCost * studyCostMult); - - // Check if any study is in progress (prevent switching topics) - const currentAction = useCombatStore((s) => s.currentAction); - const isAnyStudyInProgress = currentAction === 'study' && skillState.currentStudyTarget; - // Can only study if: not maxed, prereqs met, has mana, and either no study in progress or already studying this skill - const canStudy = !maxed && prereqMet && rawMana >= cost && (!isAnyStudyInProgress || isStudying); - - const milestoneInfo = hasMilestoneUpgrade(skillState, tieredSkillId, level); - const nextTierSkill = getNextTierSkill(tieredSkillId); - const canTierUp = maxed && nextTierSkill; - - const selectedUpgrades = skillState.skillUpgrades[tieredSkillId] || []; - const selectedL5 = selectedUpgrades.filter(u => u.includes('_l5')); - const selectedL10 = selectedUpgrades.filter(u => u.includes('_l10')); - - return ( -
-
-
- {skillDisplayName} - {currentTier > 1 && ( - Tier {currentTier} ({fmtDec(tierMultiplier, 0)}x) - )} - {level > 0 && Lv.{level}} - {selectedUpgrades.length > 0 && ( -
- {selectedL5.length > 0 && ( - L5: {selectedL5.length} - )} - {selectedL10.length > 0 && ( - L10: {selectedL10.length} - )} -
- )} -
-
{def.desc}{currentTier > 1 && ` (Tier ${currentTier}: ${fmtDec(tierMultiplier, 0)}x effect)`}
- {!prereqMet && def.req && ( -
- Requires: {Object.entries(def.req).map(([r, rl]) => `${SKILLS_DEF[r]?.name || r} Lv.${rl}`).join(', ')} -
- )} -
- 1 ? 'text-green-400' : ''}> - Study: {formatStudyTime(effectiveStudyTime)}{effectiveSpeedMult > 1 && ({Math.round(effectiveSpeedMult * 100)}% speed)} - - {' • '} - - Cost: {fmt(cost)} mana{studyCostMult < 1 && ({Math.round(studyCostMult * 100)}% cost)} - -
- - {milestoneInfo && ( -
- ⭐ Level {milestoneInfo.milestone} milestone: {milestoneInfo.selectedCount}/2 upgrades selected -
- )} -
- -
- {/* Level dots */} -
- {Array.from({ length: def.max }).map((_, i) => ( -
- ))} -
- - {isStudying ? ( -
- {formatStudyTime(savedProgress || 0)}/{formatStudyTime(tierStudyTime)} -
- ) : milestoneInfo ? ( - - ) : canTierUp ? ( - - ) : maxed ? ( - Maxed - ) : ( -
- - - - - - {!canStudy && isAnyStudyInProgress && !isStudying && ( - -

Cannot switch topics while studying {SKILLS_DEF[skillState.currentStudyTarget?.id || '']?.name || 'another skill'}

-
- )} -
-
- -
- )} -
-
- ); -} - -SkillRow.displayName = "SkillRow"; diff --git a/src/components/game/SkillsTab/SkillStudyProgress.tsx b/src/components/game/SkillsTab/SkillStudyProgress.tsx deleted file mode 100644 index 401277c..0000000 --- a/src/components/game/SkillsTab/SkillStudyProgress.tsx +++ /dev/null @@ -1,47 +0,0 @@ -'use client'; - -import { useSkillStore } from '@/lib/game/stores'; -import { SKILLS_DEF } from '@/lib/game/constants'; -import { formatStudyTime } from './skills-utils'; -import { useStudyStats } from '@/lib/game/hooks/useGameDerived'; -import { BookOpen, X } from 'lucide-react'; -import { Button } from '@/components/ui/button'; -import { Progress } from '@/components/ui/progress'; - -export function SkillStudyProgress() { - const currentStudyTarget = useSkillStore((s) => s.currentStudyTarget); - const cancelStudy = useSkillStore((s) => s.cancelStudy); - const { studySpeedMult } = useStudyStats(); - - if (!currentStudyTarget) return null; - - const target = currentStudyTarget; - const progressPct = Math.min(100, (target.progress / target.required) * 100); - const def = SKILLS_DEF[target.id] || SKILLS_DEF[target.id.split('_t')[0]]; - - return ( -
-
-
- - - {def?.name} - -
- -
- -
- {formatStudyTime(target.progress)} / {formatStudyTime(target.required)} - {studySpeedMult.toFixed(1)}x speed -
-
- ); -} diff --git a/src/components/game/SkillsTab/SkillUpgradeDialog.tsx b/src/components/game/SkillsTab/SkillUpgradeDialog.tsx deleted file mode 100644 index d290140..0000000 --- a/src/components/game/SkillsTab/SkillUpgradeDialog.tsx +++ /dev/null @@ -1,130 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import { useSkillStore, fmt } from '@/lib/game/stores'; -import { SKILLS_DEF } from '@/lib/game/constants'; -import { Badge } from '@/components/ui/badge'; -import { Button } from '@/components/ui/button'; -import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; - -interface SkillUpgradeDialogProps { - skillId: string | null; - milestone: 5 | 10; - onClose: () => void; -} - -export function SkillUpgradeDialog({ skillId, milestone, onClose }: SkillUpgradeDialogProps) { - const getSkillUpgradeChoices = useSkillStore((s) => s.getSkillUpgradeChoices); - const commitSkillUpgrades = useSkillStore((s) => s.commitSkillUpgrades); - const [pendingUpgradeSelections, setPendingUpgradeSelections] = useState([]); - - if (!skillId) return null; - - const skillDef = SKILLS_DEF[skillId]; - const { available, selected: alreadySelected } = getSkillUpgradeChoices(skillId, milestone); - - const currentSelections = pendingUpgradeSelections.length > 0 ? pendingUpgradeSelections : alreadySelected; - - const toggleUpgrade = (upgradeId: string) => { - if (currentSelections.includes(upgradeId)) { - setPendingUpgradeSelections(currentSelections.filter(id => id !== upgradeId)); - } else if (currentSelections.length < 2) { - setPendingUpgradeSelections([...currentSelections, upgradeId]); - } - }; - - const handleDone = () => { - if (currentSelections.length === 2 && skillId) { - commitSkillUpgrades(skillId, currentSelections); - } - setPendingUpgradeSelections([]); - onClose(); - }; - - const handleCancel = () => { - setPendingUpgradeSelections([]); - onClose(); - }; - - return ( - { - if (!open) { - setPendingUpgradeSelections([]); - onClose(); - } - }}> - - - - Choose Upgrade - {skillDef?.name || skillId} - - - Level {milestone} Milestone - Select 2 upgrades ({currentSelections.length}/2 chosen) - - - -
- {available.map((upgrade) => { - const isSelected = currentSelections.includes(upgrade.id); - const canToggle = currentSelections.length < 2 || isSelected; - - return ( -
{ - if (canToggle) { - toggleUpgrade(upgrade.id); - } - }} - > -
-
{upgrade.name}
- {isSelected && Selected} -
-
{upgrade.desc}
- {upgrade.effect.type === 'multiplier' && ( -
- +{Math.round((upgrade.effect.value! - 1) * 100)}% {upgrade.effect.stat} -
- )} - {upgrade.effect.type === 'bonus' && ( -
- +{upgrade.effect.value} {upgrade.effect.stat} -
- )} - {upgrade.effect.type === 'special' && ( -
- ⚡ {upgrade.effect.specialDesc || 'Special effect'} -
- )} -
- ); - })} -
- -
- - -
-
-
- ); -} diff --git a/src/components/game/SkillsTab/skills-utils.ts b/src/components/game/SkillsTab/skills-utils.ts deleted file mode 100644 index c2b600d..0000000 --- a/src/components/game/SkillsTab/skills-utils.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { SKILLS_DEF } from '@/lib/game/constants'; -import { SKILL_EVOLUTION_PATHS, getUpgradesForSkillAtMilestone, getTierMultiplier } from '@/lib/game/skill-evolution'; -import type { SkillState } from '@/lib/game/stores'; - -// Format study time -export function formatStudyTime(hours: number): string { - if (hours < 1) return `${Math.round(hours * 60)}m`; - return `${hours.toFixed(1)}h`; -} - -// Check if skill has milestone upgrade available -export function hasMilestoneUpgrade( - skillState: SkillState, - skillId: string, - level: number -): { milestone: 5 | 10; hasUpgrades: boolean; selectedCount: number } | null { - const baseSkillId = skillId.includes('_t') ? skillId.split('_t')[0] : skillId; - const path = SKILL_EVOLUTION_PATHS[baseSkillId]; - if (!path) return null; - - if (level >= 5) { - const upgrades5 = getUpgradesForSkillAtMilestone(skillId, 5, skillState.skillTiers); - const selected5 = (skillState.skillUpgrades[skillId] || []).filter(id => id.includes('_l5')); - if (upgrades5.length > 0 && selected5.length < 2) { - return { milestone: 5, hasUpgrades: true, selectedCount: selected5.length }; - } - } - - if (level >= 10) { - const upgrades10 = getUpgradesForSkillAtMilestone(skillId, 10, skillState.skillTiers); - const selected10 = (skillState.skillUpgrades[skillId] || []).filter(id => id.includes('_l10')); - if (upgrades10.length > 0 && selected10.length < 2) { - return { milestone: 10, hasUpgrades: true, selectedCount: selected10.length }; - } - } - - return null; -} - -// Get skill display info -export function getSkillDisplayInfo( - skillState: SkillState, - skillId: string -) { - const currentTier = skillState.skillTiers?.[skillId] || 1; - const tieredSkillId = currentTier > 1 ? `${skillId}_t${currentTier}` : skillId; - const def = SKILLS_DEF[skillId]; - const tierMultiplier = getTierMultiplier(tieredSkillId); - - const level = skillState.skills[tieredSkillId] || skillState.skills[skillId] || 0; - const maxed = level >= (def?.max || 10); - - const isStudying = (skillState.currentStudyTarget?.id === skillId || skillState.currentStudyTarget?.id === tieredSkillId) && skillState.currentStudyTarget?.type === 'skill'; - const savedProgress = skillState.skillProgress[tieredSkillId] || skillState.skillProgress[skillId] || 0; - - const tierDef = SKILL_EVOLUTION_PATHS[skillId]?.tiers.find(t => t.tier === currentTier); - const skillDisplayName = tierDef?.name || def?.name || skillId; - - // Check prerequisites - let prereqMet = true; - if (def?.req) { - for (const [r, rl] of Object.entries(def.req)) { - if ((skillState.skills[r] || 0) < rl) { - prereqMet = false; - break; - } - } - } - - return { - currentTier, - tieredSkillId, - tierMultiplier, - level, - maxed, - isStudying, - savedProgress, - skillDisplayName, - prereqMet, - def, - }; -} diff --git a/src/lib/game/skill-evolution-modules/combat-skills-2.ts b/src/lib/game/skill-evolution-modules/combat-skills-2.ts deleted file mode 100644 index 7b67353..0000000 --- a/src/lib/game/skill-evolution-modules/combat-skills-2.ts +++ /dev/null @@ -1,249 +0,0 @@ -// ─── Combat Skills Tier Definitions (Part 2) ───────────────────────────── -// Elemental Mastery, Attack Speed, Armor Piercing, Spell Damage - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── ELEMENTAL MASTERY TALENT TREE ────────────────────────────────────────── -export const ELEMENTAL_MASTERY_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'elementalMastery', name: 'Elemental Mastery', multiplier: 1, - l5Perks: [ - createPerk('em_t1_l5_a', 'Elemental Focus', '+15% elemental damage', 'A', - { type: 'multiplier', stat: 'elementalDamage', value: 0.15 }, false, 1.5, 5), - createPerk('em_t1_l5_b', 'Essence Absorption', 'Spells restore 1% mana per element level', 'B', - { type: 'special', specialId: 'essenceAbsorption', specialDesc: 'Spells restore mana' }, false, 1.5, 5), - createPerk('em_t1_l5_c', 'Elemental Affinity', '+10% spell damage per unlocked element', 'C', - { type: 'special', specialId: 'elementalAffinity', specialDesc: '+10% per element' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('em_t1_l10_a', 'Greater Elemental Focus', '+25% elemental damage', 'A', - { type: 'multiplier', stat: 'elementalDamage', value: 0.25 }, false, 2.0, 10), - createPerk('em_t1_l10_b', 'Purification', 'Spells cleanse one negative effect', 'B', - { type: 'special', specialId: 'purification', specialDesc: 'Cleanse effects' }, false, 2.0, 10), - createPerk('em_t1_l10_c', 'Elemental Unity', '+20% spell damage with all elements', 'C', - { type: 'special', specialId: 'elementalUnity', specialDesc: '+20% all elements' }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'elementalMastery_t2', name: 'Greater Elemental Mastery', multiplier: 10, - l5Perks: [ - createPerk('em_t2_l5_a', 'Cosmic Elemental', '+40% elemental damage', 'A', - { type: 'multiplier', stat: 'elementalDamage', value: 0.40 }, false, 2.0, 5), - createPerk('em_t2_l5_b', 'Mana Wellspring', 'Spells restore 2% mana', 'B', - { type: 'special', specialId: 'manaWellspring', specialDesc: 'Spells restore 2% mana' }, false, 2.0, 5), - createPerk('em_t2_l5_c', 'Elemental Fusion', 'Combine two elements for bonus damage', 'C', - { type: 'special', specialId: 'elementalFusion', specialDesc: 'Two-element combos' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('em_t2_l10_a', 'Elemental Avatar', '+60% elemental damage', 'A', - { type: 'multiplier', stat: 'elementalDamage', value: 0.60 }, false, 2.5, 10), - createPerk('em_t2_l10_b', 'Mana Deluge', 'Spells restore 3% mana', 'B', - { type: 'special', specialId: 'manaDeluge', specialDesc: 'Spells restore 3% mana' }, false, 2.5, 10), - createPerk('em_t2_l10_c', 'Primal Fusion', 'Triple-element combos for massive damage', 'C', - { type: 'special', specialId: 'primalFusion', specialDesc: 'Triple-element combos' }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'elementalMastery_t3', name: 'Perfect Elemental Mastery', multiplier: 100, - l5Perks: [ - createPerk('em_t3_l5_a', 'World Elemental', '+75% elemental damage', 'A', - { type: 'multiplier', stat: 'elementalDamage', value: 0.75 }, false, 3.0, 5), - createPerk('em_t3_l5_b', 'Elemental Storm', 'All spells become compound elements', 'B', - { type: 'special', specialId: 'elementalStorm', specialDesc: 'All spells become compound' }, false, 3.0, 5), - createPerk('em_t3_l5_c', 'Master of All Elements', 'All elemental damage +50%', 'C', - { type: 'multiplier', stat: 'elementalDamage', value: 0.50 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('em_t3_l10_a', '[ELITE] ELEMENTAL DEITY', 'Elemental damage is 10x', 'A', - { type: 'special', specialId: 'elementalDeity', specialDesc: '10x elemental damage' }, true, 5.0, 10), - createPerk('em_t3_l10_b', '[ELITE] PRIMAL CHAOS', 'Spells deal all element types simultaneously', 'B', - { type: 'special', specialId: 'primalChaos', specialDesc: 'All element types at once' }, true, 5.0, 10), - createPerk('em_t3_l10_c', '[ELITE] WORLD FORGE', 'Create custom compound spells', 'C', - { type: 'special', specialId: 'worldForge', specialDesc: 'Create custom compound spells' }, true, 5.0, 10), - ], - }, -]; - -// ─── ATTACK SPEED TALENT TREE ────────────────────────────────────────────── -export const ATTACK_SPEED_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'attackSpeed', name: 'Attack Speed', multiplier: 1, - l5Perks: [ - createPerk('as_t1_l5_a', 'Swift Strikes', '+15% attack speed', 'A', - { type: 'multiplier', stat: 'attackSpeed', value: 0.15 }, false, 1.5, 5), - createPerk('as_t1_l5_b', 'Dual Wield', 'Off-hand attacks deal 20% damage', 'B', - { type: 'special', specialId: 'dualWield', specialDesc: 'Off-hand damage' }, false, 1.5, 5), - createPerk('as_t1_l5_c', 'Counter Attack', '+5% chance to counter', 'C', - { type: 'special', specialId: 'counterAttack', specialDesc: 'Counter attack chance' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('as_t1_l10_a', 'Blazing Speed', '+25% attack speed', 'A', - { type: 'multiplier', stat: 'attackSpeed', value: 0.25 }, false, 2.0, 10), - createPerk('as_t1_l10_b', 'Flurry', 'Every 3rd attack hits twice', 'B', - { type: 'special', specialId: 'flurry', specialDesc: 'Every 3rd attack hits twice' }, false, 2.0, 10), - createPerk('as_t1_l10_c', 'Viper Strike', 'Crits slow enemy by 20%', 'C', - { type: 'special', specialId: 'viperStrike', specialDesc: 'Crits slow enemy' }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'attackSpeed_t2', name: 'Rapid Attacks', multiplier: 10, - l5Perks: [ - createPerk('as_t2_l5_a', 'Lightning Strikes', '+30% attack speed', 'A', - { type: 'multiplier', stat: 'attackSpeed', value: 0.30 }, false, 2.0, 5), - createPerk('as_t2_l5_b', 'Tempo', 'Attack speed increases 2% per hit, up to 20%', 'B', - { type: 'special', specialId: 'tempo', specialDesc: 'Stacking speed per hit' }, false, 2.0, 5), - createPerk('as_t2_l5_c', 'Double Strike', '15% chance to attack twice', 'C', - { type: 'special', specialId: 'doubleStrike', specialDesc: '15% double strike' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('as_t2_l10_a', 'Sonic Speed', '+50% attack speed', 'A', - { type: 'multiplier', stat: 'attackSpeed', value: 0.50 }, false, 2.5, 10), - createPerk('as_t2_l10_b', 'Rampage', 'Stacking speed is now 3% per hit, up to 30%', 'B', - { type: 'special', specialId: 'rampage', specialDesc: 'Improved stacking speed' }, false, 2.5, 10), - createPerk('as_t2_l10_c', 'Whirlwind', '25% chance to attack twice', 'C', - { type: 'special', specialId: 'whirlwind', specialDesc: '25% double strike' }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'attackSpeed_t3', name: 'Perfect Agility', multiplier: 100, - l5Perks: [ - createPerk('as_t3_l5_a', 'Beyond Limits', '+75% attack speed', 'A', - { type: 'multiplier', stat: 'attackSpeed', value: 0.75 }, false, 3.0, 5), - createPerk('as_t3_l5_b', 'Time Fracture', 'Attacks can trigger between ticks', 'B', - { type: 'special', specialId: 'timeFracture', specialDesc: 'Extra ticks' }, false, 3.0, 5), - createPerk('as_t3_l5_c', 'Reaper', 'Every 5th attack is a guaranteed crit', 'C', - { type: 'special', specialId: 'reaper', specialDesc: 'Guaranteed crit every 5th' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('as_t3_l10_a', '[ELITE] TIMELESS', 'Attack speed is 5x', 'A', - { type: 'special', specialId: 'timelessAtk', specialDesc: '5x attack speed' }, true, 5.0, 10), - createPerk('as_t3_l10_b', '[ELITE] REALITY TEAR', 'Attacks happen every second regardless of tick', 'B', - { type: 'special', specialId: 'realityTear', specialDesc: 'Attacks every second' }, true, 5.0, 10), - createPerk('as_t3_l10_c', '[ELITE] ABSOLUTE VELOCITY', 'Every attack hits 3 times', 'C', - { type: 'special', specialId: 'absoluteVelocity', specialDesc: 'Triple every attack' }, true, 5.0, 10), - ], - }, -]; - -// ─── ARMOR PIERCING TALENT TREE ──────────────────────────────────────────── -export const ARMOR_PIERCING_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'armorPiercing', name: 'Armor Piercing', multiplier: 1, - l5Perks: [ - createPerk('ap_t1_l5_a', 'Sharpened Edge', '+15% armor piercing', 'A', - { type: 'multiplier', stat: 'armorPierce', value: 0.15 }, false, 1.5, 5), - createPerk('ap_t1_l5_b', 'Rending', 'Armor reduced by 5% per hit, stacks 5x', 'B', - { type: 'special', specialId: 'rending', specialDesc: 'Stacking armor reduction' }, false, 1.5, 5), - createPerk('ap_t1_l5_c', 'Vulnerability', 'Crits reduce armor by 10%', 'C', - { type: 'special', specialId: 'vulnerability', specialDesc: 'Crits reduce armor' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ap_t1_l10_a', 'Sundering', '+25% armor piercing', 'A', - { type: 'multiplier', stat: 'armorPierce', value: 0.25 }, false, 2.0, 10), - createPerk('ap_t1_l10_b', 'Expose Weakness', 'Armor reduced by 10% per hit, stacks 5x', 'B', - { type: 'special', specialId: 'exposeWeakness', specialDesc: 'Better stacking armor reduction' }, false, 2.0, 10), - createPerk('ap_t1_l10_c', 'Armor Crusher', 'Ignore 20% of total armor', 'C', - { type: 'special', specialId: 'armorCrusher', specialDesc: 'Flat armor ignore' }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'armorPiercing_t2', name: 'Devastating Piercing', multiplier: 10, - l5Perks: [ - createPerk('ap_t2_l5_a', 'Titan Strike', '+30% armor piercing', 'A', - { type: 'multiplier', stat: 'armorPierce', value: 0.30 }, false, 2.0, 5), - createPerk('ap_t2_l5_b', 'Shatter Armor', 'Armor reduced by 15% per hit, stacks 5x', 'B', - { type: 'special', specialId: 'shatterArmor', specialDesc: '15% per hit armor reduction' }, false, 2.0, 5), - createPerk('ap_t2_l5_c', 'Execution', 'Crits ignore 30% of armor', 'C', - { type: 'special', specialId: 'execution', specialDesc: '30% flat armor ignore on crit' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('ap_t2_l10_a', 'Armor Destruction', '+45% armor piercing', 'A', - { type: 'multiplier', stat: 'armorPierce', value: 0.45 }, false, 2.5, 10), - createPerk('ap_t2_l10_b', 'Total Break', 'Stacking reduces up to 75% armor', 'B', - { type: 'special', specialId: 'totalBreak', specialDesc: '75% armor cap reduction' }, false, 2.5, 10), - createPerk('ap_t2_l10_c', 'Guillotine', 'Crits ignore 50% of armor', 'C', - { type: 'special', specialId: 'guillotine', specialDesc: '50% flat armor ignore on crit' }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'armorPiercing_t3', name: 'Perfect Piercing', multiplier: 100, - l5Perks: [ - createPerk('ap_t3_l5_a', 'Absolute Penetration', '+60% armor piercing', 'A', - { type: 'multiplier', stat: 'armorPierce', value: 0.60 }, false, 3.0, 5), - createPerk('ap_t3_l5_b', 'Disintegrate', 'Each hit permanently reduces enemy armor by 1%', 'B', - { type: 'special', specialId: 'disintegrate', specialDesc: 'Permanent armor reduction' }, false, 3.0, 5), - createPerk('ap_t3_l5_c', 'Pierce All Defenses', 'Armor piercing is capped at 200%', 'C', - { type: 'special', specialId: 'pierceAll', specialDesc: '200% armor piercing cap' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('ap_t3_l10_a', '[ELITE] ARMOR BREAKER', 'Enemy armor is always 0', 'A', - { type: 'special', specialId: 'armorBreaker', specialDesc: 'Ignore all armor' }, true, 5.0, 10), - createPerk('ap_t3_l10_b', '[ELITE] VOID EDGE', 'Attacks reduce armor by 3% per hit permanently', 'B', - { type: 'special', specialId: 'voidEdge', specialDesc: 'Permanent armor shredding' }, true, 5.0, 10), - createPerk('ap_t3_l10_c', '[ELITE] EXECUTIONER', 'Crits deal bonus damage equal to 50% of enemy max HP', 'C', - { type: 'special', specialId: 'executioner', specialDesc: 'Crit bonus based on enemy HP' }, true, 5.0, 10), - ], - }, -]; - -// ─── SPELL DAMAGE TALENT TREE ────────────────────────────────────────────── -export const SPELL_DAMAGE_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'spellDamage', name: 'Spell Damage', multiplier: 1, - l5Perks: [ - createPerk('sd_t1_l5_a', 'Amplified Magic', '+15% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.15 }, false, 1.5, 5), - createPerk('sd_t1_l5_b', 'Elemental Focus', 'Spells cost 5% less mana per element level', 'B', - { type: 'special', specialId: 'elemFocus', specialDesc: 'Less spell cost per element' }, false, 1.5, 5), - createPerk('sd_t1_l5_c', 'Overcharge', 'Every 5th spell deals 2x damage', 'C', - { type: 'special', specialId: 'overcharge', specialDesc: 'Every 5th spell does 2x' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('sd_t1_l10_a', 'Destructive Magic', '+25% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.25 }, false, 2.0, 10), - createPerk('sd_t1_l10_b', 'Efficient Channeling', 'Spells cost 10% less mana', 'B', - { type: 'special', specialId: 'efficientChanneling', specialDesc: '15% less spell cost' }, false, 2.0, 10), - createPerk('sd_t1_l10_c', 'Critical Spell', 'Spells have 10% chance to crit for 2x damage', 'C', - { type: 'special', specialId: 'criticalSpell', specialDesc: 'Spell crits' }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'spellDamage_t2', name: 'Devastating Spells', multiplier: 10, - l5Perks: [ - createPerk('sd_t2_l5_a', 'Arcane Devastation', '+35% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.35 }, false, 2.0, 5), - createPerk('sd_t2_l5_b', 'Elemental Surge', 'Spells deal bonus damage equal to 5% of max mana', 'B', - { type: 'special', specialId: 'elemSurge', specialDesc: 'Mana-based bonus damage' }, false, 2.0, 5), - createPerk('sd_t2_l5_c', 'Chain Reaction', 'Every spell hit has 10% chance to deal damage again', 'C', - { type: 'special', specialId: 'chainReaction', specialDesc: 'Chance for double damage' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('sd_t2_l10_a', 'Meteor Magic', '+50% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.50 }, false, 2.5, 10), - createPerk('sd_t2_l10_b', 'Arcane Battery', 'Mana contributes +1% spell damage per 100 max mana', 'B', - { type: 'special', specialId: 'arcaneBattery', specialDesc: 'Mana amplifies damage' }, false, 2.5, 10), - createPerk('sd_t2_l10_c', 'Spell Storm', 'Every cast has 15% chance to cast twice', 'C', - { type: 'special', specialId: 'spellStorm', specialDesc: '15% double cast' }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'spellDamage_t3', name: 'Supreme Spell Power', multiplier: 100, - l5Perks: [ - createPerk('sd_t3_l5_a', 'Reality Shatter', '+70% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.70 }, false, 3.0, 5), - createPerk('sd_t3_l5_b', 'Void Siphon', 'Spells drain 2% of damage as mana', 'B', - { type: 'special', specialId: 'voidSiphon', specialDesc: 'Mana drain from spells' }, false, 3.0, 5), - createPerk('sd_t3_l5_c', 'Unstable Magic', 'Every spell has a 20% wild surge (0.5x-3x damage)', 'C', - { type: 'special', specialId: 'unstableMagic', specialDesc: 'Random damage multiplier' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('sd_t3_l10_a', '[ELITE SPELLBREAKER]', 'Spell damage is 5x', 'A', - { type: 'special', specialId: 'spellbreaker', specialDesc: '5x spell damage' }, true, 5.0, 10), - createPerk('sd_t3_l10_b', '[ELITE MANA VORTEX]', 'Every cast pulls 5% of enemy max HP as mana', 'B', - { type: 'special', specialId: 'manaVortex', specialDesc: 'Mana leech from enemies' }, true, 5.0, 10), - createPerk('sd_t3_l10_c', '[ELITE ARCANE GOD]', 'Spells deal damage to ALL enemies on screen', 'C', - { type: 'special', specialId: 'arcaneGod', specialDesc: 'AoE all enemies' }, true, 5.0, 10), - ], - }, -]; \ No newline at end of file diff --git a/src/lib/game/skill-evolution-modules/combat-skills.ts b/src/lib/game/skill-evolution-modules/combat-skills.ts deleted file mode 100644 index fd2212c..0000000 --- a/src/lib/game/skill-evolution-modules/combat-skills.ts +++ /dev/null @@ -1,188 +0,0 @@ -// ─── Combat Skills Tier Definitions (Part 1) ───────────────────────────── -// Arcane Fury, Combat Training, Precision - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── ARCANE FURY TALENT TREE ─────────────────────────────────────────────── -export const ARCANE_FURY_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'arcaneFury', name: 'Arcane Fury', multiplier: 1, - l5Perks: [ - createPerk('af_t1_l5_a', 'Shatter', '+15% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.15 }, false, 1.5, 5), - createPerk('af_t1_l5_b', 'Chain Lightning', 'Spells have 10% chance to chain', 'B', - { type: 'special', specialId: 'chainLightning', specialDesc: 'Spells chain on hit' }, false, 1.5, 5), - createPerk('af_t1_l5_c', 'Rift', 'Crits deal 2x damage', 'C', - { type: 'special', specialId: 'rift', specialDesc: '2x crit damage' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('af_t1_l10_a', 'Arcane Devastation', '+25% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.25 }, false, 2.0, 10), - createPerk('af_t1_l10_b', 'Overload', 'Spells have 20% chance to chain', 'B', - { type: 'special', specialId: 'overload', specialDesc: '20% chain chance' }, false, 2.0, 10), - createPerk('af_t1_l10_c', 'Void Tear', 'Crits deal 3x damage', 'C', - { type: 'special', specialId: 'voidTear', specialDesc: '3x crit damage' }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'arcaneFury_t2', name: 'Greater Arcane Fury', multiplier: 10, - l5Perks: [ - createPerk('af_t2_l5_a', 'Arcane Storm', '+40% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.40 }, false, 2.0, 5), - createPerk('af_t2_l5_b', 'Thunderous', 'Chains deal 2x damage', 'B', - { type: 'special', specialId: 'thunderous', specialDesc: 'Double chain damage' }, false, 2.0, 5), - createPerk('af_t2_l5_c', 'Shatterpoint', 'Crits apply to chained spells', 'C', - { type: 'special', specialId: 'shatterpoint', specialDesc: 'Crits chain' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('af_t2_l10_a', 'Meteor Strike', '+60% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.60 }, false, 2.5, 10), - createPerk('af_t2_l10_b', 'Arcane Cascade', '3 chains per spell', 'B', - { type: 'special', specialId: 'arcaneCascade', specialDesc: 'Triple chains' }, false, 2.5, 10), - createPerk('af_t2_l10_c', 'Devastation', 'Crits deal 5x damage', 'C', - { type: 'special', specialId: 'devastation', specialDesc: '5x crit damage' }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'arcaneFury_t3', name: 'Perfect Arcane Fury', multiplier: 100, - l5Perks: [ - createPerk('af_t3_l5_a', 'Celestial Fire', '+80% spell damage', 'A', - { type: 'multiplier', stat: 'spellDamage', value: 0.80 }, false, 3.0, 5), - createPerk('af_t3_l5_b', 'Unstoppable Chains', 'Chains are infinite', 'B', - { type: 'special', specialId: 'infiniteChains', specialDesc: 'Infinite chains' }, false, 3.0, 5), - createPerk('af_t3_l5_c', 'Annihilation', 'Crits deal 8x damage', 'C', - { type: 'special', specialId: 'annihilation', specialDesc: '8x crit damage' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('af_t3_l10_a', '[ELITE] ARCANE APOCALYPSE', 'Spell damage is 5x', 'A', - { type: 'special', specialId: 'arcaneApocalypse', specialDesc: '5x spell damage' }, true, 5.0, 10), - createPerk('af_t3_l10_b', '[ELITE] CHAIN SINGULARITY', 'Each chain spawns 3 more', 'B', - { type: 'special', specialId: 'chainSingularity', specialDesc: 'Branching chains' }, true, 5.0, 10), - createPerk('af_t3_l10_c', '[ELITE] CRIT GOD', 'Every hit is a critical strike', 'C', - { type: 'special', specialId: 'critGod', specialDesc: '100% crit chance' }, true, 5.0, 10), - ], - }, -]; - -// ─── COMBAT TRAINING TALENT TREE ──────────────────────────────────────────── -export const COMBAT_TRAINING_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'combatTraining', name: 'Combat Training', multiplier: 1, - l5Perks: [ - createPerk('ct_t1_l5_a', 'Heavy Strikes', '+15 base damage', 'A', - { type: 'multiplier', stat: 'baseDamage', value: 0.15 }, false, 1.5, 5), - createPerk('ct_t1_l5_b', 'Toughness', '+10% max HP', 'B', - { type: 'special', specialId: 'toughness', specialDesc: '+10% max HP' }, false, 1.5, 5), - createPerk('ct_t1_l5_c', 'Battle Instinct', '+5% crit chance', 'C', - { type: 'multiplier', stat: 'critChance', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ct_t1_l10_a', 'Warrior Spirit', '+25 base damage', 'A', - { type: 'multiplier', stat: 'baseDamage', value: 0.25 }, false, 2.0, 10), - createPerk('ct_t1_l10_b', 'Iron Will', '+20% max HP', 'B', - { type: 'special', specialId: 'ironWill', specialDesc: '+20% max HP' }, false, 2.0, 10), - createPerk('ct_t1_l10_c', 'Eagle Eye', '+10% crit chance', 'C', - { type: 'multiplier', stat: 'critChance', value: 0.10 }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'combatTraining_t2', name: 'Advanced Combat', multiplier: 10, - l5Perks: [ - createPerk('ct_t2_l5_a', 'Battle Mastery', '+30 base damage', 'A', - { type: 'multiplier', stat: 'baseDamage', value: 0.30 }, false, 2.0, 5), - createPerk('ct_t2_l5_b', 'Fortress', '+30% max HP', 'B', - { type: 'special', specialId: 'fortress', specialDesc: '+30% max HP' }, false, 2.0, 5), - createPerk('ct_t2_l5_c', 'Deadly Precision', '+15% crit chance', 'C', - { type: 'multiplier', stat: 'critChance', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('ct_t2_l10_a', 'Titan Strike', '+45 base damage', 'A', - { type: 'multiplier', stat: 'baseDamage', value: 0.45 }, false, 2.5, 10), - createPerk('ct_t2_l10_b', 'Immovable Object', '+40% max HP', 'B', - { type: 'special', specialId: 'immovable', specialDesc: '+40% max HP' }, false, 2.5, 10), - createPerk('ct_t2_l10_c', 'Sniper', '+20% crit chance', 'C', - { type: 'multiplier', stat: 'critChance', value: 0.20 }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'combatTraining_t3', name: 'Supreme Combat', multiplier: 100, - l5Perks: [ - createPerk('ct_t3_l5_a', 'War Avatar', '+60 base damage', 'A', - { type: 'multiplier', stat: 'baseDamage', value: 0.60 }, false, 3.0, 5), - createPerk('ct_t3_l5_b', 'Juggernaut', '+50% max HP', 'B', - { type: 'special', specialId: 'juggernaut', specialDesc: '+50% max HP' }, false, 3.0, 5), - createPerk('ct_t3_l5_c', 'Perfect Aim', '+25% crit chance', 'C', - { type: 'multiplier', stat: 'critChance', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('ct_t3_l10_a', '[ELITE] WAR MACHINE', 'Base damage is 10x', 'A', - { type: 'special', specialId: 'warMachine', specialDesc: '10x base damage' }, true, 5.0, 10), - createPerk('ct_t3_l10_b', '[ELITE] UNBREAKABLE', 'HP is infinite', 'B', - { type: 'special', specialId: 'unbreakable', specialDesc: 'Infinite HP' }, true, 5.0, 10), - createPerk('ct_t3_l10_c', '[ELITE] CRIT DEMIGOD', 'Crits deal 10x damage', 'C', - { type: 'special', specialId: 'critDemigod', specialDesc: '10x crit damage' }, true, 5.0, 10), - ], - }, -]; - -// ─── PRECISION TALENT TREE ────────────────────────────────────────────────── -export const PRECISION_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'precision', name: 'Precision', multiplier: 1, - l5Perks: [ - createPerk('p_t1_l5_a', 'Sharpshooter', '+10% crit chance', 'A', - { type: 'multiplier', stat: 'critChance', value: 0.10 }, false, 1.5, 5), - createPerk('p_t1_l5_b', 'Steady Hand', '+10% attack speed', 'B', - { type: 'multiplier', stat: 'attackSpeed', value: 0.10 }, false, 1.5, 5), - createPerk('p_t1_l5_c', 'Weak Spot', '+15% armor piercing', 'C', - { type: 'multiplier', stat: 'armorPierce', value: 0.15 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('p_t1_l10_a', 'Deadly Aim', '+20% crit chance', 'A', - { type: 'multiplier', stat: 'critChance', value: 0.20 }, false, 2.0, 10), - createPerk('p_t1_l10_b', 'Rapid Fire', '+20% attack speed', 'B', - { type: 'multiplier', stat: 'attackSpeed', value: 0.20 }, false, 2.0, 10), - createPerk('p_t1_l10_c', 'Armor Breaker', '+25% armor piercing', 'C', - { type: 'multiplier', stat: 'armorPierce', value: 0.25 }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'precision_t2', name: 'Greater Precision', multiplier: 10, - l5Perks: [ - createPerk('p_t2_l5_a', 'Sniper', '+25% crit chance', 'A', - { type: 'multiplier', stat: 'critChance', value: 0.25 }, false, 2.0, 5), - createPerk('p_t2_l5_b', 'Blitz', '+30% attack speed', 'B', - { type: 'multiplier', stat: 'attackSpeed', value: 0.30 }, false, 2.0, 5), - createPerk('p_t2_l5_c', 'Piercing Shot', '+35% armor piercing', 'C', - { type: 'multiplier', stat: 'armorPierce', value: 0.35 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('p_t2_l10_a', 'Deadeye', '+35% crit chance', 'A', - { type: 'multiplier', stat: 'critChance', value: 0.35 }, false, 2.5, 10), - createPerk('p_t2_l10_b', 'Lightning Speed', '+40% attack speed', 'B', - { type: 'multiplier', stat: 'attackSpeed', value: 0.40 }, false, 2.5, 10), - createPerk('p_t2_l10_c', 'Shatter Armor', '+45% armor piercing', 'C', - { type: 'multiplier', stat: 'armorPierce', value: 0.45 }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'precision_t3', name: 'Perfect Precision', multiplier: 100, - l5Perks: [ - createPerk('p_t3_l5_a', 'Annihilating Aim', '+50% crit chance', 'A', - { type: 'multiplier', stat: 'critChance', value: 0.50 }, false, 3.0, 5), - createPerk('p_t3_l5_b', 'Time Stop', '+50% attack speed', 'B', - { type: 'multiplier', stat: 'attackSpeed', value: 0.50 }, false, 3.0, 5), - createPerk('p_t3_l5_c', 'Abyssal Pierce', '+60% armor piercing', 'C', - { type: 'multiplier', stat: 'armorPierce', value: 0.60 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('p_t3_l10_a', '[ELITE] PERFECT CRIT', 'Crit chance is 100%', 'A', - { type: 'special', specialId: 'perfectCrit', specialDesc: '100% crit' }, true, 5.0, 10), - createPerk('p_t3_l10_b', '[ELITE] TIMELESS', 'Attack speed is 10x', 'B', - { type: 'special', specialId: 'timeless', specialDesc: '10x speed' }, true, 5.0, 10), - createPerk('p_t3_l10_c', '[ELITE] VOID PIERCE', 'Armor piercing is 100%', 'C', - { type: 'special', specialId: 'voidPierce', specialDesc: '100% pierce' }, true, 5.0, 10), - ], - }, -]; \ No newline at end of file diff --git a/src/lib/game/skill-evolution-modules/element-caps.ts b/src/lib/game/skill-evolution-modules/element-caps.ts deleted file mode 100644 index 03e346b..0000000 --- a/src/lib/game/skill-evolution-modules/element-caps.ts +++ /dev/null @@ -1,183 +0,0 @@ -// ─── Element Capacity Skill Tier Definitions ────────────────────────────── -// All element cap skills follow the same tier structure - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -export const FIRE_MANA_CAP_TIERS: SkillTierDef[] = [ - { - tier: 1, skillId: 'fireManaCap', name: 'Fire Mana Capacity', multiplier: 1, - l5Perks: [ - createPerk('fmc_t1_l5_a', 'Expanded Fire Cap I', '+15% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 0.15 }, false, 1.5, 5), - createPerk('fmc_t1_l5_b', 'Fire Regen', '+10% fire regen', 'B', - { type: 'special', specialId: 'fireRegen10', specialDesc: '+10% fire regen' }, false, 1.5, 5), - createPerk('fmc_t1_l5_c', 'Fire Efficiency', 'Fire spells cost 5% less', 'C', - { type: 'special', specialId: 'fireEfficiency', specialDesc: '-5% fire spell cost' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('fmc_t1_l10_a', 'Master Fire Cap I', '+25% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 0.25 }, false, 2.0, 10), - createPerk('fmc_t1_l10_b', 'Rapid Fire Regen', '+20% fire regen', 'B', - { type: 'special', specialId: 'fireRegen20', specialDesc: '+20% fire regen' }, false, 2.0, 10), - createPerk('fmc_t1_l10_c', 'Fire Mastery', 'Fire spells cost 10% less', 'C', - { type: 'special', specialId: 'fireMastery', specialDesc: '-10% fire spell cost' }, false, 2.0, 10), - ], - }, - { - tier: 2, skillId: 'fireManaCap_t2', name: 'Advanced Fire Capacity', multiplier: 10, - l5Perks: [ - createPerk('fmc_t2_l5_a', 'Vast Fire Cap', '+40% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 0.40 }, false, 2.0, 5), - createPerk('fmc_t2_l5_b', 'Fire Affinity', 'Fire spells have +15% range', 'B', - { type: 'special', specialId: 'fireRange', specialDesc: '+15% fire range' }, false, 2.0, 5), - createPerk('fmc_t2_l5_c', 'Burning Resolve', 'Fire damage +10%', 'C', - { type: 'multiplier', stat: 'elementalDamage', value: 0.10 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('fmc_t2_l10_a', 'Infinite Fire Cap', '+60% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 0.60 }, false, 2.5, 10), - createPerk('fmc_t2_l10_b', 'Absolute Fire Affinity', 'Fire spells +25% range', 'B', - { type: 'special', specialId: 'fireRange25', specialDesc: '+25% fire range' }, false, 2.5, 10), - createPerk('fmc_t2_l10_c', 'Scorching', 'Fire damage +20%', 'C', - { type: 'multiplier', stat: 'elementalDamage', value: 0.20 }, false, 2.5, 10), - ], - }, - { - tier: 3, skillId: 'fireManaCap_t3', name: 'Master Fire Capacity', multiplier: 100, - l5Perks: [ - createPerk('fmc_t3_l5_a', 'Inferno Capacity', '+100% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 1.0 }, false, 3.0, 5), - createPerk('fmc_t3_l5_b', 'Magma Core', 'Fire spells pierce 25% resistance', 'B', - { type: 'special', specialId: 'firePierce', specialDesc: '25% fire resistance pierce' }, false, 3.0, 5), - createPerk('fmc_t3_l5_c', 'Volcanic Fury', 'Fire damage +40%', 'C', - { type: 'multiplier', stat: 'elementalDamage', value: 0.40 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('fmc_t3_l10_a', '[ELITE] COSMIC FIRE', 'Fire cap is 3x', 'A', - { type: 'special', specialId: 'cosmicFire', specialDesc: '3x fire cap' }, true, 5.0, 10), - createPerk('fmc_t3_l10_b', '[ELITE] FIRE SUPREMACY', 'Fire spells ignore resistance', 'B', - { type: 'special', specialId: 'fireSupremacy', specialDesc: 'Ignore fire resistance' }, true, 5.0, 10), - createPerk('fmc_t3_l10_c', '[ELITE] ERUPTION', 'Fire damage is 5x', 'C', - { type: 'special', specialId: 'eruption', specialDesc: '5x fire damage' }, true, 5.0, 10), - ], - }, - { - tier: 4, skillId: 'fireManaCap_t4', name: 'Transcendent Fire Capacity', multiplier: 1000, - l5Perks: [ - createPerk('fmc_t4_l5_a', 'Infinite Inferno', '+200% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 2.0 }, false, 4.0, 5), - createPerk('fmc_t4_l5_b', 'Fire Aura', 'Fire spells create persistent burning auras', 'B', - { type: 'special', specialId: 'fireAura', specialDesc: 'Fire spell auras' }, false, 4.0, 5), - createPerk('fmc_t4_l5_c', 'Wildfire', 'Fire spells have 20% chance to spread', 'C', - { type: 'special', specialId: 'wildfire', specialDesc: '20% fire spread' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('fmc_t4_l10_a', '[ELITE] CORE OF THE SUN', 'Fire cap is 10x', 'A', - { type: 'special', specialId: 'coreOfSun', specialDesc: '10x fire cap' }, true, 5.0, 10), - createPerk('fmc_t4_l10_b', '[ELITE] ETERNAL FLAME', 'Fire effects never expire', 'B', - { type: 'special', specialId: 'eternalFlame', specialDesc: 'Permanent fire effects' }, true, 5.0, 10), - createPerk('fmc_t4_l10_c', '[ELITE] CHAOS FIRE', 'Every fire spell has secondary random effect', 'C', - { type: 'special', specialId: 'chaosFire', specialDesc: 'Chaos fire effects' }, true, 5.0, 10), - ], - }, - { - tier: 5, skillId: 'fireManaCap_t5', name: 'Godlike Fire Capacity', multiplier: 10000, - l5Perks: [ - createPerk('fmc_t5_l5_a', 'Solar Flare Capacity', '+500% fire cap', 'A', - { type: 'multiplier', stat: 'fireCap', value: 5.0 }, false, 5.0, 5), - createPerk('fmc_t5_l5_b', 'Volcanic Heart', 'Burning enemies drop fire essence', 'B', - { type: 'special', specialId: 'volcanicHeart', specialDesc: 'Enemies drop fire essence' }, false, 5.0, 5), - createPerk('fmc_t5_l5_c', 'Apocalypse Flame', 'Fire damage is 10x', 'C', - { type: 'multiplier', stat: 'elementalDamage', value: 1.0 }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('fmc_t5_l10_a', '[ELITE] GOD OF FIRE', 'Fire cap is infinite', 'A', - { type: 'special', specialId: 'godOfFire', specialDesc: 'Infinite fire cap' }, true, 10.0, 10), - createPerk('fmc_t5_l10_b', '[ELITE] PHOENIX REBIRTH', 'Immune to fire damage + fire spells cost zero', 'B', - { type: 'special', specialId: 'phoenixRebirth', specialDesc: 'Immune + free fire spells' }, true, 10.0, 10), - createPerk('fmc_t5_l10_c', '[ELITE] INFERNO', 'All spells become fire with 3x power', 'C', - { type: 'special', specialId: 'inferno', specialDesc: 'All spells = fire, 3x power' }, true, 10.0, 10), - ], - }, -]; - -export const WATER_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'water'), - name: t.name.replace(/Fire/g, 'Water'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'wmc'), desc: p.desc.replace(/fire/gi, 'water').replace(/Fire/g, 'Water') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'wmc'), desc: p.desc.replace(/fire/gi, 'water').replace(/Fire/g, 'Water') })), -})); - -export const AIR_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'air'), - name: t.name.replace(/Fire/g, 'Air'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'amc'), desc: p.desc.replace(/fire/gi, 'air').replace(/Fire/g, 'Air') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'amc'), desc: p.desc.replace(/fire/gi, 'air').replace(/Fire/g, 'Air') })), -})); - -export const EARTH_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'earth'), - name: t.name.replace(/Fire/g, 'Earth'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'emc'), desc: p.desc.replace(/fire/gi, 'earth').replace(/Fire/g, 'Earth') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'emc'), desc: p.desc.replace(/fire/gi, 'earth').replace(/Fire/g, 'Earth') })), -})); - -export const LIGHT_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'light'), - name: t.name.replace(/Fire/g, 'Light'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'lmc'), desc: p.desc.replace(/fire/gi, 'light').replace(/Fire/g, 'Light') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'lmc'), desc: p.desc.replace(/fire/gi, 'light').replace(/Fire/g, 'Light') })), -})); - -export const DARK_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'dark'), - name: t.name.replace(/Fire/g, 'Dark'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'dmc'), desc: p.desc.replace(/fire/gi, 'dark').replace(/Fire/g, 'Dark') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'dmc'), desc: p.desc.replace(/fire/gi, 'dark').replace(/Fire/g, 'Dark') })), -})); - -export const DEATH_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'death'), - name: t.name.replace(/Fire/g, 'Death'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'dethmc'), desc: p.desc.replace(/fire/gi, 'death').replace(/Fire/g, 'Death') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'dethmc'), desc: p.desc.replace(/fire/gi, 'death').replace(/Fire/g, 'Death') })), -})); - -export const METAL_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'metal'), - name: t.name.replace(/Fire/g, 'Metal'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'mmc'), desc: p.desc.replace(/fire/gi, 'metal').replace(/Fire/g, 'Metal') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'mmc'), desc: p.desc.replace(/fire/gi, 'metal').replace(/Fire/g, 'Metal') })), -})); - -export const SAND_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'sand'), - name: t.name.replace(/Fire/g, 'Sand'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'smc'), desc: p.desc.replace(/fire/gi, 'sand').replace(/Fire/g, 'Sand') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'smc'), desc: p.desc.replace(/fire/gi, 'sand').replace(/Fire/g, 'Sand') })), -})); - -export const LIGHTNING_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'lightning'), - name: t.name.replace(/Fire/g, 'Lightning'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'ltmc'), desc: p.desc.replace(/fire/gi, 'lightning').replace(/Fire/g, 'Lightning') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'ltmc'), desc: p.desc.replace(/fire/gi, 'lightning').replace(/Fire/g, 'Lightning') })), -})); - -export const TRANFERENCE_MANA_CAP_TIERS: SkillTierDef[] = FIRE_MANA_CAP_TIERS.map(t => ({ - ...t, - skillId: t.skillId.replace(/fire/g, 'transference'), - name: t.name.replace(/Fire/g, 'Transference'), - l5Perks: t.l5Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'tmc'), desc: p.desc.replace(/fire/gi, 'transference').replace(/Fire/g, 'Transference') })), - l10Perks: t.l10Perks.map(p => ({ ...p, id: p.id.replace(/fmc/g, 'tmc'), desc: p.desc.replace(/fire/gi, 'transference').replace(/Fire/g, 'Transference') })), -})); \ No newline at end of file diff --git a/src/lib/game/skill-evolution-modules/elemental-attunement.ts b/src/lib/game/skill-evolution-modules/elemental-attunement.ts deleted file mode 100644 index 5e75c4c..0000000 --- a/src/lib/game/skill-evolution-modules/elemental-attunement.ts +++ /dev/null @@ -1,127 +0,0 @@ -// ─── Elemental Attunement Skill Tier Definitions ────────────────────────────── -// Base: Increases Elemental Mana Capacity - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── ELEMENTAL ATTUNEMENT TALENT TREE ────────────────────────────────────── -// Base: Increases Elemental Mana Capacity -// Paths: A = The Conduit (Capacity), B = The Purifier (Efficiency), C = The Catalyst (Bonus Effects) - -export const ELEM_ATTUNE_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'elemAttune', - name: 'Elemental Attunement', - multiplier: 1, - l5Perks: [ - createPerk('ea_t1_l5_a', 'Expanded Capacity', '+50% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 0.50 }, false, 1.5, 5), - createPerk('ea_t1_l5_b', 'Pure Essence', '+10% Elemental Mana Regen', 'B', - { type: 'multiplier', stat: 'elemRegen', value: 0.10 }, false, 1.5, 5), - createPerk('ea_t1_l5_c', 'Elemental Affinity', '+5% Damage with all elements', 'C', - { type: 'multiplier', stat: 'elemDamage', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ea_t1_l10_a', 'Greater Capacity', '+75% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 0.75 }, false, 2.0, 10), - createPerk('ea_t1_l10_b', 'Swift Flow', '+15% Elemental Mana Regen', 'B', - { type: 'multiplier', stat: 'elemRegen', value: 0.15 }, false, 2.0, 10), - createPerk('ea_t1_l10_c', 'Elemental Mastery', '+10% Damage with all elements', 'C', - { type: 'multiplier', stat: 'elemDamage', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'elemAttune_t2', - name: 'Greater Attunement', - multiplier: 10, - l5Perks: [ - createPerk('ea_t2_l5_a', 'Vast Reservoir', '+100% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 1.0 }, false, 2.0, 5), - createPerk('ea_t2_l5_b', 'Crystal Clear', 'Elemental mana costs reduced by 10%', 'B', - { type: 'special', specialId: 'crystalClear', specialDesc: '10% less elemental mana cost' }, false, 2.0, 5), - createPerk('ea_t2_l5_c', 'Reactive Shield', 'Elemental attacks grant 2% damage reduction for 5s', 'C', - { type: 'special', specialId: 'reactiveShield', specialDesc: 'Elemental attacks grant DR' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('ea_t2_l10_a', 'Infinite Well', '+150% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 1.50 }, false, 2.5, 10), - createPerk('ea_t2_l10_b', 'Rapid Flux', '+25% Elemental Mana Regen', 'B', - { type: 'multiplier', stat: 'elemRegen', value: 0.25 }, false, 2.5, 10), - createPerk('ea_t2_l10_c', 'Elemental Fury', '+15% Damage with all elements', 'C', - { type: 'multiplier', stat: 'elemDamage', value: 0.15 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'elemAttune_t3', - name: 'Perfect Attunement', - multiplier: 100, - l5Perks: [ - createPerk('ea_t3_l5_a', 'Cosmic Reservoir', '+200% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 2.0 }, false, 3.0, 5), - createPerk('ea_t3_l5_b', 'Elemental Siphon', 'Killing enemies restores 1% elemental mana per 10 max', 'B', - { type: 'special', specialId: 'elemSiphon', specialDesc: 'Kills restore elemental mana' }, false, 3.0, 5), - createPerk('ea_t3_l5_c', 'Primordial Force', '+20% Damage with all elements', 'C', - { type: 'multiplier', stat: 'elemDamage', value: 0.20 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('ea_t3_l10_a', '[ELITE] ELEMENTAL OCEAN', 'Elemental Mana Cap is tripled', 'A', - { type: 'special', specialId: 'elemOcean', specialDesc: '3x elemental mana cap' }, true, 5.0, 10), - createPerk('ea_t3_l10_b', '[ELITE] PURE POWER', 'Elemental mana costs are reduced by 50%', 'B', - { type: 'special', specialId: 'purePower', specialDesc: '50% less elemental mana cost' }, true, 5.0, 10), - createPerk('ea_t3_l10_c', '[ELITE] ELEMENTAL GOD', 'All elemental damage is doubled', 'C', - { type: 'special', specialId: 'elemGod', specialDesc: '2x all elemental damage' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'elemAttune_t4', - name: 'Transcendent Attunement', - multiplier: 1000, - l5Perks: [ - createPerk('ea_t4_l5_a', 'Astral Capacity', '+300% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 3.0 }, false, 4.0, 5), - createPerk('ea_t4_l5_b', 'Ethereal Flow', '+50% Elemental Mana Regen', 'B', - { type: 'multiplier', stat: 'elemRegen', value: 0.50 }, false, 4.0, 5), - createPerk('ea_t4_l5_c', 'Elemental Storm', 'Elemental attacks have 10% chance to cast twice', 'C', - { type: 'special', specialId: 'elemStorm', specialDesc: '10% chance double elemental cast' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('ea_t4_l10_a', 'Galactic Well', '+400% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 4.0 }, false, 5.0, 10), - createPerk('ea_t4_l10_b', 'Infinite Flow', '+75% Elemental Mana Regen', 'B', - { type: 'multiplier', stat: 'elemRegen', value: 0.75 }, false, 5.0, 10), - createPerk('ea_t4_l10_c', 'Elemental Dominance', '+30% Damage with all elements', 'C', - { type: 'multiplier', stat: 'elemDamage', value: 0.30 }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'elemAttune_t5', - name: 'Godlike Attunement', - multiplier: 10000, - l5Perks: [ - createPerk('ea_t5_l5_a', 'Divine Capacity', '+500% Elemental Mana Cap', 'A', - { type: 'multiplier', stat: 'elemManaCap', value: 5.0 }, false, 5.0, 5), - createPerk('ea_t5_l5_b', 'Celestial Flow', '+100% Elemental Mana Regen', 'B', - { type: 'multiplier', stat: 'elemRegen', value: 1.0 }, false, 5.0, 5), - createPerk('ea_t5_l5_c', 'Elemental Singularity', '+40% Damage with all elements', 'C', - { type: 'multiplier', stat: 'elemDamage', value: 0.40 }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('ea_t5_l10_a', '[ELITE] ASCENDED ELEMENT', 'Elemental Mana Cap becomes infinite', 'A', - { type: 'special', specialId: 'ascendedElem', specialDesc: 'Infinite elemental mana cap' }, true, 10.0, 10), - createPerk('ea_t5_l10_b', '[ELITE] OMNIPOTENT FLOW', 'Elemental Mana Regen is infinite', 'B', - { type: 'special', specialId: 'omnipotentFlow', specialDesc: 'Infinite elemental regen' }, true, 10.0, 10), - createPerk('ea_t5_l10_c', '[ELITE] ELEMENTAL OMNIPOTENCE', 'All elemental damage is quadrupled', 'C', - { type: 'special', specialId: 'elemOmnipotence', specialDesc: '4x all elemental damage' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/enchanting-skills.ts b/src/lib/game/skill-evolution-modules/enchanting-skills.ts deleted file mode 100644 index 973c6ad..0000000 --- a/src/lib/game/skill-evolution-modules/enchanting-skills.ts +++ /dev/null @@ -1,282 +0,0 @@ -// ─── Enchanting Skill Tier Definitions ─────────────────────────────── -// This file contains: Enchanting, Enchant Speed, Efficient Enchant, Disenchanting (removed) - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── ENCHANTING TALENT TREE ──────────────────────────────────────────────────── -// Base: Unlocks Enchantment Design -// Paths: A = The Artisan (Enchantment Power), B = The Engineer (Capacity/Efficiency), C = The Magus (Special Effects) - -export const ENCHANTING_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'enchanting', - name: 'Enchanting', - multiplier: 1, - l5Perks: [ - createPerk('en_t1_l5_a', 'Artisan\'s Touch', '+10% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.10 }, false, 1.5, 5), - createPerk('en_t1_l5_b', 'Efficient Design', '-10% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.10 }, false, 1.5, 5), - createPerk('en_t1_l5_c', 'Magus Spark', '+5% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('en_t1_l10_a', 'Greater Artisan', '+15% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.15 }, false, 2.0, 10), - createPerk('en_t1_l10_b', 'Master Engineer', '-15% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.15 }, false, 2.0, 10), - createPerk('en_t1_l10_c', 'Arch Magus', '+10% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'enchanting_t2', - name: 'Greater Enchanting', - multiplier: 10, - l5Perks: [ - createPerk('en_t2_l5_a', 'Expert Artisan', '+25% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.25 }, false, 2.0, 5), - createPerk('en_t2_l5_b', 'Grand Engineer', '-20% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.20 }, false, 2.0, 5), - createPerk('en_t2_l5_c', 'Supreme Magus', '+15% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('en_t2_l10_a', 'Master Artisan', '+35% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.35 }, false, 2.5, 10), - createPerk('en_t2_l10_b', 'Divine Engineer', '-25% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.25 }, false, 2.5, 10), - createPerk('en_t2_l10_c', 'Godly Magus', '+20% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.20 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'enchanting_t3', - name: 'Perfect Enchanting', - multiplier: 100, - l5Perks: [ - createPerk('en_t3_l5_a', 'Cosmic Artisan', '+50% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.50 }, false, 3.0, 5), - createPerk('en_t3_l5_b', 'Transcendent Engineer', '-30% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.30 }, false, 3.0, 5), - createPerk('en_t3_l5_c', 'Celestial Magus', '+25% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('en_t3_l10_a', '[ELITE] OMNI-ARTISAN', 'Enchantment Power is 2x', 'A', - { type: 'special', specialId: 'omniArtisan', specialDesc: '2x enchantment power' }, true, 5.0, 10), - createPerk('en_t3_l10_b', '[ELITE] OMNI-ENGINEER', 'Enchantment Capacity Cost is halved', 'B', - { type: 'special', specialId: 'omniEngineer', specialDesc: '50% less capacity cost' }, true, 5.0, 10), - createPerk('en_t3_l10_c', '[ELITE] OMNI-MAGUS', 'Spell Damage from Enchantments is 2x', 'C', - { type: 'special', specialId: 'omniMagus', specialDesc: '2x spell damage from enchants' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'enchanting_t4', - name: 'Transcendent Enchanting', - multiplier: 1000, - l5Perks: [ - createPerk('en_t4_l5_a', 'Astral Artisan', '+75% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.75 }, false, 4.0, 5), - createPerk('en_t4_l5_b', 'Ethereal Engineer', '-40% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.40 }, false, 4.0, 5), - createPerk('en_t4_l5_c', 'Divine Magus', '+35% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.35 }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('en_t4_l10_a', 'Galactic Artisan', '+100% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 1.0 }, false, 5.0, 10), - createPerk('en_t4_l10_b', 'Infinite Engineer', '-50% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.50 }, false, 5.0, 10), - createPerk('en_t4_l10_c', 'Godlike Magus', '+50% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.50 }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'enchanting_t5', - name: 'Godlike Enchanting', - multiplier: 10000, - l5Perks: [ - createPerk('en_t5_l5_a', 'Divine Artisan', '+150% Enchantment Power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 1.50 }, false, 5.0, 5), - createPerk('en_t5_l5_b', 'Transcendent Engineer', '-60% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.60 }, false, 5.0, 5), - createPerk('en_t5_l5_c', 'Omniscient Magus', '+75% Spell Damage from Enchantments', 'C', - { type: 'multiplier', stat: 'enchantSpellDamage', value: 0.75 }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('en_t5_l10_a', '[ELITE] ASCENDED ARTISAN', 'Enchantment Power is 5x', 'A', - { type: 'special', specialId: 'ascendedArtisan', specialDesc: '5x enchantment power' }, true, 10.0, 10), - createPerk('en_t5_l10_b', '[ELITE] PERFECT ENGINEER', 'Enchantments cost no capacity', 'B', - { type: 'special', specialId: 'perfectEngineer', specialDesc: '0 capacity cost' }, true, 10.0, 10), - createPerk('en_t5_l10_c', '[ELITE] OMNIPOTENT MAGUS', 'Spell Damage from Enchantments is 5x', 'C', - { type: 'special', specialId: 'omnipotentMagus', specialDesc: '5x spell damage from enchants' }, true, 10.0, 10), - ], - }, -]; - -// ─── ENCHANT SPEED TALENT TREE ──────────────────────────────────────────── - -export const ENCHANT_SPEED_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'enchantSpeed', - name: 'Enchant Speed', - multiplier: 1, - l5Perks: [ - createPerk('es_t1_l5_a', 'Swift Craft', '-15% Enchantment Time', 'A', - { type: 'multiplier', stat: 'enchantTime', value: -0.15 }, false, 1.5, 5), - createPerk('es_t1_l5_b', 'Efficient Design', '-10% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.10 }, false, 1.5, 5), - createPerk('es_t1_l5_c', 'Quick Work', '+5% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('es_t1_l10_a', 'Faster Craft', '-20% Enchantment Time', 'A', - { type: 'multiplier', stat: 'enchantTime', value: -0.20 }, false, 2.0, 10), - createPerk('es_t1_l10_b', 'Thrifty Design', '-15% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.15 }, false, 2.0, 10), - createPerk('es_t1_l10_c', 'Superior Work', '+10% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'enchantSpeed_t2', - name: 'Greater Speed', - multiplier: 10, - l5Perks: [ - createPerk('es_t2_l5_a', 'Rapid Craft', '-25% Enchantment Time', 'A', - { type: 'multiplier', stat: 'enchantTime', value: -0.25 }, false, 2.0, 5), - createPerk('es_t2_l5_b', 'Master Design', '-20% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.20 }, false, 2.0, 5), - createPerk('es_t2_l5_c', 'Expert Work', '+15% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('es_t2_l10_a', 'Lightning Craft', '-30% Enchantment Time', 'A', - { type: 'multiplier', stat: 'enchantTime', value: -0.30 }, false, 2.5, 10), - createPerk('es_t2_l10_b', 'Ultimate Design', '-25% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.25 }, false, 2.5, 10), - createPerk('es_t2_l10_c', 'Master Work', '+20% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.20 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'enchantSpeed_t3', - name: 'Perfect Speed', - multiplier: 100, - l5Perks: [ - createPerk('es_t3_l5_a', 'Instant Craft', '-40% Enchantment Time', 'A', - { type: 'multiplier', stat: 'enchantTime', value: -0.40 }, false, 3.0, 5), - createPerk('es_t3_l5_b', 'Cosmic Design', '-30% Enchantment Capacity Cost', 'B', - { type: 'multiplier', stat: 'enchantCost', value: -0.30 }, false, 3.0, 5), - createPerk('es_t3_l5_c', 'Divine Work', '+25% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('es_t3_l10_a', '[ELITE] OMNI-SPEED', 'Enchantment Time is halved', 'A', - { type: 'special', specialId: 'omniSpeedEnchant', specialDesc: '50% less time' }, true, 5.0, 10), - createPerk('es_t3_l10_b', '[ELITE] OMNI-DESIGN', 'Enchantment Capacity Cost is halved', 'B', - { type: 'special', specialId: 'omniDesign', specialDesc: '50% less capacity cost' }, true, 5.0, 10), - createPerk('es_t3_l10_c', '[ELITE] OMNI-WORK', 'Enchantment Power is 2x', 'C', - { type: 'special', specialId: 'omniWork', specialDesc: '2x enchantment power' }, true, 5.0, 10), - ], - }, -]; - -// ─── EFFICIENT ENCHANT TALENT TREE ──────────────────────────────────────────── -// Base: Reduces Enchantment Capacity Cost -// Paths: A = The Thrifty (Cost Reduction), B = The Swift (Speed), C = The Efficient (Bonus Effects) - -export const EFFICIENT_ENCHANT_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'efficientEnchant', - name: 'Efficient Enchant', - multiplier: 1, - l5Perks: [ - createPerk('ee_t1_l5_a', 'Thrifty Design', '-10% Enchantment Capacity Cost', 'A', - { type: 'multiplier', stat: 'enchantCost', value: -0.10 }, false, 1.5, 5), - createPerk('ee_t1_l5_b', 'Swift Crafting', '-10% Enchantment Time', 'B', - { type: 'multiplier', stat: 'enchantTime', value: -0.10 }, false, 1.5, 5), - createPerk('ee_t1_l5_c', 'Quality Work', '+5% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ee_t1_l10_a', 'Greater Thrift', '-15% Enchantment Capacity Cost', 'A', - { type: 'multiplier', stat: 'enchantCost', value: -0.15 }, false, 2.0, 10), - createPerk('ee_t1_l10_b', 'Faster Crafting', '-15% Enchantment Time', 'B', - { type: 'multiplier', stat: 'enchantTime', value: -0.15 }, false, 2.0, 10), - createPerk('ee_t1_l10_c', 'Superior Work', '+10% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'efficientEnchant_t2', - name: 'Greater Efficiency', - multiplier: 10, - l5Perks: [ - createPerk('ee_t2_l5_a', 'Master Thrift', '-20% Enchantment Capacity Cost', 'A', - { type: 'multiplier', stat: 'enchantCost', value: -0.20 }, false, 2.0, 5), - createPerk('ee_t2_l5_b', 'Rapid Crafting', '-20% Enchantment Time', 'B', - { type: 'multiplier', stat: 'enchantTime', value: -0.20 }, false, 2.0, 5), - createPerk('ee_t2_l5_c', 'Expert Work', '+15% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('ee_t2_l10_a', 'Ultimate Thrift', '-25% Enchantment Capacity Cost', 'A', - { type: 'multiplier', stat: 'enchantCost', value: -0.25 }, false, 2.5, 10), - createPerk('ee_t2_l10_b', 'Lightning Craft', '-25% Enchantment Time', 'B', - { type: 'multiplier', stat: 'enchantTime', value: -0.25 }, false, 2.5, 10), - createPerk('ee_t2_l10_c', 'Master Work', '+20% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.20 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'efficientEnchant_t3', - name: 'Perfect Efficiency', - multiplier: 100, - l5Perks: [ - createPerk('ee_t3_l5_a', 'Cosmic Thrift', '-30% Enchantment Capacity Cost', 'A', - { type: 'multiplier', stat: 'enchantCost', value: -0.30 }, false, 3.0, 5), - createPerk('ee_t3_l5_b', 'Instant Crafting', '-30% Enchantment Time', 'B', - { type: 'multiplier', stat: 'enchantTime', value: -0.30 }, false, 3.0, 5), - createPerk('ee_t3_l5_c', 'Divine Work', '+25% Enchantment Power', 'C', - { type: 'multiplier', stat: 'enchantPower', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('ee_t3_l10_a', '[ELITE] OMNI-THRIFT', 'Enchantment Capacity Cost is halved', 'A', - { type: 'special', specialId: 'omniThrift', specialDesc: '50% less capacity cost' }, true, 5.0, 10), - createPerk('ee_t3_l10_b', '[ELITE] OMNI-SPEED', 'Enchantment Time is halved', 'B', - { type: 'special', specialId: 'omniSpeed', specialDesc: '50% less time' }, true, 5.0, 10), - createPerk('ee_t3_l10_c', '[ELITE] OMNI-POWER', 'Enchantment Power is 2x', 'C', - { type: 'special', specialId: 'omniPower', specialDesc: '2x enchantment power' }, true, 5.0, 10), - ], - }, -]; - -// ─── DISENCHANTING TALENT TREE ──────────────────────────────────────────────── -// Disenchanting skill removed - see Bug 13 - -export const DISENCHANTING_TIERS: SkillTierDef[] = []; // Empty - skill removed diff --git a/src/lib/game/skill-evolution-modules/focused-mind.ts b/src/lib/game/skill-evolution-modules/focused-mind.ts deleted file mode 100644 index 10ae05e..0000000 --- a/src/lib/game/skill-evolution-modules/focused-mind.ts +++ /dev/null @@ -1,127 +0,0 @@ -// ─── Focused Mind Skill Tier Definitions ───────────────────────────────────── -// Base: Reduces Study Mana Cost - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── FOCUSED MIND TALENT TREE ───────────────────────────────────────────────── -// Base: Reduces Study Mana Cost -// Paths: A = The Scholar (Study Speed), B = The Economist (Cost Reduction), C = The Sage (Bonus Effects) - -export const FOCUSED_MIND_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'focusedMind', - name: 'Focused Mind', - multiplier: 1, - l5Perks: [ - createPerk('fm_t1_l5_a', 'Sharp Focus', '+10% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.10 }, false, 1.5, 5), - createPerk('fm_t1_l5_b', 'Thrifty Mind', '-15% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.15 }, false, 1.5, 5), - createPerk('fm_t1_l5_c', 'Insightful Study', '+5% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('fm_t1_l10_a', 'Deep Focus', '+15% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.15 }, false, 2.0, 10), - createPerk('fm_t1_l10_b', 'Economical Mind', '-20% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.20 }, false, 2.0, 10), - createPerk('fm_t1_l10_c', 'Enlightened Study', '+10% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'focusedMind_t2', - name: 'Greater Focus', - multiplier: 10, - l5Perks: [ - createPerk('fm_t2_l5_a', 'Brilliant Focus', '+25% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.25 }, false, 2.0, 5), - createPerk('fm_t2_l5_b', 'Master Economist', '-30% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.30 }, false, 2.0, 5), - createPerk('fm_t2_l5_c', 'Scholarly Insight', '+15% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('fm_t2_l10_a', 'Transcendent Focus', '+35% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.35 }, false, 2.5, 10), - createPerk('fm_t2_l10_b', 'Ultimate Economist', '-40% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.40 }, false, 2.5, 10), - createPerk('fm_t2_l10_c', 'Divine Insight', '+20% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.20 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'focusedMind_t3', - name: 'Perfect Focus', - multiplier: 100, - l5Perks: [ - createPerk('fm_t3_l5_a', 'Cosmic Focus', '+50% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.50 }, false, 3.0, 5), - createPerk('fm_t3_l5_b', 'Infinite Economy', '-50% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.50 }, false, 3.0, 5), - createPerk('fm_t3_l5_c', 'Enlightened Mind', '+25% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('fm_t3_l10_a', '[ELITE] OMNI-FOCUS', 'Study speed is doubled', 'A', - { type: 'special', specialId: 'omniFocus', specialDesc: '2x study speed' }, true, 5.0, 10), - createPerk('fm_t3_l10_b', '[ELITE] OMNI-ECONOMY', 'Study costs no mana', 'B', - { type: 'special', specialId: 'omniEconomy', specialDesc: 'Free study' }, true, 5.0, 10), - createPerk('fm_t3_l10_c', '[ELITE] OMNI-INSIGHT', 'Insight gain is tripled', 'C', - { type: 'special', specialId: 'omniInsight', specialDesc: '3x insight gain' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'focusedMind_t4', - name: 'Transcendent Focus', - multiplier: 1000, - l5Perks: [ - createPerk('fm_t4_l5_a', 'Astral Focus', '+75% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.75 }, false, 4.0, 5), - createPerk('fm_t4_l5_b', 'Divine Economy', '-60% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.60 }, false, 4.0, 5), - createPerk('fm_t4_l5_c', 'Celestial Insight', '+30% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.30 }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('fm_t4_l10_a', 'Galactic Focus', '+100% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 1.0 }, false, 5.0, 10), - createPerk('fm_t4_l10_b', 'Godly Economy', '-75% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.75 }, false, 5.0, 10), - createPerk('fm_t4_l10_c', 'Godlike Insight', '+40% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.40 }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'focusedMind_t5', - name: 'Godlike Focus', - multiplier: 10000, - l5Perks: [ - createPerk('fm_t5_l5_a', 'Divine Focus', '+150% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 1.50 }, false, 5.0, 5), - createPerk('fm_t5_l5_b', 'Transcendent Economy', '-90% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.90 }, false, 5.0, 5), - createPerk('fm_t5_l5_c', 'Omniscient Insight', '+50% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.50 }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('fm_t5_l10_a', '[ELITE] ASCENDED MIND', 'Study speed is 5x', 'A', - { type: 'special', specialId: 'ascendedMind', specialDesc: '5x study speed' }, true, 10.0, 10), - createPerk('fm_t5_l10_b', '[ELITE] PERFECT ECONOMY', 'Study is completely free', 'B', - { type: 'special', specialId: 'perfectEconomy', specialDesc: '0% study cost' }, true, 10.0, 10), - createPerk('fm_t5_l10_c', '[ELITE] OMNISCIENT', 'Insight gain is 5x', 'C', - { type: 'special', specialId: 'omniscient', specialDesc: '5x insight gain' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/guardian-skills.ts b/src/lib/game/skill-evolution-modules/guardian-skills.ts deleted file mode 100644 index 80d0c07..0000000 --- a/src/lib/game/skill-evolution-modules/guardian-skills.ts +++ /dev/null @@ -1,79 +0,0 @@ -// ─── Guardian Skills Tier Definitions ────────────────────────────── -// This file contains: Guardian Bane - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── GUARDIAN BANE TALENT TREE ────────────────────────────────────────── - -export const GUARDIAN_BANE_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'guardianBane', - name: 'Guardian Bane', - multiplier: 1, - l5Perks: [ - createPerk('gb_t1_l5_a', 'Bane Training', '+20% damage vs guardians', 'A', - { type: 'multiplier', stat: 'guardianDamage', value: 0.20 }, false, 1.5, 5), - createPerk('gb_t1_l5_b', 'Focused Bane', '+10% crit damage vs guardians', 'B', - { type: 'multiplier', stat: 'guardianCritDamage', value: 0.10 }, false, 1.5, 5), - createPerk('gb_t1_l5_c', 'Swift Bane', '+10% attack speed vs guardians', 'C', - { type: 'multiplier', stat: 'guardianAttackSpeed', value: 0.10 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('gb_t1_l10_a', 'Greater Bane', '+30% damage vs guardians', 'A', - { type: 'multiplier', stat: 'guardianDamage', value: 0.30 }, false, 2.0, 10), - createPerk('gb_t1_l10_b', 'Deadly Bane', '+15% crit damage vs guardians', 'B', - { type: 'multiplier', stat: 'guardianCritDamage', value: 0.15 }, false, 2.0, 10), - createPerk('gb_t1_l10_c', 'Rapid Bane', '+15% attack speed vs guardians', 'C', - { type: 'multiplier', stat: 'guardianAttackSpeed', value: 0.15 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'guardianBane_t2', - name: 'Greater Bane', - multiplier: 10, - l5Perks: [ - createPerk('gb_t2_l5_a', 'Master Bane', '+40% damage vs guardians', 'A', - { type: 'multiplier', stat: 'guardianDamage', value: 0.40 }, false, 2.0, 5), - createPerk('gb_t2_l5_b', 'Supreme Crit', '+20% crit damage vs guardians', 'B', - { type: 'multiplier', stat: 'guardianCritDamage', value: 0.20 }, false, 2.0, 5), - createPerk('gb_t2_l5_c', 'Lightning Bane', '+20% attack speed vs guardians', 'C', - { type: 'multiplier', stat: 'guardianAttackSpeed', value: 0.20 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('gb_t2_l10_a', 'Ultimate Bane', '+50% damage vs guardians', 'A', - { type: 'multiplier', stat: 'guardianDamage', value: 0.50 }, false, 2.5, 10), - createPerk('gb_t2_l10_b', 'Obliterating Crit', '+25% crit damage vs guardians', 'B', - { type: 'multiplier', stat: 'guardianCritDamage', value: 0.25 }, false, 2.5, 10), - createPerk('gb_t2_l10_c', 'Blurring Bane', '+25% attack speed vs guardians', 'C', - { type: 'multiplier', stat: 'guardianAttackSpeed', value: 0.25 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'guardianBane_t3', - name: 'Perfect Bane', - multiplier: 100, - l5Perks: [ - createPerk('gb_t3_l5_a', 'Cosmic Bane', '+60% damage vs guardians', 'A', - { type: 'multiplier', stat: 'guardianDamage', value: 0.60 }, false, 3.0, 5), - createPerk('gb_t3_l5_b', 'Transcendent Crit', '+30% crit damage vs guardians', 'B', - { type: 'multiplier', stat: 'guardianCritDamage', value: 0.30 }, false, 3.0, 5), - createPerk('gb_t3_l5_c', 'Instant Bane', '+30% attack speed vs guardians', 'C', - { type: 'multiplier', stat: 'guardianAttackSpeed', value: 0.30 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('gb_t3_l10_a', '[ELITE] OMNI-BANE', 'Damage vs guardians is 2x', 'A', - { type: 'special', specialId: 'omniBane', specialDesc: '2x damage vs guardians' }, true, 5.0, 10), - createPerk('gb_t3_l10_b', '[ELITE] OMNI-CRIT', 'Crit damage vs guardians is 2x', 'B', - { type: 'special', specialId: 'omniCrit', specialDesc: '2x crit damage vs guardians' }, true, 5.0, 10), - createPerk('gb_t3_l10_c', '[ELITE] OMNI-SPEED', 'Attack speed vs guardians is 2x', 'C', - { type: 'special', specialId: 'omniGuardianSpeed', specialDesc: '2x attack speed vs guardians' }, true, 5.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/hybrid-skills.ts b/src/lib/game/skill-evolution-modules/hybrid-skills.ts deleted file mode 100644 index 9e5b648..0000000 --- a/src/lib/game/skill-evolution-modules/hybrid-skills.ts +++ /dev/null @@ -1,372 +0,0 @@ -// ─── Hybrid Skill Tier Definitions ─────────────────────────────── -// This file contains: Pact-Weaving, Guardian Constructs, Enchanted Golemancy -// Hybrid skills require 2 attunements at level 5+ - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── PACT-WEAVING TALENT TREE (Invoker + Enchanter Hybrid) ────────────────── -// Base: Weave Guardian essence into weapon enchantments OR world-effects -// Paths: A = The Weaver (Enchantment Power), B = The Warp (Pact Efficiency), C = The World-Weaver (World Effects) - -export const PACT_WEAVING_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'pactWeaving', - name: 'Pact-Weaving', - multiplier: 1, - l5Perks: [ - createPerk('pw_t1_l5_a', 'Essence Weave', '+15% enchantment effect power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.15 }, false, 1.5, 5), - createPerk('pw_t1_l5_b', 'Pact Weave', '+15% pact multiplier', 'B', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.15 }, false, 1.5, 5), - createPerk('pw_t1_l5_c', 'World Thread', 'Enchantments also apply 5% as world effects', 'C', - { type: 'special', specialId: 'worldThread', specialDesc: 'Enchantments apply as world effects' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('pw_t1_l10_a', 'Greater Weave', '+25% enchantment effect power', 'A', - { type: 'multiplier', stat: 'enchantPower', value: 0.25 }, false, 2.0, 10), - createPerk('pw_t1_l10_b', 'Greater Pact Weave', '+25% pact multiplier', 'B', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.25 }, false, 2.0, 10), - createPerk('pw_t1_l10_c', 'World Web', 'Enchantments also apply 10% as world effects', 'C', - { type: 'special', specialId: 'worldWeb', specialDesc: 'Better enchantment world effects' }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'pactWeaving_t2', - name: 'Greater Pact-Weaving', - multiplier: 10, - l5Perks: [ - createPerk('pw_t2_l5_a', 'Soul Weave', 'Enchantments gain +10% power per signed pact', 'A', - { type: 'special', specialId: 'soulWeave', specialDesc: 'Enchant power scales with pacts' }, false, 2.0, 5), - createPerk('pw_t2_l5_b', 'Warp Weave', 'Pact costs reduced by 15% while enchanted', 'B', - { type: 'special', specialId: 'warpWeave', specialDesc: 'Enchants reduce pact costs' }, false, 2.0, 5), - createPerk('pw_t2_l5_c', 'Reality Weave', 'World effects apply 15% faster', 'C', - { type: 'special', specialId: 'realityWeave', specialDesc: 'Faster world effect application' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('pw_t2_l10_a', 'Divine Weave', 'Enchantments gain +15% power per signed pact', 'A', - { type: 'special', specialId: 'divineWeave', specialDesc: 'Better enchant scaling with pacts' }, false, 2.5, 10), - createPerk('pw_t2_l10_b', 'Warp Surge', 'Pact multiplier increased by 0.3x while enchanted', 'B', - { type: 'special', specialId: 'warpSurge', specialDesc: 'Enchants boost pact multiplier' }, false, 2.5, 10), - createPerk('pw_t2_l10_c', 'World Storm', 'World effects have 20% chance to apply twice', 'C', - { type: 'special', specialId: 'worldStorm', specialDesc: 'Chance for double world effects' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'pactWeaving_t3', - name: 'Divine Pact-Weaving', - multiplier: 100, - l5Perks: [ - createPerk('pw_t3_l5_a', 'Guardian Weave', 'Enchantments include guardian boons at 25% strength', 'A', - { type: 'special', specialId: 'guardianWeave', specialDesc: 'Enchants gain guardian boons' }, false, 3.0, 5), - createPerk('pw_t3_l5_b', 'Pact Resonance', 'Signed pacts grant +20% enchantment capacity', 'B', - { type: 'special', specialId: 'pactResonance', specialDesc: 'Pacts grant enchant capacity' }, false, 3.0, 5), - createPerk('pw_t3_l5_c', 'World Dominance', 'World effects last 30% longer', 'C', - { type: 'special', specialId: 'worldDominance', specialDesc: 'Longer world effect duration' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('pw_t3_l10_a', '[ELITE] ESSENCE ASCENSION', 'Enchantments are 2x powerful when pact is signed', 'A', - { type: 'special', specialId: 'essenceAscension', specialDesc: '2x enchant power with pact' }, true, 5.0, 10), - createPerk('pw_t3_l10_b', '[ELITE] PACT OMNIPOTENCE', 'Pact multiplier applies to enchantment effects', 'B', - { type: 'special', specialId: 'pactOmnipotence', specialDesc: 'Pact multiplier boosts enchants' }, true, 5.0, 10), - createPerk('pw_t3_l10_c', '[ELITE] WORLD SINGULARITY', 'World effects apply at 3x strength and never expire', 'C', - { type: 'special', specialId: 'worldSingularity', specialDesc: '3x permanent world effects' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'pactWeaving_t4', - name: 'Mythic Pact-Weaving', - multiplier: 1000, - l5Perks: [ - createPerk('pw_t4_l5_a', 'Titanic Weave', 'Enchantments gain +25% power per signed pact', 'A', - { type: 'special', specialId: 'titanicWeave', specialDesc: 'Major enchant scaling with pacts' }, false, 4.0, 5), - createPerk('pw_t4_l5_b', 'Warp Mastery', 'Pact multiplier increased by 0.5x while enchanted', 'B', - { type: 'special', specialId: 'warpMastery', specialDesc: 'Major pact boost from enchants' }, false, 4.0, 5), - createPerk('pw_t4_l5_c', 'World Tyranny', 'World effects apply to all attacks', 'C', - { type: 'special', specialId: 'worldTyranny', specialDesc: 'World effects on all attacks' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('pw_t4_l10_a', 'Godly Weave', 'Enchantments include guardian boons at 50% strength', 'A', - { type: 'special', specialId: 'godlyWeave', specialDesc: 'Strong guardian boons in enchants' }, false, 5.0, 10), - createPerk('pw_t4_l10_b', 'Pact Dominance', 'Signed pacts grant +30% enchantment capacity', 'B', - { type: 'special', specialId: 'pactDominance', specialDesc: 'Pacts grant more enchant capacity' }, false, 5.0, 10), - createPerk('pw_t4_l10_c', 'World Omniscience', 'World effects have 25% chance to apply 3 times', 'C', - { type: 'special', specialId: 'worldOmniscience', specialDesc: 'Chance for triple world effects' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'pactWeaving_t5', - name: 'Transcendent Pact-Weaving', - multiplier: 10000, - l5Perks: [ - createPerk('pw_t5_l5_a', 'God\'s Weave', 'Enchantments gain +50% power per signed pact', 'A', - { type: 'special', specialId: 'godsWeave', specialDesc: 'Massive enchant scaling with pacts' }, false, 5.0, 5), - createPerk('pw_t5_l5_b', 'Warp Transcendence', 'Pact multiplier increased by 1.0x while enchanted', 'B', - { type: 'special', specialId: 'warpTranscendence', specialDesc: 'Massive pact boost from enchants' }, false, 5.0, 5), - createPerk('pw_t5_l5_c', 'World God', 'World effects apply at 2x strength', 'C', - { type: 'special', specialId: 'worldGod', specialDesc: '2x world effect strength' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('pw_t5_l10_a', '[ELITE] WEAVER ASCENDANT', 'All enchantments include ALL guardian boons at full strength', 'A', - { type: 'special', specialId: 'weaverAscendant', specialDesc: 'Enchants get all guardian boons' }, true, 10.0, 10), - createPerk('pw_t5_l10_b', '[ELITE] PACT SINGULARITY', 'Pact multiplier is 3x and applies to ALL enchantments', 'B', - { type: 'special', specialId: 'pactSingularity', specialDesc: '3x pact multiplier for all enchants' }, true, 10.0, 10), - createPerk('pw_t5_l10_c', '[ELITE] WORLD CREATOR', 'World effects are permanent and apply at 5x strength', 'C', - { type: 'special', specialId: 'worldCreator', specialDesc: '5x permanent world effects' }, true, 10.0, 10), - ], - }, -]; - -// ─── GUARDIAN CONSTRUCTS TALENT TREE (Fabricator + Invoker Hybrid) ─────────── -// Base: Build monumental, singular golems. Only 1 active at a time, vastly more durable, costs less maintenance. -// Paths: A = The Architect (Durability), B = The Monumentalist (Cost Reduction), C = The Eternal (Duration) - -export const GUARDIAN_CONSTRUCTS_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'guardianConstructs', - name: 'Guardian Constructs', - multiplier: 1, - l5Perks: [ - createPerk('gc_t1_l5_a', 'Reinforced Frame', '+50% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 0.50 }, false, 1.5, 5), - createPerk('gc_t1_l5_b', 'Efficient Core', '-20% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.20 }, false, 1.5, 5), - createPerk('gc_t1_l5_c', 'Extended Runtime', '+3 floor duration for monumental golems', 'C', - { type: 'special', specialId: 'extendedRuntime', specialDesc: 'Longer golem duration' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('gc_t1_l10_a', 'Armored Hull', '+75% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 0.75 }, false, 2.0, 10), - createPerk('gc_t1_l10_b', 'Frugal Core', '-30% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.30 }, false, 2.0, 10), - createPerk('gc_t1_l10_c', 'Long-Lasting', '+5 floor duration for monumental golems', 'C', - { type: 'special', specialId: 'longLasting', specialDesc: 'Much longer golem duration' }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'guardianConstructs_t2', - name: 'Greater Guardian Constructs', - multiplier: 10, - l5Perks: [ - createPerk('gc_t2_l5_a', 'Titan\'s Frame', '+100% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 1.0 }, false, 2.0, 5), - createPerk('gc_t2_l5_b', 'Monumental Efficiency', '-40% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.40 }, false, 2.0, 5), - createPerk('gc_t2_l5_c', 'Persistent Form', 'Monumental golems last 50% longer', 'C', - { type: 'special', specialId: 'persistentForm', specialDesc: '50% longer golem duration' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('gc_t2_l10_a', 'Impenetrable', '+150% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 1.50 }, false, 2.5, 10), - createPerk('gc_t2_l10_b', 'Resource Attunement', '-50% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.50 }, false, 2.5, 10), - createPerk('gc_t2_l10_c', 'Timeless', 'Monumental golems last 75% longer', 'C', - { type: 'special', specialId: 'timeless', specialDesc: '75% longer golem duration' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'guardianConstructs_t3', - name: 'Divine Guardian Constructs', - multiplier: 100, - l5Perks: [ - createPerk('gc_t3_l5_a', 'God\'s Armor', '+200% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 2.0 }, false, 3.0, 5), - createPerk('gc_t3_l5_b', 'Perfect Efficiency', '-60% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.60 }, false, 3.0, 5), - createPerk('gc_t3_l5_c', 'Eternal Spark', 'Monumental golems never degrade', 'C', - { type: 'special', specialId: 'eternalSpark', specialDesc: 'Golems never degrade' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('gc_t3_l10_a', '[ELITE] MONUMENTAL DURABILITY', 'Monumental golems have 5x durability', 'A', - { type: 'special', specialId: 'monumentalDurability', specialDesc: '5x golem durability' }, true, 5.0, 10), - createPerk('gc_t3_l10_b', '[ELITE] MONUMENTAL THRIFT', 'Monumental golems cost 90% less to maintain', 'B', - { type: 'special', specialId: 'monumentalThrift', specialDesc: '90% less golem maintenance' }, true, 5.0, 10), - createPerk('gc_t3_l10_c', '[ELITE] MONUMENTAL ETERNITY', 'Monumental golems last forever (infinite duration)', 'C', - { type: 'special', specialId: 'monumentalEternity', specialDesc: 'Infinite golem duration' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'guardianConstructs_t4', - name: 'Mythic Guardian Constructs', - multiplier: 1000, - l5Perks: [ - createPerk('gc_t4_l5_a', 'Titan\'s Protection', '+300% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 3.0 }, false, 4.0, 5), - createPerk('gc_t4_l5_b', 'Divine Frugality', '-75% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.75 }, false, 4.0, 5), - createPerk('gc_t4_l5_c', 'Chronos\' Gift', 'Monumental golems gain +1 floor duration per hour of runtime', 'C', - { type: 'special', specialId: 'chronosGift', specialDesc: 'Golems gain duration over time' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('gc_t4_l10_a', 'God\'s Shield', '+400% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 4.0 }, false, 5.0, 10), - createPerk('gc_t4_l10_b', 'Perfect Thrift', '-85% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.85 }, false, 5.0, 10), - createPerk('gc_t4_l10_c', 'Time Lord', 'Monumental golems last 10x longer', 'C', - { type: 'special', specialId: 'timeLord', specialDesc: '10x golem duration' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'guardianConstructs_t5', - name: 'Transcendent Guardian Constructs', - multiplier: 10000, - l5Perks: [ - createPerk('gc_t5_l5_a', 'God\'s Fortress', '+500% golem durability', 'A', - { type: 'multiplier', stat: 'golemDurability', value: 5.0 }, false, 5.0, 5), - createPerk('gc_t5_l5_b', 'Ultimate Efficiency', '-90% golem maintenance cost', 'B', - { type: 'multiplier', stat: 'golemMaintenance', value: -0.90 }, false, 5.0, 5), - createPerk('gc_t5_l5_c', 'Immortal Form', 'Monumental golems are indestructible', 'C', - { type: 'special', specialId: 'immortalForm', specialDesc: 'Indestructible golems' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('gc_t5_l10_a', '[ELITE] THE ARCHITECT', 'Monumental golems have 10x durability and grant 50% damage reduction', 'A', - { type: 'special', specialId: 'theArchitect', specialDesc: '10x durability + 50% DR' }, true, 10.0, 10), - createPerk('gc_t5_l10_b', '[ELITE] THE MONUMENTALIST', 'Monumental golems are FREE to maintain and build', 'B', - { type: 'special', specialId: 'theMonumentalist', specialDesc: 'Free golem maintenance and build' }, true, 10.0, 10), - createPerk('gc_t5_l10_c', '[ELITE] THE ETERNAL', 'Monumental golems last forever and persist across loops', 'C', - { type: 'special', specialId: 'theEternal', specialDesc: 'Infinite golems persist across loops' }, true, 10.0, 10), - ], - }, -]; - -// ─── ENCHANTED GOLEMANCY TALENT TREE (Fabricator + Enchanter Hybrid) ──────── -// Base: Imbuing golems with elemental spell logic -// Paths: A = The Battle-Smith (Golem Damage), B = The Enchanter-Smith (Enchantment Power), C = The Spell-Smith (Spell Effects) - -export const ENCHANTED_GOLEMANCY_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'enchantedGolemancy', - name: 'Enchanted Golemancy', - multiplier: 1, - l5Perks: [ - createPerk('eg_t1_l5_a', 'Battle Forge', '+20% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 0.20 }, false, 1.5, 5), - createPerk('eg_t1_l5_b', 'Mystic Forge', '+15% enchantment effect on golems', 'B', - { type: 'multiplier', stat: 'golemEnchantPower', value: 0.15 }, false, 1.5, 5), - createPerk('eg_t1_l5_c', 'Spell-Forged', 'Golems have 10% chance to cast spells on attack', 'C', - { type: 'special', specialId: 'spellForged', specialDesc: 'Golems cast spells on attack' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('eg_t1_l10_a', 'War Forge', '+30% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 0.30 }, false, 2.0, 10), - createPerk('eg_t1_l10_b', 'Enchanter\'s Forge', '+25% enchantment effect on golems', 'B', - { type: 'multiplier', stat: 'golemEnchantPower', value: 0.25 }, false, 2.0, 10), - createPerk('eg_t1_l10_c', 'Arcane Forged', 'Golems have 15% chance to cast spells on attack', 'C', - { type: 'special', specialId: 'arcaneForged', specialDesc: 'Better spell chance for golems' }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'enchantedGolemancy_t2', - name: 'Greater Enchanted Golemancy', - multiplier: 10, - l5Perks: [ - createPerk('eg_t2_l5_a', 'Champion Forge', '+40% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 0.40 }, false, 2.0, 5), - createPerk('eg_t2_l5_b', 'Soul-Enchanter', 'Golem enchantments also boost golem speed by 10%', 'B', - { type: 'special', specialId: 'soulEnchanter', specialDesc: 'Golem enchants boost speed' }, false, 2.0, 5), - createPerk('eg_t2_l5_c', 'Elemental Forged', 'Golems have 20% chance to cast spells on attack', 'C', - { type: 'special', specialId: 'elementalForged', specialDesc: '20% spell chance for golems' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('eg_t2_l10_a', 'Heroic Forge', '+50% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 0.50 }, false, 2.5, 10), - createPerk('eg_t2_l10_b', 'Grand Enchanter', 'Golem enchantments also boost golem durability by 15%', 'B', - { type: 'special', specialId: 'grandEnchanter', specialDesc: 'Golem enchants boost durability' }, false, 2.5, 10), - createPerk('eg_t2_l10_c', 'Spell Mastery', 'Golems have 25% chance to cast spells on attack', 'C', - { type: 'special', specialId: 'spellMastery', specialDesc: '25% spell chance for golems' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'enchantedGolemancy_t3', - name: 'Divine Enchanted Golemancy', - multiplier: 100, - l5Perks: [ - createPerk('eg_t3_l5_a', 'God\'s Forge', '+75% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 0.75 }, false, 3.0, 5), - createPerk('eg_t3_l5_b', 'Divine Enchanter', 'Golem enchantments also boost golem damage by 20%', 'B', - { type: 'special', specialId: 'divineEnchanter', specialDesc: 'Golem enchants boost damage' }, false, 3.0, 5), - createPerk('eg_t3_l5_c', 'Arcane Smith', 'Golems have 30% chance to cast spells on attack', 'C', - { type: 'special', specialId: 'arcaneSmith', specialDesc: '30% spell chance for golems' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('eg_t3_l10_a', '[ELITE] BATTLE GOD', 'Golem damage is 2x and applies to all attacks', 'A', - { type: 'special', specialId: 'battleGod', specialDesc: '2x golem damage' }, true, 5.0, 10), - createPerk('eg_t3_l10_b', '[ELITE] ENCHANTER GOD', 'Golem enchantments are 3x powerful', 'B', - { type: 'special', specialId: 'enchanterGod', specialDesc: '3x golem enchantment power' }, true, 5.0, 10), - createPerk('eg_t3_l10_c', '[ELITE] SPELL GOD', 'Golems always cast spells on attack (100% chance)', 'C', - { type: 'special', specialId: 'spellGod', specialDesc: 'Golems always cast spells' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'enchantedGolemancy_t4', - name: 'Mythic Enchanted Golemancy', - multiplier: 1000, - l5Perks: [ - createPerk('eg_t4_l5_a', 'Titan\'s Forge', '+100% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 1.0 }, false, 4.0, 5), - createPerk('eg_t4_l5_b', 'Titanic Enchanter', 'Golem enchantments also boost golem regen by 25%', 'B', - { type: 'special', specialId: 'titanicEnchanter', specialDesc: 'Golem enchants boost regen' }, false, 4.0, 5), - createPerk('eg_t4_l5_c', 'Spell Tyrant', 'Golems have 40% chance to cast 2 spells on attack', 'C', - { type: 'special', specialId: 'spellTyrant', specialDesc: 'Double spells from golems' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('eg_t4_l10_a', 'God\'s Wrath', '+150% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 1.50 }, false, 5.0, 10), - createPerk('eg_t4_l10_b', 'God\'s Enchanter', 'Golem enchantments also boost golem max mana by 30%', 'B', - { type: 'special', specialId: 'godsEnchanter', specialDesc: 'Golem enchants boost max mana' }, false, 5.0, 10), - createPerk('eg_t4_l10_c', 'Spell Dominance', 'Golems have 50% chance to cast 2 spells on attack', 'C', - { type: 'special', specialId: 'spellDominance', specialDesc: '50% double spell chance' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'enchantedGolemancy_t5', - name: 'Transcendent Enchanted Golemancy', - multiplier: 10000, - l5Perks: [ - createPerk('eg_t5_l5_a', 'God\'s Battle', '+200% golem damage', 'A', - { type: 'multiplier', stat: 'golemDamage', value: 2.0 }, false, 5.0, 5), - createPerk('eg_t5_l5_b', 'Transcendent Enchanter', 'Golem enchantments apply at 2x strength', 'B', - { type: 'special', specialId: 'transcendentEnchanter', specialDesc: '2x golem enchant strength' }, false, 5.0, 5), - createPerk('eg_t5_l5_c', 'Spell Omniscience', 'Golems have 75% chance to cast 2 spells on attack', 'C', - { type: 'special', specialId: 'spellOmniscience', specialDesc: '75% double spell chance' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('eg_t5_l10_a', '[ELITE] THE BATTLE-SMITH', 'Golem damage is 5x and they have 50% crit chance', 'A', - { type: 'special', specialId: 'theBattleSmith', specialDesc: '5x golem damage + 50% crit' }, true, 10.0, 10), - createPerk('eg_t5_l10_b', '[ELITE] THE ENCHANTER-SMITH', 'Golem enchantments are 5x powerful and apply to all golems', 'B', - { type: 'special', specialId: 'theEnchanterSmith', specialDesc: '5x golem enchant power' }, true, 10.0, 10), - createPerk('eg_t5_l10_c', '[ELITE] THE SPELL-SMITH', 'Golems always cast 3 spells on attack', 'C', - { type: 'special', specialId: 'theSpellSmith', specialDesc: 'Golems always cast 3 spells' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/index.ts b/src/lib/game/skill-evolution-modules/index.ts deleted file mode 100644 index bba487d..0000000 --- a/src/lib/game/skill-evolution-modules/index.ts +++ /dev/null @@ -1,229 +0,0 @@ -// ─── Skill Evolution System - Main Entry Point ──────────────────────── -// NEW ARCHITECTURE: 5-Tier Continuous Talent Tree -// -// Every skill with max level 10 follows this "Talent Tree" structure: -// - 5 Tiers (T1-T5) of mastery -// - Milestone Choices: Player chooses 1 of 3 perks at Level 5 and Level 10 of EVERY Tier -// - Total Milestones: A fully mastered Tier 5 skill has 10 unique perk choices active -// - Compounding Paths: Perks belong to "Paths" (A, B, C columns) -// - Elite Perks: At T3 L10 and T5 L10, choices are "Elite Perks" (game-changing) - -// Import types for value usage in function signatures -import type { - SkillPerkChoice, - SkillTierDef, - SkillEvolutionPath, - SkillUpgradeEffect, - SkillUpgradeDef, -} from '../types'; - -// Re-export types -export type { - SkillPerkChoice, - SkillTierDef, - SkillEvolutionPath, - SkillUpgradeEffect, - SkillUpgradeDef, - CanTierUpResult, -} from './types'; - -// Re-export all skill tier constants -export { - MANA_WELL_TIERS, - MANA_FLOW_TIERS, -} from './mana-well-flow'; - -export { ELEM_ATTUNE_TIERS } from './elemental-attunement'; - -export { - MANA_OVERFLOW_TIERS, - MANA_TAP_TIERS, - MANA_SURGE_TIERS, - MANA_SPRING_TIERS, -} from './mana-utility-skills'; - -export { QUICK_LEARNER_TIERS } from './quick-learner'; -export { FOCUSED_MIND_TIERS } from './focused-mind'; -export { KNOWLEDGE_RETENTION_TIERS } from './knowledge-retention'; -export { INSIGHT_HARVEST_TIERS } from './insight-harvest'; - -export { - ENCHANTING_TIERS, - ENCHANT_SPEED_TIERS, - EFFICIENT_ENCHANT_TIERS, - DISENCHANTING_TIERS, -} from './enchanting-skills'; - -export { - INVOCATION_TIERS, - PACT_MASTERY_TIERS, - GUARDIAN_LORE_TIERS, -} from './invocation-skills'; - -export { - GUARDIAN_BANE_TIERS, -} from './guardian-skills'; - -export { - PACT_WEAVING_TIERS, - GUARDIAN_CONSTRUCTS_TIERS, - ENCHANTED_GOLEMANCY_TIERS, -} from './hybrid-skills'; - -export { - ARCANE_FURY_TIERS, - COMBAT_TRAINING_TIERS, - PRECISION_TIERS, - ELEMENTAL_MASTERY_TIERS, - ATTACK_SPEED_TIERS, - ARMOR_PIERCING_TIERS, - SPELL_DAMAGE_TIERS, -} from './combat-skills'; - -export { - MEDITATION_TIERS, - DEEP_TRANCE_TIERS, - VOID_MEDITATION_TIERS, -} from './meditation-skills'; - -export { - EFF_CRAFTING_TIERS, - FIELD_REPAIR_TIERS, -} from './crafting-skills'; - -export { - ESSENCE_REFINING_TIERS, -} from './essence-refining'; - -export { - GOLEM_MASTERY_TIERS, - GOLEM_EFFICIENCY_TIERS, - GOLEM_LONGEVITY_TIERS, -} from './golem-skills'; - -// Re-export helper functions -export { createPerk, createUpgrade } from './utils'; - -// Import all skill tier definitions for SKILL_EVOLUTION_PATHS -import { MANA_WELL_TIERS } from './mana-well-flow'; -import { MANA_FLOW_TIERS } from './mana-well-flow'; -import { ELEM_ATTUNE_TIERS } from './elemental-attunement'; -import { - MANA_OVERFLOW_TIERS, - MANA_TAP_TIERS, - MANA_SURGE_TIERS, - MANA_SPRING_TIERS, -} from './mana-utility-skills'; -import { QUICK_LEARNER_TIERS } from './quick-learner'; -import { FOCUSED_MIND_TIERS } from './focused-mind'; -import { KNOWLEDGE_RETENTION_TIERS } from './knowledge-retention'; -import { INSIGHT_HARVEST_TIERS } from './insight-harvest'; -import { - ENCHANTING_TIERS, - ENCHANT_SPEED_TIERS, - EFFICIENT_ENCHANT_TIERS, - DISENCHANTING_TIERS, -} from './enchanting-skills'; -import { - INVOCATION_TIERS, - PACT_MASTERY_TIERS, - GUARDIAN_LORE_TIERS, -} from './invocation-skills'; -import { GUARDIAN_BANE_TIERS } from './guardian-skills'; -import { - PACT_WEAVING_TIERS, - GUARDIAN_CONSTRUCTS_TIERS, - ENCHANTED_GOLEMANCY_TIERS, -} from './hybrid-skills'; -import { - ARCANE_FURY_TIERS, - COMBAT_TRAINING_TIERS, - PRECISION_TIERS, - ELEMENTAL_MASTERY_TIERS, - ATTACK_SPEED_TIERS, - ARMOR_PIERCING_TIERS, - SPELL_DAMAGE_TIERS, -} from './combat-skills'; -import { - MEDITATION_TIERS, - DEEP_TRANCE_TIERS, - VOID_MEDITATION_TIERS, -} from './meditation-skills'; -import { - EFF_CRAFTING_TIERS, - FIELD_REPAIR_TIERS, -} from './crafting-skills'; -import { - ESSENCE_REFINING_TIERS, -} from './essence-refining'; -import { - GOLEM_MASTERY_TIERS, - GOLEM_EFFICIENCY_TIERS, - GOLEM_LONGEVITY_TIERS, -} from './golem-skills'; - -// Helper to create element cap tiers -function createElementCapTier( - skillId: string, baseSkillId: string, name: string, - tiers: SkillTierDef[] -): SkillEvolutionPath { - return { baseSkillId, tiers }; -} - -// ─── Export Skill Evolution Paths ───────────────────────────────── -export const SKILL_EVOLUTION_PATHS: Record = { - // Core Mana Skills - manaWell: { baseSkillId: 'manaWell', tiers: MANA_WELL_TIERS }, - manaFlow: { baseSkillId: 'manaFlow', tiers: MANA_FLOW_TIERS }, - elemAttune: { baseSkillId: 'elemAttune', tiers: ELEM_ATTUNE_TIERS }, - manaOverflow: { baseSkillId: 'manaOverflow', tiers: MANA_OVERFLOW_TIERS }, - quickLearner: { baseSkillId: 'quickLearner', tiers: QUICK_LEARNER_TIERS }, - focusedMind: { baseSkillId: 'focusedMind', tiers: FOCUSED_MIND_TIERS }, - knowledgeRetention: { baseSkillId: 'knowledgeRetention', tiers: KNOWLEDGE_RETENTION_TIERS }, - meditation: { baseSkillId: 'meditation', tiers: MEDITATION_TIERS }, - deepTrance: { baseSkillId: 'deepTrance', tiers: DEEP_TRANCE_TIERS }, - voidMeditation: { baseSkillId: 'voidMeditation', tiers: VOID_MEDITATION_TIERS }, - insightHarvest: { baseSkillId: 'insightHarvest', tiers: INSIGHT_HARVEST_TIERS }, - - // Enchanting Skills - enchanting: { baseSkillId: 'enchanting', tiers: ENCHANTING_TIERS }, - efficientEnchant: { baseSkillId: 'efficientEnchant', tiers: EFFICIENT_ENCHANT_TIERS }, - essenceRefining: { baseSkillId: 'essenceRefining', tiers: ESSENCE_REFINING_TIERS }, - enchantSpeed: { baseSkillId: 'enchantSpeed', tiers: ENCHANT_SPEED_TIERS }, - - // Combat Skills - arcaneFury: { baseSkillId: 'arcaneFury', tiers: ARCANE_FURY_TIERS }, - combatTraining: { baseSkillId: 'combatTraining', tiers: COMBAT_TRAINING_TIERS }, - precision: { baseSkillId: 'precision', tiers: PRECISION_TIERS }, - elementalMastery: { baseSkillId: 'elementalMastery', tiers: ELEMENTAL_MASTERY_TIERS }, - attackSpeed: { baseSkillId: 'attackSpeed', tiers: ATTACK_SPEED_TIERS }, - armorPiercing: { baseSkillId: 'armorPiercing', tiers: ARMOR_PIERCING_TIERS }, - spellDamage: { baseSkillId: 'spellDamage', tiers: SPELL_DAMAGE_TIERS }, - - // Mana tap/surge/spring - manaTap: { baseSkillId: 'manaTap', tiers: MANA_TAP_TIERS }, - manaSurge: { baseSkillId: 'manaSurge', tiers: MANA_SURGE_TIERS }, - manaSpring: { baseSkillId: 'manaSpring', tiers: MANA_SPRING_TIERS }, - - // Invocation / Pact - invocation: { baseSkillId: 'invocation', tiers: INVOCATION_TIERS }, - pactMastery: { baseSkillId: 'pactMastery', tiers: PACT_MASTERY_TIERS }, - guardianLore: { baseSkillId: 'guardianLore', tiers: GUARDIAN_LORE_TIERS }, - - // Guardian - guardianBane: { baseSkillId: 'guardianBane', tiers: GUARDIAN_BANE_TIERS }, - - // Crafting - effCrafting: { baseSkillId: 'effCrafting', tiers: EFF_CRAFTING_TIERS }, - fieldRepair: { baseSkillId: 'fieldRepair', tiers: FIELD_REPAIR_TIERS }, - - // Golem Skills - golemMastery: { baseSkillId: 'golemMastery', tiers: GOLEM_MASTERY_TIERS }, - golemEfficiency: { baseSkillId: 'golemEfficiency', tiers: GOLEM_EFFICIENCY_TIERS }, - golemLongevity: { baseSkillId: 'golemLongevity', tiers: GOLEM_LONGEVITY_TIERS }, - - // Hybrid Skills - pactWeaving: { baseSkillId: 'pactWeaving', tiers: PACT_WEAVING_TIERS }, - guardianConstructs: { baseSkillId: 'guardianConstructs', tiers: GUARDIAN_CONSTRUCTS_TIERS }, - enchantedGolemancy: { baseSkillId: 'enchantedGolemancy', tiers: ENCHANTED_GOLEMANCY_TIERS }, -}; \ No newline at end of file diff --git a/src/lib/game/skill-evolution-modules/insight-harvest.ts b/src/lib/game/skill-evolution-modules/insight-harvest.ts deleted file mode 100644 index 69bb97d..0000000 --- a/src/lib/game/skill-evolution-modules/insight-harvest.ts +++ /dev/null @@ -1,127 +0,0 @@ -// ─── Insight Harvest Skill Tier Definitions ────────────────────────────────── -// Base: Increases Insight Gain - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── INSIGHT HARVEST TALENT TREE ────────────────────────────────────────── -// Base: Increases Insight Gain -// Paths: A = The Harvester (Insight Gain), B = The Scholar (Study Insight), C = The Hunter (Kill Insight) - -export const INSIGHT_HARVEST_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'insightHarvest', - name: 'Insight Harvest', - multiplier: 1, - l5Perks: [ - createPerk('ih_t1_l5_a', 'Basic Harvest', '+10% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.10 }, false, 1.5, 5), - createPerk('ih_t1_l5_b', 'Rich Harvest', '+15% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.15 }, false, 1.5, 5), - createPerk('ih_t1_l5_c', 'Bountiful Harvest', '+5% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ih_t1_l10_a', 'Greater Harvest', '+15% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.15 }, false, 2.0, 10), - createPerk('ih_t1_l10_b', 'Abundant Harvest', '+20% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.20 }, false, 2.0, 10), - createPerk('ih_t1_l10_c', 'Overflowing Harvest', '+10% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'insightHarvest_t2', - name: 'Greater Harvest', - multiplier: 10, - l5Perks: [ - createPerk('ih_t2_l5_a', 'Master Harvest', '+20% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.20 }, false, 2.0, 5), - createPerk('ih_t2_l5_b', 'Supreme Study', '+25% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.25 }, false, 2.0, 5), - createPerk('ih_t2_l5_c', 'Bountiful Kills', '+15% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('ih_t2_l10_a', 'Ultimate Harvest', '+25% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.25 }, false, 2.5, 10), - createPerk('ih_t2_l10_b', 'Divine Study', '+30% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.30 }, false, 2.5, 10), - createPerk('ih_t2_l10_c', 'Godly Kills', '+20% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.20 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'insightHarvest_t3', - name: 'Perfect Harvest', - multiplier: 100, - l5Perks: [ - createPerk('ih_t3_l5_a', 'Cosmic Harvest', '+30% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.30 }, false, 3.0, 5), - createPerk('ih_t3_l5_b', 'Transcendent Study', '+40% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.40 }, false, 3.0, 5), - createPerk('ih_t3_l5_c', 'Enlightened Kills', '+25% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('ih_t3_l10_a', '[ELITE] OMNI-HARVEST', 'Insight gain is 2x', 'A', - { type: 'special', specialId: 'omniHarvest', specialDesc: '2x insight gain' }, true, 5.0, 10), - createPerk('ih_t3_l10_b', '[ELITE] OMNI-STUDY', 'Insight from study is 3x', 'B', - { type: 'special', specialId: 'omniStudyInsight', specialDesc: '3x insight from study' }, true, 5.0, 10), - createPerk('ih_t3_l10_c', '[ELITE] OMNI-KILLS', 'Insight from kills is 5x', 'C', - { type: 'special', specialId: 'omniKills', specialDesc: '5x insight from kills' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'insightHarvest_t4', - name: 'Transcendent Harvest', - multiplier: 1000, - l5Perks: [ - createPerk('ih_t4_l5_a', 'Astral Harvest', '+40% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.40 }, false, 4.0, 5), - createPerk('ih_t4_l5_b', 'Ethereal Study', '+50% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.50 }, false, 4.0, 5), - createPerk('ih_t4_l5_c', 'Divine Kills', '+30% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.30 }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('ih_t4_l10_a', 'Galactic Harvest', '+50% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.50 }, false, 5.0, 10), - createPerk('ih_t4_l10_b', 'Infinite Study', '+60% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.60 }, false, 5.0, 10), - createPerk('ih_t4_l10_c', 'Godlike Kills', '+40% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.40 }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'insightHarvest_t5', - name: 'Godlike Harvest', - multiplier: 10000, - l5Perks: [ - createPerk('ih_t5_l5_a', 'Divine Harvest', '+75% insight gain', 'A', - { type: 'multiplier', stat: 'insightGain', value: 0.75 }, false, 5.0, 5), - createPerk('ih_t5_l5_b', 'Celestial Study', '+80% insight from study', 'B', - { type: 'multiplier', stat: 'studyInsight', value: 0.80 }, false, 5.0, 5), - createPerk('ih_t5_l5_c', 'Omniscient Kills', '+50% insight from kills', 'C', - { type: 'multiplier', stat: 'killInsight', value: 0.50 }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('ih_t5_l10_a', '[ELITE] ASCENDED HARVEST', 'Insight gain is 5x', 'A', - { type: 'special', specialId: 'ascendedHarvest', specialDesc: '5x insight gain' }, true, 10.0, 10), - createPerk('ih_t5_l10_b', '[ELITE] PERFECT STUDY', 'Insight from study is 5x', 'B', - { type: 'special', specialId: 'perfectStudy', specialDesc: '5x insight from study' }, true, 10.0, 10), - createPerk('ih_t5_l10_c', '[ELITE] OMNIPOTENT KILLS', 'Insight from kills is 10x', 'C', - { type: 'special', specialId: 'omnipotentKills', specialDesc: '10x insight from kills' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/invocation-skills.ts b/src/lib/game/skill-evolution-modules/invocation-skills.ts deleted file mode 100644 index 1a29f91..0000000 --- a/src/lib/game/skill-evolution-modules/invocation-skills.ts +++ /dev/null @@ -1,249 +0,0 @@ -// ─── Invocation/Pact Skill Tier Definitions ──────────────────────── -// This file contains: Invocation, Pact Mastery - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── INVOCATION TALENT TREE (Invoker Attunement) ────────────────────────────── -// Base: Enhances spell invocation and guardian pacts -// Paths: A = The Summoner (Guardian Powers), B = The Channeler (Spell Amplification), C = The Pact Keeper (Pact Efficiency) - -export const INVOCATION_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'invocation', - name: 'Invocation', - multiplier: 1, - l5Perks: [ - createPerk('inv_t1_l5_a', 'Guardian\'s Touch', '+10% guardian boon effectiveness', 'A', - { type: 'multiplier', stat: 'guardianBoon', value: 0.10 }, false, 1.5, 5), - createPerk('inv_t1_l5_b', 'Amplified Cast', '+10% spell damage', 'B', - { type: 'multiplier', stat: 'spellDamage', value: 0.10 }, false, 1.5, 5), - createPerk('inv_t1_l5_c', 'Swift Pact', '-10% pact ritual time', 'C', - { type: 'multiplier', stat: 'pactTime', value: -0.10 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('inv_t1_l10_a', 'Guardian\'s Embrace', '+15% guardian boon effectiveness', 'A', - { type: 'multiplier', stat: 'guardianBoon', value: 0.15 }, false, 2.0, 10), - createPerk('inv_t1_l10_b', 'Empowered Chant', '+15% spell damage', 'B', - { type: 'multiplier', stat: 'spellDamage', value: 0.15 }, false, 2.0, 10), - createPerk('inv_t1_l10_c', 'Efficient Pact', '-15% pact mana cost', 'C', - { type: 'multiplier', stat: 'pactCost', value: -0.15 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'invocation_t2', - name: 'Greater Invocation', - multiplier: 10, - l5Perks: [ - createPerk('inv_t2_l5_a', 'Guardian\'s Shield', 'Signed pacts grant +5% damage reduction', 'A', - { type: 'special', specialId: 'guardianShield', specialDesc: 'Pacts grant damage reduction' }, false, 2.0, 5), - createPerk('inv_t2_l5_b', 'Spell Echo', 'Spells have 10% chance to cast twice', 'B', - { type: 'special', specialId: 'spellEcho', specialDesc: 'Chance for double cast' }, false, 2.0, 5), - createPerk('inv_t2_l5_c', 'Pact Boon', 'Each pact signed reduces all pact costs by 5%', 'C', - { type: 'special', specialId: 'pactBoon', specialDesc: 'Scaling pact cost reduction' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('inv_t2_l10_a', 'Guardian\'s Wrath', 'Signed pacts grant +10% damage vs guardian type', 'A', - { type: 'special', specialId: 'guardianWrath', specialDesc: 'Pacts grant guardian damage' }, false, 2.5, 10), - createPerk('inv_t2_l10_b', 'Arcane Surge', 'Spells have 15% chance to cast twice', 'B', - { type: 'special', specialId: 'arcaneSurge', specialDesc: 'Better chance for double cast' }, false, 2.5, 10), - createPerk('inv_t2_l10_c', 'Grand Pact', 'Pact multiplier increased by 0.2x', 'C', - { type: 'special', specialId: 'grandPact', specialDesc: 'Increased pact multiplier' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'invocation_t3', - name: 'Divine Invocation', - multiplier: 100, - l5Perks: [ - createPerk('inv_t3_l5_a', 'Guardian\'s Dominance', 'Signed pacts grant +15% damage vs guardian type', 'A', - { type: 'special', specialId: 'guardianDominance', specialDesc: 'Enhanced guardian damage' }, false, 3.0, 5), - createPerk('inv_t3_l5_b', 'Mystic Focus', 'Spells have 20% chance to cast twice', 'B', - { type: 'special', specialId: 'mysticFocus', specialDesc: '20% chance double cast' }, false, 3.0, 5), - createPerk('inv_t3_l5_c', 'Pact Mastery', 'Pact multiplier increased by 0.3x', 'C', - { type: 'special', specialId: 'pactMastery', specialDesc: 'Greater pact multiplier' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('inv_t3_l10_a', '[ELITE] GUARDIAN LORD', 'All guardian boons are doubled while their pact is signed', 'A', - { type: 'special', specialId: 'guardianLord', specialDesc: '2x boons when pact signed' }, true, 5.0, 10), - createPerk('inv_t3_l10_b', '[ELITE] ARCANE AVALANCHE', 'Spells have 25% chance to cast 3 times simultaneously', 'B', - { type: 'special', specialId: 'arcaneAvalanche', specialDesc: '25% chance triple cast' }, true, 5.0, 10), - createPerk('inv_t3_l10_c', '[ELITE] ETERNAL COVENANT', 'Signed pacts persist across loops', 'C', - { type: 'special', specialId: 'eternalCovenant', specialDesc: 'Pacts never expire' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'invocation_t4', - name: 'Mythic Invocation', - multiplier: 1000, - l5Perks: [ - createPerk('inv_t4_l5_a', 'Titan\'s Protection', 'All signed pacts grant +10% max mana', 'A', - { type: 'special', specialId: 'titansProtection', specialDesc: 'Pacts grant max mana' }, false, 4.0, 5), - createPerk('inv_t4_l5_b', 'Spell Fury', 'Casting speed increased by 25% for 5s after pact signed', 'B', - { type: 'special', specialId: 'spellFury', specialDesc: 'Pact boosts cast speed' }, false, 4.0, 5), - createPerk('inv_t4_l5_c', 'Pact Amplification', 'Pact multiplier increased by 0.5x', 'C', - { type: 'special', specialId: 'pactAmplification', specialDesc: 'Major pact multiplier boost' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('inv_t4_l10_a', 'Divine Aegis', 'All signed pacts grant +15% damage reduction', 'A', - { type: 'special', specialId: 'divineAegis', specialDesc: 'Pacts grant more damage reduction' }, false, 5.0, 10), - createPerk('inv_t4_l10_b', 'Arcane Tempest', 'Spell damage increased by 25% for 10s after pact signed', 'B', - { type: 'special', specialId: 'arcaneTempest', specialDesc: 'Pact boosts spell damage' }, false, 5.0, 10), - createPerk('inv_t4_l10_c', 'Supreme Pact', 'Pact multiplier increased by 0.75x', 'C', - { type: 'special', specialId: 'supremePact', specialDesc: 'Massive pact multiplier boost' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'invocation_t5', - name: 'Transcendent Invocation', - multiplier: 10000, - l5Perks: [ - createPerk('inv_t5_l5_a', 'God\'s Shield', 'All signed pacts grant +20% damage reduction and +20% max mana', 'A', - { type: 'special', specialId: 'godsShield', specialDesc: 'Pacts grant DR and max mana' }, false, 5.0, 5), - createPerk('inv_t5_l5_b', 'Reality Warp', 'Spells have 30% chance to cast 3 times simultaneously', 'B', - { type: 'special', specialId: 'realityWarp', specialDesc: '30% chance triple cast' }, false, 5.0, 5), - createPerk('inv_t5_l5_c', 'Pact of the Gods', 'Pact multiplier increased by 1.0x', 'C', - { type: 'special', specialId: 'pactOfGods', specialDesc: 'Massive 1.0x pact multiplier' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('inv_t5_l10_a', '[ELITE] ASCENDED GUARDIAN', 'All guardian boons are tripled and apply at double strength', 'A', - { type: 'special', specialId: 'ascendedGuardian', specialDesc: '3x boons at 2x strength' }, true, 10.0, 10), - createPerk('inv_t5_l10_b', '[ELITE] ARCANE SINGULARITY', 'All spells cast 4 times simultaneously with 50% damage each', 'B', - { type: 'special', specialId: 'arcaneSingularity', specialDesc: '4x cast at 50% damage' }, true, 10.0, 10), - createPerk('inv_t5_l10_c', '[ELITE] OMNIPACT', 'All pacts are permanently signed and multiplier is doubled', 'C', - { type: 'special', specialId: 'omnipact', specialDesc: 'All pacts signed, 2x multiplier' }, true, 10.0, 10), - ], - }, -]; - -// ─── PACT MASTERY TALENT TREE (Invoker Attunement) ─────────────────────────── -// Base: Enhances pact signing and guardian bonuses -// Paths: A = The Binder (Pact Power), B = The Harvester (Boon Collection), C = The Soul Forge (Soul Effects) - -export const PACT_MASTERY_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'pactMastery', - name: 'Pact Mastery', - multiplier: 1, - l5Perks: [ - createPerk('pm_t1_l5_a', 'Pact Bond', '+10% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.10 }, false, 1.5, 5), - createPerk('pm_t1_l5_b', 'Boon Hunter', '+1% boon effectiveness per pact signed', 'B', - { type: 'special', specialId: 'boonHunter', specialDesc: 'Scaling boon effectiveness' }, false, 1.5, 5), - createPerk('pm_t1_l5_c', 'Soul Tether', 'Signed pacts restore 5% mana when entering combat', 'C', - { type: 'special', specialId: 'soulTether', specialDesc: 'Pacts restore mana on combat' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('pm_t1_l10_a', 'Strong Bond', '+15% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.15 }, false, 2.0, 10), - createPerk('pm_t1_l10_b', 'Boon Collector', '+2% boon effectiveness per pact signed', 'B', - { type: 'special', specialId: 'boonCollector', specialDesc: 'Better scaling boon effectiveness' }, false, 2.0, 10), - createPerk('pm_t1_l10_c', 'Soul Link', 'Signed pacts restore 10% mana when entering combat', 'C', - { type: 'special', specialId: 'soulLink', specialDesc: 'Better mana restore from pacts' }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'pactMastery_t2', - name: 'Greater Pact Mastery', - multiplier: 10, - l5Perks: [ - createPerk('pm_t2_l5_a', 'Unbreakable Bond', '+25% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.25 }, false, 2.0, 5), - createPerk('pm_t2_l5_b', 'Boon Saturation', 'Each boon type grants +5% to all stats', 'B', - { type: 'special', specialId: 'boonSaturation', specialDesc: 'Boons grant all stat bonuses' }, false, 2.0, 5), - createPerk('pm_t2_l5_c', 'Soul Harvest', 'Killing enemies restores 1% mana per signed pact', 'C', - { type: 'special', specialId: 'soulHarvest', specialDesc: 'Kills restore mana based on pacts' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('pm_t2_l10_a', 'Ultimate Bond', '+35% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.35 }, false, 2.5, 10), - createPerk('pm_t2_l10_b', 'Boon Overflow', 'Boons have 10% chance to apply twice', 'B', - { type: 'special', specialId: 'boonOverflow', specialDesc: 'Chance for double boon effect' }, false, 2.5, 10), - createPerk('pm_t2_l10_c', 'Soul Siphon', 'Dealing damage restores 0.5% mana per signed pact', 'C', - { type: 'special', specialId: 'soulSiphon', specialDesc: 'Damage restores mana from pacts' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'pactMastery_t3', - name: 'Divine Pact Mastery', - multiplier: 100, - l5Perks: [ - createPerk('pm_t3_l5_a', 'Godly Bond', '+50% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.50 }, false, 3.0, 5), - createPerk('pm_t3_l5_b', 'Boon Symphony', 'Each active boon increases others by 5%', 'B', - { type: 'special', specialId: 'boonSymphony', specialDesc: 'Boons amplify each other' }, false, 3.0, 5), - createPerk('pm_t3_l5_c', 'Soul Forge', 'Signed pacts increase max mana by 5% each', 'C', - { type: 'special', specialId: 'soulForge', specialDesc: 'Pacts grant max mana' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('pm_t3_l10_a', '[ELITE] ETERNAL BOND', 'Pact multiplier is doubled and applies to all stats', 'A', - { type: 'special', specialId: 'eternalBond', specialDesc: '2x pact multiplier, all stats' }, true, 5.0, 10), - createPerk('pm_t3_l10_b', '[ELITE] BOON GOD', 'All boons are 3x effective and apply at double strength', 'B', - { type: 'special', specialId: 'boonGod', specialDesc: '3x boon effectiveness' }, true, 5.0, 10), - createPerk('pm_t3_l10_c', '[ELITE] SOUL ASCENSION', 'Each signed pact grants +10% to all damage types', 'C', - { type: 'special', specialId: 'soulAscension', specialDesc: 'Pacts grant all damage' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'pactMastery_t4', - name: 'Mythic Pact Mastery', - multiplier: 1000, - l5Perks: [ - createPerk('pm_t4_l5_a', 'Titan\'s Bond', '+75% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 0.75 }, false, 4.0, 5), - createPerk('pm_t4_l5_b', 'Boon Dominance', 'Boons also grant +10% crit chance', 'B', - { type: 'special', specialId: 'boonDominance', specialDesc: 'Boons grant crit chance' }, false, 4.0, 5), - createPerk('pm_t4_l5_c', 'Soul Empowerment', 'Signed pacts increase spell damage by 10% each', 'C', - { type: 'special', specialId: 'soulEmpowerment', specialDesc: 'Pacts grant spell damage' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('pm_t4_l10_a', 'Divine Bond', '+100% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 1.0 }, false, 5.0, 10), - createPerk('pm_t4_l10_b', 'Boon Paragon', 'Boons also grant +15% cast speed', 'B', - { type: 'special', specialId: 'boonParagon', specialDesc: 'Boons grant cast speed' }, false, 5.0, 10), - createPerk('pm_t4_l10_c', 'Soul Transcendence', 'Signed pacts increase regen by 10% each', 'C', - { type: 'special', specialId: 'soulTranscendence', specialDesc: 'Pacts grant regen' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'pactMastery_t5', - name: 'Transcendent Pact Mastery', - multiplier: 10000, - l5Perks: [ - createPerk('pm_t5_l5_a', 'God\'s Bond', '+150% pact multiplier', 'A', - { type: 'multiplier', stat: 'pactMultiplier', value: 1.50 }, false, 5.0, 5), - createPerk('pm_t5_l5_b', 'Boon Omniscience', 'Boons also grant +20% to all damage types', 'B', - { type: 'special', specialId: 'boonOmniscience', specialDesc: 'Boons grant all damage' }, false, 5.0, 5), - createPerk('pm_t5_l5_c', 'Soul Omnipotence', 'Signed pacts increase all stats by 15% each', 'C', - { type: 'special', specialId: 'soulOmnipotence', specialDesc: 'Pacts grant all stats' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('pm_t5_l10_a', '[ELITE] PACT OF THE GODS', 'Pact multiplier is 5x and applies to everything', 'A', - { type: 'special', specialId: 'pactOfGods2', specialDesc: '5x pact multiplier, universal' }, true, 10.0, 10), - createPerk('pm_t5_l10_b', '[ELITE] BOON SINGULARITY', 'All boons are 5x effective and never expire', 'B', - { type: 'special', specialId: 'boonSingularity', specialDesc: '5x boons, permanent' }, true, 10.0, 10), - createPerk('pm_t5_l10_c', '[ELITE] SOUL OMNIPOTENCE', 'Each pact grants +25% to ALL stats permanently', 'C', - { type: 'special', specialId: 'soulOmnipotenceElite', specialDesc: 'Pacts grant 25% all stats' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/knowledge-retention.ts b/src/lib/game/skill-evolution-modules/knowledge-retention.ts deleted file mode 100644 index 00e9bb7..0000000 --- a/src/lib/game/skill-evolution-modules/knowledge-retention.ts +++ /dev/null @@ -1,81 +0,0 @@ -// ─── Knowledge Retention Skill Tier Definitions ───────────────────────────── -// Base: Study Progress Saved on Cancel - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── KNOWLEDGE RETENTION TALENT TREE ────────────────────────────────────────── -// Base: Study Progress Saved on Cancel -// Paths: A = The Scholar (Retention), B = The Scribe (Efficiency), C = The Archivist (Bonus Effects) - -export const KNOWLEDGE_RETENTION_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'knowledgeRetention', - name: 'Knowledge Retention', - multiplier: 1, - l5Perks: [ - createPerk('kr_t1_l5_a', 'Memory Palace', '+10% Retention', 'A', - { type: 'multiplier', stat: 'retention', value: 0.10 }, false, 1.5, 5), - createPerk('kr_t1_l5_b', 'Quick Notes', '+10% Study Speed', 'B', - { type: 'multiplier', stat: 'studySpeed', value: 0.10 }, false, 1.5, 5), - createPerk('kr_t1_l5_c', 'Ancient Wisdom', '+5% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('kr_t1_l10_a', 'Greater Retention', '+15% Retention', 'A', - { type: 'multiplier', stat: 'retention', value: 0.15 }, false, 2.0, 10), - createPerk('kr_t1_l10_b', 'Efficient Study', '+15% Study Speed', 'B', - { type: 'multiplier', stat: 'studySpeed', value: 0.15 }, false, 2.0, 10), - createPerk('kr_t1_l10_c', 'Enlightened Mind', '+10% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'knowledgeRetention_t2', - name: 'Greater Retention', - multiplier: 10, - l5Perks: [ - createPerk('kr_t2_l5_a', 'Vast Memory', '+20% Retention', 'A', - { type: 'multiplier', stat: 'retention', value: 0.20 }, false, 2.0, 5), - createPerk('kr_t2_l5_b', 'Swift Study', '+20% Study Speed', 'B', - { type: 'multiplier', stat: 'studySpeed', value: 0.20 }, false, 2.0, 5), - createPerk('kr_t2_l5_c', 'Scholarly Wisdom', '+15% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.15 }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('kr_t2_l10_a', 'Perfect Memory', '+25% Retention', 'A', - { type: 'multiplier', stat: 'retention', value: 0.25 }, false, 2.5, 10), - createPerk('kr_t2_l10_b', 'Master Study', '+25% Study Speed', 'B', - { type: 'multiplier', stat: 'studySpeed', value: 0.25 }, false, 2.5, 10), - createPerk('kr_t2_l10_c', 'Divine Wisdom', '+20% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.20 }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'knowledgeRetention_t3', - name: 'Perfect Retention', - multiplier: 100, - l5Perks: [ - createPerk('kr_t3_l5_a', 'Cosmic Memory', '+30% Retention', 'A', - { type: 'multiplier', stat: 'retention', value: 0.30 }, false, 3.0, 5), - createPerk('kr_t3_l5_b', 'Transcendent Study', '+30% Study Speed', 'B', - { type: 'multiplier', stat: 'studySpeed', value: 0.30 }, false, 3.0, 5), - createPerk('kr_t3_l5_c', 'Enlightened Wisdom', '+25% Insight Gain', 'C', - { type: 'multiplier', stat: 'insightGain', value: 0.25 }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('kr_t3_l10_a', '[ELITE] OMNI-RETENTION', 'Retention is 50%', 'A', - { type: 'special', specialId: 'omniRetention', specialDesc: '50% retention always' }, true, 5.0, 10), - createPerk('kr_t3_l10_b', '[ELITE] OMNI-STUDY', 'Study speed is 50% faster', 'B', - { type: 'special', specialId: 'omniStudy', specialDesc: '50% faster study' }, true, 5.0, 10), - createPerk('kr_t3_l10_c', '[ELITE] OMNI-WISDOM', 'Insight gain is 50% higher', 'C', - { type: 'special', specialId: 'omniWisdom', specialDesc: '50% more insight' }, true, 5.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/learning-skills.ts b/src/lib/game/skill-evolution-modules/learning-skills.ts deleted file mode 100644 index 4202c5e..0000000 --- a/src/lib/game/skill-evolution-modules/learning-skills.ts +++ /dev/null @@ -1,11 +0,0 @@ -// ─── Learning/Study Skill Tier Definitions ───────────────────────────── -// This file now re-exports from the split module files: -// - quick-learner.ts: Quick Learner -// - focused-mind.ts: Focused Mind -// - knowledge-retention.ts: Knowledge Retention -// - insight-harvest.ts: Insight Harvest - -export { QUICK_LEARNER_TIERS } from './quick-learner'; -export { FOCUSED_MIND_TIERS } from './focused-mind'; -export { KNOWLEDGE_RETENTION_TIERS } from './knowledge-retention'; -export { INSIGHT_HARVEST_TIERS } from './insight-harvest'; diff --git a/src/lib/game/skill-evolution-modules/magic-skills.ts b/src/lib/game/skill-evolution-modules/magic-skills.ts deleted file mode 100644 index 4768a3e..0000000 --- a/src/lib/game/skill-evolution-modules/magic-skills.ts +++ /dev/null @@ -1,9 +0,0 @@ -// ─── Magic/Mana Skill Tier Definitions ────────────────────────────────── -// This file now re-exports from the split module files: -// - mana-well-flow.ts: Mana Well, Mana Flow -// - elemental-attunement.ts: Elemental Attunement -// - mana-utility-skills.ts: Mana Overflow, Mana Tap, Mana Surge, Mana Spring - -export { MANA_WELL_TIERS, MANA_FLOW_TIERS } from './mana-well-flow'; -export { ELEM_ATTUNE_TIERS } from './elemental-attunement'; -export { MANA_OVERFLOW_TIERS, MANA_TAP_TIERS, MANA_SURGE_TIERS, MANA_SPRING_TIERS } from './mana-utility-skills'; diff --git a/src/lib/game/skill-evolution-modules/mana-utility-skills.ts b/src/lib/game/skill-evolution-modules/mana-utility-skills.ts deleted file mode 100644 index 4d9f504..0000000 --- a/src/lib/game/skill-evolution-modules/mana-utility-skills.ts +++ /dev/null @@ -1,139 +0,0 @@ -// ─── Mana Utility Skills Tier Definitions ───────────────────────────────────── -// Contains: Mana Overflow, Mana Tap, Mana Surge, Mana Spring - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── MANA OVERFLOW TALENT TREE ─────────────────────────────────────────────── -// Base: Increases Mana from Clicks -// Paths: A = The Basin (Capacity), B = The Fountain (Regen), C = The Battery (Spell Damage) - -export const MANA_OVERFLOW_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'manaOverflow', - name: 'Mana Overflow', - multiplier: 1, - l5Perks: [ - createPerk('mo_t1_l5_a', 'Overflow Basin', '+25% Mana from clicks', 'A', - { type: 'multiplier', stat: 'clickMana', value: 0.25 }, false, 1.5, 5), - createPerk('mo_t1_l5_b', 'Rushing Fountain', '+10% Regen', 'B', - { type: 'multiplier', stat: 'regen', value: 0.10 }, false, 1.5, 5), - createPerk('mo_t1_l5_c', 'Spark Charge', '+5% Spell Damage', 'C', - { type: 'multiplier', stat: 'spellDamage', value: 0.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('mo_t1_l10_a', 'Greater Basin', '+35% Mana from clicks', 'A', - { type: 'multiplier', stat: 'clickMana', value: 0.35 }, false, 2.0, 10), - createPerk('mo_t1_l10_b', 'Flowing Spring', '+15% Regen', 'B', - { type: 'multiplier', stat: 'regen', value: 0.15 }, false, 2.0, 10), - createPerk('mo_t1_l10_c', 'Charged Power', '+10% Spell Damage', 'C', - { type: 'multiplier', stat: 'spellDamage', value: 0.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'manaOverflow_t2', - name: 'Greater Overflow', - multiplier: 10, - l5Perks: [ - createPerk('mo_t2_l5_a', 'Vast Basin', '+50% Mana from clicks', 'A', - { type: 'multiplier', stat: 'clickMana', value: 0.50 }, false, 2.0, 5), - createPerk('mo_t2_l5_b', 'Tidal Spring', 'Regen cannot drop below 80% of base', 'B', - { type: 'special', specialId: 'tidalSpring', specialDesc: 'Regen floor at 80%' }, false, 2.0, 5), - createPerk('mo_t2_l5_c', 'Capacitor Charge', 'Spells cost 5% less mana per 1000 max mana', 'C', - { type: 'special', specialId: 'capacitorCharge', specialDesc: 'Capacity reduces spell cost' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('mo_t2_l10_a', 'Infinite Basin', '+75% Mana from clicks', 'A', - { type: 'multiplier', stat: 'clickMana', value: 0.75 }, false, 2.5, 10), - createPerk('mo_t2_l10_b', 'Eternal Spring', '+25% Regen', 'B', - { type: 'multiplier', stat: 'regen', value: 0.25 }, false, 2.5, 10), - createPerk('mo_t2_l10_c', 'Powered Surge', '+15% Spell Damage', 'C', - { type: 'multiplier', stat: 'spellDamage', value: 0.15 }, false, 2.5, 10), - ], - }, -]; - -// ─── MANA TAP ───────────────────────────────────────────────────────────── - -export const MANA_TAP_TIERS: SkillTierDef[] = [ - { - tier: 1, - skillId: 'manaTap', - name: 'Mana Tap', - multiplier: 1, - l5Perks: [ - createPerk('mt_t1_l5_a', 'Basic Tap', '+1 mana/click', 'A', - { type: 'multiplier', stat: 'clickMana', value: 1 }, false, 1.5, 5), - createPerk('mt_t1_l5_b', 'Swift Tap', '+10% click speed', 'B', - { type: 'multiplier', stat: 'clickSpeed', value: 0.10 }, false, 1.5, 5), - createPerk('mt_t1_l5_c', 'Dual Tap', '2x mana per click, but 10% slower', 'C', - { type: 'special', specialId: 'dualTap', specialDesc: '2x mana, 10% slower clicks' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('mt_t1_l10_a', 'Better Tap', '+2 mana/click', 'A', - { type: 'multiplier', stat: 'clickMana', value: 2 }, false, 2.0, 10), - createPerk('mt_t1_l10_b', 'Rapid Tap', '+15% click speed', 'B', - { type: 'multiplier', stat: 'clickSpeed', value: 0.15 }, false, 2.0, 10), - createPerk('mt_t1_l10_c', 'Triple Tap', '3x mana per click, but 20% slower', 'C', - { type: 'special', specialId: 'tripleTap', specialDesc: '3x mana, 20% slower clicks' }, false, 2.0, 10), - ], - }, -]; - -// ─── MANA SURGE ────────────────────────────────────────────────────────── - -export const MANA_SURGE_TIERS: SkillTierDef[] = [ - { - tier: 1, - skillId: 'manaSurge', - name: 'Mana Surge', - multiplier: 1, - l5Perks: [ - createPerk('ms_t1_l5_a', 'Basic Surge', '+3 mana/click', 'A', - { type: 'multiplier', stat: 'clickMana', value: 3 }, false, 1.5, 5), - createPerk('ms_t1_l5_b', 'Charged Surge', '+10% mana from surges', 'B', - { type: 'multiplier', stat: 'surgePower', value: 0.10 }, false, 1.5, 5), - createPerk('ms_t1_l5_c', 'Chain Surge', 'Surges have 10% chance to trigger twice', 'C', - { type: 'special', specialId: 'chainSurge', specialDesc: '10% chance double surge' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ms_t1_l10_a', 'Greater Surge', '+5 mana/click', 'A', - { type: 'multiplier', stat: 'clickMana', value: 5 }, false, 2.0, 10), - createPerk('ms_t1_l10_b', 'Powerful Surge', '+15% mana from surges', 'B', - { type: 'multiplier', stat: 'surgePower', value: 0.15 }, false, 2.0, 10), - createPerk('ms_t1_l10_c', 'Mega Surge', 'Surges have 20% chance to trigger twice', 'C', - { type: 'special', specialId: 'megaSurge', specialDesc: '20% chance double surge' }, false, 2.0, 10), - ], - }, -]; - -// ─── MANA SPRING ───────────────────────────────────────────────────────── - -export const MANA_SPRING_TIERS: SkillTierDef[] = [ - { - tier: 1, - skillId: 'manaSpring', - name: 'Mana Spring', - multiplier: 1, - l5Perks: [ - createPerk('msp_t1_l5_a', 'Basic Spring', '+2 mana regen', 'A', - { type: 'multiplier', stat: 'regen', value: 2 }, false, 1.5, 5), - createPerk('msp_t1_l5_b', 'Pure Spring', '+10% regen quality', 'B', - { type: 'multiplier', stat: 'regenQuality', value: 0.10 }, false, 1.5, 5), - createPerk('msp_t1_l5_c', 'Gushing Spring', 'Regen is 10% more effective below 50% mana', 'C', - { type: 'special', specialId: 'gushingSpring', specialDesc: 'Better regen at low mana' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('msp_t1_l10_a', 'Greater Spring', '+3 mana regen', 'A', - { type: 'multiplier', stat: 'regen', value: 3 }, false, 2.0, 10), - createPerk('msp_t1_l10_b', 'Perfect Spring', '+15% regen quality', 'B', - { type: 'multiplier', stat: 'regenQuality', value: 0.15 }, false, 2.0, 10), - createPerk('msp_t1_l10_c', 'Flooding Spring', 'Regen is 20% more effective below 50% mana', 'C', - { type: 'special', specialId: 'floodingSpring', specialDesc: '20% better regen at low mana' }, false, 2.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/mana-well-flow.ts b/src/lib/game/skill-evolution-modules/mana-well-flow.ts deleted file mode 100644 index d52a5fd..0000000 --- a/src/lib/game/skill-evolution-modules/mana-well-flow.ts +++ /dev/null @@ -1,250 +0,0 @@ -// ─── Mana Well & Mana Flow Skill Tier Definitions ────────────────────────────── -// Mana Well: Increases Max Mana -// Mana Flow: Increases Mana Regen - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── MANA WELL TALENT TREE ──────────────────────────────────────────────────── -// Base: Increases Max Mana -// Paths: A = The Reservoir (Capacity), B = The Filter (Regen), C = The Battery (Spell Damage) - -export const MANA_WELL_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'manaWell', - name: 'Mana Well', - multiplier: 1, - l5Perks: [ - createPerk('mw_t1_l5_a', 'Deep Basin', '+20% Max Mana', 'A', - { type: 'multiplier', stat: 'maxMana', value: 1.20 }, false, 1.5, 5), - createPerk('mw_t1_l5_b', 'Pure Stream', '+10% Regen', 'B', - { type: 'multiplier', stat: 'regen', value: 1.10 }, false, 1.5, 5), - createPerk('mw_t1_l5_c', 'Spark Gap', '+5% Spell Damage', 'C', - { type: 'multiplier', stat: 'spellDamage', value: 1.05 }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('mw_t1_l10_a', 'Expanded Volume', '+30% Max Mana', 'A', - { type: 'multiplier', stat: 'maxMana', value: 1.30 }, false, 2.0, 10), - createPerk('mw_t1_l10_b', 'Rapid Flow', '+15% Regen', 'B', - { type: 'multiplier', stat: 'regen', value: 1.15 }, false, 2.0, 10), - createPerk('mw_t1_l10_c', 'Overcharge', '+10% Spell Damage', 'C', - { type: 'multiplier', stat: 'spellDamage', value: 1.10 }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'manaWell_t2', - name: 'Deep Reservoir', - multiplier: 10, - l5Perks: [ - createPerk('mw_t2_l5_a', 'Pressure Valve', 'Mana Capacity also increases Regen by 2% of total.', 'A', - { type: 'special', specialId: 'pressureValve', specialDesc: 'Capacity grants 2% of total as regen' }, false, 2.0, 5), - createPerk('mw_t2_l5_b', 'Fine Mesh', 'Regen is 20% more effective while below 25% Mana.', 'B', - { type: 'special', specialId: 'fineMesh', specialDesc: 'Low mana boosts regen effectiveness' }, false, 2.0, 5), - createPerk('mw_t2_l5_c', 'Stored Potential', '+1% Crit chance per 1000 Max Mana.', 'C', - { type: 'special', specialId: 'storedPotential', specialDesc: 'Capacity grants crit chance' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('mw_t2_l10_a', 'Oceanic Reach', '+50% Max Mana.', 'A', - { type: 'multiplier', stat: 'maxMana', value: 1.50 }, false, 2.5, 10), - createPerk('mw_t2_l10_b', 'Unstoppable Current', 'Regen cannot be reduced below 50% of base by Incursion.', 'B', - { type: 'special', specialId: 'unstoppableCurrent', specialDesc: 'Regen floor at 50% base' }, false, 2.5, 10), - createPerk('mw_t2_l10_c', 'Discharge', 'Expending 50% of your tank in one spell triples its power.', 'C', - { type: 'special', specialId: 'discharge', specialDesc: 'Big spells get 3x power' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'manaWell_t3', - name: 'Abyssal Pool', - multiplier: 100, - l5Perks: [ - createPerk('mw_t3_l5_a', 'Abyssal Depth', 'Max Mana bonus from all sources increased by 1.5x.', 'A', - { type: 'special', specialId: 'abyssalDepth', specialDesc: 'All max mana bonuses multiplied by 1.5x' }, false, 3.0, 5), - createPerk('mw_t3_l5_b', 'Osmosis', 'Passive mana gain based on current floor height.', 'B', - { type: 'special', specialId: 'osmosis', specialDesc: 'Floor-based passive mana gain' }, false, 3.0, 5), - createPerk('mw_t3_l5_c', 'Capacitor', 'Spells cost 0 mana if your tank is above 90%.', 'C', - { type: 'special', specialId: 'capacitor', specialDesc: 'Free spells at high mana' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('mw_t3_l10_a', '[ELITE] SINGULARITY', 'Max Mana is doubled, but Regen is halved.', 'A', - { type: 'special', specialId: 'singularity', specialDesc: '2x max mana, 0.5x regen' }, true, 5.0, 10), - createPerk('mw_t3_l10_b', '[ELITE] PERPETUALITY', 'Incursion penalties no longer affect this skill\'s Regen bonuses.', 'B', - { type: 'special', specialId: 'perpetuity', specialDesc: 'Immune to incursion penalties' }, true, 5.0, 10), - createPerk('mw_t3_l10_c', '[ELITE] RESONANCE', 'Weapon enchantments scale 1:1 with your current Max Mana.', 'C', - { type: 'special', specialId: 'resonance', specialDesc: 'Enchantments scale with max mana' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'manaWell_t4', - name: 'Ocean of Power', - multiplier: 1000, - l5Perks: [ - createPerk('mw_t4_l5_a', 'Grand Reservoir', '+100% Max Mana.', 'A', - { type: 'multiplier', stat: 'maxMana', value: 1.0 }, false, 4.0, 5), - createPerk('mw_t4_l5_b', 'Tidal Force', 'Every 60 seconds, instantly restore 10% Mana.', 'B', - { type: 'special', specialId: 'tidalForce', specialDesc: 'Periodic 10% mana restore' }, false, 4.0, 5), - createPerk('mw_t4_l5_c', 'Voltage Spike', '+50% Enchantment potency.', 'C', - { type: 'multiplier', stat: 'enchantPotency', value: 0.50 }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('mw_t4_l10_a', 'Pressure Mastery', 'Regen bonus from Capacity (T2 L5) is doubled.', 'A', - { type: 'special', specialId: 'pressureMastery', specialDesc: 'Doubles T2 L5 regen bonus' }, false, 5.0, 10), - createPerk('mw_t4_l10_b', 'Floodgates', 'While at 0 Mana, gain a 5x Regen boost for 10 seconds.', 'B', - { type: 'special', specialId: 'floodgates', specialDesc: '5x regen at empty mana' }, false, 5.0, 10), - createPerk('mw_t4_l10_c', 'Arc Flash', 'Enchanted weapons have a 20% chance to not consume mana.', 'C', - { type: 'special', specialId: 'arcFlash', specialDesc: '20% chance free weapon enchant' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'manaWell_t5', - name: 'Infinite Reservoir', - multiplier: 10000, - l5Perks: [ - createPerk('mw_t5_l5_a', 'Void Vessel', '+200% Max Mana.', 'A', - { type: 'multiplier', stat: 'maxMana', value: 2.0 }, false, 5.0, 5), - createPerk('mw_t5_l5_b', 'Aetheric Breath', 'Regen is calculated based on Max Mana instead of Base.', 'B', - { type: 'special', specialId: 'aethericBreath', specialDesc: 'Regen based on max mana' }, false, 5.0, 5), - createPerk('mw_t5_l5_c', 'God-Slayer Logic', 'Critical hits grant 1% permanent (this loop) Spell Power.', 'C', - { type: 'special', specialId: 'godSlayerLogic', specialDesc: 'Crits grant permanent spell power' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('mw_t5_l10_a', '[ELITE] ASCENSION', 'Your Max Mana becomes infinite for the first 5 minutes of every Floor.', 'A', - { type: 'special', specialId: 'ascension', specialDesc: 'Infinite mana at floor start' }, true, 10.0, 10), - createPerk('mw_t5_l10_b', '[ELITE] NIRVANA', 'The Incursion penalty is inverted; the more it should slow you, the faster you regenerate.', 'B', - { type: 'special', specialId: 'nirvana', specialDesc: 'Incursion inverts to boost regen' }, true, 10.0, 10), - createPerk('mw_t5_l10_c', '[ELITE] OMNIPOTENCE', 'You can equip an additional Enchantment on every weapon slot.', 'C', - { type: 'special', specialId: 'omnipotence', specialDesc: 'Extra enchantment slot per weapon' }, true, 10.0, 10), - ], - }, -]; - -// ─── MANA FLOW TALENT TREE ───────────────────────────────────────────────────── -// Base: Increases Mana Regen -// Paths: A = The River (Raw Regen), B = The Cycle (Regen Scaling), C = The Storm (Burst Regen) - -export const MANA_FLOW_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'manaFlow', - name: 'Mana Flow', - multiplier: 1, - l5Perks: [ - createPerk('mf_t1_l5_a', 'Gentle Stream', '+15% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 0.15 }, false, 1.5, 5), - createPerk('mf_t1_l5_b', 'Flowing Cycle', 'Regen +1% per 10 max mana', 'B', - { type: 'special', specialId: 'flowingCycle', specialDesc: 'Scaling regen with max mana' }, false, 1.5, 5), - createPerk('mf_t1_l5_c', 'Sprint Burst', '+50% regen for 10s after casting a spell', 'C', - { type: 'special', specialId: 'sprintBurst', specialDesc: 'Burst regen after casting' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('mf_t1_l10_a', 'Rushing River', '+25% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 0.25 }, false, 2.0, 10), - createPerk('mf_t1_l10_b', 'Eddy Current', 'Regen +2% per 10 max mana', 'B', - { type: 'special', specialId: 'eddyCurrent', specialDesc: 'Enhanced scaling regen' }, false, 2.0, 10), - createPerk('mf_t1_l10_c', 'Monsoon', '+100% regen for 5s after taking damage', 'C', - { type: 'special', specialId: 'monsoon', specialDesc: 'Defensive regen burst' }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'manaFlow_t2', - name: 'Rushing Stream', - multiplier: 10, - l5Perks: [ - createPerk('mf_t2_l5_a', 'River Basin', '+40% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 0.40 }, false, 2.0, 5), - createPerk('mf_t2_l5_b', 'Full Spigot', 'Regen cannot drop below 75% of base from any source', 'B', - { type: 'special', specialId: 'fullSpigot', specialDesc: 'Regen floor at 75%' }, false, 2.0, 5), - createPerk('mf_t2_l5_c', 'Lightning Strike', '3% chance for instant 10% mana restore on regen tick', 'C', - { type: 'special', specialId: 'lightningStrike', specialDesc: 'Chance instant mana restore' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('mf_t2_l10_a', 'Mighty Torrent', '+60% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 0.60 }, false, 2.5, 10), - createPerk('mf_t2_l10_b', 'Whirlpool', 'Regen rate doubles when below 50% mana', 'B', - { type: 'special', specialId: 'whirlpool', specialDesc: 'Low mana doubles regen' }, false, 2.5, 10), - createPerk('mf_t2_l10_c', 'Thunderclap', 'Spells have 10% chance to trigger 50% regen for 3 seconds', 'C', - { type: 'special', specialId: 'thunderclap', specialDesc: 'Spell-triggered regen' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'manaFlow_t3', - name: 'Eternal River', - multiplier: 100, - l5Perks: [ - createPerk('mf_t3_l5_a', 'Endless Spring', '+80% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 0.80 }, false, 3.0, 5), - createPerk('mf_t3_l5_b', 'Siphon Field', 'Regen also restores 1% of max mana every 10 seconds', 'B', - { type: 'special', specialId: 'siphonField', specialDesc: 'Passive % max mana restore' }, false, 3.0, 5), - createPerk('mf_t3_l5_c', 'Chain Reaction', 'Each spell cast increases regen by 5% for 5 seconds, stacks 5x', 'C', - { type: 'special', specialId: 'chainReaction', specialDesc: 'Casting builds regen' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('mf_t3_l10_a', '[ELITE] ETERNAL FLOW', 'Regen is permanently doubled and cannot be reduced below 100% of base', 'A', - { type: 'special', specialId: 'eternalFlow', specialDesc: '2x regen, unreducible' }, true, 5.0, 10), - createPerk('mf_t3_l10_b', '[ELITE] MANA HEART', 'Your regen is added to your max mana value for all capacity calculations', 'B', - { type: 'special', specialId: 'manaHeart', specialDesc: 'Regen counts as capacity' }, true, 5.0, 10), - createPerk('mf_t3_l10_c', '[ELITE] STORM CENTER', 'Every 30 seconds, gain 3 seconds of 5x regen speed', 'C', - { type: 'special', specialId: 'stormCenter', specialDesc: 'Periodic 5x regen burst' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'manaFlow_t4', - name: 'Cosmic Torrent', - multiplier: 1000, - l5Perks: [ - createPerk('mf_t4_l5_a', 'Galactic Stream', '+150% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 1.50 }, false, 4.0, 5), - createPerk('mf_t4_l5_b', 'Nebula', 'Regen provides a shield equal to 10% of regen value', 'B', - { type: 'special', specialId: 'nebula', specialDesc: 'Regen grants shielding' }, false, 4.0, 5), - createPerk('mf_t4_l5_c', 'Supernova', 'When mana drops below 10%, all regen is tripled for 10 seconds', 'C', - { type: 'special', specialId: 'supernova', specialDesc: 'Emergency regen tripling' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('mf_t4_l10_a', 'Infinite River', '+200% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 2.0 }, false, 5.0, 10), - createPerk('mf_t4_l10_b', 'Event Horizon', 'Regen continues for 10 seconds after taking damage', 'B', - { type: 'special', specialId: 'eventHorizon', specialDesc: 'Regen persists after damage' }, false, 5.0, 10), - createPerk('mf_t4_l10_c', 'Pulsar', 'Every 5th spell cast instantly restores 15% mana', 'C', - { type: 'special', specialId: 'pulsar', specialDesc: 'Every 5th spell restores mana' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'manaFlow_t5', - name: 'Infinite Cascade', - multiplier: 10000, - l5Perks: [ - createPerk('mf_t5_l5_a', 'Cosmic Flow', '+300% Regen', 'A', - { type: 'multiplier', stat: 'regen', value: 3.0 }, false, 5.0, 5), - createPerk('mf_t5_l5_b', 'Stellar Wind', 'Regen increases by 1% per second during combat, up to 100%', 'B', - { type: 'special', specialId: 'stellarWind', specialDesc: 'Combat ramps regen up to 2x' }, false, 5.0, 5), - createPerk('mf_t5_l5_c', 'Quasar', 'Critical hits restore 2% mana instantly', 'C', - { type: 'special', specialId: 'quasar', specialDesc: 'Crits restore mana' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('mf_t5_l10_a', '[ELITE] TRANSCENDENCE', 'Regen is infinite, but max mana is capped at 1000', 'A', - { type: 'special', specialId: 'transcendence', specialDesc: 'Infinite regen, 1000 max mana cap' }, true, 10.0, 10), - createPerk('mf_t5_l10_b', '[ELITE] EQUILIBRIUM', 'Regen and Max Mana are shared - increasing one decreases the other', 'B', - { type: 'special', specialId: 'equilibrium', specialDesc: 'Trade regen for capacity or vice versa' }, true, 10.0, 10), - createPerk('mf_t5_l10_c', '[ELITE] OMNIPRESENCE', 'All regen effects apply to all mana types simultaneously', 'C', - { type: 'special', specialId: 'omnipresence', specialDesc: 'Regen applies to all mana types' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/quick-learner.ts b/src/lib/game/skill-evolution-modules/quick-learner.ts deleted file mode 100644 index aa2b2e7..0000000 --- a/src/lib/game/skill-evolution-modules/quick-learner.ts +++ /dev/null @@ -1,127 +0,0 @@ -// ─── Quick Learner Skill Tier Definitions ────────────────────────────────── -// Base: Increases Study Speed - -import { createPerk } from './utils'; -import type { SkillTierDef } from '../types'; - -// ─── QUICK LEARNER TALENT TREE ───────────────────────────────────────────────── -// Base: Increases Study Speed -// Paths: A = The Scholar (Study Speed), B = The Strategist (Efficiency), C = The Genius (Instant/Chance) - -export const QUICK_LEARNER_TIERS: SkillTierDef[] = [ - // TIER 1 - { - tier: 1, - skillId: 'quickLearner', - name: 'Quick Learner', - multiplier: 1, - l5Perks: [ - createPerk('ql_t1_l5_a', 'Focused Study', '+15% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.15 }, false, 1.5, 5), - createPerk('ql_t1_l5_b', 'Efficient Mind', '-10% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.10 }, false, 1.5, 5), - createPerk('ql_t1_l5_c', 'Lucky Break', '5% chance for instant study completion', 'C', - { type: 'special', specialId: 'luckyBreak', specialDesc: 'Chance for instant study' }, false, 1.5, 5), - ], - l10Perks: [ - createPerk('ql_t1_l10_a', 'Deep Focus', '+25% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.25 }, false, 2.0, 10), - createPerk('ql_t1_l10_b', 'Thrifty Scholar', '-15% Study Mana Cost', 'B', - { type: 'multiplier', stat: 'studyCost', value: -0.15 }, false, 2.0, 10), - createPerk('ql_t1_l10_c', 'Eureka Moment', '10% chance for instant study completion', 'C', - { type: 'special', specialId: 'eurekaMoment', specialDesc: 'Better chance for instant study' }, false, 2.0, 10), - ], - }, - // TIER 2 - { - tier: 2, - skillId: 'quickLearner_t2', - name: 'Swift Scholar', - multiplier: 10, - l5Perks: [ - createPerk('ql_t2_l5_a', 'Rapid Learning', '+40% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.40 }, false, 2.0, 5), - createPerk('ql_t2_l5_b', 'Resourceful', 'Study costs reduced by 1% per level of this skill', 'B', - { type: 'special', specialId: 'resourceful', specialDesc: 'Scaling cost reduction' }, false, 2.0, 5), - createPerk('ql_t2_l5_c', 'Parallel Thoughts', 'Can study 2 items at once at 75% speed each', 'C', - { type: 'special', specialId: 'parallelThoughts', specialDesc: 'Dual study at 75% speed' }, false, 2.0, 5), - ], - l10Perks: [ - createPerk('ql_t2_l10_a', 'Accelerated Mind', '+60% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.60 }, false, 2.5, 10), - createPerk('ql_t2_l10_b', 'Frugal', 'Refund 15% mana when study completes', 'B', - { type: 'special', specialId: 'frugal', specialDesc: 'Mana refund on completion' }, false, 2.5, 10), - createPerk('ql_t2_l10_c', 'Multitasking', 'Can study 3 items at once at 50% speed each', 'C', - { type: 'special', specialId: 'multitasking', specialDesc: 'Triple study at 50% speed' }, false, 2.5, 10), - ], - }, - // TIER 3 - { - tier: 3, - skillId: 'quickLearner_t3', - name: 'Sage Mind', - multiplier: 100, - l5Perks: [ - createPerk('ql_t3_l5_a', 'Brilliant Mind', '+80% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 0.80 }, false, 3.0, 5), - createPerk('ql_t3_l5_b', 'Mana Siphon', 'Study costs also restore 1% max mana per hour studied', 'B', - { type: 'special', specialId: 'manaSiphon', specialDesc: 'Study restores mana' }, false, 3.0, 5), - createPerk('ql_t3_l5_c', 'Intuition', '20% chance for instant study completion', 'C', - { type: 'special', specialId: 'intuition', specialDesc: '20% chance instant study' }, false, 3.0, 5), - ], - l10Perks: [ - createPerk('ql_t3_l10_a', '[ELITE] ENLIGHTENMENT', 'Study speed is tripled and costs no mana', 'A', - { type: 'special', specialId: 'enlightenment', specialDesc: '3x speed, free study' }, true, 5.0, 10), - createPerk('ql_t3_l10_b', '[ELITE] KNOWLEDGE VAULT', 'All studied items retain 50% progress when cancelled', 'B', - { type: 'special', specialId: 'knowledgeVault', specialDesc: '50% progress retained on cancel' }, true, 5.0, 10), - createPerk('ql_t3_l10_c', '[ELITE] EUREKA', 'All study has a 25% chance to complete instantly', 'C', - { type: 'special', specialId: 'eureka', specialDesc: '25% chance instant study' }, true, 5.0, 10), - ], - }, - // TIER 4 - { - tier: 4, - skillId: 'quickLearner_t4', - name: 'Transcendent Scholar', - multiplier: 1000, - l5Perks: [ - createPerk('ql_t4_l5_a', 'Mastermind', '+120% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 1.20 }, false, 4.0, 5), - createPerk('ql_t4_l5_b', 'Scholar\'s Grace', 'Study grants 1 insight per hour studied', 'B', - { type: 'special', specialId: 'scholarsGrace', specialDesc: 'Study grants insight' }, false, 4.0, 5), - createPerk('ql_t4_l5_c', 'Genius Strike', '30% chance for instant study completion', 'C', - { type: 'special', specialId: 'geniusStrike', specialDesc: '30% chance instant study' }, false, 4.0, 5), - ], - l10Perks: [ - createPerk('ql_t4_l10_a', 'Grand Library', '+150% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 1.50 }, false, 5.0, 10), - createPerk('ql_t4_l10_b', 'Wisdom', 'Study also increases max mana by 10 per hour', 'B', - { type: 'special', specialId: 'wisdom', specialDesc: 'Study increases max mana' }, false, 5.0, 10), - createPerk('ql_t4_l10_c', 'Brilliance', '40% chance for instant study completion', 'C', - { type: 'special', specialId: 'brilliance', specialDesc: '40% chance instant study' }, false, 5.0, 10), - ], - }, - // TIER 5 - { - tier: 5, - skillId: 'quickLearner_t5', - name: 'Omniscient', - multiplier: 10000, - l5Perks: [ - createPerk('ql_t5_l5_a', 'Cosmic Knowledge', '+200% Study Speed', 'A', - { type: 'multiplier', stat: 'studySpeed', value: 2.0 }, false, 5.0, 5), - createPerk('ql_t5_l5_b', 'Universal Truth', 'All skills/spells start at 25% progress', 'B', - { type: 'special', specialId: 'universalTruth', specialDesc: 'All new study starts at 25%' }, false, 5.0, 5), - createPerk('ql_t5_l5_c', 'Divine Insight', '50% chance for instant study completion', 'C', - { type: 'special', specialId: 'divineInsight', specialDesc: '50% chance instant study' }, false, 5.0, 5), - ], - l10Perks: [ - createPerk('ql_t5_l10_a', '[ELITE] OMNISCIENCE', 'All study completes instantly and costs no mana', 'A', - { type: 'special', specialId: 'omniscience', specialDesc: 'Instant, free study' }, true, 10.0, 10), - createPerk('ql_t5_l10_b', '[ELITE] ARCHIVE', 'Study progress is permanent across all loops', 'B', - { type: 'special', specialId: 'archive', specialDesc: 'Study progress never resets' }, true, 10.0, 10), - createPerk('ql_t5_l10_c', '[ELITE] INFINITE WISDOM', 'All study has 100% chance to complete instantly', 'C', - { type: 'special', specialId: 'infiniteWisdom', specialDesc: 'Always instant study' }, true, 10.0, 10), - ], - }, -]; diff --git a/src/lib/game/skill-evolution-modules/types.ts b/src/lib/game/skill-evolution-modules/types.ts deleted file mode 100644 index 93715d3..0000000 --- a/src/lib/game/skill-evolution-modules/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -// ─── Type Re-exports ───────────────────────────────────────────────────────── -// Re-export types from the main types file for convenience - -export type { - SkillPerkChoice, - SkillTierDef, - SkillEvolutionPath, - SkillUpgradeEffect, - SkillUpgradeDef, -} from '../types'; - -// Additional types used by skill evolution -export interface CanTierUpResult { - canTierUp: boolean; - reason?: string; -} diff --git a/src/lib/game/skill-evolution-modules/utils.ts b/src/lib/game/skill-evolution-modules/utils.ts deleted file mode 100644 index 027c49d..0000000 --- a/src/lib/game/skill-evolution-modules/utils.ts +++ /dev/null @@ -1,29 +0,0 @@ -// ─── Helper Functions for Skill Evolution ─────────────────────────────────── - -import type { SkillPerkChoice, SkillUpgradeDef, SkillUpgradeEffect } from '../types'; - -// ─── Helper to create perk choices ────────────────────────────────────────────── -export function createPerk( - id: string, - name: string, - desc: string, - path: 'A' | 'B' | 'C', - effect: SkillUpgradeEffect, - isElite: boolean = false, - pathCompoundBonus?: number, - milestone?: 5 | 10 -): SkillPerkChoice & { milestone?: 5 | 10 } { - return { id, name, desc, path, effect, isElite, pathCompoundBonus, milestone }; -} - -// ─── Helper to create upgrade definitions (for test compatibility) ───────────── -export function createUpgrade( - id: string, - name: string, - desc: string, - skillId: string, - milestone: 5 | 10, - effect: SkillUpgradeEffect -): SkillUpgradeDef { - return { id, name, desc, skillId, milestone, effect }; -} diff --git a/src/lib/game/skill-evolution.ts b/src/lib/game/skill-evolution.ts deleted file mode 100644 index 7170a2d..0000000 --- a/src/lib/game/skill-evolution.ts +++ /dev/null @@ -1,24 +0,0 @@ -// ─── Skill Evolution System ─────────────────────────────────────────────────────── -// NEW ARCHITECTURE: 5-Tier Continuous Talent Tree -// -// Every skill with max level 10 follows this "Talent Tree" structure: -// - 5 Tiers (T1-T5) of mastery -// - Milestone Choices: Player chooses 1 of 3 perks at Level 5 and Level 10 of EVERY Tier -// - Total Milestones: A fully mastered Tier 5 skill has 10 unique perk choices active -// - Compounding Paths: Perks belong to "Paths" (A, B, C columns) -// - Elite Perks: At T3 L10 and T5 L10, choices are "Elite Perks" (game-changing) -// -// This file is now a re-export wrapper from the modularized skill-evolution-modules. -// The actual implementation has been split into: -// - types.ts: Type definitions -// - utils.ts: Helper functions (createPerk, createUpgrade) -// - magic-skills.ts: Mana Well, Mana Flow, Elemental Attunement, Mana Overflow, etc. -// - learning-skills.ts: Quick Learner, Focused Mind, Knowledge Retention, Insight Harvest -// - enchanting-skills.ts: Enchanting, Enchant Speed, Efficient Enchant -// - invocation-skills.ts: Invocation, Pact Mastery -// - guardian-skills.ts: Guardian Bane -// - hybrid-skills.ts: Pact-Weaving, Guardian Constructs, Enchanted Golemancy -// - index.ts: Main entry point with SKILL_EVOLUTION_PATHS and helper functions - -// Re-export everything from the modularized structure -export * from './skill-evolution-modules'; diff --git a/src/lib/game/stores/skillStore.ts b/src/lib/game/stores/skillStore.ts deleted file mode 100755 index c07736e..0000000 --- a/src/lib/game/stores/skillStore.ts +++ /dev/null @@ -1,343 +0,0 @@ -// ─── Skill Store ────────────────────────────────────────────────────────────── -// Handles skills, upgrades, tiers, and study progress - -import { create } from 'zustand'; -import { persist } from 'zustand/middleware'; -import { SKILLS_DEF, getStudySpeedMultiplier, getStudyCostMultiplier } from '../constants'; -import type { StudyTarget, SkillUpgradeChoice } from '../types'; -import { SKILL_EVOLUTION_PATHS, getBaseSkillId } from '../skill-evolution'; -import { useCombatStore } from './combatStore'; -import { useManaStore } from './manaStore'; - -export interface SkillState { - // Skills - skills: Record; - skillProgress: Record; // Saved study progress for skills - skillUpgrades: Record; // Selected upgrade IDs per skill - skillTiers: Record; // Current tier for each base skill - paidStudySkills: Record; // skillId -> level that was paid for - - // Study - currentStudyTarget: StudyTarget | null; - parallelStudyTarget: StudyTarget | null; - - // Actions - Skills - setSkillLevel: (skillId: string, level: number) => void; - incrementSkillLevel: (skillId: string) => void; - clearPaidStudySkill: (skillId: string) => void; - setPaidStudySkill: (skillId: string, level: number) => void; - - // Actions - Study - startStudyingSkill: (skillId: string, rawMana: number) => { started: boolean; cost: number }; - startStudyingSpell: (spellId: string, rawMana: number, studyTime: number) => { started: boolean; cost: number }; - updateStudyProgress: (progressGain: number) => { completed: boolean; target: StudyTarget | null }; - cancelStudy: (retentionBonus: number) => void; - setStudyTarget: (target: StudyTarget | null) => void; - setCurrentStudyTarget: (target: StudyTarget | null) => void; - - // Actions - Upgrades - selectSkillUpgrade: (skillId: string, upgradeId: string) => void; - deselectSkillUpgrade: (skillId: string, upgradeId: string) => void; - commitSkillUpgrades: (skillId: string, upgradeIds: string[]) => void; - tierUpSkill: (skillId: string) => void; - - // Computed - getSkillUpgradeChoices: (skillId: string, milestone: 5 | 10) => { available: SkillUpgradeChoice[]; selected: string[] }; - - // Reset - resetSkills: ( - skills?: Record, - skillUpgrades?: Record, - skillTiers?: Record - ) => void; -} - -export const useSkillStore = create()( - persist( - (set, get) => ({ - skills: {}, - skillProgress: {}, - skillUpgrades: {}, - skillTiers: {}, - paidStudySkills: {}, - currentStudyTarget: null, - parallelStudyTarget: null, - - setSkillLevel: (skillId: string, level: number) => { - set((state) => ({ - skills: { ...state.skills, [skillId]: level }, - })); - }, - - incrementSkillLevel: (skillId: string) => { - set((state) => ({ - skills: { ...state.skills, [skillId]: (state.skills[skillId] || 0) + 1 }, - skillProgress: { ...state.skillProgress, [skillId]: 0 }, - })); - }, - - clearPaidStudySkill: (skillId: string) => { - set((state) => { - const { [skillId]: _, ...remaining } = state.paidStudySkills; - return { paidStudySkills: remaining }; - }); - }, - - setPaidStudySkill: (skillId: string, level: number) => { - set((state) => ({ - paidStudySkills: { ...state.paidStudySkills, [skillId]: level }, - })); - }, - - startStudyingSkill: (skillId: string, rawMana: number) => { - const state = get(); - const sk = SKILLS_DEF[skillId]; - if (!sk) return { started: false, cost: 0 }; - - const currentLevel = state.skills[skillId] || 0; - if (currentLevel >= sk.max) return { started: false, cost: 0 }; - - // Check prerequisites - if (sk.req) { - for (const [r, rl] of Object.entries(sk.req)) { - if ((state.skills[r] || 0) < rl) return { started: false, cost: 0 }; - } - } - - // Check if already paid for this level - const paidForLevel = state.paidStudySkills[skillId]; - const isAlreadyPaid = paidForLevel === currentLevel; - - // Calculate cost - const costMult = getStudyCostMultiplier(state.skills); - const cost = Math.floor(sk.base * (currentLevel + 1) * costMult); - - if (!isAlreadyPaid && rawMana < cost) return { started: false, cost }; - - // Get saved progress - const savedProgress = state.skillProgress[skillId] || 0; - - // Mark as paid (this is done here so resume works for free) - const newPaidSkills = isAlreadyPaid - ? state.paidStudySkills - : { ...state.paidStudySkills, [skillId]: currentLevel }; - - // Start studying - set({ - paidStudySkills: newPaidSkills, - currentStudyTarget: { - type: 'skill', - id: skillId, - progress: savedProgress, - required: sk.studyTime, - }, - }); - - useCombatStore.getState().setAction('study'); - - if (!isAlreadyPaid && cost > 0) { - useManaStore.getState().spendRawMana(cost); - } - - return { started: true, cost: isAlreadyPaid ? 0 : cost }; - }, - - startStudyingSpell: (spellId: string, rawMana: number, studyTime: number) => { - const state = get(); - - // Start studying the spell - set({ - currentStudyTarget: { - type: 'spell', - id: spellId, - progress: 0, - required: studyTime, - }, - }); - - useCombatStore.getState().setAction('study'); - - // Spell study has no mana cost upfront - cost is paid via study time - return { started: true, cost: 0 }; - }, - - updateStudyProgress: (progressGain: number) => { - const state = get(); - if (!state.currentStudyTarget) return { completed: false, target: null }; - - const newProgress = state.currentStudyTarget.progress + progressGain; - const completed = newProgress >= state.currentStudyTarget.required; - - const newTarget = completed ? null : { - ...state.currentStudyTarget, - progress: newProgress, - }; - - set({ currentStudyTarget: newTarget }); - - return { - completed, - target: completed ? state.currentStudyTarget : null - }; - }, - - cancelStudy: (retentionBonus: number) => { - const state = get(); - if (!state.currentStudyTarget) return; - - // Save progress with retention bonus - const savedProgress = Math.min( - state.currentStudyTarget.progress, - state.currentStudyTarget.required * retentionBonus - ); - - if (state.currentStudyTarget.type === 'skill') { - set({ - currentStudyTarget: null, - skillProgress: { - ...state.skillProgress, - [state.currentStudyTarget.id]: savedProgress, - }, - }); - } else { - set({ currentStudyTarget: null }); - } - }, - - setStudyTarget: (target: StudyTarget | null) => { - set({ currentStudyTarget: target }); - }, - - setCurrentStudyTarget: (target: StudyTarget | null) => { - set({ currentStudyTarget: target }); - }, - - selectSkillUpgrade: (skillId: string, upgradeId: string) => { - set((state) => { - const current = state.skillUpgrades?.[skillId] || []; - if (current.includes(upgradeId)) return state; - if (current.length >= 2) return state; // Max 2 upgrades per milestone - return { - skillUpgrades: { - ...state.skillUpgrades, - [skillId]: [...current, upgradeId], - }, - }; - }); - }, - - deselectSkillUpgrade: (skillId: string, upgradeId: string) => { - set((state) => { - const current = state.skillUpgrades?.[skillId] || []; - return { - skillUpgrades: { - ...state.skillUpgrades, - [skillId]: current.filter(id => id !== upgradeId), - }, - }; - }); - }, - - commitSkillUpgrades: (skillId: string, upgradeIds: string[]) => { - set((state) => { - // Determine which milestone we're committing - const isL5 = upgradeIds.some(id => id.includes('_l5')); - const isL10 = upgradeIds.some(id => id.includes('_l10')); - - const existingUpgrades = state.skillUpgrades?.[skillId] || []; - - let preservedUpgrades: string[]; - if (isL5) { - preservedUpgrades = existingUpgrades.filter(id => id.includes('_l10')); - } else if (isL10) { - preservedUpgrades = existingUpgrades.filter(id => id.includes('_l5')); - } else { - preservedUpgrades = []; - } - - const mergedUpgrades = [...preservedUpgrades, ...upgradeIds]; - - return { - skillUpgrades: { - ...state.skillUpgrades, - [skillId]: mergedUpgrades, - }, - }; - }); - }, - - tierUpSkill: (skillId: string) => { - const state = get(); - const baseSkillId = skillId.includes('_t') ? skillId.split('_t')[0] : skillId; - const currentTier = state.skillTiers?.[baseSkillId] || 1; - const nextTier = currentTier + 1; - - if (nextTier > 5) return; - - const nextTierSkillId = `${baseSkillId}_t${nextTier}`; - const currentLevel = state.skills[skillId] || 0; - - set({ - skillTiers: { - ...state.skillTiers, - [baseSkillId]: nextTier, - }, - skills: { - ...state.skills, - [nextTierSkillId]: currentLevel, - [skillId]: 0, - }, - skillUpgrades: { - ...state.skillUpgrades, - [nextTierSkillId]: [], - }, - }); - }, - - getSkillUpgradeChoices: (skillId: string, milestone: 5 | 10) => { - const state = get(); - const baseSkillId = getBaseSkillId(skillId); - const tier = state.skillTiers?.[baseSkillId] || 1; - - const path = SKILL_EVOLUTION_PATHS[baseSkillId]; - if (!path) return { available: [], selected: [] }; - - const tierDef = path.tiers.find(t => t.tier === tier); - if (!tierDef) return { available: [], selected: [] }; - - const available = tierDef.upgrades.filter(u => u.milestone === milestone); - const selected = state.skillUpgrades?.[skillId]?.filter(id => - available.some(u => u.id === id) - ) || []; - - return { available, selected }; - }, - - resetSkills: ( - skills: Record = {}, - skillUpgrades: Record = {}, - skillTiers: Record = {} - ) => { - set({ - skills, - skillProgress: {}, - skillUpgrades, - skillTiers, - paidStudySkills: {}, - currentStudyTarget: null, - parallelStudyTarget: null, - }); - }, - }), - { - name: 'mana-loop-skills', - partialize: (state) => ({ - skills: state.skills, - skillProgress: state.skillProgress, - skillUpgrades: state.skillUpgrades, - skillTiers: state.skillTiers, - paidStudySkills: state.paidStudySkills, - }), - } - ) -);