Пример #1
0
def make_buff_icon_mapping():
    try:
        shutil.rmtree("./_icons")
    except FileNotFoundError:
        pass
    ex = Extractor(ex_img_dir="./_icons", ex_dir="./_icons")
    ex.download_and_extract_by_pattern(DEPENDENCIES)

    with open(PATH_ID_FILE, "r") as fp:
        path_id_map = json.load(fp)

    with open(INGAME_UI_FILE, "r") as fp:
        ingame_ui = {}
        for icon_type, data in json.load(fp).items():
            if not icon_type.endswith("Icon"):
                continue
            ingame_ui[icon_type] = {idx: path_id_map.get(str(entry["m_PathID"])) for idx, entry in enumerate(data) if entry["m_FileID"]}

    nosprite_icons = set()
    for icon_type, icon_map in ingame_ui.items():
        new_folder = f"./_icons/{icon_type}"
        os.makedirs(new_folder)
        for icon in icon_map.values():
            src = f"./_icons/jp/images_ingame/{icon}.png"
            if os.path.exists(src):
                shutil.move(src, f"{new_folder}/{icon}.png")
            else:
                nosprite_icons.add(icon)
    ingame_ui["nospriteIcons"] = list(nosprite_icons)

    noref_icons = set()
    for root, _, files in os.walk("./_icons/jp/images_ingame"):
        os.makedirs(os.path.join("_icons", "noref"))
        for fn in files:
            if fn.startswith("Icon_Buff_") and not fn in ingame_ui["buffIcon"].values():
                shutil.move(os.path.join(root, fn), os.path.join("_icons", "noref", fn))
                noref_icons.add(fn)
    ingame_ui["norefIcons"] = list(noref_icons)

    shutil.rmtree("./_icons/jp")
    try:
        from loader.InGameBuffUI import BuffIconType, UniqueBuffIconType

        unique_icons = {}
        for idx, icon in ingame_ui["buffIcon"].items():
            try:
                unique_icons[UniqueBuffIconType[BuffIconType(idx).name].value] = icon
            except (KeyError, ValueError):
                pass
        ingame_ui["uniqueBuffIcon"] = unique_icons
    except ImportError:
        pass

    with open(COMBINED_MAP_FILE, "w") as fp:
        json.dump(ingame_ui, fp, indent=4)
Пример #2
0
def download_sticker_assets():
    ex = Extractor(ex_dir=OUT_DIR, ex_img_dir=OUT_DIR)
    ex.download_and_extract_by_pattern(STICKER_PATTERN)
    for region in ("jp", "en"):
        voice_dir = os.path.join(OUT_DIR, region, "voices")
        cmd = [
            LIBCGSS,
            os.path.join(voice_dir, "vo_chr_stamp.acb"), *LIBCGSS_ARGS
        ]
        subprocess.check_output(cmd)
        os.remove(os.path.join(voice_dir, "vo_chr_stamp.acb"))
        os.remove(os.path.join(voice_dir, "vo_chr_stamp.awb"))
        external_dir = os.path.join(voice_dir, "_acb_vo_chr_stamp.acb",
                                    "external")
        for wav in os.listdir(
                os.path.join(voice_dir, "_acb_vo_chr_stamp.acb", "external")):
            shutil.copy(os.path.join(external_dir, wav), voice_dir)
        shutil.rmtree(os.path.join(voice_dir, "_acb_vo_chr_stamp.acb"))
Пример #3
0
def download_all_icons(out, set_icons=None):
    ex = Extractor(ex_dir=None, ex_img_dir=out)
    ex.download_and_extract_by_pattern(IMAGE_PATTERNS)
    if not set_icons:
        return
    patterns = {"jp": {}}
    for icon_set, prefix, dest in set_icons:
        patterns["jp"][prefix + "(?:" + "|".join(map(str, icon_set)) +
                       ")"] = dest
    ex.download_and_extract_by_pattern(patterns)
Пример #4
0
            "name": "Overdrive Punisher +15%\nGauge Accelerator +10%",
            "icon": "coabs/Wand2.png",
            "link": "Overdrive_Punisher_&_Gauge_Accelerator_VIII",
        },
        "Empty_6": {
            "name": "Empty 6",
            "icon": "icons/formC.png",
            "link": "<NO>"
        },
        "Empty_7": {
            "name": "Empty 7",
            "icon": "icons/formC.png",
            "link": "<NO>"
        },
    }
    ex = Extractor(ex_dir=None, ex_img_dir=DST)
    patterns = {"jp": {}}
    icon_set = set()
    with open(os.path.join(GEN, "wyrmprints.json"), "r") as fn:
        for wp, data in json.load(fn).items():
            pic_index[wp] = {
                "name": data["name"],
                "icon": f"amulet/{data['icon']}.png"
            }
            if data["union"] > 0:
                pic_index[wp]["deco"] = f"union/{data['union']:02}.png"
            icon_set.add(data["icon"])
    patterns["jp"]["^images/icon/amulet/l/" + "(?:" +
                   "|".join(map(str, icon_set)) + ")"] = f"../amulet"

    icon_set = set()
