From b8aa5043fe2802fd6de63f08eb52dd88ebfe229f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 12 Sep 2020 21:54:58 +1000 Subject: [PATCH] Decompile frTrainingInfoMenuDialog --- src/game/game_1a3340.c | 132 +++++++++------------------------ src/include/game/game_1a3340.h | 2 +- src/include/types.h | 2 + 3 files changed, 38 insertions(+), 98 deletions(-) diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index 4429a10eb..1221d9851 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -471,101 +471,39 @@ glabel var7f1b9940 /* f1a39a4: 00000000 */ nop ); -GLOBAL_ASM( -glabel menudialog001a39a8 -.late_rodata -glabel var7f1b9944 -.word 0x4196cbe4 -.text -/* f1a39a8: 27bdffe0 */ addiu $sp,$sp,-32 -/* f1a39ac: 24010064 */ addiu $at,$zero,0x64 -/* f1a39b0: afbf0014 */ sw $ra,0x14($sp) -/* f1a39b4: 10810008 */ beq $a0,$at,.L0f1a39d8 -/* f1a39b8: afa60028 */ sw $a2,0x28($sp) -/* f1a39bc: 24010065 */ addiu $at,$zero,0x65 -/* f1a39c0: 10810041 */ beq $a0,$at,.L0f1a3ac8 -/* f1a39c4: 24010066 */ addiu $at,$zero,0x66 -/* f1a39c8: 1081001e */ beq $a0,$at,.L0f1a3a44 -/* f1a39cc: 3c188007 */ lui $t8,%hi(g_MpPlayerNum) -/* f1a39d0: 10000044 */ b .L0f1a3ae4 -/* f1a39d4: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a39d8: -/* f1a39d8: 0fc67494 */ jal frGetSlot -/* f1a39dc: 00000000 */ nop -/* f1a39e0: 0fc6749a */ jal frGetWeaponBySlot -/* f1a39e4: 00402025 */ or $a0,$v0,$zero -/* f1a39e8: 3c0e8007 */ lui $t6,%hi(g_MpPlayerNum) -/* f1a39ec: 8dce1448 */ lw $t6,%lo(g_MpPlayerNum)($t6) -/* f1a39f0: 3c01800a */ lui $at,%hi(g_Menus+0xe28) -/* f1a39f4: afa20018 */ sw $v0,0x18($sp) -/* f1a39f8: 000e78c0 */ sll $t7,$t6,0x3 -/* f1a39fc: 01ee7823 */ subu $t7,$t7,$t6 -/* f1a3a00: 000f7880 */ sll $t7,$t7,0x2 -/* f1a3a04: 01ee7821 */ addu $t7,$t7,$t6 -/* f1a3a08: 000f78c0 */ sll $t7,$t7,0x3 -/* f1a3a0c: 01ee7823 */ subu $t7,$t7,$t6 -/* f1a3a10: 000f7900 */ sll $t7,$t7,0x4 -/* f1a3a14: 002f0821 */ addu $at,$at,$t7 -/* f1a3a18: ac22ee28 */ sw $v0,%lo(g_Menus+0xe28)($at) -/* f1a3a1c: 0fc41652 */ jal func0f105948 -/* f1a3a20: 00402025 */ or $a0,$v0,$zero -/* f1a3a24: 0fc6830c */ jal frIsInTraining -/* f1a3a28: 00000000 */ nop -/* f1a3a2c: 5440002d */ bnezl $v0,.L0f1a3ae4 -/* f1a3a30: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a3a34: 0fc67a40 */ jal frInitAmmo -/* f1a3a38: 8fa40018 */ lw $a0,0x18($sp) -/* f1a3a3c: 10000029 */ b .L0f1a3ae4 -/* f1a3a40: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a3a44: -/* f1a3a44: 8f181448 */ lw $t8,%lo(g_MpPlayerNum)($t8) -/* f1a3a48: 3c08800a */ lui $t0,%hi(g_Menus) -/* f1a3a4c: 2508e000 */ addiu $t0,$t0,%lo(g_Menus) -/* f1a3a50: 0018c8c0 */ sll $t9,$t8,0x3 -/* f1a3a54: 0338c823 */ subu $t9,$t9,$t8 -/* f1a3a58: 0019c880 */ sll $t9,$t9,0x2 -/* f1a3a5c: 0338c821 */ addu $t9,$t9,$t8 -/* f1a3a60: 0019c8c0 */ sll $t9,$t9,0x3 -/* f1a3a64: 0338c823 */ subu $t9,$t9,$t8 -/* f1a3a68: 0019c900 */ sll $t9,$t9,0x4 -/* f1a3a6c: 03281021 */ addu $v0,$t9,$t0 -/* f1a3a70: 8c4304f8 */ lw $v1,0x4f8($v0) -/* f1a3a74: 5060001b */ beqzl $v1,.L0f1a3ae4 -/* f1a3a78: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a3a7c: 8c690000 */ lw $t1,0x0($v1) -/* f1a3a80: 3c0b800a */ lui $t3,%hi(g_Vars) -/* f1a3a84: 54a90017 */ bnel $a1,$t1,.L0f1a3ae4 -/* f1a3a88: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a3a8c: 8c4a0db4 */ lw $t2,0xdb4($v0) -/* f1a3a90: 8d6b9fc0 */ lw $t3,%lo(g_Vars)($t3) -/* f1a3a94: 3c017f1c */ lui $at,%hi(var7f1b9944) -/* f1a3a98: 44801000 */ mtc1 $zero,$f2 -/* f1a3a9c: 014b6023 */ subu $t4,$t2,$t3 -/* f1a3aa0: ac4c0db4 */ sw $t4,0xdb4($v0) -/* f1a3aa4: c4249944 */ lwc1 $f4,%lo(var7f1b9944)($at) -/* f1a3aa8: 3c018006 */ lui $at,%hi(var80061630) -/* f1a3aac: c4261630 */ lwc1 $f6,%lo(var80061630)($at) -/* f1a3ab0: e4420d68 */ swc1 $f2,0xd68($v0) -/* f1a3ab4: e4420d90 */ swc1 $f2,0xd90($v0) -/* f1a3ab8: 46062002 */ mul.s $f0,$f4,$f6 -/* f1a3abc: e4400d8c */ swc1 $f0,0xd8c($v0) -/* f1a3ac0: 10000007 */ b .L0f1a3ae0 -/* f1a3ac4: e4400d64 */ swc1 $f0,0xd64($v0) -.L0f1a3ac8: -/* f1a3ac8: 0fc6830c */ jal frIsInTraining -/* f1a3acc: 00000000 */ nop -/* f1a3ad0: 54400004 */ bnezl $v0,.L0f1a3ae4 -/* f1a3ad4: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a3ad8: 0fc67b37 */ jal frEndSession -/* f1a3adc: 24040001 */ addiu $a0,$zero,0x1 -.L0f1a3ae0: -/* f1a3ae0: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a3ae4: -/* f1a3ae4: 27bd0020 */ addiu $sp,$sp,0x20 -/* f1a3ae8: 00001025 */ or $v0,$zero,$zero -/* f1a3aec: 03e00008 */ jr $ra -/* f1a3af0: 00000000 */ nop -); +s32 frTrainingInfoMenuDialog(u32 operation, struct menudialog *dialog, union handlerdata *data) +{ + u32 stack; + s32 weaponnum; + + switch (operation) { + case MENUOP_OPEN: + weaponnum = frGetWeaponBySlot(frGetSlot()); + g_Menus[g_MpPlayerNum].data.train.unke28 = weaponnum; + func0f105948(weaponnum); + + if (!frIsInTraining()) { + frInitAmmo(weaponnum); + } + break; + case MENUOP_TICK: + if (g_Menus[g_MpPlayerNum].curframe && g_Menus[g_MpPlayerNum].curframe->dialog == dialog) { + g_Menus[g_MpPlayerNum].unkdb4 -= g_Vars.diffframe60; + g_Menus[g_MpPlayerNum].unkd8c = 18.849555969238f * var80061630; + g_Menus[g_MpPlayerNum].unkd64 = 18.849555969238f * var80061630; + g_Menus[g_MpPlayerNum].unkd68 = 0; + g_Menus[g_MpPlayerNum].unkd90 = 0; + } + break; + case MENUOP_CLOSE: + if (!frIsInTraining()) { + frEndSession(true); + } + break; + } + + return 0; +} s32 frTrainingStatsMenuDialog(u32 operation, struct menudialog *dialog, union handlerdata *data) { @@ -2564,7 +2502,7 @@ struct menudialog g_FrTrainingInfoMenuDialog = { MENUDIALOGTYPE_DEFAULT, L_MPMENU(447), // "Training Info" menuitems_frtraininginfo, - menudialog001a39a8, + frTrainingInfoMenuDialog, 0x00000602, NULL, }; @@ -2587,7 +2525,7 @@ struct menudialog menudialog_frtraininginfo2 = { MENUDIALOGTYPE_DEFAULT, L_MPMENU(447), // "Training Info" menuitems_frtraininginfo2, - menudialog001a39a8, + frTrainingInfoMenuDialog, 0x00000602, NULL, }; diff --git a/src/include/game/game_1a3340.h b/src/include/game/game_1a3340.h index 940727584..75ace8edc 100644 --- a/src/include/game/game_1a3340.h +++ b/src/include/game/game_1a3340.h @@ -37,7 +37,7 @@ void func0f1a7560(void *ptr, u16 fileid, u32 arg2, void *arg3, s32 arg4, bool ar void func0f1a7730(void *ptr); void *func0f1a7794(u16 fileid, u8 *arg1, s32 arg2, s32 arg3); void *fileLoad(u16 fileid); -s32 menudialog001a39a8(u32 operation, struct menudialog *dialog, union handlerdata *data); +s32 frTrainingInfoMenuDialog(u32 operation, struct menudialog *dialog, union handlerdata *data); s32 frTrainingStatsMenuDialog(u32 operation, struct menudialog *dialog, union handlerdata *data); s32 menudialog001a5f48(u32 operation, struct menudialog *dialog, union handlerdata *data); s32 menudialog001a6548(u32 operation, struct menudialog *dialog, union handlerdata *data); diff --git a/src/include/types.h b/src/include/types.h index 019a1fbfd..1f19b5f8f 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -3609,6 +3609,8 @@ struct menudata_main4mb { struct menudata_train { u32 unke1c; struct mpconfigfull *mpconfig; + u32 unke24; + u32 unke28; }; struct menu {