def extract_music(args, conf): dat_manager = DatManager(conf.get('game', 'path')) exd_manager = ExdManager(dat_manager) output_path = path.join(conf.get('output', 'path'), 'music') tried = 0 completed = 0 for data in exd_manager.get_category('BGM').get_ln_data(0).values(): print('----------') tried = tried + 1 file_path = data[0].decode('utf-8') if file_path == '': continue output_file_path = path.join(output_path, file_path) if not path.exists(path.dirname(output_file_path)): makedirs(path.dirname(output_file_path)) try: print('Song:', file_path) file_data = dat_manager.get_file(file_path) except: continue if hasattr(file_data, 'getvalue'): completed = completed + 1 with open(output_file_path, 'wb') as file_handle: file_handle.write(file_data.getvalue()) else: continue print('tried', tried, 'completed', completed)
def extract_file(args, conf): dat_manager = DatManager(conf.get('game', 'path')) output_file_path = path.join(conf.get('output', 'path'), 'file', args.name) file_data = dat_manager.get_file(args.name) if not path.exists(path.dirname(output_file_path)): makedirs(path.dirname(output_file_path)) if output_file_path.endswith('.tex'): with open(output_file_path[:-3] + 'dds', 'wb') as file_handle: file_handle.write(Texture(file_data).get_as_dds().getvalue()) else: with open(output_file_path, 'wb') as file_handle: file_handle.write(file_data.getvalue())
def extract_category(args, conf): dat_manager = DatManager(conf.get('game', 'path')) category = dat_manager.get_category(args.name) output_path = path.join(conf.get('output', 'path'), 'cat', args.name) for dir_hash in category.get_hash_table().keys(): output_dir_path = path.join(output_path, '%0.8X' % dir_hash) if not path.exists(output_dir_path): makedirs(output_dir_path) for file_hash in category.get_dir_hash_table(dir_hash).keys(): output_file_path = path.join(output_dir_path, '%0.8X' % file_hash) file_data = category.get_file(dir_hash, file_hash) with open(output_file_path, 'wb') as file_handle: file_handle.write(file_data.getvalue())
def extract_folder(args, conf): dat_manager = DatManager(conf.get('game', 'path')) output_path = path.join(conf.get('output', 'path'), 'folder', args.name) category = dat_manager.get_category_from_filename(args.name) (dir_hash, _) = get_hashes(args.name) dir_hash_table = category.get_dir_hash_table(dir_hash) if not path.exists(output_path): makedirs(output_path) for file_hash in dir_hash_table.keys(): output_file_path = path.join(output_path, '%0.8X' % file_hash) file_data = category.get_file(dir_hash, file_hash) with open(output_file_path + '.dds', 'wb') as file_handle: file_handle.write(Texture(file_data).get_as_dds().getvalue())