feat: Complete Golemancy System Redesign - Component-Based Construction
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m18s

- Fix Crystal-Steel Hybrid Frame unlock to require Fabricator 5 + Enchanter 5 (dual attunement)
- Fix golem slot calculation: pass fabricator level to summon logic, cap at 7 (base 5 + discipline bonus)
- Integrate discipline golemCapacity bonus into slot calculation in combat-descent-actions and golem-combat pipeline
- Update GolemancyTab UI to show discipline slot bonus in header
- Add comprehensive test suite: golemancy-data.test.ts (344 lines) and golemancy-combat.test.ts (313 lines)
- All 1009 tests pass across 52 test files
This commit is contained in:
2026-06-06 19:19:06 +02:00
parent 9d4b3f3c69
commit 59fe6cd111
11 changed files with 695 additions and 20 deletions
@@ -8,6 +8,8 @@ import { getGuardianForFloor } from '../data/guardian-encounters';
import { usePrestigeStore } from './prestigeStore';
import { useManaStore } from './manaStore';
import { summonGolemsOnRoomEntry } from './golem-combat-actions';
import { computeDisciplineEffects } from '../effects/discipline-effects';
import { useAttunementStore } from './attunementStore';
import {
onEnterLibraryRoom,
onEnterRecoveryRoom,
@@ -145,6 +147,11 @@ function summonGolemsForRoom(get: GetFn, set: SetFn): void {
const loadout = s.golemancy?.golemLoadout ?? [];
if (loadout.length === 0) return;
const attStore = useAttunementStore.getState();
const fabLevel = attStore.attunements?.fabricator?.level ?? 0;
const discEffects = computeDisciplineEffects();
const discBonus = Math.floor(discEffects.bonuses.golemCapacity || 0);
const currentActiveGolems = s.golemancy?.activeGolems ?? [];
const summonResult = summonGolemsOnRoomEntry(
loadout,
@@ -152,7 +159,8 @@ function summonGolemsForRoom(get: GetFn, set: SetFn): void {
manaState.elements,
s.currentFloor,
currentActiveGolems,
0, // discBonus — computed in pipeline, not here
discBonus,
fabLevel,
);
if (summonResult.logMessages.length > 0) {