- C++ 98.6%
- CMake 1.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Give the repository front page a proper identity: - assets/logo.svg: hand-drawn vector logo (680x200) - dark sky gradient with horizon, stars and sun glow, a low-poly side-view aircraft with the livery's orange fin/wingtip and spinning prop disc, speed lines, ground shadow, and the AeroCade wordmark with an orange SIM badge. Committed in-tree so the README does not depend on external hosts. - assets/screenshot.jpg: real engine capture (in flight at 136 kt / 1446 ft, full HUD) as the hero image, replacing the accidental placeholder that pointed at docs/ARCHITECTURE.md as an image. - shields.io badges: C++20, CMake 3.24+, OpenGL 4.6 core / 3.3+ fallback, vendored GLFW 3.4, Linux X11/Wayland platform, 120 Hz fixed-step physics, 24/24 selftest passing, release v0.1.0. - README content restructured: centered header block, short overview paragraph, tables for debug flags, a Versioning section pointing at CHANGELOG.md and SemVer tags, and the existing build/controls/feature sections kept (English throughout). Note: the Gitea release badge endpoint (https://git.dietzlabs.net/Tronax/AeroCade-Sim/badges/release.svg) already answers, but shows "Not found" until a release object is created from the v0.1.0 tag in the web UI; the static badge can be swapped for it then. |
||
| assets | ||
| config | ||
| docs | ||
| selftest | ||
| src | ||
| third_party/glfw | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CMakeLists.txt | ||
| README.md | ||
A keyboard-first SimCade flight simulator — GTA V-style handling, a procedural 16×16 km world, and a spring-damper chase cam.
In flight at 136 kt / 1446 ft — compass tape, pitch ladder and instrument HUD, rendered entirely by the engine's own code paths.
Overview
AeroCade Sim is a native C++20 flight simulator that trades hardcore systems depth for instant, low-friction fun: responsive keyboard flying with smoothed analog response, forgiving ground handling, aerobatic authority (360° rolls in 1.5 s), and an optional auto-level assist that catches the aircraft when you let go. The world is fully procedural — no asset downloads — and the whole renderer is written by hand on top of OpenGL 4.6 core with a vendored GLFW, so the only external dependencies are GLM headers and a working GPU driver.
Build & run
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/aerocade_sim # game window
./build/aerocade_selftest # headless physics validation (24 checks)
Requirements: a C++20 compiler, CMake ≥ 3.24, Ninja or Make, GLFW's system dependencies (X11 and/or Wayland dev packages), GLM headers, and an OpenGL 3.3+ driver. GLFW itself is vendored — nothing else to install.
Controls (GTA V standard, keyboard-first)
| Input | Key |
|---|---|
| Throttle up / down (airbrake at idle, wheel brake on ground) | W / S |
| Rudder left / right | A / D |
| Pitch down / up | Numpad 8 / Numpad 5 |
| Roll left / right | Numpad 4 / Numpad 6 |
| Landing gear | G |
| Camera cycle (chase / far / cockpit) | V |
| Auto-level assist | T |
| Orbit camera | Mouse or KP7/KP9/KP1/KP3 |
| Toggle NUMPAD ↔ TKL layout | F9 |
| Reload configs | F5 |
| Reset to runway / pause | R / P |
| Debug overlay (fps, pos, AoA, G) | F3 |
| Free cursor / recapture | Esc / click |
The TKL profile (F9) flies with the arrow keys — yoke-style, Up = push =
nose down, mirroring the numpad profile's geometry — with Q/E/Z/C as
camera orbit. Every action is remappable in config/controls.cfg
(both profiles, plus analog shaping: attack/release rates, sensitivity,
expo, deadband). config/settings.cfg covers
resolution, vsync/fps cap, physics rate, base FOV, sun position, fog and
terrain seed.
Feature map
- Flight model — lift
Cl(α)with smooth stall, induced + parasitic drag with a hard rise near Vmax, speed-lapsed prop thrust, weathervane stability, toggleable auto-level assist (bank-level + pitch-hold + climb-arrest), wheel spring/damper/brake/steering ground model, gear state machine (UP / DOWN / TRANSIT) with belly contact, gust turbulence. - Sim loop — fixed 120 Hz accumulator, decoupled render with per-system interpolation; thread pool for terrain generation.
- Camera — second-order spring-damper chase rig with partial bank follow, bank slide, velocity look-ahead, dynamic FOV, orbit with auto-recenter, procedural shake, cockpit mode.
- World — procedural heightfield (fbm hills, ridged mountains, flattened runway apron); the GPU mesh and CPU collision read the exact same data, so wheels can never float or sink.
- HUD — pitch ladder, compass tape, IAS in kt/km-h, altitude ft + VS fpm, throttle, gear, assist/profile/camera indicators, event messages, stall warning.
Debug flags
| Flag | Effect |
|---|---|
--screenshot N:path |
render N frames, save a BMP, exit |
AC_AIR_START=<meters> |
spawn airborne instead of on the runway |
F3 in game |
fps, position, AoA, G-load overlay |
Project layout
docs/ARCHITECTURE.md module breakdown, conventions, extension points
assets/ logo + hero screenshot
config/ settings.cfg, controls.cfg (hot-reloadable)
src/core log, config parser, math, noise, thread pool
src/input platform-neutral keys, InputManager + profiles
src/physics FlightModel, TerrainWorld (shared heightfield)
src/camera CameraController (spring rig)
src/game World (sim orchestrator), Engine (window + loop)
src/render GL loader, shaders, terrain quadtree, aircraft, HUD
src/audio AudioEngine interface + null backend
selftest/ headless scenario tests (takeoff → landing)
Versioning
Releases are tagged vX.Y.Z following Semantic Versioning;
every notable change is recorded in CHANGELOG.md. The latest
tag: v0.1.0 (initial playable release).
Roadmap
Multi-draw-indirect terrain path, compute-based weather particles, cascaded
shadow maps, velocity-buffer motion blur + speed lines, a real audio backend
(the AudioEngine interface and cue points already exist), and a Vulkan
backend behind the same render/ interface. Deep dive:
docs/ARCHITECTURE.md.