Пример #5
0
LABEL_PATTERNS_JP = {
    r'^master$': 'master',
    r'^actions$': 'actions',
    r'^characters/motion': 'characters_motion',
    r'characters/motion/animationclips$': 'characters_motion',
    r'^dragon/motion': 'dragon_motion',
}

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Import data to database.')
    parser.add_argument('--do_prep',
                        help='Do downloading and extracting of assets',
                        action='store_true')
    parser.add_argument('-o',
                        type=str,
                        help='output file',
                        default='dl.sqlite')
    args = parser.parse_args()

    if args.do_prep:
        ex = Extractor(MANIFEST_JP, MANIFEST_EN, stdout_log=True)
        ex.download_and_extract_all(LABEL_PATTERNS_JP, region='jp')
        ex.download_and_extract_all(LABEL_PATTERNS_EN, region='en')
    in_dir = '_extract'

    db = DBManager(args.o)
    load_master(db, os.path.join(in_dir, EN, MASTER))
    load_json(db, os.path.join(in_dir, JP, MASTER, TEXT_LABEL), 'TextLabelJP')
    load_actions(db, os.path.join(in_dir, JP, ACTIONS))
    load_character_motion(db, os.path.join(in_dir, JP, CHARACTERS_MOTION))
    load_dragon_motion(db, os.path.join(in_dir, JP, DRAGON_MOTION))
Пример #6
0
def download_all_icons(out):
    ex = Extractor(ex_dir=None, ex_img_dir=out, stdout_log=False)
    ex.download_and_extract_by_pattern(IMAGE_PATTERNS)
Пример #7
0
 parser.add_argument('--do_prep',
                     help='Download and extract db related assets',
                     action='store_true')
 parser.add_argument('-m_hash', help='Use', action='store_true')
 parser.add_argument('-o',
                     type=str,
                     help='output file',
                     default='dl.sqlite')
 args = parser.parse_args()
 # if args.do_images:
 #     ex = Extractor(MANIFEST_JP, MANIFEST_EN, ex_dir='images', stdout_log=True)
 #     ex.download_and_extract_by_pattern(IMAGE_PATTERNS, region='jp')
 in_dir = '_extract'
 if args.do_prep:
     print('prepare: ', flush=True, end='')
     start = monotonic()
     ex = Extractor(MANIFESTS, ex_dir=in_dir, stdout_log=False)
     ex.download_and_extract_by_pattern(LABEL_PATTERNS_CN, region='cn')
     ex.download_and_extract_by_pattern(LABEL_PATTERNS_EN, region='en')
     ex.download_and_extract_by_pattern(LABEL_PATTERNS_JP, region='jp')
     print(f'{monotonic()-start:.4f}s', flush=True)
 start = monotonic()
 print('load database: ', flush=True, end='')
 db = DBManager(args.o)
 load_master(db, os.path.join(in_dir, EN, MASTER))
 load_json(db, os.path.join(in_dir, JP, MASTER, TEXT_LABEL), 'TextLabelJP')
 load_json(db, os.path.join(in_dir, CN, MASTER, TEXT_LABEL), 'TextLabelCN')
 load_actions(db, os.path.join(in_dir, JP, ACTIONS))
 load_character_motion(db, os.path.join(in_dir, JP, CHARACTERS_MOTION))
 load_dragon_motion(db, os.path.join(in_dir, JP, DRAGON_MOTION))
 print(f'{monotonic()-start:.4f}s', flush=True)
Пример #8
0
def prepare_icons():
    ex = Extractor(ex_dir=OUTPUT_DIR, ex_img_dir=OUTPUT_DIR, overwrite=False)
    ex.download_and_extract_by_pattern(ICON_PATTERNS)
