Releases: fabeloper/sf4e
Release list
SF4Enhanced 1.0.2 — lobby fixes, cleaner sound, early Fixed warning
Lobby fixes from your feedback, cleaner sound under rollback, and a warning before a desync instead of after. Both players need this version.
Lobby
- B takes your ready back instead of leaving the lobby, so you can counterpick, change the ultra or the stage, and ready again. Leaving is the LEAVE LOBBY button.
- The lobby screen says PUBLIC or PRIVATE under its title.
- The score on the match-over screen is this lobby's score and starts at 0-0 when you create or join one.
- How many people are around: the online menu shows how many are playing and how many are looking at the list on your server, and the public list shows the same across every region. So you know whether opening a lobby is likely to find someone.
Sound under rollback
- A hit sound no longer stops and restarts when a rollback replays the frame it started on.
- Sounds that should keep playing are no longer cut by a rollback.
- Two identical sounds at once no longer cut each other off.
- Fixed a crash after several rematches in a row, caused by sound bookkeeping carried over from the previous battle.
- Removed a leftover debug popup in the sound code that could freeze the game.
These fixes were worked out by the SF4 Ember Netplay project and ported here.
Frame-rate setting
The game now knows one second into a match whether your PC is on the Fixed frames-per-second setting, and shows the notice right away, before the match desyncs rather than after. A desync report in the log now names which PC was not on Fixed.
Install
- Download
sf4e-1.0.2-win32.zipbelow - Unzip anywhere
- Run
SF4Enhanced.exe
Set frames per second to Fixed in the game's graphics options.
SF4Enhanced 1.0.1 — hotfix for the frame-60 desync
Hotfix for 1.0.0. Both players need this version.
Matches no longer end at the first second for no reason
1.0.0 added two values to the check that decides whether two games have diverged: the fighter's animation frame and its time scale. Both carry sub-frame fractions that depend on each PC's own frame timing, so two games in perfect sync could still disagree on them, and the match ended at frame 60 with a desync message. It happened to players within the first hour. Those two values are still written to the log for diagnosis, but they no longer end a match. The whole-number checks that matter, the current move and posture, stay.
Everything else is as in 1.0.0: public lobbies across Spain, Germany and the USA, shadow moves in rollback, frame pacing under the Fixed frames-per-second setting, shared input delay.
Install
- Download
sf4e-1.0.1-win32.zipbelow - Unzip anywhere
- Run
SF4Enhanced.exe
Remember: set frames per second to Fixed in the game's graphics options. The game tells you on the match-over screen if it is not.
SF4Enhanced 1.0.0 — public lobbies
Superseded by 1.0.1. 1.0.0 ended some matches at the first second with a false desync message. Download 1.0.1 instead; both players need it. The 1.0.0 client zip has been removed from this page.
Rollback netcode for Ultra Street Fighter IV.
Play USF4 online with rollback netcode, public lobbies, lobby codes and spectating. No port forwarding, and nothing to configure on your router.
Install
- Download
sf4e-1.0.0-win32.zipbelow - Unzip anywhere
- Run
SF4Enhanced.exe
Requires Ultra Street Fighter IV on Steam. The game is not included.
If SmartScreen warns you: More info → Run anyway (the build is unsigned).
Both players need the same version. Trying to join someone on a different one tells you so instead of silently failing.
⚠️ Read this or you will desync
In the game's graphics options, set "frames per second" / "imágenes por segundo" to Fixed (Fija). This changed from Variable: frame pacing works through the fixed-rate limiter, and the game now tells you on the match-over screen if the setting is wrong. Never use Smooth / Fluida. Both players must use the same setting.
Public lobbies
You no longer need to know anyone to play.
BROWSE PUBLIC LOBBIES on the online menu shows every open lobby on every server, each with the flag of the region it lives in — who made it, how many are in it, how long it has been waiting. Pick one and press A. That is the whole process.
A lobby whose match has already started stays on the list as IN MATCH. Press Y on it to watch.
When you create a lobby it is public by default, so anyone browsing can find and join it. Press Left or Right on CREATE LOBBY to make it private; a private lobby works exactly as before — only someone you give the code to can join. The choice is remembered.
The list shows a lobby's title and player counts and nothing else. Nobody's address is shared with anyone through the list.
The mid-round desync has a cause, and a fix
Some of you hit a desync in the middle of a round — most often during a throw or a grab ultra — that would not reproduce no matter how long the game ran against itself on one PC. The cause turned out to be inside the engine.
The game updates both fighters on separate threads at the same time. During a throw, the thrown fighter's position is read from the thrower's hand while the thrower's own update may still be changing it. Depending on which thread wins that race, the two PCs place the fighter a hair apart — and from there the two games are no longer the same match. A single PC tends to win the race the same way every time, which is why we could never see it alone.
Both fighters now update one after the other on the game thread, so both PCs always get the same result. This is not specific to any character and should fix other "random" mid-round desyncs as well.
Shadow moves roll back correctly
Yun's Genei Jin, Yang's Seiei Enbu, Rose's Soul Illusion and every other move that leaves shadows behind the fighter had a rollback problem of their own. The game saved each shadow's picture but not its state, so after a rollback the shadows kept the animation frame and hitboxes of the timeline that had just been thrown away. On screen they froze or fell behind the fighter; underneath, a shadow's hit could land on a different frame on each PC and desync the match.
Shadows are now saved and restored with the rest of the fighter. If you main one of these characters, please tell us how it looks online.
Credit where it is due: the root cause and the way to fix it were worked out by the SF4 Ember Netplay project. Our implementation follows their analysis.
Smoother frame pacing
When one PC runs a little ahead of the other, GGPO used to tell it to skip whole frames, which landed as small hitches. The game now measures the gap every frame and stretches or shrinks each frame by a few milliseconds instead, so the two PCs drift back into line without a skip. It works through the game's own frame limiter, which runs under the Fixed frames-per-second setting. Under any other setting the match-over screen tells you to change it, and the old behaviour stays until you do.
Desync detection reaches further
The check that decides whether two games have diverged now also compares each fighter's current move, its frame and posture. A fork there is caught a few frames before it shows in health or position, and the log names it.
Input delay is shared
Each player's delay used to apply only to their own inputs, so whoever chose less got the responsive controls while the other absorbed the rollbacks. Both players now play at the higher of the two choices. If yours is raised, the log says so and by how much.
Smoother under bad connections
Several improvements to how the game and GGPO cope when packets are late or lost:
- Ping readings are fresh. The connection was measured once a second; it is now ten times a second, so the number you see is the number you are playing on.
- Lost inputs are re-sent sooner — after 33 ms of silence instead of waiting 200 ms — within a strict budget, so a brief hiccup costs a frame rather than a stall.
- Three crashes became clean disconnects. A peer that dropped before sending any input, a sender that skipped frames, and a receiver that stopped acknowledging each used to kill the game outright. All three now end the match and return you to the lobby.
- Malformed packets are rejected by type and size before anything reads them.
Faster rollback
Every frame, GGPO releases its oldest saved state before saving a new one. That release used to save the whole live game, restore the old state, clear it, and restore the live game again — a full record and two full restores, every single frame. It now takes about as long as freeing a buffer. A rematch also starts from a clean save-state pool instead of whatever the last match left behind.
What's in this build
- Rollback netcode with adjustable input delay (1–8), shared between players
- Public lobbies — browse and join anyone waiting on your server
- Lobby codes — share a 6-character code for a private match
- Peer-to-peer connections with automatic server-relay fallback, and UPnP to open the port on your router
- Servers in 🇪🇸 Spain, 🇩🇪 Germany and 🇺🇸 USA. For a private lobby by code, both players pick the same one; joining from the public list switches you to the right server on its own.
- Spectator mode
- Shadow moves (Genei Jin, Seiei Enbu, Soul Illusion) roll back with the fighter
- Honest desync handling — if the two games genuinely diverge, the match ends cleanly on both PCs and says so
Privacy
The servers record aggregate, anonymous usage only — how many matches are played, how long they last, how busy each region is. No player names and no IP addresses are stored. The public lobby list shows a title and player counts, nothing more.
Status
This is 1.0.0 because the core does what it set out to do: rollback that stays in sync, and a way to find an opponent without knowing one. Known rough edges:
- Some networks cannot make a direct connection at all and will always use the relay. This is normal and the match plays fine; it is a property of your router.
- Three regions cover Europe and North America. Elsewhere, expect higher ping unless you get a direct connection.
- The build is unsigned.
If something breaks, the log at %APPDATA%\sf4e\logs\sf4e.log is what makes it fixable — please include it, from both players if you can. If your game crashed, %APPDATA%\sf4e\crash may hold a dump; that is even better.
Credits
- Built on the sf4e project by adanducci.
Disclaimers
- Not affiliated with, endorsed by or associated with Capcom. Street Fighter and Ultra Street Fighter IV are trademarks of Capcom. Unofficial, non-commercial fan project.
- No game assets are included. You must own the game on Steam.
- Use at your own risk — provided as-is with no warranty, and intended for private play with friends rather than official online modes.
SF4Enhanced 0.5.5 — source is public, security upgrades
Rollback netcode for Ultra Street Fighter IV.
Play USF4 online with rollback netcode, lobby codes and spectating. No port forwarding, and nothing to configure on your router.
Install
- Download
sf4e-0.5.5-win32.zipbelow - Unzip anywhere
- Run
SF4Enhanced.exe
Requires Ultra Street Fighter IV on Steam. The game is not included.
If SmartScreen warns you: More info → Run anyway (the build is unsigned).
Both players need the same version. 0.5.5 does not connect to older builds, and the servers have been updated; if the lobby says UPDATE AVAILABLE, grab this one.
⚠️ Read this or you will desync
In the game's graphics options, set "frames per second" / "imágenes por segundo" to Variable, and make sure both players use the same setting.
The source is now public
The full source code is at github.com/fabeloper/sf4e. Before opening it we had the whole project audited, and this release is mostly what came out of that. It is built on sf4e by Anthony Danducci, whose reverse-engineered engine, save states and GGPO integration are the core of everything here.
Security upgrades
- A lobby code is now the key to the lobby. Every code comes with a secret the server checks on join, so nobody can walk into a lobby by guessing which port it lives on.
- The match relay is tied to the two players. Each relay seat belongs to a specific player's address for the duration of the match instead of the first two senders.
- The game checks what your opponent sends. Character, costume, colour, ultra and stage choices are range-checked on the server and again in the game before they are used. Handicap is forced to neutral.
- Abuse limits on the servers. Requests are rate-limited per address, one address can hold two lobbies, lobbies expire, and connection counts are capped.
- Tokens and replies. The peer-to-peer handshake token comes from a proper random source, the game only accepts matchmaker replies from the server it asked, and a handshake reply only counts if it comes from the address your opponent offered.
Privacy, said plainly
- The CONNECTION option on the lobby's home screen now says what it does: PEER TO PEER (the default) gives the lowest ping but your opponent's game learns your IP address, and the game asks your router over UPnP to open the match port for the duration. SERVER RELAY keeps your address private.
INSTALL.mdin the zip has a new section listing exactly what the mod sends, what it stores on your PC, and what a crash dump contains. Nothing is uploaded automatically.
Everything else
SECURITY.mdin the repository describes how to report a problem and how the pieces trust each other.SERVER.mdis a complete guide to running your own lobby server.- The zip now ships the license text of every bundled library in a
licensesfolder. - Settings (input delay, server, connection) are stored in
%APPDATA%\sf4e\settings.txt. They reset once with this update. - Version numbers shown in Windows file properties now match the build.
Bugs and questions: github.com/fabeloper/sf4e/issues
SF4Enhanced 0.3.5
New dedicated server + two real fixes. Everyone needs to update.
⚠️ Read this first — the desync is solved
Most desyncs were caused by the two players having different imágenes por segundo (frames-per-second) settings. That makes each machine advance the intro animation by a different amount, the characters end up in slightly different positions, and a few seconds later the two games disagree about what happened.
Both players must use the SAME setting. Variable is recommended.
This was confirmed with logs from both sides: with mismatched settings it forks every single match at the same point; with matching settings, matches play through clean.
What's new
- Dedicated server. The lobby server now runs on a proper hosted machine instead of a PC at home, so it no longer depends on anyone leaving their computer on. Expect far fewer random disconnects.
- Crash fix. A crash that could hit when an opponent dropped and a new match started is fixed.
- Freeze fix. Losing connection used to pop a dialog that froze the game until you clicked it. Now it just tells you and returns you to the lobby.
Install
Unzip and run SF4Enhanced.exe. If Windows SmartScreen warns, choose "More info → Run anyway".
Everyone must be on 0.3.5 — it points at the new server, so older builds will not find anyone.
If something goes wrong, send the log from %APPDATA%\sf4e\logs\sf4e.log.
SF4Enhanced 0.3.2
Two fixes:
- The launcher no longer exits silently (issue #1) for people with a long PATH environment variable — some couldn't start it at all.
- Rematching after a draw (double KO) no longer sometimes starts as an empty Ryu-vs-Ryu with a black stage.
Hosts: update the lobby server for the rematch fix — it's server-side. Extract the server zip over the folder and run update-server.cmd (or the new setup-laptop.cmd). Players just need the new client.
Still investigating: the hit-sound dropout some of you saw, and the desyncs on carrier-NAT connections. Unblock the zip before extracting. Everyone must be on 0.3.2 to share a lobby.
sf4e rollback: test release 2
Fixes from the first real online match.
- Matches no longer drop on a one-second network hiccup. The disconnect timeout is now ten seconds, with a warning at two.
- Smoother time sync: when one side runs ahead, the game skips simulation frames instead of freezing.
- Network stats (ping, frames behind) are written to the log every ten seconds, so bug reports carry them.
Both players must be on the same release. Install exactly as in test release 1: extract, put the lobby server address in server.txt, run Launcher.exe. Older builds are refused when joining.
The lobby server is unchanged; hosts keep using the server package from test release 1.
sf4e rollback: test release 1
sf4e rollback, test release 1
Rollback netcode for Ultra Street Fighter IV on Steam, as a mod. Nothing in the game folder is touched; delete the folder to uninstall.
This is a test build. It works, and it needs people playing it to find what breaks. Please report anything odd.
Play
- Download
sf4e-rollback-v0.0.1-test1-win32.zipand extract it anywhere. Not into the game folder. - Open
server.txtand put the lobby server address your host gave you on a line by itself. - Have Steam running, then double-click
Launcher.exe. - Main menu → Multiplayer Battle. Press Start or light kick on your controller if asked.
- One player presses Create lobby and gets a six-character code. The other presses Join with code and types it.
- Both pick a character and press Send chara. The match starts when both are ready.
No IP addresses, no port forwarding. Set input delay to 1 or 2; raise it if the match stutters.
Full instructions are in INSTALL.md inside the zip.
Known limits
- Two players per lobby. No spectators yet.
- Character and stage are chosen in the mod's window, not the game's select screen.
- Steam's own online modes are off while the mod runs.
- Both players must use the same build; mismatches are refused with a message.
Reporting a problem
Attach %APPDATA%\sf4e\logs\sf4e.log. If the game crashed, also attach the newest file from %APPDATA%\sf4e\crash\. Say which characters were played and whether you were the one who created the lobby.
Hosting your own lobby server
sf4e-lobby-server-v0.0.1-test1-win32.zip runs on any Windows machine or VPS. See SERVER.md inside it.
Credits
Built on sf4e by Anthony Danducci: the reverse-engineered engine, the save states and the GGPO integration are his work. This fork adds the lobby server, code-based matchmaking, the relay, sync diagnostics and packaging.
Street Fighter and Ultra Street Fighter IV are © CAPCOM.