From 63fa827a75120e3b13f2ea29b1d84e258a83c95f Mon Sep 17 00:00:00 2001 From: LolHacksRule Date: Mon, 20 Feb 2023 13:18:28 -0800 Subject: [PATCH] Fix DKCTF models for real --- CGraphicsModel.bt | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/CGraphicsModel.bt b/CGraphicsModel.bt index 88a3cff..5bcdd87 100644 --- a/CGraphicsModel.bt +++ b/CGraphicsModel.bt @@ -32,6 +32,11 @@ struct SModelWindData { byte unkData[unkD]; }; +struct SCausticData { + uint32 unkD; + uint32 unkData[unkD]; +}; + struct DataSourceLoader { if (ReadByte() == 0) //Type for WiiU is an I32 { @@ -44,6 +49,9 @@ struct DataSourceLoader { case 1: local FourCC type = "WIND"; break; + case 2: + local FourCC type = "CAUS"; + break; } } else @@ -57,6 +65,9 @@ struct DataSourceLoader { case "WIND": SModelWindData wind; break; + case "CAUS": + SCausticData caustic; + break; } }; @@ -219,7 +230,7 @@ string ReadMaterialDataType(FourCC value) typedef struct { GUID id; - if (id != GUIDZero) { STextureUsageInfo usage; } + if (id != GUIDZero || isDKCTF) { STextureUsageInfo usage; } //Detect isDKCTF to force it on NS models } CMaterialTextureTokenData ; struct CLayeredTextureBaseData @@ -333,7 +344,7 @@ string CMaterialDataRead(CMaterialData &mat) { } typedef struct { - if (ReadByte() == 0) //NS + if (ReadByte() == 0 || !isDKCTF) //NS, use anti isDKCTF so MP1R models don't break { local uint useMaterialTypeChunk = 1; CStringFixed name; @@ -387,12 +398,11 @@ typedef struct { byte IndexBufferIndex; uint IndexStart; uint IndexCount; - ushort field_C; + uint Flags; if (isDKCTF) { byte unk; } - ushort field_E; //0x4000 } CRenderMesh; struct SMeshLoadInformation { @@ -488,10 +498,13 @@ typedef struct { CRenderOctree renderOctree; uint aaboxCount; CAABox aaboxes[aaboxCount]; - uint floatCount; + if (form.readerVersion > 52 && form.writerVersion > 52) + { + uint floatCount; + float floats[floatCount]; + } if (!isDKCTF) { - float floats[floatCount]; ushort unk; uint shortCount; ushort shorts[shortCount];