diff options
author | YamaArashi <shadow962@live.com> | 2016-11-01 10:08:48 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-11-01 10:16:34 -0700 |
commit | 6f0e42a91aeeedd64725ce57e3dad6a38421d8e9 (patch) | |
tree | dcea69ec49430f004c17ff71b77587cafd78c69a /asm/field_player_avatar.s | |
parent | fef81187dce23adc635d7f4b7fd82298eab09ec2 (diff) |
split asm files
Diffstat (limited to 'asm/field_player_avatar.s')
-rw-r--r-- | asm/field_player_avatar.s | 5452 |
1 files changed, 5452 insertions, 0 deletions
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s new file mode 100644 index 000000000..38c27072b --- /dev/null +++ b/asm/field_player_avatar.s @@ -0,0 +1,5452 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start FieldObjectCB_NoMovement2 +@ void FieldObjectCB_NoMovement2(struct obj *object) +FieldObjectCB_NoMovement2: @ 808A998 + 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, =0x02037350 + adds r0, r2 + ldr r2, =FieldObjectCB2_NoMovement2 + bl FieldObjectStep + pop {r0} + bx r0 + .pool + thumb_func_end FieldObjectCB_NoMovement2 + + thumb_func_start FieldObjectCB2_NoMovement2 +FieldObjectCB2_NoMovement2: @ 808A9BC + movs r0, 0 + bx lr + thumb_func_end FieldObjectCB2_NoMovement2 + + thumb_func_start player_step +@ void player_step(int dpad_direction, int buttons_new, int buttons_held) +player_step: @ 808A9C0 + 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, =0x02037590 + ldrb r1, [r4, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r5, r0, r1 + adds r0, r5, 0 + bl sub_808C280 + ldrb r0, [r4, 0x6] + cmp r0, 0 + bne _0808AA26 + adds r0, r7, 0 + adds r1, r6, 0 + bl sub_8119C3C + adds r0, r5, 0 + mov r1, r8 + bl TryInterruptFieldObjectSpecialAnim + lsls r0, 24 + cmp r0, 0 + bne _0808AA26 + adds r0, r5, 0 + bl npc_clear_strange_bits + bl DoPlayerAvatarTransition + bl TryDoMetatileBehaviorForcedMovment + lsls r0, 24 + cmp r0, 0 + bne _0808AA26 + mov r0, r8 + adds r1, r7, 0 + adds r2, r6, 0 + bl MovePlayerAvatarUsingKeypadInput + bl PlayerAllowForcedMovementIfMovingSameDirection +_0808AA26: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .pool + thumb_func_end player_step + + thumb_func_start TryInterruptFieldObjectSpecialAnim +@ bool8 TryInterruptFieldObjectSpecialAnim(struct npc_state *fieldObject, u8 direction) +TryInterruptFieldObjectSpecialAnim: @ 808AA38 + push {r4-r6,lr} + adds r4, r0, 0 + lsls r1, 24 + lsrs r5, r1, 24 + adds r6, r5, 0 + bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive + lsls r0, 24 + cmp r0, 0 + beq _0808AA92 + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + bne _0808AA92 + 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 _0808AA70 + cmp r5, 0 + bne _0808AA74 +_0808AA70: + movs r0, 0x1 + b _0808AA94 +_0808AA74: + ldrb r0, [r4, 0x18] + lsrs r0, 4 + cmp r0, r5 + beq _0808AA84 +_0808AA7C: + adds r0, r4, 0 + bl FieldObjectClearAnim + b _0808AA92 +_0808AA84: + adds r0, r6, 0 + bl sub_808B028 + lsls r0, 24 + cmp r0, 0 + beq _0808AA7C + b _0808AA70 +_0808AA92: + movs r0, 0 +_0808AA94: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end TryInterruptFieldObjectSpecialAnim + + thumb_func_start npc_clear_strange_bits +@ void npc_clear_strange_bits(struct npc_state *fieldObject) +npc_clear_strange_bits: @ 808AA9C + 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, =0x02037590 + ldrb r1, [r2] + movs r0, 0x7F + ands r0, r1 + strb r0, [r2] + bx lr + .pool + thumb_func_end npc_clear_strange_bits + + thumb_func_start MovePlayerAvatarUsingKeypadInput +@ void MovePlayerAvatarUsingKeypadInput(int dpad_direction, int buttons_new, int buttons_held) +MovePlayerAvatarUsingKeypadInput: @ 808AAC0 + 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, =0x02037590 + ldrb r1, [r0] + movs r0, 0x6 + ands r0, r1 + cmp r0, 0 + beq _0808AAE8 + adds r0, r3, 0 + adds r1, r4, 0 + bl MovePlayerOnBike + b _0808AAF0 + .pool +_0808AAE8: + adds r0, r3, 0 + adds r1, r2, 0 + bl MovePlayerNotOnBike +_0808AAF0: + pop {r4} + pop {r0} + bx r0 + thumb_func_end MovePlayerAvatarUsingKeypadInput + + thumb_func_start PlayerAllowForcedMovementIfMovingSameDirection +@ void PlayerAllowForcedMovementIfMovingSameDirection() +PlayerAllowForcedMovementIfMovingSameDirection: @ 808AAF8 + push {lr} + ldr r2, =0x02037590 + ldrb r0, [r2, 0x2] + cmp r0, 0x2 + bne _0808AB0A + ldrb r1, [r2] + movs r0, 0xDF + ands r0, r1 + strb r0, [r2] +_0808AB0A: + pop {r0} + bx r0 + .pool + thumb_func_end PlayerAllowForcedMovementIfMovingSameDirection + + thumb_func_start TryDoMetatileBehaviorForcedMovment +@ bool8 TryDoMetatileBehaviorForcedMovment() +TryDoMetatileBehaviorForcedMovment: @ 808AB14 + push {r4,lr} + ldr r4, =gUnknown_08497444 + 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 + .pool + thumb_func_end TryDoMetatileBehaviorForcedMovment + + thumb_func_start GetForcedMovementByMetatileBehavior +@ u8 GetForcedMovementByMetatileBehavior() +GetForcedMovementByMetatileBehavior: @ 808AB38 + push {r4-r6,lr} + ldr r3, =0x02037590 + ldrb r1, [r3] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + bne _0808AB8A + ldr r2, =0x02037350 + 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, =gUnknown_084973FC +_0808AB58: + 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 _0808AB80 + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r0, 24 + b _0808AB8C + .pool +_0808AB80: + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x11 + bls _0808AB58 +_0808AB8A: + movs r0, 0 +_0808AB8C: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end GetForcedMovementByMetatileBehavior + + thumb_func_start ForcedMovement_None +ForcedMovement_None: @ 808AB94 + push {r4,lr} + ldr r4, =0x02037590 + ldrb r1, [r4] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _0808ABCE + ldrb r1, [r4, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + 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] +_0808ABCE: + movs r0, 0 + pop {r4} + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_None + + thumb_func_start DoForcedMovement +DoForcedMovement: @ 808ABE0 + 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, =0x02037590 + 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 _0808AC3C + bl ForcedMovement_None + cmp r4, 0x4 + bhi _0808AC24 + movs r0, 0 + b _0808AC48 + .pool +_0808AC24: + cmp r7, 0x6 + bne _0808AC2E + adds r0, r5, 0 + bl PlayerJumpLedge +_0808AC2E: + ldrb r0, [r6] + mov r1, r10 + orrs r0, r1 + strb r0, [r6] + movs r0, 0x2 + strb r0, [r6, 0x2] + b _0808AC46 +_0808AC3C: + movs r0, 0x2 + strb r0, [r6, 0x2] + adds r0, r5, 0 + bl _call_via_r9 +_0808AC46: + movs r0, 0x1 +_0808AC48: + 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: @ 808AC58 + push {lr} + adds r1, r0, 0 + ldr r0, =0x02037590 + ldrb r2, [r0, 0x5] + lsls r0, r2, 3 + adds r0, r2 + lsls r0, 2 + ldr r2, =0x02037350 + 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 + .pool + thumb_func_end DoForcedMovementInCurrentDirection + + thumb_func_start ForcedMovement_Slip +ForcedMovement_Slip: @ 808AC8C + push {lr} + ldr r0, =PlayerGoSpeed1 + bl DoForcedMovementInCurrentDirection + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_Slip + + thumb_func_start ForcedMovement_WalkSouth +ForcedMovement_WalkSouth: @ 808ACA0 + push {lr} + ldr r1, =PlayerGoSpeed0 + movs r0, 0x1 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_WalkSouth + + thumb_func_start ForcedMovement_WalkNorth +ForcedMovement_WalkNorth: @ 808ACB8 + push {lr} + ldr r1, =PlayerGoSpeed0 + movs r0, 0x2 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_WalkNorth + + thumb_func_start ForcedMovement_WalkWest +ForcedMovement_WalkWest: @ 808ACD0 + push {lr} + ldr r1, =PlayerGoSpeed0 + movs r0, 0x3 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_WalkWest + + thumb_func_start ForcedMovement_WalkEast +ForcedMovement_WalkEast: @ 808ACE8 + push {lr} + ldr r1, =PlayerGoSpeed0 + movs r0, 0x4 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_WalkEast + + thumb_func_start ForcedMovement_PushedSouthByCurrent +ForcedMovement_PushedSouthByCurrent: @ 808AD00 + push {lr} + ldr r1, =PlayerGoSpeed2 + movs r0, 0x1 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_PushedSouthByCurrent + + thumb_func_start ForcedMovement_PushedNorthByCurrent +ForcedMovement_PushedNorthByCurrent: @ 808AD18 + push {lr} + ldr r1, =PlayerGoSpeed2 + movs r0, 0x2 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_PushedNorthByCurrent + + thumb_func_start ForcedMovement_PushedWestByCurrent +ForcedMovement_PushedWestByCurrent: @ 808AD30 + push {lr} + ldr r1, =PlayerGoSpeed2 + movs r0, 0x3 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_PushedWestByCurrent + + thumb_func_start ForcedMovement_PushedEastByCurrent +ForcedMovement_PushedEastByCurrent: @ 808AD48 + push {lr} + ldr r1, =PlayerGoSpeed2 + movs r0, 0x4 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_PushedEastByCurrent + + thumb_func_start ForcedMovement_Slide +ForcedMovement_Slide: @ 808AD60 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x02037590 + ldrb r3, [r2, 0x5] + lsls r2, r3, 3 + adds r2, r3 + lsls r2, 2 + ldr r3, =0x02037350 + 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 + .pool + thumb_func_end ForcedMovement_Slide + + thumb_func_start ForcedMovement_SlideSouth +ForcedMovement_SlideSouth: @ 808AD98 + push {lr} + ldr r1, =PlayerGoSpeed1 + movs r0, 0x1 + bl ForcedMovement_Slide + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_SlideSouth + + thumb_func_start ForcedMovement_SlideNorth +ForcedMovement_SlideNorth: @ 808ADB0 + push {lr} + ldr r1, =PlayerGoSpeed1 + movs r0, 0x2 + bl ForcedMovement_Slide + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_SlideNorth + + thumb_func_start ForcedMovement_SlideWest +ForcedMovement_SlideWest: @ 808ADC8 + push {lr} + ldr r1, =PlayerGoSpeed1 + movs r0, 0x3 + bl ForcedMovement_Slide + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_SlideWest + + thumb_func_start ForcedMovement_SlideEast +ForcedMovement_SlideEast: @ 808ADE0 + push {lr} + ldr r1, =PlayerGoSpeed1 + movs r0, 0x4 + bl ForcedMovement_Slide + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end ForcedMovement_SlideEast + + thumb_func_start ForcedMovement_0xBB +ForcedMovement_0xBB: @ 808ADF8 + push {lr} + bl sub_808C4D8 + movs r0, 0x1 + pop {r1} + bx r1 + thumb_func_end ForcedMovement_0xBB + + thumb_func_start ForcedMovement_0xBC +ForcedMovement_0xBC: @ 808AE04 + push {lr} + bl sub_808C5B0 + movs r0, 0x1 + pop {r1} + bx r1 + thumb_func_end ForcedMovement_0xBC + + thumb_func_start ForcedMovement_MuddySlope +ForcedMovement_MuddySlope: @ 808AE10 + push {r4,lr} + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r4, r0, r1 + ldrb r1, [r4, 0x18] + movs r0, 0xF0 + ands r0, r1 + cmp r0, 0x20 + bne _0808AE36 + bl sub_811A138 + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3 + bgt _0808AE60 +_0808AE36: + movs r0, 0 + bl sub_811A114 + ldrb r0, [r4, 0x1] + movs r1, 0x2 + orrs r0, r1 + strb r0, [r4, 0x1] + ldr r1, =PlayerGoSpeed1 + movs r0, 0x1 + bl DoForcedMovement + lsls r0, 24 + lsrs r0, 24 + b _0808AE62 + .pool +_0808AE60: + movs r0, 0 +_0808AE62: + pop {r4} + pop {r1} + bx r1 + thumb_func_end ForcedMovement_MuddySlope + + thumb_func_start MovePlayerNotOnBike +@ void MovePlayerNotOnBike(u8 direction, u8 heldKeys) +MovePlayerNotOnBike: @ 808AE68 + 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, =gUnknown_08497490 + 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 + .pool + thumb_func_end MovePlayerNotOnBike + + thumb_func_start CheckMovementInputNotOnBike +@ u8 CheckMovementInputNotOnBike(u8 direction) +CheckMovementInputNotOnBike: @ 808AE98 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0 + bne _0808AEB0 + ldr r0, =0x02037590 + strb r4, [r0, 0x2] + movs r0, 0 + b _0808AED2 + .pool +_0808AEB0: + bl player_get_direction_upper_nybble + lsls r0, 24 + lsrs r0, 24 + cmp r4, r0 + beq _0808AECC + ldr r1, =0x02037590 + ldrb r0, [r1, 0x2] + cmp r0, 0x2 + beq _0808AECC + movs r0, 0x1 + b _0808AED0 + .pool +_0808AECC: + ldr r1, =0x02037590 + movs r0, 0x2 +_0808AED0: + strb r0, [r1, 0x2] +_0808AED2: + pop {r4} + pop {r1} + bx r1 + .pool + thumb_func_end CheckMovementInputNotOnBike + + thumb_func_start PlayerNotOnBikeNotMoving +@ void PlayerNotOnBikeNotMoving(u8 direction, u8 heldKeys) +PlayerNotOnBikeNotMoving: @ 808AEDC + 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 +@ void PlayerNotOnBikeTurningInPlace(u8 direction, u8 heldKeys) +PlayerNotOnBikeTurningInPlace: @ 808AEF0 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl PlayerTurnInPlace + pop {r0} + bx r0 + thumb_func_end PlayerNotOnBikeTurningInPlace + + thumb_func_start PlayerNotOnBikeMoving +@ void PlayerNotOnBikeMoving(u8 direction, u8 heldKeys) +PlayerNotOnBikeMoving: @ 808AF00 + push {r4-r6,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r1, 16 + lsrs r6, r1, 16 + adds r0, r5, 0 + bl CheckForPlayerAvatarCollision + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0 + beq _0808AF4E + cmp r4, 0x6 + bne _0808AF24 + adds r0, r5, 0 + bl PlayerJumpLedge + b _0808AFB6 +_0808AF24: + cmp r4, 0x4 + bne _0808AF3C + adds r0, r5, 0 + bl IsPlayerCollidingWithFarawayIslandMew + lsls r0, 24 + cmp r0, 0 + beq _0808AF3C + adds r0, r5, 0 + bl PlayerNotOnBikeCollideWithFarawayIslandMew + b _0808AFB6 +_0808AF3C: + subs r0, r4, 0x5 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bls _0808AFB6 + adds r0, r5, 0 + bl PlayerNotOnBikeCollide + b _0808AFB6 +_0808AF4E: + ldr r4, =0x02037590 + ldrb r1, [r4] + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + beq _0808AF68 + adds r0, r5, 0 + bl PlayerGoSpeed1 + b _0808AFB6 + .pool +_0808AF68: + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _0808AFB0 + movs r0, 0x2 + ands r6, r0 + cmp r6, 0 + beq _0808AFB0 + movs r0, 0x8C + lsls r0, 4 + bl FlagGet + lsls r0, 24 + cmp r0, 0 + beq _0808AFB0 + ldr r2, =0x02037350 + ldrb r1, [r4, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + ldrb r0, [r0, 0x1E] + bl IsRunningDisallowed + cmp r0, 0 + bne _0808AFB0 + adds r0, r5, 0 + bl PlayerRun + ldrb r1, [r4] + movs r0, 0x80 + orrs r0, r1 + strb r0, [r4] + b _0808AFB6 + .pool +_0808AFB0: + adds r0, r5, 0 + bl PlayerGoSpeed0 +_0808AFB6: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end PlayerNotOnBikeMoving + + thumb_func_start CheckForPlayerAvatarCollision +CheckForPlayerAvatarCollision: @ 808AFBC + push {r4-r6,lr} + sub sp, 0x8 + adds r6, r0, 0 + lsls r6, 24 + lsrs r6, 24 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + 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 + .pool + thumb_func_end CheckForPlayerAvatarCollision + + thumb_func_start sub_808B028 +sub_808B028: @ 808B028 + push {r4-r6,lr} + sub sp, 0x8 + adds r6, r0, 0 + lsls r6, 24 + lsrs r6, 24 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + 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 sub_808B164 + lsls r0, 24 + lsrs r0, 24 + add sp, 0x8 + pop {r4-r6} + pop {r1} + bx r1 + .pool + thumb_func_end sub_808B028 + + thumb_func_start CheckForFieldObjectCollision +@ u8 CheckForFieldObjectCollision(struct npc_state *fieldObject, u16 x, u16 y, u8 direction, u8 metatileBehavior) +CheckForFieldObjectCollision: @ 808B094 + 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 _0808B0E4 + adds r0, r5, 0 + adds r1, r4, 0 + adds r2, r6, 0 + bl sub_808B1BC + lsls r0, 24 + cmp r0, 0 + beq _0808B0E4 + movs r0, 0x5 + b _0808B152 +_0808B0E4: + 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 _0808B108 + movs r0, 0x2B + bl sav12_xor_increment + movs r0, 0x6 + b _0808B152 +_0808B108: + mov r0, sp + ldrb r0, [r0] + cmp r0, 0x4 + bne _0808B124 + mov r0, r8 + adds r1, r7, 0 + adds r2, r6, 0 + bl sub_808B238 + lsls r0, 24 + cmp r0, 0 + beq _0808B124 + movs r0, 0x7 + b _0808B152 +_0808B124: + mov r0, sp + ldrb r0, [r0] + cmp r0, 0 + bne _0808B14E + asrs r5, 16 + asrs r4, 16 + adds r0, r6, 0 + adds r1, r5, 0 + adds r2, r4, 0 + bl CheckForRotatingGatePuzzleCollision + cmp r0, 0 + beq _0808B142 + movs r0, 0x8 + b _0808B152 +_0808B142: + adds r0, r5, 0 + adds r1, r4, 0 + mov r2, r10 + mov r3, sp + bl check_acro_bike_metatile +_0808B14E: + mov r0, sp + ldrb r0, [r0] +_0808B152: + 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_808B164 +sub_808B164: @ 808B164 + push {r4-r7,lr} + sub sp, 0x4 + ldr r4, [sp, 0x18] + lsls r3, 24 + lsrs r6, r3, 24 + lsls r4, 24 + lsrs r7, r4, 24 + lsls r1, 16 + asrs r5, r1, 16 + lsls r2, 16 + 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, 0 + bne _0808B1AE + adds r0, r6, 0 + adds r1, r5, 0 + adds r2, r4, 0 + bl sub_80FBFD4 + cmp r0, 0 + beq _0808B1A2 + movs r0, 0x8 + b _0808B1B2 +_0808B1A2: + adds r0, r5, 0 + adds r1, r4, 0 + adds r2, r7, 0 + mov r3, sp + bl check_acro_bike_metatile +_0808B1AE: + mov r0, sp + ldrb r0, [r0] +_0808B1B2: + add sp, 0x4 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_808B164 + + thumb_func_start sub_808B1BC +@ bool8 sub_808B1BC(u16 x, u16 y, u8 direction) +sub_808B1BC: @ 808B1BC + 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, =0x02037590 + ldrb r1, [r0] + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + beq _0808B20C + 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 _0808B20C + lsrs r0, r5, 16 + lsrs r1, r4, 16 + movs r2, 0x3 + bl GetFieldObjectIdByXYZ + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x10 + bne _0808B20C + adds r0, r6, 0 + bl sub_808C750 + movs r0, 0x1 + b _0808B20E + .pool +_0808B20C: + movs r0, 0 +_0808B20E: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_808B1BC + + thumb_func_start ShouldJumpLedge +@ bool8 ShouldJumpLedge(s16 x, s16 y, u8 direction) +ShouldJumpLedge: @ 808B214 + 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 _0808B230 + movs r0, 0 + b _0808B232 +_0808B230: + movs r0, 0x1 +_0808B232: + pop {r1} + bx r1 + thumb_func_end ShouldJumpLedge + + thumb_func_start sub_808B238 +sub_808B238: @ 808B238 + 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, =0x00000889 + bl FlagGet + lsls r0, 24 + cmp r0, 0 + beq _0808B2D8 + 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 _0808B2D8 + ldr r0, =0x02037350 + lsls r1, r6, 3 + adds r1, r6 + lsls r1, 2 + adds r4, r1, r0 + ldrb r0, [r4, 0x5] + cmp r0, 0x57 + bne _0808B2D8 + 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 _0808B2D8 + 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_8088F58 + lsls r0, 24 + cmp r0, 0 + bne _0808B2D8 + adds r0, r6, 0 + adds r1, r7, 0 + bl task_add_bump_boulder + movs r0, 0x1 + b _0808B2DA + .pool +_0808B2D8: + movs r0, 0 +_0808B2DA: + add sp, 0x4 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_808B238 + + thumb_func_start check_acro_bike_metatile +@ void check_acro_bike_metatile(s16 x, s16 y, u8 metatileBehavior, u8 *returnValue) +check_acro_bike_metatile: @ 808B2E4 + push {r4-r7,lr} + adds r6, r3, 0 + lsls r2, 24 + lsrs r5, r2, 24 + movs r4, 0 + ldr r7, =gUnknown_0849749C +_0808B2F0: + 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 _0808B314 + ldr r0, =gUnknown_084974B0 + adds r0, r4, r0 + ldrb r0, [r0] + strb r0, [r6] + b _0808B31E + .pool +_0808B314: + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x4 + bls _0808B2F0 +_0808B31E: + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end check_acro_bike_metatile + + thumb_func_start IsPlayerCollidingWithFarawayIslandMew +@ bool8 IsPlayerCollidingWithFarawayIslandMew(u8 direction) +IsPlayerCollidingWithFarawayIslandMew: @ 808B324 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r0, 24 + ldr r1, =0x02037590 + ldrb r2, [r1, 0x5] + lsls r1, r2, 3 + adds r1, r2 + lsls r1, 2 + ldr r5, =0x02037350 + adds r3, r1, r5 + ldrh r2, [r3, 0x10] + mov r1, sp + strh r2, [r1] + ldrh r1, [r3, 0x12] + mov r4, sp + adds r4, 0x2 + strh r1, [r4] + mov r1, sp + adds r2, r4, 0 + bl MoveCoords + movs r0, 0x1 + movs r1, 0x39 + movs r2, 0x1A + bl GetFieldObjectIdByLocalIdAndMap + lsls r0, 24 + lsrs r1, r0, 24 + adds r6, r4, 0 + cmp r1, 0x10 + beq _0808B3C0 + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + adds r3, r0, r5 + mov r0, sp + movs r1, 0x14 + ldrsh r2, [r3, r1] + movs r4, 0 + ldrsh r0, [r0, r4] + cmp r2, r0 + bne _0808B3C0 + movs r5, 0x16 + ldrsh r1, [r3, r5] + movs r4, 0 + ldrsh r0, [r6, r4] + ldrh r4, [r3, 0x16] + cmp r1, r0 + bne _0808B398 + movs r5, 0x10 + ldrsh r0, [r3, r5] + cmp r0, r2 + bne _0808B398 + movs r2, 0x12 + ldrsh r0, [r3, r2] + cmp r0, r1 + beq _0808B3C0 +_0808B398: + mov r0, sp + movs r5, 0x14 + ldrsh r1, [r3, r5] + movs r2, 0 + ldrsh r0, [r0, r2] + cmp r1, r0 + bne _0808B3C0 + lsls r0, r4, 16 + asrs r0, 16 + movs r4, 0 + ldrsh r1, [r6, r4] + cmp r0, r1 + bne _0808B3C0 + movs r0, 0x1 + b _0808B3C2 + .pool +_0808B3C0: + movs r0, 0 +_0808B3C2: + add sp, 0x4 + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end IsPlayerCollidingWithFarawayIslandMew + + thumb_func_start SetPlayerAvatarTransitionFlags +@ void SetPlayerAvatarTransitionFlags(u16 transitionFlags) +SetPlayerAvatarTransitionFlags: @ 808B3CC + push {lr} + lsls r0, 16 + lsrs r0, 16 + ldr r2, =0x02037590 + ldrb r1, [r2, 0x1] + orrs r0, r1 + strb r0, [r2, 0x1] + bl DoPlayerAvatarTransition + pop {r0} + bx r0 + .pool + thumb_func_end SetPlayerAvatarTransitionFlags + + thumb_func_start DoPlayerAvatarTransition +@ void DoPlayerAvatarTransition() +DoPlayerAvatarTransition: @ 808B3E8 + push {r4,r5,lr} + ldr r0, =0x02037590 + ldrb r4, [r0, 0x1] + cmp r4, 0 + beq _0808B428 + movs r5, 0 +_0808B3F4: + movs r0, 0x1 + ands r0, r4 + cmp r0, 0 + beq _0808B416 + ldr r0, =gUnknown_084974B8 + lsls r2, r5, 2 + adds r2, r0 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r0, r1 + ldr r1, [r2] + bl _call_via_r1 +_0808B416: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + lsrs r4, 1 + cmp r5, 0x7 + bls _0808B3F4 + ldr r1, =0x02037590 + movs r0, 0 + strb r0, [r1, 0x1] +_0808B428: + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end DoPlayerAvatarTransition + + thumb_func_start PlayerAvatarTransition_Dummy +@ void PlayerAvatarTransition_Dummy(struct npc_state *fieldObject) +PlayerAvatarTransition_Dummy: @ 808B43C + bx lr + thumb_func_end PlayerAvatarTransition_Dummy + + thumb_func_start PlayerAvatarTransition_Normal +@ void PlayerAvatarTransition_Normal(struct npc_state *fieldObject) +PlayerAvatarTransition_Normal: @ 808B440 + 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 FieldObjectSetGraphicsId + 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 +@ void PlayerAvatarTransition_MachBike(struct npc_state *fieldObject) +PlayerAvatarTransition_MachBike: @ 808B46C + 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 FieldObjectSetGraphicsId + 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_811A0D0 + pop {r4} + pop {r0} + bx r0 + thumb_func_end PlayerAvatarTransition_MachBike + + thumb_func_start PlayerAvatarTransition_AcroBike +@ void PlayerAvatarTransition_AcroBike(struct npc_state *fieldObject) +PlayerAvatarTransition_AcroBike: @ 808B4A0 + 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 FieldObjectSetGraphicsId + 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_811A0D0 + bl sub_811A188 + pop {r4} + pop {r0} + bx r0 + thumb_func_end PlayerAvatarTransition_AcroBike + + thumb_func_start PlayerAvatarTransition_Surfing +@ void PlayerAvatarTransition_Surfing(struct npc_state *fieldObject) +PlayerAvatarTransition_Surfing: @ 808B4D8 + 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 FieldObjectSetGraphicsId + ldrb r1, [r4, 0x18] + lsrs r1, 4 + adds r0, r4, 0 + bl FieldObjectTurn + movs r0, 0x8 + bl SetPlayerAvatarStateMask + ldr r1, =0x02038c08 + movs r2, 0x10 + ldrsh r0, [r4, r2] + str r0, [r1] + movs r2, 0x12 + ldrsh r0, [r4, r2] + str r0, [r1, 0x4] + ldr r0, =0x02037590 + 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_81555AC + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end PlayerAvatarTransition_Surfing + + thumb_func_start PlayerAvatarTransition_Underwater +@ void PlayerAvatarTransition_Underwater(struct npc_state *fieldObject) +PlayerAvatarTransition_Underwater: @ 808B534 + 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 FieldObjectSetGraphicsId + ldrb r1, [r4, 0x18] + lsrs r1, 4 + adds r0, r4, 0 + bl FieldObjectTurn + movs r0, 0x10 + bl SetPlayerAvatarStateMask + ldrb r0, [r4, 0x4] + bl sub_8155800 + strb r0, [r4, 0x1A] + pop {r4} + pop {r0} + bx r0 + thumb_func_end PlayerAvatarTransition_Underwater + + thumb_func_start PlayerAvatarTransition_ReturnToField +@ void PlayerAvatarTransition_ReturnToField(struct npc_state *fieldObject) +PlayerAvatarTransition_ReturnToField: @ 808B568 + ldr r2, =0x02037590 + ldrb r1, [r2] + movs r0, 0x20 + orrs r0, r1 + strb r0, [r2] + bx lr + .pool + thumb_func_end PlayerAvatarTransition_ReturnToField + + thumb_func_start sub_808B578 +sub_808B578: @ 808B578 + push {r4,lr} + ldr r4, =0x02037590 + movs r0, 0 + strb r0, [r4, 0x3] + bl PlayerIsAnimActive + lsls r0, 24 + cmp r0, 0 + beq _0808B5B6 + bl PlayerCheckIfAnimFinishedOrInactive + lsls r0, 24 + cmp r0, 0 + bne _0808B5A8 + bl player_is_anim_in_certain_ranges + lsls r0, 24 + cmp r0, 0 + bne _0808B5B6 + movs r0, 0x1 + b _0808B5B4 + .pool +_0808B5A8: + bl sub_808B618 + lsls r0, 24 + cmp r0, 0 + bne _0808B5B6 + movs r0, 0x2 +_0808B5B4: + strb r0, [r4, 0x3] +_0808B5B6: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_808B578 + + thumb_func_start player_is_anim_in_certain_ranges +player_is_anim_in_certain_ranges: @ 808B5BC + push {lr} + ldr r2, =0x02037350 + ldr r0, =0x02037590 + 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 _0808B602 + adds r0, r1, 0 + subs r0, 0x10 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x4 + bls _0808B602 + adds r0, r1, 0 + subs r0, 0x19 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0xF + bls _0808B602 + adds r0, r1, 0 + subs r0, 0x64 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0xB + bls _0808B602 + adds r0, r1, 0 + subs r0, 0x7C + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bhi _0808B610 +_0808B602: + movs r0, 0x1 + b _0808B612 + .pool +_0808B610: + movs r0, 0 +_0808B612: + pop {r1} + bx r1 + thumb_func_end player_is_anim_in_certain_ranges + + thumb_func_start sub_808B618 +sub_808B618: @ 808B618 + push {lr} + bl player_is_anim_in_certain_ranges + lsls r0, 24 + cmp r0, 0 + beq _0808B634 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x2] + cmp r0, 0x1 + beq _0808B634 + movs r0, 0x1 + b _0808B636 + .pool +_0808B634: + movs r0, 0 +_0808B636: + pop {r1} + bx r1 + thumb_func_end sub_808B618 + + thumb_func_start PlayerIsAnimActive +@ bool8 PlayerIsAnimActive() +PlayerIsAnimActive: @ 808B63C + push {lr} + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r0, r1 + bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end PlayerIsAnimActive + + thumb_func_start PlayerCheckIfAnimFinishedOrInactive +@ bool8 PlayerCheckIfAnimFinishedOrInactive() +PlayerCheckIfAnimFinishedOrInactive: @ 808B660 + push {lr} + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r0, r1 + bl FieldObjectCheckIfSpecialAnimFinishedOrInactive + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end PlayerCheckIfAnimFinishedOrInactive + + thumb_func_start player_set_x22 +player_set_x22: @ 808B684 + ldr r3, =0x02037350 + ldr r1, =0x02037590 + 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 + .pool + thumb_func_end player_set_x22 + + thumb_func_start player_get_x22 +player_get_x22: @ 808B6A0 + ldr r2, =0x02037350 + ldr r0, =0x02037590 + 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 + .pool + thumb_func_end player_get_x22 + + thumb_func_start sub_808B6BC +sub_808B6BC: @ 808B6BC + push {lr} + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + ldr r0, =0x02037590 + ldrb r2, [r0, 0x5] + lsls r0, r2, 3 + adds r0, r2 + lsls r0, 2 + ldr r2, =0x02037350 + adds r0, r2 + bl FieldObjectForceSetSpecialAnim + pop {r0} + bx r0 + .pool + thumb_func_end sub_808B6BC + + thumb_func_start player_npc_set_state_and_x22_etc +@ void player_npc_set_state_and_x22_etc(u8 animState, u8 a2) +player_npc_set_state_and_x22_etc: @ 808B6E4 + 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 _0808B712 + adds r0, r4, 0 + bl player_set_x22 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r0, r1 + adds r1, r5, 0 + bl FieldObjectSetSpecialAnim +_0808B712: + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end player_npc_set_state_and_x22_etc + + thumb_func_start PlayerGoSpeed0 +@ void PlayerGoSpeed0(u8 direction) +PlayerGoSpeed0: @ 808B720 + 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 PlayerGoSpeed1 +@ void PlayerGoSpeed1(u8 direction) +PlayerGoSpeed1: @ 808B738 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetGoSpeed1AnimId + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x2 + bl player_npc_set_state_and_x22_etc + pop {r0} + bx r0 + thumb_func_end PlayerGoSpeed1 + + thumb_func_start PlayerGoSpeed2 +@ void PlayerGoSpeed2(u8 direction) +PlayerGoSpeed2: @ 808B750 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetGoSpeed2AnimId + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x2 + bl player_npc_set_state_and_x22_etc + pop {r0} + bx r0 + thumb_func_end PlayerGoSpeed2 + + thumb_func_start PlayerGoSpeed3 +@ void PlayerGoSpeed3(u8 direction) +PlayerGoSpeed3: @ 808B768 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetGoSpeed3AnimId + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x2 + bl player_npc_set_state_and_x22_etc + pop {r0} + bx r0 + thumb_func_end PlayerGoSpeed3 + + thumb_func_start PlayerRun +@ void PlayerRun(u8 direction) +PlayerRun: @ 808B780 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetRunAnimId + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x2 + bl player_npc_set_state_and_x22_etc + pop {r0} + bx r0 + thumb_func_end PlayerRun + + thumb_func_start PlayerOnBikeCollide +@ void PlayerOnBikeCollide(u8 direction) +PlayerOnBikeCollide: @ 808B798 + 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 PlayerOnBikeCollideWithFarawayIslandMew +@ void PlayerOnBikeCollideWithFarawayIslandMew(u8 direction) +PlayerOnBikeCollideWithFarawayIslandMew: @ 808B7BC + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetStepInPlaceDelay16AnimId + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x2 + bl player_npc_set_state_and_x22_etc + pop {r0} + bx r0 + thumb_func_end PlayerOnBikeCollideWithFarawayIslandMew + + thumb_func_start PlayerNotOnBikeCollide +@ void PlayerNotOnBikeCollide(u8 direction) +PlayerNotOnBikeCollide: @ 808B7D4 + 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 PlayerNotOnBikeCollideWithFarawayIslandMew +@ void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 direction) +PlayerNotOnBikeCollideWithFarawayIslandMew: @ 808B7F8 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetStepInPlaceDelay32AnimId + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x2 + bl player_npc_set_state_and_x22_etc + pop {r0} + bx r0 + thumb_func_end PlayerNotOnBikeCollideWithFarawayIslandMew + + thumb_func_start PlayerFaceDirection +@ void PlayerFaceDirection(u8 direction) +PlayerFaceDirection: @ 808B810 + 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 +@ void PlayerTurnInPlace(u8 direction) +PlayerTurnInPlace: @ 808B828 + 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 +@ void PlayerJumpLedge(u8 direction) +PlayerJumpLedge: @ 808B840 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0xA + bl audio_play + 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_808B864 +sub_808B864: @ 808B864 + push {r4,lr} + ldr r4, =0x02037590 + ldrb r0, [r4, 0x3] + cmp r0, 0x2 + beq _0808B872 + cmp r0, 0 + bne _0808B89A +_0808B872: + bl player_should_look_direction_be_enforced_upon_movement + lsls r0, 24 + cmp r0, 0 + beq _0808B89A + ldr r2, =0x02037350 + 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_808B6BC +_0808B89A: + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808B864 + + thumb_func_start sub_808B8A8 +sub_808B8A8: @ 808B8A8 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl sub_8093648 + 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_808B8A8 + + thumb_func_start sub_808B8C0 +sub_808B8C0: @ 808B8C0 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl sub_8093674 + 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_808B8C0 + + thumb_func_start sub_808B8D8 +sub_808B8D8: @ 808B8D8 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl sub_80936A0 + 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_808B8D8 + + thumb_func_start sub_808B8F0 +sub_808B8F0: @ 808B8F0 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x22 + bl audio_play + adds r0, r4, 0 + bl sub_80936CC + 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_808B8F0 + + thumb_func_start sub_808B914 +sub_808B914: @ 808B914 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x22 + bl audio_play + adds r0, r4, 0 + bl sub_80936F8 + 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_808B914 + + thumb_func_start sub_808B938 +sub_808B938: @ 808B938 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x22 + bl audio_play + adds r0, r4, 0 + bl sub_8093724 + 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_808B938 + + thumb_func_start sub_808B95C +sub_808B95C: @ 808B95C + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x22 + bl audio_play + adds r0, r4, 0 + bl sub_80934E8 + 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_808B95C + + thumb_func_start sub_808B980 +sub_808B980: @ 808B980 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x7 + bl audio_play + adds r0, r4, 0 + bl sub_8093750 + 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_808B980 + + thumb_func_start sub_808B9A4 +sub_808B9A4: @ 808B9A4 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl sub_809377C + 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_808B9A4 + + thumb_func_start sub_808B9BC +sub_808B9BC: @ 808B9BC + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl sub_80937A8 + 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_808B9BC + + thumb_func_start npc_use_some_d2s +npc_use_some_d2s: @ 808B9D4 + 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 PlayCollisionSoundIfNotFacingWarp +@ void PlayCollisionSoundIfNotFacingWarp(u8 direction) +PlayCollisionSoundIfNotFacingWarp: @ 808B9EC + push {r4,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r4, r0, 24 + ldr r2, =0x02037350 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + ldrb r0, [r0, 0x1E] + ldr r2, =gUnknown_084974D8 + subs r1, r4, 0x1 + lsls r1, 2 + adds r1, r2 + ldr r1, [r1] + bl _call_via_r1 + lsls r0, 24 + cmp r0, 0 + bne _0808BA54 + cmp r4, 0x2 + bne _0808BA4E + 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 _0808BA54 +_0808BA4E: + movs r0, 0x7 + bl audio_play +_0808BA54: + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end PlayCollisionSoundIfNotFacingWarp + + thumb_func_start GetXYCoordsOneStepInFrontOfPlayer +GetXYCoordsOneStepInFrontOfPlayer: @ 808BA68 + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + ldr r3, =0x02037350 + ldr r2, =0x02037590 + 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 + .pool + thumb_func_end GetXYCoordsOneStepInFrontOfPlayer + + thumb_func_start PlayerGetDestCoords +@ void PlayerGetDestCoords(u16 *x, u16 *y) +PlayerGetDestCoords: @ 808BAAC + push {r4,r5,lr} + ldr r5, =0x02037350 + ldr r4, =0x02037590 + 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 + .pool + thumb_func_end PlayerGetDestCoords + + thumb_func_start plaer_get_pos_including_state_based_drift +plaer_get_pos_including_state_based_drift: @ 808BADC + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r3, r0, r1 + ldrb r1, [r3] + movs r0, 0xC0 + ands r0, r1 + cmp r0, 0x40 + beq _0808BAFC + b _0808BC24 +_0808BAFC: + ldr r2, =0x02020630 + ldrb r1, [r3, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + movs r1, 0x32 + ldrsh r0, [r0, r1] + cmp r0, 0 + beq _0808BB12 + b _0808BC24 +_0808BB12: + ldrh r0, [r3, 0x10] + strh r0, [r4] + ldrh r0, [r3, 0x12] + strh r0, [r5] + ldrb r0, [r3, 0x1C] + subs r0, 0x8 + cmp r0, 0x30 + bls _0808BB24 + b _0808BC24 +_0808BB24: + lsls r0, 2 + ldr r1, =_0808BB40 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .pool + .align 2, 0 +_0808BB40: + .4byte _0808BC04 + .4byte _0808BC0A + .4byte _0808BC14 + .4byte _0808BC1A + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC24 + .4byte _0808BC04 + .4byte _0808BC0A + .4byte _0808BC14 + .4byte _0808BC1A +_0808BC04: + ldrh r0, [r5] + adds r0, 0x1 + b _0808BC0E +_0808BC0A: + ldrh r0, [r5] + subs r0, 0x1 +_0808BC0E: + strh r0, [r5] + movs r0, 0x1 + b _0808BC30 +_0808BC14: + ldrh r0, [r4] + subs r0, 0x1 + b _0808BC1E +_0808BC1A: + ldrh r0, [r4] + adds r0, 0x1 +_0808BC1E: + strh r0, [r4] + movs r0, 0x1 + b _0808BC30 +_0808BC24: + movs r1, 0x1 + negs r1, r1 + adds r0, r1, 0 + strh r0, [r4] + strh r0, [r5] + movs r0, 0 +_0808BC30: + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end plaer_get_pos_including_state_based_drift + + thumb_func_start player_get_direction_lower_nybble +@ u8 player_get_direction_lower_nybble() +player_get_direction_lower_nybble: @ 808BC38 + ldr r2, =0x02037350 + ldr r0, =0x02037590 + 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 + .pool + thumb_func_end player_get_direction_lower_nybble + + thumb_func_start player_get_direction_upper_nybble +@ u8 player_get_direction_upper_nybble() +player_get_direction_upper_nybble: @ 808BC58 + ldr r2, =0x02037350 + ldr r0, =0x02037590 + 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 + .pool + thumb_func_end player_get_direction_upper_nybble + + thumb_func_start PlayerGetZCoord +@ u8 PlayerGetZCoord() +PlayerGetZCoord: @ 808BC74 + ldr r2, =0x02037350 + ldr r0, =0x02037590 + 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 + .pool + thumb_func_end PlayerGetZCoord + + thumb_func_start sub_808BC90 +sub_808BC90: @ 808BC90 + push {lr} + adds r3, r0, 0 + adds r2, r1, 0 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r0, r1 + lsls r3, 16 + asrs r3, 16 + lsls r2, 16 + asrs r2, 16 + adds r1, r3, 0 + bl sub_808EB08 + pop {r0} + bx r0 + .pool + thumb_func_end sub_808BC90 + + thumb_func_start TestPlayerAvatarFlags +@ u32 TestPlayerAvatarFlags(u32 mask) +TestPlayerAvatarFlags: @ 808BCC0 + ldr r1, =0x02037590 + ldrb r1, [r1] + ands r1, r0 + adds r0, r1, 0 + bx lr + .pool + thumb_func_end TestPlayerAvatarFlags + + thumb_func_start sub_808BCD0 +sub_808BCD0: @ 808BCD0 + ldr r0, =0x02037590 + ldrb r0, [r0] + bx lr + .pool + thumb_func_end sub_808BCD0 + + thumb_func_start GetPlayerAvatarObjectId +@ u8 GetPlayerAvatarObjectId() +GetPlayerAvatarObjectId: @ 808BCDC + ldr r0, =0x02037590 + ldrb r0, [r0, 0x4] + bx lr + .pool + thumb_func_end GetPlayerAvatarObjectId + + thumb_func_start sub_808BCE8 +sub_808BCE8: @ 808BCE8 + push {lr} + bl ForcedMovement_None + pop {r0} + bx r0 + thumb_func_end sub_808BCE8 + + thumb_func_start sub_808BCF4 +sub_808BCF4: @ 808BCF4 + push {r4,lr} + ldr r0, =0x02037590 + ldrb r0, [r0, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + 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 _0808BD2C + bl sub_811A188 + movs r0, 0 + bl sub_811A114 +_0808BD2C: + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808BCF4 + + thumb_func_start sub_808BD3C +sub_808BD3C: @ 808BD3C + lsls r0, 24 + lsls r1, 24 + lsrs r1, 24 + ldr r2, =gUnknown_084974E8 + lsrs r0, 23 + adds r1, r0 + adds r1, r2 + ldrb r0, [r1] + bx lr + .pool + thumb_func_end sub_808BD3C + + thumb_func_start GetPlayerAvatarGraphicsIdByStateIdAndGender +@ u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 stateId, u8 gender) +GetPlayerAvatarGraphicsIdByStateIdAndGender: @ 808BD54 + lsls r0, 24 + lsls r1, 24 + lsrs r1, 24 + ldr r2, =gUnknown_084974F8 + lsrs r0, 23 + adds r1, r0 + adds r1, r2 + ldrb r0, [r1] + bx lr + .pool + thumb_func_end GetPlayerAvatarGraphicsIdByStateIdAndGender + + thumb_func_start sub_808BD6C +sub_808BD6C: @ 808BD6C + lsls r0, 24 + lsrs r0, 24 + ldr r1, =gUnknown_08497508 + adds r0, r1 + ldrb r0, [r0] + bx lr + .pool + thumb_func_end sub_808BD6C + + thumb_func_start sub_808BD7C +sub_808BD7C: @ 808BD7C + lsls r0, 24 + lsrs r0, 24 + ldr r1, =gUnknown_0849750A + adds r0, r1 + ldrb r0, [r0] + bx lr + .pool + thumb_func_end sub_808BD7C + + thumb_func_start GetPlayerAvatarGraphicsIdByStateId +@ u8 GetPlayerAvatarGraphicsIdByStateId(u8 stateId) +GetPlayerAvatarGraphicsIdByStateId: @ 808BD8C + push {lr} + lsls r0, 24 + lsrs r0, 24 + ldr r1, =0x02037590 + ldrb r1, [r1, 0x7] + bl GetPlayerAvatarGraphicsIdByStateIdAndGender + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end GetPlayerAvatarGraphicsIdByStateId + + thumb_func_start sub_808BDA8 +sub_808BDA8: @ 808BDA8 + push {lr} + lsls r0, 24 + lsrs r0, 24 + adds r1, r0, 0 + cmp r0, 0x70 + beq _0808BDCA + cmp r0, 0x70 + bgt _0808BDC2 + cmp r0, 0x6D + bgt _0808BDCE + cmp r0, 0x69 + blt _0808BDCE + b _0808BDCA +_0808BDC2: + cmp r1, 0x8A + beq _0808BDCA + cmp r1, 0xC0 + bne _0808BDCE +_0808BDCA: + movs r0, 0x1 + b _0808BDD0 +_0808BDCE: + movs r0, 0 +_0808BDD0: + pop {r1} + bx r1 + thumb_func_end sub_808BDA8 + + thumb_func_start GetPlayerAvatarGenderByGraphicsId +@ u8 GetPlayerAvatarGenderByGraphicsId(u8 graphicsId) +GetPlayerAvatarGenderByGraphicsId: @ 808BDD4 + push {lr} + lsls r0, 24 + lsrs r0, 24 + adds r1, r0, 0 + cmp r0, 0x70 + beq _0808BDF6 + cmp r0, 0x70 + bgt _0808BDEE + cmp r0, 0x5D + bgt _0808BDFA + cmp r0, 0x59 + blt _0808BDFA + b _0808BDF6 +_0808BDEE: + cmp r1, 0x8A + beq _0808BDF6 + cmp r1, 0xC0 + bne _0808BDFA +_0808BDF6: + movs r0, 0x1 + b _0808BDFC +_0808BDFA: + movs r0, 0 +_0808BDFC: + pop {r1} + bx r1 + thumb_func_end GetPlayerAvatarGenderByGraphicsId + + thumb_func_start PartyHasMonWithSurf +@ bool8 PartyHasMonWithSurf() +PartyHasMonWithSurf: @ 808BE00 + push {r4,r5,lr} + movs r0, 0x8 + bl TestPlayerAvatarFlags + lsls r0, 24 + cmp r0, 0 + bne _0808BE44 + movs r5, 0 + b _0808BE2A +_0808BE12: + adds r0, r4, 0 + movs r1, 0x39 + bl pokemon_has_move + lsls r0, 24 + cmp r0, 0 + beq _0808BE24 + movs r0, 0x1 + b _0808BE46 +_0808BE24: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 +_0808BE2A: + cmp r5, 0x5 + bhi _0808BE44 + movs r0, 0x64 + adds r1, r5, 0 + muls r1, r0 + ldr r0, =0x020244ec + adds r4, r1, r0 + adds r0, r4, 0 + movs r1, 0xB + bl pokemon_getattr + cmp r0, 0 + bne _0808BE12 +_0808BE44: + movs r0, 0 +_0808BE46: + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end PartyHasMonWithSurf + + thumb_func_start IsPlayerSurfingNorth +@ bool8 IsPlayerSurfingNorth() +IsPlayerSurfingNorth: @ 808BE50 + push {lr} + bl player_get_direction_upper_nybble + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x2 + bne _0808BE6E + movs r0, 0x8 + bl TestPlayerAvatarFlags + lsls r0, 24 + cmp r0, 0 + beq _0808BE6E + movs r0, 0x1 + b _0808BE70 +_0808BE6E: + movs r0, 0 +_0808BE70: + pop {r1} + bx r1 + thumb_func_end IsPlayerSurfingNorth + + thumb_func_start IsPlayerFacingSurfableFishableWater +@ bool8 IsPlayerFacingSurfableFishableWater() +IsPlayerFacingSurfableFishableWater: @ 808BE74 + push {r4,r5,lr} + sub sp, 0x4 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + 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 _0808BEF4 + bl PlayerGetZCoord + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bne _0808BEF4 + 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 _0808BEF4 + movs r0, 0x1 + b _0808BEF6 + .pool +_0808BEF4: + movs r0, 0 +_0808BEF6: + add sp, 0x4 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end IsPlayerFacingSurfableFishableWater + + thumb_func_start ClearPlayerAvatarInfo +@ void ClearPlayerAvatarInfo() +ClearPlayerAvatarInfo: @ 808BF00 + push {lr} + ldr r0, =0x02037590 + movs r1, 0 + movs r2, 0x24 + bl memset + pop {r0} + bx r0 + .pool + thumb_func_end ClearPlayerAvatarInfo + + thumb_func_start SetPlayerAvatarStateMask +@ void SetPlayerAvatarStateMask(u8 stateMask) +SetPlayerAvatarStateMask: @ 808BF14 + lsls r0, 24 + lsrs r0, 24 + ldr r3, =0x02037590 + ldrb r2, [r3] + movs r1, 0xE0 + ands r1, r2 + orrs r0, r1 + strb r0, [r3] + bx lr + .pool + thumb_func_end SetPlayerAvatarStateMask + + thumb_func_start GetPlayerAvatarStateTransitionByGraphicsId +@ u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) +GetPlayerAvatarStateTransitionByGraphicsId: @ 808BF2C + push {r4-r6,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r1, 24 + lsrs r1, 24 + movs r2, 0 + ldr r3, =gUnknown_0849750C + lsls r0, r1, 2 + adds r0, r1 + lsls r4, r0, 1 + adds r6, r3, 0x1 +_0808BF42: + lsls r0, r2, 1 + adds r1, r0, r4 + adds r0, r1, r3 + ldrb r0, [r0] + cmp r0, r5 + bne _0808BF58 + adds r0, r1, r6 + ldrb r0, [r0] + b _0808BF64 + .pool +_0808BF58: + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x4 + bls _0808BF42 + movs r0, 0x1 +_0808BF64: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end GetPlayerAvatarStateTransitionByGraphicsId + + thumb_func_start GetPlayerAvatarGraphicsIdByCurrentState +@ u8 GetPlayerAvatarGraphicsIdByCurrentState() +GetPlayerAvatarGraphicsIdByCurrentState: @ 808BF6C + push {r4-r6,lr} + ldr r0, =0x02037590 + ldrb r5, [r0] + movs r2, 0 + ldr r3, =gUnknown_0849750C + ldrb r1, [r0, 0x7] + lsls r0, r1, 2 + adds r0, r1 + lsls r4, r0, 1 + adds r6, r3, 0x1 +_0808BF80: + lsls r0, r2, 1 + adds r1, r0, r4 + adds r0, r1, r6 + ldrb r0, [r0] + ands r0, r5 + cmp r0, 0 + beq _0808BF9C + adds r0, r1, r3 + ldrb r0, [r0] + b _0808BFA8 + .pool +_0808BF9C: + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x4 + bls _0808BF80 + movs r0, 0 +_0808BFA8: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end GetPlayerAvatarGraphicsIdByCurrentState + + thumb_func_start SetPlayerAvatarExtraStateTransition +@ void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 state) +SetPlayerAvatarExtraStateTransition: @ 808BFB0 + push {r4,r5,lr} + adds r4, r1, 0 + lsls r0, 24 + lsrs r0, 24 + lsls r4, 24 + lsrs r4, 24 + ldr r5, =0x02037590 + 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 + .pool + thumb_func_end SetPlayerAvatarExtraStateTransition + + thumb_func_start InitPlayerAvatar +@ void InitPlayerAvatar(u16 x, u16 y, u8 direction, u8 gender) +InitPlayerAvatar: @ 808BFE0 + 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, =0x02037350 + adds r4, r0 + ldrb r0, [r4, 0x2] + movs r1, 0x1 + orrs r0, r1 + strb r0, [r4, 0x2] + bl sub_8154228 + strb r0, [r4, 0x1B] + adds r0, r4, 0 + mov r1, r9 + bl FieldObjectTurn + bl ClearPlayerAvatarInfo + ldr r0, =0x02037590 + 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 + .pool + thumb_func_end InitPlayerAvatar + + thumb_func_start sub_808C0A8 +sub_808C0A8: @ 808C0A8 + push {r4-r6,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r6, =0x02037350 + ldr r5, =0x02037590 + 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 _0808C100 + ldr r2, =0x02020630 + 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] +_0808C100: + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C0A8 + + thumb_func_start sub_808C114 +sub_808C114: @ 808C114 + push {r4,r5,lr} + ldr r5, =0x02037590 + ldrb r0, [r5, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + adds r4, r0 + movs r0, 0x5 + bl GetPlayerAvatarGraphicsIdByStateId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + ldrb r1, [r5, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02020630 + adds r0, r1 + movs r1, 0 + bl StartObjectImageAnim + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C114 + + thumb_func_start sub_808C15C +sub_808C15C: @ 808C15C + push {r4-r6,lr} + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldr r6, =0x02037590 + ldrb r0, [r6, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + adds r4, r0 + movs r0, 0x6 + bl GetPlayerAvatarGraphicsIdByStateId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + ldrb r0, [r6, 0x4] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02020630 + adds r4, r0 + adds r0, r5, 0 + bl sub_8092A0C + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartObjectImageAnim + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C15C + + thumb_func_start sub_808C1B4 +sub_808C1B4: @ 808C1B4 + push {r4-r6,lr} + mov r6, r8 + push {r6} + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldr r6, =0x02037590 + ldrb r0, [r6, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + adds r4, r0 + movs r0, 0x2 + bl GetPlayerAvatarGraphicsIdByStateId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + ldrb r0, [r6, 0x4] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02020630 + mov r8, r0 + add r4, r8 + adds r0, r5, 0 + bl sub_80929BC + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartObjectImageAnim + ldrb r1, [r6, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + add r0, r8 + movs r1, 0x1 + bl SeekObjectImageAnim + pop {r3} + mov r8, r3 + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C1B4 + + thumb_func_start sub_808C228 +sub_808C228: @ 808C228 + push {r4-r6,lr} + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldr r6, =0x02037590 + ldrb r0, [r6, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + adds r4, r0 + movs r0, 0x7 + bl GetPlayerAvatarGraphicsIdByStateId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + ldrb r0, [r6, 0x4] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02020630 + adds r4, r0 + adds r0, r5, 0 + bl FieldObjectDirectionToImageAnimId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartObjectImageAnim + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C228 + + thumb_func_start sub_808C280 +sub_808C280: @ 808C280 + 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, =gUnknown_08497520 + mov r9, r1 + mov r4, sp + mov r7, sp + adds r7, 0x2 +_0808C2A2: + 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 _0808C2E8 + ldrb r0, [r5, 0x18] + lsrs r0, 4 + cmp r6, r0 + bne _0808C2E8 + 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_8154298 + b _0808C302 + .pool +_0808C2E8: + 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 _0808C2A2 + ldrb r0, [r5, 0x1B] + bl objid_set_invisible +_0808C302: + add sp, 0x4 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_808C280 + + thumb_func_start task_add_bump_boulder +task_add_bump_boulder: @ 808C310 + 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, =taskFF_bump_boulder + adds r0, r6, 0 + movs r1, 0xFF + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03005e00 + 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 + .pool + thumb_func_end task_add_bump_boulder + + thumb_func_start taskFF_bump_boulder +taskFF_bump_boulder: @ 808C34C + push {r4-r6,lr} + lsls r0, 24 + lsrs r0, 24 + ldr r6, =gUnknown_08497530 + ldr r2, =0x03005e00 + ldr r5, =0x02037350 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r4, r1, r2 +_0808C360: + movs r0, 0x8 + ldrsh r3, [r4, r0] + lsls r3, 2 + adds r3, r6 + ldr r0, =0x02037590 + 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 _0808C360 + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end taskFF_bump_boulder + + thumb_func_start sub_808C3A4 +sub_808C3A4: @ 808C3A4 + push {r4,lr} + adds r4, r0, 0 + bl script_env_2_enable + ldr r1, =0x02037590 + 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 + .pool + thumb_func_end sub_808C3A4 + + thumb_func_start do_boulder_dust +@ int do_boulder_dust(int a1, struct npc_state *a2, struct npc_state *a3) +do_boulder_dust: @ 808C3C4 + push {r4-r6,lr} + adds r6, r0, 0 + adds r5, r1, 0 + adds r4, r2, 0 + adds r0, r5, 0 + bl FieldObjectIsSpecialAnimActive + lsls r0, 24 + cmp r0, 0 + beq _0808C3DE + adds r0, r5, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished +_0808C3DE: + adds r0, r4, 0 + bl FieldObjectIsSpecialAnimActive + lsls r0, 24 + cmp r0, 0 + beq _0808C3F0 + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished +_0808C3F0: + adds r0, r5, 0 + bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive + lsls r0, 24 + cmp r0, 0 + bne _0808C472 + adds r0, r4, 0 + bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive + lsls r0, 24 + cmp r0, 0 + bne _0808C472 + 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, =0x02038c08 + 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, =0x02020630 + 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 audio_play + ldrh r0, [r6, 0x8] + adds r0, 0x1 + strh r0, [r6, 0x8] +_0808C472: + movs r0, 0 + pop {r4-r6} + pop {r1} + bx r1 + .pool + thumb_func_end do_boulder_dust + + thumb_func_start sub_808C484 +sub_808C484: @ 808C484 + 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 _0808C4C6 + adds r0, r5, 0 + bl FieldObjectCheckIfSpecialAnimFinishedOrInactive + lsls r0, 24 + cmp r0, 0 + beq _0808C4C6 + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + adds r0, r5, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + ldr r1, =0x02037590 + movs r0, 0 + strb r0, [r1, 0x6] + bl script_env_2_disable + ldr r0, =taskFF_bump_boulder + bl FindTaskIdByFunc + lsls r0, 24 + lsrs r0, 24 + bl DestroyTask +_0808C4C6: + movs r0, 0 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end sub_808C484 + + thumb_func_start sub_808C4D8 +sub_808C4D8: @ 808C4D8 + push {r4,lr} + ldr r4, =sub_808C4F8 + 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 + .pool + thumb_func_end sub_808C4D8 + + thumb_func_start sub_808C4F8 +sub_808C4F8: @ 808C4F8 + push {r4,r5,lr} + lsls r0, 24 + lsrs r0, 24 + ldr r5, =gUnknown_0849753C + ldr r2, =0x03005e00 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r4, r1, r2 +_0808C50A: + movs r0, 0x8 + ldrsh r2, [r4, r0] + lsls r2, 2 + adds r2, r5 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x5] + lsls r1, r0, 3 + adds r1, r0 + lsls r1, 2 + ldr r0, =0x02037350 + adds r1, r0 + ldr r2, [r2] + adds r0, r4, 0 + bl _call_via_r2 + lsls r0, 24 + cmp r0, 0 + bne _0808C50A + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C4F8 + + thumb_func_start sub_808C544 +sub_808C544: @ 808C544 + push {r4-r6,lr} + adds r6, r0, 0 + adds r4, r1, 0 + ldr r5, =0x02037590 + movs r0, 0x1 + strb r0, [r5, 0x6] + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _0808C5A0 + movs r0, 0xA + bl audio_play + ldrb r0, [r4, 0x18] + lsls r0, 28 + lsrs r0, 28 + bl sub_80934BC + 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 _0808C5A0 + movs r0, 0 + strb r0, [r5, 0x6] + ldrb r0, [r5, 0x1] + movs r1, 0x20 + orrs r0, r1 + strb r0, [r5, 0x1] + ldr r0, =sub_808C4F8 + bl FindTaskIdByFunc + lsls r0, 24 + lsrs r0, 24 + bl DestroyTask +_0808C5A0: + movs r0, 0 + pop {r4-r6} + pop {r1} + bx r1 + .pool + thumb_func_end sub_808C544 + + thumb_func_start sub_808C5B0 +sub_808C5B0: @ 808C5B0 + push {r4,lr} + ldr r4, =sub_808C5D0 + 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 + .pool + thumb_func_end sub_808C5B0 + + thumb_func_start sub_808C5D0 +sub_808C5D0: @ 808C5D0 + push {r4,r5,lr} + lsls r0, 24 + lsrs r0, 24 + ldr r5, =gUnknown_08497540 + ldr r2, =0x03005e00 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r4, r1, r2 +_0808C5E2: + movs r0, 0x8 + ldrsh r2, [r4, r0] + lsls r2, 2 + adds r2, r5 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x5] + lsls r1, r0, 3 + adds r1, r0 + lsls r1, 2 + ldr r0, =0x02037350 + adds r1, r0 + ldr r2, [r2] + adds r0, r4, 0 + bl _call_via_r2 + lsls r0, 24 + cmp r0, 0 + bne _0808C5E2 + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C5D0 + + thumb_func_start sub_808C61C +sub_808C61C: @ 808C61C + 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, =0x02037590 + movs r0, 0x1 + strb r0, [r1, 0x6] + bl script_env_2_enable + movs r0, 0x2D + bl audio_play + movs r0, 0x1 + pop {r1} + bx r1 + .pool + thumb_func_end sub_808C61C + + thumb_func_start sub_808C644 +sub_808C644: @ 808C644 + push {r4-r6,lr} + sub sp, 0x4 + adds r4, r0, 0 + adds r5, r1, 0 + ldr r1, =gUnknown_08497550 + mov r0, sp + movs r2, 0x4 + bl memcpy + adds r0, r5, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _0808C6AC + 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 _0808C68A + ldrh r0, [r4, 0xC] + adds r0, 0x1 + strh r0, [r4, 0xC] +_0808C68A: + ldrh r0, [r4, 0x8] + adds r0, 0x1 + strh r0, [r4, 0x8] + movs r1, 0xC + ldrsh r0, [r4, r1] + cmp r0, 0x3 + ble _0808C6AC + ldrb r0, [r4, 0xA] + bl GetOppositeDirection + lsls r0, 24 + lsrs r0, 24 + cmp r6, r0 + bne _0808C6AC + ldrh r0, [r4, 0x8] + adds r0, 0x1 + strh r0, [r4, 0x8] +_0808C6AC: + movs r0, 0 + add sp, 0x4 + pop {r4-r6} + pop {r1} + bx r1 + .pool + thumb_func_end sub_808C644 + + thumb_func_start sub_808C6BC +sub_808C6BC: @ 808C6BC + push {r4,r5,lr} + sub sp, 0x8 + adds r5, r0, 0 + adds r4, r1, 0 + ldr r1, =gUnknown_08497554 + mov r0, sp + movs r2, 0x5 + bl memcpy + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _0808C6EC + 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] +_0808C6EC: + movs r0, 0 + add sp, 0x8 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end sub_808C6BC + + thumb_func_start sub_808C6FC +sub_808C6FC: @ 808C6FC + 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 _0808C740 + 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 script_env_2_disable + ldr r1, =0x02037590 + movs r0, 0 + strb r0, [r1, 0x6] + ldr r0, =sub_808C5D0 + bl FindTaskIdByFunc + lsls r0, 24 + lsrs r0, 24 + bl DestroyTask +_0808C740: + movs r0, 0 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end sub_808C6FC + + thumb_func_start sub_808C750 +sub_808C750: @ 808C750 + push {r4,r5,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + bl script_env_2_enable + bl sav1_reset_battle_music_maybe + bl sub_8085898 + ldr r2, =0x02037590 + 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, =taskFF_0805D1D4 + adds r0, r5, 0 + movs r1, 0xFF + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03005e00 + 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 + .pool + thumb_func_end sub_808C750 + + thumb_func_start taskFF_0805D1D4 +taskFF_0805D1D4: @ 808C7A8 + push {r4-r6,lr} + lsls r0, 24 + lsrs r6, r0, 24 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r5, r0, r1 + adds r0, r5, 0 + bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive + lsls r0, 24 + cmp r0, 0 + beq _0808C7D4 + adds r0, r5, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _0808C7FC +_0808C7D4: + ldrb r0, [r5, 0x1A] + movs r1, 0x2 + bl sub_81555AC + ldr r0, =0x03005e00 + lsls r4, r6, 2 + adds r4, r6 + lsls r4, 3 + adds r4, r0 + ldrb r0, [r4, 0x8] + bl sub_8093540 + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r5, 0 + bl FieldObjectSetSpecialAnim + ldr r0, =sub_808C814 + str r0, [r4] +_0808C7FC: + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end taskFF_0805D1D4 + + thumb_func_start sub_808C814 +sub_808C814: @ 808C814 + push {r4-r6,lr} + lsls r0, 24 + lsrs r5, r0, 24 + ldr r6, =0x02037590 + ldrb r1, [r6, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r4, r0, r1 + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _0808C87A + movs r0, 0 + bl GetPlayerAvatarGraphicsIdByStateId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + 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 script_env_2_disable + ldrb r1, [r4, 0x1A] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02020630 + adds r0, r1 + bl RemoveObjectAndFreeTiles + adds r0, r5, 0 + bl DestroyTask +_0808C87A: + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808C814 + + thumb_func_start StartFishing +StartFishing: @ 808C88C + push {r4,r5,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + ldr r5, =Task_Fish + adds r0, r5, 0 + movs r1, 0xFF + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03005e00 + 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 + .pool + thumb_func_end StartFishing + + thumb_func_start Task_Fish +Task_Fish: @ 808C8C0 + push {r4,r5,lr} + lsls r0, 24 + lsrs r0, 24 + ldr r5, =gUnknown_0849755C + ldr r2, =0x03005e00 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r4, r1, r2 +_0808C8D2: + 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 _0808C8D2 + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end Task_Fish + + thumb_func_start fish0 +fish0: @ 808C8F8 + push {r4,lr} + adds r4, r0, 0 + bl script_env_2_enable + ldr r1, =0x02037590 + 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 + .pool + thumb_func_end fish0 + + thumb_func_start fish1 +fish1: @ 808C918 + push {r4-r6,lr} + sub sp, 0x10 + adds r5, r0, 0 + ldr r1, =gUnknown_0849759C + mov r0, sp + movs r2, 0x6 + bl memcpy + add r4, sp, 0x8 + ldr r1, =gUnknown_084975A2 + adds r0, r4, 0 + movs r2, 0x6 + bl memcpy + movs r0, 0 + strh r0, [r5, 0x20] + bl GenerateRandomNumber + 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, =0x02037350 + ldr r2, =0x02037590 + 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_808C15C + ldrh r0, [r5, 0x8] + adds r0, 0x1 + strh r0, [r5, 0x8] + movs r0, 0 + add sp, 0x10 + pop {r4-r6} + pop {r1} + bx r1 + .pool + thumb_func_end fish1 + + thumb_func_start fish2 +fish2: @ 808C9B0 + push {r4,lr} + adds r4, r0, 0 + bl sub_808CF78 + ldrh r0, [r4, 0xA] + adds r0, 0x1 + strh r0, [r4, 0xA] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3B + ble _0808C9CC + ldrh r0, [r4, 0x8] + adds r0, 0x1 + strh r0, [r4, 0x8] +_0808C9CC: + movs r0, 0 + pop {r4} + pop {r1} + bx r1 + thumb_func_end fish2 + + thumb_func_start fish3 +fish3: @ 808C9D4 + push {r4,lr} + adds r4, r0, 0 + movs r0, 0 + movs r1, 0x1 + bl sub_819786C + ldrh r0, [r4, 0x8] + adds r0, 0x1 + movs r1, 0 + strh r0, [r4, 0x8] + strh r1, [r4, 0xA] + strh r1, [r4, 0xC] + bl GenerateRandomNumber + 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 _0808CA0C + adds r0, r1, 0x4 + strh r0, [r4, 0xE] +_0808CA0C: + movs r1, 0xE + ldrsh r0, [r4, r1] + cmp r0, 0x9 + ble _0808CA18 + movs r0, 0xA + strh r0, [r4, 0xE] +_0808CA18: + movs r0, 0x1 + pop {r4} + pop {r1} + bx r1 + thumb_func_end fish3 + + thumb_func_start fish4 +fish4: @ 808CA20 + push {r4,r5,lr} + sub sp, 0x10 + adds r4, r0, 0 + ldr r1, =gUnknown_084975A8 + add r0, sp, 0xC + movs r2, 0x2 + bl memcpy + bl sub_808CF78 + ldrh r0, [r4, 0xA] + adds r1, r0, 0x1 + strh r1, [r4, 0xA] + ldr r0, =0x030022c0 + ldrh r0, [r0, 0x2E] + movs r5, 0x1 + adds r2, r5, 0 + ands r2, r0 + cmp r2, 0 + beq _0808CA64 + movs r0, 0xB + strh r0, [r4, 0x8] + movs r1, 0x20 + ldrsh r0, [r4, r1] + cmp r0, 0 + beq _0808CA58 + movs r0, 0xC + strh r0, [r4, 0x8] +_0808CA58: + movs r0, 0x1 + b _0808CAB4 + .pool +_0808CA64: + lsls r0, r1, 16 + asrs r0, 16 + cmp r0, 0x13 + ble _0808CAB2 + strh r2, [r4, 0xA] + movs r3, 0xC + ldrsh r1, [r4, r3] + movs r3, 0xE + ldrsh r0, [r4, r3] + cmp r1, r0 + blt _0808CA94 + 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 _0808CA8E + adds r0, r1, 0x1 + strh r0, [r4, 0x8] +_0808CA8E: + adds r0, r2, 0x1 + strh r0, [r4, 0x20] + b _0808CAB2 +_0808CA94: + movs r0, 0xC + ldrsh r3, [r4, r0] + lsls r3, 27 + lsrs r3, 24 + str r5, [sp] + str r2, [sp, 0x4] + str r2, [sp, 0x8] + movs r0, 0 + movs r1, 0x1 + add r2, sp, 0xC + bl Print + ldrh r0, [r4, 0xC] + adds r0, 0x1 + strh r0, [r4, 0xC] +_0808CAB2: + movs r0, 0 +_0808CAB4: + add sp, 0x10 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end fish4 + + thumb_func_start fish5 +fish5: @ 808CABC + push {r4-r6,lr} + adds r5, r0, 0 + bl sub_808CF78 + ldrh r0, [r5, 0x8] + adds r0, 0x1 + strh r0, [r5, 0x8] + movs r6, 0 + bl GetFishingWildMonListHeader + lsls r0, 24 + cmp r0, 0 + bne _0808CADC + movs r0, 0xB + strh r0, [r5, 0x8] + b _0808CB5C +_0808CADC: + ldr r4, =0x020244ec + adds r0, r4, 0 + movs r1, 0x6 + bl pokemon_getattr + cmp r0, 0 + bne _0808CB14 + adds r0, r4, 0 + bl GetMonAbility + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x15 + beq _0808CAFC + cmp r0, 0x3C + bne _0808CB14 +_0808CAFC: + bl GenerateRandomNumber + lsls r0, 16 + lsrs r0, 16 + movs r1, 0x64 + bl __umodsi3 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0xE + bls _0808CB14 + movs r6, 0x1 +_0808CB14: + cmp r6, 0 + bne _0808CB32 + bl GenerateRandomNumber + movs r1, 0x1 + ands r1, r0 + cmp r1, 0 + beq _0808CB30 + movs r0, 0xB + strh r0, [r5, 0x8] + b _0808CB32 + .pool +_0808CB30: + movs r6, 0x1 +_0808CB32: + cmp r6, 0x1 + bne _0808CB5C + ldr r0, =0x02037590 + ldrb r0, [r0, 0x4] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02020630 + adds r4, r0 + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + bl sub_8092A2C + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartObjectImageAnim +_0808CB5C: + movs r0, 0x1 + pop {r4-r6} + pop {r1} + bx r1 + .pool + thumb_func_end fish5 + + thumb_func_start fish6 +fish6: @ 808CB6C + push {r4,r5,lr} + sub sp, 0xC + adds r5, r0, 0 + bl sub_808CF78 + ldr r2, =gUnknown_085EE8F7 + movs r0, 0x11 + str r0, [sp] + movs r4, 0 + str r4, [sp, 0x4] + str r4, [sp, 0x8] + movs r0, 0 + movs r1, 0x1 + movs r3, 0 + bl Print + ldrh r0, [r5, 0x8] + adds r0, 0x1 + strh r0, [r5, 0x8] + strh r4, [r5, 0xA] + movs r0, 0 + add sp, 0xC + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end fish6 + + thumb_func_start fish7 +fish7: @ 808CBA4 + push {r4,lr} + sub sp, 0x8 + adds r4, r0, 0 + ldr r1, =gUnknown_084975AA + mov r0, sp + movs r2, 0x6 + bl memcpy + bl sub_808CF78 + 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 _0808CBDC + movs r0, 0xC + b _0808CBEC + .pool +_0808CBDC: + ldr r0, =0x030022c0 + ldrh r1, [r0, 0x2E] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _0808CBEE + ldrh r0, [r4, 0x8] + adds r0, 0x1 +_0808CBEC: + strh r0, [r4, 0x8] +_0808CBEE: + movs r0, 0 + add sp, 0x8 + pop {r4} + pop {r1} + bx r1 + .pool + thumb_func_end fish7 + + thumb_func_start fish8 +fish8: @ 808CBFC + push {r4,lr} + sub sp, 0xC + adds r4, r0, 0 + ldr r1, =gUnknown_084975B0 + mov r0, sp + movs r2, 0xC + bl memcpy + bl sub_808CF78 + 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 _0808CC52 + cmp r1, 0x1 + bgt _0808CC56 + bl GenerateRandomNumber + 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 _0808CC56 +_0808CC52: + movs r0, 0x3 + strh r0, [r4, 0x8] +_0808CC56: + movs r0, 0 + add sp, 0xC + pop {r4} + pop {r1} + bx r1 + .pool + thumb_func_end fish8 + + thumb_func_start fish9 +fish9: @ 808CC64 + push {r4,r5,lr} + sub sp, 0x10 + adds r4, r0, 0 + bl sub_808CF78 + movs r0, 0 + movs r1, 0x11 + bl FillWindowPixelBuffer + ldr r2, =gUnknown_085EE903 + movs r5, 0 + str r5, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x1 + str r0, [sp, 0x8] + movs r0, 0x3 + str r0, [sp, 0xC] + movs r0, 0 + movs r1, 0x1 + movs r3, 0x1 + bl AddTextPrinterParametrized + ldrh r0, [r4, 0x8] + adds r0, 0x1 + strh r0, [r4, 0x8] + strh r5, [r4, 0xA] + movs r0, 0 + add sp, 0x10 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end fish9 + + thumb_func_start fishA_wait_for_a_pressed +fishA_wait_for_a_pressed: @ 808CCA8 + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r5, r0, 0 + movs r1, 0xA + ldrsh r0, [r5, r1] + cmp r0, 0 + bne _0808CCBC + bl sub_808CF78 +_0808CCBC: + bl RunTextPrinters + movs r1, 0xA + ldrsh r0, [r5, r1] + cmp r0, 0 + bne _0808CD58 + movs r0, 0 + bl IsTextPrinterActive + lsls r0, 16 + lsrs r6, r0, 16 + cmp r6, 0 + bne _0808CD50 + ldr r7, =0x02037590 + ldrb r0, [r7, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + mov r8, r0 + add r4, r8 + ldrh r1, [r5, 0x24] + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + 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 _0808CD1A + 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_8155604 +_0808CD1A: + ldr r2, =0x02020630 + ldrb r1, [r7, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + strh r6, [r0, 0x24] + ldrb r1, [r7, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + strh r6, [r0, 0x26] + movs r0, 0 + movs r1, 0x1 + bl sub_8197434 + ldrh r0, [r5, 0xA] + adds r0, 0x1 + strh r0, [r5, 0xA] + b _0808CD80 + .pool +_0808CD50: + movs r1, 0xA + ldrsh r0, [r5, r1] + cmp r0, 0 + beq _0808CD80 +_0808CD58: + ldr r1, =0x02037590 + movs r0, 0 + strb r0, [r1, 0x6] + bl script_env_2_disable + ldrh r0, [r5, 0x26] + lsls r0, 24 + lsrs r0, 24 + bl sub_80B5734 + movs r0, 0x1 + bl sub_80ED950 + ldr r0, =Task_Fish + bl FindTaskIdByFunc + lsls r0, 24 + lsrs r0, 24 + bl DestroyTask +_0808CD80: + movs r0, 0 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + .pool + thumb_func_end fishA_wait_for_a_pressed + + thumb_func_start fishB +fishB: @ 808CD94 + push {r4,r5,lr} + sub sp, 0x10 + adds r5, r0, 0 + bl sub_808CF78 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x4] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02020630 + adds r4, r0 + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + bl sub_8092A1C + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartObjectImageAnim + movs r0, 0 + movs r1, 0x11 + bl FillWindowPixelBuffer + ldr r2, =gUnknown_085EE91E + movs r0, 0 + str r0, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x1 + str r0, [sp, 0x8] + movs r0, 0x3 + str r0, [sp, 0xC] + movs r0, 0 + movs r1, 0x1 + movs r3, 0x1 + bl AddTextPrinterParametrized + movs r0, 0xD + strh r0, [r5, 0x8] + movs r0, 0x1 + add sp, 0x10 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end fishB + + thumb_func_start fishC +fishC: @ 808CE04 + push {r4,r5,lr} + sub sp, 0x10 + adds r5, r0, 0 + bl sub_808CF78 + ldr r0, =0x02037590 + ldrb r0, [r0, 0x4] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02020630 + adds r4, r0 + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + bl sub_8092A1C + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartObjectImageAnim + movs r0, 0 + movs r1, 0x11 + bl FillWindowPixelBuffer + ldr r2, =gUnknown_085EE933 + movs r0, 0 + str r0, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x1 + str r0, [sp, 0x8] + movs r0, 0x3 + str r0, [sp, 0xC] + movs r0, 0 + movs r1, 0x1 + movs r3, 0x1 + bl AddTextPrinterParametrized + ldrh r0, [r5, 0x8] + adds r0, 0x1 + strh r0, [r5, 0x8] + movs r0, 0x1 + add sp, 0x10 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end fishC + + thumb_func_start fishD +fishD: @ 808CE74 + push {r4,lr} + adds r4, r0, 0 + bl sub_808CF78 + 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 fishE +fishE: @ 808CE8C + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r6, r0, 0 + bl sub_808CF78 + ldr r7, =0x02020630 + ldr r5, =0x02037590 + 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 _0808CF12 + ldrb r0, [r5, 0x5] + lsls r4, r0, 3 + adds r4, r0 + lsls r4, 2 + ldr r0, =0x02037350 + mov r8, r0 + add r4, r8 + ldrh r1, [r6, 0x24] + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetGraphicsId + 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 _0808CEF2 + 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_8155604 +_0808CEF2: + 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] +_0808CF12: + movs r0, 0 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + .pool + thumb_func_end fishE + + thumb_func_start fishF +fishF: @ 808CF2C + push {lr} + bl RunTextPrinters + movs r0, 0 + bl IsTextPrinterActive + lsls r0, 16 + lsrs r1, r0, 16 + cmp r1, 0 + bne _0808CF68 + ldr r0, =0x02037590 + strb r1, [r0, 0x6] + bl script_env_2_disable + bl sub_809757C + movs r0, 0 + movs r1, 0x1 + bl sub_8197434 + movs r0, 0 + bl sub_80ED950 + ldr r0, =Task_Fish + bl FindTaskIdByFunc + lsls r0, 24 + lsrs r0, 24 + bl DestroyTask +_0808CF68: + movs r0, 0 + pop {r1} + bx r1 + .pool + thumb_func_end fishF + + thumb_func_start sub_808CF78 +sub_808CF78: @ 808CF78 + push {r4-r7,lr} + ldr r0, =0x02037590 + ldrb r1, [r0, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02020630 + adds r4, r0, r1 + adds r0, r4, 0 + bl AnimateObject + 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 _0808CFEA + 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 _0808CFF0 +_0808CFEA: + subs r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 +_0808CFF0: + 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 _0808D022 + movs r0, 0x8 + strh r0, [r4, 0x24] + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bne _0808D022 + ldr r0, =0x0000fff8 + strh r0, [r4, 0x24] +_0808D022: + cmp r5, 0x5 + bne _0808D02A + ldr r0, =0x0000fff8 + strh r0, [r4, 0x26] +_0808D02A: + adds r0, r5, 0 + subs r0, 0xA + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bhi _0808D03A + movs r0, 0x8 + strh r0, [r4, 0x26] +_0808D03A: + ldr r3, =0x02037590 + ldrb r1, [r3] + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + beq _0808D05E + ldr r2, =0x02037350 + 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_8155604 +_0808D05E: + pop {r4-r7} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808CF78 + + thumb_func_start sub_808D074 +sub_808D074: @ 808D074 + ldr r1, =0x0203734c + strb r0, [r1] + bx lr + .pool + thumb_func_end sub_808D074 + + thumb_func_start sub_808D080 +sub_808D080: @ 808D080 + push {lr} + ldr r1, =0x0203734c + ldrb r0, [r1] + cmp r0, 0 + bne _0808D08C + movs r0, 0x1 +_0808D08C: + pop {r1} + bx r1 + .pool + thumb_func_end sub_808D080 + + thumb_func_start sub_808D094 +sub_808D094: @ 808D094 + push {r4-r7,lr} + mov r7, r8 + push {r7} + lsls r0, 24 + lsrs r0, 24 + adds r2, r0, 0 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r4, r0, r1 + ldrb r1, [r4, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02020630 + adds r7, r0, r1 + lsls r0, r2, 2 + adds r0, r2 + lsls r0, 3 + ldr r1, =0x03005e08 + adds r5, r0, r1 + movs r0, 0 + ldrsh r6, [r5, r0] + cmp r6, 0x1 + beq _0808D14A + cmp r6, 0x1 + bgt _0808D0E8 + cmp r6, 0 + beq _0808D0EE + b _0808D18A + .pool +_0808D0E8: + cmp r6, 0x2 + beq _0808D184 + b _0808D18A +_0808D0EE: + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _0808D18A + ldrb r0, [r4, 0x18] + lsls r0, 28 + lsrs r0, 28 + bl sub_808D074 + movs r1, 0 + mov r8, r1 + strh r6, [r5, 0x2] + movs r0, 0x1 + strh r0, [r5, 0x4] + ldrh r0, [r7, 0x26] + ldrh r2, [r7, 0x22] + adds r0, r2 + lsls r0, 4 + strh r0, [r5, 0x6] + strh r6, [r7, 0x26] + bl CameraObjectReset2 + ldrb r0, [r4, 0x3] + movs r1, 0x4 + orrs r0, r1 + strb r0, [r4, 0x3] + ldrb r1, [r7, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r1 + strb r0, [r7, 0x5] + adds r0, r7, 0 + adds r0, 0x43 + mov r1, r8 + strb r1, [r0] + adds r2, r7, 0 + adds r2, 0x42 + ldrb r1, [r2] + movs r0, 0x3F + ands r0, r1 + strb r0, [r2] + ldrh r0, [r5] + adds r0, 0x1 + strh r0, [r5] +_0808D14A: + adds r1, r5, 0x2 + adds r0, r4, 0 + bl sub_808D38C + ldrh r0, [r5, 0x6] + ldrh r1, [r5, 0x4] + subs r0, r1 + strh r0, [r5, 0x6] + adds r1, 0x3 + strh r1, [r5, 0x4] + lsls r0, 16 + asrs r0, 20 + strh r0, [r7, 0x22] + movs r2, 0x22 + ldrsh r1, [r7, r2] + ldr r0, =0x03005de8 + movs r2, 0 + ldrsh r0, [r0, r2] + adds r1, r0 + movs r0, 0x20 + negs r0, r0 + cmp r1, r0 + bge _0808D18A + ldrh r0, [r5] + adds r0, 0x1 + strh r0, [r5] + b _0808D18A + .pool +_0808D184: + adds r0, r2, 0 + bl DestroyTask +_0808D18A: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_808D094 + + thumb_func_start sub_808D194 +sub_808D194: @ 808D194 + push {r4,lr} + ldr r4, =sub_808D1FC + adds r0, r4, 0 + movs r1, 0 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + bl _call_via_r4 + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808D194 + + thumb_func_start sub_808D1B4 +sub_808D1B4: @ 808D1B4 + push {lr} + ldr r0, =sub_808D1FC + bl FuncIsActiveTask + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end sub_808D1B4 + + thumb_func_start sub_808D1C8 +sub_808D1C8: @ 808D1C8 + push {r4,lr} + ldr r4, =sub_808D094 + adds r0, r4, 0 + movs r1, 0 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + bl _call_via_r4 + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end sub_808D1C8 + + thumb_func_start sub_808D1E8 +sub_808D1E8: @ 808D1E8 + push {lr} + ldr r0, =sub_808D094 + bl FuncIsActiveTask + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .pool + thumb_func_end sub_808D1E8 + + thumb_func_start sub_808D1FC +sub_808D1FC: @ 808D1FC + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + lsls r0, 24 + lsrs r0, 24 + mov r8, r0 + ldr r0, =0x02037590 + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02037350 + adds r4, r0, r1 + ldrb r1, [r4, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02020630 + adds r7, r0, r1 + mov r1, r8 + lsls r0, r1, 2 + add r0, r8 + lsls r0, 3 + ldr r1, =0x03005e08 + adds r5, r0, r1 + movs r2, 0 + ldrsh r6, [r5, r2] + cmp r6, 0x1 + beq _0808D2DE + cmp r6, 0x1 + bgt _0808D254 + cmp r6, 0 + beq _0808D25E + b _0808D37E + .pool +_0808D254: + cmp r6, 0x2 + beq _0808D31C + cmp r6, 0x3 + beq _0808D33A + b _0808D37E +_0808D25E: + bl sub_808D080 + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0xA] + ldr r1, =gUnknown_084975BC + movs r3, 0xA + ldrsh r0, [r5, r3] + adds r0, r1 + ldrb r0, [r0] + bl GetFaceDirectionAnimId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectForceSetSpecialAnim + movs r0, 0 + mov r9, r0 + strh r6, [r5, 0x2] + movs r0, 0x74 + strh r0, [r5, 0x4] + ldrh r0, [r7, 0x22] + strh r0, [r5, 0x8] + ldrb r0, [r7, 0x5] + lsls r0, 28 + lsrs r0, 30 + strh r0, [r5, 0xC] + movs r1, 0x43 + adds r1, r7 + mov r8, r1 + ldrb r0, [r1] + strh r0, [r5, 0xE] + ldrh r0, [r7, 0x26] + adds r0, 0x20 + negs r0, r0 + lsls r0, 4 + strh r0, [r5, 0x6] + strh r6, [r7, 0x26] + bl CameraObjectReset2 + ldrb r0, [r4, 0x3] + movs r2, 0x4 + orrs r0, r2 + strb r0, [r4, 0x3] + ldrb r1, [r7, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r1 + orrs r0, r2 + strb r0, [r7, 0x5] + mov r3, r9 + mov r2, r8 + strb r3, [r2] + adds r2, r7, 0 + adds r2, 0x42 + ldrb r1, [r2] + movs r0, 0x3F + ands r0, r1 + strb r0, [r2] + ldrh r0, [r5] + adds r0, 0x1 + strh r0, [r5] +_0808D2DE: + adds r1, r5, 0x2 + adds r0, r4, 0 + bl sub_808D38C + ldrh r0, [r5, 0x4] + ldrh r2, [r5, 0x6] + adds r1, r0, r2 + strh r1, [r5, 0x6] + subs r0, 0x3 + strh r0, [r5, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3 + bgt _0808D2FE + movs r0, 0x4 + strh r0, [r5, 0x4] +_0808D2FE: + ldrh r0, [r5, 0x6] + lsls r0, 16 + asrs r0, 20 + strh r0, [r7, 0x22] + ldrh r2, [r5, 0x8] + movs r3, 0x8 + ldrsh r1, [r5, r3] + cmp r0, r1 + blt _0808D37E + strh r2, [r7, 0x22] + movs r0, 0 + strh r0, [r5, 0x10] + b _0808D332 + .pool +_0808D31C: + adds r1, r5, 0x2 + adds r0, r4, 0 + bl sub_808D38C + ldrh r0, [r5, 0x10] + adds r0, 0x1 + strh r0, [r5, 0x10] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x8 + ble _0808D37E +_0808D332: + ldrh r0, [r5] + adds r0, 0x1 + strh r0, [r5] + b _0808D37E +_0808D33A: + movs r0, 0xA + ldrsh r6, [r5, r0] + adds r1, r5, 0x2 + adds r0, r4, 0 + bl sub_808D38C + lsls r0, 24 + lsrs r0, 24 + cmp r6, r0 + bne _0808D37E + ldrb r1, [r4, 0x3] + movs r0, 0x5 + negs r0, r0 + ands r0, r1 + strb r0, [r4, 0x3] + movs r0, 0x3 + ldrb r1, [r5, 0xC] + ands r1, r0 + lsls r1, 2 + ldrb r2, [r7, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r7, 0x5] + ldrh r1, [r5, 0xE] + adds r0, r7, 0 + adds r0, 0x43 + strb r1, [r0] + bl CameraObjectReset1 + mov r0, r8 + bl DestroyTask +_0808D37E: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_808D1FC + + thumb_func_start sub_808D38C +sub_808D38C: @ 808D38C + push {r4-r6,lr} + adds r5, r0, 0 + adds r6, r1, 0 + ldrh r1, [r6] + movs r2, 0 + ldrsh r0, [r6, r2] + cmp r0, 0x7 + bgt _0808D3A8 + adds r0, r1, 0x1 + strh r0, [r6] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x7 + ble _0808D3E4 +_0808D3A8: + adds r0, r5, 0 + bl FieldObjectCheckIfSpecialAnimFinishedOrInactive + lsls r0, 24 + cmp r0, 0 + beq _0808D3E4 + ldr r4, =gUnknown_084975BC + ldrb r0, [r5, 0x18] + lsls r0, 28 + lsrs r0, 28 + adds r0, r4 + ldrb r0, [r0] + bl GetFaceDirectionAnimId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r5, 0 + bl FieldObjectForceSetSpecialAnim + movs r0, 0 + strh r0, [r6] + ldrb r0, [r5, 0x18] + lsls r0, 28 + lsrs r0, 28 + adds r0, r4 + ldrb r0, [r0] + b _0808D3EA + .pool +_0808D3E4: + ldrb r0, [r5, 0x18] + lsls r0, 28 + lsrs r0, 28 +_0808D3EA: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_808D38C + + .align 2, 0 @ Don't pad with nop. |