From 5bb32ff3ecef13c2e31e2ee83c2b7a5641b616a9 Mon Sep 17 00:00:00 2001 From: scbroede <32247405+scbroede@users.noreply.github.com> Date: Sat, 23 Aug 2025 14:47:37 -0400 Subject: [PATCH] unpack trtbl.narc and trtblofs.narc (#656) --- generated/trainers.txt | 2 +- platinum.us/filesys.csv | 4 +- platinum.us/filesys.sha1 | 4 +- res/prebuilt/poketool/meson.build | 1 - res/prebuilt/poketool/trmsg/meson.build | 8 - res/prebuilt/poketool/trmsg/trtbl.narc | Bin 10048 -> 0 bytes res/prebuilt/poketool/trmsg/trtblofs.narc | Bin 1916 -> 0 bytes res/text/meson.build | 19 +- res/text/npc_trainer_messages.json | 16313 ---------------- res/trainers/data/ace_trainer_abel.json | 24 + res/trainers/data/ace_trainer_alicia.json | 26 + res/trainers/data/ace_trainer_allen.json | 25 + res/trainers/data/ace_trainer_alyssa.json | 33 + res/trainers/data/ace_trainer_anton.json | 22 + res/trainers/data/ace_trainer_arthur.json | 25 + res/trainers/data/ace_trainer_blake.json | 31 + res/trainers/data/ace_trainer_brandi.json | 25 + res/trainers/data/ace_trainer_breanna.json | 23 + res/trainers/data/ace_trainer_brenda.json | 28 + res/trainers/data/ace_trainer_brenna.json | 22 + res/trainers/data/ace_trainer_catherine.json | 23 + res/trainers/data/ace_trainer_cesar.json | 27 + res/trainers/data/ace_trainer_clarice.json | 20 + res/trainers/data/ace_trainer_dalton.json | 27 + .../data/ace_trainer_dalton_rematch.json | 13 + res/trainers/data/ace_trainer_dana.json | 30 + res/trainers/data/ace_trainer_deanna.json | 34 + .../data/ace_trainer_deanna_rematch.json | 18 + res/trainers/data/ace_trainer_dennis.json | 34 + .../data/ace_trainer_dennis_rematch_1.json | 18 + .../data/ace_trainer_dennis_rematch_2.json | 18 + res/trainers/data/ace_trainer_destiny.json | 26 + res/trainers/data/ace_trainer_ernest.json | 30 + res/trainers/data/ace_trainer_felix.json | 24 + res/trainers/data/ace_trainer_garrett.json | 32 + res/trainers/data/ace_trainer_graham.json | 30 + res/trainers/data/ace_trainer_henry.json | 27 + res/trainers/data/ace_trainer_isaiah.json | 23 + res/trainers/data/ace_trainer_jake.json | 33 + .../data/ace_trainer_jake_rematch.json | 18 + res/trainers/data/ace_trainer_jamie.json | 34 + res/trainers/data/ace_trainer_jasmin.json | 23 + res/trainers/data/ace_trainer_jonah.json | 29 + res/trainers/data/ace_trainer_jose.json | 31 + res/trainers/data/ace_trainer_kassandra.json | 22 + res/trainers/data/ace_trainer_keenan.json | 22 + res/trainers/data/ace_trainer_laura.json | 27 + res/trainers/data/ace_trainer_maria.json | 32 + res/trainers/data/ace_trainer_mariah.json | 23 + res/trainers/data/ace_trainer_maya.json | 28 + .../data/ace_trainer_maya_rematch_1.json | 14 + .../data/ace_trainer_maya_rematch_2.json | 14 + res/trainers/data/ace_trainer_meagan.json | 27 + res/trainers/data/ace_trainer_micah.json | 25 + res/trainers/data/ace_trainer_mikayla.json | 34 + res/trainers/data/ace_trainer_moira.json | 26 + .../data/ace_trainer_moira_rematch.json | 13 + res/trainers/data/ace_trainer_monique.json | 23 + res/trainers/data/ace_trainer_natasha.json | 23 + res/trainers/data/ace_trainer_olivia.json | 31 + .../data/ace_trainer_olivia_rematch.json | 16 + res/trainers/data/ace_trainer_omar.json | 21 + res/trainers/data/ace_trainer_quinn.json | 30 + res/trainers/data/ace_trainer_rodolfo.json | 32 + .../data/ace_trainer_rodolfo_rematch.json | 13 + res/trainers/data/ace_trainer_ruben.json | 32 + res/trainers/data/ace_trainer_sandra.json | 29 + res/trainers/data/ace_trainer_saul.json | 30 + .../data/ace_trainer_saul_rematch.json | 16 + res/trainers/data/ace_trainer_savannah.json | 25 + res/trainers/data/ace_trainer_sergio.json | 24 + res/trainers/data/ace_trainer_shannon.json | 27 + .../data/ace_trainer_shannon_rematch.json | 16 + res/trainers/data/ace_trainer_skylar.json | 27 + res/trainers/data/ace_trainer_stefan.json | 23 + res/trainers/data/ace_trainer_sydney.json | 25 + res/trainers/data/ace_trainer_zachery.json | 25 + res/trainers/data/aroma_lady_alison.json | 6 + res/trainers/data/aroma_lady_angela.json | 23 + res/trainers/data/aroma_lady_elizabeth.json | 30 + .../data/aroma_lady_elizabeth_rematch_1.json | 16 + .../data/aroma_lady_elizabeth_rematch_2.json | 16 + .../data/aroma_lady_elizabeth_rematch_3.json | 16 + res/trainers/data/aroma_lady_hannah.json | 31 + res/trainers/data/aroma_lady_jenna.json | 26 + res/trainers/data/aroma_lady_taylor.json | 30 + res/trainers/data/artist_ismael.json | 9 + res/trainers/data/artist_william.json | 35 + .../data/artist_william_rematch_1.json | 18 + .../data/artist_william_rematch_2.json | 18 + .../data/artist_william_rematch_3.json | 18 + res/trainers/data/battle_girl_helen.json | 31 + .../data/battle_girl_helen_rematch_1.json | 17 + .../data/battle_girl_helen_rematch_2.json | 17 + .../data/battle_girl_helen_rematch_3.json | 17 + res/trainers/data/battle_girl_kelsey.json | 30 + res/trainers/data/battle_girl_tyler.json | 23 + res/trainers/data/beauty_cyndy.json | 30 + res/trainers/data/beauty_cyndy_rematch_1.json | 16 + res/trainers/data/beauty_cyndy_rematch_2.json | 16 + res/trainers/data/beauty_devon.json | 27 + res/trainers/data/beauty_gabriella.json | 6 + res/trainers/data/beauty_harley.json | 9 + res/trainers/data/beauty_lindsay.json | 23 + res/trainers/data/beauty_nicola.json | 30 + .../data/belle_and_pa_ava_and_matt.json | 74 + .../data/belle_and_pa_beth_and_bob.json | 60 + res/trainers/data/bird_keeper_alexandra.json | 29 + res/trainers/data/bird_keeper_audrey.json | 30 + .../data/bird_keeper_audrey_rematch.json | 16 + res/trainers/data/bird_keeper_autumn.json | 20 + res/trainers/data/bird_keeper_brianna.json | 27 + .../data/bird_keeper_brianna_rematch_1.json | 13 + .../data/bird_keeper_brianna_rematch_2.json | 13 + res/trainers/data/bird_keeper_geneva.json | 32 + res/trainers/data/bird_keeper_hana.json | 21 + res/trainers/data/bird_keeper_katherine.json | 30 + res/trainers/data/bird_keeper_krystal.json | 20 + res/trainers/data/black_belt_adam.json | 30 + res/trainers/data/black_belt_carl.json | 29 + res/trainers/data/black_belt_colby.json | 22 + res/trainers/data/black_belt_darren.json | 23 + res/trainers/data/black_belt_david.json | 23 + res/trainers/data/black_belt_davon.json | 32 + .../data/black_belt_davon_rematch.json | 13 + res/trainers/data/black_belt_derek.json | 24 + res/trainers/data/black_belt_eddie.json | 23 + res/trainers/data/black_belt_gregory.json | 31 + res/trainers/data/black_belt_griffin.json | 28 + res/trainers/data/black_belt_jarrett.json | 23 + res/trainers/data/black_belt_jeffery.json | 26 + res/trainers/data/black_belt_kendal.json | 24 + res/trainers/data/black_belt_kyle.json | 31 + res/trainers/data/black_belt_luke.json | 27 + res/trainers/data/black_belt_miles.json | 20 + res/trainers/data/black_belt_nathaniel.json | 31 + res/trainers/data/black_belt_philip.json | 27 + .../data/black_belt_philip_rematch.json | 13 + res/trainers/data/black_belt_rafael.json | 21 + res/trainers/data/black_belt_ray.json | 21 + res/trainers/data/black_belt_ricky.json | 24 + res/trainers/data/black_belt_sean.json | 29 + res/trainers/data/black_belt_willie.json | 24 + res/trainers/data/breeder_albert.json | 30 + .../data/breeder_albert_rematch_1.json | 16 + .../data/breeder_albert_rematch_2.json | 16 + .../data/breeder_albert_rematch_3.json | 16 + res/trainers/data/breeder_amber.json | 31 + res/trainers/data/breeder_jennifer.json | 32 + .../data/breeder_jennifer_rematch_1.json | 18 + .../data/breeder_jennifer_rematch_2.json | 18 + .../data/breeder_jennifer_rematch_3.json | 18 + res/trainers/data/breeder_kahlil.json | 28 + res/trainers/data/breeder_kaylee.json | 9 + res/trainers/data/buck_battleground.json | 16 + res/trainers/data/buck_stark_mountain.json | 3 +- res/trainers/data/bug_catcher_brandon.json | 32 + .../data/bug_catcher_brandon_rematch_1.json | 16 + .../data/bug_catcher_brandon_rematch_2.json | 16 + .../data/bug_catcher_brandon_rematch_3.json | 16 + res/trainers/data/bug_catcher_donald.json | 20 + res/trainers/data/bug_catcher_jack.json | 23 + res/trainers/data/bug_catcher_phillip.json | 14 + res/trainers/data/cameraman_darryl.json | 6 + res/trainers/data/cameraman_tevin.json | 9 + .../data/cameraman_tevin_rematch_1.json | 9 + .../data/cameraman_tevin_rematch_2.json | 9 + .../data/cameraman_tevin_rematch_3.json | 9 + .../data/cameraman_tevin_rematch_4.json | 9 + res/trainers/data/cameraman_tevin_unused.json | 24 + res/trainers/data/camper_anthony.json | 31 + res/trainers/data/camper_curtis.json | 23 + res/trainers/data/camper_diego.json | 23 + res/trainers/data/camper_drew.json | 23 + res/trainers/data/camper_jacob.json | 28 + res/trainers/data/camper_lawrence.json | 23 + res/trainers/data/camper_parker.json | 25 + res/trainers/data/camper_zackary.json | 30 + .../data/camper_zackary_rematch_1.json | 16 + .../data/camper_zackary_rematch_2.json | 16 + .../data/camper_zackary_rematch_3.json | 16 + res/trainers/data/champion_cynthia.json | 26 + .../data/champion_cynthia_rematch.json | 26 + res/trainers/data/cheryl_battleground.json | 13 + res/trainers/data/cheryl_eterna_forest.json | 3 +- res/trainers/data/clown_lee.json | 9 + res/trainers/data/clown_lee_rematch_1.json | 9 + res/trainers/data/clown_lee_rematch_2.json | 9 + res/trainers/data/clown_lee_rematch_3.json | 9 + res/trainers/data/clown_lee_rematch_4.json | 9 + res/trainers/data/clown_lee_unused.json | 25 + res/trainers/data/collector_brady.json | 34 + res/trainers/data/collector_dean.json | 37 + res/trainers/data/collector_douglas.json | 34 + res/trainers/data/collector_edwin.json | 23 + res/trainers/data/collector_eugene.json | 9 + res/trainers/data/collector_fernando.json | 26 + res/trainers/data/collector_ivan.json | 31 + res/trainers/data/collector_ivan_rematch.json | 13 + res/trainers/data/collector_jamal.json | 31 + res/trainers/data/collector_terry.json | 25 + .../data/commander_jupiter_spear_pillar.json | 9 + .../commander_jupiter_stark_mountain.json | 9 + ...jupiter_team_galactic_eterna_building.json | 16 + .../data/commander_mars_lake_verity.json | 9 + .../data/commander_mars_spear_pillar.json | 9 + .../data/commander_mars_stark_mountain.json | 9 + .../data/commander_mars_valley_windworks.json | 16 + .../data/commander_saturn_galactic_hq.json | 9 + .../data/commander_saturn_valor_cavern.json | 9 + res/trainers/data/cowgirl_shelley.json | 31 + res/trainers/data/cyclist_axel.json | 28 + res/trainers/data/cyclist_james.json | 32 + res/trainers/data/cyclist_john.json | 30 + res/trainers/data/cyclist_john_rematch_1.json | 13 + res/trainers/data/cyclist_john_rematch_2.json | 13 + res/trainers/data/cyclist_john_rematch_3.json | 13 + res/trainers/data/cyclist_kayla.json | 30 + .../data/cyclist_kayla_rematch_1.json | 14 + .../data/cyclist_kayla_rematch_2.json | 14 + .../data/cyclist_kayla_rematch_3.json | 14 + res/trainers/data/cyclist_megan.json | 32 + res/trainers/data/cyclist_nicole.json | 31 + res/trainers/data/cyclist_rachel.json | 29 + res/trainers/data/cyclist_ryan.json | 28 + .../data/dawn_jubilife_city_chimchar.json | 3 +- .../data/dawn_jubilife_city_piplup.json | 3 +- .../data/dawn_jubilife_city_turtwig.json | 3 +- .../data/dawn_veilstone_city_chimchar.json | 3 +- .../data/dawn_veilstone_city_piplup.json | 3 +- .../data/dawn_veilstone_city_turtwig.json | 3 +- res/trainers/data/double_team_al_and_kay.json | 63 + res/trainers/data/double_team_jo_and_pat.json | 64 + .../data/double_team_zac_and_jen.json | 75 + res/trainers/data/dragon_tamer_clinton.json | 24 + res/trainers/data/dragon_tamer_darien.json | 26 + res/trainers/data/dragon_tamer_drake.json | 20 + res/trainers/data/dragon_tamer_geoffrey.json | 30 + .../data/dragon_tamer_geoffrey_rematch.json | 18 + res/trainers/data/dragon_tamer_hayden.json | 32 + .../data/dragon_tamer_hayden_rematch.json | 13 + res/trainers/data/dragon_tamer_joe.json | 20 + res/trainers/data/dragon_tamer_keegan.json | 35 + res/trainers/data/dragon_tamer_kenny.json | 21 + res/trainers/data/dragon_tamer_ondrej.json | 21 + res/trainers/data/dragon_tamer_patrick.json | 31 + .../data/dragon_tamer_patrick_rematch_1.json | 14 + .../data/dragon_tamer_patrick_rematch_2.json | 14 + res/trainers/data/dragon_tamer_stanley.json | 37 + res/trainers/data/elite_four_aaron.json | 21 + .../data/elite_four_aaron_rematch.json | 21 + res/trainers/data/elite_four_bertha.json | 20 + .../data/elite_four_bertha_rematch.json | 20 + res/trainers/data/elite_four_flint.json | 28 + .../data/elite_four_flint_fight_area.json | 6 + .../data/elite_four_flint_rematch.json | 28 + res/trainers/data/elite_four_lucian.json | 17 + .../data/elite_four_lucian_rematch.json | 17 + res/trainers/data/fisherman_alec.json | 29 + res/trainers/data/fisherman_alec_rematch.json | 14 + res/trainers/data/fisherman_andrew.json | 28 + res/trainers/data/fisherman_brett.json | 29 + res/trainers/data/fisherman_cody.json | 30 + res/trainers/data/fisherman_cole.json | 30 + res/trainers/data/fisherman_cory.json | 29 + res/trainers/data/fisherman_erick.json | 23 + res/trainers/data/fisherman_george.json | 28 + res/trainers/data/fisherman_joseph.json | 27 + .../data/fisherman_joseph_rematch_1.json | 13 + .../data/fisherman_joseph_rematch_2.json | 13 + res/trainers/data/fisherman_josh.json | 30 + res/trainers/data/fisherman_juan.json | 30 + res/trainers/data/fisherman_kenneth.json | 32 + res/trainers/data/fisherman_luc.json | 32 + res/trainers/data/fisherman_miguel.json | 31 + .../data/fisherman_miguel_rematch.json | 16 + res/trainers/data/fisherman_travis.json | 30 + res/trainers/data/fisherman_walter.json | 25 + res/trainers/data/fisherman_zachary.json | 30 + ...lactic_boss_cyrus_celestic_town_ruins.json | 13 + .../galactic_boss_cyrus_distortion_world.json | 29 + .../data/galactic_boss_cyrus_galactic_hq.json | 20 + .../data/galactic_grunt_celestic_town.json | 9 + .../galactic_grunt_floaroma_meadow_1.json | 9 + .../galactic_grunt_floaroma_meadow_2.json | 9 + .../data/galactic_grunt_galactic_hq_1f.json | 25 + .../data/galactic_grunt_galactic_hq_2f_1.json | 23 + .../data/galactic_grunt_galactic_hq_2f_2.json | 22 + .../data/galactic_grunt_galactic_hq_2f_3.json | 23 + .../data/galactic_grunt_galactic_hq_3f_1.json | 27 + .../data/galactic_grunt_galactic_hq_3f_2.json | 20 + .../data/galactic_grunt_galactic_hq_3f_3.json | 23 + .../data/galactic_grunt_galactic_hq_3f_4.json | 23 + .../galactic_grunt_galactic_hq_b2f_1.json | 23 + .../galactic_grunt_galactic_hq_b2f_2.json | 28 + .../data/galactic_grunt_iron_island_1.json | 9 + .../data/galactic_grunt_iron_island_2.json | 9 + .../data/galactic_grunt_jubilife_city_1.json | 9 + .../data/galactic_grunt_jubilife_city_2.json | 9 + .../data/galactic_grunt_lake_valor_1.json | 29 + .../data/galactic_grunt_lake_valor_2.json | 24 + .../data/galactic_grunt_lake_valor_3.json | 25 + .../data/galactic_grunt_lake_verity_1.json | 24 + .../data/galactic_grunt_lake_verity_2.json | 22 + .../data/galactic_grunt_lake_verity_3.json | 19 + .../data/galactic_grunt_lake_verity_4.json | 23 + .../data/galactic_grunt_mt_coronet_3f_1.json | 21 + .../data/galactic_grunt_mt_coronet_3f_2.json | 27 + .../data/galactic_grunt_mt_coronet_4f_1.json | 24 + .../data/galactic_grunt_mt_coronet_4f_2.json | 26 + .../data/galactic_grunt_mt_coronet_5f_1.json | 25 + .../data/galactic_grunt_mt_coronet_5f_2.json | 28 + .../data/galactic_grunt_mt_coronet_6f.json | 26 + ...lactic_grunt_mt_coronet_tunnel_room_1.json | 21 + ...lactic_grunt_mt_coronet_tunnel_room_2.json | 25 + ...lactic_grunt_mt_coronet_tunnel_room_3.json | 29 + .../data/galactic_grunt_spear_pillar_1.json | 9 + .../data/galactic_grunt_spear_pillar_2.json | 9 + ...nt_team_galactic_eterna_building_1f_1.json | 23 + ...nt_team_galactic_eterna_building_1f_2.json | 20 + ...nt_team_galactic_eterna_building_2f_1.json | 24 + ...nt_team_galactic_eterna_building_2f_2.json | 21 + ...runt_team_galactic_eterna_building_3f.json | 23 + .../galactic_grunt_valley_windworks_1.json | 9 + .../galactic_grunt_valley_windworks_2.json | 23 + .../galactic_grunt_valley_windworks_3.json | 25 + .../data/galactic_grunt_valor_lakefront.json | 9 + .../data/galactic_grunt_veilstone_city_1.json | 9 + .../data/galactic_grunt_veilstone_city_2.json | 9 + res/trainers/data/gentleman_jeremy.json | 32 + .../data/gentleman_jeremy_rematch_1.json | 16 + .../data/gentleman_jeremy_rematch_2.json | 16 + .../data/gentleman_jeremy_rematch_3.json | 16 + res/trainers/data/gentleman_leonardo.json | 10 + res/trainers/data/guitarist_arturo.json | 9 + .../data/guitarist_arturo_rematch_1.json | 9 + .../data/guitarist_arturo_rematch_2.json | 9 + .../data/guitarist_arturo_rematch_3.json | 10 + .../data/guitarist_arturo_rematch_4.json | 9 + .../data/guitarist_arturo_unused.json | 24 + res/trainers/data/guitarist_jerry.json | 26 + res/trainers/data/guitarist_lonnie.json | 26 + res/trainers/data/guitarist_preston.json | 22 + res/trainers/data/guitarist_tony.json | 31 + res/trainers/data/guitarist_tony_rematch.json | 17 + res/trainers/data/hiker_alexander.json | 33 + res/trainers/data/hiker_damon.json | 27 + res/trainers/data/hiker_daniel.json | 34 + res/trainers/data/hiker_jonathan.json | 34 + res/trainers/data/hiker_justin.json | 31 + res/trainers/data/hiker_kevin.json | 31 + res/trainers/data/hiker_lorenzo.json | 27 + res/trainers/data/hiker_louis.json | 28 + res/trainers/data/hiker_maurice.json | 22 + res/trainers/data/hiker_nicholas.json | 31 + res/trainers/data/hiker_reginald.json | 17 + res/trainers/data/hiker_robert.json | 32 + res/trainers/data/hiker_theodore.json | 27 + .../data/hiker_theodore_rematch_1.json | 13 + .../data/hiker_theodore_rematch_2.json | 13 + .../data/hiker_theodore_rematch_3.json | 13 + res/trainers/data/idol_grace.json | 9 + res/trainers/data/idol_grace_rematch_1.json | 9 + res/trainers/data/idol_grace_rematch_2.json | 9 + res/trainers/data/idol_grace_rematch_3.json | 9 + res/trainers/data/idol_grace_rematch_4.json | 9 + res/trainers/data/idol_grace_unused.json | 25 + .../data/interviewers_roxy_and_oli.json | 16 + .../interviewers_roxy_and_oli_rematch_1.json | 16 + .../interviewers_roxy_and_oli_rematch_2.json | 16 + .../interviewers_roxy_and_oli_rematch_3.json | 16 + .../interviewers_roxy_and_oli_rematch_4.json | 16 + .../interviewers_roxy_and_oli_unused.json | 58 + res/trainers/data/jogger_craig.json | 37 + res/trainers/data/jogger_craig_rematch_1.json | 13 + res/trainers/data/jogger_craig_rematch_2.json | 13 + res/trainers/data/jogger_raul.json | 37 + res/trainers/data/jogger_richard.json | 37 + res/trainers/data/jogger_scott.json | 35 + res/trainers/data/jogger_wyatt.json | 38 + res/trainers/data/lady_celeste.json | 6 + res/trainers/data/lady_kylie.json | 9 + res/trainers/data/lady_melissa.json | 30 + res/trainers/data/lady_melissa_rematch_1.json | 13 + res/trainers/data/lady_melissa_rematch_2.json | 13 + res/trainers/data/lady_melissa_rematch_3.json | 13 + res/trainers/data/lass_blythe.json | 6 + res/trainers/data/lass_briana.json | 19 + res/trainers/data/lass_caroline.json | 23 + res/trainers/data/lass_cassidy.json | 21 + res/trainers/data/lass_kaitlin.json | 24 + res/trainers/data/lass_madeline.json | 28 + .../data/lass_madeline_rematch_1.json | 14 + .../data/lass_madeline_rematch_2.json | 14 + .../data/lass_madeline_rematch_3.json | 14 + res/trainers/data/lass_molly.json | 23 + res/trainers/data/lass_natalie.json | 32 + res/trainers/data/lass_samantha.json | 30 + .../data/lass_samantha_rematch_1.json | 17 + .../data/lass_samantha_rematch_2.json | 17 + .../data/lass_samantha_rematch_3.json | 17 + res/trainers/data/lass_sarah.json | 30 + res/trainers/data/leader_byron.json | 23 + res/trainers/data/leader_byron_rematch.json | 16 + res/trainers/data/leader_candice.json | 23 + res/trainers/data/leader_candice_rematch.json | 16 + res/trainers/data/leader_fantina.json | 20 + res/trainers/data/leader_fantina_rematch.json | 16 + res/trainers/data/leader_gardenia.json | 20 + .../data/leader_gardenia_rematch.json | 16 + res/trainers/data/leader_maylene.json | 20 + res/trainers/data/leader_maylene_rematch.json | 16 + res/trainers/data/leader_roark.json | 23 + res/trainers/data/leader_roark_rematch.json | 16 + res/trainers/data/leader_volkner.json | 31 + .../data/leader_volkner_fight_area.json | 9 + res/trainers/data/leader_volkner_rematch.json | 17 + res/trainers/data/leader_wake.json | 22 + res/trainers/data/leader_wake_rematch.json | 16 + .../data/lucas_jubilife_city_chimchar.json | 3 +- .../data/lucas_jubilife_city_piplup.json | 3 +- .../data/lucas_jubilife_city_turtwig.json | 3 +- .../data/lucas_veilstone_city_chimchar.json | 3 +- .../data/lucas_veilstone_city_piplup.json | 3 +- .../data/lucas_veilstone_city_turtwig.json | 3 +- res/trainers/data/maid_belinda.json | 6 + res/trainers/data/maid_clare.json | 6 + res/trainers/data/maid_elena.json | 6 + res/trainers/data/maid_emily.json | 6 + res/trainers/data/maid_sophie.json | 6 + res/trainers/data/marley_battleground.json | 13 + res/trainers/data/marley_victory_road.json | 3 +- res/trainers/data/mira_battleground.json | 16 + res/trainers/data/mira_wayward_cave.json | 3 +- res/trainers/data/ninja_boy_brennan.json | 30 + res/trainers/data/ninja_boy_bruce.json | 30 + res/trainers/data/ninja_boy_davido.json | 31 + res/trainers/data/ninja_boy_ethan.json | 27 + res/trainers/data/ninja_boy_fabian.json | 30 + res/trainers/data/ninja_boy_joel.json | 33 + res/trainers/data/ninja_boy_matthew.json | 30 + res/trainers/data/ninja_boy_nathan.json | 27 + res/trainers/data/ninja_boy_nick.json | 27 + res/trainers/data/ninja_boy_zach.json | 32 + .../data/ninja_boy_zach_rematch_1.json | 16 + .../data/ninja_boy_zach_rematch_2.json | 16 + .../data/ninja_boy_zach_rematch_3.json | 16 + res/trainers/data/none.json | 3 +- res/trainers/data/parasol_lady_alexa.json | 28 + .../data/parasol_lady_alexa_rematch_1.json | 13 + .../data/parasol_lady_alexa_rematch_2.json | 13 + .../data/parasol_lady_alexa_rematch_3.json | 13 + res/trainers/data/parasol_lady_sabrina.json | 27 + res/trainers/data/pi_carlos.json | 33 + res/trainers/data/pi_carlos_rematch_1.json | 13 + res/trainers/data/pi_carlos_rematch_2.json | 13 + res/trainers/data/pi_kendrick.json | 6 + res/trainers/data/picnicker_ana.json | 21 + res/trainers/data/picnicker_cheyenne.json | 23 + res/trainers/data/picnicker_diana.json | 23 + res/trainers/data/picnicker_karina.json | 30 + .../data/picnicker_karina_rematch_1.json | 16 + .../data/picnicker_karina_rematch_2.json | 16 + .../data/picnicker_karina_rematch_3.json | 16 + res/trainers/data/picnicker_lauren.json | 34 + res/trainers/data/picnicker_siena.json | 32 + res/trainers/data/picnicker_summer.json | 24 + res/trainers/data/picnicker_tori.json | 25 + res/trainers/data/poke_kid_ariel.json | 6 + .../data/poke_kid_ariel_rematch_1.json | 6 + .../data/poke_kid_ariel_rematch_2.json | 6 + .../data/poke_kid_ariel_rematch_3.json | 6 + .../data/poke_kid_ariel_rematch_4.json | 6 + res/trainers/data/poke_kid_ariel_unused.json | 20 + res/trainers/data/poke_kid_danielle.json | 31 + .../data/poke_kid_danielle_rematch_1.json | 14 + .../data/poke_kid_danielle_rematch_2.json | 14 + .../data/poke_kid_danielle_rematch_3.json | 14 + res/trainers/data/poke_kid_janet.json | 21 + res/trainers/data/poke_kid_meghan.json | 24 + res/trainers/data/pokefan_leonard.json | 24 + res/trainers/data/pokefan_meredith.json | 6 + res/trainers/data/pokefan_rebekah.json | 20 + res/trainers/data/policeman_alex.json | 39 + res/trainers/data/policeman_bobby.json | 38 + res/trainers/data/policeman_caleb.json | 38 + res/trainers/data/policeman_danny.json | 34 + .../data/policeman_danny_rematch_1.json | 13 + .../data/policeman_danny_rematch_2.json | 13 + .../data/policeman_danny_rematch_3.json | 13 + res/trainers/data/policeman_dylan.json | 38 + res/trainers/data/policeman_thomas.json | 37 + res/trainers/data/psychic_abigail.json | 31 + .../data/psychic_abigail_rematch_1.json | 17 + .../data/psychic_abigail_rematch_2.json | 17 + res/trainers/data/psychic_brittney.json | 34 + .../data/psychic_brittney_rematch.json | 18 + res/trainers/data/psychic_bryce.json | 24 + res/trainers/data/psychic_chelsey.json | 25 + res/trainers/data/psychic_corbin.json | 30 + res/trainers/data/psychic_corbin_rematch.json | 16 + res/trainers/data/psychic_daisy.json | 31 + res/trainers/data/psychic_daisy_rematch.json | 16 + res/trainers/data/psychic_deandre.json | 24 + res/trainers/data/psychic_desiree.json | 28 + res/trainers/data/psychic_elijah.json | 23 + res/trainers/data/psychic_kendra.json | 23 + res/trainers/data/psychic_kody.json | 23 + res/trainers/data/psychic_landon.json | 21 + res/trainers/data/psychic_lindsey.json | 23 + res/trainers/data/psychic_maxwell.json | 31 + .../data/psychic_maxwell_rematch.json | 16 + res/trainers/data/psychic_mitchell.json | 27 + .../data/psychic_mitchell_rematch_1.json | 13 + .../data/psychic_mitchell_rematch_2.json | 13 + res/trainers/data/psychic_rachael.json | 23 + res/trainers/data/psychic_sterling.json | 21 + res/trainers/data/psychic_valencia.json | 23 + res/trainers/data/rancher_marco.json | 34 + .../data/rancher_marco_rematch_1.json | 18 + .../data/rancher_marco_rematch_2.json | 18 + res/trainers/data/ranger_allison.json | 27 + .../data/ranger_allison_rematch_1.json | 13 + .../data/ranger_allison_rematch_2.json | 13 + .../data/ranger_allison_rematch_3.json | 13 + res/trainers/data/ranger_ashlee.json | 31 + res/trainers/data/ranger_ashlee_rematch.json | 13 + res/trainers/data/ranger_deshawn.json | 34 + res/trainers/data/ranger_dwayne.json | 30 + res/trainers/data/ranger_felicia.json | 33 + res/trainers/data/ranger_jeffrey.json | 31 + res/trainers/data/ranger_krista.json | 29 + res/trainers/data/ranger_kyler.json | 28 + res/trainers/data/ranger_kyler_rematch.json | 14 + res/trainers/data/ranger_taylor.json | 27 + .../data/ranger_taylor_rematch_1.json | 13 + .../data/ranger_taylor_rematch_2.json | 13 + .../data/ranger_taylor_rematch_3.json | 13 + res/trainers/data/reporter_kinsey.json | 6 + .../data/reporter_kinsey_rematch_1.json | 6 + .../data/reporter_kinsey_rematch_2.json | 6 + .../data/reporter_kinsey_rematch_3.json | 6 + .../data/reporter_kinsey_rematch_4.json | 6 + res/trainers/data/reporter_kinsey_unused.json | 20 + res/trainers/data/reporter_valerie.json | 9 + res/trainers/data/rich_boy_jason.json | 35 + res/trainers/data/rich_boy_liam.json | 6 + res/trainers/data/rich_boy_roman.json | 9 + res/trainers/data/rich_boy_trey.json | 31 + .../data/rich_boy_trey_rematch_1.json | 13 + .../data/rich_boy_trey_rematch_2.json | 13 + res/trainers/data/riley_battleground.json | 17 + res/trainers/data/riley_iron_island.json | 3 +- .../data/rival_canalave_city_chimchar.json | 23 + .../data/rival_canalave_city_piplup.json | 23 + .../data/rival_canalave_city_turtwig.json | 23 + .../data/rival_fight_area_chimchar.json | 3 +- .../data/rival_fight_area_piplup.json | 3 +- .../data/rival_fight_area_turtwig.json | 3 +- .../data/rival_pastoria_city_chimchar.json | 16 + .../data/rival_pastoria_city_piplup.json | 16 + .../data/rival_pastoria_city_turtwig.json | 16 + .../data/rival_pokemon_league_chimchar.json | 23 + .../data/rival_pokemon_league_piplup.json | 23 + .../data/rival_pokemon_league_turtwig.json | 23 + .../data/rival_route_201_chimchar.json | 23 + res/trainers/data/rival_route_201_piplup.json | 23 + .../data/rival_route_201_turtwig.json | 23 + .../data/rival_route_203_chimchar.json | 23 + res/trainers/data/rival_route_203_piplup.json | 23 + .../data/rival_route_203_turtwig.json | 23 + .../data/rival_route_209_chimchar.json | 23 + res/trainers/data/rival_route_209_piplup.json | 23 + .../data/rival_route_209_turtwig.json | 23 + .../data/rival_spear_pillar_chimchar.json | 3 +- .../data/rival_spear_pillar_piplup.json | 3 +- .../data/rival_spear_pillar_turtwig.json | 3 +- .../data/rival_survival_area_1_chimchar.json | 16 + .../data/rival_survival_area_1_piplup.json | 16 + .../data/rival_survival_area_1_turtwig.json | 16 + .../data/rival_survival_area_2_chimchar.json | 17 + .../data/rival_survival_area_2_piplup.json | 17 + .../data/rival_survival_area_2_turtwig.json | 17 + res/trainers/data/roughneck_kirby.json | 24 + res/trainers/data/ruin_maniac_bryan.json | 32 + res/trainers/data/ruin_maniac_calvin.json | 32 + res/trainers/data/ruin_maniac_gerald.json | 26 + res/trainers/data/ruin_maniac_harry.json | 30 + .../data/ruin_maniac_harry_rematch_1.json | 16 + .../data/ruin_maniac_harry_rematch_2.json | 16 + res/trainers/data/ruin_maniac_karl.json | 25 + res/trainers/data/ruin_maniac_larry.json | 32 + res/trainers/data/ruin_maniac_ronald.json | 34 + res/trainers/data/sailor_damian.json | 26 + res/trainers/data/sailor_luther.json | 32 + res/trainers/data/sailor_marc.json | 36 + res/trainers/data/sailor_marc_rematch_1.json | 18 + res/trainers/data/sailor_marc_rematch_2.json | 18 + res/trainers/data/sailor_paul.json | 29 + res/trainers/data/sailor_samson.json | 24 + res/trainers/data/sailor_skyler.json | 29 + res/trainers/data/sailor_zachariah.json | 32 + .../data/sailor_zachariah_rematch.json | 16 + res/trainers/data/school_kid_chance.json | 25 + res/trainers/data/school_kid_christine.json | 9 + res/trainers/data/school_kid_esteban.json | 6 + res/trainers/data/school_kid_forrest.json | 22 + res/trainers/data/school_kid_harrison.json | 9 + res/trainers/data/school_kid_mackenzie.json | 23 + res/trainers/data/school_kid_tiera.json | 23 + res/trainers/data/scientist_darrius.json | 24 + res/trainers/data/scientist_emilio.json | 9 + res/trainers/data/scientist_fredrick.json | 27 + res/trainers/data/scientist_shaun.json | 33 + .../data/scientist_shaun_rematch_1.json | 17 + .../data/scientist_shaun_rematch_2.json | 17 + .../data/scientist_shaun_rematch_3.json | 17 + res/trainers/data/scientist_stefano.json | 30 + res/trainers/data/scientist_travon.json | 26 + res/trainers/data/skier_andrea.json | 29 + res/trainers/data/skier_andrea_rematch_1.json | 13 + res/trainers/data/skier_andrea_rematch_2.json | 13 + res/trainers/data/skier_bjorn.json | 27 + res/trainers/data/skier_bjorn_rematch_1.json | 13 + res/trainers/data/skier_bjorn_rematch_2.json | 13 + res/trainers/data/skier_bradley.json | 27 + res/trainers/data/skier_edward.json | 30 + res/trainers/data/skier_edward_rematch_1.json | 13 + res/trainers/data/skier_edward_rematch_2.json | 13 + res/trainers/data/skier_kaitlyn.json | 27 + res/trainers/data/skier_lexie.json | 30 + res/trainers/data/skier_madison.json | 29 + .../data/skier_madison_rematch_1.json | 14 + .../data/skier_madison_rematch_2.json | 14 + res/trainers/data/skier_shawn.json | 30 + res/trainers/data/socialite_rebecca.json | 9 + res/trainers/data/socialite_reina.json | 31 + .../data/socialite_reina_rematch_1.json | 17 + .../data/socialite_reina_rematch_2.json | 17 + res/trainers/data/swimmer_adrian.json | 32 + res/trainers/data/swimmer_aubree.json | 27 + res/trainers/data/swimmer_cassandra.json | 36 + res/trainers/data/swimmer_claire.json | 27 + res/trainers/data/swimmer_colton.json | 30 + res/trainers/data/swimmer_crystal.json | 34 + .../data/swimmer_crystal_rematch.json | 14 + res/trainers/data/swimmer_dillon.json | 28 + res/trainers/data/swimmer_erica.json | 27 + res/trainers/data/swimmer_erik.json | 30 + res/trainers/data/swimmer_evan.json | 31 + res/trainers/data/swimmer_francisco.json | 27 + .../data/swimmer_francisco_rematch.json | 16 + res/trainers/data/swimmer_gabrielle.json | 29 + res/trainers/data/swimmer_glenn.json | 31 + res/trainers/data/swimmer_glenn_rematch.json | 16 + res/trainers/data/swimmer_haley.json | 27 + res/trainers/data/swimmer_jessica.json | 29 + res/trainers/data/swimmer_joanna.json | 29 + res/trainers/data/swimmer_joanna_rematch.json | 13 + res/trainers/data/swimmer_katelyn.json | 27 + res/trainers/data/swimmer_kurt.json | 33 + res/trainers/data/swimmer_lydia.json | 34 + res/trainers/data/swimmer_mallory.json | 31 + res/trainers/data/swimmer_mary.json | 33 + res/trainers/data/swimmer_miranda.json | 29 + .../data/swimmer_miranda_rematch.json | 13 + res/trainers/data/swimmer_oscar.json | 31 + res/trainers/data/swimmer_paige.json | 30 + res/trainers/data/swimmer_ricardo.json | 29 + res/trainers/data/swimmer_sam.json | 32 + res/trainers/data/swimmer_sheltin.json | 30 + res/trainers/data/swimmer_sophia.json | 25 + res/trainers/data/swimmer_troy.json | 28 + res/trainers/data/swimmer_vanessa.json | 32 + res/trainers/data/swimmer_vincent.json | 28 + res/trainers/data/swimmer_wade.json | 27 + res/trainers/data/swimmer_wesley.json | 27 + res/trainers/data/swimmer_wesley_rematch.json | 13 + res/trainers/data/tuber_caitlyn.json | 24 + res/trainers/data/tuber_chelsea.json | 27 + .../data/tuber_chelsea_rematch_1.json | 13 + .../data/tuber_chelsea_rematch_2.json | 13 + res/trainers/data/tuber_conner.json | 30 + res/trainers/data/tuber_holly.json | 27 + res/trainers/data/tuber_jacky.json | 26 + res/trainers/data/tuber_jared.json | 30 + res/trainers/data/tuber_jared_rematch_1.json | 16 + res/trainers/data/tuber_jared_rematch_2.json | 16 + res/trainers/data/tuber_mariel.json | 29 + res/trainers/data/tuber_trenton.json | 31 + res/trainers/data/twins_emma_and_lil.json | 69 + res/trainers/data/twins_liv_and_liz.json | 66 + res/trainers/data/twins_teri_and_tia.json | 70 + .../data/twins_teri_and_tia_rematch_1.json | 24 + .../data/twins_teri_and_tia_rematch_2.json | 24 + res/trainers/data/unknown_005.json | 3 +- res/trainers/data/unknown_006.json | 3 +- res/trainers/data/unknown_007.json | 3 +- res/trainers/data/unknown_008.json | 3 +- res/trainers/data/unknown_009.json | 3 +- res/trainers/data/unknown_050.json | 14 + res/trainers/data/unknown_051.json | 14 + res/trainers/data/unknown_052.json | 14 + res/trainers/data/unknown_054.json | 14 + res/trainers/data/unknown_058.json | 14 + res/trainers/data/unknown_059.json | 18 + res/trainers/data/unknown_060.json | 14 + res/trainers/data/unknown_061.json | 14 + res/trainers/data/unknown_062.json | 14 + res/trainers/data/unknown_063.json | 14 + res/trainers/data/unknown_064.json | 14 + res/trainers/data/unknown_077.json | 14 + res/trainers/data/unknown_086.json | 14 + res/trainers/data/unknown_087.json | 18 + res/trainers/data/unknown_097.json | 18 + res/trainers/data/unknown_098.json | 18 + res/trainers/data/unknown_100.json | 14 + res/trainers/data/unknown_101.json | 14 + res/trainers/data/unknown_109.json | 14 + res/trainers/data/unknown_112.json | 34 + res/trainers/data/unknown_115.json | 14 + res/trainers/data/unknown_116.json | 14 + res/trainers/data/unknown_117.json | 14 + res/trainers/data/unknown_118.json | 14 + res/trainers/data/unknown_122.json | 14 + res/trainers/data/unknown_123.json | 14 + res/trainers/data/unknown_124.json | 14 + res/trainers/data/unknown_125.json | 14 + res/trainers/data/unknown_126.json | 18 + res/trainers/data/unknown_131.json | 14 + res/trainers/data/unknown_149.json | 14 + res/trainers/data/unknown_150.json | 14 + res/trainers/data/unknown_151.json | 14 + res/trainers/data/unknown_152.json | 14 + res/trainers/data/unknown_155.json | 34 + res/trainers/data/unknown_156.json | 14 + res/trainers/data/unknown_157.json | 14 + res/trainers/data/unknown_158.json | 14 + res/trainers/data/unknown_165.json | 34 + res/trainers/data/unknown_169.json | 14 + res/trainers/data/unknown_176.json | 14 + res/trainers/data/unknown_177.json | 14 + res/trainers/data/unknown_178.json | 14 + res/trainers/data/unknown_179.json | 14 + res/trainers/data/unknown_181.json | 14 + res/trainers/data/unknown_182.json | 34 + res/trainers/data/unknown_197.json | 14 + res/trainers/data/unknown_198.json | 14 + res/trainers/data/unknown_199.json | 14 + res/trainers/data/unknown_200.json | 14 + res/trainers/data/unknown_207.json | 34 + res/trainers/data/unknown_208.json | 14 + res/trainers/data/unknown_209.json | 14 + res/trainers/data/unknown_210.json | 14 + res/trainers/data/unknown_211.json | 14 + res/trainers/data/unknown_212.json | 14 + res/trainers/data/unknown_213.json | 14 + res/trainers/data/unknown_214.json | 14 + res/trainers/data/unknown_215.json | 14 + res/trainers/data/unknown_216.json | 14 + res/trainers/data/unknown_217.json | 14 + res/trainers/data/unknown_218.json | 14 + res/trainers/data/unknown_219.json | 14 + res/trainers/data/unknown_220.json | 14 + res/trainers/data/unknown_221.json | 14 + res/trainers/data/unknown_222.json | 14 + res/trainers/data/unknown_223.json | 34 + res/trainers/data/unknown_238.json | 3 +- res/trainers/data/unknown_239.json | 3 +- res/trainers/data/unknown_241.json | 14 + res/trainers/data/unknown_242.json | 14 + res/trainers/data/unknown_243.json | 14 + res/trainers/data/unknown_251.json | 3 +- res/trainers/data/unknown_252.json | 3 +- res/trainers/data/unknown_253.json | 3 +- res/trainers/data/unknown_254.json | 3 +- res/trainers/data/unknown_255.json | 3 +- res/trainers/data/unknown_291.json | 18 + res/trainers/data/unknown_321.json | 3 +- res/trainers/data/unknown_334.json | 14 + res/trainers/data/unknown_336.json | 14 + res/trainers/data/unknown_347.json | 14 + res/trainers/data/unknown_349.json | 14 + res/trainers/data/unknown_350.json | 14 + res/trainers/data/unknown_351.json | 14 + res/trainers/data/unknown_352.json | 14 + res/trainers/data/unknown_353.json | 14 + res/trainers/data/unknown_354.json | 14 + res/trainers/data/unknown_363.json | 14 + res/trainers/data/unknown_364.json | 14 + res/trainers/data/unknown_365.json | 14 + res/trainers/data/unknown_374.json | 3 +- res/trainers/data/unknown_375.json | 3 +- res/trainers/data/unknown_376.json | 14 + res/trainers/data/unknown_384.json | 3 +- res/trainers/data/unknown_385.json | 3 +- res/trainers/data/unknown_387.json | 3 +- res/trainers/data/unknown_391.json | 3 +- res/trainers/data/unknown_402.json | 3 +- res/trainers/data/unknown_411.json | 14 + res/trainers/data/unknown_413.json | 14 + res/trainers/data/unknown_424.json | 14 + res/trainers/data/unknown_429.json | 14 + res/trainers/data/unknown_432.json | 14 + res/trainers/data/unknown_433.json | 14 + res/trainers/data/unknown_434.json | 14 + res/trainers/data/unknown_435.json | 14 + res/trainers/data/unknown_436.json | 14 + res/trainers/data/unknown_437.json | 14 + res/trainers/data/unknown_438.json | 14 + res/trainers/data/unknown_439.json | 14 + res/trainers/data/unknown_440.json | 14 + res/trainers/data/unknown_441.json | 18 + res/trainers/data/unknown_448.json | 3 +- res/trainers/data/unknown_449.json | 3 +- res/trainers/data/unknown_461.json | 14 + res/trainers/data/unknown_462.json | 14 + res/trainers/data/unknown_463.json | 14 + res/trainers/data/unknown_464.json | 14 + res/trainers/data/unknown_466.json | 14 + res/trainers/data/unknown_467.json | 14 + res/trainers/data/unknown_468.json | 3 +- res/trainers/data/unknown_469.json | 3 +- res/trainers/data/unknown_484.json | 3 +- res/trainers/data/unknown_485.json | 3 +- res/trainers/data/unknown_487.json | 14 + res/trainers/data/unknown_493.json | 14 + res/trainers/data/unknown_495.json | 3 +- res/trainers/data/unknown_501.json | 14 + res/trainers/data/unknown_502.json | 14 + res/trainers/data/unknown_511.json | 14 + res/trainers/data/unknown_605.json | 14 + res/trainers/data/unknown_651.json | 10 + res/trainers/data/unknown_652.json | 10 + res/trainers/data/unknown_778.json | 10 + res/trainers/data/unknown_779.json | 3 +- res/trainers/data/unknown_780.json | 3 +- res/trainers/data/unknown_781.json | 3 +- res/trainers/data/unknown_782.json | 3 +- res/trainers/data/unknown_783.json | 3 +- res/trainers/data/unknown_784.json | 3 +- res/trainers/data/unknown_785.json | 3 +- res/trainers/data/unknown_786.json | 3 +- res/trainers/data/unknown_787.json | 3 +- res/trainers/data/unknown_788.json | 3 +- res/trainers/data/unknown_789.json | 3 +- res/trainers/data/unknown_790.json | 3 +- res/trainers/data/unknown_791.json | 3 +- res/trainers/data/unknown_792.json | 3 +- res/trainers/data/unknown_793.json | 3 +- res/trainers/data/unknown_794.json | 3 +- res/trainers/data/unknown_795.json | 3 +- res/trainers/data/unknown_796.json | 3 +- res/trainers/data/unknown_797.json | 3 +- res/trainers/data/unknown_798.json | 3 +- res/trainers/data/unknown_799.json | 3 +- res/trainers/data/unknown_800.json | 3 +- res/trainers/data/unknown_801.json | 3 +- res/trainers/data/unknown_802.json | 3 +- res/trainers/data/unknown_803.json | 3 +- res/trainers/data/unknown_804.json | 3 +- res/trainers/data/unknown_805.json | 3 +- res/trainers/data/unknown_806.json | 3 +- res/trainers/data/unknown_807.json | 3 +- res/trainers/data/unknown_808.json | 3 +- res/trainers/data/unknown_809.json | 3 +- res/trainers/data/unknown_810.json | 3 +- res/trainers/data/unknown_811.json | 3 +- res/trainers/data/unknown_812.json | 3 +- res/trainers/data/unknown_813.json | 3 +- res/trainers/data/unknown_814.json | 3 +- res/trainers/data/unknown_815.json | 3 +- res/trainers/data/unknown_816.json | 3 +- res/trainers/data/unknown_817.json | 23 + res/trainers/data/unknown_818.json | 27 + res/trainers/data/unknown_819.json | 25 + res/trainers/data/unknown_820.json | 23 + res/trainers/data/unknown_821.json | 27 + res/trainers/data/unknown_822.json | 25 + res/trainers/data/unknown_823.json | 23 + res/trainers/data/unknown_824.json | 27 + res/trainers/data/unknown_825.json | 25 + .../{unknown_828.json => unknown_826.json} | 3 +- res/trainers/data/unknown_833.json | 3 +- res/trainers/data/unknown_834.json | 3 +- res/trainers/data/unknown_840.json | 16 + res/trainers/data/unknown_841.json | 16 + res/trainers/data/unknown_842.json | 16 + res/trainers/data/unknown_902.json | 9 + res/trainers/data/unknown_903.json | 9 + res/trainers/data/unknown_904.json | 9 + res/trainers/data/unknown_905.json | 10 + res/trainers/data/veteran_armando.json | 35 + .../data/veteran_armando_rematch.json | 18 + res/trainers/data/veteran_brenden.json | 23 + res/trainers/data/veteran_brian.json | 36 + .../data/veteran_brian_rematch_1.json | 18 + .../data/veteran_brian_rematch_2.json | 18 + res/trainers/data/veteran_clayton.json | 21 + res/trainers/data/veteran_edgar.json | 24 + res/trainers/data/veteran_emanuel.json | 6 + res/trainers/data/veteran_grant.json | 23 + res/trainers/data/veteran_harlan.json | 24 + res/trainers/data/veteran_terrell.json | 21 + res/trainers/data/waitress_kati.json | 24 + res/trainers/data/worker_braden.json | 23 + res/trainers/data/worker_brendon.json | 22 + res/trainers/data/worker_colin.json | 24 + res/trainers/data/worker_conrad.json | 22 + res/trainers/data/worker_dillan.json | 21 + res/trainers/data/worker_gary.json | 23 + res/trainers/data/worker_gerardo.json | 25 + res/trainers/data/worker_holden.json | 25 + res/trainers/data/worker_jackson.json | 20 + res/trainers/data/worker_mason.json | 20 + res/trainers/data/worker_noel.json | 21 + res/trainers/data/worker_quentin.json | 23 + .../data/young_couple_mike_and_nat.json | 58 + .../data/young_couple_ty_and_sue.json | 72 + res/trainers/data/youngster_austin.json | 30 + res/trainers/data/youngster_dallas.json | 31 + .../data/youngster_dallas_rematch_1.json | 14 + .../data/youngster_dallas_rematch_2.json | 14 + .../data/youngster_dallas_rematch_3.json | 14 + res/trainers/data/youngster_darius.json | 23 + res/trainers/data/youngster_donny.json | 25 + res/trainers/data/youngster_jonathon.json | 23 + res/trainers/data/youngster_logan.json | 30 + res/trainers/data/youngster_michael.json | 30 + res/trainers/data/youngster_oliver.json | 25 + res/trainers/data/youngster_sebastian.json | 32 + res/trainers/data/youngster_tristan.json | 32 + .../data/youngster_tristan_rematch_1.json | 16 + .../data/youngster_tristan_rematch_2.json | 16 + .../data/youngster_tristan_rematch_3.json | 16 + res/trainers/data/youngster_tyler.json | 31 + res/trainers/data/youngster_wayne.json | 20 + res/trainers/meson.build | 2 + tools/datagen/datagen.h | 2 + tools/datagen/datagen_trainer.cpp | 115 + tools/datagen/datagen_trainer.h | 935 + 941 files changed, 19241 insertions(+), 16420 deletions(-) delete mode 100644 res/prebuilt/poketool/trmsg/meson.build delete mode 100644 res/prebuilt/poketool/trmsg/trtbl.narc delete mode 100644 res/prebuilt/poketool/trmsg/trtblofs.narc delete mode 100644 res/text/npc_trainer_messages.json rename res/trainers/data/{unknown_828.json => unknown_826.json} (93%) create mode 100644 tools/datagen/datagen_trainer.h diff --git a/generated/trainers.txt b/generated/trainers.txt index 03162ba2aa..a1f2160199 100644 --- a/generated/trainers.txt +++ b/generated/trainers.txt @@ -824,7 +824,7 @@ TRAINER_UNKNOWN_822 TRAINER_UNKNOWN_823 TRAINER_UNKNOWN_824 TRAINER_UNKNOWN_825 -TRAINER_UNKNOWN_828 +TRAINER_UNKNOWN_826 TRAINER_ACE_TRAINER_ANTON TRAINER_ACE_TRAINER_BRENNA TRAINER_SCIENTIST_DARRIUS diff --git a/platinum.us/filesys.csv b/platinum.us/filesys.csv index b3c9e7df08..0c9d6c4b71 100644 --- a/platinum.us/filesys.csv +++ b/platinum.us/filesys.csv @@ -165,8 +165,8 @@ res/pokemon/pms.narc,/poketool/personal/pms.narc res/pokemon/wotbl.narc,/poketool/personal/wotbl.narc res/trainers/trdata.narc,/poketool/trainer/trdata.narc res/trainers/trpoke.narc,/poketool/trainer/trpoke.narc -res/prebuilt/poketool/trmsg/trtbl.narc,/poketool/trmsg/trtbl.narc -res/prebuilt/poketool/trmsg/trtblofs.narc,/poketool/trmsg/trtblofs.narc +res/trainers/trtbl.narc,/poketool/trmsg/trtbl.narc +res/trainers/trtblofs.narc,/poketool/trmsg/trtblofs.narc res/prebuilt/battle/graphic/b_bag_gra.narc,/battle/graphic/b_bag_gra.narc res/prebuilt/battle/graphic/b_plist_gra.narc,/battle/graphic/b_plist_gra.narc res/prebuilt/battle/graphic/batt_bg.narc,/battle/graphic/batt_bg.narc diff --git a/platinum.us/filesys.sha1 b/platinum.us/filesys.sha1 index 7170d62272..b38a4c6c94 100644 --- a/platinum.us/filesys.sha1 +++ b/platinum.us/filesys.sha1 @@ -164,8 +164,8 @@ de5c1035595e3cb52990b183497e513246bd0efe *res/pokemon/pms.narc cd4b737f173cc6ac1a25636efa4edfd83da79599 *res/pokemon/wotbl.narc 59f49fe682ef8cf4dfb8f6b7da2e0f51401b50cc *res/trainers/trdata.narc da4dc734c7051754a3280d9e918942c42d183adb *res/trainers/trpoke.narc -f2510b7ff0305a01e0aaec1fd438ebd63a52b3bc *res/prebuilt/poketool/trmsg/trtbl.narc -eb67fe3a80265f7d874c107850a3f6b75cadb83d *res/prebuilt/poketool/trmsg/trtblofs.narc +f2510b7ff0305a01e0aaec1fd438ebd63a52b3bc *res/trainers/trtbl.narc +eb67fe3a80265f7d874c107850a3f6b75cadb83d *res/trainers/trtblofs.narc 8bac81f0ff446438c6bf34a161619dce22e9db77 *res/prebuilt/battle/graphic/b_bag_gra.narc 036b81fe61c6347100c73b2c23d28da5abc7626c *res/prebuilt/battle/graphic/b_plist_gra.narc d672202157109fb1bb293070b5d35787b2b2b6d3 *res/prebuilt/battle/graphic/batt_bg.narc diff --git a/res/prebuilt/poketool/meson.build b/res/prebuilt/poketool/meson.build index c9dfad7f09..384635cf8d 100644 --- a/res/prebuilt/poketool/meson.build +++ b/res/prebuilt/poketool/meson.build @@ -3,7 +3,6 @@ subdir('personal') subdir('pokeanm') subdir('pokegra') subdir('trgra') -subdir('trmsg') subdir('waza') prebuilt_files = [ diff --git a/res/prebuilt/poketool/trmsg/meson.build b/res/prebuilt/poketool/trmsg/meson.build deleted file mode 100644 index dbdcd818b5..0000000000 --- a/res/prebuilt/poketool/trmsg/meson.build +++ /dev/null @@ -1,8 +0,0 @@ -prebuilt_files = [ - 'trtbl.narc', - 'trtblofs.narc' -] - -foreach f : prebuilt_files - nitrofs_files += fs.copyfile(f) -endforeach \ No newline at end of file diff --git a/res/prebuilt/poketool/trmsg/trtbl.narc b/res/prebuilt/poketool/trmsg/trtbl.narc deleted file mode 100644 index da25c0cd1d45a8e9fface84b2b83d81b32187c0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10048 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 M&TA(ATz#Sb9}V2QE&u=k diff --git a/res/prebuilt/poketool/trmsg/trtblofs.narc b/res/prebuilt/poketool/trmsg/trtblofs.narc deleted file mode 100644 index ef4f1e2a9b48554687da066f62bb7f5aa969c362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916 zcma)4Et4uc8V=Av0}b8uH}qG!JIO^L5F=V3xOb_uY!!Qp+Cm@@h!F?`Vgv$#7=b__ zMj#Lf1OkB=fj}TeAP@)y0)apv5Qq_osoiDH`2**z%A4eQ^YJ`+^7o(r`Nx0%2YlTy z02~N_zp8)!5CH(bNBfS#1OKb~_YdwdrhXzm@Xvq$>qqH<1CRp+Pyvmf_^-4EJFoyJ zaC;n)@s)f{U&q(?jeIlT(zo#)d>7x{NBdQO#_#z{{-(d<@B2sonSbfu_z(Vz|L&&) zY9JHv0;NDL&+Ku+3qv$NU zjBcWb=p}lOs5Fzry~HB1PV5q=#4Q0>j)iQFEwB}~!M52h z+h^a{2|H((><7DJkL-m7oXUAzk*jcZuF1V{J#N5_xGA^bR@{c$b0_Y~F-bLvlDT9) zSxQ!ujbx7RBwv%m=iM@nnv~skjhV;!ET;(u{xbJH8@$(JJqWH?bi#_@ekFwxv?ECk-Vkcn+MXmY`Cv z{FI;Z1AfG-3@wQglxoq5bfcP4inD*WoVrA zyIwLn#@M(?uez!uJ*VgOi}tAjozXu7z0gT%CF{yuUH;^BRcijG@}k@oO0D^N3a36c z$tAt2H}saCk%xLV@y*jSi)O{Fo6ly;d@+0Gz#N%Vb74*r!w1KQ*Wt0A4d#R8;51T9 z%=F{K@QgYZX2OTMQ{VNqK2S!=R9PrFBX3lVhS4%!jiE6!*2dO27-!>Vd>K3RZqTM^ zLNjab(E)wRD|sVBWiJEe38|=#N+^f&sDd&mi;4&$gv!W6HKd~|DxigYRIh4A`%;;d zp30`4w1SpTl~eUpE7eU6Qe~~CJ!@@koSLUrscq_*x~95XUwhLg+E;3>G3lkIr?cq~ zZKvha<#avWN_W$P^f*0FuhQG}F?~&cr5R1vj@q~C-wH@W4));?j$j*hU=Nn;iam2D za0VA}3DH_S)XqJNxDy?2~=5 z?{2{@xefPb-)-R3?1tU6Yfi&iI&0_V+?|cHbAU^`O}Fg=)Ny+*jcQiIYFcfpWA!Z0 zDL5r3V^^G~I~q%6+Tt&H_#6|Axaz%y#2K6*o4H2HZKg=x%S5$hP? zEPlcbG)GJHfiCET&ZvxQ_!$?;6RDCiK}086k|)pPg|tYQ)XA7k$($_7nrz9Q97!J! z@DPvi7*B8qcX1ET@B%OK25<2WAMg>MFhe+U!B>34cl?C`p$JU|WJun~h`iw`e#L9N e$7lSB+xSAR #include +#include "rapidjson/filewritestream.h" +#include #include // clang-format on diff --git a/tools/datagen/datagen_trainer.cpp b/tools/datagen/datagen_trainer.cpp index ee6c47ed4c..dca35430d0 100644 --- a/tools/datagen/datagen_trainer.cpp +++ b/tools/datagen/datagen_trainer.cpp @@ -17,6 +17,7 @@ #include #include +#include "datagen_trainer.h" #include "datagen.h" #define POKEPLATINUM_GENERATED_LOOKUP @@ -33,6 +34,7 @@ #include "generated/moves.h" #include "generated/species.h" #include "generated/trainer_classes.h" +#include "generated/trainer_message_types.h" #include "struct_defs/trainer_data.h" @@ -195,6 +197,51 @@ static void ParseAndPackParty(const rapidjson::Document &doc, TrainerDataType mo narc_pack_file(trpokeVFS, partyBuf, bufSize); } +static std::string ParseMessages(const rapidjson::Document &doc, int trainerID, std::string stem, rapidjson::Value *outMessages, rapidjson::Document *out) +{ + rapidjson::Value trainerMessages(rapidjson::kArrayType); + std::string ret = ""; + for (const auto &member : doc["messages"].GetArray()) { + std::string type = member["type"].GetString(); + ret += (char)(trainerID & 0xFF); + ret += (char)(trainerID >> 8); + ret += (char)LookupConst(type, TrainerMessageType); + ret += (char)0; + + rapidjson::Value message; + message.SetObject(); + std::string id = stem + type; + rapidjson::Value idValue(rapidjson::kStringType); + idValue.SetString(id.c_str(), static_cast(id.length()), out->GetAllocator()); + message.AddMember("id", idValue, out->GetAllocator()); + + if (member.HasMember("en_US")) { + if (member["en_US"].IsArray()) { + rapidjson::Value strings(rapidjson::kArrayType); + int i = 0; + for (const auto &member2 : member["en_US"].GetArray()) { + std::string str = member2.GetString(); + rapidjson::Value string(rapidjson::kStringType); + string.SetString(str.c_str(), static_cast(str.length()), out->GetAllocator()); + strings.PushBack(string, out->GetAllocator()); + } + message.AddMember("en_US", strings, out->GetAllocator()); + } else { + std::string str = member["en_US"].GetString(); + rapidjson::Value string(rapidjson::kStringType); + string.SetString(str.c_str(), static_cast(str.length()), out->GetAllocator()); + message.AddMember("en_US", string, out->GetAllocator()); + } + } else if (member.HasMember("garbage")) { + message.AddMember("garbage", member["garbage"].GetInt(), out->GetAllocator()); + } + + trainerMessages.PushBack(message, out->GetAllocator()); + } + *outMessages = trainerMessages; + return ret; +} + int main(int argc, char **argv) { if (argc == 1) { @@ -206,11 +253,23 @@ int main(int argc, char **argv) fs::path dataRoot = argv[2]; std::vector trainerRegistry = ReadRegistryEnvVar("TRAINERS"); + const int trainerCount = trainerRegistry.size(); + std::string *trMsgs = new std::string[trainerCount]; + short *trMsgOffsets = new short[trainerCount]; + int *order = new int[trainerCount]; + rapidjson::Value *messagesArr = new rapidjson::Value[trainerCount]; vfs_pack_ctx *trdataVFS = narc_pack_start(); vfs_pack_ctx *trpokeVFS = narc_pack_start(); + vfs_pack_ctx *trtblVFS = narc_pack_start(); + vfs_pack_ctx *trtblofsVFS = narc_pack_start(); rapidjson::Document doc; + rapidjson::Document out(rapidjson::kObjectType); + out.AddMember("key", 6120, out.GetAllocator()); + + int trainerID = 0; + int newTrainerIndex = 0; for (auto &trainerStem : trainerRegistry) { fs::path trainerDataPath = dataRoot / (trainerStem + ".json"); std::string json = ReadWholeFile(trainerDataPath); @@ -228,9 +287,65 @@ int main(int argc, char **argv) std::cerr << e.what() << std::endl; std::exit(EXIT_FAILURE); } + + rapidjson::Value trainerMessages; + std::string trMsg = ParseMessages(doc, trainerID, trainerStem, &trainerMessages, &out); + + if (trMsg.length()) { + if (trainerID < VANILLA_TRAINER_COUNT && trtblIndices[trainerID] != -1) { + trMsgs[trtblIndices[trainerID]] = trMsg; + order[trtblIndices[trainerID]] = trainerID; + messagesArr[trtblIndices[trainerID]] = trainerMessages; + } else { + trMsgs[VANILLA_TRAINERS_WITH_MESSAGES + newTrainerIndex] = trMsg; + order[VANILLA_TRAINERS_WITH_MESSAGES + newTrainerIndex] = trainerID; + messagesArr[VANILLA_TRAINERS_WITH_MESSAGES + newTrainerIndex] = trainerMessages; + newTrainerIndex++; + } + } else { + trMsgOffsets[trainerID] = 0; + } + + trainerID++; } + std::string str = ""; + int offset = 0; + rapidjson::Value messages(rapidjson::kArrayType); + for (int i = 0; i < trainerCount; i++) { + str += trMsgs[i]; + int length = trMsgs[i].length(); + if (length) { + trMsgOffsets[order[i]] = offset; + offset += length; + for (const auto &member : messagesArr[i].GetArray()) { + rapidjson::Value tmp; + tmp.CopyFrom(member, out.GetAllocator()); + messages.PushBack(tmp, out.GetAllocator()); + } + } + } + out.AddMember("messages", messages, out.GetAllocator()); + + char *chars = const_cast(str.c_str()); + narc_pack_file_copy(trtblVFS, reinterpret_cast(chars), offset); + narc_pack_file_copy(trtblofsVFS, reinterpret_cast(trMsgOffsets), trainerCount * sizeof(short)); + PackNarc(trdataVFS, outputRoot / "trdata.narc"); PackNarc(trpokeVFS, outputRoot / "trpoke.narc"); + PackNarc(trtblVFS, outputRoot / "trtbl.narc"); + PackNarc(trtblofsVFS, outputRoot / "trtblofs.narc"); + + FILE *fp = fopen((outputRoot / "npc_trainer_messages.json").string().c_str(), "w"); + char writeBuffer[65536]; + rapidjson::FileWriteStream os(fp, writeBuffer, sizeof(writeBuffer)); + rapidjson::Writer writer(os); + out.Accept(writer); + fclose(fp); + + delete[] trMsgs; + delete[] trMsgOffsets; + delete[] order; + delete[] messagesArr; return EXIT_SUCCESS; } diff --git a/tools/datagen/datagen_trainer.h b/tools/datagen/datagen_trainer.h new file mode 100644 index 0000000000..2430447db9 --- /dev/null +++ b/tools/datagen/datagen_trainer.h @@ -0,0 +1,935 @@ +#include + +#define VANILLA_TRAINER_COUNT 928 +#define VANILLA_TRAINERS_WITH_MESSAGES 836 + +static constexpr std::array trtblIndices = { + -1, + 4, + 5, + 6, + 7, + -1, + -1, + -1, + -1, + -1, + 13, + 14, + 12, + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 95, + 96, + 97, + 99, + 100, + 101, + 102, + 103, + 119, + 104, + 105, + 106, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 107, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 187, + 185, + 186, + 190, + 191, + 192, + 195, + 196, + 197, + 198, + 199, + 200, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 227, + 228, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 254, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 294, + 282, + 283, + 284, + 285, + 286, + -1, + -1, + 289, + 290, + 291, + 292, + 2, + 3, + 1, + 0, + 306, + 307, + 293, + -1, + -1, + -1, + -1, + -1, + 295, + 296, + 171, + 319, + 320, + 550, + 551, + 552, + 553, + 287, + 338, + 554, + 347, + 348, + 349, + 350, + 145, + 146, + 209, + 308, + 309, + 362, + 158, + 297, + 339, + 354, + 363, + 298, + 340, + 355, + 364, + 159, + 365, + 366, + 77, + 61, + 75, + 322, + 64, + 301, + 304, + 305, + 302, + 303, + 188, + 356, + 357, + 358, + 160, + 367, + 76, + 161, + 63, + 333, + 334, + 335, + 336, + 368, + 299, + 316, + 321, + 332, + 337, + 346, + 353, + -1, + 10, + 11, + 318, + 341, + 94, + 122, + 123, + 288, + 342, + 359, + 124, + 220, + 315, + 221, + 314, + 219, + 189, + 324, + 343, + 360, + 370, + 344, + 361, + 371, + 135, + 223, + 317, + 351, + 352, + 328, + 329, + 330, + 331, + 8, + 9, + 345, + 193, + 225, + 194, + 226, + 369, + 311, + 312, + 313, + 310, + 300, + 375, + 373, + 378, + 372, + 397, + 419, + -1, + -1, + 498, + 19, + 398, + 409, + 410, + 120, + 147, + 411, + -1, + -1, + 420, + -1, + 399, + 421, + 422, + -1, + 400, + 423, + 424, + 253, + 425, + 426, + 255, + 427, + 428, + 323, + -1, + 749, + 750, + 506, + 381, + 745, + 511, + 515, + 382, + 383, + 384, + 385, + 379, + 380, + 505, + 512, + 513, + 507, + 509, + 386, + 387, + 388, + 389, + 514, + 508, + 510, + 518, + 522, + 525, + 374, + 499, + 490, + 491, + 492, + 493, + 486, + 487, + 488, + 489, + 62, + 98, + 412, + 281, + 401, + 429, + 430, + -1, + -1, + 413, + 37, + 402, + 403, + 414, + 415, + 21, + 404, + 416, + 417, + 376, + 494, + 495, + 496, + 497, + 377, + 500, + 222, + -1, + -1, + 538, + 539, + 540, + 541, + 542, + 543, + 544, + 545, + 546, + 547, + 548, + 549, + 229, + 325, + -1, + -1, + 121, + 501, + 78, + 79, + 80, + 148, + 224, + 502, + 201, + -1, + 418, + 326, + 327, + 431, + 432, + 503, + 504, + 405, + 406, + 407, + 408, + 516, + 517, + 519, + 520, + 521, + 523, + 524, + 526, + 528, + 529, + 530, + 531, + 532, + 533, + 742, + 527, + 534, + 535, + 536, + 537, + 743, + 744, + 394, + 391, + 392, + 396, + 393, + 395, + 721, + 714, + 731, + 726, + 720, + 723, + 728, + 718, + 719, + 725, + 716, + 717, + 727, + 722, + 730, + 715, + 729, + 724, + 390, + 433, + 434, + 470, + 435, + 436, + 437, + 438, + 471, + 472, + 439, + 440, + 441, + 442, + 443, + 444, + 473, + 474, + 475, + 476, + 445, + 446, + 447, + 448, + 449, + 450, + 477, + 478, + 479, + 480, + 451, + 481, + 452, + 482, + 453, + 454, + 483, + 484, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 485, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 585, + 586, + 587, + 602, + 603, + 604, + 599, + 600, + 601, + 624, + 625, + 700, + 605, + 606, + 607, + 608, + 609, + 610, + 579, + 580, + 581, + 675, + 676, + 685, + 614, + 615, + 590, + 591, + 592, + 593, + 594, + 595, + 622, + 623, + 696, + 701, + 683, + 666, + 667, + 702, + 703, + 684, + 668, + 669, + 704, + 705, + 660, + 661, + 697, + 706, + 662, + 663, + 698, + 707, + 618, + 619, + 588, + 589, + 681, + 686, + 616, + 617, + 664, + 665, + 634, + 635, + 636, + 682, + 629, + 630, + 759, + 760, + 674, + 708, + 637, + 638, + 573, + 574, + 575, + 570, + 571, + 572, + 596, + 597, + 598, + 576, + 577, + 578, + 648, + 649, + 650, + 582, + 583, + 584, + 611, + 612, + 613, + 651, + 652, + 653, + 689, + 690, + 631, + 632, + 633, + 639, + 640, + 641, + 709, + 642, + 643, + 644, + 710, + 687, + 688, + 691, + 645, + 646, + 647, + 626, + 627, + 628, + 658, + 659, + 670, + 671, + 677, + 678, + 672, + 673, + 679, + 680, + 692, + 693, + 711, + 694, + 695, + 712, + 564, + 565, + 566, + 567, + 568, + 569, + 654, + 655, + 656, + 620, + 657, + 621, + 699, + 713, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 563, + -1, + 733, + 734, + 736, + 737, + 735, + 738, + -1, + -1, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 732, + 739, + 740, + 741, + 748, + 746, + 747, + 761, + 762, + 763, + 807, + 805, + 809, + 808, + 803, + 802, + 804, + 806, + 811, + 813, + 812, + 814, + 810, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 769, + 770, + 771, + 773, + 774, + 775, + 765, + 766, + 767, + 777, + 778, + 779, + 781, + 782, + 783, + 785, + 786, + 787, + 798, + 799, + 789, + 790, + 791, + 793, + 794, + 795, + 796, + 797, + 817, + 818, + 819, + 820, + 772, + 776, + 768, + 780, + 784, + 788, + 792, + 764, + 830, + 831, + 829, + 832, + 833, + 834, + 835, + 800, + 801, + -1, + -1, + -1, + 815, + 816, +}; \ No newline at end of file