Decompile func0001c950

This commit is contained in:
Ryan Dwyer 2021-04-28 21:54:24 +10:00
parent 74d5977c74
commit f7f9fb8c98
3 changed files with 55 additions and 129 deletions

View File

@ -44,7 +44,7 @@ void func0001c784(struct model *model, struct modelnode *node);
void func0001c7d0(struct model *model, struct modelnode *node);
void modelAttachHead(struct model *model, struct modelnode *node);
u32 func0001c868(void);
u32 func0001c924(void);
void func0001c924(struct model *model, struct modelnode *node);
void func0001c950(struct model *model, struct modelnode *node);
void func0001cb0c(struct model *model, struct modelnode *node);
u32 func0001cc20(void);

View File

@ -535,15 +535,13 @@ struct modelrodata_nearfar { // type 0x08
};
struct modelrodata_hat { // type 0x09
u32 unk00;
u32 unk04;
u32 unk08;
u32 unk0c;
u32 unk10;
u32 unk14;
f32 unk00;
f32 unk04;
f32 unk08;
f32 unk0c[3];
u32 unk18;
u32 unk1c;
u16 unk20;
s16 unk20;
u16 rwdataindex;
};
@ -701,6 +699,10 @@ struct modelrwdata_05 {
bool unk00;
};
struct modelrwdata_hat {
bool visible;
};
struct modelrwdata_headspot { // type 0x17
struct modelfiledata *modelfiledata;
void *rwdatas;
@ -709,6 +711,7 @@ struct modelrwdata_headspot { // type 0x17
union modelrwdata {
struct modelrwdata_root root;
struct modelrwdata_nearfar nearfar;
struct modelrwdata_hat hat;
struct modelrwdata_partid partid;
struct modelrwdata_05 type05;
struct modelrwdata_headspot headspot;

View File

@ -3267,127 +3267,50 @@ glabel func0001c924
/* 1c94c: 00000000 */ nop
);
GLOBAL_ASM(
glabel func0001c950
/* 1c950: 27bdffb0 */ addiu $sp,$sp,-80
/* 1c954: afbf001c */ sw $ra,0x1c($sp)
/* 1c958: afb00018 */ sw $s0,0x18($sp)
/* 1c95c: afa40050 */ sw $a0,0x50($sp)
/* 1c960: 8cb00004 */ lw $s0,0x4($a1)
/* 1c964: 0c006a87 */ jal modelGetNodeRwData
/* 1c968: afa50054 */ sw $a1,0x54($sp)
/* 1c96c: afa20048 */ sw $v0,0x48($sp)
/* 1c970: 8fa40050 */ lw $a0,0x50($sp)
/* 1c974: 8fa50054 */ lw $a1,0x54($sp)
/* 1c978: 0c006973 */ jal func0001a5cc
/* 1c97c: 00003025 */ or $a2,$zero,$zero
/* 1c980: 86030020 */ lh $v1,0x20($s0)
/* 1c984: 00402025 */ or $a0,$v0,$zero
/* 1c988: 24010002 */ addiu $at,$zero,0x2
/* 1c98c: 1460000c */ bnez $v1,.L0001c9c0
/* 1c990: 00000000 */ nop
/* 1c994: c604000c */ lwc1 $f4,0xc($s0)
/* 1c998: 27a50038 */ addiu $a1,$sp,0x38
/* 1c99c: e7a40038 */ swc1 $f4,0x38($sp)
/* 1c9a0: c6060010 */ lwc1 $f6,0x10($s0)
/* 1c9a4: e7a6003c */ swc1 $f6,0x3c($sp)
/* 1c9a8: c6080014 */ lwc1 $f8,0x14($s0)
/* 1c9ac: afa40044 */ sw $a0,0x44($sp)
/* 1c9b0: 0c0056c4 */ jal func00015b10
/* 1c9b4: e7a80040 */ swc1 $f8,0x40($sp)
/* 1c9b8: 1000002f */ b .L0001ca78
/* 1c9bc: 8fa40044 */ lw $a0,0x44($sp)
.L0001c9c0:
/* 1c9c0: 5461000f */ bnel $v1,$at,.L0001ca00
/* 1c9c4: 24010003 */ addiu $at,$zero,0x3
/* 1c9c8: c60a0010 */ lwc1 $f10,0x10($s0)
/* 1c9cc: c4500010 */ lwc1 $f16,0x10($v0)
/* 1c9d0: 46105482 */ mul.s $f18,$f10,$f16
/* 1c9d4: e7b20038 */ swc1 $f18,0x38($sp)
/* 1c9d8: c6040010 */ lwc1 $f4,0x10($s0)
/* 1c9dc: c4460014 */ lwc1 $f6,0x14($v0)
/* 1c9e0: 46062202 */ mul.s $f8,$f4,$f6
/* 1c9e4: e7a8003c */ swc1 $f8,0x3c($sp)
/* 1c9e8: c4500018 */ lwc1 $f16,0x18($v0)
/* 1c9ec: c60a0010 */ lwc1 $f10,0x10($s0)
/* 1c9f0: 46105482 */ mul.s $f18,$f10,$f16
/* 1c9f4: 10000020 */ b .L0001ca78
/* 1c9f8: e7b20040 */ swc1 $f18,0x40($sp)
/* 1c9fc: 24010003 */ addiu $at,$zero,0x3
.L0001ca00:
/* 1ca00: 5461000f */ bnel $v1,$at,.L0001ca40
/* 1ca04: 24010001 */ addiu $at,$zero,0x1
/* 1ca08: c6040014 */ lwc1 $f4,0x14($s0)
/* 1ca0c: c4460020 */ lwc1 $f6,0x20($v0)
/* 1ca10: 46062202 */ mul.s $f8,$f4,$f6
/* 1ca14: e7a80038 */ swc1 $f8,0x38($sp)
/* 1ca18: c60a0014 */ lwc1 $f10,0x14($s0)
/* 1ca1c: c4500024 */ lwc1 $f16,0x24($v0)
/* 1ca20: 46105482 */ mul.s $f18,$f10,$f16
/* 1ca24: e7b2003c */ swc1 $f18,0x3c($sp)
/* 1ca28: c4460028 */ lwc1 $f6,0x28($v0)
/* 1ca2c: c6040014 */ lwc1 $f4,0x14($s0)
/* 1ca30: 46062202 */ mul.s $f8,$f4,$f6
/* 1ca34: 10000010 */ b .L0001ca78
/* 1ca38: e7a80040 */ swc1 $f8,0x40($sp)
/* 1ca3c: 24010001 */ addiu $at,$zero,0x1
.L0001ca40:
/* 1ca40: 5461000e */ bnel $v1,$at,.L0001ca7c
/* 1ca44: c6040000 */ lwc1 $f4,0x0($s0)
/* 1ca48: c60a000c */ lwc1 $f10,0xc($s0)
/* 1ca4c: c4500000 */ lwc1 $f16,0x0($v0)
/* 1ca50: 46105482 */ mul.s $f18,$f10,$f16
/* 1ca54: e7b20038 */ swc1 $f18,0x38($sp)
/* 1ca58: c604000c */ lwc1 $f4,0xc($s0)
/* 1ca5c: c4460004 */ lwc1 $f6,0x4($v0)
/* 1ca60: 46062202 */ mul.s $f8,$f4,$f6
/* 1ca64: e7a8003c */ swc1 $f8,0x3c($sp)
/* 1ca68: c4500008 */ lwc1 $f16,0x8($v0)
/* 1ca6c: c60a000c */ lwc1 $f10,0xc($s0)
/* 1ca70: 46105482 */ mul.s $f18,$f10,$f16
/* 1ca74: e7b20040 */ swc1 $f18,0x40($sp)
.L0001ca78:
/* 1ca78: c6040000 */ lwc1 $f4,0x0($s0)
.L0001ca7c:
/* 1ca7c: 27a5002c */ addiu $a1,$sp,0x2c
/* 1ca80: e7a4002c */ swc1 $f4,0x2c($sp)
/* 1ca84: c6060004 */ lwc1 $f6,0x4($s0)
/* 1ca88: e7a60030 */ swc1 $f6,0x30($sp)
/* 1ca8c: c6080008 */ lwc1 $f8,0x8($s0)
/* 1ca90: 0c0056d9 */ jal func00015b64
/* 1ca94: e7a80034 */ swc1 $f8,0x34($sp)
/* 1ca98: c7aa0038 */ lwc1 $f10,0x38($sp)
/* 1ca9c: c7b0002c */ lwc1 $f16,0x2c($sp)
/* 1caa0: c7a4003c */ lwc1 $f4,0x3c($sp)
/* 1caa4: c7a60030 */ lwc1 $f6,0x30($sp)
/* 1caa8: 46105482 */ mul.s $f18,$f10,$f16
/* 1caac: c7b00034 */ lwc1 $f16,0x34($sp)
/* 1cab0: 8faf0048 */ lw $t7,0x48($sp)
/* 1cab4: 46062202 */ mul.s $f8,$f4,$f6
/* 1cab8: c7a40040 */ lwc1 $f4,0x40($sp)
/* 1cabc: 8fb80048 */ lw $t8,0x48($sp)
/* 1cac0: 46048182 */ mul.s $f6,$f16,$f4
/* 1cac4: 46089280 */ add.s $f10,$f18,$f8
/* 1cac8: 44809000 */ mtc1 $zero,$f18
/* 1cacc: 460a3000 */ add.s $f0,$f6,$f10
/* 1cad0: 4612003c */ c.lt.s $f0,$f18
/* 1cad4: 00000000 */ nop
/* 1cad8: 45000003 */ bc1f .L0001cae8
/* 1cadc: 240e0001 */ addiu $t6,$zero,0x1
/* 1cae0: 10000002 */ b .L0001caec
/* 1cae4: adee0000 */ sw $t6,0x0($t7)
.L0001cae8:
/* 1cae8: af000000 */ sw $zero,0x0($t8)
.L0001caec:
/* 1caec: 8fa40050 */ lw $a0,0x50($sp)
/* 1caf0: 0c007249 */ jal func0001c924
/* 1caf4: 8fa50054 */ lw $a1,0x54($sp)
/* 1caf8: 8fbf001c */ lw $ra,0x1c($sp)
/* 1cafc: 8fb00018 */ lw $s0,0x18($sp)
/* 1cb00: 27bd0050 */ addiu $sp,$sp,0x50
/* 1cb04: 03e00008 */ jr $ra
/* 1cb08: 00000000 */ nop
);
void func0001c950(struct model *model, struct modelnode *node)
{
union modelrodata *rodata = node->rodata;
union modelrwdata *rwdata = modelGetNodeRwData(model, node);
Mtxf *mtx = func0001a5cc(model, node, 0);
struct coord sp38;
struct coord sp2c;
f32 tmp;
if (rodata->hat.unk20 == 0) {
sp38.x = rodata->hat.unk0c[0];
sp38.y = rodata->hat.unk0c[1];
sp38.z = rodata->hat.unk0c[2];
func00015b10(mtx, &sp38);
} else if (rodata->hat.unk20 == 2) {
sp38.x = mtx->m[1][0] * rodata->hat.unk0c[1];
sp38.y = mtx->m[1][1] * rodata->hat.unk0c[1];
sp38.z = mtx->m[1][2] * rodata->hat.unk0c[1];
} else if (rodata->hat.unk20 == 3) {
sp38.x = mtx->m[2][0] * rodata->hat.unk0c[2];
sp38.y = mtx->m[2][1] * rodata->hat.unk0c[2];
sp38.z = mtx->m[2][2] * rodata->hat.unk0c[2];
} else if (rodata->hat.unk20 == 1) {
sp38.x = mtx->m[0][0] * rodata->hat.unk0c[0];
sp38.y = mtx->m[0][1] * rodata->hat.unk0c[0];
sp38.z = mtx->m[0][2] * rodata->hat.unk0c[0];
}
sp2c.x = rodata->hat.unk00;
sp2c.y = rodata->hat.unk04;
sp2c.z = rodata->hat.unk08;
func00015b64(mtx, &sp2c);
tmp = sp38.f[0] * sp2c.f[0] + sp38.f[1] * sp2c.f[1] + sp38.f[2] * sp2c.f[2];
if (tmp < 0) {
rwdata->hat.visible = true;
} else {
rwdata->hat.visible = false;
}
func0001c924(model, node);
}
void func0001cb0c(struct model *model, struct modelnode *parent)
{