From f809f3ae221acdb23ae5944ef983820efaba8e53 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 24 Dec 2019 18:21:04 +1000 Subject: [PATCH] Decompile func0f03a578 --- src/game/chr/chr.c | 88 +++++++++++--------------------------- src/include/constants.h | 1 + src/include/game/chr/chr.h | 6 +-- 3 files changed, 29 insertions(+), 66 deletions(-) diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index d2b99c4d2..d8c79aaee 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -32506,69 +32506,31 @@ glabel func0f03a3ec /* f03a574: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f03a578 -/* f03a578: 27bdffe0 */ addiu $sp,$sp,-32 -/* f03a57c: afbf0014 */ sw $ra,0x14($sp) -/* f03a580: afa50024 */ sw $a1,0x24($sp) -/* f03a584: 10800003 */ beqz $a0,.L0f03a594 -/* f03a588: afa60028 */ sw $a2,0x28($sp) -/* f03a58c: 10000002 */ beqz $zero,.L0f03a598 -/* f03a590: 908302fe */ lbu $v1,0x2fe($a0) -.L0f03a594: -/* f03a594: 00001825 */ or $v1,$zero,$zero -.L0f03a598: -/* f03a598: 24010002 */ addiu $at,$zero,0x2 -/* f03a59c: 10610003 */ beq $v1,$at,.L0f03a5ac -/* f03a5a0: 24010003 */ addiu $at,$zero,0x3 -/* f03a5a4: 54610004 */ bnel $v1,$at,.L0f03a5b8 -/* f03a5a8: afa3001c */ sw $v1,0x1c($sp) -.L0f03a5ac: -/* f03a5ac: 10000021 */ beqz $zero,.L0f03a634 -/* f03a5b0: 00001025 */ or $v0,$zero,$zero -/* f03a5b4: afa3001c */ sw $v1,0x1c($sp) -.L0f03a5b8: -/* f03a5b8: 0fc0e686 */ jal func0f039a18 -/* f03a5bc: afa40020 */ sw $a0,0x20($sp) -/* f03a5c0: 8fa3001c */ lw $v1,0x1c($sp) -/* f03a5c4: 1040001a */ beqz $v0,.L0f03a630 -/* f03a5c8: 8fa40020 */ lw $a0,0x20($sp) -/* f03a5cc: 24010004 */ addiu $at,$zero,0x4 -/* f03a5d0: 14610005 */ bne $v1,$at,.L0f03a5e8 -/* f03a5d4: 00000000 */ sll $zero,$zero,0x0 -/* f03a5d8: 0fc10a02 */ jal func0f042808 -/* f03a5dc: 00000000 */ sll $zero,$zero,0x0 -/* f03a5e0: 10000014 */ beqz $zero,.L0f03a634 -/* f03a5e4: 24020001 */ addiu $v0,$zero,0x1 -.L0f03a5e8: -/* f03a5e8: 10600002 */ beqz $v1,.L0f03a5f4 -/* f03a5ec: 24010001 */ addiu $at,$zero,0x1 -/* f03a5f0: 1461000f */ bne $v1,$at,.L0f03a630 -.L0f03a5f4: -/* f03a5f4: 00002825 */ or $a1,$zero,$zero -/* f03a5f8: 0fc0a20d */ jal chrGetEquippedWeaponAttachmentWithCheck -/* f03a5fc: afa40020 */ sw $a0,0x20($sp) -/* f03a600: 14400006 */ bnez $v0,.L0f03a61c -/* f03a604: 8fa40020 */ lw $a0,0x20($sp) -/* f03a608: 24050001 */ addiu $a1,$zero,0x1 -/* f03a60c: 0fc0a20d */ jal chrGetEquippedWeaponAttachmentWithCheck -/* f03a610: afa40020 */ sw $a0,0x20($sp) -/* f03a614: 10400006 */ beqz $v0,.L0f03a630 -/* f03a618: 8fa40020 */ lw $a0,0x20($sp) -.L0f03a61c: -/* f03a61c: 8fa50024 */ lw $a1,0x24($sp) -/* f03a620: 0fc0c048 */ jal func0f030120 -/* f03a624: 8fa60028 */ lw $a2,0x28($sp) -/* f03a628: 10000002 */ beqz $zero,.L0f03a634 -/* f03a62c: 24020001 */ addiu $v0,$zero,0x1 -.L0f03a630: -/* f03a630: 00001025 */ or $v0,$zero,$zero -.L0f03a634: -/* f03a634: 8fbf0014 */ lw $ra,0x14($sp) -/* f03a638: 27bd0020 */ addiu $sp,$sp,0x20 -/* f03a63c: 03e00008 */ jr $ra -/* f03a640: 00000000 */ sll $zero,$zero,0x0 -); +bool func0f03a578(struct chrdata *chr, s32 thingtype, s32 thingid) +{ + s32 race = chr ? chr->race : RACE_HUMAN; + + if (race == RACE_MAIAN || race == RACE_ROBOT) { + return false; + } + + if (func0f039a18(chr)) { + if (race == RACE_4) { + func0f042808(chr); + return true; + } + + if (race == RACE_HUMAN || race == RACE_SKEDAR) { + if (chrGetEquippedWeaponAttachmentWithCheck(chr, 0) || + (chrGetEquippedWeaponAttachmentWithCheck(chr, 1))) { + func0f030120(chr, thingtype, thingid); + return true; + } + } + } + + return false; +} bool func0f03a644(struct chrdata *chr, s32 thingtype, s32 thingid) { diff --git a/src/include/constants.h b/src/include/constants.h index 4287dd0f1..3c07342a5 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -641,6 +641,7 @@ #define RACE_SKEDAR 1 #define RACE_MAIAN 2 #define RACE_ROBOT 3 +#define RACE_4 4 #define SPEED_WALK 0 #define SPEED_JOG 1 diff --git a/src/include/game/chr/chr.h b/src/include/game/chr/chr.h index 746ece256..1393e7c1d 100644 --- a/src/include/game/chr/chr.h +++ b/src/include/game/chr/chr.h @@ -158,7 +158,7 @@ void func0f02fc2c(struct chrdata *chr); void chrJumpOut(struct chrdata *chr, s32 arg1); void func0f02fe18(struct chrdata *chr); void chrRunToPos(struct chrdata *chr, struct coord *coord); -u32 func0f030120(void); +void func0f030120(struct chrdata *chr, s32 thingtype, s32 thingid); void func0f030308(struct chrdata *chr, s32 thingtype, s32 thingid); void func0f0303a0(struct chrdata *chr, s32 thingtype, s32 thingid); u32 func0f030584(void); @@ -242,7 +242,7 @@ u32 chrTryAttackWalk(struct chrdata *chr); u32 chrTryAttackRun(struct chrdata *chr); u32 chrTryAttackRoll(struct chrdata *chr); u32 func0f03a3ec(struct chrdata *chr, u32 arg1, u32 arg2, u32 arg3, u32 arg4); -u32 func0f03a578(struct chrdata *chr, u32 thingtype, u32 thingid); +bool func0f03a578(struct chrdata *chr, s32 thingtype, s32 thingid); bool func0f03a644(struct chrdata *chr, s32 thingtype, s32 thingid); bool func0f03a6d8(struct chrdata *chr, s32 thingtype, s32 thingid); bool func0f03a76c(struct chrdata *chr, u32 thingtype, s32 thingid); @@ -315,7 +315,7 @@ u32 func0f041d38(void); u32 func0f041e48(void); u32 func0f04262c(void); u32 func0f04279c(void); -u32 func0f042808(void); +void func0f042808(struct chrdata *chr); u32 func0f0429d8(void); u32 func0f042a40(void); u32 func0f042ffc(void);