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.

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.

GameROM it needsSHA-1
Streets of RageStreets of Rage (World) (also sold as Bare Knuckle)3d74dbc81f3472a5bde45bf265e636a72a314667
Streets of Rage 2Streets of Rage 2 (USA)8b656eec9692d88bbbb84787142aa732b44ce0be
Streets of Rage 3Streets 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:

  1. Download Streets-of-Rage-Collection-Setup-<version>.exe from Releases and run it. If Windows warns about an unknown program, choose More info, then Run anyway.
  2. Pick the install folder (your user's Programs folder by default: no administrator rights needed).
  3. Pick your ROMs: .md, .bin, .gen or a .zip with 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.
  4. 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):

ActionKeyboardController (Xbox layout)
MoveArrowsD-pad (the left stick always works too)
A / B / CZ / X / CX / A / B
StartEnterStart
Rewind (hold)BackspaceLB
Fast-forward (hold)TabRB
Pause menuEscBack (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.