Clean up pokenav general menus, organize pokenav graphics

This commit is contained in:
GriffinR 2021-11-12 12:40:36 -05:00
parent 004d1cab3f
commit baeacbe2f1
33 changed files with 687 additions and 635 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 B

View File

Before

Width:  |  Height:  |  Size: 197 B

After

Width:  |  Height:  |  Size: 197 B

View File

Before

Width:  |  Height:  |  Size: 153 B

After

Width:  |  Height:  |  Size: 153 B

View File

Before

Width:  |  Height:  |  Size: 641 B

After

Width:  |  Height:  |  Size: 641 B

View File

Before

Width:  |  Height:  |  Size: 164 B

After

Width:  |  Height:  |  Size: 164 B

View File

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 251 B

View File

Before

Width:  |  Height:  |  Size: 209 B

After

Width:  |  Height:  |  Size: 209 B

View File

Before

Width:  |  Height:  |  Size: 630 B

After

Width:  |  Height:  |  Size: 630 B

View File

@ -1,35 +0,0 @@
JASC-PAL
0100
32
0 197 0
246 197 123
255 255 255
106 115 123
0 0 0
189 106 65
49 65 74
255 222 156
180 131 82
189 139 106
197 197 197
255 255 255
0 0 0
0 0 0
0 0 0
255 74 16
0 197 0
246 197 123
255 255 255
106 115 123
0 0 0
189 106 65
49 65 74
255 222 156
180 131 82
189 139 106
197 197 197
197 197 197
0 0 0
0 0 0
0 0 0
189 106 65

View File

Before

Width:  |  Height:  |  Size: 239 B

After

Width:  |  Height:  |  Size: 239 B

View File

Before

Width:  |  Height:  |  Size: 194 B

After

Width:  |  Height:  |  Size: 194 B

View File

Before

Width:  |  Height:  |  Size: 168 B

After

Width:  |  Height:  |  Size: 168 B

View File

Before

Width:  |  Height:  |  Size: 291 B

After

Width:  |  Height:  |  Size: 291 B

View File

Before

Width:  |  Height:  |  Size: 160 B

After

Width:  |  Height:  |  Size: 160 B

View File

Before

Width:  |  Height:  |  Size: 245 B

After

Width:  |  Height:  |  Size: 245 B

View File

@ -697,7 +697,7 @@ $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png
$(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png $(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 53 $(GFX) $< $@ -num_tiles 53
$(PKNAVGFXDIR)/ui_matchcall.4bpp: %.4bpp: %.png $(PKNAVGFXDIR)/match_call/ui.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 13 $(GFX) $< $@ -num_tiles 13
$(INTERFACEGFXDIR)/region_map.8bpp: %.8bpp: %.png $(INTERFACEGFXDIR)/region_map.8bpp: %.8bpp: %.png

View File

@ -69,7 +69,7 @@ enum
{ {
POKENAV_SUBSTRUCT_MAIN_MENU, POKENAV_SUBSTRUCT_MAIN_MENU,
POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER,
POKENAV_SUBSTRUCT_MENU_ICONS, POKENAV_SUBSTRUCT_MENU_GFX,
POKENAV_SUBSTRUCT_REGION_MAP_STATE, POKENAV_SUBSTRUCT_REGION_MAP_STATE,
POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, POKENAV_SUBSTRUCT_REGION_MAP_ZOOM,
POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, POKENAV_SUBSTRUCT_MATCH_CALL_MAIN,
@ -82,7 +82,7 @@ enum
POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX, POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX,
POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST,
POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU,
POKENAV_SUBSTRUCT_15, //unused POKENAV_SUBSTRUCT_UNUSED,
POKENAV_SUBSTRUCT_REGION_MAP, POKENAV_SUBSTRUCT_REGION_MAP,
POKENAV_SUBSTRUCT_MATCH_CALL_LIST, POKENAV_SUBSTRUCT_MATCH_CALL_LIST,
POKENAV_SUBSTRUCT_MON_LIST, POKENAV_SUBSTRUCT_MON_LIST,
@ -358,7 +358,7 @@ void SlideMenuHeaderDown(void);
bool32 MainMenuLoopedTaskIsBusy(void); bool32 MainMenuLoopedTaskIsBusy(void);
void SetLeftHeaderSpritesInvisibility(void); void SetLeftHeaderSpritesInvisibility(void);
void PokenavCopyPalette(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); void PokenavCopyPalette(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette);
void sub_81C7B40(void); void FadeToBlackExceptPrimary(void);
struct Sprite *PauseSpinningPokenavSprite(void); struct Sprite *PauseSpinningPokenavSprite(void);
void ResumeSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void);
void UpdateRegionMapRightHeaderTiles(u32 arg0); void UpdateRegionMapRightHeaderTiles(u32 arg0);

View File

@ -1187,10 +1187,10 @@ static void StartMatchCall(void)
CreateTask(ExecuteMatchCall, 1); CreateTask(ExecuteMatchCall, 1);
} }
static const u16 sMatchCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call_window.gbapal"); static const u16 sMatchCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/window.gbapal");
static const u8 sMatchCallWindow_Gfx[] = INCBIN_U8("graphics/pokenav/match_call_window.4bpp"); static const u8 sMatchCallWindow_Gfx[] = INCBIN_U8("graphics/pokenav/match_call/window.4bpp");
static const u16 sPokenavIcon_Pal[] = INCBIN_U16("graphics/pokenav/icon.gbapal"); static const u16 sPokenavIcon_Pal[] = INCBIN_U16("graphics/pokenav/match_call/nav_icon.gbapal");
static const u32 sPokenavIcon_Gfx[] = INCBIN_U32("graphics/pokenav/icon.4bpp.lz"); static const u32 sPokenavIcon_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/nav_icon.4bpp.lz");
static const u8 sText_PokenavCallEllipsis[] = _("………………\p"); static const u8 sText_PokenavCallEllipsis[] = _("………………\p");

View File

