Browse Source

classref: Sync with current master branch (10e1114)

Godot Organization 1 year ago
parent
commit
98c18d7c36
36 changed files with 1369 additions and 292 deletions
  1. 1 15
      classes/[email protected]
  2. 65 19
      classes/[email protected]
  3. 20 4
      classes/class_audioeffect.rst
  4. 18 6
      classes/class_audioeffectinstance.rst
  5. 1 1
      classes/class_bone2d.rst
  6. 54 42
      classes/class_displayserver.rst
  7. 22 0
      classes/class_editorinterface.rst
  8. 1 1
      classes/class_editorplugin.rst
  9. 1 1
      classes/class_editorsceneformatimporterblend.rst
  10. 42 8
      classes/class_editorsettings.rst
  11. 26 5
      classes/class_flowcontainer.rst
  12. 2 2
      classes/class_font.rst
  13. 28 0
      classes/class_fontfile.rst
  14. 19 0
      classes/class_fontvariation.rst
  15. 3 1
      classes/class_inputeventjoypadbutton.rst
  16. 46 13
      classes/class_inputeventkey.rst
  17. 39 32
      classes/class_inputeventmidi.rst
  18. 5 5
      classes/class_missingnode.rst
  19. 5 5
      classes/class_missingresource.rst
  20. 22 6
      classes/class_node.rst
  21. 71 41
      classes/class_object.rst
  22. 63 49
      classes/class_openxrextensionwrapperextension.rst
  23. 456 2
      classes/class_physicsserver3d.rst
  24. 43 5
      classes/class_progressbar.rst
  25. 101 1
      classes/class_projectsettings.rst
  26. 3 7
      classes/class_rdsamplerstate.rst
  27. 59 0
      classes/class_skeletonprofilehumanoid.rst
  28. 22 3
      classes/class_tabbar.rst
  29. 25 2
      classes/class_tabcontainer.rst
  30. 28 0
      classes/class_textserver.rst
  31. 32 0
      classes/class_textserverextension.rst
  32. 15 15
      classes/class_timer.rst
  33. 14 0
      classes/class_treeitem.rst
  34. 1 1
      classes/class_window.rst
  35. 2 0
      classes/class_xrinterface.rst
  36. 14 0
      classes/class_xrserver.rst

+ 1 - 15
classes/[email protected]

@@ -662,7 +662,7 @@ Add a custom icon to the current script. The icon specified at ``icon_path`` is
 
 \ **Note:** As annotations describe their subject, the :ref:`@icon<class_@GDScript_annotation_@icon>` annotation must be placed before the class definition and inheritance.
 
-\ **Note:** Unlike most other annotations, the argument of the :ref:`@icon<class_@GDScript_annotation_@icon>` annotation must be a string literal (constant expressions are not supported).
+\ **Note:** Unlike other annotations, the argument of the :ref:`@icon<class_@GDScript_annotation_@icon>` annotation must be a string literal (constant expressions are not supported).
 
 .. rst-class:: classref-item-separator
 
@@ -748,20 +748,6 @@ Mark the current script as a tool script, allowing it to be loaded and executed
 
 ----
 
-.. _class_@GDScript_annotation_@uid:
-
-.. rst-class:: classref-annotation
-
-**@uid** **(** :ref:`String<class_String>` uid **)**
-
-Stores information about UID of this script. This annotation is auto-generated when saving the script and must not be modified manually. Only applies to scripts saved as separate files (i.e. not built-in).
-
-\ **Note:** Unlike most other annotations, the argument of the :ref:`@uid<class_@GDScript_annotation_@uid>` annotation must be a string literal (constant expressions are not supported).
-
-.. rst-class:: classref-item-separator
-
-----
-
 .. _class_@GDScript_annotation_@warning_ignore:
 
 .. rst-class:: classref-annotation

+ 65 - 19
classes/[email protected]

@@ -2393,6 +2393,42 @@ Group Switch key mask.
 
 ----
 
+.. _enum_@GlobalScope_KeyLocation:
+
+.. rst-class:: classref-enumeration
+
+enum **KeyLocation**:
+
+.. _class_@GlobalScope_constant_KEY_LOCATION_UNSPECIFIED:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` **KEY_LOCATION_UNSPECIFIED** = ``0``
+
+Used for keys which only appear once, or when a comparison doesn't need to differentiate the ``LEFT`` and ``RIGHT`` versions.
+
+For example, when using :ref:`InputEvent.is_match<class_InputEvent_method_is_match>`, an event which has :ref:`KEY_LOCATION_UNSPECIFIED<class_@GlobalScope_constant_KEY_LOCATION_UNSPECIFIED>` will match any :ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` on the passed event.
+
+.. _class_@GlobalScope_constant_KEY_LOCATION_LEFT:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` **KEY_LOCATION_LEFT** = ``1``
+
+A key which is to the left of its twin.
+
+.. _class_@GlobalScope_constant_KEY_LOCATION_RIGHT:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` **KEY_LOCATION_RIGHT** = ``2``
+
+A key which is to the right of its twin.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _enum_@GlobalScope_MouseButton:
 
 .. rst-class:: classref-enumeration
@@ -2835,7 +2871,7 @@ enum **MIDIMessage**:
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_NONE** = ``0``
 
-Enum value which doesn't correspond to any MIDI message. This is used to initialize :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` properties with a generic state.
+Does not correspond to any MIDI message. This is the default value of :ref:`InputEventMIDI.message<class_InputEventMIDI_property_message>`.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF:
 
@@ -2843,7 +2879,9 @@ Enum value which doesn't correspond to any MIDI message. This is used to initial
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_NOTE_OFF** = ``8``
 
-MIDI note OFF message. Not all MIDI devices send this event; some send :ref:`MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` with zero velocity instead. See the documentation of :ref:`InputEventMIDI<class_InputEventMIDI>` for information of how to use MIDI inputs.
+MIDI message sent when a note is released.
+
+\ **Note:** Not all MIDI devices send this message; some may send :ref:`MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` with :ref:`InputEventMIDI.velocity<class_InputEventMIDI_property_velocity>` set to ``0``.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON:
 
@@ -2851,7 +2889,7 @@ MIDI note OFF message. Not all MIDI devices send this event; some send :ref:`MID
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_NOTE_ON** = ``9``
 
-MIDI note ON message. Some MIDI devices send this event with velocity zero instead of :ref:`MIDI_MESSAGE_NOTE_OFF<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF>`, but implementations vary. See the documentation of :ref:`InputEventMIDI<class_InputEventMIDI>` for information of how to use MIDI inputs.
+MIDI message sent when a note is pressed.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_AFTERTOUCH:
 
@@ -2859,7 +2897,7 @@ MIDI note ON message. Some MIDI devices send this event with velocity zero inste
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_AFTERTOUCH** = ``10``
 
-MIDI aftertouch message. This message is most often sent by pressing down on the key after it "bottoms out".
+MIDI message sent to indicate a change in pressure while a note is being pressed down, also called aftertouch.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE:
 
@@ -2867,7 +2905,7 @@ MIDI aftertouch message. This message is most often sent by pressing down on the
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_CONTROL_CHANGE** = ``11``
 
-MIDI control change message. This message is sent when a controller value changes. Controllers include devices such as pedals and levers.
+MIDI message sent when a controller value changes. In a MIDI device, a controller is any input that doesn't play notes. These may include sliders for volume, balance, and panning, as well as switches and pedals. See the `General MIDI specification <https://en.wikipedia.org/wiki/General_MIDI#Controller_events>`__ for a small list.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_PROGRAM_CHANGE:
 
@@ -2875,7 +2913,7 @@ MIDI control change message. This message is sent when a controller value change
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_PROGRAM_CHANGE** = ``12``
 
-MIDI program change message. This message sent when the program patch number changes.
+MIDI message sent when the MIDI device changes its current instrument (also called *program* or *preset*).
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_CHANNEL_PRESSURE:
 
@@ -2883,7 +2921,7 @@ MIDI program change message. This message sent when the program patch number cha
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_CHANNEL_PRESSURE** = ``13``
 
-MIDI channel pressure message. This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch as it indicates the highest pressure across all keys.
+MIDI message sent to indicate a change in pressure for the whole channel. Some MIDI devices may send this instead of :ref:`MIDI_MESSAGE_AFTERTOUCH<class_@GlobalScope_constant_MIDI_MESSAGE_AFTERTOUCH>`.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_PITCH_BEND:
 
@@ -2891,7 +2929,7 @@ MIDI channel pressure message. This message is most often sent by pressing down
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_PITCH_BEND** = ``14``
 
-MIDI pitch bend message. This message is sent to indicate a change in the pitch bender (wheel or lever, typically).
+MIDI message sent when the value of the pitch bender changes, usually a wheel on the MIDI device.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_SYSTEM_EXCLUSIVE:
 
@@ -2899,7 +2937,9 @@ MIDI pitch bend message. This message is sent to indicate a change in the pitch
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_SYSTEM_EXCLUSIVE** = ``240``
 
-MIDI system exclusive message. This has behavior exclusive to the device you're receiving input from. Getting this data is not implemented in Godot.
+MIDI system exclusive (SysEx) message. This type of message is not standardized and it's highly dependent on the MIDI device sending it.
+
+\ **Note:** Getting this message's data from :ref:`InputEventMIDI<class_InputEventMIDI>` is not implemented.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_QUARTER_FRAME:
 
@@ -2907,7 +2947,9 @@ MIDI system exclusive message. This has behavior exclusive to the device you're
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_QUARTER_FRAME** = ``241``
 
-MIDI quarter frame message. Contains timing information that is used to synchronize MIDI devices. Getting this data is not implemented in Godot.
+MIDI message sent every quarter frame to keep connected MIDI devices synchronized. Related to :ref:`MIDI_MESSAGE_TIMING_CLOCK<class_@GlobalScope_constant_MIDI_MESSAGE_TIMING_CLOCK>`.
+
+\ **Note:** Getting this message's data from :ref:`InputEventMIDI<class_InputEventMIDI>` is not implemented.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_SONG_POSITION_POINTER:
 
@@ -2915,7 +2957,9 @@ MIDI quarter frame message. Contains timing information that is used to synchron
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_SONG_POSITION_POINTER** = ``242``
 
-MIDI song position pointer message. Gives the number of 16th notes since the start of the song. Getting this data is not implemented in Godot.
+MIDI message sent to jump onto a new position in the current sequence or song.
+
+\ **Note:** Getting this message's data from :ref:`InputEventMIDI<class_InputEventMIDI>` is not implemented.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_SONG_SELECT:
 
@@ -2923,7 +2967,9 @@ MIDI song position pointer message. Gives the number of 16th notes since the sta
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_SONG_SELECT** = ``243``
 
-MIDI song select message. Specifies which sequence or song is to be played. Getting this data is not implemented in Godot.
+MIDI message sent to select a sequence or song to play.
+
+\ **Note:** Getting this message's data from :ref:`InputEventMIDI<class_InputEventMIDI>` is not implemented.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_TUNE_REQUEST:
 
@@ -2931,7 +2977,7 @@ MIDI song select message. Specifies which sequence or song is to be played. Gett
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_TUNE_REQUEST** = ``246``
 
-MIDI tune request message. Upon receiving a tune request, all analog synthesizers should tune their oscillators.
+MIDI message sent to request a tuning calibration. Used on analog synthesizers. Most modern MIDI devices do not need this message.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_TIMING_CLOCK:
 
@@ -2939,7 +2985,7 @@ MIDI tune request message. Upon receiving a tune request, all analog synthesizer
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_TIMING_CLOCK** = ``248``
 
-MIDI timing clock message. Sent 24 times per quarter note when synchronization is required.
+MIDI message sent 24 times after :ref:`MIDI_MESSAGE_QUARTER_FRAME<class_@GlobalScope_constant_MIDI_MESSAGE_QUARTER_FRAME>`, to keep connected MIDI devices synchronized.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_START:
 
@@ -2947,7 +2993,7 @@ MIDI timing clock message. Sent 24 times per quarter note when synchronization i
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_START** = ``250``
 
-MIDI start message. Start the current sequence playing. This message will be followed with Timing Clocks.
+MIDI message sent to start the current sequence or song from the beginning.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_CONTINUE:
 
@@ -2955,7 +3001,7 @@ MIDI start message. Start the current sequence playing. This message will be fol
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_CONTINUE** = ``251``
 
-MIDI continue message. Continue at the point the sequence was stopped.
+MIDI message sent to resume from the point the current sequence or song was paused.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_STOP:
 
@@ -2963,7 +3009,7 @@ MIDI continue message. Continue at the point the sequence was stopped.
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_STOP** = ``252``
 
-MIDI stop message. Stop the current sequence.
+MIDI message sent to pause the current sequence or song.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_ACTIVE_SENSING:
 
@@ -2971,7 +3017,7 @@ MIDI stop message. Stop the current sequence.
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_ACTIVE_SENSING** = ``254``
 
-MIDI active sensing message. This message is intended to be sent repeatedly to tell the receiver that a connection is alive.
+MIDI message sent repeatedly while the MIDI device is idle, to tell the receiver that the connection is alive. Most MIDI devices do not send this message.
 
 .. _class_@GlobalScope_constant_MIDI_MESSAGE_SYSTEM_RESET:
 
@@ -2979,7 +3025,7 @@ MIDI active sensing message. This message is intended to be sent repeatedly to t
 
 :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **MIDI_MESSAGE_SYSTEM_RESET** = ``255``
 
-MIDI system reset message. Reset all receivers in the system to power-up status. It should not be sent on power-up itself.
+MIDI message sent to reset a MIDI device to its default state, as if it was just turned on. It should not be sent when the MIDI device is being turned on.
 
 .. rst-class:: classref-item-separator
 

+ 20 - 4
classes/class_audioeffect.rst

@@ -14,20 +14,24 @@ AudioEffect
 
 **Inherited By:** :ref:`AudioEffectAmplify<class_AudioEffectAmplify>`, :ref:`AudioEffectCapture<class_AudioEffectCapture>`, :ref:`AudioEffectChorus<class_AudioEffectChorus>`, :ref:`AudioEffectCompressor<class_AudioEffectCompressor>`, :ref:`AudioEffectDelay<class_AudioEffectDelay>`, :ref:`AudioEffectDistortion<class_AudioEffectDistortion>`, :ref:`AudioEffectEQ<class_AudioEffectEQ>`, :ref:`AudioEffectFilter<class_AudioEffectFilter>`, :ref:`AudioEffectLimiter<class_AudioEffectLimiter>`, :ref:`AudioEffectPanner<class_AudioEffectPanner>`, :ref:`AudioEffectPhaser<class_AudioEffectPhaser>`, :ref:`AudioEffectPitchShift<class_AudioEffectPitchShift>`, :ref:`AudioEffectRecord<class_AudioEffectRecord>`, :ref:`AudioEffectReverb<class_AudioEffectReverb>`, :ref:`AudioEffectSpectrumAnalyzer<class_AudioEffectSpectrumAnalyzer>`, :ref:`AudioEffectStereoEnhance<class_AudioEffectStereoEnhance>`
 
-Audio effect for audio.
+Base class for audio effect resources.
 
 .. rst-class:: classref-introduction-group
 
 Description
 -----------
 
-Base resource for audio bus. Applies an audio effect on the bus that the resource is applied on.
+The base :ref:`Resource<class_Resource>` for every audio effect. In the editor, an audio effect can be added to the current bus layout through the Audio panel. At run-time, it is also possible to manipulate audio effects through :ref:`AudioServer.add_bus_effect<class_AudioServer_method_add_bus_effect>`, :ref:`AudioServer.remove_bus_effect<class_AudioServer_method_remove_bus_effect>`, and :ref:`AudioServer.get_bus_effect<class_AudioServer_method_get_bus_effect>`.
+
+When applied on a bus, an audio effect creates a corresponding :ref:`AudioEffectInstance<class_AudioEffectInstance>`. The instance is directly responsible for manipulating the sound, based on the original audio effect's properties.
 
 .. rst-class:: classref-introduction-group
 
 Tutorials
 ---------
 
+- :doc:`Audio buses <../tutorials/audio/audio_buses>`
+
 - `Audio Mic Record Demo <https://godotengine.org/asset-library/asset/527>`__
 
 .. rst-class:: classref-reftable-group
@@ -57,9 +61,21 @@ Method Descriptions
 
 :ref:`AudioEffectInstance<class_AudioEffectInstance>` **_instantiate** **(** **)** |virtual|
 
-.. container:: contribute
+Override this method to customize the :ref:`AudioEffectInstance<class_AudioEffectInstance>` created when this effect is applied on a bus in the editor's Audio panel, or through :ref:`AudioServer.add_bus_effect<class_AudioServer_method_add_bus_effect>`.
+
+::
+
+    extends AudioEffect
+    
+    @export var strength = 4.0
+    
+    func _instantiate():
+        var effect = CustomAudioEffectInstance.new()
+        effect.base = self
+    
+        return effect
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** It is recommended to keep a reference to the original **AudioEffect** in the new instance. Depending on the implementation this allows the effect instance to listen for changes at run-time and be modified accordingly.
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 18 - 6
classes/class_audioeffectinstance.rst

@@ -14,9 +14,21 @@ AudioEffectInstance
 
 **Inherited By:** :ref:`AudioEffectSpectrumAnalyzerInstance<class_AudioEffectSpectrumAnalyzerInstance>`
 
-.. container:: contribute
+Manipulates the audio it receives for a given effect.
 
-	There is currently no description for this class. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+.. rst-class:: classref-introduction-group
+
+Description
+-----------
+
+An audio effect instance manipulates the audio it receives for a given effect. This instance is automatically created by an :ref:`AudioEffect<class_AudioEffect>` when it is added to a bus, and should usually not be created directly. If necessary, it can be fetched at run-time with :ref:`AudioServer.get_bus_effect_instance<class_AudioServer_method_get_bus_effect_instance>`.
+
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Audio buses <../tutorials/audio/audio_buses>`
 
 .. rst-class:: classref-reftable-group
 
@@ -47,9 +59,9 @@ Method Descriptions
 
 void **_process** **(** const void* src_buffer, AudioFrame* dst_buffer, :ref:`int<class_int>` frame_count **)** |virtual|
 
-.. container:: contribute
+Called by the :ref:`AudioServer<class_AudioServer>` to process this effect. When :ref:`_process_silence<class_AudioEffectInstance_private_method__process_silence>` is not overridden or it returns ``false``, this method is called only when the bus is active.
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** It is not useful to override this method in GDScript or C#. Only GDExtension can take advantage of it.
 
 .. rst-class:: classref-item-separator
 
@@ -61,9 +73,9 @@ void **_process** **(** const void* src_buffer, AudioFrame* dst_buffer, :ref:`in
 
 :ref:`bool<class_bool>` **_process_silence** **(** **)** |virtual| |const|
 
