diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-01-20 23:20:02 -0600 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-20 21:20:02 -0800 |
commit | 3d3ef45a8c3d4f974dac94ab49fe906d26a8edab (patch) | |
tree | d840eeca4d7067f67fccb8897dd9a39a69de0fb0 | |
parent | c2fa3b27f9025934e0b59d7908f5b5ecd97c19e4 (diff) |
decompile more of bike (#205)
* start decompiling bike.c
* decompile more of bike.c
* decompile MovePlayerOnAcroBike and CheckMovementInputAcroBike
* decompile more of bike
-rw-r--r-- | asm/bike.s | 1395 | ||||
-rw-r--r-- | include/field_player_avatar.h | 26 | ||||
-rw-r--r-- | include/global.fieldmap.h | 4 | ||||
-rw-r--r-- | src/bike.c | 653 |
4 files changed, 615 insertions, 1463 deletions
diff --git a/asm/bike.s b/asm/bike.s index 27984c50d..4966910c0 100644 --- a/asm/bike.s +++ b/asm/bike.s @@ -5,1401 +5,6 @@ .syntax unified .text - - thumb_func_start CheckMovementInputAcroBikeNormal -CheckMovementInputAcroBikeNormal: @ 80E5340 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r5, r2, 16 - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, _080E5374 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r2, 0xA] - ldrb r1, [r4] - cmp r1, 0 - bne _080E5380 - movs r0, 0x2 - ands r0, r6 - cmp r0, 0 - beq _080E5378 - strb r3, [r4] - strb r1, [r2, 0x2] - movs r0, 0x2 - strb r0, [r2, 0x8] - movs r0, 0x3 - b _080E53D4 - .align 2, 0 -_080E5374: .4byte gPlayerAvatar -_080E5378: - strb r3, [r4] - strb r1, [r2, 0x2] - movs r0, 0 - b _080E53D4 -_080E5380: - cmp r1, r3 - bne _080E53A6 - movs r0, 0x2 - ands r0, r5 - cmp r0, 0 - beq _080E539E - ldrb r0, [r2, 0xB] - cmp r0, 0 - bne _080E539E - adds r0, 0x1 - strb r0, [r2, 0xB] - movs r0, 0x4 - strb r0, [r2, 0x8] - movs r0, 0xB - b _080E53D4 -_080E539E: - ldrb r0, [r4] - ldr r2, _080E53CC @ =gPlayerAvatar - cmp r0, r3 - beq _080E53D0 -_080E53A6: - ldr r0, _080E53CC @ =gPlayerAvatar - ldrb r1, [r0, 0x2] - adds r2, r0, 0 - cmp r1, 0x2 - beq _080E53D0 - movs r1, 0 - movs r0, 0x1 - strb r0, [r2, 0x8] - ldrb r0, [r4] - strb r0, [r2, 0x9] - strb r1, [r2, 0x2] - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl CheckMovementInputAcroBike - lsls r0, 24 - lsrs r0, 24 - b _080E53D4 - .align 2, 0 -_080E53CC: .4byte gPlayerAvatar -_080E53D0: - movs r0, 0x2 - strb r0, [r2, 0x2] -_080E53D4: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CheckMovementInputAcroBikeNormal - - thumb_func_start CheckMovementInputAcroBikeChangingDirection -CheckMovementInputAcroBikeChangingDirection: @ 80E53DC - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, _080E5404 @ =gPlayerAvatar - ldrb r0, [r4, 0x9] - strb r0, [r5] - ldrb r0, [r4, 0xA] - adds r0, 0x1 - strb r0, [r4, 0xA] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bls _080E5408 - movs r0, 0x1 - strb r0, [r4, 0x2] - movs r0, 0 - strb r0, [r4, 0x8] - bl sub_80E6024 - movs r0, 0x1 - b _080E544E - .align 2, 0 -_080E5404: .4byte gPlayerAvatar -_080E5408: - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r6, r0, 24 - bl sub_80E5C2C - ldrb r1, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _080E544A - bl sub_80E6024 - movs r0, 0x1 - strb r0, [r4, 0xB] - adds r0, r6, 0 - bl GetOppositeDirection - ldrb r1, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _080E543E - movs r0, 0x6 - strb r0, [r4, 0x8] - movs r0, 0x9 - b _080E544E -_080E543E: - movs r0, 0x2 - strb r0, [r4, 0x2] - movs r0, 0x5 - strb r0, [r4, 0x8] - movs r0, 0x8 - b _080E544E -_080E544A: - strb r6, [r5] - movs r0, 0 -_080E544E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CheckMovementInputAcroBikeChangingDirection - - thumb_func_start CheckMovementInputAcroBikeStandingWheelie -CheckMovementInputAcroBikeStandingWheelie: @ 80E5454 - push {r4-r7,lr} - adds r7, r0, 0 - lsls r4, r2, 16 - lsrs r4, 16 - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r6, r0, 24 - ldr r5, _080E54A0 @ =gPlayerAvatar - ldrb r1, [r5, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E54A4 @ =gMapObjects - adds r1, r0, r1 - movs r0, 0 - strb r0, [r5, 0x2] - movs r0, 0x2 - ands r4, r0 - lsls r4, 16 - lsrs r4, 16 - cmp r4, 0 - bne _080E54A8 - strb r4, [r5, 0xA] - ldrb r0, [r1, 0x1E] - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080E54AE - strb r6, [r7] - strb r0, [r5, 0x8] - bl sub_80E6024 - movs r0, 0x4 - b _080E54EC - .align 2, 0 -_080E54A0: .4byte gPlayerAvatar -_080E54A4: .4byte gMapObjects -_080E54A8: - ldrb r0, [r5, 0xA] - adds r0, 0x1 - strb r0, [r5, 0xA] -_080E54AE: - ldr r1, _080E54C4 @ =gPlayerAvatar - ldrb r0, [r1, 0xA] - cmp r0, 0x27 - bls _080E54C8 - strb r6, [r7] - movs r0, 0x3 - strb r0, [r1, 0x8] - bl sub_80E6024 - movs r0, 0x6 - b _080E54EC - .align 2, 0 -_080E54C4: .4byte gPlayerAvatar -_080E54C8: - ldrb r0, [r7] - cmp r0, r6 - bne _080E54DE - movs r0, 0x2 - strb r0, [r1, 0x2] - movs r0, 0x4 - strb r0, [r1, 0x8] - bl sub_80E6024 - movs r0, 0xA - b _080E54EC -_080E54DE: - cmp r0, 0 - beq _080E54E8 - movs r0, 0x1 - strb r0, [r1, 0x2] - b _080E54EA -_080E54E8: - strb r6, [r7] -_080E54EA: - movs r0, 0x5 -_080E54EC: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckMovementInputAcroBikeStandingWheelie - - thumb_func_start CheckMovementInputAcroBikeBunnyHop -CheckMovementInputAcroBikeBunnyHop: @ 80E54F4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, r5, 0 - ldr r4, _080E5554 @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E5558 @ =gMapObjects - adds r7, r0, r1 - movs r0, 0x2 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _080E5566 - bl sub_80E6024 - ldrb r0, [r7, 0x1E] - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080E555C - movs r0, 0x2 - strb r0, [r4, 0x8] - adds r0, r6, 0 - mov r1, r9 - mov r2, r8 - bl CheckMovementInputAcroBike - lsls r0, 24 - lsrs r0, 24 - b _080E558A - .align 2, 0 -_080E5554: .4byte gPlayerAvatar -_080E5558: .4byte gMapObjects -_080E555C: - strb r5, [r6] - strb r0, [r4, 0x2] - strb r0, [r4, 0x8] - movs r0, 0x4 - b _080E558A -_080E5566: - ldrb r0, [r6] - cmp r0, 0 - bne _080E5570 - strb r5, [r6] - b _080E557C -_080E5570: - cmp r0, r2 - beq _080E5582 - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - beq _080E5582 - movs r0, 0x1 -_080E557C: - strb r0, [r4, 0x2] - movs r0, 0x6 - b _080E558A -_080E5582: - ldr r1, _080E5598 @ =gPlayerAvatar - movs r0, 0x2 - strb r0, [r1, 0x2] - movs r0, 0x7 -_080E558A: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080E5598: .4byte gPlayerAvatar - thumb_func_end CheckMovementInputAcroBikeBunnyHop - - thumb_func_start CheckMovementInputAcroBikeMovingWheelie -CheckMovementInputAcroBikeMovingWheelie: @ 80E559C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r6, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, r5, 0 - ldr r4, _080E55F8 @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E55FC @ =gMapObjects - adds r7, r0, r1 - movs r0, 0x2 - mov r9, r0 - movs r0, 0x2 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _080E5634 - bl sub_80E6024 - ldrb r0, [r7, 0x1E] - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080E5620 - strb r1, [r4, 0x8] - ldrb r0, [r6] - cmp r0, 0 - bne _080E5600 - strb r5, [r6] - b _080E560A - .align 2, 0 -_080E55F8: .4byte gPlayerAvatar -_080E55FC: .4byte gMapObjects -_080E5600: - cmp r0, r5 - beq _080E5610 - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - beq _080E5610 -_080E560A: - strb r1, [r4, 0x2] - movs r0, 0x4 - b _080E5664 -_080E5610: - ldr r1, _080E561C @ =gPlayerAvatar - movs r0, 0x2 - strb r0, [r1, 0x2] - movs r0, 0xC - b _080E5664 - .align 2, 0 -_080E561C: .4byte gPlayerAvatar -_080E5620: - mov r0, r9 - strb r0, [r4, 0x8] - adds r0, r6, 0 - mov r1, r10 - mov r2, r8 - bl CheckMovementInputAcroBike - lsls r0, 24 - lsrs r0, 24 - b _080E5664 -_080E5634: - ldrb r0, [r6] - cmp r0, 0 - bne _080E564A - strb r5, [r6] - mov r1, r9 - strb r1, [r4, 0x8] - strb r0, [r4, 0x2] - bl sub_80E6024 - movs r0, 0x5 - b _080E5664 -_080E564A: - cmp r2, r0 - beq _080E565C - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - beq _080E565C - movs r0, 0 - strb r0, [r4, 0x2] - movs r0, 0x5 - b _080E5664 -_080E565C: - ldr r1, _080E5674 @ =gPlayerAvatar - movs r0, 0x2 - strb r0, [r1, 0x2] - movs r0, 0xA -_080E5664: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080E5674: .4byte gPlayerAvatar - thumb_func_end CheckMovementInputAcroBikeMovingWheelie - - thumb_func_start CheckMovementInputAcroBikeUnknownMode5 -CheckMovementInputAcroBikeUnknownMode5: @ 80E5678 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r6, _080E56CC @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E56D0 @ =gMapObjects - adds r0, r1 - ldrb r2, [r0, 0x1] - movs r1, 0x3 - negs r1, r1 - ands r1, r2 - strb r1, [r0, 0x1] - ldrb r1, [r0, 0x18] - lsls r1, 28 - lsrs r1, 28 - bl FieldObjectSetDirection - movs r0, 0 - strb r0, [r6, 0x8] - mov r0, r8 - adds r1, r4, 0 - adds r2, r5, 0 - bl CheckMovementInputAcroBike - lsls r0, 24 - lsrs r0, 24 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080E56CC: .4byte gPlayerAvatar -_080E56D0: .4byte gMapObjects - thumb_func_end CheckMovementInputAcroBikeUnknownMode5 - - thumb_func_start CheckMovementInputAcroBikeUnknownMode6 -CheckMovementInputAcroBikeUnknownMode6: @ 80E56D4 - push {r4,lr} - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - ldr r4, _080E56F4 @ =gPlayerAvatar - movs r3, 0 - strb r3, [r4, 0x8] - bl CheckMovementInputAcroBike - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080E56F4: .4byte gPlayerAvatar - thumb_func_end CheckMovementInputAcroBikeUnknownMode6 - - thumb_func_start sub_80E56F8 -sub_80E56F8: @ 80E56F8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl PlayerFaceDirection - pop {r0} - bx r0 - thumb_func_end sub_80E56F8 - - thumb_func_start sub_80E5708 -sub_80E5708: @ 80E5708 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E573C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E5740 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E572E - ldrb r0, [r5, 0x18] - lsrs r4, r0, 4 -_080E572E: - adds r0, r4, 0 - bl PlayerFaceDirection - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E573C: .4byte gPlayerAvatar -_080E5740: .4byte gMapObjects - thumb_func_end sub_80E5708 - - thumb_func_start sub_80E5744 -sub_80E5744: @ 80E5744 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - ldr r0, _080E5774 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E5778 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E577C - ldrb r0, [r5, 0x18] - lsrs r0, 4 - bl sub_80E56F8 - b _080E57B6 - .align 2, 0 -_080E5774: .4byte gPlayerAvatar -_080E5778: .4byte gMapObjects -_080E577C: - adds r0, r4, 0 - bl sub_80E5D34 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xFF - lsls r2, 24 - adds r0, r2 - lsrs r0, 24 - cmp r0, 0xA - bhi _080E57B0 - cmp r1, 0x6 - bne _080E579E - adds r0, r4, 0 - bl PlayerJumpLedge - b _080E57B6 -_080E579E: - subs r0, r1, 0x5 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _080E57B6 - adds r0, r4, 0 - bl PlayerOnBikeCollide - b _080E57B6 -_080E57B0: - adds r0, r6, 0 - bl npc_use_some_d2s -_080E57B6: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80E5744 - - thumb_func_start sub_80E57BC -sub_80E57BC: @ 80E57BC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E57F0 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E57F4 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E57E2 - ldrb r0, [r5, 0x18] - lsrs r4, r0, 4 -_080E57E2: - adds r0, r4, 0 - bl sub_805951C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E57F0: .4byte gPlayerAvatar -_080E57F4: .4byte gMapObjects - thumb_func_end sub_80E57BC - - thumb_func_start sub_80E57F8 -sub_80E57F8: @ 80E57F8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E582C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E5830 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E581E - ldrb r0, [r5, 0x18] - lsrs r4, r0, 4 -_080E581E: - adds r0, r4, 0 - bl sub_8059534 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E582C: .4byte gPlayerAvatar -_080E5830: .4byte gMapObjects - thumb_func_end sub_80E57F8 - - thumb_func_start sub_80E5834 -sub_80E5834: @ 80E5834 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E5868 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E586C @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E585A - ldrb r0, [r5, 0x18] - lsrs r4, r0, 4 -_080E585A: - adds r0, r4, 0 - bl sub_8059504 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E5868: .4byte gPlayerAvatar -_080E586C: .4byte gMapObjects - thumb_func_end sub_80E5834 - - thumb_func_start sub_80E5870 -sub_80E5870: @ 80E5870 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E58A4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E58A8 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E5896 - ldrb r0, [r5, 0x18] - lsrs r4, r0, 4 -_080E5896: - adds r0, r4, 0 - bl sub_805954C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E58A4: .4byte gPlayerAvatar -_080E58A8: .4byte gMapObjects - thumb_func_end sub_80E5870 - - thumb_func_start sub_80E58AC -sub_80E58AC: @ 80E58AC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E58D8 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E58DC @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E58E0 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - bl sub_80E5870 - b _080E591A - .align 2, 0 -_080E58D8: .4byte gPlayerAvatar -_080E58DC: .4byte gMapObjects -_080E58E0: - adds r0, r4, 0 - bl sub_80E5D34 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080E5914 - cmp r1, 0x9 - beq _080E5914 - cmp r1, 0x6 - bne _080E58FE - adds r0, r4, 0 - bl sub_8059594 - b _080E591A -_080E58FE: - subs r0, r1, 0x5 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _080E591A - cmp r1, 0xB - bhi _080E5914 - adds r0, r4, 0 - bl sub_80E5870 - b _080E591A -_080E5914: - adds r0, r4, 0 - bl sub_8059570 -_080E591A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E58AC - - thumb_func_start sub_80E5920 -sub_80E5920: @ 80E5920 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_80E5D34 - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0 - beq _080E5954 - cmp r0, 0x7 - beq _080E5980 - cmp r0, 0x9 - bls _080E594C - adds r0, r1, 0 - adds r1, r5, 0 - bl sub_80E5EC0 - lsls r0, 24 - cmp r0, 0 - bne _080E5954 -_080E594C: - adds r0, r5, 0 - bl sub_80E5708 - b _080E5980 -_080E5954: - ldr r0, _080E5988 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _080E598C @ =gMapObjects - adds r4, r0 - movs r0, 0x22 - bl PlaySE - ldrb r0, [r4, 0x1] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4, 0x1] - adds r0, r5, 0 - bl sub_80608A4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl player_npc_set_state_and_x22_etc -_080E5980: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E5988: .4byte gPlayerAvatar -_080E598C: .4byte gMapObjects - thumb_func_end sub_80E5920 - - thumb_func_start sub_80E5990 -sub_80E5990: @ 80E5990 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80595B8 - pop {r0} - bx r0 - thumb_func_end sub_80E5990 - - thumb_func_start sub_80E59A0 -sub_80E59A0: @ 80E59A0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - ldr r7, _080E59D0 @ =gPlayerAvatar - ldrb r1, [r7, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E59D4 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E59D8 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - bl sub_8059504 - b _080E5A28 - .align 2, 0 -_080E59D0: .4byte gPlayerAvatar -_080E59D4: .4byte gMapObjects -_080E59D8: - adds r0, r4, 0 - bl sub_80E5D34 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xFF - lsls r2, 24 - adds r0, r2 - lsrs r0, 24 - cmp r0, 0xA - bhi _080E5A1E - cmp r1, 0x6 - bne _080E59FA - adds r0, r4, 0 - bl sub_8059594 - b _080E5A28 -_080E59FA: - cmp r1, 0x9 - beq _080E5A0E - cmp r1, 0x4 - bhi _080E5A28 - ldrb r0, [r5, 0x1E] - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - cmp r0, 0 - beq _080E5A16 -_080E5A0E: - adds r0, r4, 0 - bl sub_8059504 - b _080E5A28 -_080E5A16: - adds r0, r4, 0 - bl sub_80595DC - b _080E5A28 -_080E5A1E: - adds r0, r6, 0 - bl sub_8059618 - movs r0, 0x2 - strb r0, [r7, 0x2] -_080E5A28: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80E59A0 - - thumb_func_start sub_80E5A30 -sub_80E5A30: @ 80E5A30 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - ldr r7, _080E5A60 @ =gPlayerAvatar - ldrb r1, [r7, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E5A64 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E5A68 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - bl sub_805951C - b _080E5AB8 - .align 2, 0 -_080E5A60: .4byte gPlayerAvatar -_080E5A64: .4byte gMapObjects -_080E5A68: - adds r0, r4, 0 - bl sub_80E5D34 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xFF - lsls r2, 24 - adds r0, r2 - lsrs r0, 24 - cmp r0, 0xA - bhi _080E5AAE - cmp r1, 0x6 - bne _080E5A8A - adds r0, r4, 0 - bl sub_8059594 - b _080E5AB8 -_080E5A8A: - cmp r1, 0x9 - beq _080E5A9E - cmp r1, 0x4 - bhi _080E5AB8 - ldrb r0, [r5, 0x1E] - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - cmp r0, 0 - beq _080E5AA6 -_080E5A9E: - adds r0, r4, 0 - bl sub_8059504 - b _080E5AB8 -_080E5AA6: - adds r0, r4, 0 - bl sub_80595DC - b _080E5AB8 -_080E5AAE: - adds r0, r6, 0 - bl sub_8059600 - movs r0, 0x2 - strb r0, [r7, 0x2] -_080E5AB8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80E5A30 - - thumb_func_start sub_80E5AC0 -sub_80E5AC0: @ 80E5AC0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - ldr r0, _080E5AF0 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E5AF4 @ =gMapObjects - adds r5, r0, r1 - ldrb r1, [r5, 0x1E] - adds r0, r4, 0 - bl sub_80E5E70 - lsls r0, 24 - cmp r0, 0 - bne _080E5AF8 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - bl sub_8059534 - b _080E5B32 - .align 2, 0 -_080E5AF0: .4byte gPlayerAvatar -_080E5AF4: .4byte gMapObjects -_080E5AF8: - adds r0, r4, 0 - bl sub_80E5D34 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xFF - lsls r2, 24 - adds r0, r2 - lsrs r0, 24 - cmp r0, 0xA - bhi _080E5B2C - cmp r1, 0x6 - bne _080E5B1A - adds r0, r4, 0 - bl PlayerJumpLedge - b _080E5B32 -_080E5B1A: - subs r0, r1, 0x5 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _080E5B32 - adds r0, r4, 0 - bl sub_8059534 - b _080E5B32 -_080E5B2C: - adds r0, r6, 0 - bl sub_8059630 -_080E5B32: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80E5AC0 - - thumb_func_start sub_80E5B38 -sub_80E5B38: @ 80E5B38 - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 16 - lsrs r2, r1, 16 - ldr r0, _080E5B5C @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080E5B56 - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_80E5B60 -_080E5B56: - pop {r0} - bx r0 - .align 2, 0 -_080E5B5C: .4byte gPlayerAvatar - thumb_func_end sub_80E5B38 - - thumb_func_start sub_80E5B60 -sub_80E5B60: @ 80E5B60 - push {r4,r5,lr} - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r5, 0 - bl sub_80E5CF4 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r4, _080E5B88 @ =gPlayerAvatar - ldr r0, [r4, 0xC] - movs r1, 0xF - ands r0, r1 - cmp r2, r0 - bne _080E5B8C - ldrb r0, [r4, 0x14] - cmp r0, 0xFE - bhi _080E5B96 - adds r0, 0x1 - strb r0, [r4, 0x14] - b _080E5B96 - .align 2, 0 -_080E5B88: .4byte gPlayerAvatar -_080E5B8C: - adds r0, r2, 0 - bl sub_80E5C7C - movs r0, 0 - strb r0, [r4, 0xB] -_080E5B96: - movs r0, 0xF - adds r2, r5, 0 - ands r2, r0 - ldr r4, _080E5BB4 @ =gPlayerAvatar - ldr r0, [r4, 0x10] - movs r1, 0xF - ands r0, r1 - cmp r2, r0 - bne _080E5BB8 - ldrb r0, [r4, 0x1C] - cmp r0, 0xFE - bhi _080E5BC2 - adds r0, 0x1 - strb r0, [r4, 0x1C] - b _080E5BC2 - .align 2, 0 -_080E5BB4: .4byte gPlayerAvatar -_080E5BB8: - adds r0, r2, 0 - bl sub_80E5CB8 - movs r0, 0 - strb r0, [r4, 0xB] -_080E5BC2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E5B60 - - thumb_func_start sub_80E5BC8 -sub_80E5BC8: @ 80E5BC8 - push {r4,r5,lr} - adds r3, r0, 0 - adds r4, r1, 0 - movs r2, 0 - ldrb r0, [r3] - cmp r0, 0 - beq _080E5BF2 - ldr r5, _080E5C0C @ =gUnknown_0202E86C -_080E5BD8: - adds r0, r2, r5 - adds r1, r3, r2 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bhi _080E5C08 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r3, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _080E5BD8 -_080E5BF2: - movs r2, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _080E5C22 - ldr r3, _080E5C10 @ =gUnknown_0202E874 -_080E5BFC: - adds r0, r2, r3 - adds r1, r4, r2 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bls _080E5C14 -_080E5C08: - movs r0, 0 - b _080E5C24 - .align 2, 0 -_080E5C0C: .4byte gUnknown_0202E86C -_080E5C10: .4byte gUnknown_0202E874 -_080E5C14: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r4, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _080E5BFC -_080E5C22: - movs r0, 0x1 -_080E5C24: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80E5BC8 - - thumb_func_start sub_80E5C2C -sub_80E5C2C: @ 80E5C2C - push {r4-r6,lr} - movs r6, 0 - movs r5, 0 -_080E5C32: - ldr r0, _080E5C64 @ =gUnknown_083DB608 - adds r4, r5, r0 - ldr r0, _080E5C68 @ =gPlayerAvatar - ldr r1, [r0, 0xC] - ldr r2, [r0, 0x10] - ldr r0, [r4, 0x8] - ands r1, r0 - ldr r0, [r4, 0xC] - ands r2, r0 - ldr r0, [r4] - cmp r1, r0 - bne _080E5C6C - ldr r0, [r4, 0x4] - cmp r2, r0 - bne _080E5C6C - ldr r0, [r4, 0x10] - ldr r1, [r4, 0x14] - bl sub_80E5BC8 - lsls r0, 24 - cmp r0, 0 - beq _080E5C6C - ldrb r0, [r4, 0x18] - b _080E5C76 - .align 2, 0 -_080E5C64: .4byte gUnknown_083DB608 -_080E5C68: .4byte gPlayerAvatar -_080E5C6C: - adds r5, 0x1C - adds r6, 0x1 - cmp r6, 0x3 - bls _080E5C32 - movs r0, 0 -_080E5C76: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80E5C2C - - thumb_func_start sub_80E5C7C -sub_80E5C7C: @ 80E5C7C - push {r4,lr} - lsls r0, 24 - ldr r3, _080E5CB4 @ =gPlayerAvatar - ldr r2, [r3, 0xC] - lsls r2, 4 - movs r1, 0xF0 - lsls r1, 20 - ands r1, r0 - lsrs r1, 24 - orrs r2, r1 - str r2, [r3, 0xC] - movs r1, 0x7 - adds r4, r3, 0 - adds r3, 0x14 -_080E5C98: - adds r2, r1, r3 - subs r1, 0x1 - adds r0, r1, r3 - ldrb r0, [r0] - strb r0, [r2] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - bne _080E5C98 - movs r0, 0x1 - strb r0, [r4, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5CB4: .4byte gPlayerAvatar - thumb_func_end sub_80E5C7C - - thumb_func_start sub_80E5CB8 -sub_80E5CB8: @ 80E5CB8 - push {r4,lr} - lsls r0, 24 - ldr r3, _080E5CF0 @ =gPlayerAvatar - ldr r2, [r3, 0x10] - lsls r2, 4 - movs r1, 0xF0 - lsls r1, 20 - ands r1, r0 - lsrs r1, 24 - orrs r2, r1 - str r2, [r3, 0x10] - movs r1, 0x7 - adds r4, r3, 0 - adds r3, 0x1C -_080E5CD4: - adds r2, r1, r3 - subs r1, 0x1 - adds r0, r1, r3 - ldrb r0, [r0] - strb r0, [r2] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - bne _080E5CD4 - movs r0, 0x1 - strb r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5CF0: .4byte gPlayerAvatar - thumb_func_end sub_80E5CB8 - - thumb_func_start sub_80E5CF4 -sub_80E5CF4: @ 80E5CF4 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - adds r2, r1, 0 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080E5D08 - movs r0, 0x2 - b _080E5D2E -_080E5D08: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E5D14 - movs r0, 0x1 - b _080E5D2E -_080E5D14: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080E5D20 - movs r0, 0x3 - b _080E5D2E -_080E5D20: - movs r0, 0x10 - ands r2, r0 - cmp r2, 0 - bne _080E5D2C - movs r0, 0 - b _080E5D2E -_080E5D2C: - movs r0, 0x4 -_080E5D2E: - pop {r1} - bx r1 - thumb_func_end sub_80E5CF4 - - thumb_func_start sub_80E5D34 -sub_80E5D34: @ 80E5D34 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _080E5D98 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _080E5D9C @ =gMapObjects - adds r4, r0 - ldrh r1, [r4, 0x10] - add r0, sp, 0x4 - strh r1, [r0] - ldrh r0, [r4, 0x12] - mov r5, sp - adds r5, 0x6 - strh r0, [r5] - adds r0, r6, 0 - add r1, sp, 0x4 - adds r2, r5, 0 - bl MoveCoords - add r0, sp, 0x4 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r5, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - add r1, sp, 0x4 - movs r3, 0 - ldrsh r1, [r1, r3] - movs r3, 0 - ldrsh r2, [r5, r3] - str r0, [sp] - adds r0, r4, 0 - adds r3, r6, 0 - bl sub_80E5DA0 - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080E5D98: .4byte gPlayerAvatar -_080E5D9C: .4byte gMapObjects - thumb_func_end sub_80E5D34 thumb_func_start sub_80E5DA0 sub_80E5DA0: @ 80E5DA0 diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index b07690f61..9636c2dc1 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -34,28 +34,28 @@ void SetPlayerAvatarTransitionFlags(u16 a); // sub_80591F4 void sub_8059204(void); // player_get_x22 -// player_npc_set_state_and_x22_etc +void player_npc_set_state_and_x22_etc(u8 a, u8 b); void PlayerGoSpeed0(u8 a); void sub_80593C4(u8 a); void npc_use_some_d2s(u8 a); // sub_80593F4 void sub_805940C(u8 a); -// PlayerOnBikeCollide +void PlayerOnBikeCollide(u8); void PlayerFaceDirection(u8 a); void PlayerTurnInPlace(u8 a); void PlayerJumpLedge(u8 a); void sub_80594C0(void); -// sub_8059504 -// sub_805951C -// sub_8059534 -// sub_805954C -// sub_8059570 -// sub_8059594 -// sub_80595B8 -// sub_80595DC -// sub_8059600 -// sub_8059618 -// sub_8059630 +void sub_8059504(u8 a); +void sub_805951C(u8 a); +void sub_8059534(u8 a); +void sub_805954C(u8 a); +void sub_8059570(u8 a); +void sub_8059594(u8 a); +void sub_80595B8(u8 a); +void sub_80595DC(u8 a); +void sub_8059600(u8 a); +void sub_8059618(u8 a); +void sub_8059630(u8 a); void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y); void PlayerGetDestCoords(s16 *, s16 *); u8 player_get_direction_lower_nybble(void); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 64c2e8181..eac2c0cf1 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -316,6 +316,10 @@ struct PlayerAvatar /* 0x202E858 */ u8 unk9; u8 unkA; u8 unkB; + u32 unkC; + u32 unk10; + u8 unk14[8]; + u8 unk1C[8]; // TODO: rest of struct }; diff --git a/src/bike.c b/src/bike.c index 35c6dc97d..4d882d21a 100644 --- a/src/bike.c +++ b/src/bike.c @@ -2,17 +2,37 @@ #include "global.fieldmap.h" #include "flags.h" #include "asm.h" +#include "field_map_obj.h" #include "field_player_avatar.h" +#include "metatile_behavior.h" +#include "songs.h" +#include "sound.h" +struct UnknownStruct1 +{ + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u8 *unk10; + u8 *unk14; + u32 unk18; +}; + +extern u8 gUnknown_0202E86C[]; +extern u8 gUnknown_0202E874[]; extern void (*gUnknown_083DB594[])(u8); extern void (*gUnknown_083DB5A4[])(u8); extern void (*gUnknown_083DB5B0[])(u8); extern u8 (*gUnknown_083DB5E4[])(u8 *, u16, u16); +extern const struct UnknownStruct1 gUnknown_083DB608[]; extern void sub_80E6024(void); extern u8 sub_80E5E70(u8, u8); -extern void PlayerOnBikeCollide(u8); extern u8 sub_80E5D34(u8); +extern u8 sub_80608A4(u8); +extern u8 sub_80E5EC0(); +extern u8 IsRunningDisallowedByMetatile(u8); void MovePlayerOnMachBike(u8, u16, u16); u8 CheckMovementInputMachBike(u8 *); @@ -20,6 +40,13 @@ u8 CheckMovementInputAcroBike(u8 *, u16, u16); void sub_80E5168(u8); void sub_80E5270(u8); void MovePlayerOnAcroBike(u8, u16, u16); +void sub_80E5B60(u16, u16); +u8 sub_80E5CF4(u16); +static void sub_80E5C7C(u8); +static void sub_80E5CB8(u8); +u8 sub_80E5C2C(void); +u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior); +void sub_80E5E4C(); void MovePlayerOnBike(u8 var1, u16 var2, u16 var3) { @@ -109,7 +136,7 @@ void sub_80E51C4(u8 var) else { sub_80E6024(); - if((u8)(funcVar - 5) > 3) + if (funcVar < 5 || funcVar > 8) PlayerOnBikeCollide(var); } } @@ -139,7 +166,7 @@ void sub_80E5270(u8 var) else { sub_80E6024(); - if((u8)(funcVar - 5) > 3) + if (funcVar < 5 || funcVar > 8) PlayerOnBikeCollide(var); } } @@ -149,7 +176,7 @@ void sub_80E5270(u8 var) void MovePlayerOnAcroBike(u8 var1, u16 var2, u16 var3) { - gUnknown_083DB5B0[CheckMovementInputAcroBike(&var1, var2, var3) & 0x3FF](var1); + gUnknown_083DB5B0[CheckMovementInputAcroBike(&var1, var2, var3)](var1); } u8 CheckMovementInputAcroBike(u8 *ptr, u16 var1, u16 var2) @@ -157,54 +184,570 @@ u8 CheckMovementInputAcroBike(u8 *ptr, u16 var1, u16 var2) return gUnknown_083DB5E4[gPlayerAvatar.unk8](ptr, var1, var2); } -/*u8 CheckMovementInputAcroBikeNormal(u8 *ptr, u16 var1, u16 var2) -{ - u8 playerDir = player_get_direction_upper_nybble(); - u8 result; - gPlayerAvatar.unkA = 0; - - if(*ptr == 0) - { - if(var1 & 2) - { - *ptr = playerDir; - gPlayerAvatar.running2 = *ptr; - gPlayerAvatar.unk8 = 2; - return 3; - } - else - { - *ptr = playerDir; - gPlayerAvatar.running2 = *ptr; - return 0; - } - } - else if(*ptr == playerDir) - { - if(var2 & 2 && gPlayerAvatar.unkB == 0) - { - gPlayerAvatar.unkB++; - gPlayerAvatar.unk8 = 4; - return 11; - } - else if(gPlayerAvatar.unkB == playerDir) - { - result = 2; - gPlayerAvatar.running2 = result; - return result; - } - } - if(gPlayerAvatar.running2 == 2) - { - result = 2; - gPlayerAvatar.running2 = result; - return result; - } - else - { - gPlayerAvatar.unk8 = 1; - gPlayerAvatar.unk9 = *ptr; - gPlayerAvatar.running2 = 0; - return CheckMovementInputAcroBike(ptr, var1, var2); - } -}*/ +u8 CheckMovementInputAcroBikeNormal(u8 *ptr, u16 var1, u16 var2) +{ + u8 direction = player_get_direction_upper_nybble(); + + gPlayerAvatar.unkA = 0; + if (*ptr == 0) + { + if (var1 & 2) + { + *ptr = direction; + gPlayerAvatar.running2 = 0; + gPlayerAvatar.unk8 = 2; + return 3; + } + else + { + *ptr = direction; + gPlayerAvatar.running2 = 0; + return 0; + } + } + if (*ptr == direction && (var2 & 2) && gPlayerAvatar.unkB == 0) + { + gPlayerAvatar.unkB++; + gPlayerAvatar.unk8 = 4; + return 11; + } + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.unk8 = 1; + gPlayerAvatar.unk9 = *ptr; + gPlayerAvatar.running2 = 0; + return CheckMovementInputAcroBike(ptr, var1, var2); + } + gPlayerAvatar.running2 = 2; + return 2; +} + +u8 CheckMovementInputAcroBikeChangingDirection(u8 *ptr, u16 unused1, u16 unused2) +{ + u8 direction; + + *ptr = gPlayerAvatar.unk9; + gPlayerAvatar.unkA++; + if (gPlayerAvatar.unkA > 6) + { + gPlayerAvatar.running2 = 1; + gPlayerAvatar.unk8 = 0; + sub_80E6024(); + return 1; + } + direction = player_get_direction_upper_nybble(); + if (*ptr == sub_80E5C2C()) + { + sub_80E6024(); + gPlayerAvatar.unkB = 1; + if (*ptr == GetOppositeDirection(direction)) + { + gPlayerAvatar.unk8 = 6; + return 9; + } + else + { + gPlayerAvatar.running2 = 2; + gPlayerAvatar.unk8 = 5; + return 8; + } + } + *ptr = direction; + return 0; +} + +u8 CheckMovementInputAcroBikeStandingWheelie(u8 *ptr, u16 unused1, u16 c) +{ + u8 direction; + struct MapObject *playerMapObj; + + direction = player_get_direction_upper_nybble(); + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + gPlayerAvatar.running2 = 0; + if (c & 2) + { + gPlayerAvatar.unkA++; + } + else + { + gPlayerAvatar.unkA = 0; + if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + { + *ptr = direction; + gPlayerAvatar.unk8 = 0; + sub_80E6024(); + return 4; + } + } + if (gPlayerAvatar.unkA > 0x27) + { + *ptr = direction; + gPlayerAvatar.unk8 = 3; + sub_80E6024(); + return 6; + } + if (*ptr == direction) + { + gPlayerAvatar.running2 = 2; + gPlayerAvatar.unk8 = 4; + sub_80E6024(); + return 10; + } + if (*ptr == 0) + { + *ptr = direction; + return 5; + } + gPlayerAvatar.running2 = 1; + return 5; +} + +u8 CheckMovementInputAcroBikeBunnyHop(u8 *ptr, u16 b, u16 c) +{ + u8 direction; + struct MapObject *playerMapObj; + + direction = player_get_direction_upper_nybble(); + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!(c & 2)) + { + sub_80E6024(); + if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + { + gPlayerAvatar.unk8 = 2; + return CheckMovementInputAcroBike(ptr, b, c); + } + *ptr = direction; + gPlayerAvatar.running2 = 0; + gPlayerAvatar.unk8 = 0; + return 4; + } + if (*ptr == 0) + { + *ptr = direction; + gPlayerAvatar.running2 = 0; + return 6; + } + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 1; + return 6; + } + gPlayerAvatar.running2 = 2; + return 7; +} + +u8 CheckMovementInputAcroBikeMovingWheelie(u8 *ptr, u16 b, u16 c) +{ + u8 direction; + struct MapObject *playerMapObj; + + direction = player_get_direction_lower_nybble(); + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!(c & 2)) + { + sub_80E6024(); + if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + { + gPlayerAvatar.unk8 = 0; + if (*ptr == 0) + { + *ptr = direction; + gPlayerAvatar.running2 = 0; + return 4; + } + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 0; + return 4; + } + gPlayerAvatar.running2 = 2; + return 12; + } + gPlayerAvatar.unk8 = 2; + return CheckMovementInputAcroBike(ptr, b, c); + } + if (*ptr == 0) + { + *ptr = direction; + gPlayerAvatar.unk8 = 2; + gPlayerAvatar.running2 = 0; + sub_80E6024(); + return 5; + } + if (direction != *ptr && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 0; + return 5; + } + gPlayerAvatar.running2 = 2; + return 10; +} + +u8 CheckMovementInputAcroBikeUnknownMode5(u8 *ptr, u16 b, u16 c) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_9 = 0; + FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); + gPlayerAvatar.unk8 = 0; + return CheckMovementInputAcroBike(ptr, b, c); +} + +u8 CheckMovementInputAcroBikeUnknownMode6(u8 *ptr, u16 b, u16 c) +{ + gPlayerAvatar.unk8 = 0; + return CheckMovementInputAcroBike(ptr, b, c); +} + +void sub_80E56F8(u8 direction) +{ + PlayerFaceDirection(direction); +} + +void sub_80E5708(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + PlayerFaceDirection(direction); +} + +void sub_80E5744(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_80E56F8(playerMapObj->placeholder18); + return; + } + var = sub_80E5D34(direction); + if (var > 0 && var < 12) + { + if (var == 6) + PlayerJumpLedge(direction); + else if (var < 5 || var > 8) + PlayerOnBikeCollide(direction); + } + else + { + npc_use_some_d2s(direction); + } +} + +void sub_80E57BC(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_805951C(direction); +} + +void sub_80E57F8(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_8059534(direction); +} + +void sub_80E5834(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_8059504(direction); +} + +void sub_80E5870(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_805954C(direction); +} + +void sub_80E58AC(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_80E5870(playerMapObj->placeholder18); + return; + } + var = sub_80E5D34(direction); + //TODO: Try to get rid of this goto + if (var == 0 || var == 9) + goto derp; + else if (var == 6) + sub_8059594(direction); + else if (var < 5 || var > 8) + { + if (var <= 11) + sub_80E5870(direction); + else + { + derp: + sub_8059570(direction); + } + } +} + +void sub_80E5920(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj; + + var = sub_80E5D34(direction); + if (var != 0) + { + if (var == 7) + return; + if (var < 10) + { + sub_80E5708(direction); + return; + } + if (sub_80E5EC0(var, direction) == 0) + { + sub_80E5708(direction); + return; + } + } + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + PlaySE(SE_JITE_PYOKO); + playerMapObj->mapobj_bit_9 = 1; + player_npc_set_state_and_x22_etc(sub_80608A4(direction), 2); +} + +void sub_80E5990(u8 direction) +{ + sub_80595B8(direction); +} + +void sub_80E59A0(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_8059504(playerMapObj->placeholder18); + return; + } + var = sub_80E5D34(direction); + if (var > 0 && var < 12) + { + if (var == 6) + sub_8059594(direction); + else if (var == 9) + sub_8059504(direction); + else if (var <= 4) + { + if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + sub_8059504(direction); + else + sub_80595DC(direction); //hit wall? + } + return; + } + sub_8059618(direction); + gPlayerAvatar.running2 = 2; +} + +void sub_80E5A30(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_805951C(playerMapObj->placeholder18); + return; + } + var = sub_80E5D34(direction); + if (var > 0 && var < 12) + { + if (var == 6) + sub_8059594(direction); + else if (var == 9) + sub_8059504(direction); + else if (var <= 4) + { + if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + sub_8059504(direction); + else + sub_80595DC(direction); //hit wall? + } + return; + } + sub_8059600(direction); + gPlayerAvatar.running2 = 2; +} + +void sub_80E5AC0(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_8059534(playerMapObj->placeholder18); + return; + } + var = sub_80E5D34(direction); + if (var > 0 && var < 12) + { + if (var == 6) + PlayerJumpLedge(direction); + else if (var < 5 || var > 8) + sub_8059534(direction); + return; + } + sub_8059630(direction); +} + +void sub_80E5B38(u16 a, u16 b) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + sub_80E5B60(a, b); +} + +void sub_80E5B60(u16 unused, u16 b) +{ + u8 var; + + var = sub_80E5CF4(b); + if (var == (gPlayerAvatar.unkC & 0xF)) + { + if (gPlayerAvatar.unk14[0] < 0xFF) + gPlayerAvatar.unk14[0]++; + } + else + { + sub_80E5C7C(var); + gPlayerAvatar.unkB = 0; + } + + var = b & 0xF; + if (var == (gPlayerAvatar.unk10 & 0xF)) + { + if (gPlayerAvatar.unk1C[0] < 0xFF) + gPlayerAvatar.unk1C[0]++; + } + else + { + sub_80E5CB8(var); + gPlayerAvatar.unkB = 0; + } +} + +bool8 sub_80E5BC8(u8 *a, u8 *b) +{ + u8 i; + + for (i = 0; a[i] != 0; i++) + { + if (gUnknown_0202E86C[i] > a[i]) + return FALSE; + } + for (i = 0; b[i] != 0; i++) + { + if (gUnknown_0202E874[i] > b[i]) + return FALSE; + } + return TRUE; +} + +u8 sub_80E5C2C(void) +{ + u32 i; + + for (i = 0; i < 4; i++) + { + const struct UnknownStruct1 *s = &gUnknown_083DB608[i]; + u32 r1 = gPlayerAvatar.unkC; + u32 r2 = gPlayerAvatar.unk10; + + r1 &= s->unk8; + r2 &= s->unkC; + if (r1 == s->unk0 && r2 == s->unk4 + && sub_80E5BC8(s->unk10, s->unk14) != 0) + return s->unk18; + } + return 0; +} + +static void sub_80E5C7C(u8 a) +{ + u8 i; + + gPlayerAvatar.unkC = (gPlayerAvatar.unkC << 4) | (a & 0xF); + + for (i = 7; i != 0; i--) + gPlayerAvatar.unk14[i] = gPlayerAvatar.unk14[i - 1]; + gPlayerAvatar.unk14[0] = 1; +} + +static void sub_80E5CB8(u8 a) +{ + u8 i; + + gPlayerAvatar.unk10 = (gPlayerAvatar.unk10 << 4) | (a & 0xF); + + for (i = 7; i != 0; i--) + gPlayerAvatar.unk1C[i] = gPlayerAvatar.unk1C[i - 1]; + gPlayerAvatar.unk1C[0] = 1; +} + +u8 sub_80E5CF4(u16 a) +{ + if (a & 0x40) + return 2; + if (a & 0x80) + return 1; + if (a & 0x20) + return 3; + if (a & 0x10) + return 4; + return 0; +} + +u8 sub_80E5D34(u8 direction) +{ + s16 x; + s16 y; + u8 metatitleBehavior; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + x = playerMapObj->coords2.x; + y = playerMapObj->coords2.y; + MoveCoords(direction, &x, &y); + metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); + return sub_80E5DA0(playerMapObj, x, y, direction, metatitleBehavior); +} + +//Can't get this to match +/* +u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +{ + u8 r4 = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior); + if (r4 <= 4) + { + if (r4 == 0 && IsRunningDisallowedByMetatile(metatitleBehavior)) + r4 = 2; + if (r4 != 0) + sub_80E5E4C(); + } + return r4; +} +*/ |