From fc5a51e55be8f494a223f2eaf010944eda131ee2 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 2 Jan 2020 19:54:40 +1000 Subject: [PATCH] Decompile menuhandlerMpScore --- src/game/game_176d70.c | 76 +++++++++------------------------- src/include/constants.h | 1 + src/include/game/game_176d70.h | 2 +- src/include/types.h | 9 ++++ 4 files changed, 30 insertions(+), 58 deletions(-) diff --git a/src/game/game_176d70.c b/src/game/game_176d70.c index f5cbc1a50..1ce709aab 100644 --- a/src/game/game_176d70.c +++ b/src/game/game_176d70.c @@ -6567,63 +6567,25 @@ glabel menuhandlerMpTime /* f17c260: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel menuhandlerMpScore -/* f17c264: 27bdffe8 */ addiu $sp,$sp,-24 -/* f17c268: 24010006 */ addiu $at,$zero,0x6 -/* f17c26c: afbf0014 */ sw $ra,0x14($sp) -/* f17c270: afa5001c */ sw $a1,0x1c($sp) -/* f17c274: 1081000c */ beq $a0,$at,.L0f17c2a8 -/* f17c278: 00c03825 */ or $a3,$a2,$zero -/* f17c27c: 24010009 */ addiu $at,$zero,0x9 -/* f17c280: 10810006 */ beq $a0,$at,.L0f17c29c -/* f17c284: 3c0e800b */ lui $t6,0x800b -/* f17c288: 2401000a */ addiu $at,$zero,0xa -/* f17c28c: 5081000b */ beql $a0,$at,.L0f17c2bc -/* f17c290: 8cf80000 */ lw $t8,0x0($a3) -/* f17c294: 1000001f */ beqz $zero,.L0f17c314 -/* f17c298: 8fbf0014 */ lw $ra,0x14($sp) -.L0f17c29c: -/* f17c29c: 91cecb9b */ lbu $t6,-0x3465($t6) -/* f17c2a0: 1000001b */ beqz $zero,.L0f17c310 -/* f17c2a4: acee0000 */ sw $t6,0x0($a3) -.L0f17c2a8: -/* f17c2a8: 8cef0000 */ lw $t7,0x0($a3) -/* f17c2ac: 3c01800b */ lui $at,0x800b -/* f17c2b0: 10000017 */ beqz $zero,.L0f17c310 -/* f17c2b4: a02fcb9b */ sb $t7,-0x3465($at) -/* f17c2b8: 8cf80000 */ lw $t8,0x0($a3) -.L0f17c2bc: -/* f17c2bc: 24010064 */ addiu $at,$zero,0x64 -/* f17c2c0: 24045071 */ addiu $a0,$zero,0x5071 -/* f17c2c4: 1701000a */ bne $t8,$at,.L0f17c2f0 -/* f17c2c8: 00000000 */ sll $zero,$zero,0x0 -/* f17c2cc: 24045070 */ addiu $a0,$zero,0x5070 -/* f17c2d0: 0fc5b9f1 */ jal textGet -/* f17c2d4: afa70020 */ sw $a3,0x20($sp) -/* f17c2d8: 8fa70020 */ lw $a3,0x20($sp) -/* f17c2dc: 00402825 */ or $a1,$v0,$zero -/* f17c2e0: 0c004dad */ jal sprintf -/* f17c2e4: 8ce40004 */ lw $a0,0x4($a3) -/* f17c2e8: 1000000a */ beqz $zero,.L0f17c314 -/* f17c2ec: 8fbf0014 */ lw $ra,0x14($sp) -.L0f17c2f0: -/* f17c2f0: 0fc5b9f1 */ jal textGet -/* f17c2f4: afa70020 */ sw $a3,0x20($sp) -/* f17c2f8: 8fa70020 */ lw $a3,0x20($sp) -/* f17c2fc: 00402825 */ or $a1,$v0,$zero -/* f17c300: 8ce60000 */ lw $a2,0x0($a3) -/* f17c304: 8ce40004 */ lw $a0,0x4($a3) -/* f17c308: 0c004dad */ jal sprintf -/* f17c30c: 24c60001 */ addiu $a2,$a2,0x1 -.L0f17c310: -/* f17c310: 8fbf0014 */ lw $ra,0x14($sp) -.L0f17c314: -/* f17c314: 27bd0018 */ addiu $sp,$sp,0x18 -/* f17c318: 00001025 */ or $v0,$zero,$zero -/* f17c31c: 03e00008 */ jr $ra -/* f17c320: 00000000 */ sll $zero,$zero,0x0 -); +s32 menuhandlerMpScore(u32 operation, struct menu_item *item, struct numandtext *value) +{ + switch (operation) { + case MENUOP_GETSLIDER: + value->num = g_MpSetup.scorelimit; + break; + case MENUOP_SET: + g_MpSetup.scorelimit = value->num; + break; + case MENUOP_GETSLIDERLABEL: + if (value->num == 100) { + sprintf(value->text, textGet(0x5070)); // "No Limit" + } else { + sprintf(value->text, textGet(0x5071), value->num + 1); // "%d" + } + } + + return 0; +} GLOBAL_ASM( glabel menuhandlerMpTeamScore diff --git a/src/include/constants.h b/src/include/constants.h index 72095a3e2..81be9217a 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -466,6 +466,7 @@ #define MENUOP_GETOPTIONVALUE 7 #define MENUOP_GET 8 #define MENUOP_GETSLIDER 9 +#define MENUOP_GETSLIDERLABEL 10 #define MENUOP_CHECKDISABLED 12 #define MENUOP_CHECKPREFOCUSED 15 #define MENUOP_CHECKHIDDEN 24 diff --git a/src/include/game/game_176d70.h b/src/include/game/game_176d70.h index d5f7fd0b8..abac67564 100644 --- a/src/include/game/game_176d70.h +++ b/src/include/game/game_176d70.h @@ -246,7 +246,7 @@ s32 menuhandlerMpQuickteamOption(u32 operation, struct menu_item *item, s32 *val s32 menuhandlerMpRestoreHandicapDefaults(u32, u32, u32 *); s32 menuhandlerMpRestoreScoreDefaults(u32 operation, struct menu_item *item, s32 *value); s32 menuhandlerMpSaveSettings(u32 operation, struct menu_item *item, s32 *value); -s32 menuhandlerMpScore(u32, u32, u32 *); +s32 menuhandlerMpScore(u32 operation, struct menu_item *item, struct numandtext *value); s32 menuhandlerMpSimulantBody(u32, u32, u32 *); s32 menuhandlerMpSimulantDifficulty(u32, u32, u32 *); s32 menuhandlerMpSimulantHead(u32, u32, u32 *); diff --git a/src/include/types.h b/src/include/types.h index d00e39956..7cfd2b62f 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4006,6 +4006,9 @@ struct mpsetup { /*0x8009cb90*/ u32 unk08; /*0x8009cb94*/ u32 options; /*0x8009cb98*/ u8 scenario; + /*0x8009cb98*/ u8 unk11; + /*0x8009cb98*/ u8 unk12; + /*0x8009cb98*/ u8 scorelimit; /*0x8009cb9c*/ u32 unk14; /*0x8009cba0*/ u32 unk18; /*0x8009cba4*/ u32 unk1c; @@ -4034,4 +4037,10 @@ struct mpscenario { void *unk44; }; +// Throwaway struct for passing two values to menu handlers +struct numandtext { + s32 num; + char *text; +}; + #endif