Building games around
multiplayer synchronization.

I have been developing multiplayer games for many years, with a particular focus on synchronization, deterministic gameplay and minimizing the amount of work that needs to be performed by the server.

Multiplayer & Synchronization

My multiplayer work has focused on a simple principle: synchronization should be designed together with the gameplay, rather than added afterwards.

Fizzle Fighters

Fizzle Fighters

Unity · SmartFoxServer 3 · Online Multiplayer

Fizzle Fighters is the current evolution of the multiplayer architecture I developed for earlier bomber-arena games. It is built in Unity and is being developed around SmartFoxServer 3.

The project is designed around lightweight server synchronization, keeping the computationally expensive parts of the simulation on the clients whenever the gameplay allows it.

Unity SmartFoxServer 3 Multiplayer Deterministic Simulation Client-side Simulation Rollback

Synchronization architecture

The synchronization model is intentionally lightweight on the server. Clients perform most of the simulation work while the networking layer provides the information required to keep the different simulations aligned.

Player input
→
Local simulation
→
Server confirmation
→
Reconciliation
  • Movement and actions are confirmed by the server. The client can react immediately instead of waiting for a round trip before presenting the result.
  • Client prediction is reconciled with authoritative information. When a confirmation differs from the local prediction, the affected state can be corrected.
  • Rollback is part of the synchronization strategy. Instead of requiring the server to reproduce every expensive operation, the client can rewind and replay the relevant sequence of actions.
  • The server remains deliberately lightweight. The architecture avoids making the server responsible for reproducing the entire simulation when the gameplay rules do not require it.
The game design itself was influenced by the networking requirements. The goal was not simply to make the game multiplayer. The synchronization model was designed so that a player should be able to play with another player anywhere in the world without geographical distance unnecessarily degrading the gameplay experience.

This led to a close relationship between game mechanics, deterministic behavior, movement design and network protocol: mechanics that are expensive or difficult to synchronize are deliberately designed around representations that can be reproduced consistently by the clients.

View Fizzle Fighters on Steam
Exploders multiplayer game

Exploders

Multiplayer · SmartFoxServer · Deterministic 2D Simulation

Exploders was one of my main multiplayer projects and the foundation for the synchronization approach that I later continued developing in Fizzle Fighters.

The game uses a discrete representation of movement based on the grid. Instead of attempting to synchronize arbitrary physical movement, player actions were represented through well-defined movement targets.

Play Exploders
SmartFoxServer 2D Multiplayer Grid-based Movement Deterministic Simulation Message Ordering

Why the simulation was designed this way

The central problem was not simply sending player positions over the network. The objective was to make the simulation predictable enough that clients could reproduce the same result from the same sequence of events.

  • Movement was represented through discrete targets instead of arbitrary continuous trajectories.
  • The simulation was deterministic and strongly dependent on the ordering of network messages.
  • Because clients could reproduce the relevant simulation, significantly less computation had to be performed centrally.
  • The approach reduced the amount of state that needed to be continuously transmitted as authoritative physical state.
Key idea: make the game mechanics easier to synchronize instead of trying to synchronize an unnecessarily complex simulation.
Tanks multiplayer game

Speeleiland Tanks!

Multiplayer · SmartFoxServer · Dynamic Movement Targets

Tanks! applied the same general synchronization philosophy to a different movement model.

Instead of relying on a fixed grid to determine movement targets, movement targets were generated dynamically. The challenge was to preserve the same predictable behavior while allowing more flexible movement.

SmartFoxServer 2D Multiplayer Dynamic Targets Deterministic Logic

Thyilea Synchronization Engine

Thyilea is a real-time synchronization engine developed for multiplayer games with grid- or cell-based movement. Its design separates the authoritative game state from the visual representation of that state.

This allows the client to react immediately to player input instead of waiting for a network round trip, while the authoritative result is confirmed asynchronously.

Logical and visual position

For grid-based gameplay, the engine does not need to treat the rendered position of a character as its gameplay state. A character can be visually moving between cells while the synchronization layer still considers it to be at a specific logical position.

This distinction is particularly useful for collision detection and other gameplay calculations, which can operate on discrete, authoritative cell positions rather than on the exact rendered position of the character.

Two characters occupying different cells of a game grid.
Initial position. Visual and logical positions coincide.
A character moving between two grid cells while its logical position remains on the previous cell.
Before confirmation. The visual position moves toward the next cell while the logical position remains at the last confirmed cell.

Confirmation and shadow

When the server confirms the movement, the logical position advances to the new cell. The visual movement, however, may still be in progress.

Thyilea therefore keeps the previous logical position as a shadow. This provides the synchronization layer with both the current authoritative state and the state from which the current transition began.

A character moving toward a confirmed new cell while its previous logical position is represented as a shadow.
After confirmation. The new cell is now the logical position, while the previous logical position remains as the shadow.
A character that has reached its destination with visual, logical and shadow positions aligned.
Shadow unification. Once the movement finishes, visual, logical and shadow positions coincide again.
Why this separation matters Not every calculation needs the visual position.

Most collision calculations can operate directly on the logical position. Other calculations can use a combination of the current logical position and the previous logical position represented by the shadow. This keeps gameplay calculations discrete and predictable while the visual representation remains continuous.

Interpolation

Authoritative confirmations arrive as discrete network events, but rendering happens continuously. Thyilea can therefore interpolate between successive confirmed positions instead of moving the character directly from one confirmed cell to the next.

The network determines the states that must be reached, while the client controls how those states are presented visually.

A character moving through several confirmed positions using a smooth interpolation curve.
Interpolation creates a smooth visual trajectory between successive authoritative confirmations.

Rollback and conflicting predictions

Prediction becomes more interesting when the local client has already started moving before it knows about another player's confirmed action. The local movement begins immediately using the information currently available to the client.

If a later confirmation reveals that the prediction was invalid, Thyilea reconciles the visual representation with the authoritative state. The predicted movement can therefore be rolled back without rebuilding the entire simulation.

A character moving toward a confirmed new cell while its previous logical position is represented as a shadow.
Rollback sequence. The local character begins moving immediately.
A character that has reached its destination with visual, logical and shadow positions aligned.
Rollback preformed. A later confirmation reveals the remote player's authoritative position, causing the local prediction to be corrected.
The apparent simultaneous movement in this diagram is schematic. The local player actually begins moving first, before knowing that the remote player will be confirmed in that position. Interpolation makes the remote player's arrival appear smooth, while the local character may briefly appear to "bounce" as its prediction is corrected.

Extreme-lag edge case: the ghost explosion

The separation between visual and logical state also creates an interesting edge case under extreme network latency. A character can already appear visually to have reached a safe position while its authoritative logical position is still behind.

If an explosion is evaluated against that logical state before the confirmation catches up, the player can be affected even though the character appears visually outside the explosion.

A character visually outside an explosion while its delayed logical position remains inside it.
Ghost explosion: an extreme-lag edge case where the logical position has not yet caught up with the visual position.

This is not the normal operating case of the engine. It illustrates the trade-off introduced by separating immediate visual feedback from authoritative gameplay state, and becomes relevant primarily under severe network latency.

The synchronization loop

These mechanisms form the core synchronization loop used by Thyilea: input is processed locally, movement is predicted immediately, the authoritative result is received asynchronously, and the visual state is reconciled with that result.

Player input
→
Local prediction
→
Visual movement
→
Server confirmation
→
Reconciliation
The key architectural separation is between logical state and visual state. The network does not need to dictate every rendered frame. Clients can predict and interpolate the presentation while the synchronization layer maintains a consistent authoritative gameplay state.

Dynagrid Predictive Physics

The same synchronization principles were later extended to a top-down multiplayer tank game, where movement could no longer be represented purely as transitions between grid cells.

