Document bike.c and fix weird goto

This commit is contained in:
PikalaxALT
2021-03-30 15:45:42 -04:00
parent 35b68c68ee
commit 8e82c291fd
9 changed files with 135 additions and 131 deletions
+19 -5
View File
@@ -13,6 +13,20 @@ enum
SPEED_FASTEST, SPEED_FASTEST,
}; };
enum {
BIKE_TRANS_FACE_DIRECTION,
BIKE_TRANS_TURNING,
BIKE_TRANS_MOVE,
BIKE_TRANS_DOWNHILL,
BIKE_TRANS_UPHILL
};
enum {
BIKE_STATE_NORMAL,
BIKE_STATE_TURNING,
BIKE_STATE_SLOPE
};
// Acro bike states // Acro bike states
enum enum
{ {
@@ -25,15 +39,15 @@ enum
ACRO_STATE_TURN_JUMP, ACRO_STATE_TURN_JUMP,
}; };
void InitPlayerAvatarBikeState(u32 directionHistory, u32 abStartSelectHistory); void BikeClearState(u32 directionHistory, u32 abStartSelectHistory);
bool8 MetatileAtPlayerPositionForbidsBiking(void); bool8 IsBikingDisallowedByPlayer(void);
void StartTransitionToFlipBikeState(u8 flags); void GoOnOffBike(u8 flags);
s16 GetPlayerSpeed(void); s16 GetPlayerSpeed(void);
bool8 sub_80BD460(u8); bool8 RS_IsRunningDisallowed(u8 r0);
void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys); void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys);
bool32 IsRunningDisallowed(u8 metatileBehavior); bool32 IsRunningDisallowed(u8 metatileBehavior);
void Bike_HandleBumpySlopeJump(void); void Bike_HandleBumpySlopeJump(void);
void Bike_UpdateBikeCounterSpeed(u8 counter); void Bike_UpdateBikeCounterSpeed(u8 counter);
bool8 player_should_look_direction_be_enforced_upon_movement(void); bool8 IsPlayerNotUsingAcroBikeOnBumpySlope(void);
#endif //GUARD_BIKE_H #endif //GUARD_BIKE_H
+1 -1
View File
@@ -6,7 +6,7 @@
#define MB_01 0x01 #define MB_01 0x01
#define MB_TALL_GRASS 0x02 #define MB_TALL_GRASS 0x02
#define MB_CAVE 0x08 #define MB_CAVE 0x08
#define MB_0A 0x0A #define MB_RUNNING_DISALLOWED 0x0A
#define MB_0B 0x0B #define MB_0B 0x0B
#define MB_0C 0x0C #define MB_0C 0x0C
#define MB_POND_WATER 0x10 #define MB_POND_WATER 0x10
+1 -1
View File
@@ -61,7 +61,7 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys);
bool32 PlayerIsMovingOnRockStairs(u8 direction); bool32 PlayerIsMovingOnRockStairs(u8 direction);
void UpdatePlayerAvatarTransitionState(void); void UpdatePlayerAvatarTransitionState(void);
void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender); void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender);
void nullsub_24(u8 direction); void PlayerUseAcroBikeOnBumpySlope(u8 direction);
u8 GetRSAvatarGraphicsIdByGender(u8 gender); u8 GetRSAvatarGraphicsIdByGender(u8 gender);
#endif //GUARD_FIELD_PLAYER_AVATAR_H #endif //GUARD_FIELD_PLAYER_AVATAR_H
+2 -2
View File
@@ -77,7 +77,7 @@ bool8 MetatileBehavior_IsSouthBlocked(u8 metatileBehavior);
bool8 MetatileBehavior_IsShortGrass(u8 metatileBehavior); bool8 MetatileBehavior_IsShortGrass(u8 metatileBehavior);
bool8 MetatileBehavior_IsHotSprings(u8 metatileBehavior); bool8 MetatileBehavior_IsHotSprings(u8 metatileBehavior);
bool8 MetatileBehavior_IsWaterfall(u8 metatileBehavior); bool8 MetatileBehavior_IsWaterfall(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_9(u8 metatileBehavior); bool8 MetatileBehavior_IsFortreeBridge(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior);
@@ -104,7 +104,7 @@ bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8 metatileBehavior);
bool8 MetatileBehavior_IsVerticalRail(u8 metatileBehavior); bool8 MetatileBehavior_IsVerticalRail(u8 metatileBehavior);
bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior); bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior);
bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior); bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior);
bool8 MetatileBehavior_IsMB0A(u8 metatileBehavior); bool8 MetatileBehavior_IsRunningDisallowed(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_9(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_9(u8 metatileBehavior);
bool8 MetatileBehavior_IsBookshelf(u8 metatileBehavior); bool8 MetatileBehavior_IsBookshelf(u8 metatileBehavior);
bool8 MetatileBehavior_IsPokeMartShelf(u8 metatileBehavior); bool8 MetatileBehavior_IsPokeMartShelf(u8 metatileBehavior);
+101 -112
View File
@@ -9,48 +9,48 @@
#include "constants/map_types.h" #include "constants/map_types.h"
#include "constants/songs.h" #include "constants/songs.h"
static u8 GetMovePlayerOnBikeFuncId(u8 *, u16, u16); static u8 GetBikeTransitionId(u8 *, u16, u16);
static void sub_80BD664(void); static void Bike_SetBikeStill(void);
static u8 BikeCanFaceDIrectionOnRail(u8, u8); static u8 CanBikeFaceDIrectionOnRail(u8 direction, u8 metatileBehavior);
static u8 CheckNextTileForBikingCollision(u8); static u8 GetBikeCollision(u8);
static u8 AdjustCollisionForBiking(struct ObjectEvent *, s16, s16, u8, u8); static u8 GetBikeCollisionAt(struct ObjectEvent *playerObjEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior);
static bool8 MetatileBehaviorForbidsBiking(u8); static bool8 MetatileBehaviorForbidsBiking(u8);
static void BikeFaceDirection(u8); static void BikeTransition_FaceDirection(u8);
static void BikeFaceDirectionAccountForRail(u8); static void BikeTransition_TurnDirection(u8);
static void BikeTryMoveFastInDirection(u8); static void BikeTransition_MoveDirection(u8);
static void BikeLetGravityTakeTheWheel(u8); static void BikeTransition_Downhill(u8);
static void BikeTryMoveInDirection(u8); static void BikeTransition_Uphill(u8);
static u8 GetBikeMoveCmd_0(u8 *, u16, u16); static u8 BikeInputHandler_Normal(u8 *, u16, u16);
static u8 GetBikeMoveCmd_1(u8 *, u16, u16); static u8 BikeInputHandler_Turning(u8 *, u16, u16);
static u8 GetBikeMoveCmd_2(u8 *, u16, u16); static u8 BikeInputHandler_Slope(u8 *, u16, u16);
static void (*const sMovePlayerOnBikeFuncs[])(u8) = static void (*const sBikeTransitions[])(u8) =
{ {
BikeFaceDirection, [BIKE_TRANS_FACE_DIRECTION] = BikeTransition_FaceDirection,
BikeFaceDirectionAccountForRail, [BIKE_TRANS_TURNING] = BikeTransition_TurnDirection,
BikeTryMoveFastInDirection, [BIKE_TRANS_MOVE] = BikeTransition_MoveDirection,
BikeLetGravityTakeTheWheel, [BIKE_TRANS_DOWNHILL] = BikeTransition_Downhill,
BikeTryMoveInDirection, [BIKE_TRANS_UPHILL] = BikeTransition_Uphill,
}; };
static u8 (*const sGetMovePlayerOnBikeFuncIdFuncs[])(u8 *, u16, u16) = static u8 (*const sBikeInputHandlers[])(u8 *, u16, u16) =
{ {
GetBikeMoveCmd_0, [BIKE_STATE_NORMAL] = BikeInputHandler_Normal,
GetBikeMoveCmd_1, [BIKE_STATE_TURNING] = BikeInputHandler_Turning,
GetBikeMoveCmd_2, [BIKE_STATE_SLOPE] = BikeInputHandler_Slope,
}; };
void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys)
{ {
sMovePlayerOnBikeFuncs[GetMovePlayerOnBikeFuncId(&direction, newKeys, heldKeys)](direction); sBikeTransitions[GetBikeTransitionId(&direction, newKeys, heldKeys)](direction);
} }
static u8 GetMovePlayerOnBikeFuncId(u8 *direction, u16 newKeys, u16 heldKeys) static u8 GetBikeTransitionId(u8 *direction, u16 newKeys, u16 heldKeys)
{ {
return sGetMovePlayerOnBikeFuncIdFuncs[gPlayerAvatar.acroBikeState](direction, newKeys, heldKeys); return sBikeInputHandlers[gPlayerAvatar.acroBikeState](direction, newKeys, heldKeys);
} }
static u8 GetBikeMoveCmd_0(u8 *direction_p, u16 newKeys, u16 heldKeys) static u8 BikeInputHandler_Normal(u8 *direction_p, u16 newKeys, u16 heldKeys)
{ {
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
u8 direction = GetPlayerMovementDirection(); u8 direction = GetPlayerMovementDirection();
@@ -60,64 +60,56 @@ static u8 GetBikeMoveCmd_0(u8 *direction_p, u16 newKeys, u16 heldKeys)
{ {
if (!JOY_HELD(B_BUTTON)) if (!JOY_HELD(B_BUTTON))
{ {
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE;
gPlayerAvatar.runningState = 2; gPlayerAvatar.runningState = MOVING;
if (*direction_p < DIR_NORTH) if (*direction_p < DIR_NORTH)
return 3; return BIKE_TRANS_DOWNHILL;
else else
return 4; return BIKE_TRANS_UPHILL;
} }
else else
{ {
if (*direction_p != DIR_NONE) if (*direction_p != DIR_NONE)
{ {
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE;
gPlayerAvatar.runningState = 2; gPlayerAvatar.runningState = MOVING;
return 4; return BIKE_TRANS_UPHILL;
}
else
{
goto _080BD17E; // for matching purpose
} }
} }
} }
if (*direction_p == DIR_NONE)
{
*direction_p = direction;
gPlayerAvatar.runningState = NOT_MOVING;
return BIKE_TRANS_FACE_DIRECTION;
}
else else
{ {
if (*direction_p == DIR_NONE) if (*direction_p != direction && gPlayerAvatar.runningState != MOVING)
{ {
_080BD17E: gPlayerAvatar.acroBikeState = BIKE_STATE_TURNING;
*direction_p = direction; gPlayerAvatar.newDirBackup = *direction_p;
gPlayerAvatar.runningState = 0; gPlayerAvatar.runningState = NOT_MOVING;
return 0; return GetBikeTransitionId(direction_p, newKeys, heldKeys);
} }
else else
{ {
if (*direction_p != direction && gPlayerAvatar.runningState != 2) gPlayerAvatar.runningState = MOVING;
{ return BIKE_TRANS_MOVE;
gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING;
gPlayerAvatar.newDirBackup = *direction_p;
gPlayerAvatar.runningState = 0;
return GetMovePlayerOnBikeFuncId(direction_p, newKeys, heldKeys);
}
else
{
gPlayerAvatar.runningState = 2;
return 2;
}
} }
} }
} }
static u8 GetBikeMoveCmd_1(u8 *direction_p, UNUSED u16 newKeys, UNUSED u16 heldKeys) static u8 BikeInputHandler_Turning(u8 *direction_p, UNUSED u16 newKeys, UNUSED u16 heldKeys)
{ {
*direction_p = gPlayerAvatar.newDirBackup; *direction_p = gPlayerAvatar.newDirBackup;
gPlayerAvatar.runningState = 1; gPlayerAvatar.runningState = TURN_DIRECTION;
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; gPlayerAvatar.acroBikeState = BIKE_STATE_NORMAL;
sub_80BD664(); Bike_SetBikeStill();
return 1; return BIKE_TRANS_TURNING;
} }
static u8 GetBikeMoveCmd_2(u8 *direction_p, u16 newKeys, u16 heldKeys) static u8 BikeInputHandler_Slope(u8 *direction_p, u16 newKeys, u16 heldKeys)
{ {
u8 direction = GetPlayerMovementDirection(); u8 direction = GetPlayerMovementDirection();
u8 playerObjEventId = gPlayerAvatar.objectEventId; u8 playerObjEventId = gPlayerAvatar.objectEventId;
@@ -125,64 +117,61 @@ static u8 GetBikeMoveCmd_2(u8 *direction_p, u16 newKeys, u16 heldKeys)
{ {
if (*direction_p != direction) if (*direction_p != direction)
{ {
gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; gPlayerAvatar.acroBikeState = BIKE_STATE_TURNING;
gPlayerAvatar.newDirBackup = *direction_p; gPlayerAvatar.newDirBackup = *direction_p;
gPlayerAvatar.runningState = 0; gPlayerAvatar.runningState = NOT_MOVING;
return GetMovePlayerOnBikeFuncId(direction_p, newKeys, heldKeys); return GetBikeTransitionId(direction_p, newKeys, heldKeys);
} }
else else
{ {
gPlayerAvatar.runningState = 2; gPlayerAvatar.runningState = MOVING;
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE;
if (*direction_p < DIR_NORTH) if (*direction_p < DIR_NORTH)
return 3; return BIKE_TRANS_DOWNHILL;
else else
return 4; return BIKE_TRANS_UPHILL;
} }
} }
gPlayerAvatar.acroBikeState = BIKE_STATE_NORMAL;
if (*direction_p == DIR_NONE)
{
*direction_p = direction;
gPlayerAvatar.runningState = NOT_MOVING;
return BIKE_TRANS_FACE_DIRECTION;
}
else else
{ {
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; gPlayerAvatar.runningState = MOVING;
if (*direction_p == DIR_NONE) return BIKE_TRANS_MOVE;
{
*direction_p = direction;
gPlayerAvatar.runningState = 0;
return 0;
}
else
{
gPlayerAvatar.runningState = 2;
return 2;
}
} }
} }
static void BikeFaceDirection(u8 direction) static void BikeTransition_FaceDirection(u8 direction)
{ {
PlayerFaceDirection(direction); PlayerFaceDirection(direction);
} }
static void BikeFaceDirectionAccountForRail(u8 direction) static void BikeTransition_TurnDirection(u8 direction)
{ {
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!BikeCanFaceDIrectionOnRail(direction, playerObjEvent->currentMetatileBehavior)) if (!CanBikeFaceDIrectionOnRail(direction, playerObjEvent->currentMetatileBehavior))
direction = playerObjEvent->movementDirection; direction = playerObjEvent->movementDirection;
PlayerFaceDirection(direction); PlayerFaceDirection(direction);
} }
static void BikeTryMoveFastInDirection(u8 direction) static void BikeTransition_MoveDirection(u8 direction)
{ {
struct ObjectEvent *playerObjEvent; struct ObjectEvent *playerObjEvent;
playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!BikeCanFaceDIrectionOnRail(direction, playerObjEvent->currentMetatileBehavior)) if (!CanBikeFaceDIrectionOnRail(direction, playerObjEvent->currentMetatileBehavior))
{ {
BikeFaceDirection(playerObjEvent->movementDirection); BikeTransition_FaceDirection(playerObjEvent->movementDirection);
} }
else else
{ {
u8 collision = CheckNextTileForBikingCollision(direction); u8 collision = GetBikeCollision(direction);
if (collision > COLLISION_NONE && collision <= COLLISION_ISOLATED_HORIZONTAL_RAIL) if (collision > COLLISION_NONE && collision <= COLLISION_ISOLATED_HORIZONTAL_RAIL)
{ {
@@ -204,9 +193,9 @@ static void BikeTryMoveFastInDirection(u8 direction)
} }
} }
static void BikeLetGravityTakeTheWheel(UNUSED u8 v) static void BikeTransition_Downhill(UNUSED u8 v)
{ {
u8 collision = CheckNextTileForBikingCollision(DIR_SOUTH); u8 collision = GetBikeCollision(DIR_SOUTH);
if (collision == COLLISION_NONE) if (collision == COLLISION_NONE)
sub_805C164(DIR_SOUTH); sub_805C164(DIR_SOUTH);
@@ -214,13 +203,13 @@ static void BikeLetGravityTakeTheWheel(UNUSED u8 v)
PlayerJumpLedge(DIR_SOUTH); PlayerJumpLedge(DIR_SOUTH);
} }
static void BikeTryMoveInDirection(u8 direction) static void BikeTransition_Uphill(u8 direction)
{ {
if (CheckNextTileForBikingCollision(direction) == COLLISION_NONE) if (GetBikeCollision(direction) == COLLISION_NONE)
PlayerGoSpeed1(direction); PlayerGoSpeed1(direction);
} }
static u8 CheckNextTileForBikingCollision(u8 direction) static u8 GetBikeCollision(u8 direction)
{ {
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
s16 x, y; s16 x, y;
@@ -230,10 +219,10 @@ static u8 CheckNextTileForBikingCollision(u8 direction)
y = playerObjEvent->currentCoords.y; y = playerObjEvent->currentCoords.y;
MoveCoords(direction, &x, &y); MoveCoords(direction, &x, &y);
metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
return AdjustCollisionForBiking(playerObjEvent, x, y, direction, metatileBehavior); return GetBikeCollisionAt(playerObjEvent, x, y, direction, metatileBehavior);
} }
static u8 AdjustCollisionForBiking(struct ObjectEvent *playerObjEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) static u8 GetBikeCollisionAt(struct ObjectEvent *playerObjEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior)
{ {
u8 retVal = CheckForObjectEventCollision(playerObjEvent, x, y, direction, metatileBehavior); u8 retVal = CheckForObjectEventCollision(playerObjEvent, x, y, direction, metatileBehavior);
@@ -248,7 +237,7 @@ static u8 AdjustCollisionForBiking(struct ObjectEvent *playerObjEvent, s16 x, s1
return retVal; return retVal;
} }
bool8 sub_80BD460(u8 r0) bool8 RS_IsRunningDisallowed(u8 r0)
{ {
if (MetatileBehaviorForbidsBiking(r0)) if (MetatileBehaviorForbidsBiking(r0))
return TRUE; return TRUE;
@@ -270,16 +259,16 @@ bool32 IsRunningDisallowed(u8 metatileBehavior)
static bool8 MetatileBehaviorForbidsBiking(u8 metatileBehavior) static bool8 MetatileBehaviorForbidsBiking(u8 metatileBehavior)
{ {
if (MetatileBehavior_IsMB0A(metatileBehavior)) if (MetatileBehavior_IsRunningDisallowed(metatileBehavior))
return TRUE; return TRUE;
if (!MetatileBehavior_ReturnFalse_9(metatileBehavior)) if (!MetatileBehavior_IsFortreeBridge(metatileBehavior))
return FALSE; return FALSE;
if (PlayerGetZCoord() & 1) if (PlayerGetZCoord() & 1)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
static bool8 BikeCanFaceDIrectionOnRail(u8 direction, u8 metatileBehavior) static bool8 CanBikeFaceDIrectionOnRail(u8 direction, u8 metatileBehavior)
{ {
if (direction == DIR_EAST || direction == DIR_WEST) if (direction == DIR_EAST || direction == DIR_WEST)
{ {
@@ -294,7 +283,7 @@ static bool8 BikeCanFaceDIrectionOnRail(u8 direction, u8 metatileBehavior)
return TRUE; return TRUE;
} }
bool8 MetatileAtPlayerPositionForbidsBiking(void) bool8 IsBikingDisallowedByPlayer(void)
{ {
s16 x, y; s16 x, y;
u8 metatileBehavior; u8 metatileBehavior;
@@ -309,9 +298,9 @@ bool8 MetatileAtPlayerPositionForbidsBiking(void)
return TRUE; return TRUE;
} }
bool8 player_should_look_direction_be_enforced_upon_movement(void) bool8 IsPlayerNotUsingAcroBikeOnBumpySlope(void)
{ {
if (TestPlayerAvatarFlags(PLAYER_AVATAR_STATE_UNDERWATER)) if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
{ {
if (MetatileBehavior_IsBumpySlope(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior)) if (MetatileBehavior_IsBumpySlope(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior))
return FALSE; return FALSE;
@@ -319,7 +308,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void)
return TRUE; return TRUE;
} }
void StartTransitionToFlipBikeState(u8 flags) void GoOnOffBike(u8 flags)
{ {
gBikeCameraAheadPanback = FALSE; gBikeCameraAheadPanback = FALSE;
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
@@ -339,11 +328,11 @@ void StartTransitionToFlipBikeState(u8 flags)
} }
} }
void InitPlayerAvatarBikeState(u32 directionHistory, u32 abStartSelectHistory) void BikeClearState(u32 directionHistory, u32 abStartSelectHistory)
{ {
u8 i; u8 i;
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; gPlayerAvatar.acroBikeState = BIKE_STATE_NORMAL;
gPlayerAvatar.newDirBackup = 0; gPlayerAvatar.newDirBackup = 0;
gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeFrameCounter = 0;
gPlayerAvatar.bikeSpeed = SPEED_STANDING; gPlayerAvatar.bikeSpeed = SPEED_STANDING;
@@ -360,7 +349,7 @@ void Bike_UpdateBikeCounterSpeed(u8 counter)
gPlayerAvatar.bikeSpeed = counter + (gPlayerAvatar.bikeFrameCounter >> 1); gPlayerAvatar.bikeSpeed = counter + (gPlayerAvatar.bikeFrameCounter >> 1);
} }
static void sub_80BD664(void) static void Bike_SetBikeStill(void)
{ {
gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeFrameCounter = 0;
gPlayerAvatar.bikeSpeed = SPEED_STANDING; gPlayerAvatar.bikeSpeed = SPEED_STANDING;
@@ -368,16 +357,16 @@ static void sub_80BD664(void)
s16 GetPlayerSpeed(void) s16 GetPlayerSpeed(void)
{ {
s16 exp[] = { 1, 2, 4 }; s16 machBikeSpeeds[] = { SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST };
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
return exp[gPlayerAvatar.bikeFrameCounter]; return machBikeSpeeds[gPlayerAvatar.bikeFrameCounter];
else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)
return 3; return SPEED_FASTER;
else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH)) else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH))
return 2; return SPEED_FAST;
else else
return 1; return SPEED_NORMAL;
} }
void Bike_HandleBumpySlopeJump(void) void Bike_HandleBumpySlopeJump(void)
@@ -391,8 +380,8 @@ void Bike_HandleBumpySlopeJump(void)
tileBehavior = MapGridGetMetatileBehaviorAt(x, y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsBumpySlope(tileBehavior)) if (MetatileBehavior_IsBumpySlope(tileBehavior))
{ {
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE;
nullsub_24(GetPlayerMovementDirection()); PlayerUseAcroBikeOnBumpySlope(GetPlayerMovementDirection());
} }
} }
} }
+5 -4
View File
@@ -720,7 +720,7 @@ static void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent)
{ {
QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_BIKE); QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_BIKE);
QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_BIKE); QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_BIKE);
InitPlayerAvatarBikeState(0, 0); BikeClearState(0, 0);
} }
static void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent) static void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent)
@@ -913,7 +913,7 @@ void HandleEnforcedLookDirectionOnPlayerStopMoving(void)
{ {
if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
{ {
if (player_should_look_direction_be_enforced_upon_movement()) if (IsPlayerNotUsingAcroBikeOnBumpySlope())
PlayerForceSetHeldMovement(GetFaceDirectionMovementAction(gObjectEvents[gPlayerAvatar.objectEventId].facingDirection)); PlayerForceSetHeldMovement(GetFaceDirectionMovementAction(gObjectEvents[gPlayerAvatar.objectEventId].facingDirection));
} }
} }
@@ -1346,12 +1346,13 @@ void StartPlayerAvatarFishAnim(u8 direction)
QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_FISH); QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_FISH);
} }
void nullsub_24(u8 direction) // Stubbed from R/S
void PlayerUseAcroBikeOnBumpySlope(u8 direction)
{ {
} }
static void nullsub_25(void) static void SetPlayerAvatarWatering(void)
{ {
} }
+2 -2
View File
@@ -263,7 +263,7 @@ void FieldUseFunc_MachBike(u8 taskId)
|| MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE
|| MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451); DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451);
else if (Overworld_IsBikingAllowed() == TRUE && !MetatileAtPlayerPositionForbidsBiking()) else if (Overworld_IsBikingAllowed() == TRUE && !IsBikingDisallowedByPlayer())
{ {
sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle; sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle;
sub_80A103C(taskId); sub_80A103C(taskId);
@@ -276,7 +276,7 @@ static void ItemUseOnFieldCB_Bicycle(u8 taskId)
{ {
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
PlaySE(SE_BIKE_BELL); PlaySE(SE_BIKE_BELL);
StartTransitionToFlipBikeState(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE); GoOnOffBike(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE);
ClearPlayerHeldMovementAndUnfreezeObjectEvents(); ClearPlayerHeldMovementAndUnfreezeObjectEvents();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
+3 -3
View File
@@ -598,7 +598,7 @@ bool8 MetatileBehavior_IsWaterfall(u8 metatileBehavior)
return FALSE; return FALSE;
} }
bool8 MetatileBehavior_ReturnFalse_9(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_IsFortreeBridge(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior){ return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior){ return FALSE; }
bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior) { return FALSE; }
@@ -691,9 +691,9 @@ bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior)
return FALSE; return FALSE;
} }
bool8 MetatileBehavior_IsMB0A(u8 metatileBehavior) bool8 MetatileBehavior_IsRunningDisallowed(u8 metatileBehavior)
{ {
if(metatileBehavior == MB_0A) if(metatileBehavior == MB_RUNNING_DISALLOWED)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
+1 -1
View File
@@ -69,7 +69,7 @@ static void QL_GfxTransition_Bike(void)
QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_BIKE)); QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_BIKE));
ObjectEventTurn(objectEvent, objectEvent->movementDirection); ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_MACH_BIKE); SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_MACH_BIKE);
InitPlayerAvatarBikeState(0, 0); BikeClearState(0, 0);
} }
static void QL_GfxTransition_Fish(void) static void QL_GfxTransition_Fish(void)