| |
| |
| |
|
|
| #pragma once |
|
|
| #include <array> |
| #include <span> |
| #include <vector> |
| #include "common/common_funcs.h" |
| #include "common/common_types.h" |
| #include "common/swap.h" |
|
|
| namespace Loader { |
|
|
| |
| |
| |
| |
| |
| bool IsValidSMDH(std::span<const u8> smdh_data); |
|
|
| |
| struct SMDH { |
| u32_le magic; |
| u16_le version; |
| INSERT_PADDING_BYTES(2); |
|
|
| struct Title { |
| std::array<char16_t, 0x40> short_title; |
| std::array<char16_t, 0x80> long_title; |
| std::array<char16_t, 0x40> publisher; |
| }; |
| std::array<Title, 16> titles; |
|
|
| std::array<u8, 16> ratings; |
| u32_le region_lockout; |
| u32_le match_maker_id; |
| u64_le match_maker_bit_id; |
| u32_le flags; |
| u16_le eula_version; |
| INSERT_PADDING_BYTES(2); |
| float_le banner_animation_frame; |
| u32_le cec_id; |
| INSERT_PADDING_BYTES(8); |
|
|
| std::array<u8, 0x480> small_icon; |
| std::array<u8, 0x1200> large_icon; |
|
|
| |
| enum class TitleLanguage { |
| Japanese = 0, |
| English = 1, |
| French = 2, |
| German = 3, |
| Italian = 4, |
| Spanish = 5, |
| SimplifiedChinese = 6, |
| Korean = 7, |
| Dutch = 8, |
| Portuguese = 9, |
| Russian = 10, |
| TraditionalChinese = 11 |
| }; |
|
|
| enum class GameRegion { |
| Japan = 0, |
| NorthAmerica = 1, |
| Europe = 2, |
| Australia = 3, |
| China = 4, |
| Korea = 5, |
| Taiwan = 6, |
| }; |
|
|
| enum Flags { |
| Visible = 1 << 0, |
| }; |
|
|
| |
| |
| |
| |
| |
| std::vector<u16> GetIcon(bool large) const; |
|
|
| |
| |
| |
| |
| |
| std::array<char16_t, 0x40> GetShortTitle(Loader::SMDH::TitleLanguage language) const; |
|
|
| |
| |
| |
| |
| |
| std::array<char16_t, 0x80> GetLongTitle(Loader::SMDH::TitleLanguage language) const; |
|
|
| std::vector<GameRegion> GetRegions() const; |
| }; |
| static_assert(sizeof(SMDH) == 0x36C0, "SMDH structure size is wrong"); |
|
|
| } |
|
|