Exemple #1
0
    def read(self, reader: ByteIO):
        self.version = reader.read_uint32()
        if self.version!=7:
            if self.version == 402653184:
                reader.insert_begin(b'\x07')
                self.version = reader.read_uint32()
                print('VTX FILE WAS "PROTECTED", but screew it :P')
            else:
                raise NotImplementedError('VTX version {} is not supported!'.format(self.version))
        self.vertex_cache_size = reader.read_uint32()
        self.max_bones_per_strip = reader.read_uint16()
        self.max_bones_per_tri = reader.read_uint16()
        self.max_bones_per_vertex = reader.read_uint32()
        self.checksum = reader.read_uint32()
        self.lodCount = reader.read_uint32()
        self.material_replacement_list_offset = reader.read_uint32()
        self.bodyPartCount = reader.read_uint32()
        self.bodyPartOffset = reader.read_uint32()
        global max_bones_per_vertex
        max_bones_per_vertex = self.max_bones_per_vertex
        if self.bodyPartOffset > 0:

            reader.seek(self.bodyPartOffset)
            try:
                for _ in range(self.bodyPartCount):
                    self.vtx_body_parts.append(SourceVtxBodyPart().read(reader))
            except struct.error:
                global extra_8
                extra_8 = False
                self.vtx_body_parts.clear()
                reader.seek(self.bodyPartOffset)
                for _ in range(self.bodyPartCount):
                    self.vtx_body_parts.append(SourceVtxBodyPart().read(reader))
        if self.material_replacement_list_offset > 0:
            reader.seek(self.material_replacement_list_offset)
            for _ in range(self.lodCount):
                self.material_replacement_lists.append(MaterialReplacementList().read(reader))
Exemple #2
0
    def read(self, reader: ByteIO):
        self.id = reader.read_fourcc()
        if self.id != 'IDSV':
            if self.id[:-1] == 'DSV':
                reader.insert_begin(b'I')
                self.id = reader.read_fourcc()
                print('VVD FILE WAS "PROTECTED", but screew it :P')
            else:
                raise NotImplementedError('VVD format {} is not supported!'.format(self.id))
        self.version = reader.read_uint32()
        self.checksum = reader.read_uint32()
        self.lod_count = reader.read_uint32()
        self.lod_vertex_count = [reader.read_uint32() for _ in range(8)]
        self.fixup_count = reader.read_uint32()
        self.fixup_table_offset = reader.read_uint32()
        self.vertex_data_offset = reader.read_uint32()
        self.tangent_data_offset = reader.read_uint32()
        self.fixed_vertexes_by_lod = [[]] * self.lod_count
        if self.lod_count <= 0:
            return

        reader.seek(self.vertex_data_offset)
        for _ in range(self.lod_vertex_count[0]):
            self.vertexes.append(SourceVertex().read(reader))

        reader.seek(self.fixup_table_offset)
        if self.fixup_count > 0:
            for _ in range(self.fixup_count):
                self.fixups.append(SourceVvdFixup().read(reader))
        if self.lod_count > 0:
            for lod_index in range(self.lod_count):
                for fixup_index in range(len(self.fixups)):
                    fixup = self.fixups[fixup_index]
                    if fixup.lod_index >= lod_index:
                        for j in range(fixup.vertex_count):
                            vertex = self.vertexes[fixup.vertex_index + j]
                            self.fixed_vertexes_by_lod[lod_index].append(vertex)