feat: implement golemancy combat system (spec §6, §9)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m19s

- Add ActiveGolem interface and activeGolems to GolemancyState
- Add maxRoomDuration to all 12 golem definitions
- Create golem-combat-actions.ts with pure golem combat logic (summoning, maintenance, attacks, room-duration)
- Create golem-combat.ts pipeline for golem combat setup
- Wire golem maintenance and attacks into processCombatTick
- Wire golem summoning into advanceRoomOrFloor on room entry
- Wire golem room-duration countdown into onFloorCleared callback
- Update combat-actions tests for new processCombatTick signature
- All 921 tests pass, all files under 400-line limit

Closes #259
This commit is contained in:
2026-06-03 15:40:39 +02:00
parent 7c0e740226
commit a2cdf6d21c
20 changed files with 583 additions and 41 deletions
+1
View File
@@ -26,5 +26,6 @@ export const BASE_GOLEMS: Record<string, GolemDef> = {
level: 2,
},
tier: 1,
maxRoomDuration: 3,
},
};
@@ -25,6 +25,7 @@ export const ELEMENTAL_GOLEMS: Record<string, GolemDef> = {
manaType: 'metal',
},
tier: 2,
maxRoomDuration: 3,
},
// Crystal Golem - Crystal mana variant
@@ -46,6 +47,7 @@ export const ELEMENTAL_GOLEMS: Record<string, GolemDef> = {
manaType: 'crystal',
},
tier: 3,
maxRoomDuration: 4,
},
// Sand Golem - Sand mana variant
@@ -67,6 +69,7 @@ export const ELEMENTAL_GOLEMS: Record<string, GolemDef> = {
manaType: 'sand',
},
tier: 2,
maxRoomDuration: 3,
specialAbilities: [
{ name: 'Sandstorm', description: 'Hits multiple enemies (AoE)' },
],
@@ -25,6 +25,7 @@ export const HYBRID_GOLEMS: Record<string, GolemDef> = {
levels: [5, 5],
},
tier: 3,
maxRoomDuration: 4,
specialAbilities: [
{ name: 'Burn', description: 'Burns enemies over time (DoT)' },
],
@@ -50,6 +51,7 @@ export const HYBRID_GOLEMS: Record<string, GolemDef> = {
levels: [5, 5],
},
tier: 3,
maxRoomDuration: 4,
specialAbilities: [
{ name: 'Lightning Speed', description: 'Extremely fast attacks bonus' },
],
@@ -75,6 +77,7 @@ export const HYBRID_GOLEMS: Record<string, GolemDef> = {
levels: [5, 5],
},
tier: 4,
maxRoomDuration: 5,
specialAbilities: [
{ name: 'Devastating Strike', description: 'Devastating single-target damage' },
],
@@ -100,6 +103,7 @@ export const HYBRID_GOLEMS: Record<string, GolemDef> = {
levels: [5, 5],
},
tier: 4,
maxRoomDuration: 5,
specialAbilities: [
{ name: 'Piercing Beams', description: 'Channels light into piercing beams' },
],
@@ -125,6 +129,7 @@ export const HYBRID_GOLEMS: Record<string, GolemDef> = {
levels: [5, 5],
},
tier: 3,
maxRoomDuration: 4,
specialAbilities: [
{ name: 'Flow', description: 'Flows around defenses, fast & hard to dodge' },
],
@@ -150,6 +155,7 @@ export const HYBRID_GOLEMS: Record<string, GolemDef> = {
levels: [5, 5],
},
tier: 4,
maxRoomDuration: 5,
specialAbilities: [
{ name: 'Void Infusion', description: 'Earth infused with void energy' },
],
+1
View File
@@ -39,5 +39,6 @@ export interface GolemDef {
levels?: number[];
};
tier: number; // Power tier (1-4)
maxRoomDuration: number; // Rooms before golem disappears (spec §9.6)
specialAbilities?: { name: string; description: string }[]; // Special abilities
}