| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609 | :article_outdated: True.. _doc_binary_serialization_api:Binary serialization API========================Introduction------------Godot has a serialization API based on Variant. It's used forconverting data types to an array of bytes efficiently. This API is exposedvia the global :ref:`bytes_to_var() <class_@GlobalScope_method_bytes_to_var>`and :ref:`var_to_bytes() <class_@GlobalScope_method_var_to_bytes>` functions,but it is also used in the ``get_var`` and ``store_var`` methods of:ref:`class_FileAccess` as well as the packet APIs for :ref:`class_PacketPeer`.This format is *not* used for binary scenes and resources.Full Objects vs Object instance IDs-----------------------------------If a variable is serialized with ``full_objects = true``, then any Objectscontained in the variable will be serialized and included in the result. Thisis recursive.If ``full_objects = false``, then only the instance IDs will be serialized forany Objects contained in the variable.Packet specification--------------------The packet is designed to be always padded to 4 bytes. All values arelittle-endian-encoded. All packets have a 4-byte header representing aninteger, specifying the type of data.The lowest value two bytes are used to determine the type, while the highest valuetwo bytes contain flags:::    base_type = val & 0xFFFF;    flags = val >> 16;+--------+--------------------------+| Type   | Value                    |+========+==========================+| 0      | null                     |+--------+--------------------------+| 1      | bool                     |+--------+--------------------------+| 2      | integer                  |+--------+--------------------------+| 3      | float                    |+--------+--------------------------+| 4      | string                   |+--------+--------------------------+| 5      | vector2                  |+--------+--------------------------+| 6      | rect2                    |+--------+--------------------------+| 7      | vector3                  |+--------+--------------------------+| 8      | transform2d              |+--------+--------------------------+| 9      | plane                    |+--------+--------------------------+| 10     | quaternion               |+--------+--------------------------+| 11     | aabb                     |+--------+--------------------------+| 12     | basis                    |+--------+--------------------------+| 13     | transform3d              |+--------+--------------------------+| 14     | color                    |+--------+--------------------------+| 15     | node path                |+--------+--------------------------+| 16     | rid                      |+--------+--------------------------+| 17     | object                   |+--------+--------------------------+| 18     | dictionary               |+--------+--------------------------+| 19     | array                    |+--------+--------------------------+| 20     | raw array                |+--------+--------------------------+| 21     | int32 array              |+--------+--------------------------+| 22     | int64 array              |+--------+--------------------------+| 23     | float32 array            |+--------+--------------------------+| 24     | float64 array            |+--------+--------------------------+| 25     | string array             |+--------+--------------------------+| 26     | vector2 array            |+--------+--------------------------+| 27     | vector3 array            |+--------+--------------------------+| 28     | color array              |+--------+--------------------------+| 29     | max                      |+--------+--------------------------+Following this is the actual packet contents, which varies for each type ofpacket. Note that this assumes Godot is compiled with single-precision floats,which is the default. If Godot was compiled with double-precision floats, thelength of "Float" fields within data structures should be 8, and the offsetshould be ``(offset - 4) * 2 + 4``. The "float" type itself always uses doubleprecision.0: null~~~~~~~1: :ref:`bool<class_bool>`~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+-----------+---------------------------+| Offset   | Len   | Type      | Description               |+==========+=======+===========+===========================+| 4        | 4     | Integer   | 0 for False, 1 for True   |+----------+-------+-----------+---------------------------+2: :ref:`int<class_int>`~~~~~~~~~~~~~~~~~~~~~~~~If no flags are set (flags == 0), the integer is sent as a 32 bit integer:+----------+-------+-----------+--------------------------+| Offset   | Len   | Type      | Description              |+==========+=======+===========+==========================+| 4        | 4     | Integer   | 32-bit signed integer    |+----------+-------+-----------+--------------------------+If flag ``ENCODE_FLAG_64`` is set (``flags & 1 == 1``), the integer is sent asa 64-bit integer:+----------+-------+-----------+--------------------------+| Offset   | Len   | Type      | Description              |+==========+=======+===========+==========================+| 4        | 8     | Integer   | 64-bit signed integer    |+----------+-------+-----------+--------------------------+3: :ref:`float<class_float>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~If no flags are set (flags == 0), the float is sent as a 32 bit single precision:+----------+-------+---------+-----------------------------------+| Offset   | Len   | Type    | Description                       |+==========+=======+=========+===================================+| 4        | 4     | Float   | IEEE 754 single-precision float   |+----------+-------+---------+-----------------------------------+If flag ``ENCODE_FLAG_64`` is set (``flags & 1 == 1``), the float is sent asa 64-bit double precision number:+----------+-------+---------+-----------------------------------+| Offset   | Len   | Type    | Description                       |+==========+=======+=========+===================================+| 4        | 8     | Float   | IEEE 754 double-precision float   |+----------+-------+---------+-----------------------------------+4: :ref:`String<class_string>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+-----------+----------------------------+| Offset   | Len   | Type      | Description                |+==========+=======+===========+============================+| 4        | 4     | Integer   | String length (in bytes)   |+----------+-------+-----------+----------------------------+| 8        | X     | Bytes     | UTF-8 encoded string       |+----------+-------+-----------+----------------------------+This field is padded to 4 bytes.5: :ref:`Vector2<class_vector2>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+----------------+| Offset   | Len   | Type    | Description    |+==========+=======+=========+================+| 4        | 4     | Float   | X coordinate   |+----------+-------+---------+----------------+| 8        | 4     | Float   | Y coordinate   |+----------+-------+---------+----------------+6: :ref:`Rect2<class_rect2>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+----------------+| Offset   | Len   | Type    | Description    |+==========+=======+=========+================+| 4        | 4     | Float   | X coordinate   |+----------+-------+---------+----------------+| 8        | 4     | Float   | Y coordinate   |+----------+-------+---------+----------------+| 12       | 4     | Float   | X size         |+----------+-------+---------+----------------+| 16       | 4     | Float   | Y size         |+----------+-------+---------+----------------+7: :ref:`Vector3<class_vector3>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+----------------+| Offset   | Len   | Type    | Description    |+==========+=======+=========+================+| 4        | 4     | Float   | X coordinate   |+----------+-------+---------+----------------+| 8        | 4     | Float   | Y coordinate   |+----------+-------+---------+----------------+| 12       | 4     | Float   | Z coordinate   |+----------+-------+---------+----------------+8: :ref:`Transform2D<class_transform2d>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+---------------------------------------------------------------+| Offset   | Len   | Type    | Description                                                   |+==========+=======+=========+===============================================================+| 4        | 4     | Float   | The X component of the X column vector, accessed via [0][0]   |+----------+-------+---------+---------------------------------------------------------------+| 8        | 4     | Float   | The Y component of the X column vector, accessed via [0][1]   |+----------+-------+---------+---------------------------------------------------------------+| 12       | 4     | Float   | The X component of the Y column vector, accessed via [1][0]   |+----------+-------+---------+---------------------------------------------------------------+| 16       | 4     | Float   | The Y component of the Y column vector, accessed via [1][1]   |+----------+-------+---------+---------------------------------------------------------------+| 20       | 4     | Float   | The X component of the origin vector, accessed via [2][0]     |+----------+-------+---------+---------------------------------------------------------------+| 24       | 4     | Float   | The Y component of the origin vector, accessed via [2][1]     |+----------+-------+---------+---------------------------------------------------------------+9: :ref:`Plane<class_plane>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+---------------+| Offset   | Len   | Type    | Description   |+==========+=======+=========+===============+| 4        | 4     | Float   | Normal X      |+----------+-------+---------+---------------+| 8        | 4     | Float   | Normal Y      |+----------+-------+---------+---------------+| 12       | 4     | Float   | Normal Z      |+----------+-------+---------+---------------+| 16       | 4     | Float   | Distance      |+----------+-------+---------+---------------+10: :ref:`Quaternion<class_quaternion>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+---------------+| Offset   | Len   | Type    | Description   |+==========+=======+=========+===============+| 4        | 4     | Float   | Imaginary X   |+----------+-------+---------+---------------+| 8        | 4     | Float   | Imaginary Y   |+----------+-------+---------+---------------+| 12       | 4     | Float   | Imaginary Z   |+----------+-------+---------+---------------+| 16       | 4     | Float   | Real W        |+----------+-------+---------+---------------+11: :ref:`AABB<class_aabb>`~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+----------------+| Offset   | Len   | Type    | Description    |+==========+=======+=========+================+| 4        | 4     | Float   | X coordinate   |+----------+-------+---------+----------------+| 8        | 4     | Float   | Y coordinate   |+----------+-------+---------+----------------+| 12       | 4     | Float   | Z coordinate   |+----------+-------+---------+----------------+| 16       | 4     | Float   | X size         |+----------+-------+---------+----------------+| 20       | 4     | Float   | Y size         |+----------+-------+---------+----------------+| 24       | 4     | Float   | Z size         |+----------+-------+---------+----------------+12: :ref:`Basis<class_basis>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+---------------------------------------------------------------+| Offset   | Len   | Type    | Description                                                   |+==========+=======+=========+===============================================================+| 4        | 4     | Float   | The X component of the X column vector, accessed via [0][0]   |+----------+-------+---------+---------------------------------------------------------------+| 8        | 4     | Float   | The Y component of the X column vector, accessed via [0][1]   |+----------+-------+---------+---------------------------------------------------------------+| 12       | 4     | Float   | The Z component of the X column vector, accessed via [0][2]   |+----------+-------+---------+---------------------------------------------------------------+| 16       | 4     | Float   | The X component of the Y column vector, accessed via [1][0]   |+----------+-------+---------+---------------------------------------------------------------+| 20       | 4     | Float   | The Y component of the Y column vector, accessed via [1][1]   |+----------+-------+---------+---------------------------------------------------------------+| 24       | 4     | Float   | The Z component of the Y column vector, accessed via [1][2]   |+----------+-------+---------+---------------------------------------------------------------+| 28       | 4     | Float   | The X component of the Z column vector, accessed via [2][0]   |+----------+-------+---------+---------------------------------------------------------------+| 32       | 4     | Float   | The Y component of the Z column vector, accessed via [2][1]   |+----------+-------+---------+---------------------------------------------------------------+| 36       | 4     | Float   | The Z component of the Z column vector, accessed via [2][2]   |+----------+-------+---------+---------------------------------------------------------------+13: :ref:`Transform3D<class_transform3d>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+---------------------------------------------------------------+| Offset   | Len   | Type    | Description                                                   |+==========+=======+=========+===============================================================+| 4        | 4     | Float   | The X component of the X column vector, accessed via [0][0]   |+----------+-------+---------+---------------------------------------------------------------+| 8        | 4     | Float   | The Y component of the X column vector, accessed via [0][1]   |+----------+-------+---------+---------------------------------------------------------------+| 12       | 4     | Float   | The Z component of the X column vector, accessed via [0][2]   |+----------+-------+---------+---------------------------------------------------------------+| 16       | 4     | Float   | The X component of the Y column vector, accessed via [1][0]   |+----------+-------+---------+---------------------------------------------------------------+| 20       | 4     | Float   | The Y component of the Y column vector, accessed via [1][1]   |+----------+-------+---------+---------------------------------------------------------------+| 24       | 4     | Float   | The Z component of the Y column vector, accessed via [1][2]   |+----------+-------+---------+---------------------------------------------------------------+| 28       | 4     | Float   | The X component of the Z column vector, accessed via [2][0]   |+----------+-------+---------+---------------------------------------------------------------+| 32       | 4     | Float   | The Y component of the Z column vector, accessed via [2][1]   |+----------+-------+---------+---------------------------------------------------------------+| 36       | 4     | Float   | The Z component of the Z column vector, accessed via [2][2]   |+----------+-------+---------+---------------------------------------------------------------+| 40       | 4     | Float   | The X component of the origin vector, accessed via [3][0]     |+----------+-------+---------+---------------------------------------------------------------+| 44       | 4     | Float   | The Y component of the origin vector, accessed via [3][1]     |+----------+-------+---------+---------------------------------------------------------------+| 48       | 4     | Float   | The Z component of the origin vector, accessed via [3][2]     |+----------+-------+---------+---------------------------------------------------------------+14: :ref:`Color<class_color>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+---------+--------------------------------------------------------------+| Offset   | Len   | Type    | Description                                                  |+==========+=======+=========+==============================================================+| 4        | 4     | Float   | Red (typically 0..1, can be above 1 for overbright colors)   |+----------+-------+---------+--------------------------------------------------------------+| 8        | 4     | Float   | Green (typically 0..1, can be above 1 for overbright colors) |+----------+-------+---------+--------------------------------------------------------------+| 12       | 4     | Float   | Blue (typically 0..1, can be above 1 for overbright colors)  |+----------+-------+---------+--------------------------------------------------------------+| 16       | 4     | Float   | Alpha (0..1)                                                 |+----------+-------+---------+--------------------------------------------------------------+15: :ref:`NodePath<class_nodepath>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+-----------+-----------------------------------------------------------------------------------------+| Offset   | Len   | Type      | Description                                                                             |+==========+=======+===========+=========================================================================================+| 4        | 4     | Integer   | String length, or new format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF)           |+----------+-------+-----------+-----------------------------------------------------------------------------------------+For old format:~~~~~~~~~~~~~~~+----------+-------+---------+------------------------+| Offset   | Len   | Type    | Description            |+==========+=======+=========+========================+| 8        | X     | Bytes   | UTF-8 encoded string   |+----------+-------+---------+------------------------+Padded to 4 bytes.For new format:~~~~~~~~~~~~~~~+----------+-------+-----------+-------------------------------------+| Offset   | Len   | Type      | Description                         |+==========+=======+===========+=====================================+| 4        | 4     | Integer   | Sub-name count                      |+----------+-------+-----------+-------------------------------------+| 8        | 4     | Integer   | Flags (absolute: val&1 != 0 )       |+----------+-------+-----------+-------------------------------------+For each Name and Sub-Name+----------+-------+-----------+------------------------+| Offset   | Len   | Type      | Description            |+==========+=======+===========+========================+| X+0      | 4     | Integer   | String length          |+----------+-------+-----------+------------------------+| X+4      | X     | Bytes     | UTF-8 encoded string   |+----------+-------+-----------+------------------------+Every name string is padded to 4 bytes.16: :ref:`RID<class_rid>` (unsupported)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~17: :ref:`Object<class_object>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~An Object could be serialized in three different ways: as a null value, with``full_objects = false``, or with ``full_objects = true``.A null value^^^^^^^^^^^^+----------+-------+------------+-------------------------------------------------+| Offset   | Len   | Type       | Description                                     |+==========+=======+============+=================================================+| 4        | 4     | Integer    | Zero (32-bit signed integer)                    |+----------+-------+------------+-------------------------------------------------+``full_objects`` disabled^^^^^^^^^^^^^^^^^^^^^^^^^+----------+-------+------------+-------------------------------------------------+| Offset   | Len   | Type       | Description                                     |+==========+=======+============+=================================================+| 4        | 8     | Integer    | The Object instance ID (64-bit signed integer)  |+----------+-------+------------+-------------------------------------------------+``full_objects`` enabled^^^^^^^^^^^^^^^^^^^^^^^^+----------+-------+----------------+----------------------------------------------------------+| Offset   | Len   | Type           | Description                                              |+==========+=======+================+==========================================================+| 4        | 4     | Integer        | Class name (String length)                               |+----------+-------+----------------+----------------------------------------------------------+| 8        | X     | Bytes          | Class name (UTF-8 encoded string)                        |+----------+-------+----------------+----------------------------------------------------------+| X+8      | 4     | Integer        | The number of properties that are serialized             |+----------+-------+----------------+----------------------------------------------------------+For each property:+----------+-------+----------------+----------------------------------------------------------+| Offset   | Len   | Type           | Description                                              |+==========+=======+================+==========================================================+| Y        | 4     | Integer        | Property name (String length)                            |+----------+-------+----------------+----------------------------------------------------------+| Y+4      | Z     | Bytes          | Property name (UTF-8 encoded string)                     |+----------+-------+----------------+----------------------------------------------------------+| Y+4+Z    | W     | <variable>     | Property value, using this same format                   |+----------+-------+----------------+----------------------------------------------------------+.. Note::   Not all properties are included. Only properties that are configured with the   :ref:`PROPERTY_USAGE_STORAGE<class_@GlobalScope_constant_PROPERTY_USAGE_STORAGE>`   flag set will be serialized. You can add a new usage flag to a property by overriding the   :ref:`_get_property_list<class_Object_private_method__get_property_list>`   method in your class. You can also check how property usage is configured by   calling ``Object._get_property_list`` See   :ref:`PropertyUsageFlags<enum_@GlobalScope_PropertyUsageFlags>` for the   possible usage flags.18: :ref:`Dictionary<class_dictionary>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+-----------+---------------------------------------------------------------------+| Offset   | Len   | Type      | Description                                                         |+==========+=======+===========+=====================================================================+| 4        | 4     | Integer   | val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool)           |+----------+-------+-----------+---------------------------------------------------------------------+Then what follows is, for amount of "elements", pairs of key and value,one after the other, using this same format.19: :ref:`Array<class_array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+-----------+---------------------------------------------------------------------+| Offset   | Len   | Type      | Description                                                         |+==========+=======+===========+=====================================================================+| 4        | 4     | Integer   | val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool)           |+----------+-------+-----------+---------------------------------------------------------------------+Then what follows is, for amount of "elements", values one after theother, using this same format.20: :ref:`PackedByteArray<class_PackedByteArray>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+---------------+-------+-----------+------------------------+| Offset        | Len   | Type      | Description            |+===============+=======+===========+========================+| 4             | 4     | Integer   | Array length (Bytes)   |+---------------+-------+-----------+------------------------+| 8..8+length   | 1     | Byte      | Byte (0..255)          |+---------------+-------+-----------+------------------------+The array data is padded to 4 bytes.21: :ref:`PackedInt32Array<class_PackedInt32Array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+------------------+-------+-----------+---------------------------+| Offset           | Len   | Type      | Description               |+==================+=======+===========+===========================+| 4                | 4     | Integer   | Array length (Integers)   |+------------------+-------+-----------+---------------------------+| 8..8+length\*4   | 4     | Integer   | 32-bit signed integer     |+------------------+-------+-----------+---------------------------+22: :ref:`PackedInt64Array<class_PackedInt64Array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+------------------+-------+-----------+---------------------------+| Offset           | Len   | Type      | Description               |+==================+=======+===========+===========================+| 4                | 8     | Integer   | Array length (Integers)   |+------------------+-------+-----------+---------------------------+| 8..8+length\*8   | 8     | Integer   | 64-bit signed integer     |+------------------+-------+-----------+---------------------------+23: :ref:`PackedFloat32Array<class_PackedFloat32Array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+------------------+-------+-----------+-------------------------------------------+| Offset           | Len   | Type      | Description                               |+==================+=======+===========+===========================================+| 4                | 4     | Integer   | Array length (Floats)                     |+------------------+-------+-----------+-------------------------------------------+| 8..8+length\*4   | 4     | Integer   | 32-bit IEEE 754 single-precision float    |+------------------+-------+-----------+-------------------------------------------+24: :ref:`PackedFloat64Array<class_PackedFloat64Array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+------------------+-------+-----------+-------------------------------------------+| Offset           | Len   | Type      | Description                               |+==================+=======+===========+===========================================+| 4                | 4     | Integer   | Array length (Floats)                     |+------------------+-------+-----------+-------------------------------------------+| 8..8+length\*8   | 8     | Integer   | 64-bit IEEE 754 double-precision float    |+------------------+-------+-----------+-------------------------------------------+25: :ref:`PackedStringArray<class_PackedStringArray>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+----------+-------+-----------+--------------------------+| Offset   | Len   | Type      | Description              |+==========+=======+===========+==========================+| 4        | 4     | Integer   | Array length (Strings)   |+----------+-------+-----------+--------------------------+For each String:+----------+-------+-----------+------------------------+| Offset   | Len   | Type      | Description            |+==========+=======+===========+========================+| X+0      | 4     | Integer   | String length          |+----------+-------+-----------+------------------------+| X+4      | X     | Bytes     | UTF-8 encoded string   |+----------+-------+-----------+------------------------+Every string is padded to 4 bytes.26: :ref:`PackedVector2Array<class_PackedVector2Array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+-------------------+-------+-----------+----------------+| Offset            | Len   | Type      | Description    |+===================+=======+===========+================+| 4                 | 4     | Integer   | Array length   |+-------------------+-------+-----------+----------------+| 8..8+length\*8    | 4     | Float     | X coordinate   |+-------------------+-------+-----------+----------------+| 8..12+length\*8   | 4     | Float     | Y coordinate   |+-------------------+-------+-----------+----------------+27: :ref:`PackedVector3Array<class_PackedVector3Array>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+--------------------+-------+-----------+----------------+| Offset             | Len   | Type      | Description    |+====================+=======+===========+================+| 4                  | 4     | Integer   | Array length   |+--------------------+-------+-----------+----------------+| 8..8+length\*12    | 4     | Float     | X coordinate   |+--------------------+-------+-----------+----------------+| 8..12+length\*12   | 4     | Float     | Y coordinate   |+--------------------+-------+-----------+----------------+| 8..16+length\*12   | 4     | Float     | Z coordinate   |+--------------------+-------+-----------+----------------+28: :ref:`PackedColorArray<class_PackedColorArray>`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+--------------------+-------+-----------+--------------------------------------------------------------+| Offset             | Len   | Type      | Description                                                  |+====================+=======+===========+==============================================================+| 4                  | 4     | Integer   | Array length                                                 |+--------------------+-------+-----------+--------------------------------------------------------------+| 8..8+length\*16    | 4     | Float     | Red (typically 0..1, can be above 1 for overbright colors)   |+--------------------+-------+-----------+--------------------------------------------------------------+| 8..12+length\*16   | 4     | Float     | Green (typically 0..1, can be above 1 for overbright colors) |+--------------------+-------+-----------+--------------------------------------------------------------+| 8..16+length\*16   | 4     | Float     | Blue (typically 0..1, can be above 1 for overbright colors)  |+--------------------+-------+-----------+--------------------------------------------------------------+| 8..20+length\*16   | 4     | Float     | Alpha (0..1)                                                 |+--------------------+-------+-----------+--------------------------------------------------------------+
 |