mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-30 10:42:47 +01:00
file_sys: Implement system archive synthesizer for NgWord (806)
This commit is contained in:
parent
4838bc8ddc
commit
86ad1f8db6
5 changed files with 61 additions and 6 deletions
42
src/core/file_sys/system_archive/ng_word.cpp
Normal file
42
src/core/file_sys/system_archive/ng_word.cpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include "common/common_types.h"
|
||||||
|
#include "core/file_sys/system_archive/ng_word.h"
|
||||||
|
#include "core/file_sys/vfs_vector.h"
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive {
|
||||||
|
|
||||||
|
namespace NgWord1Data {
|
||||||
|
|
||||||
|
constexpr std::size_t NUMBER_WORD_TXT_FILES = 0x10;
|
||||||
|
|
||||||
|
// Should this archive replacement mysteriously not work on a future game, consider updating.
|
||||||
|
constexpr std::array<u8, 4> VERSION_DAT{0x0, 0x0, 0x0, 0x19}; // 5.1.0 System Version
|
||||||
|
|
||||||
|
constexpr std::array<u8, 30> WORD_TXT{
|
||||||
|
0xFE, 0xFF, 0x00, 0x5E, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x62, 0x00,
|
||||||
|
0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0A,
|
||||||
|
}; // "^verybadword$" in UTF-16
|
||||||
|
|
||||||
|
} // namespace NgWord1Data
|
||||||
|
|
||||||
|
VirtualDir NgWord1() {
|
||||||
|
std::vector<VirtualFile> files(NgWord1Data::NUMBER_WORD_TXT_FILES);
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < NgWord1Data::NUMBER_WORD_TXT_FILES; ++i) {
|
||||||
|
files[i] = std::make_shared<ArrayVfsFile<NgWord1Data::WORD_TXT.size()>>(
|
||||||
|
NgWord1Data::WORD_TXT, fmt::format("{}.txt", i));
|
||||||
|
}
|
||||||
|
|
||||||
|
files.push_back(std::make_shared<ArrayVfsFile<NgWord1Data::WORD_TXT.size()>>(
|
||||||
|
NgWord1Data::WORD_TXT, "common.txt"));
|
||||||
|
files.push_back(std::make_shared<ArrayVfsFile<NgWord1Data::VERSION_DAT.size()>>(
|
||||||
|
NgWord1Data::VERSION_DAT, "version.dat"));
|
||||||
|
|
||||||
|
return std::make_shared<VectorVfsDirectory>(files, std::vector<VirtualDir>{}, "data");
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive
|
13
src/core/file_sys/system_archive/ng_word.h
Normal file
13
src/core/file_sys/system_archive/ng_word.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "core/file_sys/vfs_types.h"
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive {
|
||||||
|
|
||||||
|
VirtualDir NgWord1();
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive
|
|
@ -21,7 +21,7 @@ struct SystemArchiveDescriptor {
|
||||||
SystemArchiveSupplier supplier;
|
SystemArchiveSupplier supplier;
|
||||||
};
|
};
|
||||||
|
|
||||||
const static std::array<SystemArchiveDescriptor, SYSTEM_ARCHIVE_COUNT> SYSTEM_ARCHIVES = {{
|
const std::array<SystemArchiveDescriptor, SYSTEM_ARCHIVE_COUNT> SYSTEM_ARCHIVES = {{
|
||||||
{0x0100000000000800, "CertStore", nullptr},
|
{0x0100000000000800, "CertStore", nullptr},
|
||||||
{0x0100000000000801, "ErrorMessage", nullptr},
|
{0x0100000000000801, "ErrorMessage", nullptr},
|
||||||
{0x0100000000000802, "MiiModel", nullptr},
|
{0x0100000000000802, "MiiModel", nullptr},
|
||||||
|
@ -50,7 +50,7 @@ const static std::array<SystemArchiveDescriptor, SYSTEM_ARCHIVE_COUNT> SYSTEM_AR
|
||||||
{0x0100000000000819, "BootImagePackage", nullptr},
|
{0x0100000000000819, "BootImagePackage", nullptr},
|
||||||
{0x010000000000081A, "BootImagePackageSafe", nullptr},
|
{0x010000000000081A, "BootImagePackageSafe", nullptr},
|
||||||
{0x010000000000081B, "BootImagePackageExFat", nullptr},
|
{0x010000000000081B, "BootImagePackageExFat", nullptr},
|
||||||
{0x010000000000081C, "BottImagePackageExFatSafe", nullptr},
|
{0x010000000000081C, "BootImagePackageExFatSafe", nullptr},
|
||||||
{0x010000000000081D, "FatalMessage", nullptr},
|
{0x010000000000081D, "FatalMessage", nullptr},
|
||||||
{0x010000000000081E, "ControllerIcon", nullptr},
|
{0x010000000000081E, "ControllerIcon", nullptr},
|
||||||
{0x010000000000081F, "PlatformConfigIcosa", nullptr},
|
{0x010000000000081F, "PlatformConfigIcosa", nullptr},
|
||||||
|
@ -64,11 +64,11 @@ const static std::array<SystemArchiveDescriptor, SYSTEM_ARCHIVE_COUNT> SYSTEM_AR
|
||||||
{0x0100000000000827, "ContentActionTable", nullptr},
|
{0x0100000000000827, "ContentActionTable", nullptr},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
VirtualFile SynthesizeSystemArchive(u64 title_id) {
|
VirtualFile SynthesizeSystemArchive(const u64 title_id) {
|
||||||
if (title_id < SYSTEM_ARCHIVES.front().title_id || title_id > SYSTEM_ARCHIVES.back().title_id)
|
if (title_id < SYSTEM_ARCHIVES.front().title_id || title_id > SYSTEM_ARCHIVES.back().title_id)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
const auto desc = SYSTEM_ARCHIVES[title_id - SYSTEM_ARCHIVE_BASE_TITLE_ID];
|
const auto& desc = SYSTEM_ARCHIVES[title_id - SYSTEM_ARCHIVE_BASE_TITLE_ID];
|
||||||
|
|
||||||
LOG_INFO(Service_FS, "Synthesizing system archive '{}' (0x{:016X}).", desc.name, desc.title_id);
|
LOG_INFO(Service_FS, "Synthesizing system archive '{}' (0x{:016X}).", desc.name, desc.title_id);
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstring>
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include "core/file_sys/vfs_vector.h"
|
#include "core/file_sys/vfs_vector.h"
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
#include "core/file_sys/vfs.h"
|
#include "core/file_sys/vfs.h"
|
||||||
|
|
||||||
namespace FileSys {
|
namespace FileSys {
|
||||||
|
@ -13,7 +14,7 @@ template <std::size_t size>
|
||||||
class ArrayVfsFile : public VfsFile {
|
class ArrayVfsFile : public VfsFile {
|
||||||
public:
|
public:
|
||||||
ArrayVfsFile(std::array<u8, size> data, std::string name = "", VirtualDir parent = nullptr)
|
ArrayVfsFile(std::array<u8, size> data, std::string name = "", VirtualDir parent = nullptr)
|
||||||
: data(std::move(data)), name(std::move(name)), parent(std::move(parent)) {}
|
: data(data), name(std::move(name)), parent(std::move(parent)) {}
|
||||||
|
|
||||||
std::string GetName() const override {
|
std::string GetName() const override {
|
||||||
return name;
|
return name;
|
||||||
|
|
Loading…
Reference in a new issue