@ -49,7 +49,6 @@ static void Task_RunLoopedTask(u8 taskId);
static void Task_Pokenav(u8 taskId); static void Task_Pokenav(u8 taskId);
static void CB2_InitPokenavForTutorial(void); static void CB2_InitPokenavForTutorial(void);
// TODO: Use MENU ids
const struct PokenavCallbacks PokenavMenuCallbacks[15] = const struct PokenavCallbacks PokenavMenuCallbacks[15] =
{ {
[POKENAV_MAIN_MENU - POKENAV_MENU_IDS_START] = [POKENAV_MAIN_MENU - POKENAV_MENU_IDS_START] =

View File

@ -13,7 +13,7 @@
#include "menu.h" #include "menu.h"
#include "dma3.h" #include "dma3.h"
struct PokenavMainMenuResources struct Pokenav_MainMenu
{ {
void (*loopTask)(u32); void (*loopTask)(u32);
u32 (*isLoopTaskActiveFunc)(void); u32 (*isLoopTaskActiveFunc)(void);
@ -24,7 +24,7 @@ struct PokenavMainMenuResources
struct Sprite *spinningPokenav; struct Sprite *spinningPokenav;
struct Sprite *leftHeaderSprites[2]; struct Sprite *leftHeaderSprites[2];
struct Sprite *submenuLeftHeaderSprites[2]; struct Sprite *submenuLeftHeaderSprites[2];
u8 tilemapBuffer[0x800]; u8 tilemapBuffer[BG_SCREEN_SIZE];
}; };
// This struct uses a 32bit tag, and doesn't have a size field. // This struct uses a 32bit tag, and doesn't have a size field.
@ -36,26 +36,26 @@ struct CompressedSpriteSheetNoSize
}; };
static void CleanupPokenavMainMenuResources(void); static void CleanupPokenavMainMenuResources(void);
static void LoadLeftHeaderGfxForSubMenu(u32 arg0); static void LoadLeftHeaderGfxForSubMenu(u32);
static void LoadLeftHeaderGfxForMenu(u32 index); static void LoadLeftHeaderGfxForMenu(u32);
static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide); static void HideLeftHeaderSubmenuSprites(bool32);
static void HideLeftHeaderSprites(bool32 isOnRightSide); static void HideLeftHeaderSprites(bool32);
static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide); static void ShowLeftHeaderSprites(u32, bool32);
static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide); static void ShowLeftHeaderSubmenuSprites(u32, bool32);
static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration); static void MoveLeftHeader(struct Sprite *, s32, s32, s32);
static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void SpriteCB_MoveLeftHeader(struct Sprite *);
static void InitPokenavMainMenuResources(void); static void InitPokenavMainMenuResources(void);
static void InitHoennMapHeaderSprites(void); static void CreateLeftHeaderSprites(void);
static void InitHelpBar(void); static void InitHelpBar(void);
static u32 LoopedTask_SlideMenuHeaderUp(s32 a0); static u32 LoopedTask_SlideMenuHeaderUp(s32);
static u32 LoopedTask_SlideMenuHeaderDown(s32 a0); static u32 LoopedTask_SlideMenuHeaderDown(s32);
static void DrawHelpBar(u32 windowId); static void DrawHelpBar(u32);
static void SpriteCB_SpinningPokenav(struct Sprite* sprite); static void SpriteCB_SpinningPokenav(struct Sprite*);
static u32 LoopedTask_InitPokenavMenu(s32 a0); static u32 LoopedTask_InitPokenavMenu(s32);
const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); static const u16 sSpinningPokenav_Pal[] = INCBIN_U16("graphics/pokenav/nav_icon.gbapal");
const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); static const u32 sSpinningPokenav_Gfx[] = INCBIN_U32("graphics/pokenav/nav_icon.4bpp.lz");
const u32 gUnused_SpinningPokenavGfx2[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); static const u32 sBlueLightCopy[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); // Unused copy of sMatchCallBlueLightTiles
const struct BgTemplate gPokenavMainMenuBgTemplates[] = const struct BgTemplate gPokenavMainMenuBgTemplates[] =
{ {
@ -108,7 +108,7 @@ static const u8 sHelpBarTextColors[3] =
static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] = static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] =
{ {
{ {
.data = gSpinningPokenavGfx, .data = sSpinningPokenav_Gfx,
.size = 0x1000, .size = 0x1000,
.tag = 0, .tag = 0,
} }
@ -117,20 +117,20 @@ static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] =
static const struct SpritePalette gSpinningNavgearPalettes[] = static const struct SpritePalette gSpinningNavgearPalettes[] =
{ {
{ {
.data = gSpinningPokenavPaletteData, .data = sSpinningPokenav_Pal,
.tag = 0, .tag = 0,
}, },
{} {}
}; };
static const struct CompressedSpriteSheet sPokenavHoennMapLeftHeaderSpriteSheet = static const struct CompressedSpriteSheet sMenuLeftHeaderSpriteSheet =
{ {
.data = gPokenavLeftHeaderHoennMap_Gfx, .data = gPokenavLeftHeaderHoennMap_Gfx, // Hoenn map is the first of the headers listed
.size = 0xC00, .size = 0xC00,
.tag = 2 .tag = 2
}; };
static const struct CompressedSpriteSheet sPokenavMenuLeftHeaderSpriteSheets[] = static const struct CompressedSpriteSheet sMenuLeftHeaderSpriteSheets[] =
{ {
[POKENAV_GFX_MAIN_MENU] = { [POKENAV_GFX_MAIN_MENU] = {
.data = gPokenavLeftHeaderMainMenu_Gfx, .data = gPokenavLeftHeaderMainMenu_Gfx,
@ -239,7 +239,7 @@ static const struct SpriteTemplate sSpinningPokenavSpriteTemplate =
.callback = SpriteCB_SpinningPokenav .callback = SpriteCB_SpinningPokenav
}; };
static const struct OamData sPokenavLeftHeaderHoennMapSpriteOam = static const struct OamData sOamData_LeftHeader =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@ -253,7 +253,7 @@ static const struct OamData sPokenavLeftHeaderHoennMapSpriteOam =
.paletteNum = 0, .paletteNum = 0,
}; };
static const struct OamData sUnknown_0861FB24 = static const struct OamData sOamData_SubmenuLeftHeader =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@ -268,22 +268,22 @@ static const struct OamData sUnknown_0861FB24 =
.paletteNum = 0, .paletteNum = 0,
}; };
static const struct SpriteTemplate sPokenavLeftHeaderHoennMapSpriteTemplate = static const struct SpriteTemplate sLeftHeaderSpriteTemplate =
{ {
.tileTag = 2, .tileTag = 2,
.paletteTag = 1, .paletteTag = 1,
.oam = &sPokenavLeftHeaderHoennMapSpriteOam, .oam = &sOamData_LeftHeader,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy .callback = SpriteCallbackDummy
}; };
static const struct SpriteTemplate sUnknown_0861FB44 = static const struct SpriteTemplate sSubmenuLeftHeaderSpriteTemplate =
{ {
.tileTag = 2, .tileTag = 2,
.paletteTag = 2, .paletteTag = 2,
.oam = &sUnknown_0861FB24, .oam = &sOamData_SubmenuLeftHeader,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
@ -292,22 +292,22 @@ static const struct SpriteTemplate sUnknown_0861FB44 =
bool32 InitPokenavMainMenu(void) bool32 InitPokenavMainMenu(void)
{ {
struct PokenavMainMenuResources *structPtr; struct Pokenav_MainMenu *menu;
structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct PokenavMainMenuResources)); menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct Pokenav_MainMenu));
if (structPtr == NULL) if (menu == NULL)
return FALSE; return FALSE;
ResetSpriteData(); ResetSpriteData();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
structPtr->currentTaskId = CreateLoopedTask(LoopedTask_InitPokenavMenu, 1); menu->currentTaskId = CreateLoopedTask(LoopedTask_InitPokenavMenu, 1);
return TRUE; return TRUE;
} }
u32 PokenavMainMenuLoopedTaskIsActive(void) u32 PokenavMainMenuLoopedTaskIsActive(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
return IsLoopedTaskActive(structPtr->currentTaskId); return IsLoopedTaskActive(menu->currentTaskId);
} }
void ShutdownPokenav(void) void ShutdownPokenav(void)
@ -330,11 +330,11 @@ bool32 WaitForPokenavShutdownFade(void)
return TRUE; return TRUE;
} }
static u32 LoopedTask_InitPokenavMenu(s32 a0) static u32 LoopedTask_InitPokenavMenu(s32 state)
{ {
struct PokenavMainMenuResources *structPtr; struct Pokenav_MainMenu *menu;
switch (a0) switch (state)
{ {
case 0: case 0:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@ -345,9 +345,9 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0)
ResetTempTileDataBuffers(); ResetTempTileDataBuffers();
return LT_INC_AND_CONTINUE; return LT_INC_AND_CONTINUE;
case 1: case 1:
structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0);
SetBgTilemapBuffer(0, structPtr->tilemapBuffer); SetBgTilemapBuffer(0, menu->tilemapBuffer);
CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0);
CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20);
CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(0);
@ -363,7 +363,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0)
return LT_PAUSE; return LT_PAUSE;
InitPokenavMainMenuResources(); InitPokenavMainMenuResources();
InitHoennMapHeaderSprites(); CreateLeftHeaderSprites();
ShowBg(0); ShowBg(0);
return LT_FINISH; return LT_FINISH;
default: default:
@ -373,46 +373,46 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0)
void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later. void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later.
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
structPtr->loopTask = createLoopTask; menu->loopTask = createLoopTask;
structPtr->isLoopTaskActiveFunc = isLoopTaskActive; menu->isLoopTaskActiveFunc = isLoopTaskActive;
structPtr->unused = 0; menu->unused = 0;
} }
void RunMainMenuLoopedTask(u32 a0) void RunMainMenuLoopedTask(u32 state)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
structPtr->unused = 0; menu->unused = 0;
structPtr->loopTask(a0); menu->loopTask(state);
} }
u32 IsActiveMenuLoopTaskActive(void) u32 IsActiveMenuLoopTaskActive(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
return structPtr->isLoopTaskActiveFunc(); return menu->isLoopTaskActiveFunc();
} }
void SlideMenuHeaderUp(void) void SlideMenuHeaderUp(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); menu->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4);
} }
void SlideMenuHeaderDown(void) void SlideMenuHeaderDown(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); menu->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4);
} }
bool32 MainMenuLoopedTaskIsBusy(void) bool32 MainMenuLoopedTaskIsBusy(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
return IsLoopedTaskActive(structPtr->currentTaskId); return IsLoopedTaskActive(menu->currentTaskId);
} }
static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) static u32 LoopedTask_SlideMenuHeaderUp(s32 state)
{ {
switch (a0) switch (state)
{ {
default: default:
return LT_FINISH; return LT_FINISH;
@ -431,7 +431,7 @@ static u32 LoopedTask_SlideMenuHeaderUp(s32 a0)
} }
} }
static u32 LoopedTask_SlideMenuHeaderDown(s32 a0) static u32 LoopedTask_SlideMenuHeaderDown(s32 state)
{ {
if (ChangeBgY(0, 384, BG_COORD_SUB) <= 0) if (ChangeBgY(0, 384, BG_COORD_SUB) <= 0)
{ {
@ -510,15 +510,15 @@ void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a
void PokenavFadeScreen(s32 fadeType) void PokenavFadeScreen(s32 fadeType)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
switch (fadeType) switch (fadeType)
{ {
case 0: case 0:
BeginNormalPaletteFade(structPtr->palettes, -2, 0, 16, RGB_BLACK); BeginNormalPaletteFade(menu->palettes, -2, 0, 16, RGB_BLACK);
break; break;
case 1: case 1:
BeginNormalPaletteFade(structPtr->palettes, -2, 16, 0, RGB_BLACK); BeginNormalPaletteFade(menu->palettes, -2, 16, 0, RGB_BLACK);
break; break;
case 2: case 2:
BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 16, RGB_BLACK); BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 16, RGB_BLACK);
@ -534,9 +534,10 @@ bool32 IsPaletteFadeActive(void)
return gPaletteFade.active; return gPaletteFade.active;
} }
void sub_81C7B40(void) // Excludes the first obj and bg palettes
void FadeToBlackExceptPrimary(void)
{ {
BlendPalettes(PALETTES_ALL & ~(0x10000 | 0x1), 16, RGB_BLACK); BlendPalettes(PALETTES_ALL & ~(1 << 16 | 1), 16, RGB_BLACK);
} }
void InitBgTemplates(const struct BgTemplate *templates, int count) void InitBgTemplates(const struct BgTemplate *templates, int count)
@ -549,21 +550,21 @@ void InitBgTemplates(const struct BgTemplate *templates, int count)
static void InitHelpBar(void) static void InitHelpBar(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
InitWindows(&sHelpBarWindowTemplate[0]); InitWindows(&sHelpBarWindowTemplate[0]);
structPtr->helpBarWindowId = 0; menu->helpBarWindowId = 0;
DrawHelpBar(structPtr->helpBarWindowId); DrawHelpBar(menu->helpBarWindowId);
PutWindowTilemap(structPtr->helpBarWindowId); PutWindowTilemap(menu->helpBarWindowId);
CopyWindowToVram(structPtr->helpBarWindowId, COPYWIN_FULL); CopyWindowToVram(menu->helpBarWindowId, COPYWIN_FULL);
} }
void PrintHelpBarText(u32 textId) void PrintHelpBarText(u32 textId)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
DrawHelpBar(structPtr->helpBarWindowId); DrawHelpBar(menu->helpBarWindowId);
AddTextPrinterParameterized3(structPtr->helpBarWindowId, FONT_NORMAL, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); AddTextPrinterParameterized3(menu->helpBarWindowId, FONT_NORMAL, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]);
} }
bool32 WaitForHelpBar(void) bool32 WaitForHelpBar(void)
@ -581,22 +582,22 @@ static void InitPokenavMainMenuResources(void)
{ {
s32 i; s32 i;
u8 spriteId; u8 spriteId;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++)
LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]);
Pokenav_AllocAndLoadPalettes(gSpinningNavgearPalettes); Pokenav_AllocAndLoadPalettes(gSpinningNavgearPalettes);
structPtr->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0)); menu->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0));
spriteId = CreateSprite(&sSpinningPokenavSpriteTemplate, 220, 12, 0); spriteId = CreateSprite(&sSpinningPokenavSpriteTemplate, 220, 12, 0);
structPtr->spinningPokenav = &gSprites[spriteId]; menu->spinningPokenav = &gSprites[spriteId];
} }
static void CleanupPokenavMainMenuResources(void) static void CleanupPokenavMainMenuResources(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
DestroySprite(structPtr->spinningPokenav); DestroySprite(menu->spinningPokenav);
FreeSpriteTilesByTag(0); FreeSpriteTilesByTag(0);
FreeSpritePaletteByTag(0); FreeSpritePaletteByTag(0);
} }
@ -609,45 +610,47 @@ static void SpriteCB_SpinningPokenav(struct Sprite *sprite)
struct Sprite *PauseSpinningPokenavSprite(void) struct Sprite *PauseSpinningPokenavSprite(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
structPtr->spinningPokenav->callback = SpriteCallbackDummy; menu->spinningPokenav->callback = SpriteCallbackDummy;
return structPtr->spinningPokenav; return menu->spinningPokenav;
} }
void ResumeSpinningPokenavSprite(void) void ResumeSpinningPokenavSprite(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
structPtr->spinningPokenav->x = 220; menu->spinningPokenav->x = 220;
structPtr->spinningPokenav->y = 12; menu->spinningPokenav->y = 12;
structPtr->spinningPokenav->callback = SpriteCB_SpinningPokenav; menu->spinningPokenav->callback = SpriteCB_SpinningPokenav;
structPtr->spinningPokenav->invisible = FALSE; menu->spinningPokenav->invisible = FALSE;
structPtr->spinningPokenav->oam.priority = 0; menu->spinningPokenav->oam.priority = 0;
structPtr->spinningPokenav->subpriority = 0; menu->spinningPokenav->subpriority = 0;
} }
static void InitHoennMapHeaderSprites(void) static void CreateLeftHeaderSprites(void)
{ {
s32 i, spriteId; s32 i, spriteId;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); LoadCompressedSpriteSheet(&sMenuLeftHeaderSpriteSheet);
AllocSpritePalette(1); AllocSpritePalette(1);
AllocSpritePalette(2); AllocSpritePalette(2);
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++)
{ {
spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1); // Create main left header
structPtr->leftHeaderSprites[i] = &gSprites[spriteId]; spriteId = CreateSprite(&sLeftHeaderSpriteTemplate, 0, 0, 1);
structPtr->leftHeaderSprites[i]->invisible = TRUE; menu->leftHeaderSprites[i] = &gSprites[spriteId];
structPtr->leftHeaderSprites[i]->x2 = i * 64; menu->leftHeaderSprites[i]->invisible = TRUE;
menu->leftHeaderSprites[i]->x2 = i * 64;
spriteId = CreateSprite(&sUnknown_0861FB44, 0, 0, 2); // Create submenu left header
structPtr->submenuLeftHeaderSprites[i] = &gSprites[spriteId]; spriteId = CreateSprite(&sSubmenuLeftHeaderSpriteTemplate, 0, 0, 2);
structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; menu->submenuLeftHeaderSprites[i] = &gSprites[spriteId];
structPtr->submenuLeftHeaderSprites[i]->x2 = i * 32; menu->submenuLeftHeaderSprites[i]->invisible = TRUE;
structPtr->submenuLeftHeaderSprites[i]->y2 = 18; menu->submenuLeftHeaderSprites[i]->x2 = i * 32;
structPtr->submenuLeftHeaderSprites[i]->oam.tileNum += (i * 8) + 64; menu->submenuLeftHeaderSprites[i]->y2 = 18;
menu->submenuLeftHeaderSprites[i]->oam.tileNum += (i * 8) + 64;
} }
} }
@ -661,34 +664,34 @@ void LoadLeftHeaderGfxForIndex(u32 menuGfxId)
void UpdateRegionMapRightHeaderTiles(u32 menuGfxId) void UpdateRegionMapRightHeaderTiles(u32 menuGfxId)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT) if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT)
structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32;
else else
structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64; menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64;
} }
static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) static void LoadLeftHeaderGfxForMenu(u32 menuGfxId)
{ {
struct PokenavMainMenuResources *structPtr; struct Pokenav_MainMenu *menu;
u32 size, tag; u32 size, tag;
if (menuGfxId >= POKENAV_GFX_SUBMENUS_START) if (menuGfxId >= POKENAV_GFX_SUBMENUS_START)
return; return;
structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
tag = sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].tag; tag = sMenuLeftHeaderSpriteSheets[menuGfxId].tag;
size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); size = GetDecompressedDataSize(sMenuLeftHeaderSpriteSheets[menuGfxId].data);
LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20);
LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); LZ77UnCompWram(sMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer);
RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1);
structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sMenuLeftHeaderSpriteSheets[menuGfxId].size;
if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN)
structPtr->leftHeaderSprites[1]->x2 = 56; menu->leftHeaderSprites[1]->x2 = 56;
else else
structPtr->leftHeaderSprites[1]->x2 = 64; menu->leftHeaderSprites[1]->x2 = 64;
} }
static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId)
@ -731,20 +734,20 @@ void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide)
void SetLeftHeaderSpritesInvisibility(void) void SetLeftHeaderSpritesInvisibility(void)
{ {
s32 i; s32 i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++)
{ {
structPtr->leftHeaderSprites[i]->invisible = TRUE; menu->leftHeaderSprites[i]->invisible = TRUE;
structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; menu->submenuLeftHeaderSprites[i]->invisible = TRUE;
} }
} }
bool32 AreLeftHeaderSpritesMoving(void) bool32 AreLeftHeaderSpritesMoving(void)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
if (structPtr->leftHeaderSprites[0]->callback == SpriteCallbackDummy && structPtr->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) if (menu->leftHeaderSprites[0]->callback == SpriteCallbackDummy && menu->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy)
return FALSE; return FALSE;
else else
return TRUE; return TRUE;
@ -753,66 +756,66 @@ bool32 AreLeftHeaderSpritesMoving(void)
static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
{ {
s32 start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
if (!isOnRightSide) if (!isOnRightSide)
start = -96, end = 32; start = -96, end = 32;
else else
start = 256, end = 160; start = 256, end = 160;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++)
{ {
structPtr->leftHeaderSprites[i]->y = startY; menu->leftHeaderSprites[i]->y = startY;
MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); MoveLeftHeader(menu->leftHeaderSprites[i], start, end, 12);
} }
} }
static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
{ {
s32 start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
if (!isOnRightSide) if (!isOnRightSide)
start = -96, end = 16; start = -96, end = 16;
else else
start = 256, end = 192; start = 256, end = 192;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(menu->submenuLeftHeaderSprites); i++)
{ {
structPtr->submenuLeftHeaderSprites[i]->y = startY; menu->submenuLeftHeaderSprites[i]->y = startY;
MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); MoveLeftHeader(menu->submenuLeftHeaderSprites[i], start, end, 12);
} }
} }
static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide)
{ {
s32 start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
if (!isOnRightSide) if (!isOnRightSide)
start = 32, end = -96; start = 32, end = -96;
else else
start = 192, end = 256; start = 192, end = 256;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++)
{ {
MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); MoveLeftHeader(menu->leftHeaderSprites[i], start, end, 12);
} }
} }
static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide)
{ {
s32 start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU);
if (!isOnRightSide) if (!isOnRightSide)
start = 16, end = -96; start = 16, end = -96;
else else
start = 192, end = 256; start = 192, end = 256;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(menu->submenuLeftHeaderSprites); i++)
{ {
MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); MoveLeftHeader(menu->submenuLeftHeaderSprites[i], start, end, 12);
} }
} }

