fe97ef60b4
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 7m37s
- Implement Pact-Weaving (Invoker + Enchanter) hybrid skill * Paths: The Weaver, The Warp, The World-Weaver * Weave Guardian essence into weapon enchantments/world-effects * Requires: Invoker 5+, Enchanter 5+ - Implement Guardian Constructs (Fabricator + Invoker) hybrid skill * Paths: The Architect, The Monumentalist, The Eternal * Only 1 active at a time, vastly more durable * Requires: Fabricator 5+, Invoker 5+ - Implement Enchanted Golemancy (Fabricator + Enchanter) hybrid skill * Paths: The Battle-Smith, The Enchanter-Smith, The Spell-Smith * Imbue golems with elemental spell logic * Requires: Fabricator 5+, Enchanter 5+ - All 512 tests passing
2313 lines
117 KiB
TypeScript
Executable File
2313 lines
117 KiB
TypeScript
Executable File
// ─── 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)
|
|
|
|
import type { SkillPerkChoice, SkillTierDef, SkillEvolutionPath, SkillUpgradeEffect, SkillUpgradeDef } from './types';
|
|
import { SKILLS_DEF } from './constants';
|
|
|
|
// ─── Helper to create perk choices ──────────────────────────────────────────────
|
|
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) ─────────────
|
|
function createUpgrade(
|
|
id: string,
|
|
name: string,
|
|
desc: string,
|
|
skillId: string,
|
|
milestone: 5 | 10,
|
|
effect: SkillUpgradeEffect
|
|
): SkillUpgradeDef {
|
|
return { id, name, desc, skillId, milestone, effect };
|
|
}
|
|
|
|
// ─── MANA WELL TALENT TREE ────────────────────────────────────────────────────
|
|
// Base: Increases Max Mana
|
|
// Paths: A = The Reservoir (Capacity), B = The Filter (Regen), C = The Battery (Spell Damage)
|
|
|
|
const MANA_WELL_TIERS: SkillTierDef[] = [
|
|
// TIER 1
|
|
{
|
|
tier: 1,
|
|
skillId: 'manaWell',
|
|
name: 'Mana Well',
|
|
multiplier: 1,
|
|
// L5 Perks (Choose 1 of 3)
|
|
l5Perks: [
|
|
createPerk('mw_t1_l5_a', 'Deep Basin', '+20% Max Mana', 'A',
|
|
{ type: 'multiplier', stat: 'maxMana', value: 0.20 }, false, 1.5, 5),
|
|
createPerk('mw_t1_l5_b', 'Pure Stream', '+10% Regen', 'B',
|
|
{ type: 'multiplier', stat: 'regen', value: 0.10 }, false, 1.5, 5),
|
|
createPerk('mw_t1_l5_c', 'Spark Gap', '+5% Spell Damage', 'C',
|
|
{ type: 'multiplier', stat: 'spellDamage', value: 0.05 }, false, 1.5, 5),
|
|
],
|
|
// L10 Perks (Choose 1 of 3)
|
|
l10Perks: [
|
|
createPerk('mw_t1_l10_a', 'Expanded Volume', '+30% Max Mana', 'A',
|
|
{ type: 'multiplier', stat: 'maxMana', value: 0.30 }, false, 2.0, 10),
|
|
createPerk('mw_t1_l10_b', 'Rapid Flow', '+15% Regen', 'B',
|
|
{ type: 'multiplier', stat: 'regen', value: 0.15 }, false, 2.0, 10),
|
|
createPerk('mw_t1_l10_c', 'Overcharge', '+10% Spell Damage', 'C',
|
|
{ type: 'multiplier', stat: 'spellDamage', value: 0.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: 0.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)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── QUICK LEARNER TALENT TREE ─────────────────────────────────────────────────
|
|
// Base: Increases Study Speed
|
|
// Paths: A = The Scholar (Study Speed), B = The Strategist (Efficiency), C = The Genius (Instant/Chance)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── ELEM ATTUNEMENT TALENT TREE ──────────────────────────────────────────────
|
|
// Base: Increases Elemental Mana Capacity
|
|
// Paths: A = The Conduit (Capacity), B = The Purifier (Efficiency), C = The Catalyst (Bonus Effects)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── MANA OVERFLOW TALENT TREE ───────────────────────────────────────────────
|
|
// Base: Increases Mana from Clicks
|
|
// Paths: A = The Basin (Capacity), B = The Fountain (Regen), C = The Battery (Spell Damage)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── 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)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── KNOWLEDGE RETENTION TALENT TREE ──────────────────────────────────────────
|
|
// Base: Study Progress Saved on Cancel
|
|
// Paths: A = The Scholar (Retention), B = The Scribe (Efficiency), C = The Archivist (Bonus Effects)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── ENCHANTING TALENT TREE ────────────────────────────────────────────────────
|
|
// Base: Unlocks Enchantment Design
|
|
// Paths: A = The Artisan (Enchantment Power), B = The Engineer (Capacity/Efficiency), C = The Magus (Special Effects)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── EFFICIENT ENCHANT TALENT TREE ────────────────────────────────────────────
|
|
// Base: Reduces Enchantment Capacity Cost
|
|
// Paths: A = The Thrifty (Cost Reduction), B = The Swift (Speed), C = The Efficient (Bonus Effects)
|
|
|
|
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 ────────────────────────────────────────────────
|
|
// Base: Recover Mana from Removed Enchantments
|
|
// Paths: A = The Reclaimer (Mana Recovery), B = The Salvager (Efficiency), C = The Transmuter (Bonus Effects)
|
|
|
|
const DISENCHANTING_TIERS: SkillTierDef[] = [
|
|
// TIER 1
|
|
{
|
|
tier: 1,
|
|
skillId: 'disenchanting',
|
|
name: 'Disenchanting',
|
|
multiplier: 1,
|
|
l5Perks: [
|
|
createPerk('de_t1_l5_a', 'Reclaimer', '+15% Mana Recovery', 'A',
|
|
{ type: 'multiplier', stat: 'disenchantRecovery', value: 0.15 }, false, 1.5, 5),
|
|
createPerk('de_t1_l5_b', 'Swift Salvage', '-10% Disenchant Time', 'B',
|
|
{ type: 'multiplier', stat: 'disenchantTime', value: -0.10 }, false, 1.5, 5),
|
|
createPerk('de_t1_l5_c', 'Efficient Return', '+5% Enchantment Power', 'C',
|
|
{ type: 'multiplier', stat: 'enchantPower', value: 0.05 }, false, 1.5, 5),
|
|
],
|
|
l10Perks: [
|
|
createPerk('de_t1_l10_a', 'Greater Reclaimer', '+20% Mana Recovery', 'A',
|
|
{ type: 'multiplier', stat: 'disenchantRecovery', value: 0.20 }, false, 2.0, 10),
|
|
createPerk('de_t1_l10_b', 'Rapid Salvage', '-15% Disenchant Time', 'B',
|
|
{ type: 'multiplier', stat: 'disenchantTime', value: -0.15 }, false, 2.0, 10),
|
|
createPerk('de_t1_l10_c', 'Superior Return', '+10% Enchantment Power', 'C',
|
|
{ type: 'multiplier', stat: 'enchantPower', value: 0.10 }, false, 2.0, 10),
|
|
],
|
|
},
|
|
// TIER 2
|
|
{
|
|
tier: 2,
|
|
skillId: 'disenchanting_t2',
|
|
name: 'Greater Disenchanting',
|
|
multiplier: 10,
|
|
l5Perks: [
|
|
createPerk('de_t2_l5_a', 'Master Reclaimer', '+25% Mana Recovery', 'A',
|
|
{ type: 'multiplier', stat: 'disenchantRecovery', value: 0.25 }, false, 2.0, 5),
|
|
createPerk('de_t2_l5_b', 'Expert Salvage', '-20% Disenchant Time', 'B',
|
|
{ type: 'multiplier', stat: 'disenchantTime', value: -0.20 }, false, 2.0, 5),
|
|
createPerk('de_t2_l5_c', 'Transmute Power', '+15% Enchantment Power', 'C',
|
|
{ type: 'multiplier', stat: 'enchantPower', value: 0.15 }, false, 2.0, 5),
|
|
],
|
|
l10Perks: [
|
|
createPerk('de_t2_l10_a', 'Ultimate Reclaimer', '+30% Mana Recovery', 'A',
|
|
{ type: 'multiplier', stat: 'disenchantRecovery', value: 0.30 }, false, 2.5, 10),
|
|
createPerk('de_t2_l10_b', 'Lightning Salvage', '-25% Disenchant Time', 'B',
|
|
{ type: 'multiplier', stat: 'disenchantTime', value: -0.25 }, false, 2.5, 10),
|
|
createPerk('de_t2_l10_c', 'Divine Transmute', '+20% Enchantment Power', 'C',
|
|
{ type: 'multiplier', stat: 'enchantPower', value: 0.20 }, false, 2.5, 10),
|
|
],
|
|
},
|
|
// TIER 3
|
|
{
|
|
tier: 3,
|
|
skillId: 'disenchanting_t3',
|
|
name: 'Perfect Disenchanting',
|
|
multiplier: 100,
|
|
l5Perks: [
|
|
createPerk('de_t3_l5_a', 'Cosmic Reclaimer', '+40% Mana Recovery', 'A',
|
|
{ type: 'multiplier', stat: 'disenchantRecovery', value: 0.40 }, false, 3.0, 5),
|
|
createPerk('de_t3_l5_b', 'Instant Salvage', '-30% Disenchant Time', 'B',
|
|
{ type: 'multiplier', stat: 'disenchantTime', value: -0.30 }, false, 3.0, 5),
|
|
createPerk('de_t3_l5_c', 'Transcendent Transmute', '+25% Enchantment Power', 'C',
|
|
{ type: 'multiplier', stat: 'enchantPower', value: 0.25 }, false, 3.0, 5),
|
|
],
|
|
l10Perks: [
|
|
createPerk('de_t3_l10_a', '[ELITE] OMNI-RECLAIMER', 'Mana Recovery is 50%', 'A',
|
|
{ type: 'special', specialId: 'omniReclaimer', specialDesc: '50% mana recovery' }, true, 5.0, 10),
|
|
createPerk('de_t3_l10_b', '[ELITE] OMNI-SALVAGE', 'Disenchant Time is halved', 'B',
|
|
{ type: 'special', specialId: 'omniSalvage', specialDesc: '50% less time' }, true, 5.0, 10),
|
|
createPerk('de_t3_l10_c', '[ELITE] OMNI-TRANSMUTE', 'Enchantment Power is 2x', 'C',
|
|
{ type: 'special', specialId: 'omniTransmute', specialDesc: '2x enchantment power' }, true, 5.0, 10),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── ENCHANT SPEED TALENT TREE ────────────────────────────────────────────────
|
|
// Base: Reduces Enchantment Time
|
|
// Paths: A = The Swift (Speed), B = The Efficient (Capacity), C = The Rapid (Bonus Effects)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── 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)
|
|
|
|
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)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── Additional Skill Tier Definitions ─────────────────────────────────────────
|
|
|
|
// MANA TAP
|
|
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
|
|
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
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// INSIGHT HARVEST
|
|
const INSIGHT_HARVEST_TIERS: SkillTierDef[] = [
|
|
{
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// GUARDIAN BANE
|
|
const GUARDIAN_BANE_TIERS: SkillTierDef[] = [
|
|
{
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── 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)
|
|
|
|
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)
|
|
|
|
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)
|
|
|
|
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),
|
|
],
|
|
},
|
|
];
|
|
|
|
// ─── Export Skill Evolution Paths ─────────────────────────────────────────────
|
|
export const SKILL_EVOLUTION_PATHS: Record<string, SkillEvolutionPath> = {
|
|
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,
|
|
},
|
|
enchanting: {
|
|
baseSkillId: 'enchanting',
|
|
tiers: ENCHANTING_TIERS,
|
|
},
|
|
efficientEnchant: {
|
|
baseSkillId: 'efficientEnchant',
|
|
tiers: EFFICIENT_ENCHANT_TIERS,
|
|
},
|
|
disenchanting: {
|
|
baseSkillId: 'disenchanting',
|
|
tiers: DISENCHANTING_TIERS,
|
|
},
|
|
enchantSpeed: {
|
|
baseSkillId: 'enchantSpeed',
|
|
tiers: ENCHANT_SPEED_TIERS,
|
|
},
|
|
invocation: {
|
|
baseSkillId: 'invocation',
|
|
tiers: INVOCATION_TIERS,
|
|
},
|
|
pactMastery: {
|
|
baseSkillId: 'pactMastery',
|
|
tiers: PACT_MASTERY_TIERS,
|
|
},
|
|
manaTap: {
|
|
baseSkillId: 'manaTap',
|
|
tiers: MANA_TAP_TIERS,
|
|
},
|
|
manaSurge: {
|
|
baseSkillId: 'manaSurge',
|
|
tiers: MANA_SURGE_TIERS,
|
|
},
|
|
manaSpring: {
|
|
baseSkillId: 'manaSpring',
|
|
tiers: MANA_SPRING_TIERS,
|
|
},
|
|
insightHarvest: {
|
|
baseSkillId: 'insightHarvest',
|
|
tiers: INSIGHT_HARVEST_TIERS,
|
|
},
|
|
guardianBane: {
|
|
baseSkillId: 'guardianBane',
|
|
tiers: GUARDIAN_BANE_TIERS,
|
|
},
|
|
// Hybrid Skills (require 2 attunements at level 5+)
|
|
pactWeaving: {
|
|
baseSkillId: 'pactWeaving',
|
|
tiers: PACT_WEAVING_TIERS,
|
|
},
|
|
guardianConstructs: {
|
|
baseSkillId: 'guardianConstructs',
|
|
tiers: GUARDIAN_CONSTRUCTS_TIERS,
|
|
},
|
|
enchantedGolemancy: {
|
|
baseSkillId: 'enchantedGolemancy',
|
|
tiers: ENCHANTED_GOLEMANCY_TIERS,
|
|
},
|
|
};
|
|
|
|
// ─── Helper Functions ─────────────────────────────────────────────────────────
|
|
|
|
// Get all perks for a specific tier and milestone
|
|
export function getTierPerks(tier: SkillTierDef, milestone: 5 | 10): SkillPerkChoice[] {
|
|
return milestone === 5 ? tier.l5Perks : tier.l10Perks;
|
|
}
|
|
|
|
// Get all perks for a specific path across all tiers
|
|
export function getPathPerks(path: 'A' | 'B' | 'C', evolutionPath: SkillEvolutionPath): SkillPerkChoice[] {
|
|
const perks: SkillPerkChoice[] = [];
|
|
for (const tier of evolutionPath.tiers) {
|
|
perks.push(...tier.l5Perks.filter(p => p.path === path));
|
|
perks.push(...tier.l10Perks.filter(p => p.path === path));
|
|
}
|
|
return perks;
|
|
}
|
|
|
|
// Check if a perk is an Elite perk
|
|
export function isElitePerk(perk: SkillPerkChoice): boolean {
|
|
return perk.isElite === true;
|
|
}
|
|
|
|
// Get the tiers for a skill
|
|
export function getSkillTiers(skillId: string): SkillTierDef[] | undefined {
|
|
const path = SKILL_EVOLUTION_PATHS[skillId];
|
|
return path?.tiers;
|
|
}
|
|
|
|
// Get a specific tier for a skill
|
|
export function getSkillTier(skillId: string, tierNumber: number): SkillTierDef | undefined {
|
|
const tiers = getSkillTiers(skillId);
|
|
return tiers?.find(t => t.tier === tierNumber);
|
|
}
|
|
|
|
// Get available perks for a skill at a specific tier and milestone
|
|
export function getAvailablePerks(
|
|
skillId: string,
|
|
tier: number,
|
|
milestone: 5 | 10,
|
|
chosenPerkIds: string[]
|
|
): SkillPerkChoice[] {
|
|
const tierDef = getSkillTier(skillId, tier);
|
|
if (!tierDef) return [];
|
|
|
|
const allPerks = getTierPerks(tierDef, milestone);
|
|
|
|
// Filter out already chosen perks for this milestone
|
|
return allPerks.filter(p => !chosenPerkIds.includes(p.id));
|
|
}
|
|
|
|
// Calculate path compounding bonus
|
|
export function getPathCompoundBonus(
|
|
skillId: string,
|
|
path: 'A' | 'B' | 'C',
|
|
chosenPerkIds: string[]
|
|
): number {
|
|
const pathPerks = getPathPerks(path, SKILL_EVOLUTION_PATHS[skillId]);
|
|
let totalBonus = 1.0;
|
|
|
|
for (const perk of pathPerks) {
|
|
if (chosenPerkIds.includes(perk.id) && perk.pathCompoundBonus) {
|
|
totalBonus *= perk.pathCompoundBonus;
|
|
}
|
|
}
|
|
|
|
return totalBonus;
|
|
}
|
|
|
|
// ─── Missing Functions Expected by Tests ──────────────────────────────────────
|
|
|
|
// Get base skill ID from a tiered skill ID
|
|
export function getBaseSkillId(skillId: string): string {
|
|
if (skillId.includes('_t')) {
|
|
return skillId.split('_t')[0];
|
|
}
|
|
return skillId;
|
|
}
|
|
|
|
// Get tier multiplier for a skill
|
|
export function getTierMultiplier(skillId: string): number {
|
|
const path = SKILL_EVOLUTION_PATHS[getBaseSkillId(skillId)];
|
|
if (!path) return 0;
|
|
|
|
if (skillId.includes('_t')) {
|
|
const tierMatch = skillId.match(/_t(\d+)$/);
|
|
if (tierMatch) {
|
|
const tierNum = parseInt(tierMatch[1], 10);
|
|
const tier = path.tiers.find(t => t.tier === tierNum);
|
|
return tier?.multiplier || 0;
|
|
}
|
|
}
|
|
|
|
// Base skill (tier 1)
|
|
return 1;
|
|
}
|
|
|
|
// Get the next tier skill ID
|
|
export function getNextTierSkill(skillId: string): string | null {
|
|
const baseId = getBaseSkillId(skillId);
|
|
const path = SKILL_EVOLUTION_PATHS[baseId];
|
|
if (!path) return null;
|
|
|
|
let currentTier = 1;
|
|
if (skillId.includes('_t')) {
|
|
const tierMatch = skillId.match(/_t(\d+)$/);
|
|
if (tierMatch) {
|
|
currentTier = parseInt(tierMatch[1], 10);
|
|
}
|
|
}
|
|
|
|
const nextTier = currentTier + 1;
|
|
const nextTierDef = path.tiers.find(t => t.tier === nextTier);
|
|
|
|
if (!nextTierDef) return null;
|
|
return nextTierDef.skillId;
|
|
}
|
|
|
|
// Generate tier skill definition (for test compatibility)
|
|
export function generateTierSkillDef(skillId: string, tier: number): SkillTierDef | null {
|
|
const baseId = getBaseSkillId(skillId);
|
|
const path = SKILL_EVOLUTION_PATHS[baseId];
|
|
if (!path) return null;
|
|
|
|
const tierDef = path.tiers.find(t => t.tier === tier);
|
|
return tierDef || null;
|
|
}
|
|
|
|
// Get upgrades for a skill at a specific milestone
|
|
export function getUpgradesForSkillAtMilestone(
|
|
skillId: string,
|
|
milestone: 5 | 10,
|
|
skills: Record<string, number>
|
|
): SkillUpgradeDef[] {
|
|
const baseId = getBaseSkillId(skillId);
|
|
const path = SKILL_EVOLUTION_PATHS[baseId];
|
|
if (!path) return [];
|
|
|
|
const currentTierLevel = skills[baseId] || 1;
|
|
const tierDef = path.tiers.find(t => t.tier === currentTierLevel);
|
|
if (!tierDef) return [];
|
|
|
|
const perks = milestone === 5 ? tierDef.l5Perks : tierDef.l10Perks;
|
|
|
|
return perks.map(perk => ({
|
|
id: perk.id,
|
|
name: perk.name,
|
|
desc: perk.desc,
|
|
skillId: tierDef.skillId,
|
|
milestone,
|
|
effect: perk.effect,
|
|
}));
|
|
}
|
|
|
|
// Get available upgrades (for test compatibility)
|
|
export function getAvailableUpgrades(
|
|
upgrades: SkillUpgradeDef[],
|
|
chosenUpgradeIds: string[],
|
|
milestone: 5 | 10,
|
|
_chosenPerkIds: string[]
|
|
): SkillUpgradeDef[] {
|
|
return upgrades.filter(u =>
|
|
u.milestone === milestone && !chosenUpgradeIds.includes(u.id)
|
|
);
|
|
}
|
|
|
|
// Check if a skill can tier up
|
|
export interface CanTierUpResult {
|
|
canTierUp: boolean;
|
|
reason?: string;
|
|
}
|
|
|
|
export function canTierUp(
|
|
skillId: string,
|
|
currentLevel: number,
|
|
skills: Record<string, number>,
|
|
attunements: Record<string, { level: number; active: boolean }>
|
|
): CanTierUpResult {
|
|
const baseId = getBaseSkillId(skillId);
|
|
const path = SKILL_EVOLUTION_PATHS[baseId];
|
|
|
|
if (!path) {
|
|
return { canTierUp: false, reason: 'No evolution path' };
|
|
}
|
|
|
|
// Check if at max level (10)
|
|
if (currentLevel < 10) {
|
|
return { canTierUp: false, reason: 'Need level 10 to tier up' };
|
|
}
|
|
|
|
// Check if already at max tier
|
|
const currentTierLevel = skills[baseId] || 1;
|
|
const nextTierId = getNextTierSkill(skillId);
|
|
|
|
if (!nextTierId) {
|
|
return { canTierUp: false, reason: 'Already at max tier' };
|
|
}
|
|
|
|
// Check attunement requirement (placeholder - would need actual attunement check)
|
|
// For now, assume attunement is available
|
|
|
|
return { canTierUp: true };
|
|
}
|
|
|
|
// ─── Add upgrades property to tiers for test compatibility ────────────────────
|
|
// This makes tier.upgrades work in tests by combining l5Perks and l10Perks
|
|
for (const path of Object.values(SKILL_EVOLUTION_PATHS)) {
|
|
for (const tier of path.tiers) {
|
|
(tier as any).upgrades = [
|
|
...tier.l5Perks.map(p => ({ ...p, milestone: 5 })),
|
|
...tier.l10Perks.map(p => ({ ...p, milestone: 10 })),
|
|
];
|
|
}
|
|
}
|