mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Always pick up the saveID by latest file time instead of the previously used one.
This fixes SRWAP & SRWMXP.
This commit is contained in:
parent
ae486f8e02
commit
dc25e6d223
3 changed files with 34 additions and 14 deletions
|
@ -54,9 +54,9 @@ int PSPSaveDialog::Init(int paramAddr)
|
|||
INFO_LOG(HLE,"sceUtilitySavedataInitStart(%08x)", paramAddr);
|
||||
INFO_LOG(HLE,"Mode: %i", param.GetPspParam()->mode);
|
||||
|
||||
currentSelectedSave = 0;
|
||||
yesnoChoice = 1;
|
||||
switch(param.GetPspParam()->mode)
|
||||
currentSelectedSave = param.GetLatestSave();
|
||||
switch (param.GetPspParam()->mode)
|
||||
{
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_LOAD:
|
||||
DEBUG_LOG(HLE, "Loading. Title: %s Save: %s File: %s", param.GetGameName(param.GetPspParam()).c_str(), param.GetSaveName(param.GetPspParam()).c_str(), param.GetFileName(param.GetPspParam()).c_str());
|
||||
|
@ -64,12 +64,12 @@ int PSPSaveDialog::Init(int paramAddr)
|
|||
display = DS_LOAD_CONFIRM;
|
||||
else
|
||||
display = DS_LOAD_NODATA;
|
||||
currentSelectedSave = param.GetSelectedSave();
|
||||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD:
|
||||
DEBUG_LOG(HLE, "Loading. Title: %s Save: %s File: %s", param.GetGameName(param.GetPspParam()).c_str(), param.GetSaveName(param.GetPspParam()).c_str(), param.GetFileName(param.GetPspParam()).c_str());
|
||||
display = DS_NONE;
|
||||
currentSelectedSave = param.GetSelectedSave();
|
||||
// Is this necessary?
|
||||
// currentSelectedSave = param.GetSelectedSave();
|
||||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_LISTLOAD:
|
||||
DEBUG_LOG(HLE, "Loading. Title: %s Save: %s File: %s", param.GetGameName(param.GetPspParam()).c_str(), param.GetGameName(param.GetPspParam()).c_str(), param.GetFileName(param.GetPspParam()).c_str());
|
||||
|
@ -87,12 +87,12 @@ int PSPSaveDialog::Init(int paramAddr)
|
|||
}
|
||||
else
|
||||
display = DS_SAVE_CONFIRM;
|
||||
currentSelectedSave = param.GetSelectedSave();
|
||||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE:
|
||||
DEBUG_LOG(HLE, "Saving. Title: %s Save: %s File: %s", param.GetGameName(param.GetPspParam()).c_str(), param.GetGameName(param.GetPspParam()).c_str(), param.GetFileName(param.GetPspParam()).c_str());
|
||||
display = DS_NONE;
|
||||
currentSelectedSave = param.GetSelectedSave();
|
||||
// Is this necessary?
|
||||
// currentSelectedSave = param.GetSelectedSave();
|
||||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_LISTSAVE:
|
||||
DEBUG_LOG(HLE, "Saving. Title: %s Save: %s File: %s", param.GetGameName(param.GetPspParam()).c_str(), param.GetGameName(param.GetPspParam()).c_str(), param.GetFileName(param.GetPspParam()).c_str());
|
||||
|
|
|
@ -985,22 +985,23 @@ int SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
|
|||
listEmptyFile = false;
|
||||
}
|
||||
|
||||
char (*saveNameListData)[20];
|
||||
typedef char (*SaveNameListData_t)[20];
|
||||
SaveNameListData_t saveNameListData;
|
||||
bool hasMultipleFileName = false;
|
||||
if (param->saveNameList != 0)
|
||||
{
|
||||
Clear();
|
||||
|
||||
saveNameListData = (char(*)[20])Memory::GetPointer(param->saveNameList);
|
||||
saveNameListData = (SaveNameListData_t)Memory::GetPointer(param->saveNameList);
|
||||
|
||||
// Get number of fileName in array
|
||||
saveDataListCount = 0;
|
||||
while(saveNameListData[saveDataListCount][0] != 0)
|
||||
while (saveNameListData[saveDataListCount][0] != 0)
|
||||
{
|
||||
saveDataListCount++;
|
||||
}
|
||||
|
||||
if(saveDataListCount > 0)
|
||||
if (saveDataListCount > 0)
|
||||
{
|
||||
hasMultipleFileName = true;
|
||||
saveDataList = new SaveFileInfo[saveDataListCount];
|
||||
|
@ -1011,7 +1012,7 @@ int SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
|
|||
{
|
||||
DEBUG_LOG(HLE,"Name : %s",saveNameListData[i]);
|
||||
|
||||
std::string fileDataPath = savePath+GetGameName(param)+saveNameListData[i]+"/"+param->fileName;
|
||||
std::string fileDataPath = savePath+GetGameName(param) + saveNameListData[i] + "/" + param->fileName;
|
||||
PSPFileInfo info = pspFileSystem.GetFileInfo(fileDataPath);
|
||||
if (info.exists)
|
||||
{
|
||||
|
@ -1033,7 +1034,7 @@ int SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
|
|||
saveNameListDataCount = realCount;
|
||||
}
|
||||
}
|
||||
if(!hasMultipleFileName) // Load info on only save
|
||||
if (!hasMultipleFileName) // Load info on only save
|
||||
{
|
||||
saveNameListData = 0;
|
||||
|
||||
|
@ -1044,7 +1045,7 @@ int SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
|
|||
// get and stock file info for each file
|
||||
DEBUG_LOG(HLE,"Name : %s",GetSaveName(param).c_str());
|
||||
|
||||
std::string fileDataPath = savePath+GetGameName(param)+GetSaveName(param)+"/"+param->fileName;
|
||||
std::string fileDataPath = savePath + GetGameName(param) + GetSaveName(param) + "/" + param->fileName;
|
||||
PSPFileInfo info = pspFileSystem.GetFileInfo(fileDataPath);
|
||||
if (info.exists)
|
||||
{
|
||||
|
@ -1187,7 +1188,8 @@ std::string SavedataParam::GetFilename(int idx)
|
|||
|
||||
int SavedataParam::GetSelectedSave()
|
||||
{
|
||||
return selectedSave;
|
||||
// The slot # of the same save on LOAD/SAVE lists can dismatch so this isn't right anyhow
|
||||
return selectedSave < saveNameListDataCount ? selectedSave : 0;
|
||||
}
|
||||
|
||||
void SavedataParam::SetSelectedSave(int idx)
|
||||
|
@ -1195,6 +1197,22 @@ void SavedataParam::SetSelectedSave(int idx)
|
|||
selectedSave = idx;
|
||||
}
|
||||
|
||||
int SavedataParam::GetLatestSave()
|
||||
{
|
||||
int idx = 0;
|
||||
time_t lastTime = 0;
|
||||
for (int i = 0; i < saveDataListCount; ++i)
|
||||
{
|
||||
time_t thisTime = mktime(&saveDataList[i].modif_time);
|
||||
if (lastTime < thisTime)
|
||||
{
|
||||
idx = i;
|
||||
lastTime = thisTime;
|
||||
}
|
||||
}
|
||||
return idx;
|
||||
}
|
||||
|
||||
void SavedataParam::DoState(PointerWrap &p)
|
||||
{
|
||||
// pspParam is handled in PSPSaveDialog.
|
||||
|
|
|
@ -223,6 +223,8 @@ public:
|
|||
int GetSelectedSave();
|
||||
void SetSelectedSave(int idx);
|
||||
|
||||
int GetLatestSave();
|
||||
|
||||
void DoState(PointerWrap &p);
|
||||
|
||||
private:
|
||||
|
|
Loading…
Add table
Reference in a new issue