Browse Source

Merge pull request #9341 from godotengine/classref/sync-1ef40f4

classref: Sync with current 4.1 branch (1ef40f4)
Max Hilbrunner 1 year ago
parent
commit
be7c09a053
100 changed files with 3433 additions and 922 deletions
  1. 10 2
      classes/[email protected]
  2. 63 53
      classes/[email protected]
  3. 7 5
      classes/class_animation.rst
  4. 2 2
      classes/class_animationnode.rst
  5. 1 1
      classes/class_animationnodetimescale.rst
  6. 10 0
      classes/class_array.rst
  7. 7 0
      classes/class_arrayoccluder3d.rst
  8. 2 2
      classes/class_astargrid2d.rst
  9. 2 2
      classes/class_audioserver.rst
  10. 10 18
      classes/class_audiostream.rst
  11. 2 0
      classes/class_audiostreammicrophone.rst
  12. 9 23
      classes/class_audiostreamplayback.rst
  13. 1 1
      classes/class_audiostreamplayer3d.rst
  14. 7 7
      classes/class_basematerial3d.rst
  15. 334 43
      classes/class_basis.rst
  16. 1 1
      classes/class_bone2d.rst
  17. 7 0
      classes/class_boxoccluder3d.rst
  18. 3 1
      classes/class_callable.rst
  19. 2 2
      classes/class_camera3d.rst
  20. 8 1
      classes/class_cameraattributesphysical.rst
  21. 14 10
      classes/class_canvasitem.rst
  22. 3 1
      classes/class_collisionpolygon2d.rst
  23. 2 2
      classes/class_color.rst
  24. 1 1
      classes/class_concavepolygonshape2d.rst
  25. 1 1
      classes/class_concavepolygonshape3d.rst
  26. 8 2
      classes/class_control.rst
  27. 1 1
      classes/class_convexpolygonshape2d.rst
  28. 1 1
      classes/class_cpuparticles2d.rst
  29. 8 1
      classes/class_cpuparticles3d.rst
  30. 7 0
      classes/class_cryptokey.rst
  31. 3 1
      classes/class_csgmesh3d.rst
  32. 2 2
      classes/class_cylindershape3d.rst
  33. 42 0
      classes/class_dictionary.rst
  34. 3 1
      classes/class_directionallight3d.rst
  35. 5 5
      classes/class_displayserver.rst
  36. 3 3
      classes/class_dtlsserver.rst
  37. 1 1
      classes/class_editordebuggerplugin.rst
  38. 7 0
      classes/class_editorexportplatform.rst
  39. 23 1
      classes/class_editorexportplatformandroid.rst
  40. 2185 125
      classes/class_editorexportplatformios.rst
  41. 1 1
      classes/class_editorexportplatformmacos.rst
  42. 54 43
      classes/class_editorexportplatformweb.rst
  43. 1 1
      classes/class_editorexportplugin.rst
  44. 4 2
      classes/class_editorplugin.rst
  45. 8 4
      classes/class_editorsettings.rst
  46. 3 1
      classes/class_editorspinslider.rst
  47. 8 1
      classes/class_editorvcsinterface.rst
  48. 1 1
      classes/class_environment.rst
  49. 4 0
      classes/class_fileaccess.rst
  50. 1 1
      classes/class_float.rst
  51. 2 2
      classes/class_flowcontainer.rst
  52. 7 0
      classes/class_fogvolume.rst
  53. 1 1
      classes/class_font.rst
  54. 9 2
      classes/class_geometryinstance3d.rst
  55. 1 1
      classes/class_gltfnode.rst
  56. 2 2
      classes/class_gpuparticles2d.rst
  57. 6 2
      classes/class_gpuparticles3d.rst
  58. 2 2
      classes/class_gridcontainer.rst
  59. 4 2
      classes/class_httpclient.rst
  60. 4 4
      classes/class_httprequest.rst
  61. 15 19
      classes/class_image.rst
  62. 18 0
      classes/class_input.rst
  63. 3 1
      classes/class_inputeventjoypadbutton.rst
  64. 40 33
      classes/class_inputeventmidi.rst
  65. 1 1
      classes/class_inputeventscreendrag.rst
  66. 1 1
      classes/class_inputeventscreentouch.rst
  67. 15 4
      classes/class_int.rst
  68. 7 0
      classes/class_label3d.rst
  69. 2 0
      classes/class_light3d.rst
  70. 16 1
      classes/class_lightmapgi.rst
  71. 1 0
      classes/class_mainloop.rst
  72. 13 19
      classes/class_material.rst
  73. 10 6
      classes/class_mesh.rst
  74. 27 1
      classes/class_meshdatatool.rst
  75. 6 2
      classes/class_meshinstance3d.rst
  76. 3 1
      classes/class_multimesh.rst
  77. 2 2
      classes/class_multimeshinstance3d.rst
  78. 14 6
      classes/class_navigationagent2d.rst
  79. 16 8
      classes/class_navigationagent3d.rst
  80. 2 2
      classes/class_navigationmesh.rst
  81. 1 1
      classes/class_navigationserver3d.rst
  82. 8 8
      classes/class_node.rst
  83. 1 1
      classes/class_node2d.rst
  84. 3 1
      classes/class_node3d.rst
  85. 0 0
      classes/class_object.rst
  86. 7 0
      classes/class_occluder3d.rst
  87. 9 0
      classes/class_occluderinstance3d.rst
  88. 2 0
      classes/class_omnilight3d.rst
  89. 1 1
      classes/class_openxrinteractionprofile.rst
  90. 93 0
      classes/class_openxrinteractionprofilemetadata.rst
  91. 7 3
      classes/class_os.rst
  92. 4 0
      classes/class_packedbytearray.rst
  93. 1 1
      classes/class_packedscene.rst
  94. 1 1
      classes/class_packetpeerudp.rst
  95. 5 3
      classes/class_parallaxlayer.rst
  96. 1 1
      classes/class_pckpacker.rst
  97. 2 0
      classes/class_physicalbone3d.rst
  98. 44 132
      classes/class_physicsdirectbodystate2dextension.rst
  99. 2 0
      classes/class_physicsmaterial.rst
  100. 98 266
      classes/class_physicsserver2dextension.rst

+ 10 - 2
classes/[email protected]

@@ -696,6 +696,10 @@ The order of ``mode``, ``sync`` and ``transfer_mode`` does not matter, but value
 
 Make a script with static variables to not persist after all references are lost. If the script is loaded again the static variables will revert to their default values.
 
+\ **Note:** As annotations describe their subject, the :ref:`@static_unload<class_@GDScript_annotation_@static_unload>` annotation must be placed before the class definition and inheritance.
+
+\ **Warning:** Currently, due to a bug, scripts are never freed, even if :ref:`@static_unload<class_@GDScript_annotation_@static_unload>` annotation is used.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -785,6 +789,8 @@ An optional ``message`` can be shown in addition to the generic "Assertion faile
     assert(speed >= 0 and speed < 20) # You can also combine the two conditional statements in one check.
     assert(speed < 20, "the speed limit is 20") # Show a message.
 
+\ **Note:** :ref:`assert<class_@GDScript_method_assert>` is a keyword, not a function. So you cannot access it as a :ref:`Callable<class_Callable>` or use it inside expressions.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -916,7 +922,7 @@ Returns ``true`` if ``value`` is an instance of ``type``. The ``type`` value mus
 
 - A :ref:`Script<class_Script>` (you can use any class, including inner one).
 
-Unlike the right operand of the ``is`` operator, ``type`` can be a non-constant value. The ``is`` operator supports more features (such as typed arrays) and is more performant. Use the operator instead of this method if you do not need dynamic type checking.
+Unlike the right operand of the ``is`` operator, ``type`` can be a non-constant value. The ``is`` operator supports more features (such as typed arrays). Use the operator instead of this method if you do not need dynamic type checking.
 
 Examples:
 
@@ -970,7 +976,7 @@ Returns a :ref:`Resource<class_Resource>` from the filesystem located at the abs
     # Load a scene called "main" located in the root of the project directory and cache it in a variable.
     var main = load("res://main.tscn") # main will contain a PackedScene resource.
 
-\ **Important:** The path must be absolute. A relative path will always return ``null``.
+\ **Important:** Relative paths are *not* relative to the script calling this method, instead it is prefixed with ``"res://"``. Loading from relative paths might not work as expected.
 
 This function is a simplified version of :ref:`ResourceLoader.load<class_ResourceLoader_method_load>`, which can be used for more advanced scenarios.
 
@@ -997,6 +1003,8 @@ Returns a :ref:`Resource<class_Resource>` from the filesystem located at ``path`
     # Create instance of a scene.
     var diamond = preload("res://diamond.tscn").instantiate()
 
+\ **Note:** :ref:`preload<class_@GDScript_method_preload>` is a keyword, not a function. So you cannot access it as a :ref:`Callable<class_Callable>`.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 63 - 53
classes/[email protected]

@@ -1679,6 +1679,38 @@ Launch Shortcut E key.
 
 Launch Shortcut F key.
 
+.. _class_@GlobalScope_constant_KEY_GLOBE:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`Key<enum_@GlobalScope_Key>` **KEY_GLOBE** = ``4194416``
+
+"Globe" key on Mac / iPad keyboard.
+
+.. _class_@GlobalScope_constant_KEY_KEYBOARD:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`Key<enum_@GlobalScope_Key>` **KEY_KEYBOARD** = ``4194417``
+
+"On-screen keyboard" key on iPad keyboard.
+
+.. _class_@GlobalScope_constant_KEY_JIS_EISU:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`Key<enum_@GlobalScope_Key>` **KEY_JIS_EISU** = ``4194418``
+
+英数 key on Mac keyboard.
+
+.. _class_@GlobalScope_constant_KEY_JIS_KANA:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`Key<enum_@GlobalScope_Key>` **KEY_JIS_KANA** = ``4194419``
+
+かな key on Mac keyboard.
+
 .. _class_@GlobalScope_constant_KEY_UNKNOWN:
 
 .. rst-class:: classref-enumeration-constant
@@ -2255,38 +2287,6 @@ Z key.
 
 § key.
 
-.. _class_@GlobalScope_constant_KEY_GLOBE:
-
-.. rst-class:: classref-enumeration-constant
-
-:ref:`Key<enum_@GlobalScope_Key>` **KEY_GLOBE** = ``4194416``
-
-"Globe" key on Mac / iPad keyboard.
-
-.. _class_@GlobalScope_constant_KEY_KEYBOARD:
-
-.. rst-class:: classref-enumeration-constant
-
-:ref:`Key<enum_@GlobalScope_Key>` **KEY_KEYBOARD** = ``4194417``
-
-"On-screen keyboard" key iPad keyboard.
-
-.. _class_@GlobalScope_constant_KEY_JIS_EISU:
-
-.. rst-class:: classref-enumeration-constant
-
-:ref:`Key<enum_@GlobalScope_Key>` **KEY_JIS_EISU** = ``4194418``
-
-英数 key on Mac keyboard.
-
-.. _class_@GlobalScope_constant_KEY_JIS_KANA:
-
-.. rst-class:: classref-enumeration-constant
-
-:ref:`Key<enum_@GlobalScope_Key>` **KEY_JIS_KANA** = ``4194419``
-
-かな key on Mac keyboard.
-
 .. rst-class:: classref-item-separator
 
 ----
@@ -2815,7 +2815,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:
 
@@ -2823,7 +2823,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:
 
@@ -2831,7 +2833,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:
 
@@ -2839,7 +2841,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:
 
@@ -2847,7 +2849,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:
 
@@ -2855,7 +2857,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:
 
@@ -2863,7 +2865,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:
 
@@ -2871,7 +2873,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:
 
@@ -2879,7 +2881,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:
 
@@ -2887,7 +2891,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:
 
@@ -2895,7 +2901,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:
 
@@ -2903,7 +2911,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:
 
@@ -2911,7 +2921,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:
 
@@ -2919,7 +2929,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:
 
@@ -2927,7 +2937,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:
 
@@ -2935,7 +2945,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:
 
@@ -2943,7 +2953,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:
 
@@ -2951,7 +2961,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:
 
@@ -2959,7 +2969,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
 
@@ -5561,7 +5571,7 @@ Returns an "eased" value of ``x`` based on an easing function defined with ``cur
     - 1.0: Linear
     - Greater than 1.0 (exclusive): Ease in
 
-\ `ease() curve values cheatsheet <https://raw.githubusercontent.com/godotengine/godot-docs/master/img/ease_cheatsheet.png>`__\ 
+\ `ease() curve values cheatsheet <https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/ease_cheatsheet.png>`__\ 
 
 See also :ref:`smoothstep<class_@GlobalScope_method_smoothstep>`. If you need to perform more advanced transitions, use :ref:`Tween.interpolate_value<class_Tween_method_interpolate_value>`.
 
@@ -6899,7 +6909,7 @@ This S-shaped curve is the cubic Hermite interpolator, given by ``f(y) = 3*y^2 -
 
 Compared to :ref:`ease<class_@GlobalScope_method_ease>` with a curve value of ``-1.6521``, :ref:`smoothstep<class_@GlobalScope_method_smoothstep>` returns the smoothest possible curve with no sudden changes in the derivative. If you need to perform more advanced transitions, use :ref:`Tween<class_Tween>` or :ref:`AnimationPlayer<class_AnimationPlayer>`.
 
-\ `Comparison between smoothstep() and ease(x, -1.6521) return values <https://raw.githubusercontent.com/godotengine/godot-docs/master/img/smoothstep_ease_comparison.png>`__
+\ `Comparison between smoothstep() and ease(x, -1.6521) return values <https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/smoothstep_ease_comparison.png>`__
 
 .. rst-class:: classref-item-separator
 

+ 7 - 5
classes/class_animation.rst

@@ -27,22 +27,24 @@ This resource holds data that can be used to animate anything in the engine. Ani
  .. code-tab:: gdscript
 
     # This creates an animation that makes the node "Enemy" move to the right by
-    # 100 pixels in 0.5 seconds.
+    # 100 pixels in 2.0 seconds.
     var animation = Animation.new()
     var track_index = animation.add_track(Animation.TYPE_VALUE)
     animation.track_set_path(track_index, "Enemy:position:x")
     animation.track_insert_key(track_index, 0.0, 0)
-    animation.track_insert_key(track_index, 0.5, 100)
+    animation.track_insert_key(track_index, 2.0, 100)
+    animation.length = 2.0
 
  .. code-tab:: csharp
 
     // This creates an animation that makes the node "Enemy" move to the right by
-    // 100 pixels in 0.5 seconds.
+    // 100 pixels in 2.0 seconds.
     var animation = new Animation();
     int trackIndex = animation.AddTrack(Animation.TrackType.Value);
     animation.TrackSetPath(trackIndex, "Enemy:position:x");
     animation.TrackInsertKey(trackIndex, 0.0f, 0);
-    animation.TrackInsertKey(trackIndex, 0.5f, 100);
+    animation.TrackInsertKey(trackIndex, 2.0f, 100);
+    animation.Length = 2.0f;
 
 
 
@@ -877,7 +879,7 @@ Compress the animation and all its tracks in-place. This will make :ref:`track_i
 
 void **copy_track** **(** :ref:`int<class_int>` track_idx, :ref:`Animation<class_Animation>` to_animation **)**
 
-Adds a new track that is a copy of the given track from ``to_animation``.
+Adds a new track to ``to_animation`` that is a copy of the given track from this animation.
 
 .. rst-class:: classref-item-separator
 

+ 2 - 2
classes/class_animationnode.rst

@@ -245,7 +245,7 @@ When inheriting from :ref:`AnimationRootNode<class_AnimationRootNode>`, implemen
 
 :ref:`Dictionary<class_Dictionary>` **_get_child_nodes** **(** **)** |virtual| |const|
 
-When inheriting from :ref:`AnimationRootNode<class_AnimationRootNode>`, implement this virtual method to return all children animation nodes in order as a ``name: node`` dictionary.
+When inheriting from :ref:`AnimationRootNode<class_AnimationRootNode>`, implement this virtual method to return all child animation nodes in order as a ``name: node`` dictionary.
 
 .. rst-class:: classref-item-separator
 
@@ -359,7 +359,7 @@ Blend an input. This is only useful for animation nodes created for an :ref:`Ani
 
 :ref:`float<class_float>` **blend_node** **(** :ref:`StringName<class_StringName>` name, :ref:`AnimationNode<class_AnimationNode>` node, :ref:`float<class_float>` time, :ref:`bool<class_bool>` seek, :ref:`bool<class_bool>` is_external_seeking, :ref:`float<class_float>` blend, :ref:`FilterAction<enum_AnimationNode_FilterAction>` filter=0, :ref:`bool<class_bool>` sync=true, :ref:`bool<class_bool>` test_only=false **)**
 
-Blend another animation node (in case this animation node contains children animation nodes). This function is only useful if you inherit from :ref:`AnimationRootNode<class_AnimationRootNode>` instead, else editors will not display your animation node for addition.
+Blend another animation node (in case this animation node contains child animation nodes). This function is only useful if you inherit from :ref:`AnimationRootNode<class_AnimationRootNode>` instead, otherwise editors will not display your animation node for addition.
 
 .. rst-class:: classref-item-separator
 

+ 1 - 1
classes/class_animationnodetimescale.rst

@@ -19,7 +19,7 @@ A time-scaling animation node used in :ref:`AnimationTree<class_AnimationTree>`.
 Description
 -----------
 
-Allows to scale the speed of the animation (or reverse it) in any children :ref:`AnimationNode<class_AnimationNode>`\ s. Setting it to ``0.0`` will pause the animation.
+Allows to scale the speed of the animation (or reverse it) in any child :ref:`AnimationNode<class_AnimationNode>`\ s. Setting it to ``0.0`` will pause the animation.
 
 .. rst-class:: classref-introduction-group
 

+ 10 - 0
classes/class_array.rst

@@ -497,6 +497,12 @@ Returns the last element of the array. Prints an error and returns ``null`` if t
 
 Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search. Optionally, a ``before`` specifier can be passed. If ``false``, the returned index comes after all existing entries of the value in the array.
 
+::
+
+    var array = ["a", "b", "c", "c", "d", "e"]
+    print(array.bsearch("c", true))  # Prints 2, at the first matching element.
+    print(array.bsearch("c", false)) # Prints 4, after the last matching element, pointing to "d".
+
 \ **Note:** Calling :ref:`bsearch<class_Array_method_bsearch>` on an unsorted array results in unexpected behavior.
 
 .. rst-class:: classref-item-separator
@@ -511,6 +517,8 @@ Finds the index of an existing value (or the insertion index that maintains sort
 
 Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search and a custom comparison method. Optionally, a ``before`` specifier can be passed. If ``false``, the returned index comes after all existing entries of the value in the array. The custom method receives two arguments (an element from the array and the value searched for) and must return ``true`` if the first argument is less than the second, and return ``false`` otherwise.
 
+\ **Note:** The custom method must accept the two arguments in any order, you cannot rely on that the first argument will always be from the array.
+
 \ **Note:** Calling :ref:`bsearch_custom<class_Array_method_bsearch_custom>` on an unsorted array results in unexpected behavior.
 
 .. rst-class:: classref-item-separator
@@ -1111,6 +1119,8 @@ If specified, ``step`` is the relative index between source elements. It can be
 
 If ``deep`` is true, each element will be copied by value rather than by reference.
 
+\ **Note:** To include the first element when ``step`` is negative, use ``arr.slice(begin, -arr.size() - 1, step)`` (i.e. ``[0, 1, 2].slice(1, -4, -1)`` returns ``[1, 0]``).
+
 .. rst-class:: classref-item-separator
 
 ----

+ 7 - 0
classes/class_arrayoccluder3d.rst

@@ -23,6 +23,13 @@ Description
 
 See :ref:`OccluderInstance3D<class_OccluderInstance3D>`'s documentation for instructions on setting up occlusion culling.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Occlusion culling <../tutorials/3d/occlusion_culling>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 2 - 2
classes/class_astargrid2d.rst

@@ -38,7 +38,7 @@ To use **AStarGrid2D**, you only need to set the :ref:`region<class_AStarGrid2D_
  .. code-tab:: csharp
 
     AStarGrid2D astarGrid = new AStarGrid2D();
-    astarGrid.Size = new Vector2I(32, 32);
+    astarGrid.Region = new Rect2I(0, 0, 32, 32);
     astarGrid.CellSize = new Vector2I(16, 16);
     astarGrid.Update();
     GD.Print(astarGrid.GetIdPath(Vector2I.Zero, new Vector2I(3, 4))); // prints (0, 0), (1, 1), (2, 2), (3, 3), (3, 4)
@@ -460,7 +460,7 @@ Returns an array with the IDs of the points that form the path found by AStar2D
 
 Returns an array with the points that are in the path found by AStarGrid2D between the given points. The array is ordered from the starting point to the ending point of the path.
 
-\ **Note:** This method is not thread-safe. If called from a :ref:`Thread<class_Thread>`, it will return an empty :ref:`PackedVector3Array<class_PackedVector3Array>` and will print an error message.
+\ **Note:** This method is not thread-safe. If called from a :ref:`Thread<class_Thread>`, it will return an empty :ref:`PackedVector2Array<class_PackedVector2Array>` and will print an error message.
 
 .. rst-class:: classref-item-separator
 

+ 2 - 2
classes/class_audioserver.rst

@@ -730,9 +730,9 @@ Sets the volume of the bus at index ``bus_idx`` to ``volume_db``.
 
 void **set_enable_tagging_used_audio_streams** **(** :ref:`bool<class_bool>` enable **)**
 
-.. container:: contribute
+If set to ``true``, all instances of :ref:`AudioStreamPlayback<class_AudioStreamPlayback>` will call :ref:`AudioStreamPlayback._tag_used_streams<class_AudioStreamPlayback_method__tag_used_streams>` every mix step.
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** This is enabled by default in the editor, as it is used by editor plugins for the audio stream previews.
 
 .. rst-class:: classref-item-separator
 

+ 10 - 18
classes/class_audiostream.rst

@@ -79,9 +79,9 @@ Method Descriptions
 
 :ref:`int<class_int>` **_get_beat_count** **(** **)** |virtual| |const|
 
-.. container:: contribute
+Overridable method. Should return the total number of beats of this audio stream. Used by the engine to determine the position of every beat.
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Ideally, the returned value should be based off the stream's sample rate (:ref:`AudioStreamWAV.mix_rate<class_AudioStreamWAV_property_mix_rate>`, for example).
 
 .. rst-class:: classref-item-separator
 
@@ -93,9 +93,9 @@ Method Descriptions
 
 :ref:`float<class_float>` **_get_bpm** **(** **)** |virtual| |const|
 
-.. container:: contribute
+Overridable method. Should return the tempo of this audio stream, in beats per minute (BPM). Used by the engine to determine the position of every beat.
 
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Ideally, the returned value should be based off the stream's sample rate (:ref:`AudioStreamWAV.mix_rate<class_AudioStreamWAV_property_mix_rate>`, for example).
 
 .. rst-class:: classref-item-separator
 
@@ -107,9 +107,7 @@ Method Descriptions
 
 :ref:`float<class_float>` **_get_length** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize the returned value of :ref:`get_length<class_AudioStream_method_get_length>`. Should return the length of this audio stream, in seconds.
 
 .. rst-class:: classref-item-separator
 
@@ -121,9 +119,7 @@ Method Descriptions
 
 :ref:`String<class_String>` **_get_stream_name** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize the name assigned to this audio stream. Unused by the engine.
 
 .. rst-class:: classref-item-separator
 
@@ -135,9 +131,7 @@ Method Descriptions
 
 :ref:`AudioStreamPlayback<class_AudioStreamPlayback>` **_instantiate_playback** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize the returned value of :ref:`instantiate_playback<class_AudioStream_method_instantiate_playback>`. Should returned a new :ref:`AudioStreamPlayback<class_AudioStreamPlayback>` created when the stream is played (such as by an :ref:`AudioStreamPlayer<class_AudioStreamPlayer>`)..
 
 .. rst-class:: classref-item-separator
 
@@ -149,9 +143,7 @@ Method Descriptions
 
 :ref:`bool<class_bool>` **_is_monophonic** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize the returned value of :ref:`is_monophonic<class_AudioStream_method_is_monophonic>`. Should return ``true`` if this audio stream only supports one channel.
 
 .. rst-class:: classref-item-separator
 
@@ -175,7 +167,7 @@ Returns the length of the audio stream in seconds.
 
 :ref:`AudioStreamPlayback<class_AudioStreamPlayback>` **instantiate_playback** **(** **)**
 
-Returns an AudioStreamPlayback. Useful for when you want to extend :ref:`_instantiate_playback<class_AudioStream_method__instantiate_playback>` but call :ref:`instantiate_playback<class_AudioStream_method_instantiate_playback>` from an internally held AudioStream subresource. An example of this can be found in the source files for ``AudioStreamRandomPitch::instantiate_playback``.
+Returns a newly created :ref:`AudioStreamPlayback<class_AudioStreamPlayback>` intended to play this audio stream. Useful for when you want to extend :ref:`_instantiate_playback<class_AudioStream_method__instantiate_playback>` but call :ref:`instantiate_playback<class_AudioStream_method_instantiate_playback>` from an internally held AudioStream subresource. An example of this can be found in the source code for ``AudioStreamRandomPitch::instantiate_playback``.
 
 .. rst-class:: classref-item-separator
 
@@ -187,7 +179,7 @@ Returns an AudioStreamPlayback. Useful for when you want to extend :ref:`_instan
 
 :ref:`bool<class_bool>` **is_monophonic** **(** **)** |const|
 
-Returns true if this audio stream only supports monophonic playback, or false if the audio stream supports polyphony.
+Returns ``true`` if this audio stream only supports one channel (*monophony*), or ``false`` if the audio stream supports two or more channels (*polyphony*).
 
 .. |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.)`

+ 2 - 0
classes/class_audiostreammicrophone.rst

@@ -28,6 +28,8 @@ When used directly in an :ref:`AudioStreamPlayer<class_AudioStreamPlayer>` node,
 Tutorials
 ---------
 
+- :doc:`Recording with microphone <../tutorials/audio/recording_with_microphone>`
+
 - `Audio Mic Record Demo <https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record>`__
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`

+ 9 - 23
classes/class_audiostreamplayback.rst

@@ -71,9 +71,7 @@ Method Descriptions
 
 :ref:`int<class_int>` **_get_loop_count** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable method. Should return how many times this audio stream has looped. Most built-in playbacks always return ``0``.
 
 .. rst-class:: classref-item-separator
 
@@ -85,9 +83,7 @@ Method Descriptions
 
 :ref:`float<class_float>` **_get_playback_position** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable method. Should return the current progress along the audio stream, in seconds.
 
 .. rst-class:: classref-item-separator
 
@@ -99,9 +95,7 @@ Method Descriptions
 
 :ref:`bool<class_bool>` **_is_playing** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable method. Should return ``true`` if this playback is active and playing its audio stream.
 
 .. rst-class:: classref-item-separator
 
@@ -113,9 +107,9 @@ Method Descriptions
 
 :ref:`int<class_int>` **_mix** **(** AudioFrame* buffer, :ref:`float<class_float>` rate_scale, :ref:`int<class_int>` frames **)** |virtual|
 
-.. container:: contribute
+Override this method to customize how the audio stream is mixed. This method is called even if the playback is not 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
 
