summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/bike.s2
-rw-r--r--asm/field_player_avatar.s880
-rw-r--r--asm/overworld.s10
-rw-r--r--data/field_player_avatar.s26
-rw-r--r--include/constants/event_objects.h4
-rw-r--r--include/field_control_avatar.h1
-rw-r--r--include/field_effect_helpers.h2
-rw-r--r--include/field_player_avatar.h4
-rw-r--r--include/overworld.h2
-rw-r--r--src/dynamic_placeholder_text_util.c4
-rw-r--r--src/field_effect.c2
-rw-r--r--src/field_fadetransition.c2
-rw-r--r--src/field_player_avatar.c318
-rw-r--r--src/quest_log_player.c8
14 files changed, 335 insertions, 930 deletions
diff --git a/asm/bike.s b/asm/bike.s
index f78bc0a1d..c8f65a03b 100644
--- a/asm/bike.s
+++ b/asm/bike.s
@@ -729,7 +729,7 @@ StartTransitionToFlipBikeState: @ 80BD5C8
beq _080BD5F8
movs r0, 0x1
bl SetPlayerAvatarTransitionFlags
- bl sav1_reset_battle_music_maybe
+ bl Overworld_ClearSavedMusic
bl Overworld_PlaySpecialMapMusic
b _080BD618
.align 2, 0
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index 909c10647..52dbf8583 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -5,882 +5,8 @@
.text
- thumb_func_start sub_805CB04
-sub_805CB04: @ 805CB04
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r6, _0805CB64 @ =gObjectEvents
- ldr r5, _0805CB68 @ =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- movs r0, 0x1
- ands r4, r0
- lsls r3, r4, 5
- ldrb r2, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x1]
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0805CB5C
- ldr r2, _0805CB6C @ =gSprites
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x1A]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- lsls r3, r4, 2
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1]
-_0805CB5C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CB64: .4byte gObjectEvents
-_0805CB68: .4byte gPlayerAvatar
-_0805CB6C: .4byte gSprites
- thumb_func_end sub_805CB04
-
- thumb_func_start sub_805CB70
-sub_805CB70: @ 805CB70
- push {r4,r5,lr}
- ldr r5, _0805CBAC @ =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805CBB0 @ =gObjectEvents
- adds r4, r0
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805CBB4 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CBAC: .4byte gPlayerAvatar
-_0805CBB0: .4byte gObjectEvents
-_0805CBB4: .4byte gSprites
- thumb_func_end sub_805CB70
-
- thumb_func_start sub_805CBB8
-sub_805CBB8: @ 805CBB8
- push {lr}
- ldr r2, _0805CBD4 @ =gPlayerAvatar
- ldrb r1, [r2]
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0
- bne _0805CBD8
- movs r0, 0x5
- bl GetPlayerAvatarGraphicsIdByStateId
- lsls r0, 24
- lsrs r0, 24
- b _0805CBE0
- .align 2, 0
-_0805CBD4: .4byte gPlayerAvatar
-_0805CBD8:
- ldr r0, _0805CBE4 @ =gUnknown_835B88E
- ldrb r1, [r2, 0x7]
- adds r1, r0
- ldrb r0, [r1]
-_0805CBE0:
- pop {r1}
- bx r1
- .align 2, 0
-_0805CBE4: .4byte gUnknown_835B88E
- thumb_func_end sub_805CBB8
-
- thumb_func_start sub_805CBE8
-sub_805CBE8: @ 805CBE8
- push {r4,r5,lr}
- ldr r5, _0805CC20 @ =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805CC24 @ =gObjectEvents
- adds r4, r0
- bl sub_805CBB8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805CC28 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CC20: .4byte gPlayerAvatar
-_0805CC24: .4byte gObjectEvents
-_0805CC28: .4byte gSprites
- thumb_func_end sub_805CBE8
-
- thumb_func_start sub_805CC2C
-sub_805CC2C: @ 805CC2C
- push {lr}
- movs r0, 0x2
- bl sub_8150498
- pop {r0}
- bx r0
- thumb_func_end sub_805CC2C
-
- thumb_func_start nullsub_24
-nullsub_24: @ 805CC38
- bx lr
- thumb_func_end nullsub_24
-
- thumb_func_start nullsub_25
-nullsub_25: @ 805CC3C
- bx lr
- thumb_func_end nullsub_25
-
- thumb_func_start sub_805CC40
-sub_805CC40: @ 805CC40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrb r0, [r5, 0x1E]
- mov r8, r0
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
- movs r6, 0x1
- ldr r1, _0805CCA4 @ =gUnknown_835B890
- mov r9, r1
- mov r4, sp
- mov r7, sp
- adds r7, 0x2
-_0805CC62:
- movs r1, 0
- ldrsh r0, [r4, r1]
- lsls r0, 2
- add r0, r9
- ldr r1, [r0]
- mov r0, r8
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- beq _0805CCA8
- ldrb r0, [r5, 0x18]
- lsrs r0, 4
- cmp r6, r0
- bne _0805CCA8
- ldrh r0, [r5, 0x10]
- strh r0, [r4]
- ldrh r0, [r5, 0x12]
- strh r0, [r7]
- adds r0, r6, 0
- mov r1, sp
- adds r2, r7, 0
- bl MoveCoords
- ldrb r0, [r5, 0x1B]
- movs r1, 0
- ldrsh r2, [r4, r1]
- movs r1, 0
- ldrsh r3, [r7, r1]
- adds r1, r6, 0
- bl ShowWarpArrowSprite
- b _0805CCC2
- .align 2, 0
-_0805CCA4: .4byte gUnknown_835B890
-_0805CCA8:
- ldrh r1, [r4]
- adds r1, 0x1
- strh r1, [r4]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x3
- ble _0805CC62
- ldrb r0, [r5, 0x1B]
- bl SetSpriteInvisible
-_0805CCC2:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_805CC40
-
- thumb_func_start StartStrengthAnim
-StartStrengthAnim: @ 805CCD0
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r6, _0805CD04 @ =taskFF_bump_boulder
- adds r0, r6, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0805CD08 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- strh r5, [r1, 0xC]
- bl _call_via_r6
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CD04: .4byte taskFF_bump_boulder
-_0805CD08: .4byte gTasks
- thumb_func_end StartStrengthAnim
-
- thumb_func_start taskFF_bump_boulder
-taskFF_bump_boulder: @ 805CD0C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _0805CD54 @ =gUnknown_835B8A0
- ldr r2, _0805CD58 @ =gTasks
- ldr r5, _0805CD5C @ =gObjectEvents
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0805CD20:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldr r0, _0805CD60 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _0805CD20
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CD54: .4byte gUnknown_835B8A0
-_0805CD58: .4byte gTasks
-_0805CD5C: .4byte gObjectEvents
-_0805CD60: .4byte gPlayerAvatar
- thumb_func_end taskFF_bump_boulder
-
- thumb_func_start sub_805CD64
-sub_805CD64: @ 805CD64
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _0805CD80 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805CD80: .4byte gPlayerAvatar
- thumb_func_end sub_805CD64
-
- thumb_func_start sub_805CD84
-sub_805CD84: @ 805CD84
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- adds r4, r2, 0
- adds r0, r5, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- bne _0805CE0E
- adds r0, r4, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- bne _0805CE0E
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- ldrb r0, [r6, 0xC]
- bl GetWalkInPlaceNormalMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_805C06C
- ldrb r0, [r6, 0xC]
- bl sub_8063F2C
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805C0A4
- ldr r2, _0805CE18 @ =gFieldEffectArguments
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- str r0, [r2]
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- str r0, [r2, 0x4]
- ldrb r0, [r4, 0xB]
- lsrs r0, 4
- str r0, [r2, 0x8]
- ldr r3, _0805CE1C @ =gSprites
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r2, 0xC]
- movs r0, 0xA
- bl FieldEffectStart
- movs r0, 0xCF
- bl PlaySE
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0805CE0E:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805CE18: .4byte gFieldEffectArguments
-_0805CE1C: .4byte gSprites
- thumb_func_end sub_805CD84
-
- thumb_func_start sub_805CE20
-sub_805CE20: @ 805CE20
- push {r4,r5,lr}
- adds r5, r1, 0
- adds r4, r2, 0
- adds r0, r5, 0
- bl ObjectEventCheckHeldMovementStatus
- lsls r0, 24
- cmp r0, 0
- beq _0805CE70
- adds r0, r4, 0
- bl ObjectEventCheckHeldMovementStatus
- lsls r0, 24
- cmp r0, 0
- beq _0805CE70
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- adds r0, r4, 0
- bl sub_806DE28
- ldrh r0, [r4, 0x10]
- ldrh r1, [r4, 0x12]
- bl sub_806DE70
- ldr r1, _0805CE78 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- ldr r0, _0805CE7C @ =taskFF_bump_boulder
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805CE70:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805CE78: .4byte gPlayerAvatar
-_0805CE7C: .4byte taskFF_bump_boulder
- thumb_func_end sub_805CE20
-
- thumb_func_start DoPlayerMatJump
-DoPlayerMatJump: @ 805CE80
- push {r4,lr}
- ldr r4, _0805CE9C @ =sub_805CEA0
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CE9C: .4byte sub_805CEA0
- thumb_func_end DoPlayerMatJump
-
- thumb_func_start sub_805CEA0
-sub_805CEA0: @ 805CEA0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0805CEDC @ =gUnknown_835B8AC
- ldr r2, _0805CEE0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0805CEB2:
- movs r0, 0x8
- ldrsh r2, [r4, r0]
- lsls r2, 2
- adds r2, r5
- ldr r0, _0805CEE4 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _0805CEE8 @ =gObjectEvents
- adds r1, r0
- ldr r2, [r2]
- adds r0, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _0805CEB2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CEDC: .4byte gUnknown_835B8AC
-_0805CEE0: .4byte gTasks
-_0805CEE4: .4byte gPlayerAvatar
-_0805CEE8: .4byte gObjectEvents
- thumb_func_end sub_805CEA0
-
- thumb_func_start PlayerAvatar_DoSecretBaseMatJump
-PlayerAvatar_DoSecretBaseMatJump: @ 805CEEC
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- ldr r5, _0805CF50 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r5, 0x6]
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805CF48
- movs r0, 0xA
- bl PlaySE
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetJumpInPlaceMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805C06C
- ldrh r0, [r6, 0xA]
- adds r0, 0x1
- strh r0, [r6, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0805CF48
- movs r0, 0
- strb r0, [r5, 0x6]
- ldrb r0, [r5, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r5, 0x1]
- ldr r0, _0805CF54 @ =sub_805CEA0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805CF48:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805CF50: .4byte gPlayerAvatar
-_0805CF54: .4byte sub_805CEA0
- thumb_func_end PlayerAvatar_DoSecretBaseMatJump
-
- thumb_func_start DoPlayerMatSpin
-DoPlayerMatSpin: @ 805CF58
- push {r4,lr}
- ldr r4, _0805CF74 @ =sub_805CF78
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CF74: .4byte sub_805CF78
- thumb_func_end DoPlayerMatSpin
-
- thumb_func_start sub_805CF78
-sub_805CF78: @ 805CF78
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0805CFB4 @ =gUnknown_835B8B0
- ldr r2, _0805CFB8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0805CF8A:
- movs r0, 0x8
- ldrsh r2, [r4, r0]
- lsls r2, 2
- adds r2, r5
- ldr r0, _0805CFBC @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _0805CFC0 @ =gObjectEvents
- adds r1, r0
- ldr r2, [r2]
- adds r0, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _0805CF8A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CFB4: .4byte gUnknown_835B8B0
-_0805CFB8: .4byte gTasks
-_0805CFBC: .4byte gPlayerAvatar
-_0805CFC0: .4byte gObjectEvents
- thumb_func_end sub_805CF78
-
- thumb_func_start sub_805CFC4
-sub_805CFC4: @ 805CFC4
- push {lr}
- ldrh r2, [r0, 0x8]
- adds r2, 0x1
- strh r2, [r0, 0x8]
- ldrb r1, [r1, 0x18]
- lsrs r1, 4
- strh r1, [r0, 0xA]
- ldr r1, _0805CFE8 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- bl ScriptContext2_Enable
- movs r0, 0x27
- bl PlaySE
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_0805CFE8: .4byte gPlayerAvatar
- thumb_func_end sub_805CFC4
-
- thumb_func_start sub_805CFEC
-sub_805CFEC: @ 805CFEC
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r1, _0805D060 @ =gUnknown_835B8C0
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D054
- ldrb r0, [r5, 0x18]
- lsrs r0, 4
- subs r0, 0x1
- add r0, sp
- ldrb r6, [r0]
- adds r0, r6, 0
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_805C06C
- ldrb r0, [r4, 0xA]
- cmp r6, r0
- bne _0805D032
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
-_0805D032:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _0805D054
- ldrb r0, [r4, 0xA]
- bl GetOppositeDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- bne _0805D054
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0805D054:
- movs r0, 0
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D060: .4byte gUnknown_835B8C0
- thumb_func_end sub_805CFEC
-
- thumb_func_start sub_805D064
-sub_805D064: @ 805D064
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r1, _0805D0A0 @ =gUnknown_835B8C4
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D094
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- add r0, sp
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_805C06C
- movs r0, 0x1
- strh r0, [r5, 0x8]
-_0805D094:
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D0A0: .4byte gUnknown_835B8C4
- thumb_func_end sub_805D064
-
- thumb_func_start sub_805D0A4
-sub_805D0A4: @ 805D0A4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D0E8
- ldrb r0, [r4, 0xA]
- bl GetOppositeDirection
- lsls r0, 24
- lsrs r0, 24
- bl sub_8063F2C
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_805C06C
- bl ScriptContext2_Disable
- ldr r1, _0805D0F0 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- ldr r0, _0805D0F4 @ =sub_805CF78
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805D0E8:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D0F0: .4byte gPlayerAvatar
-_0805D0F4: .4byte sub_805CF78
- thumb_func_end sub_805D0A4
-
- thumb_func_start CreateStopSurfingTask
-CreateStopSurfingTask: @ 805D0F8
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- bl sav1_reset_battle_music_maybe
- bl Overworld_ChangeMusicToDefault
- ldr r2, _0805D148 @ =gPlayerAvatar
- ldrb r1, [r2]
- movs r0, 0xF7
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x1
- strb r0, [r2, 0x6]
- ldr r5, _0805D14C @ =taskFF_0805D1D4
- adds r0, r5, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0805D150 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- bl _call_via_r5
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D148: .4byte gPlayerAvatar
-_0805D14C: .4byte taskFF_0805D1D4
-_0805D150: .4byte gTasks
- thumb_func_end CreateStopSurfingTask
-
- thumb_func_start sub_805D154
-sub_805D154: @ 805D154
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r2, _0805D19C @ =gPlayerAvatar
- ldrb r1, [r2]
- movs r0, 0xF7
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x1
- strb r0, [r2, 0x6]
- ldr r5, _0805D1A0 @ =taskFF_0805D1D4
- adds r0, r5, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0805D1A4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- bl _call_via_r5
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D19C: .4byte gPlayerAvatar
-_0805D1A0: .4byte taskFF_0805D1D4
-_0805D1A4: .4byte gTasks
- thumb_func_end sub_805D154
-
- thumb_func_start sub_805D1A8
-sub_805D1A8: @ 805D1A8
- push {lr}
- ldr r0, _0805D1CC @ =gUnknown_3005E88
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0805D1C6
- cmp r0, 0x3
- beq _0805D1C6
- ldr r0, _0805D1D0 @ =gUnknown_835B820
- ldrb r0, [r0, 0x2]
- movs r1, 0x10
- bl sub_811278C
- movs r0, 0x2
- bl CreateStopSurfingTask
-_0805D1C6:
- pop {r0}
- bx r0
- .align 2, 0
-_0805D1CC: .4byte gUnknown_3005E88
-_0805D1D0: .4byte gUnknown_835B820
- thumb_func_end sub_805D1A8
-
- thumb_func_start taskFF_0805D1D4
-taskFF_0805D1D4: @ 805D1D4
+ thumb_func_start Task_StopSurfingInit
+Task_StopSurfingInit: @ 805D1D4
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
@@ -928,7 +54,7 @@ _0805D230: .4byte gPlayerAvatar
_0805D234: .4byte gObjectEvents
_0805D238: .4byte gTasks
_0805D23C: .4byte sub_805D240
- thumb_func_end taskFF_0805D1D4
+ thumb_func_end Task_StopSurfingInit
thumb_func_start sub_805D240
sub_805D240: @ 805D240
diff --git a/asm/overworld.s b/asm/overworld.s
index f12288d23..5335cfc21 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1715,7 +1715,7 @@ sub_8055864: @ 8055864
bl SetSav1WeatherFromCurrMapHeader
bl sub_805610C
bl sub_8055CB8
- bl sav1_reset_battle_music_maybe
+ bl Overworld_ClearSavedMusic
bl mapheader_run_script_with_tag_x3
bl TryRegenerateRenewableHiddenItems
bl InitMap
@@ -1792,7 +1792,7 @@ sub_8055920: @ 8055920
bl FlagClear
_08055974:
bl sub_8055CB8
- bl sav1_reset_battle_music_maybe
+ bl Overworld_ClearSavedMusic
bl mapheader_run_script_with_tag_x3
bl TryRegenerateRenewableHiddenItems
bl UpdateLocationHistoryForRoamer
@@ -2474,8 +2474,8 @@ Overworld_SetSavedMusic: @ 8055E78
_08055E80: .4byte gSaveBlock1Ptr
thumb_func_end Overworld_SetSavedMusic
- thumb_func_start sav1_reset_battle_music_maybe
-sav1_reset_battle_music_maybe: @ 8055E84
+ thumb_func_start Overworld_ClearSavedMusic
+Overworld_ClearSavedMusic: @ 8055E84
ldr r0, _08055E90 @ =gSaveBlock1Ptr
ldr r1, [r0]
movs r0, 0
@@ -2483,7 +2483,7 @@ sav1_reset_battle_music_maybe: @ 8055E84
bx lr
.align 2, 0
_08055E90: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_reset_battle_music_maybe
+ thumb_func_end Overworld_ClearSavedMusic
thumb_func_start sub_8055E94
sub_8055E94: @ 8055E94
diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s
index c7a03c7fe..c4a4f324f 100644
--- a/data/field_player_avatar.s
+++ b/data/field_player_avatar.s
@@ -4,32 +4,6 @@
.section .rodata
.align 2
-gUnknown_835B890:: @ 835B890
- .4byte MetatileBehavior_IsSouthArrowWarp
- .4byte MetatileBehavior_IsNorthArrowWarp
- .4byte MetatileBehavior_IsWestArrowWarp
- .4byte MetatileBehavior_IsEastArrowWarp
-
-gUnknown_835B8A0:: @ 835B8A0
- .4byte sub_805CD64
- .4byte sub_805CD84
- .4byte sub_805CE20
-
-gUnknown_835B8AC:: @ 835B8AC
- .4byte PlayerAvatar_DoSecretBaseMatJump
-
-gUnknown_835B8B0:: @ 835B8B0
- .4byte sub_805CFC4
- .4byte sub_805CFEC
- .4byte sub_805D064
- .4byte sub_805D0A4
-
-gUnknown_835B8C0:: @ 835B8C0
- .byte 0x03, 0x04, 0x02, 0x01
-
-gUnknown_835B8C4:: @ 835B8C4
- .byte 0x18, 0x18, 0x19, 0x1a, 0x1b
-
.align 2
gUnknown_835B8CC:: @ 835B8CC
.4byte sub_805D33C
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index 08634f5f2..cccba35ff 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -7,14 +7,14 @@
#define OBJ_EVENT_GFX_RED_ITEM 3
#define OBJ_EVENT_GFX_RED_FISH 4
#define OBJ_EVENT_GFX_RED_ITEM_COPY 5
-#define OBJ_EVENT_GFX_RED_VS_SEEKER 6
+#define OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE 6
#define OBJ_EVENT_GFX_GREEN_NORMAL 7
#define OBJ_EVENT_GFX_GREEN_BIKE 8
#define OBJ_EVENT_GFX_GREEN_SURF 9
#define OBJ_EVENT_GFX_GREEN_ITEM 10
#define OBJ_EVENT_GFX_GREEN_FISH 11
#define OBJ_EVENT_GFX_GREEN_ITEM_COPY 12
-#define OBJ_EVENT_GFX_GREEN_VS_SEEKER 13
+#define OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE 13
#define OBJ_EVENT_GFX_RS_BRENDAN 14
#define OBJ_EVENT_GFX_RS_MAY 15
#define OBJ_EVENT_GFX_LITTLE_BOY 16
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 335076a9d..e0873aa52 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -35,5 +35,6 @@ void FieldClearPlayerInput(struct FieldInput *input);
int ProcessPlayerFieldInput(struct FieldInput *input);
void FieldInput_HandleCancelSignpost(struct FieldInput * input);
void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys);
+void sub_806DE70(u16 x, u16 y);
#endif //GUARD_FIELD_CONTROL_AVATAR_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 9472f0b94..a1fbe49b2 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -22,5 +22,7 @@ bool8 sub_80DCBE0(struct ObjectEvent *);
void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8);
u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
+void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y);
+void SetSpriteInvisible(u8 spriteId);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 7440bd0bd..1dcdb8e5d 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -20,7 +20,7 @@ void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
u8 GetPlayerAvatarGraphicsIdByStateId(u8);
void SetPlayerAvatarStateMask(u8 mask);
void sub_805D9C4(struct Sprite *sprite);
-void sub_805D154(u8 direction);
+void CreateStopSurfingTask_NoMusicChange(u8 direction);
void sub_805DAE4(u8 direction);
void SetPlayerAvatarTransitionFlags(u16 a);
bool8 IsPlayerFacingSurfableFishableWater(void);
@@ -29,7 +29,7 @@ u8 GetPlayerAvatarObjectId(void);
u8 PlayerGetZCoord(void);
u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
void sub_805CB70(void);
-void sub_805CB04(bool8);
+void SetPlayerInvisibility(bool8);
void sub_805DC04(void);
void sub_805DAB0(void);
bool32 sub_805DAD0(void);
diff --git a/include/overworld.h b/include/overworld.h
index bd4dda9b6..730df3667 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -85,7 +85,7 @@ void sub_8084EBC(s16, s16);
void sub_80555E0(void);
void copy_saved_warp3_bank_and_enter_x_to_warp1(void);
u8 IsMapTypeOutdoors(u8 mapType);
-void sav1_reset_battle_music_maybe(void);
+void Overworld_ClearSavedMusic(void);
bool32 sub_8056124(u16 song);
void player_avatar_init_params_reset(void);
diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c
index 955c4866a..b0e689501 100644
--- a/src/dynamic_placeholder_text_util.c
+++ b/src/dynamic_placeholder_text_util.c
@@ -11,10 +11,10 @@ static const u8 sTextColorTable[] =
[OBJ_EVENT_GFX_RED_NORMAL / 2] = 0x00, // OBJ_EVENT_GFX_RED_BIKE
[OBJ_EVENT_GFX_RED_SURF / 2] = 0x00, // OBJ_EVENT_GFX_RED_ITEM
[OBJ_EVENT_GFX_RED_FISH / 2] = 0x00, // OBJ_EVENT_GFX_RED_ITEM_COPY
- [OBJ_EVENT_GFX_RED_VS_SEEKER / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL
+ [OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL
[OBJ_EVENT_GFX_GREEN_BIKE / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_SURF
[OBJ_EVENT_GFX_GREEN_ITEM / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_FISH
- [OBJ_EVENT_GFX_GREEN_ITEM_COPY / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_VS_SEEKER
+ [OBJ_EVENT_GFX_GREEN_ITEM_COPY / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE
[OBJ_EVENT_GFX_RS_BRENDAN / 2] = 0x10, // OBJ_EVENT_GFX_RS_MAY
[OBJ_EVENT_GFX_LITTLE_BOY / 2] = 0x10, // OBJ_EVENT_GFX_LITTLE_GIRL
[OBJ_EVENT_GFX_YOUNGSTER / 2] = 0x00, // OBJ_EVENT_GFX_BOY
diff --git a/src/field_effect.c b/src/field_effect.c
index 082aee32d..b59ce5a6b 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -2888,7 +2888,7 @@ u8 FldEff_UseSurf(void)
{
u8 taskId = CreateTask(Task_FldEffUseSurf, 0xff);
gTasks[taskId].data[15] = gFieldEffectArguments[0];
- sav1_reset_battle_music_maybe();
+ Overworld_ClearSavedMusic();
if (sub_8056124(MUS_NAMINORI))
Overworld_ChangeMusicTo(MUS_NAMINORI);
return FALSE;
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index c24d153ac..cde5f0e84 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -126,7 +126,7 @@ static void sub_807DC70(void)
static void sub_807DCB0(bool8 arg)
{
- sub_805CB04(!arg);
+ SetPlayerInvisibility(!arg);
}
static void task0A_nop_for_a_while(u8 taskId)
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index ae0ee6942..e3035351b 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -5,6 +5,7 @@
#include "event_object_movement.h"
#include "fieldmap.h"
#include "field_control_avatar.h"
+#include "field_effect.h"
#include "field_effect_helpers.h"
#include "field_player_avatar.h"
#include "metatile_behavior.h"
@@ -12,6 +13,7 @@
#include "party_menu.h"
#include "quest_log.h"
#include "quest_log_player.h"
+#include "script.h"
#include "constants/event_object_movement.h"
#include "constants/event_objects.h"
#include "constants/songs.h"
@@ -89,12 +91,24 @@ void PlayCollisionSoundIfNotFacingWarp(u8 direction);
void PlayerGoSpin(u8 direction);
void sub_805C2CC(u8 metatileBehavior);
bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y);
-bool8 player_should_look_direction_be_enforced_upon_movement(void);
-void CreateStopSurfingTask(u8 direction);
-void StartStrengthAnim(u8 objectEventId, u8 direction);
void sub_805CC40(struct ObjectEvent * playerObjEvent);
+void StartStrengthAnim(u8 objectEventId, u8 direction);
+void Task_BumpBoulder(u8 taskId);
+bool8 sub_805CD64(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+bool8 do_boulder_dust(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+bool8 sub_805CE20(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
void DoPlayerMatJump(void);
+void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
+bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task * task, struct ObjectEvent * playerObj);
void DoPlayerMatSpin(void);
+void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId);
+bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task * task, struct ObjectEvent * playerObj);
+bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task * task, struct ObjectEvent * playerObj);
+bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task * task, struct ObjectEvent * playerObj);
+bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task * task, struct ObjectEvent * playerObj);
+void CreateStopSurfingTask(u8 direction);
+void Task_StopSurfingInit(u8 taskId);
+bool8 player_should_look_direction_be_enforced_upon_movement(void);
void MovementType_Player(struct Sprite *sprite)
{
@@ -1244,11 +1258,6 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
return 0;
}
-const u8 gUnknown_835B88E[] = {
- OBJ_EVENT_GFX_RED_VS_SEEKER,
- OBJ_EVENT_GFX_GREEN_VS_SEEKER
-};
-
void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b)
{
u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
@@ -1288,3 +1297,296 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
gPlayerAvatar.gender = gender;
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED | PLAYER_AVATAR_FLAG_ON_FOOT);
}
+
+void SetPlayerInvisibility(bool8 invisible)
+{
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = invisible;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ gSprites[gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId].invisible = invisible;
+}
+
+void sub_805CB70(void)
+{
+ ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
+}
+
+const u8 gUnknown_835B88E[] = {
+ OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE,
+ OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE
+};
+
+u8 sub_805CBB8(void)
+{
+ if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ return gUnknown_835B88E[gPlayerAvatar.gender];
+ else
+ return GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE);
+}
+
+void sub_805CBE8(void)
+{
+ ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], sub_805CBB8());
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
+}
+
+void sub_805CC2C(void)
+{
+ sub_8150498(2);
+}
+
+void nullsub_24(void)
+{
+
+}
+
+void nullsub_25(void)
+{
+
+}
+
+bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = {
+ MetatileBehavior_IsSouthArrowWarp,
+ MetatileBehavior_IsNorthArrowWarp,
+ MetatileBehavior_IsWestArrowWarp,
+ MetatileBehavior_IsEastArrowWarp
+};
+
+void sub_805CC40(struct ObjectEvent *objectEvent)
+{
+ s16 x;
+ s16 y;
+ u8 direction;
+ u8 metatileBehavior = objectEvent->currentMetatileBehavior;
+
+ for (x = 0, direction = DIR_SOUTH; x < 4; x++, direction++)
+ {
+ if (sArrowWarpMetatileBehaviorChecks2[x](metatileBehavior) && direction == objectEvent->movementDirection)
+ {
+ x = objectEvent->currentCoords.x;
+ y = objectEvent->currentCoords.y;
+ MoveCoords(direction, &x, &y);
+ ShowWarpArrowSprite(objectEvent->warpArrowSpriteId, direction, x, y);
+ return;
+ }
+ }
+ SetSpriteInvisible(objectEvent->warpArrowSpriteId);
+}
+
+bool8 (*const gUnknown_835B8A0[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = {
+ sub_805CD64,
+ do_boulder_dust,
+ sub_805CE20
+};
+
+void StartStrengthAnim(u8 a, u8 b)
+{
+ u8 taskId = CreateTask(Task_BumpBoulder, 0xFF);
+
+ gTasks[taskId].data[1] = a;
+ gTasks[taskId].data[2] = b;
+ Task_BumpBoulder(taskId);
+}
+
+void Task_BumpBoulder(u8 taskId)
+{
+ while (gUnknown_835B8A0[gTasks[taskId].data[0]](&gTasks[taskId],
+ &gObjectEvents[gPlayerAvatar.objectEventId],
+ &gObjectEvents[gTasks[taskId].data[1]]))
+ ;
+}
+
+bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+{
+ if (!ObjectEventIsMovementOverridden(playerObject)
+ && !ObjectEventIsMovementOverridden(strengthObject))
+ {
+ ObjectEventClearHeldMovementIfFinished(playerObject);
+ ObjectEventClearHeldMovementIfFinished(strengthObject);
+ sub_805C06C(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2]));
+ sub_805C0A4(strengthObject, sub_8063F2C((u8)task->data[2]));
+ gFieldEffectArguments[0] = strengthObject->currentCoords.x;
+ gFieldEffectArguments[1] = strengthObject->currentCoords.y;
+ gFieldEffectArguments[2] = strengthObject->previousElevation;
+ gFieldEffectArguments[3] = gSprites[strengthObject->spriteId].oam.priority;
+ FieldEffectStart(FLDEFF_DUST);
+ PlaySE(SE_W070);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+{
+ if (ObjectEventCheckHeldMovementStatus(playerObject)
+ && ObjectEventCheckHeldMovementStatus(strengthObject))
+ {
+ ObjectEventClearHeldMovementIfFinished(playerObject);
+ ObjectEventClearHeldMovementIfFinished(strengthObject);
+ sub_806DE28(strengthObject);
+ sub_806DE70(strengthObject->currentCoords.x, strengthObject->currentCoords.y);
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ DestroyTask(FindTaskIdByFunc(Task_BumpBoulder));
+ }
+ return FALSE;
+}
+
+bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = {
+ PlayerAvatar_DoSecretBaseMatJump
+};
+
+void DoPlayerMatJump(void)
+{
+ DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF));
+}
+
+void DoPlayerAvatarSecretBaseMatJump(u8 taskId)
+{
+ while (sPlayerAvatarSecretBaseMatJump[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId]))
+ ;
+}
+
+// because data[0] is used to call this, it can be inferred that there may have been multiple mat jump functions at one point, so the name for these groups of functions is appropriate in assuming the sole use of mat jump.
+bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent)
+{
+ gPlayerAvatar.preventStep = TRUE;
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ PlaySE(SE_DANSA);
+ sub_805C06C(objectEvent, GetJumpInPlaceMovementAction(objectEvent->facingDirection));
+ task->data[1]++;
+ if (task->data[1] > 1)
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ gPlayerAvatar.unk1 |= 0x20;
+ DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump));
+ }
+ }
+ return FALSE;
+}
+
+bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task * task, struct ObjectEvent * playerObj) = {
+ PlayerAvatar_SecretBaseMatSpinStep0,
+ PlayerAvatar_SecretBaseMatSpinStep1,
+ PlayerAvatar_SecretBaseMatSpinStep2,
+ PlayerAvatar_SecretBaseMatSpinStep3,
+};
+
+void DoPlayerMatSpin(void)
+{
+ u8 taskId = CreateTask(PlayerAvatar_DoSecretBaseMatSpin, 0xFF);
+
+ PlayerAvatar_DoSecretBaseMatSpin(taskId);
+}
+
+void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId)
+{
+ while (sPlayerAvatarSecretBaseMatSpin[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId]))
+ ;
+}
+
+bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent)
+{
+ task->data[0]++;
+ task->data[1] = objectEvent->movementDirection;
+ gPlayerAvatar.preventStep = TRUE;
+ ScriptContext2_Enable();
+ PlaySE(SE_TK_WARPIN);
+ return TRUE;
+}
+
+bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent)
+{
+ u8 directions[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
+
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ u8 direction;
+
+ sub_805C06C(objectEvent, GetFaceDirectionMovementAction(direction = directions[objectEvent->movementDirection - 1]));
+ if (direction == (u8)task->data[1])
+ task->data[2]++;
+ task->data[0]++;
+ if (task->data[2] > 3 && direction == GetOppositeDirection(task->data[1]))
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent)
+{
+ const u8 actions[] = {
+ MOVEMENT_ACTION_DELAY_1,
+ MOVEMENT_ACTION_DELAY_1,
+ MOVEMENT_ACTION_DELAY_2,
+ MOVEMENT_ACTION_DELAY_4,
+ MOVEMENT_ACTION_DELAY_8,
+ };
+
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ sub_805C06C(objectEvent, actions[task->data[2]]);
+ task->data[0] = 1;
+ }
+ return FALSE;
+}
+
+bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent)
+{
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ sub_805C06C(objectEvent, sub_8063F2C(GetOppositeDirection(task->data[1])));
+ ScriptContext2_Disable();
+ gPlayerAvatar.preventStep = FALSE;
+ DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin));
+ }
+ return FALSE;
+}
+
+void CreateStopSurfingTask(u8 direction)
+{
+ u8 taskId;
+
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ Overworld_ClearSavedMusic();
+ Overworld_ChangeMusicToDefault();
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
+ gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT;
+ gPlayerAvatar.preventStep = TRUE;
+ taskId = CreateTask(Task_StopSurfingInit, 0xFF);
+ gTasks[taskId].data[0] = direction;
+ Task_StopSurfingInit(taskId);
+}
+
+void CreateStopSurfingTask_NoMusicChange(u8 direction)
+{
+ u8 taskId;
+
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
+ gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT;
+ gPlayerAvatar.preventStep = TRUE;
+ taskId = CreateTask(Task_StopSurfingInit, 0xFF);
+ gTasks[taskId].data[0] = direction;
+ Task_StopSurfingInit(taskId);
+}
+
+void sub_805D1A8(void)
+{
+ if (gUnknown_3005E88 != 1 && gUnknown_3005E88 != 3)
+ {
+ sub_811278C(gUnknown_835B820[DIR_NORTH], 16);
+ CreateStopSurfingTask(DIR_NORTH);
+ }
+}
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index be40042b3..0819e8fc5 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -177,20 +177,20 @@ static void sub_81507BC(struct ObjectEvent * a0, u8 a1)
static void sub_81507CC(void)
{
- sub_805D154(1);
+ CreateStopSurfingTask_NoMusicChange(1);
}
static void sub_81507D8(void)
{
- sub_805D154(2);
+ CreateStopSurfingTask_NoMusicChange(2);
}
static void sub_81507E4(void)
{
- sub_805D154(3);
+ CreateStopSurfingTask_NoMusicChange(3);
}
static void sub_81507F0(void)
{
- sub_805D154(4);
+ CreateStopSurfingTask_NoMusicChange(4);
}