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];