From 3f9b89aee29df8baf802785b95808a4143aee45f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 2 Jan 2020 17:19:38 +1000 Subject: [PATCH] Decompile menuhandlerMpSaveSettings --- src/game/game_176d70.c | 62 ++++++++++++-------------------- src/globals.c | 0 src/gvars/gvars.c | 6 ---- src/include/constants.h | 7 ++++ src/include/game/game_107fb0.h | 2 +- src/include/game/game_176d70.h | 2 +- src/include/gvars/gvars.h | 2 -- src/include/setup/setup_020df0.h | 3 +- src/include/types.h | 18 ++++++---- src/setup/setup_020df0.c | 2 +- 10 files changed, 46 insertions(+), 58 deletions(-) delete mode 100644 src/globals.c diff --git a/src/game/game_176d70.c b/src/game/game_176d70.c index cccc57412..402568fe1 100644 --- a/src/game/game_176d70.c +++ b/src/game/game_176d70.c @@ -3660,7 +3660,8 @@ s32 menuhandlerMpCheckboxOption(u32 operation, struct menu_item *item, s32 *valu s32 menuhandlerMpTeamsEnabled(u32 operation, struct menu_item *item, s32 *value) { if (operation == MENUOP_CHECKDISABLED) { - if (var800acb98 == 5 || var800acb98 == 4) { + if (g_MpSetup.scenario == MPSCENARIO_CAPTURETHECASE || + g_MpSetup.scenario == MPSCENARIO_KINGOFTHEHILL) { return true; } @@ -3791,8 +3792,8 @@ glabel menuhandler00179ad0 /* f179ae4: afa60020 */ sw $a2,0x20($sp) /* f179ae8: 0fc3cdb7 */ jal menuPopDialog /* f179aec: 00000000 */ sll $zero,$zero,0x0 -/* f179af0: 3c04800b */ lui $a0,%hi(var800acba8) -/* f179af4: 2484cba8 */ addiu $a0,$a0,%lo(var800acba8) +/* f179af0: 3c04800b */ lui $a0,0x800b +/* f179af4: 2484cba8 */ addiu $a0,$a0,-13400 /* f179af8: 24050004 */ addiu $a1,$zero,0x4 /* f179afc: 0fc42539 */ jal func0f1094e4 /* f179b00: 00003025 */ or $a2,$zero,$zero @@ -9855,38 +9856,19 @@ glabel menuhandler0017ef30 /* f17efb8: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel menuhandlerMpSaveSettings -/* f17efbc: 27bdffe8 */ addiu $sp,$sp,-24 -/* f17efc0: 24010006 */ addiu $at,$zero,0x6 -/* f17efc4: afbf0014 */ sw $ra,0x14($sp) -/* f17efc8: afa5001c */ sw $a1,0x1c($sp) -/* f17efcc: 14810010 */ bne $a0,$at,.L0f17f010 -/* f17efd0: afa60020 */ sw $a2,0x20($sp) -/* f17efd4: 3c02800b */ lui $v0,%hi(g_MpSetup) -/* f17efd8: 2442cb88 */ addiu $v0,$v0,%lo(g_MpSetup) -/* f17efdc: 8c4e0020 */ lw $t6,0x20($v0) -/* f17efe0: 3c048008 */ lui $a0,%hi(menudialog_mpsavesetupname) -/* f17efe4: 15c00005 */ bnez $t6,.L0f17effc -/* f17efe8: 00000000 */ sll $zero,$zero,0x0 -/* f17efec: 0fc3cbd3 */ jal menuPushDialog -/* f17eff0: 24844cdc */ addiu $a0,$a0,%lo(menudialog_mpsavesetupname) -/* f17eff4: 10000007 */ beqz $zero,.L0f17f014 -/* f17eff8: 8fbf0014 */ lw $ra,0x14($sp) -.L0f17effc: -/* f17effc: 0fc420c9 */ jal func0f108324 -/* f17f000: 94440024 */ lhu $a0,0x24($v0) -/* f17f004: 3c048008 */ lui $a0,%hi(menudialog_mpsavesetup) -/* f17f008: 0fc3cbd3 */ jal menuPushDialog -/* f17f00c: 24844d80 */ addiu $a0,$a0,%lo(menudialog_mpsavesetup) -.L0f17f010: -/* f17f010: 8fbf0014 */ lw $ra,0x14($sp) -.L0f17f014: -/* f17f014: 27bd0018 */ addiu $sp,$sp,0x18 -/* f17f018: 00001025 */ or $v0,$zero,$zero -/* f17f01c: 03e00008 */ jr $ra -/* f17f020: 00000000 */ sll $zero,$zero,0x0 -); +s32 menuhandlerMpSaveSettings(u32 operation, struct menu_item *item, s32 *value) +{ + if (operation == MENUOP_SET) { + if (g_MpSetup.saved == false) { + menuPushDialog(&menudialog_mpsavesetupname); + } else { + func0f108324(g_MpSetup.unk24); + menuPushDialog(&menudialog_mpsavesetup); + } + } + + return 0; +} GLOBAL_ASM( glabel func0f17f024 @@ -16757,10 +16739,10 @@ glabel menudialog00184ec0 /* f184f08: 030fc021 */ addu $t8,$t8,$t7 /* f184f0c: 001940c0 */ sll $t0,$t9,0x3 /* f184f10: 8f18e4f8 */ lw $t8,-0x1b08($t8) -/* f184f14: 3c098008 */ lui $t1,%hi(g_MpOptionsDialogs) +/* f184f14: 3c098008 */ lui $t1,%hi(g_MpScenarios) /* f184f18: 01194021 */ addu $t0,$t0,$t9 /* f184f1c: 000840c0 */ sll $t0,$t0,0x3 -/* f184f20: 25296f98 */ addiu $t1,$t1,%lo(g_MpOptionsDialogs) +/* f184f20: 25296f98 */ addiu $t1,$t1,%lo(g_MpScenarios) /* f184f24: 01095021 */ addu $t2,$t0,$t1 /* f184f28: 8d4b0000 */ lw $t3,0x0($t2) /* f184f2c: 8f040000 */ lw $a0,0x0($t8) @@ -17086,7 +17068,7 @@ glabel menuhandler00185068 s32 menuhandlerMpOpenOptions(u32 operation, struct menu_item *item, s32 *value) { if (operation == MENUOP_SET) { - menuPushDialog(g_MpOptionsDialogs[var800acb98].dialog); + menuPushDialog(g_MpScenarios[g_MpSetup.scenario].optionsdialog); } return 0; @@ -17386,9 +17368,9 @@ glabel func0f185774 /* f185794: 254acb88 */ addiu $t2,$t2,%lo(g_MpSetup) /* f185798: 914f0010 */ lbu $t7,0x10($t2) /* f18579c: 240b0048 */ addiu $t3,$zero,0x48 -/* f1857a0: 3c088008 */ lui $t0,%hi(g_MpOptionsDialogs) +/* f1857a0: 3c088008 */ lui $t0,%hi(g_MpScenarios) /* f1857a4: 01eb0019 */ multu $t7,$t3 -/* f1857a8: 25086f98 */ addiu $t0,$t0,%lo(g_MpOptionsDialogs) +/* f1857a8: 25086f98 */ addiu $t0,$t0,%lo(g_MpScenarios) /* f1857ac: 0000c012 */ mflo $t8 /* f1857b0: 0118c821 */ addu $t9,$t0,$t8 /* f1857b4: 8f2c0018 */ lw $t4,0x18($t9) diff --git a/src/globals.c b/src/globals.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index ccdaca030..4729df840 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -31002,12 +31002,6 @@ u32 var800acb7c = 0; u32 var800acb80 = 0; u32 var800acb84 = 0; struct mpsetup g_MpSetup = {0}; -u8 var800acb98 = 0; -u32 var800acb9c = 0; -u32 var800acba0 = 0; -u32 var800acba4 = 0; -u32 var800acba8 = 0; -u32 var800acbac = 0; u32 var800acbb0 = 0; u32 var800acbb4 = 0; u32 var800acbb8 = 0; diff --git a/src/include/constants.h b/src/include/constants.h index 7fd20d39a..7a88faac7 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -469,6 +469,13 @@ #define MENUOP_CHECKPREFOCUSED 15 #define MENUOP_CHECKHIDDEN 24 +#define MPSCENARIO_COMBAT 0 +#define MPSCENARIO_HOLDTHEBRIEFCASE 1 +#define MPSCENARIO_HACKERCENTRAL 2 +#define MPSCENARIO_POPACAP 3 +#define MPSCENARIO_KINGOFTHEHILL 4 +#define MPSCENARIO_CAPTURETHECASE 5 + // Object flags - bank 0 (object struct offset 0x08) #define OBJECTFLAG0_00000001 0x00000001 // Not used in scripts #define OBJECTFLAG0_00000002 0x00000002 // Not used in scripts diff --git a/src/include/game/game_107fb0.h b/src/include/game/game_107fb0.h index 28139518d..b2b519376 100644 --- a/src/include/game/game_107fb0.h +++ b/src/include/game/game_107fb0.h @@ -7,7 +7,7 @@ u32 func0f107fb0(void); u32 func0f108078(void); u32 func0f1080d0(void); u32 func0f1082b0(void); -u32 func0f108324(void); +void func0f108324(s32 arg0); u32 func0f1083b0(void); u32 func0f1083d0(void); u32 func0f108424(void); diff --git a/src/include/game/game_176d70.h b/src/include/game/game_176d70.h index ced8029ea..a0a075ee0 100644 --- a/src/include/game/game_176d70.h +++ b/src/include/game/game_176d70.h @@ -245,7 +245,7 @@ s32 menuhandlerMpOpenOptions(u32 operation, struct menu_item *item, s32 *value); s32 menuhandlerMpQuickteamOption(u32, u32, u32 *); s32 menuhandlerMpRestoreHandicapDefaults(u32, u32, u32 *); s32 menuhandlerMpRestoreScoreDefaults(u32 operation, struct menu_item *item, s32 *value); -s32 menuhandlerMpSaveSettings(u32, u32, u32 *); +s32 menuhandlerMpSaveSettings(u32 operation, struct menu_item *item, s32 *value); s32 menuhandlerMpScore(u32, u32, u32 *); s32 menuhandlerMpSimulantBody(u32, u32, u32 *); s32 menuhandlerMpSimulantDifficulty(u32, u32, u32 *); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 2a22beb3a..1ccd17d9e 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -851,8 +851,6 @@ extern u32 var800aca38; extern u32 var800acad8; extern u32 var800acb78; extern struct mpsetup g_MpSetup; -extern u8 var800acb98; -extern u32 var800acba8; extern u32 var800acbb0; extern u8 var800acc10; extern u32 var800acc20; diff --git a/src/include/setup/setup_020df0.h b/src/include/setup/setup_020df0.h index 141870dcb..02d123f89 100644 --- a/src/include/setup/setup_020df0.h +++ b/src/include/setup/setup_020df0.h @@ -256,6 +256,7 @@ extern u16 mpcontrolstyles[]; extern u16 mpaimmodes[]; extern struct menu_dialog menudialog_mpsavechr; extern struct menu_dialog menudialog_mpsavesetupname; +extern struct menu_dialog menudialog_mpsavesetup; extern u32 var800851bc; extern u32 var800851cc; extern u32 var80085448; @@ -286,7 +287,7 @@ extern struct menu_dialog menudialog_mphilloptions; extern struct menu_dialog menudialog_mphackeroptions; extern u32 var80086e14; extern struct menu_dialog menudialog_mppopacapoptions; -extern struct mpoptionsdialoginfo g_MpOptionsDialogs[]; +extern struct mpscenario g_MpScenarios[]; extern u16 mpscenarios[]; extern u32 var8008716c; extern u32 var800871fc; diff --git a/src/include/types.h b/src/include/types.h index acf118bd1..f07c5f22f 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4001,14 +4001,20 @@ struct missionconfig { }; struct mpsetup { - u32 unk00; - u32 unk04; - u32 unk08; - u32 options; + /*0x8009cb88*/ u32 unk00; + /*0x8009cb8c*/ u32 unk04; + /*0x8009cb90*/ u32 unk08; + /*0x8009cb94*/ u32 options; + /*0x8009cb98*/ u8 scenario; + /*0x8009cb9c*/ u32 unk14; + /*0x8009cba0*/ u32 unk18; + /*0x8009cba4*/ u32 unk1c; + /*0x8009cba8*/ bool saved; + /*0x8009cbac*/ u16 unk24; }; -struct mpoptionsdialoginfo { - struct menu_dialog *dialog; +struct mpscenario { + struct menu_dialog *optionsdialog; void *unk04; void *unk08; void *unk0c; diff --git a/src/setup/setup_020df0.c b/src/setup/setup_020df0.c index 6ccf73df2..7518bacaf 100644 --- a/src/setup/setup_020df0.c +++ b/src/setup/setup_020df0.c @@ -11546,7 +11546,7 @@ struct menu_dialog menudialog_mppopacapoptions = { }; // 2cfb8 -struct mpoptionsdialoginfo g_MpOptionsDialogs[] = { +struct mpscenario g_MpScenarios[] = { { &menudialog_mpcombatoptions, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, { &menudialog_mpbriefcaseoptions, func0f17ff80, func0f17ffdc, func0f1802bc, func0f1802e0, func0f180600, func0f18079c, func0f180960, func0f180a68, func0f180b1c, func0f180c48, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, { &menudialog_mphackeroptions, func0f182b90, func0f182b9c, func0f182e98, func0f1830a4, func0f183380, func0f1839a8, func0f183bb4, func0f183d10, func0f184218, func0f184344, NULL, NULL, NULL, NULL, NULL, NULL, NULL },