diff options
-rw-r--r-- | asm/field_tasks.s | 96 | ||||
-rw-r--r-- | data/field_tasks.s | 11 | ||||
-rw-r--r-- | include/field_special_scene.h | 2 | ||||
-rw-r--r-- | include/rom4.h | 2 | ||||
-rw-r--r-- | include/secret_base.h | 1 | ||||
-rwxr-xr-x | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_special_scene.c | 2 | ||||
-rw-r--r-- | src/field_tasks.c | 67 |
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); + } +} |