summaryrefslogtreecommitdiff
path: root/src/field_player_avatar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/field_player_avatar.c')
-rw-r--r--src/field_player_avatar.c164
1 files changed, 85 insertions, 79 deletions
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index cb2beacee..f0a8da7d7 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -4,11 +4,10 @@
#include "event_data.h"
#include "event_object_movement.h"
#include "field_camera.h"
-#include "field_player_avatar.h"
#include "field_effect.h"
#include "field_effect_helpers.h"
+#include "field_player_avatar.h"
#include "fieldmap.h"
-#include "global.fieldmap.h"
#include "menu.h"
#include "metatile_behavior.h"
#include "overworld.h"
@@ -25,6 +24,7 @@
#include "constants/abilities.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h"
+#include "constants/field_effects.h"
#include "constants/flags.h"
#include "constants/maps.h"
#include "constants/moves.h"
@@ -32,42 +32,18 @@
#include "constants/species.h"
static EWRAM_DATA u8 gUnknown_0203734C = 0;
-EWRAM_DATA struct EventObject gEventObjects[NUM_EVENT_OBJECTS] = {};
+EWRAM_DATA struct EventObject gEventObjects[EVENT_OBJECTS_COUNT] = {};
EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {};
-static void StartStrengthAnim(u8, u8);
-static bool8 ShouldJumpLedge(s16, s16, u8);
-static bool8 sub_808B1BC(s16, s16, u8);
-static u8 sub_808B164(struct EventObject *, s16, s16, u8, u8);
-static u8 sub_808B238(s16, s16, u8);
-static void check_acro_bike_metatile(s16, s16, u8, u8 *);
-static void PlayerNotOnBikeCollide(u8);
-static void PlayCollisionSoundIfNotFacingWarp(u8 a);
-static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8);
-static void PlayerRun(u8);
-static void MovePlayerNotOnBike(u8, u16);
-static u8 CheckMovementInputNotOnBike(u8);
-static void DoPlayerMatSpin(void);
-static void DoPlayerMatJump(void);
-static u8 CheckForPlayerAvatarCollision(u8);
+// static declarations
+
static u8 EventObjectCB2_NoMovement2();
-static void sub_808C280(struct EventObject *);
static bool8 TryInterruptEventObjectSpecialAnim(struct EventObject *, u8);
static void npc_clear_strange_bits(struct EventObject *);
-static void DoPlayerAvatarTransition(void);
-static bool8 player_is_anim_in_certain_ranges(void);
-static bool8 sub_808B618(void);
-static bool8 PlayerIsAnimActive(void);
-static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
-static bool8 TryDoMetatileBehaviorForcedMovement();
static void MovePlayerAvatarUsingKeypadInput(u8, u16, u16);
static void PlayerAllowForcedMovementIfMovingSameDirection();
-static u8 sub_808B028(u8);
+static bool8 TryDoMetatileBehaviorForcedMovement();
static u8 GetForcedMovementByMetatileBehavior();
-static void PlayerNotOnBikeNotMoving(u8, u16);
-static void PlayerNotOnBikeTurningInPlace(u8, u16);
-static void PlayerNotOnBikeMoving(u8, u16);
-static void sub_808C750(u8);
static bool8 ForcedMovement_None(void);
static bool8 ForcedMovement_Slip(void);
@@ -87,25 +63,63 @@ static bool8 ForcedMovement_0xBB(void);
static bool8 ForcedMovement_0xBC(void);
static bool8 ForcedMovement_MuddySlope(void);
+static void MovePlayerNotOnBike(u8, u16);
+static u8 CheckMovementInputNotOnBike(u8);
+static void PlayerNotOnBikeNotMoving(u8, u16);
+static void PlayerNotOnBikeTurningInPlace(u8, u16);
+static void PlayerNotOnBikeMoving(u8, u16);
+static u8 CheckForPlayerAvatarCollision(u8);
+static u8 sub_808B028(u8);
+static u8 sub_808B164(struct EventObject *, s16, s16, u8, u8);
+static bool8 sub_808B1BC(s16, s16, u8);
+static bool8 ShouldJumpLedge(s16, s16, u8);
+static u8 sub_808B238(s16, s16, u8);
+static void check_acro_bike_metatile(s16, s16, u8, u8 *);
+
+static void DoPlayerAvatarTransition(void);
+static void PlayerAvatarTransition_Dummy(struct EventObject *a);
static void PlayerAvatarTransition_Normal(struct EventObject *a);
static void PlayerAvatarTransition_MachBike(struct EventObject *a);
static void PlayerAvatarTransition_AcroBike(struct EventObject *a);
static void PlayerAvatarTransition_Surfing(struct EventObject *a);
static void PlayerAvatarTransition_Underwater(struct EventObject *a);
static void PlayerAvatarTransition_ReturnToField(struct EventObject *a);
-static void PlayerAvatarTransition_Dummy(struct EventObject *a);
+static bool8 player_is_anim_in_certain_ranges(void);
+static bool8 sub_808B618(void);
+static bool8 PlayerIsAnimActive(void);
+static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
+
+static void PlayerRun(u8);
+static void PlayerNotOnBikeCollide(u8);
+static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8);
+
+static void PlayCollisionSoundIfNotFacingWarp(u8 a);
+
+static void sub_808C280(struct EventObject *);
+
+static void StartStrengthAnim(u8, u8);
+static void Task_BumpBoulder(u8 taskId);
static u8 sub_808C3A4(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject);
static u8 do_boulder_dust(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject);
static u8 sub_808C484(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject);
+static void DoPlayerMatJump(void);
+static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct EventObject *eventObject);
+static void DoPlayerMatSpin(void);
+static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId);
static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct EventObject *eventObject);
static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct EventObject *eventObject);
static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct EventObject *eventObject);
static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct EventObject *eventObject);
+static void sub_808C750(u8);
+static void taskFF_0805D1D4(u8 taskId);
+static void sub_808C814(u8 taskId);
+
+static void Task_Fishing(u8 taskId);
static u8 Fishing1(struct Task *task);
static u8 Fishing2(struct Task *task);
static u8 Fishing3(struct Task *task);
@@ -122,8 +136,13 @@ static u8 Fishing13(struct Task *task);
static u8 Fishing14(struct Task *task);
static u8 Fishing15(struct Task *task);
static u8 Fishing16(struct Task *task);
+static void AlignFishingAnimationFrames(void);
-static bool8 (*const gUnknown_084973FC[])(u8) =
+static u8 sub_808D38C(struct EventObject *object, s16 *a1);
+
+// .rodata
+
+static bool8 (*const sForcedMovementTestFuncs[])(u8) =
{
MetatileBehavior_IsTrickHouseSlipperyFloor,
MetatileBehavior_IsIce_2,
@@ -145,7 +164,7 @@ static bool8 (*const gUnknown_084973FC[])(u8) =
MetatileBehavior_IsMuddySlope,
};
-static bool8 (*const gUnknown_08497444[])(void) =
+static bool8 (*const sForcedMovementFuncs[])(void) =
{
ForcedMovement_None,
ForcedMovement_Slip,
@@ -283,14 +302,15 @@ static bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task *, struct Eve
};
// .text
+
void MovementType_Player(struct Sprite *sprite)
{
- UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, EventObjectCB2_NoMovement2);
+ UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, EventObjectCB2_NoMovement2);
}
static u8 EventObjectCB2_NoMovement2(void)
{
- return 0;
+ return 0;
}
void player_step(u8 direction, u16 newKeys, u16 heldKeys)
@@ -380,7 +400,7 @@ static void PlayerAllowForcedMovementIfMovingSameDirection(void)
static bool8 TryDoMetatileBehaviorForcedMovement(void)
{
- return gUnknown_08497444[GetForcedMovementByMetatileBehavior()]();
+ return sForcedMovementFuncs[GetForcedMovementByMetatileBehavior()]();
}
static u8 GetForcedMovementByMetatileBehavior(void)
@@ -393,7 +413,7 @@ static u8 GetForcedMovementByMetatileBehavior(void)
for (i = 0; i < 18; i++)
{
- if (gUnknown_084973FC[i](metatileBehavior))
+ if (sForcedMovementTestFuncs[i](metatileBehavior))
return i + 1;
}
}
@@ -622,7 +642,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys)
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
{
- // speed 2 is fast, same speed as running
+ // speed 2 is fast, same speed as running
PlayerGoSpeed2(direction);
return;
}
@@ -728,18 +748,18 @@ static u8 sub_808B238(s16 x, s16 y, u8 direction)
{
u8 eventObjectId = GetEventObjectIdByXY(x, y);
- if (eventObjectId != 16 && gEventObjects[eventObjectId].graphicsId == 0x57)
+ if (eventObjectId != 16 && gEventObjects[eventObjectId].graphicsId == EVENT_OBJ_GFX_PUSHABLE_BOULDER)
+ {
+ x = gEventObjects[eventObjectId].currentCoords.x;
+ y = gEventObjects[eventObjectId].currentCoords.y;
+ MoveCoords(direction, &x, &y);
+ if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == 0
+ && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0)
{
- x = gEventObjects[eventObjectId].currentCoords.x;
- y = gEventObjects[eventObjectId].currentCoords.y;
- MoveCoords(direction, &x, &y);
- if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == 0
- && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0)
- {
- StartStrengthAnim(eventObjectId, direction);
- return 1;
- }
+ StartStrengthAnim(eventObjectId, direction);
+ return 1;
}
+ }
}
return 0;
}
@@ -981,7 +1001,7 @@ void PlayerGoSpeed4(u8 a)
PlayerSetAnimId(GetWalkFastestMovementAction(a), 2);
}
-void PlayerRun(u8 a)
+static void PlayerRun(u8 a)
{
PlayerSetAnimId(GetPlayerRunMovementAction(a), 2);
}
@@ -997,13 +1017,13 @@ void PlayerOnBikeCollideWithFarawayIslandMew(u8 a)
PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(a), 2);
}
-void PlayerNotOnBikeCollide(u8 a)
+static void PlayerNotOnBikeCollide(u8 a)
{
PlayCollisionSoundIfNotFacingWarp(a);
PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(a), 2);
}
-void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 a)
+static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 a)
{
PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(a), 2);
}
@@ -1450,8 +1470,6 @@ static void sub_808C280(struct EventObject *eventObject)
/* Strength */
-static void Task_BumpBoulder(u8 taskId);
-
static void StartStrengthAnim(u8 a, u8 b)
{
u8 taskId = CreateTask(Task_BumpBoulder, 0xFF);
@@ -1523,8 +1541,6 @@ static bool8 sub_808C484(struct Task *task, struct EventObject *playerObject, st
/* Some field effect */
-static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
-
static void DoPlayerMatJump(void)
{
DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF));
@@ -1557,8 +1573,6 @@ static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct EventObject
/* Some field effect */
-static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId);
-
static void DoPlayerMatSpin(void)
{
u8 taskId = CreateTask(PlayerAvatar_DoSecretBaseMatSpin, 0xFF);
@@ -1632,9 +1646,6 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Event
/* Some Field effect */
-static void taskFF_0805D1D4(u8 taskId);
-static void sub_808C814(u8 taskId);
-
static void sub_808C750(u8 a)
{
u8 taskId;
@@ -1699,9 +1710,6 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) =
Fishing16,
};
-static void Task_Fishing(u8 taskId);
-static void sub_808CF78(void);
-
#define tStep data[0]
#define tFrameCounter data[1]
#define tNumDots data[2]
@@ -1759,7 +1767,7 @@ static bool8 Fishing2(struct Task *task)
static bool8 Fishing3(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
// Wait one second
task->tFrameCounter++;
@@ -1791,7 +1799,7 @@ static bool8 Fishing5(struct Task *task)
{
const u8 dot[] = _("·");
- sub_808CF78();
+ AlignFishingAnimationFrames();
task->tFrameCounter++;
if (gMain.newKeys & A_BUTTON)
{
@@ -1827,7 +1835,7 @@ static bool8 Fishing6(struct Task *task)
{
bool8 bite;
- sub_808CF78();
+ AlignFishingAnimationFrames();
task->tStep++;
bite = FALSE;
@@ -1872,7 +1880,7 @@ static bool8 Fishing6(struct Task *task)
// Oh! A Bite!
static bool8 Fishing7(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
AddTextPrinterParameterized(0, 1, gText_OhABite, 0, 17, 0, NULL);
task->tStep++;
task->tFrameCounter = 0;
@@ -1884,7 +1892,7 @@ static bool8 Fishing8(struct Task *task)
{
const s16 reelTimeouts[3] = {36, 33, 30};
- sub_808CF78();
+ AlignFishingAnimationFrames();
task->tFrameCounter++;
if (task->tFrameCounter >= reelTimeouts[task->tFishingRod])
task->tStep = FISHING_GOT_AWAY;
@@ -1903,7 +1911,7 @@ static bool8 Fishing9(struct Task *task)
{70, 30}
};
- sub_808CF78();
+ AlignFishingAnimationFrames();
task->tStep++;
if (task->tRoundsPlayed < task->tMinRoundsRequired)
{
@@ -1922,7 +1930,7 @@ static bool8 Fishing9(struct Task *task)
static bool8 Fishing10(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
FillWindowPixelBuffer(0, 0x11);
AddTextPrinterParameterized2(0, 1, gText_PokemonOnHook, 1, 0, 2, 1, 3);
task->tStep++;
@@ -1933,7 +1941,7 @@ static bool8 Fishing10(struct Task *task)
static bool8 Fishing11(struct Task *task)
{
if (task->tFrameCounter == 0)
- sub_808CF78();
+ AlignFishingAnimationFrames();
RunTextPrinters();
@@ -1969,7 +1977,7 @@ static bool8 Fishing11(struct Task *task)
// Not even a nibble
static bool8 Fishing12(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
FillWindowPixelBuffer(0, 0x11);
AddTextPrinterParameterized2(0, 1, gText_NotEvenANibble, 1, 0, 2, 1, 3);
@@ -1980,7 +1988,7 @@ static bool8 Fishing12(struct Task *task)
// It got away
static bool8 Fishing13(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
FillWindowPixelBuffer(0, 0x11);
AddTextPrinterParameterized2(0, 1, gText_ItGotAway, 1, 0, 2, 1, 3);
@@ -1991,14 +1999,14 @@ static bool8 Fishing13(struct Task *task)
// Wait one second
static bool8 Fishing14(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
task->tStep++;
return FALSE;
}
static bool8 Fishing15(struct Task *task)
{
- sub_808CF78();
+ AlignFishingAnimationFrames();
if (gSprites[gPlayerAvatar.spriteId].animEnded)
{
struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
@@ -2033,7 +2041,7 @@ static bool8 Fishing16(struct Task *task)
#undef tFrameCounter
#undef tFishingRod
-static void sub_808CF78(void)
+static void AlignFishingAnimationFrames(void)
{
struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId];
u8 animCmdIndex;
@@ -2082,8 +2090,6 @@ static u8 sub_808D080(void)
return gUnknown_0203734C;
}
-static u8 sub_808D38C(struct EventObject *object, s16 *a1);
-
static void sub_808D094(u8 taskId)
{
struct EventObject *object = &gEventObjects[gPlayerAvatar.eventObjectId];
@@ -2114,7 +2120,7 @@ static void sub_808D094(u8 taskId)
data[3] -= data[2];
data[2] += 3;
sprite->pos1.y = data[3] >> 4;
- if (sprite->pos1.y + (s16)gUnknown_03005DE8 < -32)
+ if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32)
{
data[0]++;
}