Skip to content

Commit

Permalink
support pc2 trackmesh and some notes on mime data
Browse files Browse the repository at this point in the history
  • Loading branch information
ilodev committed Nov 14, 2024
1 parent 657b98e commit 6483449
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 29 deletions.
7 changes: 6 additions & 1 deletion generated/formats/trackmesh/compounds/Lod.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
class Lod(MemStruct):

"""
PC: 16 bytes
PC : 16 bytes
PC2: 20 bytes
"""

__name__ = 'Lod'
Expand All @@ -17,6 +18,7 @@ def __init__(self, context, arg=0, template=None, set_default=True):
self.b = name_type_map['Uint'](self.context, 0, None)
self.c = name_type_map['Uint'](self.context, 0, None)
self.distance = name_type_map['Float'](self.context, 0, None)
self.e = name_type_map['Uint'].from_value(1)
if set_default:
self.set_defaults()

Expand All @@ -27,6 +29,7 @@ def _get_attribute_list(cls):
yield 'b', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'c', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'distance', name_type_map['Float'], (0, None), (False, None), (None, None)
yield 'e', name_type_map['Uint'], (0, None), (False, 1), (lambda context: context.is_pc_2, None)

@classmethod
def _get_filtered_attribute_list(cls, instance, include_abstract=True):
Expand All @@ -35,3 +38,5 @@ def _get_filtered_attribute_list(cls, instance, include_abstract=True):
yield 'b', name_type_map['Uint'], (0, None), (False, None)
yield 'c', name_type_map['Uint'], (0, None), (False, None)
yield 'distance', name_type_map['Float'], (0, None), (False, None)
if instance.context.is_pc_2:
yield 'e', name_type_map['Uint'], (0, None), (False, 1)
8 changes: 7 additions & 1 deletion generated/formats/trackmesh/compounds/OffsetData.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
class OffsetData(MemStruct):

"""
PC: 64 bytes
-- Rename this to TrackMesh_Offset
PC : 64 bytes
PC2: 72 bytes
"""

__name__ = 'OffsetData'
Expand All @@ -21,6 +23,7 @@ def __init__(self, context, arg=0, template=None, set_default=True):
self.count = name_type_map['Uint'](self.context, 0, None)
self.z_4 = name_type_map['Uint'](self.context, 0, None)
self.z_5 = name_type_map['Uint'](self.context, 0, None)
self.z_6 = name_type_map['Uint64'](self.context, 0, None)
self.offset_id = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
self.mdl_2_name = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
self.bone_name = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
Expand All @@ -41,6 +44,7 @@ def _get_attribute_list(cls):
yield 'count', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'z_4', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'z_5', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'z_6', name_type_map['Uint64'], (0, None), (False, None), (lambda context: context.is_pc_2, None)

@classmethod
def _get_filtered_attribute_list(cls, instance, include_abstract=True):
Expand All @@ -56,3 +60,5 @@ def _get_filtered_attribute_list(cls, instance, include_abstract=True):
yield 'count', name_type_map['Uint'], (0, None), (False, None)
yield 'z_4', name_type_map['Uint'], (0, None), (False, None)
yield 'z_5', name_type_map['Uint'], (0, None), (False, None)
if instance.context.is_pc_2:
yield 'z_6', name_type_map['Uint64'], (0, None), (False, None)
7 changes: 6 additions & 1 deletion generated/formats/trackmesh/compounds/TrackMeshElement.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
class TrackMeshElement(MemStruct):

"""
PC: 120 bytes
PC : 120 bytes
PC2: 128 bytes
"""