View File

@ -109,15 +109,15 @@ u32 ShowCheckPageDown(s32);
u32 ExitCheckPage(s32); u32 ExitCheckPage(s32);
u32 ExitMatchCall(s32); u32 ExitMatchCall(s32);
static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal"); static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/match_call/ui.gbapal");
static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz"); static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/ui.4bpp.lz");
static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz"); static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/match_call/ui.bin.lz");
static const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal"); static const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/match_call/arrow.gbapal");
static const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz"); static const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/match_call/arrow.4bpp.lz");
static const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal"); static const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/match_call/86226E0.gbapal");
static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal"); static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/match_call/8622700.gbapal");
static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/match_call/pokeball.gbapal");
static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/match_call/pokeball.4bpp.lz");
const struct BgTemplate sMatchCallBgTemplates[3] = const struct BgTemplate sMatchCallBgTemplates[3] =
{ {
@ -1062,7 +1062,7 @@ static void sub_81CC034(struct Pokenav4Struct *state)
{ {
state->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate); state->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate);
LoadMatchCallWindowGfx(state->msgBoxWindowId, 1, 4); LoadMatchCallWindowGfx(state->msgBoxWindowId, 1, 4);
sub_81C7B40(); FadeToBlackExceptPrimary();
} }
static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *state) static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *state)

