[Base] Move XdbfLocale to xbox.h as XLanguage, let STFS headers use it
Renamed to XLanguage because AFAIK locale on Xbox is a different concept involving countries, this enum only involves languages though.
This commit is contained in:
@@ -55,10 +55,10 @@ XdbfBlock XdbfWrapper::GetEntry(XdbfSection section, uint64_t id) const {
|
||||
return {0};
|
||||
}
|
||||
|
||||
std::string XdbfWrapper::GetStringTableEntry(XdbfLocale locale,
|
||||
std::string XdbfWrapper::GetStringTableEntry(XLanguage language,
|
||||
uint16_t string_id) const {
|
||||
auto language_block =
|
||||
GetEntry(XdbfSection::kStringTable, static_cast<uint64_t>(locale));
|
||||
GetEntry(XdbfSection::kStringTable, static_cast<uint64_t>(language));
|
||||
if (!language_block) {
|
||||
return "";
|
||||
}
|
||||
@@ -88,22 +88,22 @@ XdbfBlock XdbfGameData::icon() const {
|
||||
return GetEntry(XdbfSection::kImage, kXdbfIdTitle);
|
||||
}
|
||||
|
||||
XdbfLocale XdbfGameData::default_language() const {
|
||||
XLanguage XdbfGameData::default_language() const {
|
||||
auto block = GetEntry(XdbfSection::kMetadata, kXdbfIdXstc);
|
||||
if (!block.buffer) {
|
||||
return XdbfLocale::kEnglish;
|
||||
return XLanguage::kEnglish;
|
||||
}
|
||||
auto xstc = reinterpret_cast<const XdbfXstc*>(block.buffer);
|
||||
assert_true(xstc->magic == kXdbfMagicXstc);
|
||||
return static_cast<XdbfLocale>(static_cast<uint32_t>(xstc->default_language));
|
||||
return static_cast<XLanguage>(static_cast<uint32_t>(xstc->default_language));
|
||||
}
|
||||
|
||||
std::string XdbfGameData::title() const {
|
||||
return GetStringTableEntry(default_language(), kXdbfIdTitle);
|
||||
}
|
||||
|
||||
std::string XdbfGameData::title(XdbfLocale locale) const {
|
||||
return GetStringTableEntry(locale, kXdbfIdTitle);
|
||||
std::string XdbfGameData::title(XLanguage language) const {
|
||||
return GetStringTableEntry(language, kXdbfIdTitle);
|
||||
}
|
||||
|
||||
} // namespace util
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "xenia/base/memory.h"
|
||||
#include "xenia/xbox.h"
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
@@ -28,19 +29,6 @@ enum class XdbfSection : uint16_t {
|
||||
kStringTable = 0x0003,
|
||||
};
|
||||
|
||||
// Found by dumping the kSectionStringTable sections of various games:
|
||||
enum class XdbfLocale : uint32_t {
|
||||
kUnknown = 0,
|
||||
kEnglish = 1,
|
||||
kJapanese = 2,
|
||||
kGerman = 3,
|
||||
kFrench = 4,
|
||||
kSpanish = 5,
|
||||
kItalian = 6,
|
||||
kKorean = 7,
|
||||
kChinese = 8,
|
||||
};
|
||||
|
||||
struct XdbfBlock {
|
||||
const uint8_t* buffer;
|
||||
size_t size;
|
||||
@@ -63,7 +51,7 @@ class XdbfWrapper {
|
||||
|
||||
// Gets a string from the string table in the given language.
|
||||
// Returns the empty string if the entry is not found.
|
||||
std::string GetStringTableEntry(XdbfLocale locale, uint16_t string_id) const;
|
||||
std::string GetStringTableEntry(XLanguage language, uint16_t string_id) const;
|
||||
|
||||
protected:
|
||||
#pragma pack(push, 1)
|
||||
@@ -133,12 +121,12 @@ class XdbfGameData : public XdbfWrapper {
|
||||
XdbfBlock icon() const;
|
||||
|
||||
// The game's default language.
|
||||
XdbfLocale default_language() const;
|
||||
XLanguage default_language() const;
|
||||
|
||||
// The game's title in its default language.
|
||||
std::string title() const;
|
||||
|
||||
std::string title(XdbfLocale locale) const;
|
||||
std::string title(XLanguage language) const;
|
||||
};
|
||||
|
||||
} // namespace util
|
||||
|
||||
@@ -28,9 +28,6 @@ namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
constexpr uint32_t X_LANGUAGE_ENGLISH = 1;
|
||||
constexpr uint32_t X_LANGUAGE_JAPANESE = 2;
|
||||
|
||||
dword_result_t XamFeatureEnabled(dword_t unk) { return 0; }
|
||||
DECLARE_XAM_EXPORT1(XamFeatureEnabled, kNone, kStub);
|
||||
|
||||
@@ -208,19 +205,19 @@ dword_result_t XGetGameRegion() { return xeXGetGameRegion(); }
|
||||
DECLARE_XAM_EXPORT1(XGetGameRegion, kNone, kStub);
|
||||
|
||||
dword_result_t XGetLanguage() {
|
||||
uint32_t desired_language = X_LANGUAGE_ENGLISH;
|
||||
auto desired_language = XLanguage::kEnglish;
|
||||
|
||||
// Switch the language based on game region.
|
||||
// TODO(benvanik): pull from xex header.
|
||||
uint32_t game_region = XEX_REGION_NTSCU;
|
||||
if (game_region & XEX_REGION_NTSCU) {
|
||||
desired_language = X_LANGUAGE_ENGLISH;
|
||||
desired_language = XLanguage::kEnglish;
|
||||
} else if (game_region & XEX_REGION_NTSCJ) {
|
||||
desired_language = X_LANGUAGE_JAPANESE;
|
||||
desired_language = XLanguage::kJapanese;
|
||||
}
|
||||
// Add more overrides?
|
||||
|
||||
return desired_language;
|
||||
return uint32_t(desired_language);
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XGetLanguage, kNone, kImplemented);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user