From dae5e5a0b3e5a7450e6f739edb712436a9d6760c Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Thu, 16 Feb 2023 10:39:11 -0800 Subject: [PATCH] Add Reflection and Light probes --- CFormDescriptor.bt | 6 ++-- CLightProbeData.bt | 74 +++++++++++++++++++++++++++++++++++++++++ CReflectionProbeData.bt | 13 ++++++++ Run.bt | 10 +++++- 4 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 CLightProbeData.bt create mode 100644 CReflectionProbeData.bt diff --git a/CFormDescriptor.bt b/CFormDescriptor.bt index 15092f2..6b478dd 100644 --- a/CFormDescriptor.bt +++ b/CFormDescriptor.bt @@ -6,10 +6,10 @@ typedef struct uint64 size ; uint64 unk1; FourCC id; - uint32 versionA ; - uint32 versionB ; + uint32 readerVersion ; + uint32 writerVersion ; } FormDescriptor < - name=(Str("%s v%d form header", id, versionA)), + name=(Str("%s rv%d wv%d form header", id, readerVersion, writerVersion)), comment=(SizeComment(size)), bgcolor=cLtAqua >; diff --git a/CLightProbeData.bt b/CLightProbeData.bt new file mode 100644 index 0000000..e4be265 --- /dev/null +++ b/CLightProbeData.bt @@ -0,0 +1,74 @@ +#ifndef _CLIGHTPROBEDATA +#define _CLIGHTPROBEDATA + +#include "CChunkDescriptor.bt" +#include "CFormDescriptor.bt" +#include "NTextureFormat.bt" +#include "CVector3f.bt" +#include "CVector3i.bt" + +typedef struct CBakedLightingUniformProbeGridIndex { + ushort unk1; + ushort unk2; + ushort unk3; +} CBakedLightingUniformProbeGridIndex; + +struct LightProbeBundleHeader { + uint unk1; + uint unk2; + CVector3f unk3; + CBakedLightingUniformProbeGridIndex unk4; + CBakedLightingUniformProbeGridIndex unk5; +}; + +struct SReadInfo { + uchar unk1; + uint unk2; + uint unk3; +}; + +struct ReadInfoVector { + uint count; + SReadInfo readInfos[count]; +}; + +struct SCompressedBufferInfo { + uint unk1; + uint unk2; + uint unk3; + uint unk4; + uint unk5; +}; + +struct SMetaData { + uint unk1; + uint unk2; + uint unk3; + uint unk4; + uint unk5; + uint unk6; + uint readInfoCount; + SReadInfo readInfos[readInfoCount]; + uint compressedBufferInfoCount; + SCompressedBufferInfo compressedBufferInfos[compressedBufferInfoCount]; +}; + +struct LightProbeBundle { + SMetaData metaData; + CVector3i unkVector; + uint unk; + FormDescriptor textureForm; + NTextureFormat txtrChunk(textureForm.size); +}; + +typedef struct CLightProbeData(uint64 size) { + local uint64 start = FTell(); + ChunkDescriptor phdr; + LightProbeBundleHeader bundleHeader; + ChunkDescriptor ptext; + while (FTell() < start + size) { + LightProbeBundle bundle; + } +} CLightProbeData; + +#endif// _CLIGHTPROBEDATA diff --git a/CReflectionProbeData.bt b/CReflectionProbeData.bt new file mode 100644 index 0000000..a84a090 --- /dev/null +++ b/CReflectionProbeData.bt @@ -0,0 +1,13 @@ +#ifndef _CREFLECTIONPROBE +#define _CREFLECTIONPROBE + +#include "CChunkDescriptor.bt" + +typedef struct CReflectionProbeData { + ChunkDescriptor chunkHeader; + uint unk1; + GUID textureId; + float unk2; +} CReflectionProbeData; + +#endif// _CREFLECTIONPROBE diff --git a/Run.bt b/Run.bt index cb93f04..35548f6 100644 --- a/Run.bt +++ b/Run.bt @@ -9,12 +9,14 @@ // Files #include "CCharInfo.bt" +#include "CLightProbeData.bt" #include "CGraphicsModel.bt" #include "CPakFile.bt" #include "MessageStudioBinaryText.bt" #include "MaterialArchive.bt" #include "CVectorField.bt" #include "CAABoxCollisionTree.bt" +#include "CReflectionProbeData.bt" //#include "CRuleSet.bt" #include "CScaleformFlashLibrary.bt" @@ -36,6 +38,9 @@ typedef struct Assert("Invalid version!"); } break; + case "LTPB": + CLightProbeData lightProbe(form.size); + break; case "CLSN": CAABoxCollisionTree aaboxCollisionTree(form.size); break; @@ -56,6 +61,9 @@ typedef struct case "TXTR": NTextureFormat texture(form.size); break; + case "REFL": + CReflectionProbeData probeData; + break; /*case "RULE": CRuleSet rulesetconfig(form.size); break;*/ @@ -78,7 +86,7 @@ local uint isDKCTF = (ReadInt(4) & 0xFFFFFF) == 0; if (!isDKCTF) { LittleEndian(); } -File file ; +File file ; // Custom footer for extracted files if (ReadString(FTell(), 4) == "RFRM")