From 3c79e66b872673ed9dd5eb61f4792103f851937b Mon Sep 17 00:00:00 2001 From: Z User Date: Sat, 28 Mar 2026 06:57:02 +0000 Subject: [PATCH] Redesign skill system around attunements - Add attunementLevel field to SkillDef type - Organize skills into Core, Enchanter, Invoker, and Fabricator trees - Core skills (mana, study, ascension) available to all players - Enchanter skills require Enchanter attunement and scale with level - Invoker skills for pact mastery and invocation (requires Invoker attunement) - Fabricator skills for golemancy and fabrication (requires Fabricator attunement) - Add attunement level requirements for advanced skills (Lv 3, 5, 7, 8) - Update SkillsTab UI to show attunement requirements - Update store to validate attunement requirements before studying --- src/components/game/tabs/SkillsTab.tsx | 22 ++- src/lib/game/constants.ts | 206 ++++++++++++++++--------- src/lib/game/store.ts | 8 + src/lib/game/types.ts | 1 + 4 files changed, 164 insertions(+), 73 deletions(-) diff --git a/src/components/game/tabs/SkillsTab.tsx b/src/components/game/tabs/SkillsTab.tsx index 92e4d97..e1f2bf0 100755 --- a/src/components/game/tabs/SkillsTab.tsx +++ b/src/components/game/tabs/SkillsTab.tsx @@ -186,6 +186,21 @@ export function SkillsTab({ store }: SkillsTabProps) { const tierDef = SKILL_EVOLUTION_PATHS[id]?.tiers.find(t => t.tier === currentTier); const skillDisplayName = tierDef?.name || def.name; + // Check attunement requirements + let attunementMet = true; + let attunementReqText = ''; + if (def.attunement) { + const attState = store.attunements?.[def.attunement]; + const requiredLevel = def.attunementLevel || 1; + if (!attState?.active) { + attunementMet = false; + attunementReqText = `Requires ${def.attunement.charAt(0).toUpperCase() + def.attunement.slice(1)} attunement`; + } else if ((attState.level || 1) < requiredLevel) { + attunementMet = false; + attunementReqText = `Requires ${def.attunement.charAt(0).toUpperCase() + def.attunement.slice(1)} Lv.${requiredLevel}`; + } + } + // Check prerequisites let prereqMet = true; if (def.req) { @@ -212,7 +227,7 @@ export function SkillsTab({ store }: SkillsTabProps) { const cost = Math.floor(baseCost * costMult); // Can start studying? - const canStudy = !maxed && prereqMet && store.rawMana >= cost && !isStudying; + const canStudy = !maxed && attunementMet && prereqMet && store.rawMana >= cost && !isStudying; // Check for milestone upgrades const milestoneInfo = hasMilestoneUpgrade(tieredSkillId, level, store.skillTiers || {}, store.skillUpgrades); @@ -254,6 +269,11 @@ export function SkillsTab({ store }: SkillsTabProps) { )}
{def.desc}{currentTier > 1 && ` (Tier ${currentTier}: ${fmtDec(tierMultiplier, 0)}x effect)`}
+ {!attunementMet && attunementReqText && ( +
+ 🔒 {attunementReqText} +
+ )} {!prereqMet && def.req && (
Requires: {Object.entries(def.req).map(([r, rl]) => `${SKILLS_DEF[r]?.name} Lv.${rl}`).join(', ')} diff --git a/src/lib/game/constants.ts b/src/lib/game/constants.ts index 0c9ac2f..30bc8f2 100755 --- a/src/lib/game/constants.ts +++ b/src/lib/game/constants.ts @@ -651,82 +651,140 @@ export const SPELLS_DEF: Record = { }; // ─── Skills ─────────────────────────────────────────────────────────────────── +// Skills are organized by attunement - each attunement has its own skill tree +// Core skills are available to everyone, attunement skills require the attunement export const SKILLS_DEF: Record = { - // Mana Skills (4-8 hours study) + // ═══════════════════════════════════════════════════════════════════════════ + // CORE SKILLS (Always Available) + // ═══════════════════════════════════════════════════════════════════════════ + + // Mana Skills (foundation for all mana manipulation) manaWell: { name: "Mana Well", desc: "+100 max mana", cat: "mana", max: 10, base: 100, studyTime: 4 }, manaFlow: { name: "Mana Flow", desc: "+1 regen/hr", cat: "mana", max: 10, base: 150, studyTime: 5 }, elemAttune: { name: "Elem. Attunement", desc: "+50 elem mana cap", cat: "mana", max: 10, base: 200, studyTime: 4 }, manaOverflow: { name: "Mana Overflow", desc: "+25% mana from clicks", cat: "mana", max: 5, base: 400, req: { manaWell: 3 }, studyTime: 6 }, + manaTap: { name: "Mana Tap", desc: "+1 mana/click", cat: "mana", max: 1, base: 300, studyTime: 12 }, + manaSurge: { name: "Mana Surge", desc: "+3 mana/click", cat: "mana", max: 1, base: 800, studyTime: 36, req: { manaTap: 1 } }, + manaSpring: { name: "Mana Spring", desc: "+2 mana regen", cat: "mana", max: 1, base: 600, studyTime: 24 }, - // Study Skills (3-6 hours study) + // Study Skills (improve learning efficiency) quickLearner: { name: "Quick Learner", desc: "+10% study speed", cat: "study", max: 10, base: 250, studyTime: 4 }, focusedMind: { name: "Focused Mind", desc: "-5% study mana cost", cat: "study", max: 10, base: 300, studyTime: 5 }, meditation: { name: "Meditation Focus", desc: "Up to 2.5x regen after 4hrs meditating", cat: "study", max: 1, base: 400, studyTime: 6 }, knowledgeRetention: { name: "Knowledge Retention", desc: "+20% study progress saved on cancel", cat: "study", max: 3, base: 350, studyTime: 5 }, + deepTrance: { name: "Deep Trance", desc: "Extend meditation to 6hrs for 3x", cat: "study", max: 1, base: 900, studyTime: 48, req: { meditation: 1 } }, + voidMeditation:{ name: "Void Meditation", desc: "Extend meditation to 8hrs for 5x", cat: "study", max: 1, base: 1500, studyTime: 72, req: { deepTrance: 1 } }, - // Enchanting Skills (4-8 hours study) - Core crafting system - enchanting: { name: "Enchanting", desc: "Unlocks enchantment design", cat: "enchant", max: 10, base: 200, studyTime: 5 }, - efficientEnchant:{ name: "Efficient Enchant", desc: "-5% enchantment capacity cost", cat: "enchant", max: 5, base: 350, studyTime: 6, req: { enchanting: 3 } }, - disenchanting: { name: "Disenchanting", desc: "Recover 20% mana from removed enchantments", cat: "enchant", max: 3, base: 400, studyTime: 6, req: { enchanting: 2 } }, - enchantSpeed: { name: "Enchant Speed", desc: "-10% enchantment time", cat: "enchant", max: 5, base: 300, studyTime: 4, req: { enchanting: 2 } }, - scrollCrafting: { name: "Scroll Crafting", desc: "Create scrolls to store enchantment designs", cat: "enchant", max: 3, base: 500, studyTime: 8, req: { enchanting: 5 } }, - essenceRefining: { name: "Essence Refining", desc: "+10% enchantment effect power", cat: "enchant", max: 5, base: 450, studyTime: 7, req: { enchanting: 4 } }, - - // Crafting Skills (4-6 hours study) - effCrafting: { name: "Eff. Crafting", desc: "-10% craft time", cat: "craft", max: 5, base: 300, studyTime: 4 }, - fieldRepair: { name: "Field Repair", desc: "+15% repair efficiency", cat: "craft", max: 5, base: 350, studyTime: 4 }, - elemCrafting: { name: "Elem. Crafting", desc: "+25% craft output", cat: "craft", max: 3, base: 500, req: { effCrafting: 3 }, studyTime: 8 }, - - // Effect Research Skills (unlock enchantment effects for designing) - // Tier 1 - Basic Spell Effects - researchManaSpells: { name: "Mana Spell Research", desc: "Unlock Mana Strike spell enchantment", cat: "effectResearch", max: 1, base: 200, studyTime: 4, req: { enchanting: 1 } }, - researchFireSpells: { name: "Fire Spell Research", desc: "Unlock Ember Shot, Fireball spell enchantments", cat: "effectResearch", max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, - researchWaterSpells: { name: "Water Spell Research", desc: "Unlock Water Jet, Ice Shard spell enchantments", cat: "effectResearch", max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, - researchAirSpells: { name: "Air Spell Research", desc: "Unlock Gust, Wind Slash spell enchantments", cat: "effectResearch", max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, - researchEarthSpells: { name: "Earth Spell Research", desc: "Unlock Stone Bullet, Rock Spike spell enchantments", cat: "effectResearch", max: 1, base: 350, studyTime: 6, req: { enchanting: 2 } }, - researchLightSpells: { name: "Light Spell Research", desc: "Unlock Light Lance, Radiance spell enchantments", cat: "effectResearch", max: 1, base: 400, studyTime: 8, req: { enchanting: 3 } }, - researchDarkSpells: { name: "Dark Spell Research", desc: "Unlock Shadow Bolt, Dark Pulse spell enchantments", cat: "effectResearch", max: 1, base: 400, studyTime: 8, req: { enchanting: 3 } }, - researchLifeDeathSpells: { name: "Life & Death Research", desc: "Unlock Drain, Life Tap spell enchantments", cat: "effectResearch", max: 1, base: 400, studyTime: 8, req: { enchanting: 3 } }, - - // Tier 2 - Advanced Spell Effects - researchAdvancedFire: { name: "Advanced Fire Research", desc: "Unlock Inferno, Flame Wave spell enchantments", cat: "effectResearch", max: 1, base: 600, studyTime: 12, req: { researchFireSpells: 1, enchanting: 4 } }, - researchAdvancedWater: { name: "Advanced Water Research", desc: "Unlock Tidal Wave, Ice Storm spell enchantments", cat: "effectResearch", max: 1, base: 600, studyTime: 12, req: { researchWaterSpells: 1, enchanting: 4 } }, - researchAdvancedAir: { name: "Advanced Air Research", desc: "Unlock Hurricane, Wind Blade spell enchantments", cat: "effectResearch", max: 1, base: 600, studyTime: 12, req: { researchAirSpells: 1, enchanting: 4 } }, - researchAdvancedEarth: { name: "Advanced Earth Research", desc: "Unlock Earthquake, Stone Barrage spell enchantments", cat: "effectResearch", max: 1, base: 600, studyTime: 12, req: { researchEarthSpells: 1, enchanting: 4 } }, - researchAdvancedLight: { name: "Advanced Light Research", desc: "Unlock Solar Flare, Divine Smite spell enchantments", cat: "effectResearch", max: 1, base: 700, studyTime: 14, req: { researchLightSpells: 1, enchanting: 5 } }, - researchAdvancedDark: { name: "Advanced Dark Research", desc: "Unlock Void Rift, Shadow Storm spell enchantments", cat: "effectResearch", max: 1, base: 700, studyTime: 14, req: { researchDarkSpells: 1, enchanting: 5 } }, - - // Tier 3 - Master Spell Effects - researchMasterFire: { name: "Master Fire Research", desc: "Unlock Pyroclasm spell enchantment", cat: "effectResearch", max: 1, base: 1200, studyTime: 24, req: { researchAdvancedFire: 1, enchanting: 7 } }, - researchMasterWater: { name: "Master Water Research", desc: "Unlock Tsunami spell enchantment", cat: "effectResearch", max: 1, base: 1200, studyTime: 24, req: { researchAdvancedWater: 1, enchanting: 7 } }, - researchMasterEarth: { name: "Master Earth Research", desc: "Unlock Meteor Strike spell enchantment", cat: "effectResearch", max: 1, base: 1300, studyTime: 26, req: { researchAdvancedEarth: 1, enchanting: 8 } }, - - // Combat Effect Research - researchDamageEffects: { name: "Damage Effect Research", desc: "Unlock Minor/Moderate Power, Amplification effects", cat: "effectResearch", max: 1, base: 250, studyTime: 5, req: { enchanting: 1 } }, - researchCombatEffects: { name: "Combat Effect Research", desc: "Unlock Sharp Edge, Swift Casting effects", cat: "effectResearch", max: 1, base: 350, studyTime: 6, req: { researchDamageEffects: 1, enchanting: 3 } }, - - // Mana Effect Research - researchManaEffects: { name: "Mana Effect Research", desc: "Unlock Mana Reserve, Trickle, Mana Tap effects", cat: "effectResearch", max: 1, base: 200, studyTime: 4, req: { enchanting: 1 } }, - researchAdvancedManaEffects: { name: "Advanced Mana Research", desc: "Unlock Mana Reservoir, Stream, River, Mana Surge effects", cat: "effectResearch", max: 1, base: 400, studyTime: 8, req: { researchManaEffects: 1, enchanting: 3 } }, - - // Utility Effect Research - researchUtilityEffects: { name: "Utility Effect Research", desc: "Unlock Meditative Focus, Quick Study, Insightful effects", cat: "effectResearch", max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, - - // Special Effect Research - researchSpecialEffects: { name: "Special Effect Research", desc: "Unlock Echo Chamber, Siphoning, Bane effects", cat: "effectResearch", max: 1, base: 500, studyTime: 10, req: { enchanting: 4 } }, - researchOverpower: { name: "Overpower Research", desc: "Unlock Overpower effect", cat: "effectResearch", max: 1, base: 700, studyTime: 12, req: { researchSpecialEffects: 1, enchanting: 5 } }, - - // Research Skills (longer study times: 12-72 hours) - manaTap: { name: "Mana Tap", desc: "+1 mana/click", cat: "research", max: 1, base: 300, studyTime: 12 }, - manaSurge: { name: "Mana Surge", desc: "+3 mana/click", cat: "research", max: 1, base: 800, studyTime: 36, req: { manaTap: 1 } }, - manaSpring: { name: "Mana Spring", desc: "+2 mana regen", cat: "research", max: 1, base: 600, studyTime: 24 }, - deepTrance: { name: "Deep Trance", desc: "Extend meditation bonus to 6hrs for 3x", cat: "research", max: 1, base: 900, studyTime: 48, req: { meditation: 1 } }, - voidMeditation:{ name: "Void Meditation", desc: "Extend meditation bonus to 8hrs for 5x", cat: "research", max: 1, base: 1500, studyTime: 72, req: { deepTrance: 1 } }, - - // Ascension Skills (very long study, powerful effects) + // Ascension Skills (powerful effects for endgame) insightHarvest: { name: "Insight Harvest", desc: "+10% insight gain", cat: "ascension", max: 5, base: 1000, studyTime: 20 }, - temporalMemory: { name: "Temporal Memory", desc: "Keep 1 spell learned across loops", cat: "ascension", max: 3, base: 2000, studyTime: 36 }, + temporalMemory: { name: "Temporal Memory", desc: "Keep 1 spell across loops", cat: "ascension", max: 3, base: 2000, studyTime: 36 }, guardianBane: { name: "Guardian Bane", desc: "+20% dmg vs guardians", cat: "ascension", max: 3, base: 1500, studyTime: 30 }, + + // ═══════════════════════════════════════════════════════════════════════════ + // ENCHANTER SKILLS (Right Hand Attunement) + // Transference mana flows through your right hand for enchanting + // ═══════════════════════════════════════════════════════════════════════════ + + // Basic Enchanting (Lv 1) + enchanting: { name: "Enchanting", desc: "Unlocks enchantment design", cat: "enchant", attunement: 'enchanter', attunementLevel: 1, max: 10, base: 200, studyTime: 5 }, + efficientEnchant:{ name: "Efficient Enchant", desc: "-5% enchantment capacity cost", cat: "enchant", attunement: 'enchanter', attunementLevel: 1, max: 5, base: 350, studyTime: 6, req: { enchanting: 3 } }, + disenchanting: { name: "Disenchanting", desc: "Recover 20% mana from removed enchantments", cat: "enchant", attunement: 'enchanter', attunementLevel: 1, max: 3, base: 400, studyTime: 6, req: { enchanting: 2 } }, + enchantSpeed: { name: "Enchant Speed", desc: "-10% enchantment time", cat: "enchant", attunement: 'enchanter', attunementLevel: 1, max: 5, base: 300, studyTime: 4, req: { enchanting: 2 } }, + + // Advanced Enchanting (Lv 3) + scrollCrafting: { name: "Scroll Crafting", desc: "Create scrolls to store enchantment designs", cat: "enchant", attunement: 'enchanter', attunementLevel: 3, max: 3, base: 500, studyTime: 8, req: { enchanting: 5 } }, + essenceRefining: { name: "Essence Refining", desc: "+10% enchantment effect power", cat: "enchant", attunement: 'enchanter', attunementLevel: 3, max: 5, base: 450, studyTime: 7, req: { enchanting: 4 } }, + transferenceMastery: { name: "Transference Mastery", desc: "+25% transference mana conversion", cat: "enchant", attunement: 'enchanter', attunementLevel: 3, max: 3, base: 600, studyTime: 10, req: { enchanting: 5 } }, + + // Master Enchanting (Lv 5+) + soulBinding: { name: "Soul Binding", desc: "Enchantments persist through loops", cat: "enchant", attunement: 'enchanter', attunementLevel: 5, max: 2, base: 1500, studyTime: 24, req: { essenceRefining: 3 } }, + ancientEcho: { name: "Ancient Echo", desc: "+1 enchantment capacity per 2 Enchanter levels", cat: "enchant", attunement: 'enchanter', attunementLevel: 5, max: 5, base: 1000, studyTime: 16 }, + + // Effect Research (Lv 2+) + researchManaSpells: { name: "Mana Spell Research", desc: "Unlock Mana Strike spell enchantment", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 1, max: 1, base: 200, studyTime: 4, req: { enchanting: 1 } }, + researchFireSpells: { name: "Fire Spell Research", desc: "Unlock Ember Shot, Fireball spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 2, max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, + researchWaterSpells: { name: "Water Spell Research", desc: "Unlock Water Jet, Ice Shard spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 2, max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, + researchAirSpells: { name: "Air Spell Research", desc: "Unlock Gust, Wind Slash spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 2, max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, + researchEarthSpells: { name: "Earth Spell Research", desc: "Unlock Stone Bullet, Rock Spike spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 2, max: 1, base: 350, studyTime: 6, req: { enchanting: 2 } }, + researchLightSpells: { name: "Light Spell Research", desc: "Unlock Light Lance, Radiance spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 3, max: 1, base: 400, studyTime: 8, req: { enchanting: 3 } }, + researchDarkSpells: { name: "Dark Spell Research", desc: "Unlock Shadow Bolt, Dark Pulse spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 3, max: 1, base: 400, studyTime: 8, req: { enchanting: 3 } }, + researchLifeDeathSpells: { name: "Life & Death Research", desc: "Unlock Drain, Life Tap spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 3, max: 1, base: 400, studyTime: 8, req: { enchanting: 3 } }, + + // Advanced Effect Research (Lv 4+) + researchAdvancedFire: { name: "Advanced Fire Research", desc: "Unlock Inferno, Flame Wave spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 4, max: 1, base: 600, studyTime: 12, req: { researchFireSpells: 1, enchanting: 4 } }, + researchAdvancedWater: { name: "Advanced Water Research", desc: "Unlock Tidal Wave, Ice Storm spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 4, max: 1, base: 600, studyTime: 12, req: { researchWaterSpells: 1, enchanting: 4 } }, + researchAdvancedAir: { name: "Advanced Air Research", desc: "Unlock Hurricane, Wind Blade spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 4, max: 1, base: 600, studyTime: 12, req: { researchAirSpells: 1, enchanting: 4 } }, + researchAdvancedEarth: { name: "Advanced Earth Research", desc: "Unlock Earthquake, Stone Barrage spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 4, max: 1, base: 600, studyTime: 12, req: { researchEarthSpells: 1, enchanting: 4 } }, + researchAdvancedLight: { name: "Advanced Light Research", desc: "Unlock Solar Flare, Divine Smite spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 5, max: 1, base: 700, studyTime: 14, req: { researchLightSpells: 1, enchanting: 5 } }, + researchAdvancedDark: { name: "Advanced Dark Research", desc: "Unlock Void Rift, Shadow Storm spell enchantments", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 5, max: 1, base: 700, studyTime: 14, req: { researchDarkSpells: 1, enchanting: 5 } }, + + // Master Effect Research (Lv 7+) + researchMasterFire: { name: "Master Fire Research", desc: "Unlock Pyroclasm spell enchantment", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 7, max: 1, base: 1200, studyTime: 24, req: { researchAdvancedFire: 1, enchanting: 7 } }, + researchMasterWater: { name: "Master Water Research", desc: "Unlock Tsunami spell enchantment", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 7, max: 1, base: 1200, studyTime: 24, req: { researchAdvancedWater: 1, enchanting: 7 } }, + researchMasterEarth: { name: "Master Earth Research", desc: "Unlock Meteor Strike spell enchantment", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 8, max: 1, base: 1300, studyTime: 26, req: { researchAdvancedEarth: 1, enchanting: 8 } }, + + // Combat & Utility Effect Research + researchDamageEffects: { name: "Damage Effect Research", desc: "Unlock Minor/Moderate Power, Amplification effects", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 1, max: 1, base: 250, studyTime: 5, req: { enchanting: 1 } }, + researchCombatEffects: { name: "Combat Effect Research", desc: "Unlock Sharp Edge, Swift Casting effects", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 3, max: 1, base: 350, studyTime: 6, req: { researchDamageEffects: 1, enchanting: 3 } }, + researchManaEffects: { name: "Mana Effect Research", desc: "Unlock Mana Reserve, Trickle, Mana Tap effects", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 1, max: 1, base: 200, studyTime: 4, req: { enchanting: 1 } }, + researchAdvancedManaEffects: { name: "Advanced Mana Research", desc: "Unlock Mana Reservoir, Stream, River effects", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 3, max: 1, base: 400, studyTime: 8, req: { researchManaEffects: 1, enchanting: 3 } }, + researchUtilityEffects: { name: "Utility Effect Research", desc: "Unlock Meditative Focus, Quick Study, Insightful effects", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 2, max: 1, base: 300, studyTime: 6, req: { enchanting: 2 } }, + researchSpecialEffects: { name: "Special Effect Research", desc: "Unlock Echo Chamber, Siphoning, Bane effects", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 4, max: 1, base: 500, studyTime: 10, req: { enchanting: 4 } }, + researchOverpower: { name: "Overpower Research", desc: "Unlock Overpower effect", cat: "effectResearch", attunement: 'enchanter', attunementLevel: 5, max: 1, base: 700, studyTime: 12, req: { researchSpecialEffects: 1, enchanting: 5 } }, + + // ═══════════════════════════════════════════════════════════════════════════ + // INVOKER SKILLS (Chest Attunement) + // Form pacts with guardians, gain their elemental powers + // ═══════════════════════════════════════════════════════════════════════════ + + // Pact Fundamentals (Lv 1) + pactMastery: { name: "Pact Mastery", desc: "+10% pact multiplier bonus", cat: "pact", attunement: 'invoker', attunementLevel: 1, max: 5, base: 300, studyTime: 6 }, + guardianAffinity:{ name: "Guardian Affinity", desc: "-15% pact signing time", cat: "pact", attunement: 'invoker', attunementLevel: 1, max: 5, base: 350, studyTime: 5 }, + elementalBond: { name: "Elemental Bond", desc: "+20 elemental mana cap per pact", cat: "pact", attunement: 'invoker', attunementLevel: 1, max: 5, base: 400, studyTime: 6 }, + + // Invocation Basics (Lv 2) + invocationBasics:{ name: "Invocation Basics", desc: "Unlock guardian power activation", cat: "invocation", attunement: 'invoker', attunementLevel: 1, max: 1, base: 500, studyTime: 8 }, + powerChannel: { name: "Power Channel", desc: "+15% guardian power effectiveness", cat: "invocation", attunement: 'invoker', attunementLevel: 2, max: 5, base: 400, studyTime: 7, req: { invocationBasics: 1 } }, + elementalResonance: { name: "Elemental Resonance", desc: "+25% elemental damage per pact", cat: "invocation", attunement: 'invoker', attunementLevel: 2, max: 3, base: 500, studyTime: 8 }, + + // Advanced Invocation (Lv 4+) + dualInvocation: { name: "Dual Invocation", desc: "Activate 2 guardian powers at once", cat: "invocation", attunement: 'invoker', attunementLevel: 4, max: 1, base: 1200, studyTime: 18, req: { powerChannel: 3 } }, + pactSynergy: { name: "Pact Synergy", desc: "+5% all stats per pact (stacking)", cat: "pact", attunement: 'invoker', attunementLevel: 3, max: 5, base: 600, studyTime: 10, req: { pactMastery: 3 } }, + guardianCaller: { name: "Guardian Caller", desc: "Summon guardian spirit for 1 floor", cat: "invocation", attunement: 'invoker', attunementLevel: 5, max: 1, base: 1500, studyTime: 20, req: { dualInvocation: 1 } }, + + // Master Invocation (Lv 7+) + primordialPact: { name: "Primordial Pact", desc: "+50% to all pact boons", cat: "pact", attunement: 'invoker', attunementLevel: 7, max: 1, base: 2000, studyTime: 30, req: { pactSynergy: 5 } }, + awakenedHeart: { name: "Awakened Heart", desc: "Permanent +1 mana regen per pact", cat: "invocation", attunement: 'invoker', attunementLevel: 8, max: 1, base: 2500, studyTime: 36, req: { guardianCaller: 1 } }, + + // ═══════════════════════════════════════════════════════════════════════════ + // FABRICATOR SKILLS (Left Hand Attunement) + // Shape earth and metal to craft golems and equipment + // ═══════════════════════════════════════════════════════════════════════════ + + // Golemancy Basics (Lv 1) + golemancy: { name: "Golemancy", desc: "Unlock basic golem crafting", cat: "golemancy", attunement: 'fabricator', attunementLevel: 1, max: 1, base: 400, studyTime: 8 }, + golemVitality: { name: "Golem Vitality", desc: "+20% golem HP", cat: "golemancy", attunement: 'fabricator', attunementLevel: 1, max: 5, base: 350, studyTime: 5, req: { golemancy: 1 } }, + golemEfficiency: { name: "Golem Efficiency", desc: "-10% golem mana cost", cat: "golemancy", attunement: 'fabricator', attunementLevel: 1, max: 5, base: 400, studyTime: 6, req: { golemancy: 1 } }, + + // Fabrication Basics (Lv 1) + fabrication: { name: "Fabrication", desc: "Unlock equipment crafting", cat: "fabrication", attunement: 'fabricator', attunementLevel: 1, max: 5, base: 300, studyTime: 6 }, + efficientCrafting:{ name: "Efficient Crafting", desc: "-10% craft time", cat: "fabrication", attunement: 'fabricator', attunementLevel: 1, max: 5, base: 300, studyTime: 4, req: { fabrication: 1 } }, + fieldRepair: { name: "Field Repair", desc: "+15% repair efficiency", cat: "fabrication", attunement: 'fabricator', attunementLevel: 1, max: 5, base: 350, studyTime: 4 }, + earthShaping: { name: "Earth Shaping", desc: "+25% earth mana conversion", cat: "fabrication", attunement: 'fabricator', attunementLevel: 1, max: 5, base: 400, studyTime: 6 }, + + // Advanced Fabrication (Lv 3+) + metalworking: { name: "Metalworking", desc: "Unlock metal equipment recipes", cat: "fabrication", attunement: 'fabricator', attunementLevel: 3, max: 1, base: 800, studyTime: 12, req: { fabrication: 3 } }, + golemCommand: { name: "Golem Command", desc: "Control +1 golem simultaneously", cat: "golemancy", attunement: 'fabricator', attunementLevel: 3, max: 2, base: 700, studyTime: 10, req: { golemancy: 1, golemVitality: 3 } }, + runicCarving: { name: "Runic Carving", desc: "Equipment has +10% base capacity", cat: "fabrication", attunement: 'fabricator', attunementLevel: 3, max: 3, base: 600, studyTime: 8, req: { fabrication: 3 } }, + + // Master Fabrication (Lv 5+) + alloyMastery: { name: "Alloy Mastery", desc: "Unlock advanced alloy recipes", cat: "fabrication", attunement: 'fabricator', attunementLevel: 5, max: 1, base: 1200, studyTime: 18, req: { metalworking: 1 } }, + golemancyMaster: { name: "Golemancy Master", desc: "Golems have +50% all stats", cat: "golemancy", attunement: 'fabricator', attunementLevel: 5, max: 1, base: 1500, studyTime: 20, req: { golemCommand: 2 } }, + earthsHeart: { name: "Earth's Heart", desc: "+1 earth mana per Fabricator level/hr", cat: "fabrication", attunement: 'fabricator', attunementLevel: 5, max: 1, base: 1000, studyTime: 14, req: { earthShaping: 5 } }, + + // Legendary Fabrication (Lv 8+) + legendaryCraft: { name: "Legendary Crafting", desc: "Chance for crafted items to gain +1 tier", cat: "fabrication", attunement: 'fabricator', attunementLevel: 8, max: 1, base: 2500, studyTime: 30, req: { alloyMastery: 1, runicCarving: 3 } }, + awakenedHand: { name: "Awakened Hand", desc: "Craft time -50%, +25% quality", cat: "fabrication", attunement: 'fabricator', attunementLevel: 8, max: 1, base: 3000, studyTime: 36, req: { legendaryCraft: 1 } }, }; // ─── Prestige Upgrades ──────────────────────────────────────────────────────── @@ -747,28 +805,32 @@ export const PRESTIGE_DEF: Record = { }; // ─── Skill Categories ───────────────────────────────────────────────────────── -// Skills are now organized by attunement - each attunement grants access to specific skill categories +// Skills are organized by attunement - each attunement grants access to specific skill categories export const SKILL_CATEGORIES = [ - // Core categories (always available) + // ═══════════════════════════════════════════════════════════════════════════ + // CORE CATEGORIES (Always Available) + // ═══════════════════════════════════════════════════════════════════════════ { id: 'mana', name: 'Mana', icon: '💧', attunement: null }, { id: 'study', name: 'Study', icon: '📚', attunement: null }, - { id: 'research', name: 'Research', icon: '🔮', attunement: null }, { id: 'ascension', name: 'Ascension', icon: '⭐', attunement: null }, - // Enchanter attunement (Right Hand) + // ═══════════════════════════════════════════════════════════════════════════ + // ENCHANTER (Right Hand Attunement) + // ═══════════════════════════════════════════════════════════════════════════ { id: 'enchant', name: 'Enchanting', icon: '✨', attunement: 'enchanter' }, { id: 'effectResearch', name: 'Effect Research', icon: '🔬', attunement: 'enchanter' }, - // Invoker attunement (Chest) + // ═══════════════════════════════════════════════════════════════════════════ + // INVOKER (Chest Attunement) + // ═══════════════════════════════════════════════════════════════════════════ { id: 'invocation', name: 'Invocation', icon: '💜', attunement: 'invoker' }, { id: 'pact', name: 'Pact Mastery', icon: '🤝', attunement: 'invoker' }, - // Fabricator attunement (Left Hand) + // ═══════════════════════════════════════════════════════════════════════════ + // FABRICATOR (Left Hand Attunement) + // ═══════════════════════════════════════════════════════════════════════════ { id: 'fabrication', name: 'Fabrication', icon: '⚒️', attunement: 'fabricator' }, { id: 'golemancy', name: 'Golemancy', icon: '🗿', attunement: 'fabricator' }, - - // Legacy category (for backward compatibility) - { id: 'craft', name: 'Crafting', icon: '🔧', attunement: null }, ]; // ─── Rarity Colors ─────────────────────────────────────────────────────────── diff --git a/src/lib/game/store.ts b/src/lib/game/store.ts index e7caea9..27c67f5 100755 --- a/src/lib/game/store.ts +++ b/src/lib/game/store.ts @@ -1000,6 +1000,14 @@ export const useGameStore = create()( const currentLevel = state.skills[skillId] || 0; if (currentLevel >= sk.max) return; + // Check attunement requirement + if (sk.attunement) { + const attState = state.attunements?.[sk.attunement]; + if (!attState?.active) return; // Attunement not active + const requiredLevel = sk.attunementLevel || 1; + if ((attState.level || 1) < requiredLevel) return; // Attunement level too low + } + // Check prerequisites if (sk.req) { for (const [r, rl] of Object.entries(sk.req)) { diff --git a/src/lib/game/types.ts b/src/lib/game/types.ts index 8b4e6fd..6458d1d 100755 --- a/src/lib/game/types.ts +++ b/src/lib/game/types.ts @@ -103,6 +103,7 @@ export interface SkillDef { desc: string; cat: string; attunement?: string; // Which attunement this skill belongs to (null = core) + attunementLevel?: number; // Minimum attunement level required (default 1) max: number; base: number; // Mana cost to start studying req?: Record;