Native cross-platform port of SkyRoads (1993), the classic DOS space racer, rewritten in C + SDL2. Runs on macOS, Linux and Windows.
29
stars
84
commits
C
primary language
Sep 4, 2026
updated
A native, cross-platform port of SkyRoads (Bluemoon Interactive, 1993) — the classic DOS space racer — rewritten in portable C with SDL2. Runs natively on macOS (Apple Silicon & Intel, universal binary), Linux and Windows (x86_64 & ARM64). No emulation, no DOSBox.
SkyRoads.app anywhere
you like, and right-click → Open the first time (the app isn't
notarized, so macOS asks once).tar -xzf skyroads-linux-*.tar.gz && cd skyroads && ./skyroads — no
packages to install (SDL2 is bundled; built on Ubuntu 24.04, needs a
comparably recent glibc).skyroads.exe — SDL2 and the runtime DLLs are
bundled, nothing to install.All downloads are self-contained — the freeware game data is included.
brew install cmake sdl2
git clone https://github.com/pedrocatalao/skyroads-sdl.git
cd skyroads-sdl
./make_mac.sh # fetches the freeware game data, then builds the app
open build/SkyRoads.app
That's it. If the game data isn't in ./data yet, get_data.sh fetches it
automatically from Bluemoon's official site (the game is their freeware and
is not part of this repo); make_mac.sh then builds a self-contained app
bundle around it.
Already have the game files? Point make_mac.sh at your folder —
DOS-style uppercase filenames (ROADS.LZS) are fine:
./make_mac.sh ~/Downloads/skyroads-data
The app is self-contained (game data is copied into the bundle) — you can move
it to /Applications. Progress and settings are saved to
~/Library/Application Support/.
cmake -S . -B build
cmake --build build --target skyroads
./build/skyroads ~/Downloads/skyroads-data
sudo apt install build-essential cmake libsdl2-dev curl unzip # or your distro's equivalent
git clone https://github.com/pedrocatalao/skyroads-sdl.git
cd skyroads-sdl
./make_linux.sh # fetches the freeware game data, then builds
./build/skyroads
Verified on Ubuntu (x86_64 and ARM64); prebuilt binaries for both are on the releases page.
Install MSYS2, open the MSYS2 UCRT64 shell (or CLANGARM64 on ARM machines) and:
pacman -S --needed git curl unzip mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-SDL2
git clone https://github.com/pedrocatalao/skyroads-sdl.git
cd skyroads-sdl
./get_data.sh data
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target skyroads
./build/skyroads.exe
(On ARM, use the mingw-w64-clang-aarch64-* package names instead.)
| Key | Action |
|---|---|
| ← → | steer |
| ↑ ↓ | accelerate / brake |
| Space | jump |
| Enter | select (menus) |
| P | pause / unpause |
| Esc | abort road / back |
| F9 | music synth: AdLib FM (OPL2) / wavetable ("AWE32"-style, sampled instruments) |
| F10 | CRT effects on/off (scanlines, phosphor trails, smooth scaling) |
| Cmd-F | fullscreen |
src/ — the port:
render.c — C rewrite of the original 16-bit assembly 3D road renderergame_play.c — the physics/collision/gameplay engine (bit-faithful
fixed-point math)assets.c, menus.c — data loaders, menu flowcompat.c — DOS runtime emulation (segment memory model, LZSS
decompressor, file I/O)platform.c — SDL2 window/input/timingaudio.c — The original AdLib music driver (adlib.asm) ported to C:
drives either a software OPL2 FM
chip (Nuked-OPL3) or a
SoundFont wavetable synth (TimGM6mb) mapped to MIDI instruments; plus the SoundBlaster digitized sound effects (sfx.snd)docs/trek_blueprint.md — reverse-engineering notes on the original
renderermake_mac.sh — builds the signed SkyRoads.app bundlemake_linux.sh — builds the skyroads binary on Linuxget_data.sh — fetches the freeware game data + soundfont (shared by the
build scripts, or run standalone)Ideas being considered — no promises, no dates. Opinions and requests are welcome as issues.
make_mac.sh must
contain the SkyRoads data files (trekdat.lzs, roads.lzs, world*.lzs,
…). Point it at the folder where you unzipped the freeware download.brew install sdl2, then delete
build/ and rebuild.src/opl3.c for its license header.get_data.sh — the instrument mapping was
reconstructed from the original Sound Club song sources.82 commits
2 commits
C
95.0%
Shell
2.5%
Python
1.7%
Native cross-platform port of SkyRoads (1993), the classic DOS space racer, rewritten in C + SDL2. Runs on macOS, Linux and Windows.
29
stars
84
commits
C
primary language
Sep 4, 2026
updated
A native, cross-platform port of SkyRoads (Bluemoon Interactive, 1993) — the classic DOS space racer — rewritten in portable C with SDL2. Runs natively on macOS (Apple Silicon & Intel, universal binary), Linux and Windows (x86_64 & ARM64). No emulation, no DOSBox.
SkyRoads.app anywhere
you like, and right-click → Open the first time (the app isn't
notarized, so macOS asks once).tar -xzf skyroads-linux-*.tar.gz && cd skyroads && ./skyroads — no
packages to install (SDL2 is bundled; built on Ubuntu 24.04, needs a
comparably recent glibc).skyroads.exe — SDL2 and the runtime DLLs are
bundled, nothing to install.All downloads are self-contained — the freeware game data is included.
brew install cmake sdl2
git clone https://github.com/pedrocatalao/skyroads-sdl.git
cd skyroads-sdl
./make_mac.sh # fetches the freeware game data, then builds the app
open build/SkyRoads.app
That's it. If the game data isn't in ./data yet, get_data.sh fetches it
automatically from Bluemoon's official site (the game is their freeware and
is not part of this repo); make_mac.sh then builds a self-contained app
bundle around it.
Already have the game files? Point make_mac.sh at your folder —
DOS-style uppercase filenames (ROADS.LZS) are fine:
./make_mac.sh ~/Downloads/skyroads-data
The app is self-contained (game data is copied into the bundle) — you can move
it to /Applications. Progress and settings are saved to
~/Library/Application Support/.
cmake -S . -B build
cmake --build build --target skyroads
./build/skyroads ~/Downloads/skyroads-data
sudo apt install build-essential cmake libsdl2-dev curl unzip # or your distro's equivalent
git clone https://github.com/pedrocatalao/skyroads-sdl.git
cd skyroads-sdl
./make_linux.sh # fetches the freeware game data, then builds
./build/skyroads
Verified on Ubuntu (x86_64 and ARM64); prebuilt binaries for both are on the releases page.
Install MSYS2, open the MSYS2 UCRT64 shell (or CLANGARM64 on ARM machines) and:
pacman -S --needed git curl unzip mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-SDL2
git clone https://github.com/pedrocatalao/skyroads-sdl.git
cd skyroads-sdl
./get_data.sh data
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target skyroads
./build/skyroads.exe
(On ARM, use the mingw-w64-clang-aarch64-* package names instead.)
| Key | Action |
|---|---|
| ← → | steer |
| ↑ ↓ | accelerate / brake |
| Space | jump |
| Enter | select (menus) |
| P | pause / unpause |
| Esc | abort road / back |
| F9 | music synth: AdLib FM (OPL2) / wavetable ("AWE32"-style, sampled instruments) |
| F10 | CRT effects on/off (scanlines, phosphor trails, smooth scaling) |
| Cmd-F | fullscreen |
src/ — the port:
render.c — C rewrite of the original 16-bit assembly 3D road renderergame_play.c — the physics/collision/gameplay engine (bit-faithful
fixed-point math)assets.c, menus.c — data loaders, menu flowcompat.c — DOS runtime emulation (segment memory model, LZSS
decompressor, file I/O)platform.c — SDL2 window/input/timingaudio.c — The original AdLib music driver (adlib.asm) ported to C:
drives either a software OPL2 FM
chip (Nuked-OPL3) or a
SoundFont wavetable synth (TimGM6mb) mapped to MIDI instruments; plus the SoundBlaster digitized sound effects (sfx.snd)docs/trek_blueprint.md — reverse-engineering notes on the original
renderermake_mac.sh — builds the signed SkyRoads.app bundlemake_linux.sh — builds the skyroads binary on Linuxget_data.sh — fetches the freeware game data + soundfont (shared by the
build scripts, or run standalone)Ideas being considered — no promises, no dates. Opinions and requests are welcome as issues.
make_mac.sh must
contain the SkyRoads data files (trekdat.lzs, roads.lzs, world*.lzs,
…). Point it at the folder where you unzipped the freeware download.brew install sdl2, then delete
build/ and rebuild.src/opl3.c for its license header.get_data.sh — the instrument mapping was
reconstructed from the original Sound Club song sources.82 commits
2 commits
C
95.0%
Shell
2.5%
Python
1.7%