-.. container:: contribute
+Override this method to customize the processing behavior of this effect instance.
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Should return ``true`` to force the :ref:`AudioServer<class_AudioServer>` to always call :ref:`_process<class_AudioEffectInstance_private_method__process>`, even if the bus has been muted or cannot otherwise be heard.
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 1 - 1
classes/class_bone2d.rst

@@ -104,7 +104,7 @@ Method Descriptions
 
 void **apply_rest** **(** **)**
 
-Stores the node's current transforms in :ref:`rest<class_Bone2D_property_rest>`.
+Resets the bone to the rest pose. This is equivalent to setting :ref:`Node2D.transform<class_Node2D_property_transform>` to :ref:`rest<class_Bone2D_property_rest>`.
 
 .. rst-class:: classref-item-separator
 

+ 54 - 42
classes/class_displayserver.rst

@@ -418,7 +418,7 @@ Display server supports touchscreen input. **Windows, Linux (X11), Android, iOS,
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_MOUSE** = ``3``
 
-Display server supports mouse input. **Windows, macOS, Linux (X11), Android, Web**
+Display server supports mouse input. **Windows, macOS, Linux (X11/Wayland), Android, Web**
 
 .. _class_DisplayServer_constant_FEATURE_MOUSE_WARP:
 
@@ -426,7 +426,7 @@ Display server supports mouse input. **Windows, macOS, Linux (X11), Android, Web
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_MOUSE_WARP** = ``4``
 
-Display server supports warping mouse coordinates to keep the mouse cursor constrained within an area, but looping when one of the edges is reached. **Windows, macOS, Linux (X11)**
+Display server supports warping mouse coordinates to keep the mouse cursor constrained within an area, but looping when one of the edges is reached. **Windows, macOS, Linux (X11/Wayland)**
 
 .. _class_DisplayServer_constant_FEATURE_CLIPBOARD:
 
@@ -434,7 +434,7 @@ Display server supports warping mouse coordinates to keep the mouse cursor const
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_CLIPBOARD** = ``5``
 
-Display server supports setting and getting clipboard data. See also :ref:`FEATURE_CLIPBOARD_PRIMARY<class_DisplayServer_constant_FEATURE_CLIPBOARD_PRIMARY>`. **Windows, macOS, Linux (X11), Android, iOS, Web**
+Display server supports setting and getting clipboard data. See also :ref:`FEATURE_CLIPBOARD_PRIMARY<class_DisplayServer_constant_FEATURE_CLIPBOARD_PRIMARY>`. **Windows, macOS, Linux (X11/Wayland), Android, iOS, Web**
 
 .. _class_DisplayServer_constant_FEATURE_VIRTUAL_KEYBOARD:
 
@@ -450,7 +450,7 @@ Display server supports popping up a virtual keyboard when requested to input te
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_CURSOR_SHAPE** = ``7``
 
-Display server supports setting the mouse cursor shape to be different from the default. **Windows, macOS, Linux (X11), Android, Web**
+Display server supports setting the mouse cursor shape to be different from the default. **Windows, macOS, Linux (X11/Wayland), Android, Web**
 
 .. _class_DisplayServer_constant_FEATURE_CUSTOM_CURSOR_SHAPE:
 
@@ -458,7 +458,7 @@ Display server supports setting the mouse cursor shape to be different from the
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_CUSTOM_CURSOR_SHAPE** = ``8``
 
-Display server supports setting the mouse cursor shape to a custom image. **Windows, macOS, Linux (X11), Web**
+Display server supports setting the mouse cursor shape to a custom image. **Windows, macOS, Linux (X11/Wayland), Web**
 
 .. _class_DisplayServer_constant_FEATURE_NATIVE_DIALOG:
 
@@ -482,7 +482,7 @@ Display server supports `Input Method Editor <https://en.wikipedia.org/wiki/Inpu
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_WINDOW_TRANSPARENCY** = ``11``
 
-Display server supports windows can use per-pixel transparency to make windows behind them partially or fully visible. **Windows, macOS, Linux (X11)**
+Display server supports windows can use per-pixel transparency to make windows behind them partially or fully visible. **Windows, macOS, Linux (X11/Wayland)**
 
 .. _class_DisplayServer_constant_FEATURE_HIDPI:
 
@@ -490,7 +490,7 @@ Display server supports windows can use per-pixel transparency to make windows b
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_HIDPI** = ``12``
 
-Display server supports querying the operating system's display scale factor. This allows for *reliable* automatic hiDPI display detection, as opposed to guessing based on the screen resolution and reported display DPI (which can be unreliable due to broken monitor EDID). **Windows, macOS**
+Display server supports querying the operating system's display scale factor. This allows for *reliable* automatic hiDPI display detection, as opposed to guessing based on the screen resolution and reported display DPI (which can be unreliable due to broken monitor EDID). **Windows, Linux (Wayland), macOS**
 
 .. _class_DisplayServer_constant_FEATURE_ICON:
 
@@ -522,7 +522,7 @@ Display server supports changing the screen orientation. **Android, iOS**
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_SWAP_BUFFERS** = ``16``
 
-Display server supports V-Sync status can be changed from the default (which is forced to be enabled platforms not supporting this feature). **Windows, macOS, Linux (X11)**
+Display server supports V-Sync status can be changed from the default (which is forced to be enabled platforms not supporting this feature). **Windows, macOS, Linux (X11/Wayland)**
 
 .. _class_DisplayServer_constant_FEATURE_CLIPBOARD_PRIMARY:
 
@@ -530,7 +530,7 @@ Display server supports V-Sync status can be changed from the default (which is
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_CLIPBOARD_PRIMARY** = ``18``
 
-Display server supports Primary clipboard can be used. This is a different clipboard from :ref:`FEATURE_CLIPBOARD<class_DisplayServer_constant_FEATURE_CLIPBOARD>`. **Linux (X11)**
+Display server supports Primary clipboard can be used. This is a different clipboard from :ref:`FEATURE_CLIPBOARD<class_DisplayServer_constant_FEATURE_CLIPBOARD>`. **Linux (X11/Wayland)**
 
 .. _class_DisplayServer_constant_FEATURE_TEXT_TO_SPEECH:
 
@@ -538,7 +538,7 @@ Display server supports Primary clipboard can be used. This is a different clipb
 
 :ref:`Feature<enum_DisplayServer_Feature>` **FEATURE_TEXT_TO_SPEECH** = ``19``
 
-Display server supports text-to-speech. See ``tts_*`` methods. **Windows, macOS, Linux (X11), Android, iOS, Web**
+Display server supports text-to-speech. See ``tts_*`` methods. **Windows, macOS, Linux (X11/Wayland), Android, iOS, Web**
 
 .. _class_DisplayServer_constant_FEATURE_EXTEND_TO_TITLE:
 
@@ -1066,7 +1066,7 @@ The window background can be transparent.
 
 \ **Note:** This flag has no effect if :ref:`ProjectSettings.display/window/per_pixel_transparency/allowed<class_ProjectSettings_property_display/window/per_pixel_transparency/allowed>` is set to ``false``.
 
-\ **Note:** Transparency support is implemented on Linux (X11), macOS and Windows, but availability might vary depending on GPU driver, display manager, and compositor capabilities.
+\ **Note:** Transparency support is implemented on Linux (X11/Wayland), macOS, and Windows, but availability might vary depending on GPU driver, display manager, and compositor capabilities.
 
 .. _class_DisplayServer_constant_WINDOW_FLAG_NO_FOCUS:
 
@@ -1302,7 +1302,7 @@ OpenGL context (only with the GL Compatibility renderer):
 
 - Windows: ``HGLRC`` for the window (native GL), or ``EGLContext`` for the window (ANGLE).
 
-- Linux: ``GLXContext*`` for the window.
+- Linux (X11): ``GLXContext*`` for the window.
 
 - macOS: ``NSOpenGLContext*`` for the window (native GL), or ``EGLContext`` for the window (ANGLE).
 
@@ -1367,6 +1367,8 @@ Constants
 
 Represents the screen containing the mouse pointer.
 
+\ **Note:** On Linux (Wayland), this constant always represents the screen at index ``0``.
+
 .. _class_DisplayServer_constant_SCREEN_WITH_KEYBOARD_FOCUS:
 
 .. rst-class:: classref-constant
@@ -1375,6 +1377,8 @@ Represents the screen containing the mouse pointer.
 
 Represents the screen containing the window with the keyboard focus.
 
+\ **Note:** On Linux (Wayland), this constant always represents the screen at index ``0``.
+
 .. _class_DisplayServer_constant_SCREEN_PRIMARY:
 
 .. rst-class:: classref-constant
@@ -1383,6 +1387,8 @@ Represents the screen containing the window with the keyboard focus.
 
 Represents the primary screen.
 
+\ **Note:** On Linux (Wayland), this constant always represents the screen at index ``0``.
+
 .. _class_DisplayServer_constant_SCREEN_OF_MAIN_WINDOW:
 
 .. rst-class:: classref-constant
@@ -1391,6 +1397,8 @@ Represents the primary screen.
 
 Represents the screen where the main window is located. This is usually the default value in functions that allow specifying one of several screens.
 
+\ **Note:** On Linux (Wayland), this constant always represents the screen at index ``0``.
+
 .. _class_DisplayServer_constant_MAIN_WINDOW_ID:
 
 .. rst-class:: classref-constant
@@ -1448,7 +1456,7 @@ Returns the user's clipboard as an image if possible.
 
 Returns the user's `primary <https://unix.stackexchange.com/questions/139191/whats-the-difference-between-primary-selection-and-clipboard-buffer>`__ clipboard as a string if possible. This is the clipboard that is set when the user selects text in any application, rather than when pressing :kbd:`Ctrl + C`. The clipboard data can then be pasted by clicking the middle mouse button in any application that supports the primary clipboard mechanism.
 
-\ **Note:** This method is only implemented on Linux (X11).
+\ **Note:** This method is only implemented on Linux (X11/Wayland).
 
 .. rst-class:: classref-item-separator
 
@@ -1498,7 +1506,7 @@ void **clipboard_set_primary** **(** :ref:`String<class_String>` clipboard_prima
 
 Sets the user's `primary <https://unix.stackexchange.com/questions/139191/whats-the-difference-between-primary-selection-and-clipboard-buffer>`__ clipboard content to the given string. This is the clipboard that is set when the user selects text in any application, rather than when pressing :kbd:`Ctrl + C`. The clipboard data can then be pasted by clicking the middle mouse button in any application that supports the primary clipboard mechanism.
 
-\ **Note:** This method is only implemented on Linux (X11).
+\ **Note:** This method is only implemented on Linux (X11/Wayland).
 
 .. rst-class:: classref-item-separator
 
@@ -1592,7 +1600,7 @@ Displays OS native dialog for selecting files or directories in the file system.
 
 Callbacks have the following arguments: ``status: bool, selected_paths: PackedStringArray, selected_filter_index: int``.
 
-\ **Note:** This method is implemented if the display server has the :ref:`FEATURE_NATIVE_DIALOG<class_DisplayServer_constant_FEATURE_NATIVE_DIALOG>` feature, i.e. Linux, Windows, and macOS.
+\ **Note:** This method is implemented if the display server has the :ref:`FEATURE_NATIVE_DIALOG<class_DisplayServer_constant_FEATURE_NATIVE_DIALOG>` feature. Supported platforms include Linux (X11 and Wayland), Windows, and macOS.
 
 \ **Note:** ``current_directory`` might be ignored.
 
@@ -1624,11 +1632,11 @@ Displays OS native dialog for selecting files or directories in the file system
 
 Callbacks have the following arguments: ``status: bool, selected_paths: PackedStringArray, selected_filter_index: int, selected_option: Dictionary``.
 
-\ **Note:** This method is implemented if the display server has the :ref:`FEATURE_NATIVE_DIALOG<class_DisplayServer_constant_FEATURE_NATIVE_DIALOG>` feature, i.e. Linux, Windows, and macOS.
+\ **Note:** This method is implemented if the display server has the :ref:`FEATURE_NATIVE_DIALOG<class_DisplayServer_constant_FEATURE_NATIVE_DIALOG>` feature. Supported platforms include Linux (X11 and Wayland), Windows, and macOS.
 
 \ **Note:** ``current_directory`` might be ignored.
 
-\ **Note:** On Linux, ``show_hidden`` is ignored.
+\ **Note:** On Linux (X11), ``show_hidden`` is ignored.
 
 \ **Note:** On macOS, native file dialogs have no title.
 
@@ -1710,9 +1718,9 @@ Returns the index of the screen containing the window with the keyboard focus, o
 
 :ref:`String<class_String>` **get_name** **(** **)** |const|
 
-Returns the name of the **DisplayServer** currently in use. Most operating systems only have a single **DisplayServer**, but Linux has access to more than one **DisplayServer** (although only X11 is currently implemented in Godot).
+Returns the name of the **DisplayServer** currently in use. Most operating systems only have a single **DisplayServer**, but Linux has access to more than one **DisplayServer** (currently X11 and Wayland).
 
-The names of built-in display servers are ``Windows``, ``macOS``, ``X11`` (Linux), ``Android``, ``iOS``, ``web`` (HTML5) and ``headless`` (when started with the ``--headless`` :doc:`command line argument <../tutorials/editor/command_line_tutorial>`).
+The names of built-in display servers are ``Windows``, ``macOS``, ``X11`` (Linux), ``Wayland`` (Linux), ``Android``, ``iOS``, ``web`` (HTML5), and ``headless`` (when started with the ``--headless`` :doc:`command line argument <../tutorials/editor/command_line_tutorial>`).
 
 .. rst-class:: classref-item-separator
 
@@ -2707,7 +2715,7 @@ Returns the composition string contained within the `Input Method Editor <https:
 
 Returns ``true`` if OS is using dark mode.
 
-\ **Note:** This method is implemented on Android, iOS, macOS, Windows, and Linux (X11).
+\ **Note:** This method is implemented on Android, iOS, macOS, Windows, and Linux (X11/Wayland).
 
 .. rst-class:: classref-item-separator
 
@@ -2721,7 +2729,7 @@ Returns ``true`` if OS is using dark mode.
 
 Returns ``true`` if OS supports dark mode.
 
-\ **Note:** This method is implemented on Android, iOS, macOS, Windows, and Linux (X11).
+\ **Note:** This method is implemented on Android, iOS, macOS, Windows, and Linux (X11/Wayland).
 
 .. rst-class:: classref-item-separator
 
@@ -2747,7 +2755,7 @@ Returns ``true`` if touch events are available (Android or iOS), the capability
 
 Returns active keyboard layout index.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS, and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2761,7 +2769,7 @@ Returns active keyboard layout index.
 
 Converts a physical (US QWERTY) ``keycode`` to one in the active keyboard layout.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2775,7 +2783,7 @@ Converts a physical (US QWERTY) ``keycode`` to one in the active keyboard layout
 
 Converts a physical (US QWERTY) ``keycode`` to localized label printed on the key in the active keyboard layout.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2789,7 +2797,7 @@ Converts a physical (US QWERTY) ``keycode`` to localized label printed on the ke
 
 Returns the number of keyboard layouts.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2803,7 +2811,7 @@ Returns the number of keyboard layouts.
 
 Returns the ISO-639/BCP-47 language code of the keyboard layout at position ``index``.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2817,7 +2825,7 @@ Returns the ISO-639/BCP-47 language code of the keyboard layout at position ``in
 
 Returns the localized name of the keyboard layout at position ``index``.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2831,7 +2839,7 @@ void **keyboard_set_current_layout** **(** :ref:`int<class_int>` index **)**
 
 Sets the active keyboard layout.
 
-\ **Note:** This method is implemented on Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Linux (X11/Wayland), macOS and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -2918,7 +2926,7 @@ Returns the dots per inch density of the specified screen. If ``screen`` is :ref
      xxhdpi - 480 dpi
     xxxhdpi - 640 dpi
 
-\ **Note:** This method is implemented on Android, Linux (X11), macOS and Windows. Returns ``72`` on unsupported platforms.
+\ **Note:** This method is implemented on Android, Linux (X11/Wayland), macOS and Windows. Returns ``72`` on unsupported platforms.
 
 .. rst-class:: classref-item-separator
 
@@ -3005,6 +3013,8 @@ Returns the screen's top-left corner position in pixels. On multi-monitor setups
 
 See also :ref:`screen_get_size<class_DisplayServer_method_screen_get_size>`.
 
+\ **Note:** On Linux (Wayland) this method always returns ``(0, 0)``.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -3215,7 +3225,7 @@ Each :ref:`Dictionary<class_Dictionary>` contains two :ref:`String<class_String>
 
 Note that Godot depends on system libraries for text-to-speech functionality. These libraries are installed by default on Windows and macOS, but not on all Linux distributions. If they are not present, this method will return an empty list. This applies to both Godot users on Linux, as well as end-users on Linux running Godot games that use text-to-speech.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3231,7 +3241,7 @@ Note that Godot depends on system libraries for text-to-speech functionality. Th
 
 Returns an :ref:`PackedStringArray<class_PackedStringArray>` of voice identifiers for the ``language``.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3247,7 +3257,7 @@ Returns an :ref:`PackedStringArray<class_PackedStringArray>` of voice identifier
 
 Returns ``true`` if the synthesizer is in a paused state.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3263,7 +3273,7 @@ Returns ``true`` if the synthesizer is in a paused state.
 
 Returns ``true`` if the synthesizer is generating speech, or have utterance waiting in the queue.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3279,7 +3289,7 @@ void **tts_pause** **(** **)**
 
 Puts the synthesizer into a paused state.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3295,7 +3305,7 @@ void **tts_resume** **(** **)**
 
 Resumes the synthesizer if it was paused.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3317,7 +3327,7 @@ Adds a callback, which is called when the utterance has started, finished, cance
 
 \ **Note:** The granularity of the boundary callbacks is engine dependent.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3343,11 +3353,11 @@ Adds an utterance to the queue. If ``interrupt`` is ``true``, the queue is clear
 
 - ``utterance_id`` is passed as a parameter to the callback functions.
 
-\ **Note:** On Windows and Linux (X11), utterance ``text`` can use SSML markup. SSML support is engine and voice dependent. If the engine does not support SSML, you should strip out all XML markup before calling :ref:`tts_speak<class_DisplayServer_method_tts_speak>`.
+\ **Note:** On Windows and Linux (X11/Wayland), utterance ``text`` can use SSML markup. SSML support is engine and voice dependent. If the engine does not support SSML, you should strip out all XML markup before calling :ref:`tts_speak<class_DisplayServer_method_tts_speak>`.
 
 \ **Note:** The granularity of pitch, rate, and volume is engine and voice dependent. Values may be truncated.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Wayland), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3363,7 +3373,7 @@ void **tts_stop** **(** **)**
 
 Stops synthesis in progress and removes all utterances from the queue.
 
