Document some pokenav and region map
This commit is contained in:
+160
-140
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user