summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-02-28 10:02:40 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-02-28 10:02:40 -0500
commit1779aedbf0e321188ff239095a3e20f38cf22575 (patch)
treec21416e1aa4824283bb3340d316befea33d7fdb5
parentdb12644f0001346604c19e4004eead5cd2203fea (diff)
Escalator field effect
-rw-r--r--asm/field_effect.s682
-rw-r--r--asm/overworld.s6
-rw-r--r--data/field_effect.s19
-rw-r--r--include/field_effect.h2
-rw-r--r--include/field_fadetransition.h2
-rw-r--r--include/overworld.h2
-rw-r--r--include/quest_log.h1
-rw-r--r--include/special_field_anim.h2
-rw-r--r--src/field_effect.c381
-rw-r--r--src/field_fadetransition.c32
-rw-r--r--src/seagallop.c2
11 files changed, 374 insertions, 757 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s
index a1ecaf384..a331a0882 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -5,670 +5,6 @@
.text
- thumb_func_start StartEscalatorWarp
-StartEscalatorWarp: @ 8084784
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _080847B8 @ =Task_EscalatorWarpFieldEffect
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080847BC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0xA]
- cmp r4, 0x6A
- bne _080847B0
- movs r0, 0x1
- strh r0, [r1, 0xA]
-_080847B0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080847B8: .4byte Task_EscalatorWarpFieldEffect
-_080847BC: .4byte gTasks
- thumb_func_end StartEscalatorWarp
-
- thumb_func_start Task_EscalatorWarpFieldEffect
-Task_EscalatorWarpFieldEffect: @ 80847C0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080847F0 @ =gTasks
- adds r4, r1, r0
- ldr r5, _080847F4 @ =sEscalatorWarpFieldEffectFuncs
-_080847D2:
- 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 _080847D2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080847F0: .4byte gTasks
-_080847F4: .4byte sEscalatorWarpFieldEffectFuncs
- thumb_func_end Task_EscalatorWarpFieldEffect
-
- thumb_func_start EscalatorWarpEffect_1
-EscalatorWarpEffect_1: @ 80847F8
- push {r4,lr}
- adds r4, r0, 0
- bl FreezeObjectEvents
- bl CameraObjectReset2
- ldrb r0, [r4, 0xA]
- bl StartEscalator
- movs r0, 0x1
- bl sub_81128BC
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end EscalatorWarpEffect_1
-
- thumb_func_start EscalatorWarpEffect_2
-EscalatorWarpEffect_2: @ 8084820
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084888 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808488C @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _0808484A
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0808487E
-_0808484A:
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xC]
- strh r1, [r5, 0xE]
- ldrb r0, [r5, 0xA]
- cmp r0, 0
- bne _08084878
- movs r0, 0x4
- strh r0, [r5, 0x8]
-_08084878:
- movs r0, 0x49
- bl PlaySE
-_0808487E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084888: .4byte gPlayerAvatar
-_0808488C: .4byte gObjectEvents
- thumb_func_end EscalatorWarpEffect_2
-
- thumb_func_start EscalatorWarpEffect_3
-EscalatorWarpEffect_3: @ 8084890
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80848F8
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _080848AA
- bl sub_8084990
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080848AA:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end EscalatorWarpEffect_3
-
- thumb_func_start EscalatorWarpEffect_4
-EscalatorWarpEffect_4: @ 80848B4
- push {lr}
- bl sub_80848F8
- bl sub_80849A0
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end EscalatorWarpEffect_4
-
- thumb_func_start EscalatorWarpEffect_5
-EscalatorWarpEffect_5: @ 80848C4
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8084944
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _080848DE
- bl sub_8084990
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080848DE:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end EscalatorWarpEffect_5
-
- thumb_func_start EscalatorWarpEffect_6
-EscalatorWarpEffect_6: @ 80848E8
- push {lr}
- bl sub_8084944
- bl sub_80849A0
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end EscalatorWarpEffect_6
-
- thumb_func_start sub_80848F8
-sub_80848F8: @ 80848F8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _0808493C @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084940 @ =gSprites
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08084936
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_08084936:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808493C: .4byte gPlayerAvatar
-_08084940: .4byte gSprites
- thumb_func_end sub_80848F8
-
- thumb_func_start sub_8084944
-sub_8084944: @ 8084944
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084988 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0808498C @ =gSprites
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08084982
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_08084982:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08084988: .4byte gPlayerAvatar
-_0808498C: .4byte gSprites
- thumb_func_end sub_8084944
-
- thumb_func_start sub_8084990
-sub_8084990: @ 8084990
- push {lr}
- bl sub_8055F88
- bl sub_807DC18
- pop {r0}
- bx r0
- thumb_func_end sub_8084990
-
- thumb_func_start sub_80849A0
-sub_80849A0: @ 80849A0
- push {lr}
- ldr r0, _080849E0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080849DC
- bl BGMusicStopped
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080849DC
- bl StopEscalator
- bl WarpIntoMap
- ldr r1, _080849E4 @ =gFieldCallback
- ldr r0, _080849E8 @ =sub_80849F4
- str r0, [r1]
- ldr r0, _080849EC @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _080849F0 @ =Task_EscalatorWarpFieldEffect
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080849DC:
- pop {r0}
- bx r0
- .align 2, 0
-_080849E0: .4byte gPaletteFade
-_080849E4: .4byte gFieldCallback
-_080849E8: .4byte sub_80849F4
-_080849EC: .4byte CB2_LoadMap
-_080849F0: .4byte Task_EscalatorWarpFieldEffect
- thumb_func_end sub_80849A0
-
- thumb_func_start sub_80849F4
-sub_80849F4: @ 80849F4
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl sub_8111CF0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r0, _08084A1C @ =sub_8084A24
- movs r1, 0
- bl CreateTask
- ldr r1, _08084A20 @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08084A1C: .4byte sub_8084A24
-_08084A20: .4byte gFieldCallback
- thumb_func_end sub_80849F4
-
- thumb_func_start sub_8084A24
-sub_8084A24: @ 8084A24
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08084A54 @ =gTasks
- adds r4, r1, r0
- ldr r5, _08084A58 @ =gUnknown_83CC068
-_08084A36:
- 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 _08084A36
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08084A54: .4byte gTasks
-_08084A58: .4byte gUnknown_83CC068
- thumb_func_end sub_8084A24
-
- thumb_func_start sub_8084A5C
-sub_8084A5C: @ 8084A5C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- bl CameraObjectReset2
- ldr r0, _08084ABC @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084AC0 @ =gObjectEvents
- adds r4, r0
- movs r0, 0x4
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r1, r0, 24
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x10
- strh r0, [r5, 0xA]
- cmp r1, 0x6B
- bne _08084AC4
- movs r1, 0x1
- movs r0, 0x3
- strh r0, [r5, 0x8]
- b _08084AC6
- .align 2, 0
-_08084ABC: .4byte gPlayerAvatar
-_08084AC0: .4byte gObjectEvents
-_08084AC4:
- movs r1, 0
-_08084AC6:
- adds r0, r1, 0
- bl StartEscalator
- movs r0, 0x1
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8084A5C
-
- thumb_func_start sub_8084AD8
-sub_8084AD8: @ 8084AD8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084B10 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084B14 @ =gSprites
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084B10: .4byte gPlayerAvatar
-_08084B14: .4byte gSprites
- thumb_func_end sub_8084AD8
-
- thumb_func_start sub_8084B18
-sub_8084B18: @ 8084B18
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _08084B70 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08084B74 @ =gSprites
- adds r5, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r5, 0x24]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08084B56
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_08084B56:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08084B66
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- movs r0, 0x5
- strh r0, [r4, 0x8]
-_08084B66:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084B70: .4byte gPlayerAvatar
-_08084B74: .4byte gSprites
- thumb_func_end sub_8084B18
-
- thumb_func_start sub_8084B78
-sub_8084B78: @ 8084B78
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084BB0 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084BB4 @ =gSprites
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084BB0: .4byte gPlayerAvatar
-_08084BB4: .4byte gSprites
- thumb_func_end sub_8084B78
-
- thumb_func_start sub_8084BB8
-sub_8084BB8: @ 8084BB8
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _08084C10 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08084C14 @ =gSprites
- adds r5, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r5, 0x24]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08084BF6
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_08084BF6:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08084C08
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08084C08:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084C10: .4byte gPlayerAvatar
-_08084C14: .4byte gSprites
- thumb_func_end sub_8084BB8
-
- thumb_func_start sub_8084C18
-sub_8084C18: @ 8084C18
- push {r4,lr}
- adds r4, r0, 0
- bl IsEscalatorMoving
- lsls r0, 24
- cmp r0, 0
- bne _08084C34
- bl StopEscalator
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _08084C36
-_08084C34:
- movs r0, 0
-_08084C36:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8084C18
-
- thumb_func_start sub_8084C3C
-sub_8084C3C: @ 8084C3C
- push {r4,lr}
- ldr r0, _08084C94 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08084C98 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08084C8A
- bl CameraObjectReset1
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- movs r0, 0x4
- bl GetWalkNormalMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- ldr r0, _08084C9C @ =sub_8084A24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2
- bl sub_81128BC
-_08084C8A:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08084C94: .4byte gPlayerAvatar
-_08084C98: .4byte gObjectEvents
-_08084C9C: .4byte sub_8084A24
- thumb_func_end sub_8084C3C
-
thumb_func_start FldEff_UseWaterfall
FldEff_UseWaterfall: @ 8084CA0
push {r4,lr}
@@ -1304,8 +640,8 @@ _08085144:
LavaridgeGymB1FWarpEffect_5: @ 808514C
push {r4,lr}
adds r4, r0, 0
- bl sub_8055F88
- bl sub_807DC18
+ bl TryFadeOutOldMapMusic
+ bl WarpFadeOutScreen
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
@@ -1808,8 +1144,8 @@ LavaridgeGym1FWarpEffect_4: @ 8085524
lsls r0, 24
cmp r0, 0
bne _08085542
- bl sub_8055F88
- bl sub_807DC18
+ bl TryFadeOutOldMapMusic
+ bl WarpFadeOutScreen
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
@@ -2032,8 +1368,8 @@ _080856DC:
bl sub_80857F0
cmp r0, 0
bne _08085702
- bl sub_8055F88
- bl sub_807DC18
+ bl TryFadeOutOldMapMusic
+ bl WarpFadeOutScreen
movs r0, 0x1
strh r0, [r4, 0x8]
_08085702:
@@ -2823,8 +2159,8 @@ _08085D04:
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
- bl sub_8055F88
- bl sub_807DC18
+ bl TryFadeOutOldMapMusic
+ bl WarpFadeOutScreen
_08085D1A:
add sp, 0x8
pop {r4,r5}
@@ -5376,7 +4712,7 @@ sub_8087118: @ 8087118
lsls r0, 24
cmp r0, 0
beq _08087132
- bl sub_807DC18
+ bl WarpFadeOutScreen
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
diff --git a/asm/overworld.s b/asm/overworld.s
index 930b94de1..d8b87c987 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -2611,8 +2611,8 @@ _08055F82:
bx r1
thumb_func_end GetMapMusicFadeoutSpeed
- thumb_func_start sub_8055F88
-sub_8055F88: @ 8055F88
+ thumb_func_start TryFadeOutOldMapMusic
+TryFadeOutOldMapMusic: @ 8055F88
push {r4,lr}
bl sub_8055DA4
lsls r0, 16
@@ -2638,7 +2638,7 @@ _08055FB8:
bx r0
.align 2, 0
_08055FC0: .4byte 0x00004001
- thumb_func_end sub_8055F88
+ thumb_func_end TryFadeOutOldMapMusic
thumb_func_start BGMusicStopped
BGMusicStopped: @ 8055FC4
diff --git a/data/field_effect.s b/data/field_effect.s
index 3e5eba818..d6ae15de2 100644
--- a/data/field_effect.s
+++ b/data/field_effect.s
@@ -7,25 +7,6 @@
.align 2
.align 2
-sEscalatorWarpFieldEffectFuncs:: @ 83CC050 dataptr
- .4byte EscalatorWarpEffect_1
- .4byte EscalatorWarpEffect_2
- .4byte EscalatorWarpEffect_3
- .4byte EscalatorWarpEffect_4
- .4byte EscalatorWarpEffect_5
- .4byte EscalatorWarpEffect_6
-
- .align 2
-gUnknown_83CC068:: @ 83CC068 dataptr
- .4byte sub_8084A5C
- .4byte sub_8084AD8
- .4byte sub_8084B18
- .4byte sub_8084B78
- .4byte sub_8084BB8
- .4byte sub_8084C18
- .4byte sub_8084C3C
-
- .align 2
sUseWaterfallFieldEffectFuncs:: @ 83CC084 dataptr
.4byte waterfall_0_setup
.4byte waterfall_1_do_anim_probably
diff --git a/include/field_effect.h b/include/field_effect.h
index 7e980bd22..3c92afb6a 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -17,7 +17,7 @@ void StartEscapeRopeFieldEffect(void);
void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
void FieldCB_FallWarpExit(void);
-void StartEscalatorWarp(u8 a0, u8 a1);
+void StartEscalatorWarp(u8 metatileBehavior, u8 priority);
void StartLavaridgeGymB1FWarp(u8 a0);
void StartLavaridgeGym1FWarp(u8 a0);
void sub_8083598(u8 a0);
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index 70aa7d023..c23f201dc 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -12,7 +12,7 @@ void DoFallWarp(void);
void sub_807E59C(void);
void sub_807E500(void);
void sub_807DF64(void);
-void sub_807DC18(void);
+void WarpFadeOutScreen(void);
void FieldCallback_ReturnToEventScript2(void);
void FadeInFromBlack(void);
void FadeTransition_FadeInOnReturnToStartMenu(void);
diff --git a/include/overworld.h b/include/overworld.h
index 8fdbfabe3..754094907 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -155,7 +155,7 @@ u8 GetCurrentMapType(void);
u8 get_map_light_from_warp0(void);
const struct MapHeader *warp1_get_mapheader(void);
-void sub_8055F88(void);
+void TryFadeOutOldMapMusic(void);
void CB2_ReturnToFieldCableClub(void);
void ResetGameStats(void);
diff --git a/include/quest_log.h b/include/quest_log.h
index 752cb3921..016a94267 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -50,5 +50,6 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
void sub_8110840(void *oldSave);
void sub_8112F18(u8 windowId);
bool8 sub_8111C2C(void);
+void sub_81128BC(u8 a0);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/special_field_anim.h b/include/special_field_anim.h
index d21c932bf..37c31f97b 100644
--- a/include/special_field_anim.h
+++ b/include/special_field_anim.h
@@ -3,7 +3,7 @@
#include "global.h"
-void StartEscalator(u8 a0);
+void StartEscalator(bool8 goingUp);
void StopEscalator(void);
bool8 IsEscalatorMoving(void);
diff --git a/src/field_effect.c b/src/field_effect.c
index a8102c1d9..a35fbfe7f 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -16,8 +16,11 @@
#include "party_menu.h"
#include "quest_log.h"
#include "script.h"
+#include "special_field_anim.h"
#include "task.h"
#include "trainer_pokemon_sprites.h"
+#include "trig.h"
+#include "constants/metatile_behaviors.h"
#include "constants/songs.h"
#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
@@ -402,7 +405,7 @@ u32 FieldEffectScript_ReadWord(const u8 **script)
void FieldEffectScript_LoadTiles(const u8 **script)
{
- const struct SpriteSheet * spriteSheet = (const struct SpriteSheet *)FieldEffectScript_ReadWord(script);
+ const struct SpriteSheet * spriteSheet = (const struct SpriteSheet * )FieldEffectScript_ReadWord(script);
if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF)
LoadSpriteSheet(spriteSheet);
*script += sizeof(u32);
@@ -432,7 +435,7 @@ void sub_8083598(u8 paletteIdx)
void FieldEffectScript_LoadFadedPal(const u8 **script)
{
- const struct SpritePalette * spritePalette = (const struct SpritePalette *)FieldEffectScript_ReadWord(script);
+ const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script);
u8 idx = IndexOfSpritePaletteTag(spritePalette->tag);
LoadSpritePalette(spritePalette);
if (idx == 0xFF)
@@ -443,7 +446,7 @@ void FieldEffectScript_LoadFadedPal(const u8 **script)
void FieldEffectScript_LoadPal(const u8 **script)
{
- const struct SpritePalette * spritePalette = (const struct SpritePalette *)FieldEffectScript_ReadWord(script);
+ const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script);
u8 idx = IndexOfSpritePaletteTag(spritePalette->tag);
LoadSpritePalette(spritePalette);
if (idx != 0xFF)
@@ -588,7 +591,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
{
- const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
+ const struct CompressedSpritePalette * spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF)
@@ -597,7 +600,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
return spriteId;
}
-void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
+void FreeResourcesAndDestroySprite(struct Sprite * sprite, u8 spriteId)
{
ResetPreservedPalettesInWeather();
if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
@@ -671,21 +674,21 @@ void PokeballGlowEffect_7(struct Sprite * sprite);
u8 PokecenterHealEffectHelper(s32 x, s32 y);
void HallOfFameRecordEffectHelper(s32 x, s32 y);
-void (*const sPokecenterHealTaskCBTable[])(struct Task *) = {
+void (*const sPokecenterHealTaskCBTable[])(struct Task * ) = {
PokecenterHealEffect_0,
PokecenterHealEffect_1,
PokecenterHealEffect_2,
PokecenterHealEffect_3
};
-void (*const sHallOfFameRecordTaskCBTable[])(struct Task *) = {
+void (*const sHallOfFameRecordTaskCBTable[])(struct Task * ) = {
HallOfFameRecordEffect_0,
HallOfFameRecordEffect_1,
HallOfFameRecordEffect_2,
HallOfFameRecordEffect_3
};
-void (*const sPokeballGlowSpriteCBTable[])(struct Sprite *) = {
+void (*const sPokeballGlowSpriteCBTable[])(struct Sprite * ) = {
PokeballGlowEffect_0,
PokeballGlowEffect_1,
PokeballGlowEffect_2,
@@ -699,7 +702,7 @@ void (*const sPokeballGlowSpriteCBTable[])(struct Sprite *) = {
bool8 FldEff_PokecenterHeal(void)
{
u8 nPokemon;
- struct Task *task;
+ struct Task * task;
nPokemon = CalculatePlayerPartyCount();
task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)];
@@ -717,14 +720,14 @@ void Task_PokecenterHeal(u8 taskId)
sPokecenterHealTaskCBTable[task->data[0]](task);
}
-void PokecenterHealEffect_0(struct Task *task)
+void PokecenterHealEffect_0(struct Task * task)
{
task->data[0]++;
task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], TRUE);
task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]);
}
-void PokecenterHealEffect_1(struct Task *task)
+void PokecenterHealEffect_1(struct Task * task)
{
if (gSprites[task->data[6]].data[0] > 1)
{
@@ -733,7 +736,7 @@ void PokecenterHealEffect_1(struct Task *task)
}
}
-void PokecenterHealEffect_2(struct Task *task)
+void PokecenterHealEffect_2(struct Task * task)
{
if (gSprites[task->data[6]].data[0] > 4)
{
@@ -741,7 +744,7 @@ void PokecenterHealEffect_2(struct Task *task)
}
}
-void PokecenterHealEffect_3(struct Task *task)
+void PokecenterHealEffect_3(struct Task * task)
{
if (gSprites[task->data[6]].data[0] > 6)
{
@@ -755,7 +758,7 @@ void PokecenterHealEffect_3(struct Task *task)
bool8 FldEff_HallOfFameRecord(void)
{
u8 nPokemon;
- struct Task *task;
+ struct Task * task;
nPokemon = CalculatePlayerPartyCount();
task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)];
@@ -767,19 +770,19 @@ bool8 FldEff_HallOfFameRecord(void)
void Task_HallOfFameRecord(u8 taskId)
{
- struct Task *task;
+ struct Task * task;
task = &gTasks[taskId];
sHallOfFameRecordTaskCBTable[task->data[0]](task);
}
-void HallOfFameRecordEffect_0(struct Task *task)
+void HallOfFameRecordEffect_0(struct Task * task)
{
u8 taskId;
task->data[0]++;
task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], FALSE);
}
-void HallOfFameRecordEffect_1(struct Task *task)
+void HallOfFameRecordEffect_1(struct Task * task)
{
if (gSprites[task->data[6]].data[0] > 1)
{
@@ -789,7 +792,7 @@ void HallOfFameRecordEffect_1(struct Task *task)
}
}
-void HallOfFameRecordEffect_2(struct Task *task)
+void HallOfFameRecordEffect_2(struct Task * task)
{
if (gSprites[task->data[6]].data[0] > 4)
{
@@ -797,7 +800,7 @@ void HallOfFameRecordEffect_2(struct Task *task)
}
}
-void HallOfFameRecordEffect_3(struct Task *task)
+void HallOfFameRecordEffect_3(struct Task * task)
{
if (gSprites[task->data[6]].data[0] > 6)
{
@@ -810,7 +813,7 @@ void HallOfFameRecordEffect_3(struct Task *task)
u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare)
{
u8 spriteId;
- struct Sprite *sprite;
+ struct Sprite * sprite;
spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect);
sprite = &gSprites[spriteId];
sprite->pos2.x = x;
@@ -840,7 +843,7 @@ const u8 gUnknown_83CC028[] = {16, 12, 8, 0};
const u8 gUnknown_83CC02C[] = {16, 12, 8, 0};
const u8 gUnknown_83CC030[] = { 0, 0, 0, 0};
-void PokeballGlowEffect_0(struct Sprite *sprite)
+void PokeballGlowEffect_0(struct Sprite * sprite)
{
u8 endSpriteId;
if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
@@ -860,7 +863,7 @@ void PokeballGlowEffect_0(struct Sprite *sprite)
}
}
-void PokeballGlowEffect_1(struct Sprite *sprite)
+void PokeballGlowEffect_1(struct Sprite * sprite)
{
if ((--sprite->data[1]) == 0)
{
@@ -875,7 +878,7 @@ void PokeballGlowEffect_1(struct Sprite *sprite)
}
}
-void PokeballGlowEffect_2(struct Sprite *sprite)
+void PokeballGlowEffect_2(struct Sprite * sprite)
{
u8 phase;
if ((--sprite->data[1]) == 0)
@@ -905,7 +908,7 @@ void PokeballGlowEffect_2(struct Sprite *sprite)
}
}
-void PokeballGlowEffect_3(struct Sprite *sprite)
+void PokeballGlowEffect_3(struct Sprite * sprite)
{
u8 phase;
if ((--sprite->data[1]) == 0)
@@ -927,7 +930,7 @@ void PokeballGlowEffect_3(struct Sprite *sprite)
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]);
}
-void PokeballGlowEffect_4(struct Sprite *sprite)
+void PokeballGlowEffect_4(struct Sprite * sprite)
{
if ((--sprite->data[1]) == 0)
{
@@ -935,12 +938,12 @@ void PokeballGlowEffect_4(struct Sprite *sprite)
}
}
-void PokeballGlowEffect_5(struct Sprite *sprite)
+void PokeballGlowEffect_5(struct Sprite * sprite)
{
sprite->data[0]++;
}
-void PokeballGlowEffect_6(struct Sprite *sprite)
+void PokeballGlowEffect_6(struct Sprite * sprite)
{
if (sprite->data[5] == 0 || IsFanfareTaskInactive())
{
@@ -948,7 +951,7 @@ void PokeballGlowEffect_6(struct Sprite *sprite)
}
}
-void PokeballGlowEffect_7(struct Sprite *sprite)
+void PokeballGlowEffect_7(struct Sprite * sprite)
{
}
@@ -1053,7 +1056,7 @@ void FieldCallback_FlyArrive(void)
void Task_FlyIn(u8 taskId)
{
- struct Task *task;
+ struct Task * task;
task = &gTasks[taskId];
if (task->data[0] == 0)
{
@@ -1109,10 +1112,10 @@ void Task_FallWarpFieldEffect(u8 taskId)
;
}
-bool8 FallWarpEffect_1(struct Task *task)
+bool8 FallWarpEffect_1(struct Task * task)
{
- struct ObjectEvent *playerObject;
- struct Sprite *playerSprite;
+ struct ObjectEvent * playerObject;
+ struct Sprite * playerSprite;
playerObject = &gObjectEvents[gPlayerAvatar.objectEventId];
playerSprite = &gSprites[gPlayerAvatar.spriteId];
CameraObjectReset2();
@@ -1127,7 +1130,7 @@ bool8 FallWarpEffect_1(struct Task *task)
return TRUE;
}
-bool8 FallWarpEffect_2(struct Task *task)
+bool8 FallWarpEffect_2(struct Task * task)
{
if (IsWeatherNotFadingIn())
{
@@ -1136,9 +1139,9 @@ bool8 FallWarpEffect_2(struct Task *task)
return FALSE;
}
-bool8 FallWarpEffect_3(struct Task *task)
+bool8 FallWarpEffect_3(struct Task * task)
{
- struct Sprite *sprite;
+ struct Sprite * sprite;
s16 centerToCornerVecY;
sprite = &gSprites[gPlayerAvatar.spriteId];
centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
@@ -1151,10 +1154,10 @@ bool8 FallWarpEffect_3(struct Task *task)
return FALSE;
}
-bool8 FallWarpEffect_4(struct Task *task)
+bool8 FallWarpEffect_4(struct Task * task)
{
- struct ObjectEvent *objectEvent;
- struct Sprite *sprite;
+ struct ObjectEvent * objectEvent;
+ struct Sprite * sprite;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sprite = &gSprites[gPlayerAvatar.spriteId];
@@ -1185,7 +1188,7 @@ bool8 FallWarpEffect_4(struct Task *task)
return FALSE;
}
-bool8 FallWarpEffect_5(struct Task *task)
+bool8 FallWarpEffect_5(struct Task * task)
{
task->data[0]++;
task->data[1] = 4;
@@ -1194,7 +1197,7 @@ bool8 FallWarpEffect_5(struct Task *task)
return TRUE;
}
-bool8 FallWarpEffect_6(struct Task *task)
+bool8 FallWarpEffect_6(struct Task * task)
{
SetCameraPanning(0, task->data[1]);
task->data[1] = -task->data[1];
@@ -1210,7 +1213,7 @@ bool8 FallWarpEffect_6(struct Task *task)
return FALSE;
}
-bool8 FallWarpEffect_7(struct Task *task)
+bool8 FallWarpEffect_7(struct Task * task)
{
s16 x, y;
gPlayerAvatar.preventStep = FALSE;
@@ -1229,3 +1232,299 @@ bool8 FallWarpEffect_7(struct Task *task)
DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect));
return FALSE;
}
+
+void Task_EscalatorWarpFieldEffect(u8 taskId);
+bool8 EscalatorWarpEffect_1(struct Task * task);
+bool8 EscalatorWarpEffect_2(struct Task * task);
+bool8 EscalatorWarpEffect_3(struct Task * task);
+bool8 EscalatorWarpEffect_4(struct Task * task);
+bool8 EscalatorWarpEffect_5(struct Task * task);
+bool8 EscalatorWarpEffect_6(struct Task * task);
+void Escalator_AnimatePlayerGoingDown(struct Task * task);
+void Escalator_AnimatePlayerGoingUp(struct Task * task);
+void Escalator_BeginFadeOutToNewMap(void);
+void Escalator_TransitionToWarpInEffect(void);
+void FieldCB_EscalatorWarpIn(void);
+void Task_EscalatorWarpInFieldEffect(u8 taskId);
+bool8 EscalatorWarpInEffect_1(struct Task * task);
+bool8 EscalatorWarpInEffect_2(struct Task * task);
+bool8 EscalatorWarpInEffect_3(struct Task * task);
+bool8 EscalatorWarpInEffect_4(struct Task * task);
+bool8 EscalatorWarpInEffect_5(struct Task * task);
+bool8 EscalatorWarpInEffect_6(struct Task * task);
+bool8 EscalatorWarpInEffect_7(struct Task * task);
+
+bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = {
+ EscalatorWarpEffect_1,
+ EscalatorWarpEffect_2,
+ EscalatorWarpEffect_3,
+ EscalatorWarpEffect_4,
+ EscalatorWarpEffect_5,
+ EscalatorWarpEffect_6
+};
+
+bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = {
+ EscalatorWarpInEffect_1,
+ EscalatorWarpInEffect_2,
+ EscalatorWarpInEffect_3,
+ EscalatorWarpInEffect_4,
+ EscalatorWarpInEffect_5,
+ EscalatorWarpInEffect_6,
+ EscalatorWarpInEffect_7
+};
+
+void StartEscalatorWarp(u8 metatileBehavior, u8 priority)
+{
+ u8 taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority);
+ gTasks[taskId].data[1] = 0;
+ if (metatileBehavior == MB_UP_ESCALATOR)
+ gTasks[taskId].data[1] = 1;
+}
+
+void Task_EscalatorWarpFieldEffect(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task))
+ ;
+}
+
+bool8 EscalatorWarpEffect_1(struct Task * task)
+{
+ FreezeObjectEvents();
+ CameraObjectReset2();
+ StartEscalator(task->data[1]);
+ sub_81128BC(1);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 EscalatorWarpEffect_2(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetPlayerFacingDirection()));
+ task->data[0]++;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ if ((u8)task->data[1] == 0)
+ {
+ task->data[0] = 4;
+ }
+ PlaySE(SE_ESUKA);
+ }
+ return FALSE;
+}
+
+bool8 EscalatorWarpEffect_3(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingDown(task);
+ if (task->data[2] > 3)
+ {
+ Escalator_BeginFadeOutToNewMap();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 EscalatorWarpEffect_4(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingDown(task);
+ Escalator_TransitionToWarpInEffect();
+ return FALSE;
+}
+
+bool8 EscalatorWarpEffect_5(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingUp(task);
+ if (task->data[2] > 3)
+ {
+ Escalator_BeginFadeOutToNewMap();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 EscalatorWarpEffect_6(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingUp(task);
+ Escalator_TransitionToWarpInEffect();
+ return FALSE;
+}
+
+
+void Escalator_AnimatePlayerGoingDown(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[2]);
+ sprite->pos2.y = Sin(0x94, task->data[2]);
+ task->data[3]++;
+ if (task->data[3] & 1)
+ {
+ task->data[2]++;
+ }
+}
+
+void Escalator_AnimatePlayerGoingUp(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[2]);
+ sprite->pos2.y = Sin(0x76, task->data[2]);
+ task->data[3]++;
+ if (task->data[3] & 1)
+ {
+ task->data[2]++;
+ }
+}
+
+void Escalator_BeginFadeOutToNewMap(void)
+{
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+}
+
+void Escalator_TransitionToWarpInEffect(void)
+{
+ if (!gPaletteFade.active && BGMusicStopped() == TRUE)
+ {
+ StopEscalator();
+ WarpIntoMap();
+ gFieldCallback = FieldCB_EscalatorWarpIn;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpFieldEffect));
+ }
+}
+
+void FieldCB_EscalatorWarpIn(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ sub_8111CF0();
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ CreateTask(Task_EscalatorWarpInFieldEffect, 0);
+ gFieldCallback = NULL;
+}
+
+void Task_EscalatorWarpInFieldEffect(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ while (sEscalatorWarpInFieldEffectFuncs[task->data[0]](task))
+ ;
+}
+
+bool8 EscalatorWarpInEffect_1(struct Task *task)
+{
+ struct ObjectEvent *objectEvent;
+ s16 x;
+ s16 y;
+ u8 behavior;
+ CameraObjectReset2();
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(DIR_EAST));
+ PlayerGetDestCoords(&x, &y);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ task->data[0]++;
+ task->data[1] = 16;
+ if (behavior == MB_DOWN_ESCALATOR)
+ {
+ behavior = 1;
+ task->data[0] = 3;
+ } else
+ {
+ behavior = 0;
+ }
+ StartEscalator(behavior);
+ return TRUE;
+}
+
+bool8 EscalatorWarpInEffect_2(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[1]);
+ sprite->pos2.y = Sin(0x94, task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 EscalatorWarpInEffect_3(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[1]);
+ sprite->pos2.y = Sin(0x94, task->data[1]);
+ task->data[2]++;
+ if (task->data[2] & 1)
+ {
+ task->data[1]--;
+ }
+ if (task->data[1] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0] = 5;
+ }
+ return FALSE;
+}
+
+
+bool8 EscalatorWarpInEffect_4(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[1]);
+ sprite->pos2.y = Sin(0x76, task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 EscalatorWarpInEffect_5(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[1]);
+ sprite->pos2.y = Sin(0x76, task->data[1]);
+ task->data[2]++;
+ if (task->data[2] & 1)
+ {
+ task->data[1]--;
+ }
+ if (task->data[1] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 EscalatorWarpInEffect_6(struct Task *task)
+{
+ if (IsEscalatorMoving())
+ {
+ return FALSE;
+ }
+ StopEscalator();
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 EscalatorWarpInEffect_7(struct Task *task)
+{
+ struct ObjectEvent *objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ CameraObjectReset1();
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST));
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpInFieldEffect));
+ sub_81128BC(2);
+ }
+ return FALSE;
+}
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 738dbd7a0..0076c2d8f 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -91,7 +91,7 @@ void FadeInFromBlack(void)
palette_bg_faded_fill_black();
}
-void sub_807DC18(void)
+void WarpFadeOutScreen(void)
{
const struct MapHeader *header = warp1_get_mapheader();
if (header->regionMapSectionId != gMapHeader.regionMapSectionId && sub_80F8110(header->regionMapSectionId, FALSE))
@@ -530,8 +530,8 @@ bool32 sub_807E418(void)
void DoWarp(void)
{
ScriptContext2_Enable();
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
gFieldCallback = sub_807DF64;
@@ -541,8 +541,8 @@ void DoWarp(void)
void DoDiveWarp(void)
{
ScriptContext2_Enable();
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
gFieldCallback = sub_807DF64;
CreateTask(sub_807E718, 10);
@@ -604,7 +604,7 @@ void sub_807E58C(void)
void sub_807E59C(void)
{
ScriptContext2_Enable();
- sub_8055F88();
+ TryFadeOutOldMapMusic();
CreateTask(sub_807E784, 10);
gFieldCallback = sub_807DF94;
}
@@ -612,7 +612,7 @@ void sub_807E59C(void)
void sub_807E5C4(void)
{
ScriptContext2_Enable();
- sub_807DC18();
+ WarpFadeOutScreen();
CreateTask(sub_807E718, 10);
gFieldCallback = nullsub_60;
}
@@ -641,8 +641,8 @@ static void sub_807E5EC(u8 taskId)
void DoCableClubWarp(void)
{
ScriptContext2_Enable();
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlaySE(SE_KAIDAN);
CreateTask(sub_807E5EC, 10);
}
@@ -655,7 +655,7 @@ static void sub_807E678(u8 taskId)
case 0:
ClearLinkCallback_2();
FadeScreen(1, 0);
- sub_8055F88();
+ TryFadeOutOldMapMusic();
PlaySE(SE_KAIDAN);
data[0]++;
break;
@@ -719,7 +719,7 @@ static void sub_807E784(u8 taskId)
case 1:
if (!sub_805DAD0())
{
- sub_807DC18();
+ WarpFadeOutScreen();
task->data[0]++;
}
break;
@@ -773,14 +773,14 @@ static void sub_807E80C(u8 taskId)
}
break;
case 4:
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
task->data[0] = 0;
task->func = sub_807E718;
break;
case 5:
- sub_8055F88();
+ TryFadeOutOldMapMusic();
PlayRainStoppingSoundEffect();
task->data[0] = 0;
task->func = sub_807E718;
@@ -808,7 +808,7 @@ static void sub_807E980(u8 taskId)
data[15]--;
else
{
- sub_8055F88();
+ TryFadeOutOldMapMusic();
PlayRainStoppingSoundEffect();
playerSpr->oam.priority = 1;
sub_807EB64(data[1], &data[2], &data[3]);
@@ -822,7 +822,7 @@ static void sub_807E980(u8 taskId)
data[15]++;
if (data[15] >= 12)
{
- sub_807DC18();
+ WarpFadeOutScreen();
data[0]++;
}
break;
diff --git a/src/seagallop.c b/src/seagallop.c
index aa0c48da1..3257819aa 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -295,7 +295,7 @@ static void Task_Seagallop_1(u8 taskId)
if (++task->data[1] == 140)
{
Overworld_FadeOutMapMusic();
- sub_807DC18();
+ WarpFadeOutScreen();
task->func = Task_Seagallop_2;
}
}