From 2822c245f882632f47f968eb8818e84cc03d23d0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 18 Nov 2020 23:11:57 +1000 Subject: [PATCH] Decompile func0f02dff0 --- src/game/chr/chraction.c | 56 ++++------ src/game/data/data_0083d0.c | 167 ++++++++++++---------------- src/include/game/chr/chraction.h | 2 +- src/include/game/data/data_0083d0.h | 2 +- src/include/types.h | 5 + 5 files changed, 97 insertions(+), 135 deletions(-) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index a0091023b..14435a281 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -73,42 +73,26 @@ u32 var80068264 = 0x00000000; u32 var80068268 = 0x807b8079; u32 var8006826c = 0x807c0000; -GLOBAL_ASM( -glabel func0f02dff0 -/* f02dff0: 00043400 */ sll $a2,$a0,0x10 -/* f02dff4: 00067403 */ sra $t6,$a2,0x10 -/* f02dff8: 3c058006 */ lui $a1,%hi(var80067fdc) -/* f02dffc: 3c078006 */ lui $a3,%hi(var80067ff0) -/* f02e000: 01c03025 */ or $a2,$t6,$zero -/* f02e004: afa40000 */ sw $a0,0x0($sp) -/* f02e008: 24e77ff0 */ addiu $a3,$a3,%lo(var80067ff0) -/* f02e00c: 24a57fdc */ addiu $a1,$a1,%lo(var80067fdc) -/* f02e010: 8ca40000 */ lw $a0,0x0($a1) -.L0f02e014: -/* f02e014: 24a50004 */ addiu $a1,$a1,0x4 -/* f02e018: 84830000 */ lh $v1,0x0($a0) -/* f02e01c: 00801025 */ or $v0,$a0,$zero -/* f02e020: 04600009 */ bltz $v1,.L0f02e048 -/* f02e024: 00000000 */ nop -.L0f02e028: -/* f02e028: 54660004 */ bnel $v1,$a2,.L0f02e03c -/* f02e02c: 84430008 */ lh $v1,0x8($v0) -/* f02e030: 03e00008 */ jr $ra -/* f02e034: c4400004 */ lwc1 $f0,0x4($v0) -/* f02e038: 84430008 */ lh $v1,0x8($v0) -.L0f02e03c: -/* f02e03c: 24420008 */ addiu $v0,$v0,0x8 -/* f02e040: 0461fff9 */ bgez $v1,.L0f02e028 -/* f02e044: 00000000 */ nop -.L0f02e048: -/* f02e048: 54a7fff2 */ bnel $a1,$a3,.L0f02e014 -/* f02e04c: 8ca40000 */ lw $a0,0x0($a1) -/* f02e050: 3c013f80 */ lui $at,0x3f80 -/* f02e054: 44810000 */ mtc1 $at,$f0 -/* f02e058: 00000000 */ nop -/* f02e05c: 03e00008 */ jr $ra -/* f02e060: 00000000 */ nop -); +f32 func0f02dff0(s16 animnum) +{ + s32 i; + + for (i = 0; i < ARRAYCOUNT(var80067fdc); i++) { + s32 j = 0; + s16 thisanimnum = var80067fdc[i][j].animnum; + + while (thisanimnum >= 0) { + if (thisanimnum == animnum) { + return var80067fdc[i][j].value; + } + + j++; + thisanimnum = var80067fdc[i][j].animnum; + } + } + + return 1; +} GLOBAL_ASM( glabel func0f02e064 diff --git a/src/game/data/data_0083d0.c b/src/game/data/data_0083d0.c index bfedc5f16..5aad39b11 100644 --- a/src/game/data/data_0083d0.c +++ b/src/game/data/data_0083d0.c @@ -1749,103 +1749,76 @@ s32 g_NumChrsB = 0; s16 *g_TeamList = NULL; s16 *g_SquadronList = NULL; -u32 var80067e6c = 0x00280000; -u32 var80067e70 = 0x00000000; -u32 var80067e74 = 0x002a0000; -u32 var80067e78 = 0x00000000; -u32 var80067e7c = 0x00290000; -u32 var80067e80 = 0x00000000; -u32 var80067e84 = 0x006b0000; -u32 var80067e88 = 0x00000000; -u32 var80067e8c = 0x00590000; -u32 var80067e90 = 0x00000000; -u32 var80067e94 = 0x005a0000; -u32 var80067e98 = 0x00000000; -u32 var80067e9c = 0x00720000; -u32 var80067ea0 = 0x00000000; -u32 var80067ea4 = 0x00730000; -u32 var80067ea8 = 0x00000000; -u32 var80067eac = 0x005a0000; -u32 var80067eb0 = 0x00000000; -u32 var80067eb4 = 0x006c0000; -u32 var80067eb8 = 0x00000000; -u32 var80067ebc = 0x00300000; -u32 var80067ec0 = 0x00000000; -u32 var80067ec4 = 0x00310000; -u32 var80067ec8 = 0x00000000; -u32 var80067ecc = 0x00520000; -u32 var80067ed0 = 0x00000000; -u32 var80067ed4 = 0x00550000; -u32 var80067ed8 = 0x00000000; -u32 var80067edc = 0x006e0000; -u32 var80067ee0 = 0x00000000; -u32 var80067ee4 = 0x006f0000; -u32 var80067ee8 = 0x00000000; -u32 var80067eec = 0x00570000; -u32 var80067ef0 = 0x00000000; -u32 var80067ef4 = 0x00560000; -u32 var80067ef8 = 0x00000000; -u32 var80067efc = 0x006d0000; -u32 var80067f00 = 0x00000000; -u32 var80067f04 = 0x00590000; -u32 var80067f08 = 0x00000000; -u32 var80067f0c = 0x020a0000; -u32 var80067f10 = 0x00000000; -u32 var80067f14 = 0x020d0000; -u32 var80067f18 = 0x00000000; -u32 var80067f1c = 0x01f90000; -u32 var80067f20 = 0x00000000; -u32 var80067f24 = 0x01f80000; -u32 var80067f28 = 0x00000000; -u32 var80067f2c = 0x021d0000; -u32 var80067f30 = 0x00000000; -u32 var80067f34 = 0x00160000; -u32 var80067f38 = 0x00000000; -u32 var80067f3c = 0x00180000; -u32 var80067f40 = 0x00000000; -u32 var80067f44 = 0x001b0000; -u32 var80067f48 = 0x00000000; -u32 var80067f4c = 0x001d0000; -u32 var80067f50 = 0x00000000; -u32 var80067f54 = 0x001e0000; -u32 var80067f58 = 0x00000000; -u32 var80067f5c = 0x005c0000; -u32 var80067f60 = 0x00000000; -u32 var80067f64 = 0x005d0000; -u32 var80067f68 = 0x00000000; -u32 var80067f6c = 0x005e0000; -u32 var80067f70 = 0x00000000; -u32 var80067f74 = 0x005f0000; -u32 var80067f78 = 0x00000000; -u32 var80067f7c = 0xffff0000; -u32 var80067f80 = 0x00000000; -u32 var80067f84 = 0x03920000; -u32 var80067f88 = 0x00000000; -u32 var80067f8c = 0x03930000; -u32 var80067f90 = 0x00000000; -u32 var80067f94 = 0x03940000; -u32 var80067f98 = 0x00000000; -u32 var80067f9c = 0xffff0000; -u32 var80067fa0 = 0x00000000; -u32 var80067fa4 = 0x015f0000; -u32 var80067fa8 = 0x00000000; -u32 var80067fac = 0x01600000; -u32 var80067fb0 = 0x00000000; -u32 var80067fb4 = 0xffff0000; -u32 var80067fb8 = 0x00000000; -u32 var80067fbc = 0x015f0000; -u32 var80067fc0 = 0x00000000; -u32 var80067fc4 = 0xffff0000; -u32 var80067fc8 = 0x00000000; -u32 var80067fcc = 0x02380000; -u32 var80067fd0 = 0x00000000; -u32 var80067fd4 = 0xffff0000; -u32 var80067fd8 = 0x00000000; -u32 var80067fdc = (u32) &var80067e6c; -u32 var80067fe0 = (u32) &var80067f84; -u32 var80067fe4 = (u32) &var80067fa4; -u32 var80067fe8 = (u32) &var80067fbc; -u32 var80067fec = (u32) &var80067fcc; + +struct var80067e6c var80067e6c[] = { + { 0x0028, 0 }, + { 0x002a, 0 }, + { 0x0029, 0 }, + { 0x006b, 0 }, + { 0x0059, 0 }, + { 0x005a, 0 }, + { 0x0072, 0 }, + { 0x0073, 0 }, + { 0x005a, 0 }, + { 0x006c, 0 }, + { 0x0030, 0 }, + { 0x0031, 0 }, + { 0x0052, 0 }, + { 0x0055, 0 }, + { 0x006e, 0 }, + { 0x006f, 0 }, + { 0x0057, 0 }, + { 0x0056, 0 }, + { 0x006d, 0 }, + { 0x0059, 0 }, + { 0x020a, 0 }, + { 0x020d, 0 }, + { 0x01f9, 0 }, + { 0x01f8, 0 }, + { 0x021d, 0 }, + { 0x0016, 0 }, + { 0x0018, 0 }, + { 0x001b, 0 }, + { 0x001d, 0 }, + { 0x001e, 0 }, + { 0x005c, 0 }, + { 0x005d, 0 }, + { 0x005e, 0 }, + { 0x005f, 0 }, + { -1 }, +}; + +struct var80067e6c var80067f84[] = { + { 0x0392, 0 }, + { 0x0393, 0 }, + { 0x0394, 0 }, + { -1 }, +}; + +struct var80067e6c var80067fa4[] = { + { 0x015f, 0 }, + { 0x0160, 0 }, + { -1 }, +}; + +struct var80067e6c var80067fbc[] = { + { 0x015f, 0 }, + { -1 }, +}; + +struct var80067e6c var80067fcc[] = { + { 0x0238, 0 }, + { -1 }, +}; + +struct var80067e6c *var80067fdc[] = { + var80067e6c, + var80067f84, + var80067fa4, + var80067fbc, + var80067fcc, +}; + u32 var80067ff0 = 0x0001006a; u32 var80067ff4 = 0xffff0000; u32 var80067ff8 = 0x00c0ffff; diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index e98c7cf3c..b0616cdc4 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -3,7 +3,7 @@ #include #include "types.h" -f32 func0f02dff0(u32 animnum); +f32 func0f02dff0(s16 animnum); u32 func0f02e064(struct chrdata *chr); bool weaponIsOneHanded(struct prop *prop); f32 chrGetRangedSpeed(struct chrdata *chr, f32 min, f32 max); diff --git a/src/include/game/data/data_0083d0.h b/src/include/game/data/data_0083d0.h index 4e4ff8f5b..d39b76304 100644 --- a/src/include/game/data/data_0083d0.h +++ b/src/include/game/data/data_0083d0.h @@ -174,7 +174,7 @@ extern s16 *g_ChrnumsB; extern s32 g_NumChrsB; extern s16 *g_TeamList; extern s16 *g_SquadronList; -extern u32 var80067fdc; +extern struct var80067e6c *var80067fdc[5]; extern u32 var80067ff0; extern u32 var80068008; extern u32 var8006801c; diff --git a/src/include/types.h b/src/include/types.h index ae5608bdf..1bc53c1d0 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6866,4 +6866,9 @@ struct pakthing16 { u32 unk0c_21 : 9; }; +struct var80067e6c { + s16 animnum; + f32 value; +}; + #endif