@@ -127,9 +121,7 @@ Method Descriptions
 
 void **_seek** **(** :ref:`float<class_float>` position **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize what happens when seeking this audio stream at the given ``position``, such as by calling :ref:`AudioStreamPlayer.seek<class_AudioStreamPlayer_method_seek>`.
 
 .. rst-class:: classref-item-separator
 
@@ -141,9 +133,7 @@ void **_seek** **(** :ref:`float<class_float>` position **)** |virtual|
 
 void **_start** **(** :ref:`float<class_float>` from_pos **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize what happens when the playback starts at the given position, such as by calling :ref:`AudioStreamPlayer.play<class_AudioStreamPlayer_method_play>`.
 
 .. rst-class:: classref-item-separator
 
@@ -155,9 +145,7 @@ void **_start** **(** :ref:`float<class_float>` from_pos **)** |virtual|
 
 void **_stop** **(** **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Override this method to customize what happens when the playback is stopped, such as by calling :ref:`AudioStreamPlayer.stop<class_AudioStreamPlayer_method_stop>`.
 
 .. rst-class:: classref-item-separator
 
@@ -169,9 +157,7 @@ void **_stop** **(** **)** |virtual|
 
 void **_tag_used_streams** **(** **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable method. Called whenever the audio stream is mixed if the playback is active and :ref:`AudioServer.set_enable_tagging_used_audio_streams<class_AudioServer_method_set_enable_tagging_used_audio_streams>` has been set to ``true``. Editor plugins may use this method to "tag" the current position along the audio stream and display it in a preview.
 
 .. |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_audiostreamplayer3d.rst

@@ -396,7 +396,7 @@ Attenuation factor used if listener is outside of :ref:`emission_angle_degrees<c
 - void **set_max_db** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_max_db** **(** **)**
 
-Sets the absolute maximum of the soundlevel, in decibels.
+Sets the absolute maximum of the sound level, in decibels.
 
 .. rst-class:: classref-item-separator
 

+ 7 - 7
classes/class_basematerial3d.rst

@@ -477,7 +477,7 @@ enum **TextureFilter**:
 
 :ref:`TextureFilter<enum_BaseMaterial3D_TextureFilter>` **TEXTURE_FILTER_NEAREST** = ``0``
 
-The texture filter reads from the nearest pixel only. The simplest and fastest method of filtering, but the texture will look pixelized.
+The texture filter reads from the nearest pixel only. This makes the texture look pixelated from up close, and grainy from a distance (due to mipmaps not being sampled).
 
 .. _class_BaseMaterial3D_constant_TEXTURE_FILTER_LINEAR:
 
@@ -485,7 +485,7 @@ The texture filter reads from the nearest pixel only. The simplest and fastest m
 
 :ref:`TextureFilter<enum_BaseMaterial3D_TextureFilter>` **TEXTURE_FILTER_LINEAR** = ``1``
 
-The texture filter blends between the nearest 4 pixels. Use this when you want to avoid a pixelated style, but do not want mipmaps.
+The texture filter blends between the nearest 4 pixels. This makes the texture look smooth from up close, and grainy from a distance (due to mipmaps not being sampled).
 
 .. _class_BaseMaterial3D_constant_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS:
 
@@ -493,7 +493,7 @@ The texture filter blends between the nearest 4 pixels. Use this when you want t
 
 :ref:`TextureFilter<enum_BaseMaterial3D_TextureFilter>` **TEXTURE_FILTER_NEAREST_WITH_MIPMAPS** = ``2``
 
-The texture filter reads from the nearest pixel in the nearest mipmap. The fastest way to read from textures with mipmaps.
+The texture filter reads from the nearest pixel and blends between the nearest 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``). This makes the texture look pixelated from up close, and smooth from a distance.
 
 .. _class_BaseMaterial3D_constant_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS:
 
@@ -501,7 +501,7 @@ The texture filter reads from the nearest pixel in the nearest mipmap. The faste
 
 :ref:`TextureFilter<enum_BaseMaterial3D_TextureFilter>` **TEXTURE_FILTER_LINEAR_WITH_MIPMAPS** = ``3``
 
-The texture filter blends between the nearest 4 pixels and between the nearest 2 mipmaps. Use this for most cases as mipmaps are important to smooth out pixels that are far from the camera.
+The texture filter blends between the nearest 4 pixels and between the nearest 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``). This makes the texture look smooth from up close, and smooth from a distance.
 
 .. _class_BaseMaterial3D_constant_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC:
 
@@ -509,7 +509,7 @@ The texture filter blends between the nearest 4 pixels and between the nearest 2
 
 :ref:`TextureFilter<enum_BaseMaterial3D_TextureFilter>` **TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC** = ``4``
 
-The texture filter reads from the nearest pixel, but selects a mipmap based on the angle between the surface and the camera view. This reduces artifacts on surfaces that are almost in line with the camera. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
+The texture filter reads from the nearest pixel and blends between 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``) based on the angle between the surface and the camera view. This makes the texture look pixelated from up close, and smooth from a distance. Anisotropic filtering improves texture quality on surfaces that are almost in line with the camera, but is slightly slower. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
 
 .. _class_BaseMaterial3D_constant_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC:
 
@@ -517,7 +517,7 @@ The texture filter reads from the nearest pixel, but selects a mipmap based on t
 
 :ref:`TextureFilter<enum_BaseMaterial3D_TextureFilter>` **TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC** = ``5``
 
-The texture filter blends between the nearest 4 pixels and selects a mipmap based on the angle between the surface and the camera view. This reduces artifacts on surfaces that are almost in line with the camera. This is the slowest of the filtering options, but results in the highest quality texturing. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
+The texture filter blends between the nearest 4 pixels and blends between 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``) based on the angle between the surface and the camera view. This makes the texture look smooth from up close, and smooth from a distance. Anisotropic filtering improves texture quality on surfaces that are almost in line with the camera, but is slightly slower. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
 
 .. _class_BaseMaterial3D_constant_TEXTURE_FILTER_MAX:
 
@@ -2474,7 +2474,7 @@ Specifies the channel of the :ref:`metallic_texture<class_BaseMaterial3D_propert
 - void **set_msdf_outline_size** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_msdf_outline_size** **(** **)**
 
-The width of the shape outine.
+The width of the shape outline.
 
 .. rst-class:: classref-item-separator
 

+ 334 - 43
classes/class_basis.rst

@@ -17,13 +17,17 @@ A 3×3 matrix for representing 3D rotation and scale.
 Description
 -----------
 
-A 3×3 matrix used for representing 3D rotation and scale. Usually used as an orthogonal basis for a :ref:`Transform3D<class_Transform3D>`.
+The **Basis** built-in :ref:`Variant<class_Variant>` type is a 3x3 `matrix <https://en.wikipedia.org/wiki/Matrix_(mathematics)>`__ used to represent 3D rotation, scale, and shear. It is frequently used within a :ref:`Transform3D<class_Transform3D>`.
 
-Contains 3 vector fields X, Y and Z as its columns, which are typically interpreted as the local basis vectors of a transformation. For such use, it is composed of a scaling and a rotation matrix, in that order (M = R.S).
+A **Basis** is composed by 3 axis vectors, each representing a column of the matrix: :ref:`x<class_Basis_property_x>`, :ref:`y<class_Basis_property_y>`, and :ref:`z<class_Basis_property_z>`. The length of each axis (:ref:`Vector3.length<class_Vector3_method_length>`) influences the basis's scale, while the direction of all axes influence the rotation. Usually, these axes are perpendicular to one another. However, when you rotate any axis individually, the basis becomes sheared. Applying a sheared basis to a 3D model will make the model appear distorted.
 
-Basis can also be accessed as an array of 3D vectors. These vectors are usually orthogonal to each other, but are not necessarily normalized (due to scaling).
+A **Basis** is **orthogonal** if its axes are perpendicular to each other. A basis is **normalized** if the length of every axis is ``1``. A basis is **uniform** if all axes share the same length (see :ref:`get_scale<class_Basis_method_get_scale>`). A basis is **orthonormal** if it is both orthogonal and normalized, which allows it to only represent rotations. A basis is **conformal** if it is both orthogonal and uniform, which ensures it is not distorted.
 
-For more information, read the "Matrices and transforms" documentation article.
+For a general introduction, see the :doc:`Matrices and transforms <../tutorials/math/matrices_and_transforms>` tutorial.
+
+\ **Note:** Godot uses a `right-handed coordinate system <https://en.wikipedia.org/wiki/Right-hand_rule>`__, which is a common standard. For directions, the convention for built-in types like :ref:`Camera3D<class_Camera3D>` is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the `Importing 3D Scenes <../tutorials/assets_pipeline/importing_scenes.html#d-asset-direction-conventions>`__ tutorial.
+
+\ **Note:** The basis matrices are exposed as `column-major <https://www.mindcontrol.org/~hplus/graphics/matrix-layout.html>`__ order, which is the same as OpenGL. However, they are stored internally in row-major order, which is the same as DirectX.
 
 .. rst-class:: classref-introduction-group
 
@@ -165,9 +169,28 @@ Constants
 
 **IDENTITY** = ``Basis(1, 0, 0, 0, 1, 0, 0, 0, 1)``
 
-The identity basis, with no rotation or scaling applied.
+The identity basis. This is a basis with no rotation, no shear, and its scale being ``1``. This means that:
+
+- The :ref:`x<class_Basis_property_x>` points right (:ref:`Vector3.RIGHT<class_Vector3_constant_RIGHT>`);
+
+- The :ref:`y<class_Basis_property_y>` points up (:ref:`Vector3.UP<class_Vector3_constant_UP>`);
+
+- The :ref:`z<class_Basis_property_z>` points back (:ref:`Vector3.BACK<class_Vector3_constant_BACK>`).
+
+::
+
+    var basis := Basis.IDENTITY
+    print("| X | Y | Z")
+    print("| %s | %s | %s" % [basis.x.x, basis.y.x, basis.z.x])
+    print("| %s | %s | %s" % [basis.x.y, basis.y.y, basis.z.y])
+    print("| %s | %s | %s" % [basis.x.z, basis.y.z, basis.z.z])
+    # Prints:
+    # | X | Y | Z
+    # | 1 | 0 | 0
+    # | 0 | 1 | 0
+    # | 0 | 0 | 1
 
-This is identical to calling ``Basis()`` without any parameters. This constant can be used to make your code clearer, and for consistency with C#.
+This is identical to creating ``Basis()`` without any parameters. This constant can be used to make your code clearer, and for consistency with C#.
 
 .. _class_Basis_constant_FLIP_X:
 
@@ -175,7 +198,9 @@ This is identical to calling ``Basis()`` without any parameters. This constant c
 
 **FLIP_X** = ``Basis(-1, 0, 0, 0, 1, 0, 0, 0, 1)``
 
-The basis that will flip something along the X axis when used in a transformation.
+When any basis is multiplied by :ref:`FLIP_X<class_Basis_constant_FLIP_X>`, it negates all components of the :ref:`x<class_Basis_property_x>` axis (the X column).
+
+When :ref:`FLIP_X<class_Basis_constant_FLIP_X>` is multiplied by any basis, it negates the :ref:`Vector3.x<class_Vector3_property_x>` component of all axes (the X row).
 
 .. _class_Basis_constant_FLIP_Y:
 
@@ -183,7 +208,9 @@ The basis that will flip something along the X axis when used in a transformatio
 
 **FLIP_Y** = ``Basis(1, 0, 0, 0, -1, 0, 0, 0, 1)``
 
-The basis that will flip something along the Y axis when used in a transformation.
+When any basis is multiplied by :ref:`FLIP_Y<class_Basis_constant_FLIP_Y>`, it negates all components of the :ref:`y<class_Basis_property_y>` axis (the Y column).
+
+When :ref:`FLIP_Y<class_Basis_constant_FLIP_Y>` is multiplied by any basis, it negates the :ref:`Vector3.y<class_Vector3_property_y>` component of all axes (the Y row).
 
 .. _class_Basis_constant_FLIP_Z:
 
@@ -191,7 +218,9 @@ The basis that will flip something along the Y axis when used in a transformatio
 
 **FLIP_Z** = ``Basis(1, 0, 0, 0, 1, 0, 0, 0, -1)``
 
-The basis that will flip something along the Z axis when used in a transformation.
+When any basis is multiplied by :ref:`FLIP_Z<class_Basis_constant_FLIP_Z>`, it negates all components of the :ref:`z<class_Basis_property_z>` axis (the Z column).
+
+When :ref:`FLIP_Z<class_Basis_constant_FLIP_Z>` is multiplied by any basis, it negates the :ref:`Vector3.z<class_Vector3_property_z>` component of all axes (the Z row).
 
 .. rst-class:: classref-section-separator
 
@@ -208,7 +237,9 @@ Property Descriptions
 
 :ref:`Vector3<class_Vector3>` **x** = ``Vector3(1, 0, 0)``
 
-The basis matrix's X vector (column 0). Equivalent to array index ``0``.
+The basis's X axis, and the column ``0`` of the matrix.
+
+On the identity basis, this vector points right (:ref:`Vector3.RIGHT<class_Vector3_constant_RIGHT>`).
 
 .. rst-class:: classref-item-separator
 
@@ -220,7 +251,9 @@ The basis matrix's X vector (column 0). Equivalent to array index ``0``.
 
 :ref:`Vector3<class_Vector3>` **y** = ``Vector3(0, 1, 0)``
 
-The basis matrix's Y vector (column 1). Equivalent to array index ``1``.
+The basis's Y axis, and the column ``1`` of the matrix.
+
+On the identity basis, this vector points up (:ref:`Vector3.UP<class_Vector3_constant_UP>`).
 
 .. rst-class:: classref-item-separator
 
@@ -232,7 +265,9 @@ The basis matrix's Y vector (column 1). Equivalent to array index ``1``.
 
 :ref:`Vector3<class_Vector3>` **z** = ``Vector3(0, 0, 1)``
 
-The basis matrix's Z vector (column 2). Equivalent to array index ``2``.
+The basis's Z axis, and the column ``2`` of the matrix.
+
+On the identity basis, this vector points back (:ref:`Vector3.BACK<class_Vector3_constant_BACK>`).
 
 .. rst-class:: classref-section-separator
 
@@ -249,7 +284,7 @@ Constructor Descriptions
 
 :ref:`Basis<class_Basis>` **Basis** **(** **)**
 
-Constructs a default-initialized **Basis** set to :ref:`IDENTITY<class_Basis_constant_IDENTITY>`.
+Constructs a **Basis** identical to the :ref:`IDENTITY<class_Basis_constant_IDENTITY>`.
 
 .. rst-class:: classref-item-separator
 
@@ -269,7 +304,9 @@ Constructs a **Basis** as a copy of the given **Basis**.
 
 :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Vector3<class_Vector3>` axis, :ref:`float<class_float>` angle **)**
 
-Constructs a pure rotation basis matrix, rotated around the given ``axis`` by ``angle`` (in radians). The axis must be a normalized vector.
+Constructs a **Basis** that only represents rotation, rotated around the ``axis`` by the given ``angle``, in radians. The axis must be a normalized vector.
+
+\ **Note:** This is the same as using :ref:`rotated<class_Basis_method_rotated>` on the :ref:`IDENTITY<class_Basis_constant_IDENTITY>` basis. With more than one angle consider using :ref:`from_euler<class_Basis_method_from_euler>`, instead.
 
 .. rst-class:: classref-item-separator
 
@@ -279,7 +316,9 @@ Constructs a pure rotation basis matrix, rotated around the given ``axis`` by ``
 
 :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Quaternion<class_Quaternion>` from **)**
 
-Constructs a pure rotation basis matrix from the given quaternion.
+Constructs a **Basis** that only represents rotation from the given :ref:`Quaternion<class_Quaternion>`.
+
+\ **Note:** Quaternions *only* store rotation, not scale. Because of this, conversions from **Basis** to :ref:`Quaternion<class_Quaternion>` cannot always be reversed.
 
 .. rst-class:: classref-item-separator
 
@@ -289,7 +328,7 @@ Constructs a pure rotation basis matrix from the given quaternion.
 
 :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Vector3<class_Vector3>` x_axis, :ref:`Vector3<class_Vector3>` y_axis, :ref:`Vector3<class_Vector3>` z_axis **)**
 
-Constructs a basis matrix from 3 axis vectors (matrix columns).
+Constructs a **Basis** from 3 axis vectors. These are the columns of the basis matrix.
 
 .. rst-class:: classref-section-separator
 
@@ -306,9 +345,13 @@ Method Descriptions
 
 :ref:`float<class_float>` **determinant** **(** **)** |const|
 
-Returns the determinant of the basis matrix. If the basis is uniformly scaled, its determinant is the square of the scale.
+Returns the `determinant <https://en.wikipedia.org/wiki/Determinant>`__ of this basis's matrix. For advanced math, this number can be used to determine a few attributes:
+
+- If the determinant is exactly ``0``, the basis is not invertible (see :ref:`inverse<class_Basis_method_inverse>`).
+
+- If the determinant is a negative number, the basis represents a negative scale.
 
-A negative determinant means the basis has a negative scale. A zero determinant means the basis isn't invertible, and is usually considered invalid.
+\ **Note:** If the basis's scale is the same for every axis, its determinant is always that scale by the power of 2.
 
 .. rst-class:: classref-item-separator
 
@@ -320,7 +363,34 @@ A negative determinant means the basis has a negative scale. A zero determinant
 
 :ref:`Basis<class_Basis>` **from_euler** **(** :ref:`Vector3<class_Vector3>` euler, :ref:`int<class_int>` order=2 **)** |static|
 
-Constructs a pure rotation Basis matrix from Euler angles in the specified Euler rotation order. By default, use YXZ order (most common). See the :ref:`EulerOrder<enum_@GlobalScope_EulerOrder>` enum for possible values.
+Constructs a new **Basis** that only represents rotation from the given :ref:`Vector3<class_Vector3>` of `Euler angles <https://en.wikipedia.org/wiki/Euler_angles>`__, in radians.
+
+- The :ref:`Vector3.x<class_Vector3_property_x>` should contain the angle around the :ref:`x<class_Basis_property_x>` axis (pitch).
+
+- The :ref:`Vector3.y<class_Vector3_property_y>` should contain the angle around the :ref:`y<class_Basis_property_y>` axis (yaw).
+
+- The :ref:`Vector3.z<class_Vector3_property_z>` should contain the angle around the :ref:`z<class_Basis_property_z>` axis (roll).
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    # Creates a Basis whose z axis points down.
+    var my_basis = Basis.from_euler(Vector3(TAU / 4, 0, 0))
+    
+    print(my_basis.z) # Prints (0, -1, 0).
+
+ .. code-tab:: csharp
+
+    // Creates a Basis whose z axis points down.
+    var myBasis = Basis.FromEuler(new Vector3(Mathf.Tau / 4.0f, 0.0f, 0.0f));
+    
+    GD.Print(myBasis.Z); // Prints (0, -1, 0).
+
+
+
+The order of each consecutive rotation can be changed with ``order`` (see :ref:`EulerOrder<enum_@GlobalScope_EulerOrder>` constants). By default, the YXZ convention is used (:ref:`@GlobalScope.EULER_ORDER_YXZ<class_@GlobalScope_constant_EULER_ORDER_YXZ>`): the basis rotates first around the Y axis (yaw), then X (pitch), and lastly Z (roll). When using the opposite method :ref:`get_euler<class_Basis_method_get_euler>`, this order is reversed.
 
 .. rst-class:: classref-item-separator
 
@@ -332,7 +402,30 @@ Constructs a pure rotation Basis matrix from Euler angles in the specified Euler
 
 :ref:`Basis<class_Basis>` **from_scale** **(** :ref:`Vector3<class_Vector3>` scale **)** |static|
 
-Constructs a pure scale basis matrix with no rotation or shearing. The scale values are set as the diagonal of the matrix, and the other parts of the matrix are zero.
+Constructs a new **Basis** that only represents scale, with no rotation or shear, from the given ``scale`` vector.
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var my_basis = Basis.from_scale(Vector3(2, 4, 8))
+    
+    print(my_basis.x) # Prints (2, 0, 0).
+    print(my_basis.y) # Prints (0, 4, 0).
+    print(my_basis.z) # Prints (0, 0, 8).
+
+ .. code-tab:: csharp
+
+    var myBasis = Basis.FromScale(new Vector3(2.0f, 4.0f, 8.0f));
+    
+    GD.Print(myBasis.X); // Prints (2, 0, 0).
+    GD.Print(myBasis.Y); // Prints (0, 4, 0).
+    GD.Print(myBasis.Z); // Prints (0, 0, 8).
+
+
+
+\ **Note:** In linear algebra, the matrix of this basis is also known as a `diagonal matrix <https://en.wikipedia.org/wiki/Diagonal_matrix>`__.
 
 .. rst-class:: classref-item-separator
 
@@ -344,9 +437,19 @@ Constructs a pure scale basis matrix with no rotation or shearing. The scale val
 
 :ref:`Vector3<class_Vector3>` **get_euler** **(** :ref:`int<class_int>` order=2 **)** |const|
 
-Returns the basis's rotation in the form of Euler angles. The Euler order depends on the ``order`` parameter, by default it uses the YXZ convention: when decomposing, first Z, then X, and Y last. The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
+Returns this basis's rotation as a :ref:`Vector3<class_Vector3>` of `Euler angles <https://en.wikipedia.org/wiki/Euler_angles>`__, in radians.
+
+- The :ref:`Vector3.x<class_Vector3_property_x>` contains the angle around the :ref:`x<class_Basis_property_x>` axis (pitch);
 
-Consider using the :ref:`get_rotation_quaternion<class_Basis_method_get_rotation_quaternion>` method instead, which returns a :ref:`Quaternion<class_Quaternion>` quaternion instead of Euler angles.
+- The :ref:`Vector3.y<class_Vector3_property_y>` contains the angle around the :ref:`y<class_Basis_property_y>` axis (yaw);
+
+- The :ref:`Vector3.z<class_Vector3_property_z>` contains the angle around the :ref:`z<class_Basis_property_z>` axis (roll).
+
+The order of each consecutive rotation can be changed with ``order`` (see :ref:`EulerOrder<enum_@GlobalScope_EulerOrder>` constants). By default, the YXZ convention is used (:ref:`@GlobalScope.EULER_ORDER_YXZ<class_@GlobalScope_constant_EULER_ORDER_YXZ>`): Z (roll) is calculated first, then X (pitch), and lastly Y (yaw). When using the opposite method :ref:`from_euler<class_Basis_method_from_euler>`, this order is reversed.
+
+\ **Note:** Euler angles are much more intuitive but are not suitable for 3D math. Because of this, consider using the :ref:`get_rotation_quaternion<class_Basis_method_get_rotation_quaternion>` method instead, which returns a :ref:`Quaternion<class_Quaternion>`.
+
+\ **Note:** In the Inspector dock, a basis's rotation is often displayed in Euler angles (in degrees), as is the case with the :ref:`Node3D.rotation<class_Node3D_property_rotation>` property.
 
 .. rst-class:: classref-item-separator
 
@@ -358,7 +461,9 @@ Consider using the :ref:`get_rotation_quaternion<class_Basis_method_get_rotation
 
 :ref:`Quaternion<class_Quaternion>` **get_rotation_quaternion** **(** **)** |const|
 
-Returns the basis's rotation in the form of a quaternion. See :ref:`get_euler<class_Basis_method_get_euler>` if you need Euler angles, but keep in mind quaternions should generally be preferred to Euler angles.
+Returns this basis's rotation as a :ref:`Quaternion<class_Quaternion>`.
+
+\ **Note:** Quatenions are much more suitable for 3D math but are less intuitive. For user interfaces, consider using the :ref:`get_euler<class_Basis_method_get_euler>` method, which returns Euler angles.
 
 .. rst-class:: classref-item-separator
 
@@ -370,7 +475,40 @@ Returns the basis's rotation in the form of a quaternion. See :ref:`get_euler<cl
 
 :ref:`Vector3<class_Vector3>` **get_scale** **(** **)** |const|
 
-Assuming that the matrix is the combination of a rotation and scaling, return the absolute value of scaling factors along each axis.
+Returns the length of each axis of this basis, as a :ref:`Vector3<class_Vector3>`. If the basis is not sheared, this is the scaling factor. It is not affected by rotation.
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var my_basis = Basis(
+        Vector3(2, 0, 0),
+        Vector3(0, 4, 0),
+        Vector3(0, 0, 8)
+    )
+    # Rotating the Basis in any way preserves its scale.
+    my_basis = my_basis.rotated(Vector3.UP, TAU / 2)
+    my_basis = my_basis.rotated(Vector3.RIGHT, TAU / 4)
+    
+    print(my_basis.get_scale()) # Prints (2, 4, 8).
+
+ .. code-tab:: csharp
+
+    var myBasis = new Basis(
+        Vector3(2.0f, 0.0f, 0.0f),
+        Vector3(0.0f, 4.0f, 0.0f),
+        Vector3(0.0f, 0.0f, 8.0f)
+    );
+    // Rotating the Basis in any way preserves its scale.
+    myBasis = myBasis.Rotated(Vector3.Up, Mathf.Tau / 2.0f);
+    myBasis = myBasis.Rotated(Vector3.Right, Mathf.Tau / 4.0f);
+    
+    GD.Print(myBasis.Scale); // Prints (2, 4, 8).
+
+
+
+\ **Note:** If the value returned by :ref:`determinant<class_Basis_method_determinant>` is negative, the scale is also negative.
 
 .. rst-class:: classref-item-separator
 
@@ -382,7 +520,7 @@ Assuming that the matrix is the combination of a rotation and scaling, return th
 
 :ref:`Basis<class_Basis>` **inverse** **(** **)** |const|
 
-Returns the inverse of the matrix.
+Returns the `inverse of this basis's matrix <https://en.wikipedia.org/wiki/Invertible_matrix>`__.
 
 .. rst-class:: classref-item-separator
 
@@ -418,11 +556,11 @@ Returns ``true`` if this basis is finite, by calling :ref:`@GlobalScope.is_finit
 
 :ref:`Basis<class_Basis>` **looking_at** **(** :ref:`Vector3<class_Vector3>` target, :ref:`Vector3<class_Vector3>` up=Vector3(0, 1, 0), :ref:`bool<class_bool>` use_model_front=false **)** |static|
 
-Creates a Basis with a rotation such that the forward axis (-Z) points towards the ``target`` position.
+Creates a new **Basis** with a rotation such that the forward axis (-Z) points towards the ``target`` position.
 
-The up axis (+Y) points as close to the ``up`` vector as possible while staying perpendicular to the forward axis. The resulting Basis is orthonormalized. The ``target`` and ``up`` vectors cannot be zero, and cannot be parallel to each other.
+By default, the -Z axis (camera forward) is treated as forward (implies +X is right). If ``use_model_front`` is ``true``, the +Z axis (asset front) is treated as forward (implies +X is left) and points toward the ``target`` position.
 
-If ``use_model_front`` is ``true``, the +Z axis (asset front) is treated as forward (implies +X is left) and points toward the ``target`` position. By default, the -Z axis (camera forward) is treated as forward (implies +X is right).
+The up axis (+Y) points as close to the ``up`` vector as possible while staying perpendicular to the forward axis. The returned basis is orthonormalized (see :ref:`orthonormalized<class_Basis_method_orthonormalized>`). The ``target`` and ``up`` vectors cannot be :ref:`Vector3.ZERO<class_Vector3_constant_ZERO>`, and cannot be parallel to each other.
 
 .. rst-class:: classref-item-separator
 
@@ -434,7 +572,33 @@ If ``use_model_front`` is ``true``, the +Z axis (asset front) is treated as forw
 
 :ref:`Basis<class_Basis>` **orthonormalized** **(** **)** |const|
 
-Returns the orthonormalized version of the matrix (useful to call from time to time to avoid rounding error for orthogonal matrices). This performs a Gram-Schmidt orthonormalization on the basis of the matrix.
+Returns the orthonormalized version of this basis. An orthonormal basis is both *orthogonal* (the axes are perpendicular to each other) and *normalized* (the axes have a length of ``1``), which also means it can only represent rotation.
+
+It is often useful to call this method to avoid rounding errors on a rotating basis:
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    # Rotate this Node3D every frame.
+    func _process(delta):
+        basis = basis.rotated(Vector3.UP, TAU * delta)
+        basis = basis.rotated(Vector3.RIGHT, TAU * delta)
+    
+        basis = basis.orthonormalized()
+
+ .. code-tab:: csharp
+
+    // Rotate this Node3D every frame.
+    public override void _Process(double delta)
+    {
+        Basis = Basis.Rotated(Vector3.Up, Mathf.Tau * (float)delta)
+                     .Rotated(Vector3.Right, Mathf.Tau * (float)delta)
+                     .Orthonormalized();
+    }
+
+
 
 .. rst-class:: classref-item-separator
 
@@ -446,7 +610,32 @@ Returns the orthonormalized version of the matrix (useful to call from time to t
 
 :ref:`Basis<class_Basis>` **rotated** **(** :ref:`Vector3<class_Vector3>` axis, :ref:`float<class_float>` angle **)** |const|
 
-Introduce an additional rotation around the given axis by ``angle`` (in radians). The axis must be a normalized vector.
+Returns this basis rotated around the given ``axis`` by ``angle`` (in radians). The ``axis`` must be a normalized vector (see :ref:`Vector3.normalized<class_Vector3_method_normalized>`).
+
+Positive values rotate this basis clockwise around the axis, while negative values rotate it counterclockwise.
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var my_basis = Basis.IDENTITY
+    var angle = TAU / 2
+    
+    my_basis = my_basis.rotated(Vector3.UP, angle)    # Rotate around the up axis (yaw).
+    my_basis = my_basis.rotated(Vector3.RIGHT, angle) # Rotate around the right axis (pitch).
+    my_basis = my_basis.rotated(Vector3.BACK, angle)  # Rotate around the back axis (roll).
+
+ .. code-tab:: csharp
+
+    var myBasis = Basis.Identity;
+    var angle = Mathf.Tau / 2.0f;
+    
+    myBasis = myBasis.Rotated(Vector3.Up, angle);    // Rotate around the up axis (yaw).
+    myBasis = myBasis.Rotated(Vector3.Right, angle); // Rotate around the right axis (pitch).
+    myBasis = myBasis.Rotated(Vector3.Back, angle);  // Rotate around the back axis (roll).
+
+
 
 .. rst-class:: classref-item-separator
 
@@ -458,7 +647,40 @@ Introduce an additional rotation around the given axis by ``angle`` (in radians)
 
 :ref:`Basis<class_Basis>` **scaled** **(** :ref:`Vector3<class_Vector3>` scale **)** |const|
 
-Introduce an additional scaling specified by the given 3D scaling factor.
+Returns this basis with each axis's components scaled by the given ``scale``'s components.
+
+The basis matrix's rows are multiplied by ``scale``'s components. This operation is a global scale (relative to the parent).
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var my_basis = Basis(
+        Vector3(1, 1, 1),
+        Vector3(2, 2, 2),
+        Vector3(3, 3, 3)
+    )
+    my_basis = my_basis.scaled(Vector3(0, 2, -2))
+    
+    print(my_basis.x) # Prints (0, 2, -2).
+    print(my_basis.y) # Prints (0, 4, -4).
+    print(my_basis.z) # Prints (0, 6, -6).
+
+ .. code-tab:: csharp
+
+    var myBasis = new Basis(
+        new Vector3(1.0f, 1.0f, 1.0f),
+        new Vector3(2.0f, 2.0f, 2.0f),
+        new Vector3(3.0f, 3.0f, 3.0f)
+    );
+    myBasis = myBasis.Scaled(new Vector3(0.0f, 2.0f, -2.0f));
+    
+    GD.Print(myBasis.X); // Prints (0, 2, -2).
+    GD.Print(myBasis.Y); // Prints (0, 4, -4).
+    GD.Print(myBasis.Z); // Prints (0, 6, -6).
+
+
 
 .. rst-class:: classref-item-separator
 
@@ -470,7 +692,20 @@ Introduce an additional scaling specified by the given 3D scaling factor.
 
 :ref:`Basis<class_Basis>` **slerp** **(** :ref:`Basis<class_Basis>` to, :ref:`float<class_float>` weight **)** |const|
 
-Assuming that the matrix is a proper rotation matrix, slerp performs a spherical-linear interpolation with another rotation matrix.
+Performs a spherical-linear interpolation with the ``to`` basis, given a ``weight``. Both this basis and ``to`` should represent a rotation.
+
+\ **Example:** Smoothly rotate a :ref:`Node3D<class_Node3D>` to the target basis over time, with a :ref:`Tween<class_Tween>`.
+
+::
+
+    var start_basis = Basis.IDENTITY
+    var target_basis = Basis.IDENTITY.rotated(Vector3.UP, TAU / 2)
+    
+    func _ready():
+        create_tween().tween_method(interpolate, 0.0, 1.0, 5.0).set_trans(Tween.TRANS_EXPO)
+    
+    func interpolate(weight):
+        basis = start_basis.slerp(target_basis, weight)
 
 .. rst-class:: classref-item-separator
 
@@ -482,7 +717,9 @@ Assuming that the matrix is a proper rotation matrix, slerp performs a spherical
 
 :ref:`float<class_float>` **tdotx** **(** :ref:`Vector3<class_Vector3>` with **)** |const|
 
-Transposed dot product with the X axis of the matrix.
+Returns the transposed dot product between ``with`` and the :ref:`x<class_Basis_property_x>` axis (see :ref:`transposed<class_Basis_method_transposed>`).
+
+This is equivalent to ``basis.x.dot(vector)``.
 
 .. rst-class:: classref-item-separator
 
@@ -494,7 +731,9 @@ Transposed dot product with the X axis of the matrix.
 
 :ref:`float<class_float>` **tdoty** **(** :ref:`Vector3<class_Vector3>` with **)** |const|
 
-Transposed dot product with the Y axis of the matrix.
+Returns the transposed dot product between ``with`` and the :ref:`y<class_Basis_property_y>` axis (see :ref:`transposed<class_Basis_method_transposed>`).
+
+This is equivalent to ``basis.y.dot(vector)``.
 
 .. rst-class:: classref-item-separator
 
@@ -506,7 +745,9 @@ Transposed dot product with the Y axis of the matrix.
 
 :ref:`float<class_float>` **tdotz** **(** :ref:`Vector3<class_Vector3>` with **)** |const|
 
-Transposed dot product with the Z axis of the matrix.
+Returns the transposed dot product between ``with`` and the :ref:`z<class_Basis_property_z>` axis (see :ref:`transposed<class_Basis_method_transposed>`).
+
+This is equivalent to ``basis.z.dot(vector)``.
 
 .. rst-class:: classref-item-separator
 
@@ -518,7 +759,38 @@ Transposed dot product with the Z axis of the matrix.
 
 :ref:`Basis<class_Basis>` **transposed** **(** **)** |const|
 
-Returns the transposed version of the matrix.
+Returns the transposed version of this basis. This turns the basis matrix's columns into rows, and its rows into columns.
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var my_basis = Basis(
+        Vector3(1, 2, 3),
+        Vector3(4, 5, 6),
+        Vector3(7, 8, 9)
+    )
+    my_basis = my_basis.transposed()
+    
+    print(my_basis.x) # Prints (1, 4, 7).
+    print(my_basis.y) # Prints (2, 5, 8).
+    print(my_basis.z) # Prints (3, 6, 9).
+
+ .. code-tab:: csharp
+
+    var myBasis = new Basis(
+        new Vector3(1.0f, 2.0f, 3.0f),
+        new Vector3(4.0f, 5.0f, 6.0f),
+        new Vector3(7.0f, 8.0f, 9.0f)
+    );
+    myBasis = myBasis.Transposed();
+    
+    GD.Print(myBasis.X); // Prints (1, 4, 7).
+    GD.Print(myBasis.Y); // Prints (2, 5, 8).
+    GD.Print(myBasis.Z); // Prints (3, 6, 9).
+
+
 
 .. rst-class:: classref-section-separator
 
@@ -535,7 +807,7 @@ Operator Descriptions
 
 :ref:`bool<class_bool>` **operator !=** **(** :ref:`Basis<class_Basis>` right **)**
 
-Returns ``true`` if the **Basis** matrices are not equal.
+Returns ``true`` if the components of both **Basis** matrices are not equal.
 
 \ **Note:** Due to floating-point precision errors, consider using :ref:`is_equal_approx<class_Basis_method_is_equal_approx>` instead, which is more reliable.
 
@@ -549,7 +821,9 @@ Returns ``true`` if the **Basis** matrices are not equal.
 
 :ref:`Basis<class_Basis>` **operator *** **(** :ref:`Basis<class_Basis>` right **)**
 
-Composes these two basis matrices by multiplying them together. This has the effect of transforming the second basis (the child) by the first basis (the parent).
+Transforms (multiplies) the ``right`` basis by this basis.
+
+This is the operation performed between parent and child :ref:`Node3D<class_Node3D>`\ s.
 
 .. rst-class:: classref-item-separator
 
@@ -561,7 +835,22 @@ Composes these two basis matrices by multiplying them together. This has the eff
 
 :ref:`Vector3<class_Vector3>` **operator *** **(** :ref:`Vector3<class_Vector3>` right **)**
 
-Transforms (multiplies) the :ref:`Vector3<class_Vector3>` by the given **Basis** matrix.
+Transforms (multiplies) the ``right`` vector by this basis, returning a :ref:`Vector3<class_Vector3>`.
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var my_basis = Basis(Vector3(1, 1, 1), Vector3(1, 1, 1), Vector3(0, 2, 5))
+    print(my_basis * Vector3(1, 2, 3)) # Prints (7, 3, 16)
+
+ .. code-tab:: csharp
+
+    var myBasis = new Basis(new Vector3(1, 1, 1), new Vector3(1, 1, 1), new Vector3(0, 2, 5));
+    GD.Print(my_basis * new Vector3(1, 2, 3)); // Prints (7, 3, 16)
+
+
 
 .. rst-class:: classref-item-separator
 
@@ -573,7 +862,7 @@ Transforms (multiplies) the :ref:`Vector3<class_Vector3>` by the given **Basis**
 
 :ref:`Basis<class_Basis>` **operator *** **(** :ref:`float<class_float>` right **)**
 
-This operator multiplies all components of the **Basis**, which scales it uniformly.
+Multiplies all components of the **Basis** by the given :ref:`float<class_float>`. This affects the basis's scale uniformly, resizing all 3 axes by the ``right`` value.
 
 .. rst-class:: classref-item-separator
 
@@ -585,7 +874,7 @@ This operator multiplies all components of the **Basis**, which scales it unifor
 
 :ref:`Basis<class_Basis>` **operator *** **(** :ref:`int<class_int>` right **)**
 
-This operator multiplies all components of the **Basis**, which scales it uniformly.
+Multiplies all components of the **Basis** by the given :ref:`int<class_int>`. This affects the basis's scale uniformly, resizing all 3 axes by the ``right`` value.
 
 .. rst-class:: classref-item-separator
 
@@ -597,7 +886,7 @@ This operator multiplies all components of the **Basis**, which scales it unifor
 
 :ref:`bool<class_bool>` **operator ==** **(** :ref:`Basis<class_Basis>` right **)**
 
-Returns ``true`` if the **Basis** matrices are exactly equal.
+Returns ``true`` if the components of both **Basis** matrices are exactly equal.
 
 \ **Note:** Due to floating-point precision errors, consider using :ref:`is_equal_approx<class_Basis_method_is_equal_approx>` instead, which is more reliable.
 
@@ -611,7 +900,9 @@ Returns ``true`` if the **Basis** matrices are exactly equal.
 
 :ref:`Vector3<class_Vector3>` **operator []** **(** :ref:`int<class_int>` index **)**
 
-Access basis components using their index. ``b[0]`` is equivalent to ``b.x``, ``b[1]`` is equivalent to ``b.y``, and ``b[2]`` is equivalent to ``b.z``.
+Accesses each axis (column) of this basis by their index. Index ``0`` is the same as :ref:`x<class_Basis_property_x>`, index ``1`` is the same as :ref:`y<class_Basis_property_y>`, and index ``2`` is the same as :ref:`z<class_Basis_property_z>`.
+
+\ **Note:** In C++, this operator accesses the rows of the basis matrix, *not* the columns. For the same behavior as scripting languages, use the ``set_column`` and ``get_column`` methods.
 
 .. |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
 

+ 7 - 0
classes/class_boxoccluder3d.rst

@@ -23,6 +23,13 @@ Description
 
 See :ref:`OccluderInstance3D<class_OccluderInstance3D>`'s documentation for instructions on setting up occlusion culling.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Occlusion culling <../tutorials/3d/occlusion_culling>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 3 - 1
classes/class_callable.rst

@@ -256,6 +256,8 @@ Calls the method represented by this **Callable** in deferred mode, i.e. at the
     func _ready():
         grab_focus.call_deferred()
 
+\ **Note:** Deferred calls are processed at idle time. Idle time happens mainly at the end of process and physics frames. In it, deferred calls will be run until there are none left, which means you can defer calls from other deferred calls and they'll still be run in the current idle time cycle. This means you should not call a method deferred from itself (or from a method called by it), as this causes infinite recursion the same way as if you had called the method directly.
+
 See also :ref:`Object.call_deferred<class_Object_method_call_deferred>`.
 
 .. rst-class:: classref-item-separator
@@ -304,7 +306,7 @@ Returns the total amount of arguments bound (or unbound) via successive :ref:`bi
 
 :ref:`StringName<class_StringName>` **get_method** **(** **)** |const|
 
-Returns the name of the method represented by this **Callable**. If the callable is a lambda function, returns the function's name.
+Returns the name of the method represented by this **Callable**. If the callable is a GDScript lambda function, returns the function's name or ``"<anonymous lambda>"``.
 
 .. rst-class:: classref-item-separator
 

+ 2 - 2
classes/class_camera3d.rst

@@ -577,7 +577,7 @@ Returns the RID of a pyramid shape encompassing the camera's view frustum, ignor
 
 :ref:`bool<class_bool>` **is_position_behind** **(** :ref:`Vector3<class_Vector3>` world_point **)** |const|
 
-Returns ``true`` if the given position is behind the camera (the blue part of the linked diagram). `See this diagram <https://raw.githubusercontent.com/godotengine/godot-docs/master/img/camera3d_position_frustum.png>`__ for an overview of position query methods.
+Returns ``true`` if the given position is behind the camera (the blue part of the linked diagram). `See this diagram <https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/camera3d_position_frustum.png>`__ for an overview of position query methods.
 
 \ **Note:** A position which returns ``false`` may still be outside the camera's field of view.
 
@@ -591,7 +591,7 @@ Returns ``true`` if the given position is behind the camera (the blue part of th
 
 :ref:`bool<class_bool>` **is_position_in_frustum** **(** :ref:`Vector3<class_Vector3>` world_point **)** |const|
 
-Returns ``true`` if the given position is inside the camera's frustum (the green part of the linked diagram). `See this diagram <https://raw.githubusercontent.com/godotengine/godot-docs/master/img/camera3d_position_frustum.png>`__ for an overview of position query methods.
+Returns ``true`` if the given position is inside the camera's frustum (the green part of the linked diagram). `See this diagram <https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/camera3d_position_frustum.png>`__ for an overview of position query methods.
 
 .. rst-class:: classref-item-separator
 

+ 8 - 1
classes/class_cameraattributesphysical.rst

@@ -27,6 +27,13 @@ The default settings are intended for use in an outdoor environment, tips for se
 
 \ **Note:** Depth of field blur is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Physical light and camera units <../tutorials/3d/physical_light_and_camera_units>`
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -138,7 +145,7 @@ Only available when :ref:`ProjectSettings.rendering/lights_and_shadows/use_physi
 - void **set_shutter_speed** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_shutter_speed** **(** **)**
 
-Time for shutter to open and close, measured in seconds. A higher value will let in more light leading to a brighter image, while a lower amount will let in less light leading to a darker image.
+Time for shutter to open and close, evaluated as ``1 / shutter_speed`` seconds. A higher value will allow less light (leading to a darker image), while a lower value will allow more light (leading to a brighter image).
 
 Only available when :ref:`ProjectSettings.rendering/lights_and_shadows/use_physical_light_units<class_ProjectSettings_property_rendering/lights_and_shadows/use_physical_light_units>` is enabled.
 

+ 14 - 10
classes/class_canvasitem.rst

@@ -288,7 +288,7 @@ The **CanvasItem** will inherit the filter from its parent.
 
 :ref:`TextureFilter<enum_CanvasItem_TextureFilter>` **TEXTURE_FILTER_NEAREST** = ``1``
 
-The texture filter reads from the nearest pixel only. The simplest and fastest method of filtering. Useful for pixel art.
+The texture filter reads from the nearest pixel only. This makes the texture look pixelated from up close, and grainy from a distance (due to mipmaps not being sampled).
 
 .. _class_CanvasItem_constant_TEXTURE_FILTER_LINEAR:
 
@@ -296,7 +296,7 @@ The texture filter reads from the nearest pixel only. The simplest and fastest m
 
 :ref:`TextureFilter<enum_CanvasItem_TextureFilter>` **TEXTURE_FILTER_LINEAR** = ``2``
 
-The texture filter blends between the nearest four pixels. Use this for most cases where you want to avoid a pixelated style.
+The texture filter blends between the nearest 4 pixels. This makes the texture look smooth from up close, and grainy from a distance (due to mipmaps not being sampled).
 
 .. _class_CanvasItem_constant_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS:
 
@@ -304,7 +304,9 @@ The texture filter blends between the nearest four pixels. Use this for most cas
 
 :ref:`TextureFilter<enum_CanvasItem_TextureFilter>` **TEXTURE_FILTER_NEAREST_WITH_MIPMAPS** = ``3``
 
-The texture filter reads from the nearest pixel in the nearest mipmap. This is the fastest way to read from textures with mipmaps.
+The texture filter reads from the nearest pixel and blends between the nearest 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``). This makes the texture look pixelated from up close, and smooth from a distance.
+
+Use this for non-pixel art textures that may be viewed at a low scale (e.g. due to :ref:`Camera2D<class_Camera2D>` zoom or sprite scaling), as mipmaps are important to smooth out pixels that are smaller than on-screen pixels.
 
 .. _class_CanvasItem_constant_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS:
 
@@ -312,7 +314,9 @@ The texture filter reads from the nearest pixel in the nearest mipmap. This is t
 
 :ref:`TextureFilter<enum_CanvasItem_TextureFilter>` **TEXTURE_FILTER_LINEAR_WITH_MIPMAPS** = ``4``
 
-The texture filter blends between the nearest 4 pixels and between the nearest 2 mipmaps. Use this for non-pixel art textures that may be viewed at a low scale (e.g. due to :ref:`Camera2D<class_Camera2D>` zoom), as mipmaps are important to smooth out pixels that are smaller than on-screen pixels.
+The texture filter blends between the nearest 4 pixels and between the nearest 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``). This makes the texture look smooth from up close, and smooth from a distance.
+
+Use this for non-pixel art textures that may be viewed at a low scale (e.g. due to :ref:`Camera2D<class_Camera2D>` zoom or sprite scaling), as mipmaps are important to smooth out pixels that are smaller than on-screen pixels.
 
 .. _class_CanvasItem_constant_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC:
 
@@ -320,9 +324,9 @@ The texture filter blends between the nearest 4 pixels and between the nearest 2
 
 :ref:`TextureFilter<enum_CanvasItem_TextureFilter>` **TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC** = ``5``
 
-The texture filter reads from the nearest pixel, but selects a mipmap based on the angle between the surface and the camera view. This reduces artifacts on surfaces that are almost in line with the camera. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
+The texture filter reads from the nearest pixel and blends between 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``) based on the angle between the surface and the camera view. This makes the texture look pixelated from up close, and smooth from a distance. Anisotropic filtering improves texture quality on surfaces that are almost in line with the camera, but is slightly slower. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
 
-\ **Note:** This texture filter is rarely useful in 2D projects. :ref:`TEXTURE_FILTER_NEAREST_WITH_MIPMAPS<class_CanvasItem_constant_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS>` is usually more appropriate.
+\ **Note:** This texture filter is rarely useful in 2D projects. :ref:`TEXTURE_FILTER_NEAREST_WITH_MIPMAPS<class_CanvasItem_constant_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS>` is usually more appropriate in this case.
 
 .. _class_CanvasItem_constant_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC:
 
@@ -330,9 +334,9 @@ The texture filter reads from the nearest pixel, but selects a mipmap based on t
 
 :ref:`TextureFilter<enum_CanvasItem_TextureFilter>` **TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC** = ``6``
 
-The texture filter blends between the nearest 4 pixels and selects a mipmap based on the angle between the surface and the camera view. This reduces artifacts on surfaces that are almost in line with the camera. This is the slowest of the filtering options, but results in the highest quality texturing. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
+The texture filter blends between the nearest 4 pixels and blends between 2 mipmaps (or uses the nearest mipmap if :ref:`ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter<class_ProjectSettings_property_rendering/textures/default_filters/use_nearest_mipmap_filter>` is ``true``) based on the angle between the surface and the camera view. This makes the texture look smooth from up close, and smooth from a distance. Anisotropic filtering improves texture quality on surfaces that are almost in line with the camera, but is slightly slower. The anisotropic filtering level can be changed by adjusting :ref:`ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level<class_ProjectSettings_property_rendering/textures/default_filters/anisotropic_filtering_level>`.
 
-\ **Note:** This texture filter is rarely useful in 2D projects. :ref:`TEXTURE_FILTER_LINEAR_WITH_MIPMAPS<class_CanvasItem_constant_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS>` is usually more appropriate.
+\ **Note:** This texture filter is rarely useful in 2D projects. :ref:`TEXTURE_FILTER_LINEAR_WITH_MIPMAPS<class_CanvasItem_constant_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS>` is usually more appropriate in this case.
 
 .. _class_CanvasItem_constant_TEXTURE_FILTER_MAX:
 
@@ -519,7 +523,7 @@ Property Descriptions
 - void **set_clip_children_mode** **(** :ref:`ClipChildrenMode<enum_CanvasItem_ClipChildrenMode>` value **)**
 - :ref:`ClipChildrenMode<enum_CanvasItem_ClipChildrenMode>` **get_clip_children_mode** **(** **)**
 
-Allows the current node to clip children nodes, essentially acting as a mask.
+Allows the current node to clip child nodes, essentially acting as a mask.
 
 .. rst-class:: classref-item-separator
 
@@ -1466,7 +1470,7 @@ void **move_to_front** **(** **)**
 
 Moves this node to display on top of its siblings.
 
-Internally, the node is moved to the bottom of parent's children list. The method has no effect on nodes without a parent.
+Internally, the node is moved to the bottom of parent's child list. The method has no effect on nodes without a parent.
 
 .. rst-class:: classref-item-separator
 

+ 3 - 1
classes/class_collisionpolygon2d.rst

@@ -21,7 +21,7 @@ Description
 
 A node that provides a thickened polygon shape (a prism) to a :ref:`CollisionObject2D<class_CollisionObject2D>` parent and allows to edit it. The polygon can be concave or convex. This can give a detection shape to an :ref:`Area2D<class_Area2D>` or turn :ref:`PhysicsBody2D<class_PhysicsBody2D>` into a solid object.
 
-\ **Warning:** A non-uniformly scaled :ref:`CollisionShape3D<class_CollisionShape3D>` will likely not behave as expected. Make sure to keep its scale the same on all axes and adjust its shape resource instead.
+\ **Warning:** A non-uniformly scaled :ref:`CollisionShape2D<class_CollisionShape2D>` will likely not behave as expected. Make sure to keep its scale the same on all axes and adjust its shape resource instead.
 
 .. rst-class:: classref-reftable-group
 
@@ -166,6 +166,8 @@ The margin used for one-way collision (in pixels). Higher values will make the s
 
 The polygon's list of vertices. Each point will be connected to the next, and the final point will be connected to the first.
 
+\ **Note:** The returned vertices are in the local coordinate space of the given **CollisionPolygon2D**.
+
 \ **Warning:** The returned value is a clone of the :ref:`PackedVector2Array<class_PackedVector2Array>`, not a reference.
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`

+ 2 - 2
classes/class_color.rst

@@ -17,13 +17,13 @@ A color represented in RGBA format.
 Description
 -----------
 
-A color represented in RGBA format by a red (:ref:`r<class_Color_property_r>`), green (:ref:`g<class_Color_property_g>`), blue (:ref:`b<class_Color_property_b>`), and alpha (:ref:`a<class_Color_property_a>`) component. Each component is a 16-bit floating-point value, usually ranging from ``0.0`` to ``1.0``. Some properties (such as :ref:`CanvasItem.modulate<class_CanvasItem_property_modulate>`) may support values greater than ``1.0``, for overbright or HDR (High Dynamic Range) colors.
+A color represented in RGBA format by a red (:ref:`r<class_Color_property_r>`), green (:ref:`g<class_Color_property_g>`), blue (:ref:`b<class_Color_property_b>`), and alpha (:ref:`a<class_Color_property_a>`) component. Each component is a 32-bit floating-point value, usually ranging from ``0.0`` to ``1.0``. Some properties (such as :ref:`CanvasItem.modulate<class_CanvasItem_property_modulate>`) may support values greater than ``1.0``, for overbright or HDR (High Dynamic Range) colors.
 
 Colors can be created in various ways: By the various **Color** constructors, by static methods such as :ref:`from_hsv<class_Color_method_from_hsv>`, and by using a name from the set of standardized colors based on `X11 color names <https://en.wikipedia.org/wiki/X11_color_names>`__ with the addition of :ref:`TRANSPARENT<class_Color_constant_TRANSPARENT>`. GDScript also provides :ref:`@GDScript.Color8<class_@GDScript_method_Color8>`, which uses integers from ``0`` to ``255`` and doesn't support overbright colors.
 
 \ **Note:** In a boolean context, a Color will evaluate to ``false`` if it is equal to ``Color(0, 0, 0, 1)`` (opaque black). Otherwise, a Color will always evaluate to ``true``.
 
-\ `Color constants cheatsheet <https://raw.githubusercontent.com/godotengine/godot-docs/master/img/color_constants.png>`__
+\ `Color constants cheatsheet <https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/color_constants.png>`__
 
 .. rst-class:: classref-introduction-group
 

+ 1 - 1
classes/class_concavepolygonshape2d.rst

@@ -21,7 +21,7 @@ Description
 
 A 2D polyline shape, intended for use in physics. Used internally in :ref:`CollisionPolygon2D<class_CollisionPolygon2D>` when it's in ``BUILD_SEGMENTS`` mode.
 
-Being just a collection of interconnected line segments, **ConcavePolygonShape2D** is the most freely configurable single 2D shape. It can be used to form polygons of any nature, or even shapes that don't enclose an area. However, :ref:`ConvexPolygonShape2D<class_ConvexPolygonShape2D>` is *hollow* even if the interconnected line segments do enclose an area, which often makes it unsuitable for physics or detection.
+Being just a collection of interconnected line segments, **ConcavePolygonShape2D** is the most freely configurable single 2D shape. It can be used to form polygons of any nature, or even shapes that don't enclose an area. However, **ConcavePolygonShape2D** is *hollow* even if the interconnected line segments do enclose an area, which often makes it unsuitable for physics or detection.
 
 \ **Note:** When used for collision, **ConcavePolygonShape2D** is intended to work with static :ref:`CollisionShape2D<class_CollisionShape2D>` nodes like :ref:`StaticBody2D<class_StaticBody2D>` and will likely not behave well for :ref:`CharacterBody2D<class_CharacterBody2D>`\ s or :ref:`RigidBody2D<class_RigidBody2D>`\ s in a mode other than Static.
 

+ 1 - 1
classes/class_concavepolygonshape3d.rst

@@ -21,7 +21,7 @@ Description
 
 A 3D trimesh shape, intended for use in physics. Usually used to provide a shape for a :ref:`CollisionShape3D<class_CollisionShape3D>`.
 
-Being just a collection of interconnected triangles, **ConcavePolygonShape3D** is the most freely configurable single 3D shape. It can be used to form polyhedra of any nature, or even shapes that don't enclose a volume. However, :ref:`ConvexPolygonShape3D<class_ConvexPolygonShape3D>` is *hollow* even if the interconnected triangles do enclose a volume, which often makes it unsuitable for physics or detection.
+Being just a collection of interconnected triangles, **ConcavePolygonShape3D** is the most freely configurable single 3D shape. It can be used to form polyhedra of any nature, or even shapes that don't enclose a volume. However, **ConcavePolygonShape3D** is *hollow* even if the interconnected triangles do enclose a volume, which often makes it unsuitable for physics or detection.
 
 \ **Note:** When used for collision, **ConcavePolygonShape3D** is intended to work with static :ref:`CollisionShape3D<class_CollisionShape3D>` nodes like :ref:`StaticBody3D<class_StaticBody3D>` and will likely not behave well for :ref:`CharacterBody3D<class_CharacterBody3D>`\ s or :ref:`RigidBody3D<class_RigidBody3D>`\ s in a mode other than Static.
 

+ 8 - 2
classes/class_control.rst

@@ -52,6 +52,8 @@ Tutorials
 
 - :doc:`Control node gallery <../tutorials/ui/control_node_gallery>`
 
+- :doc:`Multiple resolutions <../tutorials/rendering/multiple_resolutions>`
+
 - `All GUI Demos <https://github.com/godotengine/godot-demo-projects/tree/master/gui>`__
 
 .. rst-class:: classref-reftable-group
@@ -1123,7 +1125,9 @@ Sent when the node needs to refresh its theme items. This happens in one of the
 
 **NOTIFICATION_SCROLL_BEGIN** = ``47``
 
-Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has begun being scrolled.
+Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has begun being scrolled when dragging the scrollable area *with a touch event*. This notification is *not* sent when scrolling by dragging the scrollbar, scrolling with the mouse wheel or scrolling with keyboard/gamepad events.
+
+\ **Note:** This signal is only emitted on Android or iOS, or on desktop/web platforms when :ref:`ProjectSettings.input_devices/pointing/emulate_touch_from_mouse<class_ProjectSettings_property_input_devices/pointing/emulate_touch_from_mouse>` is enabled.
 
 .. _class_Control_constant_NOTIFICATION_SCROLL_END:
 
@@ -1131,7 +1135,9 @@ Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` wh
 
 **NOTIFICATION_SCROLL_END** = ``48``
 
-Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has stopped being scrolled.
+Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has stopped being scrolled when dragging the scrollable area *with a touch event*. This notification is *not* sent when scrolling by dragging the scrollbar, scrolling with the mouse wheel or scrolling with keyboard/gamepad events.
+
+\ **Note:** This signal is only emitted on Android or iOS, or on desktop/web platforms when :ref:`ProjectSettings.input_devices/pointing/emulate_touch_from_mouse<class_ProjectSettings_property_input_devices/pointing/emulate_touch_from_mouse>` is enabled.
 
 .. _class_Control_constant_NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
 

+ 1 - 1
classes/class_convexpolygonshape2d.rst

@@ -23,7 +23,7 @@ A 2D convex polygon shape, intended for use in physics. Used internally in :ref:
 
 \ **ConvexPolygonShape2D** is *solid*, which means it detects collisions from objects that are fully inside it, unlike :ref:`ConcavePolygonShape2D<class_ConcavePolygonShape2D>` which is hollow. This makes it more suitable for both detection and physics.
 
-\ **Convex decomposition:** A concave polygon can be split up into several convex polygons. This allows dynamic physics bodies to have complex concave collisions (at a performance cost) and can be achieved by using several :ref:`ConvexPolygonShape3D<class_ConvexPolygonShape3D>` nodes or by using the :ref:`CollisionPolygon2D<class_CollisionPolygon2D>` node in ``BUILD_SOLIDS`` mode. To generate a collision polygon from a sprite, select the :ref:`Sprite2D<class_Sprite2D>` node, go to the **Sprite2D** menu that appears above the viewport, and choose **Create Polygon2D Sibling**.
+\ **Convex decomposition:** A concave polygon can be split up into several convex polygons. This allows dynamic physics bodies to have complex concave collisions (at a performance cost) and can be achieved by using several **ConvexPolygonShape2D** nodes or by using the :ref:`CollisionPolygon2D<class_CollisionPolygon2D>` node in ``BUILD_SOLIDS`` mode. To generate a collision polygon from a sprite, select the :ref:`Sprite2D<class_Sprite2D>` node, go to the **Sprite2D** menu that appears above the viewport, and choose **Create Polygon2D Sibling**.
 
 \ **Performance:** **ConvexPolygonShape2D** is faster to check collisions against compared to :ref:`ConcavePolygonShape2D<class_ConcavePolygonShape2D>`, but it is slower than primitive collision shapes such as :ref:`CircleShape2D<class_CircleShape2D>` and :ref:`RectangleShape2D<class_RectangleShape2D>`. Its use should generally be limited to medium-sized objects that cannot have their collision accurately represented by primitive shapes.
 

+ 1 - 1
classes/class_cpuparticles2d.rst

@@ -229,7 +229,7 @@ Particles are drawn in the order emitted.
 
 :ref:`DrawOrder<enum_CPUParticles2D_DrawOrder>` **DRAW_ORDER_LIFETIME** = ``1``
 
-Particles are drawn in order of remaining lifetime.
+Particles are drawn in order of remaining lifetime. In other words, the particle with the highest lifetime is drawn at the front.
 
 .. rst-class:: classref-item-separator
 

+ 8 - 1
classes/class_cpuparticles3d.rst

@@ -23,6 +23,13 @@ CPU-based 3D particle node used to create a variety of particle systems and effe
 
 See also :ref:`GPUParticles3D<class_GPUParticles3D>`, which provides the same functionality with hardware acceleration, but may not run on older devices.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Particle systems (3D) <../tutorials/3d/particles/index>`
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -238,7 +245,7 @@ Particles are drawn in the order emitted.
 
 :ref:`DrawOrder<enum_CPUParticles3D_DrawOrder>` **DRAW_ORDER_LIFETIME** = ``1``
 
-Particles are drawn in order of remaining lifetime.
+Particles are drawn in order of remaining lifetime. In other words, the particle with the highest lifetime is drawn at the front.
 
 .. _class_CPUParticles3D_constant_DRAW_ORDER_VIEW_DEPTH:
 

+ 7 - 0
classes/class_cryptokey.rst

@@ -23,6 +23,13 @@ The CryptoKey class represents a cryptographic key. Keys can be loaded and saved
 
 They can be used to generate a self-signed :ref:`X509Certificate<class_X509Certificate>` via :ref:`Crypto.generate_self_signed_certificate<class_Crypto_method_generate_self_signed_certificate>` and as private key in :ref:`StreamPeerTLS.accept_stream<class_StreamPeerTLS_method_accept_stream>` along with the appropriate certificate.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`SSL certificates <../tutorials/networking/ssl_certificates>`
+
 .. rst-class:: classref-reftable-group
 
 Methods

+ 3 - 1
classes/class_csgmesh3d.rst

@@ -83,7 +83,9 @@ The :ref:`Material<class_Material>` used in drawing the CSG shape.
 
 The :ref:`Mesh<class_Mesh>` resource to use as a CSG shape.
 
-\ **Note:** When using an :ref:`ArrayMesh<class_ArrayMesh>`, avoid meshes with vertex normals unless a flat shader is required. By default, CSGMesh will ignore the mesh's vertex normals and use a smooth shader calculated using the faces' normals. If a flat shader is required, ensure that all faces' vertex normals are parallel.
+\ **Note:** When using an :ref:`ArrayMesh<class_ArrayMesh>`, all vertex attributes except :ref:`Mesh.ARRAY_VERTEX<class_Mesh_constant_ARRAY_VERTEX>`, :ref:`Mesh.ARRAY_NORMAL<class_Mesh_constant_ARRAY_NORMAL>` and :ref:`Mesh.ARRAY_TEX_UV<class_Mesh_constant_ARRAY_TEX_UV>` are left unused. Only :ref:`Mesh.ARRAY_VERTEX<class_Mesh_constant_ARRAY_VERTEX>` and :ref:`Mesh.ARRAY_TEX_UV<class_Mesh_constant_ARRAY_TEX_UV>` will be passed to the GPU.
+
+\ :ref:`Mesh.ARRAY_NORMAL<class_Mesh_constant_ARRAY_NORMAL>` is only used to determine which faces require the use of flat shading. By default, CSGMesh will ignore the mesh's vertex normals, recalculate them for each vertex and use a smooth shader. If a flat shader is required for a face, ensure that all vertex normals of the face are approximately equal.
 
 .. |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.)`

+ 2 - 2
classes/class_cylindershape3d.rst

@@ -19,11 +19,11 @@ A 3D cylinder shape used for physics collision.
 Description
 -----------
 
-A 2D capsule shape, intended for use in physics. Usually used to provide a shape for a :ref:`CollisionShape3D<class_CollisionShape3D>`.
+A 3D cylinder shape, intended for use in physics. Usually used to provide a shape for a :ref:`CollisionShape3D<class_CollisionShape3D>`.
 
 \ **Note:** There are several known bugs with cylinder collision shapes. Using :ref:`CapsuleShape3D<class_CapsuleShape3D>` or :ref:`BoxShape3D<class_BoxShape3D>` instead is recommended.
 
-\ **Performance:** **CylinderShape3D** is fast to check collisions against, but it is slower than :ref:`CapsuleShape3D<class_CapsuleShape3D>`, :ref:`BoxShape3D<class_BoxShape3D>`, and **CylinderShape3D**.
+\ **Performance:** **CylinderShape3D** is fast to check collisions against, but it is slower than :ref:`CapsuleShape3D<class_CapsuleShape3D>`, :ref:`BoxShape3D<class_BoxShape3D>`, and :ref:`SphereShape3D<class_SphereShape3D>`.
 
 .. rst-class:: classref-introduction-group
 

+ 42 - 0
classes/class_dictionary.rst

@@ -528,6 +528,48 @@ void **merge** **(** :ref:`Dictionary<class_Dictionary>` dictionary, :ref:`bool<
 
 Adds entries from ``dictionary`` to this dictionary. By default, duplicate keys are not copied over, unless ``overwrite`` is ``true``.
 
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var dict = { "item": "sword", "quantity": 2 }
+    var other_dict = { "quantity": 15, "color": "silver" }
+    
+    # Overwriting of existing keys is disabled by default.
+    dict.merge(other_dict)
+    print(dict)  # { "item": "sword", "quantity": 2, "color": "silver" }
+    
+    # With overwriting of existing keys enabled.
+    dict.merge(other_dict, true)
+    print(dict)  # { "item": "sword", "quantity": 15, "color": "silver" }
+
+ .. code-tab:: csharp
+
+    var dict = new Godot.Collections.Dictionary
+    {
+        ["item"] = "sword",
+        ["quantity"] = 2,
+    };
+    
+    var otherDict = new Godot.Collections.Dictionary
+    {
+        ["quantity"] = 15,
+        ["color"] = "silver",
+    };
+    
+    // Overwriting of existing keys is disabled by default.
+    dict.Merge(otherDict);
+    GD.Print(dict); // { "item": "sword", "quantity": 2, "color": "silver" }
+    
+    // With overwriting of existing keys enabled.
+    dict.Merge(otherDict, true);
+    GD.Print(dict); // { "item": "sword", "quantity": 15, "color": "silver" }
+
+
+
+\ **Note:** :ref:`merge<class_Dictionary_method_merge>` is *not* recursive. Nested dictionaries are considered as keys that can be overwritten or not depending on the value of ``overwrite``, but they will never be merged together.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 3 - 1
classes/class_directionallight3d.rst

