1# Changelog 2 3All notable changes to this project will be documented in this file. 4 5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). 6 7## [3.2.3] - 2020-09-17 8 9See the [release announcement](https://godotengine.org/article/maintenance-release-godot-3-2-3) for details. 10 11### Added 12 13- Android: Add option to enable high precision float in GLES2 14- C#: Add Visual Studio support 15- HTML5: Improvements and bugfixes backported from the `master` branch 16 * Note: This PR adds threads support, but as this support is still [disabled in many browsers](https://caniuse.com/#feat=sharedarraybuffer) due to security concerns, the option is not enabled by default. Build HTML5 templates with `threads_enabled=yes` to test it. 17- Input: Support SDL2 half axes and inverted axes mappings 18- iOS: Add support of iOS's dynamic libraries to GDNative 19- iOS: Add methods to embed a framework 20- LineEdit: Add option to disable virtual keyboard for LineEdit 21- macOS: Implement confined mouse mode 22- macOS: Implement seamless display scaling 23- Rendering: Allow nearest neighbor lookup when using mipmaps 24 25### Changed 26 27- C#: New `csproj` style with backport of Godot.NET.Sdk 28 - This change breaks forward compatibility, C# projects opened in 3.2.3 will no longer work with 3.2.2 or earlier. Backup your project files before upgrading. 29- GDScript: Auto completion enhanced for extends and class level identifier 30- HTML5: Implement HTML5 cancel/ok button swap on Windows 31- Physics: Better damping implementation for Bullet rigid bodies 32 - This makes the behavior of the GodotPhysics and Bullet backends consistent, and more user-friendly with Bullet. If you're using damping with the Bullet backend, you may need to adjust some properties to restore the behavior from 3.2.2 or earlier (see [GH-42051](https://github.com/godotengine/godot/issues/42051#issuecomment-692132877)). 33- Project Settings: Enable file logging by default on desktops to help with troubleshooting 34- Script editor: Don't open dominant script in external editor 35- Sprite3D: Use mesh instead of immediate for drawing Sprite3D 36 37### Fixed 38 39- Android: Fix Return key events in LineEdit & TextEdit on Android 40- C#: Fix crash when pass null in print array in `GD.Print` 41- C#: Fix restore not called when building game projects 42- C#: Fix potential crash with nested classes 43- C#: Fix endless reload loop if project has unicode chars 44- Core: Fix debugger error when Dictionary key is a freed Object 45- Core: Fix leaked ObjectRCs on object Variant reassignment 46- GLES2: Fixed mesh data access errors in GLES2 47- GLES2: Batching - Fix `FORCE_REPEAT` not being set properly on npot hardware 48- GLES3: Force depth prepass when using alpha prepass 49- GLES3: Fix OpenGL error when generating radiance 50- HTML5: More fixes, audio fallback, fixed FPS 51- IK: Fixed SkeletonIK not working with scaled skeletons 52- Import: Fix custom tracks causing issues on reimport 53- Import: Fix upstream stb_vorbis regression causing crashes with some OGG files 54- iOS: Fix for iOS touch recognition 55- iOS: Fix possible crash on exit when leaking translation remappings 56- macOS: Add support for the Apple Silicon (ARM64) build target 57 - ARM64 binaries are not included in macOS editor or template builds yet. It's going to take some time before our [dependencies and toolchains](https://github.com/godotengine/godot-build-scripts/pull/10) are updated to support it. 58- macOS: Set correct external file attributes, and creation time 59- macOS: Refocus last key window after `OS::alert` is closed 60- macOS: Fix crash of failed `fork` 61- Networking: Fix `UDPServer` and `DTLSServer` on Windows compatibility 62- Particles: Fix 2D Particle velocity with directed emission mask 63- PathFollow3D: Fix repeated updates of PathFollow3D Transform 64- Physics: Trigger broadphase update when changing collision layer/mask 65- Physics: Fix laxist collision detection on one way shapes 66- Physics: Properly pass safe margin on initialization (fixes jitter in GodotPhysics backend) 67- Project Settings: Fix overriding compression related settings 68- Rendering: Fixed images in black margins 69- Rendering: Properly calculate Polygon2D AABB with skeleton 70- RichTextLabel: Fix RichTextLabel fill alignment regression 71- RichTextLabel: Fix `center` alignment bug 72- Shaders: Fix specular `render_mode` for Visual Shaders 73- SkeletonIK: Fix calling `reload_goal()` when starting IK with `start(true)` 74- TileSet: Fix potential crash when editing polygons 75- Tree: Fix crash when hovering columns after removing a column 76- Windows: DirectInput: Use correct joypad ID 77- Thirdparty library updates: mbedtls 2.16.8, stb_vorbis 1.20, wslay 1.1.1 78 79## [3.2.2] - 2020-06-26 80 81See the [release announcement](https://godotengine.org/article/maintenance-release-godot-3-2-2) for details. 82 83### Added 84 85- 2D: Expose the `cell_size` affecting `VisibilityNotifier2D` precision 86- 2D: Add `MODULATE` builtin to canvas item shaders 87- Android: Add signal support to Godot Android plugins 88- AStar: Implements `estimate_cost`/`compute_cost` for AStar2D 89- C#: Add iOS support 90- C#: Allow debugging exported games 91- Debug: Add a suffix to the window title when running from a debug build 92- Editor: Add rotation widget to 3D viewport 93- Editor: Add editor freelook navigation scheme settings 94- Editor: Allow duplicating files when holding Control 95- GLES2: Add 2D batch rendering across items 96- GLES3: Add Nvidia `draw_rect` flickering workaround 97- GLES2/GLES3: Add support for OpenGL external textures 98- Input: Add keyboard layout enumeration / set / get functions 99- macOS: Enable signing of DMG and ZIP'ed exports 100- Networking: DTLS support + optional ENet encryption 101- Object: Add `has_signal` method 102- RichTextLabel: Add option to fit height to contents 103- Shaders: Add shader time scaling 104- Windows: Add tablet driver selection (WinTab, Windows Ink) 105 106### Changed 107 108- Android: Re-architecture of the plugin system 109- Android: The `GodotPayments` plugin was moved to an external first-party plugin using the Google Play Billing library 110- Core: Ensure COWData does not always reallocate on resize 111- Core: Better handling of `Variant`s pointing to released `Object`s 112- Editor: Account for file deletion and renaming in Export Presets 113- Editor: Improved go-to definition (Ctrl + Click) in script editor 114- Files: Improve UX of drive letters 115- HTML5: Switch key detection from `keyCode` to `code` 116- HTML5: Use 2-phase setup in JavaScript 117- Import: Add support for glTF lights 118- Input: Fix joypad GUID conversion to match new SDL format on OSX and Windows 119- Language Server: Switch the GDScript LSP from WebSocket to TCP, compatible with more external editors 120- Main: Improve the low processor mode sleep precision 121- Physics: Normalize up direction vector in `move_and_slide()` 122- UWP: Renamed the "Windows Universal" export preset to "UWP", to avoid confusion 123- Windows: Make stack size on Windows match Linux and macOS 124 125### Fixed 126 127- Android: Fix `LineEdit` virtual keyboard issues 128- AStar: Make `get_closest_point()` deterministic for equidistant points 129- Audio: Fix volume interpolation in positional audio nodes 130- C#: Sync csproj when files are changed from the FileSystem dock 131- C#: Replace uses of old Configuration and update old csprojs 132- C#: Revert marshalling of IDictionary/IEnumerable implementing types 133- C#: Fix inherited scene not inheriting parent's exported properties 134- C#: Fix exported values not updated in the remote inspector 135- Core: Fixed false positives in the culling system 136- Core: Fix leaks and crashes in `OAHashMap` 137- CSG: Various bug fixes 138- GDNative: Fix Variant size on 32-bit platforms 139- GDScript: Fix leaked objects when game ends with yields in progress 140- GDScript: Fix object leaks caused by unfulfilled yields 141- GDScript: Various bugs fixed in the parser 142- GLES2: Avoid unnecessary material rebind when using skeleton 143- GLES2/GLES3: Reset texture flags after radiance map generation 144- HTML5: Implement audio buffer size calculation, should fix iOS Safari audio issues 145- Image: Fixing wrong blending rect methods 146- Image: Fix upscaling image with bilinear interpolation option specified 147- Import: Fix changing the import type of multiple files at once 148- Import: Respect 'mesh compression' editor import option in Assimp and glTF importers 149- Input: Various fixes for touch pen input 150- macOS: Ignore process serial number argument passed by macOS Gatekeeper 151- macOS: Fix exports losing executable permission when unzipped 152- Particles: Fix uninitialized memory in CPUParticles and CPUParticles2D 153- Physics: Make soft body completely stiff to attachment point 154- Physics: Test collision mask before creating constraint pair in Godot physics broadphase 2D and 3D 155- RegEx: Enable Unicode support for RegEx class 156- RichTextLabel: Fix alignment bug with `[center]` and `[right]` tags 157- Skeleton: Fix IK rotation issue 158- VR: Fix aspect ratio on HMD projection matrix 159- Windows: Fix certain characters being recognized as special keys when using the US international layout 160- Windows: Fix quoting arguments with special characters in `OS.execute()` 161- Windows: Do not probe joypads if `DirectInput` cannot be initializer 162- Windows: Fix overflow condition with QueryPerformanceCounter 163 164## [3.2.1] - 2020-03-10 165 166See the [release announcement](https://godotengine.org/article/maintenance-release-godot-3-2-1) for details. 167 168### Added 169 170- Skin: Add support for named binds 171 172### Changed 173 174- TileSet: Hide TileSet properties from Inspector, fixing OOM crash on huge tilesets 175 176### Fixed 177 178- Android: Fix double tap pressed event regression 179- Android: Fix LineEdit virtual keyboard inputs 180- Bullet: Fix detection of concave shape in Area 181- Camera2D: Fix inverted use of Camera2D `offset_v` 182- Debugger: Fix crash inspecting freed objects 183- Expression: Fix parsing integers as 32-bit 184- HTML5: Fix `EMWSClient::get_connection_status()` 185- HTML5: Fix touch events support with Emscripten 1.39.5+ 186- macOS: Fix gamepad disconnection callback on macOS Catalina 187- Particles: Fix undefined behavior with atan in GPU Particles 188- Video: Workaround WebM playback bug after AudioServer latency fixes 189- Windows: Fix UPNP regression after upstream update 190- Windows: Disable NetSocket address reuse 191 192## [3.2] - 2020-01-29 193 194### Added 195 196- Support for [pseudo-3D depth in 2D](https://godotengine.org/article/godot-32-will-get-pseudo-3d-support-2d-engine). 197- Support for importing 3D scenes using Assimp. 198 - Many formats are supported, including FBX. 199- [Support for generating audio procedurally and analyzing audio spectrums.](https://godotengine.org/article/godot-32-will-get-new-audio-features) 200- WebRTC support. 201 - Includes support for the high-level multiplayer API. 202 - Supports NAT traversal using STUN or TURN. 203- Support for automatically building Android templates before exporting. 204 - This makes 3rd-party SDK integration easier. 205- Support for [texture atlases in 2D](https://godotengine.org/article/atlas-support-returns-godot-3-2). 206- Major improvements to the visual shader system. ([News post 1](https://godotengine.org/article/major-update-for-visual-shader-in-godot-3-2), [News post 2](https://godotengine.org/article/major-update-visual-shaders-godot-3-2-part-2)) 207 - Redesigned visual shader editor with drag-and-drop capability. 208 - Textures can be dragged from the FileSystem dock to be added as nodes. 209 - Most functions available in GLSL are now exposed. 210 - Many constants such as `Pi` or `Tau` can now be used directly. 211 - Support for boolean uniforms and sampler inputs. 212 - New Sampler port type. 213 - New conditional nodes. 214 - New Expression node, allowing shader code to be written in visual shaders. 215 - Support for plugins (custom nodes). 216 - Custom nodes can be drag-and-dropped from the FileSystem dock. 217 - Ability to copy and paste nodes. 218 - Ability to delete multiple nodes at once by pressing <kbd>Delete</kbd>. 219 - The node creation menu is now displayed when dragging a connection to an empty space on the graph. 220 - GLES3-only functions are now distinguished from others in the creation dialog. 221 - Ability to preview the code generated by the visual shader. 222 - Ability to convert visual shaders to text-based shaders. 223 - See the [complete list of new functions](https://github.com/godotengine/godot/pull/26164). 224- Improved visual scripting. 225 - Visual scripting now uses an unified graph where all functions are represented. 226 - Nodes can now be edited directly in the graph. 227 - Support for fuzzy searching. 228 - The `tool` mode can now be enabled in visual scripts. 229 - New Deconstruct node to deconstruct a complex value into a scalar value. 230 - Miscellaneous UI improvements. 231- Support for enabling/disabling parts of the editor or specific nodes. 232 - This is helpful for education, or when working with artists to help prevent inadvertent changes. 233- Language server for GDScript. 234 - This can be used to get better integration with external editors. 235- Version control integration in the editor. 236 - This integration is VCS-agnostic (GDNative plugins provide specific VCS support). 237- Improved GridMap editor. 238 - The copied mesh is now displayed during pasting. 239 - The duplication/paste indicator is now rotated correctly around the pivot point. 240 - Ability to cancel paste and selection by pressing <kbd>Escape</kbd>. 241 - Erasing is now done using <kbd>RMB</kbd> instead of <kbd>Shift + RMB</kbd>. 242 - Freelook can still be accessed by pressing <kbd>Shift + F</kbd>. 243- Improved MeshLibrary generation. 244 - When appending to an existing MeshLibrary, previews are now only generated for newly-added or modified meshes. 245 - Tweaked the previews' camera angle and light directions for better results. 246 - Materials assigned to the MeshInstance instead of the Mesh are now exported to the MeshLibrary. 247 - This is useful when exporting meshes from an imported scene (such as glTF), as it allows materials to persist across re-imports. 248- [Improved Control anchor and margin workflow.](https://github.com/godotengine/godot/pull/27559) 249- [Network profiler.](https://github.com/godotengine/godot/pull/31870) 250- Improved NavigationMesh generation. 251 - GridMaps can now be used to bake navigation meshes. 252 - EditorNavigationMeshGenerator can now be used in `tool` scripts. 253 - Support for generating navigation meshes from static colliders. 254 - When using static colliders as a geometry source, a layer mask can be specified to ignore certain colliders. 255 - The generator no longer relies on the global transform, making it possible to generate navmeshes on nodes that are not in the scene tree. 256 - Navigation gizmos are now updated after every new bake. 257- Support for skinning in 3D skeletons. 258- CameraServer singleton to retrieve images from mobile cameras or webcams as textures. 259- A crosshair is now displayed when using freelook in the 3D editor. 260- Project camera override button at the top of the 2D and 3D editors. 261 - When enabled, the editor viewport's camera will be replicated in the running project. 262- RichTextLabel can now be extended with real-time effects and custom BBCodes. 263 - Effects are implemented using the ItemFX resource. 264- `[img=<width>x<height>]` tag to resize an image displayed in a RichTextLabel. 265 - If `<width>` or `<height>` is 0, the image will be adjusted to keep its original aspect. 266- Revamped node connection dialog for improved ease of use. 267- The Signals dock now displays a signal's description in a tooltip when hovering it. 268- Input actions can now be reordered by dragging them. 269- Animation frames can now be reordered by dragging them. 270- Ruler tool to measure distances and angles in the 2D editor. 271- "Clear Guides" menu option in the 2D editor to remove all guides. 272- The 2D editor grid now displays a "primary" line every 8 lines for easier measurements. 273 - This value can be adjusted in the Configure Snap dialog. 274- Projects can now have a description set in the Project Settings. 275 - This description is displayed as a tooltip when hovering the project in the Project Manager. 276- All Variant types can now be added as project settings using the editor (instead of just `bool`, `int`, `float` and `String`). 277- Pressing <kbd>Ctrl + F</kbd> now focuses the search field in the Project Settings and Editor Settings. 278- Quick Open dialog (<kbd>Shift + Alt + O</kbd>) to open any resource in the project. 279 - Unlike the existing dialogs, it's not limited to scenes or scripts. 280- Ability to convert a Sprite to a Mesh2D, Polygon2D, CollisionPolygon2D or LightOccluder2D. 281- MultiMeshInstance2D node for using MultiMesh in 2D. 282- PointMesh primitive. 283 - Drawn as a rectangle with a constant size on screen, which is cheaper compared to using triangle-based billboards. 284- 2D polygon boolean operations and Delaunay triangulation are now available in the Geometry singleton. 285- [New convex decomposition](https://godotengine.org/article/godot-3-2-adds-support-convex-decomposition) using the [V-HACD](https://github.com/kmammou/v-hacd) library. 286 - Can decompose meshes into multiple convex shapes for increased accuracy. 287- Support for grouping nodes in the 3D editor. 288- "Slow" modifier in freelook (accessed by holding <kbd>Alt</kbd>). 289- The 2D editor panning limits can now be disabled in the Editor Settings. 290- "Undo Close Tab" option in the scene tabs context menu. 291- The editor is now capped to 20 FPS when the window is unfocused. 292 - This decreases CPU/GPU usage if something causes the editor to redraw continuously (such as particles). 293- The editor's FPS cap can now be adjusted in the Editor Settings (both when focused and unfocused). 294- Version information is now displayed at the bottom of the editor. 295 - This is intended to make the Godot version easily visible in video tutorials. 296- Support for constants in the shader language. 297- Support for local and varying arrays in the shader language. 298- Support for `switch` statements in the shader language. 299- Support for `do {...} while (...)` loops in the shader language. 300 - Unlike `while`, the expression in the `do` block will always be run at least once. 301- Support for hexadecimal number literals in the shader language. 302- Ported several GLES3 shader functions such as `round()` to GLES2. 303- `SHADOW_VEC` shader parameter to alter 2D shadow computations in custom shaders. 304- Filter search box in the remote scene tree dock. 305- Ability to expand/collapse nodes recursively in the scene tree dock by holding <kbd>Shift</kbd> and clicking on a folding arrow. 306- Support for depth of field, glow and BCS in the GLES2 renderer. 307- MSAA support in the GLES2 renderer. 308- Ability to render viewports directly to the screen in the GLES2 renderer. 309 - This can be faster on low-end devices, but it comes at a convenience cost. 310- Project settings to set the maximum number of lights and reflections in the GLES3 renderer. 311 - Decreasing these values can lead to faster shader compilations, resulting in lower loading times. 312- Heightmap collision shape for efficient terrain collisions. 313- AStar2D class, making A* use easier in 2D. 314- Disabled collision shapes can now be added directly, without having to disable them manually after one step. 315- Context menu options to close other scene tabs, scene tabs to the right, or all scene tabs. 316- The audio bus volumes can now be snapped by holding <kbd>Ctrl</kbd> while dragging the slider. 317- Hovering an audio bus' volume slider now displays its volume in a tooltip. 318- Values in the Gradient and Curve editors can now be snapped by holding <kbd>Ctrl</kbd>. 319 - Precise snapping can be obtained by holding <kbd>Shift</kbd> as well. 320- Support for snapping when scaling nodes in the 2D editor. 321- Precise snapping in the 3D editor when holding <kbd>Shift</kbd>. 322- "Align Rotation with View" in the 3D editor. 323 - Unlike "Align Transform with View", only the selected node's rotation will be modified. 324 - "Align Selection with View" has been renamed to "Align Transform with View". 325- All 3D gizmos now make use of snapping if enabled. 326- CSG shapes are now highlighted with a translucent overlay when selected. 327 - Shapes in Union mode will use a blue overlay color by default. 328 - Shapes in Subtraction mode will use an orange overlay color by default. 329 - Shapes in Intersection mode will use a white overlay color. 330- Ability to move a vertex along a single axis when holding <kbd>Shift</kbd> in polygon editors. 331- Support for binary literals in GDScript (e.g. `0b101010` for `42`). 332- AutoLoads can now be used as a type in GDScript. 333- Ability to define script templates on a per-project basis. 334 - Template files should be placed into a `script_templates/` directory in the project and have an extension that matches the language (`.gd` for GDScript, `.cs` for C#). 335 - The path to the script templates directory can be changed in the Project Settings. 336- Ability to limit the minimum and maximum window size using `OS.set_min_window_size()` and `OS.set_max_window_size()`. 337- `Node.process_priority` property to set or get a node's processing priority. 338 - This was previously only available as `Node.set_process_priority()` (without an associated getter). 339- `Node.editor_description` property for documentation purposes. 340 - When hovering a node with a description in the scene tree dock, the description will be displayed in a tooltip. 341- `Button.keep_pressed_outside` property to keep a button pressed when moving the pointer outside while pressed. 342- `Button.expand_icon` property to make a button's icon expand/shrink with the button's size. 343- `Popup.set_as_minsize()` method to shrink a popup to its minimum size. 344- `Tree.get_icon_modulate()` and `Tree.set_icon_modulate()` methods to change an icon's color in a Tree. 345- `Tree.call_recursive()` method to call a method on a TreeItem and its children recursively. 346- `Light.use_gi_probe` property to exclude specific lights from GIProbe computations. 347- TranslationServer method `get_loaded_locales()` to retrieve the list of languages with a translation loaded. 348- `FRUSTUM` 3D camera mode to create tilted frustums for mirror or portal effects. 349- `CanvasItem.draw_rect()` now has `width` and `antialiased` properties to match `draw_line()`'s functionality. 350- `Engine.get_idle_frames()` and `Engine.get_physics_frames()` to get the number of idle and physics frame iterations since the project started. 351 - Unlike `Engine.get_frames_drawn()`, `Engine.get_idle_frames()` will be incremented even if the render loop is disabled. 352- `Engine.get_physics_interpolation_fraction()` to get the fraction through the current physics tick at the time of the current frame. 353 - This can be used to implement fixed timestep interpolation. 354- Support for shadow-to-opacity in 3D to render shadows in augmented reality contexts. 355- Ability to change a Position2D gizmo's size. 356- New Vector2 and Vector3 methods: 357 - `move_toward()` to retrieve a vector moved towards another by a specified number of units. 358 - `direction_to()` to retrieve a normalized vector pointing from a vector to another. 359 - This is a shorter alternative to `(b - a).normalized()`. 360- AStar functions `set_point_disabled()` and `is_point_disabled()` to selectively disable points. 361- Tween now emits a `tween_all_completed` signal when all tweens are completed. 362- `Input.get_current_cursor_shape()` to retrieve the current cursor shape. 363- `InputEventAction` now has a `strength` property to simulate analog inputs. 364- `String.repeat()` method to repeat a string several times and return it. 365- `String.count()` method to count the number of occurrences of a substring in a string. 366- `String.humanize_size()` method to display a file size as an human-readable string. 367- `String.strip_escapes()` to strip non-printable escape characters from a string, including tabulations and newlines (but not spaces). 368- `String.sha1_text()` and `String.sha1_buffer()` methods to return a string's SHA-1 hash. 369- Line2D `clear_points()` method to clear all points. 370- Line2D now has a "Width Curve" property to make its width vary at different points. 371- `assert()` now accepts an optional second parameter to display a custom message when the assertion fails. 372- `posmod()` built-in GDScript function that behaves like `fposmod()`, but returns an integer value. 373- `smoothstep()` built-in GDScript function for smooth easing of values. 374- `lerp_angle()` built-in GDScript function to interpolate between two angles. 375- `ord()` built-in GDScript function to return the Unicode code point of an 1-character string. 376- `PoolByteArray.hex_encode()` method to get a string of hexadecimal numbers. 377- `Font.get_wordwrap_string_size()` method to return the rectangle size needed to draw a word-wrapped text. 378- `Camera.get_camera_rid()` method to retrieve a Camera's RID. 379- `Array.slice()` method to duplicate a subset of an Array and return it. 380- The GraphEdit box selection colors can now be changed by tweaking the `selection_fill` and `selection_stroke` theme items. 381- Toggleable HSV mode for ColorPicker. 382- ColorPicker properties to toggle the visibility and editability of presets. 383- The default ColorPicker mode (RGB, HSV, RAW) can now be changed in the Editor Settings. 384- ColorPicker now displays an indicator to denote "overbright" colors (which can't be displayed as-is in the preview). 385- Hovering a Color property in the editor inspector now displays a tooltip with the exact values. 386- `Color.transparent` constant (equivalent to `Color(1, 1, 1, 0)`). 387- `KinematicBody.get_floor_normal()` and `KinematicBody2D.get_floor_normal()` to retrieve the collided floor's normal. 388- `VehicleWheel.get_rpm()` method to retrieve a vehicle wheel's rotations per minute. 389- Per-wheel throttle, brake and steering in VehicleBody. 390- `GeometryInstance.set_custom_aabb()` to set a custom bounding box (used for view frustum culling). 391- `FuncRef.call_funcv()` to call a FuncRef with an array containing arguments. 392 - In contrast to `FuncRef.call_func()`, only a single array argument is expected. 393- `Mesh.get_aabb()` is now exposed to scripting. 394- `PhysicalBone.apply_impulse()` and `PhysicalBone.apply_central_impulse()` methods to push ragdolls around. 395- `ProjectSettings.load_resource_pack()` now features an optional `replace_files` argument (defaulting to `true`), which controls whether the loaded resource pack can override existing files in the virtual filesystem. 396- `SpinBox.apply()` method to evaluate and apply the expression in the SpinBox's value immediately. 397- `ConfigFile.erase_section_key()` method to remove a single key from a ConfigFile. 398- `OS.execute()` now returns the process' exit code when blocking mode is enabled. 399- `OS.is_window_focused()` method that returns `true` if the window is currently focused. 400 - Tracking the focus state manually using `NOTIFICATION_WM_FOCUS_IN` and `NOTIFICATION_WM_FOCUS_OUT` is no longer needed to achieve this. 401- `OS.low_processor_mode_sleep_usec` is now exposed as a property. 402 - This makes it possible to change its value at runtime, rather than just defining it once in the Project Settings. 403- `SceneTree.quit()` now accepts an optional argument with an exit code. 404 - If set to a value greater than or equal to 0, it will override the `OS.exit_code` property. 405- `VisualServer.get_video_adapter_name()` and `VisualServer.get_video_adapter_vendor()` methods to retreive the user's graphics card model and vendor. 406- `VisualServer.multimesh_create()` is now exposed to scripting. 407- Ability to override how scripted objects are converted to strings by defining a `_to_string()` method. 408- Export hints for 2D and 3D physics/render layers. 409- Editor plugins can now add new tabs to the Project Settings. 410- Standalone ternary expression warning in GDScript. 411- Variable shadowing warning in GDScript. 412 - Will be displayed if: 413 - a block variable shadows a member variable, 414 - a subclass variable shadows a member variable, 415 - a function argument shadows a member variable. 416- Script reflection methods are now exposed to GDScript. 417 - See `Script.get_script_property_list()`, `Script.get_script_method_list()`, `Script.get_script_signal_list()`, `Script.get_script_constant_map()` and `Script.get_property_default_value()`. 418- `randfn(mean, deviation)` method to generate random numbers following a normal Gaussian distribution. 419- Ability to read the standard error stream when using `OS.execute()` (disabled by default). 420- Option to disable boot splash filtering (nearest-neighbor interpolation). 421- The GridMap editor now offers a search field and size slider. 422- DynamicFont resources now have a thumbnail in the editor. 423- Minimap in the script editor. 424- Bookmarks in the script editor for easier code navigation. 425- Filter search box for the script list and member list. 426- Singletons and `class_name`-declared classes are now highlighted with a separate color in the script editor. 427- The editor help now displays class properties' default and overridden values. 428- The script editor's Find in Files dialog can now search in user-defined file types (`editor/search_in_file_extensions` in the Project Settings). 429- The script editor search now displays the number of matches. 430- The script editor search now selects the current match for easier replacing. 431- "Evaluate Expression" contextual option in the script editor. 432 - This option evaluates the selected expression and replaces it (e.g. `2 + 2` becomes `4`). 433- Autocompletion support for `change_scene()`. 434- Ability to skip breakpoints while debugging. 435- Drag-and-drop support in the TileSet editor. 436- Ability to attach scripts to nodes by dragging a name from the script list to a node in the scene tree. 437- Icons are now displayed next to code completion items, making their type easier to distinguish. 438- TileMap property `centered_textures` can be used to center textures on their tile, instead of using the tile's top-left corner as position for the texture. 439- "Ignore" flag to ignore specific tiles when autotiling in the TileMap editor. 440- Keyboard shortcuts to rotate tiles in the TileMap editor. 441 - Default shortcuts are <kbd>A</kbd> (rotate left), <kbd>S</kbd> (rotate right), <kbd>X</kbd> (flip horizontally), <kbd>Y</kbd> (flip vertically). 442- Ability to keep a node's local transform when reparenting it by holding <kbd>Shift</kbd>. 443- Basis constants `IDENTITY`, `FLIP_X`, `FLIP_Y`, `FLIP_Z`. 444- Ability to create sprite frames in AnimatedSprite from a sprite sheet. 445- `frame_coords` property in Sprite and Sprite3D to set/get the coordinates of the frame to display from the sprite sheet. 446- `billboard` property in Sprite3D. 447- Reimplemented support for editing multiple keys at once in the animation editor. 448- Support for FPS snapping in the Animation editor. 449- Autokeying in the Animation editor. 450 - Keyframes will be created automatically when translating, rotating or scaling nodes if a track exists already. 451 - Keys must be inserted manually for the first time. 452- AnimationNodeBlendTreeEditor improvements. 453 - Ability to exclude multiple selected nodes at once. 454 - Context menu to add new nodes (activated by right-clicking). 455- The AnimationPlayer Call Method mode is now configurable. 456 - Method calls can be "deferred" or "immediate", "deferred" being the default. 457- OccluderPolygon2D is now draggable in the editor. 458- The tooltip position offset is now configurable. 459- The default cursor used when hovering RichTextLabels can now be changed. 460- "Dialog Autowrap" property in AcceptDialog to wrap the label's text automatically. 461- The 2D editor's panning shortcut can now be changed. 462- The shortcuts to quit the editor can now be changed. 463- Support for emission masks in CPUParticles2D. 464- `direction` property in CPUParticles and ParticlesMaterial. 465- `lifetime_randomness` property in CPUParticles and ParticlesMaterial. 466- CPUParticles now uses a different gizmo icon to distinguish them from Particles. 467- "Restart" button to restart particle emission in the editor. 468- AnimatedSprites' animations can now be played backwards. 469- TextureRects can now have their texture flipped horizontally or vertically. 470- StyleBoxFlat shadows can now have an offset. 471- StyleBoxFlat now computes UV coordinates for its `canvas_item` vertices, which can be used in custom shaders. 472- Profiler data can now be exported to a CSV file. 473- The 2D polygon editor now displays vertex numbers when hovering vertices. 474- RectangleShapes now have a third handle to drag both axes at once. 475- Global class resources are now displayed in the Resource property inspector. 476- Double-clicking an easing property in the inspector will now make the editor display a numeric field. 477 - This makes it easier to enter precise values for properties such as light attenuation. 478- `interface/editor/default_float_step` editor setting to configure floating-point values' default step in the Inspector. 479- Audio buses are now stylized to look like boxes that can be dragged. 480- The default audio bus layout file path can now be changed in the Project Settings. 481- The LineEdit and TextEdit controls now display their contextual menu when pressing the <kbd>Menu</kbd> key. 482- `shortcut_keys_enabled` and `selecting_enabled` LineEdit and TextEdit properties to disable keyboard shortcuts and selecting text. 483- The LineEdit "disabled" font color can now be changed. 484- The TextEdit "readonly" font color can now be changed. 485- LineEdit can now have its `right_icon` set in scripts. 486- The `nine_patch_stretch` TextureProgress property now enables stretching when using a radial fill mode. 487- Support for loading and saving encrypted files in ConfigFile. 488- `get_path()` and `get_path_absolute()` are now implemented in FileAccessEncrypted. 489- "Disabled" attenuation model for AudioStreamPlayer3D, making the sound not fade with distance while keeping it positional. 490- AudioEffectPitchShift's FFT size and oversampling are now adjustable. 491- TextEdit's tab drawing and folding is now exposed to GDScript. 492- Orphan node monitor in the Performance singleton. 493 - Counts the number of nodes that were created but aren't instanced in the scene tree. 494- Ability to change eye height in VR. 495- CSV files can now be imported as non-translation files. 496- Scene resources such as materials can now be imported as `.tres` files. 497- Support for importing 1-bit, 4-bit and 8-bit BMP files. 498 - Size dimensions must be a multiple of 8 for 1-bit images and 2 for 4-bit images. 499- `use_lld=yes` flag to link with [LLD](https://lld.llvm.org/) on Linux when compiling with Clang. 500 - This results in faster iteration times when developing Godot itself or modules. 501- `use_thinlto=yes` flag to link with [ThinLTO](https://clang.llvm.org/docs/ThinLTO.html) when using Clang. 502- Multicast support in PacketPeerUDP. 503- `NetworkedMultiplayerEnet.server_relay` property to disable server relaying. 504 - This can be used to increase security when building a fully-authoritative server. 505- Automatic timeout for TCP connections (defaults to 30 seconds, can be changed in the Project Settings). 506- `HTTPRequest.timeout` property (defaults to 0, which is disabled). 507- `HTTPRequest.download_chunk_size` property. 508 - This value can be adjusted to reduce the allocation overhead and file writes when downloading large files. 509 - The default value was increased for faster downloads (4 KB → 64 KB). 510- WebSocket improvements. 511 - Support for SSL in WebSocketServer. 512 - WebSocketClient can now use custom SSL certificates (except on HTML5). 513 - WebSocketClient can now define custom headers. 514- The editor now features a built-in Web server for testing HTML5 projects. 515- Button to remove all missing projects in the Project Manager. 516- Reimplemented support for embedding project data in the PCK file. 517- Ability to take editor screenshots by pressing <kbd>Ctrl + F12</kbd>. 518- Editor plugins can now set the current active editor as well as toggle the distraction-free mode. 519- **Android:** [Support for adaptive icons.](https://docs.godotengine.org/en/latest/getting_started/workflow/export/exporting_for_android.html#providing-launcher-icons) 520 - All icon densities are now generated automatically by the exporter. 521 - Only 3 images now need to be supplied to support all icon formats and densities (legacy icon, adaptive foreground, adaptive background). 522- **Android:** Support for the Oculus Mobile SDK. 523- **Android:** Support for requesting permissions at runtime. 524- **Android:** `NOTIFICATION_APP_PAUSED` and `NOTIFICATION_APP_RESUMED` notifications are now emitted when the app is paused and resumed. 525- **Android:** Support for pen input devices. 526- **Android/iOS:** Support for vibrating the device. 527- [**HTML5:** Partial clipboard support.](https://github.com/godotengine/godot/pull/29298) 528- **iOS:** Support for [ARKit](https://developer.apple.com/augmented-reality/). 529- **iOS:** `OS.get_model_name()` now returns a value with the device name. 530- **iOS:** The Home indicator is now hidden by default to avoid being in the way of the running project. 531 - It can be restored in the Project Settings. 532- **Windows:** Ability to toggle the console window in the Editor Settings. 533- **Windows:** Project setting to enable Vsync using the compositor (DWM), disabled by default. 534 - On some hardware, this may fix stuttering issues when running a project in windowed mode. 535- **Windows:** Support for code signing using `signtool` on Windows and `osslsigncode` on other platforms. 536- **Windows:** Support for using Clang and ThinLTO when compiling using MinGW. 537- **Windows/macOS:** `OS.set_native_icon()` method to set an `.ico` or `.icns` window/taskbar icon at runtime. 538- **Windows/macOS/X11:** Support for graphic tablet pen pressure and tilt in InputEventMouseMotion. 539- **macOS:** LineEdit now supports keyboard shortcuts commonly available on macOS. 540- **macOS:** Multiple instances of the editor can now be opened at once. 541- **macOS:** Recent and favorite projects are now listed in the project manager dock menu. 542- **macOS:** The list of open scenes is now displayed in the editor dock menu. 543- **macOS:** Support for modifying global and dock menus. 544- **macOS:** Improved support for code signing when exporting projects. 545- **macOS:** Support for defining camera and microphone usage descriptions when exporting a project. 546- **macOS/X11:** [A zsh completion file for the editor is now available.](https://github.com/godotengine/godot/blob/master/misc/dist/shell/_godot.zsh-completion) 547- **X11:** The instance PID is now set as the `_NET_WM_PID` window attribute, so that external programs can easily access it. 548- **Mono:** Support for exporting to Android and HTML5. 549- **Mono:** Support for using Rider as an external editor. 550- **Mono:** Support for attaching external profilers like dotTrace using the `MONO_ENV_OPTIONS` environment variable. 551- **Mono:** New DynamicGodotObject class to access dynamic properties from scripts written in GDScript. 552- **Mono:** Support for resource type hints in exported arrays. 553- **Mono:** New `mono/unhandled_exception_policy` project setting to keep running after an unhandled exception. 554- [**Mono:** New Godot constants to conditionally react to system variables at compile-time.](https://github.com/godotengine/godot/pull/28786) 555- **Mono:** Support for Visual Studio 2019's MSBuild. 556 557### Changed 558 559- Tween and Timer now display an error message if they are started without being added to the scene tree first. 560- Tweaked Timer's wait time property hint to allow values with 3 decimals and above 4096. 561- Functions called from a signal can no longer disconnect the node from the signal they're connected to (unless using `call_deferred()`). 562- Tabs and space indentation can no longer be mixed in the same GDScript file. 563 - Each file must now use only tabs or spaces for indentation (not both). 564- `assert()` in GDScript must now always be used with parentheses. 565 - `assert(true)` is still valid, but `assert true` isn't valid anymore. 566 - This is to account for the optional second parameter that defines a custom message. 567- The "Trim" and "Normalize" WAV import options are now disabled by default. 568 - This makes the default behavior more consistent with Ogg import. 569- Ogg samples now have an icon in the editor, like WAV samples. 570- Camera2D drag margins are now disabled by default. 571 - If porting a project from Godot 3.1 where drag margins were used, these must be enabled manually again. 572- The Camera2D Offset property now ignores the Limit property. 573 - To get the old behavior back, move the camera itself instead of changing the offset. 574- `Camera.project_position()` now requires a second `depth` argument to determine the distance of the point from the camera. 575 - To get the old behavior back, pass the Camera's `near` property value as the second argument. 576- `Skeleton.set_bone_global_pose()` was replaced by `Skeleton.set_bone_global_pose_override()`. 577- UDP broadcasting is now disabled by default and must be enabled by calling `set_broadcast_enabled(true)` on the PacketPeerUDP instance. 578- The editor and project manager now open slightly faster. 579- Improved the Project Manager user interface. 580 - New, simpler design with more space available for the project list. 581 - Improved reporting of missing projects. 582 - The search field is now focused when starting the Project Manager if there is at least one project in the list. 583 - The search field now searches in both the project name and path. 584 - If the search term contains a `/`, the whole path will be used to match the search them. Otherwise, only the last path component will be searched in. 585- Refactored the Project Manager to be more efficient, especially with large project lists. 586- Images in the Project Manager and Asset Library are now resized with Lanczos filtering for a smoother appearance. 587- The editor now uses the font hinting algorithm that best matches the OS' default. 588 - Hinting is set to "None" on macOS, and set to "Light" on Windows and Linux. 589 - This can be changed in the Editor Settings. 590- The editor window dimming when a popup appears is now less intense (60% → 50%). 591 - The animation was also removed as it made the editor feel sluggish at lower FPS. 592- Several editor menus have been reorganized for consistency and conciseness. 593- Undo/Redo now supports more actions throughout the editor. 594- Increased the height of the ItemList editor popup. 595 - This makes it easier to edit large amounts of items. 596- Opening a folder in FileDialog will now scroll back to the top. 597- Folder icons in FileDialog can now be displayed with a different color using the `folder_icon_modulate` constant, making them easier to distinguish from files. 598 - Folder icons in editor file dialogs are now tinted with the accent color. 599- Improved colors in the light editor theme for better readability and consistency. 600- Improved A* performance significantly by using a binary heap and OAHashMap. 601- Tweaked the AABB transform algorithm to be ~1.2 times faster. 602- Optimized the variant reference function, making complex scripts slightly faster. 603- Disabled high-quality voxel cone tracing by default. 604 - This makes GIProbe much faster out of the box, at the cost of less realistic reflections. 605- Lowered the default maximum directional shadow distance (200 → 100). 606 - This makes directional shadow rendering consistent between the editor and running project when using the default Camera node settings. 607- Tweaked the default depth fog maximum distance to be independent of the Camera's `far` value (0..100). 608 - This makes fog display consistent between the editor and a running project. 609- Tweaked the default height fog values to be more logical (0..100 → 10..0). 610 - This means height fog will be drawn from top-to-bottom, instead of being drawn from bottom-to-top. 611- Significantly improved SSAO performance by using a lower sample count. 612 - SSAO now uses 3×3 blurring by default, resulting in less visible noise patterns. 613- When "Keep 3D Linear" is enabled, colors are no longer clamped to [0, 1] when using Linear tonemapping. 614 - This allows rendering HDR values in floating-point texture targets for further processing or saving HDR data into files. 615- The lightmap baker now calculates lightmap sizes dynamically based on surface area. 616- Improved 3D KinematicBody performance and reliability. 617- Orbiting in the 3D editor can now be done while holding <kbd>Alt</kbd>, for better compatibility with graphics tablets. 618- Keys and actions are now released when the window loses focus. 619- Tweens can now have a duration of 0. 620- Particles and CPUParticles' Sphere emission shape now uses an uniform density sphere. 621- `Viewport.size_override_stretch` is now exposed as a property (rather than just setter/getter methods). 622- One-click deploy to Android now requires just one click if only one device is connected. 623- The Project Manager will now infer a project name from the project path if the name was left to the default value. 624- The WebSockets implementation now uses the smaller [wslay](https://tatsuhiro-t.github.io/wslay/) library instead of libwebsockets. 625- Box selections in the editor now use a subtle outline for better visibility. 626- Most 2D lines are now antialiased in the editor. 627- CheckButtons now use a simpler design in the editor. 628- Messages originating from the editor are now faded in the editor log. 629 - This makes messages printed by the project stand out more. 630- Folding arrows in the editor inspector are now displayed at the left for consistency with other foldable elements. 631- Hovering or dragging guides in the 2D editor will now turn the cursor into a "resizing" shape. 632- The editor update spinner is now hidden by default. 633 - It can be enabled again in the Editor Settings. 634- The "Update Always" option is now editor-wide instead of being project-specific. 635- ColorPicker, OptionButton and MenuButton now use toggle mode, making them appear pressed when clicked. 636- The ColorPicker preview was moved below the picker area to be closer to the sliders. 637- Increased the Light2D height range from -100..100 to -2048..2048. 638 - Lower and higher values can be entered manually too. 639- Decreased the `rotation_degrees` range in various nodes to -360..360 to be easier to adjust using the slider. 640 - Lower and higher values can still be entered manually, which is useful for animation purposes. 641- The default RichTextLabel color is now `#ffffff`, matching the default Label color for better consistency. 642- SpinBoxes now calculate the entered value using the Expression class. 643 - For example, writing `2 + 2` in a SpinBox then pressing Enter will result in `4`. 644- Saved resources no longer contain dependency indices and metadata such as node folding, resulting in more VCS-friendly files. 645- The script editor's line length guideline is now enabled by default. 646- The script editor state (such as breakpoints or the current line) is now preserved across editor sessions. 647- The script editor's "Auto Brace Complete" setting is now enabled by default. 648- The scripts panel toggle button is now located at the bottom-left of the script editor (instead of the File menu). 649- Editor plugins can now be enabled without having an init script defined. 650- Custom nodes added by plugins now have a translucent script icon in the scene tree dock. 651- `EditorInterface.get_current_path()` to get the full path currently displayed in the FileSystem dock in an editor plugin. 652- Copy constructors are now allowed for built-in types in GDScript. 653 - This allows constructs such as `Vector2(Vector2(12, 34))`, which may be useful to simplify code in some cases. 654- `weakref(null)` is now allowed in GDScript. 655 - This makes checking for a valid reference more concise, as `if my_ref.get_ref()` is now sufficient (no need for `if my_ref and my_ref.get_ref()`). 656- The number of signal connections and groups is now displayed in a tooltip when hovering the associated buttons in the scene tree dock. 657- The right mouse button can now be used to pan in the 2D editor. 658 - This is to improve usability when using a touchpad. 659 - The middle mouse button can still be used to pan in the 2D editor. 660- Zooming is now allowed while panning in the 2D editor. 661- When the "Scroll To Pan" editor setting is enabled, the 2D editor can now be zoomed in by holding <kbd>Ctrl</kbd> and scrolling the mouse wheel. 662- Zoom percentages in the 2D editor are now relative to the editor scale if the editor scale is higher than 100%. 663- The 2D editor now displays the current zoom percentage. 664 - The zoom percentage can be clicked to reset the zoom level to 100%. 665- Improved sorting options in the Asset Library. 666- Images now load faster in the Asset Library. 667- A loading placeholder is now displayed while icons are loading in the Asset Library. 668- Images failing to load in the Asset Library display a "broken file" icon. 669- Improved the Asset Library page loading transitions. 670- Tweaked the Asset Library detail page layout for better readability. 671- Audio mixer faders now use a non-linear algorithm to better fit human hearing. 672- Tooltips now appear faster when hovering elements in the editor (0.7 seconds → 0.5 seconds). 673- Increased the low-processor usage mode's default maximum refresh rate (125 FPS → 144 FPS). 674 - This makes the editor feel slightly smoother on 144 Hz displays. 675- Tree scrolling when dragging now uses a larger drag margin, making drag-and-drop more convenient. 676- Holding <kbd>Ctrl</kbd> now toggles snapping in GraphEdit. 677- Improved the timeline's appearance in the animation editor. 678- Improved snapping in the animation editor. 679 - Snapping can be toggled temporarily by holding the <kbd>Ctrl</kbd> key. 680 - Snapping can be made more precise by holding the <kbd>Shift</kbd> key. 681 - Timeline snapping is now toggled by the Snap setting (like when moving keyframes). 682- Keyframes are now easier to select in the animation editor. 683- Selected keyframes now appear slightly larger in the animation editor. 684- Boolean and color keyframe icons are now aligned to other keyframes in the animation editor. 685- The Animation editor's line widths are now resized to match the editor scale. 686- BPTC compression is now available for all HDR image formats. 687- `Image.save_exr()` to save an image in EXR format, which supports high bit depths. 688- Improved path and polygon editors. 689 - New handle icons for path and polygon points. 690 - Smooth path point and curve tangents now use different icons to be distinguished from sharp points. 691 - Tangent lines are now gray in the Path2D and Path editors. 692 - Path2D lines are now antialiased. 693- Increased the TileSet and polygon UV editor's maximum zoom levels (400% → 1600%). 694- Decreased the maximum allowed StyleBoxFlat corner detail (128 → 20). 695 - This prevents slowness and glitches caused by using overly detailed corners. 696- 3D collision shapes and RayCasts are now drawn in gray when disabled. 697- Improved RayCast2D and one-way collision drawing. 698 - Disabled RayCast2Ds are now displayed in gray. 699 - One-way collision arrows are now orange by default, making them easier to distinguish them from RayCast2Ds. 700 - Tweaked RayCast2D and one-way collision line shapes to look more like arrows. 701- Improved rendering in the curve editor. 702 - The grid is now rendered correctly when using a light theme. 703 - The main line and edge line colors have been swapped for better visibility. 704 - Tangent line widths are now resized to match the editor scale. 705- Improved rendering in the performance monitor. 706 - Dark colors are now used on light backgrounds for better visibility. 707 - Graph lines are now thinner and opaque. 708 - Graph line widths are now resized to match the editor scale. 709 - Rounded values now display trailing zeroes to make their precision clearer. 710- TileMap support for transform operations on cell textures bigger than the cell size has been reworked to properly support isometric tiles. 711 - Breaks compatibility with some TileMaps from previous Godot versions. An opt-in `compatibility_mode` property can be used to restore the previous behavior. 712- Some TileMap editor options were moved to the toolbar. 713- The TileMap editor now displays coordinate information in the 2D viewport's bottom-left corner. 714 - This fixes the TileMap editor width changing when hovering tiles in a small window. 715- Brackets are now only inserted when necessary when autocompleting methods in the script editor. 716- Improved dialogs when saving or removing an editor layout. 717- Whitespace-only selections no longer cause the script editor to highlight all occurrences. 718- Saving a script will now add a newline at the end of file if none was present already. 719- Reorganized sections in the editor help to be in a more logical order. 720- The editor help now uses horizontal margins if the screen is wide enough. 721 - This makes sure lines keep a reasonable length for better readability. 722- Increased line spacing in the editor help and asset library descriptions. 723- The editor help now displays bold text using a bold font (instead of using a monospace font). 724- The editor help now displays code using a slightly different color to be easier to distinguish. 725- The editor help now displays types after parameter names to follow the GDScript static typing syntax. 726- Editor help is now accessed using <kbd>Shift + F1</kbd>, for consistency with other applications. 727 - Contextural help is now accessed using <kbd>Alt + F1</kbd> to accommodate for this change. 728- The script editor's Find in Files dialog is now always available, even when no script is opened. 729- Pressing <kbd>Shift + Enter</kbd> in the script editor Find dialog will now go to the previous match. 730- Improved the node deletion confirmation message. 731 - If there is only one node to delete, its name is displayed in the message. 732 - If there is more than one node to delete, the number of nodes to delete is displayed. 733- Improved the "Snap Object to Floor" functionality in the 3D editor. 734 - An error message is now displayed if no nodes could be snapped. 735 - Increased the maximum snapping height (10 → 20). 736 - Increased the maximum snapping tolerance (0.1 → 0.2). 737- 2D/3D selections, rotations and selected texts are now highlighted with the editor theme's accent color. 738- 3D light gizmos are now tinted using the light's color, making navigation easier while using the unshaded display mode. 739- Improved the 3D light and AudioStreamPlayer3D gizmos to better represent their depth in the 3D world. 740- Tweaked the 3D manipulator gizmo's colors for better visibility. 741- Tweaked the 2D and 3D axis colors for consistency with gizmo colors. 742- Increased the default 3D manipulator gizmo opacity (0.2 → 0.4). 743- The multiline text editor popup dialog's width is now capped on large displays. 744 - This prevents lines from becoming very long, which could hamper text readability. 745- Non-printable escape characters are now stripped when pasting text into a LineEdit. 746- The TextEdit caret color now matches the default font color, making it easier to see. 747- Empty exported NodePath properties now return `null` instead of `self`. 748- Built-in scripts are no longer allowed to use `class_name` as it wasn't working properly. 749- The second parameter of `substr()` is now optional and defaults to `-1`. 750- More editor actions can now have shortcuts assigned (such as Revert Scene or Export). 751- The project export path may now be written in a relative path. 752 - Directories will be created recursively if the target directory doesn't exist. 753- Items in the FileSystem dock can now be deselected by clicking empty space. 754- "Set as Main Scene" context option for scenes in the FileSystem dock. 755- The unused class variable GDScript warning is now disabled by default due to false positives. 756- Warning-ignore comments now allow whitespace after the `#` character. 757- Improved error reporting in the Particles emission point creation dialog. 758- The number of warnings and errors that can be received in the remote debugger is now capped per second rather than per frame. 759 - The default limit is 100 errors and 100 warnings per second, making it possible for the script editor to report up to 100 warnings before having messages hidden. 760- UTF-8 characters are now supported in input action names. 761- All platforms now use the `custom_template` property in each export preset to store the path to the custom export template (instead of `custom_package` for some platforms). 762- Tween methods' `trans_type` and `ease_type` arguments are now optional, defaulting to `TRANS_LINEAR` and `EASE_IN_OUT` respectively. 763- `PCKPacker.pck_start()` and `PCKPacker.flush()`'s `alignment` and `verbose` arguments (respectively) are now optional, defaulting to `0` and `false`. 764- Exported PCK files now contain the Godot patch version in their header. 765 - This can be used by external tools to detect the Godot version more accurately. 766- Exporting a project PCK or ZIP from the command line must now be done with the new `--export-pack` command-line argument. 767 - This was done to remove the ambiguity when exporting a project to macOS from the command line. 768- Updated FreeType to 2.10, which changes how font metrics are calculated. 769 - This may affect the appearance of some Controls, see [this issue](https://github.com/godotengine/godot/issues/28335) for details. 770- The SCons build system now automatically detects the host platform. 771 - `platform=<platform>` is no longer required when compiling for the host platform. 772 - `platform=list` can be used to list the supported target platforms. 773- **Windows:** Drive letters in file paths are now capitalized. 774- **macOS:** <kbd>Control + H</kbd> and <kbd>Control + D</kbd> in TextEdit now delete the character at the left and right of the cursor (respectively). 775- **macOS:** <kbd>Command + Left</kbd> in TextEdit now moves the cursor to the first non-whitespace character. 776- **macOS:** Non-resizable windows are now allowed to enter fullscreen mode. 777- **macOS:** The editor's title bar now uses dark mode on Mojave. 778- **X11:** `OS.set_window_postion()` now takes window decorations into account. 779 780### Removed 781 782- Unused Panel `panelf` and `panelnc` styles. 783- thekla_atlas dependency, as light baking now relies on [xatlas](https://github.com/jpcy/xatlas) for UV unwrapping. 784- Rating icons in the Asset Library, as this feature isn't implemented in the backend. 785- Some editor languages are no longer available due to missing support for RTL and text shaping in Godot: 786 - Affected languages are Arabic, Bengali, Persian, Hebrew, Hindi, Malayalam, Sinhalese, Tamil, Telugu and Urdu. 787 - These languages will be re-added once Godot supports RTL and text shaping. 788- **Android:** ARMv6 support. 789- **iOS:** ARMv7 support. 790 - ARMv7 export templates can still be compiled from source to support the iPhone 5 and older. 791 792### Fixed 793 794- The Project Manager now remembers the sorting option that was previously set. 795- The editor and project manager now have a minimum window size defined. 796 - This prevents controls from overlapping each other by resizing the window to a very small size. 797- Fixed radiance map generation, resulting in improved 3D performance and visual quality. 798- Fixed issues with PBR environment mapping. 799 - Materials should now look closer to what they look like in Substance Designer/Painter. 800- Depth of field now affects transparent objects. 801- Radiance is now generated when using a clear color sky. 802- Contact shadows no longer display when shadow casting is disabled. 803- Larger data types can now be constructed by swizzling in the shader language. 804 - For instance, `vec2 test2 = vec2(0.0, 1.0); vec3 test3 = test2.xxx;` now works as in GLSL. 805- The `AMBIENT_LIGHT_DISABLED` and `SHADOWS_DISABLED` flags now work when using the GLES2 renderer. 806- The Keep background mode now works when using the GLES2 renderer. 807- Several fixes to the GLES2 renderer: 808 - Fixed transparency order. 809 - Fixed vertex lighting being too bright. 810 - Fixed occasional light flickering. 811 - Fixed shadows cast from transparent materials. 812 - Fog is no longer computed on unshaded materials. 813 - This matches the GLES3 renderer's behavior. 814 - GLES2 shader uniforms now use `highp` precision by default. 815 - This prevents linking issues on some Android devices. 816 - Negative OmniLights and SpotLights now work as expected. 817 - The 3D editor's View Information pane now displays statistics correctly when using the GLES2 renderer. 818- Textures compressed with ETC now support transparency by falling back to RGBA4444 or LA8. 819- Alternate display modes are now marked as disabled in the editor when using the GLES2 renderer, as these are only supported when using GLES3. 820- Fixed several inconsistencies between Particles and CPUParticles. 821- Fixed particles scale randomization. 822- Particles are now set to emit correctly when restarting. 823- CheckBox and CheckButton now use the `check_vadjust` custom constant to adjust the icon Y position as intended. 824- Fixed various issues with tab-related icons. 825- Fixed issues in WebM colorspace corrections, resulting in better color output. 826- CSG is now taken into account when generating navigation meshes. 827- Curve2D and Curve3D interpolated values now behave as expected. 828- Numeric slider grabbers in the editor inspector now update when scrolling using the mouse wheel. 829- Scene modifications are no longer lost when renaming a file in the FileSystem dock. 830- "Show in FileSystem" now clears the current search, so that the selected item can be seen immediately. 831- LineEdit and TextEdit's context menus no longer display editing options if they are read-only. 832- SpinBox mouse events are now correctly triggered by its LineEdit part. 833- Per-word navigation in LineEdit and TextEdit now handles UTF-8 characters correctly. 834- LineEdit placeholders, Tabs' names and WindowDialog titles now react correctly to translation changes. 835- Fixed UI navigation when using gamepad analog sticks. 836- Buttons' state is now reset when they exit the scene tree. 837 - This prevents them from lingering in a "hovered" or "pressed" state. 838- Tooltips now disappear when hiding the node they belong to. 839- Encoded packet flags are no longer sent in the ENet multiplayer protocol, as ENet itself already sends that data. 840 - This saves 4 bytes per packet. 841- Audio trimming is now less aggressive, cutting at -50 dB instead of -30 dB. 842- Audio trimming now has a small fade-out period, preventing audible pops. 843- Audio mix rate and output latency settings are now consistently applied on all platforms. 844- Fixed multichannel panning for AudioStreamPlayer3D. 845- Opening a recent built-in script will now load the associated scene automtaically since doing so is required to edit the script. 846- Declaring a class with `class_name` that has the same name as a singleton will now display a clearer error message. 847- `script` is no longer allowed as a member variable name in GDScript, as that conflicts with the internal `script` property used by Object. 848- Assigning a variable with a function index will no longer evaluate the function twice. 849 - For instance, doing `a[function()] += 1` will no longer evaluate `function()` twice. 850 - If the function has side effects, this may change the resulting program behavior. 851- GDScript type checks are now enabled in release export templates. 852- The Label font shadow now draws the font outline as well (if the base font has one). 853- `Font.draw_char()` now draws the font outline as well (if the base font has one). 854- The editor no longer redraws continuously when selecting a Control in a Container. 855- Added some missing feature tags to the Project Settings "Override For..." menu. 856- The `low_processor_mode_sleep_usec` project setting no longer affects the editor. 857- Typed arrays and dictionaries no longer have their values shared across instances. 858- `self` and object types can now be indexed as a dictionary again (like in Godot 3.0 and prior). 859- Fixed `to_lower()` conversion with Cyrillic characters. 860- The Find in Files replace dialog now allows empty replacement texts. 861- The bottom panel no longer disappears when opening the theme editor on small displays. 862- The script editor's color picker now changes only one color if multiple colors are present on the same line. 863- The script editor's line length guideline is now drawn behind text. 864- The script editor's line length guideline is now drawn at the correct position when font hinting is disabled. 865- The script editor now automatically indents a line if the previous one ends with `[` or `(`. 866 - This makes it possible to wrap arrays or function declarations/calls without pressing <kbd>Tab</kbd> every line. 867- Fixed autocompletion in the script editor. 868 - The script editor can now autocomplete enum values. 869 - The script editor can now autocomplete node paths starting with `$"` or `$'`. 870- Custom script editor templates can now use type hints. 871- Shift operators with a number not between 0 and 63 (inclusive) will now result in a compile-time error in GDScript. 872- Warnings no longer count towards the "Too many errors!" message. 873- AnimationTrackEdit now displays invalid value keys again (as it did in 3.0). 874- Fixed the display of function/audio/animation tracks in the blend tree animation filter. 875- The editor shortcuts menu no longer displays all unassigned shortcuts when searching for a substring of "None". 876- The editor's performance monitor now displays memory/file sizes larger than 2 GB correctly. 877- The editor debugger now displays keyboard shortcuts when hovering the "Step Into", "Step Over", "Break" and "Continue" buttons. 878- The editor debugger now always handles connections. 879 - Subsequent connections will be dropped immediately to avoid locking. 880- Large rotation offset/snap values no longer appear to be cut off in the Configure Snap dialog. 881- Documentation tooltips in the editor now wrap to multiple lines correctly. 882- Locked 3D nodes are no longer selectable in the 3D viewport, matching the 2D editor's behavior. 883- All 3D gizmos now notify changes correctly, which means the inspector now displays up-to-date properties after using them. 884- The 3D manipulator gizmo's size is now capped at low viewport heights, preventing it from outgrowing the viewport's bounds. 885- The editor filesystem now refreshes on file changes if the project is located on an exFAT filesystem. 886- Fixed many cases of colors not changing correctly when switching the editor from a dark theme to a light theme (or vice versa) without restarting. 887- The Show in File Manager context menu option now works with files marked as favorite. 888- The random number generator's seed is now properly set up. 889- Antialiased and rounded StyleBoxFlat corners now handle different border widths correctly. 890- The StyleBox preview now accounts for shadows and content margins. 891 - This fixes the preview going out of bounds in the inspector. 892- Text resources no longer contain an extraneous line break at the end of file. 893- Transform's `FLIP_Y` and `FLIP_Z` constants now work as expected. 894- Fixed importing BMP images. 895- The positional command-line argument is now only considered to be a scene path if it ends with `.scn`, `.tscn` or `.escn`. 896 - This makes it possible to parse command-line arguments in a standard fashion (`--foo bar` now works, not just `--foo=bar`). 897 - This also makes it possible to use file associations or drag-and-drop and have the positional argument parsed by the project. 898- The `--audio-driver` and `--video-driver` command-line arguments are now validated; an error message will be printed if an invalid value is passed. 899- The `--check-only` command-line argument now returns a non-zero exit code if an invalid script is passed using `--script`. 900- Exporting a project via the command-line now returns a non-zero exit code if an error occurred during exporting. 901- Console output is no longer colored when standard output isn't a TTY. 902 - This prevents Godot from writing ANSI escape codes when redirecting standard output or standard error to a file. 903- **Android:** Gamepads are now correctly detected when the application starts. 904- **Android:** Fix some keyboards being detected as gamepads and not working as a result. 905- **Android:** The editor now detects if the device is connected using wireless `adb` and will debug using Wi-Fi in this case. 906- **HTML5:** Fixed the pointer position on hiDPI displays. 907- **HTML5:** `OS.get_system_time_msec()` now returns the correct value like on other platforms. 908- **iOS:** On iOS 11 or later, gestures near screen edges are now handled by Godot instead of the OS. 909- **Windows:** Line endings are now converted to CRLF when setting clipboard content. 910- **Windows:** Getting the path to the Downloads directory using `OS.get_system_dir()` now works correctly. 911 - This fixes line endings being invisible when pasting into other applications. 912- **macOS:** `OS.get_real_window_size()` and `OS.set_window_size()` are now handled correctly on hiDPI displays. 913- **X11:** `OS.get_window_position()` now returns absolute coordinates. 914- **X11:** Fixed audio playing on the wrong speakers when using PulseAudio on 5.1 setups. 915- **X11:** `OS.set_window_maximized()` now gives up after 0.5 seconds. 916 - This makes the editor no longer freeze on startup when using fvwm. 917 918## [3.1] - 2019-03-13 919 920### Added 921 922- OpenGL ES 2.0 renderer. 923- [Visual shader editor.](https://godotengine.org/article/visual-shader-editor-back) 924 - New PBR output nodes. 925 - Conversion between Vector3 and scalar types is now automatic. 926 - Ability to create custom nodes via scripting. 927 - Ports can now be previewed. 928- [3D soft body physics.](https://godotengine.org/article/soft-body) 929- [3D ragdoll system.](https://godotengine.org/article/godot-ragdoll-system) 930- [Constructive solid geometry in 3D.](https://godotengine.org/article/godot-gets-csg-support) 931- [2D meshes and skeletal deformation.](https://godotengine.org/article/godot-gets-2d-skeletal-deform) 932- [Various improvements to KinematicBody2D.](https://godotengine.org/article/godot-31-will-get-many-improvements-kinematicbody) 933 - Support for snapping the body to the floor. 934 - Support for RayCast shapes in kinematic bodies. 935 - Support for synchronizing kinematic movement to physics, avoiding an one-frame delay. 936- WebSockets support using [libwebsockets](https://libwebsockets.org/). 937- UPnP support using [MiniUPnP](http://miniupnp.free.fr). 938- [Revamped inspector.](https://godotengine.org/article/godot-gets-new-inspector) 939 - Improved visualization and editing of numeric properties. 940 - Vector and matrix types can now be edited directly (no pop-ups). 941 - Subresources can now be edited directly within the same inspector. 942 - Layer names can now be displayed in the inspector. 943 - Proper editing of arrays and dictionaries. 944 - Ability to reset any property to its default value. 945- [Improved animation editor.](https://godotengine.org/article/godot-gets-brand-new-animation-editor-cinematic-support) 946 - Simpler, less cluttered layout. 947 - New Bezier, Audio and Animation tracks. 948 - Several key types can be previewed directly in the track editor. 949 - Tracks can now be grouped and filtered on a per-node basis. 950 - Copying and pasting tracks between animations is now possible. 951 - New Capture mode to blend from a node's current value to the first key in a track. 952- [Improved animation tree and new state machine.](https://godotengine.org/article/godot-gets-new-animation-tree-state-machine) 953 - More visual feedback in the blend tree editor. 954 - 1D and 2D blend spaces are now supported. 955 - Ability to write custom blending logic. 956 - Support for root motion. 957- [New FileSystem dock.](https://godotengine.org/article/godot-gets-new-filesystem-dock-3-1) 958 - Unified view of folders and files in the same panel. 959 - Files can now be marked as favorites, not only folders. 960 - Files now have icons representing their type, or thumbnail previews when relevant. 961 - New search field to filter entries in the tree. 962- [OpenSimplexNoise and NoiseTexture resources.](https://godotengine.org/article/simplex-noise-lands-godot-31) 963- [Optional static typing in GDScript.](https://godotengine.org/article/optional-typing-gdscript) 964 - Does not currently improve performance, but helps write more robust code. 965- Warning system in GDScript. 966 - Reports potential code issues such as: 967 - unused variables, 968 - standalone expressions, 969 - discarded return values from functions, 970 - unreachable code after a `return` statement, 971 - … 972 - Warnings can be disabled in the Project Settings or by writing special comments. 973- [GDScript keyword `class_name` to register scripts as classes.](https://docs.godotengine.org/en/latest/getting_started/step_by_step/scripting_continued.html#register-scripts-as-classes) 974- Simple expression language independent from GDScript, used by inspector boxes that accept numeric values. 975 - Can also be used in projects. 976- C# projects can now be exported for Windows, Linux, and macOS targets. 977- The `server` platform is back as it was in Godot 2.1. 978 - It is now again possible to run a headless Godot instance on Linux. 979- Support for BPTC texture compression on desktop platforms. 980- New properties for SpatialMaterial. 981 - Dithering-based distance fade, for fading materials without making them transparent. 982 - Disable ambient light on a per-material basis. 983- Option to link Mono statically on Windows. 984- Unified class and reference search in the editor. 985- Revamped TileSet editor with support for undo/redo operations. 986- Various quality-of-life improvements to the Polygon2D and TextureRegion editors. 987- RandomNumberGenerator class that allows for multiple instances at once. 988- Array methods `min()` and `max()` to return the smallest and largest value respectively. 989- Dictionary method `get(key[, default])` where `default` is returned if the key does not exist. 990- Node method `print_tree_pretty()` to print a graphical view of the scene tree. 991- String methods `trim_prefix()`, `trim_suffix()`, `lstrip()`, `rstrip()`. 992- OS methods: 993 - `get_system_time_msecs()`: Return the system time with milliseconds. 994 - `get_audio_driver_name()` and `get_audio_driver_count()` to query audio driver information. 995 - `get_video_driver_count()` and `get_video_driver_name()` to query renderer information. 996 - `center_window()`: Center the window on the screen. 997 - `move_window_to_foreground()`: Move the window to the foreground. 998- StreamPeerTCP method `set_no_delay()` to enable the `TCP_NODELAY` option. 999- EditorPlugin method `remove_control_from_container()`. 1000- Ability to set Godot windows as "always on top". 1001- Ability to create windows with per-pixel transparency. 1002- New GLSL built-in functions in the shader language: 1003 - `radians()` 1004 - `degrees()` 1005 - `asinh()` 1006 - `acosh()` 1007 - `atanh()` 1008 - `exp2()` 1009 - `log2()` 1010 - `roundEven()` 1011- New command-line options: 1012 - `--build-solutions`: Build C# solutions without starting the editor. 1013 - `--print-fps`: Display frames per second to standard output. 1014 - `--quit`: Quit the engine after the first main loop iteration. 1015- Debugger button to copy error messages. 1016- Support for `.escn` scenes has been added for use with the new Blender exporter. 1017- It is now possible to scale an OBJ mesh when importing. 1018- `popup_closed` signal for `ColorPickerButton`. 1019- Methods that are deprecated can now print warnings. 1020- Input actions can now provide an analog value. 1021- Input actions can now be mapped to either a specific device or all devices. 1022- DNS resolution for high-level networking. 1023- Servers can now kick/disconnect peers in high-level networking. 1024- Servers can now access IP and port information of peers in high-level networking. 1025- High-level multiplayer API decoupled from SceneTree (see `SceneTree.multiplayer_api`/`SceneTree.custom_multiplayer_api`), can now be extended. 1026- `Input.set_default_cursor_shape()` to change the default shape in the viewport. 1027- Custom cursors can now be as large as 256×256 (needed to be exactly 32×32 before). 1028- Support for radio-looking items with icon in `PopupMenu`s. 1029- Drag and drop to rearrange Editor docks. 1030- TileSet's `TileMode` is now exposed to GDScript. 1031- `OS.get_ticks_usec()` is now exposed to GDScript. 1032- Normals can now be flipped when generated via `SurfaceTool`. 1033- TextureProgress bars can now be bilinear (extending in both directions). 1034- The character used for masking secrets in LineEdit can now be changed. 1035- Improved DynamicFont: 1036 - DynamicFonts can now use high-quality outlines generated by FreeType. 1037 - DynamicFonts can now have their anti-aliasing disabled. 1038 - DynamicFonts can now have their hinting tweaked ("Normal", "Light" or "None"). 1039 - Colored glyphs such as emoji are now supported. 1040- Universal translation of touch input to mouse input. 1041- AudioStreamPlayer, AudioStreamPlayer2D, and AudioStreamPlayer3D now have a pitch scale property. 1042- Support for MIDI input. 1043- Support for audio capture from microphones. 1044- `GROW_DIRECTION_BOTH` for Controls. 1045- Selected tiles can be moved in the tile map editor. 1046- The editor can now be configured to display the project window on the previous or next monitor (relative to the editor). 1047 - If either end is reached, then the project will start on the last or first monitor (respectively). 1048- Signal in VideoPlayer to notify when the video finished playing. 1049- `Image.bumpmap_to_normalmap()` to convert bump maps to normal maps. 1050- `File.get_path()` and `File.get_path_absolute()`. 1051- Unselected tabs in the editor now have a subtle background for easier identification. 1052- The depth fog's end distance is now configurable independently of the far plane distance. 1053- The alpha component of the fog color can now be used to control fog density. 1054- The 3D editor's information panel now displays the camera's coordinates. 1055- New options to hide the origin and viewport in the 2D editor. 1056- Improved 3D editor grid: 1057 - The grid size and number of subdivisions can now be configured. 1058 - Its primary and secondary colors can now also be changed. 1059- <kbd>Ctrl</kbd> now toggles snapping in the 3D viewport. 1060- Find & replace in files (<kbd>Ctrl + Shift + F</kbd> by default). 1061- Batch node renaming tool (<kbd>Ctrl + F2</kbd> by default). 1062- More editor scaling options to support HiDPI displays. 1063- Type icons can now be enabled in the editor again. 1064- Buttons in the editor to open common directories in the OS file manager: 1065 - project data directory, 1066 - user data directory, 1067 - user settings directory. 1068- Projects can now be sorted by name or modification date in the project manager. 1069- Projects can now be imported from ZIP archives in the project manager. 1070- Improved autocompletion. 1071 - Keywords are now present in autocompletion results. 1072- `editor` and `standalone` feature tags to check whether the project is running from an editor or non-editor binary. 1073- `android_add_asset_dir("...")` method to Android module Gradle build configuration. 1074- **iOS:** Support for exporting to the iPhone X. 1075- **iOS:** Readded support for in-app purchases. 1076 1077### Changed 1078 1079- [Built-in vector types now use copy-on-write mode as originally intended](https://godotengine.org/article/why-we-broke-your-pr), resulting in increased engine performance. 1080- The [mbedtls](https://tls.mbed.org/) library is now used instead of OpenSSL. 1081- [Renamed several core files](https://github.com/godotengine/godot/pull/25821). 1082 - Third-party modules may have to be updated to reflect this. 1083- SSL certificates are now bundled in exported projects unless a custom bundle is specified. 1084- Improved buffer writing performance on Windows and Linux. 1085- Removed many debugging prints in the console. 1086- Export templates now display an error dialog if no project was found when starting. 1087- DynamicFont oversampling is now enabled by default. 1088- Nodes' internal logic now consistently use internal physics processing. 1089- Allow attaching and clearing scripts on multiple nodes at once. 1090- Default values are no longer saved in scene and resource files. 1091- The selection rectangle of 2D nodes is now hidden when not pertinent (no more rectangle for collision shapes). 1092- SSE2 is now enabled in libsquish, resulting in improved S3TC encoding performance. 1093- Tangent and binormal coordinates are now more consistent across mesh types (primitive/imported), resulting in more predictable normal map and depth map appearance. 1094- Better defaults for 3D scenes. 1095 - The default procedural sky now has a more neutral blue tone. 1096 - The default SpatialMaterial now has a roughness value of 1 and metallic value of 0. 1097 - The fallback material now uses the same values as the default SpatialMaterial. 1098- Text editor themes are now sorted alphabetically in the selection dropdown. 1099- The 3D manipulator gizmo now has a smoother, more detailed appearance. 1100- The 3D viewport menu button now has a background to make it easier to read. 1101- QuadMeshes are now built using two triangles (6 vertices) instead of one quad (4 vertices). 1102 - This was done because quads are deprecated in OpenGL. 1103- Controls inside containers are no longer movable or resizable but can still be selected. 1104- The `is` GDScript keyword can now be used to compare a value against built-in types. 1105- Exported variables with type hints are now always initialized. 1106 - For example, `export(int) var a` will be initialized to `0`. 1107- Named enums in GDScript no longer create script constants. 1108 - This means `enum Name { VALUE }` must now be accessed with `Name.VALUE` instead of `VALUE`. 1109- Cyclic references to other scripts with `preload()` are no longer allowed. 1110 - `load()` should be used in at least one of the scripts instead. 1111- `switch`, `case` and `do` are no longer reserved identifiers in GDScript. 1112- Shadowing variables from parent scopes is no longer allowed in GDScript. 1113- Function parameters' default values can no longer depend on other parameters in GDScript. 1114- Indentation guides are now displayed in a more subtle way in the script editor. 1115 - Indentation guides are now displayed when indenting using spaces. 1116- Multi-line strings are now highlighted as strings rather than as comments in the script editor. 1117 - This is because GDScript does not officially support multiline comments. 1118- Increased the script editor's line spacing (4 pixels → 6 pixels). 1119- Increased the caret width in the script editor (1 pixel → 2 pixels). 1120- The project manager window is now resized to match the editor scale. 1121- The asset library now makes use of threading, making loading more responsive. 1122- Line spacing in the script editor, underlines and caret widths are now resized to match the editor scale. 1123- Replaced editor icons for checkboxes and radio buttons with simpler designs. 1124- Tweaked the editor's success, error, and warning text colors for better readability and consistency. 1125- **Android:** Custom permissions are now stored in an array and their amount is no longer limited to 20. 1126 - Custom permissions will have to be redefined in projects imported from older versions. 1127- **Android:** Provide error details when an in-app purchase fails. 1128- **Linux:** `OS.alert()` now uses Zenity or KDialog if available instead of xmessage. 1129- **Mono:** Display stack traces for inner exceptions. 1130- **Mono:** Bundle `mscorlib.dll` with Godot to improve portability. 1131 1132### Removed 1133 1134- Removed the RtAudio backend on Windows in favor of WASAPI, which is the default since 3.0. 1135- **macOS:** Support for 32-bit and fat binaries. 1136 1137### Fixed 1138 1139- [`move_and_slide()` now behaves differently at low velocities](https://github.com/godotengine/godot/issues/21683), which makes it function as originally intended. 1140- AnimatedSprite2D's `animation_finished` signal is now triggered at the end of the animation, instead of as soon as the last frame displays. 1141- Audio buses can now be removed in the editor while they are used by AudioStreamPlayer2D/3D nodes. 1142- Do not show the project manager unless no project was found at all. 1143- The animation editor time offset indicator no longer "walks" when resizing the editor. 1144- Allow creation of a built-in GDScript file even if the filename suggested already exists. 1145- Show tooltips in the editor when physics object picking is disabled. 1146- Button shortcuts can now be triggered by gamepad buttons. 1147- Fix a serialization bug that could cause TSCN files to grow very large. 1148- Gizmos are now properly hidden on scene load if the object they control is hidden. 1149- Camera gizmos in the 3D viewport no longer look twice as wide as they actually are. 1150- Copy/pasting from the editor on X11 will now work more reliably. 1151- `libgcc_s` and `libstdc++` are now linked statically for better Linux binary portability. 1152- The FPS cap set by `force_fps` in the Project Settings is no longer applied to the editor. 1153 - Low FPS caps no longer cause the editor to feel sluggish. 1154- hiDPI is now detected and used if needed in the project manager. 1155- The Visual Studio Code external editor option now recognizes more binary names such as `code-oss`, making detection more reliable. 1156- The `-ffast-math` flag is no longer used when compiling Godot, resulting in increased floating-point determinism. 1157- Fix spelling of `apply_torque_impulse()` and deprecate the misspelled method. 1158- Escape sequences like `\n` and `\t` are now recognized in CSV translation files. 1159- Remove spurious errors when using a PanoramaSky without textures. 1160- The lightmap baker will now use all available cores on Windows. 1161- Bullet physics now correctly calculates effective gravity on KinematicBodies. 1162- Setting the color `v` member now correctly sets the `s` member. 1163- RichTextLabels now correctly determine the baseline for all fonts. 1164- SpinBoxes now correctly calculate their initial size. 1165- OGG streams now correctly signal the end of playback. 1166- Android exporter no longer writes unnecessary permissions to the exported APK. 1167- Debugger "focus stealing" now works more reliably. 1168- Subresources are now always saved when saving a scene. 1169- Many fixes related to importers (glTF, Collada, audio), physics (Bullet), Mono/C#, GDNative, Android/iOS. 1170- **Mono:** Many fixes and improvements to C# support (including a `[Signal]` attribute). 1171- **WebAssembly:** Supply proper CORS headers. 1172 1173### Security 1174 1175- Fixed a security issue relating to deserializing Variants. 1176 1177## [3.0] - 2018-01-29 1178 1179### Added 1180 1181- Physically-based renderer using OpenGL ES 3.0. 1182 - Uses the Disney PBR model, with clearcoat, sheen and anisotropy parameters available. 1183 - Uses a forward renderer, supporting multi-sample anti-aliasing (MSAA). 1184 - Parallax occlusion mapping. 1185 - Reflection probes. 1186 - Screen-space reflections. 1187 - Real-time global illumination using voxel cone tracing (GIProbe). 1188 - Proximity fade and distance fade (useful for creating soft particles and various effects). 1189 - [Lightmapper](https://godotengine.org/article/introducing-new-last-minute-lightmapper) for lower-end desktop and mobile platforms, as an alternative to GIProbe. 1190- New SpatialMaterial resource, replacing FixedMaterial. 1191 - Multiple passes can now be specified (with an optional "grow" property), allowing for effects such as cel shading. 1192- Brand new 3D post-processing system. 1193 - Depth of field (near and far). 1194 - Fog, supporting light transmittance, sun-oriented fog, depth fog and height fog. 1195 - Tonemapping and Auto-exposure. 1196 - Screen-space ambient occlusion. 1197 - Multi-stage glow and bloom, supporting optional bicubic upscaling for better quality. 1198 - Color grading and various adjustments. 1199- Rewritten audio engine from scratch. 1200 - Supports audio routing with arbitrary number of channels, including Area-based audio redirection ([video](https://youtu.be/K2XOBaJ5OQ0)). 1201 - More than a dozen of audio effects included. 1202- Rewritten 3D physics using [Bullet](https://bulletphysics.org/). 1203- UDP-based high-level networking API using [ENet](http://enet.bespin.org/). 1204- IPv6 support for all of the engine's networking APIs. 1205- Visual scripting. 1206- Rewritten import system. 1207 - Assets are now referenced with their source files, then imported in a transparent manner by the engine. 1208 - Imported assets are now cached in a `.import` directory, making distribution and versioning easier. 1209 - Support for ETC2 compression. 1210 - Support for uncompressed Targa (.tga) textures, allowing for faster importing. 1211- Rewritten export system. 1212 - GPU-based texture compression can now be tweaked per-target. 1213 - Support for exporting resource packs to build DLC / content addons. 1214- Improved GDScript. 1215 - Pattern matching using the `match` keyword. 1216 - `$` shorthand for `get_node()`. 1217 - Setters and getters for node properties. 1218 - Underscores in number literals are now allowed for improved readability (for example,`1_000_000`). 1219 - Improved performance (+20% to +40%, based on various benchmarks). 1220- [Feature tags](https://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html) in the Project Settings, for custom per-platform settings. 1221- Full support for the [glTF 2.0](https://www.khronos.org/gltf/) 3D interchange format. 1222- Freelook and fly navigation to the 3D editor. 1223- Built-in editor logging (logging standard output to a file), disabled by default. 1224- Improved, more intuitive file chooser in the editor. 1225- Smoothed out 3D editor zooming, panning and movement. 1226- Toggleable rendering information box in the 3D editor viewport. 1227 - FPS display can also be enabled in the editor viewport. 1228- Ability to render the 3D editor viewport at half resolution to achieve better performance. 1229- GDNative for binding languages like C++ to Godot as dynamic libraries. 1230 - Community bindings for [D](https://github.com/GodotNativeTools/godot-d), [Nim](https://github.com/pragmagic/godot-nim) and [Python](https://github.com/touilleMan/godot-python) are available. 1231- Editor settings and export templates are now versioned, making it easier to use several Godot versions on the same system. 1232- Optional soft shadows for 2D rendering. 1233- HDR sky support. 1234- Ability to toggle V-Sync while the project is running. 1235- Panorama sky support (sphere maps). 1236- Support for WebM videos (VP8/VP9 with Vorbis/Opus). 1237- Exporting to HTML5 using WebAssembly. 1238- C# support using Mono. 1239 - The Mono module is disabled by default, and needs to be compiled in at build-time. 1240 - The latest Mono version (5.4) can be used, fully supporting C# 7.0. 1241- Support for rasterizing SVG to images on-the-fly, using the nanosvg library. 1242 - Editor icons are now in SVG format, making them better-looking at non-integer scales. 1243 - Due to the library used, only simpler SVGs are well-supported, more complex SVGs may not render correctly. 1244- Support for oversampling DynamicFonts, keeping them sharp when scaled to high resolutions. 1245- Improved StyleBoxFlat. 1246 - Border widths can now be set per-corner. 1247 - Support for anti-aliased rounded and beveled corners. 1248 - Support for soft drop shadows. 1249- VeryLoDPI (75%) and MiDPI (150%) scaling modes for the editor. 1250- Improved internationalization support for projects. 1251 - Language changes are now effective without reloading the current scene. 1252- Implemented missing features in the HTML5 platform. 1253 - Cursor style changes. 1254 - Cursor capturing and hiding. 1255- Improved styling and presentation of HTML5 exports. 1256 - A spinner is now displayed during loading. 1257- Rewritten the 2D and 3D particle systems. 1258 - Particles are now GPU-based, allowing their use in much higher quantities than before. 1259 - Meshes can now be used as particles. 1260 - Particles can now be emitted from a mesh's shape. 1261 - Properties can now be modified over time using an editable curve. 1262 - Custom particle shaders can now be used. 1263- New editor theme, with customizable base color, highlight color and contrast. 1264 - A light editor theme option is now available, with icons suited to light backgrounds. 1265 - Alternative dark gray and Arc colors are available out of the box. 1266- New adaptive text editor theme, adjusting automatically based on the editor colors. 1267- Support for macOS trackpad gestures in the editor. 1268- Exporting to macOS now creates a `.dmg` disk image if exporting from an editor running on macOS. 1269 - Signing the macOS export now is possible if running macOS (requires a valid code signing certificate). 1270- Exporting to Windows now changes the exported project's icon using `rcedit` (requires WINE if exporting from Linux or macOS). 1271- Improved build system. 1272 - Support for compiling using Visual Studio 2017. 1273 - [SCons](https://scons.org/) 3.0 and Python 3 are now supported (SCons 2.5 and Python 2.7 still work). 1274 - Link-time optimization can now be enabled by passing `use_lto=yes` to the SCons command line. 1275 - Produces faster and sometimes smaller binaries. 1276 - Currently only supported with GCC and MSVC. 1277 - Added a progress percentage when compiling Godot. 1278 - `.zip` archives are automatically created when compiling HTML5 export templates. 1279- Easier and more powerful way to create editor plugins with EditorPlugin and related APIs. 1280 1281### Changed 1282 1283- Increased the default low-processor-usage mode FPS limit (60 → 125). 1284 - This makes the editor smoother and more responsive. 1285- Increased the default 3D editor camera's field of view (55 → 70). 1286- Increased the default 3D Camera node's field of view (65 → 70). 1287- Changed the default editor font (Droid Sans → [Noto Sans](https://www.google.com/get/noto/)). 1288- Changed the default script editor font (Source Code Pro → [Hack](https://sourcefoundry.org/hack/)) 1289- Renamed `engine.cfg` to `project.godot`. 1290 - This allows users to open a project by double-clicking the file if Godot is associated to `.godot` files. 1291- Some methods from the `OS` singleton were moved to the new `Engine` singleton. 1292- Switched from [GLEW](http://glew.sourceforge.net/) to [GLAD](https://glad.dav1d.de/) for OpenGL wrapping. 1293- Changed the SCons build flag for simple logs (`colored=yes` → `verbose=no`). 1294- The HTML5 platform now uses WebGL 2.0 (instead of 1.0). 1295- Redesigned the Godot logo to be more legible at small sizes. 1296 1297### Deprecated 1298 1299- `opacity` and `self_opacity` are replaced by `modulate` and `self_modulate` in all 2D nodes, allowing for full color changes in addition to opacity changes. 1300 1301### Removed 1302 1303- Skybox support. 1304 - Replaced with panorama skies, which are easier to import. 1305- Opus audio codec support. 1306 - This is due to the way the new audio engine is designed. 1307- HTML5 export using asm.js. 1308 - Only WebAssembly is supported now, since all browsers supporting WebGL 2.0 also support WebAssembly. 1309 1310[Unreleased]: https://github.com/godotengine/godot/compare/3.2-stable...HEAD 1311[3.2]: https://github.com/godotengine/godot/compare/3.1-stable...3.2-stable 1312[3.1]: https://github.com/godotengine/godot/compare/3.0-stable...3.1-stable 1313[3.0]: https://github.com/godotengine/godot/compare/2.1-stable...3.0-stable 1314