summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/error_message_reset.c4
-rw-r--r--arm9/src/list_menu.c155
-rw-r--r--arm9/src/script_buffers.c4
3 files changed, 153 insertions, 10 deletions
diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c
index f70fec0f..6bff812a 100644
--- a/arm9/src/error_message_reset.c
+++ b/arm9/src/error_message_reset.c
@@ -27,7 +27,7 @@ extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2);
extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3);
extern void FUN_02017FE4(u32 param0, u32 param1);
extern void FUN_02019150(u32 *param0, u32 *param1, const u32 *param2);
-extern void FUN_020196F4(u32 *, u8, u16, u16, u16, u16);
+extern void FillWindowPixelRect(u32 *, u8, u16, u16, u16, u16);
extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3);
extern void FUN_0200E394(u32 param0);
extern void FUN_0200A274(u32 param0, u32 param1, u32 param2);
@@ -98,7 +98,7 @@ THUMB_FUNC void PrintErrorMessageAndReset()
FUN_0201BD5C();
FUN_02019150(ptr, buf, UNK_020FF49C);
- FUN_020196F4(buf, 15, 0, 0, 0xd0, 0x90);
+ FillWindowPixelRect(buf, 15, 0, 0, 0xd0, 0x90);
FUN_0200CCA4(buf, 0, 0x1f7, 2);
ReadMsgDataIntoString(msg_data, 3, str);
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;
+}
diff --git a/arm9/src/script_buffers.c b/arm9/src/script_buffers.c
index e9a55051..55ceca6a 100644
--- a/arm9/src/script_buffers.c
+++ b/arm9/src/script_buffers.c
@@ -22,7 +22,7 @@ extern void StrAddChar(struct String * str, u16 val);
extern void * FUN_02006BB0(NarcId, s32, s32, struct UnkStruct_0200B870_sub **, u32);
extern BOOL UncompressFromNarc(NarcId narcId, s32 memberNo, BOOL a2, u32 heap_id, BOOL a4);
extern void FUN_02019658(int, u8 *, u16, u16, u16, u16, u16, u16, u16, u16);
-extern void FUN_020196F4(int, u8, u16, u16, u16, u16);
+extern void FillWindowPixelRect(int, u8, u16, u16, u16, u16);
const u16 UNK_020ECE6C[][2] = {
{ 0x0140, 0x0008 },
@@ -819,7 +819,7 @@ void FUN_0200B9EC(struct UnkStruct_0200B870 * string, u32 value, u32 n, enum Pri
}
else
{
- FUN_020196F4(sp30, (u8)string->unk_28, (u16)r5, (u16)r7, 8, 8);
+ FillWindowPixelRect(sp30, (u8)string->unk_28, (u16)r5, (u16)r7, 8, 8);
}
r5 += 8;
}