From 330fc46df8ff235f5c32eac212b7fde7475a0ecd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 5 Aug 2019 12:21:45 -0400 Subject: [PATCH] through sub_81CF3F8 --- asm/pokenav_unk_8.s | 181 -------------------------------------------- src/pokenav_unk_8.c | 83 ++++++++++++++++++++ 2 files changed, 83 insertions(+), 181 deletions(-) diff --git a/asm/pokenav_unk_8.s b/asm/pokenav_unk_8.s index daed819f4..85bd6e17d 100644 --- a/asm/pokenav_unk_8.s +++ b/asm/pokenav_unk_8.s @@ -5,187 +5,6 @@ @ File centered around AllocSubstruct(7) - thumb_func_start sub_81CF2C4 -sub_81CF2C4: @ 81CF2C4 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - movs r1, 0 - ldr r0, [r5, 0x20] - ldrh r2, [r0] - lsrs r3, r2, 1 - cmp r2, r3 - beq _081CF2F4 - adds r6, r0, 0 - ldrh r4, [r7, 0x2] -_081CF2DA: - lsls r0, r3, 2 - adds r0, r6, r0 - ldrh r0, [r0, 0x6] - cmp r4, r0 - bls _081CF2E8 - adds r2, r3, 0 - b _081CF2EA -_081CF2E8: - adds r1, r3, 0x1 -_081CF2EA: - subs r0, r2, r1 - lsrs r0, 1 - adds r3, r1, r0 - cmp r2, r3 - bne _081CF2DA -_081CF2F4: - ldr r0, [r5, 0x20] - ldrh r2, [r0] - lsls r6, r3, 2 - cmp r2, r3 - bls _081CF318 - lsls r0, r2, 2 - subs r4, r0, 0x4 -_081CF302: - ldr r0, [r5, 0x20] - lsls r1, r2, 2 - adds r0, 0x4 - adds r1, r0, r1 - adds r0, r4 - ldr r0, [r0] - str r0, [r1] - subs r4, 0x4 - subs r2, 0x1 - cmp r2, r3 - bhi _081CF302 -_081CF318: - ldr r0, [r5, 0x20] - adds r0, 0x4 - adds r0, r6 - ldr r1, [r7] - str r1, [r0] - ldr r1, [r5, 0x20] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CF2C4 - - thumb_func_start sub_81CF330 -sub_81CF330: @ 81CF330 - push {r4,lr} - movs r1, 0x81 - lsls r1, 4 - movs r0, 0x8 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CF360 - ldr r0, =sub_81CF418 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81CF3E4 - str r0, [r4] - movs r0, 0 - str r0, [r4, 0xC] - movs r0, 0x1 - b _081CF362 - .pool -_081CF360: - movs r0, 0 -_081CF362: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CF330 - - thumb_func_start sub_81CF368 -sub_81CF368: @ 81CF368 - push {r4,lr} - movs r1, 0x81 - lsls r1, 4 - movs r0, 0x8 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CF398 - ldr r0, =sub_81CF418 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81CF3E4 - str r0, [r4] - movs r0, 0x1 - str r0, [r4, 0xC] - b _081CF39A - .pool -_081CF398: - movs r0, 0 -_081CF39A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CF368 - - thumb_func_start sub_81CF3A0 -sub_81CF3A0: @ 81CF3A0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_08623598 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5, 0x4] - ldr r0, =sub_81CF3E4 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CF3A0 - - thumb_func_start sub_81CF3D0 -sub_81CF3D0: @ 81CF3D0 - push {lr} - movs r0, 0x8 - bl GetSubstructPtr - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81CF3D0 - - thumb_func_start sub_81CF3E4 -sub_81CF3E4: @ 81CF3E4 - push {lr} - movs r0, 0x8 - bl GetSubstructPtr - ldr r0, [r0, 0x4] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81CF3E4 - - thumb_func_start sub_81CF3F8 -sub_81CF3F8: @ 81CF3F8 - push {r4,lr} - movs r0, 0x8 - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81C8234 - ldrb r0, [r4, 0x8] - bl RemoveWindow - movs r0, 0x8 - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CF3F8 - thumb_func_start sub_81CF418 sub_81CF418: @ 81CF418 push {r4,r5,lr} diff --git a/src/pokenav_unk_8.c b/src/pokenav_unk_8.c index 1a9b2fe1a..3f8eb5324 100644 --- a/src/pokenav_unk_8.c +++ b/src/pokenav_unk_8.c @@ -310,3 +310,86 @@ u32 sub_81CF278(s32 state) ptr->unk18 = 1; return LT_FINISH; } + +void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item) +{ + u32 left = 0; + u32 right = structPtr->unkPtr->unk0; + u32 insertionIdx = left + (right - left) / 2; + + while (right != insertionIdx) + { + if (item->unk6 > structPtr->unkPtr->unk4[insertionIdx].unk6) + right = insertionIdx; + else + left = insertionIdx + 1; + insertionIdx = left + (right - left) / 2; + } + for (right = structPtr->unkPtr->unk0; right > insertionIdx; right--) + structPtr->unkPtr->unk4[right] = structPtr->unkPtr->unk4[right - 1]; + structPtr->unkPtr->unk4[insertionIdx] = *item; + structPtr->unkPtr->unk0++; +} + +// PokenavSub8 + +struct PokenavSub8 +{ + bool32 (*callback)(void); + u32 ltid; + u8 winid; + bool32 unkC; + u16 buff[0x400]; +}; // size: 0x810 + +bool32 sub_81CF3E4(void); +u32 sub_81CF418(s32 state); + +bool32 sub_81CF330(void) +{ + struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); + if (unk == NULL) + return FALSE; + unk->ltid = CreateLoopedTask(sub_81CF418, 1); + unk->callback = sub_81CF3E4; + unk->unkC = FALSE; + return TRUE; +} + +bool32 sub_81CF368(void) +{ + struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); + if (unk == NULL) + return FALSE; + unk->ltid = CreateLoopedTask(sub_81CF418, 1); + unk->callback = sub_81CF3E4; + unk->unkC = TRUE; + return TRUE; +} + +void sub_81CF3A0(s32 idx) +{ + struct PokenavSub8 * unk = (struct PokenavSub8 *)GetSubstructPtr(8); + unk->ltid = CreateLoopedTask(gUnknown_08623598[idx], 1); + unk->callback = sub_81CF3E4; +} + +bool32 sub_81CF3D0(void) +{ + struct PokenavSub8 * unk = (struct PokenavSub8 *)GetSubstructPtr(8); + return unk->callback(); +} + +bool32 sub_81CF3E4(void) +{ + struct PokenavSub8 * unk = (struct PokenavSub8 *)GetSubstructPtr(8); + return IsLoopedTaskActive(unk->ltid); +} + +void sub_81CF3F8(void) +{ + struct PokenavSub8 * unk = (struct PokenavSub8 *)GetSubstructPtr(8); + sub_81C8234(); + RemoveWindow(unk->winid); + FreePokenavSubstruct(8); +}