From 57969249a3c923b9daaa22c3c7a7361f50832b95 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 7 Oct 2020 18:38:47 +1000 Subject: [PATCH] Attempt to decompile menuRenderOverlayDropdown --- src/game/game_0e5ce0.c | 197 ++++++++++++++++++++++++--------- src/game/game_0f09f0.c | 6 +- src/include/constants.h | 2 +- src/include/game/game_0e5ce0.h | 10 +- src/include/types.h | 6 +- 5 files changed, 157 insertions(+), 64 deletions(-) diff --git a/src/game/game_0e5ce0.c b/src/game/game_0e5ce0.c index a4956adbc..73b95720e 100644 --- a/src/game/game_0e5ce0.c +++ b/src/game/game_0e5ce0.c @@ -38,7 +38,7 @@ s32 g_ScissorY1 = 0x00000000; s32 g_ScissorY2 = 0x00000000; s32 var800711a0 = 0; s32 var800711a4 = 0; -u32 var800711a8 = 0x0000000b; +u32 g_LineHeight = 11; u8 g_KeyboardKeys[5][10] = { { '0','1','2','3','4','5','6','7','8','9' }, @@ -93,8 +93,8 @@ glabel func0f0e5d2c /* f0e5d8c: 8fa70060 */ lw $a3,0x60($sp) /* f0e5d90: 54c00011 */ bnezl $a2,.L0f0e5dd8 /* f0e5d94: 00c0a025 */ or $s4,$a2,$zero -/* f0e5d98: 3c0f8007 */ lui $t7,%hi(var800711a8) -/* f0e5d9c: 8def11a8 */ lw $t7,%lo(var800711a8)($t7) +/* f0e5d98: 3c0f8007 */ lui $t7,%hi(g_LineHeight) +/* f0e5d9c: 8def11a8 */ lw $t7,%lo(g_LineHeight)($t7) /* f0e5da0: 00ef001a */ div $zero,$a3,$t7 /* f0e5da4: 00008812 */ mflo $s1 /* f0e5da8: 15e00002 */ bnez $t7,.L0f0e5db4 @@ -120,15 +120,15 @@ glabel func0f0e5d2c /* f0e5dec: 00d4082a */ slt $at,$a2,$s4 .L0f0e5df0: /* f0e5df0: 10200018 */ beqz $at,.L0f0e5e54 -/* f0e5df4: 3c038007 */ lui $v1,%hi(var800711a8) +/* f0e5df4: 3c038007 */ lui $v1,%hi(g_LineHeight) /* f0e5df8: afa60050 */ sw $a2,0x50($sp) /* f0e5dfc: 8e790010 */ lw $t9,0x10($s3) /* f0e5e00: 02a03025 */ or $a2,$s5,$zero /* f0e5e04: 24040005 */ addiu $a0,$zero,0x5 /* f0e5e08: 0320f809 */ jalr $t9 /* f0e5e0c: 02602825 */ or $a1,$s3,$zero -/* f0e5e10: 3c038007 */ lui $v1,%hi(var800711a8) -/* f0e5e14: 8c6311a8 */ lw $v1,%lo(var800711a8)($v1) +/* f0e5e10: 3c038007 */ lui $v1,%hi(g_LineHeight) +/* f0e5e14: 8c6311a8 */ lw $v1,%lo(g_LineHeight)($v1) /* f0e5e18: 8fa40058 */ lw $a0,0x58($sp) /* f0e5e1c: 8fa60050 */ lw $a2,0x50($sp) /* f0e5e20: 0203001a */ div $zero,$s0,$v1 @@ -147,7 +147,7 @@ glabel func0f0e5d2c /* f0e5e4c: 1000000f */ b .L0f0e5e8c /* f0e5e50: 00512821 */ addu $a1,$v0,$s1 .L0f0e5e54: -/* f0e5e54: 8c6311a8 */ lw $v1,%lo(var800711a8)($v1) +/* f0e5e54: 8c6311a8 */ lw $v1,%lo(g_LineHeight)($v1) /* f0e5e58: 2404270f */ addiu $a0,$zero,0x270f /* f0e5e5c: 0203001a */ div $zero,$s0,$v1 /* f0e5e60: 00001012 */ mflo $v0 @@ -233,8 +233,8 @@ glabel func0f0e5ef8 /* f0e5f6c: 00008825 */ or $s1,$zero,$zero /* f0e5f70: 14400008 */ bnez $v0,.L0f0e5f94 /* f0e5f74: 00409825 */ or $s3,$v0,$zero -/* f0e5f78: 3c188007 */ lui $t8,%hi(var800711a8) -/* f0e5f7c: 8f1811a8 */ lw $t8,%lo(var800711a8)($t8) +/* f0e5f78: 3c188007 */ lui $t8,%hi(g_LineHeight) +/* f0e5f7c: 8f1811a8 */ lw $t8,%lo(g_LineHeight)($t8) /* f0e5f80: 02980019 */ multu $s4,$t8 /* f0e5f84: 00001012 */ mflo $v0 /* f0e5f88: 00024400 */ sll $t0,$v0,0x10 @@ -265,8 +265,8 @@ glabel func0f0e5ef8 /* f0e5fe0: 1420ffef */ bnez $at,.L0f0e5fa0 /* f0e5fe4: afa20040 */ sw $v0,0x40($sp) .L0f0e5fe8: -/* f0e5fe8: 3c0b8007 */ lui $t3,%hi(var800711a8) -/* f0e5fec: 8d6b11a8 */ lw $t3,%lo(var800711a8)($t3) +/* f0e5fe8: 3c0b8007 */ lui $t3,%hi(g_LineHeight) +/* f0e5fec: 8d6b11a8 */ lw $t3,%lo(g_LineHeight)($t3) /* f0e5ff0: 00116880 */ sll $t5,$s1,0x2 /* f0e5ff4: 01b16823 */ subu $t5,$t5,$s1 /* f0e5ff8: 028b0019 */ multu $s4,$t3 @@ -450,7 +450,7 @@ glabel func0f0e6038 /* f0e6294: 27bd0050 */ addiu $sp,$sp,0x50 ); -Gfx *func0f0e6298(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2) +Gfx *menuRenderOverlayList(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2) { gDPFillRectangle(gdl++, x * g_ScreenWidthMultiplier, y, (x + x2) * g_ScreenWidthMultiplier, y + y2); return gdl; @@ -497,13 +497,13 @@ glabel menuRenderItemList /* f0e63b8: 0320f809 */ jalr $t9 /* f0e63bc: 27a600d4 */ addiu $a2,$sp,0xd4 /* f0e63c0: 8fae00d4 */ lw $t6,0xd4($sp) -/* f0e63c4: 3c018007 */ lui $at,%hi(var800711a8) +/* f0e63c4: 3c018007 */ lui $at,%hi(g_LineHeight) /* f0e63c8: 10000004 */ b .L0f0e63dc -/* f0e63cc: ac2e11a8 */ sw $t6,%lo(var800711a8)($at) +/* f0e63cc: ac2e11a8 */ sw $t6,%lo(g_LineHeight)($at) /* f0e63d0: 240f000b */ addiu $t7,$zero,0xb .L0f0e63d4: -/* f0e63d4: 3c018007 */ lui $at,%hi(var800711a8) -/* f0e63d8: ac2f11a8 */ sw $t7,%lo(var800711a8)($at) +/* f0e63d4: 3c018007 */ lui $at,%hi(g_LineHeight) +/* f0e63d8: ac2f11a8 */ sw $t7,%lo(g_LineHeight)($at) .L0f0e63dc: /* f0e63dc: 8e2a0008 */ lw $t2,0x8($s1) /* f0e63e0: 8e380010 */ lw $t8,0x10($s1) @@ -625,7 +625,7 @@ glabel menuRenderItemList /* f0e6584: 3c01ed00 */ lui $at,0xed00 /* f0e6588: 46003202 */ mul.s $f8,$f6,$f0 /* f0e658c: 02402025 */ or $a0,$s2,$zero -/* f0e6590: 3c058007 */ lui $a1,%hi(var800711a8) +/* f0e6590: 3c058007 */ lui $a1,%hi(g_LineHeight) /* f0e6594: 26520008 */ addiu $s2,$s2,0x8 /* f0e6598: 46009102 */ mul.s $f4,$f18,$f0 /* f0e659c: 4600428d */ trunc.w.s $f10,$f8 @@ -657,7 +657,7 @@ glabel menuRenderItemList /* f0e6604: 018e7825 */ or $t7,$t4,$t6 /* f0e6608: ac8f0004 */ sw $t7,0x4($a0) /* f0e660c: 86220006 */ lh $v0,0x6($s1) -/* f0e6610: 8ca511a8 */ lw $a1,%lo(var800711a8)($a1) +/* f0e6610: 8ca511a8 */ lw $a1,%lo(g_LineHeight)($a1) /* f0e6614: 8fb8016c */ lw $t8,0x16c($sp) /* f0e6618: 04410003 */ bgez $v0,.L0f0e6628 /* f0e661c: 0002b043 */ sra $s6,$v0,0x1 @@ -893,8 +893,8 @@ glabel menuRenderItemList /* f0e6988: 00e02825 */ or $a1,$a3,$zero /* f0e698c: 0320f809 */ jalr $t9 /* f0e6990: 00000000 */ nop -/* f0e6994: 3c0b8007 */ lui $t3,%hi(var800711a8) -/* f0e6998: 8d6b11a8 */ lw $t3,%lo(var800711a8)($t3) +/* f0e6994: 3c0b8007 */ lui $t3,%hi(g_LineHeight) +/* f0e6998: 8d6b11a8 */ lw $t3,%lo(g_LineHeight)($t3) /* f0e699c: 87ad00ee */ lh $t5,0xee($sp) /* f0e69a0: 240c000b */ addiu $t4,$zero,0xb /* f0e69a4: 028b5021 */ addu $t2,$s4,$t3 @@ -1204,10 +1204,10 @@ glabel menuRenderItemList /* f0e6e0c: afb3015c */ sw $s3,0x15c($sp) /* f0e6e10: 86240000 */ lh $a0,0x0($s1) /* f0e6e14: 8fb9016c */ lw $t9,0x16c($sp) -/* f0e6e18: 3c0d8007 */ lui $t5,%hi(var800711a8) +/* f0e6e18: 3c0d8007 */ lui $t5,%hi(g_LineHeight) /* f0e6e1c: afa40098 */ sw $a0,0x98($sp) /* f0e6e20: 862a0002 */ lh $t2,0x2($s1) -/* f0e6e24: 8dad11a8 */ lw $t5,%lo(var800711a8)($t5) +/* f0e6e24: 8dad11a8 */ lw $t5,%lo(g_LineHeight)($t5) /* f0e6e28: 8fb80098 */ lw $t8,0x98($sp) /* f0e6e2c: 01542821 */ addu $a1,$t2,$s4 /* f0e6e30: afa5009c */ sw $a1,0x9c($sp) @@ -1604,8 +1604,8 @@ glabel menuRenderItemList /* f0e73cc: 00002025 */ or $a0,$zero,$zero /* f0e73d0: 8fb80108 */ lw $t8,0x108($sp) .L0f0e73d4: -/* f0e73d4: 3c0d8007 */ lui $t5,%hi(var800711a8) -/* f0e73d8: 8dad11a8 */ lw $t5,%lo(var800711a8)($t5) +/* f0e73d4: 3c0d8007 */ lui $t5,%hi(g_LineHeight) +/* f0e73d8: 8dad11a8 */ lw $t5,%lo(g_LineHeight)($t5) /* f0e73dc: 26730001 */ addiu $s3,$s3,0x1 /* f0e73e0: 0278082a */ slt $at,$s3,$t8 /* f0e73e4: 14200003 */ bnez $at,.L0f0e73f4 @@ -1748,16 +1748,16 @@ bool menuTickItemList(struct menuitem *item, struct menuinputs *inputs, u32 arg2 } if (item->param1 & 0x00200000) { - item->handler(MENUOP_20, item, &handlerdata2); - var800711a8 = handlerdata2.list.value; + item->handler(MENUOP_GETOPTIONHEIGHT, item, &handlerdata2); + g_LineHeight = handlerdata2.list.value; } else { - var800711a8 = 11; + g_LineHeight = 11; } if (item->type == MENUITEMTYPE_DROPDOWN || item->type == MENUITEMTYPE_PLAYERSTATS) { min = data->list.unk06 / 2; - min = min / (s32)var800711a8; - min *= (s32)var800711a8; + min = min / (s32)g_LineHeight; + min *= (s32)g_LineHeight; data->list.unk04 = func0f0e5ef8(data->list.unk02, item); @@ -1767,7 +1767,7 @@ bool menuTickItemList(struct menuitem *item, struct menuinputs *inputs, u32 arg2 item->handler(MENUOP_GETOPTIONCOUNT, item, &handlerdata); - max = handlerdata.list2.unk02 * (s32)var800711a8 - data->list.unk06 + min; + max = handlerdata.list2.unk02 * (s32)g_LineHeight - data->list.unk06 + min; if (data->list.unk04 > max) { data->list.unk04 = max; @@ -1879,10 +1879,10 @@ void menuInitItemDropdown(struct menuitem *item, union menuitemdata *data) handler = item->handler; if (item->param1 & 0x00200000) { - handler(MENUOP_20, item, &handlerdata2); - var800711a8 = handlerdata2.dropdown.value; + handler(MENUOP_GETOPTIONHEIGHT, item, &handlerdata2); + g_LineHeight = handlerdata2.dropdown.value; } else { - var800711a8 = 11; + g_LineHeight = 11; } item->handler(MENUOP_GETOPTIONVALUE, item, &handlerdata); @@ -2393,7 +2393,7 @@ bool menuTickItemDropdown(struct menuitem *item, struct menuframe *frame, struct handlerdata.dropdown.value = 0; item->handler(MENUOP_GETOPTIONVALUE, item, &handlerdata); - data->dropdown.unk0e = handlerdata.dropdown.value * var800711a8; + data->dropdown.unk0e = handlerdata.dropdown.value * g_LineHeight; menuPlaySound(MENUSOUND_TOGGLEOFF); } } @@ -2403,7 +2403,7 @@ bool menuTickItemDropdown(struct menuitem *item, struct menuframe *frame, struct } GLOBAL_ASM( -glabel func0f0e8290 +glabel menuRenderOverlayDropdown /* f0e8290: 27bdff60 */ addiu $sp,$sp,-160 /* f0e8294: afb0001c */ sw $s0,0x1c($sp) /* f0e8298: 8fb000b8 */ lw $s0,0xb8($sp) @@ -2470,7 +2470,7 @@ glabel func0f0e8290 /* f0e837c: 8fbf003c */ lw $ra,0x3c($sp) /* f0e8380: 8e2d0004 */ lw $t5,0x4($s1) /* f0e8384: 2418000b */ addiu $t8,$zero,0xb -/* f0e8388: 3c018007 */ lui $at,%hi(var800711a8) +/* f0e8388: 3c018007 */ lui $at,%hi(g_LineHeight) /* f0e838c: 000d7280 */ sll $t6,$t5,0xa /* f0e8390: 05c10009 */ bgez $t6,.L0f0e83b8 /* f0e8394: 24040014 */ addiu $a0,$zero,0x14 @@ -2479,11 +2479,11 @@ glabel func0f0e8290 /* f0e83a0: 0040f809 */ jalr $v0 /* f0e83a4: a7b200a6 */ sh $s2,0xa6($sp) /* f0e83a8: 8faf004c */ lw $t7,0x4c($sp) -/* f0e83ac: 3c018007 */ lui $at,%hi(var800711a8) +/* f0e83ac: 3c018007 */ lui $at,%hi(g_LineHeight) /* f0e83b0: 10000003 */ b .L0f0e83c0 -/* f0e83b4: ac2f11a8 */ sw $t7,%lo(var800711a8)($at) +/* f0e83b4: ac2f11a8 */ sw $t7,%lo(g_LineHeight)($at) .L0f0e83b8: -/* f0e83b8: ac3811a8 */ sw $t8,%lo(var800711a8)($at) +/* f0e83b8: ac3811a8 */ sw $t8,%lo(g_LineHeight)($at) /* f0e83bc: a7b200a6 */ sh $s2,0xa6($sp) .L0f0e83c0: /* f0e83c0: 8e390010 */ lw $t9,0x10($s1) @@ -2493,9 +2493,9 @@ glabel func0f0e8290 /* f0e83d0: 24040001 */ addiu $a0,$zero,0x1 /* f0e83d4: 0320f809 */ jalr $t9 /* f0e83d8: 02202825 */ or $a1,$s1,$zero -/* f0e83dc: 3c088007 */ lui $t0,%hi(var800711a8) +/* f0e83dc: 3c088007 */ lui $t0,%hi(g_LineHeight) /* f0e83e0: 8fb6005c */ lw $s6,0x5c($sp) -/* f0e83e4: 8d0811a8 */ lw $t0,%lo(var800711a8)($t0) +/* f0e83e4: 8d0811a8 */ lw $t0,%lo(g_LineHeight)($t0) /* f0e83e8: a7a00070 */ sh $zero,0x70($sp) /* f0e83ec: 00008025 */ or $s0,$zero,$zero /* f0e83f0: 01160019 */ multu $t0,$s6 @@ -2559,8 +2559,8 @@ glabel func0f0e8290 /* f0e84c8: 10200014 */ beqz $at,.L0f0e851c /* f0e84cc: 006a082a */ slt $at,$v1,$t2 /* f0e84d0: 1020000e */ beqz $at,.L0f0e850c -/* f0e84d4: 3c028007 */ lui $v0,%hi(var800711a8) -/* f0e84d8: 8c4211a8 */ lw $v0,%lo(var800711a8)($v0) +/* f0e84d4: 3c028007 */ lui $v0,%hi(g_LineHeight) +/* f0e84d8: 8c4211a8 */ lw $v0,%lo(g_LineHeight)($v0) /* f0e84dc: 00608025 */ or $s0,$v1,$zero /* f0e84e0: 0062001b */ divu $zero,$v1,$v0 /* f0e84e4: 00008012 */ mflo $s0 @@ -2599,6 +2599,99 @@ glabel func0f0e8290 /* f0e8558: 27bd00a0 */ addiu $sp,$sp,0xa0 ); +// Mismatch due to register initialisation order near 380. +// 0x14 (MENUOP_GETOPTIONHEIGHT) is loaded into a0 earlier than it should be. +//Gfx *menuRenderOverlayDropdown(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, struct menuframe *frame, union menuitemdata *data) +//{ +// s32 stack; +// s32 textwidth; // 98 +// s32 textheight; // 94 +// s32 numoptions; +// s32 i; +// char *text; +// s32 stack2; +// struct menurendercontext context; // 6c +// +// // 2e0 +// if (frame->unk6e) { +// context.x = x + 78; +// } else if (x2 < 0) { +// context.x = x + 2; +// } else { +// context.x = x + x2 - 62; +// } +// +// // 334 +// if (item->param1 & 0x00000080) { +// context.x = x + 30; +// } +// +// // 340 +// context.y = y + 1; +// context.width = 56; +// context.item = item; +// context.focused = true; +// context.frame = frame; +// context.data = data; +// +// // 360 +// if (frame->dimmed && item->handler && frame->focuseditem == item) { +// // 380 +// union handlerdata handlerdata; // 5c +// +// if (item->param1 & 0x00200000) { +// union handlerdata handlerdata2; // 4c +// item->handler(MENUOP_GETOPTIONHEIGHT, item, &handlerdata2); +// g_LineHeight = handlerdata2.dropdown.value; +// } else { +// g_LineHeight = 11; +// } +// +// // 3c0 +// item->handler(MENUOP_GETOPTIONCOUNT, item, &handlerdata); +// numoptions = handlerdata.dropdown.value; +// +// context.width = 0; +// context.height = (s32)g_LineHeight * numoptions; +// +// for (i = 0; i != numoptions; i++) { +// // 420 +// handlerdata.dropdown.value = i; +// text = (char *)item->handler(MENUOP_GETOPTIONTEXT, item, &handlerdata); +// textMeasure(&textheight, &textwidth, text, var8007fb10, var8007fb0c, 0); +// textwidth += 6; +// +// if (textwidth > context.width) { +// context.width = textwidth; +// } +// } +// +// // 480 +// if (x2 > 0) { +// context.x = x + x2 - context.width - 7; +// } +// +// // 4a4 +// if (context.y + context.height > frame->y + frame->height + 2) { +// // 4d0 +// if (context.height > frame->height) { +// i = frame->height; +// i = i / g_LineHeight; +// i = i * g_LineHeight; +// context.height = i; +// } +// +// // 50c +// context.y = frame->y + frame->height - context.height + 2; +// } +// +// // 51c +// gdl = menuRenderItemList(gdl, &context); +// } +// +// return gdl; +//} + bool menuIsStringEmptyOrSpaces(char *text) { s32 i; @@ -6199,7 +6292,7 @@ bool menuTickItemScrollable(struct menuitem *item, struct menuframe *frame, stru { u32 stack; - if ((s16)frame->unk20 != data->scrollable.unk06) { + if ((s16)frame->height != data->scrollable.unk06) { char wrapped[8000] = ""; char *rawtext; s32 width; @@ -6234,7 +6327,7 @@ bool menuTickItemScrollable(struct menuitem *item, struct menuframe *frame, stru data->scrollable.unk04 = -10; } - data->scrollable.unk06 = frame->unk20; + data->scrollable.unk06 = frame->height; } if (menuIsScrollableUnscrollable(item)) { @@ -7393,9 +7486,9 @@ bool menuTickItemPlayerStats(struct menuitem *item, struct menuframe *frame, str menuTickItemDropdown(item, frame, inputs, arg3, data); } -Gfx *func0f0ef2fc(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, u32 arg6, u32 arg7) +Gfx *menuRenderOverlayPlayerStats(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, struct menuframe *frame, union menuitemdata *data) { - return func0f0e8290(gdl, x + 1, y, -1, y2, item, arg6, arg7); + return menuRenderOverlayDropdown(gdl, x + 1, y, -1, y2, item, frame, data); } void menuInitItemPlayerStats(struct menuitem *item, union menuitemdata *data) @@ -8013,7 +8106,7 @@ void menuInitItemController(union menuitemdata *data) Gfx *menuRenderItem(Gfx *gdl, struct menurendercontext *context) { switch (context->item->type) { - case MENUITEMTYPE_LIST: return menuRenderItemList(gdl); + case MENUITEMTYPE_LIST: return menuRenderItemList(gdl, context); case MENUITEMTYPE_SELECTABLE: return menuRenderItemSelectable(gdl, context); case MENUITEMTYPE_SLIDER: return menuRenderItemSlider(gdl); case MENUITEMTYPE_CHECKBOX: return menuRenderItemCheckbox(gdl, context); @@ -8089,12 +8182,12 @@ void menuInitItem(struct menuitem *item, union menuitemdata *data) } } -Gfx *func0f0f0918(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, u32 arg6, u32 arg7) +Gfx *menuRenderOverlay(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, struct menuframe *frame, union menuitemdata *data) { switch (item->type) { - case MENUITEMTYPE_LIST: return func0f0e6298(gdl, x, y, x2, y2); - case MENUITEMTYPE_DROPDOWN: return func0f0e8290(gdl, x, y, x2, y2, item, arg6, arg7); - case MENUITEMTYPE_PLAYERSTATS: return func0f0ef2fc(gdl, x, y, x2, y2, item, arg6, arg7); + case MENUITEMTYPE_LIST: return menuRenderOverlayList(gdl, x, y, x2, y2); + case MENUITEMTYPE_DROPDOWN: return menuRenderOverlayDropdown(gdl, x, y, x2, y2, item, frame, data); + case MENUITEMTYPE_PLAYERSTATS: return menuRenderOverlayPlayerStats(gdl, x, y, x2, y2, item, frame, data); } return gdl; diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index 2de135dd4..c89a7c8fb 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -2502,9 +2502,9 @@ void menuOpenDialog(struct menudialog *dialog, struct menuframe *frame, struct m func0f0f7e98(frame); frame->unk14 = frame->unk2c; - frame->unk18 = frame->unk30; + frame->y = frame->unk30; frame->unk1c = frame->unk34; - frame->unk20 = frame->unk38; + frame->height = frame->unk38; } GLOBAL_ASM( @@ -6736,7 +6736,7 @@ glabel func0f0f5360 /* f0f6d74: afa90014 */ sw $t1,0x14($sp) /* f0f6d78: 8fa401e8 */ lw $a0,0x1e8($sp) /* f0f6d7c: afaf0018 */ sw $t7,0x18($sp) -/* f0f6d80: 0fc3c246 */ jal func0f0f0918 +/* f0f6d80: 0fc3c246 */ jal menuRenderOverlay /* f0f6d84: afad0010 */ sw $t5,0x10($sp) /* f0f6d88: 8fac01c0 */ lw $t4,0x1c0($sp) /* f0f6d8c: 8fae007c */ lw $t6,0x7c($sp) diff --git a/src/include/constants.h b/src/include/constants.h index bbd524844..9bc2204ba 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1098,7 +1098,7 @@ #define MENUOP_GETTEXT 17 #define MENUOP_SETTEXT 18 #define MENUOP_19 19 -#define MENUOP_20 20 +#define MENUOP_GETOPTIONHEIGHT 20 #define MENUOP_21 21 #define MENUOP_GETCOLOUR 22 #define MENUOP_CHECKHIDDEN 24 diff --git a/src/include/game/game_0e5ce0.h b/src/include/game/game_0e5ce0.h index 45581992e..359d70deb 100644 --- a/src/include/game/game_0e5ce0.h +++ b/src/include/game/game_0e5ce0.h @@ -6,15 +6,15 @@ u32 func0f0e5d2c(void); s32 func0f0e5ef8(s16 arg0, struct menuitem *item); u32 func0f0e6038(void); -Gfx *func0f0e6298(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2); -Gfx *menuRenderItemList(Gfx *gdl); +Gfx *menuRenderOverlayList(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2); +Gfx *menuRenderItemList(Gfx *gdl, struct menurendercontext *context); bool menuTickItemList(struct menuitem *item, struct menuinputs *inputs, u32 arg2, union menuitemdata *data); void menuInitItemDropdown(struct menuitem *item, union menuitemdata *data); Gfx *menuRenderItemDropdown(Gfx *gdl); bool menuTickItemDropdown(struct menuitem *item, struct menuframe *frame, struct menuinputs *inputs, u32 arg3, union menuitemdata *data); -Gfx *func0f0e8290(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, u32 arg6, u32 arg7); +Gfx *menuRenderOverlayDropdown(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, struct menuframe *frame, union menuitemdata *data); bool menuIsStringEmptyOrSpaces(char *text); Gfx *menuRenderItemKeyboard(Gfx *gdl, struct menurendercontext *thing); bool menuTickItemKeyboard(struct menuitem *item, struct menuinputs *inputs, u32 arg2, union menuitemdata *data); @@ -61,7 +61,7 @@ void menuInitItemRanking(union menuitemdata *data); Gfx *menuRenderItemPlayerStats(Gfx *gdl, struct menurendercontext *context); bool menuTickItemPlayerStats(struct menuitem *item, struct menuframe *frame, struct menuinputs *inputs, u32 arg3, union menuitemdata *data); -Gfx *func0f0ef2fc(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, u32 arg6, u32 arg7); +Gfx *menuRenderOverlayPlayerStats(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, struct menuframe *frame, union menuitemdata *data); void menuInitItemPlayerStats(struct menuitem *item, union menuitemdata *data); u32 func0f0ef394(void); @@ -76,6 +76,6 @@ void menuInitItemController(union menuitemdata *data); Gfx *menuRenderItem(Gfx *gdl, struct menurendercontext *context); bool menuTickItem(struct menuitem *item, struct menuframe *frame, struct menuinputs *inputs, u32 arg3, union menuitemdata *data); void menuInitItem(struct menuitem *item, union menuitemdata *data); -Gfx *func0f0f0918(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, u32 arg6, u32 arg7); +Gfx *menuRenderOverlay(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2, struct menuitem *item, struct menuframe *frame, union menuitemdata *data); #endif diff --git a/src/include/types.h b/src/include/types.h index 8632ea1f6..54ae85167 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -3613,9 +3613,9 @@ struct menuframe { /*0x0c*/ bool dimmed; // when dropdown is open or slider is active /*0x10*/ u32 unk10; /*0x14*/ s32 unk14; - /*0x18*/ u32 unk18; + /*0x18*/ s32 y; /*0x1c*/ s32 unk1c; - /*0x20*/ s32 unk20; + /*0x20*/ s32 height; /*0x24*/ u32 unk24; /*0x28*/ u32 unk28; /*0x2c*/ s32 unk2c; @@ -3637,7 +3637,7 @@ struct menuframe { /*0x68*/ u32 unk68; /*0x6c*/ u8 unk6c; /*0x6d*/ s8 unk6d; - /*0x6e*/ s8 unk6e; + /*0x6e*/ u8 unk6e; }; struct menudfc {