int main(int argc, char* argv[])
   std::cout << "Hello and welcome to my forge!" << std::endl;
   return 0;

In this site you will find (programming) tutorials with a focus towards game development. Some content unrelated to game development, but still about programming may be found here.

Interested yet? Please feel free to browse all of the available tutorials.

There's also a "blog-like" section where I talk/ramble/rant about something still related to programming/development. Because those posts are not exactly tutorials and are more opinion based, I decided to add that space.

Most recent news

New to this site is the Projects section. It's meant to be a central place to link into all my published projects, excluding any that is "tutorial reference material".

The navigation bar has been updated to link into that section.

Happy forging!

Audio playback in Godot is actually very straightforward. We add one AudioStreamPlayer, AudioStreamPlayer2D or AudioStreamPlayer3D node, assign an audio stream resource then call its play() function. However if the node is destroyed in the middle of a playback, the audio will become interrupted. This is a common case when dealing with impacting bullets, player pickups and so on.

In order to help with audio playback without having to worry about node lifetime, I created the Audio Master addon. How to use it can be found here. As usual, the addon itself can be found in this GitHub Repository

While working in a (Godot Engine) project I ended up creating a Resource meant to hold data. Editing its array was very clunky. But most importantly, adding a custom scripted resource into this data class was not possible. Well, it was, but the "new instance" is not filtered in Godot. That is, it display a huge list of classes derived from Resource.

So, I decided to create an Editor Plugin meant to deal with resources of this kind, the Data Asset plugin. A preview of the plugin in the animation bellow, which showcases rearranging elements of an array of custom scripted resources:

DataAsset Preview

Yet, editing numerical properties were not exactly close to the editor provided within the Inspector panel. Granted, the editor uses a Control named EditorSpinSlider, which is not fully exposed to scripting. So, I decided to also create a Control that implements something similar to that, which is provided as the SpinSlider. A preview of the widget:


As usual, I have a tutorial for each of the two new addons. The SpinSlider information can be found here. As for the Data Asset, it's here

Some time ago I decided I wanted to have a web version of the CSV to JSON converter I implemented in Godot. Shortly after, I stumbled into the fact that HTML exports are sand boxed, meaning that the FileDialog control does not have access to the file system. Yet, we can work around this and provide means to save/load data to/from the file system. I show how in this new short tutorial.

Recently I watched a video from one of Lucy streams. In it a viewer asked the difference between _process() and _physics_process() in Godot.

Based on the answer I wanted to tackle the subject, so I wrote a new "Tutorial" here. It's a very short text and hopefully it should be enough to help understand when to use which.

By the way, here is Lucy's Youtube channel.