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