Tech Notes

Frameworks and tools
we build our games with.

Notes on the internal frameworks and tooling developed at ITPex: the tile-based game framework used by our puzzle and action games, and the supervised gameplay testing tools used to record and replay deterministic simulations.

Supervised Gameplay Testing

A set of custom tools for recording, replaying and inspecting complex gameplay scenarios under controlled conditions.

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 addresses 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. 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.

Testing interface used to browse, inspect and launch recorded gameplay simulations.
The testing interface used to browse, inspect and launch recorded gameplay simulations.

Tile-Based Game Framework

The reusable framework behind Fizzle Fighters, Buccaneer's Booty and the games currently in development.

The framework grew out of the synchronization work on Exploders and Fizzle Fighters. It provides a common representation for tile-based gameplay, so that different games can share the same simulation model, synchronization layer and testing infrastructure.

Games built on the framework describe their world as a grid of cells, and their logic as deterministic actions performed on those cells. This makes the simulation reproducible across clients and straightforward to record and replay.

Logical and visual position

For grid-based gameplay, the framework does not 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.

The framework 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. The framework 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.