From eea924d78e3fe5284b824fdc4c4a9a53c79dcb1c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 4 Jan 2020 20:22:38 +1000 Subject: [PATCH] Decompile menuhandlerFrFailedContinue --- src/game/game_066310.c | 4 +-- src/game/game_102240.c | 4 +-- src/game/game_1a3340.c | 47 ++++++++++---------------------- src/include/game/game_1a3340.h | 2 +- src/include/setup/setup_020df0.h | 2 +- src/include/types.h | 7 ++++- src/setup/setup_020df0.c | 6 ++-- 7 files changed, 29 insertions(+), 43 deletions(-) diff --git a/src/game/game_066310.c b/src/game/game_066310.c index 083533a60..5a4614f42 100644 --- a/src/game/game_066310.c +++ b/src/game/game_066310.c @@ -38161,7 +38161,7 @@ glabel func0f086f40 /* f087034: 0fc6830c */ jal func0f1a0c30 /* f087038: a3ab002b */ sb $t3,0x2b($sp) /* f08703c: 10400007 */ beqz $v0,.L0f08705c -/* f087040: 3c048009 */ lui $a0,%hi(menudialog_frweapon) +/* f087040: 3c048009 */ lui $a0,%hi(g_frWeaponMenuDialog) /* f087044: 3c048009 */ lui $a0,%hi(menudialog_frtraininginfo) /* f087048: 24848e6c */ addiu $a0,$a0,%lo(menudialog_frtraininginfo) /* f08704c: 0fc3e178 */ jal func0f0f85e0 @@ -38169,7 +38169,7 @@ glabel func0f086f40 /* f087054: 10000005 */ beqz $zero,.L0f08706c /* f087058: 93ac002b */ lbu $t4,0x2b($sp) .L0f08705c: -/* f08705c: 24848d78 */ addiu $a0,$a0,%lo(menudialog_frweapon) +/* f08705c: 24848d78 */ addiu $a0,$a0,%lo(g_frWeaponMenuDialog) /* f087060: 0fc3e178 */ jal func0f0f85e0 /* f087064: 2405000d */ addiu $a1,$zero,0xd .L0f087068: diff --git a/src/game/game_102240.c b/src/game/game_102240.c index 37f0ba09e..8b3ea28d8 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -4769,7 +4769,7 @@ glabel func0f106b20 /* f106cc0: 0fc6830c */ jal func0f1a0c30 /* f106cc4: 00000000 */ sll $zero,$zero,0x0 /* f106cc8: 10400007 */ beqz $v0,.L0f106ce8 -/* f106ccc: 3c048009 */ lui $a0,%hi(menudialog_frweapon) +/* f106ccc: 3c048009 */ lui $a0,%hi(g_frWeaponMenuDialog) /* f106cd0: 3c048009 */ lui $a0,%hi(menudialog_frtraininginfo) /* f106cd4: 24848e6c */ addiu $a0,$a0,%lo(menudialog_frtraininginfo) /* f106cd8: 0fc3e0cc */ jal func0f0f8330 @@ -4777,7 +4777,7 @@ glabel func0f106b20 /* f106ce0: 10000005 */ beqz $zero,.L0f106cf8 /* f106ce4: 24050001 */ addiu $a1,$zero,0x1 .L0f106ce8: -/* f106ce8: 24848d78 */ addiu $a0,$a0,%lo(menudialog_frweapon) +/* f106ce8: 24848d78 */ addiu $a0,$a0,%lo(g_frWeaponMenuDialog) /* f106cec: 0fc3e0cc */ jal func0f0f8330 /* f106cf0: 2405000d */ addiu $a1,$zero,0xd /* f106cf4: 24050001 */ addiu $a1,$zero,0x1 diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index b939b4dfe..dfbd90a39 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3015,37 +3015,18 @@ glabel menuhandler001a44c0 /* f1a5d58: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel menuhandler001a5d5c -/* f1a5d5c: 27bdffe8 */ addiu $sp,$sp,-24 -/* f1a5d60: 24010006 */ addiu $at,$zero,0x6 -/* f1a5d64: afbf0014 */ sw $ra,0x14($sp) -/* f1a5d68: afa5001c */ sw $a1,0x1c($sp) -/* f1a5d6c: 1481000f */ bne $a0,$at,.L0f1a5dac -/* f1a5d70: afa60020 */ sw $a2,0x20($sp) -/* f1a5d74: 3c0e800a */ lui $t6,0x800a -/* f1a5d78: 8dcea244 */ lw $t6,-0x5dbc($t6) -/* f1a5d7c: 2401000a */ addiu $at,$zero,0xa -/* f1a5d80: 3c048009 */ lui $a0,%hi(menudialog_frweapon) -/* f1a5d84: 8dcf00bc */ lw $t7,0xbc($t6) -/* f1a5d88: 85f80028 */ lh $t8,0x28($t7) -/* f1a5d8c: 17010005 */ bne $t8,$at,.L0f1a5da4 -/* f1a5d90: 00000000 */ sll $zero,$zero,0x0 -/* f1a5d94: 0fc3cdc1 */ jal func0f0f3704 -/* f1a5d98: 24848d78 */ addiu $a0,$a0,%lo(menudialog_frweapon) -/* f1a5d9c: 10000004 */ beqz $zero,.L0f1a5db0 -/* f1a5da0: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a5da4: -/* f1a5da4: 0fc3cdb7 */ jal menuPopDialog -/* f1a5da8: 00000000 */ sll $zero,$zero,0x0 -.L0f1a5dac: -/* f1a5dac: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a5db0: -/* f1a5db0: 27bd0018 */ addiu $sp,$sp,0x18 -/* f1a5db4: 00001025 */ or $v0,$zero,$zero -/* f1a5db8: 03e00008 */ jr $ra -/* f1a5dbc: 00000000 */ sll $zero,$zero,0x0 -); +s32 menuhandlerFrFailedContinue(u32 operation, struct menu_item *item, s32 *value) +{ + if (operation == MENUOP_SET) { + if (g_Vars.currentplayer->prop->rooms[0] == 0xa) { + func0f0f3704(&g_frWeaponMenuDialog); + } else { + menuPopDialog(); + } + } + + return 0; +} GLOBAL_ASM( glabel menuhandler001a5dc0 @@ -4714,9 +4695,9 @@ glabel menudialog001a737c GLOBAL_ASM( glabel func0f1a7554 -/* f1a7554: 3c028009 */ lui $v0,%hi(menudialog_frweapon) +/* f1a7554: 3c028009 */ lui $v0,%hi(g_frWeaponMenuDialog) /* f1a7558: 03e00008 */ jr $ra -/* f1a755c: 24428d78 */ addiu $v0,$v0,%lo(menudialog_frweapon) +/* f1a755c: 24428d78 */ addiu $v0,$v0,%lo(g_frWeaponMenuDialog) ); GLOBAL_ASM( diff --git a/src/include/game/game_1a3340.h b/src/include/game/game_1a3340.h index 9e0dbc40b..b2f027a0d 100644 --- a/src/include/game/game_1a3340.h +++ b/src/include/game/game_1a3340.h @@ -49,7 +49,7 @@ s32 menuhandler001a3340(u32, u32, u32 *); s32 menuhandler001a3448(u32 operation, struct menu_item *item, s32 *value); s32 menuhandler001a348c(u32, u32, u32 *); s32 menuhandler001a44c0(u32, u32, u32 *); -s32 menuhandler001a5d5c(u32, u32, u32 *); +s32 menuhandlerFrFailedContinue(u32 operation, struct menu_item *item, s32 *value); s32 menuhandler001a5dc0(u32, u32, u32 *); s32 menuhandler001a63e4(u32, u32, u32 *); s32 menuhandler001a64d8(u32 operation, struct menu_item *item, s32 *value); diff --git a/src/include/setup/setup_020df0.h b/src/include/setup/setup_020df0.h index 0b3921d10..45d67100f 100644 --- a/src/include/setup/setup_020df0.h +++ b/src/include/setup/setup_020df0.h @@ -352,7 +352,7 @@ extern u32 var80088ca0; extern u32 var80088ca4; extern u32 var80088ca8; extern struct menu_dialog menudialog_frdifficulty; -extern struct menu_dialog menudialog_frweapon; +extern struct menu_dialog g_frWeaponMenuDialog; extern struct menu_dialog menudialog_frtraininginfo; extern struct menu_dialog menudialog_frtraininginfo2; extern struct menu_dialog menudialog_frtrainingstats; diff --git a/src/include/types.h b/src/include/types.h index 2cb1f518f..d921314a8 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -3921,7 +3921,12 @@ struct menustackitem { }; struct savefile_solo { - /*0x00*/ char name[12]; + /** + * This is a little weird. The name entry is clearly 10 characters plus a + * null byte, but there is other code that uses unk08 for other purposes. + */ + /*0x00*/ char name[8]; + /*0x08*/ u32 unk08; /*0x0c*/ u32 unk0c; /*0x10*/ u32 unk10; /*0x14*/ u32 flags; diff --git a/src/setup/setup_020df0.c b/src/setup/setup_020df0.c index bc1905ca5..3ef0c4b15 100644 --- a/src/setup/setup_020df0.c +++ b/src/setup/setup_020df0.c @@ -13021,7 +13021,7 @@ struct menu_item menuitems_frweapon[] = { }; // 2ed98 -struct menu_dialog menudialog_frweapon = { +struct menu_dialog g_frWeaponMenuDialog = { MENUDIALOGTYPE_DEFAULT, 0x51be, // "Weapon" menuitems_frweapon, @@ -13093,7 +13093,7 @@ struct menu_item menuitems_frtrainingstats[] = { { MENUITEMTYPE_LABEL, 0, 0x00000002, 0x000051c7, (u32)&func0f1a402c, NULL }, // "Accuracy:" { MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL }, { MENUITEMTYPE_MODEL, 0, 0x00200002, 0x000000d2, 0x00000050, menuhandler001a44c0 }, - { MENUITEMTYPE_SELECTABLE, 0, 0x00000020, 0x000054fc, 0x00000000, menuhandler001a5d5c }, // "Continue" + { MENUITEMTYPE_SELECTABLE, 0, 0x00000020, 0x000054fc, 0x00000000, menuhandlerFrFailedContinue }, // "Continue" { MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL }, }; @@ -13120,7 +13120,7 @@ struct menu_item menuitems_frtrainingstats2[] = { { MENUITEMTYPE_LABEL, 0, 0x00000002, 0x000051c7, (u32)&func0f1a402c, NULL }, // "Accuracy:" { MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL }, { MENUITEMTYPE_MODEL, 0, 0x00200002, 0x000000d2, 0x00000050, menuhandler001a44c0 }, - { MENUITEMTYPE_SELECTABLE, 0, 0x00000020, 0x000054fc, 0x00000000, menuhandler001a5d5c }, // "Continue" + { MENUITEMTYPE_SELECTABLE, 0, 0x00000020, 0x000054fc, 0x00000000, menuhandlerFrFailedContinue }, // "Continue" { MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL }, };