From ded31ee11b7c6f4aed68bca2a53a4372ea713492 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 19 May 2021 20:48:11 -0400 Subject: Decomp ListMenuInit --- include/list_menu.h | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 include/list_menu.h (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h new file mode 100644 index 00000000..befbf051 --- /dev/null +++ b/include/list_menu.h @@ -0,0 +1,56 @@ +#ifndef POKEDIAMOND_LIST_MENU_H +#define POKEDIAMOND_LIST_MENU_H + +struct ListMenu; + +// TODO: Move to its own header, and fill it out +struct Window +{ + u8 * unk_00; + u8 unk_04; +}; + +// TODO: Document remaining fields. +// A lot of these are named based on similar fields in gen 3. +struct ListMenuTemplate +{ + u8 filler_00[12]; + /*0x0C*/ struct Window * window; + /*0x10*/ u16 totalItems; + /*0x12*/ u16 maxShowed; + /*0x14*/ u8 header_X; + /*0x15*/ u8 item_X; + /*0x16*/ u8 cursor_X; + /*0x17*/ u8 upText_Y:4; + u8 cursorPal:4; + /*0x18*/ u8 fillValue:4; + u8 cursorShadowPal:4; + /*0x1A*/ u16 lettersSpacing:3; + u16 unk_1a_3:6; + u16 fontId:6; + /*0x1C*/ u8 filler_1C[4]; +}; + +struct ListMenu +{ + /*0x00*/ struct ListMenuTemplate template; + // ListMenuOverride from gen 3 + /*0x20*/ u8 cursorPal:4; + u8 fillValue:4; + /*0x21*/ u8 cursorShadowPal:4; + u8 unk_21_4:4; + /*0x22*/ u8 lettersSpacing:6; + /*0x23*/ u8 unk_23; + /*0x24*/ u8 fontId:7; + u8 enabled:1; + /*0x28*/ void * unk_28; + /*0x2c*/ u16 cursorPos; + /*0x2e*/ u16 itemsAbove; + /*0x30*/ u8 unk_30; + /*0x31*/ u8 unk_31; + /*0x32*/ u8 taskId; + /*0x33*/ u8 unk_33; + /*0x34*/ u8 heap_id; +}; + +#endif // POKEDIAMOND_LIST_MENU_H -- 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 --- include/list_menu.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index befbf051..ed47d21d 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -1,6 +1,14 @@ #ifndef POKEDIAMOND_LIST_MENU_H #define POKEDIAMOND_LIST_MENU_H +#define LIST_HEADER -3 +#define LIST_CANCEL -2 +#define LIST_NOTHING_CHOSEN -1 + +#define LIST_NO_MULTIPLE_SCROLL 0 +#define LIST_MULTIPLE_SCROLL_DPAD 1 +#define LIST_MULTIPLE_SCROLL_L_R 2 + struct ListMenu; // TODO: Move to its own header, and fill it out @@ -10,11 +18,18 @@ struct Window u8 unk_04; }; +struct ListMenuItem +{ + const u16 * text; + s32 index; +}; + // TODO: Document remaining fields. // A lot of these are named based on similar fields in gen 3. struct ListMenuTemplate { - u8 filler_00[12]; + struct ListMenuItem * items; + u8 filler_04[8]; /*0x0C*/ struct Window * window; /*0x10*/ u16 totalItems; /*0x12*/ u16 maxShowed; @@ -26,7 +41,8 @@ struct ListMenuTemplate /*0x18*/ u8 fillValue:4; u8 cursorShadowPal:4; /*0x1A*/ u16 lettersSpacing:3; - u16 unk_1a_3:6; + u16 itemVerticalPadding:4; + u16 scrollMultiple:2; u16 fontId:6; /*0x1C*/ u8 filler_1C[4]; }; -- 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 --- include/list_menu.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index ed47d21d..67b73893 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -18,6 +18,12 @@ struct Window u8 unk_04; }; +// TODO: Move to its own header, and fill it out +struct ListMenuCursor +{ + // ??? +}; + struct ListMenuItem { const u16 * text; @@ -59,7 +65,7 @@ struct ListMenu /*0x23*/ u8 unk_23; /*0x24*/ u8 fontId:7; u8 enabled:1; - /*0x28*/ void * unk_28; + /*0x28*/ struct ListMenuCursor *cursor; /*0x2c*/ u16 cursorPos; /*0x2e*/ u16 itemsAbove; /*0x30*/ u8 unk_30; @@ -69,4 +75,9 @@ struct ListMenu /*0x34*/ u8 heap_id; }; +THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id); +THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list); +THUMB_FUNC void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove); +THUMB_FUNC void RedrawListMenu(struct ListMenu * list); + #endif // POKEDIAMOND_LIST_MENU_H -- 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 --- include/list_menu.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 67b73893..5f8e6944 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -32,10 +32,15 @@ struct ListMenuItem // TODO: Document remaining fields. // A lot of these are named based on similar fields in gen 3. + +typedef void (*LM_MOVECURSORFUNC)(s32, u8, struct ListMenu *); +typedef void (*LM_ITEMPRINTFUNC)(struct Window *, s32, u8); + struct ListMenuTemplate { - struct ListMenuItem * items; - u8 filler_04[8]; + /*0x00*/ struct ListMenuItem * items; + /*0x04*/ LM_MOVECURSORFUNC moveCursorFunc; + /*0x08*/ LM_ITEMPRINTFUNC itemPrintFunc; /*0x0C*/ struct Window * window; /*0x10*/ u16 totalItems; /*0x12*/ u16 maxShowed; @@ -50,7 +55,8 @@ struct ListMenuTemplate u16 itemVerticalPadding:4; u16 scrollMultiple:2; u16 fontId:6; - /*0x1C*/ u8 filler_1C[4]; + u16 unk_1B_7:1; + /*0x1C*/ u32 unk_1C; }; struct ListMenu -- 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 --- include/list_menu.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 5f8e6944..0be1a32a 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -1,6 +1,8 @@ #ifndef POKEDIAMOND_LIST_MENU_H #define POKEDIAMOND_LIST_MENU_H +#include "text.h" + #define LIST_HEADER -3 #define LIST_CANCEL -2 #define LIST_NOTHING_CHOSEN -1 @@ -11,13 +13,6 @@ struct ListMenu; -// TODO: Move to its own header, and fill it out -struct Window -{ - u8 * unk_00; - u8 unk_04; -}; - // TODO: Move to its own header, and fill it out struct ListMenuCursor { @@ -70,7 +65,7 @@ struct ListMenu /*0x22*/ u8 lettersSpacing:6; /*0x23*/ u8 unk_23; /*0x24*/ u8 fontId:7; - u8 enabled:1; + u8 overrideEnabled:1; /*0x28*/ struct ListMenuCursor *cursor; /*0x2c*/ u16 cursorPos; /*0x2e*/ u16 itemsAbove; -- 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 --- include/list_menu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 0be1a32a..966a942a 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -29,7 +29,7 @@ struct ListMenuItem // A lot of these are named based on similar fields in gen 3. typedef void (*LM_MOVECURSORFUNC)(s32, u8, struct ListMenu *); -typedef void (*LM_ITEMPRINTFUNC)(struct Window *, s32, u8); +typedef void (*LM_ITEMPRINTFUNC)(struct ListMenu *, s32, u8); struct ListMenuTemplate { @@ -50,7 +50,7 @@ struct ListMenuTemplate u16 itemVerticalPadding:4; u16 scrollMultiple:2; u16 fontId:6; - u16 unk_1B_7:1; + u16 cursorKind:1; /*0x1C*/ u32 unk_1C; }; -- 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 --- include/list_menu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 966a942a..35fc44e6 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -28,8 +28,8 @@ struct ListMenuItem // TODO: Document remaining fields. // A lot of these are named based on similar fields in gen 3. -typedef void (*LM_MOVECURSORFUNC)(s32, u8, struct ListMenu *); -typedef void (*LM_ITEMPRINTFUNC)(struct ListMenu *, s32, u8); +typedef void (*LM_MOVECURSORFUNC)(struct ListMenu *list, s32 index, u8 onInit); +typedef void (*LM_ITEMPRINTFUNC)(struct ListMenu *list, s32 index, u8 y); struct ListMenuTemplate { -- 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 --- include/list_menu.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 35fc44e6..4cc1d247 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -1,7 +1,7 @@ #ifndef POKEDIAMOND_LIST_MENU_H #define POKEDIAMOND_LIST_MENU_H -#include "text.h" +#include "list_menu_cursor.h" #define LIST_HEADER -3 #define LIST_CANCEL -2 @@ -13,12 +13,6 @@ struct ListMenu; -// TODO: Move to its own header, and fill it out -struct ListMenuCursor -{ - // ??? -}; - struct ListMenuItem { const u16 * text; -- cgit v1.2.3 From ef69f285d6103c8ff20092ee14d0ee0b1d51794b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 22 May 2021 07:37:19 -0400 Subject: Remove THUMB_FUNC from headers --- include/list_menu.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 4cc1d247..11322674 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -70,9 +70,9 @@ struct ListMenu /*0x34*/ u8 heap_id; }; -THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id); -THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list); -THUMB_FUNC void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove); -THUMB_FUNC void RedrawListMenu(struct ListMenu * list); +struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id); +s32 ListMenu_ProcessInput(struct ListMenu * list); +void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove); +void RedrawListMenu(struct ListMenu * list); #endif // POKEDIAMOND_LIST_MENU_H -- 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 --- include/list_menu.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 11322674..3f60c6f2 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -22,14 +22,14 @@ struct ListMenuItem // TODO: Document remaining fields. // A lot of these are named based on similar fields in gen 3. -typedef void (*LM_MOVECURSORFUNC)(struct ListMenu *list, s32 index, u8 onInit); -typedef void (*LM_ITEMPRINTFUNC)(struct ListMenu *list, s32 index, u8 y); +typedef void (*LM_MoveCursorFunc_t)(struct ListMenu *list, s32 index, u8 onInit); +typedef void (*LM_ItemPrintFunc_t)(struct ListMenu *list, s32 index, u8 y); struct ListMenuTemplate { /*0x00*/ struct ListMenuItem * items; - /*0x04*/ LM_MOVECURSORFUNC moveCursorFunc; - /*0x08*/ LM_ITEMPRINTFUNC itemPrintFunc; + /*0x04*/ LM_MoveCursorFunc_t moveCursorFunc; + /*0x08*/ LM_ItemPrintFunc_t itemPrintFunc; /*0x0C*/ struct Window * window; /*0x10*/ u16 totalItems; /*0x12*/ u16 maxShowed; -- 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 --- include/list_menu.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index 3f60c6f2..c01bf070 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -2,6 +2,7 @@ #define POKEDIAMOND_LIST_MENU_H #include "list_menu_cursor.h" +#include "list_menu_items.h" #define LIST_HEADER -3 #define LIST_CANCEL -2 @@ -13,12 +14,6 @@ struct ListMenu; -struct ListMenuItem -{ - const u16 * text; - s32 index; -}; - // TODO: Document remaining fields. // A lot of these are named based on similar fields in gen 3. -- 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 --- include/list_menu.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'include/list_menu.h') diff --git a/include/list_menu.h b/include/list_menu.h index c01bf070..a02e1273 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -69,5 +69,20 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur s32 ListMenu_ProcessInput(struct ListMenu * list); void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove); void RedrawListMenu(struct ListMenu * list); +s32 ListMenuTestInputInternal(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 *newCursorPos, u16 *newItemsAbove); +s32 ListMenuTestInput(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *newCursorPos, u16 *newItemsAbove); +void ListMenuOverrideSetColors(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal); +void ListMenuGetCurrentItemArrayId(struct ListMenu * list, u16 * index_p); +void ListMenuGetScrollAndRow(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p); +u8 ListMenuGetUnk33(struct ListMenu * list); +s32 ListMenuGetValueByArrayId(struct ListMenu * list, s32 index); +s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr); +void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value); +void ListMenuGetItemStr(struct ListMenu * list, struct ListMenuItem * items); +void ListMenuPrint(struct ListMenu * list, struct String * str, u8 x, u8 y); +void ListMenuErasePrintedCursor(struct ListMenu * list, u16 itemsAbove); +u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, u8 movingDown); +void ListMenuScroll(struct ListMenu * list, u8 count, u8 movingDown); +void ListMenuCopyToVram(struct ListMenu * list); #endif // POKEDIAMOND_LIST_MENU_H -- cgit v1.2.3