mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
GCVolume: supports reading all opening.bnr information
DQT2: Game properties dialog contains info tab giving information about the selected iso.
This commit is contained in:
@ -27,9 +27,11 @@ public:
|
||||
std::string GetMakerID() const override;
|
||||
u16 GetRevision() const override;
|
||||
std::string GetInternalName() const override;
|
||||
std::map<ELanguage, std::string> GetNames(bool prefer_long) const override;
|
||||
std::map<ELanguage, std::string> GetShortNames() const override;
|
||||
std::map<ELanguage, std::string> GetLongNames() const override;
|
||||
std::map<ELanguage, std::string> GetShortMakers() const override;
|
||||
std::map<ELanguage, std::string> GetLongMakers() const override;
|
||||
std::map<ELanguage, std::string> GetDescriptions() const override;
|
||||
std::string GetCompany() const override;
|
||||
std::vector<u32> GetBanner(int* width, int* height) const override;
|
||||
u64 GetFSTSize() const override;
|
||||
std::string GetApploaderDate() const override;
|
||||
@ -42,21 +44,18 @@ public:
|
||||
u64 GetRawSize() const override;
|
||||
|
||||
private:
|
||||
bool LoadBannerFile() const;
|
||||
std::map<ELanguage, std::string> ReadMultiLanguageStrings(bool description,
|
||||
bool prefer_long = true) const;
|
||||
|
||||
static const int GC_BANNER_WIDTH = 96;
|
||||
static const int GC_BANNER_HEIGHT = 32;
|
||||
|
||||
// Banner Comment
|
||||
struct GCBannerComment
|
||||
struct GCBannerInformation
|
||||
{
|
||||
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.
|
||||
char short_name[32]; // Short game title shown in IPL menu
|
||||
char short_maker[32]; // Short developer, publisher names shown in IPL menu
|
||||
char long_name[64]; // Long game title shown in IPL game start screen
|
||||
char long_maker[64]; // Long developer, publisher names shown in IPL game
|
||||
// start screen
|
||||
char description[128]; // Game description shown in IPL game start screen in
|
||||
// two lines.
|
||||
};
|
||||
|
||||
struct GCBanner
|
||||
@ -64,22 +63,27 @@ private:
|
||||
u32 id; // "BNR1" for NTSC, "BNR2" for PAL
|
||||
u32 padding[7];
|
||||
u16 image[GC_BANNER_WIDTH * GC_BANNER_HEIGHT]; // RGB5A3 96x32 image
|
||||
GCBannerComment comment[6]; // Comments in six languages (only one for BNR1 type)
|
||||
GCBannerInformation information[6]; // information comes in six languages
|
||||
// (only one for BNR1 type)
|
||||
};
|
||||
|
||||
static const size_t BNR1_SIZE = sizeof(GCBanner) - sizeof(GCBannerComment) * 5;
|
||||
void LoadBannerFile() const;
|
||||
void ExtractBannerInformation(const GCBanner& banner_file, bool is_bnr1) const;
|
||||
|
||||
static const size_t BNR1_SIZE = sizeof(GCBanner) - sizeof(GCBannerInformation) * 5;
|
||||
static const size_t BNR2_SIZE = sizeof(GCBanner);
|
||||
|
||||
enum BannerFileType
|
||||
{
|
||||
BANNER_NOT_LOADED,
|
||||
BANNER_INVALID,
|
||||
BANNER_BNR1,
|
||||
BANNER_BNR2
|
||||
};
|
||||
mutable std::map<ELanguage, std::string> m_short_names;
|
||||
|
||||
mutable BannerFileType m_banner_file_type = BANNER_NOT_LOADED;
|
||||
mutable GCBanner m_banner_file;
|
||||
mutable std::map<ELanguage, std::string> m_long_names;
|
||||
mutable std::map<ELanguage, std::string> m_short_makers;
|
||||
mutable std::map<ELanguage, std::string> m_long_makers;
|
||||
mutable std::map<ELanguage, std::string> m_descriptions;
|
||||
|
||||
mutable bool m_banner_loaded = false;
|
||||
mutable std::vector<u32> m_image_buffer;
|
||||
mutable int m_image_height = 0;
|
||||
mutable int m_image_width = 0;
|
||||
|
||||
std::unique_ptr<IBlobReader> m_pReader;
|
||||
};
|
||||
|
Reference in New Issue
Block a user