diff --git a/Warcraft.NET/Files/ADT/Chunks/Legion/MLSI.cs b/Warcraft.NET/Files/ADT/Chunks/Legion/MLSI.cs index 2187370..a0f2040 100644 --- a/Warcraft.NET/Files/ADT/Chunks/Legion/MLSI.cs +++ b/Warcraft.NET/Files/ADT/Chunks/Legion/MLSI.cs @@ -42,7 +42,7 @@ public void LoadBinaryData(byte[] inData) using (var ms = new MemoryStream(inData)) using (var br = new BinaryReader(ms)) { - var mlsiCount = br.BaseStream.Length / sizeof(uint); + var mlsiCount = br.BaseStream.Length / sizeof(ushort); SkirtIndices = new ushort[mlsiCount]; for (var i = 0; i < mlsiCount; i++) { diff --git a/Warcraft.NET/Files/ADT/Chunks/Legion/MLVI.cs b/Warcraft.NET/Files/ADT/Chunks/Legion/MLVI.cs index 3d34265..e7b9af4 100644 --- a/Warcraft.NET/Files/ADT/Chunks/Legion/MLVI.cs +++ b/Warcraft.NET/Files/ADT/Chunks/Legion/MLVI.cs @@ -42,7 +42,7 @@ public void LoadBinaryData(byte[] inData) using (var ms = new MemoryStream(inData)) using (var br = new BinaryReader(ms)) { - var mlviCount = br.BaseStream.Length / sizeof(uint); + var mlviCount = br.BaseStream.Length / sizeof(ushort); VertexIndices = new ushort[mlviCount]; for (var i = 0; i < mlviCount; i++) { diff --git a/Warcraft.NET/Files/ADT/TerrainLOD/Legion/TerrainLOD.cs b/Warcraft.NET/Files/ADT/TerrainLOD/Legion/TerrainLOD.cs index a6593b8..3cdf7af 100644 --- a/Warcraft.NET/Files/ADT/TerrainLOD/Legion/TerrainLOD.cs +++ b/Warcraft.NET/Files/ADT/TerrainLOD/Legion/TerrainLOD.cs @@ -166,6 +166,57 @@ public void LoadBinaryData(byte[] inData) } } } + + /// + public override byte[] Serialize() + { + using var ms = new MemoryStream(); + using (var bw = new BinaryWriter(ms)) + { + bw.WriteIFFChunk(Version); + bw.WriteIFFChunk(Header); + bw.WriteIFFChunk(Heightmap); + bw.WriteIFFChunk(Levels); + bw.WriteIFFChunk(QuadTree); + bw.WriteIFFChunk(VertexIndices); + bw.WriteIFFChunk(SkirtIndices); + + if (BlendMeshHeaders != null) + bw.WriteIFFChunk(BlendMeshHeaders); + + if (BlendMeshBoundingBoxes != null) + bw.WriteIFFChunk(BlendMeshBoundingBoxes); + + if (BlendMeshIndices != null) + bw.WriteIFFChunk(BlendMeshIndices); + + if (BlendMeshVertices != null) + bw.WriteIFFChunk(BlendMeshVertices); + + if (BlendMeshBatches != null) + bw.WriteIFFChunk(BlendMeshBatches); + + if (LiquidData != null) + bw.WriteIFFChunk(LiquidData); + + foreach (var liquidN in LiquidN) + { + bw.WriteIFFChunk(liquidN); + } + + foreach (var liquidIndex in LiquidIndices) + { + bw.WriteIFFChunk(liquidIndex); + } + + foreach (var liquidVertex in LiquidVertices) + { + bw.WriteIFFChunk(liquidVertex); + } + + return ms.ToArray(); + } + } } #nullable disable } diff --git a/Warcraft.NET/Files/ADT/TerrainLOD/TerrainLODBase.cs b/Warcraft.NET/Files/ADT/TerrainLOD/TerrainLODBase.cs index cbc3d8c..f4934c2 100644 --- a/Warcraft.NET/Files/ADT/TerrainLOD/TerrainLODBase.cs +++ b/Warcraft.NET/Files/ADT/TerrainLOD/TerrainLODBase.cs @@ -23,5 +23,8 @@ public TerrainLODBase() : base() public TerrainLODBase(byte[] inData) : base(inData) { } + + /// + public abstract byte[] Serialize(); } }