Releases: Relintai/pandemonium_engine
5.0.0
Highlights
- Added new Variant types: TypedArray and PackedTypedArray.
- Backported all improvements from Terraman to Voxelman.
- Improvements to both Voxelman and Terraman.
- Finished docs for Voxelman.
- Added a new scripting language: PScript, with a c-like syntax.
- Threading related classes now use the platform apis directly.
Breaking Changes
- SafeNumeric has been split to SafeNumeric and SafePointer. This might result in a break on the c++ side for engine modules.
- Renamed DEFAULT_CHANNEL_ALT_TYPE to DEFAULT_CHANNEL_LIQUID_TYPE and DEFAULT_CHANNEL_ALT_ISOLEVEL to DEFAULT_CHANNEL_LIQUID_ISOLEVEL in voxelman.
- Backport bd476c1 to voxelman.
Split _create_chunk() to _create_chunk() and _setup_chunk() in
TerrainWorld.- Unfortunately this is a breaking change. (Very slight though.)
Now _create_chunk() should be used to initialize serialized properties
in chunks. The new _setup_chunk() virtual should be used to initialize
other non/serialized properties (like meshers).
Fortunately the only thing that needs to be done is to split old
_create_chunk() into two. - Note that when using procedural generation, the old way should just work
without any updates necessary. This change is only needed when loading
of chunks is desired.
- Unfortunately this is a breaking change. (Very slight though.)
Core
- Added new Variant types: TypedArray and PackedTypedArray.
- Added missing constructor for Rect2I.
- Bound 2 constuctors for Projection.
- Add approximate deep equals support for TypedArray and PackedTypedArray.
- Added missing types to Variant::deep_equal().
- Remove duplicate label.
- Split deep_equal() into deep_equal() and deep_equal_approx().
- Add deep_equal_approx to gdscript.
- Docs for deep_equal_approx.
- Rename some of the binary magic headers.
The old ones are still loaded for backwards compatibility. - Don't use IP::ResolverStatus as a SafeNumeric parameter.
- Now ObjectRC and Object use SafePointers and SafeNumerics instead of std::atomic.
- Now ThreadWorkPool uses SafeFlag and SafeNumeric instead of std::atomic.
- Get rid of stl in SafeList. Note that SafeList is not used anywhere, so it might still have issues.
Threads
- Collect old threading primitive implementations to a temp folder.
- Copy the current thread implementations under drivers.
- Now the X11 platform uses pthreads directly.
- Everything is snappier now... This is ridiculous.
- For reference the character on the Broken Seals menu appears instantly
now, instead of in about a second.
- Also set pthread priority.
- Added the pthread implementation as platform thread overrides to all flatforms that can use it unmodified.
- A better system will be needed for this eventually.
- Override thread implementation for android aswell.
- Setup native threads for windows aswell.
- Fix missing return value.
- pthread_setschedprio doesn't exists on osx.
- Fix Windows thread's global static callback method trying to access Thread's private members.
- Fix trying to return undeclared identifier.
- iOS doesn't have pthread_setschedprio either.
- Disable temporarily the pthread_setschedparam calls.
- Init _main_thread_id to 0 everywhere.
- Add platform thread override to the javascript platform aswell.
- Make the default thread implementation in core the dummy one.
- Move thread_posix.h and cpp.
- Now platform_threads.h are used whwnewer NO_THREADS is defined. Removed PLATFORM_THREAD_OVERRIDE.
- Use native mutex apis directly.
- Fix missing memnew declaration.
- Move includes in mutex.h.
- Cast before deleting for good measure.
- Remove unnecessary always inlines.
- Add missing include.
- Use c style numeric limits.
- Use native rw lock apis directly.
- Fix variable name.
- Cast before deletion.
- Use native semaphores.
- Tweaks.
- Use dispatch_semaphore for osx.
- Also use dispatch semaphore on ios.
- Reimplement atomics using old gcc builtins.
- Now SpinLock uses SafeFlag.
- MSVC atomics initial setup.
- No need for the float SafeNumeric template specialization now.
- Atomics for MSVC.
- Add new method to dummy SafeFlag.
- Added a SafePointer type to SafeRefcount. Renamed the Windows template specialization to it.
- Use InterlockedExchangeAdd everywhere instead of InterlockedAdd on Windows.
- Added proper atomic loads and stores.
- Fix compare exchange logic and also small tweaks.
- Rework the gcc version of SafeFlag to use uint8_t.
- Use set() in atomic variable constructors again.
- Use getters instead of casting to volatile in Safe Refcount. Also initialize flag to 0 in SafeFlag.
- Mark all MutexLocks as NO_DISCARD_CLASS.
Editor
- Change GDScript text to just Script in ProjectExportDialog.
- Added a default language and default name casing dropdown to the create project dialog. If changed, they remember state.
- Tweak the renderer texts in the create project dialog.
- Rename SCENE_NAME_CASING_AUTO to SCENE_NAME_CASING_KEEP so it's name better matches what it does.
- Store global script class icon keys as Strings, instead of StringNames in the ProjectSettings.
This fixes their order changing constantly in the project.pandemonium file.
Servers
- Fix multi threaded rendering.
Scene
- Remove SafeNumeric<float>-s from AudioStreamPlayers.
- The way they are used it's unnecessary. If they have race conditions
they will need mutexes. - Restored them to be volatile as they were before the atomic rework
just in case.
- The way they are used it's unnecessary. If they have race conditions
Modules
GDNative
- Added bindings for the new Variant types: TypedArray and PackedTypedArray.
- Updated the gdnative helper scripts.
- Added deep_equal_approx to gdnative.
Voxelman
- Backport improved priority generation logic to Voxelman.
- Backport 9cd4da7 for Voxelman.
Added new helper methods to TerrainWorld. - Backport 4a2d4af for voxelman.
Clear meshes as needed in TerrainPropJob. - Backport 6be11c2 for voxelman.
Implemented an immediate build mode for TerrainChunk. - Backport c13a4d0 for voxelman.
Use the new immediate build mode in TerrainWorld's
set_voxel_at_world_data_position(). - Backport e11e75e for voxelman.
Unlock the mutex after the rects are refreshed in the material cache in
TerrainLibraryMergerPCM. - Backport 2688162 for voxelman.
Optimized editing in TerrainWorldEditor. - Backport 2024a33 for voxelman.
Implemented chunk material invalidation support for
TerrainLibraryMergerPCM. - Backport "Get the dimensions from the texture instead of the image in texture_get_uv_rect of the material cache." from pre-pandfemonium terraman.
Relintai/terraman@29c68e5 - Added liquid material caches to VoxelLibraryMergerPCM.
- Renamed DEFAULT_CHANNEL_ALT_TYPE to DEFAULT_CHANNEL_LIQUID_TYPE and DEFAULT_CHANNEL_ALT_ISOLEVEL to DEFAULT_CHANNEL_LIQUID_ISOLEVEL in voxelman.
- Backport "Added a helper method to get the editor's camera." from pre-pandemonium terraman.
Relintai/terraman@a78d41b - Backport "Fix a deadlock in TerrainLibraryMergerPCM that could occur when spawning and despawning cunks extremely fast." from pre-pandemonium terraman.
- Fix include.
- Backport "Fix more issues when allocating and deleting chunks really fast. (Flying around in the editor at max speed.)" from pre-pandemonium terraman.
Relintai/terraman@0845d92 - Backport fix for some race condition and deadlocks in voxelman.
- Fix potential deadlock.
- Support using Material Caches in VoxelMeshers.
- Set and generate liquid materials.
- Backport 39cb3e3 to voxelman.
Reset the mesher's lod index in _reset() in TerrainTerrainJob. This
fixes subsequent mesh generations. - Backport 17e048a to voxelman.
Added a new helper method to TerrainWorld. - Backport 12214cb to voxelman.
Fix potential hang on exit due to deadlocks. - Missing changes.
- Fix double call.
- Backport d0fa4ba to voxelman.
Clear the material cache data in TerrainChunk::_exit_tree(). - Backport 4ac6095 to voxelman.
Added a new helper method to TerrainWorld. - Backport a980238 to voxelman.
Add the new chunk to the generation queue instead of directly calling
it's build method in TerrainWorld::chunk_add(). - Backport "When the world adds a MeshDataResource to the chunk it should not be scaled again." from original terraman,
Relintai/terraman@01721b9 - Backport "Chunk's mesh_data_resource_add expects a local transform." from original terraman.
Relintai/terraman@f76a7f9 - Backport "Now the world can be deactivated when needed." from original terraman.
Relintai/terraman@632586f - Backport "Added chunk_added and chunk_removed signals to TerraWorld." from original terraman.
Relintai/terraman@86de26c - Backport 2361477 to voxelman.
Simplify chunks_set() in TerrainWorld. - Backport b0177a2 to voxelman.
Only generate chunks once. - Backport eb3ed4f to voxelman.
Now props and mesh data resources are saved with the TerrainChunks. - Backported 583298d...
4.9.0
Highlights
- Added RWReference and RWResource classes.
It's a Reference and Resource class that contains an RWLock. - Implement code completion for gdscript enums.
- Backported the CameraServer from godot 4. Changes:
- It's 2 modules: camera_server, camera_drivers.
- It uses Image-s instead of textures in the rendering server.
- Other api cleanups.
Breaking Changes
- Removed to_json() member methods instead of deprecating them.
- This is because gdscript has the built-in to_json method. So to_json()
member methods cannot really be created. (They technically can be done,
but then the global to_json() cannot be called.). - Only 3 classes are affected (TOTP, User, HTTPSession).
- Also these methods were likely never used, other than from the c++
side. - If they were, a project wide search and replaces should fix all
issues: .to_json() -> .as_json()
- This is because gdscript has the built-in to_json method. So to_json()
Core
- Added RWReference and RWResource classes.
It's a Reference and Resource class that contains an RWLock. - Added missing conversions for can_convert.
- Handle StringNames in Expression's funcrefs.
Editor
- Fix editor theme names.
- Added back Godot 3 theme.
- Cleanups to create_editor_theme().
- Rename GODOT_LICENSE_TEXT constant to PANDEMONIUM_LICENSE_TEXT.
- Update docs for Engine's get_author_info().
- Fix the encoding of Engine::get_license_text().
- Respect the scene name casing setting in the script create dialog.
Maybe this setting could be renamed eventually.
Modules
User
- Now User and UserModule inherits from RWResource.
GDscript
- Implement code completion for gdscript enums.
Platforms
Javascript
- Disallow audio driver muting on emscripten.
- Remove remaining (now unneeded) emscripten related ifndef-s from AusioServer.
Other
- Removed to_json() member methods instead of deprecating them.
- This is because gdscript has the built-in to_json method. So to_json()
member methods cannot really be created. (They technically can be done,
but then the global to_json() cannot be called.). - Only 3 classes are affected (TOTP, User, HTTPSession).
- Also these methods were likely never used, other than from the c++
side. - If they were, a project wide search and replaces should fix all
issues: .to_json() -> .as_json()
- This is because gdscript has the built-in to_json method. So to_json()
- Added more comments to the sample module_config.py.
- Added rt shorthand for the project setups scripts for the repository_type command.
- Define slim_args_editor in the sample module_config.py, and use that to fill slim_args instead of the other way around.
It's more convenient this way, as a slim editor build will usually need
more modules to be enabled. - Update the sample module_config.py module list.
- Update the http server module list workflow.
- Update the http server's build container module list.
Backports
Backported everything up to and including godotengine/godot@9eae653
merge commit: godotengine/godot@a117d51
Godot 3.x
- Fix Open Editor Data/Settings Folder menu in self-contained mode
- Address API 35 UI changes
- DDS: Backport fixes from 4.x branch
- mbedTLS: Update to mbedTLS 3.6.4
mbedTLS 2.28 is now EOL, and will no longer receive security updates.
This commit backports from Godot 4 the changes needed to update to
mbedTLS 3.6 (new LTS), including TLSv1.3 support. - Fix build on macOS 26 by removing AGL framework link
Previously, a link error occurred as we'd be trying to link
against a nonexistent framework. AGL was removed in macOS Tahoe
since the first beta. - Backported parts of Fast child iteration in
Node,Spatial,CanvasItem - Switch window creation to UIScene.
- Fix
mbedtlsreadme duplicated text - FTI - Fix
SceneTreeFTIdepth limit behaviour
Fixes off by one bug, and increases the limit slightly. - Add blob shadows feature
BlobShadow node (sphere or capsule)
BlobFocus
Backends for GLES2 and GLES3 - Add proper flags when using external recast
- Export: Modify Windows template without rcedit
Co-Authored-By: Pawel Kowal pkowal1982@gmail.com - Linux/TTS: Fix speechd deadlock
Backport of #73671
Co-authored-by: bruvzg 7645683+bruvzg@users.noreply.github.com - Disallow muting on Android
- Rename constant.
- mbedTLS: Update to version 3.6.5
(cherry picked from commit 9de2837cd521f92ad3f18bbe1f1e7d33f10d893e) BlobShadows- FixGLES3shader builtin
TheBLOB_SHADOWbuiltin wasn't registered with the shader compiler for GLES3.
Godot 4
- Backported the CameraServer from godot 4. Changes:
- It's 2 modules: camera_server, camera_drivers.
- It uses Image-s instead of textures in the rendering server.
- Other api cleanups.
4.8.0
Highlights
- Improvements to InputEvents for tooltips.
- Improvements to String.
- Fix ResourceFormatBinary being unable to load internal resources properly.
- Added back the fbx module from godot, made it work.
- Api cleanups and full docs for the Terraman module.
- Cleanups and work on docs for the Voxelman module.
Deprecations
Terraman
- Deprecate voxel_scale getter and setter in TerrainVorld. Added equivalent terrain_scale getter and setter.
- Depreacte helper methods with voxel in their name in TerrainWorld. Added equivalent new ones for their replacement.
- voxel -> data
- Deprecated voxel_scale getter and setter in TerrainChunk. Added terrain_Scale replacement.
- Deprecated voxel_world getter and setter in TerrainChunk. Added terrain_world getter and setter instead.
- Deprecated get_voxel and set_voxel in TerrainChunk. Added get_data and set_data instead.
- Deprecated voxel_scale getter and setter in TerrainMesher. Added terrain_scale instead.
- Deprecated voxel_name property in TerrainSurface. Added surface_name instead.
Breaking Changes
Terraman
- Renamed voxel_structure* getters and setters to terrain_structure*.
- It's a straight rename because I'm pretty sure there weren't in use by
anyone ever.
- It's a straight rename because I'm pretty sure there weren't in use by
- Rename apply_voxel_scale parameters to apply_terrain_scale in TerrainChunk.
- Renamed voxel_structure* getters and setters to terrain_structure* in TerrainChunk.
- Cleanups to BlockTerrainStructure's api.
- Renamed some of the debug draw helper methods in TerrainChunkDefault.
- draw_cross_voxels -> draw_debug_cross_datas
- draw_cross_voxels_fill -> draw_debug_cross_datas_fill
- draw_debug_voxels -> draw_debug_datas
- draw_debug_voxel_lights -> draw_debug_terrain_lights
Terraman, Voxelman, Terraman2D
- Fix typo in TerrainPropJob and TerrainTerrainJob's method names.
- get_jobs_step -> get_job_step
- set_jobs_step -> set_job_step
- remove_jobs_step -> remove_job_step
- add_jobs_step -> add_job_step
- get_jobs_step_count -> get_job_step_count
- Fix the same typos engine wide.
Voxelman
- Renamed EnvironmentData to VoxelEnvironmentData.
- Renamed WorldArea to VoxelWorldArea.
Core
Input
- Improved text conversion for InputEventAction-s. Adding them as shortcuts will make a nicer tooltip now.
- Don't write "(Physical)" after the keycodes in InputEventKey, even it they are physical. This improves how tooltips look for users.
- Use RTR instead of TTR in InputEventAction::as_text().
- Use , instead of a newline as a separator in InputEventAction::as_text().
String
- Fix String::to_uint() to be able to parse to full uint length.
- Added String::to_uint64() helper method.
- Move int64_t to_int64() const; helper method in the files.
- Move things around more.
- Added static to_uint helper methods to String.
- Added a PRINT_NUMERIC_CONVERSION_ERRORS define into String and wrapped all numerical conversion warning / error prints into it.
- Set the new PRINT_NUMERIC_CONVERSION_ERRORS define to 0 by default.
- Bind new methods in String.
- Fix doc description in the wrong place.
- Improvements to String's docs.
- Fix to_bool()'s bind in String.
- Docs for to_bool() in String.
- Docs for the new methods in String.
Image
- Added get_sizei() helper method to Image.
- Normally it would probably be better to change the type of get_size() to
Vector2i, but a lot of calculations are using the fact that they get
Vector2s (real-s), so this seems to be the best solution.
- Normally it would probably be better to change the type of get_size() to
- Doc for the new get_sizei method in Image.
OS
- Added compare exchange weak and strong to SafeNumeric.
Loaders
- Fix ResourceFormatBinary being unable to load internal resources properly.
Scene
- Fix occasional errors printed in TextEdit. Will likely improve general indent handling.
- Removed leftover unimplemented method from Node.
Servers
RenderingServer
- Fix unused variable warning if gles3 is disabled.
Editor
- Fix Exact checkbox in the ProjectSettingsEditor's input tab.
- Respect the scene name casting setting even with the Save Branch as Scene option.
- Added message for the error in _EDITOR_GET() if the setting doesn't exists.
- Added the missing hover_pressed style box overrides for the editor.
Modules
Web
- Use StringBuilder in HTMLTemplate where applicable.
GDNative
- Added the new methods in String to the gdnative api.
- Added Quaternion::set_shortest_arc() to the gdnative api.
- Added the REAL_T_IS_DOUBLE define to the gdnative headers.
FBX
- Added back the fbx module from godot, made it work.
- Added the skeleton_3d module as a hard dependency for the fbx module.
- Set up copyright.txt for the fbx module.
- Added custom rtti implementation so it can be compiled with disabled rtti.
- Set name for meshes in FBXMeshData::create_fbx_mesh(), as the editor uses this name when saving them as external.
Terraman
- Full docs for the module.
- Deprecate voxel_scale getter and setter in TerrainVorld. Added equivalent terrain_scale getter and setter.
- Renamed voxel_structure* getters and setters to terrain_structure*.
- It's a straight rename because I'm pretty sure there weren't in use by
anyone ever.
- It's a straight rename because I'm pretty sure there weren't in use by
- Rename apply_voxel_scale parameter to apply_terrain_scale in TerrainWorld's prop_add() method.
- Depreacte helper methods with voxel in their name in TerrainWorld. Added equivalent new ones for their replacement.
- voxel -> data
- Deprecated voxel_scale getter and setter in TerrainChunk. Added terrain_Scale replacement.
- Rename apply_voxel_scale parameters to apply_terrain_scale in TerrainChunk.
- Renamed voxel_structure* getters and setters to terrain_structure* in TerrainChunk.
- Deprecated voxel_world getter and setter in TerrainChunk. Added terrain_world getter and setter instead.
- Deprecated get_voxel and set_voxel in TerrainChunk. Added get_data and set_data instead.
- Fix getter bind.
- Cleanups to BlockTerrainStructure's api.
- Deprecated voxel_scale getter and setter in TerrainMesher. Added terrain_scale instead.
- Renamed some of the debug draw helper methods in TerrainChunkDefault.
- draw_cross_voxels -> draw_debug_cross_datas
- draw_cross_voxels_fill -> draw_debug_cross_datas_fill
- draw_debug_voxels -> draw_debug_datas
- draw_debug_voxel_lights -> draw_debug_terrain_lights
- Replace the word Voxel from error messages in TerrainLibrary.
- Added dperecation notes and also small fixes to TerrainWorld's class docs.
- Added description for the terrain_scale property in TerrainWorld's docs.
- Deprecated voxel_name property in TerrainSurface. Added surface_name instead.
- Fix typo in TerrainPropJob and TerrainTerrainJob's method names.
- get_jobs_step -> get_job_step
- set_jobs_step -> set_job_step
- remove_jobs_step -> remove_job_step
- add_jobs_step -> add_job_step
- get_jobs_step_count -> get_job_step_count
- Fix the same typo engine wide.
Voxelman
- Rename some files in the voxelman module.
- Renamed EnvironmentData to VoxelEnvironmentData.
- Renamed WorldArea to VoxelWorldArea.
- Add COPYRIGHT.txt for voxelman.
- Work on the docs.
- Fix virtual method bind return type in VoxelLibrary.
Third Party
- Updated zlib to 1.3.1.
Platforms
Android
- Updated android version numbers.
- Starting August 31 2025: New apps and app updates must target Android
15 (API level 35) or higher to be submitted to Google Play;
https://developer.android.com/google/play/requirements/target-sdk - Starting November 1st, 2025, all new apps and updates to existing apps
submitted to Google Play and targeting Android 15+ devices must support
16 KB page sizes. AGP was updated to the minimum required version to be
able to do this.
(https://developer.android.com/guide/practices/page-sizes#update-packaging) - Unfortunately the minimum sdk version had to be bumped from 19 to 21,
there isn't seem to be a simple way to keep being on minimum api level
19. The simplest way would probably be to add an old android platform,
but for now more thinking is needed.
- Starting August 31 2025: New apps and app updates must target Android
- Fix gradle warning.
Configuring project ':assetPacks' without an existing directory is
deprecated. The configured projectDirectory
'.../android/java/assetPacks' does not exist, can't be written to or is
not a directory. This behavior has been deprecated. This will fail with
an error in Gradle 9.0. Make sure the project directory exists and can
be written. Consult the upgrading guide for further information:
https://docs.gradle.org/8.11.1/userguide/upgrading_version_8.html#deprecated_missing_project_directory - Added 16kb padding to .so files when packing them to apks in android.
Original idea is from godot 3.x, which is a backport from godot 4.x
godotengine/godot@3c64599
I'm not sure whether this is needed or not, as I don't have new android
hardware.
Also the original code was very suspect so I reimplemented it
differently.
Other
- Cleanups to the Documentation and demos section in the readme.
- Added some long term plans to the readme.
- Update the sample app side module config, so it has all modules. Also added some comments to it.
- Update android versions in the build container.
- Disable werror for the android workflows, as the slCreateEngine() method got deprecated.
Backports
- Backported everything up to and including godotengine/godot@62e7304
merge commit: godotengine/godot@5aed565
Godot3
FTI- ChangeSceneTreeglobal setting to static
Also fixupFTIconfiguration warnings so that they only output when...
4.7.0
Highlights:
- Added a new "Merge Back Changes" and "Merge Back Local Changes" tool when right clicking instanced scenes in the editor.
When working with instanced scenes, these can be used to save changes back to the original scene file.
The "Merge Back Local Changes" tool skips saving transforms. - Created a new TOTP module. TOTP stands for Timed One Time Password.
- Full and improved docs for the entire fastnoise module.
- Full and improved docs for the entire lz4 module.
- Full and improved docs for the entire web module.
- Full and improved docs for the entire database and database_sqlite modules.
- Full and improved docs for the entire entity_spell_system module.
- Full and improved docs for the entire user module.
- Updated all links in the in-editor docs.
- Heavy iprovementst
FileCache. - Heavy iprovements to the
usersmodule. - Added an editor gizmo plugin for TiledWalls and PropInstances so they can be selected in the spatial editor directly.
- TerrainWorld now has built-in support for loading and saving TerrainWorld chunks dynamically to and from disk.
- Added spawners (with editor and prop support) for the entity spell system: ESSEntityWorldSpawner3D, ESSEntityWorldSpawner3DSingle, ESSEntityWorldSpawner2D, ESSEntityWorldSpawner3DArea.
- Added GDNative + Threads build to the release.
Breaking changes:
- Split _create_chunk() to _create_chunk() and _setup_chunk() in TerrainWorld.
Unfortunately this is a breaking change. (Very slight though.)
Now _create_chunk() should be used to initialize serialized properties
in chunks. The new _setup_chunk() virtual should be used to initialize
other non/serialized properties (like meshers).
Fortunately the only thing that needs to be done is to split old
_create_chunk() into two.
Note that when using procedural generation, the old way should just work
without any updates necessary. This change is only needed when loading
of chunks is desired.
c++ only:
- Now get_all_as_vector() in UserManager is not virtual anymore. Also removed other implementations.
- This had to be done as get_all_as_vector() cannot be customized by
scripts, and if an inherited UserManager needs to set up UserModules
this will cause issues later down the line. - Other solutions like a user_setup() method could also work, but then
that would cause more individual (non-optimizable) lookups to db-based
backends (and likely others too), so this solution seems to be the best
currently.
- This had to be done as get_all_as_vector() cannot be customized by
Core
- Use SpinLock in GLOBAL_CACHED. Inspired by godotengine/godot@187e14b
- Update copyright information in main.
Editor
- The "Access as Unique Name" tool option in SceneTreeDock now always have a separator.
- Move EditorPropertyRevert to it's own file.
- Added a new Merge Back Local Changes too when right clicking instanced scenes in the editor.
- Better implementation for the new "Merge Back Local Changes" tool.
- New alternate version of the "Merge Back Local Changes" tool which keeps transforms intact.
- Renamed the "Merge Back Local Changes" tool in the SceneTreeDock popup menu to "Merge Back Changes".
- Update links in the docs.
- Handle proxy classes properly in arguments and return values in EidtorDocs.
- Remove stray rset and rpc mode variables from gdnative.
- Removed stray rset_mode and multiplayer keywords from the docs.
- Removed more stray old multiplayer keywords from the docs.
- Fix the web editor hanging when switching to the editor. Likely fixes export templates too.
Scenes
- Fix crash in TextMesh.
Modules
database and database_sqlite
- Implemented table version support for SQLite3DatabaseConnection.
- Removed unused include.
- Removed unnecessary overloads from QueryBuilder.
- Removed unused include.
- Removed unnecessary #if.
- Added alter table helper methods to TableBuilder.
- Split concatenations into multiple lines in SQLite3TableBuilder, since now TableBuilders use a StringBuilder this saves a little bit on concatenating strings.
- Added recommandations to PreparedStatement and QueryBuilder's docs.
- Added Database::get_backend_name() virtual method.
- Document set_table_version() being able to remove entries.
- Full and improved docs for the entire module.
gdscript
- Disabled integer division and unused signal warnings by default in gdscript.
web
- Hode session_id and id in HTTPSession.
- Added serialization helper methods to HTTPSession.
- Added a new HTTPSessionManagerFile class.
- Automatically load sessions when HTTPSessionManagerFile enters tree.
- Removed unnecessary c++ only method from FileCache.
- Made cache_invalidation_time member protected in FileCache.
- Use uint64_t directly in FileCache's cache_invalidation_time getters and setters.
- Fix cache_invalidation_time property name in FileCache.
- Use StringNames in FileCache caching functions.
- Use HashMap in FileCache instead of an RBMap.
- Do proper cleanup in FileCache destructor.
- Added clear_expired() helper method to FileCache.
- Tweaks to caches in FileCache.
- Don't use dynamically allocated CacheEntries in FileCache.
- This simplifies the code a lot, also makes it harder to have
threading-related issues. - Also fix potential race condition.
- This simplifies the code a lot, also makes it harder to have
- Added new helper methods for folders into FileCache.
- Removed unused imports from FileCache.
- Tweak some of the variable names in FileCache.
- Renamed the path parameter for the cache methods in FileCache. It's much more useful thinking about them as keys instead of paths.
- Added more caching helper methods to FileCache.
- Actually return the absolute path in FileCache::wwwroot_get_folder_abspath().
- Close the file and don't leak memory in SimpleWebServerRequest::move_file() when in-memory uploads are used.
- Fix _validate() method's virtual bind for FormFieldEntry, FormField, and FormValidator.
- Reworked FormFieldEntries to use format strings.
- Fix data tag in HTMLBuilder.
- Implement HTMLBuilder::wr().
- Made the result variable in HTMLBuilder protected. It now has a getter.
- Use StringBuilder in HTMLBuilder in the background.
- Use empty() instead of checking against "" in HTMLBuilder.
- Use empty() instead of checking against "" in HTMLBuilder's bind class.
- Use StringBuilder in HTMLBuilder's binder class in the background.
- Finish the last tag for convenience before returning the result in HTMLBuilder.
- Fix unfinished methods in HTMLBuiler's binder class.
- Don't mess with the base_url by adding a slash at the end if it's missing in HTMLPaginator.
This way usage logic should be simpler. It will also work with old style
GET request parameters. - Fix HTMLPaginator::start() and next() skipping the first page.
- Full and improved docs for the entire module.
users
- Fix calling the wrong method in UserManager.
- Now get_all_as_vector() in UserManager is not virtual anymore. Also removed other implementations.
- This had to be done as get_all_as_vector() cannot be customized by
scripts, and if an inherited UserManager needs to set up UserModules
this will cause issues later down the line. - Other solutions like a user_setup() method could also work, but then
that would cause more individual (non-optimizable) lookups to db-based
backends (and likely others too), so this solution seems to be the best
currently.
- This had to be done as get_all_as_vector() cannot be customized by
- Improved UserManagerFile's internals.
- Now UserManager::_create_user() has a User as a parameter.
This shoukld make it easier to customize user creation. Similar idea to
how TerrainWorld's _create_chunk() works. - Fix calling the new _create_user() method in UserManager.
- Fix saving files in UserManagerFile.
- Fix User::_from_dict() using wrong dictionary keys.
- Disable internal process for UserManagerFile. It's not needed anymore.
- Guard against bad indexes in User::_from_dict().
- Write and read lock modules in User::_to_dict() and User::_from_dict().
- Use module names instead of indexes if they are available in User::_from_dict() and User::_to_dict().
- Added some comments to User.
- Added read_try_lock and write_try_lock to User and UserModule.
- Docs for the User class.
- Removed unused enum from User. Note that WebPermission had the same enum if needed.
- Always just defer call to the active UserManager or error in UserDB.
- Having an optional separate User list in UserDB when there is no
UserManager can lead to subtle bugs, so it got removed. - It also had other limitations, like it was not possible to setup Users
properly, which could also lead to subtle bugs.
- Having an optional separate User list in UserDB when there is no
- Don't use the changed signal to get a User to save itself.
- Now UserManagers have a register_as_global property. A manager will only try to set itself as the global manager if it's set to true (default).
- Print an error if more than one UserManagers are trying to become the global instance.
- Docs for UserManager.
- Store the owner UserManager in User.
- Store the owner UserManager in User as an ObjectID.
- Use the owner UserManager when saving Users.
- Added internal user name and email support for Users.
- Updated the UserManagers to use the new internal name and email. Also made sure to call the base _create_user in all UserManagers.
- Internal name and email is used for lookups, so capitalization automatically won't matter.
- Set maximum password length in UserRegisterWebPage just for good measure (256).
- Also set a maximum password length of 256 in UserLoginWebPage.
- Remove unneeded comments in UserLoginWebPage.
- Set maximum password length of 256 in UserSettingsWebPage aswell.
- Remove unneeded comments in UserSettingsWebPage.
- Include cleanups in UserWebPages.
- Added missing user locks.
- Fix missing tag in UserPasswordResetWebPage's docs.
- UserManagerDB now can update it's tables to...
4.6.0
Highlights:
- Terraman got a new fully featured editor. It also got heavy improvements, including being able to work with the vertex lights 3d system.
- Added easier locale support for the web module.
- Usage improvements to the database module.
- PLogger is now a separate app-side logging layer.
- If a .csv file is dropped into a project the editor will not import it by default.
Breaking changes:
- Mass replaced the typo "tarnsform" to "transform".
- Removed set_voxel_with_tool from TerrainWorld.
Core
- Moved the static_assert in GLOBAL_CACHED to the top.
- Reworked the new GLOBAL_GET_CACHED macro.
- Use HAS_TRIVIAL_DESTRUCTOR macro instead of std::is_trivially_destructible.
PLogger
- Added log_custom method to PLogger. It's a lot more customizable than the others by design. Also small cleanups.
- Added a new important log level to PLogger.
- Added force printing / logging option to OS. Made PLogger use this internally.
Math
- Added set_look_at helper method to Basis.
- Transform now uses Basis::create_looking_at.
- Added non-static looking_at and from_scale helper methods to Basis.
- Undo unecessary breaking change to gdnative.
- Renamed looking_at to create_looking_at, and from_scale to create_from_scale in Basis.
Scene
- Added NOTIFICATION_QUITTING to MainLoop.
- Inlined set_pressed_no_signal call into BaseButton::set_pressed().
- Hide the Bake text of the MergeGroupEditorPlugin's icon.
- Set use_on_initial_import() in ResourceImporterCSVTranslation to false.
This means that if a .csv file is dropped into a project the editor will
not import it by default. - Added use_on_initial_import() virtual method to ResourceImporter.
If it returns false and the resource importer would be used on a file's
initial import it will be imported with the "Keep File (No Import)"
setting.
Modules
Terraman
- Now TerrainChunks will register their lights into the VertexLights3DServer if use_vertex_lights_3d is enabled in world.
- Make use of the VertexLights3DServer in TerrainChunkDefault::_bake_lights() if enabled.
- Added use_vertex_lights_3d property to TerrainWorld.
- Added VertexLight3D baking tool to TerrainWorldEditor.
- Fix TerrainChunk::light_remove_index() not actually remoing lights.
- Added more helper methods to TerrainWorld.
- Added item_cull_mask property to TerrainLight.
- Added light_mode property to TerrainLight.
- Removed OWNER_TYPE_VERTEX_LIGHT_3D from TerrainLight.
- Small tweaks to the info outputs in TerrainWorldEditor.
- Fix method call in TerrainWorldEditor.
- Added MeshDataInstance baking tool to TerrainWorldEditor.
- Added mesh_data_resource_add() helper method to TerrainWorld.
- Now TerrainChunks can also store a name and material for MeshDataResources.
- Don't create prop baking tool buttons if the Props module is disabled.
- Added a scene baking tool to TerrainWorldEditor.
- Fix logic in TerrainChunk::scenes_set() and TerrainChunk::props_set().
- Return and set the name with the props property in TerrainChunk.
- Implement setting a name to scenes in TerrainChunk.
- Added tooltips for the bake props tool's buttons in TerrainWorldEditor.
- Now props added to TerrainWorld can also have a name. The prop bake editor tool uses it to save and restore node names.
- Implemented Bake Props tool for TerrainWorldEditor.
- Rebuild chunks in TerrainWorld::prop_add().
- Make sure the prop meshes are cleared from previous runs before returning early in TerrainPropJob.
- Call emit_changed() in TerrainChunk setters. Also a setter fix.
- Set up baking tools page in TerrainWorldEditor.
- Fix potential hang on exit due to deadlocks.
- More tweaks to TerrainChunk's new scene api.
- Added the new scene_add() method to TerrainWorld. Also store scenes from props inside chunks.
- Tweaks and improvements to TerrainChunk's new scene api.
- Added scene storage api to TerrainChunks.
Also mass replaced the typo "tarnsform" to "transform", and fixed a
parameter name in a TerrainChunk binding. - Added owned_lights property to TerrainChunk. Also changed the lights property it is now scripting only, it won't get saved.
- Now TerrainLights inherit from Resource.
- Added to_dict() and from_dict() methods to TerrainLight.
- Set prop ownership to lights in TerrainWorld::prop_add().
- Store ownership information in TerrainLights.
- Store whether a mesh_data_resource in a TerrainChunk is original or not.
- Renamed the new original parameter in TerrainChunk and TerrainWorld's prop api from owner to original.
- Set prop ownership when adding them in TerrainWorld.
- Now TerrainChunks will remember whether they own a prop or not. Also added and bound missing methods to Chunk's prop api.
- Make sure the remaining chunks are notified of the changed world lights when adding / removing chunks.
- Now TerrainLights are stored inside chunks (they are also automatically saved with them). Also changed TerrainLight's api to makes use of Vector3i.
- Now props and mesh data resources are saved with the TerrainChunks.
- Only generate chunks once.
- Simplify chunks_set() in TerrainWorld.
- Fix isolevel paint and paint brush tools always allowing chunk creation.
- Add the new chunk to the generation queue instead of directly calling it's build method in TerrainWorld::chunk_add().
- Also expose the liquid data in TerrainChunkBlocky.
- Fix typo.
- Implemented the spawn chunks and remove chunks tool in TerrainWorldEditor.
- Call TerrainChunk's build() after it's added to a World manually.
- Added a new helper method to TerrainWorld.
- Clear the material cache data in TerrainChunk::_exit_tree().
- Implemented the gui for the chunk spawn and chunk remove tools in TerrainWorldEditor.
- TerrainWorldEditor variable name tweaks.
- Implemented the paint picker tool in TerrainWorldEditor. Also improved the editor's Button signal setup.
- Tewaks to the main tool labels in TerrainWorldEditor.
- Implemented the paint picker tool's ui in TerrainWorldEditor.
- Add the paint brush tool settings buttons to the proper container in TerrainWorldEditor.
- Reordered the main tool buttons in TerrainWorldEditor.
- Removed the add and remove single tools from TerrainWorldEditor as they are not very useful for a terrain engine.
- Only show the surface selection when the paint brush is active in TerrainWorldEditor.
- Added the ability to erase using the paint brush in TerrainWorldEditor.
- Added liquid mode to the isolevel brush and paint brush tools in TerrainWorldEditor.
- Added a new helper method to TerrainWorld.
- Chunk remover tool initial setup in TerrainWorldEditor.
- Make the expected tool settings shown by default in TerrainWorldEditor.
- Spawn brush initial setup in TerrainWorldEditor.
- Reorganized the tools in TerrainWorldEditor. Also made the Isolevel Brush the default.
- Renamed the add and remove tools to add single and remove single voxel in TerrainWorldEditor. Also improved their gui a bit.
- Disable allow chunk creation for the paint brush and isolevel brush tools by default in TerrainWorldEditor. A new chunk spawner tool will be added instead soon.
- Invert the logic of the isolevel brush smoothness calculation so it works as expected.
- Start at max isolevel brush smoothness in TerrainWorldEditor.
- Fix isolevel brush smoothness calculation in TerrainWorldEditor.
- Allow 0 as the isolevel brush strength and smoothness in TerrainWorldEditor.
- Handle a missing case when setting voxels in TerrainWorld.
- Reset the mesher's lod index in _reset() in TerrainTerrainJob. This fixes subsequent mesh generations.
- Implemented chunk material invalidation support for TerrainLibraryMergerPCM.
- Unlock the mutex after the rects are refreshed in the material cache in TerrainLibraryMergerPCM.
- Optimized editing in TerrainWorldEditor.
- Use the new immediate build mode in TerrainWorld's set_voxel_at_world_data_position().
- Implemented an immediate build mode for TerrainChunk.
- Clear meshes as needed in TerrainTerrainJob.
- Clear meshes as needed in TerrainPropJob.
- Fix crash on shutdown.
- Udpate the gizmo size properly in TerrainWorldEditor.
- Optimized UndoRedo usage in TerrainWorldEditor.
- Implemented the TerrainWorldGizmo.
- Renamed the new gizmo.
- Initial gizmo setup for Terraman.
- Moved the TerrainWorldEditor to a new folder. Also make sure it's only compiled in tools builds.
- Implemented the paint brush mode in TerrainWorldEditor.
- Implemented the isolevel brush in TerrainWorldEditor.
- Added new helper methods to TerrainWorld.
- Added a strength slider for the isolevel brush in TerrainWorldEditor.
- Added a button for setting the allow chunk creation option for the isolevel brush in TerrainWorldEditor.
- Removed set_voxel_with_tool from TerrainWorld.
- Initial input handling refactor for TerrainWorldEditor.
- Added the option to select the channel in TerrainWorldEditor's Isolevel Brush.
- Gui and callback setup for the isolevel brush in TerrainWorldEditor.
- Small tweaks and reorganization in TerrainWorldEditor.
- TerrainWorldEditor cleanups and some initial rework for it's new functionality.
- Tidy up the Isolevel clider of the TerrainWorldEditor.
- Moved the control buttons of the TerrainWorldEditor to the side panel.
- Fix variable names.
- Fix property names.
- Use icons for the TerrainWorldEditor's buttons.
Web
- Added new classes to the web module's config.py.
- Added a new LocaleSetupWebServerMiddleware.
- HTMLTemplateMultilang now also tries to use the locale helper method in WebServerRequest.
- Implement locale helper methods to WebServerRequest.
- Bind methods in HTMLTemplateMultilang.
- Created a HTMLTemplateMultilang class. It can automatically select between multiple HTMLTemplates.
Users
-Added a method to get all users from the UserDB and UserManagers.
Database
- Added next_column*() helper methods to...
4.5.0
Highlights:
- New Procedural Tree 3D Module. Adds a new 'ProceduralTreeMesh' Mesh class that can generate trees procedurally. It uses https://github.com/jarikomppa/proctree .
- Backported text-to-speech support.
- Now the releases include a gdnative headers zip.
Breaking changes:
- None.
Added
Engine
- Backport text-to-speech support.
Modules
Procedural Tree 3D
- New Procedural Tree 3D Module. Adds a new 'ProceduralTreeMesh' Mesh class that can generate trees procedurally. It uses https://github.com/jarikomppa/proctree .
Release
- Now the releases include a gdnative headers zip.
- Reworked the copy_repos script to use git locally to make a copy from the local engine tree.
- Copy gdnative headers helper script.
Fixed
- Make sure the thumbnail view is the default in the FileSystemDock as intended.
- Only keep one of the doc links in the editor's help menu.
- Updated the engine license in the EditorAbout window.
- Merge pull request from halotroop2288: Separate statements about Godot and Pandemonium in README
Removed
- Removed feature profile dir creation from the editor.
- Removed the support development option from the help menu.
- Removed the donors tab from the EditorAbout window, as I'm not even trying to take donations anymore.
Backports
- Backported everything up to and including godotengine/godot@0ccd559 Merge commit: godotengine/godot@8c444fb
Godot 3.x
Object::call()prevent debug lock accessing dangling pointer
Self deleting an object within a call was leading to crashes due to referencing freed memory, due to a raw pointer stored in the debug lock.- Fix parsing of
4.in Expression - Backported: Doctool: Remove version attribute from XML header. We don't use that info for anything,
and it generates unnecessary diffs every time we bump the minor version (and CI failures if we forget
to sync some files from opt-in modules (mono, text_server_fb). - Safe
Camera::unproject_position()
unproject_position()can fail in some circumstances, and this needs to be conveyed to calling code. - PopupMenu: Update margins on visibility change Fixes #96149.
- Verify GLTF indices to prevent crash with corrupt files
Also verify prior to vertex optimization. - GLTF: Fixed external images getting embedded on import
Added a map to keep track of external images during import, and used
that map to instance the textures using the resource loader instead of
creating a new texture from scratch
4.4.0
Highlights:
- Tweaks to editor defaults.
- Added back lightmaps, gpu based particles (GPUParticle) and GIProbes.
- Added back the gles3 renderer (can be turned off compile time).
- LayeredTileMaps got VertexLight2D management, and navigation obstacle support.
- Implemented prepared statements for the database module.
- The markdown renderer is now scriptable.
Breaking changes:
- Always defer unmatched requests in WebNodes to index nodes if they are available.
- Tweak WebNode::get_full_uri() to give back the output what you'd normally assume when the uri segment is "/" under a WebRoot.
- Renamed the render_menu property in UserWebPage to should_render_menu, as there is a render_menu method in WebNode.
- Don't create any accounts by default in the UserManagerDB::_create_default_entries() virtual method.
- Hide result String in TableBuilder. Also add reset() method to it. (c++ only)
- Made query_result in QueryBuilder protected. (c++ only)
Added
Core
- Added more helper methods to StringBuilder.
Scene
- Added a group for the toplevel property in Node2D.
- Moved the y_sort property from YSort to Node2D. Node2d has it off by default while YSort has it on by default.
Rendering
- Added back the GLES3 renderer. Unlike in godot it can be disabled compile time.
- Added back GIProbes.
- Added back the gpu based particles. Renamed Particle to GPUParticle and Particle2D to GPUParticle2D.
- Added back lightmaps.
Modules
- Added back the denoise module, with oidn built in.
- Added back the lightmapper_cpu module.
- Added back the raycast module with embree built in.
- Added back the scene side lighmapper classes.
- Added back the xatlas_unwrap module. Also moved xatlas into it so it's not in the thirdparty folder.
Database
- Finish missing docs for the rest of the database module.
- Added more helper methods to deal with prepared statements to QueryBuilder.
- Renamed clear to reset in TableBuilder.
- Added virtual methods to QueryBuilder for adding prepared statement placeholders.
- Setup prepared statement support for the database module.
Database SQLite
- Prepared statements for the sqlite database backend.
LayeredTileMaps
- Implemented VertexLight2D management support to LayeredTileMapLayers.
- VertexLight2D support for LayeredTileSetAtlasSourceEditor.
- Added VertexLight2D support to LayeredTileData.
- Implement debug drawing avoidance radius in LayeredTileMapLayer.
- Implement navigation obstacle support for LayeredTileMapLayers.
- Added avoidance position property to LayeredTileData.
- Added flip winding order tool to GenericTilePolygonEditor.
- Implemented Obstacle for LayeredTileSets.
Web
- Docs for the markdown renderer.
- Added the ability to script the rendering of the MarkdownRenderer. Also added a new render() method equivalent to render_to_html().
Fixed
Core
- Don't access a Message's memory after calling it's destructor in MessageQueue. (Even though the way the code works currently this was not really a bug, but it can easily become one.)
- Fix size mismatch warning.
- Remove unnecessary template parameters from constructors and desctuctors.
Scene
- Fix the type of the rotation tracks in AnimationTrackKeyEdit.
Servers
- Don't error in RenderingServerRaster::free() if the supplied RID is just invalid.
Editor
- Improvements to the filesystem dock.
- Improved the renderer selector when creating a new project.
Modules
Database
- Fix text binds being interpreted as blobs.
GDScript
- Update theme item names for pandemonium.
LayeredTileMaps
- Fixed rao and vertex lights for newly added cells. Also fixed re-generating the tilemap cells in many cases. Also small improvements.
- Remove duplicate call.
- Bind _tile_set_changed in LayeredTileDataEditor.
Web
- Set the status code in WebRoot::_handle_error_send_request().
- Optimize _node_route_map's usage in WebNode.
- Fixed docs, index node support has been moved from WebRoots to WebNodes a while ago.
- Use HashMap in BrowsableFolderServeWebPage, as the bug that was preventing this was already fixed quite a while ago.
- Don't expose renderer_callback() for scripting.
Utilities
- Updated the clang format script.
Changed
Editor
- Tweaks to the editor defaults.
Modules
Database
- Use StringBuilder in TableBuilder aswell.
- QueryBuilder now uses a StringBuilder internally.
- Hide result String in TableBuilder. Also add reset() method to it.
- Made query_result in QueryBuilder protected.
- DatabaseConnection::database_connect() now returns Error.
Database SQLite
- Fix getting utf-8 texts from Sqlite3QueryResult.
GDScript
- Disabled the unused argument warning by default.
LayeredTileMaps
- Turn autowrap on on LayeredTileSetAtlasSourceEditor's tile_inspector_no_tile_selected_label.
Users
- Don't create any accounts in UserManagerDB::_create_default_entries().
Web
- Always defer unmatched requests to index nodes if they are available.
- Expose FileCache in FolderServeWebPage to scripts.
- Tweak WebNode::get_full_uri() to give back the output what you'd normally assume when the uri segment is "/" under a WebRoot.
- Renamed the render_menu property in UserWebPage to should_render_menu, as there is a render_menu method in WebNode.
Backports
- Backported everything up to and including godotengine/godot@1cf5036 Merge commit: godotengine/godot@2cc5ca4
Godot3
- Backported: [CI] Upload build cache before running tests. - AThousandShips godotengine/godot@078210b
- Fix
PopupMenusize calculations not taking into account control/canvas scale - fix lost old callback when continuous call requestRenderAndNotify
- Backport DirectionalLight
fade_startproperty to3.x:
Implement shadow fading when using the Orthogonal shadow mode (like inmaster).
This allows customizing the distance at which directional shadows start to fade away. Shadow fading will also always start at the same distance now, regardless of the current shadow mode in use.
This is useful for enclosed levels to prevent shadows from fading at all with a well-tuned maximum distance.
The default fade start value (0.8) results in fading happening later in the distance compared to the previous behavior, where fading started from the last shadow split distance (0.6 in PSSM 4 Splits and 0.1 in PSSM 2 Splits). - Fix physics tick count in
Input.action_pressandInput.action_releaseThe physics tick count was not yet updated there. - Use unztell64 in FileAccessZIP to ensure 64 bit return (cherry picked from commit efccebd3db90d7baf0947cd02612ab987ab87868)
- doc: Fix cherry-pick mistake for Vector3.cross description
- Add POST_NOTIFICATIONS permission to the list of permissions available in the Export dialog (cherry picked from commit 739190ca2b7f1b67a78eff33154a4bfd1964f5c4)
- Clarify the behavior of
Vector2/3.crossand mention parallel vectors (cherry picked from commit 47a8033698b14c8a7bb25867198c1371382e3398) - Always look for unique node names in owner if not found in owned nodes (cherry picked from commit 95ced4bbdcea4d8e225e235fc120c4ebd72f443d)
- Enabled secure restorable state. (cherry picked from commit 84380a94f776c8c1e7786d2eb3fb811789f42639)
- miniupnpc: Disable socket timeout on Windows, matching upstream Fixes #88471. (cherry picked from commit f695de7c68e373088175f8f3b1650f11a27be7aa)
- Add support for PCK embedding section with non GNU-ld linkers. (cherry picked from commit 625c4bdacef4173f94200632362e25e537ad5d21)
- Physics Interpolation - refactor client interpolation pump
- Move client interpolation pump to earlier in the iteration before 3D physics synced
- Allow
get_global_transform_interpolated()to prime the client interpolation inside a physics tick
- Physics Interpolation - refactor
Cameraand fixget_camera_transform()- Moves 3D Camera interpolation scene side.
- Automatically switches
get_camera_transform()to report interpolated transform during_process(). - Fixes
ClippedCamerato work with physics interpolation.
- Physics Interpolation - Fix 2D skinning
2D skinning required the interpolated skeleton base transform to be updated when using interpolation. - Fix
spatial_editor_pluginenum- The
view_mesh_statsfeature introduced a new enum valueVIEW_SLECTED_INFOwithin the unnamedVIEWenum. - This turns out to be saved somehow, which means the view settings can get out of sync when reloading the project in an older version of the editor.
- The solution is simply to move the new value to the end of the enum so there are no conflicts.
- The
- Editor 3D view mesh stats
Similar to information window, add a small optional window to display face count and other stats. - Add IME input support.
- Add support for privacy manifest configuration.
- Extend iOS plugins to support Swift runtime
- Update actions.
- Web: Bump closure compiler spec to ECMASCRIPT_2021 Fixes #88008. (cherry picked from commit d29b0d90e0d735eee860b977c57cb75423d7a9ba)
- Fix emscripten 3.1.51 breaking change about
*glGetProcAddress()(cherry picked from commit 5922ac0fb11105da67d28847b60a521406a77cdb) - Add
WASM_BIGINTlinker flag to the web build (cherry picked from commit 3ae524fa9e42828183f8046f6f33b945475bb052) - Fix gradle build errors when the build path contains non-ASCII characters (cherry picked from commit f1887a30f35dafac405014ef5ca6e3d76b4da960)
- Add basic Emacs .gitignore entries (cherry picked from commit 2696fee3c6b08cd9645a61ebf08b84fd70be5a72)
- Sync controller mappings D...
4.3.0
Highlights:
- Backported the new TileMap from Godot4. Every class from it has been prefixed with the word
Layered, so look for theLayeredTileMapclass. The oldTileMapis still available without any breakages. - Created a new VertexLights2D module.
- Created a new VertexLights3D module.
- Better LOD support due to a change from godot3.x.
- Backported PROPERTY_USAGE_ARRAY from Godot 4.
- Fixed, set up exporter and export templates for the FRT and FRT SDL platforms (it's for
SBCs). - Fixed IOS export template .
- Now WebServerSimple can also use temporary files for uploads.
- Added a simple HTML Templating solution. See the HTMLTemplate and HTMLTemplateData classes and this demo.
- Build containers and release setup rework.
- ... and many more
Breaking changes:
- Android dependencies had to be updated, unfortunately this raises the required java version to 17. On the flip side hovewer there is a new editor java home setting, and also the JAVA_HOME environment variable gets picked up.
- Build containers now use docker instead of podman.
- Removed parse_files() from WebServerRequest. It's doesn't work well with how the http protocol works. It did not do anything. If you called it just remove that call.
Added
- Added FRT and FRT SDL build containers.
- New icon for frt sdl.
- Added an exporter for frt_sdl.
- Added a separate exporter for FRT.
- Added entity_resource_base_world_speed property to the ESS singleton.
- Also add is_zero_approx() to Vector4.
- Added copy pose and paste pose tools to the skeleton editor. Also added separators to it's dropdown menu.
- Make RAO and VertexLights2D work with the new LayeredTileMap setup.
- Created a new VertexLights2D module.
- Created a new VertexLights3D module.
- Added exp2 to the Math singleton.
- Added Material and merger support for PropDataMergeGroup.
- Added Material support for PropDataProp.
- Added a new PropDataMergeGroup Node for props.
- Implemented RAO for LayeredTileMaps.
- Added a new canvas_item_add_texture_rect_animation() method to the RenderingServer.
- Proper docs for WebServerSimple.
- Updated docs for FileCache.
- Added optional force parameter to WebServerRequest::move_file(). Also various fixes and improvements to the new upload temp file system.
- Added new wwwroot_get_simplified_abs_path() helper to FileCache. Also improved the other path helper methods.
- Now WebServerSimple can also use temporary files for uploads.
- Added move_file() and is_file_moved() helper methods to WebServerRequest.
- Added docs for String::substr_index().
- Added more file formats to the Text Editor's Save Dialog.
- Added HTMLTemplate and HTMLTemplateData classes.
- Added a new method to Expression so it can be used with multiple threads simultenously.
Fixed
- Fix crossbuilding libtheora on the server platform.
- Fixed building FRT.
- Fixed building FRT SDL.
- IOS build scripts.
- Fix MMImage.
- Hide the FileSystemDock's empty dock slot when it's in bottom bar mode by default.
- Use internal process for updating a dirty skeleton instead of the MessageQueue. This fixes BoneAttachments being a frame late.
- Sync NativeScript's PROPERTY_USAGE flags with Object's.
- Fix 2d mesh transforms and colors.
- Various doc fixes.
- Fix 2 off-by-one errors.
- Fix incorrect clipping in String::substr_index().
- Use String's length() instead of size().
- Fix class link in the docs for SMTPClient.
Changed
- Moved the old frt build containers.
- Renamed the build container folders.
- Renamed uwp's exporter's folder so it's not in the editor while that platform cannot yet be built.
- Reworked the build containers and the in-container build scripts.
- Added an exported for the server platform.
- In-container build script cleanups.
- Build containers now use docker instead of podman.
- Updated the build containers based on godot's.
- Now the input_properties and output_properties property won't get saved directly in MMNode (this was the original intent, nothing should change other than MMMaterial files should be a bit smaller now.). They are still visible in the editor. Also make sure an MMNodeUniversalProperty can only be registered once.
- Make mat maker's image picker button's dialog use resources.
- Fix error found by static analysis tools.
- Improved Light setup in PropInstance.
- Added more properties to PropDataLight and other light helper classes.
- Now CharacterSkeleton2D inherits from YSort. It disables sorting by default, so the default behaviour won't change.
- Now tooltips won't get scaled to their original control's scale anymore by default. Added a new gui_scale_tooltips property to Viewport to be able to use the previous behaviour when it's desired.
- Removed clips_input() method and _clips_input() virtual method from Control. Made clip_contents to also have an input clipping effect, since I couldn't think any single instance where keeping them separated would be useful. This fixes LayeredTileMap's editors clipping input while being invisible, and likely other smaller issues.
- Now EditorPropertyEnums can be setup multiple times.
- Improve multipart filename handling a bit.
- Now SimpleWebServerRequest Only count request size when not writing to a file.
- get_file_length() in WebServerRequest now returns uint64_t.
- Updated sample module_config.py.
- Use bitshifts for all property usage flags.
- Use PROPERTY_HINT_BUTTON in UserManagerStatic instead of a bool.
- Now PROPERTY_HINT_BUTTON adds the property's name as the called method's first parameter.
Removed
- Removed parse_files() from WebServerRequest. It's doesn't work well with how the http protocol works.
- Removed Vector2i(Vector2) constructor, added a Vector2i conversion operator to Vector2 instead. This solves ambigous Variant to Vector2i conversion errors.
Backports
- Backported everything up to and including godotengine/godot@90cf873 Merge commit: godotengine/godot@a73715c
Godot3
- Fix AudioStreamPlayer not paused on pause mode change Fixes #58543.
- Add option to toggle visibility of position gizmos in 2D editor.
- Portals - defer setting active in
VisualServeruntil enter treeset_portal_active()was being called loading packed scenes prior to entering the tree, visual server portals had not been fully created at this point hence the call was being ignored with an error flagged. This PR defers the call until after entering the tree. - Add option
modules_enabled_by_defaultand minimal CI build. - Fix physics on_floor_body crash Physics body previously stored the RID of a collision object and accessed it on the next frame, leading to a crash if the object had been deleted. This PR stores the ObjectID in addition to the RID, and checks the object still exists prior to access.
- Store ObjectID instead of pointer for KinematicCollision owner
- Fix SceneTree not respecting virtual process methods
- Don't error multiple times when trying to load missing default bus layout
- Backported Update Android dependencies for the project
Update Java version from 11 to 17
Update Android gradle plugin version from 7.2.1 to 8.2.0
Update gradle version from 7.4.2 to 8.2
Update target SDK from 33 to 34
Update build tools version from 33.0.2 to 34.0.0
Update kotlin version from 1.7.0 to 1.9.20
Update Android fragment version from 1.3.6 to 1.6.2
Update AndroidX window version from 1.0.0 to 1.2.0
Update Nexus plugin version from 1.1.0 to 1.3.0
m4gr3d
godotengine/godot@eba77be
Unfortunately this raises the required java version to 17. On the flip side hovewer there is a new editor java home setting, and also the JAVA_HOME environment variable gets picked up. - Add is_zero_approx methods to Vector{2,3}
- Check duplicate keys in dictionary literals: enums and const variables
Check identifiers (const variables and unnamed enums) and named
enums when parsing dictionary literals whether the keys are not
duplicated.
In case of duplicate key is encountered, highlight the line with it
and print error message:
Duplicate key "foo" found in Dictionary literal
This commit is a logical continuation of the commit dab73c7 which
implemented such checks only for literal keys (which fixed #7034).
Apart from that, this commit also fixes the issue with the error
message itself, which was shown one line below the duplicated key
in case it was the last one in the dictionary literal and there
was no hanging comma.
Also, the format of the error message has been changed so that now
the error message also contains the value of the key which is duplicated.
Instead ofDuplicate key found in Dictionary literal, it now prints
Duplicate key "<value>" found in Dictionary literal - Tighter shadow culling - fix light colinear to frustum edge
In rare situations if a light is placed near colinear to a frustum edge, the extra culling plane derived can have an inaccurate normal due to floating point error.
This PR detects colinear triangles, and prevents adding a culling plane in this situation. - Add Node.is_node_ready
- nanosvg: Sync with upstream 93ce879
memononen/nanosvg@93ce879 - Backported ORMSpatialMaterial from Godot 3.x without any breaking changes.
- FIXED: Trying to connect inexistent signal text_submitted.
- Backport locale selection improvements.
- Fix building with
disable_3d - Fix SceneTree dock filter crash. The filter was crashing for two reasons: 1) Deleting a child invalidated the iteration of children 2) Child was accessed after deletion
- Rot...
4.2.1
Added
- Added get_global_class_name method to Script. Now GDScriptParser uses this first to determine global class names, instead of parsing the script file again.
- Added a way for platforms to define a custom resource pack location.
- Added more defines for platform specific configs.
- Added S3TC_NOT_SUPPORTED define to be used by platforms externally.
- Added optional GLES2_LOAD_EXT_NO_DLCFN_AVAILABLE define for the rasterizer storage.
Changed
- Turn custom module paths relative to the engine's directory when they reside inside the engine's folder.
Fixed
- Found and updated some remaining old Java package paths.
- Fix checking the wrong property in the Android's export plugin.
- Moved dlfcn.h include in RasterizerStorageGLES2 to it's proper place according to the comment above it.
- Fix custom module paths for the editor builds.
- Small tweaks to HTTPServerSimple, mostly related to ssl handling.
- Fix FileCache for files in .pck-s.
- Fix DirAccess::get_filesystem_abspath_for() for .pck files.
- Fix build on MSVC.
4.2.0
Added
Core
- Added missing setters to VariantOP.
- Added to_real helper methods to String. (Also added it to the gdnative api.)
PLogger
- Added log level support for PLogger.
Servers
- Added a new dummy WindowServer class. (Disabled it for now.)
Editor
- Added back ResourceImporterOBJ from godot.
- Added a new editor setting (docks/filesystem/wide_bottom_panel) which makes the file system appear in the bottom panel instad of as a dock.
- Now the names of the main screen plugins can be hidden in the editor by the new interface/editor/hide_main_screen_plugin_names editor setting. (If a plugin does not have an icon fall back to using it's name.)
Scene
GUI
- Added a new CSplitContainer type which acts as both a VSplitContainer and HSplitContainer and allows changing between them using a property.
- Added a new CBoxContainer type which acts as both a VBoxContainer and HBoxContainer and allows changing between them using a property.
Modules
SMTP
- Added a new smtp module.
Tile Map
- Added a button to the TilesetEditor to easily select the TilesetEditorContext when needed.
Web
- Implemented range requests for the HTTPServerSimple. It does work in fiefox, however wget seems to choke on it. This will be fixed later.
- Added a way to get all available parameter keys to WebServerRequest.
- Added a way to unregister connections and get out their raw connection data from the http server.
Prop
- Implemented PropDataStaticBody handling for TerrainPropJob and VoxelPropJob.
- Initial StaticBody support for the prop system.
Misc
- Added a backport helper script.
Fixed
Core
- Fixed smaller issues in VariantOP.
- Fix running standalone scripts in non-editor builds.
- Fix logic in String::substr_index.
- Added missing Variant PTRARG conversion.
Modules
- Fix build when the mbedtls module is disabled.
- Fix build when the jsonrpc module is disabled.
Editor Text Editor
- Implemented clearing custom fonts in the editor's text editor module. Also small improvements.
- Fixed custom font support in the editor's text editor module.
- Fixed reopening files from the previous session in the editor's text editor module. Also small cleanups.
- Added more extensions to the editor's text editor module.
- Fixed all the crashes (and potential crashed) in the editor's text editor module I could find. Also fixed some smaller usability issues.
- Fix lots of potential crashes in the editor's text editor module. Now it also won't add an additional newline to the end of files.
- Removed the delete file option from the editor's text editor module.
- Disabled syntax highlighting in the editor's text editor module. It will need to be reworked.
- Fixed TextEdit width calculation after it's font changes. This fixes lines being too long to scroll to in the editor.
Web
- Fixed generating urls in BrowsableFolderServeWebPage.
- Now PagedArticleWebPage won't add the summary page to the list of pages you can switch to.
- Store incoming http request parameters properly.
GDNative
- Mark NativeScripts as having delayed metadata.
Docs
- Fix the doc descriptions where they got lost due to adding StringName to Variants. Also fixed smaller issues where I ran into them.
Changed
Generic
- Some reorganization of files, particularly in the scene folder.
Core
- Updated year in version.py.
- Allow running standalone scripts in non-editor builds.
- Optimized path_clean_end_slash in String.
- Now unicode error printing is disabled by default. Also can be enabled via a macro.
PLogger
- The default log level in PLogger is now message.
- Call the proper methods in PLogger. Also use ERR_PRINT when logging errors.
Platform
- Updated copyright info in pandemonium_res.rc.
Editor
- Bind more methods in EditorInspector.
- Don't hide the script property in sub inspectors.
Modules
- Updated the sample module config file with the new modules.
Navigation Mesh Generator
- Don't print error when there is no default NavigationMeshGenerator.
- Don't warn when falling back to NavigationMeshGeneratorDummy.
Network Synchronizer
- Now SceneSynchronizerDebugger can properly create it's debugger.py file.
- Updated NetworkSynchronizer from https://github.com/GameNetworking/network_synchronizer/tree/godot-3.x . f12fee66a7e3eb2013d6c5437837770455105b91 (Merge commit: cc3c7d244adea8b25822f43963618fd2dbf18ec8)
Tile Map
- Renamed RTilesetEditorContext to TilesetEditorContext.
Web
- Completely removed the cached path api from FileCache.
License
- Updated the license to current year, and also updated it on the top of the headers.
Backports
Godot3
-
Backported everything up to and including godotengine/godot@b859a18 Merge commit: godotengine/godot@cc4492f
-
Ported: Update the logic used to start / stop the GL thread Currently the GL thread is started / stopped when the activity is respectively resumed / paused. However, according to the
GLSurfaceViewdocumentation, this should be done instead when the activity is started / stopped, so this change updates the start / stop logic for the GL thread to match the documentation. - m4gr3d godotengine/godot@194452b -
Ported: Vertex cache optimizer Optimizes indices to make good use of vertex cache on GPU. - lawnjelly godotengine/godot@0aa22b8
-
Portred: Add MergeGroup node to simplify merging Meshes at runtime. - lawnjelly godotengine/godot@8b79135
-
Ported: Fix signed distance field font rendering This fix works in both GLES3 and GLES2. The rendering formula in the shader was adjusted to further improve the sharpness/antialiasing quality balance. - lawnjelly and Calinou godotengine/godot@bc607fb
-
Ported: Shadow volume culling and tighter shadow caster culling Existing shadow caster culling using the BVH takes no account of the camera. This PR adds the highly encapsulated class VisualServerLightCuller which can cut down the casters in the shadow volume to only those which can cast shadows on the camera frustum. This is used to: * More accurately defer dirty updates to shadows when the shadow volume does not intersect the camera frustum. * Tighter cull shadow casters to the view frustum. Lights dirty state is now automatically managed: * Continuous (tighter caster culling) * Static (all casters are rendered) - lawnjelly godotengine/godot@8ca631a
-
Ported parts of: [3.x] Add Selected Collision Group in TileSet Editor Also moves the TileSet Script property down to its own category. - Mickeon godotengine/godot@211c707
-
mbedtls: Update to upstream version 2.28.7
-
certs: Sync with Mozilla bundle as of Dec 13, 2023 bagder/ca-bundle@bef37a9
-
Sync controller mappings DB with SDL2 community repo Synced with mdqinc/SDL_GameControllerDB@232c738
-
Fix build on X11 following 64-bit detection changes This also ports over the cross-compilation logic to the
serverplatform, and allows Embree to be used in server tools builds on aarch64. -
Fix invalid Python escape sequences
-
SCons: Fix Python 3.12 SyntaxError with regex escape sequences
-
Linux: Remove hardcoded lib path for x86 cross-compilation This breaks the build with our updated i686 Linux SDK which doesn't contain this path, and may not be needed at all.
-
CI: Update mymindstorm/setup-emsdk to v14, should fix cache folder conflicts https://github.com/mymindstorm/setup-emsdk/releases/tag/v14
-
Style: Mark clang-format 16 as supported for pre-commit hook It only introduced a difference in a .glsl file, which I've worked around by removing an empty line. This keeps formatting consistent between clang-format 15 and 16.
-
SCons: Fix Web build when compiler version isn't properly detected Quick fix for #82585. Also set CI version to 3.1.39, which is what we use for official 3.6 builds since 3.6-beta4.
-
Portals - Improve conversion logging Logging is now allowed in any TOOLS build (rather than just in the editor), but still prevented in final exports. Logging an be switched off via project settings. Autoplacement is now logged.
-
Portals - include in bound and special cases in start room * Re-introduces a property for portals to decide whether they are included in room bounds during room conversion. * Adds a special case for portals that extend into the start room, which may be caused by level design inaccuracies.
-
zlib/minizip: Update to version 1.3 Remove
infback.cwhich we don't need. TheOFmacro was also removed so I can drop the patch where I yell at Gentoo developers. -
minizip: Backport patch to fix CVE-2023-45853
-
brotli: Sync with upstream 1.1.0 https://github.com/google/brotli/releases/tag/v1.1.0
-
Web: Clarify that
OS.get_unique_idis not supported Remove the base error message inOS, we no longer really error out this way for not implemented methods. Instead, each platform should override them to provide the context they want. -
Add XInput device ID for wireless Series 2 Elite controller
-
SCons: Add
stack_sizeanddefault_pthread_stack_sizeoptions to Web target -
Set what were default values for some emscripten linkflags - Set
-sSTACK_SIZEto what it was before emscripten 3.1.27. It was renamed in 3.1.25 so also set sTOTAL_SIZE for older versions for consistency. And Set-sDEFAULT_PTHREAD_STACK_SIZEto what ...