-\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11), macOS, and Windows.
+\ **Note:** This method is implemented on Android, iOS, Web, Linux (X11/Linux), macOS, and Windows.
 
 \ **Note:** :ref:`ProjectSettings.audio/general/text_to_speech<class_ProjectSettings_property_audio/general/text_to_speech>` should be ``true`` to use text-to-speech.
 
@@ -3429,7 +3439,7 @@ void **warp_mouse** **(** :ref:`Vector2i<class_Vector2i>` position **)**
 
 Sets the mouse cursor position to the given ``position`` relative to an origin at the upper left corner of the currently focused game Window Manager window.
 
-\ **Note:** :ref:`warp_mouse<class_DisplayServer_method_warp_mouse>` is only supported on Windows, macOS and Linux. It has no effect on Android, iOS and Web.
+\ **Note:** :ref:`warp_mouse<class_DisplayServer_method_warp_mouse>` is only supported on Windows, macOS, and Linux (X11/Wayland). It has no effect on Android, iOS, and Web.
 
 .. rst-class:: classref-item-separator
 
@@ -3539,7 +3549,7 @@ Returns the mode of the given window.
 
 Returns internal structure pointers for use in plugins.
 
-\ **Note:** This method is implemented on Android, Linux (X11), macOS and Windows.
+\ **Note:** This method is implemented on Android, Linux (X11/Wayland), macOS, and Windows.
 
 .. rst-class:: classref-item-separator
 
@@ -3741,7 +3751,7 @@ Sets the ``callback`` that should be called when files are dropped from the oper
 
 \ **Warning:** Advanced users only! Adding such a callback to a :ref:`Window<class_Window>` node will override its default implementation, which can introduce bugs.
 
-\ **Note:** This method is implemented on Windows, macOS, Linux (X11) and Web.
+\ **Note:** This method is implemented on Windows, macOS, Linux (X11/Wayland), and Web.
 
 .. rst-class:: classref-item-separator
 
@@ -3953,6 +3963,8 @@ See also :ref:`window_get_position<class_DisplayServer_method_window_get_positio
 
 \ **Note:** It's recommended to change this value using :ref:`Window.position<class_Window_property_position>` instead.
 
+\ **Note:** On Linux (Wayland): this method is a no-op.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 22 - 0
classes/class_editorinterface.rst

@@ -112,6 +112,8 @@ Methods
    +-----------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                      | :ref:`inspect_object<class_EditorInterface_method_inspect_object>` **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` for_property="", :ref:`bool<class_bool>` inspector_only=false **)**                                           |
    +-----------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                                   | :ref:`is_multi_window_enabled<class_EditorInterface_method_is_multi_window_enabled>` **(** **)** |const|                                                                                                                                               |
+   +-----------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                                   | :ref:`is_playing_scene<class_EditorInterface_method_is_playing_scene>` **(** **)** |const|                                                                                                                                                             |
    +-----------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                                   | :ref:`is_plugin_enabled<class_EditorInterface_method_is_plugin_enabled>` **(** :ref:`String<class_String>` plugin **)** |const|                                                                                                                        |
@@ -329,6 +331,8 @@ Returns the edited (current) scene's root :ref:`Node<class_Node>`.
 
 Returns the editor control responsible for main screen plugins and tools. Use it with plugins that implement :ref:`EditorPlugin._has_main_screen<class_EditorPlugin_private_method__has_main_screen>`.
 
+\ **Note:** This node is a :ref:`VBoxContainer<class_VBoxContainer>`, which means that if you add a :ref:`Control<class_Control>` child to it, you need to set the child's :ref:`Control.size_flags_vertical<class_Control_property_size_flags_vertical>` to :ref:`Control.SIZE_EXPAND_FILL<class_Control_constant_SIZE_EXPAND_FILL>` to make it use the full available space.
+
 \ **Warning:** Removing and freeing this node will render a part of the editor useless and may cause a crash.
 
 .. rst-class:: classref-item-separator
@@ -537,6 +541,24 @@ Shows the given property on the given ``object`` in the editor's Inspector dock.
 
 ----
 
+.. _class_EditorInterface_method_is_multi_window_enabled:
+
+.. rst-class:: classref-method
+
+:ref:`bool<class_bool>` **is_multi_window_enabled** **(** **)** |const|
+
+Returns ``true`` if multiple window support is enabled in the editor. Multiple window support is enabled if *all* of these statements are true:
+
+- :ref:`EditorSettings.interface/multi_window/enable<class_EditorSettings_property_interface/multi_window/enable>` is ``true``.
+
+- :ref:`EditorSettings.interface/editor/single_window_mode<class_EditorSettings_property_interface/editor/single_window_mode>` is ``false``.
+
+- :ref:`Viewport.gui_embed_subwindows<class_Viewport_property_gui_embed_subwindows>` is ``false``. This is forced to ``true`` on platforms that don't support multiple windows such as Web, or when the ``--single-window`` :doc:`command line argument <../tutorials/editor/command_line_tutorial>` is used.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_EditorInterface_method_is_playing_scene:
 
 .. rst-class:: classref-method

+ 1 - 1
classes/class_editorplugin.rst

