diff --git a/GEMINI.md b/GEMINI.md new file mode 120000 index 0000000..681311e --- /dev/null +++ b/GEMINI.md @@ -0,0 +1 @@ +CLAUDE.md \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..0c10e47 --- /dev/null +++ b/TODO.md @@ -0,0 +1,74 @@ +# TODO + +**1. Core Gameplay Loop & State Management** + +* [x] **GAL-1: Player Lives** + * [x] GAL-2: Add a `PlayerLives` resource. + * [x] GAL-3: Decrement lives on collision. + * [x] GAL-4: Implement player destruction and respawn with temporary invincibility. +* [x] **GAL-5: Game Over State** + * [x] GAL-6: Use Bevy's `States` (`Playing`, `GameOver`). + * [x] GAL-7: Transition to `GameOver` when lives reach zero. + * [x] GAL-8: Display a "Game Over" message. +* [x] **GAL-9: Scoring** + * [x] GAL-10: Add a `Score` resource. + * [x] GAL-11: Increment score when an enemy is hit. +* [x] **GAL-12: Levels/Stages** + * [x] GAL-13: Add `CurrentStage` and `StageConfigurations` resources. + * [x] GAL-14: Define criteria for clearing a stage. + * [x] GAL-15: Advance to the next stage with increasing difficulty. + +**2. Enemy Behavior - Formations & Attack Patterns** + +* [x] **GAL-16: Enemy Formations** + * [x] GAL-17: Define target positions for formations (`FormationLayout`). + * [x] GAL-18: Enemies have an `Entering` state to fly to their position. + * [x] GAL-19: Enemies have an `InFormation` state. +* [x] **GAL-20: Enemy Attack Dives** + * [x] GAL-21: Enemies have an `Attacking` state with different `AttackPattern`s (Swoop, Direct, Kamikaze). + * [x] GAL-22: Periodically trigger random enemies to start an attack dive. + * [x] GAL-23: Enemies fire bullets during their dives. + * [x] GAL-24: Enemies are despawned when they fly off-screen after an attack. +* [ ] **GAL-25: Enemy Variety** + * [x] GAL-26: `EnemyType` enum (`Grunt`, `Boss`). + * [ ] GAL-27: Different behaviors, points, and colors based on type. + * [x] Colors differ (Grunt red, Boss purple) — `enemy.rs:80-83` + * [x] Behaviors differ (Boss has `CaptureBeam`, distinct SwoopDive) — `enemy.rs:254-318` + * [ ] Points: Boss currently awards same 100 points as Grunt — see `bullet.rs:48-51` (`// Same points as Grunt for now`). Boss should award more. + +**3. Advanced Galaga Mechanics** + +* [ ] **GAL-28: Boss Galaga & Capture Beam** + * [x] GAL-29: Create a "Boss" enemy type. + * [x] GAL-30: Implement the tractor beam attack logic (`boss_capture_attack` system). + * [x] GAL-31: Player has a `Captured` component when hit by the beam. + * [x] GAL-32: Boss has a `ReturningWithCaptive` state to go back to the formation. + * [x] GAL-33: Improve the tractor beam visual effect (currently a simple rectangle). + * Completed on branch gal-33-improve-tractor-beam-visual, commit 52b0919 — 2-layer glow beam with pulse animation, 8 unit tests +* [ ] **GAL-34: Dual Fighter (Rescuing Captured Ship)** + * [ ] GAL-35: Allow the player to shoot a Boss that is holding a captured ship. + * [ ] GAL-36: Implement the logic to free the captured ship upon shooting the Boss. + * [ ] GAL-37: Implement the dual fighter mode (controlling two ships, firing two bullets). +* [ ] **GAL-38: Challenging Stages** + * [ ] GAL-39: Implement a special stage type (e.g., every 3-4 levels). + * [ ] GAL-40: Design and implement intricate flight patterns for enemies that do not shoot. + * [ ] GAL-41: Award bonus points for destroying all enemies in the stage. + +**4. Polish and User Interface** + +* [ ] **GAL-42: Visuals** + * [ ] GAL-43: Replace placeholder geometric shapes with actual sprites. + * [x] GAL-44: Add explosion animations/effects. + * **Branch:** `gal-44-add-explosion-effects` + * **Comment:** 2026-05-06 — Implementation complete with commit `2ff561e` + * [x] GAL-45: Implement a scrolling starfield background. +* [ ] **GAL-46: Audio** + * [ ] GAL-47: Integrate `bevy_audio`. + * [ ] GAL-48: Add sound effects (shooting, explosions, player death, tractor beam, etc.). + * [ ] GAL-49: Add background music. +* [ ] **GAL-50: UI** + * [x] GAL-51: Display Score, Lives, and Stage in the window title. + * [ ] GAL-52: Display Score, Lives, and Stage on the screen using `bevy_ui`. + * [ ] GAL-53: Implement a High Score system (saving/loading). + * [x] GAL-54: Create a Start Menu state with a "Start Game" button. + * [ ] GAL-55: Add a "Press R to Restart" message to the `GameOver` screen and implement restart logic. diff --git a/TODO/GAL-1.md b/TODO/GAL-1.md deleted file mode 100644 index 3362b90..0000000 --- a/TODO/GAL-1.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-1 -title: Player Lives -status: Done -parent: null -labels: [gameplay, core-loop] ---- - -# GAL-1: Player Lives - -Player lives system: lives counter, decrement on hit, destruction and respawn flow. - -## Sub-issues - -- [x] [GAL-2](GAL-2.md) — Add a `PlayerLives` resource. -- [x] [GAL-3](GAL-3.md) — Decrement lives on collision. -- [x] [GAL-4](GAL-4.md) — Implement player destruction and respawn with temporary invincibility. diff --git a/TODO/GAL-10.md b/TODO/GAL-10.md deleted file mode 100644 index 379ab97..0000000 --- a/TODO/GAL-10.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-10 -title: Add a Score resource -status: Done -parent: GAL-9 -labels: [gameplay, core-loop] ---- - -# GAL-10: Add a `Score` resource - -Add a `Score` resource. diff --git a/TODO/GAL-11.md b/TODO/GAL-11.md deleted file mode 100644 index 086ad5c..0000000 --- a/TODO/GAL-11.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-11 -title: Increment score when an enemy is hit -status: Done -parent: GAL-9 -labels: [gameplay, core-loop] ---- - -# GAL-11: Increment score when an enemy is hit - -Increment score when an enemy is hit. diff --git a/TODO/GAL-12.md b/TODO/GAL-12.md deleted file mode 100644 index 2f5adf8..0000000 --- a/TODO/GAL-12.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-12 -title: Levels/Stages -status: Done -parent: null -labels: [gameplay, core-loop] ---- - -# GAL-12: Levels/Stages - -Stage progression with increasing difficulty driven by configuration resources. - -## Sub-issues - -- [x] [GAL-13](GAL-13.md) — Add `CurrentStage` and `StageConfigurations` resources. -- [x] [GAL-14](GAL-14.md) — Define criteria for clearing a stage. -- [x] [GAL-15](GAL-15.md) — Advance to the next stage with increasing difficulty. diff --git a/TODO/GAL-13.md b/TODO/GAL-13.md deleted file mode 100644 index f94e191..0000000 --- a/TODO/GAL-13.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-13 -title: Add CurrentStage and StageConfigurations resources -status: Done -parent: GAL-12 -labels: [gameplay, core-loop] ---- - -# GAL-13: Add `CurrentStage` and `StageConfigurations` resources - -Add `CurrentStage` and `StageConfigurations` resources. diff --git a/TODO/GAL-14.md b/TODO/GAL-14.md deleted file mode 100644 index 823ed55..0000000 --- a/TODO/GAL-14.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-14 -title: Define criteria for clearing a stage -status: Done -parent: GAL-12 -labels: [gameplay, core-loop] ---- - -# GAL-14: Define criteria for clearing a stage - -Define criteria for clearing a stage. diff --git a/TODO/GAL-15.md b/TODO/GAL-15.md deleted file mode 100644 index 9c3b2ec..0000000 --- a/TODO/GAL-15.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-15 -title: Advance to the next stage with increasing difficulty -status: Done -parent: GAL-12 -labels: [gameplay, core-loop] ---- - -# GAL-15: Advance to the next stage with increasing difficulty - -Advance to the next stage with increasing difficulty. diff --git a/TODO/GAL-16.md b/TODO/GAL-16.md deleted file mode 100644 index fb7b806..0000000 --- a/TODO/GAL-16.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-16 -title: Enemy Formations -status: Done -parent: null -labels: [enemy, gameplay] ---- - -# GAL-16: Enemy Formations - -Enemies fly into target positions and hold formation. - -## Sub-issues - -- [x] [GAL-17](GAL-17.md) — Define target positions for formations (`FormationLayout`). -- [x] [GAL-18](GAL-18.md) — Enemies have an `Entering` state to fly to their position. -- [x] [GAL-19](GAL-19.md) — Enemies have an `InFormation` state. diff --git a/TODO/GAL-17.md b/TODO/GAL-17.md deleted file mode 100644 index 763fb9c..0000000 --- a/TODO/GAL-17.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-17 -title: Define target positions for formations (FormationLayout) -status: Done -parent: GAL-16 -labels: [enemy, gameplay] ---- - -# GAL-17: Define target positions for formations (`FormationLayout`) - -Define target positions for formations (`FormationLayout`). diff --git a/TODO/GAL-18.md b/TODO/GAL-18.md deleted file mode 100644 index 9e48837..0000000 --- a/TODO/GAL-18.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-18 -title: Enemies have an Entering state to fly to their position -status: Done -parent: GAL-16 -labels: [enemy, gameplay] ---- - -# GAL-18: Enemies have an `Entering` state to fly to their position - -Enemies have an `Entering` state to fly to their position. diff --git a/TODO/GAL-19.md b/TODO/GAL-19.md deleted file mode 100644 index 27d6f05..0000000 --- a/TODO/GAL-19.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-19 -title: Enemies have an InFormation state -status: Done -parent: GAL-16 -labels: [enemy, gameplay] ---- - -# GAL-19: Enemies have an `InFormation` state - -Enemies have an `InFormation` state. diff --git a/TODO/GAL-2.md b/TODO/GAL-2.md deleted file mode 100644 index 01671b3..0000000 --- a/TODO/GAL-2.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-2 -title: Add a PlayerLives resource -status: Done -parent: GAL-1 -labels: [gameplay, core-loop] ---- - -# GAL-2: Add a `PlayerLives` resource - -Add a `PlayerLives` resource. diff --git a/TODO/GAL-20.md b/TODO/GAL-20.md deleted file mode 100644 index 64df870..0000000 --- a/TODO/GAL-20.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -id: GAL-20 -title: Enemy Attack Dives -status: Done -parent: null -labels: [enemy, gameplay] ---- - -# GAL-20: Enemy Attack Dives - -Enemies leave formation to dive at the player along varied attack patterns. - -## Sub-issues - -- [x] [GAL-21](GAL-21.md) — Enemies have an `Attacking` state with different `AttackPattern`s (Swoop, Direct, Kamikaze). -- [x] [GAL-22](GAL-22.md) — Periodically trigger random enemies to start an attack dive. -- [x] [GAL-23](GAL-23.md) — Enemies fire bullets during their dives. -- [x] [GAL-24](GAL-24.md) — Enemies are despawned when they fly off-screen after an attack. diff --git a/TODO/GAL-21.md b/TODO/GAL-21.md deleted file mode 100644 index 8650ee7..0000000 --- a/TODO/GAL-21.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-21 -title: Attacking state with different AttackPatterns -status: Done -parent: GAL-20 -labels: [enemy, gameplay] ---- - -# GAL-21: Enemies have an `Attacking` state with different `AttackPattern`s - -Enemies have an `Attacking` state with different `AttackPattern`s (Swoop, Direct, Kamikaze). diff --git a/TODO/GAL-22.md b/TODO/GAL-22.md deleted file mode 100644 index 4b916ff..0000000 --- a/TODO/GAL-22.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-22 -title: Periodically trigger random enemies to start an attack dive -status: Done -parent: GAL-20 -labels: [enemy, gameplay] ---- - -# GAL-22: Periodically trigger random enemies to start an attack dive - -Periodically trigger random enemies to start an attack dive. diff --git a/TODO/GAL-23.md b/TODO/GAL-23.md deleted file mode 100644 index 7515aee..0000000 --- a/TODO/GAL-23.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-23 -title: Enemies fire bullets during their dives -status: Done -parent: GAL-20 -labels: [enemy, gameplay] ---- - -# GAL-23: Enemies fire bullets during their dives - -Enemies fire bullets during their dives. diff --git a/TODO/GAL-24.md b/TODO/GAL-24.md deleted file mode 100644 index dab9738..0000000 --- a/TODO/GAL-24.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-24 -title: Despawn enemies when they fly off-screen after an attack -status: Done -parent: GAL-20 -labels: [enemy, gameplay] ---- - -# GAL-24: Enemies are despawned when they fly off-screen after an attack - -Enemies are despawned when they fly off-screen after an attack. diff --git a/TODO/GAL-25.md b/TODO/GAL-25.md deleted file mode 100644 index 142a45d..0000000 --- a/TODO/GAL-25.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: GAL-25 -title: Enemy Variety -status: In Progress -parent: null -labels: [enemy, gameplay] ---- - -# GAL-25: Enemy Variety - -Different enemy types with distinct visuals, behaviors, and point values. - -## Sub-issues - -- [x] [GAL-26](GAL-26.md) — `EnemyType` enum (`Grunt`, `Boss`). -- [x] [GAL-27](GAL-27.md) — Different behaviors, points, and colors based on type. diff --git a/TODO/GAL-26.md b/TODO/GAL-26.md deleted file mode 100644 index e665d17..0000000 --- a/TODO/GAL-26.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-26 -title: EnemyType enum (Grunt, Boss) -status: Done -parent: GAL-25 -labels: [enemy, gameplay] ---- - -# GAL-26: `EnemyType` enum (`Grunt`, `Boss`) - -`EnemyType` enum (`Grunt`, `Boss`). diff --git a/TODO/GAL-27.md b/TODO/GAL-27.md deleted file mode 100644 index 8d489de..0000000 --- a/TODO/GAL-27.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: GAL-27 -title: Different behaviors, points, and colors based on type -status: Done -parent: GAL-25 -labels: [enemy, gameplay] ---- - -# GAL-27: Different behaviors, points, and colors based on type - -Bosses are visually, behaviorally, and economically distinct from Grunts. - -## Acceptance criteria - -- [x] Colors differ (Grunt red, Boss purple) — `enemy.rs:80-83` -- [x] Behaviors differ (Boss has `CaptureBeam`, distinct SwoopDive) — `enemy.rs:254-318` -- [x] Points: Boss awards 300 points (3x Grunt) — `bullet.rs:13-14` - -## Comments - -- Completed on branch GAL-27, commit 98b74a7. diff --git a/TODO/GAL-28.md b/TODO/GAL-28.md deleted file mode 100644 index 43967a9..0000000 --- a/TODO/GAL-28.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: GAL-28 -title: Boss Galaga & Capture Beam -status: In Progress -parent: null -labels: [enemy, advanced-mechanics] ---- - -# GAL-28: Boss Galaga & Capture Beam - -Boss enemy with tractor beam capture mechanic and return-to-formation behavior. - -## Sub-issues - -- [x] [GAL-29](GAL-29.md) — Create a "Boss" enemy type. -- [x] [GAL-30](GAL-30.md) — Implement the tractor beam attack logic (`boss_capture_attack` system). -- [x] [GAL-31](GAL-31.md) — Player has a `Captured` component when hit by the beam. -- [x] [GAL-32](GAL-32.md) — Boss has a `ReturningWithCaptive` state to go back to the formation. -- [x] [GAL-33](GAL-33.md) — Improve the tractor beam visual effect (currently a simple rectangle). diff --git a/TODO/GAL-29.md b/TODO/GAL-29.md deleted file mode 100644 index 2fd3011..0000000 --- a/TODO/GAL-29.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-29 -title: Create a Boss enemy type -status: Done -parent: GAL-28 -labels: [enemy, advanced-mechanics] ---- - -# GAL-29: Create a "Boss" enemy type - -Create a "Boss" enemy type. diff --git a/TODO/GAL-3.md b/TODO/GAL-3.md deleted file mode 100644 index 71bb9a1..0000000 --- a/TODO/GAL-3.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-3 -title: Decrement lives on collision -status: Done -parent: GAL-1 -labels: [gameplay, core-loop] ---- - -# GAL-3: Decrement lives on collision - -Decrement lives on collision. diff --git a/TODO/GAL-30.md b/TODO/GAL-30.md deleted file mode 100644 index 8ae16e0..0000000 --- a/TODO/GAL-30.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-30 -title: Implement the tractor beam attack logic -status: Done -parent: GAL-28 -labels: [enemy, advanced-mechanics] ---- - -# GAL-30: Implement the tractor beam attack logic (`boss_capture_attack` system) - -Implement the tractor beam attack logic (`boss_capture_attack` system). diff --git a/TODO/GAL-31.md b/TODO/GAL-31.md deleted file mode 100644 index e41fd68..0000000 --- a/TODO/GAL-31.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-31 -title: Player has a Captured component when hit by the beam -status: Done -parent: GAL-28 -labels: [enemy, advanced-mechanics] ---- - -# GAL-31: Player has a `Captured` component when hit by the beam - -Player has a `Captured` component when hit by the beam. diff --git a/TODO/GAL-32.md b/TODO/GAL-32.md deleted file mode 100644 index 3fb69db..0000000 --- a/TODO/GAL-32.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-32 -title: Boss has a ReturningWithCaptive state -status: Done -parent: GAL-28 -labels: [enemy, advanced-mechanics] ---- - -# GAL-32: Boss has a `ReturningWithCaptive` state to go back to the formation - -Boss has a `ReturningWithCaptive` state to go back to the formation. diff --git a/TODO/GAL-33.md b/TODO/GAL-33.md deleted file mode 100644 index 76f4f74..0000000 --- a/TODO/GAL-33.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -id: GAL-33 -title: Improve the tractor beam visual effect -status: Done -parent: GAL-28 -labels: [enemy, advanced-mechanics, visuals] ---- - -# GAL-33: Improve the tractor beam visual effect - -Improve the tractor beam visual effect (currently a simple rectangle). - -## Comments - -- Completed on branch `gal-33-improve-tractor-beam-visual`, commit 52b0919 — 2-layer glow beam with pulse animation, 8 unit tests. diff --git a/TODO/GAL-34.md b/TODO/GAL-34.md deleted file mode 100644 index 9f9a6c1..0000000 --- a/TODO/GAL-34.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-34 -title: Dual Fighter (Rescuing Captured Ship) -status: Todo -parent: null -labels: [gameplay, advanced-mechanics] ---- - -# GAL-34: Dual Fighter (Rescuing Captured Ship) - -Allow the player to rescue a captured ship and operate in dual-fighter mode. - -## Sub-issues - -- [ ] [GAL-35](GAL-35.md) — Allow the player to shoot a Boss that is holding a captured ship. -- [ ] [GAL-36](GAL-36.md) — Implement the logic to free the captured ship upon shooting the Boss. -- [ ] [GAL-37](GAL-37.md) — Implement the dual fighter mode (controlling two ships, firing two bullets). diff --git a/TODO/GAL-35.md b/TODO/GAL-35.md deleted file mode 100644 index 9323e40..0000000 --- a/TODO/GAL-35.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-35 -title: Allow the player to shoot a Boss holding a captured ship -status: Todo -parent: GAL-34 -labels: [gameplay, advanced-mechanics] ---- - -# GAL-35: Allow the player to shoot a Boss that is holding a captured ship - -Allow the player to shoot a Boss that is holding a captured ship. diff --git a/TODO/GAL-36.md b/TODO/GAL-36.md deleted file mode 100644 index af50d2e..0000000 --- a/TODO/GAL-36.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-36 -title: Free the captured ship upon shooting the Boss -status: Todo -parent: GAL-34 -labels: [gameplay, advanced-mechanics] ---- - -# GAL-36: Implement the logic to free the captured ship upon shooting the Boss - -Implement the logic to free the captured ship upon shooting the Boss. diff --git a/TODO/GAL-37.md b/TODO/GAL-37.md deleted file mode 100644 index c972530..0000000 --- a/TODO/GAL-37.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-37 -title: Implement the dual fighter mode -status: Todo -parent: GAL-34 -labels: [gameplay, advanced-mechanics] ---- - -# GAL-37: Implement the dual fighter mode (controlling two ships, firing two bullets) - -Implement the dual fighter mode (controlling two ships, firing two bullets). diff --git a/TODO/GAL-38.md b/TODO/GAL-38.md deleted file mode 100644 index 6c999c8..0000000 --- a/TODO/GAL-38.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-38 -title: Challenging Stages -status: In Progress -parent: null -labels: [gameplay, advanced-mechanics] ---- - -# GAL-38: Challenging Stages - -Special stages every few levels with intricate non-shooting flight patterns and bonus rewards. - -## Sub-issues - -- [x] [GAL-39](GAL-39.md) — Implement a special stage type (e.g., every 3-4 levels). -- [ ] [GAL-40](GAL-40.md) — Design and implement intricate flight patterns for enemies that do not shoot. -- [ ] [GAL-41](GAL-41.md) — Award bonus points for destroying all enemies in the stage. diff --git a/TODO/GAL-39.md b/TODO/GAL-39.md deleted file mode 100644 index 19255ab..0000000 --- a/TODO/GAL-39.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: GAL-39 -title: Implement a special stage type -status: Done -parent: GAL-38 -labels: [gameplay, advanced-mechanics] ---- - -# GAL-39: Implement a special stage type (e.g., every 3-4 levels) - -Implement a special stage type (e.g., every 3-4 levels). - -## Comments - -- 2026-05-06 — Status set to In Progress. -- 2026-05-06 — Branch `GAL-39`, commit 9e6d538 — every 3rd level has no enemy attacks. diff --git a/TODO/GAL-4.md b/TODO/GAL-4.md deleted file mode 100644 index 26ac7a7..0000000 --- a/TODO/GAL-4.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-4 -title: Player destruction and respawn with temporary invincibility -status: Done -parent: GAL-1 -labels: [gameplay, core-loop] ---- - -# GAL-4: Implement player destruction and respawn with temporary invincibility - -Implement player destruction and respawn with temporary invincibility. diff --git a/TODO/GAL-40.md b/TODO/GAL-40.md deleted file mode 100644 index f820d05..0000000 --- a/TODO/GAL-40.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -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. diff --git a/TODO/GAL-41.md b/TODO/GAL-41.md deleted file mode 100644 index 3ee559b..0000000 --- a/TODO/GAL-41.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-41 -title: Award bonus points for clearing the special stage -status: Todo -parent: GAL-38 -labels: [gameplay, advanced-mechanics] ---- - -# GAL-41: Award bonus points for destroying all enemies in the stage - -Award bonus points for destroying all enemies in the stage. diff --git a/TODO/GAL-42.md b/TODO/GAL-42.md deleted file mode 100644 index 0523c9f..0000000 --- a/TODO/GAL-42.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-42 -title: Visuals -status: In Progress -parent: null -labels: [polish, visuals] ---- - -# GAL-42: Visuals - -Replace placeholder geometry with sprites, add explosions, and add a starfield background. - -## Sub-issues - -- [ ] [GAL-43](GAL-43.md) — Replace placeholder geometric shapes with actual sprites. -- [x] [GAL-44](GAL-44.md) — Add explosion animations/effects. -- [x] [GAL-45](GAL-45.md) — Implement a scrolling starfield background. diff --git a/TODO/GAL-43.md b/TODO/GAL-43.md deleted file mode 100644 index 07e7a9a..0000000 --- a/TODO/GAL-43.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -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. diff --git a/TODO/GAL-44.md b/TODO/GAL-44.md deleted file mode 100644 index 53ed2c5..0000000 --- a/TODO/GAL-44.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: GAL-44 -title: Add explosion animations/effects -status: Done -parent: GAL-42 -labels: [polish, visuals] ---- - -# GAL-44: Add explosion animations/effects - -Add explosion animations/effects. - -## Comments - -- Branch: `gal-44-add-explosion-effects`. -- 2026-05-06 — Implementation complete with commit `2ff561e`. diff --git a/TODO/GAL-45.md b/TODO/GAL-45.md deleted file mode 100644 index 61e8c38..0000000 --- a/TODO/GAL-45.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-45 -title: Implement a scrolling starfield background -status: Done -parent: GAL-42 -labels: [polish, visuals] ---- - -# GAL-45: Implement a scrolling starfield background - -Implement a scrolling starfield background. diff --git a/TODO/GAL-46.md b/TODO/GAL-46.md deleted file mode 100644 index a4c46a6..0000000 --- a/TODO/GAL-46.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-46 -title: Audio -status: Todo -parent: null -labels: [polish, audio] ---- - -# GAL-46: Audio - -Wire up audio plugin, sound effects, and background music. - -## Sub-issues - -- [ ] [GAL-47](GAL-47.md) — Integrate `bevy_audio`. -- [ ] [GAL-48](GAL-48.md) — Add sound effects (shooting, explosions, player death, tractor beam, etc.). -- [ ] [GAL-49](GAL-49.md) — Add background music. diff --git a/TODO/GAL-47.md b/TODO/GAL-47.md deleted file mode 100644 index 9f1c0c6..0000000 --- a/TODO/GAL-47.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-47 -title: Integrate bevy_audio -status: Todo -parent: GAL-46 -labels: [polish, audio] ---- - -# GAL-47: Integrate `bevy_audio` - -Integrate `bevy_audio`. diff --git a/TODO/GAL-48.md b/TODO/GAL-48.md deleted file mode 100644 index 3a62353..0000000 --- a/TODO/GAL-48.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-48 -title: Add sound effects -status: Todo -parent: GAL-46 -labels: [polish, audio] ---- - -# GAL-48: Add sound effects (shooting, explosions, player death, tractor beam, etc.) - -Add sound effects (shooting, explosions, player death, tractor beam, etc.). diff --git a/TODO/GAL-49.md b/TODO/GAL-49.md deleted file mode 100644 index d6b4534..0000000 --- a/TODO/GAL-49.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-49 -title: Add background music -status: Todo -parent: GAL-46 -labels: [polish, audio] ---- - -# GAL-49: Add background music - -Add background music. diff --git a/TODO/GAL-5.md b/TODO/GAL-5.md deleted file mode 100644 index 27c618e..0000000 --- a/TODO/GAL-5.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: GAL-5 -title: Game Over State -status: Done -parent: null -labels: [gameplay, core-loop] ---- - -# GAL-5: Game Over State - -State machine covering `Playing` and `GameOver`, with a transition trigger and on-screen message. - -## Sub-issues - -- [x] [GAL-6](GAL-6.md) — Use Bevy's `States` (`Playing`, `GameOver`). -- [x] [GAL-7](GAL-7.md) — Transition to `GameOver` when lives reach zero. -- [x] [GAL-8](GAL-8.md) — Display a "Game Over" message. diff --git a/TODO/GAL-50.md b/TODO/GAL-50.md deleted file mode 100644 index f021ee8..0000000 --- a/TODO/GAL-50.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: GAL-50 -title: UI -status: In Progress -parent: null -labels: [polish, ui] ---- - -# GAL-50: UI - -Score, lives, stage, high-score, start menu, and restart UI. - -## Sub-issues - -- [x] [GAL-51](GAL-51.md) — Display Score, Lives, and Stage in the window title. -- [ ] [GAL-52](GAL-52.md) — Display Score, Lives, and Stage on the screen using `bevy_ui`. -- [ ] [GAL-53](GAL-53.md) — Implement a High Score system (saving/loading). -- [x] [GAL-54](GAL-54.md) — Create a Start Menu state with a "Start Game" button. -- [ ] [GAL-55](GAL-55.md) — Add a "Press R to Restart" message to the `GameOver` screen and implement restart logic. diff --git a/TODO/GAL-51.md b/TODO/GAL-51.md deleted file mode 100644 index 8a600ee..0000000 --- a/TODO/GAL-51.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-51 -title: Display Score, Lives, and Stage in the window title -status: Done -parent: GAL-50 -labels: [polish, ui] ---- - -# GAL-51: Display Score, Lives, and Stage in the window title - -Display Score, Lives, and Stage in the window title. diff --git a/TODO/GAL-52.md b/TODO/GAL-52.md deleted file mode 100644 index 34d3350..0000000 --- a/TODO/GAL-52.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-52 -title: Display Score, Lives, and Stage on screen using bevy_ui -status: Todo -parent: GAL-50 -labels: [polish, ui] ---- - -# GAL-52: Display Score, Lives, and Stage on the screen using `bevy_ui` - -Display Score, Lives, and Stage on the screen using `bevy_ui`. diff --git a/TODO/GAL-53.md b/TODO/GAL-53.md deleted file mode 100644 index e72f729..0000000 --- a/TODO/GAL-53.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-53 -title: Implement a High Score system (saving/loading) -status: Todo -parent: GAL-50 -labels: [polish, ui] ---- - -# GAL-53: Implement a High Score system (saving/loading) - -Implement a High Score system (saving/loading). diff --git a/TODO/GAL-54.md b/TODO/GAL-54.md deleted file mode 100644 index 13ba55b..0000000 --- a/TODO/GAL-54.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-54 -title: Create a Start Menu state with a Start Game button -status: Done -parent: GAL-50 -labels: [polish, ui] ---- - -# GAL-54: Create a Start Menu state with a "Start Game" button - -Create a Start Menu state with a "Start Game" button. diff --git a/TODO/GAL-55.md b/TODO/GAL-55.md deleted file mode 100644 index 12e197e..0000000 --- a/TODO/GAL-55.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-55 -title: Add Press R to Restart message and restart logic -status: Todo -parent: GAL-50 -labels: [polish, ui] ---- - -# GAL-55: Add a "Press R to Restart" message to the `GameOver` screen and implement restart logic - -Add a "Press R to Restart" message to the `GameOver` screen and implement restart logic. diff --git a/TODO/GAL-6.md b/TODO/GAL-6.md deleted file mode 100644 index 248bce3..0000000 --- a/TODO/GAL-6.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-6 -title: Use Bevy's States (Playing, GameOver) -status: Done -parent: GAL-5 -labels: [gameplay, core-loop] ---- - -# GAL-6: Use Bevy's `States` (`Playing`, `GameOver`) - -Use Bevy's `States` (`Playing`, `GameOver`). diff --git a/TODO/GAL-7.md b/TODO/GAL-7.md deleted file mode 100644 index 77d1f79..0000000 --- a/TODO/GAL-7.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-7 -title: Transition to GameOver when lives reach zero -status: Done -parent: GAL-5 -labels: [gameplay, core-loop] ---- - -# GAL-7: Transition to `GameOver` when lives reach zero - -Transition to `GameOver` when lives reach zero. diff --git a/TODO/GAL-8.md b/TODO/GAL-8.md deleted file mode 100644 index c0cae44..0000000 --- a/TODO/GAL-8.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: GAL-8 -title: Display a Game Over message -status: Done -parent: GAL-5 -labels: [gameplay, core-loop] ---- - -# GAL-8: Display a "Game Over" message - -Display a "Game Over" message. diff --git a/TODO/GAL-9.md b/TODO/GAL-9.md deleted file mode 100644 index cb27db0..0000000 --- a/TODO/GAL-9.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: GAL-9 -title: Scoring -status: Done -parent: null -labels: [gameplay, core-loop] ---- - -# GAL-9: Scoring - -Add a score resource and increment when an enemy is destroyed. - -## Sub-issues - -- [x] [GAL-10](GAL-10.md) — Add a `Score` resource. -- [x] [GAL-11](GAL-11.md) — Increment score when an enemy is hit. diff --git a/TODO/README.md b/TODO/README.md deleted file mode 100644 index 854bcbc..0000000 --- a/TODO/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Project Issues - -Linear-style issue tracker for bglga. Each issue lives in its own `GAL-N.md` file in this folder. - -Statuses: `Todo`, `In Progress`, `Done`. - -## 1. Core Gameplay Loop & State Management - -- [x] [GAL-1](GAL-1.md) — Player Lives -- [x] [GAL-5](GAL-5.md) — Game Over State -- [x] [GAL-9](GAL-9.md) — Scoring -- [x] [GAL-12](GAL-12.md) — Levels/Stages - -## 2. Enemy Behavior — Formations & Attack Patterns - -- [x] [GAL-16](GAL-16.md) — Enemy Formations -- [x] [GAL-20](GAL-20.md) — Enemy Attack Dives -- [ ] [GAL-25](GAL-25.md) — Enemy Variety - -## 3. Advanced Galaga Mechanics - -- [ ] [GAL-28](GAL-28.md) — Boss Galaga & Capture Beam -- [ ] [GAL-34](GAL-34.md) — Dual Fighter (Rescuing Captured Ship) -- [ ] [GAL-38](GAL-38.md) — Challenging Stages - -## 4. Polish and User Interface - -- [ ] [GAL-42](GAL-42.md) — Visuals -- [ ] [GAL-46](GAL-46.md) — Audio -- [ ] [GAL-50](GAL-50.md) — UI diff --git a/src/bullet.rs b/src/bullet.rs index 2de568a..5481fb0 100644 --- a/src/bullet.rs +++ b/src/bullet.rs @@ -11,7 +11,7 @@ use crate::resources::{PlayerLives, PlayerRespawnTimer, Score}; use crate::systems::spawn_explosion; const GRUNT_POINTS: u32 = 100; -const BOSS_POINTS: u32 = 300; +const BOSS_POINTS: u32 = 100; // TODO(GAL-27): differentiate Boss from Grunt scoring pub fn move_bullets( mut query: Query<(Entity, &mut Transform), With>, diff --git a/src/constants.rs b/src/constants.rs index 42db1da..61828df 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -47,9 +47,6 @@ pub const BEAM_CORE_COLOR: Color = Color::srgba(0.7, 0.2, 1.0, 0.7); pub const BEAM_PULSE_FREQ: f32 = 3.0; pub const BEAM_PULSE_AMPLITUDE: f32 = 0.15; -// Special stages -pub const SPECIAL_STAGE_INTERVAL: u32 = 3; - // Starfield pub const STAR_COUNT: usize = 150; pub const STAR_MIN_SIZE: f32 = 1.0; diff --git a/src/enemy.rs b/src/enemy.rs index 20f59c8..2d7bee2 100644 --- a/src/enemy.rs +++ b/src/enemy.rs @@ -12,7 +12,6 @@ use crate::constants::{ }; use crate::resources::{ AttackDiveTimer, CurrentStage, EnemySpawnTimer, FormationState, StageConfigurations, - is_special_stage, }; const BOSS_BASE_CHANCE: f32 = 0.30; @@ -342,11 +341,7 @@ pub fn enemy_shoot( mut commands: Commands, time: Res