file_sys: Add support for the BOSS ext save data archive. (#7231)

This commit is contained in:
Steveice10 2023-12-03 14:02:23 -08:00 committed by GitHub
parent ea9f522c0c
commit 875f5eaad5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 36 additions and 17 deletions

View file

@ -349,14 +349,18 @@ void ArchiveManager::RegisterArchiveTypes() {
RegisterArchiveType(std::move(other_savedata_general_factory),
ArchiveIdCode::OtherSaveDataGeneral);
auto extsavedata_factory =
std::make_unique<FileSys::ArchiveFactory_ExtSaveData>(sdmc_directory, false);
auto extsavedata_factory = std::make_unique<FileSys::ArchiveFactory_ExtSaveData>(
sdmc_directory, FileSys::ExtSaveDataType::Normal);
RegisterArchiveType(std::move(extsavedata_factory), ArchiveIdCode::ExtSaveData);
auto sharedextsavedata_factory =
std::make_unique<FileSys::ArchiveFactory_ExtSaveData>(nand_directory, true);
auto sharedextsavedata_factory = std::make_unique<FileSys::ArchiveFactory_ExtSaveData>(
nand_directory, FileSys::ExtSaveDataType::Shared);
RegisterArchiveType(std::move(sharedextsavedata_factory), ArchiveIdCode::SharedExtSaveData);
auto bossextsavedata_factory = std::make_unique<FileSys::ArchiveFactory_ExtSaveData>(
sdmc_directory, FileSys::ExtSaveDataType::Boss);
RegisterArchiveType(std::move(bossextsavedata_factory), ArchiveIdCode::BossExtSaveData);
// Create the NCCH archive, basically a small variation of the RomFS archive
auto savedatacheck_factory = std::make_unique<FileSys::ArchiveFactory_NCCH>();
RegisterArchiveType(std::move(savedatacheck_factory), ArchiveIdCode::NCCH);

View file

@ -40,6 +40,7 @@ enum class ArchiveIdCode : u32 {
SystemSaveData = 0x00000008,
SDMC = 0x00000009,
SDMCWriteOnly = 0x0000000A,
BossExtSaveData = 0x12345678,
NCCH = 0x2345678A,
OtherSaveDataGeneral = 0x567890B2,
OtherSaveDataPermitted = 0x567890B4,

View file

@ -146,7 +146,8 @@ void Module::Interface::GetSystemTime(Kernel::HLERequestContext& ctx) {
static void WriteGameCoinData(GameCoin gamecoin_data) {
const std::string& nand_directory = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir);
FileSys::ArchiveFactory_ExtSaveData extdata_archive_factory(nand_directory, true);
FileSys::ArchiveFactory_ExtSaveData extdata_archive_factory(nand_directory,
FileSys::ExtSaveDataType::Shared);
FileSys::Path archive_path(ptm_shared_extdata_id);
auto archive_result = extdata_archive_factory.Open(archive_path, 0);
@ -179,7 +180,8 @@ static void WriteGameCoinData(GameCoin gamecoin_data) {
static GameCoin ReadGameCoinData() {
const std::string& nand_directory = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir);
FileSys::ArchiveFactory_ExtSaveData extdata_archive_factory(nand_directory, true);
FileSys::ArchiveFactory_ExtSaveData extdata_archive_factory(nand_directory,
FileSys::ExtSaveDataType::Shared);
FileSys::Path archive_path(ptm_shared_extdata_id);
auto archive_result = extdata_archive_factory.Open(archive_path, 0);
@ -209,7 +211,8 @@ Module::Module() {
// Open the SharedExtSaveData archive 0xF000000B and create the gamecoin.dat file if it doesn't
// exist
const std::string& nand_directory = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir);
FileSys::ArchiveFactory_ExtSaveData extdata_archive_factory(nand_directory, true);
FileSys::ArchiveFactory_ExtSaveData extdata_archive_factory(nand_directory,
FileSys::ExtSaveDataType::Shared);
const FileSys::Path archive_path(ptm_shared_extdata_id);
const auto archive_result = extdata_archive_factory.Open(archive_path, 0);
// If the archive didn't exist, write the default game coin file