Overlays/SaveStates: Add multi-slot support to controller menu
Some checks failed
Generate Translation Template / Generate Translation Template (push) Has been cancelled
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (/rpcs3/.ci/build-linux-aarch64.sh, gcc, rpcs3/rpcs3-ci-jammy-aarch64:1.7, ubuntu-24.04-arm) (push) Has been cancelled
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (/rpcs3/.ci/build-linux.sh, gcc, rpcs3/rpcs3-ci-jammy:1.7, ubuntu-24.04) (push) Has been cancelled
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1, rpcs3/rpcs3-binaries-linux-arm64, /rpcs3/.ci/build-linux-aarch64.sh, clang, rpcs3/rpcs3-ci-jammy-aarch64:1.7, ubuntu-24.04-arm) (push) Has been cancelled
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (d812f1254a1157c80fd402f94446310560f54e5f, rpcs3/rpcs3-binaries-linux, /rpcs3/.ci/build-linux.sh, clang, rpcs3/rpcs3-ci-jammy:1.7, ubuntu-24.04) (push) Has been cancelled
Build RPCS3 / RPCS3 Mac ${{ matrix.name }} (51ae32f468089a8169aaf1567de355ff4a3e0842, rpcs3/rpcs3-binaries-mac, .ci/build-mac.sh, Intel) (push) Has been cancelled
Build RPCS3 / RPCS3 Mac ${{ matrix.name }} (8e21bdbc40711a3fccd18fbf17b742348b0f4281, rpcs3/rpcs3-binaries-mac-arm64, .ci/build-mac-arm64.sh, Apple Silicon) (push) Has been cancelled
Build RPCS3 / RPCS3 Windows (push) Has been cancelled
Build RPCS3 / RPCS3 Windows Clang (win64, clang, clang64) (push) Has been cancelled
Build RPCS3 / RPCS3 FreeBSD (push) Has been cancelled

This commit is contained in:
Elad 2025-11-12 14:42:59 +02:00
parent 0bf9ee9fa5
commit e48ba283d8
3 changed files with 29 additions and 10 deletions

View file

@ -35,18 +35,31 @@ namespace rsx
return page_navigation::exit; return page_navigation::exit;
}); });
if (!suspend_mode && boot_current_game_savestate(true, 1)) { for (u32 save_index = 1; !suspend_mode && save_index <= 4; save_index++)
std::unique_ptr<overlay_element> reload_state = std::make_unique<home_menu_entry>( {
get_localized_string(localized_string_id::HOME_MENU_RELOAD_SAVESTATE)); if (boot_current_game_savestate(true, save_index))
add_item(reload_state, [](pad_button btn) -> page_navigation
{ {
if (btn != pad_button::cross) return page_navigation::stay; const localized_string_id str_id = static_cast<localized_string_id>(static_cast<usz>(localized_string_id::HOME_MENU_RELOAD_SAVESTATE) + (save_index - 1));
rsx_log.notice("User selected reload savestate in home menu"); std::unique_ptr<overlay_element> reload_state = std::make_unique<home_menu_entry>(get_localized_string(str_id));
Emu.CallFromMainThread([]() { boot_current_game_savestate(true, 1); });
return page_navigation::exit; 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(); apply_layout();
} }
} }

View file

@ -274,6 +274,9 @@ enum class localized_string_id
HOME_MENU_SAVESTATE_SAVE, HOME_MENU_SAVESTATE_SAVE,
HOME_MENU_SAVESTATE_AND_EXIT, HOME_MENU_SAVESTATE_AND_EXIT,
HOME_MENU_RELOAD_SAVESTATE, HOME_MENU_RELOAD_SAVESTATE,
HOME_MENU_RELOAD_SECOND_SAVESTATE,
HOME_MENU_RELOAD_THIRD_SAVESTATE,
HOME_MENU_RELOAD_FOURTH_SAVESTATE,
HOME_MENU_RECORDING, HOME_MENU_RECORDING,
HOME_MENU_TROPHIES, HOME_MENU_TROPHIES,
HOME_MENU_TROPHY_LIST_TITLE, HOME_MENU_TROPHY_LIST_TITLE,

View file

@ -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_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_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_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_RECORDING: return tr("Start/Stop Recording");
case localized_string_id::HOME_MENU_TROPHIES: return tr("Trophies"); 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>(args)...); case localized_string_id::HOME_MENU_TROPHY_LIST_TITLE: return tr("Trophy Progress: %0").arg(std::forward<Args>(args)...);