From 290efbc349a32f804a2384bb41aed01d9db1a16f Mon Sep 17 00:00:00 2001 From: shenweip <1037567878@qq.com> Date: Tue, 15 Sep 2020 21:48:55 +0800 Subject: [PATCH] Check whether there may be more than one save file names by mode. --- Core/Dialog/PSPSaveDialog.cpp | 3 +++ Core/Dialog/SavedataParam.cpp | 23 ++++++++++++++++++++++- Core/Dialog/SavedataParam.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Core/Dialog/PSPSaveDialog.cpp b/Core/Dialog/PSPSaveDialog.cpp index 1e58737c2a..23e1303780 100755 --- a/Core/Dialog/PSPSaveDialog.cpp +++ b/Core/Dialog/PSPSaveDialog.cpp @@ -129,6 +129,9 @@ int PSPSaveDialog::Init(int paramAddr) break; } + if(!param.wouldHasMultiSaveName(param.GetPspParam())) + currentSelectedSave = 0; + switch ((SceUtilitySavedataType)(u32)param.GetPspParam()->mode) { case SCE_UTILITY_SAVEDATA_TYPE_LOAD: diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index e038e87342..46940fb9db 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -1398,7 +1398,7 @@ int SavedataParam::SetPspParam(SceUtilitySavedataParam *param) saveDataListCount++; } - if (saveDataListCount > 0) + if (saveDataListCount > 0 && wouldHasMultiSaveName(param)) { hasMultipleFileName = true; saveDataList = new SaveFileInfo[saveDataListCount]; @@ -1724,6 +1724,27 @@ int SavedataParam::GetSaveNameIndex(SceUtilitySavedataParam* param) return 0; } +bool SavedataParam::wouldHasMultiSaveName(SceUtilitySavedataParam* param) { + switch ((SceUtilitySavedataType)(u32)param->mode) { + case SCE_UTILITY_SAVEDATA_TYPE_LOAD: + case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD: + case SCE_UTILITY_SAVEDATA_TYPE_SAVE: + case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE: + case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE: + case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA: + case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE: + case SCE_UTILITY_SAVEDATA_TYPE_READDATA: + case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE: + case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA: + case SCE_UTILITY_SAVEDATA_TYPE_ERASESECURE: + case SCE_UTILITY_SAVEDATA_TYPE_ERASE: + case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA: + return false; + default: + return true; + } +} + void SavedataParam::DoState(PointerWrap &p) { auto s = p.Section("SavedataParam", 1); diff --git a/Core/Dialog/SavedataParam.h b/Core/Dialog/SavedataParam.h index 857c69779b..ba5c442222 100644 --- a/Core/Dialog/SavedataParam.h +++ b/Core/Dialog/SavedataParam.h @@ -353,6 +353,8 @@ public: int GetLastEmptySave(); int GetSaveNameIndex(SceUtilitySavedataParam* param); + bool wouldHasMultiSaveName(SceUtilitySavedataParam* param); + void DoState(PointerWrap &p); private: