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
- Stabile lowercase ID mit
powerup_waehlen. - Immutable Definition samt Stackregeln, Effekten, Hooks und Balanceversion ergaenzen.
- ID im RunPowerUpPolicy-Pool freigeben.
- Drop-Schedule-/Catalogversion pruefen; niemals beim Pickup neu wuerfeln.
- Catalog-, Stack-, Modifier-, Drop-, Replay- und Cleanup-Tests ergaenzen.
- Im DEV-Run Entry, World-Label, Collection, HUD, Effekt und Cleanup pruefen.