Decompile chrGetDistanceToPad

This commit is contained in:
Ryan Dwyer 2019-11-08 17:04:09 +10:00
parent 9b0e080cd9
commit d07d0dce22
3 changed files with 38 additions and 45 deletions

View File

@ -2158,7 +2158,7 @@ glabel ai0054
/* f050bf0: 50200011 */ beqzl $at,.L0f050c38
/* f050bf4: 8e0f0438 */ lw $t7,0x438($s0)
/* f050bf8: afa7002c */ sw $a3,0x2c($sp)
/* f050bfc: 0fc124bb */ jal func0f0492ec
/* f050bfc: 0fc124bb */ jal chrGetDistanceToPad
/* f050c00: e7a20020 */ swc1 $f2,0x20($sp)
/* f050c04: c7a20020 */ lwc1 $f2,0x20($sp)
/* f050c08: 8fa7002c */ lw $a3,0x2c($sp)
@ -2300,7 +2300,7 @@ glabel ai0055
/* f050dd4: 00802825 */ or $a1,$a0,$zero
/* f050dd8: 00c02025 */ or $a0,$a2,$zero
/* f050ddc: afa3002c */ sw $v1,0x2c($sp)
/* f050de0: 0fc124bb */ jal func0f0492ec
/* f050de0: 0fc124bb */ jal chrGetDistanceToPad
/* f050de4: e7a20020 */ swc1 $f2,0x20($sp)
/* f050de8: c7a20020 */ lwc1 $f2,0x20($sp)
/* f050dec: 8fa3002c */ lw $v1,0x2c($sp)
@ -2717,7 +2717,7 @@ glabel ai005b
/* f05135c: 8c640004 */ lw $a0,0x4($v1)
/* f051360: afa90048 */ sw $t1,0x48($sp)
/* f051364: afa8004c */ sw $t0,0x4c($sp)
/* f051368: 0fc124bb */ jal func0f0492ec
/* f051368: 0fc124bb */ jal chrGetDistanceToPad
/* f05136c: afa60024 */ sw $a2,0x24($sp)
/* f051370: 3c014316 */ lui $at,0x4316
/* f051374: 44812000 */ mtc1 $at,$f4

View File

@ -53276,7 +53276,7 @@ glabel func0f02e370
.L0f02e3ac:
/* f02e3ac: 53000006 */ beqzl $t8,.L0f02e3c8
/* f02e3b0: 44800000 */ mtc1 $zero,$f0
/* f02e3b4: 0fc124bb */ jal func0f0492ec
/* f02e3b4: 0fc124bb */ jal chrGetDistanceToPad
/* f02e3b8: 00c02825 */ or $a1,$a2,$zero
/* f02e3bc: 10000004 */ beqz $zero,.L0f02e3d0
/* f02e3c0: 8fbf0014 */ lw $ra,0x14($sp)
@ -83876,47 +83876,24 @@ float positionGetLateralDistanceToPosition(struct position *a, struct position *
return sqrtf(xdiff * xdiff + zdiff * zdiff);
}
GLOBAL_ASM(
glabel func0f0492ec
/* f0492ec: 27bdff80 */ addiu $sp,$sp,-128
/* f0492f0: afbf0014 */ sw $ra,0x14($sp)
/* f0492f4: 8c83001c */ lw $v1,0x1c($a0)
/* f0492f8: 44801000 */ mtc1 $zero,$f2
/* f0492fc: afa3007c */ sw $v1,0x7c($sp)
/* f049300: 0fc1258b */ jal padResolve
/* f049304: e7a2006c */ swc1 $f2,0x6c($sp)
/* f049308: 8fa3007c */ lw $v1,0x7c($sp)
/* f04930c: 04400017 */ bltz $v0,.L0f04936c
/* f049310: c7a2006c */ lwc1 $f2,0x6c($sp)
/* f049314: 00402025 */ or $a0,$v0,$zero
/* f049318: 24050002 */ addiu $a1,$zero,0x2
/* f04931c: 27a60018 */ addiu $a2,$sp,0x18
/* f049320: 0fc456ac */ jal padUnpack
/* f049324: afa3007c */ sw $v1,0x7c($sp)
/* f049328: 8fa3007c */ lw $v1,0x7c($sp)
/* f04932c: c7a40018 */ lwc1 $f4,0x18($sp)
/* f049330: c7a8001c */ lwc1 $f8,0x1c($sp)
/* f049334: c4660008 */ lwc1 $f6,0x8($v1)
/* f049338: c46a000c */ lwc1 $f10,0xc($v1)
/* f04933c: c7b00020 */ lwc1 $f16,0x20($sp)
/* f049340: 46062001 */ sub.s $f0,$f4,$f6
/* f049344: c4720010 */ lwc1 $f18,0x10($v1)
/* f049348: 460a4081 */ sub.s $f2,$f8,$f10
/* f04934c: 46000102 */ mul.s $f4,$f0,$f0
/* f049350: 46128381 */ sub.s $f14,$f16,$f18
/* f049354: 46021182 */ mul.s $f6,$f2,$f2
/* f049358: 46062200 */ add.s $f8,$f4,$f6
/* f04935c: 460e7282 */ mul.s $f10,$f14,$f14
/* f049360: 0c012974 */ jal sqrtf
/* f049364: 460a4300 */ add.s $f12,$f8,$f10
/* f049368: 46000086 */ mov.s $f2,$f0
.L0f04936c:
/* f04936c: 8fbf0014 */ lw $ra,0x14($sp)
/* f049370: 27bd0080 */ addiu $sp,$sp,0x80
/* f049374: 46001006 */ mov.s $f0,$f2
/* f049378: 03e00008 */ jr $ra
/* f04937c: 00000000 */ sll $zero,$zero,0x0
);
float chrGetDistanceToPad(struct chrdata *chr, s32 pad_id)
{
struct position *pos = chr->pos;
float xdiff, ydiff, zdiff;
float distance = 0;
struct pad pad;
pad_id = padResolve(chr, pad_id);
if (pad_id >= 0) {
padUnpack(pad_id, 2, &pad);
xdiff = pad.coord.x - pos->coord.x;
ydiff = pad.coord.y - pos->coord.y;
zdiff = pad.coord.z - pos->coord.z;
distance = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
}
return distance;
}
GLOBAL_ASM(
glabel func0f049380

View File

@ -36,6 +36,22 @@ struct position {
u32 unk44;
};
struct pad {
/*0x00*/ struct coord coord;
/*0x0c*/ struct coord look;
/*0x18*/ struct coord up;
/*0x24*/ struct coord normal;
/*0x30*/ float xmin;
/*0x34*/ float xmax;
/*0x38*/ float ymin;
/*0x3c*/ float ymax;
/*0x40*/ float zmin;
/*0x44*/ float zmax;
/*0x48*/ u32 flags;
/*0x4c*/ u32 unk4c;
/*0x50*/ u32 unk50;
};
struct bitfield {
union {
u8 bytes[4];