@@ -26,7 +26,9 @@ A directional light is a type of :ref:`Light3D<class_Light3D>` node that models
 Tutorials
 ---------
 
-- :doc:`Lights and shadows <../tutorials/3d/lights_and_shadows>`
+- :doc:`3D lights and shadows <../tutorials/3d/lights_and_shadows>`
+
+- :doc:`Faking global illumination <../tutorials/3d/global_illumination/faking_global_illumination>`
 
 .. rst-class:: classref-reftable-group
 

+ 5 - 5
classes/class_displayserver.rst

@@ -1134,7 +1134,7 @@ enum **VSyncMode**:
 
 :ref:`VSyncMode<enum_DisplayServer_VSyncMode>` **VSYNC_DISABLED** = ``0``
 
-No vertical synchronization, which means the engine will display frames as fast as possible (tearing may be visible). Framerate is unlimited (nonwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`).
+No vertical synchronization, which means the engine will display frames as fast as possible (tearing may be visible). Framerate is unlimited (notwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`).
 
 .. _class_DisplayServer_constant_VSYNC_ENABLED:
 
@@ -1142,7 +1142,7 @@ No vertical synchronization, which means the engine will display frames as fast
 
 :ref:`VSyncMode<enum_DisplayServer_VSyncMode>` **VSYNC_ENABLED** = ``1``
 
-Default vertical synchronization mode, the image is displayed only on vertical blanking intervals (no tearing is visible). Framerate is limited by the monitor refresh rate (nonwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`).
+Default vertical synchronization mode, the image is displayed only on vertical blanking intervals (no tearing is visible). Framerate is limited by the monitor refresh rate (notwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`).
 
 .. _class_DisplayServer_constant_VSYNC_ADAPTIVE:
 
@@ -1150,7 +1150,7 @@ Default vertical synchronization mode, the image is displayed only on vertical b
 
 :ref:`VSyncMode<enum_DisplayServer_VSyncMode>` **VSYNC_ADAPTIVE** = ``2``
 
-Behaves like :ref:`VSYNC_DISABLED<class_DisplayServer_constant_VSYNC_DISABLED>` when the framerate drops below the screen's refresh rate to reduce stuttering (tearing may be visible). Otherwise, vertical synchronization is enabled to avoid tearing. Framerate is limited by the monitor refresh rate (nonwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`). Behaves like :ref:`VSYNC_ENABLED<class_DisplayServer_constant_VSYNC_ENABLED>` when using the Compatibility rendering method.
+Behaves like :ref:`VSYNC_DISABLED<class_DisplayServer_constant_VSYNC_DISABLED>` when the framerate drops below the screen's refresh rate to reduce stuttering (tearing may be visible). Otherwise, vertical synchronization is enabled to avoid tearing. Framerate is limited by the monitor refresh rate (notwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`). Behaves like :ref:`VSYNC_ENABLED<class_DisplayServer_constant_VSYNC_ENABLED>` when using the Compatibility rendering method.
 
 .. _class_DisplayServer_constant_VSYNC_MAILBOX:
 
@@ -1158,7 +1158,7 @@ Behaves like :ref:`VSYNC_DISABLED<class_DisplayServer_constant_VSYNC_DISABLED>`
 
 :ref:`VSyncMode<enum_DisplayServer_VSyncMode>` **VSYNC_MAILBOX** = ``3``
 
-Displays the most recent image in the queue on vertical blanking intervals, while rendering to the other images (no tearing is visible). Framerate is unlimited (nonwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`).
+Displays the most recent image in the queue on vertical blanking intervals, while rendering to the other images (no tearing is visible). Framerate is unlimited (notwithstanding :ref:`Engine.max_fps<class_Engine_property_max_fps>`).
 
 Although not guaranteed, the images can be rendered as fast as possible, which may reduce input lag (also called "Fast" V-Sync mode). :ref:`VSYNC_MAILBOX<class_DisplayServer_constant_VSYNC_MAILBOX>` works best when at least twice as many frames as the display refresh rate are rendered. Behaves like :ref:`VSYNC_ENABLED<class_DisplayServer_constant_VSYNC_ENABLED>` when using the Compatibility rendering method.
 
@@ -2475,7 +2475,7 @@ Returns ``true`` if OS supports dark mode.
 
 :ref:`bool<class_bool>` **is_touchscreen_available** **(** **)** |const|
 
-Returns ``true`` if touch events are available (Android or iOS), the capability is detected on the Webplatform or if :ref:`ProjectSettings.input_devices/pointing/emulate_touch_from_mouse<class_ProjectSettings_property_input_devices/pointing/emulate_touch_from_mouse>` is ``true``.
+Returns ``true`` if touch events are available (Android or iOS), the capability is detected on the Web platform or if :ref:`ProjectSettings.input_devices/pointing/emulate_touch_from_mouse<class_ProjectSettings_property_input_devices/pointing/emulate_touch_from_mouse>` is ``true``.
 
 .. rst-class:: classref-item-separator
 

+ 3 - 3
classes/class_dtlsserver.rst

@@ -66,7 +66,7 @@ Below a small example of how to use it:
     {
         private DtlsServer _dtls = new DtlsServer();
         private UdpServer _server = new UdpServer();
-        private Godot.Collections.Array<PacketPeerDTLS> _peers = new Godot.Collections.Array<PacketPeerDTLS>();
+        private Godot.Collections.Array<PacketPeerDtls> _peers = new Godot.Collections.Array<PacketPeerDtls>();
     
         public override void _Ready()
         {
@@ -80,8 +80,8 @@ Below a small example of how to use it:
         {
             while (Server.IsConnectionAvailable())
             {
-                PacketPeerUDP peer = _server.TakeConnection();
-                PacketPeerDTLS dtlsPeer = _dtls.TakeConnection(peer);
+                PacketPeerUdp peer = _server.TakeConnection();
+                PacketPeerDtls dtlsPeer = _dtls.TakeConnection(peer);
                 if (dtlsPeer.GetStatus() != PacketPeerDtls.Status.Handshaking)
                 {
                     continue; // It is normal that 50% of the connections fails due to cookie exchange.

+ 1 - 1
classes/class_editordebuggerplugin.rst

@@ -151,7 +151,7 @@ Returns the :ref:`EditorDebuggerSession<class_EditorDebuggerSession>` with the g
 
 Returns an array of :ref:`EditorDebuggerSession<class_EditorDebuggerSession>` currently available to this debugger plugin.
 
-Note: Not sessions in the array may be inactive, check their state via :ref:`EditorDebuggerSession.is_active<class_EditorDebuggerSession_method_is_active>`
+\ **Note:** Not sessions in the array may be inactive, check their state via :ref:`EditorDebuggerSession.is_active<class_EditorDebuggerSession_method_is_active>`
 
 .. |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.)`

+ 7 - 0
classes/class_editorexportplatform.rst

@@ -25,6 +25,13 @@ Base resource that provides the functionality of exporting a release build of a
 
 Used in scripting by :ref:`EditorExportPlugin<class_EditorExportPlugin>` to configure platform-specific customization of scenes and resources. See :ref:`EditorExportPlugin._begin_customize_scenes<class_EditorExportPlugin_method__begin_customize_scenes>` and :ref:`EditorExportPlugin._begin_customize_resources<class_EditorExportPlugin_method__begin_customize_resources>` for more details.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Console support in Godot <../tutorials/platform/consoles>`
+
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 23 - 1
classes/class_editorexportplatformandroid.rst

@@ -23,6 +23,8 @@ Tutorials
 
 - :doc:`Gradle builds for Android <../tutorials/export/android_gradle_build>`
 
+- :doc:`Android plugins documentation index <../tutorials/platform/index>`
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -256,6 +258,8 @@ Properties
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                           | :ref:`permissions/persistent_activity<class_EditorExportPlatformAndroid_property_permissions/persistent_activity>`                               |
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`permissions/post_notifications<class_EditorExportPlatformAndroid_property_permissions/post_notifications>`                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                           | :ref:`permissions/process_outgoing_calls<class_EditorExportPlatformAndroid_property_permissions/process_outgoing_calls>`                         |
    +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`bool<class_bool>`                           | :ref:`permissions/read_calendar<class_EditorExportPlatformAndroid_property_permissions/read_calendar>`                                           |
@@ -794,7 +798,13 @@ If ``true``, package signing is enabled.
 
 :ref:`String<class_String>` **package/unique_name**
 
-Unique application identifier in a reverse-DNS format, can only contain alphanumeric characters (``A-Z``, ``a-z``, and ``0-9``), hyphens (``-``), and periods (``.``).
+Unique application identifier in a reverse-DNS format. The reverse DNS format should preferably match a domain name you control, but this is not strictly required. For instance, if you own ``example.com``, your package unique name should preferably be of the form ``com.example.mygame``. This identifier can only contain lowercase alphanumeric characters (``a-z``, and ``0-9``), underscores (``_``), and periods (``.``). Each component of the reverse DNS format must start with a letter: for instance, ``com.example.8game`` is not valid.
+
+If ``$genname`` is present in the value, it will be replaced by the project name converted to lowercase. If there are invalid characters in the project name, they will be stripped. If all characters in the project name are stripped, ``$genname`` is replaced by ``noname``.
+
+\ **Note:** Changing the package name will cause the package to be considered as a new package, with its own installation and data paths. The new package won't be usable to update existing installations.
+
+\ **Note:** When publishing to Google Play, the package name must be *globally* unique. This means no other apps published on Google Play must be using the same package name as yours. Otherwise, you'll be prevented from publishing your app on Google Play.
 
 .. rst-class:: classref-item-separator
 
@@ -1786,6 +1796,18 @@ Deprecated in API level 15.
 
 ----
 
+.. _class_EditorExportPlatformAndroid_property_permissions/post_notifications:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **permissions/post_notifications**
+
+Allow an application to post notifications. Added in API level 33. See `Notification runtime permission <https://developer.android.com/develop/ui/views/notifications/notification-permission>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_EditorExportPlatformAndroid_property_permissions/process_outgoing_calls:
 
 .. rst-class:: classref-property

+ 2185 - 125
classes/class_editorexportplatformios.rst

@@ -21,6 +21,8 @@ Tutorials
 
 - :doc:`Exporting for iOS <../tutorials/export/exporting_for_ios>`
 
+- :doc:`iOS plugins documentation index <../tutorials/platform/ios/index>`
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -29,119 +31,413 @@ Properties
 .. table::
    :widths: auto
 
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/app_store_team_id<class_EditorExportPlatformIOS_property_application/app_store_team_id>`                                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/bundle_identifier<class_EditorExportPlatformIOS_property_application/bundle_identifier>`                                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/code_sign_identity_debug<class_EditorExportPlatformIOS_property_application/code_sign_identity_debug>`                         |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/code_sign_identity_release<class_EditorExportPlatformIOS_property_application/code_sign_identity_release>`                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`               | :ref:`application/export_method_debug<class_EditorExportPlatformIOS_property_application/export_method_debug>`                                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`               | :ref:`application/export_method_release<class_EditorExportPlatformIOS_property_application/export_method_release>`                               |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`               | :ref:`application/icon_interpolation<class_EditorExportPlatformIOS_property_application/icon_interpolation>`                                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`               | :ref:`application/launch_screens_interpolation<class_EditorExportPlatformIOS_property_application/launch_screens_interpolation>`                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/provisioning_profile_uuid_debug<class_EditorExportPlatformIOS_property_application/provisioning_profile_uuid_debug>`           |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/provisioning_profile_uuid_release<class_EditorExportPlatformIOS_property_application/provisioning_profile_uuid_release>`       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/short_version<class_EditorExportPlatformIOS_property_application/short_version>`                                               |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/signature<class_EditorExportPlatformIOS_property_application/signature>`                                                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`               | :ref:`application/targeted_device_family<class_EditorExportPlatformIOS_property_application/targeted_device_family>`                             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`application/version<class_EditorExportPlatformIOS_property_application/version>`                                                           |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`architectures/arm64<class_EditorExportPlatformIOS_property_architectures/arm64>`                                                           |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`capabilities/access_wifi<class_EditorExportPlatformIOS_property_capabilities/access_wifi>`                                                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`capabilities/push_notifications<class_EditorExportPlatformIOS_property_capabilities/push_notifications>`                                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`custom_template/debug<class_EditorExportPlatformIOS_property_custom_template/debug>`                                                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`custom_template/release<class_EditorExportPlatformIOS_property_custom_template/release>`                                                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/app_store_1024x1024<class_EditorExportPlatformIOS_property_icons/app_store_1024x1024>`                                               |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/ipad_76x76<class_EditorExportPlatformIOS_property_icons/ipad_76x76>`                                                                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/ipad_152x152<class_EditorExportPlatformIOS_property_icons/ipad_152x152>`                                                             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/ipad_167x167<class_EditorExportPlatformIOS_property_icons/ipad_167x167>`                                                             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/iphone_120x120<class_EditorExportPlatformIOS_property_icons/iphone_120x120>`                                                         |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/iphone_180x180<class_EditorExportPlatformIOS_property_icons/iphone_180x180>`                                                         |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/notification_40x40<class_EditorExportPlatformIOS_property_icons/notification_40x40>`                                                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/notification_60x60<class_EditorExportPlatformIOS_property_icons/notification_60x60>`                                                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/settings_58x58<class_EditorExportPlatformIOS_property_icons/settings_58x58>`                                                         |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/settings_87x87<class_EditorExportPlatformIOS_property_icons/settings_87x87>`                                                         |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/spotlight_40x40<class_EditorExportPlatformIOS_property_icons/spotlight_40x40>`                                                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`icons/spotlight_80x80<class_EditorExportPlatformIOS_property_icons/spotlight_80x80>`                                                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`landscape_launch_screens/ipad_1024x768<class_EditorExportPlatformIOS_property_landscape_launch_screens/ipad_1024x768>`                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`landscape_launch_screens/ipad_2048x1536<class_EditorExportPlatformIOS_property_landscape_launch_screens/ipad_2048x1536>`                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`landscape_launch_screens/iphone_2208x1242<class_EditorExportPlatformIOS_property_landscape_launch_screens/iphone_2208x1242>`               |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`landscape_launch_screens/iphone_2436x1125<class_EditorExportPlatformIOS_property_landscape_launch_screens/iphone_2436x1125>`               |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/ipad_768x1024<class_EditorExportPlatformIOS_property_portrait_launch_screens/ipad_768x1024>`                       |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/ipad_1536x2048<class_EditorExportPlatformIOS_property_portrait_launch_screens/ipad_1536x2048>`                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/iphone_640x960<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_640x960>`                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/iphone_640x1136<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_640x1136>`                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/iphone_750x1334<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_750x1334>`                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/iphone_1125x2436<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_1125x2436>`                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`portrait_launch_screens/iphone_1242x2208<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_1242x2208>`                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`privacy/camera_usage_description<class_EditorExportPlatformIOS_property_privacy/camera_usage_description>`                                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`Dictionary<class_Dictionary>` | :ref:`privacy/camera_usage_description_localized<class_EditorExportPlatformIOS_property_privacy/camera_usage_description_localized>`             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`privacy/microphone_usage_description<class_EditorExportPlatformIOS_property_privacy/microphone_usage_description>`                         |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`Dictionary<class_Dictionary>` | :ref:`privacy/microphone_usage_description_localized<class_EditorExportPlatformIOS_property_privacy/microphone_usage_description_localized>`     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`privacy/photolibrary_usage_description<class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description>`                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`Dictionary<class_Dictionary>` | :ref:`privacy/photolibrary_usage_description_localized<class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description_localized>` |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`Color<class_Color>`           | :ref:`storyboard/custom_bg_color<class_EditorExportPlatformIOS_property_storyboard/custom_bg_color>`                                             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`storyboard/custom_image@2x<class_EditorExportPlatformIOS_property_storyboard/custom_image@2x>`                                             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`String<class_String>`         | :ref:`storyboard/custom_image@3x<class_EditorExportPlatformIOS_property_storyboard/custom_image@3x>`                                             |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`               | :ref:`storyboard/image_scale_mode<class_EditorExportPlatformIOS_property_storyboard/image_scale_mode>`                                           |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`storyboard/use_custom_bg_color<class_EditorExportPlatformIOS_property_storyboard/use_custom_bg_color>`                                     |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`storyboard/use_launch_screen_storyboard<class_EditorExportPlatformIOS_property_storyboard/use_launch_screen_storyboard>`                   |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`user_data/accessible_from_files_app<class_EditorExportPlatformIOS_property_user_data/accessible_from_files_app>`                           |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`bool<class_bool>`             | :ref:`user_data/accessible_from_itunes_sharing<class_EditorExportPlatformIOS_property_user_data/accessible_from_itunes_sharing>`                 |
-   +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/app_store_team_id<class_EditorExportPlatformIOS_property_application/app_store_team_id>`                                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/bundle_identifier<class_EditorExportPlatformIOS_property_application/bundle_identifier>`                                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/code_sign_identity_debug<class_EditorExportPlatformIOS_property_application/code_sign_identity_debug>`                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/code_sign_identity_release<class_EditorExportPlatformIOS_property_application/code_sign_identity_release>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`application/export_method_debug<class_EditorExportPlatformIOS_property_application/export_method_debug>`                                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`application/export_method_release<class_EditorExportPlatformIOS_property_application/export_method_release>`                                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`application/icon_interpolation<class_EditorExportPlatformIOS_property_application/icon_interpolation>`                                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`application/launch_screens_interpolation<class_EditorExportPlatformIOS_property_application/launch_screens_interpolation>`                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/provisioning_profile_uuid_debug<class_EditorExportPlatformIOS_property_application/provisioning_profile_uuid_debug>`                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/provisioning_profile_uuid_release<class_EditorExportPlatformIOS_property_application/provisioning_profile_uuid_release>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/short_version<class_EditorExportPlatformIOS_property_application/short_version>`                                                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/signature<class_EditorExportPlatformIOS_property_application/signature>`                                                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`application/targeted_device_family<class_EditorExportPlatformIOS_property_application/targeted_device_family>`                                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`application/version<class_EditorExportPlatformIOS_property_application/version>`                                                                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`architectures/arm64<class_EditorExportPlatformIOS_property_architectures/arm64>`                                                                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`capabilities/access_wifi<class_EditorExportPlatformIOS_property_capabilities/access_wifi>`                                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`capabilities/push_notifications<class_EditorExportPlatformIOS_property_capabilities/push_notifications>`                                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`custom_template/debug<class_EditorExportPlatformIOS_property_custom_template/debug>`                                                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`custom_template/release<class_EditorExportPlatformIOS_property_custom_template/release>`                                                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/app_store_1024x1024<class_EditorExportPlatformIOS_property_icons/app_store_1024x1024>`                                                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/ipad_76x76<class_EditorExportPlatformIOS_property_icons/ipad_76x76>`                                                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/ipad_152x152<class_EditorExportPlatformIOS_property_icons/ipad_152x152>`                                                                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/ipad_167x167<class_EditorExportPlatformIOS_property_icons/ipad_167x167>`                                                                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/iphone_120x120<class_EditorExportPlatformIOS_property_icons/iphone_120x120>`                                                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/iphone_180x180<class_EditorExportPlatformIOS_property_icons/iphone_180x180>`                                                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/notification_40x40<class_EditorExportPlatformIOS_property_icons/notification_40x40>`                                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/notification_60x60<class_EditorExportPlatformIOS_property_icons/notification_60x60>`                                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/settings_58x58<class_EditorExportPlatformIOS_property_icons/settings_58x58>`                                                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/settings_87x87<class_EditorExportPlatformIOS_property_icons/settings_87x87>`                                                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/spotlight_40x40<class_EditorExportPlatformIOS_property_icons/spotlight_40x40>`                                                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`icons/spotlight_80x80<class_EditorExportPlatformIOS_property_icons/spotlight_80x80>`                                                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`landscape_launch_screens/ipad_1024x768<class_EditorExportPlatformIOS_property_landscape_launch_screens/ipad_1024x768>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`landscape_launch_screens/ipad_2048x1536<class_EditorExportPlatformIOS_property_landscape_launch_screens/ipad_2048x1536>`                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`landscape_launch_screens/iphone_2208x1242<class_EditorExportPlatformIOS_property_landscape_launch_screens/iphone_2208x1242>`                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`landscape_launch_screens/iphone_2436x1125<class_EditorExportPlatformIOS_property_landscape_launch_screens/iphone_2436x1125>`                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/ipad_768x1024<class_EditorExportPlatformIOS_property_portrait_launch_screens/ipad_768x1024>`                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/ipad_1536x2048<class_EditorExportPlatformIOS_property_portrait_launch_screens/ipad_1536x2048>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/iphone_640x960<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_640x960>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/iphone_640x1136<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_640x1136>`                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/iphone_750x1334<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_750x1334>`                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/iphone_1125x2436<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_1125x2436>`                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`portrait_launch_screens/iphone_1242x2208<class_EditorExportPlatformIOS_property_portrait_launch_screens/iphone_1242x2208>`                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/active_keyboard_access_reasons<class_EditorExportPlatformIOS_property_privacy/active_keyboard_access_reasons>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`privacy/camera_usage_description<class_EditorExportPlatformIOS_property_privacy/camera_usage_description>`                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Dictionary<class_Dictionary>`               | :ref:`privacy/camera_usage_description_localized<class_EditorExportPlatformIOS_property_privacy/camera_usage_description_localized>`                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/advertising_data/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/advertising_data/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/advertising_data/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/advertising_data/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/audio_data/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/collected>`                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/audio_data/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/collection_purposes>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/audio_data/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/linked_to_user>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/audio_data/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/used_for_tracking>`                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/browsing_history/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/browsing_history/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/browsing_history/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/browsing_history/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/coarse_location/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/collected>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/coarse_location/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/collection_purposes>`                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/coarse_location/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/linked_to_user>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/coarse_location/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/used_for_tracking>`                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/contacts/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/collected>`                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/contacts/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/collection_purposes>`                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/contacts/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/linked_to_user>`                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/contacts/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/used_for_tracking>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/crash_data/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/collected>`                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/crash_data/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/collection_purposes>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/crash_data/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/linked_to_user>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/crash_data/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/used_for_tracking>`                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/credit_info/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/collected>`                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/credit_info/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/collection_purposes>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/credit_info/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/linked_to_user>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/credit_info/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/used_for_tracking>`                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/customer_support/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/customer_support/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/customer_support/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/customer_support/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/device_id/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/collected>`                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/device_id/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/collection_purposes>`                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/device_id/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/linked_to_user>`                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/device_id/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/used_for_tracking>`                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/email_address/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/collected>`                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/email_address/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/collection_purposes>`                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/email_address/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/linked_to_user>`                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/email_address/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/used_for_tracking>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/emails_or_text_messages/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/collected>`                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/emails_or_text_messages/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/collection_purposes>` |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/emails_or_text_messages/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/linked_to_user>`           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/emails_or_text_messages/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/used_for_tracking>`     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/environment_scanning/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/collected>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/environment_scanning/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/collection_purposes>`       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/environment_scanning/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/linked_to_user>`                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/environment_scanning/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/used_for_tracking>`           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/fitness/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/collected>`                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/fitness/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/collection_purposes>`                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/fitness/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/linked_to_user>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/fitness/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/used_for_tracking>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/gameplay_content/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/gameplay_content/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/gameplay_content/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/gameplay_content/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/hands/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/hands/collected>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/hands/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/hands/collection_purposes>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/hands/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/hands/linked_to_user>`                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/hands/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/hands/used_for_tracking>`                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/head/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/head/collected>`                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/head/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/head/collection_purposes>`                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/head/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/head/linked_to_user>`                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/head/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/head/used_for_tracking>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/health/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/health/collected>`                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/health/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/health/collection_purposes>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/health/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/health/linked_to_user>`                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/health/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/health/used_for_tracking>`                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/name/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/name/collected>`                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/name/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/name/collection_purposes>`                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/name/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/name/linked_to_user>`                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/name/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/name/used_for_tracking>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_contact_info/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/collected>`                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/other_contact_info/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/collection_purposes>`           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_contact_info/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/linked_to_user>`                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_contact_info/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/used_for_tracking>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_data_types/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/other_data_types/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_data_types/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_data_types/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_diagnostic_data/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/collected>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/other_diagnostic_data/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/collection_purposes>`     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_diagnostic_data/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/linked_to_user>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_diagnostic_data/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/used_for_tracking>`         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_financial_info/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/collected>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/other_financial_info/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/collection_purposes>`       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_financial_info/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/linked_to_user>`                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_financial_info/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/used_for_tracking>`           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_usage_data/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/other_usage_data/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_usage_data/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_usage_data/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_user_content/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/collected>`                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/other_user_content/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/collection_purposes>`           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_user_content/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/linked_to_user>`                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/other_user_content/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/used_for_tracking>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/payment_info/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/collected>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/payment_info/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/collection_purposes>`                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/payment_info/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/linked_to_user>`                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/payment_info/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/used_for_tracking>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/performance_data/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/performance_data/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/performance_data/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/performance_data/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/phone_number/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/collected>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/phone_number/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/collection_purposes>`                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/phone_number/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/linked_to_user>`                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/phone_number/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/used_for_tracking>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/photos_or_videos/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/photos_or_videos/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/photos_or_videos/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/photos_or_videos/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/physical_address/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/physical_address/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/physical_address/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/physical_address/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/precise_location/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/precise_location/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/precise_location/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/precise_location/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/product_interaction/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/collected>`                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/product_interaction/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/collection_purposes>`         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/product_interaction/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/linked_to_user>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/product_interaction/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/used_for_tracking>`             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/purchase_history/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/collected>`                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/purchase_history/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/collection_purposes>`               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/purchase_history/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/linked_to_user>`                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/purchase_history/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/used_for_tracking>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/search_hhistory/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/collected>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/search_hhistory/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/collection_purposes>`                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/search_hhistory/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/linked_to_user>`                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/search_hhistory/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/used_for_tracking>`                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/sensitive_info/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/collected>`                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/sensitive_info/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/collection_purposes>`                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/sensitive_info/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/linked_to_user>`                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/sensitive_info/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/used_for_tracking>`                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/user_id/collected<class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/collected>`                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/collected_data/user_id/collection_purposes<class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/collection_purposes>`                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/user_id/linked_to_user<class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/linked_to_user>`                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/collected_data/user_id/used_for_tracking<class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/used_for_tracking>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/disk_space_access_reasons<class_EditorExportPlatformIOS_property_privacy/disk_space_access_reasons>`                                                                   |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/file_timestamp_access_reasons<class_EditorExportPlatformIOS_property_privacy/file_timestamp_access_reasons>`                                                           |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`privacy/microphone_usage_description<class_EditorExportPlatformIOS_property_privacy/microphone_usage_description>`                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Dictionary<class_Dictionary>`               | :ref:`privacy/microphone_usage_description_localized<class_EditorExportPlatformIOS_property_privacy/microphone_usage_description_localized>`                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`privacy/photolibrary_usage_description<class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description>`                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Dictionary<class_Dictionary>`               | :ref:`privacy/photolibrary_usage_description_localized<class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description_localized>`                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/system_boot_time_access_reasons<class_EditorExportPlatformIOS_property_privacy/system_boot_time_access_reasons>`                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`privacy/tracking_domains<class_EditorExportPlatformIOS_property_privacy/tracking_domains>`                                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`privacy/tracking_enabled<class_EditorExportPlatformIOS_property_privacy/tracking_enabled>`                                                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`privacy/user_defaults_access_reasons<class_EditorExportPlatformIOS_property_privacy/user_defaults_access_reasons>`                                                             |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`Color<class_Color>`                         | :ref:`storyboard/custom_bg_color<class_EditorExportPlatformIOS_property_storyboard/custom_bg_color>`                                                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`storyboard/custom_image@2x<class_EditorExportPlatformIOS_property_storyboard/custom_image@2x>`                                                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`String<class_String>`                       | :ref:`storyboard/custom_image@3x<class_EditorExportPlatformIOS_property_storyboard/custom_image@3x>`                                                                                 |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`int<class_int>`                             | :ref:`storyboard/image_scale_mode<class_EditorExportPlatformIOS_property_storyboard/image_scale_mode>`                                                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`storyboard/use_custom_bg_color<class_EditorExportPlatformIOS_property_storyboard/use_custom_bg_color>`                                                                         |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`storyboard/use_launch_screen_storyboard<class_EditorExportPlatformIOS_property_storyboard/use_launch_screen_storyboard>`                                                       |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`user_data/accessible_from_files_app<class_EditorExportPlatformIOS_property_user_data/accessible_from_files_app>`                                                               |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                           | :ref:`user_data/accessible_from_itunes_sharing<class_EditorExportPlatformIOS_property_user_data/accessible_from_itunes_sharing>`                                                     |
+   +---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 .. rst-class:: classref-section-separator
 
@@ -660,6 +956,18 @@ Application launch screen image file. If left empty, it will fallback to :ref:`P
 
 ----
 
+.. _class_EditorExportPlatformIOS_property_privacy/active_keyboard_access_reasons:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/active_keyboard_access_reasons**
+
+The reasons your app use active keyboard API. See `Describing use of required reason API <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_EditorExportPlatformIOS_property_privacy/camera_usage_description:
 
 .. rst-class:: classref-property
@@ -684,49 +992,1801 @@ A message displayed when requesting access to the device's camera (localized).
 
 ----
 
-.. _class_EditorExportPlatformIOS_property_privacy/microphone_usage_description:
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/collected:
 
 .. rst-class:: classref-property
 
-:ref:`String<class_String>` **privacy/microphone_usage_description**
+:ref:`bool<class_bool>` **privacy/collected_data/advertising_data/collected**
 
-A message displayed when requesting access to the device's microphone (in English).
+Indicates whether your app collects advertising data.
 
 .. rst-class:: classref-item-separator
 
 ----
 
-.. _class_EditorExportPlatformIOS_property_privacy/microphone_usage_description_localized:
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/collection_purposes:
 
 .. rst-class:: classref-property
 
-:ref:`Dictionary<class_Dictionary>` **privacy/microphone_usage_description_localized**
+:ref:`int<class_int>` **privacy/collected_data/advertising_data/collection_purposes**
 
-A message displayed when requesting access to the device's microphone (localized).
+The reasons your app collects advertising data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
 
 .. rst-class:: classref-item-separator
 
 ----
 
-.. _class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description:
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/linked_to_user:
 
 .. rst-class:: classref-property
 
-:ref:`String<class_String>` **privacy/photolibrary_usage_description**
+:ref:`bool<class_bool>` **privacy/collected_data/advertising_data/linked_to_user**
 
-A message displayed when requesting access to the user's photo library (in English).
+Indicates whether your app links advertising data to the user's identity.
 
 .. rst-class:: classref-item-separator
 
 ----
 
-.. _class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description_localized:
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/advertising_data/used_for_tracking:
 
 .. rst-class:: classref-property
 
-:ref:`Dictionary<class_Dictionary>` **privacy/photolibrary_usage_description_localized**
+:ref:`bool<class_bool>` **privacy/collected_data/advertising_data/used_for_tracking**
 
-A message displayed when requesting access to the user's photo library (localized).
+Indicates whether your app uses advertising data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/audio_data/collected**
+
+Indicates whether your app collects audio data data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/audio_data/collection_purposes**
+
+The reasons your app collects audio data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/audio_data/linked_to_user**
+
+Indicates whether your app links audio data data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/audio_data/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/audio_data/used_for_tracking**
+
+Indicates whether your app uses audio data data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/browsing_history/collected**
+
+Indicates whether your app collects browsing history.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/browsing_history/collection_purposes**
+
+The reasons your app collects browsing history. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/browsing_history/linked_to_user**
+
+Indicates whether your app links browsing history to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/browsing_history/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/browsing_history/used_for_tracking**
+
+Indicates whether your app uses browsing history for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/coarse_location/collected**
+
+Indicates whether your app collects coarse location data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/coarse_location/collection_purposes**
+
+The reasons your app collects coarse location data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/coarse_location/linked_to_user**
+
+Indicates whether your app links coarse location data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/coarse_location/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/coarse_location/used_for_tracking**
+
+Indicates whether your app uses coarse location data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/contacts/collected**
+
+Indicates whether your app collects contacts.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/contacts/collection_purposes**
+
+The reasons your app collects contacts. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/contacts/linked_to_user**
+
+Indicates whether your app links contacts to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/contacts/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/contacts/used_for_tracking**
+
+Indicates whether your app uses contacts for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/crash_data/collected**
+
+Indicates whether your app collects crash data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/crash_data/collection_purposes**
+
+The reasons your app collects crash data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/crash_data/linked_to_user**
+
+Indicates whether your app links crash data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/crash_data/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/crash_data/used_for_tracking**
+
+Indicates whether your app uses crash data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/credit_info/collected**
+
+Indicates whether your app collects credit information.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/credit_info/collection_purposes**
+
+The reasons your app collects credit information. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/credit_info/linked_to_user**
+
+Indicates whether your app links credit information to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/credit_info/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/credit_info/used_for_tracking**
+
+Indicates whether your app uses credit information for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/customer_support/collected**
+
+Indicates whether your app collects customer support data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/customer_support/collection_purposes**
+
+The reasons your app collects customer support data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/customer_support/linked_to_user**
+
+Indicates whether your app links customer support data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/customer_support/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/customer_support/used_for_tracking**
+
+Indicates whether your app uses customer support data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/device_id/collected**
+
+Indicates whether your app collects device IDs.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/device_id/collection_purposes**
+
+The reasons your app collects device IDs. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/device_id/linked_to_user**
+
+Indicates whether your app links device IDs to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/device_id/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/device_id/used_for_tracking**
+
+Indicates whether your app uses device IDs for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/email_address/collected**
+
+Indicates whether your app collects email address.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/email_address/collection_purposes**
+
+The reasons your app collects email address. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/email_address/linked_to_user**
+
+Indicates whether your app links email address to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/email_address/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/email_address/used_for_tracking**
+
+Indicates whether your app uses email address for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/emails_or_text_messages/collected**
+
+Indicates whether your app collects emails or text messages.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/emails_or_text_messages/collection_purposes**
+
+The reasons your app collects emails or text messages. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/emails_or_text_messages/linked_to_user**
+
+Indicates whether your app links emails or text messages to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/emails_or_text_messages/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/emails_or_text_messages/used_for_tracking**
+
+Indicates whether your app uses emails or text messages for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/environment_scanning/collected**
+
+Indicates whether your app collects environment scanning data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/environment_scanning/collection_purposes**
+
+The reasons your app collects environment scanning data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/environment_scanning/linked_to_user**
+
+Indicates whether your app links environment scanning data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/environment_scanning/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/environment_scanning/used_for_tracking**
+
+Indicates whether your app uses environment scanning data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/fitness/collected**
+
+Indicates whether your app collects fitness and exercise data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/fitness/collection_purposes**
+
+The reasons your app collects fitness and exercise data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/fitness/linked_to_user**
+
+Indicates whether your app links fitness and exercise data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/fitness/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/fitness/used_for_tracking**
+
+Indicates whether your app uses fitness and exercise data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/gameplay_content/collected**
+
+Indicates whether your app collects gameplay content.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/gameplay_content/collection_purposes**
+
+The reasons your app collects gameplay content. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/gameplay_content/linked_to_user**
+
+Indicates whether your app links gameplay content to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/gameplay_content/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/gameplay_content/used_for_tracking**
+
+Indicates whether your app uses gameplay content for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/hands/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/hands/collected**
+
+Indicates whether your app collects user's hand structure and hand movements.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/hands/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/hands/collection_purposes**
+
+The reasons your app collects user's hand structure and hand movements. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/hands/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/hands/linked_to_user**
+
+Indicates whether your app links user's hand structure and hand movements to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/hands/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/hands/used_for_tracking**
+
+Indicates whether your app uses user's hand structure and hand movements for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/head/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/head/collected**
+
+Indicates whether your app collects user's head movement.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/head/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/head/collection_purposes**
+
+The reasons your app collects user's head movement. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/head/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/head/linked_to_user**
+
+Indicates whether your app links user's head movement to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/head/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/head/used_for_tracking**
+
+Indicates whether your app uses user's head movement for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/health/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/health/collected**
+
+Indicates whether your app collects health and medical data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/health/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/health/collection_purposes**
+
+The reasons your app collects health and medical data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/health/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/health/linked_to_user**
+
+Indicates whether your app links health and medical data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/health/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/health/used_for_tracking**
+
+Indicates whether your app uses health and medical data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/name/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/name/collected**
+
+Indicates whether your app collects user's name.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/name/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/name/collection_purposes**
+
+The reasons your app collects user's name. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/name/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/name/linked_to_user**
+
+Indicates whether your app links user's name to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/name/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/name/used_for_tracking**
+
+Indicates whether your app uses user's name for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_contact_info/collected**
+
+Indicates whether your app collects any other contact information.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/other_contact_info/collection_purposes**
+
+The reasons your app collects any other contact information. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_contact_info/linked_to_user**
+
+Indicates whether your app links any other contact information to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_contact_info/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_contact_info/used_for_tracking**
+
+Indicates whether your app uses any other contact information for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_data_types/collected**
+
+Indicates whether your app collects any other data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/other_data_types/collection_purposes**
+
+The reasons your app collects any other data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_data_types/linked_to_user**
+
+Indicates whether your app links any other data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_data_types/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_data_types/used_for_tracking**
+
+Indicates whether your app uses any other data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_diagnostic_data/collected**
+
+Indicates whether your app collects any other diagnostic data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/other_diagnostic_data/collection_purposes**
+
+The reasons your app collects any other diagnostic data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_diagnostic_data/linked_to_user**
+
+Indicates whether your app links any other diagnostic data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_diagnostic_data/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_diagnostic_data/used_for_tracking**
+
+Indicates whether your app uses any other diagnostic data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_financial_info/collected**
+
+Indicates whether your app collects any other financial information.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/other_financial_info/collection_purposes**
+
+The reasons your app collects any other financial information. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_financial_info/linked_to_user**
+
+Indicates whether your app links any other financial information to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_financial_info/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_financial_info/used_for_tracking**
+
+Indicates whether your app uses any other financial information for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_usage_data/collected**
+
+Indicates whether your app collects any other usage data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/other_usage_data/collection_purposes**
+
+The reasons your app collects any other usage data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_usage_data/linked_to_user**
+
+Indicates whether your app links any other usage data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_usage_data/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_usage_data/used_for_tracking**
+
+Indicates whether your app uses any other usage data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_user_content/collected**
+
+Indicates whether your app collects any other user generated content.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/other_user_content/collection_purposes**
+
+The reasons your app collects any other user generated content. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_user_content/linked_to_user**
+
+Indicates whether your app links any other user generated content to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/other_user_content/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/other_user_content/used_for_tracking**
+
+Indicates whether your app uses any other user generated content for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/payment_info/collected**
+
+Indicates whether your app collects payment information.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/payment_info/collection_purposes**
+
+The reasons your app collects payment information. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/payment_info/linked_to_user**
+
+Indicates whether your app links payment information to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/payment_info/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/payment_info/used_for_tracking**
+
+Indicates whether your app uses payment information for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/performance_data/collected**
+
+Indicates whether your app collects performance data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/performance_data/collection_purposes**
+
+The reasons your app collects performance data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/performance_data/linked_to_user**
+
+Indicates whether your app links performance data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/performance_data/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/performance_data/used_for_tracking**
+
+Indicates whether your app uses performance data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/phone_number/collected**
+
+Indicates whether your app collects phone number.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/phone_number/collection_purposes**
+
+The reasons your app collects phone number. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/phone_number/linked_to_user**
+
+Indicates whether your app links phone number to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/phone_number/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/phone_number/used_for_tracking**
+
+Indicates whether your app uses phone number for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/photos_or_videos/collected**
+
+Indicates whether your app collects photos or videos.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/photos_or_videos/collection_purposes**
+
+The reasons your app collects photos or videos. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/photos_or_videos/linked_to_user**
+
+Indicates whether your app links photos or videos to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/photos_or_videos/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/photos_or_videos/used_for_tracking**
+
+Indicates whether your app uses photos or videos for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/physical_address/collected**
+
+Indicates whether your app collects physical address.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/physical_address/collection_purposes**
+
+The reasons your app collects physical address. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/physical_address/linked_to_user**
+
+Indicates whether your app links physical address to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/physical_address/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/physical_address/used_for_tracking**
+
+Indicates whether your app uses physical address for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/precise_location/collected**
+
+Indicates whether your app collects precise location data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/precise_location/collection_purposes**
+
+The reasons your app collects precise location data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/precise_location/linked_to_user**
+
+Indicates whether your app links precise location data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/precise_location/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/precise_location/used_for_tracking**
+
+Indicates whether your app uses precise location data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/product_interaction/collected**
+
+Indicates whether your app collects product interaction data.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/product_interaction/collection_purposes**
+
+The reasons your app collects product interaction data. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/product_interaction/linked_to_user**
+
+Indicates whether your app links product interaction data to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/product_interaction/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/product_interaction/used_for_tracking**
+
+Indicates whether your app uses product interaction data for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/purchase_history/collected**
+
+Indicates whether your app collects purchase history.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/purchase_history/collection_purposes**
+
+The reasons your app collects purchase history. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/purchase_history/linked_to_user**
+
+Indicates whether your app links purchase history to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/purchase_history/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/purchase_history/used_for_tracking**
+
+Indicates whether your app uses purchase history for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/search_hhistory/collected**
+
+Indicates whether your app collects search history.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/search_hhistory/collection_purposes**
+
+The reasons your app collects search history. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/search_hhistory/linked_to_user**
+
+Indicates whether your app links search history to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/search_hhistory/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/search_hhistory/used_for_tracking**
+
+Indicates whether your app uses search history for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/sensitive_info/collected**
+
+Indicates whether your app collects sensitive user information.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/sensitive_info/collection_purposes**
+
+The reasons your app collects sensitive user information. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/sensitive_info/linked_to_user**
+
+Indicates whether your app links sensitive user information to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/sensitive_info/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/sensitive_info/used_for_tracking**
+
+Indicates whether your app uses sensitive user information for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/collected:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/user_id/collected**
+
+Indicates whether your app collects user IDs.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/collection_purposes:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/collected_data/user_id/collection_purposes**
+
+The reasons your app collects user IDs. See `Describing data use in privacy manifests <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/linked_to_user:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/user_id/linked_to_user**
+
+Indicates whether your app links user IDs to the user's identity.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/collected_data/user_id/used_for_tracking:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/collected_data/user_id/used_for_tracking**
+
+Indicates whether your app uses user IDs for tracking.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/disk_space_access_reasons:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/disk_space_access_reasons**
+
+The reasons your app use free disk space API. See `Describing use of required reason API <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/file_timestamp_access_reasons:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/file_timestamp_access_reasons**
+
+The reasons your app use file timestamp/metadata API. See `Describing use of required reason API <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/microphone_usage_description:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **privacy/microphone_usage_description**
+
+A message displayed when requesting access to the device's microphone (in English).
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/microphone_usage_description_localized:
+
+.. rst-class:: classref-property
+
+:ref:`Dictionary<class_Dictionary>` **privacy/microphone_usage_description_localized**
+
+A message displayed when requesting access to the device's microphone (localized).
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description:
+
+.. rst-class:: classref-property
+
+:ref:`String<class_String>` **privacy/photolibrary_usage_description**
+
+A message displayed when requesting access to the user's photo library (in English).
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/photolibrary_usage_description_localized:
+
+.. rst-class:: classref-property
+
+:ref:`Dictionary<class_Dictionary>` **privacy/photolibrary_usage_description_localized**
+
+A message displayed when requesting access to the user's photo library (localized).
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/system_boot_time_access_reasons:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/system_boot_time_access_reasons**
+
+The reasons your app use system boot time / absolute time API. See `Describing use of required reason API <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/tracking_domains:
+
+.. rst-class:: classref-property
+
+:ref:`PackedStringArray<class_PackedStringArray>` **privacy/tracking_domains**
+
+The list of internet domains your app connects to that engage in tracking. See `Privacy manifest files <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/tracking_enabled:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **privacy/tracking_enabled**
+
+Indicates whether your app uses data for tracking. See `Privacy manifest files <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files>`__.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_EditorExportPlatformIOS_property_privacy/user_defaults_access_reasons:
+
+.. rst-class:: classref-property
+
+:ref:`int<class_int>` **privacy/user_defaults_access_reasons**
+
+The reasons your app use user defaults API. See `Describing use of required reason API <https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api>`__.
 
 .. rst-class:: classref-item-separator
 

+ 1 - 1
classes/class_editorexportplatformmacos.rst

@@ -424,7 +424,7 @@ Array of the additional command line arguments passed to the code signing tool.
 
 :ref:`bool<class_bool>` **codesign/entitlements/address_book**
 
-Enable to allow access to contacts in the user's address book, if it's enabled you should also provide usage message in the ``privacy/address_book_usage_description`` option.	See `com.apple.security.personal-information.addressbook <https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_personal-information_addressbook>`__.
+Enable to allow access to contacts in the user's address book, if it's enabled you should also provide usage message in the ``privacy/address_book_usage_description`` option. See `com.apple.security.personal-information.addressbook <https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_personal-information_addressbook>`__.
 
 .. rst-class:: classref-item-separator
 

+ 54 - 43
classes/class_editorexportplatformweb.rst

@@ -16,11 +16,22 @@ Exporter for the Web.
 
 .. rst-class:: classref-introduction-group
 
+Description
+-----------
+
+The Web exporter customizes how a web build is handled. In the editor's "Export" window, it is created when adding a new "Web" preset.
+
+\ **Note:** Godot on Web is rendered inside a ``<canvas>`` tag. Normally, the canvas cannot be positioned or resized manually, but otherwise acts as the main :ref:`Window<class_Window>` of the application.
+
+.. rst-class:: classref-introduction-group
+
 Tutorials
 ---------
 
 - :doc:`Exporting for the Web <../tutorials/export/exporting_for_web>`
 
+- :doc:`Web documentation index <../tutorials/platform/web/index>`
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -84,7 +95,7 @@ Property Descriptions
 
 :ref:`String<class_String>` **custom_template/debug**
 
-Path to the custom export template. If left empty, default template is used.
+File path to the custom export template used for debug builds. If left empty, the default template is used.
 
 .. rst-class:: classref-item-separator
 
@@ -96,7 +107,7 @@ Path to the custom export template. If left empty, default template is used.
 
 :ref:`String<class_String>` **custom_template/release**
 
-Path to the custom export template. If left empty, default template is used.
+File path to the custom export template used for release builds. If left empty, the default template is used.
 
 .. rst-class:: classref-item-separator
 
@@ -108,7 +119,13 @@ Path to the custom export template. If left empty, default template is used.
 
 :ref:`int<class_int>` **html/canvas_resize_policy**
 
-The canvas resize policy determines how the canvas should be resized by Godot.
+Determines how the canvas should be resized by Godot.
+
+- **None:** The canvas is not automatically resized.
+
+- **Project:** The size of the canvas is dependent on the :ref:`ProjectSettings<class_ProjectSettings>`.
+
+- **Adaptive:** The canvas is automatically resized to fit as much of the web page as possible.
 
 .. rst-class:: classref-item-separator
 
@@ -120,9 +137,9 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`String<class_String>` **html/custom_html_shell**
 
-.. container:: contribute
+The custom HTML page that wraps the exported web build. If left empty, the default HTML shell is used.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+For more information, see the :doc:`Customizing HTML5 Shell <../tutorials/platform/web/customizing_html5_shell>` tutorial.
 
 .. rst-class:: classref-item-separator
 
@@ -134,9 +151,9 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **html/experimental_virtual_keyboard**
 
-.. container:: contribute
+If ``true``, embeds support for a virtual keyboard into the web page, which is shown when necessary on touchscreen devices.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Warning:** This feature is experimental and may be changed in a future release.
 
 .. rst-class:: classref-item-separator
 
@@ -148,9 +165,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **html/export_icon**
 
-.. 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 project icon will be used as the favicon for this application's web page.
 
 .. rst-class:: classref-item-separator
 
@@ -162,9 +177,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **html/focus_canvas_on_start**
 
-.. 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 canvas will be focused as soon as the application is loaded, if the browser window is already in focus.
 
 .. rst-class:: classref-item-separator
 
@@ -176,9 +189,9 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`String<class_String>` **html/head_include**
 
-.. container:: contribute
+Additional HTML tags to include inside the ``<head>``, such as ``<meta>`` tags.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** You do not need to add a ``<title>`` tag, as it is automatically included based on the project's name.
 
 .. rst-class:: classref-item-separator
 
@@ -190,9 +203,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`Color<class_Color>` **progressive_web_app/background_color**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+The background color used behind the web application.
 
 .. rst-class:: classref-item-separator
 
@@ -204,9 +215,15 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`int<class_int>` **progressive_web_app/display**
 
-.. container:: contribute
+The `display mode <https://developer.mozilla.org/en-US/docs/Web/Manifest/display/>`__ to use for this progressive web application. Different browsers and platforms may not behave the same.
+
+- **Fullscreen:** Displays the app in fullscreen and hides all of the browser's UI elements.
+
+- **Standalone:** Displays the app in a separate window and hides all of the browser's UI elements.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+- **Minimal UI:** Displays the app in a separate window and only shows the browser's UI elements for navigation.
+
+- **Browser:** Displays the app as a normal web page.
 
 .. rst-class:: classref-item-separator
 
@@ -218,9 +235,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **progressive_web_app/enabled**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If ``true``, turns this web build into a `progressive web application <https://en.wikipedia.org/wiki/Progressive_web_app>`__ (PWA).
 
 .. rst-class:: classref-item-separator
 
@@ -232,9 +247,9 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`String<class_String>` **progressive_web_app/icon_144x144**
 
-.. container:: contribute
+File path to the smallest icon for this web application. If not defined, defaults to the project icon.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** If the icon is not 144x144, it will be automatically resized for the final build.
 
 .. rst-class:: classref-item-separator
 
@@ -246,9 +261,9 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`String<class_String>` **progressive_web_app/icon_180x180**
 
-.. container:: contribute
+File path to the small icon for this web application. If not defined, defaults to the project icon.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** If the icon is not 180x180, it will be automatically resized for the final build.
 
 .. rst-class:: classref-item-separator
 
@@ -260,9 +275,9 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`String<class_String>` **progressive_web_app/icon_512x512**
 
-.. container:: contribute
+File path to the smallest icon for this web application. If not defined, defaults to the project icon.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** If the icon is not 512x512, it will be automatically resized for the final build.
 
 .. rst-class:: classref-item-separator
 
@@ -274,9 +289,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`String<class_String>` **progressive_web_app/offline_page**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+The page to display, should the server hosting the page not be available. This page is saved in the client's machine.
 
 .. rst-class:: classref-item-separator
 
@@ -288,9 +301,13 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`int<class_int>` **progressive_web_app/orientation**
 
-.. container:: contribute
+The orientation to use when the web application is run through a mobile device.
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+- **Any:** No orientation is forced.
+
+- **Landscape:** Forces a horizontal layout (wider than it is taller).
+
+- **Portrait:** Forces a vertical layout (taller than it is wider).
 
 .. rst-class:: classref-item-separator
 
@@ -302,9 +319,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **variant/extensions_support**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If ``true`` enables :ref:`GDExtension<class_GDExtension>` support for this web build.
 
 .. rst-class:: classref-item-separator
 
@@ -316,9 +331,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **vram_texture_compression/for_desktop**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If ``true``, allows textures to be optimized for desktop through the S3TC algorithm.
 
 .. rst-class:: classref-item-separator
 
@@ -330,9 +343,7 @@ The canvas resize policy determines how the canvas should be resized by Godot.
 
 :ref:`bool<class_bool>` **vram_texture_compression/for_mobile**
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If ``true`` allows textures to be optimized for mobile through the ETC2 algorithm.
 
 .. |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_editorexportplugin.rst

@@ -144,7 +144,7 @@ Implementing this method is required if :ref:`_begin_customize_resources<class_E
 
 Customize a scene. If changes are made to it, return the same or a new scene. Otherwise, return ``null``. If a new scene is returned, it is up to you to dispose of the old one.
 
-Implementing this method is required if :ref:`_begin_customize_resources<class_EditorExportPlugin_method__begin_customize_resources>` returns ``true``.
+Implementing this method is required if :ref:`_begin_customize_scenes<class_EditorExportPlugin_method__begin_customize_scenes>` returns ``true``.
 
 .. rst-class:: classref-item-separator
 

+ 4 - 2
classes/class_editorplugin.rst

@@ -21,6 +21,8 @@ Description
 
 Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. See also :ref:`EditorScript<class_EditorScript>` to add functions to the editor.
 
+\ **Note:** Some names in this class contain "left" or "right" (e.g. :ref:`DOCK_SLOT_LEFT_UL<class_EditorPlugin_constant_DOCK_SLOT_LEFT_UL>`). These APIs assume left-to-right layout, and would be backwards when using right-to-left layout. These names are kept for compatibility reasons.
+
 .. rst-class:: classref-introduction-group
 
 Tutorials
@@ -394,7 +396,7 @@ Dock slot, left side, bottom-right (in default layout includes FileSystem dock).
 
 :ref:`DockSlot<enum_EditorPlugin_DockSlot>` **DOCK_SLOT_RIGHT_UL** = ``4``
 
-Dock slot, right side, upper-left (empty in default layout).
+Dock slot, right side, upper-left (in default layout includes Inspector, Node, and History docks).
 
 .. _class_EditorPlugin_constant_DOCK_SLOT_RIGHT_BL:
 
@@ -410,7 +412,7 @@ Dock slot, right side, bottom-left (empty in default layout).
 
 :ref:`DockSlot<enum_EditorPlugin_DockSlot>` **DOCK_SLOT_RIGHT_UR** = ``6``
 
-Dock slot, right side, upper-right (in default layout includes Inspector, Node and History docks).
+Dock slot, right side, upper-right (empty in default layout).
 
 .. _class_EditorPlugin_constant_DOCK_SLOT_RIGHT_BR:
 

+ 8 - 4
classes/class_editorsettings.rst

@@ -91,11 +91,11 @@ Properties
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`Color<class_Color>`     | :ref:`editors/2d/bone_outline_color<class_EditorSettings_property_editors/2d/bone_outline_color>`                                                                                   |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`         | :ref:`editors/2d/bone_outline_size<class_EditorSettings_property_editors/2d/bone_outline_size>`                                                                                     |
+   | :ref:`float<class_float>`     | :ref:`editors/2d/bone_outline_size<class_EditorSettings_property_editors/2d/bone_outline_size>`                                                                                     |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`Color<class_Color>`     | :ref:`editors/2d/bone_selected_color<class_EditorSettings_property_editors/2d/bone_selected_color>`                                                                                 |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-   | :ref:`int<class_int>`         | :ref:`editors/2d/bone_width<class_EditorSettings_property_editors/2d/bone_width>`                                                                                                   |
+   | :ref:`float<class_float>`     | :ref:`editors/2d/bone_width<class_EditorSettings_property_editors/2d/bone_width>`                                                                                                   |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | :ref:`Color<class_Color>`     | :ref:`editors/2d/grid_color<class_EditorSettings_property_editors/2d/grid_color>`                                                                                                   |
    +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -839,10 +839,12 @@ The outline color to use for non-selected bones in the 2D skeleton editor. See a
 
 .. rst-class:: classref-property
 
-:ref:`int<class_int>` **editors/2d/bone_outline_size**
+:ref:`float<class_float>` **editors/2d/bone_outline_size**
 
 The outline size in the 2D skeleton editor (in pixels). See also :ref:`editors/2d/bone_width<class_EditorSettings_property_editors/2d/bone_width>`.
 
+\ **Note:** Changes to this value only apply after modifying a :ref:`Bone2D<class_Bone2D>` node in any way, or closing and reopening the scene.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -863,10 +865,12 @@ The color to use for selected bones in the 2D skeleton editor. See also :ref:`ed
 
 .. rst-class:: classref-property
 
-:ref:`int<class_int>` **editors/2d/bone_width**
+:ref:`float<class_float>` **editors/2d/bone_width**
 
 The bone width in the 2D skeleton editor (in pixels). See also :ref:`editors/2d/bone_outline_size<class_EditorSettings_property_editors/2d/bone_outline_size>`.
 
+\ **Note:** Changes to this value only apply after modifying a :ref:`Bone2D<class_Bone2D>` node in any way, or closing and reopening the scene.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 3 - 1
classes/class_editorspinslider.rst

@@ -21,6 +21,8 @@ Description
 
 This :ref:`Control<class_Control>` node is used in the editor's Inspector dock to allow editing of numeric values. Can be used with :ref:`EditorInspectorPlugin<class_EditorInspectorPlugin>` to recreate the same behavior.
 
+If :ref:`step<class_EditorSpinSlider_property_step>` is ``1``, the **EditorSpinSlider** will display up/down arrows, similar to :ref:`SpinBox<class_SpinBox>`. If the :ref:`step<class_EditorSpinSlider_property_step>` is not ``1``, a slider will be displayed instead.
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -137,7 +139,7 @@ If ``true``, the slider will not draw background.
 - void **set_hide_slider** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_hiding_slider** **(** **)**
 
-If ``true``, the slider is hidden.
+If ``true``, the slider and up/down arrows are hidden.
 
 .. rst-class:: classref-item-separator
 

+ 8 - 1
classes/class_editorvcsinterface.rst

@@ -21,6 +21,13 @@ Description
 
 Defines the API that the editor uses to extract information from the underlying VCS. The implementation of this API is included in VCS plugins, which are GDExtension plugins that inherit **EditorVCSInterface** and are attached (on demand) to the singleton instance of **EditorVCSInterface**. Instead of performing the task themselves, all the virtual functions listed below are calling the internally overridden functions in the VCS plugins to provide a plug-n-play experience. A custom VCS plugin is supposed to inherit from **EditorVCSInterface** and override each of these virtual functions.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Version control systems <../tutorials/best_practices/version_control_systems>`
+
 .. rst-class:: classref-reftable-group
 
 Methods
@@ -565,7 +572,7 @@ Helper function to create a :ref:`Dictionary<class_Dictionary>` used by editor t
 
 void **popup_error** **(** :ref:`String<class_String>` msg **)**
 
-Pops up an error message in the edior which is shown as coming from the underlying VCS. Use this to show VCS specific error messages.
+Pops up an error message in the editor which is shown as coming from the underlying VCS. Use this to show VCS specific error messages.
 
 .. |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_environment.rst

@@ -36,7 +36,7 @@ Tutorials
 
 - :doc:`Environment and post-processing <../tutorials/3d/environment_and_post_processing>`
 
-- :doc:`Light transport in game engines <../tutorials/3d/high_dynamic_range>`
+- :doc:`High dynamic range lighting <../tutorials/3d/high_dynamic_range>`
 
 - `3D Material Testers Demo <https://godotengine.org/asset-library/asset/123>`__
 

+ 4 - 0
classes/class_fileaccess.rst

@@ -220,6 +220,8 @@ Opens the file for read operations. The cursor is positioned at the beginning of
 
 Opens the file for write operations. The file is created if it does not exist, and truncated if it does.
 
+\ **Note:** When creating a file it must be in an already existing directory. To recursively create directories for a file path, see :ref:`DirAccess.make_dir_recursive<class_DirAccess_method_make_dir_recursive>`).
+
 .. _class_FileAccess_constant_READ_WRITE:
 
 .. rst-class:: classref-enumeration-constant
