diff --git a/Core/KeyMap.cpp b/Core/KeyMap.cpp index 9f4c482853..0957fed33c 100644 --- a/Core/KeyMap.cpp +++ b/Core/KeyMap.cpp @@ -400,6 +400,7 @@ const KeyMap_IntStrPair psp_button_names[] = { {VIRTKEY_REWIND, "Rewind"}, {VIRTKEY_SAVE_STATE, "Save State"}, {VIRTKEY_LOAD_STATE, "Load State"}, + {VIRTKEY_PREVIOUS_SLOT, "Previous Slot"}, {VIRTKEY_NEXT_SLOT, "Next Slot"}, #if !defined(MOBILE_DEVICE) {VIRTKEY_TOGGLE_FULLSCREEN, "Toggle Fullscreen"}, diff --git a/Core/KeyMap.h b/Core/KeyMap.h index 7813ada3ec..41c2e1c403 100644 --- a/Core/KeyMap.h +++ b/Core/KeyMap.h @@ -71,6 +71,7 @@ enum { VIRTKEY_SPEED_ANALOG = 0x40000024, VIRTKEY_VR_CAMERA_ADJUST = 0x40000025, VIRTKEY_VR_CAMERA_RESET = 0x40000026, + VIRTKEY_PREVIOUS_SLOT = 0x40000027, VIRTKEY_LAST, VIRTKEY_COUNT = VIRTKEY_LAST - VIRTKEY_FIRST }; diff --git a/Core/SaveState.cpp b/Core/SaveState.cpp index 08f5052bdd..84ebef955d 100644 --- a/Core/SaveState.cpp +++ b/Core/SaveState.cpp @@ -525,6 +525,11 @@ namespace SaveState return g_Config.iCurrentStateSlot; } + void PrevSlot() + { + g_Config.iCurrentStateSlot = (g_Config.iCurrentStateSlot - 1 + NUM_SLOTS) % NUM_SLOTS; + } + void NextSlot() { g_Config.iCurrentStateSlot = (g_Config.iCurrentStateSlot + 1) % NUM_SLOTS; diff --git a/Core/SaveState.h b/Core/SaveState.h index 274052fede..864dcc8cec 100644 --- a/Core/SaveState.h +++ b/Core/SaveState.h @@ -43,6 +43,7 @@ namespace SaveState void Shutdown(); // Cycle through the 5 savestate slots + void PrevSlot(); void NextSlot(); void SaveSlot(const Path &gameFilename, int slot, Callback callback, void *cbUserData = 0); void LoadSlot(const Path &gameFilename, int slot, Callback callback, void *cbUserData = 0); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index be3c635859..623e606f1b 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -701,6 +701,12 @@ void EmuScreen::onVKey(int virtualKeyCode, bool down) { if (down) SaveState::LoadSlot(gamePath_, g_Config.iCurrentStateSlot, &AfterSaveStateAction); break; + case VIRTKEY_PREVIOUS_SLOT: + if (down) { + SaveState::PrevSlot(); + NativeMessageReceived("savestate_displayslot", ""); + } + break; case VIRTKEY_NEXT_SLOT: if (down) { SaveState::NextSlot(); diff --git a/UI/GamepadEmu.h b/UI/GamepadEmu.h index 3779088b7f..b2f62af3e8 100644 --- a/UI/GamepadEmu.h +++ b/UI/GamepadEmu.h @@ -307,6 +307,7 @@ namespace CustomKeyData { { ImageID::invalid(), VIRTKEY_REWIND }, { ImageID::invalid(), VIRTKEY_SAVE_STATE }, { ImageID::invalid(), VIRTKEY_LOAD_STATE }, + { ImageID::invalid(), VIRTKEY_PREVIOUS_SLOT }, { ImageID::invalid(), VIRTKEY_NEXT_SLOT }, #if !defined(MOBILE_DEVICE) { ImageID::invalid(), VIRTKEY_TOGGLE_FULLSCREEN }, @@ -356,6 +357,7 @@ namespace GestureKey { VIRTKEY_REWIND, VIRTKEY_SAVE_STATE, VIRTKEY_LOAD_STATE, + VIRTKEY_PREVIOUS_SLOT, VIRTKEY_NEXT_SLOT, VIRTKEY_TEXTURE_DUMP, VIRTKEY_TEXTURE_REPLACE,