@@ -982,7 +982,7 @@ Implement this function if your plugin edits a specific type of object (Resource
 
 Returns ``true`` if this is a main screen editor plugin (it goes in the workspace selector together with **2D**, **3D**, **Script** and **AssetLib**).
 
-When the plugin's workspace is selected, other main screen plugins will be hidden, but your plugin will not appear automatically. It needs to be added as a child of :ref:`EditorInterface.get_base_control<class_EditorInterface_method_get_base_control>` and made visible inside :ref:`_make_visible<class_EditorPlugin_private_method__make_visible>`.
+When the plugin's workspace is selected, other main screen plugins will be hidden, but your plugin will not appear automatically. It needs to be added as a child of :ref:`EditorInterface.get_editor_main_screen<class_EditorInterface_method_get_editor_main_screen>` and made visible inside :ref:`_make_visible<class_EditorPlugin_private_method__make_visible>`.
 
 Use :ref:`_get_plugin_name<class_EditorPlugin_private_method__get_plugin_name>` and :ref:`_get_plugin_icon<class_EditorPlugin_private_method__get_plugin_icon>` to customize the plugin button's appearance.
 

+ 1 - 1
classes/class_editorsceneformatimporterblend.rst

@@ -21,7 +21,7 @@ Description
 
 Imports Blender scenes in the ``.blend`` file format through the glTF 2.0 3D import pipeline. This importer requires Blender to be installed by the user, so that it can be used to export the scene as glTF 2.0.
 
-The location of the Blender binary is set via the ``filesystem/import/blender/blender3_path`` editor setting.
+The location of the Blender binary is set via the ``filesystem/import/blender/blender_path`` editor setting.
 
 This importer is only used if :ref:`ProjectSettings.filesystem/import/blender/enabled<class_ProjectSettings_property_filesystem/import/blender/enabled>` is enabled, otherwise ``.blend`` files present in the project folder are not imported.
 

+ 42 - 8
classes/class_editorsettings.rst

@@ -245,7 +245,7 @@ Properties
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`         | :ref:`filesystem/file_dialog/thumbnail_size<class_EditorSettings_property_filesystem/file_dialog/thumbnail_size>`                                                                   |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`   | :ref:`filesystem/import/blender/blender3_path<class_EditorSettings_property_filesystem/import/blender/blender3_path>`                                                               |
+   | :ref:`String<class_String>`   | :ref:`filesystem/import/blender/blender_path<class_EditorSettings_property_filesystem/import/blender/blender_path>`                                                                 |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`         | :ref:`filesystem/import/blender/rpc_port<class_EditorSettings_property_filesystem/import/blender/rpc_port>`                                                                         |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -373,6 +373,8 @@ Properties
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`     | :ref:`interface/touchscreen/scale_gizmo_handles<class_EditorSettings_property_interface/touchscreen/scale_gizmo_handles>`                                                           |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`         | :ref:`network/connection/network_mode<class_EditorSettings_property_network/connection/network_mode>`                                                                               |
+   +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`String<class_String>`   | :ref:`network/debug/remote_host<class_EditorSettings_property_network/debug/remote_host>`                                                                                           |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`         | :ref:`network/debug/remote_port<class_EditorSettings_property_network/debug/remote_port>`                                                                                           |
@@ -397,6 +399,8 @@ Properties
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`         | :ref:`run/output/font_size<class_EditorSettings_property_run/output/font_size>`                                                                                                     |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`       | :ref:`run/platforms/linuxbsd/prefer_wayland<class_EditorSettings_property_run/platforms/linuxbsd/prefer_wayland>`                                                                   |
+   +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`         | :ref:`run/window_placement/android_window<class_EditorSettings_property_run/window_placement/android_window>`                                                                       |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`         | :ref:`run/window_placement/rect<class_EditorSettings_property_run/window_placement/rect>`                                                                                           |
@@ -983,7 +987,9 @@ The color of the viewport border in the 2D editor. This border represents the vi
 
 :ref:`float<class_float>` **editors/3d/default_fov**
 
-The default camera field of view to use in the 3D editor (in degrees). The camera field of view can be adjusted on a per-scene basis using the **View** menu at the top of the 3D editor. If a scene had its camera field of view adjusted using the **View** menu, this setting is ignored in the scene in question. This setting is also ignored while a Camera3D node is being previewed in the editor.
+The default camera vertical field of view to use in the 3D editor (in degrees). The camera field of view can be adjusted on a per-scene basis using the **View** menu at the top of the 3D editor. If a scene had its camera field of view adjusted using the **View** menu, this setting is ignored in the scene in question. This setting is also ignored while a :ref:`Camera3D<class_Camera3D>` node is being previewed in the editor.
+
+\ **Note:** The editor camera always uses the **Keep Height** aspect mode.
 
 .. rst-class:: classref-item-separator
 
@@ -995,7 +1001,7 @@ The default camera field of view to use in the 3D editor (in degrees). The camer
 
 :ref:`float<class_float>` **editors/3d/default_z_far**
 
-The default camera far clip distance to use in the 3D editor (in degrees). Higher values make it possible to view objects placed further away from the camera, at the cost of lower precision in the depth buffer (which can result in visible Z-fighting in the distance). The camera far clip distance can be adjusted on a per-scene basis using the **View** menu at the top of the 3D editor. If a scene had its camera far clip distance adjusted using the **View** menu, this setting is ignored in the scene in question. This setting is also ignored while a Camera3D node is being previewed in the editor.
+The default camera far clip distance to use in the 3D editor (in degrees). Higher values make it possible to view objects placed further away from the camera, at the cost of lower precision in the depth buffer (which can result in visible Z-fighting in the distance). The camera far clip distance can be adjusted on a per-scene basis using the **View** menu at the top of the 3D editor. If a scene had its camera far clip distance adjusted using the **View** menu, this setting is ignored in the scene in question. This setting is also ignored while a :ref:`Camera3D<class_Camera3D>` node is being previewed in the editor.
 
 .. rst-class:: classref-item-separator
 
@@ -1007,7 +1013,7 @@ The default camera far clip distance to use in the 3D editor (in degrees). Highe
 
 :ref:`float<class_float>` **editors/3d/default_z_near**
 
-The default camera near clip distance to use in the 3D editor (in degrees). Lower values make it possible to view objects placed closer to the camera, at the cost of lower precision in the depth buffer (which can result in visible Z-fighting in the distance). The camera near clip distance can be adjusted on a per-scene basis using the **View** menu at the top of the 3D editor. If a scene had its camera near clip distance adjusted using the **View** menu, this setting is ignored in the scene in question. This setting is also ignored while a Camera3D node is being previewed in the editor.
+The default camera near clip distance to use in the 3D editor (in degrees). Lower values make it possible to view objects placed closer to the camera, at the cost of lower precision in the depth buffer (which can result in visible Z-fighting in the distance). The camera near clip distance can be adjusted on a per-scene basis using the **View** menu at the top of the 3D editor. If a scene had its camera near clip distance adjusted using the **View** menu, this setting is ignored in the scene in question. This setting is also ignored while a :ref:`Camera3D<class_Camera3D>` node is being previewed in the editor.
 
 .. rst-class:: classref-item-separator
 
@@ -1853,11 +1859,11 @@ The thumbnail size to use in the editor's file dialogs (in pixels). See also :re
 
 ----
 
-.. _class_EditorSettings_property_filesystem/import/blender/blender3_path:
+.. _class_EditorSettings_property_filesystem/import/blender/blender_path:
 
 .. rst-class:: classref-property
 
-:ref:`String<class_String>` **filesystem/import/blender/blender3_path**
+:ref:`String<class_String>` **filesystem/import/blender/blender_path**
 
 The path to the directory containing the Blender executable used for converting the Blender 3D scene files ``.blend`` to glTF 2.0 format during import. Blender 3.0 or later is required.
 
@@ -2291,6 +2297,8 @@ The default **Auto** value will only enable this if the editor was compiled with
 
 If ``true``, embed modal windows such as docks inside the main editor window. When single-window mode is enabled, tooltips will also be embedded inside the main editor window, which means they can't be displayed outside of the editor window.
 
+\ **Note:** To query whether the editor can use multiple windows in an editor plugin, use :ref:`EditorInterface.is_multi_window_enabled<class_EditorInterface_method_is_multi_window_enabled>` instead of querying the value of this editor setting.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -2375,10 +2383,12 @@ If ``true``, display OpenType features marked as ``hidden`` by the font file in
 
 :ref:`bool<class_bool>` **interface/multi_window/enable**
 
-If ``true``, the multi window support in editor is enabled. The following panels can become dedicated windows (made floating): Docks, Script editor, and Shader editor.
+If ``true``, multiple window support in editor is enabled. The following panels can become dedicated windows (i.e. made floating): Docks, Script editor, and Shader editor.
 
 \ **Note:** When :ref:`interface/editor/single_window_mode<class_EditorSettings_property_interface/editor/single_window_mode>` is ``true``, the multi window support is always disabled.
 
+\ **Note:** To query whether the editor can use multiple windows in an editor plugin, use :ref:`EditorInterface.is_multi_window_enabled<class_EditorInterface_method_is_multi_window_enabled>` instead of querying the value of this editor setting.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -2477,7 +2487,7 @@ The color to use for "highlighted" user interface elements in the editor (presse
 
 The extra spacing to add to various GUI elements in the editor (in pixels). Increasing this value is useful to improve usability on touch screens, at the cost of reducing the amount of usable screen real estate.
 
- See also :ref:`interface/theme/spacing_preset<class_EditorSettings_property_interface/theme/spacing_preset>`.
+See also :ref:`interface/theme/spacing_preset<class_EditorSettings_property_interface/theme/spacing_preset>`.
 
 .. rst-class:: classref-item-separator
 
@@ -2691,6 +2701,18 @@ Specify the multiplier to apply to the scale for the editor gizmo handles to imp
 
 ----
 
+.. _class_EditorSettings_property_network/connection/network_mode:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **network/connection/network_mode**
+
+Determines whether online features are enabled in the editor, such as the Asset Library. Setting this property to "Offline" is recommended to limit editor's internet activity, especially if privacy is a concern.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_EditorSettings_property_network/debug/remote_host:
 
 .. rst-class:: classref-property
@@ -2839,6 +2861,18 @@ The size of the font in the **Output** panel at the bottom of the editor. This s
 
 ----
 
+.. _class_EditorSettings_property_run/platforms/linuxbsd/prefer_wayland:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **run/platforms/linuxbsd/prefer_wayland**
+
+If ``true``, on Linux/BSD, the editor will check for Wayland first instead of X11 (if available).
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_EditorSettings_property_run/window_placement/android_window:
 
 .. rst-class:: classref-property

+ 26 - 5
classes/class_flowcontainer.rst

@@ -38,11 +38,13 @@ Properties
 .. table::
    :widths: auto
 
-   +--------------------------------------------------------+----------------------------------------------------------+-----------+
-   | :ref:`AlignmentMode<enum_FlowContainer_AlignmentMode>` | :ref:`alignment<class_FlowContainer_property_alignment>` | ``0``     |
-   +--------------------------------------------------------+----------------------------------------------------------+-----------+
-   | :ref:`bool<class_bool>`                                | :ref:`vertical<class_FlowContainer_property_vertical>`   | ``false`` |
-   +--------------------------------------------------------+----------------------------------------------------------+-----------+
+   +--------------------------------------------------------+----------------------------------------------------------------+-----------+
+   | :ref:`AlignmentMode<enum_FlowContainer_AlignmentMode>` | :ref:`alignment<class_FlowContainer_property_alignment>`       | ``0``     |
+   +--------------------------------------------------------+----------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>`                                | :ref:`reverse_fill<class_FlowContainer_property_reverse_fill>` | ``false`` |
+   +--------------------------------------------------------+----------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>`                                | :ref:`vertical<class_FlowContainer_property_vertical>`         | ``false`` |
+   +--------------------------------------------------------+----------------------------------------------------------------+-----------+
 
 .. rst-class:: classref-reftable-group
 
@@ -135,6 +137,25 @@ The alignment of the container's children (must be one of :ref:`ALIGNMENT_BEGIN<
 
 ----
 
+.. _class_FlowContainer_property_reverse_fill:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **reverse_fill** = ``false``
+
+.. rst-class:: classref-property-setget
+
+- void **set_reverse_fill** **(** :ref:`bool<class_bool>` value **)**
+- :ref:`bool<class_bool>` **is_reverse_fill** **(** **)**
+
+If ``true``, reverses fill direction. Horizontal **FlowContainer**\ s will fill rows bottom to top, vertical **FlowContainer**\ s will fill columns right to left.
+
+When using a vertical **FlowContainer** with a right to left :ref:`Control.layout_direction<class_Control_property_layout_direction>`, columns will fill left to right instead.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_FlowContainer_property_vertical:
 
 .. rst-class:: classref-property

+ 2 - 2
classes/class_font.rst

@@ -56,7 +56,7 @@ Methods
    +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                      | :ref:`draw_string_outline<class_Font_method_draw_string_outline>` **(** :ref:`RID<class_RID>` canvas_item, :ref:`Vector2<class_Vector2>` pos, :ref:`String<class_String>` text, :ref:`HorizontalAlignment<enum_@GlobalScope_HorizontalAlignment>` alignment=0, :ref:`float<class_float>` width=-1, :ref:`int<class_int>` font_size=16, :ref:`int<class_int>` size=1, :ref:`Color<class_Color>` modulate=Color(1, 1, 1, 1), |bitfield|\<:ref:`JustificationFlag<enum_TextServer_JustificationFlag>`\> justification_flags=3, :ref:`Direction<enum_TextServer_Direction>` direction=0, :ref:`Orientation<enum_TextServer_Orientation>` orientation=0 **)** |const|                                                                                                                                        |
    +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`RID<class_RID>`                                     | :ref:`find_variation<class_Font_method_find_variation>` **(** :ref:`Dictionary<class_Dictionary>` variation_coordinates, :ref:`int<class_int>` face_index=0, :ref:`float<class_float>` strength=0.0, :ref:`Transform2D<class_Transform2D>` transform=Transform2D(1, 0, 0, 1, 0, 0), :ref:`int<class_int>` spacing_top=0, :ref:`int<class_int>` spacing_bottom=0, :ref:`int<class_int>` spacing_space=0, :ref:`int<class_int>` spacing_glyph=0 **)** |const|                                                                                                                                                                                                                                                                                                                                             |
+   | :ref:`RID<class_RID>`                                     | :ref:`find_variation<class_Font_method_find_variation>` **(** :ref:`Dictionary<class_Dictionary>` variation_coordinates, :ref:`int<class_int>` face_index=0, :ref:`float<class_float>` strength=0.0, :ref:`Transform2D<class_Transform2D>` transform=Transform2D(1, 0, 0, 1, 0, 0), :ref:`int<class_int>` spacing_top=0, :ref:`int<class_int>` spacing_bottom=0, :ref:`int<class_int>` spacing_space=0, :ref:`int<class_int>` spacing_glyph=0, :ref:`float<class_float>` baseline_offset=0.0 **)** |const|                                                                                                                                                                                                                                                                                              |
    +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                                 | :ref:`get_ascent<class_Font_method_get_ascent>` **(** :ref:`int<class_int>` font_size=16 **)** |const|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
    +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -230,7 +230,7 @@ See also :ref:`CanvasItem.draw_string_outline<class_CanvasItem_method_draw_strin
 
 .. rst-class:: classref-method
 
-:ref:`RID<class_RID>` **find_variation** **(** :ref:`Dictionary<class_Dictionary>` variation_coordinates, :ref:`int<class_int>` face_index=0, :ref:`float<class_float>` strength=0.0, :ref:`Transform2D<class_Transform2D>` transform=Transform2D(1, 0, 0, 1, 0, 0), :ref:`int<class_int>` spacing_top=0, :ref:`int<class_int>` spacing_bottom=0, :ref:`int<class_int>` spacing_space=0, :ref:`int<class_int>` spacing_glyph=0 **)** |const|
+:ref:`RID<class_RID>` **find_variation** **(** :ref:`Dictionary<class_Dictionary>` variation_coordinates, :ref:`int<class_int>` face_index=0, :ref:`float<class_float>` strength=0.0, :ref:`Transform2D<class_Transform2D>` transform=Transform2D(1, 0, 0, 1, 0, 0), :ref:`int<class_int>` spacing_top=0, :ref:`int<class_int>` spacing_bottom=0, :ref:`int<class_int>` spacing_space=0, :ref:`int<class_int>` spacing_glyph=0, :ref:`float<class_float>` baseline_offset=0.0 **)** |const|
 
 Returns :ref:`TextServer<class_TextServer>` RID of the font cache for specific variation.
 

+ 28 - 0
classes/class_fontfile.rst

@@ -146,6 +146,8 @@ Methods
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                         | :ref:`get_embolden<class_FontFile_method_get_embolden>` **(** :ref:`int<class_int>` cache_index **)** |const|                                                                                                                                          |
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                         | :ref:`get_extra_baseline_offset<class_FontFile_method_get_extra_baseline_offset>` **(** :ref:`int<class_int>` cache_index **)** |const|                                                                                                                |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                             | :ref:`get_extra_spacing<class_FontFile_method_get_extra_spacing>` **(** :ref:`int<class_int>` cache_index, :ref:`SpacingType<enum_TextServer_SpacingType>` spacing **)** |const|                                                                       |
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                             | :ref:`get_face_index<class_FontFile_method_get_face_index>` **(** :ref:`int<class_int>` cache_index **)** |const|                                                                                                                                      |
@@ -222,6 +224,8 @@ Methods
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                              | :ref:`set_embolden<class_FontFile_method_set_embolden>` **(** :ref:`int<class_int>` cache_index, :ref:`float<class_float>` strength **)**                                                                                                              |
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                              | :ref:`set_extra_baseline_offset<class_FontFile_method_set_extra_baseline_offset>` **(** :ref:`int<class_int>` cache_index, :ref:`float<class_float>` baseline_offset **)**                                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                              | :ref:`set_extra_spacing<class_FontFile_method_set_extra_spacing>` **(** :ref:`int<class_int>` cache_index, :ref:`SpacingType<enum_TextServer_SpacingType>` spacing, :ref:`int<class_int>` value **)**                                                  |
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                              | :ref:`set_face_index<class_FontFile_method_set_face_index>` **(** :ref:`int<class_int>` cache_index, :ref:`int<class_int>` face_index **)**                                                                                                            |
@@ -752,6 +756,18 @@ Returns embolden strength, if is not equal to zero, emboldens the font outlines.
 
 ----
 
+.. _class_FontFile_method_get_extra_baseline_offset:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **get_extra_baseline_offset** **(** :ref:`int<class_int>` cache_index **)** |const|
+
+Returns extra baseline offset (as a fraction of font height).
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_FontFile_method_get_extra_spacing:
 
 .. rst-class:: classref-method
@@ -1218,6 +1234,18 @@ Sets embolden strength, if is not equal to zero, emboldens the font outlines. Ne
 
 ----
 
+.. _class_FontFile_method_set_extra_baseline_offset:
+
+.. rst-class:: classref-method
+
+void **set_extra_baseline_offset** **(** :ref:`int<class_int>` cache_index, :ref:`float<class_float>` baseline_offset **)**
+
+Sets extra baseline offset (as a fraction of font height).
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_FontFile_method_set_extra_spacing:
 
 .. rst-class:: classref-method

+ 19 - 0
classes/class_fontvariation.rst

@@ -64,6 +64,8 @@ Properties
    +---------------------------------------+--------------------------------------------------------------------------------+-----------------------------------+
    | :ref:`Font<class_Font>`               | :ref:`base_font<class_FontVariation_property_base_font>`                       |                                   |
    +---------------------------------------+--------------------------------------------------------------------------------+-----------------------------------+
+   | :ref:`float<class_float>`             | :ref:`baseline_offset<class_FontVariation_property_baseline_offset>`           | ``0.0``                           |
+   +---------------------------------------+--------------------------------------------------------------------------------+-----------------------------------+
    | :ref:`Dictionary<class_Dictionary>`   | :ref:`opentype_features<class_FontVariation_property_opentype_features>`       | ``{}``                            |
    +---------------------------------------+--------------------------------------------------------------------------------+-----------------------------------+
    | :ref:`int<class_int>`                 | :ref:`spacing_bottom<class_FontVariation_property_spacing_bottom>`             | ``0``                             |
@@ -121,6 +123,23 @@ Base font used to create a variation. If not set, default :ref:`Theme<class_Them
 
 ----
 
+.. _class_FontVariation_property_baseline_offset:
+
+.. rst-class:: classref-property
+
+:ref:`float<class_float>` **baseline_offset** = ``0.0``
+
+.. rst-class:: classref-property-setget
+
+- void **set_baseline_offset** **(** :ref:`float<class_float>` value **)**
+- :ref:`float<class_float>` **get_baseline_offset** **(** **)**
+
+Extra baseline offset (as a fraction of font height).
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_FontVariation_property_opentype_features:
 
 .. rst-class:: classref-property

+ 3 - 1
classes/class_inputeventjoypadbutton.rst

@@ -98,7 +98,9 @@ If ``true``, the button's state is pressed. If ``false``, the button's state is
 - void **set_pressure** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_pressure** **(** **)**
 
-Represents the pressure the user puts on the button with their finger, if the controller supports it. Ranges from ``0`` to ``1``.
+Represents the pressure the user puts on a pressure-sensitive button.
+
+\ *Deprecated.* This property is never set by the engine and is always ``0``.
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 46 - 13
classes/class_inputeventkey.rst

@@ -40,19 +40,21 @@ Properties
 .. table::
    :widths: auto
 
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
-   | :ref:`bool<class_bool>`           | :ref:`echo<class_InputEventKey_property_echo>`                         | ``false`` |
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
-   | :ref:`Key<enum_@GlobalScope_Key>` | :ref:`key_label<class_InputEventKey_property_key_label>`               | ``0``     |
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
-   | :ref:`Key<enum_@GlobalScope_Key>` | :ref:`keycode<class_InputEventKey_property_keycode>`                   | ``0``     |
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
-   | :ref:`Key<enum_@GlobalScope_Key>` | :ref:`physical_keycode<class_InputEventKey_property_physical_keycode>` | ``0``     |
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
-   | :ref:`bool<class_bool>`           | :ref:`pressed<class_InputEventKey_property_pressed>`                   | ``false`` |
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
-   | :ref:`int<class_int>`             | :ref:`unicode<class_InputEventKey_property_unicode>`                   | ``0``     |
-   +-----------------------------------+------------------------------------------------------------------------+-----------+
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>`                           | :ref:`echo<class_InputEventKey_property_echo>`                         | ``false`` |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`Key<enum_@GlobalScope_Key>`                 | :ref:`key_label<class_InputEventKey_property_key_label>`               | ``0``     |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`Key<enum_@GlobalScope_Key>`                 | :ref:`keycode<class_InputEventKey_property_keycode>`                   | ``0``     |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` | :ref:`location<class_InputEventKey_property_location>`                 | ``0``     |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`Key<enum_@GlobalScope_Key>`                 | :ref:`physical_keycode<class_InputEventKey_property_physical_keycode>` | ``0``     |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>`                           | :ref:`pressed<class_InputEventKey_property_pressed>`                   | ``false`` |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
+   | :ref:`int<class_int>`                             | :ref:`unicode<class_InputEventKey_property_unicode>`                   | ``0``     |
+   +---------------------------------------------------+------------------------------------------------------------------------+-----------+
 
 .. rst-class:: classref-reftable-group
 
@@ -67,6 +69,8 @@ Methods
    +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`String<class_String>`       | :ref:`as_text_keycode<class_InputEventKey_method_as_text_keycode>` **(** **)** |const|                                         |
    +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`       | :ref:`as_text_location<class_InputEventKey_method_as_text_location>` **(** **)** |const|                                       |
+   +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`String<class_String>`       | :ref:`as_text_physical_keycode<class_InputEventKey_method_as_text_physical_keycode>` **(** **)** |const|                       |
    +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`Key<enum_@GlobalScope_Key>` | :ref:`get_key_label_with_modifiers<class_InputEventKey_method_get_key_label_with_modifiers>` **(** **)** |const|               |
@@ -156,6 +160,23 @@ To get a human-readable representation of the **InputEventKey**, use ``OS.get_ke
 
 ----
 
+.. _class_InputEventKey_property_location:
+
+.. rst-class:: classref-property
+
+:ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` **location** = ``0``
+
+.. rst-class:: classref-property-setget
+
+- void **set_location** **(** :ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` value **)**
+- :ref:`KeyLocation<enum_@GlobalScope_KeyLocation>` **get_location** **(** **)**
+
+Represents the location of a key which has both left and right versions, such as :kbd:`Shift` or :kbd:`Alt`.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_InputEventKey_property_physical_keycode:
 
 .. rst-class:: classref-property
@@ -261,6 +282,18 @@ Returns a :ref:`String<class_String>` representation of the event's :ref:`keycod
 
 ----
 
+.. _class_InputEventKey_method_as_text_location:
+
+.. rst-class:: classref-method
+
+:ref:`String<class_String>` **as_text_location** **(** **)** |const|
+
+Returns a :ref:`String<class_String>` representation of the event's :ref:`location<class_InputEventKey_property_location>`. This will be a blank string if the event is not specific to a location.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_InputEventKey_method_as_text_physical_keycode:
 
 .. rst-class:: classref-method

+ 39 - 32
classes/class_inputeventmidi.rst

@@ -12,18 +12,18 @@ InputEventMIDI
 
 **Inherits:** :ref:`InputEvent<class_InputEvent>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 
-Represents an input event from a MIDI device, such as a piano.
+Represents a MIDI message from a MIDI device, such as a musical keyboard.
 
 .. rst-class:: classref-introduction-group
 
 Description
 -----------
 
-InputEventMIDI allows receiving input events from MIDI (Musical Instrument Digital Interface) devices such as a piano.
+InputEventMIDI stores information about messages from `MIDI <https://en.wikipedia.org/wiki/MIDI>`__ (Musical Instrument Digital Interface) devices. These may include musical keyboards, synthesizers, and drum machines.
 
-MIDI signals can be sent over a 5-pin MIDI connector or over USB, if your device supports both be sure to check the settings in the device to see which output it's using.
+MIDI messages can be received over a 5-pin MIDI connector or over USB. If your device supports both be sure to check the settings in the device to see which output it is using.
 
-To receive input events from MIDI devices, you need to call :ref:`OS.open_midi_inputs<class_OS_method_open_midi_inputs>`. You can check which devices are detected using :ref:`OS.get_connected_midi_inputs<class_OS_method_get_connected_midi_inputs>`.
+By default, Godot does not detect MIDI devices. You need to call :ref:`OS.open_midi_inputs<class_OS_method_open_midi_inputs>`, first. You can check which devices are detected with :ref:`OS.get_connected_midi_inputs<class_OS_method_get_connected_midi_inputs>`, and close the connection with :ref:`OS.close_midi_inputs<class_OS_method_close_midi_inputs>`.
 
 
 .. tabs::
@@ -38,16 +38,16 @@ To receive input events from MIDI devices, you need to call :ref:`OS.open_midi_i
         if input_event is InputEventMIDI:
             _print_midi_info(input_event)
     
-    func _print_midi_info(midi_event: InputEventMIDI):
+    func _print_midi_info(midi_event):
         print(midi_event)
-        print("Channel " + str(midi_event.channel))
-        print("Message " + str(midi_event.message))
-        print("Pitch " + str(midi_event.pitch))
-        print("Velocity " + str(midi_event.velocity))
-        print("Instrument " + str(midi_event.instrument))
-        print("Pressure " + str(midi_event.pressure))
-        print("Controller number: " + str(midi_event.controller_number))
-        print("Controller value: " + str(midi_event.controller_value))
+        print("Channel ", midi_event.channel)
+        print("Message ", midi_event.message)
+        print("Pitch ", midi_event.pitch)
+        print("Velocity ", midi_event.velocity)
+        print("Instrument ", midi_event.instrument)
+        print("Pressure ", midi_event.pressure)
+        print("Controller number: ", midi_event.controller_number)
+        print("Controller value: ", midi_event.controller_value)
 
  .. code-tab:: csharp
 
@@ -57,9 +57,9 @@ To receive input events from MIDI devices, you need to call :ref:`OS.open_midi_i
         GD.Print(OS.GetConnectedMidiInputs());
     }
     
