def read_mdx(self, stream: BinaryStream, version): start = stream.index size = stream.read_uint32() super().read_mdx(stream, version) self.speed = stream.read_float32() self.variation = stream.read_float32() self.latitude = stream.read_float32() self.gravity = stream.read_float32() self.life_span = stream.read_float32() self.emission_rate = stream.read_float32() self.width = stream.read_float32() self.length = stream.read_float32() self.filter_mode = stream.read_uint32() self.rows = stream.read_uint32() self.columns = stream.read_uint32() self.head_or_tail = stream.read_uint32() self.tail_length = stream.read_float32() self.time_middle = stream.read_float32() self.segment_colors[0] = stream.read_float32_array(3) self.segment_colors[1] = stream.read_float32_array(3) self.segment_colors[2] = stream.read_float32_array(3) self.segment_alphas = stream.read_uint8_array(3) self.segment_scaling = stream.read_float32_array(3) self.head_intervals[0] = stream.read_uint32_array(3) self.head_intervals[1] = stream.read_uint32_array(3) self.tail_intervals[0] = stream.read_uint32_array(3) self.tail_intervals[1] = stream.read_uint32_array(3) self.texture_id = stream.read_int32() self.squirt = stream.read_uint32() self.priority_plane = stream.read_int32() self.replaceable_id = stream.read_uint32() self.read_animations(stream, size - (stream.index - start))
def read_mdx(self, stream: BinaryStream, version: int): stream.read_uint32() stream.skip(4) # VRTX TAG self.vertices = stream.read_float32_array(stream.read_uint32() * 3) stream.skip(4) # NRMS TAG self.normals = stream.read_float32_array(stream.read_uint32() * 3) stream.skip(4) # PTYP TAG self.face_type_groups = stream.read_uint32_array(stream.read_uint32()) stream.skip(4) # PCNT TAG self.face_groups = stream.read_uint32_array(stream.read_uint32()) stream.skip(4) # PVTX TAG self.faces = stream.read_uint16_array(stream.read_uint32()) stream.skip(4) # GNDX TAG self.vertex_groups = stream.read_uint8_array(stream.read_uint32()) stream.skip(4) # MTGC TAG self.matrix_groups = stream.read_uint32_array(stream.read_uint32()) stream.skip(4) # MATS TAG self.matrix_indices = stream.read_uint32_array(stream.read_uint32()) self.material_id = stream.read_uint32() self.selection_group = stream.read_uint32() self.selection_flags = stream.read_uint32() if version > 800: self.lod = stream.read_int32() self.lod_name = stream.read(80) self.extent.read_mdx(stream) for i in range(stream.read_uint32()): extent = Extent() extent.read_mdx(stream) self.sequence_extents.append(extent) if version > 800: if stream.peek(4) == 'TANG': stream.skip(4) self.tangents = stream.read_float32_array( stream.read_uint32() * 4) if stream.peek(4) == 'SKIN': stream.skip(4) self.skin = stream.read_uint8_array(stream.read_uint32()) stream.skip(4) for i in range(stream.read_uint32()): stream.skip(4) self.uv_sets.append( stream.read_float32_array(stream.read_uint32() * 2))
def __init__(self, stream: BinaryStream, size: int, tag: str): self.tag = tag self.chunk = stream.read_uint8_array(size)