summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokenav.s254
-rw-r--r--src/pokenav.c140
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