diff options
Diffstat (limited to 'src/pokenav_unk_8.c')
-rw-r--r-- | src/pokenav_unk_8.c | 179 |
1 files changed, 151 insertions, 28 deletions
diff --git a/src/pokenav_unk_8.c b/src/pokenav_unk_8.c index bcafc14d0..1a9b2fe1a 100644 --- a/src/pokenav_unk_8.c +++ b/src/pokenav_unk_8.c @@ -3,20 +3,39 @@ #include "bg.h" #include "window.h" -u32 sub_81CF134(void); -u32 sub_81CF1C4(void); -u32 sub_81CF1D8(void); -u32 sub_81CF278(void); -u32 sub_81CF578(s32); -u32 sub_81CF5F0(s32); -u32 sub_81CF668(s32); -u32 sub_81CF6E0(s32); -u32 sub_81CF758(s32); -u32 sub_81CF798(s32); +struct PokenavSub7 +{ + u32 (*unk0)(struct PokenavSub7 *); + u32 loopedTaskId; + u8 fill1[4]; + s32 unkC; + s32 unk10; + u32 unk14; + u32 unk18; + u32 unk1C; + struct PokenavSub18 *unkPtr; +}; + +u32 sub_81CF010(struct PokenavSub7 *structPtr); +u32 sub_81CF030(struct PokenavSub7 *structPtr); +u32 sub_81CF0B8(struct PokenavSub7 *structPtr); +u32 sub_81CF0B0(struct PokenavSub7 *structPtr); +u32 sub_81CF11C(s32 state); +u32 sub_81CF134(s32 state); +u32 sub_81CF1C4(s32 state); +u32 sub_81CF1D8(s32 state); +u32 sub_81CF278(s32 state); +u32 sub_81CF578(s32 state); +u32 sub_81CF5F0(s32 state); +u32 sub_81CF668(s32 state); +u32 sub_81CF6E0(s32 state); +u32 sub_81CF758(s32 state); +u32 sub_81CF798(s32 state); +void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item); const u32 gUnknown_086233A0[] = {0x16, 0x17, 0x18, 0x21, 0x2F}; -u32 (*const gUnknown_086233B4[])(void) = +const LoopedTask gUnknown_086233B4[] = { sub_81CF134, sub_81CF1C4, @@ -77,23 +96,6 @@ const u8 gUnknown_086235BC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GRE const u8 gUnknown_086235C8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); const u8 gUnknown_086235D4[] = _("{UNK_SPACER}"); -struct PokenavSub7 -{ - u32 (*unk0)(struct PokenavSub7 *); - u32 loopedTaskId; - u8 fill1[12]; - u32 unk14; - u32 unk18; - u32 unk1C; - struct PokenavSub18 *unkPtr; -}; - -u32 sub_81CF010(struct PokenavSub7 *structPtr); -u32 sub_81CF030(struct PokenavSub7 *structPtr); -u32 sub_81CF0B8(struct PokenavSub7 *structPtr); -u32 sub_81CF0B0(struct PokenavSub7 *structPtr); -u32 sub_81CF11C(s32 state); - bool32 sub_81CEF3C(void) { struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); @@ -187,3 +189,124 @@ u32 sub_81CF0C0(void) struct PokenavSub7 *structPtr = GetSubstructPtr(7); return structPtr->unk18; } + +struct PokenavMonList * sub_81CF0D0(void) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + return ptr->unkPtr->unk4; +} + +u16 sub_81CF0E0(void) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + return ptr->unkPtr->unk0; +} + +u16 sub_81CF0F0(void) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + s32 i = GetSelectedMatchCall(); + return ptr->unkPtr->unk4[i].unk6; +} + +u16 sub_81CF10C(void) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + return ptr->unkPtr->unk2; +} + +u32 sub_81CF11C(s32 state) +{ + return gUnknown_086233B4[state](state); +} + +u32 sub_81CF134(s32 state) +{ + s32 i; + struct PokenavMonList item; + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + + ptr->unkPtr->unk0 = 0; + ptr->unkPtr->unk2 = 0; + item.boxId = 14; + for (i = 0; i < PARTY_SIZE; i++) + { + struct Pokemon * pokemon = &gPlayerParty[i]; + if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES)) + return LT_INC_AND_CONTINUE; + if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG)) + { + item.monId = i; + item.unk6 = GetMonData(pokemon, ptr->unk14); + sub_81CF2C4(ptr, &item); + } + } + + return LT_INC_AND_CONTINUE; +} + +u32 sub_81CF1C4(s32 state) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + ptr->unk10 = 0; + ptr->unkC = 0; + return LT_INC_AND_CONTINUE; +} + +u32 sub_81CF1D8(s32 state) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + s32 boxId = ptr->unkC; + s32 monId = ptr->unk10; + s32 boxCount = 0; + struct PokenavMonList item; + + while (boxId < TOTAL_BOXES_COUNT) + { + while (monId < IN_BOX_COUNT) + { + if (CheckBoxMonSanityAt(boxId, monId)) + { + item.boxId = boxId; + item.monId = monId; + item.unk6 = GetBoxMonDataAt(boxId, monId, ptr->unk14); + sub_81CF2C4(ptr, &item); + } + boxCount++; + monId++; + if (boxCount > 14) + { + ptr->unkC = boxId; + ptr->unk10 = monId; + return LT_CONTINUE; + } + } + monId = 0; + boxId++; + } + + return LT_INC_AND_CONTINUE; +} + +u32 sub_81CF278(s32 state) +{ + struct PokenavSub7 * ptr = (struct PokenavSub7 *)GetSubstructPtr(7); + s32 r6 = ptr->unkPtr->unk0; + s32 r4 = ptr->unkPtr->unk4[0].unk6; + s32 i; + ptr->unkPtr->unk4[0].unk6 = 1; + for (i = 1; i < r6; i++) + { + if (ptr->unkPtr->unk4[i].unk6 == r4) + { + ptr->unkPtr->unk4[i].unk6 = ptr->unkPtr->unk4[i - 1].unk6; + } + else + { + r4 = ptr->unkPtr->unk4[i].unk6; + ptr->unkPtr->unk4[i].unk6 = i + 1; + } + } + ptr->unk18 = 1; + return LT_FINISH; +} |