summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-22 22:59:22 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-22 22:59:22 -0400
commit29ed9d7aee11527bbe971dd1daa099e04d7e5bc9 (patch)
tree83482f67d7984b2cf1e4a22442a6b0234a1e9361
parent9e14c471e6176d3b9eded4815f917b4a2e06d5cc (diff)
Up through ResetFieldTaskArgs
-rwxr-xr-x[-rw-r--r--]asm/field_tasks.s122
-rwxr-xr-x[-rw-r--r--]src/field_specials.c0
-rwxr-xr-x[-rw-r--r--]src/field_tasks.c65
3 files changed, 64 insertions, 123 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 42bd38a3d..2d2c0abe6 100644..100755
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -6,128 +6,6 @@
.text
- thumb_func_start SetUpFieldTasks
-SetUpFieldTasks: @ 80694EC
- push {r4,r5,lr}
- ldr r5, _08069548 @ =Task_RunPerStepCallback
- adds r0, r5, 0
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08069516
- adds r0, r5, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0806954C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
-_08069516:
- ldr r4, _08069550 @ =Task_MuddySlope
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _0806952C
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
-_0806952C:
- ldr r4, _08069554 @ =Task_RunTimeBasedEvents
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08069542
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
-_08069542:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08069548: .4byte Task_RunPerStepCallback
-_0806954C: .4byte gTasks
-_08069550: .4byte Task_MuddySlope
-_08069554: .4byte Task_RunTimeBasedEvents
- thumb_func_end SetUpFieldTasks
-
- thumb_func_start ActivatePerStepCallback
-ActivatePerStepCallback: @ 8069558
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08069590 @ =Task_RunPerStepCallback
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _0806959A
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r1, _08069594 @ =gTasks + 0x8
- adds r1, r0, r1
- movs r2, 0
- adds r0, r1, 0
- adds r0, 0x1E
-_0806957C:
- strh r2, [r0]
- subs r0, 0x2
- cmp r0, r1
- bge _0806957C
- cmp r4, 0x7
- bls _08069598
- movs r0, 0
- strh r0, [r1]
- b _0806959A
- .align 2, 0
-_08069590: .4byte Task_RunPerStepCallback
-_08069594: .4byte gTasks + 0x8
-_08069598:
- strh r4, [r1]
-_0806959A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ActivatePerStepCallback
-
- thumb_func_start ResetFieldTasksArgs
-ResetFieldTasksArgs: @ 80695A0
- push {lr}
- ldr r0, _080695D0 @ =Task_RunPerStepCallback
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, _080695D4 @ =Task_RunTimeBasedEvents
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _080695CA
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r1, _080695D8 @ =gTasks + 0x8
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x2]
- strh r1, [r0, 0x4]
-_080695CA:
- pop {r0}
- bx r0
- .align 2, 0
-_080695D0: .4byte Task_RunPerStepCallback
-_080695D4: .4byte Task_RunTimeBasedEvents
-_080695D8: .4byte gTasks + 0x8
- thumb_func_end ResetFieldTasksArgs
-
thumb_func_start DummyPerStepCallback
DummyPerStepCallback: @ 80695DC
bx lr
diff --git a/src/field_specials.c b/src/field_specials.c
index 2cb2cf795..2cb2cf795 100644..100755
--- a/src/field_specials.c
+++ b/src/field_specials.c
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 0b6cc2de4..d52bafe1c 100644..100755
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -36,7 +36,7 @@ void Task_RunPerStepCallback(u8 taskId)
gUnknown_08376364[idx](taskId);
}
-void RunTimeBasedEvents(s16 *taskData)
+static void RunTimeBasedEvents(s16 *taskData)
{
switch (*taskData)
{
@@ -65,3 +65,66 @@ void Task_RunTimeBasedEvents(u8 taskId)
sub_80540D0(taskData + 1, taskData + 2);
}
}
+
+void Task_MuddySlope(u8);
+
+void SetUpFieldTasks(void)
+{
+ if (!FuncIsActiveTask(Task_RunPerStepCallback))
+ {
+ u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50);
+ gTasks[taskId].data[0] = 0;
+ }
+ if (!FuncIsActiveTask(Task_MuddySlope))
+ {
+ CreateTask(Task_MuddySlope, 0x50);
+ }
+ if (!FuncIsActiveTask(Task_RunTimeBasedEvents))
+ {
+ CreateTask(Task_RunTimeBasedEvents, 0x50);
+ }
+}
+
+void ActivatePerStepCallback(u8 callback)
+{
+ s16 *dataPointer;
+ s16 *dataStart;
+ s16 zero;
+ u8 taskId = FindTaskIdByFunc(Task_RunPerStepCallback);
+ if (taskId != 0xff)
+ {
+ dataStart = gTasks[taskId].data;
+ zero = 0;
+ dataPointer = &dataStart[15];
+ do
+ {
+ *dataPointer-- = zero;
+ } while ((int)dataPointer >= (int)dataStart);
+ if (callback >= ARRAY_COUNT(gUnknown_08376364))
+ {
+ *dataStart = 0;
+ }
+ else
+ {
+ *dataStart = callback;
+ }
+ }
+}
+
+void ResetFieldTasksArgs(void)
+{
+ u8 taskId;
+ s16 *taskData;
+ taskId = FindTaskIdByFunc(Task_RunPerStepCallback);
+ if (taskId != 0xff)
+ {
+ taskData = gTasks[taskId].data;
+ }
+ taskId = FindTaskIdByFunc(Task_RunTimeBasedEvents);
+ if (taskId != 0xff)
+ {
+ taskData = gTasks[taskId].data;
+ taskData[1] = 0;
+ taskData[2] = 0;
+ }
+}