ObjectUpdate packets (0x80803df9), some further details...
I'm just about certain the length of the bitfield, in bytes, is (num_fields+1)/8 rounded up.
If there are 3 fields, the bitfield will take 1 byte, values 0x01 to 0x07
If there are 7 fields, the bitfield will take 1 bytes, values 0x01 to 0x7f
If there are 8 fields, the bitfield will take TWO bytes. The first byte 0x01 to 0xff, the second byte always 0.
Similarly if there are 24 fields (EngConsole) the "full update" will have a bitfield of 0xff 0xff 0xff 0x00. The "Unknown (byte) This value always seems to be 0x00" is a seemingly-superflous extra byte in the bitfield, you'll find the same on any other object which has a multiple of 8 fields.
The Object lists within the ObjectUpdate packet always seem to be terminated by not only "the object type byte is 0x00", but by "0x00 0x00 0x00 0x00". 4 zero-bytes. Even though you'd half-expect a 1-byte object type and a 4-byte objectID. Yeah. :-D
I've further studied how objects have changed between versions...
PlayerShip (type 0x00)...
[ Hang on, why is your Velocity apparently from pi to negative pi / heading of 0=north etc? Crossed wires? ]
I've had an opportunity to play with 2.6.204-beta, and it adds (after "Unknown (bit 6.3, 4 bytes, new as of v2.4.0)") 2 fields, both bytes, corresponding to the setting for the Biosignal Frequency (0-4) and Power (0-10) which are part of the new the tag ordnance functionality.
Weapons Console (type 0x02), 2.6.204-beta now has 8 Ordnance counts corresponding to Homing, Nuke, Mine, EMP, PShock, Beacon, Probe, Tag (all bytes, and yes, the Ordnance Type enumeration needs updating to match). There is no "Unknown (bit 1.6, byte)", it became Beacons I guess. The Load Times, Statuses, Types, all move up. 8+6+6+6 = 26 bits in the bitfield (4 bytes)
Engineering console (0x03), Pretty sure that's a 24-bit field taking 4 bytes, so the "Unknown (byte) [...] always seems to be 0x00 [...] might be a reserved bit field byte for future engineering settings" was kinda right, it's bit field, ffffff00 when fully-populated.
NPC Ship (0x05) adds one new unknown 4-byte float after the "Beam frequency resistance (bit 6.3 - 6.7, float array)". You'll notice this would correspond to bit 6.8, which (according to the rules above) does indeed add another "always 0" byte to the bitfield. It's 48 bits, yet needs 7 bytes, see? "full object" bit mask is ffffffffffff00.
Anomaly (0x08) Has had a 6-bit (1-byte) field since 2.3.0 (yes I do mean 2.3.0). You already have X/Y/Z (floats) and Upgrade(int). bits 1.5 and 1.6 correspond to two 4-byte fields, unknown purpose, not even sure if they're integers or floats, I'm trying to work out if I've ever seen anything that's not 0x00000000
Nebula (0x0a) I see no evidence for "Unused? (bit 1.7, int) Unused? (bit 1.8, int)" at all, in any of my captures.
Torpedo (0x0b) Starts with X,Y,Z. "Unknown (byte)" is because an 8-bit field takes 2 bytes as above. There are no corresponding bits 2.1 to 2.8, the max value of this 8-bit field is "0xff 0x00".
Creature (0x0f) After Creature type (int32 enum) come the unknown fields. I THINK they are int, int, float, float, float, float, but I'll admit I haven't dug deeply. More importantly, 2.3.0+ added 4 more 4-byte fields which I guess we can call "Unknown (bit 2.7, 4 bytes, v2.3.0+)" up to "(bit 3.2, 4 bytes, v2.3.0+)", and yes that increases the bitfield to 3 bytes
Drone (0x10) Is, and has "always been", on any version I've ever logged (2.2.0 to 2,6,204 incl), an 8-bit field (which according to the above rules takes 2 bytes, a fully-populated bitfield being 0xff 0x00). I see no evidence for the "Unknown (bit 2.1, float?, v2.1.5+)", but confess I don't seem to have v2.1.5 itself. That and the "Unused? (bits 2.2-2.8)" seem to be explained by the 8-bit field taking 2 bytes. Wish I could help with the number of Unknowns that still exist in this object :-(
To clarify bit counts in Version 2.6.204-beta:
- ObjType 0x01 45-bit field (6 bytes) PlayerShip
- ObjType 0x02 26-bit field (4 bytes) WeaponsConsole
- ObjType 0x03 24-bit field (4 bytes) EngConsole
- ObjType 0x04 84-bit field (11 bytes) Upgrades - there's no new upgrades? :-/
- ObjType 0x05 48-bit field (7 bytes) NPCShip
- ObjType 0x06 14-bit field (2 bytes) Base
- ObjType 0x07 3-bit field (1 byte) Mine
- ObjType 0x08 6-bit field (1 byte) Anomaly
- ObjType 0x0a 6-bit field (1 byte) Nebula
- ObjType 0x0b 8-bit field (2 bytes) Torpedo
- ObjType 0x0c 3-bit field (1 byte) BlackHole
- ObjType 0x0d 3-bit field (1 byte) Asteroid
- ObjType 0x0f 16-bit field (3 bytes) Creature
- ObjType 0x10 8-bit field (2 bytes) Drone
Not tested Meshes.