Пример #1
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_id = file_object_data_wrapper.read_type()  # bone name?
     self.bone_id = pyUbiForge.game_functions.file_types.get(
         file_id, file_id)
     self.transformation_matrix = file_object_data_wrapper.read_numpy(
         numpy.float32, 64).reshape((4, 4), order='F')
     file_object_data_wrapper.read_bytes(1)
Пример #2
0
	def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
		file_object_data_wrapper.read_bytes(10)
		file_object_data_wrapper.read_id()
		file_object_data_wrapper.read_bytes(23)
		for _ in range(3):
			file_object_data_wrapper.read_bytes(2)
			file_object_data_wrapper.read_id()
Пример #3
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     count1 = file_object_data_wrapper.read_uint_32()  # count
     # more data follows this if count != 0
     for _ in range(count1):
         py_ubi_forge.read_file.get_data_recursive(file_object_data_wrapper)
     file_object_data_wrapper.out_file_write('\n')
Пример #4
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(2)
     for _ in range(3):
         py_ubi_forge.read_file.get_data_recursive(file_object_data_wrapper)
     file_object_data_wrapper.read_bytes(
         10)  # wrong but needs more examples
Пример #5
0
    def __init__(self, py_ubi_forge,
                 file_object_data_wrapper: FileObjectDataWrapper):
        file_object_data_wrapper.read_bytes(1)
        file_object_data_wrapper.read_id()
        file_object_data_wrapper.read_bytes(2)
        file_object_data_wrapper.out_file_write('\n')

        py_ubi_forge.read_file.get_data_recursive(file_object_data_wrapper)

        file_object_data_wrapper.out_file_write('\n')
Пример #6
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_file()
     file_object_data_wrapper.read_id()
     file_object_data_wrapper.read_bytes(17)
     file_object_data_wrapper.out_file_write('Transformation Matrix\n')
     self.transformation_matrix = file_object_data_wrapper.read_numpy(
         numpy.float32, 64).reshape((4, 4), order='F')
Пример #7
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(5)
     for n in (8, 4):
         count = file_object_data_wrapper.read_uint_32()
         file_object_data_wrapper.indent()
         file_object_data_wrapper.read_bytes(count * n)
         file_object_data_wrapper.indent(-1)
Пример #8
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(1)
     file_object_data_wrapper.read_id()
     file_object_data_wrapper.read_bytes(16)
     count = file_object_data_wrapper.read_uint_32()
     for _ in range(count):
         file_object_data_wrapper.read_file()
Пример #9
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     count1 = file_object_data_wrapper.read_int_32()
     for _ in range(count1):
         file_object_data_wrapper.read_bytes(2)
         file_object_data_wrapper.read_id()
     file_object_data_wrapper.out_file_write('\n')
     count2 = file_object_data_wrapper.read_int_32()
     for _ in range(count2):
         file_object_data_wrapper.read_bytes(2)
         py_ubi_forge.read_file.get_data_recursive(file_object_data_wrapper)
Пример #10
0
def plugin(py_ubi_forge, file_object_data_wrapper: FileObjectDataWrapper,
           out_file, indent_count):
    count1 = file_object_data_wrapper.read_int_32(out_file, indent_count)
    for _ in range(count1):
        file_object_data_wrapper.read_str(2, out_file, indent_count)
        file_object_data_wrapper.read_id(out_file, indent_count)
    file_object_data_wrapper.out_file_write('\n', out_file, indent_count)
    count2 = file_object_data_wrapper.read_int_32(out_file, indent_count)
    for _ in range(count2):
        file_object_data_wrapper.read_str(2, out_file, indent_count)
        py_ubi_forge.read_file(file_object_data_wrapper, out_file,
                               indent_count)
Пример #11
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(1)
     for _ in range(4):
         file_object_data_wrapper.read_bytes(4)
     count1 = file_object_data_wrapper.read_uint_32()
     for _ in range(count1):
         file_object_data_wrapper.read_bytes(2)
         file_object_data_wrapper.read_id()
Пример #12
0
	def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
		file_object_data_wrapper.read_bytes(11)
		for _ in range(5):
			file_object_data_wrapper.read_float_32()
		file_object_data_wrapper.read_bytes(10)
		# file_object_data_wrapper.read_bytes(1)
		file_object_data_wrapper.out_file_write('\n')
Пример #13
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(16)
     something = file_object_data_wrapper.read_bytes(4)
     while something != b'\x14\x10\x67\x4C':
         file_object_data_wrapper.read_bytes(16)
         something = file_object_data_wrapper.read_bytes(4)
     file_object_data_wrapper.read_bytes(49)
Пример #14
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     fake_count = file_object_data_wrapper.read_uint_32()
     self.fakes: List[Fake] = []
     for _ in range(fake_count):
         self.fakes.append(
             py_ubi_forge.read_file.get_data_recursive(
                 file_object_data_wrapper))
     near_fake_count = file_object_data_wrapper.read_uint_32()
     self.near_fakes = []
     for _ in range(near_fake_count):
         self.near_fakes.append(
             py_ubi_forge.read_file.get_data_recursive(
                 file_object_data_wrapper))
     file_object_data_wrapper.read_bytes(1)
Пример #15
0
	def get_data_recursive(self, file_object_data_wrapper: FileObjectDataWrapper, out_file: Union[None, FileObjectDataWrapper, TextIO], indent_count: int = 0):
		"""
		Call this function in file reader methods to access other file types in the same file
		:param file_object_data_wrapper: The input raw data
		:param out_file: A file object to output the formatted data to
		:param indent_count: The number of indents in out_file
		:return: objects defined in the plugins
		"""

		file_object_data_wrapper.read_id(out_file, indent_count)
		file_type = file_object_data_wrapper.read_type(out_file, indent_count)
		if file_type in self.plugins:
			return self.plugins[file_type](self.pyUbiForge, file_object_data_wrapper, out_file, indent_count+1)
		else:
			raise Exception(f'File type {file_type} does not have a file reader')
Пример #16
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     count1 = file_object_data_wrapper.read_uint_32()
     self.width = self.height = int(count1**0.5)
     self.image_ids = []
     for n in range(count1):
         file_object_data_wrapper.indent()
         file_object_data_wrapper.read_bytes(1)
         self.image_ids.append(file_object_data_wrapper.read_id())
         file_object_data_wrapper.indent(-1)
Пример #17
0
	def __call__(self, file_object_data_wrapper: FileObjectDataWrapper, out_file: Union[None, FileObjectDataWrapper, TextIO] = None, indent_count: int = 0):
		"""
		Call this function in the right click methods as the start point
		Will call get_data_recursive to get the actual data followed by the clever_format method to read the rest of the file
		:param file_object_data_wrapper: The input raw data
		:param out_file: A file object to output the formatted data to
		:param indent_count: The number of indents in out_file
		:return: objects defined in the plugins
		"""
		self._load_plugins()
		if not isinstance(file_object_data_wrapper, FileObjectDataWrapper):
			raise Exception('file_object_data_wrapper is not of type FileObjectDataWrapper')
		file_object_data_wrapper.read_str(self.pyUbiForge.game_functions.pre_header_length, out_file, indent_count)
		try:
			data = self.get_data_recursive(file_object_data_wrapper, out_file, indent_count)
		except:
			data = None
		file_object_data_wrapper.clever_format(out_file, indent_count)
		return data
Пример #18
0
	def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
		file_object_data_wrapper.read_bytes(1)
		file_object_data_wrapper.read_id()
		file_object_data_wrapper.out_file_write('\n')
		self.lod = []
		for _ in range(5):
			ending0 = file_object_data_wrapper.read_uint_8()
			if ending0 == 0:
				self.lod.append(file_object_data_wrapper.read_file())
			elif ending0 == 3:
				self.lod.append(None)
			else:
				raise Exception()
Пример #19
0
    def __call__(self,
                 file_object_data_wrapper: FileObjectDataWrapper,
                 out_file: Union[None, FileObjectDataWrapper, TextIO] = None):
        """
		Call this function in the right click methods as the start point
		Will call get_data_recursive to get the actual data followed by the clever_format method to read the rest of the file
		:param file_object_data_wrapper: The input raw data
		:return: objects defined in the plugins
		"""
        file_object_data_wrapper.bind_out_file(out_file)
        self._load_readers()
        while self._wait:
            time.sleep(0.1)
        self._time = time.time()
        if not isinstance(file_object_data_wrapper, FileObjectDataWrapper):
            raise Exception(
                'file_object_data_wrapper is not of type FileObjectDataWrapper'
            )
        file_object_data_wrapper.read_bytes(
            self.pyUbiForge.game_functions.pre_header_length)
        try:
            data = self.get_data_recursive(file_object_data_wrapper)
        except Exception as e:
            self.pyUbiForge.log.warn(__name__, e)
            data = None
        file_object_data_wrapper.clever_format()
        return data
Пример #20
0
    def get_data_recursive(self,
                           file_object_data_wrapper: FileObjectDataWrapper):
        """
		Call this function in file reader methods to access other file types in the same file
		:param file_object_data_wrapper: The input raw data
		:return: objects defined in the plugins
		"""

        file_object_data_wrapper.out_file_write('\n')
        file_object_data_wrapper.read_id()
        file_type = file_object_data_wrapper.read_type()
        if file_type in self.readers:
            file_object_data_wrapper.indent()
            ret = self.readers[file_type](self.pyUbiForge,
                                          file_object_data_wrapper)
            file_object_data_wrapper.indent(-1)
            return ret
        else:
            raise Exception(
                f'File type {file_type} does not have a file reader')
Пример #21
0
    def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
        Material.__init__(self, None)

        texture_table = file_object_data_wrapper.read_numpy(
            [('', '<u2'), ('texture_id', '<u8')], 120)
        self.diffuse, self.normal, self.specular, \
         self.height, tex5, self.transmission, tex7, \
         self.mask1, self.mask2, tex10, tex11, tex12 \
         = [texture_id if texture_id != 0 else None for texture_id in texture_table['texture_id']]

        for var, pos in [[tex5, 5], [tex7, 7], [tex10, 10], [tex11, 11],
                         [tex12, 12]]:
            if var is not None:
                logging.info(
                    f'found a texture set with an id in position {pos}')
Пример #22
0
    def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
        file_object_data_wrapper.read_file()

        count1 = file_object_data_wrapper.read_uint_32()
        for _ in range(count1):
            file_object_data_wrapper.read_bytes(12)

        count2 = file_object_data_wrapper.read_uint_32()
        if count2 != 0:
            raise Exception()
Пример #23
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     fake_count = file_object_data_wrapper.read_uint_32()
     self.fakes: List[Fake] = []
     for _ in range(fake_count):
         self.fakes.append(file_object_data_wrapper.read_file())
     near_fake_count = file_object_data_wrapper.read_uint_32()
     self.near_fakes = []
     for _ in range(near_fake_count):
         self.near_fakes.append(file_object_data_wrapper.read_file())
     file_object_data_wrapper.read_bytes(1)
