summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_tasks.s96
-rw-r--r--data/field_tasks.s11
-rw-r--r--include/field_special_scene.h2
-rw-r--r--include/rom4.h2
-rw-r--r--include/secret_base.h1
-rwxr-xr-xld_script.txt2
-rw-r--r--src/field_special_scene.c2
-rw-r--r--src/field_tasks.c67
8 files changed, 73 insertions, 110 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 5f3e3a03f..42bd38a3d 100644
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -6,102 +6,6 @@
.text
- thumb_func_start Task_RunPerStepCallback
-Task_RunPerStepCallback: @ 806943C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08069460 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0x8
- ldrsh r1, [r1, r2]
- ldr r2, _08069464 @ =gUnknown_08376364
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08069460: .4byte gTasks
-_08069464: .4byte gUnknown_08376364
- thumb_func_end Task_RunPerStepCallback
-
- thumb_func_start RunTimeBasedEvents
-RunTimeBasedEvents: @ 8069468
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0806947A
- cmp r0, 0x1
- beq _08069498
- b _080694AC
-_0806947A:
- ldr r0, _08069494 @ =gMain
- ldr r0, [r0, 0x20]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _080694AC
- bl DoTimeBasedEvents
- ldrh r0, [r4]
- adds r0, 0x1
- b _080694AA
- .align 2, 0
-_08069494: .4byte gMain
-_08069498:
- ldr r0, _080694B4 @ =gMain
- ldr r0, [r0, 0x20]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _080694AC
- ldrh r0, [r4]
- subs r0, 0x1
-_080694AA:
- strh r0, [r4]
-_080694AC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080694B4: .4byte gMain
- thumb_func_end RunTimeBasedEvents
-
- thumb_func_start Task_RunTimeBasedEvents
-Task_RunTimeBasedEvents: @ 80694B8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080694E8 @ =gTasks + 0x8
- adds r4, r1, r0
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- cmp r0, 0
- bne _080694E0
- adds r0, r4, 0
- bl RunTimeBasedEvents
- adds r0, r4, 0x2
- adds r1, r4, 0x4
- bl sub_80540D0
-_080694E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080694E8: .4byte gTasks + 0x8
- thumb_func_end Task_RunTimeBasedEvents
-
thumb_func_start SetUpFieldTasks
SetUpFieldTasks: @ 80694EC
push {r4,r5,lr}
diff --git a/data/field_tasks.s b/data/field_tasks.s
index 122e089e6..d8b4f1146 100644
--- a/data/field_tasks.s
+++ b/data/field_tasks.s
@@ -3,17 +3,6 @@
.section .rodata
- .align 2
-gUnknown_08376364:: @ 8376364
- .4byte DummyPerStepCallback
- .4byte PerStepCallback_8069F64
- .4byte PerStepCallback_8069AA0
- .4byte PerStepCallback_8069864
- .4byte PerStepCallback_8069DD4
- .4byte EndTruckSequence
- .4byte sub_80BCF1C
- .4byte PerStepCallback_806A07C
-
gUnknown_08376384:: @ 8376384
.byte 0, 0,0x59, 2, 0, 1,0x61, 2
.byte 0, -1,0x59, 2, 0, 0,0x61, 2
diff --git a/include/field_special_scene.h b/include/field_special_scene.h
index 5841d6bce..ef3f07120 100644
--- a/include/field_special_scene.h
+++ b/include/field_special_scene.h
@@ -8,6 +8,6 @@ void Task_Truck2(u8 taskId);
void Task_Truck3(u8 taskId);
void Task_HandleTruckSequence(u8 taskId);
void ExecuteTruckSequence(void);
-void EndTruckSequence(void);
+void EndTruckSequence(u8);
#endif // GUARD_FIELD_SPECIAL_SCENE_H
diff --git a/include/rom4.h b/include/rom4.h
index eac4d29a2..b7415bf0a 100644
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -102,7 +102,7 @@ void sub_8053FB0(u16);
// sub_8054034
// sub_8054044
// sub_8054050
-// sub_80540D0
+void sub_80540D0(s16 *, u16 *);
void sub_8054164(void);
u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum);
// get_map_light_level_from_warp
diff --git a/include/secret_base.h b/include/secret_base.h
index 3ca5ab182..3ea75ce27 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -10,6 +10,7 @@ u8 sub_80BC050();
void sub_80BC300();
const u8 sub_80BCCA4(u8);
u8 *sub_80BCCE8(void);
+void sub_80BCF1C(u8);
void sub_80BD674(void *, u32, u8);
#endif // GUARD_SECRET_BASE_H
diff --git a/ld_script.txt b/ld_script.txt
index 281f1781d..16dbf689e 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -104,6 +104,7 @@ SECTIONS {
src/field_control_avatar.o(.text);
src/event_data.o(.text);
src/coord_event_weather.o(.text);
+ src/field_tasks.o(.text);
asm/field_tasks.o(.text);
src/clock.o(.text);
asm/reset_rtc_screen.o(.text);
@@ -360,6 +361,7 @@ SECTIONS {
src/script.o(.rodata);
src/scrcmd.o(.rodata);
src/coord_event_weather.o(.rodata);
+ src/field_tasks.o(.rodata);
data/field_tasks.o(.rodata);
data/reset_rtc_screen.o(.rodata);
data/party_menu.o(.rodata);
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index c88ac8f65..82a7a13e3 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -229,7 +229,7 @@ void ExecuteTruckSequence(void)
CreateTask(Task_HandleTruckSequence, 0xA);
}
-void EndTruckSequence(void)
+void EndTruckSequence(u8 taskId)
{
if (!FuncIsActiveTask(Task_HandleTruckSequence))
{
diff --git a/src/field_tasks.c b/src/field_tasks.c
new file mode 100644
index 000000000..0b6cc2de4
--- /dev/null
+++ b/src/field_tasks.c
@@ -0,0 +1,67 @@
+//
+// Created by scott on 6/22/2017.
+//
+
+#include "global.h"
+#include "task.h"
+#include "main.h"
+#include "rom4.h"
+#include "clock.h"
+#include "script.h"
+#include "field_special_scene.h"
+#include "secret_base.h"
+#include "field_tasks.h"
+
+void DummyPerStepCallback(u8);
+void PerStepCallback_8069F64(u8);
+void PerStepCallback_8069AA0(u8);
+void PerStepCallback_8069864(u8);
+void PerStepCallback_8069DD4(u8);
+void PerStepCallback_806A07C(u8);
+
+void (*const gUnknown_08376364[])(u8) = {
+ DummyPerStepCallback,
+ PerStepCallback_8069F64,
+ PerStepCallback_8069AA0,
+ PerStepCallback_8069864,
+ PerStepCallback_8069DD4,
+ EndTruckSequence,
+ sub_80BCF1C,
+ PerStepCallback_806A07C
+};
+
+void Task_RunPerStepCallback(u8 taskId)
+{
+ int idx = gTasks[taskId].data[0];
+ gUnknown_08376364[idx](taskId);
+}
+
+void RunTimeBasedEvents(s16 *taskData)
+{
+ switch (*taskData)
+ {
+ case 0:
+ if (gMain.vblankCounter1 & 0x1000)
+ {
+ DoTimeBasedEvents();
+ (*taskData)++;
+ }
+ break;
+ case 1:
+ if (!(gMain.vblankCounter1 & 0x1000))
+ {
+ (*taskData)--;
+ }
+ break;
+ }
+}
+
+void Task_RunTimeBasedEvents(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+ if (!ScriptContext2_IsEnabled())
+ {
+ RunTimeBasedEvents(taskData);
+ sub_80540D0(taskData + 1, taskData + 2);
+ }
+}