From ded31ee11b7c6f4aed68bca2a53a4372ea713492 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 19 May 2021 20:48:11 -0400 Subject: Decomp ListMenuInit --- arm9/src/list_menu.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 arm9/src/list_menu.c (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c new file mode 100644 index 00000000..98136562 --- /dev/null +++ b/arm9/src/list_menu.c @@ -0,0 +1,49 @@ +#pragma thumb on + +#include "global.h" +#include "heap.h" +#include "list_menu.h" + +extern void * FUN_02013690(u32 heap_id); +extern void FUN_020136E0(void *, u32); +extern void FUN_02019620(struct Window *, u32); +void FUN_02001714(struct ListMenu *, u16, u16, u16); +void FUN_020017AC(struct ListMenu *); +void FUN_02001B64(struct ListMenu *, BOOL); +extern void CopyWindowToVram(struct Window *); + +struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) +{ + struct ListMenu * list = AllocFromHeap(heap_id, sizeof(struct ListMenu)); + list->template = *template; + list->unk_28 = FUN_02013690(heap_id); + list->cursorPos = cursorPos; + list->itemsAbove = itemsAbove; + list->unk_30 = 0; + list->unk_31 = 0; + list->taskId = 0xFF; + list->unk_33 = 0; + list->heap_id = (u8)heap_id; + list->cursorPal = list->template.cursorPal; + list->fillValue = list->template.fillValue; + list->cursorShadowPal = list->template.cursorShadowPal; + list->lettersSpacing = list->template.lettersSpacing; + list->fontId = list->template.fontId; + list->enabled = 0; + if (list->template.totalItems < list->template.maxShowed) + list->template.maxShowed = list->template.totalItems; + FUN_020136E0( + list->unk_28, + (u32)( + ((u32)(list->template.cursorPal << 24) >> 8) + | ((u32)(list->template.cursorShadowPal << 24) >> 16) + | ((u32)(list->template.fillValue << 24) >> 24) + ) + ); + FUN_02019620(list->template.window, list->template.fillValue); + FUN_02001714(list, list->cursorPos, 0, list->template.maxShowed); + FUN_020017AC(list); + FUN_02001B64(list, 1); + CopyWindowToVram(template->window); + return list; +} -- cgit v1.2.3 From 8e300b8f7f14f2ef2a1479a27f0e5aed1aa36d40 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 19 May 2021 21:15:40 -0400 Subject: Decompile ListMenu_ProcessInput --- arm9/src/list_menu.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 8 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 98136562..a0069e32 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -2,14 +2,16 @@ #include "global.h" #include "heap.h" +#include "main.h" #include "list_menu.h" extern void * FUN_02013690(u32 heap_id); extern void FUN_020136E0(void *, u32); -extern void FUN_02019620(struct Window *, u32); -void FUN_02001714(struct ListMenu *, u16, u16, u16); -void FUN_020017AC(struct ListMenu *); -void FUN_02001B64(struct ListMenu *, BOOL); +extern void FillWindowPixelBuffer(struct Window *, u32); +void ListMenuPrintEntries(struct ListMenu *, u16, u16, u16); +void ListMenuDrawCursor(struct ListMenu *); +BOOL ListMenuChangeSelection(struct ListMenu *, s32, u8, s32); +void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) @@ -40,10 +42,68 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur | ((u32)(list->template.fillValue << 24) >> 24) ) ); - FUN_02019620(list->template.window, list->template.fillValue); - FUN_02001714(list, list->cursorPos, 0, list->template.maxShowed); - FUN_020017AC(list); - FUN_02001B64(list, 1); + FillWindowPixelBuffer(list->template.window, list->template.fillValue); + ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, TRUE); CopyWindowToVram(template->window); return list; } + +s32 ListMenu_ProcessInput(struct ListMenu * list) +{ + list->unk_33 = 0; + + if (gMain.newKeys & REG_PAD_KEYINPUT_A_MASK) { + return list->template.items[list->cursorPos + list->itemsAbove].index; + } + else if (gMain.newKeys & REG_PAD_KEYINPUT_B_MASK) { + return LIST_CANCEL; + } + else if (gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_UP_MASK) { + if (!ListMenuChangeSelection(list, TRUE, 1, FALSE)) + list->unk_33 = 1; + return LIST_NOTHING_CHOSEN; + } + else if (gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_DOWN_MASK) { + if (!ListMenuChangeSelection(list, TRUE, 1, TRUE)) + list->unk_33 = 2; + return LIST_NOTHING_CHOSEN; + } + else + { + u16 rightButton, leftButton; + switch (list->template.scrollMultiple) + { + case LIST_NO_MULTIPLE_SCROLL: + default: + leftButton = FALSE; + rightButton = FALSE; + break; + case LIST_MULTIPLE_SCROLL_DPAD: + leftButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_LEFT_MASK; + rightButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_RIGHT_MASK; + break; + case LIST_MULTIPLE_SCROLL_L_R: + leftButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_L_MASK; + rightButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_R_MASK; + break; + } + if (leftButton) + { + if (!ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE)) + list->unk_33 = 3; + return LIST_NOTHING_CHOSEN; + } + else if (rightButton) + { + if (!ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE)) + list->unk_33 = 4; + return LIST_NOTHING_CHOSEN; + } + else + { + return LIST_NOTHING_CHOSEN; + } + } +} -- cgit v1.2.3 From 84a6ed639c0887d084b0d9785f842dca9621b8e8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 19 May 2021 21:23:32 -0400 Subject: DestroyListMenu, RedrawListMenu --- arm9/src/list_menu.c | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index a0069e32..6d440ad1 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -1,12 +1,11 @@ -#pragma thumb on - #include "global.h" #include "heap.h" #include "main.h" #include "list_menu.h" extern void * FUN_02013690(u32 heap_id); -extern void FUN_020136E0(void *, u32); +extern void CreateListMenuCursorObj(void *, u32); +extern void DestroyListMenuCursorObj(void *); extern void FillWindowPixelBuffer(struct Window *, u32); void ListMenuPrintEntries(struct ListMenu *, u16, u16, u16); void ListMenuDrawCursor(struct ListMenu *); @@ -14,11 +13,11 @@ BOOL ListMenuChangeSelection(struct ListMenu *, s32, u8, s32); void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); -struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) +THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) { struct ListMenu * list = AllocFromHeap(heap_id, sizeof(struct ListMenu)); list->template = *template; - list->unk_28 = FUN_02013690(heap_id); + list->cursor = FUN_02013690(heap_id); list->cursorPos = cursorPos; list->itemsAbove = itemsAbove; list->unk_30 = 0; @@ -34,8 +33,8 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur list->enabled = 0; if (list->template.totalItems < list->template.maxShowed) list->template.maxShowed = list->template.totalItems; - FUN_020136E0( - list->unk_28, + CreateListMenuCursorObj( + list->cursor, (u32)( ((u32)(list->template.cursorPal << 24) >> 8) | ((u32)(list->template.cursorShadowPal << 24) >> 16) @@ -50,7 +49,7 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur return list; } -s32 ListMenu_ProcessInput(struct ListMenu * list) +THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list) { list->unk_33 = 0; @@ -107,3 +106,21 @@ s32 ListMenu_ProcessInput(struct ListMenu * list) } } } + +THUMB_FUNC void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove) +{ + if (cursorPos != NULL) + *cursorPos = list->cursorPos; + if (itemsAbove != NULL) + *itemsAbove = list->itemsAbove; + DestroyListMenuCursorObj(list->cursor); + FUN_02016A8C(list->heap_id, list); +} + +THUMB_FUNC void RedrawListMenu(struct ListMenu * list) +{ + FillWindowPixelBuffer(list->template.window, list->template.fillValue); + ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed); + ListMenuDrawCursor(list); + CopyWindowToVram(list->template.window); +} -- cgit v1.2.3 From 5c9213cb7fcfabdd3c85408f39a04314dd03e780 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 08:28:03 -0400 Subject: FUN_02001354 --- arm9/src/list_menu.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 6d440ad1..2700f30e 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -9,7 +9,7 @@ extern void DestroyListMenuCursorObj(void *); extern void FillWindowPixelBuffer(struct Window *, u32); void ListMenuPrintEntries(struct ListMenu *, u16, u16, u16); void ListMenuDrawCursor(struct ListMenu *); -BOOL ListMenuChangeSelection(struct ListMenu *, s32, u8, s32); +BOOL ListMenuChangeSelection(struct ListMenu *, u8, u8, s32); void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); @@ -124,3 +124,31 @@ THUMB_FUNC void RedrawListMenu(struct ListMenu * list) ListMenuDrawCursor(list); CopyWindowToVram(list->template.window); } + +THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 * sp18, u16 * sp1C) +{ + if (template != NULL) + list->template = *template; + list->cursorPos = cursorPos; + list->itemsAbove = itemsAbove; + list->unk_30 = 0; + list->unk_31 = 0; + + if (input == REG_PAD_KEYINPUT_UP_MASK) + { + ListMenuChangeSelection(list, updateFlag, 1, FALSE); + } + else if (input == REG_PAD_KEYINPUT_DOWN_MASK) + { + ListMenuChangeSelection(list, updateFlag, 1, TRUE); + } + if (sp18 != NULL) + { + *sp18 = list->cursorPos; + } + if (sp1C != NULL) + { + *sp1C = list->itemsAbove; + } + return -1; +} -- cgit v1.2.3 From 150597d495383f09a4ee733d24b3e770c57494eb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 08:38:11 -0400 Subject: through FUN_02001464 --- arm9/src/list_menu.c | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 2700f30e..1a46c4e2 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -125,7 +125,7 @@ THUMB_FUNC void RedrawListMenu(struct ListMenu * list) CopyWindowToVram(list->template.window); } -THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 * sp18, u16 * sp1C) +THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p) { if (template != NULL) list->template = *template; @@ -142,13 +142,49 @@ THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, struct ListMenuTemplate * te { ListMenuChangeSelection(list, updateFlag, 1, TRUE); } - if (sp18 != NULL) + if (cursorPosDest_p != NULL) { - *sp18 = list->cursorPos; + *cursorPosDest_p = list->cursorPos; } - if (sp1C != NULL) + if (itemsAboveDest_p != NULL) { - *sp1C = list->itemsAbove; + *itemsAboveDest_p = list->itemsAbove; } return -1; } + +s32 FUN_020013C8(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p) +{ + return FUN_02001354(list, template, cursorPos, itemsAbove, FALSE, input, cursorPosDest_p, itemsAboveDest_p); +} + +void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +{ + list->cursorPal = cursorPal; + list->fillValue = fillValue; + list->cursorShadowPal = cursorShadowPal; + list->enabled = TRUE; +} + +void FUN_0200143C(struct ListMenu * list, u16 * index_p) +{ + *index_p = list->cursorPos + list->itemsAbove; +} + +void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) +{ + if (cursorPos_p != NULL) + *cursorPos_p = list->cursorPos; + if (itemsAbove_p != NULL) + *itemsAbove_p = list->itemsAbove; +} + +u8 FUN_0200145C(struct ListMenu * list) +{ + return list->unk_33; +} + +s32 FUN_02001464(struct ListMenu * list, s32 index) +{ + return list->template.items[index].index; +} -- cgit v1.2.3 From 80231d12b10043197be4d01222346fe7f0b72900 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 09:08:28 -0400 Subject: ListMenuGetSetTemplateField --- arm9/src/list_menu.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 1a46c4e2..db0328ef 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -12,6 +12,7 @@ void ListMenuDrawCursor(struct ListMenu *); BOOL ListMenuChangeSelection(struct ListMenu *, u8, u8, s32); void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); +extern s32 FUN_02002E4C(u8 fontId, s32 attr); THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) { @@ -188,3 +189,117 @@ s32 FUN_02001464(struct ListMenu * list, s32 index) { return list->template.items[index].index; } + +s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) +{ + switch (attr) + { + case 0: + return (s32)list->template.moveCursorFunc; + case 1: + return (s32)list->template.itemPrintFunc; + case 2: + return (s32)list->template.totalItems; + case 3: + return (s32)list->template.maxShowed; + case 4: + break; + case 5: + return (s32)list->template.header_X; + case 6: + return (s32)list->template.item_X; + case 7: + return (s32)list->template.cursor_X; + case 8: + return (s32)list->template.upText_Y; + case 9: + return FUN_02002E4C(list->template.fontId, 1) + list->template.itemVerticalPadding; + case 10: + return (s32)list->template.cursorPal; + case 11: + return (s32)list->template.fillValue; + case 12: + return (s32)list->template.cursorShadowPal; + case 13: + return (s32)list->template.lettersSpacing; + case 14: + return (s32)list->template.itemVerticalPadding; + case 15: + return (s32)list->template.scrollMultiple; + case 16: + return (s32)list->template.fontId; + case 17: + return (s32)list->template.unk_1B_7; + case 18: + return (s32)list->template.window; + case 19: + return (s32)list->template.unk_1C; + } + + return -1; +} + +void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value) +{ + switch (attr) + { + case 0: + list->template.moveCursorFunc = (LM_MOVECURSORFUNC)value; + break; + case 1: + list->template.itemPrintFunc = (LM_ITEMPRINTFUNC)value; + break; + case 2: + list->template.totalItems = (u16)value; + break; + case 3: + list->template.maxShowed = (u16)value; + break; + case 4: + break; + case 5: + list->template.header_X = (u8)value; + break; + case 6: + list->template.item_X = (u8)value; + break; + case 7: + list->template.cursor_X = (u8)value; + break; + case 8: + list->template.upText_Y = (u8)value; + break; + case 9: + break; + case 10: + list->template.cursorPal = (u8)value; + break; + case 11: + list->template.fillValue = (u8)value; + break; + case 12: + list->template.cursorShadowPal = (u8)value; + break; + case 13: + list->template.lettersSpacing = (u8)value; + break; + case 14: + list->template.itemVerticalPadding = (u8)value; + break; + case 15: + list->template.scrollMultiple = (u8)value; + break; + case 16: + list->template.fontId = (u8)value; + break; + case 17: + list->template.unk_1B_7 = (u8)value; + break; + case 18: + list->template.window = (struct Window *)value; + break; + case 19: + list->template.unk_1C = (u32)value; + break; + } +} -- cgit v1.2.3 From 11f1419d080f346574b7a83d528c42a9473d41ec Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 12:51:26 -0400 Subject: ListMenuPrint --- arm9/src/list_menu.c | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index db0328ef..8dec327d 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -14,6 +14,15 @@ void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); extern s32 FUN_02002E4C(u8 fontId, s32 attr); +static inline u32 MakeFontColor(u32 fgPal, u32 shdwPal, u32 bgPal) +{ + return (u32)( + ((u32)(fgPal << 24) >> 8) + | ((u32)(shdwPal << 24) >> 16) + | ((u32)(bgPal << 24) >> 24) + ); +} + THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) { struct ListMenu * list = AllocFromHeap(heap_id, sizeof(struct ListMenu)); @@ -31,11 +40,12 @@ THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * templa list->cursorShadowPal = list->template.cursorShadowPal; list->lettersSpacing = list->template.lettersSpacing; list->fontId = list->template.fontId; - list->enabled = 0; + list->overrideEnabled = FALSE; if (list->template.totalItems < list->template.maxShowed) list->template.maxShowed = list->template.totalItems; CreateListMenuCursorObj( list->cursor, +// MakeFontColor(list->template.cursorPal, list->template.cursorShadowPal, list->fillValue) (u32)( ((u32)(list->template.cursorPal << 24) >> 8) | ((u32)(list->template.cursorShadowPal << 24) >> 16) @@ -154,25 +164,25 @@ THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, const struct ListMenuTemplat return -1; } -s32 FUN_020013C8(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p) +THUMB_FUNC s32 FUN_020013C8(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p) { return FUN_02001354(list, template, cursorPos, itemsAbove, FALSE, input, cursorPosDest_p, itemsAboveDest_p); } -void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +THUMB_FUNC void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) { list->cursorPal = cursorPal; list->fillValue = fillValue; list->cursorShadowPal = cursorShadowPal; - list->enabled = TRUE; + list->overrideEnabled = TRUE; } -void FUN_0200143C(struct ListMenu * list, u16 * index_p) +THUMB_FUNC void FUN_0200143C(struct ListMenu * list, u16 * index_p) { *index_p = list->cursorPos + list->itemsAbove; } -void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) +THUMB_FUNC void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) { if (cursorPos_p != NULL) *cursorPos_p = list->cursorPos; @@ -180,17 +190,17 @@ void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) *itemsAbove_p = list->itemsAbove; } -u8 FUN_0200145C(struct ListMenu * list) +THUMB_FUNC u8 FUN_0200145C(struct ListMenu * list) { return list->unk_33; } -s32 FUN_02001464(struct ListMenu * list, s32 index) +THUMB_FUNC s32 FUN_02001464(struct ListMenu * list, s32 index) { return list->template.items[index].index; } -s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) +THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) { switch (attr) { @@ -239,7 +249,7 @@ s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) return -1; } -void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value) +THUMB_FUNC void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value) { switch (attr) { @@ -303,3 +313,23 @@ void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value) break; } } + +THUMB_FUNC void ListMenuPrint(struct ListMenu * list, struct ListMenuItem * items) +{ + list->template.items = items; +} + +THUMB_FUNC void FUN_0200165C(struct ListMenu * list, const u16 * str, u8 x, u8 y) +{ + if (str != NULL) + { + if (list->overrideEnabled) + { + AddTextPrinterParameterized3(list->template.window, list->fontId, str, x, y, 0xFF, MakeFontColor(list->cursorPal, list->cursorShadowPal, list->fillValue), list->lettersSpacing, 0, NULL); + } + else + { + AddTextPrinterParameterized3(list->template.window, list->template.fontId, str, x, y, 0xFF, MakeFontColor(list->template.cursorPal, list->template.cursorShadowPal, list->template.fillValue), list->template.lettersSpacing, 0, NULL); + } + } +} -- cgit v1.2.3 From bcc2b21b1db3a0a54c5d5c446644b288064e14d9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 13:45:38 -0400 Subject: ListMenuUpdateSelectedRowIndexAndScrollOffset --- arm9/src/list_menu.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 149 insertions(+), 6 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 8dec327d..f54db302 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -4,6 +4,7 @@ #include "list_menu.h" extern void * FUN_02013690(u32 heap_id); +extern void * ListMenuUpdateCursorObj(struct ListMenuCursor *, struct Window *, u8 x, u8 y); extern void CreateListMenuCursorObj(void *, u32); extern void DestroyListMenuCursorObj(void *); extern void FillWindowPixelBuffer(struct Window *, u32); @@ -12,7 +13,8 @@ void ListMenuDrawCursor(struct ListMenu *); BOOL ListMenuChangeSelection(struct ListMenu *, u8, u8, s32); void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); -extern s32 FUN_02002E4C(u8 fontId, s32 attr); +extern s32 GetFontAttribute(u8 fontId, s32 attr); +extern void FillWindowPixelRect(struct Window *, u32 fillValue, u16 x, u16 y, u16 width, u16 height); static inline u32 MakeFontColor(u32 fgPal, u32 shdwPal, u32 bgPal) { @@ -223,7 +225,7 @@ THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) case 8: return (s32)list->template.upText_Y; case 9: - return FUN_02002E4C(list->template.fontId, 1) + list->template.itemVerticalPadding; + return GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; case 10: return (s32)list->template.cursorPal; case 11: @@ -239,7 +241,7 @@ THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) case 16: return (s32)list->template.fontId; case 17: - return (s32)list->template.unk_1B_7; + return (s32)list->template.cursorKind; case 18: return (s32)list->template.window; case 19: @@ -303,7 +305,7 @@ THUMB_FUNC void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 v list->template.fontId = (u8)value; break; case 17: - list->template.unk_1B_7 = (u8)value; + list->template.cursorKind = (u8)value; break; case 18: list->template.window = (struct Window *)value; @@ -314,12 +316,12 @@ THUMB_FUNC void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 v } } -THUMB_FUNC void ListMenuPrint(struct ListMenu * list, struct ListMenuItem * items) +THUMB_FUNC void ListMenuGetItemStr(struct ListMenu * list, struct ListMenuItem * items) { list->template.items = items; } -THUMB_FUNC void FUN_0200165C(struct ListMenu * list, const u16 * str, u8 x, u8 y) +THUMB_FUNC void ListMenuPrint(struct ListMenu * list, const u16 * str, u8 x, u8 y) { if (str != NULL) { @@ -333,3 +335,144 @@ THUMB_FUNC void FUN_0200165C(struct ListMenu * list, const u16 * str, u8 x, u8 y } } } + +THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 yOffset, u16 count) +{ + s32 i; + u8 x, y; + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + + for (i = 0; i < count; i++) + { + if (list->template.items[startIndex].index != LIST_HEADER) + x = list->template.item_X; + else + x = list->template.header_X; + y = (yOffset + i) * yMultiplier + list->template.upText_Y; + if (list->template.itemPrintFunc != NULL) + list->template.itemPrintFunc(list, list->template.items[startIndex].index, y); + ListMenuPrint(list, list->template.items[startIndex].text, x, y); + startIndex++; + } +} + +THUMB_FUNC void ListMenuDrawCursor(struct ListMenu * list) +{ + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + u8 x = list->template.cursor_X; + u8 y = list->itemsAbove * yMultiplier + list->template.upText_Y; + switch (list->template.cursorKind) + { + case 0: + ListMenuUpdateCursorObj(list->cursor, list->template.window, x, y); + break; + case 1: + case 2: // leftover + case 3: // leftover + break; + } +} + +THUMB_FUNC void ListMenuErasePrintedCursor(struct ListMenu * list, u16 itemsAbove) +{ + switch (list->template.cursorKind) + { + case 0: + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + u8 width = 8; + u8 height = 16; + FillWindowPixelRect(list->template.window, + list->template.fillValue, + list->template.cursor_X, + itemsAbove * yMultiplier + list->template.upText_Y, + width, + height); + break; + case 1: + case 2: // leftover + case 3: // leftover + break; + } +} + +THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, u8 movingDown) +{ + u32 cursorPos; + u16 itemsAbove; + u16 newRow; + + itemsAbove = list->itemsAbove; + cursorPos = list->cursorPos; + + if (!movingDown) + { + if (list->template.maxShowed == 1) + newRow = 0; + else + newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1; + + if (cursorPos == 0) + { + while (itemsAbove != 0) + { + itemsAbove--; + if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + { + list->itemsAbove = itemsAbove; + return 1; + } + } + return 0; + } + else + { + while (itemsAbove > newRow) + { + itemsAbove--; + if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + { + list->itemsAbove = itemsAbove; + return 1; + } + } + list->itemsAbove = newRow; + list->cursorPos = cursorPos - 1; + } + } + else + { + if (list->template.maxShowed == 1) + newRow = 0; + else + newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)); + + if (cursorPos == list->template.totalItems - list->template.maxShowed) + { + while (itemsAbove < list->template.maxShowed - 1) + { + itemsAbove++; + if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + { + list->itemsAbove = itemsAbove; + return 1; + } + } + return 0; + } + else + { + while (itemsAbove < newRow) + { + itemsAbove++; + if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + { + list->itemsAbove = itemsAbove; + return 1; + } + } + list->itemsAbove = newRow; + list->cursorPos = cursorPos + 1; + } + } + return 2; +} -- cgit v1.2.3 From c49b55a8f94b6b74fe35b8e6994551dc33a4ff6f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 14:01:31 -0400 Subject: ListMenuScroll --- arm9/src/list_menu.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index f54db302..59de2813 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -15,6 +15,9 @@ void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); extern s32 GetFontAttribute(u8 fontId, s32 attr); extern void FillWindowPixelRect(struct Window *, u32 fillValue, u16 x, u16 y, u16 width, u16 height); +extern void ScrollWindow(struct Window *, u8, u8, u8); +extern u16 GetWindowWidth(struct Window *); +extern u16 GetWindowHeight(struct Window *); static inline u32 MakeFontColor(u32 fgPal, u32 shdwPal, u32 bgPal) { @@ -476,3 +479,43 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis } return 2; } + +THUMB_FUNC void ListMenuScroll(struct ListMenu * list, u8 count, u8 movingDown) +{ + if (count >= list->template.maxShowed) + { + FillWindowPixelBuffer(list->template.window, list->template.fillValue); + ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed); + } + else + { + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + + if (!movingDown) + { + u16 y, width, height; + + ScrollWindow(list->template.window, 1, count * yMultiplier, (list->template.fillValue << 4) | list->template.fillValue); + ListMenuPrintEntries(list, list->cursorPos, 0, count); + + y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y; + width = GetWindowWidth(list->template.window); + height = GetWindowHeight(list->template.window); + FillWindowPixelRect(list->template.window, + list->template.fillValue, + 0, y, width * 8, height * 8 - y); + } + else + { + u32 width; + + ScrollWindow(list->template.window, 0, count * yMultiplier, (list->template.fillValue << 4) | list->template.fillValue); + ListMenuPrintEntries(list, list->cursorPos + (list->template.maxShowed - count), list->template.maxShowed - count, count); + + width = GetWindowWidth(list->template.window); + FillWindowPixelRect(list->template.window, + list->template.fillValue, + 0, 0, width * 8, list->template.upText_Y); + } + } +} -- cgit v1.2.3 From 433f9a7f144c3f0fcad357f8916cf1d599a1bcd4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 16:09:22 -0400 Subject: Finish decompiling list_menu --- arm9/src/list_menu.c | 98 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 21 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 59de2813..7b663eca 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -3,21 +3,21 @@ #include "main.h" #include "list_menu.h" -extern void * FUN_02013690(u32 heap_id); +extern void * ListMenuCursorNew(u32 heap_id); extern void * ListMenuUpdateCursorObj(struct ListMenuCursor *, struct Window *, u8 x, u8 y); -extern void CreateListMenuCursorObj(void *, u32); +extern void ListMenuCursorSetColor(void *, u32); extern void DestroyListMenuCursorObj(void *); extern void FillWindowPixelBuffer(struct Window *, u32); -void ListMenuPrintEntries(struct ListMenu *, u16, u16, u16); -void ListMenuDrawCursor(struct ListMenu *); -BOOL ListMenuChangeSelection(struct ListMenu *, u8, u8, s32); -void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); extern s32 GetFontAttribute(u8 fontId, s32 attr); extern void FillWindowPixelRect(struct Window *, u32 fillValue, u16 x, u16 y, u16 width, u16 height); extern void ScrollWindow(struct Window *, u8, u8, u8); extern u16 GetWindowWidth(struct Window *); extern u16 GetWindowHeight(struct Window *); +void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 yOffset, u16 count); +void ListMenuDrawCursor(struct ListMenu * list); +BOOL ListMenuChangeSelection(struct ListMenu * list, u8 updateCursorAndCallCallback, u8 count, u8 movingDown); +void ListMenuCallSelectionChangedCallback(struct ListMenu * list, u8 onInit); static inline u32 MakeFontColor(u32 fgPal, u32 shdwPal, u32 bgPal) { @@ -32,7 +32,7 @@ THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * templa { struct ListMenu * list = AllocFromHeap(heap_id, sizeof(struct ListMenu)); list->template = *template; - list->cursor = FUN_02013690(heap_id); + list->cursor = ListMenuCursorNew(heap_id); list->cursorPos = cursorPos; list->itemsAbove = itemsAbove; list->unk_30 = 0; @@ -48,7 +48,7 @@ THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * templa list->overrideEnabled = FALSE; if (list->template.totalItems < list->template.maxShowed) list->template.maxShowed = list->template.totalItems; - CreateListMenuCursorObj( + ListMenuCursorSetColor( list->cursor, // MakeFontColor(list->template.cursorPal, list->template.cursorShadowPal, list->fillValue) (u32)( @@ -130,7 +130,7 @@ THUMB_FUNC void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * i if (itemsAbove != NULL) *itemsAbove = list->itemsAbove; DestroyListMenuCursorObj(list->cursor); - FUN_02016A8C(list->heap_id, list); + FreeToHeapExplicit(list->heap_id, list); } THUMB_FUNC void RedrawListMenu(struct ListMenu * list) @@ -141,7 +141,7 @@ THUMB_FUNC void RedrawListMenu(struct ListMenu * list) CopyWindowToVram(list->template.window); } -THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p) +THUMB_FUNC s32 ListMenuTestInputInternal(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 *newCursorPos, u16 *newItemsAbove) { if (template != NULL) list->template = *template; @@ -158,23 +158,23 @@ THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, const struct ListMenuTemplat { ListMenuChangeSelection(list, updateFlag, 1, TRUE); } - if (cursorPosDest_p != NULL) + if (newCursorPos != NULL) { - *cursorPosDest_p = list->cursorPos; + *newCursorPos = list->cursorPos; } - if (itemsAboveDest_p != NULL) + if (newItemsAbove != NULL) { - *itemsAboveDest_p = list->itemsAbove; + *newItemsAbove = list->itemsAbove; } return -1; } -THUMB_FUNC s32 FUN_020013C8(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p) +THUMB_FUNC s32 ListMenuTestInput(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *newCursorPos, u16 *newItemsAbove) { - return FUN_02001354(list, template, cursorPos, itemsAbove, FALSE, input, cursorPosDest_p, itemsAboveDest_p); + return ListMenuTestInputInternal(list, template, cursorPos, itemsAbove, FALSE, input, newCursorPos, newItemsAbove); } -THUMB_FUNC void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +THUMB_FUNC void ListMenuOverrideSetColors(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) { list->cursorPal = cursorPal; list->fillValue = fillValue; @@ -182,12 +182,12 @@ THUMB_FUNC void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, list->overrideEnabled = TRUE; } -THUMB_FUNC void FUN_0200143C(struct ListMenu * list, u16 * index_p) +THUMB_FUNC void ListMenuGetCurrentItemArrayId(struct ListMenu * list, u16 * index_p) { *index_p = list->cursorPos + list->itemsAbove; } -THUMB_FUNC void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) +THUMB_FUNC void ListMenuGetScrollAndRow(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) { if (cursorPos_p != NULL) *cursorPos_p = list->cursorPos; @@ -195,12 +195,12 @@ THUMB_FUNC void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * it *itemsAbove_p = list->itemsAbove; } -THUMB_FUNC u8 FUN_0200145C(struct ListMenu * list) +THUMB_FUNC u8 ListMenuGetUnk33(struct ListMenu * list) { return list->unk_33; } -THUMB_FUNC s32 FUN_02001464(struct ListMenu * list, s32 index) +THUMB_FUNC s32 ListMenuGetValueByArrayId(struct ListMenu * list, s32 index) { return list->template.items[index].index; } @@ -519,3 +519,59 @@ THUMB_FUNC void ListMenuScroll(struct ListMenu * list, u8 count, u8 movingDown) } } } + +THUMB_FUNC BOOL ListMenuChangeSelection(struct ListMenu * list, u8 updateCursorAndCallCallback, u8 count, u8 movingDown) +{ + u16 oldSelectedRow; + u8 selectionChange, i, cursorCount; + + oldSelectedRow = list->itemsAbove; + cursorCount = 0; + selectionChange = 0; + for (i = 0; i < count; i++) + { + do + { + u8 ret = ListMenuUpdateSelectedRowIndexAndScrollOffset(list, movingDown); + + selectionChange |= ret; + if (ret != 2) + break; + cursorCount++; + } + while (list->template.items[list->cursorPos + list->itemsAbove].index == LIST_HEADER); + } + + if (updateCursorAndCallCallback) + { + switch (selectionChange) + { + case 0: + default: + return TRUE; + case 1: + ListMenuErasePrintedCursor(list, oldSelectedRow); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, FALSE); + CopyWindowToVram(list->template.window); + break; + case 2: + case 3: + ListMenuErasePrintedCursor(list, oldSelectedRow); + ListMenuScroll(list, cursorCount, movingDown); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, FALSE); + CopyWindowToVram(list->template.window); + break; + } + } + return FALSE; +} + +void ListMenuCallSelectionChangedCallback(struct ListMenu * list, u8 onInit) +{ + if (list->template.moveCursorFunc != NULL) + { + list->template.moveCursorFunc(list, list->template.items[list->cursorPos + list->itemsAbove].index, onInit); + } +} -- cgit v1.2.3 From 5f3c83a7e596f028b199f15dbe98031deffe791c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 16:33:29 -0400 Subject: Missed one --- arm9/src/list_menu.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 7b663eca..e3832145 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -568,10 +568,15 @@ THUMB_FUNC BOOL ListMenuChangeSelection(struct ListMenu * list, u8 updateCursorA return FALSE; } -void ListMenuCallSelectionChangedCallback(struct ListMenu * list, u8 onInit) +THUMB_FUNC void ListMenuCallSelectionChangedCallback(struct ListMenu * list, u8 onInit) { if (list->template.moveCursorFunc != NULL) { list->template.moveCursorFunc(list, list->template.items[list->cursorPos + list->itemsAbove].index, onInit); } } + +THUMB_FUNC void ListMenuCopyToVram(struct ListMenu * list) +{ + CopyWindowToVram(list->template.window); +} -- cgit v1.2.3 From 70b098f92d46c134388e02bd8c436649fe31e999 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 May 2021 19:43:41 -0400 Subject: Fix parameterization --- arm9/src/list_menu.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index e3832145..cd9abde0 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -2,18 +2,8 @@ #include "heap.h" #include "main.h" #include "list_menu.h" +#include "text.h" -extern void * ListMenuCursorNew(u32 heap_id); -extern void * ListMenuUpdateCursorObj(struct ListMenuCursor *, struct Window *, u8 x, u8 y); -extern void ListMenuCursorSetColor(void *, u32); -extern void DestroyListMenuCursorObj(void *); -extern void FillWindowPixelBuffer(struct Window *, u32); -extern void CopyWindowToVram(struct Window *); -extern s32 GetFontAttribute(u8 fontId, s32 attr); -extern void FillWindowPixelRect(struct Window *, u32 fillValue, u16 x, u16 y, u16 width, u16 height); -extern void ScrollWindow(struct Window *, u8, u8, u8); -extern u16 GetWindowWidth(struct Window *); -extern u16 GetWindowHeight(struct Window *); void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 yOffset, u16 count); void ListMenuDrawCursor(struct ListMenu * list); BOOL ListMenuChangeSelection(struct ListMenu * list, u8 updateCursorAndCallCallback, u8 count, u8 movingDown); -- cgit v1.2.3 From 616cd9b1c1cf789ae990d4236085d1a6748d3850 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 22 May 2021 07:40:46 -0400 Subject: Un-all-caps list menu function typedefs --- arm9/src/list_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index cd9abde0..5ae5a5b4 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -249,10 +249,10 @@ THUMB_FUNC void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 v switch (attr) { case 0: - list->template.moveCursorFunc = (LM_MOVECURSORFUNC)value; + list->template.moveCursorFunc = (LM_MoveCursorFunc_t)value; break; case 1: - list->template.itemPrintFunc = (LM_ITEMPRINTFUNC)value; + list->template.itemPrintFunc = (LM_ItemPrintFunc_t)value; break; case 2: list->template.totalItems = (u16)value; -- cgit v1.2.3 From e14ce23516daf20a5fcd9ca6ca53f30d33c4ef24 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 22 May 2021 18:11:00 -0400 Subject: Decompile list_menu_items --- arm9/src/list_menu.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 5ae5a5b4..c54677a9 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -60,7 +60,7 @@ THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list) list->unk_33 = 0; if (gMain.newKeys & REG_PAD_KEYINPUT_A_MASK) { - return list->template.items[list->cursorPos + list->itemsAbove].index; + return list->template.items[list->cursorPos + list->itemsAbove].value; } else if (gMain.newKeys & REG_PAD_KEYINPUT_B_MASK) { return LIST_CANCEL; @@ -192,7 +192,7 @@ THUMB_FUNC u8 ListMenuGetUnk33(struct ListMenu * list) THUMB_FUNC s32 ListMenuGetValueByArrayId(struct ListMenu * list, s32 index) { - return list->template.items[index].index; + return list->template.items[index].value; } THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) @@ -314,7 +314,7 @@ THUMB_FUNC void ListMenuGetItemStr(struct ListMenu * list, struct ListMenuItem * list->template.items = items; } -THUMB_FUNC void ListMenuPrint(struct ListMenu * list, const u16 * str, u8 x, u8 y) +THUMB_FUNC void ListMenuPrint(struct ListMenu * list, struct String * str, u8 x, u8 y) { if (str != NULL) { @@ -337,13 +337,13 @@ THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 for (i = 0; i < count; i++) { - if (list->template.items[startIndex].index != LIST_HEADER) + if (list->template.items[startIndex].value != LIST_HEADER) x = list->template.item_X; else x = list->template.header_X; y = (yOffset + i) * yMultiplier + list->template.upText_Y; if (list->template.itemPrintFunc != NULL) - list->template.itemPrintFunc(list, list->template.items[startIndex].index, y); + list->template.itemPrintFunc(list, list->template.items[startIndex].value, y); ListMenuPrint(list, list->template.items[startIndex].text, x, y); startIndex++; } @@ -409,7 +409,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis while (itemsAbove != 0) { itemsAbove--; - if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER) { list->itemsAbove = itemsAbove; return 1; @@ -422,7 +422,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis while (itemsAbove > newRow) { itemsAbove--; - if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER) { list->itemsAbove = itemsAbove; return 1; @@ -444,7 +444,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis while (itemsAbove < list->template.maxShowed - 1) { itemsAbove++; - if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER) { list->itemsAbove = itemsAbove; return 1; @@ -457,7 +457,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis while (itemsAbove < newRow) { itemsAbove++; - if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER) + if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER) { list->itemsAbove = itemsAbove; return 1; @@ -529,7 +529,7 @@ THUMB_FUNC BOOL ListMenuChangeSelection(struct ListMenu * list, u8 updateCursorA break; cursorCount++; } - while (list->template.items[list->cursorPos + list->itemsAbove].index == LIST_HEADER); + while (list->template.items[list->cursorPos + list->itemsAbove].value == LIST_HEADER); } if (updateCursorAndCallCallback) @@ -562,7 +562,7 @@ THUMB_FUNC void ListMenuCallSelectionChangedCallback(struct ListMenu * list, u8 { if (list->template.moveCursorFunc != NULL) { - list->template.moveCursorFunc(list, list->template.items[list->cursorPos + list->itemsAbove].index, onInit); + list->template.moveCursorFunc(list, list->template.items[list->cursorPos + list->itemsAbove].value, onInit); } } -- cgit v1.2.3 From 0d0f5b70b03e271d05cd30ccacddd55d75c4e530 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 22 May 2021 19:10:56 -0400 Subject: Silence compiler warnings --- arm9/src/list_menu.c | 54 ++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'arm9/src/list_menu.c') diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index c54677a9..033d06f9 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -86,23 +86,23 @@ THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list) rightButton = FALSE; break; case LIST_MULTIPLE_SCROLL_DPAD: - leftButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_LEFT_MASK; - rightButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_RIGHT_MASK; + leftButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_LEFT_MASK); + rightButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_RIGHT_MASK); break; case LIST_MULTIPLE_SCROLL_L_R: - leftButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_L_MASK; - rightButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_R_MASK; + leftButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_L_MASK); + rightButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_R_MASK); break; } if (leftButton) { - if (!ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE)) + if (!ListMenuChangeSelection(list, TRUE, (u8)list->template.maxShowed, FALSE)) list->unk_33 = 3; return LIST_NOTHING_CHOSEN; } else if (rightButton) { - if (!ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE)) + if (!ListMenuChangeSelection(list, TRUE, (u8)list->template.maxShowed, TRUE)) list->unk_33 = 4; return LIST_NOTHING_CHOSEN; } @@ -142,11 +142,11 @@ THUMB_FUNC s32 ListMenuTestInputInternal(struct ListMenu * list, const struct Li if (input == REG_PAD_KEYINPUT_UP_MASK) { - ListMenuChangeSelection(list, updateFlag, 1, FALSE); + ListMenuChangeSelection(list, (u8)updateFlag, 1, FALSE); } else if (input == REG_PAD_KEYINPUT_DOWN_MASK) { - ListMenuChangeSelection(list, updateFlag, 1, TRUE); + ListMenuChangeSelection(list, (u8)updateFlag, 1, TRUE); } if (newCursorPos != NULL) { @@ -174,7 +174,7 @@ THUMB_FUNC void ListMenuOverrideSetColors(struct ListMenu * list, u8 cursorPal, THUMB_FUNC void ListMenuGetCurrentItemArrayId(struct ListMenu * list, u16 * index_p) { - *index_p = list->cursorPos + list->itemsAbove; + *index_p = (u16)(list->cursorPos + list->itemsAbove); } THUMB_FUNC void ListMenuGetScrollAndRow(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p) @@ -218,7 +218,7 @@ THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) case 8: return (s32)list->template.upText_Y; case 9: - return GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + return GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding; case 10: return (s32)list->template.cursorPal; case 11: @@ -333,7 +333,7 @@ THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 { s32 i; u8 x, y; - u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + u8 yMultiplier = (u8)(GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding); for (i = 0; i < count; i++) { @@ -341,7 +341,7 @@ THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 x = list->template.item_X; else x = list->template.header_X; - y = (yOffset + i) * yMultiplier + list->template.upText_Y; + y = (u8)((yOffset + i) * yMultiplier + list->template.upText_Y); if (list->template.itemPrintFunc != NULL) list->template.itemPrintFunc(list, list->template.items[startIndex].value, y); ListMenuPrint(list, list->template.items[startIndex].text, x, y); @@ -351,9 +351,9 @@ THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16 THUMB_FUNC void ListMenuDrawCursor(struct ListMenu * list) { - u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + u8 yMultiplier = (u8)(GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding); u8 x = list->template.cursor_X; - u8 y = list->itemsAbove * yMultiplier + list->template.upText_Y; + u8 y = (u8)(list->itemsAbove * yMultiplier + list->template.upText_Y); switch (list->template.cursorKind) { case 0: @@ -371,13 +371,13 @@ THUMB_FUNC void ListMenuErasePrintedCursor(struct ListMenu * list, u16 itemsAbov switch (list->template.cursorKind) { case 0: - u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + u8 yMultiplier = (u8)(GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding); u8 width = 8; u8 height = 16; FillWindowPixelRect(list->template.window, list->template.fillValue, list->template.cursor_X, - itemsAbove * yMultiplier + list->template.upText_Y, + (u16)(itemsAbove * yMultiplier + list->template.upText_Y), width, height); break; @@ -402,7 +402,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis if (list->template.maxShowed == 1) newRow = 0; else - newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1; + newRow = (u16)(list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1); if (cursorPos == 0) { @@ -429,7 +429,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis } } list->itemsAbove = newRow; - list->cursorPos = cursorPos - 1; + list->cursorPos = (u16)(cursorPos - 1); } } else @@ -437,7 +437,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis if (list->template.maxShowed == 1) newRow = 0; else - newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)); + newRow = (u16)((list->template.maxShowed / 2) + (list->template.maxShowed % 2)); if (cursorPos == list->template.totalItems - list->template.maxShowed) { @@ -464,7 +464,7 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis } } list->itemsAbove = newRow; - list->cursorPos = cursorPos + 1; + list->cursorPos = (u16)(cursorPos + 1); } } return 2; @@ -479,33 +479,33 @@ THUMB_FUNC void ListMenuScroll(struct ListMenu * list, u8 count, u8 movingDown) } else { - u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding; + u8 yMultiplier = (u8)(GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding); if (!movingDown) { u16 y, width, height; - ScrollWindow(list->template.window, 1, count * yMultiplier, (list->template.fillValue << 4) | list->template.fillValue); + ScrollWindow(list->template.window, 1, (u8)(count * yMultiplier), (u8)((list->template.fillValue << 4) | list->template.fillValue)); ListMenuPrintEntries(list, list->cursorPos, 0, count); - y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y; + y = (u16)((list->template.maxShowed * yMultiplier) + list->template.upText_Y); width = GetWindowWidth(list->template.window); height = GetWindowHeight(list->template.window); FillWindowPixelRect(list->template.window, list->template.fillValue, - 0, y, width * 8, height * 8 - y); + 0, y, (u16)(width * 8), (u16)(height * 8 - y)); } else { u32 width; - ScrollWindow(list->template.window, 0, count * yMultiplier, (list->template.fillValue << 4) | list->template.fillValue); - ListMenuPrintEntries(list, list->cursorPos + (list->template.maxShowed - count), list->template.maxShowed - count, count); + ScrollWindow(list->template.window, 0, (u8)(count * yMultiplier), (u8)((list->template.fillValue << 4) | list->template.fillValue)); + ListMenuPrintEntries(list, (u16)(list->cursorPos + (list->template.maxShowed - count)), (u16)(list->template.maxShowed - count), count); width = GetWindowWidth(list->template.window); FillWindowPixelRect(list->template.window, list->template.fillValue, - 0, 0, width * 8, list->template.upText_Y); + 0, 0, (u16)(width * 8), list->template.upText_Y); } } } -- cgit v1.2.3