feat: implement Active Disciplines system
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 31s

This commit is contained in:
2026-05-16 19:17:12 +02:00
parent c8341f79f3
commit e462bfcc13
17 changed files with 992 additions and 100 deletions
@@ -0,0 +1,34 @@
type DisciplineDefinition = {
name: string;
attunement: DisciplinesAttunementType;
manaType: ManaType;
baseCost: number;
description: string;
requires?: DisciplineDefinition[];
};
enum DisciplinesAttunementType {
base,
enchanter,
fabricator,
invoker
};
export const baseDisciplines: DisciplineDefinition[] = [
{
name: "Embercraft",
attunement: DisciplinesAttunementType.base,
manaType: "fire",
baseCost: 10,
description: "Basic flame projection with autocrit on combustion explosion",
requires: []
},
{
name: "Earthbind",
attunement: DisciplinesAttunementType.base,
manaType: "earth",
baseCost: 12,
description: "Basic mana chains with passive ground stability",
requires: []
}
];
+56
View File
@@ -0,0 +1,56 @@
// ─── Base Disciplines ─────────────────────────────────────────────────────────
// Disciplines available to all attunements
import type { DisciplineDefinition } from '../../types/disciplines';
export const baseDisciplines: DisciplineDefinition[] = [
{
id: 'raw-mastery',
name: 'Raw Mana Mastery',
attunement: 'base',
manaType: 'raw',
baseCost: 5,
description: 'Learn to harness raw mana more efficiently.',
statBonus: { stat: 'maxManaBonus', baseValue: 10 },
difficultyFactor: 100,
scalingFactor: 50,
drainBase: 1,
perks: [
{
id: 'raw-mastery-1',
type: 'once',
threshold: 100,
value: 0,
description: '+50 Max Mana',
},
{
id: 'raw-mastery-2',
type: 'infinite',
threshold: 500,
value: 100,
description: 'Every 100 XP: +25 Max Mana',
},
],
},
{
id: 'elemental-attunement',
name: 'Elemental Attunement',
attunement: 'base',
manaType: 'fire',
baseCost: 10,
description: 'Begin focusing raw mana into fire.',
statBonus: { stat: 'elementCap_fire', baseValue: 5 },
difficultyFactor: 150,
scalingFactor: 75,
drainBase: 2,
perks: [
{
id: 'elem-attunement-1',
type: 'once',
threshold: 200,
value: 0,
description: '+10 Fire Capacity',
},
],
},
];
@@ -0,0 +1,34 @@
type DisciplineDefinition = {
name: string;
attunement: DisciplinesAttunementType;
manaType: ManaType;
baseCost: number;
description: string;
requires?: DisciplineDefinition[];
};
enum DisciplinesAttunementType {
base,
enchanter,
fabricator,
invoker
};
export const enchanterDisciplines: DisciplineDefinition[] = [
{
name: "Soulforge",
attunement: DisciplinesAttunementType.enchanter,
manaType: "light",
baseCost: 25,
description: "Mana chains that create permanent elemental storage nodes",
requires: [{name: "Embercraft"}]
},
{
name: "Mana Prism",
attunement: DisciplinesAttunementType.enchanter,
manaType: "light",
baseCost: 30,
description: "Prismatic mana focusing that reflexes attacks as fixed ratio",
requires: [{name: "Soulforge"}]
}
];
@@ -0,0 +1,56 @@
// ─── Enchanter Discipline Files ──────────────────────────────────────────────
// Attunement-focused disciplines for Enchanter role
import type { DisciplineDefinition } from '../../types/disciplines';
export const enchanterDisciplines: DisciplineDefinition[] = [
{
id: 'enchant-crafting',
name: 'Enchantment Crafting',
attunement: 'enchanter',
manaType: 'transference',
baseCost: 8,
description: 'Improve your ability to apply enchantments to equipment.',
statBonus: { stat: 'enchantPower', baseValue: 8 },
difficultyFactor: 120,
scalingFactor: 60,
drainBase: 3,
perks: [
{
id: 'enchant-1',
type: 'infinite',
threshold: 150,
value: 5,
description: '+5 Enchantment Power (stacks with skill tiers)',
},
{
id: 'enchant-2',
type: 'capped',
threshold: 300,
value: 20,
description: 'Double enchantment duration at 300 XP',
},
],
},
{
id: 'mana-channeling',
name: 'Mana Channeling',
attunement: 'enchanter',
manaType: 'lightning',
baseCost: 12,
description: 'Use lightning to transfer mana to equipment.',
statBonus: { stat: 'clickManaMultiplier', baseValue: 0.3 },
difficultyFactor: 180,
scalingFactor: 90,
drainBase: 5,
perks: [
{
id: 'channel-1',
type: 'once',
threshold: 250,
value: 0,
description: 'Unlock lightning mana boosting',
},
],
},
];
@@ -0,0 +1,21 @@
import type { DisciplineDefinition } from '../../types/disciplines';
const fabricatorDisciplines: DisciplineDefinition[] = [
{
name: 'Metalworking',
attunement: 'fabricator',
manaType: 'metal',
baseCosts: { mana: 28, time: 7 },
description: 'Increase metal equipment crafting speed',
thresholds: { xp: 140, interval: 70 }
},
{
name: 'Crystal Shaping',
attunement: 'fabricator',
manaType: 'crystal',
baseCosts: { mana: 30, time: 8 },
description: 'Increase crystal equipment durability',
thresholds: { xp: 160, interval: 80 }
}
];
export default fabricatorDisciplines;
@@ -0,0 +1,56 @@
// ─── Fabricator Discipline Files ──────────────────────────────────────────────
// Attunement-focused disciplines for Fabricator role
import type { DisciplineDefinition } from '../../types/disciplines';
export const fabricatorDisciplines: DisciplineDefinition[] = [
{
id: 'golem-crafting',
name: 'Golem Crafting',
attunement: 'fabricator',
manaType: 'earth',
baseCost: 10,
description: 'Improve your ability to craft and maintain golems.',
statBonus: { stat: 'golemCapacity', baseValue: 2 },
difficultyFactor: 150,
scalingFactor: 80,
drainBase: 4,
perks: [
{
id: 'golem-1',
type: 'once',
threshold: 200,
value: 0,
description: 'Unlock golem summoning',
},
{
id: 'golem-2',
type: 'capped',
threshold: 500,
value: 5,
description: 'Double golem capacity at 500 XP',
},
],
},
{
id: 'crafting-efficiency',
name: 'Crafting Efficiency',
attunement: 'fabricator',
manaType: 'sand',
baseCost: 12,
description: 'Reduce material costs for crafting.',
statBonus: { stat: 'craftingCostReduction', baseValue: 15 },
difficultyFactor: 180,
scalingFactor: 90,
drainBase: 6,
perks: [
{
id: 'efficiency-1',
type: 'once',
threshold: 300,
value: 0,
description: 'Unlock reduced crafting costs',
},
],
},
];
@@ -0,0 +1,21 @@
import type { DisciplineDefinition } from '../../types/disciplines';
const invokerDisciplines: DisciplineDefinition[] = [
{
name: 'Lightning Surge',
attunement: 'invoker',
manaType: 'lightning',
baseCost: 30,
description: 'Boost lightning spell damage',
thresholds: { xp: 150, interval: 75 }
},
{
name: 'Void Echo',
attunement: 'invoker',
manaType: 'void',
baseCost: 35,
description: 'Increase void spell cast speed',
thresholds: { xp: 180, interval: 90 }
}
];
export default invokerDisciplines;
+56
View File
@@ -0,0 +1,56 @@
// ─── Invoker Discipline Files ─────────────────────────────────────────────────
// Attunement-focused disciplines for Invoker role
import type { DisciplineDefinition } from '../../types/disciplines';
export const invokerDisciplines: DisciplineDefinition[] = [
{
id: 'spell-casting',
name: 'Spell Casting',
attunement: 'invoker',
manaType: 'light',
baseCost: 10,
description: 'Improve spell power and effectiveness.',
statBonus: { stat: 'baseDamageBonus', baseValue: 6 },
difficultyFactor: 130,
scalingFactor: 65,
drainBase: 3,
perks: [
{
id: 'spell-1',
type: 'once',
threshold: 200,
value: 0,
description: '+10 Base Damage',
},
{
id: 'spell-2',
type: 'infinite',
threshold: 400,
value: 30,
description: 'Every 300 XP: +5 Base Damage',
},
],
},
{
id: 'void-manipulation',
name: 'Void Manipulation',
attunement: 'invoker',
manaType: 'void',
baseCost: 15,
description: 'Master the exotic void mana for devastating effects.',
statBonus: { stat: 'baseDamageMultiplier', baseValue: 0.15 },
difficultyFactor: 200,
scalingFactor: 100,
drainBase: 7,
perks: [
{
id: 'void-1',
type: 'once',
threshold: 300,
value: 0,
description: 'Unlock void damage multiplier',
},
],
},
];