--- id: GAL-43 title: Replace placeholder geometric shapes with actual sprites status: Todo parent: GAL-42 labels: [polish, visuals] --- # GAL-43: Replace placeholder geometric shapes with actual sprites Replace placeholder geometric shapes with actual sprites. ## Acceptance criteria - [ ] `Player`, `Bullet`, `EnemyBullet`, and both `EnemyType::Grunt` / `EnemyType::Boss` are rendered via `Sprite` components loaded from `assets/`, not coloured meshes. - [ ] Asset paths centralised (e.g. constants in `constants.rs`) so swapping art is a one-line change. - [ ] Hitbox sizes either preserved or recalibrated; existing collision tests still pass. - [ ] Z-ordering preserved (player above starfield, bullets above enemies, beam below player). - [ ] Falls back gracefully if an asset is missing (warn, do not panic at runtime). ## Integration test hints - Unit-test `spawn_player` (and equivalents) inserts a `Sprite` component referencing the expected `Handle`. - Run `nix run .#take-screenshots -- ./target/debug/bglga 3 6 1 ./shots` before and after; visually compare frames for regressions in placement. - Existing collision tests: ensure they still pass with the new sprite-derived hitbox sizes (or update constants in `constants.rs` and the tests in lockstep).