#include #define NOD_ATHENA 1 #include "SpecBase.hpp" #include "DNAMP1/PAK.hpp" namespace Retro { struct SpecMP1 : SpecBase { std::map> m_worldPaks; bool checkFromGCNDisc(NOD::DiscGCN& disc, ExtractOption& opts) { if (memcmp(disc.getHeader().gameID, "GM8", 3)) return false; /* Iterate PAKs and build level options */ m_worldPaks.clear(); NOD::DiscBase::IPartition::Node& root = disc.getDataPartition()->getFSTRoot(); for (const NOD::DiscBase::IPartition::Node& child : root) { std::string name = child.getName(); std::transform(name.begin(), name.end(), name.begin(), tolower); if (!name.compare(0, 7, "metroid") && !name.compare(8, 4, ".pak")) { /* This is a world pak */ std::pair>::iterator,bool> res = m_worldPaks.emplace(std::make_pair(name, std::make_pair(child.getName(), DNAMP1::PAK()))); if (res.second) { NOD::AthenaPartReadStream rs(child.beginReadStream()); res.first->second.second.read(rs); } } } return true; } bool readFromGCNDisc(NOD::DiscGCN& disc) { } bool checkFromWiiDisc(NOD::DiscWii& disc, ExtractOption& opts) { if (memcmp(disc.getHeader().gameID, "R3M", 3)) return false; return true; } bool readFromWiiDisc(NOD::DiscWii& disc) { } bool checkFromProject(HECL::Database::Project& proj) { } bool readFromProject(HECL::Database::Project& proj) { } bool visitGameObjects(std::function) { } struct LevelSpec : public ILevelSpec { bool visitLevelObjects(std::function) { } struct AreaSpec : public IAreaSpec { bool visitAreaObjects(std::function) { } }; bool visitAreas(std::function) { } }; bool visitLevels(std::function) { } }; HECL::Database::DataSpecEntry SpecMP1 = { _S("MP1"), _S("Data specification for original Metroid Prime engine"), [](HECL::Database::DataSpecTool) -> HECL::Database::IDataSpec* {return new struct SpecMP1;} }; }