summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhlosioneer <mattmdrr2@gmail.com>2019-02-12 00:51:54 -0500
committerPhlosioneer <mattmdrr2@gmail.com>2019-02-17 23:14:14 -0500
commitfb705e604743f30983145a184472570fdc42fe35 (patch)
tree9f91dd6b4840faf8033adf2a408e88ab5500dd45
parent6466d0bea8e743f8dbba0b2d0bc2e4bce60ea501 (diff)
Decompiled sub_81C7170.
-rw-r--r--asm/pokenav.s60
-rw-r--r--src/pokenav_main.c36
2 files changed, 34 insertions, 62 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s
index db18b89a7..9568a9fee 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -5,66 +5,6 @@
.text
- thumb_func_start sub_81C7170
-sub_81C7170: @ 81C7170
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- bl GetWordTaskArg
- adds r6, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- movs r7, 0
-_081C718C:
- movs r1, 0
- ldrsh r0, [r4, r1]
- bl _call_via_r6
- cmp r0, 0x4
- bhi _081C71D6
- lsls r0, 2
- ldr r1, =_081C71AC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081C71AC:
- .4byte _081C71C6
- .4byte _081C71C0
- .4byte _081C71DE
- .4byte _081C71DA
- .4byte _081C71CE
-_081C71C0:
- ldrh r0, [r4]
- adds r0, 0x1
- b _081C71D8
-_081C71C6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _081C71DE
-_081C71CE:
- adds r0, r5, 0
- bl DestroyTask
- b _081C71DE
-_081C71D6:
- subs r0, 0x5
-_081C71D8:
- strh r0, [r4]
-_081C71DA:
- cmp r7, 0
- beq _081C718C
-_081C71DE:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81C7170
-
thumb_func_start sub_81C71E4
sub_81C71E4: @ 81C71E4
push {r4,r5,lr}
diff --git a/src/pokenav_main.c b/src/pokenav_main.c
index 2d5144a7f..4791cbc25 100644
--- a/src/pokenav_main.c
+++ b/src/pokenav_main.c
@@ -66,7 +66,7 @@ extern u8 gUnknown_0203CF3C;
extern void sub_81C7170(u8 a0);
extern void sub_81C71E4(u8 a0);
-u32 sub_81C7078(s32 a0, u32 a1)
+u32 sub_81C7078(u32 (*a0)(u32), u32 a1)
{
u16 taskId;
@@ -75,7 +75,7 @@ u32 sub_81C7078(s32 a0, u32 a1)
else
taskId = CreateTask(sub_81C71E4, a1);
- SetWordTaskArg(taskId, 1, a0);
+ SetWordTaskArg(taskId, 1, (u32)a0);
gTasks[taskId].data[3] = gUnknown_0203CF3C;
return ((gUnknown_0203CF3C++) << 16) | taskId;
@@ -112,4 +112,36 @@ bool32 sub_81C7124(u32 a0)
}
}
return FALSE;
+}
+
+void sub_81C7170(u8 taskId)
+{
+ s16 *dataPtr;
+ u32 (*func)(u32);
+ bool32 exitLoop;
+
+ func = (u32 (*)(u32))GetWordTaskArg(taskId, 1);
+ dataPtr = gTasks[taskId].data;
+ exitLoop = FALSE;
+ while (!exitLoop) {
+ u32 v1 =((u32 (*)(u32))func)(dataPtr[0]);
+ switch (v1) {
+ case 1:
+ dataPtr[0] = dataPtr[0] + 1;
+ break;
+ case 0:
+ dataPtr[0]++;
+ return;
+ case 4:
+ DestroyTask(taskId);
+ return;
+ default:
+ dataPtr[0] = v1 - 5;
+ break;
+ case 3:
+ break;
+ case 2:
+ return;
+ }
+ }
} \ No newline at end of file