Decompile frChooseAutogunTarget
This commit is contained in:
parent
562d47398b
commit
6fe7d5d77b
|
|
@ -2091,161 +2091,45 @@ bool frIsTargetFacingPos(struct prop *prop, struct coord *pos)
|
|||
return true;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel frChooseAutogunTarget
|
||||
.late_rodata
|
||||
glabel var7f1b94b8
|
||||
.word 0x4096c5bf
|
||||
glabel var7f1b94bc
|
||||
.word 0x3fc90fdb
|
||||
.text
|
||||
/* f19f39c: 27bdff30 */ addiu $sp,$sp,-208
|
||||
/* f19f3a0: f7b60018 */ sdc1 $f22,0x18($sp)
|
||||
/* f19f3a4: 3c014e00 */ lui $at,0x4e00
|
||||
/* f19f3a8: 4481b000 */ mtc1 $at,$f22
|
||||
/* f19f3ac: f7b80020 */ sdc1 $f24,0x20($sp)
|
||||
/* f19f3b0: 3c017f1c */ lui $at,%hi(var7f1b94b8)
|
||||
/* f19f3b4: afb10030 */ sw $s1,0x30($sp)
|
||||
/* f19f3b8: c43894b8 */ lwc1 $f24,%lo(var7f1b94b8)($at)
|
||||
/* f19f3bc: afb50040 */ sw $s5,0x40($sp)
|
||||
/* f19f3c0: afb4003c */ sw $s4,0x3c($sp)
|
||||
/* f19f3c4: afb30038 */ sw $s3,0x38($sp)
|
||||
/* f19f3c8: afb20034 */ sw $s2,0x34($sp)
|
||||
/* f19f3cc: afb0002c */ sw $s0,0x2c($sp)
|
||||
/* f19f3d0: f7b40010 */ sdc1 $f20,0x10($sp)
|
||||
/* f19f3d4: 3c017f1c */ lui $at,%hi(var7f1b94bc)
|
||||
/* f19f3d8: 3c11800b */ lui $s1,%hi(g_FrData)
|
||||
/* f19f3dc: 00809825 */ or $s3,$a0,$zero
|
||||
/* f19f3e0: afbf0044 */ sw $ra,0x44($sp)
|
||||
/* f19f3e4: 00009025 */ or $s2,$zero,$zero
|
||||
/* f19f3e8: 0000a825 */ or $s5,$zero,$zero
|
||||
/* f19f3ec: 2631cd20 */ addiu $s1,$s1,%lo(g_FrData)
|
||||
/* f19f3f0: c43494bc */ lwc1 $f20,%lo(var7f1b94bc)($at)
|
||||
/* f19f3f4: 00008025 */ or $s0,$zero,$zero
|
||||
/* f19f3f8: 27b40084 */ addiu $s4,$sp,0x84
|
||||
.L0f19f3fc:
|
||||
/* f19f3fc: 8e220010 */ lw $v0,0x10($s1)
|
||||
/* f19f400: 000277c2 */ srl $t6,$v0,0x1f
|
||||
/* f19f404: 11c00014 */ beqz $t6,.L0f19f458
|
||||
/* f19f408: 0002c080 */ sll $t8,$v0,0x2
|
||||
/* f19f40c: 07000012 */ bltz $t8,.L0f19f458
|
||||
/* f19f410: 00024040 */ sll $t0,$v0,0x1
|
||||
/* f19f414: 05010010 */ bgez $t0,.L0f19f458
|
||||
/* f19f418: 02603025 */ or $a2,$s3,$zero
|
||||
/* f19f41c: 8e240014 */ lw $a0,0x14($s1)
|
||||
/* f19f420: 8e250038 */ lw $a1,0x38($s1)
|
||||
/* f19f424: 0fc67ca5 */ jal frGetTargetAngleToPos
|
||||
/* f19f428: 24840008 */ addiu $a0,$a0,0x8
|
||||
/* f19f42c: 4600a03c */ c.lt.s $f20,$f0
|
||||
/* f19f430: 00124880 */ sll $t1,$s2,0x2
|
||||
/* f19f434: 02895021 */ addu $t2,$s4,$t1
|
||||
/* f19f438: 45020006 */ bc1fl .L0f19f454
|
||||
/* f19f43c: ad500000 */ sw $s0,0x0($t2)
|
||||
/* f19f440: 4618003c */ c.lt.s $f0,$f24
|
||||
/* f19f444: 00000000 */ nop
|
||||
/* f19f448: 45030004 */ bc1tl .L0f19f45c
|
||||
/* f19f44c: 26100001 */ addiu $s0,$s0,0x1
|
||||
/* f19f450: ad500000 */ sw $s0,0x0($t2)
|
||||
.L0f19f454:
|
||||
/* f19f454: 26520001 */ addiu $s2,$s2,0x1
|
||||
.L0f19f458:
|
||||
/* f19f458: 26100001 */ addiu $s0,$s0,0x1
|
||||
.L0f19f45c:
|
||||
/* f19f45c: 2a010012 */ slti $at,$s0,0x12
|
||||
/* f19f460: 1420ffe6 */ bnez $at,.L0f19f3fc
|
||||
/* f19f464: 2631003c */ addiu $s1,$s1,0x3c
|
||||
/* f19f468: 1a400021 */ blez $s2,.L0f19f4f0
|
||||
/* f19f46c: 00008025 */ or $s0,$zero,$zero
|
||||
/* f19f470: 3c04800b */ lui $a0,%hi(g_FrData)
|
||||
/* f19f474: 2484cd20 */ addiu $a0,$a0,%lo(g_FrData)
|
||||
/* f19f478: 27a30084 */ addiu $v1,$sp,0x84
|
||||
/* f19f47c: c6700000 */ lwc1 $f16,0x0($s3)
|
||||
/* f19f480: c6720004 */ lwc1 $f18,0x4($s3)
|
||||
/* f19f484: c6740008 */ lwc1 $f20,0x8($s3)
|
||||
/* f19f488: 2405003c */ addiu $a1,$zero,0x3c
|
||||
.L0f19f48c:
|
||||
/* f19f48c: 8c6b0000 */ lw $t3,0x0($v1)
|
||||
/* f19f490: 26100001 */ addiu $s0,$s0,0x1
|
||||
/* f19f494: 01650019 */ multu $t3,$a1
|
||||
/* f19f498: 00006012 */ mflo $t4
|
||||
/* f19f49c: 008c6821 */ addu $t5,$a0,$t4
|
||||
/* f19f4a0: 8da20014 */ lw $v0,0x14($t5)
|
||||
/* f19f4a4: c4440008 */ lwc1 $f4,0x8($v0)
|
||||
/* f19f4a8: c446000c */ lwc1 $f6,0xc($v0)
|
||||
/* f19f4ac: c4480010 */ lwc1 $f8,0x10($v0)
|
||||
/* f19f4b0: 46102001 */ sub.s $f0,$f4,$f16
|
||||
/* f19f4b4: 46123081 */ sub.s $f2,$f6,$f18
|
||||
/* f19f4b8: 46000282 */ mul.s $f10,$f0,$f0
|
||||
/* f19f4bc: 46144301 */ sub.s $f12,$f8,$f20
|
||||
/* f19f4c0: 46021102 */ mul.s $f4,$f2,$f2
|
||||
/* f19f4c4: 46045180 */ add.s $f6,$f10,$f4
|
||||
/* f19f4c8: 460c6202 */ mul.s $f8,$f12,$f12
|
||||
/* f19f4cc: 46083380 */ add.s $f14,$f6,$f8
|
||||
/* f19f4d0: 4616703c */ c.lt.s $f14,$f22
|
||||
/* f19f4d4: 00000000 */ nop
|
||||
/* f19f4d8: 45000003 */ bc1f .L0f19f4e8
|
||||
/* f19f4dc: 00000000 */ nop
|
||||
/* f19f4e0: 46007586 */ mov.s $f22,$f14
|
||||
/* f19f4e4: 0040a825 */ or $s5,$v0,$zero
|
||||
.L0f19f4e8:
|
||||
/* f19f4e8: 1612ffe8 */ bne $s0,$s2,.L0f19f48c
|
||||
/* f19f4ec: 24630004 */ addiu $v1,$v1,0x4
|
||||
.L0f19f4f0:
|
||||
/* f19f4f0: 8fbf0044 */ lw $ra,0x44($sp)
|
||||
/* f19f4f4: 02a01025 */ or $v0,$s5,$zero
|
||||
/* f19f4f8: 8fb50040 */ lw $s5,0x40($sp)
|
||||
/* f19f4fc: d7b40010 */ ldc1 $f20,0x10($sp)
|
||||
/* f19f500: d7b60018 */ ldc1 $f22,0x18($sp)
|
||||
/* f19f504: d7b80020 */ ldc1 $f24,0x20($sp)
|
||||
/* f19f508: 8fb0002c */ lw $s0,0x2c($sp)
|
||||
/* f19f50c: 8fb10030 */ lw $s1,0x30($sp)
|
||||
/* f19f510: 8fb20034 */ lw $s2,0x34($sp)
|
||||
/* f19f514: 8fb30038 */ lw $s3,0x38($sp)
|
||||
/* f19f518: 8fb4003c */ lw $s4,0x3c($sp)
|
||||
/* f19f51c: 03e00008 */ jr $ra
|
||||
/* f19f520: 27bd00d0 */ addiu $sp,$sp,0xd0
|
||||
);
|
||||
struct prop *frChooseAutogunTarget(struct coord *autogunpos)
|
||||
{
|
||||
f32 closestdist = 0x20000000;
|
||||
s32 facingtargets[ARRAYCOUNT(g_FrData.targets)];
|
||||
s32 len = 0;
|
||||
struct prop *closesttarget = NULL;
|
||||
s32 i;
|
||||
|
||||
// Regalloc: s3 and s4 are swapped.
|
||||
// s3 should be autogunpos and s4 should be facingtargets.
|
||||
//struct prop *frChooseAutogunTarget(struct coord *autogunpos)
|
||||
//{
|
||||
// f32 closestdist = 0x20000000;
|
||||
// s32 facingtargets[ARRAYCOUNT(g_FrData.targets)];
|
||||
// s32 len = 0;
|
||||
// struct prop *closesttarget = NULL;
|
||||
// s32 i;
|
||||
//
|
||||
// // Make list of targets which are facing the laptop gun
|
||||
// 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) {
|
||||
// f32 angle = frGetTargetAngleToPos(&g_FrData.targets[i].prop->pos, g_FrData.targets[i].angle, autogunpos);
|
||||
//
|
||||
// //if (!(angle > BADDEG2RAD(90) && angle < BADDEG2RAD(270))) {
|
||||
// if (!(angle > 1.5707963705063f && angle < 4.7116389274597f)) {
|
||||
// facingtargets[len++] = i;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // Determine which of the facing targets is closest
|
||||
// for (i = 0; i < len; i++) {
|
||||
// struct prop *prop = g_FrData.targets[facingtargets[i]].prop;
|
||||
// f32 xdiff = prop->pos.x - autogunpos->x;
|
||||
// f32 ydiff = prop->pos.y - autogunpos->y;
|
||||
// f32 zdiff = prop->pos.z - autogunpos->z;
|
||||
// f32 dist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
|
||||
//
|
||||
// if (dist < closestdist) {
|
||||
// closestdist = dist;
|
||||
// closesttarget = prop;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return closesttarget;
|
||||
//}
|
||||
// Make list of targets which are facing the laptop gun
|
||||
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) {
|
||||
f32 angle = frGetTargetAngleToPos(&g_FrData.targets[i].prop->pos, g_FrData.targets[i].angle, autogunpos);
|
||||
|
||||
if (!(angle > 1.5707963705063f && angle < 4.7116389274597f)) {
|
||||
facingtargets[len++] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Determine which of the facing targets is closest
|
||||
for (i = 0; i < len; i++) {
|
||||
struct prop *prop = g_FrData.targets[facingtargets[i]].prop;
|
||||
f32 xdiff = prop->pos.f[0] - autogunpos->f[0];
|
||||
f32 ydiff = prop->pos.f[1] - autogunpos->f[1];
|
||||
f32 zdiff = prop->pos.f[2] - autogunpos->f[2];
|
||||
f32 dist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
|
||||
|
||||
if (dist < closestdist) {
|
||||
closestdist = dist;
|
||||
closesttarget = prop;
|
||||
}
|
||||
}
|
||||
|
||||
if (facingtargets);
|
||||
|
||||
return closesttarget;
|
||||
}
|
||||
|
||||
bool frIsAmmoWasted(void)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue