mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-24 22:34:54 +00:00
Add Triforce platform and preliminary boot.id parsing
This commit is contained in:
parent
494e2c05c2
commit
71f654cdc4
15 changed files with 41 additions and 4 deletions
BIN
Data/Sys/Resources/Platform_Triforce.png
Normal file
BIN
Data/Sys/Resources/Platform_Triforce.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
BIN
Data/Sys/Resources/Platform_Triforce@2x.png
Normal file
BIN
Data/Sys/Resources/Platform_Triforce@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
BIN
Data/Sys/Resources/Platform_Triforce@4x.png
Normal file
BIN
Data/Sys/Resources/Platform_Triforce@4x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.2 KiB |
|
@ -437,6 +437,7 @@ const Info<bool> MAIN_GAMELIST_LIST_WAD{{System::Main, "GameList", "ListWad"}, t
|
||||||
const Info<bool> MAIN_GAMELIST_LIST_ELF_DOL{{System::Main, "GameList", "ListElfDol"}, true};
|
const Info<bool> MAIN_GAMELIST_LIST_ELF_DOL{{System::Main, "GameList", "ListElfDol"}, true};
|
||||||
const Info<bool> MAIN_GAMELIST_LIST_WII{{System::Main, "GameList", "ListWii"}, true};
|
const Info<bool> MAIN_GAMELIST_LIST_WII{{System::Main, "GameList", "ListWii"}, true};
|
||||||
const Info<bool> MAIN_GAMELIST_LIST_GC{{System::Main, "GameList", "ListGC"}, true};
|
const Info<bool> MAIN_GAMELIST_LIST_GC{{System::Main, "GameList", "ListGC"}, true};
|
||||||
|
const Info<bool> MAIN_GAMELIST_LIST_TRI{{System::Main, "GameList", "ListTriforce"}, true};
|
||||||
const Info<bool> MAIN_GAMELIST_LIST_JPN{{System::Main, "GameList", "ListJap"}, true};
|
const Info<bool> MAIN_GAMELIST_LIST_JPN{{System::Main, "GameList", "ListJap"}, true};
|
||||||
const Info<bool> MAIN_GAMELIST_LIST_PAL{{System::Main, "GameList", "ListPal"}, true};
|
const Info<bool> MAIN_GAMELIST_LIST_PAL{{System::Main, "GameList", "ListPal"}, true};
|
||||||
const Info<bool> MAIN_GAMELIST_LIST_USA{{System::Main, "GameList", "ListUsa"}, true};
|
const Info<bool> MAIN_GAMELIST_LIST_USA{{System::Main, "GameList", "ListUsa"}, true};
|
||||||
|
|
|
@ -269,6 +269,7 @@ extern const Info<bool> MAIN_GAMELIST_LIST_WAD;
|
||||||
extern const Info<bool> MAIN_GAMELIST_LIST_ELF_DOL;
|
extern const Info<bool> MAIN_GAMELIST_LIST_ELF_DOL;
|
||||||
extern const Info<bool> MAIN_GAMELIST_LIST_WII;
|
extern const Info<bool> MAIN_GAMELIST_LIST_WII;
|
||||||
extern const Info<bool> MAIN_GAMELIST_LIST_GC;
|
extern const Info<bool> MAIN_GAMELIST_LIST_GC;
|
||||||
|
extern const Info<bool> MAIN_GAMELIST_LIST_TRI;
|
||||||
extern const Info<bool> MAIN_GAMELIST_LIST_JPN;
|
extern const Info<bool> MAIN_GAMELIST_LIST_JPN;
|
||||||
extern const Info<bool> MAIN_GAMELIST_LIST_PAL;
|
extern const Info<bool> MAIN_GAMELIST_LIST_PAL;
|
||||||
extern const Info<bool> MAIN_GAMELIST_LIST_USA;
|
extern const Info<bool> MAIN_GAMELIST_LIST_USA;
|
||||||
|
|
|
@ -139,7 +139,8 @@ std::string GetName(Region region, bool translate)
|
||||||
|
|
||||||
bool IsDisc(Platform volume_type)
|
bool IsDisc(Platform volume_type)
|
||||||
{
|
{
|
||||||
return volume_type == Platform::GameCubeDisc || volume_type == Platform::WiiDisc;
|
return volume_type == Platform::GameCubeDisc || volume_type == Platform::Triforce ||
|
||||||
|
volume_type == Platform::WiiDisc;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsWii(Platform volume_type)
|
bool IsWii(Platform volume_type)
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace DiscIO
|
||||||
enum class Platform
|
enum class Platform
|
||||||
{
|
{
|
||||||
GameCubeDisc = 0,
|
GameCubeDisc = 0,
|
||||||
|
Triforce,
|
||||||
WiiDisc,
|
WiiDisc,
|
||||||
WiiWAD,
|
WiiWAD,
|
||||||
ELFOrDOL,
|
ELFOrDOL,
|
||||||
|
|
|
@ -29,7 +29,8 @@
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
VolumeGC::VolumeGC(std::unique_ptr<BlobReader> reader) : m_reader(std::move(reader))
|
VolumeGC::VolumeGC(std::unique_ptr<BlobReader> reader)
|
||||||
|
: m_reader(std::move(reader)), m_is_triforce(false)
|
||||||
{
|
{
|
||||||
ASSERT(m_reader);
|
ASSERT(m_reader);
|
||||||
|
|
||||||
|
@ -39,6 +40,20 @@ VolumeGC::VolumeGC(std::unique_ptr<BlobReader> reader) : m_reader(std::move(read
|
||||||
};
|
};
|
||||||
|
|
||||||
m_converted_banner = [this] { return LoadBannerFile(); };
|
m_converted_banner = [this] { return LoadBannerFile(); };
|
||||||
|
|
||||||
|
constexpr u32 BTID_MAGIC = 0x44495442;
|
||||||
|
auto tmp_fs = GetFileSystem(PARTITION_NONE);
|
||||||
|
if (tmp_fs)
|
||||||
|
{
|
||||||
|
std::unique_ptr<FileInfo> file_info = tmp_fs->FindFileInfo("boot.id");
|
||||||
|
if (!file_info)
|
||||||
|
return;
|
||||||
|
u32 triforce_magic; // "BTID"
|
||||||
|
const u64 file_size = ReadFile(*this, PARTITION_NONE, file_info.get(),
|
||||||
|
reinterpret_cast<u8*>(&triforce_magic), sizeof(triforce_magic));
|
||||||
|
if (file_size >= 4 && triforce_magic == BTID_MAGIC)
|
||||||
|
m_is_triforce = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VolumeGC::~VolumeGC() = default;
|
VolumeGC::~VolumeGC() = default;
|
||||||
|
@ -139,7 +154,10 @@ const BlobReader& VolumeGC::GetBlobReader() const
|
||||||
|
|
||||||
Platform VolumeGC::GetVolumeType() const
|
Platform VolumeGC::GetVolumeType() const
|
||||||
{
|
{
|
||||||
return Platform::GameCubeDisc;
|
if (m_is_triforce)
|
||||||
|
return Platform::Triforce;
|
||||||
|
else
|
||||||
|
return Platform::GameCubeDisc;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VolumeGC::IsDatelDisc() const
|
bool VolumeGC::IsDatelDisc() const
|
||||||
|
|
|
@ -103,6 +103,8 @@ private:
|
||||||
Common::Lazy<std::unique_ptr<FileSystem>> m_file_system;
|
Common::Lazy<std::unique_ptr<FileSystem>> m_file_system;
|
||||||
|
|
||||||
std::unique_ptr<BlobReader> m_reader;
|
std::unique_ptr<BlobReader> m_reader;
|
||||||
|
|
||||||
|
bool m_is_triforce;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace DiscIO
|
} // namespace DiscIO
|
||||||
|
|
|
@ -402,6 +402,7 @@ void VolumeVerifier::Start()
|
||||||
|
|
||||||
m_is_tgc = m_volume.GetBlobType() == BlobType::TGC;
|
m_is_tgc = m_volume.GetBlobType() == BlobType::TGC;
|
||||||
m_is_datel = m_volume.IsDatelDisc();
|
m_is_datel = m_volume.IsDatelDisc();
|
||||||
|
m_is_triforce = m_volume.GetVolumeType() == Platform::Triforce;
|
||||||
m_is_not_retail = (m_volume.GetVolumeType() == Platform::WiiDisc && !m_volume.HasWiiHashes()) ||
|
m_is_not_retail = (m_volume.GetVolumeType() == Platform::WiiDisc && !m_volume.HasWiiHashes()) ||
|
||||||
IsDebugSigned();
|
IsDebugSigned();
|
||||||
|
|
||||||
|
@ -1373,6 +1374,13 @@ void VolumeVerifier::Finish()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_is_triforce)
|
||||||
|
{
|
||||||
|
m_result.summary_text =
|
||||||
|
Common::GetStringT("Dolphin is currently unable to verify Triforce games.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_result.redump.status == RedumpVerifier::Status::BadDump &&
|
if (m_result.redump.status == RedumpVerifier::Status::BadDump &&
|
||||||
highest_severity <= Severity::Low)
|
highest_severity <= Severity::Low)
|
||||||
{
|
{
|
||||||
|
|
|
@ -165,6 +165,7 @@ private:
|
||||||
Result m_result;
|
Result m_result;
|
||||||
bool m_is_tgc = false;
|
bool m_is_tgc = false;
|
||||||
bool m_is_datel = false;
|
bool m_is_datel = false;
|
||||||
|
bool m_is_triforce = false;
|
||||||
bool m_is_not_retail = false;
|
bool m_is_not_retail = false;
|
||||||
|
|
||||||
bool m_redump_verification;
|
bool m_redump_verification;
|
||||||
|
|
|
@ -93,6 +93,7 @@ QGroupBox* InfoWidget::CreateGameDetails()
|
||||||
const QString game_name = QString::fromStdString(m_game.GetInternalName());
|
const QString game_name = QString::fromStdString(m_game.GetInternalName());
|
||||||
|
|
||||||
bool is_disc_based = m_game.GetPlatform() == DiscIO::Platform::GameCubeDisc ||
|
bool is_disc_based = m_game.GetPlatform() == DiscIO::Platform::GameCubeDisc ||
|
||||||
|
m_game.GetPlatform() == DiscIO::Platform::Triforce ||
|
||||||
m_game.GetPlatform() == DiscIO::Platform::WiiDisc;
|
m_game.GetPlatform() == DiscIO::Platform::WiiDisc;
|
||||||
|
|
||||||
QLineEdit* internal_name =
|
QLineEdit* internal_name =
|
||||||
|
|
|
@ -303,6 +303,8 @@ bool GameListModel::ShouldDisplayGameListItem(int index) const
|
||||||
{
|
{
|
||||||
case DiscIO::Platform::GameCubeDisc:
|
case DiscIO::Platform::GameCubeDisc:
|
||||||
return Config::Get(Config::MAIN_GAMELIST_LIST_GC);
|
return Config::Get(Config::MAIN_GAMELIST_LIST_GC);
|
||||||
|
case DiscIO::Platform::Triforce:
|
||||||
|
return Config::Get(Config::MAIN_GAMELIST_LIST_TRI);
|
||||||
case DiscIO::Platform::WiiDisc:
|
case DiscIO::Platform::WiiDisc:
|
||||||
return Config::Get(Config::MAIN_GAMELIST_LIST_WII);
|
return Config::Get(Config::MAIN_GAMELIST_LIST_WII);
|
||||||
case DiscIO::Platform::WiiWAD:
|
case DiscIO::Platform::WiiWAD:
|
||||||
|
|
|
@ -726,6 +726,7 @@ void MenuBar::AddShowPlatformsMenu(QMenu* view_menu)
|
||||||
static const QMap<QString, const Config::Info<bool>*> platform_map{
|
static const QMap<QString, const Config::Info<bool>*> platform_map{
|
||||||
{tr("Show Wii"), &Config::MAIN_GAMELIST_LIST_WII},
|
{tr("Show Wii"), &Config::MAIN_GAMELIST_LIST_WII},
|
||||||
{tr("Show GameCube"), &Config::MAIN_GAMELIST_LIST_GC},
|
{tr("Show GameCube"), &Config::MAIN_GAMELIST_LIST_GC},
|
||||||
|
{tr("Show Triforce"), &Config::MAIN_GAMELIST_LIST_TRI},
|
||||||
{tr("Show WAD"), &Config::MAIN_GAMELIST_LIST_WAD},
|
{tr("Show WAD"), &Config::MAIN_GAMELIST_LIST_WAD},
|
||||||
{tr("Show ELF/DOL"), &Config::MAIN_GAMELIST_LIST_ELF_DOL}};
|
{tr("Show ELF/DOL"), &Config::MAIN_GAMELIST_LIST_ELF_DOL}};
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ void Resources::Init()
|
||||||
m_svg_supported = QImageReader::supportedImageFormats().contains("svg");
|
m_svg_supported = QImageReader::supportedImageFormats().contains("svg");
|
||||||
|
|
||||||
for (std::string_view platform :
|
for (std::string_view platform :
|
||||||
{"Platform_Gamecube", "Platform_Wii", "Platform_Wad", "Platform_File"})
|
{"Platform_Gamecube", "Platform_Triforce", "Platform_Wii", "Platform_Wad", "Platform_File"})
|
||||||
{
|
{
|
||||||
m_platforms.append(GetResourceIcon(platform));
|
m_platforms.append(GetResourceIcon(platform));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue