// ─── Elemental Conversion Disciplines (Composite + Exotic) ────────────────────── // Conversion disciplines for composite and exotic mana types. // All are BASE attunement so they are available to every role once the element is unlocked. import { DisciplinesAttunementType } from '../../types/disciplines'; import type { DisciplineDefinition } from '../../types/disciplines'; interface AdvancedConversionConfig { id: string; name: string; manaType: DisciplineDefinition['manaType']; cost: number; description: string; conversionRate: number; difficultyFactor: number; scalingFactor: number; drainBase: number; sourceManaTypes: DisciplineDefinition['manaType'][]; customOnceDescription?: string; customOnceAmount?: number; customInfiniteDescription?: string; customInfiniteAmount?: number; infiniteThreshold?: number; } function createAdvancedConversionDiscipline(cfg: AdvancedConversionConfig): DisciplineDefinition { const nameLower = cfg.name.toLowerCase(); const onceDesc = cfg.customOnceDescription ?? `+${cfg.conversionRate} ${cfg.name} Conversion/sec`; const onceAmt = cfg.customOnceAmount ?? cfg.conversionRate; const infDesc = cfg.customInfiniteDescription ?? `Every 100 XP: +${cfg.conversionRate * 0.5} ${cfg.name} Conversion/sec`; const infAmt = cfg.customInfiniteAmount ?? cfg.conversionRate * 0.5; const infThreshold = cfg.infiniteThreshold ?? 400; return { id: cfg.id, name: `${cfg.name} Mana Conversion Speed`, attunement: DisciplinesAttunementType.BASE, manaType: cfg.manaType, baseCost: cfg.cost, description: cfg.description, statBonus: { stat: `conversion_${cfg.manaType}` as DisciplineDefinition['statBonus']['stat'], baseValue: cfg.conversionRate, label: `${cfg.name} Conversion/sec`, }, difficultyFactor: cfg.difficultyFactor, scalingFactor: cfg.scalingFactor, drainBase: cfg.drainBase, conversionRate: cfg.conversionRate, sourceManaTypes: cfg.sourceManaTypes, requires: [cfg.manaType], perks: [ { id: `${cfg.id}-1`, type: 'once', threshold: 150, value: 0, description: onceDesc, bonus: { stat: `conversion_${cfg.manaType}`, amount: onceAmt }, }, { id: `${cfg.id}-inf`, type: 'infinite', threshold: infThreshold, value: 100, description: infDesc, bonus: { stat: `conversion_${cfg.manaType}`, amount: infAmt }, }, ], }; } export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [ // ── Composite Elements ───────────────────────────────────────────────────── createAdvancedConversionDiscipline({ id: 'regen-metal', name: 'Metal', manaType: 'metal', cost: 12, description: 'Convert raw mana + fire mana + earth mana into metal mana over time.', conversionRate: 0.35, difficultyFactor: 160, scalingFactor: 80, drainBase: 2, sourceManaTypes: ['raw', 'fire', 'earth'], }), createAdvancedConversionDiscipline({ id: 'regen-sand', name: 'Sand', manaType: 'sand', cost: 12, description: 'Convert raw mana + earth mana + water mana into sand mana over time.', conversionRate: 0.35, difficultyFactor: 160, scalingFactor: 80, drainBase: 2, sourceManaTypes: ['raw', 'earth', 'water'], }), createAdvancedConversionDiscipline({ id: 'regen-lightning', name: 'Lightning', manaType: 'lightning', cost: 12, description: 'Convert raw mana + fire mana + air mana into lightning mana over time.', conversionRate: 0.35, difficultyFactor: 160, scalingFactor: 80, drainBase: 2, sourceManaTypes: ['raw', 'fire', 'air'], }), createAdvancedConversionDiscipline({ id: 'regen-frost', name: 'Frost', manaType: 'frost', cost: 12, description: 'Convert raw mana + air mana + water mana into frost mana over time.', conversionRate: 0.35, difficultyFactor: 160, scalingFactor: 80, drainBase: 2, sourceManaTypes: ['raw', 'air', 'water'], }), createAdvancedConversionDiscipline({ id: 'regen-blackflame', name: 'BlackFlame', manaType: 'blackflame', cost: 14, description: 'Convert raw mana + dark mana + fire mana into blackflame mana over time.', conversionRate: 0.3, difficultyFactor: 170, scalingFactor: 85, drainBase: 2, sourceManaTypes: ['raw', 'dark', 'fire'], }), createAdvancedConversionDiscipline({ id: 'regen-radiantflames', name: 'Radiant Flames', manaType: 'radiantflames', cost: 14, description: 'Convert raw mana + light mana + fire mana into radiant flames mana over time.', conversionRate: 0.3, difficultyFactor: 170, scalingFactor: 85, drainBase: 2, sourceManaTypes: ['raw', 'light', 'fire'], }), createAdvancedConversionDiscipline({ id: 'regen-miasma', name: 'Miasma', manaType: 'miasma', cost: 14, description: 'Convert raw mana + air mana + death mana into miasma mana over time.', conversionRate: 0.3, difficultyFactor: 170, scalingFactor: 85, drainBase: 2, sourceManaTypes: ['raw', 'air', 'death'], }), createAdvancedConversionDiscipline({ id: 'regen-shadowglass', name: 'Shadow Glass', manaType: 'shadowglass', cost: 15, description: 'Convert raw mana + earth mana + dark mana into shadow glass mana over time.', conversionRate: 0.3, difficultyFactor: 175, scalingFactor: 88, drainBase: 2, sourceManaTypes: ['raw', 'earth', 'dark'], }), // ── Exotic Elements ──────────────────────────────────────────────────────── createAdvancedConversionDiscipline({ id: 'regen-crystal', name: 'Crystal', manaType: 'crystal', cost: 18, description: 'Convert raw mana + sand mana + light mana into crystal mana over time.', conversionRate: 0.25, difficultyFactor: 220, scalingFactor: 110, drainBase: 3, sourceManaTypes: ['raw', 'sand', 'light'], infiniteThreshold: 500, }), createAdvancedConversionDiscipline({ id: 'regen-stellar', name: 'Stellar', manaType: 'stellar', cost: 20, description: 'Convert raw mana + plasma mana + light mana into stellar mana over time.', conversionRate: 0.2, difficultyFactor: 230, scalingFactor: 115, drainBase: 3, sourceManaTypes: ['raw', 'plasma', 'light'], infiniteThreshold: 500, }), createAdvancedConversionDiscipline({ id: 'regen-void', name: 'Void', manaType: 'void', cost: 18, description: 'Convert raw mana + dark mana + death mana into void mana over time.', conversionRate: 0.25, difficultyFactor: 220, scalingFactor: 110, drainBase: 3, sourceManaTypes: ['raw', 'dark', 'death'], infiniteThreshold: 500, }), createAdvancedConversionDiscipline({ id: 'regen-soul', name: 'Soul', manaType: 'soul', cost: 20, description: 'Convert raw mana + light mana + dark mana + transference mana into soul mana over time.', conversionRate: 0.2, difficultyFactor: 240, scalingFactor: 120, drainBase: 3, sourceManaTypes: ['raw', 'light', 'dark', 'transference'], infiniteThreshold: 550, }), createAdvancedConversionDiscipline({ id: 'regen-plasma', name: 'Plasma', manaType: 'plasma', cost: 20, description: 'Convert raw mana + lightning mana + fire mana + transference mana into plasma mana over time.', conversionRate: 0.2, difficultyFactor: 240, scalingFactor: 120, drainBase: 3, sourceManaTypes: ['raw', 'lightning', 'fire', 'transference'], infiniteThreshold: 550, }), createAdvancedConversionDiscipline({ id: 'regen-time', name: 'Time', manaType: 'time', cost: 22, description: 'Convert raw mana + soul mana + sand mana + transference mana into time mana over time.', conversionRate: 0.15, difficultyFactor: 260, scalingFactor: 130, drainBase: 3, sourceManaTypes: ['raw', 'soul', 'sand', 'transference'], infiniteThreshold: 600, }), ];