through CheckMovementInputNotOnBike
This commit is contained in:
+11
-11
@@ -5,8 +5,8 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80BD09C
|
||||
sub_80BD09C: @ 80BD09C
|
||||
thumb_func_start MovePlayerOnBike
|
||||
MovePlayerOnBike: @ 80BD09C
|
||||
push {r4,lr}
|
||||
sub sp, 0x4
|
||||
mov r3, sp
|
||||
@@ -32,7 +32,7 @@ sub_80BD09C: @ 80BD09C
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080BD0D0: .4byte gUnknown_83E7CFC
|
||||
thumb_func_end sub_80BD09C
|
||||
thumb_func_end MovePlayerOnBike
|
||||
|
||||
thumb_func_start sub_80BD0D4
|
||||
sub_80BD0D4: @ 80BD0D4
|
||||
@@ -342,7 +342,7 @@ _080BD300:
|
||||
cmp r1, 0x6
|
||||
bne _080BD322
|
||||
adds r0, r4, 0
|
||||
bl sub_805C23C
|
||||
bl PlayerJumpLedge
|
||||
b _080BD350
|
||||
_080BD322:
|
||||
subs r0, r1, 0x5
|
||||
@@ -362,11 +362,11 @@ _080BD334:
|
||||
beq _080BD34A
|
||||
_080BD342:
|
||||
adds r0, r4, 0
|
||||
bl sub_805C11C
|
||||
bl PlayerGoSpeed2
|
||||
b _080BD350
|
||||
_080BD34A:
|
||||
adds r0, r6, 0
|
||||
bl sub_805C14C
|
||||
bl PlayerRideWaterCurrent
|
||||
_080BD350:
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
@@ -389,7 +389,7 @@ _080BD370:
|
||||
cmp r0, 0x6
|
||||
bne _080BD37A
|
||||
movs r0, 0x1
|
||||
bl sub_805C23C
|
||||
bl PlayerJumpLedge
|
||||
_080BD37A:
|
||||
pop {r0}
|
||||
bx r0
|
||||
@@ -406,7 +406,7 @@ sub_80BD380: @ 80BD380
|
||||
cmp r0, 0
|
||||
bne _080BD398
|
||||
adds r0, r4, 0
|
||||
bl sub_805C104
|
||||
bl PlayerGoSpeed1
|
||||
_080BD398:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
@@ -537,8 +537,8 @@ _080BD482:
|
||||
bx r1
|
||||
thumb_func_end sub_80BD460
|
||||
|
||||
thumb_func_start sub_80BD488
|
||||
sub_80BD488: @ 80BD488
|
||||
thumb_func_start IsRunningDisallowed
|
||||
IsRunningDisallowed: @ 80BD488
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
@@ -564,7 +564,7 @@ _080BD4B0:
|
||||
_080BD4B2:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80BD488
|
||||
thumb_func_end IsRunningDisallowed
|
||||
|
||||
thumb_func_start sub_80BD4B8
|
||||
sub_80BD4B8: @ 80BD4B8
|
||||
|
||||
+81
-918
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -3291,7 +3291,7 @@ _080564B0:
|
||||
ldrb r0, [r6, 0x2]
|
||||
adds r1, r5, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_805B3E0
|
||||
bl player_step
|
||||
_080564BA:
|
||||
bl RunQuestLogCB
|
||||
add sp, 0x4
|
||||
|
||||
@@ -231,8 +231,8 @@ struct ObjectEventGraphicsInfo
|
||||
#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
|
||||
#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
|
||||
#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4)
|
||||
#define PLAYER_AVATAR_FLAG_5 (1 << 5)
|
||||
#define PLAYER_AVATAR_FLAG_6 (1 << 6)
|
||||
#define PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED (1 << 5)
|
||||
#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << 6)
|
||||
#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
|
||||
|
||||
enum
|
||||
|
||||
+167
-166
@@ -1,3 +1,4 @@
|
||||
#include "constants/event_object_movement.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
.section .rodata
|
||||
@@ -769,7 +770,7 @@ sMovementTypeCallbacks:: @ 839FBC8
|
||||
.4byte MovementType_FaceDirection
|
||||
.4byte MovementType_FaceDirection
|
||||
.4byte MovementType_FaceDirection
|
||||
.4byte sub_805B3B8
|
||||
.4byte MovementType_Player
|
||||
.4byte NULL
|
||||
.4byte MovementType_FaceDownAndUp
|
||||
.4byte MovementType_FaceLeftAndRight
|
||||
@@ -7888,235 +7889,235 @@ sDirectionToVectors:: @ 83A64C8
|
||||
|
||||
@ gFaceDirectionMovementActions
|
||||
gFaceDirectionMovementActions:: @ 83A64EC
|
||||
.byte 0x0 @ DIR_NONE
|
||||
.byte 0x0 @ DIR_SOUTH
|
||||
.byte 0x1 @ DIR_NORTH
|
||||
.byte 0x2 @ DIR_WEST
|
||||
.byte 0x3 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_FACE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_FACE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_FACE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_FACE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_FACE_RIGHT @ DIR_EAST
|
||||
|
||||
gWalkSlowMovementActions:: @ 83A64F1
|
||||
.byte 0x4 @ DIR_NONE
|
||||
.byte 0x4 @ DIR_SOUTH
|
||||
.byte 0x5 @ DIR_NORTH
|
||||
.byte 0x6 @ DIR_WEST
|
||||
.byte 0x7 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_FACE_DOWN_FAST @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_FACE_DOWN_FAST @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_FACE_UP_FAST @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_FACE_LEFT_FAST @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_FACE_RIGHT_FAST @ DIR_EAST
|
||||
|
||||
gUnknown_83A64F6:: @ 83A64F6
|
||||
.byte 0x9B @ DIR_NONE
|
||||
.byte 0x9B @ DIR_SOUTH
|
||||
.byte 0x9C @ DIR_NORTH
|
||||
.byte 0x9D @ DIR_WEST
|
||||
.byte 0x9E @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_0x9B @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_0x9B @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_0x9C @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_0x9D @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_0x9E @ DIR_EAST
|
||||
|
||||
gUnknown_83A64FB:: @ 83A64FB
|
||||
.byte 0x8 @ DIR_NONE
|
||||
.byte 0x8 @ DIR_SOUTH
|
||||
.byte 0x9 @ DIR_NORTH
|
||||
.byte 0xA @ DIR_WEST
|
||||
.byte 0xB @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_SLOWEST_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_SLOWEST_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_SLOWEST_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_SLOWEST_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_SLOWEST_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6500:: @ 83A6500
|
||||
.byte 0xC @ DIR_NONE
|
||||
.byte 0xC @ DIR_SOUTH
|
||||
.byte 0xD @ DIR_NORTH
|
||||
.byte 0xE @ DIR_WEST
|
||||
.byte 0xF @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_SLOW_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_SLOW_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_SLOW_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_SLOW_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_SLOW_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6505:: @ 83A6505
|
||||
.byte 0x10 @ DIR_NONE
|
||||
.byte 0x10 @ DIR_SOUTH
|
||||
.byte 0x11 @ DIR_NORTH
|
||||
.byte 0x12 @ DIR_WEST
|
||||
.byte 0x13 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_NORMAL_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_NORMAL_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_NORMAL_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_NORMAL_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_NORMAL_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A650A:: @ 83A650A
|
||||
.byte 0x1D @ DIR_NONE
|
||||
.byte 0x1D @ DIR_SOUTH
|
||||
.byte 0x1E @ DIR_NORTH
|
||||
.byte 0x1F @ DIR_WEST
|
||||
.byte 0x20 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_FAST_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_FAST_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_FAST_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_FAST_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_FAST_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A650F:: @ 83A650F
|
||||
.byte 0xA0 @ DIR_NONE
|
||||
.byte 0xA0 @ DIR_SOUTH
|
||||
.byte 0xA1 @ DIR_NORTH
|
||||
.byte 0xA2 @ DIR_WEST
|
||||
.byte 0xA3 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_0xA0 @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_0xA0 @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_0xA1 @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_0xA2 @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_0xA3 @ DIR_EAST
|
||||
|
||||
gUnknown_83A6514:: @ 83A6514
|
||||
.byte 0x31 @ DIR_NONE
|
||||
.byte 0x31 @ DIR_SOUTH
|
||||
.byte 0x32 @ DIR_NORTH
|
||||
.byte 0x33 @ DIR_WEST
|
||||
.byte 0x34 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_FACE_DOWN_SLOW @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_FACE_DOWN_SLOW @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_FACE_UP_SLOW @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_FACE_LEFT_SLOW @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_FACE_RIGHT_SLOW @ DIR_EAST
|
||||
|
||||
gUnknown_83A6519:: @ 83A6519
|
||||
.byte 0x35 @ DIR_NONE
|
||||
.byte 0x35 @ DIR_SOUTH
|
||||
.byte 0x36 @ DIR_NORTH
|
||||
.byte 0x37 @ DIR_WEST
|
||||
.byte 0x38 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_FASTEST_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_FASTEST_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_FASTEST_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_FASTEST_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_FASTEST_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A651E:: @ 83A651E
|
||||
.byte 0x39 @ DIR_NONE
|
||||
.byte 0x39 @ DIR_SOUTH
|
||||
.byte 0x3A @ DIR_NORTH
|
||||
.byte 0x3B @ DIR_WEST
|
||||
.byte 0x3C @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_SLIDE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_SLIDE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_SLIDE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_SLIDE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_SLIDE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6523:: @ 83A6523
|
||||
.byte 0x3D @ DIR_NONE
|
||||
.byte 0x3D @ DIR_SOUTH
|
||||
.byte 0x3E @ DIR_NORTH
|
||||
.byte 0x3F @ DIR_WEST
|
||||
.byte 0x40 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6528:: @ 83A6528
|
||||
.byte 0x41 @ DIR_NONE
|
||||
.byte 0x41 @ DIR_SOUTH
|
||||
.byte 0x42 @ DIR_NORTH
|
||||
.byte 0x43 @ DIR_WEST
|
||||
.byte 0x44 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_DOWN_SLOW @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_DOWN_SLOW @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_UP_SLOW @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_LEFT_SLOW @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_PLAYER_RUN_RIGHT_SLOW @ DIR_EAST
|
||||
|
||||
gUnknown_83A652D:: @ 83A652D
|
||||
.byte 0x94 @ DIR_NONE
|
||||
.byte 0x94 @ DIR_SOUTH
|
||||
.byte 0x95 @ DIR_NORTH
|
||||
.byte 0x96 @ DIR_WEST
|
||||
.byte 0x97 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6532:: @ 83A6532
|
||||
.byte 0x14 @ DIR_NONE
|
||||
.byte 0x14 @ DIR_SOUTH
|
||||
.byte 0x15 @ DIR_NORTH
|
||||
.byte 0x16 @ DIR_WEST
|
||||
.byte 0x17 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_JUMP_2_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_JUMP_2_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_JUMP_2_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_JUMP_2_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_JUMP_2_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6537:: @ 83A6537
|
||||
.byte 0x52 @ DIR_NONE
|
||||
.byte 0x52 @ DIR_SOUTH
|
||||
.byte 0x53 @ DIR_NORTH
|
||||
.byte 0x54 @ DIR_WEST
|
||||
.byte 0x55 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A653C:: @ 83A653C
|
||||
.byte 0x57 @ DIR_NONE
|
||||
.byte 0x57 @ DIR_SOUTH
|
||||
.byte 0x56 @ DIR_NORTH
|
||||
.byte 0x59 @ DIR_WEST
|
||||
.byte 0x58 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6541:: @ 83A6541
|
||||
.byte 0x4E @ DIR_NONE
|
||||
.byte 0x4E @ DIR_SOUTH
|
||||
.byte 0x4F @ DIR_NORTH
|
||||
.byte 0x50 @ DIR_WEST
|
||||
.byte 0x51 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_JUMP_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_JUMP_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_JUMP_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_JUMP_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_JUMP_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6546:: @ 83A6546
|
||||
.byte 0x46 @ DIR_NONE
|
||||
.byte 0x46 @ DIR_SOUTH
|
||||
.byte 0x47 @ DIR_NORTH
|
||||
.byte 0x48 @ DIR_WEST
|
||||
.byte 0x49 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_JUMP_SPECIAL_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_JUMP_SPECIAL_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_JUMP_SPECIAL_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_JUMP_SPECIAL_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A654B:: @ 83A654B
|
||||
.byte 0xA6 @ DIR_NONE
|
||||
.byte 0xA6 @ DIR_SOUTH
|
||||
.byte 0xA7 @ DIR_NORTH
|
||||
.byte 0xA8 @ DIR_WEST
|
||||
.byte 0xA9 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_0xA6 @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_0xA6 @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_0xA7 @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_0xA8 @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_0xA9 @ DIR_EAST
|
||||
|
||||
gUnknown_83A6550:: @ 83A6550
|
||||
.byte 0x21 @ DIR_NONE
|
||||
.byte 0x21 @ DIR_SOUTH
|
||||
.byte 0x22 @ DIR_NORTH
|
||||
.byte 0x23 @ DIR_WEST
|
||||
.byte 0x24 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6555:: @ 83A6555
|
||||
.byte 0x25 @ DIR_NONE
|
||||
.byte 0x25 @ DIR_SOUTH
|
||||
.byte 0x26 @ DIR_NORTH
|
||||
.byte 0x27 @ DIR_WEST
|
||||
.byte 0x28 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A655A:: @ 83A655A
|
||||
.byte 0x29 @ DIR_NONE
|
||||
.byte 0x29 @ DIR_SOUTH
|
||||
.byte 0x2A @ DIR_NORTH
|
||||
.byte 0x2B @ DIR_WEST
|
||||
.byte 0x2C @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A655F:: @ 83A655F
|
||||
.byte 0x2D @ DIR_NONE
|
||||
.byte 0x2D @ DIR_SOUTH
|
||||
.byte 0x2E @ DIR_NORTH
|
||||
.byte 0x2F @ DIR_WEST
|
||||
.byte 0x30 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6564:: @ 83A6564
|
||||
.byte 0x70 @ DIR_NONE
|
||||
.byte 0x70 @ DIR_SOUTH
|
||||
.byte 0x71 @ DIR_NORTH
|
||||
.byte 0x72 @ DIR_WEST
|
||||
.byte 0x73 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6569:: @ 83A6569
|
||||
.byte 0x74 @ DIR_NONE
|
||||
.byte 0x74 @ DIR_SOUTH
|
||||
.byte 0x75 @ DIR_NORTH
|
||||
.byte 0x76 @ DIR_WEST
|
||||
.byte 0x77 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A656E:: @ 83A656E
|
||||
.byte 0x78 @ DIR_NONE
|
||||
.byte 0x78 @ DIR_SOUTH
|
||||
.byte 0x79 @ DIR_NORTH
|
||||
.byte 0x7A @ DIR_WEST
|
||||
.byte 0x7B @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6573:: @ 83A6573
|
||||
.byte 0x7C @ DIR_NONE
|
||||
.byte 0x7C @ DIR_SOUTH
|
||||
.byte 0x7D @ DIR_NORTH
|
||||
.byte 0x7E @ DIR_WEST
|
||||
.byte 0x7F @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6578:: @ 83A6578
|
||||
.byte 0x80 @ DIR_NONE
|
||||
.byte 0x80 @ DIR_SOUTH
|
||||
.byte 0x81 @ DIR_NORTH
|
||||
.byte 0x82 @ DIR_WEST
|
||||
.byte 0x83 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A657D:: @ 83A657D
|
||||
.byte 0x84 @ DIR_NONE
|
||||
.byte 0x84 @ DIR_SOUTH
|
||||
.byte 0x85 @ DIR_NORTH
|
||||
.byte 0x86 @ DIR_WEST
|
||||
.byte 0x87 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6582:: @ 83A6582
|
||||
.byte 0x88 @ DIR_NONE
|
||||
.byte 0x88 @ DIR_SOUTH
|
||||
.byte 0x89 @ DIR_NORTH
|
||||
.byte 0x8A @ DIR_WEST
|
||||
.byte 0x8B @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A6587:: @ 83A6587
|
||||
.byte 0x8C @ DIR_NONE
|
||||
.byte 0x8C @ DIR_SOUTH
|
||||
.byte 0x8D @ DIR_NORTH
|
||||
.byte 0x8E @ DIR_WEST
|
||||
.byte 0x8F @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT @ DIR_EAST
|
||||
|
||||
gUnknown_83A658C:: @ 83A658C
|
||||
.byte 0x90 @ DIR_NONE
|
||||
.byte 0x90 @ DIR_SOUTH
|
||||
.byte 0x91 @ DIR_NORTH
|
||||
.byte 0x92 @ DIR_WEST
|
||||
.byte 0x93 @ DIR_EAST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN @ DIR_NONE
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN @ DIR_SOUTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP @ DIR_NORTH
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT @ DIR_WEST
|
||||
.byte MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT @ DIR_EAST
|
||||
|
||||
@ gOppositeDirections ?
|
||||
gOppositeDirections:: @ 83A6591
|
||||
|
||||
@@ -3,35 +3,6 @@
|
||||
.include "constants/constants.inc"
|
||||
.section .rodata
|
||||
.align 2
|
||||
gUnknown_835B764:: @ 835B764
|
||||
.4byte MetatileBehavior_IsUnknownMovement48, ForcedMovement_Slip
|
||||
.4byte MetatileBehavior_IsIce_2, ForcedMovement_Slip
|
||||
.4byte MetatileBehavior_IsWalkSouth, sub_805B750
|
||||
.4byte MetatileBehavior_IsWalkNorth, sub_805B768
|
||||
.4byte MetatileBehavior_IsWalkWest, sub_805B780
|
||||
.4byte MetatileBehavior_IsWalkEast, sub_805B798
|
||||
.4byte MetatileBehavior_IsSouthwardCurrent, sub_805B82C
|
||||
.4byte MetatileBehavior_IsNorthwardCurrent, sub_805B844
|
||||
.4byte MetatileBehavior_IsWestwardCurrent, sub_805B85C
|
||||
.4byte MetatileBehavior_IsEastwardCurrent, sub_805B874
|
||||
.4byte MetatileBehavior_UnusedIsSpinRight, sub_805B7B0
|
||||
.4byte MetatileBehavior_UnusedIsSpinLeft, sub_805B7CC
|
||||
.4byte MetatileBehavior_UnusedIsSpinUp, sub_805B7E8
|
||||
.4byte MetatileBehavior_UnusedIsSpinDown, sub_805B804
|
||||
.4byte MetatileBehavior_IsSlideSouth, ForcedMovement_SlideSouth
|
||||
.4byte MetatileBehavior_IsSlideNorth, ForcedMovement_SlideNorth
|
||||
.4byte MetatileBehavior_IsSlideWest, ForcedMovement_SlideWest
|
||||
.4byte MetatileBehavior_IsSlideEast, ForcedMovement_SlideEast
|
||||
.4byte MetatileBehavior_IsWaterfall, sub_805B82C
|
||||
.4byte MetatileBehavior_UnusedReturnFalse_7, sub_805B924
|
||||
.4byte MetatileBehavior_UnusedReturnFalse_8, sub_805B930
|
||||
.4byte NULL, ForcedMovement_None
|
||||
|
||||
gUnknown_835B814:: @ 835B814
|
||||
.4byte PlayerNotOnBikeNotMoving
|
||||
.4byte sub_805B9C4
|
||||
.4byte sub_805B9D4
|
||||
|
||||
gUnknown_835B820:: @ 835B820
|
||||
.byte 0x04, 0x04, 0x05, 0x06, 0x07
|
||||
|
||||
|
||||
@@ -6,4 +6,7 @@ bool8 sub_80BD540(void);
|
||||
void StartTransitionToFlipBikeState(u8 flags);
|
||||
s16 GetPlayerSpeed(void);
|
||||
|
||||
void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys);
|
||||
void MovePlayerNotOnBike(u8 direction, u16 heldKeys);
|
||||
|
||||
#endif //GUARD_BIKE_H
|
||||
|
||||
@@ -26,6 +26,8 @@ struct UnkStruct_083A3698
|
||||
u8 animPos[4];
|
||||
};
|
||||
|
||||
typedef void (*MovementAction)(u8 direction);
|
||||
|
||||
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
|
||||
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1)
|
||||
#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN (1 << 2)
|
||||
@@ -186,6 +188,7 @@ void sub_8068CA4(struct Sprite *, u8);
|
||||
bool8 sub_8068CB4(struct Sprite *sprite);
|
||||
void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
|
||||
bool8 SpriteAnimEnded(struct Sprite *);
|
||||
u8 ObjectEventGetHeldMovementActionId(struct ObjectEvent *objectEvent);
|
||||
|
||||
// Exported data declarations
|
||||
|
||||
|
||||
@@ -283,8 +283,8 @@ struct ObjectEventGraphicsInfo
|
||||
#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
|
||||
#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
|
||||
#define PLAYER_AVATAR_FLAG_4 (1 << 4)
|
||||
#define PLAYER_AVATAR_FLAG_5 (1 << 5)
|
||||
#define PLAYER_AVATAR_FLAG_6 (1 << 6)
|
||||
#define PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED (1 << 5)
|
||||
#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << 6)
|
||||
#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
|
||||
|
||||
enum
|
||||
@@ -349,7 +349,7 @@ struct PlayerAvatar /* 0x202E858 */
|
||||
u32 unkC;
|
||||
u32 unk10;
|
||||
u8 unk14[8];
|
||||
u8 unk1C[8];
|
||||
u16 unk1C;
|
||||
// TODO: rest of struct
|
||||
};
|
||||
|
||||
|
||||
@@ -115,10 +115,10 @@ bool8 MetatileBehavior_UnusedReturnFalse_11(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_12(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior);
|
||||
bool8 TestMetatileAttributeBit(u8 attr, u8 bitmask);
|
||||
bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedIsSpinDown(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSpinRight(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSpinLeft(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSpinUp(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSpinDown(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsStopSpinning(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSpinTile(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSignpost(u8 metatileBehavior);
|
||||
|
||||
@@ -92,6 +92,7 @@ SECTIONS {
|
||||
src/metatile_behavior.o(.text);
|
||||
src/field_camera.o(.text);
|
||||
src/field_door.o(.text);
|
||||
src/field_player_avatar.o(.text);
|
||||
asm/field_player_avatar.o(.text);
|
||||
src/event_object_movement.o(.text);
|
||||
src/field_message_box.o(.text);
|
||||
@@ -433,6 +434,7 @@ SECTIONS {
|
||||
src/fieldmap.o(.rodata);
|
||||
src/metatile_behavior.o(.rodata);
|
||||
src/field_door.o(.rodata);
|
||||
src/field_player_avatar.o(.rodata);
|
||||
data/field_player_avatar.o(.rodata);
|
||||
data/event_object_movement.o(.rodata);
|
||||
src/event_object_movement.o(.rodata);
|
||||
|
||||
@@ -4623,8 +4623,8 @@ dirn_to_anim(sub_8063FDC, gUnknown_83A650F);
|
||||
dirn_to_anim(sub_8064008, gUnknown_83A6514);
|
||||
dirn_to_anim(GetWalkFastestMovementAction, gUnknown_83A6519);
|
||||
dirn_to_anim(GetSlideMovementAction, gUnknown_83A651E);
|
||||
dirn_to_anim(sub_806408C, gUnknown_83A6523);
|
||||
dirn_to_anim(sub_80640B8, gUnknown_83A6528);
|
||||
dirn_to_anim(GetPlayerRunMovementAction, gUnknown_83A6523);
|
||||
dirn_to_anim(GetPlayerRunSlowMovementAction, gUnknown_83A6528);
|
||||
dirn_to_anim(sub_80640E4, gUnknown_83A652D);
|
||||
dirn_to_anim(GetJump2MovementAction, gUnknown_83A6532);
|
||||
dirn_to_anim(GetJumpInPlaceMovementAction, gUnknown_83A6537);
|
||||
|
||||
@@ -105,11 +105,11 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
|
||||
{
|
||||
if (GetPlayerSpeed() != 4)
|
||||
{
|
||||
if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & 0x40))
|
||||
if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED))
|
||||
input->pressedStartButton = TRUE;
|
||||
if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3)
|
||||
{
|
||||
if (!(gPlayerAvatar.flags & 0x40))
|
||||
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED))
|
||||
{
|
||||
if (newKeys & SELECT_BUTTON)
|
||||
input->pressedSelectButton = TRUE;
|
||||
@@ -625,7 +625,7 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB
|
||||
return TRUE;
|
||||
if (TryStartStepCountScript(metatileBehavior) == TRUE)
|
||||
return TRUE;
|
||||
if (!(gPlayerAvatar.flags & 0x40) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior) && UpdateRepelCounter() == TRUE)
|
||||
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior) && UpdateRepelCounter() == TRUE)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
@@ -655,7 +655,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
|
||||
|
||||
UpdateHappinessStepCounter();
|
||||
|
||||
if (!(gPlayerAvatar.flags & 0x40) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
|
||||
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
|
||||
{
|
||||
if (sub_810C4EC() == TRUE)
|
||||
{
|
||||
@@ -839,7 +839,7 @@ static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8
|
||||
else if (sub_806DB84(metatileBehavior, direction) == TRUE)
|
||||
{
|
||||
delay = 0;
|
||||
if (gPlayerAvatar.flags & 6)
|
||||
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||
{
|
||||
SetPlayerAvatarTransitionFlags(1);
|
||||
delay = 12;
|
||||
|
||||
@@ -0,0 +1,405 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "bike.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "constants/event_object_movement.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL;
|
||||
EWRAM_DATA bool8 gUnknown_2036E34 = FALSE;
|
||||
EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {};
|
||||
EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {};
|
||||
|
||||
u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite);
|
||||
bool8 sub_805B528(void);
|
||||
bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent * playerObjEvent, u8 direction);
|
||||
void npc_clear_strange_bits(struct ObjectEvent * playerObjEvent);
|
||||
void DoPlayerAvatarTransition(void);
|
||||
bool8 TryDoMetatileBehaviorForcedMovement(void);
|
||||
void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys);
|
||||
void PlayerAllowForcedMovementIfMovingSameDirection(void);
|
||||
bool8 ForcedMovement_None(void);
|
||||
void PlayerJumpLedge(u8 direction);
|
||||
u8 CheckForPlayerAvatarCollision(u8 direction);
|
||||
bool8 ForcedMovement_Slip(void);
|
||||
bool8 ForcedMovement_WalkSouth(void);
|
||||
bool8 ForcedMovement_WalkNorth(void);
|
||||
bool8 ForcedMovement_WalkWest(void);
|
||||
bool8 ForcedMovement_WalkEast(void);
|
||||
bool8 ForcedMovement_SpinRight(void);
|
||||
bool8 ForcedMovement_SpinLeft(void);
|
||||
bool8 ForcedMovement_SpinUp(void);
|
||||
bool8 ForcedMovement_SpinDown(void);
|
||||
void PlaySpinSound(void);
|
||||
bool8 ForcedMovement_PushedSouthByCurrent(void);
|
||||
bool8 ForcedMovement_PushedNorthByCurrent(void);
|
||||
bool8 ForcedMovement_PushedWestByCurrent(void);
|
||||
bool8 ForcedMovement_PushedEastByCurrent(void);
|
||||
bool8 ForcedMovement_SlideSouth(void);
|
||||
bool8 ForcedMovement_SlideNorth(void);
|
||||
bool8 ForcedMovement_SlideWest(void);
|
||||
bool8 ForcedMovement_SlideEast(void);
|
||||
bool8 ForcedMovement_0xBB(void);
|
||||
bool8 ForcedMovement_0xBC(void);
|
||||
u8 CheckMovementInputNotOnBike(u8 direction);
|
||||
void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys);
|
||||
void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys);
|
||||
void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys);
|
||||
void PlayerGoSpeed2(u8 direction);
|
||||
void PlayerGoSpeed1(u8 direction);
|
||||
void PlayerGoSpin(u8 direction);
|
||||
void PlayerRideWaterCurrent(u8 direction);
|
||||
void sub_805C2CC(u8 metatileBehavior);
|
||||
void sub_805CC40(struct ObjectEvent * playerObjEvent);
|
||||
void DoPlayerMatJump(void);
|
||||
void DoPlayerMatSpin(void);
|
||||
|
||||
void MovementType_Player(struct Sprite *sprite)
|
||||
{
|
||||
UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, ObjectEventCB2_NoMovement2);
|
||||
}
|
||||
|
||||
u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void player_step(u8 direction, u16 newKeys, u16 heldKeys)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
sub_805CC40(playerObjEvent);
|
||||
if (!gPlayerAvatar.preventStep && !sub_805B528())
|
||||
{
|
||||
if (!TryInterruptObjectEventSpecialAnim(playerObjEvent, direction))
|
||||
{
|
||||
npc_clear_strange_bits(playerObjEvent);
|
||||
DoPlayerAvatarTransition();
|
||||
if (!TryDoMetatileBehaviorForcedMovement())
|
||||
{
|
||||
MovePlayerAvatarUsingKeypadInput(direction, newKeys, heldKeys);
|
||||
PlayerAllowForcedMovementIfMovingSameDirection();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 direction)
|
||||
{
|
||||
|
||||
if (ObjectEventIsMovementOverridden(playerObjEvent)
|
||||
&& !ObjectEventClearHeldMovementIfFinished(playerObjEvent))
|
||||
{
|
||||
u8 heldMovementActionId = ObjectEventGetHeldMovementActionId(playerObjEvent);
|
||||
if (heldMovementActionId > MOVEMENT_ACTION_WALK_FAST_RIGHT && heldMovementActionId < MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN)
|
||||
{
|
||||
if (direction != DIR_NONE && playerObjEvent->movementDirection != direction)
|
||||
{
|
||||
ObjectEventClearHeldMovement(playerObjEvent);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void npc_clear_strange_bits(struct ObjectEvent *objEvent)
|
||||
{
|
||||
objEvent->inanimate = 0;
|
||||
objEvent->disableAnim = 0;
|
||||
objEvent->facingDirectionLocked = 0;
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH;
|
||||
}
|
||||
|
||||
void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys)
|
||||
{
|
||||
if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
|
||||
|| (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||
MovePlayerOnBike(direction, newKeys, heldKeys);
|
||||
else
|
||||
MovePlayerNotOnBike(direction, heldKeys);
|
||||
}
|
||||
|
||||
void PlayerAllowForcedMovementIfMovingSameDirection(void)
|
||||
{
|
||||
if (gPlayerAvatar.runningState == MOVING)
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED;
|
||||
}
|
||||
|
||||
bool8 sub_805B528(void)
|
||||
{
|
||||
if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED) && MetatileBehavior_IsSpinTile(gPlayerAvatar.unk1C))
|
||||
{
|
||||
gUnknown_2036E30 = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if (gUnknown_2036E30->heldMovementFinished)
|
||||
{
|
||||
if (MetatileBehavior_IsStopSpinning(gUnknown_2036E30->currentMetatileBehavior))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (MetatileBehavior_IsSpinTile(gUnknown_2036E30->currentMetatileBehavior))
|
||||
{
|
||||
gPlayerAvatar.unk1C = gUnknown_2036E30->currentMetatileBehavior;
|
||||
}
|
||||
ObjectEventClearHeldMovement(gUnknown_2036E30);
|
||||
sub_805C2CC(gPlayerAvatar.unk1C);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const struct {
|
||||
bool8 (*unk0)(u8 metatileBehavior);
|
||||
bool8 (*unk4)(void);
|
||||
} sForcedMovementFuncs[] = {
|
||||
{MetatileBehavior_IsUnknownMovement48, ForcedMovement_Slip},
|
||||
{MetatileBehavior_IsIce_2, ForcedMovement_Slip},
|
||||
{MetatileBehavior_IsWalkSouth, ForcedMovement_WalkSouth},
|
||||
{MetatileBehavior_IsWalkNorth, ForcedMovement_WalkNorth},
|
||||
{MetatileBehavior_IsWalkWest, ForcedMovement_WalkWest},
|
||||
{MetatileBehavior_IsWalkEast, ForcedMovement_WalkEast},
|
||||
{MetatileBehavior_IsSouthwardCurrent, ForcedMovement_PushedSouthByCurrent},
|
||||
{MetatileBehavior_IsNorthwardCurrent, ForcedMovement_PushedNorthByCurrent},
|
||||
{MetatileBehavior_IsWestwardCurrent, ForcedMovement_PushedWestByCurrent},
|
||||
{MetatileBehavior_IsEastwardCurrent, ForcedMovement_PushedEastByCurrent},
|
||||
{MetatileBehavior_IsSpinRight, ForcedMovement_SpinRight},
|
||||
{MetatileBehavior_IsSpinLeft, ForcedMovement_SpinLeft},
|
||||
{MetatileBehavior_IsSpinUp, ForcedMovement_SpinUp},
|
||||
{MetatileBehavior_IsSpinDown, ForcedMovement_SpinDown},
|
||||
{MetatileBehavior_IsSlideSouth, ForcedMovement_SlideSouth},
|
||||
{MetatileBehavior_IsSlideNorth, ForcedMovement_SlideNorth},
|
||||
{MetatileBehavior_IsSlideWest, ForcedMovement_SlideWest},
|
||||
{MetatileBehavior_IsSlideEast, ForcedMovement_SlideEast},
|
||||
{MetatileBehavior_IsWaterfall, ForcedMovement_PushedSouthByCurrent},
|
||||
{MetatileBehavior_UnusedReturnFalse_7, ForcedMovement_0xBB},
|
||||
{MetatileBehavior_UnusedReturnFalse_8, ForcedMovement_0xBC},
|
||||
{NULL, ForcedMovement_None},
|
||||
};
|
||||
|
||||
bool8 TryDoMetatileBehaviorForcedMovement(void)
|
||||
{
|
||||
int i;
|
||||
u8 behavior;
|
||||
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED))
|
||||
{
|
||||
behavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior;
|
||||
for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
|
||||
{
|
||||
if (sForcedMovementFuncs[i].unk0(behavior))
|
||||
{
|
||||
gPlayerAvatar.unk1C = behavior;
|
||||
return sForcedMovementFuncs[i].unk4();
|
||||
}
|
||||
}
|
||||
return sForcedMovementFuncs[i].unk4();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
|
||||
;
|
||||
return sForcedMovementFuncs[i].unk4();
|
||||
}
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_None(void)
|
||||
{
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MVMT_IS_FORCED)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
playerObjEvent->facingDirectionLocked = FALSE;
|
||||
playerObjEvent->enableAnim = TRUE;
|
||||
SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_MVMT_IS_FORCED;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u8 DoForcedMovement(u8 direction, MovementAction movementAction)
|
||||
{
|
||||
struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
|
||||
u8 collision = CheckForPlayerAvatarCollision(direction);
|
||||
|
||||
playerAvatar->flags |= PLAYER_AVATAR_FLAG_MVMT_IS_FORCED;
|
||||
if (collision)
|
||||
{
|
||||
ForcedMovement_None();
|
||||
if (collision < COLLISION_STOP_SURFING)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (collision == COLLISION_LEDGE_JUMP)
|
||||
PlayerJumpLedge(direction);
|
||||
playerAvatar->flags |= PLAYER_AVATAR_FLAG_MVMT_IS_FORCED;
|
||||
playerAvatar->runningState = MOVING;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
playerAvatar->runningState = MOVING;
|
||||
movementAction(direction);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
u8 DoForcedMovementInCurrentDirection(MovementAction movementAction)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
playerObjEvent->disableAnim = TRUE;
|
||||
return DoForcedMovement(playerObjEvent->movementDirection, movementAction);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_Slip(void)
|
||||
{
|
||||
return DoForcedMovementInCurrentDirection(PlayerGoSpeed2);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_WalkSouth(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed1);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_WalkNorth(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_NORTH, PlayerGoSpeed1);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_WalkWest(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_WEST, PlayerGoSpeed1);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_WalkEast(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_EAST, PlayerGoSpeed1);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SpinRight(void)
|
||||
{
|
||||
PlaySpinSound();
|
||||
return DoForcedMovement(DIR_EAST, PlayerGoSpin);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SpinLeft(void)
|
||||
{
|
||||
PlaySpinSound();
|
||||
return DoForcedMovement(DIR_WEST, PlayerGoSpin);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SpinUp(void)
|
||||
{
|
||||
PlaySpinSound();
|
||||
return DoForcedMovement(DIR_NORTH, PlayerGoSpin);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SpinDown(void)
|
||||
{
|
||||
PlaySpinSound();
|
||||
return DoForcedMovement(DIR_SOUTH, PlayerGoSpin);
|
||||
}
|
||||
|
||||
void PlaySpinSound(void)
|
||||
{
|
||||
PlaySE(SE_W013B);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_PushedSouthByCurrent(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_SOUTH, PlayerRideWaterCurrent);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_PushedNorthByCurrent(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_NORTH, PlayerRideWaterCurrent);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_PushedWestByCurrent(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_WEST, PlayerRideWaterCurrent);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_PushedEastByCurrent(void)
|
||||
{
|
||||
return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent);
|
||||
}
|
||||
|
||||
u8 ForcedMovement_Slide(u8 direction, MovementAction movementAction)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
playerObjEvent->disableAnim = TRUE;
|
||||
playerObjEvent->facingDirectionLocked = TRUE;
|
||||
return DoForcedMovement(direction, movementAction);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SlideSouth(void)
|
||||
{
|
||||
return ForcedMovement_Slide(DIR_SOUTH, PlayerGoSpeed2);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SlideNorth(void)
|
||||
{
|
||||
return ForcedMovement_Slide(DIR_NORTH, PlayerGoSpeed2);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SlideWest(void)
|
||||
{
|
||||
return ForcedMovement_Slide(DIR_WEST, PlayerGoSpeed2);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_SlideEast(void)
|
||||
{
|
||||
return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2);
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_0xBB(void)
|
||||
{
|
||||
DoPlayerMatJump();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 ForcedMovement_0xBC(void)
|
||||
{
|
||||
DoPlayerMatSpin();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void (*const gUnknown_835B814[])(u8, u16) = {
|
||||
PlayerNotOnBikeNotMoving,
|
||||
PlayerNotOnBikeTurningInPlace,
|
||||
PlayerNotOnBikeMoving
|
||||
};
|
||||
|
||||
void MovePlayerNotOnBike(u8 direction, u16 heldKeys)
|
||||
{
|
||||
gUnknown_835B814[CheckMovementInputNotOnBike(direction)](direction, heldKeys);
|
||||
}
|
||||
|
||||
u8 CheckMovementInputNotOnBike(u8 direction)
|
||||
{
|
||||
if (direction == DIR_NONE)
|
||||
{
|
||||
gPlayerAvatar.runningState = NOT_MOVING;
|
||||
return 0;
|
||||
}
|
||||
else if (direction != GetPlayerMovementDirection() && gPlayerAvatar.runningState != MOVING)
|
||||
{
|
||||
gPlayerAvatar.runningState = TURN_DIRECTION;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gPlayerAvatar.runningState = MOVING;
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
@@ -750,7 +750,7 @@ bool8 TestMetatileAttributeBit(u8 arg1, u8 arg2)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsSpinRight(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_SPIN_RIGHT)
|
||||
return TRUE;
|
||||
@@ -758,7 +758,7 @@ bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsSpinLeft(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_SPIN_LEFT)
|
||||
return TRUE;
|
||||
@@ -766,7 +766,7 @@ bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsSpinUp(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_SPIN_UP)
|
||||
return TRUE;
|
||||
@@ -774,7 +774,7 @@ bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_UnusedIsSpinDown(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsSpinDown(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_SPIN_DOWN)
|
||||
return TRUE;
|
||||
|
||||
+1
-14
@@ -78,21 +78,8 @@ gLinkPlayerObjectEvents: @ 2031DEC
|
||||
.include "src/fieldmap.o"
|
||||
.align 2
|
||||
.include "src/field_camera.o"
|
||||
|
||||
.align 2
|
||||
@ .include "src/field_player_avatar.o"
|
||||
gUnknown_2036E30: @ 2036E30
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2036E34: @ 2036E34
|
||||
.space 0x4
|
||||
|
||||
gObjectEvents: @ 2036E38
|
||||
.space 0x240
|
||||
|
||||
gPlayerAvatar: @ 2037078
|
||||
.space 0x20
|
||||
|
||||
.include "src/field_player_avatar.o"
|
||||
.align 2
|
||||
.include "src/event_object_movement.o"
|
||||
.align 2
|
||||
|
||||
Reference in New Issue
Block a user