diff options
-rw-r--r-- | asm/pokenav.s | 254 | ||||
-rw-r--r-- | src/pokenav.c | 140 |
2 files changed, 136 insertions, 258 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s index b89ea22ba..5a3864199 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,260 +5,6 @@ .text - thumb_func_start sub_81C8958 -sub_81C8958: @ 81C8958 - push {r4,r5,lr} - adds r5, r0, 0 - movs r0, 0x11 - bl GetSubstructPtr - adds r4, r0, 0 - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081C8972 - movs r0, 0x2 - b _081C8A22 -_081C8972: - cmp r5, 0x7 - bhi _081C8A1C - lsls r0, r5, 2 - ldr r1, =_081C8984 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C8984: - .4byte _081C89A4 - .4byte _081C89B4 - .4byte _081C89BE - .4byte _081C89D0 - .4byte _081C89DA - .4byte _081C89EC - .4byte _081C89F6 - .4byte _081C8A08 -_081C89A4: - ldr r1, =0x00000888 - adds r0, r4, r1 - adds r1, r4, 0 - bl sub_81C8CB4 - b _081C8A20 - .pool -_081C89B4: - adds r0, r4, 0 - movs r1, 0 - bl sub_81C8DBC - b _081C8A20 -_081C89BE: - ldr r1, =0x00000888 - adds r0, r4, r1 - adds r1, r4, 0 - movs r2, 0 - bl sub_81C8E54 - b _081C8A20 - .pool -_081C89D0: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81C8DBC - b _081C8A20 -_081C89DA: - ldr r1, =0x00000888 - adds r0, r4, r1 - adds r1, r4, 0 - movs r2, 0x1 - bl sub_81C8E54 - b _081C8A20 - .pool -_081C89EC: - adds r0, r4, 0 - movs r1, 0x2 - bl sub_81C8DBC - b _081C8A20 -_081C89F6: - ldr r1, =0x00000888 - adds r0, r4, r1 - adds r1, r4, 0 - movs r2, 0x2 - bl sub_81C8E54 - b _081C8A20 - .pool -_081C8A08: - ldr r1, =0x00000888 - adds r0, r4, r1 - adds r1, r4, 0 - movs r2, 0x3 - bl sub_81C8E54 - b _081C8A20 - .pool -_081C8A1C: - movs r0, 0x4 - b _081C8A22 -_081C8A20: - movs r0, 0 -_081C8A22: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81C8958 - - thumb_func_start sub_81C8A28 -sub_81C8A28: @ 81C8A28 - push {r4-r7,lr} - sub sp, 0x8 - adds r5, r0, 0 - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081C8AA6 - movs r0, 0x11 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =0x00000888 - adds r6, r4, r0 - adds r2, r4, 0 - cmp r5, 0x6 - bls _081C8A4C - b _081C8B64 -_081C8A4C: - lsls r0, r5, 2 - ldr r1, =_081C8A60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C8A60: - .4byte _081C8A7C - .4byte _081C8A88 - .4byte _081C8AE8 - .4byte _081C8AFC - .4byte _081C8B14 - .4byte _081C8B34 - .4byte _081C8B5C -_081C8A7C: - adds r0, r6, 0 - adds r1, r2, 0 - bl sub_81C8D4C - movs r0, 0 - b _081C8B66 -_081C8A88: - ldr r1, =0x0000089c - adds r7, r4, r1 - ldr r0, [r7] - adds r1, r0, 0x1 - str r1, [r7] - movs r3, 0x89 - lsls r3, 4 - adds r0, r4, r3 - ldrh r0, [r0] - cmp r1, r0 - bge _081C8AB0 - adds r0, r2, 0 - movs r2, 0x1 - bl sub_81C8B70 -_081C8AA6: - movs r0, 0x2 - b _081C8B66 - .pool -_081C8AB0: - movs r0, 0 - str r0, [r7] - ldrh r0, [r6, 0x2] - ldrh r1, [r6, 0x8] - cmp r0, r1 - bhi _081C8AC6 - ldrh r0, [r6] - cmp r0, 0 - beq _081C8B52 - adds r4, r0, 0 - b _081C8AD4 -_081C8AC6: - ldrh r1, [r6] - ldrh r0, [r6, 0x8] - adds r4, r1, r0 - ldrh r1, [r6, 0x2] - cmp r4, r1 - ble _081C8B52 - subs r4, r1 -_081C8AD4: - negs r5, r4 - adds r0, r2, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_81C8B70 - strh r4, [r6, 0x6] - str r5, [r7] - movs r0, 0 - b _081C8B66 -_081C8AE8: - ldr r2, =0x0000089c - adds r0, r4, r2 - ldr r0, [r0] - movs r1, 0 - bl sub_81C84E8 - movs r0, 0 - b _081C8B66 - .pool -_081C8AFC: - bl sub_81C8630 - adds r1, r0, 0 - cmp r1, 0 - bne _081C8AA6 - ldr r3, =0x0000089c - adds r0, r4, r3 - str r1, [r0] -_081C8B0C: - movs r0, 0x1 - b _081C8B66 - .pool -_081C8B14: - ldr r0, [r6, 0x10] - ldrh r1, [r6] - ldr r3, =0x0000089c - adds r2, r4, r3 - ldr r2, [r2] - adds r1, r2 - ldr r3, [r6, 0xC] - str r2, [sp] - str r4, [sp, 0x4] - movs r2, 0x1 - bl sub_81C83AC - movs r0, 0 - b _081C8B66 - .pool -_081C8B34: - bl sub_81C83E0 - cmp r0, 0 - bne _081C8AA6 - ldr r0, =0x0000089c - adds r1, r4, r0 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldrh r1, [r6, 0x2] - cmp r0, r1 - bge _081C8B0C - ldrh r6, [r6, 0x8] - cmp r0, r6 - bge _081C8B0C -_081C8B52: - movs r0, 0x9 - b _081C8B66 - .pool -_081C8B5C: - adds r0, r2, 0 - movs r1, 0 - bl sub_81C9008 -_081C8B64: - movs r0, 0x4 -_081C8B66: - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81C8A28 - thumb_func_start sub_81C8B70 sub_81C8B70: @ 81C8B70 push {r4-r7,lr} diff --git a/src/pokenav.c b/src/pokenav.c index 5796eecd4..7b9a6393a 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -179,12 +179,16 @@ extern u32 sub_81C91AC(struct UnknownSubStruct_81C81D4 *a0, const void *a1, void extern u32 sub_81C9160(struct UnknownSubSubStruct_81C81D4 *a0, void *a1); extern void sub_81C8ED0(void); extern void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1); -extern u32 sub_81C8958(s32 a0); -extern u32 sub_81C8A28(s32 a0); extern void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1, u32 a2); -extern void sub_81C9008(struct UnknownSubStruct_81C81D4 *a0, u32 a1); +extern void sub_81C9008(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1); extern void sub_81C7CB4(struct Sprite* sprite); +extern void sub_81C8CB4(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1); +extern void sub_81C8DBC(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1); +extern void sub_81C8E54(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1, u32 a2); +extern void sub_81C8D4C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1); +u32 sub_81C8A28(s32 a0); +u32 sub_81C8958(s32 a0); u32 sub_81C8870(s32 a0); u32 sub_81C85A0(s32 a0); void sub_81C8568(s32 a0, struct UnknownSubStruct_81C81D4 *a1); @@ -2233,7 +2237,7 @@ u32 sub_81C8870(s32 a0) switch (a0) { case 0: - sub_81C9008(structPtr, 1); + sub_81C9008(&structPtr->unk0, 1); // fall-through case 1: if (structPtr->unk89C != structPtr->unk888.unk6) @@ -2272,4 +2276,132 @@ u32 sub_81C8870(s32 a0) default: return 4; } +} + +u32 sub_81C8958(s32 a0) +{ + struct UnknownSubStruct_81C81D4 *structPtr; + structPtr = GetSubstructPtr(0x11); + if (IsDma3ManagerBusyWithBgCopy()) + return 2; + + switch (a0) + { + case 0: + sub_81C8CB4(&structPtr->unk888, &structPtr->unk0); + break; + case 1: + sub_81C8DBC(&structPtr->unk0, 0); + break; + case 2: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 0); + break; + case 3: + sub_81C8DBC(&structPtr->unk0, 1); + break; + case 4: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 1); + break; + case 5: + sub_81C8DBC(&structPtr->unk0, 2); + break; + case 6: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 2); + break; + case 7: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 3); + break; + default: + return 4; + } + return 0; +} + +u32 sub_81C8A28(s32 a0) +{ + struct UnknownSubStruct_81C81D4 *structPtr; + struct UnknownSubSubStruct_81C81D4 *subPtr888; + register struct UnknownSubSubStruct_0203CF40 *subPtr0 asm("r2"); + s32 v4; + + if (IsDma3ManagerBusyWithBgCopy()) + { + return 2; + } + + structPtr = GetSubstructPtr(0x11); + subPtr888 = &structPtr->unk888; + subPtr0 = &structPtr->unk0; + + switch (a0) + { + default: + return 4; + case 0: + sub_81C8D4C(subPtr888, subPtr0); + return 0; + case 1: + { + s32 v1; + s32 v2; + u32 *v3; + register s32 v4 asm("r5"); + + v3 = &structPtr->unk89C; + v1 = *v3 + 1; + *v3 = v1; + if (v1 < structPtr->unk888.unk8) + { + sub_81C8B70(subPtr0, v1, 1); + return 2; + } + + *v3 = 0; + if (subPtr888->unk2 <= subPtr888->unk8) + { + register u32 temp asm("r0"); + temp = subPtr888->unk0; + if (temp == 0) + return 9; + v2 = temp; + } + else + { + register s32 temp asm("r1"); + v2 = subPtr888->unk0 + subPtr888->unk8; + temp = (s32)subPtr888->unk2; + if (v2 <= temp) + return 9; + v2 -= temp; + } + v4 = v2 * -1; + sub_81C8B70(subPtr0, v4, v2); + subPtr888->unk6 = v2; + *v3 = v4; + return 0; + } + case 2: + sub_81C84E8(structPtr->unk89C, 0); + return 0; + case 3: + if (sub_81C8630()) + return 2; + + structPtr->unk89C = 0; + return 1; + case 4: + sub_81C83AC(subPtr888->unk10, subPtr888->unk0 + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, structPtr); + return 0; + case 5: + if (sub_81C83E0()) + return 2; + + v4 = ++structPtr->unk89C; + if (v4 >= subPtr888->unk2 || v4 >= subPtr888->unk8) + return 1; + return 9; + case 6: + sub_81C9008(subPtr0, 0); + return 4; + } }
\ No newline at end of file |