mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-08-03 10:45:52 +00:00
CAnimSetLoader: Make use of unsigned stream helpers where applicable
Same behavior, minus all of the implicit sign conversions.
This commit is contained in:
parent
36e005844f
commit
cf0898792a
@ -10,17 +10,17 @@ void CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
SSetCharacter& rChar = pSet->mCharacters.emplace_back();
|
||||
|
||||
// Character Header
|
||||
rChar.ID = rCHAR.ReadByte();
|
||||
rChar.ID = rCHAR.ReadUByte();
|
||||
rChar.Name = rCHAR.ReadString();
|
||||
rChar.pModel = gpResourceStore->LoadResource<CModel>(rCHAR.ReadLongLong());
|
||||
rChar.pSkin = gpResourceStore->LoadResource<CSkin>(rCHAR.ReadLongLong());
|
||||
rChar.pModel = gpResourceStore->LoadResource<CModel>(rCHAR.ReadULongLong());
|
||||
rChar.pSkin = gpResourceStore->LoadResource<CSkin>(rCHAR.ReadULongLong());
|
||||
|
||||
uint32 NumOverlays = rCHAR.ReadLong();
|
||||
const uint32 NumOverlays = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 iOverlay = 0; iOverlay < NumOverlays; iOverlay++)
|
||||
{
|
||||
SOverlayModel Overlay;
|
||||
Overlay.Type = (EOverlayType) rCHAR.ReadLong();
|
||||
Overlay.Type = static_cast<EOverlayType>(rCHAR.ReadULong());
|
||||
Overlay.ModelID = CAssetID(rCHAR, EIDLength::k64Bit);
|
||||
Overlay.SkinID = CAssetID(rCHAR, EIDLength::k64Bit);
|
||||
rChar.OverlayModels.push_back(Overlay);
|
||||
@ -36,7 +36,7 @@ void CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
LoadParticleResourceData(rCHAR, &rChar, 10);
|
||||
|
||||
// Events
|
||||
uint32 NumEventSets = rCHAR.ReadLong();
|
||||
const uint32 NumEventSets = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 iSet = 0; iSet < NumEventSets; iSet++)
|
||||
{
|
||||
@ -44,7 +44,7 @@ void CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
}
|
||||
|
||||
// Animations
|
||||
uint32 NumAnimations = rCHAR.ReadLong();
|
||||
const uint32 NumAnimations = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 AnimIdx = 0; AnimIdx < NumAnimations; AnimIdx++)
|
||||
{
|
||||
@ -55,21 +55,21 @@ void CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
}
|
||||
|
||||
// Animation Bounds
|
||||
uint32 NumAnimationBounds = rCHAR.ReadLong();
|
||||
const uint32 NumAnimationBounds = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumAnimationBounds * 0x20);
|
||||
rCHAR.Skip(1);
|
||||
|
||||
// Bool Array
|
||||
uint32 BoolArraySize = rCHAR.ReadLong();
|
||||
const uint32 BoolArraySize = rCHAR.ReadULong();
|
||||
rCHAR.Skip(BoolArraySize);
|
||||
|
||||
// Collision Primitives
|
||||
uint32 NumPrimitiveSets = rCHAR.ReadLong();
|
||||
const uint32 NumPrimitiveSets = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 SetIdx = 0; SetIdx < NumPrimitiveSets; SetIdx++)
|
||||
{
|
||||
rCHAR.ReadString();
|
||||
uint32 NumPrimitives = rCHAR.ReadLong();
|
||||
const uint32 NumPrimitives = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 PrimIdx = 0; PrimIdx < NumPrimitives; PrimIdx++)
|
||||
{
|
||||
@ -80,7 +80,7 @@ void CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
}
|
||||
|
||||
// Sound Resources
|
||||
uint32 NumSounds = rCHAR.ReadLong();
|
||||
const uint32 NumSounds = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 SoundIdx = 0; SoundIdx < NumSounds; SoundIdx++)
|
||||
{
|
||||
@ -94,7 +94,7 @@ void CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
void CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
{
|
||||
rCHAR.Skip(0x14);
|
||||
uint8 Flag = rCHAR.ReadByte();
|
||||
const uint8 Flag = rCHAR.ReadUByte();
|
||||
rCHAR.Skip(1);
|
||||
|
||||
SSetCharacter& rChar = pSet->mCharacters.emplace_back();
|
||||
@ -105,13 +105,13 @@ void CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
rChar.pSkeleton = gpResourceStore->LoadResource<CSkeleton>( rCHAR.ReadLongLong() );
|
||||
rChar.CollisionPrimitivesID = rCHAR.ReadLongLong();
|
||||
|
||||
uint32 NumModels = rCHAR.ReadLong();
|
||||
const uint32 NumModels = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 ModelIdx = 0; ModelIdx < NumModels; ModelIdx++)
|
||||
{
|
||||
rCHAR.ReadString();
|
||||
CAssetID ModelID(rCHAR, EGame::DKCReturns);
|
||||
CAssetID SkinID(rCHAR, EGame::DKCReturns);
|
||||
const CAssetID ModelID(rCHAR, EGame::DKCReturns);
|
||||
const CAssetID SkinID(rCHAR, EGame::DKCReturns);
|
||||
rCHAR.Skip(0x18);
|
||||
|
||||
if (ModelIdx == 0)
|
||||
@ -127,19 +127,19 @@ void CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
}
|
||||
|
||||
// Animations
|
||||
uint32 NumAnims = rCHAR.ReadLong();
|
||||
const uint32 NumAnims = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 AnimIdx = 0; AnimIdx < NumAnims; AnimIdx++)
|
||||
{
|
||||
TString AnimName = rCHAR.ReadString();
|
||||
CAssetID AnimID(rCHAR, EGame::DKCReturns);
|
||||
const CAssetID AnimID(rCHAR, EGame::DKCReturns);
|
||||
rCHAR.Skip(0x25);
|
||||
rChar.DKDependencies.push_back(AnimID);
|
||||
|
||||
// small hack - create a meta-anim for it so we can generate asset names for the ANIM files correctly
|
||||
SAnimation Anim;
|
||||
Anim.Name = AnimName;
|
||||
Anim.pMetaAnim = std::make_unique<CMetaAnimPlay>(CAnimPrimitive(AnimID, AnimIdx, AnimName), 0.f, 0);
|
||||
Anim.Name = std::move(AnimName);
|
||||
pSet->mAnimations.push_back(std::move(Anim));
|
||||
}
|
||||
|
||||
@ -148,23 +148,23 @@ void CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
return;
|
||||
|
||||
// Anim ID Map
|
||||
if (Flag & 0x20)
|
||||
if ((Flag & 0x20) != 0)
|
||||
{
|
||||
uint32 NumIDs = rCHAR.ReadLong();
|
||||
rCHAR.Skip(NumIDs * 4);
|
||||
}
|
||||
|
||||
// Transitions
|
||||
if (Flag & 0x80)
|
||||
if ((Flag & 0x80) != 0)
|
||||
{
|
||||
uint32 NumAdditiveAnims = rCHAR.ReadLong();
|
||||
const uint32 NumAdditiveAnims = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumAdditiveAnims * 0x10);
|
||||
|
||||
uint32 NumTransitionTypes = rCHAR.ReadLong();
|
||||
const uint32 NumTransitionTypes = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 TypeIdx = 0; TypeIdx < NumTransitionTypes; TypeIdx++)
|
||||
{
|
||||
uint16 Type = rCHAR.ReadShort();
|
||||
const uint16 Type = rCHAR.ReadUShort();
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
@ -178,52 +178,52 @@ void CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
rCHAR.Skip(0xC);
|
||||
break;
|
||||
default:
|
||||
errorf("%s [0x%X]: Invalid transition type: %d", *rCHAR.GetSourceString(), rCHAR.Tell() - 2, Type);
|
||||
errorf("%s [0x%X]: Invalid transition type: %u", *rCHAR.GetSourceString(), rCHAR.Tell() - 2, Type);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 NumFullTransitions = rCHAR.ReadLong();
|
||||
const uint32 NumFullTransitions = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumFullTransitions * 0xC);
|
||||
|
||||
uint32 NumHalfTransitions = rCHAR.ReadLong();
|
||||
const uint32 NumHalfTransitions = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumHalfTransitions * 0x8);
|
||||
|
||||
rCHAR.Skip(0x8);
|
||||
}
|
||||
|
||||
// Transform Bits
|
||||
if (Flag & 0x40)
|
||||
if ((Flag & 0x40) != 0)
|
||||
{
|
||||
uint32 NumTransformBits = rCHAR.ReadLong();
|
||||
const uint32 NumTransformBits = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumTransformBits);
|
||||
}
|
||||
|
||||
uint32 NumUnknown = rCHAR.ReadLong();
|
||||
const uint32 NumUnknown = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumUnknown * 4);
|
||||
|
||||
// Skel Joint Sets
|
||||
uint32 NumSkelJointSets = rCHAR.ReadLong();
|
||||
const uint32 NumSkelJointSets = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 SetIdx = 0; SetIdx < NumSkelJointSets; SetIdx++)
|
||||
{
|
||||
rCHAR.Skip(4);
|
||||
uint32 NumUnknown2 = rCHAR.ReadLong();
|
||||
const uint32 NumUnknown2 = rCHAR.ReadULong();
|
||||
rCHAR.Skip(0x20 + NumUnknown2);
|
||||
}
|
||||
|
||||
// Resources
|
||||
if (Flag & 0x10)
|
||||
if ((Flag & 0x10) != 0)
|
||||
{
|
||||
// Don't need the extensions
|
||||
uint32 NumExtensions = rCHAR.ReadLong();
|
||||
const uint32 NumExtensions = rCHAR.ReadULong();
|
||||
rCHAR.Skip(NumExtensions * 4);
|
||||
|
||||
uint32 NumResources = rCHAR.ReadLong();
|
||||
const uint32 NumResources = rCHAR.ReadULong();
|
||||
|
||||
for (uint32 ResIdx = 0; ResIdx < NumResources; ResIdx++)
|
||||
{
|
||||
CAssetID ResID(rCHAR, EGame::DKCReturns);
|
||||
const CAssetID ResID(rCHAR, EGame::DKCReturns);
|
||||
rCHAR.Skip(3);
|
||||
rChar.DKDependencies.push_back(ResID);
|
||||
}
|
||||
@ -235,35 +235,37 @@ void CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
void CAnimSetLoader::LoadPASDatabase(IInputStream& rPAS4)
|
||||
{
|
||||
// For now, just parse the data; don't store it
|
||||
uint32 Magic = rPAS4.ReadLong();
|
||||
uint32 AnimStateCount = rPAS4.ReadLong();
|
||||
[[maybe_unused]] const uint32 Magic = rPAS4.ReadULong();
|
||||
const uint32 AnimStateCount = rPAS4.ReadULong();
|
||||
rPAS4.Seek(0x4, SEEK_CUR); // Skipping default anim state
|
||||
ASSERT(Magic == FOURCC('PAS4'));
|
||||
|
||||
for (uint32 iState = 0; iState < AnimStateCount; iState++)
|
||||
{
|
||||
rPAS4.Seek(0x4, SEEK_CUR); // Skipping unknown value
|
||||
uint32 ParmInfoCount = rPAS4.ReadLong();
|
||||
uint32 AnimInfoCount = rPAS4.ReadLong();
|
||||
const uint32 ParmInfoCount = rPAS4.ReadULong();
|
||||
const uint32 AnimInfoCount = rPAS4.ReadULong();
|
||||
|
||||
uint32 Skip = 0;
|
||||
for (uint32 iParm = 0; iParm < ParmInfoCount; iParm++)
|
||||
{
|
||||
uint32 Type = rPAS4.ReadLong();
|
||||
const uint32 Type = rPAS4.ReadULong();
|
||||
rPAS4.Seek(0x8, SEEK_CUR);
|
||||
|
||||
switch (Type) {
|
||||
case 0: // Int32
|
||||
case 1: // Uint32
|
||||
case 2: // Real32
|
||||
case 4: // Enum
|
||||
rPAS4.Seek(0x8, SEEK_CUR);
|
||||
Skip += 4;
|
||||
break;
|
||||
case 3: // Bool
|
||||
rPAS4.Seek(0x2, SEEK_CUR);
|
||||
Skip++;
|
||||
break;
|
||||
case 0: // Int32
|
||||
case 1: // Uint32
|
||||
case 2: // Real32
|
||||
case 4: // Enum
|
||||
rPAS4.Seek(0x8, SEEK_CUR);
|
||||
Skip += 4;
|
||||
break;
|
||||
case 3: // Bool
|
||||
rPAS4.Seek(0x2, SEEK_CUR);
|
||||
Skip++;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,45 +276,46 @@ void CAnimSetLoader::LoadPASDatabase(IInputStream& rPAS4)
|
||||
|
||||
void CAnimSetLoader::LoadParticleResourceData(IInputStream& rFile, SSetCharacter *pChar, uint16 CharVersion)
|
||||
{
|
||||
uint32 ParticleCount = rFile.ReadLong();
|
||||
const uint32 ParticleCount = rFile.ReadULong();
|
||||
pChar->GenericParticles.reserve(ParticleCount);
|
||||
|
||||
for (uint32 iPart = 0; iPart < ParticleCount; iPart++)
|
||||
pChar->GenericParticles.push_back( CAssetID(rFile, mGame) );
|
||||
pChar->GenericParticles.emplace_back(rFile, mGame);
|
||||
|
||||
uint32 SwooshCount = rFile.ReadLong();
|
||||
const uint32 SwooshCount = rFile.ReadULong();
|
||||
pChar->SwooshParticles.reserve(SwooshCount);
|
||||
|
||||
for (uint32 iSwoosh = 0; iSwoosh < SwooshCount; iSwoosh++)
|
||||
pChar->SwooshParticles.push_back( CAssetID(rFile, mGame) );
|
||||
pChar->SwooshParticles.emplace_back(rFile, mGame);
|
||||
|
||||
if (CharVersion >= 6 && mGame <= EGame::Echoes) rFile.Seek(0x4, SEEK_CUR);
|
||||
|
||||
uint32 ElectricCount = rFile.ReadLong();
|
||||
const uint32 ElectricCount = rFile.ReadULong();
|
||||
pChar->ElectricParticles.reserve(ElectricCount);
|
||||
|
||||
for (uint32 iElec = 0; iElec < ElectricCount; iElec++)
|
||||
pChar->ElectricParticles.push_back( CAssetID(rFile, mGame) );
|
||||
pChar->ElectricParticles.emplace_back(rFile, mGame);
|
||||
|
||||
if (mGame >= EGame::Echoes)
|
||||
{
|
||||
uint32 SpawnCount = rFile.ReadLong();
|
||||
const uint32 SpawnCount = rFile.ReadULong();
|
||||
pChar->SpawnParticles.reserve(SpawnCount);
|
||||
|
||||
for (uint32 iSpawn = 0; iSpawn < SpawnCount; iSpawn++)
|
||||
pChar->SpawnParticles.push_back( CAssetID(rFile, mGame) );
|
||||
pChar->SpawnParticles.emplace_back(rFile, mGame);
|
||||
}
|
||||
|
||||
rFile.Seek(0x4, SEEK_CUR);
|
||||
if (mGame >= EGame::Echoes) rFile.Seek(0x4, SEEK_CUR);
|
||||
if (mGame >= EGame::Echoes)
|
||||
rFile.Seek(0x4, SEEK_CUR);
|
||||
}
|
||||
|
||||
void CAnimSetLoader::LoadAnimationSet(IInputStream& rANCS)
|
||||
{
|
||||
uint16 Version = rANCS.ReadShort();
|
||||
const uint16 Version = rANCS.ReadUShort();
|
||||
|
||||
// Animations
|
||||
uint32 NumAnims = rANCS.ReadLong();
|
||||
const uint32 NumAnims = rANCS.ReadULong();
|
||||
pSet->mAnimations.reserve(NumAnims);
|
||||
|
||||
for (uint32 iAnim = 0; iAnim < NumAnims; iAnim++)
|
||||
@ -324,15 +327,15 @@ void CAnimSetLoader::LoadAnimationSet(IInputStream& rANCS)
|
||||
}
|
||||
|
||||
// Transitions
|
||||
uint32 NumTransitions = rANCS.ReadLong();
|
||||
const uint32 NumTransitions = rANCS.ReadULong();
|
||||
pSet->mTransitions.reserve(NumTransitions);
|
||||
|
||||
for (uint32 iTrans = 0; iTrans < NumTransitions; iTrans++)
|
||||
{
|
||||
STransition Trans;
|
||||
Trans.Unknown = rANCS.ReadLong();
|
||||
Trans.AnimIdA = rANCS.ReadLong();
|
||||
Trans.AnimIdB = rANCS.ReadLong();
|
||||
Trans.Unknown = rANCS.ReadULong();
|
||||
Trans.AnimIdA = rANCS.ReadULong();
|
||||
Trans.AnimIdB = rANCS.ReadULong();
|
||||
Trans.pMetaTrans = gMetaTransFactory.LoadFromStream(rANCS, mGame);
|
||||
pSet->mTransitions.push_back(std::move(Trans));
|
||||
}
|
||||
@ -340,16 +343,17 @@ void CAnimSetLoader::LoadAnimationSet(IInputStream& rANCS)
|
||||
pSet->mpDefaultTransition = gMetaTransFactory.LoadFromStream(rANCS, mGame);
|
||||
|
||||
// Additive Animations
|
||||
uint32 NumAdditive = rANCS.ReadLong();
|
||||
const uint32 NumAdditive = rANCS.ReadULong();
|
||||
pSet->mAdditiveAnims.reserve(NumAdditive);
|
||||
|
||||
for (uint32 iAdd = 0; iAdd < NumAdditive; iAdd++)
|
||||
{
|
||||
SAdditiveAnim Anim;
|
||||
Anim.AnimID = rANCS.ReadLong();
|
||||
Anim.FadeInTime = rANCS.ReadFloat();
|
||||
Anim.FadeOutTime = rANCS.ReadFloat();
|
||||
pSet->mAdditiveAnims.push_back(std::move(Anim));
|
||||
const SAdditiveAnim Anim{
|
||||
rANCS.ReadULong(),
|
||||
rANCS.ReadFloat(),
|
||||
rANCS.ReadFloat(),
|
||||
};
|
||||
pSet->mAdditiveAnims.push_back(Anim);
|
||||
}
|
||||
|
||||
pSet->mDefaultAdditiveFadeIn = rANCS.ReadFloat();
|
||||
@ -358,13 +362,13 @@ void CAnimSetLoader::LoadAnimationSet(IInputStream& rANCS)
|
||||
// Half Transitions
|
||||
if (Version > 2)
|
||||
{
|
||||
uint32 NumHalfTransitions = rANCS.ReadLong();
|
||||
const uint32 NumHalfTransitions = rANCS.ReadULong();
|
||||
pSet->mHalfTransitions.reserve(NumHalfTransitions);
|
||||
|
||||
for (uint32 iTrans = 0; iTrans < NumHalfTransitions; iTrans++)
|
||||
{
|
||||
SHalfTransition Trans;
|
||||
Trans.AnimID = rANCS.ReadLong();
|
||||
Trans.AnimID = rANCS.ReadULong();
|
||||
Trans.pMetaTrans = gMetaTransFactory.LoadFromStream(rANCS, mGame);
|
||||
pSet->mHalfTransitions.push_back(std::move(Trans));
|
||||
}
|
||||
@ -374,7 +378,7 @@ void CAnimSetLoader::LoadAnimationSet(IInputStream& rANCS)
|
||||
// Events
|
||||
if (mGame >= EGame::EchoesDemo)
|
||||
{
|
||||
uint32 EventDataCount = rANCS.ReadLong();
|
||||
const uint32 EventDataCount = rANCS.ReadULong();
|
||||
pSet->mAnimEvents.reserve(EventDataCount);
|
||||
ASSERT(EventDataCount == NumAnims);
|
||||
|
||||
@ -406,7 +410,7 @@ void CAnimSetLoader::ProcessPrimitives()
|
||||
{
|
||||
CSourceAnimData *pAnimData = gpResourceStore->LoadResource<CSourceAnimData>( pSet->mCharacters[0].AnimDataID );
|
||||
|
||||
if (pAnimData)
|
||||
if (pAnimData != nullptr)
|
||||
pAnimData->GetUniquePrimitives(UniquePrimitives);
|
||||
}
|
||||
|
||||
@ -496,9 +500,10 @@ void CAnimSetLoader::ProcessPrimitives()
|
||||
// ************ STATIC ************
|
||||
std::unique_ptr<CAnimSet> CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourceEntry *pEntry)
|
||||
{
|
||||
if (!rANCS.IsValid()) return nullptr;
|
||||
if (!rANCS.IsValid())
|
||||
return nullptr;
|
||||
|
||||
uint32 Magic = rANCS.ReadLong();
|
||||
const uint32 Magic = rANCS.ReadULong();
|
||||
if (Magic != 0x00010001)
|
||||
{
|
||||
errorf("%s: Invalid ANCS magic: 0x%08X", *rANCS.GetSourceString(), Magic);
|
||||
@ -511,33 +516,35 @@ std::unique_ptr<CAnimSet> CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourc
|
||||
Loader.pSet = ptr.get();
|
||||
Loader.mGame = pEntry->Game();
|
||||
|
||||
uint32 NodeCount = rANCS.ReadLong();
|
||||
const uint32 NodeCount = rANCS.ReadULong();
|
||||
Loader.pSet->mCharacters.resize(NodeCount);
|
||||
|
||||
for (uint32 iNode = 0; iNode < NodeCount; iNode++)
|
||||
{
|
||||
SSetCharacter *pChar = &Loader.pSet->mCharacters[iNode];
|
||||
|
||||
pChar->ID = rANCS.ReadLong();
|
||||
uint16 CharVersion = rANCS.ReadShort();
|
||||
pChar->ID = rANCS.ReadULong();
|
||||
const uint16 CharVersion = rANCS.ReadUShort();
|
||||
if (iNode == 0 && Loader.mGame == EGame::Invalid)
|
||||
{
|
||||
Loader.mGame = (CharVersion == 0xA) ? EGame::Echoes : EGame::Prime;
|
||||
}
|
||||
pChar->Name = rANCS.ReadString();
|
||||
pChar->pModel = gpResourceStore->LoadResource<CModel>(rANCS.ReadLong());
|
||||
pChar->pSkin = gpResourceStore->LoadResource<CSkin>(rANCS.ReadLong());
|
||||
pChar->pSkeleton = gpResourceStore->LoadResource<CSkeleton>(rANCS.ReadLong());
|
||||
if (pChar->pModel) pChar->pModel->SetSkin(pChar->pSkin);
|
||||
pChar->pModel = gpResourceStore->LoadResource<CModel>(rANCS.ReadULong());
|
||||
pChar->pSkin = gpResourceStore->LoadResource<CSkin>(rANCS.ReadULong());
|
||||
pChar->pSkeleton = gpResourceStore->LoadResource<CSkeleton>(rANCS.ReadULong());
|
||||
if (pChar->pModel != nullptr)
|
||||
pChar->pModel->SetSkin(pChar->pSkin);
|
||||
|
||||
// Unfortunately that's all that's actually supported at the moment. Hope to expand later.
|
||||
// Since there's no size value I have to actually read the rest of the node to reach the next one
|
||||
uint32 AnimCount = rANCS.ReadLong();
|
||||
const uint32 AnimCount = rANCS.ReadULong();
|
||||
|
||||
for (uint32 iAnim = 0; iAnim < AnimCount; iAnim++)
|
||||
{
|
||||
rANCS.Seek(0x4, SEEK_CUR);
|
||||
if (Loader.mGame == EGame::Prime) rANCS.Seek(0x1, SEEK_CUR);
|
||||
if (Loader.mGame == EGame::Prime)
|
||||
rANCS.Seek(0x1, SEEK_CUR);
|
||||
rANCS.ReadString();
|
||||
}
|
||||
|
||||
@ -547,28 +554,32 @@ std::unique_ptr<CAnimSet> CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourc
|
||||
// Particles
|
||||
Loader.LoadParticleResourceData(rANCS, pChar, CharVersion);
|
||||
|
||||
uint32 AnimCount2 = rANCS.ReadLong();
|
||||
const uint32 AnimCount2 = rANCS.ReadULong();
|
||||
for (uint32 iAnim = 0; iAnim < AnimCount2; iAnim++)
|
||||
{
|
||||
rANCS.ReadString();
|
||||
rANCS.Seek(0x18, SEEK_CUR);
|
||||
}
|
||||
|
||||
uint32 EffectGroupCount = rANCS.ReadLong();
|
||||
const uint32 EffectGroupCount = rANCS.ReadULong();
|
||||
for (uint32 iGrp = 0; iGrp < EffectGroupCount; iGrp++)
|
||||
{
|
||||
rANCS.ReadString();
|
||||
uint32 EffectCount = rANCS.ReadLong();
|
||||
const uint32 EffectCount = rANCS.ReadULong();
|
||||
|
||||
for (uint32 iEffect = 0; iEffect < EffectCount; iEffect++)
|
||||
{
|
||||
rANCS.ReadString();
|
||||
rANCS.Seek(0x4, SEEK_CUR);
|
||||
CAssetID ParticleID(rANCS, EIDLength::k32Bit);
|
||||
if (ParticleID.IsValid()) pChar->EffectParticles.push_back(ParticleID);
|
||||
const CAssetID ParticleID(rANCS, EIDLength::k32Bit);
|
||||
if (ParticleID.IsValid())
|
||||
pChar->EffectParticles.push_back(ParticleID);
|
||||
|
||||
if (Loader.mGame == EGame::Prime)
|
||||
rANCS.ReadString();
|
||||
if (Loader.mGame == EGame::Echoes)
|
||||
rANCS.Seek(0x4, SEEK_CUR);
|
||||
|
||||
if (Loader.mGame == EGame::Prime) rANCS.ReadString();
|
||||
if (Loader.mGame == EGame::Echoes) rANCS.Seek(0x4, SEEK_CUR);
|
||||
rANCS.Seek(0xC, SEEK_CUR);
|
||||
}
|
||||
}
|
||||
@ -579,19 +590,19 @@ std::unique_ptr<CAnimSet> CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourc
|
||||
Overlay.SkinID = CAssetID(rANCS, EIDLength::k32Bit);
|
||||
pChar->OverlayModels.push_back(Overlay);
|
||||
|
||||
uint32 AnimIndexCount = rANCS.ReadLong();
|
||||
const uint32 AnimIndexCount = rANCS.ReadULong();
|
||||
|
||||
for (uint32 iAnim = 0; iAnim < AnimIndexCount; iAnim++)
|
||||
{
|
||||
uint32 AnimIndex = rANCS.ReadLong();
|
||||
const uint32 AnimIndex = rANCS.ReadULong();
|
||||
pChar->UsedAnimationIndices.insert(AnimIndex);
|
||||
}
|
||||
|
||||
if (Loader.mGame == EGame::Echoes)
|
||||
{
|
||||
pChar->SpatialPrimitives = rANCS.ReadLong();
|
||||
pChar->SpatialPrimitives = rANCS.ReadULong();
|
||||
rANCS.Seek(0x1, SEEK_CUR);
|
||||
uint32 UnknownCount2 = rANCS.ReadLong();
|
||||
const uint32 UnknownCount2 = rANCS.ReadULong();
|
||||
rANCS.Seek(UnknownCount2 * 0x1C, SEEK_CUR);
|
||||
}
|
||||
}
|
||||
@ -609,7 +620,7 @@ std::unique_ptr<CAnimSet> CAnimSetLoader::LoadCHAR(IInputStream& rCHAR, CResourc
|
||||
return nullptr;
|
||||
|
||||
CAnimSetLoader Loader;
|
||||
uint8 Check = rCHAR.ReadByte();
|
||||
const uint8 Check = rCHAR.ReadUByte();
|
||||
|
||||
if (Check == 0x5 || Check == 0x3)
|
||||
{
|
||||
@ -645,15 +656,15 @@ std::unique_ptr<CSourceAnimData> CAnimSetLoader::LoadSAND(IInputStream& rSAND, C
|
||||
// We only care about the transitions right now
|
||||
auto pData = std::make_unique<CSourceAnimData>(pEntry);
|
||||
|
||||
uint16 Unknown = rSAND.ReadShort(); // probably version
|
||||
[[maybe_unused]] const uint16 Unknown = rSAND.ReadUShort(); // probably version
|
||||
ASSERT(Unknown == 0);
|
||||
|
||||
// Transitions
|
||||
uint32 NumTransitions = rSAND.ReadLong();
|
||||
const uint32 NumTransitions = rSAND.ReadULong();
|
||||
|
||||
for (uint32 TransitionIdx = 0; TransitionIdx < NumTransitions; TransitionIdx++)
|
||||
{
|
||||
[[maybe_unused]] const uint8 UnkByte = rSAND.ReadByte();
|
||||
[[maybe_unused]] const uint8 UnkByte = rSAND.ReadUByte();
|
||||
ASSERT(UnkByte == 0);
|
||||
|
||||
CSourceAnimData::STransition Transition;
|
||||
@ -664,11 +675,11 @@ std::unique_ptr<CSourceAnimData> CAnimSetLoader::LoadSAND(IInputStream& rSAND, C
|
||||
}
|
||||
|
||||
// Half Transitions
|
||||
uint32 NumHalfTransitions = rSAND.ReadLong();
|
||||
const uint32 NumHalfTransitions = rSAND.ReadULong();
|
||||
|
||||
for (uint32 HalfIdx = 0; HalfIdx < NumHalfTransitions; HalfIdx++)
|
||||
{
|
||||
[[maybe_unused]] const uint8 UnkByte = rSAND.ReadByte();
|
||||
[[maybe_unused]] const uint8 UnkByte = rSAND.ReadUByte();
|
||||
ASSERT(UnkByte == 0);
|
||||
|
||||
CSourceAnimData::SHalfTransition HalfTrans;
|
||||
|
Loading…
x
Reference in New Issue
Block a user