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