From 484e9514d1d8e32b6765cd698b7823ba8001ef42 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 1 Dec 2019 19:04:34 +1000 Subject: [PATCH] Decompile aiIfDistanceToGunLessThan --- src/game/chr/chraicommands.c | 105 ++++++--------------------- src/include/commands.h | 2 +- src/include/game/chr/chraicommands.h | 2 +- src/setup/ailists.c | 2 +- src/setup/setup_000000.c | 2 +- 5 files changed, 28 insertions(+), 85 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 5f3404d03..150617122 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -12276,87 +12276,30 @@ bool ai0170(void) /** * @cmd 0171 */ -GLOBAL_ASM( -glabel ai0171 -/* f05c948: 3c08800a */ lui $t0,%hi(g_Vars) -/* f05c94c: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f05c950: 8d0e0434 */ lw $t6,0x434($t0) -/* f05c954: 8d050438 */ lw $a1,0x438($t0) -/* f05c958: 27bdffd0 */ addiu $sp,$sp,-48 -/* f05c95c: afbf0014 */ sw $ra,0x14($sp) -/* f05c960: afae0018 */ sw $t6,0x18($sp) -/* f05c964: 01c53821 */ addu $a3,$t6,$a1 -/* f05c968: 90f80002 */ lbu $t8,0x2($a3) -/* f05c96c: 90e90003 */ lbu $t1,0x3($a3) -/* f05c970: 8d040424 */ lw $a0,0x424($t0) -/* f05c974: 0018ca00 */ sll $t9,$t8,0x8 -/* f05c978: 03295025 */ or $t2,$t9,$t1 -/* f05c97c: 448a2000 */ mtc1 $t2,$f4 -/* f05c980: 3c014120 */ lui $at,0x4120 -/* f05c984: 44814000 */ mtc1 $at,$f8 -/* f05c988: 468021a0 */ cvt.s.w $f6,$f4 -/* f05c98c: 44808000 */ mtc1 $zero,$f16 -/* f05c990: 8c830300 */ lw $v1,0x300($a0) -/* f05c994: 3c014348 */ lui $at,0x4348 -/* f05c998: 24ab0005 */ addiu $t3,$a1,0x5 -/* f05c99c: 46008386 */ mov.s $f14,$f16 -/* f05c9a0: 46083302 */ mul.s $f12,$f6,$f8 -/* f05c9a4: 1060000b */ beqz $v1,.L0f05c9d4 -/* f05c9a8: 46008006 */ mov.s $f0,$f16 -/* f05c9ac: 8c82001c */ lw $v0,0x1c($a0) -/* f05c9b0: c4720008 */ lwc1 $f18,0x8($v1) -/* f05c9b4: c466000c */ lwc1 $f6,0xc($v1) -/* f05c9b8: c44a0008 */ lwc1 $f10,0x8($v0) -/* f05c9bc: c444000c */ lwc1 $f4,0xc($v0) -/* f05c9c0: c4480010 */ lwc1 $f8,0x10($v0) -/* f05c9c4: 46125381 */ sub.s $f14,$f10,$f18 -/* f05c9c8: c46a0010 */ lwc1 $f10,0x10($v1) -/* f05c9cc: 46062001 */ sub.s $f0,$f4,$f6 -/* f05c9d0: 460a4401 */ sub.s $f16,$f8,$f10 -.L0f05c9d4: -/* f05c9d4: 44819000 */ mtc1 $at,$f18 -/* f05c9d8: 3c01c348 */ lui $at,0xc348 -/* f05c9dc: 4612003c */ c.lt.s $f0,$f18 -/* f05c9e0: 00000000 */ sll $zero,$zero,0x0 -/* f05c9e4: 4502001f */ bc1fl .L0f05ca64 -/* f05c9e8: ad0b0438 */ sw $t3,0x438($t0) -/* f05c9ec: 44812000 */ mtc1 $at,$f4 -/* f05c9f0: 00000000 */ sll $zero,$zero,0x0 -/* f05c9f4: 4600203c */ c.lt.s $f4,$f0 -/* f05c9f8: 00000000 */ sll $zero,$zero,0x0 -/* f05c9fc: 45020019 */ bc1fl .L0f05ca64 -/* f05ca00: ad0b0438 */ sw $t3,0x438($t0) -/* f05ca04: 460c703c */ c.lt.s $f14,$f12 -/* f05ca08: 00000000 */ sll $zero,$zero,0x0 -/* f05ca0c: 45020015 */ bc1fl .L0f05ca64 -/* f05ca10: ad0b0438 */ sw $t3,0x438($t0) -/* f05ca14: 46006007 */ neg.s $f0,$f12 -/* f05ca18: 460e003c */ c.lt.s $f0,$f14 -/* f05ca1c: 00000000 */ sll $zero,$zero,0x0 -/* f05ca20: 45020010 */ bc1fl .L0f05ca64 -/* f05ca24: ad0b0438 */ sw $t3,0x438($t0) -/* f05ca28: 460c803c */ c.lt.s $f16,$f12 -/* f05ca2c: 00000000 */ sll $zero,$zero,0x0 -/* f05ca30: 4502000c */ bc1fl .L0f05ca64 -/* f05ca34: ad0b0438 */ sw $t3,0x438($t0) -/* f05ca38: 4610003c */ c.lt.s $f0,$f16 -/* f05ca3c: 8fa40018 */ lw $a0,0x18($sp) -/* f05ca40: 45020008 */ bc1fl .L0f05ca64 -/* f05ca44: ad0b0438 */ sw $t3,0x438($t0) -/* f05ca48: 0fc13583 */ jal chraiGoToLabel -/* f05ca4c: 90e60004 */ lbu $a2,0x4($a3) -/* f05ca50: 3c08800a */ lui $t0,%hi(g_Vars) -/* f05ca54: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f05ca58: 10000002 */ beqz $zero,.L0f05ca64 -/* f05ca5c: ad020438 */ sw $v0,0x438($t0) -/* f05ca60: ad0b0438 */ sw $t3,0x438($t0) -.L0f05ca64: -/* f05ca64: 8fbf0014 */ lw $ra,0x14($sp) -/* f05ca68: 27bd0030 */ addiu $sp,$sp,0x30 -/* f05ca6c: 00001025 */ or $v0,$zero,$zero -/* f05ca70: 03e00008 */ jr $ra -/* f05ca74: 00000000 */ sll $zero,$zero,0x0 -); +bool aiIfDistanceToGunLessThan(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + float distance = (cmd[3] | (cmd[2] << 8)) * 10.0f; + float xdiff = 0; + float ydiff = 0; + float zdiff = 0; + + if (g_Vars.chrdata->gungroundpos) { + xdiff = g_Vars.chrdata->pos->coord.x - g_Vars.chrdata->gungroundpos->coord.x; + ydiff = g_Vars.chrdata->pos->coord.y - g_Vars.chrdata->gungroundpos->coord.y; + zdiff = g_Vars.chrdata->pos->coord.z - g_Vars.chrdata->gungroundpos->coord.z; + } + + if (ydiff < 200 && ydiff > -200 && + xdiff < distance && xdiff > -distance && + zdiff < distance && zdiff > -distance) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]); + } else { + g_Vars.aioffset += 5; + } + + return false; +} /** * @cmd 0172 diff --git a/src/include/commands.h b/src/include/commands.h index f0d9b91a7..f4d097450 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -1480,7 +1480,7 @@ bool, \ label, -#define if_distance_to_target_position_lt(distance, label) \ +#define if_distance_to_gun_lt(distance, label) \ mkshort(0x0171), \ mkshort(distance / 10), \ label, diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index 504e8cdd2..9821ed99d 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -346,7 +346,7 @@ /*0x016e*/ bool ai016e(void); /*0x016f*/ bool aiIfChrHasGun(void); /*0x0170*/ bool ai0170(void); -/*0x0171*/ bool ai0171(void); +/*0x0171*/ bool aiIfDistanceToGunLessThan(void); /*0x0172*/ bool ai0172(void); /*0x0173*/ bool aiChrCopyProperties(void); /*0x0174*/ bool aiIfCutsceneButtonPressed(void); diff --git a/src/setup/ailists.c b/src/setup/ailists.c index f617f6c3b..eb3fc15d5 100644 --- a/src/setup/ailists.c +++ b/src/setup/ailists.c @@ -980,7 +980,7 @@ u8 func0007_alerted[] = { if_gun_unclaimed(-1, TRUE, /*goto*/ 0x13) goto_next(LABEL_GETGUN_FAILED) label(0x13) - if_distance_to_target_position_lt(100, /*goto*/ 0x16) + if_distance_to_gun_lt(100, /*goto*/ 0x16) if_chr_stopped(/*goto*/ 0x16) endloop(0xad) diff --git a/src/setup/setup_000000.c b/src/setup/setup_000000.c index 071a514b6..38ed350b5 100644 --- a/src/setup/setup_000000.c +++ b/src/setup/setup_000000.c @@ -14501,7 +14501,7 @@ bool (*g_CommandPointers[])(void) = { /*0x016e*/ ai016e, /*0x016f*/ aiIfChrHasGun, /*0x0170*/ ai0170, - /*0x0171*/ ai0171, + /*0x0171*/ aiIfDistanceToGunLessThan, /*0x0172*/ ai0172, /*0x0173*/ aiChrCopyProperties, /*0x0174*/ aiIfCutsceneButtonPressed,