Skip to content

Power-ups und zentrale Stats

Status: Power-ups werden in neuen Runs ausschliesslich als deterministisch geplante physische Drops vergeben. Das fruehere Encounter-Auswahl-Overlay und SelectPowerUpCommand liegen nicht mehr im aktiven Runtime-Pfad.

Domain und aktiver Ablauf

Die Godot-freie Power-up-Wahrheit liegt in den einzelnen Typdateien unter HolodeckArena.Shared/Gameplay/PowerUps: immutable Definitionen, versionierter Catalog, deklarative Effekte, RunPowerUpState, Stack-/Kompatibilitätsregeln und State-Hashes. RunDefinition.PowerUpPolicy begrenzt weiterhin den erlaubten Pool. Legacy-Reward-/Choice-Typen bleiben für alte Replays lesbar, werden für neue Runs aber nicht erzeugt.

RunDefinition.DropPolicy.Schedule
-> SourceEntityId abgeschlossen
-> WorldDrop3D mit genau einer PowerUpId
-> CollectDropCommand / LocalSoloAuthority
-> RunPowerUpState.ApplyDrop
-> Stat-/Weapon-Modifier oder Triggered Effect
-> HUD und Replay

Schedule, Recovery, Persistenz, Replay und Servervalidierung sind in Deterministisches physisches Drop-System dokumentiert.

Phase-1-Catalog

  • powerup_overcharged_rounds: Weapon Damage, maximal drei Stacks.
  • powerup_accelerated_cycling: Fire Rate, maximal drei Stacks.
  • powerup_expanded_magazine: Magazine Size, maximal drei Stacks.
  • powerup_adaptive_plating: Damage Reduction, maximal vier Stacks, effektiv hoechstens 50 %.
  • powerup_emergency_restoration: einmaliges Healing.
  • powerup_phase_actuator: Movement Speed, maximal drei Stacks.

Stats, Waffen und Health

Player-Stats laufen ueber StatCollection/StatComponent; PowerUpEffectProjection erzeugt die stabilen run-powerups-Modifier und Trigger-Heilwerte Godot-frei. PowerUpControllerComponent wendet diese Projektion nur an. Weapon-Effekte gehen an AdvancedWeaponController, der Primary und Secondary getrennt neu berechnet; Heal-Effekte laufen ueber HealthComponent.Heal und ueberschreiten MaxHealth nicht.

Stack-, Authority- und Pickup-Regeln

RunPowerUpState.ApplyDrop(dropId, powerUpId, catalog) prueft unverbrauchte Drop-ID, konkrete ID, MaximumStacks und Inkompatibilitaeten. Erfolg erhoeht exakt diese ID. Bei Max-Stack bleibt der Drop liegen; es gibt keine Neuauslosung oder Umwandlung.

Die Pickup-Area sendet nur CollectDropCommand. Erst der zentrale Collector ruft nach Run-/Drop-/Player-/Distanzpruefung ApplyDropPowerUp auf. Dabei werden weder Auswahl-Overlay noch Cursor- oder Combat-Pause aktiviert.

HUD, Replay und Cleanup

Das HUD zeigt aktive Namen, Stackzahl und optionale Restdauer. Recovery-Drops erscheinen nicht dort. Replay schreibt Schedule, Spawn, Versuch, Annahme/Ablehnung, powerup_applied, Stackaenderung und StateHash. Alte PowerUpSelectedReplayEvent-Daten bleiben lesbar.

PlayerController.DisableCombat ruft PowerUpControllerComponent.ClearAll auf. Completion, Abort und Tod entfernen alle runlokalen Modifier und Stacks. DevelopmentTriggerPowerUpChoice oeffnet keine Auswahl mehr.

Neues Power-up

  1. Stabile lowercase ID mit powerup_ waehlen.
  2. Immutable Definition samt Stackregeln, Effekten, Hooks und Balanceversion ergaenzen.
  3. ID im RunPowerUpPolicy-Pool freigeben.
  4. Drop-Schedule-/Catalogversion pruefen; niemals beim Pickup neu wuerfeln.
  5. Catalog-, Stack-, Modifier-, Drop-, Replay- und Cleanup-Tests ergaenzen.
  6. Im DEV-Run Entry, World-Label, Collection, HUD, Effekt und Cleanup pruefen.