How-to: Gegner erstellen (Resource-Pack)
Status: Phase-1 Enemy Packing über Godot Resources + Shared Snapshots.
Editor-Workflow (ohne Code)
- Im Godot-Inspector ein neues Resource vom Typ
EnemyDefinitionResourceanlegen. - Mindestens setzen:
Id,DisplayName,Role(Chaser/Shooter/Flanker/Tank/Elite/Boss), Combat-Stats,Aggro, Behavior-Knobs, optionalVisualScene. - Resource speichern unter
res://Resources/Enemies/Definitions/<id>.tres. res://Resources/Enemies/DefaultEnemyCatalog.tres(EnemyCatalogResource) öffnen und den Eintrag inEntriesziehen.- Optional Encounter-Mischung anpassen:
EncounterPatternResource/EncounterCompositionCatalogResourceunterres://Resources/Enemies/. - Run / Balancing-Sandbox starten. Gültige Resource-Einträge werden über den Shared-Code-Fallback gemerged (gleiche
Id→ Resource gewinnt, neue Ids werden ergänzt). Bei leerem/invalidem Catalog bleibt nur der Shared-Pack (DefaultEnemyDefinitionCatalog).
Rollen (Behavior-Interpreter)
DungeonEnemy3D interpretiert Snapshot-Felder über EnemyCombatIntent (DungeonEnemyCombatDecision) – keine ID-Switches für Stats.
Timing liegt zentral in DungeonEnemyAiTuning. Spawns rufen EnterCombatImmediately() auf (kein Idle nach Spawn).
| Role | Verhalten |
|---|---|
| Chaser | Sofort aggro; direkt verfolgen bis AttackRange |
| Shooter | Preferred-Range halten + Strafe; bei No-LOS / zu langem Stehen → Reposition / näher heran |
| Flanker | Lateraler Offset über FlankDistance, periodischer Seitenwechsel, dann schließen und erneut flankieren |
| Tank | ContinuousAdvance: permanent auf den Spieler zu, leichter Nachdruck auch in AttackRange |
| Elite | Shooter-Druck + SpecialAbility (SpeedSurge / DoubleShot) beim Schließen/Repositionieren, Loot-Flags |
| Boss | Boss-Runtime wenn attached; sonst Elite/Shooter-Mix |
Phase 2: Suicide / Support.
Code-Pfade
- Editor Resources:
Features/Dungeons/Enemies/*Resource.cs - Bridge:
EnemyCatalogBridge - Shared Snapshots/Registry:
HolodeckArena.Shared.Gameplay.Combat.Enemies - Resolve + Balance-Multiplier:
DungeonEnemyCatalog - Pool:
DungeonEnemyPool(Acquire/Release,ResetForPool)
Composition / Spawns
EncounterCompositionBuilder wählt Pattern nach Difficulty/Seed und füllt Wellen (WaveIndex).
EnemySpawnGenerator bestimmt die Anzahl über Density-Kurve (Floor, Raumindex, Size, Difficulty, Budget).
RoomEncounterDirector betreibt Hybrid: Threshold-Reinforcements innerhalb der offenen Welle + Inter-Wave-Pause.
Tests
EnemyCompositionAndDensityTestsEncounterDirectorAndBalanceTests(Caps, Hybrid-Wellen)PhaseOneCombatIntegrationTests(Rollenauflösung)DungeonEnemyCombatDecisionTests(Intent-Resolution, Engage-Contract)DropSystemTests(Elite guaranteed, WaveClear ad-hoc)
Verwandt: Encounters, Combat Balance.