From 6d1c2fabbef49d1d9668d87fa68c825a4c47c5bf Mon Sep 17 00:00:00 2001 From: wildfire Date: Sat, 30 Sep 2023 18:53:45 +0100 Subject: [PATCH] Build wotbl.narc using mon data --- platinum.us/rom.rsf | 8 +- res/pokemon/meson.build | 13 +++ res/prebuilt/poketool/personal/meson.build | 1 - res/prebuilt/poketool/personal/wotbl.narc | Bin 19168 -> 0 bytes tools/json2bin/meson.build | 1 + tools/json2bin/pokemon_personal_data.py | 4 +- tools/json2bin/pokemon_wotbl_data.py | 88 +++++++++++++++++++++ 7 files changed, 111 insertions(+), 4 deletions(-) delete mode 100644 res/prebuilt/poketool/personal/wotbl.narc create mode 100644 tools/json2bin/pokemon_wotbl_data.py diff --git a/platinum.us/rom.rsf b/platinum.us/rom.rsf index f6e1ee17cd..7b44fb7907 100644 --- a/platinum.us/rom.rsf +++ b/platinum.us/rom.rsf @@ -212,7 +212,13 @@ RomSpec File poketool/personal/growtbl.narc File poketool/personal/pl_growtbl.narc File poketool/personal/pms.narc - File poketool/personal/wotbl.narc + + Root /poketool/personal + HostRoot res/pokemon + File wotbl.narc + + Root / + HostRoot res/prebuilt File poketool/trainer/trdata.narc File poketool/trainer/trpoke.narc File poketool/trmsg/trtbl.narc diff --git a/res/pokemon/meson.build b/res/pokemon/meson.build index 9143b721c6..2c6f0f8b7e 100644 --- a/res/pokemon/meson.build +++ b/res/pokemon/meson.build @@ -604,6 +604,18 @@ endforeach # Generate NARCs +wotbl_narc = custom_target('wotbl.narc', + output: 'wotbl.narc', + input: personal_files, + command: [ + pokemon_wotbl_data_py, + '--knarc', knarc_exe, + '--source-dir', '@CURRENT_SOURCE_DIR@', + '--private-dir', '@PRIVATE_DIR@', + '--output-dir', '@OUTDIR@', + ] +) + pl_personal_narc = custom_target('pl_personal.narc', output: 'pl_personal.narc', input: personal_files, @@ -670,3 +682,4 @@ nitrofs_files += pl_personal_narc nitrofs_files += pl_poke_icon_narc nitrofs_files += pl_pokegra_narc nitrofs_files += pl_otherpoke_narc +nitrofs_files += wotbl_narc diff --git a/res/prebuilt/poketool/personal/meson.build b/res/prebuilt/poketool/personal/meson.build index 8ebe517459..d2242703f0 100644 --- a/res/prebuilt/poketool/personal/meson.build +++ b/res/prebuilt/poketool/personal/meson.build @@ -4,7 +4,6 @@ prebuilt_files = [ 'personal.narc', 'pl_growtbl.narc', 'pms.narc', - 'wotbl.narc' ] foreach f : prebuilt_files diff --git a/res/prebuilt/poketool/personal/wotbl.narc b/res/prebuilt/poketool/personal/wotbl.narc deleted file mode 100644 index 29885c89ca6eda1c91ebd4d2e4ee561a0dec4b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19168 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 int: name = file_path.parent.stem.upper() if name == '000': return 0 - if name == '494': return 494 - if name == '495': return 495 + if name == 'egg': return 494 + if name == 'bad_egg': return 495 if file_path.parent.parent.stem == 'forms': species_idx = file_path.parent.parent.parent.stem.upper() form = file_path.parent.stem.upper() diff --git a/tools/json2bin/pokemon_wotbl_data.py b/tools/json2bin/pokemon_wotbl_data.py new file mode 100644 index 0000000000..02e408e8a1 --- /dev/null +++ b/tools/json2bin/pokemon_wotbl_data.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +import pathlib + +import json2bin as j2b + +from consts import ( + moves +) + +from consts.pokemon import ( + species +) + +def table_line(move_id: int, level: int) -> bytes: + return ((move_id & 0x01FF) | ((level & 0x7F) << 9)).to_bytes(2, 'little', signed=False) + +def pad_bytes(data: bytes) -> bytes: + '''Aligns data to 4-byte boundary.''' + alignment = len(data) % 4 + padding = (4 - alignment) if alignment != 0 else 0 + return data + [0x00] * padding + +def parse_level_up_moves(table: dict, _size: int, _enum: None): + out = [] + for key, value in table.items(): + level = int(key) + level_moves = value + if type(level_moves) == str: + out += table_line(moves.Move[level_moves].value, level) + elif type(level_moves) == list: + for move in level_moves: + out += table_line(moves.Move[move].value, level) + else: + print('ERROR') + out += [0xFF, 0xFF] # Sentinel value for end of list + return pad_bytes(out) + + +SCHEMA = j2b.Parser() \ + .register_name(lambda s: s) \ + .register('learnset.level_up', 0, parse_level_up_moves) # Level-up learnsets are not fixed size + + +FORM_INDICES = { + 'DEOXYS' : { + 'ATTACK': 496, + 'DEFENSE': 497, + 'SPEED': 498, + }, + 'WORMADAM': { + 'SANDY': 499, + 'TRASH': 500, + }, + 'GIRATINA': { + 'ORIGIN': 501, + }, + 'SHAYMIN': { + 'SKY': 502, + }, + 'ROTOM': { + 'HEAT': 503, + 'WASH': 504, + 'FROST': 505, + 'FAN': 506, + 'MOW': 507, + }, +} +def indexer(file_path: pathlib.Path) -> int: + name = file_path.parent.stem.upper() + if name == '000': return 0 + if name == 'egg': return 494 + if name == 'bad_egg': return 495 + if file_path.parent.parent.stem == 'forms': + species_idx = file_path.parent.parent.parent.stem.upper() + form = file_path.parent.stem.upper() + return FORM_INDICES[species_idx][form] + return species.PokemonSpecies[f'SPECIES_{name}'].value + + +args = j2b.ARGPARSER.parse_args() +j2b.json2bin(args.source_dir, + SCHEMA, + args.private_dir, + args.output_dir, + indexer, + glob_pattern='**/data.json', + narc_name='wotbl', + narc_packer=args.knarc)