Minor player avatar doc

This commit is contained in:
GriffinR 2020-04-01 02:54:26 -04:00
parent c2d95be156
commit 487080b425
6 changed files with 71 additions and 71 deletions

View file

@ -48,7 +48,7 @@ bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerFacingSurfableFishableWater(void); bool8 IsPlayerFacingSurfableFishableWater(void);
bool8 IsPlayerSurfingNorth(void); bool8 IsPlayerSurfingNorth(void);
void sub_808C228(u8 direction); void sub_808C228(u8 direction);
u8 sub_808BCD0(void); u8 GetPlayerAvatarFlags(void);
void sub_808B578(void); void sub_808B578(void);
u8 GetFRLGAvatarGraphicsIdByGender(u8); u8 GetFRLGAvatarGraphicsIdByGender(u8);
u8 GetRSAvatarGraphicsIdByGender(u8); u8 GetRSAvatarGraphicsIdByGender(u8);

View file

@ -304,7 +304,7 @@ enum
struct PlayerAvatar struct PlayerAvatar
{ {
/*0x00*/ u8 flags; /*0x00*/ u8 flags;
/*0x01*/ u8 unk1; // used to be named bike, but its definitely not that. seems to be some transition flags /*0x01*/ u8 transitionFlags; // used to be named bike, but its definitely not that. seems to be some transition flags
/*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving. /*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving.
/*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
/*0x04*/ u8 spriteId; /*0x04*/ u8 spriteId;

View file

@ -1754,7 +1754,7 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI
gPlayerAvatar.objectEventId = objectEventId; gPlayerAvatar.objectEventId = objectEventId;
gPlayerAvatar.spriteId = spriteId; gPlayerAvatar.spriteId = spriteId;
gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gObjectEvents[objectEventId].graphicsId); gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gObjectEvents[objectEventId].graphicsId);
SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, 0x20); SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_5);
} }
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)

View file

