91 lines
3.1 KiB
C#
91 lines
3.1 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace dq8chr2glb.Core.MDSFormat;
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 80)]
|
|
public struct MDSHeader
|
|
{
|
|
[FieldOffset(00)] public int MagicCode;
|
|
[FieldOffset(04)] public int Version;
|
|
[FieldOffset(08)] public int HeaderSize;
|
|
[FieldOffset(12)] public int NodesCount;
|
|
[FieldOffset(20)] public int NodeSize;
|
|
[FieldOffset(24)] public int OffsetToNodes;
|
|
[FieldOffset(32)] public int MeshCount;
|
|
[FieldOffset(36)] public int OffsetToMDT;
|
|
[FieldOffset(44)] public int MaterialsCount;
|
|
[FieldOffset(48)] public int MaterialSize;
|
|
[FieldOffset(52)] public int OffsetToMaterials;
|
|
[FieldOffset(56)] public int OffsetToNames;
|
|
[FieldOffset(60)] public int NamesBlockSize;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 256)]
|
|
public struct MDTHeader
|
|
{
|
|
[FieldOffset(00)] public int MagicCode;
|
|
[FieldOffset(08)] public int ToVertexCount;
|
|
[FieldOffset(12)] public int TotalSize;
|
|
[FieldOffset(32)] public float ScaleX;
|
|
[FieldOffset(36)] public float ScaleY;
|
|
[FieldOffset(40)] public float ScaleZ;
|
|
[FieldOffset(80)] public float UvScaleX;
|
|
[FieldOffset(84)] public float UvScaleY;
|
|
[FieldOffset(112)] public int TriangleGroupCount;
|
|
[FieldOffset(116)] public int VertexAttrSize;
|
|
[FieldOffset(144)] public int VertsCount;
|
|
[FieldOffset(148)] public int BytesToFirstVertex;
|
|
[FieldOffset(152)] public int ColorsCount;
|
|
[FieldOffset(156)] public int BytesToFirstColor;
|
|
[FieldOffset(160)] public int UvCount;
|
|
[FieldOffset(164)] public int UvOffset;
|
|
[FieldOffset(176)] public int BonesPerVertex;
|
|
[FieldOffset(180)] public int ToWeightsOffset;
|
|
[FieldOffset(184)] public int ToBoneIndicesOffset;
|
|
[FieldOffset(192)] public AABB Bounds;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 48)]
|
|
public struct AABB
|
|
{
|
|
[FieldOffset(00)] public float MinX;
|
|
[FieldOffset(04)] public float MinY;
|
|
[FieldOffset(08)] public float MinZ;
|
|
[FieldOffset(16)] public float MaxX;
|
|
[FieldOffset(20)] public float MaxY;
|
|
[FieldOffset(24)] public float MaxZ;
|
|
[FieldOffset(32)] public float CenterX;
|
|
[FieldOffset(36)] public float CenterY;
|
|
[FieldOffset(40)] public float CenterZ;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 160)]
|
|
public struct Node
|
|
{
|
|
[FieldOffset(00)] public int NameOffset;
|
|
[FieldOffset(12)] public int MeshIndex;
|
|
[FieldOffset(16)] public int ParentIndex;
|
|
[FieldOffset(32)] public MDSMatrix Matrix;
|
|
[FieldOffset(96)] public MDSMatrix Bindpose;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 96)]
|
|
public struct Material
|
|
{
|
|
[FieldOffset(48)] public int NameOffset;
|
|
[FieldOffset(52)] public int TextureNameOffset;
|
|
[FieldOffset(64)] public int NoName;
|
|
[FieldOffset(80)] public int MaterialType;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 32)]
|
|
public struct TriangleGroupHeader
|
|
{
|
|
[FieldOffset(00)] public short ToNext;
|
|
[FieldOffset(04)] public short TriangleReadMode;
|
|
[FieldOffset(06)] public short IdsCount;
|
|
[FieldOffset(16)] public short HeaderSize;
|
|
|
|
public TriangleReadMode ReadMode => (TriangleReadMode)TriangleReadMode;
|
|
}
|