Hi everyone. Welcome to the first Triworld devlog.

I’ve decided to collate all my side projects (toy renderers and engines) into a single one that I’m calling Triworld, a voxel adventure game inspired by Terraria, Cube World, The Legend of Zelda Breath of the Wild and Minecraft.

For the past 3 months and for the next few months I’ll be working on a simple editor that will be used to create and manage voxel “sprites” and palettes. Here’s a quick preview of the editor.

Triwold Editor

Having a voxel editor is not strictly necessary, I could have used an existing one like MagicaVoxel and it would have been easier to get started, but I plan to add game specific features to the editor and release it along the game as a modding tool (if I will ever get that far). For now the feature set is quite limited. I can edit fixed size voxel sprites and palettes.

The stack and dependencies up to this point are:

  • Orthodox C++ with Vulkan
  • Volk
  • SPIRV-Reflect
  • ImGui
  • glm
  • nanosvg
  • stb_image
  • catch2
  • No STL

The no STL rule mights sound counterproductive but here are the reason I don’t use it:

  • For now the only containers I needed were vectors and hash maps. I wrote them from scratch. Everything else is done with raw pointers (😨) and memory arenas.
  • It’s cryptic to read and not that portable (for the most part it is but it has some quirks).
  • It slows down compilation times.
  • Not using it seems to be the predominant strategy across the game industry. And even when the STL is allowed its usage is carefully controlled and limited. Or a custom solution is adopted (like EASTL).

I’m still trying to understand what is worth to implement from scratch and what should be done using a third party solution.

The tools I’m using are:

  • Editor: vscode with clangd
  • Compiler: msvc with a batch script (cl.exe)
  • Profiler: tracy
  • Debugger: remedybg
  • Graphics Debugger: Nvidia Nsight and RenderDoc
  • Static Analyzer: PVS-Studio

Since I’m not a C++ or graphics programmer by trade some of the solutions I’ve adopted might seem strange or counterproductive. But I found that they work for me and since I’m working on the project in my free time I think it’s important to adopt solutions that keep me motivated.

If you have any recommendation feel free to leave a comment.

Stay tuned.

Alex