@ -59,8 +59,8 @@ static bool8 ForcedMovement_SlideSouth(void);
static bool8 ForcedMovement_SlideNorth(void); static bool8 ForcedMovement_SlideNorth(void);
static bool8 ForcedMovement_SlideWest(void); static bool8 ForcedMovement_SlideWest(void);
static bool8 ForcedMovement_SlideEast(void); static bool8 ForcedMovement_SlideEast(void);
static bool8 ForcedMovement_0xBB(void); static bool8 ForcedMovement_MatJump(void);
static bool8 ForcedMovement_0xBC(void); static bool8 ForcedMovement_MatSpin(void);
static bool8 ForcedMovement_MuddySlope(void); static bool8 ForcedMovement_MuddySlope(void);
static void MovePlayerNotOnBike(u8, u16); static void MovePlayerNotOnBike(u8, u16);
@ -99,10 +99,10 @@ static void PlayCollisionSoundIfNotFacingWarp(u8 a);
static void sub_808C280(struct ObjectEvent *); static void sub_808C280(struct ObjectEvent *);
static void StartStrengthAnim(u8, u8); static void StartStrengthAnim(u8, u8);
static void Task_BumpBoulder(u8 taskId); static void Task_PushBoulder(u8 taskId);
static u8 sub_808C3A4(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static u8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static u8 sub_808C484(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static void DoPlayerMatJump(void); static void DoPlayerMatJump(void);
static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
@ -182,8 +182,8 @@ static bool8 (*const sForcedMovementFuncs[])(void) =
ForcedMovement_SlideWest, ForcedMovement_SlideWest,
ForcedMovement_SlideEast, ForcedMovement_SlideEast,
ForcedMovement_PushedSouthByCurrent, ForcedMovement_PushedSouthByCurrent,
ForcedMovement_0xBB, ForcedMovement_MatJump,
ForcedMovement_0xBC, ForcedMovement_MatSpin,
ForcedMovement_MuddySlope, ForcedMovement_MuddySlope,
}; };
@ -211,16 +211,16 @@ static const u8 sAcroBikeTrickCollisionTypes[] = {
COLLISION_HORIZONTAL_RAIL, COLLISION_HORIZONTAL_RAIL,
}; };
static void (*const gUnknown_084974B8[])(struct ObjectEvent *) = static void (*const sPlayerAvatarTransitionFuncs[])(struct ObjectEvent *) =
{ {
PlayerAvatarTransition_Normal, [PLAYER_AVATAR_STATE_NORMAL] = PlayerAvatarTransition_Normal,
PlayerAvatarTransition_MachBike, [PLAYER_AVATAR_STATE_MACH_BIKE] = PlayerAvatarTransition_MachBike,
PlayerAvatarTransition_AcroBike, [PLAYER_AVATAR_STATE_ACRO_BIKE] = PlayerAvatarTransition_AcroBike,
PlayerAvatarTransition_Surfing, [PLAYER_AVATAR_STATE_SURFING] = PlayerAvatarTransition_Surfing,
PlayerAvatarTransition_Underwater, [PLAYER_AVATAR_STATE_UNDERWATER] = PlayerAvatarTransition_Underwater,
PlayerAvatarTransition_ReturnToField, [PLAYER_AVATAR_STATE_FIELD_MOVE] = PlayerAvatarTransition_ReturnToField,
PlayerAvatarTransition_Dummy, [PLAYER_AVATAR_STATE_FISHING] = PlayerAvatarTransition_Dummy,
PlayerAvatarTransition_Dummy, [PLAYER_AVATAR_STATE_WATERING] = PlayerAvatarTransition_Dummy,
}; };
static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) =
@ -259,23 +259,23 @@ static const u8 sFRLGAvatarGfxIds[] = {OBJ_EVENT_GFX_RED, OBJ_EVENT_GFX_LEAF};
static const u8 sRSAvatarGfxIds[] = {OBJ_EVENT_GFX_LINK_RS_BRENDAN, OBJ_EVENT_GFX_LINK_RS_MAY}; static const u8 sRSAvatarGfxIds[] = {OBJ_EVENT_GFX_LINK_RS_BRENDAN, OBJ_EVENT_GFX_LINK_RS_MAY};
static const u8 gUnknown_0849750C[2][5][2] = static const u8 sPlayerAvatarGfxToStateFlag[2][5][2] =
{ {
//male [MALE] =
{ {
{OBJ_EVENT_GFX_BRENDAN_NORMAL, 1}, {OBJ_EVENT_GFX_BRENDAN_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
{OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, 2}, {OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
{OBJ_EVENT_GFX_BRENDAN_ACRO_BIKE, 4}, {OBJ_EVENT_GFX_BRENDAN_ACRO_BIKE, PLAYER_AVATAR_FLAG_ACRO_BIKE},
{OBJ_EVENT_GFX_BRENDAN_SURFING, 8}, {OBJ_EVENT_GFX_BRENDAN_SURFING, PLAYER_AVATAR_FLAG_SURFING},
{OBJ_EVENT_GFX_BRENDAN_UNDERWATER, 16}, {OBJ_EVENT_GFX_BRENDAN_UNDERWATER, PLAYER_AVATAR_FLAG_UNDERWATER},
}, },
//female [FEMALE] =
{ {
{OBJ_EVENT_GFX_MAY_NORMAL, 1}, {OBJ_EVENT_GFX_MAY_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
{OBJ_EVENT_GFX_MAY_MACH_BIKE, 2}, {OBJ_EVENT_GFX_MAY_MACH_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
{OBJ_EVENT_GFX_MAY_ACRO_BIKE, 4}, {OBJ_EVENT_GFX_MAY_ACRO_BIKE, PLAYER_AVATAR_FLAG_ACRO_BIKE},
{OBJ_EVENT_GFX_MAY_SURFING, 8}, {OBJ_EVENT_GFX_MAY_SURFING, PLAYER_AVATAR_FLAG_SURFING},
{OBJ_EVENT_GFX_MAY_UNDERWATER, 16}, {OBJ_EVENT_GFX_MAY_UNDERWATER, PLAYER_AVATAR_FLAG_UNDERWATER},
} }
}; };
@ -287,11 +287,11 @@ static bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = //Duplicate of
MetatileBehavior_IsEastArrowWarp, MetatileBehavior_IsEastArrowWarp,
}; };
static bool8 (*const gUnknown_08497530[])(struct Task *, struct ObjectEvent *, struct ObjectEvent *) = static bool8 (*const sPushBoulderFuncs[])(struct Task *, struct ObjectEvent *, struct ObjectEvent *) =
{ {
sub_808C3A4, PushBoulder_Start,
do_boulder_dust, PushBoulder_Move,
sub_808C484, PushBoulder_End,
}; };
static bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = static bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) =
@ -547,13 +547,13 @@ static bool8 ForcedMovement_SlideEast(void)
return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2); return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2);
} }
static bool8 ForcedMovement_0xBB(void) static bool8 ForcedMovement_MatJump(void)
{ {
DoPlayerMatJump(); DoPlayerMatJump();
return TRUE; return TRUE;
} }
static bool8 ForcedMovement_0xBC(void) static bool8 ForcedMovement_MatSpin(void)
{ {
DoPlayerMatSpin(); DoPlayerMatSpin();
return TRUE; return TRUE;
@ -807,23 +807,23 @@ bool8 IsPlayerCollidingWithFarawayIslandMew(u8 direction)
void SetPlayerAvatarTransitionFlags(u16 transitionFlags) void SetPlayerAvatarTransitionFlags(u16 transitionFlags)
{ {
gPlayerAvatar.unk1 |= transitionFlags; gPlayerAvatar.transitionFlags |= transitionFlags;
DoPlayerAvatarTransition(); DoPlayerAvatarTransition();
} }
static void DoPlayerAvatarTransition(void) static void DoPlayerAvatarTransition(void)
{ {
u8 i; u8 i;
u8 flags = gPlayerAvatar.unk1; u8 flags = gPlayerAvatar.transitionFlags;
if (flags != 0) if (flags != 0)
{ {
for (i = 0; i < 8; i++, flags >>= 1) for (i = 0; i < ARRAY_COUNT(sPlayerAvatarTransitionFuncs); i++, flags >>= 1)
{ {
if (flags & 1) if (flags & 1)
gUnknown_084974B8[i](&gObjectEvents[gPlayerAvatar.objectEventId]); sPlayerAvatarTransitionFuncs[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
} }
gPlayerAvatar.unk1 = 0; gPlayerAvatar.transitionFlags = 0;
} }
} }
@ -1186,12 +1186,12 @@ void sub_808BC90(s16 x, s16 y)
MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y); MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y);
} }
u8 TestPlayerAvatarFlags(u8 a) u8 TestPlayerAvatarFlags(u8 flag)
{ {
return gPlayerAvatar.flags & a; return gPlayerAvatar.flags & flag;
} }
u8 sub_808BCD0(void) u8 GetPlayerAvatarFlags(void)
{ {
return gPlayerAvatar.flags; return gPlayerAvatar.flags;
} }
@ -1335,32 +1335,32 @@ static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
{ {
u8 i; u8 i;
for (i = 0; i < 5; i++) for (i = 0; i < ARRAY_COUNT(sPlayerAvatarGfxToStateFlag[0]); i++)
{ {
if (gUnknown_0849750C[gender][i][0] == graphicsId) if (sPlayerAvatarGfxToStateFlag[gender][i][0] == graphicsId)
return gUnknown_0849750C[gender][i][1]; return sPlayerAvatarGfxToStateFlag[gender][i][1];
} }
return 1; return PLAYER_AVATAR_FLAG_ON_FOOT;
} }
u8 GetPlayerAvatarGraphicsIdByCurrentState(void) u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
{ {
u8 i; u8 i;
u8 r5 = gPlayerAvatar.flags; u8 flags = gPlayerAvatar.flags;
for (i = 0; i < 5; i++) for (i = 0; i < ARRAY_COUNT(sPlayerAvatarGfxToStateFlag[0]); i++)
{ {
if (gUnknown_0849750C[gPlayerAvatar.gender][i][1] & r5) if (sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][1] & flags)
return gUnknown_0849750C[gPlayerAvatar.gender][i][0]; return sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][0];
} }
return 0; return 0;
} }
void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b) void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 transitionFlag)
{ {
u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); u8 stateFlag = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
gPlayerAvatar.unk1 |= unk | b; gPlayerAvatar.transitionFlags |= stateFlag | transitionFlag;
DoPlayerAvatarTransition(); DoPlayerAvatarTransition();
} }
@ -1384,7 +1384,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
playerObjEventTemplate.flagId = 0; playerObjEventTemplate.flagId = 0;
objectEventId = SpawnSpecialObjectEvent(&playerObjEventTemplate); objectEventId = SpawnSpecialObjectEvent(&playerObjEventTemplate);
objectEvent = &gObjectEvents[objectEventId]; objectEvent = &gObjectEvents[objectEventId];
objectEvent->isPlayer = 1; objectEvent->isPlayer = TRUE;
objectEvent->warpArrowSpriteId = CreateWarpArrowSprite(); objectEvent->warpArrowSpriteId = CreateWarpArrowSprite();
ObjectEventTurn(objectEvent, direction); ObjectEventTurn(objectEvent, direction);
ClearPlayerAvatarInfo(); ClearPlayerAvatarInfo();
@ -1453,22 +1453,22 @@ static void sub_808C280(struct ObjectEvent *objectEvent)
static void StartStrengthAnim(u8 a, u8 b) static void StartStrengthAnim(u8 a, u8 b)
{ {
u8 taskId = CreateTask(Task_BumpBoulder, 0xFF); u8 taskId = CreateTask(Task_PushBoulder, 0xFF);
gTasks[taskId].data[1] = a; gTasks[taskId].data[1] = a;
gTasks[taskId].data[2] = b; gTasks[taskId].data[2] = b;
Task_BumpBoulder(taskId); Task_PushBoulder(taskId);
} }
static void Task_BumpBoulder(u8 taskId) static void Task_PushBoulder(u8 taskId)
{ {
while (gUnknown_08497530[gTasks[taskId].data[0]](&gTasks[taskId], while (sPushBoulderFuncs[gTasks[taskId].data[0]](&gTasks[taskId],
&gObjectEvents[gPlayerAvatar.objectEventId], &gObjectEvents[gPlayerAvatar.objectEventId],
&gObjectEvents[gTasks[taskId].data[1]])) &gObjectEvents[gTasks[taskId].data[1]]))
; ;
} }
static bool8 sub_808C3A4(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
gPlayerAvatar.preventStep = TRUE; gPlayerAvatar.preventStep = TRUE;
@ -1476,7 +1476,7 @@ static bool8 sub_808C3A4(struct Task *task, struct ObjectEvent *playerObject, st
return FALSE; return FALSE;
} }
static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{ {
if (ObjectEventIsHeldMovementActive(playerObject)) if (ObjectEventIsHeldMovementActive(playerObject))
{ {
@ -1506,7 +1506,7 @@ static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject
return FALSE; return FALSE;
} }
static bool8 sub_808C484(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{ {
if (ObjectEventCheckHeldMovementStatus(playerObject) if (ObjectEventCheckHeldMovementStatus(playerObject)
&& ObjectEventCheckHeldMovementStatus(strengthObject)) && ObjectEventCheckHeldMovementStatus(strengthObject))
@ -1515,7 +1515,7 @@ static bool8 sub_808C484(struct Task *task, struct ObjectEvent *playerObject, st
ObjectEventClearHeldMovementIfFinished(strengthObject); ObjectEventClearHeldMovementIfFinished(strengthObject);
gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(FindTaskIdByFunc(Task_BumpBoulder)); DestroyTask(FindTaskIdByFunc(Task_PushBoulder));
} }
return FALSE; return FALSE;
} }
@ -1545,7 +1545,7 @@ static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent
if (task->data[1] > 1) if (task->data[1] > 1)
{ {
gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.preventStep = FALSE;
gPlayerAvatar.unk1 |= 0x20; gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_5;
DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump));
} }
} }

View file

@ -1260,7 +1260,7 @@ static void Task_WateringBerryTreeAnim_2(u8 taskId)
static void Task_WateringBerryTreeAnim_3(u8 taskId) static void Task_WateringBerryTreeAnim_3(u8 taskId)
{ {
SetPlayerAvatarTransitionFlags(sub_808BCD0()); SetPlayerAvatarTransitionFlags(GetPlayerAvatarFlags());
DestroyTask(taskId); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
} }

View file

@ -221,9 +221,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
static void ItemUseOnFieldCB_Bike(u8 taskId) static void ItemUseOnFieldCB_Bike(u8 taskId)
{ {
if (!ItemId_GetSecondaryId(gSpecialVar_ItemId)) if (!ItemId_GetSecondaryId(gSpecialVar_ItemId))
GetOnOffBike(2); GetOnOffBike(PLAYER_AVATAR_FLAG_MACH_BIKE);
else else
GetOnOffBike(4); GetOnOffBike(PLAYER_AVATAR_FLAG_ACRO_BIKE);
ScriptUnfreezeObjectEvents(); ScriptUnfreezeObjectEvents();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);