OpenRF
Return Fire (1996), reimplemented natively from the original executable
GitHub · Website, user guide & internals · Download

About
Return Fire is Silent Software's 1995 capture-the-flag game: an island, two bunkers, four vehicles, a flag hidden in one of the enemy's buildings, and Wagner playing while you look for it. The Windows 95 edition from 1996 is a port of the 3DO original, and it doesn't run on anything current without Wine or a virtual machine.
OpenRF is a from-scratch reimplementation in C11 and SDL3. It isn't an emulator or a wrapper: every subsystem was reverse engineered from RFIRE.BIN, the real game executable on the CD (RFIRE.EXE only picks a language DLL), and rewritten function by function in the same 16.16 fixed-point maths. Each ported function cites the original address it came from.
Bring your own CD
OpenRF ships no original code, assets or data. The sprites, maps, movies, sound effects and the 223 MB orchestral score are read from the disc at runtime. So are the tables inside the executable itself: 3D model geometry, vehicle descriptors, explosion scripts and the sound event table are loaded from the user's RFIRE.BIN after a CRC check, instead of being copied into the source tree.
What the original turned out to be
| Piece | What it is |
|---|---|
| Renderer | A software emulation of the 3DO cel engine drawing into an 8-bit DirectDraw surface. Floor tiles are perspective trapezoids; buildings and vehicles are 3D models built from textured quads, depth-sorted in 64 yaw steps |
| Resolution | Everything is laid out in 320×240; "hi-res" is the same art rasterised at 2× |
| Sprites | ART.CAR: 2,165 3DO Cel Control Blocks. Pixel values index the DirectDraw palette, which is the art palette shifted up by the 10 colours Windows reserves |
| Maps | 204 levels in .RFM files, 128×128 cells, 91 building types with their developer names still in the executable |
| Movies | .STM: an AVI pre-interleaved into 64 KB blocks for CD streaming — Cinepak video slaved to the audio clock |
| Music | 18 tracks as byte ranges into one WAV, picked by a priority-based director. Tank and helicopter themes switch between variants without restarting the stream |
| Timing | No fixed tick: every frame advances by the whole number of 16 ms ticks that elapsed, capped at 12 |
Verification
A Python reference renderer was written from the decompilation first, and the C renderer has to match it pixel for pixel: 7 fixed scenes and 150 random ones, 0 mismatches. Every other subsystem has a headless test that runs the real engine code against the original data — vehicles, collision and water, weapons and damage, the sound mixer, turrets, drones and the submarine, the flag rules, and two-player split screen. Refactors are checked by byte-identical test output and identical in-game frames before and after.
Status
| Intro and victory movies, title screen, music, sound effects | Done |
| Renderer, 3D models, HUD, radar, bunker lift | Done |
| All four vehicles, weapons, explosions, damage | Done |
| Turrets, drone, submarine, soldiers, gates, flag, mines, win/loss, high scores | Done |
| Two-player split screen | Done |
| Platforms | macOS 11+ universal (Apple Silicon and Intel) today; Windows and Linux planned |
| Next | Online two-player: deterministic lockstep through swsrs |
GPL-3.0. Return Fire is © 1995–1996 Silent Software / Prolific Publishing.
