diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index d8ed9ec3a..53b09f54a 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -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 diff --git a/src/game/game_000000.c b/src/game/game_000000.c index 587db15d3..184c5c065 100644 --- a/src/game/game_000000.c +++ b/src/game/game_000000.c @@ -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 diff --git a/src/include/types.h b/src/include/types.h index 345ad9904..6b9262211 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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];