@@ -236,6 +238,8 @@ Opens the file for read and write operations. Does not truncate the file. The cu
 
 Opens the file for read and write operations. The file is created if it does not exist, and truncated if it does. The cursor is positioned at the beginning of the file.
 
+\ **Note:** When creating a file it must be in an already existing directory. To recursively create directories for a file path, see :ref:`DirAccess.make_dir_recursive<class_DirAccess_method_make_dir_recursive>`).
+
 .. rst-class:: classref-item-separator
 
 ----

+ 1 - 1
classes/class_float.rst

@@ -228,7 +228,7 @@ Multiplies each component of the :ref:`Color<class_Color>`, including the alpha,
 
 ::
 
-    print(1.5 * Color(0.5, 0.5, 0.5)) # Color(0.75, 0.75, 0.75)
+    print(1.5 * Color(0.5, 0.5, 0.5)) # Prints "(0.75, 0.75, 0.75, 1.5)"
 
 .. rst-class:: classref-item-separator
 

+ 2 - 2
classes/class_flowcontainer.rst

@@ -182,7 +182,7 @@ Theme Property Descriptions
 
 :ref:`int<class_int>` **h_separation** = ``4``
 
-The horizontal separation of children nodes.
+The horizontal separation of child nodes.
 
 .. rst-class:: classref-item-separator
 
@@ -194,7 +194,7 @@ The horizontal separation of children nodes.
 
 :ref:`int<class_int>` **v_separation** = ``4``
 
-The vertical separation of children nodes.
+The vertical separation of child nodes.
 
 .. |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.)`

+ 7 - 0
classes/class_fogvolume.rst

@@ -25,6 +25,13 @@ Performance of **FogVolume**\ s is directly related to their relative size on th
 
 \ **Note:** **FogVolume**\ s only have a visible effect if :ref:`Environment.volumetric_fog_enabled<class_Environment_property_volumetric_fog_enabled>` is ``true``. If you don't want fog to be globally visible (but only within **FogVolume** nodes), set :ref:`Environment.volumetric_fog_density<class_Environment_property_volumetric_fog_density>` to ``0.0``.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Volumetric fog and fog volumes <../tutorials/3d/volumetric_fog>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 1 - 1
classes/class_font.rst

@@ -226,7 +226,7 @@ Returns the average font ascent (number of pixels above the baseline).
 
 :ref:`Vector2<class_Vector2>` **get_char_size** **(** :ref:`int<class_int>` char, :ref:`int<class_int>` font_size **)** |const|
 
-Returns the size of a character, optionally taking kerning into account if the next character is provided.
+Returns the size of a character. Does not take kerning into account.
 
 \ **Note:** Do not use this function to calculate width of the string character by character, use :ref:`get_string_size<class_Font_method_get_string_size>` or :ref:`TextLine<class_TextLine>` instead. The height returned is the font height (see also :ref:`get_height<class_Font_method_get_height>`) and has no relation to the glyph height.
 

+ 9 - 2
classes/class_geometryinstance3d.rst

@@ -23,6 +23,13 @@ Description
 
 Base node for geometry-based visual instances. Shares some common functionality like visibility and custom materials.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Visibility ranges (HLOD) <../tutorials/3d/visibility_ranges>`
+
 .. rst-class:: classref-reftable-group
 
 Properties
@@ -146,7 +153,7 @@ enum **GIMode**:
 
 :ref:`GIMode<enum_GeometryInstance3D_GIMode>` **GI_MODE_DISABLED** = ``0``
 
-Disabled global illumination mode. Use for dynamic objects that do not contribute to global illumination (such as characters). When using :ref:`VoxelGI<class_VoxelGI>` and SDFGI, the geometry will *receive* indirect lighting and reflections but the geometry will not be considered in GI baking. When using :ref:`LightmapGI<class_LightmapGI>`, the object will receive indirect lighting using lightmap probes instead of using the baked lightmap texture.
+Disabled global illumination mode. Use for dynamic objects that do not contribute to global illumination (such as characters). When using :ref:`VoxelGI<class_VoxelGI>` and SDFGI, the geometry will *receive* indirect lighting and reflections but the geometry will not be considered in GI baking.
 
 .. _class_GeometryInstance3D_constant_GI_MODE_STATIC:
 
@@ -162,7 +169,7 @@ Baked global illumination mode. Use for static objects that contribute to global
 
 :ref:`GIMode<enum_GeometryInstance3D_GIMode>` **GI_MODE_DYNAMIC** = ``2``
 
-Dynamic global illumination mode. Use for dynamic objects that contribute to global illumination. This GI mode is only effective when using :ref:`VoxelGI<class_VoxelGI>`, but it has a higher performance impact than :ref:`GI_MODE_STATIC<class_GeometryInstance3D_constant_GI_MODE_STATIC>`. When using other GI methods, this will act the same as :ref:`GI_MODE_DISABLED<class_GeometryInstance3D_constant_GI_MODE_DISABLED>`.
+Dynamic global illumination mode. Use for dynamic objects that contribute to global illumination. This GI mode is only effective when using :ref:`VoxelGI<class_VoxelGI>`, but it has a higher performance impact than :ref:`GI_MODE_STATIC<class_GeometryInstance3D_constant_GI_MODE_STATIC>`. When using other GI methods, this will act the same as :ref:`GI_MODE_DISABLED<class_GeometryInstance3D_constant_GI_MODE_DISABLED>`. When using :ref:`LightmapGI<class_LightmapGI>`, the object will receive indirect lighting using lightmap probes instead of using the baked lightmap texture.
 
 .. rst-class:: classref-item-separator
 

+ 1 - 1
classes/class_gltfnode.rst

@@ -115,7 +115,7 @@ If this GLTF node is a camera, the index of the :ref:`GLTFCamera<class_GLTFCamer
 - void **set_children** **(** :ref:`PackedInt32Array<class_PackedInt32Array>` value **)**
 - :ref:`PackedInt32Array<class_PackedInt32Array>` **get_children** **(** **)**
 
-The indices of the children nodes in the :ref:`GLTFState<class_GLTFState>`. If this GLTF node has no children, this will be an empty array.
+The indices of the child nodes in the :ref:`GLTFState<class_GLTFState>`. If this GLTF node has no children, this will be an empty array.
 
 .. rst-class:: classref-item-separator
 

+ 2 - 2
classes/class_gpuparticles2d.rst

@@ -135,7 +135,7 @@ Particles are drawn in the order emitted.
 
 :ref:`DrawOrder<enum_GPUParticles2D_DrawOrder>` **DRAW_ORDER_LIFETIME** = ``1``
 
-Particles are drawn in order of remaining lifetime.
+Particles are drawn in order of remaining lifetime. In other words, the particle with the highest lifetime is drawn at the front.
 
 .. _class_GPUParticles2D_constant_DRAW_ORDER_REVERSE_LIFETIME:
 
@@ -143,7 +143,7 @@ Particles are drawn in order of remaining lifetime.
 
 :ref:`DrawOrder<enum_GPUParticles2D_DrawOrder>` **DRAW_ORDER_REVERSE_LIFETIME** = ``2``
 
-
+Particles are drawn in reverse order of remaining lifetime. In other words, the particle with the lowest lifetime is drawn at the front.
 
 .. rst-class:: classref-item-separator
 

+ 6 - 2
classes/class_gpuparticles3d.rst

@@ -28,6 +28,8 @@ Use the ``process_material`` property to add a :ref:`ParticleProcessMaterial<cla
 Tutorials
 ---------
 
+- :doc:`Particle systems (3D) <../tutorials/3d/particles/index>`
+
 - :doc:`Controlling thousands of fish with Particles <../tutorials/performance/vertex_animation/controlling_thousands_of_fish>`
 
 - `Third Person Shooter Demo <https://godotengine.org/asset-library/asset/678>`__
@@ -143,7 +145,7 @@ Particles are drawn in the order emitted.
 
 :ref:`DrawOrder<enum_GPUParticles3D_DrawOrder>` **DRAW_ORDER_LIFETIME** = ``1``
 
-Particles are drawn in order of remaining lifetime.
+Particles are drawn in order of remaining lifetime. In other words, the particle with the highest lifetime is drawn at the front.
 
 .. _class_GPUParticles3D_constant_DRAW_ORDER_REVERSE_LIFETIME:
 
@@ -151,7 +153,7 @@ Particles are drawn in order of remaining lifetime.
 
 :ref:`DrawOrder<enum_GPUParticles3D_DrawOrder>` **DRAW_ORDER_REVERSE_LIFETIME** = ``2``
 
-
+Particles are drawn in reverse order of remaining lifetime. In other words, the particle with the lowest lifetime is drawn at the front.
 
 .. _class_GPUParticles3D_constant_DRAW_ORDER_VIEW_DEPTH:
 
@@ -328,6 +330,8 @@ Number of particles to emit.
 
 Particle draw order. Uses :ref:`DrawOrder<enum_GPUParticles3D_DrawOrder>` values.
 
+\ **Note:** :ref:`DRAW_ORDER_INDEX<class_GPUParticles3D_constant_DRAW_ORDER_INDEX>` is the only option that supports motion vectors for effects like TAA. It is suggested to use this draw order if the particles are opaque to fix ghosting artifacts.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 2 - 2
classes/class_gridcontainer.rst

@@ -95,7 +95,7 @@ Theme Property Descriptions
 
 :ref:`int<class_int>` **h_separation** = ``4``
 
-The horizontal separation of children nodes.
+The horizontal separation of child nodes.
 
 .. rst-class:: classref-item-separator
 
@@ -107,7 +107,7 @@ The horizontal separation of children nodes.
 
 :ref:`int<class_int>` **v_separation** = ``4``
 
-The vertical separation of children nodes.
+The vertical separation of child nodes.
 
 .. |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.)`

+ 4 - 2
classes/class_httpclient.rst

@@ -890,6 +890,8 @@ Returns the response's body length.
 
 \ **Note:** Some Web servers may not send a body length. In this case, the value returned will be ``-1``. If using chunked transfer encoding, the body length will also be ``-1``.
 
+\ **Note:** This function always returns ``-1`` on the Web platform due to browsers limitations.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -1079,9 +1081,9 @@ To create a POST request with query strings to push to the server, do:
  .. code-tab:: csharp
 
     var fields = new Godot.Collections.Dictionary { { "username", "user" }, { "password", "pass" } };
-    string queryString = new HTTPClient().QueryStringFromDict(fields);
+    string queryString = new HttpClient().QueryStringFromDict(fields);
     string[] headers = { "Content-Type: application/x-www-form-urlencoded", $"Content-Length: {queryString.Length}" };
-    var result = new HTTPClient().Request(HTTPClient.Method.Post, "index.php", headers, queryString);
+    var result = new HttpClient().Request(HttpClient.Method.Post, "index.php", headers, queryString);
 
 
 

+ 4 - 4
classes/class_httprequest.rst

@@ -67,7 +67,7 @@ Can be used to make HTTP requests, i.e. download or upload files or web content
     public override void _Ready()
     {
         // Create an HTTP request node and connect its completion signal.
-        var httpRequest = new HTTPRequest();
+        var httpRequest = new HttpRequest();
         AddChild(httpRequest);
         httpRequest.RequestCompleted += HttpRequestCompleted;
     
@@ -85,7 +85,7 @@ Can be used to make HTTP requests, i.e. download or upload files or web content
         {
             { "name", "Godette" }
         });
-        error = httpRequest.Request("https://httpbin.org/post", null, HTTPClient.Method.Post, body);
+        error = httpRequest.Request("https://httpbin.org/post", null, HttpClient.Method.Post, body);
         if (error != Error.Ok)
         {
             GD.PushError("An error occurred in the HTTP request.");
@@ -145,7 +145,7 @@ Can be used to make HTTP requests, i.e. download or upload files or web content
     public override void _Ready()
     {
         // Create an HTTP request node and connect its completion signal.
-        var httpRequest = new HTTPRequest();
+        var httpRequest = new HttpRequest();
         AddChild(httpRequest);
         httpRequest.RequestCompleted += HttpRequestCompleted;
     
@@ -160,7 +160,7 @@ Can be used to make HTTP requests, i.e. download or upload files or web content
     // Called when the HTTP request is completed.
     private void HttpRequestCompleted(long result, long responseCode, string[] headers, byte[] body)
     {
-        if (result != (long)HTTPRequest.Result.Success)
+        if (result != (long)HttpRequest.Result.Success)
         {
             GD.PushError("Image couldn't be downloaded. Try a different image.");
         }

+ 15 - 19
classes/class_image.rst

@@ -265,7 +265,7 @@ OpenGL texture format ``RGBA`` with four components, each with a bitdepth of 4.
 
 :ref:`Format<enum_Image_Format>` **FORMAT_RGB565** = ``7``
 
-
+OpenGL texture format ``RGB`` with three components. Red and blue have a bitdepth of 5, and green has a bitdepth of 6.
 
 .. _class_Image_constant_FORMAT_RF:
 
@@ -305,7 +305,7 @@ OpenGL texture format ``GL_RGBA32F`` where there are four components, each a 32-
 
 :ref:`Format<enum_Image_Format>` **FORMAT_RH** = ``12``
 
-OpenGL texture format ``GL_R32F`` where there's one component, a 16-bit "half-precision" floating-point value.
+OpenGL texture format ``GL_R16F`` where there's one component, a 16-bit "half-precision" floating-point value.
 
 .. _class_Image_constant_FORMAT_RGH:
 
@@ -313,7 +313,7 @@ OpenGL texture format ``GL_R32F`` where there's one component, a 16-bit "half-pr
 
 :ref:`Format<enum_Image_Format>` **FORMAT_RGH** = ``13``
 
-OpenGL texture format ``GL_RG32F`` where there are two components, each a 16-bit "half-precision" floating-point value.
+OpenGL texture format ``GL_RG16F`` where there are two components, each a 16-bit "half-precision" floating-point value.
 
 .. _class_Image_constant_FORMAT_RGBH:
 
@@ -321,7 +321,7 @@ OpenGL texture format ``GL_RG32F`` where there are two components, each a 16-bit
 
 :ref:`Format<enum_Image_Format>` **FORMAT_RGBH** = ``14``
 
-OpenGL texture format ``GL_RGB32F`` where there are three components, each a 16-bit "half-precision" floating-point value.
+OpenGL texture format ``GL_RGB16F`` where there are three components, each a 16-bit "half-precision" floating-point value.
 
 .. _class_Image_constant_FORMAT_RGBAH:
 
@@ -329,7 +329,7 @@ OpenGL texture format ``GL_RGB32F`` where there are three components, each a 16-
 
 :ref:`Format<enum_Image_Format>` **FORMAT_RGBAH** = ``15``
 
-OpenGL texture format ``GL_RGBA32F`` where there are four components, each a 16-bit "half-precision" floating-point value.
+OpenGL texture format ``GL_RGBA16F`` where there are four components, each a 16-bit "half-precision" floating-point value.
 
 .. _class_Image_constant_FORMAT_RGBE9995:
 
@@ -487,7 +487,7 @@ Texture format that uses `BPTC <https://www.khronos.org/opengl/wiki/BPTC_Texture
 
 :ref:`Format<enum_Image_Format>` **FORMAT_ETC2_RA_AS_RG** = ``33``
 
-
+`Ericsson Texture Compression format 2 <https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC2_and_EAC>`__ (``RGBA8`` variant), which compresses RA data and interprets it as two channels (red and green). See also :ref:`FORMAT_ETC2_RGBA8<class_Image_constant_FORMAT_ETC2_RGBA8>`.
 
 .. _class_Image_constant_FORMAT_DXT5_RA_AS_RG:
 
@@ -495,7 +495,7 @@ Texture format that uses `BPTC <https://www.khronos.org/opengl/wiki/BPTC_Texture
 
 :ref:`Format<enum_Image_Format>` **FORMAT_DXT5_RA_AS_RG** = ``34``
 
-
+The `S3TC <https://en.wikipedia.org/wiki/S3_Texture_Compression>`__ texture format also known as Block Compression 3 or BC3, which compresses RA data and interprets it as two channels (red and green). See also :ref:`FORMAT_DXT5<class_Image_constant_FORMAT_DXT5>`.
 
 .. _class_Image_constant_FORMAT_ASTC_4x4:
 
@@ -703,7 +703,7 @@ enum **UsedChannels**:
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **USED_CHANNELS_L** = ``0``
 
-
+The image only uses one channel for luminance (grayscale).
 
 .. _class_Image_constant_USED_CHANNELS_LA:
 
@@ -711,7 +711,7 @@ enum **UsedChannels**:
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **USED_CHANNELS_LA** = ``1``
 
-
+The image uses two channels for luminance and alpha, respectively.
 
 .. _class_Image_constant_USED_CHANNELS_R:
 
@@ -719,7 +719,7 @@ enum **UsedChannels**:
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **USED_CHANNELS_R** = ``2``
 
-
+The image only uses the red channel.
 
 .. _class_Image_constant_USED_CHANNELS_RG:
 
@@ -727,7 +727,7 @@ enum **UsedChannels**:
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **USED_CHANNELS_RG** = ``3``
 
-
+The image uses two channels for red and green.
 
 .. _class_Image_constant_USED_CHANNELS_RGB:
 
@@ -735,7 +735,7 @@ enum **UsedChannels**:
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **USED_CHANNELS_RGB** = ``4``
 
-
+The image uses three channels for red, green, and blue.
 
 .. _class_Image_constant_USED_CHANNELS_RGBA:
 
@@ -743,7 +743,7 @@ enum **UsedChannels**:
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **USED_CHANNELS_RGBA** = ``5``
 
-
+The image uses four channels for red, green, blue, and alpha.
 
 .. rst-class:: classref-item-separator
 
@@ -862,9 +862,7 @@ Method Descriptions
 
 void **adjust_bcs** **(** :ref:`float<class_float>` brightness, :ref:`float<class_float>` contrast, :ref:`float<class_float>` saturation **)**
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Adjusts this image's ``brightness``, ``contrast``, and ``saturation`` by the given values. Does not work if the image is compressed (see :ref:`is_compressed<class_Image_method_is_compressed>`).
 
 .. rst-class:: classref-item-separator
 
@@ -1080,9 +1078,7 @@ Returns :ref:`ALPHA_BLEND<class_Image_constant_ALPHA_BLEND>` if the image has da
 
 :ref:`UsedChannels<enum_Image_UsedChannels>` **detect_used_channels** **(** :ref:`CompressSource<enum_Image_CompressSource>` source=0 **)** |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Returns the color channels used by this image, as one of the :ref:`UsedChannels<enum_Image_UsedChannels>` constants. If the image is compressed, the original ``source`` must be specified.
 
 .. rst-class:: classref-item-separator
 

+ 18 - 0
classes/class_input.rst

@@ -135,6 +135,8 @@ Methods
    +-------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                                    | :ref:`set_magnetometer<class_Input_method_set_magnetometer>` **(** :ref:`Vector3<class_Vector3>` value **)**                                                                                                                                                                                                 |
    +-------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | :ref:`bool<class_bool>`                                                 | :ref:`should_ignore_device<class_Input_method_should_ignore_device>` **(** :ref:`int<class_int>` vendor_id, :ref:`int<class_int>` product_id **)** |const|                                                                                                                                                   |
+   +-------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                                    | :ref:`start_joy_vibration<class_Input_method_start_joy_vibration>` **(** :ref:`int<class_int>` device, :ref:`float<class_float>` weak_magnitude, :ref:`float<class_float>` strong_magnitude, :ref:`float<class_float>` duration=0 **)**                                                                      |
    +-------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | void                                                                    | :ref:`stop_joy_vibration<class_Input_method_stop_joy_vibration>` **(** :ref:`int<class_int>` device **)**                                                                                                                                                                                                    |
@@ -869,6 +871,8 @@ Feeds an :ref:`InputEvent<class_InputEvent>` to the game. Can be used to artific
 
 
 
+\ **Note:** Calling this function has no influence on the operating system. So for example sending an :ref:`InputEventMouseMotion<class_InputEventMouseMotion>` will not move the OS mouse cursor to the specified position (use :ref:`warp_mouse<class_Input_method_warp_mouse>` instead) and sending :kbd:`Alt/Cmd + Tab` as :ref:`InputEventKey<class_InputEventKey>` won't toggle between active windows.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -979,6 +983,20 @@ Sets the value of the magnetic field of the magnetometer sensor. Can be used for
 
 ----
 
+.. _class_Input_method_should_ignore_device:
+
+.. rst-class:: classref-method
+
+:ref:`bool<class_bool>` **should_ignore_device** **(** :ref:`int<class_int>` vendor_id, :ref:`int<class_int>` product_id **)** |const|
+
+Queries whether an input device should be ignored or not. Devices can be ignored by setting the environment variable ``SDL_GAMECONTROLLER_IGNORE_DEVICES``. Read the `SDL documentation <https://wiki.libsdl.org/SDL2>`__ for more information.
+
+\ **Note:** Some 3rd party tools can contribute to the list of ignored devices. For example, *SteamInput* creates virtual devices from physical devices for remapping purposes. To avoid handling the same input device twice, the original device is added to the ignore list.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_Input_method_start_joy_vibration:
 
 .. rst-class:: classref-method

+ 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.)`

+ 40 - 33
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,15 +57,15 @@ 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);
         }
     }
     
-    private void PrintMIDIInfo(InputEventMIDI midiEvent)
+    private void PrintMIDIInfo(InputEventMidi midiEvent)
     {
         GD.Print(midiEvent);
         GD.Print($"Channel {midiEvent.Channel}");
@@ -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 on the General MIDI wikipedia article 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.)`

+ 1 - 1
classes/class_inputeventscreendrag.rst

@@ -106,7 +106,7 @@ Returns ``true`` when using the eraser end of a stylus pen.
 - void **set_position** **(** :ref:`Vector2<class_Vector2>` value **)**
 - :ref:`Vector2<class_Vector2>` **get_position** **(** **)**
 
-The drag position.
+The drag position in the viewport the node is in, using the coordinate system of this viewport.
 
 .. rst-class:: classref-item-separator
 

+ 1 - 1
classes/class_inputeventscreentouch.rst

@@ -119,7 +119,7 @@ The touch index in the case of a multi-touch event. One index = one finger.
 - void **set_position** **(** :ref:`Vector2<class_Vector2>` value **)**
 - :ref:`Vector2<class_Vector2>` **get_position** **(** **)**
 
-The touch position, in screen (global) coordinates.
+The touch position in the viewport the node is in, using the coordinate system of this viewport.
 
 .. rst-class:: classref-item-separator
 

+ 15 - 4
classes/class_int.rst

@@ -38,7 +38,7 @@ Likewise, :ref:`float<class_float>`\ s can be automatically converted into **int
  .. code-tab:: csharp
 
     int x = 1; // x is 1
-    x = 4.2; // x is 4, because 4.2 gets truncated
+    x = (int)4.2; // x is 4, because 4.2 gets truncated
     // We use long below, because GDScript's int is 64-bit while C#'s int is 32-bit.
     long maxLong = 9223372036854775807; // Biggest value a long can store
     maxLong++; // maxLong is now -9223372036854775808, because it wrapped around.
@@ -49,14 +49,25 @@ Likewise, :ref:`float<class_float>`\ s can be automatically converted into **int
 
 
 
-In GDScript, you can use the ``0b`` literal for binary representation, the ``0x`` literal for hexadecimal representation, and the ``_`` symbol to separate long numbers and improve readability.
+You can use the ``0b`` literal for binary representation, the ``0x`` literal for hexadecimal representation, and the ``_`` symbol to separate long numbers and improve readability.
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
     var x = 0b1001 # x is 9
     var y = 0xF5 # y is 245
     var z = 10_000_000 # z is 10000000
 
+ .. code-tab:: csharp
+
+    int x = 0b1001; // x is 9
+    int y = 0xF5; // y is 245
+    int z = 10_000_000; // z is 10000000
+
+
+
 .. rst-class:: classref-reftable-group
 
 Constructors
@@ -758,7 +769,7 @@ This is useful for storing binary flags in a variable.
 
 :ref:`int<class_int>` **operator ~** **(** **)**
 
-Performs the bitwise ``NOT`` operation on the **int**. Due to `2's complement <https://en.wikipedia.org/wiki/Two%27s_complement/>`__, it's effectively equal to ``-(int + 1)``.
+Performs the bitwise ``NOT`` operation on the **int**. Due to `2's complement <https://en.wikipedia.org/wiki/Two%27s_complement>`__, it's effectively equal to ``-(int + 1)``.
 
 ::
 

+ 7 - 0
classes/class_label3d.rst

@@ -21,6 +21,13 @@ Description
 
 A node for displaying plain text in 3D space. By adjusting various properties of this node, you can configure things such as the text's appearance and whether it always faces the camera.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`3D text <../tutorials/3d/3d_text>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 2 - 0
classes/class_light3d.rst

