Skip to content

Commit c66d94e

Browse files
committed
Beta v2.3.4.7b
2 parents b2b85b6 + 38a3621 commit c66d94e

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

xivModdingFramework/Models/DataContainers/MdlModelData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public class MdlModelData
7878
/// <summary>
7979
/// The total number of indices that the mesh shapes uses
8080
/// </summary>
81-
public short ShapeDataCount { get; set; }
81+
public ushort ShapeDataCount { get; set; }
8282

8383
/// <summary>
8484
/// Unknown Usage

xivModdingFramework/Models/DataContainers/TTModel.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,17 +136,8 @@ public void UpdateShapeData()
136136
var baseVert = Vertices[rKv.Key];
137137
var shapeVert = shp.Vertices[rKv.Value];
138138

139-
shapeVert.Normal = baseVert.Normal;
140-
shapeVert.Tangent = baseVert.Tangent;
141-
shapeVert.Binormal = baseVert.Binormal;
142-
shapeVert.Handedness = baseVert.Handedness;
143-
shapeVert.UV1 = baseVert.UV1;
144-
shapeVert.UV2 = baseVert.UV2;
145-
146-
Array.Copy(baseVert.VertexColor, shapeVert.VertexColor, 4);
147-
Array.Copy(baseVert.BoneIds, shapeVert.BoneIds, 4);
148-
Array.Copy(baseVert.Weights, shapeVert.Weights, 4);
149-
139+
shp.Vertices[rKv.Value] = (TTVertex)baseVert.Clone();
140+
shp.Vertices[rKv.Value].Position = shapeVert.Position;
150141
}
151142
}
152143
}
@@ -652,11 +643,11 @@ public short ShapePartCount
652643
/// <summary>
653644
/// Total Shape Data (Index) Entries
654645
/// </summary>
655-
public short ShapeDataCount
646+
public ushort ShapeDataCount
656647
{
657648
get
658649
{
659-
short sum = 0;
650+
uint sum = 0;
660651
// This one is a little more complex.
661652
foreach (var m in MeshGroups)
662653
{
@@ -677,7 +668,13 @@ public short ShapeDataCount
677668
}
678669
}
679670
}
680-
return sum;
671+
672+
if(sum > ushort.MaxValue)
673+
{
674+
throw new Exception($"Model exceeds the maximum possible shape data indices.\n\nCurrent: {sum.ToString()}\nMaximum: {ushort.MaxValue.ToString()}");
675+
}
676+
677+
return (ushort) sum;
681678
}
682679
}
683680

@@ -1157,12 +1154,21 @@ public static TTModel LoadFromFile(string filePath, Action<bool, string> logging
11571154
vertex.Position.Y = reader.GetFloat("position_y");
11581155
vertex.Position.Z = reader.GetFloat("position_z");
11591156

1157+
var repVert = part.Vertices[vertexId];
1158+
if (repVert.Position.Equals(vertex.Position))
1159+
{
1160+
// Skip morphology which doesn't actually change anything.
1161+
continue;
1162+
}
1163+
11601164
if (!part.ShapeParts.ContainsKey(shapeName))
11611165
{
11621166
var shpPt = new TTShapePart();
11631167
shpPt.Name = shapeName;
11641168
part.ShapeParts.Add(shapeName, shpPt);
11651169
}
1170+
1171+
11661172
part.ShapeParts[shapeName].VertexReplacements.Add(vertexId, part.ShapeParts[shapeName].Vertices.Count);
11671173
part.ShapeParts[shapeName].Vertices.Add(vertex);
11681174

xivModdingFramework/Models/FileTypes/Mdl.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ public async Task<XivMdl> GetRawMdlData(string mdlPath, bool getOriginal = false
481481
BoneListCount = br.ReadInt16(),
482482
ShapeCount = br.ReadInt16(),
483483
ShapePartCount = br.ReadInt16(),
484-
ShapeDataCount = br.ReadInt16(),
484+
ShapeDataCount = br.ReadUInt16(),
485485
Unknown1 = br.ReadInt16(),
486486
Unknown2 = br.ReadInt16(),
487487
Unknown3 = br.ReadInt16(),
@@ -2518,7 +2518,7 @@ internal async Task<byte[]> MakeNewMdlFile(TTModel ttModel, XivMdl ogMdl, Action
25182518
modelDataBlock.AddRange(BitConverter.GetBytes((short)ttModel.MeshGroups.Count));
25192519
modelDataBlock.AddRange(BitConverter.GetBytes(ttModel.HasShapeData ? (short)ttModel.ShapeNames.Count : (short)0));
25202520
modelDataBlock.AddRange(BitConverter.GetBytes(ttModel.HasShapeData ? (short)ttModel.ShapePartCount : (short)0));
2521-
modelDataBlock.AddRange(BitConverter.GetBytes(ttModel.HasShapeData ? (short)ttModel.ShapeDataCount : (short)0));
2521+
modelDataBlock.AddRange(BitConverter.GetBytes(ttModel.HasShapeData ? (ushort)ttModel.ShapeDataCount : (ushort)0));
25222522
modelDataBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown1));
25232523
modelDataBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown2));
25242524
modelDataBlock.AddRange(BitConverter.GetBytes(ogModelData.Unknown3));

0 commit comments

Comments
 (0)