__name__ = 'TrackMesh_Element'
Expand All @@ -20,6 +21,7 @@ def __init__(self, context, arg=0, template=None, set_default=True):
self.start_3_count = name_type_map['Uint64'](self.context, 0, None)
self.stop_1_count = name_type_map['Uint64'](self.context, 0, None)
self.stop_2_count = name_type_map['Uint64'](self.context, 0, None)
self.unknown_1 = name_type_map['Uint64'].from_value(0)
self.element_id = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
self.objects_list = name_type_map['Pointer'](self.context, self.objects_list_count, name_type_map['ZStringList'])
self.flanges = name_type_map['Pointer'](self.context, self.flanges_count, name_type_map['ZStringList'])
Expand Down Expand Up @@ -49,6 +51,7 @@ def _get_attribute_list(cls):
yield 'stop_1_count', name_type_map['Uint64'], (0, None), (False, None), (None, None)
yield 'stop_2', name_type_map['Pointer'], (None, name_type_map['ZStringList']), (False, None), (None, None)
yield 'stop_2_count', name_type_map['Uint64'], (0, None), (False, None), (None, None)
yield 'unknown_1', name_type_map['Uint64'], (0, None), (False, 0), (lambda context: context.is_pc_2, None)

@classmethod
def _get_filtered_attribute_list(cls, instance, include_abstract=True):
Expand All @@ -68,3 +71,5 @@ def _get_filtered_attribute_list(cls, instance, include_abstract=True):
yield 'stop_1_count', name_type_map['Uint64'], (0, None), (False, None)
yield 'stop_2', name_type_map['Pointer'], (instance.stop_2_count, name_type_map['ZStringList']), (False, None)
yield 'stop_2_count', name_type_map['Uint64'], (0, None), (False, None)
if instance.context.is_pc_2:
yield 'unknown_1', name_type_map['Uint64'], (0, None), (False, 0)
20 changes: 16 additions & 4 deletions generated/formats/trackmesh/compounds/TrackMeshObject.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
class TrackMeshObject(MemStruct):

"""
PC: 48 bytes
PC : 48 bytes
PC2: 64 bytes
"""

__name__ = 'TrackMesh_Object'
Expand All @@ -15,8 +16,11 @@ def __init__(self, context, arg=0, template=None, set_default=True):
super().__init__(context, arg, template, set_default=False)
self.type = name_type_map['Uint'](self.context, 0, None)
self.b = name_type_map['Uint'](self.context, 0, None)
self.c = name_type_map['Uint64'](self.context, 0, None)
self.c = name_type_map['Uint'](self.context, 0, None)
self.xtra_1 = name_type_map['Uint'].from_value(0)
self.xtra_2 = name_type_map['Uint64'](self.context, 0, None)
self.d = name_type_map['Uint64'](self.context, 0, None)
self.e = name_type_map['Uint64'](self.context, 0, None)
self.place_id = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
self.file = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
self.offset_id = name_type_map['Pointer'](self.context, 0, name_type_map['ZString'])
Expand All @@ -30,9 +34,12 @@ def _get_attribute_list(cls):
yield 'file', name_type_map['Pointer'], (0, name_type_map['ZString']), (False, None), (None, None)
yield 'type', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'b', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'c', name_type_map['Uint64'], (0, None), (False, None), (None, None)
yield 'c', name_type_map['Uint'], (0, None), (False, None), (None, None)
yield 'xtra_1', name_type_map['Uint'], (0, None), (False, 0), (None, None)
yield 'xtra_2', name_type_map['Uint64'], (0, None), (False, None), (lambda context: context.is_pc_2, None)
yield 'offset_id', name_type_map['Pointer'], (0, name_type_map['ZString']), (False, None), (None, None)
yield 'd', name_type_map['Uint64'], (0, None), (False, None), (None, None)
yield 'e', name_type_map['Uint64'], (0, None), (False, None), (lambda context: context.is_pc_2, None)

