diff --git a/generated/formats/ms2/__init__.py b/generated/formats/ms2/__init__.py index 506b9e485..0480b1c73 100644 --- a/generated/formats/ms2/__init__.py +++ b/generated/formats/ms2/__init__.py @@ -345,11 +345,22 @@ def update_buffer_2_bytes(self): for wrapper in model.meshes: wrapper.mesh.assign_buffer_info(self.buffer_infos) wrapper.mesh.write_data() + if is_pc(self.context): + for wrapper in model.meshes: + wrapper.mesh.write_verts() + for wrapper in model.meshes: + wrapper.mesh.write_weights() + for wrapper in model.meshes: + wrapper.mesh.write_tris() + for wrapper in model.meshes: + wrapper.mesh.write_uvs() # update LodInfo logging.debug(f"Updating lod vertex counts") for lod in model.lods: lod.vertex_count = sum(ob.mesh.vertex_count for ob in lod.objects) lod.tri_index_count = sum(ob.mesh.tri_index_count for ob in lod.objects) + if is_pc(self.context): + lod.tri_index_count -= 4 # only used by PC vertex_offset_within_lod = 0 for ob in lod.objects: @@ -466,10 +477,11 @@ def clear(self): # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Environment/Scenery/Themes/FT_FairyTale/FT_Topiary/FT_Topiary/models.ms2", read_editable=True) # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Environment/Scenery/Themes/PR_Pirate/PR_Redcoat/PR_Redcoat/models.ms2", read_editable=True) # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Rides/FlatRides/Chair-O-Plane/FR_COP/models.ms2", read_editable=True) - m.load("C:/Users/arnfi/Desktop/models.ms2", read_editable=True) + m.load("C:/Users/arnfi/Desktop/dino_.ms2", read_editable=True) + # m.load("C:/Users/arnfi/Desktop/models.ms2", read_editable=True) print(m) - # m.save("C:/Users/arnfi/Desktop/dino_save.ms2") - m.load("C:/Users/arnfi/Desktop/models_polyp.ms2", read_editable=True) + m.save("C:/Users/arnfi/Desktop/dino_save.ms2") + # m.load("C:/Users/arnfi/Desktop/models_polyp.ms2", read_editable=True) print(m) # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Rides/FlatRides/360_Power/FR_360PWR/models.ms2", read_editable=True) diff --git a/generated/formats/ms2/compounds/PcMeshData.py b/generated/formats/ms2/compounds/PcMeshData.py index 1e63f611b..6a57d5ae0 100644 --- a/generated/formats/ms2/compounds/PcMeshData.py +++ b/generated/formats/ms2/compounds/PcMeshData.py @@ -212,21 +212,28 @@ def read_tris(self): index_count = self.tri_index_count // self.shell_count self.tri_indices = self.read_pc_array(np.uint16, self.tri_offset, index_count) - def write_data(self): - # write to the buffer_info that has been assigned to mesh + def write_verts(self): self.vertex_count = len(self.verts_data) - self.tri_index_count = self.tri_index_count_a = len(self.tri_indices) * self.shell_count - # write vertices self.vertex_offset = self.write_pc_array(self.verts_data) - self.uv_offset = self.write_pc_array(self.uv_data) + + def write_weights(self): if self.use_weights: self.weights_offset = self.write_pc_array(self.weights_data) else: self.weights_offset = 0 - # write tris + + def write_tris(self): + self.tri_index_count = self.tri_index_count_a = len(self.tri_indices) * self.shell_count self.tri_offset = self.write_pc_array(self.tri_indices) # todo shells? # extend tri array according to shell count # for shell in range(self.shell_count-1): # self.write_pc_array(self.tri_indices) + def write_uvs(self): + self.uv_offset = self.write_pc_array(self.uv_data) + + def write_data(self): + # order separately: verts, weights, tris, uvs + pass + diff --git a/source/formats/ms2/__init__.py b/source/formats/ms2/__init__.py index 4a6c70917..ac3167651 100644 --- a/source/formats/ms2/__init__.py +++ b/source/formats/ms2/__init__.py @@ -344,11 +344,22 @@ def update_buffer_2_bytes(self): for wrapper in model.meshes: wrapper.mesh.assign_buffer_info(self.buffer_infos) wrapper.mesh.write_data() + if is_pc(self.context): + for wrapper in model.meshes: + wrapper.mesh.write_verts() + for wrapper in model.meshes: + wrapper.mesh.write_weights() + for wrapper in model.meshes: + wrapper.mesh.write_tris() + for wrapper in model.meshes: + wrapper.mesh.write_uvs() # update LodInfo logging.debug(f"Updating lod vertex counts") for lod in model.lods: lod.vertex_count = sum(ob.mesh.vertex_count for ob in lod.objects) lod.tri_index_count = sum(ob.mesh.tri_index_count for ob in lod.objects) + if is_pc(self.context): + lod.tri_index_count -= 4 # only used by PC vertex_offset_within_lod = 0 for ob in lod.objects: @@ -465,10 +476,11 @@ def clear(self): # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Environment/Scenery/Themes/FT_FairyTale/FT_Topiary/FT_Topiary/models.ms2", read_editable=True) # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Environment/Scenery/Themes/PR_Pirate/PR_Redcoat/PR_Redcoat/models.ms2", read_editable=True) # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Rides/FlatRides/Chair-O-Plane/FR_COP/models.ms2", read_editable=True) - m.load("C:/Users/arnfi/Desktop/models.ms2", read_editable=True) + m.load("C:/Users/arnfi/Desktop/dino_.ms2", read_editable=True) + # m.load("C:/Users/arnfi/Desktop/models.ms2", read_editable=True) print(m) - # m.save("C:/Users/arnfi/Desktop/dino_save.ms2") - m.load("C:/Users/arnfi/Desktop/models_polyp.ms2", read_editable=True) + m.save("C:/Users/arnfi/Desktop/dino_save.ms2") + # m.load("C:/Users/arnfi/Desktop/models_polyp.ms2", read_editable=True) print(m) # m.load("C:/Users/arnfi/Desktop/Coding/Frontier/PC OVLs/walker_export/Content0/Rides/FlatRides/360_Power/FR_360PWR/models.ms2", read_editable=True) diff --git a/source/formats/ms2/compounds/PcMeshData.py b/source/formats/ms2/compounds/PcMeshData.py index 94c34c891..e80d3c30a 100644 --- a/source/formats/ms2/compounds/PcMeshData.py +++ b/source/formats/ms2/compounds/PcMeshData.py @@ -127,20 +127,27 @@ def read_tris(self): index_count = self.tri_index_count // self.shell_count self.tri_indices = self.read_pc_array(np.uint16, self.tri_offset, index_count) - def write_data(self): - # write to the buffer_info that has been assigned to mesh + def write_verts(self): self.vertex_count = len(self.verts_data) - self.tri_index_count = self.tri_index_count_a = len(self.tri_indices) * self.shell_count - # write vertices self.vertex_offset = self.write_pc_array(self.verts_data) - self.uv_offset = self.write_pc_array(self.uv_data) + + def write_weights(self): if self.use_weights: self.weights_offset = self.write_pc_array(self.weights_data) else: self.weights_offset = 0 - # write tris + + def write_tris(self): + self.tri_index_count = self.tri_index_count_a = len(self.tri_indices) * self.shell_count self.tri_offset = self.write_pc_array(self.tri_indices) # todo shells? # extend tri array according to shell count # for shell in range(self.shell_count-1): # self.write_pc_array(self.tri_indices) + + def write_uvs(self): + self.uv_offset = self.write_pc_array(self.uv_data) + + def write_data(self): + # order separately: verts, weights, tris, uvs + pass diff --git a/version.txt b/version.txt index b9810c187..6b1da9d55 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -e317e8e57 - Fri Dec 15 19:03:49 2023 +0100 \ No newline at end of file +73c33b9d0 - Fri Dec 15 20:25:36 2023 +0100 \ No newline at end of file