Decompile frChooseFarsightTarget
This commit is contained in:
parent
1d2b32f45b
commit
6ff0cda75b
|
|
@ -6916,171 +6916,49 @@ void func0f1a0924(struct prop *prop)
|
|||
}
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel frChooseFarsightTarget
|
||||
/* f1a0a70: 27bdffa0 */ addiu $sp,$sp,-96
|
||||
/* f1a0a74: f7bc0030 */ sdc1 $f28,0x30($sp)
|
||||
/* f1a0a78: 3c013f80 */ lui $at,0x3f80
|
||||
/* f1a0a7c: 4481e000 */ mtc1 $at,$f28
|
||||
/* f1a0a80: f7be0038 */ sdc1 $f30,0x38($sp)
|
||||
/* f1a0a84: 3c01bf80 */ lui $at,0xbf80
|
||||
/* f1a0a88: afbf005c */ sw $ra,0x5c($sp)
|
||||
/* f1a0a8c: afb50058 */ sw $s5,0x58($sp)
|
||||
/* f1a0a90: afb40054 */ sw $s4,0x54($sp)
|
||||
/* f1a0a94: 4481f000 */ mtc1 $at,$f30
|
||||
/* f1a0a98: afb30050 */ sw $s3,0x50($sp)
|
||||
/* f1a0a9c: afb2004c */ sw $s2,0x4c($sp)
|
||||
/* f1a0aa0: afb10048 */ sw $s1,0x48($sp)
|
||||
/* f1a0aa4: afb00044 */ sw $s0,0x44($sp)
|
||||
/* f1a0aa8: f7ba0028 */ sdc1 $f26,0x28($sp)
|
||||
/* f1a0aac: f7b80020 */ sdc1 $f24,0x20($sp)
|
||||
/* f1a0ab0: f7b60018 */ sdc1 $f22,0x18($sp)
|
||||
/* f1a0ab4: f7b40010 */ sdc1 $f20,0x10($sp)
|
||||
/* f1a0ab8: 0000a025 */ or $s4,$zero,$zero
|
||||
/* f1a0abc: 0000a825 */ or $s5,$zero,$zero
|
||||
/* f1a0ac0: 0fc2866a */ jal handGetWeaponNum
|
||||
/* f1a0ac4: 00002025 */ or $a0,$zero,$zero
|
||||
/* f1a0ac8: 24010016 */ addiu $at,$zero,0x16
|
||||
/* f1a0acc: 14410042 */ bne $v0,$at,.L0f1a0bd8
|
||||
/* f1a0ad0: 3c11800b */ lui $s1,%hi(g_FrData)
|
||||
/* f1a0ad4: 3c13800b */ lui $s3,%hi(g_FrData+0x438)
|
||||
/* f1a0ad8: 3c12800a */ lui $s2,%hi(g_Vars)
|
||||
/* f1a0adc: 4480d000 */ mtc1 $zero,$f26
|
||||
/* f1a0ae0: 26529fc0 */ addiu $s2,$s2,%lo(g_Vars)
|
||||
/* f1a0ae4: 2673d158 */ addiu $s3,$s3,%lo(g_FrData+0x438)
|
||||
/* f1a0ae8: 2631cd20 */ addiu $s1,$s1,%lo(g_FrData)
|
||||
/* f1a0aec: 8e220010 */ lw $v0,0x10($s1)
|
||||
.L0f1a0af0:
|
||||
/* f1a0af0: 000277c2 */ srl $t6,$v0,0x1f
|
||||
/* f1a0af4: 11c00035 */ beqz $t6,.L0f1a0bcc
|
||||
/* f1a0af8: 0002c080 */ sll $t8,$v0,0x2
|
||||
/* f1a0afc: 07000033 */ bltz $t8,.L0f1a0bcc
|
||||
/* f1a0b00: 00024040 */ sll $t0,$v0,0x1
|
||||
/* f1a0b04: 05030032 */ bgezl $t0,.L0f1a0bd0
|
||||
/* f1a0b08: 2631003c */ addiu $s1,$s1,0x3c
|
||||
/* f1a0b0c: 92290040 */ lbu $t1,0x40($s1)
|
||||
/* f1a0b10: 312a0040 */ andi $t2,$t1,0x40
|
||||
/* f1a0b14: 5140002e */ beqzl $t2,.L0f1a0bd0
|
||||
/* f1a0b18: 2631003c */ addiu $s1,$s1,0x3c
|
||||
/* f1a0b1c: 8e300014 */ lw $s0,0x14($s1)
|
||||
/* f1a0b20: 8e420284 */ lw $v0,0x284($s2)
|
||||
/* f1a0b24: c6060008 */ lwc1 $f6,0x8($s0)
|
||||
/* f1a0b28: c444037c */ lwc1 $f4,0x37c($v0)
|
||||
/* f1a0b2c: c60a000c */ lwc1 $f10,0xc($s0)
|
||||
/* f1a0b30: c4480380 */ lwc1 $f8,0x380($v0)
|
||||
/* f1a0b34: 46062501 */ sub.s $f20,$f4,$f6
|
||||
/* f1a0b38: c6120010 */ lwc1 $f18,0x10($s0)
|
||||
/* f1a0b3c: c4500384 */ lwc1 $f16,0x384($v0)
|
||||
/* f1a0b40: 460a4581 */ sub.s $f22,$f8,$f10
|
||||
/* f1a0b44: 4614a102 */ mul.s $f4,$f20,$f20
|
||||
/* f1a0b48: 46128601 */ sub.s $f24,$f16,$f18
|
||||
/* f1a0b4c: 4616b182 */ mul.s $f6,$f22,$f22
|
||||
/* f1a0b50: 46062200 */ add.s $f8,$f4,$f6
|
||||
/* f1a0b54: 4618c282 */ mul.s $f10,$f24,$f24
|
||||
/* f1a0b58: 0c012974 */ jal sqrtf
|
||||
/* f1a0b5c: 460a4300 */ add.s $f12,$f8,$f10
|
||||
/* f1a0b60: 4600d03c */ c.lt.s $f26,$f0
|
||||
/* f1a0b64: 00000000 */ nop
|
||||
/* f1a0b68: 45020019 */ bc1fl .L0f1a0bd0
|
||||
/* f1a0b6c: 2631003c */ addiu $s1,$s1,0x3c
|
||||
/* f1a0b70: 8e420284 */ lw $v0,0x284($s2)
|
||||
/* f1a0b74: c4500388 */ lwc1 $f16,0x388($v0)
|
||||
/* f1a0b78: c444038c */ lwc1 $f4,0x38c($v0)
|
||||
/* f1a0b7c: c44a0390 */ lwc1 $f10,0x390($v0)
|
||||
/* f1a0b80: 4610a482 */ mul.s $f18,$f20,$f16
|
||||
/* f1a0b84: 00000000 */ nop
|
||||
/* f1a0b88: 4604b182 */ mul.s $f6,$f22,$f4
|
||||
/* f1a0b8c: 46069200 */ add.s $f8,$f18,$f6
|
||||
/* f1a0b90: 46185402 */ mul.s $f16,$f10,$f24
|
||||
/* f1a0b94: 46088100 */ add.s $f4,$f16,$f8
|
||||
/* f1a0b98: 46002083 */ div.s $f2,$f4,$f0
|
||||
/* f1a0b9c: 461a103c */ c.lt.s $f2,$f26
|
||||
/* f1a0ba0: 00000000 */ nop
|
||||
/* f1a0ba4: 45000009 */ bc1f .L0f1a0bcc
|
||||
/* f1a0ba8: 00000000 */ nop
|
||||
/* f1a0bac: 461c103c */ c.lt.s $f2,$f28
|
||||
/* f1a0bb0: 00000000 */ nop
|
||||
/* f1a0bb4: 45020006 */ bc1fl .L0f1a0bd0
|
||||
/* f1a0bb8: 2631003c */ addiu $s1,$s1,0x3c
|
||||
/* f1a0bbc: 46001706 */ mov.s $f28,$f2
|
||||
/* f1a0bc0: 0200a025 */ or $s4,$s0,$zero
|
||||
/* f1a0bc4: 46000786 */ mov.s $f30,$f0
|
||||
/* f1a0bc8: 24150001 */ addiu $s5,$zero,0x1
|
||||
.L0f1a0bcc:
|
||||
/* f1a0bcc: 2631003c */ addiu $s1,$s1,0x3c
|
||||
.L0f1a0bd0:
|
||||
/* f1a0bd0: 5633ffc7 */ bnel $s1,$s3,.L0f1a0af0
|
||||
/* f1a0bd4: 8e220010 */ lw $v0,0x10($s1)
|
||||
.L0f1a0bd8:
|
||||
/* f1a0bd8: 3c12800a */ lui $s2,%hi(g_Vars)
|
||||
/* f1a0bdc: 26529fc0 */ addiu $s2,$s2,%lo(g_Vars)
|
||||
/* f1a0be0: 8e4b0284 */ lw $t3,0x284($s2)
|
||||
/* f1a0be4: 02a01025 */ or $v0,$s5,$zero
|
||||
/* f1a0be8: e57e0258 */ swc1 $f30,0x258($t3)
|
||||
/* f1a0bec: 8e4c0284 */ lw $t4,0x284($s2)
|
||||
/* f1a0bf0: ad94025c */ sw $s4,0x25c($t4)
|
||||
/* f1a0bf4: 8fbf005c */ lw $ra,0x5c($sp)
|
||||
/* f1a0bf8: 8fb50058 */ lw $s5,0x58($sp)
|
||||
/* f1a0bfc: 8fb40054 */ lw $s4,0x54($sp)
|
||||
/* f1a0c00: 8fb30050 */ lw $s3,0x50($sp)
|
||||
/* f1a0c04: 8fb2004c */ lw $s2,0x4c($sp)
|
||||
/* f1a0c08: 8fb10048 */ lw $s1,0x48($sp)
|
||||
/* f1a0c0c: 8fb00044 */ lw $s0,0x44($sp)
|
||||
/* f1a0c10: d7be0038 */ ldc1 $f30,0x38($sp)
|
||||
/* f1a0c14: d7bc0030 */ ldc1 $f28,0x30($sp)
|
||||
/* f1a0c18: d7ba0028 */ ldc1 $f26,0x28($sp)
|
||||
/* f1a0c1c: d7b80020 */ ldc1 $f24,0x20($sp)
|
||||
/* f1a0c20: d7b60018 */ ldc1 $f22,0x18($sp)
|
||||
/* f1a0c24: d7b40010 */ ldc1 $f20,0x10($sp)
|
||||
/* f1a0c28: 03e00008 */ jr $ra
|
||||
/* f1a0c2c: 27bd0060 */ addiu $sp,$sp,0x60
|
||||
);
|
||||
bool frChooseFarsightTarget(void)
|
||||
{
|
||||
struct prop *bestprop = NULL;
|
||||
f32 bestvalue = 1;
|
||||
f32 bestdist = -1;
|
||||
bool found = false;
|
||||
s32 i;
|
||||
|
||||
// Mismatch because f26 and f28 are swapped and the multiplication order for
|
||||
// travelspeed is different. f26 should be constant 0 (used in dist > 0 and
|
||||
// value < 0 checks) and f28 should be bestvalue.
|
||||
//bool frChooseFarsightTarget(void)
|
||||
//{
|
||||
// f32 bestvalue = 1;
|
||||
// f32 bestdist = -1;
|
||||
// struct prop *bestprop = NULL;
|
||||
// bool found = false;
|
||||
// s32 i;
|
||||
//
|
||||
// if (handGetWeaponNum(0) == WEAPON_FARSIGHT) {
|
||||
// for (i = 0; i < ARRAYCOUNT(g_FrData.targets); i++) {
|
||||
// if (g_FrData.targets[i].inuse
|
||||
// && g_FrData.targets[i].destroyed == false
|
||||
// && g_FrData.targets[i].active
|
||||
// && g_FrData.targets[i].flags & FRTARGETFLAG_FARSIGHTAUTOTARGETABLE) {
|
||||
// struct prop *prop = g_FrData.targets[i].prop;
|
||||
// f32 xdiff = g_Vars.currentplayer->bond2.unk10.x - prop->pos.x;
|
||||
// f32 ydiff = g_Vars.currentplayer->bond2.unk10.y - prop->pos.y;
|
||||
// f32 zdiff = g_Vars.currentplayer->bond2.unk10.z - prop->pos.z;
|
||||
// f32 dist = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
|
||||
//
|
||||
// if (dist > 0) {
|
||||
// f32 value = (
|
||||
// g_Vars.currentplayer->bond2.unk1c.x * xdiff +
|
||||
// g_Vars.currentplayer->bond2.unk1c.y * ydiff +
|
||||
// g_Vars.currentplayer->bond2.unk1c.z * zdiff) / dist;
|
||||
//
|
||||
// if (value < 0 && value < bestvalue) {
|
||||
// bestvalue = value;
|
||||
// bestprop = prop;
|
||||
// bestdist = dist;
|
||||
// found = true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// g_Vars.currentplayer->autoeraserdist = bestdist;
|
||||
// g_Vars.currentplayer->autoerasertarget = bestprop;
|
||||
//
|
||||
// return found;
|
||||
//}
|
||||
if (handGetWeaponNum(HAND_RIGHT) == WEAPON_FARSIGHT) {
|
||||
for (i = 0; i < ARRAYCOUNT(g_FrData.targets); i++) {
|
||||
if (g_FrData.targets[i].inuse
|
||||
&& g_FrData.targets[i].destroyed == false
|
||||
&& g_FrData.targets[i].active
|
||||
&& g_FrData.targets[i].flags & FRTARGETFLAG_FARSIGHTAUTOTARGETABLE) {
|
||||
struct prop *prop = g_FrData.targets[i].prop;
|
||||
f32 xdiff = g_Vars.currentplayer->bond2.unk10.x - prop->pos.x;
|
||||
f32 ydiff = g_Vars.currentplayer->bond2.unk10.y - prop->pos.y;
|
||||
f32 zdiff = g_Vars.currentplayer->bond2.unk10.z - prop->pos.z;
|
||||
f32 dist = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
|
||||
|
||||
if (dist > 0) {
|
||||
f32 value = (xdiff * g_Vars.currentplayer->bond2.unk1c.f[0]
|
||||
+ ydiff * g_Vars.currentplayer->bond2.unk1c.f[1]
|
||||
+ zdiff * g_Vars.currentplayer->bond2.unk1c.f[2]) / dist;
|
||||
|
||||
if (value);
|
||||
|
||||
if (value < 0 && value < bestvalue) {
|
||||
bestvalue = value;
|
||||
bestprop = prop;
|
||||
bestdist = dist;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g_Vars.currentplayer->autoeraserdist = bestdist;
|
||||
g_Vars.currentplayer->autoerasertarget = bestprop;
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
s32 frIsInTraining(void)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue