Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Marathon/Formats/Ninja/Chunks/ObjectChunk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ void WalkNodes(int in_parentIndex, int in_depth)

WalkNodes(0, result + 1);

// No file ever ends up with a MaxNodeDepth of 0.
// Marathon writing a 0 is what leads to some files having a single byte that is inaccurate to the original file.
if (result == 0)
result = 1;

return result;
}
}
Expand Down
9 changes: 5 additions & 4 deletions Marathon/Formats/Ninja/Flags/VertexFormat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ public enum VertexFormat : uint
NND_VTXTYPE_XB_BINORMAL = 0x100U, // TODO: might be 0x40?
NND_VTXTYPE_XB_MTX_INDEX4 = 0x400U,
NND_VTXTYPE_XB_WEIGHT3 = 0x7000U,
NND_VTXTYPE_XB_TEXCOORD = 0x10000U,
NND_VTXTYPE_XB_PNCT = NND_VTXTYPE_XB_POSITION | NND_VTXTYPE_XB_NORMAL | NND_VTXTYPE_XB_COLOR | NND_VTXTYPE_XB_TEXCOORD,
NND_VTXTYPE_XB_PW4INCT = NND_VTXTYPE_XB_POSITION | NND_VTXTYPE_XB_WEIGHT3 | NND_VTXTYPE_XB_MTX_INDEX4 | NND_VTXTYPE_XB_NORMAL | NND_VTXTYPE_XB_COLOR | NND_VTXTYPE_XB_TEXCOORD,
NND_VTXTYPE_XB_PW4INCTAB = NND_VTXTYPE_XB_POSITION | NND_VTXTYPE_XB_WEIGHT3 | NND_VTXTYPE_XB_MTX_INDEX4 | NND_VTXTYPE_XB_NORMAL | NND_VTXTYPE_XB_COLOR | NND_VTXTYPE_XB_TEXCOORD | NND_VTXTYPE_XB_TANGENT | NND_VTXTYPE_XB_BINORMAL,
NND_VTXTYPE_XB_SINGLETEXCOORD = 0x10000U,
NND_VTXTYPE_XB_DOUBLETEXCOORD = 0x20000U,
NND_VTXTYPE_XB_PNCT = NND_VTXTYPE_XB_POSITION | NND_VTXTYPE_XB_NORMAL | NND_VTXTYPE_XB_COLOR | NND_VTXTYPE_XB_SINGLETEXCOORD,
NND_VTXTYPE_XB_PW4INCT = NND_VTXTYPE_XB_POSITION | NND_VTXTYPE_XB_WEIGHT3 | NND_VTXTYPE_XB_MTX_INDEX4 | NND_VTXTYPE_XB_NORMAL | NND_VTXTYPE_XB_COLOR | NND_VTXTYPE_XB_SINGLETEXCOORD,
NND_VTXTYPE_XB_PW4INCTAB = NND_VTXTYPE_XB_POSITION | NND_VTXTYPE_XB_WEIGHT3 | NND_VTXTYPE_XB_MTX_INDEX4 | NND_VTXTYPE_XB_NORMAL | NND_VTXTYPE_XB_COLOR | NND_VTXTYPE_XB_SINGLETEXCOORD | NND_VTXTYPE_XB_TANGENT | NND_VTXTYPE_XB_BINORMAL,
}
}
4 changes: 2 additions & 2 deletions Marathon/Formats/Ninja/Types/Vertex.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class Vertex

public Vector3? Weight { get; set; }

public byte[] MatrixIndices { get; set; } = new byte[4];
public byte[]? MatrixIndices { get; set; }

public Vector3? Normal { get; set; }

Expand Down Expand Up @@ -54,7 +54,7 @@ public void Read(BinaryObjectReaderEx in_reader, VertexList in_vertexList)
if (in_vertexList.Format.HasFlag(VertexFormat.NND_VTXTYPE_XB_COLOR2))
VertexColourB = in_reader.ReadObject<Colour<byte, RGBA>>();

for (int i = 0; i < (uint)in_vertexList.Format / (uint)VertexFormat.NND_VTXTYPE_XB_TEXCOORD; i++)
for (int i = 0; i < (uint)in_vertexList.Format / (uint)VertexFormat.NND_VTXTYPE_XB_SINGLETEXCOORD; i++)
{
TextureCoordinates ??= [];
TextureCoordinates.Add(in_reader.Read<Vector2>());
Expand Down
12 changes: 11 additions & 1 deletion Marathon/Formats/Ninja/Types/VertexList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,17 @@ public VertexFormat GetVertexFormat()
result |= VertexFormat.NND_VTXTYPE_XB_COLOR2;

if (Vertices[0].TextureCoordinates != null)
result |= VertexFormat.NND_VTXTYPE_XB_TEXCOORD;
{
if (Vertices[0].TextureCoordinates.Count == 1)
result |= VertexFormat.NND_VTXTYPE_XB_SINGLETEXCOORD;
if (Vertices[0].TextureCoordinates.Count == 2)
result |= VertexFormat.NND_VTXTYPE_XB_DOUBLETEXCOORD;
if (Vertices[0].TextureCoordinates.Count == 3)
{
result |= VertexFormat.NND_VTXTYPE_XB_SINGLETEXCOORD;
result |= VertexFormat.NND_VTXTYPE_XB_DOUBLETEXCOORD;
}
}

if (Vertices[0].Tangent != null)
result |= VertexFormat.NND_VTXTYPE_XB_TANGENT;
Expand Down