mirror of https://github.com/AxioDL/metaforce.git
fixed standalone game detection
This commit is contained in:
parent
31f77497fd
commit
91f5236109
|
@ -10,35 +10,18 @@ bool SpecBase::canExtract(const ExtractPassInfo& info, std::vector<ExtractReport
|
||||||
bool isWii;
|
bool isWii;
|
||||||
std::unique_ptr<NOD::DiscBase> disc = NOD::OpenDiscFromImage(info.srcpath.c_str(), isWii);
|
std::unique_ptr<NOD::DiscBase> disc = NOD::OpenDiscFromImage(info.srcpath.c_str(), isWii);
|
||||||
if (!disc)
|
if (!disc)
|
||||||
{
|
|
||||||
LogModule.report(LogVisor::Error, _S("'%s' not a valid Nintendo disc image"), info.srcpath.c_str());
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
const char* gameID = disc->getHeader().gameID;
|
const char* gameID = disc->getHeader().gameID;
|
||||||
|
|
||||||
bool valid = false;
|
|
||||||
bool standalone = true;
|
bool standalone = true;
|
||||||
if (isWii)
|
if (isWii)
|
||||||
{
|
{
|
||||||
if (!memcmp(gameID, "R3M", 3))
|
if (!memcmp(gameID, "R3M", 3))
|
||||||
{
|
|
||||||
valid = true;
|
|
||||||
standalone = false;
|
standalone = false;
|
||||||
}
|
|
||||||
else if (!memcmp(gameID, "R3IJ01", 6))
|
|
||||||
valid = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!memcmp(gameID, "GM8", 3))
|
|
||||||
valid = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!valid)
|
if (standalone && !checkStandaloneID(gameID))
|
||||||
{
|
|
||||||
LogModule.report(LogVisor::Error, "%.6s (%s) is not supported", gameID, disc->getHeader().gameTitle);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
char region = disc->getHeader().gameID[3];
|
char region = disc->getHeader().gameID[3];
|
||||||
static const HECL::SystemString regNONE = _S("");
|
static const HECL::SystemString regNONE = _S("");
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct SpecBase : HECL::Database::IDataSpec
|
||||||
std::unordered_set<HECL::ProjectPath>& implicitsOut);
|
std::unordered_set<HECL::ProjectPath>& implicitsOut);
|
||||||
void doPackage(const HECL::Database::Project& project, const PackagePassInfo& info);
|
void doPackage(const HECL::Database::Project& project, const PackagePassInfo& info);
|
||||||
|
|
||||||
|
virtual bool checkStandaloneID(const char* id) const=0;
|
||||||
virtual bool checkFromStandaloneDisc(NOD::DiscBase& disc,
|
virtual bool checkFromStandaloneDisc(NOD::DiscBase& disc,
|
||||||
const HECL::SystemString& regstr,
|
const HECL::SystemString& regstr,
|
||||||
const std::vector<HECL::SystemString>& args,
|
const std::vector<HECL::SystemString>& args,
|
||||||
|
|
|
@ -11,6 +11,13 @@ namespace Retro
|
||||||
|
|
||||||
struct SpecMP1 : SpecBase
|
struct SpecMP1 : SpecBase
|
||||||
{
|
{
|
||||||
|
bool checkStandaloneID(const char* id) const
|
||||||
|
{
|
||||||
|
if (!memcmp(id, "GM8", 3))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
struct DiscPAK
|
struct DiscPAK
|
||||||
{
|
{
|
||||||
const NOD::DiscBase::IPartition::Node& node;
|
const NOD::DiscBase::IPartition::Node& node;
|
||||||
|
@ -133,7 +140,8 @@ struct SpecMP1 : SpecBase
|
||||||
rep.desc = _S("Metroid Prime ") + regstr;
|
rep.desc = _S("Metroid Prime ") + regstr;
|
||||||
if (buildInfo)
|
if (buildInfo)
|
||||||
{
|
{
|
||||||
HECL::SystemStringView buildView(buildInfo);
|
std::string buildStr(buildInfo);
|
||||||
|
HECL::SystemStringView buildView(buildStr);
|
||||||
rep.desc += _S(" (") + buildView.sys_str() + _S(")");
|
rep.desc += _S(" (") + buildView.sys_str() + _S(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,13 @@ namespace Retro
|
||||||
|
|
||||||
struct SpecMP2 : SpecBase
|
struct SpecMP2 : SpecBase
|
||||||
{
|
{
|
||||||
|
bool checkStandaloneID(const char* id) const
|
||||||
|
{
|
||||||
|
if (!memcmp(id, "G2M", 3))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
struct DiscPAK
|
struct DiscPAK
|
||||||
{
|
{
|
||||||
const NOD::DiscBase::IPartition::Node& node;
|
const NOD::DiscBase::IPartition::Node& node;
|
||||||
|
@ -133,7 +140,8 @@ struct SpecMP2 : SpecBase
|
||||||
rep.desc = _S("Metroid Prime 2 ") + regstr;
|
rep.desc = _S("Metroid Prime 2 ") + regstr;
|
||||||
if (buildInfo)
|
if (buildInfo)
|
||||||
{
|
{
|
||||||
HECL::SystemStringView buildView(buildInfo);
|
std::string buildStr(buildInfo);
|
||||||
|
HECL::SystemStringView buildView(buildStr);
|
||||||
rep.desc += _S(" (") + buildView.sys_str() + _S(")");
|
rep.desc += _S(" (") + buildView.sys_str() + _S(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,13 @@ namespace Retro
|
||||||
|
|
||||||
struct SpecMP3 : SpecBase
|
struct SpecMP3 : SpecBase
|
||||||
{
|
{
|
||||||
|
bool checkStandaloneID(const char* id) const
|
||||||
|
{
|
||||||
|
if (!memcmp(id, "RM3", 3))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
struct DiscPAK
|
struct DiscPAK
|
||||||
{
|
{
|
||||||
const NOD::DiscBase::IPartition::Node& node;
|
const NOD::DiscBase::IPartition::Node& node;
|
||||||
|
@ -147,7 +154,8 @@ struct SpecMP3 : SpecBase
|
||||||
rep.desc = _S("Metroid Prime 3 ") + regstr;
|
rep.desc = _S("Metroid Prime 3 ") + regstr;
|
||||||
if (buildInfo)
|
if (buildInfo)
|
||||||
{
|
{
|
||||||
HECL::SystemStringView buildView(buildInfo);
|
std::string buildStr(buildInfo);
|
||||||
|
HECL::SystemStringView buildView(buildStr);
|
||||||
rep.desc += _S(" (") + buildView.sys_str() + _S(")");
|
rep.desc += _S(" (") + buildView.sys_str() + _S(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue