neon-sprawl/docs/manual-qa/NEO-85.md

2.2 KiB
Raw Blame History

NEO-85 — Manual QA checklist

Field Value
Key NEO-85
Title E5M1-11: Client combat feedback + target HP HUD
Linear https://linear.app/neon-sprawl/issue/NEO-85/e5m1-11-client-combat-feedback-target-hp-hud
Plan docs/plans/NEO-85-implementation-plan.md

1) Server

  • Start server: cd server/NeonSprawl.Server && dotnet run.
  • curl -s http://localhost:5253/health returns JSON with status: ok.
  • Optional reset between runs (Development host): curl -sS -X POST http://localhost:5253/game/__dev/combat-targets-fixture -H 'Content-Type: application/json' -d '{"schemaVersion":1}' returns 200 when the dev fixture route is enabled.

2) Client — combat HUD

  • Open Godot main scene with server running; after hotbar sync, slot 0 auto-binds to prototype_pulse when empty (NEO-85 dev bootstrap — same as Bruno Post hotbar bind slot0 pulse).
  • Locate combat dummies near spawn: orange capsule "Dummy α" at (-3, -3) (west of player) and purple "Dummy β" at (3, 3); each has a flat lock ring on the ground. Walk toward the orange dummy if needed.
  • Tab to lock prototype_target_alpha — dummy brightens; CombatTargetHpLabel shows Target HP: prototype_target_alpha 100/100 (or briefly until GET completes).
  • Press 1 (hotbar slot 1 → index 0): CastFeedbackLabel shows Cast: 25 dmg → 75 HP (not Output-only).
  • CombatTargetHpLabel updates to 75/100 after the cast (event-driven GET refresh).
  • Cast three more pulse hits (respect cooldown): feedback steps 50, 25, then Cast: 25 dmg → 0 HP — defeated! on the lethal hit; HP label shows 0/100 (defeated).
  • Press 1 again on the defeated dummy: CastFeedbackLabel shows ability_cast_denied: target_defeated; HP label remains defeated.
  • Esc to clear lock: CombatTargetHpLabel shows Target HP: — (no lock).

3) Regression

  • Cast without lock still shows ability_cast_denied: invalid_target on CastFeedbackLabel (NEO-28).
  • Cooldown HUD still refreshes after accepted casts (NEO-32).