mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Core: Implement Wii NAND path redirects for Riivolution savegame patches.
This commit is contained in:
@ -14,6 +14,7 @@
|
||||
#include "Common/IOFile.h"
|
||||
#include "Common/StringUtil.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/IOS/FS/FileSystem.h"
|
||||
#include "Core/PowerPC/MMU.h"
|
||||
#include "DiscIO/DirectoryBlob.h"
|
||||
#include "DiscIO/RiivolutionParser.h"
|
||||
@ -174,6 +175,12 @@ FileDataLoaderHostFS::MakeContentSource(std::string_view external_relative_path,
|
||||
ContentFile{std::move(*path), external_offset}};
|
||||
}
|
||||
|
||||
std::optional<std::string>
|
||||
FileDataLoaderHostFS::ResolveSavegameRedirectPath(std::string_view external_relative_path)
|
||||
{
|
||||
return MakeAbsoluteFromRelative(external_relative_path);
|
||||
}
|
||||
|
||||
// 'before' and 'after' should be two copies of the same source
|
||||
// 'split_at' needs to be between the start and end of the source, may not match either boundary
|
||||
static void SplitAt(BuilderContentSource* before, BuilderContentSource* after, u64 split_at)
|
||||
@ -588,4 +595,21 @@ void ApplyPatchesToMemory(const std::vector<Patch>& patches)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<SavegameRedirect>
|
||||
ExtractSavegameRedirect(const std::vector<Patch>& riivolution_patches)
|
||||
{
|
||||
for (const auto& patch : riivolution_patches)
|
||||
{
|
||||
if (!patch.m_savegame_patches.empty())
|
||||
{
|
||||
const auto& save_patch = patch.m_savegame_patches[0];
|
||||
auto resolved = patch.m_file_data_loader->ResolveSavegameRedirectPath(save_patch.m_external);
|
||||
if (resolved)
|
||||
return SavegameRedirect{std::move(*resolved), save_patch.m_clone};
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
} // namespace DiscIO::Riivolution
|
||||
|
Reference in New Issue
Block a user