Saturday, February 25, 2023

February - A Month of Conflicting Priorities

February is almost gone and I have spent this shortest month of the year deciding what to do about upgrading my project to Godot 4 (G4).  In the end, I have decided to pull the project back into Godot 3.5.1  (G3) while I wait for breaking changes and non-working 2D features to get fixed.  Let me briefly share some thoughts on my experience.

Once G4 reached release candidate status, I downloaded the latest build and created a copy of my current G3 project.  Once I opened the project in G4, it commenced to upgrade the project and left me with several hundred errors and warnings.  That's OK, I expected them.  Systematically, I walked down the list to identify major breaking changes and found the following:

1. Shaders were broken.  I wasn't too surprised about this.  Upgrading a language-centric feature like the shader system is obviously going to create incompatibilities.  The upgrade tool was kind in giving some suggestions on how to make my existing shaders backwards compatible to the extend they would continue to function.  

2. Open Simplex Noise (OSN) was deprecated.  This one was a little frustrating.  G4 has replaced OSN with an entirely new library called FastNoiseLite (FNL).  I did not delve much into the differences between OSN and FNL nor did I refactor my code to use the new library's methods.  This was because I never reached that point in the process.  Another feature hindered that effort.  It appears the FNL library seems to be able to create more varied noise than FNL, which is definitely a good thing.  I wasn't very impressed with OSN to begin with.  It produced noise that was strangely predictable, which is not what you expect from a noise library.  For example, noise (0,0) was always the same value, every single time.  Anyway, I look forward to playing with FNL when I finally do upgrade to G4.

3.  GDScript updates.  Not much to say here.  As with the shader scripting, I totally expected changes to the language and I am sure the changes will be for the best.  I am so looking forward to learning it. 

4.  Tilemaps.  I saved the best (or worst) for last.  Tilemaps, where do I start? When I think of G4 Tilemaps, a train-wreck comes to mind.  Seriously, the new Tilemap system is buggy and more importantly, it is amazingly convoluted.  For example, it provides for the ability to create what are called Terrain Sets, which are another level below Tilesets.  The Terrain Sets provide a feature that incorporates the auto-tiling logic, which I definitely need.  But within a Tilemap and TileSet, and Terrain Set, there is yet another level called Terrains.  No, they are not the same thing.  Terrain Sets (many) can have many Terrains.  Oh, then yet another many relationship is Layers. Confused yet?  I was and still am!  What is the purpose of having the ability to create multiple Terrain Sets with each having multiple Terrains with multiple Layers? It seems convoluted and unnecessary. Plus, the Terrains that are configured for auto-tiling within the same Terrain Set within the same Tilemap don't even auto-tile correctly with each other.  It is totally broken as of this post. I tried creating multiple sets of terrains for my grass (spring, summer, fall, winter) - a simple use-case. Forget about coding procedural generated tiles, just painting them on the map using the tools showed me they do not auto-tile correctly over each other.  The tiles become confused and auto-tiling doesn't seem to know how to adjust. Throw in Layers and what exists today is just not understandable.  There are some other points I could mention, but a broken Tilemap system blocks my upgrade path.   

I know that Godot is a community project and those that contribute to the development of the engine do so with absolutely no compensation other than the good feeling of being able to contribute.  I get that and I appreciate every hour of every day that these developers spend working on the game engine I love and will use for my game.  That said, I think in their zeal to reinvent the wheel, they created a system that not only breaks every game that has ever used Godot Tilemaps, but they did so in a manner that should be avoided.  If you are making a 2D game, Tilemaps are probably at the center of your design.  It would have been much better to take an already working and capable Tilemap system and ease in the changes in such a way as to make upgrading easier and to allow for community feedback over an extended set of releases.  I am certain this would have been a much better path for everyone. 

I have been in software for over 18 years.  I understand what it is like to over-engineer a system or feature in the hopes of making something that is extremely flexible and powerful.  I understand because I have done it many times.  But this was overkill in my opinion.  And it is the one major feature that will keep G4 at arms length for probably the rest of this year. 

So, I will march into March with G3.5.1 and continue building my craftwork crafting system along with the gathering system in hopes that the Godot developers working on the Tilemap system will either create some videos, or more importantly update the documentation with code examples and explanations of convoluted features so that more of us in G3 land can make the crossing to G4.

I hope to be posting more videos soon on my YouTube channel.  Thanks for reading.

Until next time...