From a56cc3a9da667f057284865670bf8ee2032187fe Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 2 Jan 2021 09:26:50 +1000 Subject: [PATCH] Decompile handHasFunctionFlags --- src/game/chr/chraction.c | 16 ++++++++-------- src/game/game_097ba0.c | 4 ++-- src/game/game_0b0420.c | 31 ++++++++++--------------------- src/game/game_0d7070.c | 2 +- src/game/game_167ae0.c | 2 +- src/game/propobj.c | 2 +- src/include/constants.h | 2 ++ src/include/game/game_0b0420.h | 2 +- 8 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 2a7c2aeac..0d3e29b70 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -5855,7 +5855,7 @@ glabel var7f1a8d98 /* f0347ec: 000d182b */ sltu $v1,$zero,$t5 /* f0347f0: 10600004 */ beqz $v1,.L0f034804 /* f0347f4: afa3005c */ sw $v1,0x5c($sp) -/* f0347f8: 0fc2c7aa */ jal func0f0b1ea8 +/* f0347f8: 0fc2c7aa */ jal handHasFunctionFlags /* f0347fc: 8fa4014c */ lw $a0,0x14c($sp) /* f034800: 0002182b */ sltu $v1,$zero,$v0 .L0f034804: @@ -5897,7 +5897,7 @@ glabel var7f1a8d98 .L0f034888: /* f034888: 8fa4014c */ lw $a0,0x14c($sp) .L0f03488c: -/* f03488c: 0fc2c7aa */ jal func0f0b1ea8 +/* f03488c: 0fc2c7aa */ jal handHasFunctionFlags /* f034890: 24050400 */ addiu $a1,$zero,0x400 /* f034894: 10400011 */ beqz $v0,.L0f0348dc /* f034898: 3c08800a */ lui $t0,%hi(g_Vars+0x314) @@ -6752,7 +6752,7 @@ glabel var7f1a8d98 /* f0354ec: 4604a502 */ mul.s $f20,$f20,$f4 /* f0354f0: 00000000 */ nop .L0f0354f4: -/* f0354f4: 0fc2c7aa */ jal func0f0b1ea8 +/* f0354f4: 0fc2c7aa */ jal handHasFunctionFlags /* f0354f8: 34058000 */ dli $a1,0x8000 /* f0354fc: 1040003e */ beqz $v0,.L0f0355f8 /* f035500: c7a00098 */ lwc1 $f0,0x98($sp) @@ -6957,7 +6957,7 @@ glabel var7f1a8d98 /* f0357cc: 8fa4014c */ lw $a0,0x14c($sp) /* f0357d0: 158000d3 */ bnez $t4,.L0f035b20 /* f0357d4: 00000000 */ nop -/* f0357d8: 0fc2c7aa */ jal func0f0b1ea8 +/* f0357d8: 0fc2c7aa */ jal handHasFunctionFlags /* f0357dc: 24050400 */ addiu $a1,$zero,0x400 /* f0357e0: 50400004 */ beqzl $v0,.L0f0357f4 /* f0357e4: 8faf0130 */ lw $t7,0x130($sp) @@ -6993,7 +6993,7 @@ glabel var7f1a8d98 /* f035854: 3c050040 */ lui $a1,0x40 /* f035858: 5120000a */ beqzl $t1,.L0f035884 /* f03585c: 8fa4014c */ lw $a0,0x14c($sp) -/* f035860: 0fc2c7aa */ jal func0f0b1ea8 +/* f035860: 0fc2c7aa */ jal handHasFunctionFlags /* f035864: e7a0008c */ swc1 $f0,0x8c($sp) /* f035868: 10400005 */ beqz $v0,.L0f035880 /* f03586c: c7a0008c */ lwc1 $f0,0x8c($sp) @@ -7198,7 +7198,7 @@ glabel var7f1a8d98 /* f035b3c: 24010005 */ addiu $at,$zero,0x5 /* f035b40: 104101ff */ beq $v0,$at,.L0f036340 /* f035b44: 8fa4014c */ lw $a0,0x14c($sp) -/* f035b48: 0fc2c7aa */ jal func0f0b1ea8 +/* f035b48: 0fc2c7aa */ jal handHasFunctionFlags /* f035b4c: 24050400 */ addiu $a1,$zero,0x400 /* f035b50: 50400027 */ beqzl $v0,.L0f035bf0 /* f035b54: c6040100 */ lwc1 $f4,0x100($s0) @@ -7274,7 +7274,7 @@ glabel var7f1a8d98 /* f035c54: 24010004 */ addiu $at,$zero,0x4 /* f035c58: 11010018 */ beq $t0,$at,.L0f035cbc /* f035c5c: 8fa4014c */ lw $a0,0x14c($sp) -/* f035c60: 0fc2c7aa */ jal func0f0b1ea8 +/* f035c60: 0fc2c7aa */ jal handHasFunctionFlags /* f035c64: 3c050020 */ lui $a1,0x20 /* f035c68: 10400006 */ beqz $v0,.L0f035c84 /* f035c6c: 00000000 */ nop @@ -7624,7 +7624,7 @@ glabel var7f1a8d98 /* f036148: 00000000 */ nop /* f03614c: 4503000b */ bc1tl .L0f03617c /* f036150: 3c01bf80 */ lui $at,0xbf80 -/* f036154: 0fc2c7aa */ jal func0f0b1ea8 +/* f036154: 0fc2c7aa */ jal handHasFunctionFlags /* f036158: 3c050001 */ lui $a1,0x1 /* f03615c: 10400012 */ beqz $v0,.L0f0361a8 /* f036160: 8fb80154 */ lw $t8,0x154($sp) diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index e4a4d932b..5baddd786 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -9498,7 +9498,7 @@ glabel var7f1ac72c /* f09f34c: 100000a9 */ b .L0f09f5f4 /* f09f350: e7a8023c */ swc1 $f8,0x23c($sp) .L0f09f354: -/* f09f354: 0fc2c7aa */ jal func0f0b1ea8 +/* f09f354: 0fc2c7aa */ jal handHasFunctionFlags /* f09f358: 3c050080 */ lui $a1,0x80 /* f09f35c: 10400087 */ beqz $v0,.L0f09f57c /* f09f360: 3c017f1b */ lui $at,%hi(var7f1ac714) @@ -10110,7 +10110,7 @@ glabel var7f1ac740 /* f09fc00: 00000000 */ nop /* f09fc04: 46803420 */ cvt.s.w $f16,$f6 /* f09fc08: 46008282 */ mul.s $f10,$f16,$f0 -/* f09fc0c: 0fc2c7aa */ jal func0f0b1ea8 +/* f09fc0c: 0fc2c7aa */ jal handHasFunctionFlags /* f09fc10: e7aa025c */ swc1 $f10,0x25c($sp) /* f09fc14: 1040007a */ beqz $v0,.L0f09fe00 /* f09fc18: 00002025 */ or $a0,$zero,$zero diff --git a/src/game/game_0b0420.c b/src/game/game_0b0420.c index 007b658e2..b9bfddad9 100644 --- a/src/game/game_0b0420.c +++ b/src/game/game_0b0420.c @@ -1519,27 +1519,16 @@ glabel func0f0b1e68 /* f0b1ea4: 27bd0018 */ addiu $sp,$sp,0x18 ); -GLOBAL_ASM( -glabel func0f0b1ea8 -/* f0b1ea8: 27bdffe8 */ addiu $sp,$sp,-24 -/* f0b1eac: afbf0014 */ sw $ra,0x14($sp) -/* f0b1eb0: 0fc2c41f */ jal handGetWeaponFunction -/* f0b1eb4: afa5001c */ sw $a1,0x1c($sp) -/* f0b1eb8: 10400006 */ beqz $v0,.L0f0b1ed4 -/* f0b1ebc: 8fa4001c */ lw $a0,0x1c($sp) -/* f0b1ec0: 8c4e0010 */ lw $t6,0x10($v0) -/* f0b1ec4: 01c47824 */ and $t7,$t6,$a0 -/* f0b1ec8: 008f1026 */ xor $v0,$a0,$t7 -/* f0b1ecc: 10000002 */ b .L0f0b1ed8 -/* f0b1ed0: 2c420001 */ sltiu $v0,$v0,0x1 -.L0f0b1ed4: -/* f0b1ed4: 00001025 */ or $v0,$zero,$zero -.L0f0b1ed8: -/* f0b1ed8: 8fbf0014 */ lw $ra,0x14($sp) -/* f0b1edc: 27bd0018 */ addiu $sp,$sp,0x18 -/* f0b1ee0: 03e00008 */ jr $ra -/* f0b1ee4: 00000000 */ nop -); +bool handHasFunctionFlags(struct hand *hand, u32 flags) +{ + struct weaponfunc *func = handGetWeaponFunction(hand); + + if (func) { + return (func->flags & flags) == flags; + } + + return false; +} s8 weaponGetMaxFireRatePerTick(u32 weaponnum, u32 funcindex) { diff --git a/src/game/game_0d7070.c b/src/game/game_0d7070.c index 2d9f690b8..517e3c71a 100644 --- a/src/game/game_0d7070.c +++ b/src/game/game_0d7070.c @@ -376,7 +376,7 @@ glabel var7f1adddc /* f0d7470: afaa0058 */ sw $t2,0x58($sp) /* f0d7474: 24840638 */ addiu $a0,$a0,0x638 /* f0d7478: 0007cf02 */ srl $t9,$a3,0x1c -/* f0d747c: 0fc2c7aa */ jal func0f0b1ea8 +/* f0d747c: 0fc2c7aa */ jal handHasFunctionFlags /* f0d7480: a3b9006b */ sb $t9,0x6b($sp) /* f0d7484: 93a7006b */ lbu $a3,0x6b($sp) /* f0d7488: 10400002 */ beqz $v0,.L0f0d7494 diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index 04dbf42eb..6d13199db 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -1642,7 +1642,7 @@ Gfx *renderFrame(Gfx *gdl) g_Vars.currentplayer->lookingatprop.prop = NULL; } - if (func0f0b1ea8(g_Vars.currentplayer->hands, 0x80000)) { + if (handHasFunctionFlags(g_Vars.currentplayer->hands, FUNCFLAG_00080000)) { func0f1691c0(); } else if (weaponHasFlag(getCurrentPlayerWeaponId(0), WEAPONFLAG_AIMTRACK)) { s32 j; diff --git a/src/game/propobj.c b/src/game/propobj.c index 3c2d1bcbb..3686c190d 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -17323,7 +17323,7 @@ glabel var7f1aa438 /* f0754f4: 24010035 */ addiu $at,$zero,0x35 /* f0754f8: 10e10006 */ beq $a3,$at,.L0f075514 /* f0754fc: 2624005c */ addiu $a0,$s1,0x5c -/* f075500: 0fc2c7aa */ jal func0f0b1ea8 +/* f075500: 0fc2c7aa */ jal handHasFunctionFlags /* f075504: 24050100 */ addiu $a1,$zero,0x100 /* f075508: 50400014 */ beqzl $v0,.L0f07555c /* f07550c: 8fb801f8 */ lw $t8,0x1f8($sp) diff --git a/src/include/constants.h b/src/include/constants.h index 9356ce062..1177e1d89 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -747,6 +747,8 @@ #define FUNC_PRIMARY 0 #define FUNC_SECONDARY 1 +#define FUNCFLAG_00080000 0x00080000 + #define GAILIST_IDLE 0x0000 #define GAILIST_UNALERTED_0001 0x0001 #define GAILIST_UNALERTED_0002 0x0002 diff --git a/src/include/game/game_0b0420.h b/src/include/game/game_0b0420.h index 9a29bec0a..0cff98777 100644 --- a/src/include/game/game_0b0420.h +++ b/src/include/game/game_0b0420.h @@ -44,7 +44,7 @@ u32 func0f0b1ce8(void); f32 func0f0b1d28(u8 *weaponnum); u32 func0f0b1e28(void); u32 func0f0b1e68(void); -bool func0f0b1ea8(struct hand *hand, u32 arg1); +bool handHasFunctionFlags(struct hand *hand, u32 flags); s8 weaponGetMaxFireRatePerTick(u32 weaponnum, u32 funcindex); u32 currentPlayerGetSight(void); u32 func0f0b201c(void);