diff options
-rw-r--r-- | asm/field_effect.s | 51 | ||||
-rw-r--r-- | data/field_effect.s | 10 | ||||
-rw-r--r-- | include/field_fadetransition.h | 1 | ||||
-rw-r--r-- | src/field_effect.c | 37 |
4 files changed, 38 insertions, 61 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 10b068904..fde6d7022 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,57 +5,6 @@ .text - thumb_func_start FieldCB_FallWarpExit -FieldCB_FallWarpExit: @ 8084454 - push {lr} - bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights - bl sub_8111CF0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r0, _0808447C @ =Task_FallWarpFieldEffect - movs r1, 0 - bl CreateTask - ldr r1, _08084480 @ =gFieldCallback - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0808447C: .4byte Task_FallWarpFieldEffect -_08084480: .4byte gFieldCallback - thumb_func_end FieldCB_FallWarpExit - - thumb_func_start Task_FallWarpFieldEffect -Task_FallWarpFieldEffect: @ 8084484 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080844B4 @ =gTasks - adds r4, r1, r0 - ldr r5, _080844B8 @ =sFallWarpEffectCBPtrs -_08084496: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _08084496 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080844B4: .4byte gTasks -_080844B8: .4byte sFallWarpEffectCBPtrs - thumb_func_end Task_FallWarpFieldEffect - thumb_func_start FallWarpEffect_1 FallWarpEffect_1: @ 80844BC push {r4-r6,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 288529090..3e5eba818 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -7,16 +7,6 @@ .align 2 .align 2 -sFallWarpEffectCBPtrs:: @ 83CC034 dataptr - .4byte FallWarpEffect_1 - .4byte FallWarpEffect_2 - .4byte FallWarpEffect_3 - .4byte FallWarpEffect_4 - .4byte FallWarpEffect_5 - .4byte FallWarpEffect_6 - .4byte FallWarpEffect_7 - - .align 2 sEscalatorWarpFieldEffectFuncs:: @ 83CC050 dataptr .4byte EscalatorWarpEffect_1 .4byte EscalatorWarpEffect_2 diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index ada9acbb7..70aa7d023 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -16,6 +16,7 @@ void sub_807DC18(void); void FieldCallback_ReturnToEventScript2(void); void FadeInFromBlack(void); void FadeTransition_FadeInOnReturnToStartMenu(void); +void pal_fill_for_maplights(void); void sub_807DCE4(void); diff --git a/src/field_effect.c b/src/field_effect.c index 9a30088c1..f85a9aef5 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1066,3 +1066,40 @@ void Task_FlyIn(u8 taskId) DestroyTask(taskId); } } + +void Task_FallWarpFieldEffect(u8 taskId); +bool8 FallWarpEffect_1(struct Task * task); +bool8 FallWarpEffect_2(struct Task * task); +bool8 FallWarpEffect_3(struct Task * task); +bool8 FallWarpEffect_4(struct Task * task); +bool8 FallWarpEffect_5(struct Task * task); +bool8 FallWarpEffect_6(struct Task * task); +bool8 FallWarpEffect_7(struct Task * task); + +bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = { + FallWarpEffect_1, + FallWarpEffect_2, + FallWarpEffect_3, + FallWarpEffect_4, + FallWarpEffect_5, + FallWarpEffect_6, + FallWarpEffect_7 +}; + +void FieldCB_FallWarpExit(void) +{ + Overworld_PlaySpecialMapMusic(); + pal_fill_for_maplights(); + sub_8111CF0(); + ScriptContext2_Enable(); + FreezeObjectEvents(); + CreateTask(Task_FallWarpFieldEffect, 0); + gFieldCallback = NULL; +} + +void Task_FallWarpFieldEffect(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + while (sFallWarpEffectCBPtrs[task->data[0]](task)) + ; +} |