From b90635bd7c9beccec46142f06e7d34e332675ad2 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 19 Nov 2020 21:35:54 +1000 Subject: [PATCH] Decompile func0f02e064 --- src/game/chr/chraction.c | 83 +++++++++-------------------- src/game/data/data_0083d0.c | 26 +++++---- src/include/game/chr/chraction.h | 2 +- src/include/game/data/data_0083d0.h | 4 +- 4 files changed, 43 insertions(+), 72 deletions(-) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index b5332cb45..ccb275bf3 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -94,64 +94,31 @@ f32 func0f02dff0(s16 animnum) return 1; } -GLOBAL_ASM( -glabel func0f02e064 -/* f02e064: 27bdffe8 */ addiu $sp,$sp,-24 -/* f02e068: afbf0014 */ sw $ra,0x14($sp) -/* f02e06c: 8c8e02d4 */ lw $t6,0x2d4($a0) -/* f02e070: 00802825 */ or $a1,$a0,$zero -/* f02e074: 11c0000d */ beqz $t6,.L0f02e0ac -/* f02e078: 00000000 */ nop -/* f02e07c: 80820007 */ lb $v0,0x7($a0) -/* f02e080: 24010001 */ addiu $at,$zero,0x1 -/* f02e084: 10410007 */ beq $v0,$at,.L0f02e0a4 -/* f02e088: 2401000f */ addiu $at,$zero,0xf -/* f02e08c: 54410021 */ bnel $v0,$at,.L0f02e114 -/* f02e090: 00001025 */ or $v0,$zero,$zero -/* f02e094: 908f0065 */ lbu $t7,0x65($a0) -/* f02e098: 31f80020 */ andi $t8,$t7,0x20 -/* f02e09c: 5300001d */ beqzl $t8,.L0f02e114 -/* f02e0a0: 00001025 */ or $v0,$zero,$zero -.L0f02e0a4: -/* f02e0a4: 1000001b */ b .L0f02e114 -/* f02e0a8: 24020001 */ addiu $v0,$zero,0x1 -.L0f02e0ac: -/* f02e0ac: 0c00744f */ jal modelGetAnimNum -/* f02e0b0: 8ca40020 */ lw $a0,0x20($a1) -/* f02e0b4: 3c078007 */ lui $a3,%hi(var80068008) -/* f02e0b8: 3c088007 */ lui $t0,%hi(var8006801c) -/* f02e0bc: 2508801c */ addiu $t0,$t0,%lo(var8006801c) -/* f02e0c0: 24e78008 */ addiu $a3,$a3,%lo(var80068008) -/* f02e0c4: 8ce50000 */ lw $a1,0x0($a3) -.L0f02e0c8: -/* f02e0c8: 00023400 */ sll $a2,$v0,0x10 -/* f02e0cc: 0006cc03 */ sra $t9,$a2,0x10 -/* f02e0d0: 84a30000 */ lh $v1,0x0($a1) -/* f02e0d4: 24e70004 */ addiu $a3,$a3,0x4 -/* f02e0d8: 03203025 */ or $a2,$t9,$zero -/* f02e0dc: 0460000a */ bltz $v1,.L0f02e108 -/* f02e0e0: 00002025 */ or $a0,$zero,$zero -.L0f02e0e4: -/* f02e0e4: 14660003 */ bne $v1,$a2,.L0f02e0f4 -/* f02e0e8: 24840001 */ addiu $a0,$a0,0x1 -/* f02e0ec: 10000009 */ b .L0f02e114 -/* f02e0f0: 24020001 */ addiu $v0,$zero,0x1 -.L0f02e0f4: -/* f02e0f4: 00044840 */ sll $t1,$a0,0x1 -/* f02e0f8: 00a95021 */ addu $t2,$a1,$t1 -/* f02e0fc: 85430000 */ lh $v1,0x0($t2) -/* f02e100: 0461fff8 */ bgez $v1,.L0f02e0e4 -/* f02e104: 00000000 */ nop -.L0f02e108: -/* f02e108: 54e8ffef */ bnel $a3,$t0,.L0f02e0c8 -/* f02e10c: 8ce50000 */ lw $a1,0x0($a3) -/* f02e110: 00001025 */ or $v0,$zero,$zero -.L0f02e114: -/* f02e114: 8fbf0014 */ lw $ra,0x14($sp) -/* f02e118: 27bd0018 */ addiu $sp,$sp,0x18 -/* f02e11c: 03e00008 */ jr $ra -/* f02e120: 00000000 */ nop -); +s32 func0f02e064(struct chrdata *chr) +{ + if (chr->aibot) { + if (chr->actiontype == ACT_STAND + || (chr->actiontype == ACT_GOPOS && (chr->act_gopos.flags & 0x20))) { + return true; + } + } else { + s16 animnum = modelGetAnimNum(chr->model); + s32 i; + + for (i = 0; i < ARRAYCOUNT(var80068008); i++) { + s16 thisanimnum; + s32 j; + + for (j = 0; (thisanimnum = var80068008[i][j]) >= 0; j++) { + if (thisanimnum == animnum) { + return true; + } + } + } + } + + return false; +} bool weaponIsOneHanded(struct prop *prop) { diff --git a/src/game/data/data_0083d0.c b/src/game/data/data_0083d0.c index 5aad39b11..129c5f301 100644 --- a/src/game/data/data_0083d0.c +++ b/src/game/data/data_0083d0.c @@ -1819,17 +1819,21 @@ struct var80067e6c *var80067fdc[] = { var80067fcc, }; -u32 var80067ff0 = 0x0001006a; -u32 var80067ff4 = 0xffff0000; -u32 var80067ff8 = 0x00c0ffff; -u32 var80067ffc = 0x013effff; -u32 var80068000 = 0x013effff; -u32 var80068004 = 0x0237ffff; -u32 var80068008 = (u32) &var80067ff0; -u32 var8006800c = (u32) &var80067ff8; -u32 var80068010 = (u32) &var80067ffc; -u32 var80068014 = (u32) &var80068000; -u32 var80068018 = (u32) &var80068004; +// These are animation numbers +s16 var80067ff0[] = { 0x0001, 0x006a, -1 }; +s16 var80067ff8[] = { 0x00c0, -1 }; +s16 var80067ffc[] = { 0x013e, -1 }; +s16 var80068000[] = { 0x013e, -1 }; +s16 var80068004[] = { 0x0237, -1 }; + +s16 *var80068008[] = { + var80067ff0, + var80067ff8, + var80067ffc, + var80068000, + var80068004, +}; + u32 var8006801c = 0x00000000; u32 var80068020 = 0x00000000; u32 var80068024 = 0x00000000; diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index b0616cdc4..f3a447d59 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -4,7 +4,7 @@ #include "types.h" f32 func0f02dff0(s16 animnum); -u32 func0f02e064(struct chrdata *chr); +s32 func0f02e064(struct chrdata *chr); bool weaponIsOneHanded(struct prop *prop); f32 chrGetRangedSpeed(struct chrdata *chr, f32 min, f32 max); s32 chrGetPercentageOfSlowness(struct chrdata *chr, s32 percentage); diff --git a/src/include/game/data/data_0083d0.h b/src/include/game/data/data_0083d0.h index d39b76304..379fcfbaf 100644 --- a/src/include/game/data/data_0083d0.h +++ b/src/include/game/data/data_0083d0.h @@ -175,8 +175,8 @@ extern s32 g_NumChrsB; extern s16 *g_TeamList; extern s16 *g_SquadronList; extern struct var80067e6c *var80067fdc[5]; -extern u32 var80067ff0; -extern u32 var80068008; +extern s16 var80067ff0[]; +extern s16 *var80068008[5]; extern u32 var8006801c; extern u32 var80068024; extern u32 var8006802c;