diff --git a/natvis/godot-cpp.natvis b/natvis/godot-cpp.natvis
index 380327f99..34ebdf971 100644
--- a/natvis/godot-cpp.natvis
+++ b/natvis/godot-cpp.natvis
@@ -23,15 +23,25 @@
fields as 8-byte slots: [0]=refcount, [1]=unknown, [2]=_cowdata._ptr, [3]=read_only, ...
Index [2] reaches _cowdata._ptr at offset +16 (verified by LLDB memory dump).
Cast _ptr to unsigned long long* so [-1] reads the CowData element count 8 bytes before data. -->
+
+
- {{empty}}
- {{size={_cow()[-1]}}}
+
+ {{empty}}
+ {{size={_size()}}}
- - _cow()[-1]
-
- _cow()[-1]
+ - 0,d
+ - _size()
+
+ _size()
(godot::Variant*)_cow()
@@ -106,30 +116,425 @@
{{type={_type()}}}
- _type()
- *(godot::String*)(opaque+8)
- *(godot::Vector2*)(opaque+8)
- *(godot::Vector2i*)(opaque+8)
- *(godot::Rect2*)(opaque+8)
- *(godot::Rect2i*)(opaque+8)
- *(godot::Vector3*)(opaque+8)
- *(godot::Vector3i*)(opaque+8)
- **(godot::Transform2D**)(opaque+8)
- *(godot::Vector4*)(opaque+8)
- *(godot::Vector4i*)(opaque+8)
- *(godot::Plane*)(opaque+8)
- *(godot::Quaternion*)(opaque+8)
- **(godot::AABB**)(opaque+8)
- **(godot::Basis**)(opaque+8)
- **(godot::Transform3D**)(opaque+8)
- **(godot::Projection**)(opaque+8)
- *(godot::Color*)(opaque+8)
- *(godot::StringName*)(opaque+8)
- *(godot::NodePath*)(opaque+8)
- *(godot::RID*)(opaque+8)
- *(godot::Callable*)(opaque+8)
- *(godot::Signal*)(opaque+8)
- *(godot::Dictionary*)(opaque+8)
- *(godot::Array*)(opaque+8)
+ - *reinterpret_cast<bool*>(opaque+8)
+ - *reinterpret_cast<long long*>(opaque+8)
+ - *reinterpret_cast<double*>(opaque+8)
+ - *(godot::String*)(opaque+8)
+ - *(godot::Vector2*)(opaque+8)
+ - *(godot::Vector2i*)(opaque+8)
+ - *(godot::Rect2*)(opaque+8)
+ - *(godot::Rect2i*)(opaque+8)
+ - *(godot::Vector3*)(opaque+8)
+ - *(godot::Vector3i*)(opaque+8)
+ - **(godot::Transform2D**)(opaque+8)
+ - *(godot::Vector4*)(opaque+8)
+ - *(godot::Vector4i*)(opaque+8)
+ - *(godot::Plane*)(opaque+8)
+ - *(godot::Quaternion*)(opaque+8)
+ - **(godot::AABB**)(opaque+8)
+ - **(godot::Basis**)(opaque+8)
+ - **(godot::Transform3D**)(opaque+8)
+ - **(godot::Projection**)(opaque+8)
+ - *(godot::Color*)(opaque+8)
+ - *(godot::StringName*)(opaque+8)
+ - *(godot::NodePath*)(opaque+8)
+ - *(godot::RID*)(opaque+8)
+ - *(godot::Callable*)(opaque+8)
+ - *(godot::Signal*)(opaque+8)
+ - *(godot::Dictionary*)(opaque+8)
+ - *(godot::Array*)(opaque+8)
+
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (unsigned char*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (int*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (long long*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (float*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (double*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (godot::String*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (godot::Vector2*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (godot::Vector3*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (godot::Vector4*)_cow()
+
+
+
+
+
+
+
+ {{empty}}
+ {{size={_size()}}}
+
+ - 0,d
+ - _size()
+
+ _size()
+ (godot::Color*)_cow()
+
+
+
+
+
+ ({x,g}, {y,g})
+
+ - x
+ - y
+
+
+
+
+ ({x}, {y})
+
+ - x
+ - y
+
+
+
+
+ ({x,g}, {y,g}, {z,g})
+
+ - x
+ - y
+ - z
+
+
+
+
+ ({x}, {y}, {z})
+
+ - x
+ - y
+ - z
+
+
+
+
+ ({x,g}, {y,g}, {z,g}, {w,g})
+
+ - x
+ - y
+ - z
+ - w
+
+
+
+
+ ({x}, {y}, {z}, {w})
+
+ - x
+ - y
+ - z
+ - w
+
+
+
+
+ ({x,g}, {y,g}, {z,g}, {w,g})
+
+ - x
+ - y
+ - z
+ - w
+
+
+
+
+ ({r,g}, {g,g}, {b,g}, {a,g})
+
+ - r
+ - g
+ - b
+ - a
+
+
+
+
+ [N: {normal}, D: {d,g}]
+
+ - normal,nr
+ - d
+
+
+
+
+ [P: {position}, S: {size}]
+
+ - position,nr
+ - size,nr
+
+
+
+
+ [P: {position}, S: {size}]
+
+ - position,nr
+ - size,nr
+
+
+
+
+ [P: {position}, S: {size}]
+
+ - position,nr
+ - size,nr
+
+
+
+
+ [X: {rows[0]}, Y: {rows[1]}, Z: {rows[2]}]
+
+ - rows[0],nr
+ - rows[1],nr
+ - rows[2],nr
+
+
+
+
+ [X: {columns[0]}, Y: {columns[1]}, Z: {columns[2]}, W: {columns[3]}]
+
+ - columns[0],nr
+ - columns[1],nr
+ - columns[2],nr
+ - columns[3],nr
+
+
+
+
+ [X: {columns[0]}, Y: {columns[1]}, O: {columns[2]}]
+
+ - columns[0],nr
+ - columns[1],nr
+ - columns[2],nr
+
+
+
+
+ [X: ({basis.rows[0].x,g}, {basis.rows[1].x,g}, {basis.rows[2].x,g}), Y: ({basis.rows[0].y,g},
+ {basis.rows[1].y,g}, {basis.rows[2].y,g}), Z: ({basis.rows[0].z,g}, {basis.rows[1].z,g},
+ {basis.rows[2].z,g}), O: {origin}]
+
+
+
+ ({basis.rows[0].x,g}, {basis.rows[1].x,g}, {basis.rows[2].x,g})
+
+ - basis.rows[0].x
+ - basis.rows[1].x
+ - basis.rows[2].x
+
+
+
+ ({basis.rows[0].y,g}, {basis.rows[1].y,g}, {basis.rows[2].y,g})
+
+ - basis.rows[0].y
+ - basis.rows[1].y
+ - basis.rows[2].y
+
+
+
+ ({basis.rows[0].z,g}, {basis.rows[1].z,g}, {basis.rows[2].z,g})
+
+ - basis.rows[0].z
+ - basis.rows[1].z
+ - basis.rows[2].z
+
+
+ - origin,nr
+
+
+
+
+
+
+
+
+
+
+ [empty]
+ {{absolute={_absolute()}, path[{_path_size()}], subpath[{_subpath_size()}]}}
+
+
+ - _absolute()
+
+ [empty]
+ {{size={_path_size()}}}
+
+
+ _path_size()
+ (godot::StringName*)_path_ptr()
+
+
+
+
+ [empty]
+ {{size={_subpath_size()}}}
+
+
+ _subpath_size()
+ (godot::StringName*)_subpath_ptr()
+
+
+