Merge branch 'master' of https://github.com/pret/pokeemerald into ui-standardize
This commit is contained in:
@@ -13,6 +13,10 @@
|
||||
#include "sound.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
// Cursors after this point are created using a sprite with their own task.
|
||||
// This allows them to have idle animations. Cursors prior to this are simply printed text.
|
||||
#define CURSOR_OBJECT_START CURSOR_RED_OUTLINE
|
||||
|
||||
struct UnkIndicatorsStruct
|
||||
{
|
||||
u8 field_0;
|
||||
@@ -70,7 +74,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn
|
||||
static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
|
||||
static void ListMenuDrawCursor(struct ListMenu *list);
|
||||
static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 onInit);
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind);
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorObjId);
|
||||
static void Task_ScrollIndicatorArrowPair(u8 taskId);
|
||||
static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor);
|
||||
static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor);
|
||||
@@ -78,9 +82,9 @@ static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y);
|
||||
static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y);
|
||||
static void ListMenuRemoveRedOutlineCursorObject(u8 taskId);
|
||||
static void ListMenuRemoveRedArrowCursorObject(u8 taskId);
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind);
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind);
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind);
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorObjId);
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorObjId);
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorObjId);
|
||||
static void SpriteCallback_ScrollIndicatorArrow(struct Sprite *sprite);
|
||||
static void SpriteCallback_RedArrowCursor(struct Sprite *sprite);
|
||||
|
||||
@@ -301,10 +305,10 @@ static const struct SpriteTemplate sSpriteTemplate_RedArrowCursor =
|
||||
.callback = SpriteCallback_RedArrowCursor,
|
||||
};
|
||||
|
||||
static const u16 sRedArrowPal[] = INCBIN_U16("graphics/interface/red_arrow.gbapal");
|
||||
static const u32 sRedArrowOtherGfx[] = INCBIN_U32("graphics/interface/red_arrow_other.4bpp.lz");
|
||||
static const u32 sSelectorOutlineGfx[] = INCBIN_U32("graphics/interface/selector_outline.4bpp.lz");
|
||||
static const u32 sRedArrowGfx[] = INCBIN_U32("graphics/interface/red_arrow.4bpp.lz");
|
||||
static const u16 sRedInterface_Pal[] = INCBIN_U16("graphics/interface/red.gbapal"); // Shared by all of the below gfx
|
||||
static const u32 sScrollIndicator_Gfx[] = INCBIN_U32("graphics/interface/scroll_indicator.4bpp.lz");
|
||||
static const u32 sOutlineCursor_Gfx[] = INCBIN_U32("graphics/interface/outline_cursor.4bpp.lz");
|
||||
static const u32 sArrowCursor_Gfx[] = INCBIN_U32("graphics/interface/arrow_cursor.4bpp.lz");
|
||||
|
||||
// code
|
||||
static void ListMenuDummyTask(u8 taskId)
|
||||
@@ -440,13 +444,13 @@ s32 ListMenu_ProcessInput(u8 listTaskId)
|
||||
break;
|
||||
case LIST_MULTIPLE_SCROLL_DPAD:
|
||||
// note: JOY_REPEAT won't match here
|
||||
leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT;
|
||||
rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT;
|
||||
leftButton = JOY_REPEAT(DPAD_LEFT);
|
||||
rightButton = JOY_REPEAT(DPAD_RIGHT);
|
||||
break;
|
||||
case LIST_MULTIPLE_SCROLL_L_R:
|
||||
// same as above
|
||||
leftButton = gMain.newAndRepeatedKeys & L_BUTTON;
|
||||
rightButton = gMain.newAndRepeatedKeys & R_BUTTON;
|
||||
leftButton = JOY_REPEAT(L_BUTTON);
|
||||
rightButton = JOY_REPEAT(R_BUTTON);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -477,7 +481,7 @@ void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
|
||||
*selectedRow = list->selectedRow;
|
||||
|
||||
if (list->taskId != TASK_NONE)
|
||||
ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - 2);
|
||||
ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - CURSOR_OBJECT_START);
|
||||
|
||||
DestroyTask(listTaskId);
|
||||
}
|
||||
@@ -650,31 +654,33 @@ static void ListMenuDrawCursor(struct ListMenu *list)
|
||||
u8 y = list->selectedRow * yMultiplier + list->template.upText_Y;
|
||||
switch (list->template.cursorKind)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_BLACK_ARROW:
|
||||
ListMenuPrint(list, gText_SelectorArrow2, x, y);
|
||||
break;
|
||||
case 1:
|
||||
case CURSOR_INVISIBLE:
|
||||
break;
|
||||
case 2:
|
||||
case CURSOR_RED_OUTLINE:
|
||||
if (list->taskId == TASK_NONE)
|
||||
list->taskId = ListMenuAddCursorObject(list, 0);
|
||||
list->taskId = ListMenuAddCursorObject(list, CURSOR_RED_OUTLINE - CURSOR_OBJECT_START);
|
||||
ListMenuUpdateCursorObject(list->taskId,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0);
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1,
|
||||
CURSOR_RED_OUTLINE - CURSOR_OBJECT_START);
|
||||
break;
|
||||
case 3:
|
||||
case CURSOR_RED_ARROW:
|
||||
if (list->taskId == TASK_NONE)
|
||||
list->taskId = ListMenuAddCursorObject(list, 1);
|
||||
list->taskId = ListMenuAddCursorObject(list, CURSOR_RED_ARROW - CURSOR_OBJECT_START);
|
||||
ListMenuUpdateCursorObject(list->taskId,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1);
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y,
|
||||
CURSOR_RED_ARROW - CURSOR_OBJECT_START);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#undef TASK_NONE
|
||||
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorObjId)
|
||||
{
|
||||
struct CursorStruct cursor;
|
||||
|
||||
@@ -686,13 +692,13 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
|
||||
cursor.palTag = TAG_NONE;
|
||||
cursor.palNum = 15;
|
||||
|
||||
return ListMenuAddCursorObjectInternal(&cursor, cursorKind);
|
||||
return ListMenuAddCursorObjectInternal(&cursor, cursorObjId);
|
||||
}
|
||||
|
||||
static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
|
||||
{
|
||||
u8 cursorKind = list->template.cursorKind;
|
||||
if (cursorKind == 0)
|
||||
if (cursorKind == CURSOR_BLACK_ARROW)
|
||||
{
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding;
|
||||
u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0);
|
||||
@@ -1071,18 +1077,18 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16
|
||||
struct ScrollIndicatorPair *data;
|
||||
u8 taskId;
|
||||
|
||||
spriteSheet.data = sRedArrowOtherGfx;
|
||||
spriteSheet.data = sScrollIndicator_Gfx;
|
||||
spriteSheet.size = 0x100;
|
||||
spriteSheet.tag = arrowInfo->tileTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
|
||||
if (arrowInfo->palTag == TAG_NONE)
|
||||
{
|
||||
LoadPalette(sRedArrowPal, OBJ_PLTT_ID(arrowInfo->palNum), PLTT_SIZE_4BPP);
|
||||
LoadPalette(sRedInterface_Pal, OBJ_PLTT_ID(arrowInfo->palNum), PLTT_SIZE_4BPP);
|
||||
}
|
||||
else
|
||||
{
|
||||
spritePal.data = sRedArrowPal;
|
||||
spritePal.data = sRedInterface_Pal;
|
||||
spritePal.tag = arrowInfo->palTag;
|
||||
LoadSpritePalette(&spritePal);
|
||||
}
|
||||
@@ -1190,39 +1196,39 @@ void RemoveScrollIndicatorArrowPair(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind)
|
||||
static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorObjId)
|
||||
{
|
||||
switch (cursorKind)
|
||||
switch (cursorObjId)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START:
|
||||
default:
|
||||
return ListMenuAddRedOutlineCursorObject(cursor);
|
||||
case 1:
|
||||
case CURSOR_RED_ARROW - CURSOR_OBJECT_START:
|
||||
return ListMenuAddRedArrowCursorObject(cursor);
|
||||
}
|
||||
}
|
||||
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind)
|
||||
static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorObjId)
|
||||
{
|
||||
switch (cursorKind)
|
||||
switch (cursorObjId)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START:
|
||||
ListMenuUpdateRedOutlineCursorObject(taskId, x, y);
|
||||
break;
|
||||
case 1:
|
||||
case CURSOR_RED_ARROW - CURSOR_OBJECT_START:
|
||||
ListMenuUpdateRedArrowCursorObject(taskId, x, y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind)
|
||||
static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorObjId)
|
||||
{
|
||||
switch (cursorKind)
|
||||
switch (cursorObjId)
|
||||
{
|
||||
case 0:
|
||||
case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START:
|
||||
ListMenuRemoveRedOutlineCursorObject(taskId);
|
||||
break;
|
||||
case 1:
|
||||
case CURSOR_RED_ARROW - CURSOR_OBJECT_START:
|
||||
ListMenuRemoveRedArrowCursorObject(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -1317,18 +1323,18 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor)
|
||||
struct SpriteTemplate spriteTemplate;
|
||||
u8 taskId;
|
||||
|
||||
spriteSheet.data = sSelectorOutlineGfx;
|
||||
spriteSheet.data = sOutlineCursor_Gfx;
|
||||
spriteSheet.size = 0x100;
|
||||
spriteSheet.tag = cursor->tileTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
|
||||
if (cursor->palTag == TAG_NONE)
|
||||
{
|
||||
LoadPalette(sRedArrowPal, OBJ_PLTT_ID(cursor->palNum), PLTT_SIZE_4BPP);
|
||||
LoadPalette(sRedInterface_Pal, OBJ_PLTT_ID(cursor->palNum), PLTT_SIZE_4BPP);
|
||||
}
|
||||
else
|
||||
{
|
||||
spritePal.data = sRedArrowPal;
|
||||
spritePal.data = sRedInterface_Pal;
|
||||
spritePal.tag = cursor->palTag;
|
||||
LoadSpritePalette(&spritePal);
|
||||
}
|
||||
@@ -1402,18 +1408,18 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor)
|
||||
struct SpriteTemplate spriteTemplate;
|
||||
u8 taskId;
|
||||
|
||||
spriteSheet.data = sRedArrowGfx;
|
||||
spriteSheet.data = sArrowCursor_Gfx;
|
||||
spriteSheet.size = 0x80;
|
||||
spriteSheet.tag = cursor->tileTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
|
||||
if (cursor->palTag == TAG_NONE)
|
||||
{
|
||||
LoadPalette(sRedArrowPal, OBJ_PLTT_ID(cursor->palNum), PLTT_SIZE_4BPP);
|
||||
LoadPalette(sRedInterface_Pal, OBJ_PLTT_ID(cursor->palNum), PLTT_SIZE_4BPP);
|
||||
}
|
||||
else
|
||||
{
|
||||
spritePal.data = sRedArrowPal;
|
||||
spritePal.data = sRedInterface_Pal;
|
||||
spritePal.tag = cursor->palTag;
|
||||
LoadSpritePalette(&spritePal);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user