A physics-based FPV drone simulator that runs in the terminal. Written in Rust.
- Physics simulation — quaternion-based orientation, Betaflight-style rate curves, quadratic air drag
- Two render modes — HalfBlock (unicode characters, works everywhere) and Kitty Graphics Protocol (real pixels, double-buffered)
- Auto-detection — automatically selects Kitty graphics when running in a supported terminal (Kitty, WezTerm, Ghostty)
- Radio controller support — plug in a RadioMaster TX16S/TX15 or any USB gamepad (PS5, Xbox) via
gilrs - Per-controller axis profiles — axis mappings saved per controller name, auto-loaded on connect
- Keyboard controls — smoothed analog-style input from binary keys
- Procedural courses — randomly generated each time you play, with gates, pillars, walls, ramps, and obstacle clusters
- Collision detection — AABB-based obstacle collision with bounce/crash (gates are fly-through)
- Bitmap HUD — throttle, altitude, speed, flight timer, and render mode rendered as pixels into the framebuffer
- Sky gradient and fog — horizon-to-zenith sky gradient with distance-based fog
- Music — embedded MP3 soundtrack with mute toggle
- Near-plane clipping — Sutherland-Hodgman triangle clipping for close-up rendering
- Frustum culling — bounding sphere culling skips off-screen meshes
- Menu system — play, music toggle, axis mapping, and quit
| Key | Action |
|---|---|
W / S |
Throttle up / down |
A / D |
Yaw left / right |
I / K |
Pitch forward / back |
J / L |
Roll left / right |
R |
Reset after crash |
Tab |
Toggle render mode |
Esc |
Back to menu |
Plug in via USB. Default Mode 2 mapping:
- Left stick Y = throttle, X = yaw
- Right stick Y = pitch, X = roll
Axes can be remapped and inverted via the Axis Mapping screen in the menu. Mappings are saved per controller.
cargo run --releaseHalfBlock — uses ▀ characters with foreground/background colors. Works in any terminal with truecolor support.
Kitty Graphics Protocol — sends real pixel data to the terminal. Double-buffered for flicker-free rendering. Auto-selected when running in Kitty, WezTerm, or Ghostty. Reduce your terminal font size for higher resolution.
Music crafted specifically for this game.
