Devlog #3


After my break, I decided to go towards a whole other direction. But I'll talk about it later.

Before this, I wanted to focus on shaders and played around with Godot 4.0. I got intrigued by the new renderer: Vulkan. Which made Godot games look infinitely better!

So with a lot of tweaking and work, implementing solutions such as "multi-surface meshes" and even some PBR, this is how it ended up looking like:

(Of course these are just tests, which is why the terrain doesn't look as good as it was. I don't want to generate big terrains while trying out that kind of features. Plus I don't plan on adding infinite worlds for now so I keep a very simple configuration)

Once this was done, I added a save/load system. Which allowed me to save my worlds and come back to them if needed. Since this would be a BIG part of the game (with the whole idea of sharing worlds around), I had to make it work as soon as possible, and so I did.

I created a simple work, placed random blocks, saved, loaded... And here it was!

The blocks I placed randomly were still there, the texture still applied, even the block rotations were kept! It was all going well.

And so here came the next step...

This is what I was not ready for and what was the part where I thought I'd give up:

Modding:

Since I wanted players to create their own content, I thought it would be nice to give them control over the scripts themselves. And I had the (not so) brilliant idea of injecting code into the game. I never modded a game on my own before, I never injected code into a game, and it was a first for me. I had so much to learn, especially since this time it was not just modding but also giving the tools to modders and limiting the control while giving enough control.

It was hell, to be fair... I actually had to rewrite the entire codebase. I created side projects to test it out and I discovered something awful:

Godot doesn't work the same way as simple c# projects. Where I could inject code easily into simple projects and manage dependencies over libraries, Godot didn't work this way. And most of the time it worked only in the editor and not in builds because it was different there as well. I had to ask around multiple times until an solution finally came up and I was able to make it work!

Why all of this work? Only to implement the basics of modding for users. So they could add their own code.

Let's put it simply: In Minecraft, or this game, to open a door you would need to right click on it and it would have an effect where the mesh would change and rotate. This is only the case for special blocks which are unique and respond their own way to interactions. I wanted modders to be able to do this on their own, implement their ideas. It was impossible to do when loading block data, I needed scripts to alter the game itself and modders needed their own script as well.

But after a long week of hard work, it was finally done! The game loads mods/addons, it can work with them!

A single addon added most of the blocks in this picture. The bricks, the metal blocks on the floor, it all comes from a custom addon. And it was working perfectly!

I decided to give even more control to the modders by allowing them to override built-in blocks and other addons with their own if they wanted to customize the whole experience:

And here it is! This is the current state of the project. This is where I am as of now. I'll post the evolution of the project as it goes, so don't hesitate to let me know your thoughts! :)

Leave a comment

Log in with itch.io to leave a comment.