1. TopplePOP: Bungee Blockbusters
  2. News
  3. Progress Update 2020-09

Progress Update 2020-09

We've been quiet for a while since the demo release, but no longer! We're lifting the lid on TopplePOP development with a series of dev logs.

[h2]Physics Performance on low end devices.[/h2]

TopplePOP is good fun solo or with friends, on smartphones or the big screen - we’d like to make it available to as many people in as many ways as possible. To this end we want the app to run smoothly on any platform from next-gen consoles right down to low-spec smartphones.

TopplePOP is a block puzzle inspired by decades-old classics Tetris and Puyo Puyo, so this shouldn’t be difficult, right…?

In most aspects yeah, TopplePOP is not a resource-intensive game - but the gameplay is built entirely on a physics sim. Stable performance is the cornerstone of the game.

Multi-player interactions with potentially hundreds of interdependent physics objects every frame update - quickly adds up to max-out low-end CPUs.

[h3]Good game physics is hard[/h3]

Many games involving physics will, when under strain, cap the number of calculations (lowering physics fidelity) to ensure smooth framerates at the cost of minor physics glitches. Normally these glitches are imperceptible, but they can cascade out of control.
(otherwise a great game with a poignant story - worth playing!)

In most games, capping physics to prioritize framerate is the way to go - smooth fps is worth the tradeoff, and resulting physics glitches aren’t too heinous with mostly minor impact on gameplay - but for TopplePOP, this is not an option.

Our core gameplay is entirely reliant on glitch-free physics. No matter how chaotic the game may appear on the surface during intense puzzle-battles - under the hood it must maintain physics fidelity at 60 fps. Puzzle pieces must always behave in line with expectations so as to support pro-level competition which is great for players / spectators, but this can strain low-end CPUs, especially when stuff gets real in 4-player battles.

[h3]Our Goal: [/h3]
Reduce our physics CPU time so we can maintain 60 FPS on low end hardware in 4 player VS mode without losing what makes TopplePop fun.

On some of our target hardware our physics CPU cost was using up our frame time (about 16 ms for 60 FPS)

As physics is a hugely important part of TopplePop we needed to find a way to reduce our physics cost, ideally without making huge gameplay changes like reducing the number of blocks on screen.

[h3]Our solution: [/h3]
Combining stitched blocks into “Block Groups”


Number of blocks on screen: 192
Number of dynamic physics objects:
- before new block groups system: 187
- after new block groups system: 63


What we do is merge all the blocks that are stitched together (represented by the same coloured cube in the center) into one physics object with many colliders, and groups that are stitched to the walls or floor can become static physics objects which are far cheaper.

This results in us having far fewer physics calculations per game update.
When a block is popped we remove it from the group and potentially split the group into multiple new groups.


For example, here if we pop the orange block, we create a second group for the two right blocks which are now disconnected. (stitching only occurs along block edges)


[h3]Gameplay changes:[/h3]
This means stitching between blocks is now rigid and won’t be bendy as it was previously.

While this is a gameplay change, we think it improves the gameplay offering a more predictable experience to the player. Large stacks of blocks balanced on a ledge are less likely to fall over without the player intentionally toppling them and it also allows our game to be playable at 60 fps on more low end platforms even in 4 player VS mode.

This has been a really big job to implement with many edge cases to handle, but with this change and other optimisations[h3] we're now confident we can maintain 60 FPS gameplay on low end devices and the game still feels great to play.[/h3]

As always we’d love to know your thoughts on this - play the free demo now via the steam page, join us on discord and feel free to ask questions! :)