The "GVGP" Project

The Golemwire Voxel Game Project.
[Note: in progress]
The dates are based on info drawn from screenshots.

Main attempt #1: "Bode3DInProgress"

Java+Processing -based.

Not long (maybe a few years) after learning to code at all, I (overambitiously) decided I was going to make a 3D sandbox game like Minecraft. My first attempt wasn't successful.

I had mainly learned to code on KhanAcademy, where JS+ProcessingJS was used. I could tell that what I was writing wasn't real in the same sense that "double-clickable" executables were. Thankfully, I happened upon Processing, a Java-based IDE with a built-in library to make making programming "sketches" for computers easy.

I got to the point where there was a little platform you could stand on, with a few blocks around.

Before this, actually, I had tried to write my own 3D graphics engine to make GVGP in. I got, like, 8 points on the screen in a cube formation (classic noob division-based perspective, if you know you know) with the ability to pan. That was likely within about a year of learning to code....


Main attempt #2: "CYB Test"

14 years old: 2017, around March. Began earlier, perhaps by a year.
Unity-based, with individual game-object blocks.

Later in life, I ended up moving on to Unity for this task.

The plan was simple ('why shouldn't it be, right?'): organize the world into chunks, like Minecraft, and (here's where I went wrong) have a body for each block.
So yes, the plan was to have one individual game object in Unity, per block. Simple, right? Sure, if you want to only be able to load one or two chunks into the distance!

Here I hit my biggest roadblock in the project: No matter how much I optimized, no matter how long I worked, no matter what I did the software was uselessly underperformant. To be frank, it was one of the biggest roadblocks I had ever faced in my coding "career" so far. (I'm putting "career" in quotes there since I wasn't thinking of jobs yet -- aside from wanting to sell the game.)

So, I decided to do something I used to never do: I went to someone else for project help.


Main attempt #3: "Unichunk Alpha" Bode3D

14 years old: 2017, around April.
Unity-based, with a more realistic voxel engine Unichunk Alpha, featuring actual chunks.

It's not that I don't like the help of others, it's just that I always did these sort of things myself. It was how I was made and how I had grown myself. I always wanted the experience of discovery myself, and to prove that I can indeed invent what I pursue the existance of. But I was simply hung up.
So, I did some research into the projects of others, wound up in a thread about making a voxel game ("block-based game", I think I was calling it then), with Unity. I think it was there that I found someone's Unity project for this. I need to re-discover it someday... maybe it's in some old PC backup of mine.

I can still remember where I was when I found out what voxel engines were all about.
I was downstairs in the basement, by the Ikea Futon(?) couch, with my companion and brother Jeb, on a sleepover night. I got the project running; I had to fix it up, it had some shader issues which I didn't understand. But I got it running.
I can still see the video output from the software. The window was flooded with solid pink. I moved the mouse up, wondering what I would see. And I saw a horizon appear.
It was a terrestrial sort of horizon. The "planet" was all in unshaded, solid shader-error pink, but something that was to me magical was finally happening.
I exited and got the shader situation sorted out. I tried the software again and really terrain showed up, flowy and large-looking, with formations which rose above the ground like giant curved bridges.

I remember going into the Unity editor while it was running, mousing over the terrain and wondering what would happen when I clicked. I clicked, and Unity's orange outline (a newer feature at the time) appeared around the whole chunk -- not the block I selected. I pulled the Y-axis arrow upward, pulling the chunk into the air, and I rotated the camera around it, taking a look at it. I began to realize what was going on. Then it clicked.
Each chunk is one game-object, and its mesh is calculated from the contents of a 3D array in the chunk.

I opened the project's code, taking care to not see too much (like they were answers I was not allowed to see!), and found the code showing me how to control meshes in Unity. I got to work on my own engine.
I then made "Unichunk", my voxel engine utilizing the technique I had observed. With Unichunk Alpha, there was a "linear chunk registry" (that's what I called it) where the system stored chunk references in a 1D array. And it worked: and not only was it playable, but the engine was almost as performant as Minecraft's engine itself. I had finally done it.
I can still feel the granite 😁


Main attempt #4: Unichunk "Beta" (was it?) Bode3D Alpha

14 years old: 2017, around September.
Unity-based, with a multidimensional "chunk registry".

[TODO: 3D chunk registry, but with pointer shifting]


Main attempt #5: Unichunk Bode3D

17--18 years old: 2020, spanning the year (v0.x); 19 years old: 2022, around July (v0.5).
Golang + G3N -based, with new player-position-agnostic data-structuring for voxel storage.

[Version v0.3]

[Version v0.5: finally!]

The system could load 27 miles into the distance, with 1-meter blocks (almost exactly or exactly Minecraft's block size)!
[Multithreaded] [Performant] [Split into proper library Unichunk and the game; usage of generics and extensibility etc.]
[Tree-based chunk registry]


TODO: finish documenting!