mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-25 22:46:32 -04:00
27d27e6d94
* Add offsets for Wii USA R0/R2, JPN, and PAL Also fix an oopsie where l_pos and l_normal's offsets were swapped * Allow loading Wii discs * Change GameVersion::GcnJpn checks to isRegionJpn() * Change GameVersion::GcnPal checks to isRegionPal() * Add platformSelect and regionSelect templates, simplify a ton of code * Add *_get() macros to simplify REL loads * Actually accept Wii USA Rev. 2 discs * Show the Wii USA revision in prelaunch's disc status * l_normal isn't in Wii RELs, so I'll just hardcode it * Account for various BLO differences Fix crash when opening the map on Wii USA Rev 0 and Wii PAL * Use the streamed version of the file select music * Update language selection * Fix the d-pad/cross button text for Wii PAL Resizing panes that are already 120.0f wide is harmless, so I didn't bother with a GameVersion check * Fix brightness check discrepancy, use IF_DUSK_BLOCK macros when ideal * Update docs and the issue template
76 lines
1.8 KiB
C++
76 lines
1.8 KiB
C++
#pragma once
|
|
|
|
/**
|
|
* Functionality for switching game behavior based on the loaded game version (e.g. PAL/JPN, GC/Wii)
|
|
*/
|
|
namespace dusk::version {
|
|
enum class GameVersion : u8 {
|
|
WiiUsaRev0,
|
|
WiiPal,
|
|
WiiJpn,
|
|
GcnUsa,
|
|
GcnPal,
|
|
GcnJpn,
|
|
WiiUsa,
|
|
WiiKor,
|
|
};
|
|
|
|
bool isGcn();
|
|
bool isWii();
|
|
bool isJpnOrLessThanWiiJpn();
|
|
bool isPalOrAtLeastWiiR2();
|
|
|
|
bool isRegionPal();
|
|
bool isRegionJpn();
|
|
bool isRegionUsa();
|
|
|
|
GameVersion getGameVersion();
|
|
|
|
const DVDDiskID& getDiskID();
|
|
|
|
void init();
|
|
|
|
template<typename T>
|
|
struct VersionOption {
|
|
GameVersion mVersion;
|
|
T mValue;
|
|
|
|
constexpr VersionOption(GameVersion version, T value) : mVersion(version), mValue(value) {}
|
|
};
|
|
|
|
template<typename T>
|
|
const T& versionSelect(const std::initializer_list<VersionOption<T>> options) {
|
|
const auto version = getGameVersion();
|
|
for (const auto& opt : options) {
|
|
if (opt.mVersion == version) {
|
|
return opt.mValue;
|
|
}
|
|
}
|
|
|
|
// Unable to find value.
|
|
abort();
|
|
}
|
|
|
|
template<typename T>
|
|
const T& versionSelect(const std::initializer_list<VersionOption<T>> options, const T& defaultValue) {
|
|
const auto version = getGameVersion();
|
|
for (const auto& opt : options) {
|
|
if (opt.mVersion == version) {
|
|
return opt.mValue;
|
|
}
|
|
}
|
|
|
|
return defaultValue;
|
|
}
|
|
|
|
template<typename T>
|
|
T platformSelect(const T& gcn, const T& wii) {
|
|
return isGcn() ? gcn : wii;
|
|
}
|
|
|
|
template<typename T>
|
|
T regionSelect(const T& usa, const T& pal, const T& jpn) {
|
|
return isRegionUsa() ? usa : isRegionPal() ? pal : jpn;
|
|
}
|
|
} // namespace dusk::version
|