Decompile aiIfObjectDistanceToPadLessThan

This commit is contained in:
Ryan Dwyer 2020-02-18 23:28:39 +10:00
parent 13532df085
commit 49d637a247
1 changed files with 36 additions and 153 deletions

View File

@ -10367,160 +10367,43 @@ bool aiMiniSkedarTryPounce(void)
/**
* @cmd 018f
*/
GLOBAL_ASM(
glabel aiIfObjectDistanceToPadLessThan
/* f05d5e8: 27bdff68 */ addiu $sp,$sp,-152
/* f05d5ec: afb00018 */ sw $s0,0x18($sp)
/* f05d5f0: 3c10800a */ lui $s0,%hi(g_Vars)
/* f05d5f4: 26109fc0 */ addiu $s0,$s0,%lo(g_Vars)
/* f05d5f8: 8e0e0434 */ lw $t6,0x434($s0)
/* f05d5fc: 8e0f0438 */ lw $t7,0x438($s0)
/* f05d600: afbf001c */ sw $ra,0x1c($sp)
/* f05d604: 3c014120 */ lui $at,0x4120
/* f05d608: 01cf1821 */ addu $v1,$t6,$t7
/* f05d60c: 90780003 */ lbu $t8,0x3($v1)
/* f05d610: 90680004 */ lbu $t0,0x4($v1)
/* f05d614: 44814000 */ mtc1 $at,$f8
/* f05d618: 0018ca00 */ sll $t9,$t8,0x8
/* f05d61c: 03284825 */ or $t1,$t9,$t0
/* f05d620: 44892000 */ mtc1 $t1,$f4
/* f05d624: 00000000 */ sll $zero,$zero,0x0
/* f05d628: 468021a0 */ cvt.s.w $f6,$f4
/* f05d62c: 46083282 */ mul.s $f10,$f6,$f8
/* f05d630: e7aa0090 */ swc1 $f10,0x90($sp)
/* f05d634: 906a0005 */ lbu $t2,0x5($v1)
/* f05d638: 906c0006 */ lbu $t4,0x6($v1)
/* f05d63c: 000a5a00 */ sll $t3,$t2,0x8
/* f05d640: 016c6825 */ or $t5,$t3,$t4
/* f05d644: 31aeffff */ andi $t6,$t5,0xffff
/* f05d648: afae0080 */ sw $t6,0x80($sp)
/* f05d64c: 90640002 */ lbu $a0,0x2($v1)
/* f05d650: 0fc2556c */ jal objFindByTagId
/* f05d654: afa30094 */ sw $v1,0x94($sp)
/* f05d658: 8fa30094 */ lw $v1,0x94($sp)
/* f05d65c: afa2007c */ sw $v0,0x7c($sp)
/* f05d660: 1040003e */ beqz $v0,.L0f05d75c
/* f05d664: 00003825 */ or $a3,$zero,$zero
/* f05d668: 8c4f0014 */ lw $t7,0x14($v0)
/* f05d66c: 8fa50080 */ lw $a1,0x80($sp)
/* f05d670: 11e0003a */ beqz $t7,.L0f05d75c
/* f05d674: 00000000 */ sll $zero,$zero,0x0
/* f05d678: 8e040424 */ lw $a0,0x424($s0)
/* f05d67c: afa30094 */ sw $v1,0x94($sp)
/* f05d680: 0fc1258b */ jal chrResolvePadId
/* f05d684: afa00024 */ sw $zero,0x24($sp)
/* f05d688: 8fa30094 */ lw $v1,0x94($sp)
/* f05d68c: 8fa70024 */ lw $a3,0x24($sp)
/* f05d690: 04400032 */ bltz $v0,.L0f05d75c
/* f05d694: 00402025 */ or $a0,$v0,$zero
/* f05d698: 24050002 */ addiu $a1,$zero,0x2
/* f05d69c: 27a60028 */ addiu $a2,$sp,0x28
/* f05d6a0: afa30094 */ sw $v1,0x94($sp)
/* f05d6a4: 0fc456ac */ jal padUnpack
/* f05d6a8: afa70024 */ sw $a3,0x24($sp)
/* f05d6ac: 8fb8007c */ lw $t8,0x7c($sp)
/* f05d6b0: c7b20028 */ lwc1 $f18,0x28($sp)
/* f05d6b4: c7a6002c */ lwc1 $f6,0x2c($sp)
/* f05d6b8: 8f020014 */ lw $v0,0x14($t8)
/* f05d6bc: 3c014348 */ lui $at,0x4348
/* f05d6c0: c7aa0030 */ lwc1 $f10,0x30($sp)
/* f05d6c4: c4500008 */ lwc1 $f16,0x8($v0)
/* f05d6c8: c444000c */ lwc1 $f4,0xc($v0)
/* f05d6cc: c4480010 */ lwc1 $f8,0x10($v0)
/* f05d6d0: 46128001 */ sub.s $f0,$f16,$f18
/* f05d6d4: 44818000 */ mtc1 $at,$f16
/* f05d6d8: 8fa30094 */ lw $v1,0x94($sp)
/* f05d6dc: 46062081 */ sub.s $f2,$f4,$f6
/* f05d6e0: 8fa70024 */ lw $a3,0x24($sp)
/* f05d6e4: 3c01c348 */ lui $at,0xc348
/* f05d6e8: 460a4301 */ sub.s $f12,$f8,$f10
/* f05d6ec: 4610103c */ c.lt.s $f2,$f16
/* f05d6f0: 00000000 */ sll $zero,$zero,0x0
/* f05d6f4: 45000019 */ bc1f .L0f05d75c
/* f05d6f8: 00000000 */ sll $zero,$zero,0x0
/* f05d6fc: 44819000 */ mtc1 $at,$f18
/* f05d700: c7ae0090 */ lwc1 $f14,0x90($sp)
/* f05d704: 4602903c */ c.lt.s $f18,$f2
/* f05d708: 00000000 */ sll $zero,$zero,0x0
/* f05d70c: 45000013 */ bc1f .L0f05d75c
/* f05d710: 00000000 */ sll $zero,$zero,0x0
/* f05d714: 460e003c */ c.lt.s $f0,$f14
/* f05d718: 00000000 */ sll $zero,$zero,0x0
/* f05d71c: 4500000f */ bc1f .L0f05d75c
/* f05d720: 00000000 */ sll $zero,$zero,0x0
/* f05d724: 46007087 */ neg.s $f2,$f14
/* f05d728: 4600103c */ c.lt.s $f2,$f0
/* f05d72c: 00000000 */ sll $zero,$zero,0x0
/* f05d730: 4500000a */ bc1f .L0f05d75c
/* f05d734: 00000000 */ sll $zero,$zero,0x0
/* f05d738: 460e603c */ c.lt.s $f12,$f14
/* f05d73c: 00000000 */ sll $zero,$zero,0x0
/* f05d740: 45000006 */ bc1f .L0f05d75c
/* f05d744: 00000000 */ sll $zero,$zero,0x0
/* f05d748: 460c103c */ c.lt.s $f2,$f12
/* f05d74c: 00000000 */ sll $zero,$zero,0x0
/* f05d750: 45000002 */ bc1f .L0f05d75c
/* f05d754: 00000000 */ sll $zero,$zero,0x0
/* f05d758: 24070001 */ addiu $a3,$zero,0x1
.L0f05d75c:
/* f05d75c: 50e00008 */ beqzl $a3,.L0f05d780
/* f05d760: 8e190438 */ lw $t9,0x438($s0)
/* f05d764: 8e040434 */ lw $a0,0x434($s0)
/* f05d768: 8e050438 */ lw $a1,0x438($s0)
/* f05d76c: 0fc13583 */ jal chraiGoToLabel
/* f05d770: 90660007 */ lbu $a2,0x7($v1)
/* f05d774: 10000004 */ beqz $zero,.L0f05d788
/* f05d778: ae020438 */ sw $v0,0x438($s0)
/* f05d77c: 8e190438 */ lw $t9,0x438($s0)
.L0f05d780:
/* f05d780: 27280008 */ addiu $t0,$t9,0x8
/* f05d784: ae080438 */ sw $t0,0x438($s0)
.L0f05d788:
/* f05d788: 8fbf001c */ lw $ra,0x1c($sp)
/* f05d78c: 8fb00018 */ lw $s0,0x18($sp)
/* f05d790: 27bd0098 */ addiu $sp,$sp,0x98
/* f05d794: 03e00008 */ jr $ra
/* f05d798: 00001025 */ or $v0,$zero,$zero
);
bool aiIfObjectDistanceToPadLessThan(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
f32 distance = (f32)(cmd[4] | (cmd[3] << 8)) * 10;
f32 xdiff;
f32 ydiff;
f32 zdiff;
s32 pad_id = (cmd[6] | (cmd[5] << 8)) & 0xffff;
struct defaultobj *obj = objFindByTagId(cmd[2]);
struct pad pad;
bool pass = false;
// Mismatch due to different registers
//bool aiIfObjectDistanceToPadLessThan(void)
//{
// u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
// f32 distance = (f32)(cmd[4] | (cmd[3] << 8)) * 10;
// f32 xdiff;
// f32 ydiff;
// f32 zdiff;
// s32 pad_id = (cmd[6] | (cmd[5] << 8)) & 0xffff;
// struct defaultobj *obj = objFindByTagId(cmd[2]);
// struct pad pad;
// bool pass = false;
//
// if (obj && obj->prop) {
// pad_id = chrResolvePadId(g_Vars.chrdata, pad_id);
//
// if (pad_id >= 0) {
// padUnpack(pad_id, PADFIELD_POS, &pad);
// xdiff = obj->prop->pos.x - pad.pos.x;
// ydiff = obj->prop->pos.y - pad.pos.y;
// zdiff = obj->prop->pos.z - pad.pos.z;
//
// if (ydiff < 200 && ydiff > -200 &&
// xdiff < distance && xdiff > -distance &&
// zdiff < distance && zdiff > -distance) {
// pass = true;
// }
// }
// }
//
// if (pass) {
// g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[7]);
// } else {
// g_Vars.aioffset += 8;
// }
//
// return false;
//}
if (obj && obj->prop) {
pad_id = chrResolvePadId(g_Vars.chrdata, pad_id);
if (pad_id >= 0) {
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = obj->prop->pos.x - pad.pos.x;
ydiff = obj->prop->pos.y - pad.pos.y;
zdiff = obj->prop->pos.z - pad.pos.z;
if (ydiff < 200 && ydiff > -200 &&
xdiff < distance && xdiff > -distance &&
zdiff < distance && zdiff > -distance) {
pass = true;
}
}
}
if (pass) {
g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[7]);
} else {
g_Vars.aioffset += 8;
}
return false;
}
/**
* @cmd 0190