refactor: resolve structural inconsistencies and dead code
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 55s

- Fix broken barrel exports in components/game/index.ts
- Remove skill system from stores (gameStore, gameActions, gameLoopActions, gameHooks, craftingStore, combat)
- Remove skill system from components (page.tsx, LeftPanel, StatsTab, SpellsTab, EnchantmentDesigner, EnchantmentPreparer, GameContext/Provider)
- Delete dead code: stats/ directory, attunements/ directory, layout/ Header+TabBar, shared/ StudyProgress+UpgradeDialog duplicates, effects.ts.fix, study-slice.ts, navigation-slice.ts
- Delete legacy store/ and store-modules/ directories, redirect remaining callers
- Merge root formatting.ts into utils/formatting.ts
- Move effects files (dynamic-compute, upgrade-effects, special-effects, upgrade-effects.types) into effects/ directory
- Move debug-context.tsx into components/game/debug/
- Create tabs/index.ts barrel for tab components
- Fix page.tsx lazy imports to use tabs barrel
- Fix all broken import paths across codebase
- Remove SKILLS_DEF and skill-evolution references
- Trim store.ts to under 400 lines by removing dead skill actions
This commit is contained in:
2026-05-18 14:21:59 +02:00
parent 2805f75f5e
commit ca86b6268c
57 changed files with 405 additions and 3726 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
// ─── Mana & Regen Utilities ──────────────────────────────────────────────────
import type { GameState } from '../types';
import type { ComputedEffects } from '../upgrade-effects.types';
import type { ComputedEffects } from '../effects/upgrade-effects.types';
import { HOURS_PER_TICK } from '../constants';
import { getTotalAttunementRegen, getTotalAttunementConversionDrain } from '../data/attunements';
+67
View File
@@ -0,0 +1,67 @@
// ─── Pact Utility Functions ───────────────────────────────────────────────────
import { GUARDIANS } from '../constants';
export function computePactMultiplier(state: {
signedPacts: number[];
pactInterferenceMitigation?: number;
}): number {
const { signedPacts, pactInterferenceMitigation = 0 } = state;
if (signedPacts.length === 0) return 1.0;
let baseMult = 1.0;
for (const floor of signedPacts) {
const guardian = GUARDIANS[floor];
if (guardian) {
baseMult *= guardian.damageMultiplier;
}
}
if (signedPacts.length === 1) return baseMult;
const numAdditionalPacts = signedPacts.length - 1;
const basePenalty = 0.5 * numAdditionalPacts;
const mitigationReduction = Math.min(pactInterferenceMitigation, 5) * 0.1;
const effectivePenalty = Math.max(0, basePenalty - mitigationReduction);
if (pactInterferenceMitigation >= 5) {
const synergyBonus = (pactInterferenceMitigation - 5) * 0.1;
return baseMult * (1 + synergyBonus);
}
return baseMult * (1 - effectivePenalty);
}
export function computePactInsightMultiplier(state: {
signedPacts: number[];
pactInterferenceMitigation?: number;
}): number {
const { signedPacts, pactInterferenceMitigation = 0 } = state;
if (signedPacts.length === 0) return 1.0;
let mult = 1.0;
for (const floor of signedPacts) {
const guardian = GUARDIANS[floor];
if (guardian) {
mult *= guardian.insightMultiplier;
}
}
if (signedPacts.length > 1) {
const numAdditionalPacts = signedPacts.length - 1;
const basePenalty = 0.5 * numAdditionalPacts;
const mitigationReduction = Math.min(pactInterferenceMitigation, 5) * 0.1;
const effectivePenalty = Math.max(0, basePenalty - mitigationReduction);
if (pactInterferenceMitigation >= 5) {
const synergyBonus = (pactInterferenceMitigation - 5) * 0.1;
return mult * (1 + synergyBonus);
}
return mult * (1 - effectivePenalty);
}
return mult;
}