diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp index c97373d8a0..de70c889c9 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp @@ -35,18 +35,31 @@ namespace rsx return page_navigation::exit; }); - if (!suspend_mode && boot_current_game_savestate(true, 1)) { - std::unique_ptr reload_state = std::make_unique( - get_localized_string(localized_string_id::HOME_MENU_RELOAD_SAVESTATE)); - - add_item(reload_state, [](pad_button btn) -> page_navigation + for (u32 save_index = 1; !suspend_mode && save_index <= 4; save_index++) + { + if (boot_current_game_savestate(true, save_index)) { - if (btn != pad_button::cross) return page_navigation::stay; - rsx_log.notice("User selected reload savestate in home menu"); - Emu.CallFromMainThread([]() { boot_current_game_savestate(true, 1); }); - return page_navigation::exit; - }); + const localized_string_id str_id = static_cast(static_cast(localized_string_id::HOME_MENU_RELOAD_SAVESTATE) + (save_index - 1)); + std::unique_ptr reload_state = std::make_unique(get_localized_string(str_id)); + + add_item(reload_state, [save_index](pad_button btn) -> page_navigation + { + if (btn != pad_button::cross) + { + return page_navigation::stay; + } + + rsx_log.notice("User selected reload savestate(%u) in home menu", save_index); + Emu.CallFromMainThread([save_index]() { boot_current_game_savestate(false, save_index); }); + return page_navigation::exit; + }); + } + else + { + break; + } } + apply_layout(); } } diff --git a/rpcs3/Emu/localized_string_id.h b/rpcs3/Emu/localized_string_id.h index 5ab9803591..399b45c437 100644 --- a/rpcs3/Emu/localized_string_id.h +++ b/rpcs3/Emu/localized_string_id.h @@ -274,6 +274,9 @@ enum class localized_string_id HOME_MENU_SAVESTATE_SAVE, HOME_MENU_SAVESTATE_AND_EXIT, HOME_MENU_RELOAD_SAVESTATE, + HOME_MENU_RELOAD_SECOND_SAVESTATE, + HOME_MENU_RELOAD_THIRD_SAVESTATE, + HOME_MENU_RELOAD_FOURTH_SAVESTATE, HOME_MENU_RECORDING, HOME_MENU_TROPHIES, HOME_MENU_TROPHY_LIST_TITLE, diff --git a/rpcs3/rpcs3qt/localized_emu.h b/rpcs3/rpcs3qt/localized_emu.h index bdc46c9f6b..7d4453a1bd 100644 --- a/rpcs3/rpcs3qt/localized_emu.h +++ b/rpcs3/rpcs3qt/localized_emu.h @@ -295,6 +295,9 @@ private: case localized_string_id::HOME_MENU_SAVESTATE_SAVE: return tr("Save Emulation State"); case localized_string_id::HOME_MENU_SAVESTATE_AND_EXIT: return tr("Save Emulation State And Exit"); case localized_string_id::HOME_MENU_RELOAD_SAVESTATE: return tr("Reload Last Emulation State"); + case localized_string_id::HOME_MENU_RELOAD_SECOND_SAVESTATE: return tr("Reload Second-To-Last Emulation State"); + case localized_string_id::HOME_MENU_RELOAD_THIRD_SAVESTATE: return tr("Reload Third-To-Last Emulation State"); + case localized_string_id::HOME_MENU_RELOAD_FOURTH_SAVESTATE: return tr("Reload Fourth-To-Last Emulation State"); case localized_string_id::HOME_MENU_RECORDING: return tr("Start/Stop Recording"); case localized_string_id::HOME_MENU_TROPHIES: return tr("Trophies"); case localized_string_id::HOME_MENU_TROPHY_LIST_TITLE: return tr("Trophy Progress: %0").arg(std::forward(args)...);