summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-23 21:42:35 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-23 21:42:35 -0400
commit5b3e9f376b2ed230df1d7e6d23e0239f69d10ba4 (patch)
tree6011f60d2398a5ebb78564de2a06e150d62b34f9 /src
parentf9a3607824d00f17999288e241fc3ad339716279 (diff)
through PlayerGetCopyableMovement
Diffstat (limited to 'src')
-rw-r--r--src/dynamic_placeholder_text_util.c2
-rw-r--r--src/event_data.c2
-rw-r--r--src/field_control_avatar.c2
-rw-r--r--src/field_fadetransition.c2
-rw-r--r--src/field_player_avatar.c238
-rw-r--r--src/fldeff_strength.c2
-rw-r--r--src/item_use.c8
-rw-r--r--src/metatile_behavior.c12
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)
{