mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-11 00:40:16 +00:00
This makes the code cleaner and also leads to some user-visible changes: The wx game properties will no longer let the user select WAD languages that don't have any names. The Qt game list will now display names using the languages set in the configuration instead of always using English for PAL GC games and Japanese for WADs. If a WAD doesn't have a name in the user's preferred language, English is now selected as a fallback before Japanese.
88 lines
2.1 KiB
C++
88 lines
2.1 KiB
C++
// Copyright 2013 Dolphin Emulator Project
|
|
// Licensed under GPLv2
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <cstring>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
|
|
#include "DiscIO/BannerLoader.h"
|
|
#include "DiscIO/Volume.h"
|
|
#include "DiscIO/VolumeGC.h"
|
|
|
|
namespace DiscIO
|
|
{
|
|
|
|
class IFileSystem;
|
|
|
|
class CBannerLoaderGC
|
|
: public IBannerLoader
|
|
{
|
|
public:
|
|
CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume* volume);
|
|
virtual ~CBannerLoaderGC();
|
|
|
|
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight) override;
|
|
|
|
virtual std::map<IVolume::ELanguage, std::string> GetNames() override;
|
|
virtual std::string GetCompany() override;
|
|
virtual std::map<IVolume::ELanguage, std::string> GetDescriptions() override;
|
|
|
|
private:
|
|
enum
|
|
{
|
|
DVD_BANNER_WIDTH = 96,
|
|
DVD_BANNER_HEIGHT = 32
|
|
};
|
|
|
|
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.
|
|
};
|
|
|
|
// "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);
|
|
|
|
template <u32 N>
|
|
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))));
|
|
}
|
|
|
|
BANNER_TYPE m_BNRType;
|
|
BANNER_TYPE getBannerType();
|
|
|
|
DiscIO::IVolume::ECountry const m_country;
|
|
};
|
|
|
|
} // namespace
|