out_dir = os.path.join(os.path.dirname(__file__), 'dbg_output')
    base_dir = os.path.join(os.path.dirname(__file__), '..', '..', '..', '..')
    package = os.path.join(os.path.dirname(__file__), 'parameters_test')
    os.makedirs(out_dir, exist_ok=True)
    os.environ['SKYTEMPLE_DEBUG_ARMIPS_OUTPUT'] = 'YES'

    in_rom = NintendoDSRom.fromFile(os.path.join(base_dir, 'skyworkcopy.nds'))

    # Load PPMDU config, but remove all data about Patches and LooseBinFiles.
    config = get_ppmdu_config_for_rom(in_rom)
    config.asm_patches_constants.patches = {}
    config.asm_patches_constants.loose_bin_files = {}
    patcher = Patcher(in_rom, config, skip_core_patches=True)

    # Load the package
    patcher.add_pkg(package, False)
    assert not patcher.is_applied('ParametersTest')

    # Missing params
    try:
        patcher.apply('ParametersTest')
    except PatchNotConfiguredError:
        pass
    else:
        assert False, "Must throw PatchNotConfiguredError"

    # Invalid params
    try:
        patcher.apply('ParametersTest', config={
            'int_param': -1,
            'int_param2': 100,
Example #2
0
    package = os.path.join(os.path.dirname(__file__), '..', '..', '..', 'docs',
                           'patch_packages', 'example_patch.skypatch')
    os.makedirs(out_dir, exist_ok=True)

    in_rom = NintendoDSRom.fromFile(
        os.path.join(base_dir, 'skyworkcopy_us.nds'))

    # Load PPMDU config, but remove all data about Patches and LooseBinFiles.
    config = get_ppmdu_config_for_rom(in_rom)
    config.asm_patches_constants.patches = {}
    config.asm_patches_constants.loose_bin_files = {}

    patcher = Patcher(in_rom, config, skip_core_patches=True)

    # Load the package
    patcher.add_pkg(package)
    assert not patcher.is_applied('ExamplePatch')

    patcher.apply('ExamplePatch')
    with open(os.path.join(out_dir, 'example_patch_ov11.bin'), 'wb') as f:
        f.write(
            get_binary_from_rom_ppmdu(
                in_rom, config.binaries['overlay/overlay_0011.bin']))

    assert patcher.is_applied('ExamplePatch')
    in_rom.saveToFile(os.path.join(out_dir, 'patched.nds'))

    # Check if really patched
    out_rom = NintendoDSRom.fromFile(os.path.join(out_dir, 'patched.nds'))
    new_patcher = Patcher(out_rom, get_ppmdu_config_for_rom(out_rom))
    new_patcher.add_pkg(package)