-    public override void _Input(InputEvent @event)
+    public override void _Input(InputEvent inputEvent)
     {
-        if (@event is InputEventMIDI midiEvent)
+        if (inputEvent is InputEventMIDI midiEvent)
         {
             PrintMIDIInfo(midiEvent);
         }
@@ -80,7 +80,7 @@ To receive input events from MIDI devices, you need to call :ref:`OS.open_midi_i
 
 
 
-Note that Godot does not currently support MIDI output, so there is no way to emit MIDI signals from Godot. Only MIDI input works.
+\ **Note:** Godot does not support MIDI output, so there is no way to emit MIDI messages from Godot. Only MIDI input is supported.
 
 .. rst-class:: classref-introduction-group
 
@@ -139,7 +139,7 @@ Property Descriptions
 - void **set_channel** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_channel** **(** **)**
 
-The MIDI channel of this input event. There are 16 channels, so this value ranges from 0 to 15. MIDI channel 9 is reserved for the use with percussion instruments, the rest of the channels are for non-percussion instruments.
+The MIDI channel of this message, ranging from ``0`` to ``15``. MIDI channel ``9`` is reserved for percussion instruments.
 
 .. rst-class:: classref-item-separator
 
@@ -156,7 +156,7 @@ The MIDI channel of this input event. There are 16 channels, so this value range
 - void **set_controller_number** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_controller_number** **(** **)**
 
-If the message is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE>`, this indicates the controller number, otherwise this is zero. Controllers include devices such as pedals and levers.
+The unique number of the controller, if :ref:`message<class_InputEventMIDI_property_message>` is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE>`, otherwise this is ``0``. This value can be used to identify sliders for volume, balance, and panning, as well as switches and pedals on the MIDI device. See the `General MIDI specification <https://en.wikipedia.org/wiki/General_MIDI#Controller_events>`__ for a small list.
 
 .. rst-class:: classref-item-separator
 
@@ -173,7 +173,7 @@ If the message is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalSc
 - void **set_controller_value** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_controller_value** **(** **)**
 
-If the message is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE>`, this indicates the controller value, otherwise this is zero. Controllers include devices such as pedals and levers.
+The value applied to the controller. If :ref:`message<class_InputEventMIDI_property_message>` is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE>`, this value ranges from ``0`` to ``127``, otherwise it is ``0``. See also :ref:`controller_value<class_InputEventMIDI_property_controller_value>`.
 
 .. rst-class:: classref-item-separator
 
@@ -190,7 +190,9 @@ If the message is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalSc
 - void **set_instrument** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_instrument** **(** **)**
 
-The instrument of this input event. This value ranges from 0 to 127. Refer to the instrument list for `General MIDI <https://en.wikipedia.org/wiki/General_MIDI#Program_change_events>`__ to see a list of instruments, except that this value is 0-index, so subtract one from every number on that chart. A standard piano will have an instrument number of 0.
+The instrument (also called *program* or *preset*) used on this MIDI message. This value ranges from ``0`` to ``127``.
+
+To see what each value means, refer to the `General MIDI's instrument list <https://en.wikipedia.org/wiki/General_MIDI#Program_change_events>`__. Keep in mind that the list is off by 1 because it does not begin from 0. A value of ``0`` corresponds to the acoustic grand piano.
 
 .. rst-class:: classref-item-separator
 
@@ -207,15 +209,9 @@ The instrument of this input event. This value ranges from 0 to 127. Refer to th
 - void **set_message** **(** :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` value **)**
 - :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **get_message** **(** **)**
 
-Returns a value indicating the type of message for this MIDI signal. This is a member of the :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` enum.
-
-For MIDI messages between 0x80 and 0xEF, only the left half of the bits are returned as this value, as the other part is the channel (ex: 0x94 becomes 0x9). For MIDI messages from 0xF0 to 0xFF, the value is returned as-is.
-
-Notes will return :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` when activated, but they might not always return :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_OFF<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF>` when deactivated, therefore your code should treat the input as stopped if some period of time has passed.
-
-Some MIDI devices may send :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` with zero velocity instead of :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_OFF<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF>`.
+Represents the type of MIDI message (see the :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` enum).
 
-For more information, see the note in :ref:`velocity<class_InputEventMIDI_property_velocity>` and the MIDI message status byte list chart linked above.
+For more information, see the `MIDI message status byte list chart <https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-status-bytes>`__.
 
 .. rst-class:: classref-item-separator
 
@@ -232,7 +228,9 @@ For more information, see the note in :ref:`velocity<class_InputEventMIDI_proper
 - void **set_pitch** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_pitch** **(** **)**
 
-The pitch index number of this MIDI signal. This value ranges from 0 to 127. On a piano, middle C is 60, and A440 is 69, see the "MIDI note" column of the piano key frequency chart on Wikipedia for more information.
+The pitch index number of this MIDI message. This value ranges from ``0`` to ``127``.
+
+On a piano, the **middle C** is ``60``, followed by a **C-sharp** (``61``), then a **D** (``62``), and so on. Each octave is split in offsets of 12. See the "MIDI note number" column of the `piano key frequency chart <https://en.wikipedia.org/wiki/Piano_key_frequencies>`__ a full list.
 
 .. rst-class:: classref-item-separator
 
@@ -249,7 +247,9 @@ The pitch index number of this MIDI signal. This value ranges from 0 to 127. On
 - void **set_pressure** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_pressure** **(** **)**
 
-The pressure of the MIDI signal. This value ranges from 0 to 127. For many devices, this value is always zero.
+The strength of the key being pressed. This value ranges from ``0`` to ``127``.
+
+\ **Note:** For many devices, this value is always ``0``. Other devices such as musical keyboards may simulate pressure by changing the :ref:`velocity<class_InputEventMIDI_property_velocity>`, instead.
 
 .. rst-class:: classref-item-separator
 
@@ -266,9 +266,16 @@ The pressure of the MIDI signal. This value ranges from 0 to 127. For many devic
 - void **set_velocity** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_velocity** **(** **)**
 
-The velocity of the MIDI signal. This value ranges from 0 to 127. For a piano, this corresponds to how quickly the key was pressed, and is rarely above about 110 in practice.
+The velocity of the MIDI message. This value ranges from ``0`` to ``127``. For a musical keyboard, this corresponds to how quickly the key was pressed, and is rarely above ``110`` in practice.
+
+\ **Note:** Some MIDI devices may send a :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` message with ``0`` velocity and expect it to be treated the same as a :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_OFF<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF>` message. If necessary, this can be handled with a few lines of code:
+
+::
 
-\ **Note:** Some MIDI devices may send a :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` message with zero velocity and expect this to be treated the same as a :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_OFF<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF>` message, but device implementations vary so Godot reports event data exactly as received. Depending on the hardware and the needs of the game/app, this MIDI quirk can be handled robustly with a couple lines of script (check for :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` with velocity zero).
+    func _input(event):
+        if event is InputEventMIDI:
+            if event.message == MIDI_MESSAGE_NOTE_ON and event.velocity > 0:
+                print("Note pressed!")
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 5 - 5
classes/class_missingnode.rst

@@ -19,7 +19,9 @@ An internal editor class intended for keeping the data of unrecognized nodes.
 Description
 -----------
 
-This is an internal editor class intended for keeping data of nodes of unknown type (most likely this type was supplied by an extension that is no longer loaded). It can't be manually instantiated or placed in the scene. Ignore it if you don't know what it is.
+This is an internal editor class intended for keeping data of nodes of unknown type (most likely this type was supplied by an extension that is no longer loaded). It can't be manually instantiated or placed in a scene.
+
+\ **Warning:** Ignore missing nodes unless you know what you are doing. Existing properties on a missing node can be freely modified in code, regardless of the type they are intended to be.
 
 .. rst-class:: classref-reftable-group
 
@@ -55,7 +57,7 @@ Property Descriptions
 - void **set_original_class** **(** :ref:`String<class_String>` value **)**
 - :ref:`String<class_String>` **get_original_class** **(** **)**
 
-Returns the name of the type this node was originally.
+The name of the class this node was supposed to be (see :ref:`Object.get_class<class_Object_method_get_class>`).
 
 .. rst-class:: classref-item-separator
 
@@ -72,9 +74,7 @@ Returns the name of the type this node was originally.
 - void **set_recording_properties** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_recording_properties** **(** **)**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If set to ``true``, allows new properties to be added on top of the existing ones with :ref:`Object.set<class_Object_method_set>`.
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 5 - 5
classes/class_missingresource.rst

@@ -19,7 +19,9 @@ An internal editor class intended for keeping the data of unrecognized resources
 Description
 -----------
 
-This is an internal editor class intended for keeping data of resources of unknown type (most likely this type was supplied by an extension that is no longer loaded). It can't be manually instantiated or placed in the scene. Ignore it if you don't know what it is.
+This is an internal editor class intended for keeping data of resources of unknown type (most likely this type was supplied by an extension that is no longer loaded). It can't be manually instantiated or placed in a scene.
+
+\ **Warning:** Ignore missing resources unless you know what you are doing. Existing properties on a missing resource can be freely modified in code, regardless of the type they are intended to be.
 
 .. rst-class:: classref-reftable-group
 
@@ -55,7 +57,7 @@ Property Descriptions
 - void **set_original_class** **(** :ref:`String<class_String>` value **)**
 - :ref:`String<class_String>` **get_original_class** **(** **)**
 
-Returns the name of the class this resource was originally.
+The name of the class this resource was supposed to be (see :ref:`Object.get_class<class_Object_method_get_class>`).
 
 .. rst-class:: classref-item-separator
 
@@ -72,9 +74,7 @@ Returns the name of the class this resource was originally.
 - void **set_recording_properties** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_recording_properties** **(** **)**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If set to ``true``, allows new properties to be added on top of the existing ones with :ref:`Object.set<class_Object_method_set>`.
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 22 - 6
classes/class_node.rst

@@ -1112,7 +1112,7 @@ The owner of this node. The owner must be an ancestor of this node. When packing
 - void **set_process_mode** **(** :ref:`ProcessMode<enum_Node_ProcessMode>` value **)**
 - :ref:`ProcessMode<enum_Node_ProcessMode>` **get_process_mode** **(** **)**
 
-The node's processing behavior (see :ref:`ProcessMode<enum_Node_ProcessMode>`). To check if the node is able to process, with the current mode and :ref:`SceneTree.paused<class_SceneTree_property_paused>`, use :ref:`can_process<class_Node_method_can_process>`.
+The node's processing behavior (see :ref:`ProcessMode<enum_Node_ProcessMode>`). To check if the node can process in its current mode, use :ref:`can_process<class_Node_method_can_process>`.
 
 .. rst-class:: classref-item-separator
 
@@ -1552,7 +1552,19 @@ This function ensures that the calling of this function will succeed, no matter
 
 :ref:`bool<class_bool>` **can_process** **(** **)** |const|
 
-Returns ``true`` if the node can receive processing notifications and input callbacks (:ref:`NOTIFICATION_PROCESS<class_Node_constant_NOTIFICATION_PROCESS>`, :ref:`_input<class_Node_private_method__input>`, etc) from the :ref:`SceneTree<class_SceneTree>` and :ref:`Viewport<class_Viewport>`. The value depends on both the current :ref:`process_mode<class_Node_property_process_mode>` and :ref:`SceneTree.paused<class_SceneTree_property_paused>`. Returns ``false`` if the node is not inside the tree.
+Returns ``true`` if the node can receive processing notifications and input callbacks (:ref:`NOTIFICATION_PROCESS<class_Node_constant_NOTIFICATION_PROCESS>`, :ref:`_input<class_Node_private_method__input>`, etc) from the :ref:`SceneTree<class_SceneTree>` and :ref:`Viewport<class_Viewport>`. The returned value depends on :ref:`process_mode<class_Node_property_process_mode>`:
+
+- If set to :ref:`PROCESS_MODE_PAUSABLE<class_Node_constant_PROCESS_MODE_PAUSABLE>`, returns ``true`` when the game is processing, i.e. :ref:`SceneTree.paused<class_SceneTree_property_paused>` is ``false``;
+
+- If set to :ref:`PROCESS_MODE_WHEN_PAUSED<class_Node_constant_PROCESS_MODE_WHEN_PAUSED>`, returns ``true`` when the game is paused, i.e. :ref:`SceneTree.paused<class_SceneTree_property_paused>` is ``true``;
+
+- If set to :ref:`PROCESS_MODE_ALWAYS<class_Node_constant_PROCESS_MODE_ALWAYS>`, always returns ``true``;
+
+- If set to :ref:`PROCESS_MODE_DISABLED<class_Node_constant_PROCESS_MODE_DISABLED>`, always returns ``false``;
+
+- If set to :ref:`PROCESS_MODE_INHERIT<class_Node_constant_PROCESS_MODE_INHERIT>`, use the parent node's :ref:`process_mode<class_Node_property_process_mode>` to determine the result.
+
+If the node is not inside the tree, returns ``false`` no matter the value of :ref:`process_mode<class_Node_property_process_mode>`.
 
 .. rst-class:: classref-item-separator
 
@@ -1564,7 +1576,7 @@ Returns ``true`` if the node can receive processing notifications and input call
 
 :ref:`Tween<class_Tween>` **create_tween** **(** **)**
 
-Creates a new :ref:`Tween<class_Tween>` and binds it to this node. Fails if the node is not inside the tree.
+Creates a new :ref:`Tween<class_Tween>` and binds it to this node.
 
 This is the equivalent of doing:
 
@@ -1581,7 +1593,9 @@ This is the equivalent of doing:
 
 
 
-The Tween will start automatically on the next process frame or physics frame (depending on :ref:`TweenProcessMode<enum_Tween_TweenProcessMode>`).
+The Tween will start automatically on the next process frame or physics frame (depending on :ref:`TweenProcessMode<enum_Tween_TweenProcessMode>`). See :ref:`Tween.bind_node<class_Tween_method_bind_node>` for more info on Tweens bound to nodes.
+
+\ **Note:** The method can still be used when the node is not inside :ref:`SceneTree<class_SceneTree>`. It can fail in an unlikely case of using a custom :ref:`MainLoop<class_MainLoop>`.
 
 .. rst-class:: classref-item-separator
 
@@ -2605,7 +2619,7 @@ If ``recursive`` is ``true``, the given peer is recursively set as the authority
 
 void **set_physics_process** **(** :ref:`bool<class_bool>` enable **)**
 
-If set to ``true``, enables physics (fixed framerate) processing. When a node is being processed, it will receive a :ref:`NOTIFICATION_PHYSICS_PROCESS<class_Node_constant_NOTIFICATION_PHYSICS_PROCESS>` at a fixed (usually 60 FPS, see :ref:`Engine.physics_ticks_per_second<class_Engine_property_physics_ticks_per_second>` to change) interval (and the :ref:`_physics_process<class_Node_private_method__physics_process>` callback will be called if exists). Enabled automatically if :ref:`_physics_process<class_Node_private_method__physics_process>` is overridden.
+If set to ``true``, enables physics (fixed framerate) processing. When a node is being processed, it will receive a :ref:`NOTIFICATION_PHYSICS_PROCESS<class_Node_constant_NOTIFICATION_PHYSICS_PROCESS>` at a fixed (usually 60 FPS, see :ref:`Engine.physics_ticks_per_second<class_Engine_property_physics_ticks_per_second>` to change) interval (and the :ref:`_physics_process<class_Node_private_method__physics_process>` callback will be called if it exists). Enabled automatically if :ref:`_physics_process<class_Node_private_method__physics_process>` is overridden.
 
 .. rst-class:: classref-item-separator
 
@@ -2631,7 +2645,9 @@ If set to ``true``, enables internal physics for this node. Internal physics pro
 
 void **set_process** **(** :ref:`bool<class_bool>` enable **)**
 
-If set to ``true``, enables processing. When a node is being processed, it will receive a :ref:`NOTIFICATION_PROCESS<class_Node_constant_NOTIFICATION_PROCESS>` on every drawn frame (and the :ref:`_process<class_Node_private_method__process>` callback will be called if exists). Enabled automatically if :ref:`_process<class_Node_private_method__process>` is overridden.
+If set to ``true``, enables processing. When a node is being processed, it will receive a :ref:`NOTIFICATION_PROCESS<class_Node_constant_NOTIFICATION_PROCESS>` on every drawn frame (and the :ref:`_process<class_Node_private_method__process>` callback will be called if it exists). Enabled automatically if :ref:`_process<class_Node_private_method__process>` is overridden.
+
+\ **Note:** This method only affects the :ref:`_process<class_Node_private_method__process>` callback, i.e. it has no effect on other callbacks like :ref:`_physics_process<class_Node_private_method__physics_process>`. If you want to disable all processing for the node, set :ref:`process_mode<class_Node_property_process_mode>` to :ref:`PROCESS_MODE_DISABLED<class_Node_constant_PROCESS_MODE_DISABLED>`.
 
 .. rst-class:: classref-item-separator
 

+ 71 - 41
classes/class_object.rst

@@ -351,11 +351,13 @@ Combined with :ref:`_set<class_Object_private_method__set>` and :ref:`_get_prope
 
 :ref:`Dictionary[]<class_Dictionary>` **_get_property_list** **(** **)** |virtual|
 
-Override this method to customize how script properties should be handled by the engine.
+Override this method to provide a custom list of additional properties to handle by the engine.
 
 Should return a property list, as an :ref:`Array<class_Array>` of dictionaries. The result is added to the array of :ref:`get_property_list<class_Object_method_get_property_list>`, and should be formatted in the same way. Each :ref:`Dictionary<class_Dictionary>` must at least contain the ``name`` and ``type`` entries.
 
-The example below displays ``hammer_type`` in the Inspector dock, only if ``holding_hammer`` is ``true``:
+You can use :ref:`_property_can_revert<class_Object_private_method__property_can_revert>` and :ref:`_property_get_revert<class_Object_private_method__property_get_revert>` to customize the default values of the properties added by this method.
+
+The example below displays a list of numbers shown as words going from ``ZERO`` to ``FIVE``, with ``number_count`` controlling the size of the list:
 
 
 .. tabs::
@@ -363,79 +365,107 @@ The example below displays ``hammer_type`` in the Inspector dock, only if ``hold
  .. code-tab:: gdscript
 
     @tool
-    extends Node2D
+    extends Node
     
-    @export var holding_hammer = false:
-        set(value):
-            holding_hammer = value
+    @export var number_count = 3:
+        set(nc):
+            number_count = nc
+            numbers.resize(number_count)
             notify_property_list_changed()
-    var hammer_type = 0
     
-    func _get_property_list():
-        # By default, `hammer_type` is not visible in the editor.
-        var property_usage = PROPERTY_USAGE_NO_EDITOR
-    
-        if holding_hammer:
-            property_usage = PROPERTY_USAGE_DEFAULT
+    var numbers = PackedInt32Array([0, 0, 0])
     
+    func _get_property_list():
         var properties = []
-        properties.append({
-            "name": "hammer_type",
-            "type": TYPE_INT,
-            "usage": property_usage, # See above assignment.
-            "hint": PROPERTY_HINT_ENUM,
-            "hint_string": "Wooden,Iron,Golden,Enchanted"
-        })
+    
+        for i in range(number_count):
+            properties.append({
+                "name": "number_%d" % i,
+                "type": TYPE_INT,
+                "hint": PROPERTY_HINT_ENUM,
+                "hint_string": "ZERO,ONE,TWO,THREE,FOUR,FIVE",
+            })
     
         return properties
+    
+    func _get(property):
+        if property.begins_with("number_"):
+            var index = property.get_slice("_", 1).to_int()
+            return numbers[index]
+    
+    func _set(property, value):
+        if property.begins_with("number_"):
+            var index = property.get_slice("_", 1).to_int()
+            numbers[index] = value
+            return true
+        return false
 
  .. code-tab:: csharp
 
     [Tool]
-    public partial class MyNode2D : Node2D
+    public partial class MyNode : Node
     {
-        private bool _holdingHammer;
+        private int _numberCount;
     
         [Export]
-        public bool HoldingHammer
+        public int NumberCount
         {
-            get => _holdingHammer;
+            get => _numberCount;
             set
             {
-                _holdingHammer = value;
+                _numberCount = value;
+                _numbers.Resize(_numberCount);
                 NotifyPropertyListChanged();
             }
         }
     
-        public int HammerType { get; set; }
+        private List<int> _numbers = new();
     
         public override Godot.Collections.Array<Godot.Collections.Dictionary> _GetPropertyList()
         {
-            // By default, `HammerType` is not visible in the editor.
-            var propertyUsage = PropertyUsageFlags.NoEditor;
+            var properties = new Godot.Collections.Array<Godot.Collections.Dictionary>();
     
-            if (HoldingHammer)
+            for (int i = 0; i < _numberCount; i++)
             {
-                propertyUsage = PropertyUsageFlags.Default;
+                properties.Add(new Godot.Collections.Dictionary()
+                {
+                    { "name", $"number_{i}" },
+                    { "type", (int)Variant.Type.Int },
+                    { "hint", (int)PropertyHint.Enum },
+                    { "hint_string", "Zero,One,Two,Three,Four,Five" },
+                });
             }
     
-            var properties = new Godot.Collections.Array<Godot.Collections.Dictionary>();
-            properties.Add(new Godot.Collections.Dictionary()
+            return properties;
+        }
+    
+        public override Variant _Get(StringName property)
+        {
+            string propertyName = property.ToString();
+            if (propertyName.StartsWith("number_"))
             {
-                { "name", "HammerType" },
-                { "type", (int)Variant.Type.Int },
-                { "usage", (int)propertyUsage }, // See above assignment.
-                { "hint", (int)PropertyHint.Enum },
-                { "hint_string", "Wooden,Iron,Golden,Enchanted" }
-            });
+                int index = int.Parse(propertyName.Substring("number_".Length));
+                return _numbers[index];
+            }
+            return default;
+        }
     
-            return properties;
+        public override bool _Set(StringName property, Variant value)
+        {
+            string propertyName = property.ToString();
+            if (propertyName.StartsWith("number_"))
+            {
+                int index = int.Parse(propertyName.Substring("number_".Length));
+                numbers[index] = value.As<int>();
+                return true;
+            }
+            return false;
         }
     }
 
 
 
-\ **Note:** This method is intended for advanced purposes. For most common use cases, the scripting languages offer easier ways to handle properties. See :ref:`@GDScript.@export<class_@GDScript_annotation_@export>`, :ref:`@GDScript.@export_enum<class_@GDScript_annotation_@export_enum>`, :ref:`@GDScript.@export_group<class_@GDScript_annotation_@export_group>`, etc.
+\ **Note:** This method is intended for advanced purposes. For most common use cases, the scripting languages offer easier ways to handle properties. See :ref:`@GDScript.@export<class_@GDScript_annotation_@export>`, :ref:`@GDScript.@export_enum<class_@GDScript_annotation_@export_enum>`, :ref:`@GDScript.@export_group<class_@GDScript_annotation_@export_group>`, etc. If you want to customize exported properties, use :ref:`_validate_property<class_Object_private_method__validate_property>`.
 
 \ **Note:** If the object's script is not :ref:`@GDScript.@tool<class_@GDScript_annotation_@tool>`, this method will not be called in the editor.
 
@@ -610,7 +640,7 @@ Override this method to customize the return value of :ref:`to_string<class_Obje
 
 void **_validate_property** **(** :ref:`Dictionary<class_Dictionary>` property **)** |virtual|
 
-Override this method to customize existing properties. Every property info goes through this method. The dictionary contents is the same as in :ref:`_get_property_list<class_Object_private_method__get_property_list>`.
+Override this method to customize existing properties. Every property info goes through this method, except properties added with :ref:`_get_property_list<class_Object_private_method__get_property_list>`. The dictionary contents is the same as in :ref:`_get_property_list<class_Object_private_method__get_property_list>`.
 
 
 .. tabs::

+ 63 - 49
classes/class_openxrextensionwrapperextension.rst

@@ -29,55 +29,57 @@ Methods
 .. table::
    :widths: auto
 
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`Dictionary<class_Dictionary>`                 | :ref:`_get_requested_extensions<class_OpenXRExtensionWrapperExtension_private_method__get_requested_extensions>` **(** **)** |virtual|                                                                |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_before_instance_created<class_OpenXRExtensionWrapperExtension_private_method__on_before_instance_created>` **(** **)** |virtual|                                                            |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`                             | :ref:`_on_event_polled<class_OpenXRExtensionWrapperExtension_private_method__on_event_polled>` **(** const void* event **)** |virtual|                                                                |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_instance_created<class_OpenXRExtensionWrapperExtension_private_method__on_instance_created>` **(** :ref:`int<class_int>` instance **)** |virtual|                                           |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_instance_destroyed<class_OpenXRExtensionWrapperExtension_private_method__on_instance_destroyed>` **(** **)** |virtual|                                                                      |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_pre_render<class_OpenXRExtensionWrapperExtension_private_method__on_pre_render>` **(** **)** |virtual|                                                                                      |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_process<class_OpenXRExtensionWrapperExtension_private_method__on_process>` **(** **)** |virtual|                                                                                            |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_register_metadata<class_OpenXRExtensionWrapperExtension_private_method__on_register_metadata>` **(** **)** |virtual|                                                                        |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_session_created<class_OpenXRExtensionWrapperExtension_private_method__on_session_created>` **(** :ref:`int<class_int>` session **)** |virtual|                                              |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_session_destroyed<class_OpenXRExtensionWrapperExtension_private_method__on_session_destroyed>` **(** **)** |virtual|                                                                        |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_exiting<class_OpenXRExtensionWrapperExtension_private_method__on_state_exiting>` **(** **)** |virtual|                                                                                |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_focused<class_OpenXRExtensionWrapperExtension_private_method__on_state_focused>` **(** **)** |virtual|                                                                                |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_idle<class_OpenXRExtensionWrapperExtension_private_method__on_state_idle>` **(** **)** |virtual|                                                                                      |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_loss_pending<class_OpenXRExtensionWrapperExtension_private_method__on_state_loss_pending>` **(** **)** |virtual|                                                                      |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_ready<class_OpenXRExtensionWrapperExtension_private_method__on_state_ready>` **(** **)** |virtual|                                                                                    |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_stopping<class_OpenXRExtensionWrapperExtension_private_method__on_state_stopping>` **(** **)** |virtual|                                                                              |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_synchronized<class_OpenXRExtensionWrapperExtension_private_method__on_state_synchronized>` **(** **)** |virtual|                                                                      |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`_on_state_visible<class_OpenXRExtensionWrapperExtension_private_method__on_state_visible>` **(** **)** |virtual|                                                                                |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`                               | :ref:`_set_instance_create_info_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_instance_create_info_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|   |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`                               | :ref:`_set_session_create_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_session_create_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|               |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`                               | :ref:`_set_swapchain_create_info_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_swapchain_create_info_and_get_next_pointer>` **(** void* next_pointer **)** |virtual| |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`                               | :ref:`_set_system_properties_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_system_properties_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|         |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`OpenXRAPIExtension<class_OpenXRAPIExtension>` | :ref:`get_openxr_api<class_OpenXRExtensionWrapperExtension_method_get_openxr_api>` **(** **)**                                                                                                        |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | void                                                | :ref:`register_extension_wrapper<class_OpenXRExtensionWrapperExtension_method_register_extension_wrapper>` **(** **)**                                                                                |
-   +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Dictionary<class_Dictionary>`                 | :ref:`_get_requested_extensions<class_OpenXRExtensionWrapperExtension_private_method__get_requested_extensions>` **(** **)** |virtual|                                                                                                |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_before_instance_created<class_OpenXRExtensionWrapperExtension_private_method__on_before_instance_created>` **(** **)** |virtual|                                                                                            |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                             | :ref:`_on_event_polled<class_OpenXRExtensionWrapperExtension_private_method__on_event_polled>` **(** const void* event **)** |virtual|                                                                                                |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_instance_created<class_OpenXRExtensionWrapperExtension_private_method__on_instance_created>` **(** :ref:`int<class_int>` instance **)** |virtual|                                                                           |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_instance_destroyed<class_OpenXRExtensionWrapperExtension_private_method__on_instance_destroyed>` **(** **)** |virtual|                                                                                                      |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_pre_render<class_OpenXRExtensionWrapperExtension_private_method__on_pre_render>` **(** **)** |virtual|                                                                                                                      |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_process<class_OpenXRExtensionWrapperExtension_private_method__on_process>` **(** **)** |virtual|                                                                                                                            |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_register_metadata<class_OpenXRExtensionWrapperExtension_private_method__on_register_metadata>` **(** **)** |virtual|                                                                                                        |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_session_created<class_OpenXRExtensionWrapperExtension_private_method__on_session_created>` **(** :ref:`int<class_int>` session **)** |virtual|                                                                              |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_session_destroyed<class_OpenXRExtensionWrapperExtension_private_method__on_session_destroyed>` **(** **)** |virtual|                                                                                                        |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_exiting<class_OpenXRExtensionWrapperExtension_private_method__on_state_exiting>` **(** **)** |virtual|                                                                                                                |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_focused<class_OpenXRExtensionWrapperExtension_private_method__on_state_focused>` **(** **)** |virtual|                                                                                                                |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_idle<class_OpenXRExtensionWrapperExtension_private_method__on_state_idle>` **(** **)** |virtual|                                                                                                                      |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_loss_pending<class_OpenXRExtensionWrapperExtension_private_method__on_state_loss_pending>` **(** **)** |virtual|                                                                                                      |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_ready<class_OpenXRExtensionWrapperExtension_private_method__on_state_ready>` **(** **)** |virtual|                                                                                                                    |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_stopping<class_OpenXRExtensionWrapperExtension_private_method__on_state_stopping>` **(** **)** |virtual|                                                                                                              |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_synchronized<class_OpenXRExtensionWrapperExtension_private_method__on_state_synchronized>` **(** **)** |virtual|                                                                                                      |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`_on_state_visible<class_OpenXRExtensionWrapperExtension_private_method__on_state_visible>` **(** **)** |virtual|                                                                                                                |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                               | :ref:`_set_hand_joint_locations_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_hand_joint_locations_and_get_next_pointer>` **(** :ref:`int<class_int>` hand_index, void* next_pointer **)** |virtual| |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                               | :ref:`_set_instance_create_info_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_instance_create_info_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|                                   |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                               | :ref:`_set_session_create_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_session_create_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|                                               |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                               | :ref:`_set_swapchain_create_info_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_swapchain_create_info_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|                                 |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                               | :ref:`_set_system_properties_and_get_next_pointer<class_OpenXRExtensionWrapperExtension_private_method__set_system_properties_and_get_next_pointer>` **(** void* next_pointer **)** |virtual|                                         |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`OpenXRAPIExtension<class_OpenXRAPIExtension>` | :ref:`get_openxr_api<class_OpenXRExtensionWrapperExtension_method_get_openxr_api>` **(** **)**                                                                                                                                        |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                | :ref:`register_extension_wrapper<class_OpenXRExtensionWrapperExtension_method_register_extension_wrapper>` **(** **)**                                                                                                                |
+   +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 .. rst-class:: classref-section-separator
 
@@ -310,6 +312,18 @@ Called when the OpenXR session state is changed to visible. This means OpenXR is
 
 ----
 
+.. _class_OpenXRExtensionWrapperExtension_private_method__set_hand_joint_locations_and_get_next_pointer:
+
+.. rst-class:: classref-method
+
+:ref:`int<class_int>` **_set_hand_joint_locations_and_get_next_pointer** **(** :ref:`int<class_int>` hand_index, void* next_pointer **)** |virtual|
+
+Adds additional data structures when each hand tracker is created.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_OpenXRExtensionWrapperExtension_private_method__set_instance_create_info_and_get_next_pointer:
 
 .. rst-class:: classref-method

+ 456 - 2
classes/class_physicsserver3d.rst

@@ -296,8 +296,72 @@ Methods
    +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                              | :ref:`slider_joint_set_param<class_PhysicsServer3D_method_slider_joint_set_param>` **(** :ref:`RID<class_RID>` joint, :ref:`SliderJointParam<enum_PhysicsServer3D_SliderJointParam>` param, :ref:`float<class_float>` value **)**                                                              |
    +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_add_collision_exception<class_PhysicsServer3D_method_soft_body_add_collision_exception>` **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` body_b **)**                                                                                                                  |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`RID<class_RID>`                                             | :ref:`soft_body_create<class_PhysicsServer3D_method_soft_body_create>` **(** **)**                                                                                                                                                                                                             |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`AABB<class_AABB>`                                           | :ref:`soft_body_get_bounds<class_PhysicsServer3D_method_soft_body_get_bounds>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                                                  |
    +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                                             | :ref:`soft_body_get_collision_layer<class_PhysicsServer3D_method_soft_body_get_collision_layer>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                                |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                                             | :ref:`soft_body_get_collision_mask<class_PhysicsServer3D_method_soft_body_get_collision_mask>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                                  |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                         | :ref:`soft_body_get_damping_coefficient<class_PhysicsServer3D_method_soft_body_get_damping_coefficient>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                        |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                         | :ref:`soft_body_get_drag_coefficient<class_PhysicsServer3D_method_soft_body_get_drag_coefficient>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                              |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                         | :ref:`soft_body_get_linear_stiffness<class_PhysicsServer3D_method_soft_body_get_linear_stiffness>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                              |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Vector3<class_Vector3>`                                     | :ref:`soft_body_get_point_global_position<class_PhysicsServer3D_method_soft_body_get_point_global_position>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index **)** |const|                                                                                                 |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                         | :ref:`soft_body_get_pressure_coefficient<class_PhysicsServer3D_method_soft_body_get_pressure_coefficient>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                      |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                                             | :ref:`soft_body_get_simulation_precision<class_PhysicsServer3D_method_soft_body_get_simulation_precision>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                      |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`RID<class_RID>`                                             | :ref:`soft_body_get_space<class_PhysicsServer3D_method_soft_body_get_space>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                                                    |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Variant<class_Variant>`                                     | :ref:`soft_body_get_state<class_PhysicsServer3D_method_soft_body_get_state>` **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer3D_BodyState>` state **)** |const|                                                                                                            |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                         | :ref:`soft_body_get_total_mass<class_PhysicsServer3D_method_soft_body_get_total_mass>` **(** :ref:`RID<class_RID>` body **)** |const|                                                                                                                                                          |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                                           | :ref:`soft_body_is_point_pinned<class_PhysicsServer3D_method_soft_body_is_point_pinned>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index **)** |const|                                                                                                                     |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_move_point<class_PhysicsServer3D_method_soft_body_move_point>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index, :ref:`Vector3<class_Vector3>` global_position **)**                                                                                        |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_pin_point<class_PhysicsServer3D_method_soft_body_pin_point>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index, :ref:`bool<class_bool>` pin **)**                                                                                                            |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_remove_all_pinned_points<class_PhysicsServer3D_method_soft_body_remove_all_pinned_points>` **(** :ref:`RID<class_RID>` body **)**                                                                                                                                              |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_remove_collision_exception<class_PhysicsServer3D_method_soft_body_remove_collision_exception>` **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` body_b **)**                                                                                                            |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_collision_layer<class_PhysicsServer3D_method_soft_body_set_collision_layer>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` layer **)**                                                                                                                           |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_collision_mask<class_PhysicsServer3D_method_soft_body_set_collision_mask>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` mask **)**                                                                                                                              |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_damping_coefficient<class_PhysicsServer3D_method_soft_body_set_damping_coefficient>` **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` damping_coefficient **)**                                                                                                 |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_drag_coefficient<class_PhysicsServer3D_method_soft_body_set_drag_coefficient>` **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` drag_coefficient **)**                                                                                                          |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_linear_stiffness<class_PhysicsServer3D_method_soft_body_set_linear_stiffness>` **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` stiffness **)**                                                                                                                 |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_mesh<class_PhysicsServer3D_method_soft_body_set_mesh>` **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` mesh **)**                                                                                                                                                  |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_pressure_coefficient<class_PhysicsServer3D_method_soft_body_set_pressure_coefficient>` **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` pressure_coefficient **)**                                                                                              |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_ray_pickable<class_PhysicsServer3D_method_soft_body_set_ray_pickable>` **(** :ref:`RID<class_RID>` body, :ref:`bool<class_bool>` enable **)**                                                                                                                              |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_simulation_precision<class_PhysicsServer3D_method_soft_body_set_simulation_precision>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` simulation_precision **)**                                                                                                  |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_space<class_PhysicsServer3D_method_soft_body_set_space>` **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` space **)**                                                                                                                                               |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_state<class_PhysicsServer3D_method_soft_body_set_state>` **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer3D_BodyState>` state, :ref:`Variant<class_Variant>` variant **)**                                                                             |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_total_mass<class_PhysicsServer3D_method_soft_body_set_total_mass>` **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` total_mass **)**                                                                                                                            |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_set_transform<class_PhysicsServer3D_method_soft_body_set_transform>` **(** :ref:`RID<class_RID>` body, :ref:`Transform3D<class_Transform3D>` transform **)**                                                                                                                   |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                              | :ref:`soft_body_update_rendering_server<class_PhysicsServer3D_method_soft_body_update_rendering_server>` **(** :ref:`RID<class_RID>` body, :ref:`PhysicsServer3DRenderingServerHandler<class_PhysicsServer3DRenderingServerHandler>` rendering_server_handler **)**                            |
+   +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`RID<class_RID>`                                             | :ref:`space_create<class_PhysicsServer3D_method_space_create>` **(** **)**                                                                                                                                                                                                                     |
    +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`PhysicsDirectSpaceState3D<class_PhysicsDirectSpaceState3D>` | :ref:`space_get_direct_state<class_PhysicsServer3D_method_space_get_direct_state>` **(** :ref:`RID<class_RID>` space **)**                                                                                                                                                                     |
@@ -3267,15 +3331,405 @@ Gets a slider_joint parameter (see :ref:`SliderJointParam<enum_PhysicsServer3D_S
 
 ----
 
