Teleport field effect
This commit is contained in:
@@ -5,605 +5,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start CreateTeleportFieldEffectTask
|
|
||||||
CreateTeleportFieldEffectTask: @ 8085B64
|
|
||||||
push {lr}
|
|
||||||
ldr r0, _08085B74 @ =Task_DoTeleportFieldEffect
|
|
||||||
movs r1, 0
|
|
||||||
bl CreateTask
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085B74: .4byte Task_DoTeleportFieldEffect
|
|
||||||
thumb_func_end CreateTeleportFieldEffectTask
|
|
||||||
|
|
||||||
thumb_func_start Task_DoTeleportFieldEffect
|
|
||||||
Task_DoTeleportFieldEffect: @ 8085B78
|
|
||||||
push {lr}
|
|
||||||
adds r1, r0, 0
|
|
||||||
lsls r1, 24
|
|
||||||
lsrs r1, 24
|
|
||||||
ldr r3, _08085BA0 @ =sTeleportEffectFuncs
|
|
||||||
ldr r2, _08085BA4 @ =gTasks
|
|
||||||
lsls r0, r1, 2
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 3
|
|
||||||
adds r0, r2
|
|
||||||
movs r2, 0x8
|
|
||||||
ldrsh r1, [r0, r2]
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r3
|
|
||||||
ldr r1, [r1]
|
|
||||||
bl _call_via_r1
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085BA0: .4byte sTeleportEffectFuncs
|
|
||||||
_08085BA4: .4byte gTasks
|
|
||||||
thumb_func_end Task_DoTeleportFieldEffect
|
|
||||||
|
|
||||||
thumb_func_start TeleportFieldEffectTask1
|
|
||||||
TeleportFieldEffectTask1: @ 8085BA8
|
|
||||||
push {r4,lr}
|
|
||||||
adds r4, r0, 0
|
|
||||||
bl ScriptContext2_Enable
|
|
||||||
bl FreezeObjectEvents
|
|
||||||
bl CameraObjectReset2
|
|
||||||
bl GetPlayerFacingDirection
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
strh r0, [r4, 0x26]
|
|
||||||
ldrh r0, [r4, 0x8]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0x8]
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end TeleportFieldEffectTask1
|
|
||||||
|
|
||||||
thumb_func_start TeleportFieldEffectTask2
|
|
||||||
TeleportFieldEffectTask2: @ 8085BD0
|
|
||||||
push {r4,r5,lr}
|
|
||||||
sub sp, 0x8
|
|
||||||
adds r4, r0, 0
|
|
||||||
ldr r1, _08085C54 @ =gUnknown_83CC108
|
|
||||||
mov r0, sp
|
|
||||||
movs r2, 0x5
|
|
||||||
bl memcpy
|
|
||||||
ldr r0, _08085C58 @ =gPlayerAvatar
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _08085C5C @ =gObjectEvents
|
|
||||||
adds r5, r0, r1
|
|
||||||
ldrh r1, [r4, 0xA]
|
|
||||||
movs r2, 0xA
|
|
||||||
ldrsh r0, [r4, r2]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08085C02
|
|
||||||
subs r0, r1, 0x1
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
lsls r0, 16
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08085C1C
|
|
||||||
_08085C02:
|
|
||||||
ldrb r0, [r5, 0x18]
|
|
||||||
lsls r0, 28
|
|
||||||
lsrs r0, 28
|
|
||||||
add r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
adds r0, r5, 0
|
|
||||||
bl ObjectEventTurn
|
|
||||||
movs r0, 0x8
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
ldrh r0, [r4, 0xC]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
_08085C1C:
|
|
||||||
movs r1, 0xC
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
cmp r0, 0x7
|
|
||||||
ble _08085C4A
|
|
||||||
movs r2, 0x26
|
|
||||||
ldrsh r1, [r4, r2]
|
|
||||||
ldrb r0, [r5, 0x18]
|
|
||||||
lsls r0, 28
|
|
||||||
lsrs r0, 28
|
|
||||||
cmp r1, r0
|
|
||||||
bne _08085C4A
|
|
||||||
ldrh r0, [r4, 0x8]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0x8]
|
|
||||||
movs r0, 0x4
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
movs r0, 0x8
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
movs r0, 0x1
|
|
||||||
strh r0, [r4, 0xE]
|
|
||||||
movs r0, 0x27
|
|
||||||
bl PlaySE
|
|
||||||
_08085C4A:
|
|
||||||
add sp, 0x8
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085C54: .4byte gUnknown_83CC108
|
|
||||||
_08085C58: .4byte gPlayerAvatar
|
|
||||||
_08085C5C: .4byte gObjectEvents
|
|
||||||
thumb_func_end TeleportFieldEffectTask2
|
|
||||||
|
|
||||||
thumb_func_start TeleportFieldEffectTask3
|
|
||||||
TeleportFieldEffectTask3: @ 8085C60
|
|
||||||
push {r4,r5,lr}
|
|
||||||
sub sp, 0x8
|
|
||||||
adds r4, r0, 0
|
|
||||||
ldr r1, _08085D24 @ =gUnknown_83CC108
|
|
||||||
mov r0, sp
|
|
||||||
movs r2, 0x5
|
|
||||||
bl memcpy
|
|
||||||
ldr r2, _08085D28 @ =gPlayerAvatar
|
|
||||||
ldrb r1, [r2, 0x5]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _08085D2C @ =gObjectEvents
|
|
||||||
adds r3, r0, r1
|
|
||||||
ldrb r1, [r2, 0x4]
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _08085D30 @ =gSprites
|
|
||||||
adds r5, r0, r1
|
|
||||||
ldrh r0, [r4, 0xA]
|
|
||||||
subs r0, 0x1
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
lsls r0, 16
|
|
||||||
cmp r0, 0
|
|
||||||
bgt _08085CAA
|
|
||||||
movs r0, 0x4
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
ldrb r0, [r3, 0x18]
|
|
||||||
lsls r0, 28
|
|
||||||
lsrs r0, 28
|
|
||||||
add r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
adds r0, r3, 0
|
|
||||||
bl ObjectEventTurn
|
|
||||||
_08085CAA:
|
|
||||||
ldrh r0, [r5, 0x22]
|
|
||||||
ldrh r1, [r4, 0xE]
|
|
||||||
subs r0, r1
|
|
||||||
strh r0, [r5, 0x22]
|
|
||||||
ldrh r1, [r4, 0xE]
|
|
||||||
ldrh r2, [r4, 0x10]
|
|
||||||
adds r0, r1, r2
|
|
||||||
strh r0, [r4, 0x10]
|
|
||||||
ldrh r0, [r4, 0xC]
|
|
||||||
subs r0, 0x1
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
lsls r0, 16
|
|
||||||
cmp r0, 0
|
|
||||||
bgt _08085CD6
|
|
||||||
movs r0, 0x4
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
lsls r0, r1, 16
|
|
||||||
asrs r0, 16
|
|
||||||
cmp r0, 0x7
|
|
||||||
bgt _08085CD6
|
|
||||||
lsls r0, r1, 1
|
|
||||||
strh r0, [r4, 0xE]
|
|
||||||
_08085CD6:
|
|
||||||
movs r1, 0x10
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
cmp r0, 0x8
|
|
||||||
ble _08085D04
|
|
||||||
ldrb r1, [r5, 0x5]
|
|
||||||
movs r0, 0xD
|
|
||||||
negs r0, r0
|
|
||||||
ands r0, r1
|
|
||||||
movs r1, 0x4
|
|
||||||
orrs r0, r1
|
|
||||||
strb r0, [r5, 0x5]
|
|
||||||
adds r2, r5, 0
|
|
||||||
adds r2, 0x42
|
|
||||||
ldrb r1, [r2]
|
|
||||||
movs r0, 0xC0
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08085D04
|
|
||||||
movs r0, 0x3F
|
|
||||||
ands r0, r1
|
|
||||||
movs r1, 0x80
|
|
||||||
orrs r0, r1
|
|
||||||
strb r0, [r2]
|
|
||||||
_08085D04:
|
|
||||||
movs r2, 0x10
|
|
||||||
ldrsh r0, [r4, r2]
|
|
||||||
cmp r0, 0xA7
|
|
||||||
ble _08085D1A
|
|
||||||
ldrh r0, [r4, 0x8]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0x8]
|
|
||||||
bl TryFadeOutOldMapMusic
|
|
||||||
bl WarpFadeOutScreen
|
|
||||||
_08085D1A:
|
|
||||||
add sp, 0x8
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085D24: .4byte gUnknown_83CC108
|
|
||||||
_08085D28: .4byte gPlayerAvatar
|
|
||||||
_08085D2C: .4byte gObjectEvents
|
|
||||||
_08085D30: .4byte gSprites
|
|
||||||
thumb_func_end TeleportFieldEffectTask3
|
|
||||||
|
|
||||||
thumb_func_start TeleportFieldEffectTask4
|
|
||||||
TeleportFieldEffectTask4: @ 8085D34
|
|
||||||
push {lr}
|
|
||||||
ldr r0, _08085D74 @ =gPaletteFade
|
|
||||||
ldrb r1, [r0, 0x7]
|
|
||||||
movs r0, 0x80
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08085D70
|
|
||||||
bl BGMusicStopped
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
cmp r0, 0x1
|
|
||||||
bne _08085D70
|
|
||||||
bl copy_saved_warp3_bank_and_enter_x_to_warp1
|
|
||||||
bl WarpIntoMap
|
|
||||||
ldr r0, _08085D78 @ =CB2_LoadMap
|
|
||||||
bl SetMainCallback2
|
|
||||||
ldr r1, _08085D7C @ =gFieldCallback
|
|
||||||
ldr r0, _08085D80 @ =FieldCallback_TeleportIn
|
|
||||||
str r0, [r1]
|
|
||||||
ldr r0, _08085D84 @ =Task_DoTeleportFieldEffect
|
|
||||||
bl FindTaskIdByFunc
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
bl DestroyTask
|
|
||||||
_08085D70:
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085D74: .4byte gPaletteFade
|
|
||||||
_08085D78: .4byte CB2_LoadMap
|
|
||||||
_08085D7C: .4byte gFieldCallback
|
|
||||||
_08085D80: .4byte FieldCallback_TeleportIn
|
|
||||||
_08085D84: .4byte Task_DoTeleportFieldEffect
|
|
||||||
thumb_func_end TeleportFieldEffectTask4
|
|
||||||
|
|
||||||
thumb_func_start FieldCallback_TeleportIn
|
|
||||||
FieldCallback_TeleportIn: @ 8085D88
|
|
||||||
push {lr}
|
|
||||||
bl Overworld_PlaySpecialMapMusic
|
|
||||||
bl WarpFadeInScreen
|
|
||||||
bl sub_8111CF0
|
|
||||||
bl ScriptContext2_Enable
|
|
||||||
bl FreezeObjectEvents
|
|
||||||
ldr r1, _08085DCC @ =gFieldCallback
|
|
||||||
movs r0, 0
|
|
||||||
str r0, [r1]
|
|
||||||
ldr r2, _08085DD0 @ =gObjectEvents
|
|
||||||
ldr r0, _08085DD4 @ =gPlayerAvatar
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r2
|
|
||||||
ldrb r1, [r0, 0x1]
|
|
||||||
movs r2, 0x20
|
|
||||||
orrs r1, r2
|
|
||||||
strb r1, [r0, 0x1]
|
|
||||||
bl CameraObjectReset2
|
|
||||||
ldr r0, _08085DD8 @ =Task_DoTeleportInFieldEffect
|
|
||||||
movs r1, 0
|
|
||||||
bl CreateTask
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085DCC: .4byte gFieldCallback
|
|
||||||
_08085DD0: .4byte gObjectEvents
|
|
||||||
_08085DD4: .4byte gPlayerAvatar
|
|
||||||
_08085DD8: .4byte Task_DoTeleportInFieldEffect
|
|
||||||
thumb_func_end FieldCallback_TeleportIn
|
|
||||||
|
|
||||||
thumb_func_start Task_DoTeleportInFieldEffect
|
|
||||||
Task_DoTeleportInFieldEffect: @ 8085DDC
|
|
||||||
push {lr}
|
|
||||||
adds r1, r0, 0
|
|
||||||
lsls r1, 24
|
|
||||||
lsrs r1, 24
|
|
||||||
ldr r3, _08085E04 @ =sTeleportInEffectFuncs
|
|
||||||
ldr r2, _08085E08 @ =gTasks
|
|
||||||
lsls r0, r1, 2
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 3
|
|
||||||
adds r0, r2
|
|
||||||
movs r2, 0x8
|
|
||||||
ldrsh r1, [r0, r2]
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r3
|
|
||||||
ldr r1, [r1]
|
|
||||||
bl _call_via_r1
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085E04: .4byte sTeleportInEffectFuncs
|
|
||||||
_08085E08: .4byte gTasks
|
|
||||||
thumb_func_end Task_DoTeleportInFieldEffect
|
|
||||||
|
|
||||||
thumb_func_start TeleportInFieldEffectTask1
|
|
||||||
TeleportInFieldEffectTask1: @ 8085E0C
|
|
||||||
push {r4-r6,lr}
|
|
||||||
adds r6, r0, 0
|
|
||||||
bl IsWeatherNotFadingIn
|
|
||||||
lsls r0, 24
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08085E82
|
|
||||||
ldr r5, _08085E88 @ =gPlayerAvatar
|
|
||||||
ldrb r0, [r5, 0x4]
|
|
||||||
lsls r2, r0, 4
|
|
||||||
adds r2, r0
|
|
||||||
lsls r2, 2
|
|
||||||
ldr r0, _08085E8C @ =gSprites
|
|
||||||
adds r2, r0
|
|
||||||
adds r0, r2, 0
|
|
||||||
adds r0, 0x29
|
|
||||||
movs r4, 0
|
|
||||||
ldrsb r4, [r0, r4]
|
|
||||||
lsls r0, r4, 17
|
|
||||||
negs r0, r0
|
|
||||||
ldrh r1, [r2, 0x22]
|
|
||||||
ldr r3, _08085E90 @ =gSpriteCoordOffsetY
|
|
||||||
adds r1, r4
|
|
||||||
ldrh r3, [r3]
|
|
||||||
adds r1, r3
|
|
||||||
asrs r0, 16
|
|
||||||
adds r0, r1
|
|
||||||
negs r0, r0
|
|
||||||
strh r0, [r2, 0x26]
|
|
||||||
ldr r3, _08085E94 @ =gObjectEvents
|
|
||||||
ldrb r0, [r5, 0x5]
|
|
||||||
lsls r1, r0, 3
|
|
||||||
adds r1, r0
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r3
|
|
||||||
ldrb r3, [r1, 0x1]
|
|
||||||
movs r0, 0x21
|
|
||||||
negs r0, r0
|
|
||||||
ands r0, r3
|
|
||||||
strb r0, [r1, 0x1]
|
|
||||||
ldrh r0, [r6, 0x8]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r6, 0x8]
|
|
||||||
movs r0, 0x8
|
|
||||||
strh r0, [r6, 0xA]
|
|
||||||
movs r0, 0x1
|
|
||||||
strh r0, [r6, 0xC]
|
|
||||||
adds r2, 0x42
|
|
||||||
ldrb r0, [r2]
|
|
||||||
lsrs r0, 6
|
|
||||||
strh r0, [r6, 0x24]
|
|
||||||
bl GetPlayerFacingDirection
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
strh r0, [r6, 0x26]
|
|
||||||
movs r0, 0x27
|
|
||||||
bl PlaySE
|
|
||||||
_08085E82:
|
|
||||||
pop {r4-r6}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08085E88: .4byte gPlayerAvatar
|
|
||||||
_08085E8C: .4byte gSprites
|
|
||||||
_08085E90: .4byte gSpriteCoordOffsetY
|
|
||||||
_08085E94: .4byte gObjectEvents
|
|
||||||
thumb_func_end TeleportInFieldEffectTask1
|
|
||||||
|
|
||||||
thumb_func_start TeleportInFieldEffectTask2
|
|
||||||
TeleportInFieldEffectTask2: @ 8085E98
|
|
||||||
push {r4-r7,lr}
|
|
||||||
sub sp, 0x8
|
|
||||||
adds r4, r0, 0
|
|
||||||
ldr r1, _08085F00 @ =gUnknown_83CC108
|
|
||||||
mov r0, sp
|
|
||||||
movs r2, 0x5
|
|
||||||
bl memcpy
|
|
||||||
ldr r2, _08085F04 @ =gPlayerAvatar
|
|
||||||
ldrb r1, [r2, 0x5]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _08085F08 @ =gObjectEvents
|
|
||||||
adds r6, r0, r1
|
|
||||||
ldrb r1, [r2, 0x4]
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _08085F0C @ =gSprites
|
|
||||||
adds r5, r0, r1
|
|
||||||
ldrh r0, [r4, 0xA]
|
|
||||||
ldrh r1, [r5, 0x26]
|
|
||||||
adds r0, r1
|
|
||||||
strh r0, [r5, 0x26]
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r0, 16
|
|
||||||
movs r1, 0x8
|
|
||||||
negs r1, r1
|
|
||||||
cmp r0, r1
|
|
||||||
blt _08085F10
|
|
||||||
ldrh r1, [r4, 0x22]
|
|
||||||
movs r2, 0x22
|
|
||||||
ldrsh r0, [r4, r2]
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08085F36
|
|
||||||
adds r0, r1, 0x1
|
|
||||||
strh r0, [r4, 0x22]
|
|
||||||
ldrb r0, [r6]
|
|
||||||
movs r1, 0x4
|
|
||||||
orrs r0, r1
|
|
||||||
strb r0, [r6]
|
|
||||||
ldrh r1, [r4, 0x24]
|
|
||||||
adds r3, r5, 0
|
|
||||||
adds r3, 0x42
|
|
||||||
lsls r1, 6
|
|
||||||
ldrb r2, [r3]
|
|
||||||
movs r0, 0x3F
|
|
||||||
ands r0, r2
|
|
||||||
orrs r0, r1
|
|
||||||
strb r0, [r3]
|
|
||||||
b _08085F36
|
|
||||||
.align 2, 0
|
|
||||||
_08085F00: .4byte gUnknown_83CC108
|
|
||||||
_08085F04: .4byte gPlayerAvatar
|
|
||||||
_08085F08: .4byte gObjectEvents
|
|
||||||
_08085F0C: .4byte gSprites
|
|
||||||
_08085F10:
|
|
||||||
ldrb r1, [r5, 0x5]
|
|
||||||
movs r0, 0xD
|
|
||||||
negs r0, r0
|
|
||||||
ands r0, r1
|
|
||||||
movs r1, 0x4
|
|
||||||
orrs r0, r1
|
|
||||||
strb r0, [r5, 0x5]
|
|
||||||
adds r2, r5, 0
|
|
||||||
adds r2, 0x42
|
|
||||||
ldrb r1, [r2]
|
|
||||||
movs r0, 0xC0
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08085F36
|
|
||||||
movs r0, 0x3F
|
|
||||||
ands r0, r1
|
|
||||||
movs r1, 0x80
|
|
||||||
orrs r0, r1
|
|
||||||
strb r0, [r2]
|
|
||||||
_08085F36:
|
|
||||||
ldrh r2, [r5, 0x26]
|
|
||||||
movs r3, 0x26
|
|
||||||
ldrsh r1, [r5, r3]
|
|
||||||
movs r0, 0x30
|
|
||||||
negs r0, r0
|
|
||||||
cmp r1, r0
|
|
||||||
blt _08085F5A
|
|
||||||
ldrh r1, [r4, 0xA]
|
|
||||||
movs r3, 0xA
|
|
||||||
ldrsh r0, [r4, r3]
|
|
||||||
cmp r0, 0x1
|
|
||||||
ble _08085F5A
|
|
||||||
movs r0, 0x1
|
|
||||||
ands r0, r2
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08085F5A
|
|
||||||
subs r0, r1, 0x1
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
_08085F5A:
|
|
||||||
ldrh r0, [r4, 0xC]
|
|
||||||
subs r0, 0x1
|
|
||||||
movs r7, 0
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
lsls r0, 16
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08085F7C
|
|
||||||
movs r0, 0x4
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
ldrb r0, [r6, 0x18]
|
|
||||||
lsls r0, 28
|
|
||||||
lsrs r0, 28
|
|
||||||
add r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
adds r0, r6, 0
|
|
||||||
bl ObjectEventTurn
|
|
||||||
_08085F7C:
|
|
||||||
movs r1, 0x26
|
|
||||||
ldrsh r0, [r5, r1]
|
|
||||||
cmp r0, 0
|
|
||||||
blt _08085F92
|
|
||||||
strh r7, [r5, 0x26]
|
|
||||||
ldrh r0, [r4, 0x8]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0x8]
|
|
||||||
movs r0, 0x1
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
strh r7, [r4, 0xC]
|
|
||||||
_08085F92:
|
|
||||||
add sp, 0x8
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end TeleportInFieldEffectTask2
|
|
||||||
|
|
||||||
thumb_func_start TeleportInFieldEffectTask3
|
|
||||||
TeleportInFieldEffectTask3: @ 8085F9C
|
|
||||||
push {r4,r5,lr}
|
|
||||||
sub sp, 0x8
|
|
||||||
adds r4, r0, 0
|
|
||||||
ldr r1, _08086018 @ =gUnknown_83CC108
|
|
||||||
mov r0, sp
|
|
||||||
movs r2, 0x5
|
|
||||||
bl memcpy
|
|
||||||
ldr r0, _0808601C @ =gPlayerAvatar
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _08086020 @ =gObjectEvents
|
|
||||||
adds r5, r0, r1
|
|
||||||
ldrh r0, [r4, 0xA]
|
|
||||||
subs r0, 0x1
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
lsls r0, 16
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08086010
|
|
||||||
ldrb r0, [r5, 0x18]
|
|
||||||
lsls r0, 28
|
|
||||||
lsrs r0, 28
|
|
||||||
add r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
adds r0, r5, 0
|
|
||||||
bl ObjectEventTurn
|
|
||||||
movs r0, 0x8
|
|
||||||
strh r0, [r4, 0xA]
|
|
||||||
ldrh r0, [r4, 0xC]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0xC]
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r0, 16
|
|
||||||
cmp r0, 0x4
|
|
||||||
ble _08086010
|
|
||||||
movs r0, 0x24
|
|
||||||
ldrsh r1, [r4, r0]
|
|
||||||
ldrb r0, [r5, 0x18]
|
|
||||||
lsls r0, 28
|
|
||||||
lsrs r0, 28
|
|
||||||
cmp r1, r0
|
|
||||||
bne _08086010
|
|
||||||
bl ScriptContext2_Disable
|
|
||||||
bl CameraObjectReset1
|
|
||||||
bl UnfreezeObjectEvents
|
|
||||||
ldr r0, _08086024 @ =Task_DoTeleportInFieldEffect
|
|
||||||
bl FindTaskIdByFunc
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
bl DestroyTask
|
|
||||||
_08086010:
|
|
||||||
add sp, 0x8
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08086018: .4byte gUnknown_83CC108
|
|
||||||
_0808601C: .4byte gPlayerAvatar
|
|
||||||
_08086020: .4byte gObjectEvents
|
|
||||||
_08086024: .4byte Task_DoTeleportInFieldEffect
|
|
||||||
thumb_func_end TeleportInFieldEffectTask3
|
|
||||||
|
|
||||||
thumb_func_start FldEff_FieldMoveShowMon
|
thumb_func_start FldEff_FieldMoveShowMon
|
||||||
FldEff_FieldMoveShowMon: @ 8086028
|
FldEff_FieldMoveShowMon: @ 8086028
|
||||||
push {r4,lr}
|
push {r4,lr}
|
||||||
|
|||||||
@@ -6,22 +6,6 @@
|
|||||||
.section .rodata
|
.section .rodata
|
||||||
.align 2
|
.align 2
|
||||||
|
|
||||||
.align 2
|
|
||||||
sTeleportEffectFuncs:: @ 83CC0F8 dataptr
|
|
||||||
.4byte TeleportFieldEffectTask1
|
|
||||||
.4byte TeleportFieldEffectTask2
|
|
||||||
.4byte TeleportFieldEffectTask3
|
|
||||||
.4byte TeleportFieldEffectTask4
|
|
||||||
|
|
||||||
gUnknown_83CC108:: @ 83CC108 data8
|
|
||||||
.byte 0x01, 0x03, 0x04, 0x02, 0x01
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
sTeleportInEffectFuncs:: @ 83CC110 dataptr
|
|
||||||
.4byte TeleportInFieldEffectTask1
|
|
||||||
.4byte TeleportInFieldEffectTask2
|
|
||||||
.4byte TeleportInFieldEffectTask3
|
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
sShowMonOutdoorsEffectFuncs:: @ 83CC11C dataptr
|
sShowMonOutdoorsEffectFuncs:: @ 83CC11C dataptr
|
||||||
.4byte ShowMonEffect_Outdoors_1
|
.4byte ShowMonEffect_Outdoors_1
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ void sub_8084E2C(s8, s8, s8, s8, s8);
|
|||||||
void sub_8084E80(s8, s8, s8, s8, s8);
|
void sub_8084E80(s8, s8, s8, s8, s8);
|
||||||
void sub_8084EBC(s16, s16);
|
void sub_8084EBC(s16, s16);
|
||||||
void sub_80555E0(void);
|
void sub_80555E0(void);
|
||||||
|
void copy_saved_warp3_bank_and_enter_x_to_warp1(void);
|
||||||
|
|
||||||
void player_avatar_init_params_reset(void);
|
void player_avatar_init_params_reset(void);
|
||||||
|
|
||||||
|
|||||||
+235
-30
@@ -1265,16 +1265,6 @@ bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = {
|
|||||||
EscalatorWarpEffect_6
|
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)
|
void StartEscalatorWarp(u8 metatileBehavior, u8 priority)
|
||||||
{
|
{
|
||||||
u8 taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority);
|
u8 taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority);
|
||||||
@@ -1400,6 +1390,16 @@ void Escalator_TransitionToWarpInEffect(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = {
|
||||||
|
EscalatorWarpInEffect_1,
|
||||||
|
EscalatorWarpInEffect_2,
|
||||||
|
EscalatorWarpInEffect_3,
|
||||||
|
EscalatorWarpInEffect_4,
|
||||||
|
EscalatorWarpInEffect_5,
|
||||||
|
EscalatorWarpInEffect_6,
|
||||||
|
EscalatorWarpInEffect_7
|
||||||
|
};
|
||||||
|
|
||||||
void FieldCB_EscalatorWarpIn(void)
|
void FieldCB_EscalatorWarpIn(void)
|
||||||
{
|
{
|
||||||
Overworld_PlaySpecialMapMusic();
|
Overworld_PlaySpecialMapMusic();
|
||||||
@@ -1691,13 +1691,6 @@ bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct Obje
|
|||||||
LavaridgeGymB1FWarpEffect_6
|
LavaridgeGymB1FWarpEffect_6
|
||||||
};
|
};
|
||||||
|
|
||||||
bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = {
|
|
||||||
LavaridgeGymB1FWarpExitEffect_1,
|
|
||||||
LavaridgeGymB1FWarpExitEffect_2,
|
|
||||||
LavaridgeGymB1FWarpExitEffect_3,
|
|
||||||
LavaridgeGymB1FWarpExitEffect_4
|
|
||||||
};
|
|
||||||
|
|
||||||
void StartLavaridgeGymB1FWarp(u8 priority)
|
void StartLavaridgeGymB1FWarp(u8 priority)
|
||||||
{
|
{
|
||||||
CreateTask(Task_LavaridgeGymB1FWarp, priority);
|
CreateTask(Task_LavaridgeGymB1FWarp, priority);
|
||||||
@@ -1810,6 +1803,13 @@ bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objec
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = {
|
||||||
|
LavaridgeGymB1FWarpExitEffect_1,
|
||||||
|
LavaridgeGymB1FWarpExitEffect_2,
|
||||||
|
LavaridgeGymB1FWarpExitEffect_3,
|
||||||
|
LavaridgeGymB1FWarpExitEffect_4
|
||||||
|
};
|
||||||
|
|
||||||
void FieldCB_LavaridgeGymB1FWarpExit(void)
|
void FieldCB_LavaridgeGymB1FWarpExit(void)
|
||||||
{
|
{
|
||||||
Overworld_PlaySpecialMapMusic();
|
Overworld_PlaySpecialMapMusic();
|
||||||
@@ -2017,19 +2017,6 @@ void (*const gEscapeRopeFieldEffectFuncs[])(struct Task * task) = {
|
|||||||
EscapeRopeFieldEffect_Step1
|
EscapeRopeFieldEffect_Step1
|
||||||
};
|
};
|
||||||
|
|
||||||
const u8 gUnknown_83CC0E8[] = {
|
|
||||||
[DIR_NONE] = DIR_SOUTH,
|
|
||||||
[DIR_SOUTH] = DIR_WEST,
|
|
||||||
[DIR_WEST] = DIR_NORTH,
|
|
||||||
[DIR_NORTH] = DIR_EAST,
|
|
||||||
[DIR_EAST] = DIR_SOUTH,
|
|
||||||
};
|
|
||||||
|
|
||||||
void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = {
|
|
||||||
EscapeRopeExitFieldEffect_Step0,
|
|
||||||
EscapeRopeExitFieldEffect_Step1
|
|
||||||
};
|
|
||||||
|
|
||||||
void StartEscapeRopeFieldEffect(void)
|
void StartEscapeRopeFieldEffect(void)
|
||||||
{
|
{
|
||||||
ScriptContext2_Enable();
|
ScriptContext2_Enable();
|
||||||
@@ -2080,6 +2067,13 @@ void EscapeRopeFieldEffect_Step1(struct Task * task)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const u8 gUnknown_83CC0E8[] = {
|
||||||
|
[DIR_NONE] = DIR_SOUTH,
|
||||||
|
[DIR_SOUTH] = DIR_WEST,
|
||||||
|
[DIR_WEST] = DIR_NORTH,
|
||||||
|
[DIR_NORTH] = DIR_EAST,
|
||||||
|
[DIR_EAST] = DIR_SOUTH,
|
||||||
|
};
|
||||||
|
|
||||||
u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p)
|
u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p)
|
||||||
{
|
{
|
||||||
@@ -2132,6 +2126,11 @@ bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = {
|
||||||
|
EscapeRopeExitFieldEffect_Step0,
|
||||||
|
EscapeRopeExitFieldEffect_Step1
|
||||||
|
};
|
||||||
|
|
||||||
bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p)
|
bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p)
|
||||||
{
|
{
|
||||||
struct Sprite * sprite = &gSprites[playerObj->spriteId];
|
struct Sprite * sprite = &gSprites[playerObj->spriteId];
|
||||||
@@ -2229,3 +2228,209 @@ void EscapeRopeExitFieldEffect_Step1(struct Task * task)
|
|||||||
DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeExitFieldEffect));
|
DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeExitFieldEffect));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Task_DoTeleportFieldEffect(u8 taskId);
|
||||||
|
void TeleportFieldEffectTask1(struct Task * task);
|
||||||
|
void TeleportFieldEffectTask2(struct Task * task);
|
||||||
|
void TeleportFieldEffectTask3(struct Task * task);
|
||||||
|
void TeleportFieldEffectTask4(struct Task * task);
|
||||||
|
void FieldCallback_TeleportIn(void);
|
||||||
|
void Task_DoTeleportInFieldEffect(u8 taskId);
|
||||||
|
void TeleportInFieldEffectTask1(struct Task * task);
|
||||||
|
void TeleportInFieldEffectTask2(struct Task * task);
|
||||||
|
void TeleportInFieldEffectTask3(struct Task * task);
|
||||||
|
|
||||||
|
void (*const sTeleportEffectFuncs[])(struct Task *) = {
|
||||||
|
TeleportFieldEffectTask1,
|
||||||
|
TeleportFieldEffectTask2,
|
||||||
|
TeleportFieldEffectTask3,
|
||||||
|
TeleportFieldEffectTask4
|
||||||
|
};
|
||||||
|
|
||||||
|
void CreateTeleportFieldEffectTask(void)
|
||||||
|
{
|
||||||
|
CreateTask(Task_DoTeleportFieldEffect, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Task_DoTeleportFieldEffect(u8 taskId)
|
||||||
|
{
|
||||||
|
sTeleportEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportFieldEffectTask1(struct Task *task)
|
||||||
|
{
|
||||||
|
ScriptContext2_Enable();
|
||||||
|
FreezeObjectEvents();
|
||||||
|
CameraObjectReset2();
|
||||||
|
task->data[15] = GetPlayerFacingDirection();
|
||||||
|
task->data[0]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportFieldEffectTask2(struct Task *task)
|
||||||
|
{
|
||||||
|
u8 spinDirections[5] = {
|
||||||
|
[DIR_NONE] = DIR_SOUTH,
|
||||||
|
[DIR_SOUTH] = DIR_WEST,
|
||||||
|
[DIR_WEST] = DIR_NORTH,
|
||||||
|
[DIR_NORTH] = DIR_EAST,
|
||||||
|
[DIR_EAST] = DIR_SOUTH
|
||||||
|
};
|
||||||
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||||
|
if (task->data[1] == 0 || (--task->data[1]) == 0)
|
||||||
|
{
|
||||||
|
ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
|
||||||
|
task->data[1] = 8;
|
||||||
|
task->data[2]++;
|
||||||
|
}
|
||||||
|
if (task->data[2] > 7 && task->data[15] == objectEvent->facingDirection)
|
||||||
|
{
|
||||||
|
task->data[0]++;
|
||||||
|
task->data[1] = 4;
|
||||||
|
task->data[2] = 8;
|
||||||
|
task->data[3] = 1;
|
||||||
|
PlaySE(SE_TK_WARPIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportFieldEffectTask3(struct Task *task)
|
||||||
|
{
|
||||||
|
u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
|
||||||
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||||
|
struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
|
||||||
|
if ((--task->data[1]) <= 0)
|
||||||
|
{
|
||||||
|
task->data[1] = 4;
|
||||||
|
ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
|
||||||
|
}
|
||||||
|
sprite->pos1.y -= task->data[3];
|
||||||
|
task->data[4] += task->data[3];
|
||||||
|
if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8))
|
||||||
|
{
|
||||||
|
task->data[3] <<= 1;
|
||||||
|
}
|
||||||
|
if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != SUBSPRITES_OFF))
|
||||||
|
{
|
||||||
|
sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
|
||||||
|
}
|
||||||
|
if (task->data[4] >= 0xa8)
|
||||||
|
{
|
||||||
|
task->data[0]++;
|
||||||
|
TryFadeOutOldMapMusic();
|
||||||
|
WarpFadeOutScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportFieldEffectTask4(struct Task *task)
|
||||||
|
{
|
||||||
|
if (!gPaletteFade.active)
|
||||||
|
{
|
||||||
|
if (BGMusicStopped() == TRUE)
|
||||||
|
{
|
||||||
|
copy_saved_warp3_bank_and_enter_x_to_warp1();
|
||||||
|
WarpIntoMap();
|
||||||
|
SetMainCallback2(CB2_LoadMap);
|
||||||
|
gFieldCallback = FieldCallback_TeleportIn;
|
||||||
|
DestroyTask(FindTaskIdByFunc(Task_DoTeleportFieldEffect));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*const sTeleportInEffectFuncs[])(struct Task *) = {
|
||||||
|
TeleportInFieldEffectTask1,
|
||||||
|
TeleportInFieldEffectTask2,
|
||||||
|
TeleportInFieldEffectTask3
|
||||||
|
};
|
||||||
|
|
||||||
|
void FieldCallback_TeleportIn(void)
|
||||||
|
{
|
||||||
|
Overworld_PlaySpecialMapMusic();
|
||||||
|
WarpFadeInScreen();
|
||||||
|
sub_8111CF0();
|
||||||
|
ScriptContext2_Enable();
|
||||||
|
FreezeObjectEvents();
|
||||||
|
gFieldCallback = NULL;
|
||||||
|
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
|
||||||
|
CameraObjectReset2();
|
||||||
|
CreateTask(Task_DoTeleportInFieldEffect, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Task_DoTeleportInFieldEffect(u8 taskId)
|
||||||
|
{
|
||||||
|
sTeleportInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportInFieldEffectTask1(struct Task *task)
|
||||||
|
{
|
||||||
|
struct Sprite *sprite;
|
||||||
|
s16 centerToCornerVecY;
|
||||||
|
if (IsWeatherNotFadingIn())
|
||||||
|
{
|
||||||
|
sprite = &gSprites[gPlayerAvatar.spriteId];
|
||||||
|
centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
|
||||||
|
sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
|
||||||
|
gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE;
|
||||||
|
task->data[0]++;
|
||||||
|
task->data[1] = 8;
|
||||||
|
task->data[2] = 1;
|
||||||
|
task->data[14] = sprite->subspriteMode;
|
||||||
|
task->data[15] = GetPlayerFacingDirection();
|
||||||
|
PlaySE(SE_TK_WARPIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportInFieldEffectTask2(struct Task *task)
|
||||||
|
{
|
||||||
|
u8 spinDirections[5] = {1, 3, 4, 2, 1};
|
||||||
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||||
|
struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
|
||||||
|
if ((sprite->pos2.y += task->data[1]) >= -8)
|
||||||
|
{
|
||||||
|
if (task->data[13] == 0)
|
||||||
|
{
|
||||||
|
task->data[13]++;
|
||||||
|
objectEvent->triggerGroundEffectsOnMove = 1;
|
||||||
|
sprite->subspriteMode = task->data[14];
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
sprite->oam.priority = 1;
|
||||||
|
if (sprite->subspriteMode != SUBSPRITES_OFF)
|
||||||
|
{
|
||||||
|
sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1))
|
||||||
|
{
|
||||||
|
task->data[1]--;
|
||||||
|
}
|
||||||
|
if ((--task->data[2]) == 0)
|
||||||
|
{
|
||||||
|
task->data[2] = 4;
|
||||||
|
ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
|
||||||
|
}
|
||||||
|
if (sprite->pos2.y >= 0)
|
||||||
|
{
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
task->data[0]++;
|
||||||
|
task->data[1] = 1;
|
||||||
|
task->data[2] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeleportInFieldEffectTask3(struct Task *task)
|
||||||
|
{
|
||||||
|
u8 spinDirections[5] = {1, 3, 4, 2, 1};
|
||||||
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||||
|
if ((--task->data[1]) == 0)
|
||||||
|
{
|
||||||
|
ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
|
||||||
|
task->data[1] = 8;
|
||||||
|
if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection)
|
||||||
|
{
|
||||||
|
ScriptContext2_Disable();
|
||||||
|
CameraObjectReset1();
|
||||||
|
UnfreezeObjectEvents();
|
||||||
|
DestroyTask(FindTaskIdByFunc(Task_DoTeleportInFieldEffect));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user