Browse Source

Sync classref with 3.2 branch

Rémi Verschelde 5 years ago
parent
commit
6b43db46c1
65 changed files with 837 additions and 332 deletions
  1. 32 48
      classes/[email protected]
  2. 4 0
      classes/[email protected]
  3. 16 4
      classes/class_aabb.rst
  4. 2 2
      classes/class_animation.rst
  5. 4 4
      classes/class_array.rst
  6. 3 1
      classes/class_basebutton.rst
  7. 28 14
      classes/class_basis.rst
  8. 23 5
      classes/class_canvasitem.rst
  9. 13 13
      classes/class_color.rst
  10. 5 1
      classes/class_control.rst
  11. 12 0
      classes/class_dynamicfont.rst
  12. 2 0
      classes/class_editorfilesystem.rst
  13. 4 0
      classes/class_editorfilesystemdirectory.rst
  14. 17 0
      classes/class_editorimportplugin.rst
  15. 20 0
      classes/class_editorinspector.rst
  16. 81 9
      classes/class_editorinterface.rst
  17. 6 6
      classes/class_editorproperty.rst
  18. 32 10
      classes/class_editorsettings.rst
  19. 12 2
      classes/class_editorspatialgizmo.rst
  20. 4 0
      classes/class_editorspatialgizmoplugin.rst
  21. 2 0
      classes/class_file.rst
  22. 2 0
      classes/class_font.rst
  23. 2 0
      classes/class_httpclient.rst
  24. 11 1
      classes/class_httprequest.rst
  25. 3 1
      classes/class_inputeventmousemotion.rst
  26. 1 1
      classes/class_kinematicbody.rst
  27. 1 1
      classes/class_kinematicbody2d.rst
  28. 57 39
      classes/class_lineedit.rst
  29. 2 2
      classes/class_networkedmultiplayerenet.rst
  30. 1 1
      classes/class_node.rst
  31. 18 1
      classes/class_object.rst
  32. 52 4
      classes/class_os.rst
  33. 9 0
      classes/class_packedscene.rst
  34. 17 11
      classes/class_plane.rst
  35. 7 1
      classes/class_primitivemesh.rst
  36. 36 8
      classes/class_projectsettings.rst
  37. 28 18
      classes/class_quat.rst
  38. 1 1
      classes/class_raycast.rst
  39. 1 1
      classes/class_raycast2d.rst
  40. 5 3
      classes/class_rect2.rst
  41. 6 1
      classes/class_reference.rst
  42. 13 2
      classes/class_regex.rst
  43. 6 2
      classes/class_resource.rst
  44. 19 7
      classes/class_rigidbody.rst
  45. 8 6
      classes/class_rigidbody2d.rst
  46. 1 1
      classes/class_skeleton.rst
  47. 2 2
      classes/class_spatial.rst
  48. 1 1
      classes/class_springarm.rst
  49. 8 4
      classes/class_string.rst
  50. 2 0
      classes/class_texturerect.rst
  51. 2 0
      classes/class_thread.rst
  52. 13 1
      classes/class_tileset.rst
  53. 2 0
      classes/class_timer.rst
  54. 11 7
      classes/class_transform.rst
  55. 26 15
      classes/class_transform2d.rst
  56. 40 3
      classes/class_udpserver.rst
  57. 40 30
      classes/class_vector2.rst
  58. 44 32
      classes/class_vector3.rst
  59. 2 0
      classes/class_vehiclebody.rst
  60. 2 0
      classes/class_vehiclewheel.rst
  61. 3 1
      classes/class_visibilityenabler.rst
  62. 3 1
      classes/class_visibilityenabler2d.rst
  63. 3 1
      classes/class_visibilitynotifier.rst
  64. 3 1
      classes/class_visibilitynotifier2d.rst
  65. 1 1
      classes/class_visualserver.rst

+ 32 - 48
classes/[email protected]

@@ -218,15 +218,13 @@ Constants
 
 .. _class_@GDScript_constant_NAN:
 
-- **PI** = **3.141593** --- Constant that represents how many times the diameter of a circle fits around its perimeter.
+- **PI** = **3.141593** --- Constant that represents how many times the diameter of a circle fits around its perimeter. This is equivalent to ``TAU / 2``.
 
-- **TAU** = **6.283185** --- The circle constant, the circumference of the unit circle.
+- **TAU** = **6.283185** --- The circle constant, the circumference of the unit circle in radians.
 
-- **INF** = **inf** --- A positive infinity. (For negative infinity, use -INF).
+- **INF** = **inf** --- Positive infinity. For negative infinity, use -INF.
 
-- **NAN** = **nan** --- Macro constant that expands to an expression of type float that represents a NaN.
-
-The NaN values are used to identify undefined or non-representable values for floating-point elements, such as the square root of negative numbers or the result of 0/0.
+- **NAN** = **nan** --- "Not a Number", an invalid value. ``NaN`` has special properties, including that it is not equal to itself. It is output by some invalid operations, such as dividing zero by zero.
 
 Method Descriptions
 -------------------
@@ -269,7 +267,7 @@ Supported color names are the same as the constants defined in :ref:`Color<class
 
 - :ref:`float<class_float>` **abs** **(** :ref:`float<class_float>` s **)**
 
-Returns the absolute value of parameter ``s`` (i.e. unsigned value, works for integer and float).
+Returns the absolute value of parameter ``s`` (i.e. positive value).
 
 ::
 
@@ -329,7 +327,7 @@ The optional ``message`` argument, if given, is shown in addition to the generic
 
 Returns the arc tangent of ``s`` in radians. Use it to get the angle from an angle's tangent in trigonometry: ``atan(tan(angle)) == angle``.
 
-The method cannot know in which quadrant the angle should fall. See :ref:`atan2<class_@GDScript_method_atan2>` if you always want an exact angle.
+The method cannot know in which quadrant the angle should fall. See :ref:`atan2<class_@GDScript_method_atan2>` if you have both ``y`` and ``x``.
 
 ::
 
@@ -343,6 +341,8 @@ The method cannot know in which quadrant the angle should fall. See :ref:`atan2<
 
 Returns the arc tangent of ``y/x`` in radians. Use to get the angle of tangent ``y/x``. To compute the value, the method takes into account the sign of both arguments in order to determine the quadrant.
 
+Important note: The Y coordinate comes first, by convention.
+
 ::
 
     a = atan2(0, -1) # a is 3.141593
@@ -371,7 +371,7 @@ Converts a 2D point expressed in the cartesian coordinate system (X and Y axis)
 
 - :ref:`float<class_float>` **ceil** **(** :ref:`float<class_float>` s **)**
 
-Rounds ``s`` upward, returning the smallest integral value that is not less than ``s``.
+Rounds ``s`` upward (towards positive infinity), returning the smallest whole number that is not less than ``s``.
 
 ::
 
@@ -491,7 +491,7 @@ Returns the result of ``value`` decreased by ``step`` \* ``amount``.
 
 - :ref:`float<class_float>` **deg2rad** **(** :ref:`float<class_float>` deg **)**
 
-Returns degrees converted to radians.
+Converts an angle expressed in degrees to radians.
 
 ::
 
@@ -512,7 +512,7 @@ Converts a previously converted instance to a dictionary, back into an instance.
 
 - :ref:`float<class_float>` **ease** **(** :ref:`float<class_float>` s, :ref:`float<class_float>` curve **)**
 
-Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is ease-in, 1+ is ease out. Negative values are in-out/out in.
+Easing function, based on exponent. The curve values are: 0 is constant, 1 is linear, 0 to 1 is ease-in, 1+ is ease out. Negative values are in-out/out in.
 
 ----
 
@@ -536,7 +536,7 @@ For exponents to other bases use the method :ref:`pow<class_@GDScript_method_pow
 
 - :ref:`float<class_float>` **floor** **(** :ref:`float<class_float>` s **)**
 
-Rounds ``s`` to the closest smaller integer and returns it.
+Rounds ``s`` downward (towards negative infinity), returning the largest whole number that is not more than ``s``.
 
 ::
 
@@ -731,7 +731,7 @@ Returns whether ``instance`` is a valid object (e.g. has not been deleted from m
 
 - :ref:`bool<class_bool>` **is_nan** **(** :ref:`float<class_float>` s **)**
 
-Returns whether ``s`` is a NaN (Not-A-Number) value.
+Returns whether ``s`` is a NaN ("Not a Number" or invalid) value.
 
 ----
 
@@ -741,6 +741,8 @@ Returns whether ``s`` is a NaN (Not-A-Number) value.
 
 Returns ``true`` if ``s`` is zero or almost zero.
 
+This method is faster than using :ref:`is_equal_approx<class_@GDScript_method_is_equal_approx>` with one value as zero.
+
 ----
 
 .. _class_@GDScript_method_len:
@@ -1112,7 +1114,7 @@ Pushes a warning message to Godot's built-in debugger and to the OS terminal.
 
 - :ref:`float<class_float>` **rad2deg** **(** :ref:`float<class_float>` rad **)**
 
-Converts from radians to degrees.
+Converts an angle expressed in radians to degrees.
 
 ::
 
@@ -1230,7 +1232,7 @@ Maps a ``value`` from range ``[istart, istop]`` to ``[ostart, ostop]``.
 
 - :ref:`float<class_float>` **round** **(** :ref:`float<class_float>` s **)**
 
-Returns the integral value that is nearest to ``s``, with halfway cases rounded away from zero.
+Rounds ``s`` to the nearest whole number, with halfway cases rounded away from zero.
 
 ::
 
@@ -1308,12 +1310,14 @@ Returns a number smoothly interpolated between the ``from`` and ``to``, based on
 
 - :ref:`float<class_float>` **sqrt** **(** :ref:`float<class_float>` s **)**
 
-Returns the square root of ``s``.
+Returns the square root of ``s``, where ``s`` is a non-negative number.
 
 ::
 
     sqrt(9) # Returns 3
 
+If you need negative inputs, use ``System.Numerics.Complex`` in C#.
+
 ----
 
 .. _class_@GDScript_method_step_decimals:
@@ -1510,33 +1514,23 @@ Usable for creating loop-alike behavior or infinite surfaces.
 
 ::
 
-    # a is 0.5
-    a = wrapf(10.5, 0.0, 10.0)
-
-::
-
-    # a is 9.5
-    a = wrapf(-0.5, 0.0, 10.0)
-
-::
-
-    # Infinite loop between 0.0 and 0.99
-    f = wrapf(f + 0.1, 0.0, 1.0)
+    # Infinite loop between 5.0 and 9.9
+    value = wrapf(value + 0.1, 5.0, 10.0)
 
 ::
 
     # Infinite rotation (in radians)
     angle = wrapf(angle + 0.1, 0.0, TAU)
 
-**Note:** If you just want to wrap between 0.0 and ``n`` (where ``n`` is a positive floating-point value), it is better for performance to use the :ref:`fmod<class_@GDScript_method_fmod>` method like ``fmod(number, n)``.
-
-``wrapf`` is more flexible than using the :ref:`fmod<class_@GDScript_method_fmod>` approach by giving the user a simple control over the minimum value. It also fully supports negative numbers, e.g.
-
 ::
 
     # Infinite rotation (in radians)
     angle = wrapf(angle + 0.1, -PI, PI)
 
+**Note:** If ``min`` is ``0``, this is equivalent to :ref:`fposmod<class_@GDScript_method_fposmod>`, so prefer using that instead.
+
+``wrapf`` is more flexible than using the :ref:`fposmod<class_@GDScript_method_fposmod>` approach by giving the user control over the minimum value.
+
 ----
 
 .. _class_@GDScript_method_wrapi:
@@ -1549,28 +1543,18 @@ Usable for creating loop-alike behavior or infinite surfaces.
 
 ::
 
-    # a is 0
-    a = wrapi(10, 0, 10)
-
-::
-
-    # a is 9
-    a = wrapi(-1, 0, 10)
-
-::
-
-    # Infinite loop between 0 and 9
-    frame = wrapi(frame + 1, 0, 10)
-
-**Note:** If you just want to wrap between 0 and ``n`` (where ``n`` is a positive integer value), it is better for performance to use the modulo operator like ``number % n``.
-
-``wrapi`` is more flexible than using the modulo approach by giving the user a simple control over the minimum value. It also fully supports negative numbers, e.g.
+    # Infinite loop between 5 and 9
+    frame = wrapi(frame + 1, 5, 10)
 
 ::
 
     # result is -2
     var result = wrapi(-6, -5, -1)
 
+**Note:** If ``min`` is ``0``, this is equivalent to :ref:`posmod<class_@GDScript_method_posmod>`, so prefer using that instead.
+
+``wrapi`` is more flexible than using the :ref:`posmod<class_@GDScript_method_posmod>` approach by giving the user control over the minimum value.
+
 ----
 
 .. _class_@GDScript_method_yield:

+ 4 - 0
classes/[email protected]

@@ -1250,6 +1250,8 @@ enum **ButtonList**:
 
 .. _enum_@GlobalScope_JoystickList:
 
+.. _class_@GlobalScope_constant_JOY_INVALID_OPTION:
+
 .. _class_@GlobalScope_constant_JOY_BUTTON_0:
 
 .. _class_@GlobalScope_constant_JOY_BUTTON_1:
@@ -1390,6 +1392,8 @@ enum **ButtonList**:
 
 enum **JoystickList**:
 
+- **JOY_INVALID_OPTION** = **-1** --- Invalid button or axis.
+
 - **JOY_BUTTON_0** = **0** --- Gamepad button 0.
 
 - **JOY_BUTTON_1** = **1** --- Gamepad button 1.

+ 16 - 4
classes/class_aabb.rst

@@ -38,6 +38,8 @@ Methods
 +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`AABB<class_AABB>`       | :ref:`AABB<class_AABB_method_AABB>` **(** :ref:`Vector3<class_Vector3>` position, :ref:`Vector3<class_Vector3>` size **)**                       |
 +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`AABB<class_AABB>`       | :ref:`abs<class_AABB_method_abs>` **(** **)**                                                                                                    |
++-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`       | :ref:`encloses<class_AABB_method_encloses>` **(** :ref:`AABB<class_AABB>` with **)**                                                             |
 +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`AABB<class_AABB>`       | :ref:`expand<class_AABB_method_expand>` **(** :ref:`Vector3<class_Vector3>` to_point **)**                                                       |
@@ -92,7 +94,7 @@ Property Descriptions
 | *Default* | ``Vector3( 0, 0, 0 )`` |
 +-----------+------------------------+
 
-Ending corner. This is calculated as ``position + size``. Changing this property changes :ref:`size<class_AABB_property_size>` accordingly.
+Ending corner. This is calculated as ``position + size``. Setting this value will change the size.
 
 ----
 
@@ -104,7 +106,7 @@ Ending corner. This is calculated as ``position + size``. Changing this property
 | *Default* | ``Vector3( 0, 0, 0 )`` |
 +-----------+------------------------+
 
-Beginning corner.
+Beginning corner. Typically has values lower than :ref:`end<class_AABB_property_end>`.
 
 ----
 
@@ -116,7 +118,9 @@ Beginning corner.
 | *Default* | ``Vector3( 0, 0, 0 )`` |
 +-----------+------------------------+
 
-Size from position to end.
+Size from :ref:`position<class_AABB_property_position>` to :ref:`end<class_AABB_property_end>`. Typically all components are positive.
+
+If the size is negative, you can use :ref:`abs<class_AABB_method_abs>` to fix it.
 
 Method Descriptions
 -------------------
@@ -125,7 +129,15 @@ Method Descriptions
 
 - :ref:`AABB<class_AABB>` **AABB** **(** :ref:`Vector3<class_Vector3>` position, :ref:`Vector3<class_Vector3>` size **)**
 
-Optional constructor, accepts position and size.
+Constructs an ``AABB`` from a position and size.
+
+----
+
+.. _class_AABB_method_abs:
+
+- :ref:`AABB<class_AABB>` **abs** **(** **)**
+
+Returns an AABB with equivalent position and size, modified so that the most-negative corner is the origin and the size is positive.
 
 ----
 

+ 2 - 2
classes/class_animation.rst

@@ -21,10 +21,10 @@ An Animation resource contains data used to animate everything in the engine. An
 ::
 
     # This creates an animation that makes the node "Enemy" move to the right by
-    # 100 pixels in 1 second.
+    # 100 pixels in 0.5 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_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)
 

+ 4 - 4
classes/class_array.rst

@@ -273,10 +273,10 @@ Returns ``true`` if the array contains the given value.
 
 ::
 
-    ["inside", 7].has("inside") == true
-    ["inside", 7].has("outside") == false
-    ["inside", 7].has(7) == true
-    ["inside", 7].has("7") == false
+    ["inside", 7].has("inside") # True
+    ["inside", 7].has("outside") # False
+    ["inside", 7].has(7) # True
+    ["inside", 7].has("7") # False
 
 **Note:** This is equivalent to using the ``in`` operator as follows:
 

+ 3 - 1
classes/class_basebutton.rst

@@ -85,6 +85,8 @@ Emitted when the button stops being held down.
 
 Emitted when the button is toggled or pressed. This is on :ref:`button_down<class_BaseButton_signal_button_down>` if :ref:`action_mode<class_BaseButton_property_action_mode>` is :ref:`ACTION_MODE_BUTTON_PRESS<class_BaseButton_constant_ACTION_MODE_BUTTON_PRESS>` and on :ref:`button_up<class_BaseButton_signal_button_up>` otherwise.
 
+If you need to know the button's pressed state (and :ref:`toggle_mode<class_BaseButton_property_toggle_mode>` is active), use :ref:`toggled<class_BaseButton_signal_toggled>` instead.
+
 ----
 
 .. _class_BaseButton_signal_toggled:
@@ -302,7 +304,7 @@ Method Descriptions
 
 - void **_pressed** **(** **)** virtual
 
-Called when the button is pressed.
+Called when the button is pressed. If you need to know the button's pressed state (and :ref:`toggle_mode<class_BaseButton_property_toggle_mode>` is active), use :ref:`_toggled<class_BaseButton_method__toggled>` instead.
 
 ----
 

+ 28 - 14
classes/class_basis.rst

@@ -14,13 +14,19 @@ Basis
 Description
 -----------
 
-3×3 matrix used for 3D rotation and scale. Contains 3 vector fields X, Y and Z as its columns, which can be interpreted as the local basis vectors of a transformation. Can also be accessed as array of 3D vectors. These vectors are orthogonal to each other, but are not necessarily normalized (due to scaling). Almost always used as an orthogonal basis for a :ref:`Transform<class_Transform>`.
+3×3 matrix used for 3D rotation and scale. Almost always used as an orthogonal basis for a Transform.
 
-For such use, it is composed of a scaling and a rotation matrix, in that order (M = R.S).
+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).
+
+Can also be accessed as array of 3D vectors. These vectors are normally orthogonal to each other, but are not necessarily normalized (due to scaling).
+
+For more information, read the "Matrices and transforms" documentation article.
 
 Tutorials
 ---------
 
+- :doc:`../tutorials/math/matrices_and_transforms`
+
 - :doc:`../tutorials/3d/using_transforms`
 
 Properties
@@ -92,7 +98,9 @@ Constants
 
 .. _class_Basis_constant_FLIP_Z:
 
-- **IDENTITY** = **Basis( 1, 0, 0, 0, 1, 0, 0, 0, 1 )** --- The identity basis. This is identical to calling ``Basis()`` without any parameters. This constant can be used to make your code clearer.
+- **IDENTITY** = **Basis( 1, 0, 0, 0, 1, 0, 0, 0, 1 )** --- The identity basis, with no rotation or scaling applied.
+
+This is identical to calling ``Basis()`` without any parameters. This constant can be used to make your code clearer, and for consistency with 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.
 
@@ -111,7 +119,7 @@ Property Descriptions
 | *Default* | ``Vector3( 1, 0, 0 )`` |
 +-----------+------------------------+
 
-The basis matrix's X vector.
+The basis matrix's X vector (column 0). Equivalent to array index ``0``.
 
 ----
 
@@ -123,7 +131,7 @@ The basis matrix's X vector.
 | *Default* | ``Vector3( 0, 1, 0 )`` |
 +-----------+------------------------+
 
-The basis matrix's Y vector.
+The basis matrix's Y vector (column 1). Equivalent to array index ``1``.
 
 ----
 
@@ -135,7 +143,7 @@ The basis matrix's Y vector.
 | *Default* | ``Vector3( 0, 0, 1 )`` |
 +-----------+------------------------+
 
-The basis matrix's Z vector.
+The basis matrix's Z vector (column 2). Equivalent to array index ``2``.
 
 Method Descriptions
 -------------------
@@ -144,25 +152,27 @@ Method Descriptions
 
 - :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Quat<class_Quat>` from **)**
 
-Create a rotation matrix from the given quaternion.
+Constructs a pure rotation basis matrix from the given quaternion.
 
 ----
 
 - :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Vector3<class_Vector3>` from **)**
 
-Create a rotation matrix (in the YXZ convention: first Z, then X, and Y last) from the specified Euler angles, given in the vector format as (X angle, Y angle, Z angle).
+Constructs a pure rotation basis matrix from the given Euler angles (in the YXZ convention: when \*composing\*, first Y, then X, and Z last), given in the vector format as (X angle, Y angle, Z angle).
+
+Consider using the :ref:`Quat<class_Quat>` constructor instead, which uses a quaternion instead of Euler angles.
 
 ----
 
 - :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Vector3<class_Vector3>` axis, :ref:`float<class_float>` phi **)**
 
-Create a rotation matrix which rotates around the given axis by the specified angle, in radians. The axis must be a normalized vector.
+Constructs a pure rotation basis matrix, rotated around the given ``axis`` by ``phi``, in radians. The axis must be a normalized vector.
 
 ----
 
 - :ref:`Basis<class_Basis>` **Basis** **(** :ref:`Vector3<class_Vector3>` x_axis, :ref:`Vector3<class_Vector3>` y_axis, :ref:`Vector3<class_Vector3>` z_axis **)**
 
-Create a matrix from 3 axis vectors.
+Constructs a basis matrix from 3 axis vectors (matrix columns).
 
 ----
 
@@ -170,7 +180,9 @@ Create a matrix from 3 axis vectors.
 
 - :ref:`float<class_float>` **determinant** **(** **)**
 
-Returns the determinant of the matrix.
+Returns the determinant of the basis matrix. If the basis is uniformly scaled, its determinant is the square of the 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.
 
 ----
 
@@ -178,7 +190,9 @@ Returns the determinant of the matrix.
 
 - :ref:`Vector3<class_Vector3>` **get_euler** **(** **)**
 
-Returns the basis's rotation in the form of Euler angles (in the YXZ convention: first Z, then X, and Y last). The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle). See :ref:`get_rotation_quat<class_Basis_method_get_rotation_quat>` if you need a quaternion instead.
+Returns the basis's rotation in the form of Euler angles (in 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).
+
+Consider using the :ref:`get_rotation_quat<class_Basis_method_get_rotation_quat>` method instead, which returns a :ref:`Quat<class_Quat>` quaternion instead of Euler angles.
 
 ----
 
@@ -186,7 +200,7 @@ Returns the basis's rotation in the form of Euler angles (in the YXZ convention:
 
 - :ref:`int<class_int>` **get_orthogonal_index** **(** **)**
 
-This function considers a discretization of rotations into 24 points on unit sphere, lying along the vectors (x,y,z) with each component being either -1, 0, or 1, and returns the index of the point best representing the orientation of the object. It is mainly used by the grid map editor. For further details, refer to the Godot source code.
+This function considers a discretization of rotations into 24 points on unit sphere, lying along the vectors (x,y,z) with each component being either -1, 0, or 1, and returns the index of the point best representing the orientation of the object. It is mainly used by the :ref:`GridMap<class_GridMap>` editor. For further details, refer to the Godot source code.
 
 ----
 
@@ -298,7 +312,7 @@ Returns a vector transformed (multiplied) by the matrix.
 
 - :ref:`Vector3<class_Vector3>` **xform_inv** **(** :ref:`Vector3<class_Vector3>` v **)**
 
-Returns a vector transformed (multiplied) by the transposed matrix.
+Returns a vector transformed (multiplied) by the transposed basis matrix.
 
 **Note:** This results in a multiplication by the inverse of the matrix only if it represents a rotation-reflection.
 

+ 23 - 5
classes/class_canvasitem.rst

@@ -359,7 +359,9 @@ If ``true``, the parent ``CanvasItem``'s :ref:`material<class_CanvasItem_propert
 | *Getter*  | is_visible()       |
 +-----------+--------------------+
 
-If ``true``, this ``CanvasItem`` is drawn. For controls that inherit :ref:`Popup<class_Popup>`, the correct way to make them visible is to call one of the multiple ``popup*()`` functions instead.
+If ``true``, this ``CanvasItem`` is drawn. The node is only visible if all of its antecedents are visible as well (in other words, :ref:`is_visible_in_tree<class_CanvasItem_method_is_visible_in_tree>` must return ``true``).
+
+**Note:** For controls that inherit :ref:`Popup<class_Popup>`, the correct way to make them visible is to call one of the multiple ``popup*()`` functions instead.
 
 Method Descriptions
 -------------------
@@ -424,7 +426,9 @@ Draws a :ref:`Mesh<class_Mesh>` in 2D, using the provided texture. See :ref:`Mes
 
 - void **draw_multiline** **(** :ref:`PoolVector2Array<class_PoolVector2Array>` points, :ref:`Color<class_Color>` color, :ref:`float<class_float>` width=1.0, :ref:`bool<class_bool>` antialiased=false **)**
 
-Draws multiple, parallel lines with a uniform ``color``. ``width`` and ``antialiased`` are currently not implemented and have no effect.
+Draws multiple, parallel lines with a uniform ``color``.
+
+**Note:** ``width`` and ``antialiased`` are currently not implemented and have no effect.
 
 ----
 
@@ -432,7 +436,9 @@ Draws multiple, parallel lines with a uniform ``color``. ``width`` and ``antiali
 
 - void **draw_multiline_colors** **(** :ref:`PoolVector2Array<class_PoolVector2Array>` points, :ref:`PoolColorArray<class_PoolColorArray>` colors, :ref:`float<class_float>` width=1.0, :ref:`bool<class_bool>` antialiased=false **)**
 
-Draws multiple, parallel lines with a uniform ``width``, segment-by-segment coloring, and optional antialiasing. Colors assigned to line segments match by index between ``points`` and ``colors``.
+Draws multiple, parallel lines with a uniform ``width`` and segment-by-segment coloring. Colors assigned to line segments match by index between ``points`` and ``colors``.
+
+**Note:** ``width`` and ``antialiased`` are currently not implemented and have no effect.
 
 ----
 
@@ -506,7 +512,19 @@ Sets a custom transform for drawing via matrix. Anything drawn afterwards will b
 
 - void **draw_string** **(** :ref:`Font<class_Font>` font, :ref:`Vector2<class_Vector2>` position, :ref:`String<class_String>` text, :ref:`Color<class_Color>` modulate=Color( 1, 1, 1, 1 ), :ref:`int<class_int>` clip_w=-1 **)**
 
-Draws a string using a custom font.
+Draws ``text`` using the specified ``font`` at the ``position`` (top-left corner). The text will have its color multiplied by ``modulate``. If ``clip_w`` is greater than or equal to 0, the text will be clipped if it exceeds the specified width.
+
+**Example using the default project font:**
+
+::
+
+    # If using this method in a script that redraws constantly, move the
+    # `default_font` declaration to a member variable assigned in `_ready()`
+    # so the Control is only created once.
+    var default_font = Control.new().get_font("font")
+    draw_string(default_font, Vector2(64, 64), "Hello world")
+
+See also :ref:`Font.draw<class_Font_method_draw>`.
 
 ----
 
@@ -674,7 +692,7 @@ Returns ``true`` if global transform notifications are communicated to children.
 
 - :ref:`bool<class_bool>` **is_visible_in_tree** **(** **)** const
 
-Returns ``true`` if the node is present in the :ref:`SceneTree<class_SceneTree>`, its :ref:`visible<class_CanvasItem_property_visible>` property is ``true`` and its inherited visibility is also ``true``.
+Returns ``true`` if the node is present in the :ref:`SceneTree<class_SceneTree>`, its :ref:`visible<class_CanvasItem_property_visible>` property is ``true`` and all its antecedents are also visible. If any antecedent is hidden, this node will not be visible in the scene tree.
 
 ----
 

+ 13 - 13
classes/class_color.rst

@@ -9,12 +9,12 @@
 Color
 =====
 
-Color in RGBA format with some support for ARGB format.
+Color in RGBA format using floats on the range of 0 to 1.
 
 Description
 -----------
 
-A color is represented by red, green, and blue ``(r, g, b)`` components. Additionally, ``a`` represents the alpha component, often used for transparency. Values are in floating-point and usually range from 0 to 1. Some properties (such as :ref:`CanvasItem.modulate<class_CanvasItem_property_modulate>`) may accept values greater than 1.
+A color represented by red, green, blue, and alpha (RGBA) components. The alpha component is often used for transparency. Values are in floating-point and usually range from 0 to 1. Some properties (such as CanvasItem.modulate) may accept values greater than 1 (overbright or HDR colors).
 
 You can also create a color from standardized color names by using :ref:`@GDScript.ColorN<class_@GDScript_method_ColorN>` or directly using the color constants defined here. The standardized color set is based on the `X11 color names <https://en.wikipedia.org/wiki/X11_color_names>`_.
 
@@ -692,7 +692,7 @@ Property Descriptions
 | *Default* | ``1.0`` |
 +-----------+---------+
 
-Alpha value (range 0 to 1).
+The color's alpha (transparency) component, typically on the range of 0 to 1.
 
 ----
 
@@ -704,7 +704,7 @@ Alpha value (range 0 to 1).
 | *Default* | ``255`` |
 +-----------+---------+
 
-Alpha value (range 0 to 255).
+Wrapper for :ref:`a<class_Color_property_a>` that uses the range 0 to 255 instead of 0 to 1.
 
 ----
 
@@ -716,7 +716,7 @@ Alpha value (range 0 to 255).
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-Blue value (range 0 to 1).
+The color's blue component, typically on the range of 0 to 1.
 
 ----
 
@@ -728,7 +728,7 @@ Blue value (range 0 to 1).
 | *Default* | ``0`` |
 +-----------+-------+
 
-Blue value (range 0 to 255).
+Wrapper for :ref:`b<class_Color_property_b>` that uses the range 0 to 255 instead of 0 to 1.
 
 ----
 
@@ -740,7 +740,7 @@ Blue value (range 0 to 255).
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-Green value (range 0 to 1).
+The color's green component, typically on the range of 0 to 1.
 
 ----
 
@@ -752,7 +752,7 @@ Green value (range 0 to 1).
 | *Default* | ``0`` |
 +-----------+-------+
 
-Green value (range 0 to 255).
+Wrapper for :ref:`g<class_Color_property_g>` that uses the range 0 to 255 instead of 0 to 1.
 
 ----
 
@@ -764,7 +764,7 @@ Green value (range 0 to 255).
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-HSV hue value (range 0 to 1).
+The HSV hue of this color, on the range 0 to 1.
 
 ----
 
@@ -776,7 +776,7 @@ HSV hue value (range 0 to 1).
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-Red value (range 0 to 1).
+The color's red component, typically on the range of 0 to 1.
 
 ----
 
@@ -788,7 +788,7 @@ Red value (range 0 to 1).
 | *Default* | ``0`` |
 +-----------+-------+
 
-Red value (range 0 to 255).
+Wrapper for :ref:`r<class_Color_property_r>` that uses the range 0 to 255 instead of 0 to 1.
 
 ----
 
@@ -800,7 +800,7 @@ Red value (range 0 to 255).
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-HSV saturation value (range 0 to 1).
+The HSV saturation of this color, on the range 0 to 1.
 
 ----
 
@@ -812,7 +812,7 @@ HSV saturation value (range 0 to 1).
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-HSV value (range 0 to 1).
+The HSV value (brightness) of this color, on the range 0 to 1.
 
 Method Descriptions
 -------------------

+ 5 - 1
classes/class_control.rst

@@ -1053,7 +1053,11 @@ The node's rotation around its pivot, in degrees. See :ref:`rect_pivot_offset<cl
 | *Getter*  | get_scale()         |
 +-----------+---------------------+
 
-The node's scale, relative to its :ref:`rect_size<class_Control_property_rect_size>`. Change this property to scale the node around its :ref:`rect_pivot_offset<class_Control_property_rect_pivot_offset>`.
+The node's scale, relative to its :ref:`rect_size<class_Control_property_rect_size>`. Change this property to scale the node around its :ref:`rect_pivot_offset<class_Control_property_rect_pivot_offset>`. The Control's :ref:`hint_tooltip<class_Control_property_hint_tooltip>` will also scale according to this value.
+
+**Note:** This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the `documentation <https://docs.godotengine.org/en/latest/tutorials/viewports/multiple_resolutions.html>`_ instead of scaling Controls individually.
+
+**Note:** If the Control node is a child of a :ref:`Container<class_Container>` node, the scale will be reset to ``Vector2(1, 1)`` when the scene is instanced. To set the Control's scale when it's instanced, wait for one frame using ``yield(get_tree(), "idle_frame")`` then set its :ref:`rect_scale<class_Control_property_rect_scale>` property.
 
 ----
 

+ 12 - 0
classes/class_dynamicfont.rst

@@ -60,6 +60,8 @@ Methods
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                          | :ref:`add_fallback<class_DynamicFont_method_add_fallback>` **(** :ref:`DynamicFontData<class_DynamicFontData>` data **)**                            |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                   | :ref:`get_available_chars<class_DynamicFont_method_get_available_chars>` **(** **)** const                                                           |
++-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`DynamicFontData<class_DynamicFontData>` | :ref:`get_fallback<class_DynamicFont_method_get_fallback>` **(** :ref:`int<class_int>` idx **)** const                                               |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                         | :ref:`get_fallback_count<class_DynamicFont_method_get_fallback_count>` **(** **)** const                                                             |
@@ -268,6 +270,16 @@ Adds a fallback font.
 
 ----
 
+.. _class_DynamicFont_method_get_available_chars:
+
+- :ref:`String<class_String>` **get_available_chars** **(** **)** const
+
+Returns a string containing all the characters available in the main and all the fallback fonts.
+
+If a given character is included in more than one font, it appears only once in the returned string.
+
+----
+
 .. _class_DynamicFont_method_get_fallback:
 
 - :ref:`DynamicFontData<class_DynamicFontData>` **get_fallback** **(** :ref:`int<class_int>` idx **)** const

+ 2 - 0
classes/class_editorfilesystem.rst

@@ -66,6 +66,8 @@ Remitted if a resource is reimported.
 
 - **resources_reload** **(** :ref:`PoolStringArray<class_PoolStringArray>` resources **)**
 
+Emitted if at least one resource is reloaded when the filesystem is scanned.
+
 ----
 
 .. _class_EditorFileSystem_signal_sources_changed:

+ 4 - 0
classes/class_editorfilesystemdirectory.rst

@@ -106,12 +106,16 @@ Returns the path to the file at index ``idx``.
 
 - :ref:`String<class_String>` **get_file_script_class_extends** **(** :ref:`int<class_int>` idx **)** const
 
+Returns the base class of the script class defined in the file at index ``idx``. If the file doesn't define a script class using the ``class_name`` syntax, this will return an empty string.
+
 ----
 
 .. _class_EditorFileSystemDirectory_method_get_file_script_class_name:
 
 - :ref:`String<class_String>` **get_file_script_class_name** **(** :ref:`int<class_int>` idx **)** const
 
+Returns the name of the script class defined in the file at index ``idx``. If the file doesn't define a script class using the ``class_name`` syntax, this will return an empty string.
+
 ----
 
 .. _class_EditorFileSystemDirectory_method_get_file_type:

+ 17 - 0
classes/class_editorimportplugin.rst

@@ -128,6 +128,19 @@ Gets the unique name of the importer.
 
 - :ref:`bool<class_bool>` **get_option_visibility** **(** :ref:`String<class_String>` option, :ref:`Dictionary<class_Dictionary>` options **)** virtual
 
+This method can be overridden to hide specific import options if conditions are met. This is mainly useful for hiding options that depend on others if one of them is disabled. For example:
+
+::
+
+    func get_option_visibility(option, options):
+        # Only show the lossy quality setting if the compression mode is set to "Lossy".
+        if option == "compress/lossy_quality" and options.has("compress/mode"):
+            return int(options["compress/mode"]) == COMPRESS_LOSSY
+    
+        return true
+
+Return ``true`` to make all options always visible.
+
 ----
 
 .. _class_EditorImportPlugin_method_get_preset_count:
@@ -190,3 +203,7 @@ Gets the name to display in the import window.
 
 - :ref:`int<class_int>` **import** **(** :ref:`String<class_String>` source_file, :ref:`String<class_String>` save_path, :ref:`Dictionary<class_Dictionary>` options, :ref:`Array<class_Array>` platform_variants, :ref:`Array<class_Array>` gen_files **)** virtual
 
+Imports ``source_file`` into ``save_path`` with the import ``options`` specified. The ``platform_variants`` and ``gen_files`` arrays will be modified by this function.
+
+This method must be overridden to do the actual importing work. See this class' description for an example of overriding this method.
+

+ 20 - 0
classes/class_editorinspector.rst

@@ -41,42 +41,58 @@ Signals
 
 - **object_id_selected** **(** :ref:`int<class_int>` id **)**
 
+Emitted when the Edit button of an :ref:`Object<class_Object>` has been pressed in the inspector. This is mainly used in the remote scene tree inspector.
+
 ----
 
 .. _class_EditorInspector_signal_property_edited:
 
 - **property_edited** **(** :ref:`String<class_String>` property **)**
 
+Emitted when a property is edited in the inspector.
+
 ----
 
 .. _class_EditorInspector_signal_property_keyed:
 
 - **property_keyed** **(** :ref:`String<class_String>` property **)**
 
+Emitted when a property is keyed in the inspector. Properties can be keyed by clicking the "key" icon next to a property when the Animation panel is toggled.
+
 ----
 
 .. _class_EditorInspector_signal_property_selected:
 
 - **property_selected** **(** :ref:`String<class_String>` property **)**
 
+Emitted when a property is selected in the inspector.
+
 ----
 
 .. _class_EditorInspector_signal_property_toggled:
 
 - **property_toggled** **(** :ref:`String<class_String>` property, :ref:`bool<class_bool>` checked **)**
 
+Emitted when a boolean property is toggled in the inspector.
+
+**Note:** This signal is never emitted if the internal ``autoclear`` property enabled. Since this property is always enabled in the editor inspector, this signal is never emitted by the editor itself.
+
 ----
 
 .. _class_EditorInspector_signal_resource_selected:
 
 - **resource_selected** **(** :ref:`Object<class_Object>` res, :ref:`String<class_String>` prop **)**
 
+Emitted when a resource is selected in the inspector.
+
 ----
 
 .. _class_EditorInspector_signal_restart_requested:
 
 - **restart_requested** **(** **)**
 
+Emitted when a property that requires a restart to be applied is edited in the inspector. This is only used in the Project Settings and Editor Settings.
+
 Method Descriptions
 -------------------
 
@@ -84,3 +100,7 @@ Method Descriptions
 
 - void **refresh** **(** **)**
 
+Refreshes the inspector.
+
+**Note:** To save on CPU resources, calling this method will do nothing if the time specified in ``docks/property_editor/auto_refresh_interval`` editor setting hasn't passed yet since this method was last called. (By default, this interval is set to 0.3 seconds.)
+

+ 81 - 9
classes/class_editorinterface.rst

@@ -49,6 +49,8 @@ Methods
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Array<class_Array>`                                 | :ref:`get_open_scenes<class_EditorInterface_method_get_open_scenes>` **(** **)** const                                                                         |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                               | :ref:`get_playing_scene<class_EditorInterface_method_get_playing_scene>` **(** **)** const                                                                     |
++-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`EditorFileSystem<class_EditorFileSystem>`           | :ref:`get_resource_filesystem<class_EditorInterface_method_get_resource_filesystem>` **(** **)**                                                               |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`EditorResourcePreview<class_EditorResourcePreview>` | :ref:`get_resource_previewer<class_EditorInterface_method_get_resource_previewer>` **(** **)**                                                                 |
@@ -61,12 +63,20 @@ Methods
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`inspect_object<class_EditorInterface_method_inspect_object>` **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` for_property="" **)** |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                                   | :ref:`is_playing_scene<class_EditorInterface_method_is_playing_scene>` **(** **)** const                                                                       |
++-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                                   | :ref:`is_plugin_enabled<class_EditorInterface_method_is_plugin_enabled>` **(** :ref:`String<class_String>` plugin **)** const                                  |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Array<class_Array>`                                 | :ref:`make_mesh_previews<class_EditorInterface_method_make_mesh_previews>` **(** :ref:`Array<class_Array>` meshes, :ref:`int<class_int>` preview_size **)**    |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`open_scene_from_path<class_EditorInterface_method_open_scene_from_path>` **(** :ref:`String<class_String>` scene_filepath **)**                          |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                      | :ref:`play_current_scene<class_EditorInterface_method_play_current_scene>` **(** **)**                                                                         |
++-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                      | :ref:`play_custom_scene<class_EditorInterface_method_play_custom_scene>` **(** :ref:`String<class_String>` scene_filepath **)**                                |
++-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                      | :ref:`play_main_scene<class_EditorInterface_method_play_main_scene>` **(** **)**                                                                               |
++-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`reload_scene_from_path<class_EditorInterface_method_reload_scene_from_path>` **(** :ref:`String<class_String>` scene_filepath **)**                      |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Error<enum_@GlobalScope_Error>`                     | :ref:`save_scene<class_EditorInterface_method_save_scene>` **(** **)**                                                                                         |
@@ -79,6 +89,8 @@ Methods
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`set_plugin_enabled<class_EditorInterface_method_set_plugin_enabled>` **(** :ref:`String<class_String>` plugin, :ref:`bool<class_bool>` enabled **)**     |
 +-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                      | :ref:`stop_playing_scene<class_EditorInterface_method_stop_playing_scene>` **(** **)**                                                                         |
++-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 Property Descriptions
 ---------------------
@@ -110,7 +122,7 @@ Edits the given :ref:`Resource<class_Resource>`.
 
 - :ref:`Control<class_Control>` **get_base_control** **(** **)**
 
-Returns the main container of Godot editor's window. You can use it, for example, to retrieve the size of the container and place your controls accordingly.
+Returns the main container of Godot editor's window. For example, you can use it to retrieve the size of the container and place your controls accordingly.
 
 ----
 
@@ -118,6 +130,8 @@ Returns the main container of Godot editor's window. You can use it, for example
 
 - :ref:`String<class_String>` **get_current_path** **(** **)** const
 
+Returns the current path being viewed in the :ref:`FileSystemDock<class_FileSystemDock>`.
+
 ----
 
 .. _class_EditorInterface_method_get_edited_scene_root:
@@ -132,7 +146,7 @@ Returns the edited (current) scene's root :ref:`Node<class_Node>`.
 
 - :ref:`EditorSettings<class_EditorSettings>` **get_editor_settings** **(** **)**
 