View File

@ -94,8 +94,8 @@ u32 LoopedTask_sub_81C8870(s32 state);
u32 LoopedTask_sub_81C8A28(s32 state); u32 LoopedTask_sub_81C8A28(s32 state);
u32 LoopedTask_PrintCheckPageInfo(s32 state); u32 LoopedTask_PrintCheckPageInfo(s32 state);
static const u16 sMatchcallArrowPaletteData[] = INCBIN_U16("graphics/pokenav/arrows_matchcall.gbapal"); static const u16 sMatchcallArrowPaletteData[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal");
static const u32 sMatchcallArrowSpriteSheetData[] = INCBIN_U32("graphics/pokenav/arrows_matchcall.4bpp.lz"); static const u32 sMatchcallArrowSpriteSheetData[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz");
EWRAM_DATA u32 gUnknown_0203CF44 = 0; EWRAM_DATA u32 gUnknown_0203CF44 = 0;

View File

@ -5,31 +5,31 @@
#include "sound.h" #include "sound.h"
#include "constants/songs.h" #include "constants/songs.h"
struct Pokenav1Struct struct Pokenav_Menu
{ {
u16 menuType; u16 menuType;
s16 cursorPos; s16 cursorPos;
u16 currMenuItem; u16 currMenuItem;
u16 helpBarIndex; u16 helpBarIndex;
u32 menuId; u32 menuId;
u32 (*callback)(struct Pokenav1Struct*); u32 (*callback)(struct Pokenav_Menu*);
}; };
static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state); static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *);
static void ReturnToConditionMenu(struct Pokenav1Struct *state); static void ReturnToConditionMenu(struct Pokenav_Menu *);
static void ReturnToMainMenu(struct Pokenav1Struct *state); static void ReturnToMainMenu(struct Pokenav_Menu *);
static u32 GetMenuId(struct Pokenav1Struct *state); static u32 GetMenuId(struct Pokenav_Menu *);
static void SetMenuIdAndCB(struct Pokenav1Struct *state, u32 a1); static void SetMenuIdAndCB(struct Pokenav_Menu *, u32);
static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state); static u32 CB2_ReturnToConditionMenu(struct Pokenav_Menu *);
static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state); static u32 CB2_ReturnToMainMenu(struct Pokenav_Menu *);
static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state); static u32 HandleConditionSearchMenuInput(struct Pokenav_Menu *);
static u32 HandleConditionMenuInput(struct Pokenav1Struct *state); static u32 HandleConditionMenuInput(struct Pokenav_Menu *);
static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state); static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *);
static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state); static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *);
static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state); static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *);
static u32 HandleMainMenuInput(struct Pokenav1Struct *state); static u32 HandleMainMenuInput(struct Pokenav_Menu *);
static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*); static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu*);
static void SetMenuInputHandler(struct Pokenav1Struct *state); static void SetMenuInputHandler(struct Pokenav_Menu *);
// Number of entries - 1 for that menu type // Number of entries - 1 for that menu type
static const u8 sLastCursorPositions[] = static const u8 sLastCursorPositions[] =
@ -41,20 +41,20 @@ static const u8 sLastCursorPositions[] =
[POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5
}; };
static const u8 sMenuItems[][6] = static const u8 sMenuItems[][MAX_POKENAV_MENUITEMS] =
{ {
[POKENAV_MENU_TYPE_DEFAULT] = [POKENAV_MENU_TYPE_DEFAULT] =
{ {
POKENAV_MENUITEM_MAP, POKENAV_MENUITEM_MAP,
POKENAV_MENUITEM_CONDITION, POKENAV_MENUITEM_CONDITION,
[2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [2 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_UNLOCK_MC] = [POKENAV_MENU_TYPE_UNLOCK_MC] =
{ {
POKENAV_MENUITEM_MAP, POKENAV_MENUITEM_MAP,
POKENAV_MENUITEM_CONDITION, POKENAV_MENUITEM_CONDITION,
POKENAV_MENUITEM_MATCH_CALL, POKENAV_MENUITEM_MATCH_CALL,
[3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [3 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] =
{ {
@ -62,14 +62,14 @@ static const u8 sMenuItems[][6] =
POKENAV_MENUITEM_CONDITION, POKENAV_MENUITEM_CONDITION,
POKENAV_MENUITEM_MATCH_CALL, POKENAV_MENUITEM_MATCH_CALL,
POKENAV_MENUITEM_RIBBONS, POKENAV_MENUITEM_RIBBONS,
[4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [4 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_CONDITION] = [POKENAV_MENU_TYPE_CONDITION] =
{ {
POKENAV_MENUITEM_CONDITION_PARTY, POKENAV_MENUITEM_CONDITION_PARTY,
POKENAV_MENUITEM_CONDITION_SEARCH, POKENAV_MENUITEM_CONDITION_SEARCH,
POKENAV_MENUITEM_CONDITION_CANCEL, POKENAV_MENUITEM_CONDITION_CANCEL,
[3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF [3 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF
}, },
[POKENAV_MENU_TYPE_CONDITION_SEARCH] = [POKENAV_MENU_TYPE_CONDITION_SEARCH] =
{ {
@ -99,94 +99,94 @@ static u8 GetPokenavMainMenuType(void)
bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) bool32 PokenavCallback_Init_MainMenuCursorOnMap(void)
{ {
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu));
if (!state) if (!menu)
return FALSE; return FALSE;
state->menuType = GetPokenavMainMenuType(); menu->menuType = GetPokenavMainMenuType();
state->cursorPos = POKENAV_MENUITEM_MAP; menu->cursorPos = POKENAV_MENUITEM_MAP;
state->currMenuItem = POKENAV_MENUITEM_MAP; menu->currMenuItem = POKENAV_MENUITEM_MAP;
state->helpBarIndex = HELPBAR_NONE; menu->helpBarIndex = HELPBAR_NONE;
SetMenuInputHandler(state); SetMenuInputHandler(menu);
return TRUE; return TRUE;
} }
bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void)
{ {
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu));
if (!state) if (!menu)
return FALSE; return FALSE;
state->menuType = GetPokenavMainMenuType(); menu->menuType = GetPokenavMainMenuType();
state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; menu->cursorPos = POKENAV_MENUITEM_MATCH_CALL;
state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; menu->currMenuItem = POKENAV_MENUITEM_MATCH_CALL;
state->helpBarIndex = HELPBAR_NONE; menu->helpBarIndex = HELPBAR_NONE;
SetMenuInputHandler(state); SetMenuInputHandler(menu);
return TRUE; return TRUE;
} }
bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void)
{ {
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu));
if (!state) if (!menu)
return FALSE; return FALSE;
state->menuType = GetPokenavMainMenuType(); menu->menuType = GetPokenavMainMenuType();
state->cursorPos = POKENAV_MENUITEM_RIBBONS; menu->cursorPos = POKENAV_MENUITEM_RIBBONS;
state->currMenuItem = POKENAV_MENUITEM_RIBBONS; menu->currMenuItem = POKENAV_MENUITEM_RIBBONS;
SetMenuInputHandler(state); SetMenuInputHandler(menu);
return TRUE; return TRUE;
} }
bool32 PokenavCallback_Init_ConditionMenu(void) bool32 PokenavCallback_Init_ConditionMenu(void)
{ {
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu));
if (!state) if (!menu)
return FALSE; return FALSE;
state->menuType = POKENAV_MENU_TYPE_CONDITION; menu->menuType = POKENAV_MENU_TYPE_CONDITION;
state->cursorPos = 0; //party menu->cursorPos = 0; //party
state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; menu->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY;
state->helpBarIndex = HELPBAR_NONE; menu->helpBarIndex = HELPBAR_NONE;
SetMenuInputHandler(state); SetMenuInputHandler(menu);
return TRUE; return TRUE;
} }
bool32 PokenavCallback_Init_ConditionSearchMenu(void) bool32 PokenavCallback_Init_ConditionSearchMenu(void)
{ {
struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu));
if (!state) if (!menu)
return FALSE; return FALSE;
state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; menu->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH;
state->cursorPos = GetSelectedConditionSearch(); menu->cursorPos = GetSelectedConditionSearch();
state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; menu->currMenuItem = menu->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL;
state->helpBarIndex = HELPBAR_NONE; menu->helpBarIndex = HELPBAR_NONE;
SetMenuInputHandler(state); SetMenuInputHandler(menu);
return TRUE; return TRUE;
} }
static void SetMenuInputHandler(struct Pokenav1Struct *state) static void SetMenuInputHandler(struct Pokenav_Menu *menu)
{ {
switch (state->menuType) switch (menu->menuType)
{ {
case POKENAV_MENU_TYPE_DEFAULT: case POKENAV_MENU_TYPE_DEFAULT:
SetPokenavMode(POKENAV_MODE_NORMAL); SetPokenavMode(POKENAV_MODE_NORMAL);
// fallthrough // fallthrough
case POKENAV_MENU_TYPE_UNLOCK_MC: case POKENAV_MENU_TYPE_UNLOCK_MC:
case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS: case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS:
state->callback = GetMainMenuInputHandler(); menu->callback = GetMainMenuInputHandler();
break; break;
case POKENAV_MENU_TYPE_CONDITION: case POKENAV_MENU_TYPE_CONDITION:
state->callback = HandleConditionMenuInput; menu->callback = HandleConditionMenuInput;
break; break;
case POKENAV_MENU_TYPE_CONDITION_SEARCH: case POKENAV_MENU_TYPE_CONDITION_SEARCH:
state->callback = HandleConditionSearchMenuInput; menu->callback = HandleConditionSearchMenuInput;
break; break;
} }
} }
static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*) static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu*)
{ {
switch (GetPokenavMode()) switch (GetPokenavMode())
{ {
@ -202,8 +202,8 @@ static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*)
u32 GetMenuHandlerCallback(void) u32 GetMenuHandlerCallback(void)
{ {
struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER);
return state->callback(state); return menu->callback(menu);
} }
void FreeMenuHandlerSubstruct1(void) void FreeMenuHandlerSubstruct1(void)
@ -211,39 +211,39 @@ void FreeMenuHandlerSubstruct1(void)
FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER);
} }
static u32 HandleMainMenuInput(struct Pokenav1Struct *state) static u32 HandleMainMenuInput(struct Pokenav_Menu *menu)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(menu))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
switch (sMenuItems[state->menuType][state->cursorPos]) switch (sMenuItems[menu->menuType][menu->cursorPos])
{ {
case POKENAV_MENUITEM_MAP: case POKENAV_MENUITEM_MAP:
state->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT; menu->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT;
SetMenuIdAndCB(state, POKENAV_REGION_MAP); SetMenuIdAndCB(menu, POKENAV_REGION_MAP);
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
case POKENAV_MENUITEM_CONDITION: case POKENAV_MENUITEM_CONDITION:
state->menuType = POKENAV_MENU_TYPE_CONDITION; menu->menuType = POKENAV_MENU_TYPE_CONDITION;
state->cursorPos = 0; menu->cursorPos = 0;
state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0]; menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0];
state->callback = HandleConditionMenuInput; menu->callback = HandleConditionMenuInput;
return POKENAV_MENU_FUNC_OPEN_CONDITION; return POKENAV_MENU_FUNC_OPEN_CONDITION;
case POKENAV_MENUITEM_MATCH_CALL: case POKENAV_MENUITEM_MATCH_CALL:
state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
SetMenuIdAndCB(state, POKENAV_MATCH_CALL); SetMenuIdAndCB(menu, POKENAV_MATCH_CALL);
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
case POKENAV_MENUITEM_RIBBONS: case POKENAV_MENUITEM_RIBBONS:
if (CanViewRibbonsMenu()) if (CanViewRibbonsMenu())
{ {
state->helpBarIndex = HELPBAR_RIBBONS_MON_LIST; menu->helpBarIndex = HELPBAR_RIBBONS_MON_LIST;
SetMenuIdAndCB(state, POKENAV_RIBBONS_MON_LIST); SetMenuIdAndCB(menu, POKENAV_RIBBONS_MON_LIST);
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
} }
else else
{ {
state->callback = HandleCantOpenRibbonsInput; menu->callback = HandleCantOpenRibbonsInput;
return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS;
} }
case POKENAV_MENUITEM_SWITCH_OFF: case POKENAV_MENUITEM_SWITCH_OFF:
@ -258,17 +258,17 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state)
} }
// Force the player to select Match Call during the call Mr. Stone pokenav tutorial // Force the player to select Match Call during the call Mr. Stone pokenav tutorial
static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *menu)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(menu))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) if (sMenuItems[menu->menuType][menu->cursorPos] == POKENAV_MENUITEM_MATCH_CALL)
{ {
state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
SetMenuIdAndCB(state, POKENAV_MATCH_CALL); SetMenuIdAndCB(menu, POKENAV_MATCH_CALL);
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
} }
else else
@ -288,14 +288,14 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state)
} }
// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again // After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again
static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *menu)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(menu))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; u32 menuItem = sMenuItems[menu->menuType][menu->cursorPos];
if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF)
{ {
PlaySE(SE_FAILURE); PlaySE(SE_FAILURE);
@ -303,8 +303,8 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state)
} }
else if (menuItem == POKENAV_MENUITEM_MATCH_CALL) else if (menuItem == POKENAV_MENUITEM_MATCH_CALL)
{ {
state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
SetMenuIdAndCB(state, POKENAV_MATCH_CALL); SetMenuIdAndCB(menu, POKENAV_MATCH_CALL);
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
} }
else else
@ -321,60 +321,60 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state)
// Handles input after selecting Ribbons when there are no ribbon winners left // Handles input after selecting Ribbons when there are no ribbon winners left
// Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message // Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message
static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state) static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *menu)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(menu))
{ {
state->callback = GetMainMenuInputHandler(); menu->callback = GetMainMenuInputHandler();
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
} }
if (JOY_NEW(A_BUTTON | B_BUTTON)) if (JOY_NEW(A_BUTTON | B_BUTTON))
{ {
state->callback = GetMainMenuInputHandler(); menu->callback = GetMainMenuInputHandler();
return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION;
} }
return POKENAV_MENU_FUNC_NONE; return POKENAV_MENU_FUNC_NONE;
} }
static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) static u32 HandleConditionMenuInput(struct Pokenav_Menu *menu)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(menu))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
switch (sMenuItems[state->menuType][state->cursorPos]) switch (sMenuItems[menu->menuType][menu->cursorPos])
{ {
case POKENAV_MENUITEM_CONDITION_SEARCH: case POKENAV_MENUITEM_CONDITION_SEARCH:
state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; menu->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH;
state->cursorPos = 0; menu->cursorPos = 0;
state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0]; menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0];
state->callback = HandleConditionSearchMenuInput; menu->callback = HandleConditionSearchMenuInput;
return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH; return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH;
case POKENAV_MENUITEM_CONDITION_PARTY: case POKENAV_MENUITEM_CONDITION_PARTY:
state->helpBarIndex = 0; menu->helpBarIndex = 0;
SetMenuIdAndCB(state, POKENAV_CONDITION_GRAPH_PARTY); SetMenuIdAndCB(menu, POKENAV_CONDITION_GRAPH_PARTY);
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
case POKENAV_MENUITEM_CONDITION_CANCEL: case POKENAV_MENUITEM_CONDITION_CANCEL:
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ReturnToMainMenu(state); ReturnToMainMenu(menu);
return POKENAV_MENU_FUNC_RETURN_TO_MAIN; return POKENAV_MENU_FUNC_RETURN_TO_MAIN;
} }
} }
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
{ {
if (state->cursorPos != sLastCursorPositions[state->menuType]) if (menu->cursorPos != sLastCursorPositions[menu->menuType])
{ {
state->cursorPos = sLastCursorPositions[state->menuType]; menu->cursorPos = sLastCursorPositions[menu->menuType];
state->callback = CB2_ReturnToMainMenu; menu->callback = CB2_ReturnToMainMenu;
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
} }
else else
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ReturnToMainMenu(state); ReturnToMainMenu(menu);
return POKENAV_MENU_FUNC_RETURN_TO_MAIN; return POKENAV_MENU_FUNC_RETURN_TO_MAIN;
} }
} }
@ -382,102 +382,102 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state)
return POKENAV_MENU_FUNC_NONE; return POKENAV_MENU_FUNC_NONE;
} }
static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) static u32 HandleConditionSearchMenuInput(struct Pokenav_Menu *menu)
{ {
if (UpdateMenuCursorPos(state)) if (UpdateMenuCursorPos(menu))
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; u8 menuItem = sMenuItems[menu->menuType][menu->cursorPos];
if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL)
{ {
SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL); SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL);
SetMenuIdAndCB(state, POKENAV_CONDITION_SEARCH_RESULTS); SetMenuIdAndCB(menu, POKENAV_CONDITION_SEARCH_RESULTS);
state->helpBarIndex = HELPBAR_CONDITION_MON_LIST; menu->helpBarIndex = HELPBAR_CONDITION_MON_LIST;
return POKENAV_MENU_FUNC_OPEN_FEATURE; return POKENAV_MENU_FUNC_OPEN_FEATURE;
} }
else else
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ReturnToConditionMenu(state); ReturnToConditionMenu(menu);
return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; return POKENAV_MENU_FUNC_RETURN_TO_CONDITION;
} }
} }
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
{ {
if (state->cursorPos != sLastCursorPositions[state->menuType]) if (menu->cursorPos != sLastCursorPositions[menu->menuType])
{ {
state->cursorPos = sLastCursorPositions[state->menuType]; menu->cursorPos = sLastCursorPositions[menu->menuType];
state->callback = CB2_ReturnToConditionMenu; menu->callback = CB2_ReturnToConditionMenu;
return POKENAV_MENU_FUNC_MOVE_CURSOR; return POKENAV_MENU_FUNC_MOVE_CURSOR;
} }
else else
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ReturnToConditionMenu(state); ReturnToConditionMenu(menu);
return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; return POKENAV_MENU_FUNC_RETURN_TO_CONDITION;
} }
} }
return POKENAV_MENU_FUNC_NONE; return POKENAV_MENU_FUNC_NONE;
} }
static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state) static u32 CB2_ReturnToMainMenu(struct Pokenav_Menu *menu)
{ {
ReturnToMainMenu(state); ReturnToMainMenu(menu);
return POKENAV_MENU_FUNC_RETURN_TO_MAIN; return POKENAV_MENU_FUNC_RETURN_TO_MAIN;
} }
static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state) static u32 CB2_ReturnToConditionMenu(struct Pokenav_Menu *menu)
{ {
ReturnToConditionMenu(state); ReturnToConditionMenu(menu);
return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; return POKENAV_MENU_FUNC_RETURN_TO_CONDITION;
} }
static void SetMenuIdAndCB(struct Pokenav1Struct *state, u32 menuId) static void SetMenuIdAndCB(struct Pokenav_Menu *menu, u32 menuId)
{ {
state->menuId = menuId; menu->menuId = menuId;
state->callback = GetMenuId; menu->callback = GetMenuId;
} }
static u32 GetMenuId(struct Pokenav1Struct *state) static u32 GetMenuId(struct Pokenav_Menu *menu)
{ {
return state->menuId; return menu->menuId;
} }
static void ReturnToMainMenu(struct Pokenav1Struct *state) static void ReturnToMainMenu(struct Pokenav_Menu *menu)
{ {
state->menuType = GetPokenavMainMenuType(); menu->menuType = GetPokenavMainMenuType();
state->cursorPos = 1; menu->cursorPos = 1;
state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos];
state->callback = HandleMainMenuInput; menu->callback = HandleMainMenuInput;
} }
static void ReturnToConditionMenu(struct Pokenav1Struct *state) static void ReturnToConditionMenu(struct Pokenav_Menu *menu)
{ {
state->menuType = POKENAV_MENU_TYPE_CONDITION; menu->menuType = POKENAV_MENU_TYPE_CONDITION;
state->cursorPos = 1; menu->cursorPos = 1;
state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1]; menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1];
state->callback = HandleConditionMenuInput; menu->callback = HandleConditionMenuInput;
} }
static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *menu)
{ {
if (JOY_NEW(DPAD_UP)) if (JOY_NEW(DPAD_UP))
{ {
if (--state->cursorPos < 0) if (--menu->cursorPos < 0)
state->cursorPos = sLastCursorPositions[state->menuType]; menu->cursorPos = sLastCursorPositions[menu->menuType];
state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos];
return TRUE; return TRUE;
} }
else if (JOY_NEW(DPAD_DOWN)) else if (JOY_NEW(DPAD_DOWN))
{ {
state->cursorPos++; menu->cursorPos++;
if (state->cursorPos > sLastCursorPositions[state->menuType]) if (menu->cursorPos > sLastCursorPositions[menu->menuType])
state->cursorPos = 0; menu->cursorPos = 0;
state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos];
return TRUE; return TRUE;
} }
else else
@ -488,26 +488,26 @@ static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state)
int GetPokenavMenuType(void) int GetPokenavMenuType(void)
{ {
struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER);
return state->menuType; return menu->menuType;
} }
// Position of cursor relative to number of current menu options // Position of cursor relative to number of current menu options
int GetPokenavCursorPos(void) int GetPokenavCursorPos(void)
{ {
struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER);
return state->cursorPos; return menu->cursorPos;
} }
// ID of menu item the cursor is currently on // ID of menu item the cursor is currently on
int GetCurrentMenuItemId(void) int GetCurrentMenuItemId(void)
{ {
struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER);
return state->currMenuItem; return menu->currMenuItem;
} }
u16 GetHelpBarTextId(void) u16 GetHelpBarTextId(void)
{ {
struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER);
return state->helpBarIndex; return menu->helpBarIndex;
} }

File diff suppressed because it is too large Load Diff

View File

@ -74,7 +74,7 @@ static u32 LoopedTask_ExitRegionMap(s32);
extern const u16 gRegionMapCityZoomTiles_Pal[]; extern const u16 gRegionMapCityZoomTiles_Pal[];
extern const u32 gRegionMapCityZoomText_Gfx[]; extern const u32 gRegionMapCityZoomText_Gfx[];
static const u16 sMapSecInfoWindow_Pal[] = INCBIN_U16("graphics/pokenav/region_map_info_window.gbapal"); static const u16 sMapSecInfoWindow_Pal[] = INCBIN_U16("graphics/pokenav/region_map/info_window.gbapal");
static const u32 sRegionMapCityZoomTiles_Gfx[] = INCBIN_U32("graphics/pokenav/zoom_tiles.4bpp.lz"); static const u32 sRegionMapCityZoomTiles_Gfx[] = INCBIN_U32("graphics/pokenav/zoom_tiles.4bpp.lz");
#include "data/region_map/city_map_tilemaps.h" #include "data/region_map/city_map_tilemaps.h"
@ -346,7 +346,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState)
return LT_PAUSE; return LT_PAUSE;
UpdateMapSecInfoWindow(state); UpdateMapSecInfoWindow(state);
sub_81C7B40(); FadeToBlackExceptPrimary();
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 5: case 5:
if (IsDma3ManagerBusyWithBgCopy_(state)) if (IsDma3ManagerBusyWithBgCopy_(state))

