SamSuka
WhiteT Poison
WhiteT Poison

patreon


Brawlback Progress Report #1

2022 has been a busy a year for Brawlback development and as we transition into the new year, I'd like to take some time to reflect on our progress as well as update everyone on current development. This progress report will be split-up into sections; one for each major feature of Brawlback.

Matchmaking

2022 saw the extension of Lylat matchmaking from Melee to Brawl, where matchmaking has been integrated via a Dolphin menu pane. This functionality has since been slightly reworked to function in the Brawl menus, allowing you to join a separate Lylat queue via the online menu selection or the Versus screen. Of course, this is a temporary solution for testing, as it removes the option to play offline and there is little in the form of UX happening, but it's still progress.

Credits/Kudos: Rapito for overseeing development of matchmaking and hosting.

Rollback

Rollback as our primary objective is actually almost completed, with a few more difficult pieces needing to be pushed over the finish line. The prototype of the netcode was finished before PiNE's departure from the team, allowing players to connect and play a match albeit slow and finnicky. The major problems with this as PiNE departed were desyncs and the size of the savestate. Since then, desyncs have been slowly weeded out with the discovery of an additional pad system in Brawl that we were not syncing across the netcode, though this will remain an ongoing task even past release. The larger problem is the size of the savestates, as the size impacts the feasibility of release at all and little progress has been made in that direction past an immense amount of research. 

With that being said, a discovery was made within the Brawl sourcecode that allows us to see what memory was currently being used in a match. This logically should be equivalent to what the game would need to be in a savestate, as any memory not being used is not theoretically relevant to the state of the game. This has allowed us to develop a research workflow where we can record the memory used during a match and then pipe that into a script that pops out a savestate based on this information. This script has rendered around 6 MB savestates per match, with around an 8 MB savestate as the larger savestate based on all the matches, which is a significant improvement over the existing 20-something MB savestate and is completely workable within the infrastructure. While not the entire picture, this script will help developers figure out how far they can push minimizing the size of the savestate and start to figure out regions of memory that can be cut out of the existing savestate.

Credits/Kudos: PiNE for rollback netcode, Rapito for overseeing the existing infrastructure and fixing desyncs, WhiteTPoison for starting to address savestates, Kapedani, el-rey, and Fudgepop01 for always being there when anyone needs a source of truth for game or general C++ knowledge.

Replays

Replays saw a bit of progress in developing a recording setup and hijacking the existing replays menu to reflect this information. Replays currently record different items, inputs, game settings, and RNG values to a UBJSON file. These files are then indexed and overlayed on top of the replays menu on the Brawl menus. Reverse engineering of the original replay format has also been conducted, allowing us a real understanding of what's going on in the background of vanilla replay playback.

Credits/Kudos: WhiteTPoison for recording and menuing, Believer for assisting in reverse engineering of the format, el-rey for being patient with our messy PRs

Conclusion

Finally, I would like to truly thank our Patrons. Without your support, a lot of this would not be possible. I would also like to shoutout the Brawl Central and P+ communities, as their help in testing as well as just general support and excitement for the project has made progress this year a treat.

Thanks for reading and happy holidays,

WhiteTPoison and the rest of the Brawlback team



More Creators