-
Notifications
You must be signed in to change notification settings - Fork 118
Description
Follow up from #501
My hunch is that it has something to do with this:
message ProtoFlattenedSerializerField_t {
message polymorphic_field_t {
optional int32 polymorphic_field_serializer_name_sym = 1;
optional int32 polymorphic_field_serializer_version = 2;
}optional int32 var_type_sym = 1;
optional int32 var_name_sym = 2;
optional int32 bit_count = 3;
optional float low_value = 4;
optional float high_value = 5;
optional int32 encode_flags = 6;
optional int32 field_serializer_name_sym = 7;
optional int32 field_serializer_version = 8;
optional int32 send_node_sym = 9;
optional int32 var_encoder_sym = 10;
repeated .ProtoFlattenedSerializerField_t.polymorphic_field_t polymorphic_types = 11;
}
Polymorphic fields are there for 8 months now, and in my parser (clarity) I made a weird fix for a pointer field which had a few bits I could not understand.From a first glance, you also do not support polymorphic fields.
Now they start to use it, and this breaks it.
polymorphic pointers are indeed a thing. There is one entity in the replay I have here CCSGameModeRules, which uses it
When you decode a polymorphic pointer (if it is enabled, you can read a ubitvar (I think) to get the type it is referencing
Well, I would still recommend to look into polymorphic fields.
It got rid of this nasty workaround:The six bits are the polymorphic type of the field (as ubitvar, so it might be even more bits in other replays).