From 62474fdcc574a6320c641b478a8e4735b967cb5e Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Sun, 6 Sep 2026 11:03:02 -0500 Subject: [PATCH 1/3] Add language of origin reading for Home --- .../Inference/PokemonHome_SummaryReader.cpp | 134 ++++++++++++++++-- .../Inference/PokemonHome_SummaryReader.h | 8 +- .../PokemonHome_ReadSummaryScreen.cpp | 12 +- .../PokemonHome_TestDatabaseGenerator.cpp | 12 ++ 4 files changed, 149 insertions(+), 17 deletions(-) diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp index 324ca3e38e..e240d64c46 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp @@ -4,17 +4,22 @@ * */ -#include -#include -#include "Common/Cpp/CancellableScope.h" -#include "Common/Cpp/Strings/Unicode.h" -#include "CommonFramework/GlobalAutoPaths.h" -#include "CommonFramework/ImageTools/ImageBoxes.h" -#include "CommonFramework/Tools/GlobalThreadPools.h" -#include "CommonTools/Images/ImageFilter.h" -#include "CommonTools/OCR/OCR_NumberReader.h" -#include "CommonTools/OCR/OCR_Routines.h" -#include "CommonTools/OCR/OCR_StringNormalization.h" +#include +#include +#include +#include +#include "Common/Cpp/CancellableScope.h" +#include "Common/Cpp/Json/JsonObject.h" +#include "Common/Cpp/Json/JsonValue.h" +#include "Common/Cpp/Strings/Unicode.h" +#include "CommonFramework/GlobalAutoPaths.h" +#include "CommonFramework/ImageTools/ImageBoxes.h" +#include "CommonFramework/Tools/GlobalThreadPools.h" +#include "CommonTools/Images/ImageFilter.h" +#include "CommonTools/OCR/OCR_NumberReader.h" +#include "CommonTools/OCR/OCR_DictionaryMatcher.h" +#include "CommonTools/OCR/OCR_Routines.h" +#include "CommonTools/OCR/OCR_StringNormalization.h" #include "PokemonHome_SummaryReader.h" namespace PokemonAutomation{ @@ -23,6 +28,25 @@ namespace PokemonHome{ namespace{ +class LanguageOfOriginMatcher : public OCR::DictionaryMatcher{ +public: + LanguageOfOriginMatcher(){ + const std::string path = RESOURCE_PATH() + "Pokemon/LanguageOfOrigin.json"; + JsonValue json = load_json_file(path); + const JsonObject& dictionary = json.to_object_throw(path); + m_database.emplace( + std::piecewise_construct, + std::forward_as_tuple(Language::English), + std::forward_as_tuple( + dictionary, nullptr, + language_data(Language::English).random_match_chance, + false + ) + ); + m_languages += Language::English; + } +}; + const std::vector>& white_number_filters(){ static const std::vector> filters = { {0xff808080, 0xffffffff}, @@ -100,6 +124,7 @@ SummaryReader::SummaryReader(Color color) , m_original_trainer_name_box(0.492, 0.719, 0.165, 0.049) , m_nature_box(0.157, 0.783, 0.212, 0.042) , m_ability_box(0.158, 0.838, 0.213, 0.042) + , m_language_of_origin_box(0.0265, 0.176, 0.056, 0.035) {} void SummaryReader::make_overlays(VideoOverlaySet& items) const{ @@ -109,6 +134,7 @@ void SummaryReader::make_overlays(VideoOverlaySet& items) const{ items.add(m_color, m_original_trainer_name_box); items.add(m_color, m_nature_box); items.add(m_color, m_ability_box); + items.add(m_color, m_language_of_origin_box); } int SummaryReader::read_national_dex(Logger& logger, const ImageViewRGB32& screen) const{ @@ -131,6 +157,26 @@ std::string SummaryReader::read_ability(Language language, const ImageViewRGB32& return read_text(language, screen, m_ability_box, gray_text_filters()); } +std::string SummaryReader::read_language_of_origin(const ImageViewRGB32& screen) const{ + static const LanguageOfOriginMatcher dictionary; + OCR::StringMatchResult result = dictionary.match_substring_from_image_multifiltered( + nullptr, + Language::English, + extract_box_reference(screen, m_language_of_origin_box), + OCR::BLACK_TEXT_FILTERS(), + -1.30, + 0.50, + 0.01, + 0.50, + OCR::PageSegMode::SINGLE_LINE + ); + + if (result.results.empty()){ + return ""; + } + return result.results.begin()->second.token; +} + // Due to the position of the level changing slightly depending on digits and language. The box contains the "Lv" text and the level number. int SummaryReader::read_level(Logger& logger, const ImageViewRGB32& screen) const{ try{ @@ -221,6 +267,29 @@ class Test_SummaryReader_OtName : public UnitTest{ Language m_language; }; +class Test_SummaryReader_LanguageOfOrigin : public UnitTest{ +public: + Test_SummaryReader_LanguageOfOrigin(const std::string& image, std::string expected) + : UnitTest("PokemonHome::SummaryReader_LanguageOfOrigin - " + image) + , m_image(UNIT_TEST_RESOURCE_PATH() + image) + , m_expected(expected) + {} + + virtual UnitTestResult run(Logger& logger, CancellableScope& scope) const override{ + ImageRGB32 image(m_image); + std::string language = SummaryReader().read_language_of_origin(image); + if (language == m_expected){ + return true; + } + + return "Expected: " + m_expected + ", received: " + language; + } + +private: + std::string m_image; + std::string m_expected; +}; + void add_tests_SummaryReader(UnitTestDatabase& database){ //Numbers database.add("PokemonHome/SummaryScreen/annihilape_Regular.png", 979, 493124, 75); @@ -351,6 +420,49 @@ void add_tests_SummaryReader(UnitTestDatabase& database){ database.add("PokemonHome/SummaryScreen/vulpix_Shiny.png", "m00n", Language::English); database.add("PokemonHome/SummaryScreen/wartortle_Regular.png", "ru", Language::German); database.add("PokemonHome/SummaryScreen/wurmple_Regular.png", "r0n", Language::English); + // Language of Origin + database.add("PokemonHome/SummaryScreen/annihilape_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bidoof_Regular_none.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bulbasaur_Regular_lgpe.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bulbasaur_Regular_Shiny_go.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bulbasaur_Regular_Shiny_lza.png", "ENG"); + database.add("PokemonHome/SummaryScreen/capsakid_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/castform_Regular_go.png", "ITA"); + database.add("PokemonHome/SummaryScreen/cyclizar_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/dudunsparce_Regular.png", "DEU"); + database.add("PokemonHome/SummaryScreen/dudunsparce_Regular_Sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/enamorus_Regular_Shiny_la.png", "ENG"); + database.add("PokemonHome/SummaryScreen/gimmighoul_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/glimmet_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/gogoat_Regular_kalos.png", "JPN"); + database.add("PokemonHome/SummaryScreen/great-tusk_Regular_Shiny_sv.png", "CHS"); + database.add("PokemonHome/SummaryScreen/hatterene_Regular_galar.png", "ENG"); + database.add("PokemonHome/SummaryScreen/houndstone_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/iron-bundle_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/ironBundle_Regular_Sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/iron-jugulis_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/iron-thorns_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/kilowattrel_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/kingler_Regular_Shiny_galar.png", "ITA"); + database.add("PokemonHome/SummaryScreen/komala_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/krabby_Regular_Shiny_galar.png", "ITA"); + database.add("PokemonHome/SummaryScreen/machamp_Regular_galar.png", "ENG"); + database.add("PokemonHome/SummaryScreen/pancham_Regular_Shiny_galar.png", "ENG"); + database.add("PokemonHome/SummaryScreen/rapidash_Regular_lgpe.png", "ENG"); + database.add("PokemonHome/SummaryScreen/rellor_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/riolu_Regular_lza.png", "ENG"); + database.add("PokemonHome/SummaryScreen/rowlet_Alpha_Shiny_la.png", "ENG"); + database.add("PokemonHome/SummaryScreen/scovillain_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/slither-wing_Regular_Shiny_sv.png", "CHS"); + database.add("PokemonHome/SummaryScreen/squirtle_Regular_Shiny_go.png", "ENG"); + database.add("PokemonHome/SummaryScreen/tapu-lele_Regular_Shiny_alola.png", "ENG"); + database.add("PokemonHome/SummaryScreen/tatsugiri_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/teddiursa_Regular_la.png", "JPN"); + database.add("PokemonHome/SummaryScreen/terapagos_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/vulpix_Regular_galar.png", "DEU"); + database.add("PokemonHome/SummaryScreen/vulpix_Regular_Shiny_galar.png", "ENG"); + database.add("PokemonHome/SummaryScreen/wartortle_Regular_go.png", "DEU"); + database.add("PokemonHome/SummaryScreen/wurmple_Regular_bdsp.png", "FRA"); } diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.h index e37d0c5970..b4db73508a 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.h +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.h @@ -10,9 +10,9 @@ #include #include "Common/Cpp/TestRunners/UnitTestDatabase.h" #include "CommonFramework/Language.h" -#include "CommonFramework/ImageTypes/ImageViewRGB32.h" -#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" -#include "Common/Cpp/Logging/AbstractLogger.h" +#include "CommonFramework/ImageTypes/ImageViewRGB32.h" +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" +#include "Common/Cpp/Logging/AbstractLogger.h" namespace PokemonAutomation{ namespace NintendoSwitch{ @@ -29,6 +29,7 @@ class SummaryReader{ std::string read_original_trainer_name(Language language, const ImageViewRGB32& screen) const; std::string read_nature(Language language, const ImageViewRGB32& screen) const; std::string read_ability(Language language, const ImageViewRGB32& screen) const; + std::string read_language_of_origin(const ImageViewRGB32& screen) const; int read_level(Logger& logger, const ImageViewRGB32& screen) const; private: @@ -39,6 +40,7 @@ class SummaryReader{ ImageFloatBox m_original_trainer_name_box; ImageFloatBox m_nature_box; ImageFloatBox m_ability_box; + ImageFloatBox m_language_of_origin_box; }; void add_tests_SummaryReader(UnitTestDatabase& database); diff --git a/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_ReadSummaryScreen.cpp b/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_ReadSummaryScreen.cpp index bb12ceffe9..010f5ee349 100644 --- a/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_ReadSummaryScreen.cpp +++ b/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_ReadSummaryScreen.cpp @@ -77,9 +77,11 @@ void ReadSummaryScreen::program( VideoSnapshot screen = env.console.video().snapshot(); - env.log("Level: " + std::to_string(reader.read_level(env.console, screen))); - env.log("Ability: " + reader.read_ability(HOME_LANGUAGE, screen)); - env.log("Nature: " + reader.read_nature(HOME_LANGUAGE, screen)); + + std::string language_of_origin = reader.read_language_of_origin(screen); + std::string level_text = std::to_string(reader.read_level(env.console, screen)); + std::string ability = reader.read_ability(HOME_LANGUAGE, screen); + std::string nature = reader.read_nature(HOME_LANGUAGE, screen); CollectedPokemonInfo pokemon_info{}; read_summary_screen(env, context, pokemon_info, OT_NAME_LANGUAGE); @@ -88,6 +90,10 @@ void ReadSummaryScreen::program( std::ostringstream ss; ss << logged_info; env.log("Summary screen result: " + ss.str()); + env.log("Language of origin: " + language_of_origin); + env.log("Level: " + level_text); + env.log("Ability: " + ability); + env.log("Nature: " + nature); } } diff --git a/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_TestDatabaseGenerator.cpp b/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_TestDatabaseGenerator.cpp index 2d74eef43f..043c8559e6 100644 --- a/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_TestDatabaseGenerator.cpp +++ b/SerialPrograms/Source/PokemonHome/Programs/TestPrograms/PokemonHome_TestDatabaseGenerator.cpp @@ -120,6 +120,7 @@ struct TestEntry{ std::string summary_numbers; std::string summary_text; std::string summary_ot_name; + std::string language_of_origin; }; @@ -190,6 +191,7 @@ void TestDatabaseGenerator::program( const bool button_b = b_detector.detect(image); const bool button_plus = plus_detector.detect(image); const std::string ball = ball_reader.read_ball(image); + const std::string language_of_origin = summary_reader.read_language_of_origin(image); const Pokemon::StatsHuntGenderFilter gender = BoxGenderDetector::detect(image); const Pokemon::PokemonTeraType tera_type = read_pokemon_tera_type(image, { 0.463, 0.09, 0.04, 0.06 }); const Pokemon::OriginMark origin = origin_reader.read_mark(image); @@ -235,11 +237,13 @@ void TestDatabaseGenerator::program( output << " (renamed -> " << renamed_path << ")"; } output << "\n" + << " UI State: box-view=" << box_view << ", summary=" << summary << ", arrow=" << optional_arrow_name(arrow) << ", B=" << button_b << ", plus=" << button_plus << "\n" + << " Box Indicators: form=" << (alpha ? "Alpha" : "Regular") << ", shiny=" << shiny << ", gigantamax=" << gigantamax @@ -247,8 +251,10 @@ void TestDatabaseGenerator::program( << ", ball=" << (ball.empty() ? "none" : ball) << ", tera=" << POKEMON_TERA_TYPE_SLUGS().get_string(tera_type) << ", origin=" << ORIGIN_MARK_SLUGS().get_string(origin) << "\n" + << " Summary Info: dex=" << dex_number << ", level=" << level + << ", language-of-origin=" << (language_of_origin.empty() ? "none" : language_of_origin) << ", nature=" << quote_string(nature) << ", ability=" << quote_string(ability) << ", OT=" << quote_string(original_trainer_name) @@ -271,6 +277,11 @@ void TestDatabaseGenerator::program( quote_string(database_path), quote_string(original_trainer_name) ); + entry.language_of_origin = std::format( + "database.add({}, {});", + quote_string(database_path), quote_string(language_of_origin) + ); + entry.box_view = std::format( "database.add({}, {});", quote_string(database_path), boolean(box_view) ); @@ -347,6 +358,7 @@ void TestDatabaseGenerator::program( {"SummaryReader_Numbers", &TestEntry::summary_numbers}, {"SummaryReader_Text", &TestEntry::summary_text}, {"SummaryReader_OtName", &TestEntry::summary_ot_name}, + {"SummaryReader_LanguageOfOrigin",& TestEntry::language_of_origin} }; const Filesystem::Path output_path = directory / "PokemonHome_TestDatabase.txt"; From 181e272f724da18f20d72c2bb842828c7f84461f Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Mon, 7 Sep 2026 08:33:29 -0500 Subject: [PATCH 2/3] Rebase --- .../Inference/PokemonHome_SummaryReader.cpp | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp index e240d64c46..76df53f2db 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp @@ -4,22 +4,22 @@ * */ -#include -#include -#include -#include -#include "Common/Cpp/CancellableScope.h" -#include "Common/Cpp/Json/JsonObject.h" -#include "Common/Cpp/Json/JsonValue.h" -#include "Common/Cpp/Strings/Unicode.h" -#include "CommonFramework/GlobalAutoPaths.h" -#include "CommonFramework/ImageTools/ImageBoxes.h" -#include "CommonFramework/Tools/GlobalThreadPools.h" -#include "CommonTools/Images/ImageFilter.h" -#include "CommonTools/OCR/OCR_NumberReader.h" -#include "CommonTools/OCR/OCR_DictionaryMatcher.h" -#include "CommonTools/OCR/OCR_Routines.h" -#include "CommonTools/OCR/OCR_StringNormalization.h" +#include +#include +#include +#include +#include "Common/Cpp/CancellableScope.h" +#include "Common/Cpp/Json/JsonObject.h" +#include "Common/Cpp/Json/JsonValue.h" +#include "Common/Cpp/Strings/Unicode.h" +#include "CommonFramework/GlobalAutoPaths.h" +#include "CommonFramework/ImageTools/ImageBoxes.h" +#include "CommonFramework/Tools/GlobalThreadPools.h" +#include "CommonTools/Images/ImageFilter.h" +#include "CommonTools/OCR/OCR_NumberReader.h" +#include "CommonTools/OCR/OCR_DictionaryMatcher.h" +#include "CommonTools/OCR/OCR_Routines.h" +#include "CommonTools/OCR/OCR_StringNormalization.h" #include "PokemonHome_SummaryReader.h" namespace PokemonAutomation{ @@ -28,24 +28,24 @@ namespace PokemonHome{ namespace{ -class LanguageOfOriginMatcher : public OCR::DictionaryMatcher{ -public: - LanguageOfOriginMatcher(){ - const std::string path = RESOURCE_PATH() + "Pokemon/LanguageOfOrigin.json"; - JsonValue json = load_json_file(path); - const JsonObject& dictionary = json.to_object_throw(path); - m_database.emplace( - std::piecewise_construct, - std::forward_as_tuple(Language::English), - std::forward_as_tuple( - dictionary, nullptr, - language_data(Language::English).random_match_chance, - false - ) - ); - m_languages += Language::English; - } -}; +class LanguageOfOriginMatcher : public OCR::DictionaryMatcher{ +public: + LanguageOfOriginMatcher(){ + const std::string path = RESOURCE_PATH() + "Pokemon/LanguageOfOrigin.json"; + JsonValue json = load_json_file(path); + const JsonObject& dictionary = json.to_object_throw(path); + m_database.emplace( + std::piecewise_construct, + std::forward_as_tuple(Language::English), + std::forward_as_tuple( + dictionary, nullptr, + language_data(Language::English).random_match_chance, + false + ) + ); + m_languages += Language::English; + } +}; const std::vector>& white_number_filters(){ static const std::vector> filters = { @@ -157,8 +157,8 @@ std::string SummaryReader::read_ability(Language language, const ImageViewRGB32& return read_text(language, screen, m_ability_box, gray_text_filters()); } -std::string SummaryReader::read_language_of_origin(const ImageViewRGB32& screen) const{ - static const LanguageOfOriginMatcher dictionary; +std::string SummaryReader::read_language_of_origin(const ImageViewRGB32& screen) const{ + static const LanguageOfOriginMatcher dictionary; OCR::StringMatchResult result = dictionary.match_substring_from_image_multifiltered( nullptr, Language::English, From be8f59bc80dafa5fa98b98cc7f8dc3275f40927d Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Wed, 9 Sep 2026 22:52:07 -0500 Subject: [PATCH 3/3] fix image paths --- .../Inference/PokemonHome_SummaryReader.cpp | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp index 76df53f2db..d61ddb9fad 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryReader.cpp @@ -421,48 +421,48 @@ void add_tests_SummaryReader(UnitTestDatabase& database){ database.add("PokemonHome/SummaryScreen/wartortle_Regular.png", "ru", Language::German); database.add("PokemonHome/SummaryScreen/wurmple_Regular.png", "r0n", Language::English); // Language of Origin - database.add("PokemonHome/SummaryScreen/annihilape_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/bidoof_Regular_none.png", "ENG"); - database.add("PokemonHome/SummaryScreen/bulbasaur_Regular_lgpe.png", "ENG"); - database.add("PokemonHome/SummaryScreen/bulbasaur_Regular_Shiny_go.png", "ENG"); - database.add("PokemonHome/SummaryScreen/bulbasaur_Regular_Shiny_lza.png", "ENG"); - database.add("PokemonHome/SummaryScreen/capsakid_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/castform_Regular_go.png", "ITA"); - database.add("PokemonHome/SummaryScreen/cyclizar_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/annihilape_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bidoof_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bulbasaur_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bulbasuar_Shiny_Go.png", "ENG"); + database.add("PokemonHome/SummaryScreen/bulbasuar_Shiny_Lza.png", "ENG"); + database.add("PokemonHome/SummaryScreen/capskid_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/castform_Regular.png", "ITA"); + database.add("PokemonHome/SummaryScreen/cyclizar_Regular.png", "ENG"); database.add("PokemonHome/SummaryScreen/dudunsparce_Regular.png", "DEU"); database.add("PokemonHome/SummaryScreen/dudunsparce_Regular_Sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/enamorus_Regular_Shiny_la.png", "ENG"); - database.add("PokemonHome/SummaryScreen/gimmighoul_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/glimmet_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/gogoat_Regular_kalos.png", "JPN"); - database.add("PokemonHome/SummaryScreen/great-tusk_Regular_Shiny_sv.png", "CHS"); - database.add("PokemonHome/SummaryScreen/hatterene_Regular_galar.png", "ENG"); - database.add("PokemonHome/SummaryScreen/houndstone_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/iron-bundle_Regular_sv.png", "ENG"); + database.add("PokemonHome/SummaryScreen/enamorus_Shiny.png", "ENG"); + database.add("PokemonHome/SummaryScreen/gimmighoul_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/glimmet_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/gogoat_Regular.png", "JPN"); + database.add("PokemonHome/SummaryScreen/greatTusk_Shiny.png", "CHS"); + database.add("PokemonHome/SummaryScreen/hatterne_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/houndstone_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/ironBunde_Regular.png", "ENG"); database.add("PokemonHome/SummaryScreen/ironBundle_Regular_Sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/iron-jugulis_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/iron-thorns_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/kilowattrel_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/kingler_Regular_Shiny_galar.png", "ITA"); - database.add("PokemonHome/SummaryScreen/komala_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/krabby_Regular_Shiny_galar.png", "ITA"); - database.add("PokemonHome/SummaryScreen/machamp_Regular_galar.png", "ENG"); - database.add("PokemonHome/SummaryScreen/pancham_Regular_Shiny_galar.png", "ENG"); - database.add("PokemonHome/SummaryScreen/rapidash_Regular_lgpe.png", "ENG"); - database.add("PokemonHome/SummaryScreen/rellor_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/riolu_Regular_lza.png", "ENG"); - database.add("PokemonHome/SummaryScreen/rowlet_Alpha_Shiny_la.png", "ENG"); - database.add("PokemonHome/SummaryScreen/scovillain_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/slither-wing_Regular_Shiny_sv.png", "CHS"); - database.add("PokemonHome/SummaryScreen/squirtle_Regular_Shiny_go.png", "ENG"); - database.add("PokemonHome/SummaryScreen/tapu-lele_Regular_Shiny_alola.png", "ENG"); - database.add("PokemonHome/SummaryScreen/tatsugiri_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/teddiursa_Regular_la.png", "JPN"); - database.add("PokemonHome/SummaryScreen/terapagos_Regular_sv.png", "ENG"); - database.add("PokemonHome/SummaryScreen/vulpix_Regular_galar.png", "DEU"); - database.add("PokemonHome/SummaryScreen/vulpix_Regular_Shiny_galar.png", "ENG"); - database.add("PokemonHome/SummaryScreen/wartortle_Regular_go.png", "DEU"); - database.add("PokemonHome/SummaryScreen/wurmple_Regular_bdsp.png", "FRA"); + database.add("PokemonHome/SummaryScreen/ironJugulis_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/ironThorns_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/kilowattrel_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/kingler_Shiny.png", "ITA"); + database.add("PokemonHome/SummaryScreen/komala_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/krabby_Shiny.png", "ITA"); + database.add("PokemonHome/SummaryScreen/machamp_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/pancham_Shiny.png", "ENG"); + database.add("PokemonHome/SummaryScreen/rapidash_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/rellor_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/riolu_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/rowlet_ShinyAlpha.png", "ENG"); + database.add("PokemonHome/SummaryScreen/scovillain_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/slitherWing_Shiny.png", "CHS"); + database.add("PokemonHome/SummaryScreen/squirtle_Shiny.png", "ENG"); + database.add("PokemonHome/SummaryScreen/tapuLele_Shiny.png", "ENG"); + database.add("PokemonHome/SummaryScreen/tatsugiri_Regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/teddiursa_Regular.png", "JPN"); + database.add("PokemonHome/SummaryScreen/terapagos_regular.png", "ENG"); + database.add("PokemonHome/SummaryScreen/vulpix_Regular.png", "DEU"); + database.add("PokemonHome/SummaryScreen/vulpix_Shiny.png", "ENG"); + database.add("PokemonHome/SummaryScreen/wartortle_Regular.png", "DEU"); + database.add("PokemonHome/SummaryScreen/wurmple_Regular.png", "FRA"); }