Merge pull request #18428 from hrydgard/savestate-challenge-mode-fixes

Forgot some cases where I need to enable save (but not load) state in challenge mode, if the option is set
This commit is contained in:
Henrik Rydgård authored and GitHub committed 2023-11-16 20:39:21 +01:00
commit 74a13b0ca4
4 files changed
+29 -21

No files matched your search

+2 -2
View File
@@ -125,8 +125,8 @@ bool ChallengeModeActive() {
return IsLoggedIn() && rc_client_get_hardcore_enabled(g_rcClient);
}
bool WarnUserIfChallengeModeActive(const char *message) {
if (!ChallengeModeActive()) {
bool WarnUserIfChallengeModeActive(bool isSaveStateAction, const char *message) {
if (!ChallengeModeActive() || (isSaveStateAction && g_Config.bAchievementsSaveStateInChallengeMode)) {
return false;
}
+2 -1
View File
@@ -74,7 +74,8 @@ bool ChallengeModeActive();
// only for shortcut keys and commands. You should look up the message in I18NCat::ACHIEVEMENTS.
// If no message is specified, a standard "This feature is not available in Challenge Mode" message will be shown.
// Also returns true if challenge mode is active.
bool WarnUserIfChallengeModeActive(const char *message = nullptr);
// Specify isSaveAction so we can still permit saves (but not loads) in challenge mode if that option is enabled.
bool WarnUserIfChallengeModeActive(bool isSaveStateAction, const char *message = nullptr);
// The new API is so much nicer that we can use it directly instead of wrapping it. So let's expose the client.
// Will of course return nullptr if not active.
+8 -6
View File
@@ -655,7 +655,7 @@ void EmuScreen::onVKey(int virtualKeyCode, bool down) {
break;
case VIRTKEY_FRAME_ADVANCE:
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(false)) {
if (down) {
// If game is running, pause emulation immediately. Otherwise, advance a single frame.
if (Core_IsStepping()) {
@@ -713,7 +713,7 @@ void EmuScreen::onVKey(int virtualKeyCode, bool down) {
#endif
case VIRTKEY_REWIND:
if (down && !Achievements::WarnUserIfChallengeModeActive()) {
if (down && !Achievements::WarnUserIfChallengeModeActive(false)) {
if (SaveState::CanRewind()) {
SaveState::Rewind(&AfterSaveStateAction);
} else {
@@ -722,21 +722,23 @@ void EmuScreen::onVKey(int virtualKeyCode, bool down) {
}
break;
case VIRTKEY_SAVE_STATE:
if (down && !Achievements::WarnUserIfChallengeModeActive())
if (down && !Achievements::WarnUserIfChallengeModeActive(true)) {
SaveState::SaveSlot(gamePath_, g_Config.iCurrentStateSlot, &AfterSaveStateAction);
}
break;
case VIRTKEY_LOAD_STATE:
if (down && !Achievements::WarnUserIfChallengeModeActive())
if (down && !Achievements::WarnUserIfChallengeModeActive(false)) {
SaveState::LoadSlot(gamePath_, g_Config.iCurrentStateSlot, &AfterSaveStateAction);
}
break;
case VIRTKEY_PREVIOUS_SLOT:
if (down && !Achievements::WarnUserIfChallengeModeActive()) {
if (down && !Achievements::WarnUserIfChallengeModeActive(true)) {
SaveState::PrevSlot();
System_PostUIMessage(UIMessage::SAVESTATE_DISPLAY_SLOT);
}
break;
case VIRTKEY_NEXT_SLOT:
if (down && !Achievements::WarnUserIfChallengeModeActive()) {
if (down && !Achievements::WarnUserIfChallengeModeActive(true)) {
SaveState::NextSlot();
System_PostUIMessage(UIMessage::SAVESTATE_DISPLAY_SLOT);
}
+17 -12
View File
@@ -72,21 +72,26 @@ namespace MainWindow {
void SetIngameMenuItemStates(HMENU menu, const GlobalUIState state) {
bool menuEnableBool = state == UISTATE_INGAME || state == UISTATE_EXCEPTION;
bool loadStateEnableBool = menuEnableBool;
bool saveStateEnableBool = menuEnableBool;
if (Achievements::ChallengeModeActive()) {
saveStateEnableBool = false;
loadStateEnableBool = false;
if (!g_Config.bAchievementsSaveStateInChallengeMode) {
saveStateEnableBool = false;
}
}
UINT menuEnable = menuEnableBool ? MF_ENABLED : MF_GRAYED;
UINT loadStateEnable = loadStateEnableBool ? MF_ENABLED : MF_GRAYED;
UINT saveStateEnable = saveStateEnableBool ? MF_ENABLED : MF_GRAYED;
UINT menuInGameEnable = state == UISTATE_INGAME ? MF_ENABLED : MF_GRAYED;
UINT umdSwitchEnable = state == UISTATE_INGAME && getUMDReplacePermit() ? MF_ENABLED : MF_GRAYED;
EnableMenuItem(menu, ID_FILE_SAVESTATE_SLOT_MENU, saveStateEnable);
EnableMenuItem(menu, ID_FILE_SAVESTATEFILE, saveStateEnable);
EnableMenuItem(menu, ID_FILE_LOADSTATEFILE, saveStateEnable);
EnableMenuItem(menu, ID_FILE_LOADSTATEFILE, loadStateEnable);
EnableMenuItem(menu, ID_FILE_QUICKSAVESTATE, saveStateEnable);
EnableMenuItem(menu, ID_FILE_QUICKLOADSTATE, saveStateEnable);
EnableMenuItem(menu, ID_FILE_QUICKLOADSTATE, loadStateEnable);
EnableMenuItem(menu, ID_EMULATION_PAUSE, menuEnable);
EnableMenuItem(menu, ID_EMULATION_STOP, menuEnable);
EnableMenuItem(menu, ID_EMULATION_RESET, menuEnable);
@@ -513,7 +518,7 @@ namespace MainWindow {
}
break;
case ID_FILE_LOADSTATEFILE:
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(false)) {
if (W32Util::BrowseForFileName(true, hWnd, L"Load state", 0, L"Save States (*.ppst)\0*.ppst\0All files\0*.*\0\0", L"ppst", fn)) {
SetCursor(LoadCursor(0, IDC_WAIT));
SaveState::Load(Path(fn), -1, SaveStateActionFinished);
@@ -521,7 +526,7 @@ namespace MainWindow {
}
break;
case ID_FILE_SAVESTATEFILE:
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(true)) {
if (W32Util::BrowseForFileName(false, hWnd, L"Save state", 0, L"Save States (*.ppst)\0*.ppst\0All files\0*.*\0\0", L"ppst", fn)) {
SetCursor(LoadCursor(0, IDC_WAIT));
SaveState::Save(Path(fn), -1, SaveStateActionFinished);
@@ -531,7 +536,7 @@ namespace MainWindow {
case ID_FILE_SAVESTATE_NEXT_SLOT:
{
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(true)) {
SaveState::NextSlot();
System_PostUIMessage(UIMessage::SAVESTATE_DISPLAY_SLOT);
}
@@ -540,7 +545,7 @@ namespace MainWindow {
case ID_FILE_SAVESTATE_NEXT_SLOT_HC:
{
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(true)) {
if (!KeyMap::PspButtonHasMappings(VIRTKEY_NEXT_SLOT)) {
SaveState::NextSlot();
System_PostUIMessage(UIMessage::SAVESTATE_DISPLAY_SLOT);
@@ -554,13 +559,13 @@ namespace MainWindow {
case ID_FILE_SAVESTATE_SLOT_3:
case ID_FILE_SAVESTATE_SLOT_4:
case ID_FILE_SAVESTATE_SLOT_5:
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(true)) {
g_Config.iCurrentStateSlot = wmId - ID_FILE_SAVESTATE_SLOT_1;
}
break;
case ID_FILE_QUICKLOADSTATE:
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(false)) {
SetCursor(LoadCursor(0, IDC_WAIT));
SaveState::LoadSlot(PSP_CoreParameter().fileToStart, g_Config.iCurrentStateSlot, SaveStateActionFinished);
}
@@ -568,7 +573,7 @@ namespace MainWindow {
case ID_FILE_QUICKLOADSTATE_HC:
{
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(false)) {
if (!KeyMap::PspButtonHasMappings(VIRTKEY_LOAD_STATE)) {
SetCursor(LoadCursor(0, IDC_WAIT));
SaveState::LoadSlot(PSP_CoreParameter().fileToStart, g_Config.iCurrentStateSlot, SaveStateActionFinished);
@@ -578,7 +583,7 @@ namespace MainWindow {
}
case ID_FILE_QUICKSAVESTATE:
{
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(true)) {
SetCursor(LoadCursor(0, IDC_WAIT));
SaveState::SaveSlot(PSP_CoreParameter().fileToStart, g_Config.iCurrentStateSlot, SaveStateActionFinished);
}
@@ -587,7 +592,7 @@ namespace MainWindow {
case ID_FILE_QUICKSAVESTATE_HC:
{
if (!Achievements::WarnUserIfChallengeModeActive()) {
if (!Achievements::WarnUserIfChallengeModeActive(true)) {
if (!KeyMap::PspButtonHasMappings(VIRTKEY_SAVE_STATE))
{
SetCursor(LoadCursor(0, IDC_WAIT));