Decompile func0002319c
This commit is contained in:
parent
9673015f71
commit
025769ab96
|
|
@ -99,7 +99,7 @@ void modelInitRwData(struct model *model, struct modelnode *node);
|
|||
void modelInit(struct model *model, struct modelfiledata *filedata, union modelrwdata **rwdatas, bool resetanim);
|
||||
void animInit(struct anim *anim);
|
||||
u32 func00023108(void);
|
||||
u32 func0002319c(void);
|
||||
void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedataptr, Gfx **gdlptr);
|
||||
void modelNodeReplaceGdl(u32 arg0, struct modelnode *node, Gfx *find, Gfx *replacement);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -534,8 +534,8 @@ struct modelrodata_position { // type 0x02
|
|||
};
|
||||
|
||||
struct modelrodata_gundl { // type 0x04
|
||||
Gfx *unk00;
|
||||
Gfx *unk04;
|
||||
Gfx *primary;
|
||||
Gfx *secondary;
|
||||
void *baseaddr;
|
||||
void *unk0c;
|
||||
u16 unk10;
|
||||
|
|
|
|||
244
src/lib/model.c
244
src/lib/model.c
|
|
@ -5557,7 +5557,7 @@ void modelRenderNodeGundl(struct modelrenderdata *renderdata, struct model *mode
|
|||
return;
|
||||
}
|
||||
|
||||
if ((renderdata->flags & 1) && rodata->unk00) {
|
||||
if ((renderdata->flags & 1) && rodata->primary) {
|
||||
gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->baseaddr));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
|
|
@ -5579,16 +5579,16 @@ void modelRenderNodeGundl(struct modelrenderdata *renderdata, struct model *mode
|
|||
break;
|
||||
}
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->unk00);
|
||||
gSPDisplayList(renderdata->gdl++, rodata->primary);
|
||||
|
||||
if (rodata->unk12 == 3 && rodata->unk04) {
|
||||
if (rodata->unk12 == 3 && rodata->secondary) {
|
||||
func0001f890(renderdata, false);
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->unk04);
|
||||
gSPDisplayList(renderdata->gdl++, rodata->secondary);
|
||||
}
|
||||
}
|
||||
|
||||
if ((renderdata->flags & 2) && rodata->unk00 && rodata->unk12 == 4 && rodata->unk04) {
|
||||
if ((renderdata->flags & 2) && rodata->primary && rodata->unk12 == 4 && rodata->secondary) {
|
||||
gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->baseaddr));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
|
|
@ -5597,7 +5597,7 @@ void modelRenderNodeGundl(struct modelrenderdata *renderdata, struct model *mode
|
|||
|
||||
func00020248(renderdata, false);
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->unk04);
|
||||
gSPDisplayList(renderdata->gdl++, rodata->secondary);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7585,157 +7585,79 @@ glabel func00023108
|
|||
/* 23198: 00000000 */ nop
|
||||
);
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0002319c
|
||||
.late_rodata
|
||||
glabel var70054638
|
||||
.word func0002319c+0x064
|
||||
glabel var7005463c
|
||||
.word func0002319c+0x108
|
||||
glabel var70054640
|
||||
.word func0002319c+0x108
|
||||
glabel var70054644
|
||||
.word func0002319c+0x108
|
||||
glabel var70054648
|
||||
.word func0002319c+0x0dc
|
||||
glabel var7005464c
|
||||
.word func0002319c+0x0fc
|
||||
glabel var70054650
|
||||
.word func0002319c+0x108
|
||||
glabel var70054654
|
||||
.word func0002319c+0x108
|
||||
glabel var70054658
|
||||
.word func0002319c+0x108
|
||||
glabel var7005465c
|
||||
.word func0002319c+0x108
|
||||
glabel var70054660
|
||||
.word func0002319c+0x108
|
||||
glabel var70054664
|
||||
.word func0002319c+0x108
|
||||
glabel var70054668
|
||||
.word func0002319c+0x108
|
||||
glabel var7005466c
|
||||
.word func0002319c+0x108
|
||||
glabel var70054670
|
||||
.word func0002319c+0x0ec
|
||||
glabel var70054674
|
||||
.word func0002319c+0x108
|
||||
glabel var70054678
|
||||
.word func0002319c+0x108
|
||||
glabel var7005467c
|
||||
.word func0002319c+0x108
|
||||
glabel var70054680
|
||||
.word func0002319c+0x0c4
|
||||
glabel var70054684
|
||||
.word func0002319c+0x108
|
||||
glabel var70054688
|
||||
.word func0002319c+0x094
|
||||
.text
|
||||
/* 2319c: 27bdffd8 */ addiu $sp,$sp,-40
|
||||
/* 231a0: afbf0024 */ sw $ra,0x24($sp)
|
||||
/* 231a4: afb30020 */ sw $s3,0x20($sp)
|
||||
/* 231a8: afb2001c */ sw $s2,0x1c($sp)
|
||||
/* 231ac: afb10018 */ sw $s1,0x18($sp)
|
||||
/* 231b0: afb00014 */ sw $s0,0x14($sp)
|
||||
/* 231b4: 8cb00000 */ lw $s0,0x0($a1)
|
||||
/* 231b8: 00a09025 */ or $s2,$a1,$zero
|
||||
/* 231bc: 00c09825 */ or $s3,$a2,$zero
|
||||
/* 231c0: 16000002 */ bnez $s0,.L000231cc
|
||||
/* 231c4: 00008825 */ or $s1,$zero,$zero
|
||||
/* 231c8: 8c900000 */ lw $s0,0x0($a0)
|
||||
.L000231cc:
|
||||
/* 231cc: 52000049 */ beqzl $s0,.L000232f4
|
||||
/* 231d0: ae710000 */ sw $s1,0x0($s3)
|
||||
/* 231d4: 96020000 */ lhu $v0,0x0($s0)
|
||||
.L000231d8:
|
||||
/* 231d8: 304e00ff */ andi $t6,$v0,0xff
|
||||
/* 231dc: 25cffffc */ addiu $t7,$t6,-4
|
||||
/* 231e0: 2de10015 */ sltiu $at,$t7,0x15
|
||||
/* 231e4: 1020002f */ beqz $at,.L000232a4
|
||||
/* 231e8: 000f7880 */ sll $t7,$t7,0x2
|
||||
/* 231ec: 3c017005 */ lui $at,%hi(var70054638)
|
||||
/* 231f0: 002f0821 */ addu $at,$at,$t7
|
||||
/* 231f4: 8c2f4638 */ lw $t7,%lo(var70054638)($at)
|
||||
/* 231f8: 01e00008 */ jr $t7
|
||||
/* 231fc: 00000000 */ nop
|
||||
/* 23200: 8e580000 */ lw $t8,0x0($s2)
|
||||
/* 23204: 8e020004 */ lw $v0,0x4($s0)
|
||||
/* 23208: 52180004 */ beql $s0,$t8,.L0002321c
|
||||
/* 2320c: 8c430004 */ lw $v1,0x4($v0)
|
||||
/* 23210: 10000024 */ b .L000232a4
|
||||
/* 23214: 8c510000 */ lw $s1,0x0($v0)
|
||||
/* 23218: 8c430004 */ lw $v1,0x4($v0)
|
||||
.L0002321c:
|
||||
/* 2321c: 8e790000 */ lw $t9,0x0($s3)
|
||||
/* 23220: 10790020 */ beq $v1,$t9,.L000232a4
|
||||
/* 23224: 00000000 */ nop
|
||||
/* 23228: 1000001e */ b .L000232a4
|
||||
/* 2322c: 00608825 */ or $s1,$v1,$zero
|
||||
/* 23230: 8e480000 */ lw $t0,0x0($s2)
|
||||
/* 23234: 8e020004 */ lw $v0,0x4($s0)
|
||||
/* 23238: 52080004 */ beql $s0,$t0,.L0002324c
|
||||
/* 2323c: 8c430004 */ lw $v1,0x4($v0)
|
||||
/* 23240: 10000018 */ b .L000232a4
|
||||
/* 23244: 8c510000 */ lw $s1,0x0($v0)
|
||||
/* 23248: 8c430004 */ lw $v1,0x4($v0)
|
||||
.L0002324c:
|
||||
/* 2324c: 8e690000 */ lw $t1,0x0($s3)
|
||||
/* 23250: 10690014 */ beq $v1,$t1,.L000232a4
|
||||
/* 23254: 00000000 */ nop
|
||||
/* 23258: 10000012 */ b .L000232a4
|
||||
/* 2325c: 00608825 */ or $s1,$v1,$zero
|
||||
/* 23260: 8e4a0000 */ lw $t2,0x0($s2)
|
||||
/* 23264: 8e020004 */ lw $v0,0x4($s0)
|
||||
/* 23268: 120a000e */ beq $s0,$t2,.L000232a4
|
||||
/* 2326c: 00000000 */ nop
|
||||
/* 23270: 1000000c */ b .L000232a4
|
||||
/* 23274: 8c510008 */ lw $s1,0x8($v0)
|
||||
/* 23278: 8e020004 */ lw $v0,0x4($s0)
|
||||
/* 2327c: 8c4b0008 */ lw $t3,0x8($v0)
|
||||
/* 23280: 10000008 */ b .L000232a4
|
||||
/* 23284: ae0b0014 */ sw $t3,0x14($s0)
|
||||
/* 23288: 8e020004 */ lw $v0,0x4($s0)
|
||||
/* 2328c: 8c4c0000 */ lw $t4,0x0($v0)
|
||||
/* 23290: 10000004 */ b .L000232a4
|
||||
/* 23294: ae0c0014 */ sw $t4,0x14($s0)
|
||||
/* 23298: 02002025 */ or $a0,$s0,$zero
|
||||
/* 2329c: 0c00721a */ jal func0001c868
|
||||
/* 232a0: 24050001 */ addiu $a1,$zero,0x1
|
||||
.L000232a4:
|
||||
/* 232a4: 56200013 */ bnezl $s1,.L000232f4
|
||||
/* 232a8: ae710000 */ sw $s1,0x0($s3)
|
||||
/* 232ac: 8e020014 */ lw $v0,0x14($s0)
|
||||
/* 232b0: 10400003 */ beqz $v0,.L000232c0
|
||||
/* 232b4: 00000000 */ nop
|
||||
/* 232b8: 1000000b */ b .L000232e8
|
||||
/* 232bc: 00408025 */ or $s0,$v0,$zero
|
||||
.L000232c0:
|
||||
/* 232c0: 12000009 */ beqz $s0,.L000232e8
|
||||
/* 232c4: 00000000 */ nop
|
||||
/* 232c8: 8e02000c */ lw $v0,0xc($s0)
|
||||
.L000232cc:
|
||||
/* 232cc: 50400004 */ beqzl $v0,.L000232e0
|
||||
/* 232d0: 8e100008 */ lw $s0,0x8($s0)
|
||||
/* 232d4: 10000004 */ b .L000232e8
|
||||
/* 232d8: 00408025 */ or $s0,$v0,$zero
|
||||
/* 232dc: 8e100008 */ lw $s0,0x8($s0)
|
||||
.L000232e0:
|
||||
/* 232e0: 5600fffa */ bnezl $s0,.L000232cc
|
||||
/* 232e4: 8e02000c */ lw $v0,0xc($s0)
|
||||
.L000232e8:
|
||||
/* 232e8: 5600ffbb */ bnezl $s0,.L000231d8
|
||||
/* 232ec: 96020000 */ lhu $v0,0x0($s0)
|
||||
/* 232f0: ae710000 */ sw $s1,0x0($s3)
|
||||
.L000232f4:
|
||||
/* 232f4: ae500000 */ sw $s0,0x0($s2)
|
||||
/* 232f8: 8fbf0024 */ lw $ra,0x24($sp)
|
||||
/* 232fc: 8fb30020 */ lw $s3,0x20($sp)
|
||||
/* 23300: 8fb2001c */ lw $s2,0x1c($sp)
|
||||
/* 23304: 8fb10018 */ lw $s1,0x18($sp)
|
||||
/* 23308: 8fb00014 */ lw $s0,0x14($sp)
|
||||
/* 2330c: 03e00008 */ jr $ra
|
||||
/* 23310: 27bd0028 */ addiu $sp,$sp,0x28
|
||||
);
|
||||
void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedataptr, Gfx **gdlptr)
|
||||
{
|
||||
struct modelnode *node = filedataptr->rootnode;
|
||||
union modelrodata *rodata;
|
||||
Gfx *gdl = NULL;
|
||||
|
||||
if (node == NULL) {
|
||||
node = filedata->rootnode;
|
||||
}
|
||||
|
||||
while (node) {
|
||||
u32 type = node->type & 0xff;
|
||||
|
||||
switch (type) {
|
||||
case MODELNODETYPE_GUNDL:
|
||||
rodata = node->rodata;
|
||||
|
||||
if (node != filedataptr->rootnode) {
|
||||
gdl = rodata->gundl.primary;
|
||||
} else if (rodata->gundl.secondary != *gdlptr) {
|
||||
gdl = rodata->gundl.secondary;
|
||||
}
|
||||
break;
|
||||
case MODELNODETYPE_DL:
|
||||
rodata = node->rodata;
|
||||
|
||||
if (node != filedataptr->rootnode) {
|
||||
gdl = rodata->dl.primary;
|
||||
} else if (rodata->dl.secondary != *gdlptr) {
|
||||
gdl = rodata->dl.secondary;
|
||||
}
|
||||
break;
|
||||
case MODELNODETYPE_16:
|
||||
rodata = node->rodata;
|
||||
|
||||
if (node != filedataptr->rootnode) {
|
||||
gdl = rodata->type16.unk08;
|
||||
}
|
||||
break;
|
||||
case MODELNODETYPE_DISTANCE:
|
||||
rodata = node->rodata;
|
||||
node->child = rodata->distance.target;
|
||||
break;
|
||||
case MODELNODETYPE_TOGGLE:
|
||||
rodata = node->rodata;
|
||||
node->child = rodata->toggle.target;
|
||||
break;
|
||||
case MODELNODETYPE_REORDER:
|
||||
func0001c868(node, true);
|
||||
break;
|
||||
}
|
||||
|
||||
if (gdl) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (node->child) {
|
||||
node = node->child;
|
||||
} else {
|
||||
while (node) {
|
||||
if (node->next) {
|
||||
node = node->next;
|
||||
break;
|
||||
}
|
||||
|
||||
node = node->parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*gdlptr = gdl;
|
||||
filedataptr->rootnode = node;
|
||||
}
|
||||
|
||||
void modelNodeReplaceGdl(u32 arg0, struct modelnode *node, Gfx *find, Gfx *replacement)
|
||||
{
|
||||
|
|
@ -7746,13 +7668,13 @@ void modelNodeReplaceGdl(u32 arg0, struct modelnode *node, Gfx *find, Gfx *repla
|
|||
case MODELNODETYPE_GUNDL:
|
||||
rodata = node->rodata;
|
||||
|
||||
if (rodata->gundl.unk00 == find) {
|
||||
rodata->gundl.unk00 = replacement;
|
||||
if (rodata->gundl.primary == find) {
|
||||
rodata->gundl.primary = replacement;
|
||||
return;
|
||||
}
|
||||
|
||||
if (rodata->gundl.unk04 == find) {
|
||||
rodata->gundl.unk04 = replacement;
|
||||
if (rodata->gundl.secondary == find) {
|
||||
rodata->gundl.secondary = replacement;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue