diff --git a/Source/Core/DiscIO/BannerLoader.h b/Source/Core/DiscIO/BannerLoader.h index 74ed934654..c7dfdadefa 100644 --- a/Source/Core/DiscIO/BannerLoader.h +++ b/Source/Core/DiscIO/BannerLoader.h @@ -17,23 +17,29 @@ class IVolume; class IBannerLoader { - public: +public: + IBannerLoader() + : m_pBannerFile(nullptr) + , m_IsValid(false) + {} - IBannerLoader() - {} + virtual ~IBannerLoader() + {} + virtual std::vector GetBanner(int* pWidth, int* pHeight) = 0; - virtual ~IBannerLoader() - {} + virtual std::vector GetNames() = 0; + virtual std::string GetCompany() = 0; + virtual std::vector GetDescriptions() = 0; + bool IsValid() + { + return m_IsValid; + } - virtual bool IsValid() = 0; - - virtual std::vector GetBanner(int* pWidth, int* pHeight) = 0; - - virtual std::vector GetNames() = 0; - virtual std::string GetCompany() = 0; - virtual std::vector GetDescriptions() = 0; +protected: + bool m_IsValid; + u8* m_pBannerFile; }; IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume); diff --git a/Source/Core/DiscIO/BannerLoaderGC.cpp b/Source/Core/DiscIO/BannerLoaderGC.cpp index 5258eb66ab..09c675cb11 100644 --- a/Source/Core/DiscIO/BannerLoaderGC.cpp +++ b/Source/Core/DiscIO/BannerLoaderGC.cpp @@ -16,9 +16,7 @@ namespace DiscIO { CBannerLoaderGC::CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume* volume) - : m_pBannerFile(nullptr) - , m_IsValid(false) - , m_country(volume->GetCountry()) + : m_country(volume->GetCountry()) { // load the opening.bnr size_t FileSize = (size_t) _rFileSystem.GetFileSize("opening.bnr"); @@ -49,12 +47,6 @@ CBannerLoaderGC::~CBannerLoaderGC() } } - -bool CBannerLoaderGC::IsValid() -{ - return m_IsValid; -} - std::vector CBannerLoaderGC::GetBanner(int* pWidth, int* pHeight) { std::vector Buffer; diff --git a/Source/Core/DiscIO/BannerLoaderGC.h b/Source/Core/DiscIO/BannerLoaderGC.h index 64623f8202..94e261699c 100644 --- a/Source/Core/DiscIO/BannerLoaderGC.h +++ b/Source/Core/DiscIO/BannerLoaderGC.h @@ -22,70 +22,65 @@ class IFileSystem; class CBannerLoaderGC : public IBannerLoader { - public: - CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume* volume); - virtual ~CBannerLoaderGC(); +public: + CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume* volume); + virtual ~CBannerLoaderGC(); - virtual bool IsValid() override; + virtual std::vector GetBanner(int* pWidth, int* pHeight) override; - virtual std::vector GetBanner(int* pWidth, int* pHeight) override; + virtual std::vector GetNames() override; + virtual std::string GetCompany() override; + virtual std::vector GetDescriptions() override; - virtual std::vector GetNames() override; - virtual std::string GetCompany() override; - virtual std::vector GetDescriptions() override; +private: + enum + { + DVD_BANNER_WIDTH = 96, + DVD_BANNER_HEIGHT = 32 + }; - private: - enum - { - DVD_BANNER_WIDTH = 96, - DVD_BANNER_HEIGHT = 32 - }; + enum BANNER_TYPE + { + BANNER_UNKNOWN, + BANNER_BNR1, + BANNER_BNR2, + }; - enum BANNER_TYPE - { - BANNER_UNKNOWN, - BANNER_BNR1, - BANNER_BNR2, - }; + // Banner Comment + struct DVDBannerComment + { + char shortTitle[32]; // Short game title shown in IPL menu + char shortMaker[32]; // Short developer, publisher names shown in IPL menu + char longTitle[64]; // Long game title shown in IPL game start screen + char longMaker[64]; // Long developer, publisher names shown in IPL game start screen + char comment[128]; // Game description shown in IPL game start screen in two lines. + }; - // Banner Comment - struct DVDBannerComment - { - char shortTitle[32]; // Short game title shown in IPL menu - char shortMaker[32]; // Short developer, publisher names shown in IPL menu - char longTitle[64]; // Long game title shown in IPL game start screen - char longMaker[64]; // Long developer, publisher names shown in IPL game start screen - char comment[128]; // Game description shown in IPL game start screen in two lines. - }; + // "opening.bnr" file format for EU console + struct DVDBanner + { + u32 id; // 'BNR2' + u32 padding[7]; + u16 image[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT]; // RGB5A3 96x32 texture image + DVDBannerComment comment[6]; // Comments in six languages (only 1 for BNR1 type) + }; - // "opening.bnr" file format for EU console - struct DVDBanner - { - u32 id; // 'BNR2' - u32 padding[7]; - u16 image[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT]; // RGB5A3 96x32 texture image - DVDBannerComment comment[6]; // Comments in six languages (only 1 for BNR1 type) - }; + static const u32 BNR1_SIZE = sizeof(DVDBanner) - sizeof(DVDBannerComment) * 5; + static const u32 BNR2_SIZE = sizeof(DVDBanner); - static const u32 BNR1_SIZE = sizeof(DVDBanner) - sizeof(DVDBannerComment) * 5; - static const u32 BNR2_SIZE = sizeof(DVDBanner); + template + std::string GetDecodedString(const char (&data)[N]) + { + auto const string_decoder = CVolumeGC::GetStringDecoder(m_country); - template - std::string GetDecodedString(const char (&data)[N]) - { - auto const string_decoder = CVolumeGC::GetStringDecoder(m_country); + // strnlen to trim NULLs + return string_decoder(std::string(data, strnlen(data, sizeof(data)))); + } - // strnlen to trim NULLs - return string_decoder(std::string(data, strnlen(data, sizeof(data)))); - } + BANNER_TYPE m_BNRType; + BANNER_TYPE getBannerType(); - u8* m_pBannerFile; - bool m_IsValid; - BANNER_TYPE m_BNRType; - - BANNER_TYPE getBannerType(); - - DiscIO::IVolume::ECountry const m_country; + DiscIO::IVolume::ECountry const m_country; }; } // namespace diff --git a/Source/Core/DiscIO/BannerLoaderWii.cpp b/Source/Core/DiscIO/BannerLoaderWii.cpp index 338169f447..dc32765b3b 100644 --- a/Source/Core/DiscIO/BannerLoaderWii.cpp +++ b/Source/Core/DiscIO/BannerLoaderWii.cpp @@ -21,8 +21,6 @@ namespace DiscIO { CBannerLoaderWii::CBannerLoaderWii(DiscIO::IVolume *pVolume) - : m_pBannerFile(nullptr) - , m_IsValid(false) { u64 TitleID; pVolume->GetTitleID((u8*)&TitleID); @@ -95,11 +93,6 @@ CBannerLoaderWii::~CBannerLoaderWii() } } -bool CBannerLoaderWii::IsValid() -{ - return m_IsValid; -} - std::vector CBannerLoaderWii::GetBanner(int* pWidth, int* pHeight) { SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile; diff --git a/Source/Core/DiscIO/BannerLoaderWii.h b/Source/Core/DiscIO/BannerLoaderWii.h index f11416ecb6..1bbe077509 100644 --- a/Source/Core/DiscIO/BannerLoaderWii.h +++ b/Source/Core/DiscIO/BannerLoaderWii.h @@ -18,54 +18,46 @@ class IVolume; class CBannerLoaderWii : public IBannerLoader { - public: +public: + CBannerLoaderWii(DiscIO::IVolume *pVolume); - CBannerLoaderWii(DiscIO::IVolume *pVolume); + virtual ~CBannerLoaderWii(); - virtual ~CBannerLoaderWii(); + virtual std::vector GetBanner(int* pWidth, int* pHeight) override; - virtual bool IsValid() override; + virtual std::vector GetNames() override; + virtual std::string GetCompany() override; + virtual std::vector GetDescriptions() override; - virtual std::vector GetBanner(int* pWidth, int* pHeight) override; +private: + enum + { + TEXTURE_SIZE = 192 * 64 * 2, + ICON_SIZE = 48 * 48 * 2, + COMMENT_SIZE = 32 + }; - virtual std::vector GetNames() override; - virtual std::string GetCompany() override; - virtual std::vector GetDescriptions() override; + enum CommentIndex + { + NAME_IDX, + DESC_IDX + }; - private: + struct SWiiBanner + { + u32 ID; - enum - { - TEXTURE_SIZE = 192 * 64 * 2, - ICON_SIZE = 48 * 48 * 2, - COMMENT_SIZE = 32 - }; + u32 m_Flag; + u16 m_Speed; + u8 m_Unknown[22]; - enum CommentIndex - { - NAME_IDX, - DESC_IDX - }; + // Not null terminated! + u16 m_Comment[2][COMMENT_SIZE]; + u8 m_BannerTexture[TEXTURE_SIZE]; + u8 m_IconTexture[8][ICON_SIZE]; + }; - struct SWiiBanner - { - u32 ID; - - u32 m_Flag; - u16 m_Speed; - u8 m_Unknown[22]; - - // Not null terminated! - u16 m_Comment[2][COMMENT_SIZE]; - u8 m_BannerTexture[TEXTURE_SIZE]; - u8 m_IconTexture[8][ICON_SIZE]; - } ; - - u8* m_pBannerFile; - - bool m_IsValid; - - bool GetStringFromComments(const CommentIndex index, std::string& s); + bool GetStringFromComments(const CommentIndex index, std::string& s); }; } // namespace