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
+7 -1
View File
@@ -46,7 +46,7 @@ export interface DisciplineStoreState {
}
export interface DisciplineStoreActions {
activate: (id: string, gameState?: { elements?: Record<string, ElementState> }) => void;
activate: (id: string, gameState?: { elements?: Record<string, ElementState>; signedPacts?: number[] }) => void;
deactivate: (id: string) => void;
processTick: (mana: { rawMana: number; elements: Record<string, ElementState> }) => {
rawMana: number;
@@ -90,6 +90,12 @@ export const useDisciplineStore = create<DisciplineStore>()(
if (nonPaused >= s.concurrentLimit) return s;
if (!canProceedDiscipline(def, existing, gameState)) return s;
// Invoker disciplines require at least one signed guardian pact
if (def.attunement === 'invoker') {
const signedPacts = gameState?.signedPacts || [];
if (signedPacts.length === 0) return s;
}
// Check discipline prerequisites (requires field → discipline XP)
const prereqCheck = checkDisciplinePrerequisites(def, s.disciplines, ALL_DISCIPLINES);
if (!prereqCheck.canProceed) return s;