From dbac777d95875b49e98da94551a89616c2addf3c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 22 Mar 2020 20:17:47 -0400 Subject: [PATCH 01/16] through CheckMovementInputNotOnBike --- asm/bike.s | 22 +- asm/field_player_avatar.s | 999 ++------------------ asm/overworld.s | 2 +- berry_fix/payload/include/global.fieldmap.h | 4 +- data/event_object_movement.s | 333 +++---- data/field_player_avatar.s | 29 - include/bike.h | 3 + include/event_object_movement.h | 3 + include/global.fieldmap.h | 6 +- include/metatile_behavior.h | 8 +- ld_script.txt | 2 + src/event_object_movement.c | 4 +- src/field_control_avatar.c | 10 +- src/field_player_avatar.c | 405 ++++++++ src/metatile_behavior.c | 8 +- sym_ewram.txt | 15 +- 16 files changed, 694 insertions(+), 1159 deletions(-) create mode 100644 src/field_player_avatar.c diff --git a/asm/bike.s b/asm/bike.s index e73e906bc..15c376261 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 @@ -362,11 +362,11 @@ _080BD334: 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} @@ -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 diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 31123a703..1c17720bf 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,843 +5,6 @@ .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} @@ -853,25 +16,25 @@ PlayerNotOnBikeNotMoving: @ 805B9B0 bx r0 thumb_func_end PlayerNotOnBikeNotMoving - thumb_func_start sub_805B9C4 -sub_805B9C4: @ 805B9C4 + thumb_func_start PlayerNotOnBikeTurningInPlace +PlayerNotOnBikeTurningInPlace: @ 805B9C4 push {lr} lsls r0, 24 lsrs r0, 24 - bl sub_805C224 + bl PlayerTurnInPlace pop {r0} bx r0 - thumb_func_end sub_805B9C4 + thumb_func_end PlayerNotOnBikeTurningInPlace - thumb_func_start sub_805B9D4 -sub_805B9D4: @ 805B9D4 + thumb_func_start PlayerNotOnBikeMoving +PlayerNotOnBikeMoving: @ 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 + bl CheckForPlayerAvatarCollision lsls r0, 24 lsrs r0, 24 adds r1, r0, 0 @@ -880,7 +43,7 @@ sub_805B9D4: @ 805B9D4 cmp r0, 0x6 bne _0805B9FA adds r0, r4, 0 - bl sub_805C23C + bl PlayerJumpLedge b _0805BAA4 _0805B9FA: cmp r0, 0x8 @@ -905,7 +68,7 @@ _0805BA18: cmp r0, 0 beq _0805BA30 adds r0, r4, 0 - bl sub_805C11C + bl PlayerGoSpeed2 b _0805BAA4 .align 2, 0 _0805BA2C: .4byte gPlayerAvatar @@ -926,7 +89,7 @@ _0805BA30: lsls r0, 2 adds r0, r2 ldrb r0, [r0, 0x1E] - bl sub_80BD488 + bl IsRunningDisallowed cmp r0, 0 bne _0805BA8C adds r0, r4, 0 @@ -934,14 +97,14 @@ _0805BA30: cmp r0, 0 beq _0805BA74 adds r0, r4, 0 - bl sub_805C194 + bl PlayerRunSlow b _0805BA7A .align 2, 0 _0805BA6C: .4byte 0x0000082f _0805BA70: .4byte gObjectEvents _0805BA74: adds r0, r4, 0 - bl sub_805C17C + bl PlayerRun _0805BA7A: ldr r2, _0805BA88 @ =gPlayerAvatar ldrb r1, [r2] @@ -961,12 +124,12 @@ _0805BA8C: b _0805BAA4 _0805BA9E: adds r0, r4, 0 - bl sub_805C104 + bl PlayerGoSpeed1 _0805BAA4: pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_805B9D4 + thumb_func_end PlayerNotOnBikeMoving thumb_func_start sub_805BAAC sub_805BAAC: @ 805BAAC @@ -1028,8 +191,8 @@ _0805BB14: bx r1 thumb_func_end sub_805BAAC - thumb_func_start sub_805BB1C -sub_805BB1C: @ 805BB1C + thumb_func_start CheckForPlayerAvatarCollision +CheckForPlayerAvatarCollision: @ 805BB1C push {r4-r6,lr} sub sp, 0x8 lsls r0, 24 @@ -1094,7 +257,7 @@ _0805BB9E: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_805BB1C + thumb_func_end CheckForPlayerAvatarCollision thumb_func_start sub_805BBA8 sub_805BBA8: @ 805BBA8 @@ -1716,8 +879,8 @@ _0805C01C: .4byte gPlayerAvatar _0805C020: .4byte gObjectEvents thumb_func_end sub_805BFFC - thumb_func_start sub_805C024 -sub_805C024: @ 805C024 + thumb_func_start PlayerSetAnimId +PlayerSetAnimId: @ 805C024 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 @@ -1750,7 +913,7 @@ _0805C05E: .align 2, 0 _0805C064: .4byte gPlayerAvatar _0805C068: .4byte gObjectEvents - thumb_func_end sub_805C024 + thumb_func_end PlayerSetAnimId thumb_func_start sub_805C06C sub_805C06C: @ 805C06C @@ -1816,7 +979,7 @@ sub_805C0D4: @ 805C0D4 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C0D4 @@ -1830,13 +993,13 @@ sub_805C0EC: @ 805C0EC lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C0EC - thumb_func_start sub_805C104 -sub_805C104: @ 805C104 + thumb_func_start PlayerGoSpeed1 +PlayerGoSpeed1: @ 805C104 push {lr} lsls r0, 24 lsrs r0, 24 @@ -1844,13 +1007,13 @@ sub_805C104: @ 805C104 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C104 + thumb_func_end PlayerGoSpeed1 - thumb_func_start sub_805C11C -sub_805C11C: @ 805C11C + thumb_func_start PlayerGoSpeed2 +PlayerGoSpeed2: @ 805C11C push {lr} lsls r0, 24 lsrs r0, 24 @@ -1858,10 +1021,10 @@ sub_805C11C: @ 805C11C lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C11C + thumb_func_end PlayerGoSpeed2 thumb_func_start sub_805C134 sub_805C134: @ 805C134 @@ -1872,13 +1035,13 @@ sub_805C134: @ 805C134 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C134 - thumb_func_start sub_805C14C -sub_805C14C: @ 805C14C + thumb_func_start PlayerRideWaterCurrent +PlayerRideWaterCurrent: @ 805C14C push {lr} lsls r0, 24 lsrs r0, 24 @@ -1886,10 +1049,10 @@ sub_805C14C: @ 805C14C lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C14C + thumb_func_end PlayerRideWaterCurrent thumb_func_start sub_805C164 sub_805C164: @ 805C164 @@ -1900,38 +1063,38 @@ sub_805C164: @ 805C164 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C164 - thumb_func_start sub_805C17C -sub_805C17C: @ 805C17C + thumb_func_start PlayerRun +PlayerRun: @ 805C17C push {lr} lsls r0, 24 lsrs r0, 24 - bl sub_806408C + bl GetPlayerRunMovementAction lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C17C + thumb_func_end PlayerRun - thumb_func_start sub_805C194 -sub_805C194: @ 805C194 + thumb_func_start PlayerRunSlow +PlayerRunSlow: @ 805C194 push {lr} lsls r0, 24 lsrs r0, 24 - bl sub_80640B8 + bl GetPlayerRunSlowMovementAction lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C194 + thumb_func_end PlayerRunSlow thumb_func_start PlayerOnBikeCollide PlayerOnBikeCollide: @ 805C1AC @@ -1946,7 +1109,7 @@ PlayerOnBikeCollide: @ 805C1AC lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -1965,7 +1128,7 @@ PlayerNotOnBikeCollide: @ 805C1D0 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -1980,7 +1143,7 @@ PlayerFaceDirection: @ 805C1F4 lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end PlayerFaceDirection @@ -1994,13 +1157,13 @@ sub_805C20C: @ 805C20C lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C20C - thumb_func_start sub_805C224 -sub_805C224: @ 805C224 + thumb_func_start PlayerTurnInPlace +PlayerTurnInPlace: @ 805C224 push {lr} lsls r0, 24 lsrs r0, 24 @@ -2008,13 +1171,13 @@ sub_805C224: @ 805C224 lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C224 + thumb_func_end PlayerTurnInPlace - thumb_func_start sub_805C23C -sub_805C23C: @ 805C23C + thumb_func_start PlayerJumpLedge +PlayerJumpLedge: @ 805C23C push {r4,lr} adds r4, r0, 0 lsls r4, 24 @@ -2026,18 +1189,18 @@ sub_805C23C: @ 805C23C lsls r0, 24 lsrs r0, 24 movs r1, 0x8 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 - thumb_func_end sub_805C23C + thumb_func_end PlayerJumpLedge thumb_func_start sub_805C260 sub_805C260: @ 805C260 push {lr} movs r0, 0x9F movs r1, 0 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C260 @@ -2078,8 +1241,8 @@ _0805C2AC: .4byte gPlayerAvatar _0805C2B0: .4byte gObjectEvents thumb_func_end sub_805C270 - thumb_func_start sub_805C2B4 -sub_805C2B4: @ 805C2B4 + thumb_func_start PlayerGoSpin +PlayerGoSpin: @ 805C2B4 push {lr} lsls r0, 24 lsrs r0, 24 @@ -2087,17 +1250,17 @@ sub_805C2B4: @ 805C2B4 lsls r0, 24 lsrs r0, 24 movs r1, 0x3 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C2B4 + thumb_func_end PlayerGoSpin 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 r1, _0805C308 @ =sForcedMovementFuncs ldr r0, [r1] cmp r0, 0 beq _0805C302 @@ -2126,7 +1289,7 @@ _0805C302: pop {r0} bx r0 .align 2, 0 -_0805C308: .4byte gUnknown_835B764 +_0805C308: .4byte sForcedMovementFuncs thumb_func_end sub_805C2CC thumb_func_start sub_805C30C @@ -2138,7 +1301,7 @@ sub_805C30C: @ 805C30C lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C30C @@ -2152,7 +1315,7 @@ sub_805C324: @ 805C324 lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C324 @@ -2166,7 +1329,7 @@ sub_805C33C: @ 805C33C lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C33C @@ -2184,7 +1347,7 @@ sub_805C354: @ 805C354 lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -2203,7 +1366,7 @@ sub_805C378: @ 805C378 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -2222,7 +1385,7 @@ sub_805C39C: @ 805C39C lsls r0, 24 lsrs r0, 24 movs r1, 0x8 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -2241,7 +1404,7 @@ sub_805C3C0: @ 805C3C0 lsls r0, 24 lsrs r0, 24 movs r1, 0x1 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -2260,7 +1423,7 @@ sub_805C3E4: @ 805C3E4 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r4} pop {r0} bx r0 @@ -2275,7 +1438,7 @@ sub_805C408: @ 805C408 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C408 @@ -2289,7 +1452,7 @@ sub_805C420: @ 805C420 lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805C024 + bl PlayerSetAnimId pop {r0} bx r0 thumb_func_end sub_805C420 @@ -3639,8 +2802,8 @@ _0805CE78: .4byte gPlayerAvatar _0805CE7C: .4byte taskFF_bump_boulder thumb_func_end sub_805CE20 - thumb_func_start sub_805CE80 -sub_805CE80: @ 805CE80 + thumb_func_start DoPlayerMatJump +DoPlayerMatJump: @ 805CE80 push {r4,lr} ldr r4, _0805CE9C @ =sub_805CEA0 adds r0, r4, 0 @@ -3654,7 +2817,7 @@ sub_805CE80: @ 805CE80 bx r0 .align 2, 0 _0805CE9C: .4byte sub_805CEA0 - thumb_func_end sub_805CE80 + thumb_func_end DoPlayerMatJump thumb_func_start sub_805CEA0 sub_805CEA0: @ 805CEA0 @@ -3747,8 +2910,8 @@ _0805CF50: .4byte gPlayerAvatar _0805CF54: .4byte sub_805CEA0 thumb_func_end PlayerAvatar_DoSecretBaseMatJump - thumb_func_start sub_805CF58 -sub_805CF58: @ 805CF58 + thumb_func_start DoPlayerMatSpin +DoPlayerMatSpin: @ 805CF58 push {r4,lr} ldr r4, _0805CF74 @ =sub_805CF78 adds r0, r4, 0 @@ -3762,7 +2925,7 @@ sub_805CF58: @ 805CF58 bx r0 .align 2, 0 _0805CF74: .4byte sub_805CF78 - thumb_func_end sub_805CF58 + thumb_func_end DoPlayerMatSpin thumb_func_start sub_805CF78 sub_805CF78: @ 805CF78 diff --git a/asm/overworld.s b/asm/overworld.s index ba9b03930..8e20c09f4 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -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 diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h index f5a5173c6..d001f9b45 100644 --- a/berry_fix/payload/include/global.fieldmap.h +++ b/berry_fix/payload/include/global.fieldmap.h @@ -231,8 +231,8 @@ 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_FORCED_MVMT_DISABLED (1 << 5) +#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << 6) #define PLAYER_AVATAR_FLAG_DASH (1 << 7) enum diff --git a/data/event_object_movement.s b/data/event_object_movement.s index 259099795..6aad8341a 100644 --- a/data/event_object_movement.s +++ b/data/event_object_movement.s @@ -1,3 +1,4 @@ +#include "constants/event_object_movement.h" .include "asm/macros.inc" .include "constants/constants.inc" .section .rodata @@ -769,7 +770,7 @@ sMovementTypeCallbacks:: @ 839FBC8 .4byte MovementType_FaceDirection .4byte MovementType_FaceDirection .4byte MovementType_FaceDirection - .4byte sub_805B3B8 + .4byte MovementType_Player .4byte NULL .4byte MovementType_FaceDownAndUp .4byte MovementType_FaceLeftAndRight @@ -7888,235 +7889,235 @@ sDirectionToVectors:: @ 83A64C8 @ gFaceDirectionMovementActions gFaceDirectionMovementActions:: @ 83A64EC - .byte 0x0 @ DIR_NONE - .byte 0x0 @ DIR_SOUTH - .byte 0x1 @ DIR_NORTH - .byte 0x2 @ DIR_WEST - .byte 0x3 @ DIR_EAST + .byte MOVEMENT_ACTION_FACE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_FACE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_FACE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_FACE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_FACE_RIGHT @ DIR_EAST gWalkSlowMovementActions:: @ 83A64F1 - .byte 0x4 @ DIR_NONE - .byte 0x4 @ DIR_SOUTH - .byte 0x5 @ DIR_NORTH - .byte 0x6 @ DIR_WEST - .byte 0x7 @ DIR_EAST + .byte MOVEMENT_ACTION_FACE_DOWN_FAST @ DIR_NONE + .byte MOVEMENT_ACTION_FACE_DOWN_FAST @ DIR_SOUTH + .byte MOVEMENT_ACTION_FACE_UP_FAST @ DIR_NORTH + .byte MOVEMENT_ACTION_FACE_LEFT_FAST @ DIR_WEST + .byte MOVEMENT_ACTION_FACE_RIGHT_FAST @ DIR_EAST gUnknown_83A64F6:: @ 83A64F6 - .byte 0x9B @ DIR_NONE - .byte 0x9B @ DIR_SOUTH - .byte 0x9C @ DIR_NORTH - .byte 0x9D @ DIR_WEST - .byte 0x9E @ DIR_EAST + .byte MOVEMENT_ACTION_0x9B @ DIR_NONE + .byte MOVEMENT_ACTION_0x9B @ DIR_SOUTH + .byte MOVEMENT_ACTION_0x9C @ DIR_NORTH + .byte MOVEMENT_ACTION_0x9D @ DIR_WEST + .byte MOVEMENT_ACTION_0x9E @ DIR_EAST gUnknown_83A64FB:: @ 83A64FB - .byte 0x8 @ DIR_NONE - .byte 0x8 @ DIR_SOUTH - .byte 0x9 @ DIR_NORTH - .byte 0xA @ DIR_WEST - .byte 0xB @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_SLOWEST_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_SLOWEST_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_SLOWEST_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_SLOWEST_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_SLOWEST_RIGHT @ DIR_EAST gUnknown_83A6500:: @ 83A6500 - .byte 0xC @ DIR_NONE - .byte 0xC @ DIR_SOUTH - .byte 0xD @ DIR_NORTH - .byte 0xE @ DIR_WEST - .byte 0xF @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_SLOW_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_SLOW_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_SLOW_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_SLOW_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_SLOW_RIGHT @ DIR_EAST gUnknown_83A6505:: @ 83A6505 - .byte 0x10 @ DIR_NONE - .byte 0x10 @ DIR_SOUTH - .byte 0x11 @ DIR_NORTH - .byte 0x12 @ DIR_WEST - .byte 0x13 @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_NORMAL_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_NORMAL_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_NORMAL_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_NORMAL_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_NORMAL_RIGHT @ DIR_EAST gUnknown_83A650A:: @ 83A650A - .byte 0x1D @ DIR_NONE - .byte 0x1D @ DIR_SOUTH - .byte 0x1E @ DIR_NORTH - .byte 0x1F @ DIR_WEST - .byte 0x20 @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_FAST_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_FAST_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_FAST_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_FAST_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_FAST_RIGHT @ DIR_EAST gUnknown_83A650F:: @ 83A650F - .byte 0xA0 @ DIR_NONE - .byte 0xA0 @ DIR_SOUTH - .byte 0xA1 @ DIR_NORTH - .byte 0xA2 @ DIR_WEST - .byte 0xA3 @ DIR_EAST + .byte MOVEMENT_ACTION_0xA0 @ DIR_NONE + .byte MOVEMENT_ACTION_0xA0 @ DIR_SOUTH + .byte MOVEMENT_ACTION_0xA1 @ DIR_NORTH + .byte MOVEMENT_ACTION_0xA2 @ DIR_WEST + .byte MOVEMENT_ACTION_0xA3 @ DIR_EAST gUnknown_83A6514:: @ 83A6514 - .byte 0x31 @ DIR_NONE - .byte 0x31 @ DIR_SOUTH - .byte 0x32 @ DIR_NORTH - .byte 0x33 @ DIR_WEST - .byte 0x34 @ DIR_EAST + .byte MOVEMENT_ACTION_FACE_DOWN_SLOW @ DIR_NONE + .byte MOVEMENT_ACTION_FACE_DOWN_SLOW @ DIR_SOUTH + .byte MOVEMENT_ACTION_FACE_UP_SLOW @ DIR_NORTH + .byte MOVEMENT_ACTION_FACE_LEFT_SLOW @ DIR_WEST + .byte MOVEMENT_ACTION_FACE_RIGHT_SLOW @ DIR_EAST gUnknown_83A6519:: @ 83A6519 - .byte 0x35 @ DIR_NONE - .byte 0x35 @ DIR_SOUTH - .byte 0x36 @ DIR_NORTH - .byte 0x37 @ DIR_WEST - .byte 0x38 @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_FASTEST_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_FASTEST_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_FASTEST_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_FASTEST_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_FASTEST_RIGHT @ DIR_EAST gUnknown_83A651E:: @ 83A651E - .byte 0x39 @ DIR_NONE - .byte 0x39 @ DIR_SOUTH - .byte 0x3A @ DIR_NORTH - .byte 0x3B @ DIR_WEST - .byte 0x3C @ DIR_EAST + .byte MOVEMENT_ACTION_SLIDE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_SLIDE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_SLIDE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_SLIDE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_SLIDE_RIGHT @ DIR_EAST gUnknown_83A6523:: @ 83A6523 - .byte 0x3D @ DIR_NONE - .byte 0x3D @ DIR_SOUTH - .byte 0x3E @ DIR_NORTH - .byte 0x3F @ DIR_WEST - .byte 0x40 @ DIR_EAST + .byte MOVEMENT_ACTION_PLAYER_RUN_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_PLAYER_RUN_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_PLAYER_RUN_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_PLAYER_RUN_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_PLAYER_RUN_RIGHT @ DIR_EAST gUnknown_83A6528:: @ 83A6528 - .byte 0x41 @ DIR_NONE - .byte 0x41 @ DIR_SOUTH - .byte 0x42 @ DIR_NORTH - .byte 0x43 @ DIR_WEST - .byte 0x44 @ DIR_EAST + .byte MOVEMENT_ACTION_PLAYER_RUN_DOWN_SLOW @ DIR_NONE + .byte MOVEMENT_ACTION_PLAYER_RUN_DOWN_SLOW @ DIR_SOUTH + .byte MOVEMENT_ACTION_PLAYER_RUN_UP_SLOW @ DIR_NORTH + .byte MOVEMENT_ACTION_PLAYER_RUN_LEFT_SLOW @ DIR_WEST + .byte MOVEMENT_ACTION_PLAYER_RUN_RIGHT_SLOW @ DIR_EAST gUnknown_83A652D:: @ 83A652D - .byte 0x94 @ DIR_NONE - .byte 0x94 @ DIR_SOUTH - .byte 0x95 @ DIR_NORTH - .byte 0x96 @ DIR_WEST - .byte 0x97 @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT @ DIR_EAST gUnknown_83A6532:: @ 83A6532 - .byte 0x14 @ DIR_NONE - .byte 0x14 @ DIR_SOUTH - .byte 0x15 @ DIR_NORTH - .byte 0x16 @ DIR_WEST - .byte 0x17 @ DIR_EAST + .byte MOVEMENT_ACTION_JUMP_2_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_JUMP_2_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_JUMP_2_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_JUMP_2_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_JUMP_2_RIGHT @ DIR_EAST gUnknown_83A6537:: @ 83A6537 - .byte 0x52 @ DIR_NONE - .byte 0x52 @ DIR_SOUTH - .byte 0x53 @ DIR_NORTH - .byte 0x54 @ DIR_WEST - .byte 0x55 @ DIR_EAST + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT @ DIR_EAST gUnknown_83A653C:: @ 83A653C - .byte 0x57 @ DIR_NONE - .byte 0x57 @ DIR_SOUTH - .byte 0x56 @ DIR_NORTH - .byte 0x59 @ DIR_WEST - .byte 0x58 @ DIR_EAST + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT @ DIR_EAST gUnknown_83A6541:: @ 83A6541 - .byte 0x4E @ DIR_NONE - .byte 0x4E @ DIR_SOUTH - .byte 0x4F @ DIR_NORTH - .byte 0x50 @ DIR_WEST - .byte 0x51 @ DIR_EAST + .byte MOVEMENT_ACTION_JUMP_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_JUMP_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_JUMP_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_JUMP_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_JUMP_RIGHT @ DIR_EAST gUnknown_83A6546:: @ 83A6546 - .byte 0x46 @ DIR_NONE - .byte 0x46 @ DIR_SOUTH - .byte 0x47 @ DIR_NORTH - .byte 0x48 @ DIR_WEST - .byte 0x49 @ DIR_EAST + .byte MOVEMENT_ACTION_JUMP_SPECIAL_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_JUMP_SPECIAL_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_JUMP_SPECIAL_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_JUMP_SPECIAL_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT @ DIR_EAST gUnknown_83A654B:: @ 83A654B - .byte 0xA6 @ DIR_NONE - .byte 0xA6 @ DIR_SOUTH - .byte 0xA7 @ DIR_NORTH - .byte 0xA8 @ DIR_WEST - .byte 0xA9 @ DIR_EAST + .byte MOVEMENT_ACTION_0xA6 @ DIR_NONE + .byte MOVEMENT_ACTION_0xA6 @ DIR_SOUTH + .byte MOVEMENT_ACTION_0xA7 @ DIR_NORTH + .byte MOVEMENT_ACTION_0xA8 @ DIR_WEST + .byte MOVEMENT_ACTION_0xA9 @ DIR_EAST gUnknown_83A6550:: @ 83A6550 - .byte 0x21 @ DIR_NONE - .byte 0x21 @ DIR_SOUTH - .byte 0x22 @ DIR_NORTH - .byte 0x23 @ DIR_WEST - .byte 0x24 @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT @ DIR_EAST gUnknown_83A6555:: @ 83A6555 - .byte 0x25 @ DIR_NONE - .byte 0x25 @ DIR_SOUTH - .byte 0x26 @ DIR_NORTH - .byte 0x27 @ DIR_WEST - .byte 0x28 @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT @ DIR_EAST gUnknown_83A655A:: @ 83A655A - .byte 0x29 @ DIR_NONE - .byte 0x29 @ DIR_SOUTH - .byte 0x2A @ DIR_NORTH - .byte 0x2B @ DIR_WEST - .byte 0x2C @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT @ DIR_EAST gUnknown_83A655F:: @ 83A655F - .byte 0x2D @ DIR_NONE - .byte 0x2D @ DIR_SOUTH - .byte 0x2E @ DIR_NORTH - .byte 0x2F @ DIR_WEST - .byte 0x30 @ DIR_EAST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT @ DIR_EAST gUnknown_83A6564:: @ 83A6564 - .byte 0x70 @ DIR_NONE - .byte 0x70 @ DIR_SOUTH - .byte 0x71 @ DIR_NORTH - .byte 0x72 @ DIR_WEST - .byte 0x73 @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT @ DIR_EAST gUnknown_83A6569:: @ 83A6569 - .byte 0x74 @ DIR_NONE - .byte 0x74 @ DIR_SOUTH - .byte 0x75 @ DIR_NORTH - .byte 0x76 @ DIR_WEST - .byte 0x77 @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT @ DIR_EAST gUnknown_83A656E:: @ 83A656E - .byte 0x78 @ DIR_NONE - .byte 0x78 @ DIR_SOUTH - .byte 0x79 @ DIR_NORTH - .byte 0x7A @ DIR_WEST - .byte 0x7B @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT @ DIR_EAST gUnknown_83A6573:: @ 83A6573 - .byte 0x7C @ DIR_NONE - .byte 0x7C @ DIR_SOUTH - .byte 0x7D @ DIR_NORTH - .byte 0x7E @ DIR_WEST - .byte 0x7F @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT @ DIR_EAST gUnknown_83A6578:: @ 83A6578 - .byte 0x80 @ DIR_NONE - .byte 0x80 @ DIR_SOUTH - .byte 0x81 @ DIR_NORTH - .byte 0x82 @ DIR_WEST - .byte 0x83 @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT @ DIR_EAST gUnknown_83A657D:: @ 83A657D - .byte 0x84 @ DIR_NONE - .byte 0x84 @ DIR_SOUTH - .byte 0x85 @ DIR_NORTH - .byte 0x86 @ DIR_WEST - .byte 0x87 @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT @ DIR_EAST gUnknown_83A6582:: @ 83A6582 - .byte 0x88 @ DIR_NONE - .byte 0x88 @ DIR_SOUTH - .byte 0x89 @ DIR_NORTH - .byte 0x8A @ DIR_WEST - .byte 0x8B @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT @ DIR_EAST gUnknown_83A6587:: @ 83A6587 - .byte 0x8C @ DIR_NONE - .byte 0x8C @ DIR_SOUTH - .byte 0x8D @ DIR_NORTH - .byte 0x8E @ DIR_WEST - .byte 0x8F @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT @ DIR_EAST gUnknown_83A658C:: @ 83A658C - .byte 0x90 @ DIR_NONE - .byte 0x90 @ DIR_SOUTH - .byte 0x91 @ DIR_NORTH - .byte 0x92 @ DIR_WEST - .byte 0x93 @ DIR_EAST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN @ DIR_NONE + .byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN @ DIR_SOUTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP @ DIR_NORTH + .byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT @ DIR_WEST + .byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT @ DIR_EAST @ gOppositeDirections ? gOppositeDirections:: @ 83A6591 diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s index be4036928..bfa367941 100644 --- a/data/field_player_avatar.s +++ b/data/field_player_avatar.s @@ -3,35 +3,6 @@ .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 diff --git a/include/bike.h b/include/bike.h index 30049ee8c..1ff1ed5a3 100644 --- a/include/bike.h +++ b/include/bike.h @@ -6,4 +6,7 @@ bool8 sub_80BD540(void); void StartTransitionToFlipBikeState(u8 flags); s16 GetPlayerSpeed(void); +void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys); +void MovePlayerNotOnBike(u8 direction, u16 heldKeys); + #endif //GUARD_BIKE_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index e01364e55..3d5ea03f1 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) @@ -186,6 +188,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); // Exported data declarations diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 3c4b5f382..fe794a69e 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -283,8 +283,8 @@ struct ObjectEventGraphicsInfo #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_FORCED_MVMT_DISABLED (1 << 5) +#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << 6) #define PLAYER_AVATAR_FLAG_DASH (1 << 7) enum @@ -349,7 +349,7 @@ struct PlayerAvatar /* 0x202E858 */ u32 unkC; u32 unk10; u8 unk14[8]; - u8 unk1C[8]; + u16 unk1C; // TODO: rest of struct }; diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index ae3e6a01d..34f5bbd7b 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -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/ld_script.txt b/ld_script.txt index 54078ab70..c28ee1b93 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -92,6 +92,7 @@ SECTIONS { src/metatile_behavior.o(.text); src/field_camera.o(.text); src/field_door.o(.text); + src/field_player_avatar.o(.text); asm/field_player_avatar.o(.text); src/event_object_movement.o(.text); src/field_message_box.o(.text); @@ -433,6 +434,7 @@ SECTIONS { src/fieldmap.o(.rodata); src/metatile_behavior.o(.rodata); src/field_door.o(.rodata); + src/field_player_avatar.o(.rodata); data/field_player_avatar.o(.rodata); data/event_object_movement.o(.rodata); src/event_object_movement.o(.rodata); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index a399ddf5e..dbde0cb93 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4623,8 +4623,8 @@ 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); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 89b90ca92..da3fb4a03 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_MVMT_IS_FORCED)) input->pressedStartButton = TRUE; if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) { - if (!(gPlayerAvatar.flags & 0x40)) + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED)) { 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_MVMT_IS_FORCED) && !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_MVMT_IS_FORCED) && !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; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c new file mode 100644 index 000000000..33c68a253 --- /dev/null +++ b/src/field_player_avatar.c @@ -0,0 +1,405 @@ +#include "global.h" +#include "gflib.h" +#include "bike.h" +#include "event_object_movement.h" +#include "field_player_avatar.h" +#include "metatile_behavior.h" +#include "constants/event_object_movement.h" +#include "constants/songs.h" + +EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; +EWRAM_DATA bool8 gUnknown_2036E34 = FALSE; +EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; +EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; + +u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite); +bool8 sub_805B528(void); +bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent * playerObjEvent, u8 direction); +void npc_clear_strange_bits(struct ObjectEvent * playerObjEvent); +void DoPlayerAvatarTransition(void); +bool8 TryDoMetatileBehaviorForcedMovement(void); +void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys); +void PlayerAllowForcedMovementIfMovingSameDirection(void); +bool8 ForcedMovement_None(void); +void PlayerJumpLedge(u8 direction); +u8 CheckForPlayerAvatarCollision(u8 direction); +bool8 ForcedMovement_Slip(void); +bool8 ForcedMovement_WalkSouth(void); +bool8 ForcedMovement_WalkNorth(void); +bool8 ForcedMovement_WalkWest(void); +bool8 ForcedMovement_WalkEast(void); +bool8 ForcedMovement_SpinRight(void); +bool8 ForcedMovement_SpinLeft(void); +bool8 ForcedMovement_SpinUp(void); +bool8 ForcedMovement_SpinDown(void); +void PlaySpinSound(void); +bool8 ForcedMovement_PushedSouthByCurrent(void); +bool8 ForcedMovement_PushedNorthByCurrent(void); +bool8 ForcedMovement_PushedWestByCurrent(void); +bool8 ForcedMovement_PushedEastByCurrent(void); +bool8 ForcedMovement_SlideSouth(void); +bool8 ForcedMovement_SlideNorth(void); +bool8 ForcedMovement_SlideWest(void); +bool8 ForcedMovement_SlideEast(void); +bool8 ForcedMovement_0xBB(void); +bool8 ForcedMovement_0xBC(void); +u8 CheckMovementInputNotOnBike(u8 direction); +void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys); +void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys); +void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys); +void PlayerGoSpeed2(u8 direction); +void PlayerGoSpeed1(u8 direction); +void PlayerGoSpin(u8 direction); +void PlayerRideWaterCurrent(u8 direction); +void sub_805C2CC(u8 metatileBehavior); +void sub_805CC40(struct ObjectEvent * playerObjEvent); +void DoPlayerMatJump(void); +void DoPlayerMatSpin(void); + +void MovementType_Player(struct Sprite *sprite) +{ + UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, ObjectEventCB2_NoMovement2); +} + +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(); + } + } + } +} + +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; +} + +void npc_clear_strange_bits(struct ObjectEvent *objEvent) +{ + objEvent->inanimate = 0; + objEvent->disableAnim = 0; + objEvent->facingDirectionLocked = 0; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH; +} + +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); +} + +void PlayerAllowForcedMovementIfMovingSameDirection(void) +{ + if (gPlayerAvatar.runningState == MOVING) + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; +} + +bool8 sub_805B528(void) +{ + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && MetatileBehavior_IsSpinTile(gPlayerAvatar.unk1C)) + { + gUnknown_2036E30 = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (gUnknown_2036E30->heldMovementFinished) + { + if (MetatileBehavior_IsStopSpinning(gUnknown_2036E30->currentMetatileBehavior)) + { + return FALSE; + } + if (MetatileBehavior_IsSpinTile(gUnknown_2036E30->currentMetatileBehavior)) + { + gPlayerAvatar.unk1C = gUnknown_2036E30->currentMetatileBehavior; + } + ObjectEventClearHeldMovement(gUnknown_2036E30); + sub_805C2CC(gPlayerAvatar.unk1C); + } + return TRUE; + } + return FALSE; +} + +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}, +}; + +bool8 TryDoMetatileBehaviorForcedMovement(void) +{ + int i; + u8 behavior; + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED)) + { + behavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior; + for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++) + { + if (sForcedMovementFuncs[i].unk0(behavior)) + { + gPlayerAvatar.unk1C = behavior; + return sForcedMovementFuncs[i].unk4(); + } + } + return sForcedMovementFuncs[i].unk4(); + } + else + { + for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++) + ; + return sForcedMovementFuncs[i].unk4(); + } +} + +bool8 ForcedMovement_None(void) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) + { + struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + + playerObjEvent->facingDirectionLocked = FALSE; + playerObjEvent->enableAnim = TRUE; + SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_MVMT_IS_FORCED; + } + return FALSE; +} + +u8 DoForcedMovement(u8 direction, MovementAction movementAction) +{ + struct PlayerAvatar *playerAvatar = &gPlayerAvatar; + u8 collision = CheckForPlayerAvatarCollision(direction); + + playerAvatar->flags |= PLAYER_AVATAR_FLAG_MVMT_IS_FORCED; + if (collision) + { + ForcedMovement_None(); + if (collision < COLLISION_STOP_SURFING) + { + return 0; + } + else + { + if (collision == COLLISION_LEDGE_JUMP) + PlayerJumpLedge(direction); + playerAvatar->flags |= PLAYER_AVATAR_FLAG_MVMT_IS_FORCED; + playerAvatar->runningState = MOVING; + return 1; + } + } + else + { + playerAvatar->runningState = MOVING; + movementAction(direction); + return 1; + } +} + +u8 DoForcedMovementInCurrentDirection(MovementAction movementAction) +{ + struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + + playerObjEvent->disableAnim = TRUE; + return DoForcedMovement(playerObjEvent->movementDirection, movementAction); +} + +bool8 ForcedMovement_Slip(void) +{ + return DoForcedMovementInCurrentDirection(PlayerGoSpeed2); +} + +bool8 ForcedMovement_WalkSouth(void) +{ + return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed1); +} + +bool8 ForcedMovement_WalkNorth(void) +{ + return DoForcedMovement(DIR_NORTH, PlayerGoSpeed1); +} + +bool8 ForcedMovement_WalkWest(void) +{ + return DoForcedMovement(DIR_WEST, PlayerGoSpeed1); +} + +bool8 ForcedMovement_WalkEast(void) +{ + return DoForcedMovement(DIR_EAST, PlayerGoSpeed1); +} + +bool8 ForcedMovement_SpinRight(void) +{ + PlaySpinSound(); + return DoForcedMovement(DIR_EAST, PlayerGoSpin); +} + +bool8 ForcedMovement_SpinLeft(void) +{ + PlaySpinSound(); + return DoForcedMovement(DIR_WEST, PlayerGoSpin); +} + +bool8 ForcedMovement_SpinUp(void) +{ + PlaySpinSound(); + return DoForcedMovement(DIR_NORTH, PlayerGoSpin); +} + +bool8 ForcedMovement_SpinDown(void) +{ + PlaySpinSound(); + return DoForcedMovement(DIR_SOUTH, PlayerGoSpin); +} + +void PlaySpinSound(void) +{ + PlaySE(SE_W013B); +} + +bool8 ForcedMovement_PushedSouthByCurrent(void) +{ + return DoForcedMovement(DIR_SOUTH, PlayerRideWaterCurrent); +} + +bool8 ForcedMovement_PushedNorthByCurrent(void) +{ + return DoForcedMovement(DIR_NORTH, PlayerRideWaterCurrent); +} + +bool8 ForcedMovement_PushedWestByCurrent(void) +{ + return DoForcedMovement(DIR_WEST, PlayerRideWaterCurrent); +} + +bool8 ForcedMovement_PushedEastByCurrent(void) +{ + return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent); +} + +u8 ForcedMovement_Slide(u8 direction, MovementAction movementAction) +{ + struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + + playerObjEvent->disableAnim = TRUE; + playerObjEvent->facingDirectionLocked = TRUE; + return DoForcedMovement(direction, movementAction); +} + +bool8 ForcedMovement_SlideSouth(void) +{ + return ForcedMovement_Slide(DIR_SOUTH, PlayerGoSpeed2); +} + +bool8 ForcedMovement_SlideNorth(void) +{ + return ForcedMovement_Slide(DIR_NORTH, PlayerGoSpeed2); +} + +bool8 ForcedMovement_SlideWest(void) +{ + return ForcedMovement_Slide(DIR_WEST, PlayerGoSpeed2); +} + +bool8 ForcedMovement_SlideEast(void) +{ + return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2); +} + +bool8 ForcedMovement_0xBB(void) +{ + DoPlayerMatJump(); + return TRUE; +} + +bool8 ForcedMovement_0xBC(void) +{ + DoPlayerMatSpin(); + return TRUE; +} + +void (*const gUnknown_835B814[])(u8, u16) = { + PlayerNotOnBikeNotMoving, + PlayerNotOnBikeTurningInPlace, + PlayerNotOnBikeMoving +}; + +void MovePlayerNotOnBike(u8 direction, u16 heldKeys) +{ + gUnknown_835B814[CheckMovementInputNotOnBike(direction)](direction, heldKeys); +} + +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; + } +} diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index d6a983744..988c9fad0 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -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/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 From f9a3607824d00f17999288e241fc3ad339716279 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Mar 2020 08:54:37 -0400 Subject: [PATCH 02/16] through CheckForObjectEventCollision --- asm/bike.s | 4 +- asm/field_player_avatar.s | 379 ++----------------------------- data/maps/PewterCity/scripts.inc | 2 +- include/bike.h | 2 +- include/constants/flags.h | 2 +- include/field_player_avatar.h | 1 + include/global.fieldmap.h | 7 +- src/field_player_avatar.c | 132 ++++++++++- 8 files changed, 152 insertions(+), 377 deletions(-) diff --git a/asm/bike.s b/asm/bike.s index 15c376261..5ca0e605c 100644 --- a/asm/bike.s +++ b/asm/bike.s @@ -357,7 +357,7 @@ _080BD334: cmp r1, 0xE beq _080BD342 adds r0, r4, 0 - bl sub_805BAAC + bl PlayerIsMovingOnRockStairs cmp r0, 0 beq _080BD34A _080BD342: @@ -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 diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 1c17720bf..029f1a3e0 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,357 +5,8 @@ .text - 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 PlayerNotOnBikeTurningInPlace -PlayerNotOnBikeTurningInPlace: @ 805B9C4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl PlayerTurnInPlace - pop {r0} - bx r0 - thumb_func_end PlayerNotOnBikeTurningInPlace - - thumb_func_start PlayerNotOnBikeMoving -PlayerNotOnBikeMoving: @ 805B9D4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r4, 0 - bl CheckForPlayerAvatarCollision - 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 PlayerJumpLedge - 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 PlayerGoSpeed2 - 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 IsRunningDisallowed - cmp r0, 0 - bne _0805BA8C - adds r0, r4, 0 - bl sub_805BAAC - cmp r0, 0 - beq _0805BA74 - adds r0, r4, 0 - bl PlayerRunSlow - b _0805BA7A - .align 2, 0 -_0805BA6C: .4byte 0x0000082f -_0805BA70: .4byte gObjectEvents -_0805BA74: - adds r0, r4, 0 - bl PlayerRun -_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 PlayerGoSpeed1 -_0805BAA4: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end PlayerNotOnBikeMoving - - 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 CheckForPlayerAvatarCollision -CheckForPlayerAvatarCollision: @ 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 CheckForPlayerAvatarCollision - - 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 + thumb_func_start CanStopSurfing +CanStopSurfing: @ 805BC60 push {r4-r6,lr} lsls r0, 16 lsrs r3, r0, 16 @@ -404,10 +55,10 @@ _0805BCC2: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_805BC60 + thumb_func_end CanStopSurfing - thumb_func_start sub_805BCC8 -sub_805BCC8: @ 805BCC8 + thumb_func_start ShouldJumpLedge +ShouldJumpLedge: @ 805BCC8 push {lr} lsls r2, 24 lsrs r2, 24 @@ -426,10 +77,10 @@ _0805BCE4: _0805BCE6: pop {r1} bx r1 - thumb_func_end sub_805BCC8 + thumb_func_end ShouldJumpLedge - thumb_func_start sub_805BCEC -sub_805BCEC: @ 805BCEC + thumb_func_start TryPushBoulder +TryPushBoulder: @ 805BCEC push {r4-r7,lr} sub sp, 0x4 mov r3, sp @@ -518,10 +169,10 @@ _0805BDA2: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_805BCEC + thumb_func_end TryPushBoulder - thumb_func_start check_acro_bike_metatile -check_acro_bike_metatile: @ 805BDAC + thumb_func_start CheckAcroBikeCollision +CheckAcroBikeCollision: @ 805BDAC push {r4-r7,lr} adds r6, r3, 0 lsls r2, 24 @@ -555,7 +206,7 @@ _0805BDE6: pop {r4-r7} pop {r0} bx r0 - thumb_func_end check_acro_bike_metatile + thumb_func_end CheckAcroBikeCollision thumb_func_start SetPlayerAvatarTransitionFlags SetPlayerAvatarTransitionFlags: @ 805BDEC @@ -984,8 +635,8 @@ sub_805C0D4: @ 805C0D4 bx r0 thumb_func_end sub_805C0D4 - thumb_func_start sub_805C0EC -sub_805C0EC: @ 805C0EC + thumb_func_start PlayerGoSlow +PlayerGoSlow: @ 805C0EC push {lr} lsls r0, 24 lsrs r0, 24 @@ -996,7 +647,7 @@ sub_805C0EC: @ 805C0EC bl PlayerSetAnimId pop {r0} bx r0 - thumb_func_end sub_805C0EC + thumb_func_end PlayerGoSlow thumb_func_start PlayerGoSpeed1 PlayerGoSpeed1: @ 805C104 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/include/bike.h b/include/bike.h index 1ff1ed5a3..154ffeeee 100644 --- a/include/bike.h +++ b/include/bike.h @@ -7,6 +7,6 @@ void StartTransitionToFlipBikeState(u8 flags); s16 GetPlayerSpeed(void); void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys); -void MovePlayerNotOnBike(u8 direction, u16 heldKeys); +bool32 IsRunningDisallowed(u8 metatileBehavior); #endif //GUARD_BIKE_H diff --git a/include/constants/flags.h b/include/constants/flags.h index ccac1da3b..417e68255 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -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/field_player_avatar.h b/include/field_player_avatar.h index 51ae9905f..76271b5cf 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -11,6 +11,7 @@ void PlayerGetDestCoords(s16 *, s16 *); u8 GetPlayerFacingDirection(void); u8 GetPlayerMovementDirection(void); u8 PlayerGetCopyableMovement(void); +void MovePlayerNotOnBike(u8 direction, u16 heldKeys); void sub_808D074(u8); void sub_805C270(void); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index fe794a69e..658ad7393 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -308,12 +308,7 @@ enum COLLISION_STOP_SURFING, COLLISION_LEDGE_JUMP, COLLISION_PUSHED_BOULDER, - COLLISION_ROTATING_GATE, - COLLISION_WHEELIE_HOP, - COLLISION_ISOLATED_VERTICAL_RAIL, - COLLISION_ISOLATED_HORIZONTAL_RAIL, - COLLISION_VERTICAL_RAIL, - COLLISION_HORIZONTAL_RAIL, + COLLISION_UNKNOWN_WARP_6C_6D_6E_6F, }; // player running states diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 33c68a253..5b2820f96 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1,11 +1,16 @@ #include "global.h" #include "gflib.h" #include "bike.h" +#include "event_data.h" #include "event_object_movement.h" +#include "fieldmap.h" +#include "field_control_avatar.h" #include "field_player_avatar.h" #include "metatile_behavior.h" +#include "overworld.h" #include "constants/event_object_movement.h" #include "constants/songs.h" +#include "constants/flags.h" EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; EWRAM_DATA bool8 gUnknown_2036E34 = FALSE; @@ -21,8 +26,6 @@ bool8 TryDoMetatileBehaviorForcedMovement(void); void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys); void PlayerAllowForcedMovementIfMovingSameDirection(void); bool8 ForcedMovement_None(void); -void PlayerJumpLedge(u8 direction); -u8 CheckForPlayerAvatarCollision(u8 direction); bool8 ForcedMovement_Slip(void); bool8 ForcedMovement_WalkSouth(void); bool8 ForcedMovement_WalkNorth(void); @@ -47,8 +50,22 @@ u8 CheckMovementInputNotOnBike(u8 direction); void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys); void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys); void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys); +bool32 PlayerIsMovingOnRockStairs(u8 direction); +u8 CheckForPlayerAvatarCollision(u8 direction); +u8 CheckForObjectEventCollision(struct ObjectEvent * objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior); +bool8 CanStopSurfing(s16 x, s16 y, u8 direction); +bool8 ShouldJumpLedge(s16 x, s16 y, u8 direction); +bool8 TryPushBoulder(s16 x, s16 y, u8 direction); +bool8 CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision); +void PlayerNotOnBikeCollide(u8 direction); +void PlayerRun(u8 direction); +void PlayerRunSlow(u8 direction); +void PlayerFaceDirection(u8 direction); +void PlayerTurnInPlace(u8 direction); void PlayerGoSpeed2(u8 direction); void PlayerGoSpeed1(u8 direction); +void PlayerJumpLedge(u8 direction); +void PlayerGoSlow(u8 direction); void PlayerGoSpin(u8 direction); void PlayerRideWaterCurrent(u8 direction); void sub_805C2CC(u8 metatileBehavior); @@ -403,3 +420,114 @@ u8 CheckMovementInputNotOnBike(u8 direction) return 2; } } + +void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys) +{ + PlayerFaceDirection(GetPlayerFacingDirection()); +} + +void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) +{ + PlayerTurnInPlace(direction); +} + +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_DASH; + 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; + } +} + +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; +} From 5b3e9f376b2ed230df1d7e6d23e0239f69d10ba4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Mar 2020 21:42:35 -0400 Subject: [PATCH 03/16] through PlayerGetCopyableMovement --- asm/bike.s | 12 +- asm/field_player_avatar.s | 520 +----------------- asm/overworld.s | 2 +- data/field_player_avatar.s | 25 - data/maps/FuchsiaCity_WardensHouse/map.json | 2 +- data/maps/MtEmber_Exterior/map.json | 10 +- data/maps/MtEmber_RubyPath_B2F/map.json | 6 +- data/maps/MtEmber_RubyPath_B3F/map.json | 8 +- data/maps/MtEmber_Summit/map.json | 8 +- data/maps/SeafoamIslands_1F/map.json | 4 +- data/maps/SeafoamIslands_B1F/map.json | 4 +- data/maps/SeafoamIslands_B2F/map.json | 4 +- data/maps/SeafoamIslands_B3F/map.json | 12 +- data/maps/SeafoamIslands_B4F/map.json | 4 +- data/maps/SevenIsland_SevaultCanyon/map.json | 4 +- .../map.json | 14 +- data/maps/SixIsland_RuinValley/map.json | 16 +- data/maps/VictoryRoad_1F/map.json | 6 +- data/maps/VictoryRoad_2F/map.json | 6 +- data/maps/VictoryRoad_3F/map.json | 8 +- data/scripts/field_moves.inc | 4 +- include/constants/event_objects.h | 2 +- include/constants/flags.h | 2 +- include/event_object_movement.h | 1 + include/global.fieldmap.h | 5 + include/metatile_behavior.h | 12 +- include/quest_log_player.h | 2 + src/dynamic_placeholder_text_util.c | 2 +- src/event_data.c | 2 +- src/field_control_avatar.c | 2 +- src/field_fadetransition.c | 2 +- src/field_player_avatar.c | 238 +++++++- src/fldeff_strength.c | 2 +- src/item_use.c | 8 +- src/metatile_behavior.c | 12 +- 35 files changed, 342 insertions(+), 629 deletions(-) diff --git a/asm/bike.s b/asm/bike.s index 5ca0e605c..f78bc0a1d 100644 --- a/asm/bike.s +++ b/asm/bike.s @@ -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 @@ -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 index 029f1a3e0..e75595ccf 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,510 +5,6 @@ .text - thumb_func_start CanStopSurfing -CanStopSurfing: @ 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 CanStopSurfing - - thumb_func_start ShouldJumpLedge -ShouldJumpLedge: @ 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 ShouldJumpLedge - - thumb_func_start TryPushBoulder -TryPushBoulder: @ 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 TryPushBoulder - - thumb_func_start CheckAcroBikeCollision -CheckAcroBikeCollision: @ 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 CheckAcroBikeCollision - - 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} @@ -542,7 +38,7 @@ PlayerSetAnimId: @ 805C024 cmp r0, 0 bne _0805C05E adds r0, r4, 0 - bl player_set_x22 + bl PlayerSetCopyableMovement ldr r0, _0805C064 @ =gPlayerAvatar ldrb r1, [r0, 0x5] lsls r0, r1, 3 @@ -2244,8 +1740,8 @@ _0805CCC2: bx r0 thumb_func_end sub_805CC40 - thumb_func_start task_add_bump_boulder -task_add_bump_boulder: @ 805CCD0 + thumb_func_start StartStrengthAnim +StartStrengthAnim: @ 805CCD0 push {r4-r6,lr} adds r4, r0, 0 adds r5, r1, 0 @@ -2273,7 +1769,7 @@ task_add_bump_boulder: @ 805CCD0 .align 2, 0 _0805CD04: .4byte taskFF_bump_boulder _0805CD08: .4byte gTasks - thumb_func_end task_add_bump_boulder + thumb_func_end StartStrengthAnim thumb_func_start taskFF_bump_boulder taskFF_bump_boulder: @ 805CD0C @@ -2771,8 +2267,8 @@ _0805D0F0: .4byte gPlayerAvatar _0805D0F4: .4byte sub_805CF78 thumb_func_end sub_805D0A4 - thumb_func_start sub_805D0F8 -sub_805D0F8: @ 805D0F8 + thumb_func_start CreateStopSurfingTask +CreateStopSurfingTask: @ 805D0F8 push {r4,r5,lr} adds r4, r0, 0 lsls r4, 24 @@ -2810,7 +2306,7 @@ sub_805D0F8: @ 805D0F8 _0805D148: .4byte gPlayerAvatar _0805D14C: .4byte taskFF_0805D1D4 _0805D150: .4byte gTasks - thumb_func_end sub_805D0F8 + thumb_func_end CreateStopSurfingTask thumb_func_start sub_805D154 sub_805D154: @ 805D154 @@ -2865,7 +2361,7 @@ sub_805D1A8: @ 805D1A8 movs r1, 0x10 bl sub_811278C movs r0, 0x2 - bl sub_805D0F8 + bl CreateStopSurfingTask _0805D1C6: pop {r0} bx r0 diff --git a/asm/overworld.s b/asm/overworld.s index 8e20c09f4..6ab3ef811 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -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 diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s index bfa367941..f7b7a3493 100644 --- a/data/field_player_avatar.s +++ b/data/field_player_avatar.s @@ -3,31 +3,6 @@ .include "constants/constants.inc" .section .rodata .align 2 -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 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/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/constants/event_objects.h b/include/constants/event_objects.h index 2d51cd74d..08634f5f2 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 417e68255..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) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 3d5ea03f1..7bdeb08c5 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -199,5 +199,6 @@ 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); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 658ad7393..f5660a8a4 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -309,6 +309,11 @@ enum COLLISION_LEDGE_JUMP, COLLISION_PUSHED_BOULDER, COLLISION_UNKNOWN_WARP_6C_6D_6E_6F, + COLLISION_WHEELIE_HOP, + COLLISION_ISOLATED_VERTICAL_RAIL, + COLLISION_ISOLATED_HORIZONTAL_RAIL, + COLLISION_VERTICAL_RAIL, + COLLISION_HORIZONTAL_RAIL, }; // player running states diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 34f5bbd7b..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); diff --git a/include/quest_log_player.h b/include/quest_log_player.h index 9cde1747e..eedb6fa37 100644 --- a/include/quest_log_player.h +++ b/include/quest_log_player.h @@ -4,5 +4,7 @@ #include "global.h" void sub_8150454(void); +bool8 sub_8150474(u8 a0); +void sub_8150498(u8 a0); #endif //GUARD_QUEST_LOG_PLAYER_H diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index 921612cfc..955c4866a 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -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/field_control_avatar.c b/src/field_control_avatar.c index da3fb4a03..891af3e90 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -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_fadetransition.c b/src/field_fadetransition.c index 10d6b3d72..c24d153ac 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -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) { diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 5b2820f96..c27eb2650 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -8,9 +8,13 @@ #include "field_player_avatar.h" #include "metatile_behavior.h" #include "overworld.h" +#include "quest_log.h" +#include "quest_log_player.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" EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; EWRAM_DATA bool8 gUnknown_2036E34 = FALSE; @@ -21,7 +25,6 @@ u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprit bool8 sub_805B528(void); bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent * playerObjEvent, u8 direction); void npc_clear_strange_bits(struct ObjectEvent * playerObjEvent); -void DoPlayerAvatarTransition(void); bool8 TryDoMetatileBehaviorForcedMovement(void); void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys); void PlayerAllowForcedMovementIfMovingSameDirection(void); @@ -56,7 +59,20 @@ u8 CheckForObjectEventCollision(struct ObjectEvent * objectEvent, s16 x, s16 y, bool8 CanStopSurfing(s16 x, s16 y, u8 direction); bool8 ShouldJumpLedge(s16 x, s16 y, u8 direction); bool8 TryPushBoulder(s16 x, s16 y, u8 direction); -bool8 CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision); +void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision); +void DoPlayerAvatarTransition(void); +void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObject); +bool8 PlayerIsAnimActive(void); +bool8 PlayerCheckIfAnimFinishedOrInactive(void); +bool8 player_is_anim_in_certain_ranges(void); +bool8 sub_805BF58(void); +void CreateStopSurfingTask(u8 direction); +void StartStrengthAnim(u8 objectEventId, u8 direction); void PlayerNotOnBikeCollide(u8 direction); void PlayerRun(u8 direction); void PlayerRunSlow(u8 direction); @@ -531,3 +547,221 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u } return collision; } + +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 +}; + +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; + } +} + +bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) +{ + if (GetLedgeJumpDirection(x, y, z) != 0) + return TRUE; + else + return FALSE; +} + +bool8 TryPushBoulder(s16 x, s16 y, u8 direction) +{ + u8 objectEventId; + 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 + { + direction++; + direction--; + return FALSE; + } +} + +bool8 (*const gUnknown_835B828[])(u8) = { + MetatileBehavior_IsBumpySlope, + MetatileBehavior_IsIsolatedVerticalRail, + MetatileBehavior_IsIsolatedHorizontalRail, + MetatileBehavior_IsVerticalRail, + MetatileBehavior_IsHorizontalRail +}; + +const u8 gUnknown_835B83C[] = { + COLLISION_WHEELIE_HOP, + COLLISION_ISOLATED_VERTICAL_RAIL, + COLLISION_ISOLATED_HORIZONTAL_RAIL, + COLLISION_VERTICAL_RAIL, + COLLISION_HORIZONTAL_RAIL, +}; + +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.unk1 |= flags; + DoPlayerAvatarTransition(); +} + +void (*const gUnknown_835B844[])(struct ObjectEvent *) = { + PlayerAvatarTransition_Normal, + PlayerAvatarTransition_Bike, + PlayerAvatarTransition_Bike, + PlayerAvatarTransition_Surfing, + PlayerAvatarTransition_Underwater, + PlayerAvatarTransition_ReturnToField, + PlayerAvatarTransition_Dummy, + PlayerAvatarTransition_Dummy +}; + +void DoPlayerAvatarTransition(void) +{ + u8 i; + u8 flags = gPlayerAvatar.unk1; + + if (flags != 0) + { + for (i = 0; i < NELEMS(gUnknown_835B844); i++, flags >>= 1) + { + if (flags & 1) + gUnknown_835B844[i](&gObjectEvents[gPlayerAvatar.objectEventId]); + } + gPlayerAvatar.unk1 = 0; + } +} + +void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObjEvent) +{ + +} + +void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObjEvent) +{ + sub_8150474(0); + sub_8150498(0); +} + +void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent) +{ + sub_8150474(1); + sub_8150498(1); + sub_80BD620(0, 0); +} + +void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent) +{ + sub_8150474(3); + sub_8150498(3); +} + +void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEvent) +{ + +} + +void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent) +{ + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; +} + +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; + } + } +} + +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; +} + +bool8 sub_805BF58(void) +{ + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION) + return TRUE; + else + return FALSE; +} + +bool8 PlayerIsAnimActive(void) +{ + return ObjectEventIsMovementOverridden(&gObjectEvents[gPlayerAvatar.objectEventId]); +} + +bool8 PlayerCheckIfAnimFinishedOrInactive(void) +{ + return ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]); +} + +void PlayerSetCopyableMovement(u8 a) +{ + gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = a; +} + +u8 PlayerGetCopyableMovement(void) +{ + return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement; +} 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..0b74e0726 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()) { diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 988c9fad0..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) { From 58535acf885934feb524057dcf2b773b070cd258 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Mar 2020 21:46:52 -0400 Subject: [PATCH 04/16] better match for TryPushBoulder --- src/field_player_avatar.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index c27eb2650..4b805c123 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -583,6 +583,7 @@ bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) bool8 TryPushBoulder(s16 x, s16 y, u8 direction) { u8 objectEventId; + u8 direction_ = direction; if (!FlagGet(FLAG_SYS_USE_STRENGTH)) return FALSE; @@ -595,16 +596,14 @@ bool8 TryPushBoulder(s16 x, s16 y, u8 direction) 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)))) + 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); + StartStrengthAnim(objectEventId, direction_); return TRUE; } else { - direction++; - direction--; return FALSE; } } From 87b2c7f34b5a734d3af98ea2dc7d9fafecd809a6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 24 Mar 2020 08:56:14 -0400 Subject: [PATCH 05/16] through PlayerSetAnimId; some quest log doc --- asm/field_player_avatar.s | 59 +---- common_syms/quest_log.txt | 4 +- include/constants/vars.h | 9 +- include/quest_log.h | 9 +- include/quest_log_objects.h | 2 +- src/field_player_avatar.c | 15 ++ src/new_menu_helpers.c | 2 +- src/quest_log.c | 506 ++++++++++++++++++------------------ src/quest_log_objects.c | 4 +- 9 files changed, 284 insertions(+), 326 deletions(-) diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index e75595ccf..3d6eadc79 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,63 +5,6 @@ .text - 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 PlayerSetAnimId -PlayerSetAnimId: @ 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 PlayerSetCopyableMovement - 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 PlayerSetAnimId - thumb_func_start sub_805C06C sub_805C06C: @ 805C06C push {r4,lr} @@ -378,7 +321,7 @@ _0805C27E: bl GetFaceDirectionMovementAction lsls r0, 24 lsrs r0, 24 - bl sub_805BFFC + bl PlayerForceSetHeldMovement _0805C2A6: pop {r4} pop {r0} 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/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/quest_log.h b/include/quest_log.h index e2e652a81..f4fe0ca45 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,8 @@ 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); #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/src/field_player_avatar.c b/src/field_player_avatar.c index 4b805c123..a7525fc41 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -764,3 +764,18 @@ u8 PlayerGetCopyableMovement(void) { return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement; } + +void PlayerForceSetHeldMovement(u8 a) +{ + ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], a); +} + +void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) +{ + if (!PlayerIsAnimActive()) + { + PlayerSetCopyableMovement(copyableMovement); + if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementActionId)) + sub_8112628(movementActionId); + } +} diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 959370398..d184bae05 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -496,7 +496,7 @@ void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram) if (copyToVram == TRUE) CopyWindowToVram(windowId, 3); if (gQuestLogState == 2) - sub_8111134(); + CommitQuestLogWindow1(); } void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram) diff --git a/src/quest_log.c b/src/quest_log.c index bc8e67a6b..fb327433a 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -69,7 +69,7 @@ struct UnkStruct_203AE94 u8 unk_3; }; -struct UnkStruct_203AE98 +struct QuestLogEntry { u8 unk_0; u8 unk_1; @@ -94,9 +94,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 +105,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 +163,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 +194,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 +282,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 +303,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 +325,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 +373,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 +389,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 +410,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 +423,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 +444,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 +478,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 +486,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 +501,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 +517,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 +547,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,16 +589,16 @@ 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); + SetQuestLogState(QL_STATE_2); sub_807DF64(); gUnknown_203AE94 = (struct UnkStruct_203AE94){}; gUnknown_203AE94.unk_0_0 = 2; @@ -608,7 +608,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 +619,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 +634,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 +667,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 +695,7 @@ void sub_8111274(u8 sceneNum, bool8 a1) static void sub_8111368(void) { - gQuestLogState = 2; + gQuestLogState = QL_STATE_2; ResetSpecialVars(); ClearBag(); ClearPCItemSlots(); @@ -847,7 +847,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 +864,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 +872,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 +951,7 @@ static void QuestLog_StartFinalScene(void) SetMainCallback2(sub_8057430); gFieldCallback2 = sub_8111F60; FreeAllWindowBuffers(); - gQuestLogState = 3; + gQuestLogState = QL_STATE_3; sQuestLogCB = NULL; } @@ -1077,7 +1077,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 +1112,7 @@ bool8 sub_8111CD0(void) void sub_8111CF0(void) { - if (gQuestLogState == 2) + if (gQuestLogState == QL_STATE_2) DrawPreviouslyOnQuestHeader(sNumScenes); } @@ -1127,9 +1127,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 +1172,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 +1194,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 +1203,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 +1288,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 +1296,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 +1339,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 +1362,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 +1376,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; @@ -1452,29 +1452,29 @@ void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3) { 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 = a3; + sQuestLogCursor++; + sNextStepDelay = 0; } } void sub_8112588(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4) { - 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 = a0; + sCurQuestLogEntry[sQuestLogCursor].unk_1 = a1; + sCurQuestLogEntry[sQuestLogCursor].unk_2 = a2; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = a3; + sQuestLogCursor++; + sNextStepDelay = a4; } } @@ -1482,75 +1482,75 @@ void sub_8112628(u8 a0) { if (!sub_8112CEC()) { - if (a0 != gUnknown_3005E94[gUnknown_203B01C].unk_3 || a0 > 3) + if (a0 != sCurQuestLogEntry[gUnknown_203B01C].unk_3 || a0 > 3) { - 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 = a0; + gUnknown_203B01C = sQuestLogCursor; + sQuestLogCursor++; + sNextStepDelay = 0; } } } void sub_81126AC(u8 a0, u8 a1) { - 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 = a0; + gUnknown_203B01C = sQuestLogCursor; + sQuestLogCursor++; + sNextStepDelay = a1; } } -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 +1580,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 +1596,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 = DIR_SOUTH - 1; break; case DIR_EAST: - gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_EAST - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_EAST - 1; break; case DIR_NORTH: - gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_NORTH - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_NORTH - 1; break; case DIR_WEST: - gUnknown_3005E94[sQuestLogIdx].unk_3 = DIR_WEST - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_WEST - 1; 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 +1672,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 +1700,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 +1718,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 +1732,7 @@ void sub_8112B3C(void) void sub_8112C9C(void) { - gUnknown_203B01A++; + sNextStepDelay++; } u8 sub_8112CAC(void) @@ -1753,14 +1753,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 +1774,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 +1792,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 +1817,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 +2395,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 +2431,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 +2513,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 +2579,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 +2619,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 +2651,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 +2665,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 +2806,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 +2836,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 +2848,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 +2861,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 +2883,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 +2896,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 +2911,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 +2926,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 +2945,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 +2999,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 +3244,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 +3260,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 +3305,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 +3329,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 +3353,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 +3388,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 +3402,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 +3417,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 +3441,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 +3743,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 +3847,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 +4299,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 +4308,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 +4324,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; From 8a85485cc25b9ac67c9b60697efd56c88d7b1d5f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 24 Mar 2020 18:17:18 -0400 Subject: [PATCH 06/16] through PlayerTurnInPlace --- asm/field_player_avatar.s | 261 -------------------------------- include/event_object_movement.h | 6 + include/quest_log.h | 2 + src/field_player_avatar.c | 97 +++++++++++- src/quest_log.c | 37 ++--- 5 files changed, 118 insertions(+), 285 deletions(-) diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 3d6eadc79..bd3cc0536 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,267 +5,6 @@ .text - 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 PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end sub_805C0D4 - - thumb_func_start PlayerGoSlow -PlayerGoSlow: @ 805C0EC - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8063F58 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerGoSlow - - thumb_func_start PlayerGoSpeed1 -PlayerGoSpeed1: @ 805C104 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetWalkNormalMovementAction - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerGoSpeed1 - - thumb_func_start PlayerGoSpeed2 -PlayerGoSpeed2: @ 805C11C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetWalkFastMovementAction - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerGoSpeed2 - - 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 PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end sub_805C134 - - thumb_func_start PlayerRideWaterCurrent -PlayerRideWaterCurrent: @ 805C14C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8064008 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerRideWaterCurrent - - 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 PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end sub_805C164 - - thumb_func_start PlayerRun -PlayerRun: @ 805C17C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetPlayerRunMovementAction - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerRun - - thumb_func_start PlayerRunSlow -PlayerRunSlow: @ 805C194 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetPlayerRunSlowMovementAction - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerRunSlow - - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 GetWalkSlowMovementAction - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end sub_805C20C - - thumb_func_start PlayerTurnInPlace -PlayerTurnInPlace: @ 805C224 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetWalkInPlaceSlowMovementAction - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerTurnInPlace - thumb_func_start PlayerJumpLedge PlayerJumpLedge: @ 805C23C push {r4,lr} diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 7bdeb08c5..8b2944578 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -200,5 +200,11 @@ 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); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/quest_log.h b/include/quest_log.h index f4fe0ca45..70a5c2f30 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -56,5 +56,7 @@ void sub_81128BC(u8 a0); 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); #endif //GUARD_QUEST_LOG_H diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index a7525fc41..61d6f930f 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -71,19 +71,20 @@ bool8 PlayerIsAnimActive(void); bool8 PlayerCheckIfAnimFinishedOrInactive(void); bool8 player_is_anim_in_certain_ranges(void); bool8 sub_805BF58(void); +void PlayerRun(u8 direction); +void PlayerRunSlow(u8 direction); +void PlayerGoSpeed2(u8 direction); +void PlayerGoSpeed1(u8 direction); +void PlayerGoSlow(u8 direction); +void PlayerRideWaterCurrent(u8 direction); +void sub_805C438(u8 direction); void CreateStopSurfingTask(u8 direction); void StartStrengthAnim(u8 objectEventId, u8 direction); void PlayerNotOnBikeCollide(u8 direction); -void PlayerRun(u8 direction); -void PlayerRunSlow(u8 direction); void PlayerFaceDirection(u8 direction); void PlayerTurnInPlace(u8 direction); -void PlayerGoSpeed2(u8 direction); -void PlayerGoSpeed1(u8 direction); void PlayerJumpLedge(u8 direction); -void PlayerGoSlow(u8 direction); void PlayerGoSpin(u8 direction); -void PlayerRideWaterCurrent(u8 direction); void sub_805C2CC(u8 metatileBehavior); void sub_805CC40(struct ObjectEvent * playerObjEvent); void DoPlayerMatJump(void); @@ -779,3 +780,87 @@ void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) sub_8112628(movementActionId); } } + +void sub_805C06C(struct ObjectEvent * objectEvent, u8 movementAction) +{ + if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementAction)) + sub_81126AC(movementAction, 0); +} + +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(sub_8063F58(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) +{ + sub_805C438(direction); + PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(direction), 2); +} + +void PlayerNotOnBikeCollide(u8 direction) +{ + sub_805C438(direction); + PlayerSetAnimId(GetStepInPlaceDelay32AnimId(direction), 2); +} + +void PlayerFaceDirection(u8 direction) +{ + PlayerSetAnimId(GetFaceDirectionMovementAction(direction), 1); +} + +void sub_805C20C(u8 direction) +{ + PlayerSetAnimId(GetWalkSlowMovementAction(direction), 1); +} + +void PlayerTurnInPlace(u8 direction) +{ + PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(direction), 1); +} diff --git a/src/quest_log.c b/src/quest_log.c index fb327433a..b2dbb5721 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; @@ -1448,7 +1449,7 @@ 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()) { @@ -1457,37 +1458,37 @@ void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3) sCurQuestLogEntry[sQuestLogCursor].unk_0 = a0; sCurQuestLogEntry[sQuestLogCursor].unk_1 = a1; sCurQuestLogEntry[sQuestLogCursor].unk_2 = a2; - sCurQuestLogEntry[sQuestLogCursor].unk_3 = a3; + 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 (!RecordHeadAtEndOfEntry()) { 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 = a3; + sCurQuestLogEntry[sQuestLogCursor].unk_0 = localId; + sCurQuestLogEntry[sQuestLogCursor].unk_1 = mapNum; + sCurQuestLogEntry[sQuestLogCursor].unk_2 = mapGroup; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId; sQuestLogCursor++; - sNextStepDelay = a4; + sNextStepDelay = duration; } } -void sub_8112628(u8 a0) +void sub_8112628(u8 movementActionId) { if (!sub_8112CEC()) { - if (a0 != sCurQuestLogEntry[gUnknown_203B01C].unk_3 || a0 > 3) + if (movementActionId != sCurQuestLogEntry[gUnknown_203B01C].unk_3 || movementActionId > MOVEMENT_ACTION_FACE_RIGHT) { sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0; sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0; - sCurQuestLogEntry[sQuestLogCursor].unk_3 = a0; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId; gUnknown_203B01C = sQuestLogCursor; sQuestLogCursor++; sNextStepDelay = 0; @@ -1495,17 +1496,17 @@ void sub_8112628(u8 a0) } } -void sub_81126AC(u8 a0, u8 a1) +void sub_81126AC(u8 movementActionId, u8 duration) { if (!RecordHeadAtEndOfEntry()) { sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].unk_6 = 0; sCurQuestLogEntry[sQuestLogCursor].unk_0 = 0; - sCurQuestLogEntry[sQuestLogCursor].unk_3 = a0; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = movementActionId; gUnknown_203B01C = sQuestLogCursor; sQuestLogCursor++; - sNextStepDelay = a1; + sNextStepDelay = duration; } } @@ -1637,16 +1638,16 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) { case DIR_NONE: case DIR_SOUTH: - sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_SOUTH - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_DOWN; break; case DIR_EAST: - sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_EAST - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_RIGHT; break; case DIR_NORTH: - sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_NORTH - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_UP; break; case DIR_WEST: - sCurQuestLogEntry[sQuestLogCursor].unk_3 = DIR_WEST - 1; + sCurQuestLogEntry[sQuestLogCursor].unk_3 = MOVEMENT_ACTION_FACE_LEFT; break; } gUnknown_203B01C = 0; From 6c964a63505f6dc7527661400f6aae145c4cdf4b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 24 Mar 2020 20:59:37 -0400 Subject: [PATCH 07/16] through InitPlayerAvatar --- asm/field_player_avatar.s | 1173 ------------------------------- asm/overworld.s | 2 +- data/field_player_avatar.s | 31 - include/bike.h | 2 + include/event_object_movement.h | 11 + include/field_player_avatar.h | 5 +- include/global.fieldmap.h | 27 +- src/event_object_movement.c | 20 +- src/field_player_avatar.c | 434 +++++++++++- src/naming_screen.c | 2 +- 10 files changed, 476 insertions(+), 1231 deletions(-) diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index bd3cc0536..909c10647 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,1179 +5,6 @@ .text - thumb_func_start PlayerJumpLedge -PlayerJumpLedge: @ 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 PlayerSetAnimId - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerJumpLedge - - thumb_func_start sub_805C260 -sub_805C260: @ 805C260 - push {lr} - movs r0, 0x9F - movs r1, 0 - bl PlayerSetAnimId - 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 PlayerForceSetHeldMovement -_0805C2A6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805C2AC: .4byte gPlayerAvatar -_0805C2B0: .4byte gObjectEvents - thumb_func_end sub_805C270 - - thumb_func_start PlayerGoSpin -PlayerGoSpin: @ 805C2B4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80640E4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl PlayerSetAnimId - pop {r0} - bx r0 - thumb_func_end PlayerGoSpin - - thumb_func_start sub_805C2CC -sub_805C2CC: @ 805C2CC - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0805C308 @ =sForcedMovementFuncs - 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 sForcedMovementFuncs - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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 PlayerSetAnimId - 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} diff --git a/asm/overworld.s b/asm/overworld.s index 6ab3ef811..f12288d23 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -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/data/field_player_avatar.s b/data/field_player_avatar.s index f7b7a3493..c7a03c7fe 100644 --- a/data/field_player_avatar.s +++ b/data/field_player_avatar.s @@ -3,37 +3,6 @@ .include "constants/constants.inc" .section .rodata .align 2 -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_ITEM_COPY, OBJ_EVENT_GFX_GREEN_ITEM_COPY - -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 - .byte OBJ_EVENT_GFX_GREEN_VS_SEEKER gUnknown_835B890:: @ 835B890 .4byte MetatileBehavior_IsSouthArrowWarp diff --git a/include/bike.h b/include/bike.h index 154ffeeee..bdc61ecfe 100644 --- a/include/bike.h +++ b/include/bike.h @@ -8,5 +8,7 @@ s16 GetPlayerSpeed(void); void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys); bool32 IsRunningDisallowed(u8 metatileBehavior); +void Bike_HandleBumpySlopeJump(void); +void Bike_UpdateBikeCounterSpeed(u8 counter); #endif //GUARD_BIKE_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 8b2944578..12d3305e7 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -206,5 +206,16 @@ 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); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 76271b5cf..7440bd0bd 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -36,8 +36,9 @@ bool32 sub_805DAD0(void); bool32 sub_805DC24(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); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index f5660a8a4..38391bf27 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_FORCED_MVMT_DISABLED (1 << 5) -#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (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_4 (1 << PLAYER_AVATAR_STATE_UNDERWATER) +#define PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED (1 << PLAYER_AVATAR_STATE_FIELD_MOVE) +#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << PLAYER_AVATAR_STATE_FISHING) +#define PLAYER_AVATAR_FLAG_DASH (1 << PLAYER_AVATAR_STATE_WATERING) enum { diff --git a/src/event_object_movement.c b/src/event_object_movement.c index dbde0cb93..7fde3ff21 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4628,7 +4628,7 @@ 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); @@ -4642,15 +4642,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) { diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 61d6f930f..ae0ee6942 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -5,9 +5,11 @@ #include "event_object_movement.h" #include "fieldmap.h" #include "field_control_avatar.h" +#include "field_effect_helpers.h" #include "field_player_avatar.h" #include "metatile_behavior.h" #include "overworld.h" +#include "party_menu.h" #include "quest_log.h" #include "quest_log_player.h" #include "constants/event_object_movement.h" @@ -15,6 +17,8 @@ #include "constants/songs.h" #include "constants/flags.h" #include "constants/metatile_behaviors.h" +#include "constants/species.h" +#include "constants/moves.h" EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; EWRAM_DATA bool8 gUnknown_2036E34 = FALSE; @@ -77,15 +81,17 @@ void PlayerGoSpeed2(u8 direction); void PlayerGoSpeed1(u8 direction); void PlayerGoSlow(u8 direction); void PlayerRideWaterCurrent(u8 direction); -void sub_805C438(u8 direction); -void CreateStopSurfingTask(u8 direction); -void StartStrengthAnim(u8 objectEventId, u8 direction); void PlayerNotOnBikeCollide(u8 direction); void PlayerFaceDirection(u8 direction); void PlayerTurnInPlace(u8 direction); void PlayerJumpLedge(u8 direction); +void PlayCollisionSoundIfNotFacingWarp(u8 direction); void PlayerGoSpin(u8 direction); void sub_805C2CC(u8 metatileBehavior); +bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y); +bool8 player_should_look_direction_be_enforced_upon_movement(void); +void CreateStopSurfingTask(u8 direction); +void StartStrengthAnim(u8 objectEventId, u8 direction); void sub_805CC40(struct ObjectEvent * playerObjEvent); void DoPlayerMatJump(void); void DoPlayerMatSpin(void); @@ -840,13 +846,13 @@ void PlayerRunSlow(u8 direction) void PlayerOnBikeCollide(u8 direction) { - sub_805C438(direction); + PlayCollisionSoundIfNotFacingWarp(direction); PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(direction), 2); } void PlayerNotOnBikeCollide(u8 direction) { - sub_805C438(direction); + PlayCollisionSoundIfNotFacingWarp(direction); PlayerSetAnimId(GetStepInPlaceDelay32AnimId(direction), 2); } @@ -864,3 +870,421 @@ 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)); + } +} + +void PlayerGoSpin(u8 direction) +{ + PlayerSetAnimId(sub_80640E4(direction), 3); +} + +void sub_805C2CC(u8 metatileBehavior) +{ + int i; + + for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++) + { + if (sForcedMovementFuncs[i].unk0(metatileBehavior)) + sForcedMovementFuncs[i].unk4(); + } +} + +void PlayerIdleWheelie(u8 direction) +{ + PlayerSetAnimId(GetAcroWheelieFaceDirectionMovementAction(direction), 1); +} + +void PlayerStartWheelie(u8 direction) +{ + PlayerSetAnimId(GetAcroPopWheelieFaceDirectionMovementAction(direction), 1); +} + +void PlayerEndWheelie(u8 direction) +{ + PlayerSetAnimId(GetAcroEndWheelieFaceDirectionMovementAction(direction), 1); +} + +void PlayerStandingHoppingWheelie(u8 direction) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(direction), 1); +} + +void PlayerMovingHoppingWheelie(u8 direction) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(direction), 2); +} + +void PlayerLedgeHoppingWheelie(u8 direction) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(direction), 8); +} + +void PlayerAcroTurnJump(u8 direction) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), 1); +} + +void PlayerAcroWheelieCollide(u8 direction) +{ + PlaySE(SE_WALL_HIT); + PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), 2); +} + +void sub_805C408(u8 direction) +{ + PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), 2); +} + +void sub_805C420(u8 direction) +{ + PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), 2); +} + +bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = { + MetatileBehavior_IsSouthArrowWarp, + MetatileBehavior_IsNorthArrowWarp, + MetatileBehavior_IsWestArrowWarp, + MetatileBehavior_IsEastArrowWarp +}; + +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); + } +} + +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_ITEM_COPY, OBJ_EVENT_GFX_GREEN_ITEM_COPY}, +}; + +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_DASH | PLAYER_AVATAR_FLAG_MVMT_IS_FORCED | PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED); + gPlayerAvatar.flags |= flags; +} + +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; +} + +const u8 gUnknown_835B88E[] = { + OBJ_EVENT_GFX_RED_VS_SEEKER, + OBJ_EVENT_GFX_GREEN_VS_SEEKER +}; + +void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b) +{ + u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); + + gPlayerAvatar.unk1 |= 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_FORCED_MVMT_DISABLED | PLAYER_AVATAR_FLAG_ON_FOOT); +} 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); From f1841ef24d63aa2425d4316b9f49408d90c29bdb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 25 Mar 2020 08:57:52 -0400 Subject: [PATCH 08/16] through sub_805D1A8 --- asm/bike.s | 2 +- asm/field_player_avatar.s | 880 +--------------------------- asm/overworld.s | 10 +- data/field_player_avatar.s | 26 - include/constants/event_objects.h | 4 +- include/field_control_avatar.h | 1 + include/field_effect_helpers.h | 2 + include/field_player_avatar.h | 4 +- include/overworld.h | 2 +- src/dynamic_placeholder_text_util.c | 4 +- src/field_effect.c | 2 +- src/field_fadetransition.c | 2 +- src/field_player_avatar.c | 318 +++++++++- src/quest_log_player.c | 8 +- 14 files changed, 335 insertions(+), 930 deletions(-) diff --git a/asm/bike.s b/asm/bike.s index f78bc0a1d..c8f65a03b 100644 --- a/asm/bike.s +++ b/asm/bike.s @@ -729,7 +729,7 @@ StartTransitionToFlipBikeState: @ 80BD5C8 beq _080BD5F8 movs r0, 0x1 bl SetPlayerAvatarTransitionFlags - bl sav1_reset_battle_music_maybe + bl Overworld_ClearSavedMusic bl Overworld_PlaySpecialMapMusic b _080BD618 .align 2, 0 diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 909c10647..52dbf8583 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,882 +5,8 @@ .text - thumb_func_start sub_805CB04 -sub_805CB04: @ 805CB04 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r6, _0805CB64 @ =gObjectEvents - ldr r5, _0805CB68 @ =gPlayerAvatar - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x1 - ands r4, r0 - lsls r3, r4, 5 - ldrb r2, [r1, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x1] - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0805CB5C - ldr r2, _0805CB6C @ =gSprites - ldrb r1, [r5, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x1A] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - lsls r3, r4, 2 - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r3 - strb r0, [r1] -_0805CB5C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805CB64: .4byte gObjectEvents -_0805CB68: .4byte gPlayerAvatar -_0805CB6C: .4byte gSprites - thumb_func_end sub_805CB04 - - thumb_func_start sub_805CB70 -sub_805CB70: @ 805CB70 - push {r4,r5,lr} - ldr r5, _0805CBAC @ =gPlayerAvatar - ldrb r0, [r5, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _0805CBB0 @ =gObjectEvents - adds r4, r0 - movs r0, 0x3 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805CBB4 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805CBAC: .4byte gPlayerAvatar -_0805CBB0: .4byte gObjectEvents -_0805CBB4: .4byte gSprites - thumb_func_end sub_805CB70 - - thumb_func_start sub_805CBB8 -sub_805CBB8: @ 805CBB8 - push {lr} - ldr r2, _0805CBD4 @ =gPlayerAvatar - ldrb r1, [r2] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - bne _0805CBD8 - movs r0, 0x5 - bl GetPlayerAvatarGraphicsIdByStateId - lsls r0, 24 - lsrs r0, 24 - b _0805CBE0 - .align 2, 0 -_0805CBD4: .4byte gPlayerAvatar -_0805CBD8: - ldr r0, _0805CBE4 @ =gUnknown_835B88E - ldrb r1, [r2, 0x7] - adds r1, r0 - ldrb r0, [r1] -_0805CBE0: - pop {r1} - bx r1 - .align 2, 0 -_0805CBE4: .4byte gUnknown_835B88E - thumb_func_end sub_805CBB8 - - thumb_func_start sub_805CBE8 -sub_805CBE8: @ 805CBE8 - push {r4,r5,lr} - ldr r5, _0805CC20 @ =gPlayerAvatar - ldrb r0, [r5, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _0805CC24 @ =gObjectEvents - adds r4, r0 - bl sub_805CBB8 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805CC28 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805CC20: .4byte gPlayerAvatar -_0805CC24: .4byte gObjectEvents -_0805CC28: .4byte gSprites - thumb_func_end sub_805CBE8 - - thumb_func_start sub_805CC2C -sub_805CC2C: @ 805CC2C - push {lr} - movs r0, 0x2 - bl sub_8150498 - pop {r0} - bx r0 - thumb_func_end sub_805CC2C - - thumb_func_start nullsub_24 -nullsub_24: @ 805CC38 - bx lr - thumb_func_end nullsub_24 - - thumb_func_start nullsub_25 -nullsub_25: @ 805CC3C - bx lr - thumb_func_end nullsub_25 - - thumb_func_start sub_805CC40 -sub_805CC40: @ 805CC40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrb r0, [r5, 0x1E] - mov r8, r0 - movs r1, 0 - mov r0, sp - strh r1, [r0] - movs r6, 0x1 - ldr r1, _0805CCA4 @ =gUnknown_835B890 - mov r9, r1 - mov r4, sp - mov r7, sp - adds r7, 0x2 -_0805CC62: - movs r1, 0 - ldrsh r0, [r4, r1] - lsls r0, 2 - add r0, r9 - ldr r1, [r0] - mov r0, r8 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - beq _0805CCA8 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - cmp r6, r0 - bne _0805CCA8 - ldrh r0, [r5, 0x10] - strh r0, [r4] - ldrh r0, [r5, 0x12] - strh r0, [r7] - adds r0, r6, 0 - mov r1, sp - adds r2, r7, 0 - bl MoveCoords - ldrb r0, [r5, 0x1B] - movs r1, 0 - ldrsh r2, [r4, r1] - movs r1, 0 - ldrsh r3, [r7, r1] - adds r1, r6, 0 - bl ShowWarpArrowSprite - b _0805CCC2 - .align 2, 0 -_0805CCA4: .4byte gUnknown_835B890 -_0805CCA8: - ldrh r1, [r4] - adds r1, 0x1 - strh r1, [r4] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x3 - ble _0805CC62 - ldrb r0, [r5, 0x1B] - bl SetSpriteInvisible -_0805CCC2: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_805CC40 - - thumb_func_start StartStrengthAnim -StartStrengthAnim: @ 805CCD0 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _0805CD04 @ =taskFF_bump_boulder - adds r0, r6, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805CD08 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - strh r5, [r1, 0xC] - bl _call_via_r6 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805CD04: .4byte taskFF_bump_boulder -_0805CD08: .4byte gTasks - thumb_func_end StartStrengthAnim - - thumb_func_start taskFF_bump_boulder -taskFF_bump_boulder: @ 805CD0C - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _0805CD54 @ =gUnknown_835B8A0 - ldr r2, _0805CD58 @ =gTasks - ldr r5, _0805CD5C @ =gObjectEvents - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0805CD20: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldr r0, _0805CD60 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _0805CD20 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805CD54: .4byte gUnknown_835B8A0 -_0805CD58: .4byte gTasks -_0805CD5C: .4byte gObjectEvents -_0805CD60: .4byte gPlayerAvatar - thumb_func_end taskFF_bump_boulder - - thumb_func_start sub_805CD64 -sub_805CD64: @ 805CD64 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - ldr r1, _0805CD80 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805CD80: .4byte gPlayerAvatar - thumb_func_end sub_805CD64 - - thumb_func_start sub_805CD84 -sub_805CD84: @ 805CD84 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r5, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - bne _0805CE0E - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - bne _0805CE0E - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - ldrb r0, [r6, 0xC] - bl GetWalkInPlaceNormalMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_805C06C - ldrb r0, [r6, 0xC] - bl sub_8063F2C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805C0A4 - ldr r2, _0805CE18 @ =gFieldEffectArguments - movs r1, 0x10 - ldrsh r0, [r4, r1] - str r0, [r2] - movs r1, 0x12 - ldrsh r0, [r4, r1] - str r0, [r2, 0x4] - ldrb r0, [r4, 0xB] - lsrs r0, 4 - str r0, [r2, 0x8] - ldr r3, _0805CE1C @ =gSprites - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r2, 0xC] - movs r0, 0xA - bl FieldEffectStart - movs r0, 0xCF - bl PlaySE - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_0805CE0E: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805CE18: .4byte gFieldEffectArguments -_0805CE1C: .4byte gSprites - thumb_func_end sub_805CD84 - - thumb_func_start sub_805CE20 -sub_805CE20: @ 805CE20 - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r5, 0 - bl ObjectEventCheckHeldMovementStatus - lsls r0, 24 - cmp r0, 0 - beq _0805CE70 - adds r0, r4, 0 - bl ObjectEventCheckHeldMovementStatus - lsls r0, 24 - cmp r0, 0 - beq _0805CE70 - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - adds r0, r4, 0 - bl sub_806DE28 - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x12] - bl sub_806DE70 - ldr r1, _0805CE78 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - ldr r0, _0805CE7C @ =taskFF_bump_boulder - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805CE70: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805CE78: .4byte gPlayerAvatar -_0805CE7C: .4byte taskFF_bump_boulder - thumb_func_end sub_805CE20 - - thumb_func_start DoPlayerMatJump -DoPlayerMatJump: @ 805CE80 - push {r4,lr} - ldr r4, _0805CE9C @ =sub_805CEA0 - adds r0, r4, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805CE9C: .4byte sub_805CEA0 - thumb_func_end DoPlayerMatJump - - thumb_func_start sub_805CEA0 -sub_805CEA0: @ 805CEA0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0805CEDC @ =gUnknown_835B8AC - ldr r2, _0805CEE0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0805CEB2: - movs r0, 0x8 - ldrsh r2, [r4, r0] - lsls r2, 2 - adds r2, r5 - ldr r0, _0805CEE4 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _0805CEE8 @ =gObjectEvents - adds r1, r0 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _0805CEB2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805CEDC: .4byte gUnknown_835B8AC -_0805CEE0: .4byte gTasks -_0805CEE4: .4byte gPlayerAvatar -_0805CEE8: .4byte gObjectEvents - thumb_func_end sub_805CEA0 - - thumb_func_start PlayerAvatar_DoSecretBaseMatJump -PlayerAvatar_DoSecretBaseMatJump: @ 805CEEC - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r5, _0805CF50 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r5, 0x6] - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0805CF48 - movs r0, 0xA - bl PlaySE - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetJumpInPlaceMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805C06C - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0805CF48 - movs r0, 0 - strb r0, [r5, 0x6] - ldrb r0, [r5, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r5, 0x1] - ldr r0, _0805CF54 @ =sub_805CEA0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805CF48: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805CF50: .4byte gPlayerAvatar -_0805CF54: .4byte sub_805CEA0 - thumb_func_end PlayerAvatar_DoSecretBaseMatJump - - thumb_func_start DoPlayerMatSpin -DoPlayerMatSpin: @ 805CF58 - push {r4,lr} - ldr r4, _0805CF74 @ =sub_805CF78 - adds r0, r4, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805CF74: .4byte sub_805CF78 - thumb_func_end DoPlayerMatSpin - - thumb_func_start sub_805CF78 -sub_805CF78: @ 805CF78 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0805CFB4 @ =gUnknown_835B8B0 - ldr r2, _0805CFB8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0805CF8A: - movs r0, 0x8 - ldrsh r2, [r4, r0] - lsls r2, 2 - adds r2, r5 - ldr r0, _0805CFBC @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _0805CFC0 @ =gObjectEvents - adds r1, r0 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _0805CF8A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805CFB4: .4byte gUnknown_835B8B0 -_0805CFB8: .4byte gTasks -_0805CFBC: .4byte gPlayerAvatar -_0805CFC0: .4byte gObjectEvents - thumb_func_end sub_805CF78 - - thumb_func_start sub_805CFC4 -sub_805CFC4: @ 805CFC4 - push {lr} - ldrh r2, [r0, 0x8] - adds r2, 0x1 - strh r2, [r0, 0x8] - ldrb r1, [r1, 0x18] - lsrs r1, 4 - strh r1, [r0, 0xA] - ldr r1, _0805CFE8 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - bl ScriptContext2_Enable - movs r0, 0x27 - bl PlaySE - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_0805CFE8: .4byte gPlayerAvatar - thumb_func_end sub_805CFC4 - - thumb_func_start sub_805CFEC -sub_805CFEC: @ 805CFEC - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldr r1, _0805D060 @ =gUnknown_835B8C0 - mov r0, sp - movs r2, 0x4 - bl memcpy - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0805D054 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - subs r0, 0x1 - add r0, sp - ldrb r6, [r0] - adds r0, r6, 0 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_805C06C - ldrb r0, [r4, 0xA] - cmp r6, r0 - bne _0805D032 - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_0805D032: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x3 - ble _0805D054 - ldrb r0, [r4, 0xA] - bl GetOppositeDirection - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bne _0805D054 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0805D054: - movs r0, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805D060: .4byte gUnknown_835B8C0 - thumb_func_end sub_805CFEC - - thumb_func_start sub_805D064 -sub_805D064: @ 805D064 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - adds r4, r1, 0 - ldr r1, _0805D0A0 @ =gUnknown_835B8C4 - mov r0, sp - movs r2, 0x5 - bl memcpy - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0805D094 - movs r1, 0xC - ldrsh r0, [r5, r1] - add r0, sp - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_805C06C - movs r0, 0x1 - strh r0, [r5, 0x8] -_0805D094: - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805D0A0: .4byte gUnknown_835B8C4 - thumb_func_end sub_805D064 - - thumb_func_start sub_805D0A4 -sub_805D0A4: @ 805D0A4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0805D0E8 - ldrb r0, [r4, 0xA] - bl GetOppositeDirection - lsls r0, 24 - lsrs r0, 24 - bl sub_8063F2C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_805C06C - bl ScriptContext2_Disable - ldr r1, _0805D0F0 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - ldr r0, _0805D0F4 @ =sub_805CF78 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805D0E8: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805D0F0: .4byte gPlayerAvatar -_0805D0F4: .4byte sub_805CF78 - thumb_func_end sub_805D0A4 - - thumb_func_start CreateStopSurfingTask -CreateStopSurfingTask: @ 805D0F8 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ScriptContext2_Enable - bl FreezeObjectEvents - bl sav1_reset_battle_music_maybe - bl Overworld_ChangeMusicToDefault - ldr r2, _0805D148 @ =gPlayerAvatar - ldrb r1, [r2] - movs r0, 0xF7 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x1 - strb r0, [r2, 0x6] - ldr r5, _0805D14C @ =taskFF_0805D1D4 - adds r0, r5, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805D150 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - bl _call_via_r5 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805D148: .4byte gPlayerAvatar -_0805D14C: .4byte taskFF_0805D1D4 -_0805D150: .4byte gTasks - thumb_func_end CreateStopSurfingTask - - thumb_func_start sub_805D154 -sub_805D154: @ 805D154 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r2, _0805D19C @ =gPlayerAvatar - ldrb r1, [r2] - movs r0, 0xF7 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x1 - strb r0, [r2, 0x6] - ldr r5, _0805D1A0 @ =taskFF_0805D1D4 - adds r0, r5, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805D1A4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - bl _call_via_r5 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805D19C: .4byte gPlayerAvatar -_0805D1A0: .4byte taskFF_0805D1D4 -_0805D1A4: .4byte gTasks - thumb_func_end sub_805D154 - - thumb_func_start sub_805D1A8 -sub_805D1A8: @ 805D1A8 - push {lr} - ldr r0, _0805D1CC @ =gUnknown_3005E88 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0805D1C6 - cmp r0, 0x3 - beq _0805D1C6 - ldr r0, _0805D1D0 @ =gUnknown_835B820 - ldrb r0, [r0, 0x2] - movs r1, 0x10 - bl sub_811278C - movs r0, 0x2 - bl CreateStopSurfingTask -_0805D1C6: - pop {r0} - bx r0 - .align 2, 0 -_0805D1CC: .4byte gUnknown_3005E88 -_0805D1D0: .4byte gUnknown_835B820 - thumb_func_end sub_805D1A8 - - thumb_func_start taskFF_0805D1D4 -taskFF_0805D1D4: @ 805D1D4 + thumb_func_start Task_StopSurfingInit +Task_StopSurfingInit: @ 805D1D4 push {r4-r6,lr} lsls r0, 24 lsrs r6, r0, 24 @@ -928,7 +54,7 @@ _0805D230: .4byte gPlayerAvatar _0805D234: .4byte gObjectEvents _0805D238: .4byte gTasks _0805D23C: .4byte sub_805D240 - thumb_func_end taskFF_0805D1D4 + thumb_func_end Task_StopSurfingInit thumb_func_start sub_805D240 sub_805D240: @ 805D240 diff --git a/asm/overworld.s b/asm/overworld.s index f12288d23..5335cfc21 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -1715,7 +1715,7 @@ sub_8055864: @ 8055864 bl SetSav1WeatherFromCurrMapHeader bl sub_805610C bl sub_8055CB8 - bl sav1_reset_battle_music_maybe + bl Overworld_ClearSavedMusic bl mapheader_run_script_with_tag_x3 bl TryRegenerateRenewableHiddenItems bl InitMap @@ -1792,7 +1792,7 @@ sub_8055920: @ 8055920 bl FlagClear _08055974: bl sub_8055CB8 - bl sav1_reset_battle_music_maybe + bl Overworld_ClearSavedMusic bl mapheader_run_script_with_tag_x3 bl TryRegenerateRenewableHiddenItems bl UpdateLocationHistoryForRoamer @@ -2474,8 +2474,8 @@ Overworld_SetSavedMusic: @ 8055E78 _08055E80: .4byte gSaveBlock1Ptr thumb_func_end Overworld_SetSavedMusic - thumb_func_start sav1_reset_battle_music_maybe -sav1_reset_battle_music_maybe: @ 8055E84 + thumb_func_start Overworld_ClearSavedMusic +Overworld_ClearSavedMusic: @ 8055E84 ldr r0, _08055E90 @ =gSaveBlock1Ptr ldr r1, [r0] movs r0, 0 @@ -2483,7 +2483,7 @@ sav1_reset_battle_music_maybe: @ 8055E84 bx lr .align 2, 0 _08055E90: .4byte gSaveBlock1Ptr - thumb_func_end sav1_reset_battle_music_maybe + thumb_func_end Overworld_ClearSavedMusic thumb_func_start sub_8055E94 sub_8055E94: @ 8055E94 diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s index c7a03c7fe..c4a4f324f 100644 --- a/data/field_player_avatar.s +++ b/data/field_player_avatar.s @@ -4,32 +4,6 @@ .section .rodata .align 2 -gUnknown_835B890:: @ 835B890 - .4byte MetatileBehavior_IsSouthArrowWarp - .4byte MetatileBehavior_IsNorthArrowWarp - .4byte MetatileBehavior_IsWestArrowWarp - .4byte MetatileBehavior_IsEastArrowWarp - -gUnknown_835B8A0:: @ 835B8A0 - .4byte sub_805CD64 - .4byte sub_805CD84 - .4byte sub_805CE20 - -gUnknown_835B8AC:: @ 835B8AC - .4byte PlayerAvatar_DoSecretBaseMatJump - -gUnknown_835B8B0:: @ 835B8B0 - .4byte sub_805CFC4 - .4byte sub_805CFEC - .4byte sub_805D064 - .4byte sub_805D0A4 - -gUnknown_835B8C0:: @ 835B8C0 - .byte 0x03, 0x04, 0x02, 0x01 - -gUnknown_835B8C4:: @ 835B8C4 - .byte 0x18, 0x18, 0x19, 0x1a, 0x1b - .align 2 gUnknown_835B8CC:: @ 835B8CC .4byte sub_805D33C diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 08634f5f2..cccba35ff 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -7,14 +7,14 @@ #define OBJ_EVENT_GFX_RED_ITEM 3 #define OBJ_EVENT_GFX_RED_FISH 4 #define OBJ_EVENT_GFX_RED_ITEM_COPY 5 -#define OBJ_EVENT_GFX_RED_VS_SEEKER 6 +#define OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE 6 #define OBJ_EVENT_GFX_GREEN_NORMAL 7 #define OBJ_EVENT_GFX_GREEN_BIKE 8 #define OBJ_EVENT_GFX_GREEN_SURF 9 #define OBJ_EVENT_GFX_GREEN_ITEM 10 #define OBJ_EVENT_GFX_GREEN_FISH 11 #define OBJ_EVENT_GFX_GREEN_ITEM_COPY 12 -#define OBJ_EVENT_GFX_GREEN_VS_SEEKER 13 +#define OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE 13 #define OBJ_EVENT_GFX_RS_BRENDAN 14 #define OBJ_EVENT_GFX_RS_MAY 15 #define OBJ_EVENT_GFX_LITTLE_BOY 16 diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 335076a9d..e0873aa52 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -35,5 +35,6 @@ void FieldClearPlayerInput(struct FieldInput *input); int ProcessPlayerFieldInput(struct FieldInput *input); void FieldInput_HandleCancelSignpost(struct FieldInput * input); void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys); +void sub_806DE70(u16 x, u16 y); #endif //GUARD_FIELD_CONTROL_AVATAR_H diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 9472f0b94..a1fbe49b2 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -22,5 +22,7 @@ bool8 sub_80DCBE0(struct ObjectEvent *); void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8); u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*); u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); +void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y); +void SetSpriteInvisible(u8 spriteId); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 7440bd0bd..1dcdb8e5d 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -20,7 +20,7 @@ void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetPlayerAvatarGraphicsIdByStateId(u8); void SetPlayerAvatarStateMask(u8 mask); void sub_805D9C4(struct Sprite *sprite); -void sub_805D154(u8 direction); +void CreateStopSurfingTask_NoMusicChange(u8 direction); void sub_805DAE4(u8 direction); void SetPlayerAvatarTransitionFlags(u16 a); bool8 IsPlayerFacingSurfableFishableWater(void); @@ -29,7 +29,7 @@ u8 GetPlayerAvatarObjectId(void); u8 PlayerGetZCoord(void); u8 GetPlayerAvatarGraphicsIdByCurrentState(void); void sub_805CB70(void); -void sub_805CB04(bool8); +void SetPlayerInvisibility(bool8); void sub_805DC04(void); void sub_805DAB0(void); bool32 sub_805DAD0(void); diff --git a/include/overworld.h b/include/overworld.h index bd4dda9b6..730df3667 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -85,7 +85,7 @@ void sub_8084EBC(s16, s16); void sub_80555E0(void); void copy_saved_warp3_bank_and_enter_x_to_warp1(void); u8 IsMapTypeOutdoors(u8 mapType); -void sav1_reset_battle_music_maybe(void); +void Overworld_ClearSavedMusic(void); bool32 sub_8056124(u16 song); void player_avatar_init_params_reset(void); diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index 955c4866a..b0e689501 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -11,10 +11,10 @@ static const u8 sTextColorTable[] = [OBJ_EVENT_GFX_RED_NORMAL / 2] = 0x00, // OBJ_EVENT_GFX_RED_BIKE [OBJ_EVENT_GFX_RED_SURF / 2] = 0x00, // OBJ_EVENT_GFX_RED_ITEM [OBJ_EVENT_GFX_RED_FISH / 2] = 0x00, // OBJ_EVENT_GFX_RED_ITEM_COPY - [OBJ_EVENT_GFX_RED_VS_SEEKER / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL + [OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL [OBJ_EVENT_GFX_GREEN_BIKE / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_SURF [OBJ_EVENT_GFX_GREEN_ITEM / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_FISH - [OBJ_EVENT_GFX_GREEN_ITEM_COPY / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_VS_SEEKER + [OBJ_EVENT_GFX_GREEN_ITEM_COPY / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE [OBJ_EVENT_GFX_RS_BRENDAN / 2] = 0x10, // OBJ_EVENT_GFX_RS_MAY [OBJ_EVENT_GFX_LITTLE_BOY / 2] = 0x10, // OBJ_EVENT_GFX_LITTLE_GIRL [OBJ_EVENT_GFX_YOUNGSTER / 2] = 0x00, // OBJ_EVENT_GFX_BOY diff --git a/src/field_effect.c b/src/field_effect.c index 082aee32d..b59ce5a6b 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2888,7 +2888,7 @@ u8 FldEff_UseSurf(void) { u8 taskId = CreateTask(Task_FldEffUseSurf, 0xff); gTasks[taskId].data[15] = gFieldEffectArguments[0]; - sav1_reset_battle_music_maybe(); + Overworld_ClearSavedMusic(); if (sub_8056124(MUS_NAMINORI)) Overworld_ChangeMusicTo(MUS_NAMINORI); return FALSE; diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index c24d153ac..cde5f0e84 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -126,7 +126,7 @@ static void sub_807DC70(void) static void sub_807DCB0(bool8 arg) { - sub_805CB04(!arg); + SetPlayerInvisibility(!arg); } static void task0A_nop_for_a_while(u8 taskId) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index ae0ee6942..e3035351b 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -5,6 +5,7 @@ #include "event_object_movement.h" #include "fieldmap.h" #include "field_control_avatar.h" +#include "field_effect.h" #include "field_effect_helpers.h" #include "field_player_avatar.h" #include "metatile_behavior.h" @@ -12,6 +13,7 @@ #include "party_menu.h" #include "quest_log.h" #include "quest_log_player.h" +#include "script.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" #include "constants/songs.h" @@ -89,12 +91,24 @@ void PlayCollisionSoundIfNotFacingWarp(u8 direction); void PlayerGoSpin(u8 direction); void sub_805C2CC(u8 metatileBehavior); bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y); -bool8 player_should_look_direction_be_enforced_upon_movement(void); -void CreateStopSurfingTask(u8 direction); -void StartStrengthAnim(u8 objectEventId, u8 direction); void sub_805CC40(struct ObjectEvent * playerObjEvent); +void StartStrengthAnim(u8 objectEventId, u8 direction); +void Task_BumpBoulder(u8 taskId); +bool8 sub_805CD64(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj); +bool8 do_boulder_dust(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj); +bool8 sub_805CE20(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj); void DoPlayerMatJump(void); +void DoPlayerAvatarSecretBaseMatJump(u8 taskId); +bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task * task, struct ObjectEvent * playerObj); void DoPlayerMatSpin(void); +void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId); +bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task * task, struct ObjectEvent * playerObj); +bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task * task, struct ObjectEvent * playerObj); +bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task * task, struct ObjectEvent * playerObj); +bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task * task, struct ObjectEvent * playerObj); +void CreateStopSurfingTask(u8 direction); +void Task_StopSurfingInit(u8 taskId); +bool8 player_should_look_direction_be_enforced_upon_movement(void); void MovementType_Player(struct Sprite *sprite) { @@ -1244,11 +1258,6 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void) return 0; } -const u8 gUnknown_835B88E[] = { - OBJ_EVENT_GFX_RED_VS_SEEKER, - OBJ_EVENT_GFX_GREEN_VS_SEEKER -}; - void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b) { u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); @@ -1288,3 +1297,296 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.gender = gender; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED | PLAYER_AVATAR_FLAG_ON_FOOT); } + +void SetPlayerInvisibility(bool8 invisible) +{ + gObjectEvents[gPlayerAvatar.objectEventId].invisible = invisible; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + gSprites[gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId].invisible = invisible; +} + +void sub_805CB70(void) +{ + ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); +} + +const u8 gUnknown_835B88E[] = { + OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE, + OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE +}; + +u8 sub_805CBB8(void) +{ + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + return gUnknown_835B88E[gPlayerAvatar.gender]; + else + return GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE); +} + +void sub_805CBE8(void) +{ + ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], sub_805CBB8()); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); +} + +void sub_805CC2C(void) +{ + sub_8150498(2); +} + +void nullsub_24(void) +{ + +} + +void nullsub_25(void) +{ + +} + +bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = { + MetatileBehavior_IsSouthArrowWarp, + MetatileBehavior_IsNorthArrowWarp, + MetatileBehavior_IsWestArrowWarp, + MetatileBehavior_IsEastArrowWarp +}; + +void sub_805CC40(struct ObjectEvent *objectEvent) +{ + s16 x; + s16 y; + u8 direction; + u8 metatileBehavior = objectEvent->currentMetatileBehavior; + + for (x = 0, direction = DIR_SOUTH; x < 4; x++, direction++) + { + if (sArrowWarpMetatileBehaviorChecks2[x](metatileBehavior) && direction == objectEvent->movementDirection) + { + x = objectEvent->currentCoords.x; + y = objectEvent->currentCoords.y; + MoveCoords(direction, &x, &y); + ShowWarpArrowSprite(objectEvent->warpArrowSpriteId, direction, x, y); + return; + } + } + SetSpriteInvisible(objectEvent->warpArrowSpriteId); +} + +bool8 (*const gUnknown_835B8A0[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = { + sub_805CD64, + do_boulder_dust, + sub_805CE20 +}; + +void StartStrengthAnim(u8 a, u8 b) +{ + u8 taskId = CreateTask(Task_BumpBoulder, 0xFF); + + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = b; + Task_BumpBoulder(taskId); +} + +void Task_BumpBoulder(u8 taskId) +{ + while (gUnknown_835B8A0[gTasks[taskId].data[0]](&gTasks[taskId], + &gObjectEvents[gPlayerAvatar.objectEventId], + &gObjectEvents[gTasks[taskId].data[1]])) + ; +} + +bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +{ + ScriptContext2_Enable(); + gPlayerAvatar.preventStep = TRUE; + task->data[0]++; + return FALSE; +} + +bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +{ + if (!ObjectEventIsMovementOverridden(playerObject) + && !ObjectEventIsMovementOverridden(strengthObject)) + { + ObjectEventClearHeldMovementIfFinished(playerObject); + ObjectEventClearHeldMovementIfFinished(strengthObject); + sub_805C06C(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2])); + sub_805C0A4(strengthObject, sub_8063F2C((u8)task->data[2])); + gFieldEffectArguments[0] = strengthObject->currentCoords.x; + gFieldEffectArguments[1] = strengthObject->currentCoords.y; + gFieldEffectArguments[2] = strengthObject->previousElevation; + gFieldEffectArguments[3] = gSprites[strengthObject->spriteId].oam.priority; + FieldEffectStart(FLDEFF_DUST); + PlaySE(SE_W070); + task->data[0]++; + } + return FALSE; +} + +bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +{ + if (ObjectEventCheckHeldMovementStatus(playerObject) + && ObjectEventCheckHeldMovementStatus(strengthObject)) + { + ObjectEventClearHeldMovementIfFinished(playerObject); + ObjectEventClearHeldMovementIfFinished(strengthObject); + sub_806DE28(strengthObject); + sub_806DE70(strengthObject->currentCoords.x, strengthObject->currentCoords.y); + gPlayerAvatar.preventStep = FALSE; + ScriptContext2_Disable(); + DestroyTask(FindTaskIdByFunc(Task_BumpBoulder)); + } + return FALSE; +} + +bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = { + PlayerAvatar_DoSecretBaseMatJump +}; + +void DoPlayerMatJump(void) +{ + DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF)); +} + +void DoPlayerAvatarSecretBaseMatJump(u8 taskId) +{ + while (sPlayerAvatarSecretBaseMatJump[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])) + ; +} + +// because data[0] is used to call this, it can be inferred that there may have been multiple mat jump functions at one point, so the name for these groups of functions is appropriate in assuming the sole use of mat jump. +bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent) +{ + gPlayerAvatar.preventStep = TRUE; + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + PlaySE(SE_DANSA); + sub_805C06C(objectEvent, GetJumpInPlaceMovementAction(objectEvent->facingDirection)); + task->data[1]++; + if (task->data[1] > 1) + { + gPlayerAvatar.preventStep = FALSE; + gPlayerAvatar.unk1 |= 0x20; + DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); + } + } + return FALSE; +} + +bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task * task, struct ObjectEvent * playerObj) = { + PlayerAvatar_SecretBaseMatSpinStep0, + PlayerAvatar_SecretBaseMatSpinStep1, + PlayerAvatar_SecretBaseMatSpinStep2, + PlayerAvatar_SecretBaseMatSpinStep3, +}; + +void DoPlayerMatSpin(void) +{ + u8 taskId = CreateTask(PlayerAvatar_DoSecretBaseMatSpin, 0xFF); + + PlayerAvatar_DoSecretBaseMatSpin(taskId); +} + +void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId) +{ + while (sPlayerAvatarSecretBaseMatSpin[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])) + ; +} + +bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent) +{ + task->data[0]++; + task->data[1] = objectEvent->movementDirection; + gPlayerAvatar.preventStep = TRUE; + ScriptContext2_Enable(); + PlaySE(SE_TK_WARPIN); + return TRUE; +} + +bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent) +{ + u8 directions[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; + + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + u8 direction; + + sub_805C06C(objectEvent, GetFaceDirectionMovementAction(direction = directions[objectEvent->movementDirection - 1])); + if (direction == (u8)task->data[1]) + task->data[2]++; + task->data[0]++; + if (task->data[2] > 3 && direction == GetOppositeDirection(task->data[1])) + task->data[0]++; + } + return FALSE; +} + +bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent) +{ + const u8 actions[] = { + MOVEMENT_ACTION_DELAY_1, + MOVEMENT_ACTION_DELAY_1, + MOVEMENT_ACTION_DELAY_2, + MOVEMENT_ACTION_DELAY_4, + MOVEMENT_ACTION_DELAY_8, + }; + + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + sub_805C06C(objectEvent, actions[task->data[2]]); + task->data[0] = 1; + } + return FALSE; +} + +bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + sub_805C06C(objectEvent, sub_8063F2C(GetOppositeDirection(task->data[1]))); + ScriptContext2_Disable(); + gPlayerAvatar.preventStep = FALSE; + DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin)); + } + return FALSE; +} + +void CreateStopSurfingTask(u8 direction) +{ + u8 taskId; + + ScriptContext2_Enable(); + FreezeObjectEvents(); + Overworld_ClearSavedMusic(); + Overworld_ChangeMusicToDefault(); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; + gPlayerAvatar.preventStep = TRUE; + taskId = CreateTask(Task_StopSurfingInit, 0xFF); + gTasks[taskId].data[0] = direction; + Task_StopSurfingInit(taskId); +} + +void CreateStopSurfingTask_NoMusicChange(u8 direction) +{ + u8 taskId; + + ScriptContext2_Enable(); + FreezeObjectEvents(); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; + gPlayerAvatar.preventStep = TRUE; + taskId = CreateTask(Task_StopSurfingInit, 0xFF); + gTasks[taskId].data[0] = direction; + Task_StopSurfingInit(taskId); +} + +void sub_805D1A8(void) +{ + if (gUnknown_3005E88 != 1 && gUnknown_3005E88 != 3) + { + sub_811278C(gUnknown_835B820[DIR_NORTH], 16); + CreateStopSurfingTask(DIR_NORTH); + } +} diff --git a/src/quest_log_player.c b/src/quest_log_player.c index be40042b3..0819e8fc5 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -177,20 +177,20 @@ static void sub_81507BC(struct ObjectEvent * a0, u8 a1) static void sub_81507CC(void) { - sub_805D154(1); + CreateStopSurfingTask_NoMusicChange(1); } static void sub_81507D8(void) { - sub_805D154(2); + CreateStopSurfingTask_NoMusicChange(2); } static void sub_81507E4(void) { - sub_805D154(3); + CreateStopSurfingTask_NoMusicChange(3); } static void sub_81507F0(void) { - sub_805D154(4); + CreateStopSurfingTask_NoMusicChange(4); } From c032dc02319139771d8fed40c14297ee81b18b34 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 25 Mar 2020 17:37:07 -0400 Subject: [PATCH 09/16] through AlignFishingAnimationFrames --- asm/field_player_avatar.s | 1120 ------------------------------- data/field_player_avatar.s | 34 - include/event_object_movement.h | 2 + include/field_effect_helpers.h | 1 + include/field_player_avatar.h | 4 +- include/quest_log.h | 1 + include/quest_log_player.h | 2 +- include/strings.h | 5 + src/event_object_movement.c | 2 + src/field_player_avatar.c | 401 ++++++++++- src/item_use.c | 2 +- src/quest_log_player.c | 6 +- src/strings.c | 6 +- 13 files changed, 421 insertions(+), 1165 deletions(-) diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 52dbf8583..f1bcf4e39 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5,1126 +5,6 @@ .text - thumb_func_start Task_StopSurfingInit -Task_StopSurfingInit: @ 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 Task_StopSurfingInit - - 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} diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s index c4a4f324f..74faff36c 100644 --- a/data/field_player_avatar.s +++ b/data/field_player_avatar.s @@ -4,39 +4,5 @@ .section .rodata .align 2 - .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/include/event_object_movement.h b/include/event_object_movement.h index 12d3305e7..496b2f245 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -217,5 +217,7 @@ u8 GetJumpInPlaceTurnAroundMovementAction(u32 direction); u8 GetAcroWheelieInPlaceDirectionMovementAction(u32 direction); u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction); u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction); +u8 sub_80641EC(u32 direction); +u8 sub_8063510(u8 direction); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index a1fbe49b2..4505b2e48 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -24,5 +24,6 @@ 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); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 1dcdb8e5d..51e29c060 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -19,12 +19,12 @@ void sub_805C780(void); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetPlayerAvatarGraphicsIdByStateId(u8); void SetPlayerAvatarStateMask(u8 mask); -void sub_805D9C4(struct Sprite *sprite); +void AlignFishingAnimationFrames(struct Sprite *sprite); void CreateStopSurfingTask_NoMusicChange(u8 direction); void sub_805DAE4(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); diff --git a/include/quest_log.h b/include/quest_log.h index 70a5c2f30..28c69505b 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -58,5 +58,6 @@ 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_player.h b/include/quest_log_player.h index eedb6fa37..5aee3f2d0 100644 --- a/include/quest_log_player.h +++ b/include/quest_log_player.h @@ -4,7 +4,7 @@ #include "global.h" void sub_8150454(void); -bool8 sub_8150474(u8 a0); +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/src/event_object_movement.c b/src/event_object_movement.c index 7fde3ff21..c326b2d01 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4084,6 +4084,8 @@ static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Spr sprite->data[1] = 0; } +// Off by one error + u8 GetFaceDirectionAnimNum(u8 direction) { return gFaceDirectionAnimNums[direction]; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e3035351b..0ee1f2fea 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -8,12 +8,17 @@ #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" @@ -108,6 +113,24 @@ bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task * task, struct ObjectEvent bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task * task, struct ObjectEvent * playerObj); void CreateStopSurfingTask(u8 direction); void Task_StopSurfingInit(u8 taskId); +void Task_WaitStopSurfing(u8 taskId); +void Task_Fishing(u8 taskId); +bool8 Fishing1(struct Task * task); +bool8 Fishing2(struct Task * task); +bool8 Fishing3(struct Task * task); +bool8 Fishing4(struct Task * task); +bool8 Fishing5(struct Task * task); +bool8 Fishing6(struct Task * task); +bool8 Fishing7(struct Task * task); +bool8 Fishing8(struct Task * task); +bool8 Fishing9(struct Task * task); +bool8 Fishing10(struct Task * task); +bool8 Fishing11(struct Task * task); +bool8 Fishing12(struct Task * task); +bool8 Fishing13(struct Task * task); +bool8 Fishing14(struct Task * task); +bool8 Fishing15(struct Task * task); +bool8 Fishing16(struct Task * task); bool8 player_should_look_direction_be_enforced_upon_movement(void); void MovementType_Player(struct Sprite *sprite) @@ -1330,7 +1353,7 @@ void sub_805CBE8(void) StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); } -void sub_805CC2C(void) +void sub_805CC2C(u8 direction) { sub_8150498(2); } @@ -1590,3 +1613,379 @@ void sub_805D1A8(void) CreateStopSurfingTask(DIR_NORTH); } } + +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; +} + +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(); + } +} + +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(); +} + + +void Task_Fishing(u8 taskId) +{ + while (sFishingStateFuncs[gTasks[taskId].tStep](&gTasks[taskId])) + ; +} + +bool8 Fishing1(struct Task *task) +{ + ScriptContext2_Enable(); + gPlayerAvatar.preventStep = TRUE; + task->tStep++; + return FALSE; +} + +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; +} + +bool8 Fishing3(struct Task *task) +{ + AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); + + // Wait one second + task->tFrameCounter++; + if (task->tFrameCounter >= 60) + task->tStep++; + return FALSE; +} + +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 +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 +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], sub_8063510(GetPlayerFacingDirection())); + } + return TRUE; +} + +// Oh! A Bite! +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. +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 +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; +} + +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; +} + +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 +bool8 Fishing12(struct Task *task) +{ + AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(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 +bool8 Fishing13(struct Task *task) +{ + AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(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 +bool8 Fishing14(struct Task *task) +{ + AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); + task->tStep++; + return FALSE; +} + +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; +} + +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); +} diff --git a/src/item_use.c b/src/item_use.c index 0b74e0726..ea7005f4e 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -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/quest_log_player.c b/src/quest_log_player.c index 0819e8fc5..9eb0fbeb8 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) { @@ -107,7 +107,7 @@ static void sub_81505C4(u8 taskId) gTasks[taskId].data[1] = 0; break; case 1: - sub_805D9C4(sprite); + AlignFishingAnimationFrames(sprite); if (gTasks[taskId].data[1] < 60) gTasks[taskId].data[1]++; else @@ -118,7 +118,7 @@ static void sub_81505C4(u8 taskId) gTasks[taskId].data[0]++; break; case 3: - sub_805D9C4(sprite); + AlignFishingAnimationFrames(sprite); if (sprite->animEnded) { if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)) 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"); From 302c6bfe6b13a329cb2aa36913b07b86abcc3694 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 25 Mar 2020 18:00:26 -0400 Subject: [PATCH 10/16] finish field_player_avatar --- asm/field_player_avatar.s | 472 ---------------------------------- data/field_player_avatar.s | 8 - include/bike.h | 1 + include/field_player_avatar.h | 1 - ld_script.txt | 2 - src/field_player_avatar.c | 163 +++++++++++- 6 files changed, 162 insertions(+), 485 deletions(-) delete mode 100644 asm/field_player_avatar.s delete mode 100644 data/field_player_avatar.s diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s deleted file mode 100644 index f1bcf4e39..000000000 --- a/asm/field_player_avatar.s +++ /dev/null @@ -1,472 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - 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/data/field_player_avatar.s b/data/field_player_avatar.s deleted file mode 100644 index 74faff36c..000000000 --- a/data/field_player_avatar.s +++ /dev/null @@ -1,8 +0,0 @@ -#include "constants/event_objects.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_835B92C:: @ 835B92C - .byte 0x01, 0x03, 0x04, 0x02, 0x01 diff --git a/include/bike.h b/include/bike.h index bdc61ecfe..ad2bd999a 100644 --- a/include/bike.h +++ b/include/bike.h @@ -10,5 +10,6 @@ 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/field_player_avatar.h b/include/field_player_avatar.h index 51e29c060..6d854b58b 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -13,7 +13,6 @@ u8 GetPlayerMovementDirection(void); u8 PlayerGetCopyableMovement(void); void MovePlayerNotOnBike(u8 direction, u16 heldKeys); -void sub_808D074(u8); void sub_805C270(void); void sub_805C780(void); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); diff --git a/ld_script.txt b/ld_script.txt index c28ee1b93..0d30ed43e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -93,7 +93,6 @@ SECTIONS { src/field_camera.o(.text); src/field_door.o(.text); src/field_player_avatar.o(.text); - asm/field_player_avatar.o(.text); src/event_object_movement.o(.text); src/field_message_box.o(.text); src/event_object_lock.o(.text); @@ -435,7 +434,6 @@ SECTIONS { src/metatile_behavior.o(.rodata); src/field_door.o(.rodata); src/field_player_avatar.o(.rodata); - data/field_player_avatar.o(.rodata); data/event_object_movement.o(.rodata); src/event_object_movement.o(.rodata); src/scrcmd.o(.rodata); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 0ee1f2fea..375123577 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -4,6 +4,7 @@ #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" @@ -28,7 +29,7 @@ #include "constants/moves.h" EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; -EWRAM_DATA bool8 gUnknown_2036E34 = FALSE; +EWRAM_DATA u8 gUnknown_2036E34 = DIR_NONE; EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; @@ -131,7 +132,9 @@ bool8 Fishing13(struct Task * task); bool8 Fishing14(struct Task * task); bool8 Fishing15(struct Task * task); bool8 Fishing16(struct Task * task); -bool8 player_should_look_direction_be_enforced_upon_movement(void); +void sub_805DB04(u8 taskId); +void sub_805DC38(u8 taskId); +u8 sub_805DDC8(struct ObjectEvent * object, s16 *timer); void MovementType_Player(struct Sprite *sprite) { @@ -1989,3 +1992,159 @@ void AlignFishingAnimationFrames(struct Sprite * playerSprite) if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y); } + +void sub_805DAB0(void) +{ + u8 taskId = CreateTask(sub_805DB04, 0); + sub_805DB04(taskId); +} + +bool32 sub_805DAD0(void) +{ + return FuncIsActiveTask(sub_805DB04); +} + +void sub_805DAE4(u8 direction) +{ + gUnknown_2036E34 = direction; +} + +u8 sub_805DAF0(void) +{ + if (gUnknown_2036E34 == DIR_NONE) + return DIR_SOUTH; + else + return gUnknown_2036E34; +} + +void sub_805DB04(u8 taskId) +{ + struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *sprite = &gSprites[object->spriteId]; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (!ObjectEventClearHeldMovementIfFinished(object)) + { + return; + } + + sub_805DAE4(object->facingDirection); + data[1] = 0; + data[2] = 1; + data[3] = (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; + data[0]++; + case 1: + sub_805DDC8(object, &data[1]); + data[3] -= data[2]; + data[2] += 3; + sprite->pos1.y = data[3] >> 4; + if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32) + { + data[0]++; + } + break; + case 2: + DestroyTask(taskId); + break; + } +} + +void sub_805DC04(void) +{ + u8 taskId = CreateTask(sub_805DC38, 0); + sub_805DC38(taskId); +} + +bool32 sub_805DC24(void) +{ + return FuncIsActiveTask(sub_805DC38); +} + +const u8 gUnknown_835B92C[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; + +void sub_805DC38(u8 taskId) +{ + struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *sprite = &gSprites[object->spriteId]; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[5] = sub_805DAF0(); + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_835B92C[data[5]])); + data[1] = 0; + data[2] = 116; + data[4] = sprite->pos1.y; + data[6] = sprite->oam.priority; + data[7] = sprite->subpriority; + data[3] = -((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; + data[0]++; + case 1: + sub_805DDC8(object, &data[1]); + data[3] += data[2]; + data[2] -= 3; + if (data[2] < 4) + { + data[2] = 4; + } + sprite->pos1.y = data[3] >> 4; + if (sprite->pos1.y >= data[4]) + { + sprite->pos1.y = data[4]; + data[8] = 0; + data[0]++; + } + break; + case 2: + sub_805DDC8(object, &data[1]); + data[8]++; + if (data[8] > 8) + { + data[0]++; + } + break; + case 3: + if (data[5] == sub_805DDC8(object, &data[1])) + { + object->fixedPriority = 0; + sprite->oam.priority = data[6]; + sprite->subpriority = data[7]; + CameraObjectReset1(); + DestroyTask(taskId); + } + break; + } +} + +u8 sub_805DDC8(struct ObjectEvent *object, s16 *a1) +{ + if (*a1 < 8 && ++(*a1) < 8) + { + return object->facingDirection; + } + + if (!ObjectEventCheckHeldMovementStatus(object)) + { + return object->facingDirection; + } + + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_835B92C[object->facingDirection])); + *a1 = 0; + return gUnknown_835B92C[object->facingDirection]; +} From 3a29f9be954b8846f32865be146aefaf1b9f5fda Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 25 Mar 2020 18:12:07 -0400 Subject: [PATCH 11/16] static syms in field_player_avatar --- include/field_player_avatar.h | 20 ++ src/field_player_avatar.c | 447 +++++++++++++++++----------------- 2 files changed, 238 insertions(+), 229 deletions(-) diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 6d854b58b..d6c02d8ab 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -39,5 +39,25 @@ u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); void sub_805CBE8(void); 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 sub_805C20C(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/src/field_player_avatar.c b/src/field_player_avatar.c index 375123577..cced50f4b 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -28,120 +28,109 @@ #include "constants/species.h" #include "constants/moves.h" -EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; -EWRAM_DATA u8 gUnknown_2036E34 = DIR_NONE; +static EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; +static EWRAM_DATA u8 gUnknown_2036E34 = DIR_NONE; EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; -u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite); -bool8 sub_805B528(void); -bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent * playerObjEvent, u8 direction); -void npc_clear_strange_bits(struct ObjectEvent * playerObjEvent); -bool8 TryDoMetatileBehaviorForcedMovement(void); -void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys); -void PlayerAllowForcedMovementIfMovingSameDirection(void); -bool8 ForcedMovement_None(void); -bool8 ForcedMovement_Slip(void); -bool8 ForcedMovement_WalkSouth(void); -bool8 ForcedMovement_WalkNorth(void); -bool8 ForcedMovement_WalkWest(void); -bool8 ForcedMovement_WalkEast(void); -bool8 ForcedMovement_SpinRight(void); -bool8 ForcedMovement_SpinLeft(void); -bool8 ForcedMovement_SpinUp(void); -bool8 ForcedMovement_SpinDown(void); -void PlaySpinSound(void); -bool8 ForcedMovement_PushedSouthByCurrent(void); -bool8 ForcedMovement_PushedNorthByCurrent(void); -bool8 ForcedMovement_PushedWestByCurrent(void); -bool8 ForcedMovement_PushedEastByCurrent(void); -bool8 ForcedMovement_SlideSouth(void); -bool8 ForcedMovement_SlideNorth(void); -bool8 ForcedMovement_SlideWest(void); -bool8 ForcedMovement_SlideEast(void); -bool8 ForcedMovement_0xBB(void); -bool8 ForcedMovement_0xBC(void); -u8 CheckMovementInputNotOnBike(u8 direction); -void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys); -void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys); -void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys); -bool32 PlayerIsMovingOnRockStairs(u8 direction); -u8 CheckForPlayerAvatarCollision(u8 direction); +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); -bool8 CanStopSurfing(s16 x, s16 y, u8 direction); -bool8 ShouldJumpLedge(s16 x, s16 y, u8 direction); -bool8 TryPushBoulder(s16 x, s16 y, u8 direction); -void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision); -void DoPlayerAvatarTransition(void); -void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObject); -void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObject); -void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObject); -void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObject); -void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObject); -void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObject); -bool8 PlayerIsAnimActive(void); -bool8 PlayerCheckIfAnimFinishedOrInactive(void); -bool8 player_is_anim_in_certain_ranges(void); -bool8 sub_805BF58(void); -void PlayerRun(u8 direction); -void PlayerRunSlow(u8 direction); -void PlayerGoSpeed2(u8 direction); -void PlayerGoSpeed1(u8 direction); -void PlayerGoSlow(u8 direction); -void PlayerRideWaterCurrent(u8 direction); -void PlayerNotOnBikeCollide(u8 direction); -void PlayerFaceDirection(u8 direction); -void PlayerTurnInPlace(u8 direction); -void PlayerJumpLedge(u8 direction); -void PlayCollisionSoundIfNotFacingWarp(u8 direction); -void PlayerGoSpin(u8 direction); -void sub_805C2CC(u8 metatileBehavior); -bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y); -void sub_805CC40(struct ObjectEvent * playerObjEvent); -void StartStrengthAnim(u8 objectEventId, u8 direction); -void Task_BumpBoulder(u8 taskId); -bool8 sub_805CD64(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj); -bool8 do_boulder_dust(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj); -bool8 sub_805CE20(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj); -void DoPlayerMatJump(void); -void DoPlayerAvatarSecretBaseMatJump(u8 taskId); -bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task * task, struct ObjectEvent * playerObj); -void DoPlayerMatSpin(void); -void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId); -bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task * task, struct ObjectEvent * playerObj); -bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task * task, struct ObjectEvent * playerObj); -bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task * task, struct ObjectEvent * playerObj); -bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task * task, struct ObjectEvent * playerObj); -void CreateStopSurfingTask(u8 direction); -void Task_StopSurfingInit(u8 taskId); -void Task_WaitStopSurfing(u8 taskId); -void Task_Fishing(u8 taskId); -bool8 Fishing1(struct Task * task); -bool8 Fishing2(struct Task * task); -bool8 Fishing3(struct Task * task); -bool8 Fishing4(struct Task * task); -bool8 Fishing5(struct Task * task); -bool8 Fishing6(struct Task * task); -bool8 Fishing7(struct Task * task); -bool8 Fishing8(struct Task * task); -bool8 Fishing9(struct Task * task); -bool8 Fishing10(struct Task * task); -bool8 Fishing11(struct Task * task); -bool8 Fishing12(struct Task * task); -bool8 Fishing13(struct Task * task); -bool8 Fishing14(struct Task * task); -bool8 Fishing15(struct Task * task); -bool8 Fishing16(struct Task * task); -void sub_805DB04(u8 taskId); -void sub_805DC38(u8 taskId); -u8 sub_805DDC8(struct ObjectEvent * object, s16 *timer); +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 sub_805DB04(u8 taskId); +static void sub_805DC38(u8 taskId); +static u8 sub_805DDC8(struct ObjectEvent * object, s16 *timer); void MovementType_Player(struct Sprite *sprite) { UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, ObjectEventCB2_NoMovement2); } -u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite) +static u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite) { return 0; } @@ -166,7 +155,7 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys) } } -bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 direction) +static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 direction) { if (ObjectEventIsMovementOverridden(playerObjEvent) @@ -188,7 +177,7 @@ bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 return FALSE; } -void npc_clear_strange_bits(struct ObjectEvent *objEvent) +static void npc_clear_strange_bits(struct ObjectEvent *objEvent) { objEvent->inanimate = 0; objEvent->disableAnim = 0; @@ -196,7 +185,7 @@ void npc_clear_strange_bits(struct ObjectEvent *objEvent) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH; } -void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys) +static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys) { if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) || (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)) @@ -205,13 +194,13 @@ void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys) MovePlayerNotOnBike(direction, heldKeys); } -void PlayerAllowForcedMovementIfMovingSameDirection(void) +static void PlayerAllowForcedMovementIfMovingSameDirection(void) { if (gPlayerAvatar.runningState == MOVING) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; } -bool8 sub_805B528(void) +static bool8 sub_805B528(void) { if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && MetatileBehavior_IsSpinTile(gPlayerAvatar.unk1C)) { @@ -234,7 +223,7 @@ bool8 sub_805B528(void) return FALSE; } -const struct { +static const struct { bool8 (*unk0)(u8 metatileBehavior); bool8 (*unk4)(void); } sForcedMovementFuncs[] = { @@ -262,7 +251,7 @@ const struct { {NULL, ForcedMovement_None}, }; -bool8 TryDoMetatileBehaviorForcedMovement(void) +static bool8 TryDoMetatileBehaviorForcedMovement(void) { int i; u8 behavior; @@ -287,7 +276,7 @@ bool8 TryDoMetatileBehaviorForcedMovement(void) } } -bool8 ForcedMovement_None(void) +static bool8 ForcedMovement_None(void) { if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) { @@ -301,7 +290,7 @@ bool8 ForcedMovement_None(void) return FALSE; } -u8 DoForcedMovement(u8 direction, MovementAction movementAction) +static u8 DoForcedMovement(u8 direction, MovementAction movementAction) { struct PlayerAvatar *playerAvatar = &gPlayerAvatar; u8 collision = CheckForPlayerAvatarCollision(direction); @@ -331,7 +320,7 @@ u8 DoForcedMovement(u8 direction, MovementAction movementAction) } } -u8 DoForcedMovementInCurrentDirection(MovementAction movementAction) +static u8 DoForcedMovementInCurrentDirection(MovementAction movementAction) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -339,81 +328,81 @@ u8 DoForcedMovementInCurrentDirection(MovementAction movementAction) return DoForcedMovement(playerObjEvent->movementDirection, movementAction); } -bool8 ForcedMovement_Slip(void) +static bool8 ForcedMovement_Slip(void) { return DoForcedMovementInCurrentDirection(PlayerGoSpeed2); } -bool8 ForcedMovement_WalkSouth(void) +static bool8 ForcedMovement_WalkSouth(void) { return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed1); } -bool8 ForcedMovement_WalkNorth(void) +static bool8 ForcedMovement_WalkNorth(void) { return DoForcedMovement(DIR_NORTH, PlayerGoSpeed1); } -bool8 ForcedMovement_WalkWest(void) +static bool8 ForcedMovement_WalkWest(void) { return DoForcedMovement(DIR_WEST, PlayerGoSpeed1); } -bool8 ForcedMovement_WalkEast(void) +static bool8 ForcedMovement_WalkEast(void) { return DoForcedMovement(DIR_EAST, PlayerGoSpeed1); } -bool8 ForcedMovement_SpinRight(void) +static bool8 ForcedMovement_SpinRight(void) { PlaySpinSound(); return DoForcedMovement(DIR_EAST, PlayerGoSpin); } -bool8 ForcedMovement_SpinLeft(void) +static bool8 ForcedMovement_SpinLeft(void) { PlaySpinSound(); return DoForcedMovement(DIR_WEST, PlayerGoSpin); } -bool8 ForcedMovement_SpinUp(void) +static bool8 ForcedMovement_SpinUp(void) { PlaySpinSound(); return DoForcedMovement(DIR_NORTH, PlayerGoSpin); } -bool8 ForcedMovement_SpinDown(void) +static bool8 ForcedMovement_SpinDown(void) { PlaySpinSound(); return DoForcedMovement(DIR_SOUTH, PlayerGoSpin); } -void PlaySpinSound(void) +static void PlaySpinSound(void) { PlaySE(SE_W013B); } -bool8 ForcedMovement_PushedSouthByCurrent(void) +static bool8 ForcedMovement_PushedSouthByCurrent(void) { return DoForcedMovement(DIR_SOUTH, PlayerRideWaterCurrent); } -bool8 ForcedMovement_PushedNorthByCurrent(void) +static bool8 ForcedMovement_PushedNorthByCurrent(void) { return DoForcedMovement(DIR_NORTH, PlayerRideWaterCurrent); } -bool8 ForcedMovement_PushedWestByCurrent(void) +static bool8 ForcedMovement_PushedWestByCurrent(void) { return DoForcedMovement(DIR_WEST, PlayerRideWaterCurrent); } -bool8 ForcedMovement_PushedEastByCurrent(void) +static bool8 ForcedMovement_PushedEastByCurrent(void) { return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent); } -u8 ForcedMovement_Slide(u8 direction, MovementAction movementAction) +static u8 ForcedMovement_Slide(u8 direction, MovementAction movementAction) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -422,39 +411,39 @@ u8 ForcedMovement_Slide(u8 direction, MovementAction movementAction) return DoForcedMovement(direction, movementAction); } -bool8 ForcedMovement_SlideSouth(void) +static bool8 ForcedMovement_SlideSouth(void) { return ForcedMovement_Slide(DIR_SOUTH, PlayerGoSpeed2); } -bool8 ForcedMovement_SlideNorth(void) +static bool8 ForcedMovement_SlideNorth(void) { return ForcedMovement_Slide(DIR_NORTH, PlayerGoSpeed2); } -bool8 ForcedMovement_SlideWest(void) +static bool8 ForcedMovement_SlideWest(void) { return ForcedMovement_Slide(DIR_WEST, PlayerGoSpeed2); } -bool8 ForcedMovement_SlideEast(void) +static bool8 ForcedMovement_SlideEast(void) { return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2); } -bool8 ForcedMovement_0xBB(void) +static bool8 ForcedMovement_0xBB(void) { DoPlayerMatJump(); return TRUE; } -bool8 ForcedMovement_0xBC(void) +static bool8 ForcedMovement_0xBC(void) { DoPlayerMatSpin(); return TRUE; } -void (*const gUnknown_835B814[])(u8, u16) = { +static void (*const gUnknown_835B814[])(u8, u16) = { PlayerNotOnBikeNotMoving, PlayerNotOnBikeTurningInPlace, PlayerNotOnBikeMoving @@ -465,7 +454,7 @@ void MovePlayerNotOnBike(u8 direction, u16 heldKeys) gUnknown_835B814[CheckMovementInputNotOnBike(direction)](direction, heldKeys); } -u8 CheckMovementInputNotOnBike(u8 direction) +static u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) { @@ -484,17 +473,17 @@ u8 CheckMovementInputNotOnBike(u8 direction) } } -void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys) +static void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys) { PlayerFaceDirection(GetPlayerFacingDirection()); } -void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) +static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) { PlayerTurnInPlace(direction); } -void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) +static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) { u8 collision = CheckForPlayerAvatarCollision(direction); @@ -561,7 +550,7 @@ bool32 PlayerIsMovingOnRockStairs(u8 direction) } } -u8 CheckForPlayerAvatarCollision(u8 direction) +static u8 CheckForPlayerAvatarCollision(u8 direction) { s16 x, y; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -595,7 +584,7 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u return collision; } -const u8 gUnknown_835B820[] = { +static const u8 gUnknown_835B820[] = { MOVEMENT_ACTION_FACE_DOWN_FAST, MOVEMENT_ACTION_FACE_DOWN_FAST, MOVEMENT_ACTION_FACE_UP_FAST, @@ -603,7 +592,7 @@ const u8 gUnknown_835B820[] = { MOVEMENT_ACTION_FACE_RIGHT_FAST }; -bool8 CanStopSurfing(s16 x, s16 y, u8 direction) +static bool8 CanStopSurfing(s16 x, s16 y, u8 direction) { if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) && MapGridGetZCoordAt(x, y) == 3 @@ -619,7 +608,7 @@ bool8 CanStopSurfing(s16 x, s16 y, u8 direction) } } -bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) +static bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) { if (GetLedgeJumpDirection(x, y, z) != 0) return TRUE; @@ -627,7 +616,7 @@ bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) return FALSE; } -bool8 TryPushBoulder(s16 x, s16 y, u8 direction) +static bool8 TryPushBoulder(s16 x, s16 y, u8 direction) { u8 objectEventId; u8 direction_ = direction; @@ -655,7 +644,7 @@ bool8 TryPushBoulder(s16 x, s16 y, u8 direction) } } -bool8 (*const gUnknown_835B828[])(u8) = { +static bool8 (*const gUnknown_835B828[])(u8) = { MetatileBehavior_IsBumpySlope, MetatileBehavior_IsIsolatedVerticalRail, MetatileBehavior_IsIsolatedHorizontalRail, @@ -663,7 +652,7 @@ bool8 (*const gUnknown_835B828[])(u8) = { MetatileBehavior_IsHorizontalRail }; -const u8 gUnknown_835B83C[] = { +static const u8 gUnknown_835B83C[] = { COLLISION_WHEELIE_HOP, COLLISION_ISOLATED_VERTICAL_RAIL, COLLISION_ISOLATED_HORIZONTAL_RAIL, @@ -671,7 +660,7 @@ const u8 gUnknown_835B83C[] = { COLLISION_HORIZONTAL_RAIL, }; -void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision) +static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision) { u8 i; @@ -691,7 +680,7 @@ void SetPlayerAvatarTransitionFlags(bool16 flags) DoPlayerAvatarTransition(); } -void (*const gUnknown_835B844[])(struct ObjectEvent *) = { +static void (*const gUnknown_835B844[])(struct ObjectEvent *) = { PlayerAvatarTransition_Normal, PlayerAvatarTransition_Bike, PlayerAvatarTransition_Bike, @@ -702,7 +691,7 @@ void (*const gUnknown_835B844[])(struct ObjectEvent *) = { PlayerAvatarTransition_Dummy }; -void DoPlayerAvatarTransition(void) +static void DoPlayerAvatarTransition(void) { u8 i; u8 flags = gPlayerAvatar.unk1; @@ -718,36 +707,36 @@ void DoPlayerAvatarTransition(void) } } -void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObjEvent) +static void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObjEvent) { } -void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObjEvent) +static void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObjEvent) { sub_8150474(0); sub_8150498(0); } -void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent) +static void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent) { sub_8150474(1); sub_8150498(1); sub_80BD620(0, 0); } -void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent) +static void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent) { sub_8150474(3); sub_8150498(3); } -void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEvent) +static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEvent) { } -void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent) +static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent) { gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; } @@ -770,7 +759,7 @@ void sub_805BEB8(void) } } -bool8 player_is_anim_in_certain_ranges(void) +static bool8 player_is_anim_in_certain_ranges(void) { u8 movementActionId = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId; @@ -784,7 +773,7 @@ bool8 player_is_anim_in_certain_ranges(void) return FALSE; } -bool8 sub_805BF58(void) +static bool8 sub_805BF58(void) { if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION) return TRUE; @@ -792,17 +781,17 @@ bool8 sub_805BF58(void) return FALSE; } -bool8 PlayerIsAnimActive(void) +static bool8 PlayerIsAnimActive(void) { return ObjectEventIsMovementOverridden(&gObjectEvents[gPlayerAvatar.objectEventId]); } -bool8 PlayerCheckIfAnimFinishedOrInactive(void) +static bool8 PlayerCheckIfAnimFinishedOrInactive(void) { return ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]); } -void PlayerSetCopyableMovement(u8 a) +static void PlayerSetCopyableMovement(u8 a) { gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = a; } @@ -812,12 +801,12 @@ u8 PlayerGetCopyableMovement(void) return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement; } -void PlayerForceSetHeldMovement(u8 a) +static void PlayerForceSetHeldMovement(u8 a) { ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], a); } -void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) +static void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) { if (!PlayerIsAnimActive()) { @@ -827,13 +816,13 @@ void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) } } -void sub_805C06C(struct ObjectEvent * objectEvent, u8 movementAction) +static void sub_805C06C(struct ObjectEvent * objectEvent, u8 movementAction) { if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementAction)) sub_81126AC(movementAction, 0); } -void sub_805C0A4(struct ObjectEvent * objectEvent, u8 movementAction) +static void sub_805C0A4(struct ObjectEvent * objectEvent, u8 movementAction) { if (!ObjectEventSetHeldMovement(objectEvent, movementAction)) sub_8112588(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, movementAction, 32); @@ -931,12 +920,12 @@ void sub_805C270(void) } } -void PlayerGoSpin(u8 direction) +static void PlayerGoSpin(u8 direction) { PlayerSetAnimId(sub_80640E4(direction), 3); } -void sub_805C2CC(u8 metatileBehavior) +static void sub_805C2CC(u8 metatileBehavior) { int i; @@ -947,69 +936,69 @@ void sub_805C2CC(u8 metatileBehavior) } } -void PlayerIdleWheelie(u8 direction) +static void PlayerIdleWheelie(u8 direction) { PlayerSetAnimId(GetAcroWheelieFaceDirectionMovementAction(direction), 1); } -void PlayerStartWheelie(u8 direction) +static void PlayerStartWheelie(u8 direction) { PlayerSetAnimId(GetAcroPopWheelieFaceDirectionMovementAction(direction), 1); } -void PlayerEndWheelie(u8 direction) +static void PlayerEndWheelie(u8 direction) { PlayerSetAnimId(GetAcroEndWheelieFaceDirectionMovementAction(direction), 1); } -void PlayerStandingHoppingWheelie(u8 direction) +static void PlayerStandingHoppingWheelie(u8 direction) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(direction), 1); } -void PlayerMovingHoppingWheelie(u8 direction) +static void PlayerMovingHoppingWheelie(u8 direction) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(direction), 2); } -void PlayerLedgeHoppingWheelie(u8 direction) +static void PlayerLedgeHoppingWheelie(u8 direction) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(direction), 8); } -void PlayerAcroTurnJump(u8 direction) +static void PlayerAcroTurnJump(u8 direction) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), 1); } -void PlayerAcroWheelieCollide(u8 direction) +static void PlayerAcroWheelieCollide(u8 direction) { PlaySE(SE_WALL_HIT); PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), 2); } -void sub_805C408(u8 direction) +static void sub_805C408(u8 direction) { PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), 2); } -void sub_805C420(u8 direction) +static void sub_805C420(u8 direction) { PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), 2); } -bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = { +static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = { MetatileBehavior_IsSouthArrowWarp, MetatileBehavior_IsNorthArrowWarp, MetatileBehavior_IsWestArrowWarp, MetatileBehavior_IsEastArrowWarp }; -void PlayCollisionSoundIfNotFacingWarp(u8 direction) +static void PlayCollisionSoundIfNotFacingWarp(u8 direction) { s16 x, y; u8 metatileBehavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior; @@ -1139,7 +1128,7 @@ void sub_805C780(void) } } -const u8 sPlayerAvatarGfxIds[][2] = { +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}, @@ -1148,7 +1137,7 @@ const u8 sPlayerAvatarGfxIds[][2] = { {OBJ_EVENT_GFX_RED_ITEM_COPY, OBJ_EVENT_GFX_GREEN_ITEM_COPY}, }; -const u8 sHoennLinkPartnerGfxIds[] = { +static const u8 sHoennLinkPartnerGfxIds[] = { OBJ_EVENT_GFX_RS_BRENDAN, OBJ_EVENT_GFX_RS_MAY }; @@ -1244,7 +1233,7 @@ void SetPlayerAvatarStateMask(u8 flags) gPlayerAvatar.flags |= flags; } -const u8 gUnknown_835B882[][3][2] = { +static const u8 gUnknown_835B882[][3][2] = { // Male { {OBJ_EVENT_GFX_RED_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT}, @@ -1337,7 +1326,7 @@ void sub_805CB70(void) StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); } -const u8 gUnknown_835B88E[] = { +static const u8 gUnknown_835B88E[] = { OBJ_EVENT_GFX_RED_FIELD_MOVE_BIKE, OBJ_EVENT_GFX_GREEN_FIELD_MOVE_BIKE }; @@ -1366,19 +1355,19 @@ void nullsub_24(void) } -void nullsub_25(void) +static void nullsub_25(void) { } -bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = { +static bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = { MetatileBehavior_IsSouthArrowWarp, MetatileBehavior_IsNorthArrowWarp, MetatileBehavior_IsWestArrowWarp, MetatileBehavior_IsEastArrowWarp }; -void sub_805CC40(struct ObjectEvent *objectEvent) +static void sub_805CC40(struct ObjectEvent *objectEvent) { s16 x; s16 y; @@ -1399,13 +1388,13 @@ void sub_805CC40(struct ObjectEvent *objectEvent) SetSpriteInvisible(objectEvent->warpArrowSpriteId); } -bool8 (*const gUnknown_835B8A0[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = { +static bool8 (*const gUnknown_835B8A0[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = { sub_805CD64, do_boulder_dust, sub_805CE20 }; -void StartStrengthAnim(u8 a, u8 b) +static void StartStrengthAnim(u8 a, u8 b) { u8 taskId = CreateTask(Task_BumpBoulder, 0xFF); @@ -1414,7 +1403,7 @@ void StartStrengthAnim(u8 a, u8 b) Task_BumpBoulder(taskId); } -void Task_BumpBoulder(u8 taskId) +static void Task_BumpBoulder(u8 taskId) { while (gUnknown_835B8A0[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], @@ -1422,7 +1411,7 @@ void Task_BumpBoulder(u8 taskId) ; } -bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +static bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; @@ -1430,7 +1419,7 @@ bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct Ob return FALSE; } -bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) { if (!ObjectEventIsMovementOverridden(playerObject) && !ObjectEventIsMovementOverridden(strengthObject)) @@ -1450,7 +1439,7 @@ bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struc return FALSE; } -bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +static bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) { if (ObjectEventCheckHeldMovementStatus(playerObject) && ObjectEventCheckHeldMovementStatus(strengthObject)) @@ -1466,23 +1455,23 @@ bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, struct Ob return FALSE; } -bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = { +static bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = { PlayerAvatar_DoSecretBaseMatJump }; -void DoPlayerMatJump(void) +static void DoPlayerMatJump(void) { DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF)); } -void DoPlayerAvatarSecretBaseMatJump(u8 taskId) +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. -bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent) { gPlayerAvatar.preventStep = TRUE; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -1500,27 +1489,27 @@ bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *ob return FALSE; } -bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task * task, struct ObjectEvent * playerObj) = { +static bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task * task, struct ObjectEvent * playerObj) = { PlayerAvatar_SecretBaseMatSpinStep0, PlayerAvatar_SecretBaseMatSpinStep1, PlayerAvatar_SecretBaseMatSpinStep2, PlayerAvatar_SecretBaseMatSpinStep3, }; -void DoPlayerMatSpin(void) +static void DoPlayerMatSpin(void) { u8 taskId = CreateTask(PlayerAvatar_DoSecretBaseMatSpin, 0xFF); PlayerAvatar_DoSecretBaseMatSpin(taskId); } -void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId) +static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId) { while (sPlayerAvatarSecretBaseMatSpin[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])) ; } -bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent) { task->data[0]++; task->data[1] = objectEvent->movementDirection; @@ -1530,7 +1519,7 @@ bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent return TRUE; } -bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent) { u8 directions[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; @@ -1548,7 +1537,7 @@ bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent return FALSE; } -bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent) { const u8 actions[] = { MOVEMENT_ACTION_DELAY_1, @@ -1566,7 +1555,7 @@ bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent return FALSE; } -bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -1578,7 +1567,7 @@ bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent return FALSE; } -void CreateStopSurfingTask(u8 direction) +static void CreateStopSurfingTask(u8 direction) { u8 taskId; @@ -1617,7 +1606,7 @@ void sub_805D1A8(void) } } -void Task_StopSurfingInit(u8 taskId) +static void Task_StopSurfingInit(u8 taskId) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1631,7 +1620,7 @@ void Task_StopSurfingInit(u8 taskId) gTasks[taskId].func = Task_WaitStopSurfing; } -void Task_WaitStopSurfing(u8 taskId) +static void Task_WaitStopSurfing(u8 taskId) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1648,7 +1637,7 @@ void Task_WaitStopSurfing(u8 taskId) } } -bool8 (*const sFishingStateFuncs[])(struct Task *) = +static bool8 (*const sFishingStateFuncs[])(struct Task *) = { Fishing1, Fishing2, @@ -1695,13 +1684,13 @@ void StartFishing(u8 rod) } -void Task_Fishing(u8 taskId) +static void Task_Fishing(u8 taskId) { while (sFishingStateFuncs[gTasks[taskId].tStep](&gTasks[taskId])) ; } -bool8 Fishing1(struct Task *task) +static bool8 Fishing1(struct Task *task) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; @@ -1709,7 +1698,7 @@ bool8 Fishing1(struct Task *task) return FALSE; } -bool8 Fishing2(struct Task *task) +static bool8 Fishing2(struct Task *task) { struct ObjectEvent *playerObjEvent; const s16 arr1[] = {1, 1, 1}; @@ -1726,7 +1715,7 @@ bool8 Fishing2(struct Task *task) return FALSE; } -bool8 Fishing3(struct Task *task) +static bool8 Fishing3(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); @@ -1737,7 +1726,7 @@ bool8 Fishing3(struct Task *task) return FALSE; } -bool8 Fishing4(struct Task *task) +static bool8 Fishing4(struct Task *task) { u32 randVal; @@ -1756,7 +1745,7 @@ bool8 Fishing4(struct Task *task) } // Play a round of the dot game -bool8 Fishing5(struct Task *task) +static bool8 Fishing5(struct Task *task) { static const u8 dot[] = _("ยท"); @@ -1782,7 +1771,7 @@ bool8 Fishing5(struct Task *task) } // Determine if fish bites -bool8 Fishing6(struct Task *task) +static bool8 Fishing6(struct Task *task) { bool8 bite; @@ -1802,14 +1791,14 @@ bool8 Fishing6(struct Task *task) } // Oh! A Bite! -bool8 Fishing7(struct Task *task) +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. -bool8 Fishing8(struct Task *task) +static bool8 Fishing8(struct Task *task) { const s16 reelTimeouts[3] = {36, 33, 30}; @@ -1823,7 +1812,7 @@ bool8 Fishing8(struct Task *task) } // Determine if we're going to play the dot game again -bool8 Fishing9(struct Task *task) +static bool8 Fishing9(struct Task *task) { const s16 arr[][2] = { @@ -1849,7 +1838,7 @@ bool8 Fishing9(struct Task *task) return FALSE; } -bool8 Fishing10(struct Task *task) +static bool8 Fishing10(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); FillWindowPixelBuffer(0, PIXEL_FILL(1)); @@ -1859,7 +1848,7 @@ bool8 Fishing10(struct Task *task) return FALSE; } -bool8 Fishing11(struct Task *task) +static bool8 Fishing11(struct Task *task) { if (task->tFrameCounter == 0) AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); @@ -1895,7 +1884,7 @@ bool8 Fishing11(struct Task *task) } // Not even a nibble -bool8 Fishing12(struct Task *task) +static bool8 Fishing12(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); @@ -1906,7 +1895,7 @@ bool8 Fishing12(struct Task *task) } // It got away -bool8 Fishing13(struct Task *task) +static bool8 Fishing13(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); @@ -1916,14 +1905,14 @@ bool8 Fishing13(struct Task *task) } // Wait one second -bool8 Fishing14(struct Task *task) +static bool8 Fishing14(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); task->tStep++; return FALSE; } -bool8 Fishing15(struct Task *task) +static bool8 Fishing15(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); if (gSprites[gPlayerAvatar.spriteId].animEnded) @@ -1941,7 +1930,7 @@ bool8 Fishing15(struct Task *task) return FALSE; } -bool8 Fishing16(struct Task *task) +static bool8 Fishing16(struct Task *task) { RunTextPrinters(); if (!IsTextPrinterActive(0)) @@ -2009,7 +1998,7 @@ void sub_805DAE4(u8 direction) gUnknown_2036E34 = direction; } -u8 sub_805DAF0(void) +static u8 sub_805DAF0(void) { if (gUnknown_2036E34 == DIR_NONE) return DIR_SOUTH; @@ -2017,7 +2006,7 @@ u8 sub_805DAF0(void) return gUnknown_2036E34; } -void sub_805DB04(u8 taskId) +static void sub_805DB04(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; @@ -2069,9 +2058,9 @@ bool32 sub_805DC24(void) return FuncIsActiveTask(sub_805DC38); } -const u8 gUnknown_835B92C[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; +static const u8 gUnknown_835B92C[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; -void sub_805DC38(u8 taskId) +static void sub_805DC38(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; @@ -2132,7 +2121,7 @@ void sub_805DC38(u8 taskId) } } -u8 sub_805DDC8(struct ObjectEvent *object, s16 *a1) +static u8 sub_805DDC8(struct ObjectEvent *object, s16 *a1) { if (*a1 < 8 && ++(*a1) < 8) { From adc7a0b65a16f8fcbbadd527980950dec351b9cd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 25 Mar 2020 19:40:34 -0400 Subject: [PATCH 12/16] Document field teleport anim --- asm/overworld.s | 2 +- include/field_fadetransition.h | 4 +- include/field_player_avatar.h | 10 +-- src/field_fadetransition.c | 76 ++++++++--------- src/field_player_avatar.c | 146 +++++++++++++++++++-------------- src/field_screen_effect.c | 4 +- src/option_menu.c | 2 +- src/quest_log.c | 2 +- src/scrcmd.c | 2 +- src/seagallop.c | 2 +- 10 files changed, 137 insertions(+), 113 deletions(-) diff --git a/asm/overworld.s b/asm/overworld.s index 5335cfc21..f840e590a 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -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 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 d6c02d8ab..90e2baaaf 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -20,7 +20,7 @@ u8 GetPlayerAvatarGraphicsIdByStateId(u8); void SetPlayerAvatarStateMask(u8 mask); void AlignFishingAnimationFrames(struct Sprite *sprite); void CreateStopSurfingTask_NoMusicChange(u8 direction); -void sub_805DAE4(u8 direction); +void SavePlayerFacingDirectionForTeleport(u8 direction); void SetPlayerAvatarTransitionFlags(u16 a); bool8 IsPlayerFacingSurfableFishableWater(void); void StartFishing(u8 secondaryId); @@ -29,10 +29,10 @@ u8 PlayerGetZCoord(void); u8 GetPlayerAvatarGraphicsIdByCurrentState(void); void sub_805CB70(void); void SetPlayerInvisibility(bool8); -void sub_805DC04(void); -void sub_805DAB0(void); -bool32 sub_805DAD0(void); -bool32 sub_805DC24(void); +void StartTeleportInPlayerAnim(void); +void StartTeleportWarpOutPlayerAnim(void); +bool32 WaitTeleportWarpOutPlayerAnim(void); +bool32 WaitTeleportInPlayerAnim(void); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerSurfingNorth(void); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index cde5f0e84..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*); @@ -131,7 +131,7 @@ static void sub_807DCB0(bool8 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(); @@ -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 index cced50f4b..4d474db2f 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -29,7 +29,7 @@ #include "constants/moves.h" static EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; -static EWRAM_DATA u8 gUnknown_2036E34 = DIR_NONE; +static EWRAM_DATA u8 sTeleportSavedFacingDirection = DIR_NONE; EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; @@ -121,9 +121,9 @@ 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 sub_805DB04(u8 taskId); -static void sub_805DC38(u8 taskId); -static u8 sub_805DDC8(struct ObjectEvent * object, s16 *timer); +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) { @@ -1982,37 +1982,54 @@ void AlignFishingAnimationFrames(struct Sprite * playerSprite) sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y); } -void sub_805DAB0(void) +#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] + +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(sub_805DB04, 0); - sub_805DB04(taskId); + u8 taskId = CreateTask(Task_TeleportWarpOutPlayerAnim, 0); + Task_TeleportWarpOutPlayerAnim(taskId); } -bool32 sub_805DAD0(void) +bool32 WaitTeleportWarpOutPlayerAnim(void) { - return FuncIsActiveTask(sub_805DB04); + return FuncIsActiveTask(Task_TeleportWarpOutPlayerAnim); } -void sub_805DAE4(u8 direction) +void SavePlayerFacingDirectionForTeleport(u8 direction) { - gUnknown_2036E34 = direction; + sTeleportSavedFacingDirection = direction; } -static u8 sub_805DAF0(void) +static u8 GetTeleportSavedFacingDirection(void) { - if (gUnknown_2036E34 == DIR_NONE) + if (sTeleportSavedFacingDirection == DIR_NONE) return DIR_SOUTH; else - return gUnknown_2036E34; + return sTeleportSavedFacingDirection; } -static void sub_805DB04(u8 taskId) +static void Task_TeleportWarpOutPlayerAnim(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: if (!ObjectEventClearHeldMovementIfFinished(object)) @@ -2020,25 +2037,25 @@ static void sub_805DB04(u8 taskId) return; } - sub_805DAE4(object->facingDirection); - data[1] = 0; - data[2] = 1; - data[3] = (u16)(sprite->pos1.y + sprite->pos2.y) * 16; + 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; - data[0]++; + tState++; case 1: - sub_805DDC8(object, &data[1]); - data[3] -= data[2]; - data[2] += 3; - sprite->pos1.y = data[3] >> 4; + TeleportAnim_RotatePlayer(object, &tRotationTimer); + tYdeflection -= tDeltaY; + tDeltaY += 3; + sprite->pos1.y = tYdeflection >> 4; if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32) { - data[0]++; + tState++; } break; case 2: @@ -2047,73 +2064,71 @@ static void sub_805DB04(u8 taskId) } } -void sub_805DC04(void) +void StartTeleportInPlayerAnim(void) { - u8 taskId = CreateTask(sub_805DC38, 0); - sub_805DC38(taskId); + u8 taskId = CreateTask(Task_TeleportWarpInPlayerAnim, 0); + Task_TeleportWarpInPlayerAnim(taskId); } -bool32 sub_805DC24(void) +bool32 WaitTeleportInPlayerAnim(void) { - return FuncIsActiveTask(sub_805DC38); + return FuncIsActiveTask(Task_TeleportWarpInPlayerAnim); } -static const u8 gUnknown_835B92C[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; - -static void sub_805DC38(u8 taskId) +static void Task_TeleportWarpInPlayerAnim(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - data[5] = sub_805DAF0(); - ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_835B92C[data[5]])); - data[1] = 0; - data[2] = 116; - data[4] = sprite->pos1.y; - data[6] = sprite->oam.priority; - data[7] = sprite->subpriority; - data[3] = -((u16)sprite->pos2.y + 32) * 16; + 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; - data[0]++; + tState++; case 1: - sub_805DDC8(object, &data[1]); - data[3] += data[2]; - data[2] -= 3; - if (data[2] < 4) + TeleportAnim_RotatePlayer(object, &tRotationTimer); + tYdeflection += tDeltaY; + tDeltaY -= 3; + if (tDeltaY < 4) { - data[2] = 4; + tDeltaY = 4; } - sprite->pos1.y = data[3] >> 4; - if (sprite->pos1.y >= data[4]) + sprite->pos1.y = tYdeflection >> 4; + if (sprite->pos1.y >= tYpos) { - sprite->pos1.y = data[4]; + sprite->pos1.y = tYpos; data[8] = 0; - data[0]++; + tState++; } break; case 2: - sub_805DDC8(object, &data[1]); + TeleportAnim_RotatePlayer(object, &tRotationTimer); data[8]++; if (data[8] > 8) { - data[0]++; + tState++; } break; case 3: - if (data[5] == sub_805DDC8(object, &data[1])) + if (tFinalFacingDirection == TeleportAnim_RotatePlayer(object, &tRotationTimer)) { object->fixedPriority = 0; - sprite->oam.priority = data[6]; - sprite->subpriority = data[7]; + sprite->oam.priority = tPriority; + sprite->subpriority = tSubpriority; CameraObjectReset1(); DestroyTask(taskId); } @@ -2121,7 +2136,7 @@ static void sub_805DC38(u8 taskId) } } -static u8 sub_805DDC8(struct ObjectEvent *object, s16 *a1) +static u8 TeleportAnim_RotatePlayer(struct ObjectEvent *object, s16 *a1) { if (*a1 < 8 && ++(*a1) < 8) { @@ -2133,7 +2148,16 @@ static u8 sub_805DDC8(struct ObjectEvent *object, s16 *a1) return object->facingDirection; } - ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_835B92C[object->facingDirection])); + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sTeleportFacingDirectionSequence[object->facingDirection])); *a1 = 0; - return gUnknown_835B92C[object->facingDirection]; + return sTeleportFacingDirectionSequence[object->facingDirection]; } + +#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/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 b2dbb5721..21a05f407 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -600,7 +600,7 @@ bool8 sub_8111000(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); SetQuestLogState(QL_STATE_2); - sub_807DF64(); + FieldCB_UnionRoomWarp(); gUnknown_203AE94 = (struct UnkStruct_203AE94){}; gUnknown_203AE94.unk_0_0 = 2; return 1; 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(); From 9cb08e34750ad591daf69900d9f857cb8a4ddfbe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 25 Mar 2020 20:40:44 -0400 Subject: [PATCH 13/16] Document player avatar fields --- berry_fix/payload/include/global.fieldmap.h | 6 +- include/global.fieldmap.h | 33 +++++------ src/event_object_movement.c | 2 +- src/field_control_avatar.c | 8 +-- src/field_player_avatar.c | 64 +++++++++++---------- src/item_use.c | 2 +- 6 files changed, 59 insertions(+), 56 deletions(-) diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h index d001f9b45..ccc7e19c4 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_FORCED_MVMT_DISABLED (1 << 5) -#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (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/include/global.fieldmap.h b/include/global.fieldmap.h index 38391bf27..1858d3344 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -289,14 +289,14 @@ enum { 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_4 (1 << PLAYER_AVATAR_STATE_UNDERWATER) -#define PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED (1 << PLAYER_AVATAR_STATE_FIELD_MOVE) -#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << PLAYER_AVATAR_STATE_FISHING) -#define PLAYER_AVATAR_FLAG_DASH (1 << 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 { @@ -346,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]; - u16 unk1C; - // TODO: rest of struct + u8 bikeSpeed; + u32 directionHistory; + u32 abStartSelectHistory; + u8 dirTimerHistory[8]; + // For the Rocket mazes + u16 lastSpinTile; }; struct Camera diff --git a/src/event_object_movement.c b/src/event_object_movement.c index c326b2d01..11d15ea98 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2207,7 +2207,7 @@ bool8 ObjectEventIsTrainerAndCloseToPlayer(struct ObjectEvent *objectEvent) s16 minY; s16 maxY; - if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) + if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_WATERING)) { return FALSE; } diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 891af3e90..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 & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED)) + 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 & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED)) + 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 & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && !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 & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { if (sub_810C4EC() == TRUE) { diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 4d474db2f..d308dcaba 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -182,7 +182,7 @@ static void npc_clear_strange_bits(struct ObjectEvent *objEvent) objEvent->inanimate = 0; objEvent->disableAnim = 0; objEvent->facingDirectionLocked = 0; - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_WATERING; } static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys) @@ -197,12 +197,12 @@ static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 held static void PlayerAllowForcedMovementIfMovingSameDirection(void) { if (gPlayerAvatar.runningState == MOVING) - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FIELD_MOVE; } static bool8 sub_805B528(void) { - if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && MetatileBehavior_IsSpinTile(gPlayerAvatar.unk1C)) + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && MetatileBehavior_IsSpinTile(gPlayerAvatar.lastSpinTile)) { gUnknown_2036E30 = &gObjectEvents[gPlayerAvatar.objectEventId]; if (gUnknown_2036E30->heldMovementFinished) @@ -213,10 +213,10 @@ static bool8 sub_805B528(void) } if (MetatileBehavior_IsSpinTile(gUnknown_2036E30->currentMetatileBehavior)) { - gPlayerAvatar.unk1C = gUnknown_2036E30->currentMetatileBehavior; + gPlayerAvatar.lastSpinTile = gUnknown_2036E30->currentMetatileBehavior; } ObjectEventClearHeldMovement(gUnknown_2036E30); - sub_805C2CC(gPlayerAvatar.unk1C); + sub_805C2CC(gPlayerAvatar.lastSpinTile); } return TRUE; } @@ -255,14 +255,14 @@ static bool8 TryDoMetatileBehaviorForcedMovement(void) { int i; u8 behavior; - if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED)) + 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.unk1C = behavior; + gPlayerAvatar.lastSpinTile = behavior; return sForcedMovementFuncs[i].unk4(); } } @@ -278,14 +278,14 @@ static bool8 TryDoMetatileBehaviorForcedMovement(void) static bool8 ForcedMovement_None(void) { - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) + 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_MVMT_IS_FORCED; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FISHING; } return FALSE; } @@ -295,7 +295,7 @@ static u8 DoForcedMovement(u8 direction, MovementAction movementAction) struct PlayerAvatar *playerAvatar = &gPlayerAvatar; u8 collision = CheckForPlayerAvatarCollision(direction); - playerAvatar->flags |= PLAYER_AVATAR_FLAG_MVMT_IS_FORCED; + playerAvatar->flags |= PLAYER_AVATAR_FLAG_FISHING; if (collision) { ForcedMovement_None(); @@ -307,7 +307,7 @@ static u8 DoForcedMovement(u8 direction, MovementAction movementAction) { if (collision == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); - playerAvatar->flags |= PLAYER_AVATAR_FLAG_MVMT_IS_FORCED; + playerAvatar->flags |= PLAYER_AVATAR_FLAG_FISHING; playerAvatar->runningState = MOVING; return 1; } @@ -518,7 +518,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) PlayerRunSlow(direction); else PlayerRun(direction); - gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_WATERING; return; } else @@ -676,25 +676,25 @@ static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collis void SetPlayerAvatarTransitionFlags(bool16 flags) { - gPlayerAvatar.unk1 |= flags; + gPlayerAvatar.transitionFlags |= flags; DoPlayerAvatarTransition(); } static void (*const gUnknown_835B844[])(struct ObjectEvent *) = { - PlayerAvatarTransition_Normal, - PlayerAvatarTransition_Bike, - PlayerAvatarTransition_Bike, - PlayerAvatarTransition_Surfing, - PlayerAvatarTransition_Underwater, - PlayerAvatarTransition_ReturnToField, - PlayerAvatarTransition_Dummy, - PlayerAvatarTransition_Dummy + [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.unk1; + u8 flags = gPlayerAvatar.transitionFlags; if (flags != 0) { @@ -703,7 +703,7 @@ static void DoPlayerAvatarTransition(void) if (flags & 1) gUnknown_835B844[i](&gObjectEvents[gPlayerAvatar.objectEventId]); } - gPlayerAvatar.unk1 = 0; + gPlayerAvatar.transitionFlags = 0; } } @@ -738,7 +738,7 @@ static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEven static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent) { - gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FIELD_MOVE; } void sub_805BEB8(void) @@ -1229,7 +1229,7 @@ void ClearPlayerAvatarInfo(void) void SetPlayerAvatarStateMask(u8 flags) { - gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_MVMT_IS_FORCED | PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED); + gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_WATERING | PLAYER_AVATAR_FLAG_FISHING | PLAYER_AVATAR_FLAG_FIELD_MOVE); gPlayerAvatar.flags |= flags; } @@ -1277,7 +1277,7 @@ void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b) { u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); - gPlayerAvatar.unk1 |= unk | b; + gPlayerAvatar.transitionFlags |= unk | b; DoPlayerAvatarTransition(); } @@ -1310,7 +1310,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.objectEventId = objectEventId; gPlayerAvatar.spriteId = objectEvent->spriteId; gPlayerAvatar.gender = gender; - SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED | PLAYER_AVATAR_FLAG_ON_FOOT); + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FIELD_MOVE | PLAYER_AVATAR_FLAG_ON_FOOT); } void SetPlayerInvisibility(bool8 invisible) @@ -1482,7 +1482,7 @@ static bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEv if (task->data[1] > 1) { gPlayerAvatar.preventStep = FALSE; - gPlayerAvatar.unk1 |= 0x20; + gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_FIELD_MOVE; DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); } } @@ -1990,6 +1990,7 @@ void AlignFishingAnimationFrames(struct Sprite * playerSprite) #define tFinalFacingDirection data[5] #define tPriority data[6] #define tSubpriority data[7] +#define tLandingDelay data[8] static const u8 sTeleportFacingDirectionSequence[] = { [DIR_SOUTH] = DIR_WEST, @@ -2111,14 +2112,14 @@ static void Task_TeleportWarpInPlayerAnim(u8 taskId) if (sprite->pos1.y >= tYpos) { sprite->pos1.y = tYpos; - data[8] = 0; + tLandingDelay = 0; tState++; } break; case 2: TeleportAnim_RotatePlayer(object, &tRotationTimer); - data[8]++; - if (data[8] > 8) + tLandingDelay++; + if (tLandingDelay > 8) { tState++; } @@ -2153,6 +2154,7 @@ static u8 TeleportAnim_RotatePlayer(struct ObjectEvent *object, s16 *a1) return sTeleportFacingDirectionSequence[object->facingDirection]; } +#undef tLandingDelay #undef tSubpriority #undef tPriority #undef tFinalFacingDirection diff --git a/src/item_use.c b/src/item_use.c index ea7005f4e..df3dbaceb 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -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)) { From d69a051df50232dbc0c2d0b595d5eeb0d5fb3133 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 26 Mar 2020 08:31:24 -0400 Subject: [PATCH 14/16] Fix alignment in berry_fix global header --- berry_fix/payload/include/global.fieldmap.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h index ccc7e19c4..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_FIELD_MOVE (1 << 5) -#define PLAYER_AVATAR_FLAG_FISHING (1 << 6) -#define PLAYER_AVATAR_FLAG_WATERING (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 { From b0878acc98761b6ce488289906cd44b334134f95 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 26 Mar 2020 17:17:11 -0400 Subject: [PATCH 15/16] Address review comments --- src/field_player_avatar.c | 6 +++--- src/new_menu_helpers.c | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index b301f4e22..efa7546e0 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -179,9 +179,9 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve static void npc_clear_strange_bits(struct ObjectEvent *objEvent) { - objEvent->inanimate = 0; - objEvent->disableAnim = 0; - objEvent->facingDirectionLocked = 0; + objEvent->inanimate = FALSE; + objEvent->disableAnim = FALSE; + objEvent->facingDirectionLocked = FALSE; gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_WATERING; } diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index d184bae05..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,7 +495,7 @@ void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram) ClearWindowTilemap(windowId); if (copyToVram == TRUE) CopyWindowToVram(windowId, 3); - if (gQuestLogState == 2) + if (gQuestLogState == QL_STATE_2) CommitQuestLogWindow1(); } @@ -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); From 9130579f1454c869e74ea8c953c0c778a4760396 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 26 Mar 2020 17:37:14 -0400 Subject: [PATCH 16/16] Resolve off-by-one error in evobjmv.c --- include/event_object_movement.h | 6 ++--- include/field_player_avatar.h | 1 + src/event_object_movement.c | 48 +++++++++++++++------------------ src/field_player_avatar.c | 6 ++--- src/quest_log_player.c | 6 ++--- 5 files changed, 32 insertions(+), 35 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 34247c3a5..792118c00 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -119,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); @@ -220,6 +220,6 @@ u8 GetAcroWheelieInPlaceDirectionMovementAction(u32 direction); u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction); u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction); u8 sub_80641EC(u32 direction); -u8 sub_8063510(u8 direction); +u8 GetFishingBiteDirectionAnimNum(u8 direction); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index b88952038..73109ae1e 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -13,6 +13,7 @@ u8 GetPlayerMovementDirection(void); u8 PlayerGetCopyableMovement(void); void MovePlayerNotOnBike(u8 direction, u16 heldKeys); +void MovementType_Player(struct Sprite * sprite); void sub_805C270(void); void sub_805C780(void); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 8c029822f..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 MovementType_Player(struct Sprite *); - #define movement_type_def(setup, table) \ static u8 setup##_callback(struct ObjectEvent *, struct Sprite *); \ void setup(struct Sprite *sprite) \ @@ -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, @@ -4917,8 +4915,6 @@ static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Spr sprite->data[1] = 0; } -// Off by one error - u8 GetFaceDirectionAnimNum(u8 direction) { return gFaceDirectionAnimNums[direction]; @@ -4964,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]; @@ -4989,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]; @@ -7539,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; } @@ -7618,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; } @@ -7853,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); } @@ -7949,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) @@ -8019,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_player_avatar.c b/src/field_player_avatar.c index efa7546e0..481e55578 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1785,7 +1785,7 @@ static bool8 Fishing6(struct Task *task) } else { - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_8063510(GetPlayerFacingDirection())); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); } return TRUE; } @@ -1887,7 +1887,7 @@ static bool8 Fishing11(struct Task *task) static bool8 Fishing12(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); + 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; @@ -1898,7 +1898,7 @@ static bool8 Fishing12(struct Task *task) static bool8 Fishing13(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); + 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; diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 9eb0fbeb8..42233999e 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -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,7 +102,7 @@ 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; @@ -114,7 +114,7 @@ static void sub_81505C4(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - StartSpriteAnim(sprite, GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); + StartSpriteAnim(sprite, GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); gTasks[taskId].data[0]++; break; case 3: