Redesign skill system around attunements
All checks were successful
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 3m31s
All checks were successful
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 3m31s
- 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
This commit is contained in:
@@ -186,6 +186,21 @@ export function SkillsTab({ store }: SkillsTabProps) {
|
|||||||
const tierDef = SKILL_EVOLUTION_PATHS[id]?.tiers.find(t => t.tier === currentTier);
|
const tierDef = SKILL_EVOLUTION_PATHS[id]?.tiers.find(t => t.tier === currentTier);
|
||||||
const skillDisplayName = tierDef?.name || def.name;
|
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
|
// Check prerequisites
|
||||||
let prereqMet = true;
|
let prereqMet = true;
|
||||||
if (def.req) {
|
if (def.req) {
|
||||||
@@ -212,7 +227,7 @@ export function SkillsTab({ store }: SkillsTabProps) {
|
|||||||
const cost = Math.floor(baseCost * costMult);
|
const cost = Math.floor(baseCost * costMult);
|
||||||
|
|
||||||
// Can start studying?
|
// Can start studying?
|
||||||
const canStudy = !maxed && prereqMet && store.rawMana >= cost && !isStudying;
|
const canStudy = !maxed && attunementMet && prereqMet && store.rawMana >= cost && !isStudying;
|
||||||
|
|
||||||
// Check for milestone upgrades
|
// Check for milestone upgrades
|
||||||
const milestoneInfo = hasMilestoneUpgrade(tieredSkillId, level, store.skillTiers || {}, store.skillUpgrades);
|
const milestoneInfo = hasMilestoneUpgrade(tieredSkillId, level, store.skillTiers || {}, store.skillUpgrades);
|
||||||
@@ -254,6 +269,11 @@ export function SkillsTab({ store }: SkillsTabProps) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="text-xs text-gray-400 italic">{def.desc}{currentTier > 1 && ` (Tier ${currentTier}: ${fmtDec(tierMultiplier, 0)}x effect)`}</div>
|
<div className="text-xs text-gray-400 italic">{def.desc}{currentTier > 1 && ` (Tier ${currentTier}: ${fmtDec(tierMultiplier, 0)}x effect)`}</div>
|
||||||
|
{!attunementMet && attunementReqText && (
|
||||||
|
<div className="text-xs text-orange-400 mt-1">
|
||||||
|
🔒 {attunementReqText}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
{!prereqMet && def.req && (
|
{!prereqMet && def.req && (
|
||||||
<div className="text-xs text-red-400 mt-1">
|
<div className="text-xs text-red-400 mt-1">
|
||||||
Requires: {Object.entries(def.req).map(([r, rl]) => `${SKILLS_DEF[r]?.name} Lv.${rl}`).join(', ')}
|
Requires: {Object.entries(def.req).map(([r, rl]) => `${SKILLS_DEF[r]?.name} Lv.${rl}`).join(', ')}
|
||||||
|
|||||||
@@ -651,82 +651,140 @@ export const SPELLS_DEF: Record<string, SpellDef> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// ─── Skills ───────────────────────────────────────────────────────────────────
|
// ─── 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<string, SkillDef> = {
|
export const SKILLS_DEF: Record<string, SkillDef> = {
|
||||||
// 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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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
|
// Ascension Skills (powerful effects for endgame)
|
||||||
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)
|
|
||||||
insightHarvest: { name: "Insight Harvest", desc: "+10% insight gain", cat: "ascension", max: 5, base: 1000, studyTime: 20 },
|
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 },
|
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 ────────────────────────────────────────────────────────
|
// ─── Prestige Upgrades ────────────────────────────────────────────────────────
|
||||||
@@ -747,28 +805,32 @@ export const PRESTIGE_DEF: Record<string, PrestigeDef> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// ─── Skill Categories ─────────────────────────────────────────────────────────
|
// ─── 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 = [
|
export const SKILL_CATEGORIES = [
|
||||||
// Core categories (always available)
|
// ═══════════════════════════════════════════════════════════════════════════
|
||||||
|
// CORE CATEGORIES (Always Available)
|
||||||
|
// ═══════════════════════════════════════════════════════════════════════════
|
||||||
{ id: 'mana', name: 'Mana', icon: '💧', attunement: null },
|
{ id: 'mana', name: 'Mana', icon: '💧', attunement: null },
|
||||||
{ id: 'study', name: 'Study', icon: '📚', attunement: null },
|
{ id: 'study', name: 'Study', icon: '📚', attunement: null },
|
||||||
{ id: 'research', name: 'Research', icon: '🔮', attunement: null },
|
|
||||||
{ id: 'ascension', name: 'Ascension', 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: 'enchant', name: 'Enchanting', icon: '✨', attunement: 'enchanter' },
|
||||||
{ id: 'effectResearch', name: 'Effect Research', 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: 'invocation', name: 'Invocation', icon: '💜', attunement: 'invoker' },
|
||||||
{ id: 'pact', name: 'Pact Mastery', 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: 'fabrication', name: 'Fabrication', icon: '⚒️', attunement: 'fabricator' },
|
||||||
{ id: 'golemancy', name: 'Golemancy', icon: '🗿', attunement: 'fabricator' },
|
{ id: 'golemancy', name: 'Golemancy', icon: '🗿', attunement: 'fabricator' },
|
||||||
|
|
||||||
// Legacy category (for backward compatibility)
|
|
||||||
{ id: 'craft', name: 'Crafting', icon: '🔧', attunement: null },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// ─── Rarity Colors ───────────────────────────────────────────────────────────
|
// ─── Rarity Colors ───────────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -1000,6 +1000,14 @@ export const useGameStore = create<GameStore>()(
|
|||||||
const currentLevel = state.skills[skillId] || 0;
|
const currentLevel = state.skills[skillId] || 0;
|
||||||
if (currentLevel >= sk.max) return;
|
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
|
// Check prerequisites
|
||||||
if (sk.req) {
|
if (sk.req) {
|
||||||
for (const [r, rl] of Object.entries(sk.req)) {
|
for (const [r, rl] of Object.entries(sk.req)) {
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ export interface SkillDef {
|
|||||||
desc: string;
|
desc: string;
|
||||||
cat: string;
|
cat: string;
|
||||||
attunement?: string; // Which attunement this skill belongs to (null = core)
|
attunement?: string; // Which attunement this skill belongs to (null = core)
|
||||||
|
attunementLevel?: number; // Minimum attunement level required (default 1)
|
||||||
max: number;
|
max: number;
|
||||||
base: number; // Mana cost to start studying
|
base: number; // Mana cost to start studying
|
||||||
req?: Record<string, number>;
|
req?: Record<string, number>;
|
||||||
|
|||||||
Reference in New Issue
Block a user