// Copyright 2018 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include "common/common_funcs.h" #include "common/common_types.h" #include "common/swap.h" #include "core/file_sys/vfs.h" namespace FileSys { // A localized entry containing strings within the NACP. // One for each language of type Language. struct LanguageEntry { std::array application_name; std::array developer_name; std::string GetApplicationName() const; std::string GetDeveloperName() const; }; static_assert(sizeof(LanguageEntry) == 0x300, "LanguageEntry has incorrect size."); // The raw file format of a NACP file. struct RawNACP { std::array language_entries; INSERT_PADDING_BYTES(0x38); u64_le title_id; INSERT_PADDING_BYTES(0x20); std::array version_string; u64_le dlc_base_title_id; u64_le title_id_2; INSERT_PADDING_BYTES(0x28); u64_le product_code; u64_le title_id_3; std::array title_id_array; INSERT_PADDING_BYTES(0x8); u64_le title_id_update; std::array bcat_passphrase; INSERT_PADDING_BYTES(0xEC0); }; static_assert(sizeof(RawNACP) == 0x4000, "RawNACP has incorrect size."); // A language on the NX. These are for names and icons. enum class Language : u8 { AmericanEnglish = 0, BritishEnglish = 1, Japanese = 2, French = 3, German = 4, LatinAmericanSpanish = 5, Spanish = 6, Italian = 7, Dutch = 8, CanadianFrench = 9, Portugese = 10, Russian = 11, Korean = 12, Taiwanese = 13, Chinese = 14, Default = 255, }; static constexpr std::array LANGUAGE_NAMES = { "AmericanEnglish", "BritishEnglish", "Japanese", "French", "German", "LatinAmericanSpanish", "Spanish", "Italian", "Dutch", "CanadianFrench", "Portugese", "Russian", "Korean", "Taiwanese", "Chinese"}; // A class representing the format used by NX metadata files, typically named Control.nacp. // These store application name, dev name, title id, and other miscellaneous data. class NACP { public: explicit NACP(VirtualFile file); const LanguageEntry& GetLanguageEntry(Language language = Language::Default) const; std::string GetApplicationName(Language language = Language::Default) const; std::string GetDeveloperName(Language language = Language::Default) const; u64 GetTitleId() const; std::string GetVersionString() const; private: std::unique_ptr raw; }; } // namespace FileSys