From 920742d41817688b1c15fb54f87c337ec7a7c91f Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Fri, 5 Jul 2019 18:51:41 -0400 Subject: system_archive: Synthesize shared fonts system archives --- src/core/file_sys/system_archive/shared_font.cpp | 78 ++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/core/file_sys/system_archive/shared_font.cpp (limited to 'src/core/file_sys/system_archive/shared_font.cpp') diff --git a/src/core/file_sys/system_archive/shared_font.cpp b/src/core/file_sys/system_archive/shared_font.cpp new file mode 100644 index 000000000..2c05eb42e --- /dev/null +++ b/src/core/file_sys/system_archive/shared_font.cpp @@ -0,0 +1,78 @@ +// Copyright 2019 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/file_sys/system_archive/data/font_chinese_simplified.h" +#include "core/file_sys/system_archive/data/font_chinese_traditional.h" +#include "core/file_sys/system_archive/data/font_extended_chinese_simplified.h" +#include "core/file_sys/system_archive/data/font_korean.h" +#include "core/file_sys/system_archive/data/font_nintendo_extended.h" +#include "core/file_sys/system_archive/data/font_standard.h" +#include "core/file_sys/system_archive/shared_font.h" +#include "core/file_sys/vfs_vector.h" +#include "core/hle/service/ns/pl_u.h" + +namespace FileSys::SystemArchive { + +namespace { + +template +VirtualFile PackBFTTF(const std::array& data, const std::string& name) { + std::vector vec(Size / sizeof(u32)); + std::memcpy(vec.data(), data.data(), vec.size() * sizeof(u32)); + + std::vector bfttf(Size + sizeof(u64)); + + u64 offset = 0; + Service::NS::EncryptSharedFont(vec, bfttf, offset); + return std::make_shared(std::move(bfttf), name); +} + +} // Anonymous namespace + +VirtualDir FontNintendoExtension() { + return std::make_shared( + std::vector{ + PackBFTTF(SharedFontData::FONT_NINTENDO_EXTENDED, "nintendo_ext_003.bfttf"), + PackBFTTF(SharedFontData::FONT_NINTENDO_EXTENDED, "nintendo_ext2_003.bfttf"), + }, + std::vector{}); +} + +VirtualDir FontStandard() { + return std::make_shared( + std::vector{ + PackBFTTF(SharedFontData::FONT_STANDARD, "nintendo_udsg-r_std_003.bfttf"), + }, + std::vector{}); +} + +VirtualDir FontKorean() { + return std::make_shared( + std::vector{ + PackBFTTF(SharedFontData::FONT_KOREAN, "nintendo_udsg-r_ko_003.bfttf"), + }, + std::vector{}); +} + +VirtualDir FontChineseTraditional() { + return std::make_shared( + std::vector{ + PackBFTTF(SharedFontData::FONT_CHINESE_TRADITIONAL, + "nintendo_udjxh-db_zh-tw_003.bfttf"), + }, + std::vector{}); +} + +VirtualDir FontChineseSimple() { + return std::make_shared( + std::vector{ + PackBFTTF(SharedFontData::FONT_CHINESE_SIMPLIFIED, + "nintendo_udsg-r_org_zh-cn_003.bfttf"), + PackBFTTF(SharedFontData::FONT_EXTENDED_CHINESE_SIMPLIFIED, + "nintendo_udsg-r_ext_zh-cn_003.bfttf"), + }, + std::vector{}); +} + +} // namespace FileSys::SystemArchive -- cgit v1.2.3