Skip to content

How-to: Gegner erstellen (Resource-Pack)

Status: Phase-1 Enemy Packing über Godot Resources + Shared Snapshots.

Editor-Workflow (ohne Code)

  1. Im Godot-Inspector ein neues Resource vom Typ EnemyDefinitionResource anlegen.
  2. Mindestens setzen: Id, DisplayName, Role (Chaser/Shooter/Flanker/Tank/Elite/Boss), Combat-Stats, Aggro, Behavior-Knobs, optional VisualScene.
  3. Resource speichern unter res://Resources/Enemies/Definitions/<id>.tres.
  4. res://Resources/Enemies/DefaultEnemyCatalog.tres (EnemyCatalogResource) öffnen und den Eintrag in Entries ziehen.
  5. Optional Encounter-Mischung anpassen: EncounterPatternResource / EncounterCompositionCatalogResource unter res://Resources/Enemies/.
  6. 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

  • EnemyCompositionAndDensityTests
  • EncounterDirectorAndBalanceTests (Caps, Hybrid-Wellen)
  • PhaseOneCombatIntegrationTests (Rollenauflösung)
  • DungeonEnemyCombatDecisionTests (Intent-Resolution, Engage-Contract)
  • DropSystemTests (Elite guaranteed, WaveClear ad-hoc)

Verwandt: Encounters, Combat Balance.