summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_player_avatar.s1173
-rw-r--r--asm/overworld.s2
-rw-r--r--data/field_player_avatar.s31
-rw-r--r--include/bike.h2
-rw-r--r--include/event_object_movement.h11
-rw-r--r--include/field_player_avatar.h5
-rw-r--r--include/global.fieldmap.h27
-rw-r--r--src/event_object_movement.c20
-rw-r--r--src/field_player_avatar.c434
-rw-r--r--src/naming_screen.c2
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);