From 47aadd9b7e10d1c0993e1d76eeff26dbb5a8f4e9 Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Sun, 7 Jan 2024 17:35:03 -0800 Subject: [PATCH] CCharInfo: Minor fixes, import CPASDatabase.bt --- CCharInfo.bt | 35 ++++++++++++--------- CPASDatabase.bt | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 CPASDatabase.bt diff --git a/CCharInfo.bt b/CCharInfo.bt index d378237..7450706 100644 --- a/CCharInfo.bt +++ b/CCharInfo.bt @@ -3,6 +3,7 @@ #include #include +#include local int charinfoi = 0; @@ -71,8 +72,10 @@ struct CAssetHeader struct NameHashList { uint count; - uint hash[count] ; - uint stringIDs[count]; + if (count > 0) { + uint hash[count] ; + uint stringIDs[count]; + } }; struct StringList @@ -112,12 +115,15 @@ struct SRenderContext { uint16 unk3; uint16 unk4; int32 unk5; - local int start = FTell(); union { struct { ushort unk[unk1]; - ushort unk2[unk2]; - ushort unk3[unk3]; + if (unk2 > 0) { + ushort unk2[unk2]; + } + if (unk3 > 0) { + ushort unk3[unk3]; + } ushort segIDs[unk4]; CTransform4f xfs[unk1 + 1]; CTransform4f xfs2[unk4]; @@ -320,22 +326,21 @@ struct SSubCharData { struct SAnimParamNode { CGuid guid; uint unk1; - // CPASDatabase + CPASDatabase pasDatabase; }; struct CAnimCollisionPrimSet { CStringFixed something; // CStringHashedCase uint unk1; - CStringFixed strings[unk1]; // CStringHashedCase + CStringFixed strings[unk1] ; // CStringHashedCase }; struct CAnimCollisionPrim { uint unk1; - uint unk2; - char unk3[unk2]; + CStringFixed name; uint evalDataLen; CEvalId evalId; CGuid guid; - char evalData[evalDataLen]; + char evalData[unk1]; }; struct SObjectTag { @@ -346,11 +351,11 @@ struct SObjectTag { struct CAnimCollisionPrimData { uint primCount; if (primCount) { - CAnimCollisionPrim prims[primCount]; + CAnimCollisionPrim prims[primCount] ; } uint setCount; if (setCount) { - CAnimCollisionPrimSet collisionPrimSet[setCount]; + CAnimCollisionPrimSet collisionPrimSet[setCount] ; } uint unk1; @@ -416,8 +421,8 @@ struct CActionData { } if (unk4) { - char unk[unk4 * 4]; - char unk[unk2]; + uint unk10[unk4]; + CString strings[unk4] ; } }; @@ -601,7 +606,7 @@ struct CCharInfo uchar unkData3[unk14 * 8]; uchar unkData4[unk15]; if (unk7) { - SAnimParamNode paramNodes[unk7]; + SAnimParamNode paramNodes[unk7] ; } if (unk6) { CGuid guids[unk6]; diff --git a/CPASDatabase.bt b/CPASDatabase.bt new file mode 100644 index 0000000..9a87d02 --- /dev/null +++ b/CPASDatabase.bt @@ -0,0 +1,84 @@ +//-------------------------------------- +//--- 010 Editor v5.0 Binary Template +// +// File: +// Author: +// Revision: +// Purpose: +//-------------------------------------- + +enum EParmType +{ + Int32, + Uint32, + Real32, + Bool, + Enum +}; + +struct CPASParmInfo +{ + EParmType type; + uint unknown1; + float unknown2; + switch(type) + { + case Int32: + int val[2]; + break; + case Uint32: + uint val[2]; + break; + case Real32: + float val[2]; + break; + case Bool: + byte val[2]; + break; + case Enum: + uint val[2]; + } +}; + +struct CPASAnimState +{ + uint unknown1; + uint parmInfoCount; + uint animInfoCount; + CPASParmInfo parmInfo[parmInfoCount] ; + local uint i; + struct PASAnimInfo + { + uint unknown1; + for (i = 0; i < parmInfoCount; i++) + { + switch(parmInfo[i].type) + { + case Int32: + int val; + break; + case Uint32: + uint val; + break; + case Real32: + float val; + break; + case Bool: + byte val; + break; + case Enum: + uint val; + break; + } + } + } animInfo[animInfoCount] ; +}; + +struct CPASDatabase +{ + uint magic; + uint animStateCount; + uint defaultState; + + CPASAnimState animStates[animStateCount] ; +}; \ No newline at end of file