refactor: Redesign Invoker disciplines for pact bonuses and guardian boons
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m21s

- Replace generic spell-casting/void-manipulation with pact-focused disciplines
- Add Pact Attunement (light): reduces pact signing time, boosts pact affinity
- Add Guardian's Boon (dark): amplifies all guardian unique perks
- Add pactAffinityBonus and guardianBoonMultiplier stat keys to effect system
- Apply pactAffinityBonus in pact signing time calculation (gameStore)
- Scale guardian boon values by guardianBoonMultiplier (combat-utils)
- Guard Invoker discipline activation behind signedPacts.length > 0
- Add 'Signed guardian pact' prerequisite display in discipline-math
This commit is contained in:
2026-05-26 21:43:46 +02:00
parent 02600754e7
commit 1aea72c013
10 changed files with 108 additions and 50 deletions
+17 -13
View File
@@ -71,7 +71,10 @@ export interface BoonBonuses {
}
// Helper to calculate total boon bonuses from signed pacts
export function getBoonBonuses(signedPacts: number[]): BoonBonuses {
export function getBoonBonuses(
signedPacts: number[],
guardianBoonMultiplier: number = 1.0,
): BoonBonuses {
const bonuses: BoonBonuses = {
maxMana: 0,
manaRegen: 0,
@@ -92,42 +95,43 @@ export function getBoonBonuses(signedPacts: number[]): BoonBonuses {
if (!guardian) continue;
for (const boon of guardian.boons) {
let value = boon.value * guardianBoonMultiplier;
switch (boon.type) {
case 'maxMana':
bonuses.maxMana += boon.value;
bonuses.maxMana += value;
break;
case 'manaRegen':
bonuses.manaRegen += boon.value;
bonuses.manaRegen += value;
break;
case 'castingSpeed':
bonuses.castingSpeed += boon.value;
bonuses.castingSpeed += value;
break;
case 'elementalDamage':
bonuses.elementalDamage += boon.value;
bonuses.elementalDamage += value;
break;
case 'rawDamage':
bonuses.rawDamage += boon.value;
bonuses.rawDamage += value;
break;
case 'critChance':
bonuses.critChance += boon.value;
bonuses.critChance += value;
break;
case 'critDamage':
bonuses.critDamage += boon.value;
bonuses.critDamage += value;
break;
case 'spellEfficiency':
bonuses.spellEfficiency += boon.value;
bonuses.spellEfficiency += value;
break;
case 'manaGain':
bonuses.manaGain += boon.value;
bonuses.manaGain += value;
break;
case 'insightGain':
bonuses.insightGain += boon.value;
bonuses.insightGain += value;
break;
case 'studySpeed':
bonuses.studySpeed += boon.value;
bonuses.studySpeed += value;
break;
case 'prestigeInsight':
bonuses.prestigeInsight += boon.value;
bonuses.prestigeInsight += value;
break;
}
}