This week I’m working with Godot, a free and open source cross-platform game engine released under the very permissive MIT license. Let’s get to it.
The Game Engine I Waited For
The Godot homepage has this neat little tagline:
The Game Engine You Waited For
The joke? Waiting for Godot is a play by Samuel Beckett, in which the main characters wait for the arrival of someone named Godot … who never arrives. Although it was originally written in French, Beckett’s English language version of the material was voted, “the most significant English language play of the 20th century,” in a 1990 poll conducted by the British Royal National Theatre.
Godot was formed in 2007 by Juan ‘reduz’ Linietsky and Ariel ‘punto’ Manzur. According to Linietsky, the name Godot was chosen to represent their never-ending wish of adding new features to the engine, always pushing off an exhaustive product. It wasn’t until February of 2014 - seven years later - that the source code would be published on GitHub and it wasn’t until the end of that year for Godot to reach version 1.0 - it’s first stable release.
Features
At the time of writing this, Godot’s last stable release (v.3.0.6) was released in July of 2018 - and development is on-going. The engine itself runs on several operating systems, including Windows, macOS, Linux, BSD, and Haiku. (Fun fact about Haiku - it’s an open source operating system supported by Haiku, Inc., a non-profit organization based in Rochester, New York, founded by Michael Phipps, Computer Science graduate of Rochester Institute of Technology, Class of ‘97). Games made with Godot can target desktop, mobile, and web platforms, using Godot’s export template system. It’s easy to create custom builds as well, if the existing templates don’t cut it.
Compact
Godot is a small engine - roughly 20 MB in size - and is very easy to compile. It comes with a built-in debugger, profiler (with graph plotting and time seeking), that allows for projects to be modified, even while they’re running. Changes made while live are persistent - a design choice that some engines don’t have.
It’s in the Node
Godot adpots a Scene- and Node-based hiearchy as its approach to game development. Everything in Godot is a Node and nodes can be (infinitely) nested. The visual editor that comes with Godot makes it friendly, inviting, and easy-to-use for creators at any level of the game development pipeline.
Godot’s configuration and project files are version control friendly - feel free to make liberal use of your diff command. Godot also utilizes a custom scripting language (GDScript) that was written explicitly for the engine - GDScript’s syntax is also supported by GitHub, so it enjoys some of the same privileges of its older cousins.
Scripting
While GDScript is a Python-like language meant explicitly for Godot, it’s not the only one available. The latest stable release has full C# 7.0 support (using Mono), support for a visual scripting system using blocks and connectors, and full native C++ support without the need to recompile the engine (through the use of a core-module dynamic). The GDNative aspect of the project exposes the engine’s native C symbol API that allows developers to create and utilize bindings to other languages if they so wish - bindings already exist for Python, Nim, and D, among other languages.
Animation
Everything in Godot was built with animation in mind: from bones and objects to function calls themselves, everything can be tweened.
Godot vs. Unity
Godot supports both 2D and 3D game development. While this is what draws the largest comparison to the Unity3D game engine, there are three crucial differences. By all means, Godot is not a perfect engine, but, knowing where it excels can help you make a decision about which engine to choose.
No Nest To Call Home
Unity doesn’t allow you to use nested prefabs; all prefab instances will overwrite internal prefabs once ‘nested’. While Unity encourages composability over inheritance, it seems like a missed area to not allow prefabs to be components and children of other prefabs. Godot’s node-based system gets around this issue.
Pixel Perfect 2D
Unity3D developers can create 2D games, but, it often comes with the overhead of running a 3D game engine on top of that. Godot’s 2D engine is fully dedicated 2D and is not just a repurposed 3D approximation of 2D. This advantage allows developers to create pixel-perfect gameplay, utilize 2D lights and normal maps, and animate 2D rigs with skeletons and IK. Unity can get the job done, but, your mileage may vary.
Unity is Proprietary
Unity3D is free as in free pizza. It’s not an open source game engine, unlike Godot, so when you want to expand a particular feature set, you’re stuck waiting for the Unity team to get around to fixing it.
Godot vs. Cocos2d-x
If you’re looking for an alternative to Godot, Cocos2d-x based editor CocosCreator is a great open source engine with its own community supporting it.
Ease of Use
Chrome Trip by @enthus1ast. A downloadable, open source multiplayer game created with Godot for the GitHubGameOff 2017 jam.
Godot is special because of its ease of use. Ariel Manzur, co-founder of OKAM Studios and Godot, led a team of industry newcomers in the design of adventure game Dog Mendonça & Pizzaboy. Godot, in some ways, was built by its founders to help express the desire for a more visual approach to game development, without necessarily sacrificing the power that comes with engines like Unity3D and Unreal.
Teachers at a West Virginia high school have used Godot as a way to address the state’s 2016 coding, app, and game design curriculum. There’s plenty of room for students to learn game development while introducing them to the concept of free (as in free speech) software.
Open Source & Diverse Community
There is no question behind Godot’s status as free, open source software. On November 4th, 2015, Godot joined the Software Freedom Conservacy. On June 22nd, 2016, Godot received a $20,000 Mozilla Open Source Support (MOSS) “Mission Partners” award to incorporate Web Sockets, WebAssembly, and WebGL support. It has the acknowledgement of the big names in open source, and, the community is very active. There are currently 4,045 open and 11,267 closed issues on the upstream repository. The project has been forked more than 3,800 times and there are currently 263 open pull requests.
It is a thriving, vibrant community. This year, the first ever Godot Sprint was held in Brussels, two days before FOSDEM 2019 and GodotCon 2019. Contributors were able to meet in order to encourage completion of C++ engine features, writing of documentation, and creation of teaching materials for new developers. These are signs of a strong open source project that will be a mainstay for years.
There are several ways to get involved with the community:
Support Development
If you aren’t interested in contributing to the Godot project as a developer, consider donating monthly via Patreon or directly via Paypal. Godot’s donations are processed by the Software Freedom Conservancy and used to hire developers based on contracts that are made transparent to all supporters.