A guide to help you choose between Godot 3 and 4 for your game development, as well as some tips and tricks to avoid last-minute problems when using version 4 for a game jam
The GMTK Jam 2023 is around the corner, and many of you may have decided to jump ship and try Godot 4 for the first time. You may be frustrated with Unity, upgrading up from Godot 3.X, or maybe this is your first dive into game development.
Game Maker’s Toolkit on Twitter: “I asked GMTK Game Jam participants to tell me which game engine they used to make their submission. Here’s the data:(♿️Image contains alt text) pic.twitter.com/KJEqdKAftO / Twitter”
I asked GMTK Game Jam participants to tell me which game engine they used to make their submission. Here’s the data:(♿️Image contains alt text) pic.twitter.com/KJEqdKAftO
Jams are a great opportunity to learn new tools. The stakes are low. It “forces” you to apply your work concretely after fooling around with step-by-step tutorials but without an excessive time commitment. Plus, Godot 4 just released earlier this year with great new and expanded features!
Now, before you go and download Godot 4 at the start of the jam, here are a few things you should know.
Godot 4 Is Great, but It Still Has a Few Rough Edges
Godot is a great choice for Game Jams. It is lightweight (it is just a 50 MiB download, and it will probably open your project instantly); it is open source with a vibrant community and multiplatform (you can even run the editor itself on the web and Android!).
And while Godot 4 included a ton of new features and deep internal refactoring, it’s been just a few months since 4.0 was released, so some issues are still being worked on. Here’s some of these lingering issues:
- Stability: I don’t remember Godot 3.x crashing for me a single time while using a stable release (it is true that I normally stick to not-very demanding 2d games). Godot 3.5 is rock solid; sometimes stability and not features are what you want for a jam.
While Godot 4.0 is not prone to crash, it sometimes ends up in a “bad” state, forcing me to restart the editor after a long session. This is not a big deal because opening a Godot project, unlike other engines, takes just one or two seconds, but it is something to consider. In any case, I’ve never had stability issues with the games I made with Godot 4, only with the editor.
- Documentation: Official tutorials and guides have not yet been fully upgraded to work with Godot 4 APIs and workflows, which may be confusing, especially for those using Godot for the first time. This is especially true for localization to languages other than English.
The class reference manual is complete, but some guides may have gaps that are slowly being covered. You can help fix this! 😊 - UI weirdness: Like with many open source software, core functionalities are implemented or updated first, and the UI polished and optimized afterward. Due to the rewrite of some internal architecture, some workflows are still not 100% in their final, desired state, requiring a few more clicks than they should. For example, I like the new model for handling 2D tilesets and tilemaps -as it is more powerful and flexible than the old one, but more emphasis must be put on making simple tasks easier and more advanced, more hidden.
- Feature regressions: While Godot 4 is mainly a major release with new features, some old ones have been deprecated or need more work before being re-enabled. While very few people will miss the visual scripting language, other things like the lack of web export when using C# may be a deal breaker for some, especially for a game jam, in which the web export makes your game way more accessible.
- Community resources: Godot 3 has been out for over five years already — which means multiple issues, workarounds, guides, and tutorials have been created for it by the community. Given, in some cases, how deeply the engine and the API have changed for version 4.0, there are yet not as many community-made resources as with 3.X, and for questions that apply to both, there will be more answers using the 3.X syntax than the latest version.
For example, the following Godot 3 shader code from GDQuest to create outlines (from https://github.com/GDQuest/godot-shaders/blob/master/godot/Shaders/outline3D.shader):
shader_type spatial;
render_mode unshaded, cull_front, depth_draw_always;
uniform float thickness = 0.1;
uniform vec4 outline_color : hint_color = vec4(1.0);
void vertex() {
VERTEX += NORMAL * thickness;
}
void fragment() {
ALBEDO = outline_color.rgb;
if (outline_color.a < 1.0) {
ALPHA = outline_color.a;
}
}
It only needs to change its hint_color keyword to source_color. However, as it is, it will return an error and will confuse the casual or new user that just wants “things to work.”
- Learning curve: If you are familiar with Godot 3.X workflows, you may be frustrated at first that converting automatically existing projects to Godot 4 is a “best effort” process. Tilesets won’t work without a manual update. The Tilemaps’ new UI will be confusing at first. KinematicBody classes have been renamed and refactored into a new CharacterBody, with different properties. And collision shapes are likely to need adjustment, among many other changes. You will feel dumb for a while because everything will be very, very familiar, but at the same time, almost everything has been touched and optimized.
You will write yourScene.instance(), and it won’t work because it is now the more correct yourScene.instantiate().
It’s an Unfair Comparison: Godot 3 Had Literally Years of Advantage and Polishing Over Godot 4
Does that mean you shouldn’t use Godot for the next Jam? Actually, there may not be a better time to jump into it than now because you are spoiled with choice. Here is my advice on how to decide between 3.5 and 4.0:
- If you are new to game dev, just go directly to 4. 4 is mature enough for you, and you will rarely find issues that advanced users will encounter. Plus, you won’t be kept down by outdated knowledge. Just if you search for help with Google, Stack Overflow, or ChatGPT (which is banned for the GMTK, anyway), please be aware that many of the solutions will still apply only to Godot 3, so either search for “Godot 4” specifically (and drop ChatGPT, which has no Godot 4 knowledge) or stick to the official documentation.
- If you come from Unity and want to keep using the familiar C#, be aware that you won’t be able to export with Godot 4 from that language to the web, Android, or iOS. You will need to export to a Windows executable (which may reduce the accessibility of your game for potential testers) or stick to Godot 3.5. Otherwise, if you want to use the more native GDScript, I would recommend going directly to 4. Note that Safari is having issues with the web export, too.
- For people already familiar with Godot 3, it will depend on your goals. The main decision is if you want to have a 100% stable, comfortable, polished experience with no surprises (even at the cost of the new features) and center the Jam around getting things done; or if you want to use it as an excuse to finally upgrade your skill set to Godot 4, even if that means getting yourself uncomfortable a little bit.
Godot 4 is clearly the future, but again, the above web export outstanding issues will also apply to you, plus the changes on the Node APIs and shader language changes, as well as potentially some additional bugs to deal with.
Remember that Godot 3.5 is never a bad choice, as some quality-of-life improvements have been backported to it from the 4.0 branch!
Here is someone else’s take with similar opinions to mine, although not just in the context of a Jam:
Here Are Some Tips if You Go for 4, so You Avoid Last-Minute Surprises
If you finally take the plunge and go for Godot 4, here are some tips to avoid getting frustrated during a high-pressure 48-hour game jam (applicable to both newbies and veterans):
- Test the full workflow in advance
Download Godot 4, quickly program a square (or a cube) that moves over your window (the new built-in templates will help you do that without writing a single line of code), and do the full workflow, including exporting, compressing and uploading your game to Itch.io. You may hit some limitations early (like the lack of working HTML5 templates for C#), and you may be able to workaround it or change your version. There cannot be a more frustrating thing than spending 48 hours developing a game only to realize at the last minute that the platform you aim to export to is unavailable or has performance issues. - Web export requires using GDScript and has performance issues in OSX/iOS and Firefox+Linux.
Sadly, with the move from Mono to .NET 6 — allowing the usage of modern C# features — the web export feature is missing from Godot 4.0 (when used with C# as a language). The GDScript version is not problem-free, though. WebGL 2.0 support (compared to WebGL 1.0, used in Godot 3.X) is lacking in some combinations of browsers and OSs. This is not necessarily Godot’s fault, but something to highlight if non-Windows users are important to you.
Due to the extra functionalities, it doesn’t also help that the export size of an empty project has doubled (from 13 to 24 MiB without compression), contributing to longer load times. - HTML5 exported code uses SharedArrayBuffer, which requires specific headers in your web server
If you find the following error shown when posting Godot’s 4 web export in an external service:
Error
The following features required to run Godot projects on the Web are missing:
Cross Origin Isolation — Check web server configuration (send correct headers)
SharedArrayBuffer — Check web server configuration (send correct headers)”
This means two headers are missing from the web server where the game is hosted. Those are:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
For Itch.io, SharedArrayBuffer is an option that you can enable when uploading your files just by pressing the right checkbox:
If you use another hosting service, check how to set custom headers for that environment. Here is the config I added to my personal web server using Apache HTTP Server (after enabling the headers mod):
# For Godot 4
Header set Cross-Origin-Embedder-Policy: require-corp
Header set Cross-Origin-Opener-Policy: same-origi
This change will require an Apache reload (or a restart if the module wasn’t already enabled).
Conclusion
Despite apparently being a bit negative, I want to set expectations clear about what to expect on Godot 3.5 vs 4.0. As a system administrator, I am a big fan of being conservative about software upgrades. Given 4 is only a few weeks old, some things may affect you (even if some are not due to Godot itself, but the ecosystem still has to adapt to it).
I daily drive Godot 4 since its first official release, and I am not going back (I will use it for GMTK 2023, too!). Otherwise, I would be missing out on so many things! However, as this will be the first time many people download it, I hope these tips and warnings will be useful for everyone to choose wisely and be satisfied.
I also want to thank the developers and Godot community members because they are working hard and supporting many people in polishing those last bugs and rough edges, as well as helping people upgrade to make the old LTS version completely obsolete.
And no matter if you use Godot 3.5, 4.0, Unity, or any other engine, see you at the Jam!
Resources
- Godot Engine Website
- Godot 4.0 Official Documentation
- Godot source code and issue tracker
- GMTK Game Jam 2023 itch.io page
- Itch.io SharedBufferArray support note
Want to connect? I am jynus on Twitter, GitHub, and Itch.io.
So This is Your First Jam With Godot 4? Here is What You Should Know Beforehand! was originally published in Better Programming on Medium, where people are continuing the conversation by highlighting and responding to this story.