Godot v3.2 Release Notes

Release Date: 2020-01-29 // about 4 years ago
  • โž• Added

    • ๐Ÿ‘Œ Support for pseudo-3D depth in 2D.
    • ๐Ÿ‘Œ Support for importing 3D scenes using Assimp.
      • Many formats are supported, including FBX.
    • ๐Ÿ‘ Support for generating audio procedurally and analyzing audio spectrums.
    • ๐Ÿ‘ WebRTC support.
      • Includes support for the high-level multiplayer API.
      • Supports NAT traversal using STUN or TURN.
    • ๐Ÿ‘Œ Support for automatically building Android templates before exporting.
      • This makes 3rd-party SDK integration easier.
    • ๐Ÿ‘Œ Support for texture atlases in 2D.
    • โšก๏ธ Major improvements to the visual shader system. (News post 1, News post 2)
      • Redesigned visual shader editor with drag-and-drop capability.
      • Textures can be dragged from the FileSystem dock to be added as nodes.
      • Most functions available in GLSL are now exposed.
      • Many constants such as Pi or Tau can now be used directly.
      • Support for boolean uniforms and sampler inputs.
      • New Sampler port type.
      • New conditional nodes.
      • New Expression node, allowing shader code to be written in visual shaders.
      • Support for plugins (custom nodes).
      • Custom nodes can be drag-and-dropped from the FileSystem dock.
      • Ability to copy and paste nodes.
      • Ability to delete multiple nodes at once by pressing Delete.
      • The node creation menu is now displayed when dragging a connection to an empty space on the graph.
      • GLES3-only functions are now distinguished from others in the creation dialog.
      • Ability to preview the code generated by the visual shader.
      • Ability to convert visual shaders to text-based shaders.
      • See the complete list of new functions.
    • ๐Ÿ‘Œ Improved visual scripting.
      • Visual scripting now uses an unified graph where all functions are represented.
      • Nodes can now be edited directly in the graph.
      • Support for fuzzy searching.
      • The tool mode can now be enabled in visual scripts.
      • New Deconstruct node to deconstruct a complex value into a scalar value.
      • Miscellaneous UI improvements.
    • ๐Ÿ‘Œ Support for enabling/disabling parts of the editor or specific nodes.
      • This is helpful for education, or when working with artists to help prevent inadvertent changes.
    • Language server for GDScript.
      • This can be used to get better integration with external editors.
    • ๐Ÿ”– Version control integration in the editor.
      • This integration is VCS-agnostic (GDNative plugins provide specific VCS support).
    • ๐Ÿ‘Œ Improved GridMap editor.
      • The copied mesh is now displayed during pasting.
      • The duplication/paste indicator is now rotated correctly around the pivot point.
      • Ability to cancel paste and selection by pressing Escape.
      • Erasing is now done using RMB instead of Shift + RMB.
      • Freelook can still be accessed by pressing Shift + F.
    • ๐Ÿ‘Œ Improved MeshLibrary generation.
      • When appending to an existing MeshLibrary, previews are now only generated for newly-added or modified meshes.
      • Tweaked the previews' camera angle and light directions for better results.
      • Materials assigned to the MeshInstance instead of the Mesh are now exported to the MeshLibrary.
      • This is useful when exporting meshes from an imported scene (such as glTF), as it allows materials to persist across re-imports.
    • Improved Control anchor and margin workflow.
    • Network profiler.
    • ๐Ÿ‘Œ Improved NavigationMesh generation.
      • GridMaps can now be used to bake navigation meshes.
      • EditorNavigationMeshGenerator can now be used in tool scripts.
      • Support for generating navigation meshes from static colliders.
      • When using static colliders as a geometry source, a layer mask can be specified to ignore certain colliders.
      • The generator no longer relies on the global transform, making it possible to generate navmeshes on nodes that are not in the scene tree.
      • Navigation gizmos are now updated after every new bake.
    • ๐Ÿ‘Œ Support for skinning in 3D skeletons.
    • CameraServer singleton to retrieve images from mobile cameras or webcams as textures.
    • A crosshair is now displayed when using freelook in the 3D editor.
    • Project camera override button at the top of the 2D and 3D editors.
      • When enabled, the editor viewport's camera will be replicated in the running project.
    • RichTextLabel can now be extended with real-time effects and custom BBCodes.
      • Effects are implemented using the ItemFX resource.
    • [img=<width>x<height>] tag to resize an image displayed in a RichTextLabel.
      • If <width> or <height> is 0, the image will be adjusted to keep its original aspect.
    • Revamped node connection dialog for improved ease of use.
    • ๐Ÿšฆ The Signals dock now displays a signal's description in a tooltip when hovering it.
    • Input actions can now be reordered by dragging them.
    • Animation frames can now be reordered by dragging them.
    • Ruler tool to measure distances and angles in the 2D editor.
    • ๐Ÿšš "Clear Guides" menu option in the 2D editor to remove all guides.
    • The 2D editor grid now displays a "primary" line every 8 lines for easier measurements.
      • This value can be adjusted in the Configure Snap dialog.
    • Projects can now have a description set in the Project Settings.
      • This description is displayed as a tooltip when hovering the project in the Project Manager.
    • All Variant types can now be added as project settings using the editor (instead of just bool, int, float and String).
    • Pressing Ctrl + F now focuses the search field in the Project Settings and Editor Settings.
    • Quick Open dialog (Shift + Alt + O) to open any resource in the project.
      • Unlike the existing dialogs, it's not limited to scenes or scripts.
    • Ability to convert a Sprite to a Mesh2D, Polygon2D, CollisionPolygon2D or LightOccluder2D.
    • MultiMeshInstance2D node for using MultiMesh in 2D.
    • PointMesh primitive.
      • Drawn as a rectangle with a constant size on screen, which is cheaper compared to using triangle-based billboards.
    • 2D polygon boolean operations and Delaunay triangulation are now available in the Geometry singleton.
    • ๐Ÿ‘ New convex decomposition using the V-HACD library.
      • Can decompose meshes into multiple convex shapes for increased accuracy.
    • ๐Ÿ‘Œ Support for grouping nodes in the 3D editor.
    • "Slow" modifier in freelook (accessed by holding Alt).
    • The 2D editor panning limits can now be disabled in the Editor Settings.
    • "Undo Close Tab" option in the scene tabs context menu.
    • The editor is now capped to 20 FPS when the window is unfocused.
      • This decreases CPU/GPU usage if something causes the editor to redraw continuously (such as particles).
    • The editor's FPS cap can now be adjusted in the Editor Settings (both when focused and unfocused).
    • ๐Ÿ”– Version information is now displayed at the bottom of the editor.
      • This is intended to make the Godot version easily visible in video tutorials.
    • ๐Ÿ‘Œ Support for constants in the shader language.
    • ๐Ÿ‘Œ Support for local and varying arrays in the shader language.
    • ๐Ÿ‘Œ Support for switch statements in the shader language.
    • ๐Ÿ‘Œ Support for do {...} while (...) loops in the shader language.
      • Unlike while, the expression in the do block will always be run at least once.
    • ๐Ÿ‘Œ Support for hexadecimal number literals in the shader language.
    • Ported several GLES3 shader functions such as round() to GLES2.
    • SHADOW_VEC shader parameter to alter 2D shadow computations in custom shaders.
    • Filter search box in the remote scene tree dock.
    • Ability to expand/collapse nodes recursively in the scene tree dock by holding Shift and clicking on a folding arrow.
    • ๐Ÿ‘Œ Support for depth of field, glow and BCS in the GLES2 renderer.
    • ๐Ÿ‘ MSAA support in the GLES2 renderer.
    • Ability to render viewports directly to the screen in the GLES2 renderer.
      • This can be faster on low-end devices, but it comes at a convenience cost.
    • Project settings to set the maximum number of lights and reflections in the GLES3 renderer.
      • Decreasing these values can lead to faster shader compilations, resulting in lower loading times.
    • Heightmap collision shape for efficient terrain collisions.
    • AStar2D class, making A* use easier in 2D.
    • Disabled collision shapes can now be added directly, without having to disable them manually after one step.
    • Context menu options to close other scene tabs, scene tabs to the right, or all scene tabs.
    • The audio bus volumes can now be snapped by holding Ctrl while dragging the slider.
    • Hovering an audio bus' volume slider now displays its volume in a tooltip.
    • Values in the Gradient and Curve editors can now be snapped by holding Ctrl.
      • Precise snapping can be obtained by holding Shift as well.
    • ๐Ÿ‘Œ Support for snapping when scaling nodes in the 2D editor.
    • Precise snapping in the 3D editor when holding Shift.
    • "Align Rotation with View" in the 3D editor.
      • Unlike "Align Transform with View", only the selected node's rotation will be modified.
      • "Align Selection with View" has been renamed to "Align Transform with View".
    • All 3D gizmos now make use of snapping if enabled.
    • CSG shapes are now highlighted with a translucent overlay when selected.
      • Shapes in Union mode will use a blue overlay color by default.
      • Shapes in Subtraction mode will use an orange overlay color by default.
      • Shapes in Intersection mode will use a white overlay color.
    • ๐Ÿšš Ability to move a vertex along a single axis when holding Shift in polygon editors.
    • ๐Ÿ‘Œ Support for binary literals in GDScript (e.g. 0b101010 for 42).
    • AutoLoads can now be used as a type in GDScript.
    • Ability to define script templates on a per-project basis.
      • 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#).
      • The path to the script templates directory can be changed in the Project Settings.
    • Ability to limit the minimum and maximum window size using OS.set_min_window_size() and OS.set_max_window_size().
    • Node.process_priority property to set or get a node's processing priority.
      • This was previously only available as Node.set_process_priority() (without an associated getter).
    • ๐Ÿ“š Node.editor_description property for documentation purposes.
      • When hovering a node with a description in the scene tree dock, the description will be displayed in a tooltip.
    • Button.keep_pressed_outside property to keep a button pressed when moving the pointer outside while pressed.
    • Button.expand_icon property to make a button's icon expand/shrink with the button's size.
    • Popup.set_as_minsize() method to shrink a popup to its minimum size.
    • Tree.get_icon_modulate() and Tree.set_icon_modulate() methods to change an icon's color in a Tree.
    • Tree.call_recursive() method to call a method on a TreeItem and its children recursively.
    • Light.use_gi_probe property to exclude specific lights from GIProbe computations.
    • TranslationServer method get_loaded_locales() to retrieve the list of languages with a translation loaded.
    • FRUSTUM 3D camera mode to create tilted frustums for mirror or portal effects.
    • CanvasItem.draw_rect() now has width and antialiased properties to match draw_line()'s functionality.
    • Engine.get_idle_frames() and Engine.get_physics_frames() to get the number of idle and physics frame iterations since the project started.
      • Unlike Engine.get_frames_drawn(), Engine.get_idle_frames() will be incremented even if the render loop is disabled.
    • Engine.get_physics_interpolation_fraction() to get the fraction through the current physics tick at the time of the current frame.
      • This can be used to implement fixed timestep interpolation.
    • ๐Ÿ‘Œ Support for shadow-to-opacity in 3D to render shadows in augmented reality contexts.
    • Ability to change a Position2D gizmo's size.
    • ๐Ÿ†• New Vector2 and Vector3 methods:
      • move_toward() to retrieve a vector moved towards another by a specified number of units.
      • direction_to() to retrieve a normalized vector pointing from a vector to another.
      • This is a shorter alternative to (b - a).normalized().
    • AStar functions set_point_disabled() and is_point_disabled() to selectively disable points.
    • Tween now emits a tween_all_completed signal when all tweens are completed.
    • Input.get_current_cursor_shape() to retrieve the current cursor shape.
    • InputEventAction now has a strength property to simulate analog inputs.
    • String.repeat() method to repeat a string several times and return it.
    • String.count() method to count the number of occurrences of a substring in a string.
    • String.humanize_size() method to display a file size as an human-readable string.
    • ๐Ÿ–จ String.strip_escapes() to strip non-printable escape characters from a string, including tabulations and newlines (but not spaces).
    • String.sha1_text() and String.sha1_buffer() methods to return a string's SHA-1 hash.
    • Line2D clear_points() method to clear all points.
    • Line2D now has a "Width Curve" property to make its width vary at different points.
    • assert() now accepts an optional second parameter to display a custom message when the assertion fails.
    • posmod() built-in GDScript function that behaves like fposmod(), but returns an integer value.
    • smoothstep() built-in GDScript function for smooth easing of values.
    • lerp_angle() built-in GDScript function to interpolate between two angles.
    • ord() built-in GDScript function to return the Unicode code point of an 1-character string.
    • PoolByteArray.hex_encode() method to get a string of hexadecimal numbers.
    • Font.get_wordwrap_string_size() method to return the rectangle size needed to draw a word-wrapped text.
    • Camera.get_camera_rid() method to retrieve a Camera's RID.
    • Array.slice() method to duplicate a subset of an Array and return it.
    • The GraphEdit box selection colors can now be changed by tweaking the selection_fill and selection_stroke theme items.
    • Toggleable HSV mode for ColorPicker.
    • ColorPicker properties to toggle the visibility and editability of presets.
    • 0๏ธโƒฃ The default ColorPicker mode (RGB, HSV, RAW) can now be changed in the Editor Settings.
    • ColorPicker now displays an indicator to denote "overbright" colors (which can't be displayed as-is in the preview).
    • Hovering a Color property in the editor inspector now displays a tooltip with the exact values.
    • Color.transparent constant (equivalent to Color(1, 1, 1, 0)).
    • KinematicBody.get_floor_normal() and KinematicBody2D.get_floor_normal() to retrieve the collided floor's normal.
    • VehicleWheel.get_rpm() method to retrieve a vehicle wheel's rotations per minute.
    • Per-wheel throttle, brake and steering in VehicleBody.
    • GeometryInstance.set_custom_aabb() to set a custom bounding box (used for view frustum culling).
    • FuncRef.call_funcv() to call a FuncRef with an array containing arguments.
      • In contrast to FuncRef.call_func(), only a single array argument is expected.
    • Mesh.get_aabb() is now exposed to scripting.
    • PhysicalBone.apply_impulse() and PhysicalBone.apply_central_impulse() methods to push ragdolls around.
    • 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.
    • SpinBox.apply() method to evaluate and apply the expression in the SpinBox's value immediately.
    • ConfigFile.erase_section_key() method to remove a single key from a ConfigFile.
    • OS.execute() now returns the process' exit code when blocking mode is enabled.
    • OS.is_window_focused() method that returns true if the window is currently focused.
      • Tracking the focus state manually using NOTIFICATION_WM_FOCUS_IN and NOTIFICATION_WM_FOCUS_OUT is no longer needed to achieve this.
    • ๐Ÿ–จ OS.low_processor_mode_sleep_usec is now exposed as a property.
      • This makes it possible to change its value at runtime, rather than just defining it once in the Project Settings.
    • SceneTree.quit() now accepts an optional argument with an exit code.
      • If set to a value greater than or equal to 0, it will override the OS.exit_code property.
    • VisualServer.get_video_adapter_name() and VisualServer.get_video_adapter_vendor() methods to retrieve the user's graphics card model and vendor.
    • VisualServer.multimesh_create() is now exposed to scripting.
    • Ability to override how scripted objects are converted to strings by defining a _to_string() method.
    • Export hints for 2D and 3D physics/render layers.
    • ๐Ÿ”Œ Editor plugins can now add new tabs to the Project Settings.
    • โš  Standalone ternary expression warning in GDScript.
    • โš  Variable shadowing warning in GDScript.
      • Will be displayed if:
      • a block variable shadows a member variable,
      • a subclass variable shadows a member variable,
      • a function argument shadows a member variable.
    • Script reflection methods are now exposed to GDScript.
      • 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().
    • randfn(mean, deviation) method to generate random numbers following a normal Gaussian distribution.
    • 0๏ธโƒฃ Ability to read the standard error stream when using OS.execute() (disabled by default).
    • Option to disable boot splash filtering (nearest-neighbor interpolation).
    • The GridMap editor now offers a search field and size slider.
    • DynamicFont resources now have a thumbnail in the editor.
    • Minimap in the script editor.
    • Bookmarks in the script editor for easier code navigation.
    • Filter search box for the script list and member list.
    • Singletons and class_name-declared classes are now highlighted with a separate color in the script editor.
    • 0๏ธโƒฃ The editor help now displays class properties' default and overridden values.
    • 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).
    • The script editor search now displays the number of matches.
    • The script editor search now selects the current match for easier replacing.
    • "Evaluate Expression" contextual option in the script editor.
      • This option evaluates the selected expression and replaces it (e.g. 2 + 2 becomes 4).
    • ๐Ÿ‘ Autocompletion support for change_scene().
    • Ability to skip breakpoints while debugging.
    • ๐Ÿ‘ Drag-and-drop support in the TileSet editor.
    • Ability to attach scripts to nodes by dragging a name from the script list to a node in the scene tree.
    • Icons are now displayed next to code completion items, making their type easier to distinguish.
    • 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.
    • "Ignore" flag to ignore specific tiles when autotiling in the TileMap editor.
    • Keyboard shortcuts to rotate tiles in the TileMap editor.
      • Default shortcuts are A (rotate left), S (rotate right), X (flip horizontally), Y (flip vertically).
    • Ability to keep a node's local transform when reparenting it by holding Shift.
    • Basis constants IDENTITY, FLIP_X, FLIP_Y, FLIP_Z.
    • Ability to create sprite frames in AnimatedSprite from a sprite sheet.
    • frame_coords property in Sprite and Sprite3D to set/get the coordinates of the frame to display from the sprite sheet.
    • billboard property in Sprite3D.
    • ๐Ÿ‘ Reimplemented support for editing multiple keys at once in the animation editor.
    • ๐Ÿ‘Œ Support for FPS snapping in the Animation editor.
    • Autokeying in the Animation editor.
      • Keyframes will be created automatically when translating, rotating or scaling nodes if a track exists already.
      • Keys must be inserted manually for the first time.
    • AnimationNodeBlendTreeEditor improvements.
      • Ability to exclude multiple selected nodes at once.
      • Context menu to add new nodes (activated by right-clicking).
    • ๐Ÿ”ง The AnimationPlayer Call Method mode is now configurable.
      • Method calls can be "deferred" or "immediate", "deferred" being the default.
    • OccluderPolygon2D is now draggable in the editor.
    • ๐Ÿ”ง The tooltip position offset is now configurable.
    • 0๏ธโƒฃ The default cursor used when hovering RichTextLabels can now be changed.
    • "Dialog Autowrap" property in AcceptDialog to wrap the label's text automatically.
    • The 2D editor's panning shortcut can now be changed.
    • The shortcuts to quit the editor can now be changed.
    • ๐Ÿ‘Œ Support for emission masks in CPUParticles2D.
    • direction property in CPUParticles and ParticlesMaterial.
    • lifetime_randomness property in CPUParticles and ParticlesMaterial.
    • CPUParticles now uses a different gizmo icon to distinguish them from Particles.
    • "Restart" button to restart particle emission in the editor.
    • AnimatedSprites' animations can now be played backwards.
    • TextureRects can now have their texture flipped horizontally or vertically.
    • ๐Ÿ’… StyleBoxFlat shadows can now have an offset.
    • ๐Ÿ’… StyleBoxFlat now computes UV coordinates for its canvas_item vertices, which can be used in custom shaders.
    • Profiler data can now be exported to a CSV file.
    • The 2D polygon editor now displays vertex numbers when hovering vertices.
    • RectangleShapes now have a third handle to drag both axes at once.
    • Global class resources are now displayed in the Resource property inspector.
    • Double-clicking an easing property in the inspector will now make the editor display a numeric field.
      • This makes it easier to enter precise values for properties such as light attenuation.
    • interface/editor/default_float_step editor setting to configure floating-point values' default step in the Inspector.
    • Audio buses are now stylized to look like boxes that can be dragged.
    • 0๏ธโƒฃ The default audio bus layout file path can now be changed in the Project Settings.
    • The LineEdit and TextEdit controls now display their contextual menu when pressing the Menu key.
    • shortcut_keys_enabled and selecting_enabled LineEdit and TextEdit properties to disable keyboard shortcuts and selecting text.
    • The LineEdit "disabled" font color can now be changed.
    • The TextEdit "readonly" font color can now be changed.
    • LineEdit can now have its right_icon set in scripts.
    • The nine_patch_stretch TextureProgress property now enables stretching when using a radial fill mode.
    • ๐Ÿ‘Œ Support for loading and saving encrypted files in ConfigFile.
    • get_path() and get_path_absolute() are now implemented in FileAccessEncrypted.
    • "Disabled" attenuation model for AudioStreamPlayer3D, making the sound not fade with distance while keeping it positional.
    • AudioEffectPitchShift's FFT size and oversampling are now adjustable.
    • TextEdit's tab drawing and folding is now exposed to GDScript.
    • ๐ŸŽ Orphan node monitor in the Performance singleton.
      • Counts the number of nodes that were created but aren't instanced in the scene tree.
    • Ability to change eye height in VR.
    • ๐ŸŒ CSV files can now be imported as non-translation files.
    • Scene resources such as materials can now be imported as .tres files.
    • ๐Ÿ‘Œ Support for importing 1-bit, 4-bit and 8-bit BMP files.
      • Size dimensions must be a multiple of 8 for 1-bit images and 2 for 4-bit images.
    • ๐Ÿง use_lld=yes flag to link with LLD on Linux when compiling with Clang.
      • This results in faster iteration times when developing Godot itself or modules.
    • ๐Ÿ“„ use_thinlto=yes flag to link with ThinLTO when using Clang.
    • ๐Ÿ‘ Multicast support in PacketPeerUDP.
    • NetworkedMultiplayerEnet.server_relay property to disable server relaying.
      • This can be used to increase security when building a fully-authoritative server.
    • 0๏ธโƒฃ Automatic timeout for TCP connections (defaults to 30 seconds, can be changed in the Project Settings).
    • 0๏ธโƒฃ HTTPRequest.timeout property (defaults to 0, which is disabled).
    • HTTPRequest.download_chunk_size property.
      • This value can be adjusted to reduce the allocation overhead and file writes when downloading large files.
      • The default value was increased for faster downloads (4 KB โ†’ 64 KB).
    • WebSocket improvements.
      • Support for SSL in WebSocketServer.
      • WebSocketClient can now use custom SSL certificates (except on HTML5).
      • WebSocketClient can now define custom headers.
    • โœ… The editor now features a built-in Web server for testing HTML5 projects.
    • ๐Ÿšš Button to remove all missing projects in the Project Manager.
    • ๐Ÿ‘ Reimplemented support for embedding project data in the PCK file.
    • Ability to take editor screenshots by pressing Ctrl + F12.
    • ๐Ÿ”Œ Editor plugins can now set the current active editor as well as toggle the distraction-free mode.
    • Android: Support for adaptive icons.
      • All icon densities are now generated automatically by the exporter.
      • Only 3 images now need to be supplied to support all icon formats and densities (legacy icon, adaptive foreground, adaptive background).
    • Android: Support for the Oculus Mobile SDK.
    • Android: Support for requesting permissions at runtime.
    • Android: NOTIFICATION_APP_PAUSED and NOTIFICATION_APP_RESUMED notifications are now emitted when the app is paused and resumed.
    • Android: Support for pen input devices.
    • Android/iOS: Support for vibrating the device.
    • HTML5: Partial clipboard support.
    • iOS: Support for ARKit.
    • iOS: OS.get_model_name() now returns a value with the device name.
    • iOS: The Home indicator is now hidden by default to avoid being in the way of the running project.
      • It can be restored in the Project Settings.
    • ๐Ÿ Windows: Ability to toggle the console window in the Editor Settings.
    • ๐Ÿ Windows: Project setting to enable Vsync using the compositor (DWM), disabled by default.
      • On some hardware, this may fix stuttering issues when running a project in windowed mode.
    • ๐Ÿ Windows: Support for code signing using signtool on Windows and osslsigncode on other platforms.
    • ๐Ÿ Windows: Support for using Clang and ThinLTO when compiling using MinGW.
    • ๐ŸŽ Windows/macOS: OS.set_native_icon() method to set an .ico or .icns window/taskbar icon at runtime.
    • ๐ŸŽ Windows/macOS/X11: Support for graphic tablet pen pressure and tilt in InputEventMouseMotion.
    • ๐ŸŽ macOS: LineEdit now supports keyboard shortcuts commonly available on macOS.
    • ๐ŸŽ macOS: Multiple instances of the editor can now be opened at once.
    • ๐ŸŽ macOS: Recent and favorite projects are now listed in the project manager dock menu.
    • ๐ŸŽ macOS: The list of open scenes is now displayed in the editor dock menu.
    • ๐ŸŽ macOS: Support for modifying global and dock menus.
    • ๐ŸŽ macOS: Improved support for code signing when exporting projects.
    • ๐ŸŽ macOS: Support for defining camera and microphone usage descriptions when exporting a project.
    • ๐ŸŽ macOS/X11: A zsh completion file for the editor is now available.
    • X11: The instance PID is now set as the _NET_WM_PID window attribute, so that external programs can easily access it.
    • Mono: Support for exporting to Android and HTML5.
    • Mono: Support for using Rider as an external editor.
    • Mono: Support for attaching external profilers like dotTrace using the MONO_ENV_OPTIONS environment variable.
    • Mono: New DynamicGodotObject class to access dynamic properties from scripts written in GDScript.
    • Mono: Support for resource type hints in exported arrays.
    • Mono: New mono/unhandled_exception_policy project setting to keep running after an unhandled exception.
    • Mono: New Godot constants to conditionally react to system variables at compile-time.
    • Mono: Support for Visual Studio 2019's MSBuild.

    ๐Ÿ”„ Changed

    • Tween and Timer now display an error message if they are started without being added to the scene tree first.
    • ๐Ÿ‘‰ Tweaked Timer's wait time property hint to allow values with 3 decimals and above 4096.
    • ๐Ÿšฆ Functions called from a signal can no longer disconnect the node from the signal they're connected to (unless using call_deferred()).
    • Tabs and space indentation can no longer be mixed in the same GDScript file.
      • Each file must now use only tabs or spaces for indentation (not both).
    • assert() in GDScript must now always be used with parentheses.
      • assert(true) is still valid, but assert true isn't valid anymore.
      • This is to account for the optional second parameter that defines a custom message.
    • 0๏ธโƒฃ The "Trim" and "Normalize" WAV import options are now disabled by default.
      • This makes the default behavior more consistent with Ogg import.
    • Ogg samples now have an icon in the editor, like WAV samples.
    • 0๏ธโƒฃ Camera2D drag margins are now disabled by default.
      • If porting a project from Godot 3.1 where drag margins were used, these must be enabled manually again.
    • The Camera2D Offset property now ignores the Limit property.
      • To get the old behavior back, move the camera itself instead of changing the offset.
    • Camera.project_position() now requires a second depth argument to determine the distance of the point from the camera.
      • To get the old behavior back, pass the Camera's near property value as the second argument.
    • Skeleton.set_bone_global_pose() was replaced by Skeleton.set_bone_global_pose_override().
    • UDP broadcasting is now disabled by default and must be enabled by calling set_broadcast_enabled(true) on the PacketPeerUDP instance.
    • The editor and project manager now open slightly faster.
    • ๐Ÿ‘Œ Improved the Project Manager user interface.
      • New, simpler design with more space available for the project list.
      • Improved reporting of missing projects.
      • The search field is now focused when starting the Project Manager if there is at least one project in the list.
      • The search field now searches in both the project name and path.
      • 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.
    • ๐Ÿ”จ Refactored the Project Manager to be more efficient, especially with large project lists.
    • Images in the Project Manager and Asset Library are now resized with Lanczos filtering for a smoother appearance.
    • 0๏ธโƒฃ The editor now uses the font hinting algorithm that best matches the OS' default.
      • Hinting is set to "None" on macOS, and set to "Light" on Windows and Linux.
      • This can be changed in the Editor Settings.
    • The editor window dimming when a popup appears is now less intense (60% โ†’ 50%).
      • The animation was also removed as it made the editor feel sluggish at lower FPS.
    • Several editor menus have been reorganized for consistency and conciseness.
    • ๐Ÿ‘ Undo/Redo now supports more actions throughout the editor.
    • Increased the height of the ItemList editor popup.
      • This makes it easier to edit large amounts of items.
    • Opening a folder in FileDialog will now scroll back to the top.
    • 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.
      • Folder icons in editor file dialogs are now tinted with the accent color.
    • ๐Ÿ‘Œ Improved colors in the light editor theme for better readability and consistency.
    • ๐Ÿ‘Œ Improved A* performance significantly by using a binary heap and OAHashMap.
    • ๐Ÿ‘‰ Tweaked the AABB transform algorithm to be ~1.2 times faster.
    • โšก๏ธ Optimized the variant reference function, making complex scripts slightly faster.
    • 0๏ธโƒฃ Disabled high-quality voxel cone tracing by default.
      • This makes GIProbe much faster out of the box, at the cost of less realistic reflections.
    • 0๏ธโƒฃ Lowered the default maximum directional shadow distance (200 โ†’ 100).
      • This makes directional shadow rendering consistent between the editor and running project when using the default Camera node settings.
    • 0๏ธโƒฃ Tweaked the default depth fog maximum distance to be independent of the Camera's far value (0..100).
      • This makes fog display consistent between the editor and a running project.
    • 0๏ธโƒฃ Tweaked the default height fog values to be more logical (0..100 โ†’ 10..0).
      • This means height fog will be drawn from top-to-bottom, instead of being drawn from bottom-to-top.
    • ๐ŸŽ Significantly improved SSAO performance by using a lower sample count.
      • SSAO now uses 3ร—3 blurring by default, resulting in less visible noise patterns.
    • When "Keep 3D Linear" is enabled, colors are no longer clamped to [0, 1] when using Linear tonemapping.
      • This allows rendering HDR values in floating-point texture targets for further processing or saving HDR data into files.
    • The lightmap baker now calculates lightmap sizes dynamically based on surface area.
    • ๐Ÿ‘Œ Improved 3D KinematicBody performance and reliability.
    • ๐Ÿ‘ Orbiting in the 3D editor can now be done while holding Alt, for better compatibility with graphics tablets.
    • ๐Ÿš€ Keys and actions are now released when the window loses focus.
    • Tweens can now have a duration of 0.
    • Particles and CPUParticles' Sphere emission shape now uses an uniform density sphere.
    • Viewport.size_override_stretch is now exposed as a property (rather than just setter/getter methods).
    • ๐Ÿš€ One-click deploy to Android now requires just one click if only one device is connected.
    • 0๏ธโƒฃ The Project Manager will now infer a project name from the project path if the name was left to the default value.
    • The WebSockets implementation now uses the smaller wslay library instead of libwebsockets.
    • ๐Ÿ‘ Box selections in the editor now use a subtle outline for better visibility.
    • Most 2D lines are now antialiased in the editor.
    • CheckButtons now use a simpler design in the editor.
    • ๐ŸŒฒ Messages originating from the editor are now faded in the editor log.
      • This makes messages printed by the project stand out more.
    • Folding arrows in the editor inspector are now displayed at the left for consistency with other foldable elements.
    • Hovering or dragging guides in the 2D editor will now turn the cursor into a "resizing" shape.
    • โšก๏ธ The editor update spinner is now hidden by default.
      • It can be enabled again in the Editor Settings.
    • โšก๏ธ The "Update Always" option is now editor-wide instead of being project-specific.
    • ColorPicker, OptionButton and MenuButton now use toggle mode, making them appear pressed when clicked.
    • ๐Ÿšš The ColorPicker preview was moved below the picker area to be closer to the sliders.
    • Increased the Light2D height range from -100..100 to -2048..2048.
      • Lower and higher values can be entered manually too.
    • โฌ‡ Decreased the rotation_degrees range in various nodes to -360..360 to be easier to adjust using the slider.
      • Lower and higher values can still be entered manually, which is useful for animation purposes.
    • 0๏ธโƒฃ The default RichTextLabel color is now #ffffff, matching the default Label color for better consistency.
    • SpinBoxes now calculate the entered value using the Expression class.
      • For example, writing 2 + 2 in a SpinBox then pressing Enter will result in 4.
    • ๐Ÿ’พ Saved resources no longer contain dependency indices and metadata such as node folding, resulting in more VCS-friendly files.
    • 0๏ธโƒฃ The script editor's line length guideline is now enabled by default.
    • The script editor state (such as breakpoints or the current line) is now preserved across editor sessions.
    • 0๏ธโƒฃ The script editor's "Auto Brace Complete" setting is now enabled by default.
    • The scripts panel toggle button is now located at the bottom-left of the script editor (instead of the File menu).
    • ๐Ÿ”Œ Editor plugins can now be enabled without having an init script defined.
    • ๐Ÿ”Œ Custom nodes added by plugins now have a translucent script icon in the scene tree dock.
    • EditorInterface.get_current_path() to get the full path currently displayed in the FileSystem dock in an editor plugin.
    • Copy constructors are now allowed for built-in types in GDScript.
      • This allows constructs such as Vector2(Vector2(12, 34)), which may be useful to simplify code in some cases.
    • weakref(null) is now allowed in GDScript.
      • 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()).
    • ๐Ÿšฆ The number of signal connections and groups is now displayed in a tooltip when hovering the associated buttons in the scene tree dock.
    • The right mouse button can now be used to pan in the 2D editor.
      • This is to improve usability when using a touchpad.
      • The middle mouse button can still be used to pan in the 2D editor.
    • Zooming is now allowed while panning in the 2D editor.
    • When the "Scroll To Pan" editor setting is enabled, the 2D editor can now be zoomed in by holding Ctrl and scrolling the mouse wheel.
    • Zoom percentages in the 2D editor are now relative to the editor scale if the editor scale is higher than 100%.
    • The 2D editor now displays the current zoom percentage.
      • The zoom percentage can be clicked to reset the zoom level to 100%.
    • ๐Ÿ‘Œ Improved sorting options in the Asset Library.
    • Images now load faster in the Asset Library.
    • A loading placeholder is now displayed while icons are loading in the Asset Library.
    • Images failing to load in the Asset Library display a "broken file" icon.
    • ๐Ÿ‘Œ Improved the Asset Library page loading transitions.
    • ๐Ÿ‘‰ Tweaked the Asset Library detail page layout for better readability.
    • ๐Ÿ‘ Audio mixer faders now use a non-linear algorithm to better fit human hearing.
    • Tooltips now appear faster when hovering elements in the editor (0.7 seconds โ†’ 0.5 seconds).
    • 0๏ธโƒฃ Increased the low-processor usage mode's default maximum refresh rate (125 FPS โ†’ 144 FPS).
      • This makes the editor feel slightly smoother on 144 Hz displays.
    • Tree scrolling when dragging now uses a larger drag margin, making drag-and-drop more convenient.
    • Holding Ctrl now toggles snapping in GraphEdit.
    • ๐Ÿ‘Œ Improved the timeline's appearance in the animation editor.
    • ๐Ÿ‘Œ Improved snapping in the animation editor.
      • Snapping can be toggled temporarily by holding the Ctrl key.
      • Snapping can be made more precise by holding the Shift key.
      • Timeline snapping is now toggled by the Snap setting (like when moving keyframes).
    • Keyframes are now easier to select in the animation editor.
    • Selected keyframes now appear slightly larger in the animation editor.
    • Boolean and color keyframe icons are now aligned to other keyframes in the animation editor.
    • The Animation editor's line widths are now resized to match the editor scale.
    • BPTC compression is now available for all HDR image formats.
    • ๐Ÿ‘ Image.save_exr() to save an image in EXR format, which supports high bit depths.
    • ๐Ÿ‘Œ Improved path and polygon editors.
      • New handle icons for path and polygon points.
      • Smooth path point and curve tangents now use different icons to be distinguished from sharp points.
      • Tangent lines are now gray in the Path2D and Path editors.
      • Path2D lines are now antialiased.
    • Increased the TileSet and polygon UV editor's maximum zoom levels (400% โ†’ 1600%).
    • โฌ‡ Decreased the maximum allowed StyleBoxFlat corner detail (128 โ†’ 20).
      • This prevents slowness and glitches caused by using overly detailed corners.
    • 3D collision shapes and RayCasts are now drawn in gray when disabled.
    • ๐Ÿ‘Œ Improved RayCast2D and one-way collision drawing.
      • Disabled RayCast2Ds are now displayed in gray.
      • One-way collision arrows are now orange by default, making them easier to distinguish them from RayCast2Ds.
      • Tweaked RayCast2D and one-way collision line shapes to look more like arrows.
    • ๐Ÿ‘Œ Improved rendering in the curve editor.
      • The grid is now rendered correctly when using a light theme.
      • The main line and edge line colors have been swapped for better visibility.
      • Tangent line widths are now resized to match the editor scale.
    • ๐Ÿ‘Œ Improved rendering in the performance monitor.
      • Dark colors are now used on light backgrounds for better visibility.
      • Graph lines are now thinner and opaque.
      • Graph line widths are now resized to match the editor scale.
      • Rounded values now display trailing zeroes to make their precision clearer.
    • ๐Ÿ‘ TileMap support for transform operations on cell textures bigger than the cell size has been reworked to properly support isometric tiles.
      • Breaks compatibility with some TileMaps from previous Godot versions. An opt-in compatibility_mode property can be used to restore the previous behavior.
    • ๐Ÿšš Some TileMap editor options were moved to the toolbar.
    • The TileMap editor now displays coordinate information in the 2D viewport's bottom-left corner.
      • This fixes the TileMap editor width changing when hovering tiles in a small window.
    • Brackets are now only inserted when necessary when autocompleting methods in the script editor.
    • ๐Ÿ‘Œ Improved dialogs when saving or removing an editor layout.
    • Whitespace-only selections no longer cause the script editor to highlight all occurrences.
    • Saving a script will now add a newline at the end of file if none was present already.
    • Reorganized sections in the editor help to be in a more logical order.
    • The editor help now uses horizontal margins if the screen is wide enough.
      • This makes sure lines keep a reasonable length for better readability.
    • Increased line spacing in the editor help and asset library descriptions.
    • The editor help now displays bold text using a bold font (instead of using a monospace font).
    • The editor help now displays code using a slightly different color to be easier to distinguish.
    • The editor help now displays types after parameter names to follow the GDScript static typing syntax.
    • Editor help is now accessed using Shift + F1, for consistency with other applications.
      • Contextural help is now accessed using Alt + F1 to accommodate for this change.
    • The script editor's Find in Files dialog is now always available, even when no script is opened.
    • Pressing Shift + Enter in the script editor Find dialog will now go to the previous match.
    • ๐Ÿ‘Œ Improved the node deletion confirmation message.
      • If there is only one node to delete, its name is displayed in the message.
      • If there is more than one node to delete, the number of nodes to delete is displayed.
    • ๐Ÿ‘Œ Improved the "Snap Object to Floor" functionality in the 3D editor.
      • An error message is now displayed if no nodes could be snapped.
      • Increased the maximum snapping height (10 โ†’ 20).
      • Increased the maximum snapping tolerance (0.1 โ†’ 0.2).
    • 2D/3D selections, rotations and selected texts are now highlighted with the editor theme's accent color.
    • 3D light gizmos are now tinted using the light's color, making navigation easier while using the unshaded display mode.
    • ๐Ÿ‘Œ Improved the 3D light and AudioStreamPlayer3D gizmos to better represent their depth in the 3D world.
    • ๐Ÿ‘‰ Tweaked the 3D manipulator gizmo's colors for better visibility.
    • ๐Ÿ‘‰ Tweaked the 2D and 3D axis colors for consistency with gizmo colors.
    • 0๏ธโƒฃ Increased the default 3D manipulator gizmo opacity (0.2 โ†’ 0.4).
    • The multiline text editor popup dialog's width is now capped on large displays.
      • This prevents lines from becoming very long, which could hamper text readability.
    • ๐Ÿ–จ Non-printable escape characters are now stripped when pasting text into a LineEdit.
    • ๐Ÿ‘€ The TextEdit caret color now matches the default font color, making it easier to see.
    • Empty exported NodePath properties now return null instead of self.
    • Built-in scripts are no longer allowed to use class_name as it wasn't working properly.
    • 0๏ธโƒฃ The second parameter of substr() is now optional and defaults to -1.
    • โช More editor actions can now have shortcuts assigned (such as Revert Scene or Export).
    • The project export path may now be written in a relative path.
      • Directories will be created recursively if the target directory doesn't exist.
    • Items in the FileSystem dock can now be deselected by clicking empty space.
    • "Set as Main Scene" context option for scenes in the FileSystem dock.
    • โš  The unused class variable GDScript warning is now disabled by default due to false positives.
    • โš  Warning-ignore comments now allow whitespace after the # character.
    • ๐Ÿ‘Œ Improved error reporting in the Particles emission point creation dialog.
    • โš  The number of warnings and errors that can be received in the remote debugger is now capped per second rather than per frame.
      • 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.
    • ๐Ÿ‘ UTF-8 characters are now supported in input action names.
    • 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).
    • Tween methods' trans_type and ease_type arguments are now optional, defaulting to TRANS_LINEAR and EASE_IN_OUT respectively.
    • 0๏ธโƒฃ PCKPacker.pck_start() and PCKPacker.flush()'s alignment and verbose arguments (respectively) are now optional, defaulting to 0 and false.
    • Exported PCK files now contain the Godot patch version in their header.
      • This can be used by external tools to detect the Godot version more accurately.
    • ๐Ÿ’ป Exporting a project PCK or ZIP from the command line must now be done with the new --export-pack command-line argument.
      • This was done to remove the ambiguity when exporting a project to macOS from the command line.
    • โšก๏ธ Updated FreeType to 2.10, which changes how font metrics are calculated.
      • This may affect the appearance of some Controls, see this issue for details.
    • ๐Ÿ‘ท The SCons build system now automatically detects the host platform.
      • platform=<platform> is no longer required when compiling for the host platform.
      • platform=list can be used to list the supported target platforms.
    • ๐Ÿ Windows: Drive letters in file paths are now capitalized.
    • ๐ŸŽ macOS: Control + H and Control + D in TextEdit now delete the character at the left and right of the cursor (respectively).
    • ๐ŸŽ macOS: Command + Left in TextEdit now moves the cursor to the first non-whitespace character.
    • ๐ŸŽ macOS: Non-resizable windows are now allowed to enter fullscreen mode.
    • ๐ŸŽ macOS: The editor's title bar now uses dark mode on Mojave.
    • X11: OS.set_window_postion() now takes window decorations into account.

    โœ‚ Removed

    • ๐Ÿ’… Unused Panel panelf and panelnc styles.
    • thekla_atlas dependency, as light baking now relies on xatlas for UV unwrapping.
    • Rating icons in the Asset Library, as this feature isn't implemented in the backend.
    • ๐Ÿ‘ Some editor languages are no longer available due to missing support for RTL and text shaping in Godot:
      • Affected languages are Arabic, Bengali, Persian, Hebrew, Hindi, Malayalam, Sinhalese, Tamil, Telugu and Urdu.
      • These languages will be re-added once Godot supports RTL and text shaping.
    • Android: ARMv6 support.
    • iOS: ARMv7 support.
      • ARMv7 export templates can still be compiled from source to support the iPhone 5 and older.

    ๐Ÿ›  Fixed

    • The Project Manager now remembers the sorting option that was previously set.
    • The editor and project manager now have a minimum window size defined.
      • This prevents controls from overlapping each other by resizing the window to a very small size.
    • ๐Ÿ›  Fixed radiance map generation, resulting in improved 3D performance and visual quality.
    • ๐Ÿ›  Fixed issues with PBR environment mapping.
      • Materials should now look closer to what they look like in Substance Designer/Painter.
    • Depth of field now affects transparent objects.
    • Radiance is now generated when using a clear color sky.
    • Contact shadows no longer display when shadow casting is disabled.
    • Larger data types can now be constructed by swizzling in the shader language.
      • For instance, vec2 test2 = vec2(0.0, 1.0); vec3 test3 = test2.xxx; now works as in GLSL.
    • The AMBIENT_LIGHT_DISABLED and SHADOWS_DISABLED flags now work when using the GLES2 renderer.
    • The Keep background mode now works when using the GLES2 renderer.
    • ๐Ÿ›  Several fixes to the GLES2 renderer:
      • Fixed transparency order.
      • Fixed vertex lighting being too bright.
      • Fixed occasional light flickering.
      • Fixed shadows cast from transparent materials.
      • Fog is no longer computed on unshaded materials.
      • This matches the GLES3 renderer's behavior.
      • GLES2 shader uniforms now use highp precision by default.
      • This prevents linking issues on some Android devices.
      • Negative OmniLights and SpotLights now work as expected.
      • The 3D editor's View Information pane now displays statistics correctly when using the GLES2 renderer.
    • ๐Ÿ‘ Textures compressed with ETC now support transparency by falling back to RGBA4444 or LA8.
    • ๐Ÿ‘ Alternate display modes are now marked as disabled in the editor when using the GLES2 renderer, as these are only supported when using GLES3.
    • ๐Ÿ›  Fixed several inconsistencies between Particles and CPUParticles.
    • ๐Ÿ›  Fixed particles scale randomization.
    • Particles are now set to emit correctly when restarting.
    • CheckBox and CheckButton now use the check_vadjust custom constant to adjust the icon Y position as intended.
    • ๐Ÿ›  Fixed various issues with tab-related icons.
    • ๐Ÿ›  Fixed issues in WebM colorspace corrections, resulting in better color output.
    • CSG is now taken into account when generating navigation meshes.
    • Curve2D and Curve3D interpolated values now behave as expected.
    • โšก๏ธ Numeric slider grabbers in the editor inspector now update when scrolling using the mouse wheel.
    • Scene modifications are no longer lost when renaming a file in the FileSystem dock.
    • ๐Ÿ‘€ "Show in FileSystem" now clears the current search, so that the selected item can be seen immediately.
    • LineEdit and TextEdit's context menus no longer display editing options if they are read-only.
    • SpinBox mouse events are now correctly triggered by its LineEdit part.
    • Per-word navigation in LineEdit and TextEdit now handles UTF-8 characters correctly.
    • ๐ŸŒ LineEdit placeholders, Tabs' names and WindowDialog titles now react correctly to translation changes.
    • ๐Ÿ›  Fixed UI navigation when using gamepad analog sticks.
    • Buttons' state is now reset when they exit the scene tree.
      • This prevents them from lingering in a "hovered" or "pressed" state.
    • Tooltips now disappear when hiding the node they belong to.
    • Encoded packet flags are no longer sent in the ENet multiplayer protocol, as ENet itself already sends that data.
      • This saves 4 bytes per packet.
    • Audio trimming is now less aggressive, cutting at -50 dB instead of -30 dB.
    • Audio trimming now has a small fade-out period, preventing audible pops.
    • ๐Ÿšค Audio mix rate and output latency settings are now consistently applied on all platforms.
    • ๐Ÿ›  Fixed multichannel panning for AudioStreamPlayer3D.
    • Opening a recent built-in script will now load the associated scene automtaically since doing so is required to edit the script.
    • Declaring a class with class_name that has the same name as a singleton will now display a clearer error message.
    • script is no longer allowed as a member variable name in GDScript, as that conflicts with the internal script property used by Object.
    • Assigning a variable with a function index will no longer evaluate the function twice.
      • For instance, doing a[function()] += 1 will no longer evaluate function() twice.
      • If the function has side effects, this may change the resulting program behavior.
    • ๐Ÿš€ GDScript type checks are now enabled in release export templates.
    • The Label font shadow now draws the font outline as well (if the base font has one).
    • Font.draw_char() now draws the font outline as well (if the base font has one).
    • The editor no longer redraws continuously when selecting a Control in a Container.
    • โž• Added some missing feature tags to the Project Settings "Override For..." menu.
    • ๐Ÿ–จ The low_processor_mode_sleep_usec project setting no longer affects the editor.
    • Typed arrays and dictionaries no longer have their values shared across instances.
    • self and object types can now be indexed as a dictionary again (like in Godot 3.0 and prior).
    • ๐Ÿ›  Fixed to_lower() conversion with Cyrillic characters.
    • The Find in Files replace dialog now allows empty replacement texts.
    • The bottom panel no longer disappears when opening the theme editor on small displays.
    • The script editor's color picker now changes only one color if multiple colors are present on the same line.
    • The script editor's line length guideline is now drawn behind text.
    • The script editor's line length guideline is now drawn at the correct position when font hinting is disabled.
    • The script editor now automatically indents a line if the previous one ends with [ or (.
      • This makes it possible to wrap arrays or function declarations/calls without pressing Tab every line.
    • ๐Ÿ›  Fixed autocompletion in the script editor.
      • The script editor can now autocomplete enum values.
      • The script editor can now autocomplete node paths starting with $" or $'.
    • Custom script editor templates can now use type hints.
    • Shift operators with a number not between 0 and 63 (inclusive) will now result in a compile-time error in GDScript.
    • โš  Warnings no longer count towards the "Too many errors!" message.
    • AnimationTrackEdit now displays invalid value keys again (as it did in 3.0).
    • ๐Ÿ›  Fixed the display of function/audio/animation tracks in the blend tree animation filter.
    • The editor shortcuts menu no longer displays all unassigned shortcuts when searching for a substring of "None".
    • ๐ŸŽ The editor's performance monitor now displays memory/file sizes larger than 2 GB correctly.
    • The editor debugger now displays keyboard shortcuts when hovering the "Step Into", "Step Over", "Break" and "Continue" buttons.
    • The editor debugger now always handles connections.
      • Subsequent connections will be dropped immediately to avoid locking.
    • ๐Ÿ”ง Large rotation offset/snap values no longer appear to be cut off in the Configure Snap dialog.
    • ๐Ÿ“š Documentation tooltips in the editor now wrap to multiple lines correctly.
    • Locked 3D nodes are no longer selectable in the 3D viewport, matching the 2D editor's behavior.
    • All 3D gizmos now notify changes correctly, which means the inspector now displays up-to-date properties after using them.
    • The 3D manipulator gizmo's size is now capped at low viewport heights, preventing it from outgrowing the viewport's bounds.
    • The editor filesystem now refreshes on file changes if the project is located on an exFAT filesystem.
    • ๐Ÿ›  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.
    • The Show in File Manager context menu option now works with files marked as favorite.
    • ๐Ÿ‘€ The random number generator's seed is now properly set up.
    • ๐Ÿ’… Antialiased and rounded StyleBoxFlat corners now handle different border widths correctly.
    • ๐Ÿ’… The StyleBox preview now accounts for shadows and content margins.
      • This fixes the preview going out of bounds in the inspector.
    • Text resources no longer contain an extraneous line break at the end of file.
    • Transform's FLIP_Y and FLIP_Z constants now work as expected.
    • ๐Ÿ›  Fixed importing BMP images.
    • The positional command-line argument is now only considered to be a scene path if it ends with .scn, .tscn or .escn.
      • This makes it possible to parse command-line arguments in a standard fashion (--foo bar now works, not just --foo=bar).
      • This also makes it possible to use file associations or drag-and-drop and have the positional argument parsed by the project.
    • ๐Ÿ–จ The --audio-driver and --video-driver command-line arguments are now validated; an error message will be printed if an invalid value is passed.
    • The --check-only command-line argument now returns a non-zero exit code if an invalid script is passed using --script.
    • Exporting a project via the command-line now returns a non-zero exit code if an error occurred during exporting.
    • Console output is no longer colored when standard output isn't a TTY.
      • This prevents Godot from writing ANSI escape codes when redirecting standard output or standard error to a file.
    • Android: Gamepads are now correctly detected when the application starts.
    • Android: Fix some keyboards being detected as gamepads and not working as a result.
    • Android: The editor now detects if the device is connected using wireless adb and will debug using Wi-Fi in this case.
    • HTML5: Fixed the pointer position on hiDPI displays.
    • HTML5: OS.get_system_time_msec() now returns the correct value like on other platforms.
    • iOS: On iOS 11 or later, gestures near screen edges are now handled by Godot instead of the OS.
    • ๐Ÿ Windows: Line endings are now converted to CRLF when setting clipboard content.
    • ๐Ÿ Windows: Getting the path to the Downloads directory using OS.get_system_dir() now works correctly.
      • This fixes line endings being invisible when pasting into other applications.
    • ๐ŸŽ macOS: OS.get_real_window_size() and OS.set_window_size() are now handled correctly on hiDPI displays.
    • X11: OS.get_window_position() now returns absolute coordinates.
    • X11: Fixed audio playing on the wrong speakers when using PulseAudio on 5.1 setups.
    • X11: OS.set_window_maximized() now gives up after 0.5 seconds.
      • This makes the editor no longer freeze on startup when using fvwm.