diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-23 21:42:35 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-23 21:42:35 -0400 |
commit | 5b3e9f376b2ed230df1d7e6d23e0239f69d10ba4 (patch) | |
tree | 6011f60d2398a5ebb78564de2a06e150d62b34f9 /src | |
parent | f9a3607824d00f17999288e241fc3ad339716279 (diff) |
through PlayerGetCopyableMovement
Diffstat (limited to 'src')
-rw-r--r-- | src/dynamic_placeholder_text_util.c | 2 | ||||
-rw-r--r-- | src/event_data.c | 2 | ||||
-rw-r--r-- | src/field_control_avatar.c | 2 | ||||
-rw-r--r-- | src/field_fadetransition.c | 2 | ||||
-rw-r--r-- | src/field_player_avatar.c | 238 | ||||
-rw-r--r-- | src/fldeff_strength.c | 2 | ||||
-rw-r--r-- | src/item_use.c | 8 | ||||
-rw-r--r-- | src/metatile_behavior.c | 12 |
8 files changed, 251 insertions, 17 deletions
diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index 921612cfc..955c4866a 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -56,7 +56,7 @@ static const u8 sTextColorTable[] = [OBJ_EVENT_GFX_TEACHY_TV_HOST / 2] = 0x00, // OBJ_EVENT_GFX_GYM_GUY [OBJ_EVENT_GFX_ITEM_BALL / 2] = 0x33, // OBJ_EVENT_GFX_TOWN_MAP [OBJ_EVENT_GFX_POKEDEX / 2] = 0x33, // OBJ_EVENT_GFX_CUT_TREE - [OBJ_EVENT_GFX_ROCK_SMASH_ROCK / 2] = 0x33, // OBJ_EVENT_GFX_STRENGTH_BOULDER + [OBJ_EVENT_GFX_ROCK_SMASH_ROCK / 2] = 0x33, // OBJ_EVENT_GFX_PUSHABLE_BOULDER [OBJ_EVENT_GFX_FOSSIL / 2] = 0x33, // OBJ_EVENT_GFX_RUBY [OBJ_EVENT_GFX_SAPPHIRE / 2] = 0x33, // OBJ_EVENT_GFX_OLD_AMBER [OBJ_EVENT_GFX_GYM_SIGN / 2] = 0x33, // OBJ_EVENT_GFX_SIGN diff --git a/src/event_data.c b/src/event_data.c index a162e8701..f16267c98 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -44,7 +44,7 @@ void sub_806E110(void) memset(gSaveBlock1Ptr->vars, 0, 16 * 2); FlagClear(FLAG_SYS_WHITE_FLUTE_ACTIVE); FlagClear(FLAG_SYS_BLACK_FLUTE_ACTIVE); - FlagClear(FLAG_SYS_STRENGTH_ACTIVE); + FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_SPECIAL_WILD_BATTLE); FlagClear(FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER); } diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index da3fb4a03..891af3e90 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -906,7 +906,7 @@ static bool8 IsWarpMetatileBehavior(u16 metatileBehavior) return TRUE; if (MetatileBehavior_IsEscalator(metatileBehavior) == TRUE) return TRUE; - if (MetatileBehavior_IsCaveDoor(metatileBehavior) == TRUE) + if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE) return TRUE; if (MetatileBehavior_IsLavaridgeB1FWarp(metatileBehavior) == TRUE) return TRUE; diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 10d6b3d72..c24d153ac 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -260,7 +260,7 @@ static void sub_807DE78(bool8 a0) else { sub_807DF4C(a0); - if (MetatileBehavior_IsCaveDoor(behavior) == TRUE) + if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) func = task_map_chg_seq_0807E20C; else if (MetatileBehavior_IsUnknownWarp6C_to_6F(behavior) == TRUE) { diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 5b2820f96..c27eb2650 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -8,9 +8,13 @@ #include "field_player_avatar.h" #include "metatile_behavior.h" #include "overworld.h" +#include "quest_log.h" +#include "quest_log_player.h" #include "constants/event_object_movement.h" +#include "constants/event_objects.h" #include "constants/songs.h" #include "constants/flags.h" +#include "constants/metatile_behaviors.h" EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL; EWRAM_DATA bool8 gUnknown_2036E34 = FALSE; @@ -21,7 +25,6 @@ u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprit 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); @@ -56,7 +59,20 @@ u8 CheckForObjectEventCollision(struct ObjectEvent * objectEvent, s16 x, s16 y, bool8 CanStopSurfing(s16 x, s16 y, u8 direction); bool8 ShouldJumpLedge(s16 x, s16 y, u8 direction); bool8 TryPushBoulder(s16 x, s16 y, u8 direction); -bool8 CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision); +void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision); +void DoPlayerAvatarTransition(void); +void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObject); +void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObject); +bool8 PlayerIsAnimActive(void); +bool8 PlayerCheckIfAnimFinishedOrInactive(void); +bool8 player_is_anim_in_certain_ranges(void); +bool8 sub_805BF58(void); +void CreateStopSurfingTask(u8 direction); +void StartStrengthAnim(u8 objectEventId, u8 direction); void PlayerNotOnBikeCollide(u8 direction); void PlayerRun(u8 direction); void PlayerRunSlow(u8 direction); @@ -531,3 +547,221 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u } return collision; } + +const u8 gUnknown_835B820[] = { + MOVEMENT_ACTION_FACE_DOWN_FAST, + MOVEMENT_ACTION_FACE_DOWN_FAST, + MOVEMENT_ACTION_FACE_UP_FAST, + MOVEMENT_ACTION_FACE_LEFT_FAST, + MOVEMENT_ACTION_FACE_RIGHT_FAST +}; + +bool8 CanStopSurfing(s16 x, s16 y, u8 direction) +{ + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + && MapGridGetZCoordAt(x, y) == 3 + && GetObjectEventIdByXYZ(x, y, 3) == OBJECT_EVENTS_COUNT) + { + sub_811278C(gUnknown_835B820[direction], 16); + CreateStopSurfingTask(direction); + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) +{ + if (GetLedgeJumpDirection(x, y, z) != 0) + return TRUE; + else + return FALSE; +} + +bool8 TryPushBoulder(s16 x, s16 y, u8 direction) +{ + u8 objectEventId; + if (!FlagGet(FLAG_SYS_USE_STRENGTH)) + return FALSE; + + objectEventId = GetObjectEventIdByXY(x, y); + if (objectEventId == OBJECT_EVENTS_COUNT) + return FALSE; + + if (gObjectEvents[objectEventId].graphicsId != OBJ_EVENT_GFX_PUSHABLE_BOULDER) + return FALSE; + + x = gObjectEvents[objectEventId].currentCoords.x; + y = gObjectEvents[objectEventId].currentCoords.y; + MoveCoords(direction, &x, &y); + if (MapGridGetMetatileBehaviorAt(x, y) == MB_FALL_WARP || (GetCollisionAtCoords(&gObjectEvents[objectEventId], x, y, direction) == COLLISION_NONE && !MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)))) + { + StartStrengthAnim(objectEventId, direction); + return TRUE; + } + else + { + direction++; + direction--; + return FALSE; + } +} + +bool8 (*const gUnknown_835B828[])(u8) = { + MetatileBehavior_IsBumpySlope, + MetatileBehavior_IsIsolatedVerticalRail, + MetatileBehavior_IsIsolatedHorizontalRail, + MetatileBehavior_IsVerticalRail, + MetatileBehavior_IsHorizontalRail +}; + +const u8 gUnknown_835B83C[] = { + COLLISION_WHEELIE_HOP, + COLLISION_ISOLATED_VERTICAL_RAIL, + COLLISION_ISOLATED_HORIZONTAL_RAIL, + COLLISION_VERTICAL_RAIL, + COLLISION_HORIZONTAL_RAIL, +}; + +void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision) +{ + u8 i; + + for (i = 0; i < NELEMS(gUnknown_835B828); i++) + { + if (gUnknown_835B828[i](metatileBehavior)) + { + *collision = gUnknown_835B83C[i]; + return; + } + } +} + +void SetPlayerAvatarTransitionFlags(bool16 flags) +{ + gPlayerAvatar.unk1 |= flags; + DoPlayerAvatarTransition(); +} + +void (*const gUnknown_835B844[])(struct ObjectEvent *) = { + PlayerAvatarTransition_Normal, + PlayerAvatarTransition_Bike, + PlayerAvatarTransition_Bike, + PlayerAvatarTransition_Surfing, + PlayerAvatarTransition_Underwater, + PlayerAvatarTransition_ReturnToField, + PlayerAvatarTransition_Dummy, + PlayerAvatarTransition_Dummy +}; + +void DoPlayerAvatarTransition(void) +{ + u8 i; + u8 flags = gPlayerAvatar.unk1; + + if (flags != 0) + { + for (i = 0; i < NELEMS(gUnknown_835B844); i++, flags >>= 1) + { + if (flags & 1) + gUnknown_835B844[i](&gObjectEvents[gPlayerAvatar.objectEventId]); + } + gPlayerAvatar.unk1 = 0; + } +} + +void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObjEvent) +{ + +} + +void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObjEvent) +{ + sub_8150474(0); + sub_8150498(0); +} + +void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent) +{ + sub_8150474(1); + sub_8150498(1); + sub_80BD620(0, 0); +} + +void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent) +{ + sub_8150474(3); + sub_8150498(3); +} + +void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEvent) +{ + +} + +void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent) +{ + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED; +} + +void sub_805BEB8(void) +{ + gPlayerAvatar.tileTransitionState = T_NOT_MOVING; + if (PlayerIsAnimActive()) + { + if (!PlayerCheckIfAnimFinishedOrInactive()) + { + if (!player_is_anim_in_certain_ranges()) + gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION; + } + else + { + if (!sub_805BF58()) + gPlayerAvatar.tileTransitionState = T_TILE_CENTER; + } + } +} + +bool8 player_is_anim_in_certain_ranges(void) +{ + u8 movementActionId = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId; + + if (movementActionId <= MOVEMENT_ACTION_FACE_RIGHT_FAST + || (movementActionId >= MOVEMENT_ACTION_DELAY_1 && movementActionId <= MOVEMENT_ACTION_DELAY_16) + || (movementActionId >= MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN && movementActionId <= MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT) + || (movementActionId >= MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN && movementActionId <= MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT) + || (movementActionId >= MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN && movementActionId <= MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT)) + return TRUE; + else + return FALSE; +} + +bool8 sub_805BF58(void) +{ + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION) + return TRUE; + else + return FALSE; +} + +bool8 PlayerIsAnimActive(void) +{ + return ObjectEventIsMovementOverridden(&gObjectEvents[gPlayerAvatar.objectEventId]); +} + +bool8 PlayerCheckIfAnimFinishedOrInactive(void) +{ + return ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]); +} + +void PlayerSetCopyableMovement(u8 a) +{ + gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = a; +} + +u8 PlayerGetCopyableMovement(void) +{ + return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement; +} diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index c6b92b28c..c9a0fd1d5 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -13,7 +13,7 @@ static void ShowMonCB_UseStrength(void); bool8 SetUpFieldMove_Strength(void) { - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_STRENGTH_BOULDER) != TRUE) + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_PUSHABLE_BOULDER) != TRUE) { return FALSE; } diff --git a/src/item_use.c b/src/item_use.c index 6f81ee0e3..0b74e0726 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -263,10 +263,10 @@ void FieldUseFunc_MachBike(u8 taskId) behavior = MapGridGetMetatileBehaviorAt(x, y); if (FlagGet(FLAG_SYS_ON_CYCLING_ROAD) == TRUE - || MetatileBehavior_ReturnFalse_17(behavior) == TRUE - || MetatileBehavior_ReturnFalse_18(behavior) == TRUE - || MetatileBehavior_ReturnFalse_15(behavior) == TRUE - || MetatileBehavior_ReturnFalse_16(behavior) == TRUE) + || MetatileBehavior_IsVerticalRail(behavior) == TRUE + || MetatileBehavior_IsHorizontalRail(behavior) == TRUE + || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE + || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) sub_80A10C4(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451); else if (sub_8055C9C() == TRUE && !sub_80BD540()) { diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 988c9fad0..c937a3b48 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -191,7 +191,7 @@ bool8 MetatileBehavior_IsLadder(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsCaveDoor(u8 metatileBehavior) +bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior) { if(metatileBehavior == MB_CAVE_DOOR) return TRUE; @@ -677,11 +677,11 @@ bool8 MetatileBehavior_IsCyclingRoadPullDownTileGrass(u8 metatileBehavior) return metatileBehavior == MB_CYCLING_ROAD_PULL_DOWN_GRASS; } -bool8 MetatileBehavior_ReturnFalse_14(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_15(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsBumpySlope(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsIsolatedVerticalRail(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsVerticalRail(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior) { |