Decompile modelGetNodeData

This commit is contained in:
Ryan Dwyer 2020-06-29 22:30:01 +10:00
parent d672e3c71f
commit 29b52fec83
13 changed files with 797 additions and 466 deletions

View File

@ -1963,7 +1963,7 @@ glabel var7f1a8720
/* f02011c: 46081182 */ mul.s $f6,$f2,$f8
/* f020120: 15a10005 */ bne $t5,$at,.L0f020138
/* f020124: e60600b0 */ swc1 $f6,0xb0($s0)
/* f020128: 0c006a87 */ jal func0001aa1c
/* f020128: 0c006a87 */ jal modelGetNodeData
/* f02012c: 8fa40120 */ lw $a0,0x120($sp)
/* f020130: c44a0028 */ lwc1 $f10,0x28($v0)
/* f020134: e44a0038 */ swc1 $f10,0x38($v0)
@ -2560,8 +2560,8 @@ struct prop *func0f020b14(struct prop *prop, struct model *model,
nodetype = chr->model->unk08->rootnode->type;
if ((nodetype & 0xff) == MODELNODETYPE_ROOT) {
struct model10 *thing = func0001aa1c(chr->model, chr->model->unk08->rootnode);
thing->ground = ground;
struct modeldata_root *data = modelGetNodeData(chr->model, chr->model->unk08->rootnode);
data->ground = ground;
}
chr->prevpos.x = prop->pos.x;
@ -5919,7 +5919,7 @@ glabel var7f1a87d8
/* f0243e0: 24010017 */ addiu $at,$zero,0x17
/* f0243e4: 55c10036 */ bnel $t6,$at,.L0f0244c0
/* f0243e8: 8fb801f0 */ lw $t8,0x1f0($sp)
/* f0243ec: 0c006a87 */ jal func0001aa1c
/* f0243ec: 0c006a87 */ jal modelGetNodeData
/* f0243f0: 8fa40208 */ lw $a0,0x208($sp)
/* f0243f4: 8c490000 */ lw $t1,0x0($v0)
/* f0243f8: 24050001 */ addiu $a1,$zero,0x1
@ -5929,7 +5929,7 @@ glabel var7f1a87d8
/* f024408: 8c440000 */ lw $a0,0x0($v0)
/* f02440c: 1040002b */ beqz $v0,.L0f0244bc
/* f024410: 00402825 */ or $a1,$v0,$zero
/* f024414: 0c006a87 */ jal func0001aa1c
/* f024414: 0c006a87 */ jal modelGetNodeData
/* f024418: 8fa40208 */ lw $a0,0x208($sp)
/* f02441c: 8faa0200 */ lw $t2,0x200($sp)
/* f024420: 10000026 */ b .L0f0244bc
@ -6034,14 +6034,14 @@ void chrSetHudpieceVisible(struct chrdata *chr, bool visible)
struct modelnode *node = modelGetPart(model08, MODELPART_HUDPIECE);
if (node && node->type == MODELNODETYPE_HEADSPOT) {
struct model10 *model10 = func0001aa1c(chr->model, node);
struct modeldata_headspot *data = modelGetNodeData(chr->model, node);
if (model10->unk00.model08) {
struct modelnode *node2 = modelGetPart(model10->unk00.model08, MODELPART_HUDPIECE);
if (data->model08) {
struct modelnode *node2 = modelGetPart(data->model08, MODELPART_HUDPIECE);
if (node2) {
model10 = func0001aa1c(chr->model, node2);
model10->unk00.u32 = visible;
struct modeldata_partid *data2 = modelGetNodeData(chr->model, node2);
data2->visible.u32 = visible;
}
}
}
@ -7368,11 +7368,11 @@ glabel var7f1a8900
/* f0259b4: 10400013 */ beqz $v0,.L0f025a04
/* f0259b8: 8fa40118 */ lw $a0,0x118($sp)
/* f0259bc: 00c02825 */ or $a1,$a2,$zero
/* f0259c0: 0c006a87 */ jal func0001aa1c
/* f0259c0: 0c006a87 */ jal modelGetNodeData
/* f0259c4: afa2007c */ sw $v0,0x7c($sp)
/* f0259c8: 8fa5007c */ lw $a1,0x7c($sp)
/* f0259cc: afa20078 */ sw $v0,0x78($sp)
/* f0259d0: 0c006a87 */ jal func0001aa1c
/* f0259d0: 0c006a87 */ jal modelGetNodeData
/* f0259d4: 8fa40118 */ lw $a0,0x118($sp)
/* f0259d8: 82040007 */ lb $a0,0x7($s0)
/* f0259dc: 38830004 */ xori $v1,$a0,0x4
@ -7414,7 +7414,7 @@ glabel var7f1a8900
/* f025a5c: 24010017 */ addiu $at,$zero,0x17
/* f025a60: 55610027 */ bnel $t3,$at,.L0f025b00
/* f025a64: 920c02fe */ lbu $t4,0x2fe($s0)
/* f025a68: 0c006a87 */ jal func0001aa1c
/* f025a68: 0c006a87 */ jal modelGetNodeData
/* f025a6c: 8fa40118 */ lw $a0,0x118($sp)
/* f025a70: 8c4e0000 */ lw $t6,0x0($v0)
/* f025a74: 24050002 */ addiu $a1,$zero,0x2
@ -7434,11 +7434,11 @@ glabel var7f1a8900
/* f025aac: 10400013 */ beqz $v0,.L0f025afc
/* f025ab0: 8fa40118 */ lw $a0,0x118($sp)
/* f025ab4: 00c02825 */ or $a1,$a2,$zero
/* f025ab8: 0c006a87 */ jal func0001aa1c
/* f025ab8: 0c006a87 */ jal modelGetNodeData
/* f025abc: afa20064 */ sw $v0,0x64($sp)
/* f025ac0: 8fa50064 */ lw $a1,0x64($sp)
/* f025ac4: afa20060 */ sw $v0,0x60($sp)
/* f025ac8: 0c006a87 */ jal func0001aa1c
/* f025ac8: 0c006a87 */ jal modelGetNodeData
/* f025acc: 8fa40118 */ lw $a0,0x118($sp)
/* f025ad0: 82040007 */ lb $a0,0x7($s0)
/* f025ad4: 38830004 */ xori $v1,$a0,0x4
@ -7930,7 +7930,7 @@ glabel func0f0260c4
/* f0261c4: 8ca20014 */ lw $v0,0x14($a1)
.L0f0261c8:
/* f0261c8: 8cb20004 */ lw $s2,0x4($a1)
/* f0261cc: 0c006a87 */ jal func0001aa1c
/* f0261cc: 0c006a87 */ jal modelGetNodeData
/* f0261d0: afa50110 */ sw $a1,0x110($sp)
/* f0261d4: 8c440004 */ lw $a0,0x4($v0)
/* f0261d8: 8fa50110 */ lw $a1,0x110($sp)
@ -8153,7 +8153,7 @@ glabel func0f0260c4
/* f0264e8: 8ca20014 */ lw $v0,0x14($a1)
/* f0264ec: 8cb20004 */ lw $s2,0x4($a1)
.L0f0264f0:
/* f0264f0: 0c006a87 */ jal func0001aa1c
/* f0264f0: 0c006a87 */ jal modelGetNodeData
/* f0264f4: afa50110 */ sw $a1,0x110($sp)
/* f0264f8: 8c440004 */ lw $a0,0x4($v0)
/* f0264fc: 00408025 */ or $s0,$v0,$zero
@ -8528,7 +8528,7 @@ glabel var7f1a8944
/* f0269b4: 8ca20014 */ lw $v0,0x14($a1)
.L0f0269b8:
/* f0269b8: 8cb20004 */ lw $s2,0x4($a1)
/* f0269bc: 0c006a87 */ jal func0001aa1c
/* f0269bc: 0c006a87 */ jal modelGetNodeData
/* f0269c0: afa500fc */ sw $a1,0xfc($sp)
/* f0269c4: 8c440004 */ lw $a0,0x4($v0)
/* f0269c8: 8fa500fc */ lw $a1,0xfc($sp)
@ -8784,7 +8784,7 @@ glabel var7f1a8944
/* f026d4c: 1160002a */ beqz $t3,.L0f026df8
/* f026d50: 00000000 */ nop
/* f026d54: 8cb20004 */ lw $s2,0x4($a1)
/* f026d58: 0c006a87 */ jal func0001aa1c
/* f026d58: 0c006a87 */ jal modelGetNodeData
/* f026d5c: afa500fc */ sw $a1,0xfc($sp)
/* f026d60: 8c440004 */ lw $a0,0x4($v0)
/* f026d64: 00408025 */ or $s0,$v0,$zero
@ -9093,7 +9093,7 @@ glabel func0f0270f4
/* f0271b0: 8ca90004 */ lw $t1,0x4($a1)
.L0f0271b4:
/* f0271b4: afa500a4 */ sw $a1,0xa4($sp)
/* f0271b8: 0c006a87 */ jal func0001aa1c
/* f0271b8: 0c006a87 */ jal modelGetNodeData
/* f0271bc: afa900a0 */ sw $t1,0xa0($sp)
/* f0271c0: 8c4a0004 */ lw $t2,0x4($v0)
/* f0271c4: 0040a025 */ or $s4,$v0,$zero
@ -15430,7 +15430,7 @@ glabel func0f02ccb4
.L0f02cd48:
/* f02cd48: 50a00011 */ beqzl $a1,.L0f02cd90
/* f02cd4c: 26100004 */ addiu $s0,$s0,0x4
/* f02cd50: 0c006a87 */ jal func0001aa1c
/* f02cd50: 0c006a87 */ jal modelGetNodeData
/* f02cd54: 02602025 */ or $a0,$s3,$zero
/* f02cd58: 16140007 */ bne $s0,$s4,.L0f02cd78
/* f02cd5c: 00000000 */ nop

View File

@ -8898,7 +8898,7 @@ glabel var7f1a8dac
/* f0377d4: afa5003c */ sw $a1,0x3c($sp)
/* f0377d8: 8e040020 */ lw $a0,0x20($s0)
/* f0377dc: 8c8f0008 */ lw $t7,0x8($a0)
/* f0377e0: 0c006a87 */ jal func0001aa1c
/* f0377e0: 0c006a87 */ jal modelGetNodeData
/* f0377e4: 8de50000 */ lw $a1,0x0($t7)
/* f0377e8: c7b20108 */ lwc1 $f18,0x108($sp)
/* f0377ec: 2401000e */ addiu $at,$zero,0xe
@ -14966,7 +14966,7 @@ glabel var7f1a8fc8
/* f03f4e4: 8da40020 */ lw $a0,0x20($t5)
/* f03f4e8: 8c8c0008 */ lw $t4,0x8($a0)
/* f03f4ec: 8d850000 */ lw $a1,0x0($t4)
/* f03f4f0: 0c006a87 */ jal func0001aa1c
/* f03f4f0: 0c006a87 */ jal modelGetNodeData
/* f03f4f4: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f4f8: 44801000 */ mtc1 $zero,$f2
/* f03f4fc: c440005c */ lwc1 $f0,0x5c($v0)
@ -18618,7 +18618,7 @@ void chrTickAttackAmount(struct chrdata *chr)
void robotSetMuzzleFlash(struct chrdata *chr, bool right, bool enabled)
{
struct modelnode *node;
struct model10 *model10;
struct modeldata_partid *data;
s32 partnum;
if (right) {
@ -18630,12 +18630,12 @@ void robotSetMuzzleFlash(struct chrdata *chr, bool right, bool enabled)
node = modelGetPart(chr->model->unk08, partnum);
if (node) {
model10 = func0001aa1c(chr->model, node);
data = modelGetNodeData(chr->model, node);
}
// @dangerous: model10 may be uninitialised
if (model10) {
model10->unk00.u16 = enabled;
// @dangerous: data may be uninitialised
if (data) {
data->visible.u16 = enabled;
}
}
@ -19727,7 +19727,7 @@ glabel chrTickAttackRoll
/* f043750: 00000000 */ nop
/* f043754: 8c880008 */ lw $t0,0x8($a0)
/* f043758: 8d050000 */ lw $a1,0x0($t0)
/* f04375c: 0c006a87 */ jal func0001aa1c
/* f04375c: 0c006a87 */ jal modelGetNodeData
/* f043760: e7a20034 */ swc1 $f2,0x34($sp)
/* f043764: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043768: e442005c */ swc1 $f2,0x5c($v0)
@ -26523,7 +26523,7 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, s16 *rooms, f32 arg3,
s16 rooms2[8];
bool result = false;
u32 nodetype;
struct model10 *model10;
struct modeldata_root *data;
struct player *player;
f32 ground;
@ -26553,8 +26553,8 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, s16 *rooms, f32 arg3,
nodetype = chr->model->unk08->rootnode->type;
if ((nodetype & 0xff) == MODELNODETYPE_ROOT) {
model10 = func0001aa1c(chr->model, chr->model->unk08->rootnode);
model10->ground = ground;
data = modelGetNodeData(chr->model, chr->model->unk08->rootnode);
data->ground = ground;
}
chr->chrflags |= CHRCFLAG_00000001;
@ -27833,15 +27833,15 @@ void chrToggleModelPart(struct chrdata *chr, s32 partnum)
{
if (chr && chr->model && chr->model->unk08) {
struct modelnode *node = modelGetPart(chr->model->unk08, partnum);
struct model10 *model10 = NULL;
struct modeldata_partid *data = NULL;
if (node) {
model10 = func0001aa1c(chr->model, node);
data = modelGetNodeData(chr->model, node);
}
if (model10) {
bool visible = model10->unk00.u32;
model10->unk00.u32 = !visible;
if (data) {
bool visible = data->visible.u32;
data->visible.u32 = !visible;
}
}
}

View File

@ -4401,7 +4401,7 @@ glabel var7f1a8224
/* f00fdcc: 8cc40008 */ lw $a0,0x8($a2)
/* f00fdd0: 10400008 */ beqz $v0,.L0f00fdf4
/* f00fdd4: 00402825 */ or $a1,$v0,$zero
/* f00fdd8: 0c006a87 */ jal func0001aa1c
/* f00fdd8: 0c006a87 */ jal modelGetNodeData
/* f00fddc: 8e440018 */ lw $a0,0x18($s2)
/* f00fde0: 8e4c0008 */ lw $t4,0x8($s2)
/* f00fde4: 3c011000 */ lui $at,0x1000

View File

@ -371,7 +371,7 @@ glabel var7f1a8a84
/* f02d2ec: 00002825 */ or $a1,$zero,$zero
/* f02d2f0: 10400004 */ beqz $v0,.L0f02d304
/* f02d2f4: 00402825 */ or $a1,$v0,$zero
/* f02d2f8: 0c006a87 */ jal func0001aa1c
/* f02d2f8: 0c006a87 */ jal modelGetNodeData
/* f02d2fc: 8fa4005c */ lw $a0,0x5c($sp)
/* f02d300: ac400000 */ sw $zero,0x0($v0)
.L0f02d304:
@ -380,7 +380,7 @@ glabel var7f1a8a84
/* f02d30c: 24050004 */ addiu $a1,$zero,0x4
/* f02d310: 10400004 */ beqz $v0,.L0f02d324
/* f02d314: 00402825 */ or $a1,$v0,$zero
/* f02d318: 0c006a87 */ jal func0001aa1c
/* f02d318: 0c006a87 */ jal modelGetNodeData
/* f02d31c: 8fa4005c */ lw $a0,0x5c($sp)
/* f02d320: ac400000 */ sw $zero,0x0($v0)
.L0f02d324:

View File

@ -13857,7 +13857,7 @@ glabel var7f1ac7c4
/* f0a2f0c: 00000000 */ nop
/* f0a2f10: 8e120004 */ lw $s2,0x4($s0)
/* f0a2f14: 02802025 */ or $a0,$s4,$zero
/* f0a2f18: 0c006a87 */ jal func0001aa1c
/* f0a2f18: 0c006a87 */ jal modelGetNodeData
/* f0a2f1c: 02002825 */ or $a1,$s0,$zero
/* f0a2f20: ac400000 */ sw $zero,0x0($v0)
/* f0a2f24: 8e580008 */ lw $t8,0x8($s2)
@ -13872,7 +13872,7 @@ glabel var7f1ac7c4
/* f0a2f48: ae39fffc */ sw $t9,-0x4($s1)
/* f0a2f4c: 8e120004 */ lw $s2,0x4($s0)
/* f0a2f50: 02802025 */ or $a0,$s4,$zero
/* f0a2f54: 0c006a87 */ jal func0001aa1c
/* f0a2f54: 0c006a87 */ jal modelGetNodeData
/* f0a2f58: 02002825 */ or $a1,$s0,$zero
/* f0a2f5c: ac550000 */ sw $s5,0x0($v0)
/* f0a2f60: 8e480000 */ lw $t0,0x0($s2)
@ -13886,7 +13886,7 @@ glabel var7f1ac7c4
/* f0a2f80: 1000003b */ b .L0f0a3070
/* f0a2f84: ae29fffc */ sw $t1,-0x4($s1)
/* f0a2f88: 02802025 */ or $a0,$s4,$zero
/* f0a2f8c: 0c006a87 */ jal func0001aa1c
/* f0a2f8c: 0c006a87 */ jal modelGetNodeData
/* f0a2f90: 02002825 */ or $a1,$s0,$zero
/* f0a2f94: ac400000 */ sw $zero,0x0($v0)
/* f0a2f98: ac400004 */ sw $zero,0x4($v0)
@ -13897,7 +13897,7 @@ glabel var7f1ac7c4
/* f0a2fac: 10000030 */ b .L0f0a3070
/* f0a2fb0: 26730008 */ addiu $s3,$s3,0x8
/* f0a2fb4: 02802025 */ or $a0,$s4,$zero
/* f0a2fb8: 0c006a87 */ jal func0001aa1c
/* f0a2fb8: 0c006a87 */ jal modelGetNodeData
/* f0a2fbc: 02002825 */ or $a1,$s0,$zero
/* f0a2fc0: a4400000 */ sh $zero,0x0($v0)
/* f0a2fc4: 240b0003 */ addiu $t3,$zero,0x3
@ -13907,7 +13907,7 @@ glabel var7f1ac7c4
/* f0a2fd4: 10000026 */ b .L0f0a3070
/* f0a2fd8: 26730008 */ addiu $s3,$s3,0x8
/* f0a2fdc: 02802025 */ or $a0,$s4,$zero
/* f0a2fe0: 0c006a87 */ jal func0001aa1c
/* f0a2fe0: 0c006a87 */ jal modelGetNodeData
/* f0a2fe4: 02002825 */ or $a1,$s0,$zero
/* f0a2fe8: a4400000 */ sh $zero,0x0($v0)
/* f0a2fec: 240c0004 */ addiu $t4,$zero,0x4
@ -13918,7 +13918,7 @@ glabel var7f1ac7c4
/* f0a3000: 26730008 */ addiu $s3,$s3,0x8
/* f0a3004: 8e120004 */ lw $s2,0x4($s0)
/* f0a3008: 02802025 */ or $a0,$s4,$zero
/* f0a300c: 0c006a87 */ jal func0001aa1c
/* f0a300c: 0c006a87 */ jal modelGetNodeData
/* f0a3010: 02002825 */ or $a1,$s0,$zero
/* f0a3014: 8e4d000c */ lw $t5,0xc($s2)
/* f0a3018: 26310014 */ addiu $s1,$s1,0x14
@ -19112,7 +19112,7 @@ glabel var7f1aca90
/* f0a7568: 0c006a47 */ jal modelGetPart
/* f0a756c: 24050011 */ addiu $a1,$zero,0x11
/* f0a7570: 8fa4003c */ lw $a0,0x3c($sp)
/* f0a7574: 0c006a87 */ jal func0001aa1c
/* f0a7574: 0c006a87 */ jal modelGetNodeData
/* f0a7578: 00402825 */ or $a1,$v0,$zero
/* f0a757c: 10400003 */ beqz $v0,.L0f0a758c
/* f0a7580: 3c06800a */ lui $a2,%hi(var8009cf88)

View File

@ -2209,13 +2209,13 @@ glabel func0f0b7c60
/* f0b7f20: 3c054140 */ lui $a1,0x4140
/* f0b7f24: 8e040020 */ lw $a0,0x20($s0)
/* f0b7f28: 8c880008 */ lw $t0,0x8($a0)
/* f0b7f2c: 0c006a87 */ jal func0001aa1c
/* f0b7f2c: 0c006a87 */ jal modelGetNodeData
/* f0b7f30: 8d050000 */ lw $a1,0x0($t0)
/* f0b7f34: 8fa9003c */ lw $t1,0x3c($sp)
/* f0b7f38: afa20040 */ sw $v0,0x40($sp)
/* f0b7f3c: 8d240020 */ lw $a0,0x20($t1)
/* f0b7f40: 8c8a0008 */ lw $t2,0x8($a0)
/* f0b7f44: 0c006a87 */ jal func0001aa1c
/* f0b7f44: 0c006a87 */ jal modelGetNodeData
/* f0b7f48: 8d450000 */ lw $a1,0x0($t2)
/* f0b7f4c: 8fab0040 */ lw $t3,0x40($sp)
/* f0b7f50: 3c014120 */ lui $at,0x4120

View File

@ -4574,7 +4574,7 @@ glabel var7f1b2948
/* f0f459c: 1040000d */ beqz $v0,.L0f0f45d4
/* f0f45a0: 00402825 */ or $a1,$v0,$zero
/* f0f45a4: 8fa4003c */ lw $a0,0x3c($sp)
/* f0f45a8: 0c006a87 */ jal func0001aa1c
/* f0f45a8: 0c006a87 */ jal modelGetNodeData
/* f0f45ac: afa3028c */ sw $v1,0x28c($sp)
/* f0f45b0: 10400008 */ beqz $v0,.L0f0f45d4
/* f0f45b4: 8fa3028c */ lw $v1,0x28c($sp)

View File

@ -4610,7 +4610,7 @@ glabel func0f069cd8
/* f069d00: 260500c9 */ addiu $a1,$s0,0xc9
/* f069d04: 10400006 */ beqz $v0,.L0f069d20
/* f069d08: 00402825 */ or $a1,$v0,$zero
/* f069d0c: 0c006a87 */ jal func0001aa1c
/* f069d0c: 0c006a87 */ jal modelGetNodeData
/* f069d10: 02202025 */ or $a0,$s1,$zero
/* f069d14: 26100001 */ addiu $s0,$s0,0x1
/* f069d18: 1612fff7 */ bne $s0,$s2,.L0f069cf8
@ -4908,7 +4908,7 @@ glabel var7f1aa1fc
/* f06a118: 8d040008 */ lw $a0,0x8($t0)
/* f06a11c: 10400004 */ beqz $v0,.L0f06a130
/* f06a120: 00402825 */ or $a1,$v0,$zero
/* f06a124: 0c006a87 */ jal func0001aa1c
/* f06a124: 0c006a87 */ jal modelGetNodeData
/* f06a128: 8e040018 */ lw $a0,0x18($s0)
/* f06a12c: ac400000 */ sw $zero,0x0($v0)
.L0f06a130:
@ -4919,7 +4919,7 @@ glabel var7f1aa1fc
/* f06a140: 24a500c9 */ addiu $a1,$a1,0xc9
/* f06a144: 10400005 */ beqz $v0,.L0f06a15c
/* f06a148: 00402825 */ or $a1,$v0,$zero
/* f06a14c: 0c006a87 */ jal func0001aa1c
/* f06a14c: 0c006a87 */ jal modelGetNodeData
/* f06a150: 8e040018 */ lw $a0,0x18($s0)
/* f06a154: 240d0001 */ addiu $t5,$zero,0x1
/* f06a158: ac4d0000 */ sw $t5,0x0($v0)
@ -7162,7 +7162,7 @@ glabel var7f1aa264
/* f06c088: 12e00034 */ beqz $s7,.L0f06c15c
/* f06c08c: 02602025 */ or $a0,$s3,$zero
/* f06c090: 8e110004 */ lw $s1,0x4($s0)
/* f06c094: 0c006a87 */ jal func0001aa1c
/* f06c094: 0c006a87 */ jal modelGetNodeData
/* f06c098: 02002825 */ or $a1,$s0,$zero
/* f06c09c: 8c430004 */ lw $v1,0x4($v0)
/* f06c0a0: 1060002e */ beqz $v1,.L0f06c15c
@ -19793,7 +19793,7 @@ glabel func0f07731c
/* f0773d8: 0c006a47 */ jal modelGetPart
/* f0773dc: afa30024 */ sw $v1,0x24($sp)
/* f0773e0: 8fa40020 */ lw $a0,0x20($sp)
/* f0773e4: 0c006a87 */ jal func0001aa1c
/* f0773e4: 0c006a87 */ jal modelGetNodeData
/* f0773e8: 00402825 */ or $a1,$v0,$zero
/* f0773ec: 8c4f0000 */ lw $t7,0x0($v0)
/* f0773f0: 8fa30024 */ lw $v1,0x24($sp)
@ -20166,7 +20166,7 @@ glabel var7f1aa454
/* f07790c: 304d00ff */ andi $t5,$v0,0xff
/* f077910: 55a100ab */ bnel $t5,$at,.L0f077bc0
/* f077914: 8fac00b8 */ lw $t4,0xb8($sp)
/* f077918: 0c006a87 */ jal func0001aa1c
/* f077918: 0c006a87 */ jal modelGetNodeData
/* f07791c: 00000000 */ nop
/* f077920: c6aa0004 */ lwc1 $f10,0x4($s5)
/* f077924: c6c40004 */ lwc1 $f4,0x4($s6)
@ -23977,7 +23977,7 @@ glabel var7f1aa5a8
/* f07ac78: 8da40008 */ lw $a0,0x8($t5)
/* f07ac7c: 10400005 */ beqz $v0,.L0f07ac94
/* f07ac80: 00402825 */ or $a1,$v0,$zero
/* f07ac84: 0c006a87 */ jal func0001aa1c
/* f07ac84: 0c006a87 */ jal modelGetNodeData
/* f07ac88: 8fa40184 */ lw $a0,0x184($sp)
/* f07ac8c: 8fae018c */ lw $t6,0x18c($sp)
/* f07ac90: a44e0000 */ sh $t6,0x0($v0)
@ -23988,7 +23988,7 @@ glabel var7f1aa5a8
/* f07aca0: 8d640008 */ lw $a0,0x8($t3)
/* f07aca4: 10400005 */ beqz $v0,.L0f07acbc
/* f07aca8: 00402825 */ or $a1,$v0,$zero
/* f07acac: 0c006a87 */ jal func0001aa1c
/* f07acac: 0c006a87 */ jal modelGetNodeData
/* f07acb0: 8fa40184 */ lw $a0,0x184($sp)
/* f07acb4: 8fb80188 */ lw $t8,0x188($sp)
/* f07acb8: a4580000 */ sh $t8,0x0($v0)
@ -24787,7 +24787,7 @@ glabel var7f1aa610
/* f07b93c: 8d240008 */ lw $a0,0x8($t1)
/* f07b940: 10400004 */ beqz $v0,.L0f07b954
/* f07b944: 00402825 */ or $a1,$v0,$zero
/* f07b948: 0c006a87 */ jal func0001aa1c
/* f07b948: 0c006a87 */ jal modelGetNodeData
/* f07b94c: 8fa40114 */ lw $a0,0x114($sp)
/* f07b950: afa200d4 */ sw $v0,0xd4($sp)
.L0f07b954:
@ -27553,10 +27553,10 @@ void func0f07e058(struct prop *prop)
struct modelnode *node = modelGetPart(model->unk08, MODELPART_006E);
if (node) {
struct model10 *model10 = func0001aa1c(model, node);
struct modeldata_partid *data = modelGetNodeData(model, node);
u32 flags = obj->flags;
model10->unk00.u32 = (flags & OBJFLAG_DEACTIVATED) == 0;
data->visible.u32 = (flags & OBJFLAG_DEACTIVATED) == 0;
}
}
@ -28877,7 +28877,7 @@ glabel var7f1aa824
/* f07fc68: afb800ac */ sw $t8,0xac($sp)
/* f07fc6c: 8e290004 */ lw $t1,0x4($s1)
/* f07fc70: 02202825 */ or $a1,$s1,$zero
/* f07fc74: 0c006a87 */ jal func0001aa1c
/* f07fc74: 0c006a87 */ jal modelGetNodeData
/* f07fc78: afa900a8 */ sw $t1,0xa8($sp)
/* f07fc7c: 3c017f1b */ lui $at,%hi(var7f1aa7cc)
/* f07fc80: c43aa7cc */ lwc1 $f26,%lo(var7f1aa7cc)($at)
@ -30671,7 +30671,7 @@ glabel var7f1aa82c
/* f081664: 8c460004 */ lw $a2,0x4($v0)
/* f081668: 8e040018 */ lw $a0,0x18($s0)
/* f08166c: 00402825 */ or $a1,$v0,$zero
/* f081670: 0c006a87 */ jal func0001aa1c
/* f081670: 0c006a87 */ jal modelGetNodeData
/* f081674: afa60060 */ sw $a2,0x60($sp)
/* f081678: 8fa60060 */ lw $a2,0x60($sp)
/* f08167c: afa2005c */ sw $v0,0x5c($sp)
@ -34516,7 +34516,7 @@ glabel var7f1aaa00
/* f084a70: 00000000 */ nop
/* f084a74: 8e110004 */ lw $s1,0x4($s0)
/* f084a78: 02c02025 */ or $a0,$s6,$zero
/* f084a7c: 0c006a87 */ jal func0001aa1c
/* f084a7c: 0c006a87 */ jal modelGetNodeData
/* f084a80: 02002825 */ or $a1,$s0,$zero
/* f084a84: 8c430004 */ lw $v1,0x4($v0)
/* f084a88: 1060002b */ beqz $v1,.L0f084b38
@ -34852,7 +34852,7 @@ glabel func0f084e58
/* f084f3c: 0c006a47 */ jal modelGetPart
/* f084f40: 8d840008 */ lw $a0,0x8($t4)
/* f084f44: 8fa40088 */ lw $a0,0x88($sp)
/* f084f48: 0c006a87 */ jal func0001aa1c
/* f084f48: 0c006a87 */ jal modelGetNodeData
/* f084f4c: 00402825 */ or $a1,$v0,$zero
/* f084f50: ac400000 */ sw $zero,0x0($v0)
.L0f084f54:
@ -34916,7 +34916,7 @@ glabel func0f084f64
/* f085024: 0c006a47 */ jal modelGetPart
/* f085028: 24050003 */ addiu $a1,$zero,0x3
/* f08502c: 02202025 */ or $a0,$s1,$zero
/* f085030: 0c006a87 */ jal func0001aa1c
/* f085030: 0c006a87 */ jal modelGetNodeData
/* f085034: 00402825 */ or $a1,$v0,$zero
/* f085038: ac400000 */ sw $zero,0x0($v0)
/* f08503c: 8fbf0034 */ lw $ra,0x34($sp)
@ -39799,7 +39799,7 @@ glabel func0f089a94
/* f089b18: 8e020014 */ lw $v0,0x14($s0)
.L0f089b1c:
/* f089b1c: 8e110004 */ lw $s1,0x4($s0)
/* f089b20: 0c006a87 */ jal func0001aa1c
/* f089b20: 0c006a87 */ jal modelGetNodeData
/* f089b24: 02002825 */ or $a1,$s0,$zero
/* f089b28: 00409025 */ or $s2,$v0,$zero
/* f089b2c: 02c02025 */ or $a0,$s6,$zero
@ -42227,7 +42227,7 @@ glabel func0f08bb5c
/* f08bbb8: 00002825 */ or $a1,$zero,$zero
/* f08bbbc: 1040000a */ beqz $v0,.L0f08bbe8
/* f08bbc0: 00402825 */ or $a1,$v0,$zero
/* f08bbc4: 0c006a87 */ jal func0001aa1c
/* f08bbc4: 0c006a87 */ jal modelGetNodeData
/* f08bbc8: 02002025 */ or $a0,$s0,$zero
/* f08bbcc: 8fb9003c */ lw $t9,0x3c($sp)
/* f08bbd0: 24090001 */ addiu $t1,$zero,0x1
@ -42243,7 +42243,7 @@ glabel func0f08bb5c
/* f08bbf0: 24050002 */ addiu $a1,$zero,0x2
/* f08bbf4: 1040000a */ beqz $v0,.L0f08bc20
/* f08bbf8: 00402825 */ or $a1,$v0,$zero
/* f08bbfc: 0c006a87 */ jal func0001aa1c
/* f08bbfc: 0c006a87 */ jal modelGetNodeData
/* f08bc00: 02002025 */ or $a0,$s0,$zero
/* f08bc04: 8faa003c */ lw $t2,0x3c($sp)
/* f08bc08: 240c0001 */ addiu $t4,$zero,0x1
@ -42293,7 +42293,7 @@ glabel func0f08bc5c
/* f08bc98: 8fa60018 */ lw $a2,0x18($sp)
/* f08bc9c: 10400005 */ beqz $v0,.L0f08bcb4
/* f08bca0: 00402825 */ or $a1,$v0,$zero
/* f08bca4: 0c006a87 */ jal func0001aa1c
/* f08bca4: 0c006a87 */ jal modelGetNodeData
/* f08bca8: 00c02025 */ or $a0,$a2,$zero
/* f08bcac: 1000000d */ b .L0f08bce4
/* f08bcb0: 84420000 */ lh $v0,0x0($v0)
@ -42305,7 +42305,7 @@ glabel func0f08bc5c
/* f08bcc4: 8fa60018 */ lw $a2,0x18($sp)
/* f08bcc8: 10400005 */ beqz $v0,.L0f08bce0
/* f08bccc: 00402825 */ or $a1,$v0,$zero
/* f08bcd0: 0c006a87 */ jal func0001aa1c
/* f08bcd0: 0c006a87 */ jal modelGetNodeData
/* f08bcd4: 00c02025 */ or $a0,$a2,$zero
/* f08bcd8: 10000002 */ b .L0f08bce4
/* f08bcdc: 8c420000 */ lw $v0,0x0($v0)
@ -43984,7 +43984,7 @@ glabel func0f08d3dc
/* f08d408: 8c580004 */ lw $t8,0x4($v0)
/* f08d40c: 00402825 */ or $a1,$v0,$zero
/* f08d410: afb80028 */ sw $t8,0x28($sp)
/* f08d414: 0c006a87 */ jal func0001aa1c
/* f08d414: 0c006a87 */ jal modelGetNodeData
/* f08d418: 8e040018 */ lw $a0,0x18($s0)
/* f08d41c: 8fb90028 */ lw $t9,0x28($sp)
/* f08d420: afa20024 */ sw $v0,0x24($sp)
@ -44022,7 +44022,7 @@ glabel func0f08d460
/* f08d48c: 8c430004 */ lw $v1,0x4($v0)
/* f08d490: 8e040018 */ lw $a0,0x18($s0)
/* f08d494: 00402825 */ or $a1,$v0,$zero
/* f08d498: 0c006a87 */ jal func0001aa1c
/* f08d498: 0c006a87 */ jal modelGetNodeData
/* f08d49c: afa30028 */ sw $v1,0x28($sp)
/* f08d4a0: 8e0600a4 */ lw $a2,0xa4($s0)
/* f08d4a4: 8c580000 */ lw $t8,0x0($v0)
@ -48389,16 +48389,16 @@ void objSetModelPartVisible(struct defaultobj *obj, s32 partnum, bool visible)
struct modelnode *node = modelGetPart(obj->model->unk08, partnum);
if (node) {
struct model10 *model10 = func0001aa1c(obj->model, node);
struct modeldata_partid *data = modelGetNodeData(obj->model, node);
if (model10) {
if (data) {
if (visible) {
visible = true;
} else {
visible = false;
}
model10->unk00.u32 = visible;
data->visible.u32 = visible;
}
}
}

View File

@ -1453,7 +1453,7 @@ glabel func0f017248
/* f0172cc: 0c006a47 */ jal modelGetPart
/* f0172d0: 8ee40008 */ lw $a0,0x8($s7)
/* f0172d4: 02e02025 */ or $a0,$s7,$zero
/* f0172d8: 0c006a87 */ jal func0001aa1c
/* f0172d8: 0c006a87 */ jal modelGetNodeData
/* f0172dc: 00402825 */ or $a1,$v0,$zero
/* f0172e0: 8fac0158 */ lw $t4,0x158($sp)
/* f0172e4: 24050001 */ addiu $a1,$zero,0x1
@ -1461,7 +1461,7 @@ glabel func0f017248
/* f0172ec: 0c006a47 */ jal modelGetPart
/* f0172f0: 8ee40008 */ lw $a0,0x8($s7)
/* f0172f4: 02e02025 */ or $a0,$s7,$zero
/* f0172f8: 0c006a87 */ jal func0001aa1c
/* f0172f8: 0c006a87 */ jal modelGetNodeData
/* f0172fc: 00402825 */ or $a1,$v0,$zero
/* f017300: 3c014780 */ lui $at,0x4780
/* f017304: 44812000 */ mtc1 $at,$f4
@ -1599,14 +1599,14 @@ glabel func0f017248
/* f0174d8: 8e150004 */ lw $s5,0x4($s0)
/* f0174dc: 8cd10004 */ lw $s1,0x4($a2)
/* f0174e0: 02e02025 */ or $a0,$s7,$zero
/* f0174e4: 0c006a87 */ jal func0001aa1c
/* f0174e4: 0c006a87 */ jal modelGetNodeData
/* f0174e8: 02002825 */ or $a1,$s0,$zero
/* f0174ec: 10000006 */ b .L0f017508
/* f0174f0: 86af0010 */ lh $t7,0x10($s5)
.L0f0174f4:
/* f0174f4: 8cd50004 */ lw $s5,0x4($a2)
/* f0174f8: 8e110004 */ lw $s1,0x4($s0)
/* f0174fc: 0c006a87 */ jal func0001aa1c
/* f0174fc: 0c006a87 */ jal modelGetNodeData
/* f017500: 00c02825 */ or $a1,$a2,$zero
/* f017504: 86af0010 */ lh $t7,0x10($s5)
.L0f017508:
@ -2846,7 +2846,7 @@ glabel var7f1a8468
/* f01871c: 94cf0016 */ lhu $t7,0x16($a2)
/* f018720: afa60164 */ sw $a2,0x164($sp)
/* f018724: 25ee0001 */ addiu $t6,$t7,0x1
/* f018728: 0c006a87 */ jal func0001aa1c
/* f018728: 0c006a87 */ jal modelGetNodeData
/* f01872c: afae00d8 */ sw $t6,0xd8($sp)
/* f018730: afa20160 */ sw $v0,0x160($sp)
/* f018734: 0fc59e7d */ jal func0f1679f4
@ -2895,7 +2895,7 @@ glabel var7f1a8468
/* f0187dc: afa60164 */ sw $a2,0x164($sp)
/* f0187e0: 01eec021 */ addu $t8,$t7,$t6
/* f0187e4: 27190001 */ addiu $t9,$t8,0x1
/* f0187e8: 0c006a87 */ jal func0001aa1c
/* f0187e8: 0c006a87 */ jal modelGetNodeData
/* f0187ec: afb900d8 */ sw $t9,0xd8($sp)
/* f0187f0: afa20160 */ sw $v0,0x160($sp)
/* f0187f4: 0fc59e7d */ jal func0f1679f4
@ -2957,7 +2957,7 @@ glabel var7f1a8468
/* f0188cc: afa60164 */ sw $a2,0x164($sp)
/* f0188d0: 032f7021 */ addu $t6,$t9,$t7
/* f0188d4: 25d80001 */ addiu $t8,$t6,0x1
/* f0188d8: 0c006a87 */ jal func0001aa1c
/* f0188d8: 0c006a87 */ jal modelGetNodeData
/* f0188dc: afb800d8 */ sw $t8,0xd8($sp)
/* f0188e0: afa20160 */ sw $v0,0x160($sp)
/* f0188e4: 0fc59e7d */ jal func0f1679f4
@ -3019,7 +3019,7 @@ glabel var7f1a8468
/* f0189bc: afa60164 */ sw $a2,0x164($sp)
/* f0189c0: 03197821 */ addu $t7,$t8,$t9
/* f0189c4: 25ee0001 */ addiu $t6,$t7,0x1
/* f0189c8: 0c006a87 */ jal func0001aa1c
/* f0189c8: 0c006a87 */ jal modelGetNodeData
/* f0189cc: afae00d8 */ sw $t6,0xd8($sp)
/* f0189d0: afa20160 */ sw $v0,0x160($sp)
/* f0189d4: 0fc59e7d */ jal func0f1679f4
@ -4258,7 +4258,7 @@ glabel var7f1a84bc
/* f01a100: 0c006a47 */ jal modelGetPart
/* f01a104: 8f240008 */ lw $a0,0x8($t9)
/* f01a108: 8e640000 */ lw $a0,0x0($s3)
/* f01a10c: 0c006a87 */ jal func0001aa1c
/* f01a10c: 0c006a87 */ jal modelGetNodeData
/* f01a110: 00402825 */ or $a1,$v0,$zero
/* f01a114: 50400003 */ beqzl $v0,.L0f01a124
/* f01a118: 8e780000 */ lw $t8,0x0($s3)
@ -4269,7 +4269,7 @@ glabel var7f1a84bc
/* f01a128: 0c006a47 */ jal modelGetPart
/* f01a12c: 8f040008 */ lw $a0,0x8($t8)
/* f01a130: 8e640000 */ lw $a0,0x0($s3)
/* f01a134: 0c006a87 */ jal func0001aa1c
/* f01a134: 0c006a87 */ jal modelGetNodeData
/* f01a138: 00402825 */ or $a1,$v0,$zero
/* f01a13c: 10400002 */ beqz $v0,.L0f01a148
/* f01a140: 24080001 */ addiu $t0,$zero,0x1
@ -4280,7 +4280,7 @@ glabel var7f1a84bc
/* f01a150: 0c006a47 */ jal modelGetPart
/* f01a154: 8de40008 */ lw $a0,0x8($t7)
/* f01a158: 8e640000 */ lw $a0,0x0($s3)
/* f01a15c: 0c006a87 */ jal func0001aa1c
/* f01a15c: 0c006a87 */ jal modelGetNodeData
/* f01a160: 00402825 */ or $a1,$v0,$zero
/* f01a164: 10400002 */ beqz $v0,.L0f01a170
/* f01a168: 3c12bc00 */ lui $s2,0xbc00
@ -4320,7 +4320,7 @@ glabel var7f1a84bc
/* f01a1ec: 0c006a47 */ jal modelGetPart
/* f01a1f0: 8d640008 */ lw $a0,0x8($t3)
/* f01a1f4: 8e640000 */ lw $a0,0x0($s3)
/* f01a1f8: 0c006a87 */ jal func0001aa1c
/* f01a1f8: 0c006a87 */ jal modelGetNodeData
/* f01a1fc: 00402825 */ or $a1,$v0,$zero
/* f01a200: 10400002 */ beqz $v0,.L0f01a20c
/* f01a204: 240d0001 */ addiu $t5,$zero,0x1
@ -4331,7 +4331,7 @@ glabel var7f1a84bc
/* f01a214: 0c006a47 */ jal modelGetPart
/* f01a218: 8f240008 */ lw $a0,0x8($t9)
/* f01a21c: 8e640000 */ lw $a0,0x0($s3)
/* f01a220: 0c006a87 */ jal func0001aa1c
/* f01a220: 0c006a87 */ jal modelGetNodeData
/* f01a224: 00402825 */ or $a1,$v0,$zero
/* f01a228: 50400003 */ beqzl $v0,.L0f01a238
/* f01a22c: 8e780000 */ lw $t8,0x0($s3)
@ -4342,7 +4342,7 @@ glabel var7f1a84bc
/* f01a23c: 0c006a47 */ jal modelGetPart
/* f01a240: 8f040008 */ lw $a0,0x8($t8)
/* f01a244: 8e640000 */ lw $a0,0x0($s3)
/* f01a248: 0c006a87 */ jal func0001aa1c
/* f01a248: 0c006a87 */ jal modelGetNodeData
/* f01a24c: 00402825 */ or $a1,$v0,$zero
/* f01a250: 10400003 */ beqz $v0,.L0f01a260
/* f01a254: 26830008 */ addiu $v1,$s4,0x8

View File

@ -1458,8 +1458,14 @@
#define MODEL_CETANDOORSIDE 0x01b7
#define MODEL_BUDDYBRIDGE 0x01b8
#define MODELNODETYPE_ROOT 0x01
#define MODELNODETYPE_HEADSPOT 0x17
#define MODELNODETYPE_ROOT 0x01
#define MODELNODETYPE_DISPLAYLIST 0x18
#define MODELNODETYPE_NEARFAR 0x08
#define MODELNODETYPE_PARTID 0x12
#define MODELNODETYPE_HAT 0x09
#define MODELNODETYPE_0B 0x0b
#define MODELNODETYPE_GUNFIRE 0x0c
#define MODELNODETYPE_HEADSPOT 0x17
#define MODELPART_MUZZLEFLASHRIGHT 0x0002
#define MODELPART_MUZZLEFLASHLEFT 0x0003

View File

@ -17,7 +17,7 @@ u32 func0001a85c(void);
struct modelnode *modelGetPart(struct model08 *arg0, s32 partnum);
struct modelthing *func0001a9bc(void *modelfiledata, s32 arg1);
u32 func0001a9e8(void);
struct model10 *func0001aa1c(struct model *model, struct modelnode *node);
void *modelGetNodeData(struct model *model, struct modelnode *node);
u32 func0001ab0c(void);
u32 func0001abc4(void);
void func0001ad0c(struct model *model, struct coord *coord);

View File

@ -155,9 +155,105 @@ struct stagethinglist {
u16 *things;
};
struct modelnode_root { // type 0x01
u32 modeltype;
f32 unk04;
u16 index;
};
struct modelnode_position { // type 0x02
struct coord pos;
u16 part;
s16 piece0;
s16 piece1;
s16 piece2;
f32 drawdist;
};
struct modelnode_nearfar { // type 0x08
f32 near;
f32 far;
u32 target;
u16 index;
};
struct modelnode_hat { // type 0x09
u32 unk00;
u32 unk04;
u32 unk08;
u32 unk0c;
u32 unk10;
u32 unk14;
u32 unk18;
u32 unk1c;
u16 unk20;
u16 index;
};
struct modelnode_0b { // type 0x0b
u32 unk00;
u32 unk04;
u32 unk08;
u32 unk0c;
u32 unk10;
u32 unk14;
u32 unk18;
u32 unk1c;
u32 unk20;
u32 unk24;
u32 unk28;
u32 unk2c;
u32 unk30;
u32 unk34;
u32 unk38;
u32 unk3c;
u32 unk40;
u16 index;
};
struct modelnode_gunfire { // type 0x0c
struct coord pos;
struct coord dim;
u32 texture;
f32 unk1c;
u16 index;
};
struct modelnode_partid { // type 0x12
u32 target;
u16 index;
};
struct modelnode_headspot { // type 0x17
u16 index;
};
struct modelnode_displaylist { // type 0x18
u32 primary;
u32 secondary;
u32 unk08;
u32 ptable;
u16 pcount;
u16 mcount;
u16 index;
};
struct modelnode {
u16 type;
u32 unk04;
union {
struct modelnode_root *root;
struct modelnode_position *position;
struct modelnode_nearfar *nearfar;
struct modelnode_hat *hat;
struct modelnode_0b *unk0b;
struct modelnode_gunfire *gunfire;
struct modelnode_partid *partid;
struct modelnode_headspot *headspot;
struct modelnode_displaylist *displaylist;
} data;
struct modelnode *relation; // unsure if parent or child
};
struct model08 {
@ -190,29 +286,36 @@ struct model0c {
/*0x38*/ f32 unk38;
};
// Suspected to be multiple structs, or a union based on the node type
struct model10 {
union {
u16 u16;
u32 u32;
struct model08 *model08;
} unk00;
f32 ground;
};
struct model {
/*0x00*/ u8 unk00;
/*0x01*/ u8 unk01;
/*0x04*/ struct chrdata *chr;
/*0x08*/ struct model08 *unk08;
/*0x0c*/ struct model0c *unk0c;
/*0x10*/ struct model10 *unk10;
/*0x10*/ void *datas; // array of pointers to modeldata structs
/*0x14*/ f32 unk14;
/*0x18*/ u32 unk18;
/*0x1c*/ u32 unk1c;
/*0x20*/ struct anim *anim;
};
struct modeldata_root { // type 0x01
u32 unk00;
f32 ground;
};
struct modeldata_partid { // type 0x12
union {
u16 u16;
bool u32;
} visible;
};
struct modeldata_headspot { // type 0x17
struct model08 *model08;
void *datas;
};
struct waypoint {
s32 padnum;
};

File diff suppressed because it is too large Load Diff