View File

@ -116,19 +116,18 @@ static void CB_FadeInFlyMap(void);
static void CB_HandleFlyMapInput(void); static void CB_HandleFlyMapInput(void);
static void CB_ExitFlyMap(void); static void CB_ExitFlyMap(void);
// .rodata // NOTE: Some of the below graphics are not in graphics/pokenav/region_map
// because porymap expects them to be in their current location.
static const u16 sRegionMapCursorPal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); static const u16 sRegionMapCursorPal[] = INCBIN_U16("graphics/pokenav/region_map/cursor.gbapal");
static const u32 sRegionMapCursorSmallGfxLZ[] = INCBIN_U32("graphics/pokenav/cursor_small.4bpp.lz"); static const u32 sRegionMapCursorSmallGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/cursor_small.4bpp.lz");
static const u32 sRegionMapCursorLargeGfxLZ[] = INCBIN_U32("graphics/pokenav/cursor_large.4bpp.lz"); static const u32 sRegionMapCursorLargeGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/cursor_large.4bpp.lz");
static const u16 sRegionMapBg_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); static const u16 sRegionMapBg_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal");
static const u32 sRegionMapBg_GfxLZ[] = INCBIN_U32("graphics/pokenav/region_map.8bpp.lz"); static const u32 sRegionMapBg_GfxLZ[] = INCBIN_U32("graphics/pokenav/region_map.8bpp.lz");
static const u32 sRegionMapBg_TilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map_map.bin.lz"); static const u32 sRegionMapBg_TilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map_map.bin.lz");
static const u16 sRegionMapPlayerIcon_BrendanPal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); static const u16 sRegionMapPlayerIcon_BrendanPal[] = INCBIN_U16("graphics/pokenav/region_map/brendan_icon.gbapal");
static const u8 sRegionMapPlayerIcon_BrendanGfx[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); static const u8 sRegionMapPlayerIcon_BrendanGfx[] = INCBIN_U8("graphics/pokenav/region_map/brendan_icon.4bpp");
static const u16 sRegionMapPlayerIcon_MayPal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); static const u16 sRegionMapPlayerIcon_MayPal[] = INCBIN_U16("graphics/pokenav/region_map/may_icon.gbapal");
static const u8 sRegionMapPlayerIcon_MayGfx[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); static const u8 sRegionMapPlayerIcon_MayGfx[] = INCBIN_U8("graphics/pokenav/region_map/may_icon.4bpp");
static const u8 sRegionMap_MapSectionLayout[] = INCBIN_U8("graphics/pokenav/region_map_section_layout.bin"); static const u8 sRegionMap_MapSectionLayout[] = INCBIN_U8("graphics/pokenav/region_map_section_layout.bin");
#include "data/region_map/region_map_entries.h" #include "data/region_map/region_map_entries.h"
@ -283,15 +282,11 @@ static const u8 sMapSecIdsOffMap[] =
MAPSEC_NAVEL_ROCK MAPSEC_NAVEL_ROCK
}; };
static const u16 sRegionMapFramePal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); static const u16 sRegionMapFramePal[] = INCBIN_U16("graphics/pokenav/region_map/frame.gbapal");
static const u32 sRegionMapFrameGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/frame.4bpp.lz");
static const u32 sRegionMapFrameGfxLZ[] = INCBIN_U32("graphics/pokenav/map_frame.4bpp.lz"); static const u32 sRegionMapFrameTilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map/frame.bin.lz");
static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/region_map/fly_target_icons.gbapal");
static const u32 sRegionMapFrameTilemapLZ[] = INCBIN_U32("graphics/pokenav/map_frame.bin.lz"); static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/region_map/fly_target_icons.4bpp.lz");
static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal");
static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/fly_target_icons.4bpp.lz");
static const u8 sMapHealLocations[][3] = static const u8 sMapHealLocations[][3] =
{ {