start pokenav documentation
This commit is contained in:
154
src/pokenav.c
154
src/pokenav.c
@@ -14,8 +14,6 @@
|
||||
#define LOOPED_TASK_PRIMARY_ID(taskId) (taskId & 0xFFFF)
|
||||
#define LOOPED_TASK_SECONDARY_ID(taskId) (taskId >> 16)
|
||||
|
||||
#define SUBSTRUCT_COUNT 19
|
||||
|
||||
struct PokenavResources
|
||||
{
|
||||
u32 (*currentMenuCb1)(void);
|
||||
@@ -23,7 +21,7 @@ struct PokenavResources
|
||||
u16 mode;
|
||||
u16 conditionSearchId;
|
||||
bool32 hasAnyRibbons;
|
||||
void *field10[SUBSTRUCT_COUNT];
|
||||
void *substructPtrs[POKENAV_SUBSTRUCT_COUNT];
|
||||
};
|
||||
|
||||
struct PokenavCallbacks
|
||||
@@ -38,7 +36,7 @@ struct PokenavCallbacks
|
||||
};
|
||||
|
||||
static u32 GetCurrentMenuCB(void);
|
||||
static u32 sub_81C75D4(void);
|
||||
static u32 IsActiveMenuLoopTaskActive_(void);
|
||||
static bool32 SetActivePokenavMenu(u32 menuId);
|
||||
static bool32 AnyMonHasRibbon(void);
|
||||
static void InitPokenavResources(struct PokenavResources *a0);
|
||||
@@ -126,43 +124,43 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] =
|
||||
},
|
||||
[POKENAV_CONDITION_PARTY - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_7,
|
||||
.callback = sub_81CD070,
|
||||
.open = sub_81CDDD4,
|
||||
.createLoopTask = sub_81CDE2C,
|
||||
.isLoopTaskActive = sub_81CDE64,
|
||||
.free1 = sub_81CD1C0,
|
||||
.free2 = sub_81CECA0,
|
||||
.init = PokenavCallback_Init_PartyCondition,
|
||||
.callback = GetPartyConditionCallback,
|
||||
.open = OpenPartyConditionMenu,
|
||||
.createLoopTask = CreatePartyConditionLoopedTask,
|
||||
.isLoopTaskActive = IsPartyConditionLoopedTaskActive,
|
||||
.free1 = FreePartyConditionSubstruct1,
|
||||
.free2 = FreePartyConditionSubstruct2,
|
||||
},
|
||||
[POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_8,
|
||||
.callback = sub_81CEFDC,
|
||||
.open = sub_81CF330,
|
||||
.createLoopTask = sub_81CF3A0,
|
||||
.isLoopTaskActive = sub_81CF3D0,
|
||||
.free1 = sub_81CEFF0,
|
||||
.free2 = sub_81CF3F8,
|
||||
.init = PokenavCallback_Init_ConditionSearch,
|
||||
.callback = GetConditionSearchResultsCallback,
|
||||
.open = OpenConditionSearchResults,
|
||||
.createLoopTask = CreateSearchResultsLoopedTask,
|
||||
.isLoopTaskActive = IsSearchResultLoopedTaskActive,
|
||||
.free1 = FreeSearchResultSubstruct1,
|
||||
.free2 = FreeSearchResultSubstruct2,
|
||||
},
|
||||
[POKENAV_MENU_9 - POKENAV_MENU_IDS_START] =
|
||||
[POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_9,
|
||||
.callback = sub_81CD070,
|
||||
.open = sub_81CDDD4,
|
||||
.createLoopTask = sub_81CDE2C,
|
||||
.isLoopTaskActive = sub_81CDE64,
|
||||
.free1 = sub_81CD1C0,
|
||||
.free2 = sub_81CECA0,
|
||||
.init = PokenavCallback_Init_ConditionGraphFromSearch,
|
||||
.callback = GetPartyConditionCallback,
|
||||
.open = OpenPartyConditionMenu,
|
||||
.createLoopTask = CreatePartyConditionLoopedTask,
|
||||
.isLoopTaskActive = IsPartyConditionLoopedTaskActive,
|
||||
.free1 = FreePartyConditionSubstruct1,
|
||||
.free2 = FreePartyConditionSubstruct2,
|
||||
},
|
||||
[POKENAV_MENU_A - POKENAV_MENU_IDS_START] =
|
||||
[POKENAV_RETURN_CONDITION_SEARCH - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_10,
|
||||
.callback = sub_81CEFDC,
|
||||
.open = sub_81CF368,
|
||||
.createLoopTask = sub_81CF3A0,
|
||||
.isLoopTaskActive = sub_81CF3D0,
|
||||
.free1 = sub_81CEFF0,
|
||||
.free2 = sub_81CF3F8,
|
||||
.init = PokenavCallback_Init_ReturnToMonSearchList,
|
||||
.callback = GetConditionSearchResultsCallback,
|
||||
.open = OpenConditionSearchListFromGraph,
|
||||
.createLoopTask = CreateSearchResultsLoopedTask,
|
||||
.isLoopTaskActive = IsSearchResultLoopedTaskActive,
|
||||
.free1 = FreeSearchResultSubstruct1,
|
||||
.free2 = FreeSearchResultSubstruct2,
|
||||
},
|
||||
[POKENAV_MATCH_CALL - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
@@ -176,33 +174,33 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] =
|
||||
},
|
||||
[POKENAV_RIBBONS_MON_LIST - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_12,
|
||||
.callback = sub_81CFA34,
|
||||
.open = sub_81CFDD0,
|
||||
.createLoopTask = sub_81CFE40,
|
||||
.isLoopTaskActive = sub_81CFE70,
|
||||
.free1 = sub_81CFA48,
|
||||
.free2 = sub_81CFE98,
|
||||
.init = PokenavCallback_Init_MonRibbonList,
|
||||
.callback = GetRibbonsMonListCallback,
|
||||
.open = OpenRibbonsMonList,
|
||||
.createLoopTask = CreateRibbonsMonListLoopedTask,
|
||||
.isLoopTaskActive = IsRibbonsMonListLoopedTaskActive,
|
||||
.free1 = FreeRibbonsMonList1,
|
||||
.free2 = FreeRibbonsMonList2,
|
||||
},
|
||||
[POKENAV_MENU_D - POKENAV_MENU_IDS_START] =
|
||||
[POKENAV_RIBBONS_SUMMARY_SCREEN - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_13,
|
||||
.callback = sub_81D04A0,
|
||||
.open = sub_81D0978,
|
||||
.createLoopTask = sub_81D09B0,
|
||||
.isLoopTaskActive = sub_81D09E0,
|
||||
.free1 = sub_81D04B8,
|
||||
.free2 = sub_81D09F4,
|
||||
.init = PokenavCallback_Init_RibbonsSummaryMenu,
|
||||
.callback = GetRibbonsSummaryMenuCallback,
|
||||
.open = OpenRibbonsSummaryMenu,
|
||||
.createLoopTask = CreateRibbonsSummaryLoopedTask,
|
||||
.isLoopTaskActive = IsRibbonsSummaryLoopedTaskActive,
|
||||
.free1 = FreeRibbonsSummaryScreen1,
|
||||
.free2 = FreeRibbonsSummaryScreen2,
|
||||
},
|
||||
[POKENAV_MENU_E - POKENAV_MENU_IDS_START] =
|
||||
[POKENAV_RIBBONS_RETURN_TO_MON_LIST - POKENAV_MENU_IDS_START] =
|
||||
{
|
||||
.init = PokenavCallback_Init_14,
|
||||
.callback = sub_81CFA34,
|
||||
.open = sub_81CFE08,
|
||||
.createLoopTask = sub_81CFE40,
|
||||
.isLoopTaskActive = sub_81CFE70,
|
||||
.free1 = sub_81CFA48,
|
||||
.free2 = sub_81CFE98,
|
||||
.init = PokenavCallback_Init_RibbonsMonListFromSummary,
|
||||
.callback = GetRibbonsMonListCallback,
|
||||
.open = OpenRibbonsMonListFromRibbonsSummary,
|
||||
.createLoopTask = CreateRibbonsMonListLoopedTask,
|
||||
.isLoopTaskActive = IsRibbonsMonListLoopedTaskActive,
|
||||
.free1 = FreeRibbonsMonList1,
|
||||
.free2 = FreeRibbonsMonList2,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -368,24 +366,24 @@ static void FreePokenavResources(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < SUBSTRUCT_COUNT; i++)
|
||||
for (i = 0; i < POKENAV_SUBSTRUCT_COUNT; i++)
|
||||
FreePokenavSubstruct(i);
|
||||
|
||||
FREE_AND_SET_NULL(gPokenavResources);
|
||||
InitKeys();
|
||||
}
|
||||
|
||||
static void InitPokenavResources(struct PokenavResources *a0)
|
||||
static void InitPokenavResources(struct PokenavResources *resources)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < SUBSTRUCT_COUNT; i++)
|
||||
a0->field10[i] = NULL;
|
||||
for (i = 0; i < POKENAV_SUBSTRUCT_COUNT; i++)
|
||||
resources->substructPtrs[i] = NULL;
|
||||
|
||||
a0->mode = POKENAV_MODE_NORMAL;
|
||||
a0->currentMenuIndex = 0;
|
||||
a0->hasAnyRibbons = AnyMonHasRibbon();
|
||||
a0->currentMenuCb1 = NULL;
|
||||
resources->mode = POKENAV_MODE_NORMAL;
|
||||
resources->currentMenuIndex = 0;
|
||||
resources->hasAnyRibbons = AnyMonHasRibbon();
|
||||
resources->currentMenuCb1 = NULL;
|
||||
}
|
||||
|
||||
static bool32 AnyMonHasRibbon(void)
|
||||
@@ -453,12 +451,12 @@ static void Task_Pokenav(u8 taskId)
|
||||
tState = 4;
|
||||
break;
|
||||
case 2:
|
||||
if (sub_81C786C())
|
||||
if (IsActiveMenuLoopTaskActive())
|
||||
break;
|
||||
tState = 3;
|
||||
case 3:
|
||||
menuId = GetCurrentMenuCB();
|
||||
if (menuId == -1)
|
||||
if (menuId == POKENAV_MENU_FUNC_EXIT)
|
||||
{
|
||||
ShutdownPokenav();
|
||||
tState = 5;
|
||||
@@ -479,13 +477,13 @@ static void Task_Pokenav(u8 taskId)
|
||||
}
|
||||
else if (menuId != 0)
|
||||
{
|
||||
sub_81C7850(menuId);
|
||||
if (sub_81C786C())
|
||||
RunMainMenuLoopedTask(menuId);
|
||||
if (IsActiveMenuLoopTaskActive())
|
||||
tState = 2;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (!sub_81C75D4())
|
||||
if (!IsActiveMenuLoopTaskActive_())
|
||||
tState = 3;
|
||||
break;
|
||||
case 5:
|
||||
@@ -516,15 +514,15 @@ static bool32 SetActivePokenavMenu(u32 menuId)
|
||||
if (!PokenavMenuCallbacks[index].open())
|
||||
return FALSE;
|
||||
|
||||
sub_81C7834(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive);
|
||||
SetActiveMenuLoopTasks(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive);
|
||||
gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index].callback;
|
||||
gPokenavResources->currentMenuIndex = index;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static u32 sub_81C75D4(void)
|
||||
static u32 IsActiveMenuLoopTaskActive_(void)
|
||||
{
|
||||
return sub_81C786C();
|
||||
return IsActiveMenuLoopTaskActive();
|
||||
}
|
||||
|
||||
static u32 GetCurrentMenuCB(void)
|
||||
@@ -549,19 +547,19 @@ void SetPokenavVBlankCallback(void)
|
||||
|
||||
void *AllocSubstruct(u32 index, u32 size)
|
||||
{
|
||||
gPokenavResources->field10[index] = Alloc(size);
|
||||
return gPokenavResources->field10[index];
|
||||
gPokenavResources->substructPtrs[index] = Alloc(size);
|
||||
return gPokenavResources->substructPtrs[index];
|
||||
}
|
||||
|
||||
void *GetSubstructPtr(u32 index)
|
||||
{
|
||||
return gPokenavResources->field10[index];
|
||||
return gPokenavResources->substructPtrs[index];
|
||||
}
|
||||
|
||||
void FreePokenavSubstruct(u32 index)
|
||||
{
|
||||
if (gPokenavResources->field10[index] != NULL)
|
||||
FREE_AND_SET_NULL(gPokenavResources->field10[index]);
|
||||
if (gPokenavResources->substructPtrs[index] != NULL)
|
||||
FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]);
|
||||
}
|
||||
|
||||
u32 GetPokenavMode(void)
|
||||
|
||||
Reference in New Issue
Block a user