From 86ad1f8db65e9e52795c9601ea120c6fe0e76e29 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Thu, 22 Nov 2018 21:39:05 -0500 Subject: [PATCH] file_sys: Implement system archive synthesizer for NgWord (806) --- src/core/file_sys/system_archive/ng_word.cpp | 42 +++++++++++++++++++ src/core/file_sys/system_archive/ng_word.h | 13 ++++++ .../system_archive/system_archive.cpp | 8 ++-- src/core/file_sys/vfs_vector.cpp | 1 - src/core/file_sys/vfs_vector.h | 3 +- 5 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 src/core/file_sys/system_archive/ng_word.cpp create mode 100644 src/core/file_sys/system_archive/ng_word.h diff --git a/src/core/file_sys/system_archive/ng_word.cpp b/src/core/file_sys/system_archive/ng_word.cpp new file mode 100644 index 0000000000..d0acdbd494 --- /dev/null +++ b/src/core/file_sys/system_archive/ng_word.cpp @@ -0,0 +1,42 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#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 VERSION_DAT{0x0, 0x0, 0x0, 0x19}; // 5.1.0 System Version + +constexpr std::array 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 files(NgWord1Data::NUMBER_WORD_TXT_FILES); + + for (std::size_t i = 0; i < NgWord1Data::NUMBER_WORD_TXT_FILES; ++i) { + files[i] = std::make_shared>( + NgWord1Data::WORD_TXT, fmt::format("{}.txt", i)); + } + + files.push_back(std::make_shared>( + NgWord1Data::WORD_TXT, "common.txt")); + files.push_back(std::make_shared>( + NgWord1Data::VERSION_DAT, "version.dat")); + + return std::make_shared(files, std::vector{}, "data"); +} + +} // namespace FileSys::SystemArchive diff --git a/src/core/file_sys/system_archive/ng_word.h b/src/core/file_sys/system_archive/ng_word.h new file mode 100644 index 0000000000..f4bc673448 --- /dev/null +++ b/src/core/file_sys/system_archive/ng_word.h @@ -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 diff --git a/src/core/file_sys/system_archive/system_archive.cpp b/src/core/file_sys/system_archive/system_archive.cpp index 8451310a34..c9c40a07df 100644 --- a/src/core/file_sys/system_archive/system_archive.cpp +++ b/src/core/file_sys/system_archive/system_archive.cpp @@ -21,7 +21,7 @@ struct SystemArchiveDescriptor { SystemArchiveSupplier supplier; }; -const static std::array SYSTEM_ARCHIVES = {{ +const std::array SYSTEM_ARCHIVES = {{ {0x0100000000000800, "CertStore", nullptr}, {0x0100000000000801, "ErrorMessage", nullptr}, {0x0100000000000802, "MiiModel", nullptr}, @@ -50,7 +50,7 @@ const static std::array SYSTEM_AR {0x0100000000000819, "BootImagePackage", nullptr}, {0x010000000000081A, "BootImagePackageSafe", nullptr}, {0x010000000000081B, "BootImagePackageExFat", nullptr}, - {0x010000000000081C, "BottImagePackageExFatSafe", nullptr}, + {0x010000000000081C, "BootImagePackageExFatSafe", nullptr}, {0x010000000000081D, "FatalMessage", nullptr}, {0x010000000000081E, "ControllerIcon", nullptr}, {0x010000000000081F, "PlatformConfigIcosa", nullptr}, @@ -64,11 +64,11 @@ const static std::array SYSTEM_AR {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) 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); diff --git a/src/core/file_sys/vfs_vector.cpp b/src/core/file_sys/vfs_vector.cpp index 808f31e81c..515626658e 100644 --- a/src/core/file_sys/vfs_vector.cpp +++ b/src/core/file_sys/vfs_vector.cpp @@ -3,7 +3,6 @@ // Refer to the license.txt file included. #include -#include #include #include "core/file_sys/vfs_vector.h" diff --git a/src/core/file_sys/vfs_vector.h b/src/core/file_sys/vfs_vector.h index 7ed5123d2b..ac36cb2ee7 100644 --- a/src/core/file_sys/vfs_vector.h +++ b/src/core/file_sys/vfs_vector.h @@ -4,6 +4,7 @@ #pragma once +#include #include "core/file_sys/vfs.h" namespace FileSys { @@ -13,7 +14,7 @@ template class ArrayVfsFile : public VfsFile { public: ArrayVfsFile(std::array 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 { return name;