--- id: GAL-40 title: Design intricate flight patterns for non-shooting enemies status: Todo parent: GAL-38 labels: [gameplay, advanced-mechanics] --- # GAL-40: Design and implement intricate flight patterns for enemies that do not shoot Design and implement intricate flight patterns for enemies that do not shoot. ## Acceptance criteria - [ ] On a special stage (`is_special_stage(stage_number) == true`), enemies follow scripted curved paths (e.g. spline / Bezier / Lissajous), not the formation flow. - [ ] These enemies do **not** call `enemy_shoot` and never spawn `EnemyBullet`. - [ ] Enemies despawn when their path reaches its end off-screen. - [ ] At least 2 distinct path shapes used in a single special stage for visual variety. - [ ] Difficulty / pattern parameters live in `StageConfigurations` (or a new resource) so future stages can compose them. ## Integration test hints - Build a headless `App` with `CurrentStage = 3` (first special stage); tick for N seconds; assert: zero `EnemyBullet` entities ever spawned, all special-stage enemies eventually despawned (count returns to 0). - Snapshot the path: at fixed intervals record enemy `Transform.translation`; assert curvature (e.g. y is non-monotonic to prove it isn't a straight line). - Visual smoke test via `nix run .#take-screenshots -- ./target/debug/bglga 3 6 1 ./shots` after triggering a special stage; eyeball that paths look intentional.