A top-down bullet-hell action game built with Bevy 0.18 and Rust 2024.
Fight through waves of increasingly dangerous enemies, unlock boss arenas, and race to the top of the map as fast as possible. Your completion time is saved to a local leaderboard.
Navigate a vertically scrolling map, shooting enemies and bosses that block your path. Four distinct bosses guard checkpoints — defeat them (or destroy their gate switches) to advance. Reach the summit to win.
| Input | Action |
|---|---|
W / A / S / D or Arrow keys |
Move |
| Mouse | Aim |
| Left mouse button | Shoot |
E |
Cycle weapon forward |
Q |
Cycle weapon backward |
Space |
Use ability |
Escape |
Pause / Resume |
Choose your class from the main menu. Each class has unique stats and a different set of three weapons.
| Class | HP | Speed | HP Regen | Mana | Playstyle |
|---|---|---|---|---|---|
| Rogue | 1 400 | Fast | 60/s | 800 | Aggressive all-rounder |
| Warrior | 2 200 | Medium | 80/s | 400 | Tank, close-range brawler |
| Mage | 900 | Medium | 40/s | 1 300 | High mana, burst damage |
| Sniper | 1 050 | Slow | 50/s | 300 | Long-range, precise shots |
Each class carries three weapons cycled with Q and E.
| Class | Weapon 1 | Weapon 2 | Weapon 3 |
|---|---|---|---|
| Rogue | Default | High-damage | Piercing |
| Warrior | Default | Stationary blast | Piercing |
| Mage | Default | Rapid-fire | Piercing |
| Sniper | Default | Boomerang | Accelerating |
Choose one ability before starting. Activate it with Space; each use costs mana and has a short cooldown.
| Ability | Effect |
|---|---|
| Iframe | Brief window of complete invulnerability |
| Speedy | Temporary movement-speed boost |
| Heal | Instantly restores a portion of HP |
| Damaging | Empowers your bullets for increased damage |
| Enemy | Description |
|---|---|
| Bandit | Basic melee attacker |
| Bandit (Buffed) | Tougher variant with increased HP and damage |
| Crusader | Armoured enemy with higher resistance |
| Aimer Lv.1 / Lv.2 | Ranged enemy that aims directly at the player |
| Dasher Lv.1 / Lv.2 | Charges toward the player and fires at point-blank range |
| Predictor Lv.1 / Lv.2 | Leads the shot, firing where the player is heading |
Four boss encounters block progression through the map. Each boss arena is sealed on entry; the exit only opens once the boss is defeated.
- Rust (stable, edition 2024)
- Platform dependencies for Bevy — see the Bevy setup guide
# Debug build
cargo run
# Release build (recommended for playing)
cargo build --release
./target/release/starfallrustup target add wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknown --releaseServe the resulting .wasm file with any static file server alongside a suitable HTML shell.
| Flag | Effect |
|---|---|
testing_utils |
Starts the player as permanently invulnerable and fast; adds extra test weapons |
cargo run --features testing_utilsCompletion runs are saved locally. The leaderboard records your time, class, and ability choice. Access it from the main menu.
src/
├── main.rs — App entry point and plugin registration
├── constants.rs — Shared constants (tile size, colours, costs)
├── bullet/ — Bullet spawning, movement, and collision
├── entities/
│ ├── bosses/ — Boss AI and arena logic (boss1–boss4)
│ ├── enemies/ — Enemy types (aimers, bandits, dashers, predictors, …)
│ ├── health.rs — Health component and HP bar rendering
│ ├── spawn.rs — Generic enemy spawn helper
│ └── …
├── map/ — LDtk world loading and terrain collision
├── player/ — Player movement, shooting, abilities, mana, camera
├── states/ — Game states (splash, menu, pause, death, won, leaderboard)
└── stats/ — Shared stat components (speed, regen, status effects)
This project is provided as-is for educational purposes.