-Returns the :ref:`EditorSettings<class_EditorSettings>`.
+Returns the editor's :ref:`EditorSettings<class_EditorSettings>` instance.
 
 ----
 
@@ -140,7 +154,9 @@ Returns the :ref:`EditorSettings<class_EditorSettings>`.
 
 - :ref:`Control<class_Control>` **get_editor_viewport** **(** **)**
 
-Returns the editor :ref:`Viewport<class_Viewport>`.
+Returns the main editor control. Use this as a parent for main screens.
+
+**Note:** This returns the main editor control containing the whole editor, not the 2D or 3D viewports specifically.
 
 ----
 
@@ -148,12 +164,16 @@ Returns the editor :ref:`Viewport<class_Viewport>`.
 
 - :ref:`FileSystemDock<class_FileSystemDock>` **get_file_system_dock** **(** **)**
 
+Returns the editor's :ref:`FileSystemDock<class_FileSystemDock>` instance.
+
 ----
 
 .. _class_EditorInterface_method_get_inspector:
 
 - :ref:`EditorInspector<class_EditorInspector>` **get_inspector** **(** **)** const
 
+Returns the editor's :ref:`EditorInspector<class_EditorInspector>` instance.
+
 ----
 
 .. _class_EditorInterface_method_get_open_scenes:
@@ -164,11 +184,19 @@ Returns an :ref:`Array<class_Array>` with the file paths of the currently opened
 
 ----
 
+.. _class_EditorInterface_method_get_playing_scene:
+
+- :ref:`String<class_String>` **get_playing_scene** **(** **)** const
+
+Returns the name of the scene that is being played. If no scene is currently being played, returns an empty string.
+
+----
+
 .. _class_EditorInterface_method_get_resource_filesystem:
 
 - :ref:`EditorFileSystem<class_EditorFileSystem>` **get_resource_filesystem** **(** **)**
 
-Returns the :ref:`EditorFileSystem<class_EditorFileSystem>`.
+Returns the editor's :ref:`EditorFileSystem<class_EditorFileSystem>` instance.
 
 ----
 
@@ -176,7 +204,7 @@ Returns the :ref:`EditorFileSystem<class_EditorFileSystem>`.
 
 - :ref:`EditorResourcePreview<class_EditorResourcePreview>` **get_resource_previewer** **(** **)**
 
-Returns the :ref:`EditorResourcePreview<class_EditorResourcePreview>`.
+Returns the editor's :ref:`EditorResourcePreview<class_EditorResourcePreview>` instance.
 
 ----
 
@@ -184,7 +212,7 @@ Returns the :ref:`EditorResourcePreview<class_EditorResourcePreview>`.
 
 - :ref:`ScriptEditor<class_ScriptEditor>` **get_script_editor** **(** **)**
 
-Returns the :ref:`ScriptEditor<class_ScriptEditor>`.
+Returns the editor's :ref:`ScriptEditor<class_ScriptEditor>` instance.
 
 ----
 
@@ -192,13 +220,15 @@ Returns the :ref:`ScriptEditor<class_ScriptEditor>`.
 
 - :ref:`String<class_String>` **get_selected_path** **(** **)** const
 
+Returns the path of the directory currently selected in the :ref:`FileSystemDock<class_FileSystemDock>`. If a file is selected, its base directory will be returned using :ref:`String.get_base_dir<class_String_method_get_base_dir>` instead.
+
 ----
 
 .. _class_EditorInterface_method_get_selection:
 
 - :ref:`EditorSelection<class_EditorSelection>` **get_selection** **(** **)**
 
-Returns the :ref:`EditorSelection<class_EditorSelection>`.
+Returns the editor's :ref:`EditorSelection<class_EditorSelection>` instance.
 
 ----
 
@@ -206,7 +236,15 @@ Returns the :ref:`EditorSelection<class_EditorSelection>`.
 
 - void **inspect_object** **(** :ref:`Object<class_Object>` object, :ref:`String<class_String>` for_property="" **)**
 
-Shows the given property on the given ``object`` in the Editor's Inspector dock.
+Shows the given property on the given ``object`` in the editor's Inspector dock.
+
+----
+
+.. _class_EditorInterface_method_is_playing_scene:
+
+- :ref:`bool<class_bool>` **is_playing_scene** **(** **)** const
+
+Returns ``true`` if a scene is currently being played, ``false`` otherwise. Paused scenes are considered as being played.
 
 ----
 
@@ -214,7 +252,7 @@ Shows the given property on the given ``object`` in the Editor's Inspector dock.
 
 - :ref:`bool<class_bool>` **is_plugin_enabled** **(** :ref:`String<class_String>` plugin **)** const
 
-Returns the enabled status of a plugin. The plugin name is the same as its directory name.
+Returns ``true`` if the specified ``plugin`` is enabled. The plugin name is the same as its directory name.
 
 ----
 
@@ -234,6 +272,30 @@ Opens the scene at the given path.
 
 ----
 
+.. _class_EditorInterface_method_play_current_scene:
+
+- void **play_current_scene** **(** **)**
+
+Plays the currently active scene.
+
+----
+
+.. _class_EditorInterface_method_play_custom_scene:
+
+- void **play_custom_scene** **(** :ref:`String<class_String>` scene_filepath **)**
+
+Plays the scene specified by its filepath.
+
+----
+
+.. _class_EditorInterface_method_play_main_scene:
+
+- void **play_main_scene** **(** **)**
+
+Plays the main scene.
+
+----
+
 .. _class_EditorInterface_method_reload_scene_from_path:
 
 - void **reload_scene_from_path** **(** :ref:`String<class_String>` scene_filepath **)**
@@ -270,6 +332,8 @@ Selects the file, with the path provided by ``file``, in the FileSystem dock.
 
 - void **set_main_screen_editor** **(** :ref:`String<class_String>` name **)**
 
+Sets the editor's current main screen to the one specified in ``name``. ``name`` must match the text of the tab in question exactly (``2D``, ``3D``, ``Script``, ``AssetLib``).
+
 ----
 
 .. _class_EditorInterface_method_set_plugin_enabled:
@@ -278,3 +342,11 @@ Selects the file, with the path provided by ``file``, in the FileSystem dock.
 
 Sets the enabled status of a plugin. The plugin name is the same as its directory name.
 
+----
+
+.. _class_EditorInterface_method_stop_playing_scene:
+
+- void **stop_playing_scene** **(** **)**
+
+Stops the scene that is currently playing.
+

+ 6 - 6
classes/class_editorproperty.rst

@@ -134,7 +134,7 @@ Property Descriptions
 | *Getter*  | is_checkable()       |
 +-----------+----------------------+
 
-Used by the inspector, set when property is checkable.
+Used by the inspector, set to ``true`` when the property is checkable.
 
 ----
 
@@ -150,7 +150,7 @@ Used by the inspector, set when property is checkable.
 | *Getter*  | is_checked()       |
 +-----------+--------------------+
 
-Used by the inspector, when the property is checked.
+Used by the inspector, set to ``true`` when the property is checked.
 
 ----
 
@@ -166,7 +166,7 @@ Used by the inspector, when the property is checked.
 | *Getter*  | is_draw_red()       |
 +-----------+---------------------+
 
-Used by the inspector, when the property must draw with error color.
+Used by the inspector, set to ``true`` when the property must draw with error color. This is used for editable children's properties.
 
 ----
 
@@ -182,7 +182,7 @@ Used by the inspector, when the property must draw with error color.
 | *Getter*  | is_keying()       |
 +-----------+-------------------+
 
-Used by the inspector, when the property can add keys for animation.
+Used by the inspector, set to ``true`` when the property can add keys for animation.
 
 ----
 
@@ -198,7 +198,7 @@ Used by the inspector, when the property can add keys for animation.
 | *Getter*  | get_label()      |
 +-----------+------------------+
 
-Sets this property to change the label (if you want to show one).
+Set this property to change the label (if you want to show one).
 
 ----
 
@@ -214,7 +214,7 @@ Sets this property to change the label (if you want to show one).
 | *Getter*  | is_read_only()       |
 +-----------+----------------------+
 
-Used by the inspector, when the property is read-only.
+Used by the inspector, set to ``true`` when the property is read-only.
 
 Method Descriptions
 -------------------

+ 32 - 10
classes/class_editorsettings.rst

@@ -18,13 +18,19 @@ Description
 
 Object that holds the project-independent editor settings. These settings are generally visible in the **Editor > Editor Settings** menu.
 
-Accessing the settings is done by using the regular :ref:`Object<class_Object>` API, such as:
+Property names use slash delimiters to distinguish sections. Setting values can be of any :ref:`Variant<class_Variant>` type. It's recommended to use ``snake_case`` for editor settings to be consistent with the Godot editor itself.
+
+Accessing the settings can be done using the following methods, such as:
 
 ::
 
-    settings.set(prop,value)
-    settings.get(prop)
-    list_of_settings = settings.get_property_list()
+    # `settings.set("some/property", value)` also works as this class overrides `_set()` internally.
+    settings.set_setting("some/property",value)
+    
+    # `settings.get("some/property", value)` also works as this class overrides `_get()` internally.
+    settings.get_setting("some/property")
+    
+    var list_of_settings = settings.get_property_list()
 
 **Note:** This class shouldn't be instantiated directly. Instead, access the singleton using :ref:`EditorInterface.get_editor_settings<class_EditorInterface_method_get_editor_settings>`.
 
@@ -72,14 +78,14 @@ Signals
 
 - **settings_changed** **(** **)**
 
-Emitted when editor settings change.
+Emitted after any editor setting has changed.
 
 Constants
 ---------
 
 .. _class_EditorSettings_constant_NOTIFICATION_EDITOR_SETTINGS_CHANGED:
 
-- **NOTIFICATION_EDITOR_SETTINGS_CHANGED** = **10000** --- Emitted when editor settings change. It used by various editor plugins to update their visuals on theme changes or logic on configuration changes.
+- **NOTIFICATION_EDITOR_SETTINGS_CHANGED** = **10000** --- Emitted after any editor setting has changed. It's used by various editor plugins to update their visuals on theme changes or logic on configuration changes.
 
 Method Descriptions
 -------------------
@@ -117,7 +123,7 @@ Adds a custom property info to a property. The dictionary must contain:
 
 - void **erase** **(** :ref:`String<class_String>` property **)**
 
-Erase a given setting (pass full property path).
+Erases the setting whose name is specified by ``property``.
 
 ----
 
@@ -125,7 +131,7 @@ Erase a given setting (pass full property path).
 
 - :ref:`PoolStringArray<class_PoolStringArray>` **get_favorites** **(** **)** const
 
-Gets the list of favorite files and directories for this project.
+Returns the list of favorite files and directories for this project.
 
 ----
 
@@ -133,13 +139,15 @@ Gets the list of favorite files and directories for this project.
 
 - :ref:`Variant<class_Variant>` **get_project_metadata** **(** :ref:`String<class_String>` section, :ref:`String<class_String>` key, :ref:`Variant<class_Variant>` default=null **)** const
 
+Returns project-specific metadata for the ``section`` and ``key`` specified. If the metadata doesn't exist, ``default`` will be returned instead. See also :ref:`set_project_metadata<class_EditorSettings_method_set_project_metadata>`.
+
 ----
 
 .. _class_EditorSettings_method_get_project_settings_dir:
 
 - :ref:`String<class_String>` **get_project_settings_dir** **(** **)** const
 
-Gets the specific project settings path. Projects all have a unique sub-directory inside the settings path where project specific settings are saved.
+Returns the project-specific settings path. Projects all have a unique subdirectory inside the settings path where project-specific settings are saved.
 
 ----
 
@@ -147,7 +155,7 @@ Gets the specific project settings path. Projects all have a unique sub-director
 
 - :ref:`PoolStringArray<class_PoolStringArray>` **get_recent_dirs** **(** **)** const
 
-Gets the list of recently visited folders in the file dialog for this project.
+Returns the list of recently visited folders in the file dialog for this project.
 
 ----
 
@@ -155,6 +163,8 @@ Gets the list of recently visited folders in the file dialog for this project.
 
 - :ref:`Variant<class_Variant>` **get_setting** **(** :ref:`String<class_String>` name **)** const
 
+Returns the value of the setting specified by ``name``. This is equivalent to using :ref:`Object.get<class_Object_method_get>` on the EditorSettings instance.
+
 ----
 
 .. _class_EditorSettings_method_get_settings_dir:
@@ -173,18 +183,24 @@ Gets the global settings path for the engine. Inside this path, you can find som
 
 - :ref:`bool<class_bool>` **has_setting** **(** :ref:`String<class_String>` name **)** const
 
+Returns ``true`` if the setting specified by ``name`` exists, ``false`` otherwise.
+
 ----
 
 .. _class_EditorSettings_method_property_can_revert:
 
 - :ref:`bool<class_bool>` **property_can_revert** **(** :ref:`String<class_String>` name **)**
 
+Returns ``true`` if the setting specified by ``name`` can have its value reverted to the default value, ``false`` otherwise. When this method returns ``true``, a Revert button will display next to the setting in the Editor Settings.
+
 ----
 
 .. _class_EditorSettings_method_property_get_revert:
 
 - :ref:`Variant<class_Variant>` **property_get_revert** **(** :ref:`String<class_String>` name **)**
 
+Returns the default value of the setting specified by ``name``. This is the value that would be applied when clicking the Revert button in the Editor Settings.
+
 ----
 
 .. _class_EditorSettings_method_set_favorites:
@@ -199,12 +215,16 @@ Sets the list of favorite files and directories for this project.
 
 - void **set_initial_value** **(** :ref:`String<class_String>` name, :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` update_current **)**
 
+Sets the initial value of the setting specified by ``name`` to ``value``. This is used to provide a value for the Revert button in the Editor Settings. If ``update_current`` is true, the current value of the setting will be set to ``value`` as well.
+
 ----
 
 .. _class_EditorSettings_method_set_project_metadata:
 
 - void **set_project_metadata** **(** :ref:`String<class_String>` section, :ref:`String<class_String>` key, :ref:`Variant<class_Variant>` data **)**
 
+Sets project-specific metadata with the ``section``, ``key`` and ``data`` specified. This metadata is stored outside the project folder and therefore won't be checked into version control. See also :ref:`get_project_metadata<class_EditorSettings_method_get_project_metadata>`.
+
 ----
 
 .. _class_EditorSettings_method_set_recent_dirs:
@@ -219,3 +239,5 @@ Sets the list of recently visited folders in the file dialog for this project.
 
 - void **set_setting** **(** :ref:`String<class_String>` name, :ref:`Variant<class_Variant>` value **)**
 
+Sets the ``value`` of the setting specified by ``name``. This is equivalent to using :ref:`Object.set<class_Object_method_set>` on the EditorSettings instance.
+

+ 12 - 2
classes/class_editorspatialgizmo.rst

@@ -64,6 +64,8 @@ Method Descriptions
 
 - void **add_collision_segments** **(** :ref:`PoolVector3Array<class_PoolVector3Array>` segments **)**
 
+Adds the specified ``segments`` to the gizmo's collision shape for picking. Call this function during :ref:`redraw<class_EditorSpatialGizmo_method_redraw>`.
+
 ----
 
 .. _class_EditorSpatialGizmo_method_add_collision_triangles:
@@ -96,6 +98,8 @@ Adds lines to the gizmo (as sets of 2 points), with a given material. The lines
 
 - void **add_mesh** **(** :ref:`ArrayMesh<class_ArrayMesh>` mesh, :ref:`bool<class_bool>` billboard=false, :ref:`SkinReference<class_SkinReference>` skeleton=null, :ref:`Material<class_Material>` material=null **)**
 
+Adds a mesh to the gizmo with the specified ``billboard`` state, ``skeleton`` and ``material``. If ``billboard`` is ``true``, the mesh will rotate to always face the camera. Call this function during :ref:`redraw<class_EditorSpatialGizmo_method_redraw>`.
+
 ----
 
 .. _class_EditorSpatialGizmo_method_add_unscaled_billboard:
@@ -110,6 +114,8 @@ Adds an unscaled billboard for visualization. Call this function during :ref:`re
 
 - void **clear** **(** **)**
 
+Removes everything in the gizmo including meshes, collisions and handles.
+
 ----
 
 .. _class_EditorSpatialGizmo_method_commit_handle:
@@ -160,7 +166,7 @@ Returns the Spatial node associated with this gizmo.
 
 - :ref:`bool<class_bool>` **is_handle_highlighted** **(** :ref:`int<class_int>` index **)** virtual
 
-Gets whether a handle is highlighted or not.
+Returns ``true`` if the handle at index ``index`` is highlighted by being hovered with the mouse.
 
 ----
 
@@ -168,7 +174,7 @@ Gets whether a handle is highlighted or not.
 
 - void **redraw** **(** **)** virtual
 
-This function is called when the Spatial this gizmo refers to changes (the :ref:`Spatial.update_gizmo<class_Spatial_method_update_gizmo>` is called).
+This function is called when the :ref:`Spatial<class_Spatial>` this gizmo refers to changes (the :ref:`Spatial.update_gizmo<class_Spatial_method_update_gizmo>` is called).
 
 ----
 
@@ -186,9 +192,13 @@ The :ref:`Camera<class_Camera>` is also provided so screen coordinates can be co
 
 - void **set_hidden** **(** :ref:`bool<class_bool>` hidden **)**
 
+Sets the gizmo's hidden state. If ``true``, the gizmo will be hidden. If ``false``, it will be shown.
+
 ----
 
 .. _class_EditorSpatialGizmo_method_set_spatial_node:
 
 - void **set_spatial_node** **(** :ref:`Node<class_Node>` node **)**
 
+Sets the reference :ref:`Spatial<class_Spatial>` node for the gizmo. ``node`` must inherit from :ref:`Spatial<class_Spatial>`.
+

+ 4 - 0
classes/class_editorspatialgizmoplugin.rst

@@ -157,6 +157,10 @@ Override this method to provide the name that will appear in the gizmo visibilit
 
 - :ref:`String<class_String>` **get_priority** **(** **)** virtual
 
+Override this method to set the gizmo's priority. Higher values correspond to higher priority. If a gizmo with higher priority conflicts with another gizmo, only the gizmo with higher priority will be used.
+
+All built-in editor gizmos return a priority of ``-1``. If not overridden, this method will return ``0``, which means custom gizmos will automatically override built-in gizmos.
+
 ----
 
 .. _class_EditorSpatialGizmoPlugin_method_has_gizmo:

+ 2 - 0
classes/class_file.rst

@@ -35,6 +35,8 @@ Here's a sample on how to write and read from a file:
         file.close()
         return content
 
+In the example above, the file will be saved in the user data folder as specified in the `Data paths <https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html>`_ documentation.
+
 Tutorials
 ---------
 

+ 2 - 0
classes/class_font.rst

@@ -56,6 +56,8 @@ Method Descriptions
 
 Draw ``string`` into a canvas item using the font at a given position, with ``modulate`` color, and optionally clipping the width. ``position`` specifies the baseline, not the top. To draw from the top, *ascent* must be added to the Y axis.
 
+See also :ref:`CanvasItem.draw_string<class_CanvasItem_method_draw_string>`.
+
 ----
 
 .. _class_Font_method_draw_char:

+ 2 - 0
classes/class_httpclient.rst

@@ -24,6 +24,8 @@ A ``HTTPClient`` should be reused between multiple requests or to connect to dif
 
 For more information on HTTP, see https://developer.mozilla.org/en-US/docs/Web/HTTP (or read RFC 2616 to get it straight from the source: https://tools.ietf.org/html/rfc2616).
 
+**Note:** When performing HTTP requests from a project exported to HTML5, keep in mind the remote server may not allow requests from foreign origins due to `CORS <https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS>`_. If you host the server in question, you should modify its backend to allow requests from foreign origins by adding the ``Access-Control-Allow-Origin: *`` HTTP header.
+
 Tutorials
 ---------
 

+ 11 - 1
classes/class_httprequest.rst

@@ -30,11 +30,19 @@ Can be used to make HTTP requests, i.e. download or upload files or web content
         add_child(http_request)
         http_request.connect("request_completed", self, "_http_request_completed")
     
-        # Perform the HTTP request. The URL below returns some JSON as of writing.
+        # Perform a GET request. The URL below returns JSON as of writing.
         var error = http_request.request("https://httpbin.org/get")
         if error != OK:
             push_error("An error occurred in the HTTP request.")
     
+        # Perform a POST request. The URL below returns JSON as of writing.
+        # Note: Don't make simultaneous requests using a single HTTPRequest node.
+        # The snippet below is provided for reference only.
+        var body = {"name": "Godette"}
+        var error = http_request.request("https://httpbin.org/post", [], true, HTTPClient.METHOD_POST, body)
+        if error != OK:
+            push_error("An error occurred in the HTTP request.")
+    
     
     # Called when the HTTP request is completed.
     func _http_request_completed(result, response_code, headers, body):
@@ -74,6 +82,8 @@ Can be used to make HTTP requests, i.e. download or upload files or web content
         add_child(texture_rect)
         texture_rect.texture = texture
 
+**Note:** When performing HTTP requests from a project exported to HTML5, keep in mind the remote server may not allow requests from foreign origins due to `CORS <https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS>`_. If you host the server in question, you should modify its backend to allow requests from foreign origins by adding the ``Access-Control-Allow-Origin: *`` HTTP header.
+
 Tutorials
 ---------
 

+ 3 - 1
classes/class_inputeventmousemotion.rst

@@ -18,6 +18,8 @@ Description
 
 Contains mouse and pen motion information. Supports relative, absolute positions and speed. See :ref:`Node._input<class_Node_method__input>`.
 
+**Note:** By default, this event is only emitted once per frame rendered at most. If you need more precise input reporting, call :ref:`Input.set_use_accumulated_input<class_Input_method_set_use_accumulated_input>` with ``false`` to make events emitted as often as possible. If you use InputEventMouseMotion to draw lines, consider implementing `Bresenham's line algorithm <https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm>`_ as well to avoid visible gaps in lines if the user is moving the mouse quickly.
+
 Tutorials
 ---------
 
@@ -67,7 +69,7 @@ Represents the pressure the user puts on the pen. Ranges from ``0.0`` to ``1.0``
 | *Getter*  | get_relative()      |
 +-----------+---------------------+
 
-The mouse position relative to the previous position (position at the last frame). 
+The mouse position relative to the previous position (position at the last frame).
 
 **Note:** Since ``InputEventMouseMotion`` is only emitted when the mouse moves, the last event won't have a relative position of ``Vector2(0, 0)`` when the user stops moving the mouse.
 

+ 1 - 1
classes/class_kinematicbody.rst

@@ -221,7 +221,7 @@ Moves the body along a vector. If the body collides with another, it will slide
 
 This method should be used in :ref:`Node._physics_process<class_Node_method__physics_process>` (or in a method called by :ref:`Node._physics_process<class_Node_method__physics_process>`), as it uses the physics step's ``delta`` value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
 
-``linear_velocity`` is the velocity vector (typically meters per second). Unlike in :ref:`move_and_collide<class_KinematicBody_method_move_and_collide>`, you should *not* multiply it by ``delta`` — the physics engine handles applying the velocity. 
+``linear_velocity`` is the velocity vector (typically meters per second). Unlike in :ref:`move_and_collide<class_KinematicBody_method_move_and_collide>`, you should *not* multiply it by ``delta`` — the physics engine handles applying the velocity.
 
 ``up_direction`` is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of ``Vector3(0, 0, 0)``, everything is considered a wall.
 

+ 1 - 1
classes/class_kinematicbody2d.rst

@@ -183,7 +183,7 @@ Moves the body along a vector. If the body collides with another, it will slide
 
 This method should be used in :ref:`Node._physics_process<class_Node_method__physics_process>` (or in a method called by :ref:`Node._physics_process<class_Node_method__physics_process>`), as it uses the physics step's ``delta`` value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
 
-``linear_velocity`` is the velocity vector in pixels per second. Unlike in :ref:`move_and_collide<class_KinematicBody2D_method_move_and_collide>`, you should *not* multiply it by ``delta`` — the physics engine handles applying the velocity. 
+``linear_velocity`` is the velocity vector in pixels per second. Unlike in :ref:`move_and_collide<class_KinematicBody2D_method_move_and_collide>`, you should *not* multiply it by ``delta`` — the physics engine handles applying the velocity.
 
 ``up_direction`` is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of ``Vector2(0, 0)``, everything is considered a wall. This is useful for topdown games.
 

+ 57 - 39
classes/class_lineedit.rst

@@ -59,45 +59,47 @@ On macOS, some extra keyboard shortcuts are available:
 Properties
 ----------
 
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`Align<enum_LineEdit_Align>`            | :ref:`align<class_LineEdit_property_align>`                                 | ``0``                     |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`caret_blink<class_LineEdit_property_caret_blink>`                     | ``false``                 |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`float<class_float>`                    | :ref:`caret_blink_speed<class_LineEdit_property_caret_blink_speed>`         | ``0.65``                  |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`int<class_int>`                        | :ref:`caret_position<class_LineEdit_property_caret_position>`               | ``0``                     |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`clear_button_enabled<class_LineEdit_property_clear_button_enabled>`   | ``false``                 |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`context_menu_enabled<class_LineEdit_property_context_menu_enabled>`   | ``true``                  |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`editable<class_LineEdit_property_editable>`                           | ``true``                  |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`expand_to_text_length<class_LineEdit_property_expand_to_text_length>` | ``false``                 |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`FocusMode<enum_Control_FocusMode>`     | focus_mode                                                                  | ``2`` *(parent override)* |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`int<class_int>`                        | :ref:`max_length<class_LineEdit_property_max_length>`                       | ``0``                     |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`CursorShape<enum_Control_CursorShape>` | mouse_default_cursor_shape                                                  | ``1`` *(parent override)* |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`float<class_float>`                    | :ref:`placeholder_alpha<class_LineEdit_property_placeholder_alpha>`         | ``0.6``                   |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`String<class_String>`                  | :ref:`placeholder_text<class_LineEdit_property_placeholder_text>`           | ``""``                    |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`Texture<class_Texture>`                | :ref:`right_icon<class_LineEdit_property_right_icon>`                       |                           |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`secret<class_LineEdit_property_secret>`                               | ``false``                 |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`String<class_String>`                  | :ref:`secret_character<class_LineEdit_property_secret_character>`           | ``"*"``                   |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`selecting_enabled<class_LineEdit_property_selecting_enabled>`         | ``true``                  |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`bool<class_bool>`                      | :ref:`shortcut_keys_enabled<class_LineEdit_property_shortcut_keys_enabled>` | ``true``                  |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
-| :ref:`String<class_String>`                  | :ref:`text<class_LineEdit_property_text>`                                   | ``""``                    |
-+----------------------------------------------+-----------------------------------------------------------------------------+---------------------------+
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`Align<enum_LineEdit_Align>`            | :ref:`align<class_LineEdit_property_align>`                                       | ``0``                     |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`caret_blink<class_LineEdit_property_caret_blink>`                           | ``false``                 |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`float<class_float>`                    | :ref:`caret_blink_speed<class_LineEdit_property_caret_blink_speed>`               | ``0.65``                  |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`int<class_int>`                        | :ref:`caret_position<class_LineEdit_property_caret_position>`                     | ``0``                     |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`clear_button_enabled<class_LineEdit_property_clear_button_enabled>`         | ``false``                 |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`context_menu_enabled<class_LineEdit_property_context_menu_enabled>`         | ``true``                  |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`editable<class_LineEdit_property_editable>`                                 | ``true``                  |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`expand_to_text_length<class_LineEdit_property_expand_to_text_length>`       | ``false``                 |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`FocusMode<enum_Control_FocusMode>`     | focus_mode                                                                        | ``2`` *(parent override)* |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`int<class_int>`                        | :ref:`max_length<class_LineEdit_property_max_length>`                             | ``0``                     |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`CursorShape<enum_Control_CursorShape>` | mouse_default_cursor_shape                                                        | ``1`` *(parent override)* |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`float<class_float>`                    | :ref:`placeholder_alpha<class_LineEdit_property_placeholder_alpha>`               | ``0.6``                   |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`String<class_String>`                  | :ref:`placeholder_text<class_LineEdit_property_placeholder_text>`                 | ``""``                    |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`Texture<class_Texture>`                | :ref:`right_icon<class_LineEdit_property_right_icon>`                             |                           |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`secret<class_LineEdit_property_secret>`                                     | ``false``                 |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`String<class_String>`                  | :ref:`secret_character<class_LineEdit_property_secret_character>`                 | ``"*"``                   |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`selecting_enabled<class_LineEdit_property_selecting_enabled>`               | ``true``                  |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`shortcut_keys_enabled<class_LineEdit_property_shortcut_keys_enabled>`       | ``true``                  |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`String<class_String>`                  | :ref:`text<class_LineEdit_property_text>`                                         | ``""``                    |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
+| :ref:`bool<class_bool>`                      | :ref:`virtual_keyboard_enabled<class_LineEdit_property_virtual_keyboard_enabled>` | ``true``                  |
++----------------------------------------------+-----------------------------------------------------------------------------------+---------------------------+
 
 Methods
 -------
@@ -514,6 +516,22 @@ String value of the ``LineEdit``.
 
 **Note:** Changing text using this property won't emit the :ref:`text_changed<class_LineEdit_signal_text_changed>` signal.
 
+----
+
+.. _class_LineEdit_property_virtual_keyboard_enabled:
+
+- :ref:`bool<class_bool>` **virtual_keyboard_enabled**
+
++-----------+-------------------------------------+
+| *Default* | ``true``                            |
++-----------+-------------------------------------+
+| *Setter*  | set_virtual_keyboard_enabled(value) |
++-----------+-------------------------------------+
+| *Getter*  | is_virtual_keyboard_enabled()       |
++-----------+-------------------------------------+
+
+If ``true``, the native virtual keyboard is shown when focused on platforms that support it.
+
 Method Descriptions
 -------------------
 

+ 2 - 2
classes/class_networkedmultiplayerenet.rst

@@ -133,7 +133,7 @@ Enforce ordered packets when using :ref:`NetworkedMultiplayerPeer.TRANSFER_MODE_
 | *Getter*  | get_channel_count()      |
 +-----------+--------------------------+
 
-The number of channels to be used by ENet. Channels are used to separate different kinds of data. In reliable or ordered mode, for example, the packet delivery order is ensured on a per channel basis.
+The number of channels to be used by ENet. Channels are used to separate different kinds of data. In reliable or ordered mode, for example, the packet delivery order is ensured on a per-channel basis. This is done to combat latency and reduces ordering restrictions on packets. The delivery status of a packet in one channel won't stall the delivery of other packets in another channel.
 
 ----
 
@@ -197,7 +197,7 @@ Enable or disable the server feature that notifies clients of other peers' conne
 | *Getter*  | get_transfer_channel()      |
 +-----------+-----------------------------+
 
-Set the default channel to be used to transfer data. By default, this value is ``-1`` which means that ENet will only use 2 channels, one for reliable and one for unreliable packets. Channel ``0`` is reserved, and cannot be used. Setting this member to any value between ``0`` and :ref:`channel_count<class_NetworkedMultiplayerENet_property_channel_count>` (excluded) will force ENet to use that channel for sending data.
+Set the default channel to be used to transfer data. By default, this value is ``-1`` which means that ENet will only use 2 channels: one for reliable packets, and one for unreliable packets. The channel ``0`` is reserved and cannot be used. Setting this member to any value between ``0`` and :ref:`channel_count<class_NetworkedMultiplayerENet_property_channel_count>` (excluded) will force ENet to use that channel for sending data. See :ref:`channel_count<class_NetworkedMultiplayerENet_property_channel_count>` for more information about ENet channels.
 
 ----
 

+ 1 - 1
classes/class_node.rst

@@ -720,7 +720,7 @@ If ``legible_unique_name`` is ``true``, the child node will have an human-readab
 
 - void **add_child_below_node** **(** :ref:`Node<class_Node>` node, :ref:`Node<class_Node>` child_node, :ref:`bool<class_bool>` legible_unique_name=false **)**
 
-Adds a child node. The child is placed below the given node in the list of children.
+Adds ``child_node`` as a child. The child is placed below the given ``node`` in the list of children.
 
 If ``legible_unique_name`` is ``true``, the child node will have an human-readable name based on the name of the node being instanced instead of its type.
 

+ 18 - 1
classes/class_object.rst

@@ -38,6 +38,13 @@ The ``in`` operator will evaluate to ``true`` as long as the key exists, even if
 
 Objects also receive notifications. Notifications are a simple way to notify the object about different events, so they can all be handled together. See :ref:`_notification<class_Object_method__notification>`.
 
+**Note:** Unlike references to a :ref:`Reference<class_Reference>`, references to an Object stored in a variable can become invalid without warning. Therefore, it's recommended to use :ref:`Reference<class_Reference>` for data classes instead of ``Object``.
+
+Tutorials
+---------
+
+- :doc:`../getting_started/workflow/best_practices/node_alternatives`
+
 Methods
 -------
 
@@ -167,7 +174,7 @@ enum **ConnectFlags**:
 
 - **CONNECT_ONESHOT** = **4** --- One-shot connections disconnect themselves after emission.
 
-- **CONNECT_REFERENCE_COUNTED** = **8** --- Connect a signal as reference counted. This means that a given signal can be connected several times to the same target, and will only be fully disconnected once no references are left.
+- **CONNECT_REFERENCE_COUNTED** = **8** --- Connect a signal as reference-counted. This means that a given signal can be connected several times to the same target, and will only be fully disconnected once no references are left.
 
 Constants
 ---------
@@ -259,6 +266,8 @@ Calls the ``method`` on the object and returns the result. This method supports
 
     call("set", "position", Vector2(42.0, 0.0))
 
+**Note:** In C#, the method name must be specified as snake_case if it is defined by a built-in Godot node. This doesn't apply to user-defined methods where you should use the same convention as in the C# source (typically PascalCase).
+
 ----
 
 .. _class_Object_method_call_deferred:
@@ -271,6 +280,8 @@ Calls the ``method`` on the object during idle time. This method supports a vari
 
     call_deferred("set", "position", Vector2(42.0, 0.0))
 
+**Note:** In C#, the method name must be specified as snake_case if it is defined by a built-in Godot node. This doesn't apply to user-defined methods where you should use the same convention as in the C# source (typically PascalCase).
+
 ----
 
 .. _class_Object_method_callv:
@@ -359,6 +370,8 @@ Deletes the object from memory. Any pre-existing reference to the freed object w
 
 Returns the :ref:`Variant<class_Variant>` value of the given ``property``. If the ``property`` doesn't exist, this will return ``null``.
 
+**Note:** In C#, the property name must be specified as snake_case if it is defined by a built-in Godot node. This doesn't apply to user-defined properties where you should use the same convention as in the C# source (typically PascalCase).
+
 ----
 
 .. _class_Object_method_get_class:
@@ -557,6 +570,8 @@ Removes a given entry from the object's metadata.
 
 Assigns a new value to the given property. If the ``property`` does not exist, nothing will happen.
 
+**Note:** In C#, the property name must be specified as snake_case if it is defined by a built-in Godot node. This doesn't apply to user-defined properties where you should use the same convention as in the C# source (typically PascalCase).
+
 ----
 
 .. _class_Object_method_set_block_signals:
@@ -573,6 +588,8 @@ If set to ``true``, signal emission is blocked.
 
 Assigns a new value to the given property, after the current frame's physics step. This is equivalent to calling :ref:`set<class_Object_method_set>` via :ref:`call_deferred<class_Object_method_call_deferred>`, i.e. ``call_deferred("set", property, value)``.
 
+**Note:** In C#, the property name must be specified as snake_case if it is defined by a built-in Godot node. This doesn't apply to user-defined properties where you should use the same convention as in the C# source (typically PascalCase).
+
 ----
 
 .. _class_Object_method_set_indexed:

+ 52 - 4
classes/class_os.rst

@@ -143,8 +143,12 @@ Methods
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                         | :ref:`get_screen_dpi<class_OS_method_get_screen_dpi>` **(** :ref:`int<class_int>` screen=-1 **)** const                                                                                                                                                                |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`float<class_float>`                     | :ref:`get_screen_max_scale<class_OS_method_get_screen_max_scale>` **(** **)** const                                                                                                                                                                                    |
++-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Vector2<class_Vector2>`                 | :ref:`get_screen_position<class_OS_method_get_screen_position>` **(** :ref:`int<class_int>` screen=-1 **)** const                                                                                                                                                      |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`float<class_float>`                     | :ref:`get_screen_scale<class_OS_method_get_screen_scale>` **(** :ref:`int<class_int>` screen=-1 **)** const                                                                                                                                                            |
++-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Vector2<class_Vector2>`                 | :ref:`get_screen_size<class_OS_method_get_screen_size>` **(** :ref:`int<class_int>` screen=-1 **)** const                                                                                                                                                              |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                         | :ref:`get_splash_tick_msec<class_OS_method_get_splash_tick_msec>` **(** **)** const                                                                                                                                                                                    |
@@ -277,7 +281,7 @@ Methods
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Error<enum_@GlobalScope_Error>`         | :ref:`shell_open<class_OS_method_shell_open>` **(** :ref:`String<class_String>` uri **)**                                                                                                                                                                              |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`show_virtual_keyboard<class_OS_method_show_virtual_keyboard>` **(** :ref:`String<class_String>` existing_text="" **)**                                                                                                                                           |
+| void                                          | :ref:`show_virtual_keyboard<class_OS_method_show_virtual_keyboard>` **(** :ref:`String<class_String>` existing_text="", :ref:`bool<class_bool>` multiline=false **)**                                                                                                  |
 +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 Enumerations
@@ -966,7 +970,23 @@ Returns the audio driver name for the given index.
 
 - :ref:`PoolStringArray<class_PoolStringArray>` **get_cmdline_args** **(** **)**
 
-Returns the command line arguments passed to the engine.
+Returns the command-line arguments passed to the engine.
+
+Command-line arguments can be written in any form, including both ``--key value`` and ``--key=value`` forms so they can be properly parsed, as long as custom command-line arguments do not conflict with engine arguments.
+
+You can also incorporate environment variables using the :ref:`get_environment<class_OS_method_get_environment>` method.
+
+You can set ``editor/main_run_args`` in the Project Settings to define command-line arguments to be passed by the editor when running the project.
+
+Here's a minimal example on how to parse command-line arguments into a dictionary using the ``--key=value`` form for arguments:
+
+::
+
+    var arguments = {}
+    for argument in OS.get_cmdline_args():
+        if argument.find("=") > -1:
+            var key_value = argument.split("=")
+            arguments[key_value[0].lstrip("--")] = key_value[1]
 
 ----
 
@@ -1207,6 +1227,18 @@ On Android devices, the actual screen densities are grouped into six generalized
 
 ----
 
+.. _class_OS_method_get_screen_max_scale:
+
+- :ref:`float<class_float>` **get_screen_max_scale** **(** **)** const
+
+Return the greatest scale factor of all screens.
+
+**Note:** On macOS returned value is ``2.0`` if there is at least one hiDPI (Retina) screen in the system, and ``1.0`` in all other cases.
+
+**Note:** This method is implemented on macOS.
+
+----
+
 .. _class_OS_method_get_screen_position:
 
 - :ref:`Vector2<class_Vector2>` **get_screen_position** **(** :ref:`int<class_int>` screen=-1 **)** const
@@ -1215,6 +1247,18 @@ Returns the position of the specified screen by index. If ``screen`` is ``-1`` (
 
 ----
 
+.. _class_OS_method_get_screen_scale:
+
+- :ref:`float<class_float>` **get_screen_scale** **(** :ref:`int<class_int>` screen=-1 **)** const
+
+Return the scale factor of the specified screen by index. If ``screen`` is ``-1`` (the default value), the current screen will be used.
+
+**Note:** On macOS returned value is ``2.0`` for hiDPI (Retina) screen, and ``1.0`` for all other cases.
+
+**Note:** This method is implemented on macOS.
+
+----
+
 .. _class_OS_method_get_screen_size:
 
 - :ref:`Vector2<class_Vector2>` **get_screen_size** **(** :ref:`int<class_int>` screen=-1 **)** const
@@ -1847,9 +1891,13 @@ Use :ref:`ProjectSettings.globalize_path<class_ProjectSettings_method_globalize_
 
 .. _class_OS_method_show_virtual_keyboard:
 
-- void **show_virtual_keyboard** **(** :ref:`String<class_String>` existing_text="" **)**
+- void **show_virtual_keyboard** **(** :ref:`String<class_String>` existing_text="", :ref:`bool<class_bool>` multiline=false **)**
+
+Shows the virtual keyboard if the platform has one.
+
+The ``existing_text`` parameter is useful for implementing your own :ref:`LineEdit<class_LineEdit>` or :ref:`TextEdit<class_TextEdit>`, as it tells the virtual keyboard what text has already been typed (the virtual keyboard uses it for auto-correct and predictions).
 
-Shows the virtual keyboard if the platform has one. The ``existing_text`` parameter is useful for implementing your own LineEdit, as it tells the virtual keyboard what text has already been typed (the virtual keyboard uses it for auto-correct and predictions).
+The ``multiline`` parameter needs to be set to ``true`` to be able to enter multiple lines of text, as in :ref:`TextEdit<class_TextEdit>`.
 
 **Note:** This method is implemented on Android, iOS and UWP.
 

+ 9 - 0
classes/class_packedscene.rst

@@ -22,6 +22,15 @@ Can be used to save a node to a file. When saving, the node as well as all the n
 
 **Note:** The node doesn't need to own itself.
 
+**Example of loading a saved scene:**
+
+::
+
+    # Use `load()` instead of `preload()` if the path isn't known at compile-time.
+    var scene = preload("res://scene.tscn").instance()
+    # Add the node as a child of the node the script is attached to.
+    add_child(scene)
+
 **Example of saving a node with different owners:** The following example creates 3 objects: ``Node2D`` (``node``), ``RigidBody2D`` (``rigid``) and ``CollisionObject2D`` (``collision``). ``collision`` is a child of ``rigid`` which is a child of ``node``. Only ``rigid`` is owned by ``node`` and ``pack`` will therefore only save those two nodes, but not ``collision``.
 
 ::

+ 17 - 11
classes/class_plane.rst

@@ -78,11 +78,11 @@ Constants
 
 .. _class_Plane_constant_PLANE_XY:
 
-- **PLANE_YZ** = **Plane( 1, 0, 0, 0 )** --- A plane that extends in the Y and Z axes.
+- **PLANE_YZ** = **Plane( 1, 0, 0, 0 )** --- A plane that extends in the Y and Z axes (normal vector points +X).
 
-- **PLANE_XZ** = **Plane( 0, 1, 0, 0 )** --- A plane that extends in the X and Z axes.
+- **PLANE_XZ** = **Plane( 0, 1, 0, 0 )** --- A plane that extends in the X and Z axes (normal vector points +Y).
 
-- **PLANE_XY** = **Plane( 0, 0, 1, 0 )** --- A plane that extends in the X and Y axes.
+- **PLANE_XY** = **Plane( 0, 0, 1, 0 )** --- A plane that extends in the X and Y axes (normal vector points +Z).
 
 Property Descriptions
 ---------------------
@@ -95,7 +95,9 @@ Property Descriptions
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-Distance from the origin to the plane, in the direction of :ref:`normal<class_Plane_property_normal>`.
+The distance from the origin to the plane, in the direction of :ref:`normal<class_Plane_property_normal>`. This value is typically non-negative.
+
+In the scalar equation of the plane ``ax + by + cz = d``, this is ``d``, while the ``(a, b, c)`` coordinates are represented by the :ref:`normal<class_Plane_property_normal>` property.
 
 ----
 
@@ -107,7 +109,9 @@ Distance from the origin to the plane, in the direction of :ref:`normal<class_Pl
 | *Default* | ``Vector3( 0, 0, 0 )`` |
 +-----------+------------------------+
 
-The normal of the plane. "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing.
+The normal of the plane, which must be normalized.
+
+In the scalar equation of the plane ``ax + by + cz = d``, this is the vector ``(a, b, c)``, where ``d`` is the :ref:`d<class_Plane_property_d>` property.
 
 ----
 
@@ -119,7 +123,7 @@ The normal of the plane. "Over" or "Above" the plane is considered the side of t
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-The :ref:`normal<class_Plane_property_normal>`'s X component.
+The X component of the plane's :ref:`normal<class_Plane_property_normal>` vector.
 
 ----
 
@@ -131,7 +135,7 @@ The :ref:`normal<class_Plane_property_normal>`'s X component.
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-The :ref:`normal<class_Plane_property_normal>`'s Y component.
+The Y component of the plane's :ref:`normal<class_Plane_property_normal>` vector.
 
 ----
 
@@ -143,7 +147,7 @@ The :ref:`normal<class_Plane_property_normal>`'s Y component.
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-The :ref:`normal<class_Plane_property_normal>`'s Z component.
+The Z component of the plane's :ref:`normal<class_Plane_property_normal>` vector.
 
 Method Descriptions
 -------------------
@@ -188,7 +192,9 @@ Returns the shortest distance from the plane to the position ``point``.
 
 - :ref:`Vector3<class_Vector3>` **get_any_point** **(** **)**
 
-Returns a point on the plane.
+Returns the center of the plane.
+
+This method is deprecated, please use :ref:`center<class_Plane_method_center>` instead.
 
 ----
 
@@ -196,7 +202,7 @@ Returns a point on the plane.
 
 - :ref:`bool<class_bool>` **has_point** **(** :ref:`Vector3<class_Vector3>` point, :ref:`float<class_float>` epsilon=1e-05 **)**
 
-Returns ``true`` if ``point`` is inside the plane (by a very minimum ``epsilon`` threshold).
+Returns ``true`` if ``point`` is inside the plane. Comparison uses a custom minimum ``epsilon`` threshold.
 
 ----
 
@@ -252,5 +258,5 @@ Returns a copy of the plane, normalized.
 
 - :ref:`Vector3<class_Vector3>` **project** **(** :ref:`Vector3<class_Vector3>` point **)**
 
-Returns the orthogonal projection of point ``p`` into a point in the plane.
+Returns the orthogonal projection of ``point`` into a point in the plane.
 

+ 7 - 1
classes/class_primitivemesh.rst

@@ -94,5 +94,11 @@ Method Descriptions
 
 - :ref:`Array<class_Array>` **get_mesh_arrays** **(** **)** const
 
-Returns mesh arrays used to constitute surface of :ref:`Mesh<class_Mesh>`. Mesh arrays can be used with :ref:`ArrayMesh<class_ArrayMesh>` to create new surfaces.
+Returns mesh arrays used to constitute surface of :ref:`Mesh<class_Mesh>`. The result can be passed to :ref:`ArrayMesh.add_surface_from_arrays<class_ArrayMesh_method_add_surface_from_arrays>` to create a new surface. For example:
+
+::
+
+    var c := CylinderMesh.new()
+    var arr_mesh := ArrayMesh.new()
+    arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, c.get_mesh_arrays())
 

+ 36 - 8
classes/class_projectsettings.rst

@@ -436,9 +436,11 @@ Properties
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                       | :ref:`logging/file_logging/enable_file_logging<class_ProjectSettings_property_logging/file_logging/enable_file_logging>`                                             | ``false``                                                                                       |
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                   | :ref:`logging/file_logging/log_path<class_ProjectSettings_property_logging/file_logging/log_path>`                                                                   | ``"user://logs/log.txt"``                                                                       |
+| :ref:`bool<class_bool>`                       | :ref:`logging/file_logging/enable_file_logging.pc<class_ProjectSettings_property_logging/file_logging/enable_file_logging.pc>`                                       | ``true``                                                                                        |
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                         | :ref:`logging/file_logging/max_log_files<class_ProjectSettings_property_logging/file_logging/max_log_files>`                                                         | ``10``                                                                                          |
+| :ref:`String<class_String>`                   | :ref:`logging/file_logging/log_path<class_ProjectSettings_property_logging/file_logging/log_path>`                                                                   | ``"user://logs/godot.log"``                                                                     |
++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                         | :ref:`logging/file_logging/max_log_files<class_ProjectSettings_property_logging/file_logging/max_log_files>`                                                         | ``5``                                                                                           |
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                         | :ref:`memory/limits/message_queue/max_size_kb<class_ProjectSettings_property_memory/limits/message_queue/max_size_kb>`                                               | ``1024``                                                                                        |
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
@@ -558,6 +560,8 @@ Properties
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                       | :ref:`rendering/gles2/compatibility/disable_half_float<class_ProjectSettings_property_rendering/gles2/compatibility/disable_half_float>`                             | ``false``                                                                                       |
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                       | :ref:`rendering/gles2/compatibility/enable_high_float.Android<class_ProjectSettings_property_rendering/gles2/compatibility/enable_high_float.Android>`               | ``false``                                                                                       |
++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                         | :ref:`rendering/limits/buffers/blend_shape_max_buffer_size_kb<class_ProjectSettings_property_rendering/limits/buffers/blend_shape_max_buffer_size_kb>`               | ``4096``                                                                                        |
 +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                         | :ref:`rendering/limits/buffers/canvas_polygon_buffer_size_kb<class_ProjectSettings_property_rendering/limits/buffers/canvas_polygon_buffer_size_kb>`                 | ``128``                                                                                         |
@@ -3153,13 +3157,23 @@ If ``true``, logs all output to files.
 
 ----
 
+.. _class_ProjectSettings_property_logging/file_logging/enable_file_logging.pc:
+
+- :ref:`bool<class_bool>` **logging/file_logging/enable_file_logging.pc**
+
++-----------+----------+
+| *Default* | ``true`` |
++-----------+----------+
+
+----
+
 .. _class_ProjectSettings_property_logging/file_logging/log_path:
 
 - :ref:`String<class_String>` **logging/file_logging/log_path**
 
-+-----------+---------------------------+
-| *Default* | ``"user://logs/log.txt"`` |
-+-----------+---------------------------+
++-----------+-----------------------------+
+| *Default* | ``"user://logs/godot.log"`` |
++-----------+-----------------------------+
 
 Path to logs within the project. Using an ``user://`` path is recommended.
 
@@ -3169,9 +3183,9 @@ Path to logs within the project. Using an ``user://`` path is recommended.
 
 - :ref:`int<class_int>` **logging/file_logging/max_log_files**
 
-+-----------+--------+
-| *Default* | ``10`` |
-+-----------+--------+
++-----------+-------+
+| *Default* | ``5`` |
++-----------+-------+
 
 Specifies the maximum amount of log files allowed (used for rotation).
 
@@ -3929,6 +3943,20 @@ The use of half-float vertex compression may be producing rendering errors on so
 
 ----
 
+.. _class_ProjectSettings_property_rendering/gles2/compatibility/enable_high_float.Android:
+
+- :ref:`bool<class_bool>` **rendering/gles2/compatibility/enable_high_float.Android**
+
++-----------+-----------+
+| *Default* | ``false`` |
++-----------+-----------+
+
+If ``true`` and available on the target device, enables high floating point precision for all shader computations in GLES2.
+
+**Warning:** High floating point precision can be extremely slow on older devices and is often not available at all. Use with caution.
+
+----
+
 .. _class_ProjectSettings_property_rendering/limits/buffers/blend_shape_max_buffer_size_kb:
 
 - :ref:`int<class_int>` **rendering/limits/buffers/blend_shape_max_buffer_size_kb**

+ 28 - 18
classes/class_quat.rst

@@ -14,11 +14,11 @@ Quaternion.
 Description
 -----------
 
-A unit quaternion used for representing 3D rotations.
+A unit quaternion used for representing 3D rotations. Quaternions need to be normalized to be used for rotation.
 
-It is similar to :ref:`Basis<class_Basis>`, which implements matrix representation of rotations, and can be parametrized using both an axis-angle pair or Euler angles. But due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
+It is similar to Basis, which implements matrix representation of rotations, and can be parametrized using both an axis-angle pair or Euler angles. Basis stores rotation, scale, and shearing, while Quat only stores rotation.
 
-Quaternions need to be (re)normalized.
+Due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
 
 Tutorials
 ---------
@@ -84,7 +84,7 @@ Constants
 
 .. _class_Quat_constant_IDENTITY:
 
-- **IDENTITY** = **Quat( 0, 0, 0, 1 )** --- The identity rotation. Equivalent to an identity matrix. If a vector is transformed by an identity quaternion, it will not change.
+- **IDENTITY** = **Quat( 0, 0, 0, 1 )** --- The identity quaternion, representing no rotation. Equivalent to an identity :ref:`Basis<class_Basis>` matrix. If a vector is transformed by an identity quaternion, it will not change.
 
 Property Descriptions
 ---------------------
@@ -97,7 +97,9 @@ Property Descriptions
 | *Default* | ``1.0`` |
 +-----------+---------+
 
-W component of the quaternion.
+W component of the quaternion (real part).
+
+Quaternion components should usually not be manipulated directly.
 
 ----
 
@@ -109,7 +111,9 @@ W component of the quaternion.
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-X component of the quaternion.
+X component of the quaternion (imaginary ``i`` axis part).
+
+Quaternion components should usually not be manipulated directly.
 
 ----
 
@@ -121,7 +125,9 @@ X component of the quaternion.
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-Y component of the quaternion.
+Y component of the quaternion (imaginary ``j`` axis part).
+
+Quaternion components should usually not be manipulated directly.
 
 ----
 
@@ -133,7 +139,9 @@ Y component of the quaternion.
 | *Default* | ``0.0`` |
 +-----------+---------+
 
-Z component of the quaternion.
+Z component of the quaternion (imaginary ``k`` axis part).
+
+Quaternion components should usually not be manipulated directly.
 
 Method Descriptions
 -------------------
@@ -142,25 +150,25 @@ Method Descriptions
 
 - :ref:`Quat<class_Quat>` **Quat** **(** :ref:`Basis<class_Basis>` from **)**
 
-Returns the rotation matrix corresponding to the given quaternion.
+Constructs a quaternion from the given :ref:`Basis<class_Basis>`.
 
 ----
 
 - :ref:`Quat<class_Quat>` **Quat** **(** :ref:`Vector3<class_Vector3>` euler **)**
 
-Returns a quaternion that will perform a rotation specified by Euler angles (in the YXZ convention: first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
+Constructs a quaternion that will perform a rotation specified by Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
 
 ----
 
 - :ref:`Quat<class_Quat>` **Quat** **(** :ref:`Vector3<class_Vector3>` axis, :ref:`float<class_float>` angle **)**
 
-Returns a quaternion that will rotate around the given axis by the specified angle. The axis must be a normalized vector.
+Constructs a quaternion that will rotate around the given axis by the specified angle. The axis must be a normalized vector.
 
 ----
 
 - :ref:`Quat<class_Quat>` **Quat** **(** :ref:`float<class_float>` x, :ref:`float<class_float>` y, :ref:`float<class_float>` z, :ref:`float<class_float>` w **)**
 
-Returns a quaternion defined by these values.
+Constructs a quaternion defined by the given values.
 
 ----
 
@@ -168,7 +176,7 @@ Returns a quaternion defined by these values.
 
 - :ref:`Quat<class_Quat>` **cubic_slerp** **(** :ref:`Quat<class_Quat>` b, :ref:`Quat<class_Quat>` pre_a, :ref:`Quat<class_Quat>` post_b, :ref:`float<class_float>` t **)**
 
-Performs a cubic spherical-linear interpolation with another quaternion.
+Performs a cubic spherical interpolation between quaternions ``preA``, this vector, ``b``, and ``postB``, by the given amount ``t``.
 
 ----
 
@@ -184,7 +192,7 @@ Returns the dot product of two quaternions.
 
 - :ref:`Vector3<class_Vector3>` **get_euler** **(** **)**
 
-Returns Euler angles (in the YXZ convention: first Z, then X, and Y last) corresponding to the rotation represented by the unit quaternion. Returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
+Returns Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last) corresponding to the rotation represented by the unit quaternion. Returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
 
 ----
 
@@ -248,7 +256,7 @@ Sets the quaternion to a rotation which rotates around axis by the specified ang
 
 - void **set_euler** **(** :ref:`Vector3<class_Vector3>` euler **)**
 
-Sets the quaternion to a rotation specified by Euler angles (in the YXZ convention: first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
+Sets the quaternion to a rotation specified by Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
 
 ----
 
@@ -256,7 +264,9 @@ Sets the quaternion to a rotation specified by Euler angles (in the YXZ conventi
 
 - :ref:`Quat<class_Quat>` **slerp** **(** :ref:`Quat<class_Quat>` b, :ref:`float<class_float>` t **)**
 
-Performs a spherical-linear interpolation with another quaternion.
+Returns the result of the spherical linear interpolation between this quaternion and ``to`` by amount ``weight``.
+
+**Note:** Both quaternions must be normalized.
 
 ----
 
@@ -264,7 +274,7 @@ Performs a spherical-linear interpolation with another quaternion.
 
 - :ref:`Quat<class_Quat>` **slerpni** **(** :ref:`Quat<class_Quat>` b, :ref:`float<class_float>` t **)**
 
-Performs a spherical-linear interpolation with another quaterion without checking if the rotation path is not bigger than 90°.
+Returns the result of the spherical linear interpolation between this quaternion and ``to`` by amount ``weight``, but without checking if the rotation path is not bigger than 90 degrees.
 
 ----
 
@@ -272,5 +282,5 @@ Performs a spherical-linear interpolation with another quaterion without checkin
 
 - :ref:`Vector3<class_Vector3>` **xform** **(** :ref:`Vector3<class_Vector3>` v **)**
 
-Transforms the vector ``v`` by this quaternion.
+Returns a vector transformed (multiplied) by this quaternion.
 

+ 1 - 1
classes/class_raycast.rst

@@ -211,7 +211,7 @@ Updates the collision information for the ray.
 
 Use this method to update the collision information immediately instead of waiting for the next ``_physics_process`` call, for example if the ray or its parent has changed state.
 
-**Note:** ``enabled == true`` is not required for this to work.
+**Note:** ``enabled`` is not required for this to work.
 
 ----
 

+ 1 - 1
classes/class_raycast2d.rst

@@ -209,7 +209,7 @@ Removes all collision exceptions for this ray.
 
 Updates the collision information for the ray. Use this method to update the collision information immediately instead of waiting for the next ``_physics_process`` call, for example if the ray or its parent has changed state.
 
-**Note:** ``enabled == true`` is not required for this to work.
+**Note:** ``enabled`` is not required for this to work.
 
 ----
 

+ 5 - 3
classes/class_rect2.rst

@@ -78,7 +78,7 @@ Property Descriptions
 | *Default* | ``Vector2( 0, 0 )`` |
 +-----------+---------------------+
 
-Ending corner.
+Ending corner. This is calculated as ``position + size``. Setting this value will change the size.
 
 ----
 
@@ -90,7 +90,7 @@ Ending corner.
 | *Default* | ``Vector2( 0, 0 )`` |
 +-----------+---------------------+
 
-Position (starting corner).
+Beginning corner. Typically has values lower than :ref:`end<class_Rect2_property_end>`.
 
 ----
 
@@ -102,7 +102,9 @@ Position (starting corner).
 | *Default* | ``Vector2( 0, 0 )`` |
 +-----------+---------------------+
 
-Size from position to end.
+Size from :ref:`position<class_Rect2_property_position>` to :ref:`end<class_Rect2_property_end>`. Typically all components are positive.
+
+If the size is negative, you can use :ref:`abs<class_Rect2_method_abs>` to fix it.
 
 Method Descriptions
 -------------------

+ 6 - 1
classes/class_reference.rst

@@ -20,10 +20,15 @@ Description
 
 Base class for any object that keeps a reference count. :ref:`Resource<class_Resource>` and many other helper objects inherit this class.
 
-References keep an internal reference counter so that they are automatically released when no longer in use, and only then. References therefore do not need to be freed manually with :ref:`Object.free<class_Object_method_free>`.
+Unlike :ref:`Object<class_Object>`\ s, References keep an internal reference counter so that they are automatically released when no longer in use, and only then. References therefore do not need to be freed manually with :ref:`Object.free<class_Object_method_free>`.
 
 In the vast majority of use cases, instantiating and using ``Reference``-derived types is all you need to do. The methods provided in this class are only for advanced users, and can cause issues if misused.
 
+Tutorials
+---------
+
+- :doc:`../getting_started/workflow/best_practices/node_alternatives`
+
 Methods
 -------
 

+ 13 - 2
classes/class_regex.rst

@@ -27,7 +27,7 @@ To begin, the RegEx object needs to be compiled with the search pattern using :r
 
 The search pattern must be escaped first for GDScript before it is escaped for the expression. For example, ``compile("\\d+")`` would be read by RegEx as ``\d+``. Similarly, ``compile("\"(?:\\\\.|[^\"])*\"")`` would be read as ``"(?:\\.|[^"])*"``.
 
-Using :ref:`search<class_RegEx_method_search>` you can find the pattern within the given text. If a pattern is found, :ref:`RegExMatch<class_RegExMatch>` is returned and you can retrieve details of the results using functions such as :ref:`RegExMatch.get_string<class_RegExMatch_method_get_string>` and :ref:`RegExMatch.get_start<class_RegExMatch_method_get_start>`.
+Using :ref:`search<class_RegEx_method_search>`, you can find the pattern within the given text. If a pattern is found, :ref:`RegExMatch<class_RegExMatch>` is returned and you can retrieve details of the results using methods such as :ref:`RegExMatch.get_string<class_RegExMatch_method_get_string>` and :ref:`RegExMatch.get_start<class_RegExMatch_method_get_start>`.
 
 ::
 
@@ -37,7 +37,7 @@ Using :ref:`search<class_RegEx_method_search>` you can find the pattern within t
     if result:
         print(result.get_string()) # Would print n-0123
 
-The results of capturing groups ``()`` can be retrieved by passing the group number to the various functions in :ref:`RegExMatch<class_RegExMatch>`. Group 0 is the default and will always refer to the entire pattern. In the above example, calling ``result.get_string(1)`` would give you ``0123``.
+The results of capturing groups ``()`` can be retrieved by passing the group number to the various methods in :ref:`RegExMatch<class_RegExMatch>`. Group 0 is the default and will always refer to the entire pattern. In the above example, calling ``result.get_string(1)`` would give you ``0123``.
 
 This version of RegEx also supports named capturing groups, and the names can be used to retrieve the results. If two or more groups have the same name, the name would only refer to the first one with a match.
 
@@ -57,6 +57,17 @@ If you need to process multiple results, :ref:`search_all<class_RegEx_method_sea
         print(result.get_string("digit"))
     # Would print 01 03 0 3f 42
 
+**Example of splitting a string using a RegEx:**
+
+::
+
+    var regex = RegEx.new()
+    regex.compile("\\S+") # Negated whitespace character class.
+    var results = []
+    for match in regex.search_all("One  Two \n\tThree"):
+        results.push_back(match.get_string())
+    # The `results` array now contains "One", "Two", "Three".
+
 **Note:** Godot's regex implementation is based on the `PCRE2 <https://www.pcre.org/>`_ library. You can view the full pattern reference `here <https://www.pcre.org/current/doc/html/pcre2pattern.html>`_.
 
 **Tip:** You can use `Regexr <https://regexr.com/>`_ to test regular expressions online.

+ 6 - 2
classes/class_resource.rst

@@ -18,13 +18,15 @@ Base class for all resources.
 Description
 -----------
 
-Resource is the base class for all Godot-specific resource types, serving primarily as data containers. They are reference counted and freed when no longer in use. They are also cached once loaded from disk, so that any further attempts to load a resource from a given path will return the same reference (all this in contrast to a :ref:`Node<class_Node>`, which is not reference counted and can be instanced from disk as many times as desired). Resources can be saved externally on disk or bundled into another object, such as a :ref:`Node<class_Node>` or another resource.
+Resource is the base class for all Godot-specific resource types, serving primarily as data containers. Unlike :ref:`Object<class_Object>`\ s, they are reference-counted and freed when no longer in use. They are also cached once loaded from disk, so that any further attempts to load a resource from a given path will return the same reference (all this in contrast to a :ref:`Node<class_Node>`, which is not reference-counted and can be instanced from disk as many times as desired). Resources can be saved externally on disk or bundled into another object, such as a :ref:`Node<class_Node>` or another resource.
 
 Tutorials
 ---------
 
 - :doc:`../getting_started/step_by_step/resources`
 
+- :doc:`../getting_started/workflow/best_practices/node_alternatives`
+
 Properties
 ----------
 
@@ -126,7 +128,9 @@ Virtual function which can be overridden to customize the behavior value of :ref
 
 - :ref:`Resource<class_Resource>` **duplicate** **(** :ref:`bool<class_bool>` subresources=false **)** const
 
-Duplicates the resource, returning a new resource. By default, sub-resources are shared between resource copies for efficiency, this can be changed by passing ``true`` to the ``subresources`` argument.
+Duplicates the resource, returning a new resource. By default, sub-resources are shared between resource copies for efficiency. This can be changed by passing ``true`` to the ``subresources`` argument which will copy the subresources.
+
+**Note:** If ``subresources`` is ``true``, this method will only perform a shallow copy. Nested resources within subresources will not be duplicated and will still be shared.
 
 ----
 

+ 19 - 7
classes/class_rigidbody.rst

@@ -104,6 +104,8 @@ Methods
 +---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Array<class_Array>` | :ref:`get_colliding_bodies<class_RigidBody_method_get_colliding_bodies>` **(** **)** const                                                               |
 +---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Basis<class_Basis>` | :ref:`get_inverse_inertia_tensor<class_RigidBody_method_get_inverse_inertia_tensor>` **(** **)**                                                         |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                      | :ref:`set_axis_lock<class_RigidBody_method_set_axis_lock>` **(** :ref:`BodyAxis<enum_PhysicsServer_BodyAxis>` axis, :ref:`bool<class_bool>` lock **)**   |
 +---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                      | :ref:`set_axis_velocity<class_RigidBody_method_set_axis_velocity>` **(** :ref:`Vector3<class_Vector3>` axis_velocity **)**                               |
@@ -116,7 +118,7 @@ Signals
 
 - **body_entered** **(** :ref:`Node<class_Node>` body **)**
 
-Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work.
+Emitted when a body enters into contact with this one. Requires :ref:`contact_monitor<class_RigidBody_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 ----
 
@@ -124,7 +126,7 @@ Emitted when a body enters into contact with this one. Contact monitor and conta
 
 - **body_exited** **(** :ref:`Node<class_Node>` body **)**
 
-Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work.
+Emitted when a body shape exits contact with this one. Requires :ref:`contact_monitor<class_RigidBody_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 ----
 
@@ -132,7 +134,7 @@ Emitted when a body shape exits contact with this one. Contact monitor and conta
 
 - **body_shape_entered** **(** :ref:`int<class_int>` body_id, :ref:`Node<class_Node>` body, :ref:`int<class_int>` body_shape, :ref:`int<class_int>` local_shape **)**
 
-Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work.
+Emitted when a body enters into contact with this one. Requires :ref:`contact_monitor<class_RigidBody_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 This signal not only receives the body that collided with this one, but also its :ref:`RID<class_RID>` (``body_id``), the shape index from the colliding body (``body_shape``), and the shape index from this body (``local_shape``) the other body collided with.
 
@@ -142,7 +144,7 @@ This signal not only receives the body that collided with this one, but also its
 
 - **body_shape_exited** **(** :ref:`int<class_int>` body_id, :ref:`Node<class_Node>` body, :ref:`int<class_int>` body_shape, :ref:`int<class_int>` local_shape **)**
 
-Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work.
+Emitted when a body shape exits contact with this one. Requires :ref:`contact_monitor<class_RigidBody_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 This signal not only receives the body that stopped colliding with this one, but also its :ref:`RID<class_RID>` (``body_id``), the shape index from the colliding body (``body_shape``), and the shape index from this body (``local_shape``) the other body stopped colliding with.
 
@@ -354,7 +356,7 @@ If ``true``, the body can enter sleep mode when there is no movement. See :ref:`
 | *Getter*  | is_contact_monitor_enabled() |
 +-----------+------------------------------+
 
-If ``true``, the RigidBody will emit signals when it collides with another RigidBody.
+If ``true``, the RigidBody will emit signals when it collides with another RigidBody. See also :ref:`contacts_reported<class_RigidBody_property_contacts_reported>`.
 
 ----
 
@@ -370,7 +372,9 @@ If ``true``, the RigidBody will emit signals when it collides with another Rigid
 | *Getter*  | get_max_contacts_reported()      |
 +-----------+----------------------------------+
 
-The maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0.
+The maximum number of contacts that will be recorded. Requires :ref:`contact_monitor<class_RigidBody_property_contact_monitor>` to be set to ``true``.
+
+**Note:** The number of contacts is different from the number of collisions. Collisions between parallel edges will result in two contacts (one at each end), and collisions between parallel faces will result in four contacts (one at each corner).
 
 ----
 
@@ -627,12 +631,20 @@ Returns ``true`` if the specified linear or rotational axis is locked.
 
 - :ref:`Array<class_Array>` **get_colliding_bodies** **(** **)** const
 
-Returns a list of the bodies colliding with this one. By default, number of max contacts reported is at 0, see the :ref:`contacts_reported<class_RigidBody_property_contacts_reported>` property to increase it.
+Returns a list of the bodies colliding with this one. Requires :ref:`contact_monitor<class_RigidBody_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 **Note:** The result of this test is not immediate after moving objects. For performance, list of collisions is updated once per frame and before the physics step. Consider using signals instead.
 
 ----
 
+.. _class_RigidBody_method_get_inverse_inertia_tensor:
+
+- :ref:`Basis<class_Basis>` **get_inverse_inertia_tensor** **(** **)**
+
+Returns the inverse inertia tensor basis. This is used to calculate the angular acceleration resulting from a torque applied to the RigidBody.
+
+----
+
 .. _class_RigidBody_method_set_axis_lock:
 
 - void **set_axis_lock** **(** :ref:`BodyAxis<enum_PhysicsServer_BodyAxis>` axis, :ref:`bool<class_bool>` lock **)**

+ 8 - 6
classes/class_rigidbody2d.rst

@@ -103,7 +103,7 @@ Signals
 
 - **body_entered** **(** :ref:`Node<class_Node>` body **)**
 
-Emitted when a body enters into contact with this one. :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` must be ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` greater than ``0``.
+Emitted when a body enters into contact with this one. Requires :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 ----
 
@@ -111,7 +111,7 @@ Emitted when a body enters into contact with this one. :ref:`contact_monitor<cla
 
 - **body_exited** **(** :ref:`Node<class_Node>` body **)**
 
-Emitted when a body exits contact with this one. :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` must be ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` greater than ``0``.
+Emitted when a body exits contact with this one. Requires :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 ----
 
@@ -119,7 +119,7 @@ Emitted when a body exits contact with this one. :ref:`contact_monitor<class_Rig
 
 - **body_shape_entered** **(** :ref:`int<class_int>` body_id, :ref:`Node<class_Node>` body, :ref:`int<class_int>` body_shape, :ref:`int<class_int>` local_shape **)**
 
-Emitted when a body enters into contact with this one. Reports colliding shape information. See :ref:`CollisionObject2D<class_CollisionObject2D>` for shape index information. :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` must be ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` greater than ``0``.
+Emitted when a body enters into contact with this one. Reports colliding shape information. See :ref:`CollisionObject2D<class_CollisionObject2D>` for shape index information. Requires :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 ----
 
@@ -127,7 +127,7 @@ Emitted when a body enters into contact with this one. Reports colliding shape i
 
 - **body_shape_exited** **(** :ref:`int<class_int>` body_id, :ref:`Node<class_Node>` body, :ref:`int<class_int>` body_shape, :ref:`int<class_int>` local_shape **)**
 
-Emitted when a body shape exits contact with this one. Reports colliding shape information. See :ref:`CollisionObject2D<class_CollisionObject2D>` for shape index information. :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` must be ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` greater than ``0``.
+Emitted when a body shape exits contact with this one. Reports colliding shape information. See :ref:`CollisionObject2D<class_CollisionObject2D>` for shape index information. Requires :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 ----
 
@@ -307,7 +307,9 @@ If ``true``, the body will emit signals when it collides with another RigidBody2
 | *Getter*  | get_max_contacts_reported()      |
 +-----------+----------------------------------+
 
-The maximum number of contacts to report.
+The maximum number of contacts that will be recorded. Requires :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to be set to ``true``.
+
+**Note:** The number of contacts is different from the number of collisions. Collisions between parallel edges will result in two contacts (one at each end), and collisions between parallel faces will result in four contacts (one at each corner).
 
 ----
 
@@ -564,7 +566,7 @@ Applies a rotational impulse to the body.
 
 - :ref:`Array<class_Array>` **get_colliding_bodies** **(** **)** const
 
-Returns a list of the bodies colliding with this one. Use :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` to set the maximum number reported. You must also set :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to ``true``.
+Returns a list of the bodies colliding with this one. Requires :ref:`contact_monitor<class_RigidBody2D_property_contact_monitor>` to be set to ``true`` and :ref:`contacts_reported<class_RigidBody2D_property_contacts_reported>` to be set high enough to detect all the collisions.
 
 **Note:** The result of this test is not immediate after moving objects. For performance, list of collisions is updated once per frame and before the physics step. Consider using signals instead.
 

+ 1 - 1
classes/class_skeleton.rst

@@ -271,7 +271,7 @@ Sets the bone index ``parent_idx`` as the parent of the bone at ``bone_idx``. If
 
 - void **set_bone_pose** **(** :ref:`int<class_int>` bone_idx, :ref:`Transform<class_Transform>` pose **)**
 
-Returns the pose transform for bone ``bone_idx``.
+Sets the pose transform for bone ``bone_idx``.
 
 ----
 

+ 2 - 2
classes/class_spatial.rst

@@ -274,7 +274,7 @@ Local translation of this node.
 | *Getter*  | is_visible()       |
 +-----------+--------------------+
 
-If ``true``, this node is drawn.
+If ``true``, this node is drawn. The node is only visible if all of its antecedents are visible as well (in other words, :ref:`is_visible_in_tree<class_Spatial_method_is_visible_in_tree>` must return ``true``).
 
 Method Descriptions
 -------------------
@@ -371,7 +371,7 @@ Returns whether the node notifies about its global and local transformation chan
 
 - :ref:`bool<class_bool>` **is_visible_in_tree** **(** **)** const
 
-Returns whether the node is visible, taking into consideration that its parents visibility.
+Returns ``true`` if the node is present in the :ref:`SceneTree<class_SceneTree>`, its :ref:`visible<class_Spatial_property_visible>` property is ``true`` and all its antecedents are also visible. If any antecedent is hidden, this node will not be visible in the scene tree.
 
 ----
 

+ 1 - 1
classes/class_springarm.rst

@@ -144,7 +144,7 @@ Clears the list of :ref:`PhysicsBody<class_PhysicsBody>` objects excluded from t
 
 - :ref:`float<class_float>` **get_hit_length** **(** **)**
 
-Returns the proportion between the current arm length (after checking for collisions) and the :ref:`spring_length<class_SpringArm_property_spring_length>`. Ranges from 0 to 1.
+Returns the spring arm's current length.
 
 ----
 

+ 8 - 4
classes/class_string.rst

@@ -14,7 +14,7 @@ Built-in string class.
 Description
 -----------
 
-This is the built-in string class (and the one used by GDScript). It supports Unicode and provides all necessary means for string handling. Strings are reference counted and use a copy-on-write approach, so passing them around is cheap in resources.
+This is the built-in string class (and the one used by GDScript). It supports Unicode and provides all necessary means for string handling. Strings are reference-counted and use a copy-on-write approach, so passing them around is cheap in resources.
 
 Tutorials
 ---------
@@ -411,7 +411,9 @@ Returns a copy of the string with special characters escaped using the C languag
 
 - :ref:`String<class_String>` **c_unescape** **(** **)**
 
-Returns a copy of the string with escaped characters replaced by their meanings according to the C language standard.
+Returns a copy of the string with escaped characters replaced by their meanings. Supported escape sequences are ``\'``, ``\"``, ``\?``, ``\\``, ``\a``, ``\b``, ``\f``, ``\n``, ``\r``, ``\t``, ``\v``.
+
+**Note:** Unlike the GDScript parser, this method doesn't support the ``\uXXXX`` escape sequence.
 
 ----
 
@@ -949,9 +951,9 @@ Returns the similarity index of the text compared to this string. 1 means totall
 
 - :ref:`PoolStringArray<class_PoolStringArray>` **split** **(** :ref:`String<class_String>` delimiter, :ref:`bool<class_bool>` allow_empty=true, :ref:`int<class_int>` maxsplit=0 **)**
 
-Splits the string by a ``delimiter`` string and returns an array of the substrings.
+Splits the string by a ``delimiter`` string and returns an array of the substrings. The ``delimiter`` can be of any length.
 
-If ``maxsplit`` is specified, it defines the number of splits to do from the left up to ``maxsplit``. The default value of 0 means that all items are split.
+If ``maxsplit`` is specified, it defines the number of splits to do from the left up to ``maxsplit``. The default value of ``0`` means that all items are split.
 
 Example:
 
@@ -963,6 +965,8 @@ Example:
     print(some_array[0]) # Prints "One"
     print(some_array[1]) # Prints "Two,Three,Four"
 
+If you need to split strings with more complex rules, use the :ref:`RegEx<class_RegEx>` class instead.
+
 ----
 
 .. _class_String_method_split_floats:

+ 2 - 0
classes/class_texturerect.rst

@@ -18,6 +18,8 @@ Description
 
 Used to draw icons and sprites in a user interface. The texture's placement can be controlled with the :ref:`stretch_mode<class_TextureRect_property_stretch_mode>` property. It can scale, tile, or stay centered inside its bounding rectangle.
 
+**Note:** You should enable :ref:`flip_v<class_TextureRect_property_flip_v>` when using a TextureRect to display a :ref:`ViewportTexture<class_ViewportTexture>`. Alternatively, you can enable :ref:`Viewport.render_target_v_flip<class_Viewport_property_render_target_v_flip>` on the Viewport. Otherwise, the image will appear upside down.
+
 Properties
 ----------
 

+ 2 - 0
classes/class_thread.rst

@@ -23,6 +23,8 @@ Tutorials
 
 - :doc:`../tutorials/threads/using_multiple_threads`
 
+- :doc:`../tutorials/threads/thread_safe_apis`
+
 Methods
 -------
 

+ 13 - 1
classes/class_tileset.rst

@@ -607,7 +607,19 @@ Returns the :ref:`Transform2D<class_Transform2D>` of a tile's shape.
 
 - :ref:`Array<class_Array>` **tile_get_shapes** **(** :ref:`int<class_int>` id **)** const
 
-Returns an array of the tile's shapes.
+Returns an array of dictionaries describing the tile's shapes.
+
+**Dictionary structure in the array returned by this method:**
+
+::
+
+    {
+        "autotile_coord": Vector2,
+        "one_way": bool,
+        "one_way_margin": int,
+        "shape": CollisionShape2D,
+        "shape_transform": Transform2D,
+    }
 
 ----
 

+ 2 - 0
classes/class_timer.rst

@@ -18,6 +18,8 @@ Description
 
 Counts down a specified interval and emits a signal on reaching 0. Can be set to repeat or "one-shot" mode.
 
+**Note:** To create an one-shot timer without instantiating a node, use :ref:`SceneTree.create_timer<class_SceneTree_method_create_timer>`.
+
 Properties
 ----------
 

+ 11 - 7
classes/class_transform.rst

@@ -14,13 +14,17 @@ Transform
 Description
 -----------
 
-Represents one or many transformations in 3D space such as translation, rotation, or scaling. It consists of a :ref:`basis<class_Transform_property_basis>` and an :ref:`origin<class_Transform_property_origin>`. It is similar to a 3×4 matrix.
+3×4 matrix (3 rows, 4 columns) used for 3D linear transformations. It can represent transformations such as translation, rotation, or scaling. It consists of a :ref:`basis<class_Transform_property_basis>` (first 3 columns) and a :ref:`Vector3<class_Vector3>` for the :ref:`origin<class_Transform_property_origin>` (last column).
+
+For more information, read the "Matrices and transforms" documentation article.
 
 Tutorials
 ---------
 
 - :doc:`../tutorials/math/index`
 
+- :doc:`../tutorials/math/matrices_and_transforms`
+
 - :doc:`../tutorials/3d/using_transforms`
 
 Properties
@@ -111,7 +115,7 @@ The basis is a matrix containing 3 :ref:`Vector3<class_Vector3>` as its columns:
 | *Default* | ``Vector3( 0, 0, 0 )`` |
 +-----------+------------------------+
 
-The translation offset of the transform.
+The translation offset of the transform (column 3, the fourth column). Equivalent to array index ``3``.
 
 Method Descriptions
 -------------------
@@ -120,25 +124,25 @@ Method Descriptions
 
 - :ref:`Transform<class_Transform>` **Transform** **(** :ref:`Vector3<class_Vector3>` x_axis, :ref:`Vector3<class_Vector3>` y_axis, :ref:`Vector3<class_Vector3>` z_axis, :ref:`Vector3<class_Vector3>` origin **)**
 
-Constructs the Transform from four :ref:`Vector3<class_Vector3>`. Each axis corresponds to local basis vectors (some of which may be scaled).
+Constructs a Transform from four :ref:`Vector3<class_Vector3>` values (matrix columns). Each axis corresponds to local basis vectors (some of which may be scaled).
 
 ----
 
 - :ref:`Transform<class_Transform>` **Transform** **(** :ref:`Basis<class_Basis>` basis, :ref:`Vector3<class_Vector3>` origin **)**
 
-Constructs the Transform from a :ref:`Basis<class_Basis>` and :ref:`Vector3<class_Vector3>`.
+Constructs a Transform from a :ref:`Basis<class_Basis>` and :ref:`Vector3<class_Vector3>`.
 
 ----
 
 - :ref:`Transform<class_Transform>` **Transform** **(** :ref:`Transform2D<class_Transform2D>` from **)**
 
-Constructs the Transform from a :ref:`Transform2D<class_Transform2D>`.
+Constructs a Transform from a :ref:`Transform2D<class_Transform2D>`.
 
 ----
 
 - :ref:`Transform<class_Transform>` **Transform** **(** :ref:`Quat<class_Quat>` from **)**
 
-Constructs the Transform from a :ref:`Quat<class_Quat>`. The origin will be Vector3(0, 0, 0).
+Constructs a Transform from a :ref:`Quat<class_Quat>`. The origin will be ``Vector3(0, 0, 0)``.
 
 ----
 
@@ -160,7 +164,7 @@ Returns the inverse of the transform, under the assumption that the transformati
 
 - :ref:`Transform<class_Transform>` **interpolate_with** **(** :ref:`Transform<class_Transform>` transform, :ref:`float<class_float>` weight **)**
 
-Interpolates the transform to other Transform by weight amount (0-1).
+Interpolates the transform to other Transform by weight amount (on the range of 0.0 to 1.0).
 
 ----
 

+ 26 - 15
classes/class_transform2d.rst

@@ -9,12 +9,19 @@
 Transform2D
 ===========
 
-2D transformation (2 matrix).
+2D transformation (2×3 matrix).
 
 Description
 -----------
 
-Represents one or many transformations in 2D space such as translation, rotation, or scaling. It consists of two :ref:`x<class_Transform2D_property_x>` and :ref:`y<class_Transform2D_property_y>` :ref:`Vector2<class_Vector2>`\ s and an :ref:`origin<class_Transform2D_property_origin>`. It is similar to a 3×2 matrix.
+2×3 matrix (2 rows, 3 columns) used for 2D linear transformations. It can represent transformations such as translation, rotation, or scaling. It consists of a three :ref:`Vector2<class_Vector2>` values: :ref:`x<class_Transform2D_property_x>`, :ref:`y<class_Transform2D_property_y>`, and the :ref:`origin<class_Transform2D_property_origin>`.
+
+For more information, read the "Matrices and transforms" documentation article.
+
+Tutorials
+---------
+
+- :doc:`../tutorials/math/matrices_and_transforms`
 
 Properties
 ----------
@@ -77,11 +84,11 @@ Constants
 
 .. _class_Transform2D_constant_FLIP_Y:
 
-- **IDENTITY** = **Transform2D( 1, 0, 0, 1, 0, 0 )** --- ``Transform2D`` with no translation, rotation or scaling applied. When applied to other data structures, :ref:`IDENTITY<class_Transform2D_constant_IDENTITY>` performs no transformation.
+- **IDENTITY** = **Transform2D( 1, 0, 0, 1, 0, 0 )** --- The identity ``Transform2D`` with no translation, rotation or scaling applied. When applied to other data structures, :ref:`IDENTITY<class_Transform2D_constant_IDENTITY>` performs no transformation.
 
-- **FLIP_X** = **Transform2D( -1, 0, 0, 1, 0, 0 )** --- ``Transform2D`` with mirroring applied parallel to the X axis.
+- **FLIP_X** = **Transform2D( -1, 0, 0, 1, 0, 0 )** --- The ``Transform2D`` that will flip something along the X axis.
 
-- **FLIP_Y** = **Transform2D( 1, 0, 0, -1, 0, 0 )** --- ``Transform2D`` with mirroring applied parallel to the Y axis.
+- **FLIP_Y** = **Transform2D( 1, 0, 0, -1, 0, 0 )** --- The ``Transform2D`` that will flip something along the Y axis.
 
 Property Descriptions
 ---------------------
@@ -94,7 +101,7 @@ Property Descriptions
 | *Default* | ``Vector2( 0, 0 )`` |
 +-----------+---------------------+
 
-The transform's translation offset.
+The origin vector (column 2, the third column). Equivalent to array index ``2``. The origin vector represents translation.
 
 ----
 
@@ -106,7 +113,7 @@ The transform's translation offset.
 | *Default* | ``Vector2( 1, 0 )`` |
 +-----------+---------------------+
 
-The X axis of 2×2 basis matrix containing 2 :ref:`Vector2<class_Vector2>`\ s as its columns: X axis and Y axis. These vectors can be interpreted as the basis vectors of local coordinate system traveling with the object.
+The basis matrix's X vector (column 0). Equivalent to array index ``0``.
 
 ----
 
@@ -118,7 +125,7 @@ The X axis of 2×2 basis matrix containing 2 :ref:`Vector2<class_Vector2>`\ s as
 | *Default* | ``Vector2( 0, 1 )`` |
 +-----------+---------------------+
 
-The Y axis of 2×2 basis matrix containing 2 :ref:`Vector2<class_Vector2>`\ s as its columns: X axis and Y axis. These vectors can be interpreted as the basis vectors of local coordinate system traveling with the object.
+The basis matrix's Y vector (column 1). Equivalent to array index ``1``.
 
 Method Descriptions
 -------------------
@@ -133,7 +140,7 @@ Constructs the transform from a 3D :ref:`Transform<class_Transform>`.
 
 - :ref:`Transform2D<class_Transform2D>` **Transform2D** **(** :ref:`Vector2<class_Vector2>` x_axis, :ref:`Vector2<class_Vector2>` y_axis, :ref:`Vector2<class_Vector2>` origin **)**
 
-Constructs the transform from 3 :ref:`Vector2<class_Vector2>`\ s representing x, y, and origin.
+Constructs the transform from 3 :ref:`Vector2<class_Vector2>` values representing :ref:`x<class_Transform2D_property_x>`, :ref:`y<class_Transform2D_property_y>`, and the :ref:`origin<class_Transform2D_property_origin>` (the three column vectors).
 
 ----
 
@@ -147,7 +154,7 @@ Constructs the transform from a given angle (in radians) and position.
 
 - :ref:`Transform2D<class_Transform2D>` **affine_inverse** **(** **)**
 
-Returns the inverse of the matrix.
+Returns the inverse of the transform, under the assumption that the transformation is composed of rotation, scaling and translation.
 
 ----
 
@@ -155,7 +162,9 @@ Returns the inverse of the matrix.
 
 - :ref:`Vector2<class_Vector2>` **basis_xform** **(** :ref:`Vector2<class_Vector2>` v **)**
 
-Transforms the given vector by this transform's basis (no translation).
+Returns a vector transformed (multiplied) by the basis matrix.
+
+This method does not account for translation (the origin vector).
 
 ----
 
@@ -163,7 +172,9 @@ Transforms the given vector by this transform's basis (no translation).
 
 - :ref:`Vector2<class_Vector2>` **basis_xform_inv** **(** :ref:`Vector2<class_Vector2>` v **)**
 
-Inverse-transforms the given vector by this transform's basis (no translation).
+Returns a vector transformed (multiplied) by the inverse basis matrix.
+
+This method does not account for translation (the origin vector).
 
 ----
 
@@ -195,7 +206,7 @@ Returns the scale.
 
 - :ref:`Transform2D<class_Transform2D>` **interpolate_with** **(** :ref:`Transform2D<class_Transform2D>` transform, :ref:`float<class_float>` weight **)**
 
-Returns a transform interpolated between this transform and another by a given weight (0-1).
+Returns a transform interpolated between this transform and another by a given weight (on the range of 0.0 to 1.0).
 
 ----
 
@@ -203,7 +214,7 @@ Returns a transform interpolated between this transform and another by a given w
 
 - :ref:`Transform2D<class_Transform2D>` **inverse** **(** **)**
 
-Returns the inverse of the transform, under the assumption that the transformation is composed of rotation and translation (no scaling, use affine_inverse for transforms with scaling).
+Returns the inverse of the transform, under the assumption that the transformation is composed of rotation and translation (no scaling, use :ref:`affine_inverse<class_Transform2D_method_affine_inverse>` for transforms with scaling).
 
 ----
 
@@ -219,7 +230,7 @@ Returns ``true`` if this transform and ``transform`` are approximately equal, by
 
 - :ref:`Transform2D<class_Transform2D>` **orthonormalized** **(** **)**
 
-Returns the transform with the basis orthogonal (90 degrees), and normalized axis vectors.
+Returns the transform with the basis orthogonal (90 degrees), and normalized axis vectors (scale of 1 or -1).
 
 ----
 

+ 40 - 3
classes/class_udpserver.rst

@@ -18,6 +18,8 @@ Description
 
 A simple server that opens a UDP socket and returns connected :ref:`PacketPeerUDP<class_PacketPeerUDP>` upon receiving new packets. See also :ref:`PacketPeerUDP.connect_to_host<class_PacketPeerUDP_method_connect_to_host>`.
 
+After starting the server (:ref:`listen<class_UDPServer_method_listen>`), you will need to :ref:`poll<class_UDPServer_method_poll>` it at regular intervals (e.g. inside :ref:`Node._process<class_Node_method__process>`) for it to process new packets, delivering them to the appropriate :ref:`PacketPeerUDP<class_PacketPeerUDP>`, and taking new connections.
+
 Below a small example of how it can be used:
 
 ::
@@ -32,6 +34,7 @@ Below a small example of how it can be used:
         server.listen(4242)
     
     func _process(delta):
+        server.poll() # Important!
         if server.is_connection_available():
             var peer : PacketPeerUDP = server.take_connection()
             var pkt = peer.get_packet()
@@ -65,6 +68,13 @@ Below a small example of how it can be used:
             print("Connected: %s" % udp.get_packet().get_string_from_utf8())
             connected = true
 
+Properties
+----------
+
++-----------------------+----------------------------------------------------------------------------------+--------+
+| :ref:`int<class_int>` | :ref:`max_pending_connections<class_UDPServer_property_max_pending_connections>` | ``16`` |
++-----------------------+----------------------------------------------------------------------------------+--------+
+
 Methods
 -------
 
@@ -75,11 +85,30 @@ Methods
 +-------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Error<enum_@GlobalScope_Error>`     | :ref:`listen<class_UDPServer_method_listen>` **(** :ref:`int<class_int>` port, :ref:`String<class_String>` bind_address="*" **)** |
 +-------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`     | :ref:`poll<class_UDPServer_method_poll>` **(** **)**                                                                              |
++-------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
 | void                                      | :ref:`stop<class_UDPServer_method_stop>` **(** **)**                                                                              |
 +-------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`PacketPeerUDP<class_PacketPeerUDP>` | :ref:`take_connection<class_UDPServer_method_take_connection>` **(** **)**                                                        |
 +-------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
 
+Property Descriptions
+---------------------
+
+.. _class_UDPServer_property_max_pending_connections:
+
+- :ref:`int<class_int>` **max_pending_connections**
+
++-----------+------------------------------------+
+| *Default* | ``16``                             |
++-----------+------------------------------------+
+| *Setter*  | set_max_pending_connections(value) |
++-----------+------------------------------------+
+| *Getter*  | get_max_pending_connections()      |
++-----------+------------------------------------+
+
+Define the maximum number of pending connections, during :ref:`poll<class_UDPServer_method_poll>`, any new pending connection exceeding that value will be automatically dropped. Setting this value to ``0`` effectively prevents any new pending connection to be accepted (e.g. when all your players have connected).
+
 Method Descriptions
 -------------------
 
@@ -87,7 +116,7 @@ Method Descriptions
 
 - :ref:`bool<class_bool>` **is_connection_available** **(** **)** const
 
-Returns ``true`` if a packet with a new address/port combination is received on the socket.
+Returns ``true`` if a packet with a new address/port combination was received on the socket.
 
 ----
 
@@ -107,11 +136,19 @@ Starts the server by opening a UDP socket listening on the given port. You can o
 
 ----
 
+.. _class_UDPServer_method_poll:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **poll** **(** **)**
+
+Call this method at regular intervals (e.g. inside :ref:`Node._process<class_Node_method__process>`) to process new packets. And packet from known address/port pair will be delivered to the appropriate :ref:`PacketPeerUDP<class_PacketPeerUDP>`, any packet received from an unknown address/port pair will be added as a pending connection (see :ref:`is_connection_available<class_UDPServer_method_is_connection_available>`, :ref:`take_connection<class_UDPServer_method_take_connection>`). The maximum number of pending connection is defined via :ref:`max_pending_connections<class_UDPServer_property_max_pending_connections>`.
+
+----
+
 .. _class_UDPServer_method_stop:
 
 - void **stop** **(** **)**
 
-Stops the server, closing the UDP socket if open. Will not disconnect any connected :ref:`PacketPeerUDP<class_PacketPeerUDP>`.
+Stops the server, closing the UDP socket if open. Will close all connected :ref:`PacketPeerUDP<class_PacketPeerUDP>` accepted via :ref:`take_connection<class_UDPServer_method_take_connection>` (remote peers will not be notified).
 
 ----
 
@@ -119,5 +156,5 @@ Stops the server, closing the UDP socket if open. Will not disconnect any connec
 
 - :ref:`PacketPeerUDP<class_PacketPeerUDP>` **take_connection** **(** **)**
 
-Returns a :ref:`PacketPeerUDP<class_PacketPeerUDP>` connected to the address/port combination of the first packet in queue. Will return ``null`` if no packet is in queue. See also :ref:`PacketPeerUDP.connect_to_host<class_PacketPeerUDP_method_connect_to_host>`.
+Returns the first pending connection (connected to the appropriate address/port). Will return ``null`` if no new connection is available. See also :ref:`is_connection_available<class_UDPServer_method_is_connection_available>`, :ref:`PacketPeerUDP.connect_to_host<class_PacketPeerUDP_method_connect_to_host>`.
 

+ 40 - 30
classes/class_vector2.rst

@@ -130,19 +130,19 @@ Constants
 
 - **AXIS_Y** = **1** --- Enumerated value for the Y axis.
 
-- **ZERO** = **Vector2( 0, 0 )** --- Zero vector.
+- **ZERO** = **Vector2( 0, 0 )** --- Zero vector, a vector with all components set to ``0``.
 
-- **ONE** = **Vector2( 1, 1 )** --- One vector.
+- **ONE** = **Vector2( 1, 1 )** --- One vector, a vector with all components set to ``1``.
 
-- **INF** = **Vector2( inf, inf )** --- Infinity vector.
+- **INF** = **Vector2( inf, inf )** --- Infinity vector, a vector with all components set to :ref:`@GDScript.INF<class_@GDScript_constant_INF>`.
 
-- **LEFT** = **Vector2( -1, 0 )** --- Left unit vector.
+- **LEFT** = **Vector2( -1, 0 )** --- Left unit vector. Represents the direction of left.
 
-- **RIGHT** = **Vector2( 1, 0 )** --- Right unit vector.
+- **RIGHT** = **Vector2( 1, 0 )** --- Right unit vector. Represents the direction of right.
 
-- **UP** = **Vector2( 0, -1 )** --- Up unit vector.
+- **UP** = **Vector2( 0, -1 )** --- Up unit vector. Y is down in 2D, so this vector points -Y.
 
-- **DOWN** = **Vector2( 0, 1 )** --- Down unit vector.
+- **DOWN** = **Vector2( 0, 1 )** --- Down unit vector. Y is down in 2D, so this vector points +Y.
 
 Property Descriptions
 ---------------------
@@ -192,7 +192,7 @@ Returns a new vector with all components in absolute values (i.e. positive).
 
 - :ref:`float<class_float>` **angle** **(** **)**
 
-Returns the vector's angle in radians with respect to the X axis, or ``(1, 0)`` vector.
+Returns this vector's angle with respect to the X axis, or ``(1, 0)`` vector, in radians.
 
 Equivalent to the result of :ref:`@GDScript.atan2<class_@GDScript_method_atan2>` when called with the vector's :ref:`y<class_Vector2_property_y>` and :ref:`x<class_Vector2_property_x>` as parameters: ``atan2(y, x)``.
 
@@ -202,7 +202,7 @@ Equivalent to the result of :ref:`@GDScript.atan2<class_@GDScript_method_atan2>`
 
 - :ref:`float<class_float>` **angle_to** **(** :ref:`Vector2<class_Vector2>` to **)**
 
-Returns the angle in radians between the two vectors.
+Returns the angle to the given vector, in radians.
 
 ----
 
@@ -210,7 +210,7 @@ Returns the angle in radians between the two vectors.
 
 - :ref:`float<class_float>` **angle_to_point** **(** :ref:`Vector2<class_Vector2>` to **)**
 
-Returns the angle in radians between the line connecting the two points and the X coordinate.
+Returns the angle between the line connecting the two points and the X axis, in radians.
 
 ----
 
@@ -218,7 +218,7 @@ Returns the angle in radians between the line connecting the two points and the
 
 - :ref:`float<class_float>` **aspect** **(** **)**
 
-Returns the ratio of :ref:`x<class_Vector2_property_x>` to :ref:`y<class_Vector2_property_y>`.
+Returns the aspect ratio of this vector, the ratio of :ref:`x<class_Vector2_property_x>` to :ref:`y<class_Vector2_property_y>`.
 
 ----
 
@@ -234,7 +234,7 @@ Returns the vector "bounced off" from a plane defined by the given normal.
 
 - :ref:`Vector2<class_Vector2>` **ceil** **(** **)**
 
-Returns the vector with all components rounded up.
+Returns the vector with all components rounded up (towards positive infinity).
 
 ----
 
@@ -242,7 +242,7 @@ Returns the vector with all components rounded up.
 
 - :ref:`Vector2<class_Vector2>` **clamped** **(** :ref:`float<class_float>` length **)**
 
-Returns the vector with a maximum length.
+Returns the vector with a maximum length by limiting its length to ``length``.
 
 ----
 
@@ -250,7 +250,7 @@ Returns the vector with a maximum length.
 
 - :ref:`float<class_float>` **cross** **(** :ref:`Vector2<class_Vector2>` with **)**
 
-Returns the 2-dimensional analog of the cross product with the given vector.
+Returns the cross product of this vector and ``with``.
 
 ----
 
@@ -258,7 +258,7 @@ Returns the 2-dimensional analog of the cross product with the given vector.
 
 - :ref:`Vector2<class_Vector2>` **cubic_interpolate** **(** :ref:`Vector2<class_Vector2>` b, :ref:`Vector2<class_Vector2>` pre_a, :ref:`Vector2<class_Vector2>` post_b, :ref:`float<class_float>` t **)**
 
-Cubically interpolates between this vector and ``b`` using ``pre_a`` and ``post_b`` as handles, and returns the result at position ``t``. ``t`` is in the range of ``0.0 - 1.0``, representing the amount of interpolation.
+Cubically interpolates between this vector and ``b`` using ``pre_a`` and ``post_b`` as handles, and returns the result at position ``t``. ``t`` is on the range of 0.0 to 1.0, representing the amount of interpolation.
 
 ----
 
@@ -274,7 +274,9 @@ Returns the normalized vector pointing from this vector to ``b``.
 
 - :ref:`float<class_float>` **distance_squared_to** **(** :ref:`Vector2<class_Vector2>` to **)**
 
-Returns the squared distance to vector ``b``. Prefer this function over :ref:`distance_to<class_Vector2_method_distance_to>` if you need to sort vectors or need the squared distance for some formula.
+Returns the squared distance between this vector and ``b``.
+
+This method runs faster than :ref:`distance_to<class_Vector2_method_distance_to>`, so prefer it if you need to compare vectors or need the squared distance for some formula.
 
 ----
 
@@ -282,7 +284,7 @@ Returns the squared distance to vector ``b``. Prefer this function over :ref:`di
 
 - :ref:`float<class_float>` **distance_to** **(** :ref:`Vector2<class_Vector2>` to **)**
 
-Returns the distance to vector ``b``.
+Returns the distance between this vector and ``to``.
 
 ----
 
@@ -290,7 +292,13 @@ Returns the distance to vector ``b``.
 
 - :ref:`float<class_float>` **dot** **(** :ref:`Vector2<class_Vector2>` with **)**
 
-Returns the dot product with vector ``b``.
+Returns the dot product of this vector and ``with``. This can be used to compare the angle between two vectors. For example, this can be used to determine whether an enemy is facing the player.
+
+The dot product will be ``0`` for a straight angle (90 degrees), greater than 0 for angles narrower than 90 degrees and lower than 0 for angles wider than 90 degrees.
+
+When using unit (normalized) vectors, the result will always be between ``-1.0`` (180 degree angle) when the vectors are facing opposite directions, and ``1.0`` (0 degree angle) when the vectors are aligned.
+
+**Note:** ``a.dot(b)`` is equivalent to ``b.dot(a)``.
 
 ----
 
@@ -298,7 +306,7 @@ Returns the dot product with vector ``b``.
 
 - :ref:`Vector2<class_Vector2>` **floor** **(** **)**
 
-Returns the vector with all components rounded down.
+Returns the vector with all components rounded down (towards negative infinity).
 
 ----
 
@@ -314,7 +322,7 @@ Returns ``true`` if this vector and ``v`` are approximately equal, by running :r
 
 - :ref:`bool<class_bool>` **is_normalized** **(** **)**
 
-Returns ``true`` if the vector is normalized.
+Returns ``true`` if the vector is normalized, and false otherwise.
 
 ----
 
@@ -322,7 +330,7 @@ Returns ``true`` if the vector is normalized.
 
 - :ref:`float<class_float>` **length** **(** **)**
 
-Returns the vector's length.
+Returns the length (magnitude) of this vector.
 
 ----
 
@@ -330,7 +338,9 @@ Returns the vector's length.
 
 - :ref:`float<class_float>` **length_squared** **(** **)**
 
-Returns the vector's length squared. Prefer this method over :ref:`length<class_Vector2_method_length>` if you need to sort vectors or need the squared length for some formula.
+Returns the squared length (squared magnitude) of this vector.
+
+This method runs faster than :ref:`length<class_Vector2_method_length>`, so prefer it if you need to compare vectors or need the squared distance for some formula.
 
 ----
 
@@ -338,7 +348,7 @@ Returns the vector's length squared. Prefer this method over :ref:`length<class_
 
 - :ref:`Vector2<class_Vector2>` **linear_interpolate** **(** :ref:`Vector2<class_Vector2>` b, :ref:`float<class_float>` t **)**
 
-Returns the result of the linear interpolation between this vector and ``b`` by amount ``t``. ``t`` is in the range of ``0.0 - 1.0``, representing the amount of interpolation.
+Returns the result of the linear interpolation between this vector and ``b`` by amount ``t``. ``t`` is on the range of 0.0 to 1.0, representing the amount of interpolation.
 
 ----
 
@@ -362,7 +372,7 @@ Returns the vector scaled to unit length. Equivalent to ``v / v.length()``.
 
 - :ref:`Vector2<class_Vector2>` **posmod** **(** :ref:`float<class_float>` mod **)**
 
-Returns a vector composed of the ``fposmod`` of this vector's components and ``mod``.
+Returns a vector composed of the :ref:`@GDScript.fposmod<class_@GDScript_method_fposmod>` of this vector's components and ``mod``.
 
 ----
 
@@ -370,7 +380,7 @@ Returns a vector composed of the ``fposmod`` of this vector's components and ``m
 
 - :ref:`Vector2<class_Vector2>` **posmodv** **(** :ref:`Vector2<class_Vector2>` modv **)**
 
-Returns a vector composed of the ``fposmod`` of this vector's components and ``modv``'s components.
+Returns a vector composed of the :ref:`@GDScript.fposmod<class_@GDScript_method_fposmod>` of this vector's components and ``modv``'s components.
 
 ----
 
@@ -410,7 +420,7 @@ Returns the vector with all components rounded to the nearest integer, with half
 
 - :ref:`Vector2<class_Vector2>` **sign** **(** **)**
 
-Returns the vector with each component set to one or negative one, depending on the signs of the components.
+Returns the vector with each component set to one or negative one, depending on the signs of the components, or zero if the component is zero, by calling :ref:`@GDScript.sign<class_@GDScript_method_sign>` on each component.
 
 ----
 
@@ -418,7 +428,7 @@ Returns the vector with each component set to one or negative one, depending on
 
 - :ref:`Vector2<class_Vector2>` **slerp** **(** :ref:`Vector2<class_Vector2>` b, :ref:`float<class_float>` t **)**
 
-Returns the result of spherical linear interpolation between this vector and ``b``, by amount ``t``. ``t`` is in the range of ``0.0 - 1.0``, representing the amount of interpolation.
+Returns the result of spherical linear interpolation between this vector and ``b``, by amount ``t``. ``t`` is on the range of 0.0 to 1.0, representing the amount of interpolation.
 
 **Note:** Both vectors must be normalized.
 
@@ -428,7 +438,7 @@ Returns the result of spherical linear interpolation between this vector and ``b
 
 - :ref:`Vector2<class_Vector2>` **slide** **(** :ref:`Vector2<class_Vector2>` n **)**
 
-Returns the component of the vector along a plane defined by the given normal.
+Returns this vector slid along a plane defined by the given normal.
 
 ----
 
@@ -436,7 +446,7 @@ Returns the component of the vector along a plane defined by the given normal.
 
 - :ref:`Vector2<class_Vector2>` **snapped** **(** :ref:`Vector2<class_Vector2>` by **)**
 
-Returns the vector snapped to a grid with the given size.
+Returns this vector with each component snapped to the nearest multiple of ``step``. This can also be used to round to an arbitrary number of decimals.
 
 ----
 
@@ -444,5 +454,5 @@ Returns the vector snapped to a grid with the given size.
 
 - :ref:`Vector2<class_Vector2>` **tangent** **(** **)**
 
-Returns a perpendicular vector.
+Returns a perpendicular vector rotated 90 degrees counter-clockwise compared to the original, with the same length.
 

+ 44 - 32
classes/class_vector3.rst

@@ -140,23 +140,23 @@ Constants
 
 - **AXIS_Z** = **2** --- Enumerated value for the Z axis. Returned by :ref:`max_axis<class_Vector3_method_max_axis>` and :ref:`min_axis<class_Vector3_method_min_axis>`.
 
-- **ZERO** = **Vector3( 0, 0, 0 )** --- Zero vector.
+- **ZERO** = **Vector3( 0, 0, 0 )** --- Zero vector, a vector with all components set to ``0``.
 
-- **ONE** = **Vector3( 1, 1, 1 )** --- One vector.
+- **ONE** = **Vector3( 1, 1, 1 )** --- One vector, a vector with all components set to ``1``.
 
-- **INF** = **Vector3( inf, inf, inf )** --- Infinity vector.
+- **INF** = **Vector3( inf, inf, inf )** --- Infinity vector, a vector with all components set to :ref:`@GDScript.INF<class_@GDScript_constant_INF>`.
 
-- **LEFT** = **Vector3( -1, 0, 0 )** --- Left unit vector.
+- **LEFT** = **Vector3( -1, 0, 0 )** --- Left unit vector. Represents the local direction of left, and the global direction of west.
 
-- **RIGHT** = **Vector3( 1, 0, 0 )** --- Right unit vector.
+- **RIGHT** = **Vector3( 1, 0, 0 )** --- Right unit vector. Represents the local direction of right, and the global direction of east.
 
 - **UP** = **Vector3( 0, 1, 0 )** --- Up unit vector.
 
 - **DOWN** = **Vector3( 0, -1, 0 )** --- Down unit vector.
 
-- **FORWARD** = **Vector3( 0, 0, -1 )** --- Forward unit vector.
+- **FORWARD** = **Vector3( 0, 0, -1 )** --- Forward unit vector. Represents the local direction of forward, and the global direction of north.
 
-- **BACK** = **Vector3( 0, 0, 1 )** --- Back unit vector.
+- **BACK** = **Vector3( 0, 0, 1 )** --- Back unit vector. Represents the local direction of back, and the global direction of south.
 
 Property Descriptions
 ---------------------
@@ -218,7 +218,7 @@ Returns a new vector with all components in absolute values (i.e. positive).
 
 - :ref:`float<class_float>` **angle_to** **(** :ref:`Vector3<class_Vector3>` to **)**
 
-Returns the minimum angle to the given vector.
+Returns the minimum angle to the given vector, in radians.
 
 ----
 
@@ -234,7 +234,7 @@ Returns the vector "bounced off" from a plane defined by the given normal.
 
 - :ref:`Vector3<class_Vector3>` **ceil** **(** **)**
 
-Returns a new vector with all components rounded up.
+Returns a new vector with all components rounded up (towards positive infinity).
 
 ----
 
@@ -242,7 +242,7 @@ Returns a new vector with all components rounded up.
 
 - :ref:`Vector3<class_Vector3>` **cross** **(** :ref:`Vector3<class_Vector3>` b **)**
 
-Returns the cross product with ``b``.
+Returns the cross product of this vector and ``b``.
 
 ----
 
@@ -250,7 +250,7 @@ Returns the cross product with ``b``.
 
 - :ref:`Vector3<class_Vector3>` **cubic_interpolate** **(** :ref:`Vector3<class_Vector3>` b, :ref:`Vector3<class_Vector3>` pre_a, :ref:`Vector3<class_Vector3>` post_b, :ref:`float<class_float>` t **)**
 
-Performs a cubic interpolation between vectors ``pre_a``, ``a``, ``b``, ``post_b`` (``a`` is current), by the given amount ``t``. ``t`` is in the range of ``0.0 - 1.0``, representing the amount of interpolation.
+Performs a cubic interpolation between vectors ``pre_a``, ``a``, ``b``, ``post_b`` (``a`` is current), by the given amount ``t``. ``t`` is on the range of 0.0 to 1.0, representing the amount of interpolation.
 
 ----
 
@@ -266,7 +266,9 @@ Returns the normalized vector pointing from this vector to ``b``.
 
 - :ref:`float<class_float>` **distance_squared_to** **(** :ref:`Vector3<class_Vector3>` b **)**
 
-Returns the squared distance to ``b``. Prefer this function over :ref:`distance_to<class_Vector3_method_distance_to>` if you need to sort vectors or need the squared distance for some formula.
+Returns the squared distance between this vector and ``b``.
+
+This method runs faster than :ref:`distance_to<class_Vector3_method_distance_to>`, so prefer it if you need to compare vectors or need the squared distance for some formula.
 
 ----
 
@@ -274,7 +276,7 @@ Returns the squared distance to ``b``. Prefer this function over :ref:`distance_
 
 - :ref:`float<class_float>` **distance_to** **(** :ref:`Vector3<class_Vector3>` b **)**
 
-Returns the distance to ``b``.
+Returns the distance between this vector and ``b``.
 
 ----
 
@@ -282,7 +284,13 @@ Returns the distance to ``b``.
 
 - :ref:`float<class_float>` **dot** **(** :ref:`Vector3<class_Vector3>` b **)**
 
-Returns the dot product with ``b``.
+Returns the dot product of this vector and ``b``. This can be used to compare the angle between two vectors. For example, this can be used to determine whether an enemy is facing the player.
+
+The dot product will be ``0`` for a straight angle (90 degrees), greater than 0 for angles narrower than 90 degrees and lower than 0 for angles wider than 90 degrees.
+
+When using unit (normalized) vectors, the result will always be between ``-1.0`` (180 degree angle) when the vectors are facing opposite directions, and ``1.0`` (0 degree angle) when the vectors are aligned.
+
+**Note:** ``a.dot(b)`` is equivalent to ``b.dot(a)``.
 
 ----
 
@@ -290,7 +298,7 @@ Returns the dot product with ``b``.
 
 - :ref:`Vector3<class_Vector3>` **floor** **(** **)**
 
-Returns a new vector with all components rounded down.
+Returns a new vector with all components rounded down (towards negative infinity).
 
 ----
 
@@ -314,7 +322,7 @@ Returns ``true`` if this vector and ``v`` are approximately equal, by running :r
 
 - :ref:`bool<class_bool>` **is_normalized** **(** **)**
 
-Returns ``true`` if the vector is normalized.
+Returns ``true`` if the vector is normalized, and false otherwise.
 
 ----
 
@@ -322,7 +330,7 @@ Returns ``true`` if the vector is normalized.
 
 - :ref:`float<class_float>` **length** **(** **)**
 
-Returns the vector's length.
+Returns the length (magnitude) of this vector.
 
 ----
 
@@ -330,7 +338,9 @@ Returns the vector's length.
 
 - :ref:`float<class_float>` **length_squared** **(** **)**
 
-Returns the vector's length squared. Prefer this function over :ref:`length<class_Vector3_method_length>` if you need to sort vectors or need the squared length for some formula.
+Returns the squared length (squared magnitude) of this vector.
+
+This method runs faster than :ref:`length<class_Vector3_method_length>`, so prefer it if you need to compare vectors or need the squared distance for some formula.
 
 ----
 
@@ -338,7 +348,7 @@ Returns the vector's length squared. Prefer this function over :ref:`length<clas
 
 - :ref:`Vector3<class_Vector3>` **linear_interpolate** **(** :ref:`Vector3<class_Vector3>` b, :ref:`float<class_float>` t **)**
 
-Returns the result of the linear interpolation between this vector and ``b`` by amount ``t``. ``t`` is in the range of ``0.0 - 1.0``, representing the amount of interpolation..
+Returns the result of the linear interpolation between this vector and ``b`` by amount ``t``. ``t`` is on the range of 0.0 to 1.0, representing the amount of interpolation.
 
 ----
 
@@ -346,7 +356,7 @@ Returns the result of the linear interpolation between this vector and ``b`` by
 
 - :ref:`int<class_int>` **max_axis** **(** **)**
 
-Returns the axis of the vector's largest value. See ``AXIS_*`` constants.
+Returns the axis of the vector's largest value. See ``AXIS_*`` constants. If all components are equal, this method returns :ref:`AXIS_X<class_Vector3_constant_AXIS_X>`.
 
 ----
 
@@ -354,7 +364,7 @@ Returns the axis of the vector's largest value. See ``AXIS_*`` constants.
 
 - :ref:`int<class_int>` **min_axis** **(** **)**
 
-Returns the axis of the vector's smallest value. See ``AXIS_*`` constants.
+Returns the axis of the vector's smallest value. See ``AXIS_*`` constants. If all components are equal, this method returns :ref:`AXIS_Z<class_Vector3_constant_AXIS_Z>`.
 
 ----
 
@@ -362,7 +372,7 @@ Returns the axis of the vector's smallest value. See ``AXIS_*`` constants.
 
 - :ref:`Vector3<class_Vector3>` **move_toward** **(** :ref:`Vector3<class_Vector3>` to, :ref:`float<class_float>` delta **)**
 
-Moves the vector toward ``to`` by the fixed ``delta`` amount.
+Moves this vector toward ``to`` by the fixed ``delta`` amount.
 
 ----
 
@@ -386,7 +396,7 @@ Returns the outer product with ``b``.
 
 - :ref:`Vector3<class_Vector3>` **posmod** **(** :ref:`float<class_float>` mod **)**
 
-Returns a vector composed of the ``fposmod`` of this vector's components and ``mod``.
+Returns a vector composed of the :ref:`@GDScript.fposmod<class_@GDScript_method_fposmod>` of this vector's components and ``mod``.
 
 ----
 
@@ -394,7 +404,7 @@ Returns a vector composed of the ``fposmod`` of this vector's components and ``m
 
 - :ref:`Vector3<class_Vector3>` **posmodv** **(** :ref:`Vector3<class_Vector3>` modv **)**
 
-Returns a vector composed of the ``fposmod`` of this vector's components and ``modv``'s components.
+Returns a vector composed of the :ref:`@GDScript.fposmod<class_@GDScript_method_fposmod>` of this vector's components and ``modv``'s components.
 
 ----
 
@@ -402,7 +412,7 @@ Returns a vector composed of the ``fposmod`` of this vector's components and ``m
 
 - :ref:`Vector3<class_Vector3>` **project** **(** :ref:`Vector3<class_Vector3>` b **)**
 
-Returns the vector projected onto the vector ``b``.
+Returns this vector projected onto another vector ``b``.
 
 ----
 
@@ -410,7 +420,7 @@ Returns the vector projected onto the vector ``b``.
 
 - :ref:`Vector3<class_Vector3>` **reflect** **(** :ref:`Vector3<class_Vector3>` n **)**
 
-Returns the vector reflected from a plane defined by the given normal.
+Returns this vector reflected from a plane defined by the given normal.
 
 ----
 
@@ -418,7 +428,7 @@ Returns the vector reflected from a plane defined by the given normal.
 
 - :ref:`Vector3<class_Vector3>` **rotated** **(** :ref:`Vector3<class_Vector3>` axis, :ref:`float<class_float>` phi **)**
 
-Rotates the vector around a given axis by ``phi`` radians. The axis must be a normalized vector.
+Rotates this vector around a given axis by ``phi`` radians. The axis must be a normalized vector.
 
 ----
 
@@ -426,7 +436,7 @@ Rotates the vector around a given axis by ``phi`` radians. The axis must be a no
 
 - :ref:`Vector3<class_Vector3>` **round** **(** **)**
 
-Returns the vector with all components rounded to the nearest integer, with halfway cases rounded away from zero.
+Returns this vector with all components rounded to the nearest integer, with halfway cases rounded away from zero.
 
 ----
 
@@ -434,7 +444,7 @@ Returns the vector with all components rounded to the nearest integer, with half
 
 - :ref:`Vector3<class_Vector3>` **sign** **(** **)**
 
-Returns the vector with each component set to one or negative one, depending on the signs of the components.
+Returns a vector with each component set to one or negative one, depending on the signs of this vector's components, or zero if the component is zero, by calling :ref:`@GDScript.sign<class_@GDScript_method_sign>` on each component.
 
 ----
 
@@ -442,7 +452,7 @@ Returns the vector with each component set to one or negative one, depending on
 
 - :ref:`Vector3<class_Vector3>` **slerp** **(** :ref:`Vector3<class_Vector3>` b, :ref:`float<class_float>` t **)**
 
-Returns the result of spherical linear interpolation between this vector and ``b``, by amount ``t``. ``t`` is in the range of ``0.0 - 1.0``, representing the amount of interpolation.
+Returns the result of spherical linear interpolation between this vector and ``b``, by amount ``t``. ``t`` is on the range of 0.0 to 1.0, representing the amount of interpolation.
 
 **Note:** Both vectors must be normalized.
 
@@ -452,7 +462,7 @@ Returns the result of spherical linear interpolation between this vector and ``b
 
 - :ref:`Vector3<class_Vector3>` **slide** **(** :ref:`Vector3<class_Vector3>` n **)**
 
-Returns the component of the vector along a plane defined by the given normal.
+Returns this vector slid along a plane defined by the given normal.
 
 ----
 
@@ -460,7 +470,7 @@ Returns the component of the vector along a plane defined by the given normal.
 
 - :ref:`Vector3<class_Vector3>` **snapped** **(** :ref:`Vector3<class_Vector3>` by **)**
 
-Returns the vector snapped to a grid with the given size.
+Returns this vector with each component snapped to the nearest multiple of ``step``. This can also be used to round to an arbitrary number of decimals.
 
 ----
 
@@ -470,3 +480,5 @@ Returns the vector snapped to a grid with the given size.
 
 Returns a diagonal matrix with the vector as main diagonal.
 
+This is equivalent to a Basis with no rotation or shearing and this vector's components set as the scale.
+

+ 2 - 0
classes/class_vehiclebody.rst

@@ -20,6 +20,8 @@ This node implements all the physics logic needed to simulate a car. It is based
 
 **Note:** The origin point of your VehicleBody will determine the center of gravity of your vehicle so it is better to keep this low and move the :ref:`CollisionShape<class_CollisionShape>` and :ref:`MeshInstance<class_MeshInstance>` upwards.
 
+**Note:** This class has known issues and isn't designed to provide realistic 3D vehicle physics. If you want advanced vehicle physics, you will probably have to write your own physics integration using another :ref:`PhysicsBody<class_PhysicsBody>` class.
+
 Properties
 ----------
 

+ 2 - 0
classes/class_vehiclewheel.rst

@@ -18,6 +18,8 @@ Description
 
 This node needs to be used as a child node of :ref:`VehicleBody<class_VehicleBody>` and simulates the behavior of one of its wheels. This node also acts as a collider to detect if the wheel is touching a surface.
 
+**Note:** This class has known issues and isn't designed to provide realistic 3D vehicle physics. If you want advanced vehicle physics, you will probably have to write your own physics integration using another :ref:`PhysicsBody<class_PhysicsBody>` class.
+
 Properties
 ----------
 

+ 3 - 1
classes/class_visibilityenabler.rst

@@ -18,7 +18,9 @@ Description
 
 The VisibilityEnabler will disable :ref:`RigidBody<class_RigidBody>` and :ref:`AnimationPlayer<class_AnimationPlayer>` nodes when they are not visible. It will only affect other nodes within the same scene as the VisibilityEnabler itself.
 
-**Note:** VisibilityEnabler uses an approximate heuristic for performance reasons. It doesn't take walls and other occlusion into account. If you need exact visibility checking, use another method such as adding an :ref:`Area<class_Area>` node as a child of a :ref:`Camera<class_Camera>` node.
+If you just want to receive notifications, use :ref:`VisibilityNotifier<class_VisibilityNotifier>` instead.
+
+**Note:** VisibilityEnabler uses an approximate heuristic for performance reasons. It doesn't take walls and other occlusion into account. The heuristic is an implementation detail and may change in future versions. If you need precise visibility checking, use another method such as adding an :ref:`Area<class_Area>` node as a child of a :ref:`Camera<class_Camera>` node and/or :ref:`Vector3.dot<class_Vector3_method_dot>`.
 
 **Note:** VisibilityEnabler will not affect nodes added after scene initialization.
 

+ 3 - 1
classes/class_visibilityenabler2d.rst

@@ -18,7 +18,9 @@ Description
 
 The VisibilityEnabler2D will disable :ref:`RigidBody2D<class_RigidBody2D>`, :ref:`AnimationPlayer<class_AnimationPlayer>`, and other nodes when they are not visible. It will only affect nodes with the same root node as the VisibilityEnabler2D, and the root node itself.
 
-**Note:** For performance reasons, VisibilityEnabler2D uses an approximate heuristic with precision determined by :ref:`ProjectSettings.world/2d/cell_size<class_ProjectSettings_property_world/2d/cell_size>`. If you need exact visibility checking, use another method such as adding an :ref:`Area2D<class_Area2D>` node as a child of a :ref:`Camera2D<class_Camera2D>` node.
+If you just want to receive notifications, use :ref:`VisibilityNotifier2D<class_VisibilityNotifier2D>` instead.
+
+**Note:** For performance reasons, VisibilityEnabler2D uses an approximate heuristic with precision determined by :ref:`ProjectSettings.world/2d/cell_size<class_ProjectSettings_property_world/2d/cell_size>`. If you need precise visibility checking, use another method such as adding an :ref:`Area2D<class_Area2D>` node as a child of a :ref:`Camera2D<class_Camera2D>` node.
 
 **Note:** VisibilityEnabler2D will not affect nodes added after scene initialization.
 

+ 3 - 1
classes/class_visibilitynotifier.rst

@@ -20,7 +20,9 @@ Description
 
 The VisibilityNotifier detects when it is visible on the screen. It also notifies when its bounding rectangle enters or exits the screen or a :ref:`Camera<class_Camera>`'s view.
 
-**Note:** VisibilityNotifier uses an approximate heuristic for performance reasons. It doesn't take walls and other occlusion into account. If you need exact visibility checking, use another method such as adding an :ref:`Area<class_Area>` node as a child of a :ref:`Camera<class_Camera>` node.
+If you want nodes to be disabled automatically when they exit the screen, use :ref:`VisibilityEnabler<class_VisibilityEnabler>` instead.
+
+**Note:** VisibilityNotifier uses an approximate heuristic for performance reasons. It does't take walls and other occlusion into account. The heuristic is an implementation detail and may change in future versions. If you need precise visibility checking, use another method such as adding an :ref:`Area<class_Area>` node as a child of a :ref:`Camera<class_Camera>` node and/or :ref:`Vector3.dot<class_Vector3_method_dot>`.
 
 Properties
 ----------

+ 3 - 1
classes/class_visibilitynotifier2d.rst

@@ -20,7 +20,9 @@ Description
 
 The VisibilityNotifier2D detects when it is visible on the screen. It also notifies when its bounding rectangle enters or exits the screen or a viewport.
 
-**Note:** For performance reasons, VisibilityNotifier2D uses an approximate heuristic with precision determined by :ref:`ProjectSettings.world/2d/cell_size<class_ProjectSettings_property_world/2d/cell_size>`. If you need exact visibility checking, use another method such as adding an :ref:`Area2D<class_Area2D>` node as a child of a :ref:`Camera2D<class_Camera2D>` node.
+If you want nodes to be disabled automatically when they exit the screen, use :ref:`VisibilityEnabler2D<class_VisibilityEnabler2D>` instead.
+
+**Note:** For performance reasons, VisibilityNotifier2D uses an approximate heuristic with precision determined by :ref:`ProjectSettings.world/2d/cell_size<class_ProjectSettings_property_world/2d/cell_size>`. If you need precise visibility checking, use another method such as adding an :ref:`Area2D<class_Area2D>` node as a child of a :ref:`Camera2D<class_Camera2D>` node.
 
 Properties
 ----------

+ 1 - 1
classes/class_visualserver.rst

@@ -1049,7 +1049,7 @@ enum **ArrayFormat**:
 
 - **ARRAY_FLAG_USE_16_BIT_BONES** = **524288** --- Flag used to mark that the array uses 16-bit bones instead of 8-bit.
 
-- **ARRAY_COMPRESS_DEFAULT** = **97280** --- Used to set flags :ref:`ARRAY_COMPRESS_VERTEX<class_VisualServer_constant_ARRAY_COMPRESS_VERTEX>`, :ref:`ARRAY_COMPRESS_NORMAL<class_VisualServer_constant_ARRAY_COMPRESS_NORMAL>`, :ref:`ARRAY_COMPRESS_TANGENT<class_VisualServer_constant_ARRAY_COMPRESS_TANGENT>`, :ref:`ARRAY_COMPRESS_COLOR<class_VisualServer_constant_ARRAY_COMPRESS_COLOR>`, :ref:`ARRAY_COMPRESS_TEX_UV<class_VisualServer_constant_ARRAY_COMPRESS_TEX_UV>`, :ref:`ARRAY_COMPRESS_TEX_UV2<class_VisualServer_constant_ARRAY_COMPRESS_TEX_UV2>` and :ref:`ARRAY_COMPRESS_WEIGHTS<class_VisualServer_constant_ARRAY_COMPRESS_WEIGHTS>` quickly.
+- **ARRAY_COMPRESS_DEFAULT** = **97280** --- Used to set flags :ref:`ARRAY_COMPRESS_NORMAL<class_VisualServer_constant_ARRAY_COMPRESS_NORMAL>`, :ref:`ARRAY_COMPRESS_TANGENT<class_VisualServer_constant_ARRAY_COMPRESS_TANGENT>`, :ref:`ARRAY_COMPRESS_COLOR<class_VisualServer_constant_ARRAY_COMPRESS_COLOR>`, :ref:`ARRAY_COMPRESS_TEX_UV<class_VisualServer_constant_ARRAY_COMPRESS_TEX_UV>`, :ref:`ARRAY_COMPRESS_TEX_UV2<class_VisualServer_constant_ARRAY_COMPRESS_TEX_UV2>` and :ref:`ARRAY_COMPRESS_WEIGHTS<class_VisualServer_constant_ARRAY_COMPRESS_WEIGHTS>` quickly.
 
 ----