BestoNet is a custom rollback networking solution developed for the fighting game Idol Showdown. Built in C# for Unity, it integrates with Facepunch Steamworks to provide a robust and efficient rollback implementation.
This is a work in progress as a library, and won't work right out the box
Originally we used Unity GGPO but there were some issues.
- Unplayable connections at long distances (experiencing ~7 frames of rollback)
- Maintenance difficulties due to GGPO's C++ codebase
- System instability during poor network conditions
- Using GGPO required a relay system that added extra latency to online matches
- Speculative Frame Saving: Saves CPU time and preventing 7 frame rollbacks
- Currently saves the midpoint frame, confirm frame, and end frame
- Input Prediction: Will predict the next input using the previously received input
- Rift Management: Many different options to deal with one sided rollback and game syncing
- Reliable Input Messaging: Maintains a 7-frame input buffer to handle packet loss and out-of-order delivery
- Frame Timing: Idol Showdown currently uses a separate thread as a timer.
- Spectator: The current implementation contains a call to send confirmed frame inputs to a spectator buffer
- State management system: Deterministic game logic is required. For efficiency reasons, we recommend avoiding using byte[] with BinaryWriter/Reader
Current Unity Configuration Settings
Note: The MaxRollbackFrames setting currently shows 4 frames but effectively provides ~8 frames of rollback in Idol Showdown. This discrepancy is known but functional.
This implementation draws inspiration from:
- MK/Injustice GDC presentation
- Zinac's rollback implementation guide
- GekkoNet's Rollback System
Special thanks to Rin Iota for developing the original networking foundation that enabled ISD Rollback's creation.
This is an open-source project accepting community contributions. Please read our Contributing Guide and Code of Conduct before submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.