@@ -30,6 +30,8 @@ Tutorials
 
 - :doc:`3D lights and shadows <../tutorials/3d/lights_and_shadows>`
 
+- :doc:`Faking global illumination <../tutorials/3d/global_illumination/faking_global_illumination>`
+
 - `Third Person Shooter Demo <https://godotengine.org/asset-library/asset/678>`__
 
 .. rst-class:: classref-reftable-group

+ 16 - 1
classes/class_lightmapgi.rst

@@ -29,7 +29,14 @@ The **LightmapGI** node is used to compute and store baked lightmaps. Lightmaps
 
 \ **Note:** Lightmap baking on :ref:`CSGShape3D<class_CSGShape3D>`\ s and :ref:`PrimitiveMesh<class_PrimitiveMesh>`\ es is not supported, as these cannot store UV2 data required for baking.
 
-\ **Note:** If no custom lightmappers are installed, **LightmapGI** can only be baked when using the Vulkan backend (Forward+ or Mobile), not OpenGL.
+\ **Note:** If no custom lightmappers are installed, **LightmapGI** can only be baked when using the Vulkan backend (Forward+ or Mobile), not OpenGL. Additionally, **LightmapGI** rendering is not currently supported when using the OpenGL backend (Compatibility).
+
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Using Lightmap global illumination <../tutorials/3d/global_illumination/using_lightmap_gi>`
 
 .. rst-class:: classref-reftable-group
 
@@ -248,6 +255,14 @@ Lightmap baking failed as the resulting image couldn't be saved or imported by G
 
 The user aborted the lightmap baking operation (typically by clicking the **Cancel** button in the progress dialog).
 
+.. _class_LightmapGI_constant_BAKE_ERROR_TEXTURE_SIZE_TOO_SMALL:
+
+.. rst-class:: classref-enumeration-constant
+
+:ref:`BakeError<enum_LightmapGI_BakeError>` **BAKE_ERROR_TEXTURE_SIZE_TOO_SMALL** = ``9``
+
+Lightmap baking failed as the maximum texture size is too small to fit some of the meshes marked for baking.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 1 - 0
classes/class_mainloop.rst

@@ -54,6 +54,7 @@ Here is an example script implementing a simple **MainLoop**:
 
     using Godot;
     
+    [GlobalClass]
     public partial class CustomMainLoop : MainLoop
     {
         private double _timeElapsed = 0;

+ 13 - 19
classes/class_material.rst

@@ -14,14 +14,16 @@ Material
 
 **Inherited By:** :ref:`BaseMaterial3D<class_BaseMaterial3D>`, :ref:`CanvasItemMaterial<class_CanvasItemMaterial>`, :ref:`FogMaterial<class_FogMaterial>`, :ref:`PanoramaSkyMaterial<class_PanoramaSkyMaterial>`, :ref:`ParticleProcessMaterial<class_ParticleProcessMaterial>`, :ref:`PhysicalSkyMaterial<class_PhysicalSkyMaterial>`, :ref:`PlaceholderMaterial<class_PlaceholderMaterial>`, :ref:`ProceduralSkyMaterial<class_ProceduralSkyMaterial>`, :ref:`ShaderMaterial<class_ShaderMaterial>`
 
-Abstract base :ref:`Resource<class_Resource>` for coloring and shading geometry.
+Virtual base class for applying visual properties to an object, such as color and roughness.
 
 .. rst-class:: classref-introduction-group
 
 Description
 -----------
 
-Material is a base :ref:`Resource<class_Resource>` used for coloring and shading geometry. All materials inherit from it and almost all :ref:`VisualInstance3D<class_VisualInstance3D>` derived nodes carry a Material. A few flags and parameters are shared between all material types and are configured here.
+**Material** is a base resource used for coloring and shading geometry. All materials inherit from it and almost all :ref:`VisualInstance3D<class_VisualInstance3D>` derived nodes carry a **Material**. A few flags and parameters are shared between all material types and are configured here.
+
+Importantly, you can inherit from **Material** to create your own custom material type in script or in GDExtension.
 
 .. rst-class:: classref-introduction-group
 
@@ -115,6 +117,8 @@ Property Descriptions
 
 Sets the **Material** to be used for the next pass. This renders the object again using a different material.
 
+\ **Note:** :ref:`next_pass<class_Material_property_next_pass>` materials are not necessarily drawn immediately after the source **Material**. Draw order is determined by material properties, :ref:`render_priority<class_Material_property_render_priority>`, and distance to camera.
+
 \ **Note:** This only applies to :ref:`StandardMaterial3D<class_StandardMaterial3D>`\ s and :ref:`ShaderMaterial<class_ShaderMaterial>`\ s with type "Spatial".
 
 .. rst-class:: classref-item-separator
@@ -132,11 +136,11 @@ Sets the **Material** to be used for the next pass. This renders the object agai
 - void **set_render_priority** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_render_priority** **(** **)**
 
-Sets the render priority for transparent objects in 3D scenes. Higher priority objects will be sorted in front of lower priority objects.
+Sets the render priority for objects in 3D scenes. Higher priority objects will be sorted in front of lower priority objects. In other words, all objects with :ref:`render_priority<class_Material_property_render_priority>` ``1`` will render before all objects with :ref:`render_priority<class_Material_property_render_priority>` ``0``).
 
 \ **Note:** This only applies to :ref:`StandardMaterial3D<class_StandardMaterial3D>`\ s and :ref:`ShaderMaterial<class_ShaderMaterial>`\ s with type "Spatial".
 
-\ **Note:** This only applies to sorting of transparent objects. This will not impact how transparent objects are sorted relative to opaque objects. This is because opaque objects are not sorted, while transparent objects are sorted from back to front (subject to priority).
+\ **Note:** This will not impact how transparent objects are sorted relative to opaque objects or how dynamic meshes will be sorted relative to other opaque meshes. This is because all transparent objects are drawn after all opaque objects and all dynamic opaque meshes are drawn before other opaque meshes.
 
 .. rst-class:: classref-section-separator
 
@@ -153,9 +157,7 @@ Method Descriptions
 
 :ref:`bool<class_bool>` **_can_do_next_pass** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Only exposed for the purpose of overriding. You cannot call this function directly. Used internally to determine if :ref:`next_pass<class_Material_property_next_pass>` should be shown in the editor or not.
 
 .. rst-class:: classref-item-separator
 
@@ -167,9 +169,7 @@ Method Descriptions
 
 :ref:`bool<class_bool>` **_can_use_render_priority** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Only exposed for the purpose of overriding. You cannot call this function directly. Used internally to determine if :ref:`render_priority<class_Material_property_render_priority>` should be shown in the editor or not.
 
 .. rst-class:: classref-item-separator
 
@@ -181,9 +181,7 @@ Method Descriptions
 
 :ref:`Mode<enum_Shader_Mode>` **_get_shader_mode** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Only exposed for the purpose of overriding. You cannot call this function directly. Used internally by various editor tools.
 
 .. rst-class:: classref-item-separator
 
@@ -195,9 +193,7 @@ Method Descriptions
 
 :ref:`RID<class_RID>` **_get_shader_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>`!
+Only exposed for the purpose of overriding. You cannot call this function directly. Used internally by various editor tools. Used to access the RID of the **Material**'s :ref:`Shader<class_Shader>`.
 
 .. rst-class:: classref-item-separator
 
