Skip to content

Commit 320ea6a

Browse files
committed
Figured out how to include some missing parts of TSTLT models, though these new parts don't render correctly at all yet.
1 parent 16f098b commit 320ea6a

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

FinModelUtility/Games/MarioArtist/MarioArtist/src/010/tstlt.bt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -430,11 +430,14 @@ typedef struct (uint fSegmentOffset) {
430430
typedef struct (uint fSegmentOffset) {
431431
uint meshSegmentedAddresses[4] <bgcolor=COLOR_OFFSET>;
432432

433-
local uint firstMeshSegmentedAddress = meshSegmentedAddresses[0];
434-
if (firstMeshSegmentedAddress != 0) {
435-
local uint meshOffset = fSegmentOffset + (firstMeshSegmentedAddress & 0xffffff);
433+
local uint meshI;
434+
local uint meshOffset;
435+
local uint tempOffset;
436+
for (meshI = 0; meshI < 4; ++meshI) {
437+
meshOffset = fSegmentOffset + (meshSegmentedAddresses[meshI] & 0xffffff);;
438+
436439
if (meshOffset < FileSize()) {
437-
local uint tempOffset = FTell();
440+
tempOffset = FTell();
438441
FSeek(meshOffset);
439442
uint firstMeshUint;
440443
if (firstMeshUint == 0) {

FinModelUtility/Games/MarioArtist/MarioArtist/src/api/TstltModelLoader.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -619,9 +619,6 @@ private static IReadOnlyList<IMesh> TryToAddChosenPart0Tuple_(
619619
var (meshSegmentedAddress,
620620
vertexDlSegmentedAddress,
621621
primitiveDlSegmentedAddress) = tuples[i];
622-
if (primitiveDlSegmentedAddress == 0) {
623-
continue;
624-
}
625622

626623
if (meshSegmentedAddress != 0 &&
627624
n64Hardware.Memory
@@ -644,7 +641,20 @@ private static IReadOnlyList<IMesh> TryToAddChosenPart0Tuple_(
644641
var imageSectionOffset = sbr.ReadUInt32();
645642
var vertexSectionOffset = sbr.ReadUInt32();
646643

647-
sbr.Position = meshBaseOffset + 4 * 14;
644+
sbr.Position = meshBaseOffset + 4 * 12;
645+
var primitiveDlOffset = sbr.ReadUInt32();
646+
var vertexDlOffset = sbr.ReadUInt32();
647+
648+
// Not really sure why, but sometimes these aren't set.
649+
if (primitiveDlSegmentedAddress == 0) {
650+
primitiveDlSegmentedAddress
651+
= meshSegmentedAddress + primitiveDlOffset;
652+
}
653+
654+
if (vertexDlSegmentedAddress == 0) {
655+
vertexDlSegmentedAddress = meshSegmentedAddress + vertexDlOffset;
656+
}
657+
648658
var imageCount = sbr.ReadUInt16();
649659

650660
n64Hardware.Memory.SetSegment(
@@ -687,6 +697,10 @@ private static IReadOnlyList<IMesh> TryToAddChosenPart0Tuple_(
687697
: chosenPart0.Pattern0MaterialType);
688698
}
689699

700+
if (primitiveDlSegmentedAddress == 0) {
701+
continue;
702+
}
703+
690704
n64Hardware.Rsp.CullingMode
691705
= GetCullingModeForChosenPartId_(chosenPart0.Id);
692706

0 commit comments

Comments
 (0)