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