@@ -221,9 +217,7 @@ Creates a placeholder version of this resource (:ref:`PlaceholderMaterial<class_
 
 void **inspect_native_shader_code** **(** **)**
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Only available when running in the editor. Opens a popup that visualizes the generated shader code, including all variants and internal shader code.
 
 .. |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.)`

+ 10 - 6
classes/class_mesh.rst

@@ -229,7 +229,7 @@ enum **ArrayType**:
 
 :ref:`ArrayType<enum_Mesh_ArrayType>` **ARRAY_CUSTOM0** = ``6``
 
-Contains custom color channel 0. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM0_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>` or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
+Contains custom color channel 0. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM0_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_SNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_SNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>`, or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
 
 .. _class_Mesh_constant_ARRAY_CUSTOM1:
 
@@ -237,7 +237,7 @@ Contains custom color channel 0. :ref:`PackedByteArray<class_PackedByteArray>` i
 
 :ref:`ArrayType<enum_Mesh_ArrayType>` **ARRAY_CUSTOM1** = ``7``
 
-Contains custom color channel 1. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM1_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>` or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
+Contains custom color channel 1. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM1_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_SNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_SNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>`, or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
 
 .. _class_Mesh_constant_ARRAY_CUSTOM2:
 
@@ -245,7 +245,7 @@ Contains custom color channel 1. :ref:`PackedByteArray<class_PackedByteArray>` i
 
 :ref:`ArrayType<enum_Mesh_ArrayType>` **ARRAY_CUSTOM2** = ``8``
 
-Contains custom color channel 2. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM2_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>` or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
+Contains custom color channel 2. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM2_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_SNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_SNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>`, or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
 
 .. _class_Mesh_constant_ARRAY_CUSTOM3:
 
@@ -253,7 +253,7 @@ Contains custom color channel 2. :ref:`PackedByteArray<class_PackedByteArray>` i
 
 :ref:`ArrayType<enum_Mesh_ArrayType>` **ARRAY_CUSTOM3** = ``9``
 
-Contains custom color channel 3. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM3_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>` or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
+Contains custom color channel 3. :ref:`PackedByteArray<class_PackedByteArray>` if ``(format >> Mesh.ARRAY_FORMAT_CUSTOM3_SHIFT) & Mesh.ARRAY_FORMAT_CUSTOM_MASK`` is :ref:`ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`, :ref:`ARRAY_CUSTOM_RGBA8_SNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_SNORM>`, :ref:`ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>`, or :ref:`ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`. :ref:`PackedFloat32Array<class_PackedFloat32Array>` otherwise.
 
 .. _class_Mesh_constant_ARRAY_BONES:
 
@@ -912,7 +912,7 @@ Returns all the vertices that make up the faces of the mesh. Each three vertices
 
 :ref:`int<class_int>` **get_surface_count** **(** **)** |const|
 
-Returns the number of surfaces that the **Mesh** holds.
+Returns the number of surfaces that the **Mesh** holds. This is equivalent to :ref:`MeshInstance3D.get_surface_override_material_count<class_MeshInstance3D_method_get_surface_override_material_count>`.
 
 .. rst-class:: classref-item-separator
 
@@ -924,7 +924,7 @@ Returns the number of surfaces that the **Mesh** holds.
 
 :ref:`Array<class_Array>` **surface_get_arrays** **(** :ref:`int<class_int>` surf_idx **)** |const|
 
-Returns the arrays for the vertices, normals, uvs, etc. that make up the requested surface (see :ref:`ArrayMesh.add_surface_from_arrays<class_ArrayMesh_method_add_surface_from_arrays>`).
+Returns the arrays for the vertices, normals, UVs, etc. that make up the requested surface (see :ref:`ArrayMesh.add_surface_from_arrays<class_ArrayMesh_method_add_surface_from_arrays>`).
 
 .. rst-class:: classref-item-separator
 
@@ -950,6 +950,8 @@ Returns the blend shape arrays for the requested surface.
 
 Returns a :ref:`Material<class_Material>` in a given surface. Surface is rendered using this material.
 
+\ **Note:** This returns the material within the **Mesh** resource, not the :ref:`Material<class_Material>` associated to the :ref:`MeshInstance3D<class_MeshInstance3D>`'s Surface Material Override properties. To get the :ref:`Material<class_Material>` associated to the :ref:`MeshInstance3D<class_MeshInstance3D>`'s Surface Material Override properties, use :ref:`MeshInstance3D.get_surface_override_material<class_MeshInstance3D_method_get_surface_override_material>` instead.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -962,6 +964,8 @@ void **surface_set_material** **(** :ref:`int<class_int>` surf_idx, :ref:`Materi
 
 Sets a :ref:`Material<class_Material>` for a given surface. Surface will be rendered using this material.
 
+\ **Note:** This assigns the material within the **Mesh** resource, not the :ref:`Material<class_Material>` associated to the :ref:`MeshInstance3D<class_MeshInstance3D>`'s Surface Material Override properties. To set the :ref:`Material<class_Material>` associated to the :ref:`MeshInstance3D<class_MeshInstance3D>`'s Surface Material Override properties, use :ref:`MeshInstance3D.set_surface_override_material<class_MeshInstance3D_method_set_surface_override_material>` instead.
+
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 27 - 1
classes/class_meshdatatool.rst

@@ -72,6 +72,13 @@ See also :ref:`ArrayMesh<class_ArrayMesh>`, :ref:`ImmediateMesh<class_ImmediateM
 
 \ **Note:** Godot uses clockwise `winding order <https://learnopengl.com/Advanced-OpenGL/Face-culling>`__ for front faces of triangle primitive modes.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Using the MeshDataTool <../tutorials/3d/procedural_geometry/meshdatatool>`
+
 .. rst-class:: classref-reftable-group
 
 Methods
@@ -311,10 +318,29 @@ Calculates and returns the face normal of the given face.
 
 :ref:`int<class_int>` **get_face_vertex** **(** :ref:`int<class_int>` idx, :ref:`int<class_int>` vertex **)** |const|
 
-Returns the specified vertex of the given face.
+Returns the specified vertex index of the given face.
 
 Vertex argument must be either 0, 1, or 2 because faces contain three vertices.
 
+\ **Example:**\ 
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var index = mesh_data_tool.get_face_vertex(0, 1) # Gets the index of the second vertex of the first face.
+    var position = mesh_data_tool.get_vertex(index)
+    var normal = mesh_data_tool.get_vertex_normal(index)
+
+ .. code-tab:: csharp
+
+    int index = meshDataTool.GetFaceVertex(0, 1); // Gets the index of the second vertex of the first face.
+    Vector3 position = meshDataTool.GetVertex(index);
+    Vector3 normal = meshDataTool.GetVertexNormal(index);
+
+
+
 .. rst-class:: classref-item-separator
 
 ----

+ 6 - 2
classes/class_meshinstance3d.rst

@@ -259,7 +259,9 @@ Returns the value of the blend shape at the given ``blend_shape_idx``. Returns `
 
 :ref:`Material<class_Material>` **get_surface_override_material** **(** :ref:`int<class_int>` surface **)** |const|
 
-Returns the override :ref:`Material<class_Material>` for the specified ``surface`` of the :ref:`Mesh<class_Mesh>` resource.
+Returns the override :ref:`Material<class_Material>` for the specified ``surface`` of the :ref:`Mesh<class_Mesh>` resource. See also :ref:`get_surface_override_material_count<class_MeshInstance3D_method_get_surface_override_material_count>`.
+
+\ **Note:** This returns the :ref:`Material<class_Material>` associated to the **MeshInstance3D**'s Surface Material Override properties, not the material within the :ref:`Mesh<class_Mesh>` resource. To get the material within the :ref:`Mesh<class_Mesh>` resource, use :ref:`Mesh.surface_get_material<class_Mesh_method_surface_get_material>` instead.
 
 .. rst-class:: classref-item-separator
 
@@ -271,7 +273,7 @@ Returns the override :ref:`Material<class_Material>` for the specified ``surface
 
 :ref:`int<class_int>` **get_surface_override_material_count** **(** **)** |const|
 
-Returns the number of surface override materials. This is equivalent to :ref:`Mesh.get_surface_count<class_Mesh_method_get_surface_count>`.
+Returns the number of surface override materials. This is equivalent to :ref:`Mesh.get_surface_count<class_Mesh_method_get_surface_count>`. See also :ref:`get_surface_override_material<class_MeshInstance3D_method_get_surface_override_material>`.
 
 .. rst-class:: classref-item-separator
 
@@ -297,6 +299,8 @@ void **set_surface_override_material** **(** :ref:`int<class_int>` surface, :ref
 
 Sets the override ``material`` for the specified ``surface`` of the :ref:`Mesh<class_Mesh>` resource. This material is associated with this **MeshInstance3D** rather than with :ref:`mesh<class_MeshInstance3D_property_mesh>`.
 
+\ **Note:** This assigns the :ref:`Material<class_Material>` associated to the **MeshInstance3D**'s Surface Material Override properties, not the material within the :ref:`Mesh<class_Mesh>` resource. To set the material within the :ref:`Mesh<class_Mesh>` resource, use :ref:`Mesh.surface_get_material<class_Mesh_method_surface_get_material>` instead.
+
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 3 - 1
classes/class_multimesh.rst

@@ -36,10 +36,12 @@ Since instances may have any behavior, the AABB used for visibility must be prov
 Tutorials
 ---------
 
-- :doc:`Animating thousands of fish with MultiMeshInstance <../tutorials/performance/vertex_animation/animating_thousands_of_fish>`
+- :doc:`Using MultiMeshInstance <../tutorials/3d/using_multi_mesh_instance>`
 
 - :doc:`Optimization using MultiMeshes <../tutorials/performance/using_multimesh>`
 
+- :doc:`Animating thousands of fish with MultiMeshInstance <../tutorials/performance/vertex_animation/animating_thousands_of_fish>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 2 - 2
classes/class_multimeshinstance3d.rst

@@ -28,12 +28,12 @@ This is useful to optimize the rendering of a high number of instances of a give
 Tutorials
 ---------
 
-- :doc:`Animating thousands of fish with MultiMeshInstance <../tutorials/performance/vertex_animation/animating_thousands_of_fish>`
-
 - :doc:`Using MultiMeshInstance <../tutorials/3d/using_multi_mesh_instance>`
 
 - :doc:`Optimization using MultiMeshes <../tutorials/performance/using_multimesh>`
 
+- :doc:`Animating thousands of fish with MultiMeshInstance <../tutorials/performance/vertex_animation/animating_thousands_of_fish>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 14 - 6
classes/class_navigationagent2d.rst

@@ -179,7 +179,7 @@ The details dictionary may contain the following keys depending on the value of
 
 **navigation_finished** **(** **)**
 
-Notifies when the final position is reached.
+Emitted once per loaded path when the agent internal navigation path index reaches the last index of the loaded path array. The agent internal navigation path index can be received with :ref:`get_current_navigation_path_index<class_NavigationAgent2D_method_get_current_navigation_path_index>`.
 
 .. rst-class:: classref-item-separator
 
@@ -191,7 +191,13 @@ Notifies when the final position is reached.
 
 **path_changed** **(** **)**
 
-Notifies when the navigation path changes.
+Emitted when the agent had to update the loaded path:
+
+- because path was previously empty.
+
+- because navigation map has changed.
+
+- because agent pushed further away from the current path segment than the :ref:`path_max_distance<class_NavigationAgent2D_property_path_max_distance>`.
 
 .. rst-class:: classref-item-separator
 
@@ -203,7 +209,7 @@ Notifies when the navigation path changes.
 
 **target_reached** **(** **)**
 
-Notifies when the player-defined :ref:`target_position<class_NavigationAgent2D_property_target_position>` is reached.
+Emitted once per loaded path when the agent's global position is the first time within :ref:`target_desired_distance<class_NavigationAgent2D_property_target_desired_distance>` to the :ref:`target_position<class_NavigationAgent2D_property_target_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -741,7 +747,7 @@ Returns the path query result for the path the agent is currently following.
 
 :ref:`Vector2<class_Vector2>` **get_final_position** **(** **)**
 
-Returns the reachable final position of the current navigation path in global coordinates. This can change if the navigation path is altered in any way. Because of this, it would be best to check this each frame.
+Returns the reachable final position of the current navigation path in global coordinates. This position can change if the agent needs to update the navigation path which makes the agent emit the :ref:`path_changed<class_NavigationAgent2D_signal_path_changed>` signal.
 
 .. rst-class:: classref-item-separator
 
@@ -801,7 +807,9 @@ Returns the :ref:`RID<class_RID>` of this agent on the :ref:`NavigationServer2D<
 
 :ref:`bool<class_bool>` **is_navigation_finished** **(** **)**
 
-Returns true if the navigation path's final position has been reached.
+Returns ``true`` if the end of the currently loaded navigation path has been reached.
+
+\ **Note:** While true prefer to stop calling update functions like :ref:`get_next_path_position<class_NavigationAgent2D_method_get_next_path_position>`. This avoids jittering the standing agent due to calling repeated path updates.
 
 .. rst-class:: classref-item-separator
 
@@ -813,7 +821,7 @@ Returns true if the navigation path's final position has been reached.
 
 :ref:`bool<class_bool>` **is_target_reachable** **(** **)**
 
-Returns true if :ref:`target_position<class_NavigationAgent2D_property_target_position>` is reachable. The target position is set using :ref:`target_position<class_NavigationAgent2D_property_target_position>`.
+Returns ``true`` if :ref:`get_final_position<class_NavigationAgent2D_method_get_final_position>` is within :ref:`target_desired_distance<class_NavigationAgent2D_property_target_desired_distance>` of the :ref:`target_position<class_NavigationAgent2D_property_target_position>`.
 
 .. rst-class:: classref-item-separator
 

+ 16 - 8
classes/class_navigationagent3d.rst

@@ -169,9 +169,9 @@ The details dictionary may contain the following keys depending on the value of
 
 - ``owner``: The object which manages the link (usually :ref:`NavigationLink3D<class_NavigationLink3D>`).
 
-- ``link_entry_position``: If ``owner`` is available and the owner is a :ref:`NavigationLink2D<class_NavigationLink2D>`, it will contain the global position of the link's point the agent is entering.
+- ``link_entry_position``: If ``owner`` is available and the owner is a :ref:`NavigationLink3D<class_NavigationLink3D>`, it will contain the global position of the link's point the agent is entering.
 
-- ``link_exit_position``: If ``owner`` is available and the owner is a :ref:`NavigationLink2D<class_NavigationLink2D>`, it will contain the global position of the link's point which the agent is exiting.
+- ``link_exit_position``: If ``owner`` is available and the owner is a :ref:`NavigationLink3D<class_NavigationLink3D>`, it will contain the global position of the link's point which the agent is exiting.
 
 .. rst-class:: classref-item-separator
 
@@ -183,7 +183,7 @@ The details dictionary may contain the following keys depending on the value of
 
 **navigation_finished** **(** **)**
 
-Notifies when the final position is reached.
+Emitted once per loaded path when the agent internal navigation path index reaches the last index of the loaded path array. The agent internal navigation path index can be received with :ref:`get_current_navigation_path_index<class_NavigationAgent3D_method_get_current_navigation_path_index>`.
 
 .. rst-class:: classref-item-separator
 
@@ -195,7 +195,13 @@ Notifies when the final position is reached.
 
 **path_changed** **(** **)**
 
-Notifies when the navigation path changes.
+Emitted when the agent had to update the loaded path:
+
+- because path was previously empty.
+
+- because navigation map has changed.
+
+- because agent pushed further away from the current path segment than the :ref:`path_max_distance<class_NavigationAgent3D_property_path_max_distance>`.
 
 .. rst-class:: classref-item-separator
 
@@ -207,7 +213,7 @@ Notifies when the navigation path changes.
 
 **target_reached** **(** **)**
 
-Notifies when the player-defined :ref:`target_position<class_NavigationAgent3D_property_target_position>` is reached.
+Emitted once per loaded path when the agent's global position is the first time within :ref:`target_desired_distance<class_NavigationAgent3D_property_target_desired_distance>` to the :ref:`target_position<class_NavigationAgent3D_property_target_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -781,7 +787,7 @@ Returns the path query result for the path the agent is currently following.
 
 :ref:`Vector3<class_Vector3>` **get_final_position** **(** **)**
 
-Returns the reachable final position of the current navigation path in global coordinates. This position can change if the navigation path is altered in any way. Because of this, it would be best to check this each frame.
+Returns the reachable final position of the current navigation path in global coordinates. This position can change if the agent needs to update the navigation path which makes the agent emit the :ref:`path_changed<class_NavigationAgent3D_signal_path_changed>` signal.
 
 .. rst-class:: classref-item-separator
 
@@ -841,7 +847,9 @@ Returns the :ref:`RID<class_RID>` of this agent on the :ref:`NavigationServer3D<
 
 :ref:`bool<class_bool>` **is_navigation_finished** **(** **)**
 
-Returns true if the navigation path's final position has been reached.
+Returns ``true`` if the end of the currently loaded navigation path has been reached.
+
+\ **Note:** While true prefer to stop calling update functions like :ref:`get_next_path_position<class_NavigationAgent3D_method_get_next_path_position>`. This avoids jittering the standing agent due to calling repeated path updates.
 
 .. rst-class:: classref-item-separator
 
@@ -853,7 +861,7 @@ Returns true if the navigation path's final position has been reached.
 
 :ref:`bool<class_bool>` **is_target_reachable** **(** **)**
 
-Returns true if :ref:`target_position<class_NavigationAgent3D_property_target_position>` is reachable. The target position is set using :ref:`target_position<class_NavigationAgent3D_property_target_position>`.
+Returns ``true`` if :ref:`get_final_position<class_NavigationAgent3D_method_get_final_position>` is within :ref:`target_desired_distance<class_NavigationAgent3D_property_target_desired_distance>` of the :ref:`target_position<class_NavigationAgent3D_property_target_position>`.
 
 .. rst-class:: classref-item-separator
 

+ 2 - 2
classes/class_navigationmesh.rst

@@ -26,10 +26,10 @@ A navigation mesh is a collection of polygons that define which areas of an envi
 Tutorials
 ---------
 
-- `3D Navmesh Demo <https://godotengine.org/asset-library/asset/124>`__
-
 - :doc:`Using NavigationMeshes <../tutorials/navigation/navigation_using_navigationmeshes>`
 
+- `3D Navmesh Demo <https://godotengine.org/asset-library/asset/124>`__
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 1 - 1
classes/class_navigationserver3d.rst

@@ -19,7 +19,7 @@ A server interface for low-level 3D navigation access.
 Description
 -----------
 
-NavigationServer2D is the server that handles navigation maps, regions and agents. It does not handle A\* navigation from :ref:`AStar3D<class_AStar3D>`.
+NavigationServer3D is the server that handles navigation maps, regions and agents. It does not handle A\* navigation from :ref:`AStar3D<class_AStar3D>`.
 
 Maps are made up of regions, which are made of navigation meshes. Together, they define the navigable areas in the 3D world.
 

+ 8 - 8
classes/class_node.rst

@@ -472,7 +472,7 @@ enum **ProcessThreadGroup**:
 
 :ref:`ProcessThreadGroup<enum_Node_ProcessThreadGroup>` **PROCESS_THREAD_GROUP_INHERIT** = ``0``
 
-If the :ref:`process_thread_group<class_Node_property_process_thread_group>` property is sent to this, the node will belong to any parent (or grandparent) node that has a thread group mode that is not inherit. See :ref:`process_thread_group<class_Node_property_process_thread_group>` for more information.
+Process this node based on the thread group mode of the first parent (or grandparent) node that has a thread group mode that is not inherit. See :ref:`process_thread_group<class_Node_property_process_thread_group>` for more information.
 
 .. _class_Node_constant_PROCESS_THREAD_GROUP_MAIN_THREAD:
 
@@ -480,7 +480,7 @@ If the :ref:`process_thread_group<class_Node_property_process_thread_group>` pro
 
 :ref:`ProcessThreadGroup<enum_Node_ProcessThreadGroup>` **PROCESS_THREAD_GROUP_MAIN_THREAD** = ``1``
 
-Process this node (and children nodes set to inherit) on the main thread. See :ref:`process_thread_group<class_Node_property_process_thread_group>` for more information.
+Process this node (and child nodes set to inherit) on the main thread. See :ref:`process_thread_group<class_Node_property_process_thread_group>` for more information.
 
 .. _class_Node_constant_PROCESS_THREAD_GROUP_SUB_THREAD:
 
@@ -488,7 +488,7 @@ Process this node (and children nodes set to inherit) on the main thread. See :r
 
 :ref:`ProcessThreadGroup<enum_Node_ProcessThreadGroup>` **PROCESS_THREAD_GROUP_SUB_THREAD** = ``2``
 
-Process this node (and children nodes set to inherit) on a sub-thread. See :ref:`process_thread_group<class_Node_property_process_thread_group>` for more information.
+Process this node (and child nodes set to inherit) on a sub-thread. See :ref:`process_thread_group<class_Node_property_process_thread_group>` for more information.
 
 .. rst-class:: classref-item-separator
 
@@ -592,7 +592,7 @@ Node will not be internal.
 
 :ref:`InternalMode<enum_Node_InternalMode>` **INTERNAL_MODE_FRONT** = ``1``
 
-Node will be placed at the front of parent's node list, before any non-internal sibling.
+The node will be placed at the beginning of the parent's children, before any non-internal sibling.
 
 .. _class_Node_constant_INTERNAL_MODE_BACK:
 
@@ -600,7 +600,7 @@ Node will be placed at the front of parent's node list, before any non-internal
 
 :ref:`InternalMode<enum_Node_InternalMode>` **INTERNAL_MODE_BACK** = ``2``
 
-Node will be placed at the back of parent's node list, after any non-internal sibling.
+The node will be placed at the end of the parent's children, after any non-internal sibling.
 
 .. rst-class:: classref-section-separator
 
@@ -1143,7 +1143,7 @@ By default, the thread group is :ref:`PROCESS_THREAD_GROUP_INHERIT<class_Node_co
 
 During processing in a sub-thread, accessing most functions in nodes outside the thread group is forbidden (and it will result in an error in debug mode). Use :ref:`Object.call_deferred<class_Object_method_call_deferred>`, :ref:`call_thread_safe<class_Node_method_call_thread_safe>`, :ref:`call_deferred_thread_group<class_Node_method_call_deferred_thread_group>` and the likes in order to communicate from the thread groups to the main thread (or to other thread groups).
 
-To better understand process thread groups, the idea is that any node set to any other value than :ref:`PROCESS_THREAD_GROUP_INHERIT<class_Node_constant_PROCESS_THREAD_GROUP_INHERIT>` will include any children (and grandchildren) nodes set to inherit into its process thread group. this means that the processing of all the nodes in the group will happen together, at the same time as the node including them.
+To better understand process thread groups, the idea is that any node set to any other value than :ref:`PROCESS_THREAD_GROUP_INHERIT<class_Node_constant_PROCESS_THREAD_GROUP_INHERIT>` will include any child (and grandchild) nodes set to inherit into its process thread group. This means that the processing of all the nodes in the group will happen together, at the same time as the node including them.
 
 .. rst-class:: classref-item-separator
 
@@ -1361,7 +1361,7 @@ Usually used for initialization. For even earlier initialization, :ref:`Object._
 
 void **_shortcut_input** **(** :ref:`InputEvent<class_InputEvent>` event **)** |virtual|
 
-Called when an :ref:`InputEventKey<class_InputEventKey>` or :ref:`InputEventShortcut<class_InputEventShortcut>` hasn't been consumed by :ref:`_input<class_Node_method__input>` or any GUI :ref:`Control<class_Control>` item. The input event propagates up through the node tree until a node consumes it.
+Called when an :ref:`InputEventKey<class_InputEventKey>`\ ¸ :ref:`InputEventShortcut<class_InputEventShortcut>`, or :ref:`InputEventJoypadButton<class_InputEventJoypadButton>` hasn't been consumed by :ref:`_input<class_Node_method__input>` or any GUI :ref:`Control<class_Control>` item. The input event propagates up through the node tree until a node consumes it.
 
 It is only called if shortcut processing is enabled, which is done automatically if this method is overridden, and can be toggled with :ref:`set_process_shortcut_input<class_Node_method_set_process_shortcut_input>`.
 
@@ -1939,7 +1939,7 @@ Returns ``true`` if this is an instance load placeholder. See :ref:`InstancePlac
 
 :ref:`SceneTree<class_SceneTree>` **get_tree** **(** **)** |const|
 
-Returns the :ref:`SceneTree<class_SceneTree>` that contains this node.
+Returns the :ref:`SceneTree<class_SceneTree>` that contains this node. Returns ``null`` and prints an error if this node is not inside the scene tree. See also :ref:`is_inside_tree<class_Node_method_is_inside_tree>`.
 
 .. rst-class:: classref-item-separator
 

+ 1 - 1
classes/class_node2d.rst

@@ -342,7 +342,7 @@ Multiplies the current scale by the ``ratio`` vector.
 
 Returns the angle between the node and the ``point`` in radians.
 
-\ `Illustration of the returned angle. <https://raw.githubusercontent.com/godotengine/godot-docs/master/img/node2d_get_angle_to.png>`__
+\ `Illustration of the returned angle. <https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/node2d_get_angle_to.png>`__
 
 .. rst-class:: classref-item-separator
 

+ 3 - 1
classes/class_node3d.rst

@@ -633,7 +633,9 @@ Returns all the gizmos attached to this ``Node3D``.
 
 :ref:`Node3D<class_Node3D>` **get_parent_node_3d** **(** **)** |const|
 
-Returns the parent **Node3D**, or an empty :ref:`Object<class_Object>` if no parent exists or parent is not of type **Node3D**.
+Returns the parent **Node3D**, or ``null`` if no parent exists, the parent is not of type **Node3D**, or :ref:`top_level<class_Node3D_property_top_level>` is ``true``.
+
+\ **Note:** Calling this method is not equivalent to ``get_parent() as Node3D``, which does not take :ref:`top_level<class_Node3D_property_top_level>` into account.
 
 .. rst-class:: classref-item-separator
 

File diff suppressed because it is too large
+ 0 - 0
classes/class_object.rst


+ 7 - 0
classes/class_occluder3d.rst

@@ -25,6 +25,13 @@ Description
 
 See :ref:`OccluderInstance3D<class_OccluderInstance3D>`'s documentation for instructions on setting up occlusion culling.
 
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Occlusion culling <../tutorials/3d/occlusion_culling>`
+
 .. rst-class:: classref-reftable-group
 
 Methods

+ 9 - 0
classes/class_occluderinstance3d.rst

@@ -29,6 +29,15 @@ The occlusion culling system works by rendering the occluders on the CPU in para
 
 \ **Note:** Occlusion culling is only effective if :ref:`ProjectSettings.rendering/occlusion_culling/use_occlusion_culling<class_ProjectSettings_property_rendering/occlusion_culling/use_occlusion_culling>` is ``true``. Enabling occlusion culling has a cost on the CPU. Only enable occlusion culling if you actually plan to use it. Large open scenes with few or no objects blocking the view will generally not benefit much from occlusion culling. Large open scenes generally benefit more from mesh LOD and visibility ranges (:ref:`GeometryInstance3D.visibility_range_begin<class_GeometryInstance3D_property_visibility_range_begin>` and :ref:`GeometryInstance3D.visibility_range_end<class_GeometryInstance3D_property_visibility_range_end>`) compared to occlusion culling.
 
+\ **Note:** Due to memory constraints, occlusion culling is not supported by default in Web export templates. It can be enabled by compiling custom Web export templates with ``module_raycast_enabled=yes``.
+
+.. rst-class:: classref-introduction-group
+
+Tutorials
+---------
+
+- :doc:`Occlusion culling <../tutorials/3d/occlusion_culling>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 2 - 0
classes/class_omnilight3d.rst

@@ -32,6 +32,8 @@ Tutorials
 
 - :doc:`3D lights and shadows <../tutorials/3d/lights_and_shadows>`
 
+- :doc:`Faking global illumination <../tutorials/3d/global_illumination/faking_global_illumination>`
+
 .. rst-class:: classref-reftable-group
 
 Properties

+ 1 - 1
classes/class_openxrinteractionprofile.rst

@@ -19,7 +19,7 @@ Suggested bindings object for OpenXR.
 Description
 -----------
 
-This object stores suggested bindings for an interaction profile. Interaction profiles define the meta data for a tracked XR device such as an XR controller.
+This object stores suggested bindings for an interaction profile. Interaction profiles define the metadata for a tracked XR device such as an XR controller.
 
 For more information see the `interaction profiles info in the OpenXR specification <https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#semantic-path-interaction-profiles>`__.
 

+ 93 - 0
classes/class_openxrinteractionprofilemetadata.rst

@@ -0,0 +1,93 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/4.1/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/4.1/modules/openxr/doc_classes/OpenXRInteractionProfileMetadata.xml.
+
+.. _class_OpenXRInteractionProfileMetadata:
+
+OpenXRInteractionProfileMetadata
+================================
+
+**Inherits:** :ref:`Object<class_Object>`
+
+Meta class registering supported devices in OpenXR.
+
+.. rst-class:: classref-introduction-group
+
+Description
+-----------
+
+This class allows OpenXR core and extensions to register metadata relating to supported interaction devices such as controllers, trackers, haptic devices, etc. It is primarily used by the action map editor and to sanitize any action map by removing extension-dependent entries when applicable.
+
+.. rst-class:: classref-reftable-group
+
+Methods
+-------
+
+.. table::
+   :widths: auto
+
+   +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void | :ref:`register_interaction_profile<class_OpenXRInteractionProfileMetadata_method_register_interaction_profile>` **(** :ref:`String<class_String>` display_name, :ref:`String<class_String>` openxr_path, :ref:`String<class_String>` openxr_extension_name **)**                                                                                                                                  |
+   +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void | :ref:`register_io_path<class_OpenXRInteractionProfileMetadata_method_register_io_path>` **(** :ref:`String<class_String>` interaction_profile, :ref:`String<class_String>` display_name, :ref:`String<class_String>` toplevel_path, :ref:`String<class_String>` openxr_path, :ref:`String<class_String>` openxr_extension_name, :ref:`ActionType<enum_OpenXRAction_ActionType>` action_type **)** |
+   +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+   | void | :ref:`register_top_level_path<class_OpenXRInteractionProfileMetadata_method_register_top_level_path>` **(** :ref:`String<class_String>` display_name, :ref:`String<class_String>` openxr_path, :ref:`String<class_String>` openxr_extension_name **)**                                                                                                                                            |
+   +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+.. rst-class:: classref-section-separator
+
+----
+
+.. rst-class:: classref-descriptions-group
+
+Method Descriptions
+-------------------
+
+.. _class_OpenXRInteractionProfileMetadata_method_register_interaction_profile:
+
+.. rst-class:: classref-method
+
+void **register_interaction_profile** **(** :ref:`String<class_String>` display_name, :ref:`String<class_String>` openxr_path, :ref:`String<class_String>` openxr_extension_name **)**
+
+Registers an interaction profile using its OpenXR designation (e.g. ``/interaction_profiles/khr/simple_controller`` is the profile for OpenXR's simple controller profile).
+
+\ ``display_name`` is the description shown to the user. ``openxr_path`` is the interaction profile path being registered. ``openxr_extension_name`` optionally restricts this profile to the given extension being enabled/available. If the extension is not available, the profile and all related entries used in an action map are filtered out.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_OpenXRInteractionProfileMetadata_method_register_io_path:
+
+.. rst-class:: classref-method
+
+void **register_io_path** **(** :ref:`String<class_String>` interaction_profile, :ref:`String<class_String>` display_name, :ref:`String<class_String>` toplevel_path, :ref:`String<class_String>` openxr_path, :ref:`String<class_String>` openxr_extension_name, :ref:`ActionType<enum_OpenXRAction_ActionType>` action_type **)**
+
+Registers an input/output path for the given ``interaction_profile``. The profile should previously have been registered using :ref:`register_interaction_profile<class_OpenXRInteractionProfileMetadata_method_register_interaction_profile>`. ``display_name`` is the description shown to the user. ``toplevel_path`` specifies the bind path this input/output can be bound to (e.g. ``/user/hand/left`` or ``/user/hand/right``). ``openxr_path`` is the action input/output being registered (e.g. ``/user/hand/left/input/aim/pose``). ``openxr_extension_name`` restricts this input/output to an enabled/available extension, this doesn't need to repeat the extension on the profile but relates to overlapping extension (e.g. ``XR_EXT_palm_pose`` that introduces ``…/input/palm_ext/pose`` input paths). ``action_type`` defines the type of input or output provided by OpenXR.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_OpenXRInteractionProfileMetadata_method_register_top_level_path:
+
+.. rst-class:: classref-method
+
+void **register_top_level_path** **(** :ref:`String<class_String>` display_name, :ref:`String<class_String>` openxr_path, :ref:`String<class_String>` openxr_extension_name **)**
+
+Registers a top level path to which profiles can be bound. For instance ``/user/hand/left`` refers to the bind point for the player's left hand. Extensions can register additional top level paths, for instance a haptic vest extension might register ``/user/body/vest``.
+
+\ ``display_name`` is the name shown to the user. ``openxr_path`` is the top level path being registered. ``openxr_extension_name`` is optional and ensures the top level path is only used if the specified extension is available/enabled.
+
+When a top level path ends up being bound by OpenXR, a :ref:`XRPositionalTracker<class_XRPositionalTracker>` is instantiated to manage the state of the device.
+
+.. |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.)`
+.. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
+.. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`

+ 7 - 3
classes/class_os.rst

@@ -531,6 +531,8 @@ If you wish to access a shell built-in or execute a composite command, a platfor
 
 \ **Note:** On macOS, sandboxed applications are limited to run only embedded helper executables, specified during export.
 
+\ **Note:** On Android, system commands such as ``dumpsys`` can only be run on a rooted device.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -630,9 +632,11 @@ For example, in the command line below, ``--fullscreen`` will not be returned in
 
 ::
 
-    godot --fullscreen -- --level 1
-    # Or:
-    godot --fullscreen ++ --level 1
+    # Godot has been executed with the following command:
+    # godot --fullscreen -- --level=2 --hardcore
+    
+    OS.get_cmdline_args()      # Returns ["--fullscreen", "--level=2", "--hardcore"]
+    OS.get_cmdline_user_args() # Returns ["--level=2", "--hardcore"]
 
 .. rst-class:: classref-item-separator
 

+ 4 - 0
classes/class_packedbytearray.rst

@@ -467,6 +467,8 @@ Decodes a size of a :ref:`Variant<class_Variant>` from the bytes starting at ``b
 
 Returns a new **PackedByteArray** with the data decompressed. Set ``buffer_size`` to the size of the uncompressed data. Set the compression mode using one of :ref:`CompressionMode<enum_FileAccess_CompressionMode>`'s constants.
 
+\ **Note:** Decompression is not guaranteed to work with data not compressed by Godot, for example if data compressed with the deflate compression mode lacks a checksum or header.
+
 .. rst-class:: classref-item-separator
 
 ----
@@ -483,6 +485,8 @@ This method is potentially slower than ``decompress``, as it may have to re-allo
 
 GZIP has a maximal compression ratio of 1032:1, meaning it's very possible for a small compressed payload to decompress to a potentially very large output. To guard against this, you may provide a maximum size this function is allowed to allocate in bytes via ``max_output_size``. Passing -1 will allow for unbounded output. If any positive value is passed, and the decompression exceeds that amount in bytes, then an error will be returned.
 
+\ **Note:** Decompression is not guaranteed to work with data not compressed by Godot, for example if data compressed with the deflate compression mode lacks a checksum or header.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 1 - 1
classes/class_packedscene.rst

@@ -208,7 +208,7 @@ Property Descriptions
 
 A dictionary representation of the scene contents.
 
-Available keys include "rnames" and "variants" for resources, "node_count", "nodes", "node_paths" for nodes, "editable_instances" for base scene children overrides, "conn_count" and "conns" for signal connections, and "version" for the format style of the PackedScene.
+Available keys include "rnames" and "variants" for resources, "node_count", "nodes", "node_paths" for nodes, "editable_instances" for paths to overridden nodes, "conn_count" and "conns" for signal connections, and "version" for the format style of the PackedScene.
 
 .. rst-class:: classref-section-separator
 

+ 1 - 1
classes/class_packetpeerudp.rst

@@ -256,7 +256,7 @@ Waits for a packet to arrive on the bound address. See :ref:`bind<class_PacketPe
 
  .. code-tab:: csharp
 
-    var socket = new PacketPeerUDP();
+    var socket = new PacketPeerUdp();
     // Server
     socket.SetDestAddress("127.0.0.1", 789);
     socket.PutPacket("Time to stop".ToAsciiBuffer());

+ 5 - 3
classes/class_parallaxlayer.rst

@@ -61,11 +61,13 @@ Property Descriptions
 - void **set_mirroring** **(** :ref:`Vector2<class_Vector2>` value **)**
 - :ref:`Vector2<class_Vector2>` **get_mirroring** **(** **)**
 
-The ParallaxLayer's :ref:`Texture2D<class_Texture2D>` repeating. Useful for creating an infinite scrolling background. If an axis is set to ``0``, the :ref:`Texture2D<class_Texture2D>` will not be repeated.
+The interval, in pixels, at which the **ParallaxLayer** is drawn repeatedly. Useful for creating an infinitely scrolling background. If an axis is set to ``0``, the **ParallaxLayer** will be drawn only once along that direction.
 
-If the length of the viewport axis is bigger than twice the repeated axis size, it will not repeat infinitely, as the parallax layer only draws 2 instances of the texture at any given time.
+\ **Note:** If you want the repetition to pixel-perfect match a :ref:`Texture2D<class_Texture2D>` displayed by a child node, you should account for any scale applied to the texture when defining this interval. For example, if you use a child :ref:`Sprite2D<class_Sprite2D>` scaled to ``0.5`` to display a 600x600 texture, and want this sprite to be repeated continuously horizontally, you should set the mirroring to ``Vector2(300, 0)``.
 
-\ **Note:** Despite its name, the texture will not be mirrored, it will simply be repeated.
+\ **Note:** If the length of the viewport axis is bigger than twice the repeated axis size, it will not repeat infinitely, as the parallax layer only draws 2 instances of the layer at any given time. The visibility window is calculated from the parent :ref:`ParallaxBackground<class_ParallaxBackground>`'s position, not the layer's own position. So, if you use mirroring, **do not** change the **ParallaxLayer** position relative to its parent. Instead, if you need to adjust the background's position, set the :ref:`CanvasLayer.offset<class_CanvasLayer_property_offset>` property in the parent :ref:`ParallaxBackground<class_ParallaxBackground>`.
+
+\ **Note:** Despite the name, the layer will not be mirrored, it will only be repeated.
 
 .. rst-class:: classref-item-separator
 

+ 1 - 1
classes/class_pckpacker.rst

@@ -33,7 +33,7 @@ The **PCKPacker** is used to create packages that can be loaded into a running p
 
  .. code-tab:: csharp
 
-    var packer = new PCKPacker();
+    var packer = new PckPacker();
     packer.PckStart("test.pck");
     packer.AddFile("res://text.txt", "text.txt");
     packer.Flush();

+ 2 - 0
classes/class_physicalbone3d.rst

@@ -266,6 +266,8 @@ Sets the body's transform.
 
 The body's bounciness. Values range from ``0`` (no bounce) to ``1`` (full bounciness).
 
+\ **Note:** Even with :ref:`bounce<class_PhysicalBone3D_property_bounce>` set to ``1.0``, some energy will be lost over time due to linear and angular damping. To have a **PhysicalBone3D** that preserves all its energy over time, set :ref:`bounce<class_PhysicalBone3D_property_bounce>` to ``1.0``, :ref:`linear_damp_mode<class_PhysicalBone3D_property_linear_damp_mode>` to :ref:`DAMP_MODE_REPLACE<class_PhysicalBone3D_constant_DAMP_MODE_REPLACE>`, :ref:`linear_damp<class_PhysicalBone3D_property_linear_damp>` to ``0.0``, :ref:`angular_damp_mode<class_PhysicalBone3D_property_angular_damp_mode>` to :ref:`DAMP_MODE_REPLACE<class_PhysicalBone3D_constant_DAMP_MODE_REPLACE>`, and :ref:`angular_damp<class_PhysicalBone3D_property_angular_damp>` to ``0.0``.
+
 .. rst-class:: classref-item-separator
 
 ----

+ 44 - 132
classes/class_physicsdirectbodystate2dextension.rst

@@ -136,9 +136,7 @@ Method Descriptions
 
 void **_add_constant_central_force** **(** :ref:`Vector2<class_Vector2>` force **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.add_constant_central_force<class_PhysicsDirectBodyState2D_method_add_constant_central_force>`.
 
 .. rst-class:: classref-item-separator
 
@@ -150,9 +148,7 @@ void **_add_constant_central_force** **(** :ref:`Vector2<class_Vector2>` force *
 
 void **_add_constant_force** **(** :ref:`Vector2<class_Vector2>` force, :ref:`Vector2<class_Vector2>` position **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.add_constant_force<class_PhysicsDirectBodyState2D_method_add_constant_force>`.
 
 .. rst-class:: classref-item-separator
 
@@ -164,9 +160,7 @@ void **_add_constant_force** **(** :ref:`Vector2<class_Vector2>` force, :ref:`Ve
 
 void **_add_constant_torque** **(** :ref:`float<class_float>` torque **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.add_constant_torque<class_PhysicsDirectBodyState2D_method_add_constant_torque>`.
 
 .. rst-class:: classref-item-separator
 
@@ -178,9 +172,7 @@ void **_add_constant_torque** **(** :ref:`float<class_float>` torque **)** |virt
 
 void **_apply_central_force** **(** :ref:`Vector2<class_Vector2>` force **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.apply_central_force<class_PhysicsDirectBodyState2D_method_apply_central_force>`.
 
 .. rst-class:: classref-item-separator
 
@@ -192,9 +184,7 @@ void **_apply_central_force** **(** :ref:`Vector2<class_Vector2>` force **)** |v
 
 void **_apply_central_impulse** **(** :ref:`Vector2<class_Vector2>` impulse **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.apply_central_impulse<class_PhysicsDirectBodyState2D_method_apply_central_impulse>`.
 
 .. rst-class:: classref-item-separator
 
@@ -206,9 +196,7 @@ void **_apply_central_impulse** **(** :ref:`Vector2<class_Vector2>` impulse **)*
 
 void **_apply_force** **(** :ref:`Vector2<class_Vector2>` force, :ref:`Vector2<class_Vector2>` position **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.apply_force<class_PhysicsDirectBodyState2D_method_apply_force>`.
 
 .. rst-class:: classref-item-separator
 
@@ -220,9 +208,7 @@ void **_apply_force** **(** :ref:`Vector2<class_Vector2>` force, :ref:`Vector2<c
 
 void **_apply_impulse** **(** :ref:`Vector2<class_Vector2>` impulse, :ref:`Vector2<class_Vector2>` position **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.apply_impulse<class_PhysicsDirectBodyState2D_method_apply_impulse>`.
 
 .. rst-class:: classref-item-separator
 
@@ -234,9 +220,7 @@ void **_apply_impulse** **(** :ref:`Vector2<class_Vector2>` impulse, :ref:`Vecto
 
 void **_apply_torque** **(** :ref:`float<class_float>` torque **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.apply_torque<class_PhysicsDirectBodyState2D_method_apply_torque>`.
 
 .. rst-class:: classref-item-separator
 
@@ -248,9 +232,7 @@ void **_apply_torque** **(** :ref:`float<class_float>` torque **)** |virtual|
 
 void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.apply_torque_impulse<class_PhysicsDirectBodyState2D_method_apply_torque_impulse>`.
 
 .. rst-class:: classref-item-separator
 
@@ -262,9 +244,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_angular_velocity** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.angular_velocity<class_PhysicsDirectBodyState2D_property_angular_velocity>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -276,9 +256,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_center_of_mass** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.center_of_mass<class_PhysicsDirectBodyState2D_property_center_of_mass>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -290,9 +268,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_center_of_mass_local** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.center_of_mass_local<class_PhysicsDirectBodyState2D_property_center_of_mass_local>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -304,9 +280,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_constant_force** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_constant_force<class_PhysicsDirectBodyState2D_method_get_constant_force>`.
 
 .. rst-class:: classref-item-separator
 
@@ -318,9 +292,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_constant_torque** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_constant_torque<class_PhysicsDirectBodyState2D_method_get_constant_torque>`.
 
 .. rst-class:: classref-item-separator
 
@@ -332,9 +304,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`RID<class_RID>` **_get_contact_collider** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_collider<class_PhysicsDirectBodyState2D_method_get_contact_collider>`.
 
 .. rst-class:: classref-item-separator
 
@@ -346,9 +316,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`int<class_int>` **_get_contact_collider_id** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_collider_id<class_PhysicsDirectBodyState2D_method_get_contact_collider_id>`.
 
 .. rst-class:: classref-item-separator
 
@@ -360,9 +328,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Object<class_Object>` **_get_contact_collider_object** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_collider_object<class_PhysicsDirectBodyState2D_method_get_contact_collider_object>`.
 
 .. rst-class:: classref-item-separator
 
@@ -374,9 +340,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_contact_collider_position** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_collider_position<class_PhysicsDirectBodyState2D_method_get_contact_collider_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -388,9 +352,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`int<class_int>` **_get_contact_collider_shape** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_collider_shape<class_PhysicsDirectBodyState2D_method_get_contact_collider_shape>`.
 
 .. rst-class:: classref-item-separator
 
@@ -402,9 +364,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_contact_collider_velocity_at_position** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_collider_velocity_at_position<class_PhysicsDirectBodyState2D_method_get_contact_collider_velocity_at_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -416,9 +376,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`int<class_int>` **_get_contact_count** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_count<class_PhysicsDirectBodyState2D_method_get_contact_count>`.
 
 .. rst-class:: classref-item-separator
 
@@ -430,9 +388,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_contact_impulse** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_impulse<class_PhysicsDirectBodyState2D_method_get_contact_impulse>`.
 
 .. rst-class:: classref-item-separator
 
@@ -444,9 +400,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_contact_local_normal** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_local_normal<class_PhysicsDirectBodyState2D_method_get_contact_local_normal>`.
 
 .. rst-class:: classref-item-separator
 
@@ -458,9 +412,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_contact_local_position** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_local_position<class_PhysicsDirectBodyState2D_method_get_contact_local_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -472,9 +424,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`int<class_int>` **_get_contact_local_shape** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_local_shape<class_PhysicsDirectBodyState2D_method_get_contact_local_shape>`.
 
 .. rst-class:: classref-item-separator
 
@@ -486,9 +436,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_contact_local_velocity_at_position** **(** :ref:`int<class_int>` contact_idx **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_contact_local_velocity_at_position<class_PhysicsDirectBodyState2D_method_get_contact_local_velocity_at_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -500,9 +448,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_inverse_inertia** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.inverse_inertia<class_PhysicsDirectBodyState2D_property_inverse_inertia>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -514,9 +460,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_inverse_mass** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.inverse_mass<class_PhysicsDirectBodyState2D_property_inverse_mass>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -528,9 +472,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_linear_velocity** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.linear_velocity<class_PhysicsDirectBodyState2D_property_linear_velocity>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -542,9 +484,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`PhysicsDirectSpaceState2D<class_PhysicsDirectSpaceState2D>` **_get_space_state** **(** **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_space_state<class_PhysicsDirectBodyState2D_method_get_space_state>`.
 
 .. rst-class:: classref-item-separator
 
@@ -556,9 +496,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_step** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.step<class_PhysicsDirectBodyState2D_property_step>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -570,9 +508,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_total_angular_damp** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.total_angular_damp<class_PhysicsDirectBodyState2D_property_total_angular_damp>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -584,9 +520,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_total_gravity** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.total_gravity<class_PhysicsDirectBodyState2D_property_total_gravity>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -598,9 +532,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`float<class_float>` **_get_total_linear_damp** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.total_linear_damp<class_PhysicsDirectBodyState2D_property_total_linear_damp>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -612,9 +544,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Transform2D<class_Transform2D>` **_get_transform** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.transform<class_PhysicsDirectBodyState2D_property_transform>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -626,9 +556,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 :ref:`Vector2<class_Vector2>` **_get_velocity_at_local_position** **(** :ref:`Vector2<class_Vector2>` local_position **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.get_velocity_at_local_position<class_PhysicsDirectBodyState2D_method_get_velocity_at_local_position>`.
 
 .. rst-class:: classref-item-separator
 
@@ -640,9 +568,7 @@ void **_apply_torque_impulse** **(** :ref:`float<class_float>` impulse **)** |vi
 
 void **_integrate_forces** **(** **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.integrate_forces<class_PhysicsDirectBodyState2D_method_integrate_forces>`.
 
 .. rst-class:: classref-item-separator
 
@@ -654,9 +580,7 @@ void **_integrate_forces** **(** **)** |virtual|
 
 :ref:`bool<class_bool>` **_is_sleeping** **(** **)** |virtual| |const|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.sleeping<class_PhysicsDirectBodyState2D_property_sleeping>` and its respective getter.
 
 .. rst-class:: classref-item-separator
 
@@ -668,9 +592,7 @@ void **_integrate_forces** **(** **)** |virtual|
 
 void **_set_angular_velocity** **(** :ref:`float<class_float>` velocity **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.angular_velocity<class_PhysicsDirectBodyState2D_property_angular_velocity>` and its respective setter.
 
 .. rst-class:: classref-item-separator
 
@@ -682,9 +604,7 @@ void **_set_angular_velocity** **(** :ref:`float<class_float>` velocity **)** |v
 
 void **_set_constant_force** **(** :ref:`Vector2<class_Vector2>` force **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.set_constant_force<class_PhysicsDirectBodyState2D_method_set_constant_force>`.
 
 .. rst-class:: classref-item-separator
 
@@ -696,9 +616,7 @@ void **_set_constant_force** **(** :ref:`Vector2<class_Vector2>` force **)** |vi
 
 void **_set_constant_torque** **(** :ref:`float<class_float>` torque **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Overridable version of :ref:`PhysicsDirectBodyState2D.set_constant_torque<class_PhysicsDirectBodyState2D_method_set_constant_torque>`.
 
 .. rst-class:: classref-item-separator
 
@@ -710,9 +628,7 @@ void **_set_constant_torque** **(** :ref:`float<class_float>` torque **)** |virt
 
 void **_set_linear_velocity** **(** :ref:`Vector2<class_Vector2>` velocity **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.linear_velocity<class_PhysicsDirectBodyState2D_property_linear_velocity>` and its respective setter.
 
 .. rst-class:: classref-item-separator
 
@@ -724,9 +640,7 @@ void **_set_linear_velocity** **(** :ref:`Vector2<class_Vector2>` velocity **)**
 
 void **_set_sleep_state** **(** :ref:`bool<class_bool>` enabled **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.sleeping<class_PhysicsDirectBodyState2D_property_sleeping>` and its respective setter.
 
 .. rst-class:: classref-item-separator
 
@@ -738,9 +652,7 @@ void **_set_sleep_state** **(** :ref:`bool<class_bool>` enabled **)** |virtual|
 
 void **_set_transform** **(** :ref:`Transform2D<class_Transform2D>` transform **)** |virtual|
 
-.. container:: contribute
-
-	There is currently no description for this method. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+Implement to override the behavior of :ref:`PhysicsDirectBodyState2D.transform<class_PhysicsDirectBodyState2D_property_transform>` and its respective setter.
 
 .. |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.)`

+ 2 - 0
classes/class_physicsmaterial.rst

@@ -78,6 +78,8 @@ If ``true``, subtracts the bounciness from the colliding object's bounciness ins
 
 The body's bounciness. Values range from ``0`` (no bounce) to ``1`` (full bounciness).
 
+\ **Note:** Even with :ref:`bounce<class_PhysicsMaterial_property_bounce>` set to ``1.0``, some energy will be lost over time due to linear and angular damping. To have a :ref:`PhysicsBody3D<class_PhysicsBody3D>` that preserves all its energy over time, set :ref:`bounce<class_PhysicsMaterial_property_bounce>` to ``1.0``, the body's linear damp mode to **Replace** (if applicable), its linear damp to ``0.0``, its angular damp mode to **Replace** (if applicable), and its angular damp to ``0.0``.
+
 .. rst-class:: classref-item-separator
 
 ----

File diff suppressed because it is too large
+ 98 - 266
classes/class_physicsserver2dextension.rst


Some files were not shown because too many files changed in this diff