Site 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:

Result

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.

While I was working on the next tutorial I found myself implementing a side panel over and over. That side panel had a button to shrink or expand it and is meant to hold a few settings to change the overall behavior of what I wanted to show within the tutorial.

In order to avoid having to continue re-implementing the side panel I decided to create a generic one and turn it into an addon. And here it is!

As usual, you can find the addon itself on my Github repository

A dedicated tutorial for it can be found here.

A quick preview of this Control in action is shown bellow:

Result

And I can finally update my site again! For a little bit of information on what happened, I have a new post here. In short, I had to switch static site generators.

With this, the RSS feed generation is different and it probably have triggered a lot of "new" posts within some (if not all) aggregators. If that's the case, please know I'm deeply sorry for that! On the bright side, I believe the new feed generator does a better job than what I was doing previously.

Nevertheless, with this new update I also bring 3 (or maybe two and a half) Godot Addons.

The first one is a base class meant to serve as starting point to create custom widget Controls for Godot. It basically deals with the theme system in order to automatically expose styling entries to the Inspector for easier overriding. With this, custom controls can somewhat behave like any other core Control when attempting to override the theme of a single Control within the editor.

The second one is a UI Control (TabularBox) meant to allow viewing and editing of tabular data, providing means to create custom columns for dealing with specific value types. As an example, one of the columns provided with the pack allows rendering thumbnails of texture resources assigned to cells.

Finally, a Database addon that includes an editor plugin to create and manage in game databases. This plugin uses the TabularBox Control in order to allow editing and viewing of the data. This addon also provides means for a column to reference another table within the database, which could be really useful. Also, it does integrate into it the Weighted Random Selection With Godot technique for easier random picking rows from the tables.

As usual, those addons have tutorials to explain how to use them.

So, this is the nuxt generation of my site. Hopefully I didn't break anything during the migration process!

In this new tutorial I show how we can use conditions to determine which properties will be shown within the Inspector tab of the Godot Engine editor.

The result should be something like this:

Result

The tutorial itself can be found here.

Happy forging!

After a few requests, here is a tutorial on how to create dedicated servers with Godot Engine. In this tutorial I show how to obtain that through a single Godot project, instead of using one project for server and another project for client.

Note that there is a little bit of the synchronization code to showcase the proposed code architecture in practice, although this part of the tutorial uses my Network Addon

The dedicated server tutorial can be found here

Happy forging!

There is a new relatively short tutorial on how to randomly select something from a list taking different probabilities (weights) into account. The described technique is very simple and the best part is that if weights and the actual list must be changed the code remains the exact same!

The tutorial can be found here.

Happy forging!