Escalator field effect

This commit is contained in:
PikalaxALT
2020-02-28 10:02:40 -05:00
parent db12644f00
commit 1779aedbf0
11 changed files with 374 additions and 757 deletions
+9 -673
View File
@@ -5,670 +5,6 @@
.text .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 thumb_func_start FldEff_UseWaterfall
FldEff_UseWaterfall: @ 8084CA0 FldEff_UseWaterfall: @ 8084CA0
push {r4,lr} push {r4,lr}
@@ -1304,8 +640,8 @@ _08085144:
LavaridgeGymB1FWarpEffect_5: @ 808514C LavaridgeGymB1FWarpEffect_5: @ 808514C
push {r4,lr} push {r4,lr}
adds r4, r0, 0 adds r4, r0, 0
bl sub_8055F88 bl TryFadeOutOldMapMusic
bl sub_807DC18 bl WarpFadeOutScreen
ldrh r0, [r4, 0x8] ldrh r0, [r4, 0x8]
adds r0, 0x1 adds r0, 0x1
strh r0, [r4, 0x8] strh r0, [r4, 0x8]
@@ -1808,8 +1144,8 @@ LavaridgeGym1FWarpEffect_4: @ 8085524
lsls r0, 24 lsls r0, 24
cmp r0, 0 cmp r0, 0
bne _08085542 bne _08085542
bl sub_8055F88 bl TryFadeOutOldMapMusic
bl sub_807DC18 bl WarpFadeOutScreen
ldrh r0, [r4, 0x8] ldrh r0, [r4, 0x8]
adds r0, 0x1 adds r0, 0x1
strh r0, [r4, 0x8] strh r0, [r4, 0x8]
@@ -2032,8 +1368,8 @@ _080856DC:
bl sub_80857F0 bl sub_80857F0
cmp r0, 0 cmp r0, 0
bne _08085702 bne _08085702
bl sub_8055F88 bl TryFadeOutOldMapMusic
bl sub_807DC18 bl WarpFadeOutScreen
movs r0, 0x1 movs r0, 0x1
strh r0, [r4, 0x8] strh r0, [r4, 0x8]
_08085702: _08085702:
@@ -2823,8 +2159,8 @@ _08085D04:
ldrh r0, [r4, 0x8] ldrh r0, [r4, 0x8]
adds r0, 0x1 adds r0, 0x1
strh r0, [r4, 0x8] strh r0, [r4, 0x8]
bl sub_8055F88 bl TryFadeOutOldMapMusic
bl sub_807DC18 bl WarpFadeOutScreen
_08085D1A: _08085D1A:
add sp, 0x8 add sp, 0x8
pop {r4,r5} pop {r4,r5}
@@ -5376,7 +4712,7 @@ sub_8087118: @ 8087118
lsls r0, 24 lsls r0, 24
cmp r0, 0 cmp r0, 0
beq _08087132 beq _08087132
bl sub_807DC18 bl WarpFadeOutScreen
ldrh r0, [r4, 0x8] ldrh r0, [r4, 0x8]
adds r0, 0x1 adds r0, 0x1
strh r0, [r4, 0x8] strh r0, [r4, 0x8]
+3 -3
View File
@@ -2611,8 +2611,8 @@ _08055F82:
bx r1 bx r1
thumb_func_end GetMapMusicFadeoutSpeed thumb_func_end GetMapMusicFadeoutSpeed
thumb_func_start sub_8055F88 thumb_func_start TryFadeOutOldMapMusic
sub_8055F88: @ 8055F88 TryFadeOutOldMapMusic: @ 8055F88
push {r4,lr} push {r4,lr}
bl sub_8055DA4 bl sub_8055DA4
lsls r0, 16 lsls r0, 16
@@ -2638,7 +2638,7 @@ _08055FB8:
bx r0 bx r0
.align 2, 0 .align 2, 0
_08055FC0: .4byte 0x00004001 _08055FC0: .4byte 0x00004001
thumb_func_end sub_8055F88 thumb_func_end TryFadeOutOldMapMusic
thumb_func_start BGMusicStopped thumb_func_start BGMusicStopped
BGMusicStopped: @ 8055FC4 BGMusicStopped: @ 8055FC4
-19
View File
@@ -6,25 +6,6 @@
.section .rodata .section .rodata
.align 2 .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 .align 2
sUseWaterfallFieldEffectFuncs:: @ 83CC084 dataptr sUseWaterfallFieldEffectFuncs:: @ 83CC084 dataptr
.4byte waterfall_0_setup .4byte waterfall_0_setup
+1 -1
View File
@@ -17,7 +17,7 @@ void StartEscapeRopeFieldEffect(void);
void FieldEffectStop(struct Sprite *sprite, u8 id); void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
void FieldCB_FallWarpExit(void); void FieldCB_FallWarpExit(void);
void StartEscalatorWarp(u8 a0, u8 a1); void StartEscalatorWarp(u8 metatileBehavior, u8 priority);
void StartLavaridgeGymB1FWarp(u8 a0); void StartLavaridgeGymB1FWarp(u8 a0);
void StartLavaridgeGym1FWarp(u8 a0); void StartLavaridgeGym1FWarp(u8 a0);
void sub_8083598(u8 a0); void sub_8083598(u8 a0);
+1 -1
View File
@@ -12,7 +12,7 @@ void DoFallWarp(void);
void sub_807E59C(void); void sub_807E59C(void);
void sub_807E500(void); void sub_807E500(void);
void sub_807DF64(void); void sub_807DF64(void);
void sub_807DC18(void); void WarpFadeOutScreen(void);
void FieldCallback_ReturnToEventScript2(void); void FieldCallback_ReturnToEventScript2(void);
void FadeInFromBlack(void); void FadeInFromBlack(void);
void FadeTransition_FadeInOnReturnToStartMenu(void); void FadeTransition_FadeInOnReturnToStartMenu(void);
+1 -1
View File
@@ -155,7 +155,7 @@ u8 GetCurrentMapType(void);
u8 get_map_light_from_warp0(void); u8 get_map_light_from_warp0(void);
const struct MapHeader *warp1_get_mapheader(void); const struct MapHeader *warp1_get_mapheader(void);
void sub_8055F88(void); void TryFadeOutOldMapMusic(void);
void CB2_ReturnToFieldCableClub(void); void CB2_ReturnToFieldCableClub(void);
void ResetGameStats(void); void ResetGameStats(void);
+1
View File
@@ -50,5 +50,6 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
void sub_8110840(void *oldSave); void sub_8110840(void *oldSave);
void sub_8112F18(u8 windowId); void sub_8112F18(u8 windowId);
bool8 sub_8111C2C(void); bool8 sub_8111C2C(void);
void sub_81128BC(u8 a0);
#endif //GUARD_QUEST_LOG_H #endif //GUARD_QUEST_LOG_H
+1 -1
View File
@@ -3,7 +3,7 @@
#include "global.h" #include "global.h"
void StartEscalator(u8 a0); void StartEscalator(bool8 goingUp);
void StopEscalator(void); void StopEscalator(void);
bool8 IsEscalatorMoving(void); bool8 IsEscalatorMoving(void);
+299
View File
@@ -16,8 +16,11 @@
#include "party_menu.h" #include "party_menu.h"
#include "quest_log.h" #include "quest_log.h"
#include "script.h" #include "script.h"
#include "special_field_anim.h"
#include "task.h" #include "task.h"
#include "trainer_pokemon_sprites.h" #include "trainer_pokemon_sprites.h"
#include "trig.h"
#include "constants/metatile_behaviors.h"
#include "constants/songs.h" #include "constants/songs.h"
#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} #define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
@@ -1229,3 +1232,299 @@ bool8 FallWarpEffect_7(struct Task *task)
DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect));
return FALSE; 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;
}
+16 -16
View File
@@ -91,7 +91,7 @@ void FadeInFromBlack(void)
palette_bg_faded_fill_black(); palette_bg_faded_fill_black();
} }
void sub_807DC18(void) void WarpFadeOutScreen(void)
{ {
const struct MapHeader *header = warp1_get_mapheader(); const struct MapHeader *header = warp1_get_mapheader();
if (header->regionMapSectionId != gMapHeader.regionMapSectionId && sub_80F8110(header->regionMapSectionId, FALSE)) if (header->regionMapSectionId != gMapHeader.regionMapSectionId && sub_80F8110(header->regionMapSectionId, FALSE))
@@ -530,8 +530,8 @@ bool32 sub_807E418(void)
void DoWarp(void) void DoWarp(void)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
sub_8055F88(); TryFadeOutOldMapMusic();
sub_807DC18(); WarpFadeOutScreen();
PlayRainStoppingSoundEffect(); PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN); PlaySE(SE_KAIDAN);
gFieldCallback = sub_807DF64; gFieldCallback = sub_807DF64;
@@ -541,8 +541,8 @@ void DoWarp(void)
void DoDiveWarp(void) void DoDiveWarp(void)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
sub_8055F88(); TryFadeOutOldMapMusic();
sub_807DC18(); WarpFadeOutScreen();
PlayRainStoppingSoundEffect(); PlayRainStoppingSoundEffect();
gFieldCallback = sub_807DF64; gFieldCallback = sub_807DF64;
CreateTask(sub_807E718, 10); CreateTask(sub_807E718, 10);
@@ -604,7 +604,7 @@ void sub_807E58C(void)
void sub_807E59C(void) void sub_807E59C(void)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
sub_8055F88(); TryFadeOutOldMapMusic();
CreateTask(sub_807E784, 10); CreateTask(sub_807E784, 10);
gFieldCallback = sub_807DF94; gFieldCallback = sub_807DF94;
} }
@@ -612,7 +612,7 @@ void sub_807E59C(void)
void sub_807E5C4(void) void sub_807E5C4(void)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
sub_807DC18(); WarpFadeOutScreen();
CreateTask(sub_807E718, 10); CreateTask(sub_807E718, 10);
gFieldCallback = nullsub_60; gFieldCallback = nullsub_60;
} }
@@ -641,8 +641,8 @@ static void sub_807E5EC(u8 taskId)
void DoCableClubWarp(void) void DoCableClubWarp(void)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
sub_8055F88(); TryFadeOutOldMapMusic();
sub_807DC18(); WarpFadeOutScreen();
PlaySE(SE_KAIDAN); PlaySE(SE_KAIDAN);
CreateTask(sub_807E5EC, 10); CreateTask(sub_807E5EC, 10);
} }
@@ -655,7 +655,7 @@ static void sub_807E678(u8 taskId)
case 0: case 0:
ClearLinkCallback_2(); ClearLinkCallback_2();
FadeScreen(1, 0); FadeScreen(1, 0);
sub_8055F88(); TryFadeOutOldMapMusic();
PlaySE(SE_KAIDAN); PlaySE(SE_KAIDAN);
data[0]++; data[0]++;
break; break;
@@ -719,7 +719,7 @@ static void sub_807E784(u8 taskId)
case 1: case 1:
if (!sub_805DAD0()) if (!sub_805DAD0())
{ {
sub_807DC18(); WarpFadeOutScreen();
task->data[0]++; task->data[0]++;
} }
break; break;
@@ -773,14 +773,14 @@ static void sub_807E80C(u8 taskId)
} }
break; break;
case 4: case 4:
sub_8055F88(); TryFadeOutOldMapMusic();
sub_807DC18(); WarpFadeOutScreen();
PlayRainStoppingSoundEffect(); PlayRainStoppingSoundEffect();
task->data[0] = 0; task->data[0] = 0;
task->func = sub_807E718; task->func = sub_807E718;
break; break;
case 5: case 5:
sub_8055F88(); TryFadeOutOldMapMusic();
PlayRainStoppingSoundEffect(); PlayRainStoppingSoundEffect();
task->data[0] = 0; task->data[0] = 0;
task->func = sub_807E718; task->func = sub_807E718;
@@ -808,7 +808,7 @@ static void sub_807E980(u8 taskId)
data[15]--; data[15]--;
else else
{ {
sub_8055F88(); TryFadeOutOldMapMusic();
PlayRainStoppingSoundEffect(); PlayRainStoppingSoundEffect();
playerSpr->oam.priority = 1; playerSpr->oam.priority = 1;
sub_807EB64(data[1], &data[2], &data[3]); sub_807EB64(data[1], &data[2], &data[3]);
@@ -822,7 +822,7 @@ static void sub_807E980(u8 taskId)
data[15]++; data[15]++;
if (data[15] >= 12) if (data[15] >= 12)
{ {
sub_807DC18(); WarpFadeOutScreen();
data[0]++; data[0]++;
} }
break; break;
+1 -1
View File
@@ -295,7 +295,7 @@ static void Task_Seagallop_1(u8 taskId)
if (++task->data[1] == 140) if (++task->data[1] == 140)
{ {
Overworld_FadeOutMapMusic(); Overworld_FadeOutMapMusic();
sub_807DC18(); WarpFadeOutScreen();
task->func = Task_Seagallop_2; task->func = Task_Seagallop_2;
} }
} }