Decompile menuOpenDialog and discover data argument for menu handlers

This commit is contained in:
Ryan Dwyer
2020-09-11 19:26:48 +10:00
parent 1b999547d8
commit 365541acfe
12 changed files with 256 additions and 392 deletions
+4 -4
View File
@@ -60,7 +60,7 @@ s32 menudialogRetryMission(u32 operation, struct menudialog *dialog, union handl
if (dialog == g_Menus[g_MpPlayerNum].curframe->dialog
|| (dialog->nextsibling && dialog->nextsibling == g_Menus[g_MpPlayerNum].curframe->dialog)) {
#endif
struct menuthing *thing = data->ptrs[0];
struct menuthing *thing = data->dialog2.ptr;
bool pass = false;
if (thing->unk03) {
@@ -883,14 +883,14 @@ s32 menuhandlerEndscreenCheats(u32 operation, struct menuitem *item, union handl
return 0;
}
data->words[1] = colourBlend(data->words[1], g_CheatColour, weight);
data->label.colour2 = colourBlend(data->label.colour2, g_CheatColour, weight);
if (item->param == 3) { // completion cheat name
data->words[0] = colourBlend(data->words[0], g_CheatColour, weight);
data->label.colour1 = colourBlend(data->label.colour1, g_CheatColour, weight);
}
if (item->param == 5) { // timed cheat name
data->words[0] = colourBlend(data->words[0], g_CheatColour, weight);
data->label.colour1 = colourBlend(data->label.colour1, g_CheatColour, weight);
}
}
+16 -183
View File
@@ -2796,179 +2796,12 @@ glabel func0f0f2c44
/* f0f2cf0: 00000000 */ nop
);
//GLOBAL_ASM(
//glabel func0f0f2cf4
//.late_rodata
//glabel var7f1b2928
//.word 0x40c90fdb
//.text
///* f0f2cf4: 27bdff98 */ addiu $sp,$sp,-104
///* f0f2cf8: afbf0024 */ sw $ra,0x24($sp)
///* f0f2cfc: afb30020 */ sw $s3,0x20($sp)
///* f0f2d00: afb2001c */ sw $s2,0x1c($sp)
///* f0f2d04: afb10018 */ sw $s1,0x18($sp)
///* f0f2d08: afb00014 */ sw $s0,0x14($sp)
///* f0f2d0c: afa60070 */ sw $a2,0x70($sp)
///* f0f2d10: aca40000 */ sw $a0,0x0($a1)
///* f0f2d14: 3c02800a */ lui $v0,%hi(g_MenuData+0x4)
///* f0f2d18: 8c4219c4 */ lw $v0,%lo(g_MenuData+0x4)($v0)
///* f0f2d1c: 00a08825 */ or $s1,$a1,$zero
///* f0f2d20: 24010002 */ addiu $at,$zero,0x2
///* f0f2d24: 1041000d */ beq $v0,$at,.L0f0f2d5c
///* f0f2d28: 02202825 */ or $a1,$s1,$zero
///* f0f2d2c: 24010003 */ addiu $at,$zero,0x3
///* f0f2d30: 10410008 */ beq $v0,$at,.L0f0f2d54
///* f0f2d34: 240e0001 */ addiu $t6,$zero,0x1
///* f0f2d38: 2401000b */ addiu $at,$zero,0xb
///* f0f2d3c: 10410005 */ beq $v0,$at,.L0f0f2d54
///* f0f2d40: 2401000d */ addiu $at,$zero,0xd
///* f0f2d44: 50410006 */ beql $v0,$at,.L0f0f2d60
///* f0f2d48: a220006e */ sb $zero,0x6e($s1)
///* f0f2d4c: 10000004 */ b .L0f0f2d60
///* f0f2d50: a220006e */ sb $zero,0x6e($s1)
//.L0f0f2d54:
///* f0f2d54: 10000002 */ b .L0f0f2d60
///* f0f2d58: a22e006e */ sb $t6,0x6e($s1)
//.L0f0f2d5c:
///* f0f2d5c: a220006e */ sb $zero,0x6e($s1)
//.L0f0f2d60:
///* f0f2d60: 8fa60070 */ lw $a2,0x70($sp)
///* f0f2d64: 0fc3c75b */ jal func0f0f1d6c
///* f0f2d68: afa40068 */ sw $a0,0x68($sp)
///* f0f2d6c: 0fc3e95d */ jal func0f0fa574
///* f0f2d70: 02202025 */ or $a0,$s1,$zero
///* f0f2d74: 8faf0068 */ lw $t7,0x68($sp)
///* f0f2d78: 3c01bf80 */ lui $at,0xbf80
///* f0f2d7c: 44812000 */ mtc1 $at,$f4
///* f0f2d80: 44803000 */ mtc1 $zero,$f6
///* f0f2d84: 91f80000 */ lbu $t8,0x0($t7)
///* f0f2d88: e6240040 */ swc1 $f4,0x40($s1)
///* f0f2d8c: e6260048 */ swc1 $f6,0x48($s1)
///* f0f2d90: 0c004b70 */ jal random
///* f0f2d94: a238003c */ sb $t8,0x3c($s1)
///* f0f2d98: 44824000 */ mtc1 $v0,$f8
///* f0f2d9c: 3c03800a */ lui $v1,%hi(g_Menus)
///* f0f2da0: 3c058007 */ lui $a1,%hi(g_MpPlayerNum)
///* f0f2da4: 24a51448 */ addiu $a1,$a1,%lo(g_MpPlayerNum)
///* f0f2da8: 2463e000 */ addiu $v1,$v1,%lo(g_Menus)
///* f0f2dac: 24060e70 */ addiu $a2,$zero,0xe70
///* f0f2db0: 04410005 */ bgez $v0,.L0f0f2dc8
///* f0f2db4: 468042a0 */ cvt.s.w $f10,$f8
///* f0f2db8: 3c014f80 */ lui $at,0x4f80
///* f0f2dbc: 44818000 */ mtc1 $at,$f16
///* f0f2dc0: 00000000 */ nop
///* f0f2dc4: 46105280 */ add.s $f10,$f10,$f16
//.L0f0f2dc8:
///* f0f2dc8: 3c012f80 */ lui $at,0x2f80
///* f0f2dcc: 44819000 */ mtc1 $at,$f18
///* f0f2dd0: 3c017f1b */ lui $at,%hi(var7f1b2928)
///* f0f2dd4: c4262928 */ lwc1 $f6,%lo(var7f1b2928)($at)
///* f0f2dd8: 46125102 */ mul.s $f4,$f10,$f18
///* f0f2ddc: 44808000 */ mtc1 $zero,$f16
///* f0f2de0: 02202025 */ or $a0,$s1,$zero
///* f0f2de4: 46062202 */ mul.s $f8,$f4,$f6
///* f0f2de8: e628004c */ swc1 $f8,0x4c($s1)
///* f0f2dec: 8cb90000 */ lw $t9,0x0($a1)
///* f0f2df0: 03260019 */ multu $t9,$a2
///* f0f2df4: 00004012 */ mflo $t0
///* f0f2df8: 00684821 */ addu $t1,$v1,$t0
///* f0f2dfc: 8d2a04f8 */ lw $t2,0x4f8($t1)
///* f0f2e00: a1400060 */ sb $zero,0x60($t2)
///* f0f2e04: 8cab0000 */ lw $t3,0x0($a1)
///* f0f2e08: 01660019 */ multu $t3,$a2
///* f0f2e0c: 00006012 */ mflo $t4
///* f0f2e10: 006c6821 */ addu $t5,$v1,$t4
///* f0f2e14: 8dae04f8 */ lw $t6,0x4f8($t5)
///* f0f2e18: e5d00050 */ swc1 $f16,0x50($t6)
///* f0f2e1c: ae200054 */ sw $zero,0x54($s1)
///* f0f2e20: ae200058 */ sw $zero,0x58($s1)
///* f0f2e24: 0fc3ca23 */ jal func0f0f288c
///* f0f2e28: ae20005c */ sw $zero,0x5c($s1)
///* f0f2e2c: 8e2f0000 */ lw $t7,0x0($s1)
///* f0f2e30: ae220008 */ sw $v0,0x8($s1)
///* f0f2e34: 2412001a */ addiu $s2,$zero,0x1a
///* f0f2e38: 8df00008 */ lw $s0,0x8($t7)
///* f0f2e3c: 27b30044 */ addiu $s3,$sp,0x44
///* f0f2e40: 92180000 */ lbu $t8,0x0($s0)
///* f0f2e44: 52580014 */ beql $s2,$t8,.L0f0f2e98
///* f0f2e48: 8e250008 */ lw $a1,0x8($s1)
///* f0f2e4c: 8e020010 */ lw $v0,0x10($s0)
//.L0f0f2e50:
///* f0f2e50: 5040000d */ beqzl $v0,.L0f0f2e88
///* f0f2e54: 92090014 */ lbu $t1,0x14($s0)
///* f0f2e58: 8e190004 */ lw $t9,0x4($s0)
///* f0f2e5c: 2404000f */ addiu $a0,$zero,0xf
///* f0f2e60: 02002825 */ or $a1,$s0,$zero
///* f0f2e64: 33280004 */ andi $t0,$t9,0x4
///* f0f2e68: 55000007 */ bnezl $t0,.L0f0f2e88
///* f0f2e6c: 92090014 */ lbu $t1,0x14($s0)
///* f0f2e70: 0040f809 */ jalr $v0
///* f0f2e74: 02603025 */ or $a2,$s3,$zero
///* f0f2e78: 50400003 */ beqzl $v0,.L0f0f2e88
///* f0f2e7c: 92090014 */ lbu $t1,0x14($s0)
///* f0f2e80: ae300008 */ sw $s0,0x8($s1)
///* f0f2e84: 92090014 */ lbu $t1,0x14($s0)
//.L0f0f2e88:
///* f0f2e88: 26100014 */ addiu $s0,$s0,0x14
///* f0f2e8c: 5649fff0 */ bnel $s2,$t1,.L0f0f2e50
///* f0f2e90: 8e020010 */ lw $v0,0x10($s0)
///* f0f2e94: 8e250008 */ lw $a1,0x8($s1)
//.L0f0f2e98:
///* f0f2e98: 50a0000c */ beqzl $a1,.L0f0f2ecc
///* f0f2e9c: 8fa70068 */ lw $a3,0x68($sp)
///* f0f2ea0: 8ca20010 */ lw $v0,0x10($a1)
///* f0f2ea4: 50400009 */ beqzl $v0,.L0f0f2ecc
///* f0f2ea8: 8fa70068 */ lw $a3,0x68($sp)
///* f0f2eac: 8caa0004 */ lw $t2,0x4($a1)
///* f0f2eb0: 2404000d */ addiu $a0,$zero,0xd
///* f0f2eb4: 314b0004 */ andi $t3,$t2,0x4
///* f0f2eb8: 55600004 */ bnezl $t3,.L0f0f2ecc
///* f0f2ebc: 8fa70068 */ lw $a3,0x68($sp)
///* f0f2ec0: 0040f809 */ jalr $v0
///* f0f2ec4: 27a60034 */ addiu $a2,$sp,0x34
///* f0f2ec8: 8fa70068 */ lw $a3,0x68($sp)
//.L0f0f2ecc:
///* f0f2ecc: ae20000c */ sw $zero,0xc($s1)
///* f0f2ed0: ae200064 */ sw $zero,0x64($s1)
///* f0f2ed4: ae200068 */ sw $zero,0x68($s1)
///* f0f2ed8: 8ce2000c */ lw $v0,0xc($a3)
///* f0f2edc: 24040064 */ addiu $a0,$zero,0x64
///* f0f2ee0: 00e02825 */ or $a1,$a3,$zero
///* f0f2ee4: 50400005 */ beqzl $v0,.L0f0f2efc
///* f0f2ee8: 00e02025 */ or $a0,$a3,$zero
///* f0f2eec: 0040f809 */ jalr $v0
///* f0f2ef0: 27a60058 */ addiu $a2,$sp,0x58
///* f0f2ef4: 8fa70068 */ lw $a3,0x68($sp)
///* f0f2ef8: 00e02025 */ or $a0,$a3,$zero
//.L0f0f2efc:
///* f0f2efc: 02202825 */ or $a1,$s1,$zero
///* f0f2f00: 0fc3c84d */ jal func0f0f2134
///* f0f2f04: 8fa60070 */ lw $a2,0x70($sp)
///* f0f2f08: 0fc3dfa6 */ jal func0f0f7e98
///* f0f2f0c: 02202025 */ or $a0,$s1,$zero
///* f0f2f10: 8e2c002c */ lw $t4,0x2c($s1)
///* f0f2f14: 8e2d0030 */ lw $t5,0x30($s1)
///* f0f2f18: 8e2e0034 */ lw $t6,0x34($s1)
///* f0f2f1c: 8e2f0038 */ lw $t7,0x38($s1)
///* f0f2f20: ae2c0014 */ sw $t4,0x14($s1)
///* f0f2f24: ae2d0018 */ sw $t5,0x18($s1)
///* f0f2f28: ae2e001c */ sw $t6,0x1c($s1)
///* f0f2f2c: ae2f0020 */ sw $t7,0x20($s1)
///* f0f2f30: 8fbf0024 */ lw $ra,0x24($sp)
///* f0f2f34: 8fb30020 */ lw $s3,0x20($sp)
///* f0f2f38: 8fb2001c */ lw $s2,0x1c($sp)
///* f0f2f3c: 8fb10018 */ lw $s1,0x18($sp)
///* f0f2f40: 8fb00014 */ lw $s0,0x14($sp)
///* f0f2f44: 03e00008 */ jr $ra
///* f0f2f48: 27bd0068 */ addiu $sp,$sp,0x68
//);
void func0f0f2cf4(struct menudialog *dialog, struct menuframe *frame, struct menu *menu)
void menuOpenDialog(struct menudialog *dialog, struct menuframe *frame, struct menu *menu)
{
union handlerdata buffer3;
union handlerdata data3;
struct menuitem *item;
union handlerdata buffer1;
union handlerdata buffer2;
union handlerdata data1;
union handlerdata data2;
s32 (*handler)(u32 operation, struct menuitem *item, union handlerdata *data);
frame->dialog = dialog;
@@ -2988,7 +2821,6 @@ void func0f0f2cf4(struct menudialog *dialog, struct menuframe *frame, struct men
func0f0f1d6c(dialog, frame, menu);
func0f0fa574(frame);
// d74
frame->dialogtype = dialog->type;
frame->unk40 = -1;
frame->unk48 = 0;
@@ -3001,28 +2833,29 @@ void func0f0f2cf4(struct menudialog *dialog, struct menuframe *frame, struct men
frame->unk58 = 0;
frame->unk5c = 0;
// e24
frame->focuseditem = func0f0f288c(frame);
// Check if any items should be focused automatically
item = frame->dialog->items;
while (item->type != MENUITEMTYPE_END) {
handler = item->ptr.handler;
handler = item->handler;
if (handler
&& (item->param1 & 0x04) == 0
&& handler(MENUOP_CHECKPREFOCUSED, item, &buffer1)) {
&& handler(MENUOP_CHECKPREFOCUSED, item, &data1)) {
frame->focuseditem = item;
}
item++;
}
// Run onfocus handler?
// Run focus handler
if (frame->focuseditem) {
handler = frame->focuseditem->ptr.handler;
handler = frame->focuseditem->handler;
if (handler && (frame->focuseditem->param1 & 0x04) == 0) {
handler(MENUOP_13, frame->focuseditem, &buffer2);
handler(MENUOP_FOCUS, frame->focuseditem, &data2);
}
}
@@ -3031,7 +2864,7 @@ void func0f0f2cf4(struct menudialog *dialog, struct menuframe *frame, struct men
frame->unk68 = 0;
if (dialog->handler) {
dialog->handler(MENUOP_OPEN, dialog, &buffer3);
dialog->handler(MENUOP_OPEN, dialog, &data3);
}
func0f0f2134(dialog, frame, menu);
@@ -3114,7 +2947,7 @@ glabel menuPushDialog
/* f0f3054: 01560019 */ multu $t2,$s6
/* f0f3058: 00005812 */ mflo $t3
/* f0f305c: 028b3021 */ addu $a2,$s4,$t3
/* f0f3060: 0fc3cb3d */ jal func0f0f2cf4
/* f0f3060: 0fc3cb3d */ jal menuOpenDialog
/* f0f3064: 00000000 */ nop
/* f0f3068: 0c002f02 */ jal viGetX
/* f0f306c: 00000000 */ nop
@@ -3180,7 +3013,7 @@ glabel menuPushDialog
/* f0f3150: 01d60019 */ multu $t6,$s6
/* f0f3154: 00007812 */ mflo $t7
/* f0f3158: 028f3021 */ addu $a2,$s4,$t7
/* f0f315c: 0fc3cb3d */ jal func0f0f2cf4
/* f0f315c: 0fc3cb3d */ jal menuOpenDialog
/* f0f3160: 00000000 */ nop
/* f0f3164: ae130014 */ sw $s3,0x14($s0)
/* f0f3168: 0c002f06 */ jal viGetY
@@ -3259,7 +3092,7 @@ glabel menuPushDialog
// g_Menus[g_MpPlayerNum].curframe = frame;
// frame->unk6d = 0;
//
// func0f0f2cf4(dialog, frame, &g_Menus[g_MpPlayerNum]);
// menuOpenDialog(dialog, frame, &g_Menus[g_MpPlayerNum]);
//
// frame->unk2c = (viGetX() - frame->unk1c) / 2;
// frame->unk30 = (viGetY() - frame->unk20) / 2;
@@ -3279,7 +3112,7 @@ glabel menuPushDialog
//
// frame->unk6d = -1;
//
// func0f0f2cf4(sibling, frame, &g_Menus[g_MpPlayerNum]);
// menuOpenDialog(sibling, frame, &g_Menus[g_MpPlayerNum]);
//
// frame->unk14 = -320;
// frame->unk2c = -320;
+70 -74
View File
@@ -87,33 +87,29 @@ s32 menuhandlerControlStyleImpl(u32 operation, struct menuitem *item, union hand
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 8;
data->custom.value = 8;
break;
case MENUOP_GETOPTGROUPCOUNT:
data->word = 2;
data->custom.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(g_ControlStyleOptions[data->word]);
return (s32) langGet(g_ControlStyleOptions[data->custom.value]);
case MENUOP_GETOPTGROUPTEXT:
return (s32) langGet(categories[data->word]);
return (s32) langGet(categories[data->custom.value]);
case MENUOP_GETGROUPSTARTINDEX:
if (data->words[0] == 0) {
data->words[2] = 0;
} else {
data->words[2] = 4;
}
data->custom.groupstartindex = data->custom.value == 0 ? 0 : 4;
break;
case MENUOP_SET:
optionsSetControlMode(mpindex, data->word);
optionsSetControlMode(mpindex, data->custom.value);
g_Vars.unk000458 |= 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetControlMode(mpindex);
data->custom.value = optionsGetControlMode(mpindex);
g_Menus[g_MpPlayerNum].data.main.mpindex = mpindex;
break;
case MENUOP_16:
if (g_MenuData.root == MENUROOT_MAINMENU) {
g_Menus[g_MpPlayerNum].data.main.unke20 = data->word;
g_Menus[g_MpPlayerNum].data.main.unke20 = data->custom.value;
}
break;
}
@@ -145,7 +141,7 @@ s32 menuhandlerReversePitch(u32 operation, struct menuitem *item, union handlerd
case MENUOP_GET:
return !optionsGetForwardPitch(mpchrnum);
case MENUOP_SET:
optionsSetForwardPitch(mpchrnum, data->word == 0);
optionsSetForwardPitch(mpchrnum, data->checkbox.value == 0);
g_Vars.unk000458 |= 1;
}
@@ -164,16 +160,16 @@ s32 menuhandlerAimControl(u32 operation, struct menuitem *item, union handlerdat
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 2;
data->dropdown.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(options[data->word]);
return (s32) langGet(options[data->dropdown.value]);
case MENUOP_SET:
optionsSetAimControl(playernum, data->word);
optionsSetAimControl(playernum, data->dropdown.value);
g_Vars.unk000458 |= 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetAimControl(playernum);
data->dropdown.value = optionsGetAimControl(playernum);
}
return 0;
@@ -190,16 +186,16 @@ s32 menuhandlerSoundMode(u32 operation, struct menuitem *item, union handlerdata
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 4;
data->dropdown.value = 4;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(options[data->word]);
return (s32) langGet(options[data->dropdown.value]);
case MENUOP_SET:
audioSetSoundMode(data->word);
audioSetSoundMode(data->dropdown.value);
g_Vars.unk000458 |= 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = g_SoundMode;
data->dropdown.value = g_SoundMode;
}
return 0;
@@ -215,16 +211,16 @@ s32 menuhandlerScreenSize(u32 operation, struct menuitem *item, union handlerdat
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 3;
data->dropdown.value = 3;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(options[data->word]);
return (s32) langGet(options[data->dropdown.value]);
case MENUOP_SET:
optionsSetScreenSize(data->word);
optionsSetScreenSize(data->dropdown.value);
g_Vars.unk000458 |= 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetEffectiveScreenSize();
data->dropdown.value = optionsGetEffectiveScreenSize();
}
return 0;
@@ -239,16 +235,16 @@ s32 menuhandlerScreenRatio(u32 operation, struct menuitem *item, union handlerda
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 2;
data->dropdown.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(options[data->word]);
return (s32) langGet(options[data->dropdown.value]);
case MENUOP_SET:
optionsSetScreenRatio(data->word);
optionsSetScreenRatio(data->dropdown.value);
g_Vars.unk000458 |= 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetScreenRatio();
data->dropdown.value = optionsGetScreenRatio();
}
return 0;
@@ -263,13 +259,13 @@ s32 menuhandlerScreenSplit(u32 operation, struct menuitem *item, union handlerda
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 2;
data->dropdown.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(options[data->word]);
return (s32) langGet(options[data->dropdown.value]);
case MENUOP_SET:
if (optionsGetScreenSplit() != data->word) {
optionsSetScreenSplit(data->word);
if (data->dropdown.value != (u32)optionsGetScreenSplit()) {
optionsSetScreenSplit(data->dropdown.value);
g_Vars.unk000458 |= 1;
@@ -284,7 +280,7 @@ s32 menuhandlerScreenSplit(u32 operation, struct menuitem *item, union handlerda
}
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetScreenSplit();
data->dropdown.value = optionsGetScreenSplit();
break;
}
@@ -305,7 +301,7 @@ s32 menuhandlerLookAhead(u32 operation, struct menuitem *item, union handlerdata
case MENUOP_GET:
return optionsGetLookAhead(mpchrnum);
case MENUOP_SET:
optionsSetLookAhead(mpchrnum, data->word);
optionsSetLookAhead(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -326,7 +322,7 @@ s32 menuhandlerHeadRoll(u32 operation, struct menuitem *item, union handlerdata
case MENUOP_GET:
return optionsGetHeadRoll(mpchrnum);
case MENUOP_SET:
optionsSetHeadRoll(mpchrnum, data->word);
optionsSetHeadRoll(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -339,7 +335,7 @@ s32 menuhandlerInGameSubtitles(u32 operation, struct menuitem *item, union handl
case MENUOP_GET:
return optionsGetInGameSubtitles();
case MENUOP_SET:
optionsSetInGameSubtitles(data->word);
optionsSetInGameSubtitles(data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -352,7 +348,7 @@ s32 menuhandlerCutsceneSubtitles(u32 operation, struct menuitem *item, union han
case MENUOP_GET:
return optionsGetCutsceneSubtitles();
case MENUOP_SET:
optionsSetCutsceneSubtitles(data->word);
optionsSetCutsceneSubtitles(data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -370,7 +366,7 @@ s32 menuhandlerAlternativeTitle(u32 operation, struct menuitem *item, union hand
case MENUOP_GET:
return g_AltTitle;
case MENUOP_SET:
g_AltTitle = data->word;
g_AltTitle = data->checkbox.value;
g_Vars.unk000458 |= 4;
}
@@ -393,7 +389,7 @@ s32 menuhandlerHiRes(u32 operation, struct menuitem *item, union handlerdata *da
case MENUOP_GET:
return g_HiResEnabled == true;
case MENUOP_SET:
optionsSetHiRes(data->word ? 1 : 0);
optionsSetHiRes(data->checkbox.value ? 1 : 0);
g_Vars.unk000458 |= 1;
}
@@ -414,7 +410,7 @@ s32 menuhandlerAmmoOnScreen(u32 operation, struct menuitem *item, union handlerd
case MENUOP_GET:
return optionsGetAmmoOnScreen(mpchrnum);
case MENUOP_SET:
optionsSetAmmoOnScreen(mpchrnum, data->word);
optionsSetAmmoOnScreen(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -440,7 +436,7 @@ s32 menuhandlerShowGunFunction(u32 operation, struct menuitem *item, union handl
case MENUOP_GET:
return optionsGetShowGunFunction(mpchrnum);
case MENUOP_SET:
optionsSetShowGunFunction(mpchrnum, data->word);
optionsSetShowGunFunction(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -461,7 +457,7 @@ s32 menuhandlerShowMissionTime(u32 operation, struct menuitem *item, union handl
case MENUOP_GET:
return optionsGetShowMissionTime(mpchrnum);
case MENUOP_SET:
optionsSetShowMissionTime(mpchrnum, data->word);
optionsSetShowMissionTime(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -487,7 +483,7 @@ s32 menuhandlerAlwaysShowTarget(u32 operation, struct menuitem *item, union hand
case MENUOP_GET:
return optionsGetAlwaysShowTarget(mpchrnum);
case MENUOP_SET:
optionsSetAlwaysShowTarget(mpchrnum, data->word);
optionsSetAlwaysShowTarget(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -513,7 +509,7 @@ s32 menuhandlerShowZoomRange(u32 operation, struct menuitem *item, union handler
case MENUOP_GET:
return optionsGetShowZoomRange(mpchrnum);
case MENUOP_SET:
optionsSetShowZoomRange(mpchrnum, data->word);
optionsSetShowZoomRange(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -534,7 +530,7 @@ s32 menuhandlerPaintball(u32 operation, struct menuitem *item, union handlerdata
case MENUOP_GET:
return optionsGetPaintball(mpchrnum);
case MENUOP_SET:
optionsSetPaintball(mpchrnum, data->word);
optionsSetPaintball(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -555,7 +551,7 @@ s32 menuhandlerSightOnScreen(u32 operation, struct menuitem *item, union handler
case MENUOP_GET:
return optionsGetSightOnScreen(mpchrnum);
case MENUOP_SET:
optionsSetSightOnScreen(mpchrnum, data->word);
optionsSetSightOnScreen(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -576,7 +572,7 @@ s32 menuhandlerAutoAim(u32 operation, struct menuitem *item, union handlerdata *
case MENUOP_GET:
return optionsGetAutoAim(mpchrnum);
case MENUOP_SET:
optionsSetAutoAim(mpchrnum, data->word);
optionsSetAutoAim(mpchrnum, data->checkbox.value);
g_Vars.unk000458 |= 1;
}
@@ -587,10 +583,10 @@ s32 menuhandlerMusicVolume(u32 operation, struct menuitem *item, union handlerda
{
switch (operation) {
case MENUOP_GETSLIDER:
data->word = optionsGetMusicVolume();
data->slider.value = optionsGetMusicVolume();
break;
case MENUOP_SET:
optionsSetMusicVolume(data->word);
optionsSetMusicVolume(data->slider.value);
g_Vars.unk000458 |= 1;
}
@@ -602,13 +598,13 @@ s32 menuhandlerSfxVolume(u32 operation, struct menuitem *item, union handlerdata
switch (operation) {
case MENUOP_GETSLIDER:
if (g_SfxVolume > 0x5000) {
data->word = 0x5000;
data->slider.value = 0x5000;
} else {
data->word = g_SfxVolume;
data->slider.value = g_SfxVolume;
}
break;
case MENUOP_SET:
audioSetSfxVolume(data->word);
audioSetSfxVolume(data->slider.value);
g_Vars.unk000458 |= 1;
}
@@ -898,17 +894,17 @@ s32 menuhandlerPdModeSetting(u32 operation, struct menuitem *item, union handler
switch (operation) {
case MENUOP_GETSLIDER:
data->word = *property;
data->slider.value = *property;
break;
case MENUOP_SET:
*property = (u16)data->word;
*property = (u16)data->slider.value;
break;
case MENUOP_GETSLIDERLABEL:
fvalue = func0f1036ac(*property, item->param);
if (item->param == 0) {
fvalue = fvalue * 4 + 1.0f;
}
sprintf(data->ptrs[1], "%s%s%.00f%%\n", "", "", fvalue * 100.0f);
sprintf(data->slider.label, "%s%s%.00f%%\n", "", "", fvalue * 100.0f);
break;
}
@@ -1477,7 +1473,7 @@ s32 menuhandlerCoopRadar(u32 operation, struct menuitem *item, union handlerdata
case MENUOP_GET:
return g_Vars.coopradaron;
case MENUOP_SET:
g_Vars.coopradaron = data->word ? 1 : 0;
g_Vars.coopradaron = data->checkbox.value ? 1 : 0;
g_Vars.unk000458 |= 1;
}
@@ -1490,7 +1486,7 @@ s32 menuhandlerCoopFriendlyFire(u32 operation, struct menuitem *item, union hand
case MENUOP_GET:
return g_Vars.coopfriendlyfire;
case MENUOP_SET:
g_Vars.coopfriendlyfire = data->word ? 1 : 0;
g_Vars.coopfriendlyfire = data->checkbox.value ? 1 : 0;
g_Vars.unk000458 |= 1;
}
@@ -1635,7 +1631,7 @@ s32 menuhandlerAntiRadar(u32 operation, struct menuitem *item, union handlerdata
case MENUOP_GET:
return g_Vars.antiradaron;
case MENUOP_SET:
g_Vars.antiradaron = data->word ? 1 : 0;
g_Vars.antiradaron = data->checkbox.value ? 1 : 0;
g_Vars.unk000458 |= 1;
}
@@ -1648,16 +1644,16 @@ s32 menuhandlerAntiPlayer(u32 operation, struct menuitem *item, union handlerdat
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 2;
data->dropdown.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(labels[data->word]);
return (s32) langGet(labels[data->dropdown.value]);
case MENUOP_SET:
g_Vars.pendingantiplayernum = data->word;
g_Vars.pendingantiplayernum = data->dropdown.value;
g_Vars.unk000458 |= 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = g_Vars.pendingantiplayernum;
data->dropdown.value = g_Vars.pendingantiplayernum;
break;
}
@@ -2846,7 +2842,7 @@ s32 menudialog0010559c(u32 operation, struct menudialog *dialog, union handlerda
case MENUOP_CLOSE:
if ((g_Vars.unk000458 & 1) && g_Vars.coopplayernum < 0 && g_Vars.antiplayernum < 0) {
if (func0f1094e4(&var800a22c0, 1, 0) == 0) {
data->word = 1;
data->dialog1.value = 1;
}
g_Vars.unk000458 &= ~0x00000001;
@@ -2923,7 +2919,7 @@ s32 menuhandlerLangFilter(u32 operation, struct menuitem *item, union handlerdat
case MENUOP_GET:
return g_Vars.langfilteron;
case MENUOP_SET:
g_Vars.langfilteron = data->word;
g_Vars.langfilteron = data->checkbox.value;
g_Vars.unk000458 |= 1;
}
@@ -4360,38 +4356,38 @@ s32 menuhandlerCinema(u32 operation, struct menuitem *item, union handlerdata *d
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = g_CutsceneIndexes[getNumCompletedMissions()] + 1;
data->custom.value = g_CutsceneIndexes[getNumCompletedMissions()] + 1;
break;
case MENUOP_GETOPTIONTEXT:
if (data->word == 0) {
if (data->custom.value == 0) {
sprintf(g_StringPointer, langGet(L_OPTIONS(448))); // "Play All"
return (s32) g_StringPointer;
}
return (s32) langGet(g_Cutscenes[data->word - 1].name);
return (s32) langGet(g_Cutscenes[data->custom.value - 1].name);
case MENUOP_SET:
if (data->word == 0) {
if (data->custom.value == 0) {
s32 index = getNumCompletedMissions();
g_Vars.unk0004d4 = 0;
g_Vars.unk0004d5 = g_CutsceneIndexes[index];
menuPopDialog();
func0f01bea0();
} else {
g_Vars.unk0004d4 = data->word - 1;
g_Vars.unk0004d4 = data->custom.value - 1;
g_Vars.unk0004d5 = 1;
menuPopDialog();
func0f01bea0();
}
break;
case MENUOP_GETOPTIONVALUE:
data->word = 0xfffff;
data->custom.value = 0xfffff;
break;
case MENUOP_GETOPTGROUPCOUNT:
data->word = ARRAYCOUNT(groups);
data->custom.value = ARRAYCOUNT(groups);
break;
case MENUOP_GETOPTGROUPTEXT:
return (s32) langGet(groups[data->word].name);
return (s32) langGet(groups[data->custom.value].name);
case MENUOP_GETGROUPSTARTINDEX:
data->words[2] = groups[data->words[0]].first_cutscene_index;
data->custom.groupstartindex = groups[data->custom.value].first_cutscene_index;
break;
}
+2 -2
View File
@@ -2484,7 +2484,7 @@ glabel func0f109ec4
s32 menuhandlerRenameFile(u32 operation, struct menuitem *item, union handlerdata *data)
{
char *name = data->ptrs[0];
char *name = data->keyboard.string;
switch (operation) {
case MENUOP_GETTEXT:
@@ -4343,7 +4343,7 @@ s32 menuhandlerOpenDeleteFile(u32 operation, struct menuitem *item, union handle
s32 menuhandlerAgentName(u32 operation, struct menuitem *item, union handlerdata *data)
{
char *name = data->ptrs[0];
char *name = data->keyboard.string;
if (!g_SaveLocations[0]) {
return 0;
+70 -79
View File
@@ -384,15 +384,15 @@ s32 menuhandlerMpControlStyle(u32 operation, struct menuitem *item, union handle
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 4;
data->dropdown.value = 4;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(labels[data->word]);
return (s32) langGet(labels[data->dropdown.value]);
case MENUOP_SET:
optionsSetControlMode(g_MpPlayerNum, data->word);
optionsSetControlMode(g_MpPlayerNum, data->dropdown.value);
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetControlMode(g_MpPlayerNum);
data->dropdown.value = optionsGetControlMode(g_MpPlayerNum);
break;
}
@@ -403,15 +403,15 @@ s32 menuhandlerMpWeaponSlot(u32 operation, struct menuitem *item, union handlerd
{
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = mpGetNumWeaponOptions();
data->dropdown.value = mpGetNumWeaponOptions();
break;
case MENUOP_GETOPTIONTEXT:
return (s32) mpGetWeaponLabel(data->word);
return (s32) mpGetWeaponLabel(data->dropdown.value);
case MENUOP_SET:
mpSetWeaponSlot(item->param3, data->word);
mpSetWeaponSlot(item->param3, data->dropdown.value);
break;
case MENUOP_GETOPTIONVALUE:
data->word = mpGetWeaponSlot(item->param3);
data->dropdown.value = mpGetWeaponSlot(item->param3);
}
return 0;
@@ -426,15 +426,15 @@ s32 menuhandlerMpWeaponSetDropdown(u32 operation, struct menuitem *item, union h
{
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = func0f189058(item->param);
data->dropdown.value = func0f189058(item->param);
break;
case MENUOP_GETOPTIONTEXT:
return (s32) mpGetWeaponSetName(data->word);
return (s32) mpGetWeaponSetName(data->dropdown.value);
case MENUOP_SET:
mpSetWeaponSet(data->word);
mpSetWeaponSet(data->dropdown.value);
break;
case MENUOP_GETOPTIONVALUE:
data->word = mpGetWeaponSet();
data->dropdown.value = mpGetWeaponSet();
break;
}
@@ -461,16 +461,16 @@ s32 menuhandlerMpControlCheckbox(u32 operation, struct menuitem *item, union han
val = OPTION_FORWARDPITCH;
if (item->param3 == val) {
if (data->word == 0) {
data->word = val;
if (data->checkbox.value == 0) {
data->checkbox.value = val;
} else {
data->word = 0;
data->checkbox.value = 0;
}
}
g_MpPlayers[g_MpPlayerNum].options &= ~item->param3;
if (data->word) {
if (data->checkbox.value) {
g_MpPlayers[g_MpPlayerNum].options |= item->param3;
}
}
@@ -484,15 +484,15 @@ s32 menuhandlerMpAimControl(u32 operation, struct menuitem *item, union handlerd
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 2;
data->dropdown.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(labels[data->word]);
return (s32) langGet(labels[data->dropdown.value]);
case MENUOP_SET:
optionsSetAimControl(g_MpPlayerNum, data->word);
optionsSetAimControl(g_MpPlayerNum, data->dropdown.value);
break;
case MENUOP_GETOPTIONVALUE:
data->word = optionsGetAimControl(g_MpPlayerNum);
data->dropdown.value = optionsGetAimControl(g_MpPlayerNum);
break;
}
@@ -509,7 +509,7 @@ s32 menuhandlerMpCheckboxOption(u32 operation, struct menuitem *item, union hand
return true;
case MENUOP_SET:
g_MpSetup.options = g_MpSetup.options & ~item->param3;
if (data->word) {
if (data->checkbox.value) {
g_MpSetup.options = g_MpSetup.options | item->param3;
}
}
@@ -542,7 +542,7 @@ s32 menuhandlerMpDisplayOptionCheckbox(u32 operation, struct menuitem *item, uni
case MENUOP_SET:
g_MpPlayers[g_MpPlayerNum].base.displayoptions &= ~(u8)item->param3;
if (data->word) {
if (data->checkbox.value) {
g_MpPlayers[g_MpPlayerNum].base.displayoptions |= (u8)item->param3;
}
break;
@@ -563,7 +563,7 @@ s32 menuhandlerMpConfirmSaveChr(u32 operation, struct menuitem *item, union hand
s32 menuhandlerMpPlayerName(u32 operation, struct menuitem *item, union handlerdata *data)
{
char *name = data->ptrs[0];
char *name = data->keyboard.string;
switch (operation) {
case MENUOP_GETTEXT:
@@ -997,11 +997,11 @@ s32 menuhandlerMpCharacterBody(u32 operation, struct menuitem *item, union handl
switch (operation) {
case MENUOP_SET:
if (g_MpPlayers[g_MpPlayerNum].base.headnum < mpGetNumHeads()) {
if (!data->words[1]) {
g_MpPlayers[g_MpPlayerNum].base.headnum = mpBodyGetMpHeadIndex(data->word);
if (!data->carousel.unk04) {
g_MpPlayers[g_MpPlayerNum].base.headnum = mpBodyGetMpHeadIndex(data->carousel.value);
}
}
g_MpPlayers[g_MpPlayerNum].base.bodynum = data->word;
g_MpPlayers[g_MpPlayerNum].base.bodynum = data->carousel.value;
func0f17b8f0();
break;
case MENUOP_CHECKPREFOCUSED:
@@ -2685,7 +2685,7 @@ glabel var7f1b814c
s32 menuhandlerMpCharacterHead(u32 operation, struct menuitem *item, union handlerdata *data)
{
if (operation == MENUOP_SET) {
g_MpPlayers[g_MpPlayerNum].base.headnum = data->word;
g_MpPlayers[g_MpPlayerNum].base.headnum = data->carousel.value;
}
return func0f17b4f8(operation, item, data, g_MpPlayers[g_MpPlayerNum].base.headnum, 1);
@@ -3361,16 +3361,16 @@ s32 menuhandlerMpTimeLimitSlider(u32 operation, struct menuitem *item, union han
{
switch (operation) {
case MENUOP_GETSLIDER:
data->word = g_MpSetup.timelimit;
data->slider.value = g_MpSetup.timelimit;
break;
case MENUOP_SET:
g_MpSetup.timelimit = data->word;
g_MpSetup.timelimit = data->slider.value;
break;
case MENUOP_GETSLIDERLABEL:
if (data->word == 60) {
sprintf(data->ptrs[1], langGet(L_MPMENU(112))); // "No Limit"
if (data->slider.value == 60) {
sprintf(data->slider.label, langGet(L_MPMENU(112))); // "No Limit"
} else {
sprintf(data->ptrs[1], langGet(L_MPMENU(114)), data->word + 1); // "%d Min"
sprintf(data->slider.label, langGet(L_MPMENU(114)), data->slider.value + 1); // "%d Min"
}
}
return 0;
@@ -3380,16 +3380,16 @@ s32 menuhandlerMpScoreLimitSlider(u32 operation, struct menuitem *item, union ha
{
switch (operation) {
case MENUOP_GETSLIDER:
data->word = g_MpSetup.scorelimit;
data->slider.value = g_MpSetup.scorelimit;
break;
case MENUOP_SET:
g_MpSetup.scorelimit = data->word;
g_MpSetup.scorelimit = data->slider.value;
break;
case MENUOP_GETSLIDERLABEL:
if (data->word == 100) {
sprintf(data->ptrs[1], langGet(L_MPMENU(112))); // "No Limit"
if (data->slider.value == 100) {
sprintf(data->slider.label, langGet(L_MPMENU(112))); // "No Limit"
} else {
sprintf(data->ptrs[1], langGet(L_MPMENU(113)), data->word + 1); // "%d"
sprintf(data->slider.label, langGet(L_MPMENU(113)), data->slider.value + 1); // "%d"
}
}
@@ -3400,16 +3400,16 @@ s32 menuhandlerMpTeamScoreLimitSlider(u32 operation, struct menuitem *item, unio
{
switch (operation) {
case MENUOP_GETSLIDER:
data->word = func0f18844c();
data->slider.value = func0f18844c();
break;
case MENUOP_SET:
g_MpSetup.teamscorelimit = data->word;
g_MpSetup.teamscorelimit = data->slider.value;
break;
case MENUOP_GETSLIDERLABEL:
if (data->word == 400) {
sprintf(data->ptrs[1], langGet(L_MPMENU(112))); // "No Limit"
if (data->slider.value == 400) {
sprintf(data->slider.label, langGet(L_MPMENU(112))); // "No Limit"
} else {
sprintf(data->ptrs[1], langGet(L_MPMENU(113)), data->word + 1); // "%d"
sprintf(data->slider.label, langGet(L_MPMENU(113)), data->slider.value + 1); // "%d"
}
}
@@ -3863,13 +3863,15 @@ s32 menuhandlerMpSimulantHead(u32 operation, struct menuitem *item, union handle
/**
* Rare developers forgot to add a break statement to the first case,
* and when they noticed a problem their fix was to add an additional
* MENUOP_13 check in the next case.
* MENUOP_FOCUS check in the next case.
*/
switch (operation) {
case MENUOP_SET:
g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.headnum = start + data->word;
case MENUOP_13:
if (operation == MENUOP_13 && item->param2 == 1 && g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.headnum < start) {
g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.headnum = start + data->carousel.value;
case MENUOP_FOCUS:
if (operation == MENUOP_FOCUS
&& item->param2 == 1
&& g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.headnum < start) {
g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.headnum = start;
}
break;
@@ -3881,7 +3883,7 @@ s32 menuhandlerMpSimulantHead(u32 operation, struct menuitem *item, union handle
s32 menuhandlerMpSimulantBody(u32 operation, struct menuitem *item, union handlerdata *data)
{
if (operation == MENUOP_SET) {
g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.bodynum = data->word;
g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.bodynum = data->carousel.value;
}
return func0f179da4(operation, item, data,
@@ -4641,15 +4643,15 @@ s32 menuhandlerMpTeamSlot(u32 operation, struct menuitem *item, union handlerdat
switch (operation) {
case MENUOP_SET:
mpchr = func0f18c794(item->param);
mpchr->team = data->word;
mpchr->team = data->dropdown.value;
break;
case MENUOP_GETOPTIONVALUE:
mpchr = func0f18c794(item->param);
if (!mpchr) {
data->word = 0xff;
data->dropdown.value = 0xff;
} else {
data->word = mpchr->team;
data->dropdown.value = mpchr->team;
}
break;
@@ -4951,7 +4953,7 @@ s32 menuhandlerMpMultipleTunes(u32 operation, struct menuitem *item, union handl
case MENUOP_GET:
return mpGetUsingMultipleTunes();
case MENUOP_SET:
mpSetUsingMultipleTunes(data->word);
mpSetUsingMultipleTunes(data->checkbox.value);
g_Vars.unk000458 |= 2;
}
@@ -5780,18 +5782,14 @@ s32 menuhandlerMpLock(u32 operation, struct menuitem *item, union handlerdata *d
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
if (mpGetLockType() == MPLOCKTYPE_CHALLENGE) {
data->word = 1;
} else {
data->word = 5;
}
data->dropdown.value = mpGetLockType() == MPLOCKTYPE_CHALLENGE ? 1 : 5;
break;
case MENUOP_GETOPTIONTEXT:
if (mpGetLockType() == MPLOCKTYPE_CHALLENGE) {
return (s32) langGet(L_MPMENU(49)); // "Challenge"
}
if ((u32)data->word <= 3) {
return (s32) langGet(labels[data->word]);
if (data->dropdown.value <= 3) {
return (s32) langGet(labels[data->dropdown.value]);
}
if (mpGetLockType() == MPLOCKTYPE_PLAYER) {
return (s32) g_MpPlayers[mpGetLockPlayerNum()].base.name;
@@ -5799,16 +5797,12 @@ s32 menuhandlerMpLock(u32 operation, struct menuitem *item, union handlerdata *d
return (s32) mpGetCurrentPlayerName(item);
case MENUOP_SET:
if (mpGetLockType() != MPLOCKTYPE_CHALLENGE) {
mpSetLock(data->word, g_MpPlayerNum);
mpSetLock(data->dropdown.value, g_MpPlayerNum);
}
g_Vars.unk000458 |= 2;
break;
case MENUOP_GETOPTIONVALUE:
if (mpGetLockType() == MPLOCKTYPE_CHALLENGE) {
data->word = 0;
} else {
data->word = mpGetLockType();
}
data->dropdown.value = mpGetLockType() == MPLOCKTYPE_CHALLENGE ? 0 : mpGetLockType();
break;
}
@@ -6340,23 +6334,20 @@ s32 menuhandlerMpNumberOfSimulants(u32 operation, struct menuitem *item, union h
{
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
if (!mpIsChallengeComplete(CHALLENGE_UNK64)) {
data->word = 4;
} else {
data->word = 8;
}
data->dropdown.value = !mpIsChallengeComplete(CHALLENGE_UNK64) ? 4 : 8;
break;
case MENUOP_GETOPTIONTEXT:
sprintf(g_StringPointer, "%d\n", data->word + 1);
return (u32)g_StringPointer;
sprintf(g_StringPointer, "%d\n", data->dropdown.value + 1);
return (s32) g_StringPointer;
case MENUOP_SET:
g_Vars.mpquickteamnumsims = data->word + 1;
g_Vars.mpquickteamnumsims = data->dropdown.value + 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = g_Vars.mpquickteamnumsims - 1;
data->dropdown.value = g_Vars.mpquickteamnumsims - 1;
break;
case MENUOP_CHECKHIDDEN:
if (g_Vars.mpquickteam != MPQUICKTEAM_PLAYERSANDSIMS && g_Vars.mpquickteam != MPQUICKTEAM_PLAYERSVSSIMS) {
if (g_Vars.mpquickteam != MPQUICKTEAM_PLAYERSANDSIMS
&& g_Vars.mpquickteam != MPQUICKTEAM_PLAYERSVSSIMS) {
return true;
}
break;
@@ -6369,16 +6360,16 @@ s32 menuhandlerMpSimulantsPerTeam(u32 operation, struct menuitem *item, union ha
{
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = 2;
data->dropdown.value = 2;
break;
case MENUOP_GETOPTIONTEXT:
sprintf(g_StringPointer, "%d\n", data->word + 1);
return (u32)g_StringPointer;
sprintf(g_StringPointer, "%d\n", data->dropdown.value + 1);
return (s32) g_StringPointer;
case MENUOP_SET:
g_Vars.unk0004a0 = data->word + 1;
g_Vars.unk0004a0 = data->dropdown.value + 1;
break;
case MENUOP_GETOPTIONVALUE:
data->word = g_Vars.unk0004a0 - 1;
data->dropdown.value = g_Vars.unk0004a0 - 1;
break;
case MENUOP_CHECKHIDDEN:
if (g_Vars.mpquickteam != MPQUICKTEAM_PLAYERSIMTEAMS) {
+3 -3
View File
@@ -1773,13 +1773,13 @@ s32 menuhandlerMpHillTime(u32 operation, struct menuitem *item, union handlerdat
{
switch (operation) {
case MENUOP_GETSLIDER:
data->word = g_Vars.mphilltime;
data->slider.value = g_Vars.mphilltime;
break;
case MENUOP_SET:
g_Vars.mphilltime = (u8)data->word;
g_Vars.mphilltime = (u8)data->slider.value;
break;
case MENUOP_GETSLIDERLABEL:
sprintf(data->ptrs[1], langGet(L_MPWEAPONS(23)), data->word + 10); // "%ds/Point"
sprintf(data->slider.label, langGet(L_MPWEAPONS(23)), data->slider.value + 10); // "%ds/Point"
break;
}
+34 -34
View File
@@ -592,20 +592,20 @@ s32 frDifficultyDropdownMenuHandler(u32 operation, struct menuitem *item, union
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = ciGetFiringRangeScore(frGetSlot()) + 1;
data->dropdown.value = ciGetFiringRangeScore(frGetSlot()) + 1;
if ((u32)data->word > 3) {
data->word = 3;
if (data->dropdown.value > 3) {
data->dropdown.value = 3;
}
break;
case MENUOP_GETOPTIONTEXT:
return (s32) langGet(names[data->word]);
return (s32) langGet(names[data->dropdown.value]);
case MENUOP_SET:
frSetDifficulty(data->word);
frSetDifficulty(data->dropdown.value);
menuPushDialog(&menudialog_frtraininginfo2);
break;
case MENUOP_GETOPTIONVALUE:
data->word = frGetDifficulty();
data->dropdown.value = frGetDifficulty();
break;
}
@@ -2658,19 +2658,19 @@ s32 ciOfficeInformationMenuHandler(u32 operation, struct menuitem *item, union h
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = numunlockedchrbios + numunlockedmiscbios;
data->custom.value = numunlockedchrbios + numunlockedmiscbios;
break;
case MENUOP_GETOPTIONTEXT:
if ((u32)data->words[0] < numunlockedchrbios) {
chrbio = ciGetChrBioByBodynum(ciGetChrBioIndexBySlot((u32)data->words[0]));
if (data->custom.value < numunlockedchrbios) {
chrbio = ciGetChrBioByBodynum(ciGetChrBioIndexBySlot(data->custom.value));
return (s32) langGet(chrbio->name);
} else {
miscbio = ciGetMiscBio(ciGetMiscBioIndexBySlot((u32)data->words[0] - numunlockedchrbios));
miscbio = ciGetMiscBio(ciGetMiscBioIndexBySlot(data->custom.value - numunlockedchrbios));
return (s32) langGet(miscbio->name);
}
break;
case MENUOP_SET:
var800888a0 = data->word;
var800888a0 = data->custom.value;
if (var800888a0 < numunlockedchrbios) {
menuPushDialog(&menudialog_characterprofile);
} else {
@@ -2678,15 +2678,15 @@ s32 ciOfficeInformationMenuHandler(u32 operation, struct menuitem *item, union h
}
break;
case MENUOP_GETOPTIONVALUE:
data->word = var800888a0;
data->custom.value = var800888a0;
break;
case MENUOP_GETOPTGROUPCOUNT:
data->word = 2;
data->custom.value = 2;
break;
case MENUOP_GETOPTGROUPTEXT:
return (s32) langGet(groups[data->word].name);
return (s32) langGet(groups[data->custom.value].name);
case MENUOP_GETGROUPSTARTINDEX:
data->words[2] = data->word == 0 ? 0 : numunlockedchrbios;
data->custom.groupstartindex = data->custom.value == 0 ? 0 : numunlockedchrbios;
break;
}
@@ -2988,24 +2988,24 @@ s32 dtDeviceListMenuHandler(u32 operation, struct menuitem *item, union handlerd
{
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = dtGetNumAvailable();
data->custom.value = dtGetNumAvailable();
break;
case MENUOP_GETOPTIONTEXT:
return (s32) weaponGetName(dtGetWeaponByDeviceIndex(dtGetIndexBySlot(data->word)));
return (s32) weaponGetName(dtGetWeaponByDeviceIndex(dtGetIndexBySlot(data->custom.value)));
case MENUOP_SET:
g_DtSlot = data->word;
g_DtSlot = data->custom.value;
menuPushDialog(&g_DeviceTrainingDetailsMenuDialog);
break;
case MENUOP_GETOPTIONVALUE:
data->word = g_DtSlot;
data->custom.value = g_DtSlot;
break;
case MENUOP_GETOPTGROUPCOUNT:
data->word = 0;
data->custom.value = 0;
break;
case MENUOP_GETOPTGROUPTEXT:
return 0;
case MENUOP_GETGROUPSTARTINDEX:
data->words[2] = 0;
data->custom.groupstartindex = 0;
break;
}
@@ -3266,24 +3266,24 @@ s32 htHoloListMenuHandler(u32 operation, struct menuitem *item, union handlerdat
{
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = htGetNumUnlocked();
data->custom.value = htGetNumUnlocked();
break;
case MENUOP_GETOPTIONTEXT:
return (s32) htGetName(htGetIndexBySlot(data->word));
return (s32) htGetName(htGetIndexBySlot(data->custom.value));
case MENUOP_SET:
var80088bb4 = data->word;
var80088bb4 = data->custom.value;
menuPushDialog(&g_HoloTrainingDetailsMenuDialog);
break;
case MENUOP_GETOPTIONVALUE:
data->word = var80088bb4;
data->custom.value = var80088bb4;
break;
case MENUOP_GETOPTGROUPCOUNT:
data->word = 0;
data->custom.value = 0;
break;
case MENUOP_GETOPTGROUPTEXT:
return 0;
case MENUOP_GETGROUPSTARTINDEX:
data->words[2] = 0;
data->custom.groupstartindex = 0;
break;
}
@@ -3635,13 +3635,13 @@ s32 ciHangarInformationMenuHandler(u32 operation, struct menuitem *item, union h
switch (operation) {
case MENUOP_GETOPTIONCOUNT:
data->word = ciGetNumUnlockedHangarBios();
data->custom.value = ciGetNumUnlockedHangarBios();
break;
case MENUOP_GETOPTIONTEXT:
bio = ciGetHangarBio(ciGetHangarBioIndexBySlot(data->word));
bio = ciGetHangarBio(ciGetHangarBioIndexBySlot(data->custom.value));
return (s32) langGet(bio->name);
case MENUOP_SET:
g_HangarBioSlot = data->word;
g_HangarBioSlot = data->custom.value;
bioindex = ciGetHangarBioIndexBySlot(g_HangarBioSlot);
if (bioindex <= HANGARBIO_SKEDARRUINS) {
@@ -3651,15 +3651,15 @@ s32 ciHangarInformationMenuHandler(u32 operation, struct menuitem *item, union h
}
break;
case MENUOP_GETOPTIONVALUE:
data->word = g_HangarBioSlot;
data->custom.value = g_HangarBioSlot;
break;
case MENUOP_GETOPTGROUPCOUNT:
data->word = 2;
data->custom.value = 2;
break;
case MENUOP_GETOPTGROUPTEXT:
return (s32) langGet(groups[data->word].name);
return (s32) langGet(groups[data->custom.value].name);
case MENUOP_GETGROUPSTARTINDEX:
data->words[2] = data->words[0] == 0 ? 0 : groups[1].offset;
data->custom.groupstartindex = data->custom.value == 0 ? 0 : groups[1].offset;
break;
}
+1 -1
View File
@@ -5081,7 +5081,7 @@ bool mpSetLock(s32 locktype, s32 playernum)
return true;
}
u32 mpGetLockType(void)
s32 mpGetLockType(void)
{
return g_MpSetupSaveFile.locktype;
}
+1 -1
View File
@@ -1086,7 +1086,7 @@
#define MENUOP_GETSLIDER 9
#define MENUOP_GETSLIDERLABEL 10
#define MENUOP_CHECKDISABLED 12
#define MENUOP_13 13
#define MENUOP_FOCUS 13
#define MENUOP_CHECKPREFOCUSED 15
#define MENUOP_16 16
#define MENUOP_GETTEXT 17
+1 -1
View File
@@ -32,7 +32,7 @@ u32 func0f0f2928(void);
u32 func0f0f29cc(void);
u32 func0f0f2b2c(void);
u32 func0f0f2c44(void);
void func0f0f2cf4(struct menudialog *dialog, struct menuframe *arg1, struct menu *menu);
void menuOpenDialog(struct menudialog *dialog, struct menuframe *arg1, struct menu *menu);
void menuPushDialog(struct menudialog *dialog);
u32 func0f0f3220(s32 arg0);
u32 func0f0f33bc(void);
+1 -1
View File
@@ -58,7 +58,7 @@ u8 mpGetBodyUnk06(u8 bodynum);
s32 mpBodyGetMpHeadIndex(s32 bodynum);
u32 mpChooseRandomLockPlayer(void);
bool mpSetLock(s32 locktype, s32 playernum);
u32 mpGetLockType(void);
s32 mpGetLockType(void);
u32 mpGetLockPlayerNum(void);
bool mpIsPlayerLockedOut(u32 playernum);
void mpCalculateLockIfLastWinnerOrLoser(void);
+53 -9
View File
@@ -3245,10 +3245,59 @@ struct hoverprop {
u16 size;
};
struct handlerdata_carousel {
s32 value;
u32 unk04;
};
struct handlerdata_checkbox {
u32 value;
};
struct handlerdata_custom {
u32 value;
u32 unk04;
u32 groupstartindex;
u32 padding; // just extra padding to make the union 16 bytes
};
struct handlerdata_dropdown {
u32 value;
};
struct handlerdata_keyboard {
char *string;
};
struct handlerdata_label {
u32 colour1;
u32 colour2;
};
struct handlerdata_slider {
u32 value;
char *label;
};
struct handlerdata_dialog1 {
u32 value;
};
struct handlerdata_dialog2 {
void *ptr;
};
union handlerdata {
s32 words[4];
s32 word;
void *ptrs[4];
struct handlerdata_carousel carousel;
struct handlerdata_checkbox checkbox;
struct handlerdata_custom custom;
struct handlerdata_dropdown dropdown;
struct handlerdata_keyboard keyboard;
struct handlerdata_label label;
struct handlerdata_slider slider;
struct handlerdata_dialog1 dialog1;
struct handlerdata_dialog2 dialog2;
};
struct menuitem {
@@ -3257,12 +3306,7 @@ struct menuitem {
u32 param1;
u32 param2;
u32 param3;
union {
void *handler;
//struct menudialog *dialog;
//s32 (*handler)(u32 operation, struct menuitem *item, union handlerdata *data);
} ptr;
void *handler;
};
struct menudialog {