
Penguin battle !
-Context
This project was carried out during the second half of a course module on Computer Network at SAE Institut Geneva as part of the second year of the Bachelor’s degree in Games Programming. This half of the module focused on rollback and determinism in game simulation.
We had to make an online game using our from scratch physics engine created during the first course module of the same year. We had to add rollback over our network protocol and a checksum to ensure the integrity of our simulation.
I decided to create a brawler-style game where you take on another player by shooting snowballs at them, with the aim of pushing your opponent to the sharp edges of the arena.
Showcase
Here’s a quick gameplay of my game in real conditions:
Project Architecture
I’ve put a lot of effort into having a well-structured code architecture so that I can easily create test and debug applications to lighten the complexity of implementing the rollback system:

My project architecture
The architecture is divided into 4 modules:
- The Game module, which follows a Model-View-Controller architecture
- The Network module, which uses an interface to play the game with a mock network for debugging or simply playing online.
- The Client module, which provides the link between the game module and the network module
- The Application module, which uses an interface to create several types of application, in particular to create debugging applications.
Simulation Application
This application contains both clients in the same window and uses a mock network implementation to create any type of network condition:
The simulationApplication running two clients in the same window using the mock network.
By the way, this application was extremely useful when I was making my rollback prototypes, so I could access the debugger on both clients at the same time.
The rollback prototype using the SimulationApplication.
Split Screen Application
This application is similar to the simulation application, but uses the implementation of the real network to test the game under real network conditions.
The SplitScreenApplication running two clients in the same window using the network.
I can easily change the delay and packet loss values to test my game in very poor network conditions.
Client Application
Finally the ClientApplication is the target build application which consists of a client using the real network implementation. This is the executable that is built in release and put online for anyone to play with.
Two ClientApplication each running one client using the network.
What did I learn ?
- Implement a rollback system
- Ensure the integrity of a simulation via a checksum
- Separate the various game systems to resimulate them individually
- Separate graphics logic from game logic.
- Use interfaces to create mock implementations or different types of applications
- Use photon real time
- Use raylib