Skip to content

Commit 220e23c

Browse files
Merge pull request #90 from senko-forks/pr-face72
Patch 7.2 new face shadow data support
2 parents 699039e + 479d889 commit 220e23c

File tree

4 files changed

+54
-5
lines changed

4 files changed

+54
-5
lines changed

xivModdingFramework/Models/DataContainers/MdlModelData.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public class MdlModelData
187187
/// <summary>
188188
/// Unknown Usage
189189
/// </summary>
190-
public short Unknown14 { get; set; }
190+
public short Patch72TableSize { get; set; }
191191

192192
/// <summary>
193193
/// Padding?
@@ -245,7 +245,7 @@ public static MdlModelData Read(BinaryReader br)
245245
BoneSetSize = br.ReadInt16(),
246246

247247
Unknown13 = br.ReadInt16(),
248-
Unknown14 = br.ReadInt16(),
248+
Patch72TableSize = br.ReadInt16(),
249249
Unknown15 = br.ReadInt16(),
250250
Unknown16 = br.ReadInt16(),
251251
Unknown17 = br.ReadInt16()
@@ -281,7 +281,7 @@ public void Write(BinaryWriter br)
281281
br.Write(NeckMorphTableSize);
282282
br.Write(BoneSetSize);
283283
br.Write(Unknown13);
284-
br.Write(Unknown14);
284+
br.Write(Patch72TableSize);
285285
br.Write(Unknown15);
286286
br.Write(Unknown16);
287287
br.Write(Unknown17);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// xivModdingFramework
2+
// Copyright © 2018 Rafael Gonzalez - All Rights Reserved
3+
//
4+
// This program is free software: you can redistribute it and/or modify
5+
// it under the terms of the GNU General Public License as published by
6+
// the Free Software Foundation, either version 3 of the License, or
7+
// (at your option) any later version.
8+
//
9+
// This program is distributed in the hope that it will be useful,
10+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
// GNU General Public License for more details.
13+
//
14+
// You should have received a copy of the GNU General Public License
15+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
17+
namespace xivModdingFramework.Models.DataContainers
18+
{
19+
public class UnknownDataPatch72
20+
{
21+
/// <summary>
22+
/// This data block is currently unknown
23+
/// </summary>
24+
/// <remarks>
25+
/// The size of this unknown data block is [ MdlModelData.Patch72TableSize * 16 ]
26+
/// </remarks>
27+
public byte[] Unknown { get; set; }
28+
}
29+
}

xivModdingFramework/Models/DataContainers/XivMdl.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,5 +146,10 @@ public class XivMdl
146146
/// This data is present on heads and seems to affect the shape of the neck on the body mesh
147147
/// </summary>
148148
public List<NeckMorphEntry> NeckMorphTable { get; set; }
149+
150+
/// <summary>
151+
/// Currently unknown data
152+
/// </summary>
153+
public UnknownDataPatch72 UnkDataPatch72 { get; set; }
149154
}
150155
}

xivModdingFramework/Models/FileTypes/Mdl.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,15 @@ public static XivMdl GetXivMdl(byte[] mdlData, string mdlPath = "")
943943
}
944944
#endregion
945945

946+
#region Patch 7.2 Unknown Data
947+
// Something to do with shadows (appears on face models new in Patch 7.2)
948+
var unkDataPatch72 = new UnknownDataPatch72
949+
{
950+
Unknown = br.ReadBytes(xivMdl.ModelData.Patch72TableSize * 16)
951+
};
952+
xivMdl.UnkDataPatch72 = unkDataPatch72;
953+
#endregion
954+
946955
#region Padding
947956
// Padding
948957
xivMdl.PaddingSize = br.ReadByte();
@@ -3030,7 +3039,7 @@ public static byte[] MakeUncompressedMdlFile(TTModel ttModel, XivMdl ogMdl, Acti
30303039

30313040
// Unknowns that are probably partly padding.
30323041
basicModelBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown13));
3033-
basicModelBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown14));
3042+
basicModelBlock.AddRange(BitConverter.GetBytes(ogModelData.Patch72TableSize));
30343043
basicModelBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown15));
30353044
basicModelBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown16));
30363045
basicModelBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown17));
@@ -3633,6 +3642,11 @@ public static byte[] MakeUncompressedMdlFile(TTModel ttModel, XivMdl ogMdl, Acti
36333642
}
36343643
#endregion
36353644

3645+
// Patch 7.2 Unknown Data
3646+
#region Patch 7.2 Unknown Data
3647+
var unknownPatch72DataBlock = ogMdl.UnkDataPatch72.Unknown;
3648+
#endregion
3649+
36363650
// Padding
36373651
#region Padding Data Block
36383652

@@ -3788,7 +3802,7 @@ public static byte[] MakeUncompressedMdlFile(TTModel ttModel, XivMdl ogMdl, Acti
37883802
// This is the offset to the beginning of the vertex data
37893803
var combinedDataBlockSize = _MdlHeaderSize + vertexInfoBlock.Count + pathInfoBlock.Count + basicModelBlock.Count + unknownDataBlock0.Length + (60 * ogMdl.LoDList.Count) + extraMeshesBlock.Count + meshDataBlock.Count +
37903804
attributePathDataBlock.Count + (unknownDataBlock1?.Length ?? 0) + meshPartDataBlock.Count + unknownDataBlock2.Length + matPathOffsetDataBlock.Count + bonePathOffsetDataBlock.Count +
3791-
boneSetsBlock.Count + FullShapeDataBlock.Count + partBoneSetsBlock.Count + neckMorphDataBlock.Count + paddingDataBlock.Count + boundingBoxDataBlock.Count + boneBoundingBoxDataBlock.Count;
3805+
boneSetsBlock.Count + FullShapeDataBlock.Count + partBoneSetsBlock.Count + neckMorphDataBlock.Count + unknownPatch72DataBlock.Length + paddingDataBlock.Count + boundingBoxDataBlock.Count + boneBoundingBoxDataBlock.Count;
37923806

37933807
var lodDataBlock = new List<byte>();
37943808
List<int> indexStartInjectPointers = new List<int>();
@@ -3876,6 +3890,7 @@ public static byte[] MakeUncompressedMdlFile(TTModel ttModel, XivMdl ogMdl, Acti
38763890
modelDataBlock.AddRange(FullShapeDataBlock);
38773891
modelDataBlock.AddRange(partBoneSetsBlock);
38783892
modelDataBlock.AddRange(neckMorphDataBlock);
3893+
modelDataBlock.AddRange(unknownPatch72DataBlock);
38793894
modelDataBlock.AddRange(paddingDataBlock);
38803895
modelDataBlock.AddRange(boundingBoxDataBlock);
38813896
modelDataBlock.AddRange(boneBoundingBoxDataBlock);

0 commit comments

Comments
 (0)