mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-15 16:16:14 +00:00
Added support for building Wii de Asobu/Trilogy ISOs
This commit is contained in:
@@ -80,6 +80,7 @@ bool CGameProject::Serialize(IArchive& rArc)
|
||||
bool CGameProject::BuildISO(const TString& rkIsoPath, IProgressNotifier *pProgress)
|
||||
{
|
||||
ASSERT( FileUtil::IsValidPath(rkIsoPath, false) );
|
||||
ASSERT( !IsWiiDeAsobu() && !IsTrilogy() );
|
||||
|
||||
auto ProgressCallback = [&](float ProgressPercent, const nod::SystemString& rkInfoString, size_t)
|
||||
{
|
||||
@@ -101,6 +102,25 @@ bool CGameProject::BuildISO(const TString& rkIsoPath, IProgressNotifier *pProgre
|
||||
}
|
||||
}
|
||||
|
||||
bool CGameProject::MergeISO(const TString& rkIsoPath, nod::DiscWii *pOriginalIso, IProgressNotifier *pProgress)
|
||||
{
|
||||
ASSERT( FileUtil::IsValidPath(rkIsoPath, false) );
|
||||
ASSERT( IsWiiDeAsobu() || IsTrilogy() );
|
||||
ASSERT( pOriginalIso != nullptr );
|
||||
|
||||
auto ProgressCallback = [&](float ProgressPercent, const nod::SystemString& rkInfoString, size_t)
|
||||
{
|
||||
pProgress->Report((int) (ProgressPercent * 10000), 10000, TWideString(rkInfoString).ToUTF8());
|
||||
};
|
||||
|
||||
pProgress->SetTask(0, "Building " + rkIsoPath.GetFileName());
|
||||
|
||||
TWideString DiscRoot = DiscFilesystemRoot(false).ToUTF16();
|
||||
|
||||
nod::DiscMergerWii Merger(*rkIsoPath.ToUTF16(), *pOriginalIso, IsTrilogy(), ProgressCallback);
|
||||
return Merger.mergeFromDirectory(*DiscRoot) == nod::EBuildResult::Success;
|
||||
}
|
||||
|
||||
void CGameProject::GetWorldList(std::list<CAssetID>& rOut) const
|
||||
{
|
||||
for (u32 iPkg = 0; iPkg < mPackages.size(); iPkg++)
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#include <Common/types.h>
|
||||
#include <Common/FileIO/CFileLock.h>
|
||||
|
||||
namespace nod { class DiscWii; }
|
||||
|
||||
class CGameProject
|
||||
{
|
||||
TString mProjectName;
|
||||
@@ -56,9 +58,11 @@ class CGameProject
|
||||
public:
|
||||
~CGameProject();
|
||||
|
||||
|
||||
bool Save();
|
||||
bool Serialize(IArchive& rArc);
|
||||
bool BuildISO(const TString& rkIsoPath, IProgressNotifier *pProgress);
|
||||
bool MergeISO(const TString& rkIsoPath, nod::DiscWii *pOriginalIso, IProgressNotifier *pProgress);
|
||||
void GetWorldList(std::list<CAssetID>& rOut) const;
|
||||
CAssetID FindNamedResource(const TString& rkName) const;
|
||||
CPackage* FindPackage(const TString& rkName) const;
|
||||
@@ -100,7 +104,7 @@ public:
|
||||
inline float BuildVersion() const { return mBuildVersion; }
|
||||
inline bool IsWiiBuild() const { return mBuildVersion >= 3.f; }
|
||||
inline bool IsTrilogy() const { return mGame <= eCorruption && mBuildVersion >= 3.593f; }
|
||||
inline bool IsWiiDeAsobu() const { return mGame < eCorruption && mBuildVersion >= 3.f && mBuildVersion < 3.593f; }
|
||||
inline bool IsWiiDeAsobu() const { return mGame <= eCorruption && mBuildVersion >= 3.f && mBuildVersion < 3.593f; }
|
||||
};
|
||||
|
||||
#endif // CGAMEPROJECT_H
|
||||
|
||||
Reference in New Issue
Block a user