Пример #24
0
	def __init__(self, py_ubi_forge, path: str, forge_file_name: str):
		"""Initiate the class and read the header tables to get the locations of the files.

		The forge file has a couple of data tables before the actual data that points to where the actual data is stored.
		These tables are parsed and the data from them stored for each datafile in self.datafiles for use later
		"""
		BaseForge.__init__(self, py_ubi_forge, path, forge_file_name)
		self.pyUbiForge.log.info(__name__, f'Building file tree for {forge_file_name}')

		forge_file = FileObjectDataWrapper.from_file(self.pyUbiForge, self.path)
		# header
		if forge_file.read_str(8) != b'scimitar':
			return
		forge_file.seek(1, 1)
		forge_file_version, file_data_header_offset = forge_file.read_struct('iQ')
		if forge_file_version != 27:
			raise Exception(f'Unsupported Forge file format : "{forge_file_version}"')
		forge_file.seek(file_data_header_offset + 36)
		file_data_offset = forge_file.read_int_64()
		forge_file.seek(file_data_offset)
		# File Data
		index_count, index_table_offset, file_data_offset2, name_table_offset, raw_data_table_offset = forge_file.read_struct('i4x2q8x2q')
		forge_file.seek(index_table_offset)
		index_table = forge_file.read_struct('QQI' * index_count)
		forge_file.seek(name_table_offset)
		name_table = forge_file.read_struct('i40x128s20x' * index_count)
		for n in range(index_count):
			file_id = index_table[n * 3 + 1]
			file_name = name_table[n * 2 + 1].replace(b'\x00', b'').decode("utf-8")
			if index_table[n * 3 + 2] != name_table[n * 2]:
				raise Exception('These should be the same. Is something wrong?')
			self._datafiles[file_id] = DataFile(
				index_table[n * 3],
				index_table[n * 3 + 2],
				file_name
			)

		forge_file.close()
Пример #25
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(2)
     count1 = file_object_data_wrapper.read_uint_32()
     for _ in range(count1):
         file_object_data_wrapper.read_bytes(41)
     count2 = file_object_data_wrapper.read_uint_32()
     file_object_data_wrapper.read_bytes(12 * count2)
     for _ in range(2):
         file_object_data_wrapper.read_file()
     file_object_data_wrapper.out_file_write('\n')
     """
Пример #26
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(1)
     file_object_data_wrapper.read_id()
     file_object_data_wrapper.read_bytes(5)
     count = file_object_data_wrapper.read_uint_32()
     file_object_data_wrapper.read_bytes(1)
     for _ in range(count):
         py_ubi_forge.read_file.get_data_recursive(file_object_data_wrapper)
     file_object_data_wrapper.read_bytes(16)
Пример #27
0
 def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_uint_32()
     file_object_data_wrapper.read_uint_32()
Пример #28
0
    def __init__(self, file_object_data_wrapper: FileObjectDataWrapper):
        file_object_data_wrapper.read_uint_32()  # should always be equal to 0
        for n in (4, 4, 4, 1, 12, 12, 12, 12, 4, 4):
            count = file_object_data_wrapper.read_uint_32()
            file_object_data_wrapper.indent()
            file_object_data_wrapper.read_bytes(count * n)
            file_object_data_wrapper.indent(-1)
        file_object_data_wrapper.read_bytes(1)
        for n in (4, 2, 2):
            count = file_object_data_wrapper.read_uint_32()
            file_object_data_wrapper.indent()
            file_object_data_wrapper.read_bytes(count * n)
            file_object_data_wrapper.indent(-1)

        for _ in range(file_object_data_wrapper.read_uint_32()):
            file_object_data_wrapper.read_file()

        file_object_data_wrapper.read_bytes(2)
        file_object_data_wrapper.read_id()
        file_object_data_wrapper.read_bytes(1)
Пример #29
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(4)
     file_object_data_wrapper.read_id()
     file_object_data_wrapper.read_bytes(11)
Пример #30
0
 def __init__(self, py_ubi_forge,
              file_object_data_wrapper: FileObjectDataWrapper):
     file_object_data_wrapper.read_bytes(2)
     count1 = file_object_data_wrapper.read_uint_32()
     file_object_data_wrapper.read_bytes(2 * count1)
     file_object_data_wrapper.read_bytes(4 * 6)  # 6 floats
     count2 = file_object_data_wrapper.read_uint_32()
     for _ in range(count2):
         file_object_data_wrapper.read_bytes(24)
     file_object_data_wrapper.read_bytes(1)
     file_object_data_wrapper.out_file_write('\n')