@classmethod
def _get_filtered_attribute_list(cls, instance, include_abstract=True):
Expand All @@ -41,6 +48,11 @@ def _get_filtered_attribute_list(cls, instance, include_abstract=True):
yield 'file', name_type_map['Pointer'], (0, name_type_map['ZString']), (False, None)
yield 'type', name_type_map['Uint'], (0, None), (False, None)
yield 'b', name_type_map['Uint'], (0, None), (False, None)
yield 'c', name_type_map['Uint64'], (0, None), (False, None)
yield 'c', name_type_map['Uint'], (0, None), (False, None)
yield 'xtra_1', name_type_map['Uint'], (0, None), (False, 0)
if instance.context.is_pc_2:
yield 'xtra_2', name_type_map['Uint64'], (0, None), (False, None)
yield 'offset_id', name_type_map['Pointer'], (0, name_type_map['ZString']), (False, None)
yield 'd', name_type_map['Uint64'], (0, None), (False, None)
if instance.context.is_pc_2:
yield 'e', name_type_map['Uint64'], (0, None), (False, None)
34 changes: 23 additions & 11 deletions generated/formats/trackmesh/trackmesh.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,39 +14,47 @@
<add name="object_data_count" type="uint" />
<add name="element_data_count" type="uint64" />
<add name="lods" type="ArrayPointer" arg="lod_count" template="Lod"/>
<add name="lod_count" type="uint64" />
<add name="lod_count" type="uint64" /> -- change this to lods_count
<add name="heatmap_name" type="Pointer" template="ZString"/>
<add name="g" type="uint64" />
</compound>

<compound name="OffsetData" inherit="MemStruct">
PC: 64 bytes
<compound name="OffsetData" inherit="MemStruct"> -- Rename this to TrackMesh_Offset
PC : 64 bytes
PC2: 72 bytes
<add name="offset_id" type="Pointer" template="ZString"/>
<add name="mdl2_name" type="Pointer" template="ZString"/>When used this is a mdl2
<add name="mdl2_name" type="Pointer" template="ZString"/>When used this is a mdl2, rename so the 2 doesn't get messed up
<add name="Bone_name" type="Pointer" template="ZString"/>when used this is a bone of the model
<add name="relative_offset" type="Vector3" />
<add name="spacing" type="float" />
<add name="one" type="uint" />
<add name="a" type="float" />
<add name="b" type="float" />
<add name="count" type="uint" />
<add name="a" type="float" /> -- Min pitch to display
<add name="b" type="float" /> -- Min yaw to display
<add name="count" type="uint" /> -- Flags (4 = inverted)
<add name="z4" type="uint" />
<add name="z5" type="uint" />
<add name="z6" type="uint64" vercond="is_PC2"/>
</compound>

<compound name="TrackMesh_Object" inherit="MemStruct">
PC: 48 bytes
PC : 48 bytes
PC2: 64 bytes
<add name="place_id" type="Pointer" template="ZString"/>
<add name="file" type="Pointer" template="ZString"/> -- can be a prefab, a model, an object, hitcheck, an audio..
<add name="type" type="uint" /> -- this is what defines what the string 'file' means
<add name="b" type="uint" />
<add name="c" type="uint64" />
<add name="c" type="uint" />
<add name="xtra1" type="uint" default="0"/> -- this is a float in PC2, but before was part of c
<add name="xtra2" type="uint64" vercond="is_PC2"/>
<add name="offset_id" type="Pointer" template="ZString"/>
<add name="d" type="uint64" />
<add name="e" type="uint64" vercond="is_PC2"/>

</compound>

<compound name="TrackMesh_Element" inherit="MemStruct">
PC: 120 bytes
PC : 120 bytes
PC2: 128 bytes
<add name="element_id" type="Pointer" template="ZString"/>
<add name="Objects_List" type="Pointer" template="ZStringList" arg="objects_list_count" />
<add name="objects_list_count" type="uint64"/>
Expand All @@ -62,14 +70,18 @@
<add name="stop_1_count" type="uint64" />
<add name="stop_2" type="Pointer" template="ZStringList" arg="stop_2_count" />
<add name="stop_2_count" type="uint64" />
<add name="unknown1" type="uint64" vercond="is_PC2" default="0"/>
</compound>

<compound name="Lod" inherit="MemStruct">
PC: 16 bytes
PC : 16 bytes
PC2: 20 bytes
<add name="a" type="uint" />
<add name="b" type="uint" />
<add name="c" type="uint" />
<add name="distance" type="float" />
<add name="e" type="uint" vercond="is_PC2" default="1"/>

</compound>


Expand Down
34 changes: 23 additions & 11 deletions source/formats/trackmesh/trackmesh.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,39 +14,47 @@
<add name="object_data_count" type="uint" />
<add name="element_data_count" type="uint64" />
<add name="lods" type="ArrayPointer" arg="lod_count" template="Lod"/>
<add name="lod_count" type="uint64" />
<add name="lod_count" type="uint64" /> -- change this to lods_count
<add name="heatmap_name" type="Pointer" template="ZString"/>
<add name="g" type="uint64" />
</compound>

<compound name="OffsetData" inherit="MemStruct">
PC: 64 bytes
<compound name="OffsetData" inherit="MemStruct"> -- Rename this to TrackMesh_Offset
PC : 64 bytes
PC2: 72 bytes
<add name="offset_id" type="Pointer" template="ZString"/>
<add name="mdl2_name" type="Pointer" template="ZString"/>When used this is a mdl2
<add name="mdl2_name" type="Pointer" template="ZString"/>When used this is a mdl2, rename so the 2 doesn't get messed up
<add name="Bone_name" type="Pointer" template="ZString"/>when used this is a bone of the model
<add name="relative_offset" type="Vector3" />
<add name="spacing" type="float" />
<add name="one" type="uint" />
<add name="a" type="float" />
<add name="b" type="float" />
<add name="count" type="uint" />
<add name="a" type="float" /> -- Min pitch to display
<add name="b" type="float" /> -- Min yaw to display
<add name="count" type="uint" /> -- Flags (4 = inverted)
<add name="z4" type="uint" />
<add name="z5" type="uint" />
<add name="z6" type="uint64" vercond="is_PC2"/>
</compound>

<compound name="TrackMesh_Object" inherit="MemStruct">
PC: 48 bytes
PC : 48 bytes
PC2: 64 bytes
<add name="place_id" type="Pointer" template="ZString"/>
<add name="file" type="Pointer" template="ZString"/> -- can be a prefab, a model, an object, hitcheck, an audio..
<add name="type" type="uint" /> -- this is what defines what the string 'file' means
<add name="b" type="uint" />
<add name="c" type="uint64" />
<add name="c" type="uint" />
<add name="xtra1" type="uint" default="0"/> -- this is a float in PC2, but before was part of c
<add name="xtra2" type="uint64" vercond="is_PC2"/>
<add name="offset_id" type="Pointer" template="ZString"/>
<add name="d" type="uint64" />
<add name="e" type="uint64" vercond="is_PC2"/>

</compound>

<compound name="TrackMesh_Element" inherit="MemStruct">
PC: 120 bytes
PC : 120 bytes
PC2: 128 bytes
<add name="element_id" type="Pointer" template="ZString"/>
<add name="Objects_List" type="Pointer" template="ZStringList" arg="objects_list_count" />
<add name="objects_list_count" type="uint64"/>
Expand All @@ -62,14 +70,18 @@
<add name="stop_1_count" type="uint64" />
<add name="stop_2" type="Pointer" template="ZStringList" arg="stop_2_count" />
<add name="stop_2_count" type="uint64" />
<add name="unknown1" type="uint64" vercond="is_PC2" default="0"/>
</compound>

<compound name="Lod" inherit="MemStruct">
PC: 16 bytes
PC : 16 bytes
PC2: 20 bytes
<add name="a" type="uint" />
<add name="b" type="uint" />
<add name="c" type="uint" />
<add name="distance" type="float" />
<add name="e" type="uint" vercond="is_PC2" default="1"/>

</compound>


Expand Down

0 comments on commit 6483449

Please sign in to comment.