diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index 692993973c..855218db6b 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -60,6 +60,7 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { CheckSetting(iniFile, gameID, "MGS2AcidHack", &flags_.MGS2AcidHack); CheckSetting(iniFile, gameID, "SonicRivalsHack", &flags_.SonicRivalsHack); CheckSetting(iniFile, gameID, "BlockTransferAllowCreateFB", &flags_.BlockTransferAllowCreateFB); + CheckSetting(iniFile, gameID, "YugiohSaveFix", &flags_.YugiohSaveFix); } void Compatibility::CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, bool *flag) { diff --git a/Core/Compatibility.h b/Core/Compatibility.h index 97373b9418..0d74f828f6 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -60,6 +60,7 @@ struct CompatFlags { bool MGS2AcidHack; bool SonicRivalsHack; bool BlockTransferAllowCreateFB; + bool YugiohSaveFix; }; class IniFile; diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index 6b5b89d75f..1a9c994701 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -26,6 +26,7 @@ #include "Core/MIPS/MIPS.h" #include "Core/Reporting.h" #include "Core/Config.h" +#include "Core/System.h" #include "Core/HLE/sceKernel.h" #include "Core/HLE/sceKernelMemory.h" @@ -185,8 +186,14 @@ static int sceUtilitySavedataInitStart(u32 paramAddr) { if (currentDialogActive && currentDialogType != UTILITY_DIALOG_SAVEDATA) { - WARN_LOG(SCEUTILITY, "sceUtilitySavedataInitStart(%08x): wrong dialog type", paramAddr); - return SCE_ERROR_UTILITY_WRONG_TYPE; + if (PSP_CoreParameter().compat.flags().YugiohSaveFix) + { + WARN_LOG(SCEUTILITY, "Yugioh Savedata Correction"); + } + else { + WARN_LOG(SCEUTILITY, "sceUtilitySavedataInitStart(%08x): wrong dialog type", paramAddr); + return SCE_ERROR_UTILITY_WRONG_TYPE; + } } oldStatus = 100; diff --git a/assets/compat.ini b/assets/compat.ini index 895db36663..d64361c8eb 100644 --- a/assets/compat.ini +++ b/assets/compat.ini @@ -346,3 +346,41 @@ NPJH50686 = true # Digimon Adventures (JP, and English patches...) ULJS00078 = true # MotoGP ULUS10153 = true # MotoGP UCES00373 = true # MotoGP + +[YugiohSaveFix] +# The cause of Yu-gi-oh series 's bad save (cannot save) are load "save status" and use cwcheat, +# but the real cause still unknown. #7914 + +# Yu-Gi-Oh! Duel Monsters GX: Tag Force +ULJM05151 = true +ULES00600 = true +ULUS10136 = true + +# Yu-Gi-Oh! Duel Monsters GX: Tag Force 2 +ULUS10302 = true +ULJM05260 = true +ULES00925 = true +ULES00926 = true + +# Yu-Gi-Oh! Duel Monsters GX: Tag Force 3 +ULES01183 = true +ULJM05373 = true + +# Yu-Gi-Oh! 5D's Tag Force 4 +ULUS10481 = true +ULJM05479 = true +ULES01362 = true + +# Yu-Gi-Oh! 5D's Tag Force 5 +ULUS10555 = true +ULJM05734 = true + +# Yu-Gi-Oh! 5D's Tag Force 6 +ULJM-05940 = true +NPJH-50794 = true + +# Yu-Gi-Oh! 5D's Tag Force +ULJM05940 = true + +# Yu-Gi-Oh! ARC-V Tag Force Special +NPJH00142 = true