Finish pokenav list ui doc

This commit is contained in:
GriffinR
2021-11-14 22:21:50 -05:00
parent 7e27a0746d
commit d4d4234283
6 changed files with 135 additions and 134 deletions
+6 -6
View File
@@ -327,19 +327,19 @@ void SetVBlankCallback_(IntrCallback callback);
bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset); bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset);
bool32 IsCreatePokenavListTaskActive(void); bool32 IsCreatePokenavListTaskActive(void);
void DestroyPokenavList(void); void DestroyPokenavList(void);
u32 GetSelectedPokenavListIndex(void); u32 PokenavList_GetSelectedIndex(void);
int PokenavList_MoveCursorUp(void); int PokenavList_MoveCursorUp(void);
int PokenavList_MoveCursorDown(void); int PokenavList_MoveCursorDown(void);
int PokenavList_PageDown(void); int PokenavList_PageDown(void);
int PokenavList_PageUp(void); int PokenavList_PageUp(void);
bool32 IsMovePokenavListWindowTaskActive(void); bool32 PokenavList_IsMoveWindowTaskActive(void);
void PokenavList_ToggleVerticalArrows(bool32 shouldHide); void PokenavList_ToggleVerticalArrows(bool32 shouldHide);
void PokenavList_DrawCurrentItemIcon(void); void PokenavList_DrawCurrentItemIcon(void);
void sub_81C877C(void); void PokenavList_EraseListForCheckPage(void);
bool32 IsMatchCallListTaskActive(void); bool32 PokenavList_IsTaskActive(void);
void PrintCheckPageInfo(s16 a0); void PrintCheckPageInfo(s16 a0);
u32 GetMatchCallListTopIndex(void); u32 PokenavList_GetTopIndex(void);
void sub_81C87F0(void); void PokenavList_ReshowListFromCheckPage(void);
// pokenav_match_call_data.c // pokenav_match_call_data.c
bool32 MatchCall_HasCheckPage(u32 idx); bool32 MatchCall_HasCheckPage(u32 idx);
+6 -6
View File
@@ -200,7 +200,7 @@ static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu)
else if (JOY_NEW(A_BUTTON)) else if (JOY_NEW(A_BUTTON))
{ {
// Entering graph menu // Entering graph menu
menu->monList->currIndex = GetSelectedPokenavListIndex(); menu->monList->currIndex = PokenavList_GetSelectedIndex();
menu->saveResultsList = TRUE; menu->saveResultsList = TRUE;
menu->callback = OpenConditionGraphFromSearchList; menu->callback = OpenConditionGraphFromSearchList;
return CONDITION_SEARCH_FUNC_SELECT_MON; return CONDITION_SEARCH_FUNC_SELECT_MON;
@@ -241,7 +241,7 @@ static u16 GetSearchResultsMonListCount(void)
static s32 GetSearchResultsSelectedMonRank(void) static s32 GetSearchResultsSelectedMonRank(void)
{ {
struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS);
s32 i = GetSelectedPokenavListIndex(); s32 i = PokenavList_GetSelectedIndex();
return menu->monList->monData[i].data; return menu->monList->monData[i].data;
} }
@@ -498,7 +498,7 @@ static u32 LoopedTask_MoveSearchListCursorUp(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -531,7 +531,7 @@ static u32 LoopedTask_MoveSearchListCursorDown(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -564,7 +564,7 @@ static u32 LoopedTask_MoveSearchListPageUp(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -597,7 +597,7 @@ static u32 LoopedTask_MoveSearchListPageDown(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
+2 -2
View File
@@ -92,7 +92,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state)
{ {
state->callback = CB2_HandleMatchCallOptionsInput; state->callback = CB2_HandleMatchCallOptionsInput;
state->optionCursorPos = 0; state->optionCursorPos = 0;
selection = GetSelectedPokenavListIndex(); selection = PokenavList_GetSelectedIndex();
if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId)) if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId))
{ {
@@ -489,7 +489,7 @@ bool32 unref_sub_81CB16C(void)
static bool32 ShouldDoNearbyMessage(void) static bool32 ShouldDoNearbyMessage(void)
{ {
struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN);
int selection = GetSelectedPokenavListIndex(); int selection = PokenavList_GetSelectedIndex();
if (!state->matchCallEntries[selection].isSpecialTrainer) if (!state->matchCallEntries[selection].isSpecialTrainer)
{ {
if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId) if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId)
+20 -20
View File
@@ -414,7 +414,7 @@ static u32 MatchCallListCursorDown(s32 state)
} }
break; break;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
PrintMatchCallLocation(gfx, 0); PrintMatchCallLocation(gfx, 0);
@@ -451,7 +451,7 @@ static u32 MatchCallListCursorUp(s32 state)
} }
break; break;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
PrintMatchCallLocation(gfx, 0); PrintMatchCallLocation(gfx, 0);
@@ -488,7 +488,7 @@ static u32 MatchCallListPageDown(s32 state)
} }
break; break;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
PrintMatchCallLocation(gfx, 0); PrintMatchCallLocation(gfx, 0);
@@ -525,7 +525,7 @@ static u32 MatchCallListPageUp(s32 state)
} }
break; break;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
PrintMatchCallLocation(gfx, 0); PrintMatchCallLocation(gfx, 0);
@@ -722,11 +722,11 @@ static u32 ShowCheckPage(s32 state)
{ {
case 0: case 0:
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_81C877C(); PokenavList_EraseListForCheckPage();
UpdateWindowsToShowCheckPage(gfx); UpdateWindowsToShowCheckPage(gfx);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMatchCallListTaskActive() || IsDma3ManagerBusyWithBgCopy1(gfx)) if (PokenavList_IsTaskActive() || IsDma3ManagerBusyWithBgCopy1(gfx))
return LT_PAUSE; return LT_PAUSE;
PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); PrintHelpBarText(HELPBAR_MC_CHECK_PAGE);
@@ -736,7 +736,7 @@ static u32 ShowCheckPage(s32 state)
LoadCheckPageTrainerPic(gfx); LoadCheckPageTrainerPic(gfx);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 3: case 3:
if (IsMatchCallListTaskActive() || WaitForTrainerPic(gfx) || WaitForHelpBar()) if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx) || WaitForHelpBar())
return LT_PAUSE; return LT_PAUSE;
break; break;
} }
@@ -752,7 +752,7 @@ static u32 ShowCheckPageDown(s32 state)
switch (state) switch (state)
{ {
case 0: case 0:
topId = GetMatchCallListTopIndex(); topId = PokenavList_GetTopIndex();
delta = GetIndexDeltaOfNextCheckPageDown(topId); delta = GetIndexDeltaOfNextCheckPageDown(topId);
if (delta) if (delta)
{ {
@@ -775,7 +775,7 @@ static u32 ShowCheckPageDown(s32 state)
LoadCheckPageTrainerPic(gfx); LoadCheckPageTrainerPic(gfx);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 4: case 4:
if (IsMatchCallListTaskActive() || WaitForTrainerPic(gfx)) if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx))
return LT_PAUSE; return LT_PAUSE;
break; break;
} }
@@ -791,10 +791,10 @@ static u32 ExitCheckPage(s32 state)
case 0: case 0:
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
TrainerPicSlideOffscreen(gfx); TrainerPicSlideOffscreen(gfx);
sub_81C87F0(); PokenavList_ReshowListFromCheckPage();
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMatchCallListTaskActive() || WaitForTrainerPic(gfx)) if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx))
return LT_PAUSE; return LT_PAUSE;
PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); PrintHelpBarText(HELPBAR_MC_TRAINER_LIST);
@@ -817,7 +817,7 @@ static u32 ShowCheckPageUp(s32 state)
switch (state) switch (state)
{ {
case 0: case 0:
topId = GetMatchCallListTopIndex(); topId = PokenavList_GetTopIndex();
delta = GetIndexDeltaOfNextCheckPageUp(topId); delta = GetIndexDeltaOfNextCheckPageUp(topId);
if (delta) if (delta)
{ {
@@ -840,7 +840,7 @@ static u32 ShowCheckPageUp(s32 state)
LoadCheckPageTrainerPic(gfx); LoadCheckPageTrainerPic(gfx);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 4: case 4:
if (IsMatchCallListTaskActive() || WaitForTrainerPic(gfx)) if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx))
return LT_PAUSE; return LT_PAUSE;
break; break;
} }
@@ -929,11 +929,11 @@ enum {
POKEBALL_ICON_EMPTY, POKEBALL_ICON_EMPTY,
}; };
static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 arg2) static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 tileOffset)
{ {
u8 bg = GetWindowAttribute(windowId, WINDOW_BG); u8 bg = GetWindowAttribute(windowId, WINDOW_BG);
u16 *tilemap = GetBgTilemapBuffer(bg); u16 *tilemap = GetBgTilemapBuffer(bg);
tilemap += arg2 * 0x40 + 0x1D; tilemap += tileOffset * 64 + 0x1D;
if (ShouldDrawRematchPokeballIcon(rematchId)) if (ShouldDrawRematchPokeballIcon(rematchId))
{ {
tilemap[0] = POKEBALL_ICON_TOP; tilemap[0] = POKEBALL_ICON_TOP;
@@ -946,11 +946,11 @@ static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 arg2)
} }
} }
void ClearRematchPokeballIcon(u16 windowId, u32 arg0) void ClearRematchPokeballIcon(u16 windowId, u32 tileOffset)
{ {
u8 bg = GetWindowAttribute(windowId, WINDOW_BG); u8 bg = GetWindowAttribute(windowId, WINDOW_BG);
u16 *tilemap = GetBgTilemapBuffer(bg); u16 *tilemap = GetBgTilemapBuffer(bg);
tilemap += arg0 * 0x40 + 0x1D; tilemap += tileOffset * 64 + 0x1D;
tilemap[0] = POKEBALL_ICON_EMPTY; tilemap[0] = POKEBALL_ICON_EMPTY;
tilemap[0x20] = POKEBALL_ICON_EMPTY; tilemap[0x20] = POKEBALL_ICON_EMPTY;
} }
@@ -1021,7 +1021,7 @@ static void PrintMatchCallLocation(struct Pokenav_MatchCallGfx *gfx, int delta)
{ {
u8 mapName[32]; u8 mapName[32];
int x; int x;
int index = GetSelectedPokenavListIndex() + delta; int index = PokenavList_GetSelectedIndex() + delta;
int mapSec = GetMatchCallMapSec(index); int mapSec = GetMatchCallMapSec(index);
if (mapSec != MAPSEC_NONE) if (mapSec != MAPSEC_NONE)
GetMapName(mapName, mapSec, 0); GetMapName(mapName, mapSec, 0);
@@ -1138,7 +1138,7 @@ static bool32 WaitForTrainerIsCloseByText(struct Pokenav_MatchCallGfx *gfx)
static void PrintMatchCallMessage(struct Pokenav_MatchCallGfx *gfx) static void PrintMatchCallMessage(struct Pokenav_MatchCallGfx *gfx)
{ {
int index = GetSelectedPokenavListIndex(); int index = PokenavList_GetSelectedIndex();
const u8 *str = GetMatchCallMessageText(index, &gfx->newRematchRequest); const u8 *str = GetMatchCallMessageText(index, &gfx->newRematchRequest);
u8 speed = GetPlayerTextSpeedDelay(); u8 speed = GetPlayerTextSpeedDelay();
AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, str, 32, 1, speed, NULL); AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, str, 32, 1, speed, NULL);
@@ -1244,7 +1244,7 @@ static struct Sprite *CreateTrainerPicSprite(void)
static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *gfx) static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *gfx)
{ {
u16 cursor; u16 cursor;
int trainerPic = GetMatchCallTrainerPic(GetSelectedPokenavListIndex()); int trainerPic = GetMatchCallTrainerPic(PokenavList_GetSelectedIndex());
if (trainerPic >= 0) if (trainerPic >= 0)
{ {
DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], gfx->trainerPicGfx, SPECIES_NONE); DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], gfx->trainerPicGfx, SPECIES_NONE);
+94 -93
View File
@@ -29,11 +29,10 @@ struct PokenavListWindowState {
// The index of the element at the top of the window. // The index of the element at the top of the window.
u16 windowTopIndex; u16 windowTopIndex;
u16 listLength; u16 listLength;
u16 unk4; u16 entriesOffscreen;
// The index of the cursor, relative to the top of the window. // The index of the cursor, relative to the top of the window.
u16 selectedIndexOffset; u16 selectedIndexOffset;
u16 visibleEntries; u16 entriesOnscreen;
u16 unkA;
u32 listItemSize; u32 listItemSize;
void * listPtr; void * listPtr;
}; };
@@ -63,7 +62,7 @@ struct PokenavSub17
struct PokenavSub17Substruct list; struct PokenavSub17Substruct list;
u8 tilemapBuffer[BG_SCREEN_SIZE]; u8 tilemapBuffer[BG_SCREEN_SIZE];
struct PokenavListWindowState windowState; struct PokenavListWindowState windowState;
s32 unk89C; s32 eraseIndex;
u32 loopedTaskId; u32 loopedTaskId;
}; };
@@ -81,7 +80,7 @@ static void PrintMatchCallFlavorText(struct PokenavListWindowState *, struct Pok
static void PrintMatchCallFieldNames(struct PokenavSub17Substruct *, u32); static void PrintMatchCallFieldNames(struct PokenavSub17Substruct *, u32);
static void PrintMatchCallListTrainerName(struct PokenavListWindowState *, struct PokenavSub17Substruct *); static void PrintMatchCallListTrainerName(struct PokenavListWindowState *, struct PokenavSub17Substruct *);
static void PrintCheckPageTrainerName(struct PokenavListWindowState *, struct PokenavSub17Substruct *); static void PrintCheckPageTrainerName(struct PokenavListWindowState *, struct PokenavSub17Substruct *);
static void sub_81C8B70(struct PokenavListMenuWindow *, s32, s32); static void EraseListEntry(struct PokenavListMenuWindow *, s32, s32);
static void CreateMoveListWindowTask(s32, struct PokenavSub17Substruct *); static void CreateMoveListWindowTask(s32, struct PokenavSub17Substruct *);
static void PrintListItems(void *, u32, u32, u32, u32, struct PokenavSub17Substruct *); static void PrintListItems(void *, u32, u32, u32, u32, struct PokenavSub17Substruct *);
static void InitListItems(struct PokenavListWindowState *, struct PokenavSub17Substruct *); static void InitListItems(struct PokenavListWindowState *, struct PokenavSub17Substruct *);
@@ -90,14 +89,14 @@ static u32 LoopedTask_CreatePokenavList(s32);
static bool32 IsPrintListItemsTaskActive(void); static bool32 IsPrintListItemsTaskActive(void);
static u32 LoopedTask_PrintListItems(s32); static u32 LoopedTask_PrintListItems(s32);
static u32 LoopedTask_MoveListWindow(s32); static u32 LoopedTask_MoveListWindow(s32);
static u32 LoopedTask_sub_81C8870(s32); static u32 LoopedTask_EraseListForCheckPage(s32);
static u32 LoopedTask_sub_81C8A28(s32); static u32 LoopedTask_ReshowListFromCheckPage(s32);
static u32 LoopedTask_PrintCheckPageInfo(s32); static u32 LoopedTask_PrintCheckPageInfo(s32);
static const u16 sListArrow_Pal[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal"); static const u16 sListArrow_Pal[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal");
static const u32 sListArrow_Gfx[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz"); static const u32 sListArrow_Gfx[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz");
static EWRAM_DATA u32 gUnknown_0203CF44 = 0; static EWRAM_DATA u32 sMoveWindowDownIndex = 0; // Read, but pointlessly
bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset) bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset)
{ {
@@ -187,8 +186,8 @@ static void InitPokenavListWindow(struct PokenavListMenuWindow *listWindow)
static void InitListItems(struct PokenavListWindowState *windowState, struct PokenavSub17Substruct *a1) static void InitListItems(struct PokenavListWindowState *windowState, struct PokenavSub17Substruct *a1)
{ {
s32 numToPrint = windowState->listLength - windowState->windowTopIndex; s32 numToPrint = windowState->listLength - windowState->windowTopIndex;
if (numToPrint > windowState->visibleEntries) if (numToPrint > windowState->entriesOnscreen)
numToPrint = windowState->visibleEntries; numToPrint = windowState->entriesOnscreen;
PrintListItems(windowState->listPtr, windowState->windowTopIndex, numToPrint, windowState->listItemSize, 0, a1); PrintListItems(windowState->listPtr, windowState->windowTopIndex, numToPrint, windowState->listItemSize, 0, a1);
} }
@@ -214,18 +213,18 @@ static bool32 IsPrintListItemsTaskActive(void)
static u32 LoopedTask_PrintListItems(s32 state) static u32 LoopedTask_PrintListItems(s32 state)
{ {
u32 v1; u32 row;
struct PokenavSub17Substruct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17Substruct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
switch (state) switch (state)
{ {
case 0: case 0:
v1 = (structPtr->listWindow.unkA + structPtr->listWindow.numPrinted + structPtr->unk10) & 0xF; row = (structPtr->listWindow.unkA + structPtr->listWindow.numPrinted + structPtr->unk10) & 0xF;
structPtr->bufferItemFunc(structPtr->listPtr, structPtr->itemTextBuffer); structPtr->bufferItemFunc(structPtr->listPtr, structPtr->itemTextBuffer);
if (structPtr->iconDrawFunc != NULL) if (structPtr->iconDrawFunc != NULL)
structPtr->iconDrawFunc(structPtr->listWindow.windowId, structPtr->printIndex, v1); structPtr->iconDrawFunc(structPtr->listWindow.windowId, structPtr->printIndex, row);
AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->itemTextBuffer, 8, (v1 << 4) + 1, 255, NULL); AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->itemTextBuffer, 8, (row << 4) + 1, TEXT_SKIP_DRAW, NULL);
if (++structPtr->listWindow.numPrinted >= structPtr->listWindow.numToPrint) if (++structPtr->listWindow.numPrinted >= structPtr->listWindow.numToPrint)
{ {
// Finished printing items. If icons were being drawn, draw the // Finished printing items. If icons were being drawn, draw the
@@ -250,22 +249,22 @@ static u32 LoopedTask_PrintListItems(s32 state)
return LT_FINISH; return LT_FINISH;
} }
bool32 ShouldShowUpArrow(void) static bool32 ShouldShowUpArrow(void)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
return (structPtr->windowState.windowTopIndex != 0); return (structPtr->windowState.windowTopIndex != 0);
} }
bool32 ShouldShowDownArrow(void) static bool32 ShouldShowDownArrow(void)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
struct PokenavListWindowState *subPtr = &structPtr->windowState; struct PokenavListWindowState *subPtr = &structPtr->windowState;
return (subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength); return (subPtr->windowTopIndex + subPtr->entriesOnscreen < subPtr->listLength);
} }
static void MoveListWindow(s32 delta, bool32 a1) static void MoveListWindow(s32 delta, bool32 printItems)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
struct PokenavListWindowState *subPtr = &structPtr->windowState; struct PokenavListWindowState *subPtr = &structPtr->windowState;
@@ -274,16 +273,16 @@ static void MoveListWindow(s32 delta, bool32 a1)
{ {
if (subPtr->windowTopIndex + delta < 0) if (subPtr->windowTopIndex + delta < 0)
delta = -1 * subPtr->windowTopIndex; delta = -1 * subPtr->windowTopIndex;
if (a1) if (printItems)
PrintListItems(subPtr->listPtr, subPtr->windowTopIndex + delta, delta * -1, subPtr->listItemSize, delta, &structPtr->list); PrintListItems(subPtr->listPtr, subPtr->windowTopIndex + delta, delta * -1, subPtr->listItemSize, delta, &structPtr->list);
} }
else if (a1) else if (printItems)
{ {
s32 temp = gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries; s32 index = sMoveWindowDownIndex = subPtr->windowTopIndex + subPtr->entriesOnscreen;
if (temp + delta >= subPtr->listLength) if (index + delta >= subPtr->listLength)
delta = subPtr->listLength - temp; delta = subPtr->listLength - index;
PrintListItems(subPtr->listPtr, gUnknown_0203CF44, delta, subPtr->listItemSize, subPtr->visibleEntries, &structPtr->list); PrintListItems(subPtr->listPtr, index, delta, subPtr->listItemSize, subPtr->entriesOnscreen, &structPtr->list);
} }
CreateMoveListWindowTask(delta, &structPtr->list); CreateMoveListWindowTask(delta, &structPtr->list);
@@ -341,7 +340,7 @@ static u32 LoopedTask_MoveListWindow(s32 state)
return LT_FINISH; return LT_FINISH;
} }
bool32 IsMovePokenavListWindowTaskActive(void) bool32 PokenavList_IsMoveWindowTaskActive(void)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
return IsLoopedTaskActive(structPtr->list.loopedTaskId); return IsLoopedTaskActive(structPtr->list.loopedTaskId);
@@ -376,7 +375,7 @@ int PokenavList_MoveCursorDown(void)
if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1) if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1)
return 0; return 0;
if (structPtr->selectedIndexOffset < structPtr->visibleEntries - 1) if (structPtr->selectedIndexOffset < structPtr->entriesOnscreen - 1)
{ {
structPtr->selectedIndexOffset++; structPtr->selectedIndexOffset++;
return 1; return 1;
@@ -396,8 +395,8 @@ int PokenavList_PageUp(void)
if (ShouldShowUpArrow()) if (ShouldShowUpArrow())
{ {
if (structPtr->windowTopIndex >= structPtr->visibleEntries) if (structPtr->windowTopIndex >= structPtr->entriesOnscreen)
scroll = structPtr->visibleEntries; scroll = structPtr->entriesOnscreen;
else else
scroll = structPtr->windowTopIndex; scroll = structPtr->windowTopIndex;
MoveListWindow(scroll * -1, TRUE); MoveListWindow(scroll * -1, TRUE);
@@ -417,21 +416,21 @@ int PokenavList_PageDown(void)
if (ShouldShowDownArrow()) if (ShouldShowDownArrow())
{ {
s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->visibleEntries; s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->entriesOnscreen;
s32 scroll = structPtr->unk4 - structPtr->windowTopIndex; s32 scroll = structPtr->entriesOffscreen - structPtr->windowTopIndex;
if (windowBottomIndex <= structPtr->unk4) if (windowBottomIndex <= structPtr->entriesOffscreen)
scroll = structPtr->visibleEntries; scroll = structPtr->entriesOnscreen;
MoveListWindow(scroll, TRUE); MoveListWindow(scroll, TRUE);
return 2; return 2;
} }
else else
{ {
s32 cursor, lastVisibleIndex; s32 cursor, lastVisibleIndex;
if (structPtr->listLength >= structPtr->visibleEntries) if (structPtr->listLength >= structPtr->entriesOnscreen)
{ {
cursor = structPtr->selectedIndexOffset; cursor = structPtr->selectedIndexOffset;
lastVisibleIndex = structPtr->visibleEntries; lastVisibleIndex = structPtr->entriesOnscreen;
} }
else else
{ {
@@ -447,43 +446,43 @@ int PokenavList_PageDown(void)
} }
} }
u32 GetSelectedPokenavListIndex(void) u32 PokenavList_GetSelectedIndex(void)
{ {
struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); struct PokenavListWindowState *structPtr = GetPokenavListWindowState();
return structPtr->windowTopIndex + structPtr->selectedIndexOffset; return structPtr->windowTopIndex + structPtr->selectedIndexOffset;
} }
u32 GetMatchCallListTopIndex(void) u32 PokenavList_GetTopIndex(void)
{ {
struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); struct PokenavListWindowState *structPtr = GetPokenavListWindowState();
return structPtr->windowTopIndex; return structPtr->windowTopIndex;
} }
void sub_81C877C(void) void PokenavList_EraseListForCheckPage(void)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
structPtr->unk89C = 0; structPtr->eraseIndex = 0;
structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8870, 6); structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_EraseListForCheckPage, 6);
} }
void PrintCheckPageInfo(s16 delta) void PrintCheckPageInfo(s16 delta)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
structPtr->windowState.windowTopIndex += delta; structPtr->windowState.windowTopIndex += delta;
structPtr->unk89C = 0; structPtr->eraseIndex = 0;
structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6);
} }
void sub_81C87F0(void) void PokenavList_ReshowListFromCheckPage(void)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
structPtr->unk89C = 0; structPtr->eraseIndex = 0;
structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_ReshowListFromCheckPage, 6);
} }
bool32 IsMatchCallListTaskActive(void) bool32 PokenavList_IsTaskActive(void)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
return IsLoopedTaskActive(structPtr->loopedTaskId); return IsLoopedTaskActive(structPtr->loopedTaskId);
@@ -497,7 +496,7 @@ void PokenavList_DrawCurrentItemIcon(void)
CopyWindowToVram(structPtr->list.listWindow.windowId, COPYWIN_MAP); CopyWindowToVram(structPtr->list.listWindow.windowId, COPYWIN_MAP);
} }
static u32 LoopedTask_sub_81C8870(s32 state) static u32 LoopedTask_EraseListForCheckPage(s32 state)
{ {
struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST);
@@ -507,18 +506,18 @@ static u32 LoopedTask_sub_81C8870(s32 state)
ToggleListArrows(&structPtr->list, 1); ToggleListArrows(&structPtr->list, 1);
// fall-through // fall-through
case 1: case 1:
if (structPtr->unk89C != structPtr->windowState.selectedIndexOffset) if (structPtr->eraseIndex != structPtr->windowState.selectedIndexOffset)
sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, 1); EraseListEntry(&structPtr->list.listWindow, structPtr->eraseIndex, 1);
structPtr->unk89C++; structPtr->eraseIndex++;
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 2: case 2:
if (!IsDma3ManagerBusyWithBgCopy()) if (!IsDma3ManagerBusyWithBgCopy())
{ {
if (structPtr->unk89C != structPtr->windowState.visibleEntries) if (structPtr->eraseIndex != structPtr->windowState.entriesOnscreen)
return 6; return LT_SET_STATE(1);
if (structPtr->windowState.selectedIndexOffset != 0) if (structPtr->windowState.selectedIndexOffset != 0)
sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, structPtr->windowState.selectedIndexOffset); EraseListEntry(&structPtr->list.listWindow, structPtr->eraseIndex, structPtr->windowState.selectedIndexOffset);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
} }
@@ -535,7 +534,7 @@ static u32 LoopedTask_sub_81C8870(s32 state)
} }
return LT_PAUSE; return LT_PAUSE;
case 4: case 4:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
structPtr->windowState.selectedIndexOffset = 0; structPtr->windowState.selectedIndexOffset = 0;
@@ -582,7 +581,7 @@ static u32 LoopedTask_PrintCheckPageInfo(s32 state)
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
} }
static u32 LoopedTask_sub_81C8A28(s32 state) static u32 LoopedTask_ReshowListFromCheckPage(s32 state)
{ {
struct PokenavSub17 *structPtr; struct PokenavSub17 *structPtr;
struct PokenavListWindowState *windowState; struct PokenavListWindowState *windowState;
@@ -599,24 +598,26 @@ static u32 LoopedTask_sub_81C8A28(s32 state)
switch (state) switch (state)
{ {
case 0: case 0:
// Rewrite the name of the trainer whose check page was just being viewed.
// This is done to erase the red background it had.
PrintMatchCallListTrainerName(windowState, subPtr0); PrintMatchCallListTrainerName(windowState, subPtr0);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
ptr = &structPtr->unk89C; ptr = &structPtr->eraseIndex;
if (++(*ptr) < structPtr->windowState.visibleEntries) if (++(*ptr) < structPtr->windowState.entriesOnscreen)
{ {
sub_81C8B70(&subPtr0->listWindow, *ptr, 1); EraseListEntry(&subPtr0->listWindow, *ptr, 1);
return LT_PAUSE; return LT_PAUSE;
} }
*ptr = 0; *ptr = 0;
if (windowState->listLength <= windowState->visibleEntries) if (windowState->listLength <= windowState->entriesOnscreen)
{ {
if (windowState->windowTopIndex != 0) if (windowState->windowTopIndex != 0)
{ {
s32 r4 = windowState->windowTopIndex; s32 r4 = windowState->windowTopIndex;
r5 = -r4; r5 = -r4;
sub_81C8B70(&subPtr0->listWindow, r5, r4); EraseListEntry(&subPtr0->listWindow, r5, r4);
windowState->selectedIndexOffset = r4; windowState->selectedIndexOffset = r4;
*ptr = r5; *ptr = r5;
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
@@ -624,36 +625,36 @@ static u32 LoopedTask_sub_81C8A28(s32 state)
} }
else else
{ {
if (windowState->windowTopIndex + windowState->visibleEntries > windowState->listLength) if (windowState->windowTopIndex + windowState->entriesOnscreen > windowState->listLength)
{ {
s32 r4 = windowState->windowTopIndex + windowState->visibleEntries - windowState->listLength; s32 r4 = windowState->windowTopIndex + windowState->entriesOnscreen - windowState->listLength;
r5 = -r4; r5 = -r4;
sub_81C8B70(&subPtr0->listWindow, r5, r4); EraseListEntry(&subPtr0->listWindow, r5, r4);
windowState->selectedIndexOffset = r4; windowState->selectedIndexOffset = r4;
*ptr = r5; *ptr = r5;
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
} }
} }
return 9; return LT_SET_STATE(4);
case 2: case 2:
MoveListWindow(structPtr->unk89C, FALSE); MoveListWindow(structPtr->eraseIndex, FALSE);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 3: case 3:
if (!IsMovePokenavListWindowTaskActive()) if (!PokenavList_IsMoveWindowTaskActive())
{ {
structPtr->unk89C = 0; structPtr->eraseIndex = 0;
return 1; return LT_INC_AND_CONTINUE;
} }
return 2; return LT_PAUSE;
case 4: case 4:
PrintListItems(windowState->listPtr, windowState->windowTopIndex + structPtr->unk89C, 1, windowState->listItemSize, structPtr->unk89C, &structPtr->list); PrintListItems(windowState->listPtr, windowState->windowTopIndex + structPtr->eraseIndex, 1, windowState->listItemSize, structPtr->eraseIndex, &structPtr->list);
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 5: case 5:
if (IsPrintListItemsTaskActive()) if (IsPrintListItemsTaskActive())
return LT_PAUSE; return LT_PAUSE;
if (++structPtr->unk89C >= windowState->listLength || structPtr->unk89C >= windowState->visibleEntries) if (++structPtr->eraseIndex >= windowState->listLength || structPtr->eraseIndex >= windowState->entriesOnscreen)
return LT_INC_AND_CONTINUE; return LT_INC_AND_CONTINUE;
return 9; return LT_SET_STATE(4);
case 6: case 6:
ToggleListArrows(subPtr0, 0); ToggleListArrows(subPtr0, 0);
return LT_FINISH; return LT_FINISH;
@@ -662,15 +663,15 @@ static u32 LoopedTask_sub_81C8A28(s32 state)
return LT_FINISH; return LT_FINISH;
} }
static void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2)
{ {
u8 *tileData = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); u8 *tileData = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA);
u32 v2 = listWindow->width * 64; u32 width = listWindow->width * 64;
a1 = (listWindow->unkA + a1) & 0xF; a1 = (listWindow->unkA + a1) & 0xF;
if (a1 + a2 <= 16) if (a1 + a2 <= 16)
{ {
CpuFastFill8(PIXEL_FILL(1), tileData + a1 * v2, a2 * v2); CpuFastFill8(PIXEL_FILL(1), tileData + a1 * width, a2 * width);
CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); CopyWindowToVram(listWindow->windowId, COPYWIN_GFX);
} }
else else
@@ -678,8 +679,8 @@ static void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2
u32 v3 = 16 - a1; u32 v3 = 16 - a1;
u32 v4 = a2 - v3; u32 v4 = a2 - v3;
CpuFastFill8(PIXEL_FILL(1), tileData + a1 * v2, v3 * v2); CpuFastFill8(PIXEL_FILL(1), tileData + a1 * width, v3 * width);
CpuFastFill8(PIXEL_FILL(1), tileData, v4 * v2); CpuFastFill8(PIXEL_FILL(1), tileData, v4 * width);
CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); CopyWindowToVram(listWindow->windowId, COPYWIN_GFX);
} }
@@ -689,19 +690,20 @@ static void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2
CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); CopyWindowToVram(listWindow->windowId, COPYWIN_MAP);
} }
void sub_81C8C64(struct PokenavListMenuWindow *listWindow, u32 a1) // Pointless
static void SetListMarginTile(struct PokenavListMenuWindow *listWindow, bool32 draw)
{ {
u16 var; u16 var;
u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); u16 *tilemapBuffer = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG));
v1 += ((listWindow->unkA << 6) + listWindow->x) - 1; tilemapBuffer += (listWindow->unkA << 6) + listWindow->x - 1;
if (a1 != 0) if (draw)
var = (listWindow->fillValue << 12) | (listWindow->tileOffset + 1); var = (listWindow->fillValue << 12) | (listWindow->tileOffset + 1);
else else
var = (listWindow->fillValue << 12) | (listWindow->tileOffset); var = (listWindow->fillValue << 12) | (listWindow->tileOffset);
v1[0] = var; tilemapBuffer[0] = var;
v1[0x20] = var; tilemapBuffer[0x20] = var;
} }
// Print the trainer's name and title at the top of their check page // Print the trainer's name and title at the top of their check page
@@ -713,7 +715,7 @@ static void PrintCheckPageTrainerName(struct PokenavListWindowState *state, stru
list->iconDrawFunc(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); list->iconDrawFunc(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA);
FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16);
AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->itemTextBuffer); AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->itemTextBuffer);
sub_81C8C64(&list->listWindow, 1); SetListMarginTile(&list->listWindow, TRUE);
CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_FULL, 0, list->listWindow.unkA * 2, list->listWindow.width, 2); CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_FULL, 0, list->listWindow.unkA * 2, list->listWindow.width, 2);
} }
@@ -723,7 +725,7 @@ static void PrintMatchCallListTrainerName(struct PokenavListWindowState *state,
list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer);
FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16);
AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->itemTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->itemTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL);
sub_81C8C64(&list->listWindow, 0); SetListMarginTile(&list->listWindow, FALSE);
CopyWindowToVram(list->listWindow.windowId, COPYWIN_FULL); CopyWindowToVram(list->listWindow.windowId, COPYWIN_FULL);
} }
@@ -745,8 +747,7 @@ static void PrintMatchCallFieldNames(struct PokenavSub17Substruct *list, u32 fie
static void PrintMatchCallFlavorText(struct PokenavListWindowState *a0, struct PokenavSub17Substruct *list, u32 checkPageEntry) static void PrintMatchCallFlavorText(struct PokenavListWindowState *a0, struct PokenavSub17Substruct *list, u32 checkPageEntry)
{ {
// lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames
static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = {
{
[CHECK_PAGE_STRATEGY] = 2, [CHECK_PAGE_STRATEGY] = 2,
[CHECK_PAGE_POKEMON] = 4, [CHECK_PAGE_POKEMON] = 4,
[CHECK_PAGE_INTRO_1] = 6, [CHECK_PAGE_INTRO_1] = 6,
@@ -768,7 +769,7 @@ static const struct CompressedSpriteSheet sListArrowSpriteSheets[] =
{ {
{ {
.data = sListArrow_Gfx, .data = sListArrow_Gfx,
.size = 192, .size = 0xC0,
.tag = GFXTAG_ARROW .tag = GFXTAG_ARROW
} }
}; };
@@ -852,7 +853,7 @@ static void CreateListArrowSprites(struct PokenavListWindowState *windowState, s
list->rightArrow = &gSprites[spriteId]; list->rightArrow = &gSprites[spriteId];
x = list->listWindow.x * 8 + (list->listWindow.width - 1) * 4; x = list->listWindow.x * 8 + (list->listWindow.width - 1) * 4;
spriteId = CreateSprite(&sSpriteTemplate_UpDownArrow, x, list->listWindow.y * 8 + windowState->visibleEntries * 16, 7); spriteId = CreateSprite(&sSpriteTemplate_UpDownArrow, x, list->listWindow.y * 8 + windowState->entriesOnscreen * 16, 7);
list->downArrow = &gSprites[spriteId]; list->downArrow = &gSprites[spriteId];
list->downArrow->oam.tileNum += 2; list->downArrow->oam.tileNum += 2;
list->downArrow->callback = SpriteCB_DownArrow; list->downArrow->callback = SpriteCB_DownArrow;
@@ -954,19 +955,19 @@ static void InitPokenavListWindowState(struct PokenavListWindowState *dst, struc
dst->windowTopIndex = template->startIndex; dst->windowTopIndex = template->startIndex;
dst->listLength = template->count; dst->listLength = template->count;
dst->listItemSize = template->itemSize; dst->listItemSize = template->itemSize;
dst->visibleEntries = template->maxShowed; dst->entriesOnscreen = template->maxShowed;
if (dst->visibleEntries >= dst->listLength) if (dst->entriesOnscreen >= dst->listLength)
{ {
dst->windowTopIndex = 0; dst->windowTopIndex = 0;
dst->unk4 = 0; dst->entriesOffscreen = 0;
dst->selectedIndexOffset = template->startIndex; dst->selectedIndexOffset = template->startIndex;
} }
else else
{ {
dst->unk4 = dst->listLength - dst->visibleEntries; dst->entriesOffscreen = dst->listLength - dst->entriesOnscreen;
if (dst->windowTopIndex + dst->visibleEntries > dst->listLength) if (dst->windowTopIndex + dst->entriesOnscreen > dst->listLength)
{ {
dst->selectedIndexOffset = dst->windowTopIndex + dst->visibleEntries - dst->listLength; dst->selectedIndexOffset = dst->windowTopIndex + dst->entriesOnscreen - dst->listLength;
dst->windowTopIndex = template->startIndex - dst->selectedIndexOffset; dst->windowTopIndex = template->startIndex - dst->selectedIndexOffset;
} }
else else
+7 -7
View File
@@ -190,7 +190,7 @@ static u32 HandleRibbonsMonListInput(struct Pokenav_RibbonsMonList *list)
} }
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
list->monList->currIndex = GetSelectedPokenavListIndex(); list->monList->currIndex = PokenavList_GetSelectedIndex();
list->saveMonList = 1; list->saveMonList = 1;
list->callback = RibbonsMonMenu_ToSummaryScreen; list->callback = RibbonsMonMenu_ToSummaryScreen;
return RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY; return RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY;
@@ -230,7 +230,7 @@ static s32 GetRibbonsMonListCount(void)
static s32 GetMonRibbonSelectedMonData(void) static s32 GetMonRibbonSelectedMonData(void)
{ {
struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST);
s32 idx = GetSelectedPokenavListIndex(); s32 idx = PokenavList_GetSelectedIndex();
return list->monList->monData[idx].data; return list->monList->monData[idx].data;
} }
@@ -496,7 +496,7 @@ static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -529,7 +529,7 @@ static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -562,7 +562,7 @@ static u32 LoopedTask_RibbonsListMovePageUp(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -595,7 +595,7 @@ static u32 LoopedTask_RibbonsListMovePageDown(s32 state)
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 1: case 1:
if (IsMovePokenavListWindowTaskActive()) if (PokenavList_IsMoveWindowTaskActive())
return LT_PAUSE; return LT_PAUSE;
// fallthrough // fallthrough
case 2: case 2:
@@ -658,7 +658,7 @@ static void AddRibbonsMonListWindow(struct Pokenav_RibbonsMonMenu *menu)
static void UpdateIndexNumberDisplay(struct Pokenav_RibbonsMonMenu *menu) static void UpdateIndexNumberDisplay(struct Pokenav_RibbonsMonMenu *menu)
{ {
s32 listIndex = GetSelectedPokenavListIndex(); s32 listIndex = PokenavList_GetSelectedIndex();
s32 listCount = GetRibbonsMonListCount(); s32 listCount = GetRibbonsMonListCount();
DrawListIndexNumber(menu->winid, listIndex + 1, listCount); DrawListIndexNumber(menu->winid, listIndex + 1, listCount);
CopyWindowToVram(menu->winid, COPYWIN_GFX); CopyWindowToVram(menu->winid, COPYWIN_GFX);