Maintenance release: Godot 3.1.2

By: Rémi Verschelde Nov 29, 2019

While Godot 3.2 is shaping up nicely in the late beta stage, it's time for a long overdue update to the stable 3.1 branch: Godot 3.1.2 is now released with over 400 commits worth of bug fixes and improvements over the previous 3.1.1 version.

Download Godot 3.1.2 now and read on about the changes in this update.
Edit: The update is now also available on Steam and itch.io.

Note: Illustration credits at the bottom of this page.

Edit 2019-12-03 @ 15:00 UTC: A regression was found in the WebAssembly (HTML5) export templates, which was fixed this day. The export templates .tpz file now contains the fixed templates, but if you installed Godot 3.1.2 and the templates before this date, you should update the WebAssembly templates manually. See instructions below in the download section. To do so, download this archive containing only the fixed WebAssembly templates, and install them manually from the editor (see details). If you downloaded Godot after the date of this edit, you do not need to do anything. The Steam distribution will also be fixed automatically.

Edit 2019-12-04 @ 10:30 UTC: A follow-up regarding HTML5 templates: if you used the "Custom Html Shell" preset option to use your own loading code, you need to update your HTML template as shown in this commit. This is necessary to support recent Emscripten versions.

Release branches

Before checking the changelog for this release, a short clarification on the release branches that we use for those not familiar with Godot's versioning.

Our next stable branch, developing the Git master branch, is Godot 3.2. This version is currently in beta and should become stable within a few weeks. Most of the devblogs published since the 3.1 release cover features which have been merged in the master branch and will be included in Godot 3.2.

In parallel, we also work in the vulkan branch on version 4.0 which will come sometime next year with Vulkan support. We increase the "major" version number (3 to 4) as there will be some compatibility breakage.

Our current maintained stable branches are 3.1 (latest release now 3.1.2), 3.0 (latest 3.0.6) and 2.1 (latest 2.1.6). Each of those branches is tracked separately in a Git branch, where we cherry-pick relevant commits from the master branch for future maintenance releases. The new 3.1.2 release is thus a maintenance release for the 3.1 branch, with the same feature set that 3.1 already had, but less bugs and some usability and documentation enhancements.

So if you're looking for the latest and greatest, check 3.2 beta 2, but if you have game in production using Godot 3.1.1, this update is for you!

Changes

As mentioned, this release includes more than 400 new commits, with many bug fixes, usability enhancements and documentation improvements. You can read the complete changelog for details. Below are a few selected highlights:

You can also see the full changelog since 3.1.1-stable on GitHub, split in two parts as the web view is limited to 250 commits: part 1 and part 2.

Known incompatibilities

Below we describe the known incompatibilities with previous releases in this cycle.

Known incompatibilities with Godot 3.1

  • Due to a security fix the GDNative ABI has changed. If you use GDNative modules in your project they will need to be rebuilt from source.
  • Godot no longer automatically decodes Objects when using high level multiplayer. If you do want your client or server to do this it is now necessary to explicitly allow it. See this PR for details.
  • Previously on Android OS.get_unique_id() would return the static value for Secure.ANDROID_ID. This was a bug and now an actually unique ID is returned. If you were using the unique ID for encryption purposes you must now also check the original static value or your users may lose access to any encrypted (save) data.

Known incompatibilities with Godot 3.1.1

  • CPUParticles2D: The "Lifetime" draw order was reversed. GH-29558 fixes it, but if you relied on the previous wrong order, you would have to work it around.
  • RigidBody(2D): The can_sleep variable was not properly initialized (regression in 3.1). GH-32767 fixes it, but it might impact your project if you relied on the previous incorrect initialization.
  • GLES2: Some of the many bug fixes listed above may lead to changes in the visuals of your project (especially around lighting/shadows). Be sure to report anything that you would consider a regression.
  • macOS: Key mappings for KEY_BRACELEFT and KEY_BRACERIGHT were inverted. GH-28185 fixes this bug, so check your code in case you relied on these values matching the wrong keys.
  • HTML5: The signature of the startGame() JavaScript function changed, so if you used a "Custom Html Shell" in your export preset, you need to update it as done for official templates in this commit.
  • If you spot any other difference in your projects, please notify us so that we can list it here (even if it's a good change/bugfix, it's worth documenting it so that all users are aware).

The illustration picture is from Fantastic Creatures, a turn-based 4X strategy game set in mythological Ancient China and developed in Godot by Blue Calisto (@FmrPlays). It was released on Steam two weeks ago.