diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 10:02:40 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 10:02:40 -0500 |
commit | 1779aedbf0e321188ff239095a3e20f38cf22575 (patch) | |
tree | c21416e1aa4824283bb3340d316befea33d7fdb5 | |
parent | db12644f0001346604c19e4004eead5cd2203fea (diff) |
Escalator field effect
-rw-r--r-- | asm/field_effect.s | 682 | ||||
-rw-r--r-- | asm/overworld.s | 6 | ||||
-rw-r--r-- | data/field_effect.s | 19 | ||||
-rw-r--r-- | include/field_effect.h | 2 | ||||
-rw-r--r-- | include/field_fadetransition.h | 2 | ||||
-rw-r--r-- | include/overworld.h | 2 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | include/special_field_anim.h | 2 | ||||
-rw-r--r-- | src/field_effect.c | 381 | ||||
-rw-r--r-- | src/field_fadetransition.c | 32 | ||||
-rw-r--r-- | src/seagallop.c | 2 |
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; } } |