Static recompilation — running in your browser
Three things, stated plainly.
Accepting this records, in this browser, that you have read it. It is not a licence, it grants you no rights, and it does not make anything lawful that would not otherwise be. If you do not own the game, close this page.
One time on this device. It never leaves your browser.
sfight.zip hereThe game’s code and art are not ours to distribute. What this project produced is an engine: the arcade board’s program was translated into C ahead of time, and the hardware around it was modelled. The engine is useless without the board’s ROM data, and that data is still SEGA’s.
So the site serves the engine and you supply the data. That is the only arrangement that is honest, and it is enforced in more than one place: the page reads your file with the browser’s own file API and never sends it anywhere, there is no endpoint on the server that accepts an upload, and the server refuses outright to serve any file that looks like ROM data — even one an operator dropped into the site directory by mistake.
You can check this yourself: open your browser’s network panel and watch while the file is processed. Nothing leaves. You can also turn off your network connection first — once the page has loaded, the whole process works offline.
Every chip in the set is verified by size, CRC32 and MD5 against the
same table tools/build_rom.py uses, and the eight images
the engine loads are then checked against the MD5 that tool produces.
A member that fails is named, with what was expected and what was
found. A chip that is missing is named. A set that is simply the
wrong game is told so rather than being reported as a missing file.
The built images are kept in this browser’s own storage for this site only. Removing them is one button, above, and clearing site data in your browser settings does the same thing.
These are the browser shell’s settings. Key bindings, netplay, video and audio live in the game’s own menu — .
A browser only reveals a gamepad after you press a button on it. If the list is empty, press something.
Two fingers tapped together on the picture also opens the game’s menu, if the MENU button is in your way.
Two players, connected directly to each other — the other one may be in a browser like this or on a desktop cabinet, and either way you do not have to choose. The server here only introduces you; once you are connected, the game data goes peer to peer.
Give the same room code to the other player — whoever gets there first is player 1. Quick match pairs you with anyone else waiting who has the same game settings. Always use the relay keeps your IP address away from the other player, at the cost of some extra delay.
Starting a match reloads this page. That is on purpose: the game engine has to be told which side it is on before its first frame, and only the server can decide that. Your game data stays on this device and is not fetched again.
You can play people in a browser or on the desktop build. The desktop cabinet speaks the same WebRTC data channel this page does when it is pointed at this server, so a cross-play match is peer to peer like any other — nothing is relayed through the middle. It is the same game, the same rollback and the same input delay on both sides.