Falling Voxels Prototype

A prototype of a voxel building game with simple physics that make unsupported voxels fall. Like Minecraft but without floating cubes!

Programmed in C++, using only stb_voxel_render for the rendering.

How It Works

Basically, each block has a level of support (shown by the blue number) that depends on the blocks besides it and below it. If the block below has maximum support (10), the block on top of it will also have maximum support. Otherwise, the block’s support will be the maximum of the aforementioned neighbouring blocks’ support, minus one. (There are further limitations on the support value imposed by the material).

When support is 0 the block will start to fall. A block’s support is updated whenever a neighbouring block below or besides it changes. Since the support always goes down with horizontal distance, we guarantee that the reaction chain will be limited and avoid situational lag. A falling block will stop falling whenever its support becomes non-zero. Since the update of the support values happens after the update of the blocks’ positions, groups of falling blocks can stop all together and feel like a solid object.

User Interface
To facilitate building, I came up with key combinations to place blocks that I always missed in Minecraft.

  • Placing multiple blocks in a vertical column.
  • Replacing a block
  • Placing a block to a side of the face you’re looking at.

I would also like to allow making horizontal rectangles by marking two corners.

Design Conclusions

The mechanics make building things an interesting challenge of architecture. However, it turned out to be a bit annoying in practice, adding too much friction to creativity. This could be deminished with some changes and simplification in the mechanics. For example, instead of decreasing the support in a “diamond shape” as I do currently (because each block looks at the 4 immediately adjacent blocks horizontally), it might facilitate most constructions to propagate support in a “square shape” (by looking at the 8 adjacent blocks including diagonal adjacency).

Another design challenge would be the survival part of the game. The support mechanics don’t work well with underground caves, because if a cave had 10 blocks above it, the ceiling would collapse. Therefore, the game would probably have to have somewhat of a separation between the building and the combat/exploration parts of the gameplay. In that regard, it should be more like Cubeworld or Trove than Minecraft.

Another solution to the caves problem would be more complex block physics to handle largescale terrain. For example, groups of 8x8x8 blocks could considered a single block. As long as there was a connection between the top and bottom layers in such a group, it could be considered a full block, and it could have a maximum support value while having holes inside. The problem with this type of system would be inconsistent behavior depending on chunk alignment, which could be deminished somewhat through more complex rules.

In conclusion, I think it is a substantial engineering and design challenge, but in terms of gameplay I think it could result in a very engaging game. Mining adventures under the threat of triggering a deadly collapse and putting your fortification’s structures to a challenge in destructive invasion attacks could be the core of such a game.