summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_020010A8.s101
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/18/asm/module_18.s2
-rw-r--r--arm9/src/list_menu.c50
-rw-r--r--arm9/src/text.c30
-rw-r--r--include/list_menu.h11
-rw-r--r--include/text.h15
7 files changed, 72 insertions, 139 deletions
diff --git a/arm9/asm/unk_020010A8.s b/arm9/asm/unk_020010A8.s
index 534ca98b..d7a2c9f0 100644
--- a/arm9/asm/unk_020010A8.s
+++ b/arm9/asm/unk_020010A8.s
@@ -2,109 +2,10 @@
.include "global.inc"
.extern gMain
+ .extern FUN_0200165C
.text
- thumb_func_start FUN_02001658
-FUN_02001658: ; 0x02001658
- str r1, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_0200165C
-FUN_0200165C: ; 0x0200165C
- push {r4-r6, lr}
- sub sp, #0x18
- add r5, r1, #0x0
- add r6, r0, #0x0
- add r4, r2, #0x0
- cmp r5, #0x0
- beq _02001710
- add r0, #0x24
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1f
- str r3, [sp, #0x0]
- beq _020016CC
- mov r0, #0xff
- str r0, [sp, #0x4]
- add r0, r6, #0x0
- add r0, #0x20
- ldrb r2, [r0, #0x0]
- add r3, r4, #0x0
- lsl r0, r2, #0x18
- lsr r0, r0, #0x1c
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- lsl r0, r2, #0x1c
- add r2, r6, #0x0
- add r2, #0x21
- ldrb r2, [r2, #0x0]
- lsr r0, r0, #0x1c
- lsl r0, r0, #0x18
- lsl r2, r2, #0x1c
- lsr r2, r2, #0x1c
- lsl r2, r2, #0x18
- lsr r0, r0, #0x8
- lsr r2, r2, #0x10
- orr r0, r2
- orr r0, r1
- str r0, [sp, #0x8]
- add r0, r6, #0x0
- add r0, #0x22
- ldrb r0, [r0, #0x0]
- add r2, r5, #0x0
- lsl r0, r0, #0x1a
- lsr r0, r0, #0x1a
- str r0, [sp, #0xc]
- mov r0, #0x0
- str r0, [sp, #0x10]
- str r0, [sp, #0x14]
- ldr r0, [r6, #0xc]
- add r6, #0x24
- ldrb r1, [r6, #0x0]
- lsl r1, r1, #0x19
- lsr r1, r1, #0x19
- bl AddTextPrinterParameterized3
- add sp, #0x18
- pop {r4-r6, pc}
-_020016CC:
- mov r0, #0xff
- str r0, [sp, #0x4]
- ldrb r1, [r6, #0x18]
- add r3, r4, #0x0
- lsl r0, r1, #0x1c
- lsr r0, r0, #0x1c
- lsl r0, r0, #0x18
- lsr r2, r0, #0x18
- ldrb r0, [r6, #0x17]
- lsl r1, r1, #0x18
- lsr r1, r1, #0x1c
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1c
- lsl r0, r0, #0x18
- lsl r1, r1, #0x18
- lsr r0, r0, #0x8
- lsr r1, r1, #0x10
- orr r0, r1
- orr r0, r2
- str r0, [sp, #0x8]
- ldrh r0, [r6, #0x1a]
- add r2, r5, #0x0
- lsl r0, r0, #0x1d
- lsr r0, r0, #0x1d
- str r0, [sp, #0xc]
- mov r0, #0x0
- str r0, [sp, #0x10]
- str r0, [sp, #0x14]
- ldrh r1, [r6, #0x1a]
- ldr r0, [r6, #0xc]
- lsl r1, r1, #0x11
- lsr r1, r1, #0x1a
- bl AddTextPrinterParameterized3
-_02001710:
- add sp, #0x18
- pop {r4-r6, pc}
-
thumb_func_start ListMenuPrintEntries
ListMenuPrintEntries: ; 0x02001714
push {r4-r7, lr}
diff --git a/arm9/global.inc b/arm9/global.inc
index dddc91cb..8c0a01db 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -201,7 +201,7 @@
.extern FUN_02001464
.extern ListMenuGetTemplateField
.extern ListMenuSetTemplateField
-.extern FUN_02001658
+.extern ListMenuPrint
.extern FUN_02001B80
.extern FUN_02001B8C
.extern FUN_02001C14
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index 96ff03e2..6f55f226 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -22312,7 +22312,7 @@ _02244268:
ldr r1, [sp]
str r0, [r5, #8]
ldr r0, [sp, #4]
- bl FUN_02001658
+ bl ListMenuPrint
mov r0, #0
strb r0, [r5, #0x1c]
ldr r0, [sp, #4]
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);
+ }
+ }
+}
diff --git a/arm9/src/text.c b/arm9/src/text.c
index 3034baab..23e6ca67 100644
--- a/arm9/src/text.c
+++ b/arm9/src/text.c
@@ -18,14 +18,14 @@ extern struct TextPrinter *FUN_0201B6C8(void);
extern void FUN_0200CAB4(u32 param0);
extern void FUN_0201C1A8(struct TextPrinter *printer);
-extern void CopyWindowToVram(u32 windowId);
+extern void CopyWindowToVram(struct Window * window);
extern u32 FontFunc(u8 fontId, struct TextPrinter *printer);
extern void *FUN_02006BB0(u32 param0, u32 param1, u32 param2, struct TextPrinter **param3, u32 param4);
-extern u32 FUN_0201AB0C(u32 windowId);
-extern void FUN_02019658(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8, u32 param9);
+extern u32 FUN_0201AB0C(struct Window * window);
+extern void FUN_02019658(struct Window * param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8, u32 param9);
THUMB_FUNC void SetFontsPointer(const struct FontInfo *fonts)
@@ -99,11 +99,11 @@ THUMB_FUNC void FUN_0201BD7C(u32 param0)
FUN_0201BCFC(param0);
}
-THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
- printerTemplate.windowId = windowId;
+ printerTemplate.window = window;
printerTemplate.currentChar = str;
printerTemplate.fontId = fontId;
printerTemplate.x = (u8)x;
@@ -122,11 +122,11 @@ THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *s
return AddTextPrinter(&printerTemplate, speed, callback);
}
-THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
- printerTemplate.windowId = windowId;
+ printerTemplate.window = window;
printerTemplate.currentChar = str;
printerTemplate.fontId = fontId;
printerTemplate.x = (u8)x;
@@ -145,13 +145,13 @@ THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *
return AddTextPrinter(&printerTemplate, speed, callback);
}
-THUMB_FUNC u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
- printerTemplate.windowId = windowId;
+ printerTemplate.window = window;
printerTemplate.currentChar = str;
- printerTemplate.fontId = fontId;
+ printerTemplate.fontId = (u8)fontId;
printerTemplate.x = (u8)x;
printerTemplate.y = (u8)y;
printerTemplate.currentX = (u8)x;
@@ -214,7 +214,7 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s
}
if (speed != 0xff)
{
- CopyWindowToVram(printer->printerTemplate.windowId); // CopyWindowToVram?
+ CopyWindowToVram(printer->printerTemplate.window); // CopyWindowToVram?
}
FUN_0201C238(printer);
FreeToHeap((void *)printer);
@@ -235,7 +235,7 @@ THUMB_FUNC void RunTextPrinter(u32 param0, struct TextPrinter *printer)
switch (temp)
{
case 0:
- CopyWindowToVram(printer->printerTemplate.windowId);
+ CopyWindowToVram(printer->printerTemplate.window);
//fallthrough
case 3:
if (printer->callback == NULL)
@@ -343,14 +343,14 @@ THUMB_FUNC void *FUN_0201C1B0(void)
THUMB_FUNC void FUN_0201C1EC(struct TextPrinter *printer, u32 param1, u32 param2, u32 param3)
{
#pragma unused (param1, param2)
- u32 windowId = printer->printerTemplate.windowId;
+ struct Window * window = printer->printerTemplate.window;
if (printer->Unk2C == NULL)
{
printer->Unk2C = FUN_0201C1B0();
}
u32 r6 = (u32)printer->Unk2C + param3 * (sizeof(struct TextPrinter) * 8);
- u32 r2 = ((FUN_0201AB0C(windowId) - 3) << 0x13) >> 0x10;
- FUN_02019658(windowId, r6, 0, 0, 24, 32, r2, 0, 24, 32);
+ u32 r2 = ((FUN_0201AB0C(window) - 3) << 0x13) >> 0x10;
+ FUN_02019658(window, r6, 0, 0, 24, 32, r2, 0, 24, 32);
}
THUMB_FUNC void FUN_0201C238(struct TextPrinter *printer)
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
@@ -12,13 +14,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;
diff --git a/include/text.h b/include/text.h
index 40f4d03a..1218a0b3 100644
--- a/include/text.h
+++ b/include/text.h
@@ -3,10 +3,17 @@
#include "global.h"
+// TODO: Move to its own header, and fill it out
+struct Window
+{
+ u8 * unk_00;
+ u8 unk_04;
+};
+
struct TextPrinterTemplate
{
const u16* currentChar;
- u32 windowId;
+ struct Window * window;
u8 padding[1];
u8 fontId;
u8 x;
@@ -69,9 +76,9 @@ BOOL FUN_0201BD44(u32 param0);
void FUN_0201BD5C(void);
u8 FUN_0201BD70(u32 param0);
void FUN_0201BD7C(u32 param0);
-u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16));
-u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16));
-u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16));
+u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16));
+u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16));
+u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16));
u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16));
void RunTextPrinter(u32 param0, struct TextPrinter *printer);
u32 RenderFont(struct TextPrinter *printer);