refactor: remove skill system leftovers, migrate click mana to discipline perk
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m30s

- Simplified getMeditationBonus() to continuous ramp formula
- Added click-mana capped perk to Mana Circulation discipline
- Removed manaWell/manaFlow/manaSpring skill reads and prestige upgrades
- Removed all skill fields from GameState and GameActionType
- Updated all call sites and tests (916 tests passing)

Closes #174
This commit is contained in:
2026-05-28 11:50:06 +02:00
parent b5996d5b6e
commit 5578721992
22 changed files with 135 additions and 311 deletions
+4 -25
View File
@@ -88,12 +88,10 @@ export interface UnifiedEffects extends ComputedEffects {
}
export function computeAllEffects(
skillUpgrades: Record<string, string[]>,
skillTiers: Record<string, number>,
equipmentInstances: Record<string, EquipmentInstance>,
equippedInstances: Record<string, string | null>,
): UnifiedEffects {
const upgradeEffects = computeEffects(skillUpgrades, skillTiers);
const upgradeEffects = computeEffects();
const equipmentEffects = computeEquipmentEffects(equipmentInstances, equippedInstances, upgradeEffects.enchantmentPowerMultiplier);
const disciplineEffects = computeDisciplineEffects();
@@ -105,9 +103,6 @@ export function computeAllEffects(
}
}
// Per-element regen from discipline effects (regen_{element}) — no longer produced
// by elemental disciplines (they now use conversion instead).
// Kept for backward compatibility with any upgrade effects that may provide per-element regen.
const perElementRegenBonus: Record<string, number> = { ...upgradeEffects.perElementRegenBonus };
// Merge per-element cap bonuses from discipline effects (elementCap_{element})
@@ -158,14 +153,10 @@ export function computeAllEffects(
}
export function getUnifiedEffects(state: {
skillUpgrades?: Record<string, string[]>;
skillTiers?: Record<string, number>;
equipmentInstances?: Record<string, EquipmentInstance>;
equippedInstances?: Record<string, string | null>;
}): UnifiedEffects {
return computeAllEffects(
state.skillUpgrades || {},
state.skillTiers || {},
state.equipmentInstances || {},
state.equippedInstances || {},
);
@@ -175,28 +166,21 @@ export function getUnifiedEffects(state: {
export function computeTotalMaxMana(
state: {
skills?: Record<string, number>;
prestigeUpgrades?: Record<string, number>;
skillUpgrades?: Record<string, string[]>;
skillTiers?: Record<string, number>;
equipmentInstances?: Record<string, EquipmentInstance>;
equippedInstances?: Record<string, string | null>;
},
effects?: UnifiedEffects
): number {
const pu = state.prestigeUpgrades;
const skillMult = effects?.skillLevelMultiplier || 1;
const base = 100 + ((state.skills || {}).manaWell || 0) * 100 * skillMult + ((pu || {}).manaWell || 0) * 500;
const base = 100 + ((pu || {}).manaWell || 0) * 500;
const resolvedEffects = effects || getUnifiedEffects(state);
return Math.floor((base + resolvedEffects.maxManaBonus) * resolvedEffects.maxManaMultiplier);
}
export function computeTotalRegen(
state: {
skills?: Record<string, number>;
prestigeUpgrades?: Record<string, number>;
skillUpgrades?: Record<string, string[]>;
skillTiers?: Record<string, number>;
equipmentInstances?: Record<string, EquipmentInstance>;
equippedInstances?: Record<string, string | null>;
},
@@ -204,8 +188,7 @@ export function computeTotalRegen(
): number {
const pu = state.prestigeUpgrades;
const temporalBonus = 1 + ((pu?.temporalEcho || 0)) * 0.1;
const skillMult = effects?.skillLevelMultiplier || 1;
const base = 2 + (state.skills?.manaFlow || 0) * 1 * skillMult + (state.skills?.manaSpring || 0) * 2 * skillMult + (pu?.manaFlow || 0) * 0.5;
const base = 2 + (pu?.manaFlow || 0) * 0.5;
let regen = base * temporalBonus;
const resolvedEffects = effects || getUnifiedEffects(state);
regen = (regen + resolvedEffects.regenBonus + resolvedEffects.permanentRegenBonus) * resolvedEffects.regenMultiplier;
@@ -214,16 +197,12 @@ export function computeTotalRegen(
export function computeTotalClickMana(
state: {
skills?: Record<string, number>;
skillUpgrades?: Record<string, string[]>;
skillTiers?: Record<string, number>;
equipmentInstances?: Record<string, EquipmentInstance>;
equippedInstances?: Record<string, string | null>;
},
effects?: UnifiedEffects
): number {
const skillMult = effects?.skillLevelMultiplier || 1;
const base = 1 + (state.skills?.manaTap || 0) * 1 * skillMult + (state.skills?.manaSurge || 0) * 3 * skillMult;
const base = 1;
const resolvedEffects = effects || getUnifiedEffects(state);
return Math.floor((base + resolvedEffects.clickManaBonus) * resolvedEffects.clickManaMultiplier);
}