diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-03-31 09:42:57 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-03-31 09:42:57 -0400 |
commit | a704592eb71b0e9ebefe51ebc87a6a2455ca675e (patch) | |
tree | c21542bb6f65863c05e1f56842c5364c4a53c82e /src | |
parent | f00b44699c49550ae2a56bf64e10e7f2d841e839 (diff) | |
parent | d1afbf17bbc9eb70cf085f3b734d02e4ce6b3b57 (diff) |
Merge branch 'master' of github.com:pret/pokefirered into fix_mvmt_types
Diffstat (limited to 'src')
-rw-r--r-- | src/bike.c | 215 | ||||
-rw-r--r-- | src/field_player_avatar.c | 9 | ||||
-rw-r--r-- | src/item_use.c | 4 | ||||
-rw-r--r-- | src/metatile_behavior.c | 6 | ||||
-rw-r--r-- | src/quest_log_player.c | 2 |
5 files changed, 113 insertions, 123 deletions
diff --git a/src/bike.c b/src/bike.c index b1d39ca21..4a8bf1d4e 100644 --- a/src/bike.c +++ b/src/bike.c @@ -9,48 +9,48 @@ #include "constants/map_types.h" #include "constants/songs.h" -static u8 GetMovePlayerOnBikeFuncId(u8 *, u16, u16); -static void sub_80BD664(void); -static u8 BikeCanFaceDIrectionOnRail(u8, u8); -static u8 CheckNextTileForBikingCollision(u8); -static u8 AdjustCollisionForBiking(struct ObjectEvent *, s16, s16, u8, u8); +static u8 GetBikeTransitionId(u8 *, u16, u16); +static void Bike_SetBikeStill(void); +static u8 CanBikeFaceDirectionOnRail(u8 direction, u8 metatileBehavior); +static u8 GetBikeCollision(u8); +static u8 GetBikeCollisionAt(struct ObjectEvent *playerObjEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior); static bool8 MetatileBehaviorForbidsBiking(u8); -static void BikeFaceDirection(u8); -static void BikeFaceDirectionAccountForRail(u8); -static void BikeTryMoveFastInDirection(u8); -static void BikeLetGravityTakeTheWheel(u8); -static void BikeTryMoveInDirection(u8); -static u8 GetBikeMoveCmd_0(u8 *, u16, u16); -static u8 GetBikeMoveCmd_1(u8 *, u16, u16); -static u8 GetBikeMoveCmd_2(u8 *, u16, u16); - -static void (*const sMovePlayerOnBikeFuncs[])(u8) = +static void BikeTransition_FaceDirection(u8); +static void BikeTransition_TurnDirection(u8); +static void BikeTransition_MoveDirection(u8); +static void BikeTransition_Downhill(u8); +static void BikeTransition_Uphill(u8); +static u8 BikeInputHandler_Normal(u8 *, u16, u16); +static u8 BikeInputHandler_Turning(u8 *, u16, u16); +static u8 BikeInputHandler_Slope(u8 *, u16, u16); + +static void (*const sBikeTransitions[])(u8) = { - BikeFaceDirection, - BikeFaceDirectionAccountForRail, - BikeTryMoveFastInDirection, - BikeLetGravityTakeTheWheel, - BikeTryMoveInDirection, + [BIKE_TRANS_FACE_DIRECTION] = BikeTransition_FaceDirection, + [BIKE_TRANS_TURNING] = BikeTransition_TurnDirection, + [BIKE_TRANS_MOVE] = BikeTransition_MoveDirection, + [BIKE_TRANS_DOWNHILL] = BikeTransition_Downhill, + [BIKE_TRANS_UPHILL] = BikeTransition_Uphill, }; -static u8 (*const sGetMovePlayerOnBikeFuncIdFuncs[])(u8 *, u16, u16) = +static u8 (*const sBikeInputHandlers[])(u8 *, u16, u16) = { - GetBikeMoveCmd_0, - GetBikeMoveCmd_1, - GetBikeMoveCmd_2, + [BIKE_STATE_NORMAL] = BikeInputHandler_Normal, + [BIKE_STATE_TURNING] = BikeInputHandler_Turning, + [BIKE_STATE_SLOPE] = BikeInputHandler_Slope, }; 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]; u8 direction = GetPlayerMovementDirection(); @@ -60,64 +60,56 @@ static u8 GetBikeMoveCmd_0(u8 *direction_p, u16 newKeys, u16 heldKeys) { if (!JOY_HELD(B_BUTTON)) { - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - gPlayerAvatar.runningState = 2; + gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE; + gPlayerAvatar.runningState = MOVING; if (*direction_p < DIR_NORTH) - return 3; + return BIKE_TRANS_DOWNHILL; else - return 4; + return BIKE_TRANS_UPHILL; } else { if (*direction_p != DIR_NONE) { - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - gPlayerAvatar.runningState = 2; - return 4; - } - else - { - goto _080BD17E; // for matching purpose + gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE; + gPlayerAvatar.runningState = MOVING; + return BIKE_TRANS_UPHILL; } } } + if (*direction_p == DIR_NONE) + { + *direction_p = direction; + gPlayerAvatar.runningState = NOT_MOVING; + return BIKE_TRANS_FACE_DIRECTION; + } else { - if (*direction_p == DIR_NONE) + if (*direction_p != direction && gPlayerAvatar.runningState != MOVING) { - _080BD17E: - *direction_p = direction; - gPlayerAvatar.runningState = 0; - return 0; + gPlayerAvatar.acroBikeState = BIKE_STATE_TURNING; + gPlayerAvatar.newDirBackup = *direction_p; + gPlayerAvatar.runningState = NOT_MOVING; + return GetBikeTransitionId(direction_p, newKeys, heldKeys); } else { - if (*direction_p != direction && gPlayerAvatar.runningState != 2) - { - gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; - gPlayerAvatar.newDirBackup = *direction_p; - gPlayerAvatar.runningState = 0; - return GetMovePlayerOnBikeFuncId(direction_p, newKeys, heldKeys); - } - else - { - gPlayerAvatar.runningState = 2; - return 2; - } + gPlayerAvatar.runningState = MOVING; + return BIKE_TRANS_MOVE; } } } -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; - gPlayerAvatar.runningState = 1; - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80BD664(); - return 1; + gPlayerAvatar.runningState = TURN_DIRECTION; + gPlayerAvatar.acroBikeState = BIKE_STATE_NORMAL; + Bike_SetBikeStill(); + 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 playerObjEventId = gPlayerAvatar.objectEventId; @@ -125,64 +117,61 @@ static u8 GetBikeMoveCmd_2(u8 *direction_p, u16 newKeys, u16 heldKeys) { if (*direction_p != direction) { - gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; + gPlayerAvatar.acroBikeState = BIKE_STATE_TURNING; gPlayerAvatar.newDirBackup = *direction_p; - gPlayerAvatar.runningState = 0; - return GetMovePlayerOnBikeFuncId(direction_p, newKeys, heldKeys); + gPlayerAvatar.runningState = NOT_MOVING; + return GetBikeTransitionId(direction_p, newKeys, heldKeys); } else { - gPlayerAvatar.runningState = 2; - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; + gPlayerAvatar.runningState = MOVING; + gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE; if (*direction_p < DIR_NORTH) - return 3; + return BIKE_TRANS_DOWNHILL; 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 { - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - if (*direction_p == DIR_NONE) - { - *direction_p = direction; - gPlayerAvatar.runningState = 0; - return 0; - } - else - { - gPlayerAvatar.runningState = 2; - return 2; - } + gPlayerAvatar.runningState = MOVING; + return BIKE_TRANS_MOVE; } } -static void BikeFaceDirection(u8 direction) +static void BikeTransition_FaceDirection(u8 direction) { PlayerFaceDirection(direction); } -static void BikeFaceDirectionAccountForRail(u8 direction) +static void BikeTransition_TurnDirection(u8 direction) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - if (!BikeCanFaceDIrectionOnRail(direction, playerObjEvent->currentMetatileBehavior)) + if (!CanBikeFaceDirectionOnRail(direction, playerObjEvent->currentMetatileBehavior)) direction = playerObjEvent->movementDirection; PlayerFaceDirection(direction); } -static void BikeTryMoveFastInDirection(u8 direction) +static void BikeTransition_MoveDirection(u8 direction) { struct ObjectEvent *playerObjEvent; playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - if (!BikeCanFaceDIrectionOnRail(direction, playerObjEvent->currentMetatileBehavior)) + if (!CanBikeFaceDirectionOnRail(direction, playerObjEvent->currentMetatileBehavior)) { - BikeFaceDirection(playerObjEvent->movementDirection); + BikeTransition_FaceDirection(playerObjEvent->movementDirection); } else { - u8 collision = CheckNextTileForBikingCollision(direction); + u8 collision = GetBikeCollision(direction); 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) sub_805C164(DIR_SOUTH); @@ -214,13 +203,13 @@ static void BikeLetGravityTakeTheWheel(UNUSED u8 v) 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); } -static u8 CheckNextTileForBikingCollision(u8 direction) +static u8 GetBikeCollision(u8 direction) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; s16 x, y; @@ -230,10 +219,10 @@ static u8 CheckNextTileForBikingCollision(u8 direction) y = playerObjEvent->currentCoords.y; MoveCoords(direction, &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); @@ -248,7 +237,7 @@ static u8 AdjustCollisionForBiking(struct ObjectEvent *playerObjEvent, s16 x, s1 return retVal; } -bool8 sub_80BD460(u8 r0) +bool8 RS_IsRunningDisallowed(u8 r0) { if (MetatileBehaviorForbidsBiking(r0)) return TRUE; @@ -270,16 +259,16 @@ bool32 IsRunningDisallowed(u8 metatileBehavior) static bool8 MetatileBehaviorForbidsBiking(u8 metatileBehavior) { - if (MetatileBehavior_IsMB0A(metatileBehavior)) + if (MetatileBehavior_IsRunningDisallowed(metatileBehavior)) return TRUE; - if (!MetatileBehavior_ReturnFalse_9(metatileBehavior)) + if (!MetatileBehavior_IsFortreeBridge(metatileBehavior)) return FALSE; if (PlayerGetZCoord() & 1) return FALSE; return TRUE; } -static bool8 BikeCanFaceDIrectionOnRail(u8 direction, u8 metatileBehavior) +static bool8 CanBikeFaceDirectionOnRail(u8 direction, u8 metatileBehavior) { if (direction == DIR_EAST || direction == DIR_WEST) { @@ -294,7 +283,7 @@ static bool8 BikeCanFaceDIrectionOnRail(u8 direction, u8 metatileBehavior) return TRUE; } -bool8 MetatileAtPlayerPositionForbidsBiking(void) +bool8 IsBikingDisallowedByPlayer(void) { s16 x, y; u8 metatileBehavior; @@ -309,9 +298,9 @@ bool8 MetatileAtPlayerPositionForbidsBiking(void) 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)) return FALSE; @@ -319,7 +308,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void) return TRUE; } -void StartTransitionToFlipBikeState(u8 flags) +void GetOnOffBike(u8 flags) { gBikeCameraAheadPanback = FALSE; 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; - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + gPlayerAvatar.acroBikeState = BIKE_STATE_NORMAL; gPlayerAvatar.newDirBackup = 0; gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; @@ -360,7 +349,7 @@ void Bike_UpdateBikeCounterSpeed(u8 counter) gPlayerAvatar.bikeSpeed = counter + (gPlayerAvatar.bikeFrameCounter >> 1); } -static void sub_80BD664(void) +static void Bike_SetBikeStill(void) { gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; @@ -368,16 +357,16 @@ static void sub_80BD664(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) - return exp[gPlayerAvatar.bikeFrameCounter]; + return machBikeSpeeds[gPlayerAvatar.bikeFrameCounter]; 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)) - return 2; + return SPEED_FAST; else - return 1; + return SPEED_NORMAL; } void Bike_HandleBumpySlopeJump(void) @@ -391,8 +380,8 @@ void Bike_HandleBumpySlopeJump(void) tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsBumpySlope(tileBehavior)) { - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - nullsub_24(GetPlayerMovementDirection()); + gPlayerAvatar.acroBikeState = BIKE_STATE_SLOPE; + PlayerUseAcroBikeOnBumpySlope(GetPlayerMovementDirection()); } } } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index bf0afe5b8..2e1513358 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -720,7 +720,7 @@ static void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent) { QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_BIKE); QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_BIKE); - InitPlayerAvatarBikeState(0, 0); + BikeClearState(0, 0); } 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 (player_should_look_direction_be_enforced_upon_movement()) + if (IsPlayerNotUsingAcroBikeOnBumpySlope()) PlayerForceSetHeldMovement(GetFaceDirectionMovementAction(gObjectEvents[gPlayerAvatar.objectEventId].facingDirection)); } } @@ -1346,12 +1346,13 @@ void StartPlayerAvatarFishAnim(u8 direction) 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) { } diff --git a/src/item_use.c b/src/item_use.c index 585d44273..b801e9ee5 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -263,7 +263,7 @@ void FieldUseFunc_MachBike(u8 taskId) || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451); - else if (Overworld_IsBikingAllowed() == TRUE && !MetatileAtPlayerPositionForbidsBiking()) + else if (Overworld_IsBikingAllowed() == TRUE && !IsBikingDisallowedByPlayer()) { sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle; 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)) PlaySE(SE_BIKE_BELL); - StartTransitionToFlipBikeState(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE); + GetOnOffBike(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE); ClearPlayerHeldMovementAndUnfreezeObjectEvents(); ScriptContext2_Disable(); DestroyTask(taskId); diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 4728ca05c..95215d7b6 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -598,7 +598,7 @@ bool8 MetatileBehavior_IsWaterfall(u8 metatileBehavior) 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_2(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior) { return FALSE; } @@ -691,9 +691,9 @@ bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB0A(u8 metatileBehavior) +bool8 MetatileBehavior_IsRunningDisallowed(u8 metatileBehavior) { - if(metatileBehavior == MB_0A) + if(metatileBehavior == MB_RUNNING_DISALLOWED) return TRUE; else return FALSE; diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 4dcb13af2..ba672c482 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -69,7 +69,7 @@ static void QL_GfxTransition_Bike(void) QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_BIKE)); ObjectEventTurn(objectEvent, objectEvent->movementDirection); SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_MACH_BIKE); - InitPlayerAvatarBikeState(0, 0); + BikeClearState(0, 0); } static void QL_GfxTransition_Fish(void) |