Releases: baclo-san/4PSoku
Release list
4PSoku 4P rollback test build 1
Test build of the 4PSoku mod and its relay server, for four-player rollback netplay. Not working end to end yet — see below.
Built from 4p-rollback-netplay. This is a fork of SokuDev/4PSoku; local play is unaffected.
You also need
giuroll.dllfrom giuroll-hagb v0.6.18-4p-test-8 — always take the newest giuroll release; the artifacts here have not changed since test 1- All four players must run matching builds. Version skew has already cost us two test sessions.
Install
-
4PSoku.dllandassets.datboth go inSoku/modules/4PSoku/. Every player needs both.assets.datis the mod's own art and menu layouts. It is unchanged from upstream 4PSoku, and it was missing from this release until 2026-09-08 -- if you installed before then and have noassets.datnext to your4PSoku.dll, the game crashes on the profile screen. The mod repoints the engine atdata/menu/menuProfile_4p.dat, which lives inside that archive; when the file cannot be opened the loader returns null and the engine dereferences it without checking. Nothing in the log says so, you just get a crash dump. -
2v2Server.exeis the relay. Only whoever hosts runs it; the other three just connect.
If you host the relay on the same machine you play on, that is supported — but note the relay then announces your client to everyone else as 127.0.0.1, so your pair with each other player falls back to relaying instead of a direct connection. It works, it is just a hop slower. Hosting the relay on a machine nobody plays on avoids that.
Relay fixes in this build
- Character-select freeze. The game's input codec works out of an 80-byte scratch buffer, so 36 inputs is the most it can read. The relay was sending 124 on the first packet after the character-select unlock, every time, and all four clients froze together. Replies are now capped at 8 frames.
- Black screen after stage select.
netmanager+0x98is a single frame counter shared by character select and battle, and the game never resets it across the scene change. Four free-running relay streams left every client rejecting every battle packet, and none of them could leaveCBattleCL::onActivate— which blocks the game's main thread until an input packet arrives. Battle input is now numbered in each client's own sequence. - Battle replies are built in the shape 4PSoku's own four-player input distribution expects, rather than reflecting one client's 1v1-shaped packet to the others.
- giuroll's
0x6bbattle packets are relayed instead of being dropped as an unknown type, which restores the fallback for any pair that cannot be hole-punched. - A late
LOADING_READYfrom one player no longer knocks another back a state. - State transitions, character-select progress and the first battle frame per client are logged, deduplicated. If something goes wrong, send the relay console output.
Mod fixes
- Fixed a dangling end-of-storage pointer in
activePlayers. Only begin and last were updated after a reallocation, leaving the capacity pointer aimed at freed memory. Normal play never reads it; anything that does — such as a rollback savestate — dies. loadDeckDatatraces to4psoku-load.lognext toth123.exe. It runs on the game's asset worker thread, so it is the one part of the mod that can hang the game with nothing else noticing.
Building the relay
2v2Server.exe now builds without SFML via the bundled MiniNet.hpp, so self-hosting does not pull a 30 MB dependency for twelve symbols.
Known state
Character select, stage select and battle loading all pass. The battle then stalls within about twenty frames. A peer-accounting bug behind the last observed stall is fixed on the giuroll side but has not yet been confirmed live.