My starting prompt was basically: build a minimal GPU-first Zig/Vulkan 3D falling-sand prototype.
The stack is Zig 0.16, Vulkan compute/rendering, SDL3 for window/input, GLSL compute shaders compiled to SPIR-V, and Codex as the coding partner.
I broke it into tasks like this:
- Write the spec first.
- Define the GPU-first simulation rule.
- Get Vulkan and SDL3 running.
- Add voxel buffers and rendering.
- Add sand/water simulation.
- Add brush controls.
- Add transparency, bigger map, lava, steam, smoke, and cooling.
The main design rule was: the destination owns the write. Each voxel gathers what it should become instead of particles pushing into neighbors. That made the compute shader side much cleaner.
What broke first was Vulkan plumbing and sync. The game logic was easier than getting all the buffers, descriptors, shaders, barriers, and draw calls lined up correctly.
The AI misunderstood simulation conflicts at first. Ping-pong buffers alone do not prevent races. The real fix was making every destination cell decide who wins.
The workflow that helped most was: spec first, then implementation plan, then small Codex passes with tests after each feature.
For fun testing, I’m just poking the sandbox. Can I make a mess quickly? Does water behave interestingly? Does lava create steam and smoke in a satisfying way? Do I want to keep playing with it after the feature technically works? That’s the real test.