From 66fab8d95c9a1bb473fff345d5c36df024b50657 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 24 Dec 2019 17:19:06 +1000 Subject: [PATCH] Decompile func0f03a76c --- src/game/chr/chr.c | 56 ++++++++++++-------------------------- src/include/game/chr/chr.h | 2 +- src/include/types.h | 2 +- 3 files changed, 19 insertions(+), 41 deletions(-) diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 69d606ad6..d5da33c60 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -32664,45 +32664,23 @@ glabel func0f03a6d8 /* f03a768: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f03a76c -/* f03a76c: 27bdffe8 */ addiu $sp,$sp,-24 -/* f03a770: 10800003 */ beqz $a0,.L0f03a780 -/* f03a774: afbf0014 */ sw $ra,0x14($sp) -/* f03a778: 10000002 */ beqz $zero,.L0f03a784 -/* f03a77c: 908202fe */ lbu $v0,0x2fe($a0) -.L0f03a780: -/* f03a780: 00001025 */ or $v0,$zero,$zero -.L0f03a784: -/* f03a784: 24010002 */ addiu $at,$zero,0x2 -/* f03a788: 10410003 */ beq $v0,$at,.L0f03a798 -/* f03a78c: 24010003 */ addiu $at,$zero,0x3 -/* f03a790: 54410004 */ bnel $v0,$at,.L0f03a7a4 -/* f03a794: 808e0007 */ lb $t6,0x7($a0) -.L0f03a798: -/* f03a798: 1000000f */ beqz $zero,.L0f03a7d8 -/* f03a79c: 00001025 */ or $v0,$zero,$zero -/* f03a7a0: 808e0007 */ lb $t6,0x7($a0) -.L0f03a7a4: -/* f03a7a4: 24010008 */ addiu $at,$zero,0x8 -/* f03a7a8: 00001025 */ or $v0,$zero,$zero -/* f03a7ac: 15c1000a */ bne $t6,$at,.L0f03a7d8 -/* f03a7b0: 00000000 */ sll $zero,$zero,0x0 -/* f03a7b4: 8c8f004c */ lw $t7,0x4c($a0) -/* f03a7b8: 31f80060 */ andi $t8,$t7,0x60 -/* f03a7bc: 13000006 */ beqz $t8,.L0f03a7d8 -/* f03a7c0: 00000000 */ sll $zero,$zero,0x0 -/* f03a7c4: ac85004c */ sw $a1,0x4c($a0) -/* f03a7c8: 0fc0c495 */ jal func0f031254 -/* f03a7cc: ac860050 */ sw $a2,0x50($a0) -/* f03a7d0: 10000001 */ beqz $zero,.L0f03a7d8 -/* f03a7d4: 24020001 */ addiu $v0,$zero,0x1 -.L0f03a7d8: -/* f03a7d8: 8fbf0014 */ lw $ra,0x14($sp) -/* f03a7dc: 27bd0018 */ addiu $sp,$sp,0x18 -/* f03a7e0: 03e00008 */ jr $ra -/* f03a7e4: 00000000 */ sll $zero,$zero,0x0 -); +bool func0f03a76c(struct chrdata *chr, u32 thingtype, s32 thingid) +{ + u8 race = chr ? chr->race : RACE_HUMAN; + + if (race == RACE_MAIAN || race == RACE_ROBOT) { + return false; + } + + if (chr->actiontype == ACT_ATTACK && (chr->act_attack.unk04c & 0x60)) { + chr->act_attack.unk04c = thingtype; + chr->act_attack.unk050 = thingid; + func0f031254(); + return true; + } + + return false; +} bool chrFaceEntity(struct chrdata *chr, u32 entity_type, u32 entity_id) { diff --git a/src/include/game/chr/chr.h b/src/include/game/chr/chr.h index 0753e1122..c7aac65ea 100644 --- a/src/include/game/chr/chr.h +++ b/src/include/game/chr/chr.h @@ -245,7 +245,7 @@ u32 func0f03a3ec(struct chrdata *chr, u32 arg1, u32 arg2, u32 arg3, u32 arg4); u32 func0f03a578(struct chrdata *chr, u32 thingtype, u32 thingid); u32 func0f03a644(struct chrdata *chr, u32 thingtype, u32 thingid); u32 func0f03a6d8(struct chrdata *chr, u32 thingtype, u32 thingid); -u32 func0f03a76c(struct chrdata *chr, u32 thingtype, u32 thingid); +bool func0f03a76c(struct chrdata *chr, u32 thingtype, s32 thingid); bool chrFaceEntity(struct chrdata *chr, u32 entity_type, u32 entity_id); u32 func0f03a894(struct chrdata *chr, s32 pad, s32 arg2); u32 chrStartPath(struct chrdata *chr); diff --git a/src/include/types.h b/src/include/types.h index 0ab0b93fc..43fe19b25 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -229,6 +229,7 @@ struct act_attack { /*0x44*/ u32 unk044; /*0x48*/ u32 unk048; /*0x4c*/ u32 unk04c; + /*0x50*/ u32 unk050; }; struct act_sidestep { @@ -286,7 +287,6 @@ struct chrdata { struct act_throwgrenade act_throwgrenade; }; - /*0x050*/ u32 unk050; /*0x054*/ u32 unk054; /*0x058*/ void *unk058; /*0x05c*/ u32 unk05c;