class Vector(bt.Struct( bt.Field(bt.float32,'x'), bt.Field(bt.float32,'y'), bt.Field(bt.float32,'z'))): pass class TextureCoordinate(bt.Struct(
class TevStage(bt.Struct( bt.Field(bt.uint16,'unknown0'), # unknown0 in (0,0x200) bt.Field(bt.uint16,'texobj_index'), bt.Field(bt.Array(bt.float32,7),'unknown1'))): pass class Material(bt.Struct(
class DrawElement(bt.Struct( bt.Field(bt.uint16,'material_index'), bt.Field(bt.uint16,'shape_index'))): pass #------------------------------------------------------------------------------ parser = argparse.ArgumentParser(description='Extract/Inject images into MDL files')
class DrawElement(bt.Struct( bt.Field(bt.uint16,'material_index'), bt.Field(bt.uint16,'shape_index'))): pass #------------------------------------------------------------------------------ parser = argparse.ArgumentParser(description='Convert Luigi\'s Mansion MDL files to Wavefront OBJ files')
class Color(bt.Struct( bt.Field(bt.uint8,'r'), bt.Field(bt.uint8,'g'), bt.Field(bt.uint8,'b'), bt.Field(bt.uint8,'a'))): pass class Matrix:
class TextureHeader(bt.Struct( bt.Field(bt.uint8,'format'), bt.Padding(1,b'\x00'), bt.Field(bt.uint16,'width'), bt.Field(bt.uint16,'height'), bt.Padding(26,b'\x00'))): pass class TexObj(bt.Struct(
class ShapePacket(bt.Struct( bt.Field(bt.uint32,'data_offset'), bt.Field(bt.uint32,'data_size'), bt.Field(bt.uint16,'unknown0'), # unknown0 in (0,2) bt.Field(bt.uint16,'num_matrix_indices'), bt.Field(bt.Array(bt.uint16,10),'matrix_indices'))): pass class DrawElement(bt.Struct(
class TexObj(bt.Struct( bt.Field(bt.uint16,'texture_index'), bt.Padding(2), bt.Field(bt.uint8,'unknown1'), # unknown1 in (0,1,2) bt.Field(bt.uint8,'unknown2'), # unknown2 in (0,1,2) bt.Field(bt.uint8,'unknown3'), # unknown3 in (0,1,4) bt.Padding(1,b'\x00'))): pass class TevStage(bt.Struct(
class Shape(bt.Struct( bt.Field(bt.uint8,'unknown0'), # unknown0 in (0,1,3) bt.Field(bt.uint8,'unknown1'), # unknown1 == 0 bt.Field(bt.uint8,'unknown2'), bt.Field(bt.uint8,'unknown3'), # unknown3 in (0,1) bt.Field(bt.uint16,'num_packets'), bt.Field(bt.uint16,'first_packet'))): pass class ShapePacket(bt.Struct(
class Node(bt.Struct( bt.Field(bt.uint16,'unknown0'), bt.Field(bt.uint16,'unknown1'), # unknown1 in (0,1) bt.Field(bt.uint16,'unknown2'), bt.Field(bt.uint16,'unknown3'), # unknown3 in (0,1) bt.Field(bt.uint16,'unknown4'), bt.Field(bt.uint16,'unknown5'), bt.Padding(4,b'\x00'))): pass class TextureHeader(bt.Struct(
class Material(bt.Struct( bt.Field(Color,'color'), bt.Field(bt.uint16,'unknown1'), # unknown1 in (0,1), number of colors? bt.Field(bt.uint8,'unknown2'), # unknown2 in (0,1,2,4) bt.Field(bt.uint8,'num_tev_stages'), # unknown3 in (0,1,2) bt.Field(bt.uint8,'unknown4'), # unknown4 in (0,1) bt.Padding(23,b'\x00'), bt.Field(bt.Array(TevStage,8),'tev_stages'))): pass class Shape(bt.Struct(
class TextureCoordinate(bt.Struct( bt.Field(bt.float32,'s'), bt.Field(bt.float32,'t'))): pass class Color(bt.Struct(
class Header(bt.Struct( bt.Field(bt.uint32,'magic'), # magic == 0x04B40000 bt.Field(bt.uint16,'num_faces'), bt.Padding(2,b'\x00'), bt.Field(bt.uint16,'num_nodes'), # num_nodes == num_joints bt.Field(bt.uint16,'num_shape_packets'), bt.Field(bt.uint16,'num_weighted_matrices'), bt.Field(bt.uint16,'num_joints'), bt.Field(bt.uint16,'num_vertices'), bt.Field(bt.uint16,'num_normals'), bt.Field(bt.uint16,'num_colors'), bt.Field(bt.uint16,'num_texcoords'), bt.Padding(8,b'\x00'), bt.Field(bt.uint16,'num_textures'), bt.Padding(2,b'\x00'), bt.Field(bt.uint16,'num_texobjs'), bt.Field(bt.uint16,'num_draw_elements'), # num_draw_elements == num_shapes bt.Field(bt.uint16,'num_materials'), bt.Field(bt.uint16,'num_shapes'), bt.Padding(4,b'\x00'), bt.Field(bt.uint32,'node_offset'), bt.Field(bt.uint32,'shape_packet_offset'), bt.Field(bt.uint32,'matrix_offset'), bt.Field(bt.uint32,'weight_offset'), bt.Field(bt.uint32,'joint_index_offset'), bt.Field(bt.uint32,'num_weights_offset'), bt.Field(bt.uint32,'vertex_offset'), bt.Field(bt.uint32,'normal_offset'), bt.Field(bt.uint32,'color_offset'), bt.Field(bt.uint32,'texcoord_offset'), bt.Padding(8,b'\x00'), bt.Field(bt.uint32,'texture_location_offset'), bt.Padding(4,b'\x00'), bt.Field(bt.uint32,'material_offset'), bt.Field(bt.uint32,'texobj_offset'), bt.Field(bt.uint32,'shape_offset'), bt.Field(bt.uint32,'draw_element_offset'), bt.Padding(8,b'\x00'))): pass class Vector(bt.Struct(