diff options
| author | C <f1ana@users.noreply.github.com> | 2026-10-21 19:07:36 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-21 19:07:36 -0400 |
| commit | 4451710b716ca4e60fbf072b6532a81927b2bf73 (patch) | |
| tree | df0c39ccb806102871407bcdd158eef247c08af1 | |
| parent | f0599f96f8d442f26d0fa1c5cedafddacd56633f (diff) | |
[Bugfix] Older saves cannot be read (#7434)
| -rw-r--r-- | soh/soh/SaveManager.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 5b55b033b..53825bb61 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -705,8 +705,10 @@ void SaveManager::StartupCheckAndInitMeta(int fileNum) { } fileMetaInfo[fileNum].equipment = baseBlock["inventory"]["equipment"]; fileMetaInfo[fileNum].upgrades = baseBlock["inventory"]["upgrades"]; - fileMetaInfo[fileNum].isMagicAcquired = baseBlock["isMagicAcquired"]; - fileMetaInfo[fileNum].isDoubleMagicAcquired = baseBlock["isDoubleMagicAcquired"]; + // saves before 5.1.0 called these magicAcquired and doubleMagic + fileMetaInfo[fileNum].isMagicAcquired = baseBlock.value("isMagicAcquired", baseBlock.value("magicAcquired", 0)); + fileMetaInfo[fileNum].isDoubleMagicAcquired = + baseBlock.value("isDoubleMagicAcquired", baseBlock.value("doubleMagic", 0)); fileMetaInfo[fileNum].rupees = baseBlock["rupees"]; fileMetaInfo[fileNum].gsTokens = baseBlock["inventory"]["gsTokens"]; // base version 1 and 2 called this doubleDefense @@ -723,7 +725,8 @@ void SaveManager::StartupCheckAndInitMeta(int fileNum) { fileMetaInfo[fileNum].health = baseBlock["health"]; // isMasterQuest arrived in base version 2 - bool isMasterQuest = baseBlock.value("isMasterQuest", false); + // older saves store this as a number rather than a bool + bool isMasterQuest = baseBlock.value("isMasterQuest", 0) != 0; fileMetaInfo[fileNum].requiresOriginal = !isMasterQuest; fileMetaInfo[fileNum].requiresMasterQuest = isMasterQuest; @@ -756,7 +759,12 @@ void SaveManager::StartupCheckAndInitMeta(int fileNum) { fileMetaInfo[fileNum].requiresOriginal = randoBlock["masterQuestDungeonCount"] < 12; } - nlohmann::json& statsBlock = sections["sohStats"]["data"]; + // sohStats didn't exist in older saves + nlohmann::json statsBlock = nlohmann::json::object(); + if (sections.contains("sohStats") && sections["sohStats"].contains("data") && + sections["sohStats"]["data"].is_object()) { + statsBlock = sections["sohStats"]["data"]; + } fileMetaInfo[fileNum].buildVersionMajor = statsBlock.value("buildVersionMajor", 0); fileMetaInfo[fileNum].buildVersionMinor = statsBlock.value("buildVersionMinor", 0); fileMetaInfo[fileNum].buildVersionPatch = statsBlock.value("buildVersionPatch", 0); |
