Thanks to EnragedOxygen on Discord for tracking this one down!
Turns out you need to be very explicit with typing otherwise c# will default to int.
This will cause the component dirty mask to overflow for any components > 32, which causes weird issues since it will cancel each other out (both the bitmask creation and the following IsDirty(componentIndex) overflow)
This will lead to serialization on the component index < 32 and > 32 (so index 33 would deserialize for both 1 and 33), but only sometimes
Generally in real games this would show up as a size mismatch which is how EnragedOxygen discovered it
I've done a quick project wide search for any other occurences, but it seems like everywhere else is typed correctly
Thanks to EnragedOxygen on Discord for tracking this one down!
Turns out you need to be very explicit with typing otherwise c# will default to int. This will cause the component dirty mask to overflow for any components > 32, which causes weird issues since it will cancel each other out (both the bitmask creation and the following IsDirty(componentIndex) overflow) This will lead to serialization on the component index < 32 and > 32 (so index 33 would deserialize for both 1 and 33), but only sometimes Generally in real games this would show up as a size mismatch which is how EnragedOxygen discovered it
I've done a quick project wide search for any other occurences, but it seems like everywhere else is typed correctly