+.. _class_PhysicsServer3D_method_soft_body_add_collision_exception:
+
+.. rst-class:: classref-method
+
+void **soft_body_add_collision_exception** **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` body_b **)**
+
+Adds the given body to the list of bodies exempt from collisions.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_create:
+
+.. rst-class:: classref-method
+
+:ref:`RID<class_RID>` **soft_body_create** **(** **)**
+
+Creates a new soft body and returns its internal :ref:`RID<class_RID>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_PhysicsServer3D_method_soft_body_get_bounds:
 
 .. rst-class:: classref-method
 
 :ref:`AABB<class_AABB>` **soft_body_get_bounds** **(** :ref:`RID<class_RID>` body **)** |const|
 
-.. container:: contribute
+Returns the bounds of the given soft body in global coordinates.
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_collision_layer:
+
+.. rst-class:: classref-method
+
+:ref:`int<class_int>` **soft_body_get_collision_layer** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the physics layer or layers that the given soft body belongs to.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_collision_mask:
+
+.. rst-class:: classref-method
+
+:ref:`int<class_int>` **soft_body_get_collision_mask** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the physics layer or layers that the given soft body can collide with.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_damping_coefficient:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **soft_body_get_damping_coefficient** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the damping coefficient of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_drag_coefficient:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **soft_body_get_drag_coefficient** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the drag coefficient of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_linear_stiffness:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **soft_body_get_linear_stiffness** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the linear stiffness of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_point_global_position:
+
+.. rst-class:: classref-method
+
+:ref:`Vector3<class_Vector3>` **soft_body_get_point_global_position** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index **)** |const|
+
+Returns the current position of the given soft body point in global coordinates.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_pressure_coefficient:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **soft_body_get_pressure_coefficient** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the pressure coefficient of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_simulation_precision:
+
+.. rst-class:: classref-method
+
+:ref:`int<class_int>` **soft_body_get_simulation_precision** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the simulation precision of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_space:
+
+.. rst-class:: classref-method
+
+:ref:`RID<class_RID>` **soft_body_get_space** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the :ref:`RID<class_RID>` of the space assigned to the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_state:
+
+.. rst-class:: classref-method
+
+:ref:`Variant<class_Variant>` **soft_body_get_state** **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer3D_BodyState>` state **)** |const|
+
+Returns the given soft body state (see :ref:`BodyState<enum_PhysicsServer3D_BodyState>` constants).
+
+\ **Note:** Godot's default physics implementation does not support :ref:`BODY_STATE_LINEAR_VELOCITY<class_PhysicsServer3D_constant_BODY_STATE_LINEAR_VELOCITY>`, :ref:`BODY_STATE_ANGULAR_VELOCITY<class_PhysicsServer3D_constant_BODY_STATE_ANGULAR_VELOCITY>`, :ref:`BODY_STATE_SLEEPING<class_PhysicsServer3D_constant_BODY_STATE_SLEEPING>`, or :ref:`BODY_STATE_CAN_SLEEP<class_PhysicsServer3D_constant_BODY_STATE_CAN_SLEEP>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_get_total_mass:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **soft_body_get_total_mass** **(** :ref:`RID<class_RID>` body **)** |const|
+
+Returns the total mass assigned to the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_is_point_pinned:
+
+.. rst-class:: classref-method
+
+:ref:`bool<class_bool>` **soft_body_is_point_pinned** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index **)** |const|
+
+Returns whether the given soft body point is pinned.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_move_point:
+
+.. rst-class:: classref-method
+
+void **soft_body_move_point** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index, :ref:`Vector3<class_Vector3>` global_position **)**
+
+Moves the given soft body point to a position in global coordinates.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_pin_point:
+
+.. rst-class:: classref-method
+
+void **soft_body_pin_point** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` point_index, :ref:`bool<class_bool>` pin **)**
+
+Pins or unpins the given soft body point based on the value of ``pin``.
+
+\ **Note:** Pinning a point effectively makes it kinematic, preventing it from being affected by forces, but you can still move it using :ref:`soft_body_move_point<class_PhysicsServer3D_method_soft_body_move_point>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_remove_all_pinned_points:
+
+.. rst-class:: classref-method
+
+void **soft_body_remove_all_pinned_points** **(** :ref:`RID<class_RID>` body **)**
+
+Unpins all points of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_remove_collision_exception:
+
+.. rst-class:: classref-method
+
+void **soft_body_remove_collision_exception** **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` body_b **)**
+
+Removes the given body from the list of bodies exempt from collisions.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_collision_layer:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_collision_layer** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` layer **)**
+
+Sets the physics layer or layers the given soft body belongs to.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_collision_mask:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_collision_mask** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` mask **)**
+
+Sets the physics layer or layers the given soft body can collide with.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_damping_coefficient:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_damping_coefficient** **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` damping_coefficient **)**
+
+Sets the damping coefficient of the given soft body. Higher values will slow down the body more noticeably when forces are applied.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_drag_coefficient:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_drag_coefficient** **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` drag_coefficient **)**
+
+Sets the drag coefficient of the given soft body. Higher values increase this body's air resistance.
+
+\ **Note:** This value is currently unused by Godot's default physics implementation.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_linear_stiffness:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_linear_stiffness** **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` stiffness **)**
+
+Sets the linear stiffness of the given soft body. Higher values will result in a stiffer body, while lower values will increase the body's ability to bend. The value can be between ``0.0`` and ``1.0`` (inclusive).
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_mesh:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_mesh** **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` mesh **)**
+
+Sets the mesh of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_pressure_coefficient:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_pressure_coefficient** **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` pressure_coefficient **)**
+
+Sets the pressure coefficient of the given soft body. Simulates pressure build-up from inside this body. Higher values increase the strength of this effect.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_ray_pickable:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_ray_pickable** **(** :ref:`RID<class_RID>` body, :ref:`bool<class_bool>` enable **)**
+
+Sets whether the given soft body will be pickable when using object picking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_simulation_precision:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_simulation_precision** **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` simulation_precision **)**
+
+Sets the simulation precision of the given soft body. Increasing this value will improve the resulting simulation, but can affect performance. Use with care.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_space:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_space** **(** :ref:`RID<class_RID>` body, :ref:`RID<class_RID>` space **)**
+
+Assigns a space to the given soft body (see :ref:`space_create<class_PhysicsServer3D_method_space_create>`).
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_state:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_state** **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer3D_BodyState>` state, :ref:`Variant<class_Variant>` variant **)**
+
+Sets the given body state for the given body (see :ref:`BodyState<enum_PhysicsServer3D_BodyState>` constants).
+
+\ **Note:** Godot's default physics implementation does not support :ref:`BODY_STATE_LINEAR_VELOCITY<class_PhysicsServer3D_constant_BODY_STATE_LINEAR_VELOCITY>`, :ref:`BODY_STATE_ANGULAR_VELOCITY<class_PhysicsServer3D_constant_BODY_STATE_ANGULAR_VELOCITY>`, :ref:`BODY_STATE_SLEEPING<class_PhysicsServer3D_constant_BODY_STATE_SLEEPING>`, or :ref:`BODY_STATE_CAN_SLEEP<class_PhysicsServer3D_constant_BODY_STATE_CAN_SLEEP>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_total_mass:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_total_mass** **(** :ref:`RID<class_RID>` body, :ref:`float<class_float>` total_mass **)**
+
+Sets the total mass for the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_set_transform:
+
+.. rst-class:: classref-method
+
+void **soft_body_set_transform** **(** :ref:`RID<class_RID>` body, :ref:`Transform3D<class_Transform3D>` transform **)**
+
+Sets the global transform of the given soft body.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_PhysicsServer3D_method_soft_body_update_rendering_server:
+
+.. rst-class:: classref-method
+
+void **soft_body_update_rendering_server** **(** :ref:`RID<class_RID>` body, :ref:`PhysicsServer3DRenderingServerHandler<class_PhysicsServer3DRenderingServerHandler>` rendering_server_handler **)**
+
+Requests that the physics server updates the rendering server with the latest positions of the given soft body's points through the ``rendering_server_handler`` interface.
 
 .. rst-class:: classref-item-separator
 