Пример #9
0
                     ("ex_dir", args.extract_dir), ("ex_img_dir",
                                                    args.extract_img_dir),
                     ("ex_media_dir", args.extract_media_dir),
                     ("local_mirror", args.local_mirror)):
        if arg == "0":
            ex_kwargs[key] = None
        elif arg:
            ex_kwargs[key] = arg

    if args.manifest and args.operation in ("extract", "mirror"):
        if args.manifest in ("ALLTIME", "OLDSTYLE"):
            ex_kwargs["manifest_override"] = args.manifest
        else:
            ex_kwargs["manifest_override"] = get_manifests(
                args.manifest, args.manifest)
    ex = Extractor(**ex_kwargs)

    ex_patterns = defaultdict(dict)
    for region, exp, target in args.patterns:
        if not (region := (region or args.region)):
            for reg in ex.pm.keys():
                ex_patterns[reg][exp] = target
        else:
            ex_patterns[region][exp] = target

    if args.operation == "apk":
        ex.apk_assets_extract(args.patterns[0][1])
    elif args.operation == "diff":
        if ex_patterns:
            print(f"Patterns\n{dict(ex_patterns)}")
            ex.download_and_extract_by_pattern_diff(ex_patterns)
Пример #10
0
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Import data to database.')
    parser.add_argument(
        '--do_prep', help='Download and extract db related assets', action='store_true')
    parser.add_argument('-m_hash', help='Use', action='store_true')
    parser.add_argument('-o', type=str, help='output file',
                        default='dl.sqlite')
    args = parser.parse_args()
    # if args.do_images:
    #     ex = Extractor(MANIFEST_JP, MANIFEST_EN, ex_dir='images', stdout_log=True)
    #     ex.download_and_extract_by_pattern(IMAGE_PATTERNS, region='jp')
    start = monotonic()

    in_dir = '_ex_sim'
    if args.do_prep:
        ex = Extractor(ex_dir=in_dir, stdout_log=False, overwrite=True)
        if not os.path.isdir(in_dir):
            ex.download_and_extract_by_pattern(LABEL_PATTERNS)
        else:
            ex.download_and_extract_by_pattern_diff(LABEL_PATTERNS)
        load_aiscript('./_ex_sim/jp/aiscript')
    db = DBManager(args.o)
    load_master(db, os.path.join(in_dir, EN, MASTER))
    load_json(db, os.path.join(in_dir, JP, MASTER, TEXT_LABEL), 'TextLabelJP')
    load_json(db, os.path.join(in_dir, CN, MASTER, TEXT_LABEL), 'TextLabelCN')
    schema_map = load_actions(db, os.path.join(in_dir, JP, ACTIONS))
    with open('./out/_action_schema.json', 'w') as f:
        json.dump(schema_map, f, indent=4, sort_keys=True)
    load_character_motion(db, os.path.join(in_dir, JP, CHARACTERS_MOTION))
    load_dragon_motion(db, os.path.join(in_dir, JP, DRAGON_MOTION))
Пример #11
0
def download_set_icons(out, icon_set, prefix, dest):
    patterns = {'jp': {f'{prefix}{ic}': dest for ic in icon_set}}
    ex = Extractor(ex_dir=None, ex_img_dir=out, stdout_log=False)
    ex.download_and_extract_by_pattern(patterns)
Пример #12
0
    parser.add_argument("--do_prep",
                        help="Download and extract db related assets",
                        action="store_true")
    parser.add_argument("-m_hash", help="Use", action="store_true")
    parser.add_argument("-o",
                        type=str,
                        help="output file",
                        default="dl.sqlite")
    args = parser.parse_args()
    start = monotonic()

    dl_dir = "./_dl_sim"
    in_dir = "./_ex_sim"
    if args.do_prep:
        ex = Extractor(dl_dir=dl_dir,
                       ex_dir=in_dir,
                       ex_img_dir=None,
                       overwrite=True)
        if not os.path.isdir(in_dir):
            ex.download_and_extract_by_pattern(LABEL_PATTERNS)
        else:
            ex.download_and_extract_by_pattern_diff(LABEL_PATTERNS)
        load_aiscript(os.path.join(in_dir, "jp", "aiscript"))
        # extract_story_function_json(ex)
    db = DBManager(args.o)
    load_master(db, os.path.join(in_dir, EN, MASTER))
    load_json(db, os.path.join(in_dir, JP, MASTER, TEXT_LABEL), "TextLabelJP")
    load_json(db, os.path.join(in_dir, CN, MASTER, TEXT_LABEL), "TextLabelCN")
    schema_map = load_actions(db, os.path.join(in_dir, JP, ACTIONS))
    os.makedirs("out", exist_ok=True)
    with open("./out/_action_schema.json", "w") as f:
        json.dump(schema_map, f, indent=4, sort_keys=True)