pedrocatalao/skyroads-mac

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

pedrocatalao.github.io/skyroads-sdl/
dos
game-port
gaming
linux
macos
retro-gaming
reverse-engineering
sdl2
skyroads
windows
Browse cluster: Cross-platform multimedia and native mobile development

README

SkyRoads app icon

SkyRoads SDL

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.

status macOS Linux Windows

Gameplay: flying and jumping on road one Title screen with CRT effects (F10)

Download

  • macOS — universal app (Apple Silicon & Intel). Unzip, move SkyRoads.app anywhere you like, and right-click → Open the first time (the app isn't notarized, so macOS asks once).
  • Linuxx86_64 · ARM64. 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).
  • Windowsx86_64 · ARM64. Unzip and double-click skyroads.exe — SDL2 and the runtime DLLs are bundled, nothing to install.

All downloads are self-contained — the freeware game data is included.

Build from source

macOS

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/.

Alternative: run from the terminal

cmake -S . -B build
cmake --build build --target skyroads
./build/skyroads ~/Downloads/skyroads-data

Linux

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.

Windows

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.)

Controls

KeyAction
← →steer
↑ ↓accelerate / brake
Spacejump
Enterselect (menus)
Ppause / unpause
Escabort road / back
F9music synth: AdLib FM (OPL2) / wavetable ("AWE32"-style, sampled instruments)
F10CRT effects on/off (scanlines, phosphor trails, smooth scaling)
Cmd-Ffullscreen

What's in this repo

  • src/ — the port:
    • render.c — C rewrite of the original 16-bit assembly 3D road renderer
    • game_play.c — the physics/collision/gameplay engine (bit-faithful fixed-point math)
    • assets.c, menus.c — data loaders, menu flow
    • compat.c — DOS runtime emulation (segment memory model, LZSS decompressor, file I/O)
    • platform.c — SDL2 window/input/timing
    • audio.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 renderer
  • make_mac.sh — builds the signed SkyRoads.app bundle
  • make_linux.sh — builds the skyroads binary on Linux
  • get_data.sh — fetches the freeware game data + soundfont (shared by the build scripts, or run standalone)

Roadmap

Ideas being considered — no promises, no dates. Opinions and requests are welcome as issues.

  • Online leaderboards — per-road finish times, plus efficiency boards (least fuel / oxygen used)
  • More visual effects — building on the CRT mode (scanlines and phosphor trails are in already)
  • Gamepad support
  • High-resolution road rendering — regenerating the renderer's perspective geometry at 2–4× (the original art stays pixel-perfect)
  • Demo/attract mode — the original's recorded demo playback, not yet ported

Troubleshooting

  • "required data file … not found" — the path you gave 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.
  • CMake can't find SDL2brew install sdl2, then delete build/ and rebuild.
  • Intel Macs — the app is a universal binary and runs natively on Intel too (x86_64 slice verified under Rosetta).
  • SkyRoads was created by Bluemoon Interactive (Ahti Heinla, Jaan Tallinn, and team). All game content, art, music and the original design are theirs. This is an unofficial fan port, not affiliated with or endorsed by Bluemoon; the game itself is distributed by Bluemoon as freeware.
  • Linux support contributions by Timár Csaba (@xcom169).
  • OPL2 FM synthesis via Nuked-OPL3 (Nuke.YKT), LGPL-2.1 — see src/opl3.c for its license header.
  • Wavetable music mode via TinySoundFont (MIT) playing the TimGM6mb SoundFont (GPL, Tim Brechbill), fetched by get_data.sh — the instrument mapping was reconstructed from the original Sound Club song sources.
  • Licensing is mixed by necessity — the original code is Bluemoon's and carries no open-source license; the port's own scripts and docs are MIT. Details in LICENSE.

Contributors

pedrocatalao

82 commits

xcom169

2 commits

pedrocatalao/skyroads-mac

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

pedrocatalao.github.io/skyroads-sdl/
dos
game-port
gaming
linux
macos
retro-gaming
reverse-engineering
sdl2
skyroads
windows
Browse cluster: Cross-platform multimedia and native mobile development

README

SkyRoads app icon

SkyRoads SDL

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.

status macOS Linux Windows

Gameplay: flying and jumping on road one Title screen with CRT effects (F10)

Download

  • macOS — universal app (Apple Silicon & Intel). Unzip, move SkyRoads.app anywhere you like, and right-click → Open the first time (the app isn't notarized, so macOS asks once).
  • Linuxx86_64 · ARM64. 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).
  • Windowsx86_64 · ARM64. Unzip and double-click skyroads.exe — SDL2 and the runtime DLLs are bundled, nothing to install.

All downloads are self-contained — the freeware game data is included.

Build from source

macOS

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/.

Alternative: run from the terminal

cmake -S . -B build
cmake --build build --target skyroads
./build/skyroads ~/Downloads/skyroads-data

Linux

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.

Windows

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.)

Controls

KeyAction
← →steer
↑ ↓accelerate / brake
Spacejump
Enterselect (menus)
Ppause / unpause
Escabort road / back
F9music synth: AdLib FM (OPL2) / wavetable ("AWE32"-style, sampled instruments)
F10CRT effects on/off (scanlines, phosphor trails, smooth scaling)
Cmd-Ffullscreen

What's in this repo

  • src/ — the port:
    • render.c — C rewrite of the original 16-bit assembly 3D road renderer
    • game_play.c — the physics/collision/gameplay engine (bit-faithful fixed-point math)
    • assets.c, menus.c — data loaders, menu flow
    • compat.c — DOS runtime emulation (segment memory model, LZSS decompressor, file I/O)
    • platform.c — SDL2 window/input/timing
    • audio.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 renderer
  • make_mac.sh — builds the signed SkyRoads.app bundle
  • make_linux.sh — builds the skyroads binary on Linux
  • get_data.sh — fetches the freeware game data + soundfont (shared by the build scripts, or run standalone)

Roadmap

Ideas being considered — no promises, no dates. Opinions and requests are welcome as issues.

  • Online leaderboards — per-road finish times, plus efficiency boards (least fuel / oxygen used)
  • More visual effects — building on the CRT mode (scanlines and phosphor trails are in already)
  • Gamepad support
  • High-resolution road rendering — regenerating the renderer's perspective geometry at 2–4× (the original art stays pixel-perfect)
  • Demo/attract mode — the original's recorded demo playback, not yet ported

Troubleshooting

  • "required data file … not found" — the path you gave 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.
  • CMake can't find SDL2brew install sdl2, then delete build/ and rebuild.
  • Intel Macs — the app is a universal binary and runs natively on Intel too (x86_64 slice verified under Rosetta).
  • SkyRoads was created by Bluemoon Interactive (Ahti Heinla, Jaan Tallinn, and team). All game content, art, music and the original design are theirs. This is an unofficial fan port, not affiliated with or endorsed by Bluemoon; the game itself is distributed by Bluemoon as freeware.
  • Linux support contributions by Timár Csaba (@xcom169).
  • OPL2 FM synthesis via Nuked-OPL3 (Nuke.YKT), LGPL-2.1 — see src/opl3.c for its license header.
  • Wavetable music mode via TinySoundFont (MIT) playing the TimGM6mb SoundFont (GPL, Tim Brechbill), fetched by get_data.sh — the instrument mapping was reconstructed from the original Sound Club song sources.
  • Licensing is mixed by necessity — the original code is Bluemoon's and carries no open-source license; the port's own scripts and docs are MIT. Details in LICENSE.

Contributors

pedrocatalao

82 commits

xcom169

2 commits

Languages

C

95.0%

Shell

2.5%

Python

1.7%