+ 43 - 5
classes/class_progressbar.rst

@@ -29,11 +29,15 @@ Properties
 .. table::
    :widths: auto
 
-   +-------------------------+--------------------------------------------------------------------+----------+
-   | :ref:`int<class_int>`   | :ref:`fill_mode<class_ProgressBar_property_fill_mode>`             | ``0``    |
-   +-------------------------+--------------------------------------------------------------------+----------+
-   | :ref:`bool<class_bool>` | :ref:`show_percentage<class_ProgressBar_property_show_percentage>` | ``true`` |
-   +-------------------------+--------------------------------------------------------------------+----------+
+   +-------------------------+----------------------------------------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>` | :ref:`editor_preview_indeterminate<class_ProgressBar_property_editor_preview_indeterminate>` |           |
+   +-------------------------+----------------------------------------------------------------------------------------------+-----------+
+   | :ref:`int<class_int>`   | :ref:`fill_mode<class_ProgressBar_property_fill_mode>`                                       | ``0``     |
+   +-------------------------+----------------------------------------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>` | :ref:`indeterminate<class_ProgressBar_property_indeterminate>`                               | ``false`` |
+   +-------------------------+----------------------------------------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>` | :ref:`show_percentage<class_ProgressBar_property_show_percentage>`                           | ``true``  |
+   +-------------------------+----------------------------------------------------------------------------------------------+-----------+
 
 .. rst-class:: classref-reftable-group
 
@@ -115,6 +119,23 @@ The progress fills from bottom to top.
 Property Descriptions
 ---------------------
 
+.. _class_ProgressBar_property_editor_preview_indeterminate:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **editor_preview_indeterminate**
+
+.. rst-class:: classref-property-setget
+
+- void **set_editor_preview_indeterminate** **(** :ref:`bool<class_bool>` value **)**
+- :ref:`bool<class_bool>` **is_editor_preview_indeterminate_enabled** **(** **)**
+
+If ``false``, the :ref:`indeterminate<class_ProgressBar_property_indeterminate>` animation will be paused in the editor.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_ProgressBar_property_fill_mode:
 
 .. rst-class:: classref-property
@@ -132,6 +153,23 @@ The fill direction. See :ref:`FillMode<enum_ProgressBar_FillMode>` for possible
 
 ----
 
+.. _class_ProgressBar_property_indeterminate:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **indeterminate** = ``false``
+
+.. rst-class:: classref-property-setget
+
+- void **set_indeterminate** **(** :ref:`bool<class_bool>` value **)**
+- :ref:`bool<class_bool>` **is_indeterminate** **(** **)**
+
+When set to ``true``, the progress bar indicates that something is happening with an animation, but does not show the fill percentage or value.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_ProgressBar_property_show_percentage:
 
 .. rst-class:: classref-property

+ 101 - 1
classes/class_projectsettings.rst

@@ -357,6 +357,18 @@ Properties
    +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                         | :ref:`debug/shapes/paths/geometry_width<class_ProjectSettings_property_debug/shapes/paths/geometry_width>`                                                                                                 | ``2.0``                                                                                          |
    +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`display/display_server/driver<class_ProjectSettings_property_display/display_server/driver>`                                                                                                         |                                                                                                  |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`display/display_server/driver.android<class_ProjectSettings_property_display/display_server/driver.android>`                                                                                         |                                                                                                  |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`display/display_server/driver.ios<class_ProjectSettings_property_display/display_server/driver.ios>`                                                                                                 |                                                                                                  |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`display/display_server/driver.linuxbsd<class_ProjectSettings_property_display/display_server/driver.linuxbsd>`                                                                                       |                                                                                                  |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`display/display_server/driver.macos<class_ProjectSettings_property_display/display_server/driver.macos>`                                                                                             |                                                                                                  |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`display/display_server/driver.windows<class_ProjectSettings_property_display/display_server/driver.windows>`                                                                                         |                                                                                                  |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
    | :ref:`String<class_String>`                       | :ref:`display/mouse_cursor/custom_image<class_ProjectSettings_property_display/mouse_cursor/custom_image>`                                                                                                 | ``""``                                                                                           |
    +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
    | :ref:`Vector2<class_Vector2>`                     | :ref:`display/mouse_cursor/custom_image_hotspot<class_ProjectSettings_property_display/mouse_cursor/custom_image_hotspot>`                                                                                 | ``Vector2(0, 0)``                                                                                |
@@ -1399,6 +1411,8 @@ Properties
    +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                             | :ref:`rendering/lights_and_shadows/positional_shadow/soft_shadow_filter_quality.mobile<class_ProjectSettings_property_rendering/lights_and_shadows/positional_shadow/soft_shadow_filter_quality.mobile>`   | ``0``                                                                                            |
    +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`rendering/lights_and_shadows/tighter_shadow_caster_culling<class_ProjectSettings_property_rendering/lights_and_shadows/tighter_shadow_caster_culling>`                                               | ``true``                                                                                         |
+   +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                           | :ref:`rendering/lights_and_shadows/use_physical_light_units<class_ProjectSettings_property_rendering/lights_and_shadows/use_physical_light_units>`                                                         | ``false``                                                                                        |
    +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                         | :ref:`rendering/limits/cluster_builder/max_clustered_elements<class_ProjectSettings_property_rendering/limits/cluster_builder/max_clustered_elements>`                                                     | ``512``                                                                                          |
@@ -3576,6 +3590,78 @@ Line width of the curve path geometry, visible when "Visible Paths" is enabled i
 
 ----
 
+.. _class_ProjectSettings_property_display/display_server/driver:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **display/display_server/driver**
+
+Sets the driver to be used by the display server. This property can not be edited directly, instead, set the driver using the platform-specific overrides.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_ProjectSettings_property_display/display_server/driver.android:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **display/display_server/driver.android**
+
+Android override for :ref:`display/display_server/driver<class_ProjectSettings_property_display/display_server/driver>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_ProjectSettings_property_display/display_server/driver.ios:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **display/display_server/driver.ios**
+
+iOS override for :ref:`display/display_server/driver<class_ProjectSettings_property_display/display_server/driver>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_ProjectSettings_property_display/display_server/driver.linuxbsd:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **display/display_server/driver.linuxbsd**
+
+LinuxBSD override for :ref:`display/display_server/driver<class_ProjectSettings_property_display/display_server/driver>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_ProjectSettings_property_display/display_server/driver.macos:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **display/display_server/driver.macos**
+
+MacOS override for :ref:`display/display_server/driver<class_ProjectSettings_property_display/display_server/driver>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_ProjectSettings_property_display/display_server/driver.windows:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **display/display_server/driver.windows**
+
+Windows override for :ref:`display/display_server/driver<class_ProjectSettings_property_display/display_server/driver>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_ProjectSettings_property_display/mouse_cursor/custom_image:
 
 .. rst-class:: classref-property
@@ -4320,7 +4406,7 @@ Search path for project-specific script templates. Godot will search for script
 
 If ``true``, Blender 3D scene files with the ``.blend`` extension will be imported by converting them to glTF 2.0.
 
-This requires configuring a path to a Blender executable in the editor settings at ``filesystem/import/blender/blender3_path``. Blender 3.0 or later is required.
+This requires configuring a path to a Blender executable in the editor settings at ``filesystem/import/blender/blender_path``. Blender 3.0 or later is required.
 
 .. rst-class:: classref-item-separator
 
@@ -10276,6 +10362,20 @@ Lower-end override for :ref:`rendering/lights_and_shadows/positional_shadow/soft
 
 ----
 
+.. _class_ProjectSettings_property_rendering/lights_and_shadows/tighter_shadow_caster_culling:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **rendering/lights_and_shadows/tighter_shadow_caster_culling** = ``true``
+
+If ``true``, items that cannot cast shadows into the view frustum will not be rendered into shadow maps.
+
+This can increase performance.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_ProjectSettings_property_rendering/lights_and_shadows/use_physical_light_units:
 
 .. rst-class:: classref-property

+ 3 - 7
classes/class_rdsamplerstate.rst

@@ -168,7 +168,7 @@ The mipmap LOD bias to use. Positive values will make the sampler blurrier at a
 - void **set_mag_filter** **(** :ref:`SamplerFilter<enum_RenderingDevice_SamplerFilter>` value **)**
 - :ref:`SamplerFilter<enum_RenderingDevice_SamplerFilter>` **get_mag_filter** **(** **)**
 
-The sampler's magnification filter.
+The sampler's magnification filter. It is the filtering method used when sampling texels that appear bigger than on-screen pixels.
 
 .. rst-class:: classref-item-separator
 
@@ -202,9 +202,7 @@ The maximum mipmap LOD bias to display (lowest resolution). Only effective if th
 - void **set_min_filter** **(** :ref:`SamplerFilter<enum_RenderingDevice_SamplerFilter>` value **)**
 - :ref:`SamplerFilter<enum_RenderingDevice_SamplerFilter>` **get_min_filter** **(** **)**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+The sampler's minification filter. It is the filtering method used when sampling texels that appear smaller than on-screen pixels.
 
 .. rst-class:: classref-item-separator
 
@@ -306,9 +304,7 @@ The repeat mode to use along the W axis of UV coordinates. This affects the retu
 - void **set_unnormalized_uvw** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **get_unnormalized_uvw** **(** **)**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If ``true``, the texture will be sampled with coordinates ranging from 0 to the texture's resolution. Otherwise, the coordinates will be normalized and range from 0 to 1.
 
 .. rst-class:: classref-item-separator
 

+ 59 - 0
classes/class_skeletonprofilehumanoid.rst

@@ -21,6 +21,65 @@ Description
 
 A :ref:`SkeletonProfile<class_SkeletonProfile>` as a preset that is optimized for the human form. This exists for standardization, so all parameters are read-only.
 
+A humanoid skeleton profile contains 54 bones divided in 4 groups: ``"Body"``, ``"Face"``, ``"LeftHand"``, and ``"RightHand"``. It is structured as follows:
+
+::
+
+    Root
+    └─ Hips
+        ├─ LeftUpperLeg
+        │  └─ LeftLowerLeg
+        │     └─ LeftFoot
+        │        └─ LeftToes
+        ├─ RightUpperLeg
+        │  └─ RightLowerLeg
+        │     └─ RightFoot
+        │        └─ RightToes
+        └─ Spine
+            └─ Chest
+                └─ UpperChest
+                    ├─ Neck
+                    │   └─ Head
+                    │       ├─ Jaw
+                    │       ├─ LeftEye
+                    │       └─ RightEye
+                    ├─ LeftShoulder
+                    │  └─ LeftUpperArm
+                    │     └─ LeftLowerArm
+                    │        └─ LeftHand
+                    │           ├─ LeftThumbMetacarpal
+                    │           │  └─ LeftThumbProximal
+                    │           ├─ LeftIndexProximal
+                    │           │  └─ LeftIndexIntermediate
+                    │           │    └─ LeftIndexDistal
+                    │           ├─ LeftMiddleProximal
+                    │           │  └─ LeftMiddleIntermediate
+                    │           │    └─ LeftMiddleDistal
+                    │           ├─ LeftRingProximal
+                    │           │  └─ LeftRingIntermediate
+                    │           │    └─ LeftRingDistal
+                    │           └─ LeftLittleProximal
+                    │              └─ LeftLittleIntermediate
+                    │                └─ LeftLittleDistal
+                    └─ RightShoulder
+                       └─ RightUpperArm
+                          └─ RightLowerArm
+                             └─ RightHand
+                                ├─ RightThumbMetacarpal
+                                │  └─ RightThumbProximal
+                                ├─ RightIndexProximal
+                                │  └─ RightIndexIntermediate
+                                │     └─ RightIndexDistal
+                                ├─ RightMiddleProximal
+                                │  └─ RightMiddleIntermediate
+                                │     └─ RightMiddleDistal
+                                ├─ RightRingProximal
+                                │  └─ RightRingIntermediate
+                                │     └─ RightRingDistal
+                                └─ RightLittleProximal
+                                   └─ RightLittleIntermediate
+                                     └─ RightLittleDistal
+
 .. rst-class:: classref-introduction-group
 
 Tutorials

+ 22 - 3
classes/class_tabbar.rst

@@ -32,7 +32,9 @@ Properties
    +-----------------------------------------------------------------------+-----------------------------------------------------------------------------------+---------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                                               | :ref:`clip_tabs<class_TabBar_property_clip_tabs>`                                 | ``true``                                                            |
    +-----------------------------------------------------------------------+-----------------------------------------------------------------------------------+---------------------------------------------------------------------+
-   | :ref:`int<class_int>`                                                 | :ref:`current_tab<class_TabBar_property_current_tab>`                             | ``0``                                                               |
+   | :ref:`int<class_int>`                                                 | :ref:`current_tab<class_TabBar_property_current_tab>`                             | ``-1``                                                              |
+   +-----------------------------------------------------------------------+-----------------------------------------------------------------------------------+---------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                                               | :ref:`deselect_enabled<class_TabBar_property_deselect_enabled>`                   | ``false``                                                           |
    +-----------------------------------------------------------------------+-----------------------------------------------------------------------------------+---------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                                               | :ref:`drag_to_rearrange_enabled<class_TabBar_property_drag_to_rearrange_enabled>` | ``false``                                                           |
    +-----------------------------------------------------------------------+-----------------------------------------------------------------------------------+---------------------------------------------------------------------+
@@ -418,14 +420,31 @@ If ``true``, tabs overflowing this node's width will be hidden, displaying two n
 
 .. rst-class:: classref-property
 
-:ref:`int<class_int>` **current_tab** = ``0``
+:ref:`int<class_int>` **current_tab** = ``-1``
 
 .. rst-class:: classref-property-setget
 
 - void **set_current_tab** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_current_tab** **(** **)**
 
-Select tab at index ``tab_idx``.
+The index of the current selected tab. A value of ``-1`` means that no tab is selected and can only be set when :ref:`deselect_enabled<class_TabBar_property_deselect_enabled>` is ``true`` or if all tabs are hidden or disabled.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_TabBar_property_deselect_enabled:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **deselect_enabled** = ``false``
+
+.. rst-class:: classref-property-setget
+
+- void **set_deselect_enabled** **(** :ref:`bool<class_bool>` value **)**
+- :ref:`bool<class_bool>` **get_deselect_enabled** **(** **)**
+
+If ``true``, all tabs can be deselected so that no tab is selected. Click on the current tab to deselect it.
 
 .. rst-class:: classref-item-separator
 

+ 25 - 2
classes/class_tabcontainer.rst

@@ -43,7 +43,9 @@ Properties
    +---------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------+
    | :ref:`bool<class_bool>`                           | :ref:`clip_tabs<class_TabContainer_property_clip_tabs>`                                       | ``true``  |
    +---------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------+
-   | :ref:`int<class_int>`                             | :ref:`current_tab<class_TabContainer_property_current_tab>`                                   | ``0``     |
+   | :ref:`int<class_int>`                             | :ref:`current_tab<class_TabContainer_property_current_tab>`                                   | ``-1``    |
+   +---------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------+
+   | :ref:`bool<class_bool>`                           | :ref:`deselect_enabled<class_TabContainer_property_deselect_enabled>`                         | ``false`` |
    +---------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------+
    | :ref:`bool<class_bool>`                           | :ref:`drag_to_rearrange_enabled<class_TabContainer_property_drag_to_rearrange_enabled>`       | ``false`` |
    +---------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------+
@@ -353,7 +355,7 @@ If ``true``, tabs overflowing this node's width will be hidden, displaying two n
 
 .. rst-class:: classref-property
 
-:ref:`int<class_int>` **current_tab** = ``0``
+:ref:`int<class_int>` **current_tab** = ``-1``
 
 .. rst-class:: classref-property-setget
 
@@ -362,6 +364,27 @@ If ``true``, tabs overflowing this node's width will be hidden, displaying two n
 
 The current tab index. When set, this index's :ref:`Control<class_Control>` node's ``visible`` property is set to ``true`` and all others are set to ``false``.
 
+A value of ``-1`` means that no tab is selected.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_TabContainer_property_deselect_enabled:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **deselect_enabled** = ``false``
+
+.. rst-class:: classref-property-setget
+
+- void **set_deselect_enabled** **(** :ref:`bool<class_bool>` value **)**
+- :ref:`bool<class_bool>` **get_deselect_enabled** **(** **)**
+
+If ``true``, all tabs can be deselected so that no tab is selected. Click on the :ref:`current_tab<class_TabContainer_property_current_tab>` to deselect it.
+
+Only the tab header will be shown if no tabs are selected.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 28 - 0
classes/class_textserver.rst

@@ -56,6 +56,8 @@ Methods
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                                       | :ref:`font_get_ascent<class_TextServer_method_font_get_ascent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size **)** |const|                                                                                                                                                                                                                         |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                       | :ref:`font_get_baseline_offset<class_TextServer_method_font_get_baseline_offset>` **(** :ref:`RID<class_RID>` font_rid **)** |const|                                                                                                                                                                                                                                   |
+   +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                                           | :ref:`font_get_char_from_glyph_index<class_TextServer_method_font_get_char_from_glyph_index>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size, :ref:`int<class_int>` glyph_index **)** |const|                                                                                                                                                        |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                                       | :ref:`font_get_descent<class_TextServer_method_font_get_descent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size **)** |const|                                                                                                                                                                                                                       |
@@ -186,6 +188,8 @@ Methods
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                            | :ref:`font_set_ascent<class_TextServer_method_font_set_ascent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size, :ref:`float<class_float>` ascent **)**                                                                                                                                                                                               |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                            | :ref:`font_set_baseline_offset<class_TextServer_method_font_set_baseline_offset>` **(** :ref:`RID<class_RID>` font_rid, :ref:`float<class_float>` baseline_offset **)**                                                                                                                                                                                                |
+   +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                            | :ref:`font_set_data<class_TextServer_method_font_set_data>` **(** :ref:`RID<class_RID>` font_rid, :ref:`PackedByteArray<class_PackedByteArray>` data **)**                                                                                                                                                                                                             |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                            | :ref:`font_set_descent<class_TextServer_method_font_set_descent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size, :ref:`float<class_float>` descent **)**                                                                                                                                                                                            |
@@ -1685,6 +1689,18 @@ Returns the font ascent (number of pixels above the baseline).
 
 ----
 
