From 57b8497ac2887799a1a08ca8a8c92334fc45075b Mon Sep 17 00:00:00 2001 From: Butters Date: Thu, 26 Mar 2026 09:25:11 -0500 Subject: [PATCH 1/3] Added Fishing Files to repo Added the Shiny hunt fishing files to the rpo. no modifications made to the FRLG Panels.cpp or source files saved with this commit. Implements an automated fishing-based shiny hunting program for FRLG. Features: - Adaptive timing system that adjusts button press delay based on missed bites - Encounter detection using dialog and battle transition watchers - Shiny detection using existing encounter handling logic - Stats tracking for encounters, shinies, and errors - Notification support when a shiny is found - Configurable bite timing window - Compatible with registered rod workflow Code structure follows existing FRLG program patterns: - Descriptor + Instance class structure - Standard StatsTracker implementation - EventNotificationOption owned by program class - Consistent namespace and option registration layout Future improvements planned: - Optional rod auto-registration - Optional audio-based shiny detection redundancy - Periodic autosave support - Ball selection and auto-catch workflow --- .../PokemonFRLG_ShinyHunt-Fishing.cpp | 233 ++++++++++++++++++ .../PokemonFRLG_ShinyHunt-Fishing.h | 61 +++++ 2 files changed, 294 insertions(+) create mode 100644 SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp create mode 100644 SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h diff --git a/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp new file mode 100644 index 000000000..5c2fbcbe8 --- /dev/null +++ b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp @@ -0,0 +1,233 @@ +/* Shiny Hunt - Fishing + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#include "CommonFramework/ProgramStats/StatsTracking.h" +#include "CommonFramework/Notifications/ProgramNotifications.h" +#include "CommonFramework/VideoPipeline/VideoFeed.h" + +#include "CommonTools/Async/InferenceRoutines.h" +#include "CommonTools/VisualDetectors/BlackScreenDetector.h" + +#include "NintendoSwitch/Commands/NintendoSwitch_Commands_PushButtons.h" +#include "NintendoSwitch/Commands/NintendoSwitch_Commands_Superscalar.h" + +#include "Pokemon/Pokemon_Strings.h" +#include "PokemonFRLG/Inference/Dialogs/PokemonFRLG_DialogDetector.h" +#include "PokemonFRLG/Inference/Dialogs/PokemonFRLG_BattleDialogs.h" +#include "PokemonFRLG/Inference/PokemonFRLG_SelectionArrowDetector.h" +#include "PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.h" +#include "PokemonFRLG/PokemonFRLG_Navigation.h" + +#include + +#include "PokemonFRLG_ShinyHunt-Fishing.h" + +/*TODO LIST + * Based on reading the included .h files, I believe I can add the following functionality in the future. + * -An option to automatically register a new rod. + * -Audio shiny detection for redundancy + * -add periodic saves every X events where events= ((Y missed casts)+(Z encounters) and X is defined by the user. + * -The option for a user to select a ball and auto throw until caught or runs out of usable pokemon + * ---This is a stretch goal I don't know if I will ever implement. It sounds cool and fun, but I doubt I have the skill. + * */ + +using namespace std::chrono_literals; + +namespace PokemonAutomation{ +namespace NintendoSwitch{ +namespace PokemonFRLG{ + +ShinyHuntFishing_Descriptor:: + ShinyHuntFishing_Descriptor() + : SingleSwitchProgramDescriptor( + "PokemonFRLG:ShinyHuntFishing", + Pokemon::STRING_POKEMON + " FRLG", "Shiny Hunt - Fishing", + "Programs/PokemonFRLG/ShinyHunt-Fishing.html", + "Automated fishing shiny hunt.", + ProgramControllerClass::StandardController_NoRestrictions, + FeedbackType::REQUIRED, + AllowCommandsWhenRunning::DISABLE_COMMANDS + ) +{} + +struct ShinyHuntFishing_Descriptor::Stats : public StatsTracker{ + Stats() + : encounters(m_stats["Encounters"]) + , shinies(m_stats["Shinies"]) + , errors(m_stats["Errors"]) + { + m_display_order.emplace_back("Encounters"); + m_display_order.emplace_back("Shinies"); + m_display_order.emplace_back("Errors", HIDDEN_IF_ZERO); + } + + std::atomic& encounters; + std::atomic& shinies; + std::atomic& errors; +}; + +std::unique_ptr ShinyHuntFishing_Descriptor::make_stats() const{ + return std::make_unique(); +} + + +ShinyHuntFishing::ShinyHuntFishing() + : SingleSwitchProgramInstance() + , BITE_WAIT_MS( + "Bite Wait (ms)
" + "Adaptive delay before pressing A.", + LockMode::UNLOCK_WHILE_RUNNING, + 3000, + 2400, + 4200 + ) + , GO_HOME_WHEN_DONE(true) + + , NOTIFICATION_SHINY( + "Shiny found", + true, true, ImageAttachmentMode::JPG, + {"Notifs", "Showcase"} + ) + + , NOTIFICATION_STATUS_UPDATE("Status Update", true, false, std::chrono::seconds(3600)) + , NOTIFICATIONS({ + &NOTIFICATION_SHINY, + &NOTIFICATION_STATUS_UPDATE, + &NOTIFICATION_PROGRAM_FINISH + }) + +{ + PA_ADD_OPTION(BITE_WAIT_MS); + PA_ADD_OPTION(GO_HOME_WHEN_DONE); + PA_ADD_OPTION(NOTIFICATIONS); + /*PA_ADD_STATIC(SHINY_REQUIRES_AUDIO); + PA_ADD_OPTION(TRIGGER_METHOD); + PA_ADD_OPTION(MOVE_DURATION0); + PA_ADD_OPTION(TAKE_VIDEO);*/ +} + + +void ShinyHuntFishing::program(SingleSwitchProgramEnvironment& env,ProControllerContext& context + ){ + auto& stats = env.current_stats(); + + home_black_border_check(env.console, context); + /* + * Settings: Text Speed fast. + * Setup: Stand in facing fishable water. + */ + + env.log("FRLG Fishing shiny hunt started."); + + // ensure overworld state + pbf_mash_button(context, BUTTON_B, 1500ms); + + WhiteDialogWatcher dialog(COLOR_RED); + BlackScreenWatcher battle_entered(COLOR_RED); + + int bite_wait_ms = BITE_WAIT_MS; + + while (true){ + + // cast rod (must already be registered) + pbf_press_button(context, BUTTON_MINUS, 20ms, 1400ms); + + // wait for bite dialog or battle transition + int ret = + run_until( + env.console, + context, + [&](ProControllerContext& context){ + pbf_wait(context, std::chrono::milliseconds(bite_wait_ms)); + }, + { + dialog, + battle_entered + } + ); + + // if dialog detected → advance text quickly + if (ret == 0){ + run_until( + env.console, + context, + [](ProControllerContext& context){ + pbf_mash_button(context, BUTTON_A, 1000ms); + }, + { battle_entered } + ); + } + + // wait for battle to actually begin + int battle_ret = + run_until( + env.console, + context, + [](ProControllerContext& context){ + pbf_wait(context, 1500ms); + }, + { battle_entered } + ); + + // no encounter triggered + if (battle_ret != 0){ + continue; + } + + // encounter triggered + stats.encounters++; + env.update_stats(); + + // shiny detection + bool shiny = + handle_encounter( + env.console, + context, + true + ); + + + if (shiny){ + + stats.shinies++; + env.update_stats(); + + send_program_notification( + env, + NOTIFICATION_SHINY, + COLOR_YELLOW, + "Shiny found!", + {}, + "", + env.console.video().snapshot(), + true + ); + + break; + } + + + // flee non-shiny encounter + flee_battle(env.console, context); + + context.wait_for_all_requests(); + } + + + if (GO_HOME_WHEN_DONE){ + pbf_press_button(context, BUTTON_HOME, 200ms, 1000ms); + } + + + send_program_finished_notification( + env, + NOTIFICATION_PROGRAM_FINISH + ); +} + +} +} +} diff --git a/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h new file mode 100644 index 000000000..29876646c --- /dev/null +++ b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h @@ -0,0 +1,61 @@ +/* Shiny Hunt - Fishing + * + * From: https://github.com/PokemonAutomation/ + * + */ +#ifndef PokemonAutomation_ShinyHuntFishing_H +#define PokemonAutomation_ShinyHuntFishing_H + +#include "CommonFramework/Notifications/EventNotificationsTable.h" +#include "NintendoSwitch/NintendoSwitch_SingleSwitchProgram.h" +#include "NintendoSwitch/Options/NintendoSwitch_GoHomeWhenDoneOption.h" + +#include "Common/Cpp/Options/SimpleIntegerOption.h" + +#include "CommonFramework/ProgramStats/StatsTracking.h" + +namespace PokemonAutomation{ +namespace NintendoSwitch{ +namespace PokemonFRLG{ + + +class ShinyHuntFishing_Descriptor + : public SingleSwitchProgramDescriptor{ +public: + ShinyHuntFishing_Descriptor +(); + struct Stats; + virtual std::unique_ptr make_stats() const override; +}; + +class ShinyHuntFishing : public SingleSwitchProgramInstance{ +public: + ShinyHuntFishing(); + virtual void program(SingleSwitchProgramEnvironment& env, ProControllerContext& context) override; + + + // disable strict border detection + virtual void start_program_border_check(VideoStream&, FeedbackType) override{} + + +private: + + + SimpleIntegerOption BITE_WAIT_MS; + + GoHomeWhenDoneOption GO_HOME_WHEN_DONE; + + EventNotificationOption NOTIFICATION_SHINY; + + EventNotificationOption NOTIFICATION_STATUS_UPDATE; + + EventNotificationsOption NOTIFICATIONS; + +}; + + +} +} +} + +#endif \ No newline at end of file From 7b1aa0b2d467ec1d7fc387807ad50d6948542b21 Mon Sep 17 00:00:00 2001 From: Butters Date: Thu, 26 Mar 2026 19:25:36 -0500 Subject: [PATCH 2/3] FRLG Fishing: clean formatting and improve comments Reduce extra spacing and clarify adaptive timing, fail-safe logic, and detectors. Added program to PokemonFRLG_Panels.cpp and to SourceFiles.cmake. No functional changes. --- .../Source/PokemonFRLG/PokemonFRLG_Panels.cpp | 2 + .../PokemonFRLG_ShinyHunt-Fishing.cpp | 433 ++++++++++++------ .../PokemonFRLG_ShinyHunt-Fishing.h | 54 +-- SerialPrograms/cmake/SourceFiles.cmake | 133 +++--- 4 files changed, 399 insertions(+), 223 deletions(-) diff --git a/SerialPrograms/Source/PokemonFRLG/PokemonFRLG_Panels.cpp b/SerialPrograms/Source/PokemonFRLG/PokemonFRLG_Panels.cpp index 2f5f1be50..dd97932cb 100644 --- a/SerialPrograms/Source/PokemonFRLG/PokemonFRLG_Panels.cpp +++ b/SerialPrograms/Source/PokemonFRLG/PokemonFRLG_Panels.cpp @@ -16,6 +16,7 @@ #include "Programs/ShinyHunting/PokemonFRLG_LegendaryReset.h" #include "Programs/ShinyHunting/PokemonFRLG_LegendaryRunAway.h" #include "Programs/ShinyHunting/PokemonFRLG_PrizeCornerReset.h" +#include "Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h" #include "Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Overworld.h" #include "Programs/TestPrograms/PokemonFRLG_SoundListener.h" #include "Programs/TestPrograms/PokemonFRLG_ReadStats.h" @@ -47,6 +48,7 @@ std::vector PanelListFactory::make_panels() const{ ret.emplace_back("---- Shiny Hunting ----"); ret.emplace_back(make_single_switch_program()); ret.emplace_back(make_single_switch_program()); + ret.emplace_back(make_single_switch_program()); ret.emplace_back(make_single_switch_program()); ret.emplace_back(make_single_switch_program()); if (PreloadSettings::instance().DEVELOPER_MODE){ diff --git a/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp index 5c2fbcbe8..9f5f034b2 100644 --- a/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp +++ b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp @@ -2,58 +2,68 @@ * * From: https://github.com/PokemonAutomation/ * + * Program Overview: + * This program automates fishing encounters in Pokemon FireRed/LeafGreen + * and stops when a shiny Pokemon is detected. + * + * Core Features: + * - Adaptive timing adjusts A-button press timing to maximize encounter rate + * - Fail-safe prevents soft-lock if dialog detection stalls + * - Automatic flee from non-shiny encounters + * - Initial autosave to protect progress + * - Error tracking for debugging stability issues + * + * Assumptions: + * - Fishing rod is registered to the SELECT button + * - Player is facing fishable water + * - Lead Pokemon can always flee (Smoke Ball recommended) + * - Text speed is set to FAST */ - -#include "CommonFramework/ProgramStats/StatsTracking.h" +#include #include "CommonFramework/Notifications/ProgramNotifications.h" +#include "CommonFramework/ProgramStats/StatsTracking.h" #include "CommonFramework/VideoPipeline/VideoFeed.h" - #include "CommonTools/Async/InferenceRoutines.h" #include "CommonTools/VisualDetectors/BlackScreenDetector.h" - #include "NintendoSwitch/Commands/NintendoSwitch_Commands_PushButtons.h" #include "NintendoSwitch/Commands/NintendoSwitch_Commands_Superscalar.h" - #include "Pokemon/Pokemon_Strings.h" -#include "PokemonFRLG/Inference/Dialogs/PokemonFRLG_DialogDetector.h" #include "PokemonFRLG/Inference/Dialogs/PokemonFRLG_BattleDialogs.h" +#include "PokemonFRLG/Inference/Dialogs/PokemonFRLG_DialogDetector.h" #include "PokemonFRLG/Inference/PokemonFRLG_SelectionArrowDetector.h" #include "PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.h" #include "PokemonFRLG/PokemonFRLG_Navigation.h" - -#include - +#include "PokemonFRLG/Programs/PokemonFRLG_StartMenuNavigation.h" #include "PokemonFRLG_ShinyHunt-Fishing.h" -/*TODO LIST - * Based on reading the included .h files, I believe I can add the following functionality in the future. - * -An option to automatically register a new rod. - * -Audio shiny detection for redundancy - * -add periodic saves every X events where events= ((Y missed casts)+(Z encounters) and X is defined by the user. - * -The option for a user to select a ball and auto throw until caught or runs out of usable pokemon - * ---This is a stretch goal I don't know if I will ever implement. It sounds cool and fun, but I doubt I have the skill. - * */ - using namespace std::chrono_literals; -namespace PokemonAutomation{ -namespace NintendoSwitch{ -namespace PokemonFRLG{ +namespace PokemonAutomation { +namespace NintendoSwitch { +namespace PokemonFRLG { + -ShinyHuntFishing_Descriptor:: - ShinyHuntFishing_Descriptor() +/* +=============================================================================== +Descriptor +Defines program metadata and statistics tracking. +=============================================================================== +*/ +ShinyHuntFishing_Descriptor::ShinyHuntFishing_Descriptor() : SingleSwitchProgramDescriptor( - "PokemonFRLG:ShinyHuntFishing", - Pokemon::STRING_POKEMON + " FRLG", "Shiny Hunt - Fishing", - "Programs/PokemonFRLG/ShinyHunt-Fishing.html", - "Automated fishing shiny hunt.", - ProgramControllerClass::StandardController_NoRestrictions, - FeedbackType::REQUIRED, - AllowCommandsWhenRunning::DISABLE_COMMANDS - ) + "PokemonFRLG:ShinyHuntFishing", + Pokemon::STRING_POKEMON + " FRLG", + "Shiny Hunt - Fishing", + "Programs/PokemonFRLG/ShinyHunt-Fishing.html", + "Automated fishing shiny hunt.", + ProgramControllerClass::StandardController_NoRestrictions, + FeedbackType::REQUIRED, + AllowCommandsWhenRunning::DISABLE_COMMANDS + ) {} -struct ShinyHuntFishing_Descriptor::Stats : public StatsTracker{ +/*Tracks runtime statistics displayed in UI.*/ +struct ShinyHuntFishing_Descriptor::Stats : public StatsTracker { Stats() : encounters(m_stats["Encounters"]) , shinies(m_stats["Shinies"]) @@ -61,140 +71,294 @@ struct ShinyHuntFishing_Descriptor::Stats : public StatsTracker{ { m_display_order.emplace_back("Encounters"); m_display_order.emplace_back("Shinies"); - m_display_order.emplace_back("Errors", HIDDEN_IF_ZERO); + m_display_order.emplace_back("Errors"); } - std::atomic& encounters; std::atomic& shinies; std::atomic& errors; }; - -std::unique_ptr ShinyHuntFishing_Descriptor::make_stats() const{ - return std::make_unique(); -} - - -ShinyHuntFishing::ShinyHuntFishing() - : SingleSwitchProgramInstance() +std::unique_ptr +ShinyHuntFishing_Descriptor::make_stats() const {return std::make_unique();} + +/* +=============================================================================== +Constructor +Defines user configurable options. +=============================================================================== +*/ +ShinyHuntFishing::ShinyHuntFishing() : SingleSwitchProgramInstance() + + // Adaptive delay before pressing A after casting rod. + // Adjusted dynamically to maximize encounter success. , BITE_WAIT_MS( - "Bite Wait (ms)
" - "Adaptive delay before pressing A.", - LockMode::UNLOCK_WHILE_RUNNING, - 3000, - 2400, - 4200 - ) + "Bite Wait (ms)
" + "Adaptive delay before pressing A.", + LockMode::UNLOCK_WHILE_RUNNING, + 3000, + 2400, + 4200 + ) + + // Return to HOME menu after shiny is found. , GO_HOME_WHEN_DONE(true) - - , NOTIFICATION_SHINY( - "Shiny found", - true, true, ImageAttachmentMode::JPG, - {"Notifs", "Showcase"} - ) - - , NOTIFICATION_STATUS_UPDATE("Status Update", true, false, std::chrono::seconds(3600)) + // Notification triggered when shiny detected. + , NOTIFICATION_SHINY("Shiny found", true, true, ImageAttachmentMode::JPG, {"Notifs", "Showcase"}) , NOTIFICATIONS({ - &NOTIFICATION_SHINY, - &NOTIFICATION_STATUS_UPDATE, - &NOTIFICATION_PROGRAM_FINISH - }) - + &NOTIFICATION_SHINY, + &NOTIFICATION_PROGRAM_FINISH, + }) { PA_ADD_OPTION(BITE_WAIT_MS); PA_ADD_OPTION(GO_HOME_WHEN_DONE); PA_ADD_OPTION(NOTIFICATIONS); - /*PA_ADD_STATIC(SHINY_REQUIRES_AUDIO); - PA_ADD_OPTION(TRIGGER_METHOD); - PA_ADD_OPTION(MOVE_DURATION0); - PA_ADD_OPTION(TAKE_VIDEO);*/ } +/* +=============================================================================== +Program Logic +=============================================================================== +*/ -void ShinyHuntFishing::program(SingleSwitchProgramEnvironment& env,ProControllerContext& context - ){ - auto& stats = env.current_stats(); +void ShinyHuntFishing::program( + SingleSwitchProgramEnvironment& env, + ProControllerContext& context +) { + auto& stats = + env.current_stats(); - home_black_border_check(env.console, context); /* - * Settings: Text Speed fast. - * Setup: Stand in facing fishable water. + --------------------------------------------------------------------------- + Ensure game is properly detected and scaled. + Prevents capture card resolution mismatch issues. + --------------------------------------------------------------------------- */ + home_black_border_check(env.console, context); + /* + Program setup requirements: + - Player must be facing fishable water + - Fishing rod must be registered + - Text speed must be FAST + */ env.log("FRLG Fishing shiny hunt started."); - // ensure overworld state + /* + Ensure we begin in overworld state. + Clears any open dialog boxes. + */ pbf_mash_button(context, BUTTON_B, 1500ms); - WhiteDialogWatcher dialog(COLOR_RED); + /* + Perform autosave at program start. + Protects progress if crash occurs later. + */ + env.log("Performing initial autosave."); + save_game_to_overworld(env.console, context); + + /*Return to overworld after saving.*/ + pbf_mash_button(context, BUTTON_B, 1000ms); + + /* + --------------------------------------------------------------------------- + Detector initialization + These watchers monitor game state changes. + --------------------------------------------------------------------------- + */ + AdvanceWhiteDialogWatcher advance_dialog(COLOR_RED); + WhiteDialogWatcher white_dialog(COLOR_RED); BlackScreenWatcher battle_entered(COLOR_RED); + BattleDialogWatcher battle_dialog(COLOR_RED); + BattleMenuWatcher battle_menu(COLOR_RED); + /* + --------------------------------------------------------------------------- + Adaptive timing variables + Adjusts A press timing to match bite window. + --------------------------------------------------------------------------- + */ int bite_wait_ms = BITE_WAIT_MS; - while (true){ + const int min_wait = 2400; + const int max_wait = 4200; + const int adjustment_step = 40; - // cast rod (must already be registered) - pbf_press_button(context, BUTTON_MINUS, 20ms, 1400ms); + int failed_attempts = 0; - // wait for bite dialog or battle transition + /* + =========================================================================== + Main Fishing Loop + =========================================================================== + */ + while (true) { + /* + Cast fishing rod. + Rod must be registered to SELECT. + */ + pbf_press_button(context, BUTTON_MINUS, 20ms, 1000ms); + + /* + Wait for one of the following: + 0 -> dialog with red arrow ("Oh! A bite!") + 1 -> white dialog box appears + 2 -> battle transition begins + If timeout occurs, run_until returns negative. + */ int ret = - run_until( - env.console, - context, - [&](ProControllerContext& context){ - pbf_wait(context, std::chrono::milliseconds(bite_wait_ms)); + run_until(env.console, context, [&](ProControllerContext& context) + { pbf_wait( + context, + std::chrono::milliseconds(bite_wait_ms) + ); }, { - dialog, + advance_dialog, + white_dialog, battle_entered } - ); - - // if dialog detected → advance text quickly - if (ret == 0){ - run_until( - env.console, - context, - [](ProControllerContext& context){ - pbf_mash_button(context, BUTTON_A, 1000ms); - }, - { battle_entered } - ); + ); + + /* + Advance dialog text as quickly as possible. + Prevents missing encounter trigger window. + */ + if (ret == 0) { + env.log("Advance dialog detected (red arrow)."); + pbf_mash_button(context, BUTTON_A, 800ms); + } else if (ret == 1) { + env.log("White dialog detected."); + pbf_mash_button(context, BUTTON_A, 800ms); + } else if (ret == 2) { + env.log("Battle transition detected."); + } else { + env.log("No bite detected."); } - // wait for battle to actually begin + /* + Confirm battle has started. + Multiple detectors used to improve reliability: + - black screen fade + - teal dialog box + - FIGHT menu appearance + */ int battle_ret = run_until( env.console, context, [](ProControllerContext& context){ - pbf_wait(context, 1500ms); + pbf_wait(context, 4000ms); }, - { battle_entered } + { + battle_entered, + battle_dialog, + battle_menu + } + ); + + /* + ----------------------------------------------------------------------- + Dialog fail-safe + Sometimes dialog detection may stall. + If dialog persists too long, mash A to force progression. + ----------------------------------------------------------------------- + */ + constexpr auto DIALOG_FAILSAFE_TIMEOUT = + std::chrono::seconds(8); + bool dialog_seen = false; + WallClock dialog_start; + if (ret == 0 || ret == 1) { + dialog_seen = true; + dialog_start = current_time(); + } + if ( + dialog_seen && + current_time() - dialog_start > + DIALOG_FAILSAFE_TIMEOUT + ) { + env.log("Dialog persisted too long. " + "Triggering fail-safe." + ); + pbf_mash_button(context, BUTTON_A, 1500ms); + + /*Attempt to recover battle state.*/ + battle_ret = + run_until( + env.console, + context, + + [](ProControllerContext& context){ + pbf_wait(context, 2000ms); + }, + { + battle_entered, + battle_dialog, + battle_menu + } ); - // no encounter triggered - if (battle_ret != 0){ + /*Count error only if fail-safe did not recover battle.*/ + if (battle_ret < 0) { + env.log("Fail-safe recovery failed."); + stats.errors++; + env.update_stats(); + } + } + + /* + ----------------------------------------------------------------------- + No encounter triggered + Adjust timing upward to improve bite sync. + ----------------------------------------------------------------------- + */ + if (battle_ret != 0) { + failed_attempts++; + + /* + Increase delay gradually. + Prevents over-adjusting due to random variance. + */ + if (failed_attempts >= 3) { + bite_wait_ms += adjustment_step; + if (bite_wait_ms > max_wait) { + bite_wait_ms = max_wait; + } + BITE_WAIT_MS.set(bite_wait_ms); + failed_attempts = 0; + } continue; } - // encounter triggered + /* + ----------------------------------------------------------------------- + Encounter triggered successfully + ----------------------------------------------------------------------- + */ stats.encounters++; env.update_stats(); - - // shiny detection - bool shiny = - handle_encounter( - env.console, - context, - true - ); - - - if (shiny){ - + failed_attempts = 0; + + /* + Slightly reduce delay to improve efficiency. + */ + bite_wait_ms -= adjustment_step; + if (bite_wait_ms < min_wait) { + bite_wait_ms = min_wait; + } + BITE_WAIT_MS.set(bite_wait_ms); + + /* + Detect shiny animation/audio. + handle_encounter waits for Pokemon to appear. + */ + bool shiny = handle_encounter(env.console, context, true); + + /* + ----------------------------------------------------------------------- + Shiny detected + ----------------------------------------------------------------------- + */ + if (shiny) { stats.shinies++; env.update_stats(); - send_program_notification( env, NOTIFICATION_SHINY, @@ -204,30 +368,31 @@ void ShinyHuntFishing::program(SingleSwitchProgramEnvironment& env,ProController "", env.console.video().snapshot(), true - ); - + ); break; } - - - // flee non-shiny encounter + /* + ----------------------------------------------------------------------- + Non-shiny encounter + Assumes fleeing always succeeds. + ----------------------------------------------------------------------- + */ flee_battle(env.console, context); - context.wait_for_all_requests(); } - - if (GO_HOME_WHEN_DONE){ - pbf_press_button(context, BUTTON_HOME, 200ms, 1000ms); - } - - - send_program_finished_notification( - env, - NOTIFICATION_PROGRAM_FINISH + /*Return to HOME menu after shiny found.*/ + if (GO_HOME_WHEN_DONE) { + pbf_press_button( + context, + BUTTON_HOME, + 200ms, + 1000ms ); + } + send_program_finished_notification(env, NOTIFICATION_PROGRAM_FINISH + ); } - -} -} -} +} // namespace PokemonFRLG +} // namespace NintendoSwitch +} // namespace PokemonAutomation \ No newline at end of file diff --git a/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h index 29876646c..878fdf255 100644 --- a/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h +++ b/SerialPrograms/Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h @@ -3,59 +3,55 @@ * From: https://github.com/PokemonAutomation/ * */ -#ifndef PokemonAutomation_ShinyHuntFishing_H -#define PokemonAutomation_ShinyHuntFishing_H +#ifndef PokemonAutomation_PokemonFRLG_ShinyHuntFishing_H +#define PokemonAutomation_PokemonFRLG_ShinyHuntFishing_H #include "CommonFramework/Notifications/EventNotificationsTable.h" -#include "NintendoSwitch/NintendoSwitch_SingleSwitchProgram.h" -#include "NintendoSwitch/Options/NintendoSwitch_GoHomeWhenDoneOption.h" - -#include "Common/Cpp/Options/SimpleIntegerOption.h" - #include "CommonFramework/ProgramStats/StatsTracking.h" +#include "Common/Cpp/Options/SimpleIntegerOption.h" -namespace PokemonAutomation{ -namespace NintendoSwitch{ -namespace PokemonFRLG{ +#include "NintendoSwitch/NintendoSwitch_SingleSwitchProgram.h" +#include "NintendoSwitch/Options/NintendoSwitch_GoHomeWhenDoneOption.h" +namespace PokemonAutomation { +namespace NintendoSwitch { +namespace PokemonFRLG { -class ShinyHuntFishing_Descriptor - : public SingleSwitchProgramDescriptor{ +class ShinyHuntFishing_Descriptor : public SingleSwitchProgramDescriptor { public: - ShinyHuntFishing_Descriptor -(); + ShinyHuntFishing_Descriptor(); + struct Stats; - virtual std::unique_ptr make_stats() const override; + std::unique_ptr make_stats() const override; }; -class ShinyHuntFishing : public SingleSwitchProgramInstance{ +class ShinyHuntFishing : public SingleSwitchProgramInstance { public: ShinyHuntFishing(); - virtual void program(SingleSwitchProgramEnvironment& env, ProControllerContext& context) override; - - // disable strict border detection - virtual void start_program_border_check(VideoStream&, FeedbackType) override{} + void program( + SingleSwitchProgramEnvironment& env, + ProControllerContext& context + ) override; + // Disable strict border detection + void start_program_border_check( + VideoStream&, + FeedbackType + ) override {} private: - - SimpleIntegerOption BITE_WAIT_MS; GoHomeWhenDoneOption GO_HOME_WHEN_DONE; EventNotificationOption NOTIFICATION_SHINY; - EventNotificationOption NOTIFICATION_STATUS_UPDATE; - EventNotificationsOption NOTIFICATIONS; - }; - -} -} -} +} // namespace PokemonFRLG +} // namespace NintendoSwitch +} // namespace PokemonAutomation #endif \ No newline at end of file diff --git a/SerialPrograms/cmake/SourceFiles.cmake b/SerialPrograms/cmake/SourceFiles.cmake index 7f4ccde70..beaca117f 100644 --- a/SerialPrograms/cmake/SourceFiles.cmake +++ b/SerialPrograms/cmake/SourceFiles.cmake @@ -1,20 +1,32 @@ # This CMake file defines all the code file paths as the CMake variables + # For the main CMake file, see CMakeLists.txt + + # the GUI executable needs the dark style format file + qt_add_resources(DARK_STYLE_RES "../3rdParty/qdarkstyle/dark/darkstyle.qrc") + set(EXECUTABLE_SOURCES "Source/CommonFramework/Main.cpp" ${DARK_STYLE_RES}) + + # Note: Command-line executable sources are defined in Source/CommandLine/CommandLineExecutable.cmake + + file(GLOB LIBRARY_SOURCES - ../3rdParty/miniz-3.1.1/miniz.h - ../3rdParty/miniz-3.1.1/miniz.c + ../3rdParty/ONNX/OnnxToolsPA.h ../3rdParty/QtWavFile/WavFile.cpp ../3rdParty/QtWavFile/WavFile.h ../3rdParty/TesseractPA/TesseractPA.cpp ../3rdParty/TesseractPA/TesseractPA.h + ../3rdParty/miniz-3.1.1/miniz.c + ../3rdParty/miniz-3.1.1/miniz.h + ../Common/CRC32/pabb_CRC32.c + ../Common/CRC32/pabb_CRC32.h ../Common/Compiler.h ../Common/ControllerStates/HID_Keyboard_State.h ../Common/ControllerStates/NintendoSwitch_OemController_State.c @@ -28,11 +40,11 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Color.h ../Common/Cpp/Concurrency/AsyncTask.h ../Common/Cpp/Concurrency/Backends/AsyncTask_Default.h + ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.cpp + ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.h ../Common/Cpp/Concurrency/Backends/Thread_Qt.tpp ../Common/Cpp/Concurrency/Backends/Thread_StdThread.tpp ../Common/Cpp/Concurrency/Backends/Thread_StdThreadDetach.tpp - ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.cpp - ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.h ../Common/Cpp/Concurrency/ConditionVariable.h ../Common/Cpp/Concurrency/FireForgetDispatcher.cpp ../Common/Cpp/Concurrency/FireForgetDispatcher.h @@ -84,10 +96,10 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Exceptions.h ../Common/Cpp/ExpressionEvaluator.cpp ../Common/Cpp/ExpressionEvaluator.h - ../Common/Cpp/Filesystem.cpp - ../Common/Cpp/Filesystem.h ../Common/Cpp/FileIO.cpp ../Common/Cpp/FileIO.h + ../Common/Cpp/Filesystem.cpp + ../Common/Cpp/Filesystem.h ../Common/Cpp/Hardware/Hardware.cpp ../Common/Cpp/Hardware/Hardware.h ../Common/Cpp/Hardware/Hardware_arm64_Linux.tpp @@ -161,9 +173,9 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Options/PathOption.h ../Common/Cpp/Options/RandomCodeOption.cpp ../Common/Cpp/Options/RandomCodeOption.h - ../Common/Cpp/Options/SimpleIntegerOptionBase.h ../Common/Cpp/Options/SimpleIntegerOption.cpp ../Common/Cpp/Options/SimpleIntegerOption.h + ../Common/Cpp/Options/SimpleIntegerOptionBase.h ../Common/Cpp/Options/StaticTableOption.cpp ../Common/Cpp/Options/StaticTableOption.h ../Common/Cpp/Options/StaticTextOption.cpp @@ -190,11 +202,6 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/SerialConnection/SerialConnection.h ../Common/Cpp/SerialConnection/SerialConnectionPOSIX.h ../Common/Cpp/SerialConnection/SerialConnectionWinAPI.h - ../Common/Cpp/StreamConnections/MockDevice.cpp - ../Common/Cpp/StreamConnections/MockDevice.h - ../Common/Cpp/StreamConnections/PollingStreamConnections.h - ../Common/Cpp/StreamConnections/PushingStreamConnections.h - ../Common/Cpp/StreamConnections/StreamInterface.h ../Common/Cpp/Sockets/AbstractClientSocket.h ../Common/Cpp/Sockets/ClientSocket.cpp ../Common/Cpp/Sockets/ClientSocket.h @@ -202,6 +209,11 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Sockets/ClientSocket_Qt.h ../Common/Cpp/Sockets/ClientSocket_WinSocket.h ../Common/Cpp/Stopwatch.h + ../Common/Cpp/StreamConnections/MockDevice.cpp + ../Common/Cpp/StreamConnections/MockDevice.h + ../Common/Cpp/StreamConnections/PollingStreamConnections.h + ../Common/Cpp/StreamConnections/PushingStreamConnections.h + ../Common/Cpp/StreamConnections/StreamInterface.h ../Common/Cpp/StreamConverters.cpp ../Common/Cpp/StreamConverters.h ../Common/Cpp/Strings/StringTools.cpp @@ -212,8 +224,25 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Time.h ../Common/Cpp/UiWrapper.h ../Common/Cpp/ValueDebouncer.h - ../Common/CRC32/pabb_CRC32.c - ../Common/CRC32/pabb_CRC32.h + ../Common/PABotBase2/Controllers/PABotBase2_Controller_HID_Keyboard.h + ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS1_OemController.h + ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS_WiredController.h + ../Common/PABotBase2/PABotBase2CC_MessageDumper.cpp + ../Common/PABotBase2/PABotBase2CC_MessageDumper.h + ../Common/PABotBase2/PABotBase2_MessageProtocol.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketProtocol.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.h ../Common/Qt/AutoHeightTable.cpp ../Common/Qt/AutoHeightTable.h ../Common/Qt/AutoWidthLineEdit.cpp @@ -226,8 +255,6 @@ file(GLOB LIBRARY_SOURCES ../Common/Qt/GlobalThreadPoolsQt.cpp ../Common/Qt/GlobalThreadPoolsQt.h ../Common/Qt/NoWheelComboBox.h - ../Common/Qt/QtThreadPool.cpp - ../Common/Qt/QtThreadPool.h ../Common/Qt/Options/BatchWidget.cpp ../Common/Qt/Options/BatchWidget.h ../Common/Qt/Options/BooleanCheckBoxWidget.cpp @@ -276,6 +303,8 @@ file(GLOB LIBRARY_SOURCES ../Common/Qt/Options/TimeDurationWidget.h ../Common/Qt/Options/TimeExpressionWidget.cpp ../Common/Qt/Options/TimeExpressionWidget.h + ../Common/Qt/QtThreadPool.cpp + ../Common/Qt/QtThreadPool.h ../Common/Qt/Redispatch.cpp ../Common/Qt/Redispatch.h ../Common/Qt/ShutdownWithEvents.h @@ -286,25 +315,6 @@ file(GLOB LIBRARY_SOURCES ../Common/Qt/TimeQt.h ../Common/Qt/WidgetStackFixedAspectRatio.cpp ../Common/Qt/WidgetStackFixedAspectRatio.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketProtocol.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.h - ../Common/PABotBase2/Controllers/PABotBase2_Controller_HID_Keyboard.h - ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS_WiredController.h - ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS1_OemController.h - ../Common/PABotBase2/PABotBase2CC_MessageDumper.cpp - ../Common/PABotBase2/PABotBase2CC_MessageDumper.h - ../Common/PABotBase2/PABotBase2_MessageProtocol.h ../Common/SerialPABotBase/SerialPABotBase_Messages_HID_Keyboard.h ../Common/SerialPABotBase/SerialPABotBase_Messages_NS1_OemControllers.h ../Common/SerialPABotBase/SerialPABotBase_Messages_NS_WiredController.h @@ -417,10 +427,10 @@ file(GLOB LIBRARY_SOURCES Source/CommonFramework/Logging/QueuedLogger.h Source/CommonFramework/Notifications/EventNotificationOption.cpp Source/CommonFramework/Notifications/EventNotificationOption.h - Source/CommonFramework/Notifications/EventNotificationsTable.cpp - Source/CommonFramework/Notifications/EventNotificationsTable.h Source/CommonFramework/Notifications/EventNotificationWidget.cpp Source/CommonFramework/Notifications/EventNotificationWidget.h + Source/CommonFramework/Notifications/EventNotificationsTable.cpp + Source/CommonFramework/Notifications/EventNotificationsTable.h Source/CommonFramework/Notifications/MessageAttachment.cpp Source/CommonFramework/Notifications/MessageAttachment.h Source/CommonFramework/Notifications/ProgramInfo.h @@ -640,10 +650,10 @@ file(GLOB LIBRARY_SOURCES Source/CommonTools/OCR/OCR_LargeDictionaryMatcher.h Source/CommonTools/OCR/OCR_NumberReader.cpp Source/CommonTools/OCR/OCR_NumberReader.h - Source/CommonTools/OCR/OCR_RawPaddleOCR.cpp - Source/CommonTools/OCR/OCR_RawPaddleOCR.h Source/CommonTools/OCR/OCR_RawOCR.cpp Source/CommonTools/OCR/OCR_RawOCR.h + Source/CommonTools/OCR/OCR_RawPaddleOCR.cpp + Source/CommonTools/OCR/OCR_RawPaddleOCR.h Source/CommonTools/OCR/OCR_Routines.cpp Source/CommonTools/OCR/OCR_Routines.h Source/CommonTools/OCR/OCR_SmallDictionaryMatcher.cpp @@ -770,8 +780,8 @@ file(GLOB LIBRARY_SOURCES Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_BaseProtocol_Misc.h Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_BaseProtocol_StaticRequests.h Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_HID_Keyboard.h - Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_NS_WiredController.h Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_NS1_OemControllers.h + Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_NS_WiredController.h Source/Controllers/SerialPABotBase/SerialPABotBase.cpp Source/Controllers/SerialPABotBase/SerialPABotBase.h Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.cpp @@ -996,10 +1006,10 @@ file(GLOB LIBRARY_SOURCES Source/ML/DataLabeling/ML_SegmentAnythingModelConstants.h Source/ML/Inference/ML_PaddleOCRPipeline.cpp Source/ML/Inference/ML_PaddleOCRPipeline.h - Source/ML/Inference/ML_YOLOv5Detector.cpp - Source/ML/Inference/ML_YOLOv5Detector.h Source/ML/Inference/ML_YOLONavigation.cpp Source/ML/Inference/ML_YOLONavigation.h + Source/ML/Inference/ML_YOLOv5Detector.cpp + Source/ML/Inference/ML_YOLOv5Detector.h Source/ML/ML_Panels.cpp Source/ML/ML_Panels.h Source/ML/Models/ML_ONNXRuntimeHelpers.cpp @@ -1429,24 +1439,24 @@ file(GLOB LIBRARY_SOURCES Source/PokemonFRLG/Inference/Dialogs/PokemonFRLG_DialogDetector.h Source/PokemonFRLG/Inference/Dialogs/PokemonFRLG_PrizeSelectDetector.cpp Source/PokemonFRLG/Inference/Dialogs/PokemonFRLG_PrizeSelectDetector.h - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_StartMenuDetector.cpp - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_StartMenuDetector.h - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_SummaryDetector.cpp - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_SummaryDetector.h Source/PokemonFRLG/Inference/Menus/PokemonFRLG_LoadMenuDetector.cpp Source/PokemonFRLG/Inference/Menus/PokemonFRLG_LoadMenuDetector.h Source/PokemonFRLG/Inference/Menus/PokemonFRLG_PartyMenuDetector.cpp Source/PokemonFRLG/Inference/Menus/PokemonFRLG_PartyMenuDetector.h - Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.cpp - Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.h + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_StartMenuDetector.cpp + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_StartMenuDetector.h + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_SummaryDetector.cpp + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_SummaryDetector.h + Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.cpp + Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.h Source/PokemonFRLG/Inference/PokemonFRLG_SelectionArrowDetector.cpp Source/PokemonFRLG/Inference/PokemonFRLG_SelectionArrowDetector.h Source/PokemonFRLG/Inference/PokemonFRLG_ShinySymbolDetector.cpp Source/PokemonFRLG/Inference/PokemonFRLG_ShinySymbolDetector.h - Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.cpp - Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.h Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.h + Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.cpp + Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.h Source/PokemonFRLG/PokemonFRLG_Navigation.cpp Source/PokemonFRLG/PokemonFRLG_Navigation.h Source/PokemonFRLG/PokemonFRLG_Panels.cpp @@ -1467,12 +1477,14 @@ file(GLOB LIBRARY_SOURCES Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_LegendaryRunAway.h Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_PrizeCornerReset.cpp Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_PrizeCornerReset.h + Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.cpp + Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Overworld.cpp Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Overworld.h - Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_SoundListener.cpp - Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_SoundListener.h Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_ReadStats.cpp Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_ReadStats.h + Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_SoundListener.cpp + Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_SoundListener.h Source/PokemonHome/Inference/PokemonHome_BallReader.cpp Source/PokemonHome/Inference/PokemonHome_BallReader.h Source/PokemonHome/Inference/PokemonHome_BoxGenderDetector.cpp @@ -1756,10 +1768,10 @@ file(GLOB LIBRARY_SOURCES Source/PokemonLZA/Inference/PokemonLZA_DayNightChangeDetector.h Source/PokemonLZA/Inference/PokemonLZA_DialogDetector.cpp Source/PokemonLZA/Inference/PokemonLZA_DialogDetector.h - Source/PokemonLZA/Inference/PokemonLZA_HyperspaceRewardNameReader.cpp - Source/PokemonLZA/Inference/PokemonLZA_HyperspaceRewardNameReader.h Source/PokemonLZA/Inference/PokemonLZA_HyperspaceCalorieDetector.cpp Source/PokemonLZA/Inference/PokemonLZA_HyperspaceCalorieDetector.h + Source/PokemonLZA/Inference/PokemonLZA_HyperspaceRewardNameReader.cpp + Source/PokemonLZA/Inference/PokemonLZA_HyperspaceRewardNameReader.h Source/PokemonLZA/Inference/PokemonLZA_MainMenuDetector.cpp Source/PokemonLZA/Inference/PokemonLZA_MainMenuDetector.h Source/PokemonLZA/Inference/PokemonLZA_OverworldPartySelectionDetector.cpp @@ -1806,18 +1818,18 @@ file(GLOB LIBRARY_SOURCES Source/PokemonLZA/Programs/NonShinyHunting/PokemonLZA_WeatherFinder.h Source/PokemonLZA/Programs/PokemonLZA_BasicNavigation.cpp Source/PokemonLZA/Programs/PokemonLZA_BasicNavigation.h - Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.cpp - Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.h - Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.cpp - Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.h Source/PokemonLZA/Programs/PokemonLZA_BoxSorter.cpp Source/PokemonLZA/Programs/PokemonLZA_BoxSorter.h Source/PokemonLZA/Programs/PokemonLZA_ClothingBuyer.cpp Source/PokemonLZA/Programs/PokemonLZA_ClothingBuyer.h Source/PokemonLZA/Programs/PokemonLZA_DonutBerrySession.cpp Source/PokemonLZA/Programs/PokemonLZA_DonutBerrySession.h + Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.cpp + Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.h Source/PokemonLZA/Programs/PokemonLZA_GameEntry.cpp Source/PokemonLZA/Programs/PokemonLZA_GameEntry.h + Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.cpp + Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.h Source/PokemonLZA/Programs/PokemonLZA_MegaShardFarmer.cpp Source/PokemonLZA/Programs/PokemonLZA_MegaShardFarmer.h Source/PokemonLZA/Programs/PokemonLZA_MenuNavigation.cpp @@ -1840,12 +1852,12 @@ file(GLOB LIBRARY_SOURCES Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_BenchSit.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_FlySpotReset.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_FlySpotReset.h + Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.cpp + Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceHunter.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceHunter.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceLegendary.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceLegendary.h - Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.cpp - Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_OverworldReset.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_OverworldReset.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShuttleRun.cpp @@ -2734,3 +2746,4 @@ file(GLOB LIBRARY_SOURCES Source/ZeldaTotK/ZeldaTotK_Settings.cpp Source/ZeldaTotK/ZeldaTotK_Settings.h ) + From 030d1934013d30572275a474e64cd52bdf286d09 Mon Sep 17 00:00:00 2001 From: Butters Date: Thu, 26 Mar 2026 19:37:20 -0500 Subject: [PATCH 3/3] changed sourcefiles to match the main I think the python string that adds programs to sourcefiles.cmake makes a lot of changes to the order. To minimize the apparent changes, I copied the original file and manually added my programs to it. --- SerialPrograms/cmake/SourceFiles.cmake | 133 ++++++++++++------------- 1 file changed, 61 insertions(+), 72 deletions(-) diff --git a/SerialPrograms/cmake/SourceFiles.cmake b/SerialPrograms/cmake/SourceFiles.cmake index beaca117f..cb602bba2 100644 --- a/SerialPrograms/cmake/SourceFiles.cmake +++ b/SerialPrograms/cmake/SourceFiles.cmake @@ -1,32 +1,20 @@ # This CMake file defines all the code file paths as the CMake variables - # For the main CMake file, see CMakeLists.txt - - # the GUI executable needs the dark style format file - qt_add_resources(DARK_STYLE_RES "../3rdParty/qdarkstyle/dark/darkstyle.qrc") - set(EXECUTABLE_SOURCES "Source/CommonFramework/Main.cpp" ${DARK_STYLE_RES}) - - # Note: Command-line executable sources are defined in Source/CommandLine/CommandLineExecutable.cmake - - file(GLOB LIBRARY_SOURCES - + ../3rdParty/miniz-3.1.1/miniz.h + ../3rdParty/miniz-3.1.1/miniz.c ../3rdParty/ONNX/OnnxToolsPA.h ../3rdParty/QtWavFile/WavFile.cpp ../3rdParty/QtWavFile/WavFile.h ../3rdParty/TesseractPA/TesseractPA.cpp ../3rdParty/TesseractPA/TesseractPA.h - ../3rdParty/miniz-3.1.1/miniz.c - ../3rdParty/miniz-3.1.1/miniz.h - ../Common/CRC32/pabb_CRC32.c - ../Common/CRC32/pabb_CRC32.h ../Common/Compiler.h ../Common/ControllerStates/HID_Keyboard_State.h ../Common/ControllerStates/NintendoSwitch_OemController_State.c @@ -40,11 +28,11 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Color.h ../Common/Cpp/Concurrency/AsyncTask.h ../Common/Cpp/Concurrency/Backends/AsyncTask_Default.h - ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.cpp - ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.h ../Common/Cpp/Concurrency/Backends/Thread_Qt.tpp ../Common/Cpp/Concurrency/Backends/Thread_StdThread.tpp ../Common/Cpp/Concurrency/Backends/Thread_StdThreadDetach.tpp + ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.cpp + ../Common/Cpp/Concurrency/Backends/ThreadPool_Default.h ../Common/Cpp/Concurrency/ConditionVariable.h ../Common/Cpp/Concurrency/FireForgetDispatcher.cpp ../Common/Cpp/Concurrency/FireForgetDispatcher.h @@ -96,10 +84,10 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Exceptions.h ../Common/Cpp/ExpressionEvaluator.cpp ../Common/Cpp/ExpressionEvaluator.h - ../Common/Cpp/FileIO.cpp - ../Common/Cpp/FileIO.h ../Common/Cpp/Filesystem.cpp ../Common/Cpp/Filesystem.h + ../Common/Cpp/FileIO.cpp + ../Common/Cpp/FileIO.h ../Common/Cpp/Hardware/Hardware.cpp ../Common/Cpp/Hardware/Hardware.h ../Common/Cpp/Hardware/Hardware_arm64_Linux.tpp @@ -173,9 +161,9 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Options/PathOption.h ../Common/Cpp/Options/RandomCodeOption.cpp ../Common/Cpp/Options/RandomCodeOption.h + ../Common/Cpp/Options/SimpleIntegerOptionBase.h ../Common/Cpp/Options/SimpleIntegerOption.cpp ../Common/Cpp/Options/SimpleIntegerOption.h - ../Common/Cpp/Options/SimpleIntegerOptionBase.h ../Common/Cpp/Options/StaticTableOption.cpp ../Common/Cpp/Options/StaticTableOption.h ../Common/Cpp/Options/StaticTextOption.cpp @@ -202,6 +190,11 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/SerialConnection/SerialConnection.h ../Common/Cpp/SerialConnection/SerialConnectionPOSIX.h ../Common/Cpp/SerialConnection/SerialConnectionWinAPI.h + ../Common/Cpp/StreamConnections/MockDevice.cpp + ../Common/Cpp/StreamConnections/MockDevice.h + ../Common/Cpp/StreamConnections/PollingStreamConnections.h + ../Common/Cpp/StreamConnections/PushingStreamConnections.h + ../Common/Cpp/StreamConnections/StreamInterface.h ../Common/Cpp/Sockets/AbstractClientSocket.h ../Common/Cpp/Sockets/ClientSocket.cpp ../Common/Cpp/Sockets/ClientSocket.h @@ -209,11 +202,6 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Sockets/ClientSocket_Qt.h ../Common/Cpp/Sockets/ClientSocket_WinSocket.h ../Common/Cpp/Stopwatch.h - ../Common/Cpp/StreamConnections/MockDevice.cpp - ../Common/Cpp/StreamConnections/MockDevice.h - ../Common/Cpp/StreamConnections/PollingStreamConnections.h - ../Common/Cpp/StreamConnections/PushingStreamConnections.h - ../Common/Cpp/StreamConnections/StreamInterface.h ../Common/Cpp/StreamConverters.cpp ../Common/Cpp/StreamConverters.h ../Common/Cpp/Strings/StringTools.cpp @@ -224,25 +212,8 @@ file(GLOB LIBRARY_SOURCES ../Common/Cpp/Time.h ../Common/Cpp/UiWrapper.h ../Common/Cpp/ValueDebouncer.h - ../Common/PABotBase2/Controllers/PABotBase2_Controller_HID_Keyboard.h - ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS1_OemController.h - ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS_WiredController.h - ../Common/PABotBase2/PABotBase2CC_MessageDumper.cpp - ../Common/PABotBase2/PABotBase2CC_MessageDumper.h - ../Common/PABotBase2/PABotBase2_MessageProtocol.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketProtocol.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.h - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.cpp - ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.h + ../Common/CRC32/pabb_CRC32.c + ../Common/CRC32/pabb_CRC32.h ../Common/Qt/AutoHeightTable.cpp ../Common/Qt/AutoHeightTable.h ../Common/Qt/AutoWidthLineEdit.cpp @@ -255,6 +226,8 @@ file(GLOB LIBRARY_SOURCES ../Common/Qt/GlobalThreadPoolsQt.cpp ../Common/Qt/GlobalThreadPoolsQt.h ../Common/Qt/NoWheelComboBox.h + ../Common/Qt/QtThreadPool.cpp + ../Common/Qt/QtThreadPool.h ../Common/Qt/Options/BatchWidget.cpp ../Common/Qt/Options/BatchWidget.h ../Common/Qt/Options/BooleanCheckBoxWidget.cpp @@ -303,8 +276,6 @@ file(GLOB LIBRARY_SOURCES ../Common/Qt/Options/TimeDurationWidget.h ../Common/Qt/Options/TimeExpressionWidget.cpp ../Common/Qt/Options/TimeExpressionWidget.h - ../Common/Qt/QtThreadPool.cpp - ../Common/Qt/QtThreadPool.h ../Common/Qt/Redispatch.cpp ../Common/Qt/Redispatch.h ../Common/Qt/ShutdownWithEvents.h @@ -315,6 +286,25 @@ file(GLOB LIBRARY_SOURCES ../Common/Qt/TimeQt.h ../Common/Qt/WidgetStackFixedAspectRatio.cpp ../Common/Qt/WidgetStackFixedAspectRatio.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_ConnectionDebug.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketParser.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketProtocol.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_PacketSender.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2_StreamCoalescer.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2CC_ReliableStreamConnection.h + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.cpp + ../Common/PABotBase2/ReliableConnectionLayer/PABotBase2FW_ReliableStreamConnection.h + ../Common/PABotBase2/Controllers/PABotBase2_Controller_HID_Keyboard.h + ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS_WiredController.h + ../Common/PABotBase2/Controllers/PABotBase2_Controller_NS1_OemController.h + ../Common/PABotBase2/PABotBase2CC_MessageDumper.cpp + ../Common/PABotBase2/PABotBase2CC_MessageDumper.h + ../Common/PABotBase2/PABotBase2_MessageProtocol.h ../Common/SerialPABotBase/SerialPABotBase_Messages_HID_Keyboard.h ../Common/SerialPABotBase/SerialPABotBase_Messages_NS1_OemControllers.h ../Common/SerialPABotBase/SerialPABotBase_Messages_NS_WiredController.h @@ -427,10 +417,10 @@ file(GLOB LIBRARY_SOURCES Source/CommonFramework/Logging/QueuedLogger.h Source/CommonFramework/Notifications/EventNotificationOption.cpp Source/CommonFramework/Notifications/EventNotificationOption.h - Source/CommonFramework/Notifications/EventNotificationWidget.cpp - Source/CommonFramework/Notifications/EventNotificationWidget.h Source/CommonFramework/Notifications/EventNotificationsTable.cpp Source/CommonFramework/Notifications/EventNotificationsTable.h + Source/CommonFramework/Notifications/EventNotificationWidget.cpp + Source/CommonFramework/Notifications/EventNotificationWidget.h Source/CommonFramework/Notifications/MessageAttachment.cpp Source/CommonFramework/Notifications/MessageAttachment.h Source/CommonFramework/Notifications/ProgramInfo.h @@ -650,10 +640,10 @@ file(GLOB LIBRARY_SOURCES Source/CommonTools/OCR/OCR_LargeDictionaryMatcher.h Source/CommonTools/OCR/OCR_NumberReader.cpp Source/CommonTools/OCR/OCR_NumberReader.h - Source/CommonTools/OCR/OCR_RawOCR.cpp - Source/CommonTools/OCR/OCR_RawOCR.h Source/CommonTools/OCR/OCR_RawPaddleOCR.cpp Source/CommonTools/OCR/OCR_RawPaddleOCR.h + Source/CommonTools/OCR/OCR_RawOCR.cpp + Source/CommonTools/OCR/OCR_RawOCR.h Source/CommonTools/OCR/OCR_Routines.cpp Source/CommonTools/OCR/OCR_Routines.h Source/CommonTools/OCR/OCR_SmallDictionaryMatcher.cpp @@ -780,8 +770,8 @@ file(GLOB LIBRARY_SOURCES Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_BaseProtocol_Misc.h Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_BaseProtocol_StaticRequests.h Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_HID_Keyboard.h - Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_NS1_OemControllers.h Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_NS_WiredController.h + Source/Controllers/SerialPABotBase/Messages/SerialPABotBase_MessageWrappers_NS1_OemControllers.h Source/Controllers/SerialPABotBase/SerialPABotBase.cpp Source/Controllers/SerialPABotBase/SerialPABotBase.h Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.cpp @@ -1006,10 +996,10 @@ file(GLOB LIBRARY_SOURCES Source/ML/DataLabeling/ML_SegmentAnythingModelConstants.h Source/ML/Inference/ML_PaddleOCRPipeline.cpp Source/ML/Inference/ML_PaddleOCRPipeline.h - Source/ML/Inference/ML_YOLONavigation.cpp - Source/ML/Inference/ML_YOLONavigation.h Source/ML/Inference/ML_YOLOv5Detector.cpp Source/ML/Inference/ML_YOLOv5Detector.h + Source/ML/Inference/ML_YOLONavigation.cpp + Source/ML/Inference/ML_YOLONavigation.h Source/ML/ML_Panels.cpp Source/ML/ML_Panels.h Source/ML/Models/ML_ONNXRuntimeHelpers.cpp @@ -1439,24 +1429,24 @@ file(GLOB LIBRARY_SOURCES Source/PokemonFRLG/Inference/Dialogs/PokemonFRLG_DialogDetector.h Source/PokemonFRLG/Inference/Dialogs/PokemonFRLG_PrizeSelectDetector.cpp Source/PokemonFRLG/Inference/Dialogs/PokemonFRLG_PrizeSelectDetector.h - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_LoadMenuDetector.cpp - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_LoadMenuDetector.h - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_PartyMenuDetector.cpp - Source/PokemonFRLG/Inference/Menus/PokemonFRLG_PartyMenuDetector.h Source/PokemonFRLG/Inference/Menus/PokemonFRLG_StartMenuDetector.cpp Source/PokemonFRLG/Inference/Menus/PokemonFRLG_StartMenuDetector.h Source/PokemonFRLG/Inference/Menus/PokemonFRLG_SummaryDetector.cpp Source/PokemonFRLG/Inference/Menus/PokemonFRLG_SummaryDetector.h - Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.cpp - Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.h + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_LoadMenuDetector.cpp + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_LoadMenuDetector.h + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_PartyMenuDetector.cpp + Source/PokemonFRLG/Inference/Menus/PokemonFRLG_PartyMenuDetector.h + Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.cpp + Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.h Source/PokemonFRLG/Inference/PokemonFRLG_SelectionArrowDetector.cpp Source/PokemonFRLG/Inference/PokemonFRLG_SelectionArrowDetector.h Source/PokemonFRLG/Inference/PokemonFRLG_ShinySymbolDetector.cpp Source/PokemonFRLG/Inference/PokemonFRLG_ShinySymbolDetector.h + Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.cpp + Source/PokemonFRLG/Inference/PokemonFRLG_DigitReader.h Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.h - Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.cpp - Source/PokemonFRLG/Inference/Sounds/PokemonFRLG_ShinySoundDetector.h Source/PokemonFRLG/PokemonFRLG_Navigation.cpp Source/PokemonFRLG/PokemonFRLG_Navigation.h Source/PokemonFRLG/PokemonFRLG_Panels.cpp @@ -1481,10 +1471,10 @@ file(GLOB LIBRARY_SOURCES Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Fishing.h Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Overworld.cpp Source/PokemonFRLG/Programs/ShinyHunting/PokemonFRLG_ShinyHunt-Overworld.h - Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_ReadStats.cpp - Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_ReadStats.h Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_SoundListener.cpp Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_SoundListener.h + Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_ReadStats.cpp + Source/PokemonFRLG/Programs/TestPrograms/PokemonFRLG_ReadStats.h Source/PokemonHome/Inference/PokemonHome_BallReader.cpp Source/PokemonHome/Inference/PokemonHome_BallReader.h Source/PokemonHome/Inference/PokemonHome_BoxGenderDetector.cpp @@ -1768,10 +1758,10 @@ file(GLOB LIBRARY_SOURCES Source/PokemonLZA/Inference/PokemonLZA_DayNightChangeDetector.h Source/PokemonLZA/Inference/PokemonLZA_DialogDetector.cpp Source/PokemonLZA/Inference/PokemonLZA_DialogDetector.h - Source/PokemonLZA/Inference/PokemonLZA_HyperspaceCalorieDetector.cpp - Source/PokemonLZA/Inference/PokemonLZA_HyperspaceCalorieDetector.h Source/PokemonLZA/Inference/PokemonLZA_HyperspaceRewardNameReader.cpp Source/PokemonLZA/Inference/PokemonLZA_HyperspaceRewardNameReader.h + Source/PokemonLZA/Inference/PokemonLZA_HyperspaceCalorieDetector.cpp + Source/PokemonLZA/Inference/PokemonLZA_HyperspaceCalorieDetector.h Source/PokemonLZA/Inference/PokemonLZA_MainMenuDetector.cpp Source/PokemonLZA/Inference/PokemonLZA_MainMenuDetector.h Source/PokemonLZA/Inference/PokemonLZA_OverworldPartySelectionDetector.cpp @@ -1818,18 +1808,18 @@ file(GLOB LIBRARY_SOURCES Source/PokemonLZA/Programs/NonShinyHunting/PokemonLZA_WeatherFinder.h Source/PokemonLZA/Programs/PokemonLZA_BasicNavigation.cpp Source/PokemonLZA/Programs/PokemonLZA_BasicNavigation.h + Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.cpp + Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.h + Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.cpp + Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.h Source/PokemonLZA/Programs/PokemonLZA_BoxSorter.cpp Source/PokemonLZA/Programs/PokemonLZA_BoxSorter.h Source/PokemonLZA/Programs/PokemonLZA_ClothingBuyer.cpp Source/PokemonLZA/Programs/PokemonLZA_ClothingBuyer.h Source/PokemonLZA/Programs/PokemonLZA_DonutBerrySession.cpp Source/PokemonLZA/Programs/PokemonLZA_DonutBerrySession.h - Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.cpp - Source/PokemonLZA/Programs/PokemonLZA_FastTravelNavigation.h Source/PokemonLZA/Programs/PokemonLZA_GameEntry.cpp Source/PokemonLZA/Programs/PokemonLZA_GameEntry.h - Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.cpp - Source/PokemonLZA/Programs/PokemonLZA_HyperspaceNavigation.h Source/PokemonLZA/Programs/PokemonLZA_MegaShardFarmer.cpp Source/PokemonLZA/Programs/PokemonLZA_MegaShardFarmer.h Source/PokemonLZA/Programs/PokemonLZA_MenuNavigation.cpp @@ -1852,12 +1842,12 @@ file(GLOB LIBRARY_SOURCES Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_BenchSit.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_FlySpotReset.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_FlySpotReset.h - Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.cpp - Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceHunter.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceHunter.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceLegendary.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HyperspaceLegendary.h + Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.cpp + Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_HelioptileHunter.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_OverworldReset.cpp Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShinyHunt_OverworldReset.h Source/PokemonLZA/Programs/ShinyHunting/PokemonLZA_ShuttleRun.cpp @@ -2745,5 +2735,4 @@ file(GLOB LIBRARY_SOURCES Source/ZeldaTotK/ZeldaTotK_Panels.h Source/ZeldaTotK/ZeldaTotK_Settings.cpp Source/ZeldaTotK/ZeldaTotK_Settings.h -) - +) \ No newline at end of file