summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-03-26 17:53:18 -0400
committerGitHub <noreply@github.com>2020-03-26 17:53:18 -0400
commitb9c604b8d2ffe863cf17336a4d956b08438f0f45 (patch)
tree95935cb5754f89ea78402cf4706830f71eb07e81
parent7a6d4525c4066038832d85a45ed6df6ab4660309 (diff)
parent9130579f1454c869e74ea8c953c0c778a4760396 (diff)
Merge pull request #311 from PikalaxALT/field_player_avatar
Field player avatar
-rw-r--r--asm/bike.s40
-rw-r--r--asm/field_player_avatar.s5647
-rw-r--r--asm/overworld.s18
-rw-r--r--berry_fix/payload/include/global.fieldmap.h6
-rw-r--r--common_syms/quest_log.txt4
-rw-r--r--data/field_player_avatar.s153
-rw-r--r--data/maps/FuchsiaCity_WardensHouse/map.json2
-rw-r--r--data/maps/MtEmber_Exterior/map.json10
-rw-r--r--data/maps/MtEmber_RubyPath_B2F/map.json6
-rw-r--r--data/maps/MtEmber_RubyPath_B3F/map.json8
-rw-r--r--data/maps/MtEmber_Summit/map.json8
-rw-r--r--data/maps/PewterCity/scripts.inc2
-rw-r--r--data/maps/SeafoamIslands_1F/map.json4
-rw-r--r--data/maps/SeafoamIslands_B1F/map.json4
-rw-r--r--data/maps/SeafoamIslands_B2F/map.json4
-rw-r--r--data/maps/SeafoamIslands_B3F/map.json12
-rw-r--r--data/maps/SeafoamIslands_B4F/map.json4
-rw-r--r--data/maps/SevenIsland_SevaultCanyon/map.json4
-rw-r--r--data/maps/SevenIsland_SevaultCanyon_TanobyKey/map.json14
-rw-r--r--data/maps/SixIsland_RuinValley/map.json16
-rw-r--r--data/maps/VictoryRoad_1F/map.json6
-rw-r--r--data/maps/VictoryRoad_2F/map.json6
-rw-r--r--data/maps/VictoryRoad_3F/map.json8
-rw-r--r--data/scripts/field_moves.inc4
-rw-r--r--include/bike.h6
-rw-r--r--include/constants/event_objects.h2
-rw-r--r--include/constants/flags.h4
-rw-r--r--include/constants/vars.h9
-rw-r--r--include/event_object_movement.h28
-rw-r--r--include/field_control_avatar.h1
-rw-r--r--include/field_effect_helpers.h3
-rw-r--r--include/field_fadetransition.h4
-rw-r--r--include/field_player_avatar.h46
-rw-r--r--include/global.fieldmap.h46
-rw-r--r--include/metatile_behavior.h20
-rw-r--r--include/overworld.h2
-rw-r--r--include/quest_log.h12
-rw-r--r--include/quest_log_objects.h2
-rw-r--r--include/quest_log_player.h2
-rw-r--r--include/strings.h5
-rw-r--r--ld_script.txt4
-rw-r--r--src/data/object_events/object_event_graphics_info_pointers.h2
-rw-r--r--src/dynamic_placeholder_text_util.c6
-rw-r--r--src/event_data.c2
-rw-r--r--src/event_object_movement.c76
-rw-r--r--src/field_control_avatar.c12
-rw-r--r--src/field_effect.c2
-rw-r--r--src/field_fadetransition.c80
-rw-r--r--src/field_player_avatar.c2165
-rw-r--r--src/field_screen_effect.c4
-rw-r--r--src/fldeff_strength.c2
-rw-r--r--src/item_use.c12
-rw-r--r--src/metatile_behavior.c20
-rw-r--r--src/naming_screen.c2
-rw-r--r--src/new_menu_helpers.c10
-rw-r--r--src/option_menu.c2
-rw-r--r--src/quest_log.c517
-rw-r--r--src/quest_log_objects.c4
-rw-r--r--src/quest_log_player.c20
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/seagallop.c2
-rw-r--r--src/strings.c6
-rw-r--r--sym_ewram.txt15
63 files changed, 2789 insertions, 6360 deletions
diff --git a/asm/bike.s b/asm/bike.s
index e73e906bc..c8f65a03b 100644
--- a/asm/bike.s
+++ b/asm/bike.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_80BD09C
-sub_80BD09C: @ 80BD09C
+ thumb_func_start MovePlayerOnBike
+MovePlayerOnBike: @ 80BD09C
push {r4,lr}
sub sp, 0x4
mov r3, sp
@@ -32,7 +32,7 @@ sub_80BD09C: @ 80BD09C
bx r0
.align 2, 0
_080BD0D0: .4byte gUnknown_83E7CFC
- thumb_func_end sub_80BD09C
+ thumb_func_end MovePlayerOnBike
thumb_func_start sub_80BD0D4
sub_80BD0D4: @ 80BD0D4
@@ -342,7 +342,7 @@ _080BD300:
cmp r1, 0x6
bne _080BD322
adds r0, r4, 0
- bl sub_805C23C
+ bl PlayerJumpLedge
b _080BD350
_080BD322:
subs r0, r1, 0x5
@@ -357,16 +357,16 @@ _080BD334:
cmp r1, 0xE
beq _080BD342
adds r0, r4, 0
- bl sub_805BAAC
+ bl PlayerIsMovingOnRockStairs
cmp r0, 0
beq _080BD34A
_080BD342:
adds r0, r4, 0
- bl sub_805C11C
+ bl PlayerGoSpeed2
b _080BD350
_080BD34A:
adds r0, r6, 0
- bl sub_805C14C
+ bl PlayerRideWaterCurrent
_080BD350:
pop {r4-r6}
pop {r0}
@@ -389,7 +389,7 @@ _080BD370:
cmp r0, 0x6
bne _080BD37A
movs r0, 0x1
- bl sub_805C23C
+ bl PlayerJumpLedge
_080BD37A:
pop {r0}
bx r0
@@ -406,7 +406,7 @@ sub_80BD380: @ 80BD380
cmp r0, 0
bne _080BD398
adds r0, r4, 0
- bl sub_805C104
+ bl PlayerGoSpeed1
_080BD398:
pop {r4}
pop {r0}
@@ -481,7 +481,7 @@ sub_80BD40C: @ 80BD40C
lsls r2, 16
asrs r2, 16
str r5, [sp]
- bl sub_805BBA8
+ bl CheckForObjectEventCollision
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x4
@@ -537,8 +537,8 @@ _080BD482:
bx r1
thumb_func_end sub_80BD460
- thumb_func_start sub_80BD488
-sub_80BD488: @ 80BD488
+ thumb_func_start IsRunningDisallowed
+IsRunningDisallowed: @ 80BD488
push {lr}
lsls r0, 24
lsrs r2, r0, 24
@@ -564,7 +564,7 @@ _080BD4B0:
_080BD4B2:
pop {r1}
bx r1
- thumb_func_end sub_80BD488
+ thumb_func_end IsRunningDisallowed
thumb_func_start sub_80BD4B8
sub_80BD4B8: @ 80BD4B8
@@ -611,21 +611,21 @@ sub_80BD4F0: @ 80BD4F0
cmp r0, 0x1
bhi _080BD51A
adds r0, r4, 0
- bl MetatileBehavior_ReturnFalse_15
+ bl MetatileBehavior_IsIsolatedVerticalRail
lsls r0, 24
cmp r0, 0
bne _080BD532
adds r0, r4, 0
- bl MetatileBehavior_ReturnFalse_17
+ bl MetatileBehavior_IsVerticalRail
b _080BD52C
_080BD51A:
adds r0, r5, 0
- bl MetatileBehavior_ReturnFalse_16
+ bl MetatileBehavior_IsIsolatedHorizontalRail
lsls r0, 24
cmp r0, 0
bne _080BD532
adds r0, r5, 0
- bl MetatileBehavior_ReturnFalse_18
+ bl MetatileBehavior_IsHorizontalRail
_080BD52C:
lsls r0, 24
cmp r0, 0
@@ -697,7 +697,7 @@ player_should_look_direction_be_enforced_upon_movement: @ 80BD58C
lsls r0, 2
adds r0, r2
ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_ReturnFalse_14
+ bl MetatileBehavior_IsBumpySlope
lsls r0, 24
cmp r0, 0
beq _080BD5C0
@@ -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
@@ -875,7 +875,7 @@ Bike_HandleBumpySlopeJump: @ 80BD6C4
bl MapGridGetMetatileBehaviorAt
lsls r0, 24
lsrs r0, 24
- bl MetatileBehavior_ReturnFalse_14
+ bl MetatileBehavior_IsBumpySlope
lsls r0, 24
cmp r0, 0
beq _080BD70C
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
deleted file mode 100644
index 024dd44e5..000000000
--- a/asm/field_player_avatar.s
+++ /dev/null
@@ -1,5647 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_805B3B8
-sub_805B3B8: @ 805B3B8
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, _0805B3D4 @ =gObjectEvents
- adds r0, r2
- ldr r2, _0805B3D8 @ =sub_805B3DC
- bl UpdateObjectEventCurrentMovement
- pop {r0}
- bx r0
- .align 2, 0
-_0805B3D4: .4byte gObjectEvents
-_0805B3D8: .4byte sub_805B3DC
- thumb_func_end sub_805B3B8
-
- thumb_func_start sub_805B3DC
-sub_805B3DC: @ 805B3DC
- movs r0, 0
- bx lr
- thumb_func_end sub_805B3DC
-
- thumb_func_start sub_805B3E0
-sub_805B3E0: @ 805B3E0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- lsls r2, 16
- lsrs r7, r2, 16
- ldr r4, _0805B454 @ =gPlayerAvatar
- ldrb r1, [r4, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805B458 @ =gObjectEvents
- adds r5, r0, r1
- adds r0, r5, 0
- bl sub_805CC40
- ldrb r0, [r4, 0x6]
- cmp r0, 0
- bne _0805B448
- bl sub_805B528
- lsls r0, 24
- cmp r0, 0
- bne _0805B448
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_805B45C
- lsls r0, 24
- cmp r0, 0
- bne _0805B448
- adds r0, r5, 0
- bl npc_clear_strange_bits
- bl DoPlayerAvatarTransition
- bl sub_805B5A0
- lsls r0, 24
- cmp r0, 0
- bne _0805B448
- adds r0, r6, 0
- mov r1, r8
- adds r2, r7, 0
- bl MovePlayerAvatarUsingKeypadInput
- bl PlayerAllowForcedMovementIfMovingSameDirection
-_0805B448:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805B454: .4byte gPlayerAvatar
-_0805B458: .4byte gObjectEvents
- thumb_func_end sub_805B3E0
-
- thumb_func_start sub_805B45C
-sub_805B45C: @ 805B45C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _0805B4A6
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- bne _0805B4A6
- adds r0, r4, 0
- bl ObjectEventGetHeldMovementActionId
- lsls r0, 24
- movs r1, 0xDF
- lsls r1, 24
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x3
- bhi _0805B4A2
- cmp r5, 0
- beq _0805B4A2
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- cmp r0, r5
- beq _0805B4A2
- adds r0, r4, 0
- bl ObjectEventClearHeldMovement
- b _0805B4A6
-_0805B4A2:
- movs r0, 0x1
- b _0805B4A8
-_0805B4A6:
- movs r0, 0
-_0805B4A8:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_805B45C
-
- thumb_func_start npc_clear_strange_bits
-npc_clear_strange_bits: @ 805B4B0
- ldrb r2, [r0, 0x1]
- movs r1, 0x11
- negs r1, r1
- ands r1, r2
- movs r2, 0x5
- negs r2, r2
- ands r1, r2
- adds r2, 0x2
- ands r1, r2
- strb r1, [r0, 0x1]
- ldr r2, _0805B4D0 @ =gPlayerAvatar
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bx lr
- .align 2, 0
-_0805B4D0: .4byte gPlayerAvatar
- thumb_func_end npc_clear_strange_bits
-
- thumb_func_start MovePlayerAvatarUsingKeypadInput
-MovePlayerAvatarUsingKeypadInput: @ 805B4D4
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r2, 16
- ldr r0, _0805B4F8 @ =gPlayerAvatar
- ldrb r1, [r0]
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0
- beq _0805B4FC
- adds r0, r3, 0
- adds r1, r4, 0
- bl sub_80BD09C
- b _0805B504
- .align 2, 0
-_0805B4F8: .4byte gPlayerAvatar
-_0805B4FC:
- adds r0, r3, 0
- adds r1, r2, 0
- bl MovePlayerNotOnBike
-_0805B504:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end MovePlayerAvatarUsingKeypadInput
-
- thumb_func_start PlayerAllowForcedMovementIfMovingSameDirection
-PlayerAllowForcedMovementIfMovingSameDirection: @ 805B50C
- push {lr}
- ldr r2, _0805B524 @ =gPlayerAvatar
- ldrb r0, [r2, 0x2]
- cmp r0, 0x2
- bne _0805B51E
- ldrb r1, [r2]
- movs r0, 0xDF
- ands r0, r1
- strb r0, [r2]
-_0805B51E:
- pop {r0}
- bx r0
- .align 2, 0
-_0805B524: .4byte gPlayerAvatar
- thumb_func_end PlayerAllowForcedMovementIfMovingSameDirection
-
- thumb_func_start sub_805B528
-sub_805B528: @ 805B528
- push {r4,r5,lr}
- ldr r5, _0805B58C @ =gPlayerAvatar
- ldrb r1, [r5]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0805B598
- ldrb r0, [r5, 0x1C]
- bl MetatileBehavior_IsSpinTile
- lsls r0, 24
- cmp r0, 0
- beq _0805B598
- ldr r4, _0805B590 @ =gUnknown_2036E30
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805B594 @ =gObjectEvents
- adds r1, r0, r1
- str r1, [r4]
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0805B586
- ldrb r0, [r1, 0x1E]
- bl MetatileBehavior_IsStopSpinning
- lsls r0, 24
- cmp r0, 0
- bne _0805B598
- ldr r0, [r4]
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsSpinTile
- lsls r0, 24
- cmp r0, 0
- beq _0805B57A
- ldr r0, [r4]
- ldrb r0, [r0, 0x1E]
- strh r0, [r5, 0x1C]
-_0805B57A:
- ldr r0, [r4]
- bl ObjectEventClearHeldMovement
- ldrb r0, [r5, 0x1C]
- bl sub_805C2CC
-_0805B586:
- movs r0, 0x1
- b _0805B59A
- .align 2, 0
-_0805B58C: .4byte gPlayerAvatar
-_0805B590: .4byte gUnknown_2036E30
-_0805B594: .4byte gObjectEvents
-_0805B598:
- movs r0, 0
-_0805B59A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_805B528
-
- thumb_func_start sub_805B5A0
-sub_805B5A0: @ 805B5A0
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r3, _0805B5F4 @ =gPlayerAvatar
- ldrb r1, [r3]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0805B610
- ldr r2, _0805B5F8 @ =gObjectEvents
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r7, [r0, 0x1E]
- movs r6, 0
- ldr r0, _0805B5FC @ =gUnknown_835B764
- ldr r1, [r0]
- adds r2, r0, 0
- cmp r1, 0
- beq _0805B628
- movs r5, 0
-_0805B5CC:
- adds r4, r5, 0
- adds r0, r4, r2
- ldr r1, [r0]
- adds r0, r7, 0
- str r2, [sp]
- bl _call_via_r1
- lsls r0, 24
- ldr r2, [sp]
- cmp r0, 0
- bne _0805B600
- adds r5, 0x8
- adds r6, 0x1
- adds r0, r5, r2
- ldr r0, [r0]
- ldr r2, _0805B5FC @ =gUnknown_835B764
- cmp r0, 0
- bne _0805B5CC
- b _0805B628
- .align 2, 0
-_0805B5F4: .4byte gPlayerAvatar
-_0805B5F8: .4byte gObjectEvents
-_0805B5FC: .4byte gUnknown_835B764
-_0805B600:
- ldr r0, _0805B60C @ =gPlayerAvatar
- strh r7, [r0, 0x1C]
- adds r0, r2, 0x4
- adds r0, r5, r0
- b _0805B62E
- .align 2, 0
-_0805B60C: .4byte gPlayerAvatar
-_0805B610:
- movs r6, 0
- ldr r0, _0805B640 @ =gUnknown_835B764
- ldr r1, [r0]
- adds r2, r0, 0
- cmp r1, 0
- beq _0805B628
- adds r1, r2, 0
-_0805B61E:
- adds r1, 0x8
- adds r6, 0x1
- ldr r0, [r1]
- cmp r0, 0
- bne _0805B61E
-_0805B628:
- lsls r0, r6, 3
- adds r1, r2, 0x4
- adds r0, r1
-_0805B62E:
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805B640: .4byte gUnknown_835B764
- thumb_func_end sub_805B5A0
-
- thumb_func_start ForcedMovement_None
-ForcedMovement_None: @ 805B644
- push {r4,lr}
- ldr r4, _0805B688 @ =gPlayerAvatar
- ldrb r1, [r4]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0805B67E
- ldrb r1, [r4, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805B68C @ =gObjectEvents
- adds r0, r1
- ldrb r2, [r0, 0x1]
- movs r1, 0x3
- negs r1, r1
- ands r1, r2
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrb r1, [r0, 0x18]
- lsls r1, 28
- lsrs r1, 28
- bl SetObjectEventDirection
- ldrb r1, [r4]
- movs r0, 0xBF
- ands r0, r1
- strb r0, [r4]
-_0805B67E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805B688: .4byte gPlayerAvatar
-_0805B68C: .4byte gObjectEvents
- thumb_func_end ForcedMovement_None
-
- thumb_func_start DoForcedMovement
-DoForcedMovement: @ 805B690
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _0805B6D0 @ =gPlayerAvatar
- adds r0, r5, 0
- bl sub_805BB1C
- lsls r0, 24
- lsrs r4, r0, 24
- adds r7, r4, 0
- ldrb r0, [r6]
- movs r1, 0x40
- mov r10, r1
- movs r1, 0
- mov r8, r1
- mov r1, r10
- orrs r0, r1
- strb r0, [r6]
- cmp r4, 0
- beq _0805B6EC
- bl ForcedMovement_None
- cmp r4, 0x4
- bhi _0805B6D4
- movs r0, 0
- b _0805B6F8
- .align 2, 0
-_0805B6D0: .4byte gPlayerAvatar
-_0805B6D4:
- cmp r7, 0x6
- bne _0805B6DE
- adds r0, r5, 0
- bl sub_805C23C
-_0805B6DE:
- ldrb r0, [r6]
- mov r1, r10
- orrs r0, r1
- strb r0, [r6]
- movs r0, 0x2
- strb r0, [r6, 0x2]
- b _0805B6F6
-_0805B6EC:
- movs r0, 0x2
- strb r0, [r6, 0x2]
- adds r0, r5, 0
- bl _call_via_r9
-_0805B6F6:
- movs r0, 0x1
-_0805B6F8:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end DoForcedMovement
-
- thumb_func_start DoForcedMovementInCurrentDirection
-DoForcedMovementInCurrentDirection: @ 805B708
- push {lr}
- adds r1, r0, 0
- ldr r0, _0805B734 @ =gPlayerAvatar
- ldrb r2, [r0, 0x5]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, _0805B738 @ =gObjectEvents
- adds r0, r2
- ldrb r2, [r0, 0x1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r0, 0x1]
- ldrb r0, [r0, 0x18]
- lsrs r0, 4
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B734: .4byte gPlayerAvatar
-_0805B738: .4byte gObjectEvents
- thumb_func_end DoForcedMovementInCurrentDirection
-
- thumb_func_start ForcedMovement_Slip
-ForcedMovement_Slip: @ 805B73C
- push {lr}
- ldr r0, _0805B74C @ =sub_805C11C
- bl DoForcedMovementInCurrentDirection
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B74C: .4byte sub_805C11C
- thumb_func_end ForcedMovement_Slip
-
- thumb_func_start sub_805B750
-sub_805B750: @ 805B750
- push {lr}
- ldr r1, _0805B764 @ =sub_805C104
- movs r0, 0x1
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B764: .4byte sub_805C104
- thumb_func_end sub_805B750
-
- thumb_func_start sub_805B768
-sub_805B768: @ 805B768
- push {lr}
- ldr r1, _0805B77C @ =sub_805C104
- movs r0, 0x2
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B77C: .4byte sub_805C104
- thumb_func_end sub_805B768
-
- thumb_func_start sub_805B780
-sub_805B780: @ 805B780
- push {lr}
- ldr r1, _0805B794 @ =sub_805C104
- movs r0, 0x3
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B794: .4byte sub_805C104
- thumb_func_end sub_805B780
-
- thumb_func_start sub_805B798
-sub_805B798: @ 805B798
- push {lr}
- ldr r1, _0805B7AC @ =sub_805C104
- movs r0, 0x4
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B7AC: .4byte sub_805C104
- thumb_func_end sub_805B798
-
- thumb_func_start sub_805B7B0
-sub_805B7B0: @ 805B7B0
- push {lr}
- bl sub_805B820
- ldr r1, _0805B7C8 @ =sub_805C2B4
- movs r0, 0x4
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B7C8: .4byte sub_805C2B4
- thumb_func_end sub_805B7B0
-
- thumb_func_start sub_805B7CC
-sub_805B7CC: @ 805B7CC
- push {lr}
- bl sub_805B820
- ldr r1, _0805B7E4 @ =sub_805C2B4
- movs r0, 0x3
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B7E4: .4byte sub_805C2B4
- thumb_func_end sub_805B7CC
-
- thumb_func_start sub_805B7E8
-sub_805B7E8: @ 805B7E8
- push {lr}
- bl sub_805B820
- ldr r1, _0805B800 @ =sub_805C2B4
- movs r0, 0x2
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B800: .4byte sub_805C2B4
- thumb_func_end sub_805B7E8
-
- thumb_func_start sub_805B804
-sub_805B804: @ 805B804
- push {lr}
- bl sub_805B820
- ldr r1, _0805B81C @ =sub_805C2B4
- movs r0, 0x1
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B81C: .4byte sub_805C2B4
- thumb_func_end sub_805B804
-
- thumb_func_start sub_805B820
-sub_805B820: @ 805B820
- push {lr}
- movs r0, 0x99
- bl PlaySE
- pop {r0}
- bx r0
- thumb_func_end sub_805B820
-
- thumb_func_start sub_805B82C
-sub_805B82C: @ 805B82C
- push {lr}
- ldr r1, _0805B840 @ =sub_805C14C
- movs r0, 0x1
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B840: .4byte sub_805C14C
- thumb_func_end sub_805B82C
-
- thumb_func_start sub_805B844
-sub_805B844: @ 805B844
- push {lr}
- ldr r1, _0805B858 @ =sub_805C14C
- movs r0, 0x2
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B858: .4byte sub_805C14C
- thumb_func_end sub_805B844
-
- thumb_func_start sub_805B85C
-sub_805B85C: @ 805B85C
- push {lr}
- ldr r1, _0805B870 @ =sub_805C14C
- movs r0, 0x3
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B870: .4byte sub_805C14C
- thumb_func_end sub_805B85C
-
- thumb_func_start sub_805B874
-sub_805B874: @ 805B874
- push {lr}
- ldr r1, _0805B888 @ =sub_805C14C
- movs r0, 0x4
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B888: .4byte sub_805C14C
- thumb_func_end sub_805B874
-
- thumb_func_start ForcedMovement_Slide
-ForcedMovement_Slide: @ 805B88C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0805B8BC @ =gPlayerAvatar
- ldrb r3, [r2, 0x5]
- lsls r2, r3, 3
- adds r2, r3
- lsls r2, 2
- ldr r3, _0805B8C0 @ =gObjectEvents
- adds r2, r3
- ldrb r3, [r2, 0x1]
- movs r4, 0x4
- orrs r3, r4
- movs r4, 0x2
- orrs r3, r4
- strb r3, [r2, 0x1]
- bl DoForcedMovement
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805B8BC: .4byte gPlayerAvatar
-_0805B8C0: .4byte gObjectEvents
- thumb_func_end ForcedMovement_Slide
-
- thumb_func_start ForcedMovement_SlideSouth
-ForcedMovement_SlideSouth: @ 805B8C4
- push {lr}
- ldr r1, _0805B8D8 @ =sub_805C11C
- movs r0, 0x1
- bl ForcedMovement_Slide
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B8D8: .4byte sub_805C11C
- thumb_func_end ForcedMovement_SlideSouth
-
- thumb_func_start ForcedMovement_SlideNorth
-ForcedMovement_SlideNorth: @ 805B8DC
- push {lr}
- ldr r1, _0805B8F0 @ =sub_805C11C
- movs r0, 0x2
- bl ForcedMovement_Slide
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B8F0: .4byte sub_805C11C
- thumb_func_end ForcedMovement_SlideNorth
-
- thumb_func_start ForcedMovement_SlideWest
-ForcedMovement_SlideWest: @ 805B8F4
- push {lr}
- ldr r1, _0805B908 @ =sub_805C11C
- movs r0, 0x3
- bl ForcedMovement_Slide
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B908: .4byte sub_805C11C
- thumb_func_end ForcedMovement_SlideWest
-
- thumb_func_start ForcedMovement_SlideEast
-ForcedMovement_SlideEast: @ 805B90C
- push {lr}
- ldr r1, _0805B920 @ =sub_805C11C
- movs r0, 0x4
- bl ForcedMovement_Slide
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805B920: .4byte sub_805C11C
- thumb_func_end ForcedMovement_SlideEast
-
- thumb_func_start sub_805B924
-sub_805B924: @ 805B924
- push {lr}
- bl sub_805CE80
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_805B924
-
- thumb_func_start sub_805B930
-sub_805B930: @ 805B930
- push {lr}
- bl sub_805CF58
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_805B930
-
- thumb_func_start MovePlayerNotOnBike
-MovePlayerNotOnBike: @ 805B93C
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r6, _0805B968 @ =gUnknown_835B814
- adds r0, r4, 0
- bl CheckMovementInputNotOnBike
- lsls r0, 24
- lsrs r0, 22
- adds r0, r6
- ldr r2, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl _call_via_r2
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805B968: .4byte gUnknown_835B814
- thumb_func_end MovePlayerNotOnBike
-
- thumb_func_start CheckMovementInputNotOnBike
-CheckMovementInputNotOnBike: @ 805B96C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0805B984
- ldr r0, _0805B980 @ =gPlayerAvatar
- strb r4, [r0, 0x2]
- movs r0, 0
- b _0805B9A6
- .align 2, 0
-_0805B980: .4byte gPlayerAvatar
-_0805B984:
- bl GetPlayerMovementDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _0805B9A0
- ldr r1, _0805B99C @ =gPlayerAvatar
- ldrb r0, [r1, 0x2]
- cmp r0, 0x2
- beq _0805B9A0
- movs r0, 0x1
- b _0805B9A4
- .align 2, 0
-_0805B99C: .4byte gPlayerAvatar
-_0805B9A0:
- ldr r1, _0805B9AC @ =gPlayerAvatar
- movs r0, 0x2
-_0805B9A4:
- strb r0, [r1, 0x2]
-_0805B9A6:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805B9AC: .4byte gPlayerAvatar
- thumb_func_end CheckMovementInputNotOnBike
-
- thumb_func_start PlayerNotOnBikeNotMoving
-PlayerNotOnBikeNotMoving: @ 805B9B0
- push {lr}
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl PlayerFaceDirection
- pop {r0}
- bx r0
- thumb_func_end PlayerNotOnBikeNotMoving
-
- thumb_func_start sub_805B9C4
-sub_805B9C4: @ 805B9C4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_805C224
- pop {r0}
- bx r0
- thumb_func_end sub_805B9C4
-
- thumb_func_start sub_805B9D4
-sub_805B9D4: @ 805B9D4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- adds r0, r4, 0
- bl sub_805BB1C
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0
- beq _0805BA18
- cmp r0, 0x6
- bne _0805B9FA
- adds r0, r4, 0
- bl sub_805C23C
- b _0805BAA4
-_0805B9FA:
- cmp r0, 0x8
- bne _0805BA06
- adds r0, r4, 0
- bl PlayerFaceDirection
- b _0805BAA4
-_0805BA06:
- subs r0, r1, 0x5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _0805BAA4
- adds r0, r4, 0
- bl PlayerNotOnBikeCollide
- b _0805BAA4
-_0805BA18:
- ldr r6, _0805BA2C @ =gPlayerAvatar
- ldrb r1, [r6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805BA30
- adds r0, r4, 0
- bl sub_805C11C
- b _0805BAA4
- .align 2, 0
-_0805BA2C: .4byte gPlayerAvatar
-_0805BA30:
- movs r0, 0x2
- ands r5, r0
- cmp r5, 0
- beq _0805BA8C
- ldr r0, _0805BA6C @ =0x0000082f
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0805BA8C
- ldr r2, _0805BA70 @ =gObjectEvents
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1E]
- bl sub_80BD488
- cmp r0, 0
- bne _0805BA8C
- adds r0, r4, 0
- bl sub_805BAAC
- cmp r0, 0
- beq _0805BA74
- adds r0, r4, 0
- bl sub_805C194
- b _0805BA7A
- .align 2, 0
-_0805BA6C: .4byte 0x0000082f
-_0805BA70: .4byte gObjectEvents
-_0805BA74:
- adds r0, r4, 0
- bl sub_805C17C
-_0805BA7A:
- ldr r2, _0805BA88 @ =gPlayerAvatar
- ldrb r1, [r2]
- movs r0, 0x80
- orrs r0, r1
- strb r0, [r2]
- b _0805BAA4
- .align 2, 0
-_0805BA88: .4byte gPlayerAvatar
-_0805BA8C:
- adds r0, r4, 0
- bl sub_805BAAC
- cmp r0, 0
- beq _0805BA9E
- adds r0, r4, 0
- bl sub_805C0EC
- b _0805BAA4
-_0805BA9E:
- adds r0, r4, 0
- bl sub_805C104
-_0805BAA4:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_805B9D4
-
- thumb_func_start sub_805BAAC
-sub_805BAAC: @ 805BAAC
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _0805BAE4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805BAE8 @ =gObjectEvents
- adds r0, r1
- ldrh r2, [r0, 0x10]
- mov r1, sp
- strh r2, [r1]
- ldrh r1, [r0, 0x12]
- mov r4, sp
- adds r4, 0x2
- strh r1, [r4]
- cmp r3, 0x1
- beq _0805BAEC
- cmp r3, 0x2
- bne _0805BB12
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- lsls r1, 16
- asrs r1, 16
- b _0805BB00
- .align 2, 0
-_0805BAE4: .4byte gPlayerAvatar
-_0805BAE8: .4byte gObjectEvents
-_0805BAEC:
- movs r0, 0x1
- mov r1, sp
- adds r2, r4, 0
- bl MoveCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
-_0805BB00:
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsRockStairs
- lsls r0, 24
- lsrs r0, 24
- b _0805BB14
-_0805BB12:
- movs r0, 0
-_0805BB14:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805BAAC
-
- thumb_func_start sub_805BB1C
-sub_805BB1C: @ 805BB1C
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0805BB94 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805BB98 @ =gObjectEvents
- adds r5, r0, r1
- ldrh r1, [r5, 0x10]
- add r0, sp, 0x4
- strh r1, [r0]
- ldrh r1, [r5, 0x12]
- mov r4, sp
- adds r4, 0x6
- strh r1, [r4]
- movs r2, 0
- ldrsh r0, [r0, r2]
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl sub_806DB84
- lsls r0, 24
- cmp r0, 0
- bne _0805BB9C
- adds r0, r6, 0
- add r1, sp, 0x4
- adds r2, r4, 0
- bl MoveCoords
- add r0, sp, 0x4
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- add r1, sp, 0x4
- movs r3, 0
- ldrsh r1, [r1, r3]
- movs r3, 0
- ldrsh r2, [r4, r3]
- str r0, [sp]
- adds r0, r5, 0
- adds r3, r6, 0
- bl sub_805BBA8
- lsls r0, 24
- lsrs r0, 24
- b _0805BB9E
- .align 2, 0
-_0805BB94: .4byte gPlayerAvatar
-_0805BB98: .4byte gObjectEvents
-_0805BB9C:
- movs r0, 0x8
-_0805BB9E:
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_805BB1C
-
- thumb_func_start sub_805BBA8
-sub_805BBA8: @ 805BBA8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, [sp, 0x24]
- lsls r1, 16
- lsls r2, 16
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r4, 24
- lsrs r4, 24
- mov r10, r4
- lsrs r7, r1, 16
- asrs r5, r1, 16
- lsrs r1, r2, 16
- mov r9, r1
- asrs r4, r2, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r6, 0
- bl GetCollisionAtCoords
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- strb r0, [r1]
- cmp r0, 0x3
- bne _0805BBF8
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r6, 0
- bl sub_805BC60
- lsls r0, 24
- cmp r0, 0
- beq _0805BBF8
- movs r0, 0x5
- b _0805BC50
-_0805BBF8:
- lsls r5, r7, 16
- asrs r0, r5, 16
- mov r8, r0
- mov r1, r9
- lsls r4, r1, 16
- asrs r7, r4, 16
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_805BCC8
- lsls r0, 24
- cmp r0, 0
- beq _0805BC1C
- movs r0, 0x2B
- bl IncrementGameStat
- movs r0, 0x6
- b _0805BC50
-_0805BC1C:
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _0805BC38
- mov r0, r8
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_805BCEC
- lsls r0, 24
- cmp r0, 0
- beq _0805BC38
- movs r0, 0x7
- b _0805BC50
-_0805BC38:
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _0805BC4C
- asrs r0, r5, 16
- asrs r1, r4, 16
- mov r2, r10
- mov r3, sp
- bl check_acro_bike_metatile
-_0805BC4C:
- mov r0, sp
- ldrb r0, [r0]
-_0805BC50:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_805BBA8
-
- thumb_func_start sub_805BC60
-sub_805BC60: @ 805BC60
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r0, _0805BCB8 @ =gPlayerAvatar
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805BCC0
- lsls r5, r3, 16
- asrs r0, r5, 16
- lsls r4, 16
- asrs r1, r4, 16
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0805BCC0
- lsrs r0, r5, 16
- lsrs r1, r4, 16
- movs r2, 0x3
- bl GetObjectEventIdByXYZ
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x10
- bne _0805BCC0
- ldr r0, _0805BCBC @ =gUnknown_835B820
- adds r0, r6, r0
- ldrb r0, [r0]
- movs r1, 0x10
- bl sub_811278C
- adds r0, r6, 0
- bl sub_805D0F8
- movs r0, 0x1
- b _0805BCC2
- .align 2, 0
-_0805BCB8: .4byte gPlayerAvatar
-_0805BCBC: .4byte gUnknown_835B820
-_0805BCC0:
- movs r0, 0
-_0805BCC2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_805BC60
-
- thumb_func_start sub_805BCC8
-sub_805BCC8: @ 805BCC8
- push {lr}
- lsls r2, 24
- lsrs r2, 24
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl GetLedgeJumpDirection
- lsls r0, 24
- cmp r0, 0
- bne _0805BCE4
- movs r0, 0
- b _0805BCE6
-_0805BCE4:
- movs r0, 0x1
-_0805BCE6:
- pop {r1}
- bx r1
- thumb_func_end sub_805BCC8
-
- thumb_func_start sub_805BCEC
-sub_805BCEC: @ 805BCEC
- push {r4-r7,lr}
- sub sp, 0x4
- mov r3, sp
- strh r0, [r3]
- mov r5, sp
- adds r5, 0x2
- strh r1, [r5]
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r0, _0805BD98 @ =0x00000805
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0805BDA0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl GetObjectEventIdByXY
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x10
- beq _0805BDA0
- ldr r0, _0805BD9C @ =gObjectEvents
- lsls r1, r6, 3
- adds r1, r6
- lsls r1, 2
- adds r4, r1, r0
- ldrb r0, [r4, 0x5]
- cmp r0, 0x61
- bne _0805BDA0
- ldrh r1, [r4, 0x10]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r4, 0x12]
- strh r0, [r5]
- adds r0, r7, 0
- mov r1, sp
- adds r2, r5, 0
- bl MoveCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- cmp r0, 0x66
- beq _0805BD8A
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r7, 0
- bl GetCollisionAtCoords
- lsls r0, 24
- cmp r0, 0
- bne _0805BDA0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsCaveDoor
- lsls r0, 24
- cmp r0, 0
- bne _0805BDA0
-_0805BD8A:
- adds r0, r6, 0
- adds r1, r7, 0
- bl task_add_bump_boulder
- movs r0, 0x1
- b _0805BDA2
- .align 2, 0
-_0805BD98: .4byte 0x00000805
-_0805BD9C: .4byte gObjectEvents
-_0805BDA0:
- movs r0, 0
-_0805BDA2:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_805BCEC
-
- thumb_func_start check_acro_bike_metatile
-check_acro_bike_metatile: @ 805BDAC
- push {r4-r7,lr}
- adds r6, r3, 0
- lsls r2, 24
- lsrs r5, r2, 24
- movs r4, 0
- ldr r7, _0805BDD4 @ =gUnknown_835B828
-_0805BDB8:
- lsls r0, r4, 2
- adds r0, r7
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- beq _0805BDDC
- ldr r0, _0805BDD8 @ =gUnknown_835B83C
- adds r0, r4, r0
- ldrb r0, [r0]
- strb r0, [r6]
- b _0805BDE6
- .align 2, 0
-_0805BDD4: .4byte gUnknown_835B828
-_0805BDD8: .4byte gUnknown_835B83C
-_0805BDDC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x4
- bls _0805BDB8
-_0805BDE6:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end check_acro_bike_metatile
-
- thumb_func_start SetPlayerAvatarTransitionFlags
-SetPlayerAvatarTransitionFlags: @ 805BDEC
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _0805BE04 @ =gPlayerAvatar
- ldrb r1, [r2, 0x1]
- orrs r0, r1
- strb r0, [r2, 0x1]
- bl DoPlayerAvatarTransition
- pop {r0}
- bx r0
- .align 2, 0
-_0805BE04: .4byte gPlayerAvatar
- thumb_func_end SetPlayerAvatarTransitionFlags
-
- thumb_func_start DoPlayerAvatarTransition
-DoPlayerAvatarTransition: @ 805BE08
- push {r4,r5,lr}
- ldr r0, _0805BE50 @ =gPlayerAvatar
- ldrb r4, [r0, 0x1]
- cmp r4, 0
- beq _0805BE48
- movs r5, 0
-_0805BE14:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0805BE36
- ldr r0, _0805BE54 @ =gUnknown_835B844
- lsls r2, r5, 2
- adds r2, r0
- ldr r0, _0805BE50 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805BE58 @ =gObjectEvents
- adds r0, r1
- ldr r1, [r2]
- bl _call_via_r1
-_0805BE36:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- lsrs r4, 1
- cmp r5, 0x7
- bls _0805BE14
- ldr r1, _0805BE50 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x1]
-_0805BE48:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805BE50: .4byte gPlayerAvatar
-_0805BE54: .4byte gUnknown_835B844
-_0805BE58: .4byte gObjectEvents
- thumb_func_end DoPlayerAvatarTransition
-
- thumb_func_start nullsub_22
-nullsub_22: @ 805BE5C
- bx lr
- thumb_func_end nullsub_22
-
- thumb_func_start sub_805BE60
-sub_805BE60: @ 805BE60
- push {lr}
- movs r0, 0
- bl sub_8150474
- movs r0, 0
- bl sub_8150498
- pop {r0}
- bx r0
- thumb_func_end sub_805BE60
-
- thumb_func_start sub_805BE74
-sub_805BE74: @ 805BE74
- push {lr}
- movs r0, 0x1
- bl sub_8150474
- movs r0, 0x1
- bl sub_8150498
- movs r0, 0
- movs r1, 0
- bl sub_80BD620
- pop {r0}
- bx r0
- thumb_func_end sub_805BE74
-
- thumb_func_start sub_805BE90
-sub_805BE90: @ 805BE90
- push {lr}
- movs r0, 0x3
- bl sub_8150474
- movs r0, 0x3
- bl sub_8150498
- pop {r0}
- bx r0
- thumb_func_end sub_805BE90
-
- thumb_func_start nullsub_23
-nullsub_23: @ 805BEA4
- bx lr
- thumb_func_end nullsub_23
-
- thumb_func_start PlayerAvatarTransition_ReturnToField
-PlayerAvatarTransition_ReturnToField: @ 805BEA8
- ldr r2, _0805BEB4 @ =gPlayerAvatar
- ldrb r1, [r2]
- movs r0, 0x20
- orrs r0, r1
- strb r0, [r2]
- bx lr
- .align 2, 0
-_0805BEB4: .4byte gPlayerAvatar
- thumb_func_end PlayerAvatarTransition_ReturnToField
-
- thumb_func_start sub_805BEB8
-sub_805BEB8: @ 805BEB8
- push {r4,lr}
- ldr r4, _0805BEE4 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r4, 0x3]
- bl PlayerIsAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _0805BEF6
- bl PlayerCheckIfAnimFinishedOrInactive
- lsls r0, 24
- cmp r0, 0
- bne _0805BEE8
- bl player_is_anim_in_certain_ranges
- lsls r0, 24
- cmp r0, 0
- bne _0805BEF6
- movs r0, 0x1
- b _0805BEF4
- .align 2, 0
-_0805BEE4: .4byte gPlayerAvatar
-_0805BEE8:
- bl sub_805BF58
- lsls r0, 24
- cmp r0, 0
- bne _0805BEF6
- movs r0, 0x2
-_0805BEF4:
- strb r0, [r4, 0x3]
-_0805BEF6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805BEB8
-
- thumb_func_start player_is_anim_in_certain_ranges
-player_is_anim_in_certain_ranges: @ 805BEFC
- push {lr}
- ldr r2, _0805BF48 @ =gObjectEvents
- ldr r0, _0805BF4C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1C]
- cmp r1, 0x7
- bls _0805BF42
- adds r0, r1, 0
- subs r0, 0x18
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _0805BF42
- adds r0, r1, 0
- subs r0, 0x21
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xF
- bls _0805BF42
- adds r0, r1, 0
- subs r0, 0x70
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xB
- bls _0805BF42
- adds r0, r1, 0
- adds r0, 0x78
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bhi _0805BF50
-_0805BF42:
- movs r0, 0x1
- b _0805BF52
- .align 2, 0
-_0805BF48: .4byte gObjectEvents
-_0805BF4C: .4byte gPlayerAvatar
-_0805BF50:
- movs r0, 0
-_0805BF52:
- pop {r1}
- bx r1
- thumb_func_end player_is_anim_in_certain_ranges
-
- thumb_func_start sub_805BF58
-sub_805BF58: @ 805BF58
- push {lr}
- bl player_is_anim_in_certain_ranges
- lsls r0, 24
- cmp r0, 0
- beq _0805BF74
- ldr r0, _0805BF70 @ =gPlayerAvatar
- ldrb r0, [r0, 0x2]
- cmp r0, 0x1
- beq _0805BF74
- movs r0, 0x1
- b _0805BF76
- .align 2, 0
-_0805BF70: .4byte gPlayerAvatar
-_0805BF74:
- movs r0, 0
-_0805BF76:
- pop {r1}
- bx r1
- thumb_func_end sub_805BF58
-
- thumb_func_start PlayerIsAnimActive
-PlayerIsAnimActive: @ 805BF7C
- push {lr}
- ldr r0, _0805BF98 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805BF9C @ =gObjectEvents
- adds r0, r1
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805BF98: .4byte gPlayerAvatar
-_0805BF9C: .4byte gObjectEvents
- thumb_func_end PlayerIsAnimActive
-
- thumb_func_start PlayerCheckIfAnimFinishedOrInactive
-PlayerCheckIfAnimFinishedOrInactive: @ 805BFA0
- push {lr}
- ldr r0, _0805BFBC @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805BFC0 @ =gObjectEvents
- adds r0, r1
- bl ObjectEventCheckHeldMovementStatus
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805BFBC: .4byte gPlayerAvatar
-_0805BFC0: .4byte gObjectEvents
- thumb_func_end PlayerCheckIfAnimFinishedOrInactive
-
- thumb_func_start player_set_x22
-player_set_x22: @ 805BFC4
- ldr r3, _0805BFD8 @ =gObjectEvents
- ldr r1, _0805BFDC @ =gPlayerAvatar
- ldrb r2, [r1, 0x5]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- adds r1, 0x22
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0805BFD8: .4byte gObjectEvents
-_0805BFDC: .4byte gPlayerAvatar
- thumb_func_end player_set_x22
-
- thumb_func_start PlayerGetCopyableMovement
-PlayerGetCopyableMovement: @ 805BFE0
- ldr r2, _0805BFF4 @ =gObjectEvents
- ldr r0, _0805BFF8 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x22
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0805BFF4: .4byte gObjectEvents
-_0805BFF8: .4byte gPlayerAvatar
- thumb_func_end PlayerGetCopyableMovement
-
- thumb_func_start sub_805BFFC
-sub_805BFFC: @ 805BFFC
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _0805C01C @ =gPlayerAvatar
- ldrb r2, [r0, 0x5]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, _0805C020 @ =gObjectEvents
- adds r0, r2
- bl ObjectEventForceSetHeldMovement
- pop {r0}
- bx r0
- .align 2, 0
-_0805C01C: .4byte gPlayerAvatar
-_0805C020: .4byte gObjectEvents
- thumb_func_end sub_805BFFC
-
- thumb_func_start sub_805C024
-sub_805C024: @ 805C024
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- bl PlayerIsAnimActive
- lsls r0, 24
- cmp r0, 0
- bne _0805C05E
- adds r0, r4, 0
- bl player_set_x22
- ldr r0, _0805C064 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805C068 @ =gObjectEvents
- adds r0, r1
- adds r1, r5, 0
- bl ObjectEventSetHeldMovement
- lsls r0, 24
- cmp r0, 0
- bne _0805C05E
- adds r0, r5, 0
- bl sub_8112628
-_0805C05E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C064: .4byte gPlayerAvatar
-_0805C068: .4byte gObjectEvents
- thumb_func_end sub_805C024
-
- thumb_func_start sub_805C06C
-sub_805C06C: @ 805C06C
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r0, _0805C09C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805C0A0 @ =gObjectEvents
- adds r0, r1
- adds r1, r4, 0
- bl ObjectEventSetHeldMovement
- lsls r0, 24
- cmp r0, 0
- bne _0805C094
- adds r0, r4, 0
- movs r1, 0
- bl sub_81126AC
-_0805C094:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C09C: .4byte gPlayerAvatar
-_0805C0A0: .4byte gObjectEvents
- thumb_func_end sub_805C06C
-
- thumb_func_start sub_805C0A4
-sub_805C0A4: @ 805C0A4
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- adds r1, r5, 0
- bl ObjectEventSetHeldMovement
- lsls r0, 24
- cmp r0, 0
- bne _0805C0CA
- ldrb r0, [r4, 0x8]
- ldrb r1, [r4, 0x9]
- ldrb r2, [r4, 0xA]
- movs r3, 0x20
- str r3, [sp]
- adds r3, r5, 0
- bl sub_8112588
-_0805C0CA:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_805C0A4
-
- thumb_func_start sub_805C0D4
-sub_805C0D4: @ 805C0D4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8063F2C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C0D4
-
- thumb_func_start sub_805C0EC
-sub_805C0EC: @ 805C0EC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8063F58
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C0EC
-
- thumb_func_start sub_805C104
-sub_805C104: @ 805C104
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetWalkNormalMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C104
-
- thumb_func_start sub_805C11C
-sub_805C11C: @ 805C11C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetWalkFastMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C11C
-
- thumb_func_start sub_805C134
-sub_805C134: @ 805C134
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8063FDC
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C134
-
- thumb_func_start sub_805C14C
-sub_805C14C: @ 805C14C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8064008
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C14C
-
- thumb_func_start sub_805C164
-sub_805C164: @ 805C164
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetWalkFastestMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C164
-
- thumb_func_start sub_805C17C
-sub_805C17C: @ 805C17C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_806408C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C17C
-
- thumb_func_start sub_805C194
-sub_805C194: @ 805C194
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_80640B8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C194
-
- thumb_func_start PlayerOnBikeCollide
-PlayerOnBikeCollide: @ 805C1AC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_805C438
- adds r0, r4, 0
- bl GetWalkInPlaceNormalMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PlayerOnBikeCollide
-
- thumb_func_start PlayerNotOnBikeCollide
-PlayerNotOnBikeCollide: @ 805C1D0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_805C438
- adds r0, r4, 0
- bl GetStepInPlaceDelay32AnimId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PlayerNotOnBikeCollide
-
- thumb_func_start PlayerFaceDirection
-PlayerFaceDirection: @ 805C1F4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end PlayerFaceDirection
-
- thumb_func_start sub_805C20C
-sub_805C20C: @ 805C20C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionFastMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C20C
-
- thumb_func_start sub_805C224
-sub_805C224: @ 805C224
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetWalkInPlaceSlowMovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C224
-
- thumb_func_start sub_805C23C
-sub_805C23C: @ 805C23C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0xA
- bl PlaySE
- adds r0, r4, 0
- bl GetJump2MovementAction
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x8
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C23C
-
- thumb_func_start sub_805C260
-sub_805C260: @ 805C260
- push {lr}
- movs r0, 0x9F
- movs r1, 0
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C260
-
- thumb_func_start sub_805C270
-sub_805C270: @ 805C270
- push {r4,lr}
- ldr r4, _0805C2AC @ =gPlayerAvatar
- ldrb r0, [r4, 0x3]
- cmp r0, 0x2
- beq _0805C27E
- cmp r0, 0
- bne _0805C2A6
-_0805C27E:
- bl player_should_look_direction_be_enforced_upon_movement
- lsls r0, 24
- cmp r0, 0
- beq _0805C2A6
- ldr r2, _0805C2B0 @ =gObjectEvents
- ldrb r1, [r4, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetFaceDirectionMovementAction
- lsls r0, 24
- lsrs r0, 24
- bl sub_805BFFC
-_0805C2A6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C2AC: .4byte gPlayerAvatar
-_0805C2B0: .4byte gObjectEvents
- thumb_func_end sub_805C270
-
- thumb_func_start sub_805C2B4
-sub_805C2B4: @ 805C2B4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_80640E4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C2B4
-
- thumb_func_start sub_805C2CC
-sub_805C2CC: @ 805C2CC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _0805C308 @ =gUnknown_835B764
- ldr r0, [r1]
- cmp r0, 0
- beq _0805C302
- adds r4, r1, 0
- adds r7, r4, 0
- movs r5, 0
-_0805C2E0:
- ldr r1, [r4]
- adds r0, r6, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- beq _0805C2F8
- adds r0, r7, 0x4
- adds r0, r5, r0
- ldr r0, [r0]
- bl _call_via_r0
-_0805C2F8:
- adds r4, 0x8
- adds r5, 0x8
- ldr r0, [r4]
- cmp r0, 0
- bne _0805C2E0
-_0805C302:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C308: .4byte gUnknown_835B764
- thumb_func_end sub_805C2CC
-
- thumb_func_start sub_805C30C
-sub_805C30C: @ 805C30C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_80642F4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C30C
-
- thumb_func_start sub_805C324
-sub_805C324: @ 805C324
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8064320
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C324
-
- thumb_func_start sub_805C33C
-sub_805C33C: @ 805C33C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_806434C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C33C
-
- thumb_func_start sub_805C354
-sub_805C354: @ 805C354
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1C
- bl PlaySE
- adds r0, r4, 0
- bl sub_8064378
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C354
-
- thumb_func_start sub_805C378
-sub_805C378: @ 805C378
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1C
- bl PlaySE
- adds r0, r4, 0
- bl sub_80643A4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C378
-
- thumb_func_start sub_805C39C
-sub_805C39C: @ 805C39C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1C
- bl PlaySE
- adds r0, r4, 0
- bl sub_80643D0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x8
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C39C
-
- thumb_func_start sub_805C3C0
-sub_805C3C0: @ 805C3C0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1C
- bl PlaySE
- adds r0, r4, 0
- bl sub_8064168
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C3C0
-
- thumb_func_start sub_805C3E4
-sub_805C3E4: @ 805C3E4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x7
- bl PlaySE
- adds r0, r4, 0
- bl sub_80643FC
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C3E4
-
- thumb_func_start sub_805C408
-sub_805C408: @ 805C408
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8064428
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C408
-
- thumb_func_start sub_805C420
-sub_805C420: @ 805C420
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8064454
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_805C024
- pop {r0}
- bx r0
- thumb_func_end sub_805C420
-
- thumb_func_start sub_805C438
-sub_805C438: @ 805C438
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- ldr r2, _0805C4E8 @ =gObjectEvents
- ldr r0, _0805C4EC @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x1E]
- ldr r1, _0805C4F0 @ =gUnknown_835B864
- subs r0, r5, 0x1
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _0805C4DE
- cmp r5, 0x3
- bne _0805C484
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6D
- lsls r0, 24
- cmp r0, 0
- bne _0805C4DE
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6F
- lsls r0, 24
- cmp r0, 0
- bne _0805C4DE
-_0805C484:
- cmp r5, 0x4
- bne _0805C4A0
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6C
- lsls r0, 24
- cmp r0, 0
- bne _0805C4DE
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6E
- lsls r0, 24
- cmp r0, 0
- bne _0805C4DE
-_0805C4A0:
- cmp r6, 0x2
- bne _0805C4D8
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- movs r0, 0x2
- mov r1, sp
- adds r2, r4, 0
- bl MoveCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsWarpDoor
- lsls r0, 24
- cmp r0, 0
- bne _0805C4DE
-_0805C4D8:
- movs r0, 0x7
- bl PlaySE
-_0805C4DE:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C4E8: .4byte gObjectEvents
-_0805C4EC: .4byte gPlayerAvatar
-_0805C4F0: .4byte gUnknown_835B864
- thumb_func_end sub_805C438
-
- thumb_func_start GetXYCoordsOneStepInFrontOfPlayer
-GetXYCoordsOneStepInFrontOfPlayer: @ 805C4F4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r3, _0805C530 @ =gObjectEvents
- ldr r2, _0805C534 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x10]
- strh r0, [r4]
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x12]
- strh r0, [r5]
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- adds r2, r5, 0
- bl MoveCoords
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C530: .4byte gObjectEvents
-_0805C534: .4byte gPlayerAvatar
- thumb_func_end GetXYCoordsOneStepInFrontOfPlayer
-
- thumb_func_start PlayerGetDestCoords
-PlayerGetDestCoords: @ 805C538
- push {r4,r5,lr}
- ldr r5, _0805C560 @ =gObjectEvents
- ldr r4, _0805C564 @ =gPlayerAvatar
- ldrb r3, [r4, 0x5]
- lsls r2, r3, 3
- adds r2, r3
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x10]
- strh r2, [r0]
- ldrb r2, [r4, 0x5]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- ldrh r0, [r0, 0x12]
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C560: .4byte gObjectEvents
-_0805C564: .4byte gPlayerAvatar
- thumb_func_end PlayerGetDestCoords
-
- thumb_func_start player_get_pos_including_state_based_drift
-player_get_pos_including_state_based_drift: @ 805C568
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, _0805C5BC @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805C5C0 @ =gObjectEvents
- adds r3, r0, r1
- ldrb r1, [r3]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0x40
- beq _0805C588
- b _0805C6B0
-_0805C588:
- ldr r2, _0805C5C4 @ =gSprites
- ldrb r1, [r3, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x32
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _0805C59E
- b _0805C6B0
-_0805C59E:
- ldrh r0, [r3, 0x10]
- strh r0, [r4]
- ldrh r0, [r3, 0x12]
- strh r0, [r5]
- ldrb r0, [r3, 0x1C]
- subs r0, 0x10
- cmp r0, 0x30
- bls _0805C5B0
- b _0805C6B0
-_0805C5B0:
- lsls r0, 2
- ldr r1, _0805C5C8 @ =_0805C5CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805C5BC: .4byte gPlayerAvatar
-_0805C5C0: .4byte gObjectEvents
-_0805C5C4: .4byte gSprites
-_0805C5C8: .4byte _0805C5CC
- .align 2, 0
-_0805C5CC:
- .4byte _0805C690
- .4byte _0805C696
- .4byte _0805C6A0
- .4byte _0805C6A6
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C6B0
- .4byte _0805C690
- .4byte _0805C696
- .4byte _0805C6A0
- .4byte _0805C6A6
-_0805C690:
- ldrh r0, [r5]
- adds r0, 0x1
- b _0805C69A
-_0805C696:
- ldrh r0, [r5]
- subs r0, 0x1
-_0805C69A:
- strh r0, [r5]
- movs r0, 0x1
- b _0805C6BC
-_0805C6A0:
- ldrh r0, [r4]
- subs r0, 0x1
- b _0805C6AA
-_0805C6A6:
- ldrh r0, [r4]
- adds r0, 0x1
-_0805C6AA:
- strh r0, [r4]
- movs r0, 0x1
- b _0805C6BC
-_0805C6B0:
- movs r1, 0x1
- negs r1, r1
- adds r0, r1, 0
- strh r0, [r4]
- strh r0, [r5]
- movs r0, 0
-_0805C6BC:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end player_get_pos_including_state_based_drift
-
- thumb_func_start GetPlayerFacingDirection
-GetPlayerFacingDirection: @ 805C6C4
- ldr r2, _0805C6DC @ =gObjectEvents
- ldr r0, _0805C6E0 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bx lr
- .align 2, 0
-_0805C6DC: .4byte gObjectEvents
-_0805C6E0: .4byte gPlayerAvatar
- thumb_func_end GetPlayerFacingDirection
-
- thumb_func_start GetPlayerMovementDirection
-GetPlayerMovementDirection: @ 805C6E4
- ldr r2, _0805C6F8 @ =gObjectEvents
- ldr r0, _0805C6FC @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x18]
- lsrs r0, 4
- bx lr
- .align 2, 0
-_0805C6F8: .4byte gObjectEvents
-_0805C6FC: .4byte gPlayerAvatar
- thumb_func_end GetPlayerMovementDirection
-
- thumb_func_start PlayerGetZCoord
-PlayerGetZCoord: @ 805C700
- ldr r2, _0805C714 @ =gObjectEvents
- ldr r0, _0805C718 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- bx lr
- .align 2, 0
-_0805C714: .4byte gObjectEvents
-_0805C718: .4byte gPlayerAvatar
- thumb_func_end PlayerGetZCoord
-
- thumb_func_start sub_805C71C
-sub_805C71C: @ 805C71C
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldr r0, _0805C744 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805C748 @ =gObjectEvents
- adds r0, r1
- lsls r3, 16
- asrs r3, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r3, 0
- bl MoveObjectEventToMapCoords
- pop {r0}
- bx r0
- .align 2, 0
-_0805C744: .4byte gPlayerAvatar
-_0805C748: .4byte gObjectEvents
- thumb_func_end sub_805C71C
-
- thumb_func_start TestPlayerAvatarFlags
-TestPlayerAvatarFlags: @ 805C74C
- ldr r1, _0805C758 @ =gPlayerAvatar
- ldrb r1, [r1]
- ands r1, r0
- adds r0, r1, 0
- bx lr
- .align 2, 0
-_0805C758: .4byte gPlayerAvatar
- thumb_func_end TestPlayerAvatarFlags
-
- thumb_func_start sub_805C75C
-sub_805C75C: @ 805C75C
- ldr r0, _0805C764 @ =gPlayerAvatar
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0805C764: .4byte gPlayerAvatar
- thumb_func_end sub_805C75C
-
- thumb_func_start GetPlayerAvatarObjectId
-GetPlayerAvatarObjectId: @ 805C768
- ldr r0, _0805C770 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- bx lr
- .align 2, 0
-_0805C770: .4byte gPlayerAvatar
- thumb_func_end GetPlayerAvatarObjectId
-
- thumb_func_start sub_805C774
-sub_805C774: @ 805C774
- push {lr}
- bl ForcedMovement_None
- pop {r0}
- bx r0
- thumb_func_end sub_805C774
-
- thumb_func_start sub_805C780
-sub_805C780: @ 805C780
- push {r4,lr}
- ldr r0, _0805C7C0 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805C7C4 @ =gObjectEvents
- adds r4, r0
- adds r0, r4, 0
- bl npc_clear_strange_bits
- ldrb r1, [r4, 0x18]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl SetObjectEventDirection
- movs r0, 0x6
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0805C7B8
- bl Bike_HandleBumpySlopeJump
- movs r0, 0
- bl Bike_UpdateBikeCounterSpeed
-_0805C7B8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805C7C0: .4byte gPlayerAvatar
-_0805C7C4: .4byte gObjectEvents
- thumb_func_end sub_805C780
-
- thumb_func_start sub_805C7C8
-sub_805C7C8: @ 805C7C8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- bl GetPlayerAvatarGraphicsIdByStateIdAndGender
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_805C7C8
-
- thumb_func_start GetPlayerAvatarGraphicsIdByStateIdAndGender
-GetPlayerAvatarGraphicsIdByStateIdAndGender: @ 805C7E0
- lsls r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _0805C7F4 @ =gUnknown_835B874
- lsrs r0, 23
- adds r1, r0
- adds r1, r2
- ldrb r0, [r1]
- bx lr
- .align 2, 0
-_0805C7F4: .4byte gUnknown_835B874
- thumb_func_end GetPlayerAvatarGraphicsIdByStateIdAndGender
-
- thumb_func_start GetHoennLinkPartnerGraphicsIdByGender
-GetHoennLinkPartnerGraphicsIdByGender: @ 805C7F8
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0805C804 @ =gUnknown_835B880
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0805C804: .4byte gUnknown_835B880
- thumb_func_end GetHoennLinkPartnerGraphicsIdByGender
-
- thumb_func_start GetPlayerAvatarGraphicsIdByStateId
-GetPlayerAvatarGraphicsIdByStateId: @ 805C808
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0805C820 @ =gPlayerAvatar
- ldrb r1, [r1, 0x7]
- bl GetPlayerAvatarGraphicsIdByStateIdAndGender
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805C820: .4byte gPlayerAvatar
- thumb_func_end GetPlayerAvatarGraphicsIdByStateId
-
- thumb_func_start GetPlayerAvatarGenderByGraphicsId
-GetPlayerAvatarGenderByGraphicsId: @ 805C824
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xB
- bgt _0805C836
- cmp r0, 0x7
- blt _0805C836
- movs r0, 0x1
- b _0805C838
-_0805C836:
- movs r0, 0
-_0805C838:
- pop {r1}
- bx r1
- thumb_func_end GetPlayerAvatarGenderByGraphicsId
-
- thumb_func_start PartyHasMonWithSurf
-PartyHasMonWithSurf: @ 805C83C
- push {r4,r5,lr}
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- bne _0805C880
- movs r5, 0
- b _0805C866
-_0805C84E:
- adds r0, r4, 0
- movs r1, 0x39
- bl MonKnowsMove
- lsls r0, 24
- cmp r0, 0
- beq _0805C860
- movs r0, 0x1
- b _0805C882
-_0805C860:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0805C866:
- cmp r5, 0x5
- bhi _0805C880
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0805C888 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- bne _0805C84E
-_0805C880:
- movs r0, 0
-_0805C882:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805C888: .4byte gPlayerParty
- thumb_func_end PartyHasMonWithSurf
-
- thumb_func_start IsPlayerSurfingNorth
-IsPlayerSurfingNorth: @ 805C88C
- push {lr}
- bl GetPlayerMovementDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0805C8AA
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0805C8AA
- movs r0, 0x1
- b _0805C8AC
-_0805C8AA:
- movs r0, 0
-_0805C8AC:
- pop {r1}
- bx r1
- thumb_func_end IsPlayerSurfingNorth
-
- thumb_func_start IsPlayerFacingSurfableFishableWater
-IsPlayerFacingSurfableFishableWater: @ 805C8B0
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _0805C924 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805C928 @ =gObjectEvents
- adds r4, r0
- ldrh r1, [r4, 0x10]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r4, 0x12]
- mov r5, sp
- adds r5, 0x2
- strh r0, [r5]
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- mov r1, sp
- adds r2, r5, 0
- bl MoveCoords
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- ldrb r3, [r4, 0x18]
- lsls r3, 28
- lsrs r3, 28
- adds r0, r4, 0
- bl GetCollisionAtCoords
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0805C92C
- bl PlayerGetZCoord
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0805C92C
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MetatileAtCoordsIsWaterTile
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0805C92C
- movs r0, 0x1
- b _0805C92E
- .align 2, 0
-_0805C924: .4byte gPlayerAvatar
-_0805C928: .4byte gObjectEvents
-_0805C92C:
- movs r0, 0
-_0805C92E:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end IsPlayerFacingSurfableFishableWater
-
- thumb_func_start MetatileAtCoordsIsWaterTile
-MetatileAtCoordsIsWaterTile: @ 805C938
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x1
- bl MapGridGetMetatileAttributeAt
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl TestMetatileAttributeBit
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end MetatileAtCoordsIsWaterTile
-
- thumb_func_start ClearPlayerAvatarInfo
-ClearPlayerAvatarInfo: @ 805C95C
- push {lr}
- ldr r0, _0805C96C @ =gPlayerAvatar
- movs r1, 0
- movs r2, 0x20
- bl memset
- pop {r0}
- bx r0
- .align 2, 0
-_0805C96C: .4byte gPlayerAvatar
- thumb_func_end ClearPlayerAvatarInfo
-
- thumb_func_start SetPlayerAvatarStateMask
-SetPlayerAvatarStateMask: @ 805C970
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0805C984 @ =gPlayerAvatar
- ldrb r2, [r3]
- movs r1, 0xE0
- ands r1, r2
- orrs r0, r1
- strb r0, [r3]
- bx lr
- .align 2, 0
-_0805C984: .4byte gPlayerAvatar
- thumb_func_end SetPlayerAvatarStateMask
-
- thumb_func_start GetPlayerAvatarStateTransitionByGraphicsId
-GetPlayerAvatarStateTransitionByGraphicsId: @ 805C988
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- ldr r3, _0805C9B0 @ =gUnknown_835B882
- lsls r0, r1, 1
- adds r0, r1
- lsls r4, r0, 1
- adds r6, r3, 0x1
-_0805C99E:
- lsls r0, r2, 1
- adds r1, r0, r4
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, r5
- bne _0805C9B4
- adds r0, r1, r6
- ldrb r0, [r0]
- b _0805C9C0
- .align 2, 0
-_0805C9B0: .4byte gUnknown_835B882
-_0805C9B4:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _0805C99E
- movs r0, 0x1
-_0805C9C0:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetPlayerAvatarStateTransitionByGraphicsId
-
- thumb_func_start GetPlayerAvatarGraphicsIdByCurrentState
-GetPlayerAvatarGraphicsIdByCurrentState: @ 805C9C8
- push {r4-r6,lr}
- ldr r0, _0805C9F0 @ =gPlayerAvatar
- ldrb r5, [r0]
- movs r2, 0
- ldr r3, _0805C9F4 @ =gUnknown_835B882
- ldrb r1, [r0, 0x7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r4, r0, 1
- adds r6, r3, 0x1
-_0805C9DC:
- lsls r0, r2, 1
- adds r1, r0, r4
- adds r0, r1, r6
- ldrb r0, [r0]
- ands r0, r5
- cmp r0, 0
- beq _0805C9F8
- adds r0, r1, r3
- ldrb r0, [r0]
- b _0805CA04
- .align 2, 0
-_0805C9F0: .4byte gPlayerAvatar
-_0805C9F4: .4byte gUnknown_835B882
-_0805C9F8:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _0805C9DC
- movs r0, 0
-_0805CA04:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetPlayerAvatarGraphicsIdByCurrentState
-
- thumb_func_start SetPlayerAvatarExtraStateTransition
-SetPlayerAvatarExtraStateTransition: @ 805CA0C
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _0805CA38 @ =gPlayerAvatar
- ldrb r1, [r5, 0x7]
- bl GetPlayerAvatarStateTransitionByGraphicsId
- lsls r0, 24
- lsrs r0, 24
- orrs r0, r4
- ldrb r1, [r5, 0x1]
- orrs r0, r1
- strb r0, [r5, 0x1]
- bl DoPlayerAvatarTransition
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CA38: .4byte gPlayerAvatar
- thumb_func_end SetPlayerAvatarExtraStateTransition
-
- thumb_func_start InitPlayerAvatar
-InitPlayerAvatar: @ 805CA3C
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x18
- adds r4, r0, 0
- adds r5, r1, 0
- mov r9, r2
- mov r8, r3
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- mov r1, r8
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- mov r1, sp
- movs r0, 0xFF
- strb r0, [r1]
- movs r0, 0
- mov r1, r8
- bl GetPlayerAvatarGraphicsIdByStateIdAndGender
- mov r1, sp
- movs r3, 0
- strb r0, [r1, 0x1]
- mov r0, sp
- lsls r4, 16
- asrs r4, 16
- subs r4, 0x7
- movs r6, 0
- strh r4, [r0, 0x4]
- lsls r5, 16
- asrs r5, 16
- subs r5, 0x7
- strh r5, [r0, 0x6]
- strb r6, [r0, 0x8]
- movs r0, 0xB
- strb r0, [r1, 0x9]
- mov r2, sp
- ldrb r1, [r2, 0xA]
- subs r0, 0x1B
- ands r0, r1
- strb r0, [r2, 0xA]
- mov r0, sp
- strb r6, [r0, 0xA]
- strh r3, [r0, 0xC]
- strh r3, [r0, 0xE]
- str r3, [sp, 0x10]
- strh r3, [r0, 0x14]
- bl SpawnSpecialObjectEvent
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 3
- adds r4, r5
- lsls r4, 2
- ldr r0, _0805CAFC @ =gObjectEvents
- adds r4, r0
- ldrb r0, [r4, 0x2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x2]
- bl CreateWarpArrowSprite
- strb r0, [r4, 0x1B]
- adds r0, r4, 0
- mov r1, r9
- bl ObjectEventTurn
- bl ClearPlayerAvatarInfo
- ldr r0, _0805CB00 @ =gPlayerAvatar
- strb r6, [r0, 0x2]
- strb r6, [r0, 0x3]
- strb r5, [r0, 0x5]
- ldrb r1, [r4, 0x4]
- strb r1, [r0, 0x4]
- mov r1, r8
- strb r1, [r0, 0x7]
- movs r0, 0x21
- bl SetPlayerAvatarStateMask
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805CAFC: .4byte gObjectEvents
-_0805CB00: .4byte gPlayerAvatar
- thumb_func_end InitPlayerAvatar
-
- 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 task_add_bump_boulder
-task_add_bump_boulder: @ 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 task_add_bump_boulder
-
- 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 sub_805CE80
-sub_805CE80: @ 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 sub_805CE80
-
- 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 sub_805CF58
-sub_805CF58: @ 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 sub_805CF58
-
- 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 sub_805D0F8
-sub_805D0F8: @ 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 sub_805D0F8
-
- 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 sub_805D0F8
-_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
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0805D230 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D234 @ =gObjectEvents
- adds r5, r0, r1
- adds r0, r5, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _0805D200
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D228
-_0805D200:
- ldrb r0, [r5, 0x1A]
- movs r1, 0x2
- bl sub_80DC44C
- ldr r0, _0805D238 @ =gTasks
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r0
- ldrb r0, [r4, 0x8]
- bl sub_80641EC
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_805C06C
- ldr r0, _0805D23C @ =sub_805D240
- str r0, [r4]
-_0805D228:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D230: .4byte gPlayerAvatar
-_0805D234: .4byte gObjectEvents
-_0805D238: .4byte gTasks
-_0805D23C: .4byte sub_805D240
- thumb_func_end taskFF_0805D1D4
-
- thumb_func_start sub_805D240
-sub_805D240: @ 805D240
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _0805D2B4 @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D2B8 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D2AE
- movs r0, 0
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805C06C
- movs r0, 0
- strb r0, [r6, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- ldrb r1, [r4, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D2BC @ =gSprites
- adds r0, r1
- bl DestroySprite
- adds r0, r5, 0
- bl DestroyTask
- bl SetHelpContextForMap
-_0805D2AE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D2B4: .4byte gPlayerAvatar
-_0805D2B8: .4byte gObjectEvents
-_0805D2BC: .4byte gSprites
- thumb_func_end sub_805D240
-
- thumb_func_start sub_805D2C0
-sub_805D2C0: @ 805D2C0
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _0805D2FC @ =sub_805D304
- adds r0, r5, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0805D300 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x26]
- bl _call_via_r5
- movs r0, 0x2
- bl sub_8150474
- cmp r0, 0x1
- bne _0805D2F4
- bl sub_8112C9C
-_0805D2F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D2FC: .4byte sub_805D304
-_0805D300: .4byte gTasks
- thumb_func_end sub_805D2C0
-
- thumb_func_start sub_805D304
-sub_805D304: @ 805D304
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0805D334 @ =gUnknown_835B8CC
- ldr r2, _0805D338 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0805D316:
- 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 _0805D316
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D334: .4byte gUnknown_835B8CC
-_0805D338: .4byte gTasks
- thumb_func_end sub_805D304
-
- thumb_func_start sub_805D33C
-sub_805D33C: @ 805D33C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _0805D358 @ =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
-_0805D358: .4byte gPlayerAvatar
- thumb_func_end sub_805D33C
-
- thumb_func_start fish1
-fish1: @ 805D35C
- push {r4-r6,lr}
- sub sp, 0x10
- adds r5, r0, 0
- ldr r1, _0805D3E4 @ =gUnknown_835B90C
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- add r4, sp, 0x8
- ldr r1, _0805D3E8 @ =gUnknown_835B912
- adds r0, r4, 0
- movs r2, 0x6
- bl memcpy
- movs r0, 0
- strh r0, [r5, 0x20]
- bl Random
- movs r2, 0x26
- ldrsh r1, [r5, r2]
- lsls r1, 1
- mov r2, sp
- adds r6, r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r4, r1
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl __modsi3
- ldrh r1, [r6]
- adds r1, r0
- strh r1, [r5, 0x22]
- ldr r3, _0805D3EC @ =gObjectEvents
- ldr r2, _0805D3F0 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x5]
- strh r0, [r5, 0x24]
- ldrb r0, [r2, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- adds r4, r3
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfActive
- ldrb r0, [r4, 0x1]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl sub_805CC2C
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D3E4: .4byte gUnknown_835B90C
-_0805D3E8: .4byte gUnknown_835B912
-_0805D3EC: .4byte gObjectEvents
-_0805D3F0: .4byte gPlayerAvatar
- thumb_func_end fish1
-
- thumb_func_start fish2
-fish2: @ 805D3F4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0805D428 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D42C @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3B
- ble _0805D41E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0805D41E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D428: .4byte gPlayerAvatar
-_0805D42C: .4byte gSprites
- thumb_func_end fish2
-
- thumb_func_start sub_805D430
-sub_805D430: @ 805D430
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- movs r1, 0x1
- bl sub_80F7768
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x8]
- strh r1, [r4, 0xA]
- strh r1, [r4, 0xC]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- adds r1, r0, 0
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0805D468
- adds r0, r1, 0x4
- strh r0, [r4, 0xE]
-_0805D468:
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0x9
- ble _0805D474
- movs r0, 0xA
- strh r0, [r4, 0xE]
-_0805D474:
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805D430
-
- thumb_func_start sub_805D47C
-sub_805D47C: @ 805D47C
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldr r0, _0805D4CC @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D4D0 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0805D4F8
- strh r5, [r4, 0xA]
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _0805D4D4
- ldrh r0, [r4, 0x8]
- adds r1, r0, 0x1
- strh r1, [r4, 0x8]
- ldrh r2, [r4, 0x20]
- movs r3, 0x20
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _0805D4C6
- adds r0, r1, 0x1
- strh r0, [r4, 0x8]
-_0805D4C6:
- adds r0, r2, 0x1
- strh r0, [r4, 0x20]
- b _0805D4F8
- .align 2, 0
-_0805D4CC: .4byte gPlayerAvatar
-_0805D4D0: .4byte gSprites
-_0805D4D4:
- ldr r2, _0805D504 @ =gUnknown_835B918
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- lsls r3, r0, 1
- adds r3, r0
- lsls r3, 26
- lsrs r3, 24
- movs r0, 0x1
- str r0, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- bl AddTextPrinterParameterized
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
-_0805D4F8:
- movs r0, 0
- add sp, 0xC
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D504: .4byte gUnknown_835B918
- thumb_func_end sub_805D47C
-
- thumb_func_start sub_805D508
-sub_805D508: @ 805D508
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r6, _0805D540 @ =gPlayerAvatar
- ldrb r1, [r6, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0805D544 @ =gSprites
- adds r0, r5
- bl sub_805D9C4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl DoesCurrentMapHaveFishingMons
- lsls r0, 24
- cmp r0, 0
- beq _0805D53A
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _0805D548
-_0805D53A:
- movs r0, 0xB
- strh r0, [r4, 0x8]
- b _0805D56A
- .align 2, 0
-_0805D540: .4byte gPlayerAvatar
-_0805D544: .4byte gSprites
-_0805D548:
- ldrb r0, [r6, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl sub_8063510
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_0805D56A:
- movs r0, 0x1
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_805D508
-
- thumb_func_start sub_805D574
-sub_805D574: @ 805D574
- ldrh r1, [r0, 0x8]
- adds r1, 0x3
- strh r1, [r0, 0x8]
- movs r0, 0
- bx lr
- thumb_func_end sub_805D574
-
- thumb_func_start sub_805D580
-sub_805D580: @ 805D580
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _0805D5C0 @ =gUnknown_835B91A
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- ldr r0, _0805D5C4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D5C8 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r1, [r4, 0xA]
- adds r1, 0x1
- strh r1, [r4, 0xA]
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- lsls r0, 1
- add r0, sp
- lsls r1, 16
- asrs r1, 16
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r1, r0
- blt _0805D5CC
- movs r0, 0xC
- b _0805D5DC
- .align 2, 0
-_0805D5C0: .4byte gUnknown_835B91A
-_0805D5C4: .4byte gPlayerAvatar
-_0805D5C8: .4byte gSprites
-_0805D5CC:
- ldr r0, _0805D5E8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0805D5DE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
-_0805D5DC:
- strh r0, [r4, 0x8]
-_0805D5DE:
- movs r0, 0
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D5E8: .4byte gMain
- thumb_func_end sub_805D580
-
- thumb_func_start sub_805D5EC
-sub_805D5EC: @ 805D5EC
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldr r1, _0805D660 @ =gUnknown_835B920
- mov r0, sp
- movs r2, 0xC
- bl memcpy
- ldr r0, _0805D664 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D668 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _0805D650
- cmp r1, 0x1
- bgt _0805D654
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- movs r3, 0x20
- ldrsh r2, [r4, r3]
- lsls r2, 1
- movs r3, 0x26
- ldrsh r1, [r4, r3]
- lsls r1, 2
- adds r2, r1
- mov r3, sp
- adds r1, r3, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- ble _0805D654
-_0805D650:
- movs r0, 0x3
- strh r0, [r4, 0x8]
-_0805D654:
- movs r0, 0
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D660: .4byte gUnknown_835B920
-_0805D664: .4byte gPlayerAvatar
-_0805D668: .4byte gSprites
- thumb_func_end sub_805D5EC
-
- thumb_func_start sub_805D66C
-sub_805D66C: @ 805D66C
- push {r4,r5,lr}
- sub sp, 0x10
- adds r4, r0, 0
- ldr r0, _0805D6BC @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D6C0 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _0805D6C4 @ =gUnknown_841D14E
- movs r5, 0
- str r5, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- strh r5, [r4, 0xA]
- movs r0, 0
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D6BC: .4byte gPlayerAvatar
-_0805D6C0: .4byte gSprites
-_0805D6C4: .4byte gUnknown_841D14E
- thumb_func_end sub_805D66C
-
- thumb_func_start sub_805D6C8
-sub_805D6C8: @ 805D6C8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0805D6EA
- ldr r0, _0805D774 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D778 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
-_0805D6EA:
- bl RunTextPrinters
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0805D788
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- bne _0805D780
- ldr r7, _0805D774 @ =gPlayerAvatar
- ldrb r0, [r7, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805D77C @ =gObjectEvents
- mov r8, r0
- add r4, r8
- ldrh r1, [r5, 0x24]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r4, 0x18]
- lsrs r1, 4
- adds r0, r4, 0
- bl ObjectEventTurn
- ldrb r1, [r7]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805D748
- ldrb r0, [r7, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- add r1, r8
- ldrb r0, [r1, 0x1A]
- movs r1, 0
- movs r2, 0
- bl sub_80DC4A4
-_0805D748:
- ldr r2, _0805D778 @ =gSprites
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x24]
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x26]
- movs r0, 0
- movs r1, 0x1
- bl ClearDialogWindowAndFrame
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _0805D7AA
- .align 2, 0
-_0805D774: .4byte gPlayerAvatar
-_0805D778: .4byte gSprites
-_0805D77C: .4byte gObjectEvents
-_0805D780:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _0805D7AA
-_0805D788:
- ldr r1, _0805D7B8 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- ldrh r0, [r5, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl FishingWildEncounter
- ldr r0, _0805D7BC @ =sub_805D304
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805D7AA:
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D7B8: .4byte gPlayerAvatar
-_0805D7BC: .4byte sub_805D304
- thumb_func_end sub_805D6C8
-
- thumb_func_start sub_805D7C0
-sub_805D7C0: @ 805D7C0
- push {r4-r6,lr}
- sub sp, 0x10
- adds r6, r0, 0
- ldr r4, _0805D82C @ =gPlayerAvatar
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0805D830 @ =gSprites
- adds r0, r5
- bl sub_805D9C4
- ldrb r0, [r4, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFishingBiteDirectionAnimNum
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _0805D834 @ =gUnknown_841D169
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized2
- movs r0, 0xD
- strh r0, [r6, 0x8]
- movs r0, 0x1
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D82C: .4byte gPlayerAvatar
-_0805D830: .4byte gSprites
-_0805D834: .4byte gUnknown_841D169
- thumb_func_end sub_805D7C0
-
- thumb_func_start sub_805D838
-sub_805D838: @ 805D838
- push {r4-r6,lr}
- sub sp, 0x10
- adds r6, r0, 0
- ldr r4, _0805D8A0 @ =gPlayerAvatar
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0805D8A4 @ =gSprites
- adds r0, r5
- bl sub_805D9C4
- ldrb r0, [r4, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFishingBiteDirectionAnimNum
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- ldr r2, _0805D8A8 @ =gUnknown_841D17E
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized2
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0x1
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D8A0: .4byte gPlayerAvatar
-_0805D8A4: .4byte gSprites
-_0805D8A8: .4byte gUnknown_841D17E
- thumb_func_end sub_805D838
-
- thumb_func_start sub_805D8AC
-sub_805D8AC: @ 805D8AC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0805D8D0 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D8D4 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D8D0: .4byte gPlayerAvatar
-_0805D8D4: .4byte gSprites
- thumb_func_end sub_805D8AC
-
- thumb_func_start sub_805D8D8
-sub_805D8D8: @ 805D8D8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldr r5, _0805D974 @ =gPlayerAvatar
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r7, _0805D978 @ =gSprites
- adds r0, r7
- bl sub_805D9C4
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- cmp r0, 0
- bge _0805D968
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805D97C @ =gObjectEvents
- mov r8, r0
- add r4, r8
- ldrh r1, [r6, 0x24]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r4, 0x18]
- lsrs r1, 4
- adds r0, r4, 0
- bl ObjectEventTurn
- ldrb r1, [r5]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805D948
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- add r1, r8
- ldrb r0, [r1, 0x1A]
- movs r1, 0
- movs r2, 0
- bl sub_80DC4A4
-_0805D948:
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r2, 0
- strh r2, [r0, 0x24]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- strh r2, [r0, 0x26]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0805D968:
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D974: .4byte gPlayerAvatar
-_0805D978: .4byte gSprites
-_0805D97C: .4byte gObjectEvents
- thumb_func_end sub_805D8D8
-
- thumb_func_start sub_805D980
-sub_805D980: @ 805D980
- push {lr}
- bl RunTextPrinters
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _0805D9B6
- ldr r0, _0805D9BC @ =gPlayerAvatar
- strb r1, [r0, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- movs r0, 0
- movs r1, 0x1
- bl ClearDialogWindowAndFrame
- ldr r0, _0805D9C0 @ =sub_805D304
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805D9B6:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0805D9BC: .4byte gPlayerAvatar
-_0805D9C0: .4byte sub_805D304
- thumb_func_end sub_805D980
-
- thumb_func_start sub_805D9C4
-sub_805D9C4: @ 805D9C4
- push {r4-r7,lr}
- adds r4, r0, 0
- bl AnimateSprite
- movs r0, 0
- strh r0, [r4, 0x24]
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x2B
- ldrb r5, [r0]
- movs r0, 0x2A
- adds r0, r4
- mov r12, r0
- ldrb r0, [r0]
- ldr r1, [r4, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r6, r5, 2
- adds r0, r6, r0
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r7, 0x1
- negs r7, r7
- cmp r0, r7
- beq _0805DA28
- adds r3, r4, 0
- adds r3, 0x2C
- ldrb r2, [r3]
- lsls r1, r2, 26
- lsrs r1, 26
- adds r1, 0x1
- movs r0, 0x3F
- ands r1, r0
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- mov r1, r12
- ldrb r0, [r1]
- ldr r1, [r4, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- adds r0, r6, r0
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, r7
- bne _0805DA2E
-_0805DA28:
- subs r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0805DA2E:
- adds r0, r4, 0
- adds r0, 0x2A
- ldrb r0, [r0]
- ldr r1, [r4, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r5, 2
- adds r0, r1
- ldrb r5, [r0]
- subs r0, r5, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0805DA60
- movs r0, 0x8
- strh r0, [r4, 0x24]
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0805DA60
- ldr r0, _0805DAA4 @ =0x0000fff8
- strh r0, [r4, 0x24]
-_0805DA60:
- cmp r5, 0x5
- bne _0805DA68
- ldr r0, _0805DAA4 @ =0x0000fff8
- strh r0, [r4, 0x26]
-_0805DA68:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0805DA78
- movs r0, 0x8
- strh r0, [r4, 0x26]
-_0805DA78:
- ldr r3, _0805DAA8 @ =gPlayerAvatar
- ldrb r1, [r3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805DA9C
- ldr r2, _0805DAAC @ =gObjectEvents
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1A]
- movs r1, 0x26
- ldrsh r2, [r4, r1]
- movs r1, 0x1
- bl sub_80DC4A4
-_0805DA9C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805DAA4: .4byte 0x0000fff8
-_0805DAA8: .4byte gPlayerAvatar
-_0805DAAC: .4byte gObjectEvents
- thumb_func_end sub_805D9C4
-
- thumb_func_start sub_805DAB0
-sub_805DAB0: @ 805DAB0
- push {r4,lr}
- ldr r4, _0805DACC @ =sub_805DB04
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805DACC: .4byte sub_805DB04
- thumb_func_end sub_805DAB0
-
- thumb_func_start sub_805DAD0
-sub_805DAD0: @ 805DAD0
- push {lr}
- ldr r0, _0805DAE0 @ =sub_805DB04
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805DAE0: .4byte sub_805DB04
- thumb_func_end sub_805DAD0
-
- thumb_func_start sub_805DAE4
-sub_805DAE4: @ 805DAE4
- ldr r1, _0805DAEC @ =gUnknown_2036E34
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0805DAEC: .4byte gUnknown_2036E34
- thumb_func_end sub_805DAE4
-
- thumb_func_start sub_805DAF0
-sub_805DAF0: @ 805DAF0
- push {lr}
- ldr r1, _0805DB00 @ =gUnknown_2036E34
- ldrb r0, [r1]
- cmp r0, 0
- bne _0805DAFC
- movs r0, 0x1
-_0805DAFC:
- pop {r1}
- bx r1
- .align 2, 0
-_0805DB00: .4byte gUnknown_2036E34
- thumb_func_end sub_805DAF0
-
- thumb_func_start sub_805DB04
-sub_805DB04: @ 805DB04
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- ldr r0, _0805DB48 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805DB4C @ =gObjectEvents
- adds r4, r0, r1
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805DB50 @ =gSprites
- adds r7, r0, r1
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _0805DB54 @ =gTasks+0x8
- adds r5, r0, r1
- movs r0, 0
- ldrsh r6, [r5, r0]
- cmp r6, 0x1
- beq _0805DBBA
- cmp r6, 0x1
- bgt _0805DB58
- cmp r6, 0
- beq _0805DB5E
- b _0805DBFA
- .align 2, 0
-_0805DB48: .4byte gPlayerAvatar
-_0805DB4C: .4byte gObjectEvents
-_0805DB50: .4byte gSprites
-_0805DB54: .4byte gTasks+0x8
-_0805DB58:
- cmp r6, 0x2
- beq _0805DBF4
- b _0805DBFA
-_0805DB5E:
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805DBFA
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl sub_805DAE4
- movs r1, 0
- mov r8, r1
- strh r6, [r5, 0x2]
- movs r0, 0x1
- strh r0, [r5, 0x4]
- ldrh r0, [r7, 0x26]
- ldrh r2, [r7, 0x22]
- adds r0, r2
- lsls r0, 4
- strh r0, [r5, 0x6]
- strh r6, [r7, 0x26]
- bl CameraObjectReset2
- ldrb r0, [r4, 0x3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4, 0x3]
- ldrb r1, [r7, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- strb r0, [r7, 0x5]
- adds r0, r7, 0
- adds r0, 0x43
- mov r1, r8
- strb r1, [r0]
- adds r2, r7, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0805DBBA:
- adds r1, r5, 0x2
- adds r0, r4, 0
- bl sub_805DDC8
- ldrh r0, [r5, 0x6]
- ldrh r1, [r5, 0x4]
- subs r0, r1
- strh r0, [r5, 0x6]
- adds r1, 0x3
- strh r1, [r5, 0x4]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r7, 0x22]
- movs r2, 0x22
- ldrsh r1, [r7, r2]
- ldr r0, _0805DBF0 @ =gTotalCameraPixelOffsetY
- movs r2, 0
- ldrsh r0, [r0, r2]
- adds r1, r0
- movs r0, 0x20
- negs r0, r0
- cmp r1, r0
- bge _0805DBFA
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0805DBFA
- .align 2, 0
-_0805DBF0: .4byte gTotalCameraPixelOffsetY
-_0805DBF4:
- adds r0, r2, 0
- bl DestroyTask
-_0805DBFA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_805DB04
-
- thumb_func_start sub_805DC04
-sub_805DC04: @ 805DC04
- push {r4,lr}
- ldr r4, _0805DC20 @ =sub_805DC38
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805DC20: .4byte sub_805DC38
- thumb_func_end sub_805DC04
-
- thumb_func_start sub_805DC24
-sub_805DC24: @ 805DC24
- push {lr}
- ldr r0, _0805DC34 @ =sub_805DC38
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805DC34: .4byte sub_805DC38
- thumb_func_end sub_805DC24
-
- thumb_func_start sub_805DC38
-sub_805DC38: @ 805DC38
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _0805DC80 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805DC84 @ =gObjectEvents
- adds r4, r0, r1
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805DC88 @ =gSprites
- adds r7, r0, r1
- mov r1, r8
- lsls r0, r1, 2
- add r0, r8
- lsls r0, 3
- ldr r1, _0805DC8C @ =gTasks+0x8
- adds r5, r0, r1
- movs r2, 0
- ldrsh r6, [r5, r2]
- cmp r6, 0x1
- beq _0805DD1A
- cmp r6, 0x1
- bgt _0805DC90
- cmp r6, 0
- beq _0805DC9A
- b _0805DDBA
- .align 2, 0
-_0805DC80: .4byte gPlayerAvatar
-_0805DC84: .4byte gObjectEvents
-_0805DC88: .4byte gSprites
-_0805DC8C: .4byte gTasks+0x8
-_0805DC90:
- cmp r6, 0x2
- beq _0805DD58
- cmp r6, 0x3
- beq _0805DD76
- b _0805DDBA
-_0805DC9A:
- bl sub_805DAF0
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- ldr r1, _0805DD54 @ =gUnknown_835B92C
- movs r3, 0xA
- ldrsh r0, [r5, r3]
- adds r0, r1
- ldrb r0, [r0]
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventForceSetHeldMovement
- movs r0, 0
- mov r9, r0
- strh r6, [r5, 0x2]
- movs r0, 0x74
- strh r0, [r5, 0x4]
- ldrh r0, [r7, 0x22]
- strh r0, [r5, 0x8]
- ldrb r0, [r7, 0x5]
- lsls r0, 28
- lsrs r0, 30
- strh r0, [r5, 0xC]
- movs r1, 0x43
- adds r1, r7
- mov r8, r1
- ldrb r0, [r1]
- strh r0, [r5, 0xE]
- ldrh r0, [r7, 0x26]
- adds r0, 0x20
- negs r0, r0
- lsls r0, 4
- strh r0, [r5, 0x6]
- strh r6, [r7, 0x26]
- bl CameraObjectReset2
- ldrb r0, [r4, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r4, 0x3]
- ldrb r1, [r7, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r7, 0x5]
- mov r3, r9
- mov r2, r8
- strb r3, [r2]
- adds r2, r7, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0805DD1A:
- adds r1, r5, 0x2
- adds r0, r4, 0
- bl sub_805DDC8
- ldrh r0, [r5, 0x4]
- ldrh r2, [r5, 0x6]
- adds r1, r0, r2
- strh r1, [r5, 0x6]
- subs r0, 0x3
- strh r0, [r5, 0x4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bgt _0805DD3A
- movs r0, 0x4
- strh r0, [r5, 0x4]
-_0805DD3A:
- ldrh r0, [r5, 0x6]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r7, 0x22]
- ldrh r2, [r5, 0x8]
- movs r3, 0x8
- ldrsh r1, [r5, r3]
- cmp r0, r1
- blt _0805DDBA
- strh r2, [r7, 0x22]
- movs r0, 0
- strh r0, [r5, 0x10]
- b _0805DD6E
- .align 2, 0
-_0805DD54: .4byte gUnknown_835B92C
-_0805DD58:
- adds r1, r5, 0x2
- adds r0, r4, 0
- bl sub_805DDC8
- ldrh r0, [r5, 0x10]
- adds r0, 0x1
- strh r0, [r5, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _0805DDBA
-_0805DD6E:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0805DDBA
-_0805DD76:
- movs r0, 0xA
- ldrsh r6, [r5, r0]
- adds r1, r5, 0x2
- adds r0, r4, 0
- bl sub_805DDC8
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- bne _0805DDBA
- ldrb r1, [r4, 0x3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x3]
- movs r0, 0x3
- ldrb r1, [r5, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r7, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r7, 0x5]
- ldrh r1, [r5, 0xE]
- adds r0, r7, 0
- adds r0, 0x43
- strb r1, [r0]
- bl CameraObjectReset1
- mov r0, r8
- bl DestroyTask
-_0805DDBA:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_805DC38
-
- thumb_func_start sub_805DDC8
-sub_805DDC8: @ 805DDC8
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- ldrh r1, [r6]
- movs r2, 0
- ldrsh r0, [r6, r2]
- cmp r0, 0x7
- bgt _0805DDE4
- adds r0, r1, 0x1
- strh r0, [r6]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _0805DE20
-_0805DDE4:
- adds r0, r5, 0
- bl ObjectEventCheckHeldMovementStatus
- lsls r0, 24
- cmp r0, 0
- beq _0805DE20
- ldr r4, _0805DE1C @ =gUnknown_835B92C
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r4
- ldrb r0, [r0]
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl ObjectEventForceSetHeldMovement
- movs r0, 0
- strh r0, [r6]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r4
- ldrb r0, [r0]
- b _0805DE26
- .align 2, 0
-_0805DE1C: .4byte gUnknown_835B92C
-_0805DE20:
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
-_0805DE26:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_805DDC8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index ba9b03930..f840e590a 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
@@ -2073,7 +2073,7 @@ _08055B94:
cmp r0, 0x1
beq _08055BD0
adds r0, r5, 0
- bl MetatileBehavior_IsCaveDoor
+ bl MetatileBehavior_IsNonAnimDoor
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -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
@@ -3291,7 +3291,7 @@ _080564B0:
ldrb r0, [r6, 0x2]
adds r1, r5, 0
adds r2, r4, 0
- bl sub_805B3E0
+ bl player_step
_080564BA:
bl RunQuestLogCB
add sp, 0x4
@@ -3472,7 +3472,7 @@ _08056618:
.align 2, 0
_08056628: .4byte gFieldCallback
_0805662C:
- bl sub_807DF64
+ bl FieldCB_UnionRoomWarp
_08056630:
ldr r1, _08056640 @ =gFieldCallback
movs r0, 0
@@ -7871,7 +7871,7 @@ sub_8058878: @ 8058878
lsls r1, 30
lsrs r1, 31
movs r0, 0
- bl sub_805C7C8
+ bl GetRivalAvatarGraphicsIdByStateIdAndGender
b _080588C6
.align 2, 0
_080588B4: .4byte gLinkPlayerObjectEvents
diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h
index f5a5173c6..f68ca9125 100644
--- a/berry_fix/payload/include/global.fieldmap.h
+++ b/berry_fix/payload/include/global.fieldmap.h
@@ -231,9 +231,9 @@ struct ObjectEventGraphicsInfo
#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4)
-#define PLAYER_AVATAR_FLAG_5 (1 << 5)
-#define PLAYER_AVATAR_FLAG_6 (1 << 6)
-#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+#define PLAYER_AVATAR_FLAG_FIELD_MOVE (1 << 5)
+#define PLAYER_AVATAR_FLAG_FISHING (1 << 6)
+#define PLAYER_AVATAR_FLAG_WATERING (1 << 7)
enum
{
diff --git a/common_syms/quest_log.txt b/common_syms/quest_log.txt
index cc7fbbfcf..c04d849ec 100644
--- a/common_syms/quest_log.txt
+++ b/common_syms/quest_log.txt
@@ -1,4 +1,4 @@
gUnknown_3005E88
-sNumQuestLogs
+sNumEventsInLogEntry
gUnknown_3005E90
-gUnknown_3005E94
+sCurQuestLogEntry
diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s
deleted file mode 100644
index 9ff7328c3..000000000
--- a/data/field_player_avatar.s
+++ /dev/null
@@ -1,153 +0,0 @@
-#include "constants/event_objects.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-gUnknown_835B764:: @ 835B764
- .4byte MetatileBehavior_IsUnknownMovement48, ForcedMovement_Slip
- .4byte MetatileBehavior_IsIce_2, ForcedMovement_Slip
- .4byte MetatileBehavior_IsWalkSouth, sub_805B750
- .4byte MetatileBehavior_IsWalkNorth, sub_805B768
- .4byte MetatileBehavior_IsWalkWest, sub_805B780
- .4byte MetatileBehavior_IsWalkEast, sub_805B798
- .4byte MetatileBehavior_IsSouthwardCurrent, sub_805B82C
- .4byte MetatileBehavior_IsNorthwardCurrent, sub_805B844
- .4byte MetatileBehavior_IsWestwardCurrent, sub_805B85C
- .4byte MetatileBehavior_IsEastwardCurrent, sub_805B874
- .4byte MetatileBehavior_UnusedIsSpinRight, sub_805B7B0
- .4byte MetatileBehavior_UnusedIsSpinLeft, sub_805B7CC
- .4byte MetatileBehavior_UnusedIsSpinUp, sub_805B7E8
- .4byte MetatileBehavior_UnusedIsSpinDown, sub_805B804
- .4byte MetatileBehavior_IsSlideSouth, ForcedMovement_SlideSouth
- .4byte MetatileBehavior_IsSlideNorth, ForcedMovement_SlideNorth
- .4byte MetatileBehavior_IsSlideWest, ForcedMovement_SlideWest
- .4byte MetatileBehavior_IsSlideEast, ForcedMovement_SlideEast
- .4byte MetatileBehavior_IsWaterfall, sub_805B82C
- .4byte MetatileBehavior_UnusedReturnFalse_7, sub_805B924
- .4byte MetatileBehavior_UnusedReturnFalse_8, sub_805B930
- .4byte NULL, ForcedMovement_None
-
-gUnknown_835B814:: @ 835B814
- .4byte PlayerNotOnBikeNotMoving
- .4byte sub_805B9C4
- .4byte sub_805B9D4
-
-gUnknown_835B820:: @ 835B820
- .byte 0x04, 0x04, 0x05, 0x06, 0x07
-
- .align 2
-gUnknown_835B828:: @ 835B828
- .4byte MetatileBehavior_ReturnFalse_14 // Related to Acro Bike
- .4byte MetatileBehavior_ReturnFalse_15 // Related to Acro Bike
- .4byte MetatileBehavior_ReturnFalse_16 // Related to Acro Bike
- .4byte MetatileBehavior_ReturnFalse_17 // Related to Acro Bike
- .4byte MetatileBehavior_ReturnFalse_18 // Related to Acro Bike
-
-gUnknown_835B83C:: @ 835B83C
- .byte 0x09, 0x0a, 0x0b, 0x0c, 0x0d
-
- .align 2
-gUnknown_835B844:: @ 835B844
- .4byte sub_805BE60
- .4byte sub_805BE74
- .4byte sub_805BE74
- .4byte sub_805BE90
- .4byte nullsub_23
- .4byte PlayerAvatarTransition_ReturnToField
- .4byte nullsub_22
- .4byte nullsub_22
-
-gUnknown_835B864:: @ 835B864
- .4byte MetatileBehavior_IsSouthArrowWarp
- .4byte MetatileBehavior_IsNorthArrowWarp
- .4byte MetatileBehavior_IsWestArrowWarp
- .4byte MetatileBehavior_IsEastArrowWarp
-
-gUnknown_835B874:: @ 835B874
- .byte OBJ_EVENT_GFX_RED_NORMAL, OBJ_EVENT_GFX_GREEN_NORMAL
- .byte OBJ_EVENT_GFX_RED_BIKE, OBJ_EVENT_GFX_GREEN_BIKE
- .byte OBJ_EVENT_GFX_RED_SURF, OBJ_EVENT_GFX_GREEN_SURF
- .byte OBJ_EVENT_GFX_RED_ITEM, OBJ_EVENT_GFX_GREEN_ITEM
- .byte OBJ_EVENT_GFX_RED_FISH, OBJ_EVENT_GFX_GREEN_FISH
- .byte OBJ_EVENT_GFX_RED_VS_SEEKER, OBJ_EVENT_GFX_GREEN_VS_SEEKER
-
-gUnknown_835B880:: @ 835B880
- .byte OBJ_EVENT_GFX_RS_BRENDAN
- .byte OBJ_EVENT_GFX_RS_MAY
-
-gUnknown_835B882:: @ 835B882
- @ Male
- .byte OBJ_EVENT_GFX_RED_NORMAL, 0x01
- .byte OBJ_EVENT_GFX_RED_BIKE, 0x02
- .byte OBJ_EVENT_GFX_RED_SURF, 0x08
- @ Female
- .byte OBJ_EVENT_GFX_GREEN_NORMAL, 0x01
- .byte OBJ_EVENT_GFX_GREEN_BIKE, 0x02
- .byte OBJ_EVENT_GFX_GREEN_SURF, 0x08
-
-gUnknown_835B88E:: @ 835B88E
- .byte OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE
- .byte OBJ_EVENT_GFX_GREEN_VS_SEEKER_BIKE
-
-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
- .4byte fish1
- .4byte fish2
- .4byte sub_805D430
- .4byte sub_805D47C
- .4byte sub_805D508
- .4byte sub_805D574
- .4byte sub_805D580
- .4byte sub_805D5EC
- .4byte sub_805D66C
- .4byte sub_805D6C8
- .4byte sub_805D7C0
- .4byte sub_805D838
- .4byte sub_805D8AC
- .4byte sub_805D8D8
- .4byte sub_805D980
-
-gUnknown_835B90C:: @ 835B90C
- .2byte 0x0001, 0x0001, 0x0001
-
-gUnknown_835B912:: @ 835B912
- .2byte 0x0001, 0x0003, 0x0006
-
-gUnknown_835B918:: @ 835B918
- .string "·$"
-
-gUnknown_835B91A:: @ 835B91A
- .2byte 0x0024, 0x0021, 0x001e
-
-gUnknown_835B920:: @ 835B920
- .2byte 0x0000, 0x0000, 0x0028, 0x000a, 0x0046, 0x001e
-
-gUnknown_835B92C:: @ 835B92C
- .byte 0x01, 0x03, 0x04, 0x02, 0x01
diff --git a/data/maps/FuchsiaCity_WardensHouse/map.json b/data/maps/FuchsiaCity_WardensHouse/map.json
index a6d7e8044..74e75066a 100644
--- a/data/maps/FuchsiaCity_WardensHouse/map.json
+++ b/data/maps/FuchsiaCity_WardensHouse/map.json
@@ -29,7 +29,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 11,
"y": 6,
"elevation": 3,
diff --git a/data/maps/MtEmber_Exterior/map.json b/data/maps/MtEmber_Exterior/map.json
index 7499f0047..86fe279ca 100644
--- a/data/maps/MtEmber_Exterior/map.json
+++ b/data/maps/MtEmber_Exterior/map.json
@@ -120,7 +120,7 @@
"flag": "FLAG_TEMP_13"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 22,
"y": 45,
"elevation": 3,
@@ -133,7 +133,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 17,
"y": 46,
"elevation": 3,
@@ -146,7 +146,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 36,
"y": 14,
"elevation": 3,
@@ -185,7 +185,7 @@
"flag": "FLAG_TEMP_15"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 35,
"y": 14,
"elevation": 3,
@@ -198,7 +198,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 35,
"y": 17,
"elevation": 3,
diff --git a/data/maps/MtEmber_RubyPath_B2F/map.json b/data/maps/MtEmber_RubyPath_B2F/map.json
index e505dd6ab..e260e42bd 100644
--- a/data/maps/MtEmber_RubyPath_B2F/map.json
+++ b/data/maps/MtEmber_RubyPath_B2F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 9,
"y": 3,
"elevation": 3,
@@ -29,7 +29,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 12,
"y": 5,
"elevation": 3,
@@ -42,7 +42,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 12,
"y": 2,
"elevation": 3,
diff --git a/data/maps/MtEmber_RubyPath_B3F/map.json b/data/maps/MtEmber_RubyPath_B3F/map.json
index 3107af9f3..1888f4506 100644
--- a/data/maps/MtEmber_RubyPath_B3F/map.json
+++ b/data/maps/MtEmber_RubyPath_B3F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 10,
"y": 4,
"elevation": 3,
@@ -29,7 +29,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 26,
"y": 12,
"elevation": 3,
@@ -42,7 +42,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 28,
"y": 8,
"elevation": 3,
@@ -133,7 +133,7 @@
"flag": "FLAG_TEMP_17"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 15,
"y": 13,
"elevation": 3,
diff --git a/data/maps/MtEmber_Summit/map.json b/data/maps/MtEmber_Summit/map.json
index 9442cb532..92aabd11e 100644
--- a/data/maps/MtEmber_Summit/map.json
+++ b/data/maps/MtEmber_Summit/map.json
@@ -29,7 +29,7 @@
"flag": "FLAG_HIDE_MOLTRES"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 10,
"y": 12,
"elevation": 3,
@@ -42,7 +42,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 9,
"y": 12,
"elevation": 3,
@@ -55,7 +55,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 11,
"elevation": 3,
@@ -68,7 +68,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 10,
"elevation": 3,
diff --git a/data/maps/PewterCity/scripts.inc b/data/maps/PewterCity/scripts.inc
index be854826b..c50fcdb2d 100644
--- a/data/maps/PewterCity/scripts.inc
+++ b/data/maps/PewterCity/scripts.inc
@@ -744,7 +744,7 @@ PewterCity_EventScript_AideGiveRunningShoes:: @ 81662DE
msgbox PewterCity_Text_RunningShoesLetterFromMom
closemessage
removeobject LOCALID_AIDE
- setflag FLAG_SYS_RUNNING_SHOES
+ setflag FLAG_SYS_B_DASH
setvar VAR_MAP_SCENE_PEWTER_CITY, 2
return
diff --git a/data/maps/SeafoamIslands_1F/map.json b/data/maps/SeafoamIslands_1F/map.json
index 9ec2b53ae..5962bae21 100644
--- a/data/maps/SeafoamIslands_1F/map.json
+++ b/data/maps/SeafoamIslands_1F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 22,
"y": 12,
"elevation": 3,
@@ -29,7 +29,7 @@
"flag": "FLAG_HIDE_SEAFOAM_1F_BOULDER_1"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 32,
"y": 9,
"elevation": 3,
diff --git a/data/maps/SeafoamIslands_B1F/map.json b/data/maps/SeafoamIslands_B1F/map.json
index b5a669e7d..684842b1c 100644
--- a/data/maps/SeafoamIslands_B1F/map.json
+++ b/data/maps/SeafoamIslands_B1F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 22,
"y": 8,
"elevation": 3,
@@ -29,7 +29,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B1F_BOULDER_1"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 30,
"y": 8,
"elevation": 3,
diff --git a/data/maps/SeafoamIslands_B2F/map.json b/data/maps/SeafoamIslands_B2F/map.json
index a91d362c1..a12678c4f 100644
--- a/data/maps/SeafoamIslands_B2F/map.json
+++ b/data/maps/SeafoamIslands_B2F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 22,
"y": 8,
"elevation": 3,
@@ -29,7 +29,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B2F_BOULDER_1"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 30,
"y": 8,
"elevation": 3,
diff --git a/data/maps/SeafoamIslands_B3F/map.json b/data/maps/SeafoamIslands_B3F/map.json
index 25ad96266..9d9c4db52 100644
--- a/data/maps/SeafoamIslands_B3F/map.json
+++ b/data/maps/SeafoamIslands_B3F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 23,
"y": 8,
"elevation": 1,
@@ -29,7 +29,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_1"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 24,
"y": 8,
"elevation": 1,
@@ -42,7 +42,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_2"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 12,
"y": 16,
"elevation": 3,
@@ -55,7 +55,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_5"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 13,
"y": 16,
"elevation": 3,
@@ -68,7 +68,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_6"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 9,
"y": 16,
"elevation": 3,
@@ -81,7 +81,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_4"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 17,
"elevation": 3,
diff --git a/data/maps/SeafoamIslands_B4F/map.json b/data/maps/SeafoamIslands_B4F/map.json
index 4375e5fad..eeae9ad11 100644
--- a/data/maps/SeafoamIslands_B4F/map.json
+++ b/data/maps/SeafoamIslands_B4F/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 18,
"elevation": 1,
@@ -29,7 +29,7 @@
"flag": "FLAG_HIDE_SEAFOAM_B4F_BOULDER_1"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 9,
"y": 18,
"elevation": 1,
diff --git a/data/maps/SevenIsland_SevaultCanyon/map.json b/data/maps/SevenIsland_SevaultCanyon/map.json
index 0cb611d5e..7b579284e 100644
--- a/data/maps/SevenIsland_SevaultCanyon/map.json
+++ b/data/maps/SevenIsland_SevaultCanyon/map.json
@@ -144,7 +144,7 @@
"flag": "FLAG_TEMP_12"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 13,
"y": 47,
"elevation": 3,
@@ -209,7 +209,7 @@
"flag": "FLAG_TEMP_17"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 17,
"y": 47,
"elevation": 3,
diff --git a/data/maps/SevenIsland_SevaultCanyon_TanobyKey/map.json b/data/maps/SevenIsland_SevaultCanyon_TanobyKey/map.json
index cbcc15d02..8cb2b4fe3 100644
--- a/data/maps/SevenIsland_SevaultCanyon_TanobyKey/map.json
+++ b/data/maps/SevenIsland_SevaultCanyon_TanobyKey/map.json
@@ -16,7 +16,7 @@
"connections": null,
"object_events": [
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 7,
"y": 6,
"elevation": 3,
@@ -29,7 +29,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 6,
"elevation": 3,
@@ -42,7 +42,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 9,
"elevation": 3,
@@ -55,7 +55,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 10,
"elevation": 3,
@@ -68,7 +68,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 10,
"elevation": 3,
@@ -81,7 +81,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 9,
"elevation": 3,
@@ -94,7 +94,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 6,
"elevation": 3,
diff --git a/data/maps/SixIsland_RuinValley/map.json b/data/maps/SixIsland_RuinValley/map.json
index 8a5ff9436..c6bc3b25a 100644
--- a/data/maps/SixIsland_RuinValley/map.json
+++ b/data/maps/SixIsland_RuinValley/map.json
@@ -100,7 +100,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 17,
"y": 10,
"elevation": 5,
@@ -113,7 +113,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 17,
"y": 12,
"elevation": 5,
@@ -126,7 +126,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 18,
"y": 11,
"elevation": 5,
@@ -139,7 +139,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 33,
"elevation": 3,
@@ -152,7 +152,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 34,
"elevation": 3,
@@ -165,7 +165,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 41,
"y": 32,
"elevation": 3,
@@ -178,7 +178,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 41,
"y": 33,
"elevation": 3,
@@ -191,7 +191,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 42,
"y": 33,
"elevation": 3,
diff --git a/data/maps/VictoryRoad_1F/map.json b/data/maps/VictoryRoad_1F/map.json
index 75a812a17..1dc53b977 100644
--- a/data/maps/VictoryRoad_1F/map.json
+++ b/data/maps/VictoryRoad_1F/map.json
@@ -68,7 +68,7 @@
"flag": "FLAG_HIDE_VICTORY_ROAD_1F_TM02"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 7,
"y": 18,
"elevation": 3,
@@ -81,7 +81,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 4,
"y": 12,
"elevation": 3,
@@ -94,7 +94,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 16,
"y": 3,
"elevation": 3,
diff --git a/data/maps/VictoryRoad_2F/map.json b/data/maps/VictoryRoad_2F/map.json
index 20ce486e2..023f96e1c 100644
--- a/data/maps/VictoryRoad_2F/map.json
+++ b/data/maps/VictoryRoad_2F/map.json
@@ -133,7 +133,7 @@
"flag": "FLAG_HIDE_VICTORY_ROAD_2F_TM37"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 8,
"y": 7,
"elevation": 3,
@@ -146,7 +146,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 6,
"y": 17,
"elevation": 3,
@@ -159,7 +159,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 33,
"y": 19,
"elevation": 3,
diff --git a/data/maps/VictoryRoad_3F/map.json b/data/maps/VictoryRoad_3F/map.json
index cf2d28b45..a20c6a276 100644
--- a/data/maps/VictoryRoad_3F/map.json
+++ b/data/maps/VictoryRoad_3F/map.json
@@ -94,7 +94,7 @@
"flag": "FLAG_HIDE_VICTORY_ROAD_3F_TM50"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 19,
"y": 15,
"elevation": 3,
@@ -107,7 +107,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 33,
"y": 18,
"elevation": 0,
@@ -120,7 +120,7 @@
"flag": "FLAG_HIDE_VICTORY_ROAD_3F_BOULDER"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 35,
"y": 13,
"elevation": 3,
@@ -133,7 +133,7 @@
"flag": "0"
},
{
- "graphics_id": "OBJ_EVENT_GFX_STRENGTH_BOULDER",
+ "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER",
"x": 32,
"y": 5,
"elevation": 3,
diff --git a/data/scripts/field_moves.inc b/data/scripts/field_moves.inc
index 282071755..7ae90849d 100644
--- a/data/scripts/field_moves.inc
+++ b/data/scripts/field_moves.inc
@@ -125,7 +125,7 @@ EventScript_StrengthBoulder:: @ 81BE11D
goto_if_questlog EventScript_ReleaseEnd
lockall
goto_if_unset FLAG_BADGE04_GET, EventScript_CantMoveBoulder
- goto_if_set FLAG_SYS_STRENGTH_ACTIVE, EventScript_AlreadyUsedStrength
+ goto_if_set FLAG_SYS_USE_STRENGTH, EventScript_AlreadyUsedStrength
checkpartymove MOVE_STRENGTH
compare VAR_RESULT, PARTY_SIZE
goto_if_eq EventScript_CantMoveBoulder
@@ -147,7 +147,7 @@ EventScript_FldEffStrength:: @ 81BE16E
end
EventScript_UseStrength:: @ 81BE179
- setflag FLAG_SYS_STRENGTH_ACTIVE
+ setflag FLAG_SYS_USE_STRENGTH
msgbox Text_MonUsedStrengthCanMoveBoulders, MSGBOX_SIGN
end
diff --git a/include/bike.h b/include/bike.h
index 30049ee8c..ad2bd999a 100644
--- a/include/bike.h
+++ b/include/bike.h
@@ -6,4 +6,10 @@ bool8 sub_80BD540(void);
void StartTransitionToFlipBikeState(u8 flags);
s16 GetPlayerSpeed(void);
+void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys);
+bool32 IsRunningDisallowed(u8 metatileBehavior);
+void Bike_HandleBumpySlopeJump(void);
+void Bike_UpdateBikeCounterSpeed(u8 counter);
+bool8 player_should_look_direction_be_enforced_upon_movement(void);
+
#endif //GUARD_BIKE_H
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index a50d0a0e2..2e9fcaa83 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -98,7 +98,7 @@
#define OBJ_EVENT_GFX_POKEDEX 94
#define OBJ_EVENT_GFX_CUT_TREE 95
#define OBJ_EVENT_GFX_ROCK_SMASH_ROCK 96
-#define OBJ_EVENT_GFX_STRENGTH_BOULDER 97
+#define OBJ_EVENT_GFX_PUSHABLE_BOULDER 97
#define OBJ_EVENT_GFX_FOSSIL 98
#define OBJ_EVENT_GFX_RUBY 99
#define OBJ_EVENT_GFX_SAPPHIRE 100
diff --git a/include/constants/flags.h b/include/constants/flags.h
index ccac1da3b..6fd532a0e 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1321,7 +1321,7 @@
#define FLAG_SYS_VS_SEEKER_CHARGING (SYS_FLAGS + 0x1)
#define FLAG_SYS_WHITE_FLUTE_ACTIVE (SYS_FLAGS + 0x3)
#define FLAG_SYS_BLACK_FLUTE_ACTIVE (SYS_FLAGS + 0x4)
-#define FLAG_SYS_STRENGTH_ACTIVE (SYS_FLAGS + 0x5)
+#define FLAG_SYS_USE_STRENGTH (SYS_FLAGS + 0x5)
#define FLAG_SYS_FLASH_ACTIVE (SYS_FLAGS + 0x6)
#define FLAG_SYS_SPECIAL_WILD_BATTLE (SYS_FLAGS + 0x7)
#define FLAG_0x808 (SYS_FLAGS + 0x8)
@@ -1345,7 +1345,7 @@
#define FLAG_SYS_GAME_CLEAR (SYS_FLAGS + 0x2C)
#define FLAG_SYS_SET_TRAINER_CARD_PROFILE (SYS_FLAGS + 0x2D)
#define FLAG_0x82E (SYS_FLAGS + 0x2E)
-#define FLAG_SYS_RUNNING_SHOES (SYS_FLAGS + 0x2F)
+#define FLAG_SYS_B_DASH (SYS_FLAGS + 0x2F)
#define FLAG_SYS_ON_CYCLING_ROAD (SYS_FLAGS + 0x30)
#define FLAG_0x831 (SYS_FLAGS + 0x31)
#define FLAG_0x832 (SYS_FLAGS + 0x32)
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 4a64eb095..358209eaf 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -221,11 +221,10 @@
#define VAR_0x40A7 0x40A7
#define VAR_0x40A8 0x40A8
#define VAR_0x40A9 0x40A9
-#define VAR_0x40AA 0x40AA
-#define VAR_0x40AB 0x40AB
-#define VAR_0x40AC 0x40AC
-#define VAR_0x40AD 0x40AD
-#define VAR_0x40AE 0x40AE
+
+#define VAR_QLBAK_TRAINER_REMATCHES 0x40AA // array of 4
+#define VAR_QLBAK_MAP_LAYOUT 0x40AE
+
#define VAR_0x40AF 0x40AF
#define VAR_0x40B0 0x40B0
#define VAR_0x40B1 0x40B1
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 5d85aec88..792118c00 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -26,6 +26,8 @@ struct UnkStruct_083A3698
u8 animPos[4];
};
+typedef void (*MovementAction)(u8 direction);
+
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1)
#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN (1 << 2)
@@ -117,8 +119,8 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *, u8);
void ShiftStillObjectEventCoords(struct ObjectEvent *);
void OverrideMovementTypeForObjectEvent(const struct ObjectEvent *, u8);
void SetTrainerMovementType(struct ObjectEvent *, u8);
-u8 GetFishingNoCatchDirectionAnimNum(u8 direction);
-u8 GetFishingBiteDirectionAnimNum(u8 a0);
+u8 GetFishingDirectionAnimNum(u8 direction);
+u8 GetFishingNoCatchDirectionAnimNum(u8 a0);
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 a1);
u8 sub_805EB44(u8, u8, s16, s16);
void InitObjectEventPalettes(u8 mode);
@@ -130,6 +132,7 @@ u8 GetWalkFastestMovementAction(u32);
u8 sub_8063F2C(u32 direction);
u8 GetTrainerFacingDirectionMovementType(u8 direction);
u8 GetFaceDirectionMovementAction(u32);
+u8 GetFaceDirectionFastMovementAction(u32);
void CameraObjectSetFollowedObjectId(u8 objectId);
void UnfreezeObjectEvents(void);
void sub_8069058(u8, u8);
@@ -186,6 +189,7 @@ void sub_8068CA4(struct Sprite *, u8);
bool8 sub_8068CB4(struct Sprite *sprite);
void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
bool8 SpriteAnimEnded(struct Sprite *);
+u8 ObjectEventGetHeldMovementActionId(struct ObjectEvent *objectEvent);
u8 GetMoveDirectionAnimNum(u8 direction);
// Exported data declarations
@@ -197,5 +201,25 @@ extern const struct OamData gObjectEventBaseOam_32x32;
extern const u16 gUnknown_8398648[];
extern const u16 gUnknown_8398688[];
extern const u8 gReflectionEffectPaletteMap[];
+u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z);
+u8 sub_8063F58(u32 direction);
+u8 sub_8063FDC(u32 direction);
+u8 sub_8064008(u32 direction);
+u8 GetPlayerRunMovementAction(u32 direction);
+u8 GetPlayerRunSlowMovementAction(u32 direction);
+u8 GetWalkSlowMovementAction(u32 direction);
+u8 sub_80640E4(u32 direction);
+u8 GetAcroWheelieFaceDirectionMovementAction(u32 direction);
+u8 GetAcroPopWheelieFaceDirectionMovementAction(u32 direction);
+u8 GetAcroEndWheelieFaceDirectionMovementAction(u32 direction);
+u8 GetAcroWheelieHopFaceDirectionMovementAction(u32 direction);
+u8 GetAcroWheelieHopDirectionMovementAction(u32 direction);
+u8 GetAcroWheelieJumpDirectionMovementAction(u32 direction);
+u8 GetJumpInPlaceTurnAroundMovementAction(u32 direction);
+u8 GetAcroWheelieInPlaceDirectionMovementAction(u32 direction);
+u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction);
+u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction);
+u8 sub_80641EC(u32 direction);
+u8 GetFishingBiteDirectionAnimNum(u8 direction);
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
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 72f91f1d6..a842c5dc6 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -22,6 +22,9 @@ 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);
+void sub_80DC4A4(u8 spriteId, u8 value, s16 data1);
void sub_80DCCE0(struct Sprite * sprite);
void UpdateShadowFieldEffect(struct Sprite * sprite);
void UpdateBubblesFieldEffect(struct Sprite * sprite);
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index d649fc02f..240353f5e 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -11,7 +11,7 @@ void DoDoorWarp(void);
void DoFallWarp(void);
void DoTeleportWarp(void);
void sub_807E500(void);
-void sub_807DF64(void);
+void FieldCB_UnionRoomWarp(void);
void WarpFadeOutScreen(void);
void FieldCallback_ReturnToEventScript2(void);
void FadeInFromBlack(void);
@@ -20,7 +20,7 @@ void WarpFadeInScreen(void);
void sub_807DCE4(void);
-bool32 sub_807E418(void);
+bool32 FieldFadeTransitionBackgroundEffectIsFinished(void);
void palette_bg_faded_fill_black(void);
void sub_807E4A0(u16 metatileBehavior, u16 delay);
void DoEscalatorWarp(u8 a0);
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 51ae9905f..73109ae1e 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -11,32 +11,54 @@ void PlayerGetDestCoords(s16 *, s16 *);
u8 GetPlayerFacingDirection(void);
u8 GetPlayerMovementDirection(void);
u8 PlayerGetCopyableMovement(void);
+void MovePlayerNotOnBike(u8 direction, u16 heldKeys);
-void sub_808D074(u8);
+void MovementType_Player(struct Sprite * sprite);
void sub_805C270(void);
void sub_805C780(void);
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 sub_805DAE4(u8 direction);
+void AlignFishingAnimationFrames(struct Sprite *sprite);
+void CreateStopSurfingTask_NoMusicChange(u8 direction);
+void SavePlayerFacingDirectionForTeleport(u8 direction);
void SetPlayerAvatarTransitionFlags(u16 a);
bool8 IsPlayerFacingSurfableFishableWater(void);
-void sub_805D2C0(u8 secondaryId);
+void StartFishing(u8 secondaryId);
u8 GetPlayerAvatarObjectId(void);
u8 PlayerGetZCoord(void);
u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
void sub_805CB70(void);
-void sub_805CB04(bool8);
-void sub_805DC04(void);
-void sub_805DAB0(void);
-bool32 sub_805DAD0(void);
-bool32 sub_805DC24(void);
+void SetPlayerInvisibility(bool8);
+void StartTeleportInPlayerAnim(void);
+void StartTeleportWarpOutPlayerAnim(void);
+bool32 WaitTeleportWarpOutPlayerAnim(void);
+bool32 WaitTeleportInPlayerAnim(void);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerSurfingNorth(void);
-void player_get_pos_including_state_based_drift(s16 *x, s16 *y);
+u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y);
void sub_805CBE8(void);
-u8 sub_805C7C8(u8 state, u8 gender);
+u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
+u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
+u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior);
+void sub_805C0D4(u8 direction);
+void PlayerGoSlow(u8 direction);
+void PlayerGoSpeed1(u8 direction);
+void PlayerGoSpeed2(u8 direction);
+void sub_805C134(u8 direction);
+void PlayerRideWaterCurrent(u8 direction);
+void sub_805C164(u8 direction);
+void PlayerRun(u8 direction);
+void PlayerRunSlow(u8 direction);
+void PlayerOnBikeCollide(u8 direction);
+void PlayerNotOnBikeCollide(u8 direction);
+void PlayerFaceDirection(u8 direction);
+void PlayerFaceDirectionFast(u8 direction);
+void PlayerTurnInPlace(u8 direction);
+void PlayerJumpLedge(u8 direction);
+void sub_805C260(void);
+void player_step(u8 direction, u16 newKeys, u16 heldKeys);
+bool32 PlayerIsMovingOnRockStairs(u8 direction);
+void sub_805BEB8(void);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 3c4b5f382..1858d3344 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -278,14 +278,25 @@ struct ObjectEventGraphicsInfo
/*0x20*/ const union AffineAnimCmd *const *affineAnims;
};
-#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
-#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
-#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
-#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
-#define PLAYER_AVATAR_FLAG_4 (1 << 4)
-#define PLAYER_AVATAR_FLAG_5 (1 << 5)
-#define PLAYER_AVATAR_FLAG_6 (1 << 6)
-#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+enum {
+ PLAYER_AVATAR_STATE_NORMAL,
+ PLAYER_AVATAR_STATE_MACH_BIKE,
+ PLAYER_AVATAR_STATE_ACRO_BIKE,
+ PLAYER_AVATAR_STATE_SURFING,
+ PLAYER_AVATAR_STATE_UNDERWATER,
+ PLAYER_AVATAR_STATE_FIELD_MOVE,
+ PLAYER_AVATAR_STATE_FISHING,
+ PLAYER_AVATAR_STATE_WATERING,
+};
+
+#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << PLAYER_AVATAR_STATE_NORMAL)
+#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << PLAYER_AVATAR_STATE_MACH_BIKE)
+#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << PLAYER_AVATAR_STATE_ACRO_BIKE)
+#define PLAYER_AVATAR_FLAG_SURFING (1 << PLAYER_AVATAR_STATE_SURFING)
+#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << PLAYER_AVATAR_STATE_UNDERWATER)
+#define PLAYER_AVATAR_FLAG_FIELD_MOVE (1 << PLAYER_AVATAR_STATE_FIELD_MOVE)
+#define PLAYER_AVATAR_FLAG_FISHING (1 << PLAYER_AVATAR_STATE_FISHING)
+#define PLAYER_AVATAR_FLAG_WATERING (1 << PLAYER_AVATAR_STATE_WATERING)
enum
{
@@ -308,7 +319,7 @@ enum
COLLISION_STOP_SURFING,
COLLISION_LEDGE_JUMP,
COLLISION_PUSHED_BOULDER,
- COLLISION_ROTATING_GATE,
+ COLLISION_UNKNOWN_WARP_6C_6D_6E_6F,
COLLISION_WHEELIE_HOP,
COLLISION_ISOLATED_VERTICAL_RAIL,
COLLISION_ISOLATED_HORIZONTAL_RAIL,
@@ -335,22 +346,23 @@ enum
struct PlayerAvatar /* 0x202E858 */
{
/*0x00*/ u8 flags;
- /*0x01*/ u8 unk1; // used to be bike, but it's not that in Emerald and probably isn't here either. maybe transition flags?
+ /*0x01*/ u8 transitionFlags; // used to be bike, but it's not that in Emerald and probably isn't here either. maybe transition flags?
/*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving.
/*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
/*0x04*/ u8 spriteId;
/*0x05*/ u8 objectEventId;
/*0x06*/ bool8 preventStep;
/*0x07*/ u8 gender;
+ // These are not used in FRLG
u8 acroBikeState;
- u8 unk9;
+ u8 newDirBackup;
u8 bikeFrameCounter;
- u8 unkB;
- u32 unkC;
- u32 unk10;
- u8 unk14[8];
- u8 unk1C[8];
- // TODO: rest of struct
+ u8 bikeSpeed;
+ u32 directionHistory;
+ u32 abStartSelectHistory;
+ u8 dirTimerHistory[8];
+ // For the Rocket mazes
+ u16 lastSpinTile;
};
struct Camera
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index ae3e6a01d..a5f5a81b7 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -23,7 +23,7 @@ bool8 MetatileBehavior_IsUnknownWarp6E(u8 metatileBehavior);
bool8 MetatileBehavior_IsUnknownWarp6F(u8 metatileBehavior);
bool8 MetatileBehavior_IsUnknownWarp6C_to_6F(u8 metatileBehavior);
bool8 MetatileBehavior_IsLadder(u8 metatileBehavior);
-bool8 MetatileBehavior_IsCaveDoor(u8 metatileBehavior);
+bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_2(u8 metatileBehavior);
bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior);
bool8 MetatileBehavior_IsSemiDeepWater(u8 metatileBehavior);
@@ -98,11 +98,11 @@ bool8 MetatileBehavior_IsFallWarp(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_13(u8 metatileBehavior);
bool8 MetatileBehavior_IsCyclingRoadPullDownTile(u8 metatileBehavior);
bool8 MetatileBehavior_IsCyclingRoadPullDownTileGrass(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_14(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_15(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior);
+bool8 MetatileBehavior_IsBumpySlope(u8 metatileBehavior);
+bool8 MetatileBehavior_IsIsolatedVerticalRail(u8 metatileBehavior);
+bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8 metatileBehavior);
+bool8 MetatileBehavior_IsVerticalRail(u8 metatileBehavior);
+bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior);
bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior);
bool8 MetatileBehavior_IsMB0A(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_9(u8 metatileBehavior);
@@ -115,10 +115,10 @@ bool8 MetatileBehavior_UnusedReturnFalse_11(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_12(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior);
bool8 TestMetatileAttributeBit(u8 attr, u8 bitmask);
-bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior);
-bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior);
-bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior);
-bool8 MetatileBehavior_UnusedIsSpinDown(u8 metatileBehavior);
+bool8 MetatileBehavior_IsSpinRight(u8 metatileBehavior);
+bool8 MetatileBehavior_IsSpinLeft(u8 metatileBehavior);
+bool8 MetatileBehavior_IsSpinUp(u8 metatileBehavior);
+bool8 MetatileBehavior_IsSpinDown(u8 metatileBehavior);
bool8 MetatileBehavior_IsStopSpinning(u8 metatileBehavior);
bool8 MetatileBehavior_IsSpinTile(u8 metatileBehavior);
bool8 MetatileBehavior_IsSignpost(u8 metatileBehavior);
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/include/quest_log.h b/include/quest_log.h
index e2e652a81..28c69505b 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -18,9 +18,9 @@ struct UnkStruct_3005E90
extern u8 gQuestLogState;
extern u8 gUnknown_3005E88;
-extern u16 sNumQuestLogs;
+extern u16 sNumEventsInLogEntry;
extern struct UnkStruct_3005E90 gUnknown_3005E90;
-extern struct UnkStruct_203AE98 * gUnknown_3005E94;
+extern struct QuestLogEntry * sCurQuestLogEntry;
extern const u16 gUnknown_84566A8[];
void sub_8112720(u8);
@@ -30,7 +30,7 @@ void QuestLog_RecordEnteredMap(u16);
u8 sub_8112CAC(void);
bool8 QuestLog_SchedulePlaybackCB(void (*func)(void));
void sub_8111F38(u16 offset, u16 idx);
-void sub_8111134(void);
+void CommitQuestLogWindow1(void);
void DestroyHelpMessageWindow(u8 a0);
u8 CreateHelpMessageWindow(void);
void PrintTextOnHelpMessageWindow(const u8 * text, u8 mode);
@@ -53,7 +53,11 @@ void sub_811246C(struct Sprite *sprite);
void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3);
bool8 sub_8111C2C(void);
void sub_81128BC(u8 a0);
-void sub_811278C(u8, u8);
+void sub_811278C(u8 movementActionId, u8 duration);
void Special_UpdateTrainerFansAfterLinkBattle(void);
+void sub_8112628(u8 movementActionId);
+void sub_81126AC(u8 movementActionId, u8 duration);
+void sub_8112588(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration);
+void sub_8112C9C(void);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/quest_log_objects.h b/include/quest_log_objects.h
index e582ba27a..d3e11d11f 100644
--- a/include/quest_log_objects.h
+++ b/include/quest_log_objects.h
@@ -4,6 +4,6 @@
#include "global.h"
void SetQuestLogObjectEventsData(struct QuestLog *);
-void sub_815A1F8(struct QuestLog *, struct ObjectEventTemplate *);
+void SetSav1ObjectEventsFromQuestLog(struct QuestLog *, struct ObjectEventTemplate *);
#endif //GUARD_QUEST_LOG_OBJECTS_H
diff --git a/include/quest_log_player.h b/include/quest_log_player.h
index 9cde1747e..5aee3f2d0 100644
--- a/include/quest_log_player.h
+++ b/include/quest_log_player.h
@@ -4,5 +4,7 @@
#include "global.h"
void sub_8150454(void);
+bool32 sub_8150474(u8 a0);
+void sub_8150498(u8 a0);
#endif //GUARD_QUEST_LOG_PLAYER_H
diff --git a/include/strings.h b/include/strings.h
index e7f274abd..37d856a86 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1463,4 +1463,9 @@ extern const u8 gUnknown_841B2C6[];
extern const u8 gUnknown_841B2E5[];
extern const u8 gUnknown_841B2DC[];
+// field_player_avatar
+extern const u8 gText_PokemonOnHook[];
+extern const u8 gText_NotEvenANibble[];
+extern const u8 gText_ItGotAway[];
+
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index aeb884de4..3012e7066 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -92,7 +92,7 @@ SECTIONS {
src/metatile_behavior.o(.text);
src/field_camera.o(.text);
src/field_door.o(.text);
- asm/field_player_avatar.o(.text);
+ src/field_player_avatar.o(.text);
src/event_object_movement.o(.text);
src/field_message_box.o(.text);
src/event_object_lock.o(.text);
@@ -433,7 +433,7 @@ SECTIONS {
src/fieldmap.o(.rodata);
src/metatile_behavior.o(.rodata);
src/field_door.o(.rodata);
- data/field_player_avatar.o(.rodata);
+ src/field_player_avatar.o(.rodata);
src/event_object_movement.o(.rodata);
src/scrcmd.o(.rodata);
src/coord_event_weather.o(.rodata);
diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h
index 351be4549..164199089 100644
--- a/src/data/object_events/object_event_graphics_info_pointers.h
+++ b/src/data/object_events/object_event_graphics_info_pointers.h
@@ -250,7 +250,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
[OBJ_EVENT_GFX_POKEDEX] = &gObjectEventGraphicsInfo_Pokedex,
[OBJ_EVENT_GFX_CUT_TREE] = &gObjectEventGraphicsInfo_CutTree,
[OBJ_EVENT_GFX_ROCK_SMASH_ROCK] = &gObjectEventGraphicsInfo_RockSmashRock,
- [OBJ_EVENT_GFX_STRENGTH_BOULDER] = &gObjectEventGraphicsInfo_StrengthBoulder,
+ [OBJ_EVENT_GFX_PUSHABLE_BOULDER] = &gObjectEventGraphicsInfo_StrengthBoulder,
[OBJ_EVENT_GFX_FOSSIL] = &gObjectEventGraphicsInfo_Fossil,
[OBJ_EVENT_GFX_RUBY] = &gObjectEventGraphicsInfo_Ruby,
[OBJ_EVENT_GFX_SAPPHIRE] = &gObjectEventGraphicsInfo_Sapphire,
diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c
index cefc99eb1..174a1c5d5 100644
--- a/src/dynamic_placeholder_text_util.c
+++ b/src/dynamic_placeholder_text_util.c
@@ -9,9 +9,9 @@ static const u8 sTextColorTable[] =
{
// [LOW_NYBBLE / 2] = 0xXY, // HIGH_NYBBLE
[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_SURF / 2] = 0x00, // OBJ_EVENT_GFX_RED_ITEM
[OBJ_EVENT_GFX_RED_FISH / 2] = 0x00, // OBJ_EVENT_GFX_RED_VS_SEEKER
- [OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL
+ [OBJ_EVENT_GFX_RED_VS_SEEKER_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_VS_SEEKER / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_VS_SEEKER_BIKE
@@ -56,7 +56,7 @@ static const u8 sTextColorTable[] =
[OBJ_EVENT_GFX_TEACHY_TV_HOST / 2] = 0x00, // OBJ_EVENT_GFX_GYM_GUY
[OBJ_EVENT_GFX_ITEM_BALL / 2] = 0x33, // OBJ_EVENT_GFX_TOWN_MAP
[OBJ_EVENT_GFX_POKEDEX / 2] = 0x33, // OBJ_EVENT_GFX_CUT_TREE
- [OBJ_EVENT_GFX_ROCK_SMASH_ROCK / 2] = 0x33, // OBJ_EVENT_GFX_STRENGTH_BOULDER
+ [OBJ_EVENT_GFX_ROCK_SMASH_ROCK / 2] = 0x33, // OBJ_EVENT_GFX_PUSHABLE_BOULDER
[OBJ_EVENT_GFX_FOSSIL / 2] = 0x33, // OBJ_EVENT_GFX_RUBY
[OBJ_EVENT_GFX_SAPPHIRE / 2] = 0x33, // OBJ_EVENT_GFX_OLD_AMBER
[OBJ_EVENT_GFX_GYM_SIGN / 2] = 0x33, // OBJ_EVENT_GFX_SIGN
diff --git a/src/event_data.c b/src/event_data.c
index a162e8701..f16267c98 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -44,7 +44,7 @@ void sub_806E110(void)
memset(gSaveBlock1Ptr->vars, 0, 16 * 2);
FlagClear(FLAG_SYS_WHITE_FLUTE_ACTIVE);
FlagClear(FLAG_SYS_BLACK_FLUTE_ACTIVE);
- FlagClear(FLAG_SYS_STRENGTH_ACTIVE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_SPECIAL_WILD_BATTLE);
FlagClear(FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER);
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index c04e1d00a..5361d05dc 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -153,8 +153,6 @@ static void sub_80632BC(struct Sprite *);
static void sub_80632E0(struct Sprite *);
static void MovementType_WanderAroundDuplicate(struct Sprite *);
-extern void sub_805B3B8(struct Sprite *);
-
#define movement_type_def(setup, table) \
static u8 setup##_callback(struct ObjectEvent *, struct Sprite *); \
void setup(struct Sprite *sprite) \
@@ -212,7 +210,7 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) = {
MovementType_FaceDirection,
MovementType_FaceDirection,
MovementType_FaceDirection,
- sub_805B3B8,
+ MovementType_Player,
NULL,
MovementType_FaceDownAndUp,
MovementType_FaceLeftAndRight,
@@ -806,7 +804,7 @@ const u8 gAcroEndWheelieDirectionAnimNums[] = {
[DIR_NORTHEAST] = 0x1D,
};
-const u8 gAcroUnusedActionDirectionAnimNums[] = {
+const u8 gUnknown_83A6465[] = {
[DIR_NONE] = 0x18,
[DIR_SOUTH] = 0x18,
[DIR_NORTH] = 0x19,
@@ -818,7 +816,7 @@ const u8 gAcroUnusedActionDirectionAnimNums[] = {
[DIR_NORTHEAST] = 0x1B,
};
-const u8 gAcroWheeliePedalDirectionAnimNums[] = {
+const u8 gAcroUnusedActionDirectionAnimNums[] = {
[DIR_NONE] = 0x20,
[DIR_SOUTH] = 0x20,
[DIR_NORTH] = 0x21,
@@ -830,7 +828,7 @@ const u8 gAcroWheeliePedalDirectionAnimNums[] = {
[DIR_NORTHEAST] = 0x21,
};
-const u8 gFishingDirectionAnimNums[] = {
+const u8 gAcroWheeliePedalDirectionAnimNums[] = {
[DIR_NONE] = 0x24,
[DIR_SOUTH] = 0x24,
[DIR_NORTH] = 0x25,
@@ -842,7 +840,7 @@ const u8 gFishingDirectionAnimNums[] = {
[DIR_NORTHEAST] = 0x25,
};
-const u8 gFishingNoCatchDirectionAnimNums[] = {
+const u8 gFishingDirectionAnimNums[] = {
[DIR_NONE] = 0x0,
[DIR_SOUTH] = 0x0,
[DIR_NORTH] = 0x1,
@@ -854,7 +852,7 @@ const u8 gFishingNoCatchDirectionAnimNums[] = {
[DIR_NORTHEAST] = 0x1,
};
-const u8 gFishingBiteDirectionAnimNums[] = {
+const u8 gFishingNoCatchDirectionAnimNums[] = {
[DIR_NONE] = 0x4,
[DIR_SOUTH] = 0x4,
[DIR_NORTH] = 0x5,
@@ -866,7 +864,7 @@ const u8 gFishingBiteDirectionAnimNums[] = {
[DIR_NORTHEAST] = 0x5,
};
-const u8 gUnknown_83A648A[] = {
+const u8 gFishingBiteDirectionAnimNums[] = {
[DIR_NONE] = 0x8,
[DIR_SOUTH] = 0x8,
[DIR_NORTH] = 0x9,
@@ -3040,7 +3038,7 @@ bool8 ObjectEventIsTrainerAndCloseToPlayer(struct ObjectEvent *objectEvent)
s16 minY;
s16 maxY;
- if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH))
+ if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_WATERING))
{
return FALSE;
}
@@ -4962,6 +4960,11 @@ u8 GetAcroEndWheelieDirectionAnimNum(u8 direction)
return gAcroEndWheelieDirectionAnimNums[direction];
}
+u8 sub_80634C0(u8 direction)
+{
+ return gUnknown_83A6465[direction];
+}
+
u8 GetAcroUnusedActionDirectionAnimNum(u8 direction)
{
return gAcroUnusedActionDirectionAnimNums[direction];
@@ -4987,11 +4990,6 @@ u8 GetFishingBiteDirectionAnimNum(u8 direction)
return gFishingBiteDirectionAnimNums[direction];
}
-u8 sub_8063510(u8 direction)
-{
- return gUnknown_83A648A[direction];
-}
-
u8 GetRunningDirectionAnimNum(u8 direction)
{
return gRunningDirectionAnimNums[direction];
@@ -5449,19 +5447,19 @@ u8 sub_8063F10(u32 idx)
}
dirn_to_anim(sub_8063F2C, gUnknown_83A64FB);
-dirn_to_anim(sub_8063F58, gUnknown_83A6500);
+dirn_to_anim(GetWalkSlowMovementAction, gUnknown_83A6500);
dirn_to_anim(GetWalkNormalMovementAction, gUnknown_83A6505);
dirn_to_anim(GetWalkFastMovementAction, gUnknown_83A650A);
dirn_to_anim(sub_8063FDC, gUnknown_83A650F);
dirn_to_anim(sub_8064008, gUnknown_83A6514);
dirn_to_anim(GetWalkFastestMovementAction, gUnknown_83A6519);
dirn_to_anim(GetSlideMovementAction, gUnknown_83A651E);
-dirn_to_anim(sub_806408C, gUnknown_83A6523);
-dirn_to_anim(sub_80640B8, gUnknown_83A6528);
+dirn_to_anim(GetPlayerRunMovementAction, gUnknown_83A6523);
+dirn_to_anim(GetPlayerRunSlowMovementAction, gUnknown_83A6528);
dirn_to_anim(sub_80640E4, gUnknown_83A652D);
dirn_to_anim(GetJump2MovementAction, gUnknown_83A6532);
dirn_to_anim(GetJumpInPlaceMovementAction, gUnknown_83A6537);
-dirn_to_anim(sub_8064168, gUnknown_83A653C);
+dirn_to_anim(GetJumpInPlaceTurnAroundMovementAction, gUnknown_83A653C);
dirn_to_anim(GetJumpMovementAction, gUnknown_83A6541);
dirn_to_anim(sub_80641C0, gUnknown_83A6546);
dirn_to_anim(sub_80641EC, gUnknown_83A654B);
@@ -5475,15 +5473,15 @@ bool8 ObjectEventFaceOppositeDirection(struct ObjectEvent *objectEvent, u8 direc
return ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetOppositeDirection(direction)));
}
-dirn_to_anim(sub_80642F4, gUnknown_83A6564);
-dirn_to_anim(sub_8064320, gUnknown_83A6569);
-dirn_to_anim(sub_806434C, gUnknown_83A656E);
-dirn_to_anim(sub_8064378, gUnknown_83A6573);
-dirn_to_anim(sub_80643A4, gUnknown_83A6578);
-dirn_to_anim(sub_80643D0, gUnknown_83A657D);
-dirn_to_anim(sub_80643FC, gUnknown_83A6582);
-dirn_to_anim(sub_8064428, gUnknown_83A6587);
-dirn_to_anim(sub_8064454, gUnknown_83A658C);
+dirn_to_anim(GetAcroWheelieFaceDirectionMovementAction, gUnknown_83A6564);
+dirn_to_anim(GetAcroPopWheelieFaceDirectionMovementAction, gUnknown_83A6569);
+dirn_to_anim(GetAcroEndWheelieFaceDirectionMovementAction, gUnknown_83A656E);
+dirn_to_anim(GetAcroWheelieHopFaceDirectionMovementAction, gUnknown_83A6573);
+dirn_to_anim(GetAcroWheelieHopDirectionMovementAction, gUnknown_83A6578);
+dirn_to_anim(GetAcroWheelieJumpDirectionMovementAction, gUnknown_83A657D);
+dirn_to_anim(GetAcroWheelieInPlaceDirectionMovementAction, gUnknown_83A6582);
+dirn_to_anim(GetAcroPopWheelieMoveDirectionMovementAction, gUnknown_83A6587);
+dirn_to_anim(GetAcroWheelieMoveDirectionMovementAction, gUnknown_83A658C);
u8 GetOppositeDirection(u8 direction)
{
@@ -7537,7 +7535,7 @@ void sub_8066C70(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire
{
SetObjectEventDirection(objectEvent, direction);
ShiftStillObjectEventCoords(objectEvent);
- obj_npc_animation_step(objectEvent, sprite, GetFishingDirectionAnimNum(direction));
+ obj_npc_animation_step(objectEvent, sprite, GetAcroWheeliePedalDirectionAnimNum(direction));
sprite->animPaused = TRUE;
sprite->data[2] = 1;
}
@@ -7616,25 +7614,25 @@ static bool8 MovementAction_AcroEndWheelieFaceRight_Step0(struct ObjectEvent *ob
static bool8 MovementAction_UnusedAcroActionDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- StartSpriteAnimInDirection(objectEvent, sprite, DIR_SOUTH, GetAcroWheeliePedalDirectionAnimNum(DIR_SOUTH));
+ StartSpriteAnimInDirection(objectEvent, sprite, DIR_SOUTH, GetAcroUnusedActionDirectionAnimNum(DIR_SOUTH));
return FALSE;
}
static bool8 MovementAction_UnusedAcroActionUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- StartSpriteAnimInDirection(objectEvent, sprite, DIR_NORTH, GetAcroWheeliePedalDirectionAnimNum(DIR_NORTH));
+ StartSpriteAnimInDirection(objectEvent, sprite, DIR_NORTH, GetAcroUnusedActionDirectionAnimNum(DIR_NORTH));
return FALSE;
}
static bool8 MovementAction_UnusedAcroActionLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- StartSpriteAnimInDirection(objectEvent, sprite, DIR_WEST, GetAcroWheeliePedalDirectionAnimNum(DIR_WEST));
+ StartSpriteAnimInDirection(objectEvent, sprite, DIR_WEST, GetAcroUnusedActionDirectionAnimNum(DIR_WEST));
return FALSE;
}
static bool8 MovementAction_UnusedAcroActionRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- StartSpriteAnimInDirection(objectEvent, sprite, DIR_EAST, GetAcroWheeliePedalDirectionAnimNum(DIR_EAST));
+ StartSpriteAnimInDirection(objectEvent, sprite, DIR_EAST, GetAcroUnusedActionDirectionAnimNum(DIR_EAST));
return FALSE;
}
@@ -7851,25 +7849,25 @@ static bool8 MovementAction_AcroWheelieJumpRight_Step1(struct ObjectEvent *objec
static bool8 MovementActionFunc_x88_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- sub_80656C4(objectEvent, sprite, DIR_SOUTH, GetFishingDirectionAnimNum(DIR_SOUTH), 8);
+ sub_80656C4(objectEvent, sprite, DIR_SOUTH, GetAcroWheeliePedalDirectionAnimNum(DIR_SOUTH), 8);
return MovementAction_WalkInPlace_Step1(objectEvent, sprite);
}
static bool8 MovementActionFunc_x89_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- sub_80656C4(objectEvent, sprite, DIR_NORTH, GetFishingDirectionAnimNum(DIR_NORTH), 8);
+ sub_80656C4(objectEvent, sprite, DIR_NORTH, GetAcroWheeliePedalDirectionAnimNum(DIR_NORTH), 8);
return MovementAction_WalkInPlace_Step1(objectEvent, sprite);
}
static bool8 MovementActionFunc_x8A_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- sub_80656C4(objectEvent, sprite, DIR_WEST, GetFishingDirectionAnimNum(DIR_WEST), 8);
+ sub_80656C4(objectEvent, sprite, DIR_WEST, GetAcroWheeliePedalDirectionAnimNum(DIR_WEST), 8);
return MovementAction_WalkInPlace_Step1(objectEvent, sprite);
}
static bool8 MovementActionFunc_x8B_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- sub_80656C4(objectEvent, sprite, DIR_EAST, GetFishingDirectionAnimNum(DIR_EAST), 8);
+ sub_80656C4(objectEvent, sprite, DIR_EAST, GetAcroWheeliePedalDirectionAnimNum(DIR_EAST), 8);
return MovementAction_WalkInPlace_Step1(objectEvent, sprite);
}
@@ -7947,7 +7945,7 @@ static bool8 MovementAction_AcroPopWheelieMoveRight_Step1(struct ObjectEvent *ob
void sub_806751C(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed)
{
npc_apply_direction(objectEvent, sprite, direction, speed);
- npc_apply_anim_looping(objectEvent, sprite, GetFishingDirectionAnimNum(objectEvent->facingDirection));
+ npc_apply_anim_looping(objectEvent, sprite, GetAcroWheeliePedalDirectionAnimNum(objectEvent->facingDirection));
}
static bool8 MovementAction_AcroWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
@@ -8017,7 +8015,7 @@ static bool8 MovementAction_AcroWheelieMoveRight_Step1(struct ObjectEvent *objec
void sub_806764C(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed)
{
npc_apply_direction(objectEvent, sprite, direction, speed);
- npc_apply_anim_looping(objectEvent, sprite, GetAcroUnusedActionDirectionAnimNum(objectEvent->facingDirection));
+ npc_apply_anim_looping(objectEvent, sprite, sub_80634C0(objectEvent->facingDirection));
SeekSpriteAnim(sprite, 0);
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 89b90ca92..ee413df2d 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -105,11 +105,11 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
{
if (GetPlayerSpeed() != 4)
{
- if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & 0x40))
+ if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING))
input->pressedStartButton = TRUE;
if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3)
{
- if (!(gPlayerAvatar.flags & 0x40))
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING))
{
if (newKeys & SELECT_BUTTON)
input->pressedSelectButton = TRUE;
@@ -625,7 +625,7 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB
return TRUE;
if (TryStartStepCountScript(metatileBehavior) == TRUE)
return TRUE;
- if (!(gPlayerAvatar.flags & 0x40) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior) && UpdateRepelCounter() == TRUE)
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior) && UpdateRepelCounter() == TRUE)
return TRUE;
return FALSE;
}
@@ -655,7 +655,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
UpdateHappinessStepCounter();
- if (!(gPlayerAvatar.flags & 0x40) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
{
if (sub_810C4EC() == TRUE)
{
@@ -839,7 +839,7 @@ static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8
else if (sub_806DB84(metatileBehavior, direction) == TRUE)
{
delay = 0;
- if (gPlayerAvatar.flags & 6)
+ if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
SetPlayerAvatarTransitionFlags(1);
delay = 12;
@@ -906,7 +906,7 @@ static bool8 IsWarpMetatileBehavior(u16 metatileBehavior)
return TRUE;
if (MetatileBehavior_IsEscalator(metatileBehavior) == TRUE)
return TRUE;
- if (MetatileBehavior_IsCaveDoor(metatileBehavior) == TRUE)
+ if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE)
return TRUE;
if (MetatileBehavior_IsLavaridgeB1FWarp(metatileBehavior) == TRUE)
return TRUE;
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 10d6b3d72..03190c095 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -29,9 +29,9 @@ static void sub_807DF4C(u8 a0);
static void sub_807DFBC(u8 taskId);
static void task_map_chg_seq_0807E20C(u8 taskId);
static void task_map_chg_seq_0807E2CC(u8 taskId);
-static void sub_807E31C(u8 taskId);
+static void Task_TeleportWarpIn(u8 taskId);
static void sub_807E718(u8 taskId);
-static void sub_807E784(u8 taskId);
+static void Task_TeleportWarp(u8 taskId);
static void sub_807E80C(u8 taskId);
static void sub_807E980(u8 taskId);
static void sub_807EB64(u16, s16*, s16*);
@@ -126,12 +126,12 @@ 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)
{
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
DestroyTask(taskId);
}
@@ -145,7 +145,7 @@ void sub_807DCE4(void)
static void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskId)
{
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
DestroyTask(taskId);
EnableBothScriptContexts();
@@ -184,7 +184,7 @@ static void task_mpl_807DD60(u8 taskId)
}
break;
case 2:
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
ScriptContext2_Disable();
DestroyTask(taskId);
@@ -218,7 +218,7 @@ static void sub_807DDF0(u8 taskId)
}
break;
case 2:
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
sub_8009FE8();
ScriptContext2_Disable();
@@ -260,7 +260,7 @@ static void sub_807DE78(bool8 a0)
else
{
sub_807DF4C(a0);
- if (MetatileBehavior_IsCaveDoor(behavior) == TRUE)
+ if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE)
func = task_map_chg_seq_0807E20C;
else if (MetatileBehavior_IsUnknownWarp6C_to_6F(behavior) == TRUE)
{
@@ -284,7 +284,7 @@ static void sub_807DF4C(bool8 a0)
FadeInFromBlack();
}
-void sub_807DF64(void)
+void FieldCB_UnionRoomWarp(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
@@ -300,13 +300,13 @@ void sub_807DF7C(void)
ScriptContext2_Enable();
}
-static void sub_807DF94(void)
+static void FieldCB_TeleportWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
PlaySE(SE_TK_WARPOUT);
- CreateTask(sub_807E31C, 10);
+ CreateTask(Task_TeleportWarpIn, 10);
ScriptContext2_Enable();
}
@@ -363,7 +363,7 @@ static void sub_807DFBC(u8 taskId)
}
break;
case 9:
- if (sub_807E418() && walkrun_is_standing_still() && !FieldIsDoorAnimationRunning() && !FuncIsActiveTask(Task_BarnDoorWipe))
+ if (FieldFadeTransitionBackgroundEffectIsFinished() && walkrun_is_standing_still() && !FieldIsDoorAnimationRunning() && !FuncIsActiveTask(Task_BarnDoorWipe))
{
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]);
task->data[0] = 4;
@@ -371,7 +371,7 @@ static void sub_807DFBC(u8 taskId)
break;
// Legacy RS
case 1:
- if (sub_807E418())
+ if (FieldFadeTransitionBackgroundEffectIsFinished())
{
sub_807DCB0(TRUE);
ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN);
@@ -413,7 +413,7 @@ static void task_map_chg_seq_0807E20C(u8 taskId)
task->data[0] = 1;
break;
case 1:
- if (sub_807E418())
+ if (FieldFadeTransitionBackgroundEffectIsFinished())
{
sub_807DCB0(TRUE);
ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], GetWalkNormalMovementAction(GetPlayerFacingDirection()));
@@ -444,7 +444,7 @@ static void task_map_chg_seq_0807E2CC(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 1:
- if (sub_807E418())
+ if (FieldFadeTransitionBackgroundEffectIsFinished())
{
UnfreezeObjectEvents();
ScriptContext2_Disable();
@@ -454,18 +454,18 @@ static void task_map_chg_seq_0807E2CC(u8 taskId)
}
}
-static void sub_807E31C(u8 taskId)
+static void Task_TeleportWarpIn(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
FreezeObjectEvents();
ScriptContext2_Enable();
- sub_805DC04();
+ StartTeleportInPlayerAnim();
gTasks[taskId].data[0]++;
break;
case 1:
- if (sub_807E418() && sub_805DC24() != TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() && WaitTeleportInPlayerAnim() != TRUE)
{
UnfreezeObjectEvents();
ScriptContext2_Disable();
@@ -477,7 +477,7 @@ static void sub_807E31C(u8 taskId)
static void Task_WaitFadeAndCreateStartMenuTask(u8 taskId)
{
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
DestroyTask(taskId);
CreateTask(Task_StartMenuHandleInput, 80);
@@ -499,7 +499,7 @@ bool8 FieldCB2_ReturnToStartMenuInit(void)
static void task_mpl_807E3C8(u8 taskId)
{
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
ScriptContext2_Disable();
DestroyTask(taskId);
@@ -515,12 +515,12 @@ void sub_807E3EC(void)
CreateTask(task_mpl_807E3C8, 10);
}
-static bool32 sub_807E40C(void)
+static bool32 WaitWarpFadeOutScreen(void)
{
return gPaletteFade.active;
}
-bool32 sub_807E418(void)
+bool32 FieldFadeTransitionBackgroundEffectIsFinished(void)
{
if (IsWeatherNotFadingIn() == TRUE && ForestMapPreviewScreenIsRunning())
return TRUE;
@@ -535,7 +535,7 @@ void DoWarp(void)
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = sub_807DF64;
+ gFieldCallback = FieldCB_UnionRoomWarp;
CreateTask(sub_807E718, 10);
}
@@ -545,7 +545,7 @@ void DoDiveWarp(void)
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
- gFieldCallback = sub_807DF64;
+ gFieldCallback = FieldCB_UnionRoomWarp;
CreateTask(sub_807E718, 10);
}
@@ -560,7 +560,7 @@ void sub_807E4A0(u16 metatileBehavior, u16 delay)
void DoDoorWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = sub_807DF64;
+ gFieldCallback = FieldCB_UnionRoomWarp;
CreateTask(sub_807E80C, 10);
}
@@ -568,14 +568,14 @@ void sub_807E500(void)
{
ScriptContext2_Enable();
CreateTask(sub_807E718, 10);
- gFieldCallback = sub_807DF94;
+ gFieldCallback = FieldCB_TeleportWarpIn;
}
void DoUnionRoomWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = sub_807DF64;
- CreateTask(sub_807E784, 10);
+ gFieldCallback = FieldCB_UnionRoomWarp;
+ CreateTask(Task_TeleportWarp, 10);
}
void DoFallWarp(void)
@@ -606,8 +606,8 @@ void DoTeleportWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
- CreateTask(sub_807E784, 10);
- gFieldCallback = sub_807DF94;
+ CreateTask(Task_TeleportWarp, 10);
+ gFieldCallback = FieldCB_TeleportWarpIn;
}
void sub_807E5C4(void)
@@ -628,7 +628,7 @@ static void sub_807E5EC(u8 taskId)
task->data[0]++;
break;
case 1:
- if (!sub_807E40C() && BGMusicStopped())
+ if (!WaitWarpFadeOutScreen() && BGMusicStopped())
task->data[0]++;
break;
case 2:
@@ -661,7 +661,7 @@ static void sub_807E678(u8 taskId)
data[0]++;
break;
case 1:
- if (!sub_807E40C() && BGMusicStopped())
+ if (!WaitWarpFadeOutScreen() && BGMusicStopped())
{
Link_TryStartSend5FFF();
data[0]++;
@@ -694,7 +694,7 @@ static void sub_807E718(u8 taskId)
task->data[0]++;
break;
case 1:
- if (!sub_807E40C() && BGMusicStopped())
+ if (!WaitWarpFadeOutScreen() && BGMusicStopped())
task->data[0]++;
break;
case 2:
@@ -705,7 +705,7 @@ static void sub_807E718(u8 taskId)
}
}
-static void sub_807E784(u8 taskId)
+static void Task_TeleportWarp(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
@@ -714,18 +714,18 @@ static void sub_807E784(u8 taskId)
FreezeObjectEvents();
ScriptContext2_Enable();
PlaySE(SE_TK_WARPIN);
- sub_805DAB0();
+ StartTeleportWarpOutPlayerAnim();
task->data[0]++;
break;
case 1:
- if (!sub_805DAD0())
+ if (!WaitTeleportWarpOutPlayerAnim())
{
WarpFadeOutScreen();
task->data[0]++;
}
break;
case 2:
- if (!sub_807E40C() && BGMusicStopped())
+ if (!WaitWarpFadeOutScreen() && BGMusicStopped())
task->data[0]++;
break;
case 3:
@@ -829,11 +829,11 @@ static void sub_807E980(u8 taskId)
break;
case 3:
sub_807EAC4(data[2], data[3], &data[4], &data[5], &data[6]);
- if (!sub_807E40C() && BGMusicStopped())
+ if (!WaitWarpFadeOutScreen() && BGMusicStopped())
data[0]++;
break;
default:
- gFieldCallback = sub_807DF64;
+ gFieldCallback = FieldCB_UnionRoomWarp;
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
DestroyTask(taskId);
@@ -898,7 +898,7 @@ static void sub_807EC34(u8 taskId)
switch (data[0])
{
default:
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
CameraObjectReset1();
ScriptContext2_Disable();
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
new file mode 100644
index 000000000..481e55578
--- /dev/null
+++ b/src/field_player_avatar.c
@@ -0,0 +1,2165 @@
+#include "global.h"
+#include "gflib.h"
+#include "bike.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "fieldmap.h"
+#include "field_camera.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_effect_helpers.h"
+#include "field_player_avatar.h"
+#include "help_system.h"
+#include "metatile_behavior.h"
+#include "new_menu_helpers.h"
+#include "overworld.h"
+#include "party_menu.h"
+#include "quest_log.h"
+#include "quest_log_player.h"
+#include "random.h"
+#include "script.h"
+#include "strings.h"
+#include "wild_encounter.h"
+#include "constants/event_object_movement.h"
+#include "constants/event_objects.h"
+#include "constants/songs.h"
+#include "constants/flags.h"
+#include "constants/metatile_behaviors.h"
+#include "constants/species.h"
+#include "constants/moves.h"
+
+static EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL;
+static EWRAM_DATA u8 sTeleportSavedFacingDirection = DIR_NONE;
+EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {};
+EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {};
+
+static u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite);
+static bool8 sub_805B528(void);
+static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent * playerObjEvent, u8 direction);
+static void npc_clear_strange_bits(struct ObjectEvent * playerObjEvent);
+static bool8 TryDoMetatileBehaviorForcedMovement(void);
+static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys);
+static void PlayerAllowForcedMovementIfMovingSameDirection(void);
+static bool8 ForcedMovement_None(void);
+static bool8 ForcedMovement_Slip(void);
+static bool8 ForcedMovement_WalkSouth(void);
+static bool8 ForcedMovement_WalkNorth(void);
+static bool8 ForcedMovement_WalkWest(void);
+static bool8 ForcedMovement_WalkEast(void);
+static bool8 ForcedMovement_SpinRight(void);
+static bool8 ForcedMovement_SpinLeft(void);
+static bool8 ForcedMovement_SpinUp(void);
+static bool8 ForcedMovement_SpinDown(void);
+static void PlaySpinSound(void);
+static bool8 ForcedMovement_PushedSouthByCurrent(void);
+static bool8 ForcedMovement_PushedNorthByCurrent(void);
+static bool8 ForcedMovement_PushedWestByCurrent(void);
+static bool8 ForcedMovement_PushedEastByCurrent(void);
+static bool8 ForcedMovement_SlideSouth(void);
+static bool8 ForcedMovement_SlideNorth(void);
+static bool8 ForcedMovement_SlideWest(void);
+static bool8 ForcedMovement_SlideEast(void);
+static bool8 ForcedMovement_0xBB(void);
+static bool8 ForcedMovement_0xBC(void);
+static u8 CheckMovementInputNotOnBike(u8 direction);
+static void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys);
+static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys);
+static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys);
+static u8 CheckForPlayerAvatarCollision(u8 direction);
+u8 CheckForObjectEventCollision(struct ObjectEvent * objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior);
+static bool8 CanStopSurfing(s16 x, s16 y, u8 direction);
+static bool8 ShouldJumpLedge(s16 x, s16 y, u8 direction);
+static bool8 TryPushBoulder(s16 x, s16 y, u8 direction);
+static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision);
+static void DoPlayerAvatarTransition(void);
+static void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObject);
+static void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObject);
+static void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObject);
+static void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObject);
+static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObject);
+static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObject);
+static bool8 PlayerIsAnimActive(void);
+static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
+static bool8 player_is_anim_in_certain_ranges(void);
+static bool8 sub_805BF58(void);
+static void PlayCollisionSoundIfNotFacingWarp(u8 direction);
+static void PlayerGoSpin(u8 direction);
+static void sub_805C2CC(u8 metatileBehavior);
+static bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y);
+static void sub_805CC40(struct ObjectEvent * playerObjEvent);
+static void StartStrengthAnim(u8 objectEventId, u8 direction);
+static void Task_BumpBoulder(u8 taskId);
+static bool8 sub_805CD64(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+static bool8 do_boulder_dust(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+static bool8 sub_805CE20(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+static void DoPlayerMatJump(void);
+static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
+static bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task * task, struct ObjectEvent * playerObj);
+static void DoPlayerMatSpin(void);
+static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId);
+static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task * task, struct ObjectEvent * playerObj);
+static void CreateStopSurfingTask(u8 direction);
+static void Task_StopSurfingInit(u8 taskId);
+static void Task_WaitStopSurfing(u8 taskId);
+static void Task_Fishing(u8 taskId);
+static bool8 Fishing1(struct Task * task);
+static bool8 Fishing2(struct Task * task);
+static bool8 Fishing3(struct Task * task);
+static bool8 Fishing4(struct Task * task);
+static bool8 Fishing5(struct Task * task);
+static bool8 Fishing6(struct Task * task);
+static bool8 Fishing7(struct Task * task);
+static bool8 Fishing8(struct Task * task);
+static bool8 Fishing9(struct Task * task);
+static bool8 Fishing10(struct Task * task);
+static bool8 Fishing11(struct Task * task);
+static bool8 Fishing12(struct Task * task);
+static bool8 Fishing13(struct Task * task);
+static bool8 Fishing14(struct Task * task);
+static bool8 Fishing15(struct Task * task);
+static bool8 Fishing16(struct Task * task);
+static void Task_TeleportWarpOutPlayerAnim(u8 taskId);
+static void Task_TeleportWarpInPlayerAnim(u8 taskId);
+static u8 TeleportAnim_RotatePlayer(struct ObjectEvent * object, s16 *timer);
+
+void MovementType_Player(struct Sprite *sprite)
+{
+ UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, ObjectEventCB2_NoMovement2);
+}
+
+static u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite)
+{
+ return 0;
+}
+
+void player_step(u8 direction, u16 newKeys, u16 heldKeys)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ sub_805CC40(playerObjEvent);
+ if (!gPlayerAvatar.preventStep && !sub_805B528())
+ {
+ if (!TryInterruptObjectEventSpecialAnim(playerObjEvent, direction))
+ {
+ npc_clear_strange_bits(playerObjEvent);
+ DoPlayerAvatarTransition();
+ if (!TryDoMetatileBehaviorForcedMovement())
+ {
+ MovePlayerAvatarUsingKeypadInput(direction, newKeys, heldKeys);
+ PlayerAllowForcedMovementIfMovingSameDirection();
+ }
+ }
+ }
+}
+
+static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 direction)
+{
+
+ if (ObjectEventIsMovementOverridden(playerObjEvent)
+ && !ObjectEventClearHeldMovementIfFinished(playerObjEvent))
+ {
+ u8 heldMovementActionId = ObjectEventGetHeldMovementActionId(playerObjEvent);
+ if (heldMovementActionId > MOVEMENT_ACTION_WALK_FAST_RIGHT && heldMovementActionId < MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN)
+ {
+ if (direction != DIR_NONE && playerObjEvent->movementDirection != direction)
+ {
+ ObjectEventClearHeldMovement(playerObjEvent);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void npc_clear_strange_bits(struct ObjectEvent *objEvent)
+{
+ objEvent->inanimate = FALSE;
+ objEvent->disableAnim = FALSE;
+ objEvent->facingDirectionLocked = FALSE;
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_WATERING;
+}
+
+static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys)
+{
+ if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
+ || (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ MovePlayerOnBike(direction, newKeys, heldKeys);
+ else
+ MovePlayerNotOnBike(direction, heldKeys);
+}
+
+static void PlayerAllowForcedMovementIfMovingSameDirection(void)
+{
+ if (gPlayerAvatar.runningState == MOVING)
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FIELD_MOVE;
+}
+
+static bool8 sub_805B528(void)
+{
+ if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && MetatileBehavior_IsSpinTile(gPlayerAvatar.lastSpinTile))
+ {
+ gUnknown_2036E30 = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (gUnknown_2036E30->heldMovementFinished)
+ {
+ if (MetatileBehavior_IsStopSpinning(gUnknown_2036E30->currentMetatileBehavior))
+ {
+ return FALSE;
+ }
+ if (MetatileBehavior_IsSpinTile(gUnknown_2036E30->currentMetatileBehavior))
+ {
+ gPlayerAvatar.lastSpinTile = gUnknown_2036E30->currentMetatileBehavior;
+ }
+ ObjectEventClearHeldMovement(gUnknown_2036E30);
+ sub_805C2CC(gPlayerAvatar.lastSpinTile);
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static const struct {
+ bool8 (*unk0)(u8 metatileBehavior);
+ bool8 (*unk4)(void);
+} sForcedMovementFuncs[] = {
+ {MetatileBehavior_IsUnknownMovement48, ForcedMovement_Slip},
+ {MetatileBehavior_IsIce_2, ForcedMovement_Slip},
+ {MetatileBehavior_IsWalkSouth, ForcedMovement_WalkSouth},
+ {MetatileBehavior_IsWalkNorth, ForcedMovement_WalkNorth},
+ {MetatileBehavior_IsWalkWest, ForcedMovement_WalkWest},
+ {MetatileBehavior_IsWalkEast, ForcedMovement_WalkEast},
+ {MetatileBehavior_IsSouthwardCurrent, ForcedMovement_PushedSouthByCurrent},
+ {MetatileBehavior_IsNorthwardCurrent, ForcedMovement_PushedNorthByCurrent},
+ {MetatileBehavior_IsWestwardCurrent, ForcedMovement_PushedWestByCurrent},
+ {MetatileBehavior_IsEastwardCurrent, ForcedMovement_PushedEastByCurrent},
+ {MetatileBehavior_IsSpinRight, ForcedMovement_SpinRight},
+ {MetatileBehavior_IsSpinLeft, ForcedMovement_SpinLeft},
+ {MetatileBehavior_IsSpinUp, ForcedMovement_SpinUp},
+ {MetatileBehavior_IsSpinDown, ForcedMovement_SpinDown},
+ {MetatileBehavior_IsSlideSouth, ForcedMovement_SlideSouth},
+ {MetatileBehavior_IsSlideNorth, ForcedMovement_SlideNorth},
+ {MetatileBehavior_IsSlideWest, ForcedMovement_SlideWest},
+ {MetatileBehavior_IsSlideEast, ForcedMovement_SlideEast},
+ {MetatileBehavior_IsWaterfall, ForcedMovement_PushedSouthByCurrent},
+ {MetatileBehavior_UnusedReturnFalse_7, ForcedMovement_0xBB},
+ {MetatileBehavior_UnusedReturnFalse_8, ForcedMovement_0xBC},
+ {NULL, ForcedMovement_None},
+};
+
+static bool8 TryDoMetatileBehaviorForcedMovement(void)
+{
+ int i;
+ u8 behavior;
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FIELD_MOVE))
+ {
+ behavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior;
+ for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
+ {
+ if (sForcedMovementFuncs[i].unk0(behavior))
+ {
+ gPlayerAvatar.lastSpinTile = behavior;
+ return sForcedMovementFuncs[i].unk4();
+ }
+ }
+ return sForcedMovementFuncs[i].unk4();
+ }
+ else
+ {
+ for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
+ ;
+ return sForcedMovementFuncs[i].unk4();
+ }
+}
+
+static bool8 ForcedMovement_None(void)
+{
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING)
+ {
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ playerObjEvent->facingDirectionLocked = FALSE;
+ playerObjEvent->enableAnim = TRUE;
+ SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FISHING;
+ }
+ return FALSE;
+}
+
+static u8 DoForcedMovement(u8 direction, MovementAction movementAction)
+{
+ struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
+ u8 collision = CheckForPlayerAvatarCollision(direction);
+
+ playerAvatar->flags |= PLAYER_AVATAR_FLAG_FISHING;
+ if (collision)
+ {
+ ForcedMovement_None();
+ if (collision < COLLISION_STOP_SURFING)
+ {
+ return 0;
+ }
+ else
+ {
+ if (collision == COLLISION_LEDGE_JUMP)
+ PlayerJumpLedge(direction);
+ playerAvatar->flags |= PLAYER_AVATAR_FLAG_FISHING;
+ playerAvatar->runningState = MOVING;
+ return 1;
+ }
+ }
+ else
+ {
+ playerAvatar->runningState = MOVING;
+ movementAction(direction);
+ return 1;
+ }
+}
+
+static u8 DoForcedMovementInCurrentDirection(MovementAction movementAction)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ playerObjEvent->disableAnim = TRUE;
+ return DoForcedMovement(playerObjEvent->movementDirection, movementAction);
+}
+
+static bool8 ForcedMovement_Slip(void)
+{
+ return DoForcedMovementInCurrentDirection(PlayerGoSpeed2);
+}
+
+static bool8 ForcedMovement_WalkSouth(void)
+{
+ return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed1);
+}
+
+static bool8 ForcedMovement_WalkNorth(void)
+{
+ return DoForcedMovement(DIR_NORTH, PlayerGoSpeed1);
+}
+
+static bool8 ForcedMovement_WalkWest(void)
+{
+ return DoForcedMovement(DIR_WEST, PlayerGoSpeed1);
+}
+
+static bool8 ForcedMovement_WalkEast(void)
+{
+ return DoForcedMovement(DIR_EAST, PlayerGoSpeed1);
+}
+
+static bool8 ForcedMovement_SpinRight(void)
+{
+ PlaySpinSound();
+ return DoForcedMovement(DIR_EAST, PlayerGoSpin);
+}
+
+static bool8 ForcedMovement_SpinLeft(void)
+{
+ PlaySpinSound();
+ return DoForcedMovement(DIR_WEST, PlayerGoSpin);
+}
+
+static bool8 ForcedMovement_SpinUp(void)
+{
+ PlaySpinSound();
+ return DoForcedMovement(DIR_NORTH, PlayerGoSpin);
+}
+
+static bool8 ForcedMovement_SpinDown(void)
+{
+ PlaySpinSound();
+ return DoForcedMovement(DIR_SOUTH, PlayerGoSpin);
+}
+
+static void PlaySpinSound(void)
+{
+ PlaySE(SE_W013B);
+}
+
+static bool8 ForcedMovement_PushedSouthByCurrent(void)
+{
+ return DoForcedMovement(DIR_SOUTH, PlayerRideWaterCurrent);
+}
+
+static bool8 ForcedMovement_PushedNorthByCurrent(void)
+{
+ return DoForcedMovement(DIR_NORTH, PlayerRideWaterCurrent);
+}
+
+static bool8 ForcedMovement_PushedWestByCurrent(void)
+{
+ return DoForcedMovement(DIR_WEST, PlayerRideWaterCurrent);
+}
+
+static bool8 ForcedMovement_PushedEastByCurrent(void)
+{
+ return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent);
+}
+
+static u8 ForcedMovement_Slide(u8 direction, MovementAction movementAction)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ playerObjEvent->disableAnim = TRUE;
+ playerObjEvent->facingDirectionLocked = TRUE;
+ return DoForcedMovement(direction, movementAction);
+}
+
+static bool8 ForcedMovement_SlideSouth(void)
+{
+ return ForcedMovement_Slide(DIR_SOUTH, PlayerGoSpeed2);
+}
+
+static bool8 ForcedMovement_SlideNorth(void)
+{
+ return ForcedMovement_Slide(DIR_NORTH, PlayerGoSpeed2);
+}
+
+static bool8 ForcedMovement_SlideWest(void)
+{
+ return ForcedMovement_Slide(DIR_WEST, PlayerGoSpeed2);
+}
+
+static bool8 ForcedMovement_SlideEast(void)
+{
+ return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2);
+}
+
+static bool8 ForcedMovement_0xBB(void)
+{
+ DoPlayerMatJump();
+ return TRUE;
+}
+
+static bool8 ForcedMovement_0xBC(void)
+{
+ DoPlayerMatSpin();
+ return TRUE;
+}
+
+static void (*const gUnknown_835B814[])(u8, u16) = {
+ PlayerNotOnBikeNotMoving,
+ PlayerNotOnBikeTurningInPlace,
+ PlayerNotOnBikeMoving
+};
+
+void MovePlayerNotOnBike(u8 direction, u16 heldKeys)
+{
+ gUnknown_835B814[CheckMovementInputNotOnBike(direction)](direction, heldKeys);
+}
+
+static u8 CheckMovementInputNotOnBike(u8 direction)
+{
+ if (direction == DIR_NONE)
+ {
+ gPlayerAvatar.runningState = NOT_MOVING;
+ return 0;
+ }
+ else if (direction != GetPlayerMovementDirection() && gPlayerAvatar.runningState != MOVING)
+ {
+ gPlayerAvatar.runningState = TURN_DIRECTION;
+ return 1;
+ }
+ else
+ {
+ gPlayerAvatar.runningState = MOVING;
+ return 2;
+ }
+}
+
+static void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys)
+{
+ PlayerFaceDirection(GetPlayerFacingDirection());
+}
+
+static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys)
+{
+ PlayerTurnInPlace(direction);
+}
+
+static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys)
+{
+ u8 collision = CheckForPlayerAvatarCollision(direction);
+
+ if (collision != COLLISION_NONE)
+ {
+ if (collision == COLLISION_LEDGE_JUMP)
+ {
+ PlayerJumpLedge(direction);
+ }
+ else if (collision == COLLISION_UNKNOWN_WARP_6C_6D_6E_6F)
+ {
+ PlayerFaceDirection(direction);
+ }
+ else if (collision != COLLISION_STOP_SURFING && collision != COLLISION_LEDGE_JUMP && collision != COLLISION_PUSHED_BOULDER && collision != COLLISION_UNKNOWN_WARP_6C_6D_6E_6F)
+ {
+ PlayerNotOnBikeCollide(direction);
+ }
+ return;
+ }
+
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ {
+ // speed 2 is fast, same speed as running
+ PlayerGoSpeed2(direction);
+ return;
+ }
+
+ if ((heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH)
+ && !IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior))
+ {
+ if (PlayerIsMovingOnRockStairs(direction))
+ PlayerRunSlow(direction);
+ else
+ PlayerRun(direction);
+ gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_WATERING;
+ return;
+ }
+ else
+ {
+ if (PlayerIsMovingOnRockStairs(direction))
+ PlayerGoSlow(direction);
+ else
+ PlayerGoSpeed1(direction);
+ }
+}
+
+bool32 PlayerIsMovingOnRockStairs(u8 direction)
+{
+ struct ObjectEvent * objectEvent;
+ s16 x, y;
+
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ x = objectEvent->currentCoords.x;
+ y = objectEvent->currentCoords.y;
+ switch (direction)
+ {
+ case DIR_NORTH:
+ return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y));
+ case DIR_SOUTH:
+ MoveCoords(DIR_SOUTH, &x, &y);
+ return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y));
+ default:
+ return FALSE;
+ }
+}
+
+static u8 CheckForPlayerAvatarCollision(u8 direction)
+{
+ s16 x, y;
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ x = playerObjEvent->currentCoords.x;
+ y = playerObjEvent->currentCoords.y;
+ if (sub_806DB84(MapGridGetMetatileBehaviorAt(x, y), direction))
+ return 8;
+ MoveCoords(direction, &x, &y);
+ return CheckForObjectEventCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y));
+}
+
+u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior)
+{
+ u8 collision = GetCollisionAtCoords(objectEvent, x, y, direction);
+ if (collision == COLLISION_ELEVATION_MISMATCH && CanStopSurfing(x, y, direction))
+ return COLLISION_STOP_SURFING;
+
+ if (ShouldJumpLedge(x, y, direction))
+ {
+ IncrementGameStat(GAME_STAT_JUMPED_DOWN_LEDGES);
+ return COLLISION_LEDGE_JUMP;
+ }
+ if (collision == COLLISION_OBJECT_EVENT && TryPushBoulder(x, y, direction))
+ return COLLISION_PUSHED_BOULDER;
+
+ if (collision == COLLISION_NONE)
+ {
+ CheckAcroBikeCollision(x, y, metatileBehavior, &collision);
+ }
+ return collision;
+}
+
+static const u8 gUnknown_835B820[] = {
+ MOVEMENT_ACTION_FACE_DOWN_FAST,
+ MOVEMENT_ACTION_FACE_DOWN_FAST,
+ MOVEMENT_ACTION_FACE_UP_FAST,
+ MOVEMENT_ACTION_FACE_LEFT_FAST,
+ MOVEMENT_ACTION_FACE_RIGHT_FAST
+};
+
+static bool8 CanStopSurfing(s16 x, s16 y, u8 direction)
+{
+ if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ && MapGridGetZCoordAt(x, y) == 3
+ && GetObjectEventIdByXYZ(x, y, 3) == OBJECT_EVENTS_COUNT)
+ {
+ sub_811278C(gUnknown_835B820[direction], 16);
+ CreateStopSurfingTask(direction);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static bool8 ShouldJumpLedge(s16 x, s16 y, u8 z)
+{
+ if (GetLedgeJumpDirection(x, y, z) != 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 TryPushBoulder(s16 x, s16 y, u8 direction)
+{
+ u8 objectEventId;
+ u8 direction_ = direction;
+ if (!FlagGet(FLAG_SYS_USE_STRENGTH))
+ return FALSE;
+
+ objectEventId = GetObjectEventIdByXY(x, y);
+ if (objectEventId == OBJECT_EVENTS_COUNT)
+ return FALSE;
+
+ if (gObjectEvents[objectEventId].graphicsId != OBJ_EVENT_GFX_PUSHABLE_BOULDER)
+ return FALSE;
+
+ x = gObjectEvents[objectEventId].currentCoords.x;
+ y = gObjectEvents[objectEventId].currentCoords.y;
+ MoveCoords(direction_, &x, &y);
+ if (MapGridGetMetatileBehaviorAt(x, y) == MB_FALL_WARP || (GetCollisionAtCoords(&gObjectEvents[objectEventId], x, y, direction_) == COLLISION_NONE && !MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ StartStrengthAnim(objectEventId, direction_);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static bool8 (*const gUnknown_835B828[])(u8) = {
+ MetatileBehavior_IsBumpySlope,
+ MetatileBehavior_IsIsolatedVerticalRail,
+ MetatileBehavior_IsIsolatedHorizontalRail,
+ MetatileBehavior_IsVerticalRail,
+ MetatileBehavior_IsHorizontalRail
+};
+
+static const u8 gUnknown_835B83C[] = {
+ COLLISION_WHEELIE_HOP,
+ COLLISION_ISOLATED_VERTICAL_RAIL,
+ COLLISION_ISOLATED_HORIZONTAL_RAIL,
+ COLLISION_VERTICAL_RAIL,
+ COLLISION_HORIZONTAL_RAIL,
+};
+
+static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision)
+{
+ u8 i;
+
+ for (i = 0; i < NELEMS(gUnknown_835B828); i++)
+ {
+ if (gUnknown_835B828[i](metatileBehavior))
+ {
+ *collision = gUnknown_835B83C[i];
+ return;
+ }
+ }
+}
+
+void SetPlayerAvatarTransitionFlags(bool16 flags)
+{
+ gPlayerAvatar.transitionFlags |= flags;
+ DoPlayerAvatarTransition();
+}
+
+static void (*const gUnknown_835B844[])(struct ObjectEvent *) = {
+ [PLAYER_AVATAR_STATE_NORMAL] = PlayerAvatarTransition_Normal,
+ [PLAYER_AVATAR_STATE_MACH_BIKE] = PlayerAvatarTransition_Bike,
+ [PLAYER_AVATAR_STATE_ACRO_BIKE] = PlayerAvatarTransition_Bike,
+ [PLAYER_AVATAR_STATE_SURFING] = PlayerAvatarTransition_Surfing,
+ [PLAYER_AVATAR_STATE_UNDERWATER] = PlayerAvatarTransition_Underwater,
+ [PLAYER_AVATAR_STATE_FIELD_MOVE] = PlayerAvatarTransition_ReturnToField,
+ [PLAYER_AVATAR_STATE_FISHING] = PlayerAvatarTransition_Dummy,
+ [PLAYER_AVATAR_STATE_WATERING] = PlayerAvatarTransition_Dummy
+};
+
+static void DoPlayerAvatarTransition(void)
+{
+ u8 i;
+ u8 flags = gPlayerAvatar.transitionFlags;
+
+ if (flags != 0)
+ {
+ for (i = 0; i < NELEMS(gUnknown_835B844); i++, flags >>= 1)
+ {
+ if (flags & 1)
+ gUnknown_835B844[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
+ }
+ gPlayerAvatar.transitionFlags = 0;
+ }
+}
+
+static void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObjEvent)
+{
+
+}
+
+static void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObjEvent)
+{
+ sub_8150474(0);
+ sub_8150498(0);
+}
+
+static void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent)
+{
+ sub_8150474(1);
+ sub_8150498(1);
+ sub_80BD620(0, 0);
+}
+
+static void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent)
+{
+ sub_8150474(3);
+ sub_8150498(3);
+}
+
+static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEvent)
+{
+
+}
+
+static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent)
+{
+ gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FIELD_MOVE;
+}
+
+void sub_805BEB8(void)
+{
+ gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
+ if (PlayerIsAnimActive())
+ {
+ if (!PlayerCheckIfAnimFinishedOrInactive())
+ {
+ if (!player_is_anim_in_certain_ranges())
+ gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION;
+ }
+ else
+ {
+ if (!sub_805BF58())
+ gPlayerAvatar.tileTransitionState = T_TILE_CENTER;
+ }
+ }
+}
+
+static bool8 player_is_anim_in_certain_ranges(void)
+{
+ u8 movementActionId = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId;
+
+ if (movementActionId <= MOVEMENT_ACTION_FACE_RIGHT_FAST
+ || (movementActionId >= MOVEMENT_ACTION_DELAY_1 && movementActionId <= MOVEMENT_ACTION_DELAY_16)
+ || (movementActionId >= MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN && movementActionId <= MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT)
+ || (movementActionId >= MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN && movementActionId <= MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT)
+ || (movementActionId >= MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN && movementActionId <= MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 sub_805BF58(void)
+{
+ if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 PlayerIsAnimActive(void)
+{
+ return ObjectEventIsMovementOverridden(&gObjectEvents[gPlayerAvatar.objectEventId]);
+}
+
+static bool8 PlayerCheckIfAnimFinishedOrInactive(void)
+{
+ return ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]);
+}
+
+static void PlayerSetCopyableMovement(u8 a)
+{
+ gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = a;
+}
+
+u8 PlayerGetCopyableMovement(void)
+{
+ return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement;
+}
+
+static void PlayerForceSetHeldMovement(u8 a)
+{
+ ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], a);
+}
+
+static void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement)
+{
+ if (!PlayerIsAnimActive())
+ {
+ PlayerSetCopyableMovement(copyableMovement);
+ if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementActionId))
+ sub_8112628(movementActionId);
+ }
+}
+
+static void sub_805C06C(struct ObjectEvent * objectEvent, u8 movementAction)
+{
+ if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementAction))
+ sub_81126AC(movementAction, 0);
+}
+
+static void sub_805C0A4(struct ObjectEvent * objectEvent, u8 movementAction)
+{
+ if (!ObjectEventSetHeldMovement(objectEvent, movementAction))
+ sub_8112588(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, movementAction, 32);
+}
+
+void sub_805C0D4(u8 direction)
+{
+ PlayerSetAnimId(sub_8063F2C(direction), 2);
+}
+
+void PlayerGoSlow(u8 direction)
+{
+ PlayerSetAnimId(GetWalkSlowMovementAction(direction), 2);
+}
+
+void PlayerGoSpeed1(u8 direction)
+{
+ PlayerSetAnimId(GetWalkNormalMovementAction(direction), 2);
+}
+
+void PlayerGoSpeed2(u8 direction)
+{
+ PlayerSetAnimId(GetWalkFastMovementAction(direction), 2);
+}
+
+void sub_805C134(u8 direction)
+{
+ PlayerSetAnimId(sub_8063FDC(direction), 2);
+}
+
+void PlayerRideWaterCurrent(u8 direction)
+{
+ PlayerSetAnimId(sub_8064008(direction), 2);
+}
+
+void sub_805C164(u8 direction)
+{
+ PlayerSetAnimId(GetWalkFastestMovementAction(direction), 2);
+}
+
+void PlayerRun(u8 direction)
+{
+ PlayerSetAnimId(GetPlayerRunMovementAction(direction), 2);
+}
+
+void PlayerRunSlow(u8 direction)
+{
+ PlayerSetAnimId(GetPlayerRunSlowMovementAction(direction), 2);
+}
+
+void PlayerOnBikeCollide(u8 direction)
+{
+ PlayCollisionSoundIfNotFacingWarp(direction);
+ PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(direction), 2);
+}
+
+void PlayerNotOnBikeCollide(u8 direction)
+{
+ PlayCollisionSoundIfNotFacingWarp(direction);
+ PlayerSetAnimId(GetStepInPlaceDelay32AnimId(direction), 2);
+}
+
+void PlayerFaceDirection(u8 direction)
+{
+ PlayerSetAnimId(GetFaceDirectionMovementAction(direction), 1);
+}
+
+void PlayerFaceDirectionFast(u8 direction)
+{
+ PlayerSetAnimId(GetFaceDirectionFastMovementAction(direction), 1);
+}
+
+void PlayerTurnInPlace(u8 direction)
+{
+ PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(direction), 1);
+}
+
+void PlayerJumpLedge(u8 direction)
+{
+ PlaySE(SE_DANSA);
+ PlayerSetAnimId(GetJump2MovementAction(direction), 8);
+}
+
+void sub_805C260(void)
+{
+ PlayerSetAnimId(MOVEMENT_ACTION_0x9F, 0);
+}
+
+void sub_805C270(void)
+{
+ if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
+ {
+ if (player_should_look_direction_be_enforced_upon_movement())
+ PlayerForceSetHeldMovement(GetFaceDirectionMovementAction(gObjectEvents[gPlayerAvatar.objectEventId].facingDirection));
+ }
+}
+
+static void PlayerGoSpin(u8 direction)
+{
+ PlayerSetAnimId(sub_80640E4(direction), 3);
+}
+
+static void sub_805C2CC(u8 metatileBehavior)
+{
+ int i;
+
+ for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
+ {
+ if (sForcedMovementFuncs[i].unk0(metatileBehavior))
+ sForcedMovementFuncs[i].unk4();
+ }
+}
+
+static void PlayerIdleWheelie(u8 direction)
+{
+ PlayerSetAnimId(GetAcroWheelieFaceDirectionMovementAction(direction), 1);
+}
+
+static void PlayerStartWheelie(u8 direction)
+{
+ PlayerSetAnimId(GetAcroPopWheelieFaceDirectionMovementAction(direction), 1);
+}
+
+static void PlayerEndWheelie(u8 direction)
+{
+ PlayerSetAnimId(GetAcroEndWheelieFaceDirectionMovementAction(direction), 1);
+}
+
+static void PlayerStandingHoppingWheelie(u8 direction)
+{
+ PlaySE(SE_JITE_PYOKO);
+ PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(direction), 1);
+}
+
+static void PlayerMovingHoppingWheelie(u8 direction)
+{
+ PlaySE(SE_JITE_PYOKO);
+ PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(direction), 2);
+}
+
+static void PlayerLedgeHoppingWheelie(u8 direction)
+{
+ PlaySE(SE_JITE_PYOKO);
+ PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(direction), 8);
+}
+
+static void PlayerAcroTurnJump(u8 direction)
+{
+ PlaySE(SE_JITE_PYOKO);
+ PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), 1);
+}
+
+static void PlayerAcroWheelieCollide(u8 direction)
+{
+ PlaySE(SE_WALL_HIT);
+ PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), 2);
+}
+
+static void sub_805C408(u8 direction)
+{
+ PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), 2);
+}
+
+static void sub_805C420(u8 direction)
+{
+ PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), 2);
+}
+
+static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = {
+ MetatileBehavior_IsSouthArrowWarp,
+ MetatileBehavior_IsNorthArrowWarp,
+ MetatileBehavior_IsWestArrowWarp,
+ MetatileBehavior_IsEastArrowWarp
+};
+
+static void PlayCollisionSoundIfNotFacingWarp(u8 direction)
+{
+ s16 x, y;
+ u8 metatileBehavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior;
+
+ if (!sArrowWarpMetatileBehaviorChecks[direction - 1](metatileBehavior))
+ {
+ if (direction == DIR_WEST)
+ {
+ if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) || MetatileBehavior_IsUnknownWarp6F(metatileBehavior))
+ return;
+ }
+ if (direction == DIR_EAST)
+ {
+ if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) || MetatileBehavior_IsUnknownWarp6E(metatileBehavior))
+ return;
+ }
+ if (direction == DIR_NORTH)
+ {
+ PlayerGetDestCoords(&x, &y);
+ MoveCoords(DIR_NORTH, &x, &y);
+ metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (MetatileBehavior_IsWarpDoor(metatileBehavior))
+ return;
+ }
+ PlaySE(SE_WALL_HIT);
+ }
+}
+
+void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y)
+{
+ *x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x;
+ *y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
+ MoveCoords(GetPlayerFacingDirection(), x, y);
+}
+
+void PlayerGetDestCoords(s16 *x, s16 *y)
+{
+ *x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x;
+ *y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
+}
+
+u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y)
+{
+ struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ if (object->heldMovementActive && !object->heldMovementFinished && !gSprites[object->spriteId].data[2])
+ {
+ *x = object->currentCoords.x;
+ *y = object->currentCoords.y;
+
+ switch (object->movementActionId)
+ {
+ case MOVEMENT_ACTION_WALK_NORMAL_DOWN:
+ case MOVEMENT_ACTION_PLAYER_RUN_DOWN:
+ (*y)++;
+ return TRUE;
+ case MOVEMENT_ACTION_WALK_NORMAL_UP:
+ case MOVEMENT_ACTION_PLAYER_RUN_UP:
+ (*y)--;
+ return TRUE;
+ case MOVEMENT_ACTION_WALK_NORMAL_LEFT:
+ case MOVEMENT_ACTION_PLAYER_RUN_LEFT:
+ (*x)--;
+ return TRUE;
+ case MOVEMENT_ACTION_WALK_NORMAL_RIGHT:
+ case MOVEMENT_ACTION_PLAYER_RUN_RIGHT:
+ (*x)++;
+ return TRUE;
+ }
+ }
+
+ *x = -1;
+ *y = -1;
+ return FALSE;
+}
+
+u8 GetPlayerFacingDirection(void)
+{
+ return gObjectEvents[gPlayerAvatar.objectEventId].facingDirection;
+}
+
+u8 GetPlayerMovementDirection(void)
+{
+ return gObjectEvents[gPlayerAvatar.objectEventId].movementDirection;
+}
+
+u8 PlayerGetZCoord(void)
+{
+ return gObjectEvents[gPlayerAvatar.objectEventId].previousElevation;
+}
+
+void MovePlayerToMapCoords(s16 x, s16 y)
+{
+ MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y);
+}
+
+u8 TestPlayerAvatarFlags(u8 bm)
+{
+ return gPlayerAvatar.flags & bm;
+}
+
+u8 GetPlayerAvatarFlags(void)
+{
+ return gPlayerAvatar.flags;
+}
+
+u8 GetPlayerAvatarObjectId(void)
+{
+ return gPlayerAvatar.spriteId;
+}
+
+void sub_805C774(void)
+{
+ ForcedMovement_None();
+}
+
+void sub_805C780(void)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ npc_clear_strange_bits(playerObjEvent);
+ SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ {
+ Bike_HandleBumpySlopeJump();
+ Bike_UpdateBikeCounterSpeed(0);
+ }
+}
+
+static const u8 sPlayerAvatarGfxIds[][2] = {
+ {OBJ_EVENT_GFX_RED_NORMAL, OBJ_EVENT_GFX_GREEN_NORMAL},
+ {OBJ_EVENT_GFX_RED_BIKE, OBJ_EVENT_GFX_GREEN_BIKE},
+ {OBJ_EVENT_GFX_RED_SURF, OBJ_EVENT_GFX_GREEN_SURF},
+ {OBJ_EVENT_GFX_RED_ITEM, OBJ_EVENT_GFX_GREEN_ITEM},
+ {OBJ_EVENT_GFX_RED_FISH, OBJ_EVENT_GFX_GREEN_FISH},
+ {OBJ_EVENT_GFX_RED_VS_SEEKER, OBJ_EVENT_GFX_GREEN_VS_SEEKER},
+};
+
+static const u8 sHoennLinkPartnerGfxIds[] = {
+ OBJ_EVENT_GFX_RS_BRENDAN,
+ OBJ_EVENT_GFX_RS_MAY
+};
+
+u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
+{
+ return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gender);
+}
+
+u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
+{
+ return sPlayerAvatarGfxIds[state][gender];
+}
+
+u8 GetHoennLinkPartnerGraphicsIdByGender(u8 gender)
+{
+ return sHoennLinkPartnerGfxIds[gender];
+}
+
+u8 GetPlayerAvatarGraphicsIdByStateId(u8 state)
+{
+ return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender);
+}
+
+u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId)
+{
+ switch (gfxId)
+ {
+ case OBJ_EVENT_GFX_GREEN_NORMAL:
+ case OBJ_EVENT_GFX_GREEN_BIKE:
+ case OBJ_EVENT_GFX_GREEN_SURF:
+ case OBJ_EVENT_GFX_GREEN_ITEM:
+ case OBJ_EVENT_GFX_GREEN_FISH:
+ return FEMALE;
+ default:
+ return MALE;
+ }
+}
+
+bool8 PartyHasMonWithSurf(void)
+{
+ u8 i;
+
+ if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ {
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE)
+ break;
+ if (MonKnowsMove(&gPlayerParty[i], MOVE_SURF))
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 IsPlayerSurfingNorth(void)
+{
+ if (GetPlayerMovementDirection() == DIR_NORTH && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 IsPlayerFacingSurfableFishableWater(void)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ s16 x = playerObjEvent->currentCoords.x;
+ s16 y = playerObjEvent->currentCoords.y;
+
+ MoveCoords(playerObjEvent->facingDirection, &x, &y);
+ if (GetCollisionAtCoords(playerObjEvent, x, y, playerObjEvent->facingDirection) == COLLISION_ELEVATION_MISMATCH
+ && PlayerGetZCoord() == 3
+ && MetatileAtCoordsIsWaterTile(x, y) == TRUE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y)
+{
+ return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_TERRAIN), TILE_TERRAIN_WATER);
+}
+
+void ClearPlayerAvatarInfo(void)
+{
+ gPlayerAvatar = (struct PlayerAvatar){};
+}
+
+void SetPlayerAvatarStateMask(u8 flags)
+{
+ gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_WATERING | PLAYER_AVATAR_FLAG_FISHING | PLAYER_AVATAR_FLAG_FIELD_MOVE);
+ gPlayerAvatar.flags |= flags;
+}
+
+static const u8 gUnknown_835B882[][3][2] = {
+ // Male
+ {
+ {OBJ_EVENT_GFX_RED_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
+ {OBJ_EVENT_GFX_RED_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
+ {OBJ_EVENT_GFX_RED_SURF, PLAYER_AVATAR_FLAG_SURFING},
+ },
+ // Female
+ {
+ {OBJ_EVENT_GFX_GREEN_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
+ {OBJ_EVENT_GFX_GREEN_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
+ {OBJ_EVENT_GFX_GREEN_SURF, PLAYER_AVATAR_FLAG_SURFING},
+ }
+};
+
+u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
+{
+ u8 i;
+
+ for (i = 0; i < NELEMS(*gUnknown_835B882); i++)
+ {
+ if (gUnknown_835B882[gender][i][0] == graphicsId)
+ return gUnknown_835B882[gender][i][1];
+ }
+ return 1;
+}
+
+u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
+{
+ u8 i;
+ u8 r5 = gPlayerAvatar.flags;
+
+ for (i = 0; i < NELEMS(*gUnknown_835B882); i++)
+ {
+ if (gUnknown_835B882[gPlayerAvatar.gender][i][1] & r5)
+ return gUnknown_835B882[gPlayerAvatar.gender][i][0];
+ }
+ return 0;
+}
+
+void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b)
+{
+ u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
+
+ gPlayerAvatar.transitionFlags |= unk | b;
+ DoPlayerAvatarTransition();
+}
+
+void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
+{
+ struct ObjectEventTemplate playerObjEventTemplate;
+ u8 objectEventId;
+ struct ObjectEvent *objectEvent;
+
+ playerObjEventTemplate.localId = OBJ_EVENT_ID_PLAYER;
+ playerObjEventTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, gender);
+ playerObjEventTemplate.x = x - 7;
+ playerObjEventTemplate.y = y - 7;
+ playerObjEventTemplate.elevation = 0;
+ playerObjEventTemplate.movementType = MOVEMENT_TYPE_PLAYER;
+ playerObjEventTemplate.movementRangeX = 0;
+ playerObjEventTemplate.movementRangeY = 0;
+ playerObjEventTemplate.trainerType = 0;
+ playerObjEventTemplate.trainerRange_berryTreeId = 0;
+ playerObjEventTemplate.script = NULL;
+ playerObjEventTemplate.flagId = 0;
+ objectEventId = SpawnSpecialObjectEvent(&playerObjEventTemplate);
+ objectEvent = &gObjectEvents[objectEventId];
+ objectEvent->isPlayer = 1;
+ objectEvent->warpArrowSpriteId = CreateWarpArrowSprite();
+ ObjectEventTurn(objectEvent, direction);
+ ClearPlayerAvatarInfo();
+ gPlayerAvatar.runningState = NOT_MOVING;
+ gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
+ gPlayerAvatar.objectEventId = objectEventId;
+ gPlayerAvatar.spriteId = objectEvent->spriteId;
+ gPlayerAvatar.gender = gender;
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FIELD_MOVE | 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);
+}
+
+static const u8 gUnknown_835B88E[] = {
+ OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE,
+ OBJ_EVENT_GFX_GREEN_VS_SEEKER_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(u8 direction)
+{
+ sub_8150498(2);
+}
+
+void nullsub_24(void)
+{
+
+}
+
+static void nullsub_25(void)
+{
+
+}
+
+static bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = {
+ MetatileBehavior_IsSouthArrowWarp,
+ MetatileBehavior_IsNorthArrowWarp,
+ MetatileBehavior_IsWestArrowWarp,
+ MetatileBehavior_IsEastArrowWarp
+};
+
+static 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);
+}
+
+static bool8 (*const gUnknown_835B8A0[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = {
+ sub_805CD64,
+ do_boulder_dust,
+ sub_805CE20
+};
+
+static 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);
+}
+
+static void Task_BumpBoulder(u8 taskId)
+{
+ while (gUnknown_835B8A0[gTasks[taskId].data[0]](&gTasks[taskId],
+ &gObjectEvents[gPlayerAvatar.objectEventId],
+ &gObjectEvents[gTasks[taskId].data[1]]))
+ ;
+}
+
+static bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+static 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;
+}
+
+static 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;
+}
+
+static bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = {
+ PlayerAvatar_DoSecretBaseMatJump
+};
+
+static void DoPlayerMatJump(void)
+{
+ DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF));
+}
+
+static 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.
+static 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.transitionFlags |= PLAYER_AVATAR_FLAG_FIELD_MOVE;
+ DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump));
+ }
+ }
+ return FALSE;
+}
+
+static bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task * task, struct ObjectEvent * playerObj) = {
+ PlayerAvatar_SecretBaseMatSpinStep0,
+ PlayerAvatar_SecretBaseMatSpinStep1,
+ PlayerAvatar_SecretBaseMatSpinStep2,
+ PlayerAvatar_SecretBaseMatSpinStep3,
+};
+
+static void DoPlayerMatSpin(void)
+{
+ u8 taskId = CreateTask(PlayerAvatar_DoSecretBaseMatSpin, 0xFF);
+
+ PlayerAvatar_DoSecretBaseMatSpin(taskId);
+}
+
+static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId)
+{
+ while (sPlayerAvatarSecretBaseMatSpin[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId]))
+ ;
+}
+
+static 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;
+}
+
+static 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;
+}
+
+static 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;
+}
+
+static 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;
+}
+
+static 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);
+ }
+}
+
+static void Task_StopSurfingInit(u8 taskId)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ if (ObjectEventIsMovementOverridden(playerObjEvent))
+ {
+ if (!ObjectEventClearHeldMovementIfFinished(playerObjEvent))
+ return;
+ }
+ sub_80DC44C(playerObjEvent->fieldEffectSpriteId, 2);
+ sub_805C06C(playerObjEvent, sub_80641EC((u8)gTasks[taskId].data[0]));
+ gTasks[taskId].func = Task_WaitStopSurfing;
+}
+
+static void Task_WaitStopSurfing(u8 taskId)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ if (ObjectEventClearHeldMovementIfFinished(playerObjEvent))
+ {
+ ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL));
+ sub_805C06C(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection));
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]);
+ DestroyTask(taskId);
+ SetHelpContextForMap();
+ }
+}
+
+static bool8 (*const sFishingStateFuncs[])(struct Task *) =
+{
+ Fishing1,
+ Fishing2,
+ Fishing3,
+ Fishing4,
+ Fishing5,
+ Fishing6,
+ Fishing7,
+ Fishing8,
+ Fishing9,
+ Fishing10,
+ Fishing11,
+ Fishing12,
+ Fishing13,
+ Fishing14,
+ Fishing15,
+ Fishing16,
+};
+
+#define tStep data[0]
+#define tFrameCounter data[1]
+#define tNumDots data[2]
+#define tDotsRequired data[3]
+#define tRoundsPlayed data[12]
+#define tMinRoundsRequired data[13]
+#define tPlayerGfxId data[14]
+#define tFishingRod data[15]
+
+#define FISHING_START_ROUND 3
+#define FISHING_GOT_BITE 6
+#define FISHING_ON_HOOK 9
+#define FISHING_NO_BITE 11
+#define FISHING_GOT_AWAY 12
+#define FISHING_SHOW_RESULT 13
+
+void StartFishing(u8 rod)
+{
+ u8 taskId = CreateTask(Task_Fishing, 0xFF);
+
+ gTasks[taskId].tFishingRod = rod;
+ Task_Fishing(taskId);
+ if (sub_8150474(2) == TRUE)
+ sub_8112C9C();
+}
+
+
+static void Task_Fishing(u8 taskId)
+{
+ while (sFishingStateFuncs[gTasks[taskId].tStep](&gTasks[taskId]))
+ ;
+}
+
+static bool8 Fishing1(struct Task *task)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ task->tStep++;
+ return FALSE;
+}
+
+static bool8 Fishing2(struct Task *task)
+{
+ struct ObjectEvent *playerObjEvent;
+ const s16 arr1[] = {1, 1, 1};
+ const s16 arr2[] = {1, 3, 6};
+
+ task->tRoundsPlayed = 0;
+ task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]);
+ task->tPlayerGfxId = gObjectEvents[gPlayerAvatar.objectEventId].graphicsId;
+ playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventClearHeldMovementIfActive(playerObjEvent);
+ playerObjEvent->enableAnim = 1;
+ sub_805CC2C(playerObjEvent->facingDirection);
+ task->tStep++;
+ return FALSE;
+}
+
+static bool8 Fishing3(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+
+ // Wait one second
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= 60)
+ task->tStep++;
+ return FALSE;
+}
+
+static bool8 Fishing4(struct Task *task)
+{
+ u32 randVal;
+
+ sub_80F7768(0, TRUE);
+ task->tStep++;
+ task->tFrameCounter = 0;
+ task->tNumDots = 0;
+ randVal = Random();
+ randVal %= 10;
+ task->tDotsRequired = randVal + 1;
+ if (task->tRoundsPlayed == 0)
+ task->tDotsRequired = randVal + 4;
+ if (task->tDotsRequired >= 10)
+ task->tDotsRequired = 10;
+ return TRUE;
+}
+
+// Play a round of the dot game
+static bool8 Fishing5(struct Task *task)
+{
+ static const u8 dot[] = _("·");
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= 20)
+ {
+ task->tFrameCounter = 0;
+ if (task->tNumDots >= task->tDotsRequired)
+ {
+ task->tStep++;
+ if (task->tRoundsPlayed != 0)
+ task->tStep++;
+ task->tRoundsPlayed++;
+ }
+ else
+ {
+ AddTextPrinterParameterized(0, 2, dot, task->tNumDots * 12, 1, 0, NULL);
+ task->tNumDots++;
+ }
+ }
+ return FALSE;
+}
+
+// Determine if fish bites
+static bool8 Fishing6(struct Task *task)
+{
+ bool8 bite;
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tStep++;
+ bite = FALSE;
+
+ if (!DoesCurrentMapHaveFishingMons() || Random() & 1)
+ {
+ task->tStep = FISHING_NO_BITE;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
+ }
+ return TRUE;
+}
+
+// Oh! A Bite!
+static bool8 Fishing7(struct Task *task)
+{
+ task->tStep += 3;
+ return FALSE;
+}
+
+// We have a bite. Now, wait for the player to press A, or the timer to expire.
+static bool8 Fishing8(struct Task *task)
+{
+ const s16 reelTimeouts[3] = {36, 33, 30};
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= reelTimeouts[task->tFishingRod])
+ task->tStep = FISHING_GOT_AWAY;
+ else if (gMain.newKeys & A_BUTTON)
+ task->tStep++;
+ return FALSE;
+}
+
+// Determine if we're going to play the dot game again
+static bool8 Fishing9(struct Task *task)
+{
+ const s16 arr[][2] =
+ {
+ {0, 0},
+ {40, 10},
+ {70, 30}
+ };
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tStep++;
+ if (task->tRoundsPlayed < task->tMinRoundsRequired)
+ {
+ task->tStep = FISHING_START_ROUND;
+ }
+ else if (task->tRoundsPlayed < 2)
+ {
+ // probability of having to play another round
+ s16 probability = Random() % 100;
+
+ if (arr[task->tFishingRod][task->tRoundsPlayed] > probability)
+ task->tStep = FISHING_START_ROUND;
+ }
+ return FALSE;
+}
+
+static bool8 Fishing10(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->tStep++;
+ task->tFrameCounter = 0;
+ return FALSE;
+}
+
+static bool8 Fishing11(struct Task *task)
+{
+ if (task->tFrameCounter == 0)
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+
+ RunTextPrinters();
+
+ if (task->tFrameCounter == 0)
+ {
+ if (!IsTextPrinterActive(0))
+ {
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
+ ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
+ gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
+ gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
+ ClearDialogWindowAndFrame(0, TRUE);
+ task->tFrameCounter++;
+ return FALSE;
+ }
+ }
+
+ if (task->tFrameCounter != 0)
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ FishingWildEncounter(task->tFishingRod);
+ DestroyTask(FindTaskIdByFunc(Task_Fishing));
+ }
+ return FALSE;
+}
+
+// Not even a nibble
+static bool8 Fishing12(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, gText_NotEvenANibble, 1, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->tStep = FISHING_SHOW_RESULT;
+ return TRUE;
+}
+
+// It got away
+static bool8 Fishing13(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
+ AddTextPrinterParameterized2(0, 2, gText_ItGotAway, 1, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->tStep++;
+ return TRUE;
+}
+
+// Wait one second
+static bool8 Fishing14(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tStep++;
+ return FALSE;
+}
+
+static bool8 Fishing15(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ if (gSprites[gPlayerAvatar.spriteId].animEnded)
+ {
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
+ ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
+ gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
+ gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
+ task->tStep++;
+ }
+ return FALSE;
+}
+
+static bool8 Fishing16(struct Task *task)
+{
+ RunTextPrinters();
+ if (!IsTextPrinterActive(0))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ ClearDialogWindowAndFrame(0, TRUE);
+ DestroyTask(FindTaskIdByFunc(Task_Fishing));
+ }
+ return FALSE;
+}
+
+#undef tStep
+#undef tFrameCounter
+#undef tFishingRod
+
+void AlignFishingAnimationFrames(struct Sprite * playerSprite)
+{
+ u8 animCmdIndex;
+ u8 animType;
+
+ AnimateSprite(playerSprite);
+ playerSprite->pos2.x = 0;
+ playerSprite->pos2.y = 0;
+ animCmdIndex = playerSprite->animCmdIndex;
+ if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1)
+ {
+ animCmdIndex--;
+ }
+ else
+ {
+ playerSprite->animDelayCounter++;
+ if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1)
+ animCmdIndex--;
+ }
+ animType = playerSprite->anims[playerSprite->animNum][animCmdIndex].type;
+ if (animType == 1 || animType == 2 || animType == 3)
+ {
+ playerSprite->pos2.x = 8;
+ if (GetPlayerFacingDirection() == 3)
+ playerSprite->pos2.x = -8;
+ }
+ if (animType == 5)
+ playerSprite->pos2.y = -8;
+ if (animType == 10 || animType == 11)
+ playerSprite->pos2.y = 8;
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y);
+}
+
+#define tState data[0]
+#define tRotationTimer data[1]
+#define tDeltaY data[2]
+#define tYdeflection data[3]
+#define tYpos data[4]
+#define tFinalFacingDirection data[5]
+#define tPriority data[6]
+#define tSubpriority data[7]
+#define tLandingDelay data[8]
+
+static const u8 sTeleportFacingDirectionSequence[] = {
+ [DIR_SOUTH] = DIR_WEST,
+ [DIR_WEST] = DIR_NORTH,
+ [DIR_NORTH] = DIR_EAST,
+ [DIR_EAST] = DIR_SOUTH,
+ [DIR_NONE] = DIR_SOUTH,
+};
+
+void StartTeleportWarpOutPlayerAnim(void)
+{
+ u8 taskId = CreateTask(Task_TeleportWarpOutPlayerAnim, 0);
+ Task_TeleportWarpOutPlayerAnim(taskId);
+}
+
+bool32 WaitTeleportWarpOutPlayerAnim(void)
+{
+ return FuncIsActiveTask(Task_TeleportWarpOutPlayerAnim);
+}
+
+void SavePlayerFacingDirectionForTeleport(u8 direction)
+{
+ sTeleportSavedFacingDirection = direction;
+}
+
+static u8 GetTeleportSavedFacingDirection(void)
+{
+ if (sTeleportSavedFacingDirection == DIR_NONE)
+ return DIR_SOUTH;
+ else
+ return sTeleportSavedFacingDirection;
+}
+
+static void Task_TeleportWarpOutPlayerAnim(u8 taskId)
+{
+ struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId];
+ struct Sprite *sprite = &gSprites[object->spriteId];
+ s16 *data = gTasks[taskId].data;
+
+ switch (tState)
+ {
+ case 0:
+ if (!ObjectEventClearHeldMovementIfFinished(object))
+ {
+ return;
+ }
+
+ SavePlayerFacingDirectionForTeleport(object->facingDirection);
+ tRotationTimer = 0;
+ tDeltaY = 1;
+ tYdeflection = (u16)(sprite->pos1.y + sprite->pos2.y) * 16;
+ sprite->pos2.y = 0;
+ CameraObjectReset2();
+ object->fixedPriority = TRUE;
+ sprite->oam.priority = 0;
+ sprite->subpriority = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
+ tState++;
+ case 1:
+ TeleportAnim_RotatePlayer(object, &tRotationTimer);
+ tYdeflection -= tDeltaY;
+ tDeltaY += 3;
+ sprite->pos1.y = tYdeflection >> 4;
+ if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32)
+ {
+ tState++;
+ }
+ break;
+ case 2:
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void StartTeleportInPlayerAnim(void)
+{
+ u8 taskId = CreateTask(Task_TeleportWarpInPlayerAnim, 0);
+ Task_TeleportWarpInPlayerAnim(taskId);
+}
+
+bool32 WaitTeleportInPlayerAnim(void)
+{
+ return FuncIsActiveTask(Task_TeleportWarpInPlayerAnim);
+}
+
+static void Task_TeleportWarpInPlayerAnim(u8 taskId)
+{
+ struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId];
+ struct Sprite *sprite = &gSprites[object->spriteId];
+ s16 *data = gTasks[taskId].data;
+
+ switch (tState)
+ {
+ case 0:
+ tFinalFacingDirection = GetTeleportSavedFacingDirection();
+ ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sTeleportFacingDirectionSequence[tFinalFacingDirection]));
+ tRotationTimer = 0;
+ tDeltaY = 116;
+ tYpos = sprite->pos1.y;
+ tPriority = sprite->oam.priority;
+ tSubpriority = sprite->subpriority;
+ tYdeflection = -((u16)sprite->pos2.y + 32) * 16;
+ sprite->pos2.y = 0;
+ CameraObjectReset2();
+ object->fixedPriority = TRUE;
+ sprite->oam.priority = 1;
+ sprite->subpriority = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
+ tState++;
+ case 1:
+ TeleportAnim_RotatePlayer(object, &tRotationTimer);
+ tYdeflection += tDeltaY;
+ tDeltaY -= 3;
+ if (tDeltaY < 4)
+ {
+ tDeltaY = 4;
+ }
+ sprite->pos1.y = tYdeflection >> 4;
+ if (sprite->pos1.y >= tYpos)
+ {
+ sprite->pos1.y = tYpos;
+ tLandingDelay = 0;
+ tState++;
+ }
+ break;
+ case 2:
+ TeleportAnim_RotatePlayer(object, &tRotationTimer);
+ tLandingDelay++;
+ if (tLandingDelay > 8)
+ {
+ tState++;
+ }
+ break;
+ case 3:
+ if (tFinalFacingDirection == TeleportAnim_RotatePlayer(object, &tRotationTimer))
+ {
+ object->fixedPriority = 0;
+ sprite->oam.priority = tPriority;
+ sprite->subpriority = tSubpriority;
+ CameraObjectReset1();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static u8 TeleportAnim_RotatePlayer(struct ObjectEvent *object, s16 *a1)
+{
+ if (*a1 < 8 && ++(*a1) < 8)
+ {
+ return object->facingDirection;
+ }
+
+ if (!ObjectEventCheckHeldMovementStatus(object))
+ {
+ return object->facingDirection;
+ }
+
+ ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sTeleportFacingDirectionSequence[object->facingDirection]));
+ *a1 = 0;
+ return sTeleportFacingDirectionSequence[object->facingDirection];
+}
+
+#undef tLandingDelay
+#undef tSubpriority
+#undef tPriority
+#undef tFinalFacingDirection
+#undef tYpos
+#undef tYdeflection
+#undef tDeltaY
+#undef tRotationTimer
+#undef tState
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 85739ad24..a12b57b24 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -434,14 +434,14 @@ static void sub_807F45C(u8 taskId)
++gTasks[taskId].data[0];
break;
case 3:
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
DestroyTask(taskId);
ScriptContext1_SetupScript(EventScript_AfterWhiteOutHeal);
}
break;
case 6:
- if (sub_807E418() == TRUE)
+ if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
DestroyTask(taskId);
ScriptContext1_SetupScript(EventScript_AfterWhiteOutMomHeal);
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index c6b92b28c..c9a0fd1d5 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -13,7 +13,7 @@ static void ShowMonCB_UseStrength(void);
bool8 SetUpFieldMove_Strength(void)
{
- if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_STRENGTH_BOULDER) != TRUE)
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_PUSHABLE_BOULDER) != TRUE)
{
return FALSE;
}
diff --git a/src/item_use.c b/src/item_use.c
index 6f81ee0e3..df3dbaceb 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -263,10 +263,10 @@ void FieldUseFunc_MachBike(u8 taskId)
behavior = MapGridGetMetatileBehaviorAt(x, y);
if (FlagGet(FLAG_SYS_ON_CYCLING_ROAD) == TRUE
- || MetatileBehavior_ReturnFalse_17(behavior) == TRUE
- || MetatileBehavior_ReturnFalse_18(behavior) == TRUE
- || MetatileBehavior_ReturnFalse_15(behavior) == TRUE
- || MetatileBehavior_ReturnFalse_16(behavior) == TRUE)
+ || MetatileBehavior_IsVerticalRail(behavior) == TRUE
+ || MetatileBehavior_IsHorizontalRail(behavior) == TRUE
+ || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE
+ || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
sub_80A10C4(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451);
else if (sub_8055C9C() == TRUE && !sub_80BD540())
{
@@ -308,7 +308,7 @@ static bool8 ItemUseCheckFunc_Rod(void)
if (MetatileBehavior_IsWaterfall(behavior))
return FALSE;
- if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4))
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
return FALSE;
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
@@ -327,7 +327,7 @@ static bool8 ItemUseCheckFunc_Rod(void)
static void ItemUseOnFieldCB_Rod(u8 taskId)
{
- sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId));
+ StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
}
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index d6a983744..c937a3b48 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -191,7 +191,7 @@ bool8 MetatileBehavior_IsLadder(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsCaveDoor(u8 metatileBehavior)
+bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior)
{
if(metatileBehavior == MB_CAVE_DOOR)
return TRUE;
@@ -677,11 +677,11 @@ bool8 MetatileBehavior_IsCyclingRoadPullDownTileGrass(u8 metatileBehavior)
return metatileBehavior == MB_CYCLING_ROAD_PULL_DOWN_GRASS;
}
-bool8 MetatileBehavior_ReturnFalse_14(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_15(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsBumpySlope(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsIsolatedVerticalRail(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsVerticalRail(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior)
{
@@ -750,7 +750,7 @@ bool8 TestMetatileAttributeBit(u8 arg1, u8 arg2)
return FALSE;
}
-bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSpinRight(u8 metatileBehavior)
{
if(metatileBehavior == MB_SPIN_RIGHT)
return TRUE;
@@ -758,7 +758,7 @@ bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSpinLeft(u8 metatileBehavior)
{
if(metatileBehavior == MB_SPIN_LEFT)
return TRUE;
@@ -766,7 +766,7 @@ bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSpinUp(u8 metatileBehavior)
{
if(metatileBehavior == MB_SPIN_UP)
return TRUE;
@@ -774,7 +774,7 @@ bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_UnusedIsSpinDown(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSpinDown(u8 metatileBehavior)
{
if(metatileBehavior == MB_SPIN_DOWN)
return TRUE;
diff --git a/src/naming_screen.c b/src/naming_screen.c
index b8b121535..1a41c8c0b 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1300,7 +1300,7 @@ static void NamingScreen_CreatePlayerIcon(void)
u8 rivalGfxId;
u8 spriteId;
- rivalGfxId = sub_805C7C8(0, sNamingScreenData->monSpecies);
+ rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, sNamingScreenData->monSpecies);
spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index 959370398..78bc6b7a4 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -457,7 +457,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP
void LoadStdWindowFrameGfx(void)
{
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
{
gTextFlags.autoScroll = 1;
TextWindow_LoadTilesStdFrame1(0, DLG_WINDOW_BASE_TILE_NUM);
@@ -495,8 +495,8 @@ void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram)
ClearWindowTilemap(windowId);
if (copyToVram == TRUE)
CopyWindowToVram(windowId, 3);
- if (gQuestLogState == 2)
- sub_8111134();
+ if (gQuestLogState == QL_STATE_2)
+ CommitQuestLogWindow1();
}
void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram)
@@ -527,7 +527,7 @@ static void WindowFunc_DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u
static void WindowFunc_DrawDialogueFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
{
- if (!IsMsgSignPost() || gQuestLogState == 2)
+ if (!IsMsgSignPost() || gQuestLogState == QL_STATE_2)
{
FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 0, tilemapLeft - 2, tilemapTop - 1, 1, 1, DLG_WINDOW_PALETTE_NUM);
FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 1, tilemapLeft - 1, tilemapTop - 1, 1, 1, DLG_WINDOW_PALETTE_NUM);
@@ -611,7 +611,7 @@ void SetStdWindowBorderStyle(u8 windowId, bool8 copyToVram)
void sub_80F7768(u8 windowId, bool8 copyToVram)
{
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
{
gTextFlags.autoScroll = 1;
TextWindow_LoadTilesStdFrame1(0, DLG_WINDOW_BASE_TILE_NUM);
diff --git a/src/option_menu.c b/src/option_menu.c
index 56a4ec877..62e90c33b 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -509,7 +509,7 @@ static void BufferOptionMenuString(u8 selection)
static void CloseAndSaveOptionMenu(u8 taskId)
{
- gFieldCallback = sub_807DF64;
+ gFieldCallback = FieldCB_UnionRoomWarp;
SetMainCallback2(gMain.savedCallback);
FreeAllWindowBuffers();
gSaveBlock2Ptr->optionsTextSpeed = sOptionMenuPtr->option[MENUITEM_TEXTSPEED];
diff --git a/src/quest_log.c b/src/quest_log.c
index bc8e67a6b..21a05f407 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -43,6 +43,7 @@
#include "constants/species.h"
#include "constants/items.h"
#include "constants/field_weather.h"
+#include "constants/event_object_movement.h"
u8 gUnknown_3005E88;
@@ -69,7 +70,7 @@ struct UnkStruct_203AE94
u8 unk_3;
};
-struct UnkStruct_203AE98
+struct QuestLogEntry
{
u8 unk_0;
u8 unk_1;
@@ -94,9 +95,9 @@ struct UnkStruct_203B044
};
u8 gUnknown_3005E88;
-u16 sNumQuestLogs;
+u16 sNumEventsInLogEntry;
struct UnkStruct_3005E90 gUnknown_3005E90;
-struct UnkStruct_203AE98 * gUnknown_3005E94;
+struct QuestLogEntry * sCurQuestLogEntry;
static struct UnkStruct_300201C * sFlagOrVarRecords;
static u16 sNumFlagsOrVars;
@@ -105,44 +106,44 @@ static EWRAM_DATA u8 sCurrentSceneNum = 0;
static EWRAM_DATA u8 sNumScenes = 0;
EWRAM_DATA u8 gQuestLogState = 0;
static EWRAM_DATA u16 gUnknown_203ADFC = 0;
-static EWRAM_DATA u8 gUnknown_203ADFE[3] = {0};
+static EWRAM_DATA u8 sQuestLogHeaderWindowIds[3] = {0};
static EWRAM_DATA u16 *gUnknown_203AE04 = NULL;
static EWRAM_DATA u16 *gUnknown_203AE08 = NULL;
static EWRAM_DATA u16 *gUnknown_203AE0C[32] = {NULL};
static EWRAM_DATA void (* sQuestLogCB)(void) = NULL;
static EWRAM_DATA u16 *gUnknown_203AE90 = NULL;
static EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0};
-static EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0};
-static EWRAM_DATA u16 sQuestLogIdx = 0;
+static EWRAM_DATA struct QuestLogEntry sQuestLogSceneRecordBuffer[32] = {0};
+static EWRAM_DATA u16 sQuestLogCursor = 0;
static EWRAM_DATA u8 sMovementScripts[64][2] = {{0}};
-static EWRAM_DATA u16 gUnknown_203B01A = 0;
+static EWRAM_DATA u16 sNextStepDelay = 0;
static EWRAM_DATA u16 gUnknown_203B01C = 0;
static EWRAM_DATA u16 sFlagOrVarPlayhead = 0;
static EWRAM_DATA u8 sHelpMessageWindowId = 0;
static EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0};
static EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0};
static EWRAM_DATA u8 gUnknown_203B048 = 0;
-static EWRAM_DATA u8 gUnknown_203B049 = 0;
+static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE;
static EWRAM_DATA u8 gUnknown_203B04A = 0;
-static EWRAM_DATA bool8 gUnknown_203B04B = 0;
+static EWRAM_DATA bool8 gUnknown_203B04B = FALSE;
static void sub_8110A00(void);
static void sub_8110A3C(void);
-static void sub_8110BB0(u8);
-static void sub_8110BE8(u8);
+static void SetPlayerInitialCoordsAtScene(u8);
+static void SetNPCInitialCoordsAtScene(u8);
static void sub_8110E3C(void);
-static void sub_8110D94(void);
-static void sub_8110E20(void);
-static void sub_8110D48(u8);
-static u8 sub_8110E68(struct UnkStruct_203AE98 *);
+static void BackUpTrainerRematchesToVars(void);
+static void BackUpMapLayoutToVar(void);
+static void SetGameStateAtScene(u8);
+static u8 TryRecordQuestLogEntrySequence(struct QuestLogEntry *);
static void sub_8110F90(u8);
-static void sub_8111150(u8);
+static void QuestLogPlaybackSetObjectEventTemplates(u8);
static void sub_8111368(void);
static void QuestLog_GetSaneMonCounts(void);
static u16 QuestLog_GetSanePartyCount(void);
static u16 QuestLog_GetSaneBoxCount(void);
static void sub_8111688(void);
-static void sub_811175C(u8, struct UnkStruct_203AE98 *);
+static void sub_811175C(u8, struct QuestLogEntry *);
static void sub_81118F4(s8);
static void QuestLog_AdvancePlayhead(void);
static void QuestLog_StartFinalScene(void);
@@ -163,9 +164,9 @@ static void Task_EndQuestLog(u8);
static bool8 sub_81121D8(u8);
static void sub_811229C(void);
static void sub_8112888(u8);
-static void sub_8112940(u8, struct UnkStruct_203AE98 *, u16);
+static void SetUpQuestLogEntry(u8, struct QuestLogEntry *, u16);
static bool8 sub_8112CEC(void);
-static bool8 sub_8112D1C(void);
+static bool8 RecordHeadAtEndOfEntry(void);
static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *);
static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *);
static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *);
@@ -194,13 +195,13 @@ static void sub_8113B88(void);
static void sub_8113B94(u16);
static void sub_8113BD8(void);
static u16 *sub_8113BF4(u16 *);
-static u16 *sub_8113C20(u16 *, struct UnkStruct_203AE98 *);
+static u16 *sub_8113C20(u16 *, struct QuestLogEntry *);
static u16 *sub_8113C5C(u16 *, u16);
-static u16 *sub_8113C8C(u16 *, struct UnkStruct_203AE98 *);
-static u16 *sub_8113CC8(u16 *, struct UnkStruct_203AE98 *);
-static u16 *sub_8113D08(u16 *, struct UnkStruct_203AE98 *);
-static u16 *sub_8113D48(u16 *, struct UnkStruct_203AE98 *);
-static u16 *sub_8113D94(u16 *, struct UnkStruct_203AE98 *);
+static u16 *sub_8113C8C(u16 *, struct QuestLogEntry *);
+static u16 *sub_8113CC8(u16 *, struct QuestLogEntry *);
+static u16 *sub_8113D08(u16 *, struct QuestLogEntry *);
+static u16 *sub_8113D48(u16 *, struct QuestLogEntry *);
+static u16 *sub_8113D94(u16 *, struct QuestLogEntry *);
static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *);
static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *);
static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *, const u16 *);
@@ -282,7 +283,7 @@ static bool8 sub_81153A8(u16, const u16 *);
static bool8 sub_81153E4(u16, const u16 *);
static void BufferLinkPartnersName(u8 *);
-static const struct WindowTemplate gUnknown_845661C[3] = {
+static const struct WindowTemplate sQuestLogHeaderWindowTemplates[3] = {
{ 0, 0, 0, 30, 2, 15, 0x0e9 },
{ 0, 0, 18, 30, 2, 15, 0x0ad },
{ 0, 0, 14, 30, 6, 15, 0x14c }
@@ -303,7 +304,7 @@ void sub_8110840(void * oldPointer)
{
if (gUnknown_203AE08)
gUnknown_203AE08 = (void *)gUnknown_203AE08 + offset;
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
{
int r3;
for (r3 = 0; r3 < (int)NELEMS(gUnknown_203AE0C); r3++)
@@ -325,7 +326,7 @@ void ResetQuestLog(void)
sub_81138F8();
}
-void sub_81108F0(u8 a0)
+static void DestroySav1QuestLogEntry(u8 a0)
{
memset(gSaveBlock1Ptr->questLog + a0, 0, sizeof(struct QuestLog));
gUnknown_203AE04 = NULL;
@@ -373,7 +374,7 @@ static void SetQuestLogState(u8 state)
static void sub_8110A00(void)
{
- if (sub_8110E68(gUnknown_203AE98) != 1)
+ if (TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer) != 1)
{
gUnknown_3005E88 = 0;
sub_8110E3C();
@@ -389,7 +390,7 @@ static void sub_8110A3C(void)
if (gUnknown_203AE94.unk_0_6 == 0)
{
- if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < 32 && gUnknown_203AE0C[gUnknown_203AE94.unk_1]))
+ if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < NELEMS(gUnknown_203AE0C) && gUnknown_203AE0C[gUnknown_203AE94.unk_1] != NULL))
sub_8111AD8();
else
{
@@ -410,12 +411,12 @@ u8 sub_8110AC8(void)
return gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000;
}
-void sub_8110AEC(u16 eventId)
+static void StartRecordingQuestLogEntry(u16 eventId)
{
if (sCurrentSceneNum >= QUEST_LOG_SCENE_COUNT)
sCurrentSceneNum = 0;
- sub_81108F0(sCurrentSceneNum);
+ DestroySav1QuestLogEntry(sCurrentSceneNum);
sub_8113B88();
gUnknown_203AE08 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_568;
if (IS_LINK_QL_EVENT(eventId) || eventId == QL_EVENT_DEPARTED)
@@ -423,18 +424,18 @@ void sub_8110AEC(u16 eventId)
else
gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 = 1;
QuestLog_GetSaneMonCounts();
- sub_8110BB0(sCurrentSceneNum);
- sub_8110BE8(sCurrentSceneNum);
- sub_8110D94();
- sub_8110E20();
- sub_8110D48(sCurrentSceneNum);
+ SetPlayerInitialCoordsAtScene(sCurrentSceneNum);
+ SetNPCInitialCoordsAtScene(sCurrentSceneNum);
+ BackUpTrainerRematchesToVars();
+ BackUpMapLayoutToVar();
+ SetGameStateAtScene(sCurrentSceneNum);
gUnknown_203ADFC = 0;
- sub_8112940(2, gUnknown_203AE98, 0x100);
- sub_8110E68(gUnknown_203AE98);
- SetQuestLogState(1);
+ SetUpQuestLogEntry(2, sQuestLogSceneRecordBuffer, 0x100);
+ TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer);
+ SetQuestLogState(QL_STATE_1);
}
-static void sub_8110BB0(u8 sceneNum)
+static void SetPlayerInitialCoordsAtScene(u8 sceneNum)
{
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[sceneNum];
questLog->mapGroup = gSaveBlock1Ptr->location.mapGroup;
@@ -444,7 +445,7 @@ static void sub_8110BB0(u8 sceneNum)
questLog->y = gSaveBlock1Ptr->pos.y;
}
-static void sub_8110BE8(u8 sceneNum)
+static void SetNPCInitialCoordsAtScene(u8 sceneNum)
{
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[sceneNum];
u16 i;
@@ -478,7 +479,7 @@ static void sub_8110BE8(u8 sceneNum)
}
}
-static void sub_8110D48(u8 sceneNum)
+static void SetGameStateAtScene(u8 sceneNum)
{
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[sceneNum];
@@ -486,7 +487,7 @@ static void sub_8110D48(u8 sceneNum)
CpuCopy16(gSaveBlock1Ptr->vars, questLog->vars, VARS_COUNT * sizeof(u16));
}
-static void sub_8110D94(void)
+static void BackUpTrainerRematchesToVars(void)
{
u16 i, j;
u16 sp0[4];
@@ -501,13 +502,13 @@ static void sub_8110D94(void)
sp0[i] += (1 << j);
}
}
- VarSet(VAR_0x40AA + i, sp0[i]);
+ VarSet(VAR_QLBAK_TRAINER_REMATCHES + i, sp0[i]);
}
}
-static void sub_8110E20(void)
+static void BackUpMapLayoutToVar(void)
{
- VarSet(VAR_0x40AE, gSaveBlock1Ptr->mapLayoutId);
+ VarSet(VAR_QLBAK_MAP_LAYOUT, gSaveBlock1Ptr->mapLayoutId);
}
static void sub_8110E3C(void)
@@ -517,22 +518,22 @@ static void sub_8110E3C(void)
sCurrentSceneNum = 0;
}
-static bool8 sub_8110E68(struct UnkStruct_203AE98 * a0)
+static bool8 TryRecordQuestLogEntrySequence(struct QuestLogEntry * entry)
{
u16 i;
- for (i = gUnknown_203ADFC; i < sQuestLogIdx; i++)
+ for (i = gUnknown_203ADFC; i < sQuestLogCursor; i++)
{
if (gUnknown_203AE08 == NULL)
return FALSE;
- switch (a0[i].unk_6)
+ switch (entry[i].unk_6)
{
case 0:
case 1:
- gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]);
+ gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &entry[i]);
break;
default:
- gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]);
+ gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &entry[i]);
break;
}
if (gUnknown_203AE08 == NULL)
@@ -547,7 +548,7 @@ static bool8 sub_8110E68(struct UnkStruct_203AE98 * a0)
gUnknown_203AE08 = sub_8113BF4(gUnknown_203AE08);
return FALSE;
}
- gUnknown_203ADFC = sQuestLogIdx;
+ gUnknown_203ADFC = sQuestLogCursor;
return TRUE;
}
@@ -589,17 +590,17 @@ static void sub_8110F90(u8 unused)
void sub_8110FCC(void)
{
- sub_811175C(sCurrentSceneNum, gUnknown_203AE98);
+ sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer);
sub_8113B88();
- sub_8112940(1, gUnknown_203AE98, 0x100);
- sub_8111150(sCurrentSceneNum);
+ SetUpQuestLogEntry(1, sQuestLogSceneRecordBuffer, 0x100);
+ QuestLogPlaybackSetObjectEventTemplates(sCurrentSceneNum);
}
bool8 sub_8111000(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
- SetQuestLogState(2);
- sub_807DF64();
+ SetQuestLogState(QL_STATE_2);
+ FieldCB_UnionRoomWarp();
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
gUnknown_203AE94.unk_0_0 = 2;
return 1;
@@ -608,7 +609,7 @@ bool8 sub_8111000(void)
bool8 sub_8111038(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
- SetQuestLogState(2);
+ SetQuestLogState(QL_STATE_2);
sub_807DF7C();
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
gUnknown_203AE94.unk_0_0 = 2;
@@ -619,10 +620,10 @@ void DrawPreviouslyOnQuestHeader(u8 sceneNum)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < NELEMS(sQuestLogHeaderWindowTemplates); i++)
{
- gUnknown_203ADFE[i] = AddWindow(&gUnknown_845661C[i]);
- FillWindowPixelRect(gUnknown_203ADFE[i], 15, 0, 0, gUnknown_845661C[i].width * 8, gUnknown_845661C[i].height * 8);
+ sQuestLogHeaderWindowIds[i] = AddWindow(&sQuestLogHeaderWindowTemplates[i]);
+ FillWindowPixelRect(sQuestLogHeaderWindowIds[i], 15, 0, 0, sQuestLogHeaderWindowTemplates[i].width * 8, sQuestLogHeaderWindowTemplates[i].height * 8);
}
StringExpandPlaceholders(gStringVar4, gText_QuestLog_PreviouslyOnYourQuest);
@@ -634,21 +635,21 @@ void DrawPreviouslyOnQuestHeader(u8 sceneNum)
StringAppend(gStringVar4, gStringVar1);
}
- AddTextPrinterParameterized4(gUnknown_203ADFE[0], 2, 2, 2, 1, 2, sTextColors, 0, gStringVar4);
- PutWindowTilemap(gUnknown_203ADFE[0]);
- PutWindowTilemap(gUnknown_203ADFE[1]);
- CopyWindowToVram(gUnknown_203ADFE[0], 2);
- CopyWindowToVram(gUnknown_203ADFE[2], 2);
- CopyWindowToVram(gUnknown_203ADFE[1], 3);
+ AddTextPrinterParameterized4(sQuestLogHeaderWindowIds[0], 2, 2, 2, 1, 2, sTextColors, 0, gStringVar4);
+ PutWindowTilemap(sQuestLogHeaderWindowIds[0]);
+ PutWindowTilemap(sQuestLogHeaderWindowIds[1]);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[0], 2);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[2], 2);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[1], 3);
}
-void sub_8111134(void)
+void CommitQuestLogWindow1(void)
{
- PutWindowTilemap(gUnknown_203ADFE[1]);
- CopyWindowToVram(gUnknown_203ADFE[1], 1);
+ PutWindowTilemap(sQuestLogHeaderWindowIds[1]);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[1], 1);
}
-static void sub_8111150(u8 sceneNum)
+static void QuestLogPlaybackSetObjectEventTemplates(u8 sceneNum)
{
struct QuestLog *questLog = &gSaveBlock1Ptr->questLog[sceneNum];
u16 i;
@@ -667,7 +668,7 @@ static void sub_8111150(u8 sceneNum)
gSaveBlock1Ptr->objectEventTemplates[i].movementType = questLog->npcData[i].movementType;
}
- sub_815A1F8(questLog, gSaveBlock1Ptr->objectEventTemplates);
+ SetSav1ObjectEventsFromQuestLog(questLog, gSaveBlock1Ptr->objectEventTemplates);
}
void sub_8111274(u8 sceneNum, bool8 a1)
@@ -695,7 +696,7 @@ void sub_8111274(u8 sceneNum, bool8 a1)
static void sub_8111368(void)
{
- gQuestLogState = 2;
+ gQuestLogState = QL_STATE_2;
ResetSpecialVars();
ClearBag();
ClearPCItemSlots();
@@ -847,7 +848,7 @@ static void sub_8111688(void)
for (i = 0; i < 4; i++)
{
- sp0[i] = VarGet(VAR_0x40AA + i);
+ sp0[i] = VarGet(VAR_QLBAK_TRAINER_REMATCHES + i);
for (j = 0; j < 16; j++)
{
@@ -864,7 +865,7 @@ void sub_8111708(void)
{
struct MapHeader sp0;
- gSaveBlock1Ptr->mapLayoutId = VarGet(VAR_0x40AE);
+ gSaveBlock1Ptr->mapLayoutId = VarGet(VAR_QLBAK_MAP_LAYOUT);
if (gSaveBlock1Ptr->mapLayoutId == 0)
{
sp0 = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
@@ -872,14 +873,14 @@ void sub_8111708(void)
}
}
-static void sub_811175C(u8 sceneNum, struct UnkStruct_203AE98 * a1)
+static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1)
{
u16 i;
u16 *r4;
u16 r6 = 0;
u16 r9 = 0;
- memset(a1, 0, 32 * sizeof(struct UnkStruct_203AE98));
+ memset(a1, 0, 32 * sizeof(struct QuestLogEntry));
for (i = 0; i < NELEMS(gUnknown_203AE0C); i++)
{
gUnknown_203AE0C[i] = NULL;
@@ -951,7 +952,7 @@ static void QuestLog_StartFinalScene(void)
SetMainCallback2(sub_8057430);
gFieldCallback2 = sub_8111F60;
FreeAllWindowBuffers();
- gQuestLogState = 3;
+ gQuestLogState = QL_STATE_3;
sQuestLogCB = NULL;
}
@@ -1077,7 +1078,7 @@ static u8 sub_8111BD4(void)
bool8 sub_8111C2C(void)
{
- if (gQuestLogState != 2)
+ if (gQuestLogState != QL_STATE_2)
return FALSE;
if (gUnknown_3005E88 == 0 || gUnknown_203AE94.unk_0_0 == 1 || gUnknown_203AE94.unk_0_0 == 2)
return TRUE;
@@ -1112,7 +1113,7 @@ bool8 sub_8111CD0(void)
void sub_8111CF0(void)
{
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
DrawPreviouslyOnQuestHeader(sNumScenes);
}
@@ -1127,9 +1128,9 @@ static void DrawQuestLogSceneDescription(void)
numLines++;
}
- PutWindowTilemap(gUnknown_203ADFE[2]);
- sub_8111D90(gUnknown_203ADFE[2]);
- AddTextPrinterParameterized4(gUnknown_203ADFE[2], 2, 2, sQuestLogTextLineYCoords[numLines], 1, 0, sTextColors, 0, gStringVar4);
+ PutWindowTilemap(sQuestLogHeaderWindowIds[2]);
+ sub_8111D90(sQuestLogHeaderWindowIds[2]);
+ AddTextPrinterParameterized4(sQuestLogHeaderWindowIds[2], 2, 2, sQuestLogTextLineYCoords[numLines], 1, 0, sTextColors, 0, gStringVar4);
ScheduleBgCopyTilemapToVram(0);
}
@@ -1172,11 +1173,11 @@ static void sub_8111D90(u8 a0)
static void QuestLog_CloseTextWindow(void)
{
- ClearWindowTilemap(gUnknown_203ADFE[2]);
- FillWindowPixelRect(gUnknown_203ADFE[2], 15, 0, 0, 0xf0, 0x30);
- CopyWindowToVram(gUnknown_203ADFE[2], 2);
- PutWindowTilemap(gUnknown_203ADFE[1]);
- CopyWindowToVram(gUnknown_203ADFE[1], 1);
+ ClearWindowTilemap(sQuestLogHeaderWindowIds[2]);
+ FillWindowPixelRect(sQuestLogHeaderWindowIds[2], 15, 0, 0, 0xf0, 0x30);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[2], 2);
+ PutWindowTilemap(sQuestLogHeaderWindowIds[1]);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[1], 1);
}
static void QuestLog_SkipToEndOfPlayback(s8 delay)
@@ -1194,7 +1195,7 @@ static void QuestLog_WaitFadeAndCancelPlayback(void)
{
if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 == 0)
break;
- sub_811175C(sCurrentSceneNum, gUnknown_203AE98);
+ sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer);
}
gUnknown_3005E88 = 0;
QuestLog_StartFinalScene();
@@ -1203,7 +1204,7 @@ static void QuestLog_WaitFadeAndCancelPlayback(void)
void sub_8111F14(void)
{
- if (gQuestLogState == 3)
+ if (gQuestLogState == QL_STATE_3)
gUnknown_203AE90 = AllocZeroed(0x200 * sizeof(u16));
}
@@ -1288,7 +1289,7 @@ static void Task_EndQuestLog(u8 taskId)
gDisableMapMusicChangeOnMapLoad = 0;
Overworld_PlaySpecialMapMusic();
sub_811229C();
- FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8);
+ FillWindowPixelRect(sQuestLogHeaderWindowIds[0], 0xF, 0, 0, sQuestLogHeaderWindowTemplates[0].width * 8, sQuestLogHeaderWindowTemplates[0].height * 8);
tState++;
break;
case 1:
@@ -1296,9 +1297,9 @@ static void Task_EndQuestLog(u8 taskId)
{
for (i = 0; i < 3; i++)
{
- ClearWindowTilemap(gUnknown_203ADFE[i]);
- CopyWindowToVram(gUnknown_203ADFE[i], 1);
- RemoveWindow(gUnknown_203ADFE[i]);
+ ClearWindowTilemap(sQuestLogHeaderWindowIds[i]);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[i], 1);
+ RemoveWindow(sQuestLogHeaderWindowIds[i]);
}
tTimer = 0;
tState++;
@@ -1339,10 +1340,10 @@ static bool8 sub_81121D8(u8 taskId)
sub_80716F8(gPlttBufferUnfaded + 0x01, gPlttBufferFaded + 0x01, 0xDF, 0x0F - data[1]);
sub_80716F8(gPlttBufferUnfaded + 0x100, gPlttBufferFaded + 0x100, 0x100, 0x0F - data[1]);
- FillWindowPixelRect(gUnknown_203ADFE[0], 0x00, 0, gUnknown_845661C[0].height * 8 - 1 - data[1], gUnknown_845661C[0].width * 8, 1);
- FillWindowPixelRect(gUnknown_203ADFE[1], 0x00, 0, data[1], gUnknown_845661C[1].width * 8, 1);
- CopyWindowToVram(gUnknown_203ADFE[0], 2);
- CopyWindowToVram(gUnknown_203ADFE[1], 2);
+ FillWindowPixelRect(sQuestLogHeaderWindowIds[0], 0x00, 0, sQuestLogHeaderWindowTemplates[0].height * 8 - 1 - data[1], sQuestLogHeaderWindowTemplates[0].width * 8, 1);
+ FillWindowPixelRect(sQuestLogHeaderWindowIds[1], 0x00, 0, data[1], sQuestLogHeaderWindowTemplates[1].width * 8, 1);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[0], 2);
+ CopyWindowToVram(sQuestLogHeaderWindowIds[1], 2);
data[1]++;
return FALSE;
}
@@ -1362,9 +1363,9 @@ static void sub_811229C(void)
void sub_811231C(void)
{
- if (gQuestLogState == 1)
+ if (gQuestLogState == QL_STATE_1)
{
- sub_8110E68(gUnknown_203AE98);
+ TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer);
sub_8110E3C();
gQuestLogState = 0;
sQuestLogCB = NULL;
@@ -1376,9 +1377,9 @@ void sub_811231C(void)
void sub_8112364(void)
{
- if (gUnknown_3005E88 && gQuestLogState == 1)
+ if (gUnknown_3005E88 && gQuestLogState == QL_STATE_1)
{
- sub_8110E68(gUnknown_203AE98);
+ TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer);
sub_8113A1C(1);
sub_8110E3C();
gUnknown_3005E88 = 0;
@@ -1448,109 +1449,109 @@ void sub_811246C(struct Sprite *sprite)
}
}
-void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3)
+void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 movementActionId)
{
if (!sub_8112CEC())
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = a0;
- gUnknown_3005E94[sQuestLogIdx].unk_1 = a1;
- gUnknown_3005E94[sQuestLogIdx].unk_2 = a2;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = a3;
- sQuestLogIdx++;
- gUnknown_203B01A = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = a0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_1 = a1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_2 = a2;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId;
+ sQuestLogCursor++;
+ sNextStepDelay = 0;
}
}
-void sub_8112588(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4)
+void sub_8112588(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration)
{
- if (!sub_8112D1C())
+ if (!RecordHeadAtEndOfEntry())
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = a0;
- gUnknown_3005E94[sQuestLogIdx].unk_1 = a1;
- gUnknown_3005E94[sQuestLogIdx].unk_2 = a2;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = a3;
- sQuestLogIdx++;
- gUnknown_203B01A = a4;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = localId;
+ sCurQuestLogEntry[sQuestLogCursor].unk_1 = mapNum;
+ sCurQuestLogEntry[sQuestLogCursor].unk_2 = mapGroup;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId;
+ sQuestLogCursor++;
+ sNextStepDelay = duration;
}
}
-void sub_8112628(u8 a0)
+void sub_8112628(u8 movementActionId)
{
if (!sub_8112CEC())
{
- if (a0 != gUnknown_3005E94[gUnknown_203B01C].unk_3 || a0 > 3)
+ if (movementActionId != sCurQuestLogEntry[gUnknown_203B01C].unk_3 || movementActionId > MOVEMENT_ACTION_FACE_RIGHT)
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
- gUnknown_203B01C = sQuestLogIdx;
- sQuestLogIdx++;
- gUnknown_203B01A = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId;
+ gUnknown_203B01C = sQuestLogCursor;
+ sQuestLogCursor++;
+ sNextStepDelay = 0;
}
}
}
-void sub_81126AC(u8 a0, u8 a1)
+void sub_81126AC(u8 movementActionId, u8 duration)
{
- if (!sub_8112D1C())
+ if (!RecordHeadAtEndOfEntry())
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
- gUnknown_203B01C = sQuestLogIdx;
- sQuestLogIdx++;
- gUnknown_203B01A = a1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId;
+ gUnknown_203B01C = sQuestLogCursor;
+ sQuestLogCursor++;
+ sNextStepDelay = duration;
}
}
-void sub_8112720(u8 a0)
+void sub_8112720(u8 movementActionId)
{
- if (!sub_8112D1C())
+ if (!RecordHeadAtEndOfEntry())
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 1;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
- sQuestLogIdx++;
- gUnknown_203B01A = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId;
+ sQuestLogCursor++;
+ sNextStepDelay = 0;
}
}
-void sub_811278C(u8 a0, u8 a1)
+void sub_811278C(u8 movementActionId, u8 duration)
{
- if (!sub_8112D1C())
+ if (!RecordHeadAtEndOfEntry())
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 1;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
- sQuestLogIdx++;
- gUnknown_203B01A = a1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId;
+ sQuestLogCursor++;
+ sNextStepDelay = duration;
}
}
void sub_81127F8(struct UnkStruct_3005E90 * a0)
{
- if (sQuestLogIdx < sNumQuestLogs)
+ if (sQuestLogCursor < sNumEventsInLogEntry)
{
u32 r2 = *(u32 *)a0 & 0x00FF00F3;
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 2;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = r2;
- gUnknown_3005E94[sQuestLogIdx].unk_1 = r2 >> 8;
- gUnknown_3005E94[sQuestLogIdx].unk_2 = r2 >> 16;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = r2 >> 24;
- sQuestLogIdx++;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 2;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = r2;
+ sCurQuestLogEntry[sQuestLogCursor].unk_1 = r2 >> 8;
+ sCurQuestLogEntry[sQuestLogCursor].unk_2 = r2 >> 16;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = r2 >> 24;
+ sQuestLogCursor++;
if (ScriptContext2_IsEnabled())
- gUnknown_203B01A = TRUE;
+ sNextStepDelay = TRUE;
else
- gUnknown_203B01A = FALSE;
+ sNextStepDelay = FALSE;
}
}
@@ -1580,10 +1581,10 @@ void sub_81128BC(u8 a0)
gUnknown_3005E88 = 3;
else if (r1 == 2)
{
- gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 3;
- sQuestLogIdx++;
- gUnknown_203B01A = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 3;
+ sQuestLogCursor++;
+ sNextStepDelay = 0;
gUnknown_3005E88 = 4;
}
break;
@@ -1596,68 +1597,68 @@ void sub_81128BC(u8 a0)
}
}
-static void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2)
+static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size)
{
- s32 i;
+ int i;
- switch (a0)
+ switch (kind)
{
default:
gUnknown_3005E88 = 0;
break;
case 1:
- gUnknown_3005E94 = a1;
- sNumQuestLogs = a2 / 8;
- for (i = 0; i < 0x40; i++)
+ sCurQuestLogEntry = entry;
+ sNumEventsInLogEntry = size / sizeof(*sCurQuestLogEntry);
+ for (i = 0; i < (s32)NELEMS(sMovementScripts); i++)
{
sMovementScripts[i][0] |= 0xFF;
sMovementScripts[i][1] |= 0xFF;
}
- sQuestLogIdx = 0;
+ sQuestLogCursor = 0;
gUnknown_203B01C = 0;
gUnknown_3005E90 = (struct UnkStruct_3005E90){};
- gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4;
- sMovementScripts[0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3;
+ sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4;
+ sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].unk_3;
sMovementScripts[0][1] = 0xFF;
gUnknown_3005E88 = 1;
break;
case 2:
- gUnknown_3005E94 = a1;
- sNumQuestLogs = a2 / 8;
- for (i = 0; i < sNumQuestLogs; i++)
+ sCurQuestLogEntry = entry;
+ sNumEventsInLogEntry = size / sizeof(*sCurQuestLogEntry);
+ for (i = 0; i < sNumEventsInLogEntry; i++)
{
- gUnknown_3005E94[i] = (struct UnkStruct_203AE98){ 0, 0, 0, 0, 0xFFFF, 0xFF };
+ sCurQuestLogEntry[i] = (struct QuestLogEntry){ 0, 0, 0, 0, 0xFFFF, 0xFF };
}
- sQuestLogIdx = 0;
- gUnknown_203B01A = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_4 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
+ sQuestLogCursor = 0;
+ sNextStepDelay = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0;
switch (GetPlayerFacingDirection())
{
case DIR_NONE:
case DIR_SOUTH:
- gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_SOUTH - 1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_DOWN;
break;
case DIR_EAST:
- gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_EAST - 1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_RIGHT;
break;
case DIR_NORTH:
- gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_NORTH - 1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_UP;
break;
case DIR_WEST:
- gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_WEST - 1;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_LEFT;
break;
}
gUnknown_203B01C = 0;
- sQuestLogIdx++;
- gUnknown_3005E94[sQuestLogIdx].unk_4 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_6 = 2;
- gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_1 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_2 = 0;
- gUnknown_3005E94[sQuestLogIdx].unk_3 = 0;
- sQuestLogIdx++;
+ sQuestLogCursor++;
+ sCurQuestLogEntry[sQuestLogCursor].unk_4 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_6 = 2;
+ sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_1 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_2 = 0;
+ sCurQuestLogEntry[sQuestLogCursor].unk_3 = 0;
+ sQuestLogCursor++;
gUnknown_3005E88 = 2;
break;
}
@@ -1672,22 +1673,22 @@ void sub_8112B3C(void)
case 1:
if (!sub_8112CEC())
{
- if (gUnknown_203B01A != 0)
- gUnknown_203B01A--;
+ if (sNextStepDelay != 0)
+ sNextStepDelay--;
else
{
do
{
- switch (gUnknown_3005E94[sQuestLogIdx].unk_6)
+ switch (sCurQuestLogEntry[sQuestLogCursor].unk_6)
{
case 0:
- sMovementScripts[gUnknown_3005E94[sQuestLogIdx].unk_0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3;
+ sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].unk_0][0] = sCurQuestLogEntry[sQuestLogCursor].unk_3;
break;
case 1:
- sMovementScripts[gUnknown_3005E94[sQuestLogIdx].unk_0][1] = gUnknown_3005E94[sQuestLogIdx].unk_3;
+ sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].unk_0][1] = sCurQuestLogEntry[sQuestLogCursor].unk_3;
break;
case 2:
- *(u32 *)&gUnknown_3005E90 = ((gUnknown_3005E94[sQuestLogIdx].unk_3 << 24) | (gUnknown_3005E94[sQuestLogIdx].unk_2 << 16) | (gUnknown_3005E94[sQuestLogIdx].unk_1 << 8) | (gUnknown_3005E94[sQuestLogIdx].unk_0 << 0));
+ *(u32 *)&gUnknown_3005E90 = ((sCurQuestLogEntry[sQuestLogCursor].unk_3 << 24) | (sCurQuestLogEntry[sQuestLogCursor].unk_2 << 16) | (sCurQuestLogEntry[sQuestLogCursor].unk_1 << 8) | (sCurQuestLogEntry[sQuestLogCursor].unk_0 << 0));
break;
case 3:
gUnknown_3005E88 = 3;
@@ -1700,17 +1701,17 @@ void sub_8112B3C(void)
}
if (gUnknown_3005E88 == 0)
break;
- if (++sQuestLogIdx >= sNumQuestLogs)
+ if (++sQuestLogCursor >= sNumEventsInLogEntry)
{
gUnknown_3005E88 = 0;
break;
}
- gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4;
+ sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4;
} while (gUnknown_3005E88 != 3
- && (gUnknown_203B01A == 0 || gUnknown_203B01A == 0xFFFF));
+ && (sNextStepDelay == 0 || sNextStepDelay == 0xFFFF));
}
}
- else if (sQuestLogIdx >= sNumQuestLogs)
+ else if (sQuestLogCursor >= sNumEventsInLogEntry)
{
gUnknown_3005E88 = 0;
}
@@ -1718,8 +1719,8 @@ void sub_8112B3C(void)
case 2:
if (ScriptContext2_IsEnabled() != TRUE)
{
- gUnknown_203B01A++;
- if (sQuestLogIdx >= sNumQuestLogs)
+ sNextStepDelay++;
+ if (sQuestLogCursor >= sNumEventsInLogEntry)
gUnknown_3005E88 = 0;
}
break;
@@ -1732,7 +1733,7 @@ void sub_8112B3C(void)
void sub_8112C9C(void)
{
- gUnknown_203B01A++;
+ sNextStepDelay++;
}
u8 sub_8112CAC(void)
@@ -1753,14 +1754,14 @@ u8 sub_8112CAC(void)
static bool8 sub_8112CEC(void)
{
- if (sQuestLogIdx >= sNumQuestLogs || ScriptContext2_IsEnabled() == TRUE)
+ if (sQuestLogCursor >= sNumEventsInLogEntry || ScriptContext2_IsEnabled() == TRUE)
return TRUE;
return FALSE;
}
-static bool8 sub_8112D1C(void)
+static bool8 RecordHeadAtEndOfEntry(void)
{
- if (sQuestLogIdx >= sNumQuestLogs)
+ if (sQuestLogCursor >= sNumEventsInLogEntry)
return TRUE;
return FALSE;
}
@@ -1774,9 +1775,9 @@ static const struct UnkStruct_300201C gUnknown_84566A4 = {
void * QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx)
{
void * response;
- if (sQuestLogIdx == 0)
+ if (sQuestLogCursor == 0)
return NULL;
- if (sQuestLogIdx >= sNumQuestLogs)
+ if (sQuestLogCursor >= sNumEventsInLogEntry)
return NULL;
if (sFlagOrVarPlayhead >= sNumFlagsOrVars)
return NULL;
@@ -1792,9 +1793,9 @@ void * QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx)
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value)
{
- if (sQuestLogIdx == 0)
+ if (sQuestLogCursor == 0)
return;
- if (sQuestLogIdx >= sNumQuestLogs)
+ if (sQuestLogCursor >= sNumEventsInLogEntry)
return;
if (sFlagOrVarPlayhead >= sNumFlagsOrVars)
return;
@@ -1817,7 +1818,7 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2)
sFlagOrVarPlayhead = 0;
if (a0 == 2)
{
- for (i = 0; i < sNumQuestLogs; i++)
+ for (i = 0; i < sNumEventsInLogEntry; i++)
{
sFlagOrVarRecords[i] = gUnknown_84566A4;
}
@@ -2395,7 +2396,7 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
return;
}
sub_811381C();
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
return;
if (!IS_VALID_QL_EVENT(eventId))
@@ -2431,7 +2432,7 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
{
if (sub_81153A8(eventId, eventData) == FALSE)
return;
- sub_8110AEC(eventId);
+ StartRecordingQuestLogEntry(eventId);
}
}
else if (eventId == QL_EVENT_OBTAINED_ITEM)
@@ -2513,10 +2514,10 @@ bool8 sub_8113748(void)
if (InQuestLogDisabledLocation() != TRUE)
return FALSE;
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
return TRUE;
- if (gQuestLogState == 1)
+ if (gQuestLogState == QL_STATE_1)
sub_8112364();
return FALSE;
@@ -2579,7 +2580,7 @@ static u16 *sub_8113828(u16 eventId, const u16 *eventData)
if (sub_81153A8(eventId, eventData) == FALSE)
return NULL;
- sub_8110AEC(eventId);
+ StartRecordingQuestLogEntry(eventId);
sub_8113B94(eventId);
if (eventId == QL_EVENT_DEFEATED_WILD_MON)
@@ -2619,7 +2620,7 @@ void sub_811390C(void)
{
u16 *resp;
gUnknown_203B04A = 0;
- sub_8110AEC(gUnknown_203B024.unk_00);
+ StartRecordingQuestLogEntry(gUnknown_203B024.unk_00);
resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](gUnknown_203AE08, gUnknown_203B024.unk_04);
gUnknown_203AE08 = resp;
sub_81138F8();
@@ -2651,7 +2652,7 @@ void sub_81139BC(void)
if (gUnknown_3005E88 == 0)
{
gUnknown_203B04A = 0;
- sub_8110AEC(gUnknown_203B024.unk_00);
+ StartRecordingQuestLogEntry(gUnknown_203B024.unk_00);
}
sub_8113B94(gUnknown_203B024.unk_00);
resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](gUnknown_203AE08, gUnknown_203B024.unk_04);
@@ -2665,7 +2666,7 @@ void sub_81139BC(void)
static void sub_8113A1C(u16 a0)
{
gUnknown_203AE08 = sub_8113C5C(gUnknown_203AE08, a0);
- sQuestLogIdx++;
+ sQuestLogCursor++;
}
static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16 eventId, const u16 *eventData)
@@ -2806,7 +2807,7 @@ static bool8 sub_8113AE8(const u16 *a0)
const u16 *r0 = a0;
#endif
- if (r0 == NULL || r0[1] > sQuestLogIdx)
+ if (r0 == NULL || r0[1] > sQuestLogCursor)
return FALSE;
sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0);
@@ -2836,11 +2837,11 @@ static void sub_8113B88(void)
static void sub_8113B94(u16 eventId)
{
- if (gUnknown_203B044.unk_0 != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogIdx)
+ if (gUnknown_203B044.unk_0 != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor)
{
gUnknown_203B044.unk_0 = eventId;
gUnknown_203B044.unk_1 = 0;
- gUnknown_203B044.unk_2 = sQuestLogIdx;
+ gUnknown_203B044.unk_2 = sQuestLogCursor;
}
else if (gUnknown_203B044.unk_1 < 5)
gUnknown_203B044.unk_1++;
@@ -2848,7 +2849,7 @@ static void sub_8113B94(u16 eventId)
static void sub_8113BD8(void)
{
- gUnknown_203B049 = 0;
+ sNewlyEnteredMap = FALSE;
gUnknown_203B04A = 0;
gUnknown_203B04B = FALSE;
}
@@ -2861,7 +2862,7 @@ static u16 *sub_8113BF4(u16 *a0)
return a0 + 1;
}
-static u16 *sub_8113C20(u16 *a0, struct UnkStruct_203AE98 * a1)
+static u16 *sub_8113C20(u16 *a0, struct QuestLogEntry * a1)
{
if (!sub_8110988(a0, sQuestLogEventCmdSizes[QL_EVENT_39]))
return NULL;
@@ -2883,7 +2884,7 @@ static u16 *sub_8113C5C(u16 *a0, u16 a1)
return a0 + 2;
}
-static u16 *sub_8113C8C(u16 *a0, struct UnkStruct_203AE98 * a1)
+static u16 *sub_8113C8C(u16 *a0, struct QuestLogEntry * a1)
{
if (!sub_8110988(a0, sQuestLogEventCmdSizes[QL_EVENT_41]))
return NULL;
@@ -2896,7 +2897,7 @@ static u16 *sub_8113C8C(u16 *a0, struct UnkStruct_203AE98 * a1)
return a0 + 2;
}
-static u16 *sub_8113CC8(u16 *a0, struct UnkStruct_203AE98 * a1)
+static u16 *sub_8113CC8(u16 *a0, struct QuestLogEntry * a1)
{
u8 *r6 = (u8 *)a0 + 4;
@@ -2911,7 +2912,7 @@ static u16 *sub_8113CC8(u16 *a0, struct UnkStruct_203AE98 * a1)
return (u16 *)(r6 + 4);
}
-static u16 *sub_8113D08(u16 *a0, struct UnkStruct_203AE98 * a1)
+static u16 *sub_8113D08(u16 *a0, struct QuestLogEntry * a1)
{
u8 *r6 = (u8 *)a0 + 4;
@@ -2926,7 +2927,7 @@ static u16 *sub_8113D08(u16 *a0, struct UnkStruct_203AE98 * a1)
return (u16 *)(r6 + 4);
}
-static u16 *sub_8113D48(u16 *a0, struct UnkStruct_203AE98 * a1)
+static u16 *sub_8113D48(u16 *a0, struct QuestLogEntry * a1)
{
u16 *r4 = a0;
u8 *r6 = (u8 *)a0 + 4;
@@ -2945,7 +2946,7 @@ static u16 *sub_8113D48(u16 *a0, struct UnkStruct_203AE98 * a1)
return (u16 *)(r6 + 4);
}
-static u16 *sub_8113D94(u16 *a0, struct UnkStruct_203AE98 * a1)
+static u16 *sub_8113D94(u16 *a0, struct QuestLogEntry * a1)
{
u16 *r5 = a0;
u8 *r6 = (u8 *)a0 + 4;
@@ -2999,7 +3000,7 @@ u16 *sub_8113DE0(u16 eventId, u16 *a1)
r1 = gUnknown_203B044.unk_1;
r5[0] = eventId + (r1 << 12);
- r5[1] = sQuestLogIdx;
+ r5[1] = sQuestLogCursor;
r5 = (void *)r5 + (r1 * cmdSize + 4);
return r5;
}
@@ -3244,7 +3245,7 @@ static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData)
return NULL;
r4[0] = QL_EVENT_USED_PKMN_CENTER;
- r4[1] = sQuestLogIdx;
+ r4[1] = sQuestLogCursor;
return r4 + 2;
}
@@ -3260,7 +3261,7 @@ static u16 *BufferQuestLogData_LinkTraded(u16 *a0, const u16 *eventData)
u16 *r4 = a0 + 4;
a0[0] = QL_EVENT_LINK_TRADED;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
a0[2] = eventData[0];
a0[3] = eventData[1];
eventData += 2;
@@ -3305,7 +3306,7 @@ static const u8 *const sBattleOutcomeTexts[] = {
static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData)
{
a0[0] = QL_EVENT_LINK_BATTLED_SINGLE;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
@@ -3329,7 +3330,7 @@ static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0)
static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData)
{
a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
@@ -3353,7 +3354,7 @@ static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0)
static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData)
{
a0[0] = QL_EVENT_LINK_BATTLED_MULTI;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH);
@@ -3388,7 +3389,7 @@ static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0)
static u16 *BufferQuestLogData_UsedUnionRoom(u16 *a0, const u16 *eventData)
{
a0[0] = QL_EVENT_USED_UNION_ROOM;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
return a0 + 2;
}
@@ -3402,7 +3403,7 @@ static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *a0)
static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *a0, const u16 *eventData)
{
a0[0] = QL_EVENT_USED_UNION_ROOM_CHAT;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
return a0 + 2;
}
@@ -3417,7 +3418,7 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData
{
u8 *r4 = (u8 *)(a0 + 4);
a0[0] = QL_EVENT_LINK_TRADED_UNION;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
a0[2] = eventData[0];
a0[3] = eventData[1];
memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH);
@@ -3441,7 +3442,7 @@ static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0)
static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventData)
{
a0[0] = QL_EVENT_LINK_BATTLED_UNION;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
*(u8 *)&a0[2] = *(const u8 *)&eventData[0];
memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
@@ -3743,7 +3744,7 @@ static u16 *BufferQuestLogData_DefeatedWildMon(u16 *a0, const u16 *eventData)
if (r5[0] == 0 && r5[1] == 0)
{
r4[0] = QL_EVENT_DEFEATED_WILD_MON;
- r4[1] = sQuestLogIdx;
+ r4[1] = sQuestLogCursor;
}
if (eventData[0])
r4[2] = eventData[0];
@@ -3847,7 +3848,7 @@ static u16 *BufferQuestLogData_DefeatedChampion(u16 *a0, const u16 *eventData)
if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION]))
return NULL;
a0[0] = 0x2021;
- a0[1] = sQuestLogIdx;
+ a0[1] = sQuestLogCursor;
a0[2] = eventData[1];
a0[3] = eventData[2];
*((u8 *)a0 + 8) = *((const u8 *)eventData + 6);
@@ -4299,7 +4300,7 @@ void QuestLog_RecordEnteredMap(u16 worldMapFlag)
{
s32 i;
- if (gQuestLogState == 2 || gQuestLogState == 3)
+ if (gQuestLogState == QL_STATE_2 || gQuestLogState == QL_STATE_3)
return;
for (i = 0; i < (int)NELEMS(sQuestLogWorldMapFlags); i++)
@@ -4308,13 +4309,13 @@ void QuestLog_RecordEnteredMap(u16 worldMapFlag)
{
if (!FlagGet(worldMapFlag))
{
- gUnknown_203B049 = TRUE;
+ sNewlyEnteredMap = TRUE;
break;
}
else
{
- gUnknown_203B049 += 0;
- gUnknown_203B049 = FALSE;
+ sNewlyEnteredMap += 0;
+ sNewlyEnteredMap = FALSE;
break;
}
}
@@ -4324,13 +4325,13 @@ void QuestLog_RecordEnteredMap(u16 worldMapFlag)
void sub_8115798(void)
{
u16 sp0;
- if (gQuestLogState != 2 && gQuestLogState != 3)
+ if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3)
{
- if (gUnknown_203B049)
+ if (sNewlyEnteredMap)
{
sp0 = gMapHeader.regionMapSectionId;
SetQuestLogEvent(QL_EVENT_ARRIVED, &sp0);
- gUnknown_203B049 = FALSE;
+ sNewlyEnteredMap = FALSE;
}
}
}
diff --git a/src/quest_log_objects.c b/src/quest_log_objects.c
index 2c17987e8..64b4b7fe5 100644
--- a/src/quest_log_objects.c
+++ b/src/quest_log_objects.c
@@ -45,7 +45,7 @@ void SetQuestLogObjectEventsData(struct QuestLog * questLog)
}
}
-void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTemplate * templates)
+void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const struct ObjectEventTemplate * templates)
{
u32 i, j;
const struct QuestLogObjectEvent * questLogObjectEvents = questLog->unk_008;
@@ -131,7 +131,7 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTempl
void sub_815A540(void)
{
- if (gQuestLogState == 2)
+ if (gQuestLogState == QL_STATE_2)
{
s16 x, y;
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index be40042b3..42233999e 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -39,7 +39,7 @@ void sub_8150454(u8 a0)
gUnknown_8471EDC[a0]();
}
-bool8 sub_8150474(u8 a0)
+bool32 sub_8150474(u8 a0)
{
if (gUnknown_3005E88 == 2)
{
@@ -87,7 +87,7 @@ static void sub_8150530(void)
else
{
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(4));
- StartSpriteAnim(sprite, GetFishingNoCatchDirectionAnimNum(objectEvent->facingDirection));
+ StartSpriteAnim(sprite, GetFishingDirectionAnimNum(objectEvent->facingDirection));
}
}
@@ -102,23 +102,23 @@ static void sub_81505C4(u8 taskId)
ObjectEventClearHeldMovementIfActive(objectEvent);
objectEvent->enableAnim = TRUE;
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(4));
- StartSpriteAnim(sprite, GetFishingNoCatchDirectionAnimNum(objectEvent->facingDirection));
+ StartSpriteAnim(sprite, GetFishingDirectionAnimNum(objectEvent->facingDirection));
gTasks[taskId].data[0]++;
gTasks[taskId].data[1] = 0;
break;
case 1:
- sub_805D9C4(sprite);
+ AlignFishingAnimationFrames(sprite);
if (gTasks[taskId].data[1] < 60)
gTasks[taskId].data[1]++;
else
gTasks[taskId].data[0]++;
break;
case 2:
- StartSpriteAnim(sprite, GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
+ StartSpriteAnim(sprite, GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
gTasks[taskId].data[0]++;
break;
case 3:
- sub_805D9C4(sprite);
+ AlignFishingAnimationFrames(sprite);
if (sprite->animEnded)
{
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
@@ -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);
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 2b5137f9a..af977fbc7 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -802,7 +802,7 @@ bool8 ScrCmd_warpteleport2(struct ScriptContext * ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_805DAE4(GetPlayerFacingDirection());
+ SavePlayerFacingDirectionForTeleport(GetPlayerFacingDirection());
sub_807E500();
ResetInitialPlayerAvatarState();
return TRUE;
diff --git a/src/seagallop.c b/src/seagallop.c
index 1e2234b9c..fb55e6bd2 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -322,7 +322,7 @@ static void Task_Seagallop_3(void)
SetWarpDestination(warpInfo[0], warpInfo[1], -1, warpInfo[2], warpInfo[3]);
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = sub_807DF64;
+ gFieldCallback = FieldCB_UnionRoomWarp;
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
ResetInitialPlayerAvatarState();
diff --git a/src/strings.c b/src/strings.c
index faf42c86a..547a36138 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1056,9 +1056,9 @@ const u8 gText_BerryCrush2[] = _("BERRY CRUSH");
const u8 gText_PressingSpeedRankings[] = _("Pressing-Speed Rankings");
const u8 gText_Var1Players[] = _("{STR_VAR_1} PLAYERS");
ALIGNED(4) const u8 gText_Ghost[] = _("GHOST");
-const u8 gUnknown_841D14E[] = _("A POKéMON's on the hook!{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_841D169[] = _("Not even a nibble‥{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_841D17E[] = _("It got away‥{PAUSE_UNTIL_PRESS}");
+const u8 gText_PokemonOnHook[] = _("A POKéMON's on the hook!{PAUSE_UNTIL_PRESS}");
+const u8 gText_NotEvenANibble[] = _("Not even a nibble‥{PAUSE_UNTIL_PRESS}");
+const u8 gText_ItGotAway[] = _("It got away‥{PAUSE_UNTIL_PRESS}");
const u8 gUnknown_841D18D[] = _("ROOFTOP");
ALIGNED(4) const u8 gString_PokemonFireRed_Staff[] = _("Pokémon FireRed Version\nStaff");
ALIGNED(4) const u8 gString_PokemonLeafGreen_Staff[] = _("Pokémon LeafGreen Version\nStaff");
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 085b26c32..c1eca3171 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -78,21 +78,8 @@ gLinkPlayerObjectEvents: @ 2031DEC
.include "src/fieldmap.o"
.align 2
.include "src/field_camera.o"
-
.align 2
- @ .include "src/field_player_avatar.o"
-gUnknown_2036E30: @ 2036E30
- .space 0x4
-
-gUnknown_2036E34: @ 2036E34
- .space 0x4
-
-gObjectEvents: @ 2036E38
- .space 0x240
-
-gPlayerAvatar: @ 2037078
- .space 0x20
-
+ .include "src/field_player_avatar.o"
.align 2
.include "src/event_object_movement.o"
.align 2