Fixed CHAR files failing to load

This commit is contained in:
parax0
2016-06-29 23:23:49 -06:00
parent f967519a77
commit 2f2ec13ced
7 changed files with 66 additions and 34 deletions

View File

@@ -165,7 +165,7 @@ REGISTER_RESOURCE_TYPE(ATBL, eAudioLookupTable, ePrimeDemo, eCorruption)
REGISTER_RESOURCE_TYPE(BFRC, eBurstFireData, eCorruptionProto, eCorruption)
REGISTER_RESOURCE_TYPE(CAAD, eUnknown_CAAD, eCorruption, eCorruption)
REGISTER_RESOURCE_TYPE(CAUD, eAudioMacro, eCorruptionProto, eReturns)
REGISTER_RESOURCE_TYPE(CHAR, eCharacter, eCorruptionProto, eReturns)
REGISTER_RESOURCE_TYPE(CHAR, eAnimSet, eCorruptionProto, eReturns)
REGISTER_RESOURCE_TYPE(CINF, eSkeleton, ePrimeDemo, eReturns)
REGISTER_RESOURCE_TYPE(CMDL, eModel, ePrimeDemo, eReturns)
REGISTER_RESOURCE_TYPE(CRSC, eParticleCollisionResponse, ePrimeDemo, eCorruption)

View File

@@ -38,7 +38,7 @@ public:
CResource(CResourceEntry *pEntry = 0)
: mpEntry(pEntry), mRefCount(0)
{
if (!mpEntry) mpEntry = gResourceStore.CreateTransientEntry(Type());
if (!mpEntry) mpEntry = gResourceStore.RegisterTransientResource(Type());
}
virtual ~CResource() {}

View File

@@ -194,6 +194,20 @@ void CAnimSetLoader::LoadHalfTransition(IInputStream& rANCS)
}
// ************ STATIC ************
CAnimSet* CAnimSetLoader::LoadANCSOrCHAR(IInputStream& rFile, CResourceEntry *pEntry)
{
if (!rFile.IsValid()) return nullptr;
u8 Test = rFile.PeekByte();
if (Test == 0x3 || Test == 0x5 || Test == 0x59)
return LoadCHAR(rFile, pEntry);
else if (Test == 0x0)
return LoadANCS(rFile, pEntry);
Log::Error("Failed to determine animset format for " + rFile.GetSourceString() + "; first byte is " + TString::HexString(Test, 2));
return nullptr;
}
CAnimSet* CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourceEntry *pEntry)
{
if (!rANCS.IsValid()) return nullptr;

View File

@@ -42,6 +42,7 @@ class CAnimSetLoader
void LoadHalfTransition(IInputStream& rANCS);
public:
static CAnimSet* LoadANCSOrCHAR(IInputStream& rFile, CResourceEntry *pEntry);
static CAnimSet* LoadANCS(IInputStream& rANCS, CResourceEntry *pEntry);
static CAnimSet* LoadCHAR(IInputStream& rCHAR, CResourceEntry *pEntry);
};