From db21eba3b9f8b2fd8bb3107c3c56315ddd24d076 Mon Sep 17 00:00:00 2001 From: Philippe Symons Date: Thu, 26 Mar 2026 15:30:46 +0100 Subject: [PATCH] Fix bug + add entry for injecting Celebi in debug menu --- source/Gen3CartridgeSaveReader.cpp | 5 +++-- source/dbg/debug_menu_entries.cpp | 1 + source/dbg/debug_menu_functions.cpp | 2 ++ source/vertical_menu.cpp | 8 +++++++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/source/Gen3CartridgeSaveReader.cpp b/source/Gen3CartridgeSaveReader.cpp index 764b0f6..5cbe640 100644 --- a/source/Gen3CartridgeSaveReader.cpp +++ b/source/Gen3CartridgeSaveReader.cpp @@ -6,7 +6,7 @@ #define HALL_OF_FAME 0x01C000 Gen3CartridgeSaveReader::Gen3CartridgeSaveReader(u8 *sector_buffer) - : sector_start_(0) + : sector_start_(0xFFFFFFFF) , sector_buffer_(sector_buffer) , cur_(sector_buffer) , dirty_(false) @@ -117,7 +117,8 @@ void Gen3CartridgeSaveReader::flush() return; } + const uintptr_t sector_offset = sector_start_ * SECTOR_SIZE; update_memory_buffer_checksum(sector_buffer_, (sector_start_ == HALL_OF_FAME)); - copy_ram_to_save(sector_buffer_, sector_start_, SECTOR_SIZE); + copy_ram_to_save(sector_buffer_, sector_offset, SECTOR_SIZE); dirty_ = false; } \ No newline at end of file diff --git a/source/dbg/debug_menu_entries.cpp b/source/dbg/debug_menu_entries.cpp index 1059ee3..f9d7ad9 100644 --- a/source/dbg/debug_menu_entries.cpp +++ b/source/dbg/debug_menu_entries.cpp @@ -100,6 +100,7 @@ void fill_debug_menu_with_entries(vertical_menu &menu, u16 *charset) define_executable_row(charset, "Text Debug", show_text_debug_screen, 0, nullptr), #endif define_executable_row(charset, "Info", show_debug_info_screen, 0, nullptr), + define_executable_row(charset, "Inject Celebi", dbg_inject_pkmn, 0, nullptr), define_song_row(charset, "Song"), define_toggle_row(charset, "Print Link", dbg_set_boolean_flag, g_debug_options.print_link_data, &g_debug_options.print_link_data), define_toggle_row(charset, "Instant Text", dbg_set_boolean_flag, g_debug_options.instant_text_speed, &g_debug_options.instant_text_speed), diff --git a/source/dbg/debug_menu_functions.cpp b/source/dbg/debug_menu_functions.cpp index 5b1652b..19a2bcb 100644 --- a/source/dbg/debug_menu_functions.cpp +++ b/source/dbg/debug_menu_functions.cpp @@ -217,6 +217,8 @@ void dbg_inject_pkmn(void *context, unsigned user_param) Gen3Pokemon celebi(&tables); celebi.loadData(RSEFL_10_ANIV_Celebi_0BF5_ENG_, false); + save_manager.setNationalDexUnlocked(true); + do { ret = save_manager.addPokemonToBox(boxIndex, celebi); diff --git a/source/vertical_menu.cpp b/source/vertical_menu.cpp index 6d4c351..a19073c 100644 --- a/source/vertical_menu.cpp +++ b/source/vertical_menu.cpp @@ -144,6 +144,7 @@ MenuInputHandleState vertical_menu::handle_input() { MenuInputHandleState result; bool did_navigate = false; + bool viewport_changed = false; // If no items or not focused, there's nothing to handle. if(items_.size() <= 1 || !is_focused_) @@ -181,6 +182,7 @@ MenuInputHandleState vertical_menu::handle_input() if(focused_index_ >= current_viewport_end_index) { ++viewport_start_index_; + viewport_changed = true; } did_navigate = true; } @@ -190,6 +192,7 @@ MenuInputHandleState vertical_menu::handle_input() if(focused_index_ < viewport_start_index_) { --viewport_start_index_; + viewport_changed = true; } did_navigate = true; } @@ -198,7 +201,10 @@ MenuInputHandleState vertical_menu::handle_input() if(did_navigate) { const unsigned render_index = focused_index_ - viewport_start_index_; - update_viewport(); + if(viewport_changed) + { + update_viewport(); + } handle_selection_change(focused_index_, settings_.x, settings_.y + settings_.margin_top + (render_index * settings_.item_height)); return MenuInputHandleState::HANDLED; }