Document some pokenav and region map

This commit is contained in:
GriffinR
2020-02-05 02:47:32 -05:00
parent 27c4329e45
commit 86354f1d50
65 changed files with 1477 additions and 1453 deletions
+160 -140
View File
@@ -26,18 +26,18 @@ struct PokenavResources
void *field10[SUBSTRUCT_COUNT];
};
struct UnknownPokenavCallbackStruct
struct PokenavCallbacks
{
bool32 (*unk0)(void);
u32 (*unk4)(void);
bool32 (*unk8)(void);
void (*unkC)(s32);
u32 (*unk10)(void);
void (*unk14)(void);
void (*unk18)(void);
bool32 (*init)(void);
u32 (*callback)(void);
bool32 (*open)(void);
void (*createLoopTask)(s32);
bool32 (*isLoopTaskActive)(void);
void (*free1)(void);
void (*free2)(void);
};
static u32 sub_81C75E0(void);
static u32 GetCurrentMenuCB(void);
static u32 sub_81C75D4(void);
static bool32 SetActivePokenavMenu(u32 menuId);
static bool32 AnyMonHasRibbon(void);
@@ -51,142 +51,158 @@ static void Task_RunLoopedTask(u8 taskId);
static void Task_Pokenav(u8 taskId);
static void CB2_InitPokenavForTutorial(void);
const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
// TODO: Use MENU ids
const struct PokenavCallbacks PokenavMenuCallbacks[15] =
{
[POKENAV_MAIN_MENU - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_0,
.unk4 = sub_81C941C,
.unk8 = sub_81C9924,
.unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
.init = PokenavCallback_Init_MainMenuCursorOnMap,
.callback = GetMenuHandlerCallback,
.open = OpenPokenavMenuInitial,
.createLoopTask = CreateMenuHandlerLoopedTask,
.isLoopTaskActive = IsMenuHandlerLoopedTaskActive,
.free1 = FreeMenuHandlerSubstruct1,
.free2 = FreeMenuHandlerSubstruct2,
},
[POKENAV_MAIN_MENU_CURSOR_ON_MAP - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_0,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
.init = PokenavCallback_Init_MainMenuCursorOnMap,
.callback = GetMenuHandlerCallback,
.open = OpenPokenavMenuNotInitial,
.createLoopTask = CreateMenuHandlerLoopedTask,
.isLoopTaskActive = IsMenuHandlerLoopedTaskActive,
.free1 = FreeMenuHandlerSubstruct1,
.free2 = FreeMenuHandlerSubstruct2,
},
[POKENAV_CONDITION_MENU - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_2,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
.init = PokenavCallback_Init_ConditionMenu,
.callback = GetMenuHandlerCallback,
.open = OpenPokenavMenuNotInitial,
.createLoopTask = CreateMenuHandlerLoopedTask,
.isLoopTaskActive = IsMenuHandlerLoopedTaskActive,
.free1 = FreeMenuHandlerSubstruct1,
.free2 = FreeMenuHandlerSubstruct2,
},
[POKENAV_CONDITION_SEARCH_MENU - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_3,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
.init = PokenavCallback_Init_ConditionSearchMenu,
.callback = GetMenuHandlerCallback,
.open = OpenPokenavMenuNotInitial,
.createLoopTask = CreateMenuHandlerLoopedTask,
.isLoopTaskActive = IsMenuHandlerLoopedTaskActive,
.free1 = FreeMenuHandlerSubstruct1,
.free2 = FreeMenuHandlerSubstruct2,
},
[POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_4,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
.init = PokenavCallback_Init_MainMenuCursorOnMatchCall,
.callback = GetMenuHandlerCallback,
.open = OpenPokenavMenuNotInitial,
.createLoopTask = CreateMenuHandlerLoopedTask,
.isLoopTaskActive = IsMenuHandlerLoopedTaskActive,
.free1 = FreeMenuHandlerSubstruct1,
.free2 = FreeMenuHandlerSubstruct2,
},
[POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_5,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
.init = PokenavCallback_Init_MainMenuCursorOnRibbons,
.callback = GetMenuHandlerCallback,
.open = OpenPokenavMenuNotInitial,
.createLoopTask = CreateMenuHandlerLoopedTask,
.isLoopTaskActive = IsMenuHandlerLoopedTaskActive,
.free1 = FreeMenuHandlerSubstruct1,
.free2 = FreeMenuHandlerSubstruct2,
},
[POKENAV_REGION_MAP - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_6,
.unk4 = sub_81CC554,
.unk8 = sub_81CC5F4,
.unkC = sub_81CC62C,
.unk10 = sub_81CC65C,
.unk14 = sub_81CC524,
.unk18 = sub_81CC670,
.init = PokenavCallback_Init_RegionMap,
.callback = GetRegionMapCallback,
.open = OpenPokenavRegionMap,
.createLoopTask = CreateRegionMapLoopedTask,
.isLoopTaskActive = IsRegionMapLoopedTaskActive,
.free1 = FreeRegionMapSubstruct1,
.free2 = FreeRegionMapSubstruct2,
},
[POKENAV_CONDITION_PARTY - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_7,
.unk4 = sub_81CD070,
.unk8 = sub_81CDDD4,
.unkC = sub_81CDE2C,
.unk10 = sub_81CDE64,
.unk14 = sub_81CD1C0,
.unk18 = sub_81CECA0,
.init = PokenavCallback_Init_7,
.callback = sub_81CD070,
.open = sub_81CDDD4,
.createLoopTask = sub_81CDE2C,
.isLoopTaskActive = sub_81CDE64,
.free1 = sub_81CD1C0,
.free2 = sub_81CECA0,
},
[POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_8,
.unk4 = sub_81CEFDC,
.unk8 = sub_81CF330,
.unkC = sub_81CF3A0,
.unk10 = sub_81CF3D0,
.unk14 = sub_81CEFF0,
.unk18 = sub_81CF3F8,
.init = PokenavCallback_Init_8,
.callback = sub_81CEFDC,
.open = sub_81CF330,
.createLoopTask = sub_81CF3A0,
.isLoopTaskActive = sub_81CF3D0,
.free1 = sub_81CEFF0,
.free2 = sub_81CF3F8,
},
[POKENAV_MENU_9 - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_9,
.unk4 = sub_81CD070,
.unk8 = sub_81CDDD4,
.unkC = sub_81CDE2C,
.unk10 = sub_81CDE64,
.unk14 = sub_81CD1C0,
.unk18 = sub_81CECA0,
.init = PokenavCallback_Init_9,
.callback = sub_81CD070,
.open = sub_81CDDD4,
.createLoopTask = sub_81CDE2C,
.isLoopTaskActive = sub_81CDE64,
.free1 = sub_81CD1C0,
.free2 = sub_81CECA0,
},
[POKENAV_MENU_A - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_10,
.unk4 = sub_81CEFDC,
.unk8 = sub_81CF368,
.unkC = sub_81CF3A0,
.unk10 = sub_81CF3D0,
.unk14 = sub_81CEFF0,
.unk18 = sub_81CF3F8,
.init = PokenavCallback_Init_10,
.callback = sub_81CEFDC,
.open = sub_81CF368,
.createLoopTask = sub_81CF3A0,
.isLoopTaskActive = sub_81CF3D0,
.free1 = sub_81CEFF0,
.free2 = sub_81CF3F8,
},
[POKENAV_MATCH_CALL - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_11,
.unk4 = sub_81CAB24,
.unk8 = sub_81CB260,
.unkC = CreateMatchCallLoopedTask,
.unk10 = sub_81CB2CC,
.unk14 = sub_81CAB38,
.unk18 = sub_81CB2E0,
.init = PokenavCallback_Init_MatchCall,
.callback = GetMatchCallCallback,
.open = OpenMatchCall,
.createLoopTask = CreateMatchCallLoopedTask,
.isLoopTaskActive = IsMatchCallLoopedTaskActive,
.free1 = FreeMatchCallSubstruct1,
.free2 = FreeMatchCallSubstruct2,
},
[POKENAV_RIBBONS_MON_LIST - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_12,
.unk4 = sub_81CFA34,
.unk8 = sub_81CFDD0,
.unkC = sub_81CFE40,
.unk10 = sub_81CFE70,
.unk14 = sub_81CFA48,
.unk18 = sub_81CFE98,
.init = PokenavCallback_Init_12,
.callback = sub_81CFA34,
.open = sub_81CFDD0,
.createLoopTask = sub_81CFE40,
.isLoopTaskActive = sub_81CFE70,
.free1 = sub_81CFA48,
.free2 = sub_81CFE98,
},
[POKENAV_MENU_D - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_13,
.unk4 = sub_81D04A0,
.unk8 = sub_81D0978,
.unkC = sub_81D09B0,
.unk10 = sub_81D09E0,
.unk14 = sub_81D04B8,
.unk18 = sub_81D09F4,
.init = PokenavCallback_Init_13,
.callback = sub_81D04A0,
.open = sub_81D0978,
.createLoopTask = sub_81D09B0,
.isLoopTaskActive = sub_81D09E0,
.free1 = sub_81D04B8,
.free2 = sub_81D09F4,
},
[POKENAV_MENU_E - POKENAV_MENU_IDS_START] =
{
.unk0 = PokenavCallback_Init_14,
.unk4 = sub_81CFA34,
.unk8 = sub_81CFE08,
.unkC = sub_81CFE40,
.unk10 = sub_81CFE70,
.unk14 = sub_81CFA48,
.unk18 = sub_81CFE98,
.init = PokenavCallback_Init_14,
.callback = sub_81CFA34,
.open = sub_81CFE08,
.createLoopTask = sub_81CFE40,
.isLoopTaskActive = sub_81CFE70,
.free1 = sub_81CFA48,
.free2 = sub_81CFE98,
},
};
@@ -416,66 +432,68 @@ static void VBlankCB_Pokenav(void)
ProcessSpriteCopyRequests();
}
#define tState data[0]
static void Task_Pokenav(u8 taskId)
{
u32 v1;
u32 menuId;
s16 *data = gTasks[taskId].data;
switch (data[0])
switch (tState)
{
case 0:
InitPokenavMainMenu();
data[0] = 1;
tState = 1;
break;
case 1:
// Wait for LoopedTask_InitPokenavMenu to finish
if (PokenavMainMenuLoopedTaskIsActive())
break;
SetActivePokenavMenu(POKENAV_MENU_0);
data[0] = 4;
SetActivePokenavMenu(POKENAV_MAIN_MENU);
tState = 4;
break;
case 2:
if (sub_81C786C())
break;
data[0] = 3;
tState = 3;
case 3:
v1 = sub_81C75E0();
if (v1 == -1)
menuId = GetCurrentMenuCB();
if (menuId == -1)
{
ShutdownPokenav();
data[0] = 5;
tState = 5;
}
else if (v1 >= POKENAV_MENU_IDS_START)
else if (menuId >= POKENAV_MENU_IDS_START)
{
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex].unk18();
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex].unk14();
if (SetActivePokenavMenu(v1))
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex].free2();
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex].free1();
if (SetActivePokenavMenu(menuId))
{
data[0] = 4;
tState = 4;
}
else
{
ShutdownPokenav();
data[0] = 5;
tState = 5;
}
}
else if (v1 != 0)
else if (menuId != 0)
{
sub_81C7850(v1);
sub_81C7850(menuId);
if (sub_81C786C())
data[0] = 2;
tState = 2;
}
break;
case 4:
if (!sub_81C75D4())
data[0] = 3;
tState = 3;
break;
case 5:
if (!WaitForPokenavShutdownFade())
{
bool32 calledFromScript = (gPokenavResources->mode != POKENAV_MODE_NORMAL);
sub_81C9430();
FreeMenuHandlerSubstruct1();
FreePokenavResources();
if (calledFromScript)
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
@@ -486,18 +504,20 @@ static void Task_Pokenav(u8 taskId)
}
}
#undef tState
static bool32 SetActivePokenavMenu(u32 menuId)
{
u32 index = menuId - POKENAV_MENU_IDS_START;
InitKeys_();
if (!PokenavMenuCallbacks[index].unk0())
if (!PokenavMenuCallbacks[index].init())
return FALSE;
if (!PokenavMenuCallbacks[index].unk8())
if (!PokenavMenuCallbacks[index].open())
return FALSE;
sub_81C7834(PokenavMenuCallbacks[index].unkC, PokenavMenuCallbacks[index].unk10);
gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index].unk4;
sub_81C7834(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive);
gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index].callback;
gPokenavResources->currentMenuIndex = index;
return TRUE;
}
@@ -507,7 +527,7 @@ static u32 sub_81C75D4(void)
return sub_81C786C();
}
static u32 sub_81C75E0(void)
static u32 GetCurrentMenuCB(void)
{
return gPokenavResources->currentMenuCb1();
}