Skip to content

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: EnemyCatalogResource mit EnemyDefinitionResource-Einträgen

Laufzeit-Ablauf

  1. Run-Start: CombatBalanceCatalog.Resolve + EnemyCatalogBridge (Resource-Entries mergen über Shared Defaults)
  2. Generation: Density → Spawnpositionen → EncounterCompositionBuilder → Objective inkl. WaveIndex
  3. EncounterSpawnRequestFactoryRoomEncounterRuntime3D / RoomEncounterDirector
  4. Spawn: Telegraph → DungeonEnemyPool.AcquireDungeonEnemy3D.Configure(snapshot)EnterCombatImmediately()
  5. 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.