Streets of Rage Collection Recomp
Streets of Rage Collection is a native PC port of Streets of Rage, Streets of Rage 2 and Streets of Rage 3 with widescreen, high frame rate and internal resolution upscaling.
- Type: PC port
- Game: Streets of Rage, Streets of Rage 2, Streets of Rage 3
- Runs on Windows
- By OriginalSwayze
- Latest release v2.0, 2026-11-01
- Source: https://github.com/OriginalSwayze/Streets-Of-Rage-Recomp
README
Streets of Rage Collection
Native PC ports of Streets of Rage, Streets of Rage 2 and Streets of Rage 3 (Sega Genesis / Mega Drive) in one collection, each built from your own ROM. No game data is included in this repository: every tool reads your ROM and checks its SHA-1.
| Game | ROM it needs | SHA-1 |
|---|---|---|
| Streets of Rage | Streets of Rage (World) (also sold as Bare Knuckle) | 3d74dbc81f3472a5bde45bf265e636a72a314667 |
| Streets of Rage 2 | Streets of Rage 2 (USA) | 8b656eec9692d88bbbb84787142aa732b44ce0be |
| Streets of Rage 3 | Streets of Rage 3 (USA) | 40a33dd6f9dab0aff26c7525c9b8f342482c7af6 |
They are static recompilations, not decompilations: at build time each game's 68000 machine code is translated into C from your ROM, and anything not yet covered runs on an interpreter. To play, see Playing it.
The engine comes from Beyond Oasis Recomp: the recompiler, the Genesis hardware, the renderer, the pause menu, save states and rewind work for any cartridge. Each game's own addresses (its objects, health, camera, sound driver) are mapped in docs/ram.md, docs/ram-sor2.md and docs/ram-sor3.md.
Playing it
You need your own ROMs. They are not included and never will be, and there are no ready-made game programs to download: a built game contains the game's own code, translated to C, so it can only be made on your PC from your copy. Setup does that for you:
- Download
Streets-of-Rage-Collection-Setup-<version>.exefrom Releases and run it. If Windows warns about an unknown program, choose More info, then Run anyway. - Pick the install folder (your user's Programs folder by default: no administrator rights needed).
- Pick your ROMs:
.md,.bin,.genor a.zipwith one inside. Each is checked as you pick it (a ROM picked for the wrong game moves to the right one). Skip any game you do not have; run Setup again later to add it. - Setup downloads the build tools it needs into the install folder, unless they are already on your PC: Node.js, CMake, Ninja and LLVM-MinGW (Clang), about 260 MB, each from its publisher's own release and checked against a pinned SHA-256. It then builds each game from its ROM (a few minutes each) and adds the collection to the Start menu (and the desktop, if you like).
Streets of Rage Collection opens on the three games. Each has its own launcher, themed
after the game, with its settings, its soundtrack and its fighters' colours; its settings,
saves and save states live in the install folder's games\<game> folder. To add a game,
rebuild, or remove the collection: Settings > Apps > Streets of Rage Collection (Modify runs
Setup again; Uninstall can keep your saves).
What it adds
In all three games:
- Widescreen (16:9 and other shapes), with the play area widened to match: the players walk to the new edges and enemies walk in from beyond them
- High frame rate: drawn at your screen's refresh rate (120, 144 Hz or more), the scrolling and every sprite gliding between the game's 60 updates
- Internal resolution up to 6x with dither-aware scalers (Edge, Smooth/xBR, Sharp), sharpening, integer scaling and CRT, scanline and LCD filters
- Neon glow (the scenery's signs and lamps light up) and an HDR look
- AI partner for player 2, or a second controller (in Streets of Rage 2, pick 2 PLAYERS)
- Cheats: infinite health and lives, attack power up to one-hit kills; the timer and the specials where the game has them
- Combat info (damage numbers, enemy health bars), rumble, a play timer and stats
- Fighters' colours: every playable fighter's clothes, hair and skin in any of the Genesis' 512 colours, still or animated, with a live preview
- Save states, rewind, fast-forward, a slowdown fix and a sprite flicker fix
- A launcher and pause menu in each game's own colours, with its own music and sounds
Testing
The native build of each game must behave exactly like the interpreter:
StreetsOfRage2.exe --headless 4000 --press <script> --hash-log a.log
StreetsOfRage2.exe --headless 4000 --press <script> --hash-log b.log --interpret
# a.log and b.log must be identical
--press takes a script (frame:buttons:frames,..., e.g. 300:S,500:S,1700:R:400) to play
past the title. Widescreen and the cheats change the game on purpose (their patches only run
natively); with them off every game matches the interpreter frame for frame.
New code is found by playing: the runtime records every instruction it runs in
coverage.bin, and node tools/save-coverage.mjs --game <name> adds it to the game's
coverage.txt, so every build recompiles it.
Building by hand
Setup does all of this. By hand, you need:
- Windows 10 or 11 (the menus draw their text with Windows' fonts)
- Git, Node.js 18 or newer, CMake 3.20 or newer, Ninja and Clang (LLVM-MinGW)
- Your own ROMs (above)
Clone with the submodules (the third-party code below):
git clone --recursive <this repository's URL>
Then, for each game (sor1, sor2, sor3), in the repository's folder:
node tools/setup.mjs --game sor2 "<path to its ROM>"
GAME=sor2 node tools/disasm.mjs
cmake -S . -B build/sor2 -G Ninja -DGAME=sor2 -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
cmake --build build/sor2
Each game's folder in games/ holds its ROM's details and features (game.json), the
patches at its own addresses (patches.json), extra code entry points (entries.json) and
the code seen running in play (coverage.txt). build/sor1 also builds the collection's
front end (Streets of Rage Collection.exe) and the installer (Setup.exe);
tools/install.ps1 is what Setup runs.
Default controls (all remappable in the pause menu's Controls page):
| Action | Keyboard | Controller (Xbox layout) |
|---|---|---|
| Move | Arrows | D-pad (the left stick always works too) |
| A / B / C | Z / X / C | X / A / B |
| Start | Enter | Start |
| Rewind (hold) | Backspace | LB |
| Fast-forward (hold) | Tab | RB |
| Pause menu | Esc | Back (Guide and Esc always work too) |
Fixed keys: F2 save state, F4 load, F6/F7 previous/next slot (1-9, files in states/),
F11 fullscreen.
Third-party code
- Musashi (MIT): 68000 interpreter fallback
- SDL2 (zlib): window, input, audio
- z80 (MIT): Z80 sound CPU
- ymfm (BSD-3-Clause): YM2612 FM synthesis
License and legal
The code in this repository (the runtime, tools and installer) is under the MIT License: see LICENSE. The third-party code above keeps its own licenses.
This is an unofficial fan project, not affiliated with or endorsed by Sega. Streets of Rage, Bare Knuckle and Sega are trademarks of Sega Corporation. No part of the games (code, graphics, music or text) is included: you need your own copies, and everything made from them stays on your computer.