#!/usr/bin/env python3 ### # Generates build files for the project. # This file also includes the project configuration, # such as compiler flags and the object matching status. # # Usage: # python3 configure.py # ninja # # Append --help to see available options. ### import sys import argparse from pathlib import Path from tools.project import ( Object, ProjectConfig, calculate_progress, generate_build, is_windows, ) # Game versions DEFAULT_VERSION = 1 VERSIONS = [ "GZLJ01", # 0 "GZLE01", # 1 "GZLP01", # 2 ] if len(VERSIONS) > 1: versions_str = ", ".join(VERSIONS[:-1]) + f" or {VERSIONS[-1]}" else: versions_str = VERSIONS[0] parser = argparse.ArgumentParser() parser.add_argument( "mode", default="configure", help="configure or progress (default: configure)", nargs='?', ) parser.add_argument( "--version", dest="version", default=VERSIONS[DEFAULT_VERSION], help=f"version to build ({versions_str})", ) parser.add_argument( "--build-dir", dest="build_dir", type=Path, default=Path("build"), help="base build directory (default: build)", ) parser.add_argument( "--compilers", dest="compilers", type=Path, help="path to compilers (optional)", ) parser.add_argument( "--map", dest="map", action="store_true", help="generate map file(s)", ) parser.add_argument( "--debug", dest="debug", action="store_true", help="build with debug info (non-matching)", ) if not is_windows(): parser.add_argument( "--wrapper", dest="wrapper", type=Path, help="path to wibo or wine (optional)", ) parser.add_argument( "--build-dtk", dest="build_dtk", type=Path, help="path to decomp-toolkit source (optional)", ) parser.add_argument( "--sjiswrap", dest="sjiswrap", type=Path, help="path to sjiswrap.exe (optional)", ) parser.add_argument( "--verbose", dest="verbose", action="store_true", help="print verbose output", ) args = parser.parse_args() config = ProjectConfig() config.version = args.version.upper() if config.version not in VERSIONS: sys.exit(f"Invalid version '{config.version}', expected {versions_str}") version_num = VERSIONS.index(config.version) # Apply arguments config.build_dir = args.build_dir config.build_dtk_path = args.build_dtk config.compilers_path = args.compilers config.debug = args.debug config.generate_map = args.map config.sjiswrap_path = args.sjiswrap if not is_windows(): config.wrapper = args.wrapper # Tool versions config.compilers_tag = "1" config.dtk_tag = "v0.5.2" config.sjiswrap_tag = "v1.1.0" config.wibo_tag = "0.5.1" # Project config.config_path = Path("config") / config.version / "config.yml" config.check_sha_path = Path("orig") / f"{config.version}.sha1" config.linker_version = "GC/1.3.2" config.ldflags = [ "-fp hardware", "-nodefaults", ] # Base flags, common to most GC/Wii games. # Generally leave untouched, with overrides added below. cflags_base = [ "-nodefaults", "-proc gekko", "-align powerpc", "-enum int", "-fp hardware", "-Cpp_exceptions off", # "-W all", "-O4,p", "-inline auto", '-pragma "cats off"', '-pragma "warn_notinlined off"', "-maxerrors 1", "-nosyspath", "-RTTI off", "-fp_contract on", "-str reuse", "-multibyte", "-i include", f"-DVERSION={version_num}", ] if config.debug: cflags_base.extend(["-sym on", "-DDEBUG=1"]) else: cflags_base.append("-DNDEBUG=1") # Metrowerks library flags cflags_runtime = [ *cflags_base, "-use_lmw_stmw on", "-str reuse,pool,readonly", "-inline deferred,auto", ] # Framework flags cflags_framework = [ *cflags_base, "-use_lmw_stmw off", "-str reuse,pool,readonly", "-inline noauto", "-O3,s", "-schedule off", "-sym on", "-fp_contract off", ] # REL flags cflags_rel = [ *cflags_framework, "-sdata 0", "-sdata2 0", ] # Helper function for single-object RELs def Rel(status, rel_name, cpp_name): return { "lib": rel_name, "mw_version": "GC/1.3.2", "cflags": cflags_rel, "host": True, "objects": [ Object(status, cpp_name), ], } # Helper function for actor RELs def ActorRel(status, rel_name): return Rel(status, rel_name, f"d/actor/{rel_name}.cpp") Matching = True NonMatching = False config.libs = [ { "lib": "Runtime.PPCEABI.H", "mw_version": "GC/1.3.2", "cflags": cflags_runtime, "host": False, "objects": [ Object(Matching, "Runtime.PPCEABI.H/__init_cpp_exceptions.cpp"), Object(Matching, "Runtime.PPCEABI.H/Gecko_ExceptionPPC.cp"), Object(Matching, "Runtime.PPCEABI.H/global_destructor_chain.c"), ], }, { "lib": "REL", "mw_version": "GC/1.3.2", "cflags": cflags_rel, "host": False, "objects": [ Object(Matching, "REL/executor.c"), Object( Matching, "REL/global_destructor_chain.c", source="Runtime.PPCEABI.H/global_destructor_chain.c", ), ], }, { "lib": "JSystem", "mw_version": "GC/1.3.2", "cflags": cflags_framework, "host": True, "objects": [ Object(NonMatching, "JSystem/JFramework/JFWDisplay.cpp"), Object(NonMatching, "JSystem/JFramework/JFWSystem.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DVertex.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DPacket.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DShape.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DDrawBuffer.cpp"), Object(Matching, "JSystem/J3DU/J3DUDL.cpp"), Object(NonMatching, "JSystem/JParticle/JPATexture.cpp"), Object(Matching, "JSystem/JKernel/JKRFile.cpp"), Object(Matching, "JSystem/JSupport/JSUList.cpp"), Object(NonMatching, "JSystem/JSupport/JSUInputStream.cpp"), Object(Matching, "JSystem/JSupport/JSUMemoryStream.cpp"), Object(Matching, "JSystem/JSupport/JSUFileStream.cpp"), Object(Matching, "JSystem/JUtility/JUTResource.cpp"), Object(Matching, "JSystem/JUtility/JUTTexture.cpp"), Object(Matching, "JSystem/JUtility/JUTPalette.cpp"), Object(Matching, "JSystem/JUtility/JUTNameTab.cpp"), Object(Matching, "JSystem/JUtility/JUTGraphFifo.cpp"), Object(Matching, "JSystem/JUtility/JUTFont.cpp"), Object(NonMatching, "JSystem/J2DGraph/J2DGrafContext.cpp"), Object(Matching, "JSystem/J2DGraph/J2DOrthoGraph.cpp"), Object(NonMatching, "JSystem/J2DGraph/J2DPane.cpp"), ], }, { "lib": "SSystem", "mw_version": "GC/1.3.2", "cflags": cflags_framework, "host": True, "objects": [ Object(Matching, "SSystem/SStandard/s_basic.cpp"), Object(Matching, "SSystem/SComponent/c_malloc.cpp"), Object(Matching, "SSystem/SComponent/c_API.cpp"), Object(Matching, "SSystem/SComponent/c_API_graphic.cpp"), Object(Matching, "SSystem/SComponent/c_counter.cpp"), Object(Matching, "SSystem/SComponent/c_list.cpp"), Object(Matching, "SSystem/SComponent/c_list_iter.cpp"), Object(Matching, "SSystem/SComponent/c_node.cpp"), Object(Matching, "SSystem/SComponent/c_node_iter.cpp"), Object(Matching, "SSystem/SComponent/c_tree.cpp"), Object(Matching, "SSystem/SComponent/c_tree_iter.cpp"), Object(NonMatching, "SSystem/SComponent/c_phase.cpp"), Object(Matching, "SSystem/SComponent/c_request.cpp"), Object(Matching, "SSystem/SComponent/c_tag.cpp"), Object(Matching, "SSystem/SComponent/c_tag_iter.cpp"), Object(NonMatching, "SSystem/SComponent/c_xyz.cpp"), Object(Matching, "SSystem/SComponent/c_sxyz.cpp"), Object(Matching, "SSystem/SComponent/c_math.cpp"), Object(NonMatching, "SSystem/SComponent/c_bg_s.cpp"), Object(Matching, "SSystem/SComponent/c_bg_s_chk.cpp"), Object(NonMatching, "SSystem/SComponent/c_bg_s_gnd_chk.cpp"), Object(Matching, "SSystem/SComponent/c_bg_s_lin_chk.cpp"), Object(NonMatching, "SSystem/SComponent/c_bg_w.cpp"), Object(NonMatching, "SSystem/SComponent/c_m2d.cpp"), Object(NonMatching, "SSystem/SComponent/c_m2d_g_box.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_aab.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_cyl.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_pla.cpp"), Object(NonMatching, "SSystem/SComponent/c_m3d_g_sph.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_tri.cpp"), Object(NonMatching, "SSystem/SComponent/c_lib.cpp"), Object(NonMatching, "SSystem/SComponent/c_angle.cpp"), Object(Matching, "SSystem/SComponent/c_data_tbl.cpp"), ], }, { "lib": "framework", "mw_version": "GC/1.3.2", "cflags": cflags_framework, "host": True, "objects": [ Object(NonMatching, "f_ap/f_ap_game.cpp"), Object(NonMatching, "f_op/f_op_actor.cpp"), Object(Matching, "f_op/f_op_actor_iter.cpp"), Object(Matching, "f_op/f_op_actor_tag.cpp"), Object(NonMatching, "f_op/f_op_actor_mng.cpp"), Object(NonMatching, "f_op/f_op_camera.cpp"), Object(Matching, "f_op/f_op_camera_mng.cpp"), Object(Matching, "f_op/f_op_overlap.cpp"), Object(Matching, "f_op/f_op_overlap_mng.cpp"), Object(Matching, "f_op/f_op_overlap_req.cpp"), Object(Matching, "f_op/f_op_scene.cpp"), Object(Matching, "f_op/f_op_scene_iter.cpp"), Object(Matching, "f_op/f_op_scene_mng.cpp"), Object(Matching, "f_op/f_op_scene_req.cpp"), Object(Matching, "f_op/f_op_scene_tag.cpp"), Object(Matching, "f_op/f_op_view.cpp"), Object(Matching, "f_op/f_op_kankyo.cpp"), Object(Matching, "f_op/f_op_msg.cpp"), Object(Matching, "f_op/f_op_kankyo_mng.cpp"), Object(NonMatching, "f_op/f_op_msg_mng.cpp"), Object(Matching, "f_op/f_op_draw_iter.cpp"), Object(Matching, "f_op/f_op_draw_tag.cpp"), Object(Matching, "f_op/f_op_scene_pause.cpp"), Object(Matching, "f_pc/f_pc_base.cpp"), Object(Matching, "f_pc/f_pc_create_iter.cpp"), Object(Matching, "f_pc/f_pc_create_req.cpp"), Object(Matching, "f_pc/f_pc_create_tag.cpp"), Object(Matching, "f_pc/f_pc_creator.cpp"), Object(Matching, "f_pc/f_pc_delete_tag.cpp"), Object(Matching, "f_pc/f_pc_deletor.cpp"), Object(Matching, "f_pc/f_pc_draw_priority.cpp"), Object(Matching, "f_pc/f_pc_executor.cpp"), Object(Matching, "f_pc/f_pc_layer.cpp"), Object(Matching, "f_pc/f_pc_leaf.cpp"), Object(Matching, "f_pc/f_pc_layer_iter.cpp"), Object(Matching, "f_pc/f_pc_layer_tag.cpp"), Object(Matching, "f_pc/f_pc_line.cpp"), Object(Matching, "f_pc/f_pc_load.cpp"), Object(NonMatching, "f_pc/f_pc_manager.cpp"), Object(Matching, "f_pc/f_pc_method.cpp"), Object(Matching, "f_pc/f_pc_node.cpp"), Object(Matching, "f_pc/f_pc_node_req.cpp"), Object(Matching, "f_pc/f_pc_priority.cpp"), Object(Matching, "f_pc/f_pc_profile.cpp"), Object(Matching, "f_pc/f_pc_searcher.cpp"), Object(Matching, "f_pc/f_pc_line_tag.cpp"), Object(Matching, "f_pc/f_pc_line_iter.cpp"), Object(Matching, "f_pc/f_pc_method_iter.cpp"), Object(Matching, "f_pc/f_pc_method_tag.cpp"), Object(Matching, "f_pc/f_pc_pause.cpp"), Object(Matching, "f_pc/f_pc_draw.cpp"), Object(Matching, "f_pc/f_pc_fstcreate_req.cpp"), Object(Matching, "f_pc/f_pc_stdcreate_req.cpp"), # machine Object(NonMatching, "m_Do/m_Do_main.cpp"), Object(NonMatching, "m_Do/m_Do_audio.cpp"), Object(NonMatching, "m_Do/m_Do_controller_pad.cpp"), Object(Matching, "m_Do/m_Do_hostIO.cpp"), Object(NonMatching, "m_Do/m_Do_mtx.cpp"), # dolzel Object(Matching, "d/d_com_lib_game.cpp"), Object(Matching, "d/d_particle_name.cpp"), Object(NonMatching, "d/d_s_title.cpp"), Object(NonMatching, "d/d_com_inf_game.cpp"), Object(NonMatching, "d/d_save.cpp"), Object(NonMatching, "d/d_save_init.cpp"), Object(Matching, "d/d_bg_s_movebg_actor.cpp"), Object(NonMatching, "d/d_s_play.cpp"), Object(NonMatching, "d/actor/d_a_player_main.cpp"), Object(NonMatching, "d/actor/d_a_itembase_static.cpp"), Object(NonMatching, "d/actor/d_a_item_static.cpp"), Object(NonMatching, "d/actor/d_a_item.cpp"), Object(NonMatching, "d/actor/d_a_itembase.cpp"), # ? Object(NonMatching, "DynamicLink.cpp"), ], }, Rel(Matching, "f_pc_profile_lst", "f_pc/f_pc_profile_lst.cpp"), ActorRel(NonMatching, "d_a_agbsw0"), ActorRel(NonMatching, "d_a_andsw0"), ActorRel(Matching, "d_a_andsw2"), ActorRel(NonMatching, "d_a_att"), ActorRel(NonMatching, "d_a_bflower"), ActorRel(NonMatching, "d_a_bita"), ActorRel(NonMatching, "d_a_branch"), ActorRel(NonMatching, "d_a_bridge"), ActorRel(NonMatching, "d_a_coming2"), ActorRel(NonMatching, "d_a_coming3"), ActorRel(NonMatching, "d_a_demo_dk"), ActorRel(NonMatching, "d_a_demo_kmm"), ActorRel(NonMatching, "d_a_door10"), ActorRel(NonMatching, "d_a_dr"), ActorRel(NonMatching, "d_a_dr2"), ActorRel(NonMatching, "d_a_ep"), ActorRel(NonMatching, "d_a_floor"), ActorRel(NonMatching, "d_a_grass"), ActorRel(NonMatching, "d_a_hitobj"), ActorRel(NonMatching, "d_a_hot_floor"), ActorRel(NonMatching, "d_a_ikari"), ActorRel(NonMatching, "d_a_jbo"), ActorRel(NonMatching, "d_a_kaji"), ActorRel(NonMatching, "d_a_kanban"), ActorRel(NonMatching, "d_a_ki"), ActorRel(NonMatching, "d_a_knob00"), ActorRel(NonMatching, "d_a_kui"), ActorRel(NonMatching, "d_a_kytag00"), ActorRel(NonMatching, "d_a_kytag01"), ActorRel(NonMatching, "d_a_kytag02"), ActorRel(NonMatching, "d_a_kytag03"), ActorRel(NonMatching, "d_a_kytag04"), ActorRel(NonMatching, "d_a_kytag05"), ActorRel(NonMatching, "d_a_kytag06"), ActorRel(NonMatching, "d_a_kytag07"), ActorRel(NonMatching, "d_a_lamp"), ActorRel(NonMatching, "d_a_lod_bg"), ActorRel(NonMatching, "d_a_lwood"), ActorRel(Matching, "d_a_magma"), ActorRel(NonMatching, "d_a_majuu_flag"), ActorRel(NonMatching, "d_a_mdoor"), ActorRel(NonMatching, "d_a_msw"), ActorRel(NonMatching, "d_a_mtoge"), ActorRel(NonMatching, "d_a_obj_AjavW"), ActorRel(NonMatching, "d_a_obj_Ygush00"), ActorRel(NonMatching, "d_a_obj_akabe"), ActorRel(NonMatching, "d_a_obj_barrel"), ActorRel(NonMatching, "d_a_obj_barrel2"), ActorRel(NonMatching, "d_a_obj_bscurtain"), ActorRel(NonMatching, "d_a_obj_cafelmp"), ActorRel(NonMatching, "d_a_obj_coming"), ActorRel(NonMatching, "d_a_obj_demo_barrel"), ActorRel(NonMatching, "d_a_obj_doguu"), ActorRel(NonMatching, "d_a_obj_doguu_demo"), ActorRel(NonMatching, "d_a_obj_gryw00"), ActorRel(NonMatching, "d_a_obj_hfuck1"), ActorRel(NonMatching, "d_a_obj_hole"), ActorRel(NonMatching, "d_a_obj_ice"), ActorRel(NonMatching, "d_a_obj_ikada"), ActorRel(NonMatching, "d_a_obj_kanat"), ActorRel(NonMatching, "d_a_obj_leaves"), ActorRel(NonMatching, "d_a_obj_lpalm"), ActorRel(NonMatching, "d_a_obj_monument"), ActorRel(NonMatching, "d_a_obj_movebox"), ActorRel(NonMatching, "d_a_obj_mshokki"), ActorRel(NonMatching, "d_a_obj_ohatch"), ActorRel(NonMatching, "d_a_obj_otble"), ActorRel(NonMatching, "d_a_obj_pbco"), ActorRel(NonMatching, "d_a_obj_pirateship"), ActorRel(NonMatching, "d_a_obj_quake"), ActorRel(NonMatching, "d_a_obj_rcloud"), ActorRel(NonMatching, "d_a_obj_roten"), ActorRel(NonMatching, "d_a_obj_shelf"), ActorRel(NonMatching, "d_a_obj_shmrgrd"), ActorRel(NonMatching, "d_a_obj_swpush"), ActorRel(NonMatching, "d_a_obj_table"), ActorRel(NonMatching, "d_a_obj_tenmado"), ActorRel(NonMatching, "d_a_obj_tide"), ActorRel(NonMatching, "d_a_obj_timer"), ActorRel(NonMatching, "d_a_obj_toripost"), ActorRel(NonMatching, "d_a_obj_tousekiki"), ActorRel(NonMatching, "d_a_obj_warpt"), ActorRel(NonMatching, "d_a_obj_wood"), ActorRel(NonMatching, "d_a_pirate_flag"), ActorRel(NonMatching, "d_a_race_item"), ActorRel(NonMatching, "d_a_rd"), ActorRel(NonMatching, "d_a_rectangle"), ActorRel(NonMatching, "d_a_salvage"), ActorRel(NonMatching, "d_a_sbox"), ActorRel(NonMatching, "d_a_sk"), ActorRel(NonMatching, "d_a_sk2"), ActorRel(NonMatching, "d_a_spotbox"), ActorRel(NonMatching, "d_a_ssk"), ActorRel(NonMatching, "d_a_stone"), ActorRel(NonMatching, "d_a_stone2"), ActorRel(NonMatching, "d_a_swc00"), ActorRel(NonMatching, "d_a_swhit0"), ActorRel(NonMatching, "d_a_swtdoor"), ActorRel(NonMatching, "d_a_tag_attention"), ActorRel(NonMatching, "d_a_tag_ba1"), ActorRel(NonMatching, "d_a_tag_event"), ActorRel(NonMatching, "d_a_tag_evsw"), ActorRel(NonMatching, "d_a_tag_ghostship"), ActorRel(NonMatching, "d_a_tag_hint"), ActorRel(Matching, "d_a_tag_kb_item"), ActorRel(NonMatching, "d_a_tag_kk1"), ActorRel(NonMatching, "d_a_tag_light"), ActorRel(NonMatching, "d_a_tag_msg"), ActorRel(NonMatching, "d_a_tag_photo"), ActorRel(NonMatching, "d_a_tag_waterlevel"), ActorRel(NonMatching, "d_a_tama"), ActorRel(NonMatching, "d_a_tbox"), ActorRel(NonMatching, "d_a_tpota"), ActorRel(NonMatching, "d_a_tsubo"), ActorRel(NonMatching, "d_a_warpdm20"), ActorRel(NonMatching, "d_a_warphr"), ActorRel(NonMatching, "d_a_wbird"), ActorRel(NonMatching, "d_a_ykgr"), ActorRel(NonMatching, "d_a_alldie"), ActorRel(NonMatching, "d_a_am"), ActorRel(NonMatching, "d_a_am2"), ActorRel(NonMatching, "d_a_amiprop"), ActorRel(NonMatching, "d_a_arrow_iceeff"), ActorRel(NonMatching, "d_a_arrow_lighteff"), ActorRel(NonMatching, "d_a_beam"), ActorRel(NonMatching, "d_a_boko"), ActorRel(NonMatching, "d_a_canon"), ActorRel(NonMatching, "d_a_cc"), ActorRel(NonMatching, "d_a_dai"), ActorRel(NonMatching, "d_a_demo_item"), ActorRel(NonMatching, "d_a_door12"), ActorRel(NonMatching, "d_a_fallrock"), ActorRel(NonMatching, "d_a_ff"), ActorRel(NonMatching, "d_a_gy_ctrl"), ActorRel(NonMatching, "d_a_himo3"), ActorRel(NonMatching, "d_a_hmlif"), ActorRel(NonMatching, "d_a_hys"), ActorRel(NonMatching, "d_a_kamome"), ActorRel(NonMatching, "d_a_kantera"), ActorRel(NonMatching, "d_a_kn"), ActorRel(NonMatching, "d_a_kokiie"), ActorRel(NonMatching, "d_a_ks"), ActorRel(NonMatching, "d_a_kt"), ActorRel(NonMatching, "d_a_mflft"), ActorRel(NonMatching, "d_a_npc_cb1"), ActorRel(NonMatching, "d_a_npc_md"), ActorRel(NonMatching, "d_a_npc_so"), ActorRel(NonMatching, "d_a_nzg"), ActorRel(NonMatching, "d_a_obj_aygr"), ActorRel(NonMatching, "d_a_obj_balancelift"), ActorRel(NonMatching, "d_a_obj_barrier"), ActorRel(NonMatching, "d_a_obj_bemos"), ActorRel(NonMatching, "d_a_obj_canon"), ActorRel(NonMatching, "d_a_obj_eff"), ActorRel(NonMatching, "d_a_obj_magmarock"), ActorRel(NonMatching, "d_a_obj_majyuu_door"), ActorRel(NonMatching, "d_a_obj_stair"), ActorRel(NonMatching, "d_a_obj_swflat"), ActorRel(NonMatching, "d_a_obj_swhammer"), ActorRel(NonMatching, "d_a_obj_swheavy"), ActorRel(NonMatching, "d_a_obj_swlight"), ActorRel(NonMatching, "d_a_oq"), ActorRel(NonMatching, "d_a_pedestal"), ActorRel(NonMatching, "d_a_saku"), ActorRel(NonMatching, "d_a_seatag"), ActorRel(NonMatching, "d_a_shand"), ActorRel(NonMatching, "d_a_ship"), ActorRel(NonMatching, "d_a_shop_item"), ActorRel(NonMatching, "d_a_sie_flag"), ActorRel(NonMatching, "d_a_sitem"), ActorRel(NonMatching, "d_a_ss"), ActorRel(NonMatching, "d_a_sss"), ActorRel(NonMatching, "d_a_syan"), ActorRel(NonMatching, "d_a_tag_md_cb"), ActorRel(NonMatching, "d_a_tag_mk"), ActorRel(NonMatching, "d_a_tag_so"), ActorRel(NonMatching, "d_a_tornado"), ActorRel(NonMatching, "d_a_warpf"), ActorRel(NonMatching, "d_a_wind_tag"), ActorRel(NonMatching, "d_a_acorn_leaf"), ActorRel(NonMatching, "d_a_atdoor"), ActorRel(NonMatching, "d_a_auction"), ActorRel(NonMatching, "d_a_bb"), ActorRel(NonMatching, "d_a_bdk"), ActorRel(NonMatching, "d_a_bdkobj"), ActorRel(NonMatching, "d_a_bgn"), ActorRel(NonMatching, "d_a_bgn2"), ActorRel(NonMatching, "d_a_bgn3"), ActorRel(NonMatching, "d_a_bigelf"), ActorRel(NonMatching, "d_a_bk"), ActorRel(NonMatching, "d_a_bl"), ActorRel(NonMatching, "d_a_bmd"), ActorRel(NonMatching, "d_a_bmdfoot"), ActorRel(NonMatching, "d_a_bmdhand"), ActorRel(NonMatching, "d_a_bo"), ActorRel(Matching, "d_a_boss_item"), ActorRel(NonMatching, "d_a_bpw"), ActorRel(NonMatching, "d_a_bst"), ActorRel(NonMatching, "d_a_btd"), ActorRel(NonMatching, "d_a_bwd"), ActorRel(NonMatching, "d_a_bwdg"), ActorRel(NonMatching, "d_a_bwds"), ActorRel(NonMatching, "d_a_daiocta"), ActorRel(NonMatching, "d_a_daiocta_eye"), ActorRel(NonMatching, "d_a_deku_item"), ActorRel(NonMatching, "d_a_dk"), ActorRel(NonMatching, "d_a_dummy"), ActorRel(NonMatching, "d_a_fallrock_tag"), ActorRel(NonMatching, "d_a_fan"), ActorRel(NonMatching, "d_a_fganon"), ActorRel(NonMatching, "d_a_fgmahou"), ActorRel(NonMatching, "d_a_fire"), ActorRel(NonMatching, "d_a_fm"), ActorRel(NonMatching, "d_a_gm"), ActorRel(NonMatching, "d_a_gnd"), ActorRel(NonMatching, "d_a_goal_flag"), ActorRel(NonMatching, "d_a_gy"), ActorRel(NonMatching, "d_a_icelift"), ActorRel(NonMatching, "d_a_kb"), ActorRel(NonMatching, "d_a_kddoor"), ActorRel(NonMatching, "d_a_kita"), ActorRel(NonMatching, "d_a_klft"), ActorRel(NonMatching, "d_a_kmon"), ActorRel(NonMatching, "d_a_komore"), ActorRel(NonMatching, "d_a_lbridge"), ActorRel(NonMatching, "d_a_leaflift"), ActorRel(NonMatching, "d_a_lstair"), ActorRel(NonMatching, "d_a_machine"), ActorRel(NonMatching, "d_a_mant"), ActorRel(NonMatching, "d_a_mbdoor"), ActorRel(NonMatching, "d_a_mgameboard"), ActorRel(NonMatching, "d_a_mmusic"), ActorRel(NonMatching, "d_a_mo2"), ActorRel(NonMatching, "d_a_mozo"), ActorRel(NonMatching, "d_a_mt"), ActorRel(NonMatching, "d_a_npc_ac1"), ActorRel(NonMatching, "d_a_npc_ah"), ActorRel(NonMatching, "d_a_npc_aj1"), ActorRel(NonMatching, "d_a_npc_auction"), ActorRel(NonMatching, "d_a_npc_ba1"), ActorRel(NonMatching, "d_a_npc_bj1"), ActorRel(NonMatching, "d_a_npc_bm1"), ActorRel(NonMatching, "d_a_npc_bmcon1"), ActorRel(NonMatching, "d_a_npc_bms1"), ActorRel(NonMatching, "d_a_npc_bmsw"), ActorRel(NonMatching, "d_a_npc_bs1"), ActorRel(NonMatching, "d_a_npc_btsw"), ActorRel(NonMatching, "d_a_npc_btsw2"), ActorRel(NonMatching, "d_a_npc_co1"), ActorRel(NonMatching, "d_a_npc_de1"), ActorRel(NonMatching, "d_a_npc_ds1"), ActorRel(NonMatching, "d_a_npc_gk1"), ActorRel(NonMatching, "d_a_npc_gp1"), ActorRel(NonMatching, "d_a_npc_hi1"), ActorRel(NonMatching, "d_a_npc_ho"), ActorRel(NonMatching, "d_a_npc_hr"), ActorRel(NonMatching, "d_a_npc_jb1"), ActorRel(NonMatching, "d_a_npc_ji1"), ActorRel(NonMatching, "d_a_npc_kamome"), ActorRel(NonMatching, "d_a_npc_kf1"), ActorRel(NonMatching, "d_a_npc_kg1"), ActorRel(NonMatching, "d_a_npc_kg2"), ActorRel(NonMatching, "d_a_npc_kk1"), ActorRel(NonMatching, "d_a_npc_km1"), ActorRel(NonMatching, "d_a_npc_ko1"), ActorRel(NonMatching, "d_a_npc_kp1"), ActorRel(NonMatching, "d_a_npc_ls1"), ActorRel(NonMatching, "d_a_npc_mk"), ActorRel(NonMatching, "d_a_npc_mn"), ActorRel(NonMatching, "d_a_npc_mt"), ActorRel(NonMatching, "d_a_npc_nz"), ActorRel(NonMatching, "d_a_npc_ob1"), ActorRel(NonMatching, "d_a_npc_os"), ActorRel(NonMatching, "d_a_npc_p1"), ActorRel(NonMatching, "d_a_npc_p2"), ActorRel(NonMatching, "d_a_npc_people"), ActorRel(NonMatching, "d_a_npc_pf1"), ActorRel(NonMatching, "d_a_npc_photo"), ActorRel(NonMatching, "d_a_npc_pm1"), ActorRel(NonMatching, "d_a_npc_roten"), ActorRel(NonMatching, "d_a_npc_rsh1"), ActorRel(NonMatching, "d_a_npc_sarace"), ActorRel(NonMatching, "d_a_npc_sv"), ActorRel(NonMatching, "d_a_npc_tc"), ActorRel(NonMatching, "d_a_npc_tt"), ActorRel(NonMatching, "d_a_npc_uk"), ActorRel(NonMatching, "d_a_npc_ym1"), ActorRel(NonMatching, "d_a_npc_yw1"), ActorRel(NonMatching, "d_a_npc_zk1"), ActorRel(NonMatching, "d_a_npc_zl1"), ActorRel(NonMatching, "d_a_nz"), ActorRel(NonMatching, "d_a_obj_Itnak"), ActorRel(NonMatching, "d_a_obj_Vds"), ActorRel(NonMatching, "d_a_obj_Vteng"), ActorRel(NonMatching, "d_a_obj_YLzou"), ActorRel(NonMatching, "d_a_obj_Yboil"), ActorRel(NonMatching, "d_a_obj_adnno"), ActorRel(NonMatching, "d_a_obj_ajav"), ActorRel(NonMatching, "d_a_obj_apzl"), ActorRel(NonMatching, "d_a_obj_ashut"), ActorRel(NonMatching, "d_a_obj_auzu"), ActorRel(NonMatching, "d_a_obj_buoyflag"), ActorRel(NonMatching, "d_a_obj_buoyrace"), ActorRel(NonMatching, "d_a_obj_correct"), ActorRel(NonMatching, "d_a_obj_dmgroom"), ActorRel(NonMatching, "d_a_obj_dragonhead"), ActorRel(NonMatching, "d_a_obj_drift"), ActorRel(NonMatching, "d_a_obj_eayogn"), ActorRel(NonMatching, "d_a_obj_ebomzo"), ActorRel(NonMatching, "d_a_obj_ekskz"), ActorRel(NonMatching, "d_a_obj_eskban"), ActorRel(NonMatching, "d_a_obj_ferris"), ActorRel(NonMatching, "d_a_obj_figure"), ActorRel(NonMatching, "d_a_obj_firewall"), ActorRel(NonMatching, "d_a_obj_flame"), ActorRel(NonMatching, "d_a_obj_ftree"), ActorRel(NonMatching, "d_a_obj_ganonbed"), ActorRel(NonMatching, "d_a_obj_gaship"), ActorRel(NonMatching, "d_a_obj_gaship2"), ActorRel(NonMatching, "d_a_obj_gnnbtltaki"), ActorRel(NonMatching, "d_a_obj_gnndemotakie"), ActorRel(NonMatching, "d_a_obj_gnndemotakis"), ActorRel(NonMatching, "d_a_obj_gong"), ActorRel(NonMatching, "d_a_obj_gtaki"), ActorRel(NonMatching, "d_a_obj_hami2"), ActorRel(NonMatching, "d_a_obj_hami3"), ActorRel(NonMatching, "d_a_obj_hami4"), ActorRel(NonMatching, "d_a_obj_hat"), ActorRel(NonMatching, "d_a_obj_hbrf1"), ActorRel(NonMatching, "d_a_obj_hcbh"), ActorRel(NonMatching, "d_a_obj_hha"), ActorRel(NonMatching, "d_a_obj_hlift"), ActorRel(NonMatching, "d_a_obj_homen"), ActorRel(NonMatching, "d_a_obj_homensmoke"), ActorRel(NonMatching, "d_a_obj_hsehi1"), ActorRel(NonMatching, "d_a_obj_htetu1"), ActorRel(NonMatching, "d_a_obj_iceisland"), ActorRel(NonMatching, "d_a_obj_jump"), ActorRel(NonMatching, "d_a_obj_kanoke"), ActorRel(NonMatching, "d_a_obj_ladder"), ActorRel(NonMatching, "d_a_obj_light"), ActorRel(NonMatching, "d_a_obj_mkie"), ActorRel(NonMatching, "d_a_obj_mkiek"), ActorRel(NonMatching, "d_a_obj_mknjd"), ActorRel(NonMatching, "d_a_obj_mmrr"), ActorRel(NonMatching, "d_a_obj_msdan"), ActorRel(NonMatching, "d_a_obj_msdan2"), ActorRel(NonMatching, "d_a_obj_msdan_sub"), ActorRel(NonMatching, "d_a_obj_msdan_sub2"), ActorRel(NonMatching, "d_a_obj_mtest"), ActorRel(NonMatching, "d_a_obj_nest"), ActorRel(NonMatching, "d_a_obj_ojtree"), ActorRel(NonMatching, "d_a_obj_ospbox"), ActorRel(NonMatching, "d_a_obj_paper"), ActorRel(NonMatching, "d_a_obj_pbka"), ActorRel(NonMatching, "d_a_obj_pfall"), ActorRel(NonMatching, "d_a_obj_plant"), ActorRel(NonMatching, "d_a_obj_rflw"), ActorRel(NonMatching, "d_a_obj_rforce"), ActorRel(NonMatching, "d_a_obj_smplbg"), ActorRel(NonMatching, "d_a_obj_tapestry"), ActorRel(NonMatching, "d_a_obj_tntrap"), ActorRel(NonMatching, "d_a_obj_tower"), ActorRel(NonMatching, "d_a_obj_trap"), ActorRel(NonMatching, "d_a_obj_tribox"), ActorRel(NonMatching, "d_a_obj_try"), ActorRel(NonMatching, "d_a_obj_usovmc"), ActorRel(NonMatching, "d_a_obj_vfan"), ActorRel(NonMatching, "d_a_obj_vgnfd"), ActorRel(NonMatching, "d_a_obj_vmc"), ActorRel(NonMatching, "d_a_obj_vmsdz"), ActorRel(NonMatching, "d_a_obj_vmsms"), ActorRel(NonMatching, "d_a_obj_volcano"), ActorRel(NonMatching, "d_a_obj_vtil"), ActorRel(NonMatching, "d_a_obj_vyasi"), ActorRel(NonMatching, "d_a_obj_xfuta"), ActorRel(NonMatching, "d_a_obj_zouK"), ActorRel(NonMatching, "d_a_oship"), ActorRel(NonMatching, "d_a_ph"), ActorRel(NonMatching, "d_a_pt"), ActorRel(NonMatching, "d_a_pw"), ActorRel(NonMatching, "d_a_pz"), ActorRel(NonMatching, "d_a_sail"), ActorRel(NonMatching, "d_a_salvage_tbox"), ActorRel(Matching, "d_a_scene_change"), ActorRel(NonMatching, "d_a_shutter"), ActorRel(NonMatching, "d_a_shutter2"), ActorRel(NonMatching, "d_a_st"), ActorRel(NonMatching, "d_a_steam_tag"), ActorRel(NonMatching, "d_a_swattack"), ActorRel(NonMatching, "d_a_switem"), ActorRel(NonMatching, "d_a_swpropeller"), ActorRel(NonMatching, "d_a_swtact"), ActorRel(NonMatching, "d_a_tag_etc"), ActorRel(NonMatching, "d_a_tag_island"), ActorRel(NonMatching, "d_a_tag_kf1"), ActorRel(NonMatching, "d_a_tag_ret"), ActorRel(NonMatching, "d_a_tag_volcano"), ActorRel(NonMatching, "d_a_title"), ActorRel(NonMatching, "d_a_tn"), ActorRel(NonMatching, "d_a_toge"), ActorRel(NonMatching, "d_a_tori_flag"), ActorRel(NonMatching, "d_a_wall"), ActorRel(NonMatching, "d_a_warpfout"), ActorRel(NonMatching, "d_a_warpgn"), ActorRel(NonMatching, "d_a_warpls"), ActorRel(NonMatching, "d_a_warpmj"), ActorRel(NonMatching, "d_a_waterfall"), ActorRel(NonMatching, "d_a_windmill"), ActorRel(NonMatching, "d_a_wz"), ActorRel(NonMatching, "d_a_ygcwp"), ActorRel(NonMatching, "d_a_yougan"), ActorRel(NonMatching, "d_a_ghostship"), ActorRel(NonMatching, "d_a_movie_player"), ] if args.mode == "configure": # Write build.ninja and objdiff.json generate_build(config) elif args.mode == "progress": # Print progress and write progress.json config.progress_each_module = args.verbose calculate_progress(config) else: sys.exit("Unknown mode: " + args.mode)