diff options
-rw-r--r-- | asm/field_player_avatar.s | 4636 | ||||
-rw-r--r-- | data/data2.s | 32 | ||||
-rw-r--r-- | include/fieldmap.h | 28 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_player_avatar.c | 1685 |
5 files changed, 1722 insertions, 4661 deletions
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s deleted file mode 100644 index 3d4f8a008..000000000 --- a/asm/field_player_avatar.s +++ /dev/null @@ -1,4636 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80587B4 -sub_80587B4: @ 80587B4 - 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, _080587D0 @ =gMapObjects - adds r0, r2 - ldr r2, _080587D4 @ =sub_80587D8 - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_080587D0: .4byte gMapObjects -_080587D4: .4byte sub_80587D8 - thumb_func_end sub_80587B4 - - thumb_func_start sub_80587D8 -sub_80587D8: @ 80587D8 - movs r0, 0 - bx lr - thumb_func_end sub_80587D8 - - thumb_func_start player_step -player_step: @ 80587DC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r6, r2, 16 - ldr r4, _0805884C @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08058850 @ =gMapObjects - adds r5, r0, r1 - adds r0, r5, 0 - bl sub_8059D60 - ldrb r0, [r4, 0x6] - cmp r0, 0 - bne _08058842 - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_80E5B38 - adds r0, r5, 0 - mov r1, r8 - bl sub_8058854 - lsls r0, 24 - cmp r0, 0 - bne _08058842 - adds r0, r5, 0 - bl npc_clear_strange_bits - bl DoPlayerAvatarTransition - bl TryDoMetatileBehaviorForcedMovment - lsls r0, 24 - cmp r0, 0 - bne _08058842 - mov r0, r8 - adds r1, r7, 0 - adds r2, r6, 0 - bl MovePlayerAvatarUsingKeypadInput - bl PlayerAllowForcedMovementIfMovingSameDirection -_08058842: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805884C: .4byte gPlayerAvatar -_08058850: .4byte gMapObjects - thumb_func_end player_step - - thumb_func_start sub_8058854 -sub_8058854: @ 8058854 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _0805889E - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - bne _0805889E - adds r0, r4, 0 - bl FieldObjectGetSpecialAnim - lsls r0, 24 - movs r1, 0xE7 - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - cmp r0, 0x3 - bhi _0805889A - cmp r5, 0 - beq _0805889A - ldrb r0, [r4, 0x18] - lsrs r0, 4 - cmp r0, r5 - beq _0805889A - adds r0, r4, 0 - bl FieldObjectClearAnim - b _0805889E -_0805889A: - movs r0, 0x1 - b _080588A0 -_0805889E: - movs r0, 0 -_080588A0: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8058854 - - thumb_func_start npc_clear_strange_bits -npc_clear_strange_bits: @ 80588A8 - 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, _080588C8 @ =gPlayerAvatar - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - bx lr - .align 2, 0 -_080588C8: .4byte gPlayerAvatar - thumb_func_end npc_clear_strange_bits - - thumb_func_start MovePlayerAvatarUsingKeypadInput -MovePlayerAvatarUsingKeypadInput: @ 80588CC - 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, _080588F0 @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _080588F4 - adds r0, r3, 0 - adds r1, r4, 0 - bl MovePlayerOnBike - b _080588FC - .align 2, 0 -_080588F0: .4byte gPlayerAvatar -_080588F4: - adds r0, r3, 0 - adds r1, r2, 0 - bl MovePlayerNotOnBike -_080588FC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end MovePlayerAvatarUsingKeypadInput - - thumb_func_start PlayerAllowForcedMovementIfMovingSameDirection -PlayerAllowForcedMovementIfMovingSameDirection: @ 8058904 - push {lr} - ldr r2, _0805891C @ =gPlayerAvatar - ldrb r0, [r2, 0x2] - cmp r0, 0x2 - bne _08058916 - ldrb r1, [r2] - movs r0, 0xDF - ands r0, r1 - strb r0, [r2] -_08058916: - pop {r0} - bx r0 - .align 2, 0 -_0805891C: .4byte gPlayerAvatar - thumb_func_end PlayerAllowForcedMovementIfMovingSameDirection - - thumb_func_start TryDoMetatileBehaviorForcedMovment -TryDoMetatileBehaviorForcedMovment: @ 8058920 - push {r4,lr} - ldr r4, _08058940 @ =gUnknown_0830FBA0 - bl GetForcedMovementByMetatileBehavior - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08058940: .4byte gUnknown_0830FBA0 - thumb_func_end TryDoMetatileBehaviorForcedMovment - - thumb_func_start GetForcedMovementByMetatileBehavior -GetForcedMovementByMetatileBehavior: @ 8058944 - push {r4-r6,lr} - ldr r3, _08058980 @ =gPlayerAvatar - ldrb r1, [r3] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08058996 - ldr r2, _08058984 @ =gMapObjects - ldrb r1, [r3, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r5, [r0, 0x1E] - movs r4, 0 - ldr r6, _08058988 @ =gUnknown_0830FB58 -_08058964: - lsls r0, r4, 2 - adds r0, r6 - ldr r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - beq _0805898C - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r0, 24 - b _08058998 - .align 2, 0 -_08058980: .4byte gPlayerAvatar -_08058984: .4byte gMapObjects -_08058988: .4byte gUnknown_0830FB58 -_0805898C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x11 - bls _08058964 -_08058996: - movs r0, 0 -_08058998: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetForcedMovementByMetatileBehavior - - thumb_func_start ForcedMovement_None -ForcedMovement_None: @ 80589A0 - push {r4,lr} - ldr r4, _080589E4 @ =gPlayerAvatar - ldrb r1, [r4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080589DA - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080589E8 @ =gMapObjects - 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 FieldObjectSetDirection - ldrb r1, [r4] - movs r0, 0xBF - ands r0, r1 - strb r0, [r4] -_080589DA: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080589E4: .4byte gPlayerAvatar -_080589E8: .4byte gMapObjects - thumb_func_end ForcedMovement_None - - thumb_func_start DoForcedMovement -DoForcedMovement: @ 80589EC - 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, _08058A2C @ =gPlayerAvatar - adds r0, r5, 0 - bl CheckForPlayerAvatarCollision - 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 _08058A48 - bl ForcedMovement_None - cmp r4, 0x4 - bhi _08058A30 - movs r0, 0 - b _08058A54 - .align 2, 0 -_08058A2C: .4byte gPlayerAvatar -_08058A30: - cmp r7, 0x6 - bne _08058A3A - adds r0, r5, 0 - bl PlayerJumpLedge -_08058A3A: - ldrb r0, [r6] - mov r1, r10 - orrs r0, r1 - strb r0, [r6] - movs r0, 0x2 - strb r0, [r6, 0x2] - b _08058A52 -_08058A48: - movs r0, 0x2 - strb r0, [r6, 0x2] - adds r0, r5, 0 - bl _call_via_r9 -_08058A52: - movs r0, 0x1 -_08058A54: - 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: @ 8058A64 - push {lr} - adds r1, r0, 0 - ldr r0, _08058A90 @ =gPlayerAvatar - ldrb r2, [r0, 0x5] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - ldr r2, _08058A94 @ =gMapObjects - 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 -_08058A90: .4byte gPlayerAvatar -_08058A94: .4byte gMapObjects - thumb_func_end DoForcedMovementInCurrentDirection - - thumb_func_start ForcedMovement_Slip -ForcedMovement_Slip: @ 8058A98 - push {lr} - ldr r0, _08058AA8 @ =sub_80593C4 - bl DoForcedMovementInCurrentDirection - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058AA8: .4byte sub_80593C4 - thumb_func_end ForcedMovement_Slip - - thumb_func_start sub_8058AAC -sub_8058AAC: @ 8058AAC - push {lr} - ldr r1, _08058AC0 @ =PlayerGoSpeed0 - movs r0, 0x1 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058AC0: .4byte PlayerGoSpeed0 - thumb_func_end sub_8058AAC - - thumb_func_start sub_8058AC4 -sub_8058AC4: @ 8058AC4 - push {lr} - ldr r1, _08058AD8 @ =PlayerGoSpeed0 - movs r0, 0x2 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058AD8: .4byte PlayerGoSpeed0 - thumb_func_end sub_8058AC4 - - thumb_func_start sub_8058ADC -sub_8058ADC: @ 8058ADC - push {lr} - ldr r1, _08058AF0 @ =PlayerGoSpeed0 - movs r0, 0x3 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058AF0: .4byte PlayerGoSpeed0 - thumb_func_end sub_8058ADC - - thumb_func_start sub_8058AF4 -sub_8058AF4: @ 8058AF4 - push {lr} - ldr r1, _08058B08 @ =PlayerGoSpeed0 - movs r0, 0x4 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058B08: .4byte PlayerGoSpeed0 - thumb_func_end sub_8058AF4 - - thumb_func_start sub_8058B0C -sub_8058B0C: @ 8058B0C - push {lr} - ldr r1, _08058B20 @ =npc_use_some_d2s - movs r0, 0x1 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058B20: .4byte npc_use_some_d2s - thumb_func_end sub_8058B0C - - thumb_func_start sub_8058B24 -sub_8058B24: @ 8058B24 - push {lr} - ldr r1, _08058B38 @ =npc_use_some_d2s - movs r0, 0x2 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058B38: .4byte npc_use_some_d2s - thumb_func_end sub_8058B24 - - thumb_func_start sub_8058B3C -sub_8058B3C: @ 8058B3C - push {lr} - ldr r1, _08058B50 @ =npc_use_some_d2s - movs r0, 0x3 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058B50: .4byte npc_use_some_d2s - thumb_func_end sub_8058B3C - - thumb_func_start sub_8058B54 -sub_8058B54: @ 8058B54 - push {lr} - ldr r1, _08058B68 @ =npc_use_some_d2s - movs r0, 0x4 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058B68: .4byte npc_use_some_d2s - thumb_func_end sub_8058B54 - - thumb_func_start ForcedMovement_Slide -ForcedMovement_Slide: @ 8058B6C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08058B9C @ =gPlayerAvatar - ldrb r3, [r2, 0x5] - lsls r2, r3, 3 - adds r2, r3 - lsls r2, 2 - ldr r3, _08058BA0 @ =gMapObjects - 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 -_08058B9C: .4byte gPlayerAvatar -_08058BA0: .4byte gMapObjects - thumb_func_end ForcedMovement_Slide - - thumb_func_start ForcedMovement_SlideSouth -ForcedMovement_SlideSouth: @ 8058BA4 - push {lr} - ldr r1, _08058BB8 @ =sub_80593C4 - movs r0, 0x1 - bl ForcedMovement_Slide - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058BB8: .4byte sub_80593C4 - thumb_func_end ForcedMovement_SlideSouth - - thumb_func_start ForcedMovement_SlideNorth -ForcedMovement_SlideNorth: @ 8058BBC - push {lr} - ldr r1, _08058BD0 @ =sub_80593C4 - movs r0, 0x2 - bl ForcedMovement_Slide - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058BD0: .4byte sub_80593C4 - thumb_func_end ForcedMovement_SlideNorth - - thumb_func_start ForcedMovement_SlideWest -ForcedMovement_SlideWest: @ 8058BD4 - push {lr} - ldr r1, _08058BE8 @ =sub_80593C4 - movs r0, 0x3 - bl ForcedMovement_Slide - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058BE8: .4byte sub_80593C4 - thumb_func_end ForcedMovement_SlideWest - - thumb_func_start ForcedMovement_SlideEast -ForcedMovement_SlideEast: @ 8058BEC - push {lr} - ldr r1, _08058C00 @ =sub_80593C4 - movs r0, 0x4 - bl ForcedMovement_Slide - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08058C00: .4byte sub_80593C4 - thumb_func_end ForcedMovement_SlideEast - - thumb_func_start sub_8058C04 -sub_8058C04: @ 8058C04 - push {lr} - bl sub_8059F94 - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8058C04 - - thumb_func_start sub_8058C10 -sub_8058C10: @ 8058C10 - push {lr} - bl sub_805A06C - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8058C10 - - thumb_func_start ForcedMovement_MuddySlope -ForcedMovement_MuddySlope: @ 8058C1C - push {r4,lr} - ldr r0, _08058C60 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08058C64 @ =gMapObjects - adds r4, r0, r1 - ldrb r1, [r4, 0x18] - movs r0, 0xF0 - ands r0, r1 - cmp r0, 0x20 - bne _08058C42 - bl sub_80E6034 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bgt _08058C6C -_08058C42: - movs r0, 0 - bl sub_80E6010 - ldrb r0, [r4, 0x1] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r1, _08058C68 @ =sub_80593C4 - movs r0, 0x1 - bl DoForcedMovement - lsls r0, 24 - lsrs r0, 24 - b _08058C6E - .align 2, 0 -_08058C60: .4byte gPlayerAvatar -_08058C64: .4byte gMapObjects -_08058C68: .4byte sub_80593C4 -_08058C6C: - movs r0, 0 -_08058C6E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end ForcedMovement_MuddySlope - - thumb_func_start MovePlayerNotOnBike -MovePlayerNotOnBike: @ 8058C74 - 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, _08058CA0 @ =gUnknown_0830FBEC - 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 -_08058CA0: .4byte gUnknown_0830FBEC - thumb_func_end MovePlayerNotOnBike - - thumb_func_start CheckMovementInputNotOnBike -CheckMovementInputNotOnBike: @ 8058CA4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08058CBC - ldr r0, _08058CB8 @ =gPlayerAvatar - strb r4, [r0, 0x2] - movs r0, 0 - b _08058CDE - .align 2, 0 -_08058CB8: .4byte gPlayerAvatar -_08058CBC: - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - beq _08058CD8 - ldr r1, _08058CD4 @ =gPlayerAvatar - ldrb r0, [r1, 0x2] - cmp r0, 0x2 - beq _08058CD8 - movs r0, 0x1 - b _08058CDC - .align 2, 0 -_08058CD4: .4byte gPlayerAvatar -_08058CD8: - ldr r1, _08058CE4 @ =gPlayerAvatar - movs r0, 0x2 -_08058CDC: - strb r0, [r1, 0x2] -_08058CDE: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08058CE4: .4byte gPlayerAvatar - thumb_func_end CheckMovementInputNotOnBike - - thumb_func_start PlayerNotOnBikeNotMoving -PlayerNotOnBikeNotMoving: @ 8058CE8 - push {lr} - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl PlayerFaceDirection - pop {r0} - bx r0 - thumb_func_end PlayerNotOnBikeNotMoving - - thumb_func_start PlayerNotOnBikeTurningInPlace -PlayerNotOnBikeTurningInPlace: @ 8058CFC - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl PlayerTurnInPlace - pop {r0} - bx r0 - thumb_func_end PlayerNotOnBikeTurningInPlace - - thumb_func_start sub_8058D0C -sub_8058D0C: @ 8058D0C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - adds r0, r5, 0 - bl CheckForPlayerAvatarCollision - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0 - beq _08058D44 - cmp r0, 0x6 - bne _08058D32 - adds r0, r5, 0 - bl PlayerJumpLedge - b _08058DAE -_08058D32: - subs r0, r1, 0x5 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08058DAE - adds r0, r5, 0 - bl PlayerNotOnBikeCollide - b _08058DAE -_08058D44: - ldr r6, _08058D58 @ =gPlayerAvatar - ldrb r1, [r6] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08058D5C - adds r0, r5, 0 - bl sub_80593C4 - b _08058DAE - .align 2, 0 -_08058D58: .4byte gPlayerAvatar -_08058D5C: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08058DA8 - movs r0, 0x2 - ands r4, r0 - cmp r4, 0 - beq _08058DA8 - movs r0, 0x86 - lsls r0, 4 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _08058DA8 - ldr r2, _08058DA4 @ =gMapObjects - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1E] - bl sub_80E5DEC - lsls r0, 24 - cmp r0, 0 - bne _08058DA8 - adds r0, r5, 0 - bl sub_805940C - ldrb r1, [r6] - movs r0, 0x80 - orrs r0, r1 - strb r0, [r6] - b _08058DAE - .align 2, 0 -_08058DA4: .4byte gMapObjects -_08058DA8: - adds r0, r5, 0 - bl PlayerGoSpeed0 -_08058DAE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8058D0C - - thumb_func_start CheckForPlayerAvatarCollision -CheckForPlayerAvatarCollision: @ 8058DB4 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _08058E18 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08058E1C @ =gMapObjects - adds r4, r0 - ldrh r1, [r4, 0x10] - add r0, sp, 0x4 - strh r1, [r0] - ldrh r0, [r4, 0x12] - mov r5, sp - adds r5, 0x6 - strh r0, [r5] - adds r0, r6, 0 - add r1, sp, 0x4 - adds r2, r5, 0 - bl MoveCoords - add r0, sp, 0x4 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r5, 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, [r5, r3] - str r0, [sp] - adds r0, r4, 0 - adds r3, r6, 0 - bl CheckForFieldObjectCollision - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08058E18: .4byte gPlayerAvatar -_08058E1C: .4byte gMapObjects - thumb_func_end CheckForPlayerAvatarCollision - - thumb_func_start CheckForFieldObjectCollision -CheckForFieldObjectCollision: @ 8058E20 - 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 npc_block_way - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - strb r0, [r1] - cmp r0, 0x3 - bne _08058E70 - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_8058EF0 - lsls r0, 24 - cmp r0, 0 - beq _08058E70 - movs r0, 0x5 - b _08058EDE -_08058E70: - 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 ShouldJumpLedge - lsls r0, 24 - cmp r0, 0 - beq _08058E94 - movs r0, 0x2B - bl sav12_xor_increment - movs r0, 0x6 - b _08058EDE -_08058E94: - mov r0, sp - ldrb r0, [r0] - cmp r0, 0x4 - bne _08058EB0 - mov r0, r8 - adds r1, r7, 0 - adds r2, r6, 0 - bl sub_8058F6C - lsls r0, 24 - cmp r0, 0 - beq _08058EB0 - movs r0, 0x7 - b _08058EDE -_08058EB0: - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - bne _08058EDA - asrs r5, 16 - asrs r4, 16 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl CheckForRotatingGatePuzzleCollision - cmp r0, 0 - beq _08058ECE - movs r0, 0x8 - b _08058EDE -_08058ECE: - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, r10 - mov r3, sp - bl check_acro_bike_metatile -_08058EDA: - mov r0, sp - ldrb r0, [r0] -_08058EDE: - 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 CheckForFieldObjectCollision - - thumb_func_start sub_8058EF0 -sub_8058EF0: @ 8058EF0 - 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, _08058F3C @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08058F40 - 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 _08058F40 - lsrs r0, r5, 16 - lsrs r1, r4, 16 - movs r2, 0x3 - bl GetFieldObjectIdByXYZ - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x10 - bne _08058F40 - adds r0, r6, 0 - bl sub_805A20C - movs r0, 0x1 - b _08058F42 - .align 2, 0 -_08058F3C: .4byte gPlayerAvatar -_08058F40: - movs r0, 0 -_08058F42: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8058EF0 - - thumb_func_start ShouldJumpLedge -ShouldJumpLedge: @ 8058F48 - 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 _08058F64 - movs r0, 0 - b _08058F66 -_08058F64: - movs r0, 0x1 -_08058F66: - pop {r1} - bx r1 - thumb_func_end ShouldJumpLedge - - thumb_func_start sub_8058F6C -sub_8058F6C: @ 8058F6C - 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, _08059004 @ =0x00000829 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0805900C - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r5, r2] - bl GetFieldObjectIdByXY - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x10 - beq _0805900C - ldr r0, _08059008 @ =gMapObjects - lsls r1, r6, 3 - adds r1, r6 - lsls r1, 2 - adds r4, r1, r0 - ldrb r0, [r4, 0x5] - cmp r0, 0x57 - bne _0805900C - 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 r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0 - ldrsh r2, [r5, r0] - adds r0, r4, 0 - adds r3, r7, 0 - bl npc_block_way - lsls r0, 24 - cmp r0, 0 - bne _0805900C - 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 sub_8056F08 - lsls r0, 24 - cmp r0, 0 - bne _0805900C - adds r0, r6, 0 - adds r1, r7, 0 - bl task_add_bump_boulder - movs r0, 0x1 - b _0805900E - .align 2, 0 -_08059004: .4byte 0x00000829 -_08059008: .4byte gMapObjects -_0805900C: - movs r0, 0 -_0805900E: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8058F6C - - thumb_func_start check_acro_bike_metatile -check_acro_bike_metatile: @ 8059018 - push {r4-r7,lr} - adds r6, r3, 0 - lsls r2, 24 - lsrs r5, r2, 24 - movs r4, 0 - ldr r7, _08059040 @ =gUnknown_0830FBF8 -_08059024: - 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 _08059048 - ldr r0, _08059044 @ =gUnknown_0830FC0C - adds r0, r4, r0 - ldrb r0, [r0] - strb r0, [r6] - b _08059052 - .align 2, 0 -_08059040: .4byte gUnknown_0830FBF8 -_08059044: .4byte gUnknown_0830FC0C -_08059048: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - bls _08059024 -_08059052: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end check_acro_bike_metatile - - thumb_func_start SetPlayerAvatarTransitionFlags -SetPlayerAvatarTransitionFlags: @ 8059058 - push {lr} - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08059070 @ =gPlayerAvatar - ldrb r1, [r2, 0x1] - orrs r0, r1 - strb r0, [r2, 0x1] - bl DoPlayerAvatarTransition - pop {r0} - bx r0 - .align 2, 0 -_08059070: .4byte gPlayerAvatar - thumb_func_end SetPlayerAvatarTransitionFlags - - thumb_func_start DoPlayerAvatarTransition -DoPlayerAvatarTransition: @ 8059074 - push {r4,r5,lr} - ldr r0, _080590BC @ =gPlayerAvatar - ldrb r4, [r0, 0x1] - cmp r4, 0 - beq _080590B4 - movs r5, 0 -_08059080: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080590A2 - ldr r0, _080590C0 @ =gUnknown_0830FC14 - lsls r2, r5, 2 - adds r2, r0 - ldr r0, _080590BC @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080590C4 @ =gMapObjects - adds r0, r1 - ldr r1, [r2] - bl _call_via_r1 -_080590A2: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - lsrs r4, 1 - cmp r5, 0x7 - bls _08059080 - ldr r1, _080590BC @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x1] -_080590B4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080590BC: .4byte gPlayerAvatar -_080590C0: .4byte gUnknown_0830FC14 -_080590C4: .4byte gMapObjects - thumb_func_end DoPlayerAvatarTransition - - thumb_func_start nullsub_49 -nullsub_49: @ 80590C8 - bx lr - thumb_func_end nullsub_49 - - thumb_func_start PlayerAvatarTransition_Normal -PlayerAvatarTransition_Normal: @ 80590CC - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - movs r0, 0x1 - bl SetPlayerAvatarStateMask - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerAvatarTransition_Normal - - thumb_func_start PlayerAvatarTransition_MachBike -PlayerAvatarTransition_MachBike: @ 80590F8 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - movs r0, 0x2 - bl SetPlayerAvatarStateMask - movs r0, 0 - movs r1, 0 - bl sub_80E5FCC - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerAvatarTransition_MachBike - - thumb_func_start PlayerAvatarTransition_AcroBike -PlayerAvatarTransition_AcroBike: @ 805912C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - movs r0, 0x4 - bl SetPlayerAvatarStateMask - movs r0, 0 - movs r1, 0 - bl sub_80E5FCC - bl sub_80E6084 - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerAvatarTransition_AcroBike - - thumb_func_start PlayerAvatarTransition_Surfing -PlayerAvatarTransition_Surfing: @ 8059164 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x3 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - movs r0, 0x8 - bl SetPlayerAvatarStateMask - ldr r1, _080591B8 @ =gUnknown_0202FF84 - movs r2, 0x10 - ldrsh r0, [r4, r2] - str r0, [r1] - movs r2, 0x12 - ldrsh r0, [r4, r2] - str r0, [r1, 0x4] - ldr r0, _080591BC @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - str r0, [r1, 0x8] - movs r0, 0x8 - bl FieldEffectStart - lsls r0, 24 - lsrs r0, 24 - strb r0, [r4, 0x1A] - movs r1, 0x1 - bl sub_8127ED0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080591B8: .4byte gUnknown_0202FF84 -_080591BC: .4byte gPlayerAvatar - thumb_func_end PlayerAvatarTransition_Surfing - - thumb_func_start PlayerAvatarTransition_Underwater -PlayerAvatarTransition_Underwater: @ 80591C0 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x4 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - movs r0, 0x10 - bl SetPlayerAvatarStateMask - ldrb r0, [r4, 0x4] - bl sub_8128124 - strb r0, [r4, 0x1A] - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerAvatarTransition_Underwater - - thumb_func_start sub_80591F4 -sub_80591F4: @ 80591F4 - ldr r2, _08059200 @ =gPlayerAvatar - ldrb r1, [r2] - movs r0, 0x20 - orrs r0, r1 - strb r0, [r2] - bx lr - .align 2, 0 -_08059200: .4byte gPlayerAvatar - thumb_func_end sub_80591F4 - - thumb_func_start sub_8059204 -sub_8059204: @ 8059204 - push {r4,lr} - ldr r4, _08059230 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r4, 0x3] - bl PlayerIsAnimActive - lsls r0, 24 - cmp r0, 0 - beq _08059242 - bl PlayerCheckIfAnimFinishedOrInactive - lsls r0, 24 - cmp r0, 0 - bne _08059234 - bl player_is_anim_in_certain_ranges - lsls r0, 24 - cmp r0, 0 - bne _08059242 - movs r0, 0x1 - b _08059240 - .align 2, 0 -_08059230: .4byte gPlayerAvatar -_08059234: - bl sub_80592A4 - lsls r0, 24 - cmp r0, 0 - bne _08059242 - movs r0, 0x2 -_08059240: - strb r0, [r4, 0x3] -_08059242: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8059204 - - thumb_func_start player_is_anim_in_certain_ranges -player_is_anim_in_certain_ranges: @ 8059248 - push {lr} - ldr r2, _08059294 @ =gMapObjects - ldr r0, _08059298 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x1C] - cmp r1, 0x3 - bls _0805928E - adds r0, r1, 0 - subs r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bls _0805928E - adds r0, r1, 0 - subs r0, 0x19 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xF - bls _0805928E - adds r0, r1, 0 - subs r0, 0x62 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xB - bls _0805928E - adds r0, r1, 0 - subs r0, 0x7A - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _0805929C -_0805928E: - movs r0, 0x1 - b _0805929E - .align 2, 0 -_08059294: .4byte gMapObjects -_08059298: .4byte gPlayerAvatar -_0805929C: - movs r0, 0 -_0805929E: - pop {r1} - bx r1 - thumb_func_end player_is_anim_in_certain_ranges - - thumb_func_start sub_80592A4 -sub_80592A4: @ 80592A4 - push {lr} - bl player_is_anim_in_certain_ranges - lsls r0, 24 - cmp r0, 0 - beq _080592C0 - ldr r0, _080592BC @ =gPlayerAvatar - ldrb r0, [r0, 0x2] - cmp r0, 0x1 - beq _080592C0 - movs r0, 0x1 - b _080592C2 - .align 2, 0 -_080592BC: .4byte gPlayerAvatar -_080592C0: - movs r0, 0 -_080592C2: - pop {r1} - bx r1 - thumb_func_end sub_80592A4 - - thumb_func_start PlayerIsAnimActive -PlayerIsAnimActive: @ 80592C8 - push {lr} - ldr r0, _080592E4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080592E8 @ =gMapObjects - adds r0, r1 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080592E4: .4byte gPlayerAvatar -_080592E8: .4byte gMapObjects - thumb_func_end PlayerIsAnimActive - - thumb_func_start PlayerCheckIfAnimFinishedOrInactive -PlayerCheckIfAnimFinishedOrInactive: @ 80592EC - push {lr} - ldr r0, _08059308 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805930C @ =gMapObjects - adds r0, r1 - bl FieldObjectCheckIfSpecialAnimFinishedOrInactive - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08059308: .4byte gPlayerAvatar -_0805930C: .4byte gMapObjects - thumb_func_end PlayerCheckIfAnimFinishedOrInactive - - thumb_func_start player_set_x22 -player_set_x22: @ 8059310 - ldr r3, _08059324 @ =gMapObjects - ldr r1, _08059328 @ =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 -_08059324: .4byte gMapObjects -_08059328: .4byte gPlayerAvatar - thumb_func_end player_set_x22 - - thumb_func_start player_get_x22 -player_get_x22: @ 805932C - ldr r2, _08059340 @ =gMapObjects - ldr r0, _08059344 @ =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 -_08059340: .4byte gMapObjects -_08059344: .4byte gPlayerAvatar - thumb_func_end player_get_x22 - - thumb_func_start sub_8059348 -sub_8059348: @ 8059348 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _08059368 @ =gPlayerAvatar - ldrb r2, [r0, 0x5] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - ldr r2, _0805936C @ =gMapObjects - adds r0, r2 - bl FieldObjectForceSetSpecialAnim - pop {r0} - bx r0 - .align 2, 0 -_08059368: .4byte gPlayerAvatar -_0805936C: .4byte gMapObjects - thumb_func_end sub_8059348 - - thumb_func_start player_npc_set_state_and_x22_etc -player_npc_set_state_and_x22_etc: @ 8059370 - 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 _0805939E - adds r0, r4, 0 - bl player_set_x22 - ldr r0, _080593A4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080593A8 @ =gMapObjects - adds r0, r1 - adds r1, r5, 0 - bl FieldObjectSetSpecialAnim -_0805939E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080593A4: .4byte gPlayerAvatar -_080593A8: .4byte gMapObjects - thumb_func_end player_npc_set_state_and_x22_etc - - thumb_func_start PlayerGoSpeed0 -PlayerGoSpeed0: @ 80593AC - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetGoSpeed0AnimId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end PlayerGoSpeed0 - - thumb_func_start sub_80593C4 -sub_80593C4: @ 80593C4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8060744 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_80593C4 - - thumb_func_start npc_use_some_d2s -npc_use_some_d2s: @ 80593DC - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl d2s_08064034 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end npc_use_some_d2s - - thumb_func_start sub_80593F4 -sub_80593F4: @ 80593F4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_806079C - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_80593F4 - - thumb_func_start sub_805940C -sub_805940C: @ 805940C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80607F4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_805940C - - thumb_func_start PlayerOnBikeCollide -PlayerOnBikeCollide: @ 8059424 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl PlayCollisionSoundIfNotFacingWarp - adds r0, r4, 0 - bl GetStepInPlaceDelay16AnimId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerOnBikeCollide - - thumb_func_start PlayerNotOnBikeCollide -PlayerNotOnBikeCollide: @ 8059448 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl PlayCollisionSoundIfNotFacingWarp - adds r0, r4, 0 - bl GetStepInPlaceDelay32AnimId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerNotOnBikeCollide - - thumb_func_start PlayerFaceDirection -PlayerFaceDirection: @ 805946C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetFaceDirectionAnimId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end PlayerFaceDirection - - thumb_func_start PlayerTurnInPlace -PlayerTurnInPlace: @ 8059484 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetStepInPlaceDelay8AnimId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end PlayerTurnInPlace - - thumb_func_start PlayerJumpLedge -PlayerJumpLedge: @ 805949C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xA - bl PlaySE - adds r0, r4, 0 - bl GetJumpLedgeAnimId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x8 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerJumpLedge - - thumb_func_start sub_80594C0 -sub_80594C0: @ 80594C0 - push {r4,lr} - ldr r4, _080594FC @ =gPlayerAvatar - ldrb r0, [r4, 0x3] - cmp r0, 0x2 - beq _080594CE - cmp r0, 0 - bne _080594F6 -_080594CE: - bl player_should_look_direction_be_enforced_upon_movement - lsls r0, 24 - cmp r0, 0 - beq _080594F6 - ldr r2, _08059500 @ =gMapObjects - 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 GetFaceDirectionAnimId - lsls r0, 24 - lsrs r0, 24 - bl sub_8059348 -_080594F6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080594FC: .4byte gPlayerAvatar -_08059500: .4byte gMapObjects - thumb_func_end sub_80594C0 - - thumb_func_start sub_8059504 -sub_8059504: @ 8059504 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80609D8 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_8059504 - - thumb_func_start sub_805951C -sub_805951C: @ 805951C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8060A04 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_805951C - - thumb_func_start sub_8059534 -sub_8059534: @ 8059534 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8060A30 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_8059534 - - thumb_func_start sub_805954C -sub_805954C: @ 805954C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x22 - bl PlaySE - adds r0, r4, 0 - bl sub_8060A5C - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_805954C - - thumb_func_start sub_8059570 -sub_8059570: @ 8059570 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x22 - bl PlaySE - adds r0, r4, 0 - bl sub_8060A88 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8059570 - - thumb_func_start sub_8059594 -sub_8059594: @ 8059594 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x22 - bl PlaySE - adds r0, r4, 0 - bl sub_8060AB4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x8 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8059594 - - thumb_func_start sub_80595B8 -sub_80595B8: @ 80595B8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x22 - bl PlaySE - adds r0, r4, 0 - bl sub_8060878 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80595B8 - - thumb_func_start sub_80595DC -sub_80595DC: @ 80595DC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x7 - bl PlaySE - adds r0, r4, 0 - bl sub_8060AE0 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80595DC - - thumb_func_start sub_8059600 -sub_8059600: @ 8059600 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8060B0C - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_8059600 - - thumb_func_start sub_8059618 -sub_8059618: @ 8059618 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8060B38 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_8059618 - - thumb_func_start sub_8059630 -sub_8059630: @ 8059630 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8060B64 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc - pop {r0} - bx r0 - thumb_func_end sub_8059630 - - thumb_func_start PlayCollisionSoundIfNotFacingWarp -PlayCollisionSoundIfNotFacingWarp: @ 8059648 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _080596B8 @ =gMapObjects - ldr r0, _080596BC @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1E] - ldr r2, _080596C0 @ =gUnknown_0830FC34 - subs r1, r4, 0x1 - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080596B0 - cmp r4, 0x2 - bne _080596AA - 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 r0, 24 - bl is_tile_x69_2_warp_door - lsls r0, 24 - cmp r0, 0 - bne _080596B0 -_080596AA: - movs r0, 0x7 - bl PlaySE -_080596B0: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080596B8: .4byte gMapObjects -_080596BC: .4byte gPlayerAvatar -_080596C0: .4byte gUnknown_0830FC34 - thumb_func_end PlayCollisionSoundIfNotFacingWarp - - thumb_func_start GetXYCoordsOneStepInFrontOfPlayer -GetXYCoordsOneStepInFrontOfPlayer: @ 80596C4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r3, _08059700 @ =gMapObjects - ldr r2, _08059704 @ =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 player_get_direction_lower_nybble - 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 -_08059700: .4byte gMapObjects -_08059704: .4byte gPlayerAvatar - thumb_func_end GetXYCoordsOneStepInFrontOfPlayer - - thumb_func_start PlayerGetDestCoords -PlayerGetDestCoords: @ 8059708 - push {r4,r5,lr} - ldr r5, _08059730 @ =gMapObjects - ldr r4, _08059734 @ =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 -_08059730: .4byte gMapObjects -_08059734: .4byte gPlayerAvatar - thumb_func_end PlayerGetDestCoords - - thumb_func_start player_get_direction_lower_nybble -player_get_direction_lower_nybble: @ 8059738 - ldr r2, _08059750 @ =gMapObjects - ldr r0, _08059754 @ =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 -_08059750: .4byte gMapObjects -_08059754: .4byte gPlayerAvatar - thumb_func_end player_get_direction_lower_nybble - - thumb_func_start player_get_direction_upper_nybble -player_get_direction_upper_nybble: @ 8059758 - ldr r2, _0805976C @ =gMapObjects - ldr r0, _08059770 @ =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 -_0805976C: .4byte gMapObjects -_08059770: .4byte gPlayerAvatar - thumb_func_end player_get_direction_upper_nybble - - thumb_func_start PlayerGetZCoord -PlayerGetZCoord: @ 8059774 - ldr r2, _08059788 @ =gMapObjects - ldr r0, _0805978C @ =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 -_08059788: .4byte gMapObjects -_0805978C: .4byte gPlayerAvatar - thumb_func_end PlayerGetZCoord - - thumb_func_start unref_sub_8059790 -unref_sub_8059790: @ 8059790 - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _080597B8 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080597BC @ =gMapObjects - adds r0, r1 - lsls r3, 16 - asrs r3, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r3, 0 - bl sub_805C058 - pop {r0} - bx r0 - .align 2, 0 -_080597B8: .4byte gPlayerAvatar -_080597BC: .4byte gMapObjects - thumb_func_end unref_sub_8059790 - - thumb_func_start TestPlayerAvatarFlags -TestPlayerAvatarFlags: @ 80597C0 - ldr r1, _080597CC @ =gPlayerAvatar - ldrb r1, [r1] - ands r1, r0 - adds r0, r1, 0 - bx lr - .align 2, 0 -_080597CC: .4byte gPlayerAvatar - thumb_func_end TestPlayerAvatarFlags - - thumb_func_start sub_80597D0 -sub_80597D0: @ 80597D0 - ldr r0, _080597D8 @ =gPlayerAvatar - ldrb r0, [r0] - bx lr - .align 2, 0 -_080597D8: .4byte gPlayerAvatar - thumb_func_end sub_80597D0 - - thumb_func_start GetPlayerAvatarObjectId -GetPlayerAvatarObjectId: @ 80597DC - ldr r0, _080597E4 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - bx lr - .align 2, 0 -_080597E4: .4byte gPlayerAvatar - thumb_func_end GetPlayerAvatarObjectId - - thumb_func_start sub_80597E8 -sub_80597E8: @ 80597E8 - push {lr} - bl ForcedMovement_None - pop {r0} - bx r0 - thumb_func_end sub_80597E8 - - thumb_func_start sub_80597F4 -sub_80597F4: @ 80597F4 - push {r4,lr} - ldr r0, _08059834 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059838 @ =gMapObjects - 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 FieldObjectSetDirection - movs r0, 0x6 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0805982C - bl sub_80E6084 - movs r0, 0 - bl sub_80E6010 -_0805982C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08059834: .4byte gPlayerAvatar -_08059838: .4byte gMapObjects - thumb_func_end sub_80597F4 - - thumb_func_start sub_805983C -sub_805983C: @ 805983C - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08059850 @ =gUnknown_0830FC44 - lsrs r0, 23 - adds r1, r0 - adds r1, r2 - ldrb r0, [r1] - bx lr - .align 2, 0 -_08059850: .4byte gUnknown_0830FC44 - thumb_func_end sub_805983C - - thumb_func_start GetPlayerAvatarGraphicsIdByStateIdAndGender -GetPlayerAvatarGraphicsIdByStateIdAndGender: @ 8059854 - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08059868 @ =gUnknown_0830FC54 - lsrs r0, 23 - adds r1, r0 - adds r1, r2 - ldrb r0, [r1] - bx lr - .align 2, 0 -_08059868: .4byte gUnknown_0830FC54 - thumb_func_end GetPlayerAvatarGraphicsIdByStateIdAndGender - - thumb_func_start GetPlayerAvatarGraphicsIdByStateId -GetPlayerAvatarGraphicsIdByStateId: @ 805986C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08059884 @ =gPlayerAvatar - ldrb r1, [r1, 0x7] - bl GetPlayerAvatarGraphicsIdByStateIdAndGender - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08059884: .4byte gPlayerAvatar - thumb_func_end GetPlayerAvatarGraphicsIdByStateId - - thumb_func_start unref_sub_8059888 -unref_sub_8059888: @ 8059888 - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0x70 - beq _080598AA - cmp r0, 0x70 - bgt _080598A2 - cmp r0, 0x6D - bgt _080598AE - cmp r0, 0x69 - blt _080598AE - b _080598AA -_080598A2: - cmp r1, 0x8A - beq _080598AA - cmp r1, 0xC0 - bne _080598AE -_080598AA: - movs r0, 0x1 - b _080598B0 -_080598AE: - movs r0, 0 -_080598B0: - pop {r1} - bx r1 - thumb_func_end unref_sub_8059888 - - thumb_func_start GetPlayerAvatarGenderByGraphicsId -GetPlayerAvatarGenderByGraphicsId: @ 80598B4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0x70 - beq _080598D6 - cmp r0, 0x70 - bgt _080598CE - cmp r0, 0x5D - bgt _080598DA - cmp r0, 0x59 - blt _080598DA - b _080598D6 -_080598CE: - cmp r1, 0x8A - beq _080598D6 - cmp r1, 0xC0 - bne _080598DA -_080598D6: - movs r0, 0x1 - b _080598DC -_080598DA: - movs r0, 0 -_080598DC: - pop {r1} - bx r1 - thumb_func_end GetPlayerAvatarGenderByGraphicsId - - thumb_func_start PartyHasMonWithSurf -PartyHasMonWithSurf: @ 80598E0 - push {r4,r5,lr} - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - bne _08059924 - movs r5, 0 - b _0805990A -_080598F2: - adds r0, r4, 0 - movs r1, 0x39 - bl pokemon_has_move - lsls r0, 24 - cmp r0, 0 - beq _08059904 - movs r0, 0x1 - b _08059926 -_08059904: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0805990A: - cmp r5, 0x5 - bhi _08059924 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0805992C @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - bne _080598F2 -_08059924: - movs r0, 0 -_08059926: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805992C: .4byte gPlayerParty - thumb_func_end PartyHasMonWithSurf - - thumb_func_start IsPlayerSurfingNorth -IsPlayerSurfingNorth: @ 8059930 - push {lr} - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0805994E - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0805994E - movs r0, 0x1 - b _08059950 -_0805994E: - movs r0, 0 -_08059950: - pop {r1} - bx r1 - thumb_func_end IsPlayerSurfingNorth - - thumb_func_start IsPlayerFacingSurfableFishableWater -IsPlayerFacingSurfableFishableWater: @ 8059954 - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _080599CC @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _080599D0 @ =gMapObjects - 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 npc_block_way - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _080599D4 - bl PlayerGetZCoord - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _080599D4 - 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_IsSurfableFishableWater - lsls r0, 24 - cmp r0, 0 - beq _080599D4 - movs r0, 0x1 - b _080599D6 - .align 2, 0 -_080599CC: .4byte gPlayerAvatar -_080599D0: .4byte gMapObjects -_080599D4: - movs r0, 0 -_080599D6: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end IsPlayerFacingSurfableFishableWater - - thumb_func_start ClearPlayerAvatarInfo -ClearPlayerAvatarInfo: @ 80599E0 - push {lr} - ldr r0, _080599F0 @ =gPlayerAvatar - movs r1, 0 - movs r2, 0x24 - bl memset - pop {r0} - bx r0 - .align 2, 0 -_080599F0: .4byte gPlayerAvatar - thumb_func_end ClearPlayerAvatarInfo - - thumb_func_start SetPlayerAvatarStateMask -SetPlayerAvatarStateMask: @ 80599F4 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _08059A08 @ =gPlayerAvatar - ldrb r2, [r3] - movs r1, 0xE0 - ands r1, r2 - orrs r0, r1 - strb r0, [r3] - bx lr - .align 2, 0 -_08059A08: .4byte gPlayerAvatar - thumb_func_end SetPlayerAvatarStateMask - - thumb_func_start GetPlayerAvatarStateTransitionByGraphicsId -GetPlayerAvatarStateTransitionByGraphicsId: @ 8059A0C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - ldr r3, _08059A34 @ =gUnknown_0830FC64 - lsls r0, r1, 2 - adds r0, r1 - lsls r4, r0, 1 - adds r6, r3, 0x1 -_08059A22: - lsls r0, r2, 1 - adds r1, r0, r4 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, r5 - bne _08059A38 - adds r0, r1, r6 - ldrb r0, [r0] - b _08059A44 - .align 2, 0 -_08059A34: .4byte gUnknown_0830FC64 -_08059A38: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x4 - bls _08059A22 - movs r0, 0x1 -_08059A44: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetPlayerAvatarStateTransitionByGraphicsId - - thumb_func_start GetPlayerAvatarGraphicsIdByCurrentState -GetPlayerAvatarGraphicsIdByCurrentState: @ 8059A4C - push {r4-r6,lr} - ldr r0, _08059A74 @ =gPlayerAvatar - ldrb r5, [r0] - movs r2, 0 - ldr r3, _08059A78 @ =gUnknown_0830FC64 - ldrb r1, [r0, 0x7] - lsls r0, r1, 2 - adds r0, r1 - lsls r4, r0, 1 - adds r6, r3, 0x1 -_08059A60: - lsls r0, r2, 1 - adds r1, r0, r4 - adds r0, r1, r6 - ldrb r0, [r0] - ands r0, r5 - cmp r0, 0 - beq _08059A7C - adds r0, r1, r3 - ldrb r0, [r0] - b _08059A88 - .align 2, 0 -_08059A74: .4byte gPlayerAvatar -_08059A78: .4byte gUnknown_0830FC64 -_08059A7C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x4 - bls _08059A60 - movs r0, 0 -_08059A88: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetPlayerAvatarGraphicsIdByCurrentState - - thumb_func_start SetPlayerAvatarExtraStateTransition -SetPlayerAvatarExtraStateTransition: @ 8059A90 - push {r4,r5,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08059ABC @ =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 -_08059ABC: .4byte gPlayerAvatar - thumb_func_end SetPlayerAvatarExtraStateTransition - - thumb_func_start InitPlayerAvatar -InitPlayerAvatar: @ 8059AC0 - 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 SpawnSpecialFieldObject - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 3 - adds r4, r5 - lsls r4, 2 - ldr r0, _08059B80 @ =gMapObjects - adds r4, r0 - ldrb r0, [r4, 0x2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x2] - bl sub_8126B54 - strb r0, [r4, 0x1B] - adds r0, r4, 0 - mov r1, r9 - bl FieldObjectTurn - bl ClearPlayerAvatarInfo - ldr r0, _08059B84 @ =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 -_08059B80: .4byte gMapObjects -_08059B84: .4byte gPlayerAvatar - thumb_func_end InitPlayerAvatar - - thumb_func_start sub_8059B88 -sub_8059B88: @ 8059B88 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r6, _08059BE8 @ =gMapObjects - ldr r5, _08059BEC @ =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 _08059BE0 - ldr r2, _08059BF0 @ =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] -_08059BE0: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08059BE8: .4byte gMapObjects -_08059BEC: .4byte gPlayerAvatar -_08059BF0: .4byte gSprites - thumb_func_end sub_8059B88 - - thumb_func_start sub_8059BF4 -sub_8059BF4: @ 8059BF4 - push {r4,r5,lr} - ldr r5, _08059C30 @ =gPlayerAvatar - ldrb r0, [r5, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059C34 @ =gMapObjects - adds r4, r0 - movs r0, 0x5 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08059C38 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08059C30: .4byte gPlayerAvatar -_08059C34: .4byte gMapObjects -_08059C38: .4byte gSprites - thumb_func_end sub_8059BF4 - - thumb_func_start sub_8059C3C -sub_8059C3C: @ 8059C3C - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _08059C88 @ =gPlayerAvatar - ldrb r0, [r6, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059C8C @ =gMapObjects - adds r4, r0 - movs r0, 0x6 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r0, [r6, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059C90 @ =gSprites - adds r4, r0 - adds r0, r5, 0 - bl sub_805FDE8 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08059C88: .4byte gPlayerAvatar -_08059C8C: .4byte gMapObjects -_08059C90: .4byte gSprites - thumb_func_end sub_8059C3C - - thumb_func_start sub_8059C94 -sub_8059C94: @ 8059C94 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _08059CFC @ =gPlayerAvatar - ldrb r0, [r6, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059D00 @ =gMapObjects - adds r4, r0 - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r0, [r6, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059D04 @ =gSprites - mov r8, r0 - add r4, r8 - adds r0, r5, 0 - bl sub_805FD98 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldrb r1, [r6, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - movs r1, 0x1 - bl SeekSpriteAnim - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08059CFC: .4byte gPlayerAvatar -_08059D00: .4byte gMapObjects -_08059D04: .4byte gSprites - thumb_func_end sub_8059C94 - - thumb_func_start sub_8059D08 -sub_8059D08: @ 8059D08 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _08059D54 @ =gPlayerAvatar - ldrb r0, [r6, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059D58 @ =gMapObjects - adds r4, r0 - movs r0, 0x7 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r0, [r6, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08059D5C @ =gSprites - adds r4, r0 - adds r0, r5, 0 - bl FieldObjectDirectionToImageAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08059D54: .4byte gPlayerAvatar -_08059D58: .4byte gMapObjects -_08059D5C: .4byte gSprites - thumb_func_end sub_8059D08 - - thumb_func_start sub_8059D60 -sub_8059D60: @ 8059D60 - 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, _08059DC4 @ =gUnknown_0830FC78 - mov r9, r1 - mov r4, sp - mov r7, sp - adds r7, 0x2 -_08059D82: - 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 _08059DC8 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - cmp r6, r0 - bne _08059DC8 - 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 sub_8126BC4 - b _08059DE2 - .align 2, 0 -_08059DC4: .4byte gUnknown_0830FC78 -_08059DC8: - 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 _08059D82 - ldrb r0, [r5, 0x1B] - bl objid_set_invisible -_08059DE2: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8059D60 - - thumb_func_start task_add_bump_boulder -task_add_bump_boulder: @ 8059DF0 - 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, _08059E24 @ =sub_8059E2C - adds r0, r6, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08059E28 @ =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 -_08059E24: .4byte sub_8059E2C -_08059E28: .4byte gTasks - thumb_func_end task_add_bump_boulder - - thumb_func_start sub_8059E2C -sub_8059E2C: @ 8059E2C - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08059E74 @ =gUnknown_0830FC88 - ldr r2, _08059E78 @ =gTasks - ldr r5, _08059E7C @ =gMapObjects - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_08059E40: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldr r0, _08059E80 @ =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 _08059E40 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08059E74: .4byte gUnknown_0830FC88 -_08059E78: .4byte gTasks -_08059E7C: .4byte gMapObjects -_08059E80: .4byte gPlayerAvatar - thumb_func_end sub_8059E2C - - thumb_func_start sub_8059E84 -sub_8059E84: @ 8059E84 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - ldr r1, _08059EA0 @ =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 -_08059EA0: .4byte gPlayerAvatar - thumb_func_end sub_8059E84 - - thumb_func_start sub_8059EA4 -sub_8059EA4: @ 8059EA4 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r5, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - bne _08059F2E - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - bne _08059F2E - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - ldrb r0, [r6, 0xC] - bl GetStepInPlaceDelay16AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - ldrb r0, [r6, 0xC] - bl GetSimpleGoAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldr r2, _08059F38 @ =gUnknown_0202FF84 - 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, _08059F3C @ =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, 0xD6 - bl PlaySE - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_08059F2E: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08059F38: .4byte gUnknown_0202FF84 -_08059F3C: .4byte gSprites - thumb_func_end sub_8059EA4 - - thumb_func_start sub_8059F40 -sub_8059F40: @ 8059F40 - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - adds r0, r4, 0 - bl FieldObjectCheckIfSpecialAnimFinishedOrInactive - lsls r0, 24 - cmp r0, 0 - beq _08059F82 - adds r0, r5, 0 - bl FieldObjectCheckIfSpecialAnimFinishedOrInactive - lsls r0, 24 - cmp r0, 0 - beq _08059F82 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - ldr r1, _08059F8C @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - ldr r0, _08059F90 @ =sub_8059E2C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08059F82: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08059F8C: .4byte gPlayerAvatar -_08059F90: .4byte sub_8059E2C - thumb_func_end sub_8059F40 - - thumb_func_start sub_8059F94 -sub_8059F94: @ 8059F94 - push {r4,lr} - ldr r4, _08059FB0 @ =sub_8059FB4 - 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 -_08059FB0: .4byte sub_8059FB4 - thumb_func_end sub_8059F94 - - thumb_func_start sub_8059FB4 -sub_8059FB4: @ 8059FB4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08059FF0 @ =gUnknown_0830FC94 - ldr r2, _08059FF4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_08059FC6: - movs r0, 0x8 - ldrsh r2, [r4, r0] - lsls r2, 2 - adds r2, r5 - ldr r0, _08059FF8 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08059FFC @ =gMapObjects - adds r1, r0 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _08059FC6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08059FF0: .4byte gUnknown_0830FC94 -_08059FF4: .4byte gTasks -_08059FF8: .4byte gPlayerAvatar -_08059FFC: .4byte gMapObjects - thumb_func_end sub_8059FB4 - - thumb_func_start sub_805A000 -sub_805A000: @ 805A000 - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r5, _0805A064 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r5, 0x6] - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0805A05C - movs r0, 0xA - bl PlaySE - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl sub_806084C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0805A05C - movs r0, 0 - strb r0, [r5, 0x6] - ldrb r0, [r5, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r5, 0x1] - ldr r0, _0805A068 @ =sub_8059FB4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805A05C: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805A064: .4byte gPlayerAvatar -_0805A068: .4byte sub_8059FB4 - thumb_func_end sub_805A000 - - thumb_func_start sub_805A06C -sub_805A06C: @ 805A06C - push {r4,lr} - ldr r4, _0805A088 @ =sub_805A08C - 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 -_0805A088: .4byte sub_805A08C - thumb_func_end sub_805A06C - - thumb_func_start sub_805A08C -sub_805A08C: @ 805A08C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0805A0C8 @ =gUnknown_0830FC98 - ldr r2, _0805A0CC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0805A09E: - movs r0, 0x8 - ldrsh r2, [r4, r0] - lsls r2, 2 - adds r2, r5 - ldr r0, _0805A0D0 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _0805A0D4 @ =gMapObjects - adds r1, r0 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _0805A09E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805A0C8: .4byte gUnknown_0830FC98 -_0805A0CC: .4byte gTasks -_0805A0D0: .4byte gPlayerAvatar -_0805A0D4: .4byte gMapObjects - thumb_func_end sub_805A08C - - thumb_func_start sub_805A0D8 -sub_805A0D8: @ 805A0D8 - 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, _0805A0FC @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - bl ScriptContext2_Enable - movs r0, 0x2D - bl PlaySE - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_0805A0FC: .4byte gPlayerAvatar - thumb_func_end sub_805A0D8 - - thumb_func_start sub_805A100 -sub_805A100: @ 805A100 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldr r1, _0805A174 @ =gUnknown_0830FCA8 - mov r0, sp - movs r2, 0x4 - bl memcpy - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0805A168 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - subs r0, 0x1 - add r0, sp - ldrb r6, [r0] - adds r0, r6, 0 - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - ldrb r0, [r4, 0xA] - cmp r6, r0 - bne _0805A146 - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_0805A146: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x3 - ble _0805A168 - ldrb r0, [r4, 0xA] - bl GetOppositeDirection - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bne _0805A168 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0805A168: - movs r0, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805A174: .4byte gUnknown_0830FCA8 - thumb_func_end sub_805A100 - - thumb_func_start sub_805A178 -sub_805A178: @ 805A178 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - adds r4, r1, 0 - ldr r1, _0805A1B4 @ =gUnknown_0830FCAC - mov r0, sp - movs r2, 0x5 - bl memcpy - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0805A1A8 - movs r1, 0xC - ldrsh r0, [r5, r1] - add r0, sp - ldrb r1, [r0] - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - movs r0, 0x1 - strh r0, [r5, 0x8] -_0805A1A8: - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805A1B4: .4byte gUnknown_0830FCAC - thumb_func_end sub_805A178 - - thumb_func_start sub_805A1B8 -sub_805A1B8: @ 805A1B8 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0805A1FC - ldrb r0, [r4, 0xA] - bl GetOppositeDirection - lsls r0, 24 - lsrs r0, 24 - bl GetSimpleGoAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - bl ScriptContext2_Disable - ldr r1, _0805A204 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - ldr r0, _0805A208 @ =sub_805A08C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805A1FC: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805A204: .4byte gPlayerAvatar -_0805A208: .4byte sub_805A08C - thumb_func_end sub_805A1B8 - - thumb_func_start sub_805A20C -sub_805A20C: @ 805A20C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ScriptContext2_Enable - bl sav1_reset_battle_music_maybe - bl sub_8053F84 - ldr r2, _0805A258 @ =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, _0805A25C @ =taskFF_0805D1D4 - adds r0, r5, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805A260 @ =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 -_0805A258: .4byte gPlayerAvatar -_0805A25C: .4byte taskFF_0805D1D4 -_0805A260: .4byte gTasks - thumb_func_end sub_805A20C - - thumb_func_start taskFF_0805D1D4 -taskFF_0805D1D4: @ 805A264 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _0805A2C0 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805A2C4 @ =gMapObjects - adds r5, r0, r1 - adds r0, r5, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _0805A290 - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0805A2B8 -_0805A290: - ldrb r0, [r5, 0x1A] - movs r1, 0x2 - bl sub_8127ED0 - ldr r0, _0805A2C8 @ =gTasks - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - adds r4, r0 - ldrb r0, [r4, 0x8] - bl sub_80608D0 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - ldr r0, _0805A2CC @ =sub_805A2D0 - str r0, [r4] -_0805A2B8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805A2C0: .4byte gPlayerAvatar -_0805A2C4: .4byte gMapObjects -_0805A2C8: .4byte gTasks -_0805A2CC: .4byte sub_805A2D0 - thumb_func_end taskFF_0805D1D4 - - thumb_func_start sub_805A2D0 -sub_805A2D0: @ 805A2D0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r6, _0805A33C @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805A340 @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0805A336 - movs r0, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - movs r0, 0 - strb r0, [r6, 0x6] - bl ScriptContext2_Disable - ldrb r1, [r4, 0x1A] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805A344 @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0 - bl DestroyTask -_0805A336: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805A33C: .4byte gPlayerAvatar -_0805A340: .4byte gMapObjects -_0805A344: .4byte gSprites - thumb_func_end sub_805A2D0 - - thumb_func_start StartFishing -StartFishing: @ 805A348 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _0805A374 @ =sub_805A37C - adds r0, r5, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805A378 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x26] - bl _call_via_r5 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805A374: .4byte sub_805A37C -_0805A378: .4byte gTasks - thumb_func_end StartFishing - - thumb_func_start sub_805A37C -sub_805A37C: @ 805A37C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0805A3AC @ =gUnknown_0830FCB4 - ldr r2, _0805A3B0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0805A38E: - 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 _0805A38E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805A3AC: .4byte gUnknown_0830FCB4 -_0805A3B0: .4byte gTasks - thumb_func_end sub_805A37C - - thumb_func_start sub_805A3B4 -sub_805A3B4: @ 805A3B4 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - ldr r1, _0805A3D0 @ =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 -_0805A3D0: .4byte gPlayerAvatar - thumb_func_end sub_805A3B4 - - thumb_func_start fish1 -fish1: @ 805A3D4 - push {r4-r6,lr} - sub sp, 0x10 - adds r5, r0, 0 - ldr r1, _0805A45C @ =gUnknown_0830FCF4 - mov r0, sp - movs r2, 0x6 - bl memcpy - add r4, sp, 0x8 - ldr r1, _0805A460 @ =gUnknown_0830FCFA - 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, _0805A464 @ =gMapObjects - ldr r2, _0805A468 @ =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 FieldObjectClearAnimIfSpecialAnimActive - 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_8059C3C - 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 -_0805A45C: .4byte gUnknown_0830FCF4 -_0805A460: .4byte gUnknown_0830FCFA -_0805A464: .4byte gMapObjects -_0805A468: .4byte gPlayerAvatar - thumb_func_end fish1 - - thumb_func_start fish2 -fish2: @ 805A46C - push {r4,lr} - adds r4, r0, 0 - bl sub_805A954 - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3B - ble _0805A488 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0805A488: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end fish2 - - thumb_func_start fish3 -fish3: @ 805A490 - push {r4,lr} - adds r4, r0, 0 - bl MenuDisplayMessageBox - 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 _0805A4C4 - adds r0, r1, 0x4 - strh r0, [r4, 0xE] -_0805A4C4: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0x9 - ble _0805A4D0 - movs r0, 0xA - strh r0, [r4, 0xE] -_0805A4D0: - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - thumb_func_end fish3 - - thumb_func_start fish4 -fish4: @ 805A4D8 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r1, _0805A514 @ =gUnknown_0830FD00 - mov r0, sp - movs r2, 0x2 - bl memcpy - bl sub_805A954 - ldrh r0, [r4, 0xA] - adds r2, r0, 0x1 - strh r2, [r4, 0xA] - ldr r0, _0805A518 @ =gMain - ldrh r0, [r0, 0x2E] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0805A51C - movs r0, 0xB - strh r0, [r4, 0x8] - movs r1, 0x20 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0805A50E - movs r0, 0xC - strh r0, [r4, 0x8] -_0805A50E: - movs r0, 0x1 - b _0805A564 - .align 2, 0 -_0805A514: .4byte gUnknown_0830FD00 -_0805A518: .4byte gMain -_0805A51C: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _0805A562 - strh r1, [r4, 0xA] - ldrh r2, [r4, 0xC] - movs r3, 0xC - ldrsh r1, [r4, r3] - movs r3, 0xE - ldrsh r0, [r4, r3] - cmp r1, r0 - blt _0805A54E - 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 _0805A548 - adds r0, r1, 0x1 - strh r0, [r4, 0x8] -_0805A548: - adds r0, r2, 0x1 - strh r0, [r4, 0x20] - b _0805A562 -_0805A54E: - adds r1, r2, 0x4 - lsls r1, 24 - lsrs r1, 24 - mov r0, sp - movs r2, 0xF - bl MenuPrint - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_0805A562: - movs r0, 0 -_0805A564: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end fish4 - - thumb_func_start party_menu_update_status_condition_object -party_menu_update_status_condition_object: @ 805A56C - push {r4,lr} - adds r4, r0, 0 - bl sub_805A954 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - bl GetFishingWildMonListHeader - lsls r0, 24 - cmp r0, 0 - beq _0805A590 - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0805A596 -_0805A590: - movs r0, 0xB - strh r0, [r4, 0x8] - b _0805A5BC -_0805A596: - ldr r0, _0805A5C4 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0805A5C8 @ =gSprites - adds r4, r0 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl sub_805FE08 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim -_0805A5BC: - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805A5C4: .4byte gPlayerAvatar -_0805A5C8: .4byte gSprites - thumb_func_end party_menu_update_status_condition_object - - thumb_func_start sub_805A5CC -sub_805A5CC: @ 805A5CC - push {r4,lr} - adds r4, r0, 0 - bl sub_805A954 - ldr r0, _0805A5F0 @ =gOtherText_OhABite - movs r1, 0x4 - movs r2, 0x11 - bl MenuPrint - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805A5F0: .4byte gOtherText_OhABite - thumb_func_end sub_805A5CC - - thumb_func_start fish7 -fish7: @ 805A5F4 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _0805A628 @ =gUnknown_0830FD02 - mov r0, sp - movs r2, 0x6 - bl memcpy - bl sub_805A954 - 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 _0805A62C - movs r0, 0xC - b _0805A63C - .align 2, 0 -_0805A628: .4byte gUnknown_0830FD02 -_0805A62C: - ldr r0, _0805A648 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0805A63E - ldrh r0, [r4, 0x8] - adds r0, 0x1 -_0805A63C: - strh r0, [r4, 0x8] -_0805A63E: - movs r0, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805A648: .4byte gMain - thumb_func_end fish7 - - thumb_func_start fish8 -fish8: @ 805A64C - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r1, _0805A6B0 @ =gUnknown_0830FD08 - mov r0, sp - movs r2, 0xC - bl memcpy - bl sub_805A954 - 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 _0805A6A2 - cmp r1, 0x1 - bgt _0805A6A6 - 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 _0805A6A6 -_0805A6A2: - movs r0, 0x3 - strh r0, [r4, 0x8] -_0805A6A6: - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805A6B0: .4byte gUnknown_0830FD08 - thumb_func_end fish8 - - thumb_func_start sub_805A6B4 -sub_805A6B4: @ 805A6B4 - push {r4,lr} - adds r4, r0, 0 - bl sub_805A954 - ldr r0, _0805A6D8 @ =gOtherText_PokeOnHook - bl sub_8072044 - bl MenuDisplayMessageBox - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805A6D8: .4byte gOtherText_PokeOnHook - thumb_func_end sub_805A6B4 - - thumb_func_start sub_805A6DC -sub_805A6DC: @ 805A6DC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - movs r1, 0xA - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0805A780 - bl sub_805A954 - movs r0, 0xA - ldrsh r6, [r5, r0] - cmp r6, 0 - bne _0805A780 - bl MenuUpdateWindowText - lsls r0, 24 - cmp r0, 0 - beq _0805A778 - ldr r7, _0805A76C @ =gPlayerAvatar - ldrb r0, [r7, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r1, _0805A770 @ =gMapObjects - mov r8, r1 - add r4, r8 - ldrh r1, [r5, 0x24] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - ldrb r1, [r7] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0805A746 - 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_8127F28 -_0805A746: - ldr r2, _0805A774 @ =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] - bl MenuZeroFillScreen - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - b _0805A7A8 - .align 2, 0 -_0805A76C: .4byte gPlayerAvatar -_0805A770: .4byte gMapObjects -_0805A774: .4byte gSprites -_0805A778: - movs r1, 0xA - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0805A7A8 -_0805A780: - ldr r1, _0805A7B4 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - ldrh r0, [r5, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl FishingWildEncounter - movs r0, 0x1 - bl sub_80BE97C - ldr r0, _0805A7B8 @ =sub_805A37C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805A7A8: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805A7B4: .4byte gPlayerAvatar -_0805A7B8: .4byte sub_805A37C - thumb_func_end sub_805A6DC - - thumb_func_start sub_805A7BC -sub_805A7BC: @ 805A7BC - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_805A954 - ldr r0, _0805A7FC @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0805A800 @ =gSprites - adds r4, r0 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl sub_805FDF8 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldr r0, _0805A804 @ =gOtherText_NotEvenANibble - bl sub_8072044 - movs r0, 0xD - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805A7FC: .4byte gPlayerAvatar -_0805A800: .4byte gSprites -_0805A804: .4byte gOtherText_NotEvenANibble - thumb_func_end sub_805A7BC - - thumb_func_start sub_805A808 -sub_805A808: @ 805A808 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_805A954 - ldr r0, _0805A84C @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0805A850 @ =gSprites - adds r4, r0 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl sub_805FDF8 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldr r0, _0805A854 @ =gOtherText_ItGotAway - bl sub_8072044 - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805A84C: .4byte gPlayerAvatar -_0805A850: .4byte gSprites -_0805A854: .4byte gOtherText_ItGotAway - thumb_func_end sub_805A808 - - thumb_func_start fishD -fishD: @ 805A858 - push {r4,lr} - adds r4, r0, 0 - bl sub_805A954 - bl MenuDisplayMessageBox - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end fishD - - thumb_func_start sub_805A874 -sub_805A874: @ 805A874 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - bl sub_805A954 - ldr r7, _0805A908 @ =gSprites - ldr r5, _0805A90C @ =gPlayerAvatar - ldrb r0, [r5, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - adds r1, 0x3F - ldrb r0, [r1] - lsls r0, 27 - cmp r0, 0 - bge _0805A8FA - ldrb r0, [r5, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _0805A910 @ =gMapObjects - mov r8, r0 - add r4, r8 - ldrh r1, [r6, 0x24] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - ldrb r1, [r4, 0x18] - lsrs r1, 4 - adds r0, r4, 0 - bl FieldObjectTurn - ldrb r1, [r5] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0805A8DA - 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_8127F28 -_0805A8DA: - 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] -_0805A8FA: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805A908: .4byte gSprites -_0805A90C: .4byte gPlayerAvatar -_0805A910: .4byte gMapObjects - thumb_func_end sub_805A874 - - thumb_func_start fishF -fishF: @ 805A914 - push {lr} - bl MenuUpdateWindowText - lsls r0, 24 - cmp r0, 0 - beq _0805A946 - ldr r1, _0805A94C @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - bl sub_806451C - bl MenuZeroFillScreen - movs r0, 0 - bl sub_80BE97C - ldr r0, _0805A950 @ =sub_805A37C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0805A946: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0805A94C: .4byte gPlayerAvatar -_0805A950: .4byte sub_805A37C - thumb_func_end fishF - - thumb_func_start sub_805A954 -sub_805A954: @ 805A954 - push {r4-r7,lr} - ldr r0, _0805AA40 @ =gPlayerAvatar - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805AA44 @ =gSprites - adds r4, r0, r1 - adds r0, r4, 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 _0805A9C6 - 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 _0805A9CC -_0805A9C6: - subs r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0805A9CC: - 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 _0805A9FE - movs r0, 0x8 - strh r0, [r4, 0x24] - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0805A9FE - ldr r0, _0805AA48 @ =0x0000fff8 - strh r0, [r4, 0x24] -_0805A9FE: - cmp r5, 0x5 - bne _0805AA06 - ldr r0, _0805AA48 @ =0x0000fff8 - strh r0, [r4, 0x26] -_0805AA06: - adds r0, r5, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0805AA16 - movs r0, 0x8 - strh r0, [r4, 0x26] -_0805AA16: - ldr r3, _0805AA40 @ =gPlayerAvatar - ldrb r1, [r3] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0805AA3A - ldr r2, _0805AA4C @ =gMapObjects - 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_8127F28 -_0805AA3A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805AA40: .4byte gPlayerAvatar -_0805AA44: .4byte gSprites -_0805AA48: .4byte 0x0000fff8 -_0805AA4C: .4byte gMapObjects - thumb_func_end sub_805A954 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2.s b/data/data2.s index 35121b3de..dfb4773dc 100644 --- a/data/data2.s +++ b/data/data2.s @@ -4732,22 +4732,22 @@ gUnknown_0830FCAC:: @ 830FCAC .align 2 gUnknown_0830FCB4:: @ 830FCB4 - .4byte sub_805A3B4 - .4byte fish1 - .4byte fish2 - .4byte fish3 - .4byte fish4 - .4byte party_menu_update_status_condition_object - .4byte sub_805A5CC - .4byte fish7 - .4byte fish8 - .4byte sub_805A6B4 - .4byte sub_805A6DC - .4byte sub_805A7BC - .4byte sub_805A808 - .4byte fishD - .4byte sub_805A874 - .4byte fishF + .4byte Fishing1 + .4byte Fishing2 + .4byte Fishing3 + .4byte Fishing4 + .4byte Fishing5 + .4byte Fishing6 + .4byte Fishing7 + .4byte Fishing8 + .4byte Fishing9 + .4byte Fishing10 + .4byte Fishing11 + .4byte Fishing12 + .4byte Fishing13 + .4byte Fishing14 + .4byte Fishing15 + .4byte Fishing16 .align 1 gUnknown_0830FCF4:: @ 830FCF4 diff --git a/include/fieldmap.h b/include/fieldmap.h index 9e841a3f3..16a80955a 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -172,10 +172,11 @@ struct MapObject /*0x1B*/ u8 mapobj_unk_1B; /*0x1C*/ u8 mapobj_unk_1C; /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E */ u8 mapobj_unk_1E; + /*0x1E*/ u8 mapobj_unk_1E; /*0x1F*/ u8 mapobj_unk_1F; /*0x20*/ u8 mapobj_unk_20; /*0x21*/ u8 mapobj_unk_21; + /*0x22*/ u8 mapobj_unk_22; /*size = 0x24*/ }; @@ -234,7 +235,7 @@ struct MapObject2 /*0x1B*/ u8 mapobj_unk_1B; /*0x1C*/ u8 mapobj_unk_1C; /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E */ u8 mapobj_unk_1E; + /*0x1E*/ u8 mapobj_unk_1E; /*0x1F*/ u8 mapobj_unk_1F; /*0x20*/ u8 mapobj_unk_20; /*0x21*/ u8 mapobj_unk_21; @@ -261,14 +262,25 @@ struct MapObjectGraphicsInfo union AffineAnimCmd **affineAnims; }; +#define PLAYER_AVATAR_FLAG_0 (1 << 0) +#define PLAYER_AVATAR_FLAG_1 (1 << 1) +#define PLAYER_AVATAR_FLAG_2 (1 << 2) +#define PLAYER_AVATAR_FLAG_3 (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_7 (1 << 7) + struct PlayerAvatar { - /* 0x00 */ u8 bitfield; - /* 0x01 */ u8 bike; - /* 0x02 */ u8 running2; - /* 0x03 */ u8 running1; - /* 0x04 */ u8 spriteId; - /* 0x05 */ u8 mapObjectId; + /*0x00*/ u8 flags; + /*0x01*/ u8 bike; + /*0x02*/ u8 running2; + /*0x03*/ u8 running1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 mapObjectId; + /*0x06*/ u8 unk6; + /*0x07*/ u8 gender; // TODO: rest of struct }; diff --git a/ld_script.txt b/ld_script.txt index 6d754ef6f..893eca8dd 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -70,7 +70,7 @@ SECTIONS { asm/metatile_behavior.o(.text); src/field_camera.o(.text); src/field_door.o(.text); - asm/field_player_avatar.o(.text); + src/field_player_avatar.o(.text); asm/field_map_obj.o(.text); asm/field_ground_effect.o(.text); src/map_obj_80643A4.o(.text); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c new file mode 100644 index 000000000..6719f6c3a --- /dev/null +++ b/src/field_player_avatar.c @@ -0,0 +1,1685 @@ +#include "global.h" +#include "fieldmap.h" +#include "flag.h" +#include "main.h" +#include "menu.h" +#include "rng.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +struct UnknownStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + s16 unk4; + s16 unk6; + u8 unk8; + u8 unk9; + u8 unkA_0:4; + u8 unkA_4:4; + u16 unkC; + u16 unkE; + u32 unk10; + u16 unk14; +}; + +extern u8 SpawnSpecialFieldObject(struct UnknownStruct *); +extern u8 sub_8126B54(void); +extern bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *); +extern u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *); +extern u8 FieldObjectGetSpecialAnim(struct MapObject *); +extern bool8 FieldObjectSetSpecialAnim(struct MapObject *, u8); +extern void FieldObjectClearAnim(struct MapObject *); +extern u8 sub_80E5DEC(u8); +extern s16 sub_80E6034(void); +extern u8 player_get_direction_upper_nybble(void); +extern u8 player_get_direction_lower_nybble(void); +extern u8 MapGridGetMetatileBehaviorAt(s32, s32); +extern u32 FieldEffectStart(u8); +extern void PlayerGetDestCoords(s16 *, s16 *); +extern bool8 MetatileBehavior_IsSurfableFishableWater(u8); +extern bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *); +extern void sub_806451C(void); +extern void sub_805B980(struct MapObject *, u8); +extern void sub_8127ED0(u8, u8); +extern bool8 player_should_look_direction_be_enforced_upon_movement(void); +extern bool8 is_tile_x69_2_warp_door(u8); +extern bool8 pokemon_has_move(struct Pokemon *, u8); +extern u8 GetSimpleGoAnimId(u8); +extern u8 GetStepInPlaceDelay16AnimId(u8); +extern u8 sub_806084C(u8); +extern u8 GetOppositeDirection(u8); +extern u8 GetFaceDirectionAnimId(u8); +extern u8 sub_80608D0(u8); +extern bool8 GetFishingWildMonListHeader(void); +extern void FishingWildEncounter(u8); +extern u8 npc_block_way(struct MapObject *, s16, s16, u8); +extern u8 GetFieldObjectIdByXY(s16, s16); +extern u8 sub_8056F08(u8); +extern u8 GetLedgeJumpDirection(s16, s16, u8); +extern u8 GetFieldObjectIdByXYZ(u16, u16, int); +extern u8 MapGridGetZCoordAt(); +extern u32 CheckForRotatingGatePuzzleCollision(u8, s16, s16); +extern u8 sub_805FDF8(u8); +extern void sub_80BE97C(u8); +extern void sub_8127F28(u8, u8, s16); +extern u8 sub_805FE08(u8); +extern void sav1_reset_battle_music_maybe(void); +extern void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *); +extern u8 FieldObjectDirectionToImageAnimId(u8); +extern u8 sub_805FD98(u8); +extern u8 sub_805FDE8(u8); +extern void sub_8053F84(void); +extern u8 sub_80609D8(u8); +extern u8 sub_8060A04(u8); +extern u8 sub_8060A30(u8); +extern u8 sub_8060A5C(u8); +extern u8 sub_8060A88(u8); +extern u8 sub_8060AB4(u8); +extern u8 sub_8060878(u8); +extern u8 sub_8060AE0(u8); +extern u8 sub_8060B0C(u8); +extern u8 sub_8060B38(u8); +extern u8 sub_8060B64(u8); +extern void MovePlayerOnBike(u8, u16, u16); +extern void objid_set_invisible(u8); +extern void FieldObjectTurn(struct MapObject *, u8); + +extern u8 gOtherText_OhABite[]; +extern u8 gOtherText_PokeOnHook[]; +extern u8 gOtherText_NotEvenANibble[]; +extern u8 gOtherText_ItGotAway[]; + +extern struct +{ + s32 x; + s32 y; + u32 unk8; + u32 unkC; +} gUnknown_0202FF84; + +extern bool8 (*gUnknown_0830FB58[])(u8); +extern u8 (*gUnknown_0830FBA0[])(void); +extern void (*gUnknown_0830FBEC[])(u8, u16); +extern bool8 (*gUnknown_0830FBF8[])(u8); +extern u8 gUnknown_0830FC0C[]; +extern void (*gUnknown_0830FC14[])(struct MapObject *); +extern bool8 (*gUnknown_0830FC34[])(u8); +extern u8 gUnknown_0830FC44[][2]; +extern u8 gUnknown_0830FC54[][2]; +extern u8 gUnknown_0830FC64[2][5][2]; +extern bool8 (*gUnknown_0830FC78[])(u8); //Duplicate of gUnknown_0830FC34 +extern u8 (*gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct MapObject *); +extern u8 (*gUnknown_0830FC94[])(struct Task *, struct MapObject *); +extern u8 (*gUnknown_0830FC98[])(struct Task *, struct MapObject *); +extern u8 gUnknown_0830FCA8[]; +extern u8 gUnknown_0830FCAC[]; +extern u8 (*gUnknown_0830FCB4[])(struct Task *); +extern s16 gUnknown_0830FCF4[]; +extern s16 gUnknown_0830FCFA[]; +extern u8 gUnknown_0830FD00[]; +extern s16 gUnknown_0830FD02[]; +extern s16 gUnknown_0830FD08[]; + +//Functions +static u32 sub_80587D8(void); +static bool8 sub_8058854(struct MapObject *, u8); +static void npc_clear_strange_bits(struct MapObject *a); +static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); +static void PlayerAllowForcedMovementIfMovingSameDirection(void); +static u8 TryDoMetatileBehaviorForcedMovement(void); +static u8 GetForcedMovementByMetatileBehavior(void); +static void MovePlayerNotOnBike(u8 a, u16 b); +static u8 CheckMovementInputNotOnBike(u8 a); +static u8 CheckForPlayerAvatarCollision(u8 a); +u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e); +static u8 sub_8058EF0(s16 a, s16 b, u8 c); +static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c); +static u8 sub_8058F6C(s16 a, s16 b, u8 c); +static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d); +static void DoPlayerAvatarTransition(void); +static bool8 player_is_anim_in_certain_ranges(void); +static bool8 sub_80592A4(void); +static bool8 PlayerIsAnimActive(void); +static bool8 PlayerCheckIfAnimFinishedOrInactive(void); +void PlayerGoSpeed0(u8 a); +void sub_80593C4(u8 a); +void npc_use_some_d2s(u8 a); +void sub_805940C(u8 a); +static void PlayerNotOnBikeCollide(u8 a); +void PlayerFaceDirection(u8 a); +void PlayerTurnInPlace(u8 a); +void PlayerJumpLedge(u8 a); +static void PlayCollisionSoundIfNotFacingWarp(u8 a); +u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); +void SetPlayerAvatarStateMask(u8 a); +static void sub_8059D60(struct MapObject *a); +static void StartStrengthAnim(u8 a, u8 b); +static void sub_8059F94(void); +static void sub_805A06C(void); +void sub_805A20C(u8 a); + +void sub_80587B4(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_80587D8); +} + +static u32 sub_80587D8(void) +{ + return 0; +} + +void player_step(u8 a, u16 b, u16 c) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + sub_8059D60(playerMapObj); + if (gPlayerAvatar.unk6 == 0) + { + sub_80E5B38(b, c); + if (sub_8058854(playerMapObj, a) == 0) + { + npc_clear_strange_bits(playerMapObj); + DoPlayerAvatarTransition(); + if (TryDoMetatileBehaviorForcedMovement() == 0) + { + MovePlayerAvatarUsingKeypadInput(a, b, c); + PlayerAllowForcedMovementIfMovingSameDirection(); + } + } + } +} + +static bool8 sub_8058854(struct MapObject *a, u8 b) +{ + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(a) + && !FieldObjectClearAnimIfSpecialAnimFinished(a)) + { + u8 specialAnim = FieldObjectGetSpecialAnim(a); + + if (specialAnim > 24 && specialAnim < 29 && b != 0 && a->placeholder18 != b) + { + FieldObjectClearAnim(a); + return FALSE; + } + else + { + return TRUE; + } + } + return FALSE; +} + +static void npc_clear_strange_bits(struct MapObject *a) +{ + a->mapobj_bit_12 = 0; + a->mapobj_bit_10 = 0; + a->mapobj_bit_9 = 0; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_7; +} + +static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c) +{ + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_1) || (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_2)) + MovePlayerOnBike(a, b, c); + else + MovePlayerNotOnBike(a, c); +} + +static void PlayerAllowForcedMovementIfMovingSameDirection(void) +{ + if (gPlayerAvatar.running2 == 2) + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; +} + +static u8 TryDoMetatileBehaviorForcedMovement(void) +{ + return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); +} + +static u8 GetForcedMovementByMetatileBehavior(void) +{ + u8 i; + + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_5)) + { + u8 r5 = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E; + + for (i = 0; i < 18; i++) + { + if (gUnknown_0830FB58[i](r5)) + return i + 1; + } + } + return 0; +} + +u8 ForcedMovement_None(void) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) + { + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_9 = 0; + playerMapObj->mapobj_bit_11 = 1; + FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6; + } + return 0; +} + +static u8 DoForcedMovement(u8 a, void (*b)(u8)) +{ + struct PlayerAvatar *playerAvatar = &gPlayerAvatar; + u8 r7 = CheckForPlayerAvatarCollision(a); + + playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; + if (r7 != 0) + { + ForcedMovement_None(); + if (r7 <= 4) + { + return 0; + } + else + { + if (r7 == 6) + PlayerJumpLedge(a); + playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; + playerAvatar->running2 = 2; + return 1; + } + } + else + { + playerAvatar->running2 = 2; + b(a); + return 1; + } +} + +static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_10 = 1; + return DoForcedMovement(playerMapObj->placeholder18, a); +} + +u8 ForcedMovement_Slip(void) +{ + return DoForcedMovementInCurrentDirection(sub_80593C4); +} + +u8 sub_8058AAC(void) +{ + return DoForcedMovement(1, PlayerGoSpeed0); +} + +u8 sub_8058AC4(void) +{ + return DoForcedMovement(2, PlayerGoSpeed0); +} + +u8 sub_8058ADC(void) +{ + return DoForcedMovement(3, PlayerGoSpeed0); +} + +u8 sub_8058AF4(void) +{ + return DoForcedMovement(4, PlayerGoSpeed0); +} + +u8 sub_8058B0C(void) +{ + return DoForcedMovement(1, npc_use_some_d2s); +} + +u8 sub_8058B24(void) +{ + return DoForcedMovement(2, npc_use_some_d2s); +} + +u8 sub_8058B3C(void) +{ + return DoForcedMovement(3, npc_use_some_d2s); +} + +u8 sub_8058B54(void) +{ + return DoForcedMovement(4, npc_use_some_d2s); +} + +static u8 ForcedMovement_Slide(u8 a, void (*b)(u8)) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_10 = 1; + playerMapObj->mapobj_bit_9 = 1; + return DoForcedMovement(a, b); +} + +u8 ForcedMovement_SlideSouth(void) +{ + return ForcedMovement_Slide(1, sub_80593C4); +} + +u8 ForcedMovement_SlideNorth(void) +{ + return ForcedMovement_Slide(2, sub_80593C4); +} + +u8 ForcedMovement_SlideWest(void) +{ + return ForcedMovement_Slide(3, sub_80593C4); +} + +u8 ForcedMovement_SlideEast(void) +{ + return ForcedMovement_Slide(4, sub_80593C4); +} + +u8 sub_8058C04(void) +{ + sub_8059F94(); + return 1; +} + +u8 sub_8058C10(void) +{ + sub_805A06C(); + return 1; +} + +u8 ForcedMovement_MuddySlope(void) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (playerMapObj->placeholder18 != 2 || sub_80E6034() <= 3) + { + sub_80E6010(0); + playerMapObj->mapobj_bit_9 = 1; + return DoForcedMovement(1, sub_80593C4); + } + else + { + return 0; + } +} + +static void MovePlayerNotOnBike(u8 a, u16 b) +{ + gUnknown_0830FBEC[CheckMovementInputNotOnBike(a)](a, b); +} + +static u8 CheckMovementInputNotOnBike(u8 a) +{ + if (a == 0) + { + gPlayerAvatar.running2 = 0; + return 0; + } + else if (a != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 1; + return 1; + } + else + { + gPlayerAvatar.running2 = 2; + return 2; + } +} + +void PlayerNotOnBikeNotMoving(u8 a, u16 b) +{ + PlayerFaceDirection(player_get_direction_lower_nybble()); +} + +void PlayerNotOnBikeTurningInPlace(u8 a, u16 b) +{ + PlayerTurnInPlace(a); +} + +void sub_8058D0C(u8 a, u16 b) +{ + u8 r1 = CheckForPlayerAvatarCollision(a); + + switch (r1) + { + case 6: + PlayerJumpLedge(a); + return; + default: + if (r1 > 8 || r1 < 5) + PlayerNotOnBikeCollide(a); + return; + case 0: + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_3) + { + sub_80593C4(a); + return; + } + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (b & 2) && FlagGet(0x860) + && sub_80E5DEC(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0) + { + sub_805940C(a); + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_7; + } + else + { + PlayerGoSpeed0(a); + } + } +} + +static u8 CheckForPlayerAvatarCollision(u8 a) +{ + s16 x, y; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + x = playerMapObj->coords2.x; + y = playerMapObj->coords2.y; + MoveCoords(a, &x, &y); + return CheckForFieldObjectCollision(playerMapObj, x, y, a, MapGridGetMetatileBehaviorAt(x, y)); +} + +u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e) +{ + u8 sp0; + + sp0 = npc_block_way(a, b, c, d); + if (sp0 == 3 && sub_8058EF0(b, c, d)) + return 5; + if (ShouldJumpLedge(b, c, d)) + { + sav12_xor_increment(0x2B); + return 6; + } + if (sp0 == 4 && sub_8058F6C(b, c, d)) + return 7; + + if (sp0 == 0) + { + if (CheckForRotatingGatePuzzleCollision(d, b, c)) + return 8; + check_acro_bike_metatile(b, c, e, &sp0); + } + return sp0; +} + +static u8 sub_8058EF0(s16 a, s16 b, u8 c) +{ + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_3) + && MapGridGetZCoordAt(a, b) == 3 + && GetFieldObjectIdByXYZ(a, b, 3) == 16) + { + sub_805A20C(c); + return 1; + } + else + { + return 0; + } +} + +static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c) +{ + if (GetLedgeJumpDirection(a, b, c) != 0) + return 1; + else + return 0; +} + +static u8 sub_8058F6C(s16 a, s16 b, u8 c) +{ + if (FlagGet(0x829)) + { + u8 mapObjectId = GetFieldObjectIdByXY(a, b); + + if (mapObjectId != 16) + { + if (gMapObjects[mapObjectId].graphicsId == 0x57) + { + a = gMapObjects[mapObjectId].coords2.x; + b = gMapObjects[mapObjectId].coords2.y; + MoveCoords(c, &a, &b); + if (npc_block_way(&gMapObjects[mapObjectId], a, b, c) == 0 + && sub_8056F08(MapGridGetMetatileBehaviorAt(a, b)) == 0) + { + StartStrengthAnim(mapObjectId, c); + return 1; + } + } + } + } + return 0; +} + +static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0830FBF8[i](c)) + { + *d = gUnknown_0830FC0C[i]; + return; + } + } +} + +void SetPlayerAvatarTransitionFlags(u16 a) +{ + gPlayerAvatar.bike |= a; + DoPlayerAvatarTransition(); +} + +static void DoPlayerAvatarTransition(void) +{ + u8 i; + u32 flags = gPlayerAvatar.bike; + + if (flags != 0) + { + for (i = 0; i < 8; i++, flags >>= 1) + { +#ifdef NONMATCHING + if (flags & 1) + { + gUnknown_0830FC14[i](&gMapObjects[gPlayerAvatar.mapObjectId]); + } +#else + if (flags & 1) + { + register void (**funcs)(struct MapObject *) asm("r0") = gUnknown_0830FC14; + funcs[i](&gMapObjects[gPlayerAvatar.mapObjectId]); + } +#endif + } + gPlayerAvatar.bike = 0; + } +} + +void nullsub_49(struct MapObject *a) +{ +} + +void PlayerAvatarTransition_Normal(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(0)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(1); +} + +void PlayerAvatarTransition_MachBike(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(1)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(2); + sub_80E5FCC(0, 0); +} + +void PlayerAvatarTransition_AcroBike(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(2)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(4); + sub_80E5FCC(0, 0); + sub_80E6084(); +} + +void PlayerAvatarTransition_Surfing(struct MapObject *a) +{ + u8 unk; + + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(3)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(8); + gUnknown_0202FF84.x = a->coords2.x; + gUnknown_0202FF84.y = a->coords2.y; + gUnknown_0202FF84.unk8 = gPlayerAvatar.mapObjectId; + unk = FieldEffectStart(8); + a->mapobj_unk_1A = unk; + sub_8127ED0(unk, 1); +} + +void PlayerAvatarTransition_Underwater(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(4)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(16); + a->mapobj_unk_1A = sub_8128124(a->spriteId); +} + +void sub_80591F4(struct MapObject *a) +{ + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5; +} + +void sub_8059204(void) +{ + gPlayerAvatar.running1 = 0; + if (PlayerIsAnimActive()) + { + if (!PlayerCheckIfAnimFinishedOrInactive()) + { + if (!player_is_anim_in_certain_ranges()) + gPlayerAvatar.running1 = 1; + } + else + { + if (!sub_80592A4()) + gPlayerAvatar.running1 = 2; + } + } +} + +static bool8 player_is_anim_in_certain_ranges(void) +{ + u8 unk = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C; + + if (unk < 4 + || (unk >= 16 && unk < 0x15) + || (unk >= 25 && unk < 41) + || (unk >= 98 && unk < 110) + || (unk >= 122 && unk < 126)) + return TRUE; + else + return FALSE; +} + +static bool8 sub_80592A4(void) +{ + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.running2 != 1) + return TRUE; + else + return FALSE; +} + +static bool8 PlayerIsAnimActive(void) +{ + return FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[gPlayerAvatar.mapObjectId]); +} + +static bool8 PlayerCheckIfAnimFinishedOrInactive(void) +{ + return FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]); +} + +static void player_set_x22(u8 a) +{ + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_22 = a; +} + +u8 player_get_x22(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_22; +} + +static void sub_8059348(u8 a) +{ + FieldObjectForceSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], a); +} + +void player_npc_set_state_and_x22_etc(u8 a, u8 b) +{ + if (!PlayerIsAnimActive()) + { + player_set_x22(b); + FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], a); + } +} + +void PlayerGoSpeed0(u8 a) +{ + player_npc_set_state_and_x22_etc(GetGoSpeed0AnimId(a), 2); +} + +void sub_80593C4(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_8060744(a), 2); +} + +void npc_use_some_d2s(u8 a) +{ + player_npc_set_state_and_x22_etc(d2s_08064034(a), 2); +} + +void sub_80593F4(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_806079C(a), 2); +} + +void sub_805940C(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_80607F4(a), 2); +} + +void PlayerOnBikeCollide(u8 a) +{ + PlayCollisionSoundIfNotFacingWarp(a); + player_npc_set_state_and_x22_etc(GetStepInPlaceDelay16AnimId(a), 2); +} + +static void PlayerNotOnBikeCollide(u8 a) +{ + PlayCollisionSoundIfNotFacingWarp(a); + player_npc_set_state_and_x22_etc(GetStepInPlaceDelay32AnimId(a), 2); +} + +void PlayerFaceDirection(u8 a) +{ + player_npc_set_state_and_x22_etc(GetFaceDirectionAnimId(a), 1); +} + +void PlayerTurnInPlace(u8 a) +{ + player_npc_set_state_and_x22_etc(GetStepInPlaceDelay8AnimId(a), 1); +} + +void PlayerJumpLedge(u8 a) +{ + PlaySE(SE_DANSA); + player_npc_set_state_and_x22_etc(GetJumpLedgeAnimId(a), 8); +} + +void sub_80594C0(void) +{ + if (gPlayerAvatar.running1 == 2 || gPlayerAvatar.running1 == 0) + { + if (player_should_look_direction_be_enforced_upon_movement()) + sub_8059348(GetFaceDirectionAnimId(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18)); + } +} + +void sub_8059504(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_80609D8(a), 1); +} + +void sub_805951C(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_8060A04(a), 1); +} + +void sub_8059534(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_8060A30(a), 1); +} + +void sub_805954C(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + player_npc_set_state_and_x22_etc(sub_8060A5C(a), 1); +} + +void sub_8059570(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + player_npc_set_state_and_x22_etc(sub_8060A88(a), 2); +} + +void sub_8059594(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + player_npc_set_state_and_x22_etc(sub_8060AB4(a), 8); +} + +void sub_80595B8(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + player_npc_set_state_and_x22_etc(sub_8060878(a), 1); +} + +void sub_80595DC(u8 a) +{ + PlaySE(SE_WALL_HIT); + player_npc_set_state_and_x22_etc(sub_8060AE0(a), 2); +} + +void sub_8059600(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_8060B0C(a), 2); +} + +void sub_8059618(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_8060B38(a), 2); +} + +void sub_8059630(u8 a) +{ + player_npc_set_state_and_x22_etc(sub_8060B64(a), 2); +} + +static void PlayCollisionSoundIfNotFacingWarp(u8 a) +{ + s16 x, y; + u8 unk = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E; + + if (!gUnknown_0830FC34[a - 1](unk)) + { + if (a == 2) + { + PlayerGetDestCoords(&x, &y); + MoveCoords(2, &x, &y); + if (is_tile_x69_2_warp_door(MapGridGetMetatileBehaviorAt(x, y))) + return; + } + PlaySE(SE_WALL_HIT); + } +} + +void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y) +{ + *x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; + *y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; + MoveCoords(player_get_direction_lower_nybble(), x, y); +} + +void PlayerGetDestCoords(s16 *x, s16 *y) +{ + *x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; + *y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; +} + +u8 player_get_direction_lower_nybble(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18; +} + +u8 player_get_direction_upper_nybble(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].placeholder18; +} + +u8 PlayerGetZCoord(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].elevation; +} + +static void unref_sub_8059790(s16 a, s16 b) +{ + sub_805C058(&gMapObjects[gPlayerAvatar.mapObjectId], a, b); +} + +u8 TestPlayerAvatarFlags(u8 a) +{ + return gPlayerAvatar.flags & a; +} + +u8 sub_80597D0(void) +{ + return gPlayerAvatar.flags; +} + +u8 GetPlayerAvatarObjectId(void) +{ + return gPlayerAvatar.spriteId; +} + +void sub_80597E8(void) +{ + ForcedMovement_None(); +} + +void sub_80597F4(void) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + npc_clear_strange_bits(playerMapObj); + FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); + if (TestPlayerAvatarFlags(6)) + { + sub_80E6084(); + sub_80E6010(0); + } +} + +u8 sub_805983C(u8 a, u8 b) +{ + return gUnknown_0830FC44[a][b]; +} + +static u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 a, u8 b) +{ + return gUnknown_0830FC54[a][b]; +} + +u8 GetPlayerAvatarGraphicsIdByStateId(u8 a) +{ + return GetPlayerAvatarGraphicsIdByStateIdAndGender(a, gPlayerAvatar.gender); +} + +static u8 unref_sub_8059888(u8 a) +{ + switch (a) + { + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x70: + case 0x8A: + case 0xC0: + return FEMALE; + default: + return MALE; + } +} + +u8 GetPlayerAvatarGenderByGraphicsId(u8 a) +{ + switch (a) + { + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x70: + case 0x8A: + case 0xC0: + return FEMALE; + default: + return MALE; + } +} + +bool8 PartyHasMonWithSurf(void) +{ + u8 i; + + if (!TestPlayerAvatarFlags(8)) + { + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0) + break; + if (pokemon_has_move(&gPlayerParty[i], 0x39)) + return TRUE; + } + } + return FALSE; +} + +bool8 IsPlayerSurfingNorth(void) +{ + if (player_get_direction_upper_nybble() == 2 && TestPlayerAvatarFlags(8)) + return TRUE; + else + return FALSE; +} + +bool8 IsPlayerFacingSurfableFishableWater(void) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + s16 x = playerMapObj->coords2.x; + s16 y = playerMapObj->coords2.y; + + MoveCoords(playerMapObj->mapobj_unk_18, &x, &y); + if (npc_block_way(playerMapObj, x, y, playerMapObj->mapobj_unk_18) == 3 && PlayerGetZCoord() == 3 + && MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(x, y))) + return TRUE; + else + return FALSE; +} + +void ClearPlayerAvatarInfo(void) +{ + //TODO: 0x24 should be the size of gPlayerAvatar + memset(&gPlayerAvatar, 0, 0x24); +} + +void SetPlayerAvatarStateMask(u8 a) +{ + gPlayerAvatar.flags &= 0xE0; + gPlayerAvatar.flags |= a; +} + +static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 a, u8 gender) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0830FC64[gender][i][0] == a) + return gUnknown_0830FC64[gender][i][1]; + } + return 1; +} + +u8 GetPlayerAvatarGraphicsIdByCurrentState(void) +{ + u8 i; + u8 r5 = gPlayerAvatar.flags; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0830FC64[gPlayerAvatar.gender][i][1] & r5) + return gUnknown_0830FC64[gPlayerAvatar.gender][i][0]; + } + return 0; +} + +void SetPlayerAvatarExtraStateTransition(u8 a, u8 b) +{ + u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender); + + gPlayerAvatar.bike |= unk | b; + DoPlayerAvatarTransition(); +} + +void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d) +{ + struct UnknownStruct s; + u8 mapObjectId; + struct MapObject *mapObject; + + s.unk0 = 0xFF; + s.unk1 = GetPlayerAvatarGraphicsIdByStateIdAndGender(0, d); + s.unk4 = a - 7; + s.unk6 = b - 7; + s.unk8 = 0; + s.unk9 = 11; + s.unkA_0 = 0; + s.unkA_4 = 0; + s.unkC = 0; + s.unkE = 0; + s.unk10 = 0; + s.unk14 = 0; + mapObjectId = SpawnSpecialFieldObject(&s); + mapObject = &gMapObjects[mapObjectId]; + mapObject->mapobj_bit_16 = 1; + mapObject->mapobj_unk_1B = sub_8126B54(); + FieldObjectTurn(mapObject, c); + ClearPlayerAvatarInfo(); + gPlayerAvatar.running2 = 0; + gPlayerAvatar.running1 = 0; + gPlayerAvatar.mapObjectId = mapObjectId; + gPlayerAvatar.spriteId = mapObject->spriteId; + gPlayerAvatar.gender = d; + SetPlayerAvatarStateMask(0x21); +} + +void sub_8059B88(u8 a) +{ + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = a; + if (TestPlayerAvatarFlags(8)) + gSprites[gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A].invisible = a; +} + +void sub_8059BF4(void) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(5)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); +} + +void sub_8059C3C(u8 a) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(6)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDE8(a)); +} + +void sub_8059C94(u8 a) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(2)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FD98(a)); + SeekSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 1); +} + +void sub_8059D08(u8 a) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(7)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], FieldObjectDirectionToImageAnimId(a)); +} + +static void sub_8059D60(struct MapObject *a) +{ + s16 x; + s16 y; + u8 r6; + u8 r8 = a->mapobj_unk_1E; + + for (x = 0, r6 = 1; x < 4; x++, r6++) + { + if (gUnknown_0830FC78[x](r8) && r6 == a->placeholder18) + { + x = a->coords2.x; + y = a->coords2.y; + MoveCoords(r6, &x, &y); + sub_8126BC4(a->mapobj_unk_1B, r6, x, y); + return; + } + } + objid_set_invisible(a->mapobj_unk_1B); +} + +/* Strength */ + +static void sub_8059E2C(u8 taskId); + +static void StartStrengthAnim(u8 a, u8 b) +{ + u8 taskId = CreateTask(sub_8059E2C, 0xFF); + + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = b; + sub_8059E2C(taskId); +} + +static void sub_8059E2C(u8 taskId) +{ + while (gUnknown_0830FC88[gTasks[taskId].data[0]](&gTasks[taskId], + &gMapObjects[gPlayerAvatar.mapObjectId], + &gMapObjects[gTasks[taskId].data[1]])) + ; +} + +u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c) +{ + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return 0; +} + +u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c) +{ + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(b) + && !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(c)) + { + FieldObjectClearAnimIfSpecialAnimFinished(b); + FieldObjectClearAnimIfSpecialAnimFinished(c); + FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId(task->data[2])); + FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId(task->data[2])); + gUnknown_0202FF84.x = c->coords2.x; + gUnknown_0202FF84.y = c->coords2.y; + gUnknown_0202FF84.unk8 = c->elevation; + gUnknown_0202FF84.unkC = gSprites[c->spriteId].oam.priority; + FieldEffectStart(10); + PlaySE(SE_W070); + task->data[0]++; + } + return 0; +} + +u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) +{ + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(b) + && FieldObjectCheckIfSpecialAnimFinishedOrInactive(c)) + { + FieldObjectClearAnimIfSpecialAnimFinished(b); + FieldObjectClearAnimIfSpecialAnimFinished(c); + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + DestroyTask(FindTaskIdByFunc(sub_8059E2C)); + } + return 0; +} + +/* Some field effect */ + +static void sub_8059FB4(u8 taskId); + +static void sub_8059F94(void) +{ + u8 taskId = CreateTask(sub_8059FB4, 0xFF); + + sub_8059FB4(taskId); +} + +static void sub_8059FB4(u8 taskId) +{ + while (gUnknown_0830FC94[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) + ; +} + +u8 sub_805A000(struct Task *task, struct MapObject *mapObject) +{ + gPlayerAvatar.unk6 = 1; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + PlaySE(SE_DANSA); + FieldObjectSetSpecialAnim(mapObject, sub_806084C(mapObject->mapobj_unk_18)); + task->data[1]++; + if (task->data[1] > 1) + { + gPlayerAvatar.unk6 = 0; + gPlayerAvatar.bike |= 0x20; + DestroyTask(FindTaskIdByFunc(sub_8059FB4)); + } + } + return 0; +} + +/* Some field effect */ + +static void sub_805A08C(u8 taskId); + +static void sub_805A06C(void) +{ + u8 taskId = CreateTask(sub_805A08C, 0xFF); + + sub_805A08C(taskId); +} + +static void sub_805A08C(u8 taskId) +{ + while (gUnknown_0830FC98[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) + ; +} + +u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject) +{ + task->data[0]++; + task->data[1] = mapObject->placeholder18; + gPlayerAvatar.unk6 = 1; + ScriptContext2_Enable(); + PlaySE(SE_TK_WARPIN); + return 1; +} + +u8 sub_805A100(struct Task *task, struct MapObject *mapObject) +{ + u8 directions[4]; + + memcpy(directions, gUnknown_0830FCA8, sizeof(directions)); + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + u8 direction; + + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(direction = directions[mapObject->placeholder18 - 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 0; +} + +u8 sub_805A178(struct Task *task, struct MapObject *mapObject) +{ + u8 arr[5]; + + memcpy(arr, gUnknown_0830FCAC, sizeof(arr)); + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + FieldObjectSetSpecialAnim(mapObject, arr[task->data[2]]); + task->data[0] = 1; + } + return 0; +} + +u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject) +{ + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(GetOppositeDirection(task->data[1]))); + ScriptContext2_Disable(); + gPlayerAvatar.unk6 = 0; + DestroyTask(FindTaskIdByFunc(sub_805A08C)); + } + return 0; +} + +/* Some Field effect */ + +static void taskFF_0805D1D4(u8 taskId); +static void sub_805A2D0(u8 taskId); + +void sub_805A20C(u8 a) +{ + u8 taskId; + + ScriptContext2_Enable(); + sav1_reset_battle_music_maybe(); + sub_8053F84(); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_3; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_0; + gPlayerAvatar.unk6 = 1; + taskId = CreateTask(taskFF_0805D1D4, 0xFF); + gTasks[taskId].data[0] = a; + taskFF_0805D1D4(taskId); +} + +static void taskFF_0805D1D4(u8 taskId) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerMapObj)) + { + if (!FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) + return; + } + sub_8127ED0(playerMapObj->mapobj_unk_1A, 2); + FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0(gTasks[taskId].data[0])); + gTasks[taskId].func = sub_805A2D0; +} + +static void sub_805A2D0(u8 taskId) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) + { + sub_805B980(playerMapObj, GetPlayerAvatarGraphicsIdByStateId(0)); + FieldObjectSetSpecialAnim(playerMapObj, GetFaceDirectionAnimId(playerMapObj->mapobj_unk_18)); + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + DestroySprite(&gSprites[playerMapObj->mapobj_unk_1A]); + DestroyTask(taskId); + } +} + +/* Fishing */ + +static void Task_Fishing(u8 taskId); +static void sub_805A954(void); + +void StartFishing(u8 a) +{ + u8 taskId = CreateTask(Task_Fishing, 0xFF); + + gTasks[taskId].data[15] = a; + Task_Fishing(taskId); +} + +static void Task_Fishing(u8 taskId) +{ + while (gUnknown_0830FCB4[gTasks[taskId].data[0]](&gTasks[taskId])) + ; +} + +u8 Fishing1(struct Task *task) +{ + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return 0; +} + +u8 Fishing2(struct Task *task) +{ + s16 arr1[3]; + s16 arr2[3]; + struct MapObject *playerMapObj; + + memcpy(arr1, gUnknown_0830FCF4, sizeof(arr1)); + memcpy(arr2, gUnknown_0830FCFA, sizeof(arr2)); + task->data[12] = 0; + task->data[13] = arr1[task->data[15]] + (Random() % arr2[task->data[15]]); + task->data[14] = gMapObjects[gPlayerAvatar.mapObjectId].graphicsId; + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + FieldObjectClearAnimIfSpecialAnimActive(playerMapObj); + playerMapObj->mapobj_bit_11 = 1; + sub_8059C3C(playerMapObj->mapobj_unk_18); + task->data[0]++; + return 0; +} + +u8 Fishing3(struct Task *task) +{ + sub_805A954(); + task->data[1]++; + if (task->data[1] > 0x3B) + task->data[0]++; + return 0; +} + +u8 Fishing4(struct Task *task) +{ + u32 randVal; + + MenuDisplayMessageBox(); + task->data[0]++; + task->data[1] = 0; + task->data[2] = 0; + randVal = Random(); + randVal %= 10; + task->data[3] = randVal + 1; + if (task->data[12] == 0) + task->data[3] = randVal + 4; + if (task->data[3] > 9) + task->data[3] = 10; + return 1; +} + +u8 Fishing5(struct Task *task) +{ + u8 dot[2]; + + memcpy(dot, gUnknown_0830FD00, sizeof(dot)); + sub_805A954(); + task->data[1]++; + if (gMain.newKeys & A_BUTTON) + { + task->data[0] = 11; + if (task->data[12] != 0) + task->data[0] = 12; + return 1; + } + else + { + if (task->data[1] > 0x13) + { + task->data[1] = 0; + if (task->data[2] >= task->data[3]) + { + task->data[0]++; + if (task->data[12] != 0) + task->data[0]++; + task->data[12]++; + } + else + { + MenuPrint(dot, task->data[2] + 4, 15); + task->data[2]++; + } + } + return 0; + } +} + +u8 Fishing6(struct Task *task) +{ + sub_805A954(); + task->data[0]++; + if (!GetFishingWildMonListHeader() || (Random() & 1)) + task->data[0] = 11; + else + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FE08(player_get_direction_lower_nybble())); + return 1; +} + +u8 Fishing7(struct Task *task) +{ + sub_805A954(); + MenuPrint(gOtherText_OhABite, 4, 17); + task->data[0]++; + task->data[1] = 0; + return 0; +} + +u8 Fishing8(struct Task *task) +{ + s16 arr[3]; + + memcpy(arr, gUnknown_0830FD02, sizeof(arr)); + sub_805A954(); + task->data[1]++; + if (task->data[1] >= arr[task->data[15]]) + task->data[0] = 12; + else if (gMain.newKeys & A_BUTTON) + task->data[0]++; + return 0; +} + +u8 Fishing9(struct Task *task) +{ + s16 arr[3][2]; + + memcpy(arr, gUnknown_0830FD08, sizeof(arr)); + sub_805A954(); + task->data[0]++; + if (task->data[12] < task->data[13]) + { + task->data[0] = 3; + } + else if (task->data[12] < 2) + { + s16 randVal = Random() % 100; + + if (arr[task->data[15]][task->data[12]] > randVal) + task->data[0] = 3; + } + return 0; +} + +u8 Fishing10(struct Task *task) +{ + sub_805A954(); + sub_8072044(gOtherText_PokeOnHook); + MenuDisplayMessageBox(); + task->data[0]++; + task->data[1] = 0; + return 0; +} + +u8 Fishing11(struct Task *task) +{ + if (task->data[1] == 0) + { + sub_805A954(); + if (task->data[1] == 0) + { + if (MenuUpdateWindowText()) + { + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + sub_805B980(playerMapObj, task->data[14]); + FieldObjectTurn(playerMapObj, playerMapObj->placeholder18); + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_3) + sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0); + gSprites[gPlayerAvatar.spriteId].pos2.x = 0; + gSprites[gPlayerAvatar.spriteId].pos2.y = 0; + MenuZeroFillScreen(); + task->data[1]++; + return 0; + } + else + { + if (task->data[1] == 0) + return 0; + } + } + } + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + FishingWildEncounter(task->data[15]); + sub_80BE97C(1); + DestroyTask(FindTaskIdByFunc(Task_Fishing)); + return 0; +} + +u8 Fishing12(struct Task *task) +{ + sub_805A954(); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDF8(player_get_direction_lower_nybble())); + sub_8072044(gOtherText_NotEvenANibble); + task->data[0] = 13; + return 1; +} + +u8 Fishing13(struct Task *task) +{ + sub_805A954(); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDF8(player_get_direction_lower_nybble())); + sub_8072044(gOtherText_ItGotAway); + task->data[0]++; + return 1; +} + +u8 Fishing14(struct Task *task) +{ + sub_805A954(); + MenuDisplayMessageBox(); + task->data[0]++; + return 0; +} + +u8 Fishing15(struct Task *task) +{ + sub_805A954(); + if (gSprites[gPlayerAvatar.spriteId].animEnded) + { + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + sub_805B980(playerMapObj, task->data[14]); + FieldObjectTurn(playerMapObj, playerMapObj->placeholder18); + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_3) + sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0); + gSprites[gPlayerAvatar.spriteId].pos2.x = 0; + gSprites[gPlayerAvatar.spriteId].pos2.y = 0; + task->data[0]++; + } + return 0; +} + +u8 Fishing16(struct Task *task) +{ + if (MenuUpdateWindowText()) + { + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + sub_806451C(); + MenuZeroFillScreen(); + sub_80BE97C(0); + DestroyTask(FindTaskIdByFunc(Task_Fishing)); + } + return 0; +} + +static void sub_805A954(void) +{ + struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; + 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 (player_get_direction_lower_nybble() == 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_3) + sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 1, playerSprite->pos2.y); +} |