From 2b69e366a00c5beea258ee24cb49b53c2e6f181f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 16 Apr 2021 17:31:56 +1000 Subject: [PATCH] Decompile func0f097e74 --- src/game/game_097ba0.c | 78 +++++++++++----------------------- src/include/game/game_097ba0.h | 6 +-- src/include/types.h | 68 ++--------------------------- 3 files changed, 31 insertions(+), 121 deletions(-) diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 486227a50..6ef780991 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -436,58 +436,30 @@ glabel func0f097df0 /* f097e70: 00601025 */ or $v0,$v1,$zero ); -GLOBAL_ASM( -glabel func0f097e74 -/* f097e74: 27bdffe8 */ addiu $sp,$sp,-24 -/* f097e78: afa40018 */ sw $a0,0x18($sp) -/* f097e7c: 87ae001a */ lh $t6,0x1a($sp) -/* f097e80: 24010035 */ addiu $at,$zero,0x35 -/* f097e84: afbf0014 */ sw $ra,0x14($sp) -/* f097e88: afa5001c */ sw $a1,0x1c($sp) -/* f097e8c: 11c10004 */ beq $t6,$at,.L0f097ea0 -/* f097e90: afa60020 */ sw $a2,0x20($sp) -/* f097e94: 24010036 */ addiu $at,$zero,0x36 -/* f097e98: 15c10013 */ bne $t6,$at,.L0f097ee8 -/* f097e9c: 00e02025 */ or $a0,$a3,$zero -.L0f097ea0: -/* f097ea0: 3c0f800a */ lui $t7,%hi(g_Vars+0x284) -/* f097ea4: 8defa244 */ lw $t7,%lo(g_Vars+0x284)($t7) -/* f097ea8: 8de41594 */ lw $a0,0x1594($t7) -/* f097eac: 5080001b */ beqzl $a0,.L0f097f1c -/* f097eb0: 8fbf0014 */ lw $ra,0x14($sp) -/* f097eb4: 0c006a47 */ jal modelGetPart -/* f097eb8: 87a5001a */ lh $a1,0x1a($sp) -/* f097ebc: 50400017 */ beqzl $v0,.L0f097f1c -/* f097ec0: 8fbf0014 */ lw $ra,0x14($sp) -/* f097ec4: 8c430004 */ lw $v1,0x4($v0) -/* f097ec8: 8fb80020 */ lw $t8,0x20($sp) -/* f097ecc: 8fa9001c */ lw $t1,0x1c($sp) -/* f097ed0: 94790004 */ lhu $t9,0x4($v1) -/* f097ed4: 00194080 */ sll $t0,$t9,0x2 -/* f097ed8: 03082021 */ addu $a0,$t8,$t0 -/* f097edc: 248404b4 */ addiu $a0,$a0,0x4b4 -/* f097ee0: 1000000d */ b .L0f097f18 -/* f097ee4: ac890000 */ sw $t1,0x0($a0) -.L0f097ee8: -/* f097ee8: 0c006a47 */ jal modelGetPart -/* f097eec: 87a5001a */ lh $a1,0x1a($sp) -/* f097ef0: 5040000a */ beqzl $v0,.L0f097f1c -/* f097ef4: 8fbf0014 */ lw $ra,0x14($sp) -/* f097ef8: 8c430004 */ lw $v1,0x4($v0) -/* f097efc: 8faa0020 */ lw $t2,0x20($sp) -/* f097f00: 8fad001c */ lw $t5,0x1c($sp) -/* f097f04: 946b0004 */ lhu $t3,0x4($v1) -/* f097f08: 000b6080 */ sll $t4,$t3,0x2 -/* f097f0c: 014c2021 */ addu $a0,$t2,$t4 -/* f097f10: 24840434 */ addiu $a0,$a0,0x434 -/* f097f14: ac8d0000 */ sw $t5,0x0($a0) -.L0f097f18: -/* f097f18: 8fbf0014 */ lw $ra,0x14($sp) -.L0f097f1c: -/* f097f1c: 27bd0018 */ addiu $sp,$sp,0x18 -/* f097f20: 03e00008 */ jr $ra -/* f097f24: 00000000 */ nop -); +void func0f097e74(s16 partnum, s32 arg1, struct hand *hand, struct modelfiledata *arg3) +{ + struct modelnode *node; + + if (partnum == 0x35 || partnum == 0x36) { + if (g_Vars.currentplayer->gunctrl.unk1594) { + node = modelGetPart(g_Vars.currentplayer->gunctrl.unk1594, partnum); + + if (node) { + union modelnode_data *data = node->data; + u32 *ptr = &hand->handsavedata[data->partid.index]; + *ptr = arg1; + } + } + } else { + node = modelGetPart(arg3, partnum); + + if (node) { + union modelnode_data *data = node->data; + u32 *ptr = &hand->unk0a6c[data->partid.index]; + *ptr = arg1; + } + } +} GLOBAL_ASM( glabel func0f097f28 @@ -567,7 +539,7 @@ glabel func0f097f28 /* f09802c: 27bd0030 */ addiu $sp,$sp,0x30 ); -void func0f098030(struct hand *hand, u32 arg1) +void func0f098030(struct hand *hand, struct modelfiledata *arg1) { struct weapon *weapon = weaponFindById(hand->base.weaponnum); s32 i; diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index d444f8c2b..20f62a220 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -8,9 +8,9 @@ void func0f097ba0(s32 handnum, s32 weaponnum); s32 weaponGetUnequippedReloadIndex(s32 weaponnum); void handsTickUnequippedReload(void); u32 func0f097df0(void); -void func0f097e74(s16 partnum, s32 arg1, struct hand *hand, u32 arg3); -void func0f097f28(struct hand *hand, s32 arg1, struct inventory_typef *arg2); -void func0f098030(struct hand *hand, u32 arg1); +void func0f097e74(s16 partnum, s32 arg1, struct hand *hand, struct modelfiledata *arg3); +void func0f097f28(struct hand *hand, struct modelfiledata *arg1, struct inventory_typef *arg2); +void func0f098030(struct hand *hand, struct modelfiledata *arg1); f32 func0f09815c(struct hand *hand); u32 func0f0981e8(void); bool func0f098884(struct guncmd *cmd, struct shorthand *hand); diff --git a/src/include/types.h b/src/include/types.h index a7846afdf..c0834044f 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2221,70 +2221,8 @@ struct hand { /*0x09b8*/ u32 unk09b8; /*0x09bc*/ struct model unk09bc; /*0x09e0*/ struct anim anim; - /*0x0a6c*/ u32 unk0a6c; - /*0x0a70*/ u32 unk0a70; - /*0x0a74*/ u32 unk0a74; - /*0x0a78*/ u32 unk0a78; - /*0x0a7c*/ u32 unk0a7c; - /*0x0a80*/ u32 unk0a80; - /*0x0a84*/ u32 unk0a84; - /*0x0a88*/ u32 unk0a88; - /*0x0a8c*/ u32 unk0a8c; - /*0x0a90*/ u32 unk0a90; - /*0x0a94*/ u32 unk0a94; - /*0x0a98*/ u32 unk0a98; - /*0x0a9c*/ u32 unk0a9c; - /*0x0aa0*/ u32 unk0aa0; - /*0x0aa4*/ u32 unk0aa4; - /*0x0aa8*/ u32 unk0aa8; - /*0x0aac*/ u32 unk0aac; - /*0x0ab0*/ u32 unk0ab0; - /*0x0ab4*/ u32 unk0ab4; - /*0x0ab8*/ u32 unk0ab8; - /*0x0abc*/ u32 unk0abc; - /*0x0ac0*/ u32 unk0ac0; - /*0x0ac4*/ u32 unk0ac4; - /*0x0ac8*/ u32 unk0ac8; - /*0x0acc*/ u32 unk0acc; - /*0x0ad0*/ u32 unk0ad0; - /*0x0ad4*/ u32 unk0ad4; - /*0x0ad8*/ u32 unk0ad8; - /*0x0adc*/ u32 unk0adc; - /*0x0ae0*/ u32 unk0ae0; - /*0x0ae4*/ u32 unk0ae4; - /*0x0ae8*/ u32 unk0ae8; - /*0x0aec*/ u32 unk0aec; - /*0x0af0*/ u32 unk0af0; - /*0x0af4*/ u32 unk0af4; - /*0x0af8*/ u32 unk0af8; - /*0x0afc*/ u32 unk0afc; - /*0x0b00*/ u32 unk0b00; - /*0x0b04*/ u32 unk0b04; - /*0x0b08*/ u32 unk0b08; - /*0x0b0c*/ u32 unk0b0c; - /*0x0b10*/ u32 unk0b10; - /*0x0b14*/ u32 unk0b14; - /*0x0b18*/ u32 unk0b18; - /*0x0b1c*/ u32 unk0b1c; - /*0x0b20*/ u32 unk0b20; - /*0x0b24*/ u32 unk0b24; - /*0x0b28*/ u32 unk0b28; - /*0x0b2c*/ u32 unk0b2c; - /*0x0b30*/ u32 unk0b30; - /*0x0b34*/ u32 unk0b34; - /*0x0b38*/ u32 unk0b38; - /*0x0b3c*/ u32 unk0b3c; - /*0x0b40*/ u32 unk0b40; - /*0x0b44*/ u32 unk0b44; - /*0x0b48*/ u32 unk0b48; - /*0x0b4c*/ u32 unk0b4c; - /*0x0b50*/ u32 unk0b50; - /*0x0b54*/ u32 unk0b54; - /*0x0b58*/ u32 unk0b58; - /*0x0b5c*/ u32 unk0b5c; - /*0x0b60*/ u32 unk0b60; - /*0x0b64*/ u32 unk0b64; - /*0x0b68*/ u32 unk0b68; + /*0x0a6c*/ u32 unk0a6c[32]; + /*0x0aec*/ u32 handsavedata[32]; /*0x0b6c*/ u32 unk0b6c; /*0x0b70*/ u32 unk0b70; /*0x0b74*/ u32 unk0b74; @@ -2476,7 +2414,7 @@ struct gunctrl { /*0x1588*/ s32 gunmemtype; /*0x158c*/ void *unk158c; /*0x1590*/ u32 unk1590; - /*0x1594*/ s32 unk1594; + /*0x1594*/ struct modelfiledata *unk1594; /*0x1598*/ s32 unk1598; /*0x159c*/ u16 unk159c; /*0x15a0*/ s32 unk15a0;