I developed a lightweight custom physics model designed specifically for the game's requirements. Rather than replacing a general-purpose physics engine such as Box2D, it implemented the smaller feature set required by the game while prioritizing deterministic simulation, low computational cost and predictable results.

Predicting movement and collisions

Dynagrid predicts future positions from the current state and player input. Trajectories are represented as linearized segments, allowing the synchronization layer to reason about future movement and collisions without requiring a full rigid-body simulation.

A moving tank with a projected position at delta T and its confirmed logical position.
Prediction. The projected position after delta T is calculated from the current state and input.
Two tanks approaching a predicted collision.
Collision prediction. The trajectory of one tank intersects the confirmed position of another.
Two tanks after a collision showing the newly confirmed position.
Confirmed result. The collision produces a new authoritative position that is reproduced by the clients.
Current state
→
Player input
→
Predicted trajectory
→
Deterministic physics
→
Confirmed state
  • Deterministic simulation. Given the same initial state and sequence of inputs, different clients can reproduce the same physical result.
  • Piecewise-linear trajectories. Future movement is represented through linearized trajectory segments, making position prediction computationally inexpensive and predictable.
  • Distributed physics. Clients can calculate physical movement locally instead of requiring the server to continuously simulate every object's complete trajectory.
  • Purpose-built scope. The engine implements only the physics required by the game, avoiding the complexity and overhead of a general-purpose rigid-body system.
The result was a lightweight form of distributed physics. The same principles used by Thyilea for predictable grid movement were extended to continuous trajectories: clients could calculate future positions locally while maintaining a shared, deterministic interpretation of the game state.

This extension allowed the networking architecture to support a substantially different gameplay model without replacing the underlying synchronization approach. The result was a reusable foundation for multiplayer games ranging from discrete, grid-based movement to continuous physics-driven gameplay.

Test UI

Supervised Gameplay Testing

Custom Testing Tools · Session Recording · Deterministic Replay

I developed a set of custom tools to make complex gameplay scenarios easier to reproduce and test. The system allowed gameplay sessions to be recorded and later replayed with their original event timing.

Rather than treating the game as a simple sequence of inputs, the system could capture events at different levels of the gameplay architecture, from device and network events to higher-level game commands.

Game Testing Session Replay Event Recording Deterministic Replay Testing Tools

Recording and replay architecture

Games are particularly challenging to test because their behavior depends not only on which events occur, but also on when they occur. Input, network messages, physics and internal game systems can all generate events concurrently during the simulation.

The testing system addressed this by recording events together with their position in the simulation timeline, allowing a previously captured gameplay situation to be reproduced under controlled conditions.

Device input
→
Game events
→
Simulation
→
Recorded session
  • Events could be recorded at different abstraction levels. Device inputs and network messages could be captured directly, but the resulting game-level events could also be recorded independently.
  • Events retained their original simulation timing. Replaying a session did not simply execute the events as fast as possible. They were injected at the same points in the simulation timeline in which they had originally occurred.
  • Higher-level gameplay events could be tested directly. For example, instead of reproducing every input that caused a character to move, a test could replay the resulting command to move the character from one tile to another.
  • The same infrastructure supported different testing scenarios. Depending on what needed to be investigated, a test could reproduce the original inputs or work at a higher level of the gameplay system.
From difficult-to-reproduce gameplay to reusable test scenarios. A gameplay situation could be recorded once and subsequently reproduced whenever needed, making it possible to investigate problems, verify fixes and compare behavior across different versions of the game.

Testing interface

The tools included a dedicated interface for managing the recorded simulations. Testers could browse the available scenarios, inspect their stored descriptions and launch a selected simulation.

When a test was started, the appropriate game scene was loaded and the recorded session was automatically reproduced, allowing the tester to observe the same gameplay sequence under controlled conditions.

This approach was particularly useful for gameplay scenarios where manually reproducing the exact sequence of inputs, network events and timing would otherwise be difficult or inconsistent.

Buccaneer's Booty

Buccaneer's Booty

Unity · Puzzle Design · Multiplayer-ready Architecture

Buccaneer's Booty is a pirate-themed Sokoban-style puzzle game built in Unity. The game features 40 islands combining positional puzzles, environmental interactions and objects with different behaviors.

The puzzle progression was designed to introduce mechanics gradually while avoiding repetitive solutions. Each level incorporates something original, either through a new mechanic, a different interaction between existing mechanics, or a new spatial challenge.

The project was developed using the same codebase as Fizzle Fighters, allowing the puzzle game to share the same underlying synchronization architecture while remaining fully playable as a single-player experience.

Unity Puzzle Design Sokoban Grid-based Gameplay Deterministic Simulation Multiplayer-ready

Shared synchronization architecture

Buccaneer's Booty uses the same gameplay and synchronization architecture developed for Fizzle Fighters. This allowed the puzzle game to reuse the same simulation model instead of introducing a separate codebase specifically for single-player gameplay.

  • The gameplay simulation is independent from the synchronization backend. Game actions are processed through the same architecture regardless of whether the game is running locally or connected to a multiplayer server.
  • LocalSynchronizer replaces the server for single-player gameplay. It implements the same synchronization interface while executing the required operations locally, allowing the game to run without a network connection.
  • The architecture keeps multiplayer as a natural extension of the game. Because the gameplay code does not depend directly on a server implementation, the same puzzle simulation can be connected to the network synchronization layer.
  • The approach makes multiplayer puzzle development possible without rebuilding the game architecture. The same codebase can therefore support local puzzle gameplay while providing a foundation for future cooperative or competitive online puzzle modes.
Puzzle design and technical architecture were developed together. The game was designed so that its mechanics could be represented as deterministic, grid-based actions. This makes the same gameplay state reproducible locally and provides a suitable foundation for synchronizing puzzle interactions between multiple players.

This architecture also creates a reusable foundation for multiplayer puzzle games: the local implementation can be used during development and single-player gameplay, while the same synchronization layer can later be connected to a server when online gameplay is required.

View Buccaneer's Booty on Steam

Games in Development

I am currently developing several games based on the same tile-based game framework created for Fizzle Fighters. These projects are still in early development, but their core gameplay mechanics can already be explored through playable prototypes.

Escape from the Bond-cursed Islands gameplay prototype

Escape from the Bond-cursed Islands

A skill-based action game where two characters are bound together by a curse and must be controlled simultaneously with a single set of controls. Built around mirrored movement, dynamic challenges and tile-based interactions.

Action Game Tile-Based Prototype
Watch Prototype
Dragon Containment Command gameplay prototype

Dragon Containment Command

An action game inspired by Pac-Man and Bomberman, where players must contain escaped dragons and destroy their eggs using barriers, freezing weapons and traps. Supports both local and online cooperative gameplay.

Action Game Co-op Tile-Based
Watch Prototype

Branded & Promotional Games

I also developed several short-form games for branded and promotional experiences, adapting familiar mechanics to strict creative and technical requirements.

Hello Kitty in the Circus

Hello Kitty Arcade Game

Promotional arcade game for McDonald's Happy Meal, inspired by classic side-scrolling arcade gameplay.

Mario Kart Sliding Puzzle

Mario Kart Sliding Puzzle

Branded Mario Kart Sliding Puzzle game created for a McDonald's Happy Meal promotional experience.

Bubble Shooter multiplayer game developed for Speeleiland

Bubble Shooter Multiplayer

Multiplayer browser game developed for Speeleiland, with real-time gameplay synchronized through SmartFox Server. The networking model was designed for a relatively controlled gameplay environment, with significantly lower synchronization demands than more action-intensive multiplayer games.

Multiplayer SmartFox Server Browser Game
8-Ball multiplayer game developed for Speeleiland

8-Ball Multiplayer

Online multiplayer 8-ball game developed for Speeleiland, using SmartFox Server to synchronize matches between players. The turn-based nature of the game made its synchronization requirements considerably less demanding than real-time action multiplayer.

Multiplayer SmartFox Server Physics