Encounters, Gegner und Bosse
Bossangriffe verwenden den versionierten DeterministicRandom; der Selector-Seed wird stabil aus Run-Seed und Enemy-Instanz-ID abgeleitet. Dadurch hängen Angriffsfolgen nicht von System.HashCode oder der .NET-Random-Implementierung ab.
Status: Phase-1 Combat Overhaul – Resource-Packs, Hybrid-Wellen, höhere Dichte, Enemy-Pooling
Zweck
Raumbetreten aktiviert Encounters aus RunDefinition.Objective.Enemies. Gegner spawnen wellenbasiert an Template-Markern/Planpositionen. Director hält Caps und Druck. Wave-/Encounter-Clear vergibt keine Belohnungen — Power-ups und Recovery kommen ausschließlich als geplante physische Drops von Enemy/Boss/Chest-Quellen.
Begriffe
- Raum: Layout-/Template-Instanz
- Encounter: Objective-Enemy-Menge eines Raums
- Wave: Teilmenge mit
WaveIndex; Hybrid-Director öffnet die nächste Welle nach Living-Ratio + Pause - Enemy Pack:
EnemyCatalogResourcemitEnemyDefinitionResource-Einträgen
Laufzeit-Ablauf
- Run-Start:
CombatBalanceCatalog.Resolve+EnemyCatalogBridge(Resource-Entries mergen über Shared Defaults) - Generation: Density → Spawnpositionen →
EncounterCompositionBuilder→ Objective inkl.WaveIndex EncounterSpawnRequestFactory→RoomEncounterRuntime3D/RoomEncounterDirector- Spawn: Telegraph →
DungeonEnemyPool.Acquire→DungeonEnemy3D.Configure(snapshot)→EnterCombatImmediately() - Tod: Director
NotifyEnemyDefeated→ geplante Source-Drops →DungeonEnemyPool.Release
Gegner-KI
Room-/Add-Gegner nutzen einen Intent-Interpreter (EnemyCombatIntent via DungeonEnemyCombatDecision):
- Sofortiger Kampfdruck nach Spawn (kein Pre-Aggro-Idle)
- Kein Leash-Idle solange das Ziel lebt
- Shooter/Elite: Strafe in Preferred-Range, Reposition bei No-LOS oder zu langem Stehen
- Tank:
ContinuousAdvance - Flanker: periodischer Flank-Refresh
Timing-Konstanten: DungeonEnemyAiTuning. Boss-Phasen-KI bleibt in BossEncounterRuntime.
Datengetrieben
| Resource | Zweck |
|---|---|
EnemyDefinitionResource |
Stats, Role, Aggro, Behavior, VisualScene, Loot-Flags |
EnemyCatalogResource |
Gegner-Pack |
EncounterPatternResource |
Rollenmischung pro Welle |
EncounterCompositionCatalogResource |
Pattern-Auswahl |
CombatBalanceProfile |
Dichte, Caps, Wave-Pacing |
Shared Spiegel: EnemyDefinitionSnapshot, EncounterPatternSnapshot, CombatBalanceSnapshot.
Performance
- Enemy Object Pool (
DungeonEnemyPool, Cap 48) - Gestaffelte Path-Refresh-Offsets
- Keine per-Frame LINQ in Enemy-AI
Debugging
Erwartete Events u. a.:
wave_completed/encounter_completed(Replay)- Balance-Debug-Overlay: Active/Ranged/Queue/Budget
How-tos: Gegner, Encounter, Boss. Verwandt: Objectives, Combat Balance.