Esempio n. 1
0
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)
Esempio n. 2
0
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())
Esempio n. 3
0
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())
Esempio n. 4
0
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())