+.. _class_TextServer_method_font_get_baseline_offset:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **font_get_baseline_offset** **(** :ref:`RID<class_RID>` font_rid **)** |const|
+
+Returns extra baseline offset (as a fraction of font height).
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_TextServer_method_font_get_char_from_glyph_index:
 
 .. rst-class:: classref-method
@@ -2481,6 +2497,18 @@ Sets the font ascent (number of pixels above the baseline).
 
 ----
 
+.. _class_TextServer_method_font_set_baseline_offset:
+
+.. rst-class:: classref-method
+
+void **font_set_baseline_offset** **(** :ref:`RID<class_RID>` font_rid, :ref:`float<class_float>` baseline_offset **)**
+
+Sets extra baseline offset (as a fraction of font height).
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_TextServer_method_font_set_data:
 
 .. rst-class:: classref-method

+ 32 - 0
classes/class_textserverextension.rst

@@ -58,6 +58,8 @@ Methods
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                                       | :ref:`_font_get_ascent<class_TextServerExtension_private_method__font_get_ascent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size **)** |virtual| |const|                                                                                                                                                                                                        |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`float<class_float>`                                       | :ref:`_font_get_baseline_offset<class_TextServerExtension_private_method__font_get_baseline_offset>` **(** :ref:`RID<class_RID>` font_rid **)** |virtual| |const|                                                                                                                                                                                                                  |
+   +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                                           | :ref:`_font_get_char_from_glyph_index<class_TextServerExtension_private_method__font_get_char_from_glyph_index>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size, :ref:`int<class_int>` glyph_index **)** |virtual| |const|                                                                                                                                       |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`float<class_float>`                                       | :ref:`_font_get_descent<class_TextServerExtension_private_method__font_get_descent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size **)** |virtual| |const|                                                                                                                                                                                                      |
@@ -188,6 +190,8 @@ Methods
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                            | :ref:`_font_set_ascent<class_TextServerExtension_private_method__font_set_ascent>` **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_int>` size, :ref:`float<class_float>` ascent **)** |virtual|                                                                                                                                                                              |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void                                                            | :ref:`_font_set_baseline_offset<class_TextServerExtension_private_method__font_set_baseline_offset>` **(** :ref:`RID<class_RID>` font_rid, :ref:`float<class_float>` baseline_offset **)** |virtual|                                                                                                                                                                               |
+   +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                            | :ref:`_font_set_data<class_TextServerExtension_private_method__font_set_data>` **(** :ref:`RID<class_RID>` font_rid, :ref:`PackedByteArray<class_PackedByteArray>` data **)** |virtual|                                                                                                                                                                                            |
    +-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                            | :ref:`_font_set_data_ptr<class_TextServerExtension_private_method__font_set_data_ptr>` **(** :ref:`RID<class_RID>` font_rid, const uint8_t* data_ptr, :ref:`int<class_int>` data_size **)** |virtual|                                                                                                                                                                              |
@@ -640,6 +644,20 @@ void **_font_draw_glyph_outline** **(** :ref:`RID<class_RID>` font_rid, :ref:`RI
 
 ----
 
+.. _class_TextServerExtension_private_method__font_get_baseline_offset:
+
+.. rst-class:: classref-method
+
+:ref:`float<class_float>` **_font_get_baseline_offset** **(** :ref:`RID<class_RID>` font_rid **)** |virtual| |const|
+
+.. container:: contribute
+
+	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_TextServerExtension_private_method__font_get_char_from_glyph_index:
 
 .. rst-class:: classref-method
@@ -1550,6 +1568,20 @@ void **_font_set_ascent** **(** :ref:`RID<class_RID>` font_rid, :ref:`int<class_
 
 ----
 
+.. _class_TextServerExtension_private_method__font_set_baseline_offset:
+
+.. rst-class:: classref-method
+
+void **_font_set_baseline_offset** **(** :ref:`RID<class_RID>` font_rid, :ref:`float<class_float>` baseline_offset **)** |virtual|
+
+.. container:: contribute
+
+	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_TextServerExtension_private_method__font_set_data:
 
 .. rst-class:: classref-method

+ 15 - 15
classes/class_timer.rst

@@ -85,7 +85,7 @@ Signals
 
 **timeout** **(** **)**
 
-Emitted when the timer reaches 0.
+Emitted when the timer reaches the end.
 
 .. rst-class:: classref-section-separator
 
@@ -108,7 +108,7 @@ enum **TimerProcessCallback**:
 
 :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallback>` **TIMER_PROCESS_PHYSICS** = ``0``
 
-Update the timer during physics frames (see :ref:`Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS<class_Node_constant_NOTIFICATION_INTERNAL_PHYSICS_PROCESS>`).
+Update the timer every physics process frame (see :ref:`Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS<class_Node_constant_NOTIFICATION_INTERNAL_PHYSICS_PROCESS>`).
 
 .. _class_Timer_constant_TIMER_PROCESS_IDLE:
 
@@ -116,7 +116,7 @@ Update the timer during physics frames (see :ref:`Node.NOTIFICATION_INTERNAL_PHY
 
 :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallback>` **TIMER_PROCESS_IDLE** = ``1``
 
-Update the timer during process frames (see :ref:`Node.NOTIFICATION_INTERNAL_PROCESS<class_Node_constant_NOTIFICATION_INTERNAL_PROCESS>`).
+Update the timer every process (rendered) frame (see :ref:`Node.NOTIFICATION_INTERNAL_PROCESS<class_Node_constant_NOTIFICATION_INTERNAL_PROCESS>`).
 
 .. rst-class:: classref-section-separator
 
@@ -138,9 +138,9 @@ Property Descriptions
 - void **set_autostart** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **has_autostart** **(** **)**
 
-If ``true``, the timer will automatically start when entering the scene tree.
+If ``true``, the timer will start immediately when it enters the scene tree.
 
-\ **Note:** This property is automatically set to ``false`` after the timer enters the scene tree and starts.
+\ **Note:** After the timer enters the tree, this property is automatically set to ``false``.
 
 .. rst-class:: classref-item-separator
 
@@ -157,7 +157,7 @@ If ``true``, the timer will automatically start when entering the scene tree.
 - void **set_one_shot** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_one_shot** **(** **)**
 
-If ``true``, the timer will stop when reaching 0. If ``false``, it will restart.
+If ``true``, the timer will stop after reaching the end. Otherwise, as by default, the timer will automatically restart.
 
 .. rst-class:: classref-item-separator
 
@@ -174,7 +174,7 @@ If ``true``, the timer will stop when reaching 0. If ``false``, it will restart.
 - void **set_paused** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_paused** **(** **)**
 
-If ``true``, the timer is paused and will not process until it is unpaused again, even if :ref:`start<class_Timer_method_start>` is called.
+If ``true``, the timer is paused. A paused timer does not process until this property is set back to ``false``, even when :ref:`start<class_Timer_method_start>` is called.
 
 .. rst-class:: classref-item-separator
 
@@ -191,7 +191,7 @@ If ``true``, the timer is paused and will not process until it is unpaused again
 - void **set_timer_process_callback** **(** :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallback>` value **)**
 - :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallback>` **get_timer_process_callback** **(** **)**
 
-Processing callback. See :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallback>`.
+Specifies when the timer is updated during the main loop (see :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallback>`).
 
 .. rst-class:: classref-item-separator
 
@@ -207,9 +207,9 @@ Processing callback. See :ref:`TimerProcessCallback<enum_Timer_TimerProcessCallb
 
 - :ref:`float<class_float>` **get_time_left** **(** **)**
 
-The timer's remaining time in seconds. Returns 0 if the timer is inactive.
+The timer's remaining time in seconds. This is always ``0`` if the timer is stopped.
 
-\ **Note:** This value is read-only and cannot be set. It is based on :ref:`wait_time<class_Timer_property_wait_time>`, which can be set using :ref:`start<class_Timer_method_start>`.
+\ **Note:** This property is read-only and cannot be modified. It is based on :ref:`wait_time<class_Timer_property_wait_time>`.
 
 .. rst-class:: classref-item-separator
 
@@ -226,9 +226,9 @@ The timer's remaining time in seconds. Returns 0 if the timer is inactive.
 - void **set_wait_time** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_wait_time** **(** **)**
 
-The wait time in seconds.
+The time required for the timer to end, in seconds. This property can also be set every time :ref:`start<class_Timer_method_start>` is called.
 
-\ **Note:** Timers can only emit once per rendered frame at most (or once per physics frame if :ref:`process_callback<class_Timer_property_process_callback>` is :ref:`TIMER_PROCESS_PHYSICS<class_Timer_constant_TIMER_PROCESS_PHYSICS>`). This means very low wait times (lower than 0.05 seconds) will behave in significantly different ways depending on the rendered framerate. For very low wait times, it is recommended to use a process loop in a script instead of using a Timer node. Timers are affected by :ref:`Engine.time_scale<class_Engine_property_time_scale>`, a higher scale means quicker timeouts, and vice versa.
+\ **Note:** Timers can only process once per physics or process frame (depending on the :ref:`process_callback<class_Timer_property_process_callback>`). An unstable framerate may cause the timer to end inconsistently, which is especially noticeable if the wait time is lower than roughly ``0.05`` seconds. For very short timers, it is recommended to write your own code instead of using a **Timer** node. Timers are also affected by :ref:`Engine.time_scale<class_Engine_property_time_scale>`.
 
 .. rst-class:: classref-section-separator
 
@@ -245,7 +245,7 @@ Method Descriptions
 
 :ref:`bool<class_bool>` **is_stopped** **(** **)** |const|
 
-Returns ``true`` if the timer is stopped.
+Returns ``true`` if the timer is stopped or has not started.
 
 .. rst-class:: classref-item-separator
 
@@ -257,9 +257,9 @@ Returns ``true`` if the timer is stopped.
 
 void **start** **(** :ref:`float<class_float>` time_sec=-1 **)**
 
-Starts the timer. Sets :ref:`wait_time<class_Timer_property_wait_time>` to ``time_sec`` if ``time_sec > 0``. This also resets the remaining time to :ref:`wait_time<class_Timer_property_wait_time>`.
+Starts the timer, if it was not started already. Fails if the timer is not inside the tree. If ``time_sec`` is greater than ``0``, this value is used for the :ref:`wait_time<class_Timer_property_wait_time>`.
 
-\ **Note:** This method will not resume a paused timer. See :ref:`paused<class_Timer_property_paused>`.
+\ **Note:** This method does not resume a paused timer. See :ref:`paused<class_Timer_property_paused>`.
 
 .. rst-class:: classref-item-separator
 

+ 14 - 0
classes/class_treeitem.rst

@@ -74,6 +74,8 @@ Methods
    +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                                             | :ref:`get_button_by_id<class_TreeItem_method_get_button_by_id>` **(** :ref:`int<class_int>` column, :ref:`int<class_int>` id **)** |const|                                                                                                               |
    +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Color<class_Color>`                                         | :ref:`get_button_color<class_TreeItem_method_get_button_color>` **(** :ref:`int<class_int>` column, :ref:`int<class_int>` id **)** |const|                                                                                                               |
+   +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                                             | :ref:`get_button_count<class_TreeItem_method_get_button_count>` **(** :ref:`int<class_int>` column **)** |const|                                                                                                                                         |
    +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`int<class_int>`                                             | :ref:`get_button_id<class_TreeItem_method_get_button_id>` **(** :ref:`int<class_int>` column, :ref:`int<class_int>` button_index **)** |const|                                                                                                           |
@@ -532,6 +534,18 @@ Returns the button index if there is a button with ID ``id`` in column ``column`
 
 ----
 
+.. _class_TreeItem_method_get_button_color:
+
+.. rst-class:: classref-method
+
+:ref:`Color<class_Color>` **get_button_color** **(** :ref:`int<class_int>` column, :ref:`int<class_int>` id **)** |const|
+
+Returns the color of the button with ID ``id`` in column ``column``. If the specified button does not exist, returns :ref:`Color.BLACK<class_Color_constant_BLACK>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_TreeItem_method_get_button_count:
 
 .. rst-class:: classref-method

+ 1 - 1
classes/class_window.rst

@@ -1399,7 +1399,7 @@ If ``true``, the **Window**'s background can be transparent. This is best used w
 
 \ **Note:** Transparency support is implemented on Linux, macOS and Windows, but availability might vary depending on GPU driver, display manager, and compositor capabilities.
 
-\ **Note:** This property has no effect if either :ref:`ProjectSettings.display/window/per_pixel_transparency/allowed<class_ProjectSettings_property_display/window/per_pixel_transparency/allowed>`, or the window's :ref:`Viewport.transparent_bg<class_Viewport_property_transparent_bg>` is set to ``false``.
+\ **Note:** This property has no effect if :ref:`ProjectSettings.display/window/per_pixel_transparency/allowed<class_ProjectSettings_property_display/window/per_pixel_transparency/allowed>` is set to ``false``.
 
 .. rst-class:: classref-item-separator
 

+ 2 - 0
classes/class_xrinterface.rst

@@ -640,6 +640,8 @@ Sets the active environment blend mode.
 
 Sets the active play area mode, will return ``false`` if the mode can't be used with this interface.
 
+\ **Note:** Changing this after the interface has already been initialized can be jarring for the player, so it's recommended to recenter on the HMD with :ref:`XRServer.center_on_hmd<class_XRServer_method_center_on_hmd>` (if switching to :ref:`XR_PLAY_AREA_STAGE<class_XRInterface_constant_XR_PLAY_AREA_STAGE>`) or make the switch during a scene change.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 14 - 0
classes/class_xrserver.rst

@@ -59,6 +59,8 @@ Methods
    +-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                  | :ref:`center_on_hmd<class_XRServer_method_center_on_hmd>` **(** :ref:`RotationMode<enum_XRServer_RotationMode>` rotation_mode, :ref:`bool<class_bool>` keep_height **)** |
    +-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Transform3D<class_Transform3D>`                 | :ref:`clear_reference_frame<class_XRServer_method_clear_reference_frame>` **(** **)** |const|                                                                            |
+   +-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`XRInterface<class_XRInterface>`                 | :ref:`find_interface<class_XRServer_method_find_interface>` **(** :ref:`String<class_String>` name **)** |const|                                                         |
    +-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`Transform3D<class_Transform3D>`                 | :ref:`get_hmd_transform<class_XRServer_method_get_hmd_transform>` **(** **)**                                                                                            |
@@ -363,6 +365,18 @@ You should call this method after a few seconds have passed. For example, when t
 
 ----
 
+.. _class_XRServer_method_clear_reference_frame:
+
+.. rst-class:: classref-method
+
+:ref:`Transform3D<class_Transform3D>` **clear_reference_frame** **(** **)** |const|
+
+Clears the reference frame that was set by previous calls to :ref:`center_on_hmd<class_XRServer_method_center_on_hmd>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_XRServer_method_find_interface:
 
 .. rst-class:: classref-method